diff --git a/Engine/lib/collada/src/dae/daeMetaGroup.cpp b/Engine/lib/collada/src/dae/daeMetaGroup.cpp index 0beb671518..f517034616 100644 --- a/Engine/lib/collada/src/dae/daeMetaGroup.cpp +++ b/Engine/lib/collada/src/dae/daeMetaGroup.cpp @@ -31,7 +31,7 @@ daeElement *daeMetaGroup::placeElement( daeElement *parent, daeElement *child, d (void)offset; daeString nm = child->getElementName(); if ( findChild( nm ) == NULL ) { - return false; + return NULL; } daeElementRef el; diff --git a/Engine/lib/convexDecomp/NvHashMap.h b/Engine/lib/convexDecomp/NvHashMap.h index 3d57da0dfa..c8dfd78778 100644 --- a/Engine/lib/convexDecomp/NvHashMap.h +++ b/Engine/lib/convexDecomp/NvHashMap.h @@ -692,9 +692,6 @@ namespace CONVEX_DECOMPOSITION mCapacity = t.mCapacity; copy(mData,t.mData,t.mSize); - mSize = t.mSize; - - return; } else { @@ -1521,7 +1518,7 @@ namespace CONVEX_DECOMPOSITION NX_INLINE const Entry *find(const Key &k) const { if(!mHash.size()) - return false; + return NULL; NxU32 h = hash(k); NxU32 index = mHash[h]; diff --git a/Engine/lib/epoxy/COPYING b/Engine/lib/epoxy/COPYING new file mode 100644 index 0000000000..b1d7941915 --- /dev/null +++ b/Engine/lib/epoxy/COPYING @@ -0,0 +1,51 @@ +The libepoxy project code is covered by the MIT license: + +/* + * Copyright © 2013-2014 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +The files in the registry directory (as well as the code dynamically generated +from them by gen_dispatch.py) are from the Khronos Group and appear under the +following license: + +/* + * Copyright (c) 2013 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + */ diff --git a/Engine/lib/epoxy/include/KHR/khrplatform.h b/Engine/lib/epoxy/include/KHR/khrplatform.h new file mode 100644 index 0000000000..c9e6f17d34 --- /dev/null +++ b/Engine/lib/epoxy/include/KHR/khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/Engine/lib/epoxy/include/epoxy/egl.h b/Engine/lib/epoxy/include/epoxy/egl.h new file mode 100644 index 0000000000..4e89cb5d6f --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/egl.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file egl.h + * + * Provides an implementation of an EGL dispatch layer using global + * function pointers + */ + +#ifndef EPOXY_EGL_H +#define EPOXY_EGL_H + +#if defined(__egl_h_) || defined(__eglext_h_) +# error epoxy/egl.h must be included before (or in place of) GL/egl.h +#else +# define __egl_h_ +# define __eglext_h_ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/egl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_egl_extension(EGLDisplay dpy, const char *extension); +EPOXY_IMPORTEXPORT int epoxy_egl_version(EGLDisplay dpy); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_EGL_H */ diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h new file mode 100644 index 0000000000..987f1415a4 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h @@ -0,0 +1,987 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +#include +typedef unsigned int EGLBoolean; +typedef unsigned int EGLenum; +typedef intptr_t EGLAttribKHR; +typedef intptr_t EGLAttrib; +typedef void *EGLClientBuffer; +typedef void *EGLConfig; +typedef void *EGLContext; +typedef void *EGLDeviceEXT; +typedef void *EGLDisplay; +typedef void *EGLImage; +typedef void *EGLImageKHR; +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +typedef void *EGLStreamKHR; +typedef void *EGLSurface; +typedef void *EGLSync; +typedef void *EGLSyncKHR; +typedef void *EGLSyncNV; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +typedef khronos_utime_nanoseconds_t EGLuint64NV; +typedef khronos_uint64_t EGLuint64KHR; +typedef int EGLNativeFileDescriptorKHR; +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +struct EGLClientPixmapHI { + void *pData; + EGLint iWidth; + EGLint iHeight; + EGLint iStride; +}; + +#define EGL_VERSION_1_0 1 +#define EGL_VERSION_1_1 1 +#define EGL_VERSION_1_2 1 +#define EGL_VERSION_1_3 1 +#define EGL_VERSION_1_4 1 +#define EGL_VERSION_1_5 1 + +#define EGL_ANDROID_blob_cache 1 +#define EGL_ANDROID_framebuffer_target 1 +#define EGL_ANDROID_image_native_buffer 1 +#define EGL_ANDROID_native_fence_sync 1 +#define EGL_ANDROID_recordable 1 +#define EGL_ANGLE_d3d_share_handle_client_buffer 1 +#define EGL_ANGLE_device_d3d 1 +#define EGL_ANGLE_query_surface_pointer 1 +#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 +#define EGL_ANGLE_window_fixed_size 1 +#define EGL_ARM_pixmap_multisample_discard 1 +#define EGL_EXT_buffer_age 1 +#define EGL_EXT_client_extensions 1 +#define EGL_EXT_create_context_robustness 1 +#define EGL_EXT_device_base 1 +#define EGL_EXT_device_drm 1 +#define EGL_EXT_device_enumeration 1 +#define EGL_EXT_device_openwf 1 +#define EGL_EXT_device_query 1 +#define EGL_EXT_image_dma_buf_import 1 +#define EGL_EXT_multiview_window 1 +#define EGL_EXT_output_base 1 +#define EGL_EXT_output_drm 1 +#define EGL_EXT_output_openwf 1 +#define EGL_EXT_platform_base 1 +#define EGL_EXT_platform_device 1 +#define EGL_EXT_platform_wayland 1 +#define EGL_EXT_platform_x11 1 +#define EGL_EXT_protected_surface 1 +#define EGL_EXT_stream_consumer_egloutput 1 +#define EGL_EXT_swap_buffers_with_damage 1 +#define EGL_EXT_yuv_surface 1 +#define EGL_HI_clientpixmap 1 +#define EGL_HI_colorformats 1 +#define EGL_IMG_context_priority 1 +#define EGL_KHR_cl_event 1 +#define EGL_KHR_cl_event2 1 +#define EGL_KHR_client_get_all_proc_addresses 1 +#define EGL_KHR_config_attribs 1 +#define EGL_KHR_create_context 1 +#define EGL_KHR_create_context_no_error 1 +#define EGL_KHR_fence_sync 1 +#define EGL_KHR_get_all_proc_addresses 1 +#define EGL_KHR_gl_colorspace 1 +#define EGL_KHR_gl_renderbuffer_image 1 +#define EGL_KHR_gl_texture_2D_image 1 +#define EGL_KHR_gl_texture_3D_image 1 +#define EGL_KHR_gl_texture_cubemap_image 1 +#define EGL_KHR_image 1 +#define EGL_KHR_image_base 1 +#define EGL_KHR_image_pixmap 1 +#define EGL_KHR_lock_surface 1 +#define EGL_KHR_lock_surface2 1 +#define EGL_KHR_lock_surface3 1 +#define EGL_KHR_partial_update 1 +#define EGL_KHR_platform_android 1 +#define EGL_KHR_platform_gbm 1 +#define EGL_KHR_platform_wayland 1 +#define EGL_KHR_platform_x11 1 +#define EGL_KHR_reusable_sync 1 +#define EGL_KHR_stream 1 +#define EGL_KHR_stream_consumer_gltexture 1 +#define EGL_KHR_stream_cross_process_fd 1 +#define EGL_KHR_stream_fifo 1 +#define EGL_KHR_stream_producer_aldatalocator 1 +#define EGL_KHR_stream_producer_eglsurface 1 +#define EGL_KHR_surfaceless_context 1 +#define EGL_KHR_swap_buffers_with_damage 1 +#define EGL_KHR_vg_parent_image 1 +#define EGL_KHR_wait_sync 1 +#define EGL_MESA_drm_image 1 +#define EGL_MESA_image_dma_buf_export 1 +#define EGL_MESA_platform_gbm 1 +#define EGL_NOK_swap_region 1 +#define EGL_NOK_swap_region2 1 +#define EGL_NOK_texture_from_pixmap 1 +#define EGL_NV_3dvision_surface 1 +#define EGL_NV_coverage_sample 1 +#define EGL_NV_coverage_sample_resolve 1 +#define EGL_NV_cuda_event 1 +#define EGL_NV_depth_nonlinear 1 +#define EGL_NV_device_cuda 1 +#define EGL_NV_native_query 1 +#define EGL_NV_post_convert_rounding 1 +#define EGL_NV_post_sub_buffer 1 +#define EGL_NV_stream_sync 1 +#define EGL_NV_sync 1 +#define EGL_NV_system_time 1 +#define EGL_TIZEN_image_native_buffer 1 +#define EGL_TIZEN_image_native_surface 1 + +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_IMAGE ((EGLImage)0) +#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) +#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0) +#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0) +#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_NO_SYNC ((EGLSync)0) +#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) +#define EGL_NO_SYNC_NV ((EGLSyncNV)0) +#define EGL_DONT_CARE ((EGLint)-1) +#define EGL_UNKNOWN ((EGLint)-1) +#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +#define EGL_DEPTH_ENCODING_NONE_NV 0 +#define EGL_FALSE 0 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 +#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 +#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 +#define EGL_OPENGL_ES3_BIT 0x00000040 +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#define EGL_OPENGL_ES_BIT 0x0001 +#define EGL_PBUFFER_BIT 0x0001 +#define EGL_READ_SURFACE_BIT_KHR 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 +#define EGL_OPENVG_BIT 0x0002 +#define EGL_PIXMAP_BIT 0x0002 +#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 +#define EGL_OPENGL_ES2_BIT 0x0004 +#define EGL_WINDOW_BIT 0x0004 +#define EGL_OPENGL_BIT 0x0008 +#define EGL_PBUFFER_IMAGE_BIT_TAO 0x0008 +#define EGL_INTEROP_BIT_KHR 0x0010 +#define EGL_PBUFFER_PALETTE_IMAGE_BIT_TAO 0x0010 +#define EGL_OPENMAX_IL_BIT_KHR 0x0020 +#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 +#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 +#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 +#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 +#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 +#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 +#define EGL_STREAM_BIT_KHR 0x0800 +#define EGL_SUCCESS 0x3000 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_BAD_ACCESS 0x3002 +#define EGL_BAD_ALLOC 0x3003 +#define EGL_BAD_ATTRIBUTE 0x3004 +#define EGL_BAD_CONFIG 0x3005 +#define EGL_BAD_CONTEXT 0x3006 +#define EGL_BAD_CURRENT_SURFACE 0x3007 +#define EGL_BAD_DISPLAY 0x3008 +#define EGL_BAD_MATCH 0x3009 +#define EGL_BAD_NATIVE_PIXMAP 0x300A +#define EGL_BAD_NATIVE_WINDOW 0x300B +#define EGL_BAD_PARAMETER 0x300C +#define EGL_BAD_SURFACE 0x300D +#define EGL_CONTEXT_LOST 0x300E +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_ALPHA_SIZE 0x3021 +#define EGL_BLUE_SIZE 0x3022 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_RED_SIZE 0x3024 +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_LEVEL 0x3029 +#define EGL_MAX_PBUFFER_HEIGHT 0x302A +#define EGL_MAX_PBUFFER_PIXELS 0x302B +#define EGL_MAX_PBUFFER_WIDTH 0x302C +#define EGL_NATIVE_RENDERABLE 0x302D +#define EGL_NATIVE_VISUAL_ID 0x302E +#define EGL_NATIVE_VISUAL_TYPE 0x302F +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 +#define EGL_NONE 0x3038 +#define EGL_BIND_TO_TEXTURE_RGB 0x3039 +#define EGL_BIND_TO_TEXTURE_RGBA 0x303A +#define EGL_MIN_SWAP_INTERVAL 0x303B +#define EGL_MAX_SWAP_INTERVAL 0x303C +#define EGL_LUMINANCE_SIZE 0x303D +#define EGL_ALPHA_MASK_SIZE 0x303E +#define EGL_COLOR_BUFFER_TYPE 0x303F +#define EGL_RENDERABLE_TYPE 0x3040 +#define EGL_MATCH_NATIVE_PIXMAP 0x3041 +#define EGL_CONFORMANT 0x3042 +#define EGL_CONFORMANT_KHR 0x3042 +#define EGL_MATCH_FORMAT_KHR 0x3043 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_TRANSPARENT_RGB 0x3052 +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_EXTENSIONS 0x3055 +#define EGL_HEIGHT 0x3056 +#define EGL_WIDTH 0x3057 +#define EGL_LARGEST_PBUFFER 0x3058 +#define EGL_DRAW 0x3059 +#define EGL_READ 0x305A +#define EGL_CORE_NATIVE_ENGINE 0x305B +#define EGL_NO_TEXTURE 0x305C +#define EGL_TEXTURE_RGB 0x305D +#define EGL_TEXTURE_RGBA 0x305E +#define EGL_TEXTURE_2D 0x305F +#define EGL_Y_INVERTED_NOK 0x307F +#define EGL_TEXTURE_FORMAT 0x3080 +#define EGL_TEXTURE_TARGET 0x3081 +#define EGL_MIPMAP_TEXTURE 0x3082 +#define EGL_MIPMAP_LEVEL 0x3083 +#define EGL_BACK_BUFFER 0x3084 +#define EGL_SINGLE_BUFFER 0x3085 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_COLORSPACE 0x3087 +#define EGL_VG_COLORSPACE 0x3087 +#define EGL_ALPHA_FORMAT 0x3088 +#define EGL_VG_ALPHA_FORMAT 0x3088 +#define EGL_COLORSPACE_sRGB 0x3089 +#define EGL_GL_COLORSPACE_SRGB 0x3089 +#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 +#define EGL_VG_COLORSPACE_sRGB 0x3089 +#define EGL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A +#define EGL_VG_COLORSPACE_LINEAR 0x308A +#define EGL_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_ALPHA_FORMAT_PRE 0x308C +#define EGL_VG_ALPHA_FORMAT_PRE 0x308C +#define EGL_CLIENT_APIS 0x308D +#define EGL_RGB_BUFFER 0x308E +#define EGL_LUMINANCE_BUFFER 0x308F +#define EGL_HORIZONTAL_RESOLUTION 0x3090 +#define EGL_VERTICAL_RESOLUTION 0x3091 +#define EGL_PIXEL_ASPECT_RATIO 0x3092 +#define EGL_SWAP_BEHAVIOR 0x3093 +#define EGL_BUFFER_PRESERVED 0x3094 +#define EGL_BUFFER_DESTROYED 0x3095 +#define EGL_OPENVG_IMAGE 0x3096 +#define EGL_CONTEXT_CLIENT_TYPE 0x3097 +#define EGL_CONTEXT_CLIENT_VERSION 0x3098 +#define EGL_CONTEXT_MAJOR_VERSION 0x3098 +#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 +#define EGL_MULTISAMPLE_RESOLVE 0x3099 +#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A +#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B +#define EGL_CL_EVENT_HANDLE 0x309C +#define EGL_CL_EVENT_HANDLE_KHR 0x309C +#define EGL_GL_COLORSPACE 0x309D +#define EGL_GL_COLORSPACE_KHR 0x309D +#define EGL_OPENGL_ES_API 0x30A0 +#define EGL_OPENVG_API 0x30A1 +#define EGL_OPENGL_API 0x30A2 +#define EGL_NATIVE_PIXMAP_KHR 0x30B0 +#define EGL_GL_TEXTURE_2D 0x30B1 +#define EGL_GL_TEXTURE_2D_KHR 0x30B1 +#define EGL_GL_TEXTURE_3D 0x30B2 +#define EGL_GL_TEXTURE_3D_KHR 0x30B2 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 +#define EGL_GL_RENDERBUFFER 0x30B9 +#define EGL_GL_RENDERBUFFER_KHR 0x30B9 +#define EGL_VG_PARENT_IMAGE_KHR 0x30BA +#define EGL_GL_TEXTURE_LEVEL 0x30BC +#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC +#define EGL_GL_TEXTURE_ZOFFSET 0x30BD +#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD +#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF +#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 +#define EGL_FORMAT_RGB_565_KHR 0x30C1 +#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 +#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 +#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 +#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 +#define EGL_BITMAP_POINTER_KHR 0x30C6 +#define EGL_BITMAP_PITCH_KHR 0x30C7 +#define EGL_BITMAP_ORIGIN_KHR 0x30C8 +#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 +#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA +#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB +#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC +#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD +#define EGL_LOWER_LEFT_KHR 0x30CE +#define EGL_UPPER_LEFT_KHR 0x30CF +#define EGL_IMAGE_PRESERVED 0x30D2 +#define EGL_IMAGE_PRESERVED_KHR 0x30D2 +#define EGL_SHARED_IMAGE_NOK 0x30DA +#define EGL_COVERAGE_BUFFERS_NV 0x30E0 +#define EGL_COVERAGE_SAMPLES_NV 0x30E1 +#define EGL_DEPTH_ENCODING_NV 0x30E2 +#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 +#define EGL_SYNC_STATUS_NV 0x30E7 +#define EGL_SIGNALED_NV 0x30E8 +#define EGL_UNSIGNALED_NV 0x30E9 +#define EGL_ALREADY_SIGNALED_NV 0x30EA +#define EGL_TIMEOUT_EXPIRED_NV 0x30EB +#define EGL_CONDITION_SATISFIED_NV 0x30EC +#define EGL_SYNC_TYPE_NV 0x30ED +#define EGL_SYNC_CONDITION_NV 0x30EE +#define EGL_SYNC_FENCE_NV 0x30EF +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 +#define EGL_SYNC_STATUS 0x30F1 +#define EGL_SYNC_STATUS_KHR 0x30F1 +#define EGL_SIGNALED 0x30F2 +#define EGL_SIGNALED_KHR 0x30F2 +#define EGL_UNSIGNALED 0x30F3 +#define EGL_UNSIGNALED_KHR 0x30F3 +#define EGL_TIMEOUT_EXPIRED 0x30F5 +#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 +#define EGL_CONDITION_SATISFIED 0x30F6 +#define EGL_CONDITION_SATISFIED_KHR 0x30F6 +#define EGL_SYNC_TYPE 0x30F7 +#define EGL_SYNC_TYPE_KHR 0x30F7 +#define EGL_SYNC_CONDITION 0x30F8 +#define EGL_SYNC_CONDITION_KHR 0x30F8 +#define EGL_SYNC_FENCE 0x30F9 +#define EGL_SYNC_FENCE_KHR 0x30F9 +#define EGL_SYNC_REUSABLE_KHR 0x30FA +#define EGL_CONTEXT_MINOR_VERSION 0x30FB +#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB +#define EGL_CONTEXT_FLAGS_KHR 0x30FC +#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD +#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD +#define EGL_SYNC_CL_EVENT 0x30FE +#define EGL_SYNC_CL_EVENT_KHR 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF +#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF +#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 +#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 +#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 +#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 +#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 +#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 +#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 +#define EGL_AUTO_STEREO_NV 0x3136 +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 +#define EGL_BUFFER_AGE_EXT 0x313D +#define EGL_BUFFER_AGE_KHR 0x313D +#define EGL_PLATFORM_DEVICE_EXT 0x313F +#define EGL_NATIVE_BUFFER_ANDROID 0x3140 +#define EGL_PLATFORM_ANDROID_KHR 0x3141 +#define EGL_RECORDABLE_ANDROID 0x3142 +#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 +#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 +#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 +#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 +#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD +#define EGL_NO_RESET_NOTIFICATION 0x31BE +#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE +#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF +#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF +#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 +#define EGL_DRM_BUFFER_USE_MESA 0x31D1 +#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 +#define EGL_DRM_BUFFER_MESA 0x31D3 +#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 +#define EGL_PLATFORM_X11_EXT 0x31D5 +#define EGL_PLATFORM_X11_KHR 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 +#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 +#define EGL_PLATFORM_GBM_KHR 0x31D7 +#define EGL_PLATFORM_GBM_MESA 0x31D7 +#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC +#define EGL_STREAM_TIME_NOW_KHR 0x31FD +#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE +#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF +#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 +#define EGL_FIXED_SIZE_ANGLE 0x3201 +#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 +#define EGL_PRODUCER_FRAME_KHR 0x3212 +#define EGL_CONSUMER_FRAME_KHR 0x3213 +#define EGL_STREAM_STATE_KHR 0x3214 +#define EGL_STREAM_STATE_CREATED_KHR 0x3215 +#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 +#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 +#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 +#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 +#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A +#define EGL_BAD_STREAM_KHR 0x321B +#define EGL_BAD_STATE_KHR 0x321C +#define EGL_BUFFER_COUNT_NV 0x321D +#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +#define EGL_SYNC_NEW_FRAME_NV 0x321F +#define EGL_BAD_DEVICE_EXT 0x322B +#define EGL_DEVICE_EXT 0x322C +#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D +#define EGL_BAD_OUTPUT_PORT_EXT 0x322E +#define EGL_SWAP_INTERVAL_EXT 0x322F +#define EGL_DRM_DEVICE_FILE_EXT 0x3233 +#define EGL_DRM_CRTC_EXT 0x3234 +#define EGL_DRM_PLANE_EXT 0x3235 +#define EGL_DRM_CONNECTOR_EXT 0x3236 +#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 +#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 +#define EGL_OPENWF_PORT_ID_EXT 0x3239 +#define EGL_CUDA_DEVICE_NV 0x323A +#define EGL_CUDA_EVENT_HANDLE_NV 0x323B +#define EGL_SYNC_CUDA_EVENT_NV 0x323C +#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D +#define EGL_LINUX_DMA_BUF_EXT 0x3270 +#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 +#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 +#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 +#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 +#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 +#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 +#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 +#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 +#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 +#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A +#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B +#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C +#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D +#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E +#define EGL_ITU_REC601_EXT 0x327F +#define EGL_ITU_REC709_EXT 0x3280 +#define EGL_ITU_REC2020_EXT 0x3281 +#define EGL_YUV_FULL_RANGE_EXT 0x3282 +#define EGL_YUV_NARROW_RANGE_EXT 0x3283 +#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 +#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 +#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 +#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 +#define EGL_PROTECTED_CONTENT_EXT 0x32C0 +#define EGL_YUV_BUFFER_EXT 0x3300 +#define EGL_YUV_ORDER_EXT 0x3301 +#define EGL_YUV_ORDER_YUV_EXT 0x3302 +#define EGL_YUV_ORDER_YVU_EXT 0x3303 +#define EGL_YUV_ORDER_YUYV_EXT 0x3304 +#define EGL_YUV_ORDER_UYVY_EXT 0x3305 +#define EGL_YUV_ORDER_YVYU_EXT 0x3306 +#define EGL_YUV_ORDER_VYUY_EXT 0x3307 +#define EGL_YUV_ORDER_AYUV_EXT 0x3308 +#define EGL_YUV_CSC_STANDARD_EXT 0x330A +#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B +#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C +#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D +#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 +#define EGL_YUV_SUBSAMPLE_EXT 0x3312 +#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 +#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 +#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 +#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 +#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 +#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 +#define EGL_YUV_PLANE_BPP_EXT 0x331A +#define EGL_YUV_PLANE_BPP_0_EXT 0x331B +#define EGL_YUV_PLANE_BPP_8_EXT 0x331C +#define EGL_YUV_PLANE_BPP_10_EXT 0x331D +#define EGL_D3D9_DEVICE_ANGLE 0x33A0 +#define EGL_D3D11_DEVICE_ANGLE 0x33A1 +#define EGL_COLOR_FORMAT_HI 0x8F70 +#define EGL_COLOR_RGB_HI 0x8F71 +#define EGL_COLOR_RGBA_HI 0x8F72 +#define EGL_COLOR_ARGB_HI 0x8F73 +#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 +#define EGL_FOREVER 0xFFFFFFFFFFFFFFFF +#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFF +#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFF +#define EGL_TRUE 1 +#define EGL_DISPLAY_SCALING 10000 + +typedef EGLBoolean (GLAPIENTRY *PFNEGLBINDAPIPROC)(EGLenum api); +typedef EGLBoolean (GLAPIENTRY *PFNEGLBINDTEXIMAGEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLCHOOSECONFIGPROC)(EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCPROC)(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCNVPROC)(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +typedef EGLBoolean (GLAPIENTRY *PFNEGLCOPYBUFFERSPROC)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +typedef EGLContext (GLAPIENTRY *PFNEGLCREATECONTEXTPROC)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list); +typedef EGLImageKHR (GLAPIENTRY *PFNEGLCREATEDRMIMAGEMESAPROC)(EGLDisplay dpy, const EGLint * attrib_list); +typedef EGLSyncNV (GLAPIENTRY *PFNEGLCREATEFENCESYNCNVPROC)(EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list); +typedef EGLImage (GLAPIENTRY *PFNEGLCREATEIMAGEPROC)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list); +typedef EGLImageKHR (GLAPIENTRY *PFNEGLCREATEIMAGEKHRPROC)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPBUFFERSURFACEPROC)(EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPIXMAPSURFACEPROC)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPIXMAPSURFACEHIPROC)(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMWINDOWSURFACEPROC)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list); +typedef EGLStreamKHR (GLAPIENTRY *PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +typedef EGLStreamKHR (GLAPIENTRY *PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESTREAMSYNCNVPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list); +typedef EGLSync (GLAPIENTRY *PFNEGLCREATESYNCPROC)(EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESYNC64KHRPROC)(EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESYNCKHRPROC)(EGLDisplay dpy, EGLenum type, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEWINDOWSURFACEPROC)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYCONTEXTPROC)(EGLDisplay dpy, EGLContext ctx); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYIMAGEPROC)(EGLDisplay dpy, EGLImage image); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYIMAGEKHRPROC)(EGLDisplay dpy, EGLImageKHR image); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSURFACEPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCPROC)(EGLDisplay dpy, EGLSync sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCNVPROC)(EGLSyncNV sync); +typedef EGLint (GLAPIENTRY *PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDMABUFIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDRMIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride); +typedef EGLBoolean (GLAPIENTRY *PFNEGLFENCENVPROC)(EGLSyncNV sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETCONFIGATTRIBPROC)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETCONFIGSPROC)(EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config); +typedef EGLContext (GLAPIENTRY *PFNEGLGETCURRENTCONTEXTPROC)(void); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETCURRENTDISPLAYPROC)(void); +typedef EGLSurface (GLAPIENTRY *PFNEGLGETCURRENTSURFACEPROC)(EGLint readdraw); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETDISPLAYPROC)(EGLNativeDisplayType display_id); +typedef EGLint (GLAPIENTRY *PFNEGLGETERRORPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETOUTPUTLAYERSEXTPROC)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETOUTPUTPORTSEXTPROC)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETPLATFORMDISPLAYPROC)(EGLenum platform, void * native_display, const EGLAttrib * attrib_list); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform, void * native_display, const EGLint * attrib_list); +typedef __eglMustCastToProperFunctionPointerType (GLAPIENTRY *PFNEGLGETPROCADDRESSPROC)(const char * procname); +typedef EGLNativeFileDescriptorKHR (GLAPIENTRY *PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBPROC)(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBNVPROC)(EGLSyncNV sync, EGLint attribute, EGLint * value); +typedef EGLuint64NV (GLAPIENTRY *PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)(void); +typedef EGLuint64NV (GLAPIENTRY *PFNEGLGETSYSTEMTIMENVPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLINITIALIZEPROC)(EGLDisplay dpy, EGLint * major, EGLint * minor); +typedef EGLBoolean (GLAPIENTRY *PFNEGLLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list); +typedef EGLBoolean (GLAPIENTRY *PFNEGLMAKECURRENTPROC)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +typedef EGLBoolean (GLAPIENTRY *PFNEGLOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLPOSTSUBBUFFERNVPROC)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +typedef EGLenum (GLAPIENTRY *PFNEGLQUERYAPIPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYCONTEXTPROC)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDEVICEATTRIBEXTPROC)(EGLDeviceEXT device, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYDEVICESTRINGEXTPROC)(EGLDeviceEXT device, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDEVICESEXTPROC)(EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDISPLAYATTRIBEXTPROC)(EGLDisplay dpy, EGLint attribute, EGLAttrib * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEDISPLAYNVPROC)(EGLDisplay dpy, EGLNativeDisplayType * display_id); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEPIXMAPNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEWINDOWNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYSTRINGPROC)(EGLDisplay dpy, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACE64KHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACEPOINTERANGLEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLRELEASETEXIMAGEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLRELEASETHREADPROC)(void); +typedef void (GLAPIENTRY *PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSETDAMAGEREGIONKHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSIGNALSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSIGNALSYNCNVPROC)(EGLSyncNV sync, EGLenum mode); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSURFACEATTRIBPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSREGION2NOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSREGIONNOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPINTERVALPROC)(EGLDisplay dpy, EGLint interval); +typedef EGLBoolean (GLAPIENTRY *PFNEGLTERMINATEPROC)(EGLDisplay dpy); +typedef EGLBoolean (GLAPIENTRY *PFNEGLUNLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITCLIENTPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITGLPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITNATIVEPROC)(EGLint engine); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITSYNCPROC)(EGLDisplay dpy, EGLSync sync, EGLint flags); +typedef EGLint (GLAPIENTRY *PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglBindAPI)(EGLenum api); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglBindTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglChooseConfig)(EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSync)(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSyncNV)(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); + +extern EPOXY_IMPORTEXPORT EGLContext (EPOXY_CALLSPEC *epoxy_eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImageKHR (EPOXY_CALLSPEC *epoxy_eglCreateDRMImageMESA)(EGLDisplay dpy, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncNV (EPOXY_CALLSPEC *epoxy_eglCreateFenceSyncNV)(EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImage (EPOXY_CALLSPEC *epoxy_eglCreateImage)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImageKHR (EPOXY_CALLSPEC *epoxy_eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePbufferFromClientBuffer)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePixmapSurface)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePixmapSurfaceHI)(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformPixmapSurface)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformPixmapSurfaceEXT)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformWindowSurface)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformWindowSurfaceEXT)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLStreamKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamFromFileDescriptorKHR)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); + +extern EPOXY_IMPORTEXPORT EGLStreamKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamKHR)(EGLDisplay dpy, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreateStreamProducerSurfaceKHR)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamSyncNV)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSync (EPOXY_CALLSPEC *epoxy_eglCreateSync)(EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateSync64KHR)(EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyContext)(EGLDisplay dpy, EGLContext ctx); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyImage)(EGLDisplay dpy, EGLImage image); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyStreamKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySurface)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySync)(EGLDisplay dpy, EGLSync sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySyncNV)(EGLSyncNV sync); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglDupNativeFenceFDANDROID)(EGLDisplay dpy, EGLSyncKHR sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDMABUFImageMESA)(EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDMABUFImageQueryMESA)(EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDRMImageMESA)(EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglFenceNV)(EGLSyncNV sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetConfigs)(EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config); + +extern EPOXY_IMPORTEXPORT EGLContext (EPOXY_CALLSPEC *epoxy_eglGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetCurrentDisplay)(void); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglGetCurrentSurface)(EGLint readdraw); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetDisplay)(EGLNativeDisplayType display_id); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglGetError)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetOutputLayersEXT)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetOutputPortsEXT)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetPlatformDisplay)(EGLenum platform, void * native_display, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetPlatformDisplayEXT)(EGLenum platform, void * native_display, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT __eglMustCastToProperFunctionPointerType (EPOXY_CALLSPEC *epoxy_eglGetProcAddress)(const char * procname); + +extern EPOXY_IMPORTEXPORT EGLNativeFileDescriptorKHR (EPOXY_CALLSPEC *epoxy_eglGetStreamFileDescriptorKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttrib)(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttribKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttribNV)(EGLSyncNV sync, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLuint64NV (EPOXY_CALLSPEC *epoxy_eglGetSystemTimeFrequencyNV)(void); + +extern EPOXY_IMPORTEXPORT EGLuint64NV (EPOXY_CALLSPEC *epoxy_eglGetSystemTimeNV)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglInitialize)(EGLDisplay dpy, EGLint * major, EGLint * minor); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglLockSurfaceKHR)(EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglOutputLayerAttribEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglOutputPortAttribEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglPostSubBufferNV)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); + +extern EPOXY_IMPORTEXPORT EGLenum (EPOXY_CALLSPEC *epoxy_eglQueryAPI)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryContext)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDeviceAttribEXT)(EGLDeviceEXT device, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryDeviceStringEXT)(EGLDeviceEXT device, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDevicesEXT)(EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDisplayAttribEXT)(EGLDisplay dpy, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativeDisplayNV)(EGLDisplay dpy, EGLNativeDisplayType * display_id); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativePixmapNV)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativeWindowNV)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryOutputLayerAttribEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryOutputLayerStringEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryOutputPortAttribEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryOutputPortStringEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamTimeKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamu64KHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryString)(EGLDisplay dpy, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurface)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurface64KHR)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurfacePointerANGLE)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglReleaseTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglReleaseThread)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_eglSetBlobCacheFuncsANDROID)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSetDamageRegionKHR)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSignalSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSignalSyncNV)(EGLSyncNV sync, EGLenum mode); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamAttribKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerAcquireKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerGLTextureExternalKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerOutputEXT)(EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerReleaseKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSurfaceAttrib)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersRegion2NOK)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersRegionNOK)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersWithDamageEXT)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersWithDamageKHR)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapInterval)(EGLDisplay dpy, EGLint interval); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglTerminate)(EGLDisplay dpy); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglUnlockSurfaceKHR)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitClient)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitGL)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitNative)(EGLint engine); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitSync)(EGLDisplay dpy, EGLSync sync, EGLint flags); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); + +#define eglBindAPI epoxy_eglBindAPI +#define eglBindTexImage epoxy_eglBindTexImage +#define eglChooseConfig epoxy_eglChooseConfig +#define eglClientWaitSync epoxy_eglClientWaitSync +#define eglClientWaitSyncKHR epoxy_eglClientWaitSyncKHR +#define eglClientWaitSyncNV epoxy_eglClientWaitSyncNV +#define eglCopyBuffers epoxy_eglCopyBuffers +#define eglCreateContext epoxy_eglCreateContext +#define eglCreateDRMImageMESA epoxy_eglCreateDRMImageMESA +#define eglCreateFenceSyncNV epoxy_eglCreateFenceSyncNV +#define eglCreateImage epoxy_eglCreateImage +#define eglCreateImageKHR epoxy_eglCreateImageKHR +#define eglCreatePbufferFromClientBuffer epoxy_eglCreatePbufferFromClientBuffer +#define eglCreatePbufferSurface epoxy_eglCreatePbufferSurface +#define eglCreatePixmapSurface epoxy_eglCreatePixmapSurface +#define eglCreatePixmapSurfaceHI epoxy_eglCreatePixmapSurfaceHI +#define eglCreatePlatformPixmapSurface epoxy_eglCreatePlatformPixmapSurface +#define eglCreatePlatformPixmapSurfaceEXT epoxy_eglCreatePlatformPixmapSurfaceEXT +#define eglCreatePlatformWindowSurface epoxy_eglCreatePlatformWindowSurface +#define eglCreatePlatformWindowSurfaceEXT epoxy_eglCreatePlatformWindowSurfaceEXT +#define eglCreateStreamFromFileDescriptorKHR epoxy_eglCreateStreamFromFileDescriptorKHR +#define eglCreateStreamKHR epoxy_eglCreateStreamKHR +#define eglCreateStreamProducerSurfaceKHR epoxy_eglCreateStreamProducerSurfaceKHR +#define eglCreateStreamSyncNV epoxy_eglCreateStreamSyncNV +#define eglCreateSync epoxy_eglCreateSync +#define eglCreateSync64KHR epoxy_eglCreateSync64KHR +#define eglCreateSyncKHR epoxy_eglCreateSyncKHR +#define eglCreateWindowSurface epoxy_eglCreateWindowSurface +#define eglDestroyContext epoxy_eglDestroyContext +#define eglDestroyImage epoxy_eglDestroyImage +#define eglDestroyImageKHR epoxy_eglDestroyImageKHR +#define eglDestroyStreamKHR epoxy_eglDestroyStreamKHR +#define eglDestroySurface epoxy_eglDestroySurface +#define eglDestroySync epoxy_eglDestroySync +#define eglDestroySyncKHR epoxy_eglDestroySyncKHR +#define eglDestroySyncNV epoxy_eglDestroySyncNV +#define eglDupNativeFenceFDANDROID epoxy_eglDupNativeFenceFDANDROID +#define eglExportDMABUFImageMESA epoxy_eglExportDMABUFImageMESA +#define eglExportDMABUFImageQueryMESA epoxy_eglExportDMABUFImageQueryMESA +#define eglExportDRMImageMESA epoxy_eglExportDRMImageMESA +#define eglFenceNV epoxy_eglFenceNV +#define eglGetConfigAttrib epoxy_eglGetConfigAttrib +#define eglGetConfigs epoxy_eglGetConfigs +#define eglGetCurrentContext epoxy_eglGetCurrentContext +#define eglGetCurrentDisplay epoxy_eglGetCurrentDisplay +#define eglGetCurrentSurface epoxy_eglGetCurrentSurface +#define eglGetDisplay epoxy_eglGetDisplay +#define eglGetError epoxy_eglGetError +#define eglGetOutputLayersEXT epoxy_eglGetOutputLayersEXT +#define eglGetOutputPortsEXT epoxy_eglGetOutputPortsEXT +#define eglGetPlatformDisplay epoxy_eglGetPlatformDisplay +#define eglGetPlatformDisplayEXT epoxy_eglGetPlatformDisplayEXT +#define eglGetProcAddress epoxy_eglGetProcAddress +#define eglGetStreamFileDescriptorKHR epoxy_eglGetStreamFileDescriptorKHR +#define eglGetSyncAttrib epoxy_eglGetSyncAttrib +#define eglGetSyncAttribKHR epoxy_eglGetSyncAttribKHR +#define eglGetSyncAttribNV epoxy_eglGetSyncAttribNV +#define eglGetSystemTimeFrequencyNV epoxy_eglGetSystemTimeFrequencyNV +#define eglGetSystemTimeNV epoxy_eglGetSystemTimeNV +#define eglInitialize epoxy_eglInitialize +#define eglLockSurfaceKHR epoxy_eglLockSurfaceKHR +#define eglMakeCurrent epoxy_eglMakeCurrent +#define eglOutputLayerAttribEXT epoxy_eglOutputLayerAttribEXT +#define eglOutputPortAttribEXT epoxy_eglOutputPortAttribEXT +#define eglPostSubBufferNV epoxy_eglPostSubBufferNV +#define eglQueryAPI epoxy_eglQueryAPI +#define eglQueryContext epoxy_eglQueryContext +#define eglQueryDeviceAttribEXT epoxy_eglQueryDeviceAttribEXT +#define eglQueryDeviceStringEXT epoxy_eglQueryDeviceStringEXT +#define eglQueryDevicesEXT epoxy_eglQueryDevicesEXT +#define eglQueryDisplayAttribEXT epoxy_eglQueryDisplayAttribEXT +#define eglQueryNativeDisplayNV epoxy_eglQueryNativeDisplayNV +#define eglQueryNativePixmapNV epoxy_eglQueryNativePixmapNV +#define eglQueryNativeWindowNV epoxy_eglQueryNativeWindowNV +#define eglQueryOutputLayerAttribEXT epoxy_eglQueryOutputLayerAttribEXT +#define eglQueryOutputLayerStringEXT epoxy_eglQueryOutputLayerStringEXT +#define eglQueryOutputPortAttribEXT epoxy_eglQueryOutputPortAttribEXT +#define eglQueryOutputPortStringEXT epoxy_eglQueryOutputPortStringEXT +#define eglQueryStreamKHR epoxy_eglQueryStreamKHR +#define eglQueryStreamTimeKHR epoxy_eglQueryStreamTimeKHR +#define eglQueryStreamu64KHR epoxy_eglQueryStreamu64KHR +#define eglQueryString epoxy_eglQueryString +#define eglQuerySurface epoxy_eglQuerySurface +#define eglQuerySurface64KHR epoxy_eglQuerySurface64KHR +#define eglQuerySurfacePointerANGLE epoxy_eglQuerySurfacePointerANGLE +#define eglReleaseTexImage epoxy_eglReleaseTexImage +#define eglReleaseThread epoxy_eglReleaseThread +#define eglSetBlobCacheFuncsANDROID epoxy_eglSetBlobCacheFuncsANDROID +#define eglSetDamageRegionKHR epoxy_eglSetDamageRegionKHR +#define eglSignalSyncKHR epoxy_eglSignalSyncKHR +#define eglSignalSyncNV epoxy_eglSignalSyncNV +#define eglStreamAttribKHR epoxy_eglStreamAttribKHR +#define eglStreamConsumerAcquireKHR epoxy_eglStreamConsumerAcquireKHR +#define eglStreamConsumerGLTextureExternalKHR epoxy_eglStreamConsumerGLTextureExternalKHR +#define eglStreamConsumerOutputEXT epoxy_eglStreamConsumerOutputEXT +#define eglStreamConsumerReleaseKHR epoxy_eglStreamConsumerReleaseKHR +#define eglSurfaceAttrib epoxy_eglSurfaceAttrib +#define eglSwapBuffers epoxy_eglSwapBuffers +#define eglSwapBuffersRegion2NOK epoxy_eglSwapBuffersRegion2NOK +#define eglSwapBuffersRegionNOK epoxy_eglSwapBuffersRegionNOK +#define eglSwapBuffersWithDamageEXT epoxy_eglSwapBuffersWithDamageEXT +#define eglSwapBuffersWithDamageKHR epoxy_eglSwapBuffersWithDamageKHR +#define eglSwapInterval epoxy_eglSwapInterval +#define eglTerminate epoxy_eglTerminate +#define eglUnlockSurfaceKHR epoxy_eglUnlockSurfaceKHR +#define eglWaitClient epoxy_eglWaitClient +#define eglWaitGL epoxy_eglWaitGL +#define eglWaitNative epoxy_eglWaitNative +#define eglWaitSync epoxy_eglWaitSync +#define eglWaitSyncKHR epoxy_eglWaitSyncKHR diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h new file mode 100644 index 0000000000..31d31e479d --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h @@ -0,0 +1,18958 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + * + * Copyright (c) 2013-2015 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + */ + +#pragma once +#include +#include + +#include +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLclampx; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef int GLsizei; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef unsigned short GLhalfARB; +typedef unsigned short GLhalf; +typedef GLint GLfixed; +typedef ptrdiff_t GLintptr; +typedef ptrdiff_t GLsizeiptr; +typedef int64_t GLint64; +typedef uint64_t GLuint64; +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +typedef int64_t GLint64EXT; +typedef uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; + +#define GL_ES_VERSION_2_0 1 +#define GL_ES_VERSION_3_0 1 +#define GL_ES_VERSION_3_1 1 +#define GL_ES_VERSION_3_2 1 +#define GL_VERSION_1_0 1 +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_VERSION_1_4 1 +#define GL_VERSION_1_5 1 +#define GL_VERSION_2_0 1 +#define GL_VERSION_2_1 1 +#define GL_VERSION_3_0 1 +#define GL_VERSION_3_1 1 +#define GL_VERSION_3_2 1 +#define GL_VERSION_3_3 1 +#define GL_VERSION_4_0 1 +#define GL_VERSION_4_1 1 +#define GL_VERSION_4_2 1 +#define GL_VERSION_4_3 1 +#define GL_VERSION_4_4 1 +#define GL_VERSION_4_5 1 +#define GL_VERSION_ES_CM_1_0 1 + +#define GL_3DFX_multisample 1 +#define GL_3DFX_tbuffer 1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_AMD_blend_minmax_factor 1 +#define GL_AMD_compressed_3DC_texture 1 +#define GL_AMD_compressed_ATC_texture 1 +#define GL_AMD_conservative_depth 1 +#define GL_AMD_debug_output 1 +#define GL_AMD_depth_clamp_separate 1 +#define GL_AMD_draw_buffers_blend 1 +#define GL_AMD_gcn_shader 1 +#define GL_AMD_gpu_shader_int64 1 +#define GL_AMD_interleaved_elements 1 +#define GL_AMD_multi_draw_indirect 1 +#define GL_AMD_name_gen_delete 1 +#define GL_AMD_occlusion_query_event 1 +#define GL_AMD_performance_monitor 1 +#define GL_AMD_pinned_memory 1 +#define GL_AMD_program_binary_Z400 1 +#define GL_AMD_query_buffer_object 1 +#define GL_AMD_sample_positions 1 +#define GL_AMD_seamless_cubemap_per_texture 1 +#define GL_AMD_shader_atomic_counter_ops 1 +#define GL_AMD_shader_stencil_export 1 +#define GL_AMD_shader_trinary_minmax 1 +#define GL_AMD_sparse_texture 1 +#define GL_AMD_stencil_operation_extended 1 +#define GL_AMD_texture_texture4 1 +#define GL_AMD_transform_feedback3_lines_triangles 1 +#define GL_AMD_transform_feedback4 1 +#define GL_AMD_vertex_shader_layer 1 +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_AMD_vertex_shader_viewport_index 1 +#define GL_ANDROID_extension_pack_es31a 1 +#define GL_ANGLE_depth_texture 1 +#define GL_ANGLE_framebuffer_blit 1 +#define GL_ANGLE_framebuffer_multisample 1 +#define GL_ANGLE_instanced_arrays 1 +#define GL_ANGLE_pack_reverse_row_order 1 +#define GL_ANGLE_program_binary 1 +#define GL_ANGLE_texture_compression_dxt3 1 +#define GL_ANGLE_texture_compression_dxt5 1 +#define GL_ANGLE_texture_usage 1 +#define GL_ANGLE_translated_shader_source 1 +#define GL_APPLE_aux_depth_stencil 1 +#define GL_APPLE_client_storage 1 +#define GL_APPLE_clip_distance 1 +#define GL_APPLE_color_buffer_packed_float 1 +#define GL_APPLE_copy_texture_levels 1 +#define GL_APPLE_element_array 1 +#define GL_APPLE_fence 1 +#define GL_APPLE_float_pixels 1 +#define GL_APPLE_flush_buffer_range 1 +#define GL_APPLE_framebuffer_multisample 1 +#define GL_APPLE_object_purgeable 1 +#define GL_APPLE_rgb_422 1 +#define GL_APPLE_row_bytes 1 +#define GL_APPLE_specular_vector 1 +#define GL_APPLE_sync 1 +#define GL_APPLE_texture_2D_limited_npot 1 +#define GL_APPLE_texture_format_BGRA8888 1 +#define GL_APPLE_texture_max_level 1 +#define GL_APPLE_texture_packed_float 1 +#define GL_APPLE_texture_range 1 +#define GL_APPLE_transform_hint 1 +#define GL_APPLE_vertex_array_object 1 +#define GL_APPLE_vertex_array_range 1 +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_APPLE_ycbcr_422 1 +#define GL_ARB_ES2_compatibility 1 +#define GL_ARB_ES3_1_compatibility 1 +#define GL_ARB_ES3_2_compatibility 1 +#define GL_ARB_ES3_compatibility 1 +#define GL_ARB_arrays_of_arrays 1 +#define GL_ARB_base_instance 1 +#define GL_ARB_bindless_texture 1 +#define GL_ARB_blend_func_extended 1 +#define GL_ARB_buffer_storage 1 +#define GL_ARB_cl_event 1 +#define GL_ARB_clear_buffer_object 1 +#define GL_ARB_clear_texture 1 +#define GL_ARB_clip_control 1 +#define GL_ARB_color_buffer_float 1 +#define GL_ARB_compatibility 1 +#define GL_ARB_compressed_texture_pixel_storage 1 +#define GL_ARB_compute_shader 1 +#define GL_ARB_compute_variable_group_size 1 +#define GL_ARB_conditional_render_inverted 1 +#define GL_ARB_conservative_depth 1 +#define GL_ARB_copy_buffer 1 +#define GL_ARB_copy_image 1 +#define GL_ARB_cull_distance 1 +#define GL_ARB_debug_output 1 +#define GL_ARB_depth_buffer_float 1 +#define GL_ARB_depth_clamp 1 +#define GL_ARB_depth_texture 1 +#define GL_ARB_derivative_control 1 +#define GL_ARB_direct_state_access 1 +#define GL_ARB_draw_buffers 1 +#define GL_ARB_draw_buffers_blend 1 +#define GL_ARB_draw_elements_base_vertex 1 +#define GL_ARB_draw_indirect 1 +#define GL_ARB_draw_instanced 1 +#define GL_ARB_enhanced_layouts 1 +#define GL_ARB_explicit_attrib_location 1 +#define GL_ARB_explicit_uniform_location 1 +#define GL_ARB_fragment_coord_conventions 1 +#define GL_ARB_fragment_layer_viewport 1 +#define GL_ARB_fragment_program 1 +#define GL_ARB_fragment_program_shadow 1 +#define GL_ARB_fragment_shader 1 +#define GL_ARB_fragment_shader_interlock 1 +#define GL_ARB_framebuffer_no_attachments 1 +#define GL_ARB_framebuffer_object 1 +#define GL_ARB_framebuffer_sRGB 1 +#define GL_ARB_geometry_shader4 1 +#define GL_ARB_get_program_binary 1 +#define GL_ARB_get_texture_sub_image 1 +#define GL_ARB_gpu_shader5 1 +#define GL_ARB_gpu_shader_fp64 1 +#define GL_ARB_gpu_shader_int64 1 +#define GL_ARB_half_float_pixel 1 +#define GL_ARB_half_float_vertex 1 +#define GL_ARB_imaging 1 +#define GL_ARB_indirect_parameters 1 +#define GL_ARB_instanced_arrays 1 +#define GL_ARB_internalformat_query 1 +#define GL_ARB_internalformat_query2 1 +#define GL_ARB_invalidate_subdata 1 +#define GL_ARB_map_buffer_alignment 1 +#define GL_ARB_map_buffer_range 1 +#define GL_ARB_matrix_palette 1 +#define GL_ARB_multi_bind 1 +#define GL_ARB_multi_draw_indirect 1 +#define GL_ARB_multisample 1 +#define GL_ARB_multitexture 1 +#define GL_ARB_occlusion_query 1 +#define GL_ARB_occlusion_query2 1 +#define GL_ARB_parallel_shader_compile 1 +#define GL_ARB_pipeline_statistics_query 1 +#define GL_ARB_pixel_buffer_object 1 +#define GL_ARB_point_parameters 1 +#define GL_ARB_point_sprite 1 +#define GL_ARB_post_depth_coverage 1 +#define GL_ARB_program_interface_query 1 +#define GL_ARB_provoking_vertex 1 +#define GL_ARB_query_buffer_object 1 +#define GL_ARB_robust_buffer_access_behavior 1 +#define GL_ARB_robustness 1 +#define GL_ARB_robustness_isolation 1 +#define GL_ARB_sample_locations 1 +#define GL_ARB_sample_shading 1 +#define GL_ARB_sampler_objects 1 +#define GL_ARB_seamless_cube_map 1 +#define GL_ARB_seamless_cubemap_per_texture 1 +#define GL_ARB_separate_shader_objects 1 +#define GL_ARB_shader_atomic_counter_ops 1 +#define GL_ARB_shader_atomic_counters 1 +#define GL_ARB_shader_ballot 1 +#define GL_ARB_shader_bit_encoding 1 +#define GL_ARB_shader_clock 1 +#define GL_ARB_shader_draw_parameters 1 +#define GL_ARB_shader_group_vote 1 +#define GL_ARB_shader_image_load_store 1 +#define GL_ARB_shader_image_size 1 +#define GL_ARB_shader_objects 1 +#define GL_ARB_shader_precision 1 +#define GL_ARB_shader_stencil_export 1 +#define GL_ARB_shader_storage_buffer_object 1 +#define GL_ARB_shader_subroutine 1 +#define GL_ARB_shader_texture_image_samples 1 +#define GL_ARB_shader_texture_lod 1 +#define GL_ARB_shader_viewport_layer_array 1 +#define GL_ARB_shading_language_100 1 +#define GL_ARB_shading_language_420pack 1 +#define GL_ARB_shading_language_include 1 +#define GL_ARB_shading_language_packing 1 +#define GL_ARB_shadow 1 +#define GL_ARB_shadow_ambient 1 +#define GL_ARB_sparse_buffer 1 +#define GL_ARB_sparse_texture 1 +#define GL_ARB_sparse_texture2 1 +#define GL_ARB_sparse_texture_clamp 1 +#define GL_ARB_stencil_texturing 1 +#define GL_ARB_sync 1 +#define GL_ARB_tessellation_shader 1 +#define GL_ARB_texture_barrier 1 +#define GL_ARB_texture_border_clamp 1 +#define GL_ARB_texture_buffer_object 1 +#define GL_ARB_texture_buffer_object_rgb32 1 +#define GL_ARB_texture_buffer_range 1 +#define GL_ARB_texture_compression 1 +#define GL_ARB_texture_compression_bptc 1 +#define GL_ARB_texture_compression_rgtc 1 +#define GL_ARB_texture_cube_map 1 +#define GL_ARB_texture_cube_map_array 1 +#define GL_ARB_texture_env_add 1 +#define GL_ARB_texture_env_combine 1 +#define GL_ARB_texture_env_crossbar 1 +#define GL_ARB_texture_env_dot3 1 +#define GL_ARB_texture_filter_minmax 1 +#define GL_ARB_texture_float 1 +#define GL_ARB_texture_gather 1 +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_ARB_texture_multisample 1 +#define GL_ARB_texture_non_power_of_two 1 +#define GL_ARB_texture_query_levels 1 +#define GL_ARB_texture_query_lod 1 +#define GL_ARB_texture_rectangle 1 +#define GL_ARB_texture_rg 1 +#define GL_ARB_texture_rgb10_a2ui 1 +#define GL_ARB_texture_stencil8 1 +#define GL_ARB_texture_storage 1 +#define GL_ARB_texture_storage_multisample 1 +#define GL_ARB_texture_swizzle 1 +#define GL_ARB_texture_view 1 +#define GL_ARB_timer_query 1 +#define GL_ARB_transform_feedback2 1 +#define GL_ARB_transform_feedback3 1 +#define GL_ARB_transform_feedback_instanced 1 +#define GL_ARB_transform_feedback_overflow_query 1 +#define GL_ARB_transpose_matrix 1 +#define GL_ARB_uniform_buffer_object 1 +#define GL_ARB_vertex_array_bgra 1 +#define GL_ARB_vertex_array_object 1 +#define GL_ARB_vertex_attrib_64bit 1 +#define GL_ARB_vertex_attrib_binding 1 +#define GL_ARB_vertex_blend 1 +#define GL_ARB_vertex_buffer_object 1 +#define GL_ARB_vertex_program 1 +#define GL_ARB_vertex_shader 1 +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#define GL_ARB_viewport_array 1 +#define GL_ARB_window_pos 1 +#define GL_ARM_mali_program_binary 1 +#define GL_ARM_mali_shader_binary 1 +#define GL_ARM_rgba8 1 +#define GL_ARM_shader_framebuffer_fetch 1 +#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 +#define GL_ATI_draw_buffers 1 +#define GL_ATI_element_array 1 +#define GL_ATI_envmap_bumpmap 1 +#define GL_ATI_fragment_shader 1 +#define GL_ATI_map_object_buffer 1 +#define GL_ATI_meminfo 1 +#define GL_ATI_pixel_format_float 1 +#define GL_ATI_pn_triangles 1 +#define GL_ATI_separate_stencil 1 +#define GL_ATI_text_fragment_shader 1 +#define GL_ATI_texture_env_combine3 1 +#define GL_ATI_texture_float 1 +#define GL_ATI_texture_mirror_once 1 +#define GL_ATI_vertex_array_object 1 +#define GL_ATI_vertex_attrib_array_object 1 +#define GL_ATI_vertex_streams 1 +#define GL_DMP_program_binary 1 +#define GL_DMP_shader_binary 1 +#define GL_EXT_422_pixels 1 +#define GL_EXT_YUV_target 1 +#define GL_EXT_abgr 1 +#define GL_EXT_base_instance 1 +#define GL_EXT_bgra 1 +#define GL_EXT_bindable_uniform 1 +#define GL_EXT_blend_color 1 +#define GL_EXT_blend_equation_separate 1 +#define GL_EXT_blend_func_extended 1 +#define GL_EXT_blend_func_separate 1 +#define GL_EXT_blend_logic_op 1 +#define GL_EXT_blend_minmax 1 +#define GL_EXT_blend_subtract 1 +#define GL_EXT_buffer_storage 1 +#define GL_EXT_clip_volume_hint 1 +#define GL_EXT_cmyka 1 +#define GL_EXT_color_buffer_float 1 +#define GL_EXT_color_buffer_half_float 1 +#define GL_EXT_color_subtable 1 +#define GL_EXT_compiled_vertex_array 1 +#define GL_EXT_convolution 1 +#define GL_EXT_coordinate_frame 1 +#define GL_EXT_copy_image 1 +#define GL_EXT_copy_texture 1 +#define GL_EXT_cull_vertex 1 +#define GL_EXT_debug_label 1 +#define GL_EXT_debug_marker 1 +#define GL_EXT_depth_bounds_test 1 +#define GL_EXT_direct_state_access 1 +#define GL_EXT_discard_framebuffer 1 +#define GL_EXT_disjoint_timer_query 1 +#define GL_EXT_draw_buffers 1 +#define GL_EXT_draw_buffers2 1 +#define GL_EXT_draw_buffers_indexed 1 +#define GL_EXT_draw_elements_base_vertex 1 +#define GL_EXT_draw_instanced 1 +#define GL_EXT_draw_range_elements 1 +#define GL_EXT_float_blend 1 +#define GL_EXT_fog_coord 1 +#define GL_EXT_framebuffer_blit 1 +#define GL_EXT_framebuffer_multisample 1 +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_EXT_framebuffer_object 1 +#define GL_EXT_framebuffer_sRGB 1 +#define GL_EXT_geometry_point_size 1 +#define GL_EXT_geometry_shader 1 +#define GL_EXT_geometry_shader4 1 +#define GL_EXT_gpu_program_parameters 1 +#define GL_EXT_gpu_shader4 1 +#define GL_EXT_gpu_shader5 1 +#define GL_EXT_histogram 1 +#define GL_EXT_index_array_formats 1 +#define GL_EXT_index_func 1 +#define GL_EXT_index_material 1 +#define GL_EXT_index_texture 1 +#define GL_EXT_instanced_arrays 1 +#define GL_EXT_light_texture 1 +#define GL_EXT_map_buffer_range 1 +#define GL_EXT_misc_attribute 1 +#define GL_EXT_multi_draw_arrays 1 +#define GL_EXT_multi_draw_indirect 1 +#define GL_EXT_multisample 1 +#define GL_EXT_multisampled_compatibility 1 +#define GL_EXT_multisampled_render_to_texture 1 +#define GL_EXT_multiview_draw_buffers 1 +#define GL_EXT_occlusion_query_boolean 1 +#define GL_EXT_packed_depth_stencil 1 +#define GL_EXT_packed_float 1 +#define GL_EXT_packed_pixels 1 +#define GL_EXT_paletted_texture 1 +#define GL_EXT_pixel_buffer_object 1 +#define GL_EXT_pixel_transform 1 +#define GL_EXT_pixel_transform_color_table 1 +#define GL_EXT_point_parameters 1 +#define GL_EXT_polygon_offset 1 +#define GL_EXT_polygon_offset_clamp 1 +#define GL_EXT_post_depth_coverage 1 +#define GL_EXT_primitive_bounding_box 1 +#define GL_EXT_provoking_vertex 1 +#define GL_EXT_pvrtc_sRGB 1 +#define GL_EXT_raster_multisample 1 +#define GL_EXT_read_format_bgra 1 +#define GL_EXT_render_snorm 1 +#define GL_EXT_rescale_normal 1 +#define GL_EXT_robustness 1 +#define GL_EXT_sRGB 1 +#define GL_EXT_sRGB_write_control 1 +#define GL_EXT_secondary_color 1 +#define GL_EXT_separate_shader_objects 1 +#define GL_EXT_separate_specular_color 1 +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_EXT_shader_image_load_formatted 1 +#define GL_EXT_shader_image_load_store 1 +#define GL_EXT_shader_implicit_conversions 1 +#define GL_EXT_shader_integer_mix 1 +#define GL_EXT_shader_io_blocks 1 +#define GL_EXT_shader_pixel_local_storage 1 +#define GL_EXT_shader_texture_lod 1 +#define GL_EXT_shadow_funcs 1 +#define GL_EXT_shadow_samplers 1 +#define GL_EXT_shared_texture_palette 1 +#define GL_EXT_sparse_texture 1 +#define GL_EXT_sparse_texture2 1 +#define GL_EXT_stencil_clear_tag 1 +#define GL_EXT_stencil_two_side 1 +#define GL_EXT_stencil_wrap 1 +#define GL_EXT_subtexture 1 +#define GL_EXT_tessellation_point_size 1 +#define GL_EXT_tessellation_shader 1 +#define GL_EXT_texture 1 +#define GL_EXT_texture3D 1 +#define GL_EXT_texture_array 1 +#define GL_EXT_texture_border_clamp 1 +#define GL_EXT_texture_buffer 1 +#define GL_EXT_texture_buffer_object 1 +#define GL_EXT_texture_compression_dxt1 1 +#define GL_EXT_texture_compression_latc 1 +#define GL_EXT_texture_compression_rgtc 1 +#define GL_EXT_texture_compression_s3tc 1 +#define GL_EXT_texture_cube_map 1 +#define GL_EXT_texture_cube_map_array 1 +#define GL_EXT_texture_env_add 1 +#define GL_EXT_texture_env_combine 1 +#define GL_EXT_texture_env_dot3 1 +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_EXT_texture_filter_minmax 1 +#define GL_EXT_texture_format_BGRA8888 1 +#define GL_EXT_texture_integer 1 +#define GL_EXT_texture_lod_bias 1 +#define GL_EXT_texture_mirror_clamp 1 +#define GL_EXT_texture_norm16 1 +#define GL_EXT_texture_object 1 +#define GL_EXT_texture_perturb_normal 1 +#define GL_EXT_texture_rg 1 +#define GL_EXT_texture_sRGB 1 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_EXT_texture_sRGB_RG8 1 +#define GL_EXT_texture_sRGB_decode 1 +#define GL_EXT_texture_shared_exponent 1 +#define GL_EXT_texture_snorm 1 +#define GL_EXT_texture_storage 1 +#define GL_EXT_texture_swizzle 1 +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#define GL_EXT_texture_view 1 +#define GL_EXT_timer_query 1 +#define GL_EXT_transform_feedback 1 +#define GL_EXT_unpack_subimage 1 +#define GL_EXT_vertex_array 1 +#define GL_EXT_vertex_array_bgra 1 +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_EXT_vertex_shader 1 +#define GL_EXT_vertex_weighting 1 +#define GL_EXT_x11_sync_object 1 +#define GL_FJ_shader_binary_GCCSO 1 +#define GL_GREMEDY_frame_terminator 1 +#define GL_GREMEDY_string_marker 1 +#define GL_HP_convolution_border_modes 1 +#define GL_HP_image_transform 1 +#define GL_HP_occlusion_test 1 +#define GL_HP_texture_lighting 1 +#define GL_IBM_cull_vertex 1 +#define GL_IBM_multimode_draw_arrays 1 +#define GL_IBM_rasterpos_clip 1 +#define GL_IBM_static_data 1 +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_IBM_vertex_array_lists 1 +#define GL_IMG_multisampled_render_to_texture 1 +#define GL_IMG_program_binary 1 +#define GL_IMG_read_format 1 +#define GL_IMG_shader_binary 1 +#define GL_IMG_texture_compression_pvrtc 1 +#define GL_IMG_texture_compression_pvrtc2 1 +#define GL_IMG_texture_env_enhanced_fixed_function 1 +#define GL_IMG_user_clip_plane 1 +#define GL_INGR_blend_func_separate 1 +#define GL_INGR_color_clamp 1 +#define GL_INGR_interlace_read 1 +#define GL_INTEL_fragment_shader_ordering 1 +#define GL_INTEL_framebuffer_CMAA 1 +#define GL_INTEL_map_texture 1 +#define GL_INTEL_parallel_arrays 1 +#define GL_INTEL_performance_query 1 +#define GL_KHR_blend_equation_advanced 1 +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_KHR_context_flush_control 1 +#define GL_KHR_debug 1 +#define GL_KHR_no_error 1 +#define GL_KHR_robust_buffer_access_behavior 1 +#define GL_KHR_robustness 1 +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_KHR_texture_compression_astc_ldr 1 +#define GL_MESAX_texture_stack 1 +#define GL_MESA_pack_invert 1 +#define GL_MESA_resize_buffers 1 +#define GL_MESA_window_pos 1 +#define GL_MESA_ycbcr_texture 1 +#define GL_NVX_conditional_render 1 +#define GL_NVX_gpu_memory_info 1 +#define GL_NV_bindless_multi_draw_indirect 1 +#define GL_NV_bindless_multi_draw_indirect_count 1 +#define GL_NV_bindless_texture 1 +#define GL_NV_blend_equation_advanced 1 +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_NV_blend_square 1 +#define GL_NV_command_list 1 +#define GL_NV_compute_program5 1 +#define GL_NV_conditional_render 1 +#define GL_NV_conservative_raster 1 +#define GL_NV_conservative_raster_dilate 1 +#define GL_NV_copy_buffer 1 +#define GL_NV_copy_depth_to_color 1 +#define GL_NV_copy_image 1 +#define GL_NV_coverage_sample 1 +#define GL_NV_deep_texture3D 1 +#define GL_NV_depth_buffer_float 1 +#define GL_NV_depth_clamp 1 +#define GL_NV_depth_nonlinear 1 +#define GL_NV_draw_buffers 1 +#define GL_NV_draw_instanced 1 +#define GL_NV_draw_texture 1 +#define GL_NV_evaluators 1 +#define GL_NV_explicit_attrib_location 1 +#define GL_NV_explicit_multisample 1 +#define GL_NV_fbo_color_attachments 1 +#define GL_NV_fence 1 +#define GL_NV_fill_rectangle 1 +#define GL_NV_float_buffer 1 +#define GL_NV_fog_distance 1 +#define GL_NV_fragment_coverage_to_color 1 +#define GL_NV_fragment_program 1 +#define GL_NV_fragment_program2 1 +#define GL_NV_fragment_program4 1 +#define GL_NV_fragment_program_option 1 +#define GL_NV_fragment_shader_interlock 1 +#define GL_NV_framebuffer_blit 1 +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_NV_framebuffer_multisample 1 +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_NV_generate_mipmap_sRGB 1 +#define GL_NV_geometry_program4 1 +#define GL_NV_geometry_shader4 1 +#define GL_NV_geometry_shader_passthrough 1 +#define GL_NV_gpu_program4 1 +#define GL_NV_gpu_program5 1 +#define GL_NV_gpu_program5_mem_extended 1 +#define GL_NV_gpu_shader5 1 +#define GL_NV_half_float 1 +#define GL_NV_image_formats 1 +#define GL_NV_instanced_arrays 1 +#define GL_NV_internalformat_sample_query 1 +#define GL_NV_light_max_exponent 1 +#define GL_NV_multisample_coverage 1 +#define GL_NV_multisample_filter_hint 1 +#define GL_NV_non_square_matrices 1 +#define GL_NV_occlusion_query 1 +#define GL_NV_packed_depth_stencil 1 +#define GL_NV_parameter_buffer_object 1 +#define GL_NV_parameter_buffer_object2 1 +#define GL_NV_path_rendering 1 +#define GL_NV_path_rendering_shared_edge 1 +#define GL_NV_pixel_data_range 1 +#define GL_NV_point_sprite 1 +#define GL_NV_polygon_mode 1 +#define GL_NV_present_video 1 +#define GL_NV_primitive_restart 1 +#define GL_NV_read_buffer 1 +#define GL_NV_read_buffer_front 1 +#define GL_NV_read_depth 1 +#define GL_NV_read_depth_stencil 1 +#define GL_NV_read_stencil 1 +#define GL_NV_register_combiners 1 +#define GL_NV_register_combiners2 1 +#define GL_NV_sRGB_formats 1 +#define GL_NV_sample_locations 1 +#define GL_NV_sample_mask_override_coverage 1 +#define GL_NV_shader_atomic_counters 1 +#define GL_NV_shader_atomic_float 1 +#define GL_NV_shader_atomic_fp16_vector 1 +#define GL_NV_shader_atomic_int64 1 +#define GL_NV_shader_buffer_load 1 +#define GL_NV_shader_buffer_store 1 +#define GL_NV_shader_noperspective_interpolation 1 +#define GL_NV_shader_storage_buffer_object 1 +#define GL_NV_shader_thread_group 1 +#define GL_NV_shader_thread_shuffle 1 +#define GL_NV_shadow_samplers_array 1 +#define GL_NV_shadow_samplers_cube 1 +#define GL_NV_tessellation_program5 1 +#define GL_NV_texgen_emboss 1 +#define GL_NV_texgen_reflection 1 +#define GL_NV_texture_barrier 1 +#define GL_NV_texture_border_clamp 1 +#define GL_NV_texture_compression_s3tc_update 1 +#define GL_NV_texture_compression_vtc 1 +#define GL_NV_texture_env_combine4 1 +#define GL_NV_texture_expand_normal 1 +#define GL_NV_texture_multisample 1 +#define GL_NV_texture_npot_2D_mipmap 1 +#define GL_NV_texture_rectangle 1 +#define GL_NV_texture_shader 1 +#define GL_NV_texture_shader2 1 +#define GL_NV_texture_shader3 1 +#define GL_NV_transform_feedback 1 +#define GL_NV_transform_feedback2 1 +#define GL_NV_uniform_buffer_unified_memory 1 +#define GL_NV_vdpau_interop 1 +#define GL_NV_vertex_array_range 1 +#define GL_NV_vertex_array_range2 1 +#define GL_NV_vertex_attrib_integer_64bit 1 +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_NV_vertex_program 1 +#define GL_NV_vertex_program1_1 1 +#define GL_NV_vertex_program2 1 +#define GL_NV_vertex_program2_option 1 +#define GL_NV_vertex_program3 1 +#define GL_NV_vertex_program4 1 +#define GL_NV_video_capture 1 +#define GL_NV_viewport_array 1 +#define GL_NV_viewport_array2 1 +#define GL_OES_EGL_image 1 +#define GL_OES_EGL_image_external 1 +#define GL_OES_EGL_image_external_essl3 1 +#define GL_OES_blend_equation_separate 1 +#define GL_OES_blend_func_separate 1 +#define GL_OES_blend_subtract 1 +#define GL_OES_byte_coordinates 1 +#define GL_OES_compressed_ETC1_RGB8_sub_texture 1 +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#define GL_OES_compressed_paletted_texture 1 +#define GL_OES_copy_image 1 +#define GL_OES_depth24 1 +#define GL_OES_depth32 1 +#define GL_OES_depth_texture 1 +#define GL_OES_draw_buffers_indexed 1 +#define GL_OES_draw_elements_base_vertex 1 +#define GL_OES_draw_texture 1 +#define GL_OES_element_index_uint 1 +#define GL_OES_extended_matrix_palette 1 +#define GL_OES_fbo_render_mipmap 1 +#define GL_OES_fixed_point 1 +#define GL_OES_fragment_precision_high 1 +#define GL_OES_framebuffer_object 1 +#define GL_OES_geometry_point_size 1 +#define GL_OES_geometry_shader 1 +#define GL_OES_get_program_binary 1 +#define GL_OES_gpu_shader5 1 +#define GL_OES_mapbuffer 1 +#define GL_OES_matrix_get 1 +#define GL_OES_matrix_palette 1 +#define GL_OES_packed_depth_stencil 1 +#define GL_OES_point_size_array 1 +#define GL_OES_point_sprite 1 +#define GL_OES_primitive_bounding_box 1 +#define GL_OES_query_matrix 1 +#define GL_OES_read_format 1 +#define GL_OES_required_internalformat 1 +#define GL_OES_rgb8_rgba8 1 +#define GL_OES_sample_shading 1 +#define GL_OES_sample_variables 1 +#define GL_OES_shader_image_atomic 1 +#define GL_OES_shader_io_blocks 1 +#define GL_OES_shader_multisample_interpolation 1 +#define GL_OES_single_precision 1 +#define GL_OES_standard_derivatives 1 +#define GL_OES_stencil1 1 +#define GL_OES_stencil4 1 +#define GL_OES_stencil8 1 +#define GL_OES_stencil_wrap 1 +#define GL_OES_surfaceless_context 1 +#define GL_OES_tessellation_point_size 1 +#define GL_OES_tessellation_shader 1 +#define GL_OES_texture_3D 1 +#define GL_OES_texture_border_clamp 1 +#define GL_OES_texture_buffer 1 +#define GL_OES_texture_compression_astc 1 +#define GL_OES_texture_cube_map 1 +#define GL_OES_texture_cube_map_array 1 +#define GL_OES_texture_env_crossbar 1 +#define GL_OES_texture_float 1 +#define GL_OES_texture_float_linear 1 +#define GL_OES_texture_half_float 1 +#define GL_OES_texture_half_float_linear 1 +#define GL_OES_texture_mirrored_repeat 1 +#define GL_OES_texture_npot 1 +#define GL_OES_texture_stencil8 1 +#define GL_OES_texture_storage_multisample_2d_array 1 +#define GL_OES_texture_view 1 +#define GL_OES_vertex_array_object 1 +#define GL_OES_vertex_half_float 1 +#define GL_OES_vertex_type_10_10_10_2 1 +#define GL_OML_interlace 1 +#define GL_OML_resample 1 +#define GL_OML_subsample 1 +#define GL_OVR_multiview 1 +#define GL_OVR_multiview2 1 +#define GL_PGI_misc_hints 1 +#define GL_PGI_vertex_hints 1 +#define GL_QCOM_alpha_test 1 +#define GL_QCOM_binning_control 1 +#define GL_QCOM_driver_control 1 +#define GL_QCOM_extended_get 1 +#define GL_QCOM_extended_get2 1 +#define GL_QCOM_perfmon_global_mode 1 +#define GL_QCOM_tiled_rendering 1 +#define GL_QCOM_writeonly_rendering 1 +#define GL_REND_screen_coordinates 1 +#define GL_S3_s3tc 1 +#define GL_SGIS_detail_texture 1 +#define GL_SGIS_fog_function 1 +#define GL_SGIS_generate_mipmap 1 +#define GL_SGIS_multisample 1 +#define GL_SGIS_pixel_texture 1 +#define GL_SGIS_point_line_texgen 1 +#define GL_SGIS_point_parameters 1 +#define GL_SGIS_sharpen_texture 1 +#define GL_SGIS_texture4D 1 +#define GL_SGIS_texture_border_clamp 1 +#define GL_SGIS_texture_color_mask 1 +#define GL_SGIS_texture_edge_clamp 1 +#define GL_SGIS_texture_filter4 1 +#define GL_SGIS_texture_lod 1 +#define GL_SGIS_texture_select 1 +#define GL_SGIX_async 1 +#define GL_SGIX_async_histogram 1 +#define GL_SGIX_async_pixel 1 +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_SGIX_calligraphic_fragment 1 +#define GL_SGIX_clipmap 1 +#define GL_SGIX_convolution_accuracy 1 +#define GL_SGIX_depth_pass_instrument 1 +#define GL_SGIX_depth_texture 1 +#define GL_SGIX_flush_raster 1 +#define GL_SGIX_fog_offset 1 +#define GL_SGIX_fragment_lighting 1 +#define GL_SGIX_framezoom 1 +#define GL_SGIX_igloo_interface 1 +#define GL_SGIX_instruments 1 +#define GL_SGIX_interlace 1 +#define GL_SGIX_ir_instrument1 1 +#define GL_SGIX_list_priority 1 +#define GL_SGIX_pixel_texture 1 +#define GL_SGIX_pixel_tiles 1 +#define GL_SGIX_polynomial_ffd 1 +#define GL_SGIX_reference_plane 1 +#define GL_SGIX_resample 1 +#define GL_SGIX_scalebias_hint 1 +#define GL_SGIX_shadow 1 +#define GL_SGIX_shadow_ambient 1 +#define GL_SGIX_sprite 1 +#define GL_SGIX_subsample 1 +#define GL_SGIX_tag_sample_buffer 1 +#define GL_SGIX_texture_add_env 1 +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_SGIX_texture_lod_bias 1 +#define GL_SGIX_texture_multi_buffer 1 +#define GL_SGIX_texture_scale_bias 1 +#define GL_SGIX_vertex_preclip 1 +#define GL_SGIX_ycrcb 1 +#define GL_SGIX_ycrcb_subsample 1 +#define GL_SGIX_ycrcba 1 +#define GL_SGI_color_matrix 1 +#define GL_SGI_color_table 1 +#define GL_SGI_texture_color_table 1 +#define GL_SUNX_constant_data 1 +#define GL_SUN_convolution_border_modes 1 +#define GL_SUN_global_alpha 1 +#define GL_SUN_mesh_array 1 +#define GL_SUN_slice_accum 1 +#define GL_SUN_triangle_list 1 +#define GL_SUN_vertex 1 +#define GL_VIV_shader_binary 1 +#define GL_WIN_phong_shading 1 +#define GL_WIN_specular_fog 1 + +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +#define GL_FALSE 0 +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_NONE 0 +#define GL_NONE_OES 0 +#define GL_NO_ERROR 0 +#define GL_ZERO 0 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_POINTS 0x0000 +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_CURRENT_BIT 0x00000001 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_RED_BIT_ATI 0x00000001 +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_POINT_BIT 0x00000002 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 +#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 +#define GL_LINE_BIT 0x00000004 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_POLYGON_BIT 0x00000008 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_FOG_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_HINT_BIT 0x00008000 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_LINES 0x0001 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_RESTART_SUN 0x0001 +#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_EVAL_BIT 0x00010000 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_LINE_LOOP 0x0002 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_LIST_BIT 0x00020000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_LINE_STRIP 0x0003 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_TRACE_ARRAYS_BIT_MESA 0x0004 +#define GL_TRIANGLES 0x0004 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_QUADS 0x0007 +#define GL_QUADS_EXT 0x0007 +#define GL_QUADS_OES 0x0007 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_QUAD_STRIP 0x0008 +#define GL_TRACE_TEXTURES_BIT_MESA 0x0008 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_POLYGON 0x0009 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINES_ADJACENCY_OES 0x000A +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_LINE_STRIP_ADJACENCY_OES 0x000B +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLES_ADJACENCY_OES 0x000C +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D +#define GL_PATCHES 0x000E +#define GL_PATCHES_EXT 0x000E +#define GL_PATCHES_OES 0x000E +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_TRACE_PIXELS_BIT_MESA 0x0010 +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#define GL_TRACE_ERRORS_BIT_MESA 0x0020 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_MAP_COHERENT_BIT_EXT 0x0080 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_BOLD_BIT_NV 0x01 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_ACCUM 0x0100 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_MOVE_TO_NV 0x02 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 +#define GL_NEVER 0x0200 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_LINE_TO_NV 0x04 +#define GL_FRONT_LEFT 0x0400 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506 +#define GL_CONTEXT_LOST 0x0507 +#define GL_CONTEXT_LOST_KHR 0x0507 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_EXP 0x0800 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_EXP2 0x0801 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LIST_MODE 0x0B30 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_MODE_NV 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_SHADE_MODEL 0x0B54 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_FOG 0x0B60 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_READ_BUFFER_NV 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_CLIP_PLANES_IMG 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_INDEX_BITS 0x0D51 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_TARGET 0x1006 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_2_BYTES_NV 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_3_BYTES_NV 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_4_BYTES_NV 0x1409 +#define GL_DOUBLE 0x140A +#define GL_DOUBLE_EXT 0x140A +#define GL_HALF_APPLE 0x140B +#define GL_HALF_FLOAT 0x140B +#define GL_HALF_FLOAT_ARB 0x140B +#define GL_HALF_FLOAT_NV 0x140B +#define GL_FIXED 0x140C +#define GL_FIXED_OES 0x140C +#define GL_INT64_ARB 0x140E +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_ARB 0x140F +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_XOR_NV 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_MODELVIEW 0x1700 +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_COLOR 0x1800 +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH 0x1801 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_EXT 0x1802 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_COLOR_INDEX 0x1900 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX_OES 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_RED_EXT 0x1903 +#define GL_RED_NV 0x1903 +#define GL_GREEN 0x1904 +#define GL_GREEN_NV 0x1904 +#define GL_BLUE 0x1905 +#define GL_BLUE_NV 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_BITMAP 0x1A00 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_POINT 0x1B00 +#define GL_POINT_NV 0x1B00 +#define GL_LINE 0x1B01 +#define GL_LINE_NV 0x1B01 +#define GL_FILL 0x1B02 +#define GL_FILL_NV 0x1B02 +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_S 0x2000 +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV 0x2300 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_LINEAR_NV 0x2400 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_LINEAR_NV 0x2401 +#define GL_SPHERE_MAP 0x2402 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_GEN_MODE_OES 0x2500 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_PLANE 0x2502 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_CLAMP 0x2900 +#define GL_REPEAT 0x2901 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 +#define GL_R3_G3_B2 0x2A10 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE0_APPLE 0x3000 +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE0_IMG 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE1_APPLE 0x3001 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE1_IMG 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE2_APPLE 0x3002 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE2_IMG 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE3_APPLE 0x3003 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE3_IMG 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE4_APPLE 0x3004 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE4_IMG 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE5_APPLE 0x3005 +#define GL_CLIP_PLANE5 0x3005 +#define GL_CLIP_PLANE5_IMG 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE6_APPLE 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_CLIP_DISTANCE7_APPLE 0x3007 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_LIGHT0 0x4000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_ABGR_EXT 0x8000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_ADD_OES 0x8006 +#define GL_MIN 0x8007 +#define GL_MIN_EXT 0x8007 +#define GL_MAX 0x8008 +#define GL_MAX_EXT 0x8008 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_EXT 0x8009 +#define GL_BLEND_EQUATION_OES 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_RGB_OES 0x8009 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_SUBTRACT_OES 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_OES 0x800B +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE 0x8016 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#define GL_RESCALE_NORMAL 0x803A +#define GL_RESCALE_NORMAL_EXT 0x803A +#define GL_ALPHA4 0x803B +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA8_OES 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16 0x803E +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16 0x804D +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4 0x804F +#define GL_RGB4_EXT 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB8_OES 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGBA8_OES 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#define GL_TEXTURE_3D_BINDING_OES 0x806A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_TEXTURE_3D_OES 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_VERTEX_ARRAY_KHR 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_INTERLACE_SGIX 0x8094 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_DST_RGB_OES 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_SRC_RGB_OES 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_DST_ALPHA_OES 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_BLEND_SRC_ALPHA_OES 0x80CB +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#define GL_COLOR_TABLE 0x80D0 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#define GL_BGR 0x80E0 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA_IMG 0x80E1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#define GL_CLAMP_TO_BORDER_EXT 0x812D +#define GL_CLAMP_TO_BORDER_NV 0x812D +#define GL_CLAMP_TO_BORDER_OES 0x812D +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#define GL_LIST_PRIORITY_SGIX 0x8182 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 +#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 +#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 +#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 +#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 +#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 +#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#define GL_WRAP_BORDER_SUN 0x81D4 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 +#define GL_INDEX 0x8222 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_RG 0x8227 +#define GL_RG_EXT 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R8_EXT 0x8229 +#define GL_R16 0x822A +#define GL_R16_EXT 0x822A +#define GL_RG8 0x822B +#define GL_RG8_EXT 0x822B +#define GL_RG16 0x822C +#define GL_RG16_EXT 0x822C +#define GL_R16F 0x822D +#define GL_R16F_EXT 0x822D +#define GL_R32F 0x822E +#define GL_R32F_EXT 0x822E +#define GL_RG16F 0x822F +#define GL_RG16F_EXT 0x822F +#define GL_RG32F 0x8230 +#define GL_RG32F_EXT 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_MAX_VIEWPORTS_NV 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_SUBPIXEL_BITS_EXT 0x825C +#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_VIEWPORT_BOUNDS_RANGE_EXT 0x825D +#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E +#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_EXT 0x825F +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_UNDEFINED_VERTEX_EXT 0x8260 +#define GL_UNDEFINED_VERTEX_OES 0x8260 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#define GL_NO_RESET_NOTIFICATION_KHR 0x8261 +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB +#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC +#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD +#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE +#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_BUFFER 0x82E0 +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_QUERY_KHR 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_PROGRAM_PIPELINE_KHR 0x82E4 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_SAMPLER 0x82E6 +#define GL_SAMPLER_KHR 0x82E6 +#define GL_DISPLAY_LIST 0x82E7 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_QUERY_TARGET 0x82EA +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC +#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 +#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 +#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 +#define GL_FRAGMENTS_INSTRUMENT_SGIX 0x8313 +#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX 0x8314 +#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX 0x8315 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#define GL_UNPACK_COMPRESSED_SIZE_SGIX 0x831A +#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B +#define GL_PACK_COMPRESSED_SIZE_SGIX 0x831C +#define GL_SLIM8U_SGIX 0x831D +#define GL_SLIM10U_SGIX 0x831E +#define GL_SLIM12S_SGIX 0x831F +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#define GL_ASYNC_MARKER_SGIX 0x8329 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#define GL_LINE_QUALITY_HINT_SGIX 0x835B +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_EXT 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#define GL_MIRRORED_REPEAT_OES 0x8370 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#define GL_SUBTRACT 0x84E7 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_COMBINE4_NV 0x8503 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_INCR_WRAP 0x8507 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_INCR_WRAP_OES 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_DECR_WRAP_EXT 0x8508 +#define GL_DECR_WRAP_OES 0x8508 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#define GL_NORMAL_MAP 0x8511 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_NORMAL_MAP_OES 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_REFLECTION_MAP_NV 0x8512 +#define GL_REFLECTION_MAP_OES 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_CUBE_MAP_OES 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_OES 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES 0x851C +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#define GL_INTERLACE_READ_INGR 0x8568 +#define GL_COMBINE 0x8570 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE 0x8573 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT 0x8576 +#define GL_CONSTANT_ARB 0x8576 +#define GL_CONSTANT_EXT 0x8576 +#define GL_CONSTANT_NV 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SRC0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SRC1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SRC2_RGB 0x8582 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_SRC2_ALPHA 0x858A +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_OPERAND2_ALPHA_EXT 0x859A +#define GL_OPERAND3_ALPHA_NV 0x859B +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#define GL_SLICE_ACCUM_SUN 0x85CC +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_DEPTH_CLAMP 0x864F +#define GL_DEPTH_CLAMP_NV 0x864F +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_MAX_VERTEX_UNITS_OES 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_TYPE_OES 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_STRIDE_OES 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_SIZE_OES 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_POINTER_OES 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_WEIGHT_ARRAY_OES 0x86AD +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_DOT3_RGBA_ARB 0x86AF +#define GL_DOT3_RGBA_IMG 0x86AF +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_Z400_BINARY_AMD 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 +#define GL_TRACE_MASK_MESA 0x8755 +#define GL_TRACE_NAME_MESA 0x8756 +#define GL_YCBCR_MESA 0x8757 +#define GL_PACK_INVERT_MESA 0x8758 +#define GL_DEBUG_OBJECT_MESA 0x8759 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_DEBUG_PRINT_MESA 0x875A +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_DEBUG_ASSERT_MESA 0x875B +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGB32F_ARB 0x8815 +#define GL_RGB32F_EXT 0x8815 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA16F 0x881A +#define GL_RGBA16F_ARB 0x881A +#define GL_RGBA16F_EXT 0x881A +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB16F 0x881B +#define GL_RGB16F_ARB 0x881B +#define GL_RGB16F_EXT 0x881B +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_ALPHA16F_EXT 0x881C +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_EQUATION_ALPHA_OES 0x883D +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MATRIX_PALETTE_OES 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_MAX_PALETTE_MATRICES_OES 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_CURRENT_PALETTE_MATRIX_OES 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_MATRIX_INDEX_ARRAY_OES 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_SIZE_OES 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_TYPE_OES 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#define GL_MATRIX_INDEX_ARRAY_POINTER_OES 0x8849 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#define GL_POINT_SPRITE 0x8861 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_POINT_SPRITE_OES 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_COORD_REPLACE_ARB 0x8862 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_COORD_REPLACE_OES 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F +#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_READ_ONLY 0x88B8 +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#define GL_WRITE_DISCARD_NV 0x88BE +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_ETC1_SRGB8_NV 0x88EE +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#define GL_SRC1_COLOR 0x88F9 +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_SAMPLER_BINDING 0x8919 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_FIXED_ONLY_ARB 0x891D +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A +#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B +#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C +#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D +#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E +#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_RGB_RAW_422_APPLE 0x8A51 +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 +#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x3_NV 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT2x4_NV 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x2_NV 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT3x4_NV 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x2_NV 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_FLOAT_MAT4x3_NV 0x8B6A +#define GL_DELETE_STATUS 0x8B80 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_POINT_SIZE_ARRAY_OES 0x8B9C +#define GL_TEXTURE_CROP_RECT_OES 0x8B9D +#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES 0x8B9E +#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F +#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8BB0 +#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8BB1 +#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8BB2 +#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8BB3 +#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8BB4 +#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8BB5 +#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8BB6 +#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8BB7 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#define GL_MODULATE_COLOR_IMG 0x8C04 +#define GL_RECIP_ADD_SIGNED_ALPHA_IMG 0x8C05 +#define GL_TEXTURE_ALPHA_MODULATE_IMG 0x8C06 +#define GL_FACTOR_ALPHA_MODULATE_IMG 0x8C07 +#define GL_FRAGMENT_ALPHA_MODULATE_IMG 0x8C08 +#define GL_ADD_BLEND_IMG 0x8C09 +#define GL_SGX_BINARY_IMG 0x8C0A +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_OES 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_SAMPLE_SHADING_OES 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R11F_G11F_B10F_APPLE 0x8C3A +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#define GL_RGB9_E5 0x8C3D +#define GL_RGB9_E5_APPLE 0x8C3D +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#define GL_SRGB 0x8C40 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB8_NV 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_PRIMITIVES_GENERATED_OES 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_OES 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BINDING_ANGLE 0x8CA7 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_RENDERBUFFER_BINDING_OES 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT0_OES 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_DEPTH_ATTACHMENT_OES 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_STENCIL_ATTACHMENT_OES 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_FRAMEBUFFER_OES 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_OES 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_WIDTH_OES 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_OES 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX8_OES 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_MAX_SAMPLES_NV 0x8D57 +#define GL_TEXTURE_GEN_STR_OES 0x8D60 +#define GL_HALF_FLOAT_OES 0x8D61 +#define GL_RGB565 0x8D62 +#define GL_RGB565_OES 0x8D62 +#define GL_ETC1_RGB8_OES 0x8D64 +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER 0x8D97 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_LAYER_NV 0x8DAA +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_BUFFER_OES 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_OES 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_TIMESTAMP 0x8E28 +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_VERTICES_EXT 0x8E72 +#define GL_PATCH_VERTICES_OES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_INNER_LEVEL_EXT 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_PATCH_DEFAULT_OUTER_LEVEL_EXT 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_MODE_EXT 0x8E76 +#define GL_TESS_GEN_MODE_OES 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_SPACING_EXT 0x8E77 +#define GL_TESS_GEN_SPACING_OES 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 +#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 +#define GL_TESS_GEN_POINT_MODE_OES 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_ISOLINES_EXT 0x8E7A +#define GL_ISOLINES_OES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_ODD_EXT 0x8E7B +#define GL_FRACTIONAL_ODD_OES 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_FRACTIONAL_EVEN_EXT 0x8E7C +#define GL_FRACTIONAL_EVEN_OES 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D +#define GL_MAX_PATCH_VERTICES_OES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E +#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 +#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 +#define GL_TESS_EVALUATION_SHADER_OES 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_CONTROL_SHADER_EXT 0x8E88 +#define GL_TESS_CONTROL_SHADER_OES 0x8E88 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_READ_BUFFER_NV 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_COPY_WRITE_BUFFER_NV 0x8F37 +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 +#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 +#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 +#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_R16_SNORM_EXT 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RG16_SNORM_EXT 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGB16_SNORM_EXT 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_RGBA16_SNORM_EXT 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#define GL_SR8_EXT 0x8FBD +#define GL_SRG8_EXT 0x8FBE +#define GL_SHADER_BINARY_VIV 0x8FC4 +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_BUFFER_OES 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_BUFFER_OES 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_RGB10_A2UI 0x906F +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E +#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_TEXTURE_SPARSE_EXT 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_UNPACK_FLIP_Y_WEBGL 0x9240 +#define GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL 0x9241 +#define GL_CONTEXT_LOST_WEBGL 0x9242 +#define GL_UNPACK_COLORSPACE_CONVERSION_WEBGL 0x9243 +#define GL_BROWSER_DEFAULT_WEBGL 0x9244 +#define GL_SHADER_BINARY_DMP 0x9250 +#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 +#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 +#define GL_DMP_PROGRAM_BINARY_DMP 0x9253 +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_R11_EAC_OES 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_SIGNED_R11_EAC_OES 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_RG11_EAC_OES 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_COMPRESSED_SIGNED_RG11_EAC_OES 0x9273 +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_RGB8_ETC2_OES 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_SRGB8_ETC2_OES 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_RGBA8_ETC2_EAC_OES 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_OES 0x9279 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_DISJOINT_NV 0x9283 +#define GL_CONJOINT_NV 0x9284 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#define GL_SRC_NV 0x9286 +#define GL_DST_NV 0x9287 +#define GL_SRC_OVER_NV 0x9288 +#define GL_DST_OVER_NV 0x9289 +#define GL_SRC_IN_NV 0x928A +#define GL_DST_IN_NV 0x928B +#define GL_SRC_OUT_NV 0x928C +#define GL_DST_OUT_NV 0x928D +#define GL_SRC_ATOP_NV 0x928E +#define GL_DST_ATOP_NV 0x928F +#define GL_PLUS_NV 0x9291 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_MULTIPLY 0x9294 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_MULTIPLY_NV 0x9294 +#define GL_SCREEN 0x9295 +#define GL_SCREEN_KHR 0x9295 +#define GL_SCREEN_NV 0x9295 +#define GL_OVERLAY 0x9296 +#define GL_OVERLAY_KHR 0x9296 +#define GL_OVERLAY_NV 0x9296 +#define GL_DARKEN 0x9297 +#define GL_DARKEN_KHR 0x9297 +#define GL_DARKEN_NV 0x9297 +#define GL_LIGHTEN 0x9298 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_LIGHTEN_NV 0x9298 +#define GL_COLORDODGE 0x9299 +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORDODGE_NV 0x9299 +#define GL_COLORBURN 0x929A +#define GL_COLORBURN_KHR 0x929A +#define GL_COLORBURN_NV 0x929A +#define GL_HARDLIGHT 0x929B +#define GL_HARDLIGHT_KHR 0x929B +#define GL_HARDLIGHT_NV 0x929B +#define GL_SOFTLIGHT 0x929C +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_SOFTLIGHT_NV 0x929C +#define GL_DIFFERENCE 0x929E +#define GL_DIFFERENCE_KHR 0x929E +#define GL_DIFFERENCE_NV 0x929E +#define GL_MINUS_NV 0x929F +#define GL_EXCLUSION 0x92A0 +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_CONTRAST_NV 0x92A1 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_HUE 0x92AD +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_SATURATION 0x92AE +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_HSL_COLOR 0x92AF +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_LUMINOSITY 0x92B0 +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_IS_PER_PATCH 0x92E7 +#define GL_IS_PER_PATCH_EXT 0x92E7 +#define GL_IS_PER_PATCH_OES 0x92E7 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 +#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#define GL_FILL_RECTANGLE_NV 0x933C +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_ZERO_TO_ONE 0x935F +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_FRAGMENT_INPUT_NV 0x936D +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_CONFORMANT_NV 0x9374 +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#define GL_BGRA8_EXT 0x93A1 +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 +#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 +#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 +#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 +#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 +#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 +#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 +#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 +#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 +#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_GS_SHADER_BINARY_MTK 0x9640 +#define GL_GS_PROGRAM_BINARY_MTK 0x9641 +#define GL_SHARED_EDGE_NV 0xC0 +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_TRACE_ALL_BITS_MESA 0xFFFF +#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFF +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_ONE 1 +#define GL_TRUE 1 +#define GL_VERSION_ES_CL_1_0 1 +#define GL_VERSION_ES_CL_1_1 1 +#define GL_VERSION_ES_CM_1_1 1 +#define GL_CULL_VERTEX_IBM 103050 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 + +typedef void (GLAPIENTRY *PFNGLACCUMPROC)(GLenum op, GLfloat value); +typedef void (GLAPIENTRY *PFNGLACCUMXOESPROC)(GLenum op, GLfixed value); +typedef void (GLAPIENTRY *PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESHADERPROGRAMEXTPROC)(GLuint pipeline, GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); +typedef void (GLAPIENTRY *PFNGLACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCQCOMPROC)(GLenum func, GLclampf ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCXPROC)(GLenum func, GLfixed ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCXOESPROC)(GLenum func, GLfixed ref); +typedef void (GLAPIENTRY *PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)(void); +typedef void (GLAPIENTRY *PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); +typedef GLboolean (GLAPIENTRY *PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint * programs, GLboolean * residences); +typedef GLboolean (GLAPIENTRY *PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef GLboolean (GLAPIENTRY *PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef void (GLAPIENTRY *PFNGLARRAYELEMENTPROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLARRAYELEMENTEXTPROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLASYNCMARKERSGIXPROC)(GLuint marker); +typedef void (GLAPIENTRY *PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); +typedef void (GLAPIENTRY *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAPIENTRY *PFNGLBEGINPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERNVXPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINFRAGMENTSHADERATIPROC)(void); +typedef void (GLAPIENTRY *PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAPIENTRY *PFNGLBEGINPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYEXTPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINVERTEXSHADEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAPIENTRY *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFEROESPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef GLuint (GLAPIENTRY *PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); +typedef GLuint (GLAPIENTRY *PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, GLuint texture); +typedef GLuint (GLAPIENTRY *PFNGLBINDPARAMETEREXTPROC)(GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFEROESPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +typedef void (GLAPIENTRY *PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); +typedef GLuint (GLAPIENTRY *PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYOESPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (GLAPIENTRY *PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINORMAL3BEXTPROC)(GLbyte bx, GLbyte by, GLbyte bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3DEXTPROC)(GLdouble bx, GLdouble by, GLdouble bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3FEXTPROC)(GLfloat bx, GLfloat by, GLfloat bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3IEXTPROC)(GLint bx, GLint by, GLint bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3SEXTPROC)(GLshort bx, GLshort by, GLshort bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); +typedef void (GLAPIENTRY *PFNGLBITMAPXOESPROC)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERKHRPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLBLENDCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONOESPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEOESPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIEXTPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIOESPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIEXTPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIOESPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEINGRPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEOESPROC)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIEXTPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIOESPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIEXTPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIOESPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDPARAMETERINVPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERANGLEPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERNVPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLBUFFERPAGECOMMITMENTARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLBUFFERSTORAGEEXTPROC)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data); +typedef void (GLAPIENTRY *PFNGLCALLCOMMANDLISTNVPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCALLLISTPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void * lists); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, GLenum target); +typedef void (GLAPIENTRY *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +typedef void (GLAPIENTRY *PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); +typedef void (GLAPIENTRY *PFNGLCLEARPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCLEARACCUMXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORXPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHPROC)(GLdouble depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHFPROC)(GLfloat d); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHFOESPROC)(GLclampf depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHXPROC)(GLfixed depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHXOESPROC)(GLfixed depth); +typedef void (GLAPIENTRY *PFNGLCLEARINDEXPROC)(GLfloat c); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLCLEARSTENCILPROC)(GLint s); +typedef void (GLAPIENTRY *PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); +typedef void (GLAPIENTRY *PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef GLenum (GLAPIENTRY *PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef GLenum (GLAPIENTRY *PFNGLCLIENTWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFPROC)(GLenum p, const GLfloat * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFIMGPROC)(GLenum p, const GLfloat * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXPROC)(GLenum plane, const GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXIMGPROC)(GLenum p, const GLfixed * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXOESPROC)(GLenum plane, const GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3XOESPROC)(GLfixed red, GLfixed green, GLfixed blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3XVOESPROC)(const GLfixed * components); +typedef void (GLAPIENTRY *PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4XPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4XOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4XVOESPROC)(const GLfixed * components); +typedef void (GLAPIENTRY *PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAPIENTRY *PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIOESPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY *PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments); +typedef void (GLAPIENTRY *PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERPROC)(GLuint shader); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)(GLenum pname, GLfloat value); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIPROC)(GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYBUFFERSUBDATANVPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAEXTPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATANVPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAOESPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); +typedef void (GLAPIENTRY *PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURELEVELSAPPLEPROC)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLCOVERSTROKEPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMASKNVPROC)(GLboolean mask); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMODULATIONNVPROC)(GLenum components); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMODULATIONTABLENVPROC)(GLsizei n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOVERAGEOPERATIONNVPROC)(GLenum operation); +typedef void (GLAPIENTRY *PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint * lists); +typedef void (GLAPIENTRY *PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLCREATEPERFQUERYINTELPROC)(GLuint queryId, GLuint * queryHandle); +typedef GLuint (GLAPIENTRY *PFNGLCREATEPROGRAMPROC)(void); +typedef GLhandleARB (GLAPIENTRY *PFNGLCREATEPROGRAMOBJECTARBPROC)(void); +typedef void (GLAPIENTRY *PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROC)(GLenum type); +typedef GLhandleARB (GLAPIENTRY *PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar * string); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const* strings); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMVEXTPROC)(GLenum type, GLsizei count, const GLchar ** strings); +typedef void (GLAPIENTRY *PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint * states); +typedef GLsync (GLAPIENTRY *PFNGLCREATESYNCFROMCLEVENTARBPROC)(struct _cl_context * context, struct _cl_event * event, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLCULLFACEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); +typedef void (GLAPIENTRY *PFNGLCURRENTPALETTEMATRIXOESPROC)(GLuint matrixpaletteindex); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKKHRPROC)(GLDEBUGPROCKHR callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLKHRPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTKHRPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEFORMSGIXPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLDEFORMATIONMAP3DSGIXPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLDEFORMATIONMAP3FSGIXPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint * lists); +typedef void (GLAPIENTRY *PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAPIENTRY *PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAPIENTRY *PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSOESPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETELISTSPROC)(GLuint list, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, const GLuint * names); +typedef void (GLAPIENTRY *PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); +typedef void (GLAPIENTRY *PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAPIENTRY *PFNGLDELETEPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPIPELINESEXTPROC)(GLsizei n, const GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESEXTPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSOESPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint * samplers); +typedef void (GLAPIENTRY *PFNGLDELETESHADERPROC)(GLuint shader); +typedef void (GLAPIENTRY *PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint * states); +typedef void (GLAPIENTRY *PFNGLDELETESYNCPROC)(GLsync sync); +typedef void (GLAPIENTRY *PFNGLDELETESYNCAPPLEPROC)(GLsync sync); +typedef void (GLAPIENTRY *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSOESPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); +typedef void (GLAPIENTRY *PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); +typedef void (GLAPIENTRY *PFNGLDEPTHFUNCPROC)(GLenum func); +typedef void (GLAPIENTRY *PFNGLDEPTHMASKPROC)(GLboolean flag); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEPROC)(GLdouble hither, GLdouble yon); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEARRAYFVNVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEINDEXEDFNVPROC)(GLuint index, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEXPROC)(GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEXOESPROC)(GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj); +typedef void (GLAPIENTRY *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAPIENTRY *PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLDISABLEPROC)(GLenum cap); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); +typedef void (GLAPIENTRY *PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEINVPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIOESPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISCARDFRAMEBUFFEREXTPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDANGLEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDNVPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERPROC)(GLenum buf); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSEXTPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSINDEXEDEXTPROC)(GLint n, const GLenum * location, const GLint * indices); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSNVPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSNVPROC)(GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDNVPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, GLsizei width); +typedef void (GLAPIENTRY *PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWTEXFOESPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXFVOESPROC)(const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXIOESPROC)(GLint x, GLint y, GLint z, GLint width, GLint height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXIVOESPROC)(const GLint * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXSOESPROC)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXSVOESPROC)(const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXTURENVPROC)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void (GLAPIENTRY *PFNGLDRAWTEXXOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXXVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLeglImageOES image); +typedef void (GLAPIENTRY *PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)(GLenum target, GLeglImageOES image); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPROC)(GLboolean flag); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean * pointer); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGVPROC)(const GLboolean * flag); +typedef void (GLAPIENTRY *PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void * pointer); +typedef void (GLAPIENTRY *PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void * pointer); +typedef void (GLAPIENTRY *PFNGLENABLEPROC)(GLenum cap); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); +typedef void (GLAPIENTRY *PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEINVPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIOESPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENDPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERNVXPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDFRAGMENTSHADERATIPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDLISTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDOCCLUSIONQUERYNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAPIENTRY *PFNGLENDPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLENDQUERYPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYARBPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENDTILINGQCOMPROC)(GLbitfield preserveMask); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDVERTEXSHADEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1DPROC)(GLdouble u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1DVPROC)(const GLdouble * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1FPROC)(GLfloat u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1FVPROC)(const GLfloat * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1XOESPROC)(GLfixed u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2DVPROC)(const GLdouble * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2FVPROC)(const GLfloat * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2XOESPROC)(GLfixed u, GLfixed v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); +typedef void (GLAPIENTRY *PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2); +typedef void (GLAPIENTRY *PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +typedef void (GLAPIENTRY *PFNGLEVALPOINT1PROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLEVALPOINT2PROC)(GLint i, GLint j); +typedef void (GLAPIENTRY *PFNGLEVALUATEDEPTHVALUESARBPROC)(void); +typedef void (GLAPIENTRY *PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLEXTGETBUFFERPOINTERVQCOMPROC)(GLenum target, void ** params); +typedef void (GLAPIENTRY *PFNGLEXTGETBUFFERSQCOMPROC)(GLuint * buffers, GLint maxBuffers, GLint * numBuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETFRAMEBUFFERSQCOMPROC)(GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC)(GLuint program, GLenum shadertype, GLchar * source, GLint * length); +typedef void (GLAPIENTRY *PFNGLEXTGETPROGRAMSQCOMPROC)(GLuint * programs, GLint maxPrograms, GLint * numPrograms); +typedef void (GLAPIENTRY *PFNGLEXTGETRENDERBUFFERSQCOMPROC)(GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETSHADERSQCOMPROC)(GLuint * shaders, GLint maxShaders, GLint * numShaders); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXSUBIMAGEQCOMPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXTURESQCOMPROC)(GLuint * textures, GLint maxTextures, GLint * numTextures); +typedef GLboolean (GLAPIENTRY *PFNGLEXTISPROGRAMBINARYQCOMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAPIENTRY *PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat * buffer); +typedef void (GLAPIENTRY *PFNGLFEEDBACKBUFFERXOESPROC)(GLsizei n, GLenum type, const GLfixed * buffer); +typedef GLsync (GLAPIENTRY *PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +typedef GLsync (GLAPIENTRY *PFNGLFENCESYNCAPPLEPROC)(GLenum condition, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY *PFNGLFINISHPROC)(void); +typedef GLint (GLAPIENTRY *PFNGLFINISHASYNCSGIXPROC)(GLuint * markerp); +typedef void (GLAPIENTRY *PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLFINISHFENCENVPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); +typedef void (GLAPIENTRY *PFNGLFINISHTEXTURESUNXPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLFLUSHRASTERSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHSTATICDATAIBMPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAPIENTRY *PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDPROC)(GLdouble coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDEXTPROC)(GLdouble coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDVPROC)(const GLdouble * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDVEXTPROC)(const GLdouble * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFPROC)(GLfloat coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFEXTPROC)(GLfloat coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFVPROC)(const GLfloat * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFVEXTPROC)(const GLfloat * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDHNVPROC)(GLhalfNV fog); +typedef void (GLAPIENTRY *PFNGLFOGCOORDHVNVPROC)(const GLhalfNV * fog); +typedef void (GLAPIENTRY *PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLFOGFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFOGFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFOGIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFOGIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFOGXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLFOGXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLFOGXVPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLFOGXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAGMENTCOVERAGECOLORNVPROC)(GLuint color); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAMETERMINATORGREMEDYPROC)(void); +typedef void (GLAPIENTRY *PFNGLFRAMEZOOMSGIXPROC)(GLint factor); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFEROESPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREOESPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLFRONTFACEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLFRUSTUMFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef GLuint (GLAPIENTRY *PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint * fences); +typedef void (GLAPIENTRY *PFNGLGENFENCESNVPROC)(GLsizei n, GLuint * fences); +typedef GLuint (GLAPIENTRY *PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSOESPROC)(GLsizei n, GLuint * framebuffers); +typedef GLuint (GLAPIENTRY *PFNGLGENLISTSPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint * names); +typedef void (GLAPIENTRY *PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint * ids); +typedef GLuint (GLAPIENTRY *PFNGLGENPATHSNVPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMPIPELINESEXTPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint * programs); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint * programs); +typedef void (GLAPIENTRY *PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENQUERIESEXTPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSOESPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (GLAPIENTRY *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSOESPROC)(GLsizei n, GLuint * arrays); +typedef GLuint (GLAPIENTRY *PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPOESPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); +typedef void (GLAPIENTRY *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); +typedef GLint (GLAPIENTRY *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVOESPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEFPROC)(GLenum plane, GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEXPROC)(GLenum plane, GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEXOESPROC)(GLenum plane, GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, void * table); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, void * data); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, void * table); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat * params); +typedef GLuint (GLAPIENTRY *PFNGLGETCOMMANDHEADERNVPROC)(GLenum tokenID, GLuint size); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint lod, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint lod, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, void * image); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * image); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETCOVERAGEMODULATIONTABLENVPROC)(GLsizei bufsize, GLfloat * v); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGKHRPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef void (GLAPIENTRY *PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDRIVERCONTROLSTRINGQCOMPROC)(GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString); +typedef void (GLAPIENTRY *PFNGLGETDRIVERCONTROLSQCOMPROC)(GLint * num, GLsizei size, GLuint * driverControls); +typedef GLenum (GLAPIENTRY *PFNGLGETERRORPROC)(void); +typedef void (GLAPIENTRY *PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFIRSTPERFQUERYIDINTELPROC)(GLuint * queryId); +typedef void (GLAPIENTRY *PFNGLGETFIXEDVPROC)(GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETFIXEDVOESPROC)(GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VNVPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFOGFUNCSGISPROC)(GLfloat * points); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATAINDEXEXTPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSEXTPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void); +typedef GLhandleARB (GLAPIENTRY *PFNGLGETHANDLEARBPROC)(GLenum pname); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETIMAGEHANDLEARBPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef GLuint64 (GLAPIENTRY *PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (GLAPIENTRY *PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); +typedef GLint (GLAPIENTRY *PFNGLGETINSTRUMENTSSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64VAPPLEPROC)(GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERI_VEXTPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, GLuint64EXT * result); +typedef void (GLAPIENTRY *PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT * result); +typedef void (GLAPIENTRY *PFNGLGETINTEGERVPROC)(GLenum pname, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXVPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXVOESPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); +typedef void (GLAPIENTRY *PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETMAPXVOESPROC)(GLenum target, GLenum query, GLfixed * v); +typedef void (GLAPIENTRY *PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXVPROC)(GLenum face, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXVOESPROC)(GLenum face, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAPIENTRY *PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum pname, void * string); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); +typedef void (GLAPIENTRY *PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNEXTPERFQUERYIDINTELPROC)(GLuint queryId, GLuint * nextQueryId); +typedef void (GLAPIENTRY *PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELEXTPROC)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPTRLABELPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPTRLABELKHRPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPATHCOLORGENFVNVPROC)(GLenum color, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHCOLORGENIVNVPROC)(GLenum color, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPATHCOMMANDSNVPROC)(GLuint path, GLubyte * commands); +typedef void (GLAPIENTRY *PFNGLGETPATHCOORDSNVPROC)(GLuint path, GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLGETPATHDASHARRAYNVPROC)(GLuint path, GLfloat * dashArray); +typedef GLfloat (GLAPIENTRY *PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef void (GLAPIENTRY *PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); +typedef void (GLAPIENTRY *PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); +typedef void (GLAPIENTRY *PFNGLGETPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); +typedef void (GLAPIENTRY *PFNGLGETPATHTEXGENFVNVPROC)(GLenum texCoordSet, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHTEXGENIVNVPROC)(GLenum texCoordSet, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPERFCOUNTERINFOINTELPROC)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, GLenum pname, void * data); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYDATAINTELPROC)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYIDBYNAMEINTELPROC)(GLchar * queryName, GLuint * queryId); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYINFOINTELPROC)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPXVPROC)(GLenum map, GLint size, GLfixed * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, void ** data); +typedef void (GLAPIENTRY *PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVEXTPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVKHRPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte * mask); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMBINARYOESPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEIVEXTPROC)(GLuint pipeline, GLenum pname, GLint * params); +typedef GLuint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEFVNVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void * string); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte * program); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)(GLenum target, GLuint index, GLuint * param); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVEXTPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVEXTPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVOESPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); +typedef void (GLAPIENTRY *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); +typedef void (GLAPIENTRY *PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); +typedef void (GLAPIENTRY *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef GLushort (GLAPIENTRY *PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype); +typedef const GLubyte * (GLAPIENTRY *PFNGLGETSTRINGPROC)(GLenum name); +typedef const GLubyte * (GLAPIENTRY *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +typedef GLuint (GLAPIENTRY *PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETSYNCIVAPPLEPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat * param); +typedef void (GLAPIENTRY *PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVXVPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENFVOESPROC)(GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENIVOESPROC)(GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENXVOESPROC)(GLenum coord, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERXVOESPROC)(GLenum target, GLint level, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERXVPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTUREHANDLEARBPROC)(GLuint texture); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTURESAMPLERHANDLEARBPROC)(GLuint texture, GLuint sampler); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); +typedef void (GLAPIENTRY *PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, GLint * location); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source); +typedef GLuint (GLAPIENTRY *PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar * uniformBlockName); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef GLintptr (GLAPIENTRY *PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMI64VARBPROC)(GLuint program, GLint location, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void ** data); +typedef GLint (GLAPIENTRY *PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, void ** param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, void ** param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLUI64VARBPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); +typedef void (GLAPIENTRY *PFNGLGETNCOLORTABLEARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); +typedef void (GLAPIENTRY *PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void * img); +typedef void (GLAPIENTRY *PFNGLGETNCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); +typedef void (GLAPIENTRY *PFNGLGETNCONVOLUTIONFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); +typedef void (GLAPIENTRY *PFNGLGETNHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNHISTOGRAMARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNMAPDVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPDVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPFVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPFVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPIVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPIVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETNMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNMINMAXARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPFVPROC)(GLenum map, GLsizei bufSize, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPFVARBPROC)(GLenum map, GLsizei bufSize, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUIVPROC)(GLenum map, GLsizei bufSize, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUIVARBPROC)(GLenum map, GLsizei bufSize, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUSVPROC)(GLenum map, GLsizei bufSize, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUSVARBPROC)(GLenum map, GLsizei bufSize, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETNPOLYGONSTIPPLEPROC)(GLsizei bufSize, GLubyte * pattern); +typedef void (GLAPIENTRY *PFNGLGETNPOLYGONSTIPPLEARBPROC)(GLsizei bufSize, GLubyte * pattern); +typedef void (GLAPIENTRY *PFNGLGETNSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETNSEPARABLEFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); +typedef void (GLAPIENTRY *PFNGLHINTPROC)(GLenum target, GLenum mode); +typedef void (GLAPIENTRY *PFNGLHINTPGIPROC)(GLenum target, GLint mode); +typedef void (GLAPIENTRY *PFNGLHISTOGRAMPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLIGLOOINTERFACESGIXPROC)(GLenum pname, const void * params); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint * params); +typedef GLsync (GLAPIENTRY *PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLINDEXFUNCEXTPROC)(GLenum func, GLclampf ref); +typedef void (GLAPIENTRY *PFNGLINDEXMASKPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLINDEXDPROC)(GLdouble c); +typedef void (GLAPIENTRY *PFNGLINDEXDVPROC)(const GLdouble * c); +typedef void (GLAPIENTRY *PFNGLINDEXFPROC)(GLfloat c); +typedef void (GLAPIENTRY *PFNGLINDEXFVPROC)(const GLfloat * c); +typedef void (GLAPIENTRY *PFNGLINDEXIPROC)(GLint c); +typedef void (GLAPIENTRY *PFNGLINDEXIVPROC)(const GLint * c); +typedef void (GLAPIENTRY *PFNGLINDEXSPROC)(GLshort c); +typedef void (GLAPIENTRY *PFNGLINDEXSVPROC)(const GLshort * c); +typedef void (GLAPIENTRY *PFNGLINDEXUBPROC)(GLubyte c); +typedef void (GLAPIENTRY *PFNGLINDEXUBVPROC)(const GLubyte * c); +typedef void (GLAPIENTRY *PFNGLINDEXXOESPROC)(GLfixed component); +typedef void (GLAPIENTRY *PFNGLINDEXXVOESPROC)(const GLfixed * component); +typedef void (GLAPIENTRY *PFNGLINITNAMESPROC)(void); +typedef void (GLAPIENTRY *PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAPIENTRY *PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAPIENTRY *PFNGLINSTRUMENTSBUFFERSGIXPROC)(GLsizei size, GLint * buffer); +typedef void (GLAPIENTRY *PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (GLAPIENTRY *PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef GLboolean (GLAPIENTRY *PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERARBPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLISCOMMANDLISTNVPROC)(GLuint list); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDPROC)(GLenum cap); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIEXTPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDINVPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIOESPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLISFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFEROESPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISLISTPROC)(GLuint list); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef GLboolean (GLAPIENTRY *PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISPATHNVPROC)(GLuint path); +typedef GLboolean (GLAPIENTRY *PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (GLAPIENTRY *PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPROC)(GLuint program); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMARBPROC)(GLuint program); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYARBPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYEXTPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFEROESPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISSAMPLERPROC)(GLuint sampler); +typedef GLboolean (GLAPIENTRY *PFNGLISSHADERPROC)(GLuint shader); +typedef GLboolean (GLAPIENTRY *PFNGLISSTATENVPROC)(GLuint state); +typedef GLboolean (GLAPIENTRY *PFNGLISSYNCPROC)(GLsync sync); +typedef GLboolean (GLAPIENTRY *PFNGLISSYNCAPPLEPROC)(GLsync sync); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREPROC)(GLuint texture); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREEXTPROC)(GLuint texture); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYOESPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLLABELOBJECTEXTPROC)(GLenum type, GLuint object, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLLIGHTENVISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXVPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLIGHTXPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTXVPROC)(GLenum light, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLLIGHTXVOESPROC)(GLenum light, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHPROC)(GLfloat width); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHXPROC)(GLfixed width); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHXOESPROC)(GLfixed width); +typedef void (GLAPIENTRY *PFNGLLINKPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLLISTBASEPROC)(GLuint base); +typedef void (GLAPIENTRY *PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)(GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERFSGIXPROC)(GLuint list, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERISGIXPROC)(GLuint list, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLOADIDENTITYPROC)(void); +typedef void (GLAPIENTRY *PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXXPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOADNAMEPROC)(GLuint name); +typedef void (GLAPIENTRY *PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC)(void); +typedef void (GLAPIENTRY *PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLLOGICOPPROC)(GLenum opcode); +typedef void (GLAPIENTRY *PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAP1XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (GLAPIENTRY *PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAP2XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFEROESPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GLAPIENTRY *PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); +typedef void (GLAPIENTRY *PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID1XOESPROC)(GLint n, GLfixed u1, GLfixed u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2XOESPROC)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void * (GLAPIENTRY *PFNGLMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMATERIALXPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLMATERIALXVPROC)(GLenum face, GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLMATERIALXVOESPROC)(GLenum face, GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLMATRIXFRUSTUMEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXPOINTEROESPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUBVARBPROC)(GLint size, const GLubyte * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUIVARBPROC)(GLint size, const GLuint * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUSVARBPROC)(GLint size, const GLushort * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXLOAD3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOAD3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMODEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXMULT3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULT3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXORTHOEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLMATRIXPOPEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXPUSHEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXROTATEDEXTPROC)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXROTATEFEXTPROC)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMATRIXSCALEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXSCALEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMAXSHADERCOMPILERTHREADSARBPROC)(GLuint count); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGARBPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGOESPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINMAXPROC)(GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXXPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY *PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY *PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1BOESPROC)(GLenum texture, GLbyte s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1XOESPROC)(GLenum texture, GLfixed s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2BOESPROC)(GLenum texture, GLbyte s, GLbyte t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2XOESPROC)(GLenum texture, GLfixed s, GLfixed t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSTORAGEEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); +typedef void (GLAPIENTRY *PFNGLNEWLISTPROC)(GLuint list, GLenum mode); +typedef GLuint (GLAPIENTRY *PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void * pointer, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3XPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3XOESPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTPTRLABELPROC)(const void * ptr, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTPTRLABELKHRPROC)(const void * ptr, GLsizei length, const GLchar * label); +typedef GLenum (GLAPIENTRY *PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef GLenum (GLAPIENTRY *PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef void (GLAPIENTRY *PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLORTHOFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLORTHOXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLORTHOXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); +typedef void (GLAPIENTRY *PFNGLPASSTHROUGHPROC)(GLfloat token); +typedef void (GLAPIENTRY *PFNGLPASSTHROUGHXOESPROC)(GLfixed token); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat * values); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIEXTPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIOESPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATHCOLORGENNVPROC)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum func); +typedef void (GLAPIENTRY *PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); +typedef void (GLAPIENTRY *PFNGLPATHFOGGENNVPROC)(GLenum genMode); +typedef GLenum (GLAPIENTRY *PFNGLPATHGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAPIENTRY *PFNGLPATHGLYPHINDEXRANGENVPROC)(GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount); +typedef void (GLAPIENTRY *PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAPIENTRY *PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAPIENTRY *PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); +typedef void (GLAPIENTRY *PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, const void * pathString); +typedef void (GLAPIENTRY *PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHTEXGENNVPROC)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPXPROC)(GLenum map, GLint size, const GLfixed * values); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERISGISPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor); +typedef void (GLAPIENTRY *PFNGLPIXELZOOMXOESPROC)(GLfixed xfactor, GLfixed yfactor); +typedef GLboolean (GLAPIENTRY *PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXVPROC)(GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXVOESPROC)(GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEPROC)(GLfloat size); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEPOINTEROESPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEXPROC)(GLfixed size); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEXOESPROC)(GLfixed size); +typedef GLint (GLAPIENTRY *PFNGLPOLLASYNCSGIXPROC)(GLuint * markerp); +typedef GLint (GLAPIENTRY *PFNGLPOLLINSTRUMENTSSGIXPROC)(GLint * marker_p); +typedef void (GLAPIENTRY *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLPOLYGONMODENVPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETCLAMPEXTPROC)(GLfloat factor, GLfloat units, GLfloat clamp); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETXPROC)(GLfixed factor, GLfixed units); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETXOESPROC)(GLfixed factor, GLfixed units); +typedef void (GLAPIENTRY *PFNGLPOLYGONSTIPPLEPROC)(const GLubyte * mask); +typedef void (GLAPIENTRY *PFNGLPOPATTRIBPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPCLIENTATTRIBPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPDEBUGGROUPPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPDEBUGGROUPKHRPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPGROUPMARKEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPMATRIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPNAMEPROC)(void); +typedef void (GLAPIENTRY *PFNGLPRESENTFRAMEDUALFILLNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (GLAPIENTRY *PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXARBPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXEXTPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXOESPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint * textures, const GLfloat * priorities); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint * textures, const GLclampf * priorities); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESXOESPROC)(GLsizei n, const GLuint * textures, const GLfixed * priorities); +typedef void (GLAPIENTRY *PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); +typedef void (GLAPIENTRY *PFNGLPROGRAMBINARYOESPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLint length); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)(GLenum target, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, GLdouble x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64ARBPROC)(GLuint program, GLint location, GLint64 x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64ARBPROC)(GLuint program, GLint location, GLuint64 x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, GLuint64EXT value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); +typedef void (GLAPIENTRY *PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPUSHATTRIBPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); +typedef void (GLAPIENTRY *PFNGLPUSHDEBUGGROUPKHRPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); +typedef void (GLAPIENTRY *PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAPIENTRY *PFNGLPUSHMATRIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLPUSHNAMEPROC)(GLuint name); +typedef void (GLAPIENTRY *PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +typedef void (GLAPIENTRY *PFNGLQUERYCOUNTEREXTPROC)(GLuint id, GLenum target); +typedef GLbitfield (GLAPIENTRY *PFNGLQUERYMATRIXXOESPROC)(GLfixed * mantissa, GLint * exponent); +typedef void (GLAPIENTRY *PFNGLQUERYOBJECTPARAMETERUIAMDPROC)(GLenum target, GLuint id, GLenum pname, GLuint param); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4XOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERSAMPLESEXTPROC)(GLuint samples, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLREADBUFFERPROC)(GLenum src); +typedef void (GLAPIENTRY *PFNGLREADBUFFERINDEXEDEXTPROC)(GLenum src, GLint index); +typedef void (GLAPIENTRY *PFNGLREADBUFFERNVPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLREADINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAPIENTRY *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSEXTPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSKHRPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +typedef void (GLAPIENTRY *PFNGLRECTDVPROC)(const GLdouble * v1, const GLdouble * v2); +typedef void (GLAPIENTRY *PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +typedef void (GLAPIENTRY *PFNGLRECTFVPROC)(const GLfloat * v1, const GLfloat * v2); +typedef void (GLAPIENTRY *PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2); +typedef void (GLAPIENTRY *PFNGLRECTIVPROC)(const GLint * v1, const GLint * v2); +typedef void (GLAPIENTRY *PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); +typedef void (GLAPIENTRY *PFNGLRECTSVPROC)(const GLshort * v1, const GLshort * v2); +typedef void (GLAPIENTRY *PFNGLRECTXOESPROC)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (GLAPIENTRY *PFNGLRECTXVOESPROC)(const GLfixed * v1, const GLfixed * v2); +typedef void (GLAPIENTRY *PFNGLREFERENCEPLANESGIXPROC)(const GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLRELEASESHADERCOMPILERPROC)(void); +typedef GLint (GLAPIENTRY *PFNGLRENDERMODEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte * code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint * rc, const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint * code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort * code); +typedef void (GLAPIENTRY *PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLRESETHISTOGRAMPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETMINMAXPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETMINMAXEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESIZEBUFFERSMESAPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESOLVEDEPTHVALUESNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLROTATEXPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLROTATEXOESPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEXPROC)(GLclampx value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEXOESPROC)(GLclampx value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); +typedef void (GLAPIENTRY *PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLSCALEXPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSCALEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORARRAYVNVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDNVPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDVNVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint * buffer); +typedef void (GLAPIENTRY *PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); +typedef void (GLAPIENTRY *PFNGLSEPARABLEFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); +typedef void (GLAPIENTRY *PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); +typedef void (GLAPIENTRY *PFNGLSETFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); +typedef void (GLAPIENTRY *PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAPIENTRY *PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAPIENTRY *PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, const GLfloat * val); +typedef void (GLAPIENTRY *PFNGLSHADEMODELPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length); +typedef void (GLAPIENTRY *PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); +typedef void (GLAPIENTRY *PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (GLAPIENTRY *PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (GLAPIENTRY *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); +typedef void (GLAPIENTRY *PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); +typedef void (GLAPIENTRY *PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (GLAPIENTRY *PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLSTARTINSTRUMENTSSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLSTARTTILINGQCOMPROC)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GLAPIENTRY *PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode); +typedef void (GLAPIENTRY *PFNGLSTENCILCLEARTAGEXTPROC)(GLsizei stencilTagBits, GLuint stencilClearTag); +typedef void (GLAPIENTRY *PFNGLSTENCILFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILMASKPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); +typedef void (GLAPIENTRY *PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLSTOPINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAPIENTRY *PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLSUBPIXELPRECISIONBIASNVPROC)(GLuint xbits, GLuint ybits); +typedef void (GLAPIENTRY *PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (GLAPIENTRY *PFNGLSYNCTEXTUREINTELPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLTANGENT3BEXTPROC)(GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3DEXTPROC)(GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3FEXTPROC)(GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3IEXTPROC)(GLint tx, GLint ty, GLint tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3SEXTPROC)(GLshort tx, GLshort ty, GLshort tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); +typedef void (GLAPIENTRY *PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); +typedef GLboolean (GLAPIENTRY *PFNGLTESTFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLTESTFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFEROESPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEEXTPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEOESPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1BOESPROC)(GLbyte s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1DPROC)(GLdouble s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1FPROC)(GLfloat s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1HNVPROC)(GLhalfNV s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1IPROC)(GLint s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1SPROC)(GLshort s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1XOESPROC)(GLfixed s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2BOESPROC)(GLbyte s, GLbyte t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2IPROC)(GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2XOESPROC)(GLfixed s, GLfixed t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3BOESPROC)(GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3XOESPROC)(GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4BOESPROC)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4XOESPROC)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXENVXPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXENVXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXENVXVPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXENVXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAPIENTRY *PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXGENFOESPROC)(GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXGENFVOESPROC)(GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXGENIOESPROC)(GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXGENIVOESPROC)(GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXGENXOESPROC)(GLenum coord, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXGENXVOESPROC)(GLenum coord, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXPAGECOMMITMENTARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXPAGECOMMITMENTEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXVPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGESPARSEAMDPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE4DSGISPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREBARRIERPROC)(void); +typedef void (GLAPIENTRY *PFNGLTEXTUREBARRIERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXTURECOLORMASKSGISPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); +typedef void (GLAPIENTRY *PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLTEXTURENORMALEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLTEXTUREPAGECOMMITMENTEXTPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGESPARSEAMDPROC)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWEXTPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWOESPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEXPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64ARBPROC)(GLint location, GLint64 x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64ARBPROC)(GLint location, GLuint64 x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64ARBPROC)(GLint location, GLint64 x, GLint64 y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +typedef void (GLAPIENTRY *PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64ARBPROC)(GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint * indices); +typedef void (GLAPIENTRY *PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); +typedef void (GLAPIENTRY *PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNLOCKARRAYSEXTPROC)(void); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFERPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFERARBPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFEROESPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMSTAGESEXTPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GLAPIENTRY *PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); +typedef void (GLAPIENTRY *PFNGLVDPAUFININVPROC)(void); +typedef void (GLAPIENTRY *PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLVDPAUINITNVPROC)(const void * vdpDevice, const void * getProcAddress); +typedef GLboolean (GLAPIENTRY *PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAPIENTRY *PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); +typedef GLvdpauSurfaceNV (GLAPIENTRY *PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef GLvdpauSurfaceNV (GLAPIENTRY *PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef void (GLAPIENTRY *PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); +typedef void (GLAPIENTRY *PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); +typedef void (GLAPIENTRY *PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort * addr); +typedef void (GLAPIENTRY *PFNGLVERTEX2BOESPROC)(GLbyte x, GLbyte y); +typedef void (GLAPIENTRY *PFNGLVERTEX2BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEX2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEX2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y); +typedef void (GLAPIENTRY *PFNGLVERTEX2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEX2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEX2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2XOESPROC)(GLfixed x); +typedef void (GLAPIENTRY *PFNGLVERTEX2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX3BOESPROC)(GLbyte x, GLbyte y, GLbyte z); +typedef void (GLAPIENTRY *PFNGLVERTEX3BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEX3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEX3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAPIENTRY *PFNGLVERTEX3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEX3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEX3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAPIENTRY *PFNGLVERTEX3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX4BOESPROC)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void (GLAPIENTRY *PFNGLVERTEX4BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEX4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEX4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAPIENTRY *PFNGLVERTEX4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEX4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEX4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLVERTEX4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)(GLuint vaobj, GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORANGLEPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISOREXTPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORNVPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64ARBPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64VARBPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPARAMETERIAMDPROC)(GLuint index, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei count, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDARBPROC)(GLint count); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTFVEXTPROC)(const GLfloat * weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTHNVPROC)(GLhalfNV weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalfNV * weight); +typedef GLenum (GLAPIENTRY *PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTARRAYVNVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLWEIGHTPOINTEROESPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLWEIGHTBVARBPROC)(GLint size, const GLbyte * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTDVARBPROC)(GLint size, const GLdouble * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTFVARBPROC)(GLint size, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTIVARBPROC)(GLint size, const GLint * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTSVARBPROC)(GLint size, const GLshort * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUBVARBPROC)(GLint size, const GLubyte * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUIVARBPROC)(GLint size, const GLuint * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUSVARBPROC)(GLint size, const GLushort * weights); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVARBPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVARBPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVARBPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVARBPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVARBPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVARBPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVARBPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVARBPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAccum)(GLenum op, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAccumxOES)(GLenum op, GLfixed value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveProgramEXT)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveShaderProgram)(GLuint pipeline, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveShaderProgramEXT)(GLuint pipeline, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveStencilFaceEXT)(GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveTexture)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveTextureARB)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveVaryingNV)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFunc)(GLenum func, GLfloat ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncQCOM)(GLenum func, GLclampf ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncx)(GLenum func, GLfixed ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncxOES)(GLenum func, GLfixed ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glApplyFramebufferAttachmentCMAAINTEL)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glApplyTextureEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreProgramsResidentNV)(GLsizei n, const GLuint * programs, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayElement)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayElementEXT)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayObjectATI)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAsyncMarkerSGIX)(GLuint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAttachShader)(GLuint program, GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBegin)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRender)(GLuint id, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRenderNV)(GLuint id, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRenderNVX)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginFragmentShaderATI)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginOcclusionQueryNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginPerfMonitorAMD)(GLuint monitor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginPerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQuery)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryARB)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryEXT)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryIndexed)(GLenum target, GLuint index, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedback)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedbackEXT)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedbackNV)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginVertexShaderEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginVideoCaptureNV)(GLuint video_capture_slot); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindAttribLocation)(GLuint program, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindAttribLocationARB)(GLhandleARB programObj, GLuint index, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffer)(GLenum target, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferARB)(GLenum target, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBase)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBaseNV)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferOffsetNV)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRangeNV)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffersBase)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffersRange)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocation)(GLuint program, GLuint color, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationEXT)(GLuint program, GLuint color, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationIndexed)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationIndexedEXT)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragmentShaderATI)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebuffer)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebufferEXT)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebufferOES)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTexture)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTextureEXT)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTextures)(GLuint first, GLsizei count, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindLightParameterEXT)(GLenum light, GLenum value); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindMaterialParameterEXT)(GLenum face, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindMultiTextureEXT)(GLenum texunit, GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindParameterEXT)(GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramARB)(GLenum target, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramNV)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbuffer)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbufferEXT)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbufferOES)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindSampler)(GLuint unit, GLuint sampler); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindSamplers)(GLuint first, GLsizei count, const GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindTexGenParameterEXT)(GLenum unit, GLenum coord, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTexture)(GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextureEXT)(GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextureUnit)(GLuint unit, GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindTextureUnitParameterEXT)(GLenum unit, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextures)(GLuint first, GLsizei count, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTransformFeedback)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTransformFeedbackNV)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArray)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArrayAPPLE)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArrayOES)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexBuffers)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexShaderEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVideoCaptureStreamBufferNV)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVideoCaptureStreamTextureNV)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3bEXT)(GLbyte bx, GLbyte by, GLbyte bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3dEXT)(GLdouble bx, GLdouble by, GLdouble bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3fEXT)(GLfloat bx, GLfloat by, GLfloat bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3iEXT)(GLint bx, GLint by, GLint bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3sEXT)(GLshort bx, GLshort by, GLshort bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormalPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBitmap)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBitmapxOES)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrier)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrierKHR)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrierNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColorEXT)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColorxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquation)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationIndexedAMD)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationOES)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateIndexedAMD)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateOES)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparatei)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiEXT)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiOES)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationi)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiARB)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiEXT)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiOES)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunc)(GLenum sfactor, GLenum dfactor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncIndexedAMD)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateIndexedAMD)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparatei)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiEXT)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiOES)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunci)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciARB)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciEXT)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciOES)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendParameteriNV)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitNamedFramebuffer)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferAddressRangeNV)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferData)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferDataARB)(GLenum target, GLsizeiptrARB size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferPageCommitmentARB)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferStorage)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferStorageEXT)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallList)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallLists)(GLsizei n, GLenum type, const void * lists); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatus)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatusEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatusOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckNamedFramebufferStatusEXT)(GLuint framebuffer, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClampColor)(GLenum target, GLenum clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClampColorARB)(GLenum target, GLenum clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClear)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearAccumxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferData)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferSubData)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorIiEXT)(GLint red, GLint green, GLint blue, GLint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorIuiEXT)(GLuint red, GLuint green, GLuint blue, GLuint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorx)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepth)(GLdouble depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthdNV)(GLdouble depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthf)(GLfloat d); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthfOES)(GLclampf depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthx)(GLfixed depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthxOES)(GLfixed depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearIndex)(GLfloat c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferData)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferDataEXT)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferSubData)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferSubDataEXT)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferfi)(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferfv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferuiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearStencil)(GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearTexImage)(GLuint texture, GLint level, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveTexture)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveTextureARB)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveVertexStreamATI)(GLenum stream); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientAttribDefaultEXT)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glClientWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipControl)(GLenum origin, GLenum depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlane)(GLenum plane, const GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanef)(GLenum p, const GLfloat * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanefIMG)(GLenum p, const GLfloat * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanefOES)(GLenum plane, const GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanex)(GLenum plane, const GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanexIMG)(GLenum p, const GLfixed * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanexOES)(GLenum plane, const GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3b)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3d)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3f)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fVertex3fSUN)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fVertex3fvSUN)(const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3i)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3s)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ub)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ui)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3us)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3xOES)(GLfixed red, GLfixed green, GLfixed blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3xvOES)(const GLfixed * components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fNormal3fVertex3fSUN)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fNormal3fVertex3fvSUN)(const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4i)(GLint red, GLint green, GLint blue, GLint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex2fSUN)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex2fvSUN)(const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex3fSUN)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex3fvSUN)(const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4xOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4xvOES)(const GLfixed * components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskIndexedEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaski)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskiEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskiOES)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaterial)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP3ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP3uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP4ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP4uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterfNV)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterfvNV)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameteriNV)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterivNV)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerStageParameterfvNV)(GLenum stage, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCommandListSegmentsNV)(GLuint list, GLuint segments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShaderARB)(GLhandleARB shaderObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShaderIncludeARB)(GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConservativeRasterParameterfNV)(GLenum pname, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter1D)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterf)(GLenum target, GLenum pname, GLfloat params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteri)(GLenum target, GLenum pname, GLint params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyBufferSubDataNV)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorSubTable)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter1D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter2D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubData)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataEXT)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataNV)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataOES)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyNamedBufferSubData)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyPathNV)(GLuint resultPath, GLuint srcPath); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureLevelsAPPLE)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverFillPathNV)(GLuint path, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverStrokePathNV)(GLuint path, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageMaskNV)(GLboolean mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageModulationNV)(GLenum components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageModulationTableNV)(GLsizei n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageOperationNV)(GLenum operation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateBuffers)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateCommandListsNV)(GLsizei n, GLuint * lists); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateFramebuffers)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreatePerfQueryINTEL)(GLuint queryId, GLuint * queryHandle); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateProgram)(void); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glCreateProgramObjectARB)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateProgramPipelines)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateQueries)(GLenum target, GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateRenderbuffers)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateSamplers)(GLsizei n, GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShader)(GLenum type); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glCreateShaderObjectARB)(GLenum shaderType); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramEXT)(GLenum type, const GLchar * string); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramv)(GLenum type, GLsizei count, const GLchar *const* strings); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramvEXT)(GLenum type, GLsizei count, const GLchar ** strings); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateStatesNV)(GLsizei n, GLuint * states); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glCreateSyncFromCLeventARB)(struct _cl_context * context, struct _cl_event * event, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateTextures)(GLenum target, GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateTransformFeedbacks)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateVertexArrays)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullFace)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullParameterdvEXT)(GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullParameterfvEXT)(GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCurrentPaletteMatrixARB)(GLint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCurrentPaletteMatrixOES)(GLuint matrixpaletteindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallback)(GLDEBUGPROC callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackAMD)(GLDEBUGPROCAMD callback, void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackARB)(GLDEBUGPROCARB callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackKHR)(GLDEBUGPROCKHR callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControlARB)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControlKHR)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageEnableAMD)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertAMD)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertKHR)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformSGIX)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformationMap3dSGIX)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformationMap3fSGIX)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteAsyncMarkersSGIX)(GLuint marker, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteBuffers)(GLsizei n, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteBuffersARB)(GLsizei n, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteCommandListsNV)(GLsizei n, const GLuint * lists); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFencesAPPLE)(GLsizei n, const GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFencesNV)(GLsizei n, const GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFragmentShaderATI)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffers)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffersOES)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteLists)(GLuint list, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteNamedStringARB)(GLint namelen, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteNamesAMD)(GLenum identifier, GLuint num, const GLuint * names); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteObjectARB)(GLhandleARB obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteOcclusionQueriesNV)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePathsNV)(GLuint path, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePerfMonitorsAMD)(GLsizei n, GLuint * monitors); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramPipelines)(GLsizei n, const GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramPipelinesEXT)(GLsizei n, const GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramsARB)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramsNV)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueries)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueriesARB)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueriesEXT)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffers)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffersOES)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSamplers)(GLsizei count, const GLuint * samplers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteStatesNV)(GLsizei n, const GLuint * states); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSync)(GLsync sync); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSyncAPPLE)(GLsync sync); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTextures)(GLsizei n, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTexturesEXT)(GLsizei n, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTransformFeedbacksNV)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArrays)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArraysOES)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexShaderEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthBoundsEXT)(GLclampd zmin, GLclampd zmax); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthBoundsdNV)(GLdouble zmin, GLdouble zmax); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthFunc)(GLenum func); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthMask)(GLboolean flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRange)(GLdouble hither, GLdouble yon); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeArrayfvNV)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeArrayv)(GLuint first, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeIndexed)(GLuint index, GLdouble n, GLdouble f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeIndexedfNV)(GLuint index, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangedNV)(GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangef)(GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangefOES)(GLclampf n, GLclampf f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangex)(GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangexOES)(GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetachShader)(GLuint program, GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisable)(GLenum cap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientState)(GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientStateIndexedEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientStateiEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableDriverControlQCOM)(GLuint driverControl); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVariantClientStateEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayAttrib)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayAttribEXT)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayEXT)(GLuint vaobj, GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribArray)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribArrayARB)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisablei)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchCompute)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchComputeGroupSizeARB)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchComputeIndirect)(GLintptr indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArrays)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysEXT)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysIndirect)(GLenum mode, const void * indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedBaseInstance)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedBaseInstanceEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedNV)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffer)(GLenum buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffers)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersARB)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersATI)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersEXT)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersIndexedEXT)(GLint n, const GLenum * location, const GLint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersNV)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsAddressNV)(GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsNV)(GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsStatesAddressNV)(const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsStatesNV)(GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementArrayAPPLE)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementArrayATI)(GLenum mode, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsIndirect)(GLenum mode, GLenum type, const void * indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseInstance)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexBaseInstance)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedNV)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawMeshArraysSUN)(GLenum mode, GLint first, GLsizei count, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawPixels)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementArrayAPPLE)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementArrayATI)(GLenum mode, GLuint start, GLuint end, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertexEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertexOES)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexfvOES)(const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexivOES)(const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexsvOES)(const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTextureNV)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexxvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedback)(GLenum mode, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackInstanced)(GLenum mode, GLuint id, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackNV)(GLenum mode, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackStream)(GLenum mode, GLuint id, GLuint stream); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackStreamInstanced)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlag)(GLboolean flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagFormatNV)(GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointer)(GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointerListIBM)(GLint stride, const GLboolean ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagv)(const GLboolean * flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glElementPointerAPPLE)(GLenum type, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glElementPointerATI)(GLenum type, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnable)(GLenum cap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientState)(GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientStateIndexedEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientStateiEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableDriverControlQCOM)(GLuint driverControl); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVariantClientStateEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayAttrib)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayAttribEXT)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayEXT)(GLuint vaobj, GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribArray)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribArrayARB)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnablei)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnd)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRender)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRenderNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRenderNVX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndFragmentShaderATI)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndList)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndOcclusionQueryNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndPerfMonitorAMD)(GLuint monitor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndPerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQuery)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryARB)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryIndexed)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTilingQCOM)(GLbitfield preserveMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedbackEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndVertexShaderEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndVideoCaptureNV)(GLuint video_capture_slot); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1d)(GLdouble u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1dv)(const GLdouble * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1f)(GLfloat u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1fv)(const GLfloat * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1xOES)(GLfixed u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2d)(GLdouble u, GLdouble v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2dv)(const GLdouble * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2f)(GLfloat u, GLfloat v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2fv)(const GLfloat * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2xOES)(GLfixed u, GLfixed v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMapsNV)(GLenum target, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMesh1)(GLenum mode, GLint i1, GLint i2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalPoint1)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalPoint2)(GLint i, GLint j); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvaluateDepthValuesARB)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetBufferPointervQCOM)(GLenum target, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetBuffersQCOM)(GLuint * buffers, GLint maxBuffers, GLint * numBuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetFramebuffersQCOM)(GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar * source, GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetProgramsQCOM)(GLuint * programs, GLint maxPrograms, GLint * numPrograms); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetRenderbuffersQCOM)(GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetShadersQCOM)(GLuint * shaders, GLint maxShaders, GLint * numShaders); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexturesQCOM)(GLuint * textures, GLint maxTextures, GLint * numTextures); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glExtIsProgramBinaryQCOM)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtractComponentEXT)(GLuint res, GLuint src, GLuint num); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFeedbackBufferxOES)(GLsizei n, GLenum type, const GLfixed * buffer); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glFenceSync)(GLenum condition, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glFenceSyncAPPLE)(GLenum condition, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinish)(void); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glFinishAsyncSGIX)(GLuint * markerp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishObjectAPPLE)(GLenum object, GLint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishTextureSUNX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlush)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedNamedBufferRangeEXT)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushPixelDataRangeNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushRasterSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushStaticDataIBM)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushVertexArrayRangeAPPLE)(GLsizei length, void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushVertexArrayRangeNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordd)(GLdouble coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddEXT)(GLdouble coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddv)(const GLdouble * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddvEXT)(const GLdouble * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordf)(GLfloat coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfEXT)(GLfloat coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfv)(const GLfloat * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfvEXT)(const GLfloat * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordhNV)(GLhalfNV fog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordhvNV)(const GLhalfNV * fog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogFuncSGIS)(GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogi)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogiv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxv)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxvOES)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentColorMaterialSGIX)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentCoverageColorNV)(GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelfSGIX)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModeliSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelivSGIX)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightiSGIX)(GLenum light, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrameTerminatorGREMEDY)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrameZoomSGIX)(GLint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferDrawBufferEXT)(GLuint framebuffer, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferDrawBuffersEXT)(GLuint framebuffer, GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferParameteri)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferReadBufferEXT)(GLuint framebuffer, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferSampleLocationsfvARB)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferSampleLocationsfvNV)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture1D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DMultisampleEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureFaceEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayer)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayerARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureMultiviewOVR)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureOES)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFreeObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrontFace)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustum)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumf)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumfOES)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumx)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumxOES)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenAsyncMarkersSGIX)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenBuffers)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenBuffersARB)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFencesAPPLE)(GLsizei n, GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFencesNV)(GLsizei n, GLuint * fences); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenFragmentShadersATI)(GLuint range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffers)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffersOES)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenLists)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenNamesAMD)(GLenum identifier, GLuint num, GLuint * names); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenOcclusionQueriesNV)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenPathsNV)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenPerfMonitorsAMD)(GLsizei n, GLuint * monitors); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramPipelines)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramPipelinesEXT)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramsARB)(GLsizei n, GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramsNV)(GLsizei n, GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueries)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueriesARB)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueriesEXT)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffers)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffersOES)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenSamplers)(GLsizei count, GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenSymbolsEXT)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTextures)(GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTexturesEXT)(GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTransformFeedbacks)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTransformFeedbacksNV)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArrays)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArraysOES)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenVertexShadersEXT)(GLuint range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmap)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmapEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmapOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMultiTexMipmapEXT)(GLenum texunit, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateTextureMipmap)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateTextureMipmapEXT)(GLuint texture, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAtomicCounterBufferiv)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAttribARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineName)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineUniformName)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineUniformiv)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveVaryingNV)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetArrayObjectfvATI)(GLenum array, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetArrayObjectivATI)(GLenum array, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetAttribLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetAttribLocationARB)(GLhandleARB programObj, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleanIndexedvEXT)(GLenum target, GLuint index, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleani_v)(GLenum target, GLuint index, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleanv)(GLenum pname, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameteri64v)(GLenum target, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameterui64vNV)(GLenum target, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointerv)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointervARB)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointervOES)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlane)(GLenum plane, GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanef)(GLenum plane, GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanefOES)(GLenum plane, GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanex)(GLenum plane, GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanexOES)(GLenum plane, GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTable)(GLenum target, GLenum format, GLenum type, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableEXT)(GLenum target, GLenum format, GLenum type, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableSGI)(GLenum target, GLenum format, GLenum type, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerStageParameterfvNV)(GLenum stage, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetCommandHeaderNV)(GLenum tokenID, GLuint size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedMultiTexImageEXT)(GLenum texunit, GLenum target, GLint lod, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTexImage)(GLenum target, GLint level, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTexImageARB)(GLenum target, GLint level, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureImage)(GLuint texture, GLint level, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureImageEXT)(GLuint texture, GLenum target, GLint lod, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionFilter)(GLenum target, GLenum format, GLenum type, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCoverageModulationTableNV)(GLsizei bufsize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLog)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogAMD)(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogARB)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogKHR)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDetailTexFuncSGIS)(GLenum target, GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoubleIndexedvEXT)(GLenum target, GLuint index, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublei_v)(GLenum target, GLuint index, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublei_vEXT)(GLenum pname, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublev)(GLenum pname, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDriverControlsQCOM)(GLint * num, GLsizei size, GLuint * driverControls); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetError)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFenceivNV)(GLuint fence, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFirstPerfQueryIdINTEL)(GLuint * queryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFixedv)(GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFixedvOES)(GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloatIndexedvEXT)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_v)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_vEXT)(GLenum pname, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_vNV)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloatv)(GLenum pname, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFogFuncSGIS)(GLfloat * points); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataIndex)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataIndexEXT)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataLocationEXT)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferParameterivEXT)(GLuint framebuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatus)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusARB)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusEXT)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusKHR)(void); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glGetHandleARB)(GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetImageHandleARB)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetImageHandleNV)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetImageTransformParameterfvHP)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetImageTransformParameterivHP)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetInstrumentsSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64i_v)(GLenum target, GLuint index, GLint64 * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64v)(GLenum pname, GLint64 * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64vAPPLE)(GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerIndexedvEXT)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegeri_v)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegeri_vEXT)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerui64i_vNV)(GLenum value, GLuint index, GLuint64EXT * result); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerui64vNV)(GLenum value, GLuint64EXT * result); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerv)(GLenum pname, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformatSampleivNV)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformati64v)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformativ)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightfv)(GLenum light, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightiv)(GLenum light, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxOES)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxv)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxvOES)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapAttribParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapAttribParameterivNV)(GLenum target, GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapControlPointsNV)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapParameterfvNV)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapParameterivNV)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapdv)(GLenum target, GLenum query, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapfv)(GLenum target, GLenum query, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapiv)(GLenum target, GLenum query, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapxvOES)(GLenum target, GLenum query, GLfixed * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialfv)(GLenum face, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialiv)(GLenum face, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxOES)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxv)(GLenum face, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxvOES)(GLenum face, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexEnvfvEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexEnvivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGendvEXT)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGenfvEXT)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGenivEXT)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexImageEXT)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexLevelParameterfvEXT)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexLevelParameterivEXT)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterIivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterIuivEXT)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterfvEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultisamplefv)(GLenum pname, GLuint index, GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultisamplefvNV)(GLenum pname, GLuint index, GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameteri64v)(GLuint buffer, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameteriv)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameterivEXT)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameterui64vNV)(GLuint buffer, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferPointerv)(GLuint buffer, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferPointervEXT)(GLuint buffer, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferSubDataEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferAttachmentParameteriv)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferAttachmentParameterivEXT)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferParameteriv)(GLuint framebuffer, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferParameterivEXT)(GLuint framebuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterIivEXT)(GLuint program, GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterIuivEXT)(GLuint program, GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterdvEXT)(GLuint program, GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterfvEXT)(GLuint program, GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramStringEXT)(GLuint program, GLenum target, GLenum pname, void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramivEXT)(GLuint program, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedRenderbufferParameteriv)(GLuint renderbuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedRenderbufferParameterivEXT)(GLuint renderbuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedStringARB)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedStringivARB)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNextPerfQueryIdINTEL)(GLuint queryId, GLuint * nextQueryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectBufferfvATI)(GLuint buffer, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectBufferivATI)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabelEXT)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectPtrLabel)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectPtrLabelKHR)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetOcclusionQueryivNV)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetOcclusionQueryuivNV)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathColorGenfvNV)(GLenum color, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathColorGenivNV)(GLenum color, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathCommandsNV)(GLuint path, GLubyte * commands); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathCoordsNV)(GLuint path, GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathDashArrayNV)(GLuint path, GLfloat * dashArray); + +extern EPOXY_IMPORTEXPORT GLfloat (EPOXY_CALLSPEC *epoxy_glGetPathLengthNV)(GLuint path, GLsizei startSegment, GLsizei numSegments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathMetricRangeNV)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathMetricsNV)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathParameterfvNV)(GLuint path, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathParameterivNV)(GLuint path, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathSpacingNV)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathTexGenfvNV)(GLenum texCoordSet, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathTexGenivNV)(GLenum texCoordSet, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCountersAMD)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorGroupsAMD)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryIdByNameINTEL)(GLchar * queryName, GLuint * queryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapfv)(GLenum map, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapuiv)(GLenum map, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapusv)(GLenum map, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapxv)(GLenum map, GLint size, GLfixed * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTransformParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTransformParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointerIndexedvEXT)(GLenum target, GLuint index, void ** data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointeri_vEXT)(GLenum pname, GLuint index, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointerv)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointervEXT)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointervKHR)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPolygonStipple)(GLubyte * mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramBinary)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterIivNV)(GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterIuivNV)(GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramInterfaceiv)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterIivNV)(GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterIuivNV)(GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineInfoLog)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineInfoLogEXT)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineiv)(GLuint pipeline, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineivEXT)(GLuint pipeline, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceIndex)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocation)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocationIndex)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocationIndexEXT)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourceName)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourcefvNV)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourceiv)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStageiv)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStringARB)(GLenum target, GLenum pname, void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramSubroutineParameteruivNV)(GLenum target, GLuint index, GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramiv)(GLuint program, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramivNV)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjecti64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectui64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectuiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryIndexediv)(GLenum target, GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjecti64v)(GLuint id, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectiv)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectivEXT)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectui64v)(GLuint id, GLenum pname, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuivEXT)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryiv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIivEXT)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIivOES)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuivOES)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSeparableFilter)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderSourceARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderiv)(GLuint shader, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSharpenTexFuncSGIS)(GLenum target, GLfloat * points); + +extern EPOXY_IMPORTEXPORT GLushort (EPOXY_CALLSPEC *epoxy_glGetStageIndexNV)(GLenum shadertype); + +extern EPOXY_IMPORTEXPORT const GLubyte * (EPOXY_CALLSPEC *epoxy_glGetString)(GLenum name); + +extern EPOXY_IMPORTEXPORT const GLubyte * (EPOXY_CALLSPEC *epoxy_glGetStringi)(GLenum name, GLuint index); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetSubroutineIndex)(GLuint program, GLenum shadertype, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetSubroutineUniformLocation)(GLuint program, GLenum shadertype, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexBumpParameterivATI)(GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnviv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvxv)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGendv)(GLenum coord, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenfv)(GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenfvOES)(GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGeniv)(GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenivOES)(GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameterxvOES)(GLenum target, GLint level, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIiv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIivOES)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuiv)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuivOES)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterPointervAPPLE)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterxv)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureHandleARB)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureHandleNV)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureImage)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureImageEXT)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterfv)(GLuint texture, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterfvEXT)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameteriv)(GLuint texture, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterivEXT)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIiv)(GLuint texture, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIivEXT)(GLuint texture, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIuiv)(GLuint texture, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIuivEXT)(GLuint texture, GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterfv)(GLuint texture, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterfvEXT)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameteriv)(GLuint texture, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterivEXT)(GLuint texture, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureSamplerHandleARB)(GLuint texture, GLuint sampler); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureSamplerHandleNV)(GLuint texture, GLuint sampler); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVaryingNV)(GLuint program, GLuint index, GLint * location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbacki64_v)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbacki_v)(GLuint xfb, GLenum pname, GLuint index, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackiv)(GLuint xfb, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTranslatedShaderSourceANGLE)(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetUniformBlockIndex)(GLuint program, const GLchar * uniformBlockName); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformBufferSizeEXT)(GLuint program, GLint location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformLocationARB)(GLhandleARB programObj, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT GLintptr (EPOXY_CALLSPEC *epoxy_glGetUniformOffsetEXT)(GLuint program, GLint location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformSubroutineuiv)(GLenum shadertype, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformdv)(GLuint program, GLint location, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformfv)(GLuint program, GLint location, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformfvARB)(GLhandleARB programObj, GLint location, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformi64vARB)(GLuint program, GLint location, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformi64vNV)(GLuint program, GLint location, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformiv)(GLuint program, GLint location, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformivARB)(GLhandleARB programObj, GLint location, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformui64vARB)(GLuint program, GLint location, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformui64vNV)(GLuint program, GLint location, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformuiv)(GLuint program, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformuivEXT)(GLuint program, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantArrayObjectfvATI)(GLuint id, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantArrayObjectivATI)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantPointervEXT)(GLuint id, GLenum value, void ** data); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetVaryingLocationNV)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIndexed64iv)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIndexediv)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIntegeri_vEXT)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIntegervEXT)(GLuint vaobj, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayPointeri_vEXT)(GLuint vaobj, GLuint index, GLenum pname, void ** param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayPointervEXT)(GLuint vaobj, GLenum pname, void ** param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayiv)(GLuint vaobj, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribArrayObjectfvATI)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribArrayObjectivATI)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIiv)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLdv)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLdvEXT)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLi64vNV)(GLuint index, GLenum pname, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLui64vARB)(GLuint index, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLui64vNV)(GLuint index, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointerv)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointervARB)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointervNV)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdv)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribiv)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamdvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamfvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamivNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureivNV)(GLuint video_capture_slot, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoi64vNV)(GLuint video_slot, GLenum pname, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoivNV)(GLuint video_slot, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoui64vNV)(GLuint video_slot, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideouivNV)(GLuint video_slot, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnColorTable)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnCompressedTexImage)(GLenum target, GLint lod, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnConvolutionFilter)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapdv)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapfv)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapiv)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapfv)(GLenum map, GLsizei bufSize, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapuiv)(GLenum map, GLsizei bufSize, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapusv)(GLenum map, GLsizei bufSize, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPolygonStipple)(GLsizei bufSize, GLubyte * pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnSeparableFilter)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnTexImage)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformdv)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformdvARB)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfv)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvARB)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvKHR)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformi64vARB)(GLuint program, GLint location, GLsizei bufSize, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformiv)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivARB)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivKHR)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformui64vARB)(GLuint program, GLint location, GLsizei bufSize, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuiv)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuivARB)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuivKHR)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorbSUN)(GLbyte factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactordSUN)(GLdouble factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorfSUN)(GLfloat factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactoriSUN)(GLint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorsSUN)(GLshort factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorubSUN)(GLubyte factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactoruiSUN)(GLuint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorusSUN)(GLushort factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHint)(GLenum target, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHintPGI)(GLenum target, GLint mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHistogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIglooInterfaceSGIX)(GLenum pname, const void * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterfHP)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterfvHP)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameteriHP)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterivHP)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glImportSyncEXT)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexFuncEXT)(GLenum func, GLclampf ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexMask)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexMaterialEXT)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexd)(GLdouble c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexdv)(const GLdouble * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexf)(GLfloat c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexfv)(const GLfloat * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexi)(GLint c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexiv)(const GLint * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexs)(GLshort c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexsv)(const GLshort * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexub)(GLubyte c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexubv)(const GLubyte * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexxOES)(GLfixed component); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexxvOES)(const GLfixed * component); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInitNames)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInsertComponentEXT)(GLuint res, GLuint src, GLuint num); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInsertEventMarkerEXT)(GLsizei length, const GLchar * marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInstrumentsBufferSGIX)(GLsizei size, GLint * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInterleavedArrays)(GLenum format, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInterpolatePathsNV)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateBufferData)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateNamedFramebufferData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateNamedFramebufferSubData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateSubFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateTexImage)(GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsAsyncMarkerSGIX)(GLuint marker); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBuffer)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBufferARB)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBufferResidentNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabled)(GLenum cap); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabledIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabledi)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebuffer)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebufferEXT)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebufferOES)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsImageHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsImageHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsList)(GLuint list); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNameAMD)(GLenum identifier, GLuint name); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNamedBufferResidentNV)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNamedStringARB)(GLint namelen, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsOcclusionQueryNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPathNV)(GLuint path); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPointInFillPathNV)(GLuint path, GLuint mask, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPointInStrokePathNV)(GLuint path, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramARB)(GLuint program); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQuery)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQueryARB)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQueryEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbuffer)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbufferEXT)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbufferOES)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSampler)(GLuint sampler); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsStateNV)(GLuint state); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSync)(GLsync sync); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSyncAPPLE)(GLsync sync); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTexture)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureEXT)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTransformFeedback)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTransformFeedbackNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVariantEnabledEXT)(GLuint id, GLenum cap); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArray)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArrayAPPLE)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArrayOES)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexAttribEnabledAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLabelObjectEXT)(GLenum type, GLuint object, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightEnviSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModeli)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModeliv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxv)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxvOES)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightf)(GLenum light, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightfv)(GLenum light, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLighti)(GLenum light, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightiv)(GLenum light, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightx)(GLenum light, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxOES)(GLenum light, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxv)(GLenum light, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxvOES)(GLenum light, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineStipple)(GLint factor, GLushort pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidth)(GLfloat width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidthx)(GLfixed width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidthxOES)(GLfixed width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLinkProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLinkProgramARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListBase)(GLuint base); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListDrawCommandsStatesClientNV)(GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameteriSGIX)(GLuint list, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadIdentity)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadIdentityDeformationMapSGIX)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixx)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadName)(GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadPaletteFromModelViewMatrixOES)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixdARB)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixfARB)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLockArraysEXT)(GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLogicOp)(GLenum opcode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeBufferNonResidentNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeBufferResidentNV)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleNonResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleNonResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleResidentARB)(GLuint64 handle, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleResidentNV)(GLuint64 handle, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeNamedBufferNonResidentNV)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeNamedBufferResidentNV)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleNonResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleNonResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1xOES)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2xOES)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBuffer)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferARB)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferOES)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapControlPointsNV)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1d)(GLint un, GLdouble u1, GLdouble u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1f)(GLint un, GLfloat u1, GLfloat u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1xOES)(GLint n, GLfixed u1, GLfixed u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2xOES)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBuffer)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferEXT)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferRangeEXT)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapParameterfvNV)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapParameterivNV)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapTexture2DINTEL)(GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib1dAPPLE)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib1fAPPLE)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib2dAPPLE)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib2fAPPLE)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialf)(GLenum face, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialfv)(GLenum face, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMateriali)(GLenum face, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialiv)(GLenum face, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialx)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxOES)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxv)(GLenum face, GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxvOES)(GLenum face, GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixFrustumEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexPointerARB)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexPointerOES)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexubvARB)(GLint size, const GLubyte * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexuivARB)(GLint size, const GLuint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexusvARB)(GLint size, const GLushort * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoad3x2fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoad3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadIdentityEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTranspose3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTransposedEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTransposefEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoaddEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadfEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMode)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMult3x2fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMult3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTranspose3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTransposedEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTransposefEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultdEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultfEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixOrthoEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixPopEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixPushEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixRotatedEXT)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixRotatefEXT)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixScaledEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixScalefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixTranslatedEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixTranslatefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaxShaderCompilerThreadsARB)(GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrier)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrierByRegion)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrierEXT)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShading)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShadingARB)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShadingOES)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinmax)(GLenum target, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixx)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixdARB)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixfARB)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArrays)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirect)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectAMD)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectBindlessCountNV)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectBindlessNV)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectCountARB)(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectEXT)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementArrayAPPLE)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElements)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertexEXT)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertexOES)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirect)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectAMD)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectBindlessCountNV)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectBindlessNV)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectCountARB)(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectEXT)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawRangeElementArrayAPPLE)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexBufferEXT)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1bOES)(GLenum texture, GLbyte s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1d)(GLenum target, GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dARB)(GLenum target, GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1f)(GLenum target, GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fARB)(GLenum target, GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1hNV)(GLenum target, GLhalfNV s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1i)(GLenum target, GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1iARB)(GLenum target, GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1s)(GLenum target, GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1sARB)(GLenum target, GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1xOES)(GLenum texture, GLfixed s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2bOES)(GLenum texture, GLbyte s, GLbyte t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2hNV)(GLenum target, GLhalfNV s, GLhalfNV t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2i)(GLenum target, GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2iARB)(GLenum target, GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2s)(GLenum target, GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2sARB)(GLenum target, GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2xOES)(GLenum texture, GLfixed s, GLfixed t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3bOES)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3hNV)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3sARB)(GLenum target, GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3xOES)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4bOES)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4hNV)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4x)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4xOES)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP1ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP1uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP2ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP2uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP3ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP3uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP4ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP4uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordPointerEXT)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvfEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvfvEXT)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnviEXT)(GLenum texunit, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGendEXT)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGendvEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenfEXT)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenfvEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGeniEXT)(GLenum texunit, GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenivEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterIivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterIuivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterfEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterfvEXT)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameteriEXT)(GLenum texunit, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexRenderbufferEXT)(GLenum texunit, GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferData)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferDataEXT)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferPageCommitmentARB)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferPageCommitmentEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferStorage)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferStorageEXT)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferSubDataEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedCopyBufferSubDataEXT)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferDrawBuffer)(GLuint framebuffer, GLenum buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferDrawBuffers)(GLuint framebuffer, GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferParameteri)(GLuint framebuffer, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferParameteriEXT)(GLuint framebuffer, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferReadBuffer)(GLuint framebuffer, GLenum src); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferRenderbuffer)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferRenderbufferEXT)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferSampleLocationsfvARB)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferSampleLocationsfvNV)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture1DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture2DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture3DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureFaceEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureLayer)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureLayerEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4dEXT)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4dvEXT)(GLuint program, GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4fEXT)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4fvEXT)(GLuint program, GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4iEXT)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4ivEXT)(GLuint program, GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4uiEXT)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4uivEXT)(GLuint program, GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameters4fvEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParametersI4ivEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParametersI4uivEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramStringEXT)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorage)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageEXT)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisample)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisampleEXT)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedStringARB)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNewList)(GLuint list, GLenum mode); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glNewObjectBufferATI)(GLsizei size, const void * pointer, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3b)(GLbyte nx, GLbyte ny, GLbyte nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3d)(GLdouble nx, GLdouble ny, GLdouble nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fVertex3fSUN)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fVertex3fvSUN)(const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3hNV)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3i)(GLint nx, GLint ny, GLint nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3s)(GLshort nx, GLshort ny, GLshort nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3x)(GLfixed nx, GLfixed ny, GLfixed nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3xOES)(GLfixed nx, GLfixed ny, GLfixed nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalP3ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalP3uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointervINTEL)(GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3bATI)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3bvATI)(GLenum stream, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3dATI)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3fATI)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3iATI)(GLenum stream, GLint nx, GLint ny, GLint nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3sATI)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectPtrLabel)(const void * ptr, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectPtrLabelKHR)(const void * ptr, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthof)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthofOES)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthox)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthoxOES)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPNTrianglesfATI)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPNTrianglesiATI)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassThrough)(GLfloat token); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassThroughxOES)(GLfixed token); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameterfv)(GLenum pname, const GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteri)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteriEXT)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteriOES)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathColorGenNV)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCommandsNV)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCoordsNV)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCoverDepthFuncNV)(GLenum func); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathDashArrayNV)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathFogGenNV)(GLenum genMode); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathGlyphIndexRangeNV)(GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathGlyphRangeNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathGlyphsNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathMemoryGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterfNV)(GLuint path, GLenum pname, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterfvNV)(GLuint path, GLenum pname, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameteriNV)(GLuint path, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterivNV)(GLuint path, GLenum pname, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStencilDepthOffsetNV)(GLfloat factor, GLfloat units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStencilFuncNV)(GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStringNV)(GLuint path, GLenum format, GLsizei length, const void * pathString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathSubCommandsNV)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathSubCoordsNV)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathTexGenNV)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPauseTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPauseTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelDataRangeNV)(GLenum target, GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapfv)(GLenum map, GLsizei mapsize, const GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapuiv)(GLenum map, GLsizei mapsize, const GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapusv)(GLenum map, GLsizei mapsize, const GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapx)(GLenum map, GLint size, const GLfixed * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStoref)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStorei)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStorex)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameteriSGIS)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenSGIX)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferi)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterfEXT)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameteriEXT)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelZoom)(GLfloat xfactor, GLfloat yfactor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelZoomxOES)(GLfixed xfactor, GLfixed yfactor); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glPointAlongPathNV)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfARB)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfEXT)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfSGIS)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvARB)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvEXT)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvSGIS)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteri)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteriNV)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteriv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterivNV)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxv)(GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxvOES)(GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSize)(GLfloat size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizePointerOES)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizex)(GLfixed size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizexOES)(GLfixed size); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glPollAsyncSGIX)(GLuint * markerp); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glPollInstrumentsSGIX)(GLint * marker_p); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonMode)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonModeNV)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffset)(GLfloat factor, GLfloat units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetEXT)(GLfloat factor, GLfloat bias); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetx)(GLfixed factor, GLfixed units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetxOES)(GLfixed factor, GLfixed units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonStipple)(const GLubyte * mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopAttrib)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopClientAttrib)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopDebugGroup)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopDebugGroupKHR)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopGroupMarkerEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopMatrix)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopName)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPresentFrameDualFillNV)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPresentFrameKeyedNV)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBox)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxARB)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxEXT)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxOES)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartIndex)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartIndexNV)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTextures)(GLsizei n, const GLuint * textures, const GLfloat * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTexturesxOES)(GLsizei n, const GLuint * textures, const GLfixed * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBinary)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const void * binary, GLint length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersIivNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersIuivNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersfvNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4iNV)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4ivNV)(GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4uiNV)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4uivNV)(GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParametersI4ivNV)(GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParametersI4uivNV)(GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4iNV)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4ivNV)(GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4uiNV)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4uivNV)(GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParametersI4ivNV)(GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParametersI4uivNV)(GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteri)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteriARB)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteriEXT)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramPathFragmentInputGenNV)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramStringARB)(GLenum target, GLenum format, GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramSubroutineParametersuivNV)(GLenum target, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1d)(GLuint program, GLint location, GLdouble v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dEXT)(GLuint program, GLint location, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1f)(GLuint program, GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fEXT)(GLuint program, GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i)(GLuint program, GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64ARB)(GLuint program, GLint location, GLint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64NV)(GLuint program, GLint location, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1iEXT)(GLuint program, GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui)(GLuint program, GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64ARB)(GLuint program, GLint location, GLuint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64NV)(GLuint program, GLint location, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uiEXT)(GLuint program, GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2d)(GLuint program, GLint location, GLdouble v0, GLdouble v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2f)(GLuint program, GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i)(GLuint program, GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2iEXT)(GLuint program, GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui)(GLuint program, GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3d)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3f)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4d)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4f)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64ARB)(GLuint program, GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64NV)(GLuint program, GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformui64NV)(GLuint program, GLint location, GLuint64EXT value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramVertexLimitNV)(GLenum target, GLint limit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProvokingVertex)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProvokingVertexEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushAttrib)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushClientAttrib)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushClientAttribDefaultEXT)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar * message); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushDebugGroupKHR)(GLenum source, GLuint id, GLsizei length, const GLchar * message); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushGroupMarkerEXT)(GLsizei length, const GLchar * marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushMatrix)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushName)(GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryCounter)(GLuint id, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryCounterEXT)(GLuint id, GLenum target); + +extern EPOXY_IMPORTEXPORT GLbitfield (EPOXY_CALLSPEC *epoxy_glQueryMatrixxOES)(GLfixed * mantissa, GLint * exponent); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryObjectParameteruiAMD)(GLenum target, GLuint id, GLenum pname, GLuint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2xOES)(GLfixed x, GLfixed y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3xOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4i)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4xOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterSamplesEXT)(GLuint samples, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBuffer)(GLenum src); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBufferIndexedEXT)(GLenum src, GLint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBufferNV)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadInstrumentsSGIX)(GLint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsKHR)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectdv)(const GLdouble * v1, const GLdouble * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectfv)(const GLfloat * v1, const GLfloat * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRecti)(GLint x1, GLint y1, GLint x2, GLint y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectiv)(const GLint * v1, const GLint * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectsv)(const GLshort * v1, const GLshort * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectxOES)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectxvOES)(const GLfixed * v1, const GLfixed * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReferencePlaneSGIX)(const GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReleaseShaderCompiler)(void); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glRenderMode)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleAPPLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleNV)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodePointerSUN)(GLenum type, GLsizei stride, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeubSUN)(GLubyte code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeubvSUN)(const GLubyte * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor3fVertex3fSUN)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor3fVertex3fvSUN)(const GLuint * rc, const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4ubVertex3fSUN)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4ubVertex3fvSUN)(const GLuint * rc, const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiNormal3fVertex3fSUN)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiSUN)(GLuint code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiVertex3fSUN)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiVertex3fvSUN)(const GLuint * rc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuivSUN)(const GLuint * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeusSUN)(GLushort code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeusvSUN)(const GLushort * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRequestResidentProgramsNV)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetHistogram)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetHistogramEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetMinmax)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetMinmaxEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResizeBuffersMESA)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResolveDepthValuesNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResolveMultisampleFramebufferAPPLE)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResumeTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResumeTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatexOES)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoverage)(GLfloat value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoverageARB)(GLfloat value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoveragex)(GLclampx value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoveragexOES)(GLclampx value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskEXT)(GLclampf value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskIndexedNV)(GLuint index, GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskSGIS)(GLclampf value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaski)(GLuint maskNumber, GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplePatternEXT)(GLenum pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplePatternSGIS)(GLenum pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIivEXT)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIivOES)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuivOES)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameteri)(GLuint sampler, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScaled)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalef)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalex)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalexOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissor)(GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorArrayv)(GLuint first, GLsizei count, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorArrayvNV)(GLuint first, GLsizei count, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexed)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedNV)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedvNV)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3i)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3iEXT)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3s)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubvEXT)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ui)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uivEXT)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3us)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usvEXT)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorP3ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorP3uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSelectBuffer)(GLsizei size, GLuint * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFenceNV)(GLuint fence, GLenum condition); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetInvariantEXT)(GLuint id, GLenum type, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetLocalConstantEXT)(GLuint id, GLenum type, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetMultisamplefvAMD)(GLenum pname, GLuint index, const GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShadeModel)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderBinary)(GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp1EXT)(GLenum op, GLuint res, GLuint arg1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp2EXT)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp3EXT)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderSource)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderSourceARB)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderStorageBlockBinding)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterfSGIX)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterfvSGIX)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameteriSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterivSGIX)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStartInstrumentsSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStateCaptureNV)(GLuint state, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilClearTagEXT)(GLsizei stencilTagBits, GLuint stencilClearTag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFillPathNV)(GLuint path, GLenum fillMode, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFunc)(GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilMask)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilMaskSeparate)(GLenum face, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpSeparate)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpSeparateATI)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpValueAMD)(GLenum face, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilStrokePathNV)(GLuint path, GLint reference, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverFillPathNV)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverStrokePathNV)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStopInstrumentsSGIX)(GLint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStringMarkerGREMEDY)(GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSubpixelPrecisionBiasNV)(GLuint xbits, GLuint ybits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSwizzleEXT)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSyncTextureINTEL)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTagSampleBufferSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3bEXT)(GLbyte tx, GLbyte ty, GLbyte tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3dEXT)(GLdouble tx, GLdouble ty, GLdouble tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3fEXT)(GLfloat tx, GLfloat ty, GLfloat tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3iEXT)(GLint tx, GLint ty, GLint tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3sEXT)(GLshort tx, GLshort ty, GLshort tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangentPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTbufferMask3DFX)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTessellationFactorAMD)(GLfloat factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTessellationModeAMD)(GLenum mode); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestObjectAPPLE)(GLenum object, GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBuffer)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferARB)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferEXT)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferOES)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRange)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRangeEXT)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRangeOES)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBumpParameterfvATI)(GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBumpParameterivATI)(GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1bOES)(GLbyte s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1d)(GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1f)(GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1hNV)(GLhalfNV s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1i)(GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1s)(GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1xOES)(GLfixed s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2bOES)(GLbyte s, GLbyte t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2d)(GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2f)(GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4ubVertex3fSUN)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4ubVertex3fvSUN)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fNormal3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fNormal3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fVertex3fvSUN)(const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2hNV)(GLhalfNV s, GLhalfNV t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2i)(GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2s)(GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2xOES)(GLfixed s, GLfixed t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3bOES)(GLbyte s, GLbyte t, GLbyte r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3d)(GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3f)(GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3hNV)(GLhalfNV s, GLhalfNV t, GLhalfNV r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3i)(GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3s)(GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3xOES)(GLfixed s, GLfixed t, GLfixed r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4bOES)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fVertex4fSUN)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fVertex4fvSUN)(const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4hNV)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4i)(GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4xOES)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP1ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP1uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP2ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP2uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP3ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP3uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP4ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP4uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvf)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvi)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnviv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvx)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxv)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGend)(GLenum coord, GLenum pname, GLdouble param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGendv)(GLenum coord, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenf)(GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfOES)(GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfv)(GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfvOES)(GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeni)(GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeniOES)(GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeniv)(GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenivOES)(GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenxOES)(GLenum coord, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenxvOES)(GLenum coord, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2DMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexPageCommitmentARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexPageCommitmentEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIiv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIivOES)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuiv)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuivOES)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterf)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameteri)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterx)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxv)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexRenderbufferNV)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage1D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage1DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DMultisampleOES)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorageSparseAMD)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBarrier)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBarrierNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBuffer)(GLuint texture, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferEXT)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferRange)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferRangeEXT)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureColorMaskSGIS)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DMultisampleCoverageNV)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DMultisampleCoverageNV)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureLightEXT)(GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureMaterialEXT)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureNormalEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexturePageCommitmentEXT)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIiv)(GLuint texture, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIivEXT)(GLuint texture, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIuiv)(GLuint texture, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIuivEXT)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterf)(GLuint texture, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfEXT)(GLuint texture, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfv)(GLuint texture, GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfvEXT)(GLuint texture, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteri)(GLuint texture, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteriEXT)(GLuint texture, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteriv)(GLuint texture, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterivEXT)(GLuint texture, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureRangeAPPLE)(GLenum target, GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureRenderbufferEXT)(GLuint texture, GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage1D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorageSparseAMD)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureView)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureViewEXT)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureViewOES)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackAttribsNV)(GLsizei count, const GLint * attribs, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackBufferBase)(GLuint xfb, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackBufferRange)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackStreamAttribsNV)(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryingsNV)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformPathNV)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslated)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatef)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatex)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatexOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1d)(GLint location, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1f)(GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fARB)(GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i)(GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64ARB)(GLint location, GLint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64NV)(GLint location, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1iARB)(GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui)(GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64ARB)(GLint location, GLuint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64NV)(GLint location, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uiEXT)(GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2d)(GLint location, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2f)(GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fARB)(GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i)(GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64ARB)(GLint location, GLint64 x, GLint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64NV)(GLint location, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2iARB)(GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui)(GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64ARB)(GLint location, GLuint64 x, GLuint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uiEXT)(GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3d)(GLint location, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i)(GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64ARB)(GLint location, GLint64 x, GLint64 y, GLint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui)(GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64ARB)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uiEXT)(GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4d)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64ARB)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64ARB)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uiEXT)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformBufferEXT)(GLuint program, GLint location, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64ARB)(GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64NV)(GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64vNV)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformSubroutinesuiv)(GLenum shadertype, GLsizei count, const GLuint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformui64NV)(GLint location, GLuint64EXT value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnlockArraysEXT)(void); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBuffer)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBufferARB)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBufferOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapNamedBuffer)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapNamedBufferEXT)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnmapObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnmapTexture2DINTEL)(GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUpdateObjectBufferATI)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramObjectARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramStages)(GLuint pipeline, GLbitfield stages, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramStagesEXT)(GLuint pipeline, GLbitfield stages, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseShaderProgramEXT)(GLenum type, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUFiniNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUGetSurfaceivNV)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUInitNV)(const void * vdpDevice, const void * getProcAddress); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glVDPAUIsSurfaceNV)(GLvdpauSurfaceNV surface); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUMapSurfacesNV)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); + +extern EPOXY_IMPORTEXPORT GLvdpauSurfaceNV (EPOXY_CALLSPEC *epoxy_glVDPAURegisterOutputSurfaceNV)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); + +extern EPOXY_IMPORTEXPORT GLvdpauSurfaceNV (EPOXY_CALLSPEC *epoxy_glVDPAURegisterVideoSurfaceNV)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUSurfaceAccessNV)(GLvdpauSurfaceNV surface, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUUnmapSurfacesNV)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUUnregisterSurfaceNV)(GLvdpauSurfaceNV surface); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantArrayObjectATI)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantPointerEXT)(GLuint id, GLenum type, GLuint stride, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantbvEXT)(GLuint id, const GLbyte * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantdvEXT)(GLuint id, const GLdouble * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantfvEXT)(GLuint id, const GLfloat * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantivEXT)(GLuint id, const GLint * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantsvEXT)(GLuint id, const GLshort * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantubvEXT)(GLuint id, const GLubyte * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantuivEXT)(GLuint id, const GLuint * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantusvEXT)(GLuint id, const GLushort * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2bOES)(GLbyte x, GLbyte y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2hNV)(GLhalfNV x, GLhalfNV y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2xOES)(GLfixed x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3bOES)(GLbyte x, GLbyte y, GLbyte z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3xOES)(GLfixed x, GLfixed y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4bOES)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4i)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4s)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4xOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribIFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribLFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayBindVertexBufferEXT)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayBindingDivisor)(GLuint vaobj, GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayColorOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayEdgeFlagOffsetEXT)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayElementBuffer)(GLuint vaobj, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayFogCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayIndexOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayMultiTexCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayNormalOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayParameteriAPPLE)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayRangeAPPLE)(GLsizei length, void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayRangeNV)(GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArraySecondaryColorOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayTexCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribBindingEXT)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribDivisorEXT)(GLuint vaobj, GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribIFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribIOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribLFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribLOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBindingDivisorEXT)(GLuint vaobj, GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBuffers)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1d)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dARB)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dNV)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1f)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fARB)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fNV)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1hNV)(GLuint index, GLhalfNV x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1s)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sARB)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sNV)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2d)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2f)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2hNV)(GLuint index, GLhalfNV x, GLhalfNV y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2s)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nbv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NbvARB)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Niv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NivARB)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nsv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NsvARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NubvARB)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nuiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NuivARB)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nusv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NusvARB)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4bv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4bvARB)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ivARB)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubvARB)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubvNV)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4uivARB)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4usv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4usvARB)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribArrayObjectATI)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribBinding)(GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisor)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorARB)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorEXT)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorNV)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribFormat)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribFormatNV)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1i)(GLuint index, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1iEXT)(GLuint index, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1ui)(GLuint index, GLuint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uiEXT)(GLuint index, GLuint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2i)(GLuint index, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2iEXT)(GLuint index, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2ui)(GLuint index, GLuint x, GLuint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4bv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4bvEXT)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4svEXT)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4usv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4usvEXT)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIFormatNV)(GLuint index, GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1d)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dEXT)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1i64NV)(GLuint index, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64ARB)(GLuint index, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64NV)(GLuint index, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64vARB)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2d)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dEXT)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2i64NV)(GLuint index, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dEXT)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3i64NV)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dEXT)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4i64NV)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLFormatNV)(GLuint index, GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribParameteriAMD)(GLuint index, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointerNV)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4ubvNV)(GLuint index, GLsizei count, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBindingDivisor)(GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendARB)(GLint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendEnvfATI)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendEnviATI)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP2ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP2uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP3ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP3uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP4ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP4uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1dATI)(GLenum stream, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1fATI)(GLenum stream, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1iATI)(GLenum stream, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1sATI)(GLenum stream, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2dATI)(GLenum stream, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2fATI)(GLenum stream, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2iATI)(GLenum stream, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2sATI)(GLenum stream, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3dATI)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3fATI)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3iATI)(GLenum stream, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3sATI)(GLenum stream, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4dATI)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4fATI)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4iATI)(GLenum stream, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4sATI)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightPointerEXT)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightfEXT)(GLfloat weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightfvEXT)(const GLfloat * weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeighthNV)(GLhalfNV weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeighthvNV)(const GLhalfNV * weight); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glVideoCaptureNV)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterdvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterfvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterivNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewport)(GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportArrayv)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportArrayvNV)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedf)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfNV)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPathsNV)(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPointerARB)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPointerOES)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightbvARB)(GLint size, const GLbyte * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightdvARB)(GLint size, const GLdouble * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightfvARB)(GLint size, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightivARB)(GLint size, const GLint * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightsvARB)(GLint size, const GLshort * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightubvARB)(GLint size, const GLubyte * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightuivARB)(GLint size, const GLuint * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightusvARB)(GLint size, const GLushort * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dARB)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dMESA)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dvARB)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fARB)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fMESA)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fvARB)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iARB)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iMESA)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2ivARB)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sARB)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sMESA)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2svARB)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dvARB)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fvARB)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iARB)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iMESA)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3ivARB)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sARB)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sMESA)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3svARB)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWriteMaskEXT)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +#define glAccum epoxy_glAccum +#define glAccumxOES epoxy_glAccumxOES +#define glActiveProgramEXT epoxy_glActiveProgramEXT +#define glActiveShaderProgram epoxy_glActiveShaderProgram +#define glActiveShaderProgramEXT epoxy_glActiveShaderProgramEXT +#define glActiveStencilFaceEXT epoxy_glActiveStencilFaceEXT +#define glActiveTexture epoxy_glActiveTexture +#define glActiveTextureARB epoxy_glActiveTextureARB +#define glActiveVaryingNV epoxy_glActiveVaryingNV +#define glAlphaFragmentOp1ATI epoxy_glAlphaFragmentOp1ATI +#define glAlphaFragmentOp2ATI epoxy_glAlphaFragmentOp2ATI +#define glAlphaFragmentOp3ATI epoxy_glAlphaFragmentOp3ATI +#define glAlphaFunc epoxy_glAlphaFunc +#define glAlphaFuncQCOM epoxy_glAlphaFuncQCOM +#define glAlphaFuncx epoxy_glAlphaFuncx +#define glAlphaFuncxOES epoxy_glAlphaFuncxOES +#define glApplyFramebufferAttachmentCMAAINTEL epoxy_glApplyFramebufferAttachmentCMAAINTEL +#define glApplyTextureEXT epoxy_glApplyTextureEXT +#define glAreProgramsResidentNV epoxy_glAreProgramsResidentNV +#define glAreTexturesResident epoxy_glAreTexturesResident +#define glAreTexturesResidentEXT epoxy_glAreTexturesResidentEXT +#define glArrayElement epoxy_glArrayElement +#define glArrayElementEXT epoxy_glArrayElementEXT +#define glArrayObjectATI epoxy_glArrayObjectATI +#define glAsyncMarkerSGIX epoxy_glAsyncMarkerSGIX +#define glAttachObjectARB epoxy_glAttachObjectARB +#define glAttachShader epoxy_glAttachShader +#define glBegin epoxy_glBegin +#define glBeginConditionalRender epoxy_glBeginConditionalRender +#define glBeginConditionalRenderNV epoxy_glBeginConditionalRenderNV +#define glBeginConditionalRenderNVX epoxy_glBeginConditionalRenderNVX +#define glBeginFragmentShaderATI epoxy_glBeginFragmentShaderATI +#define glBeginOcclusionQueryNV epoxy_glBeginOcclusionQueryNV +#define glBeginPerfMonitorAMD epoxy_glBeginPerfMonitorAMD +#define glBeginPerfQueryINTEL epoxy_glBeginPerfQueryINTEL +#define glBeginQuery epoxy_glBeginQuery +#define glBeginQueryARB epoxy_glBeginQueryARB +#define glBeginQueryEXT epoxy_glBeginQueryEXT +#define glBeginQueryIndexed epoxy_glBeginQueryIndexed +#define glBeginTransformFeedback epoxy_glBeginTransformFeedback +#define glBeginTransformFeedbackEXT epoxy_glBeginTransformFeedbackEXT +#define glBeginTransformFeedbackNV epoxy_glBeginTransformFeedbackNV +#define glBeginVertexShaderEXT epoxy_glBeginVertexShaderEXT +#define glBeginVideoCaptureNV epoxy_glBeginVideoCaptureNV +#define glBindAttribLocation epoxy_glBindAttribLocation +#define glBindAttribLocationARB epoxy_glBindAttribLocationARB +#define glBindBuffer epoxy_glBindBuffer +#define glBindBufferARB epoxy_glBindBufferARB +#define glBindBufferBase epoxy_glBindBufferBase +#define glBindBufferBaseEXT epoxy_glBindBufferBaseEXT +#define glBindBufferBaseNV epoxy_glBindBufferBaseNV +#define glBindBufferOffsetEXT epoxy_glBindBufferOffsetEXT +#define glBindBufferOffsetNV epoxy_glBindBufferOffsetNV +#define glBindBufferRange epoxy_glBindBufferRange +#define glBindBufferRangeEXT epoxy_glBindBufferRangeEXT +#define glBindBufferRangeNV epoxy_glBindBufferRangeNV +#define glBindBuffersBase epoxy_glBindBuffersBase +#define glBindBuffersRange epoxy_glBindBuffersRange +#define glBindFragDataLocation epoxy_glBindFragDataLocation +#define glBindFragDataLocationEXT epoxy_glBindFragDataLocationEXT +#define glBindFragDataLocationIndexed epoxy_glBindFragDataLocationIndexed +#define glBindFragDataLocationIndexedEXT epoxy_glBindFragDataLocationIndexedEXT +#define glBindFragmentShaderATI epoxy_glBindFragmentShaderATI +#define glBindFramebuffer epoxy_glBindFramebuffer +#define glBindFramebufferEXT epoxy_glBindFramebufferEXT +#define glBindFramebufferOES epoxy_glBindFramebufferOES +#define glBindImageTexture epoxy_glBindImageTexture +#define glBindImageTextureEXT epoxy_glBindImageTextureEXT +#define glBindImageTextures epoxy_glBindImageTextures +#define glBindLightParameterEXT epoxy_glBindLightParameterEXT +#define glBindMaterialParameterEXT epoxy_glBindMaterialParameterEXT +#define glBindMultiTextureEXT epoxy_glBindMultiTextureEXT +#define glBindParameterEXT epoxy_glBindParameterEXT +#define glBindProgramARB epoxy_glBindProgramARB +#define glBindProgramNV epoxy_glBindProgramNV +#define glBindProgramPipeline epoxy_glBindProgramPipeline +#define glBindProgramPipelineEXT epoxy_glBindProgramPipelineEXT +#define glBindRenderbuffer epoxy_glBindRenderbuffer +#define glBindRenderbufferEXT epoxy_glBindRenderbufferEXT +#define glBindRenderbufferOES epoxy_glBindRenderbufferOES +#define glBindSampler epoxy_glBindSampler +#define glBindSamplers epoxy_glBindSamplers +#define glBindTexGenParameterEXT epoxy_glBindTexGenParameterEXT +#define glBindTexture epoxy_glBindTexture +#define glBindTextureEXT epoxy_glBindTextureEXT +#define glBindTextureUnit epoxy_glBindTextureUnit +#define glBindTextureUnitParameterEXT epoxy_glBindTextureUnitParameterEXT +#define glBindTextures epoxy_glBindTextures +#define glBindTransformFeedback epoxy_glBindTransformFeedback +#define glBindTransformFeedbackNV epoxy_glBindTransformFeedbackNV +#define glBindVertexArray epoxy_glBindVertexArray +#define glBindVertexArrayAPPLE epoxy_glBindVertexArrayAPPLE +#define glBindVertexArrayOES epoxy_glBindVertexArrayOES +#define glBindVertexBuffer epoxy_glBindVertexBuffer +#define glBindVertexBuffers epoxy_glBindVertexBuffers +#define glBindVertexShaderEXT epoxy_glBindVertexShaderEXT +#define glBindVideoCaptureStreamBufferNV epoxy_glBindVideoCaptureStreamBufferNV +#define glBindVideoCaptureStreamTextureNV epoxy_glBindVideoCaptureStreamTextureNV +#define glBinormal3bEXT epoxy_glBinormal3bEXT +#define glBinormal3bvEXT epoxy_glBinormal3bvEXT +#define glBinormal3dEXT epoxy_glBinormal3dEXT +#define glBinormal3dvEXT epoxy_glBinormal3dvEXT +#define glBinormal3fEXT epoxy_glBinormal3fEXT +#define glBinormal3fvEXT epoxy_glBinormal3fvEXT +#define glBinormal3iEXT epoxy_glBinormal3iEXT +#define glBinormal3ivEXT epoxy_glBinormal3ivEXT +#define glBinormal3sEXT epoxy_glBinormal3sEXT +#define glBinormal3svEXT epoxy_glBinormal3svEXT +#define glBinormalPointerEXT epoxy_glBinormalPointerEXT +#define glBitmap epoxy_glBitmap +#define glBitmapxOES epoxy_glBitmapxOES +#define glBlendBarrier epoxy_glBlendBarrier +#define glBlendBarrierKHR epoxy_glBlendBarrierKHR +#define glBlendBarrierNV epoxy_glBlendBarrierNV +#define glBlendColor epoxy_glBlendColor +#define glBlendColorEXT epoxy_glBlendColorEXT +#define glBlendColorxOES epoxy_glBlendColorxOES +#define glBlendEquation epoxy_glBlendEquation +#define glBlendEquationEXT epoxy_glBlendEquationEXT +#define glBlendEquationIndexedAMD epoxy_glBlendEquationIndexedAMD +#define glBlendEquationOES epoxy_glBlendEquationOES +#define glBlendEquationSeparate epoxy_glBlendEquationSeparate +#define glBlendEquationSeparateEXT epoxy_glBlendEquationSeparateEXT +#define glBlendEquationSeparateIndexedAMD epoxy_glBlendEquationSeparateIndexedAMD +#define glBlendEquationSeparateOES epoxy_glBlendEquationSeparateOES +#define glBlendEquationSeparatei epoxy_glBlendEquationSeparatei +#define glBlendEquationSeparateiARB epoxy_glBlendEquationSeparateiARB +#define glBlendEquationSeparateiEXT epoxy_glBlendEquationSeparateiEXT +#define glBlendEquationSeparateiOES epoxy_glBlendEquationSeparateiOES +#define glBlendEquationi epoxy_glBlendEquationi +#define glBlendEquationiARB epoxy_glBlendEquationiARB +#define glBlendEquationiEXT epoxy_glBlendEquationiEXT +#define glBlendEquationiOES epoxy_glBlendEquationiOES +#define glBlendFunc epoxy_glBlendFunc +#define glBlendFuncIndexedAMD epoxy_glBlendFuncIndexedAMD +#define glBlendFuncSeparate epoxy_glBlendFuncSeparate +#define glBlendFuncSeparateEXT epoxy_glBlendFuncSeparateEXT +#define glBlendFuncSeparateINGR epoxy_glBlendFuncSeparateINGR +#define glBlendFuncSeparateIndexedAMD epoxy_glBlendFuncSeparateIndexedAMD +#define glBlendFuncSeparateOES epoxy_glBlendFuncSeparateOES +#define glBlendFuncSeparatei epoxy_glBlendFuncSeparatei +#define glBlendFuncSeparateiARB epoxy_glBlendFuncSeparateiARB +#define glBlendFuncSeparateiEXT epoxy_glBlendFuncSeparateiEXT +#define glBlendFuncSeparateiOES epoxy_glBlendFuncSeparateiOES +#define glBlendFunci epoxy_glBlendFunci +#define glBlendFunciARB epoxy_glBlendFunciARB +#define glBlendFunciEXT epoxy_glBlendFunciEXT +#define glBlendFunciOES epoxy_glBlendFunciOES +#define glBlendParameteriNV epoxy_glBlendParameteriNV +#define glBlitFramebuffer epoxy_glBlitFramebuffer +#define glBlitFramebufferANGLE epoxy_glBlitFramebufferANGLE +#define glBlitFramebufferEXT epoxy_glBlitFramebufferEXT +#define glBlitFramebufferNV epoxy_glBlitFramebufferNV +#define glBlitNamedFramebuffer epoxy_glBlitNamedFramebuffer +#define glBufferAddressRangeNV epoxy_glBufferAddressRangeNV +#define glBufferData epoxy_glBufferData +#define glBufferDataARB epoxy_glBufferDataARB +#define glBufferPageCommitmentARB epoxy_glBufferPageCommitmentARB +#define glBufferParameteriAPPLE epoxy_glBufferParameteriAPPLE +#define glBufferStorage epoxy_glBufferStorage +#define glBufferStorageEXT epoxy_glBufferStorageEXT +#define glBufferSubData epoxy_glBufferSubData +#define glBufferSubDataARB epoxy_glBufferSubDataARB +#define glCallCommandListNV epoxy_glCallCommandListNV +#define glCallList epoxy_glCallList +#define glCallLists epoxy_glCallLists +#define glCheckFramebufferStatus epoxy_glCheckFramebufferStatus +#define glCheckFramebufferStatusEXT epoxy_glCheckFramebufferStatusEXT +#define glCheckFramebufferStatusOES epoxy_glCheckFramebufferStatusOES +#define glCheckNamedFramebufferStatus epoxy_glCheckNamedFramebufferStatus +#define glCheckNamedFramebufferStatusEXT epoxy_glCheckNamedFramebufferStatusEXT +#define glClampColor epoxy_glClampColor +#define glClampColorARB epoxy_glClampColorARB +#define glClear epoxy_glClear +#define glClearAccum epoxy_glClearAccum +#define glClearAccumxOES epoxy_glClearAccumxOES +#define glClearBufferData epoxy_glClearBufferData +#define glClearBufferSubData epoxy_glClearBufferSubData +#define glClearBufferfi epoxy_glClearBufferfi +#define glClearBufferfv epoxy_glClearBufferfv +#define glClearBufferiv epoxy_glClearBufferiv +#define glClearBufferuiv epoxy_glClearBufferuiv +#define glClearColor epoxy_glClearColor +#define glClearColorIiEXT epoxy_glClearColorIiEXT +#define glClearColorIuiEXT epoxy_glClearColorIuiEXT +#define glClearColorx epoxy_glClearColorx +#define glClearColorxOES epoxy_glClearColorxOES +#define glClearDepth epoxy_glClearDepth +#define glClearDepthdNV epoxy_glClearDepthdNV +#define glClearDepthf epoxy_glClearDepthf +#define glClearDepthfOES epoxy_glClearDepthfOES +#define glClearDepthx epoxy_glClearDepthx +#define glClearDepthxOES epoxy_glClearDepthxOES +#define glClearIndex epoxy_glClearIndex +#define glClearNamedBufferData epoxy_glClearNamedBufferData +#define glClearNamedBufferDataEXT epoxy_glClearNamedBufferDataEXT +#define glClearNamedBufferSubData epoxy_glClearNamedBufferSubData +#define glClearNamedBufferSubDataEXT epoxy_glClearNamedBufferSubDataEXT +#define glClearNamedFramebufferfi epoxy_glClearNamedFramebufferfi +#define glClearNamedFramebufferfv epoxy_glClearNamedFramebufferfv +#define glClearNamedFramebufferiv epoxy_glClearNamedFramebufferiv +#define glClearNamedFramebufferuiv epoxy_glClearNamedFramebufferuiv +#define glClearStencil epoxy_glClearStencil +#define glClearTexImage epoxy_glClearTexImage +#define glClearTexSubImage epoxy_glClearTexSubImage +#define glClientActiveTexture epoxy_glClientActiveTexture +#define glClientActiveTextureARB epoxy_glClientActiveTextureARB +#define glClientActiveVertexStreamATI epoxy_glClientActiveVertexStreamATI +#define glClientAttribDefaultEXT epoxy_glClientAttribDefaultEXT +#define glClientWaitSync epoxy_glClientWaitSync +#define glClientWaitSyncAPPLE epoxy_glClientWaitSyncAPPLE +#define glClipControl epoxy_glClipControl +#define glClipPlane epoxy_glClipPlane +#define glClipPlanef epoxy_glClipPlanef +#define glClipPlanefIMG epoxy_glClipPlanefIMG +#define glClipPlanefOES epoxy_glClipPlanefOES +#define glClipPlanex epoxy_glClipPlanex +#define glClipPlanexIMG epoxy_glClipPlanexIMG +#define glClipPlanexOES epoxy_glClipPlanexOES +#define glColor3b epoxy_glColor3b +#define glColor3bv epoxy_glColor3bv +#define glColor3d epoxy_glColor3d +#define glColor3dv epoxy_glColor3dv +#define glColor3f epoxy_glColor3f +#define glColor3fVertex3fSUN epoxy_glColor3fVertex3fSUN +#define glColor3fVertex3fvSUN epoxy_glColor3fVertex3fvSUN +#define glColor3fv epoxy_glColor3fv +#define glColor3hNV epoxy_glColor3hNV +#define glColor3hvNV epoxy_glColor3hvNV +#define glColor3i epoxy_glColor3i +#define glColor3iv epoxy_glColor3iv +#define glColor3s epoxy_glColor3s +#define glColor3sv epoxy_glColor3sv +#define glColor3ub epoxy_glColor3ub +#define glColor3ubv epoxy_glColor3ubv +#define glColor3ui epoxy_glColor3ui +#define glColor3uiv epoxy_glColor3uiv +#define glColor3us epoxy_glColor3us +#define glColor3usv epoxy_glColor3usv +#define glColor3xOES epoxy_glColor3xOES +#define glColor3xvOES epoxy_glColor3xvOES +#define glColor4b epoxy_glColor4b +#define glColor4bv epoxy_glColor4bv +#define glColor4d epoxy_glColor4d +#define glColor4dv epoxy_glColor4dv +#define glColor4f epoxy_glColor4f +#define glColor4fNormal3fVertex3fSUN epoxy_glColor4fNormal3fVertex3fSUN +#define glColor4fNormal3fVertex3fvSUN epoxy_glColor4fNormal3fVertex3fvSUN +#define glColor4fv epoxy_glColor4fv +#define glColor4hNV epoxy_glColor4hNV +#define glColor4hvNV epoxy_glColor4hvNV +#define glColor4i epoxy_glColor4i +#define glColor4iv epoxy_glColor4iv +#define glColor4s epoxy_glColor4s +#define glColor4sv epoxy_glColor4sv +#define glColor4ub epoxy_glColor4ub +#define glColor4ubVertex2fSUN epoxy_glColor4ubVertex2fSUN +#define glColor4ubVertex2fvSUN epoxy_glColor4ubVertex2fvSUN +#define glColor4ubVertex3fSUN epoxy_glColor4ubVertex3fSUN +#define glColor4ubVertex3fvSUN epoxy_glColor4ubVertex3fvSUN +#define glColor4ubv epoxy_glColor4ubv +#define glColor4ui epoxy_glColor4ui +#define glColor4uiv epoxy_glColor4uiv +#define glColor4us epoxy_glColor4us +#define glColor4usv epoxy_glColor4usv +#define glColor4x epoxy_glColor4x +#define glColor4xOES epoxy_glColor4xOES +#define glColor4xvOES epoxy_glColor4xvOES +#define glColorFormatNV epoxy_glColorFormatNV +#define glColorFragmentOp1ATI epoxy_glColorFragmentOp1ATI +#define glColorFragmentOp2ATI epoxy_glColorFragmentOp2ATI +#define glColorFragmentOp3ATI epoxy_glColorFragmentOp3ATI +#define glColorMask epoxy_glColorMask +#define glColorMaskIndexedEXT epoxy_glColorMaskIndexedEXT +#define glColorMaski epoxy_glColorMaski +#define glColorMaskiEXT epoxy_glColorMaskiEXT +#define glColorMaskiOES epoxy_glColorMaskiOES +#define glColorMaterial epoxy_glColorMaterial +#define glColorP3ui epoxy_glColorP3ui +#define glColorP3uiv epoxy_glColorP3uiv +#define glColorP4ui epoxy_glColorP4ui +#define glColorP4uiv epoxy_glColorP4uiv +#define glColorPointer epoxy_glColorPointer +#define glColorPointerEXT epoxy_glColorPointerEXT +#define glColorPointerListIBM epoxy_glColorPointerListIBM +#define glColorPointervINTEL epoxy_glColorPointervINTEL +#define glColorSubTable epoxy_glColorSubTable +#define glColorSubTableEXT epoxy_glColorSubTableEXT +#define glColorTable epoxy_glColorTable +#define glColorTableEXT epoxy_glColorTableEXT +#define glColorTableParameterfv epoxy_glColorTableParameterfv +#define glColorTableParameterfvSGI epoxy_glColorTableParameterfvSGI +#define glColorTableParameteriv epoxy_glColorTableParameteriv +#define glColorTableParameterivSGI epoxy_glColorTableParameterivSGI +#define glColorTableSGI epoxy_glColorTableSGI +#define glCombinerInputNV epoxy_glCombinerInputNV +#define glCombinerOutputNV epoxy_glCombinerOutputNV +#define glCombinerParameterfNV epoxy_glCombinerParameterfNV +#define glCombinerParameterfvNV epoxy_glCombinerParameterfvNV +#define glCombinerParameteriNV epoxy_glCombinerParameteriNV +#define glCombinerParameterivNV epoxy_glCombinerParameterivNV +#define glCombinerStageParameterfvNV epoxy_glCombinerStageParameterfvNV +#define glCommandListSegmentsNV epoxy_glCommandListSegmentsNV +#define glCompileCommandListNV epoxy_glCompileCommandListNV +#define glCompileShader epoxy_glCompileShader +#define glCompileShaderARB epoxy_glCompileShaderARB +#define glCompileShaderIncludeARB epoxy_glCompileShaderIncludeARB +#define glCompressedMultiTexImage1DEXT epoxy_glCompressedMultiTexImage1DEXT +#define glCompressedMultiTexImage2DEXT epoxy_glCompressedMultiTexImage2DEXT +#define glCompressedMultiTexImage3DEXT epoxy_glCompressedMultiTexImage3DEXT +#define glCompressedMultiTexSubImage1DEXT epoxy_glCompressedMultiTexSubImage1DEXT +#define glCompressedMultiTexSubImage2DEXT epoxy_glCompressedMultiTexSubImage2DEXT +#define glCompressedMultiTexSubImage3DEXT epoxy_glCompressedMultiTexSubImage3DEXT +#define glCompressedTexImage1D epoxy_glCompressedTexImage1D +#define glCompressedTexImage1DARB epoxy_glCompressedTexImage1DARB +#define glCompressedTexImage2D epoxy_glCompressedTexImage2D +#define glCompressedTexImage2DARB epoxy_glCompressedTexImage2DARB +#define glCompressedTexImage3D epoxy_glCompressedTexImage3D +#define glCompressedTexImage3DARB epoxy_glCompressedTexImage3DARB +#define glCompressedTexImage3DOES epoxy_glCompressedTexImage3DOES +#define glCompressedTexSubImage1D epoxy_glCompressedTexSubImage1D +#define glCompressedTexSubImage1DARB epoxy_glCompressedTexSubImage1DARB +#define glCompressedTexSubImage2D epoxy_glCompressedTexSubImage2D +#define glCompressedTexSubImage2DARB epoxy_glCompressedTexSubImage2DARB +#define glCompressedTexSubImage3D epoxy_glCompressedTexSubImage3D +#define glCompressedTexSubImage3DARB epoxy_glCompressedTexSubImage3DARB +#define glCompressedTexSubImage3DOES epoxy_glCompressedTexSubImage3DOES +#define glCompressedTextureImage1DEXT epoxy_glCompressedTextureImage1DEXT +#define glCompressedTextureImage2DEXT epoxy_glCompressedTextureImage2DEXT +#define glCompressedTextureImage3DEXT epoxy_glCompressedTextureImage3DEXT +#define glCompressedTextureSubImage1D epoxy_glCompressedTextureSubImage1D +#define glCompressedTextureSubImage1DEXT epoxy_glCompressedTextureSubImage1DEXT +#define glCompressedTextureSubImage2D epoxy_glCompressedTextureSubImage2D +#define glCompressedTextureSubImage2DEXT epoxy_glCompressedTextureSubImage2DEXT +#define glCompressedTextureSubImage3D epoxy_glCompressedTextureSubImage3D +#define glCompressedTextureSubImage3DEXT epoxy_glCompressedTextureSubImage3DEXT +#define glConservativeRasterParameterfNV epoxy_glConservativeRasterParameterfNV +#define glConvolutionFilter1D epoxy_glConvolutionFilter1D +#define glConvolutionFilter1DEXT epoxy_glConvolutionFilter1DEXT +#define glConvolutionFilter2D epoxy_glConvolutionFilter2D +#define glConvolutionFilter2DEXT epoxy_glConvolutionFilter2DEXT +#define glConvolutionParameterf epoxy_glConvolutionParameterf +#define glConvolutionParameterfEXT epoxy_glConvolutionParameterfEXT +#define glConvolutionParameterfv epoxy_glConvolutionParameterfv +#define glConvolutionParameterfvEXT epoxy_glConvolutionParameterfvEXT +#define glConvolutionParameteri epoxy_glConvolutionParameteri +#define glConvolutionParameteriEXT epoxy_glConvolutionParameteriEXT +#define glConvolutionParameteriv epoxy_glConvolutionParameteriv +#define glConvolutionParameterivEXT epoxy_glConvolutionParameterivEXT +#define glConvolutionParameterxOES epoxy_glConvolutionParameterxOES +#define glConvolutionParameterxvOES epoxy_glConvolutionParameterxvOES +#define glCopyBufferSubData epoxy_glCopyBufferSubData +#define glCopyBufferSubDataNV epoxy_glCopyBufferSubDataNV +#define glCopyColorSubTable epoxy_glCopyColorSubTable +#define glCopyColorSubTableEXT epoxy_glCopyColorSubTableEXT +#define glCopyColorTable epoxy_glCopyColorTable +#define glCopyColorTableSGI epoxy_glCopyColorTableSGI +#define glCopyConvolutionFilter1D epoxy_glCopyConvolutionFilter1D +#define glCopyConvolutionFilter1DEXT epoxy_glCopyConvolutionFilter1DEXT +#define glCopyConvolutionFilter2D epoxy_glCopyConvolutionFilter2D +#define glCopyConvolutionFilter2DEXT epoxy_glCopyConvolutionFilter2DEXT +#define glCopyImageSubData epoxy_glCopyImageSubData +#define glCopyImageSubDataEXT epoxy_glCopyImageSubDataEXT +#define glCopyImageSubDataNV epoxy_glCopyImageSubDataNV +#define glCopyImageSubDataOES epoxy_glCopyImageSubDataOES +#define glCopyMultiTexImage1DEXT epoxy_glCopyMultiTexImage1DEXT +#define glCopyMultiTexImage2DEXT epoxy_glCopyMultiTexImage2DEXT +#define glCopyMultiTexSubImage1DEXT epoxy_glCopyMultiTexSubImage1DEXT +#define glCopyMultiTexSubImage2DEXT epoxy_glCopyMultiTexSubImage2DEXT +#define glCopyMultiTexSubImage3DEXT epoxy_glCopyMultiTexSubImage3DEXT +#define glCopyNamedBufferSubData epoxy_glCopyNamedBufferSubData +#define glCopyPathNV epoxy_glCopyPathNV +#define glCopyPixels epoxy_glCopyPixels +#define glCopyTexImage1D epoxy_glCopyTexImage1D +#define glCopyTexImage1DEXT epoxy_glCopyTexImage1DEXT +#define glCopyTexImage2D epoxy_glCopyTexImage2D +#define glCopyTexImage2DEXT epoxy_glCopyTexImage2DEXT +#define glCopyTexSubImage1D epoxy_glCopyTexSubImage1D +#define glCopyTexSubImage1DEXT epoxy_glCopyTexSubImage1DEXT +#define glCopyTexSubImage2D epoxy_glCopyTexSubImage2D +#define glCopyTexSubImage2DEXT epoxy_glCopyTexSubImage2DEXT +#define glCopyTexSubImage3D epoxy_glCopyTexSubImage3D +#define glCopyTexSubImage3DEXT epoxy_glCopyTexSubImage3DEXT +#define glCopyTexSubImage3DOES epoxy_glCopyTexSubImage3DOES +#define glCopyTextureImage1DEXT epoxy_glCopyTextureImage1DEXT +#define glCopyTextureImage2DEXT epoxy_glCopyTextureImage2DEXT +#define glCopyTextureLevelsAPPLE epoxy_glCopyTextureLevelsAPPLE +#define glCopyTextureSubImage1D epoxy_glCopyTextureSubImage1D +#define glCopyTextureSubImage1DEXT epoxy_glCopyTextureSubImage1DEXT +#define glCopyTextureSubImage2D epoxy_glCopyTextureSubImage2D +#define glCopyTextureSubImage2DEXT epoxy_glCopyTextureSubImage2DEXT +#define glCopyTextureSubImage3D epoxy_glCopyTextureSubImage3D +#define glCopyTextureSubImage3DEXT epoxy_glCopyTextureSubImage3DEXT +#define glCoverFillPathInstancedNV epoxy_glCoverFillPathInstancedNV +#define glCoverFillPathNV epoxy_glCoverFillPathNV +#define glCoverStrokePathInstancedNV epoxy_glCoverStrokePathInstancedNV +#define glCoverStrokePathNV epoxy_glCoverStrokePathNV +#define glCoverageMaskNV epoxy_glCoverageMaskNV +#define glCoverageModulationNV epoxy_glCoverageModulationNV +#define glCoverageModulationTableNV epoxy_glCoverageModulationTableNV +#define glCoverageOperationNV epoxy_glCoverageOperationNV +#define glCreateBuffers epoxy_glCreateBuffers +#define glCreateCommandListsNV epoxy_glCreateCommandListsNV +#define glCreateFramebuffers epoxy_glCreateFramebuffers +#define glCreatePerfQueryINTEL epoxy_glCreatePerfQueryINTEL +#define glCreateProgram epoxy_glCreateProgram +#define glCreateProgramObjectARB epoxy_glCreateProgramObjectARB +#define glCreateProgramPipelines epoxy_glCreateProgramPipelines +#define glCreateQueries epoxy_glCreateQueries +#define glCreateRenderbuffers epoxy_glCreateRenderbuffers +#define glCreateSamplers epoxy_glCreateSamplers +#define glCreateShader epoxy_glCreateShader +#define glCreateShaderObjectARB epoxy_glCreateShaderObjectARB +#define glCreateShaderProgramEXT epoxy_glCreateShaderProgramEXT +#define glCreateShaderProgramv epoxy_glCreateShaderProgramv +#define glCreateShaderProgramvEXT epoxy_glCreateShaderProgramvEXT +#define glCreateStatesNV epoxy_glCreateStatesNV +#define glCreateSyncFromCLeventARB epoxy_glCreateSyncFromCLeventARB +#define glCreateTextures epoxy_glCreateTextures +#define glCreateTransformFeedbacks epoxy_glCreateTransformFeedbacks +#define glCreateVertexArrays epoxy_glCreateVertexArrays +#define glCullFace epoxy_glCullFace +#define glCullParameterdvEXT epoxy_glCullParameterdvEXT +#define glCullParameterfvEXT epoxy_glCullParameterfvEXT +#define glCurrentPaletteMatrixARB epoxy_glCurrentPaletteMatrixARB +#define glCurrentPaletteMatrixOES epoxy_glCurrentPaletteMatrixOES +#define glDebugMessageCallback epoxy_glDebugMessageCallback +#define glDebugMessageCallbackAMD epoxy_glDebugMessageCallbackAMD +#define glDebugMessageCallbackARB epoxy_glDebugMessageCallbackARB +#define glDebugMessageCallbackKHR epoxy_glDebugMessageCallbackKHR +#define glDebugMessageControl epoxy_glDebugMessageControl +#define glDebugMessageControlARB epoxy_glDebugMessageControlARB +#define glDebugMessageControlKHR epoxy_glDebugMessageControlKHR +#define glDebugMessageEnableAMD epoxy_glDebugMessageEnableAMD +#define glDebugMessageInsert epoxy_glDebugMessageInsert +#define glDebugMessageInsertAMD epoxy_glDebugMessageInsertAMD +#define glDebugMessageInsertARB epoxy_glDebugMessageInsertARB +#define glDebugMessageInsertKHR epoxy_glDebugMessageInsertKHR +#define glDeformSGIX epoxy_glDeformSGIX +#define glDeformationMap3dSGIX epoxy_glDeformationMap3dSGIX +#define glDeformationMap3fSGIX epoxy_glDeformationMap3fSGIX +#define glDeleteAsyncMarkersSGIX epoxy_glDeleteAsyncMarkersSGIX +#define glDeleteBuffers epoxy_glDeleteBuffers +#define glDeleteBuffersARB epoxy_glDeleteBuffersARB +#define glDeleteCommandListsNV epoxy_glDeleteCommandListsNV +#define glDeleteFencesAPPLE epoxy_glDeleteFencesAPPLE +#define glDeleteFencesNV epoxy_glDeleteFencesNV +#define glDeleteFragmentShaderATI epoxy_glDeleteFragmentShaderATI +#define glDeleteFramebuffers epoxy_glDeleteFramebuffers +#define glDeleteFramebuffersEXT epoxy_glDeleteFramebuffersEXT +#define glDeleteFramebuffersOES epoxy_glDeleteFramebuffersOES +#define glDeleteLists epoxy_glDeleteLists +#define glDeleteNamedStringARB epoxy_glDeleteNamedStringARB +#define glDeleteNamesAMD epoxy_glDeleteNamesAMD +#define glDeleteObjectARB epoxy_glDeleteObjectARB +#define glDeleteOcclusionQueriesNV epoxy_glDeleteOcclusionQueriesNV +#define glDeletePathsNV epoxy_glDeletePathsNV +#define glDeletePerfMonitorsAMD epoxy_glDeletePerfMonitorsAMD +#define glDeletePerfQueryINTEL epoxy_glDeletePerfQueryINTEL +#define glDeleteProgram epoxy_glDeleteProgram +#define glDeleteProgramPipelines epoxy_glDeleteProgramPipelines +#define glDeleteProgramPipelinesEXT epoxy_glDeleteProgramPipelinesEXT +#define glDeleteProgramsARB epoxy_glDeleteProgramsARB +#define glDeleteProgramsNV epoxy_glDeleteProgramsNV +#define glDeleteQueries epoxy_glDeleteQueries +#define glDeleteQueriesARB epoxy_glDeleteQueriesARB +#define glDeleteQueriesEXT epoxy_glDeleteQueriesEXT +#define glDeleteRenderbuffers epoxy_glDeleteRenderbuffers +#define glDeleteRenderbuffersEXT epoxy_glDeleteRenderbuffersEXT +#define glDeleteRenderbuffersOES epoxy_glDeleteRenderbuffersOES +#define glDeleteSamplers epoxy_glDeleteSamplers +#define glDeleteShader epoxy_glDeleteShader +#define glDeleteStatesNV epoxy_glDeleteStatesNV +#define glDeleteSync epoxy_glDeleteSync +#define glDeleteSyncAPPLE epoxy_glDeleteSyncAPPLE +#define glDeleteTextures epoxy_glDeleteTextures +#define glDeleteTexturesEXT epoxy_glDeleteTexturesEXT +#define glDeleteTransformFeedbacks epoxy_glDeleteTransformFeedbacks +#define glDeleteTransformFeedbacksNV epoxy_glDeleteTransformFeedbacksNV +#define glDeleteVertexArrays epoxy_glDeleteVertexArrays +#define glDeleteVertexArraysAPPLE epoxy_glDeleteVertexArraysAPPLE +#define glDeleteVertexArraysOES epoxy_glDeleteVertexArraysOES +#define glDeleteVertexShaderEXT epoxy_glDeleteVertexShaderEXT +#define glDepthBoundsEXT epoxy_glDepthBoundsEXT +#define glDepthBoundsdNV epoxy_glDepthBoundsdNV +#define glDepthFunc epoxy_glDepthFunc +#define glDepthMask epoxy_glDepthMask +#define glDepthRange epoxy_glDepthRange +#define glDepthRangeArrayfvNV epoxy_glDepthRangeArrayfvNV +#define glDepthRangeArrayv epoxy_glDepthRangeArrayv +#define glDepthRangeIndexed epoxy_glDepthRangeIndexed +#define glDepthRangeIndexedfNV epoxy_glDepthRangeIndexedfNV +#define glDepthRangedNV epoxy_glDepthRangedNV +#define glDepthRangef epoxy_glDepthRangef +#define glDepthRangefOES epoxy_glDepthRangefOES +#define glDepthRangex epoxy_glDepthRangex +#define glDepthRangexOES epoxy_glDepthRangexOES +#define glDetachObjectARB epoxy_glDetachObjectARB +#define glDetachShader epoxy_glDetachShader +#define glDetailTexFuncSGIS epoxy_glDetailTexFuncSGIS +#define glDisable epoxy_glDisable +#define glDisableClientState epoxy_glDisableClientState +#define glDisableClientStateIndexedEXT epoxy_glDisableClientStateIndexedEXT +#define glDisableClientStateiEXT epoxy_glDisableClientStateiEXT +#define glDisableDriverControlQCOM epoxy_glDisableDriverControlQCOM +#define glDisableIndexedEXT epoxy_glDisableIndexedEXT +#define glDisableVariantClientStateEXT epoxy_glDisableVariantClientStateEXT +#define glDisableVertexArrayAttrib epoxy_glDisableVertexArrayAttrib +#define glDisableVertexArrayAttribEXT epoxy_glDisableVertexArrayAttribEXT +#define glDisableVertexArrayEXT epoxy_glDisableVertexArrayEXT +#define glDisableVertexAttribAPPLE epoxy_glDisableVertexAttribAPPLE +#define glDisableVertexAttribArray epoxy_glDisableVertexAttribArray +#define glDisableVertexAttribArrayARB epoxy_glDisableVertexAttribArrayARB +#define glDisablei epoxy_glDisablei +#define glDisableiEXT epoxy_glDisableiEXT +#define glDisableiNV epoxy_glDisableiNV +#define glDisableiOES epoxy_glDisableiOES +#define glDiscardFramebufferEXT epoxy_glDiscardFramebufferEXT +#define glDispatchCompute epoxy_glDispatchCompute +#define glDispatchComputeGroupSizeARB epoxy_glDispatchComputeGroupSizeARB +#define glDispatchComputeIndirect epoxy_glDispatchComputeIndirect +#define glDrawArrays epoxy_glDrawArrays +#define glDrawArraysEXT epoxy_glDrawArraysEXT +#define glDrawArraysIndirect epoxy_glDrawArraysIndirect +#define glDrawArraysInstanced epoxy_glDrawArraysInstanced +#define glDrawArraysInstancedANGLE epoxy_glDrawArraysInstancedANGLE +#define glDrawArraysInstancedARB epoxy_glDrawArraysInstancedARB +#define glDrawArraysInstancedBaseInstance epoxy_glDrawArraysInstancedBaseInstance +#define glDrawArraysInstancedBaseInstanceEXT epoxy_glDrawArraysInstancedBaseInstanceEXT +#define glDrawArraysInstancedEXT epoxy_glDrawArraysInstancedEXT +#define glDrawArraysInstancedNV epoxy_glDrawArraysInstancedNV +#define glDrawBuffer epoxy_glDrawBuffer +#define glDrawBuffers epoxy_glDrawBuffers +#define glDrawBuffersARB epoxy_glDrawBuffersARB +#define glDrawBuffersATI epoxy_glDrawBuffersATI +#define glDrawBuffersEXT epoxy_glDrawBuffersEXT +#define glDrawBuffersIndexedEXT epoxy_glDrawBuffersIndexedEXT +#define glDrawBuffersNV epoxy_glDrawBuffersNV +#define glDrawCommandsAddressNV epoxy_glDrawCommandsAddressNV +#define glDrawCommandsNV epoxy_glDrawCommandsNV +#define glDrawCommandsStatesAddressNV epoxy_glDrawCommandsStatesAddressNV +#define glDrawCommandsStatesNV epoxy_glDrawCommandsStatesNV +#define glDrawElementArrayAPPLE epoxy_glDrawElementArrayAPPLE +#define glDrawElementArrayATI epoxy_glDrawElementArrayATI +#define glDrawElements epoxy_glDrawElements +#define glDrawElementsBaseVertex epoxy_glDrawElementsBaseVertex +#define glDrawElementsBaseVertexEXT epoxy_glDrawElementsBaseVertexEXT +#define glDrawElementsBaseVertexOES epoxy_glDrawElementsBaseVertexOES +#define glDrawElementsIndirect epoxy_glDrawElementsIndirect +#define glDrawElementsInstanced epoxy_glDrawElementsInstanced +#define glDrawElementsInstancedANGLE epoxy_glDrawElementsInstancedANGLE +#define glDrawElementsInstancedARB epoxy_glDrawElementsInstancedARB +#define glDrawElementsInstancedBaseInstance epoxy_glDrawElementsInstancedBaseInstance +#define glDrawElementsInstancedBaseInstanceEXT epoxy_glDrawElementsInstancedBaseInstanceEXT +#define glDrawElementsInstancedBaseVertex epoxy_glDrawElementsInstancedBaseVertex +#define glDrawElementsInstancedBaseVertexBaseInstance epoxy_glDrawElementsInstancedBaseVertexBaseInstance +#define glDrawElementsInstancedBaseVertexBaseInstanceEXT epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT +#define glDrawElementsInstancedBaseVertexEXT epoxy_glDrawElementsInstancedBaseVertexEXT +#define glDrawElementsInstancedBaseVertexOES epoxy_glDrawElementsInstancedBaseVertexOES +#define glDrawElementsInstancedEXT epoxy_glDrawElementsInstancedEXT +#define glDrawElementsInstancedNV epoxy_glDrawElementsInstancedNV +#define glDrawMeshArraysSUN epoxy_glDrawMeshArraysSUN +#define glDrawPixels epoxy_glDrawPixels +#define glDrawRangeElementArrayAPPLE epoxy_glDrawRangeElementArrayAPPLE +#define glDrawRangeElementArrayATI epoxy_glDrawRangeElementArrayATI +#define glDrawRangeElements epoxy_glDrawRangeElements +#define glDrawRangeElementsBaseVertex epoxy_glDrawRangeElementsBaseVertex +#define glDrawRangeElementsBaseVertexEXT epoxy_glDrawRangeElementsBaseVertexEXT +#define glDrawRangeElementsBaseVertexOES epoxy_glDrawRangeElementsBaseVertexOES +#define glDrawRangeElementsEXT epoxy_glDrawRangeElementsEXT +#define glDrawTexfOES epoxy_glDrawTexfOES +#define glDrawTexfvOES epoxy_glDrawTexfvOES +#define glDrawTexiOES epoxy_glDrawTexiOES +#define glDrawTexivOES epoxy_glDrawTexivOES +#define glDrawTexsOES epoxy_glDrawTexsOES +#define glDrawTexsvOES epoxy_glDrawTexsvOES +#define glDrawTextureNV epoxy_glDrawTextureNV +#define glDrawTexxOES epoxy_glDrawTexxOES +#define glDrawTexxvOES epoxy_glDrawTexxvOES +#define glDrawTransformFeedback epoxy_glDrawTransformFeedback +#define glDrawTransformFeedbackInstanced epoxy_glDrawTransformFeedbackInstanced +#define glDrawTransformFeedbackNV epoxy_glDrawTransformFeedbackNV +#define glDrawTransformFeedbackStream epoxy_glDrawTransformFeedbackStream +#define glDrawTransformFeedbackStreamInstanced epoxy_glDrawTransformFeedbackStreamInstanced +#define glEGLImageTargetRenderbufferStorageOES epoxy_glEGLImageTargetRenderbufferStorageOES +#define glEGLImageTargetTexture2DOES epoxy_glEGLImageTargetTexture2DOES +#define glEdgeFlag epoxy_glEdgeFlag +#define glEdgeFlagFormatNV epoxy_glEdgeFlagFormatNV +#define glEdgeFlagPointer epoxy_glEdgeFlagPointer +#define glEdgeFlagPointerEXT epoxy_glEdgeFlagPointerEXT +#define glEdgeFlagPointerListIBM epoxy_glEdgeFlagPointerListIBM +#define glEdgeFlagv epoxy_glEdgeFlagv +#define glElementPointerAPPLE epoxy_glElementPointerAPPLE +#define glElementPointerATI epoxy_glElementPointerATI +#define glEnable epoxy_glEnable +#define glEnableClientState epoxy_glEnableClientState +#define glEnableClientStateIndexedEXT epoxy_glEnableClientStateIndexedEXT +#define glEnableClientStateiEXT epoxy_glEnableClientStateiEXT +#define glEnableDriverControlQCOM epoxy_glEnableDriverControlQCOM +#define glEnableIndexedEXT epoxy_glEnableIndexedEXT +#define glEnableVariantClientStateEXT epoxy_glEnableVariantClientStateEXT +#define glEnableVertexArrayAttrib epoxy_glEnableVertexArrayAttrib +#define glEnableVertexArrayAttribEXT epoxy_glEnableVertexArrayAttribEXT +#define glEnableVertexArrayEXT epoxy_glEnableVertexArrayEXT +#define glEnableVertexAttribAPPLE epoxy_glEnableVertexAttribAPPLE +#define glEnableVertexAttribArray epoxy_glEnableVertexAttribArray +#define glEnableVertexAttribArrayARB epoxy_glEnableVertexAttribArrayARB +#define glEnablei epoxy_glEnablei +#define glEnableiEXT epoxy_glEnableiEXT +#define glEnableiNV epoxy_glEnableiNV +#define glEnableiOES epoxy_glEnableiOES +#define glEnd epoxy_glEnd +#define glEndConditionalRender epoxy_glEndConditionalRender +#define glEndConditionalRenderNV epoxy_glEndConditionalRenderNV +#define glEndConditionalRenderNVX epoxy_glEndConditionalRenderNVX +#define glEndFragmentShaderATI epoxy_glEndFragmentShaderATI +#define glEndList epoxy_glEndList +#define glEndOcclusionQueryNV epoxy_glEndOcclusionQueryNV +#define glEndPerfMonitorAMD epoxy_glEndPerfMonitorAMD +#define glEndPerfQueryINTEL epoxy_glEndPerfQueryINTEL +#define glEndQuery epoxy_glEndQuery +#define glEndQueryARB epoxy_glEndQueryARB +#define glEndQueryEXT epoxy_glEndQueryEXT +#define glEndQueryIndexed epoxy_glEndQueryIndexed +#define glEndTilingQCOM epoxy_glEndTilingQCOM +#define glEndTransformFeedback epoxy_glEndTransformFeedback +#define glEndTransformFeedbackEXT epoxy_glEndTransformFeedbackEXT +#define glEndTransformFeedbackNV epoxy_glEndTransformFeedbackNV +#define glEndVertexShaderEXT epoxy_glEndVertexShaderEXT +#define glEndVideoCaptureNV epoxy_glEndVideoCaptureNV +#define glEvalCoord1d epoxy_glEvalCoord1d +#define glEvalCoord1dv epoxy_glEvalCoord1dv +#define glEvalCoord1f epoxy_glEvalCoord1f +#define glEvalCoord1fv epoxy_glEvalCoord1fv +#define glEvalCoord1xOES epoxy_glEvalCoord1xOES +#define glEvalCoord1xvOES epoxy_glEvalCoord1xvOES +#define glEvalCoord2d epoxy_glEvalCoord2d +#define glEvalCoord2dv epoxy_glEvalCoord2dv +#define glEvalCoord2f epoxy_glEvalCoord2f +#define glEvalCoord2fv epoxy_glEvalCoord2fv +#define glEvalCoord2xOES epoxy_glEvalCoord2xOES +#define glEvalCoord2xvOES epoxy_glEvalCoord2xvOES +#define glEvalMapsNV epoxy_glEvalMapsNV +#define glEvalMesh1 epoxy_glEvalMesh1 +#define glEvalMesh2 epoxy_glEvalMesh2 +#define glEvalPoint1 epoxy_glEvalPoint1 +#define glEvalPoint2 epoxy_glEvalPoint2 +#define glEvaluateDepthValuesARB epoxy_glEvaluateDepthValuesARB +#define glExecuteProgramNV epoxy_glExecuteProgramNV +#define glExtGetBufferPointervQCOM epoxy_glExtGetBufferPointervQCOM +#define glExtGetBuffersQCOM epoxy_glExtGetBuffersQCOM +#define glExtGetFramebuffersQCOM epoxy_glExtGetFramebuffersQCOM +#define glExtGetProgramBinarySourceQCOM epoxy_glExtGetProgramBinarySourceQCOM +#define glExtGetProgramsQCOM epoxy_glExtGetProgramsQCOM +#define glExtGetRenderbuffersQCOM epoxy_glExtGetRenderbuffersQCOM +#define glExtGetShadersQCOM epoxy_glExtGetShadersQCOM +#define glExtGetTexLevelParameterivQCOM epoxy_glExtGetTexLevelParameterivQCOM +#define glExtGetTexSubImageQCOM epoxy_glExtGetTexSubImageQCOM +#define glExtGetTexturesQCOM epoxy_glExtGetTexturesQCOM +#define glExtIsProgramBinaryQCOM epoxy_glExtIsProgramBinaryQCOM +#define glExtTexObjectStateOverrideiQCOM epoxy_glExtTexObjectStateOverrideiQCOM +#define glExtractComponentEXT epoxy_glExtractComponentEXT +#define glFeedbackBuffer epoxy_glFeedbackBuffer +#define glFeedbackBufferxOES epoxy_glFeedbackBufferxOES +#define glFenceSync epoxy_glFenceSync +#define glFenceSyncAPPLE epoxy_glFenceSyncAPPLE +#define glFinalCombinerInputNV epoxy_glFinalCombinerInputNV +#define glFinish epoxy_glFinish +#define glFinishAsyncSGIX epoxy_glFinishAsyncSGIX +#define glFinishFenceAPPLE epoxy_glFinishFenceAPPLE +#define glFinishFenceNV epoxy_glFinishFenceNV +#define glFinishObjectAPPLE epoxy_glFinishObjectAPPLE +#define glFinishTextureSUNX epoxy_glFinishTextureSUNX +#define glFlush epoxy_glFlush +#define glFlushMappedBufferRange epoxy_glFlushMappedBufferRange +#define glFlushMappedBufferRangeAPPLE epoxy_glFlushMappedBufferRangeAPPLE +#define glFlushMappedBufferRangeEXT epoxy_glFlushMappedBufferRangeEXT +#define glFlushMappedNamedBufferRange epoxy_glFlushMappedNamedBufferRange +#define glFlushMappedNamedBufferRangeEXT epoxy_glFlushMappedNamedBufferRangeEXT +#define glFlushPixelDataRangeNV epoxy_glFlushPixelDataRangeNV +#define glFlushRasterSGIX epoxy_glFlushRasterSGIX +#define glFlushStaticDataIBM epoxy_glFlushStaticDataIBM +#define glFlushVertexArrayRangeAPPLE epoxy_glFlushVertexArrayRangeAPPLE +#define glFlushVertexArrayRangeNV epoxy_glFlushVertexArrayRangeNV +#define glFogCoordFormatNV epoxy_glFogCoordFormatNV +#define glFogCoordPointer epoxy_glFogCoordPointer +#define glFogCoordPointerEXT epoxy_glFogCoordPointerEXT +#define glFogCoordPointerListIBM epoxy_glFogCoordPointerListIBM +#define glFogCoordd epoxy_glFogCoordd +#define glFogCoorddEXT epoxy_glFogCoorddEXT +#define glFogCoorddv epoxy_glFogCoorddv +#define glFogCoorddvEXT epoxy_glFogCoorddvEXT +#define glFogCoordf epoxy_glFogCoordf +#define glFogCoordfEXT epoxy_glFogCoordfEXT +#define glFogCoordfv epoxy_glFogCoordfv +#define glFogCoordfvEXT epoxy_glFogCoordfvEXT +#define glFogCoordhNV epoxy_glFogCoordhNV +#define glFogCoordhvNV epoxy_glFogCoordhvNV +#define glFogFuncSGIS epoxy_glFogFuncSGIS +#define glFogf epoxy_glFogf +#define glFogfv epoxy_glFogfv +#define glFogi epoxy_glFogi +#define glFogiv epoxy_glFogiv +#define glFogx epoxy_glFogx +#define glFogxOES epoxy_glFogxOES +#define glFogxv epoxy_glFogxv +#define glFogxvOES epoxy_glFogxvOES +#define glFragmentColorMaterialSGIX epoxy_glFragmentColorMaterialSGIX +#define glFragmentCoverageColorNV epoxy_glFragmentCoverageColorNV +#define glFragmentLightModelfSGIX epoxy_glFragmentLightModelfSGIX +#define glFragmentLightModelfvSGIX epoxy_glFragmentLightModelfvSGIX +#define glFragmentLightModeliSGIX epoxy_glFragmentLightModeliSGIX +#define glFragmentLightModelivSGIX epoxy_glFragmentLightModelivSGIX +#define glFragmentLightfSGIX epoxy_glFragmentLightfSGIX +#define glFragmentLightfvSGIX epoxy_glFragmentLightfvSGIX +#define glFragmentLightiSGIX epoxy_glFragmentLightiSGIX +#define glFragmentLightivSGIX epoxy_glFragmentLightivSGIX +#define glFragmentMaterialfSGIX epoxy_glFragmentMaterialfSGIX +#define glFragmentMaterialfvSGIX epoxy_glFragmentMaterialfvSGIX +#define glFragmentMaterialiSGIX epoxy_glFragmentMaterialiSGIX +#define glFragmentMaterialivSGIX epoxy_glFragmentMaterialivSGIX +#define glFrameTerminatorGREMEDY epoxy_glFrameTerminatorGREMEDY +#define glFrameZoomSGIX epoxy_glFrameZoomSGIX +#define glFramebufferDrawBufferEXT epoxy_glFramebufferDrawBufferEXT +#define glFramebufferDrawBuffersEXT epoxy_glFramebufferDrawBuffersEXT +#define glFramebufferParameteri epoxy_glFramebufferParameteri +#define glFramebufferReadBufferEXT epoxy_glFramebufferReadBufferEXT +#define glFramebufferRenderbuffer epoxy_glFramebufferRenderbuffer +#define glFramebufferRenderbufferEXT epoxy_glFramebufferRenderbufferEXT +#define glFramebufferRenderbufferOES epoxy_glFramebufferRenderbufferOES +#define glFramebufferSampleLocationsfvARB epoxy_glFramebufferSampleLocationsfvARB +#define glFramebufferSampleLocationsfvNV epoxy_glFramebufferSampleLocationsfvNV +#define glFramebufferTexture epoxy_glFramebufferTexture +#define glFramebufferTexture1D epoxy_glFramebufferTexture1D +#define glFramebufferTexture1DEXT epoxy_glFramebufferTexture1DEXT +#define glFramebufferTexture2D epoxy_glFramebufferTexture2D +#define glFramebufferTexture2DEXT epoxy_glFramebufferTexture2DEXT +#define glFramebufferTexture2DMultisampleEXT epoxy_glFramebufferTexture2DMultisampleEXT +#define glFramebufferTexture2DMultisampleIMG epoxy_glFramebufferTexture2DMultisampleIMG +#define glFramebufferTexture2DOES epoxy_glFramebufferTexture2DOES +#define glFramebufferTexture3D epoxy_glFramebufferTexture3D +#define glFramebufferTexture3DEXT epoxy_glFramebufferTexture3DEXT +#define glFramebufferTexture3DOES epoxy_glFramebufferTexture3DOES +#define glFramebufferTextureARB epoxy_glFramebufferTextureARB +#define glFramebufferTextureEXT epoxy_glFramebufferTextureEXT +#define glFramebufferTextureFaceARB epoxy_glFramebufferTextureFaceARB +#define glFramebufferTextureFaceEXT epoxy_glFramebufferTextureFaceEXT +#define glFramebufferTextureLayer epoxy_glFramebufferTextureLayer +#define glFramebufferTextureLayerARB epoxy_glFramebufferTextureLayerARB +#define glFramebufferTextureLayerEXT epoxy_glFramebufferTextureLayerEXT +#define glFramebufferTextureMultiviewOVR epoxy_glFramebufferTextureMultiviewOVR +#define glFramebufferTextureOES epoxy_glFramebufferTextureOES +#define glFreeObjectBufferATI epoxy_glFreeObjectBufferATI +#define glFrontFace epoxy_glFrontFace +#define glFrustum epoxy_glFrustum +#define glFrustumf epoxy_glFrustumf +#define glFrustumfOES epoxy_glFrustumfOES +#define glFrustumx epoxy_glFrustumx +#define glFrustumxOES epoxy_glFrustumxOES +#define glGenAsyncMarkersSGIX epoxy_glGenAsyncMarkersSGIX +#define glGenBuffers epoxy_glGenBuffers +#define glGenBuffersARB epoxy_glGenBuffersARB +#define glGenFencesAPPLE epoxy_glGenFencesAPPLE +#define glGenFencesNV epoxy_glGenFencesNV +#define glGenFragmentShadersATI epoxy_glGenFragmentShadersATI +#define glGenFramebuffers epoxy_glGenFramebuffers +#define glGenFramebuffersEXT epoxy_glGenFramebuffersEXT +#define glGenFramebuffersOES epoxy_glGenFramebuffersOES +#define glGenLists epoxy_glGenLists +#define glGenNamesAMD epoxy_glGenNamesAMD +#define glGenOcclusionQueriesNV epoxy_glGenOcclusionQueriesNV +#define glGenPathsNV epoxy_glGenPathsNV +#define glGenPerfMonitorsAMD epoxy_glGenPerfMonitorsAMD +#define glGenProgramPipelines epoxy_glGenProgramPipelines +#define glGenProgramPipelinesEXT epoxy_glGenProgramPipelinesEXT +#define glGenProgramsARB epoxy_glGenProgramsARB +#define glGenProgramsNV epoxy_glGenProgramsNV +#define glGenQueries epoxy_glGenQueries +#define glGenQueriesARB epoxy_glGenQueriesARB +#define glGenQueriesEXT epoxy_glGenQueriesEXT +#define glGenRenderbuffers epoxy_glGenRenderbuffers +#define glGenRenderbuffersEXT epoxy_glGenRenderbuffersEXT +#define glGenRenderbuffersOES epoxy_glGenRenderbuffersOES +#define glGenSamplers epoxy_glGenSamplers +#define glGenSymbolsEXT epoxy_glGenSymbolsEXT +#define glGenTextures epoxy_glGenTextures +#define glGenTexturesEXT epoxy_glGenTexturesEXT +#define glGenTransformFeedbacks epoxy_glGenTransformFeedbacks +#define glGenTransformFeedbacksNV epoxy_glGenTransformFeedbacksNV +#define glGenVertexArrays epoxy_glGenVertexArrays +#define glGenVertexArraysAPPLE epoxy_glGenVertexArraysAPPLE +#define glGenVertexArraysOES epoxy_glGenVertexArraysOES +#define glGenVertexShadersEXT epoxy_glGenVertexShadersEXT +#define glGenerateMipmap epoxy_glGenerateMipmap +#define glGenerateMipmapEXT epoxy_glGenerateMipmapEXT +#define glGenerateMipmapOES epoxy_glGenerateMipmapOES +#define glGenerateMultiTexMipmapEXT epoxy_glGenerateMultiTexMipmapEXT +#define glGenerateTextureMipmap epoxy_glGenerateTextureMipmap +#define glGenerateTextureMipmapEXT epoxy_glGenerateTextureMipmapEXT +#define glGetActiveAtomicCounterBufferiv epoxy_glGetActiveAtomicCounterBufferiv +#define glGetActiveAttrib epoxy_glGetActiveAttrib +#define glGetActiveAttribARB epoxy_glGetActiveAttribARB +#define glGetActiveSubroutineName epoxy_glGetActiveSubroutineName +#define glGetActiveSubroutineUniformName epoxy_glGetActiveSubroutineUniformName +#define glGetActiveSubroutineUniformiv epoxy_glGetActiveSubroutineUniformiv +#define glGetActiveUniform epoxy_glGetActiveUniform +#define glGetActiveUniformARB epoxy_glGetActiveUniformARB +#define glGetActiveUniformBlockName epoxy_glGetActiveUniformBlockName +#define glGetActiveUniformBlockiv epoxy_glGetActiveUniformBlockiv +#define glGetActiveUniformName epoxy_glGetActiveUniformName +#define glGetActiveUniformsiv epoxy_glGetActiveUniformsiv +#define glGetActiveVaryingNV epoxy_glGetActiveVaryingNV +#define glGetArrayObjectfvATI epoxy_glGetArrayObjectfvATI +#define glGetArrayObjectivATI epoxy_glGetArrayObjectivATI +#define glGetAttachedObjectsARB epoxy_glGetAttachedObjectsARB +#define glGetAttachedShaders epoxy_glGetAttachedShaders +#define glGetAttribLocation epoxy_glGetAttribLocation +#define glGetAttribLocationARB epoxy_glGetAttribLocationARB +#define glGetBooleanIndexedvEXT epoxy_glGetBooleanIndexedvEXT +#define glGetBooleani_v epoxy_glGetBooleani_v +#define glGetBooleanv epoxy_glGetBooleanv +#define glGetBufferParameteri64v epoxy_glGetBufferParameteri64v +#define glGetBufferParameteriv epoxy_glGetBufferParameteriv +#define glGetBufferParameterivARB epoxy_glGetBufferParameterivARB +#define glGetBufferParameterui64vNV epoxy_glGetBufferParameterui64vNV +#define glGetBufferPointerv epoxy_glGetBufferPointerv +#define glGetBufferPointervARB epoxy_glGetBufferPointervARB +#define glGetBufferPointervOES epoxy_glGetBufferPointervOES +#define glGetBufferSubData epoxy_glGetBufferSubData +#define glGetBufferSubDataARB epoxy_glGetBufferSubDataARB +#define glGetClipPlane epoxy_glGetClipPlane +#define glGetClipPlanef epoxy_glGetClipPlanef +#define glGetClipPlanefOES epoxy_glGetClipPlanefOES +#define glGetClipPlanex epoxy_glGetClipPlanex +#define glGetClipPlanexOES epoxy_glGetClipPlanexOES +#define glGetColorTable epoxy_glGetColorTable +#define glGetColorTableEXT epoxy_glGetColorTableEXT +#define glGetColorTableParameterfv epoxy_glGetColorTableParameterfv +#define glGetColorTableParameterfvEXT epoxy_glGetColorTableParameterfvEXT +#define glGetColorTableParameterfvSGI epoxy_glGetColorTableParameterfvSGI +#define glGetColorTableParameteriv epoxy_glGetColorTableParameteriv +#define glGetColorTableParameterivEXT epoxy_glGetColorTableParameterivEXT +#define glGetColorTableParameterivSGI epoxy_glGetColorTableParameterivSGI +#define glGetColorTableSGI epoxy_glGetColorTableSGI +#define glGetCombinerInputParameterfvNV epoxy_glGetCombinerInputParameterfvNV +#define glGetCombinerInputParameterivNV epoxy_glGetCombinerInputParameterivNV +#define glGetCombinerOutputParameterfvNV epoxy_glGetCombinerOutputParameterfvNV +#define glGetCombinerOutputParameterivNV epoxy_glGetCombinerOutputParameterivNV +#define glGetCombinerStageParameterfvNV epoxy_glGetCombinerStageParameterfvNV +#define glGetCommandHeaderNV epoxy_glGetCommandHeaderNV +#define glGetCompressedMultiTexImageEXT epoxy_glGetCompressedMultiTexImageEXT +#define glGetCompressedTexImage epoxy_glGetCompressedTexImage +#define glGetCompressedTexImageARB epoxy_glGetCompressedTexImageARB +#define glGetCompressedTextureImage epoxy_glGetCompressedTextureImage +#define glGetCompressedTextureImageEXT epoxy_glGetCompressedTextureImageEXT +#define glGetCompressedTextureSubImage epoxy_glGetCompressedTextureSubImage +#define glGetConvolutionFilter epoxy_glGetConvolutionFilter +#define glGetConvolutionFilterEXT epoxy_glGetConvolutionFilterEXT +#define glGetConvolutionParameterfv epoxy_glGetConvolutionParameterfv +#define glGetConvolutionParameterfvEXT epoxy_glGetConvolutionParameterfvEXT +#define glGetConvolutionParameteriv epoxy_glGetConvolutionParameteriv +#define glGetConvolutionParameterivEXT epoxy_glGetConvolutionParameterivEXT +#define glGetConvolutionParameterxvOES epoxy_glGetConvolutionParameterxvOES +#define glGetCoverageModulationTableNV epoxy_glGetCoverageModulationTableNV +#define glGetDebugMessageLog epoxy_glGetDebugMessageLog +#define glGetDebugMessageLogAMD epoxy_glGetDebugMessageLogAMD +#define glGetDebugMessageLogARB epoxy_glGetDebugMessageLogARB +#define glGetDebugMessageLogKHR epoxy_glGetDebugMessageLogKHR +#define glGetDetailTexFuncSGIS epoxy_glGetDetailTexFuncSGIS +#define glGetDoubleIndexedvEXT epoxy_glGetDoubleIndexedvEXT +#define glGetDoublei_v epoxy_glGetDoublei_v +#define glGetDoublei_vEXT epoxy_glGetDoublei_vEXT +#define glGetDoublev epoxy_glGetDoublev +#define glGetDriverControlStringQCOM epoxy_glGetDriverControlStringQCOM +#define glGetDriverControlsQCOM epoxy_glGetDriverControlsQCOM +#define glGetError epoxy_glGetError +#define glGetFenceivNV epoxy_glGetFenceivNV +#define glGetFinalCombinerInputParameterfvNV epoxy_glGetFinalCombinerInputParameterfvNV +#define glGetFinalCombinerInputParameterivNV epoxy_glGetFinalCombinerInputParameterivNV +#define glGetFirstPerfQueryIdINTEL epoxy_glGetFirstPerfQueryIdINTEL +#define glGetFixedv epoxy_glGetFixedv +#define glGetFixedvOES epoxy_glGetFixedvOES +#define glGetFloatIndexedvEXT epoxy_glGetFloatIndexedvEXT +#define glGetFloati_v epoxy_glGetFloati_v +#define glGetFloati_vEXT epoxy_glGetFloati_vEXT +#define glGetFloati_vNV epoxy_glGetFloati_vNV +#define glGetFloatv epoxy_glGetFloatv +#define glGetFogFuncSGIS epoxy_glGetFogFuncSGIS +#define glGetFragDataIndex epoxy_glGetFragDataIndex +#define glGetFragDataIndexEXT epoxy_glGetFragDataIndexEXT +#define glGetFragDataLocation epoxy_glGetFragDataLocation +#define glGetFragDataLocationEXT epoxy_glGetFragDataLocationEXT +#define glGetFragmentLightfvSGIX epoxy_glGetFragmentLightfvSGIX +#define glGetFragmentLightivSGIX epoxy_glGetFragmentLightivSGIX +#define glGetFragmentMaterialfvSGIX epoxy_glGetFragmentMaterialfvSGIX +#define glGetFragmentMaterialivSGIX epoxy_glGetFragmentMaterialivSGIX +#define glGetFramebufferAttachmentParameteriv epoxy_glGetFramebufferAttachmentParameteriv +#define glGetFramebufferAttachmentParameterivEXT epoxy_glGetFramebufferAttachmentParameterivEXT +#define glGetFramebufferAttachmentParameterivOES epoxy_glGetFramebufferAttachmentParameterivOES +#define glGetFramebufferParameteriv epoxy_glGetFramebufferParameteriv +#define glGetFramebufferParameterivEXT epoxy_glGetFramebufferParameterivEXT +#define glGetGraphicsResetStatus epoxy_glGetGraphicsResetStatus +#define glGetGraphicsResetStatusARB epoxy_glGetGraphicsResetStatusARB +#define glGetGraphicsResetStatusEXT epoxy_glGetGraphicsResetStatusEXT +#define glGetGraphicsResetStatusKHR epoxy_glGetGraphicsResetStatusKHR +#define glGetHandleARB epoxy_glGetHandleARB +#define glGetHistogram epoxy_glGetHistogram +#define glGetHistogramEXT epoxy_glGetHistogramEXT +#define glGetHistogramParameterfv epoxy_glGetHistogramParameterfv +#define glGetHistogramParameterfvEXT epoxy_glGetHistogramParameterfvEXT +#define glGetHistogramParameteriv epoxy_glGetHistogramParameteriv +#define glGetHistogramParameterivEXT epoxy_glGetHistogramParameterivEXT +#define glGetHistogramParameterxvOES epoxy_glGetHistogramParameterxvOES +#define glGetImageHandleARB epoxy_glGetImageHandleARB +#define glGetImageHandleNV epoxy_glGetImageHandleNV +#define glGetImageTransformParameterfvHP epoxy_glGetImageTransformParameterfvHP +#define glGetImageTransformParameterivHP epoxy_glGetImageTransformParameterivHP +#define glGetInfoLogARB epoxy_glGetInfoLogARB +#define glGetInstrumentsSGIX epoxy_glGetInstrumentsSGIX +#define glGetInteger64i_v epoxy_glGetInteger64i_v +#define glGetInteger64v epoxy_glGetInteger64v +#define glGetInteger64vAPPLE epoxy_glGetInteger64vAPPLE +#define glGetIntegerIndexedvEXT epoxy_glGetIntegerIndexedvEXT +#define glGetIntegeri_v epoxy_glGetIntegeri_v +#define glGetIntegeri_vEXT epoxy_glGetIntegeri_vEXT +#define glGetIntegerui64i_vNV epoxy_glGetIntegerui64i_vNV +#define glGetIntegerui64vNV epoxy_glGetIntegerui64vNV +#define glGetIntegerv epoxy_glGetIntegerv +#define glGetInternalformatSampleivNV epoxy_glGetInternalformatSampleivNV +#define glGetInternalformati64v epoxy_glGetInternalformati64v +#define glGetInternalformativ epoxy_glGetInternalformativ +#define glGetInvariantBooleanvEXT epoxy_glGetInvariantBooleanvEXT +#define glGetInvariantFloatvEXT epoxy_glGetInvariantFloatvEXT +#define glGetInvariantIntegervEXT epoxy_glGetInvariantIntegervEXT +#define glGetLightfv epoxy_glGetLightfv +#define glGetLightiv epoxy_glGetLightiv +#define glGetLightxOES epoxy_glGetLightxOES +#define glGetLightxv epoxy_glGetLightxv +#define glGetLightxvOES epoxy_glGetLightxvOES +#define glGetListParameterfvSGIX epoxy_glGetListParameterfvSGIX +#define glGetListParameterivSGIX epoxy_glGetListParameterivSGIX +#define glGetLocalConstantBooleanvEXT epoxy_glGetLocalConstantBooleanvEXT +#define glGetLocalConstantFloatvEXT epoxy_glGetLocalConstantFloatvEXT +#define glGetLocalConstantIntegervEXT epoxy_glGetLocalConstantIntegervEXT +#define glGetMapAttribParameterfvNV epoxy_glGetMapAttribParameterfvNV +#define glGetMapAttribParameterivNV epoxy_glGetMapAttribParameterivNV +#define glGetMapControlPointsNV epoxy_glGetMapControlPointsNV +#define glGetMapParameterfvNV epoxy_glGetMapParameterfvNV +#define glGetMapParameterivNV epoxy_glGetMapParameterivNV +#define glGetMapdv epoxy_glGetMapdv +#define glGetMapfv epoxy_glGetMapfv +#define glGetMapiv epoxy_glGetMapiv +#define glGetMapxvOES epoxy_glGetMapxvOES +#define glGetMaterialfv epoxy_glGetMaterialfv +#define glGetMaterialiv epoxy_glGetMaterialiv +#define glGetMaterialxOES epoxy_glGetMaterialxOES +#define glGetMaterialxv epoxy_glGetMaterialxv +#define glGetMaterialxvOES epoxy_glGetMaterialxvOES +#define glGetMinmax epoxy_glGetMinmax +#define glGetMinmaxEXT epoxy_glGetMinmaxEXT +#define glGetMinmaxParameterfv epoxy_glGetMinmaxParameterfv +#define glGetMinmaxParameterfvEXT epoxy_glGetMinmaxParameterfvEXT +#define glGetMinmaxParameteriv epoxy_glGetMinmaxParameteriv +#define glGetMinmaxParameterivEXT epoxy_glGetMinmaxParameterivEXT +#define glGetMultiTexEnvfvEXT epoxy_glGetMultiTexEnvfvEXT +#define glGetMultiTexEnvivEXT epoxy_glGetMultiTexEnvivEXT +#define glGetMultiTexGendvEXT epoxy_glGetMultiTexGendvEXT +#define glGetMultiTexGenfvEXT epoxy_glGetMultiTexGenfvEXT +#define glGetMultiTexGenivEXT epoxy_glGetMultiTexGenivEXT +#define glGetMultiTexImageEXT epoxy_glGetMultiTexImageEXT +#define glGetMultiTexLevelParameterfvEXT epoxy_glGetMultiTexLevelParameterfvEXT +#define glGetMultiTexLevelParameterivEXT epoxy_glGetMultiTexLevelParameterivEXT +#define glGetMultiTexParameterIivEXT epoxy_glGetMultiTexParameterIivEXT +#define glGetMultiTexParameterIuivEXT epoxy_glGetMultiTexParameterIuivEXT +#define glGetMultiTexParameterfvEXT epoxy_glGetMultiTexParameterfvEXT +#define glGetMultiTexParameterivEXT epoxy_glGetMultiTexParameterivEXT +#define glGetMultisamplefv epoxy_glGetMultisamplefv +#define glGetMultisamplefvNV epoxy_glGetMultisamplefvNV +#define glGetNamedBufferParameteri64v epoxy_glGetNamedBufferParameteri64v +#define glGetNamedBufferParameteriv epoxy_glGetNamedBufferParameteriv +#define glGetNamedBufferParameterivEXT epoxy_glGetNamedBufferParameterivEXT +#define glGetNamedBufferParameterui64vNV epoxy_glGetNamedBufferParameterui64vNV +#define glGetNamedBufferPointerv epoxy_glGetNamedBufferPointerv +#define glGetNamedBufferPointervEXT epoxy_glGetNamedBufferPointervEXT +#define glGetNamedBufferSubData epoxy_glGetNamedBufferSubData +#define glGetNamedBufferSubDataEXT epoxy_glGetNamedBufferSubDataEXT +#define glGetNamedFramebufferAttachmentParameteriv epoxy_glGetNamedFramebufferAttachmentParameteriv +#define glGetNamedFramebufferAttachmentParameterivEXT epoxy_glGetNamedFramebufferAttachmentParameterivEXT +#define glGetNamedFramebufferParameteriv epoxy_glGetNamedFramebufferParameteriv +#define glGetNamedFramebufferParameterivEXT epoxy_glGetNamedFramebufferParameterivEXT +#define glGetNamedProgramLocalParameterIivEXT epoxy_glGetNamedProgramLocalParameterIivEXT +#define glGetNamedProgramLocalParameterIuivEXT epoxy_glGetNamedProgramLocalParameterIuivEXT +#define glGetNamedProgramLocalParameterdvEXT epoxy_glGetNamedProgramLocalParameterdvEXT +#define glGetNamedProgramLocalParameterfvEXT epoxy_glGetNamedProgramLocalParameterfvEXT +#define glGetNamedProgramStringEXT epoxy_glGetNamedProgramStringEXT +#define glGetNamedProgramivEXT epoxy_glGetNamedProgramivEXT +#define glGetNamedRenderbufferParameteriv epoxy_glGetNamedRenderbufferParameteriv +#define glGetNamedRenderbufferParameterivEXT epoxy_glGetNamedRenderbufferParameterivEXT +#define glGetNamedStringARB epoxy_glGetNamedStringARB +#define glGetNamedStringivARB epoxy_glGetNamedStringivARB +#define glGetNextPerfQueryIdINTEL epoxy_glGetNextPerfQueryIdINTEL +#define glGetObjectBufferfvATI epoxy_glGetObjectBufferfvATI +#define glGetObjectBufferivATI epoxy_glGetObjectBufferivATI +#define glGetObjectLabel epoxy_glGetObjectLabel +#define glGetObjectLabelEXT epoxy_glGetObjectLabelEXT +#define glGetObjectLabelKHR epoxy_glGetObjectLabelKHR +#define glGetObjectParameterfvARB epoxy_glGetObjectParameterfvARB +#define glGetObjectParameterivAPPLE epoxy_glGetObjectParameterivAPPLE +#define glGetObjectParameterivARB epoxy_glGetObjectParameterivARB +#define glGetObjectPtrLabel epoxy_glGetObjectPtrLabel +#define glGetObjectPtrLabelKHR epoxy_glGetObjectPtrLabelKHR +#define glGetOcclusionQueryivNV epoxy_glGetOcclusionQueryivNV +#define glGetOcclusionQueryuivNV epoxy_glGetOcclusionQueryuivNV +#define glGetPathColorGenfvNV epoxy_glGetPathColorGenfvNV +#define glGetPathColorGenivNV epoxy_glGetPathColorGenivNV +#define glGetPathCommandsNV epoxy_glGetPathCommandsNV +#define glGetPathCoordsNV epoxy_glGetPathCoordsNV +#define glGetPathDashArrayNV epoxy_glGetPathDashArrayNV +#define glGetPathLengthNV epoxy_glGetPathLengthNV +#define glGetPathMetricRangeNV epoxy_glGetPathMetricRangeNV +#define glGetPathMetricsNV epoxy_glGetPathMetricsNV +#define glGetPathParameterfvNV epoxy_glGetPathParameterfvNV +#define glGetPathParameterivNV epoxy_glGetPathParameterivNV +#define glGetPathSpacingNV epoxy_glGetPathSpacingNV +#define glGetPathTexGenfvNV epoxy_glGetPathTexGenfvNV +#define glGetPathTexGenivNV epoxy_glGetPathTexGenivNV +#define glGetPerfCounterInfoINTEL epoxy_glGetPerfCounterInfoINTEL +#define glGetPerfMonitorCounterDataAMD epoxy_glGetPerfMonitorCounterDataAMD +#define glGetPerfMonitorCounterInfoAMD epoxy_glGetPerfMonitorCounterInfoAMD +#define glGetPerfMonitorCounterStringAMD epoxy_glGetPerfMonitorCounterStringAMD +#define glGetPerfMonitorCountersAMD epoxy_glGetPerfMonitorCountersAMD +#define glGetPerfMonitorGroupStringAMD epoxy_glGetPerfMonitorGroupStringAMD +#define glGetPerfMonitorGroupsAMD epoxy_glGetPerfMonitorGroupsAMD +#define glGetPerfQueryDataINTEL epoxy_glGetPerfQueryDataINTEL +#define glGetPerfQueryIdByNameINTEL epoxy_glGetPerfQueryIdByNameINTEL +#define glGetPerfQueryInfoINTEL epoxy_glGetPerfQueryInfoINTEL +#define glGetPixelMapfv epoxy_glGetPixelMapfv +#define glGetPixelMapuiv epoxy_glGetPixelMapuiv +#define glGetPixelMapusv epoxy_glGetPixelMapusv +#define glGetPixelMapxv epoxy_glGetPixelMapxv +#define glGetPixelTexGenParameterfvSGIS epoxy_glGetPixelTexGenParameterfvSGIS +#define glGetPixelTexGenParameterivSGIS epoxy_glGetPixelTexGenParameterivSGIS +#define glGetPixelTransformParameterfvEXT epoxy_glGetPixelTransformParameterfvEXT +#define glGetPixelTransformParameterivEXT epoxy_glGetPixelTransformParameterivEXT +#define glGetPointerIndexedvEXT epoxy_glGetPointerIndexedvEXT +#define glGetPointeri_vEXT epoxy_glGetPointeri_vEXT +#define glGetPointerv epoxy_glGetPointerv +#define glGetPointervEXT epoxy_glGetPointervEXT +#define glGetPointervKHR epoxy_glGetPointervKHR +#define glGetPolygonStipple epoxy_glGetPolygonStipple +#define glGetProgramBinary epoxy_glGetProgramBinary +#define glGetProgramBinaryOES epoxy_glGetProgramBinaryOES +#define glGetProgramEnvParameterIivNV epoxy_glGetProgramEnvParameterIivNV +#define glGetProgramEnvParameterIuivNV epoxy_glGetProgramEnvParameterIuivNV +#define glGetProgramEnvParameterdvARB epoxy_glGetProgramEnvParameterdvARB +#define glGetProgramEnvParameterfvARB epoxy_glGetProgramEnvParameterfvARB +#define glGetProgramInfoLog epoxy_glGetProgramInfoLog +#define glGetProgramInterfaceiv epoxy_glGetProgramInterfaceiv +#define glGetProgramLocalParameterIivNV epoxy_glGetProgramLocalParameterIivNV +#define glGetProgramLocalParameterIuivNV epoxy_glGetProgramLocalParameterIuivNV +#define glGetProgramLocalParameterdvARB epoxy_glGetProgramLocalParameterdvARB +#define glGetProgramLocalParameterfvARB epoxy_glGetProgramLocalParameterfvARB +#define glGetProgramNamedParameterdvNV epoxy_glGetProgramNamedParameterdvNV +#define glGetProgramNamedParameterfvNV epoxy_glGetProgramNamedParameterfvNV +#define glGetProgramParameterdvNV epoxy_glGetProgramParameterdvNV +#define glGetProgramParameterfvNV epoxy_glGetProgramParameterfvNV +#define glGetProgramPipelineInfoLog epoxy_glGetProgramPipelineInfoLog +#define glGetProgramPipelineInfoLogEXT epoxy_glGetProgramPipelineInfoLogEXT +#define glGetProgramPipelineiv epoxy_glGetProgramPipelineiv +#define glGetProgramPipelineivEXT epoxy_glGetProgramPipelineivEXT +#define glGetProgramResourceIndex epoxy_glGetProgramResourceIndex +#define glGetProgramResourceLocation epoxy_glGetProgramResourceLocation +#define glGetProgramResourceLocationIndex epoxy_glGetProgramResourceLocationIndex +#define glGetProgramResourceLocationIndexEXT epoxy_glGetProgramResourceLocationIndexEXT +#define glGetProgramResourceName epoxy_glGetProgramResourceName +#define glGetProgramResourcefvNV epoxy_glGetProgramResourcefvNV +#define glGetProgramResourceiv epoxy_glGetProgramResourceiv +#define glGetProgramStageiv epoxy_glGetProgramStageiv +#define glGetProgramStringARB epoxy_glGetProgramStringARB +#define glGetProgramStringNV epoxy_glGetProgramStringNV +#define glGetProgramSubroutineParameteruivNV epoxy_glGetProgramSubroutineParameteruivNV +#define glGetProgramiv epoxy_glGetProgramiv +#define glGetProgramivARB epoxy_glGetProgramivARB +#define glGetProgramivNV epoxy_glGetProgramivNV +#define glGetQueryBufferObjecti64v epoxy_glGetQueryBufferObjecti64v +#define glGetQueryBufferObjectiv epoxy_glGetQueryBufferObjectiv +#define glGetQueryBufferObjectui64v epoxy_glGetQueryBufferObjectui64v +#define glGetQueryBufferObjectuiv epoxy_glGetQueryBufferObjectuiv +#define glGetQueryIndexediv epoxy_glGetQueryIndexediv +#define glGetQueryObjecti64v epoxy_glGetQueryObjecti64v +#define glGetQueryObjecti64vEXT epoxy_glGetQueryObjecti64vEXT +#define glGetQueryObjectiv epoxy_glGetQueryObjectiv +#define glGetQueryObjectivARB epoxy_glGetQueryObjectivARB +#define glGetQueryObjectivEXT epoxy_glGetQueryObjectivEXT +#define glGetQueryObjectui64v epoxy_glGetQueryObjectui64v +#define glGetQueryObjectui64vEXT epoxy_glGetQueryObjectui64vEXT +#define glGetQueryObjectuiv epoxy_glGetQueryObjectuiv +#define glGetQueryObjectuivARB epoxy_glGetQueryObjectuivARB +#define glGetQueryObjectuivEXT epoxy_glGetQueryObjectuivEXT +#define glGetQueryiv epoxy_glGetQueryiv +#define glGetQueryivARB epoxy_glGetQueryivARB +#define glGetQueryivEXT epoxy_glGetQueryivEXT +#define glGetRenderbufferParameteriv epoxy_glGetRenderbufferParameteriv +#define glGetRenderbufferParameterivEXT epoxy_glGetRenderbufferParameterivEXT +#define glGetRenderbufferParameterivOES epoxy_glGetRenderbufferParameterivOES +#define glGetSamplerParameterIiv epoxy_glGetSamplerParameterIiv +#define glGetSamplerParameterIivEXT epoxy_glGetSamplerParameterIivEXT +#define glGetSamplerParameterIivOES epoxy_glGetSamplerParameterIivOES +#define glGetSamplerParameterIuiv epoxy_glGetSamplerParameterIuiv +#define glGetSamplerParameterIuivEXT epoxy_glGetSamplerParameterIuivEXT +#define glGetSamplerParameterIuivOES epoxy_glGetSamplerParameterIuivOES +#define glGetSamplerParameterfv epoxy_glGetSamplerParameterfv +#define glGetSamplerParameteriv epoxy_glGetSamplerParameteriv +#define glGetSeparableFilter epoxy_glGetSeparableFilter +#define glGetSeparableFilterEXT epoxy_glGetSeparableFilterEXT +#define glGetShaderInfoLog epoxy_glGetShaderInfoLog +#define glGetShaderPrecisionFormat epoxy_glGetShaderPrecisionFormat +#define glGetShaderSource epoxy_glGetShaderSource +#define glGetShaderSourceARB epoxy_glGetShaderSourceARB +#define glGetShaderiv epoxy_glGetShaderiv +#define glGetSharpenTexFuncSGIS epoxy_glGetSharpenTexFuncSGIS +#define glGetStageIndexNV epoxy_glGetStageIndexNV +#define glGetString epoxy_glGetString +#define glGetStringi epoxy_glGetStringi +#define glGetSubroutineIndex epoxy_glGetSubroutineIndex +#define glGetSubroutineUniformLocation epoxy_glGetSubroutineUniformLocation +#define glGetSynciv epoxy_glGetSynciv +#define glGetSyncivAPPLE epoxy_glGetSyncivAPPLE +#define glGetTexBumpParameterfvATI epoxy_glGetTexBumpParameterfvATI +#define glGetTexBumpParameterivATI epoxy_glGetTexBumpParameterivATI +#define glGetTexEnvfv epoxy_glGetTexEnvfv +#define glGetTexEnviv epoxy_glGetTexEnviv +#define glGetTexEnvxv epoxy_glGetTexEnvxv +#define glGetTexEnvxvOES epoxy_glGetTexEnvxvOES +#define glGetTexFilterFuncSGIS epoxy_glGetTexFilterFuncSGIS +#define glGetTexGendv epoxy_glGetTexGendv +#define glGetTexGenfv epoxy_glGetTexGenfv +#define glGetTexGenfvOES epoxy_glGetTexGenfvOES +#define glGetTexGeniv epoxy_glGetTexGeniv +#define glGetTexGenivOES epoxy_glGetTexGenivOES +#define glGetTexGenxvOES epoxy_glGetTexGenxvOES +#define glGetTexImage epoxy_glGetTexImage +#define glGetTexLevelParameterfv epoxy_glGetTexLevelParameterfv +#define glGetTexLevelParameteriv epoxy_glGetTexLevelParameteriv +#define glGetTexLevelParameterxvOES epoxy_glGetTexLevelParameterxvOES +#define glGetTexParameterIiv epoxy_glGetTexParameterIiv +#define glGetTexParameterIivEXT epoxy_glGetTexParameterIivEXT +#define glGetTexParameterIivOES epoxy_glGetTexParameterIivOES +#define glGetTexParameterIuiv epoxy_glGetTexParameterIuiv +#define glGetTexParameterIuivEXT epoxy_glGetTexParameterIuivEXT +#define glGetTexParameterIuivOES epoxy_glGetTexParameterIuivOES +#define glGetTexParameterPointervAPPLE epoxy_glGetTexParameterPointervAPPLE +#define glGetTexParameterfv epoxy_glGetTexParameterfv +#define glGetTexParameteriv epoxy_glGetTexParameteriv +#define glGetTexParameterxv epoxy_glGetTexParameterxv +#define glGetTexParameterxvOES epoxy_glGetTexParameterxvOES +#define glGetTextureHandleARB epoxy_glGetTextureHandleARB +#define glGetTextureHandleNV epoxy_glGetTextureHandleNV +#define glGetTextureImage epoxy_glGetTextureImage +#define glGetTextureImageEXT epoxy_glGetTextureImageEXT +#define glGetTextureLevelParameterfv epoxy_glGetTextureLevelParameterfv +#define glGetTextureLevelParameterfvEXT epoxy_glGetTextureLevelParameterfvEXT +#define glGetTextureLevelParameteriv epoxy_glGetTextureLevelParameteriv +#define glGetTextureLevelParameterivEXT epoxy_glGetTextureLevelParameterivEXT +#define glGetTextureParameterIiv epoxy_glGetTextureParameterIiv +#define glGetTextureParameterIivEXT epoxy_glGetTextureParameterIivEXT +#define glGetTextureParameterIuiv epoxy_glGetTextureParameterIuiv +#define glGetTextureParameterIuivEXT epoxy_glGetTextureParameterIuivEXT +#define glGetTextureParameterfv epoxy_glGetTextureParameterfv +#define glGetTextureParameterfvEXT epoxy_glGetTextureParameterfvEXT +#define glGetTextureParameteriv epoxy_glGetTextureParameteriv +#define glGetTextureParameterivEXT epoxy_glGetTextureParameterivEXT +#define glGetTextureSamplerHandleARB epoxy_glGetTextureSamplerHandleARB +#define glGetTextureSamplerHandleNV epoxy_glGetTextureSamplerHandleNV +#define glGetTextureSubImage epoxy_glGetTextureSubImage +#define glGetTrackMatrixivNV epoxy_glGetTrackMatrixivNV +#define glGetTransformFeedbackVarying epoxy_glGetTransformFeedbackVarying +#define glGetTransformFeedbackVaryingEXT epoxy_glGetTransformFeedbackVaryingEXT +#define glGetTransformFeedbackVaryingNV epoxy_glGetTransformFeedbackVaryingNV +#define glGetTransformFeedbacki64_v epoxy_glGetTransformFeedbacki64_v +#define glGetTransformFeedbacki_v epoxy_glGetTransformFeedbacki_v +#define glGetTransformFeedbackiv epoxy_glGetTransformFeedbackiv +#define glGetTranslatedShaderSourceANGLE epoxy_glGetTranslatedShaderSourceANGLE +#define glGetUniformBlockIndex epoxy_glGetUniformBlockIndex +#define glGetUniformBufferSizeEXT epoxy_glGetUniformBufferSizeEXT +#define glGetUniformIndices epoxy_glGetUniformIndices +#define glGetUniformLocation epoxy_glGetUniformLocation +#define glGetUniformLocationARB epoxy_glGetUniformLocationARB +#define glGetUniformOffsetEXT epoxy_glGetUniformOffsetEXT +#define glGetUniformSubroutineuiv epoxy_glGetUniformSubroutineuiv +#define glGetUniformdv epoxy_glGetUniformdv +#define glGetUniformfv epoxy_glGetUniformfv +#define glGetUniformfvARB epoxy_glGetUniformfvARB +#define glGetUniformi64vARB epoxy_glGetUniformi64vARB +#define glGetUniformi64vNV epoxy_glGetUniformi64vNV +#define glGetUniformiv epoxy_glGetUniformiv +#define glGetUniformivARB epoxy_glGetUniformivARB +#define glGetUniformui64vARB epoxy_glGetUniformui64vARB +#define glGetUniformui64vNV epoxy_glGetUniformui64vNV +#define glGetUniformuiv epoxy_glGetUniformuiv +#define glGetUniformuivEXT epoxy_glGetUniformuivEXT +#define glGetVariantArrayObjectfvATI epoxy_glGetVariantArrayObjectfvATI +#define glGetVariantArrayObjectivATI epoxy_glGetVariantArrayObjectivATI +#define glGetVariantBooleanvEXT epoxy_glGetVariantBooleanvEXT +#define glGetVariantFloatvEXT epoxy_glGetVariantFloatvEXT +#define glGetVariantIntegervEXT epoxy_glGetVariantIntegervEXT +#define glGetVariantPointervEXT epoxy_glGetVariantPointervEXT +#define glGetVaryingLocationNV epoxy_glGetVaryingLocationNV +#define glGetVertexArrayIndexed64iv epoxy_glGetVertexArrayIndexed64iv +#define glGetVertexArrayIndexediv epoxy_glGetVertexArrayIndexediv +#define glGetVertexArrayIntegeri_vEXT epoxy_glGetVertexArrayIntegeri_vEXT +#define glGetVertexArrayIntegervEXT epoxy_glGetVertexArrayIntegervEXT +#define glGetVertexArrayPointeri_vEXT epoxy_glGetVertexArrayPointeri_vEXT +#define glGetVertexArrayPointervEXT epoxy_glGetVertexArrayPointervEXT +#define glGetVertexArrayiv epoxy_glGetVertexArrayiv +#define glGetVertexAttribArrayObjectfvATI epoxy_glGetVertexAttribArrayObjectfvATI +#define glGetVertexAttribArrayObjectivATI epoxy_glGetVertexAttribArrayObjectivATI +#define glGetVertexAttribIiv epoxy_glGetVertexAttribIiv +#define glGetVertexAttribIivEXT epoxy_glGetVertexAttribIivEXT +#define glGetVertexAttribIuiv epoxy_glGetVertexAttribIuiv +#define glGetVertexAttribIuivEXT epoxy_glGetVertexAttribIuivEXT +#define glGetVertexAttribLdv epoxy_glGetVertexAttribLdv +#define glGetVertexAttribLdvEXT epoxy_glGetVertexAttribLdvEXT +#define glGetVertexAttribLi64vNV epoxy_glGetVertexAttribLi64vNV +#define glGetVertexAttribLui64vARB epoxy_glGetVertexAttribLui64vARB +#define glGetVertexAttribLui64vNV epoxy_glGetVertexAttribLui64vNV +#define glGetVertexAttribPointerv epoxy_glGetVertexAttribPointerv +#define glGetVertexAttribPointervARB epoxy_glGetVertexAttribPointervARB +#define glGetVertexAttribPointervNV epoxy_glGetVertexAttribPointervNV +#define glGetVertexAttribdv epoxy_glGetVertexAttribdv +#define glGetVertexAttribdvARB epoxy_glGetVertexAttribdvARB +#define glGetVertexAttribdvNV epoxy_glGetVertexAttribdvNV +#define glGetVertexAttribfv epoxy_glGetVertexAttribfv +#define glGetVertexAttribfvARB epoxy_glGetVertexAttribfvARB +#define glGetVertexAttribfvNV epoxy_glGetVertexAttribfvNV +#define glGetVertexAttribiv epoxy_glGetVertexAttribiv +#define glGetVertexAttribivARB epoxy_glGetVertexAttribivARB +#define glGetVertexAttribivNV epoxy_glGetVertexAttribivNV +#define glGetVideoCaptureStreamdvNV epoxy_glGetVideoCaptureStreamdvNV +#define glGetVideoCaptureStreamfvNV epoxy_glGetVideoCaptureStreamfvNV +#define glGetVideoCaptureStreamivNV epoxy_glGetVideoCaptureStreamivNV +#define glGetVideoCaptureivNV epoxy_glGetVideoCaptureivNV +#define glGetVideoi64vNV epoxy_glGetVideoi64vNV +#define glGetVideoivNV epoxy_glGetVideoivNV +#define glGetVideoui64vNV epoxy_glGetVideoui64vNV +#define glGetVideouivNV epoxy_glGetVideouivNV +#define glGetnColorTable epoxy_glGetnColorTable +#define glGetnColorTableARB epoxy_glGetnColorTableARB +#define glGetnCompressedTexImage epoxy_glGetnCompressedTexImage +#define glGetnCompressedTexImageARB epoxy_glGetnCompressedTexImageARB +#define glGetnConvolutionFilter epoxy_glGetnConvolutionFilter +#define glGetnConvolutionFilterARB epoxy_glGetnConvolutionFilterARB +#define glGetnHistogram epoxy_glGetnHistogram +#define glGetnHistogramARB epoxy_glGetnHistogramARB +#define glGetnMapdv epoxy_glGetnMapdv +#define glGetnMapdvARB epoxy_glGetnMapdvARB +#define glGetnMapfv epoxy_glGetnMapfv +#define glGetnMapfvARB epoxy_glGetnMapfvARB +#define glGetnMapiv epoxy_glGetnMapiv +#define glGetnMapivARB epoxy_glGetnMapivARB +#define glGetnMinmax epoxy_glGetnMinmax +#define glGetnMinmaxARB epoxy_glGetnMinmaxARB +#define glGetnPixelMapfv epoxy_glGetnPixelMapfv +#define glGetnPixelMapfvARB epoxy_glGetnPixelMapfvARB +#define glGetnPixelMapuiv epoxy_glGetnPixelMapuiv +#define glGetnPixelMapuivARB epoxy_glGetnPixelMapuivARB +#define glGetnPixelMapusv epoxy_glGetnPixelMapusv +#define glGetnPixelMapusvARB epoxy_glGetnPixelMapusvARB +#define glGetnPolygonStipple epoxy_glGetnPolygonStipple +#define glGetnPolygonStippleARB epoxy_glGetnPolygonStippleARB +#define glGetnSeparableFilter epoxy_glGetnSeparableFilter +#define glGetnSeparableFilterARB epoxy_glGetnSeparableFilterARB +#define glGetnTexImage epoxy_glGetnTexImage +#define glGetnTexImageARB epoxy_glGetnTexImageARB +#define glGetnUniformdv epoxy_glGetnUniformdv +#define glGetnUniformdvARB epoxy_glGetnUniformdvARB +#define glGetnUniformfv epoxy_glGetnUniformfv +#define glGetnUniformfvARB epoxy_glGetnUniformfvARB +#define glGetnUniformfvEXT epoxy_glGetnUniformfvEXT +#define glGetnUniformfvKHR epoxy_glGetnUniformfvKHR +#define glGetnUniformi64vARB epoxy_glGetnUniformi64vARB +#define glGetnUniformiv epoxy_glGetnUniformiv +#define glGetnUniformivARB epoxy_glGetnUniformivARB +#define glGetnUniformivEXT epoxy_glGetnUniformivEXT +#define glGetnUniformivKHR epoxy_glGetnUniformivKHR +#define glGetnUniformui64vARB epoxy_glGetnUniformui64vARB +#define glGetnUniformuiv epoxy_glGetnUniformuiv +#define glGetnUniformuivARB epoxy_glGetnUniformuivARB +#define glGetnUniformuivKHR epoxy_glGetnUniformuivKHR +#define glGlobalAlphaFactorbSUN epoxy_glGlobalAlphaFactorbSUN +#define glGlobalAlphaFactordSUN epoxy_glGlobalAlphaFactordSUN +#define glGlobalAlphaFactorfSUN epoxy_glGlobalAlphaFactorfSUN +#define glGlobalAlphaFactoriSUN epoxy_glGlobalAlphaFactoriSUN +#define glGlobalAlphaFactorsSUN epoxy_glGlobalAlphaFactorsSUN +#define glGlobalAlphaFactorubSUN epoxy_glGlobalAlphaFactorubSUN +#define glGlobalAlphaFactoruiSUN epoxy_glGlobalAlphaFactoruiSUN +#define glGlobalAlphaFactorusSUN epoxy_glGlobalAlphaFactorusSUN +#define glHint epoxy_glHint +#define glHintPGI epoxy_glHintPGI +#define glHistogram epoxy_glHistogram +#define glHistogramEXT epoxy_glHistogramEXT +#define glIglooInterfaceSGIX epoxy_glIglooInterfaceSGIX +#define glImageTransformParameterfHP epoxy_glImageTransformParameterfHP +#define glImageTransformParameterfvHP epoxy_glImageTransformParameterfvHP +#define glImageTransformParameteriHP epoxy_glImageTransformParameteriHP +#define glImageTransformParameterivHP epoxy_glImageTransformParameterivHP +#define glImportSyncEXT epoxy_glImportSyncEXT +#define glIndexFormatNV epoxy_glIndexFormatNV +#define glIndexFuncEXT epoxy_glIndexFuncEXT +#define glIndexMask epoxy_glIndexMask +#define glIndexMaterialEXT epoxy_glIndexMaterialEXT +#define glIndexPointer epoxy_glIndexPointer +#define glIndexPointerEXT epoxy_glIndexPointerEXT +#define glIndexPointerListIBM epoxy_glIndexPointerListIBM +#define glIndexd epoxy_glIndexd +#define glIndexdv epoxy_glIndexdv +#define glIndexf epoxy_glIndexf +#define glIndexfv epoxy_glIndexfv +#define glIndexi epoxy_glIndexi +#define glIndexiv epoxy_glIndexiv +#define glIndexs epoxy_glIndexs +#define glIndexsv epoxy_glIndexsv +#define glIndexub epoxy_glIndexub +#define glIndexubv epoxy_glIndexubv +#define glIndexxOES epoxy_glIndexxOES +#define glIndexxvOES epoxy_glIndexxvOES +#define glInitNames epoxy_glInitNames +#define glInsertComponentEXT epoxy_glInsertComponentEXT +#define glInsertEventMarkerEXT epoxy_glInsertEventMarkerEXT +#define glInstrumentsBufferSGIX epoxy_glInstrumentsBufferSGIX +#define glInterleavedArrays epoxy_glInterleavedArrays +#define glInterpolatePathsNV epoxy_glInterpolatePathsNV +#define glInvalidateBufferData epoxy_glInvalidateBufferData +#define glInvalidateBufferSubData epoxy_glInvalidateBufferSubData +#define glInvalidateFramebuffer epoxy_glInvalidateFramebuffer +#define glInvalidateNamedFramebufferData epoxy_glInvalidateNamedFramebufferData +#define glInvalidateNamedFramebufferSubData epoxy_glInvalidateNamedFramebufferSubData +#define glInvalidateSubFramebuffer epoxy_glInvalidateSubFramebuffer +#define glInvalidateTexImage epoxy_glInvalidateTexImage +#define glInvalidateTexSubImage epoxy_glInvalidateTexSubImage +#define glIsAsyncMarkerSGIX epoxy_glIsAsyncMarkerSGIX +#define glIsBuffer epoxy_glIsBuffer +#define glIsBufferARB epoxy_glIsBufferARB +#define glIsBufferResidentNV epoxy_glIsBufferResidentNV +#define glIsCommandListNV epoxy_glIsCommandListNV +#define glIsEnabled epoxy_glIsEnabled +#define glIsEnabledIndexedEXT epoxy_glIsEnabledIndexedEXT +#define glIsEnabledi epoxy_glIsEnabledi +#define glIsEnablediEXT epoxy_glIsEnablediEXT +#define glIsEnablediNV epoxy_glIsEnablediNV +#define glIsEnablediOES epoxy_glIsEnablediOES +#define glIsFenceAPPLE epoxy_glIsFenceAPPLE +#define glIsFenceNV epoxy_glIsFenceNV +#define glIsFramebuffer epoxy_glIsFramebuffer +#define glIsFramebufferEXT epoxy_glIsFramebufferEXT +#define glIsFramebufferOES epoxy_glIsFramebufferOES +#define glIsImageHandleResidentARB epoxy_glIsImageHandleResidentARB +#define glIsImageHandleResidentNV epoxy_glIsImageHandleResidentNV +#define glIsList epoxy_glIsList +#define glIsNameAMD epoxy_glIsNameAMD +#define glIsNamedBufferResidentNV epoxy_glIsNamedBufferResidentNV +#define glIsNamedStringARB epoxy_glIsNamedStringARB +#define glIsObjectBufferATI epoxy_glIsObjectBufferATI +#define glIsOcclusionQueryNV epoxy_glIsOcclusionQueryNV +#define glIsPathNV epoxy_glIsPathNV +#define glIsPointInFillPathNV epoxy_glIsPointInFillPathNV +#define glIsPointInStrokePathNV epoxy_glIsPointInStrokePathNV +#define glIsProgram epoxy_glIsProgram +#define glIsProgramARB epoxy_glIsProgramARB +#define glIsProgramNV epoxy_glIsProgramNV +#define glIsProgramPipeline epoxy_glIsProgramPipeline +#define glIsProgramPipelineEXT epoxy_glIsProgramPipelineEXT +#define glIsQuery epoxy_glIsQuery +#define glIsQueryARB epoxy_glIsQueryARB +#define glIsQueryEXT epoxy_glIsQueryEXT +#define glIsRenderbuffer epoxy_glIsRenderbuffer +#define glIsRenderbufferEXT epoxy_glIsRenderbufferEXT +#define glIsRenderbufferOES epoxy_glIsRenderbufferOES +#define glIsSampler epoxy_glIsSampler +#define glIsShader epoxy_glIsShader +#define glIsStateNV epoxy_glIsStateNV +#define glIsSync epoxy_glIsSync +#define glIsSyncAPPLE epoxy_glIsSyncAPPLE +#define glIsTexture epoxy_glIsTexture +#define glIsTextureEXT epoxy_glIsTextureEXT +#define glIsTextureHandleResidentARB epoxy_glIsTextureHandleResidentARB +#define glIsTextureHandleResidentNV epoxy_glIsTextureHandleResidentNV +#define glIsTransformFeedback epoxy_glIsTransformFeedback +#define glIsTransformFeedbackNV epoxy_glIsTransformFeedbackNV +#define glIsVariantEnabledEXT epoxy_glIsVariantEnabledEXT +#define glIsVertexArray epoxy_glIsVertexArray +#define glIsVertexArrayAPPLE epoxy_glIsVertexArrayAPPLE +#define glIsVertexArrayOES epoxy_glIsVertexArrayOES +#define glIsVertexAttribEnabledAPPLE epoxy_glIsVertexAttribEnabledAPPLE +#define glLabelObjectEXT epoxy_glLabelObjectEXT +#define glLightEnviSGIX epoxy_glLightEnviSGIX +#define glLightModelf epoxy_glLightModelf +#define glLightModelfv epoxy_glLightModelfv +#define glLightModeli epoxy_glLightModeli +#define glLightModeliv epoxy_glLightModeliv +#define glLightModelx epoxy_glLightModelx +#define glLightModelxOES epoxy_glLightModelxOES +#define glLightModelxv epoxy_glLightModelxv +#define glLightModelxvOES epoxy_glLightModelxvOES +#define glLightf epoxy_glLightf +#define glLightfv epoxy_glLightfv +#define glLighti epoxy_glLighti +#define glLightiv epoxy_glLightiv +#define glLightx epoxy_glLightx +#define glLightxOES epoxy_glLightxOES +#define glLightxv epoxy_glLightxv +#define glLightxvOES epoxy_glLightxvOES +#define glLineStipple epoxy_glLineStipple +#define glLineWidth epoxy_glLineWidth +#define glLineWidthx epoxy_glLineWidthx +#define glLineWidthxOES epoxy_glLineWidthxOES +#define glLinkProgram epoxy_glLinkProgram +#define glLinkProgramARB epoxy_glLinkProgramARB +#define glListBase epoxy_glListBase +#define glListDrawCommandsStatesClientNV epoxy_glListDrawCommandsStatesClientNV +#define glListParameterfSGIX epoxy_glListParameterfSGIX +#define glListParameterfvSGIX epoxy_glListParameterfvSGIX +#define glListParameteriSGIX epoxy_glListParameteriSGIX +#define glListParameterivSGIX epoxy_glListParameterivSGIX +#define glLoadIdentity epoxy_glLoadIdentity +#define glLoadIdentityDeformationMapSGIX epoxy_glLoadIdentityDeformationMapSGIX +#define glLoadMatrixd epoxy_glLoadMatrixd +#define glLoadMatrixf epoxy_glLoadMatrixf +#define glLoadMatrixx epoxy_glLoadMatrixx +#define glLoadMatrixxOES epoxy_glLoadMatrixxOES +#define glLoadName epoxy_glLoadName +#define glLoadPaletteFromModelViewMatrixOES epoxy_glLoadPaletteFromModelViewMatrixOES +#define glLoadProgramNV epoxy_glLoadProgramNV +#define glLoadTransposeMatrixd epoxy_glLoadTransposeMatrixd +#define glLoadTransposeMatrixdARB epoxy_glLoadTransposeMatrixdARB +#define glLoadTransposeMatrixf epoxy_glLoadTransposeMatrixf +#define glLoadTransposeMatrixfARB epoxy_glLoadTransposeMatrixfARB +#define glLoadTransposeMatrixxOES epoxy_glLoadTransposeMatrixxOES +#define glLockArraysEXT epoxy_glLockArraysEXT +#define glLogicOp epoxy_glLogicOp +#define glMakeBufferNonResidentNV epoxy_glMakeBufferNonResidentNV +#define glMakeBufferResidentNV epoxy_glMakeBufferResidentNV +#define glMakeImageHandleNonResidentARB epoxy_glMakeImageHandleNonResidentARB +#define glMakeImageHandleNonResidentNV epoxy_glMakeImageHandleNonResidentNV +#define glMakeImageHandleResidentARB epoxy_glMakeImageHandleResidentARB +#define glMakeImageHandleResidentNV epoxy_glMakeImageHandleResidentNV +#define glMakeNamedBufferNonResidentNV epoxy_glMakeNamedBufferNonResidentNV +#define glMakeNamedBufferResidentNV epoxy_glMakeNamedBufferResidentNV +#define glMakeTextureHandleNonResidentARB epoxy_glMakeTextureHandleNonResidentARB +#define glMakeTextureHandleNonResidentNV epoxy_glMakeTextureHandleNonResidentNV +#define glMakeTextureHandleResidentARB epoxy_glMakeTextureHandleResidentARB +#define glMakeTextureHandleResidentNV epoxy_glMakeTextureHandleResidentNV +#define glMap1d epoxy_glMap1d +#define glMap1f epoxy_glMap1f +#define glMap1xOES epoxy_glMap1xOES +#define glMap2d epoxy_glMap2d +#define glMap2f epoxy_glMap2f +#define glMap2xOES epoxy_glMap2xOES +#define glMapBuffer epoxy_glMapBuffer +#define glMapBufferARB epoxy_glMapBufferARB +#define glMapBufferOES epoxy_glMapBufferOES +#define glMapBufferRange epoxy_glMapBufferRange +#define glMapBufferRangeEXT epoxy_glMapBufferRangeEXT +#define glMapControlPointsNV epoxy_glMapControlPointsNV +#define glMapGrid1d epoxy_glMapGrid1d +#define glMapGrid1f epoxy_glMapGrid1f +#define glMapGrid1xOES epoxy_glMapGrid1xOES +#define glMapGrid2d epoxy_glMapGrid2d +#define glMapGrid2f epoxy_glMapGrid2f +#define glMapGrid2xOES epoxy_glMapGrid2xOES +#define glMapNamedBuffer epoxy_glMapNamedBuffer +#define glMapNamedBufferEXT epoxy_glMapNamedBufferEXT +#define glMapNamedBufferRange epoxy_glMapNamedBufferRange +#define glMapNamedBufferRangeEXT epoxy_glMapNamedBufferRangeEXT +#define glMapObjectBufferATI epoxy_glMapObjectBufferATI +#define glMapParameterfvNV epoxy_glMapParameterfvNV +#define glMapParameterivNV epoxy_glMapParameterivNV +#define glMapTexture2DINTEL epoxy_glMapTexture2DINTEL +#define glMapVertexAttrib1dAPPLE epoxy_glMapVertexAttrib1dAPPLE +#define glMapVertexAttrib1fAPPLE epoxy_glMapVertexAttrib1fAPPLE +#define glMapVertexAttrib2dAPPLE epoxy_glMapVertexAttrib2dAPPLE +#define glMapVertexAttrib2fAPPLE epoxy_glMapVertexAttrib2fAPPLE +#define glMaterialf epoxy_glMaterialf +#define glMaterialfv epoxy_glMaterialfv +#define glMateriali epoxy_glMateriali +#define glMaterialiv epoxy_glMaterialiv +#define glMaterialx epoxy_glMaterialx +#define glMaterialxOES epoxy_glMaterialxOES +#define glMaterialxv epoxy_glMaterialxv +#define glMaterialxvOES epoxy_glMaterialxvOES +#define glMatrixFrustumEXT epoxy_glMatrixFrustumEXT +#define glMatrixIndexPointerARB epoxy_glMatrixIndexPointerARB +#define glMatrixIndexPointerOES epoxy_glMatrixIndexPointerOES +#define glMatrixIndexubvARB epoxy_glMatrixIndexubvARB +#define glMatrixIndexuivARB epoxy_glMatrixIndexuivARB +#define glMatrixIndexusvARB epoxy_glMatrixIndexusvARB +#define glMatrixLoad3x2fNV epoxy_glMatrixLoad3x2fNV +#define glMatrixLoad3x3fNV epoxy_glMatrixLoad3x3fNV +#define glMatrixLoadIdentityEXT epoxy_glMatrixLoadIdentityEXT +#define glMatrixLoadTranspose3x3fNV epoxy_glMatrixLoadTranspose3x3fNV +#define glMatrixLoadTransposedEXT epoxy_glMatrixLoadTransposedEXT +#define glMatrixLoadTransposefEXT epoxy_glMatrixLoadTransposefEXT +#define glMatrixLoaddEXT epoxy_glMatrixLoaddEXT +#define glMatrixLoadfEXT epoxy_glMatrixLoadfEXT +#define glMatrixMode epoxy_glMatrixMode +#define glMatrixMult3x2fNV epoxy_glMatrixMult3x2fNV +#define glMatrixMult3x3fNV epoxy_glMatrixMult3x3fNV +#define glMatrixMultTranspose3x3fNV epoxy_glMatrixMultTranspose3x3fNV +#define glMatrixMultTransposedEXT epoxy_glMatrixMultTransposedEXT +#define glMatrixMultTransposefEXT epoxy_glMatrixMultTransposefEXT +#define glMatrixMultdEXT epoxy_glMatrixMultdEXT +#define glMatrixMultfEXT epoxy_glMatrixMultfEXT +#define glMatrixOrthoEXT epoxy_glMatrixOrthoEXT +#define glMatrixPopEXT epoxy_glMatrixPopEXT +#define glMatrixPushEXT epoxy_glMatrixPushEXT +#define glMatrixRotatedEXT epoxy_glMatrixRotatedEXT +#define glMatrixRotatefEXT epoxy_glMatrixRotatefEXT +#define glMatrixScaledEXT epoxy_glMatrixScaledEXT +#define glMatrixScalefEXT epoxy_glMatrixScalefEXT +#define glMatrixTranslatedEXT epoxy_glMatrixTranslatedEXT +#define glMatrixTranslatefEXT epoxy_glMatrixTranslatefEXT +#define glMaxShaderCompilerThreadsARB epoxy_glMaxShaderCompilerThreadsARB +#define glMemoryBarrier epoxy_glMemoryBarrier +#define glMemoryBarrierByRegion epoxy_glMemoryBarrierByRegion +#define glMemoryBarrierEXT epoxy_glMemoryBarrierEXT +#define glMinSampleShading epoxy_glMinSampleShading +#define glMinSampleShadingARB epoxy_glMinSampleShadingARB +#define glMinSampleShadingOES epoxy_glMinSampleShadingOES +#define glMinmax epoxy_glMinmax +#define glMinmaxEXT epoxy_glMinmaxEXT +#define glMultMatrixd epoxy_glMultMatrixd +#define glMultMatrixf epoxy_glMultMatrixf +#define glMultMatrixx epoxy_glMultMatrixx +#define glMultMatrixxOES epoxy_glMultMatrixxOES +#define glMultTransposeMatrixd epoxy_glMultTransposeMatrixd +#define glMultTransposeMatrixdARB epoxy_glMultTransposeMatrixdARB +#define glMultTransposeMatrixf epoxy_glMultTransposeMatrixf +#define glMultTransposeMatrixfARB epoxy_glMultTransposeMatrixfARB +#define glMultTransposeMatrixxOES epoxy_glMultTransposeMatrixxOES +#define glMultiDrawArrays epoxy_glMultiDrawArrays +#define glMultiDrawArraysEXT epoxy_glMultiDrawArraysEXT +#define glMultiDrawArraysIndirect epoxy_glMultiDrawArraysIndirect +#define glMultiDrawArraysIndirectAMD epoxy_glMultiDrawArraysIndirectAMD +#define glMultiDrawArraysIndirectBindlessCountNV epoxy_glMultiDrawArraysIndirectBindlessCountNV +#define glMultiDrawArraysIndirectBindlessNV epoxy_glMultiDrawArraysIndirectBindlessNV +#define glMultiDrawArraysIndirectCountARB epoxy_glMultiDrawArraysIndirectCountARB +#define glMultiDrawArraysIndirectEXT epoxy_glMultiDrawArraysIndirectEXT +#define glMultiDrawElementArrayAPPLE epoxy_glMultiDrawElementArrayAPPLE +#define glMultiDrawElements epoxy_glMultiDrawElements +#define glMultiDrawElementsBaseVertex epoxy_glMultiDrawElementsBaseVertex +#define glMultiDrawElementsBaseVertexEXT epoxy_glMultiDrawElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexOES epoxy_glMultiDrawElementsBaseVertexOES +#define glMultiDrawElementsEXT epoxy_glMultiDrawElementsEXT +#define glMultiDrawElementsIndirect epoxy_glMultiDrawElementsIndirect +#define glMultiDrawElementsIndirectAMD epoxy_glMultiDrawElementsIndirectAMD +#define glMultiDrawElementsIndirectBindlessCountNV epoxy_glMultiDrawElementsIndirectBindlessCountNV +#define glMultiDrawElementsIndirectBindlessNV epoxy_glMultiDrawElementsIndirectBindlessNV +#define glMultiDrawElementsIndirectCountARB epoxy_glMultiDrawElementsIndirectCountARB +#define glMultiDrawElementsIndirectEXT epoxy_glMultiDrawElementsIndirectEXT +#define glMultiDrawRangeElementArrayAPPLE epoxy_glMultiDrawRangeElementArrayAPPLE +#define glMultiModeDrawArraysIBM epoxy_glMultiModeDrawArraysIBM +#define glMultiModeDrawElementsIBM epoxy_glMultiModeDrawElementsIBM +#define glMultiTexBufferEXT epoxy_glMultiTexBufferEXT +#define glMultiTexCoord1bOES epoxy_glMultiTexCoord1bOES +#define glMultiTexCoord1bvOES epoxy_glMultiTexCoord1bvOES +#define glMultiTexCoord1d epoxy_glMultiTexCoord1d +#define glMultiTexCoord1dARB epoxy_glMultiTexCoord1dARB +#define glMultiTexCoord1dv epoxy_glMultiTexCoord1dv +#define glMultiTexCoord1dvARB epoxy_glMultiTexCoord1dvARB +#define glMultiTexCoord1f epoxy_glMultiTexCoord1f +#define glMultiTexCoord1fARB epoxy_glMultiTexCoord1fARB +#define glMultiTexCoord1fv epoxy_glMultiTexCoord1fv +#define glMultiTexCoord1fvARB epoxy_glMultiTexCoord1fvARB +#define glMultiTexCoord1hNV epoxy_glMultiTexCoord1hNV +#define glMultiTexCoord1hvNV epoxy_glMultiTexCoord1hvNV +#define glMultiTexCoord1i epoxy_glMultiTexCoord1i +#define glMultiTexCoord1iARB epoxy_glMultiTexCoord1iARB +#define glMultiTexCoord1iv epoxy_glMultiTexCoord1iv +#define glMultiTexCoord1ivARB epoxy_glMultiTexCoord1ivARB +#define glMultiTexCoord1s epoxy_glMultiTexCoord1s +#define glMultiTexCoord1sARB epoxy_glMultiTexCoord1sARB +#define glMultiTexCoord1sv epoxy_glMultiTexCoord1sv +#define glMultiTexCoord1svARB epoxy_glMultiTexCoord1svARB +#define glMultiTexCoord1xOES epoxy_glMultiTexCoord1xOES +#define glMultiTexCoord1xvOES epoxy_glMultiTexCoord1xvOES +#define glMultiTexCoord2bOES epoxy_glMultiTexCoord2bOES +#define glMultiTexCoord2bvOES epoxy_glMultiTexCoord2bvOES +#define glMultiTexCoord2d epoxy_glMultiTexCoord2d +#define glMultiTexCoord2dARB epoxy_glMultiTexCoord2dARB +#define glMultiTexCoord2dv epoxy_glMultiTexCoord2dv +#define glMultiTexCoord2dvARB epoxy_glMultiTexCoord2dvARB +#define glMultiTexCoord2f epoxy_glMultiTexCoord2f +#define glMultiTexCoord2fARB epoxy_glMultiTexCoord2fARB +#define glMultiTexCoord2fv epoxy_glMultiTexCoord2fv +#define glMultiTexCoord2fvARB epoxy_glMultiTexCoord2fvARB +#define glMultiTexCoord2hNV epoxy_glMultiTexCoord2hNV +#define glMultiTexCoord2hvNV epoxy_glMultiTexCoord2hvNV +#define glMultiTexCoord2i epoxy_glMultiTexCoord2i +#define glMultiTexCoord2iARB epoxy_glMultiTexCoord2iARB +#define glMultiTexCoord2iv epoxy_glMultiTexCoord2iv +#define glMultiTexCoord2ivARB epoxy_glMultiTexCoord2ivARB +#define glMultiTexCoord2s epoxy_glMultiTexCoord2s +#define glMultiTexCoord2sARB epoxy_glMultiTexCoord2sARB +#define glMultiTexCoord2sv epoxy_glMultiTexCoord2sv +#define glMultiTexCoord2svARB epoxy_glMultiTexCoord2svARB +#define glMultiTexCoord2xOES epoxy_glMultiTexCoord2xOES +#define glMultiTexCoord2xvOES epoxy_glMultiTexCoord2xvOES +#define glMultiTexCoord3bOES epoxy_glMultiTexCoord3bOES +#define glMultiTexCoord3bvOES epoxy_glMultiTexCoord3bvOES +#define glMultiTexCoord3d epoxy_glMultiTexCoord3d +#define glMultiTexCoord3dARB epoxy_glMultiTexCoord3dARB +#define glMultiTexCoord3dv epoxy_glMultiTexCoord3dv +#define glMultiTexCoord3dvARB epoxy_glMultiTexCoord3dvARB +#define glMultiTexCoord3f epoxy_glMultiTexCoord3f +#define glMultiTexCoord3fARB epoxy_glMultiTexCoord3fARB +#define glMultiTexCoord3fv epoxy_glMultiTexCoord3fv +#define glMultiTexCoord3fvARB epoxy_glMultiTexCoord3fvARB +#define glMultiTexCoord3hNV epoxy_glMultiTexCoord3hNV +#define glMultiTexCoord3hvNV epoxy_glMultiTexCoord3hvNV +#define glMultiTexCoord3i epoxy_glMultiTexCoord3i +#define glMultiTexCoord3iARB epoxy_glMultiTexCoord3iARB +#define glMultiTexCoord3iv epoxy_glMultiTexCoord3iv +#define glMultiTexCoord3ivARB epoxy_glMultiTexCoord3ivARB +#define glMultiTexCoord3s epoxy_glMultiTexCoord3s +#define glMultiTexCoord3sARB epoxy_glMultiTexCoord3sARB +#define glMultiTexCoord3sv epoxy_glMultiTexCoord3sv +#define glMultiTexCoord3svARB epoxy_glMultiTexCoord3svARB +#define glMultiTexCoord3xOES epoxy_glMultiTexCoord3xOES +#define glMultiTexCoord3xvOES epoxy_glMultiTexCoord3xvOES +#define glMultiTexCoord4bOES epoxy_glMultiTexCoord4bOES +#define glMultiTexCoord4bvOES epoxy_glMultiTexCoord4bvOES +#define glMultiTexCoord4d epoxy_glMultiTexCoord4d +#define glMultiTexCoord4dARB epoxy_glMultiTexCoord4dARB +#define glMultiTexCoord4dv epoxy_glMultiTexCoord4dv +#define glMultiTexCoord4dvARB epoxy_glMultiTexCoord4dvARB +#define glMultiTexCoord4f epoxy_glMultiTexCoord4f +#define glMultiTexCoord4fARB epoxy_glMultiTexCoord4fARB +#define glMultiTexCoord4fv epoxy_glMultiTexCoord4fv +#define glMultiTexCoord4fvARB epoxy_glMultiTexCoord4fvARB +#define glMultiTexCoord4hNV epoxy_glMultiTexCoord4hNV +#define glMultiTexCoord4hvNV epoxy_glMultiTexCoord4hvNV +#define glMultiTexCoord4i epoxy_glMultiTexCoord4i +#define glMultiTexCoord4iARB epoxy_glMultiTexCoord4iARB +#define glMultiTexCoord4iv epoxy_glMultiTexCoord4iv +#define glMultiTexCoord4ivARB epoxy_glMultiTexCoord4ivARB +#define glMultiTexCoord4s epoxy_glMultiTexCoord4s +#define glMultiTexCoord4sARB epoxy_glMultiTexCoord4sARB +#define glMultiTexCoord4sv epoxy_glMultiTexCoord4sv +#define glMultiTexCoord4svARB epoxy_glMultiTexCoord4svARB +#define glMultiTexCoord4x epoxy_glMultiTexCoord4x +#define glMultiTexCoord4xOES epoxy_glMultiTexCoord4xOES +#define glMultiTexCoord4xvOES epoxy_glMultiTexCoord4xvOES +#define glMultiTexCoordP1ui epoxy_glMultiTexCoordP1ui +#define glMultiTexCoordP1uiv epoxy_glMultiTexCoordP1uiv +#define glMultiTexCoordP2ui epoxy_glMultiTexCoordP2ui +#define glMultiTexCoordP2uiv epoxy_glMultiTexCoordP2uiv +#define glMultiTexCoordP3ui epoxy_glMultiTexCoordP3ui +#define glMultiTexCoordP3uiv epoxy_glMultiTexCoordP3uiv +#define glMultiTexCoordP4ui epoxy_glMultiTexCoordP4ui +#define glMultiTexCoordP4uiv epoxy_glMultiTexCoordP4uiv +#define glMultiTexCoordPointerEXT epoxy_glMultiTexCoordPointerEXT +#define glMultiTexEnvfEXT epoxy_glMultiTexEnvfEXT +#define glMultiTexEnvfvEXT epoxy_glMultiTexEnvfvEXT +#define glMultiTexEnviEXT epoxy_glMultiTexEnviEXT +#define glMultiTexEnvivEXT epoxy_glMultiTexEnvivEXT +#define glMultiTexGendEXT epoxy_glMultiTexGendEXT +#define glMultiTexGendvEXT epoxy_glMultiTexGendvEXT +#define glMultiTexGenfEXT epoxy_glMultiTexGenfEXT +#define glMultiTexGenfvEXT epoxy_glMultiTexGenfvEXT +#define glMultiTexGeniEXT epoxy_glMultiTexGeniEXT +#define glMultiTexGenivEXT epoxy_glMultiTexGenivEXT +#define glMultiTexImage1DEXT epoxy_glMultiTexImage1DEXT +#define glMultiTexImage2DEXT epoxy_glMultiTexImage2DEXT +#define glMultiTexImage3DEXT epoxy_glMultiTexImage3DEXT +#define glMultiTexParameterIivEXT epoxy_glMultiTexParameterIivEXT +#define glMultiTexParameterIuivEXT epoxy_glMultiTexParameterIuivEXT +#define glMultiTexParameterfEXT epoxy_glMultiTexParameterfEXT +#define glMultiTexParameterfvEXT epoxy_glMultiTexParameterfvEXT +#define glMultiTexParameteriEXT epoxy_glMultiTexParameteriEXT +#define glMultiTexParameterivEXT epoxy_glMultiTexParameterivEXT +#define glMultiTexRenderbufferEXT epoxy_glMultiTexRenderbufferEXT +#define glMultiTexSubImage1DEXT epoxy_glMultiTexSubImage1DEXT +#define glMultiTexSubImage2DEXT epoxy_glMultiTexSubImage2DEXT +#define glMultiTexSubImage3DEXT epoxy_glMultiTexSubImage3DEXT +#define glNamedBufferData epoxy_glNamedBufferData +#define glNamedBufferDataEXT epoxy_glNamedBufferDataEXT +#define glNamedBufferPageCommitmentARB epoxy_glNamedBufferPageCommitmentARB +#define glNamedBufferPageCommitmentEXT epoxy_glNamedBufferPageCommitmentEXT +#define glNamedBufferStorage epoxy_glNamedBufferStorage +#define glNamedBufferStorageEXT epoxy_glNamedBufferStorageEXT +#define glNamedBufferSubData epoxy_glNamedBufferSubData +#define glNamedBufferSubDataEXT epoxy_glNamedBufferSubDataEXT +#define glNamedCopyBufferSubDataEXT epoxy_glNamedCopyBufferSubDataEXT +#define glNamedFramebufferDrawBuffer epoxy_glNamedFramebufferDrawBuffer +#define glNamedFramebufferDrawBuffers epoxy_glNamedFramebufferDrawBuffers +#define glNamedFramebufferParameteri epoxy_glNamedFramebufferParameteri +#define glNamedFramebufferParameteriEXT epoxy_glNamedFramebufferParameteriEXT +#define glNamedFramebufferReadBuffer epoxy_glNamedFramebufferReadBuffer +#define glNamedFramebufferRenderbuffer epoxy_glNamedFramebufferRenderbuffer +#define glNamedFramebufferRenderbufferEXT epoxy_glNamedFramebufferRenderbufferEXT +#define glNamedFramebufferSampleLocationsfvARB epoxy_glNamedFramebufferSampleLocationsfvARB +#define glNamedFramebufferSampleLocationsfvNV epoxy_glNamedFramebufferSampleLocationsfvNV +#define glNamedFramebufferTexture epoxy_glNamedFramebufferTexture +#define glNamedFramebufferTexture1DEXT epoxy_glNamedFramebufferTexture1DEXT +#define glNamedFramebufferTexture2DEXT epoxy_glNamedFramebufferTexture2DEXT +#define glNamedFramebufferTexture3DEXT epoxy_glNamedFramebufferTexture3DEXT +#define glNamedFramebufferTextureEXT epoxy_glNamedFramebufferTextureEXT +#define glNamedFramebufferTextureFaceEXT epoxy_glNamedFramebufferTextureFaceEXT +#define glNamedFramebufferTextureLayer epoxy_glNamedFramebufferTextureLayer +#define glNamedFramebufferTextureLayerEXT epoxy_glNamedFramebufferTextureLayerEXT +#define glNamedProgramLocalParameter4dEXT epoxy_glNamedProgramLocalParameter4dEXT +#define glNamedProgramLocalParameter4dvEXT epoxy_glNamedProgramLocalParameter4dvEXT +#define glNamedProgramLocalParameter4fEXT epoxy_glNamedProgramLocalParameter4fEXT +#define glNamedProgramLocalParameter4fvEXT epoxy_glNamedProgramLocalParameter4fvEXT +#define glNamedProgramLocalParameterI4iEXT epoxy_glNamedProgramLocalParameterI4iEXT +#define glNamedProgramLocalParameterI4ivEXT epoxy_glNamedProgramLocalParameterI4ivEXT +#define glNamedProgramLocalParameterI4uiEXT epoxy_glNamedProgramLocalParameterI4uiEXT +#define glNamedProgramLocalParameterI4uivEXT epoxy_glNamedProgramLocalParameterI4uivEXT +#define glNamedProgramLocalParameters4fvEXT epoxy_glNamedProgramLocalParameters4fvEXT +#define glNamedProgramLocalParametersI4ivEXT epoxy_glNamedProgramLocalParametersI4ivEXT +#define glNamedProgramLocalParametersI4uivEXT epoxy_glNamedProgramLocalParametersI4uivEXT +#define glNamedProgramStringEXT epoxy_glNamedProgramStringEXT +#define glNamedRenderbufferStorage epoxy_glNamedRenderbufferStorage +#define glNamedRenderbufferStorageEXT epoxy_glNamedRenderbufferStorageEXT +#define glNamedRenderbufferStorageMultisample epoxy_glNamedRenderbufferStorageMultisample +#define glNamedRenderbufferStorageMultisampleCoverageEXT epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT +#define glNamedRenderbufferStorageMultisampleEXT epoxy_glNamedRenderbufferStorageMultisampleEXT +#define glNamedStringARB epoxy_glNamedStringARB +#define glNewList epoxy_glNewList +#define glNewObjectBufferATI epoxy_glNewObjectBufferATI +#define glNormal3b epoxy_glNormal3b +#define glNormal3bv epoxy_glNormal3bv +#define glNormal3d epoxy_glNormal3d +#define glNormal3dv epoxy_glNormal3dv +#define glNormal3f epoxy_glNormal3f +#define glNormal3fVertex3fSUN epoxy_glNormal3fVertex3fSUN +#define glNormal3fVertex3fvSUN epoxy_glNormal3fVertex3fvSUN +#define glNormal3fv epoxy_glNormal3fv +#define glNormal3hNV epoxy_glNormal3hNV +#define glNormal3hvNV epoxy_glNormal3hvNV +#define glNormal3i epoxy_glNormal3i +#define glNormal3iv epoxy_glNormal3iv +#define glNormal3s epoxy_glNormal3s +#define glNormal3sv epoxy_glNormal3sv +#define glNormal3x epoxy_glNormal3x +#define glNormal3xOES epoxy_glNormal3xOES +#define glNormal3xvOES epoxy_glNormal3xvOES +#define glNormalFormatNV epoxy_glNormalFormatNV +#define glNormalP3ui epoxy_glNormalP3ui +#define glNormalP3uiv epoxy_glNormalP3uiv +#define glNormalPointer epoxy_glNormalPointer +#define glNormalPointerEXT epoxy_glNormalPointerEXT +#define glNormalPointerListIBM epoxy_glNormalPointerListIBM +#define glNormalPointervINTEL epoxy_glNormalPointervINTEL +#define glNormalStream3bATI epoxy_glNormalStream3bATI +#define glNormalStream3bvATI epoxy_glNormalStream3bvATI +#define glNormalStream3dATI epoxy_glNormalStream3dATI +#define glNormalStream3dvATI epoxy_glNormalStream3dvATI +#define glNormalStream3fATI epoxy_glNormalStream3fATI +#define glNormalStream3fvATI epoxy_glNormalStream3fvATI +#define glNormalStream3iATI epoxy_glNormalStream3iATI +#define glNormalStream3ivATI epoxy_glNormalStream3ivATI +#define glNormalStream3sATI epoxy_glNormalStream3sATI +#define glNormalStream3svATI epoxy_glNormalStream3svATI +#define glObjectLabel epoxy_glObjectLabel +#define glObjectLabelKHR epoxy_glObjectLabelKHR +#define glObjectPtrLabel epoxy_glObjectPtrLabel +#define glObjectPtrLabelKHR epoxy_glObjectPtrLabelKHR +#define glObjectPurgeableAPPLE epoxy_glObjectPurgeableAPPLE +#define glObjectUnpurgeableAPPLE epoxy_glObjectUnpurgeableAPPLE +#define glOrtho epoxy_glOrtho +#define glOrthof epoxy_glOrthof +#define glOrthofOES epoxy_glOrthofOES +#define glOrthox epoxy_glOrthox +#define glOrthoxOES epoxy_glOrthoxOES +#define glPNTrianglesfATI epoxy_glPNTrianglesfATI +#define glPNTrianglesiATI epoxy_glPNTrianglesiATI +#define glPassTexCoordATI epoxy_glPassTexCoordATI +#define glPassThrough epoxy_glPassThrough +#define glPassThroughxOES epoxy_glPassThroughxOES +#define glPatchParameterfv epoxy_glPatchParameterfv +#define glPatchParameteri epoxy_glPatchParameteri +#define glPatchParameteriEXT epoxy_glPatchParameteriEXT +#define glPatchParameteriOES epoxy_glPatchParameteriOES +#define glPathColorGenNV epoxy_glPathColorGenNV +#define glPathCommandsNV epoxy_glPathCommandsNV +#define glPathCoordsNV epoxy_glPathCoordsNV +#define glPathCoverDepthFuncNV epoxy_glPathCoverDepthFuncNV +#define glPathDashArrayNV epoxy_glPathDashArrayNV +#define glPathFogGenNV epoxy_glPathFogGenNV +#define glPathGlyphIndexArrayNV epoxy_glPathGlyphIndexArrayNV +#define glPathGlyphIndexRangeNV epoxy_glPathGlyphIndexRangeNV +#define glPathGlyphRangeNV epoxy_glPathGlyphRangeNV +#define glPathGlyphsNV epoxy_glPathGlyphsNV +#define glPathMemoryGlyphIndexArrayNV epoxy_glPathMemoryGlyphIndexArrayNV +#define glPathParameterfNV epoxy_glPathParameterfNV +#define glPathParameterfvNV epoxy_glPathParameterfvNV +#define glPathParameteriNV epoxy_glPathParameteriNV +#define glPathParameterivNV epoxy_glPathParameterivNV +#define glPathStencilDepthOffsetNV epoxy_glPathStencilDepthOffsetNV +#define glPathStencilFuncNV epoxy_glPathStencilFuncNV +#define glPathStringNV epoxy_glPathStringNV +#define glPathSubCommandsNV epoxy_glPathSubCommandsNV +#define glPathSubCoordsNV epoxy_glPathSubCoordsNV +#define glPathTexGenNV epoxy_glPathTexGenNV +#define glPauseTransformFeedback epoxy_glPauseTransformFeedback +#define glPauseTransformFeedbackNV epoxy_glPauseTransformFeedbackNV +#define glPixelDataRangeNV epoxy_glPixelDataRangeNV +#define glPixelMapfv epoxy_glPixelMapfv +#define glPixelMapuiv epoxy_glPixelMapuiv +#define glPixelMapusv epoxy_glPixelMapusv +#define glPixelMapx epoxy_glPixelMapx +#define glPixelStoref epoxy_glPixelStoref +#define glPixelStorei epoxy_glPixelStorei +#define glPixelStorex epoxy_glPixelStorex +#define glPixelTexGenParameterfSGIS epoxy_glPixelTexGenParameterfSGIS +#define glPixelTexGenParameterfvSGIS epoxy_glPixelTexGenParameterfvSGIS +#define glPixelTexGenParameteriSGIS epoxy_glPixelTexGenParameteriSGIS +#define glPixelTexGenParameterivSGIS epoxy_glPixelTexGenParameterivSGIS +#define glPixelTexGenSGIX epoxy_glPixelTexGenSGIX +#define glPixelTransferf epoxy_glPixelTransferf +#define glPixelTransferi epoxy_glPixelTransferi +#define glPixelTransferxOES epoxy_glPixelTransferxOES +#define glPixelTransformParameterfEXT epoxy_glPixelTransformParameterfEXT +#define glPixelTransformParameterfvEXT epoxy_glPixelTransformParameterfvEXT +#define glPixelTransformParameteriEXT epoxy_glPixelTransformParameteriEXT +#define glPixelTransformParameterivEXT epoxy_glPixelTransformParameterivEXT +#define glPixelZoom epoxy_glPixelZoom +#define glPixelZoomxOES epoxy_glPixelZoomxOES +#define glPointAlongPathNV epoxy_glPointAlongPathNV +#define glPointParameterf epoxy_glPointParameterf +#define glPointParameterfARB epoxy_glPointParameterfARB +#define glPointParameterfEXT epoxy_glPointParameterfEXT +#define glPointParameterfSGIS epoxy_glPointParameterfSGIS +#define glPointParameterfv epoxy_glPointParameterfv +#define glPointParameterfvARB epoxy_glPointParameterfvARB +#define glPointParameterfvEXT epoxy_glPointParameterfvEXT +#define glPointParameterfvSGIS epoxy_glPointParameterfvSGIS +#define glPointParameteri epoxy_glPointParameteri +#define glPointParameteriNV epoxy_glPointParameteriNV +#define glPointParameteriv epoxy_glPointParameteriv +#define glPointParameterivNV epoxy_glPointParameterivNV +#define glPointParameterx epoxy_glPointParameterx +#define glPointParameterxOES epoxy_glPointParameterxOES +#define glPointParameterxv epoxy_glPointParameterxv +#define glPointParameterxvOES epoxy_glPointParameterxvOES +#define glPointSize epoxy_glPointSize +#define glPointSizePointerOES epoxy_glPointSizePointerOES +#define glPointSizex epoxy_glPointSizex +#define glPointSizexOES epoxy_glPointSizexOES +#define glPollAsyncSGIX epoxy_glPollAsyncSGIX +#define glPollInstrumentsSGIX epoxy_glPollInstrumentsSGIX +#define glPolygonMode epoxy_glPolygonMode +#define glPolygonModeNV epoxy_glPolygonModeNV +#define glPolygonOffset epoxy_glPolygonOffset +#define glPolygonOffsetClampEXT epoxy_glPolygonOffsetClampEXT +#define glPolygonOffsetEXT epoxy_glPolygonOffsetEXT +#define glPolygonOffsetx epoxy_glPolygonOffsetx +#define glPolygonOffsetxOES epoxy_glPolygonOffsetxOES +#define glPolygonStipple epoxy_glPolygonStipple +#define glPopAttrib epoxy_glPopAttrib +#define glPopClientAttrib epoxy_glPopClientAttrib +#define glPopDebugGroup epoxy_glPopDebugGroup +#define glPopDebugGroupKHR epoxy_glPopDebugGroupKHR +#define glPopGroupMarkerEXT epoxy_glPopGroupMarkerEXT +#define glPopMatrix epoxy_glPopMatrix +#define glPopName epoxy_glPopName +#define glPresentFrameDualFillNV epoxy_glPresentFrameDualFillNV +#define glPresentFrameKeyedNV epoxy_glPresentFrameKeyedNV +#define glPrimitiveBoundingBox epoxy_glPrimitiveBoundingBox +#define glPrimitiveBoundingBoxARB epoxy_glPrimitiveBoundingBoxARB +#define glPrimitiveBoundingBoxEXT epoxy_glPrimitiveBoundingBoxEXT +#define glPrimitiveBoundingBoxOES epoxy_glPrimitiveBoundingBoxOES +#define glPrimitiveRestartIndex epoxy_glPrimitiveRestartIndex +#define glPrimitiveRestartIndexNV epoxy_glPrimitiveRestartIndexNV +#define glPrimitiveRestartNV epoxy_glPrimitiveRestartNV +#define glPrioritizeTextures epoxy_glPrioritizeTextures +#define glPrioritizeTexturesEXT epoxy_glPrioritizeTexturesEXT +#define glPrioritizeTexturesxOES epoxy_glPrioritizeTexturesxOES +#define glProgramBinary epoxy_glProgramBinary +#define glProgramBinaryOES epoxy_glProgramBinaryOES +#define glProgramBufferParametersIivNV epoxy_glProgramBufferParametersIivNV +#define glProgramBufferParametersIuivNV epoxy_glProgramBufferParametersIuivNV +#define glProgramBufferParametersfvNV epoxy_glProgramBufferParametersfvNV +#define glProgramEnvParameter4dARB epoxy_glProgramEnvParameter4dARB +#define glProgramEnvParameter4dvARB epoxy_glProgramEnvParameter4dvARB +#define glProgramEnvParameter4fARB epoxy_glProgramEnvParameter4fARB +#define glProgramEnvParameter4fvARB epoxy_glProgramEnvParameter4fvARB +#define glProgramEnvParameterI4iNV epoxy_glProgramEnvParameterI4iNV +#define glProgramEnvParameterI4ivNV epoxy_glProgramEnvParameterI4ivNV +#define glProgramEnvParameterI4uiNV epoxy_glProgramEnvParameterI4uiNV +#define glProgramEnvParameterI4uivNV epoxy_glProgramEnvParameterI4uivNV +#define glProgramEnvParameters4fvEXT epoxy_glProgramEnvParameters4fvEXT +#define glProgramEnvParametersI4ivNV epoxy_glProgramEnvParametersI4ivNV +#define glProgramEnvParametersI4uivNV epoxy_glProgramEnvParametersI4uivNV +#define glProgramLocalParameter4dARB epoxy_glProgramLocalParameter4dARB +#define glProgramLocalParameter4dvARB epoxy_glProgramLocalParameter4dvARB +#define glProgramLocalParameter4fARB epoxy_glProgramLocalParameter4fARB +#define glProgramLocalParameter4fvARB epoxy_glProgramLocalParameter4fvARB +#define glProgramLocalParameterI4iNV epoxy_glProgramLocalParameterI4iNV +#define glProgramLocalParameterI4ivNV epoxy_glProgramLocalParameterI4ivNV +#define glProgramLocalParameterI4uiNV epoxy_glProgramLocalParameterI4uiNV +#define glProgramLocalParameterI4uivNV epoxy_glProgramLocalParameterI4uivNV +#define glProgramLocalParameters4fvEXT epoxy_glProgramLocalParameters4fvEXT +#define glProgramLocalParametersI4ivNV epoxy_glProgramLocalParametersI4ivNV +#define glProgramLocalParametersI4uivNV epoxy_glProgramLocalParametersI4uivNV +#define glProgramNamedParameter4dNV epoxy_glProgramNamedParameter4dNV +#define glProgramNamedParameter4dvNV epoxy_glProgramNamedParameter4dvNV +#define glProgramNamedParameter4fNV epoxy_glProgramNamedParameter4fNV +#define glProgramNamedParameter4fvNV epoxy_glProgramNamedParameter4fvNV +#define glProgramParameter4dNV epoxy_glProgramParameter4dNV +#define glProgramParameter4dvNV epoxy_glProgramParameter4dvNV +#define glProgramParameter4fNV epoxy_glProgramParameter4fNV +#define glProgramParameter4fvNV epoxy_glProgramParameter4fvNV +#define glProgramParameteri epoxy_glProgramParameteri +#define glProgramParameteriARB epoxy_glProgramParameteriARB +#define glProgramParameteriEXT epoxy_glProgramParameteriEXT +#define glProgramParameters4dvNV epoxy_glProgramParameters4dvNV +#define glProgramParameters4fvNV epoxy_glProgramParameters4fvNV +#define glProgramPathFragmentInputGenNV epoxy_glProgramPathFragmentInputGenNV +#define glProgramStringARB epoxy_glProgramStringARB +#define glProgramSubroutineParametersuivNV epoxy_glProgramSubroutineParametersuivNV +#define glProgramUniform1d epoxy_glProgramUniform1d +#define glProgramUniform1dEXT epoxy_glProgramUniform1dEXT +#define glProgramUniform1dv epoxy_glProgramUniform1dv +#define glProgramUniform1dvEXT epoxy_glProgramUniform1dvEXT +#define glProgramUniform1f epoxy_glProgramUniform1f +#define glProgramUniform1fEXT epoxy_glProgramUniform1fEXT +#define glProgramUniform1fv epoxy_glProgramUniform1fv +#define glProgramUniform1fvEXT epoxy_glProgramUniform1fvEXT +#define glProgramUniform1i epoxy_glProgramUniform1i +#define glProgramUniform1i64ARB epoxy_glProgramUniform1i64ARB +#define glProgramUniform1i64NV epoxy_glProgramUniform1i64NV +#define glProgramUniform1i64vARB epoxy_glProgramUniform1i64vARB +#define glProgramUniform1i64vNV epoxy_glProgramUniform1i64vNV +#define glProgramUniform1iEXT epoxy_glProgramUniform1iEXT +#define glProgramUniform1iv epoxy_glProgramUniform1iv +#define glProgramUniform1ivEXT epoxy_glProgramUniform1ivEXT +#define glProgramUniform1ui epoxy_glProgramUniform1ui +#define glProgramUniform1ui64ARB epoxy_glProgramUniform1ui64ARB +#define glProgramUniform1ui64NV epoxy_glProgramUniform1ui64NV +#define glProgramUniform1ui64vARB epoxy_glProgramUniform1ui64vARB +#define glProgramUniform1ui64vNV epoxy_glProgramUniform1ui64vNV +#define glProgramUniform1uiEXT epoxy_glProgramUniform1uiEXT +#define glProgramUniform1uiv epoxy_glProgramUniform1uiv +#define glProgramUniform1uivEXT epoxy_glProgramUniform1uivEXT +#define glProgramUniform2d epoxy_glProgramUniform2d +#define glProgramUniform2dEXT epoxy_glProgramUniform2dEXT +#define glProgramUniform2dv epoxy_glProgramUniform2dv +#define glProgramUniform2dvEXT epoxy_glProgramUniform2dvEXT +#define glProgramUniform2f epoxy_glProgramUniform2f +#define glProgramUniform2fEXT epoxy_glProgramUniform2fEXT +#define glProgramUniform2fv epoxy_glProgramUniform2fv +#define glProgramUniform2fvEXT epoxy_glProgramUniform2fvEXT +#define glProgramUniform2i epoxy_glProgramUniform2i +#define glProgramUniform2i64ARB epoxy_glProgramUniform2i64ARB +#define glProgramUniform2i64NV epoxy_glProgramUniform2i64NV +#define glProgramUniform2i64vARB epoxy_glProgramUniform2i64vARB +#define glProgramUniform2i64vNV epoxy_glProgramUniform2i64vNV +#define glProgramUniform2iEXT epoxy_glProgramUniform2iEXT +#define glProgramUniform2iv epoxy_glProgramUniform2iv +#define glProgramUniform2ivEXT epoxy_glProgramUniform2ivEXT +#define glProgramUniform2ui epoxy_glProgramUniform2ui +#define glProgramUniform2ui64ARB epoxy_glProgramUniform2ui64ARB +#define glProgramUniform2ui64NV epoxy_glProgramUniform2ui64NV +#define glProgramUniform2ui64vARB epoxy_glProgramUniform2ui64vARB +#define glProgramUniform2ui64vNV epoxy_glProgramUniform2ui64vNV +#define glProgramUniform2uiEXT epoxy_glProgramUniform2uiEXT +#define glProgramUniform2uiv epoxy_glProgramUniform2uiv +#define glProgramUniform2uivEXT epoxy_glProgramUniform2uivEXT +#define glProgramUniform3d epoxy_glProgramUniform3d +#define glProgramUniform3dEXT epoxy_glProgramUniform3dEXT +#define glProgramUniform3dv epoxy_glProgramUniform3dv +#define glProgramUniform3dvEXT epoxy_glProgramUniform3dvEXT +#define glProgramUniform3f epoxy_glProgramUniform3f +#define glProgramUniform3fEXT epoxy_glProgramUniform3fEXT +#define glProgramUniform3fv epoxy_glProgramUniform3fv +#define glProgramUniform3fvEXT epoxy_glProgramUniform3fvEXT +#define glProgramUniform3i epoxy_glProgramUniform3i +#define glProgramUniform3i64ARB epoxy_glProgramUniform3i64ARB +#define glProgramUniform3i64NV epoxy_glProgramUniform3i64NV +#define glProgramUniform3i64vARB epoxy_glProgramUniform3i64vARB +#define glProgramUniform3i64vNV epoxy_glProgramUniform3i64vNV +#define glProgramUniform3iEXT epoxy_glProgramUniform3iEXT +#define glProgramUniform3iv epoxy_glProgramUniform3iv +#define glProgramUniform3ivEXT epoxy_glProgramUniform3ivEXT +#define glProgramUniform3ui epoxy_glProgramUniform3ui +#define glProgramUniform3ui64ARB epoxy_glProgramUniform3ui64ARB +#define glProgramUniform3ui64NV epoxy_glProgramUniform3ui64NV +#define glProgramUniform3ui64vARB epoxy_glProgramUniform3ui64vARB +#define glProgramUniform3ui64vNV epoxy_glProgramUniform3ui64vNV +#define glProgramUniform3uiEXT epoxy_glProgramUniform3uiEXT +#define glProgramUniform3uiv epoxy_glProgramUniform3uiv +#define glProgramUniform3uivEXT epoxy_glProgramUniform3uivEXT +#define glProgramUniform4d epoxy_glProgramUniform4d +#define glProgramUniform4dEXT epoxy_glProgramUniform4dEXT +#define glProgramUniform4dv epoxy_glProgramUniform4dv +#define glProgramUniform4dvEXT epoxy_glProgramUniform4dvEXT +#define glProgramUniform4f epoxy_glProgramUniform4f +#define glProgramUniform4fEXT epoxy_glProgramUniform4fEXT +#define glProgramUniform4fv epoxy_glProgramUniform4fv +#define glProgramUniform4fvEXT epoxy_glProgramUniform4fvEXT +#define glProgramUniform4i epoxy_glProgramUniform4i +#define glProgramUniform4i64ARB epoxy_glProgramUniform4i64ARB +#define glProgramUniform4i64NV epoxy_glProgramUniform4i64NV +#define glProgramUniform4i64vARB epoxy_glProgramUniform4i64vARB +#define glProgramUniform4i64vNV epoxy_glProgramUniform4i64vNV +#define glProgramUniform4iEXT epoxy_glProgramUniform4iEXT +#define glProgramUniform4iv epoxy_glProgramUniform4iv +#define glProgramUniform4ivEXT epoxy_glProgramUniform4ivEXT +#define glProgramUniform4ui epoxy_glProgramUniform4ui +#define glProgramUniform4ui64ARB epoxy_glProgramUniform4ui64ARB +#define glProgramUniform4ui64NV epoxy_glProgramUniform4ui64NV +#define glProgramUniform4ui64vARB epoxy_glProgramUniform4ui64vARB +#define glProgramUniform4ui64vNV epoxy_glProgramUniform4ui64vNV +#define glProgramUniform4uiEXT epoxy_glProgramUniform4uiEXT +#define glProgramUniform4uiv epoxy_glProgramUniform4uiv +#define glProgramUniform4uivEXT epoxy_glProgramUniform4uivEXT +#define glProgramUniformHandleui64ARB epoxy_glProgramUniformHandleui64ARB +#define glProgramUniformHandleui64NV epoxy_glProgramUniformHandleui64NV +#define glProgramUniformHandleui64vARB epoxy_glProgramUniformHandleui64vARB +#define glProgramUniformHandleui64vNV epoxy_glProgramUniformHandleui64vNV +#define glProgramUniformMatrix2dv epoxy_glProgramUniformMatrix2dv +#define glProgramUniformMatrix2dvEXT epoxy_glProgramUniformMatrix2dvEXT +#define glProgramUniformMatrix2fv epoxy_glProgramUniformMatrix2fv +#define glProgramUniformMatrix2fvEXT epoxy_glProgramUniformMatrix2fvEXT +#define glProgramUniformMatrix2x3dv epoxy_glProgramUniformMatrix2x3dv +#define glProgramUniformMatrix2x3dvEXT epoxy_glProgramUniformMatrix2x3dvEXT +#define glProgramUniformMatrix2x3fv epoxy_glProgramUniformMatrix2x3fv +#define glProgramUniformMatrix2x3fvEXT epoxy_glProgramUniformMatrix2x3fvEXT +#define glProgramUniformMatrix2x4dv epoxy_glProgramUniformMatrix2x4dv +#define glProgramUniformMatrix2x4dvEXT epoxy_glProgramUniformMatrix2x4dvEXT +#define glProgramUniformMatrix2x4fv epoxy_glProgramUniformMatrix2x4fv +#define glProgramUniformMatrix2x4fvEXT epoxy_glProgramUniformMatrix2x4fvEXT +#define glProgramUniformMatrix3dv epoxy_glProgramUniformMatrix3dv +#define glProgramUniformMatrix3dvEXT epoxy_glProgramUniformMatrix3dvEXT +#define glProgramUniformMatrix3fv epoxy_glProgramUniformMatrix3fv +#define glProgramUniformMatrix3fvEXT epoxy_glProgramUniformMatrix3fvEXT +#define glProgramUniformMatrix3x2dv epoxy_glProgramUniformMatrix3x2dv +#define glProgramUniformMatrix3x2dvEXT epoxy_glProgramUniformMatrix3x2dvEXT +#define glProgramUniformMatrix3x2fv epoxy_glProgramUniformMatrix3x2fv +#define glProgramUniformMatrix3x2fvEXT epoxy_glProgramUniformMatrix3x2fvEXT +#define glProgramUniformMatrix3x4dv epoxy_glProgramUniformMatrix3x4dv +#define glProgramUniformMatrix3x4dvEXT epoxy_glProgramUniformMatrix3x4dvEXT +#define glProgramUniformMatrix3x4fv epoxy_glProgramUniformMatrix3x4fv +#define glProgramUniformMatrix3x4fvEXT epoxy_glProgramUniformMatrix3x4fvEXT +#define glProgramUniformMatrix4dv epoxy_glProgramUniformMatrix4dv +#define glProgramUniformMatrix4dvEXT epoxy_glProgramUniformMatrix4dvEXT +#define glProgramUniformMatrix4fv epoxy_glProgramUniformMatrix4fv +#define glProgramUniformMatrix4fvEXT epoxy_glProgramUniformMatrix4fvEXT +#define glProgramUniformMatrix4x2dv epoxy_glProgramUniformMatrix4x2dv +#define glProgramUniformMatrix4x2dvEXT epoxy_glProgramUniformMatrix4x2dvEXT +#define glProgramUniformMatrix4x2fv epoxy_glProgramUniformMatrix4x2fv +#define glProgramUniformMatrix4x2fvEXT epoxy_glProgramUniformMatrix4x2fvEXT +#define glProgramUniformMatrix4x3dv epoxy_glProgramUniformMatrix4x3dv +#define glProgramUniformMatrix4x3dvEXT epoxy_glProgramUniformMatrix4x3dvEXT +#define glProgramUniformMatrix4x3fv epoxy_glProgramUniformMatrix4x3fv +#define glProgramUniformMatrix4x3fvEXT epoxy_glProgramUniformMatrix4x3fvEXT +#define glProgramUniformui64NV epoxy_glProgramUniformui64NV +#define glProgramUniformui64vNV epoxy_glProgramUniformui64vNV +#define glProgramVertexLimitNV epoxy_glProgramVertexLimitNV +#define glProvokingVertex epoxy_glProvokingVertex +#define glProvokingVertexEXT epoxy_glProvokingVertexEXT +#define glPushAttrib epoxy_glPushAttrib +#define glPushClientAttrib epoxy_glPushClientAttrib +#define glPushClientAttribDefaultEXT epoxy_glPushClientAttribDefaultEXT +#define glPushDebugGroup epoxy_glPushDebugGroup +#define glPushDebugGroupKHR epoxy_glPushDebugGroupKHR +#define glPushGroupMarkerEXT epoxy_glPushGroupMarkerEXT +#define glPushMatrix epoxy_glPushMatrix +#define glPushName epoxy_glPushName +#define glQueryCounter epoxy_glQueryCounter +#define glQueryCounterEXT epoxy_glQueryCounterEXT +#define glQueryMatrixxOES epoxy_glQueryMatrixxOES +#define glQueryObjectParameteruiAMD epoxy_glQueryObjectParameteruiAMD +#define glRasterPos2d epoxy_glRasterPos2d +#define glRasterPos2dv epoxy_glRasterPos2dv +#define glRasterPos2f epoxy_glRasterPos2f +#define glRasterPos2fv epoxy_glRasterPos2fv +#define glRasterPos2i epoxy_glRasterPos2i +#define glRasterPos2iv epoxy_glRasterPos2iv +#define glRasterPos2s epoxy_glRasterPos2s +#define glRasterPos2sv epoxy_glRasterPos2sv +#define glRasterPos2xOES epoxy_glRasterPos2xOES +#define glRasterPos2xvOES epoxy_glRasterPos2xvOES +#define glRasterPos3d epoxy_glRasterPos3d +#define glRasterPos3dv epoxy_glRasterPos3dv +#define glRasterPos3f epoxy_glRasterPos3f +#define glRasterPos3fv epoxy_glRasterPos3fv +#define glRasterPos3i epoxy_glRasterPos3i +#define glRasterPos3iv epoxy_glRasterPos3iv +#define glRasterPos3s epoxy_glRasterPos3s +#define glRasterPos3sv epoxy_glRasterPos3sv +#define glRasterPos3xOES epoxy_glRasterPos3xOES +#define glRasterPos3xvOES epoxy_glRasterPos3xvOES +#define glRasterPos4d epoxy_glRasterPos4d +#define glRasterPos4dv epoxy_glRasterPos4dv +#define glRasterPos4f epoxy_glRasterPos4f +#define glRasterPos4fv epoxy_glRasterPos4fv +#define glRasterPos4i epoxy_glRasterPos4i +#define glRasterPos4iv epoxy_glRasterPos4iv +#define glRasterPos4s epoxy_glRasterPos4s +#define glRasterPos4sv epoxy_glRasterPos4sv +#define glRasterPos4xOES epoxy_glRasterPos4xOES +#define glRasterPos4xvOES epoxy_glRasterPos4xvOES +#define glRasterSamplesEXT epoxy_glRasterSamplesEXT +#define glReadBuffer epoxy_glReadBuffer +#define glReadBufferIndexedEXT epoxy_glReadBufferIndexedEXT +#define glReadBufferNV epoxy_glReadBufferNV +#define glReadInstrumentsSGIX epoxy_glReadInstrumentsSGIX +#define glReadPixels epoxy_glReadPixels +#define glReadnPixels epoxy_glReadnPixels +#define glReadnPixelsARB epoxy_glReadnPixelsARB +#define glReadnPixelsEXT epoxy_glReadnPixelsEXT +#define glReadnPixelsKHR epoxy_glReadnPixelsKHR +#define glRectd epoxy_glRectd +#define glRectdv epoxy_glRectdv +#define glRectf epoxy_glRectf +#define glRectfv epoxy_glRectfv +#define glRecti epoxy_glRecti +#define glRectiv epoxy_glRectiv +#define glRects epoxy_glRects +#define glRectsv epoxy_glRectsv +#define glRectxOES epoxy_glRectxOES +#define glRectxvOES epoxy_glRectxvOES +#define glReferencePlaneSGIX epoxy_glReferencePlaneSGIX +#define glReleaseShaderCompiler epoxy_glReleaseShaderCompiler +#define glRenderMode epoxy_glRenderMode +#define glRenderbufferStorage epoxy_glRenderbufferStorage +#define glRenderbufferStorageEXT epoxy_glRenderbufferStorageEXT +#define glRenderbufferStorageMultisample epoxy_glRenderbufferStorageMultisample +#define glRenderbufferStorageMultisampleANGLE epoxy_glRenderbufferStorageMultisampleANGLE +#define glRenderbufferStorageMultisampleAPPLE epoxy_glRenderbufferStorageMultisampleAPPLE +#define glRenderbufferStorageMultisampleCoverageNV epoxy_glRenderbufferStorageMultisampleCoverageNV +#define glRenderbufferStorageMultisampleEXT epoxy_glRenderbufferStorageMultisampleEXT +#define glRenderbufferStorageMultisampleIMG epoxy_glRenderbufferStorageMultisampleIMG +#define glRenderbufferStorageMultisampleNV epoxy_glRenderbufferStorageMultisampleNV +#define glRenderbufferStorageOES epoxy_glRenderbufferStorageOES +#define glReplacementCodePointerSUN epoxy_glReplacementCodePointerSUN +#define glReplacementCodeubSUN epoxy_glReplacementCodeubSUN +#define glReplacementCodeubvSUN epoxy_glReplacementCodeubvSUN +#define glReplacementCodeuiColor3fVertex3fSUN epoxy_glReplacementCodeuiColor3fVertex3fSUN +#define glReplacementCodeuiColor3fVertex3fvSUN epoxy_glReplacementCodeuiColor3fVertex3fvSUN +#define glReplacementCodeuiColor4fNormal3fVertex3fSUN epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN +#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN +#define glReplacementCodeuiColor4ubVertex3fSUN epoxy_glReplacementCodeuiColor4ubVertex3fSUN +#define glReplacementCodeuiColor4ubVertex3fvSUN epoxy_glReplacementCodeuiColor4ubVertex3fvSUN +#define glReplacementCodeuiNormal3fVertex3fSUN epoxy_glReplacementCodeuiNormal3fVertex3fSUN +#define glReplacementCodeuiNormal3fVertex3fvSUN epoxy_glReplacementCodeuiNormal3fVertex3fvSUN +#define glReplacementCodeuiSUN epoxy_glReplacementCodeuiSUN +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN +#define glReplacementCodeuiTexCoord2fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN +#define glReplacementCodeuiTexCoord2fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN +#define glReplacementCodeuiVertex3fSUN epoxy_glReplacementCodeuiVertex3fSUN +#define glReplacementCodeuiVertex3fvSUN epoxy_glReplacementCodeuiVertex3fvSUN +#define glReplacementCodeuivSUN epoxy_glReplacementCodeuivSUN +#define glReplacementCodeusSUN epoxy_glReplacementCodeusSUN +#define glReplacementCodeusvSUN epoxy_glReplacementCodeusvSUN +#define glRequestResidentProgramsNV epoxy_glRequestResidentProgramsNV +#define glResetHistogram epoxy_glResetHistogram +#define glResetHistogramEXT epoxy_glResetHistogramEXT +#define glResetMinmax epoxy_glResetMinmax +#define glResetMinmaxEXT epoxy_glResetMinmaxEXT +#define glResizeBuffersMESA epoxy_glResizeBuffersMESA +#define glResolveDepthValuesNV epoxy_glResolveDepthValuesNV +#define glResolveMultisampleFramebufferAPPLE epoxy_glResolveMultisampleFramebufferAPPLE +#define glResumeTransformFeedback epoxy_glResumeTransformFeedback +#define glResumeTransformFeedbackNV epoxy_glResumeTransformFeedbackNV +#define glRotated epoxy_glRotated +#define glRotatef epoxy_glRotatef +#define glRotatex epoxy_glRotatex +#define glRotatexOES epoxy_glRotatexOES +#define glSampleCoverage epoxy_glSampleCoverage +#define glSampleCoverageARB epoxy_glSampleCoverageARB +#define glSampleCoveragex epoxy_glSampleCoveragex +#define glSampleCoveragexOES epoxy_glSampleCoveragexOES +#define glSampleMapATI epoxy_glSampleMapATI +#define glSampleMaskEXT epoxy_glSampleMaskEXT +#define glSampleMaskIndexedNV epoxy_glSampleMaskIndexedNV +#define glSampleMaskSGIS epoxy_glSampleMaskSGIS +#define glSampleMaski epoxy_glSampleMaski +#define glSamplePatternEXT epoxy_glSamplePatternEXT +#define glSamplePatternSGIS epoxy_glSamplePatternSGIS +#define glSamplerParameterIiv epoxy_glSamplerParameterIiv +#define glSamplerParameterIivEXT epoxy_glSamplerParameterIivEXT +#define glSamplerParameterIivOES epoxy_glSamplerParameterIivOES +#define glSamplerParameterIuiv epoxy_glSamplerParameterIuiv +#define glSamplerParameterIuivEXT epoxy_glSamplerParameterIuivEXT +#define glSamplerParameterIuivOES epoxy_glSamplerParameterIuivOES +#define glSamplerParameterf epoxy_glSamplerParameterf +#define glSamplerParameterfv epoxy_glSamplerParameterfv +#define glSamplerParameteri epoxy_glSamplerParameteri +#define glSamplerParameteriv epoxy_glSamplerParameteriv +#define glScaled epoxy_glScaled +#define glScalef epoxy_glScalef +#define glScalex epoxy_glScalex +#define glScalexOES epoxy_glScalexOES +#define glScissor epoxy_glScissor +#define glScissorArrayv epoxy_glScissorArrayv +#define glScissorArrayvNV epoxy_glScissorArrayvNV +#define glScissorIndexed epoxy_glScissorIndexed +#define glScissorIndexedNV epoxy_glScissorIndexedNV +#define glScissorIndexedv epoxy_glScissorIndexedv +#define glScissorIndexedvNV epoxy_glScissorIndexedvNV +#define glSecondaryColor3b epoxy_glSecondaryColor3b +#define glSecondaryColor3bEXT epoxy_glSecondaryColor3bEXT +#define glSecondaryColor3bv epoxy_glSecondaryColor3bv +#define glSecondaryColor3bvEXT epoxy_glSecondaryColor3bvEXT +#define glSecondaryColor3d epoxy_glSecondaryColor3d +#define glSecondaryColor3dEXT epoxy_glSecondaryColor3dEXT +#define glSecondaryColor3dv epoxy_glSecondaryColor3dv +#define glSecondaryColor3dvEXT epoxy_glSecondaryColor3dvEXT +#define glSecondaryColor3f epoxy_glSecondaryColor3f +#define glSecondaryColor3fEXT epoxy_glSecondaryColor3fEXT +#define glSecondaryColor3fv epoxy_glSecondaryColor3fv +#define glSecondaryColor3fvEXT epoxy_glSecondaryColor3fvEXT +#define glSecondaryColor3hNV epoxy_glSecondaryColor3hNV +#define glSecondaryColor3hvNV epoxy_glSecondaryColor3hvNV +#define glSecondaryColor3i epoxy_glSecondaryColor3i +#define glSecondaryColor3iEXT epoxy_glSecondaryColor3iEXT +#define glSecondaryColor3iv epoxy_glSecondaryColor3iv +#define glSecondaryColor3ivEXT epoxy_glSecondaryColor3ivEXT +#define glSecondaryColor3s epoxy_glSecondaryColor3s +#define glSecondaryColor3sEXT epoxy_glSecondaryColor3sEXT +#define glSecondaryColor3sv epoxy_glSecondaryColor3sv +#define glSecondaryColor3svEXT epoxy_glSecondaryColor3svEXT +#define glSecondaryColor3ub epoxy_glSecondaryColor3ub +#define glSecondaryColor3ubEXT epoxy_glSecondaryColor3ubEXT +#define glSecondaryColor3ubv epoxy_glSecondaryColor3ubv +#define glSecondaryColor3ubvEXT epoxy_glSecondaryColor3ubvEXT +#define glSecondaryColor3ui epoxy_glSecondaryColor3ui +#define glSecondaryColor3uiEXT epoxy_glSecondaryColor3uiEXT +#define glSecondaryColor3uiv epoxy_glSecondaryColor3uiv +#define glSecondaryColor3uivEXT epoxy_glSecondaryColor3uivEXT +#define glSecondaryColor3us epoxy_glSecondaryColor3us +#define glSecondaryColor3usEXT epoxy_glSecondaryColor3usEXT +#define glSecondaryColor3usv epoxy_glSecondaryColor3usv +#define glSecondaryColor3usvEXT epoxy_glSecondaryColor3usvEXT +#define glSecondaryColorFormatNV epoxy_glSecondaryColorFormatNV +#define glSecondaryColorP3ui epoxy_glSecondaryColorP3ui +#define glSecondaryColorP3uiv epoxy_glSecondaryColorP3uiv +#define glSecondaryColorPointer epoxy_glSecondaryColorPointer +#define glSecondaryColorPointerEXT epoxy_glSecondaryColorPointerEXT +#define glSecondaryColorPointerListIBM epoxy_glSecondaryColorPointerListIBM +#define glSelectBuffer epoxy_glSelectBuffer +#define glSelectPerfMonitorCountersAMD epoxy_glSelectPerfMonitorCountersAMD +#define glSeparableFilter2D epoxy_glSeparableFilter2D +#define glSeparableFilter2DEXT epoxy_glSeparableFilter2DEXT +#define glSetFenceAPPLE epoxy_glSetFenceAPPLE +#define glSetFenceNV epoxy_glSetFenceNV +#define glSetFragmentShaderConstantATI epoxy_glSetFragmentShaderConstantATI +#define glSetInvariantEXT epoxy_glSetInvariantEXT +#define glSetLocalConstantEXT epoxy_glSetLocalConstantEXT +#define glSetMultisamplefvAMD epoxy_glSetMultisamplefvAMD +#define glShadeModel epoxy_glShadeModel +#define glShaderBinary epoxy_glShaderBinary +#define glShaderOp1EXT epoxy_glShaderOp1EXT +#define glShaderOp2EXT epoxy_glShaderOp2EXT +#define glShaderOp3EXT epoxy_glShaderOp3EXT +#define glShaderSource epoxy_glShaderSource +#define glShaderSourceARB epoxy_glShaderSourceARB +#define glShaderStorageBlockBinding epoxy_glShaderStorageBlockBinding +#define glSharpenTexFuncSGIS epoxy_glSharpenTexFuncSGIS +#define glSpriteParameterfSGIX epoxy_glSpriteParameterfSGIX +#define glSpriteParameterfvSGIX epoxy_glSpriteParameterfvSGIX +#define glSpriteParameteriSGIX epoxy_glSpriteParameteriSGIX +#define glSpriteParameterivSGIX epoxy_glSpriteParameterivSGIX +#define glStartInstrumentsSGIX epoxy_glStartInstrumentsSGIX +#define glStartTilingQCOM epoxy_glStartTilingQCOM +#define glStateCaptureNV epoxy_glStateCaptureNV +#define glStencilClearTagEXT epoxy_glStencilClearTagEXT +#define glStencilFillPathInstancedNV epoxy_glStencilFillPathInstancedNV +#define glStencilFillPathNV epoxy_glStencilFillPathNV +#define glStencilFunc epoxy_glStencilFunc +#define glStencilFuncSeparate epoxy_glStencilFuncSeparate +#define glStencilFuncSeparateATI epoxy_glStencilFuncSeparateATI +#define glStencilMask epoxy_glStencilMask +#define glStencilMaskSeparate epoxy_glStencilMaskSeparate +#define glStencilOp epoxy_glStencilOp +#define glStencilOpSeparate epoxy_glStencilOpSeparate +#define glStencilOpSeparateATI epoxy_glStencilOpSeparateATI +#define glStencilOpValueAMD epoxy_glStencilOpValueAMD +#define glStencilStrokePathInstancedNV epoxy_glStencilStrokePathInstancedNV +#define glStencilStrokePathNV epoxy_glStencilStrokePathNV +#define glStencilThenCoverFillPathInstancedNV epoxy_glStencilThenCoverFillPathInstancedNV +#define glStencilThenCoverFillPathNV epoxy_glStencilThenCoverFillPathNV +#define glStencilThenCoverStrokePathInstancedNV epoxy_glStencilThenCoverStrokePathInstancedNV +#define glStencilThenCoverStrokePathNV epoxy_glStencilThenCoverStrokePathNV +#define glStopInstrumentsSGIX epoxy_glStopInstrumentsSGIX +#define glStringMarkerGREMEDY epoxy_glStringMarkerGREMEDY +#define glSubpixelPrecisionBiasNV epoxy_glSubpixelPrecisionBiasNV +#define glSwizzleEXT epoxy_glSwizzleEXT +#define glSyncTextureINTEL epoxy_glSyncTextureINTEL +#define glTagSampleBufferSGIX epoxy_glTagSampleBufferSGIX +#define glTangent3bEXT epoxy_glTangent3bEXT +#define glTangent3bvEXT epoxy_glTangent3bvEXT +#define glTangent3dEXT epoxy_glTangent3dEXT +#define glTangent3dvEXT epoxy_glTangent3dvEXT +#define glTangent3fEXT epoxy_glTangent3fEXT +#define glTangent3fvEXT epoxy_glTangent3fvEXT +#define glTangent3iEXT epoxy_glTangent3iEXT +#define glTangent3ivEXT epoxy_glTangent3ivEXT +#define glTangent3sEXT epoxy_glTangent3sEXT +#define glTangent3svEXT epoxy_glTangent3svEXT +#define glTangentPointerEXT epoxy_glTangentPointerEXT +#define glTbufferMask3DFX epoxy_glTbufferMask3DFX +#define glTessellationFactorAMD epoxy_glTessellationFactorAMD +#define glTessellationModeAMD epoxy_glTessellationModeAMD +#define glTestFenceAPPLE epoxy_glTestFenceAPPLE +#define glTestFenceNV epoxy_glTestFenceNV +#define glTestObjectAPPLE epoxy_glTestObjectAPPLE +#define glTexBuffer epoxy_glTexBuffer +#define glTexBufferARB epoxy_glTexBufferARB +#define glTexBufferEXT epoxy_glTexBufferEXT +#define glTexBufferOES epoxy_glTexBufferOES +#define glTexBufferRange epoxy_glTexBufferRange +#define glTexBufferRangeEXT epoxy_glTexBufferRangeEXT +#define glTexBufferRangeOES epoxy_glTexBufferRangeOES +#define glTexBumpParameterfvATI epoxy_glTexBumpParameterfvATI +#define glTexBumpParameterivATI epoxy_glTexBumpParameterivATI +#define glTexCoord1bOES epoxy_glTexCoord1bOES +#define glTexCoord1bvOES epoxy_glTexCoord1bvOES +#define glTexCoord1d epoxy_glTexCoord1d +#define glTexCoord1dv epoxy_glTexCoord1dv +#define glTexCoord1f epoxy_glTexCoord1f +#define glTexCoord1fv epoxy_glTexCoord1fv +#define glTexCoord1hNV epoxy_glTexCoord1hNV +#define glTexCoord1hvNV epoxy_glTexCoord1hvNV +#define glTexCoord1i epoxy_glTexCoord1i +#define glTexCoord1iv epoxy_glTexCoord1iv +#define glTexCoord1s epoxy_glTexCoord1s +#define glTexCoord1sv epoxy_glTexCoord1sv +#define glTexCoord1xOES epoxy_glTexCoord1xOES +#define glTexCoord1xvOES epoxy_glTexCoord1xvOES +#define glTexCoord2bOES epoxy_glTexCoord2bOES +#define glTexCoord2bvOES epoxy_glTexCoord2bvOES +#define glTexCoord2d epoxy_glTexCoord2d +#define glTexCoord2dv epoxy_glTexCoord2dv +#define glTexCoord2f epoxy_glTexCoord2f +#define glTexCoord2fColor3fVertex3fSUN epoxy_glTexCoord2fColor3fVertex3fSUN +#define glTexCoord2fColor3fVertex3fvSUN epoxy_glTexCoord2fColor3fVertex3fvSUN +#define glTexCoord2fColor4fNormal3fVertex3fSUN epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN +#define glTexCoord2fColor4fNormal3fVertex3fvSUN epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN +#define glTexCoord2fColor4ubVertex3fSUN epoxy_glTexCoord2fColor4ubVertex3fSUN +#define glTexCoord2fColor4ubVertex3fvSUN epoxy_glTexCoord2fColor4ubVertex3fvSUN +#define glTexCoord2fNormal3fVertex3fSUN epoxy_glTexCoord2fNormal3fVertex3fSUN +#define glTexCoord2fNormal3fVertex3fvSUN epoxy_glTexCoord2fNormal3fVertex3fvSUN +#define glTexCoord2fVertex3fSUN epoxy_glTexCoord2fVertex3fSUN +#define glTexCoord2fVertex3fvSUN epoxy_glTexCoord2fVertex3fvSUN +#define glTexCoord2fv epoxy_glTexCoord2fv +#define glTexCoord2hNV epoxy_glTexCoord2hNV +#define glTexCoord2hvNV epoxy_glTexCoord2hvNV +#define glTexCoord2i epoxy_glTexCoord2i +#define glTexCoord2iv epoxy_glTexCoord2iv +#define glTexCoord2s epoxy_glTexCoord2s +#define glTexCoord2sv epoxy_glTexCoord2sv +#define glTexCoord2xOES epoxy_glTexCoord2xOES +#define glTexCoord2xvOES epoxy_glTexCoord2xvOES +#define glTexCoord3bOES epoxy_glTexCoord3bOES +#define glTexCoord3bvOES epoxy_glTexCoord3bvOES +#define glTexCoord3d epoxy_glTexCoord3d +#define glTexCoord3dv epoxy_glTexCoord3dv +#define glTexCoord3f epoxy_glTexCoord3f +#define glTexCoord3fv epoxy_glTexCoord3fv +#define glTexCoord3hNV epoxy_glTexCoord3hNV +#define glTexCoord3hvNV epoxy_glTexCoord3hvNV +#define glTexCoord3i epoxy_glTexCoord3i +#define glTexCoord3iv epoxy_glTexCoord3iv +#define glTexCoord3s epoxy_glTexCoord3s +#define glTexCoord3sv epoxy_glTexCoord3sv +#define glTexCoord3xOES epoxy_glTexCoord3xOES +#define glTexCoord3xvOES epoxy_glTexCoord3xvOES +#define glTexCoord4bOES epoxy_glTexCoord4bOES +#define glTexCoord4bvOES epoxy_glTexCoord4bvOES +#define glTexCoord4d epoxy_glTexCoord4d +#define glTexCoord4dv epoxy_glTexCoord4dv +#define glTexCoord4f epoxy_glTexCoord4f +#define glTexCoord4fColor4fNormal3fVertex4fSUN epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN +#define glTexCoord4fColor4fNormal3fVertex4fvSUN epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN +#define glTexCoord4fVertex4fSUN epoxy_glTexCoord4fVertex4fSUN +#define glTexCoord4fVertex4fvSUN epoxy_glTexCoord4fVertex4fvSUN +#define glTexCoord4fv epoxy_glTexCoord4fv +#define glTexCoord4hNV epoxy_glTexCoord4hNV +#define glTexCoord4hvNV epoxy_glTexCoord4hvNV +#define glTexCoord4i epoxy_glTexCoord4i +#define glTexCoord4iv epoxy_glTexCoord4iv +#define glTexCoord4s epoxy_glTexCoord4s +#define glTexCoord4sv epoxy_glTexCoord4sv +#define glTexCoord4xOES epoxy_glTexCoord4xOES +#define glTexCoord4xvOES epoxy_glTexCoord4xvOES +#define glTexCoordFormatNV epoxy_glTexCoordFormatNV +#define glTexCoordP1ui epoxy_glTexCoordP1ui +#define glTexCoordP1uiv epoxy_glTexCoordP1uiv +#define glTexCoordP2ui epoxy_glTexCoordP2ui +#define glTexCoordP2uiv epoxy_glTexCoordP2uiv +#define glTexCoordP3ui epoxy_glTexCoordP3ui +#define glTexCoordP3uiv epoxy_glTexCoordP3uiv +#define glTexCoordP4ui epoxy_glTexCoordP4ui +#define glTexCoordP4uiv epoxy_glTexCoordP4uiv +#define glTexCoordPointer epoxy_glTexCoordPointer +#define glTexCoordPointerEXT epoxy_glTexCoordPointerEXT +#define glTexCoordPointerListIBM epoxy_glTexCoordPointerListIBM +#define glTexCoordPointervINTEL epoxy_glTexCoordPointervINTEL +#define glTexEnvf epoxy_glTexEnvf +#define glTexEnvfv epoxy_glTexEnvfv +#define glTexEnvi epoxy_glTexEnvi +#define glTexEnviv epoxy_glTexEnviv +#define glTexEnvx epoxy_glTexEnvx +#define glTexEnvxOES epoxy_glTexEnvxOES +#define glTexEnvxv epoxy_glTexEnvxv +#define glTexEnvxvOES epoxy_glTexEnvxvOES +#define glTexFilterFuncSGIS epoxy_glTexFilterFuncSGIS +#define glTexGend epoxy_glTexGend +#define glTexGendv epoxy_glTexGendv +#define glTexGenf epoxy_glTexGenf +#define glTexGenfOES epoxy_glTexGenfOES +#define glTexGenfv epoxy_glTexGenfv +#define glTexGenfvOES epoxy_glTexGenfvOES +#define glTexGeni epoxy_glTexGeni +#define glTexGeniOES epoxy_glTexGeniOES +#define glTexGeniv epoxy_glTexGeniv +#define glTexGenivOES epoxy_glTexGenivOES +#define glTexGenxOES epoxy_glTexGenxOES +#define glTexGenxvOES epoxy_glTexGenxvOES +#define glTexImage1D epoxy_glTexImage1D +#define glTexImage2D epoxy_glTexImage2D +#define glTexImage2DMultisample epoxy_glTexImage2DMultisample +#define glTexImage2DMultisampleCoverageNV epoxy_glTexImage2DMultisampleCoverageNV +#define glTexImage3D epoxy_glTexImage3D +#define glTexImage3DEXT epoxy_glTexImage3DEXT +#define glTexImage3DMultisample epoxy_glTexImage3DMultisample +#define glTexImage3DMultisampleCoverageNV epoxy_glTexImage3DMultisampleCoverageNV +#define glTexImage3DOES epoxy_glTexImage3DOES +#define glTexImage4DSGIS epoxy_glTexImage4DSGIS +#define glTexPageCommitmentARB epoxy_glTexPageCommitmentARB +#define glTexPageCommitmentEXT epoxy_glTexPageCommitmentEXT +#define glTexParameterIiv epoxy_glTexParameterIiv +#define glTexParameterIivEXT epoxy_glTexParameterIivEXT +#define glTexParameterIivOES epoxy_glTexParameterIivOES +#define glTexParameterIuiv epoxy_glTexParameterIuiv +#define glTexParameterIuivEXT epoxy_glTexParameterIuivEXT +#define glTexParameterIuivOES epoxy_glTexParameterIuivOES +#define glTexParameterf epoxy_glTexParameterf +#define glTexParameterfv epoxy_glTexParameterfv +#define glTexParameteri epoxy_glTexParameteri +#define glTexParameteriv epoxy_glTexParameteriv +#define glTexParameterx epoxy_glTexParameterx +#define glTexParameterxOES epoxy_glTexParameterxOES +#define glTexParameterxv epoxy_glTexParameterxv +#define glTexParameterxvOES epoxy_glTexParameterxvOES +#define glTexRenderbufferNV epoxy_glTexRenderbufferNV +#define glTexStorage1D epoxy_glTexStorage1D +#define glTexStorage1DEXT epoxy_glTexStorage1DEXT +#define glTexStorage2D epoxy_glTexStorage2D +#define glTexStorage2DEXT epoxy_glTexStorage2DEXT +#define glTexStorage2DMultisample epoxy_glTexStorage2DMultisample +#define glTexStorage3D epoxy_glTexStorage3D +#define glTexStorage3DEXT epoxy_glTexStorage3DEXT +#define glTexStorage3DMultisample epoxy_glTexStorage3DMultisample +#define glTexStorage3DMultisampleOES epoxy_glTexStorage3DMultisampleOES +#define glTexStorageSparseAMD epoxy_glTexStorageSparseAMD +#define glTexSubImage1D epoxy_glTexSubImage1D +#define glTexSubImage1DEXT epoxy_glTexSubImage1DEXT +#define glTexSubImage2D epoxy_glTexSubImage2D +#define glTexSubImage2DEXT epoxy_glTexSubImage2DEXT +#define glTexSubImage3D epoxy_glTexSubImage3D +#define glTexSubImage3DEXT epoxy_glTexSubImage3DEXT +#define glTexSubImage3DOES epoxy_glTexSubImage3DOES +#define glTexSubImage4DSGIS epoxy_glTexSubImage4DSGIS +#define glTextureBarrier epoxy_glTextureBarrier +#define glTextureBarrierNV epoxy_glTextureBarrierNV +#define glTextureBuffer epoxy_glTextureBuffer +#define glTextureBufferEXT epoxy_glTextureBufferEXT +#define glTextureBufferRange epoxy_glTextureBufferRange +#define glTextureBufferRangeEXT epoxy_glTextureBufferRangeEXT +#define glTextureColorMaskSGIS epoxy_glTextureColorMaskSGIS +#define glTextureImage1DEXT epoxy_glTextureImage1DEXT +#define glTextureImage2DEXT epoxy_glTextureImage2DEXT +#define glTextureImage2DMultisampleCoverageNV epoxy_glTextureImage2DMultisampleCoverageNV +#define glTextureImage2DMultisampleNV epoxy_glTextureImage2DMultisampleNV +#define glTextureImage3DEXT epoxy_glTextureImage3DEXT +#define glTextureImage3DMultisampleCoverageNV epoxy_glTextureImage3DMultisampleCoverageNV +#define glTextureImage3DMultisampleNV epoxy_glTextureImage3DMultisampleNV +#define glTextureLightEXT epoxy_glTextureLightEXT +#define glTextureMaterialEXT epoxy_glTextureMaterialEXT +#define glTextureNormalEXT epoxy_glTextureNormalEXT +#define glTexturePageCommitmentEXT epoxy_glTexturePageCommitmentEXT +#define glTextureParameterIiv epoxy_glTextureParameterIiv +#define glTextureParameterIivEXT epoxy_glTextureParameterIivEXT +#define glTextureParameterIuiv epoxy_glTextureParameterIuiv +#define glTextureParameterIuivEXT epoxy_glTextureParameterIuivEXT +#define glTextureParameterf epoxy_glTextureParameterf +#define glTextureParameterfEXT epoxy_glTextureParameterfEXT +#define glTextureParameterfv epoxy_glTextureParameterfv +#define glTextureParameterfvEXT epoxy_glTextureParameterfvEXT +#define glTextureParameteri epoxy_glTextureParameteri +#define glTextureParameteriEXT epoxy_glTextureParameteriEXT +#define glTextureParameteriv epoxy_glTextureParameteriv +#define glTextureParameterivEXT epoxy_glTextureParameterivEXT +#define glTextureRangeAPPLE epoxy_glTextureRangeAPPLE +#define glTextureRenderbufferEXT epoxy_glTextureRenderbufferEXT +#define glTextureStorage1D epoxy_glTextureStorage1D +#define glTextureStorage1DEXT epoxy_glTextureStorage1DEXT +#define glTextureStorage2D epoxy_glTextureStorage2D +#define glTextureStorage2DEXT epoxy_glTextureStorage2DEXT +#define glTextureStorage2DMultisample epoxy_glTextureStorage2DMultisample +#define glTextureStorage2DMultisampleEXT epoxy_glTextureStorage2DMultisampleEXT +#define glTextureStorage3D epoxy_glTextureStorage3D +#define glTextureStorage3DEXT epoxy_glTextureStorage3DEXT +#define glTextureStorage3DMultisample epoxy_glTextureStorage3DMultisample +#define glTextureStorage3DMultisampleEXT epoxy_glTextureStorage3DMultisampleEXT +#define glTextureStorageSparseAMD epoxy_glTextureStorageSparseAMD +#define glTextureSubImage1D epoxy_glTextureSubImage1D +#define glTextureSubImage1DEXT epoxy_glTextureSubImage1DEXT +#define glTextureSubImage2D epoxy_glTextureSubImage2D +#define glTextureSubImage2DEXT epoxy_glTextureSubImage2DEXT +#define glTextureSubImage3D epoxy_glTextureSubImage3D +#define glTextureSubImage3DEXT epoxy_glTextureSubImage3DEXT +#define glTextureView epoxy_glTextureView +#define glTextureViewEXT epoxy_glTextureViewEXT +#define glTextureViewOES epoxy_glTextureViewOES +#define glTrackMatrixNV epoxy_glTrackMatrixNV +#define glTransformFeedbackAttribsNV epoxy_glTransformFeedbackAttribsNV +#define glTransformFeedbackBufferBase epoxy_glTransformFeedbackBufferBase +#define glTransformFeedbackBufferRange epoxy_glTransformFeedbackBufferRange +#define glTransformFeedbackStreamAttribsNV epoxy_glTransformFeedbackStreamAttribsNV +#define glTransformFeedbackVaryings epoxy_glTransformFeedbackVaryings +#define glTransformFeedbackVaryingsEXT epoxy_glTransformFeedbackVaryingsEXT +#define glTransformFeedbackVaryingsNV epoxy_glTransformFeedbackVaryingsNV +#define glTransformPathNV epoxy_glTransformPathNV +#define glTranslated epoxy_glTranslated +#define glTranslatef epoxy_glTranslatef +#define glTranslatex epoxy_glTranslatex +#define glTranslatexOES epoxy_glTranslatexOES +#define glUniform1d epoxy_glUniform1d +#define glUniform1dv epoxy_glUniform1dv +#define glUniform1f epoxy_glUniform1f +#define glUniform1fARB epoxy_glUniform1fARB +#define glUniform1fv epoxy_glUniform1fv +#define glUniform1fvARB epoxy_glUniform1fvARB +#define glUniform1i epoxy_glUniform1i +#define glUniform1i64ARB epoxy_glUniform1i64ARB +#define glUniform1i64NV epoxy_glUniform1i64NV +#define glUniform1i64vARB epoxy_glUniform1i64vARB +#define glUniform1i64vNV epoxy_glUniform1i64vNV +#define glUniform1iARB epoxy_glUniform1iARB +#define glUniform1iv epoxy_glUniform1iv +#define glUniform1ivARB epoxy_glUniform1ivARB +#define glUniform1ui epoxy_glUniform1ui +#define glUniform1ui64ARB epoxy_glUniform1ui64ARB +#define glUniform1ui64NV epoxy_glUniform1ui64NV +#define glUniform1ui64vARB epoxy_glUniform1ui64vARB +#define glUniform1ui64vNV epoxy_glUniform1ui64vNV +#define glUniform1uiEXT epoxy_glUniform1uiEXT +#define glUniform1uiv epoxy_glUniform1uiv +#define glUniform1uivEXT epoxy_glUniform1uivEXT +#define glUniform2d epoxy_glUniform2d +#define glUniform2dv epoxy_glUniform2dv +#define glUniform2f epoxy_glUniform2f +#define glUniform2fARB epoxy_glUniform2fARB +#define glUniform2fv epoxy_glUniform2fv +#define glUniform2fvARB epoxy_glUniform2fvARB +#define glUniform2i epoxy_glUniform2i +#define glUniform2i64ARB epoxy_glUniform2i64ARB +#define glUniform2i64NV epoxy_glUniform2i64NV +#define glUniform2i64vARB epoxy_glUniform2i64vARB +#define glUniform2i64vNV epoxy_glUniform2i64vNV +#define glUniform2iARB epoxy_glUniform2iARB +#define glUniform2iv epoxy_glUniform2iv +#define glUniform2ivARB epoxy_glUniform2ivARB +#define glUniform2ui epoxy_glUniform2ui +#define glUniform2ui64ARB epoxy_glUniform2ui64ARB +#define glUniform2ui64NV epoxy_glUniform2ui64NV +#define glUniform2ui64vARB epoxy_glUniform2ui64vARB +#define glUniform2ui64vNV epoxy_glUniform2ui64vNV +#define glUniform2uiEXT epoxy_glUniform2uiEXT +#define glUniform2uiv epoxy_glUniform2uiv +#define glUniform2uivEXT epoxy_glUniform2uivEXT +#define glUniform3d epoxy_glUniform3d +#define glUniform3dv epoxy_glUniform3dv +#define glUniform3f epoxy_glUniform3f +#define glUniform3fARB epoxy_glUniform3fARB +#define glUniform3fv epoxy_glUniform3fv +#define glUniform3fvARB epoxy_glUniform3fvARB +#define glUniform3i epoxy_glUniform3i +#define glUniform3i64ARB epoxy_glUniform3i64ARB +#define glUniform3i64NV epoxy_glUniform3i64NV +#define glUniform3i64vARB epoxy_glUniform3i64vARB +#define glUniform3i64vNV epoxy_glUniform3i64vNV +#define glUniform3iARB epoxy_glUniform3iARB +#define glUniform3iv epoxy_glUniform3iv +#define glUniform3ivARB epoxy_glUniform3ivARB +#define glUniform3ui epoxy_glUniform3ui +#define glUniform3ui64ARB epoxy_glUniform3ui64ARB +#define glUniform3ui64NV epoxy_glUniform3ui64NV +#define glUniform3ui64vARB epoxy_glUniform3ui64vARB +#define glUniform3ui64vNV epoxy_glUniform3ui64vNV +#define glUniform3uiEXT epoxy_glUniform3uiEXT +#define glUniform3uiv epoxy_glUniform3uiv +#define glUniform3uivEXT epoxy_glUniform3uivEXT +#define glUniform4d epoxy_glUniform4d +#define glUniform4dv epoxy_glUniform4dv +#define glUniform4f epoxy_glUniform4f +#define glUniform4fARB epoxy_glUniform4fARB +#define glUniform4fv epoxy_glUniform4fv +#define glUniform4fvARB epoxy_glUniform4fvARB +#define glUniform4i epoxy_glUniform4i +#define glUniform4i64ARB epoxy_glUniform4i64ARB +#define glUniform4i64NV epoxy_glUniform4i64NV +#define glUniform4i64vARB epoxy_glUniform4i64vARB +#define glUniform4i64vNV epoxy_glUniform4i64vNV +#define glUniform4iARB epoxy_glUniform4iARB +#define glUniform4iv epoxy_glUniform4iv +#define glUniform4ivARB epoxy_glUniform4ivARB +#define glUniform4ui epoxy_glUniform4ui +#define glUniform4ui64ARB epoxy_glUniform4ui64ARB +#define glUniform4ui64NV epoxy_glUniform4ui64NV +#define glUniform4ui64vARB epoxy_glUniform4ui64vARB +#define glUniform4ui64vNV epoxy_glUniform4ui64vNV +#define glUniform4uiEXT epoxy_glUniform4uiEXT +#define glUniform4uiv epoxy_glUniform4uiv +#define glUniform4uivEXT epoxy_glUniform4uivEXT +#define glUniformBlockBinding epoxy_glUniformBlockBinding +#define glUniformBufferEXT epoxy_glUniformBufferEXT +#define glUniformHandleui64ARB epoxy_glUniformHandleui64ARB +#define glUniformHandleui64NV epoxy_glUniformHandleui64NV +#define glUniformHandleui64vARB epoxy_glUniformHandleui64vARB +#define glUniformHandleui64vNV epoxy_glUniformHandleui64vNV +#define glUniformMatrix2dv epoxy_glUniformMatrix2dv +#define glUniformMatrix2fv epoxy_glUniformMatrix2fv +#define glUniformMatrix2fvARB epoxy_glUniformMatrix2fvARB +#define glUniformMatrix2x3dv epoxy_glUniformMatrix2x3dv +#define glUniformMatrix2x3fv epoxy_glUniformMatrix2x3fv +#define glUniformMatrix2x3fvNV epoxy_glUniformMatrix2x3fvNV +#define glUniformMatrix2x4dv epoxy_glUniformMatrix2x4dv +#define glUniformMatrix2x4fv epoxy_glUniformMatrix2x4fv +#define glUniformMatrix2x4fvNV epoxy_glUniformMatrix2x4fvNV +#define glUniformMatrix3dv epoxy_glUniformMatrix3dv +#define glUniformMatrix3fv epoxy_glUniformMatrix3fv +#define glUniformMatrix3fvARB epoxy_glUniformMatrix3fvARB +#define glUniformMatrix3x2dv epoxy_glUniformMatrix3x2dv +#define glUniformMatrix3x2fv epoxy_glUniformMatrix3x2fv +#define glUniformMatrix3x2fvNV epoxy_glUniformMatrix3x2fvNV +#define glUniformMatrix3x4dv epoxy_glUniformMatrix3x4dv +#define glUniformMatrix3x4fv epoxy_glUniformMatrix3x4fv +#define glUniformMatrix3x4fvNV epoxy_glUniformMatrix3x4fvNV +#define glUniformMatrix4dv epoxy_glUniformMatrix4dv +#define glUniformMatrix4fv epoxy_glUniformMatrix4fv +#define glUniformMatrix4fvARB epoxy_glUniformMatrix4fvARB +#define glUniformMatrix4x2dv epoxy_glUniformMatrix4x2dv +#define glUniformMatrix4x2fv epoxy_glUniformMatrix4x2fv +#define glUniformMatrix4x2fvNV epoxy_glUniformMatrix4x2fvNV +#define glUniformMatrix4x3dv epoxy_glUniformMatrix4x3dv +#define glUniformMatrix4x3fv epoxy_glUniformMatrix4x3fv +#define glUniformMatrix4x3fvNV epoxy_glUniformMatrix4x3fvNV +#define glUniformSubroutinesuiv epoxy_glUniformSubroutinesuiv +#define glUniformui64NV epoxy_glUniformui64NV +#define glUniformui64vNV epoxy_glUniformui64vNV +#define glUnlockArraysEXT epoxy_glUnlockArraysEXT +#define glUnmapBuffer epoxy_glUnmapBuffer +#define glUnmapBufferARB epoxy_glUnmapBufferARB +#define glUnmapBufferOES epoxy_glUnmapBufferOES +#define glUnmapNamedBuffer epoxy_glUnmapNamedBuffer +#define glUnmapNamedBufferEXT epoxy_glUnmapNamedBufferEXT +#define glUnmapObjectBufferATI epoxy_glUnmapObjectBufferATI +#define glUnmapTexture2DINTEL epoxy_glUnmapTexture2DINTEL +#define glUpdateObjectBufferATI epoxy_glUpdateObjectBufferATI +#define glUseProgram epoxy_glUseProgram +#define glUseProgramObjectARB epoxy_glUseProgramObjectARB +#define glUseProgramStages epoxy_glUseProgramStages +#define glUseProgramStagesEXT epoxy_glUseProgramStagesEXT +#define glUseShaderProgramEXT epoxy_glUseShaderProgramEXT +#define glVDPAUFiniNV epoxy_glVDPAUFiniNV +#define glVDPAUGetSurfaceivNV epoxy_glVDPAUGetSurfaceivNV +#define glVDPAUInitNV epoxy_glVDPAUInitNV +#define glVDPAUIsSurfaceNV epoxy_glVDPAUIsSurfaceNV +#define glVDPAUMapSurfacesNV epoxy_glVDPAUMapSurfacesNV +#define glVDPAURegisterOutputSurfaceNV epoxy_glVDPAURegisterOutputSurfaceNV +#define glVDPAURegisterVideoSurfaceNV epoxy_glVDPAURegisterVideoSurfaceNV +#define glVDPAUSurfaceAccessNV epoxy_glVDPAUSurfaceAccessNV +#define glVDPAUUnmapSurfacesNV epoxy_glVDPAUUnmapSurfacesNV +#define glVDPAUUnregisterSurfaceNV epoxy_glVDPAUUnregisterSurfaceNV +#define glValidateProgram epoxy_glValidateProgram +#define glValidateProgramARB epoxy_glValidateProgramARB +#define glValidateProgramPipeline epoxy_glValidateProgramPipeline +#define glValidateProgramPipelineEXT epoxy_glValidateProgramPipelineEXT +#define glVariantArrayObjectATI epoxy_glVariantArrayObjectATI +#define glVariantPointerEXT epoxy_glVariantPointerEXT +#define glVariantbvEXT epoxy_glVariantbvEXT +#define glVariantdvEXT epoxy_glVariantdvEXT +#define glVariantfvEXT epoxy_glVariantfvEXT +#define glVariantivEXT epoxy_glVariantivEXT +#define glVariantsvEXT epoxy_glVariantsvEXT +#define glVariantubvEXT epoxy_glVariantubvEXT +#define glVariantuivEXT epoxy_glVariantuivEXT +#define glVariantusvEXT epoxy_glVariantusvEXT +#define glVertex2bOES epoxy_glVertex2bOES +#define glVertex2bvOES epoxy_glVertex2bvOES +#define glVertex2d epoxy_glVertex2d +#define glVertex2dv epoxy_glVertex2dv +#define glVertex2f epoxy_glVertex2f +#define glVertex2fv epoxy_glVertex2fv +#define glVertex2hNV epoxy_glVertex2hNV +#define glVertex2hvNV epoxy_glVertex2hvNV +#define glVertex2i epoxy_glVertex2i +#define glVertex2iv epoxy_glVertex2iv +#define glVertex2s epoxy_glVertex2s +#define glVertex2sv epoxy_glVertex2sv +#define glVertex2xOES epoxy_glVertex2xOES +#define glVertex2xvOES epoxy_glVertex2xvOES +#define glVertex3bOES epoxy_glVertex3bOES +#define glVertex3bvOES epoxy_glVertex3bvOES +#define glVertex3d epoxy_glVertex3d +#define glVertex3dv epoxy_glVertex3dv +#define glVertex3f epoxy_glVertex3f +#define glVertex3fv epoxy_glVertex3fv +#define glVertex3hNV epoxy_glVertex3hNV +#define glVertex3hvNV epoxy_glVertex3hvNV +#define glVertex3i epoxy_glVertex3i +#define glVertex3iv epoxy_glVertex3iv +#define glVertex3s epoxy_glVertex3s +#define glVertex3sv epoxy_glVertex3sv +#define glVertex3xOES epoxy_glVertex3xOES +#define glVertex3xvOES epoxy_glVertex3xvOES +#define glVertex4bOES epoxy_glVertex4bOES +#define glVertex4bvOES epoxy_glVertex4bvOES +#define glVertex4d epoxy_glVertex4d +#define glVertex4dv epoxy_glVertex4dv +#define glVertex4f epoxy_glVertex4f +#define glVertex4fv epoxy_glVertex4fv +#define glVertex4hNV epoxy_glVertex4hNV +#define glVertex4hvNV epoxy_glVertex4hvNV +#define glVertex4i epoxy_glVertex4i +#define glVertex4iv epoxy_glVertex4iv +#define glVertex4s epoxy_glVertex4s +#define glVertex4sv epoxy_glVertex4sv +#define glVertex4xOES epoxy_glVertex4xOES +#define glVertex4xvOES epoxy_glVertex4xvOES +#define glVertexArrayAttribBinding epoxy_glVertexArrayAttribBinding +#define glVertexArrayAttribFormat epoxy_glVertexArrayAttribFormat +#define glVertexArrayAttribIFormat epoxy_glVertexArrayAttribIFormat +#define glVertexArrayAttribLFormat epoxy_glVertexArrayAttribLFormat +#define glVertexArrayBindVertexBufferEXT epoxy_glVertexArrayBindVertexBufferEXT +#define glVertexArrayBindingDivisor epoxy_glVertexArrayBindingDivisor +#define glVertexArrayColorOffsetEXT epoxy_glVertexArrayColorOffsetEXT +#define glVertexArrayEdgeFlagOffsetEXT epoxy_glVertexArrayEdgeFlagOffsetEXT +#define glVertexArrayElementBuffer epoxy_glVertexArrayElementBuffer +#define glVertexArrayFogCoordOffsetEXT epoxy_glVertexArrayFogCoordOffsetEXT +#define glVertexArrayIndexOffsetEXT epoxy_glVertexArrayIndexOffsetEXT +#define glVertexArrayMultiTexCoordOffsetEXT epoxy_glVertexArrayMultiTexCoordOffsetEXT +#define glVertexArrayNormalOffsetEXT epoxy_glVertexArrayNormalOffsetEXT +#define glVertexArrayParameteriAPPLE epoxy_glVertexArrayParameteriAPPLE +#define glVertexArrayRangeAPPLE epoxy_glVertexArrayRangeAPPLE +#define glVertexArrayRangeNV epoxy_glVertexArrayRangeNV +#define glVertexArraySecondaryColorOffsetEXT epoxy_glVertexArraySecondaryColorOffsetEXT +#define glVertexArrayTexCoordOffsetEXT epoxy_glVertexArrayTexCoordOffsetEXT +#define glVertexArrayVertexAttribBindingEXT epoxy_glVertexArrayVertexAttribBindingEXT +#define glVertexArrayVertexAttribDivisorEXT epoxy_glVertexArrayVertexAttribDivisorEXT +#define glVertexArrayVertexAttribFormatEXT epoxy_glVertexArrayVertexAttribFormatEXT +#define glVertexArrayVertexAttribIFormatEXT epoxy_glVertexArrayVertexAttribIFormatEXT +#define glVertexArrayVertexAttribIOffsetEXT epoxy_glVertexArrayVertexAttribIOffsetEXT +#define glVertexArrayVertexAttribLFormatEXT epoxy_glVertexArrayVertexAttribLFormatEXT +#define glVertexArrayVertexAttribLOffsetEXT epoxy_glVertexArrayVertexAttribLOffsetEXT +#define glVertexArrayVertexAttribOffsetEXT epoxy_glVertexArrayVertexAttribOffsetEXT +#define glVertexArrayVertexBindingDivisorEXT epoxy_glVertexArrayVertexBindingDivisorEXT +#define glVertexArrayVertexBuffer epoxy_glVertexArrayVertexBuffer +#define glVertexArrayVertexBuffers epoxy_glVertexArrayVertexBuffers +#define glVertexArrayVertexOffsetEXT epoxy_glVertexArrayVertexOffsetEXT +#define glVertexAttrib1d epoxy_glVertexAttrib1d +#define glVertexAttrib1dARB epoxy_glVertexAttrib1dARB +#define glVertexAttrib1dNV epoxy_glVertexAttrib1dNV +#define glVertexAttrib1dv epoxy_glVertexAttrib1dv +#define glVertexAttrib1dvARB epoxy_glVertexAttrib1dvARB +#define glVertexAttrib1dvNV epoxy_glVertexAttrib1dvNV +#define glVertexAttrib1f epoxy_glVertexAttrib1f +#define glVertexAttrib1fARB epoxy_glVertexAttrib1fARB +#define glVertexAttrib1fNV epoxy_glVertexAttrib1fNV +#define glVertexAttrib1fv epoxy_glVertexAttrib1fv +#define glVertexAttrib1fvARB epoxy_glVertexAttrib1fvARB +#define glVertexAttrib1fvNV epoxy_glVertexAttrib1fvNV +#define glVertexAttrib1hNV epoxy_glVertexAttrib1hNV +#define glVertexAttrib1hvNV epoxy_glVertexAttrib1hvNV +#define glVertexAttrib1s epoxy_glVertexAttrib1s +#define glVertexAttrib1sARB epoxy_glVertexAttrib1sARB +#define glVertexAttrib1sNV epoxy_glVertexAttrib1sNV +#define glVertexAttrib1sv epoxy_glVertexAttrib1sv +#define glVertexAttrib1svARB epoxy_glVertexAttrib1svARB +#define glVertexAttrib1svNV epoxy_glVertexAttrib1svNV +#define glVertexAttrib2d epoxy_glVertexAttrib2d +#define glVertexAttrib2dARB epoxy_glVertexAttrib2dARB +#define glVertexAttrib2dNV epoxy_glVertexAttrib2dNV +#define glVertexAttrib2dv epoxy_glVertexAttrib2dv +#define glVertexAttrib2dvARB epoxy_glVertexAttrib2dvARB +#define glVertexAttrib2dvNV epoxy_glVertexAttrib2dvNV +#define glVertexAttrib2f epoxy_glVertexAttrib2f +#define glVertexAttrib2fARB epoxy_glVertexAttrib2fARB +#define glVertexAttrib2fNV epoxy_glVertexAttrib2fNV +#define glVertexAttrib2fv epoxy_glVertexAttrib2fv +#define glVertexAttrib2fvARB epoxy_glVertexAttrib2fvARB +#define glVertexAttrib2fvNV epoxy_glVertexAttrib2fvNV +#define glVertexAttrib2hNV epoxy_glVertexAttrib2hNV +#define glVertexAttrib2hvNV epoxy_glVertexAttrib2hvNV +#define glVertexAttrib2s epoxy_glVertexAttrib2s +#define glVertexAttrib2sARB epoxy_glVertexAttrib2sARB +#define glVertexAttrib2sNV epoxy_glVertexAttrib2sNV +#define glVertexAttrib2sv epoxy_glVertexAttrib2sv +#define glVertexAttrib2svARB epoxy_glVertexAttrib2svARB +#define glVertexAttrib2svNV epoxy_glVertexAttrib2svNV +#define glVertexAttrib3d epoxy_glVertexAttrib3d +#define glVertexAttrib3dARB epoxy_glVertexAttrib3dARB +#define glVertexAttrib3dNV epoxy_glVertexAttrib3dNV +#define glVertexAttrib3dv epoxy_glVertexAttrib3dv +#define glVertexAttrib3dvARB epoxy_glVertexAttrib3dvARB +#define glVertexAttrib3dvNV epoxy_glVertexAttrib3dvNV +#define glVertexAttrib3f epoxy_glVertexAttrib3f +#define glVertexAttrib3fARB epoxy_glVertexAttrib3fARB +#define glVertexAttrib3fNV epoxy_glVertexAttrib3fNV +#define glVertexAttrib3fv epoxy_glVertexAttrib3fv +#define glVertexAttrib3fvARB epoxy_glVertexAttrib3fvARB +#define glVertexAttrib3fvNV epoxy_glVertexAttrib3fvNV +#define glVertexAttrib3hNV epoxy_glVertexAttrib3hNV +#define glVertexAttrib3hvNV epoxy_glVertexAttrib3hvNV +#define glVertexAttrib3s epoxy_glVertexAttrib3s +#define glVertexAttrib3sARB epoxy_glVertexAttrib3sARB +#define glVertexAttrib3sNV epoxy_glVertexAttrib3sNV +#define glVertexAttrib3sv epoxy_glVertexAttrib3sv +#define glVertexAttrib3svARB epoxy_glVertexAttrib3svARB +#define glVertexAttrib3svNV epoxy_glVertexAttrib3svNV +#define glVertexAttrib4Nbv epoxy_glVertexAttrib4Nbv +#define glVertexAttrib4NbvARB epoxy_glVertexAttrib4NbvARB +#define glVertexAttrib4Niv epoxy_glVertexAttrib4Niv +#define glVertexAttrib4NivARB epoxy_glVertexAttrib4NivARB +#define glVertexAttrib4Nsv epoxy_glVertexAttrib4Nsv +#define glVertexAttrib4NsvARB epoxy_glVertexAttrib4NsvARB +#define glVertexAttrib4Nub epoxy_glVertexAttrib4Nub +#define glVertexAttrib4NubARB epoxy_glVertexAttrib4NubARB +#define glVertexAttrib4Nubv epoxy_glVertexAttrib4Nubv +#define glVertexAttrib4NubvARB epoxy_glVertexAttrib4NubvARB +#define glVertexAttrib4Nuiv epoxy_glVertexAttrib4Nuiv +#define glVertexAttrib4NuivARB epoxy_glVertexAttrib4NuivARB +#define glVertexAttrib4Nusv epoxy_glVertexAttrib4Nusv +#define glVertexAttrib4NusvARB epoxy_glVertexAttrib4NusvARB +#define glVertexAttrib4bv epoxy_glVertexAttrib4bv +#define glVertexAttrib4bvARB epoxy_glVertexAttrib4bvARB +#define glVertexAttrib4d epoxy_glVertexAttrib4d +#define glVertexAttrib4dARB epoxy_glVertexAttrib4dARB +#define glVertexAttrib4dNV epoxy_glVertexAttrib4dNV +#define glVertexAttrib4dv epoxy_glVertexAttrib4dv +#define glVertexAttrib4dvARB epoxy_glVertexAttrib4dvARB +#define glVertexAttrib4dvNV epoxy_glVertexAttrib4dvNV +#define glVertexAttrib4f epoxy_glVertexAttrib4f +#define glVertexAttrib4fARB epoxy_glVertexAttrib4fARB +#define glVertexAttrib4fNV epoxy_glVertexAttrib4fNV +#define glVertexAttrib4fv epoxy_glVertexAttrib4fv +#define glVertexAttrib4fvARB epoxy_glVertexAttrib4fvARB +#define glVertexAttrib4fvNV epoxy_glVertexAttrib4fvNV +#define glVertexAttrib4hNV epoxy_glVertexAttrib4hNV +#define glVertexAttrib4hvNV epoxy_glVertexAttrib4hvNV +#define glVertexAttrib4iv epoxy_glVertexAttrib4iv +#define glVertexAttrib4ivARB epoxy_glVertexAttrib4ivARB +#define glVertexAttrib4s epoxy_glVertexAttrib4s +#define glVertexAttrib4sARB epoxy_glVertexAttrib4sARB +#define glVertexAttrib4sNV epoxy_glVertexAttrib4sNV +#define glVertexAttrib4sv epoxy_glVertexAttrib4sv +#define glVertexAttrib4svARB epoxy_glVertexAttrib4svARB +#define glVertexAttrib4svNV epoxy_glVertexAttrib4svNV +#define glVertexAttrib4ubNV epoxy_glVertexAttrib4ubNV +#define glVertexAttrib4ubv epoxy_glVertexAttrib4ubv +#define glVertexAttrib4ubvARB epoxy_glVertexAttrib4ubvARB +#define glVertexAttrib4ubvNV epoxy_glVertexAttrib4ubvNV +#define glVertexAttrib4uiv epoxy_glVertexAttrib4uiv +#define glVertexAttrib4uivARB epoxy_glVertexAttrib4uivARB +#define glVertexAttrib4usv epoxy_glVertexAttrib4usv +#define glVertexAttrib4usvARB epoxy_glVertexAttrib4usvARB +#define glVertexAttribArrayObjectATI epoxy_glVertexAttribArrayObjectATI +#define glVertexAttribBinding epoxy_glVertexAttribBinding +#define glVertexAttribDivisor epoxy_glVertexAttribDivisor +#define glVertexAttribDivisorANGLE epoxy_glVertexAttribDivisorANGLE +#define glVertexAttribDivisorARB epoxy_glVertexAttribDivisorARB +#define glVertexAttribDivisorEXT epoxy_glVertexAttribDivisorEXT +#define glVertexAttribDivisorNV epoxy_glVertexAttribDivisorNV +#define glVertexAttribFormat epoxy_glVertexAttribFormat +#define glVertexAttribFormatNV epoxy_glVertexAttribFormatNV +#define glVertexAttribI1i epoxy_glVertexAttribI1i +#define glVertexAttribI1iEXT epoxy_glVertexAttribI1iEXT +#define glVertexAttribI1iv epoxy_glVertexAttribI1iv +#define glVertexAttribI1ivEXT epoxy_glVertexAttribI1ivEXT +#define glVertexAttribI1ui epoxy_glVertexAttribI1ui +#define glVertexAttribI1uiEXT epoxy_glVertexAttribI1uiEXT +#define glVertexAttribI1uiv epoxy_glVertexAttribI1uiv +#define glVertexAttribI1uivEXT epoxy_glVertexAttribI1uivEXT +#define glVertexAttribI2i epoxy_glVertexAttribI2i +#define glVertexAttribI2iEXT epoxy_glVertexAttribI2iEXT +#define glVertexAttribI2iv epoxy_glVertexAttribI2iv +#define glVertexAttribI2ivEXT epoxy_glVertexAttribI2ivEXT +#define glVertexAttribI2ui epoxy_glVertexAttribI2ui +#define glVertexAttribI2uiEXT epoxy_glVertexAttribI2uiEXT +#define glVertexAttribI2uiv epoxy_glVertexAttribI2uiv +#define glVertexAttribI2uivEXT epoxy_glVertexAttribI2uivEXT +#define glVertexAttribI3i epoxy_glVertexAttribI3i +#define glVertexAttribI3iEXT epoxy_glVertexAttribI3iEXT +#define glVertexAttribI3iv epoxy_glVertexAttribI3iv +#define glVertexAttribI3ivEXT epoxy_glVertexAttribI3ivEXT +#define glVertexAttribI3ui epoxy_glVertexAttribI3ui +#define glVertexAttribI3uiEXT epoxy_glVertexAttribI3uiEXT +#define glVertexAttribI3uiv epoxy_glVertexAttribI3uiv +#define glVertexAttribI3uivEXT epoxy_glVertexAttribI3uivEXT +#define glVertexAttribI4bv epoxy_glVertexAttribI4bv +#define glVertexAttribI4bvEXT epoxy_glVertexAttribI4bvEXT +#define glVertexAttribI4i epoxy_glVertexAttribI4i +#define glVertexAttribI4iEXT epoxy_glVertexAttribI4iEXT +#define glVertexAttribI4iv epoxy_glVertexAttribI4iv +#define glVertexAttribI4ivEXT epoxy_glVertexAttribI4ivEXT +#define glVertexAttribI4sv epoxy_glVertexAttribI4sv +#define glVertexAttribI4svEXT epoxy_glVertexAttribI4svEXT +#define glVertexAttribI4ubv epoxy_glVertexAttribI4ubv +#define glVertexAttribI4ubvEXT epoxy_glVertexAttribI4ubvEXT +#define glVertexAttribI4ui epoxy_glVertexAttribI4ui +#define glVertexAttribI4uiEXT epoxy_glVertexAttribI4uiEXT +#define glVertexAttribI4uiv epoxy_glVertexAttribI4uiv +#define glVertexAttribI4uivEXT epoxy_glVertexAttribI4uivEXT +#define glVertexAttribI4usv epoxy_glVertexAttribI4usv +#define glVertexAttribI4usvEXT epoxy_glVertexAttribI4usvEXT +#define glVertexAttribIFormat epoxy_glVertexAttribIFormat +#define glVertexAttribIFormatNV epoxy_glVertexAttribIFormatNV +#define glVertexAttribIPointer epoxy_glVertexAttribIPointer +#define glVertexAttribIPointerEXT epoxy_glVertexAttribIPointerEXT +#define glVertexAttribL1d epoxy_glVertexAttribL1d +#define glVertexAttribL1dEXT epoxy_glVertexAttribL1dEXT +#define glVertexAttribL1dv epoxy_glVertexAttribL1dv +#define glVertexAttribL1dvEXT epoxy_glVertexAttribL1dvEXT +#define glVertexAttribL1i64NV epoxy_glVertexAttribL1i64NV +#define glVertexAttribL1i64vNV epoxy_glVertexAttribL1i64vNV +#define glVertexAttribL1ui64ARB epoxy_glVertexAttribL1ui64ARB +#define glVertexAttribL1ui64NV epoxy_glVertexAttribL1ui64NV +#define glVertexAttribL1ui64vARB epoxy_glVertexAttribL1ui64vARB +#define glVertexAttribL1ui64vNV epoxy_glVertexAttribL1ui64vNV +#define glVertexAttribL2d epoxy_glVertexAttribL2d +#define glVertexAttribL2dEXT epoxy_glVertexAttribL2dEXT +#define glVertexAttribL2dv epoxy_glVertexAttribL2dv +#define glVertexAttribL2dvEXT epoxy_glVertexAttribL2dvEXT +#define glVertexAttribL2i64NV epoxy_glVertexAttribL2i64NV +#define glVertexAttribL2i64vNV epoxy_glVertexAttribL2i64vNV +#define glVertexAttribL2ui64NV epoxy_glVertexAttribL2ui64NV +#define glVertexAttribL2ui64vNV epoxy_glVertexAttribL2ui64vNV +#define glVertexAttribL3d epoxy_glVertexAttribL3d +#define glVertexAttribL3dEXT epoxy_glVertexAttribL3dEXT +#define glVertexAttribL3dv epoxy_glVertexAttribL3dv +#define glVertexAttribL3dvEXT epoxy_glVertexAttribL3dvEXT +#define glVertexAttribL3i64NV epoxy_glVertexAttribL3i64NV +#define glVertexAttribL3i64vNV epoxy_glVertexAttribL3i64vNV +#define glVertexAttribL3ui64NV epoxy_glVertexAttribL3ui64NV +#define glVertexAttribL3ui64vNV epoxy_glVertexAttribL3ui64vNV +#define glVertexAttribL4d epoxy_glVertexAttribL4d +#define glVertexAttribL4dEXT epoxy_glVertexAttribL4dEXT +#define glVertexAttribL4dv epoxy_glVertexAttribL4dv +#define glVertexAttribL4dvEXT epoxy_glVertexAttribL4dvEXT +#define glVertexAttribL4i64NV epoxy_glVertexAttribL4i64NV +#define glVertexAttribL4i64vNV epoxy_glVertexAttribL4i64vNV +#define glVertexAttribL4ui64NV epoxy_glVertexAttribL4ui64NV +#define glVertexAttribL4ui64vNV epoxy_glVertexAttribL4ui64vNV +#define glVertexAttribLFormat epoxy_glVertexAttribLFormat +#define glVertexAttribLFormatNV epoxy_glVertexAttribLFormatNV +#define glVertexAttribLPointer epoxy_glVertexAttribLPointer +#define glVertexAttribLPointerEXT epoxy_glVertexAttribLPointerEXT +#define glVertexAttribP1ui epoxy_glVertexAttribP1ui +#define glVertexAttribP1uiv epoxy_glVertexAttribP1uiv +#define glVertexAttribP2ui epoxy_glVertexAttribP2ui +#define glVertexAttribP2uiv epoxy_glVertexAttribP2uiv +#define glVertexAttribP3ui epoxy_glVertexAttribP3ui +#define glVertexAttribP3uiv epoxy_glVertexAttribP3uiv +#define glVertexAttribP4ui epoxy_glVertexAttribP4ui +#define glVertexAttribP4uiv epoxy_glVertexAttribP4uiv +#define glVertexAttribParameteriAMD epoxy_glVertexAttribParameteriAMD +#define glVertexAttribPointer epoxy_glVertexAttribPointer +#define glVertexAttribPointerARB epoxy_glVertexAttribPointerARB +#define glVertexAttribPointerNV epoxy_glVertexAttribPointerNV +#define glVertexAttribs1dvNV epoxy_glVertexAttribs1dvNV +#define glVertexAttribs1fvNV epoxy_glVertexAttribs1fvNV +#define glVertexAttribs1hvNV epoxy_glVertexAttribs1hvNV +#define glVertexAttribs1svNV epoxy_glVertexAttribs1svNV +#define glVertexAttribs2dvNV epoxy_glVertexAttribs2dvNV +#define glVertexAttribs2fvNV epoxy_glVertexAttribs2fvNV +#define glVertexAttribs2hvNV epoxy_glVertexAttribs2hvNV +#define glVertexAttribs2svNV epoxy_glVertexAttribs2svNV +#define glVertexAttribs3dvNV epoxy_glVertexAttribs3dvNV +#define glVertexAttribs3fvNV epoxy_glVertexAttribs3fvNV +#define glVertexAttribs3hvNV epoxy_glVertexAttribs3hvNV +#define glVertexAttribs3svNV epoxy_glVertexAttribs3svNV +#define glVertexAttribs4dvNV epoxy_glVertexAttribs4dvNV +#define glVertexAttribs4fvNV epoxy_glVertexAttribs4fvNV +#define glVertexAttribs4hvNV epoxy_glVertexAttribs4hvNV +#define glVertexAttribs4svNV epoxy_glVertexAttribs4svNV +#define glVertexAttribs4ubvNV epoxy_glVertexAttribs4ubvNV +#define glVertexBindingDivisor epoxy_glVertexBindingDivisor +#define glVertexBlendARB epoxy_glVertexBlendARB +#define glVertexBlendEnvfATI epoxy_glVertexBlendEnvfATI +#define glVertexBlendEnviATI epoxy_glVertexBlendEnviATI +#define glVertexFormatNV epoxy_glVertexFormatNV +#define glVertexP2ui epoxy_glVertexP2ui +#define glVertexP2uiv epoxy_glVertexP2uiv +#define glVertexP3ui epoxy_glVertexP3ui +#define glVertexP3uiv epoxy_glVertexP3uiv +#define glVertexP4ui epoxy_glVertexP4ui +#define glVertexP4uiv epoxy_glVertexP4uiv +#define glVertexPointer epoxy_glVertexPointer +#define glVertexPointerEXT epoxy_glVertexPointerEXT +#define glVertexPointerListIBM epoxy_glVertexPointerListIBM +#define glVertexPointervINTEL epoxy_glVertexPointervINTEL +#define glVertexStream1dATI epoxy_glVertexStream1dATI +#define glVertexStream1dvATI epoxy_glVertexStream1dvATI +#define glVertexStream1fATI epoxy_glVertexStream1fATI +#define glVertexStream1fvATI epoxy_glVertexStream1fvATI +#define glVertexStream1iATI epoxy_glVertexStream1iATI +#define glVertexStream1ivATI epoxy_glVertexStream1ivATI +#define glVertexStream1sATI epoxy_glVertexStream1sATI +#define glVertexStream1svATI epoxy_glVertexStream1svATI +#define glVertexStream2dATI epoxy_glVertexStream2dATI +#define glVertexStream2dvATI epoxy_glVertexStream2dvATI +#define glVertexStream2fATI epoxy_glVertexStream2fATI +#define glVertexStream2fvATI epoxy_glVertexStream2fvATI +#define glVertexStream2iATI epoxy_glVertexStream2iATI +#define glVertexStream2ivATI epoxy_glVertexStream2ivATI +#define glVertexStream2sATI epoxy_glVertexStream2sATI +#define glVertexStream2svATI epoxy_glVertexStream2svATI +#define glVertexStream3dATI epoxy_glVertexStream3dATI +#define glVertexStream3dvATI epoxy_glVertexStream3dvATI +#define glVertexStream3fATI epoxy_glVertexStream3fATI +#define glVertexStream3fvATI epoxy_glVertexStream3fvATI +#define glVertexStream3iATI epoxy_glVertexStream3iATI +#define glVertexStream3ivATI epoxy_glVertexStream3ivATI +#define glVertexStream3sATI epoxy_glVertexStream3sATI +#define glVertexStream3svATI epoxy_glVertexStream3svATI +#define glVertexStream4dATI epoxy_glVertexStream4dATI +#define glVertexStream4dvATI epoxy_glVertexStream4dvATI +#define glVertexStream4fATI epoxy_glVertexStream4fATI +#define glVertexStream4fvATI epoxy_glVertexStream4fvATI +#define glVertexStream4iATI epoxy_glVertexStream4iATI +#define glVertexStream4ivATI epoxy_glVertexStream4ivATI +#define glVertexStream4sATI epoxy_glVertexStream4sATI +#define glVertexStream4svATI epoxy_glVertexStream4svATI +#define glVertexWeightPointerEXT epoxy_glVertexWeightPointerEXT +#define glVertexWeightfEXT epoxy_glVertexWeightfEXT +#define glVertexWeightfvEXT epoxy_glVertexWeightfvEXT +#define glVertexWeighthNV epoxy_glVertexWeighthNV +#define glVertexWeighthvNV epoxy_glVertexWeighthvNV +#define glVideoCaptureNV epoxy_glVideoCaptureNV +#define glVideoCaptureStreamParameterdvNV epoxy_glVideoCaptureStreamParameterdvNV +#define glVideoCaptureStreamParameterfvNV epoxy_glVideoCaptureStreamParameterfvNV +#define glVideoCaptureStreamParameterivNV epoxy_glVideoCaptureStreamParameterivNV +#define glViewport epoxy_glViewport +#define glViewportArrayv epoxy_glViewportArrayv +#define glViewportArrayvNV epoxy_glViewportArrayvNV +#define glViewportIndexedf epoxy_glViewportIndexedf +#define glViewportIndexedfNV epoxy_glViewportIndexedfNV +#define glViewportIndexedfv epoxy_glViewportIndexedfv +#define glViewportIndexedfvNV epoxy_glViewportIndexedfvNV +#define glWaitSync epoxy_glWaitSync +#define glWaitSyncAPPLE epoxy_glWaitSyncAPPLE +#define glWeightPathsNV epoxy_glWeightPathsNV +#define glWeightPointerARB epoxy_glWeightPointerARB +#define glWeightPointerOES epoxy_glWeightPointerOES +#define glWeightbvARB epoxy_glWeightbvARB +#define glWeightdvARB epoxy_glWeightdvARB +#define glWeightfvARB epoxy_glWeightfvARB +#define glWeightivARB epoxy_glWeightivARB +#define glWeightsvARB epoxy_glWeightsvARB +#define glWeightubvARB epoxy_glWeightubvARB +#define glWeightuivARB epoxy_glWeightuivARB +#define glWeightusvARB epoxy_glWeightusvARB +#define glWindowPos2d epoxy_glWindowPos2d +#define glWindowPos2dARB epoxy_glWindowPos2dARB +#define glWindowPos2dMESA epoxy_glWindowPos2dMESA +#define glWindowPos2dv epoxy_glWindowPos2dv +#define glWindowPos2dvARB epoxy_glWindowPos2dvARB +#define glWindowPos2dvMESA epoxy_glWindowPos2dvMESA +#define glWindowPos2f epoxy_glWindowPos2f +#define glWindowPos2fARB epoxy_glWindowPos2fARB +#define glWindowPos2fMESA epoxy_glWindowPos2fMESA +#define glWindowPos2fv epoxy_glWindowPos2fv +#define glWindowPos2fvARB epoxy_glWindowPos2fvARB +#define glWindowPos2fvMESA epoxy_glWindowPos2fvMESA +#define glWindowPos2i epoxy_glWindowPos2i +#define glWindowPos2iARB epoxy_glWindowPos2iARB +#define glWindowPos2iMESA epoxy_glWindowPos2iMESA +#define glWindowPos2iv epoxy_glWindowPos2iv +#define glWindowPos2ivARB epoxy_glWindowPos2ivARB +#define glWindowPos2ivMESA epoxy_glWindowPos2ivMESA +#define glWindowPos2s epoxy_glWindowPos2s +#define glWindowPos2sARB epoxy_glWindowPos2sARB +#define glWindowPos2sMESA epoxy_glWindowPos2sMESA +#define glWindowPos2sv epoxy_glWindowPos2sv +#define glWindowPos2svARB epoxy_glWindowPos2svARB +#define glWindowPos2svMESA epoxy_glWindowPos2svMESA +#define glWindowPos3d epoxy_glWindowPos3d +#define glWindowPos3dARB epoxy_glWindowPos3dARB +#define glWindowPos3dMESA epoxy_glWindowPos3dMESA +#define glWindowPos3dv epoxy_glWindowPos3dv +#define glWindowPos3dvARB epoxy_glWindowPos3dvARB +#define glWindowPos3dvMESA epoxy_glWindowPos3dvMESA +#define glWindowPos3f epoxy_glWindowPos3f +#define glWindowPos3fARB epoxy_glWindowPos3fARB +#define glWindowPos3fMESA epoxy_glWindowPos3fMESA +#define glWindowPos3fv epoxy_glWindowPos3fv +#define glWindowPos3fvARB epoxy_glWindowPos3fvARB +#define glWindowPos3fvMESA epoxy_glWindowPos3fvMESA +#define glWindowPos3i epoxy_glWindowPos3i +#define glWindowPos3iARB epoxy_glWindowPos3iARB +#define glWindowPos3iMESA epoxy_glWindowPos3iMESA +#define glWindowPos3iv epoxy_glWindowPos3iv +#define glWindowPos3ivARB epoxy_glWindowPos3ivARB +#define glWindowPos3ivMESA epoxy_glWindowPos3ivMESA +#define glWindowPos3s epoxy_glWindowPos3s +#define glWindowPos3sARB epoxy_glWindowPos3sARB +#define glWindowPos3sMESA epoxy_glWindowPos3sMESA +#define glWindowPos3sv epoxy_glWindowPos3sv +#define glWindowPos3svARB epoxy_glWindowPos3svARB +#define glWindowPos3svMESA epoxy_glWindowPos3svMESA +#define glWindowPos4dMESA epoxy_glWindowPos4dMESA +#define glWindowPos4dvMESA epoxy_glWindowPos4dvMESA +#define glWindowPos4fMESA epoxy_glWindowPos4fMESA +#define glWindowPos4fvMESA epoxy_glWindowPos4fvMESA +#define glWindowPos4iMESA epoxy_glWindowPos4iMESA +#define glWindowPos4ivMESA epoxy_glWindowPos4ivMESA +#define glWindowPos4sMESA epoxy_glWindowPos4sMESA +#define glWindowPos4svMESA epoxy_glWindowPos4svMESA +#define glWriteMaskEXT epoxy_glWriteMaskEXT diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h new file mode 100644 index 0000000000..a5a13e5d60 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h @@ -0,0 +1,969 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +#include +#include +typedef XID GLXFBConfigID; +typedef struct __GLXFBConfigRec *GLXFBConfig; +typedef XID GLXContextID; +typedef struct __GLXcontextRec *GLXContext; +typedef XID GLXPixmap; +typedef XID GLXDrawable; +typedef XID GLXWindow; +typedef XID GLXPbuffer; +typedef void (APIENTRY *__GLXextFuncPtr)(void); +typedef XID GLXVideoCaptureDeviceNV; +typedef unsigned int GLXVideoDeviceNV; +typedef XID GLXVideoSourceSGIX; +typedef XID GLXFBConfigIDSGIX; +typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; +typedef XID GLXPbufferSGIX; +typedef struct { + int event_type; /* GLX_DAMAGED or GLX_SAVED */ + int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came for SendEvent request */ + Display *display; /* display the event was read from */ + GLXDrawable drawable; /* XID of Drawable */ + unsigned int buffer_mask; /* mask indicating which buffers are affected */ + unsigned int aux_buffer; /* which aux buffer was affected */ + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ +} GLXPbufferClobberEvent; +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + GLXDrawable drawable; /* drawable on which event was requested in event mask */ + int event_type; + int64_t ust; + int64_t msc; + int64_t sbc; +} GLXBufferSwapComplete; +typedef union __GLXEvent { + GLXPbufferClobberEvent glxpbufferclobber; + GLXBufferSwapComplete glxbufferswapcomplete; + long pad[24]; +} GLXEvent; +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + int extension; + int evtype; + GLXDrawable window; + Bool stereo_tree; +} GLXStereoNotifyEventEXT; +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came for SendEvent request */ + Display *display; /* display the event was read from */ + GLXDrawable drawable; /* i.d. of Drawable */ + int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */ + int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */ + unsigned int mask; /* mask indicating which buffers are affected*/ + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ +} GLXBufferClobberEventSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int networkId; +} GLXHyperpipeNetworkSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int channel; + unsigned int participationType; + int timeSlice; +} GLXHyperpipeConfigSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int srcXOrigin, srcYOrigin, srcWidth, srcHeight; + int destXOrigin, destYOrigin, destWidth, destHeight; +} GLXPipeRect; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int XOrigin, YOrigin, maxHeight, maxWidth; +} GLXPipeRectLimits; + +#define GLX_VERSION_1_0 1 +#define GLX_VERSION_1_1 1 +#define GLX_VERSION_1_2 1 +#define GLX_VERSION_1_3 1 +#define GLX_VERSION_1_4 1 + +#define GLX_3DFX_multisample 1 +#define GLX_AMD_gpu_association 1 +#define GLX_ARB_context_flush_control 1 +#define GLX_ARB_create_context 1 +#define GLX_ARB_create_context_profile 1 +#define GLX_ARB_create_context_robustness 1 +#define GLX_ARB_fbconfig_float 1 +#define GLX_ARB_framebuffer_sRGB 1 +#define GLX_ARB_get_proc_address 1 +#define GLX_ARB_multisample 1 +#define GLX_ARB_robustness_application_isolation 1 +#define GLX_ARB_robustness_share_group_isolation 1 +#define GLX_ARB_vertex_buffer_object 1 +#define GLX_EXT_buffer_age 1 +#define GLX_EXT_create_context_es2_profile 1 +#define GLX_EXT_create_context_es_profile 1 +#define GLX_EXT_fbconfig_packed_float 1 +#define GLX_EXT_framebuffer_sRGB 1 +#define GLX_EXT_import_context 1 +#define GLX_EXT_stereo_tree 1 +#define GLX_EXT_swap_control 1 +#define GLX_EXT_swap_control_tear 1 +#define GLX_EXT_texture_from_pixmap 1 +#define GLX_EXT_visual_info 1 +#define GLX_EXT_visual_rating 1 +#define GLX_INTEL_swap_event 1 +#define GLX_MESA_agp_offset 1 +#define GLX_MESA_copy_sub_buffer 1 +#define GLX_MESA_pixmap_colormap 1 +#define GLX_MESA_query_renderer 1 +#define GLX_MESA_release_buffers 1 +#define GLX_MESA_set_3dfx_mode 1 +#define GLX_NV_copy_buffer 1 +#define GLX_NV_copy_image 1 +#define GLX_NV_delay_before_swap 1 +#define GLX_NV_float_buffer 1 +#define GLX_NV_multisample_coverage 1 +#define GLX_NV_present_video 1 +#define GLX_NV_swap_group 1 +#define GLX_NV_video_capture 1 +#define GLX_NV_video_out 1 +#define GLX_OML_swap_method 1 +#define GLX_OML_sync_control 1 +#define GLX_SGIS_blended_overlay 1 +#define GLX_SGIS_multisample 1 +#define GLX_SGIS_shared_multisample 1 +#define GLX_SGIX_dmbuffer 1 +#define GLX_SGIX_fbconfig 1 +#define GLX_SGIX_hyperpipe 1 +#define GLX_SGIX_pbuffer 1 +#define GLX_SGIX_swap_barrier 1 +#define GLX_SGIX_swap_group 1 +#define GLX_SGIX_video_resize 1 +#define GLX_SGIX_video_source 1 +#define GLX_SGIX_visual_select_group 1 +#define GLX_SGI_cushion 1 +#define GLX_SGI_make_current_read 1 +#define GLX_SGI_swap_control 1 +#define GLX_SGI_video_sync 1 +#define GLX_SUN_get_transparent_index 1 + +#define GLX_EXTENSION_NAME "GLX" +#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define GLX_PbufferClobber 0 +#define GLX_STEREO_NOTIFY_EXT 0x00000000 +#define GLX_SYNC_FRAME_SGIX 0x00000000 +#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 +#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 +#define GLX_PIPE_RECT_SGIX 0x00000001 +#define GLX_RGBA_BIT 0x00000001 +#define GLX_RGBA_BIT_SGIX 0x00000001 +#define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001 +#define GLX_SYNC_SWAP_SGIX 0x00000001 +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_WINDOW_BIT 0x00000001 +#define GLX_WINDOW_BIT_SGIX 0x00000001 +#define GLX_COLOR_INDEX_BIT 0x00000002 +#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 +#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 +#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 +#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 +#define GLX_PIXMAP_BIT 0x00000002 +#define GLX_PIXMAP_BIT_SGIX 0x00000002 +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 +#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 +#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 +#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 +#define GLX_PBUFFER_BIT 0x00000004 +#define GLX_PBUFFER_BIT_SGIX 0x00000004 +#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 +#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 +#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 +#define GLX_AUX_BUFFERS_BIT 0x00000010 +#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 +#define GLX_DEPTH_BUFFER_BIT 0x00000020 +#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 +#define GLX_STENCIL_BUFFER_BIT 0x00000040 +#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 +#define GLX_ACCUM_BUFFER_BIT 0x00000080 +#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 +#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 +#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 +#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 +#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 +#define GLX_3DFX_WINDOW_MODE_MESA 0x1 +#define GLX_VENDOR 0x1 +#define GLX_GPU_VENDOR_AMD 0x1F00 +#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 +#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 +#define GLX_VERSION 0x2 +#define GLX_CONFIG_CAVEAT 0x20 +#define GLX_VISUAL_CAVEAT_EXT 0x20 +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define GLX_CONTEXT_FLAGS_ARB 0x2094 +#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#define GLX_FLOAT_COMPONENTS_NV 0x20B0 +#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 +#define GLX_COLOR_SAMPLES_NV 0x20B3 +#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 +#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 +#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 +#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 +#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 +#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 +#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA +#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB +#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC +#define GLX_DEVICE_ID_NV 0x20CD +#define GLX_UNIQUE_ID_NV 0x20CE +#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_Y_INVERTED_EXT 0x20D4 +#define GLX_TEXTURE_FORMAT_EXT 0x20D5 +#define GLX_TEXTURE_TARGET_EXT 0x20D6 +#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 +#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 +#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 +#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA +#define GLX_TEXTURE_1D_EXT 0x20DB +#define GLX_TEXTURE_2D_EXT 0x20DC +#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD +#define GLX_FRONT_EXT 0x20DE +#define GLX_FRONT_LEFT_EXT 0x20DE +#define GLX_FRONT_RIGHT_EXT 0x20DF +#define GLX_BACK_EXT 0x20E0 +#define GLX_BACK_LEFT_EXT 0x20E0 +#define GLX_BACK_RIGHT_EXT 0x20E1 +#define GLX_AUX0_EXT 0x20E2 +#define GLX_AUX1_EXT 0x20E3 +#define GLX_AUX2_EXT 0x20E4 +#define GLX_AUX3_EXT 0x20E5 +#define GLX_AUX4_EXT 0x20E6 +#define GLX_AUX5_EXT 0x20E7 +#define GLX_AUX6_EXT 0x20E8 +#define GLX_AUX7_EXT 0x20E9 +#define GLX_AUX8_EXT 0x20EA +#define GLX_AUX9_EXT 0x20EB +#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 +#define GLX_SWAP_INTERVAL_EXT 0x20F1 +#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 +#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 +#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 +#define GLX_STEREO_TREE_EXT 0x20F5 +#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define GLX_GPU_RAM_AMD 0x21A3 +#define GLX_GPU_CLOCK_AMD 0x21A4 +#define GLX_GPU_NUM_PIPES_AMD 0x21A5 +#define GLX_GPU_NUM_SIMD_AMD 0x21A6 +#define GLX_GPU_NUM_RB_AMD 0x21A7 +#define GLX_GPU_NUM_SPI_AMD 0x21A8 +#define GLX_X_VISUAL_TYPE 0x22 +#define GLX_X_VISUAL_TYPE_EXT 0x22 +#define GLX_TRANSPARENT_TYPE 0x23 +#define GLX_TRANSPARENT_TYPE_EXT 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE 0x24 +#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 +#define GLX_TRANSPARENT_RED_VALUE 0x25 +#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE 0x26 +#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE 0x27 +#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 +#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 +#define GLX_EXTENSIONS 0x3 +#define GLX_NONE 0x8000 +#define GLX_NONE_EXT 0x8000 +#define GLX_SLOW_CONFIG 0x8001 +#define GLX_SLOW_VISUAL_EXT 0x8001 +#define GLX_TRUE_COLOR 0x8002 +#define GLX_TRUE_COLOR_EXT 0x8002 +#define GLX_DIRECT_COLOR 0x8003 +#define GLX_DIRECT_COLOR_EXT 0x8003 +#define GLX_PSEUDO_COLOR 0x8004 +#define GLX_PSEUDO_COLOR_EXT 0x8004 +#define GLX_STATIC_COLOR 0x8005 +#define GLX_STATIC_COLOR_EXT 0x8005 +#define GLX_GRAY_SCALE 0x8006 +#define GLX_GRAY_SCALE_EXT 0x8006 +#define GLX_STATIC_GRAY 0x8007 +#define GLX_STATIC_GRAY_EXT 0x8007 +#define GLX_TRANSPARENT_RGB 0x8008 +#define GLX_TRANSPARENT_RGB_EXT 0x8008 +#define GLX_TRANSPARENT_INDEX 0x8009 +#define GLX_TRANSPARENT_INDEX_EXT 0x8009 +#define GLX_SHARE_CONTEXT_EXT 0x800A +#define GLX_VISUAL_ID 0x800B +#define GLX_VISUAL_ID_EXT 0x800B +#define GLX_SCREEN 0x800C +#define GLX_SCREEN_EXT 0x800C +#define GLX_NON_CONFORMANT_CONFIG 0x800D +#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D +#define GLX_DRAWABLE_TYPE 0x8010 +#define GLX_DRAWABLE_TYPE_SGIX 0x8010 +#define GLX_RENDER_TYPE 0x8011 +#define GLX_RENDER_TYPE_SGIX 0x8011 +#define GLX_X_RENDERABLE 0x8012 +#define GLX_X_RENDERABLE_SGIX 0x8012 +#define GLX_FBCONFIG_ID 0x8013 +#define GLX_FBCONFIG_ID_SGIX 0x8013 +#define GLX_RGBA_TYPE 0x8014 +#define GLX_RGBA_TYPE_SGIX 0x8014 +#define GLX_COLOR_INDEX_TYPE 0x8015 +#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 +#define GLX_MAX_PBUFFER_WIDTH 0x8016 +#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT 0x8017 +#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 +#define GLX_MAX_PBUFFER_PIXELS 0x8018 +#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 +#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 +#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A +#define GLX_PRESERVED_CONTENTS 0x801B +#define GLX_PRESERVED_CONTENTS_SGIX 0x801B +#define GLX_LARGEST_PBUFFER 0x801C +#define GLX_LARGEST_PBUFFER_SGIX 0x801C +#define GLX_WIDTH 0x801D +#define GLX_WIDTH_SGIX 0x801D +#define GLX_HEIGHT 0x801E +#define GLX_HEIGHT_SGIX 0x801E +#define GLX_EVENT_MASK 0x801F +#define GLX_EVENT_MASK_SGIX 0x801F +#define GLX_DAMAGED 0x8020 +#define GLX_DAMAGED_SGIX 0x8020 +#define GLX_SAVED 0x8021 +#define GLX_SAVED_SGIX 0x8021 +#define GLX_WINDOW 0x8022 +#define GLX_WINDOW_SGIX 0x8022 +#define GLX_PBUFFER 0x8023 +#define GLX_PBUFFER_SGIX 0x8023 +#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 +#define GLX_BLENDED_RGBA_SGIS 0x8025 +#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 +#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 +#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 +#define GLX_HYPERPIPE_ID_SGIX 0x8030 +#define GLX_PBUFFER_HEIGHT 0x8040 +#define GLX_PBUFFER_WIDTH 0x8041 +#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 +#define GLX_SAMPLES_3DFX 0x8051 +#define GLX_SWAP_METHOD_OML 0x8060 +#define GLX_SWAP_EXCHANGE_OML 0x8061 +#define GLX_SWAP_COPY_OML 0x8062 +#define GLX_SWAP_UNDEFINED_OML 0x8063 +#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 +#define GLX_COPY_COMPLETE_INTEL 0x8181 +#define GLX_FLIP_COMPLETE_INTEL 0x8182 +#define GLX_RENDERER_VENDOR_ID_MESA 0x8183 +#define GLX_RENDERER_DEVICE_ID_MESA 0x8184 +#define GLX_RENDERER_VERSION_MESA 0x8185 +#define GLX_RENDERER_ACCELERATED_MESA 0x8186 +#define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 +#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 +#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 +#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A +#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B +#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C +#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D +#define GLX_RENDERER_ID_MESA 0x818E +#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define GLX_DONT_CARE 0xFFFFFFFF +#define GLX_BAD_SCREEN 1 +#define GLX_BufferSwapComplete 1 +#define GLX_USE_GL 1 +#define GLX_BLUE_SIZE 10 +#define GLX_SAMPLE_BUFFERS 100000 +#define GLX_SAMPLE_BUFFERS_ARB 100000 +#define GLX_SAMPLE_BUFFERS_SGIS 100000 +#define GLX_COVERAGE_SAMPLES_NV 100001 +#define GLX_SAMPLES 100001 +#define GLX_SAMPLES_ARB 100001 +#define GLX_SAMPLES_SGIS 100001 +#define GLX_ALPHA_SIZE 11 +#define GLX_DEPTH_SIZE 12 +#define GLX_STENCIL_SIZE 13 +#define GLX_ACCUM_RED_SIZE 14 +#define GLX_ACCUM_GREEN_SIZE 15 +#define GLX_ACCUM_BLUE_SIZE 16 +#define GLX_ACCUM_ALPHA_SIZE 17 +#define __GLX_NUMBER_EVENTS 17 +#define GLX_BAD_ATTRIBUTE 2 +#define GLX_BUFFER_SIZE 2 +#define GLX_LEVEL 3 +#define GLX_NO_EXTENSION 3 +#define GLX_BAD_VISUAL 4 +#define GLX_RGBA 4 +#define GLX_BAD_CONTEXT 5 +#define GLX_DOUBLEBUFFER 5 +#define GLX_BAD_VALUE 6 +#define GLX_STEREO 6 +#define GLX_AUX_BUFFERS 7 +#define GLX_BAD_ENUM 7 +#define GLX_RED_SIZE 8 +#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 +#define GLX_GREEN_SIZE 9 +#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 +#define GLX_BAD_HYPERPIPE_SGIX 92 + +typedef int (GLAPIENTRY *PFNGLXBINDCHANNELTOWINDOWSGIXPROC)(Display * display, int screen, int channel, Window window); +typedef int (GLAPIENTRY *PFNGLXBINDHYPERPIPESGIXPROC)(Display * dpy, int hpId); +typedef Bool (GLAPIENTRY *PFNGLXBINDSWAPBARRIERNVPROC)(Display * dpy, GLuint group, GLuint barrier); +typedef void (GLAPIENTRY *PFNGLXBINDSWAPBARRIERSGIXPROC)(Display * dpy, GLXDrawable drawable, int barrier); +typedef void (GLAPIENTRY *PFNGLXBINDTEXIMAGEEXTPROC)(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEODEVICENVPROC)(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEOIMAGENVPROC)(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); +typedef void (GLAPIENTRY *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)(GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef int (GLAPIENTRY *PFNGLXCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int x, int y, int w, int h); +typedef int (GLAPIENTRY *PFNGLXCHANNELRECTSYNCSGIXPROC)(Display * display, int screen, int channel, GLenum synctype); +typedef GLXFBConfig * (GLAPIENTRY *PFNGLXCHOOSEFBCONFIGPROC)(Display * dpy, int screen, const int * attrib_list, int * nelements); +typedef GLXFBConfigSGIX * (GLAPIENTRY *PFNGLXCHOOSEFBCONFIGSGIXPROC)(Display * dpy, int screen, int * attrib_list, int * nelements); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXCHOOSEVISUALPROC)(Display * dpy, int screen, int * attribList); +typedef void (GLAPIENTRY *PFNGLXCOPYBUFFERSUBDATANVPROC)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLXCOPYCONTEXTPROC)(Display * dpy, GLXContext src, GLXContext dst, unsigned long mask); +typedef void (GLAPIENTRY *PFNGLXCOPYIMAGESUBDATANVPROC)(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLXCOPYSUBBUFFERMESAPROC)(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)(unsigned int id, GLXContext share_list); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(unsigned int id, GLXContext share_context, const int * attribList); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTPROC)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbufferSGIX (GLAPIENTRY *PFNGLXCREATEGLXPBUFFERSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPMESAPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATENEWCONTEXTPROC)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbuffer (GLAPIENTRY *PFNGLXCREATEPBUFFERPROC)(Display * dpy, GLXFBConfig config, const int * attrib_list); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEPIXMAPPROC)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); +typedef GLXWindow (GLAPIENTRY *PFNGLXCREATEWINDOWPROC)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); +typedef void (GLAPIENTRY *PFNGLXCUSHIONSGIPROC)(Display * dpy, Window window, float cushion); +typedef Bool (GLAPIENTRY *PFNGLXDELAYBEFORESWAPNVPROC)(Display * dpy, GLXDrawable drawable, GLfloat seconds); +typedef Bool (GLAPIENTRY *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)(GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXDESTROYCONTEXTPROC)(Display * dpy, GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbufferSGIX pbuf); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)(Display * dpy, GLXVideoSourceSGIX glxvideosource); +typedef int (GLAPIENTRY *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId); +typedef void (GLAPIENTRY *PFNGLXDESTROYPBUFFERPROC)(Display * dpy, GLXPbuffer pbuf); +typedef void (GLAPIENTRY *PFNGLXDESTROYPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); +typedef void (GLAPIENTRY *PFNGLXDESTROYWINDOWPROC)(Display * dpy, GLXWindow win); +typedef GLXVideoCaptureDeviceNV * (GLAPIENTRY *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)(Display * dpy, int screen, int * nelements); +typedef unsigned int * (GLAPIENTRY *PFNGLXENUMERATEVIDEODEVICESNVPROC)(Display * dpy, int screen, int * nelements); +typedef void (GLAPIENTRY *PFNGLXFREECONTEXTEXTPROC)(Display * dpy, GLXContext context); +typedef unsigned int (GLAPIENTRY *PFNGLXGETAGPOFFSETMESAPROC)(const void * pointer); +typedef const char * (GLAPIENTRY *PFNGLXGETCLIENTSTRINGPROC)(Display * dpy, int name); +typedef int (GLAPIENTRY *PFNGLXGETCONFIGPROC)(Display * dpy, XVisualInfo * visual, int attrib, int * value); +typedef unsigned int (GLAPIENTRY *PFNGLXGETCONTEXTGPUIDAMDPROC)(GLXContext ctx); +typedef GLXContextID (GLAPIENTRY *PFNGLXGETCONTEXTIDEXTPROC)(const GLXContext context); +typedef GLXContext (GLAPIENTRY *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); +typedef GLXContext (GLAPIENTRY *PFNGLXGETCURRENTCONTEXTPROC)(void); +typedef Display * (GLAPIENTRY *PFNGLXGETCURRENTDISPLAYPROC)(void); +typedef Display * (GLAPIENTRY *PFNGLXGETCURRENTDISPLAYEXTPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTDRAWABLEPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTREADDRAWABLEPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTREADDRAWABLESGIPROC)(void); +typedef int (GLAPIENTRY *PFNGLXGETFBCONFIGATTRIBPROC)(Display * dpy, GLXFBConfig config, int attribute, int * value); +typedef int (GLAPIENTRY *PFNGLXGETFBCONFIGATTRIBSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); +typedef GLXFBConfigSGIX (GLAPIENTRY *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)(Display * dpy, XVisualInfo * vis); +typedef GLXFBConfig * (GLAPIENTRY *PFNGLXGETFBCONFIGSPROC)(Display * dpy, int screen, int * nelements); +typedef unsigned int (GLAPIENTRY *PFNGLXGETGPUIDSAMDPROC)(unsigned int maxCount, unsigned int * ids); +typedef int (GLAPIENTRY *PFNGLXGETGPUINFOAMDPROC)(unsigned int id, int property, GLenum dataType, unsigned int size, void * data); +typedef Bool (GLAPIENTRY *PFNGLXGETMSCRATEOMLPROC)(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); +typedef __GLXextFuncPtr (GLAPIENTRY *PFNGLXGETPROCADDRESSPROC)(const GLubyte * procName); +typedef __GLXextFuncPtr (GLAPIENTRY *PFNGLXGETPROCADDRESSARBPROC)(const GLubyte * procName); +typedef void (GLAPIENTRY *PFNGLXGETSELECTEDEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); +typedef void (GLAPIENTRY *PFNGLXGETSELECTEDEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long * mask); +typedef Bool (GLAPIENTRY *PFNGLXGETSYNCVALUESOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef Status (GLAPIENTRY *PFNGLXGETTRANSPARENTINDEXSUNPROC)(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); +typedef int (GLAPIENTRY *PFNGLXGETVIDEODEVICENVPROC)(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); +typedef int (GLAPIENTRY *PFNGLXGETVIDEOINFONVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); +typedef int (GLAPIENTRY *PFNGLXGETVIDEOSYNCSGIPROC)(unsigned int * count); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXGETVISUALFROMFBCONFIGPROC)(Display * dpy, GLXFBConfig config); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config); +typedef int (GLAPIENTRY *PFNGLXHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList); +typedef int (GLAPIENTRY *PFNGLXHYPERPIPECONFIGSGIXPROC)(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); +typedef GLXContext (GLAPIENTRY *PFNGLXIMPORTCONTEXTEXTPROC)(Display * dpy, GLXContextID contextID); +typedef Bool (GLAPIENTRY *PFNGLXISDIRECTPROC)(Display * dpy, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXJOINSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint group); +typedef void (GLAPIENTRY *PFNGLXJOINSWAPGROUPSGIXPROC)(Display * dpy, GLXDrawable drawable, GLXDrawable member); +typedef void (GLAPIENTRY *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); +typedef Bool (GLAPIENTRY *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECONTEXTCURRENTPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECURRENTPROC)(Display * dpy, GLXDrawable drawable, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECURRENTREADSGIPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef int (GLAPIENTRY *PFNGLXQUERYCHANNELDELTASSGIXPROC)(Display * display, int screen, int channel, int * x, int * y, int * w, int * h); +typedef int (GLAPIENTRY *PFNGLXQUERYCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); +typedef int (GLAPIENTRY *PFNGLXQUERYCONTEXTPROC)(Display * dpy, GLXContext ctx, int attribute, int * value); +typedef int (GLAPIENTRY *PFNGLXQUERYCONTEXTINFOEXTPROC)(Display * dpy, GLXContext context, int attribute, int * value); +typedef Bool (GLAPIENTRY *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC)(int attribute, unsigned int * value); +typedef const char * (GLAPIENTRY *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC)(int attribute); +typedef void (GLAPIENTRY *PFNGLXQUERYDRAWABLEPROC)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); +typedef Bool (GLAPIENTRY *PFNGLXQUERYEXTENSIONPROC)(Display * dpy, int * errorb, int * event); +typedef const char * (GLAPIENTRY *PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display * dpy, int screen); +typedef Bool (GLAPIENTRY *PFNGLXQUERYFRAMECOUNTNVPROC)(Display * dpy, int screen, GLuint * count); +typedef int (GLAPIENTRY *PFNGLXQUERYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); +typedef int (GLAPIENTRY *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); +typedef int (GLAPIENTRY *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); +typedef GLXHyperpipeConfigSGIX * (GLAPIENTRY *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId, int * npipes); +typedef GLXHyperpipeNetworkSGIX * (GLAPIENTRY *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)(Display * dpy, int * npipes); +typedef Bool (GLAPIENTRY *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)(Display * dpy, int screen, int * max); +typedef Bool (GLAPIENTRY *PFNGLXQUERYMAXSWAPGROUPSNVPROC)(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); +typedef Bool (GLAPIENTRY *PFNGLXQUERYRENDERERINTEGERMESAPROC)(Display * dpy, int screen, int renderer, int attribute, unsigned int * value); +typedef const char * (GLAPIENTRY *PFNGLXQUERYRENDERERSTRINGMESAPROC)(Display * dpy, int screen, int renderer, int attribute); +typedef const char * (GLAPIENTRY *PFNGLXQUERYSERVERSTRINGPROC)(Display * dpy, int screen, int name); +typedef Bool (GLAPIENTRY *PFNGLXQUERYSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); +typedef Bool (GLAPIENTRY *PFNGLXQUERYVERSIONPROC)(Display * dpy, int * maj, int * min); +typedef int (GLAPIENTRY *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); +typedef Bool (GLAPIENTRY *PFNGLXRELEASEBUFFERSMESAPROC)(Display * dpy, GLXDrawable drawable); +typedef void (GLAPIENTRY *PFNGLXRELEASETEXIMAGEEXTPROC)(Display * dpy, GLXDrawable drawable, int buffer); +typedef void (GLAPIENTRY *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); +typedef int (GLAPIENTRY *PFNGLXRELEASEVIDEODEVICENVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); +typedef int (GLAPIENTRY *PFNGLXRELEASEVIDEOIMAGENVPROC)(Display * dpy, GLXPbuffer pbuf); +typedef Bool (GLAPIENTRY *PFNGLXRESETFRAMECOUNTNVPROC)(Display * dpy, int screen); +typedef void (GLAPIENTRY *PFNGLXSELECTEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long event_mask); +typedef void (GLAPIENTRY *PFNGLXSELECTEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long mask); +typedef int (GLAPIENTRY *PFNGLXSENDPBUFFERTOVIDEONVPROC)(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); +typedef Bool (GLAPIENTRY *PFNGLXSET3DFXMODEMESAPROC)(int mode); +typedef void (GLAPIENTRY *PFNGLXSWAPBUFFERSPROC)(Display * dpy, GLXDrawable drawable); +typedef int64_t (GLAPIENTRY *PFNGLXSWAPBUFFERSMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); +typedef void (GLAPIENTRY *PFNGLXSWAPINTERVALEXTPROC)(Display * dpy, GLXDrawable drawable, int interval); +typedef int (GLAPIENTRY *PFNGLXSWAPINTERVALSGIPROC)(int interval); +typedef void (GLAPIENTRY *PFNGLXUSEXFONTPROC)(Font font, int first, int count, int list); +typedef Bool (GLAPIENTRY *PFNGLXWAITFORMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef Bool (GLAPIENTRY *PFNGLXWAITFORSBCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef void (GLAPIENTRY *PFNGLXWAITGLPROC)(void); +typedef int (GLAPIENTRY *PFNGLXWAITVIDEOSYNCSGIPROC)(int divisor, int remainder, unsigned int * count); +typedef void (GLAPIENTRY *PFNGLXWAITXPROC)(void); +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindChannelToWindowSGIX)(Display * display, int screen, int channel, Window window); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindHyperpipeSGIX)(Display * dpy, int hpId); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXBindSwapBarrierNV)(Display * dpy, GLuint group, GLuint barrier); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBindSwapBarrierSGIX)(Display * dpy, GLXDrawable drawable, int barrier); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBindTexImageEXT)(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoCaptureDeviceNV)(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoDeviceNV)(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoImageNV)(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBlitContextFramebufferAMD)(GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXChannelRectSGIX)(Display * display, int screen, int channel, int x, int y, int w, int h); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXChannelRectSyncSGIX)(Display * display, int screen, int channel, GLenum synctype); + +extern EPOXY_IMPORTEXPORT GLXFBConfig * (EPOXY_CALLSPEC *epoxy_glXChooseFBConfig)(Display * dpy, int screen, const int * attrib_list, int * nelements); + +extern EPOXY_IMPORTEXPORT GLXFBConfigSGIX * (EPOXY_CALLSPEC *epoxy_glXChooseFBConfigSGIX)(Display * dpy, int screen, int * attrib_list, int * nelements); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXChooseVisual)(Display * dpy, int screen, int * attribList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyBufferSubDataNV)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyContext)(Display * dpy, GLXContext src, GLXContext dst, unsigned long mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyImageSubDataNV)(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopySubBufferMESA)(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateAssociatedContextAMD)(unsigned int id, GLXContext share_list); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateAssociatedContextAttribsAMD)(unsigned int id, GLXContext share_context, const int * attribList); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContext)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContextAttribsARB)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContextWithConfigSGIX)(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXPbufferSGIX (EPOXY_CALLSPEC *epoxy_glXCreateGLXPbufferSGIX)(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmap)(Display * dpy, XVisualInfo * visual, Pixmap pixmap); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmapMESA)(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmapWithConfigSGIX)(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateNewContext)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXPbuffer (EPOXY_CALLSPEC *epoxy_glXCreatePbuffer)(Display * dpy, GLXFBConfig config, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreatePixmap)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXWindow (EPOXY_CALLSPEC *epoxy_glXCreateWindow)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCushionSGI)(Display * dpy, Window window, float cushion); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXDelayBeforeSwapNV)(Display * dpy, GLXDrawable drawable, GLfloat seconds); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXDeleteAssociatedContextAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyContext)(Display * dpy, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXPbufferSGIX)(Display * dpy, GLXPbufferSGIX pbuf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXPixmap)(Display * dpy, GLXPixmap pixmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXVideoSourceSGIX)(Display * dpy, GLXVideoSourceSGIX glxvideosource); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXDestroyHyperpipeConfigSGIX)(Display * dpy, int hpId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyPbuffer)(Display * dpy, GLXPbuffer pbuf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyPixmap)(Display * dpy, GLXPixmap pixmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyWindow)(Display * dpy, GLXWindow win); + +extern EPOXY_IMPORTEXPORT GLXVideoCaptureDeviceNV * (EPOXY_CALLSPEC *epoxy_glXEnumerateVideoCaptureDevicesNV)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT unsigned int * (EPOXY_CALLSPEC *epoxy_glXEnumerateVideoDevicesNV)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXFreeContextEXT)(Display * dpy, GLXContext context); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetAGPOffsetMESA)(const void * pointer); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXGetClientString)(Display * dpy, int name); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetConfig)(Display * dpy, XVisualInfo * visual, int attrib, int * value); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetContextGPUIDAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT GLXContextID (EPOXY_CALLSPEC *epoxy_glXGetContextIDEXT)(const GLXContext context); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXGetCurrentAssociatedContextAMD)(void); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT Display * (EPOXY_CALLSPEC *epoxy_glXGetCurrentDisplay)(void); + +extern EPOXY_IMPORTEXPORT Display * (EPOXY_CALLSPEC *epoxy_glXGetCurrentDisplayEXT)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentDrawable)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentReadDrawable)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentReadDrawableSGI)(void); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetFBConfigAttrib)(Display * dpy, GLXFBConfig config, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetFBConfigAttribSGIX)(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT GLXFBConfigSGIX (EPOXY_CALLSPEC *epoxy_glXGetFBConfigFromVisualSGIX)(Display * dpy, XVisualInfo * vis); + +extern EPOXY_IMPORTEXPORT GLXFBConfig * (EPOXY_CALLSPEC *epoxy_glXGetFBConfigs)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetGPUIDsAMD)(unsigned int maxCount, unsigned int * ids); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetGPUInfoAMD)(unsigned int id, int property, GLenum dataType, unsigned int size, void * data); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXGetMscRateOML)(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); + +extern EPOXY_IMPORTEXPORT __GLXextFuncPtr (EPOXY_CALLSPEC *epoxy_glXGetProcAddress)(const GLubyte * procName); + +extern EPOXY_IMPORTEXPORT __GLXextFuncPtr (EPOXY_CALLSPEC *epoxy_glXGetProcAddressARB)(const GLubyte * procName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXGetSelectedEvent)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXGetSelectedEventSGIX)(Display * dpy, GLXDrawable drawable, unsigned long * mask); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXGetSyncValuesOML)(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT Status (EPOXY_CALLSPEC *epoxy_glXGetTransparentIndexSUN)(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoDeviceNV)(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoInfoNV)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoSyncSGI)(unsigned int * count); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXGetVisualFromFBConfig)(Display * dpy, GLXFBConfig config); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXGetVisualFromFBConfigSGIX)(Display * dpy, GLXFBConfigSGIX config); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXHyperpipeAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * attribList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXHyperpipeConfigSGIX)(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXImportContextEXT)(Display * dpy, GLXContextID contextID); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXIsDirect)(Display * dpy, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXJoinSwapGroupNV)(Display * dpy, GLXDrawable drawable, GLuint group); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXJoinSwapGroupSGIX)(Display * dpy, GLXDrawable drawable, GLXDrawable member); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXLockVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeAssociatedContextCurrentAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeContextCurrent)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeCurrent)(Display * dpy, GLXDrawable drawable, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeCurrentReadSGI)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXNamedCopyBufferSubDataNV)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryChannelDeltasSGIX)(Display * display, int screen, int channel, int * x, int * y, int * w, int * h); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryChannelRectSGIX)(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryContext)(Display * dpy, GLXContext ctx, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryContextInfoEXT)(Display * dpy, GLXContext context, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryCurrentRendererIntegerMESA)(int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryCurrentRendererStringMESA)(int attribute); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXQueryDrawable)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryExtension)(Display * dpy, int * errorb, int * event); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryExtensionsString)(Display * dpy, int screen); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryFrameCountNV)(Display * dpy, int screen, GLuint * count); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryGLXPbufferSGIX)(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeBestAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); + +extern EPOXY_IMPORTEXPORT GLXHyperpipeConfigSGIX * (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeConfigSGIX)(Display * dpy, int hpId, int * npipes); + +extern EPOXY_IMPORTEXPORT GLXHyperpipeNetworkSGIX * (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeNetworkSGIX)(Display * dpy, int * npipes); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryMaxSwapBarriersSGIX)(Display * dpy, int screen, int * max); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryMaxSwapGroupsNV)(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryRendererIntegerMESA)(Display * dpy, int screen, int renderer, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryRendererStringMESA)(Display * dpy, int screen, int renderer, int attribute); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryServerString)(Display * dpy, int screen, int name); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQuerySwapGroupNV)(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryVersion)(Display * dpy, int * maj, int * min); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXReleaseBuffersMESA)(Display * dpy, GLXDrawable drawable); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXReleaseTexImageEXT)(Display * dpy, GLXDrawable drawable, int buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXReleaseVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXReleaseVideoDeviceNV)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXReleaseVideoImageNV)(Display * dpy, GLXPbuffer pbuf); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXResetFrameCountNV)(Display * dpy, int screen); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSelectEvent)(Display * dpy, GLXDrawable draw, unsigned long event_mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSelectEventSGIX)(Display * dpy, GLXDrawable drawable, unsigned long mask); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXSendPbufferToVideoNV)(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXSet3DfxModeMESA)(int mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSwapBuffers)(Display * dpy, GLXDrawable drawable); + +extern EPOXY_IMPORTEXPORT int64_t (EPOXY_CALLSPEC *epoxy_glXSwapBuffersMscOML)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSwapIntervalEXT)(Display * dpy, GLXDrawable drawable, int interval); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXSwapIntervalSGI)(int interval); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXUseXFont)(Font font, int first, int count, int list); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXWaitForMscOML)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXWaitForSbcOML)(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXWaitGL)(void); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXWaitVideoSyncSGI)(int divisor, int remainder, unsigned int * count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXWaitX)(void); + +#define glXBindChannelToWindowSGIX epoxy_glXBindChannelToWindowSGIX +#define glXBindHyperpipeSGIX epoxy_glXBindHyperpipeSGIX +#define glXBindSwapBarrierNV epoxy_glXBindSwapBarrierNV +#define glXBindSwapBarrierSGIX epoxy_glXBindSwapBarrierSGIX +#define glXBindTexImageEXT epoxy_glXBindTexImageEXT +#define glXBindVideoCaptureDeviceNV epoxy_glXBindVideoCaptureDeviceNV +#define glXBindVideoDeviceNV epoxy_glXBindVideoDeviceNV +#define glXBindVideoImageNV epoxy_glXBindVideoImageNV +#define glXBlitContextFramebufferAMD epoxy_glXBlitContextFramebufferAMD +#define glXChannelRectSGIX epoxy_glXChannelRectSGIX +#define glXChannelRectSyncSGIX epoxy_glXChannelRectSyncSGIX +#define glXChooseFBConfig epoxy_glXChooseFBConfig +#define glXChooseFBConfigSGIX epoxy_glXChooseFBConfigSGIX +#define glXChooseVisual epoxy_glXChooseVisual +#define glXCopyBufferSubDataNV epoxy_glXCopyBufferSubDataNV +#define glXCopyContext epoxy_glXCopyContext +#define glXCopyImageSubDataNV epoxy_glXCopyImageSubDataNV +#define glXCopySubBufferMESA epoxy_glXCopySubBufferMESA +#define glXCreateAssociatedContextAMD epoxy_glXCreateAssociatedContextAMD +#define glXCreateAssociatedContextAttribsAMD epoxy_glXCreateAssociatedContextAttribsAMD +#define glXCreateContext epoxy_glXCreateContext +#define glXCreateContextAttribsARB epoxy_glXCreateContextAttribsARB +#define glXCreateContextWithConfigSGIX epoxy_glXCreateContextWithConfigSGIX +#define glXCreateGLXPbufferSGIX epoxy_glXCreateGLXPbufferSGIX +#define glXCreateGLXPixmap epoxy_glXCreateGLXPixmap +#define glXCreateGLXPixmapMESA epoxy_glXCreateGLXPixmapMESA +#define glXCreateGLXPixmapWithConfigSGIX epoxy_glXCreateGLXPixmapWithConfigSGIX +#define glXCreateNewContext epoxy_glXCreateNewContext +#define glXCreatePbuffer epoxy_glXCreatePbuffer +#define glXCreatePixmap epoxy_glXCreatePixmap +#define glXCreateWindow epoxy_glXCreateWindow +#define glXCushionSGI epoxy_glXCushionSGI +#define glXDelayBeforeSwapNV epoxy_glXDelayBeforeSwapNV +#define glXDeleteAssociatedContextAMD epoxy_glXDeleteAssociatedContextAMD +#define glXDestroyContext epoxy_glXDestroyContext +#define glXDestroyGLXPbufferSGIX epoxy_glXDestroyGLXPbufferSGIX +#define glXDestroyGLXPixmap epoxy_glXDestroyGLXPixmap +#define glXDestroyGLXVideoSourceSGIX epoxy_glXDestroyGLXVideoSourceSGIX +#define glXDestroyHyperpipeConfigSGIX epoxy_glXDestroyHyperpipeConfigSGIX +#define glXDestroyPbuffer epoxy_glXDestroyPbuffer +#define glXDestroyPixmap epoxy_glXDestroyPixmap +#define glXDestroyWindow epoxy_glXDestroyWindow +#define glXEnumerateVideoCaptureDevicesNV epoxy_glXEnumerateVideoCaptureDevicesNV +#define glXEnumerateVideoDevicesNV epoxy_glXEnumerateVideoDevicesNV +#define glXFreeContextEXT epoxy_glXFreeContextEXT +#define glXGetAGPOffsetMESA epoxy_glXGetAGPOffsetMESA +#define glXGetClientString epoxy_glXGetClientString +#define glXGetConfig epoxy_glXGetConfig +#define glXGetContextGPUIDAMD epoxy_glXGetContextGPUIDAMD +#define glXGetContextIDEXT epoxy_glXGetContextIDEXT +#define glXGetCurrentAssociatedContextAMD epoxy_glXGetCurrentAssociatedContextAMD +#define glXGetCurrentContext epoxy_glXGetCurrentContext +#define glXGetCurrentDisplay epoxy_glXGetCurrentDisplay +#define glXGetCurrentDisplayEXT epoxy_glXGetCurrentDisplayEXT +#define glXGetCurrentDrawable epoxy_glXGetCurrentDrawable +#define glXGetCurrentReadDrawable epoxy_glXGetCurrentReadDrawable +#define glXGetCurrentReadDrawableSGI epoxy_glXGetCurrentReadDrawableSGI +#define glXGetFBConfigAttrib epoxy_glXGetFBConfigAttrib +#define glXGetFBConfigAttribSGIX epoxy_glXGetFBConfigAttribSGIX +#define glXGetFBConfigFromVisualSGIX epoxy_glXGetFBConfigFromVisualSGIX +#define glXGetFBConfigs epoxy_glXGetFBConfigs +#define glXGetGPUIDsAMD epoxy_glXGetGPUIDsAMD +#define glXGetGPUInfoAMD epoxy_glXGetGPUInfoAMD +#define glXGetMscRateOML epoxy_glXGetMscRateOML +#define glXGetProcAddress epoxy_glXGetProcAddress +#define glXGetProcAddressARB epoxy_glXGetProcAddressARB +#define glXGetSelectedEvent epoxy_glXGetSelectedEvent +#define glXGetSelectedEventSGIX epoxy_glXGetSelectedEventSGIX +#define glXGetSyncValuesOML epoxy_glXGetSyncValuesOML +#define glXGetTransparentIndexSUN epoxy_glXGetTransparentIndexSUN +#define glXGetVideoDeviceNV epoxy_glXGetVideoDeviceNV +#define glXGetVideoInfoNV epoxy_glXGetVideoInfoNV +#define glXGetVideoSyncSGI epoxy_glXGetVideoSyncSGI +#define glXGetVisualFromFBConfig epoxy_glXGetVisualFromFBConfig +#define glXGetVisualFromFBConfigSGIX epoxy_glXGetVisualFromFBConfigSGIX +#define glXHyperpipeAttribSGIX epoxy_glXHyperpipeAttribSGIX +#define glXHyperpipeConfigSGIX epoxy_glXHyperpipeConfigSGIX +#define glXImportContextEXT epoxy_glXImportContextEXT +#define glXIsDirect epoxy_glXIsDirect +#define glXJoinSwapGroupNV epoxy_glXJoinSwapGroupNV +#define glXJoinSwapGroupSGIX epoxy_glXJoinSwapGroupSGIX +#define glXLockVideoCaptureDeviceNV epoxy_glXLockVideoCaptureDeviceNV +#define glXMakeAssociatedContextCurrentAMD epoxy_glXMakeAssociatedContextCurrentAMD +#define glXMakeContextCurrent epoxy_glXMakeContextCurrent +#define glXMakeCurrent epoxy_glXMakeCurrent +#define glXMakeCurrentReadSGI epoxy_glXMakeCurrentReadSGI +#define glXNamedCopyBufferSubDataNV epoxy_glXNamedCopyBufferSubDataNV +#define glXQueryChannelDeltasSGIX epoxy_glXQueryChannelDeltasSGIX +#define glXQueryChannelRectSGIX epoxy_glXQueryChannelRectSGIX +#define glXQueryContext epoxy_glXQueryContext +#define glXQueryContextInfoEXT epoxy_glXQueryContextInfoEXT +#define glXQueryCurrentRendererIntegerMESA epoxy_glXQueryCurrentRendererIntegerMESA +#define glXQueryCurrentRendererStringMESA epoxy_glXQueryCurrentRendererStringMESA +#define glXQueryDrawable epoxy_glXQueryDrawable +#define glXQueryExtension epoxy_glXQueryExtension +#define glXQueryExtensionsString epoxy_glXQueryExtensionsString +#define glXQueryFrameCountNV epoxy_glXQueryFrameCountNV +#define glXQueryGLXPbufferSGIX epoxy_glXQueryGLXPbufferSGIX +#define glXQueryHyperpipeAttribSGIX epoxy_glXQueryHyperpipeAttribSGIX +#define glXQueryHyperpipeBestAttribSGIX epoxy_glXQueryHyperpipeBestAttribSGIX +#define glXQueryHyperpipeConfigSGIX epoxy_glXQueryHyperpipeConfigSGIX +#define glXQueryHyperpipeNetworkSGIX epoxy_glXQueryHyperpipeNetworkSGIX +#define glXQueryMaxSwapBarriersSGIX epoxy_glXQueryMaxSwapBarriersSGIX +#define glXQueryMaxSwapGroupsNV epoxy_glXQueryMaxSwapGroupsNV +#define glXQueryRendererIntegerMESA epoxy_glXQueryRendererIntegerMESA +#define glXQueryRendererStringMESA epoxy_glXQueryRendererStringMESA +#define glXQueryServerString epoxy_glXQueryServerString +#define glXQuerySwapGroupNV epoxy_glXQuerySwapGroupNV +#define glXQueryVersion epoxy_glXQueryVersion +#define glXQueryVideoCaptureDeviceNV epoxy_glXQueryVideoCaptureDeviceNV +#define glXReleaseBuffersMESA epoxy_glXReleaseBuffersMESA +#define glXReleaseTexImageEXT epoxy_glXReleaseTexImageEXT +#define glXReleaseVideoCaptureDeviceNV epoxy_glXReleaseVideoCaptureDeviceNV +#define glXReleaseVideoDeviceNV epoxy_glXReleaseVideoDeviceNV +#define glXReleaseVideoImageNV epoxy_glXReleaseVideoImageNV +#define glXResetFrameCountNV epoxy_glXResetFrameCountNV +#define glXSelectEvent epoxy_glXSelectEvent +#define glXSelectEventSGIX epoxy_glXSelectEventSGIX +#define glXSendPbufferToVideoNV epoxy_glXSendPbufferToVideoNV +#define glXSet3DfxModeMESA epoxy_glXSet3DfxModeMESA +#define glXSwapBuffers epoxy_glXSwapBuffers +#define glXSwapBuffersMscOML epoxy_glXSwapBuffersMscOML +#define glXSwapIntervalEXT epoxy_glXSwapIntervalEXT +#define glXSwapIntervalSGI epoxy_glXSwapIntervalSGI +#define glXUseXFont epoxy_glXUseXFont +#define glXWaitForMscOML epoxy_glXWaitForMscOML +#define glXWaitForSbcOML epoxy_glXWaitForSbcOML +#define glXWaitGL epoxy_glXWaitGL +#define glXWaitVideoSyncSGI epoxy_glXWaitVideoSyncSGI +#define glXWaitX epoxy_glXWaitX diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h new file mode 100644 index 0000000000..fe53334946 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h @@ -0,0 +1,896 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +}; +DECLARE_HANDLE(HPBUFFERARB); +DECLARE_HANDLE(HPBUFFEREXT); +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); +DECLARE_HANDLE(HPVIDEODEV); +DECLARE_HANDLE(HPGPUNV); +DECLARE_HANDLE(HGPUNV); +DECLARE_HANDLE(HVIDEOINPUTDEVICENV); +typedef struct _GPU_DEVICE GPU_DEVICE; +typedef struct _GPU_DEVICE *PGPU_DEVICE; + +#define WGL_VERSION_1_0 1 + +#define WGL_3DFX_multisample 1 +#define WGL_3DL_stereo_control 1 +#define WGL_AMD_gpu_association 1 +#define WGL_ARB_buffer_region 1 +#define WGL_ARB_context_flush_control 1 +#define WGL_ARB_create_context 1 +#define WGL_ARB_create_context_profile 1 +#define WGL_ARB_create_context_robustness 1 +#define WGL_ARB_extensions_string 1 +#define WGL_ARB_framebuffer_sRGB 1 +#define WGL_ARB_make_current_read 1 +#define WGL_ARB_multisample 1 +#define WGL_ARB_pbuffer 1 +#define WGL_ARB_pixel_format 1 +#define WGL_ARB_pixel_format_float 1 +#define WGL_ARB_render_texture 1 +#define WGL_ARB_robustness_application_isolation 1 +#define WGL_ARB_robustness_share_group_isolation 1 +#define WGL_ATI_pixel_format_float 1 +#define WGL_EXT_create_context_es2_profile 1 +#define WGL_EXT_create_context_es_profile 1 +#define WGL_EXT_depth_float 1 +#define WGL_EXT_display_color_table 1 +#define WGL_EXT_extensions_string 1 +#define WGL_EXT_framebuffer_sRGB 1 +#define WGL_EXT_make_current_read 1 +#define WGL_EXT_multisample 1 +#define WGL_EXT_pbuffer 1 +#define WGL_EXT_pixel_format 1 +#define WGL_EXT_pixel_format_packed_float 1 +#define WGL_EXT_swap_control 1 +#define WGL_EXT_swap_control_tear 1 +#define WGL_I3D_digital_video_control 1 +#define WGL_I3D_gamma 1 +#define WGL_I3D_genlock 1 +#define WGL_I3D_image_buffer 1 +#define WGL_I3D_swap_frame_lock 1 +#define WGL_I3D_swap_frame_usage 1 +#define WGL_NV_DX_interop 1 +#define WGL_NV_DX_interop2 1 +#define WGL_NV_copy_image 1 +#define WGL_NV_delay_before_swap 1 +#define WGL_NV_float_buffer 1 +#define WGL_NV_gpu_affinity 1 +#define WGL_NV_multisample_coverage 1 +#define WGL_NV_present_video 1 +#define WGL_NV_render_depth_texture 1 +#define WGL_NV_render_texture_rectangle 1 +#define WGL_NV_swap_group 1 +#define WGL_NV_vertex_array_range 1 +#define WGL_NV_video_capture 1 +#define WGL_NV_video_output 1 +#define WGL_OML_sync_control 1 + +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define WGL_FONT_LINES 0 +#define WGL_ACCESS_READ_ONLY_NV 0x00000000 +#define WGL_ACCESS_READ_WRITE_NV 0x00000001 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 +#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 +#define WGL_GPU_VENDOR_AMD 0x1F00 +#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 +#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +#define WGL_TYPE_COLORINDEX_EXT 0x202C +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_DEPTH_FLOAT_EXT 0x2040 +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_COVERAGE_SAMPLES_NV 0x2042 +#define WGL_SAMPLES_ARB 0x2042 +#define WGL_SAMPLES_EXT 0x2042 +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 +#define WGL_COLOR_SAMPLES_NV 0x20B9 +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC +#define WGL_UNIQUE_ID_NV 0x20CE +#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define WGL_GPU_RAM_AMD 0x21A3 +#define WGL_GPU_CLOCK_AMD 0x21A4 +#define WGL_GPU_NUM_PIPES_AMD 0x21A5 +#define WGL_GPU_NUM_SIMD_AMD 0x21A6 +#define WGL_GPU_NUM_RB_AMD 0x21A7 +#define WGL_GPU_NUM_SPI_AMD 0x21A8 +#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_FONT_POLYGONS 1 + +typedef void * (GLAPIENTRY *PFNWGLALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +typedef BOOL (GLAPIENTRY *PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); +typedef BOOL (GLAPIENTRY *PFNWGLBEGINFRAMETRACKINGI3DPROC)(void); +typedef GLboolean (GLAPIENTRY *PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL (GLAPIENTRY *PFNWGLBINDSWAPBARRIERNVPROC)(GLuint group, GLuint barrier); +typedef BOOL (GLAPIENTRY *PFNWGLBINDTEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEODEVICENVPROC)(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEOIMAGENVPROC)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef VOID (GLAPIENTRY *PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef BOOL (GLAPIENTRY *PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); +typedef BOOL (GLAPIENTRY *PFNWGLCHOOSEPIXELFORMATEXTPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); +typedef BOOL (GLAPIENTRY *PFNWGLCOPYCONTEXTPROC)(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask); +typedef BOOL (GLAPIENTRY *PFNWGLCOPYIMAGESUBDATANVPROC)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef HDC (GLAPIENTRY *PFNWGLCREATEAFFINITYDCNVPROC)(const HGPUNV * phGpuList); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)(UINT id); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(UINT id, HGLRC hShareContext, const int * attribList); +typedef HANDLE (GLAPIENTRY *PFNWGLCREATEBUFFERREGIONARBPROC)(HDC hDC, int iLayerPlane, UINT uType); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATECONTEXTPROC)(HDC hDc); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int * attribList); +typedef GLboolean (GLAPIENTRY *PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef LPVOID (GLAPIENTRY *PFNWGLCREATEIMAGEBUFFERI3DPROC)(HDC hDC, DWORD dwSize, UINT uFlags); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATELAYERCONTEXTPROC)(HDC hDc, int level); +typedef HPBUFFERARB (GLAPIENTRY *PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); +typedef HPBUFFEREXT (GLAPIENTRY *PFNWGLCREATEPBUFFEREXTPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLDXCLOSEDEVICENVPROC)(HANDLE hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); +typedef BOOL (GLAPIENTRY *PFNWGLDXOBJECTACCESSNVPROC)(HANDLE hObject, GLenum access); +typedef HANDLE (GLAPIENTRY *PFNWGLDXOPENDEVICENVPROC)(void * dxDevice); +typedef HANDLE (GLAPIENTRY *PFNWGLDXREGISTEROBJECTNVPROC)(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); +typedef BOOL (GLAPIENTRY *PFNWGLDXSETRESOURCESHAREHANDLENVPROC)(void * dxObject, HANDLE shareHandle); +typedef BOOL (GLAPIENTRY *PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); +typedef BOOL (GLAPIENTRY *PFNWGLDXUNREGISTEROBJECTNVPROC)(HANDLE hDevice, HANDLE hObject); +typedef BOOL (GLAPIENTRY *PFNWGLDELAYBEFORESWAPNVPROC)(HDC hDC, GLfloat seconds); +typedef BOOL (GLAPIENTRY *PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)(HGLRC hglrc); +typedef VOID (GLAPIENTRY *PFNWGLDELETEBUFFERREGIONARBPROC)(HANDLE hRegion); +typedef BOOL (GLAPIENTRY *PFNWGLDELETECONTEXTPROC)(HGLRC oldContext); +typedef BOOL (GLAPIENTRY *PFNWGLDELETEDCNVPROC)(HDC hdc); +typedef BOOL (GLAPIENTRY *PFNWGLDESCRIBELAYERPLANEPROC)(HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd); +typedef VOID (GLAPIENTRY *PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYIMAGEBUFFERI3DPROC)(HDC hDC, LPVOID pAddress); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLDISABLEFRAMELOCKI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLDISABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLENABLEFRAMELOCKI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLENABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLENDFRAMETRACKINGI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUDEVICESNVPROC)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUSNVPROC)(UINT iGpuIndex, HGPUNV * phGpu); +typedef UINT (GLAPIENTRY *PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)(HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList); +typedef int (GLAPIENTRY *PFNWGLENUMERATEVIDEODEVICESNVPROC)(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); +typedef void (GLAPIENTRY *PFNWGLFREEMEMORYNVPROC)(void * pointer); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT uRate); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT uDelay); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT uEdge); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEI3DPROC)(HDC hDC, UINT uSource); +typedef UINT (GLAPIENTRY *PFNWGLGETCONTEXTGPUIDAMDPROC)(HGLRC hglrc); +typedef HGLRC (GLAPIENTRY *PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); +typedef HGLRC (GLAPIENTRY *PFNWGLGETCURRENTCONTEXTPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTDCPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTREADDCARBPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTREADDCEXTPROC)(void); +typedef PROC (GLAPIENTRY *PFNWGLGETDEFAULTPROCADDRESSPROC)(LPCSTR lpszProc); +typedef BOOL (GLAPIENTRY *PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); +typedef const char * (GLAPIENTRY *PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); +typedef const char * (GLAPIENTRY *PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLGETFRAMEUSAGEI3DPROC)(float * pUsage); +typedef UINT (GLAPIENTRY *PFNWGLGETGPUIDSAMDPROC)(UINT maxCount, UINT * ids); +typedef INT (GLAPIENTRY *PFNWGLGETGPUINFOAMDPROC)(UINT id, int property, GLenum dataType, UINT size, void * data); +typedef BOOL (GLAPIENTRY *PFNWGLGETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); +typedef BOOL (GLAPIENTRY *PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT * uRate); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT * uDelay); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT * uEdge); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEI3DPROC)(HDC hDC, UINT * uSource); +typedef int (GLAPIENTRY *PFNWGLGETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); +typedef BOOL (GLAPIENTRY *PFNWGLGETMSCRATEOMLPROC)(HDC hdc, INT32 * numerator, INT32 * denominator); +typedef HDC (GLAPIENTRY *PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer); +typedef HDC (GLAPIENTRY *PFNWGLGETPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); +typedef PROC (GLAPIENTRY *PFNWGLGETPROCADDRESSPROC)(LPCSTR lpszProc); +typedef int (GLAPIENTRY *PFNWGLGETSWAPINTERVALEXTPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLGETSYNCVALUESOMLPROC)(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); +typedef BOOL (GLAPIENTRY *PFNWGLGETVIDEODEVICENVPROC)(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); +typedef BOOL (GLAPIENTRY *PFNWGLGETVIDEOINFONVPROC)(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); +typedef BOOL (GLAPIENTRY *PFNWGLISENABLEDFRAMELOCKI3DPROC)(BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLISENABLEDGENLOCKI3DPROC)(HDC hDC, BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLJOINSWAPGROUPNVPROC)(HDC hDC, GLuint group); +typedef GLboolean (GLAPIENTRY *PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)(const GLushort * table, GLuint length); +typedef BOOL (GLAPIENTRY *PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECONTEXTCURRENTARBPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECONTEXTCURRENTEXTPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECURRENTPROC)(HDC hDc, HGLRC newContext); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYCURRENTCONTEXTNVPROC)(int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMECOUNTNVPROC)(HDC hDC, GLuint * count); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMELOCKMASTERI3DPROC)(BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMETRACKINGI3DPROC)(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYMAXSWAPGROUPSNVPROC)(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYSWAPGROUPNVPROC)(HDC hDC, GLuint * group, GLuint * barrier); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLREALIZELAYERPALETTEPROC)(HDC hdc, int iLayerPlane, BOOL bRealize); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const LPVOID * pAddress, UINT count); +typedef int (GLAPIENTRY *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC); +typedef int (GLAPIENTRY *PFNWGLRELEASEPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer, HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASETEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEODEVICENVPROC)(HPVIDEODEV hVideoDevice); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEOIMAGENVPROC)(HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLRESETFRAMECOUNTNVPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLRESTOREBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +typedef BOOL (GLAPIENTRY *PFNWGLSAVEBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height); +typedef BOOL (GLAPIENTRY *PFNWGLSENDPBUFFERTOVIDEONVPROC)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); +typedef BOOL (GLAPIENTRY *PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLSETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); +typedef BOOL (GLAPIENTRY *PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); +typedef int (GLAPIENTRY *PFNWGLSETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); +typedef BOOL (GLAPIENTRY *PFNWGLSETPBUFFERATTRIBARBPROC)(HPBUFFERARB hPbuffer, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLSETSTEREOEMITTERSTATE3DLPROC)(HDC hDC, UINT uState); +typedef BOOL (GLAPIENTRY *PFNWGLSHARELISTSPROC)(HGLRC hrcSrvShare, HGLRC hrcSrvSource); +typedef INT64 (GLAPIENTRY *PFNWGLSWAPBUFFERSMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (GLAPIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval); +typedef BOOL (GLAPIENTRY *PFNWGLSWAPLAYERBUFFERSPROC)(HDC hdc, UINT fuFlags); +typedef INT64 (GLAPIENTRY *PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTBITMAPSAPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTBITMAPSWPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESAPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESWPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLWAITFORMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); +typedef BOOL (GLAPIENTRY *PFNWGLWAITFORSBCOMLPROC)(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_wglAllocateMemoryNV)(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglAssociateImageBufferEventsI3D)(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBeginFrameTrackingI3D)(void); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglBindDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindSwapBarrierNV)(GLuint group, GLuint barrier); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindTexImageARB)(HPBUFFERARB hPbuffer, int iBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoCaptureDeviceNV)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoDeviceNV)(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoImageNV)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglBlitContextFramebufferAMD)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglChoosePixelFormatARB)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglChoosePixelFormatEXT)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglCopyContext)(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglCopyImageSubDataNV)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglCreateAffinityDCNV)(const HGPUNV * phGpuList); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateAssociatedContextAMD)(UINT id); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateAssociatedContextAttribsAMD)(UINT id, HGLRC hShareContext, const int * attribList); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglCreateBufferRegionARB)(HDC hDC, int iLayerPlane, UINT uType); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateContext)(HDC hDc); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateContextAttribsARB)(HDC hDC, HGLRC hShareContext, const int * attribList); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglCreateDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT LPVOID (EPOXY_CALLSPEC *epoxy_wglCreateImageBufferI3D)(HDC hDC, DWORD dwSize, UINT uFlags); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateLayerContext)(HDC hDc, int level); + +extern EPOXY_IMPORTEXPORT HPBUFFERARB (EPOXY_CALLSPEC *epoxy_wglCreatePbufferARB)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT HPBUFFEREXT (EPOXY_CALLSPEC *epoxy_wglCreatePbufferEXT)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXCloseDeviceNV)(HANDLE hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXLockObjectsNV)(HANDLE hDevice, GLint count, HANDLE * hObjects); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXObjectAccessNV)(HANDLE hObject, GLenum access); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglDXOpenDeviceNV)(void * dxDevice); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglDXRegisterObjectNV)(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXSetResourceShareHandleNV)(void * dxObject, HANDLE shareHandle); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXUnlockObjectsNV)(HANDLE hDevice, GLint count, HANDLE * hObjects); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXUnregisterObjectNV)(HANDLE hDevice, HANDLE hObject); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDelayBeforeSwapNV)(HDC hDC, GLfloat seconds); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteAssociatedContextAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglDeleteBufferRegionARB)(HANDLE hRegion); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteContext)(HGLRC oldContext); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteDCNV)(HDC hdc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDescribeLayerPlane)(HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglDestroyDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyImageBufferI3D)(HDC hDC, LPVOID pAddress); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyPbufferARB)(HPBUFFERARB hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyPbufferEXT)(HPBUFFEREXT hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDisableFrameLockI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDisableGenlockI3D)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnableFrameLockI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnableGenlockI3D)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEndFrameTrackingI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpuDevicesNV)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpusFromAffinityDCNV)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpusNV)(UINT iGpuIndex, HGPUNV * phGpu); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglEnumerateVideoCaptureDevicesNV)(HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglEnumerateVideoDevicesNV)(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_wglFreeMemoryNV)(void * pointer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSampleRateI3D)(HDC hDC, UINT uRate); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceDelayI3D)(HDC hDC, UINT uDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceEdgeI3D)(HDC hDC, UINT uEdge); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceI3D)(HDC hDC, UINT uSource); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglGetContextGPUIDAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglGetCurrentAssociatedContextAMD)(void); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentDC)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentReadDCARB)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentReadDCEXT)(void); + +extern EPOXY_IMPORTEXPORT PROC (EPOXY_CALLSPEC *epoxy_wglGetDefaultProcAddress)(LPCSTR lpszProc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetDigitalVideoParametersI3D)(HDC hDC, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_wglGetExtensionsStringARB)(HDC hdc); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_wglGetExtensionsStringEXT)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetFrameUsageI3D)(float * pUsage); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglGetGPUIDsAMD)(UINT maxCount, UINT * ids); + +extern EPOXY_IMPORTEXPORT INT (EPOXY_CALLSPEC *epoxy_wglGetGPUInfoAMD)(UINT id, int property, GLenum dataType, UINT size, void * data); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGammaTableI3D)(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGammaTableParametersI3D)(HDC hDC, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSampleRateI3D)(HDC hDC, UINT * uRate); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceDelayI3D)(HDC hDC, UINT * uDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceEdgeI3D)(HDC hDC, UINT * uEdge); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceI3D)(HDC hDC, UINT * uSource); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglGetLayerPaletteEntries)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetMscRateOML)(HDC hdc, INT32 * numerator, INT32 * denominator); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetPbufferDCARB)(HPBUFFERARB hPbuffer); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetPbufferDCEXT)(HPBUFFEREXT hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribfvARB)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribfvEXT)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribivARB)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribivEXT)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); + +extern EPOXY_IMPORTEXPORT PROC (EPOXY_CALLSPEC *epoxy_wglGetProcAddress)(LPCSTR lpszProc); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglGetSwapIntervalEXT)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetSyncValuesOML)(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetVideoDeviceNV)(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetVideoInfoNV)(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglIsEnabledFrameLockI3D)(BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglIsEnabledGenlockI3D)(HDC hDC, BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglJoinSwapGroupNV)(HDC hDC, GLuint group); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglLoadDisplayColorTableEXT)(const GLushort * table, GLuint length); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglLockVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeAssociatedContextCurrentAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeContextCurrentARB)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeContextCurrentEXT)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeCurrent)(HDC hDc, HGLRC newContext); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryCurrentContextNV)(int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameCountNV)(HDC hDC, GLuint * count); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameLockMasterI3D)(BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameTrackingI3D)(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryGenlockMaxSourceDelayI3D)(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryMaxSwapGroupsNV)(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryPbufferARB)(HPBUFFERARB hPbuffer, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryPbufferEXT)(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQuerySwapGroupNV)(HDC hDC, GLuint * group, GLuint * barrier); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglRealizeLayerPalette)(HDC hdc, int iLayerPlane, BOOL bRealize); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseImageBufferEventsI3D)(HDC hDC, const LPVOID * pAddress, UINT count); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglReleasePbufferDCARB)(HPBUFFERARB hPbuffer, HDC hDC); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglReleasePbufferDCEXT)(HPBUFFEREXT hPbuffer, HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseTexImageARB)(HPBUFFERARB hPbuffer, int iBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoDeviceNV)(HPVIDEODEV hVideoDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoImageNV)(HPBUFFERARB hPbuffer, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglResetFrameCountNV)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglRestoreBufferRegionARB)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSaveBufferRegionARB)(HANDLE hRegion, int x, int y, int width, int height); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSendPbufferToVideoNV)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetDigitalVideoParametersI3D)(HDC hDC, int iAttribute, const int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetGammaTableI3D)(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetGammaTableParametersI3D)(HDC hDC, int iAttribute, const int * piValue); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglSetLayerPaletteEntries)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetPbufferAttribARB)(HPBUFFERARB hPbuffer, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetStereoEmitterState3DL)(HDC hDC, UINT uState); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglShareLists)(HGLRC hrcSrvShare, HGLRC hrcSrvSource); + +extern EPOXY_IMPORTEXPORT INT64 (EPOXY_CALLSPEC *epoxy_wglSwapBuffersMscOML)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSwapIntervalEXT)(int interval); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSwapLayerBuffers)(HDC hdc, UINT fuFlags); + +extern EPOXY_IMPORTEXPORT INT64 (EPOXY_CALLSPEC *epoxy_wglSwapLayerBuffersMscOML)(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontBitmapsA)(HDC hDC, DWORD first, DWORD count, DWORD listBase); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontBitmapsW)(HDC hDC, DWORD first, DWORD count, DWORD listBase); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlines)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlinesA)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlinesW)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglWaitForMscOML)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglWaitForSbcOML)(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); + +#define wglAllocateMemoryNV epoxy_wglAllocateMemoryNV +#define wglAssociateImageBufferEventsI3D epoxy_wglAssociateImageBufferEventsI3D +#define wglBeginFrameTrackingI3D epoxy_wglBeginFrameTrackingI3D +#define wglBindDisplayColorTableEXT epoxy_wglBindDisplayColorTableEXT +#define wglBindSwapBarrierNV epoxy_wglBindSwapBarrierNV +#define wglBindTexImageARB epoxy_wglBindTexImageARB +#define wglBindVideoCaptureDeviceNV epoxy_wglBindVideoCaptureDeviceNV +#define wglBindVideoDeviceNV epoxy_wglBindVideoDeviceNV +#define wglBindVideoImageNV epoxy_wglBindVideoImageNV +#define wglBlitContextFramebufferAMD epoxy_wglBlitContextFramebufferAMD +#define wglChoosePixelFormatARB epoxy_wglChoosePixelFormatARB +#define wglChoosePixelFormatEXT epoxy_wglChoosePixelFormatEXT +#define wglCopyContext epoxy_wglCopyContext +#define wglCopyImageSubDataNV epoxy_wglCopyImageSubDataNV +#define wglCreateAffinityDCNV epoxy_wglCreateAffinityDCNV +#define wglCreateAssociatedContextAMD epoxy_wglCreateAssociatedContextAMD +#define wglCreateAssociatedContextAttribsAMD epoxy_wglCreateAssociatedContextAttribsAMD +#define wglCreateBufferRegionARB epoxy_wglCreateBufferRegionARB +#define wglCreateContext epoxy_wglCreateContext +#define wglCreateContextAttribsARB epoxy_wglCreateContextAttribsARB +#define wglCreateDisplayColorTableEXT epoxy_wglCreateDisplayColorTableEXT +#define wglCreateImageBufferI3D epoxy_wglCreateImageBufferI3D +#define wglCreateLayerContext epoxy_wglCreateLayerContext +#define wglCreatePbufferARB epoxy_wglCreatePbufferARB +#define wglCreatePbufferEXT epoxy_wglCreatePbufferEXT +#define wglDXCloseDeviceNV epoxy_wglDXCloseDeviceNV +#define wglDXLockObjectsNV epoxy_wglDXLockObjectsNV +#define wglDXObjectAccessNV epoxy_wglDXObjectAccessNV +#define wglDXOpenDeviceNV epoxy_wglDXOpenDeviceNV +#define wglDXRegisterObjectNV epoxy_wglDXRegisterObjectNV +#define wglDXSetResourceShareHandleNV epoxy_wglDXSetResourceShareHandleNV +#define wglDXUnlockObjectsNV epoxy_wglDXUnlockObjectsNV +#define wglDXUnregisterObjectNV epoxy_wglDXUnregisterObjectNV +#define wglDelayBeforeSwapNV epoxy_wglDelayBeforeSwapNV +#define wglDeleteAssociatedContextAMD epoxy_wglDeleteAssociatedContextAMD +#define wglDeleteBufferRegionARB epoxy_wglDeleteBufferRegionARB +#define wglDeleteContext epoxy_wglDeleteContext +#define wglDeleteDCNV epoxy_wglDeleteDCNV +#define wglDescribeLayerPlane epoxy_wglDescribeLayerPlane +#define wglDestroyDisplayColorTableEXT epoxy_wglDestroyDisplayColorTableEXT +#define wglDestroyImageBufferI3D epoxy_wglDestroyImageBufferI3D +#define wglDestroyPbufferARB epoxy_wglDestroyPbufferARB +#define wglDestroyPbufferEXT epoxy_wglDestroyPbufferEXT +#define wglDisableFrameLockI3D epoxy_wglDisableFrameLockI3D +#define wglDisableGenlockI3D epoxy_wglDisableGenlockI3D +#define wglEnableFrameLockI3D epoxy_wglEnableFrameLockI3D +#define wglEnableGenlockI3D epoxy_wglEnableGenlockI3D +#define wglEndFrameTrackingI3D epoxy_wglEndFrameTrackingI3D +#define wglEnumGpuDevicesNV epoxy_wglEnumGpuDevicesNV +#define wglEnumGpusFromAffinityDCNV epoxy_wglEnumGpusFromAffinityDCNV +#define wglEnumGpusNV epoxy_wglEnumGpusNV +#define wglEnumerateVideoCaptureDevicesNV epoxy_wglEnumerateVideoCaptureDevicesNV +#define wglEnumerateVideoDevicesNV epoxy_wglEnumerateVideoDevicesNV +#define wglFreeMemoryNV epoxy_wglFreeMemoryNV +#define wglGenlockSampleRateI3D epoxy_wglGenlockSampleRateI3D +#define wglGenlockSourceDelayI3D epoxy_wglGenlockSourceDelayI3D +#define wglGenlockSourceEdgeI3D epoxy_wglGenlockSourceEdgeI3D +#define wglGenlockSourceI3D epoxy_wglGenlockSourceI3D +#define wglGetContextGPUIDAMD epoxy_wglGetContextGPUIDAMD +#define wglGetCurrentAssociatedContextAMD epoxy_wglGetCurrentAssociatedContextAMD +#define wglGetCurrentContext epoxy_wglGetCurrentContext +#define wglGetCurrentDC epoxy_wglGetCurrentDC +#define wglGetCurrentReadDCARB epoxy_wglGetCurrentReadDCARB +#define wglGetCurrentReadDCEXT epoxy_wglGetCurrentReadDCEXT +#define wglGetDefaultProcAddress epoxy_wglGetDefaultProcAddress +#define wglGetDigitalVideoParametersI3D epoxy_wglGetDigitalVideoParametersI3D +#define wglGetExtensionsStringARB epoxy_wglGetExtensionsStringARB +#define wglGetExtensionsStringEXT epoxy_wglGetExtensionsStringEXT +#define wglGetFrameUsageI3D epoxy_wglGetFrameUsageI3D +#define wglGetGPUIDsAMD epoxy_wglGetGPUIDsAMD +#define wglGetGPUInfoAMD epoxy_wglGetGPUInfoAMD +#define wglGetGammaTableI3D epoxy_wglGetGammaTableI3D +#define wglGetGammaTableParametersI3D epoxy_wglGetGammaTableParametersI3D +#define wglGetGenlockSampleRateI3D epoxy_wglGetGenlockSampleRateI3D +#define wglGetGenlockSourceDelayI3D epoxy_wglGetGenlockSourceDelayI3D +#define wglGetGenlockSourceEdgeI3D epoxy_wglGetGenlockSourceEdgeI3D +#define wglGetGenlockSourceI3D epoxy_wglGetGenlockSourceI3D +#define wglGetLayerPaletteEntries epoxy_wglGetLayerPaletteEntries +#define wglGetMscRateOML epoxy_wglGetMscRateOML +#define wglGetPbufferDCARB epoxy_wglGetPbufferDCARB +#define wglGetPbufferDCEXT epoxy_wglGetPbufferDCEXT +#define wglGetPixelFormatAttribfvARB epoxy_wglGetPixelFormatAttribfvARB +#define wglGetPixelFormatAttribfvEXT epoxy_wglGetPixelFormatAttribfvEXT +#define wglGetPixelFormatAttribivARB epoxy_wglGetPixelFormatAttribivARB +#define wglGetPixelFormatAttribivEXT epoxy_wglGetPixelFormatAttribivEXT +#define wglGetProcAddress epoxy_wglGetProcAddress +#define wglGetSwapIntervalEXT epoxy_wglGetSwapIntervalEXT +#define wglGetSyncValuesOML epoxy_wglGetSyncValuesOML +#define wglGetVideoDeviceNV epoxy_wglGetVideoDeviceNV +#define wglGetVideoInfoNV epoxy_wglGetVideoInfoNV +#define wglIsEnabledFrameLockI3D epoxy_wglIsEnabledFrameLockI3D +#define wglIsEnabledGenlockI3D epoxy_wglIsEnabledGenlockI3D +#define wglJoinSwapGroupNV epoxy_wglJoinSwapGroupNV +#define wglLoadDisplayColorTableEXT epoxy_wglLoadDisplayColorTableEXT +#define wglLockVideoCaptureDeviceNV epoxy_wglLockVideoCaptureDeviceNV +#define wglMakeAssociatedContextCurrentAMD epoxy_wglMakeAssociatedContextCurrentAMD +#define wglMakeContextCurrentARB epoxy_wglMakeContextCurrentARB +#define wglMakeContextCurrentEXT epoxy_wglMakeContextCurrentEXT +#define wglMakeCurrent epoxy_wglMakeCurrent +#define wglQueryCurrentContextNV epoxy_wglQueryCurrentContextNV +#define wglQueryFrameCountNV epoxy_wglQueryFrameCountNV +#define wglQueryFrameLockMasterI3D epoxy_wglQueryFrameLockMasterI3D +#define wglQueryFrameTrackingI3D epoxy_wglQueryFrameTrackingI3D +#define wglQueryGenlockMaxSourceDelayI3D epoxy_wglQueryGenlockMaxSourceDelayI3D +#define wglQueryMaxSwapGroupsNV epoxy_wglQueryMaxSwapGroupsNV +#define wglQueryPbufferARB epoxy_wglQueryPbufferARB +#define wglQueryPbufferEXT epoxy_wglQueryPbufferEXT +#define wglQuerySwapGroupNV epoxy_wglQuerySwapGroupNV +#define wglQueryVideoCaptureDeviceNV epoxy_wglQueryVideoCaptureDeviceNV +#define wglRealizeLayerPalette epoxy_wglRealizeLayerPalette +#define wglReleaseImageBufferEventsI3D epoxy_wglReleaseImageBufferEventsI3D +#define wglReleasePbufferDCARB epoxy_wglReleasePbufferDCARB +#define wglReleasePbufferDCEXT epoxy_wglReleasePbufferDCEXT +#define wglReleaseTexImageARB epoxy_wglReleaseTexImageARB +#define wglReleaseVideoCaptureDeviceNV epoxy_wglReleaseVideoCaptureDeviceNV +#define wglReleaseVideoDeviceNV epoxy_wglReleaseVideoDeviceNV +#define wglReleaseVideoImageNV epoxy_wglReleaseVideoImageNV +#define wglResetFrameCountNV epoxy_wglResetFrameCountNV +#define wglRestoreBufferRegionARB epoxy_wglRestoreBufferRegionARB +#define wglSaveBufferRegionARB epoxy_wglSaveBufferRegionARB +#define wglSendPbufferToVideoNV epoxy_wglSendPbufferToVideoNV +#define wglSetDigitalVideoParametersI3D epoxy_wglSetDigitalVideoParametersI3D +#define wglSetGammaTableI3D epoxy_wglSetGammaTableI3D +#define wglSetGammaTableParametersI3D epoxy_wglSetGammaTableParametersI3D +#define wglSetLayerPaletteEntries epoxy_wglSetLayerPaletteEntries +#define wglSetPbufferAttribARB epoxy_wglSetPbufferAttribARB +#define wglSetStereoEmitterState3DL epoxy_wglSetStereoEmitterState3DL +#define wglShareLists epoxy_wglShareLists +#define wglSwapBuffersMscOML epoxy_wglSwapBuffersMscOML +#define wglSwapIntervalEXT epoxy_wglSwapIntervalEXT +#define wglSwapLayerBuffers epoxy_wglSwapLayerBuffers +#define wglSwapLayerBuffersMscOML epoxy_wglSwapLayerBuffersMscOML +#define wglUseFontBitmapsA epoxy_wglUseFontBitmapsA +#define wglUseFontBitmapsW epoxy_wglUseFontBitmapsW +#define wglUseFontOutlines epoxy_wglUseFontOutlines +#define wglUseFontOutlinesA epoxy_wglUseFontOutlinesA +#define wglUseFontOutlinesW epoxy_wglUseFontOutlinesW +#define wglWaitForMscOML epoxy_wglWaitForMscOML +#define wglWaitForSbcOML epoxy_wglWaitForSbcOML diff --git a/Engine/lib/epoxy/include/epoxy/gl.h b/Engine/lib/epoxy/include/epoxy/gl.h new file mode 100644 index 0000000000..21d9911906 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/gl.h @@ -0,0 +1,103 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file gl.h + * + * Provides an implementation of a GL dispatch layer using either + * global function pointers or a hidden vtable. + */ + +#ifndef EPOXY_GL_H +#define EPOXY_GL_H + +#if defined(__glplatform_h_) || defined(__gl_h_) || defined(__glext_h_) \ + || defined(__gl2platform_h_) || defined(__gl2_h_) || defined(__gl2ext_h_) \ + || defined(__gl3platform_h_) || defined(__gl3_h_) || defined(__gl31_h_) +# error "epoxy/gl.h" must be included before (or in place of) the desktop OpenGL / OpenGL ES headers. +#else +# define __glplatform_h_ +# define __gl_h_ +# define __glext_h_ +# define __gl2platform_h +# define __gl2_h_ 1 +# define __gl2ext_h_ 1 +# define __gl3platform_h_ +# define __gl3_h_ 1 +# define __gl31_h_ 1 +#endif + +#include + +#ifndef _WIN32 +# define APIENTRY +# define GLAPIENTRY +# ifndef EPOXY_IMPORTEXPORT +# define EPOXY_IMPORTEXPORT +# endif +# define EPOXY_CALLSPEC +# define GLAPI +#else +# ifndef APIENTRY +# define APIENTRY __stdcall +# endif +# ifndef GLAPIENTRY +# define GLAPIENTRY APIENTRY +# endif +# ifndef EPOXY_CALLSPEC +# define EPOXY_CALLSPEC __stdcall +# endif +# ifndef EPOXY_IMPORTEXPORT +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __declspec(dllimport) +# else +# define EPOXY_IMPORTEXPORT +# endif +# endif +# ifndef GLAPI +# define GLAPI extern +# endif +#endif /* _WIN32 */ + +#ifndef APIENTRYP +# define APIENTRYP APIENTRY * +#endif +#ifndef GLAPIENTRYP +# define GLAPIENTRYP GLAPIENTRY * +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/gl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_gl_extension(const char *extension); +EPOXY_IMPORTEXPORT bool epoxy_is_desktop_gl(void); +EPOXY_IMPORTEXPORT int epoxy_gl_version(void); +EPOXY_IMPORTEXPORT bool epoxy_current_context_is_egl(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_GL_H */ diff --git a/Engine/lib/epoxy/include/epoxy/glx.h b/Engine/lib/epoxy/include/epoxy/glx.h new file mode 100644 index 0000000000..b87fce0dad --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/glx.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file glx.h + * + * Provides an implementation of a GLX dispatch layer using global + * function pointers. + */ + +#ifndef EPOXY_GLX_H +#define EPOXY_GLX_H + +#if defined(GLX_H) || defined(__glxext_h_) +# error epoxy/glx.h must be included before (or in place of) GL/glx.h +#else +# define GLX_H +# define __glxext_h_ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/glx_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_glx_extension(Display *dpy, int screen, const char *extension); +EPOXY_IMPORTEXPORT int epoxy_glx_version(Display *dpy, int screen); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_GLX_H */ diff --git a/Engine/lib/epoxy/include/epoxy/wgl.h b/Engine/lib/epoxy/include/epoxy/wgl.h new file mode 100644 index 0000000000..e8185699d6 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/wgl.h @@ -0,0 +1,71 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file wgl.h + * + * Provides an implementation of a WGL dispatch layer using a hidden + * vtable. + */ + +#ifndef EPOXY_WGL_H +#define EPOXY_WGL_H + +#if defined(__wglxext_h_) +# error epoxy/wgl.h must be included before (or in place of) wgl.h +#else +# define __wglxext_h_ +#endif + +// Prevent Duplicate Definition Warnings +#if defined(APIENTRY) && !defined(WINAPI) +# undef APIENTRY +#endif + +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +#endif + +#include +#undef wglUseFontBitmaps +#undef wglUseFontOutlines + +#ifdef UNICODE +# define wglUseFontBitmaps wglUseFontBitmapsW +#else +# define wglUseFontBitmaps wglUseFontBitmapsA +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/wgl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_wgl_extension(HDC hdc, const char *extension); +EPOXY_IMPORTEXPORT void epoxy_handle_external_wglMakeCurrent(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_WGL_H */ diff --git a/Engine/lib/epoxy/src/dispatch_common.c b/Engine/lib/epoxy/src/dispatch_common.c new file mode 100644 index 0000000000..22ccde453f --- /dev/null +++ b/Engine/lib/epoxy/src/dispatch_common.c @@ -0,0 +1,642 @@ +/* + * Copyright © 2013-2014 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** + * @file dispatch_common.c + * + * Implements common code shared by the generated GL/EGL/GLX dispatch code. + * + * A collection of some important specs on getting GL function pointers. + * + * From the linux GL ABI (http://www.opengl.org/registry/ABI/): + * + * "3.4. The libraries must export all OpenGL 1.2, GLU 1.3, GLX 1.3, and + * ARB_multitexture entry points statically. + * + * 3.5. Because non-ARB extensions vary so widely and are constantly + * increasing in number, it's infeasible to require that they all be + * supported, and extensions can always be added to hardware drivers + * after the base link libraries are released. These drivers are + * dynamically loaded by libGL, so extensions not in the base + * library must also be obtained dynamically. + * + * 3.6. To perform the dynamic query, libGL also must export an entry + * point called + * + * void (*glXGetProcAddressARB(const GLubyte *))(); + * + * The full specification of this function is available separately. It + * takes the string name of a GL or GLX entry point and returns a pointer + * to a function implementing that entry point. It is functionally + * identical to the wglGetProcAddress query defined by the Windows OpenGL + * library, except that the function pointers returned are context + * independent, unlike the WGL query." + * + * From the EGL 1.4 spec: + * + * "Client API function pointers returned by eglGetProcAddress are + * independent of the display and the currently bound client API context, + * and may be used by any client API context which supports the extension. + * + * eglGetProcAddress may be queried for all of the following functions: + * + * • All EGL and client API extension functions supported by the + * implementation (whether those extensions are supported by the current + * client API context or not). This includes any mandatory OpenGL ES + * extensions. + * + * eglGetProcAddress may not be queried for core (non-extension) functions + * in EGL or client APIs 20 . + * + * For functions that are queryable with eglGetProcAddress, + * implementations may choose to also export those functions statically + * from the object libraries im- plementing those functions. However, + * portable clients cannot rely on this behavior. + * + * From the GLX 1.4 spec: + * + * "glXGetProcAddress may be queried for all of the following functions: + * + * • All GL and GLX extension functions supported by the implementation + * (whether those extensions are supported by the current context or + * not). + * + * • All core (non-extension) functions in GL and GLX from version 1.0 up + * to and including the versions of those specifications supported by + * the implementation, as determined by glGetString(GL VERSION) and + * glXQueryVersion queries." + */ + +#include +#include +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif +#include +#include +#include + +#include "dispatch_common.h" + +#ifdef __APPLE__ +#define GLX_LIB "/opt/X11/lib/libGL.1.dylib" +#elif defined(ANDROID) +#define GLX_LIB "libGLESv2.so" +#else +#define GLX_LIB "libGL.so.1" +#endif + +#ifdef ANDROID +#define EGL_LIB "libEGL.so" +#define GLES1_LIB "libGLESv1_CM.so" +#define GLES2_LIB "libGLESv2.so" +#elif defined _WIN32 +#define EGL_LIB "libEGL.dll" +#define GLES1_LIB "libGLES_CM.dll" +#define GLES2_LIB "libGLESv2.dll" +#else +#define EGL_LIB "libEGL.so.1" +#define GLES1_LIB "libGLESv1_CM.so.1" +#define GLES2_LIB "libGLESv2.so.2" +#endif + +#ifdef __GNUC__ +#define CONSTRUCT(_func) static void _func (void) __attribute__((constructor)); +#define DESTRUCT(_func) static void _func (void) __attribute__((destructor)); +#elif defined (_MSC_VER) && (_MSC_VER >= 1500) +#define CONSTRUCT(_func) \ + static void _func(void); \ + static int _func ## _wrapper(void) { _func(); return 0; } \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _wrapper; + +#define DESTRUCT(_func) \ + static void _func(void); \ + static int _func ## _constructor(void) { atexit (_func); return 0; } \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor; + +#else +#error "You will need constructor support for your compiler" +#endif + +struct api { +#ifndef _WIN32 + /** + * Locking for making sure we don't double-dlopen(). + */ + pthread_mutex_t mutex; +#endif + + /** dlopen() return value for libGL.so.1. */ + void *glx_handle; + + /** + * dlopen() return value for OS X's GL library. + * + * On linux, glx_handle is used instead. + */ + void *gl_handle; + + /** dlopen() return value for libEGL.so.1 */ + void *egl_handle; + + /** dlopen() return value for libGLESv1_CM.so.1 */ + void *gles1_handle; + + /** dlopen() return value for libGLESv2.so.2 */ + void *gles2_handle; + + /** + * This value gets incremented when any thread is in + * glBegin()/glEnd() called through epoxy. + * + * We're not guaranteed to be called through our wrapper, so the + * conservative paths also try to handle the failure cases they'll + * see if begin_count didn't reflect reality. It's also a bit of + * a bug that the conservative paths might return success because + * some other thread was in epoxy glBegin/glEnd while our thread + * is trying to resolve, but given that it's basically just for + * informative error messages, we shouldn't need to care. + */ + long begin_count; +}; + +static struct api api = { +#ifndef _WIN32 + .mutex = PTHREAD_MUTEX_INITIALIZER, +#else + 0, +#endif +}; + +static bool library_initialized; + +#ifdef BUILD_EGL +static EGLenum +epoxy_egl_get_current_gl_context_api(void); +#endif + +CONSTRUCT (library_init) +static void +library_init(void) +{ + library_initialized = true; +} + +static bool +get_dlopen_handle(void **handle, const char *lib_name, bool exit_on_fail) +{ + if (*handle) + return true; + + if (!library_initialized) { + fprintf(stderr, + "Attempting to dlopen() while in the dynamic linker.\n"); + abort(); + } + +#ifdef _WIN32 + *handle = LoadLibraryA(lib_name); +#else + pthread_mutex_lock(&api.mutex); + if (!*handle) { + *handle = dlopen(lib_name, RTLD_LAZY | RTLD_LOCAL); + if (!*handle) { + if (exit_on_fail) { + fprintf(stderr, "Couldn't open %s: %s\n", lib_name, dlerror()); + exit(1); + } else { + (void)dlerror(); + } + } + } + pthread_mutex_unlock(&api.mutex); +#endif + + return *handle != NULL; +} + +static void * +do_dlsym(void **handle, const char *lib_name, const char *name, + bool exit_on_fail) +{ + void *result; + const char *error = ""; + + if (!get_dlopen_handle(handle, lib_name, exit_on_fail)) + return NULL; + +#ifdef _WIN32 + result = GetProcAddress(*handle, name); +#else + result = dlsym(*handle, name); + if (!result) + error = dlerror(); +#endif + if (!result && exit_on_fail) { + fprintf(stderr,"%s() not found in %s: %s\n", name, lib_name, error); + exit(1); + } + + return result; +} + +PUBLIC bool +epoxy_is_desktop_gl(void) +{ + const char *es_prefix = "OpenGL ES"; + const char *version; + +#ifdef BUILD_EGL + /* PowerVR's OpenGL ES implementation (and perhaps other) don't + * comply with the standard, which states that + * "glGetString(GL_VERSION)" should return a string starting with + * "OpenGL ES". Therefore, to distinguish desktop OpenGL from + * OpenGL ES, we must also check the context type through EGL (we + * can do that as PowerVR is only usable through EGL). + */ + if (epoxy_current_context_is_egl()) { + switch (epoxy_egl_get_current_gl_context_api()) { + case EGL_OPENGL_API: return true; + case EGL_OPENGL_ES_API: return false; + case EGL_NONE: + default: break; + } + } +#endif + + if (api.begin_count) + return true; + + version = (const char *)glGetString(GL_VERSION); + + /* If we didn't get a version back, there are only two things that + * could have happened: either malloc failure (which basically + * doesn't exist), or we were called within a glBegin()/glEnd(). + * Assume the second, which only exists for desktop GL. + */ + if (!version) + return true; + + return strncmp(es_prefix, version, strlen(es_prefix)); +} + +static int +epoxy_internal_gl_version(int error_version) +{ + const char *version = (const char *)glGetString(GL_VERSION); + GLint major, minor; + int scanf_count; + + if (!version) + return error_version; + + /* skip to version number */ + while (!isdigit(*version) && *version != '\0') + version++; + + /* Interpret version number */ + scanf_count = sscanf(version, "%i.%i", &major, &minor); + if (scanf_count != 2) { + fprintf(stderr, "Unable to interpret GL_VERSION string: %s\n", + version); + exit(1); + } + return 10 * major + minor; +} + +PUBLIC int +epoxy_gl_version(void) +{ + return epoxy_internal_gl_version(0); +} + +int +epoxy_conservative_gl_version(void) +{ + if (api.begin_count) + return 100; + + return epoxy_internal_gl_version(100); +} + +bool +epoxy_extension_in_string(const char *extension_list, const char *ext) +{ + const char *ptr = extension_list; + size_t len = strlen(ext); + + /* Make sure that don't just find an extension with our name as a prefix. */ + while (true) { + ptr = strstr(ptr, ext); + if (!ptr) + return false; + + if (ptr[len] == ' ' || ptr[len] == 0) + return true; + ptr += len; + } +} + +static bool +epoxy_internal_has_gl_extension(const char *ext, bool invalid_op_mode) +{ + if (epoxy_gl_version() < 30) { + const char *exts = (const char *)glGetString(GL_EXTENSIONS); + if (!exts) + return invalid_op_mode; + return epoxy_extension_in_string(exts, ext); + } else { + int num_extensions; + int i; + + glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + if (num_extensions == 0) + return invalid_op_mode; + + for (i = 0; i < num_extensions; i++) { + const char *gl_ext = (const char *)glGetStringi(GL_EXTENSIONS, i); + if (strcmp(ext, gl_ext) == 0) + return true; + } + + return false; + } +} + +/** + * Tests whether the currently bound context is EGL or GLX, trying to + * avoid loading libraries unless necessary. + */ +EPOXY_IMPORTEXPORT bool +epoxy_current_context_is_egl(void) +{ +#ifdef BUILD_EGL + if (get_dlopen_handle(&api.egl_handle, EGL_LIB, false) && epoxy_egl_get_current_gl_context_api() != EGL_NONE) + return true; +#endif + + return false; +} + +/** + * Returns true if the given GL extension is supported in the current context. + * + * Note that this function can't be called from within glBegin()/glEnd(). + * + * \sa epoxy_has_egl_extension() + * \sa epoxy_has_glx_extension() + */ +PUBLIC bool +epoxy_has_gl_extension(const char *ext) +{ + return epoxy_internal_has_gl_extension(ext, false); +} + +bool +epoxy_conservative_has_gl_extension(const char *ext) +{ + if (api.begin_count) + return true; + + return epoxy_internal_has_gl_extension(ext, true); +} + +void * +epoxy_egl_dlsym(const char *name) +{ + return do_dlsym(&api.egl_handle, EGL_LIB, name, true); +} + +void * +epoxy_glx_dlsym(const char *name) +{ + return do_dlsym(&api.glx_handle, GLX_LIB, name, true); +} + +void * +epoxy_gl_dlsym(const char *name) +{ +#ifdef _WIN32 + return do_dlsym(&api.gl_handle, "OPENGL32", name, true); +#elif defined(__APPLE__) + return do_dlsym(&api.gl_handle, + "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", + name, true); +#else + /* There's no library for desktop GL support independent of GLX. */ + return epoxy_glx_dlsym(name); +#endif +} + +void * +epoxy_gles1_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + return do_dlsym(&api.gles1_handle, GLES1_LIB, name, true); + } +} + +void * +epoxy_gles2_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + return do_dlsym(&api.gles2_handle, GLES2_LIB, name, true); + } +} + +/** + * Does the appropriate dlsym() or eglGetProcAddress() for GLES3 + * functions. + * + * Mesa interpreted GLES as intending that the GLES3 functions were + * available only through eglGetProcAddress() and not dlsym(), while + * ARM's Mali drivers interpreted GLES as intending that GLES3 + * functions were available only through dlsym() and not + * eglGetProcAddress(). Thanks, Khronos. + */ +void * +epoxy_gles3_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + void *func = do_dlsym(&api.gles2_handle, GLES2_LIB, name, false); + + if (func) + return func; + + return epoxy_get_proc_address(name); + } +} + +/** + * Performs either the dlsym or glXGetProcAddress()-equivalent for + * core functions in desktop GL. + */ +void * +epoxy_get_core_proc_address(const char *name, int core_version) +{ +#ifdef _WIN32 + int core_symbol_support = 11; +#elif defined(ANDROID) + /** + * All symbols must be resolved through eglGetProcAddress + * on Android + */ + int core_symbol_support = 0; +#else + int core_symbol_support = 12; +#endif + + if (core_version <= core_symbol_support) { + return epoxy_gl_dlsym(name); + } else { + return epoxy_get_proc_address(name); + } +} + +#ifdef BUILD_EGL +static EGLenum +epoxy_egl_get_current_gl_context_api(void) +{ + EGLDisplay eglDisplay = eglGetCurrentDisplay(); + EGLContext eglContext = eglGetCurrentContext(); + EGLint eglContextClientType = EGL_NONE; + return eglQueryContext(eglDisplay, eglContext, EGL_CONTEXT_CLIENT_TYPE, + &eglContextClientType) == EGL_TRUE + ? (EGLenum)eglContextClientType + : EGL_NONE; +} +#endif + +/** + * Performs the dlsym() for the core GL 1.0 functions that we use for + * determining version and extension support for deciding on dlsym + * versus glXGetProcAddress() for all other functions. + * + * This needs to succeed on implementations without GLX (since + * glGetString() and glGetIntegerv() are both in GLES1/2 as well, and + * at call time we don't know for sure what API they're trying to use + * without inspecting contexts ourselves). + */ +void * +epoxy_get_bootstrap_proc_address(const char *name) +{ + /* If we already have a library that links to libglapi loaded, + * use that. + */ +#ifdef BUILD_GLX + if (api.glx_handle && glXGetCurrentContext()) + return epoxy_gl_dlsym(name); +#endif + + /* If epoxy hasn't loaded any API-specific library yet, try to + * figure out what API the context is using and use that library, + * since future calls will also use that API (this prevents a + * non-X11 ES2 context from loading a bunch of X11 junk). + */ +#ifdef BUILD_EGL + get_dlopen_handle(&api.egl_handle, EGL_LIB, false); + if (api.egl_handle) { + switch (epoxy_egl_get_current_gl_context_api()) { + case EGL_OPENGL_API: + return epoxy_gl_dlsym(name); + case EGL_OPENGL_ES_API: { + EGLDisplay eglDisplay = eglGetCurrentDisplay(); + EGLContext eglContext = eglGetCurrentContext(); + EGLint glesVer = -1; + if (eglDisplay != EGL_NO_DISPLAY + && eglContext != EGL_NO_CONTEXT + && eglQueryContext(eglDisplay, eglContext, + EGL_CONTEXT_CLIENT_VERSION, &glesVer) == EGL_TRUE) + return glesVer >= 2 ? epoxy_gles2_dlsym(name) : epoxy_gles1_dlsym(name); + else + return NULL; + } + } + } +#endif + + /* Fall back to GLX */ + return epoxy_gl_dlsym(name); +} + +void * +epoxy_get_proc_address(const char *name) +{ +#if defined(BUILD_EGL) + if (epoxy_current_context_is_egl()) + return eglGetProcAddress(name); +#endif +#if defined(BUILD_WGL) + void *func = wglGetProcAddress(name); + return func ? func : epoxy_gl_dlsym(name); +#elif defined(__APPLE__) + return epoxy_gl_dlsym(name); +#elif defined(BUILD_GLX) + return glXGetProcAddressARB((const GLubyte *)name); +#else + return NULL; +#endif +} + +WRAPPER_VISIBILITY (void) +WRAPPER(epoxy_glBegin)(GLenum primtype) +{ +#ifdef _WIN32 + InterlockedIncrement(&api.begin_count); +#else + pthread_mutex_lock(&api.mutex); + api.begin_count++; + pthread_mutex_unlock(&api.mutex); +#endif + + epoxy_glBegin_unwrapped(primtype); +} + +WRAPPER_VISIBILITY (void) +WRAPPER(epoxy_glEnd)(void) +{ + epoxy_glEnd_unwrapped(); + +#ifdef _WIN32 + InterlockedDecrement(&api.begin_count); +#else + pthread_mutex_lock(&api.mutex); + api.begin_count--; + pthread_mutex_unlock(&api.mutex); +#endif +} + +PUBLIC PFNGLBEGINPROC epoxy_glBegin = epoxy_glBegin_wrapped; +PUBLIC PFNGLENDPROC epoxy_glEnd = epoxy_glEnd_wrapped; diff --git a/Engine/lib/epoxy/src/dispatch_common.h b/Engine/lib/epoxy/src/dispatch_common.h new file mode 100644 index 0000000000..ccded60f7f --- /dev/null +++ b/Engine/lib/epoxy/src/dispatch_common.h @@ -0,0 +1,188 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#ifdef _WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +# include +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __declspec(dllexport) +# endif +#else +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __attribute__((visibility("default"))) +# endif +#endif +#ifndef EPOXY_IMPORTEXPORT +# define EPOXY_IMPORTEXPORT +#endif + +#include + +#ifdef BUILD_GLX +# include +#endif + +#ifdef BUILD_EGL +# include +#endif + +#ifdef BUILD_WGL +# include +#endif + +#ifndef PUBLIC +# define PUBLIC EPOXY_IMPORTEXPORT +#endif + +#if defined(__GNUC__) +#define PACKED __attribute__((__packed__)) +#else +#define PACKED +#endif + +/* On win32, we're going to need to keep a per-thread dispatch table, + * since the function pointers depend on the device and pixel format + * of the current context. + */ +#if defined(_WIN32) +#define USING_DISPATCH_TABLE 1 +#else +#define USING_DISPATCH_TABLE 0 +#endif + +#define UNWRAPPED_PROTO(x) (GLAPIENTRY *x) +#define WRAPPER_VISIBILITY(type) static type GLAPIENTRY +#define WRAPPER(x) x ## _wrapped + +#define GEN_GLOBAL_REWRITE_PTR(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_global_rewrite_ptr args \ + { \ + name = (void *)name##_resolver(); \ + name passthrough; \ + } + +#define GEN_GLOBAL_REWRITE_PTR_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_global_rewrite_ptr args \ + { \ + name = (void *)name##_resolver(); \ + return name passthrough; \ + } + +#if USING_DISPATCH_TABLE +#define GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_dispatch_table_rewrite_ptr args \ + { \ + struct dispatch_table *dispatch_table = get_dispatch_table(); \ + \ + dispatch_table->name = (void *)name##_resolver(); \ + dispatch_table->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_dispatch_table_rewrite_ptr args \ + { \ + struct dispatch_table *dispatch_table = get_dispatch_table(); \ + \ + dispatch_table->name = (void *)name##_resolver(); \ + return dispatch_table->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_dispatch_table_thunk args \ + { \ + get_dispatch_table()->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_dispatch_table_thunk args \ + { \ + return get_dispatch_table()->name passthrough; \ + } + +#else +#define GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) +#define GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) +#define GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) +#define GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) +#endif + +#define GEN_THUNKS(name, args, passthrough) \ + GEN_GLOBAL_REWRITE_PTR(name, args, passthrough) \ + GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) \ + GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) + +#define GEN_THUNKS_RET(ret, name, args, passthrough) \ + GEN_GLOBAL_REWRITE_PTR_RET(ret, name, args, passthrough) \ + GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) \ + GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) + +void *epoxy_egl_dlsym(const char *name); +void *epoxy_glx_dlsym(const char *name); +void *epoxy_gl_dlsym(const char *name); +void *epoxy_gles1_dlsym(const char *name); +void *epoxy_gles2_dlsym(const char *name); +void *epoxy_gles3_dlsym(const char *name); +void *epoxy_get_proc_address(const char *name); +void *epoxy_get_core_proc_address(const char *name, int core_version); +void *epoxy_get_bootstrap_proc_address(const char *name); + +int epoxy_conservative_gl_version(void); +bool epoxy_conservative_has_gl_extension(const char *name); +int epoxy_conservative_glx_version(void); +bool epoxy_conservative_has_glx_extension(const char *name); +int epoxy_conservative_egl_version(void); +bool epoxy_conservative_has_egl_extension(const char *name); +bool epoxy_conservative_has_wgl_extension(const char *name); + +bool epoxy_extension_in_string(const char *extension_list, const char *ext); + +#define glBegin_unwrapped epoxy_glBegin_unwrapped +#define glEnd_unwrapped epoxy_glEnd_unwrapped +extern void UNWRAPPED_PROTO(glBegin_unwrapped)(GLenum primtype); +extern void UNWRAPPED_PROTO(glEnd_unwrapped)(void); + +#if USING_DISPATCH_TABLE +void gl_init_dispatch_table(void); +void gl_switch_to_dispatch_table(void); +void wgl_init_dispatch_table(void); +void wgl_switch_to_dispatch_table(void); +extern uint32_t gl_tls_index, gl_tls_size; +extern uint32_t wgl_tls_index, wgl_tls_size; + +#define wglMakeCurrent_unwrapped epoxy_wglMakeCurrent_unwrapped +#define wglMakeContextCurrentARB_unwrapped epoxy_wglMakeContextCurrentARB_unwrapped +#define wglMakeContextCurrentEXT_unwrapped epoxy_wglMakeContextCurrentEXT_unwrapped +#define wglMakeAssociatedContextCurrentAMD_unwrapped epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped +extern BOOL UNWRAPPED_PROTO(wglMakeCurrent_unwrapped)(HDC hdc, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeContextCurrentARB_unwrapped)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeContextCurrentEXT_unwrapped)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeAssociatedContextCurrentAMD_unwrapped)(HGLRC hglrc); +#endif /* _WIN32_ */ diff --git a/Engine/lib/epoxy/src/egl/dispatch_egl.c b/Engine/lib/epoxy/src/egl/dispatch_egl.c new file mode 100644 index 0000000000..9649ba4080 --- /dev/null +++ b/Engine/lib/epoxy/src/egl/dispatch_egl.c @@ -0,0 +1,69 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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 +#include +#include + +#include "dispatch_common.h" + +int +epoxy_conservative_egl_version(void) +{ + EGLDisplay dpy = eglGetCurrentDisplay(); + + if (!dpy) + return 14; + + return epoxy_egl_version(dpy); +} + +PUBLIC int +epoxy_egl_version(EGLDisplay dpy) +{ + int major, minor; + const char *version_string; + int ret; + + version_string = eglQueryString(dpy, EGL_VERSION); + ret = sscanf(version_string, "%d.%d", &major, &minor); + assert(ret == 2); + return major * 10 + minor; +} + +bool +epoxy_conservative_has_egl_extension(const char *ext) +{ + EGLDisplay dpy = eglGetCurrentDisplay(); + + if (!dpy) + return true; + + return epoxy_has_egl_extension(dpy, ext); +} + +PUBLIC bool +epoxy_has_egl_extension(EGLDisplay dpy, const char *ext) +{ + return epoxy_extension_in_string(eglQueryString(dpy, EGL_EXTENSIONS), ext); +} diff --git a/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c b/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c new file mode 100644 index 0000000000..719f6c2e5c --- /dev/null +++ b/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c @@ -0,0 +1,4206 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/egl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNEGLBINDAPIPROC epoxy_eglBindAPI; + PFNEGLBINDTEXIMAGEPROC epoxy_eglBindTexImage; + PFNEGLCHOOSECONFIGPROC epoxy_eglChooseConfig; + PFNEGLCLIENTWAITSYNCPROC epoxy_eglClientWaitSync; + PFNEGLCLIENTWAITSYNCKHRPROC epoxy_eglClientWaitSyncKHR; + PFNEGLCLIENTWAITSYNCNVPROC epoxy_eglClientWaitSyncNV; + PFNEGLCOPYBUFFERSPROC epoxy_eglCopyBuffers; + PFNEGLCREATECONTEXTPROC epoxy_eglCreateContext; + PFNEGLCREATEDRMIMAGEMESAPROC epoxy_eglCreateDRMImageMESA; + PFNEGLCREATEFENCESYNCNVPROC epoxy_eglCreateFenceSyncNV; + PFNEGLCREATEIMAGEPROC epoxy_eglCreateImage; + PFNEGLCREATEIMAGEKHRPROC epoxy_eglCreateImageKHR; + PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC epoxy_eglCreatePbufferFromClientBuffer; + PFNEGLCREATEPBUFFERSURFACEPROC epoxy_eglCreatePbufferSurface; + PFNEGLCREATEPIXMAPSURFACEPROC epoxy_eglCreatePixmapSurface; + PFNEGLCREATEPIXMAPSURFACEHIPROC epoxy_eglCreatePixmapSurfaceHI; + PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC epoxy_eglCreatePlatformPixmapSurface; + PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC epoxy_eglCreatePlatformPixmapSurfaceEXT; + PFNEGLCREATEPLATFORMWINDOWSURFACEPROC epoxy_eglCreatePlatformWindowSurface; + PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC epoxy_eglCreatePlatformWindowSurfaceEXT; + PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC epoxy_eglCreateStreamFromFileDescriptorKHR; + PFNEGLCREATESTREAMKHRPROC epoxy_eglCreateStreamKHR; + PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC epoxy_eglCreateStreamProducerSurfaceKHR; + PFNEGLCREATESTREAMSYNCNVPROC epoxy_eglCreateStreamSyncNV; + PFNEGLCREATESYNCPROC epoxy_eglCreateSync; + PFNEGLCREATESYNC64KHRPROC epoxy_eglCreateSync64KHR; + PFNEGLCREATESYNCKHRPROC epoxy_eglCreateSyncKHR; + PFNEGLCREATEWINDOWSURFACEPROC epoxy_eglCreateWindowSurface; + PFNEGLDESTROYCONTEXTPROC epoxy_eglDestroyContext; + PFNEGLDESTROYIMAGEPROC epoxy_eglDestroyImage; + PFNEGLDESTROYIMAGEKHRPROC epoxy_eglDestroyImageKHR; + PFNEGLDESTROYSTREAMKHRPROC epoxy_eglDestroyStreamKHR; + PFNEGLDESTROYSURFACEPROC epoxy_eglDestroySurface; + PFNEGLDESTROYSYNCPROC epoxy_eglDestroySync; + PFNEGLDESTROYSYNCKHRPROC epoxy_eglDestroySyncKHR; + PFNEGLDESTROYSYNCNVPROC epoxy_eglDestroySyncNV; + PFNEGLDUPNATIVEFENCEFDANDROIDPROC epoxy_eglDupNativeFenceFDANDROID; + PFNEGLEXPORTDMABUFIMAGEMESAPROC epoxy_eglExportDMABUFImageMESA; + PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC epoxy_eglExportDMABUFImageQueryMESA; + PFNEGLEXPORTDRMIMAGEMESAPROC epoxy_eglExportDRMImageMESA; + PFNEGLFENCENVPROC epoxy_eglFenceNV; + PFNEGLGETCONFIGATTRIBPROC epoxy_eglGetConfigAttrib; + PFNEGLGETCONFIGSPROC epoxy_eglGetConfigs; + PFNEGLGETCURRENTCONTEXTPROC epoxy_eglGetCurrentContext; + PFNEGLGETCURRENTDISPLAYPROC epoxy_eglGetCurrentDisplay; + PFNEGLGETCURRENTSURFACEPROC epoxy_eglGetCurrentSurface; + PFNEGLGETDISPLAYPROC epoxy_eglGetDisplay; + PFNEGLGETERRORPROC epoxy_eglGetError; + PFNEGLGETOUTPUTLAYERSEXTPROC epoxy_eglGetOutputLayersEXT; + PFNEGLGETOUTPUTPORTSEXTPROC epoxy_eglGetOutputPortsEXT; + PFNEGLGETPLATFORMDISPLAYPROC epoxy_eglGetPlatformDisplay; + PFNEGLGETPLATFORMDISPLAYEXTPROC epoxy_eglGetPlatformDisplayEXT; + PFNEGLGETPROCADDRESSPROC epoxy_eglGetProcAddress; + PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC epoxy_eglGetStreamFileDescriptorKHR; + PFNEGLGETSYNCATTRIBPROC epoxy_eglGetSyncAttrib; + PFNEGLGETSYNCATTRIBKHRPROC epoxy_eglGetSyncAttribKHR; + PFNEGLGETSYNCATTRIBNVPROC epoxy_eglGetSyncAttribNV; + PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC epoxy_eglGetSystemTimeFrequencyNV; + PFNEGLGETSYSTEMTIMENVPROC epoxy_eglGetSystemTimeNV; + PFNEGLINITIALIZEPROC epoxy_eglInitialize; + PFNEGLLOCKSURFACEKHRPROC epoxy_eglLockSurfaceKHR; + PFNEGLMAKECURRENTPROC epoxy_eglMakeCurrent; + PFNEGLOUTPUTLAYERATTRIBEXTPROC epoxy_eglOutputLayerAttribEXT; + PFNEGLOUTPUTPORTATTRIBEXTPROC epoxy_eglOutputPortAttribEXT; + PFNEGLPOSTSUBBUFFERNVPROC epoxy_eglPostSubBufferNV; + PFNEGLQUERYAPIPROC epoxy_eglQueryAPI; + PFNEGLQUERYCONTEXTPROC epoxy_eglQueryContext; + PFNEGLQUERYDEVICEATTRIBEXTPROC epoxy_eglQueryDeviceAttribEXT; + PFNEGLQUERYDEVICESTRINGEXTPROC epoxy_eglQueryDeviceStringEXT; + PFNEGLQUERYDEVICESEXTPROC epoxy_eglQueryDevicesEXT; + PFNEGLQUERYDISPLAYATTRIBEXTPROC epoxy_eglQueryDisplayAttribEXT; + PFNEGLQUERYNATIVEDISPLAYNVPROC epoxy_eglQueryNativeDisplayNV; + PFNEGLQUERYNATIVEPIXMAPNVPROC epoxy_eglQueryNativePixmapNV; + PFNEGLQUERYNATIVEWINDOWNVPROC epoxy_eglQueryNativeWindowNV; + PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC epoxy_eglQueryOutputLayerAttribEXT; + PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC epoxy_eglQueryOutputLayerStringEXT; + PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC epoxy_eglQueryOutputPortAttribEXT; + PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC epoxy_eglQueryOutputPortStringEXT; + PFNEGLQUERYSTREAMKHRPROC epoxy_eglQueryStreamKHR; + PFNEGLQUERYSTREAMTIMEKHRPROC epoxy_eglQueryStreamTimeKHR; + PFNEGLQUERYSTREAMU64KHRPROC epoxy_eglQueryStreamu64KHR; + PFNEGLQUERYSTRINGPROC epoxy_eglQueryString; + PFNEGLQUERYSURFACEPROC epoxy_eglQuerySurface; + PFNEGLQUERYSURFACE64KHRPROC epoxy_eglQuerySurface64KHR; + PFNEGLQUERYSURFACEPOINTERANGLEPROC epoxy_eglQuerySurfacePointerANGLE; + PFNEGLRELEASETEXIMAGEPROC epoxy_eglReleaseTexImage; + PFNEGLRELEASETHREADPROC epoxy_eglReleaseThread; + PFNEGLSETBLOBCACHEFUNCSANDROIDPROC epoxy_eglSetBlobCacheFuncsANDROID; + PFNEGLSETDAMAGEREGIONKHRPROC epoxy_eglSetDamageRegionKHR; + PFNEGLSIGNALSYNCKHRPROC epoxy_eglSignalSyncKHR; + PFNEGLSIGNALSYNCNVPROC epoxy_eglSignalSyncNV; + PFNEGLSTREAMATTRIBKHRPROC epoxy_eglStreamAttribKHR; + PFNEGLSTREAMCONSUMERACQUIREKHRPROC epoxy_eglStreamConsumerAcquireKHR; + PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC epoxy_eglStreamConsumerGLTextureExternalKHR; + PFNEGLSTREAMCONSUMEROUTPUTEXTPROC epoxy_eglStreamConsumerOutputEXT; + PFNEGLSTREAMCONSUMERRELEASEKHRPROC epoxy_eglStreamConsumerReleaseKHR; + PFNEGLSURFACEATTRIBPROC epoxy_eglSurfaceAttrib; + PFNEGLSWAPBUFFERSPROC epoxy_eglSwapBuffers; + PFNEGLSWAPBUFFERSREGION2NOKPROC epoxy_eglSwapBuffersRegion2NOK; + PFNEGLSWAPBUFFERSREGIONNOKPROC epoxy_eglSwapBuffersRegionNOK; + PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC epoxy_eglSwapBuffersWithDamageEXT; + PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC epoxy_eglSwapBuffersWithDamageKHR; + PFNEGLSWAPINTERVALPROC epoxy_eglSwapInterval; + PFNEGLTERMINATEPROC epoxy_eglTerminate; + PFNEGLUNLOCKSURFACEKHRPROC epoxy_eglUnlockSurfaceKHR; + PFNEGLWAITCLIENTPROC epoxy_eglWaitClient; + PFNEGLWAITGLPROC epoxy_eglWaitGL; + PFNEGLWAITNATIVEPROC epoxy_eglWaitNative; + PFNEGLWAITSYNCPROC epoxy_eglWaitSync; + PFNEGLWAITSYNCKHRPROC epoxy_eglWaitSyncKHR; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum egl_provider { + egl_provider_terminator = 0, + EGL_10, + EGL_11, + EGL_12, + EGL_14, + EGL_15, + EGL_extension_EGL_ANDROID_blob_cache, + EGL_extension_EGL_ANDROID_native_fence_sync, + EGL_extension_EGL_ANGLE_query_surface_pointer, + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_enumeration, + EGL_extension_EGL_EXT_device_query, + EGL_extension_EGL_EXT_output_base, + EGL_extension_EGL_EXT_platform_base, + EGL_extension_EGL_EXT_stream_consumer_egloutput, + EGL_extension_EGL_EXT_swap_buffers_with_damage, + EGL_extension_EGL_HI_clientpixmap, + EGL_extension_EGL_KHR_cl_event2, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + EGL_extension_EGL_KHR_lock_surface3, + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_partial_update, + EGL_extension_EGL_KHR_reusable_sync, + EGL_extension_EGL_KHR_stream, + EGL_extension_EGL_KHR_stream_consumer_gltexture, + EGL_extension_EGL_KHR_stream_cross_process_fd, + EGL_extension_EGL_KHR_stream_fifo, + EGL_extension_EGL_KHR_stream_producer_eglsurface, + EGL_extension_EGL_KHR_swap_buffers_with_damage, + EGL_extension_EGL_KHR_wait_sync, + EGL_extension_EGL_MESA_drm_image, + EGL_extension_EGL_MESA_image_dma_buf_export, + EGL_extension_EGL_NOK_swap_region2, + EGL_extension_EGL_NOK_swap_region, + EGL_extension_EGL_NV_native_query, + EGL_extension_EGL_NV_post_sub_buffer, + EGL_extension_EGL_NV_stream_sync, + EGL_extension_EGL_NV_sync, + EGL_extension_EGL_NV_system_time, +} PACKED; + +static const char *enum_string = + "EGL 10\0" + "EGL 11\0" + "EGL 12\0" + "EGL 14\0" + "EGL 15\0" + "EGL extension \"EGL_ANDROID_blob_cache\"\0" + "EGL extension \"EGL_ANDROID_native_fence_sync\"\0" + "EGL extension \"EGL_ANGLE_query_surface_pointer\"\0" + "EGL extension \"EGL_EXT_device_base\"\0" + "EGL extension \"EGL_EXT_device_enumeration\"\0" + "EGL extension \"EGL_EXT_device_query\"\0" + "EGL extension \"EGL_EXT_output_base\"\0" + "EGL extension \"EGL_EXT_platform_base\"\0" + "EGL extension \"EGL_EXT_stream_consumer_egloutput\"\0" + "EGL extension \"EGL_EXT_swap_buffers_with_damage\"\0" + "EGL extension \"EGL_HI_clientpixmap\"\0" + "EGL extension \"EGL_KHR_cl_event2\"\0" + "EGL extension \"EGL_KHR_fence_sync\"\0" + "EGL extension \"EGL_KHR_image\"\0" + "EGL extension \"EGL_KHR_image_base\"\0" + "EGL extension \"EGL_KHR_lock_surface3\"\0" + "EGL extension \"EGL_KHR_lock_surface\"\0" + "EGL extension \"EGL_KHR_partial_update\"\0" + "EGL extension \"EGL_KHR_reusable_sync\"\0" + "EGL extension \"EGL_KHR_stream\"\0" + "EGL extension \"EGL_KHR_stream_consumer_gltexture\"\0" + "EGL extension \"EGL_KHR_stream_cross_process_fd\"\0" + "EGL extension \"EGL_KHR_stream_fifo\"\0" + "EGL extension \"EGL_KHR_stream_producer_eglsurface\"\0" + "EGL extension \"EGL_KHR_swap_buffers_with_damage\"\0" + "EGL extension \"EGL_KHR_wait_sync\"\0" + "EGL extension \"EGL_MESA_drm_image\"\0" + "EGL extension \"EGL_MESA_image_dma_buf_export\"\0" + "EGL extension \"EGL_NOK_swap_region2\"\0" + "EGL extension \"EGL_NOK_swap_region\"\0" + "EGL extension \"EGL_NV_native_query\"\0" + "EGL extension \"EGL_NV_post_sub_buffer\"\0" + "EGL extension \"EGL_NV_stream_sync\"\0" + "EGL extension \"EGL_NV_sync\"\0" + "EGL extension \"EGL_NV_system_time\"\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* egl_provider_terminator, unused */ + 0, /* EGL_10 */ + 7, /* EGL_11 */ + 14, /* EGL_12 */ + 21, /* EGL_14 */ + 28, /* EGL_15 */ + 35, /* EGL_extension_EGL_ANDROID_blob_cache */ + 74, /* EGL_extension_EGL_ANDROID_native_fence_sync */ + 120, /* EGL_extension_EGL_ANGLE_query_surface_pointer */ + 168, /* EGL_extension_EGL_EXT_device_base */ + 204, /* EGL_extension_EGL_EXT_device_enumeration */ + 247, /* EGL_extension_EGL_EXT_device_query */ + 284, /* EGL_extension_EGL_EXT_output_base */ + 320, /* EGL_extension_EGL_EXT_platform_base */ + 358, /* EGL_extension_EGL_EXT_stream_consumer_egloutput */ + 408, /* EGL_extension_EGL_EXT_swap_buffers_with_damage */ + 457, /* EGL_extension_EGL_HI_clientpixmap */ + 493, /* EGL_extension_EGL_KHR_cl_event2 */ + 527, /* EGL_extension_EGL_KHR_fence_sync */ + 562, /* EGL_extension_EGL_KHR_image */ + 592, /* EGL_extension_EGL_KHR_image_base */ + 627, /* EGL_extension_EGL_KHR_lock_surface3 */ + 665, /* EGL_extension_EGL_KHR_lock_surface */ + 702, /* EGL_extension_EGL_KHR_partial_update */ + 741, /* EGL_extension_EGL_KHR_reusable_sync */ + 779, /* EGL_extension_EGL_KHR_stream */ + 810, /* EGL_extension_EGL_KHR_stream_consumer_gltexture */ + 860, /* EGL_extension_EGL_KHR_stream_cross_process_fd */ + 908, /* EGL_extension_EGL_KHR_stream_fifo */ + 944, /* EGL_extension_EGL_KHR_stream_producer_eglsurface */ + 995, /* EGL_extension_EGL_KHR_swap_buffers_with_damage */ + 1044, /* EGL_extension_EGL_KHR_wait_sync */ + 1078, /* EGL_extension_EGL_MESA_drm_image */ + 1113, /* EGL_extension_EGL_MESA_image_dma_buf_export */ + 1159, /* EGL_extension_EGL_NOK_swap_region2 */ + 1196, /* EGL_extension_EGL_NOK_swap_region */ + 1232, /* EGL_extension_EGL_NV_native_query */ + 1268, /* EGL_extension_EGL_NV_post_sub_buffer */ + 1307, /* EGL_extension_EGL_NV_stream_sync */ + 1342, /* EGL_extension_EGL_NV_sync */ + 1370, /* EGL_extension_EGL_NV_system_time */ +}; + +static const char entrypoint_strings[] = { + 'e', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 'P', + 'I', + 0, // eglBindAPI + 'e', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglBindTexImage + 'e', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // eglChooseConfig + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // eglClientWaitSync + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglClientWaitSyncKHR + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglClientWaitSyncNV + 'e', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // eglCopyBuffers + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglCreateContext + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'D', + 'R', + 'M', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglCreateDRMImageMESA + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglCreateFenceSyncNV + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglCreateImage + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglCreateImageKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'F', + 'r', + 'o', + 'm', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // eglCreatePbufferFromClientBuffer + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePbufferSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePixmapSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'H', + 'I', + 0, // eglCreatePixmapSurfaceHI + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePlatformPixmapSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // eglCreatePlatformPixmapSurfaceEXT + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePlatformWindowSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // eglCreatePlatformWindowSurfaceEXT + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'F', + 'r', + 'o', + 'm', + 'F', + 'i', + 'l', + 'e', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'p', + 't', + 'o', + 'r', + 'K', + 'H', + 'R', + 0, // eglCreateStreamFromFileDescriptorKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglCreateStreamKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'r', + 'o', + 'd', + 'u', + 'c', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglCreateStreamProducerSurfaceKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglCreateStreamSyncNV + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // eglCreateSync + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglCreateSync64KHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglCreateSyncKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreateWindowSurface + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglDestroyContext + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglDestroyImage + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglDestroyImageKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglDestroyStreamKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglDestroySurface + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 0, // eglDestroySync + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglDestroySyncKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglDestroySyncNV + 'e', + 'g', + 'l', + 'D', + 'u', + 'p', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 'F', + 'D', + 'A', + 'N', + 'D', + 'R', + 'O', + 'I', + 'D', + 0, // eglDupNativeFenceFDANDROID + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'M', + 'A', + 'B', + 'U', + 'F', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDMABUFImageMESA + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'M', + 'A', + 'B', + 'U', + 'F', + 'I', + 'm', + 'a', + 'g', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDMABUFImageQueryMESA + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'R', + 'M', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDRMImageMESA + 'e', + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // eglFenceNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglGetConfigAttrib + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 's', + 0, // eglGetConfigs + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglGetCurrentContext + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetCurrentDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglGetCurrentSurface + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'r', + 'r', + 'o', + 'r', + 0, // eglGetError + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // eglGetOutputLayersEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 's', + 'E', + 'X', + 'T', + 0, // eglGetOutputPortsEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetPlatformDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // eglGetPlatformDisplayEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // eglGetProcAddress + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'F', + 'i', + 'l', + 'e', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'p', + 't', + 'o', + 'r', + 'K', + 'H', + 'R', + 0, // eglGetStreamFileDescriptorKHR + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglGetSyncAttrib + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'K', + 'H', + 'R', + 0, // eglGetSyncAttribKHR + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'N', + 'V', + 0, // eglGetSyncAttribNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 's', + 't', + 'e', + 'm', + 'T', + 'i', + 'm', + 'e', + 'F', + 'r', + 'e', + 'q', + 'u', + 'e', + 'n', + 'c', + 'y', + 'N', + 'V', + 0, // eglGetSystemTimeFrequencyNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 's', + 't', + 'e', + 'm', + 'T', + 'i', + 'm', + 'e', + 'N', + 'V', + 0, // eglGetSystemTimeNV + 'e', + 'g', + 'l', + 'I', + 'n', + 'i', + 't', + 'i', + 'a', + 'l', + 'i', + 'z', + 'e', + 0, // eglInitialize + 'e', + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglLockSurfaceKHR + 'e', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // eglMakeCurrent + 'e', + 'g', + 'l', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglOutputLayerAttribEXT + 'e', + 'g', + 'l', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglOutputPortAttribEXT + 'e', + 'g', + 'l', + 'P', + 'o', + 's', + 't', + 'S', + 'u', + 'b', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // eglPostSubBufferNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'P', + 'I', + 0, // eglQueryAPI + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglQueryContext + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryDeviceAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryDeviceStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // eglQueryDevicesEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryDisplayAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'N', + 'V', + 0, // eglQueryNativeDisplayNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'N', + 'V', + 0, // eglQueryNativePixmapNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'N', + 'V', + 0, // eglQueryNativeWindowNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryOutputLayerAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryOutputLayerStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryOutputPortAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryOutputPortStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglQueryStreamKHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'T', + 'i', + 'm', + 'e', + 'K', + 'H', + 'R', + 0, // eglQueryStreamTimeKHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'u', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglQueryStreamu64KHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // eglQueryString + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglQuerySurface + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglQuerySurface64KHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // eglQuerySurfacePointerANGLE + 'e', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglReleaseTexImage + 'e', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'h', + 'r', + 'e', + 'a', + 'd', + 0, // eglReleaseThread + 'e', + 'g', + 'l', + 'S', + 'e', + 't', + 'B', + 'l', + 'o', + 'b', + 'C', + 'a', + 'c', + 'h', + 'e', + 'F', + 'u', + 'n', + 'c', + 's', + 'A', + 'N', + 'D', + 'R', + 'O', + 'I', + 'D', + 0, // eglSetBlobCacheFuncsANDROID + 'e', + 'g', + 'l', + 'S', + 'e', + 't', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'K', + 'H', + 'R', + 0, // eglSetDamageRegionKHR + 'e', + 'g', + 'l', + 'S', + 'i', + 'g', + 'n', + 'a', + 'l', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglSignalSyncKHR + 'e', + 'g', + 'l', + 'S', + 'i', + 'g', + 'n', + 'a', + 'l', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglSignalSyncNV + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'K', + 'H', + 'R', + 0, // eglStreamAttribKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'A', + 'c', + 'q', + 'u', + 'i', + 'r', + 'e', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerAcquireKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'G', + 'L', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'x', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerGLTextureExternalKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'E', + 'X', + 'T', + 0, // eglStreamConsumerOutputEXT + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerReleaseKHR + 'e', + 'g', + 'l', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglSurfaceAttrib + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // eglSwapBuffers + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + '2', + 'N', + 'O', + 'K', + 0, // eglSwapBuffersRegion2NOK + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'N', + 'O', + 'K', + 0, // eglSwapBuffersRegionNOK + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'W', + 'i', + 't', + 'h', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // eglSwapBuffersWithDamageEXT + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'W', + 'i', + 't', + 'h', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglSwapBuffersWithDamageKHR + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 0, // eglSwapInterval + 'e', + 'g', + 'l', + 'T', + 'e', + 'r', + 'm', + 'i', + 'n', + 'a', + 't', + 'e', + 0, // eglTerminate + 'e', + 'g', + 'l', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglUnlockSurfaceKHR + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 0, // eglWaitClient + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'G', + 'L', + 0, // eglWaitGL + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 0, // eglWaitNative + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // eglWaitSync + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglWaitSyncKHR + 0 }; + +static void *egl_provider_resolver(const char *name, + const enum egl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != egl_provider_terminator; i++) { + switch (providers[i]) { + case EGL_10: + if (true) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_11: + if (epoxy_conservative_egl_version() >= 11) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_12: + if (epoxy_conservative_egl_version() >= 12) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_14: + if (epoxy_conservative_egl_version() >= 14) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_15: + if (epoxy_conservative_egl_version() >= 15) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANDROID_blob_cache: + if (epoxy_conservative_has_egl_extension("EGL_ANDROID_blob_cache")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANDROID_native_fence_sync: + if (epoxy_conservative_has_egl_extension("EGL_ANDROID_native_fence_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANGLE_query_surface_pointer: + if (epoxy_conservative_has_egl_extension("EGL_ANGLE_query_surface_pointer")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_enumeration: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_enumeration")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_query: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_query")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_output_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_output_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_platform_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_platform_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_stream_consumer_egloutput: + if (epoxy_conservative_has_egl_extension("EGL_EXT_stream_consumer_egloutput")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_swap_buffers_with_damage: + if (epoxy_conservative_has_egl_extension("EGL_EXT_swap_buffers_with_damage")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_HI_clientpixmap: + if (epoxy_conservative_has_egl_extension("EGL_HI_clientpixmap")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_cl_event2: + if (epoxy_conservative_has_egl_extension("EGL_KHR_cl_event2")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_fence_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_fence_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_image: + if (epoxy_conservative_has_egl_extension("EGL_KHR_image")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_image_base: + if (epoxy_conservative_has_egl_extension("EGL_KHR_image_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_lock_surface3: + if (epoxy_conservative_has_egl_extension("EGL_KHR_lock_surface3")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_lock_surface: + if (epoxy_conservative_has_egl_extension("EGL_KHR_lock_surface")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_partial_update: + if (epoxy_conservative_has_egl_extension("EGL_KHR_partial_update")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_reusable_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_reusable_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_consumer_gltexture: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_consumer_gltexture")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_cross_process_fd: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_cross_process_fd")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_fifo: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_fifo")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_producer_eglsurface: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_producer_eglsurface")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_swap_buffers_with_damage: + if (epoxy_conservative_has_egl_extension("EGL_KHR_swap_buffers_with_damage")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_wait_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_wait_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_MESA_drm_image: + if (epoxy_conservative_has_egl_extension("EGL_MESA_drm_image")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_MESA_image_dma_buf_export: + if (epoxy_conservative_has_egl_extension("EGL_MESA_image_dma_buf_export")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NOK_swap_region2: + if (epoxy_conservative_has_egl_extension("EGL_NOK_swap_region2")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NOK_swap_region: + if (epoxy_conservative_has_egl_extension("EGL_NOK_swap_region")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_native_query: + if (epoxy_conservative_has_egl_extension("EGL_NV_native_query")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_post_sub_buffer: + if (epoxy_conservative_has_egl_extension("EGL_NV_post_sub_buffer")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_stream_sync: + if (epoxy_conservative_has_egl_extension("EGL_NV_stream_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_sync: + if (epoxy_conservative_has_egl_extension("EGL_NV_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_system_time: + if (epoxy_conservative_has_egl_extension("EGL_NV_system_time")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case egl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != egl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == egl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +egl_single_resolver(const enum egl_provider provider, const uint32_t entrypoint_offset); + +static void * +egl_single_resolver(const enum egl_provider provider, const uint32_t entrypoint_offset) +{ + const enum egl_provider providers[] = { + provider, + egl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return egl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNEGLBINDAPIPROC +epoxy_eglBindAPI_resolver(void) +{ + return egl_single_resolver(EGL_12, 0 /* eglBindAPI */); +} + +static PFNEGLBINDTEXIMAGEPROC +epoxy_eglBindTexImage_resolver(void) +{ + return egl_single_resolver(EGL_11, 11 /* eglBindTexImage */); +} + +static PFNEGLCHOOSECONFIGPROC +epoxy_eglChooseConfig_resolver(void) +{ + return egl_single_resolver(EGL_10, 27 /* eglChooseConfig */); +} + +static PFNEGLCLIENTWAITSYNCPROC +epoxy_eglClientWaitSync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43 /* "eglClientWaitSync" */, + 61 /* "eglClientWaitSyncKHR" */, + 61 /* "eglClientWaitSyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 43 /* "eglClientWaitSync" */, + providers, entrypoints); +} + +static PFNEGLCLIENTWAITSYNCKHRPROC +epoxy_eglClientWaitSyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61 /* "eglClientWaitSyncKHR" */, + 61 /* "eglClientWaitSyncKHR" */, + 43 /* "eglClientWaitSync" */, + }; + return egl_provider_resolver(entrypoint_strings + 61 /* "eglClientWaitSyncKHR" */, + providers, entrypoints); +} + +static PFNEGLCLIENTWAITSYNCNVPROC +epoxy_eglClientWaitSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 82 /* eglClientWaitSyncNV */); +} + +static PFNEGLCOPYBUFFERSPROC +epoxy_eglCopyBuffers_resolver(void) +{ + return egl_single_resolver(EGL_10, 102 /* eglCopyBuffers */); +} + +static PFNEGLCREATECONTEXTPROC +epoxy_eglCreateContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 117 /* eglCreateContext */); +} + +static PFNEGLCREATEDRMIMAGEMESAPROC +epoxy_eglCreateDRMImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_drm_image, 134 /* eglCreateDRMImageMESA */); +} + +static PFNEGLCREATEFENCESYNCNVPROC +epoxy_eglCreateFenceSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 156 /* eglCreateFenceSyncNV */); +} + +static PFNEGLCREATEIMAGEPROC +epoxy_eglCreateImage_resolver(void) +{ + return egl_single_resolver(EGL_15, 177 /* eglCreateImage */); +} + +static PFNEGLCREATEIMAGEKHRPROC +epoxy_eglCreateImageKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 192 /* "eglCreateImageKHR" */, + 192 /* "eglCreateImageKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 192 /* "eglCreateImageKHR" */, + providers, entrypoints); +} + +static PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC +epoxy_eglCreatePbufferFromClientBuffer_resolver(void) +{ + return egl_single_resolver(EGL_12, 210 /* eglCreatePbufferFromClientBuffer */); +} + +static PFNEGLCREATEPBUFFERSURFACEPROC +epoxy_eglCreatePbufferSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 243 /* eglCreatePbufferSurface */); +} + +static PFNEGLCREATEPIXMAPSURFACEPROC +epoxy_eglCreatePixmapSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 267 /* eglCreatePixmapSurface */); +} + +static PFNEGLCREATEPIXMAPSURFACEHIPROC +epoxy_eglCreatePixmapSurfaceHI_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_HI_clientpixmap, 290 /* eglCreatePixmapSurfaceHI */); +} + +static PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC +epoxy_eglCreatePlatformPixmapSurface_resolver(void) +{ + return egl_single_resolver(EGL_15, 315 /* eglCreatePlatformPixmapSurface */); +} + +static PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC +epoxy_eglCreatePlatformPixmapSurfaceEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 346 /* eglCreatePlatformPixmapSurfaceEXT */); +} + +static PFNEGLCREATEPLATFORMWINDOWSURFACEPROC +epoxy_eglCreatePlatformWindowSurface_resolver(void) +{ + return egl_single_resolver(EGL_15, 380 /* eglCreatePlatformWindowSurface */); +} + +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC +epoxy_eglCreatePlatformWindowSurfaceEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 411 /* eglCreatePlatformWindowSurfaceEXT */); +} + +static PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC +epoxy_eglCreateStreamFromFileDescriptorKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_cross_process_fd, 445 /* eglCreateStreamFromFileDescriptorKHR */); +} + +static PFNEGLCREATESTREAMKHRPROC +epoxy_eglCreateStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 482 /* eglCreateStreamKHR */); +} + +static PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC +epoxy_eglCreateStreamProducerSurfaceKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_producer_eglsurface, 501 /* eglCreateStreamProducerSurfaceKHR */); +} + +static PFNEGLCREATESTREAMSYNCNVPROC +epoxy_eglCreateStreamSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_stream_sync, 535 /* eglCreateStreamSyncNV */); +} + +static PFNEGLCREATESYNCPROC +epoxy_eglCreateSync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_cl_event2, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 557 /* "eglCreateSync" */, + 571 /* "eglCreateSync64KHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 557 /* "eglCreateSync" */, + providers, entrypoints); +} + +static PFNEGLCREATESYNC64KHRPROC +epoxy_eglCreateSync64KHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_cl_event2, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 571 /* "eglCreateSync64KHR" */, + 557 /* "eglCreateSync" */, + }; + return egl_provider_resolver(entrypoint_strings + 571 /* "eglCreateSync64KHR" */, + providers, entrypoints); +} + +static PFNEGLCREATESYNCKHRPROC +epoxy_eglCreateSyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 590 /* "eglCreateSyncKHR" */, + 590 /* "eglCreateSyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 590 /* "eglCreateSyncKHR" */, + providers, entrypoints); +} + +static PFNEGLCREATEWINDOWSURFACEPROC +epoxy_eglCreateWindowSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 607 /* eglCreateWindowSurface */); +} + +static PFNEGLDESTROYCONTEXTPROC +epoxy_eglDestroyContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 630 /* eglDestroyContext */); +} + +static PFNEGLDESTROYIMAGEPROC +epoxy_eglDestroyImage_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 648 /* "eglDestroyImage" */, + 664 /* "eglDestroyImageKHR" */, + 664 /* "eglDestroyImageKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 648 /* "eglDestroyImage" */, + providers, entrypoints); +} + +static PFNEGLDESTROYIMAGEKHRPROC +epoxy_eglDestroyImageKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 664 /* "eglDestroyImageKHR" */, + 664 /* "eglDestroyImageKHR" */, + 648 /* "eglDestroyImage" */, + }; + return egl_provider_resolver(entrypoint_strings + 664 /* "eglDestroyImageKHR" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSTREAMKHRPROC +epoxy_eglDestroyStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 683 /* eglDestroyStreamKHR */); +} + +static PFNEGLDESTROYSURFACEPROC +epoxy_eglDestroySurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 703 /* eglDestroySurface */); +} + +static PFNEGLDESTROYSYNCPROC +epoxy_eglDestroySync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 721 /* "eglDestroySync" */, + 736 /* "eglDestroySyncKHR" */, + 736 /* "eglDestroySyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 721 /* "eglDestroySync" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSYNCKHRPROC +epoxy_eglDestroySyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 736 /* "eglDestroySyncKHR" */, + 736 /* "eglDestroySyncKHR" */, + 721 /* "eglDestroySync" */, + }; + return egl_provider_resolver(entrypoint_strings + 736 /* "eglDestroySyncKHR" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSYNCNVPROC +epoxy_eglDestroySyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 754 /* eglDestroySyncNV */); +} + +static PFNEGLDUPNATIVEFENCEFDANDROIDPROC +epoxy_eglDupNativeFenceFDANDROID_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANDROID_native_fence_sync, 771 /* eglDupNativeFenceFDANDROID */); +} + +static PFNEGLEXPORTDMABUFIMAGEMESAPROC +epoxy_eglExportDMABUFImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_image_dma_buf_export, 798 /* eglExportDMABUFImageMESA */); +} + +static PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC +epoxy_eglExportDMABUFImageQueryMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_image_dma_buf_export, 823 /* eglExportDMABUFImageQueryMESA */); +} + +static PFNEGLEXPORTDRMIMAGEMESAPROC +epoxy_eglExportDRMImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_drm_image, 853 /* eglExportDRMImageMESA */); +} + +static PFNEGLFENCENVPROC +epoxy_eglFenceNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 875 /* eglFenceNV */); +} + +static PFNEGLGETCONFIGATTRIBPROC +epoxy_eglGetConfigAttrib_resolver(void) +{ + return egl_single_resolver(EGL_10, 886 /* eglGetConfigAttrib */); +} + +static PFNEGLGETCONFIGSPROC +epoxy_eglGetConfigs_resolver(void) +{ + return egl_single_resolver(EGL_10, 905 /* eglGetConfigs */); +} + +static PFNEGLGETCURRENTCONTEXTPROC +epoxy_eglGetCurrentContext_resolver(void) +{ + return egl_single_resolver(EGL_14, 919 /* eglGetCurrentContext */); +} + +static PFNEGLGETCURRENTDISPLAYPROC +epoxy_eglGetCurrentDisplay_resolver(void) +{ + return egl_single_resolver(EGL_10, 940 /* eglGetCurrentDisplay */); +} + +static PFNEGLGETCURRENTSURFACEPROC +epoxy_eglGetCurrentSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 961 /* eglGetCurrentSurface */); +} + +static PFNEGLGETDISPLAYPROC +epoxy_eglGetDisplay_resolver(void) +{ + return egl_single_resolver(EGL_10, 982 /* eglGetDisplay */); +} + +static PFNEGLGETERRORPROC +epoxy_eglGetError_resolver(void) +{ + return egl_single_resolver(EGL_10, 996 /* eglGetError */); +} + +static PFNEGLGETOUTPUTLAYERSEXTPROC +epoxy_eglGetOutputLayersEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1008 /* eglGetOutputLayersEXT */); +} + +static PFNEGLGETOUTPUTPORTSEXTPROC +epoxy_eglGetOutputPortsEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1030 /* eglGetOutputPortsEXT */); +} + +static PFNEGLGETPLATFORMDISPLAYPROC +epoxy_eglGetPlatformDisplay_resolver(void) +{ + return egl_single_resolver(EGL_15, 1051 /* eglGetPlatformDisplay */); +} + +static PFNEGLGETPLATFORMDISPLAYEXTPROC +epoxy_eglGetPlatformDisplayEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 1073 /* eglGetPlatformDisplayEXT */); +} + +static PFNEGLGETPROCADDRESSPROC +epoxy_eglGetProcAddress_resolver(void) +{ + return egl_single_resolver(EGL_10, 1098 /* eglGetProcAddress */); +} + +static PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC +epoxy_eglGetStreamFileDescriptorKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_cross_process_fd, 1116 /* eglGetStreamFileDescriptorKHR */); +} + +static PFNEGLGETSYNCATTRIBPROC +epoxy_eglGetSyncAttrib_resolver(void) +{ + return egl_single_resolver(EGL_15, 1146 /* eglGetSyncAttrib */); +} + +static PFNEGLGETSYNCATTRIBKHRPROC +epoxy_eglGetSyncAttribKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1163 /* "eglGetSyncAttribKHR" */, + 1163 /* "eglGetSyncAttribKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 1163 /* "eglGetSyncAttribKHR" */, + providers, entrypoints); +} + +static PFNEGLGETSYNCATTRIBNVPROC +epoxy_eglGetSyncAttribNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 1183 /* eglGetSyncAttribNV */); +} + +static PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC +epoxy_eglGetSystemTimeFrequencyNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_system_time, 1202 /* eglGetSystemTimeFrequencyNV */); +} + +static PFNEGLGETSYSTEMTIMENVPROC +epoxy_eglGetSystemTimeNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_system_time, 1230 /* eglGetSystemTimeNV */); +} + +static PFNEGLINITIALIZEPROC +epoxy_eglInitialize_resolver(void) +{ + return egl_single_resolver(EGL_10, 1249 /* eglInitialize */); +} + +static PFNEGLLOCKSURFACEKHRPROC +epoxy_eglLockSurfaceKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_lock_surface3, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1263 /* "eglLockSurfaceKHR" */, + 1263 /* "eglLockSurfaceKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 1263 /* "eglLockSurfaceKHR" */, + providers, entrypoints); +} + +static PFNEGLMAKECURRENTPROC +epoxy_eglMakeCurrent_resolver(void) +{ + return egl_single_resolver(EGL_10, 1281 /* eglMakeCurrent */); +} + +static PFNEGLOUTPUTLAYERATTRIBEXTPROC +epoxy_eglOutputLayerAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1296 /* eglOutputLayerAttribEXT */); +} + +static PFNEGLOUTPUTPORTATTRIBEXTPROC +epoxy_eglOutputPortAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1320 /* eglOutputPortAttribEXT */); +} + +static PFNEGLPOSTSUBBUFFERNVPROC +epoxy_eglPostSubBufferNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_post_sub_buffer, 1343 /* eglPostSubBufferNV */); +} + +static PFNEGLQUERYAPIPROC +epoxy_eglQueryAPI_resolver(void) +{ + return egl_single_resolver(EGL_12, 1362 /* eglQueryAPI */); +} + +static PFNEGLQUERYCONTEXTPROC +epoxy_eglQueryContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 1374 /* eglQueryContext */); +} + +static PFNEGLQUERYDEVICEATTRIBEXTPROC +epoxy_eglQueryDeviceAttribEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1390 /* "eglQueryDeviceAttribEXT" */, + 1390 /* "eglQueryDeviceAttribEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1390 /* "eglQueryDeviceAttribEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDEVICESTRINGEXTPROC +epoxy_eglQueryDeviceStringEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1414 /* "eglQueryDeviceStringEXT" */, + 1414 /* "eglQueryDeviceStringEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1414 /* "eglQueryDeviceStringEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDEVICESEXTPROC +epoxy_eglQueryDevicesEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_enumeration, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1438 /* "eglQueryDevicesEXT" */, + 1438 /* "eglQueryDevicesEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1438 /* "eglQueryDevicesEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDISPLAYATTRIBEXTPROC +epoxy_eglQueryDisplayAttribEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1457 /* "eglQueryDisplayAttribEXT" */, + 1457 /* "eglQueryDisplayAttribEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1457 /* "eglQueryDisplayAttribEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYNATIVEDISPLAYNVPROC +epoxy_eglQueryNativeDisplayNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1482 /* eglQueryNativeDisplayNV */); +} + +static PFNEGLQUERYNATIVEPIXMAPNVPROC +epoxy_eglQueryNativePixmapNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1506 /* eglQueryNativePixmapNV */); +} + +static PFNEGLQUERYNATIVEWINDOWNVPROC +epoxy_eglQueryNativeWindowNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1529 /* eglQueryNativeWindowNV */); +} + +static PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC +epoxy_eglQueryOutputLayerAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1552 /* eglQueryOutputLayerAttribEXT */); +} + +static PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC +epoxy_eglQueryOutputLayerStringEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1581 /* eglQueryOutputLayerStringEXT */); +} + +static PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC +epoxy_eglQueryOutputPortAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1610 /* eglQueryOutputPortAttribEXT */); +} + +static PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC +epoxy_eglQueryOutputPortStringEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1638 /* eglQueryOutputPortStringEXT */); +} + +static PFNEGLQUERYSTREAMKHRPROC +epoxy_eglQueryStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1666 /* eglQueryStreamKHR */); +} + +static PFNEGLQUERYSTREAMTIMEKHRPROC +epoxy_eglQueryStreamTimeKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_fifo, 1684 /* eglQueryStreamTimeKHR */); +} + +static PFNEGLQUERYSTREAMU64KHRPROC +epoxy_eglQueryStreamu64KHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1706 /* eglQueryStreamu64KHR */); +} + +static PFNEGLQUERYSTRINGPROC +epoxy_eglQueryString_resolver(void) +{ + return egl_single_resolver(EGL_10, 1727 /* eglQueryString */); +} + +static PFNEGLQUERYSURFACEPROC +epoxy_eglQuerySurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 1742 /* eglQuerySurface */); +} + +static PFNEGLQUERYSURFACE64KHRPROC +epoxy_eglQuerySurface64KHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_lock_surface3, 1758 /* eglQuerySurface64KHR */); +} + +static PFNEGLQUERYSURFACEPOINTERANGLEPROC +epoxy_eglQuerySurfacePointerANGLE_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANGLE_query_surface_pointer, 1779 /* eglQuerySurfacePointerANGLE */); +} + +static PFNEGLRELEASETEXIMAGEPROC +epoxy_eglReleaseTexImage_resolver(void) +{ + return egl_single_resolver(EGL_11, 1807 /* eglReleaseTexImage */); +} + +static PFNEGLRELEASETHREADPROC +epoxy_eglReleaseThread_resolver(void) +{ + return egl_single_resolver(EGL_12, 1826 /* eglReleaseThread */); +} + +static PFNEGLSETBLOBCACHEFUNCSANDROIDPROC +epoxy_eglSetBlobCacheFuncsANDROID_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANDROID_blob_cache, 1843 /* eglSetBlobCacheFuncsANDROID */); +} + +static PFNEGLSETDAMAGEREGIONKHRPROC +epoxy_eglSetDamageRegionKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_partial_update, 1871 /* eglSetDamageRegionKHR */); +} + +static PFNEGLSIGNALSYNCKHRPROC +epoxy_eglSignalSyncKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_reusable_sync, 1893 /* eglSignalSyncKHR */); +} + +static PFNEGLSIGNALSYNCNVPROC +epoxy_eglSignalSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 1910 /* eglSignalSyncNV */); +} + +static PFNEGLSTREAMATTRIBKHRPROC +epoxy_eglStreamAttribKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1926 /* eglStreamAttribKHR */); +} + +static PFNEGLSTREAMCONSUMERACQUIREKHRPROC +epoxy_eglStreamConsumerAcquireKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 1945 /* eglStreamConsumerAcquireKHR */); +} + +static PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC +epoxy_eglStreamConsumerGLTextureExternalKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 1973 /* eglStreamConsumerGLTextureExternalKHR */); +} + +static PFNEGLSTREAMCONSUMEROUTPUTEXTPROC +epoxy_eglStreamConsumerOutputEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_stream_consumer_egloutput, 2011 /* eglStreamConsumerOutputEXT */); +} + +static PFNEGLSTREAMCONSUMERRELEASEKHRPROC +epoxy_eglStreamConsumerReleaseKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 2038 /* eglStreamConsumerReleaseKHR */); +} + +static PFNEGLSURFACEATTRIBPROC +epoxy_eglSurfaceAttrib_resolver(void) +{ + return egl_single_resolver(EGL_11, 2066 /* eglSurfaceAttrib */); +} + +static PFNEGLSWAPBUFFERSPROC +epoxy_eglSwapBuffers_resolver(void) +{ + return egl_single_resolver(EGL_10, 2083 /* eglSwapBuffers */); +} + +static PFNEGLSWAPBUFFERSREGION2NOKPROC +epoxy_eglSwapBuffersRegion2NOK_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NOK_swap_region2, 2098 /* eglSwapBuffersRegion2NOK */); +} + +static PFNEGLSWAPBUFFERSREGIONNOKPROC +epoxy_eglSwapBuffersRegionNOK_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NOK_swap_region, 2123 /* eglSwapBuffersRegionNOK */); +} + +static PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC +epoxy_eglSwapBuffersWithDamageEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_swap_buffers_with_damage, 2147 /* eglSwapBuffersWithDamageEXT */); +} + +static PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC +epoxy_eglSwapBuffersWithDamageKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_swap_buffers_with_damage, 2175 /* eglSwapBuffersWithDamageKHR */); +} + +static PFNEGLSWAPINTERVALPROC +epoxy_eglSwapInterval_resolver(void) +{ + return egl_single_resolver(EGL_11, 2203 /* eglSwapInterval */); +} + +static PFNEGLTERMINATEPROC +epoxy_eglTerminate_resolver(void) +{ + return egl_single_resolver(EGL_10, 2219 /* eglTerminate */); +} + +static PFNEGLUNLOCKSURFACEKHRPROC +epoxy_eglUnlockSurfaceKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_lock_surface3, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2232 /* "eglUnlockSurfaceKHR" */, + 2232 /* "eglUnlockSurfaceKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 2232 /* "eglUnlockSurfaceKHR" */, + providers, entrypoints); +} + +static PFNEGLWAITCLIENTPROC +epoxy_eglWaitClient_resolver(void) +{ + return egl_single_resolver(EGL_12, 2252 /* eglWaitClient */); +} + +static PFNEGLWAITGLPROC +epoxy_eglWaitGL_resolver(void) +{ + return egl_single_resolver(EGL_10, 2266 /* eglWaitGL */); +} + +static PFNEGLWAITNATIVEPROC +epoxy_eglWaitNative_resolver(void) +{ + return egl_single_resolver(EGL_10, 2276 /* eglWaitNative */); +} + +static PFNEGLWAITSYNCPROC +epoxy_eglWaitSync_resolver(void) +{ + return egl_single_resolver(EGL_15, 2290 /* eglWaitSync */); +} + +static PFNEGLWAITSYNCKHRPROC +epoxy_eglWaitSyncKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_wait_sync, 2302 /* eglWaitSyncKHR */); +} + +GEN_THUNKS_RET(EGLBoolean, eglBindAPI, (EGLenum api), (api)) +GEN_THUNKS_RET(EGLBoolean, eglBindTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer), (dpy, surface, buffer)) +GEN_THUNKS_RET(EGLBoolean, eglChooseConfig, (EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config), (dpy, attrib_list, configs, config_size, num_config)) +GEN_THUNKS_RET(EGLint, eglClientWaitSync, (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout), (dpy, sync, flags, timeout)) +GEN_THUNKS_RET(EGLint, eglClientWaitSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout), (dpy, sync, flags, timeout)) +GEN_THUNKS_RET(EGLint, eglClientWaitSyncNV, (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout), (sync, flags, timeout)) +GEN_THUNKS_RET(EGLBoolean, eglCopyBuffers, (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target), (dpy, surface, target)) +GEN_THUNKS_RET(EGLContext, eglCreateContext, (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list), (dpy, config, share_context, attrib_list)) +GEN_THUNKS_RET(EGLImageKHR, eglCreateDRMImageMESA, (EGLDisplay dpy, const EGLint * attrib_list), (dpy, attrib_list)) +GEN_THUNKS_RET(EGLSyncNV, eglCreateFenceSyncNV, (EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list), (dpy, condition, attrib_list)) +GEN_THUNKS_RET(EGLImage, eglCreateImage, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list), (dpy, ctx, target, buffer, attrib_list)) +GEN_THUNKS_RET(EGLImageKHR, eglCreateImageKHR, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list), (dpy, ctx, target, buffer, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePbufferFromClientBuffer, (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list), (dpy, buftype, buffer, config, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePbufferSurface, (EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list), (dpy, config, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePixmapSurface, (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list), (dpy, config, pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePixmapSurfaceHI, (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap), (dpy, config, pixmap)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformPixmapSurface, (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list), (dpy, config, native_pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformPixmapSurfaceEXT, (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list), (dpy, config, native_pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformWindowSurface, (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list), (dpy, config, native_window, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformWindowSurfaceEXT, (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list), (dpy, config, native_window, attrib_list)) +GEN_THUNKS_RET(EGLStreamKHR, eglCreateStreamFromFileDescriptorKHR, (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor), (dpy, file_descriptor)) +GEN_THUNKS_RET(EGLStreamKHR, eglCreateStreamKHR, (EGLDisplay dpy, const EGLint * attrib_list), (dpy, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreateStreamProducerSurfaceKHR, (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list), (dpy, config, stream, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateStreamSyncNV, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list), (dpy, stream, type, attrib_list)) +GEN_THUNKS_RET(EGLSync, eglCreateSync, (EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateSync64KHR, (EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateSyncKHR, (EGLDisplay dpy, EGLenum type, const EGLint * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreateWindowSurface, (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list), (dpy, config, win, attrib_list)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyContext, (EGLDisplay dpy, EGLContext ctx), (dpy, ctx)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyImage, (EGLDisplay dpy, EGLImage image), (dpy, image)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyImageKHR, (EGLDisplay dpy, EGLImageKHR image), (dpy, image)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyStreamKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySurface, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySync, (EGLDisplay dpy, EGLSync sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySyncKHR, (EGLDisplay dpy, EGLSyncKHR sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySyncNV, (EGLSyncNV sync), (sync)) +GEN_THUNKS_RET(EGLint, eglDupNativeFenceFDANDROID, (EGLDisplay dpy, EGLSyncKHR sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglExportDMABUFImageMESA, (EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets), (dpy, image, fds, strides, offsets)) +GEN_THUNKS_RET(EGLBoolean, eglExportDMABUFImageQueryMESA, (EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers), (dpy, image, fourcc, num_planes, modifiers)) +GEN_THUNKS_RET(EGLBoolean, eglExportDRMImageMESA, (EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride), (dpy, image, name, handle, stride)) +GEN_THUNKS_RET(EGLBoolean, eglFenceNV, (EGLSyncNV sync), (sync)) +GEN_THUNKS_RET(EGLBoolean, eglGetConfigAttrib, (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetConfigs, (EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config), (dpy, configs, config_size, num_config)) +GEN_THUNKS_RET(EGLContext, eglGetCurrentContext, (void), ()) +GEN_THUNKS_RET(EGLDisplay, eglGetCurrentDisplay, (void), ()) +GEN_THUNKS_RET(EGLSurface, eglGetCurrentSurface, (EGLint readdraw), (readdraw)) +GEN_THUNKS_RET(EGLDisplay, eglGetDisplay, (EGLNativeDisplayType display_id), (display_id)) +GEN_THUNKS_RET(EGLint, eglGetError, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglGetOutputLayersEXT, (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers), (dpy, attrib_list, layers, max_layers, num_layers)) +GEN_THUNKS_RET(EGLBoolean, eglGetOutputPortsEXT, (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports), (dpy, attrib_list, ports, max_ports, num_ports)) +GEN_THUNKS_RET(EGLDisplay, eglGetPlatformDisplay, (EGLenum platform, void * native_display, const EGLAttrib * attrib_list), (platform, native_display, attrib_list)) +GEN_THUNKS_RET(EGLDisplay, eglGetPlatformDisplayEXT, (EGLenum platform, void * native_display, const EGLint * attrib_list), (platform, native_display, attrib_list)) +GEN_THUNKS_RET(__eglMustCastToProperFunctionPointerType, eglGetProcAddress, (const char * procname), (procname)) +GEN_THUNKS_RET(EGLNativeFileDescriptorKHR, eglGetStreamFileDescriptorKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttrib, (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value), (dpy, sync, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttribKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value), (dpy, sync, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttribNV, (EGLSyncNV sync, EGLint attribute, EGLint * value), (sync, attribute, value)) +GEN_THUNKS_RET(EGLuint64NV, eglGetSystemTimeFrequencyNV, (void), ()) +GEN_THUNKS_RET(EGLuint64NV, eglGetSystemTimeNV, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglInitialize, (EGLDisplay dpy, EGLint * major, EGLint * minor), (dpy, major, minor)) +GEN_THUNKS_RET(EGLBoolean, eglLockSurfaceKHR, (EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list), (dpy, surface, attrib_list)) +GEN_THUNKS_RET(EGLBoolean, eglMakeCurrent, (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS_RET(EGLBoolean, eglOutputLayerAttribEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value), (dpy, layer, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglOutputPortAttribEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value), (dpy, port, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglPostSubBufferNV, (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height), (dpy, surface, x, y, width, height)) +GEN_THUNKS_RET(EGLenum, eglQueryAPI, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglQueryContext, (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value), (dpy, ctx, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDeviceAttribEXT, (EGLDeviceEXT device, EGLint attribute, EGLAttrib * value), (device, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryDeviceStringEXT, (EGLDeviceEXT device, EGLint name), (device, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDevicesEXT, (EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices), (max_devices, devices, num_devices)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDisplayAttribEXT, (EGLDisplay dpy, EGLint attribute, EGLAttrib * value), (dpy, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativeDisplayNV, (EGLDisplay dpy, EGLNativeDisplayType * display_id), (dpy, display_id)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativePixmapNV, (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap), (dpy, surf, pixmap)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativeWindowNV, (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window), (dpy, surf, window)) +GEN_THUNKS_RET(EGLBoolean, eglQueryOutputLayerAttribEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value), (dpy, layer, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryOutputLayerStringEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name), (dpy, layer, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryOutputPortAttribEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value), (dpy, port, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryOutputPortStringEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name), (dpy, port, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamTimeKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamu64KHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryString, (EGLDisplay dpy, EGLint name), (dpy, name)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurface, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurface64KHR, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurfacePointerANGLE, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglReleaseTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer), (dpy, surface, buffer)) +GEN_THUNKS_RET(EGLBoolean, eglReleaseThread, (void), ()) +GEN_THUNKS(eglSetBlobCacheFuncsANDROID, (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get), (dpy, set, get)) +GEN_THUNKS_RET(EGLBoolean, eglSetDamageRegionKHR, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSignalSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode), (dpy, sync, mode)) +GEN_THUNKS_RET(EGLBoolean, eglSignalSyncNV, (EGLSyncNV sync, EGLenum mode), (sync, mode)) +GEN_THUNKS_RET(EGLBoolean, eglStreamAttribKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerAcquireKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerGLTextureExternalKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerOutputEXT, (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer), (dpy, stream, layer)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerReleaseKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglSurfaceAttrib, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffers, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersRegion2NOK, (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects), (dpy, surface, numRects, rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersRegionNOK, (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects), (dpy, surface, numRects, rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersWithDamageEXT, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersWithDamageKHR, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapInterval, (EGLDisplay dpy, EGLint interval), (dpy, interval)) +GEN_THUNKS_RET(EGLBoolean, eglTerminate, (EGLDisplay dpy), (dpy)) +GEN_THUNKS_RET(EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglWaitClient, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglWaitGL, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglWaitNative, (EGLint engine), (engine)) +GEN_THUNKS_RET(EGLBoolean, eglWaitSync, (EGLDisplay dpy, EGLSync sync, EGLint flags), (dpy, sync, flags)) +GEN_THUNKS_RET(EGLint, eglWaitSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags), (dpy, sync, flags)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_eglBindAPI_dispatch_table_rewrite_ptr, /* eglBindAPI */ + epoxy_eglBindTexImage_dispatch_table_rewrite_ptr, /* eglBindTexImage */ + epoxy_eglChooseConfig_dispatch_table_rewrite_ptr, /* eglChooseConfig */ + epoxy_eglClientWaitSync_dispatch_table_rewrite_ptr, /* eglClientWaitSync */ + epoxy_eglClientWaitSyncKHR_dispatch_table_rewrite_ptr, /* eglClientWaitSyncKHR */ + epoxy_eglClientWaitSyncNV_dispatch_table_rewrite_ptr, /* eglClientWaitSyncNV */ + epoxy_eglCopyBuffers_dispatch_table_rewrite_ptr, /* eglCopyBuffers */ + epoxy_eglCreateContext_dispatch_table_rewrite_ptr, /* eglCreateContext */ + epoxy_eglCreateDRMImageMESA_dispatch_table_rewrite_ptr, /* eglCreateDRMImageMESA */ + epoxy_eglCreateFenceSyncNV_dispatch_table_rewrite_ptr, /* eglCreateFenceSyncNV */ + epoxy_eglCreateImage_dispatch_table_rewrite_ptr, /* eglCreateImage */ + epoxy_eglCreateImageKHR_dispatch_table_rewrite_ptr, /* eglCreateImageKHR */ + epoxy_eglCreatePbufferFromClientBuffer_dispatch_table_rewrite_ptr, /* eglCreatePbufferFromClientBuffer */ + epoxy_eglCreatePbufferSurface_dispatch_table_rewrite_ptr, /* eglCreatePbufferSurface */ + epoxy_eglCreatePixmapSurface_dispatch_table_rewrite_ptr, /* eglCreatePixmapSurface */ + epoxy_eglCreatePixmapSurfaceHI_dispatch_table_rewrite_ptr, /* eglCreatePixmapSurfaceHI */ + epoxy_eglCreatePlatformPixmapSurface_dispatch_table_rewrite_ptr, /* eglCreatePlatformPixmapSurface */ + epoxy_eglCreatePlatformPixmapSurfaceEXT_dispatch_table_rewrite_ptr, /* eglCreatePlatformPixmapSurfaceEXT */ + epoxy_eglCreatePlatformWindowSurface_dispatch_table_rewrite_ptr, /* eglCreatePlatformWindowSurface */ + epoxy_eglCreatePlatformWindowSurfaceEXT_dispatch_table_rewrite_ptr, /* eglCreatePlatformWindowSurfaceEXT */ + epoxy_eglCreateStreamFromFileDescriptorKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamFromFileDescriptorKHR */ + epoxy_eglCreateStreamKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamKHR */ + epoxy_eglCreateStreamProducerSurfaceKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamProducerSurfaceKHR */ + epoxy_eglCreateStreamSyncNV_dispatch_table_rewrite_ptr, /* eglCreateStreamSyncNV */ + epoxy_eglCreateSync_dispatch_table_rewrite_ptr, /* eglCreateSync */ + epoxy_eglCreateSync64KHR_dispatch_table_rewrite_ptr, /* eglCreateSync64KHR */ + epoxy_eglCreateSyncKHR_dispatch_table_rewrite_ptr, /* eglCreateSyncKHR */ + epoxy_eglCreateWindowSurface_dispatch_table_rewrite_ptr, /* eglCreateWindowSurface */ + epoxy_eglDestroyContext_dispatch_table_rewrite_ptr, /* eglDestroyContext */ + epoxy_eglDestroyImage_dispatch_table_rewrite_ptr, /* eglDestroyImage */ + epoxy_eglDestroyImageKHR_dispatch_table_rewrite_ptr, /* eglDestroyImageKHR */ + epoxy_eglDestroyStreamKHR_dispatch_table_rewrite_ptr, /* eglDestroyStreamKHR */ + epoxy_eglDestroySurface_dispatch_table_rewrite_ptr, /* eglDestroySurface */ + epoxy_eglDestroySync_dispatch_table_rewrite_ptr, /* eglDestroySync */ + epoxy_eglDestroySyncKHR_dispatch_table_rewrite_ptr, /* eglDestroySyncKHR */ + epoxy_eglDestroySyncNV_dispatch_table_rewrite_ptr, /* eglDestroySyncNV */ + epoxy_eglDupNativeFenceFDANDROID_dispatch_table_rewrite_ptr, /* eglDupNativeFenceFDANDROID */ + epoxy_eglExportDMABUFImageMESA_dispatch_table_rewrite_ptr, /* eglExportDMABUFImageMESA */ + epoxy_eglExportDMABUFImageQueryMESA_dispatch_table_rewrite_ptr, /* eglExportDMABUFImageQueryMESA */ + epoxy_eglExportDRMImageMESA_dispatch_table_rewrite_ptr, /* eglExportDRMImageMESA */ + epoxy_eglFenceNV_dispatch_table_rewrite_ptr, /* eglFenceNV */ + epoxy_eglGetConfigAttrib_dispatch_table_rewrite_ptr, /* eglGetConfigAttrib */ + epoxy_eglGetConfigs_dispatch_table_rewrite_ptr, /* eglGetConfigs */ + epoxy_eglGetCurrentContext_dispatch_table_rewrite_ptr, /* eglGetCurrentContext */ + epoxy_eglGetCurrentDisplay_dispatch_table_rewrite_ptr, /* eglGetCurrentDisplay */ + epoxy_eglGetCurrentSurface_dispatch_table_rewrite_ptr, /* eglGetCurrentSurface */ + epoxy_eglGetDisplay_dispatch_table_rewrite_ptr, /* eglGetDisplay */ + epoxy_eglGetError_dispatch_table_rewrite_ptr, /* eglGetError */ + epoxy_eglGetOutputLayersEXT_dispatch_table_rewrite_ptr, /* eglGetOutputLayersEXT */ + epoxy_eglGetOutputPortsEXT_dispatch_table_rewrite_ptr, /* eglGetOutputPortsEXT */ + epoxy_eglGetPlatformDisplay_dispatch_table_rewrite_ptr, /* eglGetPlatformDisplay */ + epoxy_eglGetPlatformDisplayEXT_dispatch_table_rewrite_ptr, /* eglGetPlatformDisplayEXT */ + epoxy_eglGetProcAddress_dispatch_table_rewrite_ptr, /* eglGetProcAddress */ + epoxy_eglGetStreamFileDescriptorKHR_dispatch_table_rewrite_ptr, /* eglGetStreamFileDescriptorKHR */ + epoxy_eglGetSyncAttrib_dispatch_table_rewrite_ptr, /* eglGetSyncAttrib */ + epoxy_eglGetSyncAttribKHR_dispatch_table_rewrite_ptr, /* eglGetSyncAttribKHR */ + epoxy_eglGetSyncAttribNV_dispatch_table_rewrite_ptr, /* eglGetSyncAttribNV */ + epoxy_eglGetSystemTimeFrequencyNV_dispatch_table_rewrite_ptr, /* eglGetSystemTimeFrequencyNV */ + epoxy_eglGetSystemTimeNV_dispatch_table_rewrite_ptr, /* eglGetSystemTimeNV */ + epoxy_eglInitialize_dispatch_table_rewrite_ptr, /* eglInitialize */ + epoxy_eglLockSurfaceKHR_dispatch_table_rewrite_ptr, /* eglLockSurfaceKHR */ + epoxy_eglMakeCurrent_dispatch_table_rewrite_ptr, /* eglMakeCurrent */ + epoxy_eglOutputLayerAttribEXT_dispatch_table_rewrite_ptr, /* eglOutputLayerAttribEXT */ + epoxy_eglOutputPortAttribEXT_dispatch_table_rewrite_ptr, /* eglOutputPortAttribEXT */ + epoxy_eglPostSubBufferNV_dispatch_table_rewrite_ptr, /* eglPostSubBufferNV */ + epoxy_eglQueryAPI_dispatch_table_rewrite_ptr, /* eglQueryAPI */ + epoxy_eglQueryContext_dispatch_table_rewrite_ptr, /* eglQueryContext */ + epoxy_eglQueryDeviceAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryDeviceAttribEXT */ + epoxy_eglQueryDeviceStringEXT_dispatch_table_rewrite_ptr, /* eglQueryDeviceStringEXT */ + epoxy_eglQueryDevicesEXT_dispatch_table_rewrite_ptr, /* eglQueryDevicesEXT */ + epoxy_eglQueryDisplayAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryDisplayAttribEXT */ + epoxy_eglQueryNativeDisplayNV_dispatch_table_rewrite_ptr, /* eglQueryNativeDisplayNV */ + epoxy_eglQueryNativePixmapNV_dispatch_table_rewrite_ptr, /* eglQueryNativePixmapNV */ + epoxy_eglQueryNativeWindowNV_dispatch_table_rewrite_ptr, /* eglQueryNativeWindowNV */ + epoxy_eglQueryOutputLayerAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputLayerAttribEXT */ + epoxy_eglQueryOutputLayerStringEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputLayerStringEXT */ + epoxy_eglQueryOutputPortAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputPortAttribEXT */ + epoxy_eglQueryOutputPortStringEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputPortStringEXT */ + epoxy_eglQueryStreamKHR_dispatch_table_rewrite_ptr, /* eglQueryStreamKHR */ + epoxy_eglQueryStreamTimeKHR_dispatch_table_rewrite_ptr, /* eglQueryStreamTimeKHR */ + epoxy_eglQueryStreamu64KHR_dispatch_table_rewrite_ptr, /* eglQueryStreamu64KHR */ + epoxy_eglQueryString_dispatch_table_rewrite_ptr, /* eglQueryString */ + epoxy_eglQuerySurface_dispatch_table_rewrite_ptr, /* eglQuerySurface */ + epoxy_eglQuerySurface64KHR_dispatch_table_rewrite_ptr, /* eglQuerySurface64KHR */ + epoxy_eglQuerySurfacePointerANGLE_dispatch_table_rewrite_ptr, /* eglQuerySurfacePointerANGLE */ + epoxy_eglReleaseTexImage_dispatch_table_rewrite_ptr, /* eglReleaseTexImage */ + epoxy_eglReleaseThread_dispatch_table_rewrite_ptr, /* eglReleaseThread */ + epoxy_eglSetBlobCacheFuncsANDROID_dispatch_table_rewrite_ptr, /* eglSetBlobCacheFuncsANDROID */ + epoxy_eglSetDamageRegionKHR_dispatch_table_rewrite_ptr, /* eglSetDamageRegionKHR */ + epoxy_eglSignalSyncKHR_dispatch_table_rewrite_ptr, /* eglSignalSyncKHR */ + epoxy_eglSignalSyncNV_dispatch_table_rewrite_ptr, /* eglSignalSyncNV */ + epoxy_eglStreamAttribKHR_dispatch_table_rewrite_ptr, /* eglStreamAttribKHR */ + epoxy_eglStreamConsumerAcquireKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerAcquireKHR */ + epoxy_eglStreamConsumerGLTextureExternalKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerGLTextureExternalKHR */ + epoxy_eglStreamConsumerOutputEXT_dispatch_table_rewrite_ptr, /* eglStreamConsumerOutputEXT */ + epoxy_eglStreamConsumerReleaseKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerReleaseKHR */ + epoxy_eglSurfaceAttrib_dispatch_table_rewrite_ptr, /* eglSurfaceAttrib */ + epoxy_eglSwapBuffers_dispatch_table_rewrite_ptr, /* eglSwapBuffers */ + epoxy_eglSwapBuffersRegion2NOK_dispatch_table_rewrite_ptr, /* eglSwapBuffersRegion2NOK */ + epoxy_eglSwapBuffersRegionNOK_dispatch_table_rewrite_ptr, /* eglSwapBuffersRegionNOK */ + epoxy_eglSwapBuffersWithDamageEXT_dispatch_table_rewrite_ptr, /* eglSwapBuffersWithDamageEXT */ + epoxy_eglSwapBuffersWithDamageKHR_dispatch_table_rewrite_ptr, /* eglSwapBuffersWithDamageKHR */ + epoxy_eglSwapInterval_dispatch_table_rewrite_ptr, /* eglSwapInterval */ + epoxy_eglTerminate_dispatch_table_rewrite_ptr, /* eglTerminate */ + epoxy_eglUnlockSurfaceKHR_dispatch_table_rewrite_ptr, /* eglUnlockSurfaceKHR */ + epoxy_eglWaitClient_dispatch_table_rewrite_ptr, /* eglWaitClient */ + epoxy_eglWaitGL_dispatch_table_rewrite_ptr, /* eglWaitGL */ + epoxy_eglWaitNative_dispatch_table_rewrite_ptr, /* eglWaitNative */ + epoxy_eglWaitSync_dispatch_table_rewrite_ptr, /* eglWaitSync */ + epoxy_eglWaitSyncKHR_dispatch_table_rewrite_ptr, /* eglWaitSyncKHR */ +}; + +uint32_t egl_tls_index; +uint32_t egl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(egl_tls_index); +} + +void +egl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +egl_switch_to_dispatch_table(void) +{ + epoxy_eglBindAPI = epoxy_eglBindAPI_dispatch_table_thunk; + epoxy_eglBindTexImage = epoxy_eglBindTexImage_dispatch_table_thunk; + epoxy_eglChooseConfig = epoxy_eglChooseConfig_dispatch_table_thunk; + epoxy_eglClientWaitSync = epoxy_eglClientWaitSync_dispatch_table_thunk; + epoxy_eglClientWaitSyncKHR = epoxy_eglClientWaitSyncKHR_dispatch_table_thunk; + epoxy_eglClientWaitSyncNV = epoxy_eglClientWaitSyncNV_dispatch_table_thunk; + epoxy_eglCopyBuffers = epoxy_eglCopyBuffers_dispatch_table_thunk; + epoxy_eglCreateContext = epoxy_eglCreateContext_dispatch_table_thunk; + epoxy_eglCreateDRMImageMESA = epoxy_eglCreateDRMImageMESA_dispatch_table_thunk; + epoxy_eglCreateFenceSyncNV = epoxy_eglCreateFenceSyncNV_dispatch_table_thunk; + epoxy_eglCreateImage = epoxy_eglCreateImage_dispatch_table_thunk; + epoxy_eglCreateImageKHR = epoxy_eglCreateImageKHR_dispatch_table_thunk; + epoxy_eglCreatePbufferFromClientBuffer = epoxy_eglCreatePbufferFromClientBuffer_dispatch_table_thunk; + epoxy_eglCreatePbufferSurface = epoxy_eglCreatePbufferSurface_dispatch_table_thunk; + epoxy_eglCreatePixmapSurface = epoxy_eglCreatePixmapSurface_dispatch_table_thunk; + epoxy_eglCreatePixmapSurfaceHI = epoxy_eglCreatePixmapSurfaceHI_dispatch_table_thunk; + epoxy_eglCreatePlatformPixmapSurface = epoxy_eglCreatePlatformPixmapSurface_dispatch_table_thunk; + epoxy_eglCreatePlatformPixmapSurfaceEXT = epoxy_eglCreatePlatformPixmapSurfaceEXT_dispatch_table_thunk; + epoxy_eglCreatePlatformWindowSurface = epoxy_eglCreatePlatformWindowSurface_dispatch_table_thunk; + epoxy_eglCreatePlatformWindowSurfaceEXT = epoxy_eglCreatePlatformWindowSurfaceEXT_dispatch_table_thunk; + epoxy_eglCreateStreamFromFileDescriptorKHR = epoxy_eglCreateStreamFromFileDescriptorKHR_dispatch_table_thunk; + epoxy_eglCreateStreamKHR = epoxy_eglCreateStreamKHR_dispatch_table_thunk; + epoxy_eglCreateStreamProducerSurfaceKHR = epoxy_eglCreateStreamProducerSurfaceKHR_dispatch_table_thunk; + epoxy_eglCreateStreamSyncNV = epoxy_eglCreateStreamSyncNV_dispatch_table_thunk; + epoxy_eglCreateSync = epoxy_eglCreateSync_dispatch_table_thunk; + epoxy_eglCreateSync64KHR = epoxy_eglCreateSync64KHR_dispatch_table_thunk; + epoxy_eglCreateSyncKHR = epoxy_eglCreateSyncKHR_dispatch_table_thunk; + epoxy_eglCreateWindowSurface = epoxy_eglCreateWindowSurface_dispatch_table_thunk; + epoxy_eglDestroyContext = epoxy_eglDestroyContext_dispatch_table_thunk; + epoxy_eglDestroyImage = epoxy_eglDestroyImage_dispatch_table_thunk; + epoxy_eglDestroyImageKHR = epoxy_eglDestroyImageKHR_dispatch_table_thunk; + epoxy_eglDestroyStreamKHR = epoxy_eglDestroyStreamKHR_dispatch_table_thunk; + epoxy_eglDestroySurface = epoxy_eglDestroySurface_dispatch_table_thunk; + epoxy_eglDestroySync = epoxy_eglDestroySync_dispatch_table_thunk; + epoxy_eglDestroySyncKHR = epoxy_eglDestroySyncKHR_dispatch_table_thunk; + epoxy_eglDestroySyncNV = epoxy_eglDestroySyncNV_dispatch_table_thunk; + epoxy_eglDupNativeFenceFDANDROID = epoxy_eglDupNativeFenceFDANDROID_dispatch_table_thunk; + epoxy_eglExportDMABUFImageMESA = epoxy_eglExportDMABUFImageMESA_dispatch_table_thunk; + epoxy_eglExportDMABUFImageQueryMESA = epoxy_eglExportDMABUFImageQueryMESA_dispatch_table_thunk; + epoxy_eglExportDRMImageMESA = epoxy_eglExportDRMImageMESA_dispatch_table_thunk; + epoxy_eglFenceNV = epoxy_eglFenceNV_dispatch_table_thunk; + epoxy_eglGetConfigAttrib = epoxy_eglGetConfigAttrib_dispatch_table_thunk; + epoxy_eglGetConfigs = epoxy_eglGetConfigs_dispatch_table_thunk; + epoxy_eglGetCurrentContext = epoxy_eglGetCurrentContext_dispatch_table_thunk; + epoxy_eglGetCurrentDisplay = epoxy_eglGetCurrentDisplay_dispatch_table_thunk; + epoxy_eglGetCurrentSurface = epoxy_eglGetCurrentSurface_dispatch_table_thunk; + epoxy_eglGetDisplay = epoxy_eglGetDisplay_dispatch_table_thunk; + epoxy_eglGetError = epoxy_eglGetError_dispatch_table_thunk; + epoxy_eglGetOutputLayersEXT = epoxy_eglGetOutputLayersEXT_dispatch_table_thunk; + epoxy_eglGetOutputPortsEXT = epoxy_eglGetOutputPortsEXT_dispatch_table_thunk; + epoxy_eglGetPlatformDisplay = epoxy_eglGetPlatformDisplay_dispatch_table_thunk; + epoxy_eglGetPlatformDisplayEXT = epoxy_eglGetPlatformDisplayEXT_dispatch_table_thunk; + epoxy_eglGetProcAddress = epoxy_eglGetProcAddress_dispatch_table_thunk; + epoxy_eglGetStreamFileDescriptorKHR = epoxy_eglGetStreamFileDescriptorKHR_dispatch_table_thunk; + epoxy_eglGetSyncAttrib = epoxy_eglGetSyncAttrib_dispatch_table_thunk; + epoxy_eglGetSyncAttribKHR = epoxy_eglGetSyncAttribKHR_dispatch_table_thunk; + epoxy_eglGetSyncAttribNV = epoxy_eglGetSyncAttribNV_dispatch_table_thunk; + epoxy_eglGetSystemTimeFrequencyNV = epoxy_eglGetSystemTimeFrequencyNV_dispatch_table_thunk; + epoxy_eglGetSystemTimeNV = epoxy_eglGetSystemTimeNV_dispatch_table_thunk; + epoxy_eglInitialize = epoxy_eglInitialize_dispatch_table_thunk; + epoxy_eglLockSurfaceKHR = epoxy_eglLockSurfaceKHR_dispatch_table_thunk; + epoxy_eglMakeCurrent = epoxy_eglMakeCurrent_dispatch_table_thunk; + epoxy_eglOutputLayerAttribEXT = epoxy_eglOutputLayerAttribEXT_dispatch_table_thunk; + epoxy_eglOutputPortAttribEXT = epoxy_eglOutputPortAttribEXT_dispatch_table_thunk; + epoxy_eglPostSubBufferNV = epoxy_eglPostSubBufferNV_dispatch_table_thunk; + epoxy_eglQueryAPI = epoxy_eglQueryAPI_dispatch_table_thunk; + epoxy_eglQueryContext = epoxy_eglQueryContext_dispatch_table_thunk; + epoxy_eglQueryDeviceAttribEXT = epoxy_eglQueryDeviceAttribEXT_dispatch_table_thunk; + epoxy_eglQueryDeviceStringEXT = epoxy_eglQueryDeviceStringEXT_dispatch_table_thunk; + epoxy_eglQueryDevicesEXT = epoxy_eglQueryDevicesEXT_dispatch_table_thunk; + epoxy_eglQueryDisplayAttribEXT = epoxy_eglQueryDisplayAttribEXT_dispatch_table_thunk; + epoxy_eglQueryNativeDisplayNV = epoxy_eglQueryNativeDisplayNV_dispatch_table_thunk; + epoxy_eglQueryNativePixmapNV = epoxy_eglQueryNativePixmapNV_dispatch_table_thunk; + epoxy_eglQueryNativeWindowNV = epoxy_eglQueryNativeWindowNV_dispatch_table_thunk; + epoxy_eglQueryOutputLayerAttribEXT = epoxy_eglQueryOutputLayerAttribEXT_dispatch_table_thunk; + epoxy_eglQueryOutputLayerStringEXT = epoxy_eglQueryOutputLayerStringEXT_dispatch_table_thunk; + epoxy_eglQueryOutputPortAttribEXT = epoxy_eglQueryOutputPortAttribEXT_dispatch_table_thunk; + epoxy_eglQueryOutputPortStringEXT = epoxy_eglQueryOutputPortStringEXT_dispatch_table_thunk; + epoxy_eglQueryStreamKHR = epoxy_eglQueryStreamKHR_dispatch_table_thunk; + epoxy_eglQueryStreamTimeKHR = epoxy_eglQueryStreamTimeKHR_dispatch_table_thunk; + epoxy_eglQueryStreamu64KHR = epoxy_eglQueryStreamu64KHR_dispatch_table_thunk; + epoxy_eglQueryString = epoxy_eglQueryString_dispatch_table_thunk; + epoxy_eglQuerySurface = epoxy_eglQuerySurface_dispatch_table_thunk; + epoxy_eglQuerySurface64KHR = epoxy_eglQuerySurface64KHR_dispatch_table_thunk; + epoxy_eglQuerySurfacePointerANGLE = epoxy_eglQuerySurfacePointerANGLE_dispatch_table_thunk; + epoxy_eglReleaseTexImage = epoxy_eglReleaseTexImage_dispatch_table_thunk; + epoxy_eglReleaseThread = epoxy_eglReleaseThread_dispatch_table_thunk; + epoxy_eglSetBlobCacheFuncsANDROID = epoxy_eglSetBlobCacheFuncsANDROID_dispatch_table_thunk; + epoxy_eglSetDamageRegionKHR = epoxy_eglSetDamageRegionKHR_dispatch_table_thunk; + epoxy_eglSignalSyncKHR = epoxy_eglSignalSyncKHR_dispatch_table_thunk; + epoxy_eglSignalSyncNV = epoxy_eglSignalSyncNV_dispatch_table_thunk; + epoxy_eglStreamAttribKHR = epoxy_eglStreamAttribKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerAcquireKHR = epoxy_eglStreamConsumerAcquireKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerGLTextureExternalKHR = epoxy_eglStreamConsumerGLTextureExternalKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerOutputEXT = epoxy_eglStreamConsumerOutputEXT_dispatch_table_thunk; + epoxy_eglStreamConsumerReleaseKHR = epoxy_eglStreamConsumerReleaseKHR_dispatch_table_thunk; + epoxy_eglSurfaceAttrib = epoxy_eglSurfaceAttrib_dispatch_table_thunk; + epoxy_eglSwapBuffers = epoxy_eglSwapBuffers_dispatch_table_thunk; + epoxy_eglSwapBuffersRegion2NOK = epoxy_eglSwapBuffersRegion2NOK_dispatch_table_thunk; + epoxy_eglSwapBuffersRegionNOK = epoxy_eglSwapBuffersRegionNOK_dispatch_table_thunk; + epoxy_eglSwapBuffersWithDamageEXT = epoxy_eglSwapBuffersWithDamageEXT_dispatch_table_thunk; + epoxy_eglSwapBuffersWithDamageKHR = epoxy_eglSwapBuffersWithDamageKHR_dispatch_table_thunk; + epoxy_eglSwapInterval = epoxy_eglSwapInterval_dispatch_table_thunk; + epoxy_eglTerminate = epoxy_eglTerminate_dispatch_table_thunk; + epoxy_eglUnlockSurfaceKHR = epoxy_eglUnlockSurfaceKHR_dispatch_table_thunk; + epoxy_eglWaitClient = epoxy_eglWaitClient_dispatch_table_thunk; + epoxy_eglWaitGL = epoxy_eglWaitGL_dispatch_table_thunk; + epoxy_eglWaitNative = epoxy_eglWaitNative_dispatch_table_thunk; + epoxy_eglWaitSync = epoxy_eglWaitSync_dispatch_table_thunk; + epoxy_eglWaitSyncKHR = epoxy_eglWaitSyncKHR_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNEGLBINDAPIPROC epoxy_eglBindAPI = epoxy_eglBindAPI_global_rewrite_ptr; + +PUBLIC PFNEGLBINDTEXIMAGEPROC epoxy_eglBindTexImage = epoxy_eglBindTexImage_global_rewrite_ptr; + +PUBLIC PFNEGLCHOOSECONFIGPROC epoxy_eglChooseConfig = epoxy_eglChooseConfig_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCPROC epoxy_eglClientWaitSync = epoxy_eglClientWaitSync_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCKHRPROC epoxy_eglClientWaitSyncKHR = epoxy_eglClientWaitSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCNVPROC epoxy_eglClientWaitSyncNV = epoxy_eglClientWaitSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCOPYBUFFERSPROC epoxy_eglCopyBuffers = epoxy_eglCopyBuffers_global_rewrite_ptr; + +PUBLIC PFNEGLCREATECONTEXTPROC epoxy_eglCreateContext = epoxy_eglCreateContext_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEDRMIMAGEMESAPROC epoxy_eglCreateDRMImageMESA = epoxy_eglCreateDRMImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEFENCESYNCNVPROC epoxy_eglCreateFenceSyncNV = epoxy_eglCreateFenceSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEIMAGEPROC epoxy_eglCreateImage = epoxy_eglCreateImage_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEIMAGEKHRPROC epoxy_eglCreateImageKHR = epoxy_eglCreateImageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC epoxy_eglCreatePbufferFromClientBuffer = epoxy_eglCreatePbufferFromClientBuffer_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPBUFFERSURFACEPROC epoxy_eglCreatePbufferSurface = epoxy_eglCreatePbufferSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPIXMAPSURFACEPROC epoxy_eglCreatePixmapSurface = epoxy_eglCreatePixmapSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPIXMAPSURFACEHIPROC epoxy_eglCreatePixmapSurfaceHI = epoxy_eglCreatePixmapSurfaceHI_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC epoxy_eglCreatePlatformPixmapSurface = epoxy_eglCreatePlatformPixmapSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC epoxy_eglCreatePlatformPixmapSurfaceEXT = epoxy_eglCreatePlatformPixmapSurfaceEXT_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMWINDOWSURFACEPROC epoxy_eglCreatePlatformWindowSurface = epoxy_eglCreatePlatformWindowSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC epoxy_eglCreatePlatformWindowSurfaceEXT = epoxy_eglCreatePlatformWindowSurfaceEXT_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC epoxy_eglCreateStreamFromFileDescriptorKHR = epoxy_eglCreateStreamFromFileDescriptorKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMKHRPROC epoxy_eglCreateStreamKHR = epoxy_eglCreateStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC epoxy_eglCreateStreamProducerSurfaceKHR = epoxy_eglCreateStreamProducerSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMSYNCNVPROC epoxy_eglCreateStreamSyncNV = epoxy_eglCreateStreamSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNCPROC epoxy_eglCreateSync = epoxy_eglCreateSync_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNC64KHRPROC epoxy_eglCreateSync64KHR = epoxy_eglCreateSync64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNCKHRPROC epoxy_eglCreateSyncKHR = epoxy_eglCreateSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEWINDOWSURFACEPROC epoxy_eglCreateWindowSurface = epoxy_eglCreateWindowSurface_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYCONTEXTPROC epoxy_eglDestroyContext = epoxy_eglDestroyContext_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYIMAGEPROC epoxy_eglDestroyImage = epoxy_eglDestroyImage_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYIMAGEKHRPROC epoxy_eglDestroyImageKHR = epoxy_eglDestroyImageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSTREAMKHRPROC epoxy_eglDestroyStreamKHR = epoxy_eglDestroyStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSURFACEPROC epoxy_eglDestroySurface = epoxy_eglDestroySurface_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCPROC epoxy_eglDestroySync = epoxy_eglDestroySync_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCKHRPROC epoxy_eglDestroySyncKHR = epoxy_eglDestroySyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCNVPROC epoxy_eglDestroySyncNV = epoxy_eglDestroySyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLDUPNATIVEFENCEFDANDROIDPROC epoxy_eglDupNativeFenceFDANDROID = epoxy_eglDupNativeFenceFDANDROID_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDMABUFIMAGEMESAPROC epoxy_eglExportDMABUFImageMESA = epoxy_eglExportDMABUFImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC epoxy_eglExportDMABUFImageQueryMESA = epoxy_eglExportDMABUFImageQueryMESA_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDRMIMAGEMESAPROC epoxy_eglExportDRMImageMESA = epoxy_eglExportDRMImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLFENCENVPROC epoxy_eglFenceNV = epoxy_eglFenceNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETCONFIGATTRIBPROC epoxy_eglGetConfigAttrib = epoxy_eglGetConfigAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLGETCONFIGSPROC epoxy_eglGetConfigs = epoxy_eglGetConfigs_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTCONTEXTPROC epoxy_eglGetCurrentContext = epoxy_eglGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTDISPLAYPROC epoxy_eglGetCurrentDisplay = epoxy_eglGetCurrentDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTSURFACEPROC epoxy_eglGetCurrentSurface = epoxy_eglGetCurrentSurface_global_rewrite_ptr; + +PUBLIC PFNEGLGETDISPLAYPROC epoxy_eglGetDisplay = epoxy_eglGetDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETERRORPROC epoxy_eglGetError = epoxy_eglGetError_global_rewrite_ptr; + +PUBLIC PFNEGLGETOUTPUTLAYERSEXTPROC epoxy_eglGetOutputLayersEXT = epoxy_eglGetOutputLayersEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETOUTPUTPORTSEXTPROC epoxy_eglGetOutputPortsEXT = epoxy_eglGetOutputPortsEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETPLATFORMDISPLAYPROC epoxy_eglGetPlatformDisplay = epoxy_eglGetPlatformDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETPLATFORMDISPLAYEXTPROC epoxy_eglGetPlatformDisplayEXT = epoxy_eglGetPlatformDisplayEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETPROCADDRESSPROC epoxy_eglGetProcAddress = epoxy_eglGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC epoxy_eglGetStreamFileDescriptorKHR = epoxy_eglGetStreamFileDescriptorKHR_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBPROC epoxy_eglGetSyncAttrib = epoxy_eglGetSyncAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBKHRPROC epoxy_eglGetSyncAttribKHR = epoxy_eglGetSyncAttribKHR_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBNVPROC epoxy_eglGetSyncAttribNV = epoxy_eglGetSyncAttribNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC epoxy_eglGetSystemTimeFrequencyNV = epoxy_eglGetSystemTimeFrequencyNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYSTEMTIMENVPROC epoxy_eglGetSystemTimeNV = epoxy_eglGetSystemTimeNV_global_rewrite_ptr; + +PUBLIC PFNEGLINITIALIZEPROC epoxy_eglInitialize = epoxy_eglInitialize_global_rewrite_ptr; + +PUBLIC PFNEGLLOCKSURFACEKHRPROC epoxy_eglLockSurfaceKHR = epoxy_eglLockSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLMAKECURRENTPROC epoxy_eglMakeCurrent = epoxy_eglMakeCurrent_global_rewrite_ptr; + +PUBLIC PFNEGLOUTPUTLAYERATTRIBEXTPROC epoxy_eglOutputLayerAttribEXT = epoxy_eglOutputLayerAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLOUTPUTPORTATTRIBEXTPROC epoxy_eglOutputPortAttribEXT = epoxy_eglOutputPortAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLPOSTSUBBUFFERNVPROC epoxy_eglPostSubBufferNV = epoxy_eglPostSubBufferNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYAPIPROC epoxy_eglQueryAPI = epoxy_eglQueryAPI_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYCONTEXTPROC epoxy_eglQueryContext = epoxy_eglQueryContext_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICEATTRIBEXTPROC epoxy_eglQueryDeviceAttribEXT = epoxy_eglQueryDeviceAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICESTRINGEXTPROC epoxy_eglQueryDeviceStringEXT = epoxy_eglQueryDeviceStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICESEXTPROC epoxy_eglQueryDevicesEXT = epoxy_eglQueryDevicesEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDISPLAYATTRIBEXTPROC epoxy_eglQueryDisplayAttribEXT = epoxy_eglQueryDisplayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEDISPLAYNVPROC epoxy_eglQueryNativeDisplayNV = epoxy_eglQueryNativeDisplayNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEPIXMAPNVPROC epoxy_eglQueryNativePixmapNV = epoxy_eglQueryNativePixmapNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEWINDOWNVPROC epoxy_eglQueryNativeWindowNV = epoxy_eglQueryNativeWindowNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC epoxy_eglQueryOutputLayerAttribEXT = epoxy_eglQueryOutputLayerAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC epoxy_eglQueryOutputLayerStringEXT = epoxy_eglQueryOutputLayerStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC epoxy_eglQueryOutputPortAttribEXT = epoxy_eglQueryOutputPortAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC epoxy_eglQueryOutputPortStringEXT = epoxy_eglQueryOutputPortStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMKHRPROC epoxy_eglQueryStreamKHR = epoxy_eglQueryStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMTIMEKHRPROC epoxy_eglQueryStreamTimeKHR = epoxy_eglQueryStreamTimeKHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMU64KHRPROC epoxy_eglQueryStreamu64KHR = epoxy_eglQueryStreamu64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTRINGPROC epoxy_eglQueryString = epoxy_eglQueryString_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACEPROC epoxy_eglQuerySurface = epoxy_eglQuerySurface_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACE64KHRPROC epoxy_eglQuerySurface64KHR = epoxy_eglQuerySurface64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACEPOINTERANGLEPROC epoxy_eglQuerySurfacePointerANGLE = epoxy_eglQuerySurfacePointerANGLE_global_rewrite_ptr; + +PUBLIC PFNEGLRELEASETEXIMAGEPROC epoxy_eglReleaseTexImage = epoxy_eglReleaseTexImage_global_rewrite_ptr; + +PUBLIC PFNEGLRELEASETHREADPROC epoxy_eglReleaseThread = epoxy_eglReleaseThread_global_rewrite_ptr; + +PUBLIC PFNEGLSETBLOBCACHEFUNCSANDROIDPROC epoxy_eglSetBlobCacheFuncsANDROID = epoxy_eglSetBlobCacheFuncsANDROID_global_rewrite_ptr; + +PUBLIC PFNEGLSETDAMAGEREGIONKHRPROC epoxy_eglSetDamageRegionKHR = epoxy_eglSetDamageRegionKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSIGNALSYNCKHRPROC epoxy_eglSignalSyncKHR = epoxy_eglSignalSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSIGNALSYNCNVPROC epoxy_eglSignalSyncNV = epoxy_eglSignalSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMATTRIBKHRPROC epoxy_eglStreamAttribKHR = epoxy_eglStreamAttribKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERACQUIREKHRPROC epoxy_eglStreamConsumerAcquireKHR = epoxy_eglStreamConsumerAcquireKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC epoxy_eglStreamConsumerGLTextureExternalKHR = epoxy_eglStreamConsumerGLTextureExternalKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMEROUTPUTEXTPROC epoxy_eglStreamConsumerOutputEXT = epoxy_eglStreamConsumerOutputEXT_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERRELEASEKHRPROC epoxy_eglStreamConsumerReleaseKHR = epoxy_eglStreamConsumerReleaseKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSURFACEATTRIBPROC epoxy_eglSurfaceAttrib = epoxy_eglSurfaceAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSPROC epoxy_eglSwapBuffers = epoxy_eglSwapBuffers_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSREGION2NOKPROC epoxy_eglSwapBuffersRegion2NOK = epoxy_eglSwapBuffersRegion2NOK_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSREGIONNOKPROC epoxy_eglSwapBuffersRegionNOK = epoxy_eglSwapBuffersRegionNOK_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC epoxy_eglSwapBuffersWithDamageEXT = epoxy_eglSwapBuffersWithDamageEXT_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC epoxy_eglSwapBuffersWithDamageKHR = epoxy_eglSwapBuffersWithDamageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPINTERVALPROC epoxy_eglSwapInterval = epoxy_eglSwapInterval_global_rewrite_ptr; + +PUBLIC PFNEGLTERMINATEPROC epoxy_eglTerminate = epoxy_eglTerminate_global_rewrite_ptr; + +PUBLIC PFNEGLUNLOCKSURFACEKHRPROC epoxy_eglUnlockSurfaceKHR = epoxy_eglUnlockSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLWAITCLIENTPROC epoxy_eglWaitClient = epoxy_eglWaitClient_global_rewrite_ptr; + +PUBLIC PFNEGLWAITGLPROC epoxy_eglWaitGL = epoxy_eglWaitGL_global_rewrite_ptr; + +PUBLIC PFNEGLWAITNATIVEPROC epoxy_eglWaitNative = epoxy_eglWaitNative_global_rewrite_ptr; + +PUBLIC PFNEGLWAITSYNCPROC epoxy_eglWaitSync = epoxy_eglWaitSync_global_rewrite_ptr; + +PUBLIC PFNEGLWAITSYNCKHRPROC epoxy_eglWaitSyncKHR = epoxy_eglWaitSyncKHR_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/gl_generated_dispatch.c b/Engine/lib/epoxy/src/gl_generated_dispatch.c new file mode 100644 index 0000000000..131090ca8b --- /dev/null +++ b/Engine/lib/epoxy/src/gl_generated_dispatch.c @@ -0,0 +1,124424 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + * + * Copyright (c) 2013-2015 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/gl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNGLACCUMPROC epoxy_glAccum; + PFNGLACCUMXOESPROC epoxy_glAccumxOES; + PFNGLACTIVEPROGRAMEXTPROC epoxy_glActiveProgramEXT; + PFNGLACTIVESHADERPROGRAMPROC epoxy_glActiveShaderProgram; + PFNGLACTIVESHADERPROGRAMEXTPROC epoxy_glActiveShaderProgramEXT; + PFNGLACTIVESTENCILFACEEXTPROC epoxy_glActiveStencilFaceEXT; + PFNGLACTIVETEXTUREPROC epoxy_glActiveTexture; + PFNGLACTIVETEXTUREARBPROC epoxy_glActiveTextureARB; + PFNGLACTIVEVARYINGNVPROC epoxy_glActiveVaryingNV; + PFNGLALPHAFRAGMENTOP1ATIPROC epoxy_glAlphaFragmentOp1ATI; + PFNGLALPHAFRAGMENTOP2ATIPROC epoxy_glAlphaFragmentOp2ATI; + PFNGLALPHAFRAGMENTOP3ATIPROC epoxy_glAlphaFragmentOp3ATI; + PFNGLALPHAFUNCPROC epoxy_glAlphaFunc; + PFNGLALPHAFUNCQCOMPROC epoxy_glAlphaFuncQCOM; + PFNGLALPHAFUNCXPROC epoxy_glAlphaFuncx; + PFNGLALPHAFUNCXOESPROC epoxy_glAlphaFuncxOES; + PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC epoxy_glApplyFramebufferAttachmentCMAAINTEL; + PFNGLAPPLYTEXTUREEXTPROC epoxy_glApplyTextureEXT; + PFNGLAREPROGRAMSRESIDENTNVPROC epoxy_glAreProgramsResidentNV; + PFNGLARETEXTURESRESIDENTPROC epoxy_glAreTexturesResident; + PFNGLARETEXTURESRESIDENTEXTPROC epoxy_glAreTexturesResidentEXT; + PFNGLARRAYELEMENTPROC epoxy_glArrayElement; + PFNGLARRAYELEMENTEXTPROC epoxy_glArrayElementEXT; + PFNGLARRAYOBJECTATIPROC epoxy_glArrayObjectATI; + PFNGLASYNCMARKERSGIXPROC epoxy_glAsyncMarkerSGIX; + PFNGLATTACHOBJECTARBPROC epoxy_glAttachObjectARB; + PFNGLATTACHSHADERPROC epoxy_glAttachShader; + PFNGLBEGINPROC epoxy_glBegin_unwrapped; + PFNGLBEGINCONDITIONALRENDERPROC epoxy_glBeginConditionalRender; + PFNGLBEGINCONDITIONALRENDERNVPROC epoxy_glBeginConditionalRenderNV; + PFNGLBEGINCONDITIONALRENDERNVXPROC epoxy_glBeginConditionalRenderNVX; + PFNGLBEGINFRAGMENTSHADERATIPROC epoxy_glBeginFragmentShaderATI; + PFNGLBEGINOCCLUSIONQUERYNVPROC epoxy_glBeginOcclusionQueryNV; + PFNGLBEGINPERFMONITORAMDPROC epoxy_glBeginPerfMonitorAMD; + PFNGLBEGINPERFQUERYINTELPROC epoxy_glBeginPerfQueryINTEL; + PFNGLBEGINQUERYPROC epoxy_glBeginQuery; + PFNGLBEGINQUERYARBPROC epoxy_glBeginQueryARB; + PFNGLBEGINQUERYEXTPROC epoxy_glBeginQueryEXT; + PFNGLBEGINQUERYINDEXEDPROC epoxy_glBeginQueryIndexed; + PFNGLBEGINTRANSFORMFEEDBACKPROC epoxy_glBeginTransformFeedback; + PFNGLBEGINTRANSFORMFEEDBACKEXTPROC epoxy_glBeginTransformFeedbackEXT; + PFNGLBEGINTRANSFORMFEEDBACKNVPROC epoxy_glBeginTransformFeedbackNV; + PFNGLBEGINVERTEXSHADEREXTPROC epoxy_glBeginVertexShaderEXT; + PFNGLBEGINVIDEOCAPTURENVPROC epoxy_glBeginVideoCaptureNV; + PFNGLBINDATTRIBLOCATIONPROC epoxy_glBindAttribLocation; + PFNGLBINDATTRIBLOCATIONARBPROC epoxy_glBindAttribLocationARB; + PFNGLBINDBUFFERPROC epoxy_glBindBuffer; + PFNGLBINDBUFFERARBPROC epoxy_glBindBufferARB; + PFNGLBINDBUFFERBASEPROC epoxy_glBindBufferBase; + PFNGLBINDBUFFERBASEEXTPROC epoxy_glBindBufferBaseEXT; + PFNGLBINDBUFFERBASENVPROC epoxy_glBindBufferBaseNV; + PFNGLBINDBUFFEROFFSETEXTPROC epoxy_glBindBufferOffsetEXT; + PFNGLBINDBUFFEROFFSETNVPROC epoxy_glBindBufferOffsetNV; + PFNGLBINDBUFFERRANGEPROC epoxy_glBindBufferRange; + PFNGLBINDBUFFERRANGEEXTPROC epoxy_glBindBufferRangeEXT; + PFNGLBINDBUFFERRANGENVPROC epoxy_glBindBufferRangeNV; + PFNGLBINDBUFFERSBASEPROC epoxy_glBindBuffersBase; + PFNGLBINDBUFFERSRANGEPROC epoxy_glBindBuffersRange; + PFNGLBINDFRAGDATALOCATIONPROC epoxy_glBindFragDataLocation; + PFNGLBINDFRAGDATALOCATIONEXTPROC epoxy_glBindFragDataLocationEXT; + PFNGLBINDFRAGDATALOCATIONINDEXEDPROC epoxy_glBindFragDataLocationIndexed; + PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC epoxy_glBindFragDataLocationIndexedEXT; + PFNGLBINDFRAGMENTSHADERATIPROC epoxy_glBindFragmentShaderATI; + PFNGLBINDFRAMEBUFFERPROC epoxy_glBindFramebuffer; + PFNGLBINDFRAMEBUFFEREXTPROC epoxy_glBindFramebufferEXT; + PFNGLBINDFRAMEBUFFEROESPROC epoxy_glBindFramebufferOES; + PFNGLBINDIMAGETEXTUREPROC epoxy_glBindImageTexture; + PFNGLBINDIMAGETEXTUREEXTPROC epoxy_glBindImageTextureEXT; + PFNGLBINDIMAGETEXTURESPROC epoxy_glBindImageTextures; + PFNGLBINDLIGHTPARAMETEREXTPROC epoxy_glBindLightParameterEXT; + PFNGLBINDMATERIALPARAMETEREXTPROC epoxy_glBindMaterialParameterEXT; + PFNGLBINDMULTITEXTUREEXTPROC epoxy_glBindMultiTextureEXT; + PFNGLBINDPARAMETEREXTPROC epoxy_glBindParameterEXT; + PFNGLBINDPROGRAMARBPROC epoxy_glBindProgramARB; + PFNGLBINDPROGRAMNVPROC epoxy_glBindProgramNV; + PFNGLBINDPROGRAMPIPELINEPROC epoxy_glBindProgramPipeline; + PFNGLBINDPROGRAMPIPELINEEXTPROC epoxy_glBindProgramPipelineEXT; + PFNGLBINDRENDERBUFFERPROC epoxy_glBindRenderbuffer; + PFNGLBINDRENDERBUFFEREXTPROC epoxy_glBindRenderbufferEXT; + PFNGLBINDRENDERBUFFEROESPROC epoxy_glBindRenderbufferOES; + PFNGLBINDSAMPLERPROC epoxy_glBindSampler; + PFNGLBINDSAMPLERSPROC epoxy_glBindSamplers; + PFNGLBINDTEXGENPARAMETEREXTPROC epoxy_glBindTexGenParameterEXT; + PFNGLBINDTEXTUREPROC epoxy_glBindTexture; + PFNGLBINDTEXTUREEXTPROC epoxy_glBindTextureEXT; + PFNGLBINDTEXTUREUNITPROC epoxy_glBindTextureUnit; + PFNGLBINDTEXTUREUNITPARAMETEREXTPROC epoxy_glBindTextureUnitParameterEXT; + PFNGLBINDTEXTURESPROC epoxy_glBindTextures; + PFNGLBINDTRANSFORMFEEDBACKPROC epoxy_glBindTransformFeedback; + PFNGLBINDTRANSFORMFEEDBACKNVPROC epoxy_glBindTransformFeedbackNV; + PFNGLBINDVERTEXARRAYPROC epoxy_glBindVertexArray; + PFNGLBINDVERTEXARRAYAPPLEPROC epoxy_glBindVertexArrayAPPLE; + PFNGLBINDVERTEXARRAYOESPROC epoxy_glBindVertexArrayOES; + PFNGLBINDVERTEXBUFFERPROC epoxy_glBindVertexBuffer; + PFNGLBINDVERTEXBUFFERSPROC epoxy_glBindVertexBuffers; + PFNGLBINDVERTEXSHADEREXTPROC epoxy_glBindVertexShaderEXT; + PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC epoxy_glBindVideoCaptureStreamBufferNV; + PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC epoxy_glBindVideoCaptureStreamTextureNV; + PFNGLBINORMAL3BEXTPROC epoxy_glBinormal3bEXT; + PFNGLBINORMAL3BVEXTPROC epoxy_glBinormal3bvEXT; + PFNGLBINORMAL3DEXTPROC epoxy_glBinormal3dEXT; + PFNGLBINORMAL3DVEXTPROC epoxy_glBinormal3dvEXT; + PFNGLBINORMAL3FEXTPROC epoxy_glBinormal3fEXT; + PFNGLBINORMAL3FVEXTPROC epoxy_glBinormal3fvEXT; + PFNGLBINORMAL3IEXTPROC epoxy_glBinormal3iEXT; + PFNGLBINORMAL3IVEXTPROC epoxy_glBinormal3ivEXT; + PFNGLBINORMAL3SEXTPROC epoxy_glBinormal3sEXT; + PFNGLBINORMAL3SVEXTPROC epoxy_glBinormal3svEXT; + PFNGLBINORMALPOINTEREXTPROC epoxy_glBinormalPointerEXT; + PFNGLBITMAPPROC epoxy_glBitmap; + PFNGLBITMAPXOESPROC epoxy_glBitmapxOES; + PFNGLBLENDBARRIERPROC epoxy_glBlendBarrier; + PFNGLBLENDBARRIERKHRPROC epoxy_glBlendBarrierKHR; + PFNGLBLENDBARRIERNVPROC epoxy_glBlendBarrierNV; + PFNGLBLENDCOLORPROC epoxy_glBlendColor; + PFNGLBLENDCOLOREXTPROC epoxy_glBlendColorEXT; + PFNGLBLENDCOLORXOESPROC epoxy_glBlendColorxOES; + PFNGLBLENDEQUATIONPROC epoxy_glBlendEquation; + PFNGLBLENDEQUATIONEXTPROC epoxy_glBlendEquationEXT; + PFNGLBLENDEQUATIONINDEXEDAMDPROC epoxy_glBlendEquationIndexedAMD; + PFNGLBLENDEQUATIONOESPROC epoxy_glBlendEquationOES; + PFNGLBLENDEQUATIONSEPARATEPROC epoxy_glBlendEquationSeparate; + PFNGLBLENDEQUATIONSEPARATEEXTPROC epoxy_glBlendEquationSeparateEXT; + PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC epoxy_glBlendEquationSeparateIndexedAMD; + PFNGLBLENDEQUATIONSEPARATEOESPROC epoxy_glBlendEquationSeparateOES; + PFNGLBLENDEQUATIONSEPARATEIPROC epoxy_glBlendEquationSeparatei; + PFNGLBLENDEQUATIONSEPARATEIARBPROC epoxy_glBlendEquationSeparateiARB; + PFNGLBLENDEQUATIONSEPARATEIEXTPROC epoxy_glBlendEquationSeparateiEXT; + PFNGLBLENDEQUATIONSEPARATEIOESPROC epoxy_glBlendEquationSeparateiOES; + PFNGLBLENDEQUATIONIPROC epoxy_glBlendEquationi; + PFNGLBLENDEQUATIONIARBPROC epoxy_glBlendEquationiARB; + PFNGLBLENDEQUATIONIEXTPROC epoxy_glBlendEquationiEXT; + PFNGLBLENDEQUATIONIOESPROC epoxy_glBlendEquationiOES; + PFNGLBLENDFUNCPROC epoxy_glBlendFunc; + PFNGLBLENDFUNCINDEXEDAMDPROC epoxy_glBlendFuncIndexedAMD; + PFNGLBLENDFUNCSEPARATEPROC epoxy_glBlendFuncSeparate; + PFNGLBLENDFUNCSEPARATEEXTPROC epoxy_glBlendFuncSeparateEXT; + PFNGLBLENDFUNCSEPARATEINGRPROC epoxy_glBlendFuncSeparateINGR; + PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC epoxy_glBlendFuncSeparateIndexedAMD; + PFNGLBLENDFUNCSEPARATEOESPROC epoxy_glBlendFuncSeparateOES; + PFNGLBLENDFUNCSEPARATEIPROC epoxy_glBlendFuncSeparatei; + PFNGLBLENDFUNCSEPARATEIARBPROC epoxy_glBlendFuncSeparateiARB; + PFNGLBLENDFUNCSEPARATEIEXTPROC epoxy_glBlendFuncSeparateiEXT; + PFNGLBLENDFUNCSEPARATEIOESPROC epoxy_glBlendFuncSeparateiOES; + PFNGLBLENDFUNCIPROC epoxy_glBlendFunci; + PFNGLBLENDFUNCIARBPROC epoxy_glBlendFunciARB; + PFNGLBLENDFUNCIEXTPROC epoxy_glBlendFunciEXT; + PFNGLBLENDFUNCIOESPROC epoxy_glBlendFunciOES; + PFNGLBLENDPARAMETERINVPROC epoxy_glBlendParameteriNV; + PFNGLBLITFRAMEBUFFERPROC epoxy_glBlitFramebuffer; + PFNGLBLITFRAMEBUFFERANGLEPROC epoxy_glBlitFramebufferANGLE; + PFNGLBLITFRAMEBUFFEREXTPROC epoxy_glBlitFramebufferEXT; + PFNGLBLITFRAMEBUFFERNVPROC epoxy_glBlitFramebufferNV; + PFNGLBLITNAMEDFRAMEBUFFERPROC epoxy_glBlitNamedFramebuffer; + PFNGLBUFFERADDRESSRANGENVPROC epoxy_glBufferAddressRangeNV; + PFNGLBUFFERDATAPROC epoxy_glBufferData; + PFNGLBUFFERDATAARBPROC epoxy_glBufferDataARB; + PFNGLBUFFERPAGECOMMITMENTARBPROC epoxy_glBufferPageCommitmentARB; + PFNGLBUFFERPARAMETERIAPPLEPROC epoxy_glBufferParameteriAPPLE; + PFNGLBUFFERSTORAGEPROC epoxy_glBufferStorage; + PFNGLBUFFERSTORAGEEXTPROC epoxy_glBufferStorageEXT; + PFNGLBUFFERSUBDATAPROC epoxy_glBufferSubData; + PFNGLBUFFERSUBDATAARBPROC epoxy_glBufferSubDataARB; + PFNGLCALLCOMMANDLISTNVPROC epoxy_glCallCommandListNV; + PFNGLCALLLISTPROC epoxy_glCallList; + PFNGLCALLLISTSPROC epoxy_glCallLists; + PFNGLCHECKFRAMEBUFFERSTATUSPROC epoxy_glCheckFramebufferStatus; + PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckFramebufferStatusEXT; + PFNGLCHECKFRAMEBUFFERSTATUSOESPROC epoxy_glCheckFramebufferStatusOES; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC epoxy_glCheckNamedFramebufferStatus; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckNamedFramebufferStatusEXT; + PFNGLCLAMPCOLORPROC epoxy_glClampColor; + PFNGLCLAMPCOLORARBPROC epoxy_glClampColorARB; + PFNGLCLEARPROC epoxy_glClear; + PFNGLCLEARACCUMPROC epoxy_glClearAccum; + PFNGLCLEARACCUMXOESPROC epoxy_glClearAccumxOES; + PFNGLCLEARBUFFERDATAPROC epoxy_glClearBufferData; + PFNGLCLEARBUFFERSUBDATAPROC epoxy_glClearBufferSubData; + PFNGLCLEARBUFFERFIPROC epoxy_glClearBufferfi; + PFNGLCLEARBUFFERFVPROC epoxy_glClearBufferfv; + PFNGLCLEARBUFFERIVPROC epoxy_glClearBufferiv; + PFNGLCLEARBUFFERUIVPROC epoxy_glClearBufferuiv; + PFNGLCLEARCOLORPROC epoxy_glClearColor; + PFNGLCLEARCOLORIIEXTPROC epoxy_glClearColorIiEXT; + PFNGLCLEARCOLORIUIEXTPROC epoxy_glClearColorIuiEXT; + PFNGLCLEARCOLORXPROC epoxy_glClearColorx; + PFNGLCLEARCOLORXOESPROC epoxy_glClearColorxOES; + PFNGLCLEARDEPTHPROC epoxy_glClearDepth; + PFNGLCLEARDEPTHDNVPROC epoxy_glClearDepthdNV; + PFNGLCLEARDEPTHFPROC epoxy_glClearDepthf; + PFNGLCLEARDEPTHFOESPROC epoxy_glClearDepthfOES; + PFNGLCLEARDEPTHXPROC epoxy_glClearDepthx; + PFNGLCLEARDEPTHXOESPROC epoxy_glClearDepthxOES; + PFNGLCLEARINDEXPROC epoxy_glClearIndex; + PFNGLCLEARNAMEDBUFFERDATAPROC epoxy_glClearNamedBufferData; + PFNGLCLEARNAMEDBUFFERDATAEXTPROC epoxy_glClearNamedBufferDataEXT; + PFNGLCLEARNAMEDBUFFERSUBDATAPROC epoxy_glClearNamedBufferSubData; + PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC epoxy_glClearNamedBufferSubDataEXT; + PFNGLCLEARNAMEDFRAMEBUFFERFIPROC epoxy_glClearNamedFramebufferfi; + PFNGLCLEARNAMEDFRAMEBUFFERFVPROC epoxy_glClearNamedFramebufferfv; + PFNGLCLEARNAMEDFRAMEBUFFERIVPROC epoxy_glClearNamedFramebufferiv; + PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC epoxy_glClearNamedFramebufferuiv; + PFNGLCLEARSTENCILPROC epoxy_glClearStencil; + PFNGLCLEARTEXIMAGEPROC epoxy_glClearTexImage; + PFNGLCLEARTEXSUBIMAGEPROC epoxy_glClearTexSubImage; + PFNGLCLIENTACTIVETEXTUREPROC epoxy_glClientActiveTexture; + PFNGLCLIENTACTIVETEXTUREARBPROC epoxy_glClientActiveTextureARB; + PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC epoxy_glClientActiveVertexStreamATI; + PFNGLCLIENTATTRIBDEFAULTEXTPROC epoxy_glClientAttribDefaultEXT; + PFNGLCLIENTWAITSYNCPROC epoxy_glClientWaitSync; + PFNGLCLIENTWAITSYNCAPPLEPROC epoxy_glClientWaitSyncAPPLE; + PFNGLCLIPCONTROLPROC epoxy_glClipControl; + PFNGLCLIPPLANEPROC epoxy_glClipPlane; + PFNGLCLIPPLANEFPROC epoxy_glClipPlanef; + PFNGLCLIPPLANEFIMGPROC epoxy_glClipPlanefIMG; + PFNGLCLIPPLANEFOESPROC epoxy_glClipPlanefOES; + PFNGLCLIPPLANEXPROC epoxy_glClipPlanex; + PFNGLCLIPPLANEXIMGPROC epoxy_glClipPlanexIMG; + PFNGLCLIPPLANEXOESPROC epoxy_glClipPlanexOES; + PFNGLCOLOR3BPROC epoxy_glColor3b; + PFNGLCOLOR3BVPROC epoxy_glColor3bv; + PFNGLCOLOR3DPROC epoxy_glColor3d; + PFNGLCOLOR3DVPROC epoxy_glColor3dv; + PFNGLCOLOR3FPROC epoxy_glColor3f; + PFNGLCOLOR3FVERTEX3FSUNPROC epoxy_glColor3fVertex3fSUN; + PFNGLCOLOR3FVERTEX3FVSUNPROC epoxy_glColor3fVertex3fvSUN; + PFNGLCOLOR3FVPROC epoxy_glColor3fv; + PFNGLCOLOR3HNVPROC epoxy_glColor3hNV; + PFNGLCOLOR3HVNVPROC epoxy_glColor3hvNV; + PFNGLCOLOR3IPROC epoxy_glColor3i; + PFNGLCOLOR3IVPROC epoxy_glColor3iv; + PFNGLCOLOR3SPROC epoxy_glColor3s; + PFNGLCOLOR3SVPROC epoxy_glColor3sv; + PFNGLCOLOR3UBPROC epoxy_glColor3ub; + PFNGLCOLOR3UBVPROC epoxy_glColor3ubv; + PFNGLCOLOR3UIPROC epoxy_glColor3ui; + PFNGLCOLOR3UIVPROC epoxy_glColor3uiv; + PFNGLCOLOR3USPROC epoxy_glColor3us; + PFNGLCOLOR3USVPROC epoxy_glColor3usv; + PFNGLCOLOR3XOESPROC epoxy_glColor3xOES; + PFNGLCOLOR3XVOESPROC epoxy_glColor3xvOES; + PFNGLCOLOR4BPROC epoxy_glColor4b; + PFNGLCOLOR4BVPROC epoxy_glColor4bv; + PFNGLCOLOR4DPROC epoxy_glColor4d; + PFNGLCOLOR4DVPROC epoxy_glColor4dv; + PFNGLCOLOR4FPROC epoxy_glColor4f; + PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glColor4fNormal3fVertex3fSUN; + PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glColor4fNormal3fVertex3fvSUN; + PFNGLCOLOR4FVPROC epoxy_glColor4fv; + PFNGLCOLOR4HNVPROC epoxy_glColor4hNV; + PFNGLCOLOR4HVNVPROC epoxy_glColor4hvNV; + PFNGLCOLOR4IPROC epoxy_glColor4i; + PFNGLCOLOR4IVPROC epoxy_glColor4iv; + PFNGLCOLOR4SPROC epoxy_glColor4s; + PFNGLCOLOR4SVPROC epoxy_glColor4sv; + PFNGLCOLOR4UBPROC epoxy_glColor4ub; + PFNGLCOLOR4UBVERTEX2FSUNPROC epoxy_glColor4ubVertex2fSUN; + PFNGLCOLOR4UBVERTEX2FVSUNPROC epoxy_glColor4ubVertex2fvSUN; + PFNGLCOLOR4UBVERTEX3FSUNPROC epoxy_glColor4ubVertex3fSUN; + PFNGLCOLOR4UBVERTEX3FVSUNPROC epoxy_glColor4ubVertex3fvSUN; + PFNGLCOLOR4UBVPROC epoxy_glColor4ubv; + PFNGLCOLOR4UIPROC epoxy_glColor4ui; + PFNGLCOLOR4UIVPROC epoxy_glColor4uiv; + PFNGLCOLOR4USPROC epoxy_glColor4us; + PFNGLCOLOR4USVPROC epoxy_glColor4usv; + PFNGLCOLOR4XPROC epoxy_glColor4x; + PFNGLCOLOR4XOESPROC epoxy_glColor4xOES; + PFNGLCOLOR4XVOESPROC epoxy_glColor4xvOES; + PFNGLCOLORFORMATNVPROC epoxy_glColorFormatNV; + PFNGLCOLORFRAGMENTOP1ATIPROC epoxy_glColorFragmentOp1ATI; + PFNGLCOLORFRAGMENTOP2ATIPROC epoxy_glColorFragmentOp2ATI; + PFNGLCOLORFRAGMENTOP3ATIPROC epoxy_glColorFragmentOp3ATI; + PFNGLCOLORMASKPROC epoxy_glColorMask; + PFNGLCOLORMASKINDEXEDEXTPROC epoxy_glColorMaskIndexedEXT; + PFNGLCOLORMASKIPROC epoxy_glColorMaski; + PFNGLCOLORMASKIEXTPROC epoxy_glColorMaskiEXT; + PFNGLCOLORMASKIOESPROC epoxy_glColorMaskiOES; + PFNGLCOLORMATERIALPROC epoxy_glColorMaterial; + PFNGLCOLORP3UIPROC epoxy_glColorP3ui; + PFNGLCOLORP3UIVPROC epoxy_glColorP3uiv; + PFNGLCOLORP4UIPROC epoxy_glColorP4ui; + PFNGLCOLORP4UIVPROC epoxy_glColorP4uiv; + PFNGLCOLORPOINTERPROC epoxy_glColorPointer; + PFNGLCOLORPOINTEREXTPROC epoxy_glColorPointerEXT; + PFNGLCOLORPOINTERLISTIBMPROC epoxy_glColorPointerListIBM; + PFNGLCOLORPOINTERVINTELPROC epoxy_glColorPointervINTEL; + PFNGLCOLORSUBTABLEPROC epoxy_glColorSubTable; + PFNGLCOLORSUBTABLEEXTPROC epoxy_glColorSubTableEXT; + PFNGLCOLORTABLEPROC epoxy_glColorTable; + PFNGLCOLORTABLEEXTPROC epoxy_glColorTableEXT; + PFNGLCOLORTABLEPARAMETERFVPROC epoxy_glColorTableParameterfv; + PFNGLCOLORTABLEPARAMETERFVSGIPROC epoxy_glColorTableParameterfvSGI; + PFNGLCOLORTABLEPARAMETERIVPROC epoxy_glColorTableParameteriv; + PFNGLCOLORTABLEPARAMETERIVSGIPROC epoxy_glColorTableParameterivSGI; + PFNGLCOLORTABLESGIPROC epoxy_glColorTableSGI; + PFNGLCOMBINERINPUTNVPROC epoxy_glCombinerInputNV; + PFNGLCOMBINEROUTPUTNVPROC epoxy_glCombinerOutputNV; + PFNGLCOMBINERPARAMETERFNVPROC epoxy_glCombinerParameterfNV; + PFNGLCOMBINERPARAMETERFVNVPROC epoxy_glCombinerParameterfvNV; + PFNGLCOMBINERPARAMETERINVPROC epoxy_glCombinerParameteriNV; + PFNGLCOMBINERPARAMETERIVNVPROC epoxy_glCombinerParameterivNV; + PFNGLCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glCombinerStageParameterfvNV; + PFNGLCOMMANDLISTSEGMENTSNVPROC epoxy_glCommandListSegmentsNV; + PFNGLCOMPILECOMMANDLISTNVPROC epoxy_glCompileCommandListNV; + PFNGLCOMPILESHADERPROC epoxy_glCompileShader; + PFNGLCOMPILESHADERARBPROC epoxy_glCompileShaderARB; + PFNGLCOMPILESHADERINCLUDEARBPROC epoxy_glCompileShaderIncludeARB; + PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC epoxy_glCompressedMultiTexImage1DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC epoxy_glCompressedMultiTexImage2DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC epoxy_glCompressedMultiTexImage3DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC epoxy_glCompressedMultiTexSubImage1DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC epoxy_glCompressedMultiTexSubImage2DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC epoxy_glCompressedMultiTexSubImage3DEXT; + PFNGLCOMPRESSEDTEXIMAGE1DPROC epoxy_glCompressedTexImage1D; + PFNGLCOMPRESSEDTEXIMAGE1DARBPROC epoxy_glCompressedTexImage1DARB; + PFNGLCOMPRESSEDTEXIMAGE2DPROC epoxy_glCompressedTexImage2D; + PFNGLCOMPRESSEDTEXIMAGE2DARBPROC epoxy_glCompressedTexImage2DARB; + PFNGLCOMPRESSEDTEXIMAGE3DPROC epoxy_glCompressedTexImage3D; + PFNGLCOMPRESSEDTEXIMAGE3DARBPROC epoxy_glCompressedTexImage3DARB; + PFNGLCOMPRESSEDTEXIMAGE3DOESPROC epoxy_glCompressedTexImage3DOES; + PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC epoxy_glCompressedTexSubImage1D; + PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC epoxy_glCompressedTexSubImage1DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC epoxy_glCompressedTexSubImage2D; + PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC epoxy_glCompressedTexSubImage2DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC epoxy_glCompressedTexSubImage3D; + PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC epoxy_glCompressedTexSubImage3DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC epoxy_glCompressedTexSubImage3DOES; + PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC epoxy_glCompressedTextureImage1DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC epoxy_glCompressedTextureImage2DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC epoxy_glCompressedTextureImage3DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC epoxy_glCompressedTextureSubImage1D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC epoxy_glCompressedTextureSubImage1DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC epoxy_glCompressedTextureSubImage2D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC epoxy_glCompressedTextureSubImage2DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC epoxy_glCompressedTextureSubImage3D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC epoxy_glCompressedTextureSubImage3DEXT; + PFNGLCONSERVATIVERASTERPARAMETERFNVPROC epoxy_glConservativeRasterParameterfNV; + PFNGLCONVOLUTIONFILTER1DPROC epoxy_glConvolutionFilter1D; + PFNGLCONVOLUTIONFILTER1DEXTPROC epoxy_glConvolutionFilter1DEXT; + PFNGLCONVOLUTIONFILTER2DPROC epoxy_glConvolutionFilter2D; + PFNGLCONVOLUTIONFILTER2DEXTPROC epoxy_glConvolutionFilter2DEXT; + PFNGLCONVOLUTIONPARAMETERFPROC epoxy_glConvolutionParameterf; + PFNGLCONVOLUTIONPARAMETERFEXTPROC epoxy_glConvolutionParameterfEXT; + PFNGLCONVOLUTIONPARAMETERFVPROC epoxy_glConvolutionParameterfv; + PFNGLCONVOLUTIONPARAMETERFVEXTPROC epoxy_glConvolutionParameterfvEXT; + PFNGLCONVOLUTIONPARAMETERIPROC epoxy_glConvolutionParameteri; + PFNGLCONVOLUTIONPARAMETERIEXTPROC epoxy_glConvolutionParameteriEXT; + PFNGLCONVOLUTIONPARAMETERIVPROC epoxy_glConvolutionParameteriv; + PFNGLCONVOLUTIONPARAMETERIVEXTPROC epoxy_glConvolutionParameterivEXT; + PFNGLCONVOLUTIONPARAMETERXOESPROC epoxy_glConvolutionParameterxOES; + PFNGLCONVOLUTIONPARAMETERXVOESPROC epoxy_glConvolutionParameterxvOES; + PFNGLCOPYBUFFERSUBDATAPROC epoxy_glCopyBufferSubData; + PFNGLCOPYBUFFERSUBDATANVPROC epoxy_glCopyBufferSubDataNV; + PFNGLCOPYCOLORSUBTABLEPROC epoxy_glCopyColorSubTable; + PFNGLCOPYCOLORSUBTABLEEXTPROC epoxy_glCopyColorSubTableEXT; + PFNGLCOPYCOLORTABLEPROC epoxy_glCopyColorTable; + PFNGLCOPYCOLORTABLESGIPROC epoxy_glCopyColorTableSGI; + PFNGLCOPYCONVOLUTIONFILTER1DPROC epoxy_glCopyConvolutionFilter1D; + PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC epoxy_glCopyConvolutionFilter1DEXT; + PFNGLCOPYCONVOLUTIONFILTER2DPROC epoxy_glCopyConvolutionFilter2D; + PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC epoxy_glCopyConvolutionFilter2DEXT; + PFNGLCOPYIMAGESUBDATAPROC epoxy_glCopyImageSubData; + PFNGLCOPYIMAGESUBDATAEXTPROC epoxy_glCopyImageSubDataEXT; + PFNGLCOPYIMAGESUBDATANVPROC epoxy_glCopyImageSubDataNV; + PFNGLCOPYIMAGESUBDATAOESPROC epoxy_glCopyImageSubDataOES; + PFNGLCOPYMULTITEXIMAGE1DEXTPROC epoxy_glCopyMultiTexImage1DEXT; + PFNGLCOPYMULTITEXIMAGE2DEXTPROC epoxy_glCopyMultiTexImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC epoxy_glCopyMultiTexSubImage1DEXT; + PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC epoxy_glCopyMultiTexSubImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC epoxy_glCopyMultiTexSubImage3DEXT; + PFNGLCOPYNAMEDBUFFERSUBDATAPROC epoxy_glCopyNamedBufferSubData; + PFNGLCOPYPATHNVPROC epoxy_glCopyPathNV; + PFNGLCOPYPIXELSPROC epoxy_glCopyPixels; + PFNGLCOPYTEXIMAGE1DPROC epoxy_glCopyTexImage1D; + PFNGLCOPYTEXIMAGE1DEXTPROC epoxy_glCopyTexImage1DEXT; + PFNGLCOPYTEXIMAGE2DPROC epoxy_glCopyTexImage2D; + PFNGLCOPYTEXIMAGE2DEXTPROC epoxy_glCopyTexImage2DEXT; + PFNGLCOPYTEXSUBIMAGE1DPROC epoxy_glCopyTexSubImage1D; + PFNGLCOPYTEXSUBIMAGE1DEXTPROC epoxy_glCopyTexSubImage1DEXT; + PFNGLCOPYTEXSUBIMAGE2DPROC epoxy_glCopyTexSubImage2D; + PFNGLCOPYTEXSUBIMAGE2DEXTPROC epoxy_glCopyTexSubImage2DEXT; + PFNGLCOPYTEXSUBIMAGE3DPROC epoxy_glCopyTexSubImage3D; + PFNGLCOPYTEXSUBIMAGE3DEXTPROC epoxy_glCopyTexSubImage3DEXT; + PFNGLCOPYTEXSUBIMAGE3DOESPROC epoxy_glCopyTexSubImage3DOES; + PFNGLCOPYTEXTUREIMAGE1DEXTPROC epoxy_glCopyTextureImage1DEXT; + PFNGLCOPYTEXTUREIMAGE2DEXTPROC epoxy_glCopyTextureImage2DEXT; + PFNGLCOPYTEXTURELEVELSAPPLEPROC epoxy_glCopyTextureLevelsAPPLE; + PFNGLCOPYTEXTURESUBIMAGE1DPROC epoxy_glCopyTextureSubImage1D; + PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC epoxy_glCopyTextureSubImage1DEXT; + PFNGLCOPYTEXTURESUBIMAGE2DPROC epoxy_glCopyTextureSubImage2D; + PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC epoxy_glCopyTextureSubImage2DEXT; + PFNGLCOPYTEXTURESUBIMAGE3DPROC epoxy_glCopyTextureSubImage3D; + PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC epoxy_glCopyTextureSubImage3DEXT; + PFNGLCOVERFILLPATHINSTANCEDNVPROC epoxy_glCoverFillPathInstancedNV; + PFNGLCOVERFILLPATHNVPROC epoxy_glCoverFillPathNV; + PFNGLCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glCoverStrokePathInstancedNV; + PFNGLCOVERSTROKEPATHNVPROC epoxy_glCoverStrokePathNV; + PFNGLCOVERAGEMASKNVPROC epoxy_glCoverageMaskNV; + PFNGLCOVERAGEMODULATIONNVPROC epoxy_glCoverageModulationNV; + PFNGLCOVERAGEMODULATIONTABLENVPROC epoxy_glCoverageModulationTableNV; + PFNGLCOVERAGEOPERATIONNVPROC epoxy_glCoverageOperationNV; + PFNGLCREATEBUFFERSPROC epoxy_glCreateBuffers; + PFNGLCREATECOMMANDLISTSNVPROC epoxy_glCreateCommandListsNV; + PFNGLCREATEFRAMEBUFFERSPROC epoxy_glCreateFramebuffers; + PFNGLCREATEPERFQUERYINTELPROC epoxy_glCreatePerfQueryINTEL; + PFNGLCREATEPROGRAMPROC epoxy_glCreateProgram; + PFNGLCREATEPROGRAMOBJECTARBPROC epoxy_glCreateProgramObjectARB; + PFNGLCREATEPROGRAMPIPELINESPROC epoxy_glCreateProgramPipelines; + PFNGLCREATEQUERIESPROC epoxy_glCreateQueries; + PFNGLCREATERENDERBUFFERSPROC epoxy_glCreateRenderbuffers; + PFNGLCREATESAMPLERSPROC epoxy_glCreateSamplers; + PFNGLCREATESHADERPROC epoxy_glCreateShader; + PFNGLCREATESHADEROBJECTARBPROC epoxy_glCreateShaderObjectARB; + PFNGLCREATESHADERPROGRAMEXTPROC epoxy_glCreateShaderProgramEXT; + PFNGLCREATESHADERPROGRAMVPROC epoxy_glCreateShaderProgramv; + PFNGLCREATESHADERPROGRAMVEXTPROC epoxy_glCreateShaderProgramvEXT; + PFNGLCREATESTATESNVPROC epoxy_glCreateStatesNV; + PFNGLCREATESYNCFROMCLEVENTARBPROC epoxy_glCreateSyncFromCLeventARB; + PFNGLCREATETEXTURESPROC epoxy_glCreateTextures; + PFNGLCREATETRANSFORMFEEDBACKSPROC epoxy_glCreateTransformFeedbacks; + PFNGLCREATEVERTEXARRAYSPROC epoxy_glCreateVertexArrays; + PFNGLCULLFACEPROC epoxy_glCullFace; + PFNGLCULLPARAMETERDVEXTPROC epoxy_glCullParameterdvEXT; + PFNGLCULLPARAMETERFVEXTPROC epoxy_glCullParameterfvEXT; + PFNGLCURRENTPALETTEMATRIXARBPROC epoxy_glCurrentPaletteMatrixARB; + PFNGLCURRENTPALETTEMATRIXOESPROC epoxy_glCurrentPaletteMatrixOES; + PFNGLDEBUGMESSAGECALLBACKPROC epoxy_glDebugMessageCallback; + PFNGLDEBUGMESSAGECALLBACKAMDPROC epoxy_glDebugMessageCallbackAMD; + PFNGLDEBUGMESSAGECALLBACKARBPROC epoxy_glDebugMessageCallbackARB; + PFNGLDEBUGMESSAGECALLBACKKHRPROC epoxy_glDebugMessageCallbackKHR; + PFNGLDEBUGMESSAGECONTROLPROC epoxy_glDebugMessageControl; + PFNGLDEBUGMESSAGECONTROLARBPROC epoxy_glDebugMessageControlARB; + PFNGLDEBUGMESSAGECONTROLKHRPROC epoxy_glDebugMessageControlKHR; + PFNGLDEBUGMESSAGEENABLEAMDPROC epoxy_glDebugMessageEnableAMD; + PFNGLDEBUGMESSAGEINSERTPROC epoxy_glDebugMessageInsert; + PFNGLDEBUGMESSAGEINSERTAMDPROC epoxy_glDebugMessageInsertAMD; + PFNGLDEBUGMESSAGEINSERTARBPROC epoxy_glDebugMessageInsertARB; + PFNGLDEBUGMESSAGEINSERTKHRPROC epoxy_glDebugMessageInsertKHR; + PFNGLDEFORMSGIXPROC epoxy_glDeformSGIX; + PFNGLDEFORMATIONMAP3DSGIXPROC epoxy_glDeformationMap3dSGIX; + PFNGLDEFORMATIONMAP3FSGIXPROC epoxy_glDeformationMap3fSGIX; + PFNGLDELETEASYNCMARKERSSGIXPROC epoxy_glDeleteAsyncMarkersSGIX; + PFNGLDELETEBUFFERSPROC epoxy_glDeleteBuffers; + PFNGLDELETEBUFFERSARBPROC epoxy_glDeleteBuffersARB; + PFNGLDELETECOMMANDLISTSNVPROC epoxy_glDeleteCommandListsNV; + PFNGLDELETEFENCESAPPLEPROC epoxy_glDeleteFencesAPPLE; + PFNGLDELETEFENCESNVPROC epoxy_glDeleteFencesNV; + PFNGLDELETEFRAGMENTSHADERATIPROC epoxy_glDeleteFragmentShaderATI; + PFNGLDELETEFRAMEBUFFERSPROC epoxy_glDeleteFramebuffers; + PFNGLDELETEFRAMEBUFFERSEXTPROC epoxy_glDeleteFramebuffersEXT; + PFNGLDELETEFRAMEBUFFERSOESPROC epoxy_glDeleteFramebuffersOES; + PFNGLDELETELISTSPROC epoxy_glDeleteLists; + PFNGLDELETENAMEDSTRINGARBPROC epoxy_glDeleteNamedStringARB; + PFNGLDELETENAMESAMDPROC epoxy_glDeleteNamesAMD; + PFNGLDELETEOBJECTARBPROC epoxy_glDeleteObjectARB; + PFNGLDELETEOCCLUSIONQUERIESNVPROC epoxy_glDeleteOcclusionQueriesNV; + PFNGLDELETEPATHSNVPROC epoxy_glDeletePathsNV; + PFNGLDELETEPERFMONITORSAMDPROC epoxy_glDeletePerfMonitorsAMD; + PFNGLDELETEPERFQUERYINTELPROC epoxy_glDeletePerfQueryINTEL; + PFNGLDELETEPROGRAMPROC epoxy_glDeleteProgram; + PFNGLDELETEPROGRAMPIPELINESPROC epoxy_glDeleteProgramPipelines; + PFNGLDELETEPROGRAMPIPELINESEXTPROC epoxy_glDeleteProgramPipelinesEXT; + PFNGLDELETEPROGRAMSARBPROC epoxy_glDeleteProgramsARB; + PFNGLDELETEPROGRAMSNVPROC epoxy_glDeleteProgramsNV; + PFNGLDELETEQUERIESPROC epoxy_glDeleteQueries; + PFNGLDELETEQUERIESARBPROC epoxy_glDeleteQueriesARB; + PFNGLDELETEQUERIESEXTPROC epoxy_glDeleteQueriesEXT; + PFNGLDELETERENDERBUFFERSPROC epoxy_glDeleteRenderbuffers; + PFNGLDELETERENDERBUFFERSEXTPROC epoxy_glDeleteRenderbuffersEXT; + PFNGLDELETERENDERBUFFERSOESPROC epoxy_glDeleteRenderbuffersOES; + PFNGLDELETESAMPLERSPROC epoxy_glDeleteSamplers; + PFNGLDELETESHADERPROC epoxy_glDeleteShader; + PFNGLDELETESTATESNVPROC epoxy_glDeleteStatesNV; + PFNGLDELETESYNCPROC epoxy_glDeleteSync; + PFNGLDELETESYNCAPPLEPROC epoxy_glDeleteSyncAPPLE; + PFNGLDELETETEXTURESPROC epoxy_glDeleteTextures; + PFNGLDELETETEXTURESEXTPROC epoxy_glDeleteTexturesEXT; + PFNGLDELETETRANSFORMFEEDBACKSPROC epoxy_glDeleteTransformFeedbacks; + PFNGLDELETETRANSFORMFEEDBACKSNVPROC epoxy_glDeleteTransformFeedbacksNV; + PFNGLDELETEVERTEXARRAYSPROC epoxy_glDeleteVertexArrays; + PFNGLDELETEVERTEXARRAYSAPPLEPROC epoxy_glDeleteVertexArraysAPPLE; + PFNGLDELETEVERTEXARRAYSOESPROC epoxy_glDeleteVertexArraysOES; + PFNGLDELETEVERTEXSHADEREXTPROC epoxy_glDeleteVertexShaderEXT; + PFNGLDEPTHBOUNDSEXTPROC epoxy_glDepthBoundsEXT; + PFNGLDEPTHBOUNDSDNVPROC epoxy_glDepthBoundsdNV; + PFNGLDEPTHFUNCPROC epoxy_glDepthFunc; + PFNGLDEPTHMASKPROC epoxy_glDepthMask; + PFNGLDEPTHRANGEPROC epoxy_glDepthRange; + PFNGLDEPTHRANGEARRAYFVNVPROC epoxy_glDepthRangeArrayfvNV; + PFNGLDEPTHRANGEARRAYVPROC epoxy_glDepthRangeArrayv; + PFNGLDEPTHRANGEINDEXEDPROC epoxy_glDepthRangeIndexed; + PFNGLDEPTHRANGEINDEXEDFNVPROC epoxy_glDepthRangeIndexedfNV; + PFNGLDEPTHRANGEDNVPROC epoxy_glDepthRangedNV; + PFNGLDEPTHRANGEFPROC epoxy_glDepthRangef; + PFNGLDEPTHRANGEFOESPROC epoxy_glDepthRangefOES; + PFNGLDEPTHRANGEXPROC epoxy_glDepthRangex; + PFNGLDEPTHRANGEXOESPROC epoxy_glDepthRangexOES; + PFNGLDETACHOBJECTARBPROC epoxy_glDetachObjectARB; + PFNGLDETACHSHADERPROC epoxy_glDetachShader; + PFNGLDETAILTEXFUNCSGISPROC epoxy_glDetailTexFuncSGIS; + PFNGLDISABLEPROC epoxy_glDisable; + PFNGLDISABLECLIENTSTATEPROC epoxy_glDisableClientState; + PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC epoxy_glDisableClientStateIndexedEXT; + PFNGLDISABLECLIENTSTATEIEXTPROC epoxy_glDisableClientStateiEXT; + PFNGLDISABLEDRIVERCONTROLQCOMPROC epoxy_glDisableDriverControlQCOM; + PFNGLDISABLEINDEXEDEXTPROC epoxy_glDisableIndexedEXT; + PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC epoxy_glDisableVariantClientStateEXT; + PFNGLDISABLEVERTEXARRAYATTRIBPROC epoxy_glDisableVertexArrayAttrib; + PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC epoxy_glDisableVertexArrayAttribEXT; + PFNGLDISABLEVERTEXARRAYEXTPROC epoxy_glDisableVertexArrayEXT; + PFNGLDISABLEVERTEXATTRIBAPPLEPROC epoxy_glDisableVertexAttribAPPLE; + PFNGLDISABLEVERTEXATTRIBARRAYPROC epoxy_glDisableVertexAttribArray; + PFNGLDISABLEVERTEXATTRIBARRAYARBPROC epoxy_glDisableVertexAttribArrayARB; + PFNGLDISABLEIPROC epoxy_glDisablei; + PFNGLDISABLEIEXTPROC epoxy_glDisableiEXT; + PFNGLDISABLEINVPROC epoxy_glDisableiNV; + PFNGLDISABLEIOESPROC epoxy_glDisableiOES; + PFNGLDISCARDFRAMEBUFFEREXTPROC epoxy_glDiscardFramebufferEXT; + PFNGLDISPATCHCOMPUTEPROC epoxy_glDispatchCompute; + PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC epoxy_glDispatchComputeGroupSizeARB; + PFNGLDISPATCHCOMPUTEINDIRECTPROC epoxy_glDispatchComputeIndirect; + PFNGLDRAWARRAYSPROC epoxy_glDrawArrays; + PFNGLDRAWARRAYSEXTPROC epoxy_glDrawArraysEXT; + PFNGLDRAWARRAYSINDIRECTPROC epoxy_glDrawArraysIndirect; + PFNGLDRAWARRAYSINSTANCEDPROC epoxy_glDrawArraysInstanced; + PFNGLDRAWARRAYSINSTANCEDANGLEPROC epoxy_glDrawArraysInstancedANGLE; + PFNGLDRAWARRAYSINSTANCEDARBPROC epoxy_glDrawArraysInstancedARB; + PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC epoxy_glDrawArraysInstancedBaseInstance; + PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawArraysInstancedBaseInstanceEXT; + PFNGLDRAWARRAYSINSTANCEDEXTPROC epoxy_glDrawArraysInstancedEXT; + PFNGLDRAWARRAYSINSTANCEDNVPROC epoxy_glDrawArraysInstancedNV; + PFNGLDRAWBUFFERPROC epoxy_glDrawBuffer; + PFNGLDRAWBUFFERSPROC epoxy_glDrawBuffers; + PFNGLDRAWBUFFERSARBPROC epoxy_glDrawBuffersARB; + PFNGLDRAWBUFFERSATIPROC epoxy_glDrawBuffersATI; + PFNGLDRAWBUFFERSEXTPROC epoxy_glDrawBuffersEXT; + PFNGLDRAWBUFFERSINDEXEDEXTPROC epoxy_glDrawBuffersIndexedEXT; + PFNGLDRAWBUFFERSNVPROC epoxy_glDrawBuffersNV; + PFNGLDRAWCOMMANDSADDRESSNVPROC epoxy_glDrawCommandsAddressNV; + PFNGLDRAWCOMMANDSNVPROC epoxy_glDrawCommandsNV; + PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC epoxy_glDrawCommandsStatesAddressNV; + PFNGLDRAWCOMMANDSSTATESNVPROC epoxy_glDrawCommandsStatesNV; + PFNGLDRAWELEMENTARRAYAPPLEPROC epoxy_glDrawElementArrayAPPLE; + PFNGLDRAWELEMENTARRAYATIPROC epoxy_glDrawElementArrayATI; + PFNGLDRAWELEMENTSPROC epoxy_glDrawElements; + PFNGLDRAWELEMENTSBASEVERTEXPROC epoxy_glDrawElementsBaseVertex; + PFNGLDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glDrawElementsBaseVertexEXT; + PFNGLDRAWELEMENTSBASEVERTEXOESPROC epoxy_glDrawElementsBaseVertexOES; + PFNGLDRAWELEMENTSINDIRECTPROC epoxy_glDrawElementsIndirect; + PFNGLDRAWELEMENTSINSTANCEDPROC epoxy_glDrawElementsInstanced; + PFNGLDRAWELEMENTSINSTANCEDANGLEPROC epoxy_glDrawElementsInstancedANGLE; + PFNGLDRAWELEMENTSINSTANCEDARBPROC epoxy_glDrawElementsInstancedARB; + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseInstanceEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC epoxy_glDrawElementsInstancedBaseVertex; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC epoxy_glDrawElementsInstancedBaseVertexEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC epoxy_glDrawElementsInstancedBaseVertexOES; + PFNGLDRAWELEMENTSINSTANCEDEXTPROC epoxy_glDrawElementsInstancedEXT; + PFNGLDRAWELEMENTSINSTANCEDNVPROC epoxy_glDrawElementsInstancedNV; + PFNGLDRAWMESHARRAYSSUNPROC epoxy_glDrawMeshArraysSUN; + PFNGLDRAWPIXELSPROC epoxy_glDrawPixels; + PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glDrawRangeElementArrayAPPLE; + PFNGLDRAWRANGEELEMENTARRAYATIPROC epoxy_glDrawRangeElementArrayATI; + PFNGLDRAWRANGEELEMENTSPROC epoxy_glDrawRangeElements; + PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC epoxy_glDrawRangeElementsBaseVertex; + PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC epoxy_glDrawRangeElementsBaseVertexEXT; + PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC epoxy_glDrawRangeElementsBaseVertexOES; + PFNGLDRAWRANGEELEMENTSEXTPROC epoxy_glDrawRangeElementsEXT; + PFNGLDRAWTEXFOESPROC epoxy_glDrawTexfOES; + PFNGLDRAWTEXFVOESPROC epoxy_glDrawTexfvOES; + PFNGLDRAWTEXIOESPROC epoxy_glDrawTexiOES; + PFNGLDRAWTEXIVOESPROC epoxy_glDrawTexivOES; + PFNGLDRAWTEXSOESPROC epoxy_glDrawTexsOES; + PFNGLDRAWTEXSVOESPROC epoxy_glDrawTexsvOES; + PFNGLDRAWTEXTURENVPROC epoxy_glDrawTextureNV; + PFNGLDRAWTEXXOESPROC epoxy_glDrawTexxOES; + PFNGLDRAWTEXXVOESPROC epoxy_glDrawTexxvOES; + PFNGLDRAWTRANSFORMFEEDBACKPROC epoxy_glDrawTransformFeedback; + PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC epoxy_glDrawTransformFeedbackInstanced; + PFNGLDRAWTRANSFORMFEEDBACKNVPROC epoxy_glDrawTransformFeedbackNV; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC epoxy_glDrawTransformFeedbackStream; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC epoxy_glDrawTransformFeedbackStreamInstanced; + PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC epoxy_glEGLImageTargetRenderbufferStorageOES; + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC epoxy_glEGLImageTargetTexture2DOES; + PFNGLEDGEFLAGPROC epoxy_glEdgeFlag; + PFNGLEDGEFLAGFORMATNVPROC epoxy_glEdgeFlagFormatNV; + PFNGLEDGEFLAGPOINTERPROC epoxy_glEdgeFlagPointer; + PFNGLEDGEFLAGPOINTEREXTPROC epoxy_glEdgeFlagPointerEXT; + PFNGLEDGEFLAGPOINTERLISTIBMPROC epoxy_glEdgeFlagPointerListIBM; + PFNGLEDGEFLAGVPROC epoxy_glEdgeFlagv; + PFNGLELEMENTPOINTERAPPLEPROC epoxy_glElementPointerAPPLE; + PFNGLELEMENTPOINTERATIPROC epoxy_glElementPointerATI; + PFNGLENABLEPROC epoxy_glEnable; + PFNGLENABLECLIENTSTATEPROC epoxy_glEnableClientState; + PFNGLENABLECLIENTSTATEINDEXEDEXTPROC epoxy_glEnableClientStateIndexedEXT; + PFNGLENABLECLIENTSTATEIEXTPROC epoxy_glEnableClientStateiEXT; + PFNGLENABLEDRIVERCONTROLQCOMPROC epoxy_glEnableDriverControlQCOM; + PFNGLENABLEINDEXEDEXTPROC epoxy_glEnableIndexedEXT; + PFNGLENABLEVARIANTCLIENTSTATEEXTPROC epoxy_glEnableVariantClientStateEXT; + PFNGLENABLEVERTEXARRAYATTRIBPROC epoxy_glEnableVertexArrayAttrib; + PFNGLENABLEVERTEXARRAYATTRIBEXTPROC epoxy_glEnableVertexArrayAttribEXT; + PFNGLENABLEVERTEXARRAYEXTPROC epoxy_glEnableVertexArrayEXT; + PFNGLENABLEVERTEXATTRIBAPPLEPROC epoxy_glEnableVertexAttribAPPLE; + PFNGLENABLEVERTEXATTRIBARRAYPROC epoxy_glEnableVertexAttribArray; + PFNGLENABLEVERTEXATTRIBARRAYARBPROC epoxy_glEnableVertexAttribArrayARB; + PFNGLENABLEIPROC epoxy_glEnablei; + PFNGLENABLEIEXTPROC epoxy_glEnableiEXT; + PFNGLENABLEINVPROC epoxy_glEnableiNV; + PFNGLENABLEIOESPROC epoxy_glEnableiOES; + PFNGLENDPROC epoxy_glEnd_unwrapped; + PFNGLENDCONDITIONALRENDERPROC epoxy_glEndConditionalRender; + PFNGLENDCONDITIONALRENDERNVPROC epoxy_glEndConditionalRenderNV; + PFNGLENDCONDITIONALRENDERNVXPROC epoxy_glEndConditionalRenderNVX; + PFNGLENDFRAGMENTSHADERATIPROC epoxy_glEndFragmentShaderATI; + PFNGLENDLISTPROC epoxy_glEndList; + PFNGLENDOCCLUSIONQUERYNVPROC epoxy_glEndOcclusionQueryNV; + PFNGLENDPERFMONITORAMDPROC epoxy_glEndPerfMonitorAMD; + PFNGLENDPERFQUERYINTELPROC epoxy_glEndPerfQueryINTEL; + PFNGLENDQUERYPROC epoxy_glEndQuery; + PFNGLENDQUERYARBPROC epoxy_glEndQueryARB; + PFNGLENDQUERYEXTPROC epoxy_glEndQueryEXT; + PFNGLENDQUERYINDEXEDPROC epoxy_glEndQueryIndexed; + PFNGLENDTILINGQCOMPROC epoxy_glEndTilingQCOM; + PFNGLENDTRANSFORMFEEDBACKPROC epoxy_glEndTransformFeedback; + PFNGLENDTRANSFORMFEEDBACKEXTPROC epoxy_glEndTransformFeedbackEXT; + PFNGLENDTRANSFORMFEEDBACKNVPROC epoxy_glEndTransformFeedbackNV; + PFNGLENDVERTEXSHADEREXTPROC epoxy_glEndVertexShaderEXT; + PFNGLENDVIDEOCAPTURENVPROC epoxy_glEndVideoCaptureNV; + PFNGLEVALCOORD1DPROC epoxy_glEvalCoord1d; + PFNGLEVALCOORD1DVPROC epoxy_glEvalCoord1dv; + PFNGLEVALCOORD1FPROC epoxy_glEvalCoord1f; + PFNGLEVALCOORD1FVPROC epoxy_glEvalCoord1fv; + PFNGLEVALCOORD1XOESPROC epoxy_glEvalCoord1xOES; + PFNGLEVALCOORD1XVOESPROC epoxy_glEvalCoord1xvOES; + PFNGLEVALCOORD2DPROC epoxy_glEvalCoord2d; + PFNGLEVALCOORD2DVPROC epoxy_glEvalCoord2dv; + PFNGLEVALCOORD2FPROC epoxy_glEvalCoord2f; + PFNGLEVALCOORD2FVPROC epoxy_glEvalCoord2fv; + PFNGLEVALCOORD2XOESPROC epoxy_glEvalCoord2xOES; + PFNGLEVALCOORD2XVOESPROC epoxy_glEvalCoord2xvOES; + PFNGLEVALMAPSNVPROC epoxy_glEvalMapsNV; + PFNGLEVALMESH1PROC epoxy_glEvalMesh1; + PFNGLEVALMESH2PROC epoxy_glEvalMesh2; + PFNGLEVALPOINT1PROC epoxy_glEvalPoint1; + PFNGLEVALPOINT2PROC epoxy_glEvalPoint2; + PFNGLEVALUATEDEPTHVALUESARBPROC epoxy_glEvaluateDepthValuesARB; + PFNGLEXECUTEPROGRAMNVPROC epoxy_glExecuteProgramNV; + PFNGLEXTGETBUFFERPOINTERVQCOMPROC epoxy_glExtGetBufferPointervQCOM; + PFNGLEXTGETBUFFERSQCOMPROC epoxy_glExtGetBuffersQCOM; + PFNGLEXTGETFRAMEBUFFERSQCOMPROC epoxy_glExtGetFramebuffersQCOM; + PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC epoxy_glExtGetProgramBinarySourceQCOM; + PFNGLEXTGETPROGRAMSQCOMPROC epoxy_glExtGetProgramsQCOM; + PFNGLEXTGETRENDERBUFFERSQCOMPROC epoxy_glExtGetRenderbuffersQCOM; + PFNGLEXTGETSHADERSQCOMPROC epoxy_glExtGetShadersQCOM; + PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC epoxy_glExtGetTexLevelParameterivQCOM; + PFNGLEXTGETTEXSUBIMAGEQCOMPROC epoxy_glExtGetTexSubImageQCOM; + PFNGLEXTGETTEXTURESQCOMPROC epoxy_glExtGetTexturesQCOM; + PFNGLEXTISPROGRAMBINARYQCOMPROC epoxy_glExtIsProgramBinaryQCOM; + PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC epoxy_glExtTexObjectStateOverrideiQCOM; + PFNGLEXTRACTCOMPONENTEXTPROC epoxy_glExtractComponentEXT; + PFNGLFEEDBACKBUFFERPROC epoxy_glFeedbackBuffer; + PFNGLFEEDBACKBUFFERXOESPROC epoxy_glFeedbackBufferxOES; + PFNGLFENCESYNCPROC epoxy_glFenceSync; + PFNGLFENCESYNCAPPLEPROC epoxy_glFenceSyncAPPLE; + PFNGLFINALCOMBINERINPUTNVPROC epoxy_glFinalCombinerInputNV; + PFNGLFINISHPROC epoxy_glFinish; + PFNGLFINISHASYNCSGIXPROC epoxy_glFinishAsyncSGIX; + PFNGLFINISHFENCEAPPLEPROC epoxy_glFinishFenceAPPLE; + PFNGLFINISHFENCENVPROC epoxy_glFinishFenceNV; + PFNGLFINISHOBJECTAPPLEPROC epoxy_glFinishObjectAPPLE; + PFNGLFINISHTEXTURESUNXPROC epoxy_glFinishTextureSUNX; + PFNGLFLUSHPROC epoxy_glFlush; + PFNGLFLUSHMAPPEDBUFFERRANGEPROC epoxy_glFlushMappedBufferRange; + PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC epoxy_glFlushMappedBufferRangeAPPLE; + PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC epoxy_glFlushMappedBufferRangeEXT; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC epoxy_glFlushMappedNamedBufferRange; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC epoxy_glFlushMappedNamedBufferRangeEXT; + PFNGLFLUSHPIXELDATARANGENVPROC epoxy_glFlushPixelDataRangeNV; + PFNGLFLUSHRASTERSGIXPROC epoxy_glFlushRasterSGIX; + PFNGLFLUSHSTATICDATAIBMPROC epoxy_glFlushStaticDataIBM; + PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC epoxy_glFlushVertexArrayRangeAPPLE; + PFNGLFLUSHVERTEXARRAYRANGENVPROC epoxy_glFlushVertexArrayRangeNV; + PFNGLFOGCOORDFORMATNVPROC epoxy_glFogCoordFormatNV; + PFNGLFOGCOORDPOINTERPROC epoxy_glFogCoordPointer; + PFNGLFOGCOORDPOINTEREXTPROC epoxy_glFogCoordPointerEXT; + PFNGLFOGCOORDPOINTERLISTIBMPROC epoxy_glFogCoordPointerListIBM; + PFNGLFOGCOORDDPROC epoxy_glFogCoordd; + PFNGLFOGCOORDDEXTPROC epoxy_glFogCoorddEXT; + PFNGLFOGCOORDDVPROC epoxy_glFogCoorddv; + PFNGLFOGCOORDDVEXTPROC epoxy_glFogCoorddvEXT; + PFNGLFOGCOORDFPROC epoxy_glFogCoordf; + PFNGLFOGCOORDFEXTPROC epoxy_glFogCoordfEXT; + PFNGLFOGCOORDFVPROC epoxy_glFogCoordfv; + PFNGLFOGCOORDFVEXTPROC epoxy_glFogCoordfvEXT; + PFNGLFOGCOORDHNVPROC epoxy_glFogCoordhNV; + PFNGLFOGCOORDHVNVPROC epoxy_glFogCoordhvNV; + PFNGLFOGFUNCSGISPROC epoxy_glFogFuncSGIS; + PFNGLFOGFPROC epoxy_glFogf; + PFNGLFOGFVPROC epoxy_glFogfv; + PFNGLFOGIPROC epoxy_glFogi; + PFNGLFOGIVPROC epoxy_glFogiv; + PFNGLFOGXPROC epoxy_glFogx; + PFNGLFOGXOESPROC epoxy_glFogxOES; + PFNGLFOGXVPROC epoxy_glFogxv; + PFNGLFOGXVOESPROC epoxy_glFogxvOES; + PFNGLFRAGMENTCOLORMATERIALSGIXPROC epoxy_glFragmentColorMaterialSGIX; + PFNGLFRAGMENTCOVERAGECOLORNVPROC epoxy_glFragmentCoverageColorNV; + PFNGLFRAGMENTLIGHTMODELFSGIXPROC epoxy_glFragmentLightModelfSGIX; + PFNGLFRAGMENTLIGHTMODELFVSGIXPROC epoxy_glFragmentLightModelfvSGIX; + PFNGLFRAGMENTLIGHTMODELISGIXPROC epoxy_glFragmentLightModeliSGIX; + PFNGLFRAGMENTLIGHTMODELIVSGIXPROC epoxy_glFragmentLightModelivSGIX; + PFNGLFRAGMENTLIGHTFSGIXPROC epoxy_glFragmentLightfSGIX; + PFNGLFRAGMENTLIGHTFVSGIXPROC epoxy_glFragmentLightfvSGIX; + PFNGLFRAGMENTLIGHTISGIXPROC epoxy_glFragmentLightiSGIX; + PFNGLFRAGMENTLIGHTIVSGIXPROC epoxy_glFragmentLightivSGIX; + PFNGLFRAGMENTMATERIALFSGIXPROC epoxy_glFragmentMaterialfSGIX; + PFNGLFRAGMENTMATERIALFVSGIXPROC epoxy_glFragmentMaterialfvSGIX; + PFNGLFRAGMENTMATERIALISGIXPROC epoxy_glFragmentMaterialiSGIX; + PFNGLFRAGMENTMATERIALIVSGIXPROC epoxy_glFragmentMaterialivSGIX; + PFNGLFRAMETERMINATORGREMEDYPROC epoxy_glFrameTerminatorGREMEDY; + PFNGLFRAMEZOOMSGIXPROC epoxy_glFrameZoomSGIX; + PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC epoxy_glFramebufferDrawBufferEXT; + PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC epoxy_glFramebufferDrawBuffersEXT; + PFNGLFRAMEBUFFERPARAMETERIPROC epoxy_glFramebufferParameteri; + PFNGLFRAMEBUFFERREADBUFFEREXTPROC epoxy_glFramebufferReadBufferEXT; + PFNGLFRAMEBUFFERRENDERBUFFERPROC epoxy_glFramebufferRenderbuffer; + PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glFramebufferRenderbufferEXT; + PFNGLFRAMEBUFFERRENDERBUFFEROESPROC epoxy_glFramebufferRenderbufferOES; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glFramebufferSampleLocationsfvARB; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glFramebufferSampleLocationsfvNV; + PFNGLFRAMEBUFFERTEXTUREPROC epoxy_glFramebufferTexture; + PFNGLFRAMEBUFFERTEXTURE1DPROC epoxy_glFramebufferTexture1D; + PFNGLFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glFramebufferTexture1DEXT; + PFNGLFRAMEBUFFERTEXTURE2DPROC epoxy_glFramebufferTexture2D; + PFNGLFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glFramebufferTexture2DEXT; + PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC epoxy_glFramebufferTexture2DMultisampleEXT; + PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC epoxy_glFramebufferTexture2DMultisampleIMG; + PFNGLFRAMEBUFFERTEXTURE2DOESPROC epoxy_glFramebufferTexture2DOES; + PFNGLFRAMEBUFFERTEXTURE3DPROC epoxy_glFramebufferTexture3D; + PFNGLFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glFramebufferTexture3DEXT; + PFNGLFRAMEBUFFERTEXTURE3DOESPROC epoxy_glFramebufferTexture3DOES; + PFNGLFRAMEBUFFERTEXTUREARBPROC epoxy_glFramebufferTextureARB; + PFNGLFRAMEBUFFERTEXTUREEXTPROC epoxy_glFramebufferTextureEXT; + PFNGLFRAMEBUFFERTEXTUREFACEARBPROC epoxy_glFramebufferTextureFaceARB; + PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glFramebufferTextureFaceEXT; + PFNGLFRAMEBUFFERTEXTURELAYERPROC epoxy_glFramebufferTextureLayer; + PFNGLFRAMEBUFFERTEXTURELAYERARBPROC epoxy_glFramebufferTextureLayerARB; + PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glFramebufferTextureLayerEXT; + PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC epoxy_glFramebufferTextureMultiviewOVR; + PFNGLFRAMEBUFFERTEXTUREOESPROC epoxy_glFramebufferTextureOES; + PFNGLFREEOBJECTBUFFERATIPROC epoxy_glFreeObjectBufferATI; + PFNGLFRONTFACEPROC epoxy_glFrontFace; + PFNGLFRUSTUMPROC epoxy_glFrustum; + PFNGLFRUSTUMFPROC epoxy_glFrustumf; + PFNGLFRUSTUMFOESPROC epoxy_glFrustumfOES; + PFNGLFRUSTUMXPROC epoxy_glFrustumx; + PFNGLFRUSTUMXOESPROC epoxy_glFrustumxOES; + PFNGLGENASYNCMARKERSSGIXPROC epoxy_glGenAsyncMarkersSGIX; + PFNGLGENBUFFERSPROC epoxy_glGenBuffers; + PFNGLGENBUFFERSARBPROC epoxy_glGenBuffersARB; + PFNGLGENFENCESAPPLEPROC epoxy_glGenFencesAPPLE; + PFNGLGENFENCESNVPROC epoxy_glGenFencesNV; + PFNGLGENFRAGMENTSHADERSATIPROC epoxy_glGenFragmentShadersATI; + PFNGLGENFRAMEBUFFERSPROC epoxy_glGenFramebuffers; + PFNGLGENFRAMEBUFFERSEXTPROC epoxy_glGenFramebuffersEXT; + PFNGLGENFRAMEBUFFERSOESPROC epoxy_glGenFramebuffersOES; + PFNGLGENLISTSPROC epoxy_glGenLists; + PFNGLGENNAMESAMDPROC epoxy_glGenNamesAMD; + PFNGLGENOCCLUSIONQUERIESNVPROC epoxy_glGenOcclusionQueriesNV; + PFNGLGENPATHSNVPROC epoxy_glGenPathsNV; + PFNGLGENPERFMONITORSAMDPROC epoxy_glGenPerfMonitorsAMD; + PFNGLGENPROGRAMPIPELINESPROC epoxy_glGenProgramPipelines; + PFNGLGENPROGRAMPIPELINESEXTPROC epoxy_glGenProgramPipelinesEXT; + PFNGLGENPROGRAMSARBPROC epoxy_glGenProgramsARB; + PFNGLGENPROGRAMSNVPROC epoxy_glGenProgramsNV; + PFNGLGENQUERIESPROC epoxy_glGenQueries; + PFNGLGENQUERIESARBPROC epoxy_glGenQueriesARB; + PFNGLGENQUERIESEXTPROC epoxy_glGenQueriesEXT; + PFNGLGENRENDERBUFFERSPROC epoxy_glGenRenderbuffers; + PFNGLGENRENDERBUFFERSEXTPROC epoxy_glGenRenderbuffersEXT; + PFNGLGENRENDERBUFFERSOESPROC epoxy_glGenRenderbuffersOES; + PFNGLGENSAMPLERSPROC epoxy_glGenSamplers; + PFNGLGENSYMBOLSEXTPROC epoxy_glGenSymbolsEXT; + PFNGLGENTEXTURESPROC epoxy_glGenTextures; + PFNGLGENTEXTURESEXTPROC epoxy_glGenTexturesEXT; + PFNGLGENTRANSFORMFEEDBACKSPROC epoxy_glGenTransformFeedbacks; + PFNGLGENTRANSFORMFEEDBACKSNVPROC epoxy_glGenTransformFeedbacksNV; + PFNGLGENVERTEXARRAYSPROC epoxy_glGenVertexArrays; + PFNGLGENVERTEXARRAYSAPPLEPROC epoxy_glGenVertexArraysAPPLE; + PFNGLGENVERTEXARRAYSOESPROC epoxy_glGenVertexArraysOES; + PFNGLGENVERTEXSHADERSEXTPROC epoxy_glGenVertexShadersEXT; + PFNGLGENERATEMIPMAPPROC epoxy_glGenerateMipmap; + PFNGLGENERATEMIPMAPEXTPROC epoxy_glGenerateMipmapEXT; + PFNGLGENERATEMIPMAPOESPROC epoxy_glGenerateMipmapOES; + PFNGLGENERATEMULTITEXMIPMAPEXTPROC epoxy_glGenerateMultiTexMipmapEXT; + PFNGLGENERATETEXTUREMIPMAPPROC epoxy_glGenerateTextureMipmap; + PFNGLGENERATETEXTUREMIPMAPEXTPROC epoxy_glGenerateTextureMipmapEXT; + PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC epoxy_glGetActiveAtomicCounterBufferiv; + PFNGLGETACTIVEATTRIBPROC epoxy_glGetActiveAttrib; + PFNGLGETACTIVEATTRIBARBPROC epoxy_glGetActiveAttribARB; + PFNGLGETACTIVESUBROUTINENAMEPROC epoxy_glGetActiveSubroutineName; + PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC epoxy_glGetActiveSubroutineUniformName; + PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC epoxy_glGetActiveSubroutineUniformiv; + PFNGLGETACTIVEUNIFORMPROC epoxy_glGetActiveUniform; + PFNGLGETACTIVEUNIFORMARBPROC epoxy_glGetActiveUniformARB; + PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC epoxy_glGetActiveUniformBlockName; + PFNGLGETACTIVEUNIFORMBLOCKIVPROC epoxy_glGetActiveUniformBlockiv; + PFNGLGETACTIVEUNIFORMNAMEPROC epoxy_glGetActiveUniformName; + PFNGLGETACTIVEUNIFORMSIVPROC epoxy_glGetActiveUniformsiv; + PFNGLGETACTIVEVARYINGNVPROC epoxy_glGetActiveVaryingNV; + PFNGLGETARRAYOBJECTFVATIPROC epoxy_glGetArrayObjectfvATI; + PFNGLGETARRAYOBJECTIVATIPROC epoxy_glGetArrayObjectivATI; + PFNGLGETATTACHEDOBJECTSARBPROC epoxy_glGetAttachedObjectsARB; + PFNGLGETATTACHEDSHADERSPROC epoxy_glGetAttachedShaders; + PFNGLGETATTRIBLOCATIONPROC epoxy_glGetAttribLocation; + PFNGLGETATTRIBLOCATIONARBPROC epoxy_glGetAttribLocationARB; + PFNGLGETBOOLEANINDEXEDVEXTPROC epoxy_glGetBooleanIndexedvEXT; + PFNGLGETBOOLEANI_VPROC epoxy_glGetBooleani_v; + PFNGLGETBOOLEANVPROC epoxy_glGetBooleanv; + PFNGLGETBUFFERPARAMETERI64VPROC epoxy_glGetBufferParameteri64v; + PFNGLGETBUFFERPARAMETERIVPROC epoxy_glGetBufferParameteriv; + PFNGLGETBUFFERPARAMETERIVARBPROC epoxy_glGetBufferParameterivARB; + PFNGLGETBUFFERPARAMETERUI64VNVPROC epoxy_glGetBufferParameterui64vNV; + PFNGLGETBUFFERPOINTERVPROC epoxy_glGetBufferPointerv; + PFNGLGETBUFFERPOINTERVARBPROC epoxy_glGetBufferPointervARB; + PFNGLGETBUFFERPOINTERVOESPROC epoxy_glGetBufferPointervOES; + PFNGLGETBUFFERSUBDATAPROC epoxy_glGetBufferSubData; + PFNGLGETBUFFERSUBDATAARBPROC epoxy_glGetBufferSubDataARB; + PFNGLGETCLIPPLANEPROC epoxy_glGetClipPlane; + PFNGLGETCLIPPLANEFPROC epoxy_glGetClipPlanef; + PFNGLGETCLIPPLANEFOESPROC epoxy_glGetClipPlanefOES; + PFNGLGETCLIPPLANEXPROC epoxy_glGetClipPlanex; + PFNGLGETCLIPPLANEXOESPROC epoxy_glGetClipPlanexOES; + PFNGLGETCOLORTABLEPROC epoxy_glGetColorTable; + PFNGLGETCOLORTABLEEXTPROC epoxy_glGetColorTableEXT; + PFNGLGETCOLORTABLEPARAMETERFVPROC epoxy_glGetColorTableParameterfv; + PFNGLGETCOLORTABLEPARAMETERFVEXTPROC epoxy_glGetColorTableParameterfvEXT; + PFNGLGETCOLORTABLEPARAMETERFVSGIPROC epoxy_glGetColorTableParameterfvSGI; + PFNGLGETCOLORTABLEPARAMETERIVPROC epoxy_glGetColorTableParameteriv; + PFNGLGETCOLORTABLEPARAMETERIVEXTPROC epoxy_glGetColorTableParameterivEXT; + PFNGLGETCOLORTABLEPARAMETERIVSGIPROC epoxy_glGetColorTableParameterivSGI; + PFNGLGETCOLORTABLESGIPROC epoxy_glGetColorTableSGI; + PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetCombinerInputParameterfvNV; + PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetCombinerInputParameterivNV; + PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC epoxy_glGetCombinerOutputParameterfvNV; + PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC epoxy_glGetCombinerOutputParameterivNV; + PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glGetCombinerStageParameterfvNV; + PFNGLGETCOMMANDHEADERNVPROC epoxy_glGetCommandHeaderNV; + PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC epoxy_glGetCompressedMultiTexImageEXT; + PFNGLGETCOMPRESSEDTEXIMAGEPROC epoxy_glGetCompressedTexImage; + PFNGLGETCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetCompressedTexImageARB; + PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC epoxy_glGetCompressedTextureImage; + PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC epoxy_glGetCompressedTextureImageEXT; + PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC epoxy_glGetCompressedTextureSubImage; + PFNGLGETCONVOLUTIONFILTERPROC epoxy_glGetConvolutionFilter; + PFNGLGETCONVOLUTIONFILTEREXTPROC epoxy_glGetConvolutionFilterEXT; + PFNGLGETCONVOLUTIONPARAMETERFVPROC epoxy_glGetConvolutionParameterfv; + PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC epoxy_glGetConvolutionParameterfvEXT; + PFNGLGETCONVOLUTIONPARAMETERIVPROC epoxy_glGetConvolutionParameteriv; + PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC epoxy_glGetConvolutionParameterivEXT; + PFNGLGETCONVOLUTIONPARAMETERXVOESPROC epoxy_glGetConvolutionParameterxvOES; + PFNGLGETCOVERAGEMODULATIONTABLENVPROC epoxy_glGetCoverageModulationTableNV; + PFNGLGETDEBUGMESSAGELOGPROC epoxy_glGetDebugMessageLog; + PFNGLGETDEBUGMESSAGELOGAMDPROC epoxy_glGetDebugMessageLogAMD; + PFNGLGETDEBUGMESSAGELOGARBPROC epoxy_glGetDebugMessageLogARB; + PFNGLGETDEBUGMESSAGELOGKHRPROC epoxy_glGetDebugMessageLogKHR; + PFNGLGETDETAILTEXFUNCSGISPROC epoxy_glGetDetailTexFuncSGIS; + PFNGLGETDOUBLEINDEXEDVEXTPROC epoxy_glGetDoubleIndexedvEXT; + PFNGLGETDOUBLEI_VPROC epoxy_glGetDoublei_v; + PFNGLGETDOUBLEI_VEXTPROC epoxy_glGetDoublei_vEXT; + PFNGLGETDOUBLEVPROC epoxy_glGetDoublev; + PFNGLGETDRIVERCONTROLSTRINGQCOMPROC epoxy_glGetDriverControlStringQCOM; + PFNGLGETDRIVERCONTROLSQCOMPROC epoxy_glGetDriverControlsQCOM; + PFNGLGETERRORPROC epoxy_glGetError; + PFNGLGETFENCEIVNVPROC epoxy_glGetFenceivNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetFinalCombinerInputParameterfvNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetFinalCombinerInputParameterivNV; + PFNGLGETFIRSTPERFQUERYIDINTELPROC epoxy_glGetFirstPerfQueryIdINTEL; + PFNGLGETFIXEDVPROC epoxy_glGetFixedv; + PFNGLGETFIXEDVOESPROC epoxy_glGetFixedvOES; + PFNGLGETFLOATINDEXEDVEXTPROC epoxy_glGetFloatIndexedvEXT; + PFNGLGETFLOATI_VPROC epoxy_glGetFloati_v; + PFNGLGETFLOATI_VEXTPROC epoxy_glGetFloati_vEXT; + PFNGLGETFLOATI_VNVPROC epoxy_glGetFloati_vNV; + PFNGLGETFLOATVPROC epoxy_glGetFloatv; + PFNGLGETFOGFUNCSGISPROC epoxy_glGetFogFuncSGIS; + PFNGLGETFRAGDATAINDEXPROC epoxy_glGetFragDataIndex; + PFNGLGETFRAGDATAINDEXEXTPROC epoxy_glGetFragDataIndexEXT; + PFNGLGETFRAGDATALOCATIONPROC epoxy_glGetFragDataLocation; + PFNGLGETFRAGDATALOCATIONEXTPROC epoxy_glGetFragDataLocationEXT; + PFNGLGETFRAGMENTLIGHTFVSGIXPROC epoxy_glGetFragmentLightfvSGIX; + PFNGLGETFRAGMENTLIGHTIVSGIXPROC epoxy_glGetFragmentLightivSGIX; + PFNGLGETFRAGMENTMATERIALFVSGIXPROC epoxy_glGetFragmentMaterialfvSGIX; + PFNGLGETFRAGMENTMATERIALIVSGIXPROC epoxy_glGetFragmentMaterialivSGIX; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetFramebufferAttachmentParameteriv; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetFramebufferAttachmentParameterivEXT; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC epoxy_glGetFramebufferAttachmentParameterivOES; + PFNGLGETFRAMEBUFFERPARAMETERIVPROC epoxy_glGetFramebufferParameteriv; + PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetFramebufferParameterivEXT; + PFNGLGETGRAPHICSRESETSTATUSPROC epoxy_glGetGraphicsResetStatus; + PFNGLGETGRAPHICSRESETSTATUSARBPROC epoxy_glGetGraphicsResetStatusARB; + PFNGLGETGRAPHICSRESETSTATUSEXTPROC epoxy_glGetGraphicsResetStatusEXT; + PFNGLGETGRAPHICSRESETSTATUSKHRPROC epoxy_glGetGraphicsResetStatusKHR; + PFNGLGETHANDLEARBPROC epoxy_glGetHandleARB; + PFNGLGETHISTOGRAMPROC epoxy_glGetHistogram; + PFNGLGETHISTOGRAMEXTPROC epoxy_glGetHistogramEXT; + PFNGLGETHISTOGRAMPARAMETERFVPROC epoxy_glGetHistogramParameterfv; + PFNGLGETHISTOGRAMPARAMETERFVEXTPROC epoxy_glGetHistogramParameterfvEXT; + PFNGLGETHISTOGRAMPARAMETERIVPROC epoxy_glGetHistogramParameteriv; + PFNGLGETHISTOGRAMPARAMETERIVEXTPROC epoxy_glGetHistogramParameterivEXT; + PFNGLGETHISTOGRAMPARAMETERXVOESPROC epoxy_glGetHistogramParameterxvOES; + PFNGLGETIMAGEHANDLEARBPROC epoxy_glGetImageHandleARB; + PFNGLGETIMAGEHANDLENVPROC epoxy_glGetImageHandleNV; + PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glGetImageTransformParameterfvHP; + PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glGetImageTransformParameterivHP; + PFNGLGETINFOLOGARBPROC epoxy_glGetInfoLogARB; + PFNGLGETINSTRUMENTSSGIXPROC epoxy_glGetInstrumentsSGIX; + PFNGLGETINTEGER64I_VPROC epoxy_glGetInteger64i_v; + PFNGLGETINTEGER64VPROC epoxy_glGetInteger64v; + PFNGLGETINTEGER64VAPPLEPROC epoxy_glGetInteger64vAPPLE; + PFNGLGETINTEGERINDEXEDVEXTPROC epoxy_glGetIntegerIndexedvEXT; + PFNGLGETINTEGERI_VPROC epoxy_glGetIntegeri_v; + PFNGLGETINTEGERI_VEXTPROC epoxy_glGetIntegeri_vEXT; + PFNGLGETINTEGERUI64I_VNVPROC epoxy_glGetIntegerui64i_vNV; + PFNGLGETINTEGERUI64VNVPROC epoxy_glGetIntegerui64vNV; + PFNGLGETINTEGERVPROC epoxy_glGetIntegerv; + PFNGLGETINTERNALFORMATSAMPLEIVNVPROC epoxy_glGetInternalformatSampleivNV; + PFNGLGETINTERNALFORMATI64VPROC epoxy_glGetInternalformati64v; + PFNGLGETINTERNALFORMATIVPROC epoxy_glGetInternalformativ; + PFNGLGETINVARIANTBOOLEANVEXTPROC epoxy_glGetInvariantBooleanvEXT; + PFNGLGETINVARIANTFLOATVEXTPROC epoxy_glGetInvariantFloatvEXT; + PFNGLGETINVARIANTINTEGERVEXTPROC epoxy_glGetInvariantIntegervEXT; + PFNGLGETLIGHTFVPROC epoxy_glGetLightfv; + PFNGLGETLIGHTIVPROC epoxy_glGetLightiv; + PFNGLGETLIGHTXOESPROC epoxy_glGetLightxOES; + PFNGLGETLIGHTXVPROC epoxy_glGetLightxv; + PFNGLGETLIGHTXVOESPROC epoxy_glGetLightxvOES; + PFNGLGETLISTPARAMETERFVSGIXPROC epoxy_glGetListParameterfvSGIX; + PFNGLGETLISTPARAMETERIVSGIXPROC epoxy_glGetListParameterivSGIX; + PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC epoxy_glGetLocalConstantBooleanvEXT; + PFNGLGETLOCALCONSTANTFLOATVEXTPROC epoxy_glGetLocalConstantFloatvEXT; + PFNGLGETLOCALCONSTANTINTEGERVEXTPROC epoxy_glGetLocalConstantIntegervEXT; + PFNGLGETMAPATTRIBPARAMETERFVNVPROC epoxy_glGetMapAttribParameterfvNV; + PFNGLGETMAPATTRIBPARAMETERIVNVPROC epoxy_glGetMapAttribParameterivNV; + PFNGLGETMAPCONTROLPOINTSNVPROC epoxy_glGetMapControlPointsNV; + PFNGLGETMAPPARAMETERFVNVPROC epoxy_glGetMapParameterfvNV; + PFNGLGETMAPPARAMETERIVNVPROC epoxy_glGetMapParameterivNV; + PFNGLGETMAPDVPROC epoxy_glGetMapdv; + PFNGLGETMAPFVPROC epoxy_glGetMapfv; + PFNGLGETMAPIVPROC epoxy_glGetMapiv; + PFNGLGETMAPXVOESPROC epoxy_glGetMapxvOES; + PFNGLGETMATERIALFVPROC epoxy_glGetMaterialfv; + PFNGLGETMATERIALIVPROC epoxy_glGetMaterialiv; + PFNGLGETMATERIALXOESPROC epoxy_glGetMaterialxOES; + PFNGLGETMATERIALXVPROC epoxy_glGetMaterialxv; + PFNGLGETMATERIALXVOESPROC epoxy_glGetMaterialxvOES; + PFNGLGETMINMAXPROC epoxy_glGetMinmax; + PFNGLGETMINMAXEXTPROC epoxy_glGetMinmaxEXT; + PFNGLGETMINMAXPARAMETERFVPROC epoxy_glGetMinmaxParameterfv; + PFNGLGETMINMAXPARAMETERFVEXTPROC epoxy_glGetMinmaxParameterfvEXT; + PFNGLGETMINMAXPARAMETERIVPROC epoxy_glGetMinmaxParameteriv; + PFNGLGETMINMAXPARAMETERIVEXTPROC epoxy_glGetMinmaxParameterivEXT; + PFNGLGETMULTITEXENVFVEXTPROC epoxy_glGetMultiTexEnvfvEXT; + PFNGLGETMULTITEXENVIVEXTPROC epoxy_glGetMultiTexEnvivEXT; + PFNGLGETMULTITEXGENDVEXTPROC epoxy_glGetMultiTexGendvEXT; + PFNGLGETMULTITEXGENFVEXTPROC epoxy_glGetMultiTexGenfvEXT; + PFNGLGETMULTITEXGENIVEXTPROC epoxy_glGetMultiTexGenivEXT; + PFNGLGETMULTITEXIMAGEEXTPROC epoxy_glGetMultiTexImageEXT; + PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC epoxy_glGetMultiTexLevelParameterfvEXT; + PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC epoxy_glGetMultiTexLevelParameterivEXT; + PFNGLGETMULTITEXPARAMETERIIVEXTPROC epoxy_glGetMultiTexParameterIivEXT; + PFNGLGETMULTITEXPARAMETERIUIVEXTPROC epoxy_glGetMultiTexParameterIuivEXT; + PFNGLGETMULTITEXPARAMETERFVEXTPROC epoxy_glGetMultiTexParameterfvEXT; + PFNGLGETMULTITEXPARAMETERIVEXTPROC epoxy_glGetMultiTexParameterivEXT; + PFNGLGETMULTISAMPLEFVPROC epoxy_glGetMultisamplefv; + PFNGLGETMULTISAMPLEFVNVPROC epoxy_glGetMultisamplefvNV; + PFNGLGETNAMEDBUFFERPARAMETERI64VPROC epoxy_glGetNamedBufferParameteri64v; + PFNGLGETNAMEDBUFFERPARAMETERIVPROC epoxy_glGetNamedBufferParameteriv; + PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedBufferParameterivEXT; + PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC epoxy_glGetNamedBufferParameterui64vNV; + PFNGLGETNAMEDBUFFERPOINTERVPROC epoxy_glGetNamedBufferPointerv; + PFNGLGETNAMEDBUFFERPOINTERVEXTPROC epoxy_glGetNamedBufferPointervEXT; + PFNGLGETNAMEDBUFFERSUBDATAPROC epoxy_glGetNamedBufferSubData; + PFNGLGETNAMEDBUFFERSUBDATAEXTPROC epoxy_glGetNamedBufferSubDataEXT; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetNamedFramebufferAttachmentParameteriv; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferAttachmentParameterivEXT; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC epoxy_glGetNamedFramebufferParameteriv; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferParameterivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC epoxy_glGetNamedProgramLocalParameterIivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC epoxy_glGetNamedProgramLocalParameterIuivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC epoxy_glGetNamedProgramLocalParameterdvEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC epoxy_glGetNamedProgramLocalParameterfvEXT; + PFNGLGETNAMEDPROGRAMSTRINGEXTPROC epoxy_glGetNamedProgramStringEXT; + PFNGLGETNAMEDPROGRAMIVEXTPROC epoxy_glGetNamedProgramivEXT; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC epoxy_glGetNamedRenderbufferParameteriv; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedRenderbufferParameterivEXT; + PFNGLGETNAMEDSTRINGARBPROC epoxy_glGetNamedStringARB; + PFNGLGETNAMEDSTRINGIVARBPROC epoxy_glGetNamedStringivARB; + PFNGLGETNEXTPERFQUERYIDINTELPROC epoxy_glGetNextPerfQueryIdINTEL; + PFNGLGETOBJECTBUFFERFVATIPROC epoxy_glGetObjectBufferfvATI; + PFNGLGETOBJECTBUFFERIVATIPROC epoxy_glGetObjectBufferivATI; + PFNGLGETOBJECTLABELPROC epoxy_glGetObjectLabel; + PFNGLGETOBJECTLABELEXTPROC epoxy_glGetObjectLabelEXT; + PFNGLGETOBJECTLABELKHRPROC epoxy_glGetObjectLabelKHR; + PFNGLGETOBJECTPARAMETERFVARBPROC epoxy_glGetObjectParameterfvARB; + PFNGLGETOBJECTPARAMETERIVAPPLEPROC epoxy_glGetObjectParameterivAPPLE; + PFNGLGETOBJECTPARAMETERIVARBPROC epoxy_glGetObjectParameterivARB; + PFNGLGETOBJECTPTRLABELPROC epoxy_glGetObjectPtrLabel; + PFNGLGETOBJECTPTRLABELKHRPROC epoxy_glGetObjectPtrLabelKHR; + PFNGLGETOCCLUSIONQUERYIVNVPROC epoxy_glGetOcclusionQueryivNV; + PFNGLGETOCCLUSIONQUERYUIVNVPROC epoxy_glGetOcclusionQueryuivNV; + PFNGLGETPATHCOLORGENFVNVPROC epoxy_glGetPathColorGenfvNV; + PFNGLGETPATHCOLORGENIVNVPROC epoxy_glGetPathColorGenivNV; + PFNGLGETPATHCOMMANDSNVPROC epoxy_glGetPathCommandsNV; + PFNGLGETPATHCOORDSNVPROC epoxy_glGetPathCoordsNV; + PFNGLGETPATHDASHARRAYNVPROC epoxy_glGetPathDashArrayNV; + PFNGLGETPATHLENGTHNVPROC epoxy_glGetPathLengthNV; + PFNGLGETPATHMETRICRANGENVPROC epoxy_glGetPathMetricRangeNV; + PFNGLGETPATHMETRICSNVPROC epoxy_glGetPathMetricsNV; + PFNGLGETPATHPARAMETERFVNVPROC epoxy_glGetPathParameterfvNV; + PFNGLGETPATHPARAMETERIVNVPROC epoxy_glGetPathParameterivNV; + PFNGLGETPATHSPACINGNVPROC epoxy_glGetPathSpacingNV; + PFNGLGETPATHTEXGENFVNVPROC epoxy_glGetPathTexGenfvNV; + PFNGLGETPATHTEXGENIVNVPROC epoxy_glGetPathTexGenivNV; + PFNGLGETPERFCOUNTERINFOINTELPROC epoxy_glGetPerfCounterInfoINTEL; + PFNGLGETPERFMONITORCOUNTERDATAAMDPROC epoxy_glGetPerfMonitorCounterDataAMD; + PFNGLGETPERFMONITORCOUNTERINFOAMDPROC epoxy_glGetPerfMonitorCounterInfoAMD; + PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC epoxy_glGetPerfMonitorCounterStringAMD; + PFNGLGETPERFMONITORCOUNTERSAMDPROC epoxy_glGetPerfMonitorCountersAMD; + PFNGLGETPERFMONITORGROUPSTRINGAMDPROC epoxy_glGetPerfMonitorGroupStringAMD; + PFNGLGETPERFMONITORGROUPSAMDPROC epoxy_glGetPerfMonitorGroupsAMD; + PFNGLGETPERFQUERYDATAINTELPROC epoxy_glGetPerfQueryDataINTEL; + PFNGLGETPERFQUERYIDBYNAMEINTELPROC epoxy_glGetPerfQueryIdByNameINTEL; + PFNGLGETPERFQUERYINFOINTELPROC epoxy_glGetPerfQueryInfoINTEL; + PFNGLGETPIXELMAPFVPROC epoxy_glGetPixelMapfv; + PFNGLGETPIXELMAPUIVPROC epoxy_glGetPixelMapuiv; + PFNGLGETPIXELMAPUSVPROC epoxy_glGetPixelMapusv; + PFNGLGETPIXELMAPXVPROC epoxy_glGetPixelMapxv; + PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC epoxy_glGetPixelTexGenParameterfvSGIS; + PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC epoxy_glGetPixelTexGenParameterivSGIS; + PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glGetPixelTransformParameterfvEXT; + PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glGetPixelTransformParameterivEXT; + PFNGLGETPOINTERINDEXEDVEXTPROC epoxy_glGetPointerIndexedvEXT; + PFNGLGETPOINTERI_VEXTPROC epoxy_glGetPointeri_vEXT; + PFNGLGETPOINTERVPROC epoxy_glGetPointerv; + PFNGLGETPOINTERVEXTPROC epoxy_glGetPointervEXT; + PFNGLGETPOINTERVKHRPROC epoxy_glGetPointervKHR; + PFNGLGETPOLYGONSTIPPLEPROC epoxy_glGetPolygonStipple; + PFNGLGETPROGRAMBINARYPROC epoxy_glGetProgramBinary; + PFNGLGETPROGRAMBINARYOESPROC epoxy_glGetProgramBinaryOES; + PFNGLGETPROGRAMENVPARAMETERIIVNVPROC epoxy_glGetProgramEnvParameterIivNV; + PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC epoxy_glGetProgramEnvParameterIuivNV; + PFNGLGETPROGRAMENVPARAMETERDVARBPROC epoxy_glGetProgramEnvParameterdvARB; + PFNGLGETPROGRAMENVPARAMETERFVARBPROC epoxy_glGetProgramEnvParameterfvARB; + PFNGLGETPROGRAMINFOLOGPROC epoxy_glGetProgramInfoLog; + PFNGLGETPROGRAMINTERFACEIVPROC epoxy_glGetProgramInterfaceiv; + PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC epoxy_glGetProgramLocalParameterIivNV; + PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC epoxy_glGetProgramLocalParameterIuivNV; + PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC epoxy_glGetProgramLocalParameterdvARB; + PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC epoxy_glGetProgramLocalParameterfvARB; + PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC epoxy_glGetProgramNamedParameterdvNV; + PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC epoxy_glGetProgramNamedParameterfvNV; + PFNGLGETPROGRAMPARAMETERDVNVPROC epoxy_glGetProgramParameterdvNV; + PFNGLGETPROGRAMPARAMETERFVNVPROC epoxy_glGetProgramParameterfvNV; + PFNGLGETPROGRAMPIPELINEINFOLOGPROC epoxy_glGetProgramPipelineInfoLog; + PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC epoxy_glGetProgramPipelineInfoLogEXT; + PFNGLGETPROGRAMPIPELINEIVPROC epoxy_glGetProgramPipelineiv; + PFNGLGETPROGRAMPIPELINEIVEXTPROC epoxy_glGetProgramPipelineivEXT; + PFNGLGETPROGRAMRESOURCEINDEXPROC epoxy_glGetProgramResourceIndex; + PFNGLGETPROGRAMRESOURCELOCATIONPROC epoxy_glGetProgramResourceLocation; + PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC epoxy_glGetProgramResourceLocationIndex; + PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC epoxy_glGetProgramResourceLocationIndexEXT; + PFNGLGETPROGRAMRESOURCENAMEPROC epoxy_glGetProgramResourceName; + PFNGLGETPROGRAMRESOURCEFVNVPROC epoxy_glGetProgramResourcefvNV; + PFNGLGETPROGRAMRESOURCEIVPROC epoxy_glGetProgramResourceiv; + PFNGLGETPROGRAMSTAGEIVPROC epoxy_glGetProgramStageiv; + PFNGLGETPROGRAMSTRINGARBPROC epoxy_glGetProgramStringARB; + PFNGLGETPROGRAMSTRINGNVPROC epoxy_glGetProgramStringNV; + PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC epoxy_glGetProgramSubroutineParameteruivNV; + PFNGLGETPROGRAMIVPROC epoxy_glGetProgramiv; + PFNGLGETPROGRAMIVARBPROC epoxy_glGetProgramivARB; + PFNGLGETPROGRAMIVNVPROC epoxy_glGetProgramivNV; + PFNGLGETQUERYBUFFEROBJECTI64VPROC epoxy_glGetQueryBufferObjecti64v; + PFNGLGETQUERYBUFFEROBJECTIVPROC epoxy_glGetQueryBufferObjectiv; + PFNGLGETQUERYBUFFEROBJECTUI64VPROC epoxy_glGetQueryBufferObjectui64v; + PFNGLGETQUERYBUFFEROBJECTUIVPROC epoxy_glGetQueryBufferObjectuiv; + PFNGLGETQUERYINDEXEDIVPROC epoxy_glGetQueryIndexediv; + PFNGLGETQUERYOBJECTI64VPROC epoxy_glGetQueryObjecti64v; + PFNGLGETQUERYOBJECTI64VEXTPROC epoxy_glGetQueryObjecti64vEXT; + PFNGLGETQUERYOBJECTIVPROC epoxy_glGetQueryObjectiv; + PFNGLGETQUERYOBJECTIVARBPROC epoxy_glGetQueryObjectivARB; + PFNGLGETQUERYOBJECTIVEXTPROC epoxy_glGetQueryObjectivEXT; + PFNGLGETQUERYOBJECTUI64VPROC epoxy_glGetQueryObjectui64v; + PFNGLGETQUERYOBJECTUI64VEXTPROC epoxy_glGetQueryObjectui64vEXT; + PFNGLGETQUERYOBJECTUIVPROC epoxy_glGetQueryObjectuiv; + PFNGLGETQUERYOBJECTUIVARBPROC epoxy_glGetQueryObjectuivARB; + PFNGLGETQUERYOBJECTUIVEXTPROC epoxy_glGetQueryObjectuivEXT; + PFNGLGETQUERYIVPROC epoxy_glGetQueryiv; + PFNGLGETQUERYIVARBPROC epoxy_glGetQueryivARB; + PFNGLGETQUERYIVEXTPROC epoxy_glGetQueryivEXT; + PFNGLGETRENDERBUFFERPARAMETERIVPROC epoxy_glGetRenderbufferParameteriv; + PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetRenderbufferParameterivEXT; + PFNGLGETRENDERBUFFERPARAMETERIVOESPROC epoxy_glGetRenderbufferParameterivOES; + PFNGLGETSAMPLERPARAMETERIIVPROC epoxy_glGetSamplerParameterIiv; + PFNGLGETSAMPLERPARAMETERIIVEXTPROC epoxy_glGetSamplerParameterIivEXT; + PFNGLGETSAMPLERPARAMETERIIVOESPROC epoxy_glGetSamplerParameterIivOES; + PFNGLGETSAMPLERPARAMETERIUIVPROC epoxy_glGetSamplerParameterIuiv; + PFNGLGETSAMPLERPARAMETERIUIVEXTPROC epoxy_glGetSamplerParameterIuivEXT; + PFNGLGETSAMPLERPARAMETERIUIVOESPROC epoxy_glGetSamplerParameterIuivOES; + PFNGLGETSAMPLERPARAMETERFVPROC epoxy_glGetSamplerParameterfv; + PFNGLGETSAMPLERPARAMETERIVPROC epoxy_glGetSamplerParameteriv; + PFNGLGETSEPARABLEFILTERPROC epoxy_glGetSeparableFilter; + PFNGLGETSEPARABLEFILTEREXTPROC epoxy_glGetSeparableFilterEXT; + PFNGLGETSHADERINFOLOGPROC epoxy_glGetShaderInfoLog; + PFNGLGETSHADERPRECISIONFORMATPROC epoxy_glGetShaderPrecisionFormat; + PFNGLGETSHADERSOURCEPROC epoxy_glGetShaderSource; + PFNGLGETSHADERSOURCEARBPROC epoxy_glGetShaderSourceARB; + PFNGLGETSHADERIVPROC epoxy_glGetShaderiv; + PFNGLGETSHARPENTEXFUNCSGISPROC epoxy_glGetSharpenTexFuncSGIS; + PFNGLGETSTAGEINDEXNVPROC epoxy_glGetStageIndexNV; + PFNGLGETSTRINGPROC epoxy_glGetString; + PFNGLGETSTRINGIPROC epoxy_glGetStringi; + PFNGLGETSUBROUTINEINDEXPROC epoxy_glGetSubroutineIndex; + PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC epoxy_glGetSubroutineUniformLocation; + PFNGLGETSYNCIVPROC epoxy_glGetSynciv; + PFNGLGETSYNCIVAPPLEPROC epoxy_glGetSyncivAPPLE; + PFNGLGETTEXBUMPPARAMETERFVATIPROC epoxy_glGetTexBumpParameterfvATI; + PFNGLGETTEXBUMPPARAMETERIVATIPROC epoxy_glGetTexBumpParameterivATI; + PFNGLGETTEXENVFVPROC epoxy_glGetTexEnvfv; + PFNGLGETTEXENVIVPROC epoxy_glGetTexEnviv; + PFNGLGETTEXENVXVPROC epoxy_glGetTexEnvxv; + PFNGLGETTEXENVXVOESPROC epoxy_glGetTexEnvxvOES; + PFNGLGETTEXFILTERFUNCSGISPROC epoxy_glGetTexFilterFuncSGIS; + PFNGLGETTEXGENDVPROC epoxy_glGetTexGendv; + PFNGLGETTEXGENFVPROC epoxy_glGetTexGenfv; + PFNGLGETTEXGENFVOESPROC epoxy_glGetTexGenfvOES; + PFNGLGETTEXGENIVPROC epoxy_glGetTexGeniv; + PFNGLGETTEXGENIVOESPROC epoxy_glGetTexGenivOES; + PFNGLGETTEXGENXVOESPROC epoxy_glGetTexGenxvOES; + PFNGLGETTEXIMAGEPROC epoxy_glGetTexImage; + PFNGLGETTEXLEVELPARAMETERFVPROC epoxy_glGetTexLevelParameterfv; + PFNGLGETTEXLEVELPARAMETERIVPROC epoxy_glGetTexLevelParameteriv; + PFNGLGETTEXLEVELPARAMETERXVOESPROC epoxy_glGetTexLevelParameterxvOES; + PFNGLGETTEXPARAMETERIIVPROC epoxy_glGetTexParameterIiv; + PFNGLGETTEXPARAMETERIIVEXTPROC epoxy_glGetTexParameterIivEXT; + PFNGLGETTEXPARAMETERIIVOESPROC epoxy_glGetTexParameterIivOES; + PFNGLGETTEXPARAMETERIUIVPROC epoxy_glGetTexParameterIuiv; + PFNGLGETTEXPARAMETERIUIVEXTPROC epoxy_glGetTexParameterIuivEXT; + PFNGLGETTEXPARAMETERIUIVOESPROC epoxy_glGetTexParameterIuivOES; + PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC epoxy_glGetTexParameterPointervAPPLE; + PFNGLGETTEXPARAMETERFVPROC epoxy_glGetTexParameterfv; + PFNGLGETTEXPARAMETERIVPROC epoxy_glGetTexParameteriv; + PFNGLGETTEXPARAMETERXVPROC epoxy_glGetTexParameterxv; + PFNGLGETTEXPARAMETERXVOESPROC epoxy_glGetTexParameterxvOES; + PFNGLGETTEXTUREHANDLEARBPROC epoxy_glGetTextureHandleARB; + PFNGLGETTEXTUREHANDLENVPROC epoxy_glGetTextureHandleNV; + PFNGLGETTEXTUREIMAGEPROC epoxy_glGetTextureImage; + PFNGLGETTEXTUREIMAGEEXTPROC epoxy_glGetTextureImageEXT; + PFNGLGETTEXTURELEVELPARAMETERFVPROC epoxy_glGetTextureLevelParameterfv; + PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC epoxy_glGetTextureLevelParameterfvEXT; + PFNGLGETTEXTURELEVELPARAMETERIVPROC epoxy_glGetTextureLevelParameteriv; + PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC epoxy_glGetTextureLevelParameterivEXT; + PFNGLGETTEXTUREPARAMETERIIVPROC epoxy_glGetTextureParameterIiv; + PFNGLGETTEXTUREPARAMETERIIVEXTPROC epoxy_glGetTextureParameterIivEXT; + PFNGLGETTEXTUREPARAMETERIUIVPROC epoxy_glGetTextureParameterIuiv; + PFNGLGETTEXTUREPARAMETERIUIVEXTPROC epoxy_glGetTextureParameterIuivEXT; + PFNGLGETTEXTUREPARAMETERFVPROC epoxy_glGetTextureParameterfv; + PFNGLGETTEXTUREPARAMETERFVEXTPROC epoxy_glGetTextureParameterfvEXT; + PFNGLGETTEXTUREPARAMETERIVPROC epoxy_glGetTextureParameteriv; + PFNGLGETTEXTUREPARAMETERIVEXTPROC epoxy_glGetTextureParameterivEXT; + PFNGLGETTEXTURESAMPLERHANDLEARBPROC epoxy_glGetTextureSamplerHandleARB; + PFNGLGETTEXTURESAMPLERHANDLENVPROC epoxy_glGetTextureSamplerHandleNV; + PFNGLGETTEXTURESUBIMAGEPROC epoxy_glGetTextureSubImage; + PFNGLGETTRACKMATRIXIVNVPROC epoxy_glGetTrackMatrixivNV; + PFNGLGETTRANSFORMFEEDBACKVARYINGPROC epoxy_glGetTransformFeedbackVarying; + PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC epoxy_glGetTransformFeedbackVaryingEXT; + PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC epoxy_glGetTransformFeedbackVaryingNV; + PFNGLGETTRANSFORMFEEDBACKI64_VPROC epoxy_glGetTransformFeedbacki64_v; + PFNGLGETTRANSFORMFEEDBACKI_VPROC epoxy_glGetTransformFeedbacki_v; + PFNGLGETTRANSFORMFEEDBACKIVPROC epoxy_glGetTransformFeedbackiv; + PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC epoxy_glGetTranslatedShaderSourceANGLE; + PFNGLGETUNIFORMBLOCKINDEXPROC epoxy_glGetUniformBlockIndex; + PFNGLGETUNIFORMBUFFERSIZEEXTPROC epoxy_glGetUniformBufferSizeEXT; + PFNGLGETUNIFORMINDICESPROC epoxy_glGetUniformIndices; + PFNGLGETUNIFORMLOCATIONPROC epoxy_glGetUniformLocation; + PFNGLGETUNIFORMLOCATIONARBPROC epoxy_glGetUniformLocationARB; + PFNGLGETUNIFORMOFFSETEXTPROC epoxy_glGetUniformOffsetEXT; + PFNGLGETUNIFORMSUBROUTINEUIVPROC epoxy_glGetUniformSubroutineuiv; + PFNGLGETUNIFORMDVPROC epoxy_glGetUniformdv; + PFNGLGETUNIFORMFVPROC epoxy_glGetUniformfv; + PFNGLGETUNIFORMFVARBPROC epoxy_glGetUniformfvARB; + PFNGLGETUNIFORMI64VARBPROC epoxy_glGetUniformi64vARB; + PFNGLGETUNIFORMI64VNVPROC epoxy_glGetUniformi64vNV; + PFNGLGETUNIFORMIVPROC epoxy_glGetUniformiv; + PFNGLGETUNIFORMIVARBPROC epoxy_glGetUniformivARB; + PFNGLGETUNIFORMUI64VARBPROC epoxy_glGetUniformui64vARB; + PFNGLGETUNIFORMUI64VNVPROC epoxy_glGetUniformui64vNV; + PFNGLGETUNIFORMUIVPROC epoxy_glGetUniformuiv; + PFNGLGETUNIFORMUIVEXTPROC epoxy_glGetUniformuivEXT; + PFNGLGETVARIANTARRAYOBJECTFVATIPROC epoxy_glGetVariantArrayObjectfvATI; + PFNGLGETVARIANTARRAYOBJECTIVATIPROC epoxy_glGetVariantArrayObjectivATI; + PFNGLGETVARIANTBOOLEANVEXTPROC epoxy_glGetVariantBooleanvEXT; + PFNGLGETVARIANTFLOATVEXTPROC epoxy_glGetVariantFloatvEXT; + PFNGLGETVARIANTINTEGERVEXTPROC epoxy_glGetVariantIntegervEXT; + PFNGLGETVARIANTPOINTERVEXTPROC epoxy_glGetVariantPointervEXT; + PFNGLGETVARYINGLOCATIONNVPROC epoxy_glGetVaryingLocationNV; + PFNGLGETVERTEXARRAYINDEXED64IVPROC epoxy_glGetVertexArrayIndexed64iv; + PFNGLGETVERTEXARRAYINDEXEDIVPROC epoxy_glGetVertexArrayIndexediv; + PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC epoxy_glGetVertexArrayIntegeri_vEXT; + PFNGLGETVERTEXARRAYINTEGERVEXTPROC epoxy_glGetVertexArrayIntegervEXT; + PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC epoxy_glGetVertexArrayPointeri_vEXT; + PFNGLGETVERTEXARRAYPOINTERVEXTPROC epoxy_glGetVertexArrayPointervEXT; + PFNGLGETVERTEXARRAYIVPROC epoxy_glGetVertexArrayiv; + PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC epoxy_glGetVertexAttribArrayObjectfvATI; + PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC epoxy_glGetVertexAttribArrayObjectivATI; + PFNGLGETVERTEXATTRIBIIVPROC epoxy_glGetVertexAttribIiv; + PFNGLGETVERTEXATTRIBIIVEXTPROC epoxy_glGetVertexAttribIivEXT; + PFNGLGETVERTEXATTRIBIUIVPROC epoxy_glGetVertexAttribIuiv; + PFNGLGETVERTEXATTRIBIUIVEXTPROC epoxy_glGetVertexAttribIuivEXT; + PFNGLGETVERTEXATTRIBLDVPROC epoxy_glGetVertexAttribLdv; + PFNGLGETVERTEXATTRIBLDVEXTPROC epoxy_glGetVertexAttribLdvEXT; + PFNGLGETVERTEXATTRIBLI64VNVPROC epoxy_glGetVertexAttribLi64vNV; + PFNGLGETVERTEXATTRIBLUI64VARBPROC epoxy_glGetVertexAttribLui64vARB; + PFNGLGETVERTEXATTRIBLUI64VNVPROC epoxy_glGetVertexAttribLui64vNV; + PFNGLGETVERTEXATTRIBPOINTERVPROC epoxy_glGetVertexAttribPointerv; + PFNGLGETVERTEXATTRIBPOINTERVARBPROC epoxy_glGetVertexAttribPointervARB; + PFNGLGETVERTEXATTRIBPOINTERVNVPROC epoxy_glGetVertexAttribPointervNV; + PFNGLGETVERTEXATTRIBDVPROC epoxy_glGetVertexAttribdv; + PFNGLGETVERTEXATTRIBDVARBPROC epoxy_glGetVertexAttribdvARB; + PFNGLGETVERTEXATTRIBDVNVPROC epoxy_glGetVertexAttribdvNV; + PFNGLGETVERTEXATTRIBFVPROC epoxy_glGetVertexAttribfv; + PFNGLGETVERTEXATTRIBFVARBPROC epoxy_glGetVertexAttribfvARB; + PFNGLGETVERTEXATTRIBFVNVPROC epoxy_glGetVertexAttribfvNV; + PFNGLGETVERTEXATTRIBIVPROC epoxy_glGetVertexAttribiv; + PFNGLGETVERTEXATTRIBIVARBPROC epoxy_glGetVertexAttribivARB; + PFNGLGETVERTEXATTRIBIVNVPROC epoxy_glGetVertexAttribivNV; + PFNGLGETVIDEOCAPTURESTREAMDVNVPROC epoxy_glGetVideoCaptureStreamdvNV; + PFNGLGETVIDEOCAPTURESTREAMFVNVPROC epoxy_glGetVideoCaptureStreamfvNV; + PFNGLGETVIDEOCAPTURESTREAMIVNVPROC epoxy_glGetVideoCaptureStreamivNV; + PFNGLGETVIDEOCAPTUREIVNVPROC epoxy_glGetVideoCaptureivNV; + PFNGLGETVIDEOI64VNVPROC epoxy_glGetVideoi64vNV; + PFNGLGETVIDEOIVNVPROC epoxy_glGetVideoivNV; + PFNGLGETVIDEOUI64VNVPROC epoxy_glGetVideoui64vNV; + PFNGLGETVIDEOUIVNVPROC epoxy_glGetVideouivNV; + PFNGLGETNCOLORTABLEPROC epoxy_glGetnColorTable; + PFNGLGETNCOLORTABLEARBPROC epoxy_glGetnColorTableARB; + PFNGLGETNCOMPRESSEDTEXIMAGEPROC epoxy_glGetnCompressedTexImage; + PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetnCompressedTexImageARB; + PFNGLGETNCONVOLUTIONFILTERPROC epoxy_glGetnConvolutionFilter; + PFNGLGETNCONVOLUTIONFILTERARBPROC epoxy_glGetnConvolutionFilterARB; + PFNGLGETNHISTOGRAMPROC epoxy_glGetnHistogram; + PFNGLGETNHISTOGRAMARBPROC epoxy_glGetnHistogramARB; + PFNGLGETNMAPDVPROC epoxy_glGetnMapdv; + PFNGLGETNMAPDVARBPROC epoxy_glGetnMapdvARB; + PFNGLGETNMAPFVPROC epoxy_glGetnMapfv; + PFNGLGETNMAPFVARBPROC epoxy_glGetnMapfvARB; + PFNGLGETNMAPIVPROC epoxy_glGetnMapiv; + PFNGLGETNMAPIVARBPROC epoxy_glGetnMapivARB; + PFNGLGETNMINMAXPROC epoxy_glGetnMinmax; + PFNGLGETNMINMAXARBPROC epoxy_glGetnMinmaxARB; + PFNGLGETNPIXELMAPFVPROC epoxy_glGetnPixelMapfv; + PFNGLGETNPIXELMAPFVARBPROC epoxy_glGetnPixelMapfvARB; + PFNGLGETNPIXELMAPUIVPROC epoxy_glGetnPixelMapuiv; + PFNGLGETNPIXELMAPUIVARBPROC epoxy_glGetnPixelMapuivARB; + PFNGLGETNPIXELMAPUSVPROC epoxy_glGetnPixelMapusv; + PFNGLGETNPIXELMAPUSVARBPROC epoxy_glGetnPixelMapusvARB; + PFNGLGETNPOLYGONSTIPPLEPROC epoxy_glGetnPolygonStipple; + PFNGLGETNPOLYGONSTIPPLEARBPROC epoxy_glGetnPolygonStippleARB; + PFNGLGETNSEPARABLEFILTERPROC epoxy_glGetnSeparableFilter; + PFNGLGETNSEPARABLEFILTERARBPROC epoxy_glGetnSeparableFilterARB; + PFNGLGETNTEXIMAGEPROC epoxy_glGetnTexImage; + PFNGLGETNTEXIMAGEARBPROC epoxy_glGetnTexImageARB; + PFNGLGETNUNIFORMDVPROC epoxy_glGetnUniformdv; + PFNGLGETNUNIFORMDVARBPROC epoxy_glGetnUniformdvARB; + PFNGLGETNUNIFORMFVPROC epoxy_glGetnUniformfv; + PFNGLGETNUNIFORMFVARBPROC epoxy_glGetnUniformfvARB; + PFNGLGETNUNIFORMFVEXTPROC epoxy_glGetnUniformfvEXT; + PFNGLGETNUNIFORMFVKHRPROC epoxy_glGetnUniformfvKHR; + PFNGLGETNUNIFORMI64VARBPROC epoxy_glGetnUniformi64vARB; + PFNGLGETNUNIFORMIVPROC epoxy_glGetnUniformiv; + PFNGLGETNUNIFORMIVARBPROC epoxy_glGetnUniformivARB; + PFNGLGETNUNIFORMIVEXTPROC epoxy_glGetnUniformivEXT; + PFNGLGETNUNIFORMIVKHRPROC epoxy_glGetnUniformivKHR; + PFNGLGETNUNIFORMUI64VARBPROC epoxy_glGetnUniformui64vARB; + PFNGLGETNUNIFORMUIVPROC epoxy_glGetnUniformuiv; + PFNGLGETNUNIFORMUIVARBPROC epoxy_glGetnUniformuivARB; + PFNGLGETNUNIFORMUIVKHRPROC epoxy_glGetnUniformuivKHR; + PFNGLGLOBALALPHAFACTORBSUNPROC epoxy_glGlobalAlphaFactorbSUN; + PFNGLGLOBALALPHAFACTORDSUNPROC epoxy_glGlobalAlphaFactordSUN; + PFNGLGLOBALALPHAFACTORFSUNPROC epoxy_glGlobalAlphaFactorfSUN; + PFNGLGLOBALALPHAFACTORISUNPROC epoxy_glGlobalAlphaFactoriSUN; + PFNGLGLOBALALPHAFACTORSSUNPROC epoxy_glGlobalAlphaFactorsSUN; + PFNGLGLOBALALPHAFACTORUBSUNPROC epoxy_glGlobalAlphaFactorubSUN; + PFNGLGLOBALALPHAFACTORUISUNPROC epoxy_glGlobalAlphaFactoruiSUN; + PFNGLGLOBALALPHAFACTORUSSUNPROC epoxy_glGlobalAlphaFactorusSUN; + PFNGLHINTPROC epoxy_glHint; + PFNGLHINTPGIPROC epoxy_glHintPGI; + PFNGLHISTOGRAMPROC epoxy_glHistogram; + PFNGLHISTOGRAMEXTPROC epoxy_glHistogramEXT; + PFNGLIGLOOINTERFACESGIXPROC epoxy_glIglooInterfaceSGIX; + PFNGLIMAGETRANSFORMPARAMETERFHPPROC epoxy_glImageTransformParameterfHP; + PFNGLIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glImageTransformParameterfvHP; + PFNGLIMAGETRANSFORMPARAMETERIHPPROC epoxy_glImageTransformParameteriHP; + PFNGLIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glImageTransformParameterivHP; + PFNGLIMPORTSYNCEXTPROC epoxy_glImportSyncEXT; + PFNGLINDEXFORMATNVPROC epoxy_glIndexFormatNV; + PFNGLINDEXFUNCEXTPROC epoxy_glIndexFuncEXT; + PFNGLINDEXMASKPROC epoxy_glIndexMask; + PFNGLINDEXMATERIALEXTPROC epoxy_glIndexMaterialEXT; + PFNGLINDEXPOINTERPROC epoxy_glIndexPointer; + PFNGLINDEXPOINTEREXTPROC epoxy_glIndexPointerEXT; + PFNGLINDEXPOINTERLISTIBMPROC epoxy_glIndexPointerListIBM; + PFNGLINDEXDPROC epoxy_glIndexd; + PFNGLINDEXDVPROC epoxy_glIndexdv; + PFNGLINDEXFPROC epoxy_glIndexf; + PFNGLINDEXFVPROC epoxy_glIndexfv; + PFNGLINDEXIPROC epoxy_glIndexi; + PFNGLINDEXIVPROC epoxy_glIndexiv; + PFNGLINDEXSPROC epoxy_glIndexs; + PFNGLINDEXSVPROC epoxy_glIndexsv; + PFNGLINDEXUBPROC epoxy_glIndexub; + PFNGLINDEXUBVPROC epoxy_glIndexubv; + PFNGLINDEXXOESPROC epoxy_glIndexxOES; + PFNGLINDEXXVOESPROC epoxy_glIndexxvOES; + PFNGLINITNAMESPROC epoxy_glInitNames; + PFNGLINSERTCOMPONENTEXTPROC epoxy_glInsertComponentEXT; + PFNGLINSERTEVENTMARKEREXTPROC epoxy_glInsertEventMarkerEXT; + PFNGLINSTRUMENTSBUFFERSGIXPROC epoxy_glInstrumentsBufferSGIX; + PFNGLINTERLEAVEDARRAYSPROC epoxy_glInterleavedArrays; + PFNGLINTERPOLATEPATHSNVPROC epoxy_glInterpolatePathsNV; + PFNGLINVALIDATEBUFFERDATAPROC epoxy_glInvalidateBufferData; + PFNGLINVALIDATEBUFFERSUBDATAPROC epoxy_glInvalidateBufferSubData; + PFNGLINVALIDATEFRAMEBUFFERPROC epoxy_glInvalidateFramebuffer; + PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC epoxy_glInvalidateNamedFramebufferData; + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC epoxy_glInvalidateNamedFramebufferSubData; + PFNGLINVALIDATESUBFRAMEBUFFERPROC epoxy_glInvalidateSubFramebuffer; + PFNGLINVALIDATETEXIMAGEPROC epoxy_glInvalidateTexImage; + PFNGLINVALIDATETEXSUBIMAGEPROC epoxy_glInvalidateTexSubImage; + PFNGLISASYNCMARKERSGIXPROC epoxy_glIsAsyncMarkerSGIX; + PFNGLISBUFFERPROC epoxy_glIsBuffer; + PFNGLISBUFFERARBPROC epoxy_glIsBufferARB; + PFNGLISBUFFERRESIDENTNVPROC epoxy_glIsBufferResidentNV; + PFNGLISCOMMANDLISTNVPROC epoxy_glIsCommandListNV; + PFNGLISENABLEDPROC epoxy_glIsEnabled; + PFNGLISENABLEDINDEXEDEXTPROC epoxy_glIsEnabledIndexedEXT; + PFNGLISENABLEDIPROC epoxy_glIsEnabledi; + PFNGLISENABLEDIEXTPROC epoxy_glIsEnablediEXT; + PFNGLISENABLEDINVPROC epoxy_glIsEnablediNV; + PFNGLISENABLEDIOESPROC epoxy_glIsEnablediOES; + PFNGLISFENCEAPPLEPROC epoxy_glIsFenceAPPLE; + PFNGLISFENCENVPROC epoxy_glIsFenceNV; + PFNGLISFRAMEBUFFERPROC epoxy_glIsFramebuffer; + PFNGLISFRAMEBUFFEREXTPROC epoxy_glIsFramebufferEXT; + PFNGLISFRAMEBUFFEROESPROC epoxy_glIsFramebufferOES; + PFNGLISIMAGEHANDLERESIDENTARBPROC epoxy_glIsImageHandleResidentARB; + PFNGLISIMAGEHANDLERESIDENTNVPROC epoxy_glIsImageHandleResidentNV; + PFNGLISLISTPROC epoxy_glIsList; + PFNGLISNAMEAMDPROC epoxy_glIsNameAMD; + PFNGLISNAMEDBUFFERRESIDENTNVPROC epoxy_glIsNamedBufferResidentNV; + PFNGLISNAMEDSTRINGARBPROC epoxy_glIsNamedStringARB; + PFNGLISOBJECTBUFFERATIPROC epoxy_glIsObjectBufferATI; + PFNGLISOCCLUSIONQUERYNVPROC epoxy_glIsOcclusionQueryNV; + PFNGLISPATHNVPROC epoxy_glIsPathNV; + PFNGLISPOINTINFILLPATHNVPROC epoxy_glIsPointInFillPathNV; + PFNGLISPOINTINSTROKEPATHNVPROC epoxy_glIsPointInStrokePathNV; + PFNGLISPROGRAMPROC epoxy_glIsProgram; + PFNGLISPROGRAMARBPROC epoxy_glIsProgramARB; + PFNGLISPROGRAMNVPROC epoxy_glIsProgramNV; + PFNGLISPROGRAMPIPELINEPROC epoxy_glIsProgramPipeline; + PFNGLISPROGRAMPIPELINEEXTPROC epoxy_glIsProgramPipelineEXT; + PFNGLISQUERYPROC epoxy_glIsQuery; + PFNGLISQUERYARBPROC epoxy_glIsQueryARB; + PFNGLISQUERYEXTPROC epoxy_glIsQueryEXT; + PFNGLISRENDERBUFFERPROC epoxy_glIsRenderbuffer; + PFNGLISRENDERBUFFEREXTPROC epoxy_glIsRenderbufferEXT; + PFNGLISRENDERBUFFEROESPROC epoxy_glIsRenderbufferOES; + PFNGLISSAMPLERPROC epoxy_glIsSampler; + PFNGLISSHADERPROC epoxy_glIsShader; + PFNGLISSTATENVPROC epoxy_glIsStateNV; + PFNGLISSYNCPROC epoxy_glIsSync; + PFNGLISSYNCAPPLEPROC epoxy_glIsSyncAPPLE; + PFNGLISTEXTUREPROC epoxy_glIsTexture; + PFNGLISTEXTUREEXTPROC epoxy_glIsTextureEXT; + PFNGLISTEXTUREHANDLERESIDENTARBPROC epoxy_glIsTextureHandleResidentARB; + PFNGLISTEXTUREHANDLERESIDENTNVPROC epoxy_glIsTextureHandleResidentNV; + PFNGLISTRANSFORMFEEDBACKPROC epoxy_glIsTransformFeedback; + PFNGLISTRANSFORMFEEDBACKNVPROC epoxy_glIsTransformFeedbackNV; + PFNGLISVARIANTENABLEDEXTPROC epoxy_glIsVariantEnabledEXT; + PFNGLISVERTEXARRAYPROC epoxy_glIsVertexArray; + PFNGLISVERTEXARRAYAPPLEPROC epoxy_glIsVertexArrayAPPLE; + PFNGLISVERTEXARRAYOESPROC epoxy_glIsVertexArrayOES; + PFNGLISVERTEXATTRIBENABLEDAPPLEPROC epoxy_glIsVertexAttribEnabledAPPLE; + PFNGLLABELOBJECTEXTPROC epoxy_glLabelObjectEXT; + PFNGLLIGHTENVISGIXPROC epoxy_glLightEnviSGIX; + PFNGLLIGHTMODELFPROC epoxy_glLightModelf; + PFNGLLIGHTMODELFVPROC epoxy_glLightModelfv; + PFNGLLIGHTMODELIPROC epoxy_glLightModeli; + PFNGLLIGHTMODELIVPROC epoxy_glLightModeliv; + PFNGLLIGHTMODELXPROC epoxy_glLightModelx; + PFNGLLIGHTMODELXOESPROC epoxy_glLightModelxOES; + PFNGLLIGHTMODELXVPROC epoxy_glLightModelxv; + PFNGLLIGHTMODELXVOESPROC epoxy_glLightModelxvOES; + PFNGLLIGHTFPROC epoxy_glLightf; + PFNGLLIGHTFVPROC epoxy_glLightfv; + PFNGLLIGHTIPROC epoxy_glLighti; + PFNGLLIGHTIVPROC epoxy_glLightiv; + PFNGLLIGHTXPROC epoxy_glLightx; + PFNGLLIGHTXOESPROC epoxy_glLightxOES; + PFNGLLIGHTXVPROC epoxy_glLightxv; + PFNGLLIGHTXVOESPROC epoxy_glLightxvOES; + PFNGLLINESTIPPLEPROC epoxy_glLineStipple; + PFNGLLINEWIDTHPROC epoxy_glLineWidth; + PFNGLLINEWIDTHXPROC epoxy_glLineWidthx; + PFNGLLINEWIDTHXOESPROC epoxy_glLineWidthxOES; + PFNGLLINKPROGRAMPROC epoxy_glLinkProgram; + PFNGLLINKPROGRAMARBPROC epoxy_glLinkProgramARB; + PFNGLLISTBASEPROC epoxy_glListBase; + PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC epoxy_glListDrawCommandsStatesClientNV; + PFNGLLISTPARAMETERFSGIXPROC epoxy_glListParameterfSGIX; + PFNGLLISTPARAMETERFVSGIXPROC epoxy_glListParameterfvSGIX; + PFNGLLISTPARAMETERISGIXPROC epoxy_glListParameteriSGIX; + PFNGLLISTPARAMETERIVSGIXPROC epoxy_glListParameterivSGIX; + PFNGLLOADIDENTITYPROC epoxy_glLoadIdentity; + PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC epoxy_glLoadIdentityDeformationMapSGIX; + PFNGLLOADMATRIXDPROC epoxy_glLoadMatrixd; + PFNGLLOADMATRIXFPROC epoxy_glLoadMatrixf; + PFNGLLOADMATRIXXPROC epoxy_glLoadMatrixx; + PFNGLLOADMATRIXXOESPROC epoxy_glLoadMatrixxOES; + PFNGLLOADNAMEPROC epoxy_glLoadName; + PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC epoxy_glLoadPaletteFromModelViewMatrixOES; + PFNGLLOADPROGRAMNVPROC epoxy_glLoadProgramNV; + PFNGLLOADTRANSPOSEMATRIXDPROC epoxy_glLoadTransposeMatrixd; + PFNGLLOADTRANSPOSEMATRIXDARBPROC epoxy_glLoadTransposeMatrixdARB; + PFNGLLOADTRANSPOSEMATRIXFPROC epoxy_glLoadTransposeMatrixf; + PFNGLLOADTRANSPOSEMATRIXFARBPROC epoxy_glLoadTransposeMatrixfARB; + PFNGLLOADTRANSPOSEMATRIXXOESPROC epoxy_glLoadTransposeMatrixxOES; + PFNGLLOCKARRAYSEXTPROC epoxy_glLockArraysEXT; + PFNGLLOGICOPPROC epoxy_glLogicOp; + PFNGLMAKEBUFFERNONRESIDENTNVPROC epoxy_glMakeBufferNonResidentNV; + PFNGLMAKEBUFFERRESIDENTNVPROC epoxy_glMakeBufferResidentNV; + PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC epoxy_glMakeImageHandleNonResidentARB; + PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC epoxy_glMakeImageHandleNonResidentNV; + PFNGLMAKEIMAGEHANDLERESIDENTARBPROC epoxy_glMakeImageHandleResidentARB; + PFNGLMAKEIMAGEHANDLERESIDENTNVPROC epoxy_glMakeImageHandleResidentNV; + PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC epoxy_glMakeNamedBufferNonResidentNV; + PFNGLMAKENAMEDBUFFERRESIDENTNVPROC epoxy_glMakeNamedBufferResidentNV; + PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC epoxy_glMakeTextureHandleNonResidentARB; + PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC epoxy_glMakeTextureHandleNonResidentNV; + PFNGLMAKETEXTUREHANDLERESIDENTARBPROC epoxy_glMakeTextureHandleResidentARB; + PFNGLMAKETEXTUREHANDLERESIDENTNVPROC epoxy_glMakeTextureHandleResidentNV; + PFNGLMAP1DPROC epoxy_glMap1d; + PFNGLMAP1FPROC epoxy_glMap1f; + PFNGLMAP1XOESPROC epoxy_glMap1xOES; + PFNGLMAP2DPROC epoxy_glMap2d; + PFNGLMAP2FPROC epoxy_glMap2f; + PFNGLMAP2XOESPROC epoxy_glMap2xOES; + PFNGLMAPBUFFERPROC epoxy_glMapBuffer; + PFNGLMAPBUFFERARBPROC epoxy_glMapBufferARB; + PFNGLMAPBUFFEROESPROC epoxy_glMapBufferOES; + PFNGLMAPBUFFERRANGEPROC epoxy_glMapBufferRange; + PFNGLMAPBUFFERRANGEEXTPROC epoxy_glMapBufferRangeEXT; + PFNGLMAPCONTROLPOINTSNVPROC epoxy_glMapControlPointsNV; + PFNGLMAPGRID1DPROC epoxy_glMapGrid1d; + PFNGLMAPGRID1FPROC epoxy_glMapGrid1f; + PFNGLMAPGRID1XOESPROC epoxy_glMapGrid1xOES; + PFNGLMAPGRID2DPROC epoxy_glMapGrid2d; + PFNGLMAPGRID2FPROC epoxy_glMapGrid2f; + PFNGLMAPGRID2XOESPROC epoxy_glMapGrid2xOES; + PFNGLMAPNAMEDBUFFERPROC epoxy_glMapNamedBuffer; + PFNGLMAPNAMEDBUFFEREXTPROC epoxy_glMapNamedBufferEXT; + PFNGLMAPNAMEDBUFFERRANGEPROC epoxy_glMapNamedBufferRange; + PFNGLMAPNAMEDBUFFERRANGEEXTPROC epoxy_glMapNamedBufferRangeEXT; + PFNGLMAPOBJECTBUFFERATIPROC epoxy_glMapObjectBufferATI; + PFNGLMAPPARAMETERFVNVPROC epoxy_glMapParameterfvNV; + PFNGLMAPPARAMETERIVNVPROC epoxy_glMapParameterivNV; + PFNGLMAPTEXTURE2DINTELPROC epoxy_glMapTexture2DINTEL; + PFNGLMAPVERTEXATTRIB1DAPPLEPROC epoxy_glMapVertexAttrib1dAPPLE; + PFNGLMAPVERTEXATTRIB1FAPPLEPROC epoxy_glMapVertexAttrib1fAPPLE; + PFNGLMAPVERTEXATTRIB2DAPPLEPROC epoxy_glMapVertexAttrib2dAPPLE; + PFNGLMAPVERTEXATTRIB2FAPPLEPROC epoxy_glMapVertexAttrib2fAPPLE; + PFNGLMATERIALFPROC epoxy_glMaterialf; + PFNGLMATERIALFVPROC epoxy_glMaterialfv; + PFNGLMATERIALIPROC epoxy_glMateriali; + PFNGLMATERIALIVPROC epoxy_glMaterialiv; + PFNGLMATERIALXPROC epoxy_glMaterialx; + PFNGLMATERIALXOESPROC epoxy_glMaterialxOES; + PFNGLMATERIALXVPROC epoxy_glMaterialxv; + PFNGLMATERIALXVOESPROC epoxy_glMaterialxvOES; + PFNGLMATRIXFRUSTUMEXTPROC epoxy_glMatrixFrustumEXT; + PFNGLMATRIXINDEXPOINTERARBPROC epoxy_glMatrixIndexPointerARB; + PFNGLMATRIXINDEXPOINTEROESPROC epoxy_glMatrixIndexPointerOES; + PFNGLMATRIXINDEXUBVARBPROC epoxy_glMatrixIndexubvARB; + PFNGLMATRIXINDEXUIVARBPROC epoxy_glMatrixIndexuivARB; + PFNGLMATRIXINDEXUSVARBPROC epoxy_glMatrixIndexusvARB; + PFNGLMATRIXLOAD3X2FNVPROC epoxy_glMatrixLoad3x2fNV; + PFNGLMATRIXLOAD3X3FNVPROC epoxy_glMatrixLoad3x3fNV; + PFNGLMATRIXLOADIDENTITYEXTPROC epoxy_glMatrixLoadIdentityEXT; + PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC epoxy_glMatrixLoadTranspose3x3fNV; + PFNGLMATRIXLOADTRANSPOSEDEXTPROC epoxy_glMatrixLoadTransposedEXT; + PFNGLMATRIXLOADTRANSPOSEFEXTPROC epoxy_glMatrixLoadTransposefEXT; + PFNGLMATRIXLOADDEXTPROC epoxy_glMatrixLoaddEXT; + PFNGLMATRIXLOADFEXTPROC epoxy_glMatrixLoadfEXT; + PFNGLMATRIXMODEPROC epoxy_glMatrixMode; + PFNGLMATRIXMULT3X2FNVPROC epoxy_glMatrixMult3x2fNV; + PFNGLMATRIXMULT3X3FNVPROC epoxy_glMatrixMult3x3fNV; + PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC epoxy_glMatrixMultTranspose3x3fNV; + PFNGLMATRIXMULTTRANSPOSEDEXTPROC epoxy_glMatrixMultTransposedEXT; + PFNGLMATRIXMULTTRANSPOSEFEXTPROC epoxy_glMatrixMultTransposefEXT; + PFNGLMATRIXMULTDEXTPROC epoxy_glMatrixMultdEXT; + PFNGLMATRIXMULTFEXTPROC epoxy_glMatrixMultfEXT; + PFNGLMATRIXORTHOEXTPROC epoxy_glMatrixOrthoEXT; + PFNGLMATRIXPOPEXTPROC epoxy_glMatrixPopEXT; + PFNGLMATRIXPUSHEXTPROC epoxy_glMatrixPushEXT; + PFNGLMATRIXROTATEDEXTPROC epoxy_glMatrixRotatedEXT; + PFNGLMATRIXROTATEFEXTPROC epoxy_glMatrixRotatefEXT; + PFNGLMATRIXSCALEDEXTPROC epoxy_glMatrixScaledEXT; + PFNGLMATRIXSCALEFEXTPROC epoxy_glMatrixScalefEXT; + PFNGLMATRIXTRANSLATEDEXTPROC epoxy_glMatrixTranslatedEXT; + PFNGLMATRIXTRANSLATEFEXTPROC epoxy_glMatrixTranslatefEXT; + PFNGLMAXSHADERCOMPILERTHREADSARBPROC epoxy_glMaxShaderCompilerThreadsARB; + PFNGLMEMORYBARRIERPROC epoxy_glMemoryBarrier; + PFNGLMEMORYBARRIERBYREGIONPROC epoxy_glMemoryBarrierByRegion; + PFNGLMEMORYBARRIEREXTPROC epoxy_glMemoryBarrierEXT; + PFNGLMINSAMPLESHADINGPROC epoxy_glMinSampleShading; + PFNGLMINSAMPLESHADINGARBPROC epoxy_glMinSampleShadingARB; + PFNGLMINSAMPLESHADINGOESPROC epoxy_glMinSampleShadingOES; + PFNGLMINMAXPROC epoxy_glMinmax; + PFNGLMINMAXEXTPROC epoxy_glMinmaxEXT; + PFNGLMULTMATRIXDPROC epoxy_glMultMatrixd; + PFNGLMULTMATRIXFPROC epoxy_glMultMatrixf; + PFNGLMULTMATRIXXPROC epoxy_glMultMatrixx; + PFNGLMULTMATRIXXOESPROC epoxy_glMultMatrixxOES; + PFNGLMULTTRANSPOSEMATRIXDPROC epoxy_glMultTransposeMatrixd; + PFNGLMULTTRANSPOSEMATRIXDARBPROC epoxy_glMultTransposeMatrixdARB; + PFNGLMULTTRANSPOSEMATRIXFPROC epoxy_glMultTransposeMatrixf; + PFNGLMULTTRANSPOSEMATRIXFARBPROC epoxy_glMultTransposeMatrixfARB; + PFNGLMULTTRANSPOSEMATRIXXOESPROC epoxy_glMultTransposeMatrixxOES; + PFNGLMULTIDRAWARRAYSPROC epoxy_glMultiDrawArrays; + PFNGLMULTIDRAWARRAYSEXTPROC epoxy_glMultiDrawArraysEXT; + PFNGLMULTIDRAWARRAYSINDIRECTPROC epoxy_glMultiDrawArraysIndirect; + PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC epoxy_glMultiDrawArraysIndirectAMD; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawArraysIndirectBindlessCountNV; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawArraysIndirectBindlessNV; + PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC epoxy_glMultiDrawArraysIndirectCountARB; + PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC epoxy_glMultiDrawArraysIndirectEXT; + PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC epoxy_glMultiDrawElementArrayAPPLE; + PFNGLMULTIDRAWELEMENTSPROC epoxy_glMultiDrawElements; + PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC epoxy_glMultiDrawElementsBaseVertex; + PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glMultiDrawElementsBaseVertexEXT; + PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC epoxy_glMultiDrawElementsBaseVertexOES; + PFNGLMULTIDRAWELEMENTSEXTPROC epoxy_glMultiDrawElementsEXT; + PFNGLMULTIDRAWELEMENTSINDIRECTPROC epoxy_glMultiDrawElementsIndirect; + PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC epoxy_glMultiDrawElementsIndirectAMD; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawElementsIndirectBindlessCountNV; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawElementsIndirectBindlessNV; + PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC epoxy_glMultiDrawElementsIndirectCountARB; + PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC epoxy_glMultiDrawElementsIndirectEXT; + PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glMultiDrawRangeElementArrayAPPLE; + PFNGLMULTIMODEDRAWARRAYSIBMPROC epoxy_glMultiModeDrawArraysIBM; + PFNGLMULTIMODEDRAWELEMENTSIBMPROC epoxy_glMultiModeDrawElementsIBM; + PFNGLMULTITEXBUFFEREXTPROC epoxy_glMultiTexBufferEXT; + PFNGLMULTITEXCOORD1BOESPROC epoxy_glMultiTexCoord1bOES; + PFNGLMULTITEXCOORD1BVOESPROC epoxy_glMultiTexCoord1bvOES; + PFNGLMULTITEXCOORD1DPROC epoxy_glMultiTexCoord1d; + PFNGLMULTITEXCOORD1DARBPROC epoxy_glMultiTexCoord1dARB; + PFNGLMULTITEXCOORD1DVPROC epoxy_glMultiTexCoord1dv; + PFNGLMULTITEXCOORD1DVARBPROC epoxy_glMultiTexCoord1dvARB; + PFNGLMULTITEXCOORD1FPROC epoxy_glMultiTexCoord1f; + PFNGLMULTITEXCOORD1FARBPROC epoxy_glMultiTexCoord1fARB; + PFNGLMULTITEXCOORD1FVPROC epoxy_glMultiTexCoord1fv; + PFNGLMULTITEXCOORD1FVARBPROC epoxy_glMultiTexCoord1fvARB; + PFNGLMULTITEXCOORD1HNVPROC epoxy_glMultiTexCoord1hNV; + PFNGLMULTITEXCOORD1HVNVPROC epoxy_glMultiTexCoord1hvNV; + PFNGLMULTITEXCOORD1IPROC epoxy_glMultiTexCoord1i; + PFNGLMULTITEXCOORD1IARBPROC epoxy_glMultiTexCoord1iARB; + PFNGLMULTITEXCOORD1IVPROC epoxy_glMultiTexCoord1iv; + PFNGLMULTITEXCOORD1IVARBPROC epoxy_glMultiTexCoord1ivARB; + PFNGLMULTITEXCOORD1SPROC epoxy_glMultiTexCoord1s; + PFNGLMULTITEXCOORD1SARBPROC epoxy_glMultiTexCoord1sARB; + PFNGLMULTITEXCOORD1SVPROC epoxy_glMultiTexCoord1sv; + PFNGLMULTITEXCOORD1SVARBPROC epoxy_glMultiTexCoord1svARB; + PFNGLMULTITEXCOORD1XOESPROC epoxy_glMultiTexCoord1xOES; + PFNGLMULTITEXCOORD1XVOESPROC epoxy_glMultiTexCoord1xvOES; + PFNGLMULTITEXCOORD2BOESPROC epoxy_glMultiTexCoord2bOES; + PFNGLMULTITEXCOORD2BVOESPROC epoxy_glMultiTexCoord2bvOES; + PFNGLMULTITEXCOORD2DPROC epoxy_glMultiTexCoord2d; + PFNGLMULTITEXCOORD2DARBPROC epoxy_glMultiTexCoord2dARB; + PFNGLMULTITEXCOORD2DVPROC epoxy_glMultiTexCoord2dv; + PFNGLMULTITEXCOORD2DVARBPROC epoxy_glMultiTexCoord2dvARB; + PFNGLMULTITEXCOORD2FPROC epoxy_glMultiTexCoord2f; + PFNGLMULTITEXCOORD2FARBPROC epoxy_glMultiTexCoord2fARB; + PFNGLMULTITEXCOORD2FVPROC epoxy_glMultiTexCoord2fv; + PFNGLMULTITEXCOORD2FVARBPROC epoxy_glMultiTexCoord2fvARB; + PFNGLMULTITEXCOORD2HNVPROC epoxy_glMultiTexCoord2hNV; + PFNGLMULTITEXCOORD2HVNVPROC epoxy_glMultiTexCoord2hvNV; + PFNGLMULTITEXCOORD2IPROC epoxy_glMultiTexCoord2i; + PFNGLMULTITEXCOORD2IARBPROC epoxy_glMultiTexCoord2iARB; + PFNGLMULTITEXCOORD2IVPROC epoxy_glMultiTexCoord2iv; + PFNGLMULTITEXCOORD2IVARBPROC epoxy_glMultiTexCoord2ivARB; + PFNGLMULTITEXCOORD2SPROC epoxy_glMultiTexCoord2s; + PFNGLMULTITEXCOORD2SARBPROC epoxy_glMultiTexCoord2sARB; + PFNGLMULTITEXCOORD2SVPROC epoxy_glMultiTexCoord2sv; + PFNGLMULTITEXCOORD2SVARBPROC epoxy_glMultiTexCoord2svARB; + PFNGLMULTITEXCOORD2XOESPROC epoxy_glMultiTexCoord2xOES; + PFNGLMULTITEXCOORD2XVOESPROC epoxy_glMultiTexCoord2xvOES; + PFNGLMULTITEXCOORD3BOESPROC epoxy_glMultiTexCoord3bOES; + PFNGLMULTITEXCOORD3BVOESPROC epoxy_glMultiTexCoord3bvOES; + PFNGLMULTITEXCOORD3DPROC epoxy_glMultiTexCoord3d; + PFNGLMULTITEXCOORD3DARBPROC epoxy_glMultiTexCoord3dARB; + PFNGLMULTITEXCOORD3DVPROC epoxy_glMultiTexCoord3dv; + PFNGLMULTITEXCOORD3DVARBPROC epoxy_glMultiTexCoord3dvARB; + PFNGLMULTITEXCOORD3FPROC epoxy_glMultiTexCoord3f; + PFNGLMULTITEXCOORD3FARBPROC epoxy_glMultiTexCoord3fARB; + PFNGLMULTITEXCOORD3FVPROC epoxy_glMultiTexCoord3fv; + PFNGLMULTITEXCOORD3FVARBPROC epoxy_glMultiTexCoord3fvARB; + PFNGLMULTITEXCOORD3HNVPROC epoxy_glMultiTexCoord3hNV; + PFNGLMULTITEXCOORD3HVNVPROC epoxy_glMultiTexCoord3hvNV; + PFNGLMULTITEXCOORD3IPROC epoxy_glMultiTexCoord3i; + PFNGLMULTITEXCOORD3IARBPROC epoxy_glMultiTexCoord3iARB; + PFNGLMULTITEXCOORD3IVPROC epoxy_glMultiTexCoord3iv; + PFNGLMULTITEXCOORD3IVARBPROC epoxy_glMultiTexCoord3ivARB; + PFNGLMULTITEXCOORD3SPROC epoxy_glMultiTexCoord3s; + PFNGLMULTITEXCOORD3SARBPROC epoxy_glMultiTexCoord3sARB; + PFNGLMULTITEXCOORD3SVPROC epoxy_glMultiTexCoord3sv; + PFNGLMULTITEXCOORD3SVARBPROC epoxy_glMultiTexCoord3svARB; + PFNGLMULTITEXCOORD3XOESPROC epoxy_glMultiTexCoord3xOES; + PFNGLMULTITEXCOORD3XVOESPROC epoxy_glMultiTexCoord3xvOES; + PFNGLMULTITEXCOORD4BOESPROC epoxy_glMultiTexCoord4bOES; + PFNGLMULTITEXCOORD4BVOESPROC epoxy_glMultiTexCoord4bvOES; + PFNGLMULTITEXCOORD4DPROC epoxy_glMultiTexCoord4d; + PFNGLMULTITEXCOORD4DARBPROC epoxy_glMultiTexCoord4dARB; + PFNGLMULTITEXCOORD4DVPROC epoxy_glMultiTexCoord4dv; + PFNGLMULTITEXCOORD4DVARBPROC epoxy_glMultiTexCoord4dvARB; + PFNGLMULTITEXCOORD4FPROC epoxy_glMultiTexCoord4f; + PFNGLMULTITEXCOORD4FARBPROC epoxy_glMultiTexCoord4fARB; + PFNGLMULTITEXCOORD4FVPROC epoxy_glMultiTexCoord4fv; + PFNGLMULTITEXCOORD4FVARBPROC epoxy_glMultiTexCoord4fvARB; + PFNGLMULTITEXCOORD4HNVPROC epoxy_glMultiTexCoord4hNV; + PFNGLMULTITEXCOORD4HVNVPROC epoxy_glMultiTexCoord4hvNV; + PFNGLMULTITEXCOORD4IPROC epoxy_glMultiTexCoord4i; + PFNGLMULTITEXCOORD4IARBPROC epoxy_glMultiTexCoord4iARB; + PFNGLMULTITEXCOORD4IVPROC epoxy_glMultiTexCoord4iv; + PFNGLMULTITEXCOORD4IVARBPROC epoxy_glMultiTexCoord4ivARB; + PFNGLMULTITEXCOORD4SPROC epoxy_glMultiTexCoord4s; + PFNGLMULTITEXCOORD4SARBPROC epoxy_glMultiTexCoord4sARB; + PFNGLMULTITEXCOORD4SVPROC epoxy_glMultiTexCoord4sv; + PFNGLMULTITEXCOORD4SVARBPROC epoxy_glMultiTexCoord4svARB; + PFNGLMULTITEXCOORD4XPROC epoxy_glMultiTexCoord4x; + PFNGLMULTITEXCOORD4XOESPROC epoxy_glMultiTexCoord4xOES; + PFNGLMULTITEXCOORD4XVOESPROC epoxy_glMultiTexCoord4xvOES; + PFNGLMULTITEXCOORDP1UIPROC epoxy_glMultiTexCoordP1ui; + PFNGLMULTITEXCOORDP1UIVPROC epoxy_glMultiTexCoordP1uiv; + PFNGLMULTITEXCOORDP2UIPROC epoxy_glMultiTexCoordP2ui; + PFNGLMULTITEXCOORDP2UIVPROC epoxy_glMultiTexCoordP2uiv; + PFNGLMULTITEXCOORDP3UIPROC epoxy_glMultiTexCoordP3ui; + PFNGLMULTITEXCOORDP3UIVPROC epoxy_glMultiTexCoordP3uiv; + PFNGLMULTITEXCOORDP4UIPROC epoxy_glMultiTexCoordP4ui; + PFNGLMULTITEXCOORDP4UIVPROC epoxy_glMultiTexCoordP4uiv; + PFNGLMULTITEXCOORDPOINTEREXTPROC epoxy_glMultiTexCoordPointerEXT; + PFNGLMULTITEXENVFEXTPROC epoxy_glMultiTexEnvfEXT; + PFNGLMULTITEXENVFVEXTPROC epoxy_glMultiTexEnvfvEXT; + PFNGLMULTITEXENVIEXTPROC epoxy_glMultiTexEnviEXT; + PFNGLMULTITEXENVIVEXTPROC epoxy_glMultiTexEnvivEXT; + PFNGLMULTITEXGENDEXTPROC epoxy_glMultiTexGendEXT; + PFNGLMULTITEXGENDVEXTPROC epoxy_glMultiTexGendvEXT; + PFNGLMULTITEXGENFEXTPROC epoxy_glMultiTexGenfEXT; + PFNGLMULTITEXGENFVEXTPROC epoxy_glMultiTexGenfvEXT; + PFNGLMULTITEXGENIEXTPROC epoxy_glMultiTexGeniEXT; + PFNGLMULTITEXGENIVEXTPROC epoxy_glMultiTexGenivEXT; + PFNGLMULTITEXIMAGE1DEXTPROC epoxy_glMultiTexImage1DEXT; + PFNGLMULTITEXIMAGE2DEXTPROC epoxy_glMultiTexImage2DEXT; + PFNGLMULTITEXIMAGE3DEXTPROC epoxy_glMultiTexImage3DEXT; + PFNGLMULTITEXPARAMETERIIVEXTPROC epoxy_glMultiTexParameterIivEXT; + PFNGLMULTITEXPARAMETERIUIVEXTPROC epoxy_glMultiTexParameterIuivEXT; + PFNGLMULTITEXPARAMETERFEXTPROC epoxy_glMultiTexParameterfEXT; + PFNGLMULTITEXPARAMETERFVEXTPROC epoxy_glMultiTexParameterfvEXT; + PFNGLMULTITEXPARAMETERIEXTPROC epoxy_glMultiTexParameteriEXT; + PFNGLMULTITEXPARAMETERIVEXTPROC epoxy_glMultiTexParameterivEXT; + PFNGLMULTITEXRENDERBUFFEREXTPROC epoxy_glMultiTexRenderbufferEXT; + PFNGLMULTITEXSUBIMAGE1DEXTPROC epoxy_glMultiTexSubImage1DEXT; + PFNGLMULTITEXSUBIMAGE2DEXTPROC epoxy_glMultiTexSubImage2DEXT; + PFNGLMULTITEXSUBIMAGE3DEXTPROC epoxy_glMultiTexSubImage3DEXT; + PFNGLNAMEDBUFFERDATAPROC epoxy_glNamedBufferData; + PFNGLNAMEDBUFFERDATAEXTPROC epoxy_glNamedBufferDataEXT; + PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC epoxy_glNamedBufferPageCommitmentARB; + PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC epoxy_glNamedBufferPageCommitmentEXT; + PFNGLNAMEDBUFFERSTORAGEPROC epoxy_glNamedBufferStorage; + PFNGLNAMEDBUFFERSTORAGEEXTPROC epoxy_glNamedBufferStorageEXT; + PFNGLNAMEDBUFFERSUBDATAPROC epoxy_glNamedBufferSubData; + PFNGLNAMEDBUFFERSUBDATAEXTPROC epoxy_glNamedBufferSubDataEXT; + PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC epoxy_glNamedCopyBufferSubDataEXT; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC epoxy_glNamedFramebufferDrawBuffer; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC epoxy_glNamedFramebufferDrawBuffers; + PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC epoxy_glNamedFramebufferParameteri; + PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC epoxy_glNamedFramebufferParameteriEXT; + PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC epoxy_glNamedFramebufferReadBuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC epoxy_glNamedFramebufferRenderbuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glNamedFramebufferRenderbufferEXT; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glNamedFramebufferSampleLocationsfvARB; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glNamedFramebufferSampleLocationsfvNV; + PFNGLNAMEDFRAMEBUFFERTEXTUREPROC epoxy_glNamedFramebufferTexture; + PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glNamedFramebufferTexture1DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glNamedFramebufferTexture2DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glNamedFramebufferTexture3DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC epoxy_glNamedFramebufferTextureEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glNamedFramebufferTextureFaceEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC epoxy_glNamedFramebufferTextureLayer; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glNamedFramebufferTextureLayerEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC epoxy_glNamedProgramLocalParameter4dEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC epoxy_glNamedProgramLocalParameter4dvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC epoxy_glNamedProgramLocalParameter4fEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC epoxy_glNamedProgramLocalParameter4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC epoxy_glNamedProgramLocalParameterI4iEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC epoxy_glNamedProgramLocalParameterI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC epoxy_glNamedProgramLocalParameterI4uiEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC epoxy_glNamedProgramLocalParameterI4uivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glNamedProgramLocalParameters4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC epoxy_glNamedProgramLocalParametersI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC epoxy_glNamedProgramLocalParametersI4uivEXT; + PFNGLNAMEDPROGRAMSTRINGEXTPROC epoxy_glNamedProgramStringEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEPROC epoxy_glNamedRenderbufferStorage; + PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC epoxy_glNamedRenderbufferStorageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glNamedRenderbufferStorageMultisample; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleEXT; + PFNGLNAMEDSTRINGARBPROC epoxy_glNamedStringARB; + PFNGLNEWLISTPROC epoxy_glNewList; + PFNGLNEWOBJECTBUFFERATIPROC epoxy_glNewObjectBufferATI; + PFNGLNORMAL3BPROC epoxy_glNormal3b; + PFNGLNORMAL3BVPROC epoxy_glNormal3bv; + PFNGLNORMAL3DPROC epoxy_glNormal3d; + PFNGLNORMAL3DVPROC epoxy_glNormal3dv; + PFNGLNORMAL3FPROC epoxy_glNormal3f; + PFNGLNORMAL3FVERTEX3FSUNPROC epoxy_glNormal3fVertex3fSUN; + PFNGLNORMAL3FVERTEX3FVSUNPROC epoxy_glNormal3fVertex3fvSUN; + PFNGLNORMAL3FVPROC epoxy_glNormal3fv; + PFNGLNORMAL3HNVPROC epoxy_glNormal3hNV; + PFNGLNORMAL3HVNVPROC epoxy_glNormal3hvNV; + PFNGLNORMAL3IPROC epoxy_glNormal3i; + PFNGLNORMAL3IVPROC epoxy_glNormal3iv; + PFNGLNORMAL3SPROC epoxy_glNormal3s; + PFNGLNORMAL3SVPROC epoxy_glNormal3sv; + PFNGLNORMAL3XPROC epoxy_glNormal3x; + PFNGLNORMAL3XOESPROC epoxy_glNormal3xOES; + PFNGLNORMAL3XVOESPROC epoxy_glNormal3xvOES; + PFNGLNORMALFORMATNVPROC epoxy_glNormalFormatNV; + PFNGLNORMALP3UIPROC epoxy_glNormalP3ui; + PFNGLNORMALP3UIVPROC epoxy_glNormalP3uiv; + PFNGLNORMALPOINTERPROC epoxy_glNormalPointer; + PFNGLNORMALPOINTEREXTPROC epoxy_glNormalPointerEXT; + PFNGLNORMALPOINTERLISTIBMPROC epoxy_glNormalPointerListIBM; + PFNGLNORMALPOINTERVINTELPROC epoxy_glNormalPointervINTEL; + PFNGLNORMALSTREAM3BATIPROC epoxy_glNormalStream3bATI; + PFNGLNORMALSTREAM3BVATIPROC epoxy_glNormalStream3bvATI; + PFNGLNORMALSTREAM3DATIPROC epoxy_glNormalStream3dATI; + PFNGLNORMALSTREAM3DVATIPROC epoxy_glNormalStream3dvATI; + PFNGLNORMALSTREAM3FATIPROC epoxy_glNormalStream3fATI; + PFNGLNORMALSTREAM3FVATIPROC epoxy_glNormalStream3fvATI; + PFNGLNORMALSTREAM3IATIPROC epoxy_glNormalStream3iATI; + PFNGLNORMALSTREAM3IVATIPROC epoxy_glNormalStream3ivATI; + PFNGLNORMALSTREAM3SATIPROC epoxy_glNormalStream3sATI; + PFNGLNORMALSTREAM3SVATIPROC epoxy_glNormalStream3svATI; + PFNGLOBJECTLABELPROC epoxy_glObjectLabel; + PFNGLOBJECTLABELKHRPROC epoxy_glObjectLabelKHR; + PFNGLOBJECTPTRLABELPROC epoxy_glObjectPtrLabel; + PFNGLOBJECTPTRLABELKHRPROC epoxy_glObjectPtrLabelKHR; + PFNGLOBJECTPURGEABLEAPPLEPROC epoxy_glObjectPurgeableAPPLE; + PFNGLOBJECTUNPURGEABLEAPPLEPROC epoxy_glObjectUnpurgeableAPPLE; + PFNGLORTHOPROC epoxy_glOrtho; + PFNGLORTHOFPROC epoxy_glOrthof; + PFNGLORTHOFOESPROC epoxy_glOrthofOES; + PFNGLORTHOXPROC epoxy_glOrthox; + PFNGLORTHOXOESPROC epoxy_glOrthoxOES; + PFNGLPNTRIANGLESFATIPROC epoxy_glPNTrianglesfATI; + PFNGLPNTRIANGLESIATIPROC epoxy_glPNTrianglesiATI; + PFNGLPASSTEXCOORDATIPROC epoxy_glPassTexCoordATI; + PFNGLPASSTHROUGHPROC epoxy_glPassThrough; + PFNGLPASSTHROUGHXOESPROC epoxy_glPassThroughxOES; + PFNGLPATCHPARAMETERFVPROC epoxy_glPatchParameterfv; + PFNGLPATCHPARAMETERIPROC epoxy_glPatchParameteri; + PFNGLPATCHPARAMETERIEXTPROC epoxy_glPatchParameteriEXT; + PFNGLPATCHPARAMETERIOESPROC epoxy_glPatchParameteriOES; + PFNGLPATHCOLORGENNVPROC epoxy_glPathColorGenNV; + PFNGLPATHCOMMANDSNVPROC epoxy_glPathCommandsNV; + PFNGLPATHCOORDSNVPROC epoxy_glPathCoordsNV; + PFNGLPATHCOVERDEPTHFUNCNVPROC epoxy_glPathCoverDepthFuncNV; + PFNGLPATHDASHARRAYNVPROC epoxy_glPathDashArrayNV; + PFNGLPATHFOGGENNVPROC epoxy_glPathFogGenNV; + PFNGLPATHGLYPHINDEXARRAYNVPROC epoxy_glPathGlyphIndexArrayNV; + PFNGLPATHGLYPHINDEXRANGENVPROC epoxy_glPathGlyphIndexRangeNV; + PFNGLPATHGLYPHRANGENVPROC epoxy_glPathGlyphRangeNV; + PFNGLPATHGLYPHSNVPROC epoxy_glPathGlyphsNV; + PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC epoxy_glPathMemoryGlyphIndexArrayNV; + PFNGLPATHPARAMETERFNVPROC epoxy_glPathParameterfNV; + PFNGLPATHPARAMETERFVNVPROC epoxy_glPathParameterfvNV; + PFNGLPATHPARAMETERINVPROC epoxy_glPathParameteriNV; + PFNGLPATHPARAMETERIVNVPROC epoxy_glPathParameterivNV; + PFNGLPATHSTENCILDEPTHOFFSETNVPROC epoxy_glPathStencilDepthOffsetNV; + PFNGLPATHSTENCILFUNCNVPROC epoxy_glPathStencilFuncNV; + PFNGLPATHSTRINGNVPROC epoxy_glPathStringNV; + PFNGLPATHSUBCOMMANDSNVPROC epoxy_glPathSubCommandsNV; + PFNGLPATHSUBCOORDSNVPROC epoxy_glPathSubCoordsNV; + PFNGLPATHTEXGENNVPROC epoxy_glPathTexGenNV; + PFNGLPAUSETRANSFORMFEEDBACKPROC epoxy_glPauseTransformFeedback; + PFNGLPAUSETRANSFORMFEEDBACKNVPROC epoxy_glPauseTransformFeedbackNV; + PFNGLPIXELDATARANGENVPROC epoxy_glPixelDataRangeNV; + PFNGLPIXELMAPFVPROC epoxy_glPixelMapfv; + PFNGLPIXELMAPUIVPROC epoxy_glPixelMapuiv; + PFNGLPIXELMAPUSVPROC epoxy_glPixelMapusv; + PFNGLPIXELMAPXPROC epoxy_glPixelMapx; + PFNGLPIXELSTOREFPROC epoxy_glPixelStoref; + PFNGLPIXELSTOREIPROC epoxy_glPixelStorei; + PFNGLPIXELSTOREXPROC epoxy_glPixelStorex; + PFNGLPIXELTEXGENPARAMETERFSGISPROC epoxy_glPixelTexGenParameterfSGIS; + PFNGLPIXELTEXGENPARAMETERFVSGISPROC epoxy_glPixelTexGenParameterfvSGIS; + PFNGLPIXELTEXGENPARAMETERISGISPROC epoxy_glPixelTexGenParameteriSGIS; + PFNGLPIXELTEXGENPARAMETERIVSGISPROC epoxy_glPixelTexGenParameterivSGIS; + PFNGLPIXELTEXGENSGIXPROC epoxy_glPixelTexGenSGIX; + PFNGLPIXELTRANSFERFPROC epoxy_glPixelTransferf; + PFNGLPIXELTRANSFERIPROC epoxy_glPixelTransferi; + PFNGLPIXELTRANSFERXOESPROC epoxy_glPixelTransferxOES; + PFNGLPIXELTRANSFORMPARAMETERFEXTPROC epoxy_glPixelTransformParameterfEXT; + PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glPixelTransformParameterfvEXT; + PFNGLPIXELTRANSFORMPARAMETERIEXTPROC epoxy_glPixelTransformParameteriEXT; + PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glPixelTransformParameterivEXT; + PFNGLPIXELZOOMPROC epoxy_glPixelZoom; + PFNGLPIXELZOOMXOESPROC epoxy_glPixelZoomxOES; + PFNGLPOINTALONGPATHNVPROC epoxy_glPointAlongPathNV; + PFNGLPOINTPARAMETERFPROC epoxy_glPointParameterf; + PFNGLPOINTPARAMETERFARBPROC epoxy_glPointParameterfARB; + PFNGLPOINTPARAMETERFEXTPROC epoxy_glPointParameterfEXT; + PFNGLPOINTPARAMETERFSGISPROC epoxy_glPointParameterfSGIS; + PFNGLPOINTPARAMETERFVPROC epoxy_glPointParameterfv; + PFNGLPOINTPARAMETERFVARBPROC epoxy_glPointParameterfvARB; + PFNGLPOINTPARAMETERFVEXTPROC epoxy_glPointParameterfvEXT; + PFNGLPOINTPARAMETERFVSGISPROC epoxy_glPointParameterfvSGIS; + PFNGLPOINTPARAMETERIPROC epoxy_glPointParameteri; + PFNGLPOINTPARAMETERINVPROC epoxy_glPointParameteriNV; + PFNGLPOINTPARAMETERIVPROC epoxy_glPointParameteriv; + PFNGLPOINTPARAMETERIVNVPROC epoxy_glPointParameterivNV; + PFNGLPOINTPARAMETERXPROC epoxy_glPointParameterx; + PFNGLPOINTPARAMETERXOESPROC epoxy_glPointParameterxOES; + PFNGLPOINTPARAMETERXVPROC epoxy_glPointParameterxv; + PFNGLPOINTPARAMETERXVOESPROC epoxy_glPointParameterxvOES; + PFNGLPOINTSIZEPROC epoxy_glPointSize; + PFNGLPOINTSIZEPOINTEROESPROC epoxy_glPointSizePointerOES; + PFNGLPOINTSIZEXPROC epoxy_glPointSizex; + PFNGLPOINTSIZEXOESPROC epoxy_glPointSizexOES; + PFNGLPOLLASYNCSGIXPROC epoxy_glPollAsyncSGIX; + PFNGLPOLLINSTRUMENTSSGIXPROC epoxy_glPollInstrumentsSGIX; + PFNGLPOLYGONMODEPROC epoxy_glPolygonMode; + PFNGLPOLYGONMODENVPROC epoxy_glPolygonModeNV; + PFNGLPOLYGONOFFSETPROC epoxy_glPolygonOffset; + PFNGLPOLYGONOFFSETCLAMPEXTPROC epoxy_glPolygonOffsetClampEXT; + PFNGLPOLYGONOFFSETEXTPROC epoxy_glPolygonOffsetEXT; + PFNGLPOLYGONOFFSETXPROC epoxy_glPolygonOffsetx; + PFNGLPOLYGONOFFSETXOESPROC epoxy_glPolygonOffsetxOES; + PFNGLPOLYGONSTIPPLEPROC epoxy_glPolygonStipple; + PFNGLPOPATTRIBPROC epoxy_glPopAttrib; + PFNGLPOPCLIENTATTRIBPROC epoxy_glPopClientAttrib; + PFNGLPOPDEBUGGROUPPROC epoxy_glPopDebugGroup; + PFNGLPOPDEBUGGROUPKHRPROC epoxy_glPopDebugGroupKHR; + PFNGLPOPGROUPMARKEREXTPROC epoxy_glPopGroupMarkerEXT; + PFNGLPOPMATRIXPROC epoxy_glPopMatrix; + PFNGLPOPNAMEPROC epoxy_glPopName; + PFNGLPRESENTFRAMEDUALFILLNVPROC epoxy_glPresentFrameDualFillNV; + PFNGLPRESENTFRAMEKEYEDNVPROC epoxy_glPresentFrameKeyedNV; + PFNGLPRIMITIVEBOUNDINGBOXPROC epoxy_glPrimitiveBoundingBox; + PFNGLPRIMITIVEBOUNDINGBOXARBPROC epoxy_glPrimitiveBoundingBoxARB; + PFNGLPRIMITIVEBOUNDINGBOXEXTPROC epoxy_glPrimitiveBoundingBoxEXT; + PFNGLPRIMITIVEBOUNDINGBOXOESPROC epoxy_glPrimitiveBoundingBoxOES; + PFNGLPRIMITIVERESTARTINDEXPROC epoxy_glPrimitiveRestartIndex; + PFNGLPRIMITIVERESTARTINDEXNVPROC epoxy_glPrimitiveRestartIndexNV; + PFNGLPRIMITIVERESTARTNVPROC epoxy_glPrimitiveRestartNV; + PFNGLPRIORITIZETEXTURESPROC epoxy_glPrioritizeTextures; + PFNGLPRIORITIZETEXTURESEXTPROC epoxy_glPrioritizeTexturesEXT; + PFNGLPRIORITIZETEXTURESXOESPROC epoxy_glPrioritizeTexturesxOES; + PFNGLPROGRAMBINARYPROC epoxy_glProgramBinary; + PFNGLPROGRAMBINARYOESPROC epoxy_glProgramBinaryOES; + PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC epoxy_glProgramBufferParametersIivNV; + PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC epoxy_glProgramBufferParametersIuivNV; + PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC epoxy_glProgramBufferParametersfvNV; + PFNGLPROGRAMENVPARAMETER4DARBPROC epoxy_glProgramEnvParameter4dARB; + PFNGLPROGRAMENVPARAMETER4DVARBPROC epoxy_glProgramEnvParameter4dvARB; + PFNGLPROGRAMENVPARAMETER4FARBPROC epoxy_glProgramEnvParameter4fARB; + PFNGLPROGRAMENVPARAMETER4FVARBPROC epoxy_glProgramEnvParameter4fvARB; + PFNGLPROGRAMENVPARAMETERI4INVPROC epoxy_glProgramEnvParameterI4iNV; + PFNGLPROGRAMENVPARAMETERI4IVNVPROC epoxy_glProgramEnvParameterI4ivNV; + PFNGLPROGRAMENVPARAMETERI4UINVPROC epoxy_glProgramEnvParameterI4uiNV; + PFNGLPROGRAMENVPARAMETERI4UIVNVPROC epoxy_glProgramEnvParameterI4uivNV; + PFNGLPROGRAMENVPARAMETERS4FVEXTPROC epoxy_glProgramEnvParameters4fvEXT; + PFNGLPROGRAMENVPARAMETERSI4IVNVPROC epoxy_glProgramEnvParametersI4ivNV; + PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC epoxy_glProgramEnvParametersI4uivNV; + PFNGLPROGRAMLOCALPARAMETER4DARBPROC epoxy_glProgramLocalParameter4dARB; + PFNGLPROGRAMLOCALPARAMETER4DVARBPROC epoxy_glProgramLocalParameter4dvARB; + PFNGLPROGRAMLOCALPARAMETER4FARBPROC epoxy_glProgramLocalParameter4fARB; + PFNGLPROGRAMLOCALPARAMETER4FVARBPROC epoxy_glProgramLocalParameter4fvARB; + PFNGLPROGRAMLOCALPARAMETERI4INVPROC epoxy_glProgramLocalParameterI4iNV; + PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC epoxy_glProgramLocalParameterI4ivNV; + PFNGLPROGRAMLOCALPARAMETERI4UINVPROC epoxy_glProgramLocalParameterI4uiNV; + PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC epoxy_glProgramLocalParameterI4uivNV; + PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glProgramLocalParameters4fvEXT; + PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC epoxy_glProgramLocalParametersI4ivNV; + PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC epoxy_glProgramLocalParametersI4uivNV; + PFNGLPROGRAMNAMEDPARAMETER4DNVPROC epoxy_glProgramNamedParameter4dNV; + PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC epoxy_glProgramNamedParameter4dvNV; + PFNGLPROGRAMNAMEDPARAMETER4FNVPROC epoxy_glProgramNamedParameter4fNV; + PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC epoxy_glProgramNamedParameter4fvNV; + PFNGLPROGRAMPARAMETER4DNVPROC epoxy_glProgramParameter4dNV; + PFNGLPROGRAMPARAMETER4DVNVPROC epoxy_glProgramParameter4dvNV; + PFNGLPROGRAMPARAMETER4FNVPROC epoxy_glProgramParameter4fNV; + PFNGLPROGRAMPARAMETER4FVNVPROC epoxy_glProgramParameter4fvNV; + PFNGLPROGRAMPARAMETERIPROC epoxy_glProgramParameteri; + PFNGLPROGRAMPARAMETERIARBPROC epoxy_glProgramParameteriARB; + PFNGLPROGRAMPARAMETERIEXTPROC epoxy_glProgramParameteriEXT; + PFNGLPROGRAMPARAMETERS4DVNVPROC epoxy_glProgramParameters4dvNV; + PFNGLPROGRAMPARAMETERS4FVNVPROC epoxy_glProgramParameters4fvNV; + PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC epoxy_glProgramPathFragmentInputGenNV; + PFNGLPROGRAMSTRINGARBPROC epoxy_glProgramStringARB; + PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC epoxy_glProgramSubroutineParametersuivNV; + PFNGLPROGRAMUNIFORM1DPROC epoxy_glProgramUniform1d; + PFNGLPROGRAMUNIFORM1DEXTPROC epoxy_glProgramUniform1dEXT; + PFNGLPROGRAMUNIFORM1DVPROC epoxy_glProgramUniform1dv; + PFNGLPROGRAMUNIFORM1DVEXTPROC epoxy_glProgramUniform1dvEXT; + PFNGLPROGRAMUNIFORM1FPROC epoxy_glProgramUniform1f; + PFNGLPROGRAMUNIFORM1FEXTPROC epoxy_glProgramUniform1fEXT; + PFNGLPROGRAMUNIFORM1FVPROC epoxy_glProgramUniform1fv; + PFNGLPROGRAMUNIFORM1FVEXTPROC epoxy_glProgramUniform1fvEXT; + PFNGLPROGRAMUNIFORM1IPROC epoxy_glProgramUniform1i; + PFNGLPROGRAMUNIFORM1I64ARBPROC epoxy_glProgramUniform1i64ARB; + PFNGLPROGRAMUNIFORM1I64NVPROC epoxy_glProgramUniform1i64NV; + PFNGLPROGRAMUNIFORM1I64VARBPROC epoxy_glProgramUniform1i64vARB; + PFNGLPROGRAMUNIFORM1I64VNVPROC epoxy_glProgramUniform1i64vNV; + PFNGLPROGRAMUNIFORM1IEXTPROC epoxy_glProgramUniform1iEXT; + PFNGLPROGRAMUNIFORM1IVPROC epoxy_glProgramUniform1iv; + PFNGLPROGRAMUNIFORM1IVEXTPROC epoxy_glProgramUniform1ivEXT; + PFNGLPROGRAMUNIFORM1UIPROC epoxy_glProgramUniform1ui; + PFNGLPROGRAMUNIFORM1UI64ARBPROC epoxy_glProgramUniform1ui64ARB; + PFNGLPROGRAMUNIFORM1UI64NVPROC epoxy_glProgramUniform1ui64NV; + PFNGLPROGRAMUNIFORM1UI64VARBPROC epoxy_glProgramUniform1ui64vARB; + PFNGLPROGRAMUNIFORM1UI64VNVPROC epoxy_glProgramUniform1ui64vNV; + PFNGLPROGRAMUNIFORM1UIEXTPROC epoxy_glProgramUniform1uiEXT; + PFNGLPROGRAMUNIFORM1UIVPROC epoxy_glProgramUniform1uiv; + PFNGLPROGRAMUNIFORM1UIVEXTPROC epoxy_glProgramUniform1uivEXT; + PFNGLPROGRAMUNIFORM2DPROC epoxy_glProgramUniform2d; + PFNGLPROGRAMUNIFORM2DEXTPROC epoxy_glProgramUniform2dEXT; + PFNGLPROGRAMUNIFORM2DVPROC epoxy_glProgramUniform2dv; + PFNGLPROGRAMUNIFORM2DVEXTPROC epoxy_glProgramUniform2dvEXT; + PFNGLPROGRAMUNIFORM2FPROC epoxy_glProgramUniform2f; + PFNGLPROGRAMUNIFORM2FEXTPROC epoxy_glProgramUniform2fEXT; + PFNGLPROGRAMUNIFORM2FVPROC epoxy_glProgramUniform2fv; + PFNGLPROGRAMUNIFORM2FVEXTPROC epoxy_glProgramUniform2fvEXT; + PFNGLPROGRAMUNIFORM2IPROC epoxy_glProgramUniform2i; + PFNGLPROGRAMUNIFORM2I64ARBPROC epoxy_glProgramUniform2i64ARB; + PFNGLPROGRAMUNIFORM2I64NVPROC epoxy_glProgramUniform2i64NV; + PFNGLPROGRAMUNIFORM2I64VARBPROC epoxy_glProgramUniform2i64vARB; + PFNGLPROGRAMUNIFORM2I64VNVPROC epoxy_glProgramUniform2i64vNV; + PFNGLPROGRAMUNIFORM2IEXTPROC epoxy_glProgramUniform2iEXT; + PFNGLPROGRAMUNIFORM2IVPROC epoxy_glProgramUniform2iv; + PFNGLPROGRAMUNIFORM2IVEXTPROC epoxy_glProgramUniform2ivEXT; + PFNGLPROGRAMUNIFORM2UIPROC epoxy_glProgramUniform2ui; + PFNGLPROGRAMUNIFORM2UI64ARBPROC epoxy_glProgramUniform2ui64ARB; + PFNGLPROGRAMUNIFORM2UI64NVPROC epoxy_glProgramUniform2ui64NV; + PFNGLPROGRAMUNIFORM2UI64VARBPROC epoxy_glProgramUniform2ui64vARB; + PFNGLPROGRAMUNIFORM2UI64VNVPROC epoxy_glProgramUniform2ui64vNV; + PFNGLPROGRAMUNIFORM2UIEXTPROC epoxy_glProgramUniform2uiEXT; + PFNGLPROGRAMUNIFORM2UIVPROC epoxy_glProgramUniform2uiv; + PFNGLPROGRAMUNIFORM2UIVEXTPROC epoxy_glProgramUniform2uivEXT; + PFNGLPROGRAMUNIFORM3DPROC epoxy_glProgramUniform3d; + PFNGLPROGRAMUNIFORM3DEXTPROC epoxy_glProgramUniform3dEXT; + PFNGLPROGRAMUNIFORM3DVPROC epoxy_glProgramUniform3dv; + PFNGLPROGRAMUNIFORM3DVEXTPROC epoxy_glProgramUniform3dvEXT; + PFNGLPROGRAMUNIFORM3FPROC epoxy_glProgramUniform3f; + PFNGLPROGRAMUNIFORM3FEXTPROC epoxy_glProgramUniform3fEXT; + PFNGLPROGRAMUNIFORM3FVPROC epoxy_glProgramUniform3fv; + PFNGLPROGRAMUNIFORM3FVEXTPROC epoxy_glProgramUniform3fvEXT; + PFNGLPROGRAMUNIFORM3IPROC epoxy_glProgramUniform3i; + PFNGLPROGRAMUNIFORM3I64ARBPROC epoxy_glProgramUniform3i64ARB; + PFNGLPROGRAMUNIFORM3I64NVPROC epoxy_glProgramUniform3i64NV; + PFNGLPROGRAMUNIFORM3I64VARBPROC epoxy_glProgramUniform3i64vARB; + PFNGLPROGRAMUNIFORM3I64VNVPROC epoxy_glProgramUniform3i64vNV; + PFNGLPROGRAMUNIFORM3IEXTPROC epoxy_glProgramUniform3iEXT; + PFNGLPROGRAMUNIFORM3IVPROC epoxy_glProgramUniform3iv; + PFNGLPROGRAMUNIFORM3IVEXTPROC epoxy_glProgramUniform3ivEXT; + PFNGLPROGRAMUNIFORM3UIPROC epoxy_glProgramUniform3ui; + PFNGLPROGRAMUNIFORM3UI64ARBPROC epoxy_glProgramUniform3ui64ARB; + PFNGLPROGRAMUNIFORM3UI64NVPROC epoxy_glProgramUniform3ui64NV; + PFNGLPROGRAMUNIFORM3UI64VARBPROC epoxy_glProgramUniform3ui64vARB; + PFNGLPROGRAMUNIFORM3UI64VNVPROC epoxy_glProgramUniform3ui64vNV; + PFNGLPROGRAMUNIFORM3UIEXTPROC epoxy_glProgramUniform3uiEXT; + PFNGLPROGRAMUNIFORM3UIVPROC epoxy_glProgramUniform3uiv; + PFNGLPROGRAMUNIFORM3UIVEXTPROC epoxy_glProgramUniform3uivEXT; + PFNGLPROGRAMUNIFORM4DPROC epoxy_glProgramUniform4d; + PFNGLPROGRAMUNIFORM4DEXTPROC epoxy_glProgramUniform4dEXT; + PFNGLPROGRAMUNIFORM4DVPROC epoxy_glProgramUniform4dv; + PFNGLPROGRAMUNIFORM4DVEXTPROC epoxy_glProgramUniform4dvEXT; + PFNGLPROGRAMUNIFORM4FPROC epoxy_glProgramUniform4f; + PFNGLPROGRAMUNIFORM4FEXTPROC epoxy_glProgramUniform4fEXT; + PFNGLPROGRAMUNIFORM4FVPROC epoxy_glProgramUniform4fv; + PFNGLPROGRAMUNIFORM4FVEXTPROC epoxy_glProgramUniform4fvEXT; + PFNGLPROGRAMUNIFORM4IPROC epoxy_glProgramUniform4i; + PFNGLPROGRAMUNIFORM4I64ARBPROC epoxy_glProgramUniform4i64ARB; + PFNGLPROGRAMUNIFORM4I64NVPROC epoxy_glProgramUniform4i64NV; + PFNGLPROGRAMUNIFORM4I64VARBPROC epoxy_glProgramUniform4i64vARB; + PFNGLPROGRAMUNIFORM4I64VNVPROC epoxy_glProgramUniform4i64vNV; + PFNGLPROGRAMUNIFORM4IEXTPROC epoxy_glProgramUniform4iEXT; + PFNGLPROGRAMUNIFORM4IVPROC epoxy_glProgramUniform4iv; + PFNGLPROGRAMUNIFORM4IVEXTPROC epoxy_glProgramUniform4ivEXT; + PFNGLPROGRAMUNIFORM4UIPROC epoxy_glProgramUniform4ui; + PFNGLPROGRAMUNIFORM4UI64ARBPROC epoxy_glProgramUniform4ui64ARB; + PFNGLPROGRAMUNIFORM4UI64NVPROC epoxy_glProgramUniform4ui64NV; + PFNGLPROGRAMUNIFORM4UI64VARBPROC epoxy_glProgramUniform4ui64vARB; + PFNGLPROGRAMUNIFORM4UI64VNVPROC epoxy_glProgramUniform4ui64vNV; + PFNGLPROGRAMUNIFORM4UIEXTPROC epoxy_glProgramUniform4uiEXT; + PFNGLPROGRAMUNIFORM4UIVPROC epoxy_glProgramUniform4uiv; + PFNGLPROGRAMUNIFORM4UIVEXTPROC epoxy_glProgramUniform4uivEXT; + PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC epoxy_glProgramUniformHandleui64ARB; + PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC epoxy_glProgramUniformHandleui64NV; + PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC epoxy_glProgramUniformHandleui64vARB; + PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC epoxy_glProgramUniformHandleui64vNV; + PFNGLPROGRAMUNIFORMMATRIX2DVPROC epoxy_glProgramUniformMatrix2dv; + PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC epoxy_glProgramUniformMatrix2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2FVPROC epoxy_glProgramUniformMatrix2fv; + PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC epoxy_glProgramUniformMatrix2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC epoxy_glProgramUniformMatrix2x3dv; + PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC epoxy_glProgramUniformMatrix2x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC epoxy_glProgramUniformMatrix2x3fv; + PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC epoxy_glProgramUniformMatrix2x3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC epoxy_glProgramUniformMatrix2x4dv; + PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC epoxy_glProgramUniformMatrix2x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC epoxy_glProgramUniformMatrix2x4fv; + PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC epoxy_glProgramUniformMatrix2x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3DVPROC epoxy_glProgramUniformMatrix3dv; + PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC epoxy_glProgramUniformMatrix3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3FVPROC epoxy_glProgramUniformMatrix3fv; + PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC epoxy_glProgramUniformMatrix3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC epoxy_glProgramUniformMatrix3x2dv; + PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC epoxy_glProgramUniformMatrix3x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC epoxy_glProgramUniformMatrix3x2fv; + PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC epoxy_glProgramUniformMatrix3x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC epoxy_glProgramUniformMatrix3x4dv; + PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC epoxy_glProgramUniformMatrix3x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC epoxy_glProgramUniformMatrix3x4fv; + PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC epoxy_glProgramUniformMatrix3x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4DVPROC epoxy_glProgramUniformMatrix4dv; + PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC epoxy_glProgramUniformMatrix4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4FVPROC epoxy_glProgramUniformMatrix4fv; + PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC epoxy_glProgramUniformMatrix4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC epoxy_glProgramUniformMatrix4x2dv; + PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC epoxy_glProgramUniformMatrix4x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC epoxy_glProgramUniformMatrix4x2fv; + PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC epoxy_glProgramUniformMatrix4x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC epoxy_glProgramUniformMatrix4x3dv; + PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC epoxy_glProgramUniformMatrix4x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC epoxy_glProgramUniformMatrix4x3fv; + PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC epoxy_glProgramUniformMatrix4x3fvEXT; + PFNGLPROGRAMUNIFORMUI64NVPROC epoxy_glProgramUniformui64NV; + PFNGLPROGRAMUNIFORMUI64VNVPROC epoxy_glProgramUniformui64vNV; + PFNGLPROGRAMVERTEXLIMITNVPROC epoxy_glProgramVertexLimitNV; + PFNGLPROVOKINGVERTEXPROC epoxy_glProvokingVertex; + PFNGLPROVOKINGVERTEXEXTPROC epoxy_glProvokingVertexEXT; + PFNGLPUSHATTRIBPROC epoxy_glPushAttrib; + PFNGLPUSHCLIENTATTRIBPROC epoxy_glPushClientAttrib; + PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC epoxy_glPushClientAttribDefaultEXT; + PFNGLPUSHDEBUGGROUPPROC epoxy_glPushDebugGroup; + PFNGLPUSHDEBUGGROUPKHRPROC epoxy_glPushDebugGroupKHR; + PFNGLPUSHGROUPMARKEREXTPROC epoxy_glPushGroupMarkerEXT; + PFNGLPUSHMATRIXPROC epoxy_glPushMatrix; + PFNGLPUSHNAMEPROC epoxy_glPushName; + PFNGLQUERYCOUNTERPROC epoxy_glQueryCounter; + PFNGLQUERYCOUNTEREXTPROC epoxy_glQueryCounterEXT; + PFNGLQUERYMATRIXXOESPROC epoxy_glQueryMatrixxOES; + PFNGLQUERYOBJECTPARAMETERUIAMDPROC epoxy_glQueryObjectParameteruiAMD; + PFNGLRASTERPOS2DPROC epoxy_glRasterPos2d; + PFNGLRASTERPOS2DVPROC epoxy_glRasterPos2dv; + PFNGLRASTERPOS2FPROC epoxy_glRasterPos2f; + PFNGLRASTERPOS2FVPROC epoxy_glRasterPos2fv; + PFNGLRASTERPOS2IPROC epoxy_glRasterPos2i; + PFNGLRASTERPOS2IVPROC epoxy_glRasterPos2iv; + PFNGLRASTERPOS2SPROC epoxy_glRasterPos2s; + PFNGLRASTERPOS2SVPROC epoxy_glRasterPos2sv; + PFNGLRASTERPOS2XOESPROC epoxy_glRasterPos2xOES; + PFNGLRASTERPOS2XVOESPROC epoxy_glRasterPos2xvOES; + PFNGLRASTERPOS3DPROC epoxy_glRasterPos3d; + PFNGLRASTERPOS3DVPROC epoxy_glRasterPos3dv; + PFNGLRASTERPOS3FPROC epoxy_glRasterPos3f; + PFNGLRASTERPOS3FVPROC epoxy_glRasterPos3fv; + PFNGLRASTERPOS3IPROC epoxy_glRasterPos3i; + PFNGLRASTERPOS3IVPROC epoxy_glRasterPos3iv; + PFNGLRASTERPOS3SPROC epoxy_glRasterPos3s; + PFNGLRASTERPOS3SVPROC epoxy_glRasterPos3sv; + PFNGLRASTERPOS3XOESPROC epoxy_glRasterPos3xOES; + PFNGLRASTERPOS3XVOESPROC epoxy_glRasterPos3xvOES; + PFNGLRASTERPOS4DPROC epoxy_glRasterPos4d; + PFNGLRASTERPOS4DVPROC epoxy_glRasterPos4dv; + PFNGLRASTERPOS4FPROC epoxy_glRasterPos4f; + PFNGLRASTERPOS4FVPROC epoxy_glRasterPos4fv; + PFNGLRASTERPOS4IPROC epoxy_glRasterPos4i; + PFNGLRASTERPOS4IVPROC epoxy_glRasterPos4iv; + PFNGLRASTERPOS4SPROC epoxy_glRasterPos4s; + PFNGLRASTERPOS4SVPROC epoxy_glRasterPos4sv; + PFNGLRASTERPOS4XOESPROC epoxy_glRasterPos4xOES; + PFNGLRASTERPOS4XVOESPROC epoxy_glRasterPos4xvOES; + PFNGLRASTERSAMPLESEXTPROC epoxy_glRasterSamplesEXT; + PFNGLREADBUFFERPROC epoxy_glReadBuffer; + PFNGLREADBUFFERINDEXEDEXTPROC epoxy_glReadBufferIndexedEXT; + PFNGLREADBUFFERNVPROC epoxy_glReadBufferNV; + PFNGLREADINSTRUMENTSSGIXPROC epoxy_glReadInstrumentsSGIX; + PFNGLREADPIXELSPROC epoxy_glReadPixels; + PFNGLREADNPIXELSPROC epoxy_glReadnPixels; + PFNGLREADNPIXELSARBPROC epoxy_glReadnPixelsARB; + PFNGLREADNPIXELSEXTPROC epoxy_glReadnPixelsEXT; + PFNGLREADNPIXELSKHRPROC epoxy_glReadnPixelsKHR; + PFNGLRECTDPROC epoxy_glRectd; + PFNGLRECTDVPROC epoxy_glRectdv; + PFNGLRECTFPROC epoxy_glRectf; + PFNGLRECTFVPROC epoxy_glRectfv; + PFNGLRECTIPROC epoxy_glRecti; + PFNGLRECTIVPROC epoxy_glRectiv; + PFNGLRECTSPROC epoxy_glRects; + PFNGLRECTSVPROC epoxy_glRectsv; + PFNGLRECTXOESPROC epoxy_glRectxOES; + PFNGLRECTXVOESPROC epoxy_glRectxvOES; + PFNGLREFERENCEPLANESGIXPROC epoxy_glReferencePlaneSGIX; + PFNGLRELEASESHADERCOMPILERPROC epoxy_glReleaseShaderCompiler; + PFNGLRENDERMODEPROC epoxy_glRenderMode; + PFNGLRENDERBUFFERSTORAGEPROC epoxy_glRenderbufferStorage; + PFNGLRENDERBUFFERSTORAGEEXTPROC epoxy_glRenderbufferStorageEXT; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glRenderbufferStorageMultisample; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC epoxy_glRenderbufferStorageMultisampleANGLE; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC epoxy_glRenderbufferStorageMultisampleAPPLE; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC epoxy_glRenderbufferStorageMultisampleCoverageNV; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glRenderbufferStorageMultisampleEXT; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC epoxy_glRenderbufferStorageMultisampleIMG; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC epoxy_glRenderbufferStorageMultisampleNV; + PFNGLRENDERBUFFERSTORAGEOESPROC epoxy_glRenderbufferStorageOES; + PFNGLREPLACEMENTCODEPOINTERSUNPROC epoxy_glReplacementCodePointerSUN; + PFNGLREPLACEMENTCODEUBSUNPROC epoxy_glReplacementCodeubSUN; + PFNGLREPLACEMENTCODEUBVSUNPROC epoxy_glReplacementCodeubvSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fvSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUISUNPROC epoxy_glReplacementCodeuiSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC epoxy_glReplacementCodeuiVertex3fSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC epoxy_glReplacementCodeuiVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVSUNPROC epoxy_glReplacementCodeuivSUN; + PFNGLREPLACEMENTCODEUSSUNPROC epoxy_glReplacementCodeusSUN; + PFNGLREPLACEMENTCODEUSVSUNPROC epoxy_glReplacementCodeusvSUN; + PFNGLREQUESTRESIDENTPROGRAMSNVPROC epoxy_glRequestResidentProgramsNV; + PFNGLRESETHISTOGRAMPROC epoxy_glResetHistogram; + PFNGLRESETHISTOGRAMEXTPROC epoxy_glResetHistogramEXT; + PFNGLRESETMINMAXPROC epoxy_glResetMinmax; + PFNGLRESETMINMAXEXTPROC epoxy_glResetMinmaxEXT; + PFNGLRESIZEBUFFERSMESAPROC epoxy_glResizeBuffersMESA; + PFNGLRESOLVEDEPTHVALUESNVPROC epoxy_glResolveDepthValuesNV; + PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC epoxy_glResolveMultisampleFramebufferAPPLE; + PFNGLRESUMETRANSFORMFEEDBACKPROC epoxy_glResumeTransformFeedback; + PFNGLRESUMETRANSFORMFEEDBACKNVPROC epoxy_glResumeTransformFeedbackNV; + PFNGLROTATEDPROC epoxy_glRotated; + PFNGLROTATEFPROC epoxy_glRotatef; + PFNGLROTATEXPROC epoxy_glRotatex; + PFNGLROTATEXOESPROC epoxy_glRotatexOES; + PFNGLSAMPLECOVERAGEPROC epoxy_glSampleCoverage; + PFNGLSAMPLECOVERAGEARBPROC epoxy_glSampleCoverageARB; + PFNGLSAMPLECOVERAGEXPROC epoxy_glSampleCoveragex; + PFNGLSAMPLECOVERAGEXOESPROC epoxy_glSampleCoveragexOES; + PFNGLSAMPLEMAPATIPROC epoxy_glSampleMapATI; + PFNGLSAMPLEMASKEXTPROC epoxy_glSampleMaskEXT; + PFNGLSAMPLEMASKINDEXEDNVPROC epoxy_glSampleMaskIndexedNV; + PFNGLSAMPLEMASKSGISPROC epoxy_glSampleMaskSGIS; + PFNGLSAMPLEMASKIPROC epoxy_glSampleMaski; + PFNGLSAMPLEPATTERNEXTPROC epoxy_glSamplePatternEXT; + PFNGLSAMPLEPATTERNSGISPROC epoxy_glSamplePatternSGIS; + PFNGLSAMPLERPARAMETERIIVPROC epoxy_glSamplerParameterIiv; + PFNGLSAMPLERPARAMETERIIVEXTPROC epoxy_glSamplerParameterIivEXT; + PFNGLSAMPLERPARAMETERIIVOESPROC epoxy_glSamplerParameterIivOES; + PFNGLSAMPLERPARAMETERIUIVPROC epoxy_glSamplerParameterIuiv; + PFNGLSAMPLERPARAMETERIUIVEXTPROC epoxy_glSamplerParameterIuivEXT; + PFNGLSAMPLERPARAMETERIUIVOESPROC epoxy_glSamplerParameterIuivOES; + PFNGLSAMPLERPARAMETERFPROC epoxy_glSamplerParameterf; + PFNGLSAMPLERPARAMETERFVPROC epoxy_glSamplerParameterfv; + PFNGLSAMPLERPARAMETERIPROC epoxy_glSamplerParameteri; + PFNGLSAMPLERPARAMETERIVPROC epoxy_glSamplerParameteriv; + PFNGLSCALEDPROC epoxy_glScaled; + PFNGLSCALEFPROC epoxy_glScalef; + PFNGLSCALEXPROC epoxy_glScalex; + PFNGLSCALEXOESPROC epoxy_glScalexOES; + PFNGLSCISSORPROC epoxy_glScissor; + PFNGLSCISSORARRAYVPROC epoxy_glScissorArrayv; + PFNGLSCISSORARRAYVNVPROC epoxy_glScissorArrayvNV; + PFNGLSCISSORINDEXEDPROC epoxy_glScissorIndexed; + PFNGLSCISSORINDEXEDNVPROC epoxy_glScissorIndexedNV; + PFNGLSCISSORINDEXEDVPROC epoxy_glScissorIndexedv; + PFNGLSCISSORINDEXEDVNVPROC epoxy_glScissorIndexedvNV; + PFNGLSECONDARYCOLOR3BPROC epoxy_glSecondaryColor3b; + PFNGLSECONDARYCOLOR3BEXTPROC epoxy_glSecondaryColor3bEXT; + PFNGLSECONDARYCOLOR3BVPROC epoxy_glSecondaryColor3bv; + PFNGLSECONDARYCOLOR3BVEXTPROC epoxy_glSecondaryColor3bvEXT; + PFNGLSECONDARYCOLOR3DPROC epoxy_glSecondaryColor3d; + PFNGLSECONDARYCOLOR3DEXTPROC epoxy_glSecondaryColor3dEXT; + PFNGLSECONDARYCOLOR3DVPROC epoxy_glSecondaryColor3dv; + PFNGLSECONDARYCOLOR3DVEXTPROC epoxy_glSecondaryColor3dvEXT; + PFNGLSECONDARYCOLOR3FPROC epoxy_glSecondaryColor3f; + PFNGLSECONDARYCOLOR3FEXTPROC epoxy_glSecondaryColor3fEXT; + PFNGLSECONDARYCOLOR3FVPROC epoxy_glSecondaryColor3fv; + PFNGLSECONDARYCOLOR3FVEXTPROC epoxy_glSecondaryColor3fvEXT; + PFNGLSECONDARYCOLOR3HNVPROC epoxy_glSecondaryColor3hNV; + PFNGLSECONDARYCOLOR3HVNVPROC epoxy_glSecondaryColor3hvNV; + PFNGLSECONDARYCOLOR3IPROC epoxy_glSecondaryColor3i; + PFNGLSECONDARYCOLOR3IEXTPROC epoxy_glSecondaryColor3iEXT; + PFNGLSECONDARYCOLOR3IVPROC epoxy_glSecondaryColor3iv; + PFNGLSECONDARYCOLOR3IVEXTPROC epoxy_glSecondaryColor3ivEXT; + PFNGLSECONDARYCOLOR3SPROC epoxy_glSecondaryColor3s; + PFNGLSECONDARYCOLOR3SEXTPROC epoxy_glSecondaryColor3sEXT; + PFNGLSECONDARYCOLOR3SVPROC epoxy_glSecondaryColor3sv; + PFNGLSECONDARYCOLOR3SVEXTPROC epoxy_glSecondaryColor3svEXT; + PFNGLSECONDARYCOLOR3UBPROC epoxy_glSecondaryColor3ub; + PFNGLSECONDARYCOLOR3UBEXTPROC epoxy_glSecondaryColor3ubEXT; + PFNGLSECONDARYCOLOR3UBVPROC epoxy_glSecondaryColor3ubv; + PFNGLSECONDARYCOLOR3UBVEXTPROC epoxy_glSecondaryColor3ubvEXT; + PFNGLSECONDARYCOLOR3UIPROC epoxy_glSecondaryColor3ui; + PFNGLSECONDARYCOLOR3UIEXTPROC epoxy_glSecondaryColor3uiEXT; + PFNGLSECONDARYCOLOR3UIVPROC epoxy_glSecondaryColor3uiv; + PFNGLSECONDARYCOLOR3UIVEXTPROC epoxy_glSecondaryColor3uivEXT; + PFNGLSECONDARYCOLOR3USPROC epoxy_glSecondaryColor3us; + PFNGLSECONDARYCOLOR3USEXTPROC epoxy_glSecondaryColor3usEXT; + PFNGLSECONDARYCOLOR3USVPROC epoxy_glSecondaryColor3usv; + PFNGLSECONDARYCOLOR3USVEXTPROC epoxy_glSecondaryColor3usvEXT; + PFNGLSECONDARYCOLORFORMATNVPROC epoxy_glSecondaryColorFormatNV; + PFNGLSECONDARYCOLORP3UIPROC epoxy_glSecondaryColorP3ui; + PFNGLSECONDARYCOLORP3UIVPROC epoxy_glSecondaryColorP3uiv; + PFNGLSECONDARYCOLORPOINTERPROC epoxy_glSecondaryColorPointer; + PFNGLSECONDARYCOLORPOINTEREXTPROC epoxy_glSecondaryColorPointerEXT; + PFNGLSECONDARYCOLORPOINTERLISTIBMPROC epoxy_glSecondaryColorPointerListIBM; + PFNGLSELECTBUFFERPROC epoxy_glSelectBuffer; + PFNGLSELECTPERFMONITORCOUNTERSAMDPROC epoxy_glSelectPerfMonitorCountersAMD; + PFNGLSEPARABLEFILTER2DPROC epoxy_glSeparableFilter2D; + PFNGLSEPARABLEFILTER2DEXTPROC epoxy_glSeparableFilter2DEXT; + PFNGLSETFENCEAPPLEPROC epoxy_glSetFenceAPPLE; + PFNGLSETFENCENVPROC epoxy_glSetFenceNV; + PFNGLSETFRAGMENTSHADERCONSTANTATIPROC epoxy_glSetFragmentShaderConstantATI; + PFNGLSETINVARIANTEXTPROC epoxy_glSetInvariantEXT; + PFNGLSETLOCALCONSTANTEXTPROC epoxy_glSetLocalConstantEXT; + PFNGLSETMULTISAMPLEFVAMDPROC epoxy_glSetMultisamplefvAMD; + PFNGLSHADEMODELPROC epoxy_glShadeModel; + PFNGLSHADERBINARYPROC epoxy_glShaderBinary; + PFNGLSHADEROP1EXTPROC epoxy_glShaderOp1EXT; + PFNGLSHADEROP2EXTPROC epoxy_glShaderOp2EXT; + PFNGLSHADEROP3EXTPROC epoxy_glShaderOp3EXT; + PFNGLSHADERSOURCEPROC epoxy_glShaderSource; + PFNGLSHADERSOURCEARBPROC epoxy_glShaderSourceARB; + PFNGLSHADERSTORAGEBLOCKBINDINGPROC epoxy_glShaderStorageBlockBinding; + PFNGLSHARPENTEXFUNCSGISPROC epoxy_glSharpenTexFuncSGIS; + PFNGLSPRITEPARAMETERFSGIXPROC epoxy_glSpriteParameterfSGIX; + PFNGLSPRITEPARAMETERFVSGIXPROC epoxy_glSpriteParameterfvSGIX; + PFNGLSPRITEPARAMETERISGIXPROC epoxy_glSpriteParameteriSGIX; + PFNGLSPRITEPARAMETERIVSGIXPROC epoxy_glSpriteParameterivSGIX; + PFNGLSTARTINSTRUMENTSSGIXPROC epoxy_glStartInstrumentsSGIX; + PFNGLSTARTTILINGQCOMPROC epoxy_glStartTilingQCOM; + PFNGLSTATECAPTURENVPROC epoxy_glStateCaptureNV; + PFNGLSTENCILCLEARTAGEXTPROC epoxy_glStencilClearTagEXT; + PFNGLSTENCILFILLPATHINSTANCEDNVPROC epoxy_glStencilFillPathInstancedNV; + PFNGLSTENCILFILLPATHNVPROC epoxy_glStencilFillPathNV; + PFNGLSTENCILFUNCPROC epoxy_glStencilFunc; + PFNGLSTENCILFUNCSEPARATEPROC epoxy_glStencilFuncSeparate; + PFNGLSTENCILFUNCSEPARATEATIPROC epoxy_glStencilFuncSeparateATI; + PFNGLSTENCILMASKPROC epoxy_glStencilMask; + PFNGLSTENCILMASKSEPARATEPROC epoxy_glStencilMaskSeparate; + PFNGLSTENCILOPPROC epoxy_glStencilOp; + PFNGLSTENCILOPSEPARATEPROC epoxy_glStencilOpSeparate; + PFNGLSTENCILOPSEPARATEATIPROC epoxy_glStencilOpSeparateATI; + PFNGLSTENCILOPVALUEAMDPROC epoxy_glStencilOpValueAMD; + PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC epoxy_glStencilStrokePathInstancedNV; + PFNGLSTENCILSTROKEPATHNVPROC epoxy_glStencilStrokePathNV; + PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC epoxy_glStencilThenCoverFillPathInstancedNV; + PFNGLSTENCILTHENCOVERFILLPATHNVPROC epoxy_glStencilThenCoverFillPathNV; + PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glStencilThenCoverStrokePathInstancedNV; + PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC epoxy_glStencilThenCoverStrokePathNV; + PFNGLSTOPINSTRUMENTSSGIXPROC epoxy_glStopInstrumentsSGIX; + PFNGLSTRINGMARKERGREMEDYPROC epoxy_glStringMarkerGREMEDY; + PFNGLSUBPIXELPRECISIONBIASNVPROC epoxy_glSubpixelPrecisionBiasNV; + PFNGLSWIZZLEEXTPROC epoxy_glSwizzleEXT; + PFNGLSYNCTEXTUREINTELPROC epoxy_glSyncTextureINTEL; + PFNGLTAGSAMPLEBUFFERSGIXPROC epoxy_glTagSampleBufferSGIX; + PFNGLTANGENT3BEXTPROC epoxy_glTangent3bEXT; + PFNGLTANGENT3BVEXTPROC epoxy_glTangent3bvEXT; + PFNGLTANGENT3DEXTPROC epoxy_glTangent3dEXT; + PFNGLTANGENT3DVEXTPROC epoxy_glTangent3dvEXT; + PFNGLTANGENT3FEXTPROC epoxy_glTangent3fEXT; + PFNGLTANGENT3FVEXTPROC epoxy_glTangent3fvEXT; + PFNGLTANGENT3IEXTPROC epoxy_glTangent3iEXT; + PFNGLTANGENT3IVEXTPROC epoxy_glTangent3ivEXT; + PFNGLTANGENT3SEXTPROC epoxy_glTangent3sEXT; + PFNGLTANGENT3SVEXTPROC epoxy_glTangent3svEXT; + PFNGLTANGENTPOINTEREXTPROC epoxy_glTangentPointerEXT; + PFNGLTBUFFERMASK3DFXPROC epoxy_glTbufferMask3DFX; + PFNGLTESSELLATIONFACTORAMDPROC epoxy_glTessellationFactorAMD; + PFNGLTESSELLATIONMODEAMDPROC epoxy_glTessellationModeAMD; + PFNGLTESTFENCEAPPLEPROC epoxy_glTestFenceAPPLE; + PFNGLTESTFENCENVPROC epoxy_glTestFenceNV; + PFNGLTESTOBJECTAPPLEPROC epoxy_glTestObjectAPPLE; + PFNGLTEXBUFFERPROC epoxy_glTexBuffer; + PFNGLTEXBUFFERARBPROC epoxy_glTexBufferARB; + PFNGLTEXBUFFEREXTPROC epoxy_glTexBufferEXT; + PFNGLTEXBUFFEROESPROC epoxy_glTexBufferOES; + PFNGLTEXBUFFERRANGEPROC epoxy_glTexBufferRange; + PFNGLTEXBUFFERRANGEEXTPROC epoxy_glTexBufferRangeEXT; + PFNGLTEXBUFFERRANGEOESPROC epoxy_glTexBufferRangeOES; + PFNGLTEXBUMPPARAMETERFVATIPROC epoxy_glTexBumpParameterfvATI; + PFNGLTEXBUMPPARAMETERIVATIPROC epoxy_glTexBumpParameterivATI; + PFNGLTEXCOORD1BOESPROC epoxy_glTexCoord1bOES; + PFNGLTEXCOORD1BVOESPROC epoxy_glTexCoord1bvOES; + PFNGLTEXCOORD1DPROC epoxy_glTexCoord1d; + PFNGLTEXCOORD1DVPROC epoxy_glTexCoord1dv; + PFNGLTEXCOORD1FPROC epoxy_glTexCoord1f; + PFNGLTEXCOORD1FVPROC epoxy_glTexCoord1fv; + PFNGLTEXCOORD1HNVPROC epoxy_glTexCoord1hNV; + PFNGLTEXCOORD1HVNVPROC epoxy_glTexCoord1hvNV; + PFNGLTEXCOORD1IPROC epoxy_glTexCoord1i; + PFNGLTEXCOORD1IVPROC epoxy_glTexCoord1iv; + PFNGLTEXCOORD1SPROC epoxy_glTexCoord1s; + PFNGLTEXCOORD1SVPROC epoxy_glTexCoord1sv; + PFNGLTEXCOORD1XOESPROC epoxy_glTexCoord1xOES; + PFNGLTEXCOORD1XVOESPROC epoxy_glTexCoord1xvOES; + PFNGLTEXCOORD2BOESPROC epoxy_glTexCoord2bOES; + PFNGLTEXCOORD2BVOESPROC epoxy_glTexCoord2bvOES; + PFNGLTEXCOORD2DPROC epoxy_glTexCoord2d; + PFNGLTEXCOORD2DVPROC epoxy_glTexCoord2dv; + PFNGLTEXCOORD2FPROC epoxy_glTexCoord2f; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC epoxy_glTexCoord2fColor4ubVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4ubVertex3fvSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FVERTEX3FSUNPROC epoxy_glTexCoord2fVertex3fSUN; + PFNGLTEXCOORD2FVERTEX3FVSUNPROC epoxy_glTexCoord2fVertex3fvSUN; + PFNGLTEXCOORD2FVPROC epoxy_glTexCoord2fv; + PFNGLTEXCOORD2HNVPROC epoxy_glTexCoord2hNV; + PFNGLTEXCOORD2HVNVPROC epoxy_glTexCoord2hvNV; + PFNGLTEXCOORD2IPROC epoxy_glTexCoord2i; + PFNGLTEXCOORD2IVPROC epoxy_glTexCoord2iv; + PFNGLTEXCOORD2SPROC epoxy_glTexCoord2s; + PFNGLTEXCOORD2SVPROC epoxy_glTexCoord2sv; + PFNGLTEXCOORD2XOESPROC epoxy_glTexCoord2xOES; + PFNGLTEXCOORD2XVOESPROC epoxy_glTexCoord2xvOES; + PFNGLTEXCOORD3BOESPROC epoxy_glTexCoord3bOES; + PFNGLTEXCOORD3BVOESPROC epoxy_glTexCoord3bvOES; + PFNGLTEXCOORD3DPROC epoxy_glTexCoord3d; + PFNGLTEXCOORD3DVPROC epoxy_glTexCoord3dv; + PFNGLTEXCOORD3FPROC epoxy_glTexCoord3f; + PFNGLTEXCOORD3FVPROC epoxy_glTexCoord3fv; + PFNGLTEXCOORD3HNVPROC epoxy_glTexCoord3hNV; + PFNGLTEXCOORD3HVNVPROC epoxy_glTexCoord3hvNV; + PFNGLTEXCOORD3IPROC epoxy_glTexCoord3i; + PFNGLTEXCOORD3IVPROC epoxy_glTexCoord3iv; + PFNGLTEXCOORD3SPROC epoxy_glTexCoord3s; + PFNGLTEXCOORD3SVPROC epoxy_glTexCoord3sv; + PFNGLTEXCOORD3XOESPROC epoxy_glTexCoord3xOES; + PFNGLTEXCOORD3XVOESPROC epoxy_glTexCoord3xvOES; + PFNGLTEXCOORD4BOESPROC epoxy_glTexCoord4bOES; + PFNGLTEXCOORD4BVOESPROC epoxy_glTexCoord4bvOES; + PFNGLTEXCOORD4DPROC epoxy_glTexCoord4d; + PFNGLTEXCOORD4DVPROC epoxy_glTexCoord4dv; + PFNGLTEXCOORD4FPROC epoxy_glTexCoord4f; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN; + PFNGLTEXCOORD4FVERTEX4FSUNPROC epoxy_glTexCoord4fVertex4fSUN; + PFNGLTEXCOORD4FVERTEX4FVSUNPROC epoxy_glTexCoord4fVertex4fvSUN; + PFNGLTEXCOORD4FVPROC epoxy_glTexCoord4fv; + PFNGLTEXCOORD4HNVPROC epoxy_glTexCoord4hNV; + PFNGLTEXCOORD4HVNVPROC epoxy_glTexCoord4hvNV; + PFNGLTEXCOORD4IPROC epoxy_glTexCoord4i; + PFNGLTEXCOORD4IVPROC epoxy_glTexCoord4iv; + PFNGLTEXCOORD4SPROC epoxy_glTexCoord4s; + PFNGLTEXCOORD4SVPROC epoxy_glTexCoord4sv; + PFNGLTEXCOORD4XOESPROC epoxy_glTexCoord4xOES; + PFNGLTEXCOORD4XVOESPROC epoxy_glTexCoord4xvOES; + PFNGLTEXCOORDFORMATNVPROC epoxy_glTexCoordFormatNV; + PFNGLTEXCOORDP1UIPROC epoxy_glTexCoordP1ui; + PFNGLTEXCOORDP1UIVPROC epoxy_glTexCoordP1uiv; + PFNGLTEXCOORDP2UIPROC epoxy_glTexCoordP2ui; + PFNGLTEXCOORDP2UIVPROC epoxy_glTexCoordP2uiv; + PFNGLTEXCOORDP3UIPROC epoxy_glTexCoordP3ui; + PFNGLTEXCOORDP3UIVPROC epoxy_glTexCoordP3uiv; + PFNGLTEXCOORDP4UIPROC epoxy_glTexCoordP4ui; + PFNGLTEXCOORDP4UIVPROC epoxy_glTexCoordP4uiv; + PFNGLTEXCOORDPOINTERPROC epoxy_glTexCoordPointer; + PFNGLTEXCOORDPOINTEREXTPROC epoxy_glTexCoordPointerEXT; + PFNGLTEXCOORDPOINTERLISTIBMPROC epoxy_glTexCoordPointerListIBM; + PFNGLTEXCOORDPOINTERVINTELPROC epoxy_glTexCoordPointervINTEL; + PFNGLTEXENVFPROC epoxy_glTexEnvf; + PFNGLTEXENVFVPROC epoxy_glTexEnvfv; + PFNGLTEXENVIPROC epoxy_glTexEnvi; + PFNGLTEXENVIVPROC epoxy_glTexEnviv; + PFNGLTEXENVXPROC epoxy_glTexEnvx; + PFNGLTEXENVXOESPROC epoxy_glTexEnvxOES; + PFNGLTEXENVXVPROC epoxy_glTexEnvxv; + PFNGLTEXENVXVOESPROC epoxy_glTexEnvxvOES; + PFNGLTEXFILTERFUNCSGISPROC epoxy_glTexFilterFuncSGIS; + PFNGLTEXGENDPROC epoxy_glTexGend; + PFNGLTEXGENDVPROC epoxy_glTexGendv; + PFNGLTEXGENFPROC epoxy_glTexGenf; + PFNGLTEXGENFOESPROC epoxy_glTexGenfOES; + PFNGLTEXGENFVPROC epoxy_glTexGenfv; + PFNGLTEXGENFVOESPROC epoxy_glTexGenfvOES; + PFNGLTEXGENIPROC epoxy_glTexGeni; + PFNGLTEXGENIOESPROC epoxy_glTexGeniOES; + PFNGLTEXGENIVPROC epoxy_glTexGeniv; + PFNGLTEXGENIVOESPROC epoxy_glTexGenivOES; + PFNGLTEXGENXOESPROC epoxy_glTexGenxOES; + PFNGLTEXGENXVOESPROC epoxy_glTexGenxvOES; + PFNGLTEXIMAGE1DPROC epoxy_glTexImage1D; + PFNGLTEXIMAGE2DPROC epoxy_glTexImage2D; + PFNGLTEXIMAGE2DMULTISAMPLEPROC epoxy_glTexImage2DMultisample; + PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage2DMultisampleCoverageNV; + PFNGLTEXIMAGE3DPROC epoxy_glTexImage3D; + PFNGLTEXIMAGE3DEXTPROC epoxy_glTexImage3DEXT; + PFNGLTEXIMAGE3DMULTISAMPLEPROC epoxy_glTexImage3DMultisample; + PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage3DMultisampleCoverageNV; + PFNGLTEXIMAGE3DOESPROC epoxy_glTexImage3DOES; + PFNGLTEXIMAGE4DSGISPROC epoxy_glTexImage4DSGIS; + PFNGLTEXPAGECOMMITMENTARBPROC epoxy_glTexPageCommitmentARB; + PFNGLTEXPAGECOMMITMENTEXTPROC epoxy_glTexPageCommitmentEXT; + PFNGLTEXPARAMETERIIVPROC epoxy_glTexParameterIiv; + PFNGLTEXPARAMETERIIVEXTPROC epoxy_glTexParameterIivEXT; + PFNGLTEXPARAMETERIIVOESPROC epoxy_glTexParameterIivOES; + PFNGLTEXPARAMETERIUIVPROC epoxy_glTexParameterIuiv; + PFNGLTEXPARAMETERIUIVEXTPROC epoxy_glTexParameterIuivEXT; + PFNGLTEXPARAMETERIUIVOESPROC epoxy_glTexParameterIuivOES; + PFNGLTEXPARAMETERFPROC epoxy_glTexParameterf; + PFNGLTEXPARAMETERFVPROC epoxy_glTexParameterfv; + PFNGLTEXPARAMETERIPROC epoxy_glTexParameteri; + PFNGLTEXPARAMETERIVPROC epoxy_glTexParameteriv; + PFNGLTEXPARAMETERXPROC epoxy_glTexParameterx; + PFNGLTEXPARAMETERXOESPROC epoxy_glTexParameterxOES; + PFNGLTEXPARAMETERXVPROC epoxy_glTexParameterxv; + PFNGLTEXPARAMETERXVOESPROC epoxy_glTexParameterxvOES; + PFNGLTEXRENDERBUFFERNVPROC epoxy_glTexRenderbufferNV; + PFNGLTEXSTORAGE1DPROC epoxy_glTexStorage1D; + PFNGLTEXSTORAGE1DEXTPROC epoxy_glTexStorage1DEXT; + PFNGLTEXSTORAGE2DPROC epoxy_glTexStorage2D; + PFNGLTEXSTORAGE2DEXTPROC epoxy_glTexStorage2DEXT; + PFNGLTEXSTORAGE2DMULTISAMPLEPROC epoxy_glTexStorage2DMultisample; + PFNGLTEXSTORAGE3DPROC epoxy_glTexStorage3D; + PFNGLTEXSTORAGE3DEXTPROC epoxy_glTexStorage3DEXT; + PFNGLTEXSTORAGE3DMULTISAMPLEPROC epoxy_glTexStorage3DMultisample; + PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC epoxy_glTexStorage3DMultisampleOES; + PFNGLTEXSTORAGESPARSEAMDPROC epoxy_glTexStorageSparseAMD; + PFNGLTEXSUBIMAGE1DPROC epoxy_glTexSubImage1D; + PFNGLTEXSUBIMAGE1DEXTPROC epoxy_glTexSubImage1DEXT; + PFNGLTEXSUBIMAGE2DPROC epoxy_glTexSubImage2D; + PFNGLTEXSUBIMAGE2DEXTPROC epoxy_glTexSubImage2DEXT; + PFNGLTEXSUBIMAGE3DPROC epoxy_glTexSubImage3D; + PFNGLTEXSUBIMAGE3DEXTPROC epoxy_glTexSubImage3DEXT; + PFNGLTEXSUBIMAGE3DOESPROC epoxy_glTexSubImage3DOES; + PFNGLTEXSUBIMAGE4DSGISPROC epoxy_glTexSubImage4DSGIS; + PFNGLTEXTUREBARRIERPROC epoxy_glTextureBarrier; + PFNGLTEXTUREBARRIERNVPROC epoxy_glTextureBarrierNV; + PFNGLTEXTUREBUFFERPROC epoxy_glTextureBuffer; + PFNGLTEXTUREBUFFEREXTPROC epoxy_glTextureBufferEXT; + PFNGLTEXTUREBUFFERRANGEPROC epoxy_glTextureBufferRange; + PFNGLTEXTUREBUFFERRANGEEXTPROC epoxy_glTextureBufferRangeEXT; + PFNGLTEXTURECOLORMASKSGISPROC epoxy_glTextureColorMaskSGIS; + PFNGLTEXTUREIMAGE1DEXTPROC epoxy_glTextureImage1DEXT; + PFNGLTEXTUREIMAGE2DEXTPROC epoxy_glTextureImage2DEXT; + PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage2DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC epoxy_glTextureImage2DMultisampleNV; + PFNGLTEXTUREIMAGE3DEXTPROC epoxy_glTextureImage3DEXT; + PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage3DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC epoxy_glTextureImage3DMultisampleNV; + PFNGLTEXTURELIGHTEXTPROC epoxy_glTextureLightEXT; + PFNGLTEXTUREMATERIALEXTPROC epoxy_glTextureMaterialEXT; + PFNGLTEXTURENORMALEXTPROC epoxy_glTextureNormalEXT; + PFNGLTEXTUREPAGECOMMITMENTEXTPROC epoxy_glTexturePageCommitmentEXT; + PFNGLTEXTUREPARAMETERIIVPROC epoxy_glTextureParameterIiv; + PFNGLTEXTUREPARAMETERIIVEXTPROC epoxy_glTextureParameterIivEXT; + PFNGLTEXTUREPARAMETERIUIVPROC epoxy_glTextureParameterIuiv; + PFNGLTEXTUREPARAMETERIUIVEXTPROC epoxy_glTextureParameterIuivEXT; + PFNGLTEXTUREPARAMETERFPROC epoxy_glTextureParameterf; + PFNGLTEXTUREPARAMETERFEXTPROC epoxy_glTextureParameterfEXT; + PFNGLTEXTUREPARAMETERFVPROC epoxy_glTextureParameterfv; + PFNGLTEXTUREPARAMETERFVEXTPROC epoxy_glTextureParameterfvEXT; + PFNGLTEXTUREPARAMETERIPROC epoxy_glTextureParameteri; + PFNGLTEXTUREPARAMETERIEXTPROC epoxy_glTextureParameteriEXT; + PFNGLTEXTUREPARAMETERIVPROC epoxy_glTextureParameteriv; + PFNGLTEXTUREPARAMETERIVEXTPROC epoxy_glTextureParameterivEXT; + PFNGLTEXTURERANGEAPPLEPROC epoxy_glTextureRangeAPPLE; + PFNGLTEXTURERENDERBUFFEREXTPROC epoxy_glTextureRenderbufferEXT; + PFNGLTEXTURESTORAGE1DPROC epoxy_glTextureStorage1D; + PFNGLTEXTURESTORAGE1DEXTPROC epoxy_glTextureStorage1DEXT; + PFNGLTEXTURESTORAGE2DPROC epoxy_glTextureStorage2D; + PFNGLTEXTURESTORAGE2DEXTPROC epoxy_glTextureStorage2DEXT; + PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC epoxy_glTextureStorage2DMultisample; + PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC epoxy_glTextureStorage2DMultisampleEXT; + PFNGLTEXTURESTORAGE3DPROC epoxy_glTextureStorage3D; + PFNGLTEXTURESTORAGE3DEXTPROC epoxy_glTextureStorage3DEXT; + PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC epoxy_glTextureStorage3DMultisample; + PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC epoxy_glTextureStorage3DMultisampleEXT; + PFNGLTEXTURESTORAGESPARSEAMDPROC epoxy_glTextureStorageSparseAMD; + PFNGLTEXTURESUBIMAGE1DPROC epoxy_glTextureSubImage1D; + PFNGLTEXTURESUBIMAGE1DEXTPROC epoxy_glTextureSubImage1DEXT; + PFNGLTEXTURESUBIMAGE2DPROC epoxy_glTextureSubImage2D; + PFNGLTEXTURESUBIMAGE2DEXTPROC epoxy_glTextureSubImage2DEXT; + PFNGLTEXTURESUBIMAGE3DPROC epoxy_glTextureSubImage3D; + PFNGLTEXTURESUBIMAGE3DEXTPROC epoxy_glTextureSubImage3DEXT; + PFNGLTEXTUREVIEWPROC epoxy_glTextureView; + PFNGLTEXTUREVIEWEXTPROC epoxy_glTextureViewEXT; + PFNGLTEXTUREVIEWOESPROC epoxy_glTextureViewOES; + PFNGLTRACKMATRIXNVPROC epoxy_glTrackMatrixNV; + PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC epoxy_glTransformFeedbackAttribsNV; + PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC epoxy_glTransformFeedbackBufferBase; + PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC epoxy_glTransformFeedbackBufferRange; + PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC epoxy_glTransformFeedbackStreamAttribsNV; + PFNGLTRANSFORMFEEDBACKVARYINGSPROC epoxy_glTransformFeedbackVaryings; + PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC epoxy_glTransformFeedbackVaryingsEXT; + PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC epoxy_glTransformFeedbackVaryingsNV; + PFNGLTRANSFORMPATHNVPROC epoxy_glTransformPathNV; + PFNGLTRANSLATEDPROC epoxy_glTranslated; + PFNGLTRANSLATEFPROC epoxy_glTranslatef; + PFNGLTRANSLATEXPROC epoxy_glTranslatex; + PFNGLTRANSLATEXOESPROC epoxy_glTranslatexOES; + PFNGLUNIFORM1DPROC epoxy_glUniform1d; + PFNGLUNIFORM1DVPROC epoxy_glUniform1dv; + PFNGLUNIFORM1FPROC epoxy_glUniform1f; + PFNGLUNIFORM1FARBPROC epoxy_glUniform1fARB; + PFNGLUNIFORM1FVPROC epoxy_glUniform1fv; + PFNGLUNIFORM1FVARBPROC epoxy_glUniform1fvARB; + PFNGLUNIFORM1IPROC epoxy_glUniform1i; + PFNGLUNIFORM1I64ARBPROC epoxy_glUniform1i64ARB; + PFNGLUNIFORM1I64NVPROC epoxy_glUniform1i64NV; + PFNGLUNIFORM1I64VARBPROC epoxy_glUniform1i64vARB; + PFNGLUNIFORM1I64VNVPROC epoxy_glUniform1i64vNV; + PFNGLUNIFORM1IARBPROC epoxy_glUniform1iARB; + PFNGLUNIFORM1IVPROC epoxy_glUniform1iv; + PFNGLUNIFORM1IVARBPROC epoxy_glUniform1ivARB; + PFNGLUNIFORM1UIPROC epoxy_glUniform1ui; + PFNGLUNIFORM1UI64ARBPROC epoxy_glUniform1ui64ARB; + PFNGLUNIFORM1UI64NVPROC epoxy_glUniform1ui64NV; + PFNGLUNIFORM1UI64VARBPROC epoxy_glUniform1ui64vARB; + PFNGLUNIFORM1UI64VNVPROC epoxy_glUniform1ui64vNV; + PFNGLUNIFORM1UIEXTPROC epoxy_glUniform1uiEXT; + PFNGLUNIFORM1UIVPROC epoxy_glUniform1uiv; + PFNGLUNIFORM1UIVEXTPROC epoxy_glUniform1uivEXT; + PFNGLUNIFORM2DPROC epoxy_glUniform2d; + PFNGLUNIFORM2DVPROC epoxy_glUniform2dv; + PFNGLUNIFORM2FPROC epoxy_glUniform2f; + PFNGLUNIFORM2FARBPROC epoxy_glUniform2fARB; + PFNGLUNIFORM2FVPROC epoxy_glUniform2fv; + PFNGLUNIFORM2FVARBPROC epoxy_glUniform2fvARB; + PFNGLUNIFORM2IPROC epoxy_glUniform2i; + PFNGLUNIFORM2I64ARBPROC epoxy_glUniform2i64ARB; + PFNGLUNIFORM2I64NVPROC epoxy_glUniform2i64NV; + PFNGLUNIFORM2I64VARBPROC epoxy_glUniform2i64vARB; + PFNGLUNIFORM2I64VNVPROC epoxy_glUniform2i64vNV; + PFNGLUNIFORM2IARBPROC epoxy_glUniform2iARB; + PFNGLUNIFORM2IVPROC epoxy_glUniform2iv; + PFNGLUNIFORM2IVARBPROC epoxy_glUniform2ivARB; + PFNGLUNIFORM2UIPROC epoxy_glUniform2ui; + PFNGLUNIFORM2UI64ARBPROC epoxy_glUniform2ui64ARB; + PFNGLUNIFORM2UI64NVPROC epoxy_glUniform2ui64NV; + PFNGLUNIFORM2UI64VARBPROC epoxy_glUniform2ui64vARB; + PFNGLUNIFORM2UI64VNVPROC epoxy_glUniform2ui64vNV; + PFNGLUNIFORM2UIEXTPROC epoxy_glUniform2uiEXT; + PFNGLUNIFORM2UIVPROC epoxy_glUniform2uiv; + PFNGLUNIFORM2UIVEXTPROC epoxy_glUniform2uivEXT; + PFNGLUNIFORM3DPROC epoxy_glUniform3d; + PFNGLUNIFORM3DVPROC epoxy_glUniform3dv; + PFNGLUNIFORM3FPROC epoxy_glUniform3f; + PFNGLUNIFORM3FARBPROC epoxy_glUniform3fARB; + PFNGLUNIFORM3FVPROC epoxy_glUniform3fv; + PFNGLUNIFORM3FVARBPROC epoxy_glUniform3fvARB; + PFNGLUNIFORM3IPROC epoxy_glUniform3i; + PFNGLUNIFORM3I64ARBPROC epoxy_glUniform3i64ARB; + PFNGLUNIFORM3I64NVPROC epoxy_glUniform3i64NV; + PFNGLUNIFORM3I64VARBPROC epoxy_glUniform3i64vARB; + PFNGLUNIFORM3I64VNVPROC epoxy_glUniform3i64vNV; + PFNGLUNIFORM3IARBPROC epoxy_glUniform3iARB; + PFNGLUNIFORM3IVPROC epoxy_glUniform3iv; + PFNGLUNIFORM3IVARBPROC epoxy_glUniform3ivARB; + PFNGLUNIFORM3UIPROC epoxy_glUniform3ui; + PFNGLUNIFORM3UI64ARBPROC epoxy_glUniform3ui64ARB; + PFNGLUNIFORM3UI64NVPROC epoxy_glUniform3ui64NV; + PFNGLUNIFORM3UI64VARBPROC epoxy_glUniform3ui64vARB; + PFNGLUNIFORM3UI64VNVPROC epoxy_glUniform3ui64vNV; + PFNGLUNIFORM3UIEXTPROC epoxy_glUniform3uiEXT; + PFNGLUNIFORM3UIVPROC epoxy_glUniform3uiv; + PFNGLUNIFORM3UIVEXTPROC epoxy_glUniform3uivEXT; + PFNGLUNIFORM4DPROC epoxy_glUniform4d; + PFNGLUNIFORM4DVPROC epoxy_glUniform4dv; + PFNGLUNIFORM4FPROC epoxy_glUniform4f; + PFNGLUNIFORM4FARBPROC epoxy_glUniform4fARB; + PFNGLUNIFORM4FVPROC epoxy_glUniform4fv; + PFNGLUNIFORM4FVARBPROC epoxy_glUniform4fvARB; + PFNGLUNIFORM4IPROC epoxy_glUniform4i; + PFNGLUNIFORM4I64ARBPROC epoxy_glUniform4i64ARB; + PFNGLUNIFORM4I64NVPROC epoxy_glUniform4i64NV; + PFNGLUNIFORM4I64VARBPROC epoxy_glUniform4i64vARB; + PFNGLUNIFORM4I64VNVPROC epoxy_glUniform4i64vNV; + PFNGLUNIFORM4IARBPROC epoxy_glUniform4iARB; + PFNGLUNIFORM4IVPROC epoxy_glUniform4iv; + PFNGLUNIFORM4IVARBPROC epoxy_glUniform4ivARB; + PFNGLUNIFORM4UIPROC epoxy_glUniform4ui; + PFNGLUNIFORM4UI64ARBPROC epoxy_glUniform4ui64ARB; + PFNGLUNIFORM4UI64NVPROC epoxy_glUniform4ui64NV; + PFNGLUNIFORM4UI64VARBPROC epoxy_glUniform4ui64vARB; + PFNGLUNIFORM4UI64VNVPROC epoxy_glUniform4ui64vNV; + PFNGLUNIFORM4UIEXTPROC epoxy_glUniform4uiEXT; + PFNGLUNIFORM4UIVPROC epoxy_glUniform4uiv; + PFNGLUNIFORM4UIVEXTPROC epoxy_glUniform4uivEXT; + PFNGLUNIFORMBLOCKBINDINGPROC epoxy_glUniformBlockBinding; + PFNGLUNIFORMBUFFEREXTPROC epoxy_glUniformBufferEXT; + PFNGLUNIFORMHANDLEUI64ARBPROC epoxy_glUniformHandleui64ARB; + PFNGLUNIFORMHANDLEUI64NVPROC epoxy_glUniformHandleui64NV; + PFNGLUNIFORMHANDLEUI64VARBPROC epoxy_glUniformHandleui64vARB; + PFNGLUNIFORMHANDLEUI64VNVPROC epoxy_glUniformHandleui64vNV; + PFNGLUNIFORMMATRIX2DVPROC epoxy_glUniformMatrix2dv; + PFNGLUNIFORMMATRIX2FVPROC epoxy_glUniformMatrix2fv; + PFNGLUNIFORMMATRIX2FVARBPROC epoxy_glUniformMatrix2fvARB; + PFNGLUNIFORMMATRIX2X3DVPROC epoxy_glUniformMatrix2x3dv; + PFNGLUNIFORMMATRIX2X3FVPROC epoxy_glUniformMatrix2x3fv; + PFNGLUNIFORMMATRIX2X3FVNVPROC epoxy_glUniformMatrix2x3fvNV; + PFNGLUNIFORMMATRIX2X4DVPROC epoxy_glUniformMatrix2x4dv; + PFNGLUNIFORMMATRIX2X4FVPROC epoxy_glUniformMatrix2x4fv; + PFNGLUNIFORMMATRIX2X4FVNVPROC epoxy_glUniformMatrix2x4fvNV; + PFNGLUNIFORMMATRIX3DVPROC epoxy_glUniformMatrix3dv; + PFNGLUNIFORMMATRIX3FVPROC epoxy_glUniformMatrix3fv; + PFNGLUNIFORMMATRIX3FVARBPROC epoxy_glUniformMatrix3fvARB; + PFNGLUNIFORMMATRIX3X2DVPROC epoxy_glUniformMatrix3x2dv; + PFNGLUNIFORMMATRIX3X2FVPROC epoxy_glUniformMatrix3x2fv; + PFNGLUNIFORMMATRIX3X2FVNVPROC epoxy_glUniformMatrix3x2fvNV; + PFNGLUNIFORMMATRIX3X4DVPROC epoxy_glUniformMatrix3x4dv; + PFNGLUNIFORMMATRIX3X4FVPROC epoxy_glUniformMatrix3x4fv; + PFNGLUNIFORMMATRIX3X4FVNVPROC epoxy_glUniformMatrix3x4fvNV; + PFNGLUNIFORMMATRIX4DVPROC epoxy_glUniformMatrix4dv; + PFNGLUNIFORMMATRIX4FVPROC epoxy_glUniformMatrix4fv; + PFNGLUNIFORMMATRIX4FVARBPROC epoxy_glUniformMatrix4fvARB; + PFNGLUNIFORMMATRIX4X2DVPROC epoxy_glUniformMatrix4x2dv; + PFNGLUNIFORMMATRIX4X2FVPROC epoxy_glUniformMatrix4x2fv; + PFNGLUNIFORMMATRIX4X2FVNVPROC epoxy_glUniformMatrix4x2fvNV; + PFNGLUNIFORMMATRIX4X3DVPROC epoxy_glUniformMatrix4x3dv; + PFNGLUNIFORMMATRIX4X3FVPROC epoxy_glUniformMatrix4x3fv; + PFNGLUNIFORMMATRIX4X3FVNVPROC epoxy_glUniformMatrix4x3fvNV; + PFNGLUNIFORMSUBROUTINESUIVPROC epoxy_glUniformSubroutinesuiv; + PFNGLUNIFORMUI64NVPROC epoxy_glUniformui64NV; + PFNGLUNIFORMUI64VNVPROC epoxy_glUniformui64vNV; + PFNGLUNLOCKARRAYSEXTPROC epoxy_glUnlockArraysEXT; + PFNGLUNMAPBUFFERPROC epoxy_glUnmapBuffer; + PFNGLUNMAPBUFFERARBPROC epoxy_glUnmapBufferARB; + PFNGLUNMAPBUFFEROESPROC epoxy_glUnmapBufferOES; + PFNGLUNMAPNAMEDBUFFERPROC epoxy_glUnmapNamedBuffer; + PFNGLUNMAPNAMEDBUFFEREXTPROC epoxy_glUnmapNamedBufferEXT; + PFNGLUNMAPOBJECTBUFFERATIPROC epoxy_glUnmapObjectBufferATI; + PFNGLUNMAPTEXTURE2DINTELPROC epoxy_glUnmapTexture2DINTEL; + PFNGLUPDATEOBJECTBUFFERATIPROC epoxy_glUpdateObjectBufferATI; + PFNGLUSEPROGRAMPROC epoxy_glUseProgram; + PFNGLUSEPROGRAMOBJECTARBPROC epoxy_glUseProgramObjectARB; + PFNGLUSEPROGRAMSTAGESPROC epoxy_glUseProgramStages; + PFNGLUSEPROGRAMSTAGESEXTPROC epoxy_glUseProgramStagesEXT; + PFNGLUSESHADERPROGRAMEXTPROC epoxy_glUseShaderProgramEXT; + PFNGLVDPAUFININVPROC epoxy_glVDPAUFiniNV; + PFNGLVDPAUGETSURFACEIVNVPROC epoxy_glVDPAUGetSurfaceivNV; + PFNGLVDPAUINITNVPROC epoxy_glVDPAUInitNV; + PFNGLVDPAUISSURFACENVPROC epoxy_glVDPAUIsSurfaceNV; + PFNGLVDPAUMAPSURFACESNVPROC epoxy_glVDPAUMapSurfacesNV; + PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC epoxy_glVDPAURegisterOutputSurfaceNV; + PFNGLVDPAUREGISTERVIDEOSURFACENVPROC epoxy_glVDPAURegisterVideoSurfaceNV; + PFNGLVDPAUSURFACEACCESSNVPROC epoxy_glVDPAUSurfaceAccessNV; + PFNGLVDPAUUNMAPSURFACESNVPROC epoxy_glVDPAUUnmapSurfacesNV; + PFNGLVDPAUUNREGISTERSURFACENVPROC epoxy_glVDPAUUnregisterSurfaceNV; + PFNGLVALIDATEPROGRAMPROC epoxy_glValidateProgram; + PFNGLVALIDATEPROGRAMARBPROC epoxy_glValidateProgramARB; + PFNGLVALIDATEPROGRAMPIPELINEPROC epoxy_glValidateProgramPipeline; + PFNGLVALIDATEPROGRAMPIPELINEEXTPROC epoxy_glValidateProgramPipelineEXT; + PFNGLVARIANTARRAYOBJECTATIPROC epoxy_glVariantArrayObjectATI; + PFNGLVARIANTPOINTEREXTPROC epoxy_glVariantPointerEXT; + PFNGLVARIANTBVEXTPROC epoxy_glVariantbvEXT; + PFNGLVARIANTDVEXTPROC epoxy_glVariantdvEXT; + PFNGLVARIANTFVEXTPROC epoxy_glVariantfvEXT; + PFNGLVARIANTIVEXTPROC epoxy_glVariantivEXT; + PFNGLVARIANTSVEXTPROC epoxy_glVariantsvEXT; + PFNGLVARIANTUBVEXTPROC epoxy_glVariantubvEXT; + PFNGLVARIANTUIVEXTPROC epoxy_glVariantuivEXT; + PFNGLVARIANTUSVEXTPROC epoxy_glVariantusvEXT; + PFNGLVERTEX2BOESPROC epoxy_glVertex2bOES; + PFNGLVERTEX2BVOESPROC epoxy_glVertex2bvOES; + PFNGLVERTEX2DPROC epoxy_glVertex2d; + PFNGLVERTEX2DVPROC epoxy_glVertex2dv; + PFNGLVERTEX2FPROC epoxy_glVertex2f; + PFNGLVERTEX2FVPROC epoxy_glVertex2fv; + PFNGLVERTEX2HNVPROC epoxy_glVertex2hNV; + PFNGLVERTEX2HVNVPROC epoxy_glVertex2hvNV; + PFNGLVERTEX2IPROC epoxy_glVertex2i; + PFNGLVERTEX2IVPROC epoxy_glVertex2iv; + PFNGLVERTEX2SPROC epoxy_glVertex2s; + PFNGLVERTEX2SVPROC epoxy_glVertex2sv; + PFNGLVERTEX2XOESPROC epoxy_glVertex2xOES; + PFNGLVERTEX2XVOESPROC epoxy_glVertex2xvOES; + PFNGLVERTEX3BOESPROC epoxy_glVertex3bOES; + PFNGLVERTEX3BVOESPROC epoxy_glVertex3bvOES; + PFNGLVERTEX3DPROC epoxy_glVertex3d; + PFNGLVERTEX3DVPROC epoxy_glVertex3dv; + PFNGLVERTEX3FPROC epoxy_glVertex3f; + PFNGLVERTEX3FVPROC epoxy_glVertex3fv; + PFNGLVERTEX3HNVPROC epoxy_glVertex3hNV; + PFNGLVERTEX3HVNVPROC epoxy_glVertex3hvNV; + PFNGLVERTEX3IPROC epoxy_glVertex3i; + PFNGLVERTEX3IVPROC epoxy_glVertex3iv; + PFNGLVERTEX3SPROC epoxy_glVertex3s; + PFNGLVERTEX3SVPROC epoxy_glVertex3sv; + PFNGLVERTEX3XOESPROC epoxy_glVertex3xOES; + PFNGLVERTEX3XVOESPROC epoxy_glVertex3xvOES; + PFNGLVERTEX4BOESPROC epoxy_glVertex4bOES; + PFNGLVERTEX4BVOESPROC epoxy_glVertex4bvOES; + PFNGLVERTEX4DPROC epoxy_glVertex4d; + PFNGLVERTEX4DVPROC epoxy_glVertex4dv; + PFNGLVERTEX4FPROC epoxy_glVertex4f; + PFNGLVERTEX4FVPROC epoxy_glVertex4fv; + PFNGLVERTEX4HNVPROC epoxy_glVertex4hNV; + PFNGLVERTEX4HVNVPROC epoxy_glVertex4hvNV; + PFNGLVERTEX4IPROC epoxy_glVertex4i; + PFNGLVERTEX4IVPROC epoxy_glVertex4iv; + PFNGLVERTEX4SPROC epoxy_glVertex4s; + PFNGLVERTEX4SVPROC epoxy_glVertex4sv; + PFNGLVERTEX4XOESPROC epoxy_glVertex4xOES; + PFNGLVERTEX4XVOESPROC epoxy_glVertex4xvOES; + PFNGLVERTEXARRAYATTRIBBINDINGPROC epoxy_glVertexArrayAttribBinding; + PFNGLVERTEXARRAYATTRIBFORMATPROC epoxy_glVertexArrayAttribFormat; + PFNGLVERTEXARRAYATTRIBIFORMATPROC epoxy_glVertexArrayAttribIFormat; + PFNGLVERTEXARRAYATTRIBLFORMATPROC epoxy_glVertexArrayAttribLFormat; + PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC epoxy_glVertexArrayBindVertexBufferEXT; + PFNGLVERTEXARRAYBINDINGDIVISORPROC epoxy_glVertexArrayBindingDivisor; + PFNGLVERTEXARRAYCOLOROFFSETEXTPROC epoxy_glVertexArrayColorOffsetEXT; + PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC epoxy_glVertexArrayEdgeFlagOffsetEXT; + PFNGLVERTEXARRAYELEMENTBUFFERPROC epoxy_glVertexArrayElementBuffer; + PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC epoxy_glVertexArrayFogCoordOffsetEXT; + PFNGLVERTEXARRAYINDEXOFFSETEXTPROC epoxy_glVertexArrayIndexOffsetEXT; + PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC epoxy_glVertexArrayMultiTexCoordOffsetEXT; + PFNGLVERTEXARRAYNORMALOFFSETEXTPROC epoxy_glVertexArrayNormalOffsetEXT; + PFNGLVERTEXARRAYPARAMETERIAPPLEPROC epoxy_glVertexArrayParameteriAPPLE; + PFNGLVERTEXARRAYRANGEAPPLEPROC epoxy_glVertexArrayRangeAPPLE; + PFNGLVERTEXARRAYRANGENVPROC epoxy_glVertexArrayRangeNV; + PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC epoxy_glVertexArraySecondaryColorOffsetEXT; + PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC epoxy_glVertexArrayTexCoordOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC epoxy_glVertexArrayVertexAttribBindingEXT; + PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexArrayVertexAttribDivisorEXT; + PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC epoxy_glVertexArrayVertexAttribFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC epoxy_glVertexArrayVertexAttribIFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC epoxy_glVertexArrayVertexAttribIOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC epoxy_glVertexArrayVertexAttribLFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC epoxy_glVertexArrayVertexAttribLOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC epoxy_glVertexArrayVertexAttribOffsetEXT; + PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC epoxy_glVertexArrayVertexBindingDivisorEXT; + PFNGLVERTEXARRAYVERTEXBUFFERPROC epoxy_glVertexArrayVertexBuffer; + PFNGLVERTEXARRAYVERTEXBUFFERSPROC epoxy_glVertexArrayVertexBuffers; + PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC epoxy_glVertexArrayVertexOffsetEXT; + PFNGLVERTEXATTRIB1DPROC epoxy_glVertexAttrib1d; + PFNGLVERTEXATTRIB1DARBPROC epoxy_glVertexAttrib1dARB; + PFNGLVERTEXATTRIB1DNVPROC epoxy_glVertexAttrib1dNV; + PFNGLVERTEXATTRIB1DVPROC epoxy_glVertexAttrib1dv; + PFNGLVERTEXATTRIB1DVARBPROC epoxy_glVertexAttrib1dvARB; + PFNGLVERTEXATTRIB1DVNVPROC epoxy_glVertexAttrib1dvNV; + PFNGLVERTEXATTRIB1FPROC epoxy_glVertexAttrib1f; + PFNGLVERTEXATTRIB1FARBPROC epoxy_glVertexAttrib1fARB; + PFNGLVERTEXATTRIB1FNVPROC epoxy_glVertexAttrib1fNV; + PFNGLVERTEXATTRIB1FVPROC epoxy_glVertexAttrib1fv; + PFNGLVERTEXATTRIB1FVARBPROC epoxy_glVertexAttrib1fvARB; + PFNGLVERTEXATTRIB1FVNVPROC epoxy_glVertexAttrib1fvNV; + PFNGLVERTEXATTRIB1HNVPROC epoxy_glVertexAttrib1hNV; + PFNGLVERTEXATTRIB1HVNVPROC epoxy_glVertexAttrib1hvNV; + PFNGLVERTEXATTRIB1SPROC epoxy_glVertexAttrib1s; + PFNGLVERTEXATTRIB1SARBPROC epoxy_glVertexAttrib1sARB; + PFNGLVERTEXATTRIB1SNVPROC epoxy_glVertexAttrib1sNV; + PFNGLVERTEXATTRIB1SVPROC epoxy_glVertexAttrib1sv; + PFNGLVERTEXATTRIB1SVARBPROC epoxy_glVertexAttrib1svARB; + PFNGLVERTEXATTRIB1SVNVPROC epoxy_glVertexAttrib1svNV; + PFNGLVERTEXATTRIB2DPROC epoxy_glVertexAttrib2d; + PFNGLVERTEXATTRIB2DARBPROC epoxy_glVertexAttrib2dARB; + PFNGLVERTEXATTRIB2DNVPROC epoxy_glVertexAttrib2dNV; + PFNGLVERTEXATTRIB2DVPROC epoxy_glVertexAttrib2dv; + PFNGLVERTEXATTRIB2DVARBPROC epoxy_glVertexAttrib2dvARB; + PFNGLVERTEXATTRIB2DVNVPROC epoxy_glVertexAttrib2dvNV; + PFNGLVERTEXATTRIB2FPROC epoxy_glVertexAttrib2f; + PFNGLVERTEXATTRIB2FARBPROC epoxy_glVertexAttrib2fARB; + PFNGLVERTEXATTRIB2FNVPROC epoxy_glVertexAttrib2fNV; + PFNGLVERTEXATTRIB2FVPROC epoxy_glVertexAttrib2fv; + PFNGLVERTEXATTRIB2FVARBPROC epoxy_glVertexAttrib2fvARB; + PFNGLVERTEXATTRIB2FVNVPROC epoxy_glVertexAttrib2fvNV; + PFNGLVERTEXATTRIB2HNVPROC epoxy_glVertexAttrib2hNV; + PFNGLVERTEXATTRIB2HVNVPROC epoxy_glVertexAttrib2hvNV; + PFNGLVERTEXATTRIB2SPROC epoxy_glVertexAttrib2s; + PFNGLVERTEXATTRIB2SARBPROC epoxy_glVertexAttrib2sARB; + PFNGLVERTEXATTRIB2SNVPROC epoxy_glVertexAttrib2sNV; + PFNGLVERTEXATTRIB2SVPROC epoxy_glVertexAttrib2sv; + PFNGLVERTEXATTRIB2SVARBPROC epoxy_glVertexAttrib2svARB; + PFNGLVERTEXATTRIB2SVNVPROC epoxy_glVertexAttrib2svNV; + PFNGLVERTEXATTRIB3DPROC epoxy_glVertexAttrib3d; + PFNGLVERTEXATTRIB3DARBPROC epoxy_glVertexAttrib3dARB; + PFNGLVERTEXATTRIB3DNVPROC epoxy_glVertexAttrib3dNV; + PFNGLVERTEXATTRIB3DVPROC epoxy_glVertexAttrib3dv; + PFNGLVERTEXATTRIB3DVARBPROC epoxy_glVertexAttrib3dvARB; + PFNGLVERTEXATTRIB3DVNVPROC epoxy_glVertexAttrib3dvNV; + PFNGLVERTEXATTRIB3FPROC epoxy_glVertexAttrib3f; + PFNGLVERTEXATTRIB3FARBPROC epoxy_glVertexAttrib3fARB; + PFNGLVERTEXATTRIB3FNVPROC epoxy_glVertexAttrib3fNV; + PFNGLVERTEXATTRIB3FVPROC epoxy_glVertexAttrib3fv; + PFNGLVERTEXATTRIB3FVARBPROC epoxy_glVertexAttrib3fvARB; + PFNGLVERTEXATTRIB3FVNVPROC epoxy_glVertexAttrib3fvNV; + PFNGLVERTEXATTRIB3HNVPROC epoxy_glVertexAttrib3hNV; + PFNGLVERTEXATTRIB3HVNVPROC epoxy_glVertexAttrib3hvNV; + PFNGLVERTEXATTRIB3SPROC epoxy_glVertexAttrib3s; + PFNGLVERTEXATTRIB3SARBPROC epoxy_glVertexAttrib3sARB; + PFNGLVERTEXATTRIB3SNVPROC epoxy_glVertexAttrib3sNV; + PFNGLVERTEXATTRIB3SVPROC epoxy_glVertexAttrib3sv; + PFNGLVERTEXATTRIB3SVARBPROC epoxy_glVertexAttrib3svARB; + PFNGLVERTEXATTRIB3SVNVPROC epoxy_glVertexAttrib3svNV; + PFNGLVERTEXATTRIB4NBVPROC epoxy_glVertexAttrib4Nbv; + PFNGLVERTEXATTRIB4NBVARBPROC epoxy_glVertexAttrib4NbvARB; + PFNGLVERTEXATTRIB4NIVPROC epoxy_glVertexAttrib4Niv; + PFNGLVERTEXATTRIB4NIVARBPROC epoxy_glVertexAttrib4NivARB; + PFNGLVERTEXATTRIB4NSVPROC epoxy_glVertexAttrib4Nsv; + PFNGLVERTEXATTRIB4NSVARBPROC epoxy_glVertexAttrib4NsvARB; + PFNGLVERTEXATTRIB4NUBPROC epoxy_glVertexAttrib4Nub; + PFNGLVERTEXATTRIB4NUBARBPROC epoxy_glVertexAttrib4NubARB; + PFNGLVERTEXATTRIB4NUBVPROC epoxy_glVertexAttrib4Nubv; + PFNGLVERTEXATTRIB4NUBVARBPROC epoxy_glVertexAttrib4NubvARB; + PFNGLVERTEXATTRIB4NUIVPROC epoxy_glVertexAttrib4Nuiv; + PFNGLVERTEXATTRIB4NUIVARBPROC epoxy_glVertexAttrib4NuivARB; + PFNGLVERTEXATTRIB4NUSVPROC epoxy_glVertexAttrib4Nusv; + PFNGLVERTEXATTRIB4NUSVARBPROC epoxy_glVertexAttrib4NusvARB; + PFNGLVERTEXATTRIB4BVPROC epoxy_glVertexAttrib4bv; + PFNGLVERTEXATTRIB4BVARBPROC epoxy_glVertexAttrib4bvARB; + PFNGLVERTEXATTRIB4DPROC epoxy_glVertexAttrib4d; + PFNGLVERTEXATTRIB4DARBPROC epoxy_glVertexAttrib4dARB; + PFNGLVERTEXATTRIB4DNVPROC epoxy_glVertexAttrib4dNV; + PFNGLVERTEXATTRIB4DVPROC epoxy_glVertexAttrib4dv; + PFNGLVERTEXATTRIB4DVARBPROC epoxy_glVertexAttrib4dvARB; + PFNGLVERTEXATTRIB4DVNVPROC epoxy_glVertexAttrib4dvNV; + PFNGLVERTEXATTRIB4FPROC epoxy_glVertexAttrib4f; + PFNGLVERTEXATTRIB4FARBPROC epoxy_glVertexAttrib4fARB; + PFNGLVERTEXATTRIB4FNVPROC epoxy_glVertexAttrib4fNV; + PFNGLVERTEXATTRIB4FVPROC epoxy_glVertexAttrib4fv; + PFNGLVERTEXATTRIB4FVARBPROC epoxy_glVertexAttrib4fvARB; + PFNGLVERTEXATTRIB4FVNVPROC epoxy_glVertexAttrib4fvNV; + PFNGLVERTEXATTRIB4HNVPROC epoxy_glVertexAttrib4hNV; + PFNGLVERTEXATTRIB4HVNVPROC epoxy_glVertexAttrib4hvNV; + PFNGLVERTEXATTRIB4IVPROC epoxy_glVertexAttrib4iv; + PFNGLVERTEXATTRIB4IVARBPROC epoxy_glVertexAttrib4ivARB; + PFNGLVERTEXATTRIB4SPROC epoxy_glVertexAttrib4s; + PFNGLVERTEXATTRIB4SARBPROC epoxy_glVertexAttrib4sARB; + PFNGLVERTEXATTRIB4SNVPROC epoxy_glVertexAttrib4sNV; + PFNGLVERTEXATTRIB4SVPROC epoxy_glVertexAttrib4sv; + PFNGLVERTEXATTRIB4SVARBPROC epoxy_glVertexAttrib4svARB; + PFNGLVERTEXATTRIB4SVNVPROC epoxy_glVertexAttrib4svNV; + PFNGLVERTEXATTRIB4UBNVPROC epoxy_glVertexAttrib4ubNV; + PFNGLVERTEXATTRIB4UBVPROC epoxy_glVertexAttrib4ubv; + PFNGLVERTEXATTRIB4UBVARBPROC epoxy_glVertexAttrib4ubvARB; + PFNGLVERTEXATTRIB4UBVNVPROC epoxy_glVertexAttrib4ubvNV; + PFNGLVERTEXATTRIB4UIVPROC epoxy_glVertexAttrib4uiv; + PFNGLVERTEXATTRIB4UIVARBPROC epoxy_glVertexAttrib4uivARB; + PFNGLVERTEXATTRIB4USVPROC epoxy_glVertexAttrib4usv; + PFNGLVERTEXATTRIB4USVARBPROC epoxy_glVertexAttrib4usvARB; + PFNGLVERTEXATTRIBARRAYOBJECTATIPROC epoxy_glVertexAttribArrayObjectATI; + PFNGLVERTEXATTRIBBINDINGPROC epoxy_glVertexAttribBinding; + PFNGLVERTEXATTRIBDIVISORPROC epoxy_glVertexAttribDivisor; + PFNGLVERTEXATTRIBDIVISORANGLEPROC epoxy_glVertexAttribDivisorANGLE; + PFNGLVERTEXATTRIBDIVISORARBPROC epoxy_glVertexAttribDivisorARB; + PFNGLVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexAttribDivisorEXT; + PFNGLVERTEXATTRIBDIVISORNVPROC epoxy_glVertexAttribDivisorNV; + PFNGLVERTEXATTRIBFORMATPROC epoxy_glVertexAttribFormat; + PFNGLVERTEXATTRIBFORMATNVPROC epoxy_glVertexAttribFormatNV; + PFNGLVERTEXATTRIBI1IPROC epoxy_glVertexAttribI1i; + PFNGLVERTEXATTRIBI1IEXTPROC epoxy_glVertexAttribI1iEXT; + PFNGLVERTEXATTRIBI1IVPROC epoxy_glVertexAttribI1iv; + PFNGLVERTEXATTRIBI1IVEXTPROC epoxy_glVertexAttribI1ivEXT; + PFNGLVERTEXATTRIBI1UIPROC epoxy_glVertexAttribI1ui; + PFNGLVERTEXATTRIBI1UIEXTPROC epoxy_glVertexAttribI1uiEXT; + PFNGLVERTEXATTRIBI1UIVPROC epoxy_glVertexAttribI1uiv; + PFNGLVERTEXATTRIBI1UIVEXTPROC epoxy_glVertexAttribI1uivEXT; + PFNGLVERTEXATTRIBI2IPROC epoxy_glVertexAttribI2i; + PFNGLVERTEXATTRIBI2IEXTPROC epoxy_glVertexAttribI2iEXT; + PFNGLVERTEXATTRIBI2IVPROC epoxy_glVertexAttribI2iv; + PFNGLVERTEXATTRIBI2IVEXTPROC epoxy_glVertexAttribI2ivEXT; + PFNGLVERTEXATTRIBI2UIPROC epoxy_glVertexAttribI2ui; + PFNGLVERTEXATTRIBI2UIEXTPROC epoxy_glVertexAttribI2uiEXT; + PFNGLVERTEXATTRIBI2UIVPROC epoxy_glVertexAttribI2uiv; + PFNGLVERTEXATTRIBI2UIVEXTPROC epoxy_glVertexAttribI2uivEXT; + PFNGLVERTEXATTRIBI3IPROC epoxy_glVertexAttribI3i; + PFNGLVERTEXATTRIBI3IEXTPROC epoxy_glVertexAttribI3iEXT; + PFNGLVERTEXATTRIBI3IVPROC epoxy_glVertexAttribI3iv; + PFNGLVERTEXATTRIBI3IVEXTPROC epoxy_glVertexAttribI3ivEXT; + PFNGLVERTEXATTRIBI3UIPROC epoxy_glVertexAttribI3ui; + PFNGLVERTEXATTRIBI3UIEXTPROC epoxy_glVertexAttribI3uiEXT; + PFNGLVERTEXATTRIBI3UIVPROC epoxy_glVertexAttribI3uiv; + PFNGLVERTEXATTRIBI3UIVEXTPROC epoxy_glVertexAttribI3uivEXT; + PFNGLVERTEXATTRIBI4BVPROC epoxy_glVertexAttribI4bv; + PFNGLVERTEXATTRIBI4BVEXTPROC epoxy_glVertexAttribI4bvEXT; + PFNGLVERTEXATTRIBI4IPROC epoxy_glVertexAttribI4i; + PFNGLVERTEXATTRIBI4IEXTPROC epoxy_glVertexAttribI4iEXT; + PFNGLVERTEXATTRIBI4IVPROC epoxy_glVertexAttribI4iv; + PFNGLVERTEXATTRIBI4IVEXTPROC epoxy_glVertexAttribI4ivEXT; + PFNGLVERTEXATTRIBI4SVPROC epoxy_glVertexAttribI4sv; + PFNGLVERTEXATTRIBI4SVEXTPROC epoxy_glVertexAttribI4svEXT; + PFNGLVERTEXATTRIBI4UBVPROC epoxy_glVertexAttribI4ubv; + PFNGLVERTEXATTRIBI4UBVEXTPROC epoxy_glVertexAttribI4ubvEXT; + PFNGLVERTEXATTRIBI4UIPROC epoxy_glVertexAttribI4ui; + PFNGLVERTEXATTRIBI4UIEXTPROC epoxy_glVertexAttribI4uiEXT; + PFNGLVERTEXATTRIBI4UIVPROC epoxy_glVertexAttribI4uiv; + PFNGLVERTEXATTRIBI4UIVEXTPROC epoxy_glVertexAttribI4uivEXT; + PFNGLVERTEXATTRIBI4USVPROC epoxy_glVertexAttribI4usv; + PFNGLVERTEXATTRIBI4USVEXTPROC epoxy_glVertexAttribI4usvEXT; + PFNGLVERTEXATTRIBIFORMATPROC epoxy_glVertexAttribIFormat; + PFNGLVERTEXATTRIBIFORMATNVPROC epoxy_glVertexAttribIFormatNV; + PFNGLVERTEXATTRIBIPOINTERPROC epoxy_glVertexAttribIPointer; + PFNGLVERTEXATTRIBIPOINTEREXTPROC epoxy_glVertexAttribIPointerEXT; + PFNGLVERTEXATTRIBL1DPROC epoxy_glVertexAttribL1d; + PFNGLVERTEXATTRIBL1DEXTPROC epoxy_glVertexAttribL1dEXT; + PFNGLVERTEXATTRIBL1DVPROC epoxy_glVertexAttribL1dv; + PFNGLVERTEXATTRIBL1DVEXTPROC epoxy_glVertexAttribL1dvEXT; + PFNGLVERTEXATTRIBL1I64NVPROC epoxy_glVertexAttribL1i64NV; + PFNGLVERTEXATTRIBL1I64VNVPROC epoxy_glVertexAttribL1i64vNV; + PFNGLVERTEXATTRIBL1UI64ARBPROC epoxy_glVertexAttribL1ui64ARB; + PFNGLVERTEXATTRIBL1UI64NVPROC epoxy_glVertexAttribL1ui64NV; + PFNGLVERTEXATTRIBL1UI64VARBPROC epoxy_glVertexAttribL1ui64vARB; + PFNGLVERTEXATTRIBL1UI64VNVPROC epoxy_glVertexAttribL1ui64vNV; + PFNGLVERTEXATTRIBL2DPROC epoxy_glVertexAttribL2d; + PFNGLVERTEXATTRIBL2DEXTPROC epoxy_glVertexAttribL2dEXT; + PFNGLVERTEXATTRIBL2DVPROC epoxy_glVertexAttribL2dv; + PFNGLVERTEXATTRIBL2DVEXTPROC epoxy_glVertexAttribL2dvEXT; + PFNGLVERTEXATTRIBL2I64NVPROC epoxy_glVertexAttribL2i64NV; + PFNGLVERTEXATTRIBL2I64VNVPROC epoxy_glVertexAttribL2i64vNV; + PFNGLVERTEXATTRIBL2UI64NVPROC epoxy_glVertexAttribL2ui64NV; + PFNGLVERTEXATTRIBL2UI64VNVPROC epoxy_glVertexAttribL2ui64vNV; + PFNGLVERTEXATTRIBL3DPROC epoxy_glVertexAttribL3d; + PFNGLVERTEXATTRIBL3DEXTPROC epoxy_glVertexAttribL3dEXT; + PFNGLVERTEXATTRIBL3DVPROC epoxy_glVertexAttribL3dv; + PFNGLVERTEXATTRIBL3DVEXTPROC epoxy_glVertexAttribL3dvEXT; + PFNGLVERTEXATTRIBL3I64NVPROC epoxy_glVertexAttribL3i64NV; + PFNGLVERTEXATTRIBL3I64VNVPROC epoxy_glVertexAttribL3i64vNV; + PFNGLVERTEXATTRIBL3UI64NVPROC epoxy_glVertexAttribL3ui64NV; + PFNGLVERTEXATTRIBL3UI64VNVPROC epoxy_glVertexAttribL3ui64vNV; + PFNGLVERTEXATTRIBL4DPROC epoxy_glVertexAttribL4d; + PFNGLVERTEXATTRIBL4DEXTPROC epoxy_glVertexAttribL4dEXT; + PFNGLVERTEXATTRIBL4DVPROC epoxy_glVertexAttribL4dv; + PFNGLVERTEXATTRIBL4DVEXTPROC epoxy_glVertexAttribL4dvEXT; + PFNGLVERTEXATTRIBL4I64NVPROC epoxy_glVertexAttribL4i64NV; + PFNGLVERTEXATTRIBL4I64VNVPROC epoxy_glVertexAttribL4i64vNV; + PFNGLVERTEXATTRIBL4UI64NVPROC epoxy_glVertexAttribL4ui64NV; + PFNGLVERTEXATTRIBL4UI64VNVPROC epoxy_glVertexAttribL4ui64vNV; + PFNGLVERTEXATTRIBLFORMATPROC epoxy_glVertexAttribLFormat; + PFNGLVERTEXATTRIBLFORMATNVPROC epoxy_glVertexAttribLFormatNV; + PFNGLVERTEXATTRIBLPOINTERPROC epoxy_glVertexAttribLPointer; + PFNGLVERTEXATTRIBLPOINTEREXTPROC epoxy_glVertexAttribLPointerEXT; + PFNGLVERTEXATTRIBP1UIPROC epoxy_glVertexAttribP1ui; + PFNGLVERTEXATTRIBP1UIVPROC epoxy_glVertexAttribP1uiv; + PFNGLVERTEXATTRIBP2UIPROC epoxy_glVertexAttribP2ui; + PFNGLVERTEXATTRIBP2UIVPROC epoxy_glVertexAttribP2uiv; + PFNGLVERTEXATTRIBP3UIPROC epoxy_glVertexAttribP3ui; + PFNGLVERTEXATTRIBP3UIVPROC epoxy_glVertexAttribP3uiv; + PFNGLVERTEXATTRIBP4UIPROC epoxy_glVertexAttribP4ui; + PFNGLVERTEXATTRIBP4UIVPROC epoxy_glVertexAttribP4uiv; + PFNGLVERTEXATTRIBPARAMETERIAMDPROC epoxy_glVertexAttribParameteriAMD; + PFNGLVERTEXATTRIBPOINTERPROC epoxy_glVertexAttribPointer; + PFNGLVERTEXATTRIBPOINTERARBPROC epoxy_glVertexAttribPointerARB; + PFNGLVERTEXATTRIBPOINTERNVPROC epoxy_glVertexAttribPointerNV; + PFNGLVERTEXATTRIBS1DVNVPROC epoxy_glVertexAttribs1dvNV; + PFNGLVERTEXATTRIBS1FVNVPROC epoxy_glVertexAttribs1fvNV; + PFNGLVERTEXATTRIBS1HVNVPROC epoxy_glVertexAttribs1hvNV; + PFNGLVERTEXATTRIBS1SVNVPROC epoxy_glVertexAttribs1svNV; + PFNGLVERTEXATTRIBS2DVNVPROC epoxy_glVertexAttribs2dvNV; + PFNGLVERTEXATTRIBS2FVNVPROC epoxy_glVertexAttribs2fvNV; + PFNGLVERTEXATTRIBS2HVNVPROC epoxy_glVertexAttribs2hvNV; + PFNGLVERTEXATTRIBS2SVNVPROC epoxy_glVertexAttribs2svNV; + PFNGLVERTEXATTRIBS3DVNVPROC epoxy_glVertexAttribs3dvNV; + PFNGLVERTEXATTRIBS3FVNVPROC epoxy_glVertexAttribs3fvNV; + PFNGLVERTEXATTRIBS3HVNVPROC epoxy_glVertexAttribs3hvNV; + PFNGLVERTEXATTRIBS3SVNVPROC epoxy_glVertexAttribs3svNV; + PFNGLVERTEXATTRIBS4DVNVPROC epoxy_glVertexAttribs4dvNV; + PFNGLVERTEXATTRIBS4FVNVPROC epoxy_glVertexAttribs4fvNV; + PFNGLVERTEXATTRIBS4HVNVPROC epoxy_glVertexAttribs4hvNV; + PFNGLVERTEXATTRIBS4SVNVPROC epoxy_glVertexAttribs4svNV; + PFNGLVERTEXATTRIBS4UBVNVPROC epoxy_glVertexAttribs4ubvNV; + PFNGLVERTEXBINDINGDIVISORPROC epoxy_glVertexBindingDivisor; + PFNGLVERTEXBLENDARBPROC epoxy_glVertexBlendARB; + PFNGLVERTEXBLENDENVFATIPROC epoxy_glVertexBlendEnvfATI; + PFNGLVERTEXBLENDENVIATIPROC epoxy_glVertexBlendEnviATI; + PFNGLVERTEXFORMATNVPROC epoxy_glVertexFormatNV; + PFNGLVERTEXP2UIPROC epoxy_glVertexP2ui; + PFNGLVERTEXP2UIVPROC epoxy_glVertexP2uiv; + PFNGLVERTEXP3UIPROC epoxy_glVertexP3ui; + PFNGLVERTEXP3UIVPROC epoxy_glVertexP3uiv; + PFNGLVERTEXP4UIPROC epoxy_glVertexP4ui; + PFNGLVERTEXP4UIVPROC epoxy_glVertexP4uiv; + PFNGLVERTEXPOINTERPROC epoxy_glVertexPointer; + PFNGLVERTEXPOINTEREXTPROC epoxy_glVertexPointerEXT; + PFNGLVERTEXPOINTERLISTIBMPROC epoxy_glVertexPointerListIBM; + PFNGLVERTEXPOINTERVINTELPROC epoxy_glVertexPointervINTEL; + PFNGLVERTEXSTREAM1DATIPROC epoxy_glVertexStream1dATI; + PFNGLVERTEXSTREAM1DVATIPROC epoxy_glVertexStream1dvATI; + PFNGLVERTEXSTREAM1FATIPROC epoxy_glVertexStream1fATI; + PFNGLVERTEXSTREAM1FVATIPROC epoxy_glVertexStream1fvATI; + PFNGLVERTEXSTREAM1IATIPROC epoxy_glVertexStream1iATI; + PFNGLVERTEXSTREAM1IVATIPROC epoxy_glVertexStream1ivATI; + PFNGLVERTEXSTREAM1SATIPROC epoxy_glVertexStream1sATI; + PFNGLVERTEXSTREAM1SVATIPROC epoxy_glVertexStream1svATI; + PFNGLVERTEXSTREAM2DATIPROC epoxy_glVertexStream2dATI; + PFNGLVERTEXSTREAM2DVATIPROC epoxy_glVertexStream2dvATI; + PFNGLVERTEXSTREAM2FATIPROC epoxy_glVertexStream2fATI; + PFNGLVERTEXSTREAM2FVATIPROC epoxy_glVertexStream2fvATI; + PFNGLVERTEXSTREAM2IATIPROC epoxy_glVertexStream2iATI; + PFNGLVERTEXSTREAM2IVATIPROC epoxy_glVertexStream2ivATI; + PFNGLVERTEXSTREAM2SATIPROC epoxy_glVertexStream2sATI; + PFNGLVERTEXSTREAM2SVATIPROC epoxy_glVertexStream2svATI; + PFNGLVERTEXSTREAM3DATIPROC epoxy_glVertexStream3dATI; + PFNGLVERTEXSTREAM3DVATIPROC epoxy_glVertexStream3dvATI; + PFNGLVERTEXSTREAM3FATIPROC epoxy_glVertexStream3fATI; + PFNGLVERTEXSTREAM3FVATIPROC epoxy_glVertexStream3fvATI; + PFNGLVERTEXSTREAM3IATIPROC epoxy_glVertexStream3iATI; + PFNGLVERTEXSTREAM3IVATIPROC epoxy_glVertexStream3ivATI; + PFNGLVERTEXSTREAM3SATIPROC epoxy_glVertexStream3sATI; + PFNGLVERTEXSTREAM3SVATIPROC epoxy_glVertexStream3svATI; + PFNGLVERTEXSTREAM4DATIPROC epoxy_glVertexStream4dATI; + PFNGLVERTEXSTREAM4DVATIPROC epoxy_glVertexStream4dvATI; + PFNGLVERTEXSTREAM4FATIPROC epoxy_glVertexStream4fATI; + PFNGLVERTEXSTREAM4FVATIPROC epoxy_glVertexStream4fvATI; + PFNGLVERTEXSTREAM4IATIPROC epoxy_glVertexStream4iATI; + PFNGLVERTEXSTREAM4IVATIPROC epoxy_glVertexStream4ivATI; + PFNGLVERTEXSTREAM4SATIPROC epoxy_glVertexStream4sATI; + PFNGLVERTEXSTREAM4SVATIPROC epoxy_glVertexStream4svATI; + PFNGLVERTEXWEIGHTPOINTEREXTPROC epoxy_glVertexWeightPointerEXT; + PFNGLVERTEXWEIGHTFEXTPROC epoxy_glVertexWeightfEXT; + PFNGLVERTEXWEIGHTFVEXTPROC epoxy_glVertexWeightfvEXT; + PFNGLVERTEXWEIGHTHNVPROC epoxy_glVertexWeighthNV; + PFNGLVERTEXWEIGHTHVNVPROC epoxy_glVertexWeighthvNV; + PFNGLVIDEOCAPTURENVPROC epoxy_glVideoCaptureNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC epoxy_glVideoCaptureStreamParameterdvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC epoxy_glVideoCaptureStreamParameterfvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC epoxy_glVideoCaptureStreamParameterivNV; + PFNGLVIEWPORTPROC epoxy_glViewport; + PFNGLVIEWPORTARRAYVPROC epoxy_glViewportArrayv; + PFNGLVIEWPORTARRAYVNVPROC epoxy_glViewportArrayvNV; + PFNGLVIEWPORTINDEXEDFPROC epoxy_glViewportIndexedf; + PFNGLVIEWPORTINDEXEDFNVPROC epoxy_glViewportIndexedfNV; + PFNGLVIEWPORTINDEXEDFVPROC epoxy_glViewportIndexedfv; + PFNGLVIEWPORTINDEXEDFVNVPROC epoxy_glViewportIndexedfvNV; + PFNGLWAITSYNCPROC epoxy_glWaitSync; + PFNGLWAITSYNCAPPLEPROC epoxy_glWaitSyncAPPLE; + PFNGLWEIGHTPATHSNVPROC epoxy_glWeightPathsNV; + PFNGLWEIGHTPOINTERARBPROC epoxy_glWeightPointerARB; + PFNGLWEIGHTPOINTEROESPROC epoxy_glWeightPointerOES; + PFNGLWEIGHTBVARBPROC epoxy_glWeightbvARB; + PFNGLWEIGHTDVARBPROC epoxy_glWeightdvARB; + PFNGLWEIGHTFVARBPROC epoxy_glWeightfvARB; + PFNGLWEIGHTIVARBPROC epoxy_glWeightivARB; + PFNGLWEIGHTSVARBPROC epoxy_glWeightsvARB; + PFNGLWEIGHTUBVARBPROC epoxy_glWeightubvARB; + PFNGLWEIGHTUIVARBPROC epoxy_glWeightuivARB; + PFNGLWEIGHTUSVARBPROC epoxy_glWeightusvARB; + PFNGLWINDOWPOS2DPROC epoxy_glWindowPos2d; + PFNGLWINDOWPOS2DARBPROC epoxy_glWindowPos2dARB; + PFNGLWINDOWPOS2DMESAPROC epoxy_glWindowPos2dMESA; + PFNGLWINDOWPOS2DVPROC epoxy_glWindowPos2dv; + PFNGLWINDOWPOS2DVARBPROC epoxy_glWindowPos2dvARB; + PFNGLWINDOWPOS2DVMESAPROC epoxy_glWindowPos2dvMESA; + PFNGLWINDOWPOS2FPROC epoxy_glWindowPos2f; + PFNGLWINDOWPOS2FARBPROC epoxy_glWindowPos2fARB; + PFNGLWINDOWPOS2FMESAPROC epoxy_glWindowPos2fMESA; + PFNGLWINDOWPOS2FVPROC epoxy_glWindowPos2fv; + PFNGLWINDOWPOS2FVARBPROC epoxy_glWindowPos2fvARB; + PFNGLWINDOWPOS2FVMESAPROC epoxy_glWindowPos2fvMESA; + PFNGLWINDOWPOS2IPROC epoxy_glWindowPos2i; + PFNGLWINDOWPOS2IARBPROC epoxy_glWindowPos2iARB; + PFNGLWINDOWPOS2IMESAPROC epoxy_glWindowPos2iMESA; + PFNGLWINDOWPOS2IVPROC epoxy_glWindowPos2iv; + PFNGLWINDOWPOS2IVARBPROC epoxy_glWindowPos2ivARB; + PFNGLWINDOWPOS2IVMESAPROC epoxy_glWindowPos2ivMESA; + PFNGLWINDOWPOS2SPROC epoxy_glWindowPos2s; + PFNGLWINDOWPOS2SARBPROC epoxy_glWindowPos2sARB; + PFNGLWINDOWPOS2SMESAPROC epoxy_glWindowPos2sMESA; + PFNGLWINDOWPOS2SVPROC epoxy_glWindowPos2sv; + PFNGLWINDOWPOS2SVARBPROC epoxy_glWindowPos2svARB; + PFNGLWINDOWPOS2SVMESAPROC epoxy_glWindowPos2svMESA; + PFNGLWINDOWPOS3DPROC epoxy_glWindowPos3d; + PFNGLWINDOWPOS3DARBPROC epoxy_glWindowPos3dARB; + PFNGLWINDOWPOS3DMESAPROC epoxy_glWindowPos3dMESA; + PFNGLWINDOWPOS3DVPROC epoxy_glWindowPos3dv; + PFNGLWINDOWPOS3DVARBPROC epoxy_glWindowPos3dvARB; + PFNGLWINDOWPOS3DVMESAPROC epoxy_glWindowPos3dvMESA; + PFNGLWINDOWPOS3FPROC epoxy_glWindowPos3f; + PFNGLWINDOWPOS3FARBPROC epoxy_glWindowPos3fARB; + PFNGLWINDOWPOS3FMESAPROC epoxy_glWindowPos3fMESA; + PFNGLWINDOWPOS3FVPROC epoxy_glWindowPos3fv; + PFNGLWINDOWPOS3FVARBPROC epoxy_glWindowPos3fvARB; + PFNGLWINDOWPOS3FVMESAPROC epoxy_glWindowPos3fvMESA; + PFNGLWINDOWPOS3IPROC epoxy_glWindowPos3i; + PFNGLWINDOWPOS3IARBPROC epoxy_glWindowPos3iARB; + PFNGLWINDOWPOS3IMESAPROC epoxy_glWindowPos3iMESA; + PFNGLWINDOWPOS3IVPROC epoxy_glWindowPos3iv; + PFNGLWINDOWPOS3IVARBPROC epoxy_glWindowPos3ivARB; + PFNGLWINDOWPOS3IVMESAPROC epoxy_glWindowPos3ivMESA; + PFNGLWINDOWPOS3SPROC epoxy_glWindowPos3s; + PFNGLWINDOWPOS3SARBPROC epoxy_glWindowPos3sARB; + PFNGLWINDOWPOS3SMESAPROC epoxy_glWindowPos3sMESA; + PFNGLWINDOWPOS3SVPROC epoxy_glWindowPos3sv; + PFNGLWINDOWPOS3SVARBPROC epoxy_glWindowPos3svARB; + PFNGLWINDOWPOS3SVMESAPROC epoxy_glWindowPos3svMESA; + PFNGLWINDOWPOS4DMESAPROC epoxy_glWindowPos4dMESA; + PFNGLWINDOWPOS4DVMESAPROC epoxy_glWindowPos4dvMESA; + PFNGLWINDOWPOS4FMESAPROC epoxy_glWindowPos4fMESA; + PFNGLWINDOWPOS4FVMESAPROC epoxy_glWindowPos4fvMESA; + PFNGLWINDOWPOS4IMESAPROC epoxy_glWindowPos4iMESA; + PFNGLWINDOWPOS4IVMESAPROC epoxy_glWindowPos4ivMESA; + PFNGLWINDOWPOS4SMESAPROC epoxy_glWindowPos4sMESA; + PFNGLWINDOWPOS4SVMESAPROC epoxy_glWindowPos4svMESA; + PFNGLWRITEMASKEXTPROC epoxy_glWriteMaskEXT; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum gl_provider { + gl_provider_terminator = 0, + Desktop_OpenGL_1_0, + Desktop_OpenGL_1_1, + Desktop_OpenGL_1_2, + Desktop_OpenGL_1_3, + Desktop_OpenGL_1_4, + Desktop_OpenGL_1_5, + Desktop_OpenGL_2_0, + Desktop_OpenGL_2_1, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + Desktop_OpenGL_3_2, + Desktop_OpenGL_3_3, + Desktop_OpenGL_4_0, + Desktop_OpenGL_4_1, + Desktop_OpenGL_4_2, + Desktop_OpenGL_4_3, + Desktop_OpenGL_4_4, + Desktop_OpenGL_4_5, + GL_extension_GL_3DFX_tbuffer, + GL_extension_GL_AMD_debug_output, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_AMD_interleaved_elements, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_AMD_name_gen_delete, + GL_extension_GL_AMD_occlusion_query_event, + GL_extension_GL_AMD_performance_monitor, + GL_extension_GL_AMD_sample_positions, + GL_extension_GL_AMD_sparse_texture, + GL_extension_GL_AMD_stencil_operation_extended, + GL_extension_GL_AMD_vertex_shader_tessellator, + GL_extension_GL_ANGLE_framebuffer_blit, + GL_extension_GL_ANGLE_framebuffer_multisample, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ANGLE_translated_shader_source, + GL_extension_GL_APPLE_copy_texture_levels, + GL_extension_GL_APPLE_element_array, + GL_extension_GL_APPLE_fence, + GL_extension_GL_APPLE_flush_buffer_range, + GL_extension_GL_APPLE_framebuffer_multisample, + GL_extension_GL_APPLE_object_purgeable, + GL_extension_GL_APPLE_sync, + GL_extension_GL_APPLE_texture_range, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_APPLE_vertex_array_range, + GL_extension_GL_APPLE_vertex_program_evaluators, + GL_extension_GL_ARB_ES2_compatibility, + GL_extension_GL_ARB_ES3_1_compatibility, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_ARB_bindless_texture, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_ARB_buffer_storage, + GL_extension_GL_ARB_cl_event, + GL_extension_GL_ARB_clear_buffer_object, + GL_extension_GL_ARB_clear_texture, + GL_extension_GL_ARB_clip_control, + GL_extension_GL_ARB_color_buffer_float, + GL_extension_GL_ARB_compute_shader, + GL_extension_GL_ARB_compute_variable_group_size, + GL_extension_GL_ARB_copy_buffer, + GL_extension_GL_ARB_copy_image, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_ARB_draw_indirect, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_framebuffer_no_attachments, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_ARB_get_program_binary, + GL_extension_GL_ARB_get_texture_sub_image, + GL_extension_GL_ARB_gpu_shader_fp64, + GL_extension_GL_ARB_gpu_shader_int64, + GL_extension_GL_ARB_imaging, + GL_extension_GL_ARB_indirect_parameters, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_ARB_internalformat_query2, + GL_extension_GL_ARB_internalformat_query, + GL_extension_GL_ARB_invalidate_subdata, + GL_extension_GL_ARB_map_buffer_range, + GL_extension_GL_ARB_matrix_palette, + GL_extension_GL_ARB_multi_bind, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_ARB_multisample, + GL_extension_GL_ARB_multitexture, + GL_extension_GL_ARB_occlusion_query, + GL_extension_GL_ARB_parallel_shader_compile, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_ARB_program_interface_query, + GL_extension_GL_ARB_provoking_vertex, + GL_extension_GL_ARB_robustness, + GL_extension_GL_ARB_sample_locations, + GL_extension_GL_ARB_sample_shading, + GL_extension_GL_ARB_sampler_objects, + GL_extension_GL_ARB_separate_shader_objects, + GL_extension_GL_ARB_shader_atomic_counters, + GL_extension_GL_ARB_shader_image_load_store, + GL_extension_GL_ARB_shader_objects, + GL_extension_GL_ARB_shader_storage_buffer_object, + GL_extension_GL_ARB_shader_subroutine, + GL_extension_GL_ARB_shading_language_include, + GL_extension_GL_ARB_sparse_buffer, + GL_extension_GL_ARB_sparse_texture, + GL_extension_GL_ARB_sync, + GL_extension_GL_ARB_tessellation_shader, + GL_extension_GL_ARB_texture_barrier, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_ARB_texture_buffer_range, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_ARB_texture_multisample, + GL_extension_GL_ARB_texture_storage, + GL_extension_GL_ARB_texture_storage_multisample, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_ARB_transform_feedback2, + GL_extension_GL_ARB_transform_feedback3, + GL_extension_GL_ARB_transform_feedback_instanced, + GL_extension_GL_ARB_transpose_matrix, + GL_extension_GL_ARB_uniform_buffer_object, + GL_extension_GL_ARB_vertex_array_object, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_ARB_vertex_attrib_binding, + GL_extension_GL_ARB_vertex_blend, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_ATI_element_array, + GL_extension_GL_ATI_envmap_bumpmap, + GL_extension_GL_ATI_fragment_shader, + GL_extension_GL_ATI_map_object_buffer, + GL_extension_GL_ATI_pn_triangles, + GL_extension_GL_ATI_separate_stencil, + GL_extension_GL_ATI_vertex_array_object, + GL_extension_GL_ATI_vertex_attrib_array_object, + GL_extension_GL_ATI_vertex_streams, + GL_extension_GL_EXT_base_instance, + GL_extension_GL_EXT_bindable_uniform, + GL_extension_GL_EXT_blend_color, + GL_extension_GL_EXT_blend_equation_separate, + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_blend_func_separate, + GL_extension_GL_EXT_blend_minmax, + GL_extension_GL_EXT_buffer_storage, + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_EXT_compiled_vertex_array, + GL_extension_GL_EXT_convolution, + GL_extension_GL_EXT_coordinate_frame, + GL_extension_GL_EXT_copy_image, + GL_extension_GL_EXT_copy_texture, + GL_extension_GL_EXT_cull_vertex, + GL_extension_GL_EXT_debug_label, + GL_extension_GL_EXT_debug_marker, + GL_extension_GL_EXT_depth_bounds_test, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_discard_framebuffer, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_draw_range_elements, + GL_extension_GL_EXT_fog_coord, + GL_extension_GL_EXT_framebuffer_blit, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_framebuffer_object, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_EXT_gpu_program_parameters, + GL_extension_GL_EXT_gpu_shader4, + GL_extension_GL_EXT_histogram, + GL_extension_GL_EXT_index_func, + GL_extension_GL_EXT_index_material, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_EXT_light_texture, + GL_extension_GL_EXT_map_buffer_range, + GL_extension_GL_EXT_multi_draw_arrays, + GL_extension_GL_EXT_multi_draw_indirect, + GL_extension_GL_EXT_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + GL_extension_GL_EXT_multiview_draw_buffers, + GL_extension_GL_EXT_occlusion_query_boolean, + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_EXT_pixel_transform, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_EXT_polygon_offset, + GL_extension_GL_EXT_polygon_offset_clamp, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_EXT_provoking_vertex, + GL_extension_GL_EXT_raster_multisample, + GL_extension_GL_EXT_robustness, + GL_extension_GL_EXT_secondary_color, + GL_extension_GL_EXT_separate_shader_objects, + GL_extension_GL_EXT_shader_image_load_store, + GL_extension_GL_EXT_sparse_texture, + GL_extension_GL_EXT_stencil_clear_tag, + GL_extension_GL_EXT_stencil_two_side, + GL_extension_GL_EXT_subtexture, + GL_extension_GL_EXT_tessellation_shader, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_EXT_texture_filter_minmax, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_EXT_texture_object, + GL_extension_GL_EXT_texture_perturb_normal, + GL_extension_GL_EXT_texture_storage, + GL_extension_GL_EXT_texture_view, + GL_extension_GL_EXT_timer_query, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_EXT_vertex_array, + GL_extension_GL_EXT_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_shader, + GL_extension_GL_EXT_vertex_weighting, + GL_extension_GL_EXT_x11_sync_object, + GL_extension_GL_GREMEDY_frame_terminator, + GL_extension_GL_GREMEDY_string_marker, + GL_extension_GL_HP_image_transform, + GL_extension_GL_IBM_multimode_draw_arrays, + GL_extension_GL_IBM_static_data, + GL_extension_GL_IBM_vertex_array_lists, + GL_extension_GL_IMG_multisampled_render_to_texture, + GL_extension_GL_IMG_user_clip_plane, + GL_extension_GL_INGR_blend_func_separate, + GL_extension_GL_INTEL_framebuffer_CMAA, + GL_extension_GL_INTEL_map_texture, + GL_extension_GL_INTEL_parallel_arrays, + GL_extension_GL_INTEL_performance_query, + GL_extension_GL_KHR_blend_equation_advanced, + GL_extension_GL_KHR_debug, + GL_extension_GL_KHR_robustness, + GL_extension_GL_MESA_resize_buffers, + GL_extension_GL_MESA_window_pos, + GL_extension_GL_NVX_conditional_render, + GL_extension_GL_NV_bindless_multi_draw_indirect, + GL_extension_GL_NV_bindless_multi_draw_indirect_count, + GL_extension_GL_NV_bindless_texture, + GL_extension_GL_NV_blend_equation_advanced, + GL_extension_GL_NV_command_list, + GL_extension_GL_NV_conditional_render, + GL_extension_GL_NV_conservative_raster, + GL_extension_GL_NV_conservative_raster_dilate, + GL_extension_GL_NV_copy_buffer, + GL_extension_GL_NV_copy_image, + GL_extension_GL_NV_coverage_sample, + GL_extension_GL_NV_depth_buffer_float, + GL_extension_GL_NV_draw_buffers, + GL_extension_GL_NV_draw_instanced, + GL_extension_GL_NV_draw_texture, + GL_extension_GL_NV_evaluators, + GL_extension_GL_NV_explicit_multisample, + GL_extension_GL_NV_fence, + GL_extension_GL_NV_fragment_coverage_to_color, + GL_extension_GL_NV_fragment_program, + GL_extension_GL_NV_framebuffer_blit, + GL_extension_GL_NV_framebuffer_mixed_samples, + GL_extension_GL_NV_framebuffer_multisample, + GL_extension_GL_NV_framebuffer_multisample_coverage, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_NV_gpu_program4, + GL_extension_GL_NV_gpu_program5, + GL_extension_GL_NV_gpu_shader5, + GL_extension_GL_NV_half_float, + GL_extension_GL_NV_instanced_arrays, + GL_extension_GL_NV_internalformat_sample_query, + GL_extension_GL_NV_non_square_matrices, + GL_extension_GL_NV_occlusion_query, + GL_extension_GL_NV_parameter_buffer_object, + GL_extension_GL_NV_path_rendering, + GL_extension_GL_NV_pixel_data_range, + GL_extension_GL_NV_point_sprite, + GL_extension_GL_NV_polygon_mode, + GL_extension_GL_NV_present_video, + GL_extension_GL_NV_primitive_restart, + GL_extension_GL_NV_read_buffer, + GL_extension_GL_NV_register_combiners2, + GL_extension_GL_NV_register_combiners, + GL_extension_GL_NV_sample_locations, + GL_extension_GL_NV_shader_buffer_load, + GL_extension_GL_NV_texture_barrier, + GL_extension_GL_NV_texture_multisample, + GL_extension_GL_NV_transform_feedback2, + GL_extension_GL_NV_transform_feedback, + GL_extension_GL_NV_vdpau_interop, + GL_extension_GL_NV_vertex_array_range, + GL_extension_GL_NV_vertex_attrib_integer_64bit, + GL_extension_GL_NV_vertex_buffer_unified_memory, + GL_extension_GL_NV_vertex_program4, + GL_extension_GL_NV_vertex_program, + GL_extension_GL_NV_video_capture, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_EGL_image, + GL_extension_GL_OES_blend_equation_separate, + GL_extension_GL_OES_blend_func_separate, + GL_extension_GL_OES_blend_subtract, + GL_extension_GL_OES_byte_coordinates, + GL_extension_GL_OES_copy_image, + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_OES_draw_elements_base_vertex, + GL_extension_GL_OES_draw_texture, + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_framebuffer_object, + GL_extension_GL_OES_geometry_shader, + GL_extension_GL_OES_get_program_binary, + GL_extension_GL_OES_mapbuffer, + GL_extension_GL_OES_matrix_palette, + GL_extension_GL_OES_point_size_array, + GL_extension_GL_OES_primitive_bounding_box, + GL_extension_GL_OES_query_matrix, + GL_extension_GL_OES_sample_shading, + GL_extension_GL_OES_single_precision, + GL_extension_GL_OES_tessellation_shader, + GL_extension_GL_OES_texture_3D, + GL_extension_GL_OES_texture_border_clamp, + GL_extension_GL_OES_texture_buffer, + GL_extension_GL_OES_texture_cube_map, + GL_extension_GL_OES_texture_storage_multisample_2d_array, + GL_extension_GL_OES_texture_view, + GL_extension_GL_OES_vertex_array_object, + GL_extension_GL_OVR_multiview, + GL_extension_GL_PGI_misc_hints, + GL_extension_GL_QCOM_alpha_test, + GL_extension_GL_QCOM_driver_control, + GL_extension_GL_QCOM_extended_get2, + GL_extension_GL_QCOM_extended_get, + GL_extension_GL_QCOM_tiled_rendering, + GL_extension_GL_SGIS_detail_texture, + GL_extension_GL_SGIS_fog_function, + GL_extension_GL_SGIS_multisample, + GL_extension_GL_SGIS_pixel_texture, + GL_extension_GL_SGIS_point_parameters, + GL_extension_GL_SGIS_sharpen_texture, + GL_extension_GL_SGIS_texture4D, + GL_extension_GL_SGIS_texture_color_mask, + GL_extension_GL_SGIS_texture_filter4, + GL_extension_GL_SGIX_async, + GL_extension_GL_SGIX_flush_raster, + GL_extension_GL_SGIX_fragment_lighting, + GL_extension_GL_SGIX_framezoom, + GL_extension_GL_SGIX_igloo_interface, + GL_extension_GL_SGIX_instruments, + GL_extension_GL_SGIX_list_priority, + GL_extension_GL_SGIX_pixel_texture, + GL_extension_GL_SGIX_polynomial_ffd, + GL_extension_GL_SGIX_reference_plane, + GL_extension_GL_SGIX_sprite, + GL_extension_GL_SGIX_tag_sample_buffer, + GL_extension_GL_SGI_color_table, + GL_extension_GL_SUNX_constant_data, + GL_extension_GL_SUN_global_alpha, + GL_extension_GL_SUN_mesh_array, + GL_extension_GL_SUN_triangle_list, + GL_extension_GL_SUN_vertex, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + OpenGL_ES_3_0, + OpenGL_ES_3_1, + OpenGL_ES_3_2, + always_present, +} PACKED; + +static const char *enum_string = + "Desktop OpenGL 1.0\0" + "Desktop OpenGL 1.1\0" + "Desktop OpenGL 1.2\0" + "Desktop OpenGL 1.3\0" + "Desktop OpenGL 1.4\0" + "Desktop OpenGL 1.5\0" + "Desktop OpenGL 2.0\0" + "Desktop OpenGL 2.1\0" + "Desktop OpenGL 3.0\0" + "Desktop OpenGL 3.1\0" + "Desktop OpenGL 3.2\0" + "Desktop OpenGL 3.3\0" + "Desktop OpenGL 4.0\0" + "Desktop OpenGL 4.1\0" + "Desktop OpenGL 4.2\0" + "Desktop OpenGL 4.3\0" + "Desktop OpenGL 4.4\0" + "Desktop OpenGL 4.5\0" + "GL extension \"GL_3DFX_tbuffer\"\0" + "GL extension \"GL_AMD_debug_output\"\0" + "GL extension \"GL_AMD_draw_buffers_blend\"\0" + "GL extension \"GL_AMD_gpu_shader_int64\"\0" + "GL extension \"GL_AMD_interleaved_elements\"\0" + "GL extension \"GL_AMD_multi_draw_indirect\"\0" + "GL extension \"GL_AMD_name_gen_delete\"\0" + "GL extension \"GL_AMD_occlusion_query_event\"\0" + "GL extension \"GL_AMD_performance_monitor\"\0" + "GL extension \"GL_AMD_sample_positions\"\0" + "GL extension \"GL_AMD_sparse_texture\"\0" + "GL extension \"GL_AMD_stencil_operation_extended\"\0" + "GL extension \"GL_AMD_vertex_shader_tessellator\"\0" + "GL extension \"GL_ANGLE_framebuffer_blit\"\0" + "GL extension \"GL_ANGLE_framebuffer_multisample\"\0" + "GL extension \"GL_ANGLE_instanced_arrays\"\0" + "GL extension \"GL_ANGLE_translated_shader_source\"\0" + "GL extension \"GL_APPLE_copy_texture_levels\"\0" + "GL extension \"GL_APPLE_element_array\"\0" + "GL extension \"GL_APPLE_fence\"\0" + "GL extension \"GL_APPLE_flush_buffer_range\"\0" + "GL extension \"GL_APPLE_framebuffer_multisample\"\0" + "GL extension \"GL_APPLE_object_purgeable\"\0" + "GL extension \"GL_APPLE_sync\"\0" + "GL extension \"GL_APPLE_texture_range\"\0" + "GL extension \"GL_APPLE_vertex_array_object\"\0" + "GL extension \"GL_APPLE_vertex_array_range\"\0" + "GL extension \"GL_APPLE_vertex_program_evaluators\"\0" + "GL extension \"GL_ARB_ES2_compatibility\"\0" + "GL extension \"GL_ARB_ES3_1_compatibility\"\0" + "GL extension \"GL_ARB_ES3_2_compatibility\"\0" + "GL extension \"GL_ARB_base_instance\"\0" + "GL extension \"GL_ARB_bindless_texture\"\0" + "GL extension \"GL_ARB_blend_func_extended\"\0" + "GL extension \"GL_ARB_buffer_storage\"\0" + "GL extension \"GL_ARB_cl_event\"\0" + "GL extension \"GL_ARB_clear_buffer_object\"\0" + "GL extension \"GL_ARB_clear_texture\"\0" + "GL extension \"GL_ARB_clip_control\"\0" + "GL extension \"GL_ARB_color_buffer_float\"\0" + "GL extension \"GL_ARB_compute_shader\"\0" + "GL extension \"GL_ARB_compute_variable_group_size\"\0" + "GL extension \"GL_ARB_copy_buffer\"\0" + "GL extension \"GL_ARB_copy_image\"\0" + "GL extension \"GL_ARB_debug_output\"\0" + "GL extension \"GL_ARB_direct_state_access\"\0" + "GL extension \"GL_ARB_draw_buffers\"\0" + "GL extension \"GL_ARB_draw_buffers_blend\"\0" + "GL extension \"GL_ARB_draw_elements_base_vertex\"\0" + "GL extension \"GL_ARB_draw_indirect\"\0" + "GL extension \"GL_ARB_draw_instanced\"\0" + "GL extension \"GL_ARB_fragment_program\"\0" + "GL extension \"GL_ARB_framebuffer_no_attachments\"\0" + "GL extension \"GL_ARB_framebuffer_object\"\0" + "GL extension \"GL_ARB_geometry_shader4\"\0" + "GL extension \"GL_ARB_get_program_binary\"\0" + "GL extension \"GL_ARB_get_texture_sub_image\"\0" + "GL extension \"GL_ARB_gpu_shader_fp64\"\0" + "GL extension \"GL_ARB_gpu_shader_int64\"\0" + "GL extension \"GL_ARB_imaging\"\0" + "GL extension \"GL_ARB_indirect_parameters\"\0" + "GL extension \"GL_ARB_instanced_arrays\"\0" + "GL extension \"GL_ARB_internalformat_query2\"\0" + "GL extension \"GL_ARB_internalformat_query\"\0" + "GL extension \"GL_ARB_invalidate_subdata\"\0" + "GL extension \"GL_ARB_map_buffer_range\"\0" + "GL extension \"GL_ARB_matrix_palette\"\0" + "GL extension \"GL_ARB_multi_bind\"\0" + "GL extension \"GL_ARB_multi_draw_indirect\"\0" + "GL extension \"GL_ARB_multisample\"\0" + "GL extension \"GL_ARB_multitexture\"\0" + "GL extension \"GL_ARB_occlusion_query\"\0" + "GL extension \"GL_ARB_parallel_shader_compile\"\0" + "GL extension \"GL_ARB_point_parameters\"\0" + "GL extension \"GL_ARB_program_interface_query\"\0" + "GL extension \"GL_ARB_provoking_vertex\"\0" + "GL extension \"GL_ARB_robustness\"\0" + "GL extension \"GL_ARB_sample_locations\"\0" + "GL extension \"GL_ARB_sample_shading\"\0" + "GL extension \"GL_ARB_sampler_objects\"\0" + "GL extension \"GL_ARB_separate_shader_objects\"\0" + "GL extension \"GL_ARB_shader_atomic_counters\"\0" + "GL extension \"GL_ARB_shader_image_load_store\"\0" + "GL extension \"GL_ARB_shader_objects\"\0" + "GL extension \"GL_ARB_shader_storage_buffer_object\"\0" + "GL extension \"GL_ARB_shader_subroutine\"\0" + "GL extension \"GL_ARB_shading_language_include\"\0" + "GL extension \"GL_ARB_sparse_buffer\"\0" + "GL extension \"GL_ARB_sparse_texture\"\0" + "GL extension \"GL_ARB_sync\"\0" + "GL extension \"GL_ARB_tessellation_shader\"\0" + "GL extension \"GL_ARB_texture_barrier\"\0" + "GL extension \"GL_ARB_texture_buffer_object\"\0" + "GL extension \"GL_ARB_texture_buffer_range\"\0" + "GL extension \"GL_ARB_texture_compression\"\0" + "GL extension \"GL_ARB_texture_multisample\"\0" + "GL extension \"GL_ARB_texture_storage\"\0" + "GL extension \"GL_ARB_texture_storage_multisample\"\0" + "GL extension \"GL_ARB_texture_view\"\0" + "GL extension \"GL_ARB_timer_query\"\0" + "GL extension \"GL_ARB_transform_feedback2\"\0" + "GL extension \"GL_ARB_transform_feedback3\"\0" + "GL extension \"GL_ARB_transform_feedback_instanced\"\0" + "GL extension \"GL_ARB_transpose_matrix\"\0" + "GL extension \"GL_ARB_uniform_buffer_object\"\0" + "GL extension \"GL_ARB_vertex_array_object\"\0" + "GL extension \"GL_ARB_vertex_attrib_64bit\"\0" + "GL extension \"GL_ARB_vertex_attrib_binding\"\0" + "GL extension \"GL_ARB_vertex_blend\"\0" + "GL extension \"GL_ARB_vertex_buffer_object\"\0" + "GL extension \"GL_ARB_vertex_program\"\0" + "GL extension \"GL_ARB_vertex_shader\"\0" + "GL extension \"GL_ARB_vertex_type_2_10_10_10_rev\"\0" + "GL extension \"GL_ARB_viewport_array\"\0" + "GL extension \"GL_ARB_window_pos\"\0" + "GL extension \"GL_ATI_draw_buffers\"\0" + "GL extension \"GL_ATI_element_array\"\0" + "GL extension \"GL_ATI_envmap_bumpmap\"\0" + "GL extension \"GL_ATI_fragment_shader\"\0" + "GL extension \"GL_ATI_map_object_buffer\"\0" + "GL extension \"GL_ATI_pn_triangles\"\0" + "GL extension \"GL_ATI_separate_stencil\"\0" + "GL extension \"GL_ATI_vertex_array_object\"\0" + "GL extension \"GL_ATI_vertex_attrib_array_object\"\0" + "GL extension \"GL_ATI_vertex_streams\"\0" + "GL extension \"GL_EXT_base_instance\"\0" + "GL extension \"GL_EXT_bindable_uniform\"\0" + "GL extension \"GL_EXT_blend_color\"\0" + "GL extension \"GL_EXT_blend_equation_separate\"\0" + "GL extension \"GL_EXT_blend_func_extended\"\0" + "GL extension \"GL_EXT_blend_func_separate\"\0" + "GL extension \"GL_EXT_blend_minmax\"\0" + "GL extension \"GL_EXT_buffer_storage\"\0" + "GL extension \"GL_EXT_color_subtable\"\0" + "GL extension \"GL_EXT_compiled_vertex_array\"\0" + "GL extension \"GL_EXT_convolution\"\0" + "GL extension \"GL_EXT_coordinate_frame\"\0" + "GL extension \"GL_EXT_copy_image\"\0" + "GL extension \"GL_EXT_copy_texture\"\0" + "GL extension \"GL_EXT_cull_vertex\"\0" + "GL extension \"GL_EXT_debug_label\"\0" + "GL extension \"GL_EXT_debug_marker\"\0" + "GL extension \"GL_EXT_depth_bounds_test\"\0" + "GL extension \"GL_EXT_direct_state_access\"\0" + "GL extension \"GL_EXT_discard_framebuffer\"\0" + "GL extension \"GL_EXT_disjoint_timer_query\"\0" + "GL extension \"GL_EXT_draw_buffers2\"\0" + "GL extension \"GL_EXT_draw_buffers\"\0" + "GL extension \"GL_EXT_draw_buffers_indexed\"\0" + "GL extension \"GL_EXT_draw_elements_base_vertex\"\0" + "GL extension \"GL_EXT_draw_instanced\"\0" + "GL extension \"GL_EXT_draw_range_elements\"\0" + "GL extension \"GL_EXT_fog_coord\"\0" + "GL extension \"GL_EXT_framebuffer_blit\"\0" + "GL extension \"GL_EXT_framebuffer_multisample\"\0" + "GL extension \"GL_EXT_framebuffer_object\"\0" + "GL extension \"GL_EXT_geometry_shader4\"\0" + "GL extension \"GL_EXT_geometry_shader\"\0" + "GL extension \"GL_EXT_gpu_program_parameters\"\0" + "GL extension \"GL_EXT_gpu_shader4\"\0" + "GL extension \"GL_EXT_histogram\"\0" + "GL extension \"GL_EXT_index_func\"\0" + "GL extension \"GL_EXT_index_material\"\0" + "GL extension \"GL_EXT_instanced_arrays\"\0" + "GL extension \"GL_EXT_light_texture\"\0" + "GL extension \"GL_EXT_map_buffer_range\"\0" + "GL extension \"GL_EXT_multi_draw_arrays\"\0" + "GL extension \"GL_EXT_multi_draw_indirect\"\0" + "GL extension \"GL_EXT_multisample\"\0" + "GL extension \"GL_EXT_multisampled_render_to_texture\"\0" + "GL extension \"GL_EXT_multiview_draw_buffers\"\0" + "GL extension \"GL_EXT_occlusion_query_boolean\"\0" + "GL extension \"GL_EXT_paletted_texture\"\0" + "GL extension \"GL_EXT_pixel_transform\"\0" + "GL extension \"GL_EXT_point_parameters\"\0" + "GL extension \"GL_EXT_polygon_offset\"\0" + "GL extension \"GL_EXT_polygon_offset_clamp\"\0" + "GL extension \"GL_EXT_primitive_bounding_box\"\0" + "GL extension \"GL_EXT_provoking_vertex\"\0" + "GL extension \"GL_EXT_raster_multisample\"\0" + "GL extension \"GL_EXT_robustness\"\0" + "GL extension \"GL_EXT_secondary_color\"\0" + "GL extension \"GL_EXT_separate_shader_objects\"\0" + "GL extension \"GL_EXT_shader_image_load_store\"\0" + "GL extension \"GL_EXT_sparse_texture\"\0" + "GL extension \"GL_EXT_stencil_clear_tag\"\0" + "GL extension \"GL_EXT_stencil_two_side\"\0" + "GL extension \"GL_EXT_subtexture\"\0" + "GL extension \"GL_EXT_tessellation_shader\"\0" + "GL extension \"GL_EXT_texture3D\"\0" + "GL extension \"GL_EXT_texture_array\"\0" + "GL extension \"GL_EXT_texture_border_clamp\"\0" + "GL extension \"GL_EXT_texture_buffer\"\0" + "GL extension \"GL_EXT_texture_buffer_object\"\0" + "GL extension \"GL_EXT_texture_filter_minmax\"\0" + "GL extension \"GL_EXT_texture_integer\"\0" + "GL extension \"GL_EXT_texture_object\"\0" + "GL extension \"GL_EXT_texture_perturb_normal\"\0" + "GL extension \"GL_EXT_texture_storage\"\0" + "GL extension \"GL_EXT_texture_view\"\0" + "GL extension \"GL_EXT_timer_query\"\0" + "GL extension \"GL_EXT_transform_feedback\"\0" + "GL extension \"GL_EXT_vertex_array\"\0" + "GL extension \"GL_EXT_vertex_attrib_64bit\"\0" + "GL extension \"GL_EXT_vertex_shader\"\0" + "GL extension \"GL_EXT_vertex_weighting\"\0" + "GL extension \"GL_EXT_x11_sync_object\"\0" + "GL extension \"GL_GREMEDY_frame_terminator\"\0" + "GL extension \"GL_GREMEDY_string_marker\"\0" + "GL extension \"GL_HP_image_transform\"\0" + "GL extension \"GL_IBM_multimode_draw_arrays\"\0" + "GL extension \"GL_IBM_static_data\"\0" + "GL extension \"GL_IBM_vertex_array_lists\"\0" + "GL extension \"GL_IMG_multisampled_render_to_texture\"\0" + "GL extension \"GL_IMG_user_clip_plane\"\0" + "GL extension \"GL_INGR_blend_func_separate\"\0" + "GL extension \"GL_INTEL_framebuffer_CMAA\"\0" + "GL extension \"GL_INTEL_map_texture\"\0" + "GL extension \"GL_INTEL_parallel_arrays\"\0" + "GL extension \"GL_INTEL_performance_query\"\0" + "GL extension \"GL_KHR_blend_equation_advanced\"\0" + "GL extension \"GL_KHR_debug\"\0" + "GL extension \"GL_KHR_robustness\"\0" + "GL extension \"GL_MESA_resize_buffers\"\0" + "GL extension \"GL_MESA_window_pos\"\0" + "GL extension \"GL_NVX_conditional_render\"\0" + "GL extension \"GL_NV_bindless_multi_draw_indirect\"\0" + "GL extension \"GL_NV_bindless_multi_draw_indirect_count\"\0" + "GL extension \"GL_NV_bindless_texture\"\0" + "GL extension \"GL_NV_blend_equation_advanced\"\0" + "GL extension \"GL_NV_command_list\"\0" + "GL extension \"GL_NV_conditional_render\"\0" + "GL extension \"GL_NV_conservative_raster\"\0" + "GL extension \"GL_NV_conservative_raster_dilate\"\0" + "GL extension \"GL_NV_copy_buffer\"\0" + "GL extension \"GL_NV_copy_image\"\0" + "GL extension \"GL_NV_coverage_sample\"\0" + "GL extension \"GL_NV_depth_buffer_float\"\0" + "GL extension \"GL_NV_draw_buffers\"\0" + "GL extension \"GL_NV_draw_instanced\"\0" + "GL extension \"GL_NV_draw_texture\"\0" + "GL extension \"GL_NV_evaluators\"\0" + "GL extension \"GL_NV_explicit_multisample\"\0" + "GL extension \"GL_NV_fence\"\0" + "GL extension \"GL_NV_fragment_coverage_to_color\"\0" + "GL extension \"GL_NV_fragment_program\"\0" + "GL extension \"GL_NV_framebuffer_blit\"\0" + "GL extension \"GL_NV_framebuffer_mixed_samples\"\0" + "GL extension \"GL_NV_framebuffer_multisample\"\0" + "GL extension \"GL_NV_framebuffer_multisample_coverage\"\0" + "GL extension \"GL_NV_geometry_program4\"\0" + "GL extension \"GL_NV_gpu_program4\"\0" + "GL extension \"GL_NV_gpu_program5\"\0" + "GL extension \"GL_NV_gpu_shader5\"\0" + "GL extension \"GL_NV_half_float\"\0" + "GL extension \"GL_NV_instanced_arrays\"\0" + "GL extension \"GL_NV_internalformat_sample_query\"\0" + "GL extension \"GL_NV_non_square_matrices\"\0" + "GL extension \"GL_NV_occlusion_query\"\0" + "GL extension \"GL_NV_parameter_buffer_object\"\0" + "GL extension \"GL_NV_path_rendering\"\0" + "GL extension \"GL_NV_pixel_data_range\"\0" + "GL extension \"GL_NV_point_sprite\"\0" + "GL extension \"GL_NV_polygon_mode\"\0" + "GL extension \"GL_NV_present_video\"\0" + "GL extension \"GL_NV_primitive_restart\"\0" + "GL extension \"GL_NV_read_buffer\"\0" + "GL extension \"GL_NV_register_combiners2\"\0" + "GL extension \"GL_NV_register_combiners\"\0" + "GL extension \"GL_NV_sample_locations\"\0" + "GL extension \"GL_NV_shader_buffer_load\"\0" + "GL extension \"GL_NV_texture_barrier\"\0" + "GL extension \"GL_NV_texture_multisample\"\0" + "GL extension \"GL_NV_transform_feedback2\"\0" + "GL extension \"GL_NV_transform_feedback\"\0" + "GL extension \"GL_NV_vdpau_interop\"\0" + "GL extension \"GL_NV_vertex_array_range\"\0" + "GL extension \"GL_NV_vertex_attrib_integer_64bit\"\0" + "GL extension \"GL_NV_vertex_buffer_unified_memory\"\0" + "GL extension \"GL_NV_vertex_program4\"\0" + "GL extension \"GL_NV_vertex_program\"\0" + "GL extension \"GL_NV_video_capture\"\0" + "GL extension \"GL_NV_viewport_array\"\0" + "GL extension \"GL_OES_EGL_image\"\0" + "GL extension \"GL_OES_blend_equation_separate\"\0" + "GL extension \"GL_OES_blend_func_separate\"\0" + "GL extension \"GL_OES_blend_subtract\"\0" + "GL extension \"GL_OES_byte_coordinates\"\0" + "GL extension \"GL_OES_copy_image\"\0" + "GL extension \"GL_OES_draw_buffers_indexed\"\0" + "GL extension \"GL_OES_draw_elements_base_vertex\"\0" + "GL extension \"GL_OES_draw_texture\"\0" + "GL extension \"GL_OES_fixed_point\"\0" + "GL extension \"GL_OES_framebuffer_object\"\0" + "GL extension \"GL_OES_geometry_shader\"\0" + "GL extension \"GL_OES_get_program_binary\"\0" + "GL extension \"GL_OES_mapbuffer\"\0" + "GL extension \"GL_OES_matrix_palette\"\0" + "GL extension \"GL_OES_point_size_array\"\0" + "GL extension \"GL_OES_primitive_bounding_box\"\0" + "GL extension \"GL_OES_query_matrix\"\0" + "GL extension \"GL_OES_sample_shading\"\0" + "GL extension \"GL_OES_single_precision\"\0" + "GL extension \"GL_OES_tessellation_shader\"\0" + "GL extension \"GL_OES_texture_3D\"\0" + "GL extension \"GL_OES_texture_border_clamp\"\0" + "GL extension \"GL_OES_texture_buffer\"\0" + "GL extension \"GL_OES_texture_cube_map\"\0" + "GL extension \"GL_OES_texture_storage_multisample_2d_array\"\0" + "GL extension \"GL_OES_texture_view\"\0" + "GL extension \"GL_OES_vertex_array_object\"\0" + "GL extension \"GL_OVR_multiview\"\0" + "GL extension \"GL_PGI_misc_hints\"\0" + "GL extension \"GL_QCOM_alpha_test\"\0" + "GL extension \"GL_QCOM_driver_control\"\0" + "GL extension \"GL_QCOM_extended_get2\"\0" + "GL extension \"GL_QCOM_extended_get\"\0" + "GL extension \"GL_QCOM_tiled_rendering\"\0" + "GL extension \"GL_SGIS_detail_texture\"\0" + "GL extension \"GL_SGIS_fog_function\"\0" + "GL extension \"GL_SGIS_multisample\"\0" + "GL extension \"GL_SGIS_pixel_texture\"\0" + "GL extension \"GL_SGIS_point_parameters\"\0" + "GL extension \"GL_SGIS_sharpen_texture\"\0" + "GL extension \"GL_SGIS_texture4D\"\0" + "GL extension \"GL_SGIS_texture_color_mask\"\0" + "GL extension \"GL_SGIS_texture_filter4\"\0" + "GL extension \"GL_SGIX_async\"\0" + "GL extension \"GL_SGIX_flush_raster\"\0" + "GL extension \"GL_SGIX_fragment_lighting\"\0" + "GL extension \"GL_SGIX_framezoom\"\0" + "GL extension \"GL_SGIX_igloo_interface\"\0" + "GL extension \"GL_SGIX_instruments\"\0" + "GL extension \"GL_SGIX_list_priority\"\0" + "GL extension \"GL_SGIX_pixel_texture\"\0" + "GL extension \"GL_SGIX_polynomial_ffd\"\0" + "GL extension \"GL_SGIX_reference_plane\"\0" + "GL extension \"GL_SGIX_sprite\"\0" + "GL extension \"GL_SGIX_tag_sample_buffer\"\0" + "GL extension \"GL_SGI_color_table\"\0" + "GL extension \"GL_SUNX_constant_data\"\0" + "GL extension \"GL_SUN_global_alpha\"\0" + "GL extension \"GL_SUN_mesh_array\"\0" + "GL extension \"GL_SUN_triangle_list\"\0" + "GL extension \"GL_SUN_vertex\"\0" + "OpenGL ES 1.0\0" + "OpenGL ES 2.0\0" + "OpenGL ES 3.0\0" + "OpenGL ES 3.1\0" + "OpenGL ES 3.2\0" + "always present\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* gl_provider_terminator, unused */ + 0, /* Desktop_OpenGL_1_0 */ + 19, /* Desktop_OpenGL_1_1 */ + 38, /* Desktop_OpenGL_1_2 */ + 57, /* Desktop_OpenGL_1_3 */ + 76, /* Desktop_OpenGL_1_4 */ + 95, /* Desktop_OpenGL_1_5 */ + 114, /* Desktop_OpenGL_2_0 */ + 133, /* Desktop_OpenGL_2_1 */ + 152, /* Desktop_OpenGL_3_0 */ + 171, /* Desktop_OpenGL_3_1 */ + 190, /* Desktop_OpenGL_3_2 */ + 209, /* Desktop_OpenGL_3_3 */ + 228, /* Desktop_OpenGL_4_0 */ + 247, /* Desktop_OpenGL_4_1 */ + 266, /* Desktop_OpenGL_4_2 */ + 285, /* Desktop_OpenGL_4_3 */ + 304, /* Desktop_OpenGL_4_4 */ + 323, /* Desktop_OpenGL_4_5 */ + 342, /* GL_extension_GL_3DFX_tbuffer */ + 373, /* GL_extension_GL_AMD_debug_output */ + 408, /* GL_extension_GL_AMD_draw_buffers_blend */ + 449, /* GL_extension_GL_AMD_gpu_shader_int64 */ + 488, /* GL_extension_GL_AMD_interleaved_elements */ + 531, /* GL_extension_GL_AMD_multi_draw_indirect */ + 573, /* GL_extension_GL_AMD_name_gen_delete */ + 611, /* GL_extension_GL_AMD_occlusion_query_event */ + 655, /* GL_extension_GL_AMD_performance_monitor */ + 697, /* GL_extension_GL_AMD_sample_positions */ + 736, /* GL_extension_GL_AMD_sparse_texture */ + 773, /* GL_extension_GL_AMD_stencil_operation_extended */ + 822, /* GL_extension_GL_AMD_vertex_shader_tessellator */ + 870, /* GL_extension_GL_ANGLE_framebuffer_blit */ + 911, /* GL_extension_GL_ANGLE_framebuffer_multisample */ + 959, /* GL_extension_GL_ANGLE_instanced_arrays */ + 1000, /* GL_extension_GL_ANGLE_translated_shader_source */ + 1049, /* GL_extension_GL_APPLE_copy_texture_levels */ + 1093, /* GL_extension_GL_APPLE_element_array */ + 1131, /* GL_extension_GL_APPLE_fence */ + 1161, /* GL_extension_GL_APPLE_flush_buffer_range */ + 1204, /* GL_extension_GL_APPLE_framebuffer_multisample */ + 1252, /* GL_extension_GL_APPLE_object_purgeable */ + 1293, /* GL_extension_GL_APPLE_sync */ + 1322, /* GL_extension_GL_APPLE_texture_range */ + 1360, /* GL_extension_GL_APPLE_vertex_array_object */ + 1404, /* GL_extension_GL_APPLE_vertex_array_range */ + 1447, /* GL_extension_GL_APPLE_vertex_program_evaluators */ + 1497, /* GL_extension_GL_ARB_ES2_compatibility */ + 1537, /* GL_extension_GL_ARB_ES3_1_compatibility */ + 1579, /* GL_extension_GL_ARB_ES3_2_compatibility */ + 1621, /* GL_extension_GL_ARB_base_instance */ + 1657, /* GL_extension_GL_ARB_bindless_texture */ + 1696, /* GL_extension_GL_ARB_blend_func_extended */ + 1738, /* GL_extension_GL_ARB_buffer_storage */ + 1775, /* GL_extension_GL_ARB_cl_event */ + 1806, /* GL_extension_GL_ARB_clear_buffer_object */ + 1848, /* GL_extension_GL_ARB_clear_texture */ + 1884, /* GL_extension_GL_ARB_clip_control */ + 1919, /* GL_extension_GL_ARB_color_buffer_float */ + 1960, /* GL_extension_GL_ARB_compute_shader */ + 1997, /* GL_extension_GL_ARB_compute_variable_group_size */ + 2047, /* GL_extension_GL_ARB_copy_buffer */ + 2081, /* GL_extension_GL_ARB_copy_image */ + 2114, /* GL_extension_GL_ARB_debug_output */ + 2149, /* GL_extension_GL_ARB_direct_state_access */ + 2191, /* GL_extension_GL_ARB_draw_buffers */ + 2226, /* GL_extension_GL_ARB_draw_buffers_blend */ + 2267, /* GL_extension_GL_ARB_draw_elements_base_vertex */ + 2315, /* GL_extension_GL_ARB_draw_indirect */ + 2351, /* GL_extension_GL_ARB_draw_instanced */ + 2388, /* GL_extension_GL_ARB_fragment_program */ + 2427, /* GL_extension_GL_ARB_framebuffer_no_attachments */ + 2476, /* GL_extension_GL_ARB_framebuffer_object */ + 2517, /* GL_extension_GL_ARB_geometry_shader4 */ + 2556, /* GL_extension_GL_ARB_get_program_binary */ + 2597, /* GL_extension_GL_ARB_get_texture_sub_image */ + 2641, /* GL_extension_GL_ARB_gpu_shader_fp64 */ + 2679, /* GL_extension_GL_ARB_gpu_shader_int64 */ + 2718, /* GL_extension_GL_ARB_imaging */ + 2748, /* GL_extension_GL_ARB_indirect_parameters */ + 2790, /* GL_extension_GL_ARB_instanced_arrays */ + 2829, /* GL_extension_GL_ARB_internalformat_query2 */ + 2873, /* GL_extension_GL_ARB_internalformat_query */ + 2916, /* GL_extension_GL_ARB_invalidate_subdata */ + 2957, /* GL_extension_GL_ARB_map_buffer_range */ + 2996, /* GL_extension_GL_ARB_matrix_palette */ + 3033, /* GL_extension_GL_ARB_multi_bind */ + 3066, /* GL_extension_GL_ARB_multi_draw_indirect */ + 3108, /* GL_extension_GL_ARB_multisample */ + 3142, /* GL_extension_GL_ARB_multitexture */ + 3177, /* GL_extension_GL_ARB_occlusion_query */ + 3215, /* GL_extension_GL_ARB_parallel_shader_compile */ + 3261, /* GL_extension_GL_ARB_point_parameters */ + 3300, /* GL_extension_GL_ARB_program_interface_query */ + 3346, /* GL_extension_GL_ARB_provoking_vertex */ + 3385, /* GL_extension_GL_ARB_robustness */ + 3418, /* GL_extension_GL_ARB_sample_locations */ + 3457, /* GL_extension_GL_ARB_sample_shading */ + 3494, /* GL_extension_GL_ARB_sampler_objects */ + 3532, /* GL_extension_GL_ARB_separate_shader_objects */ + 3578, /* GL_extension_GL_ARB_shader_atomic_counters */ + 3623, /* GL_extension_GL_ARB_shader_image_load_store */ + 3669, /* GL_extension_GL_ARB_shader_objects */ + 3706, /* GL_extension_GL_ARB_shader_storage_buffer_object */ + 3757, /* GL_extension_GL_ARB_shader_subroutine */ + 3797, /* GL_extension_GL_ARB_shading_language_include */ + 3844, /* GL_extension_GL_ARB_sparse_buffer */ + 3880, /* GL_extension_GL_ARB_sparse_texture */ + 3917, /* GL_extension_GL_ARB_sync */ + 3944, /* GL_extension_GL_ARB_tessellation_shader */ + 3986, /* GL_extension_GL_ARB_texture_barrier */ + 4024, /* GL_extension_GL_ARB_texture_buffer_object */ + 4068, /* GL_extension_GL_ARB_texture_buffer_range */ + 4111, /* GL_extension_GL_ARB_texture_compression */ + 4153, /* GL_extension_GL_ARB_texture_multisample */ + 4195, /* GL_extension_GL_ARB_texture_storage */ + 4233, /* GL_extension_GL_ARB_texture_storage_multisample */ + 4283, /* GL_extension_GL_ARB_texture_view */ + 4318, /* GL_extension_GL_ARB_timer_query */ + 4352, /* GL_extension_GL_ARB_transform_feedback2 */ + 4394, /* GL_extension_GL_ARB_transform_feedback3 */ + 4436, /* GL_extension_GL_ARB_transform_feedback_instanced */ + 4487, /* GL_extension_GL_ARB_transpose_matrix */ + 4526, /* GL_extension_GL_ARB_uniform_buffer_object */ + 4570, /* GL_extension_GL_ARB_vertex_array_object */ + 4612, /* GL_extension_GL_ARB_vertex_attrib_64bit */ + 4654, /* GL_extension_GL_ARB_vertex_attrib_binding */ + 4698, /* GL_extension_GL_ARB_vertex_blend */ + 4733, /* GL_extension_GL_ARB_vertex_buffer_object */ + 4776, /* GL_extension_GL_ARB_vertex_program */ + 4813, /* GL_extension_GL_ARB_vertex_shader */ + 4849, /* GL_extension_GL_ARB_vertex_type_2_10_10_10_rev */ + 4898, /* GL_extension_GL_ARB_viewport_array */ + 4935, /* GL_extension_GL_ARB_window_pos */ + 4968, /* GL_extension_GL_ATI_draw_buffers */ + 5003, /* GL_extension_GL_ATI_element_array */ + 5039, /* GL_extension_GL_ATI_envmap_bumpmap */ + 5076, /* GL_extension_GL_ATI_fragment_shader */ + 5114, /* GL_extension_GL_ATI_map_object_buffer */ + 5154, /* GL_extension_GL_ATI_pn_triangles */ + 5189, /* GL_extension_GL_ATI_separate_stencil */ + 5228, /* GL_extension_GL_ATI_vertex_array_object */ + 5270, /* GL_extension_GL_ATI_vertex_attrib_array_object */ + 5319, /* GL_extension_GL_ATI_vertex_streams */ + 5356, /* GL_extension_GL_EXT_base_instance */ + 5392, /* GL_extension_GL_EXT_bindable_uniform */ + 5431, /* GL_extension_GL_EXT_blend_color */ + 5465, /* GL_extension_GL_EXT_blend_equation_separate */ + 5511, /* GL_extension_GL_EXT_blend_func_extended */ + 5553, /* GL_extension_GL_EXT_blend_func_separate */ + 5595, /* GL_extension_GL_EXT_blend_minmax */ + 5630, /* GL_extension_GL_EXT_buffer_storage */ + 5667, /* GL_extension_GL_EXT_color_subtable */ + 5704, /* GL_extension_GL_EXT_compiled_vertex_array */ + 5748, /* GL_extension_GL_EXT_convolution */ + 5782, /* GL_extension_GL_EXT_coordinate_frame */ + 5821, /* GL_extension_GL_EXT_copy_image */ + 5854, /* GL_extension_GL_EXT_copy_texture */ + 5889, /* GL_extension_GL_EXT_cull_vertex */ + 5923, /* GL_extension_GL_EXT_debug_label */ + 5957, /* GL_extension_GL_EXT_debug_marker */ + 5992, /* GL_extension_GL_EXT_depth_bounds_test */ + 6032, /* GL_extension_GL_EXT_direct_state_access */ + 6074, /* GL_extension_GL_EXT_discard_framebuffer */ + 6116, /* GL_extension_GL_EXT_disjoint_timer_query */ + 6159, /* GL_extension_GL_EXT_draw_buffers2 */ + 6195, /* GL_extension_GL_EXT_draw_buffers */ + 6230, /* GL_extension_GL_EXT_draw_buffers_indexed */ + 6273, /* GL_extension_GL_EXT_draw_elements_base_vertex */ + 6321, /* GL_extension_GL_EXT_draw_instanced */ + 6358, /* GL_extension_GL_EXT_draw_range_elements */ + 6400, /* GL_extension_GL_EXT_fog_coord */ + 6432, /* GL_extension_GL_EXT_framebuffer_blit */ + 6471, /* GL_extension_GL_EXT_framebuffer_multisample */ + 6517, /* GL_extension_GL_EXT_framebuffer_object */ + 6558, /* GL_extension_GL_EXT_geometry_shader4 */ + 6597, /* GL_extension_GL_EXT_geometry_shader */ + 6635, /* GL_extension_GL_EXT_gpu_program_parameters */ + 6680, /* GL_extension_GL_EXT_gpu_shader4 */ + 6714, /* GL_extension_GL_EXT_histogram */ + 6746, /* GL_extension_GL_EXT_index_func */ + 6779, /* GL_extension_GL_EXT_index_material */ + 6816, /* GL_extension_GL_EXT_instanced_arrays */ + 6855, /* GL_extension_GL_EXT_light_texture */ + 6891, /* GL_extension_GL_EXT_map_buffer_range */ + 6930, /* GL_extension_GL_EXT_multi_draw_arrays */ + 6970, /* GL_extension_GL_EXT_multi_draw_indirect */ + 7012, /* GL_extension_GL_EXT_multisample */ + 7046, /* GL_extension_GL_EXT_multisampled_render_to_texture */ + 7099, /* GL_extension_GL_EXT_multiview_draw_buffers */ + 7144, /* GL_extension_GL_EXT_occlusion_query_boolean */ + 7190, /* GL_extension_GL_EXT_paletted_texture */ + 7229, /* GL_extension_GL_EXT_pixel_transform */ + 7267, /* GL_extension_GL_EXT_point_parameters */ + 7306, /* GL_extension_GL_EXT_polygon_offset */ + 7343, /* GL_extension_GL_EXT_polygon_offset_clamp */ + 7386, /* GL_extension_GL_EXT_primitive_bounding_box */ + 7431, /* GL_extension_GL_EXT_provoking_vertex */ + 7470, /* GL_extension_GL_EXT_raster_multisample */ + 7511, /* GL_extension_GL_EXT_robustness */ + 7544, /* GL_extension_GL_EXT_secondary_color */ + 7582, /* GL_extension_GL_EXT_separate_shader_objects */ + 7628, /* GL_extension_GL_EXT_shader_image_load_store */ + 7674, /* GL_extension_GL_EXT_sparse_texture */ + 7711, /* GL_extension_GL_EXT_stencil_clear_tag */ + 7751, /* GL_extension_GL_EXT_stencil_two_side */ + 7790, /* GL_extension_GL_EXT_subtexture */ + 7823, /* GL_extension_GL_EXT_tessellation_shader */ + 7865, /* GL_extension_GL_EXT_texture3D */ + 7897, /* GL_extension_GL_EXT_texture_array */ + 7933, /* GL_extension_GL_EXT_texture_border_clamp */ + 7976, /* GL_extension_GL_EXT_texture_buffer */ + 8013, /* GL_extension_GL_EXT_texture_buffer_object */ + 8057, /* GL_extension_GL_EXT_texture_filter_minmax */ + 8101, /* GL_extension_GL_EXT_texture_integer */ + 8139, /* GL_extension_GL_EXT_texture_object */ + 8176, /* GL_extension_GL_EXT_texture_perturb_normal */ + 8221, /* GL_extension_GL_EXT_texture_storage */ + 8259, /* GL_extension_GL_EXT_texture_view */ + 8294, /* GL_extension_GL_EXT_timer_query */ + 8328, /* GL_extension_GL_EXT_transform_feedback */ + 8369, /* GL_extension_GL_EXT_vertex_array */ + 8404, /* GL_extension_GL_EXT_vertex_attrib_64bit */ + 8446, /* GL_extension_GL_EXT_vertex_shader */ + 8482, /* GL_extension_GL_EXT_vertex_weighting */ + 8521, /* GL_extension_GL_EXT_x11_sync_object */ + 8559, /* GL_extension_GL_GREMEDY_frame_terminator */ + 8602, /* GL_extension_GL_GREMEDY_string_marker */ + 8642, /* GL_extension_GL_HP_image_transform */ + 8679, /* GL_extension_GL_IBM_multimode_draw_arrays */ + 8723, /* GL_extension_GL_IBM_static_data */ + 8757, /* GL_extension_GL_IBM_vertex_array_lists */ + 8798, /* GL_extension_GL_IMG_multisampled_render_to_texture */ + 8851, /* GL_extension_GL_IMG_user_clip_plane */ + 8889, /* GL_extension_GL_INGR_blend_func_separate */ + 8932, /* GL_extension_GL_INTEL_framebuffer_CMAA */ + 8973, /* GL_extension_GL_INTEL_map_texture */ + 9009, /* GL_extension_GL_INTEL_parallel_arrays */ + 9049, /* GL_extension_GL_INTEL_performance_query */ + 9091, /* GL_extension_GL_KHR_blend_equation_advanced */ + 9137, /* GL_extension_GL_KHR_debug */ + 9165, /* GL_extension_GL_KHR_robustness */ + 9198, /* GL_extension_GL_MESA_resize_buffers */ + 9236, /* GL_extension_GL_MESA_window_pos */ + 9270, /* GL_extension_GL_NVX_conditional_render */ + 9311, /* GL_extension_GL_NV_bindless_multi_draw_indirect */ + 9361, /* GL_extension_GL_NV_bindless_multi_draw_indirect_count */ + 9417, /* GL_extension_GL_NV_bindless_texture */ + 9455, /* GL_extension_GL_NV_blend_equation_advanced */ + 9500, /* GL_extension_GL_NV_command_list */ + 9534, /* GL_extension_GL_NV_conditional_render */ + 9574, /* GL_extension_GL_NV_conservative_raster */ + 9615, /* GL_extension_GL_NV_conservative_raster_dilate */ + 9663, /* GL_extension_GL_NV_copy_buffer */ + 9696, /* GL_extension_GL_NV_copy_image */ + 9728, /* GL_extension_GL_NV_coverage_sample */ + 9765, /* GL_extension_GL_NV_depth_buffer_float */ + 9805, /* GL_extension_GL_NV_draw_buffers */ + 9839, /* GL_extension_GL_NV_draw_instanced */ + 9875, /* GL_extension_GL_NV_draw_texture */ + 9909, /* GL_extension_GL_NV_evaluators */ + 9941, /* GL_extension_GL_NV_explicit_multisample */ + 9983, /* GL_extension_GL_NV_fence */ + 10010, /* GL_extension_GL_NV_fragment_coverage_to_color */ + 10058, /* GL_extension_GL_NV_fragment_program */ + 10096, /* GL_extension_GL_NV_framebuffer_blit */ + 10134, /* GL_extension_GL_NV_framebuffer_mixed_samples */ + 10181, /* GL_extension_GL_NV_framebuffer_multisample */ + 10226, /* GL_extension_GL_NV_framebuffer_multisample_coverage */ + 10280, /* GL_extension_GL_NV_geometry_program4 */ + 10319, /* GL_extension_GL_NV_gpu_program4 */ + 10353, /* GL_extension_GL_NV_gpu_program5 */ + 10387, /* GL_extension_GL_NV_gpu_shader5 */ + 10420, /* GL_extension_GL_NV_half_float */ + 10452, /* GL_extension_GL_NV_instanced_arrays */ + 10490, /* GL_extension_GL_NV_internalformat_sample_query */ + 10539, /* GL_extension_GL_NV_non_square_matrices */ + 10580, /* GL_extension_GL_NV_occlusion_query */ + 10617, /* GL_extension_GL_NV_parameter_buffer_object */ + 10662, /* GL_extension_GL_NV_path_rendering */ + 10698, /* GL_extension_GL_NV_pixel_data_range */ + 10736, /* GL_extension_GL_NV_point_sprite */ + 10770, /* GL_extension_GL_NV_polygon_mode */ + 10804, /* GL_extension_GL_NV_present_video */ + 10839, /* GL_extension_GL_NV_primitive_restart */ + 10878, /* GL_extension_GL_NV_read_buffer */ + 10911, /* GL_extension_GL_NV_register_combiners2 */ + 10952, /* GL_extension_GL_NV_register_combiners */ + 10992, /* GL_extension_GL_NV_sample_locations */ + 11030, /* GL_extension_GL_NV_shader_buffer_load */ + 11070, /* GL_extension_GL_NV_texture_barrier */ + 11107, /* GL_extension_GL_NV_texture_multisample */ + 11148, /* GL_extension_GL_NV_transform_feedback2 */ + 11189, /* GL_extension_GL_NV_transform_feedback */ + 11229, /* GL_extension_GL_NV_vdpau_interop */ + 11264, /* GL_extension_GL_NV_vertex_array_range */ + 11304, /* GL_extension_GL_NV_vertex_attrib_integer_64bit */ + 11353, /* GL_extension_GL_NV_vertex_buffer_unified_memory */ + 11403, /* GL_extension_GL_NV_vertex_program4 */ + 11440, /* GL_extension_GL_NV_vertex_program */ + 11476, /* GL_extension_GL_NV_video_capture */ + 11511, /* GL_extension_GL_NV_viewport_array */ + 11547, /* GL_extension_GL_OES_EGL_image */ + 11579, /* GL_extension_GL_OES_blend_equation_separate */ + 11625, /* GL_extension_GL_OES_blend_func_separate */ + 11667, /* GL_extension_GL_OES_blend_subtract */ + 11704, /* GL_extension_GL_OES_byte_coordinates */ + 11743, /* GL_extension_GL_OES_copy_image */ + 11776, /* GL_extension_GL_OES_draw_buffers_indexed */ + 11819, /* GL_extension_GL_OES_draw_elements_base_vertex */ + 11867, /* GL_extension_GL_OES_draw_texture */ + 11902, /* GL_extension_GL_OES_fixed_point */ + 11936, /* GL_extension_GL_OES_framebuffer_object */ + 11977, /* GL_extension_GL_OES_geometry_shader */ + 12015, /* GL_extension_GL_OES_get_program_binary */ + 12056, /* GL_extension_GL_OES_mapbuffer */ + 12088, /* GL_extension_GL_OES_matrix_palette */ + 12125, /* GL_extension_GL_OES_point_size_array */ + 12164, /* GL_extension_GL_OES_primitive_bounding_box */ + 12209, /* GL_extension_GL_OES_query_matrix */ + 12244, /* GL_extension_GL_OES_sample_shading */ + 12281, /* GL_extension_GL_OES_single_precision */ + 12320, /* GL_extension_GL_OES_tessellation_shader */ + 12362, /* GL_extension_GL_OES_texture_3D */ + 12395, /* GL_extension_GL_OES_texture_border_clamp */ + 12438, /* GL_extension_GL_OES_texture_buffer */ + 12475, /* GL_extension_GL_OES_texture_cube_map */ + 12514, /* GL_extension_GL_OES_texture_storage_multisample_2d_array */ + 12573, /* GL_extension_GL_OES_texture_view */ + 12608, /* GL_extension_GL_OES_vertex_array_object */ + 12650, /* GL_extension_GL_OVR_multiview */ + 12682, /* GL_extension_GL_PGI_misc_hints */ + 12715, /* GL_extension_GL_QCOM_alpha_test */ + 12749, /* GL_extension_GL_QCOM_driver_control */ + 12787, /* GL_extension_GL_QCOM_extended_get2 */ + 12824, /* GL_extension_GL_QCOM_extended_get */ + 12860, /* GL_extension_GL_QCOM_tiled_rendering */ + 12899, /* GL_extension_GL_SGIS_detail_texture */ + 12937, /* GL_extension_GL_SGIS_fog_function */ + 12973, /* GL_extension_GL_SGIS_multisample */ + 13008, /* GL_extension_GL_SGIS_pixel_texture */ + 13045, /* GL_extension_GL_SGIS_point_parameters */ + 13085, /* GL_extension_GL_SGIS_sharpen_texture */ + 13124, /* GL_extension_GL_SGIS_texture4D */ + 13157, /* GL_extension_GL_SGIS_texture_color_mask */ + 13199, /* GL_extension_GL_SGIS_texture_filter4 */ + 13238, /* GL_extension_GL_SGIX_async */ + 13267, /* GL_extension_GL_SGIX_flush_raster */ + 13303, /* GL_extension_GL_SGIX_fragment_lighting */ + 13344, /* GL_extension_GL_SGIX_framezoom */ + 13377, /* GL_extension_GL_SGIX_igloo_interface */ + 13416, /* GL_extension_GL_SGIX_instruments */ + 13451, /* GL_extension_GL_SGIX_list_priority */ + 13488, /* GL_extension_GL_SGIX_pixel_texture */ + 13525, /* GL_extension_GL_SGIX_polynomial_ffd */ + 13563, /* GL_extension_GL_SGIX_reference_plane */ + 13602, /* GL_extension_GL_SGIX_sprite */ + 13632, /* GL_extension_GL_SGIX_tag_sample_buffer */ + 13673, /* GL_extension_GL_SGI_color_table */ + 13707, /* GL_extension_GL_SUNX_constant_data */ + 13744, /* GL_extension_GL_SUN_global_alpha */ + 13779, /* GL_extension_GL_SUN_mesh_array */ + 13812, /* GL_extension_GL_SUN_triangle_list */ + 13848, /* GL_extension_GL_SUN_vertex */ + 13877, /* OpenGL_ES_1_0 */ + 13891, /* OpenGL_ES_2_0 */ + 13905, /* OpenGL_ES_3_0 */ + 13919, /* OpenGL_ES_3_1 */ + 13933, /* OpenGL_ES_3_2 */ + 13947, /* always_present */ +}; + +static const char entrypoint_strings[] = { + 'g', + 'l', + 'A', + 'c', + 'c', + 'u', + 'm', + 0, // glAccum + 'g', + 'l', + 'A', + 'c', + 'c', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glAccumxOES + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glActiveProgramEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glActiveShaderProgram + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glActiveShaderProgramEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glActiveStencilFaceEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glActiveTexture + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glActiveTextureARB + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glActiveVaryingNV + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '1', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp1ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '2', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp2ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '3', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp3ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 0, // glAlphaFunc + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'Q', + 'C', + 'O', + 'M', + 0, // glAlphaFuncQCOM + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'x', + 0, // glAlphaFuncx + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'x', + 'O', + 'E', + 'S', + 0, // glAlphaFuncxOES + 'g', + 'l', + 'A', + 'p', + 'p', + 'l', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'C', + 'M', + 'A', + 'A', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glApplyFramebufferAttachmentCMAAINTEL + 'g', + 'l', + 'A', + 'p', + 'p', + 'l', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glApplyTextureEXT + 'g', + 'l', + 'A', + 'r', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glAreProgramsResidentNV + 'g', + 'l', + 'A', + 'r', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 0, // glAreTexturesResident + 'g', + 'l', + 'A', + 'r', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glAreTexturesResidentEXT + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 0, // glArrayElement + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glArrayElementEXT + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glArrayObjectATI + 'g', + 'l', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glAsyncMarkerSGIX + 'g', + 'l', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glAttachObjectARB + 'g', + 'l', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glAttachShader + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 0, // glBegin + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 0, // glBeginConditionalRender + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glBeginConditionalRenderNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 'X', + 0, // glBeginConditionalRenderNVX + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glBeginFragmentShaderATI + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glBeginOcclusionQueryNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glBeginPerfMonitorAMD + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glBeginPerfQueryINTEL + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glBeginQuery + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glBeginQueryARB + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glBeginQueryEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glBeginQueryIndexed + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glBeginTransformFeedback + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'E', + 'X', + 'T', + 0, // glBeginTransformFeedbackEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glBeginTransformFeedbackNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBeginVertexShaderEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glBeginVideoCaptureNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBindAttribLocation + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glBindAttribLocationARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindBuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glBindBufferARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 0, // glBindBufferBase + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 'E', + 'X', + 'T', + 0, // glBindBufferBaseEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 'N', + 'V', + 0, // glBindBufferBaseNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glBindBufferOffsetEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'N', + 'V', + 0, // glBindBufferOffsetNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glBindBufferRange + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glBindBufferRangeEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glBindBufferRangeNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'B', + 'a', + 's', + 'e', + 0, // glBindBuffersBase + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glBindBuffersRange + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBindFragDataLocation + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glBindFragDataLocationEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glBindFragDataLocationIndexed + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glBindFragDataLocationIndexedEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glBindFragmentShaderATI + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindFramebuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindFramebufferEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glBindFramebufferOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glBindImageTexture + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindImageTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glBindImageTextures + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'L', + 'i', + 'g', + 'h', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindLightParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindMaterialParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindMultiTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glBindProgramARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glBindProgramNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glBindProgramPipeline + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glBindProgramPipelineEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindRenderbuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindRenderbufferEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glBindRenderbufferOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 0, // glBindSampler + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glBindSamplers + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindTexGenParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glBindTexture + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'U', + 'n', + 'i', + 't', + 0, // glBindTextureUnit + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'U', + 'n', + 'i', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindTextureUnitParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glBindTextures + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glBindTransformFeedback + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glBindTransformFeedbackNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glBindVertexArray + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glBindVertexArrayAPPLE + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'E', + 'S', + 0, // glBindVertexArrayOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindVertexBuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glBindVertexBuffers + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindVertexShaderEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glBindVideoCaptureStreamBufferNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glBindVideoCaptureStreamTextureNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glBinormal3bEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3bvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glBinormal3dEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3dvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glBinormal3fEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3fvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glBinormal3iEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3ivEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glBinormal3sEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3svEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBinormalPointerEXT + 'g', + 'l', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 0, // glBitmap + 'g', + 'l', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 'x', + 'O', + 'E', + 'S', + 0, // glBitmapxOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glBlendBarrier + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'K', + 'H', + 'R', + 0, // glBlendBarrierKHR + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glBlendBarrierNV + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glBlendColor + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glBlendColorEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glBlendColorxOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBlendEquation + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glBlendEquationEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendEquationIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'O', + 'E', + 'S', + 0, // glBlendEquationOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glBlendEquationSeparate + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glBlendEquationSeparateEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendEquationSeparateIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'O', + 'E', + 'S', + 0, // glBlendEquationSeparateOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 0, // glBlendEquationSeparatei + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendEquationSeparateiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendEquationSeparateiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendEquationSeparateiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 0, // glBlendEquationi + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendEquationiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendEquationiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendEquationiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 0, // glBlendFunc + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendFuncIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glBlendFuncSeparate + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glBlendFuncSeparateEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'N', + 'G', + 'R', + 0, // glBlendFuncSeparateINGR + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendFuncSeparateIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'O', + 'E', + 'S', + 0, // glBlendFuncSeparateOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 0, // glBlendFuncSeparatei + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendFuncSeparateiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendFuncSeparateiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendFuncSeparateiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 0, // glBlendFunci + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendFunciARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendFunciEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendFunciOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glBlendParameteriNV + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBlitFramebuffer + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glBlitFramebufferANGLE + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBlitFramebufferEXT + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glBlitFramebufferNV + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBlitNamedFramebuffer + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glBufferAddressRangeNV + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glBufferData + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glBufferDataARB + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glBufferPageCommitmentARB + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glBufferParameteriAPPLE + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glBufferStorage + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glBufferStorageEXT + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glBufferSubData + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glBufferSubDataARB + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glCallCommandListNV + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'L', + 'i', + 's', + 't', + 0, // glCallList + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'L', + 'i', + 's', + 't', + 's', + 0, // glCallLists + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glCheckFramebufferStatus + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glCheckFramebufferStatusEXT + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'O', + 'E', + 'S', + 0, // glCheckFramebufferStatusOES + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glCheckNamedFramebufferStatus + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glCheckNamedFramebufferStatusEXT + 'g', + 'l', + 'C', + 'l', + 'a', + 'm', + 'p', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glClampColor + 'g', + 'l', + 'C', + 'l', + 'a', + 'm', + 'p', + 'C', + 'o', + 'l', + 'o', + 'r', + 'A', + 'R', + 'B', + 0, // glClampColorARB + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 0, // glClear + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'A', + 'c', + 'c', + 'u', + 'm', + 0, // glClearAccum + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'A', + 'c', + 'c', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glClearAccumxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glClearBufferData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glClearBufferSubData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'i', + 0, // glClearBufferfi + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 0, // glClearBufferfv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glClearBufferiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'u', + 'i', + 'v', + 0, // glClearBufferuiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glClearColor + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'I', + 'i', + 'E', + 'X', + 'T', + 0, // glClearColorIiEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'I', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glClearColorIuiEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 0, // glClearColorx + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glClearColorxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 0, // glClearDepth + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'd', + 'N', + 'V', + 0, // glClearDepthdNV + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'f', + 0, // glClearDepthf + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'f', + 'O', + 'E', + 'S', + 0, // glClearDepthfOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'x', + 0, // glClearDepthx + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glClearDepthxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glClearIndex + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glClearNamedBufferData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glClearNamedBufferDataEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glClearNamedBufferSubData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glClearNamedBufferSubDataEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'i', + 0, // glClearNamedFramebufferfi + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 0, // glClearNamedFramebufferfv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glClearNamedFramebufferiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'u', + 'i', + 'v', + 0, // glClearNamedFramebufferuiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 0, // glClearStencil + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glClearTexImage + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glClearTexSubImage + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glClientActiveTexture + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glClientActiveTextureARB + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 'T', + 'I', + 0, // glClientActiveVertexStreamATI + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'E', + 'X', + 'T', + 0, // glClientAttribDefaultEXT + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // glClientWaitSync + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glClientWaitSyncAPPLE + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 0, // glClipControl + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // glClipPlane + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 0, // glClipPlanef + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'I', + 'M', + 'G', + 0, // glClipPlanefIMG + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glClipPlanefOES + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 0, // glClipPlanex + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'I', + 'M', + 'G', + 0, // glClipPlanexIMG + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glClipPlanexOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 0, // glColor3b + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 0, // glColor3bv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 0, // glColor3d + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 0, // glColor3dv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 0, // glColor3f + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor3fVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor3fVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 0, // glColor3fv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'N', + 'V', + 0, // glColor3hNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glColor3hvNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 0, // glColor3i + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 0, // glColor3iv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 0, // glColor3s + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 0, // glColor3sv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 0, // glColor3ub + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 0, // glColor3ubv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 0, // glColor3ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 0, // glColor3uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 0, // glColor3us + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 0, // glColor3usv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glColor3xOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glColor3xvOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'b', + 0, // glColor4b + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'b', + 'v', + 0, // glColor4bv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'd', + 0, // glColor4d + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'd', + 'v', + 0, // glColor4dv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 0, // glColor4f + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'v', + 0, // glColor4fv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'h', + 'N', + 'V', + 0, // glColor4hNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glColor4hvNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'i', + 0, // glColor4i + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'i', + 'v', + 0, // glColor4iv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 's', + 0, // glColor4s + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 's', + 'v', + 0, // glColor4sv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 0, // glColor4ub + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex2fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex2fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'v', + 0, // glColor4ubv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'i', + 0, // glColor4ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'i', + 'v', + 0, // glColor4uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 's', + 0, // glColor4us + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 's', + 'v', + 0, // glColor4usv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 0, // glColor4x + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glColor4xOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glColor4xvOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glColorFormatNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '1', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp1ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '2', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp2ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '3', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp3ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 0, // glColorMask + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glColorMaskIndexedEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 0, // glColorMaski + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 'E', + 'X', + 'T', + 0, // glColorMaskiEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 'O', + 'E', + 'S', + 0, // glColorMaskiOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 0, // glColorMaterial + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 0, // glColorP3ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glColorP3uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '4', + 'u', + 'i', + 0, // glColorP4ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glColorP4uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glColorPointer + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glColorPointerEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glColorPointerListIBM + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glColorPointervINTEL + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glColorSubTable + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glColorSubTableEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glColorTable + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glColorTableEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glColorTableParameterfv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 0, // glColorTableParameterfvSGI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glColorTableParameteriv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 0, // glColorTableParameterivSGI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glColorTableSGI + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glCombinerInputNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glCombinerOutputNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glCombinerParameterfNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glCombinerParameterfvNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glCombinerParameteriNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glCombinerParameterivNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'S', + 't', + 'a', + 'g', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glCombinerStageParameterfvNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'S', + 'e', + 'g', + 'm', + 'e', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glCommandListSegmentsNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glCompileCommandListNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glCompileShader + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glCompileShaderARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'I', + 'n', + 'c', + 'l', + 'u', + 'd', + 'e', + 'A', + 'R', + 'B', + 0, // glCompileShaderIncludeARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTexImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage1DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTexImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage2DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTexImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage3DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCompressedTexImage3DOES + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTexSubImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage1DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTexSubImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage2DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTexSubImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage3DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCompressedTexSubImage3DOES + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTextureSubImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTextureSubImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTextureSubImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 's', + 'e', + 'r', + 'v', + 'a', + 't', + 'i', + 'v', + 'e', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glConservativeRasterParameterfNV + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 0, // glConvolutionFilter1D + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glConvolutionFilter1DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glConvolutionFilter2D + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glConvolutionFilter2DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glConvolutionParameterf + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterfEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glConvolutionParameterfv + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterfvEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glConvolutionParameteri + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glConvolutionParameteriEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glConvolutionParameteriv + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterivEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glConvolutionParameterxOES + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glConvolutionParameterxvOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyBufferSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glCopyBufferSubDataNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glCopyColorSubTable + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glCopyColorSubTableEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glCopyColorTable + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glCopyColorTableSGI + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 0, // glCopyConvolutionFilter1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyConvolutionFilter1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glCopyConvolutionFilter2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyConvolutionFilter2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyImageSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glCopyImageSubDataEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glCopyImageSubDataNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'O', + 'E', + 'S', + 0, // glCopyImageSubDataOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyNamedBufferSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCopyPathNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glCopyPixels + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTexImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTexImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTexSubImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTexSubImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCopyTexSubImage3D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCopyTexSubImage3DOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glCopyTextureLevelsAPPLE + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTextureSubImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTextureSubImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCopyTextureSubImage3D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glCoverFillPathInstancedNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCoverFillPathNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glCoverStrokePathInstancedNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCoverStrokePathNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'a', + 's', + 'k', + 'N', + 'V', + 0, // glCoverageMaskNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glCoverageModulationNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'T', + 'a', + 'b', + 'l', + 'e', + 'N', + 'V', + 0, // glCoverageModulationTableNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'O', + 'p', + 'e', + 'r', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glCoverageOperationNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateBuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 's', + 'N', + 'V', + 0, // glCreateCommandListsNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateFramebuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glCreatePerfQueryINTEL + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glCreateProgram + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glCreateProgramObjectARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glCreateProgramPipelines + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glCreateQueries + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateRenderbuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glCreateSamplers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glCreateShader + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glCreateShaderObjectARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glCreateShaderProgramEXT + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'v', + 0, // glCreateShaderProgramv + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'v', + 'E', + 'X', + 'T', + 0, // glCreateShaderProgramvEXT + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glCreateStatesNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'F', + 'r', + 'o', + 'm', + 'C', + 'L', + 'e', + 'v', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glCreateSyncFromCLeventARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glCreateTextures + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glCreateTransformFeedbacks + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glCreateVertexArrays + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'F', + 'a', + 'c', + 'e', + 0, // glCullFace + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glCullParameterdvEXT + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glCullParameterfvEXT + 'g', + 'l', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'A', + 'R', + 'B', + 0, // glCurrentPaletteMatrixARB + 'g', + 'l', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'E', + 'S', + 0, // glCurrentPaletteMatrixOES + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 0, // glDebugMessageCallback + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'A', + 'M', + 'D', + 0, // glDebugMessageCallbackAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'A', + 'R', + 'B', + 0, // glDebugMessageCallbackARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'K', + 'H', + 'R', + 0, // glDebugMessageCallbackKHR + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 0, // glDebugMessageControl + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'A', + 'R', + 'B', + 0, // glDebugMessageControlARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'K', + 'H', + 'R', + 0, // glDebugMessageControlKHR + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'A', + 'M', + 'D', + 0, // glDebugMessageEnableAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 0, // glDebugMessageInsert + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'A', + 'M', + 'D', + 0, // glDebugMessageInsertAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'A', + 'R', + 'B', + 0, // glDebugMessageInsertARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'K', + 'H', + 'R', + 0, // glDebugMessageInsertKHR + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformSGIX + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + '3', + 'd', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformationMap3dSGIX + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + '3', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformationMap3fSGIX + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glDeleteAsyncMarkersSGIX + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteBuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteBuffersARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 's', + 'N', + 'V', + 0, // glDeleteCommandListsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteFencesAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteFencesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glDeleteFragmentShaderATI + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteFramebuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteFramebuffersEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteFramebuffersOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'L', + 'i', + 's', + 't', + 's', + 0, // glDeleteLists + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glDeleteNamedStringARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 's', + 'A', + 'M', + 'D', + 0, // glDeleteNamesAMD + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glDeleteObjectARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteOcclusionQueriesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glDeletePathsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glDeletePerfMonitorsAMD + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glDeletePerfQueryINTEL + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glDeleteProgram + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glDeleteProgramPipelines + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteProgramPipelinesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteProgramsARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glDeleteProgramsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glDeleteQueries + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteQueriesARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteQueriesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteRenderbuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteRenderbuffersEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteRenderbuffersOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glDeleteSamplers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glDeleteShader + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteStatesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // glDeleteSync + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteSyncAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glDeleteTextures + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteTexturesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glDeleteTransformFeedbacks + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 'N', + 'V', + 0, // glDeleteTransformFeedbacksNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glDeleteVertexArrays + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteVertexArraysAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteVertexArraysOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glDeleteVertexShaderEXT + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'B', + 'o', + 'u', + 'n', + 'd', + 's', + 'E', + 'X', + 'T', + 0, // glDepthBoundsEXT + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'B', + 'o', + 'u', + 'n', + 'd', + 's', + 'd', + 'N', + 'V', + 0, // glDepthBoundsdNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'F', + 'u', + 'n', + 'c', + 0, // glDepthFunc + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'M', + 'a', + 's', + 'k', + 0, // glDepthMask + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glDepthRange + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'r', + 'r', + 'a', + 'y', + 'f', + 'v', + 'N', + 'V', + 0, // glDepthRangeArrayfvNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glDepthRangeArrayv + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glDepthRangeIndexed + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'N', + 'V', + 0, // glDepthRangeIndexedfNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'd', + 'N', + 'V', + 0, // glDepthRangedNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'f', + 0, // glDepthRangef + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glDepthRangefOES + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'x', + 0, // glDepthRangex + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDepthRangexOES + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'c', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glDetachObjectARB + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'c', + 'h', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glDetachShader + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'i', + 'l', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glDetailTexFuncSGIS + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 0, // glDisable + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 0, // glDisableClientState + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDisableClientStateIndexedEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glDisableClientStateiEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'Q', + 'C', + 'O', + 'M', + 0, // glDisableDriverControlQCOM + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDisableIndexedEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glDisableVariantClientStateEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glDisableVertexArrayAttrib + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // glDisableVertexArrayAttribEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glDisableVertexArrayEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDisableVertexAttribAPPLE + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glDisableVertexAttribArray + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'R', + 'B', + 0, // glDisableVertexAttribArrayARB + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 0, // glDisablei + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glDisableiEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'N', + 'V', + 0, // glDisableiNV + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glDisableiOES + 'g', + 'l', + 'D', + 'i', + 's', + 'c', + 'a', + 'r', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glDiscardFramebufferEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 0, // glDispatchCompute + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 'i', + 'z', + 'e', + 'A', + 'R', + 'B', + 0, // glDispatchComputeGroupSizeARB + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDispatchComputeIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glDrawArrays + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glDrawArraysEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDrawArraysIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawArraysInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glDrawArraysInstancedANGLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'R', + 'B', + 0, // glDrawArraysInstancedARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawArraysInstancedBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawArraysInstancedBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawArraysInstancedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glDrawArraysInstancedNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glDrawBuffer + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDrawBuffers + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glDrawBuffersARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'T', + 'I', + 0, // glDrawBuffersATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDrawBuffersEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawBuffersIndexedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'N', + 'V', + 0, // glDrawBuffersNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glDrawCommandsAddressNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glDrawCommandsNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glDrawCommandsStatesAddressNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glDrawCommandsStatesNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDrawElementArrayAPPLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'T', + 'I', + 0, // glDrawElementArrayATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glDrawElements + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawElementsBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawElementsBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawElementsBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDrawElementsIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawElementsInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glDrawElementsInstancedANGLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'R', + 'B', + 0, // glDrawElementsInstancedARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawElementsInstancedBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawElementsInstancedBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawElementsInstancedBaseVertexBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseVertexBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawElementsInstancedBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glDrawElementsInstancedNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'M', + 'e', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'S', + 'U', + 'N', + 0, // glDrawMeshArraysSUN + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glDrawPixels + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDrawRangeElementArrayAPPLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'T', + 'I', + 0, // glDrawRangeElementArrayATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glDrawRangeElements + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawRangeElementsBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawRangeElementsBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawRangeElementsBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'E', + 'X', + 'T', + 0, // glDrawRangeElementsEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'f', + 'O', + 'E', + 'S', + 0, // glDrawTexfOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexfvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'i', + 'O', + 'E', + 'S', + 0, // glDrawTexiOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexivOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 's', + 'O', + 'E', + 'S', + 0, // glDrawTexsOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 's', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexsvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glDrawTextureNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawTexxOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexxvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glDrawTransformFeedback + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawTransformFeedbackInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glDrawTransformFeedbackNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 0, // glDrawTransformFeedbackStream + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawTransformFeedbackStreamInstanced + 'g', + 'l', + 'E', + 'G', + 'L', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'a', + 'r', + 'g', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glEGLImageTargetRenderbufferStorageOES + 'g', + 'l', + 'E', + 'G', + 'L', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'a', + 'r', + 'g', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'O', + 'E', + 'S', + 0, // glEGLImageTargetTexture2DOES + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 0, // glEdgeFlag + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glEdgeFlagFormatNV + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glEdgeFlagPointer + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glEdgeFlagPointerEXT + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glEdgeFlagPointerListIBM + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'v', + 0, // glEdgeFlagv + 'g', + 'l', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glElementPointerAPPLE + 'g', + 'l', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glElementPointerATI + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 0, // glEnable + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 0, // glEnableClientState + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glEnableClientStateIndexedEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glEnableClientStateiEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'Q', + 'C', + 'O', + 'M', + 0, // glEnableDriverControlQCOM + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glEnableIndexedEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glEnableVariantClientStateEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glEnableVertexArrayAttrib + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // glEnableVertexArrayAttribEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glEnableVertexArrayEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glEnableVertexAttribAPPLE + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glEnableVertexAttribArray + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'R', + 'B', + 0, // glEnableVertexAttribArrayARB + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 0, // glEnablei + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glEnableiEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'N', + 'V', + 0, // glEnableiNV + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glEnableiOES + 'g', + 'l', + 'E', + 'n', + 'd', + 0, // glEnd + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 0, // glEndConditionalRender + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glEndConditionalRenderNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 'X', + 0, // glEndConditionalRenderNVX + 'g', + 'l', + 'E', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glEndFragmentShaderATI + 'g', + 'l', + 'E', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 0, // glEndList + 'g', + 'l', + 'E', + 'n', + 'd', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glEndOcclusionQueryNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glEndPerfMonitorAMD + 'g', + 'l', + 'E', + 'n', + 'd', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glEndPerfQueryINTEL + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glEndQuery + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glEndQueryARB + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glEndQueryEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glEndQueryIndexed + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'i', + 'l', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glEndTilingQCOM + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glEndTransformFeedback + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'E', + 'X', + 'T', + 0, // glEndTransformFeedbackEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glEndTransformFeedbackNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glEndVertexShaderEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glEndVideoCaptureNV + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glEvalCoord1d + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glEvalCoord1dv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glEvalCoord1f + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glEvalCoord1fv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glEvalCoord1xOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glEvalCoord1xvOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glEvalCoord2d + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glEvalCoord2dv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glEvalCoord2f + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glEvalCoord2fv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glEvalCoord2xOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glEvalCoord2xvOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'a', + 'p', + 's', + 'N', + 'V', + 0, // glEvalMapsNV + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'e', + 's', + 'h', + '1', + 0, // glEvalMesh1 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'e', + 's', + 'h', + '2', + 0, // glEvalMesh2 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + '1', + 0, // glEvalPoint1 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + '2', + 0, // glEvalPoint2 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'u', + 'a', + 't', + 'e', + 'D', + 'e', + 'p', + 't', + 'h', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glEvaluateDepthValuesARB + 'g', + 'l', + 'E', + 'x', + 'e', + 'c', + 'u', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glExecuteProgramNV + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetBufferPointervQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetBuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetFramebuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetProgramBinarySourceQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetProgramsQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetRenderbuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetShadersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexLevelParameterivQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexSubImageQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexturesQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtIsProgramBinaryQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'T', + 'e', + 'x', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'O', + 'v', + 'e', + 'r', + 'r', + 'i', + 'd', + 'e', + 'i', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtTexObjectStateOverrideiQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'r', + 'a', + 'c', + 't', + 'C', + 'o', + 'm', + 'p', + 'o', + 'n', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glExtractComponentEXT + 'g', + 'l', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glFeedbackBuffer + 'g', + 'l', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glFeedbackBufferxOES + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // glFenceSync + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFenceSyncAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glFinalCombinerInputNV + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 0, // glFinish + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'A', + 's', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glFinishAsyncSGIX + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFinishFenceAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glFinishFenceNV + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFinishObjectAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'U', + 'N', + 'X', + 0, // glFinishTextureSUNX + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 0, // glFlush + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glFlushMappedBufferRange + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFlushMappedBufferRangeAPPLE + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glFlushMappedBufferRangeEXT + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glFlushMappedNamedBufferRange + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glFlushMappedNamedBufferRangeEXT + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'P', + 'i', + 'x', + 'e', + 'l', + 'D', + 'a', + 't', + 'a', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glFlushPixelDataRangeNV + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glFlushRasterSGIX + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'S', + 't', + 'a', + 't', + 'i', + 'c', + 'D', + 'a', + 't', + 'a', + 'I', + 'B', + 'M', + 0, // glFlushStaticDataIBM + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFlushVertexArrayRangeAPPLE + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glFlushVertexArrayRangeNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glFogCoordFormatNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glFogCoordPointer + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFogCoordPointerEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glFogCoordPointerListIBM + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 0, // glFogCoordd + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'E', + 'X', + 'T', + 0, // glFogCoorddEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'v', + 0, // glFogCoorddv + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glFogCoorddvEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 0, // glFogCoordf + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'E', + 'X', + 'T', + 0, // glFogCoordfEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'v', + 0, // glFogCoordfv + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glFogCoordfvEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'h', + 'N', + 'V', + 0, // glFogCoordhNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'h', + 'v', + 'N', + 'V', + 0, // glFogCoordhvNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glFogFuncSGIS + 'g', + 'l', + 'F', + 'o', + 'g', + 'f', + 0, // glFogf + 'g', + 'l', + 'F', + 'o', + 'g', + 'f', + 'v', + 0, // glFogfv + 'g', + 'l', + 'F', + 'o', + 'g', + 'i', + 0, // glFogi + 'g', + 'l', + 'F', + 'o', + 'g', + 'i', + 'v', + 0, // glFogiv + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 0, // glFogx + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'O', + 'E', + 'S', + 0, // glFogxOES + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'v', + 0, // glFogxv + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glFogxvOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentColorMaterialSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'C', + 'o', + 'l', + 'o', + 'r', + 'N', + 'V', + 0, // glFragmentCoverageColorNV + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModeliSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightiSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialiSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'e', + 'r', + 'm', + 'i', + 'n', + 'a', + 't', + 'o', + 'r', + 'G', + 'R', + 'E', + 'M', + 'E', + 'D', + 'Y', + 0, // glFrameTerminatorGREMEDY + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'Z', + 'o', + 'o', + 'm', + 'S', + 'G', + 'I', + 'X', + 0, // glFrameZoomSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferDrawBufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glFramebufferDrawBuffersEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glFramebufferParameteri + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferReadBufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glFramebufferRenderbuffer + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferRenderbufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glFramebufferRenderbufferOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glFramebufferSampleLocationsfvARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glFramebufferSampleLocationsfvNV + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glFramebufferTexture + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 0, // glFramebufferTexture1D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture1DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 0, // glFramebufferTexture2D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture2DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture2DMultisampleEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'I', + 'M', + 'G', + 0, // glFramebufferTexture2DMultisampleIMG + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'O', + 'E', + 'S', + 0, // glFramebufferTexture2DOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 0, // glFramebufferTexture3D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture3DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glFramebufferTexture3DOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureFaceARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureFaceEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 0, // glFramebufferTextureLayer + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureLayerARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureLayerEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 'v', + 'i', + 'e', + 'w', + 'O', + 'V', + 'R', + 0, // glFramebufferTextureMultiviewOVR + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'O', + 'E', + 'S', + 0, // glFramebufferTextureOES + 'g', + 'l', + 'F', + 'r', + 'e', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glFreeObjectBufferATI + 'g', + 'l', + 'F', + 'r', + 'o', + 'n', + 't', + 'F', + 'a', + 'c', + 'e', + 0, // glFrontFace + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 0, // glFrustum + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'f', + 0, // glFrustumf + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'f', + 'O', + 'E', + 'S', + 0, // glFrustumfOES + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'x', + 0, // glFrustumx + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glFrustumxOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glGenAsyncMarkersSGIX + 'g', + 'l', + 'G', + 'e', + 'n', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenBuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glGenBuffersARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGenFencesAPPLE + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glGenFencesNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'A', + 'T', + 'I', + 0, // glGenFragmentShadersATI + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenFramebuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenFramebuffersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glGenFramebuffersOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'L', + 'i', + 's', + 't', + 's', + 0, // glGenLists + 'g', + 'l', + 'G', + 'e', + 'n', + 'N', + 'a', + 'm', + 'e', + 's', + 'A', + 'M', + 'D', + 0, // glGenNamesAMD + 'g', + 'l', + 'G', + 'e', + 'n', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'N', + 'V', + 0, // glGenOcclusionQueriesNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glGenPathsNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glGenPerfMonitorsAMD + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glGenProgramPipelines + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenProgramPipelinesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'A', + 'R', + 'B', + 0, // glGenProgramsARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glGenProgramsNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glGenQueries + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glGenQueriesARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenQueriesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenRenderbuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenRenderbuffersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glGenRenderbuffersOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glGenSamplers + 'g', + 'l', + 'G', + 'e', + 'n', + 'S', + 'y', + 'm', + 'b', + 'o', + 'l', + 's', + 'E', + 'X', + 'T', + 0, // glGenSymbolsEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glGenTextures + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenTexturesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glGenTransformFeedbacks + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 'N', + 'V', + 0, // glGenTransformFeedbacksNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glGenVertexArrays + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGenVertexArraysAPPLE + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'O', + 'E', + 'S', + 0, // glGenVertexArraysOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenVertexShadersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 0, // glGenerateMipmap + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateMipmapEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'O', + 'E', + 'S', + 0, // glGenerateMipmapOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateMultiTexMipmapEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 0, // glGenerateTextureMipmap + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateTextureMipmapEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 'o', + 'm', + 'i', + 'c', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glGetActiveAtomicCounterBufferiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glGetActiveAttrib + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'R', + 'B', + 0, // glGetActiveAttribARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveSubroutineName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveSubroutineUniformName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetActiveSubroutineUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 0, // glGetActiveUniform + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'A', + 'R', + 'B', + 0, // glGetActiveUniformARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveUniformBlockName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'i', + 'v', + 0, // glGetActiveUniformBlockiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveUniformName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 's', + 'i', + 'v', + 0, // glGetActiveUniformsiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetActiveVaryingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'e', + 'd', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'A', + 'R', + 'B', + 0, // glGetAttachedObjectsARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'e', + 'd', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 0, // glGetAttachedShaders + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetAttribLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glGetAttribLocationARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetBooleanIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'i', + '_', + 'v', + 0, // glGetBooleani_v + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 0, // glGetBooleanv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + '6', + '4', + 'v', + 0, // glGetBufferParameteri64v + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetBufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetBufferParameterivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetBufferParameterui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetBufferPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'R', + 'B', + 0, // glGetBufferPointervARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'O', + 'E', + 'S', + 0, // glGetBufferPointervOES + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glGetBufferSubData + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glGetBufferSubDataARB + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // glGetClipPlane + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 0, // glGetClipPlanef + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glGetClipPlanefOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 0, // glGetClipPlanex + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glGetClipPlanexOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glGetColorTable + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glGetColorTableEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetColorTableParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetColorTableParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 0, // glGetColorTableParameterfvSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetColorTableParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetColorTableParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 0, // glGetColorTableParameterivSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glGetColorTableSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerInputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetCombinerInputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerOutputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetCombinerOutputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'S', + 't', + 'a', + 'g', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerStageParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'H', + 'e', + 'a', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glGetCommandHeaderNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetCompressedMultiTexImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetCompressedTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTextureImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetCompressedTextureImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTextureSubImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetConvolutionFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glGetConvolutionFilterEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetConvolutionParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetConvolutionParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetConvolutionParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetConvolutionParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetConvolutionParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'T', + 'a', + 'b', + 'l', + 'e', + 'N', + 'V', + 0, // glGetCoverageModulationTableNV + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 0, // glGetDebugMessageLog + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'A', + 'M', + 'D', + 0, // glGetDebugMessageLogAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'A', + 'R', + 'B', + 0, // glGetDebugMessageLogARB + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'K', + 'H', + 'R', + 0, // glGetDebugMessageLogKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 't', + 'a', + 'i', + 'l', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetDetailTexFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetDoubleIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'i', + '_', + 'v', + 0, // glGetDoublei_v + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetDoublei_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'v', + 0, // glGetDoublev + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glGetDriverControlStringQCOM + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glGetDriverControlsQCOM + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'r', + 'r', + 'o', + 'r', + 0, // glGetError + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetFenceivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetFinalCombinerInputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetFinalCombinerInputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'r', + 's', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetFirstPerfQueryIdINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'x', + 'e', + 'd', + 'v', + 0, // glGetFixedv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'x', + 'e', + 'd', + 'v', + 'O', + 'E', + 'S', + 0, // glGetFixedvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFloatIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 0, // glGetFloati_v + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFloati_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 'N', + 'V', + 0, // glGetFloati_vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 0, // glGetFloatv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'o', + 'g', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetFogFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetFragDataIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'I', + 'n', + 'd', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glGetFragDataIndexEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetFragDataLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glGetFragDataLocationEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentLightfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentLightivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentMaterialfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentMaterialivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetFramebufferAttachmentParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFramebufferAttachmentParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetFramebufferAttachmentParameterivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetFramebufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFramebufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glGetGraphicsResetStatus + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'A', + 'R', + 'B', + 0, // glGetGraphicsResetStatusARB + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glGetGraphicsResetStatusEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'K', + 'H', + 'R', + 0, // glGetGraphicsResetStatusKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glGetHistogram + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glGetHistogramEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetHistogramParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetHistogramParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetHistogramParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetHistogramParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetHistogramParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetImageHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetImageHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'H', + 'P', + 0, // glGetImageTransformParameterfvHP + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'H', + 'P', + 0, // glGetImageTransformParameterivHP + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 'A', + 'R', + 'B', + 0, // glGetInfoLogARB + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glGetInstrumentsSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'i', + '_', + 'v', + 0, // glGetInteger64i_v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'v', + 0, // glGetInteger64v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetInteger64vAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetIntegerIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 0, // glGetIntegeri_v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetIntegeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'i', + '_', + 'v', + 'N', + 'V', + 0, // glGetIntegerui64i_vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetIntegerui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 0, // glGetIntegerv + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetInternalformatSampleivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetInternalformati64v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'v', + 0, // glGetInternalformativ + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 0, // glGetLightfv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 0, // glGetLightiv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glGetLightxOES + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 0, // glGetLightxv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetLightxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetListParameterfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetListParameterivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMapAttribParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetMapAttribParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glGetMapControlPointsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMapParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetMapParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'd', + 'v', + 0, // glGetMapdv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'i', + 'v', + 0, // glGetMapiv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetMapxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 0, // glGetMaterialfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 0, // glGetMaterialiv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glGetMaterialxOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 0, // glGetMaterialxv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetMaterialxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glGetMinmax + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glGetMinmaxEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetMinmaxParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMinmaxParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetMinmaxParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMinmaxParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexEnvfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexEnvivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGendvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGenfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGenivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetMultiTexImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexLevelParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexLevelParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 0, // glGetMultisamplefv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMultisamplefvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + '6', + '4', + 'v', + 0, // glGetNamedBufferParameteri64v + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedBufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetNamedBufferParameterui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetNamedBufferPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glGetNamedBufferSubData + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferSubDataEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedFramebufferAttachmentParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedFramebufferAttachmentParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedFramebufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedFramebufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterdvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramStringEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedRenderbufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedRenderbufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glGetNamedStringARB + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetNamedStringivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'e', + 'x', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetNextPerfQueryIdINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetObjectBufferfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetObjectBufferivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glGetObjectLabel + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'E', + 'X', + 'T', + 0, // glGetObjectLabelEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glGetObjectLabelKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetObjectParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetObjectParameterivAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetObjectParameterivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glGetObjectPtrLabel + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glGetObjectPtrLabelKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'N', + 'V', + 0, // glGetOcclusionQueryivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetOcclusionQueryuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathColorGenfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathColorGenivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glGetPathCommandsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glGetPathCoordsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'D', + 'a', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glGetPathDashArrayNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'L', + 'e', + 'n', + 'g', + 't', + 'h', + 'N', + 'V', + 0, // glGetPathLengthNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 't', + 'r', + 'i', + 'c', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glGetPathMetricRangeNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 't', + 'r', + 'i', + 'c', + 's', + 'N', + 'V', + 0, // glGetPathMetricsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'S', + 'p', + 'a', + 'c', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetPathSpacingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathTexGenfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathTexGenivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfCounterInfoINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterDataAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterInfoAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterStringAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCountersAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorGroupStringAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorGroupsAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'a', + 't', + 'a', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryDataINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'B', + 'y', + 'N', + 'a', + 'm', + 'e', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryIdByNameINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'f', + 'o', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryInfoINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetPixelMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glGetPixelMapuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glGetPixelMapusv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'x', + 'v', + 0, // glGetPixelMapxv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glGetPixelTexGenParameterfvSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glGetPixelTexGenParameterivSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPixelTransformParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPixelTransformParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointerIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'K', + 'H', + 'R', + 0, // glGetPointervKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glGetPolygonStipple + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glGetProgramBinary + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'O', + 'E', + 'S', + 0, // glGetProgramBinaryOES + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramEnvParameterIivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramEnvParameterIuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramEnvParameterdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramEnvParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetProgramInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'I', + 'n', + 't', + 'e', + 'r', + 'f', + 'a', + 'c', + 'e', + 'i', + 'v', + 0, // glGetProgramInterfaceiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramLocalParameterIivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramLocalParameterIuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramLocalParameterdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramLocalParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glGetProgramNamedParameterdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramNamedParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glGetProgramParameterdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetProgramPipelineInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 'E', + 'X', + 'T', + 0, // glGetProgramPipelineInfoLogEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'i', + 'v', + 0, // glGetProgramPipelineiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetProgramPipelineivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetProgramResourceIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetProgramResourceLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetProgramResourceLocationIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glGetProgramResourceLocationIndexEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'N', + 'a', + 'm', + 'e', + 0, // glGetProgramResourceName + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramResourcefvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'i', + 'v', + 0, // glGetProgramResourceiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 'i', + 'v', + 0, // glGetProgramStageiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glGetProgramStringARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetProgramStringNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramSubroutineParameteruivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 0, // glGetProgramiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryBufferObjecti64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glGetQueryBufferObjectiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryBufferObjectui64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 0, // glGetQueryBufferObjectuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'i', + 'v', + 0, // glGetQueryIndexediv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryObjecti64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjecti64vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glGetQueryObjectiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryObjectivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryObjectui64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectui64vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 0, // glGetQueryObjectuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryObjectuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 0, // glGetQueryiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetRenderbufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetRenderbufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetRenderbufferParameterivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetSamplerParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetSamplerParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetSamplerParameterIivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetSamplerParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetSamplerParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetSamplerParameterIuivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetSamplerParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetSamplerParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetSeparableFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glGetSeparableFilterEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetShaderInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'e', + 'c', + 'i', + 's', + 'i', + 'o', + 'n', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glGetShaderPrecisionFormat + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 0, // glGetShaderSource + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glGetShaderSourceARB + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'i', + 'v', + 0, // glGetShaderiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'r', + 'p', + 'e', + 'n', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetSharpenTexFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'a', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'N', + 'V', + 0, // glGetStageIndexNV + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glGetString + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'i', + 0, // glGetStringi + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetSubroutineIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetSubroutineUniformLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'i', + 'v', + 0, // glGetSynciv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'i', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetSyncivAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetTexBumpParameterfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetTexBumpParameterivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 0, // glGetTexEnvfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 0, // glGetTexEnviv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 0, // glGetTexEnvxv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexEnvxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetTexFilterFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 0, // glGetTexGendv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 0, // glGetTexGenfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenfvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 0, // glGetTexGeniv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTexLevelParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTexLevelParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexLevelParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetTexParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTexParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterIivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetTexParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTexParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterIuivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetTexParameterPointervAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTexParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTexParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glGetTexParameterxv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetTextureHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetTextureHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTextureImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetTextureImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTextureLevelParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureLevelParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTextureLevelParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureLevelParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetTextureParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetTextureParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTextureParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTextureParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetTextureSamplerHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetTextureSamplerHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTextureSubImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'c', + 'k', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'i', + 'v', + 'N', + 'V', + 0, // glGetTrackMatrixivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 0, // glGetTransformFeedbackVarying + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glGetTransformFeedbackVaryingEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetTransformFeedbackVaryingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + '6', + '4', + '_', + 'v', + 0, // glGetTransformFeedbacki64_v + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + '_', + 'v', + 0, // glGetTransformFeedbacki_v + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + 'v', + 0, // glGetTransformFeedbackiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glGetTranslatedShaderSourceANGLE + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetUniformBlockIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'i', + 'z', + 'e', + 'E', + 'X', + 'T', + 0, // glGetUniformBufferSizeEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'I', + 'n', + 'd', + 'i', + 'c', + 'e', + 's', + 0, // glGetUniformIndices + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetUniformLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glGetUniformLocationARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glGetUniformOffsetEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'u', + 'i', + 'v', + 0, // glGetUniformSubroutineuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 0, // glGetUniformdv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 0, // glGetUniformfv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformi64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetUniformi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetUniformui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 0, // glGetUniformuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetUniformuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVariantArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVariantArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glGetVaryingLocationNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + '6', + '4', + 'i', + 'v', + 0, // glGetVertexArrayIndexed64iv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'i', + 'v', + 0, // glGetVertexArrayIndexediv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayIntegeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayPointeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'i', + 'v', + 0, // glGetVertexArrayiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVertexAttribArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVertexAttribArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'i', + 'v', + 0, // glGetVertexAttribIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'u', + 'i', + 'v', + 0, // glGetVertexAttribIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'd', + 'v', + 0, // glGetVertexAttribLdv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribLdvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribLi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribLui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribLui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetVertexAttribPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribPointervARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribPointervNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 0, // glGetVertexAttribdv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 0, // glGetVertexAttribfv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 0, // glGetVertexAttribiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'd', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'f', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVideoi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVideoui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideouivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glGetnColorTable + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnColorTableARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetnCompressedTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnCompressedTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetnConvolutionFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glGetnConvolutionFilterARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glGetnHistogram + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glGetnHistogramARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'd', + 'v', + 0, // glGetnMapdv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetnMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'i', + 'v', + 0, // glGetnMapiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glGetnMinmax + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'A', + 'R', + 'B', + 0, // glGetnMinmaxARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetnPixelMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glGetnPixelMapuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glGetnPixelMapusv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapusvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glGetnPolygonStipple + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnPolygonStippleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetnSeparableFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glGetnSeparableFilterARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetnTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 0, // glGetnUniformdv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 0, // glGetnUniformfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetnUniformfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformfvKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformi64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetnUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetnUniformivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformivKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 0, // glGetnUniformuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformuivKHR + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'b', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorbSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'd', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactordSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'f', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorfSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'i', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactoriSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 's', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorsSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 'b', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorubSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 'i', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactoruiSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 's', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorusSUN + 'g', + 'l', + 'H', + 'i', + 'n', + 't', + 0, // glHint + 'g', + 'l', + 'H', + 'i', + 'n', + 't', + 'P', + 'G', + 'I', + 0, // glHintPGI + 'g', + 'l', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glHistogram + 'g', + 'l', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glHistogramEXT + 'g', + 'l', + 'I', + 'g', + 'l', + 'o', + 'o', + 'I', + 'n', + 't', + 'e', + 'r', + 'f', + 'a', + 'c', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glIglooInterfaceSGIX + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'H', + 'P', + 0, // glImageTransformParameterfHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'H', + 'P', + 0, // glImageTransformParameterfvHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'H', + 'P', + 0, // glImageTransformParameteriHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'H', + 'P', + 0, // glImageTransformParameterivHP + 'g', + 'l', + 'I', + 'm', + 'p', + 'o', + 'r', + 't', + 'S', + 'y', + 'n', + 'c', + 'E', + 'X', + 'T', + 0, // glImportSyncEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glIndexFormatNV + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'E', + 'X', + 'T', + 0, // glIndexFuncEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'M', + 'a', + 's', + 'k', + 0, // glIndexMask + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glIndexMaterialEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glIndexPointer + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIndexPointerEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glIndexPointerListIBM + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'd', + 0, // glIndexd + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'd', + 'v', + 0, // glIndexdv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'f', + 0, // glIndexf + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'f', + 'v', + 0, // glIndexfv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'i', + 0, // glIndexi + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'i', + 'v', + 0, // glIndexiv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 's', + 0, // glIndexs + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 's', + 'v', + 0, // glIndexsv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 0, // glIndexub + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 'v', + 0, // glIndexubv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glIndexxOES + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glIndexxvOES + 'g', + 'l', + 'I', + 'n', + 'i', + 't', + 'N', + 'a', + 'm', + 'e', + 's', + 0, // glInitNames + 'g', + 'l', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'C', + 'o', + 'm', + 'p', + 'o', + 'n', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glInsertComponentEXT + 'g', + 'l', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glInsertEventMarkerEXT + 'g', + 'l', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glInstrumentsBufferSGIX + 'g', + 'l', + 'I', + 'n', + 't', + 'e', + 'r', + 'l', + 'e', + 'a', + 'v', + 'e', + 'd', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glInterleavedArrays + 'g', + 'l', + 'I', + 'n', + 't', + 'e', + 'r', + 'p', + 'o', + 'l', + 'a', + 't', + 'e', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glInterpolatePathsNV + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateBufferData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateBufferSubData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glInvalidateFramebuffer + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateNamedFramebufferData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateNamedFramebufferSubData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'S', + 'u', + 'b', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glInvalidateSubFramebuffer + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glInvalidateTexImage + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glInvalidateTexSubImage + 'g', + 'l', + 'I', + 's', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glIsAsyncMarkerSGIX + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsBuffer + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glIsBufferARB + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsBufferResidentNV + 'g', + 'l', + 'I', + 's', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glIsCommandListNV + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 0, // glIsEnabled + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glIsEnabledIndexedEXT + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 0, // glIsEnabledi + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'E', + 'X', + 'T', + 0, // glIsEnablediEXT + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'N', + 'V', + 0, // glIsEnablediNV + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'O', + 'E', + 'S', + 0, // glIsEnablediOES + 'g', + 'l', + 'I', + 's', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsFenceAPPLE + 'g', + 'l', + 'I', + 's', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glIsFenceNV + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsFramebuffer + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIsFramebufferEXT + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glIsFramebufferOES + 'g', + 'l', + 'I', + 's', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glIsImageHandleResidentARB + 'g', + 'l', + 'I', + 's', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsImageHandleResidentNV + 'g', + 'l', + 'I', + 's', + 'L', + 'i', + 's', + 't', + 0, // glIsList + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'A', + 'M', + 'D', + 0, // glIsNameAMD + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsNamedBufferResidentNV + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glIsNamedStringARB + 'g', + 'l', + 'I', + 's', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glIsObjectBufferATI + 'g', + 'l', + 'I', + 's', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glIsOcclusionQueryNV + 'g', + 'l', + 'I', + 's', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'o', + 'i', + 'n', + 't', + 'I', + 'n', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPointInFillPathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'o', + 'i', + 'n', + 't', + 'I', + 'n', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPointInStrokePathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glIsProgram + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glIsProgramARB + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glIsProgramNV + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glIsProgramPipeline + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glIsProgramPipelineEXT + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glIsQuery + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glIsQueryARB + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glIsQueryEXT + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsRenderbuffer + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIsRenderbufferEXT + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glIsRenderbufferOES + 'g', + 'l', + 'I', + 's', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 0, // glIsSampler + 'g', + 'l', + 'I', + 's', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glIsShader + 'g', + 'l', + 'I', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 'N', + 'V', + 0, // glIsStateNV + 'g', + 'l', + 'I', + 's', + 'S', + 'y', + 'n', + 'c', + 0, // glIsSync + 'g', + 'l', + 'I', + 's', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsSyncAPPLE + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glIsTexture + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glIsTextureEXT + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glIsTextureHandleResidentARB + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsTextureHandleResidentNV + 'g', + 'l', + 'I', + 's', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glIsTransformFeedback + 'g', + 'l', + 'I', + 's', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glIsTransformFeedbackNV + 'g', + 'l', + 'I', + 's', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glIsVariantEnabledEXT + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glIsVertexArray + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsVertexArrayAPPLE + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'E', + 'S', + 0, // glIsVertexArrayOES + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsVertexAttribEnabledAPPLE + 'g', + 'l', + 'L', + 'a', + 'b', + 'e', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glLabelObjectEXT + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'E', + 'n', + 'v', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glLightEnviSGIX + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 0, // glLightModelf + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'v', + 0, // glLightModelfv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 0, // glLightModeli + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'v', + 0, // glLightModeliv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 0, // glLightModelx + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glLightModelxOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'v', + 0, // glLightModelxv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glLightModelxvOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 0, // glLightf + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 0, // glLightfv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 0, // glLighti + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 0, // glLightiv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 0, // glLightx + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glLightxOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 0, // glLightxv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glLightxvOES + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glLineStipple + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 0, // glLineWidth + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 'x', + 0, // glLineWidthx + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glLineWidthxOES + 'g', + 'l', + 'L', + 'i', + 'n', + 'k', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glLinkProgram + 'g', + 'l', + 'L', + 'i', + 'n', + 'k', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glLinkProgramARB + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'B', + 'a', + 's', + 'e', + 0, // glListBase + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glListDrawCommandsStatesClientNV + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterfSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterfvSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameteriSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterivSGIX + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 0, // glLoadIdentity + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + 'S', + 'G', + 'I', + 'X', + 0, // glLoadIdentityDeformationMapSGIX + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glLoadMatrixd + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glLoadMatrixf + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 0, // glLoadMatrixx + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadMatrixxOES + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'N', + 'a', + 'm', + 'e', + 0, // glLoadName + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'F', + 'r', + 'o', + 'm', + 'M', + 'o', + 'd', + 'e', + 'l', + 'V', + 'i', + 'e', + 'w', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadPaletteFromModelViewMatrixOES + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glLoadProgramNV + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glLoadTransposeMatrixd + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 'A', + 'R', + 'B', + 0, // glLoadTransposeMatrixdARB + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glLoadTransposeMatrixf + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 'A', + 'R', + 'B', + 0, // glLoadTransposeMatrixfARB + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadTransposeMatrixxOES + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glLockArraysEXT + 'g', + 'l', + 'L', + 'o', + 'g', + 'i', + 'c', + 'O', + 'p', + 0, // glLogicOp + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeBufferNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeBufferResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeImageHandleNonResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeImageHandleNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeImageHandleResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeImageHandleResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeNamedBufferNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeNamedBufferResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeTextureHandleNonResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeTextureHandleNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeTextureHandleResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeTextureHandleResidentNV + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'd', + 0, // glMap1d + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'f', + 0, // glMap1f + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMap1xOES + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'd', + 0, // glMap2d + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'f', + 0, // glMap2f + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMap2xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glMapBuffer + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glMapBufferARB + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glMapBufferOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glMapBufferRange + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glMapBufferRangeEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glMapControlPointsNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'd', + 0, // glMapGrid1d + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'f', + 0, // glMapGrid1f + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMapGrid1xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'd', + 0, // glMapGrid2d + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'f', + 0, // glMapGrid2f + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMapGrid2xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glMapNamedBuffer + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMapNamedBufferEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glMapNamedBufferRange + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glMapNamedBufferRangeEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glMapObjectBufferATI + 'g', + 'l', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glMapParameterfvNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glMapParameterivNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glMapTexture2DINTEL + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib1dAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib1fAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib2dAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib2fAPPLE + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 0, // glMaterialf + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 0, // glMaterialfv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 0, // glMateriali + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 0, // glMaterialiv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 0, // glMaterialx + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glMaterialxOES + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 0, // glMaterialxv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMaterialxvOES + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'E', + 'X', + 'T', + 0, // glMatrixFrustumEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glMatrixIndexPointerARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glMatrixIndexPointerOES + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexubvARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexuivARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexusvARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + '3', + 'x', + '2', + 'f', + 'N', + 'V', + 0, // glMatrixLoad3x2fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixLoad3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 'E', + 'X', + 'T', + 0, // glMatrixLoadIdentityEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixLoadTranspose3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixLoadTransposedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixLoadTransposefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixLoaddEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixLoadfEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'o', + 'd', + 'e', + 0, // glMatrixMode + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + '3', + 'x', + '2', + 'f', + 'N', + 'V', + 0, // glMatrixMult3x2fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixMult3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixMultTranspose3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixMultTransposedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixMultTransposefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixMultdEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixMultfEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'r', + 't', + 'h', + 'o', + 'E', + 'X', + 'T', + 0, // glMatrixOrthoEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'P', + 'o', + 'p', + 'E', + 'X', + 'T', + 0, // glMatrixPopEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'P', + 'u', + 's', + 'h', + 'E', + 'X', + 'T', + 0, // glMatrixPushEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixRotatedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixRotatefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'S', + 'c', + 'a', + 'l', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixScaledEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'S', + 'c', + 'a', + 'l', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixScalefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixTranslatedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixTranslatefEXT + 'g', + 'l', + 'M', + 'a', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'r', + 'T', + 'h', + 'r', + 'e', + 'a', + 'd', + 's', + 'A', + 'R', + 'B', + 0, // glMaxShaderCompilerThreadsARB + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glMemoryBarrier + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'B', + 'y', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 0, // glMemoryBarrierByRegion + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMemoryBarrierEXT + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 0, // glMinSampleShading + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glMinSampleShadingARB + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 'O', + 'E', + 'S', + 0, // glMinSampleShadingOES + 'g', + 'l', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glMinmax + 'g', + 'l', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glMinmaxEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glMultMatrixd + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glMultMatrixf + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 0, // glMultMatrixx + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glMultMatrixxOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glMultTransposeMatrixd + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 'A', + 'R', + 'B', + 0, // glMultTransposeMatrixdARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glMultTransposeMatrixf + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 'A', + 'R', + 'B', + 0, // glMultTransposeMatrixfARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glMultTransposeMatrixxOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glMultiDrawArrays + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glMultiDrawArraysEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glMultiDrawArraysIndirect + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'A', + 'M', + 'D', + 0, // glMultiDrawArraysIndirectAMD + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glMultiDrawArraysIndirectBindlessCountNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glMultiDrawArraysIndirectBindlessNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'C', + 'o', + 'u', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMultiDrawArraysIndirectCountARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glMultiDrawArraysIndirectEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMultiDrawElementArrayAPPLE + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glMultiDrawElements + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glMultiDrawElementsBaseVertex + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsBaseVertexEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiDrawElementsBaseVertexOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glMultiDrawElementsIndirect + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'A', + 'M', + 'D', + 0, // glMultiDrawElementsIndirectAMD + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glMultiDrawElementsIndirectBindlessCountNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glMultiDrawElementsIndirectBindlessNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'C', + 'o', + 'u', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMultiDrawElementsIndirectCountARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsIndirectEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMultiDrawRangeElementArrayAPPLE + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'M', + 'o', + 'd', + 'e', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'B', + 'M', + 0, // glMultiModeDrawArraysIBM + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'M', + 'o', + 'd', + 'e', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'B', + 'M', + 0, // glMultiModeDrawElementsIBM + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexBufferEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glMultiTexCoord1d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glMultiTexCoord1dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glMultiTexCoord1f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glMultiTexCoord1fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord1hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord1hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 0, // glMultiTexCoord1i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 0, // glMultiTexCoord1iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 0, // glMultiTexCoord1s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 0, // glMultiTexCoord1sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glMultiTexCoord2d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glMultiTexCoord2dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glMultiTexCoord2f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glMultiTexCoord2fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord2hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord2hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 0, // glMultiTexCoord2i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 0, // glMultiTexCoord2iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 0, // glMultiTexCoord2s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 0, // glMultiTexCoord2sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 0, // glMultiTexCoord3d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 0, // glMultiTexCoord3dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 0, // glMultiTexCoord3f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 0, // glMultiTexCoord3fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord3hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord3hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 0, // glMultiTexCoord3i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 0, // glMultiTexCoord3iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 0, // glMultiTexCoord3s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 0, // glMultiTexCoord3sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 0, // glMultiTexCoord4d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 0, // glMultiTexCoord4dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 0, // glMultiTexCoord4f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 0, // glMultiTexCoord4fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord4hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord4hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 0, // glMultiTexCoord4i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 0, // glMultiTexCoord4iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 0, // glMultiTexCoord4s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 0, // glMultiTexCoord4sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 0, // glMultiTexCoord4x + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 0, // glMultiTexCoordP1ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP1uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 0, // glMultiTexCoordP2ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP2uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 0, // glMultiTexCoordP3ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP3uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 0, // glMultiTexCoordP4ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP4uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexCoordPointerEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexEnviEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'E', + 'X', + 'T', + 0, // glMultiTexGendEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGendvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexGenfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGenfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexGeniEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGenivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage1DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage2DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage3DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterIivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterIuivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexParameteriEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexRenderbufferEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage1DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage2DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage3DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glNamedBufferData + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedBufferDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glNamedBufferPageCommitmentARB + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glNamedBufferPageCommitmentEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glNamedBufferStorage + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedBufferStorageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glNamedBufferSubData + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedBufferSubDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedCopyBufferSubDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferDrawBuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glNamedFramebufferDrawBuffers + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glNamedFramebufferParameteri + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferParameteriEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferReadBuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferRenderbuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferRenderbufferEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glNamedFramebufferSampleLocationsfvARB + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glNamedFramebufferSampleLocationsfvNV + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glNamedFramebufferTexture + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture1DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture2DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture3DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureFaceEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 0, // glNamedFramebufferTextureLayer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureLayerEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4dEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4dvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4fEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4fvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4iEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4ivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4uiEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4uivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameters4fvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParametersI4ivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParametersI4uivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glNamedProgramStringEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glNamedRenderbufferStorage + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glNamedRenderbufferStorageMultisample + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageMultisampleCoverageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageMultisampleEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glNamedStringARB + 'g', + 'l', + 'N', + 'e', + 'w', + 'L', + 'i', + 's', + 't', + 0, // glNewList + 'g', + 'l', + 'N', + 'e', + 'w', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glNewObjectBufferATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 0, // glNormal3b + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'v', + 0, // glNormal3bv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 0, // glNormal3d + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'v', + 0, // glNormal3dv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 0, // glNormal3f + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glNormal3fVertex3fSUN + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glNormal3fVertex3fvSUN + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'v', + 0, // glNormal3fv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'h', + 'N', + 'V', + 0, // glNormal3hNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glNormal3hvNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 0, // glNormal3i + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'v', + 0, // glNormal3iv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 0, // glNormal3s + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'v', + 0, // glNormal3sv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 0, // glNormal3x + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glNormal3xOES + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glNormal3xvOES + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glNormalFormatNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + '3', + 'u', + 'i', + 0, // glNormalP3ui + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glNormalP3uiv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glNormalPointer + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNormalPointerEXT + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glNormalPointerListIBM + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glNormalPointervINTEL + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'b', + 'A', + 'T', + 'I', + 0, // glNormalStream3bATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'b', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3bvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'A', + 'T', + 'I', + 0, // glNormalStream3dATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3dvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'A', + 'T', + 'I', + 0, // glNormalStream3fATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3fvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'A', + 'T', + 'I', + 0, // glNormalStream3iATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3ivATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'A', + 'T', + 'I', + 0, // glNormalStream3sATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3svATI + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glObjectLabel + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glObjectLabelKHR + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glObjectPtrLabel + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glObjectPtrLabelKHR + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'u', + 'r', + 'g', + 'e', + 'a', + 'b', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glObjectPurgeableAPPLE + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'U', + 'n', + 'p', + 'u', + 'r', + 'g', + 'e', + 'a', + 'b', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glObjectUnpurgeableAPPLE + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 0, // glOrtho + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'f', + 0, // glOrthof + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'f', + 'O', + 'E', + 'S', + 0, // glOrthofOES + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'x', + 0, // glOrthox + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'x', + 'O', + 'E', + 'S', + 0, // glOrthoxOES + 'g', + 'l', + 'P', + 'N', + 'T', + 'r', + 'i', + 'a', + 'n', + 'g', + 'l', + 'e', + 's', + 'f', + 'A', + 'T', + 'I', + 0, // glPNTrianglesfATI + 'g', + 'l', + 'P', + 'N', + 'T', + 'r', + 'i', + 'a', + 'n', + 'g', + 'l', + 'e', + 's', + 'i', + 'A', + 'T', + 'I', + 0, // glPNTrianglesiATI + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'A', + 'T', + 'I', + 0, // glPassTexCoordATI + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'h', + 'r', + 'o', + 'u', + 'g', + 'h', + 0, // glPassThrough + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'h', + 'r', + 'o', + 'u', + 'g', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glPassThroughxOES + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glPatchParameterfv + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glPatchParameteri + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glPatchParameteriEXT + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'O', + 'E', + 'S', + 0, // glPatchParameteriOES + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathColorGenNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glPathCommandsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glPathCoordsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'v', + 'e', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'F', + 'u', + 'n', + 'c', + 'N', + 'V', + 0, // glPathCoverDepthFuncNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'D', + 'a', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathDashArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'F', + 'o', + 'g', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathFogGenNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathGlyphIndexArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPathGlyphIndexRangeNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPathGlyphRangeNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 's', + 'N', + 'V', + 0, // glPathGlyphsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathMemoryGlyphIndexArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glPathParameterfNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glPathParameterfvNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glPathParameteriNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glPathParameterivNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'N', + 'V', + 0, // glPathStencilDepthOffsetNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'N', + 'V', + 0, // glPathStencilFuncNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glPathStringNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 'u', + 'b', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glPathSubCommandsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 'u', + 'b', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glPathSubCoordsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathTexGenNV + 'g', + 'l', + 'P', + 'a', + 'u', + 's', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glPauseTransformFeedback + 'g', + 'l', + 'P', + 'a', + 'u', + 's', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glPauseTransformFeedbackNV + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'D', + 'a', + 't', + 'a', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPixelDataRangeNV + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glPixelMapfv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glPixelMapuiv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glPixelMapusv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'x', + 0, // glPixelMapx + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'f', + 0, // glPixelStoref + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'i', + 0, // glPixelStorei + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'x', + 0, // glPixelStorex + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterfSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterfvSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameteriSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterivSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'S', + 'G', + 'I', + 'X', + 0, // glPixelTexGenSGIX + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'f', + 0, // glPixelTransferf + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'i', + 0, // glPixelTransferi + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glPixelTransferxOES + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterfEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterfvEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameteriEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterivEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'Z', + 'o', + 'o', + 'm', + 0, // glPixelZoom + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'Z', + 'o', + 'o', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glPixelZoomxOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'A', + 'l', + 'o', + 'n', + 'g', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glPointAlongPathNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glPointParameterf + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'A', + 'R', + 'B', + 0, // glPointParameterfARB + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glPointParameterfEXT + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'S', + 0, // glPointParameterfSGIS + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glPointParameterfv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glPointParameterfvARB + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glPointParameterfvEXT + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPointParameterfvSGIS + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glPointParameteri + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glPointParameteriNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glPointParameteriv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glPointParameterivNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 0, // glPointParameterx + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glPointParameterxOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glPointParameterxv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glPointParameterxvOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 0, // glPointSize + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glPointSizePointerOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'x', + 0, // glPointSizex + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glPointSizexOES + 'g', + 'l', + 'P', + 'o', + 'l', + 'l', + 'A', + 's', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glPollAsyncSGIX + 'g', + 'l', + 'P', + 'o', + 'l', + 'l', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glPollInstrumentsSGIX + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 0, // glPolygonMode + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 'N', + 'V', + 0, // glPolygonModeNV + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 0, // glPolygonOffset + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'C', + 'l', + 'a', + 'm', + 'p', + 'E', + 'X', + 'T', + 0, // glPolygonOffsetClampEXT + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glPolygonOffsetEXT + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'x', + 0, // glPolygonOffsetx + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glPolygonOffsetxOES + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glPolygonStipple + 'g', + 'l', + 'P', + 'o', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPopAttrib + 'g', + 'l', + 'P', + 'o', + 'p', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPopClientAttrib + 'g', + 'l', + 'P', + 'o', + 'p', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 0, // glPopDebugGroup + 'g', + 'l', + 'P', + 'o', + 'p', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 'K', + 'H', + 'R', + 0, // glPopDebugGroupKHR + 'g', + 'l', + 'P', + 'o', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glPopGroupMarkerEXT + 'g', + 'l', + 'P', + 'o', + 'p', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 0, // glPopMatrix + 'g', + 'l', + 'P', + 'o', + 'p', + 'N', + 'a', + 'm', + 'e', + 0, // glPopName + 'g', + 'l', + 'P', + 'r', + 'e', + 's', + 'e', + 'n', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'D', + 'u', + 'a', + 'l', + 'F', + 'i', + 'l', + 'l', + 'N', + 'V', + 0, // glPresentFrameDualFillNV + 'g', + 'l', + 'P', + 'r', + 'e', + 's', + 'e', + 'n', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'K', + 'e', + 'y', + 'e', + 'd', + 'N', + 'V', + 0, // glPresentFrameKeyedNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 0, // glPrimitiveBoundingBox + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'A', + 'R', + 'B', + 0, // glPrimitiveBoundingBoxARB + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'E', + 'X', + 'T', + 0, // glPrimitiveBoundingBoxEXT + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'O', + 'E', + 'S', + 0, // glPrimitiveBoundingBoxOES + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glPrimitiveRestartIndex + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'N', + 'V', + 0, // glPrimitiveRestartIndexNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'N', + 'V', + 0, // glPrimitiveRestartNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glPrioritizeTextures + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glPrioritizeTexturesEXT + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'x', + 'O', + 'E', + 'S', + 0, // glPrioritizeTexturesxOES + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glProgramBinary + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'O', + 'E', + 'S', + 0, // glProgramBinaryOES + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersIivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersIuivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersfvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4dARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4dvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4fARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4fvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'N', + 'V', + 0, // glProgramEnvParameterI4iNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParameterI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'N', + 'V', + 0, // glProgramEnvParameterI4uiNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParameterI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramEnvParameters4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParametersI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParametersI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4dARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4dvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4fARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4fvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'N', + 'V', + 0, // glProgramLocalParameterI4iNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParameterI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'N', + 'V', + 0, // glProgramLocalParameterI4uiNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParameterI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramLocalParameters4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParametersI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParametersI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'N', + 'V', + 0, // glProgramNamedParameter4dNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramNamedParameter4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'N', + 'V', + 0, // glProgramNamedParameter4fNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramNamedParameter4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'N', + 'V', + 0, // glProgramParameter4dNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramParameter4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'N', + 'V', + 0, // glProgramParameter4fNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramParameter4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glProgramParameteri + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'R', + 'B', + 0, // glProgramParameteriARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramParameteriEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramParameters4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramParameters4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 't', + 'h', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'I', + 'n', + 'p', + 'u', + 't', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glProgramPathFragmentInputGenNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glProgramStringARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramSubroutineParametersuivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 0, // glProgramUniform1d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform1dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 0, // glProgramUniform1dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 0, // glProgramUniform1f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform1fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 0, // glProgramUniform1fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 0, // glProgramUniform1i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform1i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform1i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform1i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform1i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform1iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 0, // glProgramUniform1iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 0, // glProgramUniform1ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform1ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform1ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform1ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform1ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform1uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 0, // glProgramUniform1uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 0, // glProgramUniform2d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform2dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 0, // glProgramUniform2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 0, // glProgramUniform2f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform2fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 0, // glProgramUniform2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 0, // glProgramUniform2i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform2i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform2i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform2i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform2i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform2iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 0, // glProgramUniform2iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 0, // glProgramUniform2ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform2ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform2ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform2ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform2ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform2uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 0, // glProgramUniform2uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 0, // glProgramUniform3d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform3dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 0, // glProgramUniform3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 0, // glProgramUniform3f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform3fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 0, // glProgramUniform3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 0, // glProgramUniform3i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform3i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform3i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform3i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform3i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform3iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 0, // glProgramUniform3iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 0, // glProgramUniform3ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform3ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform3ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform3ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform3ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform3uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 0, // glProgramUniform3uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 0, // glProgramUniform4d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform4dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 0, // glProgramUniform4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 0, // glProgramUniform4f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform4fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 0, // glProgramUniform4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 0, // glProgramUniform4i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform4i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform4i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform4i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform4i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform4iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 0, // glProgramUniform4iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 0, // glProgramUniform4ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform4ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform4ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform4ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform4ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform4uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 0, // glProgramUniform4uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniformHandleui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniformHandleui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniformHandleui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniformHandleui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix2x3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix2x3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix2x4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix2x4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix3x2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix3x2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix3x4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix3x4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix4x2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix4x2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix4x3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix4x3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniformui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniformui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'L', + 'i', + 'm', + 'i', + 't', + 'N', + 'V', + 0, // glProgramVertexLimitNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'v', + 'o', + 'k', + 'i', + 'n', + 'g', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glProvokingVertex + 'g', + 'l', + 'P', + 'r', + 'o', + 'v', + 'o', + 'k', + 'i', + 'n', + 'g', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glProvokingVertexEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPushAttrib + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPushClientAttrib + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'E', + 'X', + 'T', + 0, // glPushClientAttribDefaultEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 0, // glPushDebugGroup + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 'K', + 'H', + 'R', + 0, // glPushDebugGroupKHR + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'G', + 'r', + 'o', + 'u', + 'p', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glPushGroupMarkerEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 0, // glPushMatrix + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'N', + 'a', + 'm', + 'e', + 0, // glPushName + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 0, // glQueryCounter + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glQueryCounterEXT + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glQueryMatrixxOES + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + 'A', + 'M', + 'D', + 0, // glQueryObjectParameteruiAMD + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'd', + 0, // glRasterPos2d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 0, // glRasterPos2dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'f', + 0, // glRasterPos2f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 0, // glRasterPos2fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'i', + 0, // glRasterPos2i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 0, // glRasterPos2iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 's', + 0, // glRasterPos2s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 0, // glRasterPos2sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos2xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos2xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'd', + 0, // glRasterPos3d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 0, // glRasterPos3dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'f', + 0, // glRasterPos3f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 0, // glRasterPos3fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'i', + 0, // glRasterPos3i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 0, // glRasterPos3iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 's', + 0, // glRasterPos3s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 0, // glRasterPos3sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos3xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos3xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'd', + 0, // glRasterPos4d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'd', + 'v', + 0, // glRasterPos4dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'f', + 0, // glRasterPos4f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'f', + 'v', + 0, // glRasterPos4fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'i', + 0, // glRasterPos4i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'i', + 'v', + 0, // glRasterPos4iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 's', + 0, // glRasterPos4s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 's', + 'v', + 0, // glRasterPos4sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos4xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos4xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glRasterSamplesEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glReadBuffer + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glReadBufferIndexedEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glReadBufferNV + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glReadInstrumentsSGIX + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glReadPixels + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glReadnPixels + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'A', + 'R', + 'B', + 0, // glReadnPixelsARB + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'E', + 'X', + 'T', + 0, // glReadnPixelsEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'K', + 'H', + 'R', + 0, // glReadnPixelsKHR + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'd', + 0, // glRectd + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'd', + 'v', + 0, // glRectdv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'f', + 0, // glRectf + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'f', + 'v', + 0, // glRectfv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'i', + 0, // glRecti + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glRectiv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 's', + 0, // glRects + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 's', + 'v', + 0, // glRectsv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glRectxOES + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRectxvOES + 'g', + 'l', + 'R', + 'e', + 'f', + 'e', + 'r', + 'e', + 'n', + 'c', + 'e', + 'P', + 'l', + 'a', + 'n', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glReferencePlaneSGIX + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'r', + 0, // glReleaseShaderCompiler + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'M', + 'o', + 'd', + 'e', + 0, // glRenderMode + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glRenderbufferStorage + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glRenderbufferStorageEXT + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glRenderbufferStorageMultisample + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glRenderbufferStorageMultisampleANGLE + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glRenderbufferStorageMultisampleAPPLE + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glRenderbufferStorageMultisampleCoverageNV + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glRenderbufferStorageMultisampleEXT + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'I', + 'M', + 'G', + 0, // glRenderbufferStorageMultisampleIMG + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glRenderbufferStorageMultisampleNV + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glRenderbufferStorageOES + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'S', + 'U', + 'N', + 0, // glReplacementCodePointerSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'b', + 'S', + 'U', + 'N', + 0, // glReplacementCodeubSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'b', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeubvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4ubVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4ubVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuivSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 's', + 'S', + 'U', + 'N', + 0, // glReplacementCodeusSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 's', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeusvSUN + 'g', + 'l', + 'R', + 'e', + 'q', + 'u', + 'e', + 's', + 't', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glRequestResidentProgramsNV + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glResetHistogram + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glResetHistogramEXT + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glResetMinmax + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glResetMinmaxEXT + 'g', + 'l', + 'R', + 'e', + 's', + 'i', + 'z', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glResizeBuffersMESA + 'g', + 'l', + 'R', + 'e', + 's', + 'o', + 'l', + 'v', + 'e', + 'D', + 'e', + 'p', + 't', + 'h', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'N', + 'V', + 0, // glResolveDepthValuesNV + 'g', + 'l', + 'R', + 'e', + 's', + 'o', + 'l', + 'v', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glResolveMultisampleFramebufferAPPLE + 'g', + 'l', + 'R', + 'e', + 's', + 'u', + 'm', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glResumeTransformFeedback + 'g', + 'l', + 'R', + 'e', + 's', + 'u', + 'm', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glResumeTransformFeedbackNV + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'd', + 0, // glRotated + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'f', + 0, // glRotatef + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'x', + 0, // glRotatex + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glRotatexOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 0, // glSampleCoverage + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glSampleCoverageARB + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'x', + 0, // glSampleCoveragex + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glSampleCoveragexOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 'p', + 'A', + 'T', + 'I', + 0, // glSampleMapATI + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'E', + 'X', + 'T', + 0, // glSampleMaskEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'N', + 'V', + 0, // glSampleMaskIndexedNV + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'S', + 'G', + 'I', + 'S', + 0, // glSampleMaskSGIS + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'i', + 0, // glSampleMaski + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'P', + 'a', + 't', + 't', + 'e', + 'r', + 'n', + 'E', + 'X', + 'T', + 0, // glSamplePatternEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'P', + 'a', + 't', + 't', + 'e', + 'r', + 'n', + 'S', + 'G', + 'I', + 'S', + 0, // glSamplePatternSGIS + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glSamplerParameterIiv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSamplerParameterIivEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glSamplerParameterIivOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glSamplerParameterIuiv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSamplerParameterIuivEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glSamplerParameterIuivOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glSamplerParameterf + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glSamplerParameterfv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glSamplerParameteri + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glSamplerParameteriv + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'd', + 0, // glScaled + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'f', + 0, // glScalef + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'x', + 0, // glScalex + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glScalexOES + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 0, // glScissor + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glScissorArrayv + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 'N', + 'V', + 0, // glScissorArrayvNV + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glScissorIndexed + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'N', + 'V', + 0, // glScissorIndexedNV + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 0, // glScissorIndexedv + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'N', + 'V', + 0, // glScissorIndexedvNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 0, // glSecondaryColor3b + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3bEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 0, // glSecondaryColor3bv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3bvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 0, // glSecondaryColor3d + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3dEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 0, // glSecondaryColor3dv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3dvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 0, // glSecondaryColor3f + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3fEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 0, // glSecondaryColor3fv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3fvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'N', + 'V', + 0, // glSecondaryColor3hNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glSecondaryColor3hvNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 0, // glSecondaryColor3i + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3iEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 0, // glSecondaryColor3iv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ivEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 0, // glSecondaryColor3s + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3sEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 0, // glSecondaryColor3sv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3svEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 0, // glSecondaryColor3ub + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ubEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 0, // glSecondaryColor3ubv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ubvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 0, // glSecondaryColor3ui + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3uiEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 0, // glSecondaryColor3uiv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3uivEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 0, // glSecondaryColor3us + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3usEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 0, // glSecondaryColor3usv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3usvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glSecondaryColorFormatNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 0, // glSecondaryColorP3ui + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glSecondaryColorP3uiv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glSecondaryColorPointer + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glSecondaryColorPointerEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glSecondaryColorPointerListIBM + 'g', + 'l', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glSelectBuffer + 'g', + 'l', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glSelectPerfMonitorCountersAMD + 'g', + 'l', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glSeparableFilter2D + 'g', + 'l', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glSeparableFilter2DEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glSetFenceAPPLE + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glSetFenceNV + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'A', + 'T', + 'I', + 0, // glSetFragmentShaderConstantATI + 'g', + 'l', + 'S', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glSetInvariantEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glSetLocalConstantEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 'A', + 'M', + 'D', + 0, // glSetMultisamplefvAMD + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'M', + 'o', + 'd', + 'e', + 'l', + 0, // glShadeModel + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glShaderBinary + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '1', + 'E', + 'X', + 'T', + 0, // glShaderOp1EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '2', + 'E', + 'X', + 'T', + 0, // glShaderOp2EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '3', + 'E', + 'X', + 'T', + 0, // glShaderOp3EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 0, // glShaderSource + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glShaderSourceARB + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'B', + 'l', + 'o', + 'c', + 'k', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glShaderStorageBlockBinding + 'g', + 'l', + 'S', + 'h', + 'a', + 'r', + 'p', + 'e', + 'n', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glSharpenTexFuncSGIS + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterfSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterfvSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameteriSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterivSGIX + 'g', + 'l', + 'S', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glStartInstrumentsSGIX + 'g', + 'l', + 'S', + 't', + 'a', + 'r', + 't', + 'T', + 'i', + 'l', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glStartTilingQCOM + 'g', + 'l', + 'S', + 't', + 'a', + 't', + 'e', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glStateCaptureNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'a', + 'g', + 'E', + 'X', + 'T', + 0, // glStencilClearTagEXT + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilFillPathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilFillPathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 0, // glStencilFunc + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilFuncSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'A', + 'T', + 'I', + 0, // glStencilFuncSeparateATI + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'M', + 'a', + 's', + 'k', + 0, // glStencilMask + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'M', + 'a', + 's', + 'k', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilMaskSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 0, // glStencilOp + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilOpSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'A', + 'T', + 'I', + 0, // glStencilOpSeparateATI + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'V', + 'a', + 'l', + 'u', + 'e', + 'A', + 'M', + 'D', + 0, // glStencilOpValueAMD + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilStrokePathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilStrokePathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilThenCoverFillPathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilThenCoverFillPathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilThenCoverStrokePathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilThenCoverStrokePathNV + 'g', + 'l', + 'S', + 't', + 'o', + 'p', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glStopInstrumentsSGIX + 'g', + 'l', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'G', + 'R', + 'E', + 'M', + 'E', + 'D', + 'Y', + 0, // glStringMarkerGREMEDY + 'g', + 'l', + 'S', + 'u', + 'b', + 'p', + 'i', + 'x', + 'e', + 'l', + 'P', + 'r', + 'e', + 'c', + 'i', + 's', + 'i', + 'o', + 'n', + 'B', + 'i', + 'a', + 's', + 'N', + 'V', + 0, // glSubpixelPrecisionBiasNV + 'g', + 'l', + 'S', + 'w', + 'i', + 'z', + 'z', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glSwizzleEXT + 'g', + 'l', + 'S', + 'y', + 'n', + 'c', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glSyncTextureINTEL + 'g', + 'l', + 'T', + 'a', + 'g', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glTagSampleBufferSGIX + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glTangent3bEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3bvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glTangent3dEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3dvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glTangent3fEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3fvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glTangent3iEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3ivEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glTangent3sEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3svEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTangentPointerEXT + 'g', + 'l', + 'T', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'M', + 'a', + 's', + 'k', + '3', + 'D', + 'F', + 'X', + 0, // glTbufferMask3DFX + 'g', + 'l', + 'T', + 'e', + 's', + 's', + 'e', + 'l', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glTessellationFactorAMD + 'g', + 'l', + 'T', + 'e', + 's', + 's', + 'e', + 'l', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 'A', + 'M', + 'D', + 0, // glTessellationModeAMD + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTestFenceAPPLE + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glTestFenceNV + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTestObjectAPPLE + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glTexBuffer + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glTexBufferARB + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTexBufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glTexBufferOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTexBufferRange + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glTexBufferRangeEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glTexBufferRangeOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glTexBumpParameterfvATI + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glTexBumpParameterivATI + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord1bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord1bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glTexCoord1d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glTexCoord1dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glTexCoord1f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glTexCoord1fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'N', + 'V', + 0, // glTexCoord1hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord1hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 0, // glTexCoord1i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 0, // glTexCoord1iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 0, // glTexCoord1s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 0, // glTexCoord1sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord1xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord1xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord2bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord2bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glTexCoord2d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glTexCoord2dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glTexCoord2f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4ubVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4ubVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fNormal3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fNormal3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glTexCoord2fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'N', + 'V', + 0, // glTexCoord2hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord2hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 0, // glTexCoord2i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 0, // glTexCoord2iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 0, // glTexCoord2s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 0, // glTexCoord2sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord2xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord2xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord3bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord3bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 0, // glTexCoord3d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 0, // glTexCoord3dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 0, // glTexCoord3f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 0, // glTexCoord3fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'N', + 'V', + 0, // glTexCoord3hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord3hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 0, // glTexCoord3i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 0, // glTexCoord3iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 0, // glTexCoord3s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 0, // glTexCoord3sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord3xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord3xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord4bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord4bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 0, // glTexCoord4d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 0, // glTexCoord4dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 0, // glTexCoord4f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord4fColor4fNormal3fVertex4fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord4fColor4fNormal3fVertex4fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord4fVertex4fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord4fVertex4fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 0, // glTexCoord4fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'N', + 'V', + 0, // glTexCoord4hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord4hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 0, // glTexCoord4i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 0, // glTexCoord4iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 0, // glTexCoord4s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 0, // glTexCoord4sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord4xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord4xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glTexCoordFormatNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 0, // glTexCoordP1ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glTexCoordP1uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 0, // glTexCoordP2ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glTexCoordP2uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 0, // glTexCoordP3ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glTexCoordP3uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 0, // glTexCoordP4ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glTexCoordP4uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glTexCoordPointer + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTexCoordPointerEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glTexCoordPointerListIBM + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glTexCoordPointervINTEL + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 0, // glTexEnvf + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 0, // glTexEnvfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 0, // glTexEnvi + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 0, // glTexEnviv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 0, // glTexEnvx + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'O', + 'E', + 'S', + 0, // glTexEnvxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 0, // glTexEnvxv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexEnvxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glTexFilterFuncSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 0, // glTexGend + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 0, // glTexGendv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 0, // glTexGenf + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'O', + 'E', + 'S', + 0, // glTexGenfOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 0, // glTexGenfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenfvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 0, // glTexGeni + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'O', + 'E', + 'S', + 0, // glTexGeniOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 0, // glTexGeniv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'O', + 'E', + 'S', + 0, // glTexGenxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexImage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTexImage2DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexImage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTexImage3DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glTexImage3DOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '4', + 'D', + 'S', + 'G', + 'I', + 'S', + 0, // glTexImage4DSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glTexPageCommitmentARB + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glTexPageCommitmentEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glTexParameterIiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTexParameterIivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterIivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glTexParameterIuiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTexParameterIuivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterIuivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glTexParameterf + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glTexParameterfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glTexParameteri + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glTexParameteriv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 0, // glTexParameterx + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glTexParameterxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glTexParameterxv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glTexRenderbufferNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexStorage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexStorage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexStorage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexStorage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexStorage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'O', + 'E', + 'S', + 0, // glTexStorage3DMultisampleOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'S', + 'p', + 'a', + 'r', + 's', + 'e', + 'A', + 'M', + 'D', + 0, // glTexStorageSparseAMD + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexSubImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexSubImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexSubImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glTexSubImage3DOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '4', + 'D', + 'S', + 'G', + 'I', + 'S', + 0, // glTexSubImage4DSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glTextureBarrier + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glTextureBarrierNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glTextureBuffer + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTextureBufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTextureBufferRange + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureBufferRangeEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'S', + 'G', + 'I', + 'S', + 0, // glTextureColorMaskSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTextureImage2DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glTextureImage2DMultisampleNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTextureImage3DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glTextureImage3DMultisampleNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'i', + 'g', + 'h', + 't', + 'E', + 'X', + 'T', + 0, // glTextureLightEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glTextureMaterialEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glTextureNormalEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glTexturePageCommitmentEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glTextureParameterIiv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterIivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glTextureParameterIuiv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterIuivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glTextureParameterf + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glTextureParameterfEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glTextureParameterfv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterfvEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glTextureParameteri + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glTextureParameteriEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glTextureParameteriv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTextureRangeAPPLE + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTextureRenderbufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTextureStorage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTextureStorage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTextureStorage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureStorage2DMultisampleEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTextureStorage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTextureStorage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureStorage3DMultisampleEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'S', + 'p', + 'a', + 'r', + 's', + 'e', + 'A', + 'M', + 'D', + 0, // glTextureStorageSparseAMD + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTextureSubImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTextureSubImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTextureSubImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 0, // glTextureView + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 'E', + 'X', + 'T', + 0, // glTextureViewEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 'O', + 'E', + 'S', + 0, // glTextureViewOES + 'g', + 'l', + 'T', + 'r', + 'a', + 'c', + 'k', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'N', + 'V', + 0, // glTrackMatrixNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'N', + 'V', + 0, // glTransformFeedbackAttribsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 0, // glTransformFeedbackBufferBase + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTransformFeedbackBufferRange + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'N', + 'V', + 0, // glTransformFeedbackStreamAttribsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 0, // glTransformFeedbackVaryings + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 'E', + 'X', + 'T', + 0, // glTransformFeedbackVaryingsEXT + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 'N', + 'V', + 0, // glTransformFeedbackVaryingsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glTransformPathNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 0, // glTranslated + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'f', + 0, // glTranslatef + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'x', + 0, // glTranslatex + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glTranslatexOES + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 0, // glUniform1d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 0, // glUniform1dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 0, // glUniform1f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform1fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 0, // glUniform1fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 0, // glUniform1i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform1i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform1i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform1i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform1iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 0, // glUniform1iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 0, // glUniform1ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform1ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform1ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform1ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform1uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 0, // glUniform1uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform1uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 0, // glUniform2d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 0, // glUniform2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 0, // glUniform2f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform2fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 0, // glUniform2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 0, // glUniform2i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform2i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform2i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform2i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform2iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 0, // glUniform2iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 0, // glUniform2ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform2ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform2ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform2ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform2uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 0, // glUniform2uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform2uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 0, // glUniform3d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 0, // glUniform3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 0, // glUniform3f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform3fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 0, // glUniform3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 0, // glUniform3i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform3i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform3i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform3i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform3iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 0, // glUniform3iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 0, // glUniform3ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform3ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform3ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform3ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform3uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 0, // glUniform3uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform3uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 0, // glUniform4d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 0, // glUniform4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 0, // glUniform4f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform4fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 0, // glUniform4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 0, // glUniform4i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform4i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform4i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform4i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform4iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 0, // glUniform4iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 0, // glUniform4ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform4ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform4ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform4ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform4uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 0, // glUniform4uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform4uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glUniformBlockBinding + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glUniformBufferEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniformHandleui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniformHandleui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformHandleui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniformHandleui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix2fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix2x3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix2x3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix2x3fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix2x4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix2x4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix2x4fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix3fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix3x2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix3x2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix3x2fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix3x4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix3x4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix3x4fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix4fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix4x2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix4x2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix4x2fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix4x3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix4x3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix4x3fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 's', + 'u', + 'i', + 'v', + 0, // glUniformSubroutinesuiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniformui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniformui64vNV + 'g', + 'l', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glUnlockArraysEXT + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glUnmapBuffer + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glUnmapBufferARB + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glUnmapBufferOES + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glUnmapNamedBuffer + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glUnmapNamedBufferEXT + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glUnmapObjectBufferATI + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glUnmapTexture2DINTEL + 'g', + 'l', + 'U', + 'p', + 'd', + 'a', + 't', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glUpdateObjectBufferATI + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glUseProgram + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glUseProgramObjectARB + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 's', + 0, // glUseProgramStages + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glUseProgramStagesEXT + 'g', + 'l', + 'U', + 's', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glUseShaderProgramEXT + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'F', + 'i', + 'n', + 'i', + 'N', + 'V', + 0, // glVDPAUFiniNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'G', + 'e', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glVDPAUGetSurfaceivNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'I', + 'n', + 'i', + 't', + 'N', + 'V', + 0, // glVDPAUInitNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'I', + 's', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAUIsSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'M', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glVDPAUMapSurfacesNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAURegisterOutputSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAURegisterVideoSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'A', + 'c', + 'c', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glVDPAUSurfaceAccessNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'U', + 'n', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glVDPAUUnmapSurfacesNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'U', + 'n', + 'r', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAUUnregisterSurfaceNV + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glValidateProgram + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glValidateProgramARB + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glValidateProgramPipeline + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glValidateProgramPipelineEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glVariantArrayObjectATI + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVariantPointerEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantbvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantdvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantfvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantivEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantsvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantubvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantuivEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantusvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex2bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex2bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'd', + 0, // glVertex2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'd', + 'v', + 0, // glVertex2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 0, // glVertex2f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'v', + 0, // glVertex2fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'h', + 'N', + 'V', + 0, // glVertex2hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'i', + 0, // glVertex2i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'i', + 'v', + 0, // glVertex2iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 's', + 0, // glVertex2s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 's', + 'v', + 0, // glVertex2sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex2xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex2xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex3bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex3bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'd', + 0, // glVertex3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'd', + 'v', + 0, // glVertex3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 0, // glVertex3f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 0, // glVertex3fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'h', + 'N', + 'V', + 0, // glVertex3hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'i', + 0, // glVertex3i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'i', + 'v', + 0, // glVertex3iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 's', + 0, // glVertex3s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 's', + 'v', + 0, // glVertex3sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex3xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex3xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex4bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex4bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'd', + 0, // glVertex4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'd', + 'v', + 0, // glVertex4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 0, // glVertex4f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 0, // glVertex4fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'h', + 'N', + 'V', + 0, // glVertex4hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'i', + 0, // glVertex4i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'i', + 'v', + 0, // glVertex4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 's', + 0, // glVertex4s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 's', + 'v', + 0, // glVertex4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex4xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex4xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glVertexArrayAttribBinding + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribIFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribLFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayBindVertexBufferEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexArrayBindingDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayColorOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayEdgeFlagOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glVertexArrayElementBuffer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayFogCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayIndexOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayMultiTexCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayNormalOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glVertexArrayParameteriAPPLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glVertexArrayRangeAPPLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glVertexArrayRangeNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArraySecondaryColorOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayTexCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribBindingEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribIFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribIOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribLFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribLOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexBindingDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glVertexArrayVertexBuffer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glVertexArrayVertexBuffers + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 0, // glVertexAttrib1d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'N', + 'V', + 0, // glVertexAttrib1dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 0, // glVertexAttrib1dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 0, // glVertexAttrib1f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'N', + 'V', + 0, // glVertexAttrib1fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 0, // glVertexAttrib1fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'h', + 'N', + 'V', + 0, // glVertexAttrib1hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 0, // glVertexAttrib1s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'N', + 'V', + 0, // glVertexAttrib1sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 0, // glVertexAttrib1sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 0, // glVertexAttrib2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'N', + 'V', + 0, // glVertexAttrib2dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 0, // glVertexAttrib2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 0, // glVertexAttrib2f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'N', + 'V', + 0, // glVertexAttrib2fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 0, // glVertexAttrib2fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'h', + 'N', + 'V', + 0, // glVertexAttrib2hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 0, // glVertexAttrib2s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'N', + 'V', + 0, // glVertexAttrib2sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 0, // glVertexAttrib2sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 0, // glVertexAttrib3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'N', + 'V', + 0, // glVertexAttrib3dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 0, // glVertexAttrib3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 0, // glVertexAttrib3f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'N', + 'V', + 0, // glVertexAttrib3fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 0, // glVertexAttrib3fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'h', + 'N', + 'V', + 0, // glVertexAttrib3hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 0, // glVertexAttrib3s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'N', + 'V', + 0, // glVertexAttrib3sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 0, // glVertexAttrib3sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'b', + 'v', + 0, // glVertexAttrib4Nbv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NbvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'i', + 'v', + 0, // glVertexAttrib4Niv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 's', + 'v', + 0, // glVertexAttrib4Nsv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NsvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 0, // glVertexAttrib4Nub + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NubARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'v', + 0, // glVertexAttrib4Nubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NubvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'i', + 'v', + 0, // glVertexAttrib4Nuiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NuivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 's', + 'v', + 0, // glVertexAttrib4Nusv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NusvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'b', + 'v', + 0, // glVertexAttrib4bv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4bvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 0, // glVertexAttrib4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'N', + 'V', + 0, // glVertexAttrib4dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 0, // glVertexAttrib4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 0, // glVertexAttrib4f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'N', + 'V', + 0, // glVertexAttrib4fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 0, // glVertexAttrib4fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'h', + 'N', + 'V', + 0, // glVertexAttrib4hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'i', + 'v', + 0, // glVertexAttrib4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4ivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 0, // glVertexAttrib4s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'N', + 'V', + 0, // glVertexAttrib4sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 0, // glVertexAttrib4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'N', + 'V', + 0, // glVertexAttrib4ubNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 0, // glVertexAttrib4ubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4ubvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4ubvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttrib4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4uivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 's', + 'v', + 0, // glVertexAttrib4usv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4usvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glVertexAttribArrayObjectATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glVertexAttribBinding + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexAttribDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glVertexAttribDivisorANGLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'A', + 'R', + 'B', + 0, // glVertexAttribDivisorARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'N', + 'V', + 0, // glVertexAttribDivisorNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 0, // glVertexAttribI1i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'v', + 0, // glVertexAttribI1iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 0, // glVertexAttribI1ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'v', + 0, // glVertexAttribI1uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 0, // glVertexAttribI2i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'v', + 0, // glVertexAttribI2iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 0, // glVertexAttribI2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'v', + 0, // glVertexAttribI2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 0, // glVertexAttribI3i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'v', + 0, // glVertexAttribI3iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 0, // glVertexAttribI3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'v', + 0, // glVertexAttribI3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'b', + 'v', + 0, // glVertexAttribI4bv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4bvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 0, // glVertexAttribI4i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'v', + 0, // glVertexAttribI4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 's', + 'v', + 0, // glVertexAttribI4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4svEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'b', + 'v', + 0, // glVertexAttribI4ubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4ubvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 0, // glVertexAttribI4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttribI4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 's', + 'v', + 0, // glVertexAttribI4usv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4usvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribIFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribIFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribIPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribIPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 0, // glVertexAttribL1d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL1dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'v', + 0, // glVertexAttribL1dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL1dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL1i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL1i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glVertexAttribL1ui64ARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL1ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttribL1ui64vARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL1ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 0, // glVertexAttribL2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL2dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'v', + 0, // glVertexAttribL2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL2dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL2i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL2i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL2ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL2ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 0, // glVertexAttribL3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL3dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'v', + 0, // glVertexAttribL3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL3dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL3i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL3i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL3ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL3ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 0, // glVertexAttribL4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL4dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'v', + 0, // glVertexAttribL4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL4dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL4i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL4i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL4ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL4ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribLFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribLFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribLPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribLPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '1', + 'u', + 'i', + 0, // glVertexAttribP1ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glVertexAttribP1uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '2', + 'u', + 'i', + 0, // glVertexAttribP2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glVertexAttribP2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '3', + 'u', + 'i', + 0, // glVertexAttribP3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glVertexAttribP3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '4', + 'u', + 'i', + 0, // glVertexAttribP4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttribP4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'M', + 'D', + 0, // glVertexAttribParameteriAMD + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glVertexAttribPointerARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'N', + 'V', + 0, // glVertexAttribPointerNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'u', + 'b', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4ubvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexBindingDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexBlendARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'n', + 'v', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexBlendEnvfATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'n', + 'v', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexBlendEnviATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '2', + 'u', + 'i', + 0, // glVertexP2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glVertexP2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '3', + 'u', + 'i', + 0, // glVertexP3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glVertexP3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '4', + 'u', + 'i', + 0, // glVertexP4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glVertexP4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glVertexPointerListIBM + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glVertexPointervINTEL + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream1dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream1fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream1iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream1sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream2dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream2fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream2iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream2sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream3dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream3fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream3iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream3sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream4dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream4fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream4iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream4sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexWeightPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'E', + 'X', + 'T', + 0, // glVertexWeightfEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexWeightfvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'h', + 'N', + 'V', + 0, // glVertexWeighthNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexWeighthvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glVideoCaptureNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterdvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterfvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterivNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 0, // glViewport + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glViewportArrayv + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 'N', + 'V', + 0, // glViewportArrayvNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 0, // glViewportIndexedf + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'N', + 'V', + 0, // glViewportIndexedfNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'v', + 0, // glViewportIndexedfv + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'v', + 'N', + 'V', + 0, // glViewportIndexedfvNV + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // glWaitSync + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glWaitSyncAPPLE + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glWeightPathsNV + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glWeightPointerARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glWeightPointerOES + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightbvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightdvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightfvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightivARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightsvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightubvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightuivARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightusvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 0, // glWindowPos2d + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glWindowPos2dARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 0, // glWindowPos2dv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2dvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 0, // glWindowPos2f + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glWindowPos2fARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 0, // glWindowPos2fv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2fvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 0, // glWindowPos2i + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glWindowPos2iARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 0, // glWindowPos2iv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2ivARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 0, // glWindowPos2s + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glWindowPos2sARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 0, // glWindowPos2sv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2svARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2svMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 0, // glWindowPos3d + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glWindowPos3dARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 0, // glWindowPos3dv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3dvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 0, // glWindowPos3f + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glWindowPos3fARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 0, // glWindowPos3fv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3fvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 0, // glWindowPos3i + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glWindowPos3iARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 0, // glWindowPos3iv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3ivARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 0, // glWindowPos3s + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glWindowPos3sARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 0, // glWindowPos3sv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3svARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3svMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4svMESA + 'g', + 'l', + 'W', + 'r', + 'i', + 't', + 'e', + 'M', + 'a', + 's', + 'k', + 'E', + 'X', + 'T', + 0, // glWriteMaskEXT + 0 }; + +static void *gl_provider_resolver(const char *name, + const enum gl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != gl_provider_terminator; i++) { + switch (providers[i]) { + case Desktop_OpenGL_1_0: + if (epoxy_is_desktop_gl()) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 10); + break; + case Desktop_OpenGL_1_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 11) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 11); + break; + case Desktop_OpenGL_1_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 12) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 12); + break; + case Desktop_OpenGL_1_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 13) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 13); + break; + case Desktop_OpenGL_1_4: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 14) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 14); + break; + case Desktop_OpenGL_1_5: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 15) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 15); + break; + case Desktop_OpenGL_2_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 20) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 20); + break; + case Desktop_OpenGL_2_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 21) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 21); + break; + case Desktop_OpenGL_3_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 30) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 30); + break; + case Desktop_OpenGL_3_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 31) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 31); + break; + case Desktop_OpenGL_3_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 32) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 32); + break; + case Desktop_OpenGL_3_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 33) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 33); + break; + case Desktop_OpenGL_4_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 40) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 40); + break; + case Desktop_OpenGL_4_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 41) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 41); + break; + case Desktop_OpenGL_4_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 42) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 42); + break; + case Desktop_OpenGL_4_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 43) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 43); + break; + case Desktop_OpenGL_4_4: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 44) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 44); + break; + case Desktop_OpenGL_4_5: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 45) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 45); + break; + case GL_extension_GL_3DFX_tbuffer: + if (epoxy_conservative_has_gl_extension("GL_3DFX_tbuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_debug_output: + if (epoxy_conservative_has_gl_extension("GL_AMD_debug_output")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_draw_buffers_blend: + if (epoxy_conservative_has_gl_extension("GL_AMD_draw_buffers_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_gpu_shader_int64: + if (epoxy_conservative_has_gl_extension("GL_AMD_gpu_shader_int64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_interleaved_elements: + if (epoxy_conservative_has_gl_extension("GL_AMD_interleaved_elements")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_AMD_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_name_gen_delete: + if (epoxy_conservative_has_gl_extension("GL_AMD_name_gen_delete")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_occlusion_query_event: + if (epoxy_conservative_has_gl_extension("GL_AMD_occlusion_query_event")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_performance_monitor: + if (epoxy_conservative_has_gl_extension("GL_AMD_performance_monitor")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_sample_positions: + if (epoxy_conservative_has_gl_extension("GL_AMD_sample_positions")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_AMD_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_stencil_operation_extended: + if (epoxy_conservative_has_gl_extension("GL_AMD_stencil_operation_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_vertex_shader_tessellator: + if (epoxy_conservative_has_gl_extension("GL_AMD_vertex_shader_tessellator")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_translated_shader_source: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_translated_shader_source")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_copy_texture_levels: + if (epoxy_conservative_has_gl_extension("GL_APPLE_copy_texture_levels")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_element_array: + if (epoxy_conservative_has_gl_extension("GL_APPLE_element_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_fence: + if (epoxy_conservative_has_gl_extension("GL_APPLE_fence")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_flush_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_flush_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_APPLE_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_object_purgeable: + if (epoxy_conservative_has_gl_extension("GL_APPLE_object_purgeable")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_sync: + if (epoxy_conservative_has_gl_extension("GL_APPLE_sync")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_texture_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_texture_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_array_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_array_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_program_evaluators: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_program_evaluators")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES2_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES2_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES3_1_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES3_1_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES3_2_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES3_2_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_base_instance: + if (epoxy_conservative_has_gl_extension("GL_ARB_base_instance")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_bindless_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_bindless_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_blend_func_extended: + if (epoxy_conservative_has_gl_extension("GL_ARB_blend_func_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_buffer_storage: + if (epoxy_conservative_has_gl_extension("GL_ARB_buffer_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_cl_event: + if (epoxy_conservative_has_gl_extension("GL_ARB_cl_event")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clear_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_clear_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clear_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_clear_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clip_control: + if (epoxy_conservative_has_gl_extension("GL_ARB_clip_control")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_color_buffer_float: + if (epoxy_conservative_has_gl_extension("GL_ARB_color_buffer_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_compute_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_compute_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_compute_variable_group_size: + if (epoxy_conservative_has_gl_extension("GL_ARB_compute_variable_group_size")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_copy_buffer: + if (epoxy_conservative_has_gl_extension("GL_ARB_copy_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_copy_image: + if (epoxy_conservative_has_gl_extension("GL_ARB_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_debug_output: + if (epoxy_conservative_has_gl_extension("GL_ARB_debug_output")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_direct_state_access: + if (epoxy_conservative_has_gl_extension("GL_ARB_direct_state_access")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_buffers_blend: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_buffers_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_fragment_program: + if (epoxy_conservative_has_gl_extension("GL_ARB_fragment_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_framebuffer_no_attachments: + if (epoxy_conservative_has_gl_extension("GL_ARB_framebuffer_no_attachments")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_geometry_shader4: + if (epoxy_conservative_has_gl_extension("GL_ARB_geometry_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_get_program_binary: + if (epoxy_conservative_has_gl_extension("GL_ARB_get_program_binary")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_get_texture_sub_image: + if (epoxy_conservative_has_gl_extension("GL_ARB_get_texture_sub_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_gpu_shader_fp64: + if (epoxy_conservative_has_gl_extension("GL_ARB_gpu_shader_fp64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_gpu_shader_int64: + if (epoxy_conservative_has_gl_extension("GL_ARB_gpu_shader_int64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_imaging: + if (epoxy_conservative_has_gl_extension("GL_ARB_imaging")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_indirect_parameters: + if (epoxy_conservative_has_gl_extension("GL_ARB_indirect_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_ARB_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_internalformat_query2: + if (epoxy_conservative_has_gl_extension("GL_ARB_internalformat_query2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_internalformat_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_internalformat_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_invalidate_subdata: + if (epoxy_conservative_has_gl_extension("GL_ARB_invalidate_subdata")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_map_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_ARB_map_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_matrix_palette: + if (epoxy_conservative_has_gl_extension("GL_ARB_matrix_palette")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multi_bind: + if (epoxy_conservative_has_gl_extension("GL_ARB_multi_bind")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_ARB_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multitexture: + if (epoxy_conservative_has_gl_extension("GL_ARB_multitexture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_occlusion_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_occlusion_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_parallel_shader_compile: + if (epoxy_conservative_has_gl_extension("GL_ARB_parallel_shader_compile")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_ARB_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_program_interface_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_program_interface_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_provoking_vertex: + if (epoxy_conservative_has_gl_extension("GL_ARB_provoking_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_robustness: + if (epoxy_conservative_has_gl_extension("GL_ARB_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sample_locations: + if (epoxy_conservative_has_gl_extension("GL_ARB_sample_locations")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sample_shading: + if (epoxy_conservative_has_gl_extension("GL_ARB_sample_shading")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sampler_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_sampler_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_separate_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_separate_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_atomic_counters: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_atomic_counters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_image_load_store: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_image_load_store")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_storage_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_storage_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_subroutine: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_subroutine")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shading_language_include: + if (epoxy_conservative_has_gl_extension("GL_ARB_shading_language_include")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sparse_buffer: + if (epoxy_conservative_has_gl_extension("GL_ARB_sparse_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sync: + if (epoxy_conservative_has_gl_extension("GL_ARB_sync")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_barrier: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_barrier")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_compression: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_compression")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_storage: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_storage_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_storage_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_view: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_timer_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback2: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback3: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback3")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback_instanced: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transpose_matrix: + if (epoxy_conservative_has_gl_extension("GL_ARB_transpose_matrix")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_uniform_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_uniform_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_attrib_64bit: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_attrib_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_attrib_binding: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_attrib_binding")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_blend: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_program: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_type_2_10_10_10_rev: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_type_2_10_10_10_rev")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_viewport_array: + if (epoxy_conservative_has_gl_extension("GL_ARB_viewport_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_window_pos: + if (epoxy_conservative_has_gl_extension("GL_ARB_window_pos")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_ATI_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_element_array: + if (epoxy_conservative_has_gl_extension("GL_ATI_element_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_envmap_bumpmap: + if (epoxy_conservative_has_gl_extension("GL_ATI_envmap_bumpmap")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_fragment_shader: + if (epoxy_conservative_has_gl_extension("GL_ATI_fragment_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_map_object_buffer: + if (epoxy_conservative_has_gl_extension("GL_ATI_map_object_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_pn_triangles: + if (epoxy_conservative_has_gl_extension("GL_ATI_pn_triangles")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_separate_stencil: + if (epoxy_conservative_has_gl_extension("GL_ATI_separate_stencil")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_attrib_array_object: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_attrib_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_streams: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_streams")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_base_instance: + if (epoxy_conservative_has_gl_extension("GL_EXT_base_instance")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_bindable_uniform: + if (epoxy_conservative_has_gl_extension("GL_EXT_bindable_uniform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_color: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_equation_separate: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_equation_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_func_extended: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_func_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_minmax: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_minmax")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_buffer_storage: + if (epoxy_conservative_has_gl_extension("GL_EXT_buffer_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_color_subtable: + if (epoxy_conservative_has_gl_extension("GL_EXT_color_subtable")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_compiled_vertex_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_compiled_vertex_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_convolution: + if (epoxy_conservative_has_gl_extension("GL_EXT_convolution")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_coordinate_frame: + if (epoxy_conservative_has_gl_extension("GL_EXT_coordinate_frame")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_copy_image: + if (epoxy_conservative_has_gl_extension("GL_EXT_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_copy_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_copy_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_cull_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_cull_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_debug_label: + if (epoxy_conservative_has_gl_extension("GL_EXT_debug_label")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_debug_marker: + if (epoxy_conservative_has_gl_extension("GL_EXT_debug_marker")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_depth_bounds_test: + if (epoxy_conservative_has_gl_extension("GL_EXT_depth_bounds_test")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_direct_state_access: + if (epoxy_conservative_has_gl_extension("GL_EXT_direct_state_access")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_discard_framebuffer: + if (epoxy_conservative_has_gl_extension("GL_EXT_discard_framebuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_disjoint_timer_query: + if (epoxy_conservative_has_gl_extension("GL_EXT_disjoint_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers2: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers_indexed: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers_indexed")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_range_elements: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_range_elements")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_fog_coord: + if (epoxy_conservative_has_gl_extension("GL_EXT_fog_coord")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_geometry_shader4: + if (epoxy_conservative_has_gl_extension("GL_EXT_geometry_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_geometry_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_geometry_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_gpu_program_parameters: + if (epoxy_conservative_has_gl_extension("GL_EXT_gpu_program_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_gpu_shader4: + if (epoxy_conservative_has_gl_extension("GL_EXT_gpu_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_histogram: + if (epoxy_conservative_has_gl_extension("GL_EXT_histogram")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_index_func: + if (epoxy_conservative_has_gl_extension("GL_EXT_index_func")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_index_material: + if (epoxy_conservative_has_gl_extension("GL_EXT_index_material")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_EXT_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_light_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_light_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_map_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_EXT_map_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multi_draw_arrays: + if (epoxy_conservative_has_gl_extension("GL_EXT_multi_draw_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_EXT_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multisampled_render_to_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_multisampled_render_to_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multiview_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_EXT_multiview_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_occlusion_query_boolean: + if (epoxy_conservative_has_gl_extension("GL_EXT_occlusion_query_boolean")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_paletted_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_paletted_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_pixel_transform: + if (epoxy_conservative_has_gl_extension("GL_EXT_pixel_transform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_EXT_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_polygon_offset: + if (epoxy_conservative_has_gl_extension("GL_EXT_polygon_offset")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_polygon_offset_clamp: + if (epoxy_conservative_has_gl_extension("GL_EXT_polygon_offset_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_primitive_bounding_box: + if (epoxy_conservative_has_gl_extension("GL_EXT_primitive_bounding_box")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_provoking_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_provoking_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_raster_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_raster_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_robustness: + if (epoxy_conservative_has_gl_extension("GL_EXT_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_secondary_color: + if (epoxy_conservative_has_gl_extension("GL_EXT_secondary_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_separate_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_EXT_separate_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_shader_image_load_store: + if (epoxy_conservative_has_gl_extension("GL_EXT_shader_image_load_store")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_stencil_clear_tag: + if (epoxy_conservative_has_gl_extension("GL_EXT_stencil_clear_tag")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_stencil_two_side: + if (epoxy_conservative_has_gl_extension("GL_EXT_stencil_two_side")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_subtexture: + if (epoxy_conservative_has_gl_extension("GL_EXT_subtexture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture3D: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture3D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_border_clamp: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_border_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_buffer: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_filter_minmax: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_filter_minmax")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_integer: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_integer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_perturb_normal: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_perturb_normal")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_storage: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_view: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_timer_query: + if (epoxy_conservative_has_gl_extension("GL_EXT_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_transform_feedback: + if (epoxy_conservative_has_gl_extension("GL_EXT_transform_feedback")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_attrib_64bit: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_attrib_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_weighting: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_weighting")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_x11_sync_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_x11_sync_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_GREMEDY_frame_terminator: + if (epoxy_conservative_has_gl_extension("GL_GREMEDY_frame_terminator")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_GREMEDY_string_marker: + if (epoxy_conservative_has_gl_extension("GL_GREMEDY_string_marker")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_HP_image_transform: + if (epoxy_conservative_has_gl_extension("GL_HP_image_transform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_multimode_draw_arrays: + if (epoxy_conservative_has_gl_extension("GL_IBM_multimode_draw_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_static_data: + if (epoxy_conservative_has_gl_extension("GL_IBM_static_data")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_vertex_array_lists: + if (epoxy_conservative_has_gl_extension("GL_IBM_vertex_array_lists")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IMG_multisampled_render_to_texture: + if (epoxy_conservative_has_gl_extension("GL_IMG_multisampled_render_to_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IMG_user_clip_plane: + if (epoxy_conservative_has_gl_extension("GL_IMG_user_clip_plane")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INGR_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_INGR_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_framebuffer_CMAA: + if (epoxy_conservative_has_gl_extension("GL_INTEL_framebuffer_CMAA")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_map_texture: + if (epoxy_conservative_has_gl_extension("GL_INTEL_map_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_parallel_arrays: + if (epoxy_conservative_has_gl_extension("GL_INTEL_parallel_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_performance_query: + if (epoxy_conservative_has_gl_extension("GL_INTEL_performance_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_blend_equation_advanced: + if (epoxy_conservative_has_gl_extension("GL_KHR_blend_equation_advanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_debug: + if (epoxy_conservative_has_gl_extension("GL_KHR_debug")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_robustness: + if (epoxy_conservative_has_gl_extension("GL_KHR_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_MESA_resize_buffers: + if (epoxy_conservative_has_gl_extension("GL_MESA_resize_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_MESA_window_pos: + if (epoxy_conservative_has_gl_extension("GL_MESA_window_pos")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NVX_conditional_render: + if (epoxy_conservative_has_gl_extension("GL_NVX_conditional_render")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_multi_draw_indirect_count: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_multi_draw_indirect_count")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_texture: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_blend_equation_advanced: + if (epoxy_conservative_has_gl_extension("GL_NV_blend_equation_advanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_command_list: + if (epoxy_conservative_has_gl_extension("GL_NV_command_list")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conditional_render: + if (epoxy_conservative_has_gl_extension("GL_NV_conditional_render")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conservative_raster: + if (epoxy_conservative_has_gl_extension("GL_NV_conservative_raster")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conservative_raster_dilate: + if (epoxy_conservative_has_gl_extension("GL_NV_conservative_raster_dilate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_copy_buffer: + if (epoxy_conservative_has_gl_extension("GL_NV_copy_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_copy_image: + if (epoxy_conservative_has_gl_extension("GL_NV_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_coverage_sample: + if (epoxy_conservative_has_gl_extension("GL_NV_coverage_sample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_depth_buffer_float: + if (epoxy_conservative_has_gl_extension("GL_NV_depth_buffer_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_texture: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_evaluators: + if (epoxy_conservative_has_gl_extension("GL_NV_evaluators")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_explicit_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_explicit_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fence: + if (epoxy_conservative_has_gl_extension("GL_NV_fence")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fragment_coverage_to_color: + if (epoxy_conservative_has_gl_extension("GL_NV_fragment_coverage_to_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fragment_program: + if (epoxy_conservative_has_gl_extension("GL_NV_fragment_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_mixed_samples: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_mixed_samples")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_multisample_coverage: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_multisample_coverage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_geometry_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_geometry_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_program5: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_program5")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_shader5: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_shader5")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_half_float: + if (epoxy_conservative_has_gl_extension("GL_NV_half_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_NV_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_internalformat_sample_query: + if (epoxy_conservative_has_gl_extension("GL_NV_internalformat_sample_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_non_square_matrices: + if (epoxy_conservative_has_gl_extension("GL_NV_non_square_matrices")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_occlusion_query: + if (epoxy_conservative_has_gl_extension("GL_NV_occlusion_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_parameter_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_NV_parameter_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_path_rendering: + if (epoxy_conservative_has_gl_extension("GL_NV_path_rendering")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_pixel_data_range: + if (epoxy_conservative_has_gl_extension("GL_NV_pixel_data_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_point_sprite: + if (epoxy_conservative_has_gl_extension("GL_NV_point_sprite")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_polygon_mode: + if (epoxy_conservative_has_gl_extension("GL_NV_polygon_mode")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_present_video: + if (epoxy_conservative_has_gl_extension("GL_NV_present_video")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_primitive_restart: + if (epoxy_conservative_has_gl_extension("GL_NV_primitive_restart")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_read_buffer: + if (epoxy_conservative_has_gl_extension("GL_NV_read_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_register_combiners2: + if (epoxy_conservative_has_gl_extension("GL_NV_register_combiners2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_register_combiners: + if (epoxy_conservative_has_gl_extension("GL_NV_register_combiners")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_sample_locations: + if (epoxy_conservative_has_gl_extension("GL_NV_sample_locations")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_shader_buffer_load: + if (epoxy_conservative_has_gl_extension("GL_NV_shader_buffer_load")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_texture_barrier: + if (epoxy_conservative_has_gl_extension("GL_NV_texture_barrier")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_texture_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_texture_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_transform_feedback2: + if (epoxy_conservative_has_gl_extension("GL_NV_transform_feedback2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_transform_feedback: + if (epoxy_conservative_has_gl_extension("GL_NV_transform_feedback")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vdpau_interop: + if (epoxy_conservative_has_gl_extension("GL_NV_vdpau_interop")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_array_range: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_array_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_attrib_integer_64bit: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_attrib_integer_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_buffer_unified_memory: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_buffer_unified_memory")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_program: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_video_capture: + if (epoxy_conservative_has_gl_extension("GL_NV_video_capture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_viewport_array: + if (epoxy_conservative_has_gl_extension("GL_NV_viewport_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_EGL_image: + if (epoxy_conservative_has_gl_extension("GL_OES_EGL_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_equation_separate: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_equation_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_subtract: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_subtract")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_byte_coordinates: + if (epoxy_conservative_has_gl_extension("GL_OES_byte_coordinates")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_copy_image: + if (epoxy_conservative_has_gl_extension("GL_OES_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_buffers_indexed: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_buffers_indexed")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_texture: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_fixed_point: + if (epoxy_conservative_has_gl_extension("GL_OES_fixed_point")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_OES_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_geometry_shader: + if (epoxy_conservative_has_gl_extension("GL_OES_geometry_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_get_program_binary: + if (epoxy_conservative_has_gl_extension("GL_OES_get_program_binary")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_mapbuffer: + if (epoxy_conservative_has_gl_extension("GL_OES_mapbuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_matrix_palette: + if (epoxy_conservative_has_gl_extension("GL_OES_matrix_palette")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_point_size_array: + if (epoxy_conservative_has_gl_extension("GL_OES_point_size_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_primitive_bounding_box: + if (epoxy_conservative_has_gl_extension("GL_OES_primitive_bounding_box")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_query_matrix: + if (epoxy_conservative_has_gl_extension("GL_OES_query_matrix")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_sample_shading: + if (epoxy_conservative_has_gl_extension("GL_OES_sample_shading")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_single_precision: + if (epoxy_conservative_has_gl_extension("GL_OES_single_precision")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_OES_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_3D: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_3D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_border_clamp: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_border_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_buffer: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_cube_map: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_cube_map")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_storage_multisample_2d_array: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_storage_multisample_2d_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_view: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_OES_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OVR_multiview: + if (epoxy_conservative_has_gl_extension("GL_OVR_multiview")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_PGI_misc_hints: + if (epoxy_conservative_has_gl_extension("GL_PGI_misc_hints")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_alpha_test: + if (epoxy_conservative_has_gl_extension("GL_QCOM_alpha_test")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_driver_control: + if (epoxy_conservative_has_gl_extension("GL_QCOM_driver_control")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_extended_get2: + if (epoxy_conservative_has_gl_extension("GL_QCOM_extended_get2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_extended_get: + if (epoxy_conservative_has_gl_extension("GL_QCOM_extended_get")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_tiled_rendering: + if (epoxy_conservative_has_gl_extension("GL_QCOM_tiled_rendering")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_detail_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_detail_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_fog_function: + if (epoxy_conservative_has_gl_extension("GL_SGIS_fog_function")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_multisample: + if (epoxy_conservative_has_gl_extension("GL_SGIS_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_pixel_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_pixel_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_SGIS_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_sharpen_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_sharpen_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture4D: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture4D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture_color_mask: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture_color_mask")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture_filter4: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture_filter4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_async: + if (epoxy_conservative_has_gl_extension("GL_SGIX_async")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_flush_raster: + if (epoxy_conservative_has_gl_extension("GL_SGIX_flush_raster")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_fragment_lighting: + if (epoxy_conservative_has_gl_extension("GL_SGIX_fragment_lighting")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_framezoom: + if (epoxy_conservative_has_gl_extension("GL_SGIX_framezoom")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_igloo_interface: + if (epoxy_conservative_has_gl_extension("GL_SGIX_igloo_interface")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_instruments: + if (epoxy_conservative_has_gl_extension("GL_SGIX_instruments")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_list_priority: + if (epoxy_conservative_has_gl_extension("GL_SGIX_list_priority")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_pixel_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIX_pixel_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_polynomial_ffd: + if (epoxy_conservative_has_gl_extension("GL_SGIX_polynomial_ffd")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_reference_plane: + if (epoxy_conservative_has_gl_extension("GL_SGIX_reference_plane")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_sprite: + if (epoxy_conservative_has_gl_extension("GL_SGIX_sprite")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_tag_sample_buffer: + if (epoxy_conservative_has_gl_extension("GL_SGIX_tag_sample_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGI_color_table: + if (epoxy_conservative_has_gl_extension("GL_SGI_color_table")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUNX_constant_data: + if (epoxy_conservative_has_gl_extension("GL_SUNX_constant_data")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_global_alpha: + if (epoxy_conservative_has_gl_extension("GL_SUN_global_alpha")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_mesh_array: + if (epoxy_conservative_has_gl_extension("GL_SUN_mesh_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_triangle_list: + if (epoxy_conservative_has_gl_extension("GL_SUN_triangle_list")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_vertex: + if (epoxy_conservative_has_gl_extension("GL_SUN_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_1_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 10 && epoxy_gl_version() < 20) + return epoxy_gles1_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_2_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 20) + return epoxy_gles2_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 30) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_1: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 31) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_2: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 32) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case always_present: + if (true) + return epoxy_get_bootstrap_proc_address(entrypoint_strings + entrypoints[i]); + break; + case gl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != gl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == gl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +gl_single_resolver(const enum gl_provider provider, const uint32_t entrypoint_offset); + +static void * +gl_single_resolver(const enum gl_provider provider, const uint32_t entrypoint_offset) +{ + const enum gl_provider providers[] = { + provider, + gl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return gl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNGLACCUMPROC +epoxy_glAccum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 0 /* glAccum */); +} + +static PFNGLACCUMXOESPROC +epoxy_glAccumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 8 /* glAccumxOES */); +} + +static PFNGLACTIVEPROGRAMEXTPROC +epoxy_glActiveProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 20 /* glActiveProgramEXT */); +} + +static PFNGLACTIVESHADERPROGRAMPROC +epoxy_glActiveShaderProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39 /* "glActiveShaderProgram" */, + 39 /* "glActiveShaderProgram" */, + 39 /* "glActiveShaderProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 39 /* "glActiveShaderProgram" */, + providers, entrypoints); +} + +static PFNGLACTIVESHADERPROGRAMEXTPROC +epoxy_glActiveShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 61 /* glActiveShaderProgramEXT */); +} + +static PFNGLACTIVESTENCILFACEEXTPROC +epoxy_glActiveStencilFaceEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_stencil_two_side, 86 /* glActiveStencilFaceEXT */); +} + +static PFNGLACTIVETEXTUREPROC +epoxy_glActiveTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 125 /* "glActiveTextureARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 109 /* "glActiveTexture" */, + providers, entrypoints); +} + +static PFNGLACTIVETEXTUREARBPROC +epoxy_glActiveTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 125 /* "glActiveTextureARB" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 125 /* "glActiveTextureARB" */, + providers, entrypoints); +} + +static PFNGLACTIVEVARYINGNVPROC +epoxy_glActiveVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 144 /* glActiveVaryingNV */); +} + +static PFNGLALPHAFRAGMENTOP1ATIPROC +epoxy_glAlphaFragmentOp1ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 162 /* glAlphaFragmentOp1ATI */); +} + +static PFNGLALPHAFRAGMENTOP2ATIPROC +epoxy_glAlphaFragmentOp2ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 184 /* glAlphaFragmentOp2ATI */); +} + +static PFNGLALPHAFRAGMENTOP3ATIPROC +epoxy_glAlphaFragmentOp3ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 206 /* glAlphaFragmentOp3ATI */); +} + +static PFNGLALPHAFUNCPROC +epoxy_glAlphaFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 228 /* "glAlphaFunc" */, + 228 /* "glAlphaFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 228 /* "glAlphaFunc" */, + providers, entrypoints); +} + +static PFNGLALPHAFUNCQCOMPROC +epoxy_glAlphaFuncQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_alpha_test, 240 /* glAlphaFuncQCOM */); +} + +static PFNGLALPHAFUNCXPROC +epoxy_glAlphaFuncx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 256 /* glAlphaFuncx */); +} + +static PFNGLALPHAFUNCXOESPROC +epoxy_glAlphaFuncxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 269 /* glAlphaFuncxOES */); +} + +static PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC +epoxy_glApplyFramebufferAttachmentCMAAINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_framebuffer_CMAA, 285 /* glApplyFramebufferAttachmentCMAAINTEL */); +} + +static PFNGLAPPLYTEXTUREEXTPROC +epoxy_glApplyTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 323 /* glApplyTextureEXT */); +} + +static PFNGLAREPROGRAMSRESIDENTNVPROC +epoxy_glAreProgramsResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 341 /* glAreProgramsResidentNV */); +} + +static PFNGLARETEXTURESRESIDENTPROC +epoxy_glAreTexturesResident_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 365 /* glAreTexturesResident */); +} + +static PFNGLARETEXTURESRESIDENTEXTPROC +epoxy_glAreTexturesResidentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 387 /* glAreTexturesResidentEXT */); +} + +static PFNGLARRAYELEMENTPROC +epoxy_glArrayElement_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 412 /* "glArrayElement" */, + 427 /* "glArrayElementEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 412 /* "glArrayElement" */, + providers, entrypoints); +} + +static PFNGLARRAYELEMENTEXTPROC +epoxy_glArrayElementEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 427 /* "glArrayElementEXT" */, + 412 /* "glArrayElement" */, + }; + return gl_provider_resolver(entrypoint_strings + 427 /* "glArrayElementEXT" */, + providers, entrypoints); +} + +static PFNGLARRAYOBJECTATIPROC +epoxy_glArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 445 /* glArrayObjectATI */); +} + +static PFNGLASYNCMARKERSGIXPROC +epoxy_glAsyncMarkerSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 462 /* glAsyncMarkerSGIX */); +} + +static PFNGLATTACHOBJECTARBPROC +epoxy_glAttachObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 480 /* "glAttachObjectARB" */, + 498 /* "glAttachShader" */, + 498 /* "glAttachShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 480 /* "glAttachObjectARB" */, + providers, entrypoints); +} + +static PFNGLATTACHSHADERPROC +epoxy_glAttachShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 498 /* "glAttachShader" */, + 498 /* "glAttachShader" */, + 480 /* "glAttachObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 498 /* "glAttachShader" */, + providers, entrypoints); +} + +static PFNGLBEGINPROC +epoxy_glBegin_unwrapped_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 513 /* glBegin */); +} + +static PFNGLBEGINCONDITIONALRENDERPROC +epoxy_glBeginConditionalRender_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 521 /* "glBeginConditionalRender" */, + 546 /* "glBeginConditionalRenderNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 521 /* "glBeginConditionalRender" */, + providers, entrypoints); +} + +static PFNGLBEGINCONDITIONALRENDERNVPROC +epoxy_glBeginConditionalRenderNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_conditional_render, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 546 /* "glBeginConditionalRenderNV" */, + 521 /* "glBeginConditionalRender" */, + }; + return gl_provider_resolver(entrypoint_strings + 546 /* "glBeginConditionalRenderNV" */, + providers, entrypoints); +} + +static PFNGLBEGINCONDITIONALRENDERNVXPROC +epoxy_glBeginConditionalRenderNVX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NVX_conditional_render, 573 /* glBeginConditionalRenderNVX */); +} + +static PFNGLBEGINFRAGMENTSHADERATIPROC +epoxy_glBeginFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 601 /* glBeginFragmentShaderATI */); +} + +static PFNGLBEGINOCCLUSIONQUERYNVPROC +epoxy_glBeginOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 626 /* glBeginOcclusionQueryNV */); +} + +static PFNGLBEGINPERFMONITORAMDPROC +epoxy_glBeginPerfMonitorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 650 /* glBeginPerfMonitorAMD */); +} + +static PFNGLBEGINPERFQUERYINTELPROC +epoxy_glBeginPerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 672 /* glBeginPerfQueryINTEL */); +} + +static PFNGLBEGINQUERYPROC +epoxy_glBeginQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 694 /* "glBeginQuery" */, + 694 /* "glBeginQuery" */, + 707 /* "glBeginQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 694 /* "glBeginQuery" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYARBPROC +epoxy_glBeginQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 707 /* "glBeginQueryARB" */, + 694 /* "glBeginQuery" */, + 694 /* "glBeginQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 707 /* "glBeginQueryARB" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYEXTPROC +epoxy_glBeginQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 723 /* "glBeginQueryEXT" */, + 723 /* "glBeginQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 723 /* "glBeginQueryEXT" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYINDEXEDPROC +epoxy_glBeginQueryIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 739 /* "glBeginQueryIndexed" */, + 739 /* "glBeginQueryIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 739 /* "glBeginQueryIndexed" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKPROC +epoxy_glBeginTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 784 /* "glBeginTransformFeedbackEXT" */, + 812 /* "glBeginTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 759 /* "glBeginTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKEXTPROC +epoxy_glBeginTransformFeedbackEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 784 /* "glBeginTransformFeedbackEXT" */, + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 812 /* "glBeginTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 784 /* "glBeginTransformFeedbackEXT" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKNVPROC +epoxy_glBeginTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 812 /* "glBeginTransformFeedbackNV" */, + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 784 /* "glBeginTransformFeedbackEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 812 /* "glBeginTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLBEGINVERTEXSHADEREXTPROC +epoxy_glBeginVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 839 /* glBeginVertexShaderEXT */); +} + +static PFNGLBEGINVIDEOCAPTURENVPROC +epoxy_glBeginVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 862 /* glBeginVideoCaptureNV */); +} + +static PFNGLBINDATTRIBLOCATIONPROC +epoxy_glBindAttribLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 884 /* "glBindAttribLocation" */, + 884 /* "glBindAttribLocation" */, + 905 /* "glBindAttribLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 884 /* "glBindAttribLocation" */, + providers, entrypoints); +} + +static PFNGLBINDATTRIBLOCATIONARBPROC +epoxy_glBindAttribLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 905 /* "glBindAttribLocationARB" */, + 884 /* "glBindAttribLocation" */, + 884 /* "glBindAttribLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 905 /* "glBindAttribLocationARB" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERPROC +epoxy_glBindBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 942 /* "glBindBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 929 /* "glBindBuffer" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERARBPROC +epoxy_glBindBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 942 /* "glBindBufferARB" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 942 /* "glBindBufferARB" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASEPROC +epoxy_glBindBufferBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 975 /* "glBindBufferBaseEXT" */, + 995 /* "glBindBufferBaseNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 958 /* "glBindBufferBase" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASEEXTPROC +epoxy_glBindBufferBaseEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 975 /* "glBindBufferBaseEXT" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 995 /* "glBindBufferBaseNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 975 /* "glBindBufferBaseEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASENVPROC +epoxy_glBindBufferBaseNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 995 /* "glBindBufferBaseNV" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 975 /* "glBindBufferBaseEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 995 /* "glBindBufferBaseNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFEROFFSETEXTPROC +epoxy_glBindBufferOffsetEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1014 /* "glBindBufferOffsetEXT" */, + 1036 /* "glBindBufferOffsetNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1014 /* "glBindBufferOffsetEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFEROFFSETNVPROC +epoxy_glBindBufferOffsetNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1036 /* "glBindBufferOffsetNV" */, + 1014 /* "glBindBufferOffsetEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1036 /* "glBindBufferOffsetNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGEPROC +epoxy_glBindBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1075 /* "glBindBufferRangeEXT" */, + 1096 /* "glBindBufferRangeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1057 /* "glBindBufferRange" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGEEXTPROC +epoxy_glBindBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1075 /* "glBindBufferRangeEXT" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1096 /* "glBindBufferRangeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1075 /* "glBindBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGENVPROC +epoxy_glBindBufferRangeNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1096 /* "glBindBufferRangeNV" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1075 /* "glBindBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1096 /* "glBindBufferRangeNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERSBASEPROC +epoxy_glBindBuffersBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1116 /* "glBindBuffersBase" */, + 1116 /* "glBindBuffersBase" */, + }; + return gl_provider_resolver(entrypoint_strings + 1116 /* "glBindBuffersBase" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERSRANGEPROC +epoxy_glBindBuffersRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1134 /* "glBindBuffersRange" */, + 1134 /* "glBindBuffersRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 1134 /* "glBindBuffersRange" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONPROC +epoxy_glBindFragDataLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1153 /* "glBindFragDataLocation" */, + 1176 /* "glBindFragDataLocationEXT" */, + 1176 /* "glBindFragDataLocationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1153 /* "glBindFragDataLocation" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONEXTPROC +epoxy_glBindFragDataLocationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1176 /* "glBindFragDataLocationEXT" */, + 1176 /* "glBindFragDataLocationEXT" */, + 1153 /* "glBindFragDataLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 1176 /* "glBindFragDataLocationEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONINDEXEDPROC +epoxy_glBindFragDataLocationIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_EXT_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1202 /* "glBindFragDataLocationIndexed" */, + 1202 /* "glBindFragDataLocationIndexed" */, + 1232 /* "glBindFragDataLocationIndexedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1202 /* "glBindFragDataLocationIndexed" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC +epoxy_glBindFragDataLocationIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1232 /* "glBindFragDataLocationIndexedEXT" */, + 1202 /* "glBindFragDataLocationIndexed" */, + 1202 /* "glBindFragDataLocationIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 1232 /* "glBindFragDataLocationIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGMENTSHADERATIPROC +epoxy_glBindFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 1265 /* glBindFragmentShaderATI */); +} + +static PFNGLBINDFRAMEBUFFERPROC +epoxy_glBindFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1307 /* "glBindFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1289 /* "glBindFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBINDFRAMEBUFFEREXTPROC +epoxy_glBindFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1307 /* "glBindFramebufferEXT" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1307 /* "glBindFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAMEBUFFEROESPROC +epoxy_glBindFramebufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 1328 /* glBindFramebufferOES */); +} + +static PFNGLBINDIMAGETEXTUREPROC +epoxy_glBindImageTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1349 /* "glBindImageTexture" */, + 1349 /* "glBindImageTexture" */, + 1349 /* "glBindImageTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 1349 /* "glBindImageTexture" */, + providers, entrypoints); +} + +static PFNGLBINDIMAGETEXTUREEXTPROC +epoxy_glBindImageTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_shader_image_load_store, 1368 /* glBindImageTextureEXT */); +} + +static PFNGLBINDIMAGETEXTURESPROC +epoxy_glBindImageTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1390 /* "glBindImageTextures" */, + 1390 /* "glBindImageTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 1390 /* "glBindImageTextures" */, + providers, entrypoints); +} + +static PFNGLBINDLIGHTPARAMETEREXTPROC +epoxy_glBindLightParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1410 /* glBindLightParameterEXT */); +} + +static PFNGLBINDMATERIALPARAMETEREXTPROC +epoxy_glBindMaterialParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1434 /* glBindMaterialParameterEXT */); +} + +static PFNGLBINDMULTITEXTUREEXTPROC +epoxy_glBindMultiTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 1461 /* glBindMultiTextureEXT */); +} + +static PFNGLBINDPARAMETEREXTPROC +epoxy_glBindParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1483 /* glBindParameterEXT */); +} + +static PFNGLBINDPROGRAMARBPROC +epoxy_glBindProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1502 /* "glBindProgramARB" */, + 1502 /* "glBindProgramARB" */, + 1519 /* "glBindProgramNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1502 /* "glBindProgramARB" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMNVPROC +epoxy_glBindProgramNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1519 /* "glBindProgramNV" */, + 1502 /* "glBindProgramARB" */, + 1502 /* "glBindProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 1519 /* "glBindProgramNV" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMPIPELINEPROC +epoxy_glBindProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1535 /* "glBindProgramPipeline" */, + 1535 /* "glBindProgramPipeline" */, + 1535 /* "glBindProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 1535 /* "glBindProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMPIPELINEEXTPROC +epoxy_glBindProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 1557 /* glBindProgramPipelineEXT */); +} + +static PFNGLBINDRENDERBUFFERPROC +epoxy_glBindRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1601 /* "glBindRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1582 /* "glBindRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLBINDRENDERBUFFEREXTPROC +epoxy_glBindRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1601 /* "glBindRenderbufferEXT" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1601 /* "glBindRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLBINDRENDERBUFFEROESPROC +epoxy_glBindRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 1623 /* glBindRenderbufferOES */); +} + +static PFNGLBINDSAMPLERPROC +epoxy_glBindSampler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1645 /* "glBindSampler" */, + 1645 /* "glBindSampler" */, + 1645 /* "glBindSampler" */, + }; + return gl_provider_resolver(entrypoint_strings + 1645 /* "glBindSampler" */, + providers, entrypoints); +} + +static PFNGLBINDSAMPLERSPROC +epoxy_glBindSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1659 /* "glBindSamplers" */, + 1659 /* "glBindSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 1659 /* "glBindSamplers" */, + providers, entrypoints); +} + +static PFNGLBINDTEXGENPARAMETEREXTPROC +epoxy_glBindTexGenParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1674 /* glBindTexGenParameterEXT */); +} + +static PFNGLBINDTEXTUREPROC +epoxy_glBindTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_texture_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1713 /* "glBindTextureEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1699 /* "glBindTexture" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREEXTPROC +epoxy_glBindTextureEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_object, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1713 /* "glBindTextureEXT" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 1713 /* "glBindTextureEXT" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREUNITPROC +epoxy_glBindTextureUnit_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1730 /* "glBindTextureUnit" */, + 1730 /* "glBindTextureUnit" */, + }; + return gl_provider_resolver(entrypoint_strings + 1730 /* "glBindTextureUnit" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREUNITPARAMETEREXTPROC +epoxy_glBindTextureUnitParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1748 /* glBindTextureUnitParameterEXT */); +} + +static PFNGLBINDTEXTURESPROC +epoxy_glBindTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1778 /* "glBindTextures" */, + 1778 /* "glBindTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 1778 /* "glBindTextures" */, + providers, entrypoints); +} + +static PFNGLBINDTRANSFORMFEEDBACKPROC +epoxy_glBindTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1793 /* "glBindTransformFeedback" */, + 1793 /* "glBindTransformFeedback" */, + 1793 /* "glBindTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 1793 /* "glBindTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLBINDTRANSFORMFEEDBACKNVPROC +epoxy_glBindTransformFeedbackNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback2, 1817 /* glBindTransformFeedbackNV */); +} + +static PFNGLBINDVERTEXARRAYPROC +epoxy_glBindVertexArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1861 /* "glBindVertexArrayAPPLE" */, + 1884 /* "glBindVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 1843 /* "glBindVertexArray" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXARRAYAPPLEPROC +epoxy_glBindVertexArrayAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1861 /* "glBindVertexArrayAPPLE" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 1861 /* "glBindVertexArrayAPPLE" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXARRAYOESPROC +epoxy_glBindVertexArrayOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1884 /* "glBindVertexArrayOES" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 1884 /* "glBindVertexArrayOES" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXBUFFERPROC +epoxy_glBindVertexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1905 /* "glBindVertexBuffer" */, + 1905 /* "glBindVertexBuffer" */, + 1905 /* "glBindVertexBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1905 /* "glBindVertexBuffer" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXBUFFERSPROC +epoxy_glBindVertexBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1924 /* "glBindVertexBuffers" */, + 1924 /* "glBindVertexBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 1924 /* "glBindVertexBuffers" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXSHADEREXTPROC +epoxy_glBindVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1944 /* glBindVertexShaderEXT */); +} + +static PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC +epoxy_glBindVideoCaptureStreamBufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 1966 /* glBindVideoCaptureStreamBufferNV */); +} + +static PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC +epoxy_glBindVideoCaptureStreamTextureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 1999 /* glBindVideoCaptureStreamTextureNV */); +} + +static PFNGLBINORMAL3BEXTPROC +epoxy_glBinormal3bEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2033 /* glBinormal3bEXT */); +} + +static PFNGLBINORMAL3BVEXTPROC +epoxy_glBinormal3bvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2049 /* glBinormal3bvEXT */); +} + +static PFNGLBINORMAL3DEXTPROC +epoxy_glBinormal3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2066 /* glBinormal3dEXT */); +} + +static PFNGLBINORMAL3DVEXTPROC +epoxy_glBinormal3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2082 /* glBinormal3dvEXT */); +} + +static PFNGLBINORMAL3FEXTPROC +epoxy_glBinormal3fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2099 /* glBinormal3fEXT */); +} + +static PFNGLBINORMAL3FVEXTPROC +epoxy_glBinormal3fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2115 /* glBinormal3fvEXT */); +} + +static PFNGLBINORMAL3IEXTPROC +epoxy_glBinormal3iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2132 /* glBinormal3iEXT */); +} + +static PFNGLBINORMAL3IVEXTPROC +epoxy_glBinormal3ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2148 /* glBinormal3ivEXT */); +} + +static PFNGLBINORMAL3SEXTPROC +epoxy_glBinormal3sEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2165 /* glBinormal3sEXT */); +} + +static PFNGLBINORMAL3SVEXTPROC +epoxy_glBinormal3svEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2181 /* glBinormal3svEXT */); +} + +static PFNGLBINORMALPOINTEREXTPROC +epoxy_glBinormalPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2198 /* glBinormalPointerEXT */); +} + +static PFNGLBITMAPPROC +epoxy_glBitmap_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 2219 /* glBitmap */); +} + +static PFNGLBITMAPXOESPROC +epoxy_glBitmapxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 2228 /* glBitmapxOES */); +} + +static PFNGLBLENDBARRIERPROC +epoxy_glBlendBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + OpenGL_ES_3_2, + GL_extension_GL_KHR_blend_equation_advanced, + GL_extension_GL_NV_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2241 /* "glBlendBarrier" */, + 2256 /* "glBlendBarrierKHR" */, + 2274 /* "glBlendBarrierNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 2241 /* "glBlendBarrier" */, + providers, entrypoints); +} + +static PFNGLBLENDBARRIERKHRPROC +epoxy_glBlendBarrierKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_blend_equation_advanced, + OpenGL_ES_3_2, + GL_extension_GL_NV_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2256 /* "glBlendBarrierKHR" */, + 2241 /* "glBlendBarrier" */, + 2274 /* "glBlendBarrierNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 2256 /* "glBlendBarrierKHR" */, + providers, entrypoints); +} + +static PFNGLBLENDBARRIERNVPROC +epoxy_glBlendBarrierNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_blend_equation_advanced, + OpenGL_ES_3_2, + GL_extension_GL_KHR_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2274 /* "glBlendBarrierNV" */, + 2241 /* "glBlendBarrier" */, + 2256 /* "glBlendBarrierKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2274 /* "glBlendBarrierNV" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLORPROC +epoxy_glBlendColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2304 /* "glBlendColorEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2291 /* "glBlendColor" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLOREXTPROC +epoxy_glBlendColorEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_color, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2304 /* "glBlendColorEXT" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 2304 /* "glBlendColorEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLORXOESPROC +epoxy_glBlendColorxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 2320 /* glBlendColorxOES */); +} + +static PFNGLBLENDEQUATIONPROC +epoxy_glBlendEquation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_minmax, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2353 /* "glBlendEquationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2337 /* "glBlendEquation" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONEXTPROC +epoxy_glBlendEquationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_minmax, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2353 /* "glBlendEquationEXT" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + }; + return gl_provider_resolver(entrypoint_strings + 2353 /* "glBlendEquationEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONINDEXEDAMDPROC +epoxy_glBlendEquationIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2372 /* "glBlendEquationIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONOESPROC +epoxy_glBlendEquationOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_subtract, 2398 /* glBlendEquationOES */); +} + +static PFNGLBLENDEQUATIONSEPARATEPROC +epoxy_glBlendEquationSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_equation_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2417 /* "glBlendEquationSeparate" */, + 2417 /* "glBlendEquationSeparate" */, + 2441 /* "glBlendEquationSeparateEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2417 /* "glBlendEquationSeparate" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEEXTPROC +epoxy_glBlendEquationSeparateEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_equation_separate, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2441 /* "glBlendEquationSeparateEXT" */, + 2417 /* "glBlendEquationSeparate" */, + 2417 /* "glBlendEquationSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 2441 /* "glBlendEquationSeparateEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC +epoxy_glBlendEquationSeparateIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEOESPROC +epoxy_glBlendEquationSeparateOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_equation_separate, 2502 /* glBlendEquationSeparateOES */); +} + +static PFNGLBLENDEQUATIONSEPARATEIPROC +epoxy_glBlendEquationSeparatei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2529 /* "glBlendEquationSeparatei" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIARBPROC +epoxy_glBlendEquationSeparateiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2554 /* "glBlendEquationSeparateiARB" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2554 /* "glBlendEquationSeparateiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIEXTPROC +epoxy_glBlendEquationSeparateiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2582 /* "glBlendEquationSeparateiEXT" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2582 /* "glBlendEquationSeparateiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIOESPROC +epoxy_glBlendEquationSeparateiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2610 /* "glBlendEquationSeparateiOES" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2610 /* "glBlendEquationSeparateiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIPROC +epoxy_glBlendEquationi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2638 /* "glBlendEquationi" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIARBPROC +epoxy_glBlendEquationiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2655 /* "glBlendEquationiARB" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2655 /* "glBlendEquationiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIEXTPROC +epoxy_glBlendEquationiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2675 /* "glBlendEquationiEXT" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2675 /* "glBlendEquationiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIOESPROC +epoxy_glBlendEquationiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2695 /* "glBlendEquationiOES" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2695 /* "glBlendEquationiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCPROC +epoxy_glBlendFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2715 /* "glBlendFunc" */, + 2715 /* "glBlendFunc" */, + 2715 /* "glBlendFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 2715 /* "glBlendFunc" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCINDEXEDAMDPROC +epoxy_glBlendFuncIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2727 /* "glBlendFuncIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEPROC +epoxy_glBlendFuncSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_func_separate, + GL_extension_GL_INGR_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2769 /* "glBlendFuncSeparateEXT" */, + 2792 /* "glBlendFuncSeparateINGR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2749 /* "glBlendFuncSeparate" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEEXTPROC +epoxy_glBlendFuncSeparateEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_separate, + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_INGR_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2769 /* "glBlendFuncSeparateEXT" */, + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2792 /* "glBlendFuncSeparateINGR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2769 /* "glBlendFuncSeparateEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEINGRPROC +epoxy_glBlendFuncSeparateINGR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_INGR_blend_func_separate, + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2792 /* "glBlendFuncSeparateINGR" */, + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2769 /* "glBlendFuncSeparateEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2792 /* "glBlendFuncSeparateINGR" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC +epoxy_glBlendFuncSeparateIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEOESPROC +epoxy_glBlendFuncSeparateOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_func_separate, 2846 /* glBlendFuncSeparateOES */); +} + +static PFNGLBLENDFUNCSEPARATEIPROC +epoxy_glBlendFuncSeparatei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2869 /* "glBlendFuncSeparatei" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIARBPROC +epoxy_glBlendFuncSeparateiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2890 /* "glBlendFuncSeparateiARB" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2890 /* "glBlendFuncSeparateiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIEXTPROC +epoxy_glBlendFuncSeparateiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2914 /* "glBlendFuncSeparateiEXT" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2914 /* "glBlendFuncSeparateiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIOESPROC +epoxy_glBlendFuncSeparateiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2938 /* "glBlendFuncSeparateiOES" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2938 /* "glBlendFuncSeparateiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIPROC +epoxy_glBlendFunci_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2962 /* "glBlendFunci" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIARBPROC +epoxy_glBlendFunciARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2975 /* "glBlendFunciARB" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2975 /* "glBlendFunciARB" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIEXTPROC +epoxy_glBlendFunciEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2991 /* "glBlendFunciEXT" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2991 /* "glBlendFunciEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIOESPROC +epoxy_glBlendFunciOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3007 /* "glBlendFunciOES" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3007 /* "glBlendFunciOES" */, + providers, entrypoints); +} + +static PFNGLBLENDPARAMETERINVPROC +epoxy_glBlendParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_blend_equation_advanced, 3023 /* glBlendParameteriNV */); +} + +static PFNGLBLITFRAMEBUFFERPROC +epoxy_glBlitFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_blit, + GL_extension_GL_NV_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3084 /* "glBlitFramebufferEXT" */, + 3105 /* "glBlitFramebufferNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 3043 /* "glBlitFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBLITFRAMEBUFFERANGLEPROC +epoxy_glBlitFramebufferANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_framebuffer_blit, 3061 /* glBlitFramebufferANGLE */); +} + +static PFNGLBLITFRAMEBUFFEREXTPROC +epoxy_glBlitFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_blit, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3084 /* "glBlitFramebufferEXT" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3105 /* "glBlitFramebufferNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 3084 /* "glBlitFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLBLITFRAMEBUFFERNVPROC +epoxy_glBlitFramebufferNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_framebuffer_blit, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3105 /* "glBlitFramebufferNV" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3084 /* "glBlitFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3105 /* "glBlitFramebufferNV" */, + providers, entrypoints); +} + +static PFNGLBLITNAMEDFRAMEBUFFERPROC +epoxy_glBlitNamedFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3125 /* "glBlitNamedFramebuffer" */, + 3125 /* "glBlitNamedFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 3125 /* "glBlitNamedFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBUFFERADDRESSRANGENVPROC +epoxy_glBufferAddressRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 3148 /* glBufferAddressRangeNV */); +} + +static PFNGLBUFFERDATAPROC +epoxy_glBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3184 /* "glBufferDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3171 /* "glBufferData" */, + providers, entrypoints); +} + +static PFNGLBUFFERDATAARBPROC +epoxy_glBufferDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3184 /* "glBufferDataARB" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3184 /* "glBufferDataARB" */, + providers, entrypoints); +} + +static PFNGLBUFFERPAGECOMMITMENTARBPROC +epoxy_glBufferPageCommitmentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 3200 /* glBufferPageCommitmentARB */); +} + +static PFNGLBUFFERPARAMETERIAPPLEPROC +epoxy_glBufferParameteriAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_flush_buffer_range, 3226 /* glBufferParameteriAPPLE */); +} + +static PFNGLBUFFERSTORAGEPROC +epoxy_glBufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_buffer_storage, + GL_extension_GL_EXT_buffer_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3250 /* "glBufferStorage" */, + 3250 /* "glBufferStorage" */, + 3266 /* "glBufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3250 /* "glBufferStorage" */, + providers, entrypoints); +} + +static PFNGLBUFFERSTORAGEEXTPROC +epoxy_glBufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_buffer_storage, + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_buffer_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3266 /* "glBufferStorageEXT" */, + 3250 /* "glBufferStorage" */, + 3250 /* "glBufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 3266 /* "glBufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLBUFFERSUBDATAPROC +epoxy_glBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3301 /* "glBufferSubDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3285 /* "glBufferSubData" */, + providers, entrypoints); +} + +static PFNGLBUFFERSUBDATAARBPROC +epoxy_glBufferSubDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3301 /* "glBufferSubDataARB" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3301 /* "glBufferSubDataARB" */, + providers, entrypoints); +} + +static PFNGLCALLCOMMANDLISTNVPROC +epoxy_glCallCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 3320 /* glCallCommandListNV */); +} + +static PFNGLCALLLISTPROC +epoxy_glCallList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3340 /* glCallList */); +} + +static PFNGLCALLLISTSPROC +epoxy_glCallLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3351 /* glCallLists */); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSPROC +epoxy_glCheckFramebufferStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3388 /* "glCheckFramebufferStatusEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3363 /* "glCheckFramebufferStatus" */, + providers, entrypoints); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC +epoxy_glCheckFramebufferStatusEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3388 /* "glCheckFramebufferStatusEXT" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 3388 /* "glCheckFramebufferStatusEXT" */, + providers, entrypoints); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSOESPROC +epoxy_glCheckFramebufferStatusOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 3416 /* glCheckFramebufferStatusOES */); +} + +static PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC +epoxy_glCheckNamedFramebufferStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3444 /* "glCheckNamedFramebufferStatus" */, + 3444 /* "glCheckNamedFramebufferStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 3444 /* "glCheckNamedFramebufferStatus" */, + providers, entrypoints); +} + +static PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC +epoxy_glCheckNamedFramebufferStatusEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3474 /* glCheckNamedFramebufferStatusEXT */); +} + +static PFNGLCLAMPCOLORPROC +epoxy_glClampColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_color_buffer_float, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3507 /* "glClampColor" */, + 3520 /* "glClampColorARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3507 /* "glClampColor" */, + providers, entrypoints); +} + +static PFNGLCLAMPCOLORARBPROC +epoxy_glClampColorARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_color_buffer_float, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3520 /* "glClampColorARB" */, + 3507 /* "glClampColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 3520 /* "glClampColorARB" */, + providers, entrypoints); +} + +static PFNGLCLEARPROC +epoxy_glClear_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3536 /* "glClear" */, + 3536 /* "glClear" */, + 3536 /* "glClear" */, + }; + return gl_provider_resolver(entrypoint_strings + 3536 /* "glClear" */, + providers, entrypoints); +} + +static PFNGLCLEARACCUMPROC +epoxy_glClearAccum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3544 /* glClearAccum */); +} + +static PFNGLCLEARACCUMXOESPROC +epoxy_glClearAccumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3557 /* glClearAccumxOES */); +} + +static PFNGLCLEARBUFFERDATAPROC +epoxy_glClearBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_clear_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3574 /* "glClearBufferData" */, + 3574 /* "glClearBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3574 /* "glClearBufferData" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERSUBDATAPROC +epoxy_glClearBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_clear_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3592 /* "glClearBufferSubData" */, + 3592 /* "glClearBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3592 /* "glClearBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERFIPROC +epoxy_glClearBufferfi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3613 /* "glClearBufferfi" */, + 3613 /* "glClearBufferfi" */, + }; + return gl_provider_resolver(entrypoint_strings + 3613 /* "glClearBufferfi" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERFVPROC +epoxy_glClearBufferfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3629 /* "glClearBufferfv" */, + 3629 /* "glClearBufferfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3629 /* "glClearBufferfv" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERIVPROC +epoxy_glClearBufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3645 /* "glClearBufferiv" */, + 3645 /* "glClearBufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3645 /* "glClearBufferiv" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERUIVPROC +epoxy_glClearBufferuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3661 /* "glClearBufferuiv" */, + 3661 /* "glClearBufferuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3661 /* "glClearBufferuiv" */, + providers, entrypoints); +} + +static PFNGLCLEARCOLORPROC +epoxy_glClearColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3678 /* "glClearColor" */, + 3678 /* "glClearColor" */, + 3678 /* "glClearColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 3678 /* "glClearColor" */, + providers, entrypoints); +} + +static PFNGLCLEARCOLORIIEXTPROC +epoxy_glClearColorIiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_integer, 3691 /* glClearColorIiEXT */); +} + +static PFNGLCLEARCOLORIUIEXTPROC +epoxy_glClearColorIuiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_integer, 3709 /* glClearColorIuiEXT */); +} + +static PFNGLCLEARCOLORXPROC +epoxy_glClearColorx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 3728 /* glClearColorx */); +} + +static PFNGLCLEARCOLORXOESPROC +epoxy_glClearColorxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3742 /* glClearColorxOES */); +} + +static PFNGLCLEARDEPTHPROC +epoxy_glClearDepth_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3759 /* glClearDepth */); +} + +static PFNGLCLEARDEPTHDNVPROC +epoxy_glClearDepthdNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 3772 /* glClearDepthdNV */); +} + +static PFNGLCLEARDEPTHFPROC +epoxy_glClearDepthf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_OES_single_precision, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3802 /* "glClearDepthfOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 3788 /* "glClearDepthf" */, + providers, entrypoints); +} + +static PFNGLCLEARDEPTHFOESPROC +epoxy_glClearDepthfOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_single_precision, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3802 /* "glClearDepthfOES" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + }; + return gl_provider_resolver(entrypoint_strings + 3802 /* "glClearDepthfOES" */, + providers, entrypoints); +} + +static PFNGLCLEARDEPTHXPROC +epoxy_glClearDepthx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 3819 /* glClearDepthx */); +} + +static PFNGLCLEARDEPTHXOESPROC +epoxy_glClearDepthxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3833 /* glClearDepthxOES */); +} + +static PFNGLCLEARINDEXPROC +epoxy_glClearIndex_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3850 /* glClearIndex */); +} + +static PFNGLCLEARNAMEDBUFFERDATAPROC +epoxy_glClearNamedBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3863 /* "glClearNamedBufferData" */, + 3863 /* "glClearNamedBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3863 /* "glClearNamedBufferData" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDBUFFERDATAEXTPROC +epoxy_glClearNamedBufferDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3886 /* glClearNamedBufferDataEXT */); +} + +static PFNGLCLEARNAMEDBUFFERSUBDATAPROC +epoxy_glClearNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3912 /* "glClearNamedBufferSubData" */, + 3912 /* "glClearNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3912 /* "glClearNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC +epoxy_glClearNamedBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3938 /* glClearNamedBufferSubDataEXT */); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERFIPROC +epoxy_glClearNamedFramebufferfi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3967 /* "glClearNamedFramebufferfi" */, + 3967 /* "glClearNamedFramebufferfi" */, + }; + return gl_provider_resolver(entrypoint_strings + 3967 /* "glClearNamedFramebufferfi" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERFVPROC +epoxy_glClearNamedFramebufferfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3993 /* "glClearNamedFramebufferfv" */, + 3993 /* "glClearNamedFramebufferfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3993 /* "glClearNamedFramebufferfv" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERIVPROC +epoxy_glClearNamedFramebufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4019 /* "glClearNamedFramebufferiv" */, + 4019 /* "glClearNamedFramebufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 4019 /* "glClearNamedFramebufferiv" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC +epoxy_glClearNamedFramebufferuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4045 /* "glClearNamedFramebufferuiv" */, + 4045 /* "glClearNamedFramebufferuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 4045 /* "glClearNamedFramebufferuiv" */, + providers, entrypoints); +} + +static PFNGLCLEARSTENCILPROC +epoxy_glClearStencil_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4072 /* "glClearStencil" */, + 4072 /* "glClearStencil" */, + 4072 /* "glClearStencil" */, + }; + return gl_provider_resolver(entrypoint_strings + 4072 /* "glClearStencil" */, + providers, entrypoints); +} + +static PFNGLCLEARTEXIMAGEPROC +epoxy_glClearTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_clear_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4087 /* "glClearTexImage" */, + 4087 /* "glClearTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 4087 /* "glClearTexImage" */, + providers, entrypoints); +} + +static PFNGLCLEARTEXSUBIMAGEPROC +epoxy_glClearTexSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_clear_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4103 /* "glClearTexSubImage" */, + 4103 /* "glClearTexSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 4103 /* "glClearTexSubImage" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVETEXTUREPROC +epoxy_glClientActiveTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4122 /* "glClientActiveTexture" */, + 4122 /* "glClientActiveTexture" */, + 4144 /* "glClientActiveTextureARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 4122 /* "glClientActiveTexture" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVETEXTUREARBPROC +epoxy_glClientActiveTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4144 /* "glClientActiveTextureARB" */, + 4122 /* "glClientActiveTexture" */, + 4122 /* "glClientActiveTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 4144 /* "glClientActiveTextureARB" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC +epoxy_glClientActiveVertexStreamATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 4169 /* glClientActiveVertexStreamATI */); +} + +static PFNGLCLIENTATTRIBDEFAULTEXTPROC +epoxy_glClientAttribDefaultEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 4199 /* glClientAttribDefaultEXT */); +} + +static PFNGLCLIENTWAITSYNCPROC +epoxy_glClientWaitSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4241 /* "glClientWaitSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 4224 /* "glClientWaitSync" */, + providers, entrypoints); +} + +static PFNGLCLIENTWAITSYNCAPPLEPROC +epoxy_glClientWaitSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4241 /* "glClientWaitSyncAPPLE" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 4241 /* "glClientWaitSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLCLIPCONTROLPROC +epoxy_glClipControl_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_clip_control, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4263 /* "glClipControl" */, + 4263 /* "glClipControl" */, + }; + return gl_provider_resolver(entrypoint_strings + 4263 /* "glClipControl" */, + providers, entrypoints); +} + +static PFNGLCLIPPLANEPROC +epoxy_glClipPlane_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4277 /* glClipPlane */); +} + +static PFNGLCLIPPLANEFPROC +epoxy_glClipPlanef_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4289 /* glClipPlanef */); +} + +static PFNGLCLIPPLANEFIMGPROC +epoxy_glClipPlanefIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_user_clip_plane, 4302 /* glClipPlanefIMG */); +} + +static PFNGLCLIPPLANEFOESPROC +epoxy_glClipPlanefOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 4318 /* glClipPlanefOES */); +} + +static PFNGLCLIPPLANEXPROC +epoxy_glClipPlanex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4334 /* glClipPlanex */); +} + +static PFNGLCLIPPLANEXIMGPROC +epoxy_glClipPlanexIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_user_clip_plane, 4347 /* glClipPlanexIMG */); +} + +static PFNGLCLIPPLANEXOESPROC +epoxy_glClipPlanexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4363 /* glClipPlanexOES */); +} + +static PFNGLCOLOR3BPROC +epoxy_glColor3b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4379 /* glColor3b */); +} + +static PFNGLCOLOR3BVPROC +epoxy_glColor3bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4389 /* glColor3bv */); +} + +static PFNGLCOLOR3DPROC +epoxy_glColor3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4400 /* glColor3d */); +} + +static PFNGLCOLOR3DVPROC +epoxy_glColor3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4410 /* glColor3dv */); +} + +static PFNGLCOLOR3FPROC +epoxy_glColor3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4421 /* glColor3f */); +} + +static PFNGLCOLOR3FVERTEX3FSUNPROC +epoxy_glColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4431 /* glColor3fVertex3fSUN */); +} + +static PFNGLCOLOR3FVERTEX3FVSUNPROC +epoxy_glColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4452 /* glColor3fVertex3fvSUN */); +} + +static PFNGLCOLOR3FVPROC +epoxy_glColor3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4474 /* glColor3fv */); +} + +static PFNGLCOLOR3HNVPROC +epoxy_glColor3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4485 /* glColor3hNV */); +} + +static PFNGLCOLOR3HVNVPROC +epoxy_glColor3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4497 /* glColor3hvNV */); +} + +static PFNGLCOLOR3IPROC +epoxy_glColor3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4510 /* glColor3i */); +} + +static PFNGLCOLOR3IVPROC +epoxy_glColor3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4520 /* glColor3iv */); +} + +static PFNGLCOLOR3SPROC +epoxy_glColor3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4531 /* glColor3s */); +} + +static PFNGLCOLOR3SVPROC +epoxy_glColor3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4541 /* glColor3sv */); +} + +static PFNGLCOLOR3UBPROC +epoxy_glColor3ub_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4552 /* glColor3ub */); +} + +static PFNGLCOLOR3UBVPROC +epoxy_glColor3ubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4563 /* glColor3ubv */); +} + +static PFNGLCOLOR3UIPROC +epoxy_glColor3ui_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4575 /* glColor3ui */); +} + +static PFNGLCOLOR3UIVPROC +epoxy_glColor3uiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4586 /* glColor3uiv */); +} + +static PFNGLCOLOR3USPROC +epoxy_glColor3us_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4598 /* glColor3us */); +} + +static PFNGLCOLOR3USVPROC +epoxy_glColor3usv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4609 /* glColor3usv */); +} + +static PFNGLCOLOR3XOESPROC +epoxy_glColor3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4621 /* glColor3xOES */); +} + +static PFNGLCOLOR3XVOESPROC +epoxy_glColor3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4634 /* glColor3xvOES */); +} + +static PFNGLCOLOR4BPROC +epoxy_glColor4b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4648 /* glColor4b */); +} + +static PFNGLCOLOR4BVPROC +epoxy_glColor4bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4658 /* glColor4bv */); +} + +static PFNGLCOLOR4DPROC +epoxy_glColor4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4669 /* glColor4d */); +} + +static PFNGLCOLOR4DVPROC +epoxy_glColor4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4679 /* glColor4dv */); +} + +static PFNGLCOLOR4FPROC +epoxy_glColor4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4690 /* "glColor4f" */, + 4690 /* "glColor4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 4690 /* "glColor4f" */, + providers, entrypoints); +} + +static PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4700 /* glColor4fNormal3fVertex3fSUN */); +} + +static PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4729 /* glColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLCOLOR4FVPROC +epoxy_glColor4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4759 /* glColor4fv */); +} + +static PFNGLCOLOR4HNVPROC +epoxy_glColor4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4770 /* glColor4hNV */); +} + +static PFNGLCOLOR4HVNVPROC +epoxy_glColor4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4782 /* glColor4hvNV */); +} + +static PFNGLCOLOR4IPROC +epoxy_glColor4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4795 /* glColor4i */); +} + +static PFNGLCOLOR4IVPROC +epoxy_glColor4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4805 /* glColor4iv */); +} + +static PFNGLCOLOR4SPROC +epoxy_glColor4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4816 /* glColor4s */); +} + +static PFNGLCOLOR4SVPROC +epoxy_glColor4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4826 /* glColor4sv */); +} + +static PFNGLCOLOR4UBPROC +epoxy_glColor4ub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4837 /* "glColor4ub" */, + 4837 /* "glColor4ub" */, + }; + return gl_provider_resolver(entrypoint_strings + 4837 /* "glColor4ub" */, + providers, entrypoints); +} + +static PFNGLCOLOR4UBVERTEX2FSUNPROC +epoxy_glColor4ubVertex2fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4848 /* glColor4ubVertex2fSUN */); +} + +static PFNGLCOLOR4UBVERTEX2FVSUNPROC +epoxy_glColor4ubVertex2fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4870 /* glColor4ubVertex2fvSUN */); +} + +static PFNGLCOLOR4UBVERTEX3FSUNPROC +epoxy_glColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4893 /* glColor4ubVertex3fSUN */); +} + +static PFNGLCOLOR4UBVERTEX3FVSUNPROC +epoxy_glColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4915 /* glColor4ubVertex3fvSUN */); +} + +static PFNGLCOLOR4UBVPROC +epoxy_glColor4ubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4938 /* glColor4ubv */); +} + +static PFNGLCOLOR4UIPROC +epoxy_glColor4ui_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4950 /* glColor4ui */); +} + +static PFNGLCOLOR4UIVPROC +epoxy_glColor4uiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4961 /* glColor4uiv */); +} + +static PFNGLCOLOR4USPROC +epoxy_glColor4us_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4973 /* glColor4us */); +} + +static PFNGLCOLOR4USVPROC +epoxy_glColor4usv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4984 /* glColor4usv */); +} + +static PFNGLCOLOR4XPROC +epoxy_glColor4x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4996 /* glColor4x */); +} + +static PFNGLCOLOR4XOESPROC +epoxy_glColor4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 5006 /* glColor4xOES */); +} + +static PFNGLCOLOR4XVOESPROC +epoxy_glColor4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 5019 /* glColor4xvOES */); +} + +static PFNGLCOLORFORMATNVPROC +epoxy_glColorFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 5033 /* glColorFormatNV */); +} + +static PFNGLCOLORFRAGMENTOP1ATIPROC +epoxy_glColorFragmentOp1ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5049 /* glColorFragmentOp1ATI */); +} + +static PFNGLCOLORFRAGMENTOP2ATIPROC +epoxy_glColorFragmentOp2ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5071 /* glColorFragmentOp2ATI */); +} + +static PFNGLCOLORFRAGMENTOP3ATIPROC +epoxy_glColorFragmentOp3ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5093 /* glColorFragmentOp3ATI */); +} + +static PFNGLCOLORMASKPROC +epoxy_glColorMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5115 /* "glColorMask" */, + 5115 /* "glColorMask" */, + 5115 /* "glColorMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 5115 /* "glColorMask" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKINDEXEDEXTPROC +epoxy_glColorMaskIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5162 /* "glColorMaskiEXT" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5127 /* "glColorMaskIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIPROC +epoxy_glColorMaski_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5162 /* "glColorMaskiEXT" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5149 /* "glColorMaski" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIEXTPROC +epoxy_glColorMaskiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5162 /* "glColorMaskiEXT" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5162 /* "glColorMaskiEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIOESPROC +epoxy_glColorMaskiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5178 /* "glColorMaskiOES" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5162 /* "glColorMaskiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5178 /* "glColorMaskiOES" */, + providers, entrypoints); +} + +static PFNGLCOLORMATERIALPROC +epoxy_glColorMaterial_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 5194 /* glColorMaterial */); +} + +static PFNGLCOLORP3UIPROC +epoxy_glColorP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5210 /* "glColorP3ui" */, + 5210 /* "glColorP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 5210 /* "glColorP3ui" */, + providers, entrypoints); +} + +static PFNGLCOLORP3UIVPROC +epoxy_glColorP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5222 /* "glColorP3uiv" */, + 5222 /* "glColorP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5222 /* "glColorP3uiv" */, + providers, entrypoints); +} + +static PFNGLCOLORP4UIPROC +epoxy_glColorP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5235 /* "glColorP4ui" */, + 5235 /* "glColorP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 5235 /* "glColorP4ui" */, + providers, entrypoints); +} + +static PFNGLCOLORP4UIVPROC +epoxy_glColorP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5247 /* "glColorP4uiv" */, + 5247 /* "glColorP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5247 /* "glColorP4uiv" */, + providers, entrypoints); +} + +static PFNGLCOLORPOINTERPROC +epoxy_glColorPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5260 /* "glColorPointer" */, + 5260 /* "glColorPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 5260 /* "glColorPointer" */, + providers, entrypoints); +} + +static PFNGLCOLORPOINTEREXTPROC +epoxy_glColorPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 5275 /* glColorPointerEXT */); +} + +static PFNGLCOLORPOINTERLISTIBMPROC +epoxy_glColorPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 5293 /* glColorPointerListIBM */); +} + +static PFNGLCOLORPOINTERVINTELPROC +epoxy_glColorPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 5315 /* glColorPointervINTEL */); +} + +static PFNGLCOLORSUBTABLEPROC +epoxy_glColorSubTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_color_subtable, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5336 /* "glColorSubTable" */, + 5352 /* "glColorSubTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5336 /* "glColorSubTable" */, + providers, entrypoints); +} + +static PFNGLCOLORSUBTABLEEXTPROC +epoxy_glColorSubTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5352 /* "glColorSubTableEXT" */, + 5336 /* "glColorSubTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 5352 /* "glColorSubTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPROC +epoxy_glColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5371 /* "glColorTable" */, + 5384 /* "glColorTableEXT" */, + 5502 /* "glColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5371 /* "glColorTable" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEEXTPROC +epoxy_glColorTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5384 /* "glColorTableEXT" */, + 5371 /* "glColorTable" */, + 5502 /* "glColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5384 /* "glColorTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERFVPROC +epoxy_glColorTableParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5400 /* "glColorTableParameterfv" */, + 5424 /* "glColorTableParameterfvSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5400 /* "glColorTableParameterfv" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERFVSGIPROC +epoxy_glColorTableParameterfvSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5424 /* "glColorTableParameterfvSGI" */, + 5400 /* "glColorTableParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5424 /* "glColorTableParameterfvSGI" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERIVPROC +epoxy_glColorTableParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5451 /* "glColorTableParameteriv" */, + 5475 /* "glColorTableParameterivSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5451 /* "glColorTableParameteriv" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERIVSGIPROC +epoxy_glColorTableParameterivSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5475 /* "glColorTableParameterivSGI" */, + 5451 /* "glColorTableParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5475 /* "glColorTableParameterivSGI" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLESGIPROC +epoxy_glColorTableSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5502 /* "glColorTableSGI" */, + 5371 /* "glColorTable" */, + 5384 /* "glColorTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5502 /* "glColorTableSGI" */, + providers, entrypoints); +} + +static PFNGLCOMBINERINPUTNVPROC +epoxy_glCombinerInputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5518 /* glCombinerInputNV */); +} + +static PFNGLCOMBINEROUTPUTNVPROC +epoxy_glCombinerOutputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5536 /* glCombinerOutputNV */); +} + +static PFNGLCOMBINERPARAMETERFNVPROC +epoxy_glCombinerParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5555 /* glCombinerParameterfNV */); +} + +static PFNGLCOMBINERPARAMETERFVNVPROC +epoxy_glCombinerParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5578 /* glCombinerParameterfvNV */); +} + +static PFNGLCOMBINERPARAMETERINVPROC +epoxy_glCombinerParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5602 /* glCombinerParameteriNV */); +} + +static PFNGLCOMBINERPARAMETERIVNVPROC +epoxy_glCombinerParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5625 /* glCombinerParameterivNV */); +} + +static PFNGLCOMBINERSTAGEPARAMETERFVNVPROC +epoxy_glCombinerStageParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners2, 5649 /* glCombinerStageParameterfvNV */); +} + +static PFNGLCOMMANDLISTSEGMENTSNVPROC +epoxy_glCommandListSegmentsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 5678 /* glCommandListSegmentsNV */); +} + +static PFNGLCOMPILECOMMANDLISTNVPROC +epoxy_glCompileCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 5702 /* glCompileCommandListNV */); +} + +static PFNGLCOMPILESHADERPROC +epoxy_glCompileShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5725 /* "glCompileShader" */, + 5725 /* "glCompileShader" */, + 5741 /* "glCompileShaderARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 5725 /* "glCompileShader" */, + providers, entrypoints); +} + +static PFNGLCOMPILESHADERARBPROC +epoxy_glCompileShaderARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5741 /* "glCompileShaderARB" */, + 5725 /* "glCompileShader" */, + 5725 /* "glCompileShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 5741 /* "glCompileShaderARB" */, + providers, entrypoints); +} + +static PFNGLCOMPILESHADERINCLUDEARBPROC +epoxy_glCompileShaderIncludeARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 5760 /* glCompileShaderIncludeARB */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC +epoxy_glCompressedMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5786 /* glCompressedMultiTexImage1DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC +epoxy_glCompressedMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5817 /* glCompressedMultiTexImage2DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC +epoxy_glCompressedMultiTexImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5848 /* glCompressedMultiTexImage3DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC +epoxy_glCompressedMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5879 /* glCompressedMultiTexSubImage1DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC +epoxy_glCompressedMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5913 /* glCompressedMultiTexSubImage2DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC +epoxy_glCompressedMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5947 /* glCompressedMultiTexSubImage3DEXT */); +} + +static PFNGLCOMPRESSEDTEXIMAGE1DPROC +epoxy_glCompressedTexImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5981 /* "glCompressedTexImage1D" */, + 6004 /* "glCompressedTexImage1DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 5981 /* "glCompressedTexImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE1DARBPROC +epoxy_glCompressedTexImage1DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6004 /* "glCompressedTexImage1DARB" */, + 5981 /* "glCompressedTexImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6004 /* "glCompressedTexImage1DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE2DPROC +epoxy_glCompressedTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6053 /* "glCompressedTexImage2DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6030 /* "glCompressedTexImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE2DARBPROC +epoxy_glCompressedTexImage2DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6053 /* "glCompressedTexImage2DARB" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6053 /* "glCompressedTexImage2DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DPROC +epoxy_glCompressedTexImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6102 /* "glCompressedTexImage3DARB" */, + 6128 /* "glCompressedTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6079 /* "glCompressedTexImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DARBPROC +epoxy_glCompressedTexImage3DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6102 /* "glCompressedTexImage3DARB" */, + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6128 /* "glCompressedTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6102 /* "glCompressedTexImage3DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DOESPROC +epoxy_glCompressedTexImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6128 /* "glCompressedTexImage3DOES" */, + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6102 /* "glCompressedTexImage3DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6128 /* "glCompressedTexImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC +epoxy_glCompressedTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6154 /* "glCompressedTexSubImage1D" */, + 6180 /* "glCompressedTexSubImage1DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6154 /* "glCompressedTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC +epoxy_glCompressedTexSubImage1DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6180 /* "glCompressedTexSubImage1DARB" */, + 6154 /* "glCompressedTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6180 /* "glCompressedTexSubImage1DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC +epoxy_glCompressedTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6235 /* "glCompressedTexSubImage2DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6209 /* "glCompressedTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC +epoxy_glCompressedTexSubImage2DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6235 /* "glCompressedTexSubImage2DARB" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6235 /* "glCompressedTexSubImage2DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC +epoxy_glCompressedTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6290 /* "glCompressedTexSubImage3DARB" */, + 6319 /* "glCompressedTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6264 /* "glCompressedTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC +epoxy_glCompressedTexSubImage3DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6290 /* "glCompressedTexSubImage3DARB" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6319 /* "glCompressedTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6290 /* "glCompressedTexSubImage3DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC +epoxy_glCompressedTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6319 /* "glCompressedTexSubImage3DOES" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6290 /* "glCompressedTexSubImage3DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6319 /* "glCompressedTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC +epoxy_glCompressedTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6348 /* glCompressedTextureImage1DEXT */); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC +epoxy_glCompressedTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6378 /* glCompressedTextureImage2DEXT */); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC +epoxy_glCompressedTextureImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6408 /* glCompressedTextureImage3DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC +epoxy_glCompressedTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6438 /* "glCompressedTextureSubImage1D" */, + 6438 /* "glCompressedTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6438 /* "glCompressedTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC +epoxy_glCompressedTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6468 /* glCompressedTextureSubImage1DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC +epoxy_glCompressedTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6501 /* "glCompressedTextureSubImage2D" */, + 6501 /* "glCompressedTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6501 /* "glCompressedTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC +epoxy_glCompressedTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6531 /* glCompressedTextureSubImage2DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC +epoxy_glCompressedTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6564 /* "glCompressedTextureSubImage3D" */, + 6564 /* "glCompressedTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6564 /* "glCompressedTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC +epoxy_glCompressedTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6594 /* glCompressedTextureSubImage3DEXT */); +} + +static PFNGLCONSERVATIVERASTERPARAMETERFNVPROC +epoxy_glConservativeRasterParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_conservative_raster_dilate, 6627 /* glConservativeRasterParameterfNV */); +} + +static PFNGLCONVOLUTIONFILTER1DPROC +epoxy_glConvolutionFilter1D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6660 /* "glConvolutionFilter1D" */, + 6682 /* "glConvolutionFilter1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6660 /* "glConvolutionFilter1D" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER1DEXTPROC +epoxy_glConvolutionFilter1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6682 /* "glConvolutionFilter1DEXT" */, + 6660 /* "glConvolutionFilter1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6682 /* "glConvolutionFilter1DEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER2DPROC +epoxy_glConvolutionFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6707 /* "glConvolutionFilter2D" */, + 6729 /* "glConvolutionFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6707 /* "glConvolutionFilter2D" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER2DEXTPROC +epoxy_glConvolutionFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6729 /* "glConvolutionFilter2DEXT" */, + 6707 /* "glConvolutionFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6729 /* "glConvolutionFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFPROC +epoxy_glConvolutionParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6754 /* "glConvolutionParameterf" */, + 6778 /* "glConvolutionParameterfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6754 /* "glConvolutionParameterf" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFEXTPROC +epoxy_glConvolutionParameterfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6778 /* "glConvolutionParameterfEXT" */, + 6754 /* "glConvolutionParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 6778 /* "glConvolutionParameterfEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFVPROC +epoxy_glConvolutionParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6805 /* "glConvolutionParameterfv" */, + 6830 /* "glConvolutionParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6805 /* "glConvolutionParameterfv" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFVEXTPROC +epoxy_glConvolutionParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6830 /* "glConvolutionParameterfvEXT" */, + 6805 /* "glConvolutionParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 6830 /* "glConvolutionParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIPROC +epoxy_glConvolutionParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6858 /* "glConvolutionParameteri" */, + 6882 /* "glConvolutionParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6858 /* "glConvolutionParameteri" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIEXTPROC +epoxy_glConvolutionParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6882 /* "glConvolutionParameteriEXT" */, + 6858 /* "glConvolutionParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 6882 /* "glConvolutionParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIVPROC +epoxy_glConvolutionParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6909 /* "glConvolutionParameteriv" */, + 6934 /* "glConvolutionParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6909 /* "glConvolutionParameteriv" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIVEXTPROC +epoxy_glConvolutionParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6934 /* "glConvolutionParameterivEXT" */, + 6909 /* "glConvolutionParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 6934 /* "glConvolutionParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERXOESPROC +epoxy_glConvolutionParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 6962 /* glConvolutionParameterxOES */); +} + +static PFNGLCONVOLUTIONPARAMETERXVOESPROC +epoxy_glConvolutionParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 6989 /* glConvolutionParameterxvOES */); +} + +static PFNGLCOPYBUFFERSUBDATAPROC +epoxy_glCopyBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_copy_buffer, + OpenGL_ES_3_0, + GL_extension_GL_NV_copy_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7037 /* "glCopyBufferSubDataNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 7017 /* "glCopyBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYBUFFERSUBDATANVPROC +epoxy_glCopyBufferSubDataNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_copy_buffer, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_copy_buffer, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7037 /* "glCopyBufferSubDataNV" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 7037 /* "glCopyBufferSubDataNV" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORSUBTABLEPROC +epoxy_glCopyColorSubTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_color_subtable, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7059 /* "glCopyColorSubTable" */, + 7079 /* "glCopyColorSubTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7059 /* "glCopyColorSubTable" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORSUBTABLEEXTPROC +epoxy_glCopyColorSubTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7079 /* "glCopyColorSubTableEXT" */, + 7059 /* "glCopyColorSubTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 7079 /* "glCopyColorSubTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORTABLEPROC +epoxy_glCopyColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7102 /* "glCopyColorTable" */, + 7119 /* "glCopyColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 7102 /* "glCopyColorTable" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORTABLESGIPROC +epoxy_glCopyColorTableSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7119 /* "glCopyColorTableSGI" */, + 7102 /* "glCopyColorTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 7119 /* "glCopyColorTableSGI" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER1DPROC +epoxy_glCopyConvolutionFilter1D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7139 /* "glCopyConvolutionFilter1D" */, + 7165 /* "glCopyConvolutionFilter1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7139 /* "glCopyConvolutionFilter1D" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC +epoxy_glCopyConvolutionFilter1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7165 /* "glCopyConvolutionFilter1DEXT" */, + 7139 /* "glCopyConvolutionFilter1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7165 /* "glCopyConvolutionFilter1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER2DPROC +epoxy_glCopyConvolutionFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7194 /* "glCopyConvolutionFilter2D" */, + 7220 /* "glCopyConvolutionFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7194 /* "glCopyConvolutionFilter2D" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC +epoxy_glCopyConvolutionFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7220 /* "glCopyConvolutionFilter2DEXT" */, + 7194 /* "glCopyConvolutionFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7220 /* "glCopyConvolutionFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATAPROC +epoxy_glCopyImageSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_EXT_copy_image, + GL_extension_GL_OES_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7268 /* "glCopyImageSubDataEXT" */, + 7311 /* "glCopyImageSubDataOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7249 /* "glCopyImageSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATAEXTPROC +epoxy_glCopyImageSubDataEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_image, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_OES_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7268 /* "glCopyImageSubDataEXT" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7311 /* "glCopyImageSubDataOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7268 /* "glCopyImageSubDataEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATANVPROC +epoxy_glCopyImageSubDataNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_copy_image, 7290 /* glCopyImageSubDataNV */); +} + +static PFNGLCOPYIMAGESUBDATAOESPROC +epoxy_glCopyImageSubDataOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_copy_image, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_EXT_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7311 /* "glCopyImageSubDataOES" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7268 /* "glCopyImageSubDataEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7311 /* "glCopyImageSubDataOES" */, + providers, entrypoints); +} + +static PFNGLCOPYMULTITEXIMAGE1DEXTPROC +epoxy_glCopyMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7333 /* glCopyMultiTexImage1DEXT */); +} + +static PFNGLCOPYMULTITEXIMAGE2DEXTPROC +epoxy_glCopyMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7358 /* glCopyMultiTexImage2DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC +epoxy_glCopyMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7383 /* glCopyMultiTexSubImage1DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC +epoxy_glCopyMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7411 /* glCopyMultiTexSubImage2DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC +epoxy_glCopyMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7439 /* glCopyMultiTexSubImage3DEXT */); +} + +static PFNGLCOPYNAMEDBUFFERSUBDATAPROC +epoxy_glCopyNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7467 /* "glCopyNamedBufferSubData" */, + 7467 /* "glCopyNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 7467 /* "glCopyNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYPATHNVPROC +epoxy_glCopyPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7492 /* glCopyPathNV */); +} + +static PFNGLCOPYPIXELSPROC +epoxy_glCopyPixels_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 7505 /* glCopyPixels */); +} + +static PFNGLCOPYTEXIMAGE1DPROC +epoxy_glCopyTexImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7518 /* "glCopyTexImage1D" */, + 7535 /* "glCopyTexImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7518 /* "glCopyTexImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE1DEXTPROC +epoxy_glCopyTexImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7535 /* "glCopyTexImage1DEXT" */, + 7518 /* "glCopyTexImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7535 /* "glCopyTexImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE2DPROC +epoxy_glCopyTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7572 /* "glCopyTexImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7555 /* "glCopyTexImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE2DEXTPROC +epoxy_glCopyTexImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7572 /* "glCopyTexImage2DEXT" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7572 /* "glCopyTexImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE1DPROC +epoxy_glCopyTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7592 /* "glCopyTexSubImage1D" */, + 7612 /* "glCopyTexSubImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7592 /* "glCopyTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE1DEXTPROC +epoxy_glCopyTexSubImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7612 /* "glCopyTexSubImage1DEXT" */, + 7592 /* "glCopyTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7612 /* "glCopyTexSubImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE2DPROC +epoxy_glCopyTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7655 /* "glCopyTexSubImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7635 /* "glCopyTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE2DEXTPROC +epoxy_glCopyTexSubImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7655 /* "glCopyTexSubImage2DEXT" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7655 /* "glCopyTexSubImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DPROC +epoxy_glCopyTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_copy_texture, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7698 /* "glCopyTexSubImage3DEXT" */, + 7721 /* "glCopyTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7678 /* "glCopyTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DEXTPROC +epoxy_glCopyTexSubImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7698 /* "glCopyTexSubImage3DEXT" */, + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7721 /* "glCopyTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7698 /* "glCopyTexSubImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DOESPROC +epoxy_glCopyTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7721 /* "glCopyTexSubImage3DOES" */, + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7698 /* "glCopyTexSubImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7721 /* "glCopyTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTUREIMAGE1DEXTPROC +epoxy_glCopyTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7744 /* glCopyTextureImage1DEXT */); +} + +static PFNGLCOPYTEXTUREIMAGE2DEXTPROC +epoxy_glCopyTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7768 /* glCopyTextureImage2DEXT */); +} + +static PFNGLCOPYTEXTURELEVELSAPPLEPROC +epoxy_glCopyTextureLevelsAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_copy_texture_levels, 7792 /* glCopyTextureLevelsAPPLE */); +} + +static PFNGLCOPYTEXTURESUBIMAGE1DPROC +epoxy_glCopyTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7817 /* "glCopyTextureSubImage1D" */, + 7817 /* "glCopyTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7817 /* "glCopyTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC +epoxy_glCopyTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7841 /* glCopyTextureSubImage1DEXT */); +} + +static PFNGLCOPYTEXTURESUBIMAGE2DPROC +epoxy_glCopyTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7868 /* "glCopyTextureSubImage2D" */, + 7868 /* "glCopyTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7868 /* "glCopyTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC +epoxy_glCopyTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7892 /* glCopyTextureSubImage2DEXT */); +} + +static PFNGLCOPYTEXTURESUBIMAGE3DPROC +epoxy_glCopyTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7919 /* "glCopyTextureSubImage3D" */, + 7919 /* "glCopyTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7919 /* "glCopyTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC +epoxy_glCopyTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7943 /* glCopyTextureSubImage3DEXT */); +} + +static PFNGLCOVERFILLPATHINSTANCEDNVPROC +epoxy_glCoverFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7970 /* glCoverFillPathInstancedNV */); +} + +static PFNGLCOVERFILLPATHNVPROC +epoxy_glCoverFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7997 /* glCoverFillPathNV */); +} + +static PFNGLCOVERSTROKEPATHINSTANCEDNVPROC +epoxy_glCoverStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 8015 /* glCoverStrokePathInstancedNV */); +} + +static PFNGLCOVERSTROKEPATHNVPROC +epoxy_glCoverStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 8044 /* glCoverStrokePathNV */); +} + +static PFNGLCOVERAGEMASKNVPROC +epoxy_glCoverageMaskNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_coverage_sample, 8064 /* glCoverageMaskNV */); +} + +static PFNGLCOVERAGEMODULATIONNVPROC +epoxy_glCoverageModulationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 8081 /* glCoverageModulationNV */); +} + +static PFNGLCOVERAGEMODULATIONTABLENVPROC +epoxy_glCoverageModulationTableNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 8104 /* glCoverageModulationTableNV */); +} + +static PFNGLCOVERAGEOPERATIONNVPROC +epoxy_glCoverageOperationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_coverage_sample, 8132 /* glCoverageOperationNV */); +} + +static PFNGLCREATEBUFFERSPROC +epoxy_glCreateBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8154 /* "glCreateBuffers" */, + 8154 /* "glCreateBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8154 /* "glCreateBuffers" */, + providers, entrypoints); +} + +static PFNGLCREATECOMMANDLISTSNVPROC +epoxy_glCreateCommandListsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 8170 /* glCreateCommandListsNV */); +} + +static PFNGLCREATEFRAMEBUFFERSPROC +epoxy_glCreateFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8193 /* "glCreateFramebuffers" */, + 8193 /* "glCreateFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8193 /* "glCreateFramebuffers" */, + providers, entrypoints); +} + +static PFNGLCREATEPERFQUERYINTELPROC +epoxy_glCreatePerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 8214 /* glCreatePerfQueryINTEL */); +} + +static PFNGLCREATEPROGRAMPROC +epoxy_glCreateProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8237 /* "glCreateProgram" */, + 8237 /* "glCreateProgram" */, + 8253 /* "glCreateProgramObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8237 /* "glCreateProgram" */, + providers, entrypoints); +} + +static PFNGLCREATEPROGRAMOBJECTARBPROC +epoxy_glCreateProgramObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8253 /* "glCreateProgramObjectARB" */, + 8237 /* "glCreateProgram" */, + 8237 /* "glCreateProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 8253 /* "glCreateProgramObjectARB" */, + providers, entrypoints); +} + +static PFNGLCREATEPROGRAMPIPELINESPROC +epoxy_glCreateProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8278 /* "glCreateProgramPipelines" */, + 8278 /* "glCreateProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 8278 /* "glCreateProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLCREATEQUERIESPROC +epoxy_glCreateQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8303 /* "glCreateQueries" */, + 8303 /* "glCreateQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 8303 /* "glCreateQueries" */, + providers, entrypoints); +} + +static PFNGLCREATERENDERBUFFERSPROC +epoxy_glCreateRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8319 /* "glCreateRenderbuffers" */, + 8319 /* "glCreateRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8319 /* "glCreateRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLCREATESAMPLERSPROC +epoxy_glCreateSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8341 /* "glCreateSamplers" */, + 8341 /* "glCreateSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8341 /* "glCreateSamplers" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROC +epoxy_glCreateShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8358 /* "glCreateShader" */, + 8358 /* "glCreateShader" */, + 8373 /* "glCreateShaderObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8358 /* "glCreateShader" */, + providers, entrypoints); +} + +static PFNGLCREATESHADEROBJECTARBPROC +epoxy_glCreateShaderObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8373 /* "glCreateShaderObjectARB" */, + 8358 /* "glCreateShader" */, + 8358 /* "glCreateShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 8373 /* "glCreateShaderObjectARB" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROGRAMEXTPROC +epoxy_glCreateShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 8397 /* glCreateShaderProgramEXT */); +} + +static PFNGLCREATESHADERPROGRAMVPROC +epoxy_glCreateShaderProgramv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8422 /* "glCreateShaderProgramv" */, + 8422 /* "glCreateShaderProgramv" */, + 8422 /* "glCreateShaderProgramv" */, + }; + return gl_provider_resolver(entrypoint_strings + 8422 /* "glCreateShaderProgramv" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROGRAMVEXTPROC +epoxy_glCreateShaderProgramvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 8445 /* glCreateShaderProgramvEXT */); +} + +static PFNGLCREATESTATESNVPROC +epoxy_glCreateStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 8471 /* glCreateStatesNV */); +} + +static PFNGLCREATESYNCFROMCLEVENTARBPROC +epoxy_glCreateSyncFromCLeventARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_cl_event, 8488 /* glCreateSyncFromCLeventARB */); +} + +static PFNGLCREATETEXTURESPROC +epoxy_glCreateTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8515 /* "glCreateTextures" */, + 8515 /* "glCreateTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 8515 /* "glCreateTextures" */, + providers, entrypoints); +} + +static PFNGLCREATETRANSFORMFEEDBACKSPROC +epoxy_glCreateTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8532 /* "glCreateTransformFeedbacks" */, + 8532 /* "glCreateTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 8532 /* "glCreateTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLCREATEVERTEXARRAYSPROC +epoxy_glCreateVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8559 /* "glCreateVertexArrays" */, + 8559 /* "glCreateVertexArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 8559 /* "glCreateVertexArrays" */, + providers, entrypoints); +} + +static PFNGLCULLFACEPROC +epoxy_glCullFace_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8580 /* "glCullFace" */, + 8580 /* "glCullFace" */, + 8580 /* "glCullFace" */, + }; + return gl_provider_resolver(entrypoint_strings + 8580 /* "glCullFace" */, + providers, entrypoints); +} + +static PFNGLCULLPARAMETERDVEXTPROC +epoxy_glCullParameterdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_cull_vertex, 8591 /* glCullParameterdvEXT */); +} + +static PFNGLCULLPARAMETERFVEXTPROC +epoxy_glCullParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_cull_vertex, 8612 /* glCullParameterfvEXT */); +} + +static PFNGLCURRENTPALETTEMATRIXARBPROC +epoxy_glCurrentPaletteMatrixARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 8633 /* glCurrentPaletteMatrixARB */); +} + +static PFNGLCURRENTPALETTEMATRIXOESPROC +epoxy_glCurrentPaletteMatrixOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 8659 /* glCurrentPaletteMatrixOES */); +} + +static PFNGLDEBUGMESSAGECALLBACKPROC +epoxy_glDebugMessageCallback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8734 /* "glDebugMessageCallbackARB" */, + 8760 /* "glDebugMessageCallbackKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8685 /* "glDebugMessageCallback" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECALLBACKAMDPROC +epoxy_glDebugMessageCallbackAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8708 /* glDebugMessageCallbackAMD */); +} + +static PFNGLDEBUGMESSAGECALLBACKARBPROC +epoxy_glDebugMessageCallbackARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8734 /* "glDebugMessageCallbackARB" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8760 /* "glDebugMessageCallbackKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8734 /* "glDebugMessageCallbackARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECALLBACKKHRPROC +epoxy_glDebugMessageCallbackKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8760 /* "glDebugMessageCallbackKHR" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8734 /* "glDebugMessageCallbackARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8760 /* "glDebugMessageCallbackKHR" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLPROC +epoxy_glDebugMessageControl_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8808 /* "glDebugMessageControlARB" */, + 8833 /* "glDebugMessageControlKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8786 /* "glDebugMessageControl" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLARBPROC +epoxy_glDebugMessageControlARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8808 /* "glDebugMessageControlARB" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8833 /* "glDebugMessageControlKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8808 /* "glDebugMessageControlARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLKHRPROC +epoxy_glDebugMessageControlKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8833 /* "glDebugMessageControlKHR" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8808 /* "glDebugMessageControlARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8833 /* "glDebugMessageControlKHR" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEENABLEAMDPROC +epoxy_glDebugMessageEnableAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8858 /* glDebugMessageEnableAMD */); +} + +static PFNGLDEBUGMESSAGEINSERTPROC +epoxy_glDebugMessageInsert_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8927 /* "glDebugMessageInsertARB" */, + 8951 /* "glDebugMessageInsertKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8882 /* "glDebugMessageInsert" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEINSERTAMDPROC +epoxy_glDebugMessageInsertAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8903 /* glDebugMessageInsertAMD */); +} + +static PFNGLDEBUGMESSAGEINSERTARBPROC +epoxy_glDebugMessageInsertARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8927 /* "glDebugMessageInsertARB" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8951 /* "glDebugMessageInsertKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8927 /* "glDebugMessageInsertARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEINSERTKHRPROC +epoxy_glDebugMessageInsertKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8951 /* "glDebugMessageInsertKHR" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8927 /* "glDebugMessageInsertARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8951 /* "glDebugMessageInsertKHR" */, + providers, entrypoints); +} + +static PFNGLDEFORMSGIXPROC +epoxy_glDeformSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 8975 /* glDeformSGIX */); +} + +static PFNGLDEFORMATIONMAP3DSGIXPROC +epoxy_glDeformationMap3dSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 8988 /* glDeformationMap3dSGIX */); +} + +static PFNGLDEFORMATIONMAP3FSGIXPROC +epoxy_glDeformationMap3fSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 9011 /* glDeformationMap3fSGIX */); +} + +static PFNGLDELETEASYNCMARKERSSGIXPROC +epoxy_glDeleteAsyncMarkersSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 9034 /* glDeleteAsyncMarkersSGIX */); +} + +static PFNGLDELETEBUFFERSPROC +epoxy_glDeleteBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9075 /* "glDeleteBuffersARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9059 /* "glDeleteBuffers" */, + providers, entrypoints); +} + +static PFNGLDELETEBUFFERSARBPROC +epoxy_glDeleteBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9075 /* "glDeleteBuffersARB" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9075 /* "glDeleteBuffersARB" */, + providers, entrypoints); +} + +static PFNGLDELETECOMMANDLISTSNVPROC +epoxy_glDeleteCommandListsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 9094 /* glDeleteCommandListsNV */); +} + +static PFNGLDELETEFENCESAPPLEPROC +epoxy_glDeleteFencesAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 9117 /* glDeleteFencesAPPLE */); +} + +static PFNGLDELETEFENCESNVPROC +epoxy_glDeleteFencesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 9137 /* glDeleteFencesNV */); +} + +static PFNGLDELETEFRAGMENTSHADERATIPROC +epoxy_glDeleteFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 9154 /* glDeleteFragmentShaderATI */); +} + +static PFNGLDELETEFRAMEBUFFERSPROC +epoxy_glDeleteFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9201 /* "glDeleteFramebuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9180 /* "glDeleteFramebuffers" */, + providers, entrypoints); +} + +static PFNGLDELETEFRAMEBUFFERSEXTPROC +epoxy_glDeleteFramebuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9201 /* "glDeleteFramebuffersEXT" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9201 /* "glDeleteFramebuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDELETEFRAMEBUFFERSOESPROC +epoxy_glDeleteFramebuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 9225 /* glDeleteFramebuffersOES */); +} + +static PFNGLDELETELISTSPROC +epoxy_glDeleteLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 9249 /* glDeleteLists */); +} + +static PFNGLDELETENAMEDSTRINGARBPROC +epoxy_glDeleteNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 9263 /* glDeleteNamedStringARB */); +} + +static PFNGLDELETENAMESAMDPROC +epoxy_glDeleteNamesAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 9286 /* glDeleteNamesAMD */); +} + +static PFNGLDELETEOBJECTARBPROC +epoxy_glDeleteObjectARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 9303 /* glDeleteObjectARB */); +} + +static PFNGLDELETEOCCLUSIONQUERIESNVPROC +epoxy_glDeleteOcclusionQueriesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 9321 /* glDeleteOcclusionQueriesNV */); +} + +static PFNGLDELETEPATHSNVPROC +epoxy_glDeletePathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 9348 /* glDeletePathsNV */); +} + +static PFNGLDELETEPERFMONITORSAMDPROC +epoxy_glDeletePerfMonitorsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 9364 /* glDeletePerfMonitorsAMD */); +} + +static PFNGLDELETEPERFQUERYINTELPROC +epoxy_glDeletePerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 9388 /* glDeletePerfQueryINTEL */); +} + +static PFNGLDELETEPROGRAMPROC +epoxy_glDeleteProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9411 /* "glDeleteProgram" */, + 9411 /* "glDeleteProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 9411 /* "glDeleteProgram" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMPIPELINESPROC +epoxy_glDeleteProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9427 /* "glDeleteProgramPipelines" */, + 9427 /* "glDeleteProgramPipelines" */, + 9427 /* "glDeleteProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 9427 /* "glDeleteProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMPIPELINESEXTPROC +epoxy_glDeleteProgramPipelinesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 9452 /* glDeleteProgramPipelinesEXT */); +} + +static PFNGLDELETEPROGRAMSARBPROC +epoxy_glDeleteProgramsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9480 /* "glDeleteProgramsARB" */, + 9480 /* "glDeleteProgramsARB" */, + 9500 /* "glDeleteProgramsNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 9480 /* "glDeleteProgramsARB" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMSNVPROC +epoxy_glDeleteProgramsNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9500 /* "glDeleteProgramsNV" */, + 9480 /* "glDeleteProgramsARB" */, + 9480 /* "glDeleteProgramsARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9500 /* "glDeleteProgramsNV" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESPROC +epoxy_glDeleteQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9519 /* "glDeleteQueries" */, + 9519 /* "glDeleteQueries" */, + 9535 /* "glDeleteQueriesARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9519 /* "glDeleteQueries" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESARBPROC +epoxy_glDeleteQueriesARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9535 /* "glDeleteQueriesARB" */, + 9519 /* "glDeleteQueries" */, + 9519 /* "glDeleteQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 9535 /* "glDeleteQueriesARB" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESEXTPROC +epoxy_glDeleteQueriesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9554 /* "glDeleteQueriesEXT" */, + 9554 /* "glDeleteQueriesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9554 /* "glDeleteQueriesEXT" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSPROC +epoxy_glDeleteRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9595 /* "glDeleteRenderbuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9573 /* "glDeleteRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSEXTPROC +epoxy_glDeleteRenderbuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9595 /* "glDeleteRenderbuffersEXT" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9595 /* "glDeleteRenderbuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSOESPROC +epoxy_glDeleteRenderbuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 9620 /* glDeleteRenderbuffersOES */); +} + +static PFNGLDELETESAMPLERSPROC +epoxy_glDeleteSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9645 /* "glDeleteSamplers" */, + 9645 /* "glDeleteSamplers" */, + 9645 /* "glDeleteSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9645 /* "glDeleteSamplers" */, + providers, entrypoints); +} + +static PFNGLDELETESHADERPROC +epoxy_glDeleteShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9662 /* "glDeleteShader" */, + 9662 /* "glDeleteShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 9662 /* "glDeleteShader" */, + providers, entrypoints); +} + +static PFNGLDELETESTATESNVPROC +epoxy_glDeleteStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 9677 /* glDeleteStatesNV */); +} + +static PFNGLDELETESYNCPROC +epoxy_glDeleteSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9707 /* "glDeleteSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 9694 /* "glDeleteSync" */, + providers, entrypoints); +} + +static PFNGLDELETESYNCAPPLEPROC +epoxy_glDeleteSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9707 /* "glDeleteSyncAPPLE" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 9707 /* "glDeleteSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLDELETETEXTURESPROC +epoxy_glDeleteTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9725 /* "glDeleteTextures" */, + 9725 /* "glDeleteTextures" */, + 9725 /* "glDeleteTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 9725 /* "glDeleteTextures" */, + providers, entrypoints); +} + +static PFNGLDELETETEXTURESEXTPROC +epoxy_glDeleteTexturesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 9742 /* glDeleteTexturesEXT */); +} + +static PFNGLDELETETRANSFORMFEEDBACKSPROC +epoxy_glDeleteTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9789 /* "glDeleteTransformFeedbacksNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 9762 /* "glDeleteTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLDELETETRANSFORMFEEDBACKSNVPROC +epoxy_glDeleteTransformFeedbacksNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9789 /* "glDeleteTransformFeedbacksNV" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 9789 /* "glDeleteTransformFeedbacksNV" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSPROC +epoxy_glDeleteVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9839 /* "glDeleteVertexArraysAPPLE" */, + 9865 /* "glDeleteVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 9818 /* "glDeleteVertexArrays" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSAPPLEPROC +epoxy_glDeleteVertexArraysAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9839 /* "glDeleteVertexArraysAPPLE" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9865 /* "glDeleteVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 9839 /* "glDeleteVertexArraysAPPLE" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSOESPROC +epoxy_glDeleteVertexArraysOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9865 /* "glDeleteVertexArraysOES" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9839 /* "glDeleteVertexArraysAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 9865 /* "glDeleteVertexArraysOES" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXSHADEREXTPROC +epoxy_glDeleteVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 9889 /* glDeleteVertexShaderEXT */); +} + +static PFNGLDEPTHBOUNDSEXTPROC +epoxy_glDepthBoundsEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_depth_bounds_test, 9913 /* glDepthBoundsEXT */); +} + +static PFNGLDEPTHBOUNDSDNVPROC +epoxy_glDepthBoundsdNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 9930 /* glDepthBoundsdNV */); +} + +static PFNGLDEPTHFUNCPROC +epoxy_glDepthFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9947 /* "glDepthFunc" */, + 9947 /* "glDepthFunc" */, + 9947 /* "glDepthFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 9947 /* "glDepthFunc" */, + providers, entrypoints); +} + +static PFNGLDEPTHMASKPROC +epoxy_glDepthMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9959 /* "glDepthMask" */, + 9959 /* "glDepthMask" */, + 9959 /* "glDepthMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 9959 /* "glDepthMask" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEPROC +epoxy_glDepthRange_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 9971 /* glDepthRange */); +} + +static PFNGLDEPTHRANGEARRAYFVNVPROC +epoxy_glDepthRangeArrayfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_viewport_array, 9984 /* glDepthRangeArrayfvNV */); +} + +static PFNGLDEPTHRANGEARRAYVPROC +epoxy_glDepthRangeArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10006 /* "glDepthRangeArrayv" */, + 10006 /* "glDepthRangeArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 10006 /* "glDepthRangeArrayv" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEINDEXEDPROC +epoxy_glDepthRangeIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10025 /* "glDepthRangeIndexed" */, + 10025 /* "glDepthRangeIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 10025 /* "glDepthRangeIndexed" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEINDEXEDFNVPROC +epoxy_glDepthRangeIndexedfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_viewport_array, 10045 /* glDepthRangeIndexedfNV */); +} + +static PFNGLDEPTHRANGEDNVPROC +epoxy_glDepthRangedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 10068 /* glDepthRangedNV */); +} + +static PFNGLDEPTHRANGEFPROC +epoxy_glDepthRangef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_OES_single_precision, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10098 /* "glDepthRangefOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10084 /* "glDepthRangef" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEFOESPROC +epoxy_glDepthRangefOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_single_precision, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10098 /* "glDepthRangefOES" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + }; + return gl_provider_resolver(entrypoint_strings + 10098 /* "glDepthRangefOES" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEXPROC +epoxy_glDepthRangex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 10115 /* glDepthRangex */); +} + +static PFNGLDEPTHRANGEXOESPROC +epoxy_glDepthRangexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 10129 /* glDepthRangexOES */); +} + +static PFNGLDETACHOBJECTARBPROC +epoxy_glDetachObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10146 /* "glDetachObjectARB" */, + 10164 /* "glDetachShader" */, + 10164 /* "glDetachShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 10146 /* "glDetachObjectARB" */, + providers, entrypoints); +} + +static PFNGLDETACHSHADERPROC +epoxy_glDetachShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10164 /* "glDetachShader" */, + 10164 /* "glDetachShader" */, + 10146 /* "glDetachObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 10164 /* "glDetachShader" */, + providers, entrypoints); +} + +static PFNGLDETAILTEXFUNCSGISPROC +epoxy_glDetailTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_detail_texture, 10179 /* glDetailTexFuncSGIS */); +} + +static PFNGLDISABLEPROC +epoxy_glDisable_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10199 /* "glDisable" */, + 10199 /* "glDisable" */, + 10199 /* "glDisable" */, + }; + return gl_provider_resolver(entrypoint_strings + 10199 /* "glDisable" */, + providers, entrypoints); +} + +static PFNGLDISABLECLIENTSTATEPROC +epoxy_glDisableClientState_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10209 /* "glDisableClientState" */, + 10209 /* "glDisableClientState" */, + }; + return gl_provider_resolver(entrypoint_strings + 10209 /* "glDisableClientState" */, + providers, entrypoints); +} + +static PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC +epoxy_glDisableClientStateIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10230 /* glDisableClientStateIndexedEXT */); +} + +static PFNGLDISABLECLIENTSTATEIEXTPROC +epoxy_glDisableClientStateiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10261 /* glDisableClientStateiEXT */); +} + +static PFNGLDISABLEDRIVERCONTROLQCOMPROC +epoxy_glDisableDriverControlQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 10286 /* glDisableDriverControlQCOM */); +} + +static PFNGLDISABLEINDEXEDEXTPROC +epoxy_glDisableIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10313 /* "glDisableIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC +epoxy_glDisableVariantClientStateEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 10333 /* glDisableVariantClientStateEXT */); +} + +static PFNGLDISABLEVERTEXARRAYATTRIBPROC +epoxy_glDisableVertexArrayAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10364 /* "glDisableVertexArrayAttrib" */, + 10364 /* "glDisableVertexArrayAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 10364 /* "glDisableVertexArrayAttrib" */, + providers, entrypoints); +} + +static PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC +epoxy_glDisableVertexArrayAttribEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10391 /* glDisableVertexArrayAttribEXT */); +} + +static PFNGLDISABLEVERTEXARRAYEXTPROC +epoxy_glDisableVertexArrayEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10421 /* glDisableVertexArrayEXT */); +} + +static PFNGLDISABLEVERTEXATTRIBAPPLEPROC +epoxy_glDisableVertexAttribAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 10445 /* glDisableVertexAttribAPPLE */); +} + +static PFNGLDISABLEVERTEXATTRIBARRAYPROC +epoxy_glDisableVertexAttribArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10472 /* "glDisableVertexAttribArray" */, + 10472 /* "glDisableVertexAttribArray" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 10472 /* "glDisableVertexAttribArray" */, + providers, entrypoints); +} + +static PFNGLDISABLEVERTEXATTRIBARRAYARBPROC +epoxy_glDisableVertexAttribArrayARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10499 /* "glDisableVertexAttribArrayARB" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + 10472 /* "glDisableVertexAttribArray" */, + 10472 /* "glDisableVertexAttribArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 10499 /* "glDisableVertexAttribArrayARB" */, + providers, entrypoints); +} + +static PFNGLDISABLEIPROC +epoxy_glDisablei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10529 /* "glDisablei" */, + providers, entrypoints); +} + +static PFNGLDISABLEIEXTPROC +epoxy_glDisableiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10540 /* "glDisableiEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10540 /* "glDisableiEXT" */, + providers, entrypoints); +} + +static PFNGLDISABLEINVPROC +epoxy_glDisableiNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10554 /* "glDisableiNV" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10554 /* "glDisableiNV" */, + providers, entrypoints); +} + +static PFNGLDISABLEIOESPROC +epoxy_glDisableiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10567 /* "glDisableiOES" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10567 /* "glDisableiOES" */, + providers, entrypoints); +} + +static PFNGLDISCARDFRAMEBUFFEREXTPROC +epoxy_glDiscardFramebufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_discard_framebuffer, 10581 /* glDiscardFramebufferEXT */); +} + +static PFNGLDISPATCHCOMPUTEPROC +epoxy_glDispatchCompute_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_compute_shader, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10605 /* "glDispatchCompute" */, + 10605 /* "glDispatchCompute" */, + 10605 /* "glDispatchCompute" */, + }; + return gl_provider_resolver(entrypoint_strings + 10605 /* "glDispatchCompute" */, + providers, entrypoints); +} + +static PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC +epoxy_glDispatchComputeGroupSizeARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_compute_variable_group_size, 10623 /* glDispatchComputeGroupSizeARB */); +} + +static PFNGLDISPATCHCOMPUTEINDIRECTPROC +epoxy_glDispatchComputeIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_compute_shader, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10653 /* "glDispatchComputeIndirect" */, + 10653 /* "glDispatchComputeIndirect" */, + 10653 /* "glDispatchComputeIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 10653 /* "glDispatchComputeIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSPROC +epoxy_glDrawArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10692 /* "glDrawArraysEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10679 /* "glDrawArrays" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSEXTPROC +epoxy_glDrawArraysEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10692 /* "glDrawArraysEXT" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 10692 /* "glDrawArraysEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINDIRECTPROC +epoxy_glDrawArraysIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_draw_indirect, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10708 /* "glDrawArraysIndirect" */, + 10708 /* "glDrawArraysIndirect" */, + 10708 /* "glDrawArraysIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 10708 /* "glDrawArraysIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDPROC +epoxy_glDrawArraysInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10729 /* "glDrawArraysInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDANGLEPROC +epoxy_glDrawArraysInstancedANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10751 /* "glDrawArraysInstancedANGLE" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10751 /* "glDrawArraysInstancedANGLE" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDARBPROC +epoxy_glDrawArraysInstancedARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10778 /* "glDrawArraysInstancedARB" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10778 /* "glDrawArraysInstancedARB" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC +epoxy_glDrawArraysInstancedBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10803 /* "glDrawArraysInstancedBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC +epoxy_glDrawArraysInstancedBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDEXTPROC +epoxy_glDrawArraysInstancedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10874 /* "glDrawArraysInstancedEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDNVPROC +epoxy_glDrawArraysInstancedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10899 /* "glDrawArraysInstancedNV" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10899 /* "glDrawArraysInstancedNV" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERPROC +epoxy_glDrawBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 10923 /* glDrawBuffer */); +} + +static PFNGLDRAWBUFFERSPROC +epoxy_glDrawBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10967 /* "glDrawBuffersATI" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10936 /* "glDrawBuffers" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSARBPROC +epoxy_glDrawBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10950 /* "glDrawBuffersARB" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10967 /* "glDrawBuffersATI" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10950 /* "glDrawBuffersARB" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSATIPROC +epoxy_glDrawBuffersATI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ATI_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10967 /* "glDrawBuffersATI" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10967 /* "glDrawBuffersATI" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSEXTPROC +epoxy_glDrawBuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ATI_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10984 /* "glDrawBuffersEXT" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10967 /* "glDrawBuffersATI" */, + }; + return gl_provider_resolver(entrypoint_strings + 10984 /* "glDrawBuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSINDEXEDEXTPROC +epoxy_glDrawBuffersIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 11001 /* glDrawBuffersIndexedEXT */); +} + +static PFNGLDRAWBUFFERSNVPROC +epoxy_glDrawBuffersNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_draw_buffers, 11025 /* glDrawBuffersNV */); +} + +static PFNGLDRAWCOMMANDSADDRESSNVPROC +epoxy_glDrawCommandsAddressNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11041 /* glDrawCommandsAddressNV */); +} + +static PFNGLDRAWCOMMANDSNVPROC +epoxy_glDrawCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11065 /* glDrawCommandsNV */); +} + +static PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC +epoxy_glDrawCommandsStatesAddressNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11082 /* glDrawCommandsStatesAddressNV */); +} + +static PFNGLDRAWCOMMANDSSTATESNVPROC +epoxy_glDrawCommandsStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11112 /* glDrawCommandsStatesNV */); +} + +static PFNGLDRAWELEMENTARRAYAPPLEPROC +epoxy_glDrawElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 11135 /* glDrawElementArrayAPPLE */); +} + +static PFNGLDRAWELEMENTARRAYATIPROC +epoxy_glDrawElementArrayATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 11159 /* glDrawElementArrayATI */); +} + +static PFNGLDRAWELEMENTSPROC +epoxy_glDrawElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11181 /* "glDrawElements" */, + 11181 /* "glDrawElements" */, + 11181 /* "glDrawElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 11181 /* "glDrawElements" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXPROC +epoxy_glDrawElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11221 /* "glDrawElementsBaseVertexEXT" */, + 11249 /* "glDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11196 /* "glDrawElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXEXTPROC +epoxy_glDrawElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11221 /* "glDrawElementsBaseVertexEXT" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11249 /* "glDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11221 /* "glDrawElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXOESPROC +epoxy_glDrawElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11249 /* "glDrawElementsBaseVertexOES" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11221 /* "glDrawElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11249 /* "glDrawElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINDIRECTPROC +epoxy_glDrawElementsIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_draw_indirect, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11277 /* "glDrawElementsIndirect" */, + 11277 /* "glDrawElementsIndirect" */, + 11277 /* "glDrawElementsIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 11277 /* "glDrawElementsIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDPROC +epoxy_glDrawElementsInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11300 /* "glDrawElementsInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDANGLEPROC +epoxy_glDrawElementsInstancedANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11324 /* "glDrawElementsInstancedANGLE" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11324 /* "glDrawElementsInstancedANGLE" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDARBPROC +epoxy_glDrawElementsInstancedARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11353 /* "glDrawElementsInstancedARB" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11353 /* "glDrawElementsInstancedARB" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC +epoxy_glDrawElementsInstancedBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11380 /* "glDrawElementsInstancedBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC +epoxy_glDrawElementsInstancedBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC +epoxy_glDrawElementsInstancedBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11455 /* "glDrawElementsInstancedBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC +epoxy_glDrawElementsInstancedBaseVertexBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC +epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC +epoxy_glDrawElementsInstancedBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC +epoxy_glDrawElementsInstancedBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDEXTPROC +epoxy_glDrawElementsInstancedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11658 /* "glDrawElementsInstancedEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDNVPROC +epoxy_glDrawElementsInstancedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11685 /* "glDrawElementsInstancedNV" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11685 /* "glDrawElementsInstancedNV" */, + providers, entrypoints); +} + +static PFNGLDRAWMESHARRAYSSUNPROC +epoxy_glDrawMeshArraysSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_mesh_array, 11711 /* glDrawMeshArraysSUN */); +} + +static PFNGLDRAWPIXELSPROC +epoxy_glDrawPixels_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 11731 /* glDrawPixels */); +} + +static PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC +epoxy_glDrawRangeElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 11744 /* glDrawRangeElementArrayAPPLE */); +} + +static PFNGLDRAWRANGEELEMENTARRAYATIPROC +epoxy_glDrawRangeElementArrayATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 11773 /* glDrawRangeElementArrayATI */); +} + +static PFNGLDRAWRANGEELEMENTSPROC +epoxy_glDrawRangeElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_draw_range_elements, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11800 /* "glDrawRangeElements" */, + 11800 /* "glDrawRangeElements" */, + 11916 /* "glDrawRangeElementsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11800 /* "glDrawRangeElements" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC +epoxy_glDrawRangeElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11820 /* "glDrawRangeElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC +epoxy_glDrawRangeElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC +epoxy_glDrawRangeElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSEXTPROC +epoxy_glDrawRangeElementsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_range_elements, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11916 /* "glDrawRangeElementsEXT" */, + 11800 /* "glDrawRangeElements" */, + 11800 /* "glDrawRangeElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 11916 /* "glDrawRangeElementsEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWTEXFOESPROC +epoxy_glDrawTexfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11939 /* glDrawTexfOES */); +} + +static PFNGLDRAWTEXFVOESPROC +epoxy_glDrawTexfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11953 /* glDrawTexfvOES */); +} + +static PFNGLDRAWTEXIOESPROC +epoxy_glDrawTexiOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11968 /* glDrawTexiOES */); +} + +static PFNGLDRAWTEXIVOESPROC +epoxy_glDrawTexivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11982 /* glDrawTexivOES */); +} + +static PFNGLDRAWTEXSOESPROC +epoxy_glDrawTexsOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11997 /* glDrawTexsOES */); +} + +static PFNGLDRAWTEXSVOESPROC +epoxy_glDrawTexsvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12011 /* glDrawTexsvOES */); +} + +static PFNGLDRAWTEXTURENVPROC +epoxy_glDrawTextureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_draw_texture, 12026 /* glDrawTextureNV */); +} + +static PFNGLDRAWTEXXOESPROC +epoxy_glDrawTexxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12042 /* glDrawTexxOES */); +} + +static PFNGLDRAWTEXXVOESPROC +epoxy_glDrawTexxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12056 /* glDrawTexxvOES */); +} + +static PFNGLDRAWTRANSFORMFEEDBACKPROC +epoxy_glDrawTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12071 /* "glDrawTransformFeedback" */, + 12071 /* "glDrawTransformFeedback" */, + 12128 /* "glDrawTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12071 /* "glDrawTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC +epoxy_glDrawTransformFeedbackInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_transform_feedback_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12095 /* "glDrawTransformFeedbackInstanced" */, + 12095 /* "glDrawTransformFeedbackInstanced" */, + }; + return gl_provider_resolver(entrypoint_strings + 12095 /* "glDrawTransformFeedbackInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKNVPROC +epoxy_glDrawTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12128 /* "glDrawTransformFeedbackNV" */, + 12071 /* "glDrawTransformFeedback" */, + 12071 /* "glDrawTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 12128 /* "glDrawTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC +epoxy_glDrawTransformFeedbackStream_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12154 /* "glDrawTransformFeedbackStream" */, + 12154 /* "glDrawTransformFeedbackStream" */, + }; + return gl_provider_resolver(entrypoint_strings + 12154 /* "glDrawTransformFeedbackStream" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC +epoxy_glDrawTransformFeedbackStreamInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_transform_feedback_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + }; + return gl_provider_resolver(entrypoint_strings + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + providers, entrypoints); +} + +static PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC +epoxy_glEGLImageTargetRenderbufferStorageOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_EGL_image, 12223 /* glEGLImageTargetRenderbufferStorageOES */); +} + +static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC +epoxy_glEGLImageTargetTexture2DOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_EGL_image, 12262 /* glEGLImageTargetTexture2DOES */); +} + +static PFNGLEDGEFLAGPROC +epoxy_glEdgeFlag_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12291 /* glEdgeFlag */); +} + +static PFNGLEDGEFLAGFORMATNVPROC +epoxy_glEdgeFlagFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 12302 /* glEdgeFlagFormatNV */); +} + +static PFNGLEDGEFLAGPOINTERPROC +epoxy_glEdgeFlagPointer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 12321 /* glEdgeFlagPointer */); +} + +static PFNGLEDGEFLAGPOINTEREXTPROC +epoxy_glEdgeFlagPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 12339 /* glEdgeFlagPointerEXT */); +} + +static PFNGLEDGEFLAGPOINTERLISTIBMPROC +epoxy_glEdgeFlagPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 12360 /* glEdgeFlagPointerListIBM */); +} + +static PFNGLEDGEFLAGVPROC +epoxy_glEdgeFlagv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12385 /* glEdgeFlagv */); +} + +static PFNGLELEMENTPOINTERAPPLEPROC +epoxy_glElementPointerAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 12397 /* glElementPointerAPPLE */); +} + +static PFNGLELEMENTPOINTERATIPROC +epoxy_glElementPointerATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 12419 /* glElementPointerATI */); +} + +static PFNGLENABLEPROC +epoxy_glEnable_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12439 /* "glEnable" */, + 12439 /* "glEnable" */, + 12439 /* "glEnable" */, + }; + return gl_provider_resolver(entrypoint_strings + 12439 /* "glEnable" */, + providers, entrypoints); +} + +static PFNGLENABLECLIENTSTATEPROC +epoxy_glEnableClientState_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12448 /* "glEnableClientState" */, + 12448 /* "glEnableClientState" */, + }; + return gl_provider_resolver(entrypoint_strings + 12448 /* "glEnableClientState" */, + providers, entrypoints); +} + +static PFNGLENABLECLIENTSTATEINDEXEDEXTPROC +epoxy_glEnableClientStateIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12468 /* glEnableClientStateIndexedEXT */); +} + +static PFNGLENABLECLIENTSTATEIEXTPROC +epoxy_glEnableClientStateiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12498 /* glEnableClientStateiEXT */); +} + +static PFNGLENABLEDRIVERCONTROLQCOMPROC +epoxy_glEnableDriverControlQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 12522 /* glEnableDriverControlQCOM */); +} + +static PFNGLENABLEINDEXEDEXTPROC +epoxy_glEnableIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12548 /* "glEnableIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLENABLEVARIANTCLIENTSTATEEXTPROC +epoxy_glEnableVariantClientStateEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 12567 /* glEnableVariantClientStateEXT */); +} + +static PFNGLENABLEVERTEXARRAYATTRIBPROC +epoxy_glEnableVertexArrayAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12597 /* "glEnableVertexArrayAttrib" */, + 12597 /* "glEnableVertexArrayAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 12597 /* "glEnableVertexArrayAttrib" */, + providers, entrypoints); +} + +static PFNGLENABLEVERTEXARRAYATTRIBEXTPROC +epoxy_glEnableVertexArrayAttribEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12623 /* glEnableVertexArrayAttribEXT */); +} + +static PFNGLENABLEVERTEXARRAYEXTPROC +epoxy_glEnableVertexArrayEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12652 /* glEnableVertexArrayEXT */); +} + +static PFNGLENABLEVERTEXATTRIBAPPLEPROC +epoxy_glEnableVertexAttribAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 12675 /* glEnableVertexAttribAPPLE */); +} + +static PFNGLENABLEVERTEXATTRIBARRAYPROC +epoxy_glEnableVertexAttribArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12701 /* "glEnableVertexAttribArray" */, + 12701 /* "glEnableVertexAttribArray" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 12701 /* "glEnableVertexAttribArray" */, + providers, entrypoints); +} + +static PFNGLENABLEVERTEXATTRIBARRAYARBPROC +epoxy_glEnableVertexAttribArrayARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12727 /* "glEnableVertexAttribArrayARB" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + 12701 /* "glEnableVertexAttribArray" */, + 12701 /* "glEnableVertexAttribArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 12727 /* "glEnableVertexAttribArrayARB" */, + providers, entrypoints); +} + +static PFNGLENABLEIPROC +epoxy_glEnablei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12756 /* "glEnablei" */, + providers, entrypoints); +} + +static PFNGLENABLEIEXTPROC +epoxy_glEnableiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12766 /* "glEnableiEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12766 /* "glEnableiEXT" */, + providers, entrypoints); +} + +static PFNGLENABLEINVPROC +epoxy_glEnableiNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12779 /* "glEnableiNV" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12779 /* "glEnableiNV" */, + providers, entrypoints); +} + +static PFNGLENABLEIOESPROC +epoxy_glEnableiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12791 /* "glEnableiOES" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12791 /* "glEnableiOES" */, + providers, entrypoints); +} + +static PFNGLENDPROC +epoxy_glEnd_unwrapped_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12804 /* glEnd */); +} + +static PFNGLENDCONDITIONALRENDERPROC +epoxy_glEndConditionalRender_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + GL_extension_GL_NVX_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12810 /* "glEndConditionalRender" */, + 12833 /* "glEndConditionalRenderNV" */, + 12858 /* "glEndConditionalRenderNVX" */, + }; + return gl_provider_resolver(entrypoint_strings + 12810 /* "glEndConditionalRender" */, + providers, entrypoints); +} + +static PFNGLENDCONDITIONALRENDERNVPROC +epoxy_glEndConditionalRenderNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_conditional_render, + Desktop_OpenGL_3_0, + GL_extension_GL_NVX_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12833 /* "glEndConditionalRenderNV" */, + 12810 /* "glEndConditionalRender" */, + 12858 /* "glEndConditionalRenderNVX" */, + }; + return gl_provider_resolver(entrypoint_strings + 12833 /* "glEndConditionalRenderNV" */, + providers, entrypoints); +} + +static PFNGLENDCONDITIONALRENDERNVXPROC +epoxy_glEndConditionalRenderNVX_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NVX_conditional_render, + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12858 /* "glEndConditionalRenderNVX" */, + 12810 /* "glEndConditionalRender" */, + 12833 /* "glEndConditionalRenderNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12858 /* "glEndConditionalRenderNVX" */, + providers, entrypoints); +} + +static PFNGLENDFRAGMENTSHADERATIPROC +epoxy_glEndFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 12884 /* glEndFragmentShaderATI */); +} + +static PFNGLENDLISTPROC +epoxy_glEndList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12907 /* glEndList */); +} + +static PFNGLENDOCCLUSIONQUERYNVPROC +epoxy_glEndOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 12917 /* glEndOcclusionQueryNV */); +} + +static PFNGLENDPERFMONITORAMDPROC +epoxy_glEndPerfMonitorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 12939 /* glEndPerfMonitorAMD */); +} + +static PFNGLENDPERFQUERYINTELPROC +epoxy_glEndPerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 12959 /* glEndPerfQueryINTEL */); +} + +static PFNGLENDQUERYPROC +epoxy_glEndQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12979 /* "glEndQuery" */, + 12979 /* "glEndQuery" */, + 12990 /* "glEndQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 12979 /* "glEndQuery" */, + providers, entrypoints); +} + +static PFNGLENDQUERYARBPROC +epoxy_glEndQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12990 /* "glEndQueryARB" */, + 12979 /* "glEndQuery" */, + 12979 /* "glEndQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 12990 /* "glEndQueryARB" */, + providers, entrypoints); +} + +static PFNGLENDQUERYEXTPROC +epoxy_glEndQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13004 /* "glEndQueryEXT" */, + 13004 /* "glEndQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13004 /* "glEndQueryEXT" */, + providers, entrypoints); +} + +static PFNGLENDQUERYINDEXEDPROC +epoxy_glEndQueryIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13018 /* "glEndQueryIndexed" */, + 13018 /* "glEndQueryIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 13018 /* "glEndQueryIndexed" */, + providers, entrypoints); +} + +static PFNGLENDTILINGQCOMPROC +epoxy_glEndTilingQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_tiled_rendering, 13036 /* glEndTilingQCOM */); +} + +static PFNGLENDTRANSFORMFEEDBACKPROC +epoxy_glEndTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13075 /* "glEndTransformFeedbackEXT" */, + 13101 /* "glEndTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 13052 /* "glEndTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLENDTRANSFORMFEEDBACKEXTPROC +epoxy_glEndTransformFeedbackEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13075 /* "glEndTransformFeedbackEXT" */, + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13101 /* "glEndTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 13075 /* "glEndTransformFeedbackEXT" */, + providers, entrypoints); +} + +static PFNGLENDTRANSFORMFEEDBACKNVPROC +epoxy_glEndTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13101 /* "glEndTransformFeedbackNV" */, + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13075 /* "glEndTransformFeedbackEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13101 /* "glEndTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLENDVERTEXSHADEREXTPROC +epoxy_glEndVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 13126 /* glEndVertexShaderEXT */); +} + +static PFNGLENDVIDEOCAPTURENVPROC +epoxy_glEndVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 13147 /* glEndVideoCaptureNV */); +} + +static PFNGLEVALCOORD1DPROC +epoxy_glEvalCoord1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13167 /* glEvalCoord1d */); +} + +static PFNGLEVALCOORD1DVPROC +epoxy_glEvalCoord1dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13181 /* glEvalCoord1dv */); +} + +static PFNGLEVALCOORD1FPROC +epoxy_glEvalCoord1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13196 /* glEvalCoord1f */); +} + +static PFNGLEVALCOORD1FVPROC +epoxy_glEvalCoord1fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13210 /* glEvalCoord1fv */); +} + +static PFNGLEVALCOORD1XOESPROC +epoxy_glEvalCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13225 /* glEvalCoord1xOES */); +} + +static PFNGLEVALCOORD1XVOESPROC +epoxy_glEvalCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13242 /* glEvalCoord1xvOES */); +} + +static PFNGLEVALCOORD2DPROC +epoxy_glEvalCoord2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13260 /* glEvalCoord2d */); +} + +static PFNGLEVALCOORD2DVPROC +epoxy_glEvalCoord2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13274 /* glEvalCoord2dv */); +} + +static PFNGLEVALCOORD2FPROC +epoxy_glEvalCoord2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13289 /* glEvalCoord2f */); +} + +static PFNGLEVALCOORD2FVPROC +epoxy_glEvalCoord2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13303 /* glEvalCoord2fv */); +} + +static PFNGLEVALCOORD2XOESPROC +epoxy_glEvalCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13318 /* glEvalCoord2xOES */); +} + +static PFNGLEVALCOORD2XVOESPROC +epoxy_glEvalCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13335 /* glEvalCoord2xvOES */); +} + +static PFNGLEVALMAPSNVPROC +epoxy_glEvalMapsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 13353 /* glEvalMapsNV */); +} + +static PFNGLEVALMESH1PROC +epoxy_glEvalMesh1_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13366 /* glEvalMesh1 */); +} + +static PFNGLEVALMESH2PROC +epoxy_glEvalMesh2_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13378 /* glEvalMesh2 */); +} + +static PFNGLEVALPOINT1PROC +epoxy_glEvalPoint1_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13390 /* glEvalPoint1 */); +} + +static PFNGLEVALPOINT2PROC +epoxy_glEvalPoint2_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13403 /* glEvalPoint2 */); +} + +static PFNGLEVALUATEDEPTHVALUESARBPROC +epoxy_glEvaluateDepthValuesARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 13416 /* glEvaluateDepthValuesARB */); +} + +static PFNGLEXECUTEPROGRAMNVPROC +epoxy_glExecuteProgramNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 13441 /* glExecuteProgramNV */); +} + +static PFNGLEXTGETBUFFERPOINTERVQCOMPROC +epoxy_glExtGetBufferPointervQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13460 /* glExtGetBufferPointervQCOM */); +} + +static PFNGLEXTGETBUFFERSQCOMPROC +epoxy_glExtGetBuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13487 /* glExtGetBuffersQCOM */); +} + +static PFNGLEXTGETFRAMEBUFFERSQCOMPROC +epoxy_glExtGetFramebuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13507 /* glExtGetFramebuffersQCOM */); +} + +static PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC +epoxy_glExtGetProgramBinarySourceQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13532 /* glExtGetProgramBinarySourceQCOM */); +} + +static PFNGLEXTGETPROGRAMSQCOMPROC +epoxy_glExtGetProgramsQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13564 /* glExtGetProgramsQCOM */); +} + +static PFNGLEXTGETRENDERBUFFERSQCOMPROC +epoxy_glExtGetRenderbuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13585 /* glExtGetRenderbuffersQCOM */); +} + +static PFNGLEXTGETSHADERSQCOMPROC +epoxy_glExtGetShadersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13611 /* glExtGetShadersQCOM */); +} + +static PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC +epoxy_glExtGetTexLevelParameterivQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13631 /* glExtGetTexLevelParameterivQCOM */); +} + +static PFNGLEXTGETTEXSUBIMAGEQCOMPROC +epoxy_glExtGetTexSubImageQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13663 /* glExtGetTexSubImageQCOM */); +} + +static PFNGLEXTGETTEXTURESQCOMPROC +epoxy_glExtGetTexturesQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13687 /* glExtGetTexturesQCOM */); +} + +static PFNGLEXTISPROGRAMBINARYQCOMPROC +epoxy_glExtIsProgramBinaryQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13708 /* glExtIsProgramBinaryQCOM */); +} + +static PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC +epoxy_glExtTexObjectStateOverrideiQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13733 /* glExtTexObjectStateOverrideiQCOM */); +} + +static PFNGLEXTRACTCOMPONENTEXTPROC +epoxy_glExtractComponentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 13766 /* glExtractComponentEXT */); +} + +static PFNGLFEEDBACKBUFFERPROC +epoxy_glFeedbackBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13788 /* glFeedbackBuffer */); +} + +static PFNGLFEEDBACKBUFFERXOESPROC +epoxy_glFeedbackBufferxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13805 /* glFeedbackBufferxOES */); +} + +static PFNGLFENCESYNCPROC +epoxy_glFenceSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13838 /* "glFenceSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 13826 /* "glFenceSync" */, + providers, entrypoints); +} + +static PFNGLFENCESYNCAPPLEPROC +epoxy_glFenceSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13838 /* "glFenceSyncAPPLE" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 13838 /* "glFenceSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLFINALCOMBINERINPUTNVPROC +epoxy_glFinalCombinerInputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 13855 /* glFinalCombinerInputNV */); +} + +static PFNGLFINISHPROC +epoxy_glFinish_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13878 /* "glFinish" */, + 13878 /* "glFinish" */, + 13878 /* "glFinish" */, + }; + return gl_provider_resolver(entrypoint_strings + 13878 /* "glFinish" */, + providers, entrypoints); +} + +static PFNGLFINISHASYNCSGIXPROC +epoxy_glFinishAsyncSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 13887 /* glFinishAsyncSGIX */); +} + +static PFNGLFINISHFENCEAPPLEPROC +epoxy_glFinishFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 13905 /* glFinishFenceAPPLE */); +} + +static PFNGLFINISHFENCENVPROC +epoxy_glFinishFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 13924 /* glFinishFenceNV */); +} + +static PFNGLFINISHOBJECTAPPLEPROC +epoxy_glFinishObjectAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 13940 /* glFinishObjectAPPLE */); +} + +static PFNGLFINISHTEXTURESUNXPROC +epoxy_glFinishTextureSUNX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUNX_constant_data, 13960 /* glFinishTextureSUNX */); +} + +static PFNGLFLUSHPROC +epoxy_glFlush_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13980 /* "glFlush" */, + 13980 /* "glFlush" */, + 13980 /* "glFlush" */, + }; + return gl_provider_resolver(entrypoint_strings + 13980 /* "glFlush" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEPROC +epoxy_glFlushMappedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_flush_buffer_range, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + 14043 /* "glFlushMappedBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13988 /* "glFlushMappedBufferRange" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC +epoxy_glFlushMappedBufferRangeAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_flush_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14043 /* "glFlushMappedBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC +epoxy_glFlushMappedBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_map_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_flush_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14043 /* "glFlushMappedBufferRangeEXT" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 14043 /* "glFlushMappedBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC +epoxy_glFlushMappedNamedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14071 /* "glFlushMappedNamedBufferRange" */, + 14071 /* "glFlushMappedNamedBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 14071 /* "glFlushMappedNamedBufferRange" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC +epoxy_glFlushMappedNamedBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14101 /* glFlushMappedNamedBufferRangeEXT */); +} + +static PFNGLFLUSHPIXELDATARANGENVPROC +epoxy_glFlushPixelDataRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_pixel_data_range, 14134 /* glFlushPixelDataRangeNV */); +} + +static PFNGLFLUSHRASTERSGIXPROC +epoxy_glFlushRasterSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_flush_raster, 14158 /* glFlushRasterSGIX */); +} + +static PFNGLFLUSHSTATICDATAIBMPROC +epoxy_glFlushStaticDataIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_static_data, 14176 /* glFlushStaticDataIBM */); +} + +static PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC +epoxy_glFlushVertexArrayRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 14197 /* glFlushVertexArrayRangeAPPLE */); +} + +static PFNGLFLUSHVERTEXARRAYRANGENVPROC +epoxy_glFlushVertexArrayRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_array_range, 14226 /* glFlushVertexArrayRangeNV */); +} + +static PFNGLFOGCOORDFORMATNVPROC +epoxy_glFogCoordFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 14252 /* glFogCoordFormatNV */); +} + +static PFNGLFOGCOORDPOINTERPROC +epoxy_glFogCoordPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14271 /* "glFogCoordPointer" */, + 14289 /* "glFogCoordPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14271 /* "glFogCoordPointer" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDPOINTEREXTPROC +epoxy_glFogCoordPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14289 /* "glFogCoordPointerEXT" */, + 14271 /* "glFogCoordPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 14289 /* "glFogCoordPointerEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDPOINTERLISTIBMPROC +epoxy_glFogCoordPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 14310 /* glFogCoordPointerListIBM */); +} + +static PFNGLFOGCOORDDPROC +epoxy_glFogCoordd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14335 /* "glFogCoordd" */, + 14347 /* "glFogCoorddEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14335 /* "glFogCoordd" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDEXTPROC +epoxy_glFogCoorddEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14347 /* "glFogCoorddEXT" */, + 14335 /* "glFogCoordd" */, + }; + return gl_provider_resolver(entrypoint_strings + 14347 /* "glFogCoorddEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDVPROC +epoxy_glFogCoorddv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14362 /* "glFogCoorddv" */, + 14375 /* "glFogCoorddvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14362 /* "glFogCoorddv" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDVEXTPROC +epoxy_glFogCoorddvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14375 /* "glFogCoorddvEXT" */, + 14362 /* "glFogCoorddv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14375 /* "glFogCoorddvEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFPROC +epoxy_glFogCoordf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14391 /* "glFogCoordf" */, + 14403 /* "glFogCoordfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14391 /* "glFogCoordf" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFEXTPROC +epoxy_glFogCoordfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14403 /* "glFogCoordfEXT" */, + 14391 /* "glFogCoordf" */, + }; + return gl_provider_resolver(entrypoint_strings + 14403 /* "glFogCoordfEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFVPROC +epoxy_glFogCoordfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14418 /* "glFogCoordfv" */, + 14431 /* "glFogCoordfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14418 /* "glFogCoordfv" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFVEXTPROC +epoxy_glFogCoordfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14431 /* "glFogCoordfvEXT" */, + 14418 /* "glFogCoordfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14431 /* "glFogCoordfvEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDHNVPROC +epoxy_glFogCoordhNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 14447 /* glFogCoordhNV */); +} + +static PFNGLFOGCOORDHVNVPROC +epoxy_glFogCoordhvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 14461 /* glFogCoordhvNV */); +} + +static PFNGLFOGFUNCSGISPROC +epoxy_glFogFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_fog_function, 14476 /* glFogFuncSGIS */); +} + +static PFNGLFOGFPROC +epoxy_glFogf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14490 /* "glFogf" */, + 14490 /* "glFogf" */, + }; + return gl_provider_resolver(entrypoint_strings + 14490 /* "glFogf" */, + providers, entrypoints); +} + +static PFNGLFOGFVPROC +epoxy_glFogfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14497 /* "glFogfv" */, + 14497 /* "glFogfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14497 /* "glFogfv" */, + providers, entrypoints); +} + +static PFNGLFOGIPROC +epoxy_glFogi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 14505 /* glFogi */); +} + +static PFNGLFOGIVPROC +epoxy_glFogiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 14512 /* glFogiv */); +} + +static PFNGLFOGXPROC +epoxy_glFogx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 14520 /* glFogx */); +} + +static PFNGLFOGXOESPROC +epoxy_glFogxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 14527 /* glFogxOES */); +} + +static PFNGLFOGXVPROC +epoxy_glFogxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 14537 /* glFogxv */); +} + +static PFNGLFOGXVOESPROC +epoxy_glFogxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 14545 /* glFogxvOES */); +} + +static PFNGLFRAGMENTCOLORMATERIALSGIXPROC +epoxy_glFragmentColorMaterialSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14556 /* glFragmentColorMaterialSGIX */); +} + +static PFNGLFRAGMENTCOVERAGECOLORNVPROC +epoxy_glFragmentCoverageColorNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_coverage_to_color, 14584 /* glFragmentCoverageColorNV */); +} + +static PFNGLFRAGMENTLIGHTMODELFSGIXPROC +epoxy_glFragmentLightModelfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14610 /* glFragmentLightModelfSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELFVSGIXPROC +epoxy_glFragmentLightModelfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14636 /* glFragmentLightModelfvSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELISGIXPROC +epoxy_glFragmentLightModeliSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14663 /* glFragmentLightModeliSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELIVSGIXPROC +epoxy_glFragmentLightModelivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14689 /* glFragmentLightModelivSGIX */); +} + +static PFNGLFRAGMENTLIGHTFSGIXPROC +epoxy_glFragmentLightfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14716 /* glFragmentLightfSGIX */); +} + +static PFNGLFRAGMENTLIGHTFVSGIXPROC +epoxy_glFragmentLightfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14737 /* glFragmentLightfvSGIX */); +} + +static PFNGLFRAGMENTLIGHTISGIXPROC +epoxy_glFragmentLightiSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14759 /* glFragmentLightiSGIX */); +} + +static PFNGLFRAGMENTLIGHTIVSGIXPROC +epoxy_glFragmentLightivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14780 /* glFragmentLightivSGIX */); +} + +static PFNGLFRAGMENTMATERIALFSGIXPROC +epoxy_glFragmentMaterialfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14802 /* glFragmentMaterialfSGIX */); +} + +static PFNGLFRAGMENTMATERIALFVSGIXPROC +epoxy_glFragmentMaterialfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14826 /* glFragmentMaterialfvSGIX */); +} + +static PFNGLFRAGMENTMATERIALISGIXPROC +epoxy_glFragmentMaterialiSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14851 /* glFragmentMaterialiSGIX */); +} + +static PFNGLFRAGMENTMATERIALIVSGIXPROC +epoxy_glFragmentMaterialivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14875 /* glFragmentMaterialivSGIX */); +} + +static PFNGLFRAMETERMINATORGREMEDYPROC +epoxy_glFrameTerminatorGREMEDY_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_GREMEDY_frame_terminator, 14900 /* glFrameTerminatorGREMEDY */); +} + +static PFNGLFRAMEZOOMSGIXPROC +epoxy_glFrameZoomSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_framezoom, 14925 /* glFrameZoomSGIX */); +} + +static PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC +epoxy_glFramebufferDrawBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14941 /* glFramebufferDrawBufferEXT */); +} + +static PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC +epoxy_glFramebufferDrawBuffersEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14968 /* glFramebufferDrawBuffersEXT */); +} + +static PFNGLFRAMEBUFFERPARAMETERIPROC +epoxy_glFramebufferParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_framebuffer_no_attachments, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14996 /* "glFramebufferParameteri" */, + 14996 /* "glFramebufferParameteri" */, + 14996 /* "glFramebufferParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 14996 /* "glFramebufferParameteri" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERREADBUFFEREXTPROC +epoxy_glFramebufferReadBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 15020 /* glFramebufferReadBufferEXT */); +} + +static PFNGLFRAMEBUFFERRENDERBUFFERPROC +epoxy_glFramebufferRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15073 /* "glFramebufferRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15047 /* "glFramebufferRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC +epoxy_glFramebufferRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15073 /* "glFramebufferRenderbufferEXT" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 15073 /* "glFramebufferRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERRENDERBUFFEROESPROC +epoxy_glFramebufferRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15102 /* glFramebufferRenderbufferOES */); +} + +static PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC +epoxy_glFramebufferSampleLocationsfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 15131 /* glFramebufferSampleLocationsfvARB */); +} + +static PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC +epoxy_glFramebufferSampleLocationsfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 15165 /* glFramebufferSampleLocationsfvNV */); +} + +static PFNGLFRAMEBUFFERTEXTUREPROC +epoxy_glFramebufferTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15198 /* "glFramebufferTexture" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE1DPROC +epoxy_glFramebufferTexture1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15219 /* "glFramebufferTexture1D" */, + 15219 /* "glFramebufferTexture1D" */, + 15242 /* "glFramebufferTexture1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15219 /* "glFramebufferTexture1D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE1DEXTPROC +epoxy_glFramebufferTexture1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15242 /* "glFramebufferTexture1DEXT" */, + 15219 /* "glFramebufferTexture1D" */, + 15219 /* "glFramebufferTexture1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 15242 /* "glFramebufferTexture1DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DPROC +epoxy_glFramebufferTexture2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15291 /* "glFramebufferTexture2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15268 /* "glFramebufferTexture2D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DEXTPROC +epoxy_glFramebufferTexture2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15291 /* "glFramebufferTexture2DEXT" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 15291 /* "glFramebufferTexture2DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC +epoxy_glFramebufferTexture2DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multisampled_render_to_texture, 15317 /* glFramebufferTexture2DMultisampleEXT */); +} + +static PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC +epoxy_glFramebufferTexture2DMultisampleIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_multisampled_render_to_texture, 15354 /* glFramebufferTexture2DMultisampleIMG */); +} + +static PFNGLFRAMEBUFFERTEXTURE2DOESPROC +epoxy_glFramebufferTexture2DOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15391 /* glFramebufferTexture2DOES */); +} + +static PFNGLFRAMEBUFFERTEXTURE3DPROC +epoxy_glFramebufferTexture3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15440 /* "glFramebufferTexture3DEXT" */, + 15466 /* "glFramebufferTexture3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15417 /* "glFramebufferTexture3D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE3DEXTPROC +epoxy_glFramebufferTexture3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15440 /* "glFramebufferTexture3DEXT" */, + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15466 /* "glFramebufferTexture3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15440 /* "glFramebufferTexture3DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE3DOESPROC +epoxy_glFramebufferTexture3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15466 /* "glFramebufferTexture3DOES" */, + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15440 /* "glFramebufferTexture3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15466 /* "glFramebufferTexture3DOES" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREARBPROC +epoxy_glFramebufferTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15492 /* "glFramebufferTextureARB" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15492 /* "glFramebufferTextureARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREEXTPROC +epoxy_glFramebufferTextureEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15516 /* "glFramebufferTextureEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREFACEARBPROC +epoxy_glFramebufferTextureFaceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15540 /* "glFramebufferTextureFaceARB" */, + 15568 /* "glFramebufferTextureFaceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15540 /* "glFramebufferTextureFaceARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC +epoxy_glFramebufferTextureFaceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15568 /* "glFramebufferTextureFaceEXT" */, + 15540 /* "glFramebufferTextureFaceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15568 /* "glFramebufferTextureFaceEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYERPROC +epoxy_glFramebufferTextureLayer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15622 /* "glFramebufferTextureLayerARB" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15596 /* "glFramebufferTextureLayer" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYERARBPROC +epoxy_glFramebufferTextureLayerARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15622 /* "glFramebufferTextureLayerARB" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15622 /* "glFramebufferTextureLayerARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC +epoxy_glFramebufferTextureLayerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15622 /* "glFramebufferTextureLayerARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15651 /* "glFramebufferTextureLayerEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC +epoxy_glFramebufferTextureMultiviewOVR_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OVR_multiview, 15680 /* glFramebufferTextureMultiviewOVR */); +} + +static PFNGLFRAMEBUFFERTEXTUREOESPROC +epoxy_glFramebufferTextureOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_geometry_shader, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15713 /* "glFramebufferTextureOES" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15713 /* "glFramebufferTextureOES" */, + providers, entrypoints); +} + +static PFNGLFREEOBJECTBUFFERATIPROC +epoxy_glFreeObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 15737 /* glFreeObjectBufferATI */); +} + +static PFNGLFRONTFACEPROC +epoxy_glFrontFace_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15759 /* "glFrontFace" */, + 15759 /* "glFrontFace" */, + 15759 /* "glFrontFace" */, + }; + return gl_provider_resolver(entrypoint_strings + 15759 /* "glFrontFace" */, + providers, entrypoints); +} + +static PFNGLFRUSTUMPROC +epoxy_glFrustum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 15771 /* glFrustum */); +} + +static PFNGLFRUSTUMFPROC +epoxy_glFrustumf_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 15781 /* glFrustumf */); +} + +static PFNGLFRUSTUMFOESPROC +epoxy_glFrustumfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 15792 /* glFrustumfOES */); +} + +static PFNGLFRUSTUMXPROC +epoxy_glFrustumx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 15806 /* glFrustumx */); +} + +static PFNGLFRUSTUMXOESPROC +epoxy_glFrustumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 15817 /* glFrustumxOES */); +} + +static PFNGLGENASYNCMARKERSSGIXPROC +epoxy_glGenAsyncMarkersSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 15831 /* glGenAsyncMarkersSGIX */); +} + +static PFNGLGENBUFFERSPROC +epoxy_glGenBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15866 /* "glGenBuffersARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15853 /* "glGenBuffers" */, + providers, entrypoints); +} + +static PFNGLGENBUFFERSARBPROC +epoxy_glGenBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15866 /* "glGenBuffersARB" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 15866 /* "glGenBuffersARB" */, + providers, entrypoints); +} + +static PFNGLGENFENCESAPPLEPROC +epoxy_glGenFencesAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 15882 /* glGenFencesAPPLE */); +} + +static PFNGLGENFENCESNVPROC +epoxy_glGenFencesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 15899 /* glGenFencesNV */); +} + +static PFNGLGENFRAGMENTSHADERSATIPROC +epoxy_glGenFragmentShadersATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 15913 /* glGenFragmentShadersATI */); +} + +static PFNGLGENFRAMEBUFFERSPROC +epoxy_glGenFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15955 /* "glGenFramebuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15937 /* "glGenFramebuffers" */, + providers, entrypoints); +} + +static PFNGLGENFRAMEBUFFERSEXTPROC +epoxy_glGenFramebuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15955 /* "glGenFramebuffersEXT" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 15955 /* "glGenFramebuffersEXT" */, + providers, entrypoints); +} + +static PFNGLGENFRAMEBUFFERSOESPROC +epoxy_glGenFramebuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15976 /* glGenFramebuffersOES */); +} + +static PFNGLGENLISTSPROC +epoxy_glGenLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 15997 /* glGenLists */); +} + +static PFNGLGENNAMESAMDPROC +epoxy_glGenNamesAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 16008 /* glGenNamesAMD */); +} + +static PFNGLGENOCCLUSIONQUERIESNVPROC +epoxy_glGenOcclusionQueriesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 16022 /* glGenOcclusionQueriesNV */); +} + +static PFNGLGENPATHSNVPROC +epoxy_glGenPathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 16046 /* glGenPathsNV */); +} + +static PFNGLGENPERFMONITORSAMDPROC +epoxy_glGenPerfMonitorsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 16059 /* glGenPerfMonitorsAMD */); +} + +static PFNGLGENPROGRAMPIPELINESPROC +epoxy_glGenProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16080 /* "glGenProgramPipelines" */, + 16080 /* "glGenProgramPipelines" */, + 16080 /* "glGenProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 16080 /* "glGenProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLGENPROGRAMPIPELINESEXTPROC +epoxy_glGenProgramPipelinesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 16102 /* glGenProgramPipelinesEXT */); +} + +static PFNGLGENPROGRAMSARBPROC +epoxy_glGenProgramsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16127 /* "glGenProgramsARB" */, + 16127 /* "glGenProgramsARB" */, + 16144 /* "glGenProgramsNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 16127 /* "glGenProgramsARB" */, + providers, entrypoints); +} + +static PFNGLGENPROGRAMSNVPROC +epoxy_glGenProgramsNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16144 /* "glGenProgramsNV" */, + 16127 /* "glGenProgramsARB" */, + 16127 /* "glGenProgramsARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16144 /* "glGenProgramsNV" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESPROC +epoxy_glGenQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16160 /* "glGenQueries" */, + 16160 /* "glGenQueries" */, + 16173 /* "glGenQueriesARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16160 /* "glGenQueries" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESARBPROC +epoxy_glGenQueriesARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16173 /* "glGenQueriesARB" */, + 16160 /* "glGenQueries" */, + 16160 /* "glGenQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 16173 /* "glGenQueriesARB" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESEXTPROC +epoxy_glGenQueriesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16189 /* "glGenQueriesEXT" */, + 16189 /* "glGenQueriesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16189 /* "glGenQueriesEXT" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSPROC +epoxy_glGenRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16224 /* "glGenRenderbuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16205 /* "glGenRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSEXTPROC +epoxy_glGenRenderbuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16224 /* "glGenRenderbuffersEXT" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 16224 /* "glGenRenderbuffersEXT" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSOESPROC +epoxy_glGenRenderbuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 16246 /* glGenRenderbuffersOES */); +} + +static PFNGLGENSAMPLERSPROC +epoxy_glGenSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16268 /* "glGenSamplers" */, + 16268 /* "glGenSamplers" */, + 16268 /* "glGenSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 16268 /* "glGenSamplers" */, + providers, entrypoints); +} + +static PFNGLGENSYMBOLSEXTPROC +epoxy_glGenSymbolsEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 16282 /* glGenSymbolsEXT */); +} + +static PFNGLGENTEXTURESPROC +epoxy_glGenTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16298 /* "glGenTextures" */, + 16298 /* "glGenTextures" */, + 16298 /* "glGenTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 16298 /* "glGenTextures" */, + providers, entrypoints); +} + +static PFNGLGENTEXTURESEXTPROC +epoxy_glGenTexturesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 16312 /* glGenTexturesEXT */); +} + +static PFNGLGENTRANSFORMFEEDBACKSPROC +epoxy_glGenTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16353 /* "glGenTransformFeedbacksNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 16329 /* "glGenTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLGENTRANSFORMFEEDBACKSNVPROC +epoxy_glGenTransformFeedbacksNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16353 /* "glGenTransformFeedbacksNV" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 16353 /* "glGenTransformFeedbacksNV" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSPROC +epoxy_glGenVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16397 /* "glGenVertexArraysAPPLE" */, + 16420 /* "glGenVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 16379 /* "glGenVertexArrays" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSAPPLEPROC +epoxy_glGenVertexArraysAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16397 /* "glGenVertexArraysAPPLE" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16420 /* "glGenVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 16397 /* "glGenVertexArraysAPPLE" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSOESPROC +epoxy_glGenVertexArraysOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16420 /* "glGenVertexArraysOES" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16397 /* "glGenVertexArraysAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 16420 /* "glGenVertexArraysOES" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXSHADERSEXTPROC +epoxy_glGenVertexShadersEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 16441 /* glGenVertexShadersEXT */); +} + +static PFNGLGENERATEMIPMAPPROC +epoxy_glGenerateMipmap_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16480 /* "glGenerateMipmapEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16463 /* "glGenerateMipmap" */, + providers, entrypoints); +} + +static PFNGLGENERATEMIPMAPEXTPROC +epoxy_glGenerateMipmapEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16480 /* "glGenerateMipmapEXT" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + }; + return gl_provider_resolver(entrypoint_strings + 16480 /* "glGenerateMipmapEXT" */, + providers, entrypoints); +} + +static PFNGLGENERATEMIPMAPOESPROC +epoxy_glGenerateMipmapOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 16500 /* glGenerateMipmapOES */); +} + +static PFNGLGENERATEMULTITEXMIPMAPEXTPROC +epoxy_glGenerateMultiTexMipmapEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 16520 /* glGenerateMultiTexMipmapEXT */); +} + +static PFNGLGENERATETEXTUREMIPMAPPROC +epoxy_glGenerateTextureMipmap_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16548 /* "glGenerateTextureMipmap" */, + 16548 /* "glGenerateTextureMipmap" */, + }; + return gl_provider_resolver(entrypoint_strings + 16548 /* "glGenerateTextureMipmap" */, + providers, entrypoints); +} + +static PFNGLGENERATETEXTUREMIPMAPEXTPROC +epoxy_glGenerateTextureMipmapEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 16572 /* glGenerateTextureMipmapEXT */); +} + +static PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC +epoxy_glGetActiveAtomicCounterBufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_atomic_counters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEATTRIBPROC +epoxy_glGetActiveAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16632 /* "glGetActiveAttrib" */, + 16632 /* "glGetActiveAttrib" */, + 16650 /* "glGetActiveAttribARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16632 /* "glGetActiveAttrib" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEATTRIBARBPROC +epoxy_glGetActiveAttribARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16650 /* "glGetActiveAttribARB" */, + 16632 /* "glGetActiveAttrib" */, + 16632 /* "glGetActiveAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 16650 /* "glGetActiveAttribARB" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINENAMEPROC +epoxy_glGetActiveSubroutineName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16671 /* "glGetActiveSubroutineName" */, + 16671 /* "glGetActiveSubroutineName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16671 /* "glGetActiveSubroutineName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC +epoxy_glGetActiveSubroutineUniformName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16697 /* "glGetActiveSubroutineUniformName" */, + 16697 /* "glGetActiveSubroutineUniformName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16697 /* "glGetActiveSubroutineUniformName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC +epoxy_glGetActiveSubroutineUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16730 /* "glGetActiveSubroutineUniformiv" */, + 16730 /* "glGetActiveSubroutineUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16730 /* "glGetActiveSubroutineUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMPROC +epoxy_glGetActiveUniform_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16761 /* "glGetActiveUniform" */, + 16761 /* "glGetActiveUniform" */, + 16780 /* "glGetActiveUniformARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16761 /* "glGetActiveUniform" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMARBPROC +epoxy_glGetActiveUniformARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16780 /* "glGetActiveUniformARB" */, + 16761 /* "glGetActiveUniform" */, + 16761 /* "glGetActiveUniform" */, + }; + return gl_provider_resolver(entrypoint_strings + 16780 /* "glGetActiveUniformARB" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC +epoxy_glGetActiveUniformBlockName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16802 /* "glGetActiveUniformBlockName" */, + 16802 /* "glGetActiveUniformBlockName" */, + 16802 /* "glGetActiveUniformBlockName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16802 /* "glGetActiveUniformBlockName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMBLOCKIVPROC +epoxy_glGetActiveUniformBlockiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16830 /* "glGetActiveUniformBlockiv" */, + 16830 /* "glGetActiveUniformBlockiv" */, + 16830 /* "glGetActiveUniformBlockiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16830 /* "glGetActiveUniformBlockiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMNAMEPROC +epoxy_glGetActiveUniformName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16856 /* "glGetActiveUniformName" */, + 16856 /* "glGetActiveUniformName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16856 /* "glGetActiveUniformName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMSIVPROC +epoxy_glGetActiveUniformsiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16879 /* "glGetActiveUniformsiv" */, + 16879 /* "glGetActiveUniformsiv" */, + 16879 /* "glGetActiveUniformsiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16879 /* "glGetActiveUniformsiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEVARYINGNVPROC +epoxy_glGetActiveVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 16901 /* glGetActiveVaryingNV */); +} + +static PFNGLGETARRAYOBJECTFVATIPROC +epoxy_glGetArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 16922 /* glGetArrayObjectfvATI */); +} + +static PFNGLGETARRAYOBJECTIVATIPROC +epoxy_glGetArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 16944 /* glGetArrayObjectivATI */); +} + +static PFNGLGETATTACHEDOBJECTSARBPROC +epoxy_glGetAttachedObjectsARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 16966 /* glGetAttachedObjectsARB */); +} + +static PFNGLGETATTACHEDSHADERSPROC +epoxy_glGetAttachedShaders_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16990 /* "glGetAttachedShaders" */, + 16990 /* "glGetAttachedShaders" */, + }; + return gl_provider_resolver(entrypoint_strings + 16990 /* "glGetAttachedShaders" */, + providers, entrypoints); +} + +static PFNGLGETATTRIBLOCATIONPROC +epoxy_glGetAttribLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17011 /* "glGetAttribLocation" */, + 17011 /* "glGetAttribLocation" */, + 17031 /* "glGetAttribLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17011 /* "glGetAttribLocation" */, + providers, entrypoints); +} + +static PFNGLGETATTRIBLOCATIONARBPROC +epoxy_glGetAttribLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17031 /* "glGetAttribLocationARB" */, + 17011 /* "glGetAttribLocation" */, + 17011 /* "glGetAttribLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 17031 /* "glGetAttribLocationARB" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANINDEXEDVEXTPROC +epoxy_glGetBooleanIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17054 /* "glGetBooleanIndexedvEXT" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + 17078 /* "glGetBooleani_v" */, + 17078 /* "glGetBooleani_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 17054 /* "glGetBooleanIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANI_VPROC +epoxy_glGetBooleani_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17078 /* "glGetBooleani_v" */, + 17078 /* "glGetBooleani_v" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17078 /* "glGetBooleani_v" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANVPROC +epoxy_glGetBooleanv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17094 /* "glGetBooleanv" */, + 17094 /* "glGetBooleanv" */, + 17094 /* "glGetBooleanv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17094 /* "glGetBooleanv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERI64VPROC +epoxy_glGetBufferParameteri64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17108 /* "glGetBufferParameteri64v" */, + 17108 /* "glGetBufferParameteri64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 17108 /* "glGetBufferParameteri64v" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERIVPROC +epoxy_glGetBufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17156 /* "glGetBufferParameterivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17133 /* "glGetBufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERIVARBPROC +epoxy_glGetBufferParameterivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17156 /* "glGetBufferParameterivARB" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17156 /* "glGetBufferParameterivARB" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERUI64VNVPROC +epoxy_glGetBufferParameterui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 17182 /* glGetBufferParameterui64vNV */); +} + +static PFNGLGETBUFFERPOINTERVPROC +epoxy_glGetBufferPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17230 /* "glGetBufferPointervARB" */, + 17253 /* "glGetBufferPointervOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 17210 /* "glGetBufferPointerv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPOINTERVARBPROC +epoxy_glGetBufferPointervARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17230 /* "glGetBufferPointervARB" */, + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17253 /* "glGetBufferPointervOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 17230 /* "glGetBufferPointervARB" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPOINTERVOESPROC +epoxy_glGetBufferPointervOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17253 /* "glGetBufferPointervOES" */, + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17230 /* "glGetBufferPointervARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17253 /* "glGetBufferPointervOES" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERSUBDATAPROC +epoxy_glGetBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17276 /* "glGetBufferSubData" */, + 17295 /* "glGetBufferSubDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17276 /* "glGetBufferSubData" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERSUBDATAARBPROC +epoxy_glGetBufferSubDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17295 /* "glGetBufferSubDataARB" */, + 17276 /* "glGetBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 17295 /* "glGetBufferSubDataARB" */, + providers, entrypoints); +} + +static PFNGLGETCLIPPLANEPROC +epoxy_glGetClipPlane_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 17317 /* glGetClipPlane */); +} + +static PFNGLGETCLIPPLANEFPROC +epoxy_glGetClipPlanef_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 17332 /* glGetClipPlanef */); +} + +static PFNGLGETCLIPPLANEFOESPROC +epoxy_glGetClipPlanefOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 17348 /* glGetClipPlanefOES */); +} + +static PFNGLGETCLIPPLANEXPROC +epoxy_glGetClipPlanex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 17367 /* glGetClipPlanex */); +} + +static PFNGLGETCLIPPLANEXOESPROC +epoxy_glGetClipPlanexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 17383 /* glGetClipPlanexOES */); +} + +static PFNGLGETCOLORTABLEPROC +epoxy_glGetColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17402 /* "glGetColorTable" */, + 17418 /* "glGetColorTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17402 /* "glGetColorTable" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEEXTPROC +epoxy_glGetColorTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17418 /* "glGetColorTableEXT" */, + 17402 /* "glGetColorTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 17418 /* "glGetColorTableEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVPROC +epoxy_glGetColorTableParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17437 /* "glGetColorTableParameterfv" */, + 17464 /* "glGetColorTableParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17437 /* "glGetColorTableParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVEXTPROC +epoxy_glGetColorTableParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17464 /* "glGetColorTableParameterfvEXT" */, + 17437 /* "glGetColorTableParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17464 /* "glGetColorTableParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVSGIPROC +epoxy_glGetColorTableParameterfvSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17494 /* glGetColorTableParameterfvSGI */); +} + +static PFNGLGETCOLORTABLEPARAMETERIVPROC +epoxy_glGetColorTableParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17524 /* "glGetColorTableParameteriv" */, + 17551 /* "glGetColorTableParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17524 /* "glGetColorTableParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERIVEXTPROC +epoxy_glGetColorTableParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17551 /* "glGetColorTableParameterivEXT" */, + 17524 /* "glGetColorTableParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17551 /* "glGetColorTableParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERIVSGIPROC +epoxy_glGetColorTableParameterivSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17581 /* glGetColorTableParameterivSGI */); +} + +static PFNGLGETCOLORTABLESGIPROC +epoxy_glGetColorTableSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17611 /* glGetColorTableSGI */); +} + +static PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC +epoxy_glGetCombinerInputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17630 /* glGetCombinerInputParameterfvNV */); +} + +static PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC +epoxy_glGetCombinerInputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17662 /* glGetCombinerInputParameterivNV */); +} + +static PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC +epoxy_glGetCombinerOutputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17694 /* glGetCombinerOutputParameterfvNV */); +} + +static PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC +epoxy_glGetCombinerOutputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17727 /* glGetCombinerOutputParameterivNV */); +} + +static PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC +epoxy_glGetCombinerStageParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners2, 17760 /* glGetCombinerStageParameterfvNV */); +} + +static PFNGLGETCOMMANDHEADERNVPROC +epoxy_glGetCommandHeaderNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 17792 /* glGetCommandHeaderNV */); +} + +static PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC +epoxy_glGetCompressedMultiTexImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 17813 /* glGetCompressedMultiTexImageEXT */); +} + +static PFNGLGETCOMPRESSEDTEXIMAGEPROC +epoxy_glGetCompressedTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17845 /* "glGetCompressedTexImage" */, + 17869 /* "glGetCompressedTexImageARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17845 /* "glGetCompressedTexImage" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXIMAGEARBPROC +epoxy_glGetCompressedTexImageARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17869 /* "glGetCompressedTexImageARB" */, + 17845 /* "glGetCompressedTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17869 /* "glGetCompressedTexImageARB" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC +epoxy_glGetCompressedTextureImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17896 /* "glGetCompressedTextureImage" */, + 17896 /* "glGetCompressedTextureImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17896 /* "glGetCompressedTextureImage" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC +epoxy_glGetCompressedTextureImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 17924 /* glGetCompressedTextureImageEXT */); +} + +static PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC +epoxy_glGetCompressedTextureSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_get_texture_sub_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17955 /* "glGetCompressedTextureSubImage" */, + 17955 /* "glGetCompressedTextureSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17955 /* "glGetCompressedTextureSubImage" */, + providers, entrypoints); +} + +static PFNGLGETCONVOLUTIONFILTERPROC +epoxy_glGetConvolutionFilter_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 17986 /* glGetConvolutionFilter */); +} + +static PFNGLGETCONVOLUTIONFILTEREXTPROC +epoxy_glGetConvolutionFilterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18009 /* glGetConvolutionFilterEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERFVPROC +epoxy_glGetConvolutionParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 18035 /* glGetConvolutionParameterfv */); +} + +static PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC +epoxy_glGetConvolutionParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18063 /* glGetConvolutionParameterfvEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERIVPROC +epoxy_glGetConvolutionParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 18094 /* glGetConvolutionParameteriv */); +} + +static PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC +epoxy_glGetConvolutionParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18122 /* glGetConvolutionParameterivEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERXVOESPROC +epoxy_glGetConvolutionParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 18153 /* glGetConvolutionParameterxvOES */); +} + +static PFNGLGETCOVERAGEMODULATIONTABLENVPROC +epoxy_glGetCoverageModulationTableNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 18184 /* glGetCoverageModulationTableNV */); +} + +static PFNGLGETDEBUGMESSAGELOGPROC +epoxy_glGetDebugMessageLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18260 /* "glGetDebugMessageLogARB" */, + 18284 /* "glGetDebugMessageLogKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 18215 /* "glGetDebugMessageLog" */, + providers, entrypoints); +} + +static PFNGLGETDEBUGMESSAGELOGAMDPROC +epoxy_glGetDebugMessageLogAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 18236 /* glGetDebugMessageLogAMD */); +} + +static PFNGLGETDEBUGMESSAGELOGARBPROC +epoxy_glGetDebugMessageLogARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18260 /* "glGetDebugMessageLogARB" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18284 /* "glGetDebugMessageLogKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 18260 /* "glGetDebugMessageLogARB" */, + providers, entrypoints); +} + +static PFNGLGETDEBUGMESSAGELOGKHRPROC +epoxy_glGetDebugMessageLogKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18284 /* "glGetDebugMessageLogKHR" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18260 /* "glGetDebugMessageLogARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 18284 /* "glGetDebugMessageLogKHR" */, + providers, entrypoints); +} + +static PFNGLGETDETAILTEXFUNCSGISPROC +epoxy_glGetDetailTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_detail_texture, 18308 /* glGetDetailTexFuncSGIS */); +} + +static PFNGLGETDOUBLEINDEXEDVEXTPROC +epoxy_glGetDoubleIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18331 /* "glGetDoubleIndexedvEXT" */, + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + 18369 /* "glGetDoublei_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18331 /* "glGetDoubleIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEI_VPROC +epoxy_glGetDoublei_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + 18331 /* "glGetDoubleIndexedvEXT" */, + 18369 /* "glGetDoublei_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18354 /* "glGetDoublei_v" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEI_VEXTPROC +epoxy_glGetDoublei_vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18369 /* "glGetDoublei_vEXT" */, + 18331 /* "glGetDoubleIndexedvEXT" */, + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 18369 /* "glGetDoublei_vEXT" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEVPROC +epoxy_glGetDoublev_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 18387 /* glGetDoublev */); +} + +static PFNGLGETDRIVERCONTROLSTRINGQCOMPROC +epoxy_glGetDriverControlStringQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 18400 /* glGetDriverControlStringQCOM */); +} + +static PFNGLGETDRIVERCONTROLSQCOMPROC +epoxy_glGetDriverControlsQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 18429 /* glGetDriverControlsQCOM */); +} + +static PFNGLGETERRORPROC +epoxy_glGetError_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18453 /* "glGetError" */, + 18453 /* "glGetError" */, + 18453 /* "glGetError" */, + }; + return gl_provider_resolver(entrypoint_strings + 18453 /* "glGetError" */, + providers, entrypoints); +} + +static PFNGLGETFENCEIVNVPROC +epoxy_glGetFenceivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 18464 /* glGetFenceivNV */); +} + +static PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC +epoxy_glGetFinalCombinerInputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 18479 /* glGetFinalCombinerInputParameterfvNV */); +} + +static PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC +epoxy_glGetFinalCombinerInputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 18516 /* glGetFinalCombinerInputParameterivNV */); +} + +static PFNGLGETFIRSTPERFQUERYIDINTELPROC +epoxy_glGetFirstPerfQueryIdINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 18553 /* glGetFirstPerfQueryIdINTEL */); +} + +static PFNGLGETFIXEDVPROC +epoxy_glGetFixedv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 18580 /* glGetFixedv */); +} + +static PFNGLGETFIXEDVOESPROC +epoxy_glGetFixedvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 18592 /* glGetFixedvOES */); +} + +static PFNGLGETFLOATINDEXEDVEXTPROC +epoxy_glGetFloatIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18643 /* "glGetFloati_vEXT" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18607 /* "glGetFloatIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VPROC +epoxy_glGetFloati_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18643 /* "glGetFloati_vEXT" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18629 /* "glGetFloati_v" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VEXTPROC +epoxy_glGetFloati_vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18643 /* "glGetFloati_vEXT" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18643 /* "glGetFloati_vEXT" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VNVPROC +epoxy_glGetFloati_vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18660 /* "glGetFloati_vNV" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18643 /* "glGetFloati_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18660 /* "glGetFloati_vNV" */, + providers, entrypoints); +} + +static PFNGLGETFLOATVPROC +epoxy_glGetFloatv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18676 /* "glGetFloatv" */, + 18676 /* "glGetFloatv" */, + 18676 /* "glGetFloatv" */, + }; + return gl_provider_resolver(entrypoint_strings + 18676 /* "glGetFloatv" */, + providers, entrypoints); +} + +static PFNGLGETFOGFUNCSGISPROC +epoxy_glGetFogFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_fog_function, 18688 /* glGetFogFuncSGIS */); +} + +static PFNGLGETFRAGDATAINDEXPROC +epoxy_glGetFragDataIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_EXT_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18705 /* "glGetFragDataIndex" */, + 18705 /* "glGetFragDataIndex" */, + 18724 /* "glGetFragDataIndexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18705 /* "glGetFragDataIndex" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATAINDEXEXTPROC +epoxy_glGetFragDataIndexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18724 /* "glGetFragDataIndexEXT" */, + 18705 /* "glGetFragDataIndex" */, + 18705 /* "glGetFragDataIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 18724 /* "glGetFragDataIndexEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATALOCATIONPROC +epoxy_glGetFragDataLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18746 /* "glGetFragDataLocation" */, + 18746 /* "glGetFragDataLocation" */, + 18768 /* "glGetFragDataLocationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18746 /* "glGetFragDataLocation" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATALOCATIONEXTPROC +epoxy_glGetFragDataLocationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18768 /* "glGetFragDataLocationEXT" */, + 18746 /* "glGetFragDataLocation" */, + 18746 /* "glGetFragDataLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 18768 /* "glGetFragDataLocationEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAGMENTLIGHTFVSGIXPROC +epoxy_glGetFragmentLightfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18793 /* glGetFragmentLightfvSGIX */); +} + +static PFNGLGETFRAGMENTLIGHTIVSGIXPROC +epoxy_glGetFragmentLightivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18818 /* glGetFragmentLightivSGIX */); +} + +static PFNGLGETFRAGMENTMATERIALFVSGIXPROC +epoxy_glGetFragmentMaterialfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18843 /* glGetFragmentMaterialfvSGIX */); +} + +static PFNGLGETFRAGMENTMATERIALIVSGIXPROC +epoxy_glGetFragmentMaterialivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18871 /* glGetFragmentMaterialivSGIX */); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC +epoxy_glGetFramebufferAttachmentParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC +epoxy_glGetFramebufferAttachmentParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC +epoxy_glGetFramebufferAttachmentParameterivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 18978 /* glGetFramebufferAttachmentParameterivOES */); +} + +static PFNGLGETFRAMEBUFFERPARAMETERIVPROC +epoxy_glGetFramebufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_framebuffer_no_attachments, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19019 /* "glGetFramebufferParameteriv" */, + 19019 /* "glGetFramebufferParameteriv" */, + 19019 /* "glGetFramebufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 19019 /* "glGetFramebufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC +epoxy_glGetFramebufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 19047 /* glGetFramebufferParameterivEXT */); +} + +static PFNGLGETGRAPHICSRESETSTATUSPROC +epoxy_glGetGraphicsResetStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19159 /* "glGetGraphicsResetStatusKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 19078 /* "glGetGraphicsResetStatus" */, + providers, entrypoints); +} + +static PFNGLGETGRAPHICSRESETSTATUSARBPROC +epoxy_glGetGraphicsResetStatusARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 19103 /* glGetGraphicsResetStatusARB */); +} + +static PFNGLGETGRAPHICSRESETSTATUSEXTPROC +epoxy_glGetGraphicsResetStatusEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 19131 /* glGetGraphicsResetStatusEXT */); +} + +static PFNGLGETGRAPHICSRESETSTATUSKHRPROC +epoxy_glGetGraphicsResetStatusKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19159 /* "glGetGraphicsResetStatusKHR" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 19159 /* "glGetGraphicsResetStatusKHR" */, + providers, entrypoints); +} + +static PFNGLGETHANDLEARBPROC +epoxy_glGetHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 19187 /* glGetHandleARB */); +} + +static PFNGLGETHISTOGRAMPROC +epoxy_glGetHistogram_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19202 /* glGetHistogram */); +} + +static PFNGLGETHISTOGRAMEXTPROC +epoxy_glGetHistogramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19217 /* glGetHistogramEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERFVPROC +epoxy_glGetHistogramParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19235 /* glGetHistogramParameterfv */); +} + +static PFNGLGETHISTOGRAMPARAMETERFVEXTPROC +epoxy_glGetHistogramParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19261 /* glGetHistogramParameterfvEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERIVPROC +epoxy_glGetHistogramParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19290 /* glGetHistogramParameteriv */); +} + +static PFNGLGETHISTOGRAMPARAMETERIVEXTPROC +epoxy_glGetHistogramParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19316 /* glGetHistogramParameterivEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERXVOESPROC +epoxy_glGetHistogramParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19345 /* glGetHistogramParameterxvOES */); +} + +static PFNGLGETIMAGEHANDLEARBPROC +epoxy_glGetImageHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 19374 /* glGetImageHandleARB */); +} + +static PFNGLGETIMAGEHANDLENVPROC +epoxy_glGetImageHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 19394 /* glGetImageHandleNV */); +} + +static PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC +epoxy_glGetImageTransformParameterfvHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 19413 /* glGetImageTransformParameterfvHP */); +} + +static PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC +epoxy_glGetImageTransformParameterivHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 19446 /* glGetImageTransformParameterivHP */); +} + +static PFNGLGETINFOLOGARBPROC +epoxy_glGetInfoLogARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 19479 /* glGetInfoLogARB */); +} + +static PFNGLGETINSTRUMENTSSGIXPROC +epoxy_glGetInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 19495 /* glGetInstrumentsSGIX */); +} + +static PFNGLGETINTEGER64I_VPROC +epoxy_glGetInteger64i_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19516 /* "glGetInteger64i_v" */, + 19516 /* "glGetInteger64i_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19516 /* "glGetInteger64i_v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGER64VPROC +epoxy_glGetInteger64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19550 /* "glGetInteger64vAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 19534 /* "glGetInteger64v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGER64VAPPLEPROC +epoxy_glGetInteger64vAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19550 /* "glGetInteger64vAPPLE" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19550 /* "glGetInteger64vAPPLE" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERINDEXEDVEXTPROC +epoxy_glGetIntegerIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19571 /* "glGetIntegerIndexedvEXT" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19571 /* "glGetIntegerIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERI_VPROC +epoxy_glGetIntegeri_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 19595 /* "glGetIntegeri_v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERI_VEXTPROC +epoxy_glGetIntegeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 19611 /* glGetIntegeri_vEXT */); +} + +static PFNGLGETINTEGERUI64I_VNVPROC +epoxy_glGetIntegerui64i_vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 19630 /* glGetIntegerui64i_vNV */); +} + +static PFNGLGETINTEGERUI64VNVPROC +epoxy_glGetIntegerui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 19652 /* glGetIntegerui64vNV */); +} + +static PFNGLGETINTEGERVPROC +epoxy_glGetIntegerv_resolver(void) +{ + return gl_single_resolver(always_present, 19672 /* glGetIntegerv */); +} + +static PFNGLGETINTERNALFORMATSAMPLEIVNVPROC +epoxy_glGetInternalformatSampleivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_internalformat_sample_query, 19686 /* glGetInternalformatSampleivNV */); +} + +static PFNGLGETINTERNALFORMATI64VPROC +epoxy_glGetInternalformati64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_internalformat_query2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19716 /* "glGetInternalformati64v" */, + 19716 /* "glGetInternalformati64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19716 /* "glGetInternalformati64v" */, + providers, entrypoints); +} + +static PFNGLGETINTERNALFORMATIVPROC +epoxy_glGetInternalformativ_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_internalformat_query, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19740 /* "glGetInternalformativ" */, + 19740 /* "glGetInternalformativ" */, + 19740 /* "glGetInternalformativ" */, + }; + return gl_provider_resolver(entrypoint_strings + 19740 /* "glGetInternalformativ" */, + providers, entrypoints); +} + +static PFNGLGETINVARIANTBOOLEANVEXTPROC +epoxy_glGetInvariantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19762 /* glGetInvariantBooleanvEXT */); +} + +static PFNGLGETINVARIANTFLOATVEXTPROC +epoxy_glGetInvariantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19788 /* glGetInvariantFloatvEXT */); +} + +static PFNGLGETINVARIANTINTEGERVEXTPROC +epoxy_glGetInvariantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19812 /* glGetInvariantIntegervEXT */); +} + +static PFNGLGETLIGHTFVPROC +epoxy_glGetLightfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19838 /* "glGetLightfv" */, + 19838 /* "glGetLightfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 19838 /* "glGetLightfv" */, + providers, entrypoints); +} + +static PFNGLGETLIGHTIVPROC +epoxy_glGetLightiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 19851 /* glGetLightiv */); +} + +static PFNGLGETLIGHTXOESPROC +epoxy_glGetLightxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19864 /* glGetLightxOES */); +} + +static PFNGLGETLIGHTXVPROC +epoxy_glGetLightxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 19879 /* glGetLightxv */); +} + +static PFNGLGETLIGHTXVOESPROC +epoxy_glGetLightxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19892 /* glGetLightxvOES */); +} + +static PFNGLGETLISTPARAMETERFVSGIXPROC +epoxy_glGetListParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 19908 /* glGetListParameterfvSGIX */); +} + +static PFNGLGETLISTPARAMETERIVSGIXPROC +epoxy_glGetListParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 19933 /* glGetListParameterivSGIX */); +} + +static PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC +epoxy_glGetLocalConstantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19958 /* glGetLocalConstantBooleanvEXT */); +} + +static PFNGLGETLOCALCONSTANTFLOATVEXTPROC +epoxy_glGetLocalConstantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19988 /* glGetLocalConstantFloatvEXT */); +} + +static PFNGLGETLOCALCONSTANTINTEGERVEXTPROC +epoxy_glGetLocalConstantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 20016 /* glGetLocalConstantIntegervEXT */); +} + +static PFNGLGETMAPATTRIBPARAMETERFVNVPROC +epoxy_glGetMapAttribParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20046 /* glGetMapAttribParameterfvNV */); +} + +static PFNGLGETMAPATTRIBPARAMETERIVNVPROC +epoxy_glGetMapAttribParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20074 /* glGetMapAttribParameterivNV */); +} + +static PFNGLGETMAPCONTROLPOINTSNVPROC +epoxy_glGetMapControlPointsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20102 /* glGetMapControlPointsNV */); +} + +static PFNGLGETMAPPARAMETERFVNVPROC +epoxy_glGetMapParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20126 /* glGetMapParameterfvNV */); +} + +static PFNGLGETMAPPARAMETERIVNVPROC +epoxy_glGetMapParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20148 /* glGetMapParameterivNV */); +} + +static PFNGLGETMAPDVPROC +epoxy_glGetMapdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20170 /* glGetMapdv */); +} + +static PFNGLGETMAPFVPROC +epoxy_glGetMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20181 /* glGetMapfv */); +} + +static PFNGLGETMAPIVPROC +epoxy_glGetMapiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20192 /* glGetMapiv */); +} + +static PFNGLGETMAPXVOESPROC +epoxy_glGetMapxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20203 /* glGetMapxvOES */); +} + +static PFNGLGETMATERIALFVPROC +epoxy_glGetMaterialfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20217 /* "glGetMaterialfv" */, + 20217 /* "glGetMaterialfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20217 /* "glGetMaterialfv" */, + providers, entrypoints); +} + +static PFNGLGETMATERIALIVPROC +epoxy_glGetMaterialiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20233 /* glGetMaterialiv */); +} + +static PFNGLGETMATERIALXOESPROC +epoxy_glGetMaterialxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20249 /* glGetMaterialxOES */); +} + +static PFNGLGETMATERIALXVPROC +epoxy_glGetMaterialxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 20267 /* glGetMaterialxv */); +} + +static PFNGLGETMATERIALXVOESPROC +epoxy_glGetMaterialxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20283 /* glGetMaterialxvOES */); +} + +static PFNGLGETMINMAXPROC +epoxy_glGetMinmax_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20302 /* glGetMinmax */); +} + +static PFNGLGETMINMAXEXTPROC +epoxy_glGetMinmaxEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20314 /* glGetMinmaxEXT */); +} + +static PFNGLGETMINMAXPARAMETERFVPROC +epoxy_glGetMinmaxParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20329 /* glGetMinmaxParameterfv */); +} + +static PFNGLGETMINMAXPARAMETERFVEXTPROC +epoxy_glGetMinmaxParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20352 /* glGetMinmaxParameterfvEXT */); +} + +static PFNGLGETMINMAXPARAMETERIVPROC +epoxy_glGetMinmaxParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20378 /* glGetMinmaxParameteriv */); +} + +static PFNGLGETMINMAXPARAMETERIVEXTPROC +epoxy_glGetMinmaxParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20401 /* glGetMinmaxParameterivEXT */); +} + +static PFNGLGETMULTITEXENVFVEXTPROC +epoxy_glGetMultiTexEnvfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20427 /* glGetMultiTexEnvfvEXT */); +} + +static PFNGLGETMULTITEXENVIVEXTPROC +epoxy_glGetMultiTexEnvivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20449 /* glGetMultiTexEnvivEXT */); +} + +static PFNGLGETMULTITEXGENDVEXTPROC +epoxy_glGetMultiTexGendvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20471 /* glGetMultiTexGendvEXT */); +} + +static PFNGLGETMULTITEXGENFVEXTPROC +epoxy_glGetMultiTexGenfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20493 /* glGetMultiTexGenfvEXT */); +} + +static PFNGLGETMULTITEXGENIVEXTPROC +epoxy_glGetMultiTexGenivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20515 /* glGetMultiTexGenivEXT */); +} + +static PFNGLGETMULTITEXIMAGEEXTPROC +epoxy_glGetMultiTexImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20537 /* glGetMultiTexImageEXT */); +} + +static PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC +epoxy_glGetMultiTexLevelParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20559 /* glGetMultiTexLevelParameterfvEXT */); +} + +static PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC +epoxy_glGetMultiTexLevelParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20592 /* glGetMultiTexLevelParameterivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIIVEXTPROC +epoxy_glGetMultiTexParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20625 /* glGetMultiTexParameterIivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIUIVEXTPROC +epoxy_glGetMultiTexParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20654 /* glGetMultiTexParameterIuivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERFVEXTPROC +epoxy_glGetMultiTexParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20684 /* glGetMultiTexParameterfvEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIVEXTPROC +epoxy_glGetMultiTexParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20712 /* glGetMultiTexParameterivEXT */); +} + +static PFNGLGETMULTISAMPLEFVPROC +epoxy_glGetMultisamplefv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + GL_extension_GL_NV_explicit_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20759 /* "glGetMultisamplefvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 20740 /* "glGetMultisamplefv" */, + providers, entrypoints); +} + +static PFNGLGETMULTISAMPLEFVNVPROC +epoxy_glGetMultisamplefvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_explicit_multisample, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20759 /* "glGetMultisamplefvNV" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20759 /* "glGetMultisamplefvNV" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERI64VPROC +epoxy_glGetNamedBufferParameteri64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20780 /* "glGetNamedBufferParameteri64v" */, + 20780 /* "glGetNamedBufferParameteri64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 20780 /* "glGetNamedBufferParameteri64v" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERIVPROC +epoxy_glGetNamedBufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20810 /* "glGetNamedBufferParameteriv" */, + 20810 /* "glGetNamedBufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20810 /* "glGetNamedBufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedBufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20838 /* glGetNamedBufferParameterivEXT */); +} + +static PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC +epoxy_glGetNamedBufferParameterui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 20869 /* glGetNamedBufferParameterui64vNV */); +} + +static PFNGLGETNAMEDBUFFERPOINTERVPROC +epoxy_glGetNamedBufferPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20902 /* "glGetNamedBufferPointerv" */, + 20902 /* "glGetNamedBufferPointerv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20902 /* "glGetNamedBufferPointerv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPOINTERVEXTPROC +epoxy_glGetNamedBufferPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20927 /* glGetNamedBufferPointervEXT */); +} + +static PFNGLGETNAMEDBUFFERSUBDATAPROC +epoxy_glGetNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20955 /* "glGetNamedBufferSubData" */, + 20955 /* "glGetNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 20955 /* "glGetNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERSUBDATAEXTPROC +epoxy_glGetNamedBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20979 /* glGetNamedBufferSubDataEXT */); +} + +static PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC +epoxy_glGetNamedFramebufferAttachmentParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC +epoxy_glGetNamedFramebufferAttachmentParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21049 /* glGetNamedFramebufferAttachmentParameterivEXT */); +} + +static PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC +epoxy_glGetNamedFramebufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21095 /* "glGetNamedFramebufferParameteriv" */, + 21095 /* "glGetNamedFramebufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21095 /* "glGetNamedFramebufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedFramebufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21128 /* glGetNamedFramebufferParameterivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC +epoxy_glGetNamedProgramLocalParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21164 /* glGetNamedProgramLocalParameterIivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC +epoxy_glGetNamedProgramLocalParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21202 /* glGetNamedProgramLocalParameterIuivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC +epoxy_glGetNamedProgramLocalParameterdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21241 /* glGetNamedProgramLocalParameterdvEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC +epoxy_glGetNamedProgramLocalParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21278 /* glGetNamedProgramLocalParameterfvEXT */); +} + +static PFNGLGETNAMEDPROGRAMSTRINGEXTPROC +epoxy_glGetNamedProgramStringEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21315 /* glGetNamedProgramStringEXT */); +} + +static PFNGLGETNAMEDPROGRAMIVEXTPROC +epoxy_glGetNamedProgramivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21342 /* glGetNamedProgramivEXT */); +} + +static PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC +epoxy_glGetNamedRenderbufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21365 /* "glGetNamedRenderbufferParameteriv" */, + 21365 /* "glGetNamedRenderbufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21365 /* "glGetNamedRenderbufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedRenderbufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21399 /* glGetNamedRenderbufferParameterivEXT */); +} + +static PFNGLGETNAMEDSTRINGARBPROC +epoxy_glGetNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 21436 /* glGetNamedStringARB */); +} + +static PFNGLGETNAMEDSTRINGIVARBPROC +epoxy_glGetNamedStringivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 21456 /* glGetNamedStringivARB */); +} + +static PFNGLGETNEXTPERFQUERYIDINTELPROC +epoxy_glGetNextPerfQueryIdINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 21478 /* glGetNextPerfQueryIdINTEL */); +} + +static PFNGLGETOBJECTBUFFERFVATIPROC +epoxy_glGetObjectBufferfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 21504 /* glGetObjectBufferfvATI */); +} + +static PFNGLGETOBJECTBUFFERIVATIPROC +epoxy_glGetObjectBufferivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 21527 /* glGetObjectBufferivATI */); +} + +static PFNGLGETOBJECTLABELPROC +epoxy_glGetObjectLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21587 /* "glGetObjectLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 21550 /* "glGetObjectLabel" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTLABELEXTPROC +epoxy_glGetObjectLabelEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_label, 21567 /* glGetObjectLabelEXT */); +} + +static PFNGLGETOBJECTLABELKHRPROC +epoxy_glGetObjectLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21587 /* "glGetObjectLabelKHR" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 21587 /* "glGetObjectLabelKHR" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTPARAMETERFVARBPROC +epoxy_glGetObjectParameterfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 21607 /* glGetObjectParameterfvARB */); +} + +static PFNGLGETOBJECTPARAMETERIVAPPLEPROC +epoxy_glGetObjectParameterivAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 21633 /* glGetObjectParameterivAPPLE */); +} + +static PFNGLGETOBJECTPARAMETERIVARBPROC +epoxy_glGetObjectParameterivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 21661 /* glGetObjectParameterivARB */); +} + +static PFNGLGETOBJECTPTRLABELPROC +epoxy_glGetObjectPtrLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21707 /* "glGetObjectPtrLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 21687 /* "glGetObjectPtrLabel" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTPTRLABELKHRPROC +epoxy_glGetObjectPtrLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21707 /* "glGetObjectPtrLabelKHR" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 21707 /* "glGetObjectPtrLabelKHR" */, + providers, entrypoints); +} + +static PFNGLGETOCCLUSIONQUERYIVNVPROC +epoxy_glGetOcclusionQueryivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 21730 /* glGetOcclusionQueryivNV */); +} + +static PFNGLGETOCCLUSIONQUERYUIVNVPROC +epoxy_glGetOcclusionQueryuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 21754 /* glGetOcclusionQueryuivNV */); +} + +static PFNGLGETPATHCOLORGENFVNVPROC +epoxy_glGetPathColorGenfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21779 /* glGetPathColorGenfvNV */); +} + +static PFNGLGETPATHCOLORGENIVNVPROC +epoxy_glGetPathColorGenivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21801 /* glGetPathColorGenivNV */); +} + +static PFNGLGETPATHCOMMANDSNVPROC +epoxy_glGetPathCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21823 /* glGetPathCommandsNV */); +} + +static PFNGLGETPATHCOORDSNVPROC +epoxy_glGetPathCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21843 /* glGetPathCoordsNV */); +} + +static PFNGLGETPATHDASHARRAYNVPROC +epoxy_glGetPathDashArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21861 /* glGetPathDashArrayNV */); +} + +static PFNGLGETPATHLENGTHNVPROC +epoxy_glGetPathLengthNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21882 /* glGetPathLengthNV */); +} + +static PFNGLGETPATHMETRICRANGENVPROC +epoxy_glGetPathMetricRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21900 /* glGetPathMetricRangeNV */); +} + +static PFNGLGETPATHMETRICSNVPROC +epoxy_glGetPathMetricsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21923 /* glGetPathMetricsNV */); +} + +static PFNGLGETPATHPARAMETERFVNVPROC +epoxy_glGetPathParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21942 /* glGetPathParameterfvNV */); +} + +static PFNGLGETPATHPARAMETERIVNVPROC +epoxy_glGetPathParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21965 /* glGetPathParameterivNV */); +} + +static PFNGLGETPATHSPACINGNVPROC +epoxy_glGetPathSpacingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21988 /* glGetPathSpacingNV */); +} + +static PFNGLGETPATHTEXGENFVNVPROC +epoxy_glGetPathTexGenfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 22007 /* glGetPathTexGenfvNV */); +} + +static PFNGLGETPATHTEXGENIVNVPROC +epoxy_glGetPathTexGenivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 22027 /* glGetPathTexGenivNV */); +} + +static PFNGLGETPERFCOUNTERINFOINTELPROC +epoxy_glGetPerfCounterInfoINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22047 /* glGetPerfCounterInfoINTEL */); +} + +static PFNGLGETPERFMONITORCOUNTERDATAAMDPROC +epoxy_glGetPerfMonitorCounterDataAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22073 /* glGetPerfMonitorCounterDataAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERINFOAMDPROC +epoxy_glGetPerfMonitorCounterInfoAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22104 /* glGetPerfMonitorCounterInfoAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC +epoxy_glGetPerfMonitorCounterStringAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22135 /* glGetPerfMonitorCounterStringAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERSAMDPROC +epoxy_glGetPerfMonitorCountersAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22168 /* glGetPerfMonitorCountersAMD */); +} + +static PFNGLGETPERFMONITORGROUPSTRINGAMDPROC +epoxy_glGetPerfMonitorGroupStringAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22196 /* glGetPerfMonitorGroupStringAMD */); +} + +static PFNGLGETPERFMONITORGROUPSAMDPROC +epoxy_glGetPerfMonitorGroupsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22227 /* glGetPerfMonitorGroupsAMD */); +} + +static PFNGLGETPERFQUERYDATAINTELPROC +epoxy_glGetPerfQueryDataINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22253 /* glGetPerfQueryDataINTEL */); +} + +static PFNGLGETPERFQUERYIDBYNAMEINTELPROC +epoxy_glGetPerfQueryIdByNameINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22277 /* glGetPerfQueryIdByNameINTEL */); +} + +static PFNGLGETPERFQUERYINFOINTELPROC +epoxy_glGetPerfQueryInfoINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22305 /* glGetPerfQueryInfoINTEL */); +} + +static PFNGLGETPIXELMAPFVPROC +epoxy_glGetPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22329 /* glGetPixelMapfv */); +} + +static PFNGLGETPIXELMAPUIVPROC +epoxy_glGetPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22345 /* glGetPixelMapuiv */); +} + +static PFNGLGETPIXELMAPUSVPROC +epoxy_glGetPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22362 /* glGetPixelMapusv */); +} + +static PFNGLGETPIXELMAPXVPROC +epoxy_glGetPixelMapxv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 22379 /* glGetPixelMapxv */); +} + +static PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC +epoxy_glGetPixelTexGenParameterfvSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 22395 /* glGetPixelTexGenParameterfvSGIS */); +} + +static PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC +epoxy_glGetPixelTexGenParameterivSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 22427 /* glGetPixelTexGenParameterivSGIS */); +} + +static PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC +epoxy_glGetPixelTransformParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 22459 /* glGetPixelTransformParameterfvEXT */); +} + +static PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC +epoxy_glGetPixelTransformParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 22493 /* glGetPixelTransformParameterivEXT */); +} + +static PFNGLGETPOINTERINDEXEDVEXTPROC +epoxy_glGetPointerIndexedvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 22527 /* glGetPointerIndexedvEXT */); +} + +static PFNGLGETPOINTERI_VEXTPROC +epoxy_glGetPointeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 22551 /* glGetPointeri_vEXT */); +} + +static PFNGLGETPOINTERVPROC +epoxy_glGetPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_vertex_array, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22584 /* "glGetPointervEXT" */, + 22601 /* "glGetPointervKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 22570 /* "glGetPointerv" */, + providers, entrypoints); +} + +static PFNGLGETPOINTERVEXTPROC +epoxy_glGetPointervEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22584 /* "glGetPointervEXT" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22601 /* "glGetPointervKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 22584 /* "glGetPointervEXT" */, + providers, entrypoints); +} + +static PFNGLGETPOINTERVKHRPROC +epoxy_glGetPointervKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22601 /* "glGetPointervKHR" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22584 /* "glGetPointervEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 22601 /* "glGetPointervKHR" */, + providers, entrypoints); +} + +static PFNGLGETPOLYGONSTIPPLEPROC +epoxy_glGetPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22618 /* glGetPolygonStipple */); +} + +static PFNGLGETPROGRAMBINARYPROC +epoxy_glGetProgramBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_OES_get_program_binary, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22657 /* "glGetProgramBinaryOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 22638 /* "glGetProgramBinary" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMBINARYOESPROC +epoxy_glGetProgramBinaryOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_get_program_binary, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22657 /* "glGetProgramBinaryOES" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 22657 /* "glGetProgramBinaryOES" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMENVPARAMETERIIVNVPROC +epoxy_glGetProgramEnvParameterIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22679 /* glGetProgramEnvParameterIivNV */); +} + +static PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC +epoxy_glGetProgramEnvParameterIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22709 /* glGetProgramEnvParameterIuivNV */); +} + +static PFNGLGETPROGRAMENVPARAMETERDVARBPROC +epoxy_glGetProgramEnvParameterdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22740 /* "glGetProgramEnvParameterdvARB" */, + 22740 /* "glGetProgramEnvParameterdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22740 /* "glGetProgramEnvParameterdvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMENVPARAMETERFVARBPROC +epoxy_glGetProgramEnvParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22770 /* "glGetProgramEnvParameterfvARB" */, + 22770 /* "glGetProgramEnvParameterfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22770 /* "glGetProgramEnvParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMINFOLOGPROC +epoxy_glGetProgramInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22800 /* "glGetProgramInfoLog" */, + 22800 /* "glGetProgramInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 22800 /* "glGetProgramInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMINTERFACEIVPROC +epoxy_glGetProgramInterfaceiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22820 /* "glGetProgramInterfaceiv" */, + 22820 /* "glGetProgramInterfaceiv" */, + 22820 /* "glGetProgramInterfaceiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 22820 /* "glGetProgramInterfaceiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC +epoxy_glGetProgramLocalParameterIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22844 /* glGetProgramLocalParameterIivNV */); +} + +static PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC +epoxy_glGetProgramLocalParameterIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22876 /* glGetProgramLocalParameterIuivNV */); +} + +static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC +epoxy_glGetProgramLocalParameterdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22909 /* "glGetProgramLocalParameterdvARB" */, + 22909 /* "glGetProgramLocalParameterdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22909 /* "glGetProgramLocalParameterdvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC +epoxy_glGetProgramLocalParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22941 /* "glGetProgramLocalParameterfvARB" */, + 22941 /* "glGetProgramLocalParameterfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22941 /* "glGetProgramLocalParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC +epoxy_glGetProgramNamedParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 22973 /* glGetProgramNamedParameterdvNV */); +} + +static PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC +epoxy_glGetProgramNamedParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 23004 /* glGetProgramNamedParameterfvNV */); +} + +static PFNGLGETPROGRAMPARAMETERDVNVPROC +epoxy_glGetProgramParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23035 /* glGetProgramParameterdvNV */); +} + +static PFNGLGETPROGRAMPARAMETERFVNVPROC +epoxy_glGetProgramParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23061 /* glGetProgramParameterfvNV */); +} + +static PFNGLGETPROGRAMPIPELINEINFOLOGPROC +epoxy_glGetProgramPipelineInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23087 /* "glGetProgramPipelineInfoLog" */, + 23087 /* "glGetProgramPipelineInfoLog" */, + 23087 /* "glGetProgramPipelineInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 23087 /* "glGetProgramPipelineInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC +epoxy_glGetProgramPipelineInfoLogEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 23115 /* glGetProgramPipelineInfoLogEXT */); +} + +static PFNGLGETPROGRAMPIPELINEIVPROC +epoxy_glGetProgramPipelineiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23146 /* "glGetProgramPipelineiv" */, + 23146 /* "glGetProgramPipelineiv" */, + 23146 /* "glGetProgramPipelineiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23146 /* "glGetProgramPipelineiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMPIPELINEIVEXTPROC +epoxy_glGetProgramPipelineivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 23169 /* glGetProgramPipelineivEXT */); +} + +static PFNGLGETPROGRAMRESOURCEINDEXPROC +epoxy_glGetProgramResourceIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23195 /* "glGetProgramResourceIndex" */, + 23195 /* "glGetProgramResourceIndex" */, + 23195 /* "glGetProgramResourceIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 23195 /* "glGetProgramResourceIndex" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONPROC +epoxy_glGetProgramResourceLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23221 /* "glGetProgramResourceLocation" */, + 23221 /* "glGetProgramResourceLocation" */, + 23221 /* "glGetProgramResourceLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 23221 /* "glGetProgramResourceLocation" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC +epoxy_glGetProgramResourceLocationIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23250 /* "glGetProgramResourceLocationIndex" */, + 23250 /* "glGetProgramResourceLocationIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 23250 /* "glGetProgramResourceLocationIndex" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC +epoxy_glGetProgramResourceLocationIndexEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_blend_func_extended, 23284 /* glGetProgramResourceLocationIndexEXT */); +} + +static PFNGLGETPROGRAMRESOURCENAMEPROC +epoxy_glGetProgramResourceName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23321 /* "glGetProgramResourceName" */, + 23321 /* "glGetProgramResourceName" */, + 23321 /* "glGetProgramResourceName" */, + }; + return gl_provider_resolver(entrypoint_strings + 23321 /* "glGetProgramResourceName" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCEFVNVPROC +epoxy_glGetProgramResourcefvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 23346 /* glGetProgramResourcefvNV */); +} + +static PFNGLGETPROGRAMRESOURCEIVPROC +epoxy_glGetProgramResourceiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23371 /* "glGetProgramResourceiv" */, + 23371 /* "glGetProgramResourceiv" */, + 23371 /* "glGetProgramResourceiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23371 /* "glGetProgramResourceiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTAGEIVPROC +epoxy_glGetProgramStageiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23394 /* "glGetProgramStageiv" */, + 23394 /* "glGetProgramStageiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23394 /* "glGetProgramStageiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTRINGARBPROC +epoxy_glGetProgramStringARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23414 /* "glGetProgramStringARB" */, + 23414 /* "glGetProgramStringARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23414 /* "glGetProgramStringARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTRINGNVPROC +epoxy_glGetProgramStringNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23436 /* glGetProgramStringNV */); +} + +static PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC +epoxy_glGetProgramSubroutineParameteruivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program5, 23457 /* glGetProgramSubroutineParameteruivNV */); +} + +static PFNGLGETPROGRAMIVPROC +epoxy_glGetProgramiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23494 /* "glGetProgramiv" */, + 23494 /* "glGetProgramiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23494 /* "glGetProgramiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMIVARBPROC +epoxy_glGetProgramivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23509 /* "glGetProgramivARB" */, + 23509 /* "glGetProgramivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23509 /* "glGetProgramivARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMIVNVPROC +epoxy_glGetProgramivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23527 /* glGetProgramivNV */); +} + +static PFNGLGETQUERYBUFFEROBJECTI64VPROC +epoxy_glGetQueryBufferObjecti64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23544 /* "glGetQueryBufferObjecti64v" */, + 23544 /* "glGetQueryBufferObjecti64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23544 /* "glGetQueryBufferObjecti64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTIVPROC +epoxy_glGetQueryBufferObjectiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23571 /* "glGetQueryBufferObjectiv" */, + 23571 /* "glGetQueryBufferObjectiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23571 /* "glGetQueryBufferObjectiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTUI64VPROC +epoxy_glGetQueryBufferObjectui64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23596 /* "glGetQueryBufferObjectui64v" */, + 23596 /* "glGetQueryBufferObjectui64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23596 /* "glGetQueryBufferObjectui64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTUIVPROC +epoxy_glGetQueryBufferObjectuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23624 /* "glGetQueryBufferObjectuiv" */, + 23624 /* "glGetQueryBufferObjectuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23624 /* "glGetQueryBufferObjectuiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYINDEXEDIVPROC +epoxy_glGetQueryIndexediv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23650 /* "glGetQueryIndexediv" */, + 23650 /* "glGetQueryIndexediv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23650 /* "glGetQueryIndexediv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTI64VPROC +epoxy_glGetQueryObjecti64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23670 /* "glGetQueryObjecti64v" */, + 23670 /* "glGetQueryObjecti64v" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23670 /* "glGetQueryObjecti64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTI64VEXTPROC +epoxy_glGetQueryObjecti64vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23691 /* "glGetQueryObjecti64vEXT" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + 23670 /* "glGetQueryObjecti64v" */, + 23670 /* "glGetQueryObjecti64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23691 /* "glGetQueryObjecti64vEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVPROC +epoxy_glGetQueryObjectiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_occlusion_query, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23715 /* "glGetQueryObjectiv" */, + 23734 /* "glGetQueryObjectivARB" */, + 23756 /* "glGetQueryObjectivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23715 /* "glGetQueryObjectiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVARBPROC +epoxy_glGetQueryObjectivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23734 /* "glGetQueryObjectivARB" */, + 23715 /* "glGetQueryObjectiv" */, + 23756 /* "glGetQueryObjectivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23734 /* "glGetQueryObjectivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVEXTPROC +epoxy_glGetQueryObjectivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23756 /* "glGetQueryObjectivEXT" */, + 23715 /* "glGetQueryObjectiv" */, + 23734 /* "glGetQueryObjectivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23756 /* "glGetQueryObjectivEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUI64VPROC +epoxy_glGetQueryObjectui64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23778 /* "glGetQueryObjectui64v" */, + 23778 /* "glGetQueryObjectui64v" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23778 /* "glGetQueryObjectui64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUI64VEXTPROC +epoxy_glGetQueryObjectui64vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23800 /* "glGetQueryObjectui64vEXT" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + 23778 /* "glGetQueryObjectui64v" */, + 23778 /* "glGetQueryObjectui64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23800 /* "glGetQueryObjectui64vEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVPROC +epoxy_glGetQueryObjectuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23825 /* "glGetQueryObjectuiv" */, + 23825 /* "glGetQueryObjectuiv" */, + 23845 /* "glGetQueryObjectuivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23825 /* "glGetQueryObjectuiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVARBPROC +epoxy_glGetQueryObjectuivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23845 /* "glGetQueryObjectuivARB" */, + 23825 /* "glGetQueryObjectuiv" */, + 23825 /* "glGetQueryObjectuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23845 /* "glGetQueryObjectuivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVEXTPROC +epoxy_glGetQueryObjectuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23868 /* "glGetQueryObjectuivEXT" */, + 23868 /* "glGetQueryObjectuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23868 /* "glGetQueryObjectuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVPROC +epoxy_glGetQueryiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23891 /* "glGetQueryiv" */, + 23891 /* "glGetQueryiv" */, + 23904 /* "glGetQueryivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23891 /* "glGetQueryiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVARBPROC +epoxy_glGetQueryivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23904 /* "glGetQueryivARB" */, + 23891 /* "glGetQueryiv" */, + 23891 /* "glGetQueryiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23904 /* "glGetQueryivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVEXTPROC +epoxy_glGetQueryivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23920 /* "glGetQueryivEXT" */, + 23920 /* "glGetQueryivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23920 /* "glGetQueryivEXT" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVPROC +epoxy_glGetRenderbufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23965 /* "glGetRenderbufferParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23936 /* "glGetRenderbufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC +epoxy_glGetRenderbufferParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23965 /* "glGetRenderbufferParameterivEXT" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23965 /* "glGetRenderbufferParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVOESPROC +epoxy_glGetRenderbufferParameterivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 23997 /* glGetRenderbufferParameterivOES */); +} + +static PFNGLGETSAMPLERPARAMETERIIVPROC +epoxy_glGetSamplerParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24054 /* "glGetSamplerParameterIivEXT" */, + 24082 /* "glGetSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24029 /* "glGetSamplerParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIIVEXTPROC +epoxy_glGetSamplerParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24054 /* "glGetSamplerParameterIivEXT" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24082 /* "glGetSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24054 /* "glGetSamplerParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIIVOESPROC +epoxy_glGetSamplerParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24082 /* "glGetSamplerParameterIivOES" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24054 /* "glGetSamplerParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24082 /* "glGetSamplerParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVPROC +epoxy_glGetSamplerParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24136 /* "glGetSamplerParameterIuivEXT" */, + 24165 /* "glGetSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24110 /* "glGetSamplerParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVEXTPROC +epoxy_glGetSamplerParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24136 /* "glGetSamplerParameterIuivEXT" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24165 /* "glGetSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24136 /* "glGetSamplerParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVOESPROC +epoxy_glGetSamplerParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24165 /* "glGetSamplerParameterIuivOES" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24136 /* "glGetSamplerParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24165 /* "glGetSamplerParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERFVPROC +epoxy_glGetSamplerParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24194 /* "glGetSamplerParameterfv" */, + 24194 /* "glGetSamplerParameterfv" */, + 24194 /* "glGetSamplerParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24194 /* "glGetSamplerParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIVPROC +epoxy_glGetSamplerParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24218 /* "glGetSamplerParameteriv" */, + 24218 /* "glGetSamplerParameteriv" */, + 24218 /* "glGetSamplerParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24218 /* "glGetSamplerParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETSEPARABLEFILTERPROC +epoxy_glGetSeparableFilter_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 24242 /* glGetSeparableFilter */); +} + +static PFNGLGETSEPARABLEFILTEREXTPROC +epoxy_glGetSeparableFilterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 24263 /* glGetSeparableFilterEXT */); +} + +static PFNGLGETSHADERINFOLOGPROC +epoxy_glGetShaderInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24287 /* "glGetShaderInfoLog" */, + 24287 /* "glGetShaderInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 24287 /* "glGetShaderInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETSHADERPRECISIONFORMATPROC +epoxy_glGetShaderPrecisionFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24306 /* "glGetShaderPrecisionFormat" */, + 24306 /* "glGetShaderPrecisionFormat" */, + 24306 /* "glGetShaderPrecisionFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 24306 /* "glGetShaderPrecisionFormat" */, + providers, entrypoints); +} + +static PFNGLGETSHADERSOURCEPROC +epoxy_glGetShaderSource_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24333 /* "glGetShaderSource" */, + 24333 /* "glGetShaderSource" */, + 24351 /* "glGetShaderSourceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 24333 /* "glGetShaderSource" */, + providers, entrypoints); +} + +static PFNGLGETSHADERSOURCEARBPROC +epoxy_glGetShaderSourceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24351 /* "glGetShaderSourceARB" */, + 24333 /* "glGetShaderSource" */, + 24333 /* "glGetShaderSource" */, + }; + return gl_provider_resolver(entrypoint_strings + 24351 /* "glGetShaderSourceARB" */, + providers, entrypoints); +} + +static PFNGLGETSHADERIVPROC +epoxy_glGetShaderiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24372 /* "glGetShaderiv" */, + 24372 /* "glGetShaderiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24372 /* "glGetShaderiv" */, + providers, entrypoints); +} + +static PFNGLGETSHARPENTEXFUNCSGISPROC +epoxy_glGetSharpenTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_sharpen_texture, 24386 /* glGetSharpenTexFuncSGIS */); +} + +static PFNGLGETSTAGEINDEXNVPROC +epoxy_glGetStageIndexNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 24410 /* glGetStageIndexNV */); +} + +static PFNGLGETSTRINGPROC +epoxy_glGetString_resolver(void) +{ + return gl_single_resolver(always_present, 24428 /* glGetString */); +} + +static PFNGLGETSTRINGIPROC +epoxy_glGetStringi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24440 /* "glGetStringi" */, + 24440 /* "glGetStringi" */, + }; + return gl_provider_resolver(entrypoint_strings + 24440 /* "glGetStringi" */, + providers, entrypoints); +} + +static PFNGLGETSUBROUTINEINDEXPROC +epoxy_glGetSubroutineIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24453 /* "glGetSubroutineIndex" */, + 24453 /* "glGetSubroutineIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 24453 /* "glGetSubroutineIndex" */, + providers, entrypoints); +} + +static PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC +epoxy_glGetSubroutineUniformLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24474 /* "glGetSubroutineUniformLocation" */, + 24474 /* "glGetSubroutineUniformLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 24474 /* "glGetSubroutineUniformLocation" */, + providers, entrypoints); +} + +static PFNGLGETSYNCIVPROC +epoxy_glGetSynciv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24517 /* "glGetSyncivAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 24505 /* "glGetSynciv" */, + providers, entrypoints); +} + +static PFNGLGETSYNCIVAPPLEPROC +epoxy_glGetSyncivAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24517 /* "glGetSyncivAPPLE" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24517 /* "glGetSyncivAPPLE" */, + providers, entrypoints); +} + +static PFNGLGETTEXBUMPPARAMETERFVATIPROC +epoxy_glGetTexBumpParameterfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 24534 /* glGetTexBumpParameterfvATI */); +} + +static PFNGLGETTEXBUMPPARAMETERIVATIPROC +epoxy_glGetTexBumpParameterivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 24561 /* glGetTexBumpParameterivATI */); +} + +static PFNGLGETTEXENVFVPROC +epoxy_glGetTexEnvfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24588 /* "glGetTexEnvfv" */, + 24588 /* "glGetTexEnvfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24588 /* "glGetTexEnvfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXENVIVPROC +epoxy_glGetTexEnviv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24602 /* "glGetTexEnviv" */, + 24602 /* "glGetTexEnviv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24602 /* "glGetTexEnviv" */, + providers, entrypoints); +} + +static PFNGLGETTEXENVXVPROC +epoxy_glGetTexEnvxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 24616 /* glGetTexEnvxv */); +} + +static PFNGLGETTEXENVXVOESPROC +epoxy_glGetTexEnvxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 24630 /* glGetTexEnvxvOES */); +} + +static PFNGLGETTEXFILTERFUNCSGISPROC +epoxy_glGetTexFilterFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_filter4, 24647 /* glGetTexFilterFuncSGIS */); +} + +static PFNGLGETTEXGENDVPROC +epoxy_glGetTexGendv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24670 /* glGetTexGendv */); +} + +static PFNGLGETTEXGENFVPROC +epoxy_glGetTexGenfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24684 /* glGetTexGenfv */); +} + +static PFNGLGETTEXGENFVOESPROC +epoxy_glGetTexGenfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 24698 /* glGetTexGenfvOES */); +} + +static PFNGLGETTEXGENIVPROC +epoxy_glGetTexGeniv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24715 /* glGetTexGeniv */); +} + +static PFNGLGETTEXGENIVOESPROC +epoxy_glGetTexGenivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 24729 /* glGetTexGenivOES */); +} + +static PFNGLGETTEXGENXVOESPROC +epoxy_glGetTexGenxvOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24746 /* "glGetTexGenxvOES" */, + 24746 /* "glGetTexGenxvOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24746 /* "glGetTexGenxvOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXIMAGEPROC +epoxy_glGetTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24763 /* glGetTexImage */); +} + +static PFNGLGETTEXLEVELPARAMETERFVPROC +epoxy_glGetTexLevelParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24777 /* "glGetTexLevelParameterfv" */, + 24777 /* "glGetTexLevelParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24777 /* "glGetTexLevelParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXLEVELPARAMETERIVPROC +epoxy_glGetTexLevelParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24802 /* "glGetTexLevelParameteriv" */, + 24802 /* "glGetTexLevelParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24802 /* "glGetTexLevelParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXLEVELPARAMETERXVOESPROC +epoxy_glGetTexLevelParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 24827 /* glGetTexLevelParameterxvOES */); +} + +static PFNGLGETTEXPARAMETERIIVPROC +epoxy_glGetTexParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24900 /* "glGetTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24855 /* "glGetTexParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIIVEXTPROC +epoxy_glGetTexParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24900 /* "glGetTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24876 /* "glGetTexParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIIVOESPROC +epoxy_glGetTexParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24900 /* "glGetTexParameterIivOES" */, + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24900 /* "glGetTexParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVPROC +epoxy_glGetTexParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24971 /* "glGetTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24924 /* "glGetTexParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVEXTPROC +epoxy_glGetTexParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24971 /* "glGetTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24946 /* "glGetTexParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVOESPROC +epoxy_glGetTexParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24971 /* "glGetTexParameterIuivOES" */, + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24971 /* "glGetTexParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC +epoxy_glGetTexParameterPointervAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_texture_range, 24996 /* glGetTexParameterPointervAPPLE */); +} + +static PFNGLGETTEXPARAMETERFVPROC +epoxy_glGetTexParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25027 /* "glGetTexParameterfv" */, + 25027 /* "glGetTexParameterfv" */, + 25027 /* "glGetTexParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25027 /* "glGetTexParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIVPROC +epoxy_glGetTexParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25047 /* "glGetTexParameteriv" */, + 25047 /* "glGetTexParameteriv" */, + 25047 /* "glGetTexParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25047 /* "glGetTexParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERXVPROC +epoxy_glGetTexParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 25067 /* glGetTexParameterxv */); +} + +static PFNGLGETTEXPARAMETERXVOESPROC +epoxy_glGetTexParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 25087 /* glGetTexParameterxvOES */); +} + +static PFNGLGETTEXTUREHANDLEARBPROC +epoxy_glGetTextureHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 25110 /* glGetTextureHandleARB */); +} + +static PFNGLGETTEXTUREHANDLENVPROC +epoxy_glGetTextureHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 25132 /* glGetTextureHandleNV */); +} + +static PFNGLGETTEXTUREIMAGEPROC +epoxy_glGetTextureImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25153 /* "glGetTextureImage" */, + 25153 /* "glGetTextureImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 25153 /* "glGetTextureImage" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREIMAGEEXTPROC +epoxy_glGetTextureImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25171 /* glGetTextureImageEXT */); +} + +static PFNGLGETTEXTURELEVELPARAMETERFVPROC +epoxy_glGetTextureLevelParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25192 /* "glGetTextureLevelParameterfv" */, + 25192 /* "glGetTextureLevelParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25192 /* "glGetTextureLevelParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC +epoxy_glGetTextureLevelParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25221 /* glGetTextureLevelParameterfvEXT */); +} + +static PFNGLGETTEXTURELEVELPARAMETERIVPROC +epoxy_glGetTextureLevelParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25253 /* "glGetTextureLevelParameteriv" */, + 25253 /* "glGetTextureLevelParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25253 /* "glGetTextureLevelParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC +epoxy_glGetTextureLevelParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25282 /* glGetTextureLevelParameterivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIIVPROC +epoxy_glGetTextureParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25314 /* "glGetTextureParameterIiv" */, + 25314 /* "glGetTextureParameterIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25314 /* "glGetTextureParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIIVEXTPROC +epoxy_glGetTextureParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25339 /* glGetTextureParameterIivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIUIVPROC +epoxy_glGetTextureParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25367 /* "glGetTextureParameterIuiv" */, + 25367 /* "glGetTextureParameterIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25367 /* "glGetTextureParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIUIVEXTPROC +epoxy_glGetTextureParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25393 /* glGetTextureParameterIuivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERFVPROC +epoxy_glGetTextureParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25422 /* "glGetTextureParameterfv" */, + 25422 /* "glGetTextureParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25422 /* "glGetTextureParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERFVEXTPROC +epoxy_glGetTextureParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25446 /* glGetTextureParameterfvEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIVPROC +epoxy_glGetTextureParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25473 /* "glGetTextureParameteriv" */, + 25473 /* "glGetTextureParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25473 /* "glGetTextureParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIVEXTPROC +epoxy_glGetTextureParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25497 /* glGetTextureParameterivEXT */); +} + +static PFNGLGETTEXTURESAMPLERHANDLEARBPROC +epoxy_glGetTextureSamplerHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 25524 /* glGetTextureSamplerHandleARB */); +} + +static PFNGLGETTEXTURESAMPLERHANDLENVPROC +epoxy_glGetTextureSamplerHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 25553 /* glGetTextureSamplerHandleNV */); +} + +static PFNGLGETTEXTURESUBIMAGEPROC +epoxy_glGetTextureSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_get_texture_sub_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25581 /* "glGetTextureSubImage" */, + 25581 /* "glGetTextureSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 25581 /* "glGetTextureSubImage" */, + providers, entrypoints); +} + +static PFNGLGETTRACKMATRIXIVNVPROC +epoxy_glGetTrackMatrixivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 25602 /* glGetTrackMatrixivNV */); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGPROC +epoxy_glGetTransformFeedbackVarying_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25623 /* "glGetTransformFeedbackVarying" */, + 25623 /* "glGetTransformFeedbackVarying" */, + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 25623 /* "glGetTransformFeedbackVarying" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC +epoxy_glGetTransformFeedbackVaryingEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + 25623 /* "glGetTransformFeedbackVarying" */, + 25623 /* "glGetTransformFeedbackVarying" */, + }; + return gl_provider_resolver(entrypoint_strings + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC +epoxy_glGetTransformFeedbackVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 25686 /* glGetTransformFeedbackVaryingNV */); +} + +static PFNGLGETTRANSFORMFEEDBACKI64_VPROC +epoxy_glGetTransformFeedbacki64_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25718 /* "glGetTransformFeedbacki64_v" */, + 25718 /* "glGetTransformFeedbacki64_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 25718 /* "glGetTransformFeedbacki64_v" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKI_VPROC +epoxy_glGetTransformFeedbacki_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25746 /* "glGetTransformFeedbacki_v" */, + 25746 /* "glGetTransformFeedbacki_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 25746 /* "glGetTransformFeedbacki_v" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKIVPROC +epoxy_glGetTransformFeedbackiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25772 /* "glGetTransformFeedbackiv" */, + 25772 /* "glGetTransformFeedbackiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25772 /* "glGetTransformFeedbackiv" */, + providers, entrypoints); +} + +static PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC +epoxy_glGetTranslatedShaderSourceANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_translated_shader_source, 25797 /* glGetTranslatedShaderSourceANGLE */); +} + +static PFNGLGETUNIFORMBLOCKINDEXPROC +epoxy_glGetUniformBlockIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25830 /* "glGetUniformBlockIndex" */, + 25830 /* "glGetUniformBlockIndex" */, + 25830 /* "glGetUniformBlockIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 25830 /* "glGetUniformBlockIndex" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMBUFFERSIZEEXTPROC +epoxy_glGetUniformBufferSizeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 25853 /* glGetUniformBufferSizeEXT */); +} + +static PFNGLGETUNIFORMINDICESPROC +epoxy_glGetUniformIndices_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25879 /* "glGetUniformIndices" */, + 25879 /* "glGetUniformIndices" */, + 25879 /* "glGetUniformIndices" */, + }; + return gl_provider_resolver(entrypoint_strings + 25879 /* "glGetUniformIndices" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMLOCATIONPROC +epoxy_glGetUniformLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25899 /* "glGetUniformLocation" */, + 25899 /* "glGetUniformLocation" */, + 25920 /* "glGetUniformLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 25899 /* "glGetUniformLocation" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMLOCATIONARBPROC +epoxy_glGetUniformLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25920 /* "glGetUniformLocationARB" */, + 25899 /* "glGetUniformLocation" */, + 25899 /* "glGetUniformLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 25920 /* "glGetUniformLocationARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMOFFSETEXTPROC +epoxy_glGetUniformOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 25944 /* glGetUniformOffsetEXT */); +} + +static PFNGLGETUNIFORMSUBROUTINEUIVPROC +epoxy_glGetUniformSubroutineuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25966 /* "glGetUniformSubroutineuiv" */, + 25966 /* "glGetUniformSubroutineuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25966 /* "glGetUniformSubroutineuiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMDVPROC +epoxy_glGetUniformdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25992 /* "glGetUniformdv" */, + 25992 /* "glGetUniformdv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25992 /* "glGetUniformdv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMFVPROC +epoxy_glGetUniformfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26007 /* "glGetUniformfv" */, + 26007 /* "glGetUniformfv" */, + 26022 /* "glGetUniformfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26007 /* "glGetUniformfv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMFVARBPROC +epoxy_glGetUniformfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26022 /* "glGetUniformfvARB" */, + 26007 /* "glGetUniformfv" */, + 26007 /* "glGetUniformfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26022 /* "glGetUniformfvARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMI64VARBPROC +epoxy_glGetUniformi64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 26040 /* glGetUniformi64vARB */); +} + +static PFNGLGETUNIFORMI64VNVPROC +epoxy_glGetUniformi64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26060 /* "glGetUniformi64vNV" */, + 26060 /* "glGetUniformi64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26060 /* "glGetUniformi64vNV" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMIVPROC +epoxy_glGetUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26079 /* "glGetUniformiv" */, + 26079 /* "glGetUniformiv" */, + 26094 /* "glGetUniformivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26079 /* "glGetUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMIVARBPROC +epoxy_glGetUniformivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26094 /* "glGetUniformivARB" */, + 26079 /* "glGetUniformiv" */, + 26079 /* "glGetUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26094 /* "glGetUniformivARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUI64VARBPROC +epoxy_glGetUniformui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 26112 /* glGetUniformui64vARB */); +} + +static PFNGLGETUNIFORMUI64VNVPROC +epoxy_glGetUniformui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_shader_buffer_load, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26133 /* "glGetUniformui64vNV" */, + 26133 /* "glGetUniformui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26133 /* "glGetUniformui64vNV" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUIVPROC +epoxy_glGetUniformuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26153 /* "glGetUniformuiv" */, + 26153 /* "glGetUniformuiv" */, + 26169 /* "glGetUniformuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26153 /* "glGetUniformuiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUIVEXTPROC +epoxy_glGetUniformuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26169 /* "glGetUniformuivEXT" */, + 26153 /* "glGetUniformuiv" */, + 26153 /* "glGetUniformuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26169 /* "glGetUniformuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVARIANTARRAYOBJECTFVATIPROC +epoxy_glGetVariantArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 26188 /* glGetVariantArrayObjectfvATI */); +} + +static PFNGLGETVARIANTARRAYOBJECTIVATIPROC +epoxy_glGetVariantArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 26217 /* glGetVariantArrayObjectivATI */); +} + +static PFNGLGETVARIANTBOOLEANVEXTPROC +epoxy_glGetVariantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26246 /* glGetVariantBooleanvEXT */); +} + +static PFNGLGETVARIANTFLOATVEXTPROC +epoxy_glGetVariantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26270 /* glGetVariantFloatvEXT */); +} + +static PFNGLGETVARIANTINTEGERVEXTPROC +epoxy_glGetVariantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26292 /* glGetVariantIntegervEXT */); +} + +static PFNGLGETVARIANTPOINTERVEXTPROC +epoxy_glGetVariantPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26316 /* glGetVariantPointervEXT */); +} + +static PFNGLGETVARYINGLOCATIONNVPROC +epoxy_glGetVaryingLocationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 26340 /* glGetVaryingLocationNV */); +} + +static PFNGLGETVERTEXARRAYINDEXED64IVPROC +epoxy_glGetVertexArrayIndexed64iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26363 /* "glGetVertexArrayIndexed64iv" */, + 26363 /* "glGetVertexArrayIndexed64iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26363 /* "glGetVertexArrayIndexed64iv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXARRAYINDEXEDIVPROC +epoxy_glGetVertexArrayIndexediv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26391 /* "glGetVertexArrayIndexediv" */, + 26391 /* "glGetVertexArrayIndexediv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26391 /* "glGetVertexArrayIndexediv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC +epoxy_glGetVertexArrayIntegeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26417 /* glGetVertexArrayIntegeri_vEXT */); +} + +static PFNGLGETVERTEXARRAYINTEGERVEXTPROC +epoxy_glGetVertexArrayIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26447 /* glGetVertexArrayIntegervEXT */); +} + +static PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC +epoxy_glGetVertexArrayPointeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26475 /* glGetVertexArrayPointeri_vEXT */); +} + +static PFNGLGETVERTEXARRAYPOINTERVEXTPROC +epoxy_glGetVertexArrayPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26505 /* glGetVertexArrayPointervEXT */); +} + +static PFNGLGETVERTEXARRAYIVPROC +epoxy_glGetVertexArrayiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26533 /* "glGetVertexArrayiv" */, + 26533 /* "glGetVertexArrayiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26533 /* "glGetVertexArrayiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC +epoxy_glGetVertexAttribArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 26552 /* glGetVertexAttribArrayObjectfvATI */); +} + +static PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC +epoxy_glGetVertexAttribArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 26586 /* glGetVertexAttribArrayObjectivATI */); +} + +static PFNGLGETVERTEXATTRIBIIVPROC +epoxy_glGetVertexAttribIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26620 /* "glGetVertexAttribIiv" */, + 26620 /* "glGetVertexAttribIiv" */, + 26641 /* "glGetVertexAttribIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26620 /* "glGetVertexAttribIiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIIVEXTPROC +epoxy_glGetVertexAttribIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26641 /* "glGetVertexAttribIivEXT" */, + 26620 /* "glGetVertexAttribIiv" */, + 26620 /* "glGetVertexAttribIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26641 /* "glGetVertexAttribIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIUIVPROC +epoxy_glGetVertexAttribIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26665 /* "glGetVertexAttribIuiv" */, + 26665 /* "glGetVertexAttribIuiv" */, + 26687 /* "glGetVertexAttribIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26665 /* "glGetVertexAttribIuiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIUIVEXTPROC +epoxy_glGetVertexAttribIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26687 /* "glGetVertexAttribIuivEXT" */, + 26665 /* "glGetVertexAttribIuiv" */, + 26665 /* "glGetVertexAttribIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26687 /* "glGetVertexAttribIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLDVPROC +epoxy_glGetVertexAttribLdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26712 /* "glGetVertexAttribLdv" */, + 26712 /* "glGetVertexAttribLdv" */, + 26733 /* "glGetVertexAttribLdvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26712 /* "glGetVertexAttribLdv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLDVEXTPROC +epoxy_glGetVertexAttribLdvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26733 /* "glGetVertexAttribLdvEXT" */, + 26712 /* "glGetVertexAttribLdv" */, + 26712 /* "glGetVertexAttribLdv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26733 /* "glGetVertexAttribLdvEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLI64VNVPROC +epoxy_glGetVertexAttribLi64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 26757 /* glGetVertexAttribLi64vNV */); +} + +static PFNGLGETVERTEXATTRIBLUI64VARBPROC +epoxy_glGetVertexAttribLui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 26782 /* glGetVertexAttribLui64vARB */); +} + +static PFNGLGETVERTEXATTRIBLUI64VNVPROC +epoxy_glGetVertexAttribLui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 26809 /* glGetVertexAttribLui64vNV */); +} + +static PFNGLGETVERTEXATTRIBPOINTERVPROC +epoxy_glGetVertexAttribPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26890 /* "glGetVertexAttribPointervNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26835 /* "glGetVertexAttribPointerv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBPOINTERVARBPROC +epoxy_glGetVertexAttribPointervARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26890 /* "glGetVertexAttribPointervNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26861 /* "glGetVertexAttribPointervARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBPOINTERVNVPROC +epoxy_glGetVertexAttribPointervNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26890 /* "glGetVertexAttribPointervNV" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26890 /* "glGetVertexAttribPointervNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVPROC +epoxy_glGetVertexAttribdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26918 /* "glGetVertexAttribdv" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26961 /* "glGetVertexAttribdvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26918 /* "glGetVertexAttribdv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVARBPROC +epoxy_glGetVertexAttribdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26918 /* "glGetVertexAttribdv" */, + 26961 /* "glGetVertexAttribdvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26938 /* "glGetVertexAttribdvARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVNVPROC +epoxy_glGetVertexAttribdvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26961 /* "glGetVertexAttribdvNV" */, + 26918 /* "glGetVertexAttribdv" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26961 /* "glGetVertexAttribdvNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVPROC +epoxy_glGetVertexAttribfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27026 /* "glGetVertexAttribfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26983 /* "glGetVertexAttribfv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVARBPROC +epoxy_glGetVertexAttribfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27026 /* "glGetVertexAttribfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27003 /* "glGetVertexAttribfvARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVNVPROC +epoxy_glGetVertexAttribfvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27026 /* "glGetVertexAttribfvNV" */, + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 27026 /* "glGetVertexAttribfvNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVPROC +epoxy_glGetVertexAttribiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + 27091 /* "glGetVertexAttribivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27048 /* "glGetVertexAttribiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVARBPROC +epoxy_glGetVertexAttribivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27091 /* "glGetVertexAttribivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27068 /* "glGetVertexAttribivARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVNVPROC +epoxy_glGetVertexAttribivNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27091 /* "glGetVertexAttribivNV" */, + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 27091 /* "glGetVertexAttribivNV" */, + providers, entrypoints); +} + +static PFNGLGETVIDEOCAPTURESTREAMDVNVPROC +epoxy_glGetVideoCaptureStreamdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27113 /* glGetVideoCaptureStreamdvNV */); +} + +static PFNGLGETVIDEOCAPTURESTREAMFVNVPROC +epoxy_glGetVideoCaptureStreamfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27141 /* glGetVideoCaptureStreamfvNV */); +} + +static PFNGLGETVIDEOCAPTURESTREAMIVNVPROC +epoxy_glGetVideoCaptureStreamivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27169 /* glGetVideoCaptureStreamivNV */); +} + +static PFNGLGETVIDEOCAPTUREIVNVPROC +epoxy_glGetVideoCaptureivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27197 /* glGetVideoCaptureivNV */); +} + +static PFNGLGETVIDEOI64VNVPROC +epoxy_glGetVideoi64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27219 /* glGetVideoi64vNV */); +} + +static PFNGLGETVIDEOIVNVPROC +epoxy_glGetVideoivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27236 /* glGetVideoivNV */); +} + +static PFNGLGETVIDEOUI64VNVPROC +epoxy_glGetVideoui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27251 /* glGetVideoui64vNV */); +} + +static PFNGLGETVIDEOUIVNVPROC +epoxy_glGetVideouivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27269 /* glGetVideouivNV */); +} + +static PFNGLGETNCOLORTABLEPROC +epoxy_glGetnColorTable_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27285 /* glGetnColorTable */); +} + +static PFNGLGETNCOLORTABLEARBPROC +epoxy_glGetnColorTableARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27302 /* glGetnColorTableARB */); +} + +static PFNGLGETNCOMPRESSEDTEXIMAGEPROC +epoxy_glGetnCompressedTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27322 /* glGetnCompressedTexImage */); +} + +static PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC +epoxy_glGetnCompressedTexImageARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27347 /* glGetnCompressedTexImageARB */); +} + +static PFNGLGETNCONVOLUTIONFILTERPROC +epoxy_glGetnConvolutionFilter_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27375 /* glGetnConvolutionFilter */); +} + +static PFNGLGETNCONVOLUTIONFILTERARBPROC +epoxy_glGetnConvolutionFilterARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27399 /* glGetnConvolutionFilterARB */); +} + +static PFNGLGETNHISTOGRAMPROC +epoxy_glGetnHistogram_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27426 /* glGetnHistogram */); +} + +static PFNGLGETNHISTOGRAMARBPROC +epoxy_glGetnHistogramARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27442 /* glGetnHistogramARB */); +} + +static PFNGLGETNMAPDVPROC +epoxy_glGetnMapdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27461 /* glGetnMapdv */); +} + +static PFNGLGETNMAPDVARBPROC +epoxy_glGetnMapdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27473 /* glGetnMapdvARB */); +} + +static PFNGLGETNMAPFVPROC +epoxy_glGetnMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27488 /* glGetnMapfv */); +} + +static PFNGLGETNMAPFVARBPROC +epoxy_glGetnMapfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27500 /* glGetnMapfvARB */); +} + +static PFNGLGETNMAPIVPROC +epoxy_glGetnMapiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27515 /* glGetnMapiv */); +} + +static PFNGLGETNMAPIVARBPROC +epoxy_glGetnMapivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27527 /* glGetnMapivARB */); +} + +static PFNGLGETNMINMAXPROC +epoxy_glGetnMinmax_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27542 /* glGetnMinmax */); +} + +static PFNGLGETNMINMAXARBPROC +epoxy_glGetnMinmaxARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27555 /* glGetnMinmaxARB */); +} + +static PFNGLGETNPIXELMAPFVPROC +epoxy_glGetnPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27571 /* glGetnPixelMapfv */); +} + +static PFNGLGETNPIXELMAPFVARBPROC +epoxy_glGetnPixelMapfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27588 /* glGetnPixelMapfvARB */); +} + +static PFNGLGETNPIXELMAPUIVPROC +epoxy_glGetnPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27608 /* glGetnPixelMapuiv */); +} + +static PFNGLGETNPIXELMAPUIVARBPROC +epoxy_glGetnPixelMapuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27626 /* glGetnPixelMapuivARB */); +} + +static PFNGLGETNPIXELMAPUSVPROC +epoxy_glGetnPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27647 /* glGetnPixelMapusv */); +} + +static PFNGLGETNPIXELMAPUSVARBPROC +epoxy_glGetnPixelMapusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27665 /* glGetnPixelMapusvARB */); +} + +static PFNGLGETNPOLYGONSTIPPLEPROC +epoxy_glGetnPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27686 /* glGetnPolygonStipple */); +} + +static PFNGLGETNPOLYGONSTIPPLEARBPROC +epoxy_glGetnPolygonStippleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27707 /* glGetnPolygonStippleARB */); +} + +static PFNGLGETNSEPARABLEFILTERPROC +epoxy_glGetnSeparableFilter_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27731 /* glGetnSeparableFilter */); +} + +static PFNGLGETNSEPARABLEFILTERARBPROC +epoxy_glGetnSeparableFilterARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27753 /* glGetnSeparableFilterARB */); +} + +static PFNGLGETNTEXIMAGEPROC +epoxy_glGetnTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27778 /* glGetnTexImage */); +} + +static PFNGLGETNTEXIMAGEARBPROC +epoxy_glGetnTexImageARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27793 /* glGetnTexImageARB */); +} + +static PFNGLGETNUNIFORMDVPROC +epoxy_glGetnUniformdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27811 /* glGetnUniformdv */); +} + +static PFNGLGETNUNIFORMDVARBPROC +epoxy_glGetnUniformdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27827 /* glGetnUniformdvARB */); +} + +static PFNGLGETNUNIFORMFVPROC +epoxy_glGetnUniformfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27900 /* "glGetnUniformfvKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 27846 /* "glGetnUniformfv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMFVARBPROC +epoxy_glGetnUniformfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27862 /* glGetnUniformfvARB */); +} + +static PFNGLGETNUNIFORMFVEXTPROC +epoxy_glGetnUniformfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 27881 /* glGetnUniformfvEXT */); +} + +static PFNGLGETNUNIFORMFVKHRPROC +epoxy_glGetnUniformfvKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27900 /* "glGetnUniformfvKHR" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 27900 /* "glGetnUniformfvKHR" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMI64VARBPROC +epoxy_glGetnUniformi64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 27919 /* glGetnUniformi64vARB */); +} + +static PFNGLGETNUNIFORMIVPROC +epoxy_glGetnUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27994 /* "glGetnUniformivKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 27940 /* "glGetnUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMIVARBPROC +epoxy_glGetnUniformivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27956 /* glGetnUniformivARB */); +} + +static PFNGLGETNUNIFORMIVEXTPROC +epoxy_glGetnUniformivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 27975 /* glGetnUniformivEXT */); +} + +static PFNGLGETNUNIFORMIVKHRPROC +epoxy_glGetnUniformivKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27994 /* "glGetnUniformivKHR" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 27994 /* "glGetnUniformivKHR" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMUI64VARBPROC +epoxy_glGetnUniformui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 28013 /* glGetnUniformui64vARB */); +} + +static PFNGLGETNUNIFORMUIVPROC +epoxy_glGetnUniformuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28072 /* "glGetnUniformuivKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 28035 /* "glGetnUniformuiv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMUIVARBPROC +epoxy_glGetnUniformuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 28052 /* glGetnUniformuivARB */); +} + +static PFNGLGETNUNIFORMUIVKHRPROC +epoxy_glGetnUniformuivKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28072 /* "glGetnUniformuivKHR" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 28072 /* "glGetnUniformuivKHR" */, + providers, entrypoints); +} + +static PFNGLGLOBALALPHAFACTORBSUNPROC +epoxy_glGlobalAlphaFactorbSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28092 /* glGlobalAlphaFactorbSUN */); +} + +static PFNGLGLOBALALPHAFACTORDSUNPROC +epoxy_glGlobalAlphaFactordSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28116 /* glGlobalAlphaFactordSUN */); +} + +static PFNGLGLOBALALPHAFACTORFSUNPROC +epoxy_glGlobalAlphaFactorfSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28140 /* glGlobalAlphaFactorfSUN */); +} + +static PFNGLGLOBALALPHAFACTORISUNPROC +epoxy_glGlobalAlphaFactoriSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28164 /* glGlobalAlphaFactoriSUN */); +} + +static PFNGLGLOBALALPHAFACTORSSUNPROC +epoxy_glGlobalAlphaFactorsSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28188 /* glGlobalAlphaFactorsSUN */); +} + +static PFNGLGLOBALALPHAFACTORUBSUNPROC +epoxy_glGlobalAlphaFactorubSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28212 /* glGlobalAlphaFactorubSUN */); +} + +static PFNGLGLOBALALPHAFACTORUISUNPROC +epoxy_glGlobalAlphaFactoruiSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28237 /* glGlobalAlphaFactoruiSUN */); +} + +static PFNGLGLOBALALPHAFACTORUSSUNPROC +epoxy_glGlobalAlphaFactorusSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28262 /* glGlobalAlphaFactorusSUN */); +} + +static PFNGLHINTPROC +epoxy_glHint_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28287 /* "glHint" */, + 28287 /* "glHint" */, + 28287 /* "glHint" */, + }; + return gl_provider_resolver(entrypoint_strings + 28287 /* "glHint" */, + providers, entrypoints); +} + +static PFNGLHINTPGIPROC +epoxy_glHintPGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_PGI_misc_hints, 28294 /* glHintPGI */); +} + +static PFNGLHISTOGRAMPROC +epoxy_glHistogram_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28304 /* "glHistogram" */, + 28316 /* "glHistogramEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 28304 /* "glHistogram" */, + providers, entrypoints); +} + +static PFNGLHISTOGRAMEXTPROC +epoxy_glHistogramEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28316 /* "glHistogramEXT" */, + 28304 /* "glHistogram" */, + }; + return gl_provider_resolver(entrypoint_strings + 28316 /* "glHistogramEXT" */, + providers, entrypoints); +} + +static PFNGLIGLOOINTERFACESGIXPROC +epoxy_glIglooInterfaceSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_igloo_interface, 28331 /* glIglooInterfaceSGIX */); +} + +static PFNGLIMAGETRANSFORMPARAMETERFHPPROC +epoxy_glImageTransformParameterfHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28352 /* glImageTransformParameterfHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERFVHPPROC +epoxy_glImageTransformParameterfvHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28381 /* glImageTransformParameterfvHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERIHPPROC +epoxy_glImageTransformParameteriHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28411 /* glImageTransformParameteriHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERIVHPPROC +epoxy_glImageTransformParameterivHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28440 /* glImageTransformParameterivHP */); +} + +static PFNGLIMPORTSYNCEXTPROC +epoxy_glImportSyncEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_x11_sync_object, 28470 /* glImportSyncEXT */); +} + +static PFNGLINDEXFORMATNVPROC +epoxy_glIndexFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 28486 /* glIndexFormatNV */); +} + +static PFNGLINDEXFUNCEXTPROC +epoxy_glIndexFuncEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_index_func, 28502 /* glIndexFuncEXT */); +} + +static PFNGLINDEXMASKPROC +epoxy_glIndexMask_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28517 /* glIndexMask */); +} + +static PFNGLINDEXMATERIALEXTPROC +epoxy_glIndexMaterialEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_index_material, 28529 /* glIndexMaterialEXT */); +} + +static PFNGLINDEXPOINTERPROC +epoxy_glIndexPointer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28548 /* glIndexPointer */); +} + +static PFNGLINDEXPOINTEREXTPROC +epoxy_glIndexPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 28563 /* glIndexPointerEXT */); +} + +static PFNGLINDEXPOINTERLISTIBMPROC +epoxy_glIndexPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 28581 /* glIndexPointerListIBM */); +} + +static PFNGLINDEXDPROC +epoxy_glIndexd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28603 /* glIndexd */); +} + +static PFNGLINDEXDVPROC +epoxy_glIndexdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28612 /* glIndexdv */); +} + +static PFNGLINDEXFPROC +epoxy_glIndexf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28622 /* glIndexf */); +} + +static PFNGLINDEXFVPROC +epoxy_glIndexfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28631 /* glIndexfv */); +} + +static PFNGLINDEXIPROC +epoxy_glIndexi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28641 /* glIndexi */); +} + +static PFNGLINDEXIVPROC +epoxy_glIndexiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28650 /* glIndexiv */); +} + +static PFNGLINDEXSPROC +epoxy_glIndexs_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28660 /* glIndexs */); +} + +static PFNGLINDEXSVPROC +epoxy_glIndexsv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28669 /* glIndexsv */); +} + +static PFNGLINDEXUBPROC +epoxy_glIndexub_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28679 /* glIndexub */); +} + +static PFNGLINDEXUBVPROC +epoxy_glIndexubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28689 /* glIndexubv */); +} + +static PFNGLINDEXXOESPROC +epoxy_glIndexxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 28700 /* glIndexxOES */); +} + +static PFNGLINDEXXVOESPROC +epoxy_glIndexxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 28712 /* glIndexxvOES */); +} + +static PFNGLINITNAMESPROC +epoxy_glInitNames_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28725 /* glInitNames */); +} + +static PFNGLINSERTCOMPONENTEXTPROC +epoxy_glInsertComponentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 28737 /* glInsertComponentEXT */); +} + +static PFNGLINSERTEVENTMARKEREXTPROC +epoxy_glInsertEventMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 28758 /* glInsertEventMarkerEXT */); +} + +static PFNGLINSTRUMENTSBUFFERSGIXPROC +epoxy_glInstrumentsBufferSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 28781 /* glInstrumentsBufferSGIX */); +} + +static PFNGLINTERLEAVEDARRAYSPROC +epoxy_glInterleavedArrays_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28805 /* glInterleavedArrays */); +} + +static PFNGLINTERPOLATEPATHSNVPROC +epoxy_glInterpolatePathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 28825 /* glInterpolatePathsNV */); +} + +static PFNGLINVALIDATEBUFFERDATAPROC +epoxy_glInvalidateBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28846 /* "glInvalidateBufferData" */, + 28846 /* "glInvalidateBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28846 /* "glInvalidateBufferData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATEBUFFERSUBDATAPROC +epoxy_glInvalidateBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28869 /* "glInvalidateBufferSubData" */, + 28869 /* "glInvalidateBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28869 /* "glInvalidateBufferSubData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATEFRAMEBUFFERPROC +epoxy_glInvalidateFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28895 /* "glInvalidateFramebuffer" */, + 28895 /* "glInvalidateFramebuffer" */, + 28895 /* "glInvalidateFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 28895 /* "glInvalidateFramebuffer" */, + providers, entrypoints); +} + +static PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC +epoxy_glInvalidateNamedFramebufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28919 /* "glInvalidateNamedFramebufferData" */, + 28919 /* "glInvalidateNamedFramebufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28919 /* "glInvalidateNamedFramebufferData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC +epoxy_glInvalidateNamedFramebufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28952 /* "glInvalidateNamedFramebufferSubData" */, + 28952 /* "glInvalidateNamedFramebufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28952 /* "glInvalidateNamedFramebufferSubData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATESUBFRAMEBUFFERPROC +epoxy_glInvalidateSubFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28988 /* "glInvalidateSubFramebuffer" */, + 28988 /* "glInvalidateSubFramebuffer" */, + 28988 /* "glInvalidateSubFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 28988 /* "glInvalidateSubFramebuffer" */, + providers, entrypoints); +} + +static PFNGLINVALIDATETEXIMAGEPROC +epoxy_glInvalidateTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29015 /* "glInvalidateTexImage" */, + 29015 /* "glInvalidateTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 29015 /* "glInvalidateTexImage" */, + providers, entrypoints); +} + +static PFNGLINVALIDATETEXSUBIMAGEPROC +epoxy_glInvalidateTexSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29036 /* "glInvalidateTexSubImage" */, + 29036 /* "glInvalidateTexSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 29036 /* "glInvalidateTexSubImage" */, + providers, entrypoints); +} + +static PFNGLISASYNCMARKERSGIXPROC +epoxy_glIsAsyncMarkerSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 29060 /* glIsAsyncMarkerSGIX */); +} + +static PFNGLISBUFFERPROC +epoxy_glIsBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29091 /* "glIsBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29080 /* "glIsBuffer" */, + providers, entrypoints); +} + +static PFNGLISBUFFERARBPROC +epoxy_glIsBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29091 /* "glIsBufferARB" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29091 /* "glIsBufferARB" */, + providers, entrypoints); +} + +static PFNGLISBUFFERRESIDENTNVPROC +epoxy_glIsBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 29105 /* glIsBufferResidentNV */); +} + +static PFNGLISCOMMANDLISTNVPROC +epoxy_glIsCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 29126 /* glIsCommandListNV */); +} + +static PFNGLISENABLEDPROC +epoxy_glIsEnabled_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29144 /* "glIsEnabled" */, + 29144 /* "glIsEnabled" */, + 29144 /* "glIsEnabled" */, + }; + return gl_provider_resolver(entrypoint_strings + 29144 /* "glIsEnabled" */, + providers, entrypoints); +} + +static PFNGLISENABLEDINDEXEDEXTPROC +epoxy_glIsEnabledIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29156 /* "glIsEnabledIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIPROC +epoxy_glIsEnabledi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29178 /* "glIsEnabledi" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIEXTPROC +epoxy_glIsEnablediEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29191 /* "glIsEnablediEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29191 /* "glIsEnablediEXT" */, + providers, entrypoints); +} + +static PFNGLISENABLEDINVPROC +epoxy_glIsEnablediNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29207 /* "glIsEnablediNV" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29207 /* "glIsEnablediNV" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIOESPROC +epoxy_glIsEnablediOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29222 /* "glIsEnablediOES" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29222 /* "glIsEnablediOES" */, + providers, entrypoints); +} + +static PFNGLISFENCEAPPLEPROC +epoxy_glIsFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 29238 /* glIsFenceAPPLE */); +} + +static PFNGLISFENCENVPROC +epoxy_glIsFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 29253 /* glIsFenceNV */); +} + +static PFNGLISFRAMEBUFFERPROC +epoxy_glIsFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29281 /* "glIsFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29265 /* "glIsFramebuffer" */, + providers, entrypoints); +} + +static PFNGLISFRAMEBUFFEREXTPROC +epoxy_glIsFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29281 /* "glIsFramebufferEXT" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29281 /* "glIsFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLISFRAMEBUFFEROESPROC +epoxy_glIsFramebufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 29300 /* glIsFramebufferOES */); +} + +static PFNGLISIMAGEHANDLERESIDENTARBPROC +epoxy_glIsImageHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 29319 /* glIsImageHandleResidentARB */); +} + +static PFNGLISIMAGEHANDLERESIDENTNVPROC +epoxy_glIsImageHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 29346 /* glIsImageHandleResidentNV */); +} + +static PFNGLISLISTPROC +epoxy_glIsList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 29372 /* glIsList */); +} + +static PFNGLISNAMEAMDPROC +epoxy_glIsNameAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 29381 /* glIsNameAMD */); +} + +static PFNGLISNAMEDBUFFERRESIDENTNVPROC +epoxy_glIsNamedBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 29393 /* glIsNamedBufferResidentNV */); +} + +static PFNGLISNAMEDSTRINGARBPROC +epoxy_glIsNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 29419 /* glIsNamedStringARB */); +} + +static PFNGLISOBJECTBUFFERATIPROC +epoxy_glIsObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 29438 /* glIsObjectBufferATI */); +} + +static PFNGLISOCCLUSIONQUERYNVPROC +epoxy_glIsOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 29458 /* glIsOcclusionQueryNV */); +} + +static PFNGLISPATHNVPROC +epoxy_glIsPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29479 /* glIsPathNV */); +} + +static PFNGLISPOINTINFILLPATHNVPROC +epoxy_glIsPointInFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29490 /* glIsPointInFillPathNV */); +} + +static PFNGLISPOINTINSTROKEPATHNVPROC +epoxy_glIsPointInStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29512 /* glIsPointInStrokePathNV */); +} + +static PFNGLISPROGRAMPROC +epoxy_glIsProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29536 /* "glIsProgram" */, + 29536 /* "glIsProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 29536 /* "glIsProgram" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMARBPROC +epoxy_glIsProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29548 /* "glIsProgramARB" */, + 29548 /* "glIsProgramARB" */, + 29563 /* "glIsProgramNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29548 /* "glIsProgramARB" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMNVPROC +epoxy_glIsProgramNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29563 /* "glIsProgramNV" */, + 29548 /* "glIsProgramARB" */, + 29548 /* "glIsProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29563 /* "glIsProgramNV" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMPIPELINEPROC +epoxy_glIsProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29577 /* "glIsProgramPipeline" */, + 29577 /* "glIsProgramPipeline" */, + 29577 /* "glIsProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 29577 /* "glIsProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMPIPELINEEXTPROC +epoxy_glIsProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 29597 /* glIsProgramPipelineEXT */); +} + +static PFNGLISQUERYPROC +epoxy_glIsQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29620 /* "glIsQuery" */, + 29620 /* "glIsQuery" */, + 29630 /* "glIsQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29620 /* "glIsQuery" */, + providers, entrypoints); +} + +static PFNGLISQUERYARBPROC +epoxy_glIsQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29630 /* "glIsQueryARB" */, + 29620 /* "glIsQuery" */, + 29620 /* "glIsQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 29630 /* "glIsQueryARB" */, + providers, entrypoints); +} + +static PFNGLISQUERYEXTPROC +epoxy_glIsQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29643 /* "glIsQueryEXT" */, + 29643 /* "glIsQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29643 /* "glIsQueryEXT" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFERPROC +epoxy_glIsRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29673 /* "glIsRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29656 /* "glIsRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFEREXTPROC +epoxy_glIsRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29673 /* "glIsRenderbufferEXT" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29673 /* "glIsRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFEROESPROC +epoxy_glIsRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 29693 /* glIsRenderbufferOES */); +} + +static PFNGLISSAMPLERPROC +epoxy_glIsSampler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29713 /* "glIsSampler" */, + 29713 /* "glIsSampler" */, + 29713 /* "glIsSampler" */, + }; + return gl_provider_resolver(entrypoint_strings + 29713 /* "glIsSampler" */, + providers, entrypoints); +} + +static PFNGLISSHADERPROC +epoxy_glIsShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29725 /* "glIsShader" */, + 29725 /* "glIsShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 29725 /* "glIsShader" */, + providers, entrypoints); +} + +static PFNGLISSTATENVPROC +epoxy_glIsStateNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 29736 /* glIsStateNV */); +} + +static PFNGLISSYNCPROC +epoxy_glIsSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29757 /* "glIsSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 29748 /* "glIsSync" */, + providers, entrypoints); +} + +static PFNGLISSYNCAPPLEPROC +epoxy_glIsSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29757 /* "glIsSyncAPPLE" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 29757 /* "glIsSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLISTEXTUREPROC +epoxy_glIsTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29771 /* "glIsTexture" */, + 29771 /* "glIsTexture" */, + 29771 /* "glIsTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 29771 /* "glIsTexture" */, + providers, entrypoints); +} + +static PFNGLISTEXTUREEXTPROC +epoxy_glIsTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 29783 /* glIsTextureEXT */); +} + +static PFNGLISTEXTUREHANDLERESIDENTARBPROC +epoxy_glIsTextureHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 29798 /* glIsTextureHandleResidentARB */); +} + +static PFNGLISTEXTUREHANDLERESIDENTNVPROC +epoxy_glIsTextureHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 29827 /* glIsTextureHandleResidentNV */); +} + +static PFNGLISTRANSFORMFEEDBACKPROC +epoxy_glIsTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29877 /* "glIsTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29855 /* "glIsTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLISTRANSFORMFEEDBACKNVPROC +epoxy_glIsTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29877 /* "glIsTransformFeedbackNV" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 29877 /* "glIsTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLISVARIANTENABLEDEXTPROC +epoxy_glIsVariantEnabledEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 29901 /* glIsVariantEnabledEXT */); +} + +static PFNGLISVERTEXARRAYPROC +epoxy_glIsVertexArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29939 /* "glIsVertexArrayAPPLE" */, + 29960 /* "glIsVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29923 /* "glIsVertexArray" */, + providers, entrypoints); +} + +static PFNGLISVERTEXARRAYAPPLEPROC +epoxy_glIsVertexArrayAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29939 /* "glIsVertexArrayAPPLE" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29960 /* "glIsVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29939 /* "glIsVertexArrayAPPLE" */, + providers, entrypoints); +} + +static PFNGLISVERTEXARRAYOESPROC +epoxy_glIsVertexArrayOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29960 /* "glIsVertexArrayOES" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29939 /* "glIsVertexArrayAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 29960 /* "glIsVertexArrayOES" */, + providers, entrypoints); +} + +static PFNGLISVERTEXATTRIBENABLEDAPPLEPROC +epoxy_glIsVertexAttribEnabledAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 29979 /* glIsVertexAttribEnabledAPPLE */); +} + +static PFNGLLABELOBJECTEXTPROC +epoxy_glLabelObjectEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_label, 30008 /* glLabelObjectEXT */); +} + +static PFNGLLIGHTENVISGIXPROC +epoxy_glLightEnviSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 30025 /* glLightEnviSGIX */); +} + +static PFNGLLIGHTMODELFPROC +epoxy_glLightModelf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30041 /* "glLightModelf" */, + 30041 /* "glLightModelf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30041 /* "glLightModelf" */, + providers, entrypoints); +} + +static PFNGLLIGHTMODELFVPROC +epoxy_glLightModelfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30055 /* "glLightModelfv" */, + 30055 /* "glLightModelfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 30055 /* "glLightModelfv" */, + providers, entrypoints); +} + +static PFNGLLIGHTMODELIPROC +epoxy_glLightModeli_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30070 /* glLightModeli */); +} + +static PFNGLLIGHTMODELIVPROC +epoxy_glLightModeliv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30084 /* glLightModeliv */); +} + +static PFNGLLIGHTMODELXPROC +epoxy_glLightModelx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30099 /* glLightModelx */); +} + +static PFNGLLIGHTMODELXOESPROC +epoxy_glLightModelxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30113 /* glLightModelxOES */); +} + +static PFNGLLIGHTMODELXVPROC +epoxy_glLightModelxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30130 /* glLightModelxv */); +} + +static PFNGLLIGHTMODELXVOESPROC +epoxy_glLightModelxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30145 /* glLightModelxvOES */); +} + +static PFNGLLIGHTFPROC +epoxy_glLightf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30163 /* "glLightf" */, + 30163 /* "glLightf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30163 /* "glLightf" */, + providers, entrypoints); +} + +static PFNGLLIGHTFVPROC +epoxy_glLightfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30172 /* "glLightfv" */, + 30172 /* "glLightfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 30172 /* "glLightfv" */, + providers, entrypoints); +} + +static PFNGLLIGHTIPROC +epoxy_glLighti_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30182 /* glLighti */); +} + +static PFNGLLIGHTIVPROC +epoxy_glLightiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30191 /* glLightiv */); +} + +static PFNGLLIGHTXPROC +epoxy_glLightx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30201 /* glLightx */); +} + +static PFNGLLIGHTXOESPROC +epoxy_glLightxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30210 /* glLightxOES */); +} + +static PFNGLLIGHTXVPROC +epoxy_glLightxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30222 /* glLightxv */); +} + +static PFNGLLIGHTXVOESPROC +epoxy_glLightxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30232 /* glLightxvOES */); +} + +static PFNGLLINESTIPPLEPROC +epoxy_glLineStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30245 /* glLineStipple */); +} + +static PFNGLLINEWIDTHPROC +epoxy_glLineWidth_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30259 /* "glLineWidth" */, + 30259 /* "glLineWidth" */, + 30259 /* "glLineWidth" */, + }; + return gl_provider_resolver(entrypoint_strings + 30259 /* "glLineWidth" */, + providers, entrypoints); +} + +static PFNGLLINEWIDTHXPROC +epoxy_glLineWidthx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30271 /* glLineWidthx */); +} + +static PFNGLLINEWIDTHXOESPROC +epoxy_glLineWidthxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30284 /* glLineWidthxOES */); +} + +static PFNGLLINKPROGRAMPROC +epoxy_glLinkProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30300 /* "glLinkProgram" */, + 30300 /* "glLinkProgram" */, + 30314 /* "glLinkProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30300 /* "glLinkProgram" */, + providers, entrypoints); +} + +static PFNGLLINKPROGRAMARBPROC +epoxy_glLinkProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30314 /* "glLinkProgramARB" */, + 30300 /* "glLinkProgram" */, + 30300 /* "glLinkProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 30314 /* "glLinkProgramARB" */, + providers, entrypoints); +} + +static PFNGLLISTBASEPROC +epoxy_glListBase_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30331 /* glListBase */); +} + +static PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC +epoxy_glListDrawCommandsStatesClientNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 30342 /* glListDrawCommandsStatesClientNV */); +} + +static PFNGLLISTPARAMETERFSGIXPROC +epoxy_glListParameterfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30375 /* glListParameterfSGIX */); +} + +static PFNGLLISTPARAMETERFVSGIXPROC +epoxy_glListParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30396 /* glListParameterfvSGIX */); +} + +static PFNGLLISTPARAMETERISGIXPROC +epoxy_glListParameteriSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30418 /* glListParameteriSGIX */); +} + +static PFNGLLISTPARAMETERIVSGIXPROC +epoxy_glListParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30439 /* glListParameterivSGIX */); +} + +static PFNGLLOADIDENTITYPROC +epoxy_glLoadIdentity_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30461 /* "glLoadIdentity" */, + 30461 /* "glLoadIdentity" */, + }; + return gl_provider_resolver(entrypoint_strings + 30461 /* "glLoadIdentity" */, + providers, entrypoints); +} + +static PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC +epoxy_glLoadIdentityDeformationMapSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 30476 /* glLoadIdentityDeformationMapSGIX */); +} + +static PFNGLLOADMATRIXDPROC +epoxy_glLoadMatrixd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30509 /* glLoadMatrixd */); +} + +static PFNGLLOADMATRIXFPROC +epoxy_glLoadMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30523 /* "glLoadMatrixf" */, + 30523 /* "glLoadMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30523 /* "glLoadMatrixf" */, + providers, entrypoints); +} + +static PFNGLLOADMATRIXXPROC +epoxy_glLoadMatrixx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30537 /* glLoadMatrixx */); +} + +static PFNGLLOADMATRIXXOESPROC +epoxy_glLoadMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30551 /* glLoadMatrixxOES */); +} + +static PFNGLLOADNAMEPROC +epoxy_glLoadName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30568 /* glLoadName */); +} + +static PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC +epoxy_glLoadPaletteFromModelViewMatrixOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 30579 /* glLoadPaletteFromModelViewMatrixOES */); +} + +static PFNGLLOADPROGRAMNVPROC +epoxy_glLoadProgramNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 30615 /* glLoadProgramNV */); +} + +static PFNGLLOADTRANSPOSEMATRIXDPROC +epoxy_glLoadTransposeMatrixd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30631 /* "glLoadTransposeMatrixd" */, + 30654 /* "glLoadTransposeMatrixdARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30631 /* "glLoadTransposeMatrixd" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXDARBPROC +epoxy_glLoadTransposeMatrixdARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30654 /* "glLoadTransposeMatrixdARB" */, + 30631 /* "glLoadTransposeMatrixd" */, + }; + return gl_provider_resolver(entrypoint_strings + 30654 /* "glLoadTransposeMatrixdARB" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXFPROC +epoxy_glLoadTransposeMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30680 /* "glLoadTransposeMatrixf" */, + 30703 /* "glLoadTransposeMatrixfARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30680 /* "glLoadTransposeMatrixf" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXFARBPROC +epoxy_glLoadTransposeMatrixfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30703 /* "glLoadTransposeMatrixfARB" */, + 30680 /* "glLoadTransposeMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30703 /* "glLoadTransposeMatrixfARB" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXXOESPROC +epoxy_glLoadTransposeMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30729 /* glLoadTransposeMatrixxOES */); +} + +static PFNGLLOCKARRAYSEXTPROC +epoxy_glLockArraysEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_compiled_vertex_array, 30755 /* glLockArraysEXT */); +} + +static PFNGLLOGICOPPROC +epoxy_glLogicOp_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30771 /* "glLogicOp" */, + 30771 /* "glLogicOp" */, + }; + return gl_provider_resolver(entrypoint_strings + 30771 /* "glLogicOp" */, + providers, entrypoints); +} + +static PFNGLMAKEBUFFERNONRESIDENTNVPROC +epoxy_glMakeBufferNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30781 /* glMakeBufferNonResidentNV */); +} + +static PFNGLMAKEBUFFERRESIDENTNVPROC +epoxy_glMakeBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30807 /* glMakeBufferResidentNV */); +} + +static PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC +epoxy_glMakeImageHandleNonResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 30830 /* glMakeImageHandleNonResidentARB */); +} + +static PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC +epoxy_glMakeImageHandleNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 30862 /* glMakeImageHandleNonResidentNV */); +} + +static PFNGLMAKEIMAGEHANDLERESIDENTARBPROC +epoxy_glMakeImageHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 30893 /* glMakeImageHandleResidentARB */); +} + +static PFNGLMAKEIMAGEHANDLERESIDENTNVPROC +epoxy_glMakeImageHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 30922 /* glMakeImageHandleResidentNV */); +} + +static PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC +epoxy_glMakeNamedBufferNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30950 /* glMakeNamedBufferNonResidentNV */); +} + +static PFNGLMAKENAMEDBUFFERRESIDENTNVPROC +epoxy_glMakeNamedBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30981 /* glMakeNamedBufferResidentNV */); +} + +static PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC +epoxy_glMakeTextureHandleNonResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 31009 /* glMakeTextureHandleNonResidentARB */); +} + +static PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC +epoxy_glMakeTextureHandleNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 31043 /* glMakeTextureHandleNonResidentNV */); +} + +static PFNGLMAKETEXTUREHANDLERESIDENTARBPROC +epoxy_glMakeTextureHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 31076 /* glMakeTextureHandleResidentARB */); +} + +static PFNGLMAKETEXTUREHANDLERESIDENTNVPROC +epoxy_glMakeTextureHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 31107 /* glMakeTextureHandleResidentNV */); +} + +static PFNGLMAP1DPROC +epoxy_glMap1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31137 /* glMap1d */); +} + +static PFNGLMAP1FPROC +epoxy_glMap1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31145 /* glMap1f */); +} + +static PFNGLMAP1XOESPROC +epoxy_glMap1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31153 /* glMap1xOES */); +} + +static PFNGLMAP2DPROC +epoxy_glMap2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31164 /* glMap2d */); +} + +static PFNGLMAP2FPROC +epoxy_glMap2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31172 /* glMap2f */); +} + +static PFNGLMAP2XOESPROC +epoxy_glMap2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31180 /* glMap2xOES */); +} + +static PFNGLMAPBUFFERPROC +epoxy_glMapBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31191 /* "glMapBuffer" */, + 31203 /* "glMapBufferARB" */, + 31218 /* "glMapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 31191 /* "glMapBuffer" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERARBPROC +epoxy_glMapBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31203 /* "glMapBufferARB" */, + 31191 /* "glMapBuffer" */, + 31218 /* "glMapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 31203 /* "glMapBufferARB" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFEROESPROC +epoxy_glMapBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31218 /* "glMapBufferOES" */, + 31191 /* "glMapBuffer" */, + 31203 /* "glMapBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 31218 /* "glMapBufferOES" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERRANGEPROC +epoxy_glMapBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31250 /* "glMapBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 31233 /* "glMapBufferRange" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERRANGEEXTPROC +epoxy_glMapBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_map_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31250 /* "glMapBufferRangeEXT" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 31250 /* "glMapBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLMAPCONTROLPOINTSNVPROC +epoxy_glMapControlPointsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31270 /* glMapControlPointsNV */); +} + +static PFNGLMAPGRID1DPROC +epoxy_glMapGrid1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31291 /* glMapGrid1d */); +} + +static PFNGLMAPGRID1FPROC +epoxy_glMapGrid1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31303 /* glMapGrid1f */); +} + +static PFNGLMAPGRID1XOESPROC +epoxy_glMapGrid1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31315 /* glMapGrid1xOES */); +} + +static PFNGLMAPGRID2DPROC +epoxy_glMapGrid2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31330 /* glMapGrid2d */); +} + +static PFNGLMAPGRID2FPROC +epoxy_glMapGrid2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31342 /* glMapGrid2f */); +} + +static PFNGLMAPGRID2XOESPROC +epoxy_glMapGrid2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31354 /* glMapGrid2xOES */); +} + +static PFNGLMAPNAMEDBUFFERPROC +epoxy_glMapNamedBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31369 /* "glMapNamedBuffer" */, + 31369 /* "glMapNamedBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 31369 /* "glMapNamedBuffer" */, + providers, entrypoints); +} + +static PFNGLMAPNAMEDBUFFEREXTPROC +epoxy_glMapNamedBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31386 /* glMapNamedBufferEXT */); +} + +static PFNGLMAPNAMEDBUFFERRANGEPROC +epoxy_glMapNamedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31406 /* "glMapNamedBufferRange" */, + 31406 /* "glMapNamedBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 31406 /* "glMapNamedBufferRange" */, + providers, entrypoints); +} + +static PFNGLMAPNAMEDBUFFERRANGEEXTPROC +epoxy_glMapNamedBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31428 /* glMapNamedBufferRangeEXT */); +} + +static PFNGLMAPOBJECTBUFFERATIPROC +epoxy_glMapObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_map_object_buffer, 31453 /* glMapObjectBufferATI */); +} + +static PFNGLMAPPARAMETERFVNVPROC +epoxy_glMapParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31474 /* glMapParameterfvNV */); +} + +static PFNGLMAPPARAMETERIVNVPROC +epoxy_glMapParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31493 /* glMapParameterivNV */); +} + +static PFNGLMAPTEXTURE2DINTELPROC +epoxy_glMapTexture2DINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 31512 /* glMapTexture2DINTEL */); +} + +static PFNGLMAPVERTEXATTRIB1DAPPLEPROC +epoxy_glMapVertexAttrib1dAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31532 /* glMapVertexAttrib1dAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB1FAPPLEPROC +epoxy_glMapVertexAttrib1fAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31557 /* glMapVertexAttrib1fAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB2DAPPLEPROC +epoxy_glMapVertexAttrib2dAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31582 /* glMapVertexAttrib2dAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB2FAPPLEPROC +epoxy_glMapVertexAttrib2fAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31607 /* glMapVertexAttrib2fAPPLE */); +} + +static PFNGLMATERIALFPROC +epoxy_glMaterialf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31632 /* "glMaterialf" */, + 31632 /* "glMaterialf" */, + }; + return gl_provider_resolver(entrypoint_strings + 31632 /* "glMaterialf" */, + providers, entrypoints); +} + +static PFNGLMATERIALFVPROC +epoxy_glMaterialfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31644 /* "glMaterialfv" */, + 31644 /* "glMaterialfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 31644 /* "glMaterialfv" */, + providers, entrypoints); +} + +static PFNGLMATERIALIPROC +epoxy_glMateriali_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31657 /* glMateriali */); +} + +static PFNGLMATERIALIVPROC +epoxy_glMaterialiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31669 /* glMaterialiv */); +} + +static PFNGLMATERIALXPROC +epoxy_glMaterialx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 31682 /* glMaterialx */); +} + +static PFNGLMATERIALXOESPROC +epoxy_glMaterialxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31694 /* glMaterialxOES */); +} + +static PFNGLMATERIALXVPROC +epoxy_glMaterialxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 31709 /* glMaterialxv */); +} + +static PFNGLMATERIALXVOESPROC +epoxy_glMaterialxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31722 /* glMaterialxvOES */); +} + +static PFNGLMATRIXFRUSTUMEXTPROC +epoxy_glMatrixFrustumEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31738 /* glMatrixFrustumEXT */); +} + +static PFNGLMATRIXINDEXPOINTERARBPROC +epoxy_glMatrixIndexPointerARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31757 /* glMatrixIndexPointerARB */); +} + +static PFNGLMATRIXINDEXPOINTEROESPROC +epoxy_glMatrixIndexPointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 31781 /* glMatrixIndexPointerOES */); +} + +static PFNGLMATRIXINDEXUBVARBPROC +epoxy_glMatrixIndexubvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31805 /* glMatrixIndexubvARB */); +} + +static PFNGLMATRIXINDEXUIVARBPROC +epoxy_glMatrixIndexuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31825 /* glMatrixIndexuivARB */); +} + +static PFNGLMATRIXINDEXUSVARBPROC +epoxy_glMatrixIndexusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31845 /* glMatrixIndexusvARB */); +} + +static PFNGLMATRIXLOAD3X2FNVPROC +epoxy_glMatrixLoad3x2fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31865 /* glMatrixLoad3x2fNV */); +} + +static PFNGLMATRIXLOAD3X3FNVPROC +epoxy_glMatrixLoad3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31884 /* glMatrixLoad3x3fNV */); +} + +static PFNGLMATRIXLOADIDENTITYEXTPROC +epoxy_glMatrixLoadIdentityEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31903 /* glMatrixLoadIdentityEXT */); +} + +static PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC +epoxy_glMatrixLoadTranspose3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31927 /* glMatrixLoadTranspose3x3fNV */); +} + +static PFNGLMATRIXLOADTRANSPOSEDEXTPROC +epoxy_glMatrixLoadTransposedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31955 /* glMatrixLoadTransposedEXT */); +} + +static PFNGLMATRIXLOADTRANSPOSEFEXTPROC +epoxy_glMatrixLoadTransposefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31981 /* glMatrixLoadTransposefEXT */); +} + +static PFNGLMATRIXLOADDEXTPROC +epoxy_glMatrixLoaddEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32007 /* glMatrixLoaddEXT */); +} + +static PFNGLMATRIXLOADFEXTPROC +epoxy_glMatrixLoadfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32024 /* glMatrixLoadfEXT */); +} + +static PFNGLMATRIXMODEPROC +epoxy_glMatrixMode_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32041 /* "glMatrixMode" */, + 32041 /* "glMatrixMode" */, + }; + return gl_provider_resolver(entrypoint_strings + 32041 /* "glMatrixMode" */, + providers, entrypoints); +} + +static PFNGLMATRIXMULT3X2FNVPROC +epoxy_glMatrixMult3x2fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32054 /* glMatrixMult3x2fNV */); +} + +static PFNGLMATRIXMULT3X3FNVPROC +epoxy_glMatrixMult3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32073 /* glMatrixMult3x3fNV */); +} + +static PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC +epoxy_glMatrixMultTranspose3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32092 /* glMatrixMultTranspose3x3fNV */); +} + +static PFNGLMATRIXMULTTRANSPOSEDEXTPROC +epoxy_glMatrixMultTransposedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32120 /* glMatrixMultTransposedEXT */); +} + +static PFNGLMATRIXMULTTRANSPOSEFEXTPROC +epoxy_glMatrixMultTransposefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32146 /* glMatrixMultTransposefEXT */); +} + +static PFNGLMATRIXMULTDEXTPROC +epoxy_glMatrixMultdEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32172 /* glMatrixMultdEXT */); +} + +static PFNGLMATRIXMULTFEXTPROC +epoxy_glMatrixMultfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32189 /* glMatrixMultfEXT */); +} + +static PFNGLMATRIXORTHOEXTPROC +epoxy_glMatrixOrthoEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32206 /* glMatrixOrthoEXT */); +} + +static PFNGLMATRIXPOPEXTPROC +epoxy_glMatrixPopEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32223 /* glMatrixPopEXT */); +} + +static PFNGLMATRIXPUSHEXTPROC +epoxy_glMatrixPushEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32238 /* glMatrixPushEXT */); +} + +static PFNGLMATRIXROTATEDEXTPROC +epoxy_glMatrixRotatedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32254 /* glMatrixRotatedEXT */); +} + +static PFNGLMATRIXROTATEFEXTPROC +epoxy_glMatrixRotatefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32273 /* glMatrixRotatefEXT */); +} + +static PFNGLMATRIXSCALEDEXTPROC +epoxy_glMatrixScaledEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32292 /* glMatrixScaledEXT */); +} + +static PFNGLMATRIXSCALEFEXTPROC +epoxy_glMatrixScalefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32310 /* glMatrixScalefEXT */); +} + +static PFNGLMATRIXTRANSLATEDEXTPROC +epoxy_glMatrixTranslatedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32328 /* glMatrixTranslatedEXT */); +} + +static PFNGLMATRIXTRANSLATEFEXTPROC +epoxy_glMatrixTranslatefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32350 /* glMatrixTranslatefEXT */); +} + +static PFNGLMAXSHADERCOMPILERTHREADSARBPROC +epoxy_glMaxShaderCompilerThreadsARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_parallel_shader_compile, 32372 /* glMaxShaderCompilerThreadsARB */); +} + +static PFNGLMEMORYBARRIERPROC +epoxy_glMemoryBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + GL_extension_GL_EXT_shader_image_load_store, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32442 /* "glMemoryBarrierEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32402 /* "glMemoryBarrier" */, + providers, entrypoints); +} + +static PFNGLMEMORYBARRIERBYREGIONPROC +epoxy_glMemoryBarrierByRegion_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_ES3_1_compatibility, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32418 /* "glMemoryBarrierByRegion" */, + 32418 /* "glMemoryBarrierByRegion" */, + 32418 /* "glMemoryBarrierByRegion" */, + }; + return gl_provider_resolver(entrypoint_strings + 32418 /* "glMemoryBarrierByRegion" */, + providers, entrypoints); +} + +static PFNGLMEMORYBARRIEREXTPROC +epoxy_glMemoryBarrierEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_shader_image_load_store, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32442 /* "glMemoryBarrierEXT" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + }; + return gl_provider_resolver(entrypoint_strings + 32442 /* "glMemoryBarrierEXT" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGPROC +epoxy_glMinSampleShading_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_sample_shading, + GL_extension_GL_OES_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32480 /* "glMinSampleShadingARB" */, + 32502 /* "glMinSampleShadingOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 32461 /* "glMinSampleShading" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGARBPROC +epoxy_glMinSampleShadingARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_sample_shading, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32480 /* "glMinSampleShadingARB" */, + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32502 /* "glMinSampleShadingOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 32480 /* "glMinSampleShadingARB" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGOESPROC +epoxy_glMinSampleShadingOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_sample_shading, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32502 /* "glMinSampleShadingOES" */, + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32480 /* "glMinSampleShadingARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32502 /* "glMinSampleShadingOES" */, + providers, entrypoints); +} + +static PFNGLMINMAXPROC +epoxy_glMinmax_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32524 /* "glMinmax" */, + 32533 /* "glMinmaxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32524 /* "glMinmax" */, + providers, entrypoints); +} + +static PFNGLMINMAXEXTPROC +epoxy_glMinmaxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32533 /* "glMinmaxEXT" */, + 32524 /* "glMinmax" */, + }; + return gl_provider_resolver(entrypoint_strings + 32533 /* "glMinmaxEXT" */, + providers, entrypoints); +} + +static PFNGLMULTMATRIXDPROC +epoxy_glMultMatrixd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 32545 /* glMultMatrixd */); +} + +static PFNGLMULTMATRIXFPROC +epoxy_glMultMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32559 /* "glMultMatrixf" */, + 32559 /* "glMultMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 32559 /* "glMultMatrixf" */, + providers, entrypoints); +} + +static PFNGLMULTMATRIXXPROC +epoxy_glMultMatrixx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 32573 /* glMultMatrixx */); +} + +static PFNGLMULTMATRIXXOESPROC +epoxy_glMultMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 32587 /* glMultMatrixxOES */); +} + +static PFNGLMULTTRANSPOSEMATRIXDPROC +epoxy_glMultTransposeMatrixd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32604 /* "glMultTransposeMatrixd" */, + 32627 /* "glMultTransposeMatrixdARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32604 /* "glMultTransposeMatrixd" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXDARBPROC +epoxy_glMultTransposeMatrixdARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32627 /* "glMultTransposeMatrixdARB" */, + 32604 /* "glMultTransposeMatrixd" */, + }; + return gl_provider_resolver(entrypoint_strings + 32627 /* "glMultTransposeMatrixdARB" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXFPROC +epoxy_glMultTransposeMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32653 /* "glMultTransposeMatrixf" */, + 32676 /* "glMultTransposeMatrixfARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32653 /* "glMultTransposeMatrixf" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXFARBPROC +epoxy_glMultTransposeMatrixfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32676 /* "glMultTransposeMatrixfARB" */, + 32653 /* "glMultTransposeMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 32676 /* "glMultTransposeMatrixfARB" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXXOESPROC +epoxy_glMultTransposeMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 32702 /* glMultTransposeMatrixxOES */); +} + +static PFNGLMULTIDRAWARRAYSPROC +epoxy_glMultiDrawArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_multi_draw_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32728 /* "glMultiDrawArrays" */, + 32746 /* "glMultiDrawArraysEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32728 /* "glMultiDrawArrays" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSEXTPROC +epoxy_glMultiDrawArraysEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_arrays, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32746 /* "glMultiDrawArraysEXT" */, + 32728 /* "glMultiDrawArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 32746 /* "glMultiDrawArraysEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTPROC +epoxy_glMultiDrawArraysIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32793 /* "glMultiDrawArraysIndirectAMD" */, + 32933 /* "glMultiDrawArraysIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32767 /* "glMultiDrawArraysIndirect" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC +epoxy_glMultiDrawArraysIndirectAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32793 /* "glMultiDrawArraysIndirectAMD" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32933 /* "glMultiDrawArraysIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32793 /* "glMultiDrawArraysIndirectAMD" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC +epoxy_glMultiDrawArraysIndirectBindlessCountNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect_count, 32822 /* glMultiDrawArraysIndirectBindlessCountNV */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC +epoxy_glMultiDrawArraysIndirectBindlessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect, 32863 /* glMultiDrawArraysIndirectBindlessNV */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC +epoxy_glMultiDrawArraysIndirectCountARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_indirect_parameters, 32899 /* glMultiDrawArraysIndirectCountARB */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC +epoxy_glMultiDrawArraysIndirectEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32933 /* "glMultiDrawArraysIndirectEXT" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32793 /* "glMultiDrawArraysIndirectAMD" */, + }; + return gl_provider_resolver(entrypoint_strings + 32933 /* "glMultiDrawArraysIndirectEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC +epoxy_glMultiDrawElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 32962 /* glMultiDrawElementArrayAPPLE */); +} + +static PFNGLMULTIDRAWELEMENTSPROC +epoxy_glMultiDrawElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_multi_draw_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32991 /* "glMultiDrawElements" */, + 33107 /* "glMultiDrawElementsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32991 /* "glMultiDrawElements" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC +epoxy_glMultiDrawElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 33011 /* "glMultiDrawElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC +epoxy_glMultiDrawElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC +epoxy_glMultiDrawElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSEXTPROC +epoxy_glMultiDrawElementsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_arrays, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33107 /* "glMultiDrawElementsEXT" */, + 32991 /* "glMultiDrawElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 33107 /* "glMultiDrawElementsEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTPROC +epoxy_glMultiDrawElementsIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33158 /* "glMultiDrawElementsIndirectAMD" */, + 33306 /* "glMultiDrawElementsIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33130 /* "glMultiDrawElementsIndirect" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC +epoxy_glMultiDrawElementsIndirectAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33158 /* "glMultiDrawElementsIndirectAMD" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33306 /* "glMultiDrawElementsIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33158 /* "glMultiDrawElementsIndirectAMD" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC +epoxy_glMultiDrawElementsIndirectBindlessCountNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect_count, 33189 /* glMultiDrawElementsIndirectBindlessCountNV */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC +epoxy_glMultiDrawElementsIndirectBindlessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect, 33232 /* glMultiDrawElementsIndirectBindlessNV */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC +epoxy_glMultiDrawElementsIndirectCountARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_indirect_parameters, 33270 /* glMultiDrawElementsIndirectCountARB */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC +epoxy_glMultiDrawElementsIndirectEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33306 /* "glMultiDrawElementsIndirectEXT" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33158 /* "glMultiDrawElementsIndirectAMD" */, + }; + return gl_provider_resolver(entrypoint_strings + 33306 /* "glMultiDrawElementsIndirectEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC +epoxy_glMultiDrawRangeElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 33337 /* glMultiDrawRangeElementArrayAPPLE */); +} + +static PFNGLMULTIMODEDRAWARRAYSIBMPROC +epoxy_glMultiModeDrawArraysIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_multimode_draw_arrays, 33371 /* glMultiModeDrawArraysIBM */); +} + +static PFNGLMULTIMODEDRAWELEMENTSIBMPROC +epoxy_glMultiModeDrawElementsIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_multimode_draw_arrays, 33396 /* glMultiModeDrawElementsIBM */); +} + +static PFNGLMULTITEXBUFFEREXTPROC +epoxy_glMultiTexBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 33423 /* glMultiTexBufferEXT */); +} + +static PFNGLMULTITEXCOORD1BOESPROC +epoxy_glMultiTexCoord1bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33443 /* glMultiTexCoord1bOES */); +} + +static PFNGLMULTITEXCOORD1BVOESPROC +epoxy_glMultiTexCoord1bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33464 /* glMultiTexCoord1bvOES */); +} + +static PFNGLMULTITEXCOORD1DPROC +epoxy_glMultiTexCoord1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33486 /* "glMultiTexCoord1d" */, + 33504 /* "glMultiTexCoord1dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33486 /* "glMultiTexCoord1d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DARBPROC +epoxy_glMultiTexCoord1dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33504 /* "glMultiTexCoord1dARB" */, + 33486 /* "glMultiTexCoord1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 33504 /* "glMultiTexCoord1dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DVPROC +epoxy_glMultiTexCoord1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33525 /* "glMultiTexCoord1dv" */, + 33544 /* "glMultiTexCoord1dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33525 /* "glMultiTexCoord1dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DVARBPROC +epoxy_glMultiTexCoord1dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33544 /* "glMultiTexCoord1dvARB" */, + 33525 /* "glMultiTexCoord1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33544 /* "glMultiTexCoord1dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FPROC +epoxy_glMultiTexCoord1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33566 /* "glMultiTexCoord1f" */, + 33584 /* "glMultiTexCoord1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33566 /* "glMultiTexCoord1f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FARBPROC +epoxy_glMultiTexCoord1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33584 /* "glMultiTexCoord1fARB" */, + 33566 /* "glMultiTexCoord1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 33584 /* "glMultiTexCoord1fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FVPROC +epoxy_glMultiTexCoord1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33605 /* "glMultiTexCoord1fv" */, + 33624 /* "glMultiTexCoord1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33605 /* "glMultiTexCoord1fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FVARBPROC +epoxy_glMultiTexCoord1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33624 /* "glMultiTexCoord1fvARB" */, + 33605 /* "glMultiTexCoord1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33624 /* "glMultiTexCoord1fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1HNVPROC +epoxy_glMultiTexCoord1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 33646 /* glMultiTexCoord1hNV */); +} + +static PFNGLMULTITEXCOORD1HVNVPROC +epoxy_glMultiTexCoord1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 33666 /* glMultiTexCoord1hvNV */); +} + +static PFNGLMULTITEXCOORD1IPROC +epoxy_glMultiTexCoord1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33687 /* "glMultiTexCoord1i" */, + 33705 /* "glMultiTexCoord1iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33687 /* "glMultiTexCoord1i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IARBPROC +epoxy_glMultiTexCoord1iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33705 /* "glMultiTexCoord1iARB" */, + 33687 /* "glMultiTexCoord1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 33705 /* "glMultiTexCoord1iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IVPROC +epoxy_glMultiTexCoord1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33726 /* "glMultiTexCoord1iv" */, + 33745 /* "glMultiTexCoord1ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33726 /* "glMultiTexCoord1iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IVARBPROC +epoxy_glMultiTexCoord1ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33745 /* "glMultiTexCoord1ivARB" */, + 33726 /* "glMultiTexCoord1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33745 /* "glMultiTexCoord1ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SPROC +epoxy_glMultiTexCoord1s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33767 /* "glMultiTexCoord1s" */, + 33785 /* "glMultiTexCoord1sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33767 /* "glMultiTexCoord1s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SARBPROC +epoxy_glMultiTexCoord1sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33785 /* "glMultiTexCoord1sARB" */, + 33767 /* "glMultiTexCoord1s" */, + }; + return gl_provider_resolver(entrypoint_strings + 33785 /* "glMultiTexCoord1sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SVPROC +epoxy_glMultiTexCoord1sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33806 /* "glMultiTexCoord1sv" */, + 33825 /* "glMultiTexCoord1svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33806 /* "glMultiTexCoord1sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SVARBPROC +epoxy_glMultiTexCoord1svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33825 /* "glMultiTexCoord1svARB" */, + 33806 /* "glMultiTexCoord1sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33825 /* "glMultiTexCoord1svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1XOESPROC +epoxy_glMultiTexCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 33847 /* glMultiTexCoord1xOES */); +} + +static PFNGLMULTITEXCOORD1XVOESPROC +epoxy_glMultiTexCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 33868 /* glMultiTexCoord1xvOES */); +} + +static PFNGLMULTITEXCOORD2BOESPROC +epoxy_glMultiTexCoord2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33890 /* glMultiTexCoord2bOES */); +} + +static PFNGLMULTITEXCOORD2BVOESPROC +epoxy_glMultiTexCoord2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33911 /* glMultiTexCoord2bvOES */); +} + +static PFNGLMULTITEXCOORD2DPROC +epoxy_glMultiTexCoord2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33933 /* "glMultiTexCoord2d" */, + 33951 /* "glMultiTexCoord2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33933 /* "glMultiTexCoord2d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DARBPROC +epoxy_glMultiTexCoord2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33951 /* "glMultiTexCoord2dARB" */, + 33933 /* "glMultiTexCoord2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 33951 /* "glMultiTexCoord2dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DVPROC +epoxy_glMultiTexCoord2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33972 /* "glMultiTexCoord2dv" */, + 33991 /* "glMultiTexCoord2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33972 /* "glMultiTexCoord2dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DVARBPROC +epoxy_glMultiTexCoord2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33991 /* "glMultiTexCoord2dvARB" */, + 33972 /* "glMultiTexCoord2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33991 /* "glMultiTexCoord2dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FPROC +epoxy_glMultiTexCoord2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34013 /* "glMultiTexCoord2f" */, + 34031 /* "glMultiTexCoord2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34013 /* "glMultiTexCoord2f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FARBPROC +epoxy_glMultiTexCoord2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34031 /* "glMultiTexCoord2fARB" */, + 34013 /* "glMultiTexCoord2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34031 /* "glMultiTexCoord2fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FVPROC +epoxy_glMultiTexCoord2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34052 /* "glMultiTexCoord2fv" */, + 34071 /* "glMultiTexCoord2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34052 /* "glMultiTexCoord2fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FVARBPROC +epoxy_glMultiTexCoord2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34071 /* "glMultiTexCoord2fvARB" */, + 34052 /* "glMultiTexCoord2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34071 /* "glMultiTexCoord2fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2HNVPROC +epoxy_glMultiTexCoord2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34093 /* glMultiTexCoord2hNV */); +} + +static PFNGLMULTITEXCOORD2HVNVPROC +epoxy_glMultiTexCoord2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34113 /* glMultiTexCoord2hvNV */); +} + +static PFNGLMULTITEXCOORD2IPROC +epoxy_glMultiTexCoord2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34134 /* "glMultiTexCoord2i" */, + 34152 /* "glMultiTexCoord2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34134 /* "glMultiTexCoord2i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IARBPROC +epoxy_glMultiTexCoord2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34152 /* "glMultiTexCoord2iARB" */, + 34134 /* "glMultiTexCoord2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 34152 /* "glMultiTexCoord2iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IVPROC +epoxy_glMultiTexCoord2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34173 /* "glMultiTexCoord2iv" */, + 34192 /* "glMultiTexCoord2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34173 /* "glMultiTexCoord2iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IVARBPROC +epoxy_glMultiTexCoord2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34192 /* "glMultiTexCoord2ivARB" */, + 34173 /* "glMultiTexCoord2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34192 /* "glMultiTexCoord2ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SPROC +epoxy_glMultiTexCoord2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34214 /* "glMultiTexCoord2s" */, + 34232 /* "glMultiTexCoord2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34214 /* "glMultiTexCoord2s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SARBPROC +epoxy_glMultiTexCoord2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34232 /* "glMultiTexCoord2sARB" */, + 34214 /* "glMultiTexCoord2s" */, + }; + return gl_provider_resolver(entrypoint_strings + 34232 /* "glMultiTexCoord2sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SVPROC +epoxy_glMultiTexCoord2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34253 /* "glMultiTexCoord2sv" */, + 34272 /* "glMultiTexCoord2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34253 /* "glMultiTexCoord2sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SVARBPROC +epoxy_glMultiTexCoord2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34272 /* "glMultiTexCoord2svARB" */, + 34253 /* "glMultiTexCoord2sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34272 /* "glMultiTexCoord2svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2XOESPROC +epoxy_glMultiTexCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34294 /* glMultiTexCoord2xOES */); +} + +static PFNGLMULTITEXCOORD2XVOESPROC +epoxy_glMultiTexCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34315 /* glMultiTexCoord2xvOES */); +} + +static PFNGLMULTITEXCOORD3BOESPROC +epoxy_glMultiTexCoord3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34337 /* glMultiTexCoord3bOES */); +} + +static PFNGLMULTITEXCOORD3BVOESPROC +epoxy_glMultiTexCoord3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34358 /* glMultiTexCoord3bvOES */); +} + +static PFNGLMULTITEXCOORD3DPROC +epoxy_glMultiTexCoord3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34380 /* "glMultiTexCoord3d" */, + 34398 /* "glMultiTexCoord3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34380 /* "glMultiTexCoord3d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DARBPROC +epoxy_glMultiTexCoord3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34398 /* "glMultiTexCoord3dARB" */, + 34380 /* "glMultiTexCoord3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 34398 /* "glMultiTexCoord3dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DVPROC +epoxy_glMultiTexCoord3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34419 /* "glMultiTexCoord3dv" */, + 34438 /* "glMultiTexCoord3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34419 /* "glMultiTexCoord3dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DVARBPROC +epoxy_glMultiTexCoord3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34438 /* "glMultiTexCoord3dvARB" */, + 34419 /* "glMultiTexCoord3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34438 /* "glMultiTexCoord3dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FPROC +epoxy_glMultiTexCoord3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34460 /* "glMultiTexCoord3f" */, + 34478 /* "glMultiTexCoord3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34460 /* "glMultiTexCoord3f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FARBPROC +epoxy_glMultiTexCoord3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34478 /* "glMultiTexCoord3fARB" */, + 34460 /* "glMultiTexCoord3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34478 /* "glMultiTexCoord3fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FVPROC +epoxy_glMultiTexCoord3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34499 /* "glMultiTexCoord3fv" */, + 34518 /* "glMultiTexCoord3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34499 /* "glMultiTexCoord3fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FVARBPROC +epoxy_glMultiTexCoord3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34518 /* "glMultiTexCoord3fvARB" */, + 34499 /* "glMultiTexCoord3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34518 /* "glMultiTexCoord3fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3HNVPROC +epoxy_glMultiTexCoord3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34540 /* glMultiTexCoord3hNV */); +} + +static PFNGLMULTITEXCOORD3HVNVPROC +epoxy_glMultiTexCoord3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34560 /* glMultiTexCoord3hvNV */); +} + +static PFNGLMULTITEXCOORD3IPROC +epoxy_glMultiTexCoord3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34581 /* "glMultiTexCoord3i" */, + 34599 /* "glMultiTexCoord3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34581 /* "glMultiTexCoord3i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IARBPROC +epoxy_glMultiTexCoord3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34599 /* "glMultiTexCoord3iARB" */, + 34581 /* "glMultiTexCoord3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 34599 /* "glMultiTexCoord3iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IVPROC +epoxy_glMultiTexCoord3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34620 /* "glMultiTexCoord3iv" */, + 34639 /* "glMultiTexCoord3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34620 /* "glMultiTexCoord3iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IVARBPROC +epoxy_glMultiTexCoord3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34639 /* "glMultiTexCoord3ivARB" */, + 34620 /* "glMultiTexCoord3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34639 /* "glMultiTexCoord3ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SPROC +epoxy_glMultiTexCoord3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34661 /* "glMultiTexCoord3s" */, + 34679 /* "glMultiTexCoord3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34661 /* "glMultiTexCoord3s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SARBPROC +epoxy_glMultiTexCoord3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34679 /* "glMultiTexCoord3sARB" */, + 34661 /* "glMultiTexCoord3s" */, + }; + return gl_provider_resolver(entrypoint_strings + 34679 /* "glMultiTexCoord3sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SVPROC +epoxy_glMultiTexCoord3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34700 /* "glMultiTexCoord3sv" */, + 34719 /* "glMultiTexCoord3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34700 /* "glMultiTexCoord3sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SVARBPROC +epoxy_glMultiTexCoord3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34719 /* "glMultiTexCoord3svARB" */, + 34700 /* "glMultiTexCoord3sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34719 /* "glMultiTexCoord3svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3XOESPROC +epoxy_glMultiTexCoord3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34741 /* glMultiTexCoord3xOES */); +} + +static PFNGLMULTITEXCOORD3XVOESPROC +epoxy_glMultiTexCoord3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34762 /* glMultiTexCoord3xvOES */); +} + +static PFNGLMULTITEXCOORD4BOESPROC +epoxy_glMultiTexCoord4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34784 /* glMultiTexCoord4bOES */); +} + +static PFNGLMULTITEXCOORD4BVOESPROC +epoxy_glMultiTexCoord4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34805 /* glMultiTexCoord4bvOES */); +} + +static PFNGLMULTITEXCOORD4DPROC +epoxy_glMultiTexCoord4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34827 /* "glMultiTexCoord4d" */, + 34845 /* "glMultiTexCoord4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34827 /* "glMultiTexCoord4d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DARBPROC +epoxy_glMultiTexCoord4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34845 /* "glMultiTexCoord4dARB" */, + 34827 /* "glMultiTexCoord4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 34845 /* "glMultiTexCoord4dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DVPROC +epoxy_glMultiTexCoord4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34866 /* "glMultiTexCoord4dv" */, + 34885 /* "glMultiTexCoord4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34866 /* "glMultiTexCoord4dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DVARBPROC +epoxy_glMultiTexCoord4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34885 /* "glMultiTexCoord4dvARB" */, + 34866 /* "glMultiTexCoord4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34885 /* "glMultiTexCoord4dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FPROC +epoxy_glMultiTexCoord4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34907 /* "glMultiTexCoord4f" */, + 34907 /* "glMultiTexCoord4f" */, + 34925 /* "glMultiTexCoord4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34907 /* "glMultiTexCoord4f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FARBPROC +epoxy_glMultiTexCoord4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34925 /* "glMultiTexCoord4fARB" */, + 34907 /* "glMultiTexCoord4f" */, + 34907 /* "glMultiTexCoord4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34925 /* "glMultiTexCoord4fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FVPROC +epoxy_glMultiTexCoord4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34946 /* "glMultiTexCoord4fv" */, + 34965 /* "glMultiTexCoord4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34946 /* "glMultiTexCoord4fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FVARBPROC +epoxy_glMultiTexCoord4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34965 /* "glMultiTexCoord4fvARB" */, + 34946 /* "glMultiTexCoord4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34965 /* "glMultiTexCoord4fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4HNVPROC +epoxy_glMultiTexCoord4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34987 /* glMultiTexCoord4hNV */); +} + +static PFNGLMULTITEXCOORD4HVNVPROC +epoxy_glMultiTexCoord4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 35007 /* glMultiTexCoord4hvNV */); +} + +static PFNGLMULTITEXCOORD4IPROC +epoxy_glMultiTexCoord4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35028 /* "glMultiTexCoord4i" */, + 35046 /* "glMultiTexCoord4iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35028 /* "glMultiTexCoord4i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IARBPROC +epoxy_glMultiTexCoord4iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35046 /* "glMultiTexCoord4iARB" */, + 35028 /* "glMultiTexCoord4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 35046 /* "glMultiTexCoord4iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IVPROC +epoxy_glMultiTexCoord4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35067 /* "glMultiTexCoord4iv" */, + 35086 /* "glMultiTexCoord4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35067 /* "glMultiTexCoord4iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IVARBPROC +epoxy_glMultiTexCoord4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35086 /* "glMultiTexCoord4ivARB" */, + 35067 /* "glMultiTexCoord4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35086 /* "glMultiTexCoord4ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SPROC +epoxy_glMultiTexCoord4s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35108 /* "glMultiTexCoord4s" */, + 35126 /* "glMultiTexCoord4sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35108 /* "glMultiTexCoord4s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SARBPROC +epoxy_glMultiTexCoord4sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35126 /* "glMultiTexCoord4sARB" */, + 35108 /* "glMultiTexCoord4s" */, + }; + return gl_provider_resolver(entrypoint_strings + 35126 /* "glMultiTexCoord4sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SVPROC +epoxy_glMultiTexCoord4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35147 /* "glMultiTexCoord4sv" */, + 35166 /* "glMultiTexCoord4svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35147 /* "glMultiTexCoord4sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SVARBPROC +epoxy_glMultiTexCoord4svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35166 /* "glMultiTexCoord4svARB" */, + 35147 /* "glMultiTexCoord4sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35166 /* "glMultiTexCoord4svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4XPROC +epoxy_glMultiTexCoord4x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 35188 /* glMultiTexCoord4x */); +} + +static PFNGLMULTITEXCOORD4XOESPROC +epoxy_glMultiTexCoord4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 35206 /* glMultiTexCoord4xOES */); +} + +static PFNGLMULTITEXCOORD4XVOESPROC +epoxy_glMultiTexCoord4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 35227 /* glMultiTexCoord4xvOES */); +} + +static PFNGLMULTITEXCOORDP1UIPROC +epoxy_glMultiTexCoordP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35249 /* "glMultiTexCoordP1ui" */, + 35249 /* "glMultiTexCoordP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35249 /* "glMultiTexCoordP1ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP1UIVPROC +epoxy_glMultiTexCoordP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35269 /* "glMultiTexCoordP1uiv" */, + 35269 /* "glMultiTexCoordP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35269 /* "glMultiTexCoordP1uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP2UIPROC +epoxy_glMultiTexCoordP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35290 /* "glMultiTexCoordP2ui" */, + 35290 /* "glMultiTexCoordP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35290 /* "glMultiTexCoordP2ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP2UIVPROC +epoxy_glMultiTexCoordP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35310 /* "glMultiTexCoordP2uiv" */, + 35310 /* "glMultiTexCoordP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35310 /* "glMultiTexCoordP2uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP3UIPROC +epoxy_glMultiTexCoordP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35331 /* "glMultiTexCoordP3ui" */, + 35331 /* "glMultiTexCoordP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35331 /* "glMultiTexCoordP3ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP3UIVPROC +epoxy_glMultiTexCoordP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35351 /* "glMultiTexCoordP3uiv" */, + 35351 /* "glMultiTexCoordP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35351 /* "glMultiTexCoordP3uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP4UIPROC +epoxy_glMultiTexCoordP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35372 /* "glMultiTexCoordP4ui" */, + 35372 /* "glMultiTexCoordP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35372 /* "glMultiTexCoordP4ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP4UIVPROC +epoxy_glMultiTexCoordP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35392 /* "glMultiTexCoordP4uiv" */, + 35392 /* "glMultiTexCoordP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35392 /* "glMultiTexCoordP4uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDPOINTEREXTPROC +epoxy_glMultiTexCoordPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35413 /* glMultiTexCoordPointerEXT */); +} + +static PFNGLMULTITEXENVFEXTPROC +epoxy_glMultiTexEnvfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35439 /* glMultiTexEnvfEXT */); +} + +static PFNGLMULTITEXENVFVEXTPROC +epoxy_glMultiTexEnvfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35457 /* glMultiTexEnvfvEXT */); +} + +static PFNGLMULTITEXENVIEXTPROC +epoxy_glMultiTexEnviEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35476 /* glMultiTexEnviEXT */); +} + +static PFNGLMULTITEXENVIVEXTPROC +epoxy_glMultiTexEnvivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35494 /* glMultiTexEnvivEXT */); +} + +static PFNGLMULTITEXGENDEXTPROC +epoxy_glMultiTexGendEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35513 /* glMultiTexGendEXT */); +} + +static PFNGLMULTITEXGENDVEXTPROC +epoxy_glMultiTexGendvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35531 /* glMultiTexGendvEXT */); +} + +static PFNGLMULTITEXGENFEXTPROC +epoxy_glMultiTexGenfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35550 /* glMultiTexGenfEXT */); +} + +static PFNGLMULTITEXGENFVEXTPROC +epoxy_glMultiTexGenfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35568 /* glMultiTexGenfvEXT */); +} + +static PFNGLMULTITEXGENIEXTPROC +epoxy_glMultiTexGeniEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35587 /* glMultiTexGeniEXT */); +} + +static PFNGLMULTITEXGENIVEXTPROC +epoxy_glMultiTexGenivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35605 /* glMultiTexGenivEXT */); +} + +static PFNGLMULTITEXIMAGE1DEXTPROC +epoxy_glMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35624 /* glMultiTexImage1DEXT */); +} + +static PFNGLMULTITEXIMAGE2DEXTPROC +epoxy_glMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35645 /* glMultiTexImage2DEXT */); +} + +static PFNGLMULTITEXIMAGE3DEXTPROC +epoxy_glMultiTexImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35666 /* glMultiTexImage3DEXT */); +} + +static PFNGLMULTITEXPARAMETERIIVEXTPROC +epoxy_glMultiTexParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35687 /* glMultiTexParameterIivEXT */); +} + +static PFNGLMULTITEXPARAMETERIUIVEXTPROC +epoxy_glMultiTexParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35713 /* glMultiTexParameterIuivEXT */); +} + +static PFNGLMULTITEXPARAMETERFEXTPROC +epoxy_glMultiTexParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35740 /* glMultiTexParameterfEXT */); +} + +static PFNGLMULTITEXPARAMETERFVEXTPROC +epoxy_glMultiTexParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35764 /* glMultiTexParameterfvEXT */); +} + +static PFNGLMULTITEXPARAMETERIEXTPROC +epoxy_glMultiTexParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35789 /* glMultiTexParameteriEXT */); +} + +static PFNGLMULTITEXPARAMETERIVEXTPROC +epoxy_glMultiTexParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35813 /* glMultiTexParameterivEXT */); +} + +static PFNGLMULTITEXRENDERBUFFEREXTPROC +epoxy_glMultiTexRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35838 /* glMultiTexRenderbufferEXT */); +} + +static PFNGLMULTITEXSUBIMAGE1DEXTPROC +epoxy_glMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35864 /* glMultiTexSubImage1DEXT */); +} + +static PFNGLMULTITEXSUBIMAGE2DEXTPROC +epoxy_glMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35888 /* glMultiTexSubImage2DEXT */); +} + +static PFNGLMULTITEXSUBIMAGE3DEXTPROC +epoxy_glMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35912 /* glMultiTexSubImage3DEXT */); +} + +static PFNGLNAMEDBUFFERDATAPROC +epoxy_glNamedBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35936 /* "glNamedBufferData" */, + 35936 /* "glNamedBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 35936 /* "glNamedBufferData" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERDATAEXTPROC +epoxy_glNamedBufferDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35954 /* glNamedBufferDataEXT */); +} + +static PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC +epoxy_glNamedBufferPageCommitmentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 35975 /* glNamedBufferPageCommitmentARB */); +} + +static PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC +epoxy_glNamedBufferPageCommitmentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 36006 /* glNamedBufferPageCommitmentEXT */); +} + +static PFNGLNAMEDBUFFERSTORAGEPROC +epoxy_glNamedBufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36037 /* "glNamedBufferStorage" */, + 36037 /* "glNamedBufferStorage" */, + 36058 /* "glNamedBufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 36037 /* "glNamedBufferStorage" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSTORAGEEXTPROC +epoxy_glNamedBufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36058 /* "glNamedBufferStorageEXT" */, + 36037 /* "glNamedBufferStorage" */, + 36037 /* "glNamedBufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 36058 /* "glNamedBufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSUBDATAPROC +epoxy_glNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36082 /* "glNamedBufferSubData" */, + 36082 /* "glNamedBufferSubData" */, + 36103 /* "glNamedBufferSubDataEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 36082 /* "glNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSUBDATAEXTPROC +epoxy_glNamedBufferSubDataEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36103 /* "glNamedBufferSubDataEXT" */, + 36082 /* "glNamedBufferSubData" */, + 36082 /* "glNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 36103 /* "glNamedBufferSubDataEXT" */, + providers, entrypoints); +} + +static PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC +epoxy_glNamedCopyBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36127 /* glNamedCopyBufferSubDataEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC +epoxy_glNamedFramebufferDrawBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36155 /* "glNamedFramebufferDrawBuffer" */, + 36155 /* "glNamedFramebufferDrawBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36155 /* "glNamedFramebufferDrawBuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC +epoxy_glNamedFramebufferDrawBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36184 /* "glNamedFramebufferDrawBuffers" */, + 36184 /* "glNamedFramebufferDrawBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 36184 /* "glNamedFramebufferDrawBuffers" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC +epoxy_glNamedFramebufferParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36214 /* "glNamedFramebufferParameteri" */, + 36214 /* "glNamedFramebufferParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 36214 /* "glNamedFramebufferParameteri" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC +epoxy_glNamedFramebufferParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36243 /* glNamedFramebufferParameteriEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC +epoxy_glNamedFramebufferReadBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36275 /* "glNamedFramebufferReadBuffer" */, + 36275 /* "glNamedFramebufferReadBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36275 /* "glNamedFramebufferReadBuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC +epoxy_glNamedFramebufferRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36304 /* "glNamedFramebufferRenderbuffer" */, + 36304 /* "glNamedFramebufferRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36304 /* "glNamedFramebufferRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC +epoxy_glNamedFramebufferRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36335 /* glNamedFramebufferRenderbufferEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC +epoxy_glNamedFramebufferSampleLocationsfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 36369 /* glNamedFramebufferSampleLocationsfvARB */); +} + +static PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC +epoxy_glNamedFramebufferSampleLocationsfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 36408 /* glNamedFramebufferSampleLocationsfvNV */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREPROC +epoxy_glNamedFramebufferTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36446 /* "glNamedFramebufferTexture" */, + 36446 /* "glNamedFramebufferTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 36446 /* "glNamedFramebufferTexture" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC +epoxy_glNamedFramebufferTexture1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36472 /* glNamedFramebufferTexture1DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC +epoxy_glNamedFramebufferTexture2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36503 /* glNamedFramebufferTexture2DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC +epoxy_glNamedFramebufferTexture3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36534 /* glNamedFramebufferTexture3DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC +epoxy_glNamedFramebufferTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36565 /* glNamedFramebufferTextureEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC +epoxy_glNamedFramebufferTextureFaceEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36594 /* glNamedFramebufferTextureFaceEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC +epoxy_glNamedFramebufferTextureLayer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36627 /* "glNamedFramebufferTextureLayer" */, + 36627 /* "glNamedFramebufferTextureLayer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36627 /* "glNamedFramebufferTextureLayer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC +epoxy_glNamedFramebufferTextureLayerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36658 /* glNamedFramebufferTextureLayerEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC +epoxy_glNamedProgramLocalParameter4dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36692 /* glNamedProgramLocalParameter4dEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC +epoxy_glNamedProgramLocalParameter4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36726 /* glNamedProgramLocalParameter4dvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC +epoxy_glNamedProgramLocalParameter4fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36761 /* glNamedProgramLocalParameter4fEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC +epoxy_glNamedProgramLocalParameter4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36795 /* glNamedProgramLocalParameter4fvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC +epoxy_glNamedProgramLocalParameterI4iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36830 /* glNamedProgramLocalParameterI4iEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC +epoxy_glNamedProgramLocalParameterI4ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36865 /* glNamedProgramLocalParameterI4ivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC +epoxy_glNamedProgramLocalParameterI4uiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36901 /* glNamedProgramLocalParameterI4uiEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC +epoxy_glNamedProgramLocalParameterI4uivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36937 /* glNamedProgramLocalParameterI4uivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC +epoxy_glNamedProgramLocalParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36974 /* glNamedProgramLocalParameters4fvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC +epoxy_glNamedProgramLocalParametersI4ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37010 /* glNamedProgramLocalParametersI4ivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC +epoxy_glNamedProgramLocalParametersI4uivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37047 /* glNamedProgramLocalParametersI4uivEXT */); +} + +static PFNGLNAMEDPROGRAMSTRINGEXTPROC +epoxy_glNamedProgramStringEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37085 /* glNamedProgramStringEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEPROC +epoxy_glNamedRenderbufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37109 /* "glNamedRenderbufferStorage" */, + 37109 /* "glNamedRenderbufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 37109 /* "glNamedRenderbufferStorage" */, + providers, entrypoints); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC +epoxy_glNamedRenderbufferStorageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37136 /* glNamedRenderbufferStorageEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC +epoxy_glNamedRenderbufferStorageMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37166 /* "glNamedRenderbufferStorageMultisample" */, + 37166 /* "glNamedRenderbufferStorageMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 37166 /* "glNamedRenderbufferStorageMultisample" */, + providers, entrypoints); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC +epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37204 /* glNamedRenderbufferStorageMultisampleCoverageEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC +epoxy_glNamedRenderbufferStorageMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37253 /* glNamedRenderbufferStorageMultisampleEXT */); +} + +static PFNGLNAMEDSTRINGARBPROC +epoxy_glNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 37294 /* glNamedStringARB */); +} + +static PFNGLNEWLISTPROC +epoxy_glNewList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37311 /* glNewList */); +} + +static PFNGLNEWOBJECTBUFFERATIPROC +epoxy_glNewObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 37321 /* glNewObjectBufferATI */); +} + +static PFNGLNORMAL3BPROC +epoxy_glNormal3b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37342 /* glNormal3b */); +} + +static PFNGLNORMAL3BVPROC +epoxy_glNormal3bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37353 /* glNormal3bv */); +} + +static PFNGLNORMAL3DPROC +epoxy_glNormal3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37365 /* glNormal3d */); +} + +static PFNGLNORMAL3DVPROC +epoxy_glNormal3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37376 /* glNormal3dv */); +} + +static PFNGLNORMAL3FPROC +epoxy_glNormal3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37388 /* "glNormal3f" */, + 37388 /* "glNormal3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 37388 /* "glNormal3f" */, + providers, entrypoints); +} + +static PFNGLNORMAL3FVERTEX3FSUNPROC +epoxy_glNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 37399 /* glNormal3fVertex3fSUN */); +} + +static PFNGLNORMAL3FVERTEX3FVSUNPROC +epoxy_glNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 37421 /* glNormal3fVertex3fvSUN */); +} + +static PFNGLNORMAL3FVPROC +epoxy_glNormal3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37444 /* glNormal3fv */); +} + +static PFNGLNORMAL3HNVPROC +epoxy_glNormal3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 37456 /* glNormal3hNV */); +} + +static PFNGLNORMAL3HVNVPROC +epoxy_glNormal3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 37469 /* glNormal3hvNV */); +} + +static PFNGLNORMAL3IPROC +epoxy_glNormal3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37483 /* glNormal3i */); +} + +static PFNGLNORMAL3IVPROC +epoxy_glNormal3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37494 /* glNormal3iv */); +} + +static PFNGLNORMAL3SPROC +epoxy_glNormal3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37506 /* glNormal3s */); +} + +static PFNGLNORMAL3SVPROC +epoxy_glNormal3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37517 /* glNormal3sv */); +} + +static PFNGLNORMAL3XPROC +epoxy_glNormal3x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 37529 /* glNormal3x */); +} + +static PFNGLNORMAL3XOESPROC +epoxy_glNormal3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 37540 /* glNormal3xOES */); +} + +static PFNGLNORMAL3XVOESPROC +epoxy_glNormal3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 37554 /* glNormal3xvOES */); +} + +static PFNGLNORMALFORMATNVPROC +epoxy_glNormalFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 37569 /* glNormalFormatNV */); +} + +static PFNGLNORMALP3UIPROC +epoxy_glNormalP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37586 /* "glNormalP3ui" */, + 37586 /* "glNormalP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 37586 /* "glNormalP3ui" */, + providers, entrypoints); +} + +static PFNGLNORMALP3UIVPROC +epoxy_glNormalP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37599 /* "glNormalP3uiv" */, + 37599 /* "glNormalP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 37599 /* "glNormalP3uiv" */, + providers, entrypoints); +} + +static PFNGLNORMALPOINTERPROC +epoxy_glNormalPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37613 /* "glNormalPointer" */, + 37613 /* "glNormalPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 37613 /* "glNormalPointer" */, + providers, entrypoints); +} + +static PFNGLNORMALPOINTEREXTPROC +epoxy_glNormalPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 37629 /* glNormalPointerEXT */); +} + +static PFNGLNORMALPOINTERLISTIBMPROC +epoxy_glNormalPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 37648 /* glNormalPointerListIBM */); +} + +static PFNGLNORMALPOINTERVINTELPROC +epoxy_glNormalPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 37671 /* glNormalPointervINTEL */); +} + +static PFNGLNORMALSTREAM3BATIPROC +epoxy_glNormalStream3bATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37693 /* glNormalStream3bATI */); +} + +static PFNGLNORMALSTREAM3BVATIPROC +epoxy_glNormalStream3bvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37713 /* glNormalStream3bvATI */); +} + +static PFNGLNORMALSTREAM3DATIPROC +epoxy_glNormalStream3dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37734 /* glNormalStream3dATI */); +} + +static PFNGLNORMALSTREAM3DVATIPROC +epoxy_glNormalStream3dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37754 /* glNormalStream3dvATI */); +} + +static PFNGLNORMALSTREAM3FATIPROC +epoxy_glNormalStream3fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37775 /* glNormalStream3fATI */); +} + +static PFNGLNORMALSTREAM3FVATIPROC +epoxy_glNormalStream3fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37795 /* glNormalStream3fvATI */); +} + +static PFNGLNORMALSTREAM3IATIPROC +epoxy_glNormalStream3iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37816 /* glNormalStream3iATI */); +} + +static PFNGLNORMALSTREAM3IVATIPROC +epoxy_glNormalStream3ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37836 /* glNormalStream3ivATI */); +} + +static PFNGLNORMALSTREAM3SATIPROC +epoxy_glNormalStream3sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37857 /* glNormalStream3sATI */); +} + +static PFNGLNORMALSTREAM3SVATIPROC +epoxy_glNormalStream3svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37877 /* glNormalStream3svATI */); +} + +static PFNGLOBJECTLABELPROC +epoxy_glObjectLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37912 /* "glObjectLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 37898 /* "glObjectLabel" */, + providers, entrypoints); +} + +static PFNGLOBJECTLABELKHRPROC +epoxy_glObjectLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37912 /* "glObjectLabelKHR" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 37912 /* "glObjectLabelKHR" */, + providers, entrypoints); +} + +static PFNGLOBJECTPTRLABELPROC +epoxy_glObjectPtrLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37946 /* "glObjectPtrLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 37929 /* "glObjectPtrLabel" */, + providers, entrypoints); +} + +static PFNGLOBJECTPTRLABELKHRPROC +epoxy_glObjectPtrLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37946 /* "glObjectPtrLabelKHR" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 37946 /* "glObjectPtrLabelKHR" */, + providers, entrypoints); +} + +static PFNGLOBJECTPURGEABLEAPPLEPROC +epoxy_glObjectPurgeableAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 37966 /* glObjectPurgeableAPPLE */); +} + +static PFNGLOBJECTUNPURGEABLEAPPLEPROC +epoxy_glObjectUnpurgeableAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 37989 /* glObjectUnpurgeableAPPLE */); +} + +static PFNGLORTHOPROC +epoxy_glOrtho_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38014 /* glOrtho */); +} + +static PFNGLORTHOFPROC +epoxy_glOrthof_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 38022 /* glOrthof */); +} + +static PFNGLORTHOFOESPROC +epoxy_glOrthofOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 38031 /* glOrthofOES */); +} + +static PFNGLORTHOXPROC +epoxy_glOrthox_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 38043 /* glOrthox */); +} + +static PFNGLORTHOXOESPROC +epoxy_glOrthoxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38052 /* glOrthoxOES */); +} + +static PFNGLPNTRIANGLESFATIPROC +epoxy_glPNTrianglesfATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_pn_triangles, 38064 /* glPNTrianglesfATI */); +} + +static PFNGLPNTRIANGLESIATIPROC +epoxy_glPNTrianglesiATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_pn_triangles, 38082 /* glPNTrianglesiATI */); +} + +static PFNGLPASSTEXCOORDATIPROC +epoxy_glPassTexCoordATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 38100 /* glPassTexCoordATI */); +} + +static PFNGLPASSTHROUGHPROC +epoxy_glPassThrough_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38118 /* glPassThrough */); +} + +static PFNGLPASSTHROUGHXOESPROC +epoxy_glPassThroughxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38132 /* glPassThroughxOES */); +} + +static PFNGLPATCHPARAMETERFVPROC +epoxy_glPatchParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38150 /* "glPatchParameterfv" */, + 38150 /* "glPatchParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 38150 /* "glPatchParameterfv" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIPROC +epoxy_glPatchParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_EXT_tessellation_shader, + GL_extension_GL_OES_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38187 /* "glPatchParameteriEXT" */, + 38208 /* "glPatchParameteriOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 38169 /* "glPatchParameteri" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIEXTPROC +epoxy_glPatchParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_tessellation_shader, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_OES_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38187 /* "glPatchParameteriEXT" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38208 /* "glPatchParameteriOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 38187 /* "glPatchParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIOESPROC +epoxy_glPatchParameteriOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_tessellation_shader, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_EXT_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38208 /* "glPatchParameteriOES" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38187 /* "glPatchParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 38208 /* "glPatchParameteriOES" */, + providers, entrypoints); +} + +static PFNGLPATHCOLORGENNVPROC +epoxy_glPathColorGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38229 /* glPathColorGenNV */); +} + +static PFNGLPATHCOMMANDSNVPROC +epoxy_glPathCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38246 /* glPathCommandsNV */); +} + +static PFNGLPATHCOORDSNVPROC +epoxy_glPathCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38263 /* glPathCoordsNV */); +} + +static PFNGLPATHCOVERDEPTHFUNCNVPROC +epoxy_glPathCoverDepthFuncNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38278 /* glPathCoverDepthFuncNV */); +} + +static PFNGLPATHDASHARRAYNVPROC +epoxy_glPathDashArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38301 /* glPathDashArrayNV */); +} + +static PFNGLPATHFOGGENNVPROC +epoxy_glPathFogGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38319 /* glPathFogGenNV */); +} + +static PFNGLPATHGLYPHINDEXARRAYNVPROC +epoxy_glPathGlyphIndexArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38334 /* glPathGlyphIndexArrayNV */); +} + +static PFNGLPATHGLYPHINDEXRANGENVPROC +epoxy_glPathGlyphIndexRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38358 /* glPathGlyphIndexRangeNV */); +} + +static PFNGLPATHGLYPHRANGENVPROC +epoxy_glPathGlyphRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38382 /* glPathGlyphRangeNV */); +} + +static PFNGLPATHGLYPHSNVPROC +epoxy_glPathGlyphsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38401 /* glPathGlyphsNV */); +} + +static PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC +epoxy_glPathMemoryGlyphIndexArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38416 /* glPathMemoryGlyphIndexArrayNV */); +} + +static PFNGLPATHPARAMETERFNVPROC +epoxy_glPathParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38446 /* glPathParameterfNV */); +} + +static PFNGLPATHPARAMETERFVNVPROC +epoxy_glPathParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38465 /* glPathParameterfvNV */); +} + +static PFNGLPATHPARAMETERINVPROC +epoxy_glPathParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38485 /* glPathParameteriNV */); +} + +static PFNGLPATHPARAMETERIVNVPROC +epoxy_glPathParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38504 /* glPathParameterivNV */); +} + +static PFNGLPATHSTENCILDEPTHOFFSETNVPROC +epoxy_glPathStencilDepthOffsetNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38524 /* glPathStencilDepthOffsetNV */); +} + +static PFNGLPATHSTENCILFUNCNVPROC +epoxy_glPathStencilFuncNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38551 /* glPathStencilFuncNV */); +} + +static PFNGLPATHSTRINGNVPROC +epoxy_glPathStringNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38571 /* glPathStringNV */); +} + +static PFNGLPATHSUBCOMMANDSNVPROC +epoxy_glPathSubCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38586 /* glPathSubCommandsNV */); +} + +static PFNGLPATHSUBCOORDSNVPROC +epoxy_glPathSubCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38606 /* glPathSubCoordsNV */); +} + +static PFNGLPATHTEXGENNVPROC +epoxy_glPathTexGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38624 /* glPathTexGenNV */); +} + +static PFNGLPAUSETRANSFORMFEEDBACKPROC +epoxy_glPauseTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38664 /* "glPauseTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 38639 /* "glPauseTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLPAUSETRANSFORMFEEDBACKNVPROC +epoxy_glPauseTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38664 /* "glPauseTransformFeedbackNV" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 38664 /* "glPauseTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLPIXELDATARANGENVPROC +epoxy_glPixelDataRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_pixel_data_range, 38691 /* glPixelDataRangeNV */); +} + +static PFNGLPIXELMAPFVPROC +epoxy_glPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38710 /* glPixelMapfv */); +} + +static PFNGLPIXELMAPUIVPROC +epoxy_glPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38723 /* glPixelMapuiv */); +} + +static PFNGLPIXELMAPUSVPROC +epoxy_glPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38737 /* glPixelMapusv */); +} + +static PFNGLPIXELMAPXPROC +epoxy_glPixelMapx_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38751 /* glPixelMapx */); +} + +static PFNGLPIXELSTOREFPROC +epoxy_glPixelStoref_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38763 /* glPixelStoref */); +} + +static PFNGLPIXELSTOREIPROC +epoxy_glPixelStorei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38777 /* "glPixelStorei" */, + 38777 /* "glPixelStorei" */, + 38777 /* "glPixelStorei" */, + }; + return gl_provider_resolver(entrypoint_strings + 38777 /* "glPixelStorei" */, + providers, entrypoints); +} + +static PFNGLPIXELSTOREXPROC +epoxy_glPixelStorex_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38791 /* glPixelStorex */); +} + +static PFNGLPIXELTEXGENPARAMETERFSGISPROC +epoxy_glPixelTexGenParameterfSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38805 /* glPixelTexGenParameterfSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERFVSGISPROC +epoxy_glPixelTexGenParameterfvSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38833 /* glPixelTexGenParameterfvSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERISGISPROC +epoxy_glPixelTexGenParameteriSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38862 /* glPixelTexGenParameteriSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERIVSGISPROC +epoxy_glPixelTexGenParameterivSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38890 /* glPixelTexGenParameterivSGIS */); +} + +static PFNGLPIXELTEXGENSGIXPROC +epoxy_glPixelTexGenSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_pixel_texture, 38919 /* glPixelTexGenSGIX */); +} + +static PFNGLPIXELTRANSFERFPROC +epoxy_glPixelTransferf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38937 /* glPixelTransferf */); +} + +static PFNGLPIXELTRANSFERIPROC +epoxy_glPixelTransferi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38954 /* glPixelTransferi */); +} + +static PFNGLPIXELTRANSFERXOESPROC +epoxy_glPixelTransferxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38971 /* glPixelTransferxOES */); +} + +static PFNGLPIXELTRANSFORMPARAMETERFEXTPROC +epoxy_glPixelTransformParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 38991 /* glPixelTransformParameterfEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC +epoxy_glPixelTransformParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39021 /* glPixelTransformParameterfvEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERIEXTPROC +epoxy_glPixelTransformParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39052 /* glPixelTransformParameteriEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC +epoxy_glPixelTransformParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39082 /* glPixelTransformParameterivEXT */); +} + +static PFNGLPIXELZOOMPROC +epoxy_glPixelZoom_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39113 /* glPixelZoom */); +} + +static PFNGLPIXELZOOMXOESPROC +epoxy_glPixelZoomxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39125 /* glPixelZoomxOES */); +} + +static PFNGLPOINTALONGPATHNVPROC +epoxy_glPointAlongPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 39141 /* glPointAlongPathNV */); +} + +static PFNGLPOINTPARAMETERFPROC +epoxy_glPointParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39199 /* "glPointParameterfEXT" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39160 /* "glPointParameterf" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFARBPROC +epoxy_glPointParameterfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39178 /* "glPointParameterfARB" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39199 /* "glPointParameterfEXT" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39178 /* "glPointParameterfARB" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFEXTPROC +epoxy_glPointParameterfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39199 /* "glPointParameterfEXT" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39199 /* "glPointParameterfEXT" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFSGISPROC +epoxy_glPointParameterfSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39220 /* "glPointParameterfSGIS" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39199 /* "glPointParameterfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39220 /* "glPointParameterfSGIS" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVPROC +epoxy_glPointParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39283 /* "glPointParameterfvEXT" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39242 /* "glPointParameterfv" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVARBPROC +epoxy_glPointParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39261 /* "glPointParameterfvARB" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39283 /* "glPointParameterfvEXT" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39261 /* "glPointParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVEXTPROC +epoxy_glPointParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39283 /* "glPointParameterfvEXT" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39283 /* "glPointParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVSGISPROC +epoxy_glPointParameterfvSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39305 /* "glPointParameterfvSGIS" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39283 /* "glPointParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39305 /* "glPointParameterfvSGIS" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIPROC +epoxy_glPointParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_NV_point_sprite, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39328 /* "glPointParameteri" */, + 39346 /* "glPointParameteriNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39328 /* "glPointParameteri" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERINVPROC +epoxy_glPointParameteriNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_point_sprite, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39346 /* "glPointParameteriNV" */, + 39328 /* "glPointParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 39346 /* "glPointParameteriNV" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIVPROC +epoxy_glPointParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_NV_point_sprite, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39366 /* "glPointParameteriv" */, + 39385 /* "glPointParameterivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39366 /* "glPointParameteriv" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIVNVPROC +epoxy_glPointParameterivNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_point_sprite, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39385 /* "glPointParameterivNV" */, + 39366 /* "glPointParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 39385 /* "glPointParameterivNV" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERXPROC +epoxy_glPointParameterx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39406 /* glPointParameterx */); +} + +static PFNGLPOINTPARAMETERXOESPROC +epoxy_glPointParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39424 /* glPointParameterxOES */); +} + +static PFNGLPOINTPARAMETERXVPROC +epoxy_glPointParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39445 /* glPointParameterxv */); +} + +static PFNGLPOINTPARAMETERXVOESPROC +epoxy_glPointParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39464 /* glPointParameterxvOES */); +} + +static PFNGLPOINTSIZEPROC +epoxy_glPointSize_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39486 /* "glPointSize" */, + 39486 /* "glPointSize" */, + }; + return gl_provider_resolver(entrypoint_strings + 39486 /* "glPointSize" */, + providers, entrypoints); +} + +static PFNGLPOINTSIZEPOINTEROESPROC +epoxy_glPointSizePointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_point_size_array, 39498 /* glPointSizePointerOES */); +} + +static PFNGLPOINTSIZEXPROC +epoxy_glPointSizex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39520 /* glPointSizex */); +} + +static PFNGLPOINTSIZEXOESPROC +epoxy_glPointSizexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39533 /* glPointSizexOES */); +} + +static PFNGLPOLLASYNCSGIXPROC +epoxy_glPollAsyncSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 39549 /* glPollAsyncSGIX */); +} + +static PFNGLPOLLINSTRUMENTSSGIXPROC +epoxy_glPollInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 39565 /* glPollInstrumentsSGIX */); +} + +static PFNGLPOLYGONMODEPROC +epoxy_glPolygonMode_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + GL_extension_GL_NV_polygon_mode, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39587 /* "glPolygonMode" */, + 39601 /* "glPolygonModeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39587 /* "glPolygonMode" */, + providers, entrypoints); +} + +static PFNGLPOLYGONMODENVPROC +epoxy_glPolygonModeNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_polygon_mode, + Desktop_OpenGL_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39601 /* "glPolygonModeNV" */, + 39587 /* "glPolygonMode" */, + }; + return gl_provider_resolver(entrypoint_strings + 39601 /* "glPolygonModeNV" */, + providers, entrypoints); +} + +static PFNGLPOLYGONOFFSETPROC +epoxy_glPolygonOffset_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39617 /* "glPolygonOffset" */, + 39617 /* "glPolygonOffset" */, + 39617 /* "glPolygonOffset" */, + }; + return gl_provider_resolver(entrypoint_strings + 39617 /* "glPolygonOffset" */, + providers, entrypoints); +} + +static PFNGLPOLYGONOFFSETCLAMPEXTPROC +epoxy_glPolygonOffsetClampEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_polygon_offset_clamp, 39633 /* glPolygonOffsetClampEXT */); +} + +static PFNGLPOLYGONOFFSETEXTPROC +epoxy_glPolygonOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_polygon_offset, 39657 /* glPolygonOffsetEXT */); +} + +static PFNGLPOLYGONOFFSETXPROC +epoxy_glPolygonOffsetx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39676 /* glPolygonOffsetx */); +} + +static PFNGLPOLYGONOFFSETXOESPROC +epoxy_glPolygonOffsetxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39693 /* glPolygonOffsetxOES */); +} + +static PFNGLPOLYGONSTIPPLEPROC +epoxy_glPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39713 /* glPolygonStipple */); +} + +static PFNGLPOPATTRIBPROC +epoxy_glPopAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39730 /* glPopAttrib */); +} + +static PFNGLPOPCLIENTATTRIBPROC +epoxy_glPopClientAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 39742 /* glPopClientAttrib */); +} + +static PFNGLPOPDEBUGGROUPPROC +epoxy_glPopDebugGroup_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39776 /* "glPopDebugGroupKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 39760 /* "glPopDebugGroup" */, + providers, entrypoints); +} + +static PFNGLPOPDEBUGGROUPKHRPROC +epoxy_glPopDebugGroupKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39776 /* "glPopDebugGroupKHR" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + }; + return gl_provider_resolver(entrypoint_strings + 39776 /* "glPopDebugGroupKHR" */, + providers, entrypoints); +} + +static PFNGLPOPGROUPMARKEREXTPROC +epoxy_glPopGroupMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 39795 /* glPopGroupMarkerEXT */); +} + +static PFNGLPOPMATRIXPROC +epoxy_glPopMatrix_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39815 /* "glPopMatrix" */, + 39815 /* "glPopMatrix" */, + }; + return gl_provider_resolver(entrypoint_strings + 39815 /* "glPopMatrix" */, + providers, entrypoints); +} + +static PFNGLPOPNAMEPROC +epoxy_glPopName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39827 /* glPopName */); +} + +static PFNGLPRESENTFRAMEDUALFILLNVPROC +epoxy_glPresentFrameDualFillNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 39837 /* glPresentFrameDualFillNV */); +} + +static PFNGLPRESENTFRAMEKEYEDNVPROC +epoxy_glPresentFrameKeyedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 39862 /* glPresentFrameKeyedNV */); +} + +static PFNGLPRIMITIVEBOUNDINGBOXPROC +epoxy_glPrimitiveBoundingBox_resolver(void) +{ + static const enum gl_provider providers[] = { + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39884 /* "glPrimitiveBoundingBox" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXARBPROC +epoxy_glPrimitiveBoundingBoxARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_ES3_2_compatibility, + OpenGL_ES_3_2, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39907 /* "glPrimitiveBoundingBoxARB" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXEXTPROC +epoxy_glPrimitiveBoundingBoxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_primitive_bounding_box, + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39933 /* "glPrimitiveBoundingBoxEXT" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXOESPROC +epoxy_glPrimitiveBoundingBoxOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_primitive_bounding_box, + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_EXT_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39959 /* "glPrimitiveBoundingBoxOES" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39959 /* "glPrimitiveBoundingBoxOES" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVERESTARTINDEXPROC +epoxy_glPrimitiveRestartIndex_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_3_1, 39985 /* glPrimitiveRestartIndex */); +} + +static PFNGLPRIMITIVERESTARTINDEXNVPROC +epoxy_glPrimitiveRestartIndexNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_primitive_restart, 40009 /* glPrimitiveRestartIndexNV */); +} + +static PFNGLPRIMITIVERESTARTNVPROC +epoxy_glPrimitiveRestartNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_primitive_restart, 40035 /* glPrimitiveRestartNV */); +} + +static PFNGLPRIORITIZETEXTURESPROC +epoxy_glPrioritizeTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_texture_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40056 /* "glPrioritizeTextures" */, + 40077 /* "glPrioritizeTexturesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 40056 /* "glPrioritizeTextures" */, + providers, entrypoints); +} + +static PFNGLPRIORITIZETEXTURESEXTPROC +epoxy_glPrioritizeTexturesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_object, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40077 /* "glPrioritizeTexturesEXT" */, + 40056 /* "glPrioritizeTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 40077 /* "glPrioritizeTexturesEXT" */, + providers, entrypoints); +} + +static PFNGLPRIORITIZETEXTURESXOESPROC +epoxy_glPrioritizeTexturesxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 40101 /* glPrioritizeTexturesxOES */); +} + +static PFNGLPROGRAMBINARYPROC +epoxy_glProgramBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_OES_get_program_binary, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40142 /* "glProgramBinaryOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 40126 /* "glProgramBinary" */, + providers, entrypoints); +} + +static PFNGLPROGRAMBINARYOESPROC +epoxy_glProgramBinaryOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_get_program_binary, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40142 /* "glProgramBinaryOES" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 40142 /* "glProgramBinaryOES" */, + providers, entrypoints); +} + +static PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC +epoxy_glProgramBufferParametersIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40161 /* glProgramBufferParametersIivNV */); +} + +static PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC +epoxy_glProgramBufferParametersIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40192 /* glProgramBufferParametersIuivNV */); +} + +static PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC +epoxy_glProgramBufferParametersfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40224 /* glProgramBufferParametersfvNV */); +} + +static PFNGLPROGRAMENVPARAMETER4DARBPROC +epoxy_glProgramEnvParameter4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40254 /* "glProgramEnvParameter4dARB" */, + 40254 /* "glProgramEnvParameter4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40254 /* "glProgramEnvParameter4dARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4DVARBPROC +epoxy_glProgramEnvParameter4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40281 /* "glProgramEnvParameter4dvARB" */, + 40281 /* "glProgramEnvParameter4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40281 /* "glProgramEnvParameter4dvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4FARBPROC +epoxy_glProgramEnvParameter4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40309 /* "glProgramEnvParameter4fARB" */, + 40309 /* "glProgramEnvParameter4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40309 /* "glProgramEnvParameter4fARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4FVARBPROC +epoxy_glProgramEnvParameter4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40336 /* "glProgramEnvParameter4fvARB" */, + 40336 /* "glProgramEnvParameter4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40336 /* "glProgramEnvParameter4fvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETERI4INVPROC +epoxy_glProgramEnvParameterI4iNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40364 /* glProgramEnvParameterI4iNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4IVNVPROC +epoxy_glProgramEnvParameterI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40391 /* glProgramEnvParameterI4ivNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4UINVPROC +epoxy_glProgramEnvParameterI4uiNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40419 /* glProgramEnvParameterI4uiNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4UIVNVPROC +epoxy_glProgramEnvParameterI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40447 /* glProgramEnvParameterI4uivNV */); +} + +static PFNGLPROGRAMENVPARAMETERS4FVEXTPROC +epoxy_glProgramEnvParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_gpu_program_parameters, 40476 /* glProgramEnvParameters4fvEXT */); +} + +static PFNGLPROGRAMENVPARAMETERSI4IVNVPROC +epoxy_glProgramEnvParametersI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40505 /* glProgramEnvParametersI4ivNV */); +} + +static PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC +epoxy_glProgramEnvParametersI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40534 /* glProgramEnvParametersI4uivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETER4DARBPROC +epoxy_glProgramLocalParameter4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40564 /* "glProgramLocalParameter4dARB" */, + 40564 /* "glProgramLocalParameter4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40564 /* "glProgramLocalParameter4dARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4DVARBPROC +epoxy_glProgramLocalParameter4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40593 /* "glProgramLocalParameter4dvARB" */, + 40593 /* "glProgramLocalParameter4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40593 /* "glProgramLocalParameter4dvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4FARBPROC +epoxy_glProgramLocalParameter4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40623 /* "glProgramLocalParameter4fARB" */, + 40623 /* "glProgramLocalParameter4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40623 /* "glProgramLocalParameter4fARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC +epoxy_glProgramLocalParameter4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40652 /* "glProgramLocalParameter4fvARB" */, + 40652 /* "glProgramLocalParameter4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40652 /* "glProgramLocalParameter4fvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETERI4INVPROC +epoxy_glProgramLocalParameterI4iNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40682 /* glProgramLocalParameterI4iNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC +epoxy_glProgramLocalParameterI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40711 /* glProgramLocalParameterI4ivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4UINVPROC +epoxy_glProgramLocalParameterI4uiNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40741 /* glProgramLocalParameterI4uiNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC +epoxy_glProgramLocalParameterI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40771 /* glProgramLocalParameterI4uivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC +epoxy_glProgramLocalParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_gpu_program_parameters, 40802 /* glProgramLocalParameters4fvEXT */); +} + +static PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC +epoxy_glProgramLocalParametersI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40833 /* glProgramLocalParametersI4ivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC +epoxy_glProgramLocalParametersI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40864 /* glProgramLocalParametersI4uivNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4DNVPROC +epoxy_glProgramNamedParameter4dNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40896 /* glProgramNamedParameter4dNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC +epoxy_glProgramNamedParameter4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40924 /* glProgramNamedParameter4dvNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4FNVPROC +epoxy_glProgramNamedParameter4fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40953 /* glProgramNamedParameter4fNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC +epoxy_glProgramNamedParameter4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40981 /* glProgramNamedParameter4fvNV */); +} + +static PFNGLPROGRAMPARAMETER4DNVPROC +epoxy_glProgramParameter4dNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41010 /* glProgramParameter4dNV */); +} + +static PFNGLPROGRAMPARAMETER4DVNVPROC +epoxy_glProgramParameter4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41033 /* glProgramParameter4dvNV */); +} + +static PFNGLPROGRAMPARAMETER4FNVPROC +epoxy_glProgramParameter4fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41057 /* glProgramParameter4fNV */); +} + +static PFNGLPROGRAMPARAMETER4FVNVPROC +epoxy_glProgramParameter4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41080 /* glProgramParameter4fvNV */); +} + +static PFNGLPROGRAMPARAMETERIPROC +epoxy_glProgramParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41124 /* "glProgramParameteriARB" */, + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41104 /* "glProgramParameteri" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERIARBPROC +epoxy_glProgramParameteriARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41124 /* "glProgramParameteriARB" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41124 /* "glProgramParameteriARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERIEXTPROC +epoxy_glProgramParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41124 /* "glProgramParameteriARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 41147 /* "glProgramParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERS4DVNVPROC +epoxy_glProgramParameters4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41170 /* glProgramParameters4dvNV */); +} + +static PFNGLPROGRAMPARAMETERS4FVNVPROC +epoxy_glProgramParameters4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41195 /* glProgramParameters4fvNV */); +} + +static PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC +epoxy_glProgramPathFragmentInputGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 41220 /* glProgramPathFragmentInputGenNV */); +} + +static PFNGLPROGRAMSTRINGARBPROC +epoxy_glProgramStringARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41252 /* "glProgramStringARB" */, + 41252 /* "glProgramStringARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 41252 /* "glProgramStringARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC +epoxy_glProgramSubroutineParametersuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program5, 41271 /* glProgramSubroutineParametersuivNV */); +} + +static PFNGLPROGRAMUNIFORM1DPROC +epoxy_glProgramUniform1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41306 /* "glProgramUniform1d" */, + 41306 /* "glProgramUniform1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 41306 /* "glProgramUniform1d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1DEXTPROC +epoxy_glProgramUniform1dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41325 /* glProgramUniform1dEXT */); +} + +static PFNGLPROGRAMUNIFORM1DVPROC +epoxy_glProgramUniform1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41347 /* "glProgramUniform1dv" */, + 41347 /* "glProgramUniform1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41347 /* "glProgramUniform1dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1DVEXTPROC +epoxy_glProgramUniform1dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41367 /* glProgramUniform1dvEXT */); +} + +static PFNGLPROGRAMUNIFORM1FPROC +epoxy_glProgramUniform1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41409 /* "glProgramUniform1fEXT" */, + 41409 /* "glProgramUniform1fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41390 /* "glProgramUniform1f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FEXTPROC +epoxy_glProgramUniform1fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41409 /* "glProgramUniform1fEXT" */, + 41409 /* "glProgramUniform1fEXT" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 41409 /* "glProgramUniform1fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FVPROC +epoxy_glProgramUniform1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41451 /* "glProgramUniform1fvEXT" */, + 41451 /* "glProgramUniform1fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41431 /* "glProgramUniform1fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FVEXTPROC +epoxy_glProgramUniform1fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41451 /* "glProgramUniform1fvEXT" */, + 41451 /* "glProgramUniform1fvEXT" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41451 /* "glProgramUniform1fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IPROC +epoxy_glProgramUniform1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41589 /* "glProgramUniform1iEXT" */, + 41589 /* "glProgramUniform1iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41474 /* "glProgramUniform1i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1I64ARBPROC +epoxy_glProgramUniform1i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41493 /* glProgramUniform1i64ARB */); +} + +static PFNGLPROGRAMUNIFORM1I64NVPROC +epoxy_glProgramUniform1i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41517 /* "glProgramUniform1i64NV" */, + 41517 /* "glProgramUniform1i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41517 /* "glProgramUniform1i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1I64VARBPROC +epoxy_glProgramUniform1i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41540 /* glProgramUniform1i64vARB */); +} + +static PFNGLPROGRAMUNIFORM1I64VNVPROC +epoxy_glProgramUniform1i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41565 /* "glProgramUniform1i64vNV" */, + 41565 /* "glProgramUniform1i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41565 /* "glProgramUniform1i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IEXTPROC +epoxy_glProgramUniform1iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41589 /* "glProgramUniform1iEXT" */, + 41589 /* "glProgramUniform1iEXT" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 41589 /* "glProgramUniform1iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IVPROC +epoxy_glProgramUniform1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41631 /* "glProgramUniform1ivEXT" */, + 41631 /* "glProgramUniform1ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41611 /* "glProgramUniform1iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IVEXTPROC +epoxy_glProgramUniform1ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41631 /* "glProgramUniform1ivEXT" */, + 41631 /* "glProgramUniform1ivEXT" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41631 /* "glProgramUniform1ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIPROC +epoxy_glProgramUniform1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41774 /* "glProgramUniform1uiEXT" */, + 41774 /* "glProgramUniform1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41654 /* "glProgramUniform1ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UI64ARBPROC +epoxy_glProgramUniform1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41674 /* glProgramUniform1ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM1UI64NVPROC +epoxy_glProgramUniform1ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41699 /* "glProgramUniform1ui64NV" */, + 41699 /* "glProgramUniform1ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41699 /* "glProgramUniform1ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UI64VARBPROC +epoxy_glProgramUniform1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41723 /* glProgramUniform1ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM1UI64VNVPROC +epoxy_glProgramUniform1ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41749 /* "glProgramUniform1ui64vNV" */, + 41749 /* "glProgramUniform1ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41749 /* "glProgramUniform1ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIEXTPROC +epoxy_glProgramUniform1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41774 /* "glProgramUniform1uiEXT" */, + 41774 /* "glProgramUniform1uiEXT" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 41774 /* "glProgramUniform1uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIVPROC +epoxy_glProgramUniform1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41818 /* "glProgramUniform1uivEXT" */, + 41818 /* "glProgramUniform1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41797 /* "glProgramUniform1uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIVEXTPROC +epoxy_glProgramUniform1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41818 /* "glProgramUniform1uivEXT" */, + 41818 /* "glProgramUniform1uivEXT" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41818 /* "glProgramUniform1uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DPROC +epoxy_glProgramUniform2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41842 /* "glProgramUniform2d" */, + 41842 /* "glProgramUniform2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 41842 /* "glProgramUniform2d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DEXTPROC +epoxy_glProgramUniform2dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41861 /* glProgramUniform2dEXT */); +} + +static PFNGLPROGRAMUNIFORM2DVPROC +epoxy_glProgramUniform2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41883 /* "glProgramUniform2dv" */, + 41883 /* "glProgramUniform2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41883 /* "glProgramUniform2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DVEXTPROC +epoxy_glProgramUniform2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41903 /* glProgramUniform2dvEXT */); +} + +static PFNGLPROGRAMUNIFORM2FPROC +epoxy_glProgramUniform2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41945 /* "glProgramUniform2fEXT" */, + 41945 /* "glProgramUniform2fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41926 /* "glProgramUniform2f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FEXTPROC +epoxy_glProgramUniform2fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41945 /* "glProgramUniform2fEXT" */, + 41945 /* "glProgramUniform2fEXT" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 41945 /* "glProgramUniform2fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FVPROC +epoxy_glProgramUniform2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41987 /* "glProgramUniform2fvEXT" */, + 41987 /* "glProgramUniform2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41967 /* "glProgramUniform2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FVEXTPROC +epoxy_glProgramUniform2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41987 /* "glProgramUniform2fvEXT" */, + 41987 /* "glProgramUniform2fvEXT" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41987 /* "glProgramUniform2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IPROC +epoxy_glProgramUniform2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42125 /* "glProgramUniform2iEXT" */, + 42125 /* "glProgramUniform2iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42010 /* "glProgramUniform2i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2I64ARBPROC +epoxy_glProgramUniform2i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42029 /* glProgramUniform2i64ARB */); +} + +static PFNGLPROGRAMUNIFORM2I64NVPROC +epoxy_glProgramUniform2i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42053 /* "glProgramUniform2i64NV" */, + 42053 /* "glProgramUniform2i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42053 /* "glProgramUniform2i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2I64VARBPROC +epoxy_glProgramUniform2i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42076 /* glProgramUniform2i64vARB */); +} + +static PFNGLPROGRAMUNIFORM2I64VNVPROC +epoxy_glProgramUniform2i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42101 /* "glProgramUniform2i64vNV" */, + 42101 /* "glProgramUniform2i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42101 /* "glProgramUniform2i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IEXTPROC +epoxy_glProgramUniform2iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42125 /* "glProgramUniform2iEXT" */, + 42125 /* "glProgramUniform2iEXT" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 42125 /* "glProgramUniform2iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IVPROC +epoxy_glProgramUniform2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42167 /* "glProgramUniform2ivEXT" */, + 42167 /* "glProgramUniform2ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42147 /* "glProgramUniform2iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IVEXTPROC +epoxy_glProgramUniform2ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42167 /* "glProgramUniform2ivEXT" */, + 42167 /* "glProgramUniform2ivEXT" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42167 /* "glProgramUniform2ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIPROC +epoxy_glProgramUniform2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42310 /* "glProgramUniform2uiEXT" */, + 42310 /* "glProgramUniform2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42190 /* "glProgramUniform2ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UI64ARBPROC +epoxy_glProgramUniform2ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42210 /* glProgramUniform2ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM2UI64NVPROC +epoxy_glProgramUniform2ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42235 /* "glProgramUniform2ui64NV" */, + 42235 /* "glProgramUniform2ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42235 /* "glProgramUniform2ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UI64VARBPROC +epoxy_glProgramUniform2ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42259 /* glProgramUniform2ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM2UI64VNVPROC +epoxy_glProgramUniform2ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42285 /* "glProgramUniform2ui64vNV" */, + 42285 /* "glProgramUniform2ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42285 /* "glProgramUniform2ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIEXTPROC +epoxy_glProgramUniform2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42310 /* "glProgramUniform2uiEXT" */, + 42310 /* "glProgramUniform2uiEXT" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 42310 /* "glProgramUniform2uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIVPROC +epoxy_glProgramUniform2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42354 /* "glProgramUniform2uivEXT" */, + 42354 /* "glProgramUniform2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42333 /* "glProgramUniform2uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIVEXTPROC +epoxy_glProgramUniform2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42354 /* "glProgramUniform2uivEXT" */, + 42354 /* "glProgramUniform2uivEXT" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42354 /* "glProgramUniform2uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DPROC +epoxy_glProgramUniform3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42378 /* "glProgramUniform3d" */, + 42378 /* "glProgramUniform3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 42378 /* "glProgramUniform3d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DEXTPROC +epoxy_glProgramUniform3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42397 /* glProgramUniform3dEXT */); +} + +static PFNGLPROGRAMUNIFORM3DVPROC +epoxy_glProgramUniform3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42419 /* "glProgramUniform3dv" */, + 42419 /* "glProgramUniform3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42419 /* "glProgramUniform3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DVEXTPROC +epoxy_glProgramUniform3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42439 /* glProgramUniform3dvEXT */); +} + +static PFNGLPROGRAMUNIFORM3FPROC +epoxy_glProgramUniform3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42481 /* "glProgramUniform3fEXT" */, + 42481 /* "glProgramUniform3fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42462 /* "glProgramUniform3f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FEXTPROC +epoxy_glProgramUniform3fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42481 /* "glProgramUniform3fEXT" */, + 42481 /* "glProgramUniform3fEXT" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 42481 /* "glProgramUniform3fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FVPROC +epoxy_glProgramUniform3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42523 /* "glProgramUniform3fvEXT" */, + 42523 /* "glProgramUniform3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42503 /* "glProgramUniform3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FVEXTPROC +epoxy_glProgramUniform3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42523 /* "glProgramUniform3fvEXT" */, + 42523 /* "glProgramUniform3fvEXT" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42523 /* "glProgramUniform3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IPROC +epoxy_glProgramUniform3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42661 /* "glProgramUniform3iEXT" */, + 42661 /* "glProgramUniform3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42546 /* "glProgramUniform3i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3I64ARBPROC +epoxy_glProgramUniform3i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42565 /* glProgramUniform3i64ARB */); +} + +static PFNGLPROGRAMUNIFORM3I64NVPROC +epoxy_glProgramUniform3i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42589 /* "glProgramUniform3i64NV" */, + 42589 /* "glProgramUniform3i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42589 /* "glProgramUniform3i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3I64VARBPROC +epoxy_glProgramUniform3i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42612 /* glProgramUniform3i64vARB */); +} + +static PFNGLPROGRAMUNIFORM3I64VNVPROC +epoxy_glProgramUniform3i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42637 /* "glProgramUniform3i64vNV" */, + 42637 /* "glProgramUniform3i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42637 /* "glProgramUniform3i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IEXTPROC +epoxy_glProgramUniform3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42661 /* "glProgramUniform3iEXT" */, + 42661 /* "glProgramUniform3iEXT" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 42661 /* "glProgramUniform3iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IVPROC +epoxy_glProgramUniform3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42703 /* "glProgramUniform3ivEXT" */, + 42703 /* "glProgramUniform3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42683 /* "glProgramUniform3iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IVEXTPROC +epoxy_glProgramUniform3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42703 /* "glProgramUniform3ivEXT" */, + 42703 /* "glProgramUniform3ivEXT" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42703 /* "glProgramUniform3ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIPROC +epoxy_glProgramUniform3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42846 /* "glProgramUniform3uiEXT" */, + 42846 /* "glProgramUniform3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42726 /* "glProgramUniform3ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UI64ARBPROC +epoxy_glProgramUniform3ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42746 /* glProgramUniform3ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM3UI64NVPROC +epoxy_glProgramUniform3ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42771 /* "glProgramUniform3ui64NV" */, + 42771 /* "glProgramUniform3ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42771 /* "glProgramUniform3ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UI64VARBPROC +epoxy_glProgramUniform3ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42795 /* glProgramUniform3ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM3UI64VNVPROC +epoxy_glProgramUniform3ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42821 /* "glProgramUniform3ui64vNV" */, + 42821 /* "glProgramUniform3ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42821 /* "glProgramUniform3ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIEXTPROC +epoxy_glProgramUniform3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42846 /* "glProgramUniform3uiEXT" */, + 42846 /* "glProgramUniform3uiEXT" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 42846 /* "glProgramUniform3uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIVPROC +epoxy_glProgramUniform3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42890 /* "glProgramUniform3uivEXT" */, + 42890 /* "glProgramUniform3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42869 /* "glProgramUniform3uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIVEXTPROC +epoxy_glProgramUniform3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42890 /* "glProgramUniform3uivEXT" */, + 42890 /* "glProgramUniform3uivEXT" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42890 /* "glProgramUniform3uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DPROC +epoxy_glProgramUniform4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42914 /* "glProgramUniform4d" */, + 42914 /* "glProgramUniform4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 42914 /* "glProgramUniform4d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DEXTPROC +epoxy_glProgramUniform4dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42933 /* glProgramUniform4dEXT */); +} + +static PFNGLPROGRAMUNIFORM4DVPROC +epoxy_glProgramUniform4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42955 /* "glProgramUniform4dv" */, + 42955 /* "glProgramUniform4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42955 /* "glProgramUniform4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DVEXTPROC +epoxy_glProgramUniform4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42975 /* glProgramUniform4dvEXT */); +} + +static PFNGLPROGRAMUNIFORM4FPROC +epoxy_glProgramUniform4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 43017 /* "glProgramUniform4fEXT" */, + 43017 /* "glProgramUniform4fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42998 /* "glProgramUniform4f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FEXTPROC +epoxy_glProgramUniform4fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43017 /* "glProgramUniform4fEXT" */, + 43017 /* "glProgramUniform4fEXT" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 43017 /* "glProgramUniform4fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FVPROC +epoxy_glProgramUniform4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43059 /* "glProgramUniform4fvEXT" */, + 43059 /* "glProgramUniform4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43039 /* "glProgramUniform4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FVEXTPROC +epoxy_glProgramUniform4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43059 /* "glProgramUniform4fvEXT" */, + 43059 /* "glProgramUniform4fvEXT" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43059 /* "glProgramUniform4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IPROC +epoxy_glProgramUniform4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43197 /* "glProgramUniform4iEXT" */, + 43197 /* "glProgramUniform4iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43082 /* "glProgramUniform4i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4I64ARBPROC +epoxy_glProgramUniform4i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43101 /* glProgramUniform4i64ARB */); +} + +static PFNGLPROGRAMUNIFORM4I64NVPROC +epoxy_glProgramUniform4i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43125 /* "glProgramUniform4i64NV" */, + 43125 /* "glProgramUniform4i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43125 /* "glProgramUniform4i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4I64VARBPROC +epoxy_glProgramUniform4i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43148 /* glProgramUniform4i64vARB */); +} + +static PFNGLPROGRAMUNIFORM4I64VNVPROC +epoxy_glProgramUniform4i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43173 /* "glProgramUniform4i64vNV" */, + 43173 /* "glProgramUniform4i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43173 /* "glProgramUniform4i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IEXTPROC +epoxy_glProgramUniform4iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43197 /* "glProgramUniform4iEXT" */, + 43197 /* "glProgramUniform4iEXT" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 43197 /* "glProgramUniform4iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IVPROC +epoxy_glProgramUniform4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43239 /* "glProgramUniform4ivEXT" */, + 43239 /* "glProgramUniform4ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43219 /* "glProgramUniform4iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IVEXTPROC +epoxy_glProgramUniform4ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43239 /* "glProgramUniform4ivEXT" */, + 43239 /* "glProgramUniform4ivEXT" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43239 /* "glProgramUniform4ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIPROC +epoxy_glProgramUniform4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43382 /* "glProgramUniform4uiEXT" */, + 43382 /* "glProgramUniform4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43262 /* "glProgramUniform4ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UI64ARBPROC +epoxy_glProgramUniform4ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43282 /* glProgramUniform4ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM4UI64NVPROC +epoxy_glProgramUniform4ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43307 /* "glProgramUniform4ui64NV" */, + 43307 /* "glProgramUniform4ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43307 /* "glProgramUniform4ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UI64VARBPROC +epoxy_glProgramUniform4ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43331 /* glProgramUniform4ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM4UI64VNVPROC +epoxy_glProgramUniform4ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43357 /* "glProgramUniform4ui64vNV" */, + 43357 /* "glProgramUniform4ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43357 /* "glProgramUniform4ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIEXTPROC +epoxy_glProgramUniform4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43382 /* "glProgramUniform4uiEXT" */, + 43382 /* "glProgramUniform4uiEXT" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 43382 /* "glProgramUniform4uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIVPROC +epoxy_glProgramUniform4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43426 /* "glProgramUniform4uivEXT" */, + 43426 /* "glProgramUniform4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43405 /* "glProgramUniform4uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIVEXTPROC +epoxy_glProgramUniform4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43426 /* "glProgramUniform4uivEXT" */, + 43426 /* "glProgramUniform4uivEXT" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43426 /* "glProgramUniform4uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC +epoxy_glProgramUniformHandleui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 43450 /* glProgramUniformHandleui64ARB */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC +epoxy_glProgramUniformHandleui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 43480 /* glProgramUniformHandleui64NV */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC +epoxy_glProgramUniformHandleui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 43509 /* glProgramUniformHandleui64vARB */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC +epoxy_glProgramUniformHandleui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 43540 /* glProgramUniformHandleui64vNV */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2DVPROC +epoxy_glProgramUniformMatrix2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43570 /* "glProgramUniformMatrix2dv" */, + 43570 /* "glProgramUniformMatrix2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43570 /* "glProgramUniformMatrix2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC +epoxy_glProgramUniformMatrix2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43596 /* glProgramUniformMatrix2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2FVPROC +epoxy_glProgramUniformMatrix2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43625 /* "glProgramUniformMatrix2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC +epoxy_glProgramUniformMatrix2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43651 /* "glProgramUniformMatrix2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC +epoxy_glProgramUniformMatrix2x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43680 /* "glProgramUniformMatrix2x3dv" */, + 43680 /* "glProgramUniformMatrix2x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43680 /* "glProgramUniformMatrix2x3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC +epoxy_glProgramUniformMatrix2x3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43708 /* glProgramUniformMatrix2x3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC +epoxy_glProgramUniformMatrix2x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43739 /* "glProgramUniformMatrix2x3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC +epoxy_glProgramUniformMatrix2x3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC +epoxy_glProgramUniformMatrix2x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43798 /* "glProgramUniformMatrix2x4dv" */, + 43798 /* "glProgramUniformMatrix2x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43798 /* "glProgramUniformMatrix2x4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC +epoxy_glProgramUniformMatrix2x4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43826 /* glProgramUniformMatrix2x4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC +epoxy_glProgramUniformMatrix2x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43857 /* "glProgramUniformMatrix2x4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC +epoxy_glProgramUniformMatrix2x4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3DVPROC +epoxy_glProgramUniformMatrix3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43916 /* "glProgramUniformMatrix3dv" */, + 43916 /* "glProgramUniformMatrix3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43916 /* "glProgramUniformMatrix3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC +epoxy_glProgramUniformMatrix3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43942 /* glProgramUniformMatrix3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3FVPROC +epoxy_glProgramUniformMatrix3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43971 /* "glProgramUniformMatrix3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC +epoxy_glProgramUniformMatrix3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43997 /* "glProgramUniformMatrix3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC +epoxy_glProgramUniformMatrix3x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44026 /* "glProgramUniformMatrix3x2dv" */, + 44026 /* "glProgramUniformMatrix3x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44026 /* "glProgramUniformMatrix3x2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC +epoxy_glProgramUniformMatrix3x2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44054 /* glProgramUniformMatrix3x2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC +epoxy_glProgramUniformMatrix3x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44085 /* "glProgramUniformMatrix3x2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC +epoxy_glProgramUniformMatrix3x2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC +epoxy_glProgramUniformMatrix3x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44144 /* "glProgramUniformMatrix3x4dv" */, + 44144 /* "glProgramUniformMatrix3x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44144 /* "glProgramUniformMatrix3x4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC +epoxy_glProgramUniformMatrix3x4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44172 /* glProgramUniformMatrix3x4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC +epoxy_glProgramUniformMatrix3x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44203 /* "glProgramUniformMatrix3x4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC +epoxy_glProgramUniformMatrix3x4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4DVPROC +epoxy_glProgramUniformMatrix4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44262 /* "glProgramUniformMatrix4dv" */, + 44262 /* "glProgramUniformMatrix4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44262 /* "glProgramUniformMatrix4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC +epoxy_glProgramUniformMatrix4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44288 /* glProgramUniformMatrix4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4FVPROC +epoxy_glProgramUniformMatrix4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44317 /* "glProgramUniformMatrix4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC +epoxy_glProgramUniformMatrix4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44343 /* "glProgramUniformMatrix4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC +epoxy_glProgramUniformMatrix4x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44372 /* "glProgramUniformMatrix4x2dv" */, + 44372 /* "glProgramUniformMatrix4x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44372 /* "glProgramUniformMatrix4x2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC +epoxy_glProgramUniformMatrix4x2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44400 /* glProgramUniformMatrix4x2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC +epoxy_glProgramUniformMatrix4x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44431 /* "glProgramUniformMatrix4x2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC +epoxy_glProgramUniformMatrix4x2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC +epoxy_glProgramUniformMatrix4x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44490 /* "glProgramUniformMatrix4x3dv" */, + 44490 /* "glProgramUniformMatrix4x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44490 /* "glProgramUniformMatrix4x3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC +epoxy_glProgramUniformMatrix4x3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44518 /* glProgramUniformMatrix4x3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC +epoxy_glProgramUniformMatrix4x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44549 /* "glProgramUniformMatrix4x3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC +epoxy_glProgramUniformMatrix4x3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMUI64NVPROC +epoxy_glProgramUniformui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 44608 /* glProgramUniformui64NV */); +} + +static PFNGLPROGRAMUNIFORMUI64VNVPROC +epoxy_glProgramUniformui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 44631 /* glProgramUniformui64vNV */); +} + +static PFNGLPROGRAMVERTEXLIMITNVPROC +epoxy_glProgramVertexLimitNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_geometry_program4, 44655 /* glProgramVertexLimitNV */); +} + +static PFNGLPROVOKINGVERTEXPROC +epoxy_glProvokingVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_provoking_vertex, + GL_extension_GL_EXT_provoking_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44678 /* "glProvokingVertex" */, + 44678 /* "glProvokingVertex" */, + 44696 /* "glProvokingVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44678 /* "glProvokingVertex" */, + providers, entrypoints); +} + +static PFNGLPROVOKINGVERTEXEXTPROC +epoxy_glProvokingVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_provoking_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_provoking_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44696 /* "glProvokingVertexEXT" */, + 44678 /* "glProvokingVertex" */, + 44678 /* "glProvokingVertex" */, + }; + return gl_provider_resolver(entrypoint_strings + 44696 /* "glProvokingVertexEXT" */, + providers, entrypoints); +} + +static PFNGLPUSHATTRIBPROC +epoxy_glPushAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44717 /* glPushAttrib */); +} + +static PFNGLPUSHCLIENTATTRIBPROC +epoxy_glPushClientAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 44730 /* glPushClientAttrib */); +} + +static PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC +epoxy_glPushClientAttribDefaultEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44749 /* glPushClientAttribDefaultEXT */); +} + +static PFNGLPUSHDEBUGGROUPPROC +epoxy_glPushDebugGroup_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44795 /* "glPushDebugGroupKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 44778 /* "glPushDebugGroup" */, + providers, entrypoints); +} + +static PFNGLPUSHDEBUGGROUPKHRPROC +epoxy_glPushDebugGroupKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44795 /* "glPushDebugGroupKHR" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + }; + return gl_provider_resolver(entrypoint_strings + 44795 /* "glPushDebugGroupKHR" */, + providers, entrypoints); +} + +static PFNGLPUSHGROUPMARKEREXTPROC +epoxy_glPushGroupMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 44815 /* glPushGroupMarkerEXT */); +} + +static PFNGLPUSHMATRIXPROC +epoxy_glPushMatrix_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44836 /* "glPushMatrix" */, + 44836 /* "glPushMatrix" */, + }; + return gl_provider_resolver(entrypoint_strings + 44836 /* "glPushMatrix" */, + providers, entrypoints); +} + +static PFNGLPUSHNAMEPROC +epoxy_glPushName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44849 /* glPushName */); +} + +static PFNGLQUERYCOUNTERPROC +epoxy_glQueryCounter_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44860 /* "glQueryCounter" */, + 44860 /* "glQueryCounter" */, + 44875 /* "glQueryCounterEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44860 /* "glQueryCounter" */, + providers, entrypoints); +} + +static PFNGLQUERYCOUNTEREXTPROC +epoxy_glQueryCounterEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44875 /* "glQueryCounterEXT" */, + 44860 /* "glQueryCounter" */, + 44860 /* "glQueryCounter" */, + }; + return gl_provider_resolver(entrypoint_strings + 44875 /* "glQueryCounterEXT" */, + providers, entrypoints); +} + +static PFNGLQUERYMATRIXXOESPROC +epoxy_glQueryMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_query_matrix, 44893 /* glQueryMatrixxOES */); +} + +static PFNGLQUERYOBJECTPARAMETERUIAMDPROC +epoxy_glQueryObjectParameteruiAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_occlusion_query_event, 44911 /* glQueryObjectParameteruiAMD */); +} + +static PFNGLRASTERPOS2DPROC +epoxy_glRasterPos2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44939 /* glRasterPos2d */); +} + +static PFNGLRASTERPOS2DVPROC +epoxy_glRasterPos2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44953 /* glRasterPos2dv */); +} + +static PFNGLRASTERPOS2FPROC +epoxy_glRasterPos2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44968 /* glRasterPos2f */); +} + +static PFNGLRASTERPOS2FVPROC +epoxy_glRasterPos2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44982 /* glRasterPos2fv */); +} + +static PFNGLRASTERPOS2IPROC +epoxy_glRasterPos2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44997 /* glRasterPos2i */); +} + +static PFNGLRASTERPOS2IVPROC +epoxy_glRasterPos2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45011 /* glRasterPos2iv */); +} + +static PFNGLRASTERPOS2SPROC +epoxy_glRasterPos2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45026 /* glRasterPos2s */); +} + +static PFNGLRASTERPOS2SVPROC +epoxy_glRasterPos2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45040 /* glRasterPos2sv */); +} + +static PFNGLRASTERPOS2XOESPROC +epoxy_glRasterPos2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45055 /* glRasterPos2xOES */); +} + +static PFNGLRASTERPOS2XVOESPROC +epoxy_glRasterPos2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45072 /* glRasterPos2xvOES */); +} + +static PFNGLRASTERPOS3DPROC +epoxy_glRasterPos3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45090 /* glRasterPos3d */); +} + +static PFNGLRASTERPOS3DVPROC +epoxy_glRasterPos3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45104 /* glRasterPos3dv */); +} + +static PFNGLRASTERPOS3FPROC +epoxy_glRasterPos3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45119 /* glRasterPos3f */); +} + +static PFNGLRASTERPOS3FVPROC +epoxy_glRasterPos3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45133 /* glRasterPos3fv */); +} + +static PFNGLRASTERPOS3IPROC +epoxy_glRasterPos3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45148 /* glRasterPos3i */); +} + +static PFNGLRASTERPOS3IVPROC +epoxy_glRasterPos3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45162 /* glRasterPos3iv */); +} + +static PFNGLRASTERPOS3SPROC +epoxy_glRasterPos3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45177 /* glRasterPos3s */); +} + +static PFNGLRASTERPOS3SVPROC +epoxy_glRasterPos3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45191 /* glRasterPos3sv */); +} + +static PFNGLRASTERPOS3XOESPROC +epoxy_glRasterPos3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45206 /* glRasterPos3xOES */); +} + +static PFNGLRASTERPOS3XVOESPROC +epoxy_glRasterPos3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45223 /* glRasterPos3xvOES */); +} + +static PFNGLRASTERPOS4DPROC +epoxy_glRasterPos4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45241 /* glRasterPos4d */); +} + +static PFNGLRASTERPOS4DVPROC +epoxy_glRasterPos4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45255 /* glRasterPos4dv */); +} + +static PFNGLRASTERPOS4FPROC +epoxy_glRasterPos4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45270 /* glRasterPos4f */); +} + +static PFNGLRASTERPOS4FVPROC +epoxy_glRasterPos4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45284 /* glRasterPos4fv */); +} + +static PFNGLRASTERPOS4IPROC +epoxy_glRasterPos4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45299 /* glRasterPos4i */); +} + +static PFNGLRASTERPOS4IVPROC +epoxy_glRasterPos4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45313 /* glRasterPos4iv */); +} + +static PFNGLRASTERPOS4SPROC +epoxy_glRasterPos4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45328 /* glRasterPos4s */); +} + +static PFNGLRASTERPOS4SVPROC +epoxy_glRasterPos4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45342 /* glRasterPos4sv */); +} + +static PFNGLRASTERPOS4XOESPROC +epoxy_glRasterPos4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45357 /* glRasterPos4xOES */); +} + +static PFNGLRASTERPOS4XVOESPROC +epoxy_glRasterPos4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45374 /* glRasterPos4xvOES */); +} + +static PFNGLRASTERSAMPLESEXTPROC +epoxy_glRasterSamplesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_raster_multisample, + GL_extension_GL_EXT_texture_filter_minmax, + GL_extension_GL_NV_framebuffer_mixed_samples, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45392 /* "glRasterSamplesEXT" */, + 45392 /* "glRasterSamplesEXT" */, + 45392 /* "glRasterSamplesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45392 /* "glRasterSamplesEXT" */, + providers, entrypoints); +} + +static PFNGLREADBUFFERPROC +epoxy_glReadBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45411 /* "glReadBuffer" */, + 45411 /* "glReadBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 45411 /* "glReadBuffer" */, + providers, entrypoints); +} + +static PFNGLREADBUFFERINDEXEDEXTPROC +epoxy_glReadBufferIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 45424 /* glReadBufferIndexedEXT */); +} + +static PFNGLREADBUFFERNVPROC +epoxy_glReadBufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_read_buffer, 45447 /* glReadBufferNV */); +} + +static PFNGLREADINSTRUMENTSSGIXPROC +epoxy_glReadInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 45462 /* glReadInstrumentsSGIX */); +} + +static PFNGLREADPIXELSPROC +epoxy_glReadPixels_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45484 /* "glReadPixels" */, + 45484 /* "glReadPixels" */, + 45484 /* "glReadPixels" */, + }; + return gl_provider_resolver(entrypoint_strings + 45484 /* "glReadPixels" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSPROC +epoxy_glReadnPixels_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_EXT_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45528 /* "glReadnPixelsEXT" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45497 /* "glReadnPixels" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSARBPROC +epoxy_glReadnPixelsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_EXT_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45511 /* "glReadnPixelsARB" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45528 /* "glReadnPixelsEXT" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45511 /* "glReadnPixelsARB" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSEXTPROC +epoxy_glReadnPixelsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45528 /* "glReadnPixelsEXT" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45528 /* "glReadnPixelsEXT" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSKHRPROC +epoxy_glReadnPixelsKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_EXT_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45545 /* "glReadnPixelsKHR" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45528 /* "glReadnPixelsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45545 /* "glReadnPixelsKHR" */, + providers, entrypoints); +} + +static PFNGLRECTDPROC +epoxy_glRectd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45562 /* glRectd */); +} + +static PFNGLRECTDVPROC +epoxy_glRectdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45570 /* glRectdv */); +} + +static PFNGLRECTFPROC +epoxy_glRectf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45579 /* glRectf */); +} + +static PFNGLRECTFVPROC +epoxy_glRectfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45587 /* glRectfv */); +} + +static PFNGLRECTIPROC +epoxy_glRecti_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45596 /* glRecti */); +} + +static PFNGLRECTIVPROC +epoxy_glRectiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45604 /* glRectiv */); +} + +static PFNGLRECTSPROC +epoxy_glRects_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45613 /* glRects */); +} + +static PFNGLRECTSVPROC +epoxy_glRectsv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45621 /* glRectsv */); +} + +static PFNGLRECTXOESPROC +epoxy_glRectxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45630 /* glRectxOES */); +} + +static PFNGLRECTXVOESPROC +epoxy_glRectxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45641 /* glRectxvOES */); +} + +static PFNGLREFERENCEPLANESGIXPROC +epoxy_glReferencePlaneSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_reference_plane, 45653 /* glReferencePlaneSGIX */); +} + +static PFNGLRELEASESHADERCOMPILERPROC +epoxy_glReleaseShaderCompiler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45674 /* "glReleaseShaderCompiler" */, + 45674 /* "glReleaseShaderCompiler" */, + 45674 /* "glReleaseShaderCompiler" */, + }; + return gl_provider_resolver(entrypoint_strings + 45674 /* "glReleaseShaderCompiler" */, + providers, entrypoints); +} + +static PFNGLRENDERMODEPROC +epoxy_glRenderMode_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45698 /* glRenderMode */); +} + +static PFNGLRENDERBUFFERSTORAGEPROC +epoxy_glRenderbufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45733 /* "glRenderbufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45711 /* "glRenderbufferStorage" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEEXTPROC +epoxy_glRenderbufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45733 /* "glRenderbufferStorageEXT" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 45733 /* "glRenderbufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC +epoxy_glRenderbufferStorageMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + GL_extension_GL_NV_framebuffer_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45982 /* "glRenderbufferStorageMultisampleNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 45758 /* "glRenderbufferStorageMultisample" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC +epoxy_glRenderbufferStorageMultisampleANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_framebuffer_multisample, 45791 /* glRenderbufferStorageMultisampleANGLE */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC +epoxy_glRenderbufferStorageMultisampleAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_framebuffer_multisample, 45829 /* glRenderbufferStorageMultisampleAPPLE */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC +epoxy_glRenderbufferStorageMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_multisample_coverage, 45867 /* glRenderbufferStorageMultisampleCoverageNV */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC +epoxy_glRenderbufferStorageMultisampleEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_framebuffer_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45982 /* "glRenderbufferStorageMultisampleNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC +epoxy_glRenderbufferStorageMultisampleIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_multisampled_render_to_texture, 45946 /* glRenderbufferStorageMultisampleIMG */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC +epoxy_glRenderbufferStorageMultisampleNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_framebuffer_multisample, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45982 /* "glRenderbufferStorageMultisampleNV" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45982 /* "glRenderbufferStorageMultisampleNV" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEOESPROC +epoxy_glRenderbufferStorageOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 46017 /* glRenderbufferStorageOES */); +} + +static PFNGLREPLACEMENTCODEPOINTERSUNPROC +epoxy_glReplacementCodePointerSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46042 /* glReplacementCodePointerSUN */); +} + +static PFNGLREPLACEMENTCODEUBSUNPROC +epoxy_glReplacementCodeubSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46070 /* glReplacementCodeubSUN */); +} + +static PFNGLREPLACEMENTCODEUBVSUNPROC +epoxy_glReplacementCodeubvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46093 /* glReplacementCodeubvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46117 /* glReplacementCodeuiColor3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46155 /* glReplacementCodeuiColor3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46194 /* glReplacementCodeuiColor4fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46240 /* glReplacementCodeuiColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46287 /* glReplacementCodeuiColor4ubVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46326 /* glReplacementCodeuiColor4ubVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46366 /* glReplacementCodeuiNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46405 /* glReplacementCodeuiNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUISUNPROC +epoxy_glReplacementCodeuiSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46445 /* glReplacementCodeuiSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46468 /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46524 /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46581 /* glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46630 /* glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46680 /* glReplacementCodeuiTexCoord2fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46721 /* glReplacementCodeuiTexCoord2fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC +epoxy_glReplacementCodeuiVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46763 /* glReplacementCodeuiVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46794 /* glReplacementCodeuiVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUIVSUNPROC +epoxy_glReplacementCodeuivSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46826 /* glReplacementCodeuivSUN */); +} + +static PFNGLREPLACEMENTCODEUSSUNPROC +epoxy_glReplacementCodeusSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46850 /* glReplacementCodeusSUN */); +} + +static PFNGLREPLACEMENTCODEUSVSUNPROC +epoxy_glReplacementCodeusvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46873 /* glReplacementCodeusvSUN */); +} + +static PFNGLREQUESTRESIDENTPROGRAMSNVPROC +epoxy_glRequestResidentProgramsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 46897 /* glRequestResidentProgramsNV */); +} + +static PFNGLRESETHISTOGRAMPROC +epoxy_glResetHistogram_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46925 /* "glResetHistogram" */, + 46942 /* "glResetHistogramEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 46925 /* "glResetHistogram" */, + providers, entrypoints); +} + +static PFNGLRESETHISTOGRAMEXTPROC +epoxy_glResetHistogramEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46942 /* "glResetHistogramEXT" */, + 46925 /* "glResetHistogram" */, + }; + return gl_provider_resolver(entrypoint_strings + 46942 /* "glResetHistogramEXT" */, + providers, entrypoints); +} + +static PFNGLRESETMINMAXPROC +epoxy_glResetMinmax_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46962 /* "glResetMinmax" */, + 46976 /* "glResetMinmaxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 46962 /* "glResetMinmax" */, + providers, entrypoints); +} + +static PFNGLRESETMINMAXEXTPROC +epoxy_glResetMinmaxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46976 /* "glResetMinmaxEXT" */, + 46962 /* "glResetMinmax" */, + }; + return gl_provider_resolver(entrypoint_strings + 46976 /* "glResetMinmaxEXT" */, + providers, entrypoints); +} + +static PFNGLRESIZEBUFFERSMESAPROC +epoxy_glResizeBuffersMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_resize_buffers, 46993 /* glResizeBuffersMESA */); +} + +static PFNGLRESOLVEDEPTHVALUESNVPROC +epoxy_glResolveDepthValuesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 47013 /* glResolveDepthValuesNV */); +} + +static PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC +epoxy_glResolveMultisampleFramebufferAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_framebuffer_multisample, 47036 /* glResolveMultisampleFramebufferAPPLE */); +} + +static PFNGLRESUMETRANSFORMFEEDBACKPROC +epoxy_glResumeTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47099 /* "glResumeTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47073 /* "glResumeTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLRESUMETRANSFORMFEEDBACKNVPROC +epoxy_glResumeTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47099 /* "glResumeTransformFeedbackNV" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 47099 /* "glResumeTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLROTATEDPROC +epoxy_glRotated_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 47127 /* glRotated */); +} + +static PFNGLROTATEFPROC +epoxy_glRotatef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47137 /* "glRotatef" */, + 47137 /* "glRotatef" */, + }; + return gl_provider_resolver(entrypoint_strings + 47137 /* "glRotatef" */, + providers, entrypoints); +} + +static PFNGLROTATEXPROC +epoxy_glRotatex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47147 /* glRotatex */); +} + +static PFNGLROTATEXOESPROC +epoxy_glRotatexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47157 /* glRotatexOES */); +} + +static PFNGLSAMPLECOVERAGEPROC +epoxy_glSampleCoverage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47187 /* "glSampleCoverageARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 47170 /* "glSampleCoverage" */, + providers, entrypoints); +} + +static PFNGLSAMPLECOVERAGEARBPROC +epoxy_glSampleCoverageARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multisample, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47187 /* "glSampleCoverageARB" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + }; + return gl_provider_resolver(entrypoint_strings + 47187 /* "glSampleCoverageARB" */, + providers, entrypoints); +} + +static PFNGLSAMPLECOVERAGEXPROC +epoxy_glSampleCoveragex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47207 /* glSampleCoveragex */); +} + +static PFNGLSAMPLECOVERAGEXOESPROC +epoxy_glSampleCoveragexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47225 /* glSampleCoveragexOES */); +} + +static PFNGLSAMPLEMAPATIPROC +epoxy_glSampleMapATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 47246 /* glSampleMapATI */); +} + +static PFNGLSAMPLEMASKEXTPROC +epoxy_glSampleMaskEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multisample, + GL_extension_GL_SGIS_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47261 /* "glSampleMaskEXT" */, + 47299 /* "glSampleMaskSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 47261 /* "glSampleMaskEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLEMASKINDEXEDNVPROC +epoxy_glSampleMaskIndexedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_explicit_multisample, 47277 /* glSampleMaskIndexedNV */); +} + +static PFNGLSAMPLEMASKSGISPROC +epoxy_glSampleMaskSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_multisample, + GL_extension_GL_EXT_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47299 /* "glSampleMaskSGIS" */, + 47261 /* "glSampleMaskEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47299 /* "glSampleMaskSGIS" */, + providers, entrypoints); +} + +static PFNGLSAMPLEMASKIPROC +epoxy_glSampleMaski_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47316 /* "glSampleMaski" */, + 47316 /* "glSampleMaski" */, + 47316 /* "glSampleMaski" */, + }; + return gl_provider_resolver(entrypoint_strings + 47316 /* "glSampleMaski" */, + providers, entrypoints); +} + +static PFNGLSAMPLEPATTERNEXTPROC +epoxy_glSamplePatternEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multisample, + GL_extension_GL_SGIS_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47330 /* "glSamplePatternEXT" */, + 47349 /* "glSamplePatternSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 47330 /* "glSamplePatternEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLEPATTERNSGISPROC +epoxy_glSamplePatternSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_multisample, + GL_extension_GL_EXT_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47349 /* "glSamplePatternSGIS" */, + 47330 /* "glSamplePatternEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47349 /* "glSamplePatternSGIS" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVPROC +epoxy_glSamplerParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47391 /* "glSamplerParameterIivEXT" */, + 47416 /* "glSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47369 /* "glSamplerParameterIiv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVEXTPROC +epoxy_glSamplerParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47391 /* "glSamplerParameterIivEXT" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47416 /* "glSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47391 /* "glSamplerParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVOESPROC +epoxy_glSamplerParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47416 /* "glSamplerParameterIivOES" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47391 /* "glSamplerParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47416 /* "glSamplerParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVPROC +epoxy_glSamplerParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47464 /* "glSamplerParameterIuivEXT" */, + 47490 /* "glSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47441 /* "glSamplerParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVEXTPROC +epoxy_glSamplerParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47464 /* "glSamplerParameterIuivEXT" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47490 /* "glSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47464 /* "glSamplerParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVOESPROC +epoxy_glSamplerParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47490 /* "glSamplerParameterIuivOES" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47464 /* "glSamplerParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47490 /* "glSamplerParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERFPROC +epoxy_glSamplerParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47516 /* "glSamplerParameterf" */, + 47516 /* "glSamplerParameterf" */, + 47516 /* "glSamplerParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 47516 /* "glSamplerParameterf" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERFVPROC +epoxy_glSamplerParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47536 /* "glSamplerParameterfv" */, + 47536 /* "glSamplerParameterfv" */, + 47536 /* "glSamplerParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47536 /* "glSamplerParameterfv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIPROC +epoxy_glSamplerParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47557 /* "glSamplerParameteri" */, + 47557 /* "glSamplerParameteri" */, + 47557 /* "glSamplerParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 47557 /* "glSamplerParameteri" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIVPROC +epoxy_glSamplerParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47577 /* "glSamplerParameteriv" */, + 47577 /* "glSamplerParameteriv" */, + 47577 /* "glSamplerParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47577 /* "glSamplerParameteriv" */, + providers, entrypoints); +} + +static PFNGLSCALEDPROC +epoxy_glScaled_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 47598 /* glScaled */); +} + +static PFNGLSCALEFPROC +epoxy_glScalef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47607 /* "glScalef" */, + 47607 /* "glScalef" */, + }; + return gl_provider_resolver(entrypoint_strings + 47607 /* "glScalef" */, + providers, entrypoints); +} + +static PFNGLSCALEXPROC +epoxy_glScalex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47616 /* glScalex */); +} + +static PFNGLSCALEXOESPROC +epoxy_glScalexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47625 /* glScalexOES */); +} + +static PFNGLSCISSORPROC +epoxy_glScissor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47637 /* "glScissor" */, + 47637 /* "glScissor" */, + 47637 /* "glScissor" */, + }; + return gl_provider_resolver(entrypoint_strings + 47637 /* "glScissor" */, + providers, entrypoints); +} + +static PFNGLSCISSORARRAYVPROC +epoxy_glScissorArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47647 /* "glScissorArrayv" */, + 47647 /* "glScissorArrayv" */, + 47663 /* "glScissorArrayvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47647 /* "glScissorArrayv" */, + providers, entrypoints); +} + +static PFNGLSCISSORARRAYVNVPROC +epoxy_glScissorArrayvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47663 /* "glScissorArrayvNV" */, + 47647 /* "glScissorArrayv" */, + 47647 /* "glScissorArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47663 /* "glScissorArrayvNV" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDPROC +epoxy_glScissorIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47681 /* "glScissorIndexed" */, + 47681 /* "glScissorIndexed" */, + 47698 /* "glScissorIndexedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47681 /* "glScissorIndexed" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDNVPROC +epoxy_glScissorIndexedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47698 /* "glScissorIndexedNV" */, + 47681 /* "glScissorIndexed" */, + 47681 /* "glScissorIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 47698 /* "glScissorIndexedNV" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDVPROC +epoxy_glScissorIndexedv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47717 /* "glScissorIndexedv" */, + 47717 /* "glScissorIndexedv" */, + 47735 /* "glScissorIndexedvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47717 /* "glScissorIndexedv" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDVNVPROC +epoxy_glScissorIndexedvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47735 /* "glScissorIndexedvNV" */, + 47717 /* "glScissorIndexedv" */, + 47717 /* "glScissorIndexedv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47735 /* "glScissorIndexedvNV" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BPROC +epoxy_glSecondaryColor3b_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47755 /* "glSecondaryColor3b" */, + 47774 /* "glSecondaryColor3bEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47755 /* "glSecondaryColor3b" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BEXTPROC +epoxy_glSecondaryColor3bEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47774 /* "glSecondaryColor3bEXT" */, + 47755 /* "glSecondaryColor3b" */, + }; + return gl_provider_resolver(entrypoint_strings + 47774 /* "glSecondaryColor3bEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BVPROC +epoxy_glSecondaryColor3bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47796 /* "glSecondaryColor3bv" */, + 47816 /* "glSecondaryColor3bvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47796 /* "glSecondaryColor3bv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BVEXTPROC +epoxy_glSecondaryColor3bvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47816 /* "glSecondaryColor3bvEXT" */, + 47796 /* "glSecondaryColor3bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47816 /* "glSecondaryColor3bvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DPROC +epoxy_glSecondaryColor3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47839 /* "glSecondaryColor3d" */, + 47858 /* "glSecondaryColor3dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47839 /* "glSecondaryColor3d" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DEXTPROC +epoxy_glSecondaryColor3dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47858 /* "glSecondaryColor3dEXT" */, + 47839 /* "glSecondaryColor3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 47858 /* "glSecondaryColor3dEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DVPROC +epoxy_glSecondaryColor3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47880 /* "glSecondaryColor3dv" */, + 47900 /* "glSecondaryColor3dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47880 /* "glSecondaryColor3dv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DVEXTPROC +epoxy_glSecondaryColor3dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47900 /* "glSecondaryColor3dvEXT" */, + 47880 /* "glSecondaryColor3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47900 /* "glSecondaryColor3dvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FPROC +epoxy_glSecondaryColor3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47923 /* "glSecondaryColor3f" */, + 47942 /* "glSecondaryColor3fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47923 /* "glSecondaryColor3f" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FEXTPROC +epoxy_glSecondaryColor3fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47942 /* "glSecondaryColor3fEXT" */, + 47923 /* "glSecondaryColor3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 47942 /* "glSecondaryColor3fEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FVPROC +epoxy_glSecondaryColor3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47964 /* "glSecondaryColor3fv" */, + 47984 /* "glSecondaryColor3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47964 /* "glSecondaryColor3fv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FVEXTPROC +epoxy_glSecondaryColor3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47984 /* "glSecondaryColor3fvEXT" */, + 47964 /* "glSecondaryColor3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47984 /* "glSecondaryColor3fvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3HNVPROC +epoxy_glSecondaryColor3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 48007 /* glSecondaryColor3hNV */); +} + +static PFNGLSECONDARYCOLOR3HVNVPROC +epoxy_glSecondaryColor3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 48028 /* glSecondaryColor3hvNV */); +} + +static PFNGLSECONDARYCOLOR3IPROC +epoxy_glSecondaryColor3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48050 /* "glSecondaryColor3i" */, + 48069 /* "glSecondaryColor3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48050 /* "glSecondaryColor3i" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IEXTPROC +epoxy_glSecondaryColor3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48069 /* "glSecondaryColor3iEXT" */, + 48050 /* "glSecondaryColor3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 48069 /* "glSecondaryColor3iEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IVPROC +epoxy_glSecondaryColor3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48091 /* "glSecondaryColor3iv" */, + 48111 /* "glSecondaryColor3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48091 /* "glSecondaryColor3iv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IVEXTPROC +epoxy_glSecondaryColor3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48111 /* "glSecondaryColor3ivEXT" */, + 48091 /* "glSecondaryColor3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48111 /* "glSecondaryColor3ivEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SPROC +epoxy_glSecondaryColor3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48134 /* "glSecondaryColor3s" */, + 48153 /* "glSecondaryColor3sEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48134 /* "glSecondaryColor3s" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SEXTPROC +epoxy_glSecondaryColor3sEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48153 /* "glSecondaryColor3sEXT" */, + 48134 /* "glSecondaryColor3s" */, + }; + return gl_provider_resolver(entrypoint_strings + 48153 /* "glSecondaryColor3sEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SVPROC +epoxy_glSecondaryColor3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48175 /* "glSecondaryColor3sv" */, + 48195 /* "glSecondaryColor3svEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48175 /* "glSecondaryColor3sv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SVEXTPROC +epoxy_glSecondaryColor3svEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48195 /* "glSecondaryColor3svEXT" */, + 48175 /* "glSecondaryColor3sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48195 /* "glSecondaryColor3svEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBPROC +epoxy_glSecondaryColor3ub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48218 /* "glSecondaryColor3ub" */, + 48238 /* "glSecondaryColor3ubEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48218 /* "glSecondaryColor3ub" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBEXTPROC +epoxy_glSecondaryColor3ubEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48238 /* "glSecondaryColor3ubEXT" */, + 48218 /* "glSecondaryColor3ub" */, + }; + return gl_provider_resolver(entrypoint_strings + 48238 /* "glSecondaryColor3ubEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBVPROC +epoxy_glSecondaryColor3ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48261 /* "glSecondaryColor3ubv" */, + 48282 /* "glSecondaryColor3ubvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48261 /* "glSecondaryColor3ubv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBVEXTPROC +epoxy_glSecondaryColor3ubvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48282 /* "glSecondaryColor3ubvEXT" */, + 48261 /* "glSecondaryColor3ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48282 /* "glSecondaryColor3ubvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIPROC +epoxy_glSecondaryColor3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48306 /* "glSecondaryColor3ui" */, + 48326 /* "glSecondaryColor3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48306 /* "glSecondaryColor3ui" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIEXTPROC +epoxy_glSecondaryColor3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48326 /* "glSecondaryColor3uiEXT" */, + 48306 /* "glSecondaryColor3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 48326 /* "glSecondaryColor3uiEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIVPROC +epoxy_glSecondaryColor3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48349 /* "glSecondaryColor3uiv" */, + 48370 /* "glSecondaryColor3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48349 /* "glSecondaryColor3uiv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIVEXTPROC +epoxy_glSecondaryColor3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48370 /* "glSecondaryColor3uivEXT" */, + 48349 /* "glSecondaryColor3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48370 /* "glSecondaryColor3uivEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USPROC +epoxy_glSecondaryColor3us_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48394 /* "glSecondaryColor3us" */, + 48414 /* "glSecondaryColor3usEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48394 /* "glSecondaryColor3us" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USEXTPROC +epoxy_glSecondaryColor3usEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48414 /* "glSecondaryColor3usEXT" */, + 48394 /* "glSecondaryColor3us" */, + }; + return gl_provider_resolver(entrypoint_strings + 48414 /* "glSecondaryColor3usEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USVPROC +epoxy_glSecondaryColor3usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48437 /* "glSecondaryColor3usv" */, + 48458 /* "glSecondaryColor3usvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48437 /* "glSecondaryColor3usv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USVEXTPROC +epoxy_glSecondaryColor3usvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48458 /* "glSecondaryColor3usvEXT" */, + 48437 /* "glSecondaryColor3usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48458 /* "glSecondaryColor3usvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORFORMATNVPROC +epoxy_glSecondaryColorFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 48482 /* glSecondaryColorFormatNV */); +} + +static PFNGLSECONDARYCOLORP3UIPROC +epoxy_glSecondaryColorP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48507 /* "glSecondaryColorP3ui" */, + 48507 /* "glSecondaryColorP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 48507 /* "glSecondaryColorP3ui" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORP3UIVPROC +epoxy_glSecondaryColorP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48528 /* "glSecondaryColorP3uiv" */, + 48528 /* "glSecondaryColorP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48528 /* "glSecondaryColorP3uiv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTERPROC +epoxy_glSecondaryColorPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48550 /* "glSecondaryColorPointer" */, + 48574 /* "glSecondaryColorPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48550 /* "glSecondaryColorPointer" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTEREXTPROC +epoxy_glSecondaryColorPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48574 /* "glSecondaryColorPointerEXT" */, + 48550 /* "glSecondaryColorPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 48574 /* "glSecondaryColorPointerEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTERLISTIBMPROC +epoxy_glSecondaryColorPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 48601 /* glSecondaryColorPointerListIBM */); +} + +static PFNGLSELECTBUFFERPROC +epoxy_glSelectBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 48632 /* glSelectBuffer */); +} + +static PFNGLSELECTPERFMONITORCOUNTERSAMDPROC +epoxy_glSelectPerfMonitorCountersAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 48647 /* glSelectPerfMonitorCountersAMD */); +} + +static PFNGLSEPARABLEFILTER2DPROC +epoxy_glSeparableFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48678 /* "glSeparableFilter2D" */, + 48698 /* "glSeparableFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48678 /* "glSeparableFilter2D" */, + providers, entrypoints); +} + +static PFNGLSEPARABLEFILTER2DEXTPROC +epoxy_glSeparableFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48698 /* "glSeparableFilter2DEXT" */, + 48678 /* "glSeparableFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 48698 /* "glSeparableFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLSETFENCEAPPLEPROC +epoxy_glSetFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 48721 /* glSetFenceAPPLE */); +} + +static PFNGLSETFENCENVPROC +epoxy_glSetFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 48737 /* glSetFenceNV */); +} + +static PFNGLSETFRAGMENTSHADERCONSTANTATIPROC +epoxy_glSetFragmentShaderConstantATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 48750 /* glSetFragmentShaderConstantATI */); +} + +static PFNGLSETINVARIANTEXTPROC +epoxy_glSetInvariantEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48781 /* glSetInvariantEXT */); +} + +static PFNGLSETLOCALCONSTANTEXTPROC +epoxy_glSetLocalConstantEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48799 /* glSetLocalConstantEXT */); +} + +static PFNGLSETMULTISAMPLEFVAMDPROC +epoxy_glSetMultisamplefvAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sample_positions, 48821 /* glSetMultisamplefvAMD */); +} + +static PFNGLSHADEMODELPROC +epoxy_glShadeModel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48843 /* "glShadeModel" */, + 48843 /* "glShadeModel" */, + }; + return gl_provider_resolver(entrypoint_strings + 48843 /* "glShadeModel" */, + providers, entrypoints); +} + +static PFNGLSHADERBINARYPROC +epoxy_glShaderBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48856 /* "glShaderBinary" */, + 48856 /* "glShaderBinary" */, + 48856 /* "glShaderBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 48856 /* "glShaderBinary" */, + providers, entrypoints); +} + +static PFNGLSHADEROP1EXTPROC +epoxy_glShaderOp1EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48871 /* glShaderOp1EXT */); +} + +static PFNGLSHADEROP2EXTPROC +epoxy_glShaderOp2EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48886 /* glShaderOp2EXT */); +} + +static PFNGLSHADEROP3EXTPROC +epoxy_glShaderOp3EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48901 /* glShaderOp3EXT */); +} + +static PFNGLSHADERSOURCEPROC +epoxy_glShaderSource_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48916 /* "glShaderSource" */, + 48916 /* "glShaderSource" */, + 48931 /* "glShaderSourceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 48916 /* "glShaderSource" */, + providers, entrypoints); +} + +static PFNGLSHADERSOURCEARBPROC +epoxy_glShaderSourceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48931 /* "glShaderSourceARB" */, + 48916 /* "glShaderSource" */, + 48916 /* "glShaderSource" */, + }; + return gl_provider_resolver(entrypoint_strings + 48931 /* "glShaderSourceARB" */, + providers, entrypoints); +} + +static PFNGLSHADERSTORAGEBLOCKBINDINGPROC +epoxy_glShaderStorageBlockBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_shader_storage_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48949 /* "glShaderStorageBlockBinding" */, + 48949 /* "glShaderStorageBlockBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 48949 /* "glShaderStorageBlockBinding" */, + providers, entrypoints); +} + +static PFNGLSHARPENTEXFUNCSGISPROC +epoxy_glSharpenTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_sharpen_texture, 48977 /* glSharpenTexFuncSGIS */); +} + +static PFNGLSPRITEPARAMETERFSGIXPROC +epoxy_glSpriteParameterfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 48998 /* glSpriteParameterfSGIX */); +} + +static PFNGLSPRITEPARAMETERFVSGIXPROC +epoxy_glSpriteParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49021 /* glSpriteParameterfvSGIX */); +} + +static PFNGLSPRITEPARAMETERISGIXPROC +epoxy_glSpriteParameteriSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49045 /* glSpriteParameteriSGIX */); +} + +static PFNGLSPRITEPARAMETERIVSGIXPROC +epoxy_glSpriteParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49068 /* glSpriteParameterivSGIX */); +} + +static PFNGLSTARTINSTRUMENTSSGIXPROC +epoxy_glStartInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 49092 /* glStartInstrumentsSGIX */); +} + +static PFNGLSTARTTILINGQCOMPROC +epoxy_glStartTilingQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_tiled_rendering, 49115 /* glStartTilingQCOM */); +} + +static PFNGLSTATECAPTURENVPROC +epoxy_glStateCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 49133 /* glStateCaptureNV */); +} + +static PFNGLSTENCILCLEARTAGEXTPROC +epoxy_glStencilClearTagEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_stencil_clear_tag, 49150 /* glStencilClearTagEXT */); +} + +static PFNGLSTENCILFILLPATHINSTANCEDNVPROC +epoxy_glStencilFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49171 /* glStencilFillPathInstancedNV */); +} + +static PFNGLSTENCILFILLPATHNVPROC +epoxy_glStencilFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49200 /* glStencilFillPathNV */); +} + +static PFNGLSTENCILFUNCPROC +epoxy_glStencilFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49220 /* "glStencilFunc" */, + 49220 /* "glStencilFunc" */, + 49220 /* "glStencilFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 49220 /* "glStencilFunc" */, + providers, entrypoints); +} + +static PFNGLSTENCILFUNCSEPARATEPROC +epoxy_glStencilFuncSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49234 /* "glStencilFuncSeparate" */, + 49234 /* "glStencilFuncSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49234 /* "glStencilFuncSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILFUNCSEPARATEATIPROC +epoxy_glStencilFuncSeparateATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_separate_stencil, 49256 /* glStencilFuncSeparateATI */); +} + +static PFNGLSTENCILMASKPROC +epoxy_glStencilMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49281 /* "glStencilMask" */, + 49281 /* "glStencilMask" */, + 49281 /* "glStencilMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 49281 /* "glStencilMask" */, + providers, entrypoints); +} + +static PFNGLSTENCILMASKSEPARATEPROC +epoxy_glStencilMaskSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49295 /* "glStencilMaskSeparate" */, + 49295 /* "glStencilMaskSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49295 /* "glStencilMaskSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPPROC +epoxy_glStencilOp_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49317 /* "glStencilOp" */, + 49317 /* "glStencilOp" */, + 49317 /* "glStencilOp" */, + }; + return gl_provider_resolver(entrypoint_strings + 49317 /* "glStencilOp" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPSEPARATEPROC +epoxy_glStencilOpSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ATI_separate_stencil, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49329 /* "glStencilOpSeparate" */, + 49329 /* "glStencilOpSeparate" */, + 49349 /* "glStencilOpSeparateATI" */, + }; + return gl_provider_resolver(entrypoint_strings + 49329 /* "glStencilOpSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPSEPARATEATIPROC +epoxy_glStencilOpSeparateATI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ATI_separate_stencil, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49349 /* "glStencilOpSeparateATI" */, + 49329 /* "glStencilOpSeparate" */, + 49329 /* "glStencilOpSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49349 /* "glStencilOpSeparateATI" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPVALUEAMDPROC +epoxy_glStencilOpValueAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_stencil_operation_extended, 49372 /* glStencilOpValueAMD */); +} + +static PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC +epoxy_glStencilStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49392 /* glStencilStrokePathInstancedNV */); +} + +static PFNGLSTENCILSTROKEPATHNVPROC +epoxy_glStencilStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49423 /* glStencilStrokePathNV */); +} + +static PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC +epoxy_glStencilThenCoverFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49445 /* glStencilThenCoverFillPathInstancedNV */); +} + +static PFNGLSTENCILTHENCOVERFILLPATHNVPROC +epoxy_glStencilThenCoverFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49483 /* glStencilThenCoverFillPathNV */); +} + +static PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC +epoxy_glStencilThenCoverStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49512 /* glStencilThenCoverStrokePathInstancedNV */); +} + +static PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC +epoxy_glStencilThenCoverStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49552 /* glStencilThenCoverStrokePathNV */); +} + +static PFNGLSTOPINSTRUMENTSSGIXPROC +epoxy_glStopInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 49583 /* glStopInstrumentsSGIX */); +} + +static PFNGLSTRINGMARKERGREMEDYPROC +epoxy_glStringMarkerGREMEDY_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_GREMEDY_string_marker, 49605 /* glStringMarkerGREMEDY */); +} + +static PFNGLSUBPIXELPRECISIONBIASNVPROC +epoxy_glSubpixelPrecisionBiasNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_conservative_raster, 49627 /* glSubpixelPrecisionBiasNV */); +} + +static PFNGLSWIZZLEEXTPROC +epoxy_glSwizzleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 49653 /* glSwizzleEXT */); +} + +static PFNGLSYNCTEXTUREINTELPROC +epoxy_glSyncTextureINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 49666 /* glSyncTextureINTEL */); +} + +static PFNGLTAGSAMPLEBUFFERSGIXPROC +epoxy_glTagSampleBufferSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_tag_sample_buffer, 49685 /* glTagSampleBufferSGIX */); +} + +static PFNGLTANGENT3BEXTPROC +epoxy_glTangent3bEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49707 /* glTangent3bEXT */); +} + +static PFNGLTANGENT3BVEXTPROC +epoxy_glTangent3bvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49722 /* glTangent3bvEXT */); +} + +static PFNGLTANGENT3DEXTPROC +epoxy_glTangent3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49738 /* glTangent3dEXT */); +} + +static PFNGLTANGENT3DVEXTPROC +epoxy_glTangent3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49753 /* glTangent3dvEXT */); +} + +static PFNGLTANGENT3FEXTPROC +epoxy_glTangent3fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49769 /* glTangent3fEXT */); +} + +static PFNGLTANGENT3FVEXTPROC +epoxy_glTangent3fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49784 /* glTangent3fvEXT */); +} + +static PFNGLTANGENT3IEXTPROC +epoxy_glTangent3iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49800 /* glTangent3iEXT */); +} + +static PFNGLTANGENT3IVEXTPROC +epoxy_glTangent3ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49815 /* glTangent3ivEXT */); +} + +static PFNGLTANGENT3SEXTPROC +epoxy_glTangent3sEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49831 /* glTangent3sEXT */); +} + +static PFNGLTANGENT3SVEXTPROC +epoxy_glTangent3svEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49846 /* glTangent3svEXT */); +} + +static PFNGLTANGENTPOINTEREXTPROC +epoxy_glTangentPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49862 /* glTangentPointerEXT */); +} + +static PFNGLTBUFFERMASK3DFXPROC +epoxy_glTbufferMask3DFX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_3DFX_tbuffer, 49882 /* glTbufferMask3DFX */); +} + +static PFNGLTESSELLATIONFACTORAMDPROC +epoxy_glTessellationFactorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_vertex_shader_tessellator, 49900 /* glTessellationFactorAMD */); +} + +static PFNGLTESSELLATIONMODEAMDPROC +epoxy_glTessellationModeAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_vertex_shader_tessellator, 49924 /* glTessellationModeAMD */); +} + +static PFNGLTESTFENCEAPPLEPROC +epoxy_glTestFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 49946 /* glTestFenceAPPLE */); +} + +static PFNGLTESTFENCENVPROC +epoxy_glTestFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 49963 /* glTestFenceNV */); +} + +static PFNGLTESTOBJECTAPPLEPROC +epoxy_glTestObjectAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 49977 /* glTestObjectAPPLE */); +} + +static PFNGLTEXBUFFERPROC +epoxy_glTexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 49995 /* "glTexBuffer" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERARBPROC +epoxy_glTexBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_buffer_object, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50007 /* "glTexBufferARB" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50007 /* "glTexBufferARB" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFEREXTPROC +epoxy_glTexBufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50022 /* "glTexBufferEXT" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFEROESPROC +epoxy_glTexBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_buffer, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50037 /* "glTexBufferOES" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 50037 /* "glTexBufferOES" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEPROC +epoxy_glTexBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50069 /* "glTexBufferRangeEXT" */, + 50089 /* "glTexBufferRangeOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50052 /* "glTexBufferRange" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEEXTPROC +epoxy_glTexBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_buffer, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50069 /* "glTexBufferRangeEXT" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50089 /* "glTexBufferRangeOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50069 /* "glTexBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEOESPROC +epoxy_glTexBufferRangeOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_buffer, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50089 /* "glTexBufferRangeOES" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50069 /* "glTexBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 50089 /* "glTexBufferRangeOES" */, + providers, entrypoints); +} + +static PFNGLTEXBUMPPARAMETERFVATIPROC +epoxy_glTexBumpParameterfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 50109 /* glTexBumpParameterfvATI */); +} + +static PFNGLTEXBUMPPARAMETERIVATIPROC +epoxy_glTexBumpParameterivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 50133 /* glTexBumpParameterivATI */); +} + +static PFNGLTEXCOORD1BOESPROC +epoxy_glTexCoord1bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50157 /* glTexCoord1bOES */); +} + +static PFNGLTEXCOORD1BVOESPROC +epoxy_glTexCoord1bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50173 /* glTexCoord1bvOES */); +} + +static PFNGLTEXCOORD1DPROC +epoxy_glTexCoord1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50190 /* glTexCoord1d */); +} + +static PFNGLTEXCOORD1DVPROC +epoxy_glTexCoord1dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50203 /* glTexCoord1dv */); +} + +static PFNGLTEXCOORD1FPROC +epoxy_glTexCoord1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50217 /* glTexCoord1f */); +} + +static PFNGLTEXCOORD1FVPROC +epoxy_glTexCoord1fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50230 /* glTexCoord1fv */); +} + +static PFNGLTEXCOORD1HNVPROC +epoxy_glTexCoord1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50244 /* glTexCoord1hNV */); +} + +static PFNGLTEXCOORD1HVNVPROC +epoxy_glTexCoord1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50259 /* glTexCoord1hvNV */); +} + +static PFNGLTEXCOORD1IPROC +epoxy_glTexCoord1i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50275 /* glTexCoord1i */); +} + +static PFNGLTEXCOORD1IVPROC +epoxy_glTexCoord1iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50288 /* glTexCoord1iv */); +} + +static PFNGLTEXCOORD1SPROC +epoxy_glTexCoord1s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50302 /* glTexCoord1s */); +} + +static PFNGLTEXCOORD1SVPROC +epoxy_glTexCoord1sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50315 /* glTexCoord1sv */); +} + +static PFNGLTEXCOORD1XOESPROC +epoxy_glTexCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50329 /* glTexCoord1xOES */); +} + +static PFNGLTEXCOORD1XVOESPROC +epoxy_glTexCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50345 /* glTexCoord1xvOES */); +} + +static PFNGLTEXCOORD2BOESPROC +epoxy_glTexCoord2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50362 /* glTexCoord2bOES */); +} + +static PFNGLTEXCOORD2BVOESPROC +epoxy_glTexCoord2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50378 /* glTexCoord2bvOES */); +} + +static PFNGLTEXCOORD2DPROC +epoxy_glTexCoord2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50395 /* glTexCoord2d */); +} + +static PFNGLTEXCOORD2DVPROC +epoxy_glTexCoord2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50408 /* glTexCoord2dv */); +} + +static PFNGLTEXCOORD2FPROC +epoxy_glTexCoord2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50422 /* glTexCoord2f */); +} + +static PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC +epoxy_glTexCoord2fColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50435 /* glTexCoord2fColor3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50466 /* glTexCoord2fColor3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50498 /* glTexCoord2fColor4fNormal3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50537 /* glTexCoord2fColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC +epoxy_glTexCoord2fColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50577 /* glTexCoord2fColor4ubVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50609 /* glTexCoord2fColor4ubVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC +epoxy_glTexCoord2fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50642 /* glTexCoord2fNormal3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50674 /* glTexCoord2fNormal3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FVERTEX3FSUNPROC +epoxy_glTexCoord2fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50707 /* glTexCoord2fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FVERTEX3FVSUNPROC +epoxy_glTexCoord2fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50731 /* glTexCoord2fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FVPROC +epoxy_glTexCoord2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50756 /* glTexCoord2fv */); +} + +static PFNGLTEXCOORD2HNVPROC +epoxy_glTexCoord2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50770 /* glTexCoord2hNV */); +} + +static PFNGLTEXCOORD2HVNVPROC +epoxy_glTexCoord2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50785 /* glTexCoord2hvNV */); +} + +static PFNGLTEXCOORD2IPROC +epoxy_glTexCoord2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50801 /* glTexCoord2i */); +} + +static PFNGLTEXCOORD2IVPROC +epoxy_glTexCoord2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50814 /* glTexCoord2iv */); +} + +static PFNGLTEXCOORD2SPROC +epoxy_glTexCoord2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50828 /* glTexCoord2s */); +} + +static PFNGLTEXCOORD2SVPROC +epoxy_glTexCoord2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50841 /* glTexCoord2sv */); +} + +static PFNGLTEXCOORD2XOESPROC +epoxy_glTexCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50855 /* glTexCoord2xOES */); +} + +static PFNGLTEXCOORD2XVOESPROC +epoxy_glTexCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50871 /* glTexCoord2xvOES */); +} + +static PFNGLTEXCOORD3BOESPROC +epoxy_glTexCoord3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50888 /* glTexCoord3bOES */); +} + +static PFNGLTEXCOORD3BVOESPROC +epoxy_glTexCoord3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50904 /* glTexCoord3bvOES */); +} + +static PFNGLTEXCOORD3DPROC +epoxy_glTexCoord3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50921 /* glTexCoord3d */); +} + +static PFNGLTEXCOORD3DVPROC +epoxy_glTexCoord3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50934 /* glTexCoord3dv */); +} + +static PFNGLTEXCOORD3FPROC +epoxy_glTexCoord3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50948 /* glTexCoord3f */); +} + +static PFNGLTEXCOORD3FVPROC +epoxy_glTexCoord3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50961 /* glTexCoord3fv */); +} + +static PFNGLTEXCOORD3HNVPROC +epoxy_glTexCoord3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50975 /* glTexCoord3hNV */); +} + +static PFNGLTEXCOORD3HVNVPROC +epoxy_glTexCoord3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50990 /* glTexCoord3hvNV */); +} + +static PFNGLTEXCOORD3IPROC +epoxy_glTexCoord3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51006 /* glTexCoord3i */); +} + +static PFNGLTEXCOORD3IVPROC +epoxy_glTexCoord3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51019 /* glTexCoord3iv */); +} + +static PFNGLTEXCOORD3SPROC +epoxy_glTexCoord3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51033 /* glTexCoord3s */); +} + +static PFNGLTEXCOORD3SVPROC +epoxy_glTexCoord3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51046 /* glTexCoord3sv */); +} + +static PFNGLTEXCOORD3XOESPROC +epoxy_glTexCoord3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51060 /* glTexCoord3xOES */); +} + +static PFNGLTEXCOORD3XVOESPROC +epoxy_glTexCoord3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51076 /* glTexCoord3xvOES */); +} + +static PFNGLTEXCOORD4BOESPROC +epoxy_glTexCoord4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 51093 /* glTexCoord4bOES */); +} + +static PFNGLTEXCOORD4BVOESPROC +epoxy_glTexCoord4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 51109 /* glTexCoord4bvOES */); +} + +static PFNGLTEXCOORD4DPROC +epoxy_glTexCoord4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51126 /* glTexCoord4d */); +} + +static PFNGLTEXCOORD4DVPROC +epoxy_glTexCoord4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51139 /* glTexCoord4dv */); +} + +static PFNGLTEXCOORD4FPROC +epoxy_glTexCoord4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51153 /* glTexCoord4f */); +} + +static PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC +epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51166 /* glTexCoord4fColor4fNormal3fVertex4fSUN */); +} + +static PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC +epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51205 /* glTexCoord4fColor4fNormal3fVertex4fvSUN */); +} + +static PFNGLTEXCOORD4FVERTEX4FSUNPROC +epoxy_glTexCoord4fVertex4fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51245 /* glTexCoord4fVertex4fSUN */); +} + +static PFNGLTEXCOORD4FVERTEX4FVSUNPROC +epoxy_glTexCoord4fVertex4fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51269 /* glTexCoord4fVertex4fvSUN */); +} + +static PFNGLTEXCOORD4FVPROC +epoxy_glTexCoord4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51294 /* glTexCoord4fv */); +} + +static PFNGLTEXCOORD4HNVPROC +epoxy_glTexCoord4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 51308 /* glTexCoord4hNV */); +} + +static PFNGLTEXCOORD4HVNVPROC +epoxy_glTexCoord4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 51323 /* glTexCoord4hvNV */); +} + +static PFNGLTEXCOORD4IPROC +epoxy_glTexCoord4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51339 /* glTexCoord4i */); +} + +static PFNGLTEXCOORD4IVPROC +epoxy_glTexCoord4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51352 /* glTexCoord4iv */); +} + +static PFNGLTEXCOORD4SPROC +epoxy_glTexCoord4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51366 /* glTexCoord4s */); +} + +static PFNGLTEXCOORD4SVPROC +epoxy_glTexCoord4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51379 /* glTexCoord4sv */); +} + +static PFNGLTEXCOORD4XOESPROC +epoxy_glTexCoord4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51393 /* glTexCoord4xOES */); +} + +static PFNGLTEXCOORD4XVOESPROC +epoxy_glTexCoord4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51409 /* glTexCoord4xvOES */); +} + +static PFNGLTEXCOORDFORMATNVPROC +epoxy_glTexCoordFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 51426 /* glTexCoordFormatNV */); +} + +static PFNGLTEXCOORDP1UIPROC +epoxy_glTexCoordP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51445 /* "glTexCoordP1ui" */, + 51445 /* "glTexCoordP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51445 /* "glTexCoordP1ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP1UIVPROC +epoxy_glTexCoordP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51460 /* "glTexCoordP1uiv" */, + 51460 /* "glTexCoordP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51460 /* "glTexCoordP1uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP2UIPROC +epoxy_glTexCoordP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51476 /* "glTexCoordP2ui" */, + 51476 /* "glTexCoordP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51476 /* "glTexCoordP2ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP2UIVPROC +epoxy_glTexCoordP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51491 /* "glTexCoordP2uiv" */, + 51491 /* "glTexCoordP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51491 /* "glTexCoordP2uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP3UIPROC +epoxy_glTexCoordP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51507 /* "glTexCoordP3ui" */, + 51507 /* "glTexCoordP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51507 /* "glTexCoordP3ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP3UIVPROC +epoxy_glTexCoordP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51522 /* "glTexCoordP3uiv" */, + 51522 /* "glTexCoordP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51522 /* "glTexCoordP3uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP4UIPROC +epoxy_glTexCoordP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51538 /* "glTexCoordP4ui" */, + 51538 /* "glTexCoordP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51538 /* "glTexCoordP4ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP4UIVPROC +epoxy_glTexCoordP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51553 /* "glTexCoordP4uiv" */, + 51553 /* "glTexCoordP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51553 /* "glTexCoordP4uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDPOINTERPROC +epoxy_glTexCoordPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51569 /* "glTexCoordPointer" */, + 51569 /* "glTexCoordPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 51569 /* "glTexCoordPointer" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDPOINTEREXTPROC +epoxy_glTexCoordPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 51587 /* glTexCoordPointerEXT */); +} + +static PFNGLTEXCOORDPOINTERLISTIBMPROC +epoxy_glTexCoordPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 51608 /* glTexCoordPointerListIBM */); +} + +static PFNGLTEXCOORDPOINTERVINTELPROC +epoxy_glTexCoordPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 51633 /* glTexCoordPointervINTEL */); +} + +static PFNGLTEXENVFPROC +epoxy_glTexEnvf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51657 /* "glTexEnvf" */, + 51657 /* "glTexEnvf" */, + }; + return gl_provider_resolver(entrypoint_strings + 51657 /* "glTexEnvf" */, + providers, entrypoints); +} + +static PFNGLTEXENVFVPROC +epoxy_glTexEnvfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51667 /* "glTexEnvfv" */, + 51667 /* "glTexEnvfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51667 /* "glTexEnvfv" */, + providers, entrypoints); +} + +static PFNGLTEXENVIPROC +epoxy_glTexEnvi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51678 /* "glTexEnvi" */, + 51678 /* "glTexEnvi" */, + }; + return gl_provider_resolver(entrypoint_strings + 51678 /* "glTexEnvi" */, + providers, entrypoints); +} + +static PFNGLTEXENVIVPROC +epoxy_glTexEnviv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51688 /* "glTexEnviv" */, + 51688 /* "glTexEnviv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51688 /* "glTexEnviv" */, + providers, entrypoints); +} + +static PFNGLTEXENVXPROC +epoxy_glTexEnvx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 51699 /* glTexEnvx */); +} + +static PFNGLTEXENVXOESPROC +epoxy_glTexEnvxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51709 /* glTexEnvxOES */); +} + +static PFNGLTEXENVXVPROC +epoxy_glTexEnvxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 51722 /* glTexEnvxv */); +} + +static PFNGLTEXENVXVOESPROC +epoxy_glTexEnvxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51733 /* glTexEnvxvOES */); +} + +static PFNGLTEXFILTERFUNCSGISPROC +epoxy_glTexFilterFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_filter4, 51747 /* glTexFilterFuncSGIS */); +} + +static PFNGLTEXGENDPROC +epoxy_glTexGend_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51767 /* glTexGend */); +} + +static PFNGLTEXGENDVPROC +epoxy_glTexGendv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51777 /* glTexGendv */); +} + +static PFNGLTEXGENFPROC +epoxy_glTexGenf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51788 /* glTexGenf */); +} + +static PFNGLTEXGENFOESPROC +epoxy_glTexGenfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51798 /* glTexGenfOES */); +} + +static PFNGLTEXGENFVPROC +epoxy_glTexGenfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51811 /* glTexGenfv */); +} + +static PFNGLTEXGENFVOESPROC +epoxy_glTexGenfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51822 /* glTexGenfvOES */); +} + +static PFNGLTEXGENIPROC +epoxy_glTexGeni_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51836 /* glTexGeni */); +} + +static PFNGLTEXGENIOESPROC +epoxy_glTexGeniOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51846 /* glTexGeniOES */); +} + +static PFNGLTEXGENIVPROC +epoxy_glTexGeniv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51859 /* glTexGeniv */); +} + +static PFNGLTEXGENIVOESPROC +epoxy_glTexGenivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51870 /* glTexGenivOES */); +} + +static PFNGLTEXGENXOESPROC +epoxy_glTexGenxOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51884 /* "glTexGenxOES" */, + 51884 /* "glTexGenxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51884 /* "glTexGenxOES" */, + providers, entrypoints); +} + +static PFNGLTEXGENXVOESPROC +epoxy_glTexGenxvOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51897 /* "glTexGenxvOES" */, + 51897 /* "glTexGenxvOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51897 /* "glTexGenxvOES" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE1DPROC +epoxy_glTexImage1D_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51911 /* glTexImage1D */); +} + +static PFNGLTEXIMAGE2DPROC +epoxy_glTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51924 /* "glTexImage2D" */, + 51924 /* "glTexImage2D" */, + 51924 /* "glTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 51924 /* "glTexImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE2DMULTISAMPLEPROC +epoxy_glTexImage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51937 /* "glTexImage2DMultisample" */, + 51937 /* "glTexImage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 51937 /* "glTexImage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC +epoxy_glTexImage2DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 51961 /* glTexImage2DMultisampleCoverageNV */); +} + +static PFNGLTEXIMAGE3DPROC +epoxy_glTexImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52008 /* "glTexImage3DEXT" */, + 52082 /* "glTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51995 /* "glTexImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DEXTPROC +epoxy_glTexImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52008 /* "glTexImage3DEXT" */, + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52082 /* "glTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52008 /* "glTexImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DMULTISAMPLEPROC +epoxy_glTexImage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52024 /* "glTexImage3DMultisample" */, + 52024 /* "glTexImage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52024 /* "glTexImage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC +epoxy_glTexImage3DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 52048 /* glTexImage3DMultisampleCoverageNV */); +} + +static PFNGLTEXIMAGE3DOESPROC +epoxy_glTexImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52082 /* "glTexImage3DOES" */, + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52008 /* "glTexImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52082 /* "glTexImage3DOES" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE4DSGISPROC +epoxy_glTexImage4DSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture4D, 52098 /* glTexImage4DSGIS */); +} + +static PFNGLTEXPAGECOMMITMENTARBPROC +epoxy_glTexPageCommitmentARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_sparse_texture, + GL_extension_GL_EXT_sparse_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52115 /* "glTexPageCommitmentARB" */, + 52138 /* "glTexPageCommitmentEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52115 /* "glTexPageCommitmentARB" */, + providers, entrypoints); +} + +static PFNGLTEXPAGECOMMITMENTEXTPROC +epoxy_glTexPageCommitmentEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_sparse_texture, + GL_extension_GL_ARB_sparse_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52138 /* "glTexPageCommitmentEXT" */, + 52115 /* "glTexPageCommitmentARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 52138 /* "glTexPageCommitmentEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVPROC +epoxy_glTexParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + 52200 /* "glTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52161 /* "glTexParameterIiv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVEXTPROC +epoxy_glTexParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52200 /* "glTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52179 /* "glTexParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVOESPROC +epoxy_glTexParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52200 /* "glTexParameterIivOES" */, + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52200 /* "glTexParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVPROC +epoxy_glTexParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + 52262 /* "glTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52221 /* "glTexParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVEXTPROC +epoxy_glTexParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52262 /* "glTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52240 /* "glTexParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVOESPROC +epoxy_glTexParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52262 /* "glTexParameterIuivOES" */, + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52262 /* "glTexParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERFPROC +epoxy_glTexParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52284 /* "glTexParameterf" */, + 52284 /* "glTexParameterf" */, + 52284 /* "glTexParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 52284 /* "glTexParameterf" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERFVPROC +epoxy_glTexParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52300 /* "glTexParameterfv" */, + 52300 /* "glTexParameterfv" */, + 52300 /* "glTexParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 52300 /* "glTexParameterfv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIPROC +epoxy_glTexParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52317 /* "glTexParameteri" */, + 52317 /* "glTexParameteri" */, + 52317 /* "glTexParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 52317 /* "glTexParameteri" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIVPROC +epoxy_glTexParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52333 /* "glTexParameteriv" */, + 52333 /* "glTexParameteriv" */, + 52333 /* "glTexParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 52333 /* "glTexParameteriv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERXPROC +epoxy_glTexParameterx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 52350 /* glTexParameterx */); +} + +static PFNGLTEXPARAMETERXOESPROC +epoxy_glTexParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 52366 /* glTexParameterxOES */); +} + +static PFNGLTEXPARAMETERXVPROC +epoxy_glTexParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 52385 /* glTexParameterxv */); +} + +static PFNGLTEXPARAMETERXVOESPROC +epoxy_glTexParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 52402 /* glTexParameterxvOES */); +} + +static PFNGLTEXRENDERBUFFERNVPROC +epoxy_glTexRenderbufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_explicit_multisample, 52422 /* glTexRenderbufferNV */); +} + +static PFNGLTEXSTORAGE1DPROC +epoxy_glTexStorage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52442 /* "glTexStorage1D" */, + 52442 /* "glTexStorage1D" */, + 52457 /* "glTexStorage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52442 /* "glTexStorage1D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE1DEXTPROC +epoxy_glTexStorage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52457 /* "glTexStorage1DEXT" */, + 52442 /* "glTexStorage1D" */, + 52442 /* "glTexStorage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52457 /* "glTexStorage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DPROC +epoxy_glTexStorage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52490 /* "glTexStorage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52475 /* "glTexStorage2D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DEXTPROC +epoxy_glTexStorage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52490 /* "glTexStorage2DEXT" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52490 /* "glTexStorage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DMULTISAMPLEPROC +epoxy_glTexStorage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52508 /* "glTexStorage2DMultisample" */, + 52508 /* "glTexStorage2DMultisample" */, + 52508 /* "glTexStorage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52508 /* "glTexStorage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DPROC +epoxy_glTexStorage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52549 /* "glTexStorage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52534 /* "glTexStorage3D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DEXTPROC +epoxy_glTexStorage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52549 /* "glTexStorage3DEXT" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52549 /* "glTexStorage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DMULTISAMPLEPROC +epoxy_glTexStorage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_storage_multisample_2d_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52593 /* "glTexStorage3DMultisampleOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52567 /* "glTexStorage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC +epoxy_glTexStorage3DMultisampleOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_storage_multisample_2d_array, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52593 /* "glTexStorage3DMultisampleOES" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52593 /* "glTexStorage3DMultisampleOES" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGESPARSEAMDPROC +epoxy_glTexStorageSparseAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sparse_texture, 52622 /* glTexStorageSparseAMD */); +} + +static PFNGLTEXSUBIMAGE1DPROC +epoxy_glTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_subtexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52644 /* "glTexSubImage1D" */, + 52660 /* "glTexSubImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52644 /* "glTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE1DEXTPROC +epoxy_glTexSubImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_subtexture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52660 /* "glTexSubImage1DEXT" */, + 52644 /* "glTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52660 /* "glTexSubImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE2DPROC +epoxy_glTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_subtexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52695 /* "glTexSubImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52679 /* "glTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE2DEXTPROC +epoxy_glTexSubImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_subtexture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52695 /* "glTexSubImage2DEXT" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52695 /* "glTexSubImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DPROC +epoxy_glTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52730 /* "glTexSubImage3DEXT" */, + 52749 /* "glTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52714 /* "glTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DEXTPROC +epoxy_glTexSubImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52730 /* "glTexSubImage3DEXT" */, + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52749 /* "glTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52730 /* "glTexSubImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DOESPROC +epoxy_glTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52749 /* "glTexSubImage3DOES" */, + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52730 /* "glTexSubImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52749 /* "glTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE4DSGISPROC +epoxy_glTexSubImage4DSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture4D, 52768 /* glTexSubImage4DSGIS */); +} + +static PFNGLTEXTUREBARRIERPROC +epoxy_glTextureBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_texture_barrier, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52788 /* "glTextureBarrier" */, + 52788 /* "glTextureBarrier" */, + }; + return gl_provider_resolver(entrypoint_strings + 52788 /* "glTextureBarrier" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBARRIERNVPROC +epoxy_glTextureBarrierNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_barrier, 52805 /* glTextureBarrierNV */); +} + +static PFNGLTEXTUREBUFFERPROC +epoxy_glTextureBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52824 /* "glTextureBuffer" */, + 52824 /* "glTextureBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 52824 /* "glTextureBuffer" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBUFFEREXTPROC +epoxy_glTextureBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52840 /* glTextureBufferEXT */); +} + +static PFNGLTEXTUREBUFFERRANGEPROC +epoxy_glTextureBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52859 /* "glTextureBufferRange" */, + 52859 /* "glTextureBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 52859 /* "glTextureBufferRange" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBUFFERRANGEEXTPROC +epoxy_glTextureBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52880 /* glTextureBufferRangeEXT */); +} + +static PFNGLTEXTURECOLORMASKSGISPROC +epoxy_glTextureColorMaskSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_color_mask, 52904 /* glTextureColorMaskSGIS */); +} + +static PFNGLTEXTUREIMAGE1DEXTPROC +epoxy_glTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52927 /* glTextureImage1DEXT */); +} + +static PFNGLTEXTUREIMAGE2DEXTPROC +epoxy_glTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52947 /* glTextureImage2DEXT */); +} + +static PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC +epoxy_glTextureImage2DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 52967 /* glTextureImage2DMultisampleCoverageNV */); +} + +static PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC +epoxy_glTextureImage2DMultisampleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53005 /* glTextureImage2DMultisampleNV */); +} + +static PFNGLTEXTUREIMAGE3DEXTPROC +epoxy_glTextureImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53035 /* glTextureImage3DEXT */); +} + +static PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC +epoxy_glTextureImage3DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53055 /* glTextureImage3DMultisampleCoverageNV */); +} + +static PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC +epoxy_glTextureImage3DMultisampleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53093 /* glTextureImage3DMultisampleNV */); +} + +static PFNGLTEXTURELIGHTEXTPROC +epoxy_glTextureLightEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 53123 /* glTextureLightEXT */); +} + +static PFNGLTEXTUREMATERIALEXTPROC +epoxy_glTextureMaterialEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 53141 /* glTextureMaterialEXT */); +} + +static PFNGLTEXTURENORMALEXTPROC +epoxy_glTextureNormalEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_perturb_normal, 53162 /* glTextureNormalEXT */); +} + +static PFNGLTEXTUREPAGECOMMITMENTEXTPROC +epoxy_glTexturePageCommitmentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53181 /* glTexturePageCommitmentEXT */); +} + +static PFNGLTEXTUREPARAMETERIIVPROC +epoxy_glTextureParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53208 /* "glTextureParameterIiv" */, + 53208 /* "glTextureParameterIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53208 /* "glTextureParameterIiv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIIVEXTPROC +epoxy_glTextureParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53230 /* glTextureParameterIivEXT */); +} + +static PFNGLTEXTUREPARAMETERIUIVPROC +epoxy_glTextureParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53255 /* "glTextureParameterIuiv" */, + 53255 /* "glTextureParameterIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53255 /* "glTextureParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIUIVEXTPROC +epoxy_glTextureParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53278 /* glTextureParameterIuivEXT */); +} + +static PFNGLTEXTUREPARAMETERFPROC +epoxy_glTextureParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53304 /* "glTextureParameterf" */, + 53304 /* "glTextureParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 53304 /* "glTextureParameterf" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERFEXTPROC +epoxy_glTextureParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53324 /* glTextureParameterfEXT */); +} + +static PFNGLTEXTUREPARAMETERFVPROC +epoxy_glTextureParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53347 /* "glTextureParameterfv" */, + 53347 /* "glTextureParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53347 /* "glTextureParameterfv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERFVEXTPROC +epoxy_glTextureParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53368 /* glTextureParameterfvEXT */); +} + +static PFNGLTEXTUREPARAMETERIPROC +epoxy_glTextureParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53392 /* "glTextureParameteri" */, + 53392 /* "glTextureParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 53392 /* "glTextureParameteri" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIEXTPROC +epoxy_glTextureParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53412 /* glTextureParameteriEXT */); +} + +static PFNGLTEXTUREPARAMETERIVPROC +epoxy_glTextureParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53435 /* "glTextureParameteriv" */, + 53435 /* "glTextureParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53435 /* "glTextureParameteriv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIVEXTPROC +epoxy_glTextureParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53456 /* glTextureParameterivEXT */); +} + +static PFNGLTEXTURERANGEAPPLEPROC +epoxy_glTextureRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_texture_range, 53480 /* glTextureRangeAPPLE */); +} + +static PFNGLTEXTURERENDERBUFFEREXTPROC +epoxy_glTextureRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53500 /* glTextureRenderbufferEXT */); +} + +static PFNGLTEXTURESTORAGE1DPROC +epoxy_glTextureStorage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53525 /* "glTextureStorage1D" */, + 53525 /* "glTextureStorage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53525 /* "glTextureStorage1D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE1DEXTPROC +epoxy_glTextureStorage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53544 /* "glTextureStorage1DEXT" */, + 53544 /* "glTextureStorage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53544 /* "glTextureStorage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DPROC +epoxy_glTextureStorage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53566 /* "glTextureStorage2D" */, + 53566 /* "glTextureStorage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53566 /* "glTextureStorage2D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DEXTPROC +epoxy_glTextureStorage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53585 /* "glTextureStorage2DEXT" */, + 53585 /* "glTextureStorage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53585 /* "glTextureStorage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC +epoxy_glTextureStorage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53607 /* "glTextureStorage2DMultisample" */, + 53607 /* "glTextureStorage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 53607 /* "glTextureStorage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC +epoxy_glTextureStorage2DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53637 /* glTextureStorage2DMultisampleEXT */); +} + +static PFNGLTEXTURESTORAGE3DPROC +epoxy_glTextureStorage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53670 /* "glTextureStorage3D" */, + 53670 /* "glTextureStorage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53670 /* "glTextureStorage3D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DEXTPROC +epoxy_glTextureStorage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53689 /* "glTextureStorage3DEXT" */, + 53689 /* "glTextureStorage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53689 /* "glTextureStorage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC +epoxy_glTextureStorage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53711 /* "glTextureStorage3DMultisample" */, + 53711 /* "glTextureStorage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 53711 /* "glTextureStorage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC +epoxy_glTextureStorage3DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53741 /* glTextureStorage3DMultisampleEXT */); +} + +static PFNGLTEXTURESTORAGESPARSEAMDPROC +epoxy_glTextureStorageSparseAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sparse_texture, 53774 /* glTextureStorageSparseAMD */); +} + +static PFNGLTEXTURESUBIMAGE1DPROC +epoxy_glTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53800 /* "glTextureSubImage1D" */, + 53800 /* "glTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53800 /* "glTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE1DEXTPROC +epoxy_glTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53820 /* glTextureSubImage1DEXT */); +} + +static PFNGLTEXTURESUBIMAGE2DPROC +epoxy_glTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53843 /* "glTextureSubImage2D" */, + 53843 /* "glTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53843 /* "glTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE2DEXTPROC +epoxy_glTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53863 /* glTextureSubImage2DEXT */); +} + +static PFNGLTEXTURESUBIMAGE3DPROC +epoxy_glTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53886 /* "glTextureSubImage3D" */, + 53886 /* "glTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53886 /* "glTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE3DEXTPROC +epoxy_glTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53906 /* glTextureSubImage3DEXT */); +} + +static PFNGLTEXTUREVIEWPROC +epoxy_glTextureView_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_EXT_texture_view, + GL_extension_GL_OES_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53943 /* "glTextureViewEXT" */, + 53960 /* "glTextureViewOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 53929 /* "glTextureView" */, + providers, entrypoints); +} + +static PFNGLTEXTUREVIEWEXTPROC +epoxy_glTextureViewEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_view, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_OES_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53943 /* "glTextureViewEXT" */, + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53960 /* "glTextureViewOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 53943 /* "glTextureViewEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTUREVIEWOESPROC +epoxy_glTextureViewOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_view, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_EXT_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53960 /* "glTextureViewOES" */, + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53943 /* "glTextureViewEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53960 /* "glTextureViewOES" */, + providers, entrypoints); +} + +static PFNGLTRACKMATRIXNVPROC +epoxy_glTrackMatrixNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 53977 /* glTrackMatrixNV */); +} + +static PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC +epoxy_glTransformFeedbackAttribsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 53993 /* glTransformFeedbackAttribsNV */); +} + +static PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC +epoxy_glTransformFeedbackBufferBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54022 /* "glTransformFeedbackBufferBase" */, + 54022 /* "glTransformFeedbackBufferBase" */, + }; + return gl_provider_resolver(entrypoint_strings + 54022 /* "glTransformFeedbackBufferBase" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC +epoxy_glTransformFeedbackBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54052 /* "glTransformFeedbackBufferRange" */, + 54052 /* "glTransformFeedbackBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 54052 /* "glTransformFeedbackBufferRange" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC +epoxy_glTransformFeedbackStreamAttribsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 54083 /* glTransformFeedbackStreamAttribsNV */); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSPROC +epoxy_glTransformFeedbackVaryings_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54118 /* "glTransformFeedbackVaryings" */, + 54118 /* "glTransformFeedbackVaryings" */, + 54146 /* "glTransformFeedbackVaryingsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54118 /* "glTransformFeedbackVaryings" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC +epoxy_glTransformFeedbackVaryingsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54146 /* "glTransformFeedbackVaryingsEXT" */, + 54118 /* "glTransformFeedbackVaryings" */, + 54118 /* "glTransformFeedbackVaryings" */, + }; + return gl_provider_resolver(entrypoint_strings + 54146 /* "glTransformFeedbackVaryingsEXT" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC +epoxy_glTransformFeedbackVaryingsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 54177 /* glTransformFeedbackVaryingsNV */); +} + +static PFNGLTRANSFORMPATHNVPROC +epoxy_glTransformPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 54207 /* glTransformPathNV */); +} + +static PFNGLTRANSLATEDPROC +epoxy_glTranslated_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 54225 /* glTranslated */); +} + +static PFNGLTRANSLATEFPROC +epoxy_glTranslatef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54238 /* "glTranslatef" */, + 54238 /* "glTranslatef" */, + }; + return gl_provider_resolver(entrypoint_strings + 54238 /* "glTranslatef" */, + providers, entrypoints); +} + +static PFNGLTRANSLATEXPROC +epoxy_glTranslatex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 54251 /* glTranslatex */); +} + +static PFNGLTRANSLATEXOESPROC +epoxy_glTranslatexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 54264 /* glTranslatexOES */); +} + +static PFNGLUNIFORM1DPROC +epoxy_glUniform1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54280 /* "glUniform1d" */, + 54280 /* "glUniform1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54280 /* "glUniform1d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1DVPROC +epoxy_glUniform1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54292 /* "glUniform1dv" */, + 54292 /* "glUniform1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54292 /* "glUniform1dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FPROC +epoxy_glUniform1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54305 /* "glUniform1f" */, + 54305 /* "glUniform1f" */, + 54317 /* "glUniform1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54305 /* "glUniform1f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FARBPROC +epoxy_glUniform1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54317 /* "glUniform1fARB" */, + 54305 /* "glUniform1f" */, + 54305 /* "glUniform1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54317 /* "glUniform1fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FVPROC +epoxy_glUniform1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54332 /* "glUniform1fv" */, + 54332 /* "glUniform1fv" */, + 54345 /* "glUniform1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54332 /* "glUniform1fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FVARBPROC +epoxy_glUniform1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54345 /* "glUniform1fvARB" */, + 54332 /* "glUniform1fv" */, + 54332 /* "glUniform1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54345 /* "glUniform1fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IPROC +epoxy_glUniform1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54361 /* "glUniform1i" */, + 54361 /* "glUniform1i" */, + 54441 /* "glUniform1iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54361 /* "glUniform1i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1I64ARBPROC +epoxy_glUniform1i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54373 /* glUniform1i64ARB */); +} + +static PFNGLUNIFORM1I64NVPROC +epoxy_glUniform1i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54390 /* "glUniform1i64NV" */, + 54390 /* "glUniform1i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54390 /* "glUniform1i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1I64VARBPROC +epoxy_glUniform1i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54406 /* glUniform1i64vARB */); +} + +static PFNGLUNIFORM1I64VNVPROC +epoxy_glUniform1i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54424 /* "glUniform1i64vNV" */, + 54424 /* "glUniform1i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54424 /* "glUniform1i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IARBPROC +epoxy_glUniform1iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54441 /* "glUniform1iARB" */, + 54361 /* "glUniform1i" */, + 54361 /* "glUniform1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 54441 /* "glUniform1iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IVPROC +epoxy_glUniform1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54456 /* "glUniform1iv" */, + 54456 /* "glUniform1iv" */, + 54469 /* "glUniform1ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54456 /* "glUniform1iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IVARBPROC +epoxy_glUniform1ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54469 /* "glUniform1ivARB" */, + 54456 /* "glUniform1iv" */, + 54456 /* "glUniform1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54469 /* "glUniform1ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIPROC +epoxy_glUniform1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54485 /* "glUniform1ui" */, + 54485 /* "glUniform1ui" */, + 54570 /* "glUniform1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54485 /* "glUniform1ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UI64ARBPROC +epoxy_glUniform1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54498 /* glUniform1ui64ARB */); +} + +static PFNGLUNIFORM1UI64NVPROC +epoxy_glUniform1ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54516 /* "glUniform1ui64NV" */, + 54516 /* "glUniform1ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54516 /* "glUniform1ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UI64VARBPROC +epoxy_glUniform1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54533 /* glUniform1ui64vARB */); +} + +static PFNGLUNIFORM1UI64VNVPROC +epoxy_glUniform1ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54552 /* "glUniform1ui64vNV" */, + 54552 /* "glUniform1ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54552 /* "glUniform1ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIEXTPROC +epoxy_glUniform1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54570 /* "glUniform1uiEXT" */, + 54485 /* "glUniform1ui" */, + 54485 /* "glUniform1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 54570 /* "glUniform1uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIVPROC +epoxy_glUniform1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54586 /* "glUniform1uiv" */, + 54586 /* "glUniform1uiv" */, + 54600 /* "glUniform1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54586 /* "glUniform1uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIVEXTPROC +epoxy_glUniform1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54600 /* "glUniform1uivEXT" */, + 54586 /* "glUniform1uiv" */, + 54586 /* "glUniform1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54600 /* "glUniform1uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2DPROC +epoxy_glUniform2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54617 /* "glUniform2d" */, + 54617 /* "glUniform2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54617 /* "glUniform2d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2DVPROC +epoxy_glUniform2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54629 /* "glUniform2dv" */, + 54629 /* "glUniform2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54629 /* "glUniform2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FPROC +epoxy_glUniform2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54642 /* "glUniform2f" */, + 54642 /* "glUniform2f" */, + 54654 /* "glUniform2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54642 /* "glUniform2f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FARBPROC +epoxy_glUniform2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54654 /* "glUniform2fARB" */, + 54642 /* "glUniform2f" */, + 54642 /* "glUniform2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54654 /* "glUniform2fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FVPROC +epoxy_glUniform2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54669 /* "glUniform2fv" */, + 54669 /* "glUniform2fv" */, + 54682 /* "glUniform2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54669 /* "glUniform2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FVARBPROC +epoxy_glUniform2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54682 /* "glUniform2fvARB" */, + 54669 /* "glUniform2fv" */, + 54669 /* "glUniform2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54682 /* "glUniform2fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IPROC +epoxy_glUniform2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54698 /* "glUniform2i" */, + 54698 /* "glUniform2i" */, + 54778 /* "glUniform2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54698 /* "glUniform2i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2I64ARBPROC +epoxy_glUniform2i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54710 /* glUniform2i64ARB */); +} + +static PFNGLUNIFORM2I64NVPROC +epoxy_glUniform2i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54727 /* "glUniform2i64NV" */, + 54727 /* "glUniform2i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54727 /* "glUniform2i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2I64VARBPROC +epoxy_glUniform2i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54743 /* glUniform2i64vARB */); +} + +static PFNGLUNIFORM2I64VNVPROC +epoxy_glUniform2i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54761 /* "glUniform2i64vNV" */, + 54761 /* "glUniform2i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54761 /* "glUniform2i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IARBPROC +epoxy_glUniform2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54778 /* "glUniform2iARB" */, + 54698 /* "glUniform2i" */, + 54698 /* "glUniform2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 54778 /* "glUniform2iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IVPROC +epoxy_glUniform2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54793 /* "glUniform2iv" */, + 54793 /* "glUniform2iv" */, + 54806 /* "glUniform2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54793 /* "glUniform2iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IVARBPROC +epoxy_glUniform2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54806 /* "glUniform2ivARB" */, + 54793 /* "glUniform2iv" */, + 54793 /* "glUniform2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54806 /* "glUniform2ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIPROC +epoxy_glUniform2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54822 /* "glUniform2ui" */, + 54822 /* "glUniform2ui" */, + 54907 /* "glUniform2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54822 /* "glUniform2ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UI64ARBPROC +epoxy_glUniform2ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54835 /* glUniform2ui64ARB */); +} + +static PFNGLUNIFORM2UI64NVPROC +epoxy_glUniform2ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54853 /* "glUniform2ui64NV" */, + 54853 /* "glUniform2ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54853 /* "glUniform2ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UI64VARBPROC +epoxy_glUniform2ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54870 /* glUniform2ui64vARB */); +} + +static PFNGLUNIFORM2UI64VNVPROC +epoxy_glUniform2ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54889 /* "glUniform2ui64vNV" */, + 54889 /* "glUniform2ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54889 /* "glUniform2ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIEXTPROC +epoxy_glUniform2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54907 /* "glUniform2uiEXT" */, + 54822 /* "glUniform2ui" */, + 54822 /* "glUniform2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 54907 /* "glUniform2uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIVPROC +epoxy_glUniform2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54923 /* "glUniform2uiv" */, + 54923 /* "glUniform2uiv" */, + 54937 /* "glUniform2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54923 /* "glUniform2uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIVEXTPROC +epoxy_glUniform2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54937 /* "glUniform2uivEXT" */, + 54923 /* "glUniform2uiv" */, + 54923 /* "glUniform2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54937 /* "glUniform2uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3DPROC +epoxy_glUniform3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54954 /* "glUniform3d" */, + 54954 /* "glUniform3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54954 /* "glUniform3d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3DVPROC +epoxy_glUniform3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54966 /* "glUniform3dv" */, + 54966 /* "glUniform3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54966 /* "glUniform3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FPROC +epoxy_glUniform3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54979 /* "glUniform3f" */, + 54979 /* "glUniform3f" */, + 54991 /* "glUniform3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54979 /* "glUniform3f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FARBPROC +epoxy_glUniform3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54991 /* "glUniform3fARB" */, + 54979 /* "glUniform3f" */, + 54979 /* "glUniform3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54991 /* "glUniform3fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FVPROC +epoxy_glUniform3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55006 /* "glUniform3fv" */, + 55006 /* "glUniform3fv" */, + 55019 /* "glUniform3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55006 /* "glUniform3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FVARBPROC +epoxy_glUniform3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55019 /* "glUniform3fvARB" */, + 55006 /* "glUniform3fv" */, + 55006 /* "glUniform3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55019 /* "glUniform3fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IPROC +epoxy_glUniform3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55035 /* "glUniform3i" */, + 55035 /* "glUniform3i" */, + 55115 /* "glUniform3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55035 /* "glUniform3i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3I64ARBPROC +epoxy_glUniform3i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55047 /* glUniform3i64ARB */); +} + +static PFNGLUNIFORM3I64NVPROC +epoxy_glUniform3i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55064 /* "glUniform3i64NV" */, + 55064 /* "glUniform3i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55064 /* "glUniform3i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3I64VARBPROC +epoxy_glUniform3i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55080 /* glUniform3i64vARB */); +} + +static PFNGLUNIFORM3I64VNVPROC +epoxy_glUniform3i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55098 /* "glUniform3i64vNV" */, + 55098 /* "glUniform3i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55098 /* "glUniform3i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IARBPROC +epoxy_glUniform3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55115 /* "glUniform3iARB" */, + 55035 /* "glUniform3i" */, + 55035 /* "glUniform3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 55115 /* "glUniform3iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IVPROC +epoxy_glUniform3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55130 /* "glUniform3iv" */, + 55130 /* "glUniform3iv" */, + 55143 /* "glUniform3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55130 /* "glUniform3iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IVARBPROC +epoxy_glUniform3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55143 /* "glUniform3ivARB" */, + 55130 /* "glUniform3iv" */, + 55130 /* "glUniform3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55143 /* "glUniform3ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIPROC +epoxy_glUniform3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55159 /* "glUniform3ui" */, + 55159 /* "glUniform3ui" */, + 55244 /* "glUniform3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55159 /* "glUniform3ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UI64ARBPROC +epoxy_glUniform3ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55172 /* glUniform3ui64ARB */); +} + +static PFNGLUNIFORM3UI64NVPROC +epoxy_glUniform3ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55190 /* "glUniform3ui64NV" */, + 55190 /* "glUniform3ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55190 /* "glUniform3ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UI64VARBPROC +epoxy_glUniform3ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55207 /* glUniform3ui64vARB */); +} + +static PFNGLUNIFORM3UI64VNVPROC +epoxy_glUniform3ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55226 /* "glUniform3ui64vNV" */, + 55226 /* "glUniform3ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55226 /* "glUniform3ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIEXTPROC +epoxy_glUniform3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55244 /* "glUniform3uiEXT" */, + 55159 /* "glUniform3ui" */, + 55159 /* "glUniform3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 55244 /* "glUniform3uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIVPROC +epoxy_glUniform3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55260 /* "glUniform3uiv" */, + 55260 /* "glUniform3uiv" */, + 55274 /* "glUniform3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55260 /* "glUniform3uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIVEXTPROC +epoxy_glUniform3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55274 /* "glUniform3uivEXT" */, + 55260 /* "glUniform3uiv" */, + 55260 /* "glUniform3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55274 /* "glUniform3uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4DPROC +epoxy_glUniform4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55291 /* "glUniform4d" */, + 55291 /* "glUniform4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 55291 /* "glUniform4d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4DVPROC +epoxy_glUniform4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55303 /* "glUniform4dv" */, + 55303 /* "glUniform4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55303 /* "glUniform4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FPROC +epoxy_glUniform4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55316 /* "glUniform4f" */, + 55316 /* "glUniform4f" */, + 55328 /* "glUniform4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55316 /* "glUniform4f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FARBPROC +epoxy_glUniform4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55328 /* "glUniform4fARB" */, + 55316 /* "glUniform4f" */, + 55316 /* "glUniform4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 55328 /* "glUniform4fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FVPROC +epoxy_glUniform4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55343 /* "glUniform4fv" */, + 55343 /* "glUniform4fv" */, + 55356 /* "glUniform4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55343 /* "glUniform4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FVARBPROC +epoxy_glUniform4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55356 /* "glUniform4fvARB" */, + 55343 /* "glUniform4fv" */, + 55343 /* "glUniform4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55356 /* "glUniform4fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IPROC +epoxy_glUniform4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55372 /* "glUniform4i" */, + 55372 /* "glUniform4i" */, + 55452 /* "glUniform4iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55372 /* "glUniform4i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4I64ARBPROC +epoxy_glUniform4i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55384 /* glUniform4i64ARB */); +} + +static PFNGLUNIFORM4I64NVPROC +epoxy_glUniform4i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55401 /* "glUniform4i64NV" */, + 55401 /* "glUniform4i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55401 /* "glUniform4i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4I64VARBPROC +epoxy_glUniform4i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55417 /* glUniform4i64vARB */); +} + +static PFNGLUNIFORM4I64VNVPROC +epoxy_glUniform4i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55435 /* "glUniform4i64vNV" */, + 55435 /* "glUniform4i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55435 /* "glUniform4i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IARBPROC +epoxy_glUniform4iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55452 /* "glUniform4iARB" */, + 55372 /* "glUniform4i" */, + 55372 /* "glUniform4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 55452 /* "glUniform4iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IVPROC +epoxy_glUniform4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55467 /* "glUniform4iv" */, + 55467 /* "glUniform4iv" */, + 55480 /* "glUniform4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55467 /* "glUniform4iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IVARBPROC +epoxy_glUniform4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55480 /* "glUniform4ivARB" */, + 55467 /* "glUniform4iv" */, + 55467 /* "glUniform4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55480 /* "glUniform4ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIPROC +epoxy_glUniform4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55496 /* "glUniform4ui" */, + 55496 /* "glUniform4ui" */, + 55581 /* "glUniform4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55496 /* "glUniform4ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UI64ARBPROC +epoxy_glUniform4ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55509 /* glUniform4ui64ARB */); +} + +static PFNGLUNIFORM4UI64NVPROC +epoxy_glUniform4ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55527 /* "glUniform4ui64NV" */, + 55527 /* "glUniform4ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55527 /* "glUniform4ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UI64VARBPROC +epoxy_glUniform4ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55544 /* glUniform4ui64vARB */); +} + +static PFNGLUNIFORM4UI64VNVPROC +epoxy_glUniform4ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55563 /* "glUniform4ui64vNV" */, + 55563 /* "glUniform4ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55563 /* "glUniform4ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIEXTPROC +epoxy_glUniform4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55581 /* "glUniform4uiEXT" */, + 55496 /* "glUniform4ui" */, + 55496 /* "glUniform4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 55581 /* "glUniform4uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIVPROC +epoxy_glUniform4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55597 /* "glUniform4uiv" */, + 55597 /* "glUniform4uiv" */, + 55611 /* "glUniform4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55597 /* "glUniform4uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIVEXTPROC +epoxy_glUniform4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55611 /* "glUniform4uivEXT" */, + 55597 /* "glUniform4uiv" */, + 55597 /* "glUniform4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55611 /* "glUniform4uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORMBLOCKBINDINGPROC +epoxy_glUniformBlockBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55628 /* "glUniformBlockBinding" */, + 55628 /* "glUniformBlockBinding" */, + 55628 /* "glUniformBlockBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 55628 /* "glUniformBlockBinding" */, + providers, entrypoints); +} + +static PFNGLUNIFORMBUFFEREXTPROC +epoxy_glUniformBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 55650 /* glUniformBufferEXT */); +} + +static PFNGLUNIFORMHANDLEUI64ARBPROC +epoxy_glUniformHandleui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 55669 /* glUniformHandleui64ARB */); +} + +static PFNGLUNIFORMHANDLEUI64NVPROC +epoxy_glUniformHandleui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 55692 /* glUniformHandleui64NV */); +} + +static PFNGLUNIFORMHANDLEUI64VARBPROC +epoxy_glUniformHandleui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 55714 /* glUniformHandleui64vARB */); +} + +static PFNGLUNIFORMHANDLEUI64VNVPROC +epoxy_glUniformHandleui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 55738 /* glUniformHandleui64vNV */); +} + +static PFNGLUNIFORMMATRIX2DVPROC +epoxy_glUniformMatrix2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55761 /* "glUniformMatrix2dv" */, + 55761 /* "glUniformMatrix2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55761 /* "glUniformMatrix2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2FVPROC +epoxy_glUniformMatrix2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55780 /* "glUniformMatrix2fv" */, + 55780 /* "glUniformMatrix2fv" */, + 55799 /* "glUniformMatrix2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55780 /* "glUniformMatrix2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2FVARBPROC +epoxy_glUniformMatrix2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55799 /* "glUniformMatrix2fvARB" */, + 55780 /* "glUniformMatrix2fv" */, + 55780 /* "glUniformMatrix2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55799 /* "glUniformMatrix2fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3DVPROC +epoxy_glUniformMatrix2x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55821 /* "glUniformMatrix2x3dv" */, + 55821 /* "glUniformMatrix2x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55821 /* "glUniformMatrix2x3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3FVPROC +epoxy_glUniformMatrix2x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55842 /* "glUniformMatrix2x3fv" */, + 55842 /* "glUniformMatrix2x3fv" */, + 55863 /* "glUniformMatrix2x3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55842 /* "glUniformMatrix2x3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3FVNVPROC +epoxy_glUniformMatrix2x3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55863 /* "glUniformMatrix2x3fvNV" */, + 55842 /* "glUniformMatrix2x3fv" */, + 55842 /* "glUniformMatrix2x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55863 /* "glUniformMatrix2x3fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4DVPROC +epoxy_glUniformMatrix2x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55886 /* "glUniformMatrix2x4dv" */, + 55886 /* "glUniformMatrix2x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55886 /* "glUniformMatrix2x4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4FVPROC +epoxy_glUniformMatrix2x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55907 /* "glUniformMatrix2x4fv" */, + 55907 /* "glUniformMatrix2x4fv" */, + 55928 /* "glUniformMatrix2x4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55907 /* "glUniformMatrix2x4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4FVNVPROC +epoxy_glUniformMatrix2x4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55928 /* "glUniformMatrix2x4fvNV" */, + 55907 /* "glUniformMatrix2x4fv" */, + 55907 /* "glUniformMatrix2x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55928 /* "glUniformMatrix2x4fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3DVPROC +epoxy_glUniformMatrix3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55951 /* "glUniformMatrix3dv" */, + 55951 /* "glUniformMatrix3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55951 /* "glUniformMatrix3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3FVPROC +epoxy_glUniformMatrix3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55970 /* "glUniformMatrix3fv" */, + 55970 /* "glUniformMatrix3fv" */, + 55989 /* "glUniformMatrix3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55970 /* "glUniformMatrix3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3FVARBPROC +epoxy_glUniformMatrix3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55989 /* "glUniformMatrix3fvARB" */, + 55970 /* "glUniformMatrix3fv" */, + 55970 /* "glUniformMatrix3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55989 /* "glUniformMatrix3fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2DVPROC +epoxy_glUniformMatrix3x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56011 /* "glUniformMatrix3x2dv" */, + 56011 /* "glUniformMatrix3x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56011 /* "glUniformMatrix3x2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2FVPROC +epoxy_glUniformMatrix3x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56032 /* "glUniformMatrix3x2fv" */, + 56032 /* "glUniformMatrix3x2fv" */, + 56053 /* "glUniformMatrix3x2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56032 /* "glUniformMatrix3x2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2FVNVPROC +epoxy_glUniformMatrix3x2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56053 /* "glUniformMatrix3x2fvNV" */, + 56032 /* "glUniformMatrix3x2fv" */, + 56032 /* "glUniformMatrix3x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56053 /* "glUniformMatrix3x2fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4DVPROC +epoxy_glUniformMatrix3x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56076 /* "glUniformMatrix3x4dv" */, + 56076 /* "glUniformMatrix3x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56076 /* "glUniformMatrix3x4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4FVPROC +epoxy_glUniformMatrix3x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56097 /* "glUniformMatrix3x4fv" */, + 56097 /* "glUniformMatrix3x4fv" */, + 56118 /* "glUniformMatrix3x4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56097 /* "glUniformMatrix3x4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4FVNVPROC +epoxy_glUniformMatrix3x4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56118 /* "glUniformMatrix3x4fvNV" */, + 56097 /* "glUniformMatrix3x4fv" */, + 56097 /* "glUniformMatrix3x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56118 /* "glUniformMatrix3x4fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4DVPROC +epoxy_glUniformMatrix4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56141 /* "glUniformMatrix4dv" */, + 56141 /* "glUniformMatrix4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56141 /* "glUniformMatrix4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4FVPROC +epoxy_glUniformMatrix4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56160 /* "glUniformMatrix4fv" */, + 56160 /* "glUniformMatrix4fv" */, + 56179 /* "glUniformMatrix4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56160 /* "glUniformMatrix4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4FVARBPROC +epoxy_glUniformMatrix4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56179 /* "glUniformMatrix4fvARB" */, + 56160 /* "glUniformMatrix4fv" */, + 56160 /* "glUniformMatrix4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56179 /* "glUniformMatrix4fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2DVPROC +epoxy_glUniformMatrix4x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56201 /* "glUniformMatrix4x2dv" */, + 56201 /* "glUniformMatrix4x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56201 /* "glUniformMatrix4x2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2FVPROC +epoxy_glUniformMatrix4x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56222 /* "glUniformMatrix4x2fv" */, + 56222 /* "glUniformMatrix4x2fv" */, + 56243 /* "glUniformMatrix4x2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56222 /* "glUniformMatrix4x2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2FVNVPROC +epoxy_glUniformMatrix4x2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56243 /* "glUniformMatrix4x2fvNV" */, + 56222 /* "glUniformMatrix4x2fv" */, + 56222 /* "glUniformMatrix4x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56243 /* "glUniformMatrix4x2fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3DVPROC +epoxy_glUniformMatrix4x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56266 /* "glUniformMatrix4x3dv" */, + 56266 /* "glUniformMatrix4x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56266 /* "glUniformMatrix4x3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3FVPROC +epoxy_glUniformMatrix4x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56287 /* "glUniformMatrix4x3fv" */, + 56287 /* "glUniformMatrix4x3fv" */, + 56308 /* "glUniformMatrix4x3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56287 /* "glUniformMatrix4x3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3FVNVPROC +epoxy_glUniformMatrix4x3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56308 /* "glUniformMatrix4x3fvNV" */, + 56287 /* "glUniformMatrix4x3fv" */, + 56287 /* "glUniformMatrix4x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56308 /* "glUniformMatrix4x3fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMSUBROUTINESUIVPROC +epoxy_glUniformSubroutinesuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56331 /* "glUniformSubroutinesuiv" */, + 56331 /* "glUniformSubroutinesuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56331 /* "glUniformSubroutinesuiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMUI64NVPROC +epoxy_glUniformui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 56355 /* glUniformui64NV */); +} + +static PFNGLUNIFORMUI64VNVPROC +epoxy_glUniformui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 56371 /* glUniformui64vNV */); +} + +static PFNGLUNLOCKARRAYSEXTPROC +epoxy_glUnlockArraysEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_compiled_vertex_array, 56388 /* glUnlockArraysEXT */); +} + +static PFNGLUNMAPBUFFERPROC +epoxy_glUnmapBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56420 /* "glUnmapBufferARB" */, + 56437 /* "glUnmapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 56406 /* "glUnmapBuffer" */, + providers, entrypoints); +} + +static PFNGLUNMAPBUFFERARBPROC +epoxy_glUnmapBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56420 /* "glUnmapBufferARB" */, + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56437 /* "glUnmapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 56420 /* "glUnmapBufferARB" */, + providers, entrypoints); +} + +static PFNGLUNMAPBUFFEROESPROC +epoxy_glUnmapBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56437 /* "glUnmapBufferOES" */, + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56420 /* "glUnmapBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56437 /* "glUnmapBufferOES" */, + providers, entrypoints); +} + +static PFNGLUNMAPNAMEDBUFFERPROC +epoxy_glUnmapNamedBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56454 /* "glUnmapNamedBuffer" */, + 56454 /* "glUnmapNamedBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 56454 /* "glUnmapNamedBuffer" */, + providers, entrypoints); +} + +static PFNGLUNMAPNAMEDBUFFEREXTPROC +epoxy_glUnmapNamedBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 56473 /* glUnmapNamedBufferEXT */); +} + +static PFNGLUNMAPOBJECTBUFFERATIPROC +epoxy_glUnmapObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_map_object_buffer, 56495 /* glUnmapObjectBufferATI */); +} + +static PFNGLUNMAPTEXTURE2DINTELPROC +epoxy_glUnmapTexture2DINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 56518 /* glUnmapTexture2DINTEL */); +} + +static PFNGLUPDATEOBJECTBUFFERATIPROC +epoxy_glUpdateObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 56540 /* glUpdateObjectBufferATI */); +} + +static PFNGLUSEPROGRAMPROC +epoxy_glUseProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56564 /* "glUseProgram" */, + 56564 /* "glUseProgram" */, + 56577 /* "glUseProgramObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56564 /* "glUseProgram" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMOBJECTARBPROC +epoxy_glUseProgramObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56577 /* "glUseProgramObjectARB" */, + 56564 /* "glUseProgram" */, + 56564 /* "glUseProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 56577 /* "glUseProgramObjectARB" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMSTAGESPROC +epoxy_glUseProgramStages_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56599 /* "glUseProgramStages" */, + 56599 /* "glUseProgramStages" */, + 56599 /* "glUseProgramStages" */, + }; + return gl_provider_resolver(entrypoint_strings + 56599 /* "glUseProgramStages" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMSTAGESEXTPROC +epoxy_glUseProgramStagesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56618 /* glUseProgramStagesEXT */); +} + +static PFNGLUSESHADERPROGRAMEXTPROC +epoxy_glUseShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56640 /* glUseShaderProgramEXT */); +} + +static PFNGLVDPAUFININVPROC +epoxy_glVDPAUFiniNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56662 /* glVDPAUFiniNV */); +} + +static PFNGLVDPAUGETSURFACEIVNVPROC +epoxy_glVDPAUGetSurfaceivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56676 /* glVDPAUGetSurfaceivNV */); +} + +static PFNGLVDPAUINITNVPROC +epoxy_glVDPAUInitNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56698 /* glVDPAUInitNV */); +} + +static PFNGLVDPAUISSURFACENVPROC +epoxy_glVDPAUIsSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56712 /* glVDPAUIsSurfaceNV */); +} + +static PFNGLVDPAUMAPSURFACESNVPROC +epoxy_glVDPAUMapSurfacesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56731 /* glVDPAUMapSurfacesNV */); +} + +static PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC +epoxy_glVDPAURegisterOutputSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56752 /* glVDPAURegisterOutputSurfaceNV */); +} + +static PFNGLVDPAUREGISTERVIDEOSURFACENVPROC +epoxy_glVDPAURegisterVideoSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56783 /* glVDPAURegisterVideoSurfaceNV */); +} + +static PFNGLVDPAUSURFACEACCESSNVPROC +epoxy_glVDPAUSurfaceAccessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56813 /* glVDPAUSurfaceAccessNV */); +} + +static PFNGLVDPAUUNMAPSURFACESNVPROC +epoxy_glVDPAUUnmapSurfacesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56836 /* glVDPAUUnmapSurfacesNV */); +} + +static PFNGLVDPAUUNREGISTERSURFACENVPROC +epoxy_glVDPAUUnregisterSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56859 /* glVDPAUUnregisterSurfaceNV */); +} + +static PFNGLVALIDATEPROGRAMPROC +epoxy_glValidateProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56886 /* "glValidateProgram" */, + 56886 /* "glValidateProgram" */, + 56904 /* "glValidateProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56886 /* "glValidateProgram" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMARBPROC +epoxy_glValidateProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56904 /* "glValidateProgramARB" */, + 56886 /* "glValidateProgram" */, + 56886 /* "glValidateProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 56904 /* "glValidateProgramARB" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMPIPELINEPROC +epoxy_glValidateProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56925 /* "glValidateProgramPipeline" */, + 56925 /* "glValidateProgramPipeline" */, + 56925 /* "glValidateProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 56925 /* "glValidateProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMPIPELINEEXTPROC +epoxy_glValidateProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56951 /* glValidateProgramPipelineEXT */); +} + +static PFNGLVARIANTARRAYOBJECTATIPROC +epoxy_glVariantArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 56980 /* glVariantArrayObjectATI */); +} + +static PFNGLVARIANTPOINTEREXTPROC +epoxy_glVariantPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57004 /* glVariantPointerEXT */); +} + +static PFNGLVARIANTBVEXTPROC +epoxy_glVariantbvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57024 /* glVariantbvEXT */); +} + +static PFNGLVARIANTDVEXTPROC +epoxy_glVariantdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57039 /* glVariantdvEXT */); +} + +static PFNGLVARIANTFVEXTPROC +epoxy_glVariantfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57054 /* glVariantfvEXT */); +} + +static PFNGLVARIANTIVEXTPROC +epoxy_glVariantivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57069 /* glVariantivEXT */); +} + +static PFNGLVARIANTSVEXTPROC +epoxy_glVariantsvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57084 /* glVariantsvEXT */); +} + +static PFNGLVARIANTUBVEXTPROC +epoxy_glVariantubvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57099 /* glVariantubvEXT */); +} + +static PFNGLVARIANTUIVEXTPROC +epoxy_glVariantuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57115 /* glVariantuivEXT */); +} + +static PFNGLVARIANTUSVEXTPROC +epoxy_glVariantusvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57131 /* glVariantusvEXT */); +} + +static PFNGLVERTEX2BOESPROC +epoxy_glVertex2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57147 /* glVertex2bOES */); +} + +static PFNGLVERTEX2BVOESPROC +epoxy_glVertex2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57161 /* glVertex2bvOES */); +} + +static PFNGLVERTEX2DPROC +epoxy_glVertex2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57176 /* glVertex2d */); +} + +static PFNGLVERTEX2DVPROC +epoxy_glVertex2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57187 /* glVertex2dv */); +} + +static PFNGLVERTEX2FPROC +epoxy_glVertex2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57199 /* glVertex2f */); +} + +static PFNGLVERTEX2FVPROC +epoxy_glVertex2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57210 /* glVertex2fv */); +} + +static PFNGLVERTEX2HNVPROC +epoxy_glVertex2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57222 /* glVertex2hNV */); +} + +static PFNGLVERTEX2HVNVPROC +epoxy_glVertex2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57235 /* glVertex2hvNV */); +} + +static PFNGLVERTEX2IPROC +epoxy_glVertex2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57249 /* glVertex2i */); +} + +static PFNGLVERTEX2IVPROC +epoxy_glVertex2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57260 /* glVertex2iv */); +} + +static PFNGLVERTEX2SPROC +epoxy_glVertex2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57272 /* glVertex2s */); +} + +static PFNGLVERTEX2SVPROC +epoxy_glVertex2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57283 /* glVertex2sv */); +} + +static PFNGLVERTEX2XOESPROC +epoxy_glVertex2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57295 /* glVertex2xOES */); +} + +static PFNGLVERTEX2XVOESPROC +epoxy_glVertex2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57309 /* glVertex2xvOES */); +} + +static PFNGLVERTEX3BOESPROC +epoxy_glVertex3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57324 /* glVertex3bOES */); +} + +static PFNGLVERTEX3BVOESPROC +epoxy_glVertex3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57338 /* glVertex3bvOES */); +} + +static PFNGLVERTEX3DPROC +epoxy_glVertex3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57353 /* glVertex3d */); +} + +static PFNGLVERTEX3DVPROC +epoxy_glVertex3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57364 /* glVertex3dv */); +} + +static PFNGLVERTEX3FPROC +epoxy_glVertex3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57376 /* glVertex3f */); +} + +static PFNGLVERTEX3FVPROC +epoxy_glVertex3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57387 /* glVertex3fv */); +} + +static PFNGLVERTEX3HNVPROC +epoxy_glVertex3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57399 /* glVertex3hNV */); +} + +static PFNGLVERTEX3HVNVPROC +epoxy_glVertex3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57412 /* glVertex3hvNV */); +} + +static PFNGLVERTEX3IPROC +epoxy_glVertex3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57426 /* glVertex3i */); +} + +static PFNGLVERTEX3IVPROC +epoxy_glVertex3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57437 /* glVertex3iv */); +} + +static PFNGLVERTEX3SPROC +epoxy_glVertex3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57449 /* glVertex3s */); +} + +static PFNGLVERTEX3SVPROC +epoxy_glVertex3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57460 /* glVertex3sv */); +} + +static PFNGLVERTEX3XOESPROC +epoxy_glVertex3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57472 /* glVertex3xOES */); +} + +static PFNGLVERTEX3XVOESPROC +epoxy_glVertex3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57486 /* glVertex3xvOES */); +} + +static PFNGLVERTEX4BOESPROC +epoxy_glVertex4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57501 /* glVertex4bOES */); +} + +static PFNGLVERTEX4BVOESPROC +epoxy_glVertex4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57515 /* glVertex4bvOES */); +} + +static PFNGLVERTEX4DPROC +epoxy_glVertex4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57530 /* glVertex4d */); +} + +static PFNGLVERTEX4DVPROC +epoxy_glVertex4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57541 /* glVertex4dv */); +} + +static PFNGLVERTEX4FPROC +epoxy_glVertex4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57553 /* glVertex4f */); +} + +static PFNGLVERTEX4FVPROC +epoxy_glVertex4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57564 /* glVertex4fv */); +} + +static PFNGLVERTEX4HNVPROC +epoxy_glVertex4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57576 /* glVertex4hNV */); +} + +static PFNGLVERTEX4HVNVPROC +epoxy_glVertex4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57589 /* glVertex4hvNV */); +} + +static PFNGLVERTEX4IPROC +epoxy_glVertex4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57603 /* glVertex4i */); +} + +static PFNGLVERTEX4IVPROC +epoxy_glVertex4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57614 /* glVertex4iv */); +} + +static PFNGLVERTEX4SPROC +epoxy_glVertex4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57626 /* glVertex4s */); +} + +static PFNGLVERTEX4SVPROC +epoxy_glVertex4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57637 /* glVertex4sv */); +} + +static PFNGLVERTEX4XOESPROC +epoxy_glVertex4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57649 /* glVertex4xOES */); +} + +static PFNGLVERTEX4XVOESPROC +epoxy_glVertex4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57663 /* glVertex4xvOES */); +} + +static PFNGLVERTEXARRAYATTRIBBINDINGPROC +epoxy_glVertexArrayAttribBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57678 /* "glVertexArrayAttribBinding" */, + 57678 /* "glVertexArrayAttribBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 57678 /* "glVertexArrayAttribBinding" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBFORMATPROC +epoxy_glVertexArrayAttribFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57705 /* "glVertexArrayAttribFormat" */, + 57705 /* "glVertexArrayAttribFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57705 /* "glVertexArrayAttribFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBIFORMATPROC +epoxy_glVertexArrayAttribIFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57731 /* "glVertexArrayAttribIFormat" */, + 57731 /* "glVertexArrayAttribIFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57731 /* "glVertexArrayAttribIFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBLFORMATPROC +epoxy_glVertexArrayAttribLFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57758 /* "glVertexArrayAttribLFormat" */, + 57758 /* "glVertexArrayAttribLFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57758 /* "glVertexArrayAttribLFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC +epoxy_glVertexArrayBindVertexBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57785 /* glVertexArrayBindVertexBufferEXT */); +} + +static PFNGLVERTEXARRAYBINDINGDIVISORPROC +epoxy_glVertexArrayBindingDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57818 /* "glVertexArrayBindingDivisor" */, + 57818 /* "glVertexArrayBindingDivisor" */, + }; + return gl_provider_resolver(entrypoint_strings + 57818 /* "glVertexArrayBindingDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYCOLOROFFSETEXTPROC +epoxy_glVertexArrayColorOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57846 /* glVertexArrayColorOffsetEXT */); +} + +static PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC +epoxy_glVertexArrayEdgeFlagOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57874 /* glVertexArrayEdgeFlagOffsetEXT */); +} + +static PFNGLVERTEXARRAYELEMENTBUFFERPROC +epoxy_glVertexArrayElementBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57905 /* "glVertexArrayElementBuffer" */, + 57905 /* "glVertexArrayElementBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 57905 /* "glVertexArrayElementBuffer" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC +epoxy_glVertexArrayFogCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57932 /* glVertexArrayFogCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYINDEXOFFSETEXTPROC +epoxy_glVertexArrayIndexOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57963 /* glVertexArrayIndexOffsetEXT */); +} + +static PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC +epoxy_glVertexArrayMultiTexCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57991 /* glVertexArrayMultiTexCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYNORMALOFFSETEXTPROC +epoxy_glVertexArrayNormalOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58027 /* glVertexArrayNormalOffsetEXT */); +} + +static PFNGLVERTEXARRAYPARAMETERIAPPLEPROC +epoxy_glVertexArrayParameteriAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 58056 /* glVertexArrayParameteriAPPLE */); +} + +static PFNGLVERTEXARRAYRANGEAPPLEPROC +epoxy_glVertexArrayRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 58085 /* glVertexArrayRangeAPPLE */); +} + +static PFNGLVERTEXARRAYRANGENVPROC +epoxy_glVertexArrayRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_array_range, 58109 /* glVertexArrayRangeNV */); +} + +static PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC +epoxy_glVertexArraySecondaryColorOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58130 /* glVertexArraySecondaryColorOffsetEXT */); +} + +static PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC +epoxy_glVertexArrayTexCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58167 /* glVertexArrayTexCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC +epoxy_glVertexArrayVertexAttribBindingEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58198 /* glVertexArrayVertexAttribBindingEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC +epoxy_glVertexArrayVertexAttribDivisorEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58234 /* glVertexArrayVertexAttribDivisorEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC +epoxy_glVertexArrayVertexAttribFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58270 /* glVertexArrayVertexAttribFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC +epoxy_glVertexArrayVertexAttribIFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58305 /* glVertexArrayVertexAttribIFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribIOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58341 /* glVertexArrayVertexAttribIOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC +epoxy_glVertexArrayVertexAttribLFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58377 /* glVertexArrayVertexAttribLFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribLOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58413 /* glVertexArrayVertexAttribLOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58449 /* glVertexArrayVertexAttribOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC +epoxy_glVertexArrayVertexBindingDivisorEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58484 /* glVertexArrayVertexBindingDivisorEXT */); +} + +static PFNGLVERTEXARRAYVERTEXBUFFERPROC +epoxy_glVertexArrayVertexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58521 /* "glVertexArrayVertexBuffer" */, + 58521 /* "glVertexArrayVertexBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 58521 /* "glVertexArrayVertexBuffer" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYVERTEXBUFFERSPROC +epoxy_glVertexArrayVertexBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58547 /* "glVertexArrayVertexBuffers" */, + 58547 /* "glVertexArrayVertexBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 58547 /* "glVertexArrayVertexBuffers" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC +epoxy_glVertexArrayVertexOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58574 /* glVertexArrayVertexOffsetEXT */); +} + +static PFNGLVERTEXATTRIB1DPROC +epoxy_glVertexAttrib1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58603 /* "glVertexAttrib1d" */, + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + 58640 /* "glVertexAttrib1dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58603 /* "glVertexAttrib1d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DARBPROC +epoxy_glVertexAttrib1dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + 58603 /* "glVertexAttrib1d" */, + 58640 /* "glVertexAttrib1dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58620 /* "glVertexAttrib1dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DNVPROC +epoxy_glVertexAttrib1dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58640 /* "glVertexAttrib1dNV" */, + 58603 /* "glVertexAttrib1d" */, + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58640 /* "glVertexAttrib1dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVPROC +epoxy_glVertexAttrib1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58659 /* "glVertexAttrib1dv" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58698 /* "glVertexAttrib1dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58659 /* "glVertexAttrib1dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVARBPROC +epoxy_glVertexAttrib1dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58659 /* "glVertexAttrib1dv" */, + 58698 /* "glVertexAttrib1dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58677 /* "glVertexAttrib1dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVNVPROC +epoxy_glVertexAttrib1dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58698 /* "glVertexAttrib1dvNV" */, + 58659 /* "glVertexAttrib1dv" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58698 /* "glVertexAttrib1dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FPROC +epoxy_glVertexAttrib1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + 58755 /* "glVertexAttrib1fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58718 /* "glVertexAttrib1f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FARBPROC +epoxy_glVertexAttrib1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58755 /* "glVertexAttrib1fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58735 /* "glVertexAttrib1fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FNVPROC +epoxy_glVertexAttrib1fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58755 /* "glVertexAttrib1fNV" */, + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58755 /* "glVertexAttrib1fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVPROC +epoxy_glVertexAttrib1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58813 /* "glVertexAttrib1fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58774 /* "glVertexAttrib1fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVARBPROC +epoxy_glVertexAttrib1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58813 /* "glVertexAttrib1fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58792 /* "glVertexAttrib1fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVNVPROC +epoxy_glVertexAttrib1fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58813 /* "glVertexAttrib1fvNV" */, + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58813 /* "glVertexAttrib1fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1HNVPROC +epoxy_glVertexAttrib1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 58833 /* glVertexAttrib1hNV */); +} + +static PFNGLVERTEXATTRIB1HVNVPROC +epoxy_glVertexAttrib1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 58852 /* glVertexAttrib1hvNV */); +} + +static PFNGLVERTEXATTRIB1SPROC +epoxy_glVertexAttrib1s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58872 /* "glVertexAttrib1s" */, + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + 58909 /* "glVertexAttrib1sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58872 /* "glVertexAttrib1s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SARBPROC +epoxy_glVertexAttrib1sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + 58872 /* "glVertexAttrib1s" */, + 58909 /* "glVertexAttrib1sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58889 /* "glVertexAttrib1sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SNVPROC +epoxy_glVertexAttrib1sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58909 /* "glVertexAttrib1sNV" */, + 58872 /* "glVertexAttrib1s" */, + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58909 /* "glVertexAttrib1sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVPROC +epoxy_glVertexAttrib1sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58928 /* "glVertexAttrib1sv" */, + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + 58967 /* "glVertexAttrib1svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58928 /* "glVertexAttrib1sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVARBPROC +epoxy_glVertexAttrib1svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + 58928 /* "glVertexAttrib1sv" */, + 58967 /* "glVertexAttrib1svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58946 /* "glVertexAttrib1svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVNVPROC +epoxy_glVertexAttrib1svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58967 /* "glVertexAttrib1svNV" */, + 58928 /* "glVertexAttrib1sv" */, + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58967 /* "glVertexAttrib1svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DPROC +epoxy_glVertexAttrib2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58987 /* "glVertexAttrib2d" */, + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + 59024 /* "glVertexAttrib2dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58987 /* "glVertexAttrib2d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DARBPROC +epoxy_glVertexAttrib2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + 58987 /* "glVertexAttrib2d" */, + 59024 /* "glVertexAttrib2dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59004 /* "glVertexAttrib2dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DNVPROC +epoxy_glVertexAttrib2dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59024 /* "glVertexAttrib2dNV" */, + 58987 /* "glVertexAttrib2d" */, + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59024 /* "glVertexAttrib2dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVPROC +epoxy_glVertexAttrib2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59043 /* "glVertexAttrib2dv" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59082 /* "glVertexAttrib2dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59043 /* "glVertexAttrib2dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVARBPROC +epoxy_glVertexAttrib2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59043 /* "glVertexAttrib2dv" */, + 59082 /* "glVertexAttrib2dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59061 /* "glVertexAttrib2dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVNVPROC +epoxy_glVertexAttrib2dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59082 /* "glVertexAttrib2dvNV" */, + 59043 /* "glVertexAttrib2dv" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59082 /* "glVertexAttrib2dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FPROC +epoxy_glVertexAttrib2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + 59139 /* "glVertexAttrib2fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59102 /* "glVertexAttrib2f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FARBPROC +epoxy_glVertexAttrib2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59139 /* "glVertexAttrib2fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59119 /* "glVertexAttrib2fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FNVPROC +epoxy_glVertexAttrib2fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59139 /* "glVertexAttrib2fNV" */, + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59139 /* "glVertexAttrib2fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVPROC +epoxy_glVertexAttrib2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59197 /* "glVertexAttrib2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59158 /* "glVertexAttrib2fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVARBPROC +epoxy_glVertexAttrib2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59197 /* "glVertexAttrib2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59176 /* "glVertexAttrib2fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVNVPROC +epoxy_glVertexAttrib2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59197 /* "glVertexAttrib2fvNV" */, + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59197 /* "glVertexAttrib2fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2HNVPROC +epoxy_glVertexAttrib2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59217 /* glVertexAttrib2hNV */); +} + +static PFNGLVERTEXATTRIB2HVNVPROC +epoxy_glVertexAttrib2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59236 /* glVertexAttrib2hvNV */); +} + +static PFNGLVERTEXATTRIB2SPROC +epoxy_glVertexAttrib2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59256 /* "glVertexAttrib2s" */, + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + 59293 /* "glVertexAttrib2sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59256 /* "glVertexAttrib2s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SARBPROC +epoxy_glVertexAttrib2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + 59256 /* "glVertexAttrib2s" */, + 59293 /* "glVertexAttrib2sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59273 /* "glVertexAttrib2sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SNVPROC +epoxy_glVertexAttrib2sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59293 /* "glVertexAttrib2sNV" */, + 59256 /* "glVertexAttrib2s" */, + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59293 /* "glVertexAttrib2sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVPROC +epoxy_glVertexAttrib2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59312 /* "glVertexAttrib2sv" */, + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + 59351 /* "glVertexAttrib2svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59312 /* "glVertexAttrib2sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVARBPROC +epoxy_glVertexAttrib2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + 59312 /* "glVertexAttrib2sv" */, + 59351 /* "glVertexAttrib2svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59330 /* "glVertexAttrib2svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVNVPROC +epoxy_glVertexAttrib2svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59351 /* "glVertexAttrib2svNV" */, + 59312 /* "glVertexAttrib2sv" */, + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59351 /* "glVertexAttrib2svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DPROC +epoxy_glVertexAttrib3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59371 /* "glVertexAttrib3d" */, + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + 59408 /* "glVertexAttrib3dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59371 /* "glVertexAttrib3d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DARBPROC +epoxy_glVertexAttrib3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + 59371 /* "glVertexAttrib3d" */, + 59408 /* "glVertexAttrib3dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59388 /* "glVertexAttrib3dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DNVPROC +epoxy_glVertexAttrib3dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59408 /* "glVertexAttrib3dNV" */, + 59371 /* "glVertexAttrib3d" */, + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59408 /* "glVertexAttrib3dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVPROC +epoxy_glVertexAttrib3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59427 /* "glVertexAttrib3dv" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59466 /* "glVertexAttrib3dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59427 /* "glVertexAttrib3dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVARBPROC +epoxy_glVertexAttrib3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59427 /* "glVertexAttrib3dv" */, + 59466 /* "glVertexAttrib3dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59445 /* "glVertexAttrib3dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVNVPROC +epoxy_glVertexAttrib3dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59466 /* "glVertexAttrib3dvNV" */, + 59427 /* "glVertexAttrib3dv" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59466 /* "glVertexAttrib3dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FPROC +epoxy_glVertexAttrib3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + 59523 /* "glVertexAttrib3fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59486 /* "glVertexAttrib3f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FARBPROC +epoxy_glVertexAttrib3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59523 /* "glVertexAttrib3fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59503 /* "glVertexAttrib3fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FNVPROC +epoxy_glVertexAttrib3fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59523 /* "glVertexAttrib3fNV" */, + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59523 /* "glVertexAttrib3fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVPROC +epoxy_glVertexAttrib3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59581 /* "glVertexAttrib3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59542 /* "glVertexAttrib3fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVARBPROC +epoxy_glVertexAttrib3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59581 /* "glVertexAttrib3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59560 /* "glVertexAttrib3fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVNVPROC +epoxy_glVertexAttrib3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59581 /* "glVertexAttrib3fvNV" */, + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59581 /* "glVertexAttrib3fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3HNVPROC +epoxy_glVertexAttrib3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59601 /* glVertexAttrib3hNV */); +} + +static PFNGLVERTEXATTRIB3HVNVPROC +epoxy_glVertexAttrib3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59620 /* glVertexAttrib3hvNV */); +} + +static PFNGLVERTEXATTRIB3SPROC +epoxy_glVertexAttrib3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59640 /* "glVertexAttrib3s" */, + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + 59677 /* "glVertexAttrib3sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59640 /* "glVertexAttrib3s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SARBPROC +epoxy_glVertexAttrib3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + 59640 /* "glVertexAttrib3s" */, + 59677 /* "glVertexAttrib3sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59657 /* "glVertexAttrib3sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SNVPROC +epoxy_glVertexAttrib3sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59677 /* "glVertexAttrib3sNV" */, + 59640 /* "glVertexAttrib3s" */, + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59677 /* "glVertexAttrib3sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVPROC +epoxy_glVertexAttrib3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59696 /* "glVertexAttrib3sv" */, + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + 59735 /* "glVertexAttrib3svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59696 /* "glVertexAttrib3sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVARBPROC +epoxy_glVertexAttrib3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + 59696 /* "glVertexAttrib3sv" */, + 59735 /* "glVertexAttrib3svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59714 /* "glVertexAttrib3svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVNVPROC +epoxy_glVertexAttrib3svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59735 /* "glVertexAttrib3svNV" */, + 59696 /* "glVertexAttrib3sv" */, + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59735 /* "glVertexAttrib3svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NBVPROC +epoxy_glVertexAttrib4Nbv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59755 /* "glVertexAttrib4Nbv" */, + 59774 /* "glVertexAttrib4NbvARB" */, + 59774 /* "glVertexAttrib4NbvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59755 /* "glVertexAttrib4Nbv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NBVARBPROC +epoxy_glVertexAttrib4NbvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59774 /* "glVertexAttrib4NbvARB" */, + 59774 /* "glVertexAttrib4NbvARB" */, + 59755 /* "glVertexAttrib4Nbv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59774 /* "glVertexAttrib4NbvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NIVPROC +epoxy_glVertexAttrib4Niv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59796 /* "glVertexAttrib4Niv" */, + 59815 /* "glVertexAttrib4NivARB" */, + 59815 /* "glVertexAttrib4NivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59796 /* "glVertexAttrib4Niv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NIVARBPROC +epoxy_glVertexAttrib4NivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59815 /* "glVertexAttrib4NivARB" */, + 59815 /* "glVertexAttrib4NivARB" */, + 59796 /* "glVertexAttrib4Niv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59815 /* "glVertexAttrib4NivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NSVPROC +epoxy_glVertexAttrib4Nsv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59837 /* "glVertexAttrib4Nsv" */, + 59856 /* "glVertexAttrib4NsvARB" */, + 59856 /* "glVertexAttrib4NsvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59837 /* "glVertexAttrib4Nsv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NSVARBPROC +epoxy_glVertexAttrib4NsvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59856 /* "glVertexAttrib4NsvARB" */, + 59856 /* "glVertexAttrib4NsvARB" */, + 59837 /* "glVertexAttrib4Nsv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59856 /* "glVertexAttrib4NsvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBPROC +epoxy_glVertexAttrib4Nub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59878 /* "glVertexAttrib4Nub" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + 60510 /* "glVertexAttrib4ubNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59878 /* "glVertexAttrib4Nub" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBARBPROC +epoxy_glVertexAttrib4NubARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59878 /* "glVertexAttrib4Nub" */, + 60510 /* "glVertexAttrib4ubNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59897 /* "glVertexAttrib4NubARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBVPROC +epoxy_glVertexAttrib4Nubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59919 /* "glVertexAttrib4Nubv" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 60571 /* "glVertexAttrib4ubvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59919 /* "glVertexAttrib4Nubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBVARBPROC +epoxy_glVertexAttrib4NubvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59919 /* "glVertexAttrib4Nubv" */, + 60571 /* "glVertexAttrib4ubvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59939 /* "glVertexAttrib4NubvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUIVPROC +epoxy_glVertexAttrib4Nuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59962 /* "glVertexAttrib4Nuiv" */, + 59982 /* "glVertexAttrib4NuivARB" */, + 59982 /* "glVertexAttrib4NuivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59962 /* "glVertexAttrib4Nuiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUIVARBPROC +epoxy_glVertexAttrib4NuivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59982 /* "glVertexAttrib4NuivARB" */, + 59982 /* "glVertexAttrib4NuivARB" */, + 59962 /* "glVertexAttrib4Nuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59982 /* "glVertexAttrib4NuivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUSVPROC +epoxy_glVertexAttrib4Nusv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60005 /* "glVertexAttrib4Nusv" */, + 60025 /* "glVertexAttrib4NusvARB" */, + 60025 /* "glVertexAttrib4NusvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60005 /* "glVertexAttrib4Nusv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUSVARBPROC +epoxy_glVertexAttrib4NusvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60025 /* "glVertexAttrib4NusvARB" */, + 60025 /* "glVertexAttrib4NusvARB" */, + 60005 /* "glVertexAttrib4Nusv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60025 /* "glVertexAttrib4NusvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4BVPROC +epoxy_glVertexAttrib4bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60048 /* "glVertexAttrib4bv" */, + 60066 /* "glVertexAttrib4bvARB" */, + 60066 /* "glVertexAttrib4bvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60048 /* "glVertexAttrib4bv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4BVARBPROC +epoxy_glVertexAttrib4bvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60066 /* "glVertexAttrib4bvARB" */, + 60066 /* "glVertexAttrib4bvARB" */, + 60048 /* "glVertexAttrib4bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60066 /* "glVertexAttrib4bvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DPROC +epoxy_glVertexAttrib4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60087 /* "glVertexAttrib4d" */, + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + 60124 /* "glVertexAttrib4dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60087 /* "glVertexAttrib4d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DARBPROC +epoxy_glVertexAttrib4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + 60087 /* "glVertexAttrib4d" */, + 60124 /* "glVertexAttrib4dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60104 /* "glVertexAttrib4dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DNVPROC +epoxy_glVertexAttrib4dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60124 /* "glVertexAttrib4dNV" */, + 60087 /* "glVertexAttrib4d" */, + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60124 /* "glVertexAttrib4dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVPROC +epoxy_glVertexAttrib4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60143 /* "glVertexAttrib4dv" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60182 /* "glVertexAttrib4dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60143 /* "glVertexAttrib4dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVARBPROC +epoxy_glVertexAttrib4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60143 /* "glVertexAttrib4dv" */, + 60182 /* "glVertexAttrib4dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60161 /* "glVertexAttrib4dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVNVPROC +epoxy_glVertexAttrib4dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60182 /* "glVertexAttrib4dvNV" */, + 60143 /* "glVertexAttrib4dv" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60182 /* "glVertexAttrib4dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FPROC +epoxy_glVertexAttrib4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + 60239 /* "glVertexAttrib4fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60202 /* "glVertexAttrib4f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FARBPROC +epoxy_glVertexAttrib4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60239 /* "glVertexAttrib4fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60219 /* "glVertexAttrib4fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FNVPROC +epoxy_glVertexAttrib4fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60239 /* "glVertexAttrib4fNV" */, + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60239 /* "glVertexAttrib4fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVPROC +epoxy_glVertexAttrib4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60297 /* "glVertexAttrib4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60258 /* "glVertexAttrib4fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVARBPROC +epoxy_glVertexAttrib4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60297 /* "glVertexAttrib4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60276 /* "glVertexAttrib4fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVNVPROC +epoxy_glVertexAttrib4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60297 /* "glVertexAttrib4fvNV" */, + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60297 /* "glVertexAttrib4fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4HNVPROC +epoxy_glVertexAttrib4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 60317 /* glVertexAttrib4hNV */); +} + +static PFNGLVERTEXATTRIB4HVNVPROC +epoxy_glVertexAttrib4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 60336 /* glVertexAttrib4hvNV */); +} + +static PFNGLVERTEXATTRIB4IVPROC +epoxy_glVertexAttrib4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60356 /* "glVertexAttrib4iv" */, + 60374 /* "glVertexAttrib4ivARB" */, + 60374 /* "glVertexAttrib4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60356 /* "glVertexAttrib4iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4IVARBPROC +epoxy_glVertexAttrib4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60374 /* "glVertexAttrib4ivARB" */, + 60374 /* "glVertexAttrib4ivARB" */, + 60356 /* "glVertexAttrib4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60374 /* "glVertexAttrib4ivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SPROC +epoxy_glVertexAttrib4s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60395 /* "glVertexAttrib4s" */, + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + 60432 /* "glVertexAttrib4sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60395 /* "glVertexAttrib4s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SARBPROC +epoxy_glVertexAttrib4sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + 60395 /* "glVertexAttrib4s" */, + 60432 /* "glVertexAttrib4sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60412 /* "glVertexAttrib4sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SNVPROC +epoxy_glVertexAttrib4sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60432 /* "glVertexAttrib4sNV" */, + 60395 /* "glVertexAttrib4s" */, + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60432 /* "glVertexAttrib4sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVPROC +epoxy_glVertexAttrib4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60451 /* "glVertexAttrib4sv" */, + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + 60490 /* "glVertexAttrib4svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60451 /* "glVertexAttrib4sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVARBPROC +epoxy_glVertexAttrib4svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + 60451 /* "glVertexAttrib4sv" */, + 60490 /* "glVertexAttrib4svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60469 /* "glVertexAttrib4svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVNVPROC +epoxy_glVertexAttrib4svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60490 /* "glVertexAttrib4svNV" */, + 60451 /* "glVertexAttrib4sv" */, + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60490 /* "glVertexAttrib4svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBNVPROC +epoxy_glVertexAttrib4ubNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60510 /* "glVertexAttrib4ubNV" */, + 59878 /* "glVertexAttrib4Nub" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60510 /* "glVertexAttrib4ubNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVPROC +epoxy_glVertexAttrib4ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60530 /* "glVertexAttrib4ubv" */, + 60549 /* "glVertexAttrib4ubvARB" */, + 60549 /* "glVertexAttrib4ubvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60530 /* "glVertexAttrib4ubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVARBPROC +epoxy_glVertexAttrib4ubvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60549 /* "glVertexAttrib4ubvARB" */, + 60549 /* "glVertexAttrib4ubvARB" */, + 60530 /* "glVertexAttrib4ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60549 /* "glVertexAttrib4ubvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVNVPROC +epoxy_glVertexAttrib4ubvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60571 /* "glVertexAttrib4ubvNV" */, + 59919 /* "glVertexAttrib4Nubv" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60571 /* "glVertexAttrib4ubvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UIVPROC +epoxy_glVertexAttrib4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60592 /* "glVertexAttrib4uiv" */, + 60611 /* "glVertexAttrib4uivARB" */, + 60611 /* "glVertexAttrib4uivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60592 /* "glVertexAttrib4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UIVARBPROC +epoxy_glVertexAttrib4uivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60611 /* "glVertexAttrib4uivARB" */, + 60611 /* "glVertexAttrib4uivARB" */, + 60592 /* "glVertexAttrib4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60611 /* "glVertexAttrib4uivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4USVPROC +epoxy_glVertexAttrib4usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60633 /* "glVertexAttrib4usv" */, + 60652 /* "glVertexAttrib4usvARB" */, + 60652 /* "glVertexAttrib4usvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60633 /* "glVertexAttrib4usv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4USVARBPROC +epoxy_glVertexAttrib4usvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60652 /* "glVertexAttrib4usvARB" */, + 60652 /* "glVertexAttrib4usvARB" */, + 60633 /* "glVertexAttrib4usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60652 /* "glVertexAttrib4usvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBARRAYOBJECTATIPROC +epoxy_glVertexAttribArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 60674 /* glVertexAttribArrayObjectATI */); +} + +static PFNGLVERTEXATTRIBBINDINGPROC +epoxy_glVertexAttribBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60703 /* "glVertexAttribBinding" */, + 60703 /* "glVertexAttribBinding" */, + 60703 /* "glVertexAttribBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 60703 /* "glVertexAttribBinding" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORPROC +epoxy_glVertexAttribDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60725 /* "glVertexAttribDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORANGLEPROC +epoxy_glVertexAttribDivisorANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60747 /* "glVertexAttribDivisorANGLE" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60747 /* "glVertexAttribDivisorANGLE" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORARBPROC +epoxy_glVertexAttribDivisorARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60774 /* "glVertexAttribDivisorARB" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60774 /* "glVertexAttribDivisorARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISOREXTPROC +epoxy_glVertexAttribDivisorEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60799 /* "glVertexAttribDivisorEXT" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60799 /* "glVertexAttribDivisorEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORNVPROC +epoxy_glVertexAttribDivisorNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60824 /* "glVertexAttribDivisorNV" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60824 /* "glVertexAttribDivisorNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBFORMATPROC +epoxy_glVertexAttribFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60848 /* "glVertexAttribFormat" */, + 60848 /* "glVertexAttribFormat" */, + 60848 /* "glVertexAttribFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 60848 /* "glVertexAttribFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBFORMATNVPROC +epoxy_glVertexAttribFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 60869 /* glVertexAttribFormatNV */); +} + +static PFNGLVERTEXATTRIBI1IPROC +epoxy_glVertexAttribI1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60892 /* "glVertexAttribI1i" */, + 60910 /* "glVertexAttribI1iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60892 /* "glVertexAttribI1i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IEXTPROC +epoxy_glVertexAttribI1iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60910 /* "glVertexAttribI1iEXT" */, + 60892 /* "glVertexAttribI1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 60910 /* "glVertexAttribI1iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IVPROC +epoxy_glVertexAttribI1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60931 /* "glVertexAttribI1iv" */, + 60950 /* "glVertexAttribI1ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60931 /* "glVertexAttribI1iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IVEXTPROC +epoxy_glVertexAttribI1ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60950 /* "glVertexAttribI1ivEXT" */, + 60931 /* "glVertexAttribI1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60950 /* "glVertexAttribI1ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIPROC +epoxy_glVertexAttribI1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60972 /* "glVertexAttribI1ui" */, + 60991 /* "glVertexAttribI1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60972 /* "glVertexAttribI1ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIEXTPROC +epoxy_glVertexAttribI1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60991 /* "glVertexAttribI1uiEXT" */, + 60972 /* "glVertexAttribI1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 60991 /* "glVertexAttribI1uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIVPROC +epoxy_glVertexAttribI1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61013 /* "glVertexAttribI1uiv" */, + 61033 /* "glVertexAttribI1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61013 /* "glVertexAttribI1uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIVEXTPROC +epoxy_glVertexAttribI1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61033 /* "glVertexAttribI1uivEXT" */, + 61013 /* "glVertexAttribI1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61033 /* "glVertexAttribI1uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IPROC +epoxy_glVertexAttribI2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61056 /* "glVertexAttribI2i" */, + 61074 /* "glVertexAttribI2iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61056 /* "glVertexAttribI2i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IEXTPROC +epoxy_glVertexAttribI2iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61074 /* "glVertexAttribI2iEXT" */, + 61056 /* "glVertexAttribI2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61074 /* "glVertexAttribI2iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IVPROC +epoxy_glVertexAttribI2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61095 /* "glVertexAttribI2iv" */, + 61114 /* "glVertexAttribI2ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61095 /* "glVertexAttribI2iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IVEXTPROC +epoxy_glVertexAttribI2ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61114 /* "glVertexAttribI2ivEXT" */, + 61095 /* "glVertexAttribI2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61114 /* "glVertexAttribI2ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIPROC +epoxy_glVertexAttribI2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61136 /* "glVertexAttribI2ui" */, + 61155 /* "glVertexAttribI2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61136 /* "glVertexAttribI2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIEXTPROC +epoxy_glVertexAttribI2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61155 /* "glVertexAttribI2uiEXT" */, + 61136 /* "glVertexAttribI2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61155 /* "glVertexAttribI2uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIVPROC +epoxy_glVertexAttribI2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61177 /* "glVertexAttribI2uiv" */, + 61197 /* "glVertexAttribI2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61177 /* "glVertexAttribI2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIVEXTPROC +epoxy_glVertexAttribI2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61197 /* "glVertexAttribI2uivEXT" */, + 61177 /* "glVertexAttribI2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61197 /* "glVertexAttribI2uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IPROC +epoxy_glVertexAttribI3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61220 /* "glVertexAttribI3i" */, + 61238 /* "glVertexAttribI3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61220 /* "glVertexAttribI3i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IEXTPROC +epoxy_glVertexAttribI3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61238 /* "glVertexAttribI3iEXT" */, + 61220 /* "glVertexAttribI3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61238 /* "glVertexAttribI3iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IVPROC +epoxy_glVertexAttribI3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61259 /* "glVertexAttribI3iv" */, + 61278 /* "glVertexAttribI3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61259 /* "glVertexAttribI3iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IVEXTPROC +epoxy_glVertexAttribI3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61278 /* "glVertexAttribI3ivEXT" */, + 61259 /* "glVertexAttribI3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61278 /* "glVertexAttribI3ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIPROC +epoxy_glVertexAttribI3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61300 /* "glVertexAttribI3ui" */, + 61319 /* "glVertexAttribI3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61300 /* "glVertexAttribI3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIEXTPROC +epoxy_glVertexAttribI3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61319 /* "glVertexAttribI3uiEXT" */, + 61300 /* "glVertexAttribI3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61319 /* "glVertexAttribI3uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIVPROC +epoxy_glVertexAttribI3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61341 /* "glVertexAttribI3uiv" */, + 61361 /* "glVertexAttribI3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61341 /* "glVertexAttribI3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIVEXTPROC +epoxy_glVertexAttribI3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61361 /* "glVertexAttribI3uivEXT" */, + 61341 /* "glVertexAttribI3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61361 /* "glVertexAttribI3uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4BVPROC +epoxy_glVertexAttribI4bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61384 /* "glVertexAttribI4bv" */, + 61403 /* "glVertexAttribI4bvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61384 /* "glVertexAttribI4bv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4BVEXTPROC +epoxy_glVertexAttribI4bvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61403 /* "glVertexAttribI4bvEXT" */, + 61384 /* "glVertexAttribI4bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61403 /* "glVertexAttribI4bvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IPROC +epoxy_glVertexAttribI4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61425 /* "glVertexAttribI4i" */, + 61425 /* "glVertexAttribI4i" */, + 61443 /* "glVertexAttribI4iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61425 /* "glVertexAttribI4i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IEXTPROC +epoxy_glVertexAttribI4iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61443 /* "glVertexAttribI4iEXT" */, + 61425 /* "glVertexAttribI4i" */, + 61425 /* "glVertexAttribI4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61443 /* "glVertexAttribI4iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IVPROC +epoxy_glVertexAttribI4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61464 /* "glVertexAttribI4iv" */, + 61464 /* "glVertexAttribI4iv" */, + 61483 /* "glVertexAttribI4ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61464 /* "glVertexAttribI4iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IVEXTPROC +epoxy_glVertexAttribI4ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61483 /* "glVertexAttribI4ivEXT" */, + 61464 /* "glVertexAttribI4iv" */, + 61464 /* "glVertexAttribI4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61483 /* "glVertexAttribI4ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4SVPROC +epoxy_glVertexAttribI4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61505 /* "glVertexAttribI4sv" */, + 61524 /* "glVertexAttribI4svEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61505 /* "glVertexAttribI4sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4SVEXTPROC +epoxy_glVertexAttribI4svEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61524 /* "glVertexAttribI4svEXT" */, + 61505 /* "glVertexAttribI4sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61524 /* "glVertexAttribI4svEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UBVPROC +epoxy_glVertexAttribI4ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61546 /* "glVertexAttribI4ubv" */, + 61566 /* "glVertexAttribI4ubvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61546 /* "glVertexAttribI4ubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UBVEXTPROC +epoxy_glVertexAttribI4ubvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61566 /* "glVertexAttribI4ubvEXT" */, + 61546 /* "glVertexAttribI4ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61566 /* "glVertexAttribI4ubvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIPROC +epoxy_glVertexAttribI4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61589 /* "glVertexAttribI4ui" */, + 61589 /* "glVertexAttribI4ui" */, + 61608 /* "glVertexAttribI4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61589 /* "glVertexAttribI4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIEXTPROC +epoxy_glVertexAttribI4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61608 /* "glVertexAttribI4uiEXT" */, + 61589 /* "glVertexAttribI4ui" */, + 61589 /* "glVertexAttribI4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61608 /* "glVertexAttribI4uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIVPROC +epoxy_glVertexAttribI4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61630 /* "glVertexAttribI4uiv" */, + 61630 /* "glVertexAttribI4uiv" */, + 61650 /* "glVertexAttribI4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61630 /* "glVertexAttribI4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIVEXTPROC +epoxy_glVertexAttribI4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61650 /* "glVertexAttribI4uivEXT" */, + 61630 /* "glVertexAttribI4uiv" */, + 61630 /* "glVertexAttribI4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61650 /* "glVertexAttribI4uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4USVPROC +epoxy_glVertexAttribI4usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61673 /* "glVertexAttribI4usv" */, + 61693 /* "glVertexAttribI4usvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61673 /* "glVertexAttribI4usv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4USVEXTPROC +epoxy_glVertexAttribI4usvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61693 /* "glVertexAttribI4usvEXT" */, + 61673 /* "glVertexAttribI4usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61693 /* "glVertexAttribI4usvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIFORMATPROC +epoxy_glVertexAttribIFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61716 /* "glVertexAttribIFormat" */, + 61716 /* "glVertexAttribIFormat" */, + 61716 /* "glVertexAttribIFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 61716 /* "glVertexAttribIFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIFORMATNVPROC +epoxy_glVertexAttribIFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 61738 /* glVertexAttribIFormatNV */); +} + +static PFNGLVERTEXATTRIBIPOINTERPROC +epoxy_glVertexAttribIPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61762 /* "glVertexAttribIPointer" */, + 61762 /* "glVertexAttribIPointer" */, + 61785 /* "glVertexAttribIPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61762 /* "glVertexAttribIPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIPOINTEREXTPROC +epoxy_glVertexAttribIPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61785 /* "glVertexAttribIPointerEXT" */, + 61762 /* "glVertexAttribIPointer" */, + 61762 /* "glVertexAttribIPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 61785 /* "glVertexAttribIPointerEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DPROC +epoxy_glVertexAttribL1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61811 /* "glVertexAttribL1d" */, + 61811 /* "glVertexAttribL1d" */, + 61829 /* "glVertexAttribL1dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61811 /* "glVertexAttribL1d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DEXTPROC +epoxy_glVertexAttribL1dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61829 /* "glVertexAttribL1dEXT" */, + 61811 /* "glVertexAttribL1d" */, + 61811 /* "glVertexAttribL1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 61829 /* "glVertexAttribL1dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DVPROC +epoxy_glVertexAttribL1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61850 /* "glVertexAttribL1dv" */, + 61850 /* "glVertexAttribL1dv" */, + 61869 /* "glVertexAttribL1dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61850 /* "glVertexAttribL1dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DVEXTPROC +epoxy_glVertexAttribL1dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61869 /* "glVertexAttribL1dvEXT" */, + 61850 /* "glVertexAttribL1dv" */, + 61850 /* "glVertexAttribL1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61869 /* "glVertexAttribL1dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1I64NVPROC +epoxy_glVertexAttribL1i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61891 /* glVertexAttribL1i64NV */); +} + +static PFNGLVERTEXATTRIBL1I64VNVPROC +epoxy_glVertexAttribL1i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61913 /* glVertexAttribL1i64vNV */); +} + +static PFNGLVERTEXATTRIBL1UI64ARBPROC +epoxy_glVertexAttribL1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 61936 /* glVertexAttribL1ui64ARB */); +} + +static PFNGLVERTEXATTRIBL1UI64NVPROC +epoxy_glVertexAttribL1ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61960 /* glVertexAttribL1ui64NV */); +} + +static PFNGLVERTEXATTRIBL1UI64VARBPROC +epoxy_glVertexAttribL1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 61983 /* glVertexAttribL1ui64vARB */); +} + +static PFNGLVERTEXATTRIBL1UI64VNVPROC +epoxy_glVertexAttribL1ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62008 /* glVertexAttribL1ui64vNV */); +} + +static PFNGLVERTEXATTRIBL2DPROC +epoxy_glVertexAttribL2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62032 /* "glVertexAttribL2d" */, + 62032 /* "glVertexAttribL2d" */, + 62050 /* "glVertexAttribL2dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62032 /* "glVertexAttribL2d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DEXTPROC +epoxy_glVertexAttribL2dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62050 /* "glVertexAttribL2dEXT" */, + 62032 /* "glVertexAttribL2d" */, + 62032 /* "glVertexAttribL2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62050 /* "glVertexAttribL2dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DVPROC +epoxy_glVertexAttribL2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62071 /* "glVertexAttribL2dv" */, + 62071 /* "glVertexAttribL2dv" */, + 62090 /* "glVertexAttribL2dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62071 /* "glVertexAttribL2dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DVEXTPROC +epoxy_glVertexAttribL2dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62090 /* "glVertexAttribL2dvEXT" */, + 62071 /* "glVertexAttribL2dv" */, + 62071 /* "glVertexAttribL2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62090 /* "glVertexAttribL2dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2I64NVPROC +epoxy_glVertexAttribL2i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62112 /* glVertexAttribL2i64NV */); +} + +static PFNGLVERTEXATTRIBL2I64VNVPROC +epoxy_glVertexAttribL2i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62134 /* glVertexAttribL2i64vNV */); +} + +static PFNGLVERTEXATTRIBL2UI64NVPROC +epoxy_glVertexAttribL2ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62157 /* glVertexAttribL2ui64NV */); +} + +static PFNGLVERTEXATTRIBL2UI64VNVPROC +epoxy_glVertexAttribL2ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62180 /* glVertexAttribL2ui64vNV */); +} + +static PFNGLVERTEXATTRIBL3DPROC +epoxy_glVertexAttribL3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62204 /* "glVertexAttribL3d" */, + 62204 /* "glVertexAttribL3d" */, + 62222 /* "glVertexAttribL3dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62204 /* "glVertexAttribL3d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DEXTPROC +epoxy_glVertexAttribL3dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62222 /* "glVertexAttribL3dEXT" */, + 62204 /* "glVertexAttribL3d" */, + 62204 /* "glVertexAttribL3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62222 /* "glVertexAttribL3dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DVPROC +epoxy_glVertexAttribL3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62243 /* "glVertexAttribL3dv" */, + 62243 /* "glVertexAttribL3dv" */, + 62262 /* "glVertexAttribL3dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62243 /* "glVertexAttribL3dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DVEXTPROC +epoxy_glVertexAttribL3dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62262 /* "glVertexAttribL3dvEXT" */, + 62243 /* "glVertexAttribL3dv" */, + 62243 /* "glVertexAttribL3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62262 /* "glVertexAttribL3dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3I64NVPROC +epoxy_glVertexAttribL3i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62284 /* glVertexAttribL3i64NV */); +} + +static PFNGLVERTEXATTRIBL3I64VNVPROC +epoxy_glVertexAttribL3i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62306 /* glVertexAttribL3i64vNV */); +} + +static PFNGLVERTEXATTRIBL3UI64NVPROC +epoxy_glVertexAttribL3ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62329 /* glVertexAttribL3ui64NV */); +} + +static PFNGLVERTEXATTRIBL3UI64VNVPROC +epoxy_glVertexAttribL3ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62352 /* glVertexAttribL3ui64vNV */); +} + +static PFNGLVERTEXATTRIBL4DPROC +epoxy_glVertexAttribL4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62376 /* "glVertexAttribL4d" */, + 62376 /* "glVertexAttribL4d" */, + 62394 /* "glVertexAttribL4dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62376 /* "glVertexAttribL4d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DEXTPROC +epoxy_glVertexAttribL4dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62394 /* "glVertexAttribL4dEXT" */, + 62376 /* "glVertexAttribL4d" */, + 62376 /* "glVertexAttribL4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62394 /* "glVertexAttribL4dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DVPROC +epoxy_glVertexAttribL4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62415 /* "glVertexAttribL4dv" */, + 62415 /* "glVertexAttribL4dv" */, + 62434 /* "glVertexAttribL4dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62415 /* "glVertexAttribL4dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DVEXTPROC +epoxy_glVertexAttribL4dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62434 /* "glVertexAttribL4dvEXT" */, + 62415 /* "glVertexAttribL4dv" */, + 62415 /* "glVertexAttribL4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62434 /* "glVertexAttribL4dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4I64NVPROC +epoxy_glVertexAttribL4i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62456 /* glVertexAttribL4i64NV */); +} + +static PFNGLVERTEXATTRIBL4I64VNVPROC +epoxy_glVertexAttribL4i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62478 /* glVertexAttribL4i64vNV */); +} + +static PFNGLVERTEXATTRIBL4UI64NVPROC +epoxy_glVertexAttribL4ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62501 /* glVertexAttribL4ui64NV */); +} + +static PFNGLVERTEXATTRIBL4UI64VNVPROC +epoxy_glVertexAttribL4ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62524 /* glVertexAttribL4ui64vNV */); +} + +static PFNGLVERTEXATTRIBLFORMATPROC +epoxy_glVertexAttribLFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62548 /* "glVertexAttribLFormat" */, + 62548 /* "glVertexAttribLFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 62548 /* "glVertexAttribLFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBLFORMATNVPROC +epoxy_glVertexAttribLFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62570 /* glVertexAttribLFormatNV */); +} + +static PFNGLVERTEXATTRIBLPOINTERPROC +epoxy_glVertexAttribLPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62594 /* "glVertexAttribLPointer" */, + 62594 /* "glVertexAttribLPointer" */, + 62617 /* "glVertexAttribLPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62594 /* "glVertexAttribLPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBLPOINTEREXTPROC +epoxy_glVertexAttribLPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62617 /* "glVertexAttribLPointerEXT" */, + 62594 /* "glVertexAttribLPointer" */, + 62594 /* "glVertexAttribLPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 62617 /* "glVertexAttribLPointerEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP1UIPROC +epoxy_glVertexAttribP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62643 /* "glVertexAttribP1ui" */, + 62643 /* "glVertexAttribP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62643 /* "glVertexAttribP1ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP1UIVPROC +epoxy_glVertexAttribP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62662 /* "glVertexAttribP1uiv" */, + 62662 /* "glVertexAttribP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62662 /* "glVertexAttribP1uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP2UIPROC +epoxy_glVertexAttribP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62682 /* "glVertexAttribP2ui" */, + 62682 /* "glVertexAttribP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62682 /* "glVertexAttribP2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP2UIVPROC +epoxy_glVertexAttribP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62701 /* "glVertexAttribP2uiv" */, + 62701 /* "glVertexAttribP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62701 /* "glVertexAttribP2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP3UIPROC +epoxy_glVertexAttribP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62721 /* "glVertexAttribP3ui" */, + 62721 /* "glVertexAttribP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62721 /* "glVertexAttribP3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP3UIVPROC +epoxy_glVertexAttribP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62740 /* "glVertexAttribP3uiv" */, + 62740 /* "glVertexAttribP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62740 /* "glVertexAttribP3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP4UIPROC +epoxy_glVertexAttribP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62760 /* "glVertexAttribP4ui" */, + 62760 /* "glVertexAttribP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62760 /* "glVertexAttribP4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP4UIVPROC +epoxy_glVertexAttribP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62779 /* "glVertexAttribP4uiv" */, + 62779 /* "glVertexAttribP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62779 /* "glVertexAttribP4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPARAMETERIAMDPROC +epoxy_glVertexAttribParameteriAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_interleaved_elements, 62799 /* glVertexAttribParameteriAMD */); +} + +static PFNGLVERTEXATTRIBPOINTERPROC +epoxy_glVertexAttribPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62827 /* "glVertexAttribPointer" */, + 62827 /* "glVertexAttribPointer" */, + 62849 /* "glVertexAttribPointerARB" */, + 62849 /* "glVertexAttribPointerARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 62827 /* "glVertexAttribPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPOINTERARBPROC +epoxy_glVertexAttribPointerARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62849 /* "glVertexAttribPointerARB" */, + 62849 /* "glVertexAttribPointerARB" */, + 62827 /* "glVertexAttribPointer" */, + 62827 /* "glVertexAttribPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 62849 /* "glVertexAttribPointerARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPOINTERNVPROC +epoxy_glVertexAttribPointerNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62874 /* glVertexAttribPointerNV */); +} + +static PFNGLVERTEXATTRIBS1DVNVPROC +epoxy_glVertexAttribs1dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62898 /* glVertexAttribs1dvNV */); +} + +static PFNGLVERTEXATTRIBS1FVNVPROC +epoxy_glVertexAttribs1fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62919 /* glVertexAttribs1fvNV */); +} + +static PFNGLVERTEXATTRIBS1HVNVPROC +epoxy_glVertexAttribs1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 62940 /* glVertexAttribs1hvNV */); +} + +static PFNGLVERTEXATTRIBS1SVNVPROC +epoxy_glVertexAttribs1svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62961 /* glVertexAttribs1svNV */); +} + +static PFNGLVERTEXATTRIBS2DVNVPROC +epoxy_glVertexAttribs2dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62982 /* glVertexAttribs2dvNV */); +} + +static PFNGLVERTEXATTRIBS2FVNVPROC +epoxy_glVertexAttribs2fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63003 /* glVertexAttribs2fvNV */); +} + +static PFNGLVERTEXATTRIBS2HVNVPROC +epoxy_glVertexAttribs2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63024 /* glVertexAttribs2hvNV */); +} + +static PFNGLVERTEXATTRIBS2SVNVPROC +epoxy_glVertexAttribs2svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63045 /* glVertexAttribs2svNV */); +} + +static PFNGLVERTEXATTRIBS3DVNVPROC +epoxy_glVertexAttribs3dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63066 /* glVertexAttribs3dvNV */); +} + +static PFNGLVERTEXATTRIBS3FVNVPROC +epoxy_glVertexAttribs3fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63087 /* glVertexAttribs3fvNV */); +} + +static PFNGLVERTEXATTRIBS3HVNVPROC +epoxy_glVertexAttribs3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63108 /* glVertexAttribs3hvNV */); +} + +static PFNGLVERTEXATTRIBS3SVNVPROC +epoxy_glVertexAttribs3svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63129 /* glVertexAttribs3svNV */); +} + +static PFNGLVERTEXATTRIBS4DVNVPROC +epoxy_glVertexAttribs4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63150 /* glVertexAttribs4dvNV */); +} + +static PFNGLVERTEXATTRIBS4FVNVPROC +epoxy_glVertexAttribs4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63171 /* glVertexAttribs4fvNV */); +} + +static PFNGLVERTEXATTRIBS4HVNVPROC +epoxy_glVertexAttribs4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63192 /* glVertexAttribs4hvNV */); +} + +static PFNGLVERTEXATTRIBS4SVNVPROC +epoxy_glVertexAttribs4svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63213 /* glVertexAttribs4svNV */); +} + +static PFNGLVERTEXATTRIBS4UBVNVPROC +epoxy_glVertexAttribs4ubvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63234 /* glVertexAttribs4ubvNV */); +} + +static PFNGLVERTEXBINDINGDIVISORPROC +epoxy_glVertexBindingDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63256 /* "glVertexBindingDivisor" */, + 63256 /* "glVertexBindingDivisor" */, + 63256 /* "glVertexBindingDivisor" */, + }; + return gl_provider_resolver(entrypoint_strings + 63256 /* "glVertexBindingDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXBLENDARBPROC +epoxy_glVertexBlendARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 63279 /* glVertexBlendARB */); +} + +static PFNGLVERTEXBLENDENVFATIPROC +epoxy_glVertexBlendEnvfATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63296 /* glVertexBlendEnvfATI */); +} + +static PFNGLVERTEXBLENDENVIATIPROC +epoxy_glVertexBlendEnviATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63317 /* glVertexBlendEnviATI */); +} + +static PFNGLVERTEXFORMATNVPROC +epoxy_glVertexFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 63338 /* glVertexFormatNV */); +} + +static PFNGLVERTEXP2UIPROC +epoxy_glVertexP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63355 /* "glVertexP2ui" */, + 63355 /* "glVertexP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63355 /* "glVertexP2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP2UIVPROC +epoxy_glVertexP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63368 /* "glVertexP2uiv" */, + 63368 /* "glVertexP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63368 /* "glVertexP2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXP3UIPROC +epoxy_glVertexP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63382 /* "glVertexP3ui" */, + 63382 /* "glVertexP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63382 /* "glVertexP3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP3UIVPROC +epoxy_glVertexP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63395 /* "glVertexP3uiv" */, + 63395 /* "glVertexP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63395 /* "glVertexP3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXP4UIPROC +epoxy_glVertexP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63409 /* "glVertexP4ui" */, + 63409 /* "glVertexP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63409 /* "glVertexP4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP4UIVPROC +epoxy_glVertexP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63422 /* "glVertexP4uiv" */, + 63422 /* "glVertexP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63422 /* "glVertexP4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXPOINTERPROC +epoxy_glVertexPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63436 /* "glVertexPointer" */, + 63436 /* "glVertexPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 63436 /* "glVertexPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXPOINTEREXTPROC +epoxy_glVertexPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 63452 /* glVertexPointerEXT */); +} + +static PFNGLVERTEXPOINTERLISTIBMPROC +epoxy_glVertexPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 63471 /* glVertexPointerListIBM */); +} + +static PFNGLVERTEXPOINTERVINTELPROC +epoxy_glVertexPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 63494 /* glVertexPointervINTEL */); +} + +static PFNGLVERTEXSTREAM1DATIPROC +epoxy_glVertexStream1dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63516 /* glVertexStream1dATI */); +} + +static PFNGLVERTEXSTREAM1DVATIPROC +epoxy_glVertexStream1dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63536 /* glVertexStream1dvATI */); +} + +static PFNGLVERTEXSTREAM1FATIPROC +epoxy_glVertexStream1fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63557 /* glVertexStream1fATI */); +} + +static PFNGLVERTEXSTREAM1FVATIPROC +epoxy_glVertexStream1fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63577 /* glVertexStream1fvATI */); +} + +static PFNGLVERTEXSTREAM1IATIPROC +epoxy_glVertexStream1iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63598 /* glVertexStream1iATI */); +} + +static PFNGLVERTEXSTREAM1IVATIPROC +epoxy_glVertexStream1ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63618 /* glVertexStream1ivATI */); +} + +static PFNGLVERTEXSTREAM1SATIPROC +epoxy_glVertexStream1sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63639 /* glVertexStream1sATI */); +} + +static PFNGLVERTEXSTREAM1SVATIPROC +epoxy_glVertexStream1svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63659 /* glVertexStream1svATI */); +} + +static PFNGLVERTEXSTREAM2DATIPROC +epoxy_glVertexStream2dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63680 /* glVertexStream2dATI */); +} + +static PFNGLVERTEXSTREAM2DVATIPROC +epoxy_glVertexStream2dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63700 /* glVertexStream2dvATI */); +} + +static PFNGLVERTEXSTREAM2FATIPROC +epoxy_glVertexStream2fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63721 /* glVertexStream2fATI */); +} + +static PFNGLVERTEXSTREAM2FVATIPROC +epoxy_glVertexStream2fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63741 /* glVertexStream2fvATI */); +} + +static PFNGLVERTEXSTREAM2IATIPROC +epoxy_glVertexStream2iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63762 /* glVertexStream2iATI */); +} + +static PFNGLVERTEXSTREAM2IVATIPROC +epoxy_glVertexStream2ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63782 /* glVertexStream2ivATI */); +} + +static PFNGLVERTEXSTREAM2SATIPROC +epoxy_glVertexStream2sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63803 /* glVertexStream2sATI */); +} + +static PFNGLVERTEXSTREAM2SVATIPROC +epoxy_glVertexStream2svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63823 /* glVertexStream2svATI */); +} + +static PFNGLVERTEXSTREAM3DATIPROC +epoxy_glVertexStream3dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63844 /* glVertexStream3dATI */); +} + +static PFNGLVERTEXSTREAM3DVATIPROC +epoxy_glVertexStream3dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63864 /* glVertexStream3dvATI */); +} + +static PFNGLVERTEXSTREAM3FATIPROC +epoxy_glVertexStream3fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63885 /* glVertexStream3fATI */); +} + +static PFNGLVERTEXSTREAM3FVATIPROC +epoxy_glVertexStream3fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63905 /* glVertexStream3fvATI */); +} + +static PFNGLVERTEXSTREAM3IATIPROC +epoxy_glVertexStream3iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63926 /* glVertexStream3iATI */); +} + +static PFNGLVERTEXSTREAM3IVATIPROC +epoxy_glVertexStream3ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63946 /* glVertexStream3ivATI */); +} + +static PFNGLVERTEXSTREAM3SATIPROC +epoxy_glVertexStream3sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63967 /* glVertexStream3sATI */); +} + +static PFNGLVERTEXSTREAM3SVATIPROC +epoxy_glVertexStream3svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63987 /* glVertexStream3svATI */); +} + +static PFNGLVERTEXSTREAM4DATIPROC +epoxy_glVertexStream4dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64008 /* glVertexStream4dATI */); +} + +static PFNGLVERTEXSTREAM4DVATIPROC +epoxy_glVertexStream4dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64028 /* glVertexStream4dvATI */); +} + +static PFNGLVERTEXSTREAM4FATIPROC +epoxy_glVertexStream4fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64049 /* glVertexStream4fATI */); +} + +static PFNGLVERTEXSTREAM4FVATIPROC +epoxy_glVertexStream4fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64069 /* glVertexStream4fvATI */); +} + +static PFNGLVERTEXSTREAM4IATIPROC +epoxy_glVertexStream4iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64090 /* glVertexStream4iATI */); +} + +static PFNGLVERTEXSTREAM4IVATIPROC +epoxy_glVertexStream4ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64110 /* glVertexStream4ivATI */); +} + +static PFNGLVERTEXSTREAM4SATIPROC +epoxy_glVertexStream4sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64131 /* glVertexStream4sATI */); +} + +static PFNGLVERTEXSTREAM4SVATIPROC +epoxy_glVertexStream4svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64151 /* glVertexStream4svATI */); +} + +static PFNGLVERTEXWEIGHTPOINTEREXTPROC +epoxy_glVertexWeightPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64172 /* glVertexWeightPointerEXT */); +} + +static PFNGLVERTEXWEIGHTFEXTPROC +epoxy_glVertexWeightfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64197 /* glVertexWeightfEXT */); +} + +static PFNGLVERTEXWEIGHTFVEXTPROC +epoxy_glVertexWeightfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64216 /* glVertexWeightfvEXT */); +} + +static PFNGLVERTEXWEIGHTHNVPROC +epoxy_glVertexWeighthNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 64236 /* glVertexWeighthNV */); +} + +static PFNGLVERTEXWEIGHTHVNVPROC +epoxy_glVertexWeighthvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 64254 /* glVertexWeighthvNV */); +} + +static PFNGLVIDEOCAPTURENVPROC +epoxy_glVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64273 /* glVideoCaptureNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC +epoxy_glVideoCaptureStreamParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64290 /* glVideoCaptureStreamParameterdvNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC +epoxy_glVideoCaptureStreamParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64324 /* glVideoCaptureStreamParameterfvNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC +epoxy_glVideoCaptureStreamParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64358 /* glVideoCaptureStreamParameterivNV */); +} + +static PFNGLVIEWPORTPROC +epoxy_glViewport_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64392 /* "glViewport" */, + 64392 /* "glViewport" */, + 64392 /* "glViewport" */, + }; + return gl_provider_resolver(entrypoint_strings + 64392 /* "glViewport" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTARRAYVPROC +epoxy_glViewportArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64403 /* "glViewportArrayv" */, + 64403 /* "glViewportArrayv" */, + 64420 /* "glViewportArrayvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64403 /* "glViewportArrayv" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTARRAYVNVPROC +epoxy_glViewportArrayvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64420 /* "glViewportArrayvNV" */, + 64403 /* "glViewportArrayv" */, + 64403 /* "glViewportArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 64420 /* "glViewportArrayvNV" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFPROC +epoxy_glViewportIndexedf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64439 /* "glViewportIndexedf" */, + 64439 /* "glViewportIndexedf" */, + 64458 /* "glViewportIndexedfNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64439 /* "glViewportIndexedf" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFNVPROC +epoxy_glViewportIndexedfNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64458 /* "glViewportIndexedfNV" */, + 64439 /* "glViewportIndexedf" */, + 64439 /* "glViewportIndexedf" */, + }; + return gl_provider_resolver(entrypoint_strings + 64458 /* "glViewportIndexedfNV" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFVPROC +epoxy_glViewportIndexedfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64479 /* "glViewportIndexedfv" */, + 64479 /* "glViewportIndexedfv" */, + 64499 /* "glViewportIndexedfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64479 /* "glViewportIndexedfv" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFVNVPROC +epoxy_glViewportIndexedfvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64499 /* "glViewportIndexedfvNV" */, + 64479 /* "glViewportIndexedfv" */, + 64479 /* "glViewportIndexedfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 64499 /* "glViewportIndexedfvNV" */, + providers, entrypoints); +} + +static PFNGLWAITSYNCPROC +epoxy_glWaitSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64532 /* "glWaitSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 64521 /* "glWaitSync" */, + providers, entrypoints); +} + +static PFNGLWAITSYNCAPPLEPROC +epoxy_glWaitSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64532 /* "glWaitSyncAPPLE" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 64532 /* "glWaitSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLWEIGHTPATHSNVPROC +epoxy_glWeightPathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 64548 /* glWeightPathsNV */); +} + +static PFNGLWEIGHTPOINTERARBPROC +epoxy_glWeightPointerARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64564 /* glWeightPointerARB */); +} + +static PFNGLWEIGHTPOINTEROESPROC +epoxy_glWeightPointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 64583 /* glWeightPointerOES */); +} + +static PFNGLWEIGHTBVARBPROC +epoxy_glWeightbvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64602 /* glWeightbvARB */); +} + +static PFNGLWEIGHTDVARBPROC +epoxy_glWeightdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64616 /* glWeightdvARB */); +} + +static PFNGLWEIGHTFVARBPROC +epoxy_glWeightfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64630 /* glWeightfvARB */); +} + +static PFNGLWEIGHTIVARBPROC +epoxy_glWeightivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64644 /* glWeightivARB */); +} + +static PFNGLWEIGHTSVARBPROC +epoxy_glWeightsvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64658 /* glWeightsvARB */); +} + +static PFNGLWEIGHTUBVARBPROC +epoxy_glWeightubvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64672 /* glWeightubvARB */); +} + +static PFNGLWEIGHTUIVARBPROC +epoxy_glWeightuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64687 /* glWeightuivARB */); +} + +static PFNGLWEIGHTUSVARBPROC +epoxy_glWeightusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64702 /* glWeightusvARB */); +} + +static PFNGLWINDOWPOS2DPROC +epoxy_glWindowPos2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64717 /* "glWindowPos2d" */, + 64731 /* "glWindowPos2dARB" */, + 64748 /* "glWindowPos2dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64717 /* "glWindowPos2d" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DARBPROC +epoxy_glWindowPos2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64731 /* "glWindowPos2dARB" */, + 64717 /* "glWindowPos2d" */, + 64748 /* "glWindowPos2dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64731 /* "glWindowPos2dARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DMESAPROC +epoxy_glWindowPos2dMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64748 /* "glWindowPos2dMESA" */, + 64717 /* "glWindowPos2d" */, + 64731 /* "glWindowPos2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64748 /* "glWindowPos2dMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVPROC +epoxy_glWindowPos2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64766 /* "glWindowPos2dv" */, + 64781 /* "glWindowPos2dvARB" */, + 64799 /* "glWindowPos2dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64766 /* "glWindowPos2dv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVARBPROC +epoxy_glWindowPos2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64781 /* "glWindowPos2dvARB" */, + 64766 /* "glWindowPos2dv" */, + 64799 /* "glWindowPos2dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64781 /* "glWindowPos2dvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVMESAPROC +epoxy_glWindowPos2dvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64799 /* "glWindowPos2dvMESA" */, + 64766 /* "glWindowPos2dv" */, + 64781 /* "glWindowPos2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64799 /* "glWindowPos2dvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FPROC +epoxy_glWindowPos2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64818 /* "glWindowPos2f" */, + 64832 /* "glWindowPos2fARB" */, + 64849 /* "glWindowPos2fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64818 /* "glWindowPos2f" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FARBPROC +epoxy_glWindowPos2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64832 /* "glWindowPos2fARB" */, + 64818 /* "glWindowPos2f" */, + 64849 /* "glWindowPos2fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64832 /* "glWindowPos2fARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FMESAPROC +epoxy_glWindowPos2fMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64849 /* "glWindowPos2fMESA" */, + 64818 /* "glWindowPos2f" */, + 64832 /* "glWindowPos2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64849 /* "glWindowPos2fMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVPROC +epoxy_glWindowPos2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64867 /* "glWindowPos2fv" */, + 64882 /* "glWindowPos2fvARB" */, + 64900 /* "glWindowPos2fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64867 /* "glWindowPos2fv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVARBPROC +epoxy_glWindowPos2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64882 /* "glWindowPos2fvARB" */, + 64867 /* "glWindowPos2fv" */, + 64900 /* "glWindowPos2fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64882 /* "glWindowPos2fvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVMESAPROC +epoxy_glWindowPos2fvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64900 /* "glWindowPos2fvMESA" */, + 64867 /* "glWindowPos2fv" */, + 64882 /* "glWindowPos2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64900 /* "glWindowPos2fvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IPROC +epoxy_glWindowPos2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64919 /* "glWindowPos2i" */, + 64933 /* "glWindowPos2iARB" */, + 64950 /* "glWindowPos2iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64919 /* "glWindowPos2i" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IARBPROC +epoxy_glWindowPos2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64933 /* "glWindowPos2iARB" */, + 64919 /* "glWindowPos2i" */, + 64950 /* "glWindowPos2iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64933 /* "glWindowPos2iARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IMESAPROC +epoxy_glWindowPos2iMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64950 /* "glWindowPos2iMESA" */, + 64919 /* "glWindowPos2i" */, + 64933 /* "glWindowPos2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64950 /* "glWindowPos2iMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVPROC +epoxy_glWindowPos2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64968 /* "glWindowPos2iv" */, + 64983 /* "glWindowPos2ivARB" */, + 65001 /* "glWindowPos2ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64968 /* "glWindowPos2iv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVARBPROC +epoxy_glWindowPos2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64983 /* "glWindowPos2ivARB" */, + 64968 /* "glWindowPos2iv" */, + 65001 /* "glWindowPos2ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64983 /* "glWindowPos2ivARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVMESAPROC +epoxy_glWindowPos2ivMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65001 /* "glWindowPos2ivMESA" */, + 64968 /* "glWindowPos2iv" */, + 64983 /* "glWindowPos2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65001 /* "glWindowPos2ivMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SPROC +epoxy_glWindowPos2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65020 /* "glWindowPos2s" */, + 65034 /* "glWindowPos2sARB" */, + 65051 /* "glWindowPos2sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65020 /* "glWindowPos2s" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SARBPROC +epoxy_glWindowPos2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65034 /* "glWindowPos2sARB" */, + 65020 /* "glWindowPos2s" */, + 65051 /* "glWindowPos2sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65034 /* "glWindowPos2sARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SMESAPROC +epoxy_glWindowPos2sMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65051 /* "glWindowPos2sMESA" */, + 65020 /* "glWindowPos2s" */, + 65034 /* "glWindowPos2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65051 /* "glWindowPos2sMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVPROC +epoxy_glWindowPos2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65069 /* "glWindowPos2sv" */, + 65084 /* "glWindowPos2svARB" */, + 65102 /* "glWindowPos2svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65069 /* "glWindowPos2sv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVARBPROC +epoxy_glWindowPos2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65084 /* "glWindowPos2svARB" */, + 65069 /* "glWindowPos2sv" */, + 65102 /* "glWindowPos2svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65084 /* "glWindowPos2svARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVMESAPROC +epoxy_glWindowPos2svMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65102 /* "glWindowPos2svMESA" */, + 65069 /* "glWindowPos2sv" */, + 65084 /* "glWindowPos2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65102 /* "glWindowPos2svMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DPROC +epoxy_glWindowPos3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65121 /* "glWindowPos3d" */, + 65135 /* "glWindowPos3dARB" */, + 65152 /* "glWindowPos3dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65121 /* "glWindowPos3d" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DARBPROC +epoxy_glWindowPos3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65135 /* "glWindowPos3dARB" */, + 65121 /* "glWindowPos3d" */, + 65152 /* "glWindowPos3dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65135 /* "glWindowPos3dARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DMESAPROC +epoxy_glWindowPos3dMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65152 /* "glWindowPos3dMESA" */, + 65121 /* "glWindowPos3d" */, + 65135 /* "glWindowPos3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65152 /* "glWindowPos3dMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVPROC +epoxy_glWindowPos3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65170 /* "glWindowPos3dv" */, + 65185 /* "glWindowPos3dvARB" */, + 65203 /* "glWindowPos3dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65170 /* "glWindowPos3dv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVARBPROC +epoxy_glWindowPos3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65185 /* "glWindowPos3dvARB" */, + 65170 /* "glWindowPos3dv" */, + 65203 /* "glWindowPos3dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65185 /* "glWindowPos3dvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVMESAPROC +epoxy_glWindowPos3dvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65203 /* "glWindowPos3dvMESA" */, + 65170 /* "glWindowPos3dv" */, + 65185 /* "glWindowPos3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65203 /* "glWindowPos3dvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FPROC +epoxy_glWindowPos3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65222 /* "glWindowPos3f" */, + 65236 /* "glWindowPos3fARB" */, + 65253 /* "glWindowPos3fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65222 /* "glWindowPos3f" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FARBPROC +epoxy_glWindowPos3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65236 /* "glWindowPos3fARB" */, + 65222 /* "glWindowPos3f" */, + 65253 /* "glWindowPos3fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65236 /* "glWindowPos3fARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FMESAPROC +epoxy_glWindowPos3fMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65253 /* "glWindowPos3fMESA" */, + 65222 /* "glWindowPos3f" */, + 65236 /* "glWindowPos3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65253 /* "glWindowPos3fMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVPROC +epoxy_glWindowPos3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65271 /* "glWindowPos3fv" */, + 65286 /* "glWindowPos3fvARB" */, + 65304 /* "glWindowPos3fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65271 /* "glWindowPos3fv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVARBPROC +epoxy_glWindowPos3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65286 /* "glWindowPos3fvARB" */, + 65271 /* "glWindowPos3fv" */, + 65304 /* "glWindowPos3fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65286 /* "glWindowPos3fvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVMESAPROC +epoxy_glWindowPos3fvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65304 /* "glWindowPos3fvMESA" */, + 65271 /* "glWindowPos3fv" */, + 65286 /* "glWindowPos3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65304 /* "glWindowPos3fvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IPROC +epoxy_glWindowPos3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65323 /* "glWindowPos3i" */, + 65337 /* "glWindowPos3iARB" */, + 65354 /* "glWindowPos3iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65323 /* "glWindowPos3i" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IARBPROC +epoxy_glWindowPos3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65337 /* "glWindowPos3iARB" */, + 65323 /* "glWindowPos3i" */, + 65354 /* "glWindowPos3iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65337 /* "glWindowPos3iARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IMESAPROC +epoxy_glWindowPos3iMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65354 /* "glWindowPos3iMESA" */, + 65323 /* "glWindowPos3i" */, + 65337 /* "glWindowPos3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65354 /* "glWindowPos3iMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVPROC +epoxy_glWindowPos3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65372 /* "glWindowPos3iv" */, + 65387 /* "glWindowPos3ivARB" */, + 65405 /* "glWindowPos3ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65372 /* "glWindowPos3iv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVARBPROC +epoxy_glWindowPos3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65387 /* "glWindowPos3ivARB" */, + 65372 /* "glWindowPos3iv" */, + 65405 /* "glWindowPos3ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65387 /* "glWindowPos3ivARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVMESAPROC +epoxy_glWindowPos3ivMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65405 /* "glWindowPos3ivMESA" */, + 65372 /* "glWindowPos3iv" */, + 65387 /* "glWindowPos3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65405 /* "glWindowPos3ivMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SPROC +epoxy_glWindowPos3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65424 /* "glWindowPos3s" */, + 65438 /* "glWindowPos3sARB" */, + 65455 /* "glWindowPos3sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65424 /* "glWindowPos3s" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SARBPROC +epoxy_glWindowPos3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65438 /* "glWindowPos3sARB" */, + 65424 /* "glWindowPos3s" */, + 65455 /* "glWindowPos3sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65438 /* "glWindowPos3sARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SMESAPROC +epoxy_glWindowPos3sMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65455 /* "glWindowPos3sMESA" */, + 65424 /* "glWindowPos3s" */, + 65438 /* "glWindowPos3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65455 /* "glWindowPos3sMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVPROC +epoxy_glWindowPos3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65473 /* "glWindowPos3sv" */, + 65488 /* "glWindowPos3svARB" */, + 65506 /* "glWindowPos3svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65473 /* "glWindowPos3sv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVARBPROC +epoxy_glWindowPos3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65488 /* "glWindowPos3svARB" */, + 65473 /* "glWindowPos3sv" */, + 65506 /* "glWindowPos3svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65488 /* "glWindowPos3svARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVMESAPROC +epoxy_glWindowPos3svMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65506 /* "glWindowPos3svMESA" */, + 65473 /* "glWindowPos3sv" */, + 65488 /* "glWindowPos3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65506 /* "glWindowPos3svMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS4DMESAPROC +epoxy_glWindowPos4dMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65525 /* glWindowPos4dMESA */); +} + +static PFNGLWINDOWPOS4DVMESAPROC +epoxy_glWindowPos4dvMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65543 /* glWindowPos4dvMESA */); +} + +static PFNGLWINDOWPOS4FMESAPROC +epoxy_glWindowPos4fMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65562 /* glWindowPos4fMESA */); +} + +static PFNGLWINDOWPOS4FVMESAPROC +epoxy_glWindowPos4fvMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65580 /* glWindowPos4fvMESA */); +} + +static PFNGLWINDOWPOS4IMESAPROC +epoxy_glWindowPos4iMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65599 /* glWindowPos4iMESA */); +} + +static PFNGLWINDOWPOS4IVMESAPROC +epoxy_glWindowPos4ivMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65617 /* glWindowPos4ivMESA */); +} + +static PFNGLWINDOWPOS4SMESAPROC +epoxy_glWindowPos4sMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65636 /* glWindowPos4sMESA */); +} + +static PFNGLWINDOWPOS4SVMESAPROC +epoxy_glWindowPos4svMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65654 /* glWindowPos4svMESA */); +} + +static PFNGLWRITEMASKEXTPROC +epoxy_glWriteMaskEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 65673 /* glWriteMaskEXT */); +} + +GEN_THUNKS(glAccum, (GLenum op, GLfloat value), (op, value)) +GEN_THUNKS(glAccumxOES, (GLenum op, GLfixed value), (op, value)) +GEN_THUNKS(glActiveProgramEXT, (GLuint program), (program)) +GEN_THUNKS(glActiveShaderProgram, (GLuint pipeline, GLuint program), (pipeline, program)) +GEN_THUNKS(glActiveShaderProgramEXT, (GLuint pipeline, GLuint program), (pipeline, program)) +GEN_THUNKS(glActiveStencilFaceEXT, (GLenum face), (face)) +GEN_THUNKS(glActiveTexture, (GLenum texture), (texture)) +GEN_THUNKS(glActiveTextureARB, (GLenum texture), (texture)) +GEN_THUNKS(glActiveVaryingNV, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glAlphaFragmentOp1ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod)) +GEN_THUNKS(glAlphaFragmentOp2ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) +GEN_THUNKS(glAlphaFragmentOp3ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) +GEN_THUNKS(glAlphaFunc, (GLenum func, GLfloat ref), (func, ref)) +GEN_THUNKS(glAlphaFuncQCOM, (GLenum func, GLclampf ref), (func, ref)) +GEN_THUNKS(glAlphaFuncx, (GLenum func, GLfixed ref), (func, ref)) +GEN_THUNKS(glAlphaFuncxOES, (GLenum func, GLfixed ref), (func, ref)) +GEN_THUNKS(glApplyFramebufferAttachmentCMAAINTEL, (void), ()) +GEN_THUNKS(glApplyTextureEXT, (GLenum mode), (mode)) +GEN_THUNKS_RET(GLboolean, glAreProgramsResidentNV, (GLsizei n, const GLuint * programs, GLboolean * residences), (n, programs, residences)) +GEN_THUNKS_RET(GLboolean, glAreTexturesResident, (GLsizei n, const GLuint * textures, GLboolean * residences), (n, textures, residences)) +GEN_THUNKS_RET(GLboolean, glAreTexturesResidentEXT, (GLsizei n, const GLuint * textures, GLboolean * residences), (n, textures, residences)) +GEN_THUNKS(glArrayElement, (GLint i), (i)) +GEN_THUNKS(glArrayElementEXT, (GLint i), (i)) +GEN_THUNKS(glArrayObjectATI, (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset), (array, size, type, stride, buffer, offset)) +GEN_THUNKS(glAsyncMarkerSGIX, (GLuint marker), (marker)) +GEN_THUNKS(glAttachObjectARB, (GLhandleARB containerObj, GLhandleARB obj), ((uintptr_t)containerObj, (uintptr_t)obj)) +GEN_THUNKS(glAttachShader, (GLuint program, GLuint shader), (program, shader)) +GEN_THUNKS(glBegin_unwrapped, (GLenum mode), (mode)) +GEN_THUNKS(glBeginConditionalRender, (GLuint id, GLenum mode), (id, mode)) +GEN_THUNKS(glBeginConditionalRenderNV, (GLuint id, GLenum mode), (id, mode)) +GEN_THUNKS(glBeginConditionalRenderNVX, (GLuint id), (id)) +GEN_THUNKS(glBeginFragmentShaderATI, (void), ()) +GEN_THUNKS(glBeginOcclusionQueryNV, (GLuint id), (id)) +GEN_THUNKS(glBeginPerfMonitorAMD, (GLuint monitor), (monitor)) +GEN_THUNKS(glBeginPerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glBeginQuery, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryARB, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryEXT, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryIndexed, (GLenum target, GLuint index, GLuint id), (target, index, id)) +GEN_THUNKS(glBeginTransformFeedback, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginTransformFeedbackEXT, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginTransformFeedbackNV, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginVertexShaderEXT, (void), ()) +GEN_THUNKS(glBeginVideoCaptureNV, (GLuint video_capture_slot), (video_capture_slot)) +GEN_THUNKS(glBindAttribLocation, (GLuint program, GLuint index, const GLchar * name), (program, index, name)) +GEN_THUNKS(glBindAttribLocationARB, (GLhandleARB programObj, GLuint index, const GLcharARB * name), ((uintptr_t)programObj, index, name)) +GEN_THUNKS(glBindBuffer, (GLenum target, GLuint buffer), (target, buffer)) +GEN_THUNKS(glBindBufferARB, (GLenum target, GLuint buffer), (target, buffer)) +GEN_THUNKS(glBindBufferBase, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferBaseEXT, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferBaseNV, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferOffsetEXT, (GLenum target, GLuint index, GLuint buffer, GLintptr offset), (target, index, buffer, offset)) +GEN_THUNKS(glBindBufferOffsetNV, (GLenum target, GLuint index, GLuint buffer, GLintptr offset), (target, index, buffer, offset)) +GEN_THUNKS(glBindBufferRange, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBufferRangeEXT, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBufferRangeNV, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBuffersBase, (GLenum target, GLuint first, GLsizei count, const GLuint * buffers), (target, first, count, buffers)) +GEN_THUNKS(glBindBuffersRange, (GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes), (target, first, count, buffers, offsets, sizes)) +GEN_THUNKS(glBindFragDataLocation, (GLuint program, GLuint color, const GLchar * name), (program, color, name)) +GEN_THUNKS(glBindFragDataLocationEXT, (GLuint program, GLuint color, const GLchar * name), (program, color, name)) +GEN_THUNKS(glBindFragDataLocationIndexed, (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name), (program, colorNumber, index, name)) +GEN_THUNKS(glBindFragDataLocationIndexedEXT, (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name), (program, colorNumber, index, name)) +GEN_THUNKS(glBindFragmentShaderATI, (GLuint id), (id)) +GEN_THUNKS(glBindFramebuffer, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindFramebufferEXT, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindFramebufferOES, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindImageTexture, (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), (unit, texture, level, layered, layer, access, format)) +GEN_THUNKS(glBindImageTextureEXT, (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format), (index, texture, level, layered, layer, access, format)) +GEN_THUNKS(glBindImageTextures, (GLuint first, GLsizei count, const GLuint * textures), (first, count, textures)) +GEN_THUNKS_RET(GLuint, glBindLightParameterEXT, (GLenum light, GLenum value), (light, value)) +GEN_THUNKS_RET(GLuint, glBindMaterialParameterEXT, (GLenum face, GLenum value), (face, value)) +GEN_THUNKS(glBindMultiTextureEXT, (GLenum texunit, GLenum target, GLuint texture), (texunit, target, texture)) +GEN_THUNKS_RET(GLuint, glBindParameterEXT, (GLenum value), (value)) +GEN_THUNKS(glBindProgramARB, (GLenum target, GLuint program), (target, program)) +GEN_THUNKS(glBindProgramNV, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glBindProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glBindRenderbuffer, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindRenderbufferEXT, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindRenderbufferOES, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindSampler, (GLuint unit, GLuint sampler), (unit, sampler)) +GEN_THUNKS(glBindSamplers, (GLuint first, GLsizei count, const GLuint * samplers), (first, count, samplers)) +GEN_THUNKS_RET(GLuint, glBindTexGenParameterEXT, (GLenum unit, GLenum coord, GLenum value), (unit, coord, value)) +GEN_THUNKS(glBindTexture, (GLenum target, GLuint texture), (target, texture)) +GEN_THUNKS(glBindTextureEXT, (GLenum target, GLuint texture), (target, texture)) +GEN_THUNKS(glBindTextureUnit, (GLuint unit, GLuint texture), (unit, texture)) +GEN_THUNKS_RET(GLuint, glBindTextureUnitParameterEXT, (GLenum unit, GLenum value), (unit, value)) +GEN_THUNKS(glBindTextures, (GLuint first, GLsizei count, const GLuint * textures), (first, count, textures)) +GEN_THUNKS(glBindTransformFeedback, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindTransformFeedbackNV, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindVertexArray, (GLuint array), (array)) +GEN_THUNKS(glBindVertexArrayAPPLE, (GLuint array), (array)) +GEN_THUNKS(glBindVertexArrayOES, (GLuint array), (array)) +GEN_THUNKS(glBindVertexBuffer, (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (bindingindex, buffer, offset, stride)) +GEN_THUNKS(glBindVertexBuffers, (GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides), (first, count, buffers, offsets, strides)) +GEN_THUNKS(glBindVertexShaderEXT, (GLuint id), (id)) +GEN_THUNKS(glBindVideoCaptureStreamBufferNV, (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset), (video_capture_slot, stream, frame_region, offset)) +GEN_THUNKS(glBindVideoCaptureStreamTextureNV, (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture), (video_capture_slot, stream, frame_region, target, texture)) +GEN_THUNKS(glBinormal3bEXT, (GLbyte bx, GLbyte by, GLbyte bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glBinormal3dEXT, (GLdouble bx, GLdouble by, GLdouble bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glBinormal3fEXT, (GLfloat bx, GLfloat by, GLfloat bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glBinormal3iEXT, (GLint bx, GLint by, GLint bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glBinormal3sEXT, (GLshort bx, GLshort by, GLshort bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glBinormalPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glBitmap, (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap), (width, height, xorig, yorig, xmove, ymove, bitmap)) +GEN_THUNKS(glBitmapxOES, (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap), (width, height, xorig, yorig, xmove, ymove, bitmap)) +GEN_THUNKS(glBlendBarrier, (void), ()) +GEN_THUNKS(glBlendBarrierKHR, (void), ()) +GEN_THUNKS(glBlendBarrierNV, (void), ()) +GEN_THUNKS(glBlendColor, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendColorEXT, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendColorxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendEquation, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationEXT, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationIndexedAMD, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationOES, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationSeparate, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateEXT, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateIndexedAMD, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateOES, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparatei, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiARB, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiEXT, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiOES, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationi, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiARB, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiEXT, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiOES, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendFunc, (GLenum sfactor, GLenum dfactor), (sfactor, dfactor)) +GEN_THUNKS(glBlendFuncIndexedAMD, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFuncSeparate, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateEXT, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateINGR, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateIndexedAMD, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateOES, (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparatei, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiARB, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiEXT, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiOES, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFunci, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciARB, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciEXT, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciOES, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendParameteriNV, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glBlitFramebuffer, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferANGLE, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferNV, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitNamedFramebuffer, (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBufferAddressRangeNV, (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length), (pname, index, address, length)) +GEN_THUNKS(glBufferData, (GLenum target, GLsizeiptr size, const void * data, GLenum usage), (target, size, data, usage)) +GEN_THUNKS(glBufferDataARB, (GLenum target, GLsizeiptrARB size, const void * data, GLenum usage), (target, size, data, usage)) +GEN_THUNKS(glBufferPageCommitmentARB, (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit), (target, offset, size, commit)) +GEN_THUNKS(glBufferParameteriAPPLE, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glBufferStorage, (GLenum target, GLsizeiptr size, const void * data, GLbitfield flags), (target, size, data, flags)) +GEN_THUNKS(glBufferStorageEXT, (GLenum target, GLsizeiptr size, const void * data, GLbitfield flags), (target, size, data, flags)) +GEN_THUNKS(glBufferSubData, (GLenum target, GLintptr offset, GLsizeiptr size, const void * data), (target, offset, size, data)) +GEN_THUNKS(glBufferSubDataARB, (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data), (target, offset, size, data)) +GEN_THUNKS(glCallCommandListNV, (GLuint list), (list)) +GEN_THUNKS(glCallList, (GLuint list), (list)) +GEN_THUNKS(glCallLists, (GLsizei n, GLenum type, const void * lists), (n, type, lists)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatus, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatusEXT, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatusOES, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckNamedFramebufferStatus, (GLuint framebuffer, GLenum target), (framebuffer, target)) +GEN_THUNKS_RET(GLenum, glCheckNamedFramebufferStatusEXT, (GLuint framebuffer, GLenum target), (framebuffer, target)) +GEN_THUNKS(glClampColor, (GLenum target, GLenum clamp), (target, clamp)) +GEN_THUNKS(glClampColorARB, (GLenum target, GLenum clamp), (target, clamp)) +GEN_THUNKS(glClear, (GLbitfield mask), (mask)) +GEN_THUNKS(glClearAccum, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearAccumxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearBufferData, (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data), (target, internalformat, format, type, data)) +GEN_THUNKS(glClearBufferSubData, (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (target, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearBufferfi, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil), (buffer, drawbuffer, depth, stencil)) +GEN_THUNKS(glClearBufferfv, (GLenum buffer, GLint drawbuffer, const GLfloat * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearBufferiv, (GLenum buffer, GLint drawbuffer, const GLint * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearBufferuiv, (GLenum buffer, GLint drawbuffer, const GLuint * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearColor, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorIiEXT, (GLint red, GLint green, GLint blue, GLint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorIuiEXT, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorx, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearDepth, (GLdouble depth), (depth)) +GEN_THUNKS(glClearDepthdNV, (GLdouble depth), (depth)) +GEN_THUNKS(glClearDepthf, (GLfloat d), (d)) +GEN_THUNKS(glClearDepthfOES, (GLclampf depth), (depth)) +GEN_THUNKS(glClearDepthx, (GLfixed depth), (depth)) +GEN_THUNKS(glClearDepthxOES, (GLfixed depth), (depth)) +GEN_THUNKS(glClearIndex, (GLfloat c), (c)) +GEN_THUNKS(glClearNamedBufferData, (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data), (buffer, internalformat, format, type, data)) +GEN_THUNKS(glClearNamedBufferDataEXT, (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data), (buffer, internalformat, format, type, data)) +GEN_THUNKS(glClearNamedBufferSubData, (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (buffer, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearNamedBufferSubDataEXT, (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (buffer, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearNamedFramebufferfi, (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil), (framebuffer, buffer, depth, stencil)) +GEN_THUNKS(glClearNamedFramebufferfv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearNamedFramebufferiv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearNamedFramebufferuiv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearStencil, (GLint s), (s)) +GEN_THUNKS(glClearTexImage, (GLuint texture, GLint level, GLenum format, GLenum type, const void * data), (texture, level, format, type, data)) +GEN_THUNKS(glClearTexSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data)) +GEN_THUNKS(glClientActiveTexture, (GLenum texture), (texture)) +GEN_THUNKS(glClientActiveTextureARB, (GLenum texture), (texture)) +GEN_THUNKS(glClientActiveVertexStreamATI, (GLenum stream), (stream)) +GEN_THUNKS(glClientAttribDefaultEXT, (GLbitfield mask), (mask)) +GEN_THUNKS_RET(GLenum, glClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS_RET(GLenum, glClientWaitSyncAPPLE, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glClipControl, (GLenum origin, GLenum depth), (origin, depth)) +GEN_THUNKS(glClipPlane, (GLenum plane, const GLdouble * equation), (plane, equation)) +GEN_THUNKS(glClipPlanef, (GLenum p, const GLfloat * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanefIMG, (GLenum p, const GLfloat * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanefOES, (GLenum plane, const GLfloat * equation), (plane, equation)) +GEN_THUNKS(glClipPlanex, (GLenum plane, const GLfixed * equation), (plane, equation)) +GEN_THUNKS(glClipPlanexIMG, (GLenum p, const GLfixed * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanexOES, (GLenum plane, const GLfixed * equation), (plane, equation)) +GEN_THUNKS(glColor3b, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glColor3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glColor3d, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glColor3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glColor3f, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glColor3fVertex3fSUN, (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (r, g, b, x, y, z)) +GEN_THUNKS(glColor3fVertex3fvSUN, (const GLfloat * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue), (red, green, blue)) +GEN_THUNKS(glColor3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glColor3i, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glColor3iv, (const GLint * v), (v)) +GEN_THUNKS(glColor3s, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glColor3sv, (const GLshort * v), (v)) +GEN_THUNKS(glColor3ub, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glColor3ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glColor3ui, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glColor3uiv, (const GLuint * v), (v)) +GEN_THUNKS(glColor3us, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glColor3usv, (const GLushort * v), (v)) +GEN_THUNKS(glColor3xOES, (GLfixed red, GLfixed green, GLfixed blue), (red, green, blue)) +GEN_THUNKS(glColor3xvOES, (const GLfixed * components), (components)) +GEN_THUNKS(glColor4b, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4bv, (const GLbyte * v), (v)) +GEN_THUNKS(glColor4d, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glColor4f, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4fNormal3fVertex3fSUN, (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glColor4fNormal3fVertex3fvSUN, (const GLfloat * c, const GLfloat * n, const GLfloat * v), (c, n, v)) +GEN_THUNKS(glColor4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glColor4hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glColor4i, (GLint red, GLint green, GLint blue, GLint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4iv, (const GLint * v), (v)) +GEN_THUNKS(glColor4s, (GLshort red, GLshort green, GLshort blue, GLshort alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4sv, (const GLshort * v), (v)) +GEN_THUNKS(glColor4ub, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4ubVertex2fSUN, (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y), (r, g, b, a, x, y)) +GEN_THUNKS(glColor4ubVertex2fvSUN, (const GLubyte * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor4ubVertex3fSUN, (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (r, g, b, a, x, y, z)) +GEN_THUNKS(glColor4ubVertex3fvSUN, (const GLubyte * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor4ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glColor4ui, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4uiv, (const GLuint * v), (v)) +GEN_THUNKS(glColor4us, (GLushort red, GLushort green, GLushort blue, GLushort alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4usv, (const GLushort * v), (v)) +GEN_THUNKS(glColor4x, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4xOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4xvOES, (const GLfixed * components), (components)) +GEN_THUNKS(glColorFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glColorFragmentOp1ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)) +GEN_THUNKS(glColorFragmentOp2ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) +GEN_THUNKS(glColorFragmentOp3ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) +GEN_THUNKS(glColorMask, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColorMaskIndexedEXT, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaski, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaskiEXT, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaskiOES, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaterial, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glColorP3ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glColorP3uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glColorP4ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glColorP4uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glColorPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glColorPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glColorPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glColorPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glColorSubTable, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data), (target, start, count, format, type, data)) +GEN_THUNKS(glColorSubTableEXT, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data), (target, start, count, format, type, data)) +GEN_THUNKS(glColorTable, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalformat, width, format, type, table)) +GEN_THUNKS(glColorTableEXT, (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalFormat, width, format, type, table)) +GEN_THUNKS(glColorTableParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameterfvSGI, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameterivSGI, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glColorTableSGI, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalformat, width, format, type, table)) +GEN_THUNKS(glCombinerInputNV, (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage), (stage, portion, variable, input, mapping, componentUsage)) +GEN_THUNKS(glCombinerOutputNV, (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum), (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum)) +GEN_THUNKS(glCombinerParameterfNV, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glCombinerParameterfvNV, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glCombinerParameteriNV, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glCombinerParameterivNV, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glCombinerStageParameterfvNV, (GLenum stage, GLenum pname, const GLfloat * params), (stage, pname, params)) +GEN_THUNKS(glCommandListSegmentsNV, (GLuint list, GLuint segments), (list, segments)) +GEN_THUNKS(glCompileCommandListNV, (GLuint list), (list)) +GEN_THUNKS(glCompileShader, (GLuint shader), (shader)) +GEN_THUNKS(glCompileShaderARB, (GLhandleARB shaderObj), ((uintptr_t)shaderObj)) +GEN_THUNKS(glCompileShaderIncludeARB, (GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length), (shader, count, path, length)) +GEN_THUNKS(glCompressedMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, height, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, height, depth, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, width, format, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) +GEN_THUNKS(glCompressedTexImage1D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage1DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage2DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage1DARB, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage2DARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3DARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, height, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureImage3DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, height, depth, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, width, format, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) +GEN_THUNKS(glConservativeRasterParameterfNV, (GLenum pname, GLfloat value), (pname, value)) +GEN_THUNKS(glConvolutionFilter1D, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image), (target, internalformat, width, format, type, image)) +GEN_THUNKS(glConvolutionFilter1DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image), (target, internalformat, width, format, type, image)) +GEN_THUNKS(glConvolutionFilter2D, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image), (target, internalformat, width, height, format, type, image)) +GEN_THUNKS(glConvolutionFilter2DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image), (target, internalformat, width, height, format, type, image)) +GEN_THUNKS(glConvolutionParameterf, (GLenum target, GLenum pname, GLfloat params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfEXT, (GLenum target, GLenum pname, GLfloat params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfvEXT, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteri, (GLenum target, GLenum pname, GLint params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteriEXT, (GLenum target, GLenum pname, GLint params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glConvolutionParameterxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glCopyBufferSubData, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyBufferSubDataNV, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyColorSubTable, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target, start, x, y, width)) +GEN_THUNKS(glCopyColorSubTableEXT, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target, start, x, y, width)) +GEN_THUNKS(glCopyColorTable, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyColorTableSGI, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter1D, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter1DEXT, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter2D, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target, internalformat, x, y, width, height)) +GEN_THUNKS(glCopyConvolutionFilter2DEXT, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target, internalformat, x, y, width, height)) +GEN_THUNKS(glCopyImageSubData, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyImageSubDataEXT, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyImageSubDataNV, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS(glCopyImageSubDataOES, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (texunit, target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (texunit, target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texunit, target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texunit, target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyNamedBufferSubData, (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyPathNV, (GLuint resultPath, GLuint srcPath), (resultPath, srcPath)) +GEN_THUNKS(glCopyPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type), (x, y, width, height, type)) +GEN_THUNKS(glCopyTexImage1D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTexImage1DEXT, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTexImage2DEXT, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTexSubImage1DEXT, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage2DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (texture, target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (texture, target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTextureLevelsAPPLE, (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount), (destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount)) +GEN_THUNKS(glCopyTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texture, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texture, target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCoverFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues)) +GEN_THUNKS(glCoverFillPathNV, (GLuint path, GLenum coverMode), (path, coverMode)) +GEN_THUNKS(glCoverStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues)) +GEN_THUNKS(glCoverStrokePathNV, (GLuint path, GLenum coverMode), (path, coverMode)) +GEN_THUNKS(glCoverageMaskNV, (GLboolean mask), (mask)) +GEN_THUNKS(glCoverageModulationNV, (GLenum components), (components)) +GEN_THUNKS(glCoverageModulationTableNV, (GLsizei n, const GLfloat * v), (n, v)) +GEN_THUNKS(glCoverageOperationNV, (GLenum operation), (operation)) +GEN_THUNKS(glCreateBuffers, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glCreateCommandListsNV, (GLsizei n, GLuint * lists), (n, lists)) +GEN_THUNKS(glCreateFramebuffers, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glCreatePerfQueryINTEL, (GLuint queryId, GLuint * queryHandle), (queryId, queryHandle)) +GEN_THUNKS_RET(GLuint, glCreateProgram, (void), ()) +GEN_THUNKS_RET(GLhandleARB, glCreateProgramObjectARB, (void), ()) +GEN_THUNKS(glCreateProgramPipelines, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glCreateQueries, (GLenum target, GLsizei n, GLuint * ids), (target, n, ids)) +GEN_THUNKS(glCreateRenderbuffers, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glCreateSamplers, (GLsizei n, GLuint * samplers), (n, samplers)) +GEN_THUNKS_RET(GLuint, glCreateShader, (GLenum type), (type)) +GEN_THUNKS_RET(GLhandleARB, glCreateShaderObjectARB, (GLenum shaderType), (shaderType)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramEXT, (GLenum type, const GLchar * string), (type, string)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramv, (GLenum type, GLsizei count, const GLchar *const* strings), (type, count, strings)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar ** strings), (type, count, strings)) +GEN_THUNKS(glCreateStatesNV, (GLsizei n, GLuint * states), (n, states)) +GEN_THUNKS_RET(GLsync, glCreateSyncFromCLeventARB, (struct _cl_context * context, struct _cl_event * event, GLbitfield flags), (context, event, flags)) +GEN_THUNKS(glCreateTextures, (GLenum target, GLsizei n, GLuint * textures), (target, n, textures)) +GEN_THUNKS(glCreateTransformFeedbacks, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glCreateVertexArrays, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glCullFace, (GLenum mode), (mode)) +GEN_THUNKS(glCullParameterdvEXT, (GLenum pname, GLdouble * params), (pname, params)) +GEN_THUNKS(glCullParameterfvEXT, (GLenum pname, GLfloat * params), (pname, params)) +GEN_THUNKS(glCurrentPaletteMatrixARB, (GLint index), (index)) +GEN_THUNKS(glCurrentPaletteMatrixOES, (GLuint matrixpaletteindex), (matrixpaletteindex)) +GEN_THUNKS(glDebugMessageCallback, (GLDEBUGPROC callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackAMD, (GLDEBUGPROCAMD callback, void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackARB, (GLDEBUGPROCARB callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackKHR, (GLDEBUGPROCKHR callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageControl, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageControlARB, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageControlKHR, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageEnableAMD, (GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (category, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageInsert, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDebugMessageInsertAMD, (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf), (category, severity, id, length, buf)) +GEN_THUNKS(glDebugMessageInsertARB, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDebugMessageInsertKHR, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDeformSGIX, (GLbitfield mask), (mask)) +GEN_THUNKS(glDeformationMap3dSGIX, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) +GEN_THUNKS(glDeformationMap3fSGIX, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) +GEN_THUNKS(glDeleteAsyncMarkersSGIX, (GLuint marker, GLsizei range), (marker, range)) +GEN_THUNKS(glDeleteBuffers, (GLsizei n, const GLuint * buffers), (n, buffers)) +GEN_THUNKS(glDeleteBuffersARB, (GLsizei n, const GLuint * buffers), (n, buffers)) +GEN_THUNKS(glDeleteCommandListsNV, (GLsizei n, const GLuint * lists), (n, lists)) +GEN_THUNKS(glDeleteFencesAPPLE, (GLsizei n, const GLuint * fences), (n, fences)) +GEN_THUNKS(glDeleteFencesNV, (GLsizei n, const GLuint * fences), (n, fences)) +GEN_THUNKS(glDeleteFragmentShaderATI, (GLuint id), (id)) +GEN_THUNKS(glDeleteFramebuffers, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteFramebuffersEXT, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteFramebuffersOES, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteLists, (GLuint list, GLsizei range), (list, range)) +GEN_THUNKS(glDeleteNamedStringARB, (GLint namelen, const GLchar * name), (namelen, name)) +GEN_THUNKS(glDeleteNamesAMD, (GLenum identifier, GLuint num, const GLuint * names), (identifier, num, names)) +GEN_THUNKS(glDeleteObjectARB, (GLhandleARB obj), ((uintptr_t)obj)) +GEN_THUNKS(glDeleteOcclusionQueriesNV, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeletePathsNV, (GLuint path, GLsizei range), (path, range)) +GEN_THUNKS(glDeletePerfMonitorsAMD, (GLsizei n, GLuint * monitors), (n, monitors)) +GEN_THUNKS(glDeletePerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glDeleteProgram, (GLuint program), (program)) +GEN_THUNKS(glDeleteProgramPipelines, (GLsizei n, const GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glDeleteProgramsARB, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glDeleteProgramsNV, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glDeleteQueries, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteQueriesARB, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteQueriesEXT, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteRenderbuffers, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteRenderbuffersEXT, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteRenderbuffersOES, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteSamplers, (GLsizei count, const GLuint * samplers), (count, samplers)) +GEN_THUNKS(glDeleteShader, (GLuint shader), (shader)) +GEN_THUNKS(glDeleteStatesNV, (GLsizei n, const GLuint * states), (n, states)) +GEN_THUNKS(glDeleteSync, (GLsync sync), (sync)) +GEN_THUNKS(glDeleteSyncAPPLE, (GLsync sync), (sync)) +GEN_THUNKS(glDeleteTextures, (GLsizei n, const GLuint * textures), (n, textures)) +GEN_THUNKS(glDeleteTexturesEXT, (GLsizei n, const GLuint * textures), (n, textures)) +GEN_THUNKS(glDeleteTransformFeedbacks, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteTransformFeedbacksNV, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteVertexArrays, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexArraysAPPLE, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexArraysOES, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexShaderEXT, (GLuint id), (id)) +GEN_THUNKS(glDepthBoundsEXT, (GLclampd zmin, GLclampd zmax), (zmin, zmax)) +GEN_THUNKS(glDepthBoundsdNV, (GLdouble zmin, GLdouble zmax), (zmin, zmax)) +GEN_THUNKS(glDepthFunc, (GLenum func), (func)) +GEN_THUNKS(glDepthMask, (GLboolean flag), (flag)) +GEN_THUNKS(glDepthRange, (GLdouble hither, GLdouble yon), (hither, yon)) +GEN_THUNKS(glDepthRangeArrayfvNV, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glDepthRangeArrayv, (GLuint first, GLsizei count, const GLdouble * v), (first, count, v)) +GEN_THUNKS(glDepthRangeIndexed, (GLuint index, GLdouble n, GLdouble f), (index, n, f)) +GEN_THUNKS(glDepthRangeIndexedfNV, (GLuint index, GLfloat n, GLfloat f), (index, n, f)) +GEN_THUNKS(glDepthRangedNV, (GLdouble zNear, GLdouble zFar), (zNear, zFar)) +GEN_THUNKS(glDepthRangef, (GLfloat n, GLfloat f), (n, f)) +GEN_THUNKS(glDepthRangefOES, (GLclampf n, GLclampf f), (n, f)) +GEN_THUNKS(glDepthRangex, (GLfixed n, GLfixed f), (n, f)) +GEN_THUNKS(glDepthRangexOES, (GLfixed n, GLfixed f), (n, f)) +GEN_THUNKS(glDetachObjectARB, (GLhandleARB containerObj, GLhandleARB attachedObj), ((uintptr_t)containerObj, (uintptr_t)attachedObj)) +GEN_THUNKS(glDetachShader, (GLuint program, GLuint shader), (program, shader)) +GEN_THUNKS(glDetailTexFuncSGIS, (GLenum target, GLsizei n, const GLfloat * points), (target, n, points)) +GEN_THUNKS(glDisable, (GLenum cap), (cap)) +GEN_THUNKS(glDisableClientState, (GLenum array), (array)) +GEN_THUNKS(glDisableClientStateIndexedEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glDisableClientStateiEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glDisableDriverControlQCOM, (GLuint driverControl), (driverControl)) +GEN_THUNKS(glDisableIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableVariantClientStateEXT, (GLuint id), (id)) +GEN_THUNKS(glDisableVertexArrayAttrib, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glDisableVertexArrayAttribEXT, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glDisableVertexArrayEXT, (GLuint vaobj, GLenum array), (vaobj, array)) +GEN_THUNKS(glDisableVertexAttribAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glDisableVertexAttribArray, (GLuint index), (index)) +GEN_THUNKS(glDisableVertexAttribArrayARB, (GLuint index), (index)) +GEN_THUNKS(glDisablei, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDiscardFramebufferEXT, (GLenum target, GLsizei numAttachments, const GLenum * attachments), (target, numAttachments, attachments)) +GEN_THUNKS(glDispatchCompute, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z), (num_groups_x, num_groups_y, num_groups_z)) +GEN_THUNKS(glDispatchComputeGroupSizeARB, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z), (num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z)) +GEN_THUNKS(glDispatchComputeIndirect, (GLintptr indirect), (indirect)) +GEN_THUNKS(glDrawArrays, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawArraysEXT, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawArraysIndirect, (GLenum mode, const void * indirect), (mode, indirect)) +GEN_THUNKS(glDrawArraysInstanced, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount), (mode, first, count, instancecount)) +GEN_THUNKS(glDrawArraysInstancedANGLE, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedARB, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedBaseInstance, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance), (mode, first, count, instancecount, baseinstance)) +GEN_THUNKS(glDrawArraysInstancedBaseInstanceEXT, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance), (mode, first, count, instancecount, baseinstance)) +GEN_THUNKS(glDrawArraysInstancedEXT, (GLenum mode, GLint start, GLsizei count, GLsizei primcount), (mode, start, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedNV, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawBuffer, (GLenum buf), (buf)) +GEN_THUNKS(glDrawBuffers, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersARB, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersATI, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersEXT, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersIndexedEXT, (GLint n, const GLenum * location, const GLint * indices), (n, location, indices)) +GEN_THUNKS(glDrawBuffersNV, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawCommandsAddressNV, (GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count), (primitiveMode, indirects, sizes, count)) +GEN_THUNKS(glDrawCommandsNV, (GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count), (primitiveMode, buffer, indirects, sizes, count)) +GEN_THUNKS(glDrawCommandsStatesAddressNV, (const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (indirects, sizes, states, fbos, count)) +GEN_THUNKS(glDrawCommandsStatesNV, (GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (buffer, indirects, sizes, states, fbos, count)) +GEN_THUNKS(glDrawElementArrayAPPLE, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawElementArrayATI, (GLenum mode, GLsizei count), (mode, count)) +GEN_THUNKS(glDrawElements, (GLenum mode, GLsizei count, GLenum type, const void * indices), (mode, count, type, indices)) +GEN_THUNKS(glDrawElementsBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsBaseVertexEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsBaseVertexOES, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsIndirect, (GLenum mode, GLenum type, const void * indirect), (mode, type, indirect)) +GEN_THUNKS(glDrawElementsInstanced, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount), (mode, count, type, indices, instancecount)) +GEN_THUNKS(glDrawElementsInstancedANGLE, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedARB, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedBaseInstance, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance), (mode, count, type, indices, instancecount, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseInstanceEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance), (mode, count, type, indices, instancecount, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexBaseInstance, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance), (mode, count, type, indices, instancecount, basevertex, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexBaseInstanceEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance), (mode, count, type, indices, instancecount, basevertex, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexOES, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedNV, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawMeshArraysSUN, (GLenum mode, GLint first, GLsizei count, GLsizei width), (mode, first, count, width)) +GEN_THUNKS(glDrawPixels, (GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (width, height, format, type, pixels)) +GEN_THUNKS(glDrawRangeElementArrayAPPLE, (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count), (mode, start, end, first, count)) +GEN_THUNKS(glDrawRangeElementArrayATI, (GLenum mode, GLuint start, GLuint end, GLsizei count), (mode, start, end, count)) +GEN_THUNKS(glDrawRangeElements, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices), (mode, start, end, count, type, indices)) +GEN_THUNKS(glDrawRangeElementsBaseVertex, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsBaseVertexEXT, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsBaseVertexOES, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsEXT, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices), (mode, start, end, count, type, indices)) +GEN_THUNKS(glDrawTexfOES, (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexfvOES, (const GLfloat * coords), (coords)) +GEN_THUNKS(glDrawTexiOES, (GLint x, GLint y, GLint z, GLint width, GLint height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexivOES, (const GLint * coords), (coords)) +GEN_THUNKS(glDrawTexsOES, (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexsvOES, (const GLshort * coords), (coords)) +GEN_THUNKS(glDrawTextureNV, (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1), (texture, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1)) +GEN_THUNKS(glDrawTexxOES, (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexxvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glDrawTransformFeedback, (GLenum mode, GLuint id), (mode, id)) +GEN_THUNKS(glDrawTransformFeedbackInstanced, (GLenum mode, GLuint id, GLsizei instancecount), (mode, id, instancecount)) +GEN_THUNKS(glDrawTransformFeedbackNV, (GLenum mode, GLuint id), (mode, id)) +GEN_THUNKS(glDrawTransformFeedbackStream, (GLenum mode, GLuint id, GLuint stream), (mode, id, stream)) +GEN_THUNKS(glDrawTransformFeedbackStreamInstanced, (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount), (mode, id, stream, instancecount)) +GEN_THUNKS(glEGLImageTargetRenderbufferStorageOES, (GLenum target, GLeglImageOES image), (target, image)) +GEN_THUNKS(glEGLImageTargetTexture2DOES, (GLenum target, GLeglImageOES image), (target, image)) +GEN_THUNKS(glEdgeFlag, (GLboolean flag), (flag)) +GEN_THUNKS(glEdgeFlagFormatNV, (GLsizei stride), (stride)) +GEN_THUNKS(glEdgeFlagPointer, (GLsizei stride, const void * pointer), (stride, pointer)) +GEN_THUNKS(glEdgeFlagPointerEXT, (GLsizei stride, GLsizei count, const GLboolean * pointer), (stride, count, pointer)) +GEN_THUNKS(glEdgeFlagPointerListIBM, (GLint stride, const GLboolean ** pointer, GLint ptrstride), (stride, pointer, ptrstride)) +GEN_THUNKS(glEdgeFlagv, (const GLboolean * flag), (flag)) +GEN_THUNKS(glElementPointerAPPLE, (GLenum type, const void * pointer), (type, pointer)) +GEN_THUNKS(glElementPointerATI, (GLenum type, const void * pointer), (type, pointer)) +GEN_THUNKS(glEnable, (GLenum cap), (cap)) +GEN_THUNKS(glEnableClientState, (GLenum array), (array)) +GEN_THUNKS(glEnableClientStateIndexedEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glEnableClientStateiEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glEnableDriverControlQCOM, (GLuint driverControl), (driverControl)) +GEN_THUNKS(glEnableIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableVariantClientStateEXT, (GLuint id), (id)) +GEN_THUNKS(glEnableVertexArrayAttrib, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glEnableVertexArrayAttribEXT, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glEnableVertexArrayEXT, (GLuint vaobj, GLenum array), (vaobj, array)) +GEN_THUNKS(glEnableVertexAttribAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glEnableVertexAttribArray, (GLuint index), (index)) +GEN_THUNKS(glEnableVertexAttribArrayARB, (GLuint index), (index)) +GEN_THUNKS(glEnablei, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnd_unwrapped, (void), ()) +GEN_THUNKS(glEndConditionalRender, (void), ()) +GEN_THUNKS(glEndConditionalRenderNV, (void), ()) +GEN_THUNKS(glEndConditionalRenderNVX, (void), ()) +GEN_THUNKS(glEndFragmentShaderATI, (void), ()) +GEN_THUNKS(glEndList, (void), ()) +GEN_THUNKS(glEndOcclusionQueryNV, (void), ()) +GEN_THUNKS(glEndPerfMonitorAMD, (GLuint monitor), (monitor)) +GEN_THUNKS(glEndPerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glEndQuery, (GLenum target), (target)) +GEN_THUNKS(glEndQueryARB, (GLenum target), (target)) +GEN_THUNKS(glEndQueryEXT, (GLenum target), (target)) +GEN_THUNKS(glEndQueryIndexed, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEndTilingQCOM, (GLbitfield preserveMask), (preserveMask)) +GEN_THUNKS(glEndTransformFeedback, (void), ()) +GEN_THUNKS(glEndTransformFeedbackEXT, (void), ()) +GEN_THUNKS(glEndTransformFeedbackNV, (void), ()) +GEN_THUNKS(glEndVertexShaderEXT, (void), ()) +GEN_THUNKS(glEndVideoCaptureNV, (GLuint video_capture_slot), (video_capture_slot)) +GEN_THUNKS(glEvalCoord1d, (GLdouble u), (u)) +GEN_THUNKS(glEvalCoord1dv, (const GLdouble * u), (u)) +GEN_THUNKS(glEvalCoord1f, (GLfloat u), (u)) +GEN_THUNKS(glEvalCoord1fv, (const GLfloat * u), (u)) +GEN_THUNKS(glEvalCoord1xOES, (GLfixed u), (u)) +GEN_THUNKS(glEvalCoord1xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glEvalCoord2d, (GLdouble u, GLdouble v), (u, v)) +GEN_THUNKS(glEvalCoord2dv, (const GLdouble * u), (u)) +GEN_THUNKS(glEvalCoord2f, (GLfloat u, GLfloat v), (u, v)) +GEN_THUNKS(glEvalCoord2fv, (const GLfloat * u), (u)) +GEN_THUNKS(glEvalCoord2xOES, (GLfixed u, GLfixed v), (u, v)) +GEN_THUNKS(glEvalCoord2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glEvalMapsNV, (GLenum target, GLenum mode), (target, mode)) +GEN_THUNKS(glEvalMesh1, (GLenum mode, GLint i1, GLint i2), (mode, i1, i2)) +GEN_THUNKS(glEvalMesh2, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2), (mode, i1, i2, j1, j2)) +GEN_THUNKS(glEvalPoint1, (GLint i), (i)) +GEN_THUNKS(glEvalPoint2, (GLint i, GLint j), (i, j)) +GEN_THUNKS(glEvaluateDepthValuesARB, (void), ()) +GEN_THUNKS(glExecuteProgramNV, (GLenum target, GLuint id, const GLfloat * params), (target, id, params)) +GEN_THUNKS(glExtGetBufferPointervQCOM, (GLenum target, void ** params), (target, params)) +GEN_THUNKS(glExtGetBuffersQCOM, (GLuint * buffers, GLint maxBuffers, GLint * numBuffers), (buffers, maxBuffers, numBuffers)) +GEN_THUNKS(glExtGetFramebuffersQCOM, (GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers), (framebuffers, maxFramebuffers, numFramebuffers)) +GEN_THUNKS(glExtGetProgramBinarySourceQCOM, (GLuint program, GLenum shadertype, GLchar * source, GLint * length), (program, shadertype, source, length)) +GEN_THUNKS(glExtGetProgramsQCOM, (GLuint * programs, GLint maxPrograms, GLint * numPrograms), (programs, maxPrograms, numPrograms)) +GEN_THUNKS(glExtGetRenderbuffersQCOM, (GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers), (renderbuffers, maxRenderbuffers, numRenderbuffers)) +GEN_THUNKS(glExtGetShadersQCOM, (GLuint * shaders, GLint maxShaders, GLint * numShaders), (shaders, maxShaders, numShaders)) +GEN_THUNKS(glExtGetTexLevelParameterivQCOM, (GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params), (texture, face, level, pname, params)) +GEN_THUNKS(glExtGetTexSubImageQCOM, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels)) +GEN_THUNKS(glExtGetTexturesQCOM, (GLuint * textures, GLint maxTextures, GLint * numTextures), (textures, maxTextures, numTextures)) +GEN_THUNKS_RET(GLboolean, glExtIsProgramBinaryQCOM, (GLuint program), (program)) +GEN_THUNKS(glExtTexObjectStateOverrideiQCOM, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glExtractComponentEXT, (GLuint res, GLuint src, GLuint num), (res, src, num)) +GEN_THUNKS(glFeedbackBuffer, (GLsizei size, GLenum type, GLfloat * buffer), (size, type, buffer)) +GEN_THUNKS(glFeedbackBufferxOES, (GLsizei n, GLenum type, const GLfixed * buffer), (n, type, buffer)) +GEN_THUNKS_RET(GLsync, glFenceSync, (GLenum condition, GLbitfield flags), (condition, flags)) +GEN_THUNKS_RET(GLsync, glFenceSyncAPPLE, (GLenum condition, GLbitfield flags), (condition, flags)) +GEN_THUNKS(glFinalCombinerInputNV, (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage), (variable, input, mapping, componentUsage)) +GEN_THUNKS(glFinish, (void), ()) +GEN_THUNKS_RET(GLint, glFinishAsyncSGIX, (GLuint * markerp), (markerp)) +GEN_THUNKS(glFinishFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS(glFinishFenceNV, (GLuint fence), (fence)) +GEN_THUNKS(glFinishObjectAPPLE, (GLenum object, GLint name), (object, name)) +GEN_THUNKS(glFinishTextureSUNX, (void), ()) +GEN_THUNKS(glFlush, (void), ()) +GEN_THUNKS(glFlushMappedBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length), (target, offset, length)) +GEN_THUNKS(glFlushMappedBufferRangeAPPLE, (GLenum target, GLintptr offset, GLsizeiptr size), (target, offset, size)) +GEN_THUNKS(glFlushMappedBufferRangeEXT, (GLenum target, GLintptr offset, GLsizeiptr length), (target, offset, length)) +GEN_THUNKS(glFlushMappedNamedBufferRange, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glFlushMappedNamedBufferRangeEXT, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glFlushPixelDataRangeNV, (GLenum target), (target)) +GEN_THUNKS(glFlushRasterSGIX, (void), ()) +GEN_THUNKS(glFlushStaticDataIBM, (GLenum target), (target)) +GEN_THUNKS(glFlushVertexArrayRangeAPPLE, (GLsizei length, void * pointer), (length, pointer)) +GEN_THUNKS(glFlushVertexArrayRangeNV, (void), ()) +GEN_THUNKS(glFogCoordFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glFogCoordPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glFogCoordPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glFogCoordPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glFogCoordd, (GLdouble coord), (coord)) +GEN_THUNKS(glFogCoorddEXT, (GLdouble coord), (coord)) +GEN_THUNKS(glFogCoorddv, (const GLdouble * coord), (coord)) +GEN_THUNKS(glFogCoorddvEXT, (const GLdouble * coord), (coord)) +GEN_THUNKS(glFogCoordf, (GLfloat coord), (coord)) +GEN_THUNKS(glFogCoordfEXT, (GLfloat coord), (coord)) +GEN_THUNKS(glFogCoordfv, (const GLfloat * coord), (coord)) +GEN_THUNKS(glFogCoordfvEXT, (const GLfloat * coord), (coord)) +GEN_THUNKS(glFogCoordhNV, (GLhalfNV fog), (fog)) +GEN_THUNKS(glFogCoordhvNV, (const GLhalfNV * fog), (fog)) +GEN_THUNKS(glFogFuncSGIS, (GLsizei n, const GLfloat * points), (n, points)) +GEN_THUNKS(glFogf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glFogfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glFogi, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glFogiv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glFogx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glFogxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glFogxv, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glFogxvOES, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glFragmentColorMaterialSGIX, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glFragmentCoverageColorNV, (GLuint color), (color)) +GEN_THUNKS(glFragmentLightModelfSGIX, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glFragmentLightModelfvSGIX, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glFragmentLightModeliSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glFragmentLightModelivSGIX, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glFragmentLightfSGIX, (GLenum light, GLenum pname, GLfloat param), (light, pname, param)) +GEN_THUNKS(glFragmentLightfvSGIX, (GLenum light, GLenum pname, const GLfloat * params), (light, pname, params)) +GEN_THUNKS(glFragmentLightiSGIX, (GLenum light, GLenum pname, GLint param), (light, pname, param)) +GEN_THUNKS(glFragmentLightivSGIX, (GLenum light, GLenum pname, const GLint * params), (light, pname, params)) +GEN_THUNKS(glFragmentMaterialfSGIX, (GLenum face, GLenum pname, GLfloat param), (face, pname, param)) +GEN_THUNKS(glFragmentMaterialfvSGIX, (GLenum face, GLenum pname, const GLfloat * params), (face, pname, params)) +GEN_THUNKS(glFragmentMaterialiSGIX, (GLenum face, GLenum pname, GLint param), (face, pname, param)) +GEN_THUNKS(glFragmentMaterialivSGIX, (GLenum face, GLenum pname, const GLint * params), (face, pname, params)) +GEN_THUNKS(glFrameTerminatorGREMEDY, (void), ()) +GEN_THUNKS(glFrameZoomSGIX, (GLint factor), (factor)) +GEN_THUNKS(glFramebufferDrawBufferEXT, (GLuint framebuffer, GLenum mode), (framebuffer, mode)) +GEN_THUNKS(glFramebufferDrawBuffersEXT, (GLuint framebuffer, GLsizei n, const GLenum * bufs), (framebuffer, n, bufs)) +GEN_THUNKS(glFramebufferParameteri, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glFramebufferReadBufferEXT, (GLuint framebuffer, GLenum mode), (framebuffer, mode)) +GEN_THUNKS(glFramebufferRenderbuffer, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferRenderbufferEXT, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferRenderbufferOES, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferSampleLocationsfvARB, (GLenum target, GLuint start, GLsizei count, const GLfloat * v), (target, start, count, v)) +GEN_THUNKS(glFramebufferSampleLocationsfvNV, (GLenum target, GLuint start, GLsizei count, const GLfloat * v), (target, start, count, v)) +GEN_THUNKS(glFramebufferTexture, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTexture1D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture1DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2DMultisampleEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples), (target, attachment, textarget, texture, level, samples)) +GEN_THUNKS(glFramebufferTexture2DMultisampleIMG, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples), (target, attachment, textarget, texture, level, samples)) +GEN_THUNKS(glFramebufferTexture2DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture3D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTexture3DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTexture3DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTextureARB, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTextureEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTextureFaceARB, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face), (target, attachment, texture, level, face)) +GEN_THUNKS(glFramebufferTextureFaceEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face), (target, attachment, texture, level, face)) +GEN_THUNKS(glFramebufferTextureLayer, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureLayerARB, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureLayerEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureMultiviewOVR, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews), (target, attachment, texture, level, baseViewIndex, numViews)) +GEN_THUNKS(glFramebufferTextureOES, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFreeObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glFrontFace, (GLenum mode), (mode)) +GEN_THUNKS(glFrustum, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glFrustumf, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumfOES, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumx, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumxOES, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS_RET(GLuint, glGenAsyncMarkersSGIX, (GLsizei range), (range)) +GEN_THUNKS(glGenBuffers, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glGenBuffersARB, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glGenFencesAPPLE, (GLsizei n, GLuint * fences), (n, fences)) +GEN_THUNKS(glGenFencesNV, (GLsizei n, GLuint * fences), (n, fences)) +GEN_THUNKS_RET(GLuint, glGenFragmentShadersATI, (GLuint range), (range)) +GEN_THUNKS(glGenFramebuffers, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glGenFramebuffersEXT, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glGenFramebuffersOES, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS_RET(GLuint, glGenLists, (GLsizei range), (range)) +GEN_THUNKS(glGenNamesAMD, (GLenum identifier, GLuint num, GLuint * names), (identifier, num, names)) +GEN_THUNKS(glGenOcclusionQueriesNV, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS_RET(GLuint, glGenPathsNV, (GLsizei range), (range)) +GEN_THUNKS(glGenPerfMonitorsAMD, (GLsizei n, GLuint * monitors), (n, monitors)) +GEN_THUNKS(glGenProgramPipelines, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glGenProgramPipelinesEXT, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glGenProgramsARB, (GLsizei n, GLuint * programs), (n, programs)) +GEN_THUNKS(glGenProgramsNV, (GLsizei n, GLuint * programs), (n, programs)) +GEN_THUNKS(glGenQueries, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenQueriesARB, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenQueriesEXT, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenRenderbuffers, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenRenderbuffersEXT, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenRenderbuffersOES, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenSamplers, (GLsizei count, GLuint * samplers), (count, samplers)) +GEN_THUNKS_RET(GLuint, glGenSymbolsEXT, (GLenum datatype, GLenum storagetype, GLenum range, GLuint components), (datatype, storagetype, range, components)) +GEN_THUNKS(glGenTextures, (GLsizei n, GLuint * textures), (n, textures)) +GEN_THUNKS(glGenTexturesEXT, (GLsizei n, GLuint * textures), (n, textures)) +GEN_THUNKS(glGenTransformFeedbacks, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenTransformFeedbacksNV, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenVertexArrays, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glGenVertexArraysAPPLE, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glGenVertexArraysOES, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS_RET(GLuint, glGenVertexShadersEXT, (GLuint range), (range)) +GEN_THUNKS(glGenerateMipmap, (GLenum target), (target)) +GEN_THUNKS(glGenerateMipmapEXT, (GLenum target), (target)) +GEN_THUNKS(glGenerateMipmapOES, (GLenum target), (target)) +GEN_THUNKS(glGenerateMultiTexMipmapEXT, (GLenum texunit, GLenum target), (texunit, target)) +GEN_THUNKS(glGenerateTextureMipmap, (GLuint texture), (texture)) +GEN_THUNKS(glGenerateTextureMipmapEXT, (GLuint texture, GLenum target), (texture, target)) +GEN_THUNKS(glGetActiveAtomicCounterBufferiv, (GLuint program, GLuint bufferIndex, GLenum pname, GLint * params), (program, bufferIndex, pname, params)) +GEN_THUNKS(glGetActiveAttrib, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetActiveAttribARB, (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name), ((uintptr_t)programObj, index, maxLength, length, size, type, name)) +GEN_THUNKS(glGetActiveSubroutineName, (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name), (program, shadertype, index, bufsize, length, name)) +GEN_THUNKS(glGetActiveSubroutineUniformName, (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name), (program, shadertype, index, bufsize, length, name)) +GEN_THUNKS(glGetActiveSubroutineUniformiv, (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values), (program, shadertype, index, pname, values)) +GEN_THUNKS(glGetActiveUniform, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetActiveUniformARB, (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name), ((uintptr_t)programObj, index, maxLength, length, size, type, name)) +GEN_THUNKS(glGetActiveUniformBlockName, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName), (program, uniformBlockIndex, bufSize, length, uniformBlockName)) +GEN_THUNKS(glGetActiveUniformBlockiv, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params), (program, uniformBlockIndex, pname, params)) +GEN_THUNKS(glGetActiveUniformName, (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName), (program, uniformIndex, bufSize, length, uniformName)) +GEN_THUNKS(glGetActiveUniformsiv, (GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params), (program, uniformCount, uniformIndices, pname, params)) +GEN_THUNKS(glGetActiveVaryingNV, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetArrayObjectfvATI, (GLenum array, GLenum pname, GLfloat * params), (array, pname, params)) +GEN_THUNKS(glGetArrayObjectivATI, (GLenum array, GLenum pname, GLint * params), (array, pname, params)) +GEN_THUNKS(glGetAttachedObjectsARB, (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj), ((uintptr_t)containerObj, maxCount, count, obj)) +GEN_THUNKS(glGetAttachedShaders, (GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders), (program, maxCount, count, shaders)) +GEN_THUNKS_RET(GLint, glGetAttribLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetAttribLocationARB, (GLhandleARB programObj, const GLcharARB * name), ((uintptr_t)programObj, name)) +GEN_THUNKS(glGetBooleanIndexedvEXT, (GLenum target, GLuint index, GLboolean * data), (target, index, data)) +GEN_THUNKS(glGetBooleani_v, (GLenum target, GLuint index, GLboolean * data), (target, index, data)) +GEN_THUNKS(glGetBooleanv, (GLenum pname, GLboolean * data), (pname, data)) +GEN_THUNKS(glGetBufferParameteri64v, (GLenum target, GLenum pname, GLint64 * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameterivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameterui64vNV, (GLenum target, GLenum pname, GLuint64EXT * params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointerv, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointervARB, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointervOES, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferSubData, (GLenum target, GLintptr offset, GLsizeiptr size, void * data), (target, offset, size, data)) +GEN_THUNKS(glGetBufferSubDataARB, (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data), (target, offset, size, data)) +GEN_THUNKS(glGetClipPlane, (GLenum plane, GLdouble * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanef, (GLenum plane, GLfloat * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanefOES, (GLenum plane, GLfloat * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanex, (GLenum plane, GLfixed * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanexOES, (GLenum plane, GLfixed * equation), (plane, equation)) +GEN_THUNKS(glGetColorTable, (GLenum target, GLenum format, GLenum type, void * table), (target, format, type, table)) +GEN_THUNKS(glGetColorTableEXT, (GLenum target, GLenum format, GLenum type, void * data), (target, format, type, data)) +GEN_THUNKS(glGetColorTableParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterfvSGI, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterivSGI, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableSGI, (GLenum target, GLenum format, GLenum type, void * table), (target, format, type, table)) +GEN_THUNKS(glGetCombinerInputParameterfvNV, (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params), (stage, portion, variable, pname, params)) +GEN_THUNKS(glGetCombinerInputParameterivNV, (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params), (stage, portion, variable, pname, params)) +GEN_THUNKS(glGetCombinerOutputParameterfvNV, (GLenum stage, GLenum portion, GLenum pname, GLfloat * params), (stage, portion, pname, params)) +GEN_THUNKS(glGetCombinerOutputParameterivNV, (GLenum stage, GLenum portion, GLenum pname, GLint * params), (stage, portion, pname, params)) +GEN_THUNKS(glGetCombinerStageParameterfvNV, (GLenum stage, GLenum pname, GLfloat * params), (stage, pname, params)) +GEN_THUNKS_RET(GLuint, glGetCommandHeaderNV, (GLenum tokenID, GLuint size), (tokenID, size)) +GEN_THUNKS(glGetCompressedMultiTexImageEXT, (GLenum texunit, GLenum target, GLint lod, void * img), (texunit, target, lod, img)) +GEN_THUNKS(glGetCompressedTexImage, (GLenum target, GLint level, void * img), (target, level, img)) +GEN_THUNKS(glGetCompressedTexImageARB, (GLenum target, GLint level, void * img), (target, level, img)) +GEN_THUNKS(glGetCompressedTextureImage, (GLuint texture, GLint level, GLsizei bufSize, void * pixels), (texture, level, bufSize, pixels)) +GEN_THUNKS(glGetCompressedTextureImageEXT, (GLuint texture, GLenum target, GLint lod, void * img), (texture, target, lod, img)) +GEN_THUNKS(glGetCompressedTextureSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels)) +GEN_THUNKS(glGetConvolutionFilter, (GLenum target, GLenum format, GLenum type, void * image), (target, format, type, image)) +GEN_THUNKS(glGetConvolutionFilterEXT, (GLenum target, GLenum format, GLenum type, void * image), (target, format, type, image)) +GEN_THUNKS(glGetConvolutionParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetCoverageModulationTableNV, (GLsizei bufsize, GLfloat * v), (bufsize, v)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLog, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogAMD, (GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message), (count, bufsize, categories, severities, ids, lengths, message)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogARB, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogKHR, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS(glGetDetailTexFuncSGIS, (GLenum target, GLfloat * points), (target, points)) +GEN_THUNKS(glGetDoubleIndexedvEXT, (GLenum target, GLuint index, GLdouble * data), (target, index, data)) +GEN_THUNKS(glGetDoublei_v, (GLenum target, GLuint index, GLdouble * data), (target, index, data)) +GEN_THUNKS(glGetDoublei_vEXT, (GLenum pname, GLuint index, GLdouble * params), (pname, index, params)) +GEN_THUNKS(glGetDoublev, (GLenum pname, GLdouble * data), (pname, data)) +GEN_THUNKS(glGetDriverControlStringQCOM, (GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString), (driverControl, bufSize, length, driverControlString)) +GEN_THUNKS(glGetDriverControlsQCOM, (GLint * num, GLsizei size, GLuint * driverControls), (num, size, driverControls)) +GEN_THUNKS_RET(GLenum, glGetError, (void), ()) +GEN_THUNKS(glGetFenceivNV, (GLuint fence, GLenum pname, GLint * params), (fence, pname, params)) +GEN_THUNKS(glGetFinalCombinerInputParameterfvNV, (GLenum variable, GLenum pname, GLfloat * params), (variable, pname, params)) +GEN_THUNKS(glGetFinalCombinerInputParameterivNV, (GLenum variable, GLenum pname, GLint * params), (variable, pname, params)) +GEN_THUNKS(glGetFirstPerfQueryIdINTEL, (GLuint * queryId), (queryId)) +GEN_THUNKS(glGetFixedv, (GLenum pname, GLfixed * params), (pname, params)) +GEN_THUNKS(glGetFixedvOES, (GLenum pname, GLfixed * params), (pname, params)) +GEN_THUNKS(glGetFloatIndexedvEXT, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloati_v, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloati_vEXT, (GLenum pname, GLuint index, GLfloat * params), (pname, index, params)) +GEN_THUNKS(glGetFloati_vNV, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloatv, (GLenum pname, GLfloat * data), (pname, data)) +GEN_THUNKS(glGetFogFuncSGIS, (GLfloat * points), (points)) +GEN_THUNKS_RET(GLint, glGetFragDataIndex, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataIndexEXT, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataLocationEXT, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glGetFragmentLightfvSGIX, (GLenum light, GLenum pname, GLfloat * params), (light, pname, params)) +GEN_THUNKS(glGetFragmentLightivSGIX, (GLenum light, GLenum pname, GLint * params), (light, pname, params)) +GEN_THUNKS(glGetFragmentMaterialfvSGIX, (GLenum face, GLenum pname, GLfloat * params), (face, pname, params)) +GEN_THUNKS(glGetFragmentMaterialivSGIX, (GLenum face, GLenum pname, GLint * params), (face, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameteriv, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameterivEXT, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameterivOES, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetFramebufferParameterivEXT, (GLuint framebuffer, GLenum pname, GLint * params), (framebuffer, pname, params)) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatus, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusARB, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusEXT, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusKHR, (void), ()) +GEN_THUNKS_RET(GLhandleARB, glGetHandleARB, (GLenum pname), (pname)) +GEN_THUNKS(glGetHistogram, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetHistogramEXT, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetHistogramParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetImageHandleARB, (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format), (texture, level, layered, layer, format)) +GEN_THUNKS_RET(GLuint64, glGetImageHandleNV, (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format), (texture, level, layered, layer, format)) +GEN_THUNKS(glGetImageTransformParameterfvHP, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetImageTransformParameterivHP, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetInfoLogARB, (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog), ((uintptr_t)obj, maxLength, length, infoLog)) +GEN_THUNKS_RET(GLint, glGetInstrumentsSGIX, (void), ()) +GEN_THUNKS(glGetInteger64i_v, (GLenum target, GLuint index, GLint64 * data), (target, index, data)) +GEN_THUNKS(glGetInteger64v, (GLenum pname, GLint64 * data), (pname, data)) +GEN_THUNKS(glGetInteger64vAPPLE, (GLenum pname, GLint64 * params), (pname, params)) +GEN_THUNKS(glGetIntegerIndexedvEXT, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegeri_v, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegeri_vEXT, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegerui64i_vNV, (GLenum value, GLuint index, GLuint64EXT * result), (value, index, result)) +GEN_THUNKS(glGetIntegerui64vNV, (GLenum value, GLuint64EXT * result), (value, result)) +GEN_THUNKS(glGetIntegerv, (GLenum pname, GLint * data), (pname, data)) +GEN_THUNKS(glGetInternalformatSampleivNV, (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params), (target, internalformat, samples, pname, bufSize, params)) +GEN_THUNKS(glGetInternalformati64v, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params), (target, internalformat, pname, bufSize, params)) +GEN_THUNKS(glGetInternalformativ, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params), (target, internalformat, pname, bufSize, params)) +GEN_THUNKS(glGetInvariantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetInvariantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetInvariantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetLightfv, (GLenum light, GLenum pname, GLfloat * params), (light, pname, params)) +GEN_THUNKS(glGetLightiv, (GLenum light, GLenum pname, GLint * params), (light, pname, params)) +GEN_THUNKS(glGetLightxOES, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetLightxv, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetLightxvOES, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetListParameterfvSGIX, (GLuint list, GLenum pname, GLfloat * params), (list, pname, params)) +GEN_THUNKS(glGetListParameterivSGIX, (GLuint list, GLenum pname, GLint * params), (list, pname, params)) +GEN_THUNKS(glGetLocalConstantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetLocalConstantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetLocalConstantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetMapAttribParameterfvNV, (GLenum target, GLuint index, GLenum pname, GLfloat * params), (target, index, pname, params)) +GEN_THUNKS(glGetMapAttribParameterivNV, (GLenum target, GLuint index, GLenum pname, GLint * params), (target, index, pname, params)) +GEN_THUNKS(glGetMapControlPointsNV, (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points), (target, index, type, ustride, vstride, packed, points)) +GEN_THUNKS(glGetMapParameterfvNV, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMapParameterivNV, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMapdv, (GLenum target, GLenum query, GLdouble * v), (target, query, v)) +GEN_THUNKS(glGetMapfv, (GLenum target, GLenum query, GLfloat * v), (target, query, v)) +GEN_THUNKS(glGetMapiv, (GLenum target, GLenum query, GLint * v), (target, query, v)) +GEN_THUNKS(glGetMapxvOES, (GLenum target, GLenum query, GLfixed * v), (target, query, v)) +GEN_THUNKS(glGetMaterialfv, (GLenum face, GLenum pname, GLfloat * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialiv, (GLenum face, GLenum pname, GLint * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialxOES, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glGetMaterialxv, (GLenum face, GLenum pname, GLfixed * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialxvOES, (GLenum face, GLenum pname, GLfixed * params), (face, pname, params)) +GEN_THUNKS(glGetMinmax, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetMinmaxEXT, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetMinmaxParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMultiTexEnvfvEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexEnvivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexGendvEXT, (GLenum texunit, GLenum coord, GLenum pname, GLdouble * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexGenfvEXT, (GLenum texunit, GLenum coord, GLenum pname, GLfloat * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexGenivEXT, (GLenum texunit, GLenum coord, GLenum pname, GLint * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexImageEXT, (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (texunit, target, level, format, type, pixels)) +GEN_THUNKS(glGetMultiTexLevelParameterfvEXT, (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params), (texunit, target, level, pname, params)) +GEN_THUNKS(glGetMultiTexLevelParameterivEXT, (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params), (texunit, target, level, pname, params)) +GEN_THUNKS(glGetMultiTexParameterIivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterIuivEXT, (GLenum texunit, GLenum target, GLenum pname, GLuint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterfvEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultisamplefv, (GLenum pname, GLuint index, GLfloat * val), (pname, index, val)) +GEN_THUNKS(glGetMultisamplefvNV, (GLenum pname, GLuint index, GLfloat * val), (pname, index, val)) +GEN_THUNKS(glGetNamedBufferParameteri64v, (GLuint buffer, GLenum pname, GLint64 * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameteriv, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameterivEXT, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameterui64vNV, (GLuint buffer, GLenum pname, GLuint64EXT * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferPointerv, (GLuint buffer, GLenum pname, void ** params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferPointervEXT, (GLuint buffer, GLenum pname, void ** params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr size, void * data), (buffer, offset, size, data)) +GEN_THUNKS(glGetNamedBufferSubDataEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, void * data), (buffer, offset, size, data)) +GEN_THUNKS(glGetNamedFramebufferAttachmentParameteriv, (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params), (framebuffer, attachment, pname, params)) +GEN_THUNKS(glGetNamedFramebufferAttachmentParameterivEXT, (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params), (framebuffer, attachment, pname, params)) +GEN_THUNKS(glGetNamedFramebufferParameteriv, (GLuint framebuffer, GLenum pname, GLint * param), (framebuffer, pname, param)) +GEN_THUNKS(glGetNamedFramebufferParameterivEXT, (GLuint framebuffer, GLenum pname, GLint * params), (framebuffer, pname, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterIivEXT, (GLuint program, GLenum target, GLuint index, GLint * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterIuivEXT, (GLuint program, GLenum target, GLuint index, GLuint * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterdvEXT, (GLuint program, GLenum target, GLuint index, GLdouble * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterfvEXT, (GLuint program, GLenum target, GLuint index, GLfloat * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramStringEXT, (GLuint program, GLenum target, GLenum pname, void * string), (program, target, pname, string)) +GEN_THUNKS(glGetNamedProgramivEXT, (GLuint program, GLenum target, GLenum pname, GLint * params), (program, target, pname, params)) +GEN_THUNKS(glGetNamedRenderbufferParameteriv, (GLuint renderbuffer, GLenum pname, GLint * params), (renderbuffer, pname, params)) +GEN_THUNKS(glGetNamedRenderbufferParameterivEXT, (GLuint renderbuffer, GLenum pname, GLint * params), (renderbuffer, pname, params)) +GEN_THUNKS(glGetNamedStringARB, (GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string), (namelen, name, bufSize, stringlen, string)) +GEN_THUNKS(glGetNamedStringivARB, (GLint namelen, const GLchar * name, GLenum pname, GLint * params), (namelen, name, pname, params)) +GEN_THUNKS(glGetNextPerfQueryIdINTEL, (GLuint queryId, GLuint * nextQueryId), (queryId, nextQueryId)) +GEN_THUNKS(glGetObjectBufferfvATI, (GLuint buffer, GLenum pname, GLfloat * params), (buffer, pname, params)) +GEN_THUNKS(glGetObjectBufferivATI, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetObjectLabel, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label), (identifier, name, bufSize, length, label)) +GEN_THUNKS(glGetObjectLabelEXT, (GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label), (type, object, bufSize, length, label)) +GEN_THUNKS(glGetObjectLabelKHR, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label), (identifier, name, bufSize, length, label)) +GEN_THUNKS(glGetObjectParameterfvARB, (GLhandleARB obj, GLenum pname, GLfloat * params), ((uintptr_t)obj, pname, params)) +GEN_THUNKS(glGetObjectParameterivAPPLE, (GLenum objectType, GLuint name, GLenum pname, GLint * params), (objectType, name, pname, params)) +GEN_THUNKS(glGetObjectParameterivARB, (GLhandleARB obj, GLenum pname, GLint * params), ((uintptr_t)obj, pname, params)) +GEN_THUNKS(glGetObjectPtrLabel, (const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label), (ptr, bufSize, length, label)) +GEN_THUNKS(glGetObjectPtrLabelKHR, (const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label), (ptr, bufSize, length, label)) +GEN_THUNKS(glGetOcclusionQueryivNV, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetOcclusionQueryuivNV, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetPathColorGenfvNV, (GLenum color, GLenum pname, GLfloat * value), (color, pname, value)) +GEN_THUNKS(glGetPathColorGenivNV, (GLenum color, GLenum pname, GLint * value), (color, pname, value)) +GEN_THUNKS(glGetPathCommandsNV, (GLuint path, GLubyte * commands), (path, commands)) +GEN_THUNKS(glGetPathCoordsNV, (GLuint path, GLfloat * coords), (path, coords)) +GEN_THUNKS(glGetPathDashArrayNV, (GLuint path, GLfloat * dashArray), (path, dashArray)) +GEN_THUNKS_RET(GLfloat, glGetPathLengthNV, (GLuint path, GLsizei startSegment, GLsizei numSegments), (path, startSegment, numSegments)) +GEN_THUNKS(glGetPathMetricRangeNV, (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics), (metricQueryMask, firstPathName, numPaths, stride, metrics)) +GEN_THUNKS(glGetPathMetricsNV, (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics), (metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics)) +GEN_THUNKS(glGetPathParameterfvNV, (GLuint path, GLenum pname, GLfloat * value), (path, pname, value)) +GEN_THUNKS(glGetPathParameterivNV, (GLuint path, GLenum pname, GLint * value), (path, pname, value)) +GEN_THUNKS(glGetPathSpacingNV, (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing), (pathListMode, numPaths, pathNameType, paths, pathBase, advanceScale, kerningScale, transformType, returnedSpacing)) +GEN_THUNKS(glGetPathTexGenfvNV, (GLenum texCoordSet, GLenum pname, GLfloat * value), (texCoordSet, pname, value)) +GEN_THUNKS(glGetPathTexGenivNV, (GLenum texCoordSet, GLenum pname, GLint * value), (texCoordSet, pname, value)) +GEN_THUNKS(glGetPerfCounterInfoINTEL, (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue), (queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue)) +GEN_THUNKS(glGetPerfMonitorCounterDataAMD, (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten), (monitor, pname, dataSize, data, bytesWritten)) +GEN_THUNKS(glGetPerfMonitorCounterInfoAMD, (GLuint group, GLuint counter, GLenum pname, void * data), (group, counter, pname, data)) +GEN_THUNKS(glGetPerfMonitorCounterStringAMD, (GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString), (group, counter, bufSize, length, counterString)) +GEN_THUNKS(glGetPerfMonitorCountersAMD, (GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters), (group, numCounters, maxActiveCounters, counterSize, counters)) +GEN_THUNKS(glGetPerfMonitorGroupStringAMD, (GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString), (group, bufSize, length, groupString)) +GEN_THUNKS(glGetPerfMonitorGroupsAMD, (GLint * numGroups, GLsizei groupsSize, GLuint * groups), (numGroups, groupsSize, groups)) +GEN_THUNKS(glGetPerfQueryDataINTEL, (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten), (queryHandle, flags, dataSize, data, bytesWritten)) +GEN_THUNKS(glGetPerfQueryIdByNameINTEL, (GLchar * queryName, GLuint * queryId), (queryName, queryId)) +GEN_THUNKS(glGetPerfQueryInfoINTEL, (GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask), (queryId, queryNameLength, queryName, dataSize, noCounters, noInstances, capsMask)) +GEN_THUNKS(glGetPixelMapfv, (GLenum map, GLfloat * values), (map, values)) +GEN_THUNKS(glGetPixelMapuiv, (GLenum map, GLuint * values), (map, values)) +GEN_THUNKS(glGetPixelMapusv, (GLenum map, GLushort * values), (map, values)) +GEN_THUNKS(glGetPixelMapxv, (GLenum map, GLint size, GLfixed * values), (map, size, values)) +GEN_THUNKS(glGetPixelTexGenParameterfvSGIS, (GLenum pname, GLfloat * params), (pname, params)) +GEN_THUNKS(glGetPixelTexGenParameterivSGIS, (GLenum pname, GLint * params), (pname, params)) +GEN_THUNKS(glGetPixelTransformParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetPixelTransformParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetPointerIndexedvEXT, (GLenum target, GLuint index, void ** data), (target, index, data)) +GEN_THUNKS(glGetPointeri_vEXT, (GLenum pname, GLuint index, void ** params), (pname, index, params)) +GEN_THUNKS(glGetPointerv, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPointervEXT, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPointervKHR, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPolygonStipple, (GLubyte * mask), (mask)) +GEN_THUNKS(glGetProgramBinary, (GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary), (program, bufSize, length, binaryFormat, binary)) +GEN_THUNKS(glGetProgramBinaryOES, (GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary), (program, bufSize, length, binaryFormat, binary)) +GEN_THUNKS(glGetProgramEnvParameterIivNV, (GLenum target, GLuint index, GLint * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterIuivNV, (GLenum target, GLuint index, GLuint * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterdvARB, (GLenum target, GLuint index, GLdouble * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterfvARB, (GLenum target, GLuint index, GLfloat * params), (target, index, params)) +GEN_THUNKS(glGetProgramInfoLog, (GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (program, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramInterfaceiv, (GLuint program, GLenum programInterface, GLenum pname, GLint * params), (program, programInterface, pname, params)) +GEN_THUNKS(glGetProgramLocalParameterIivNV, (GLenum target, GLuint index, GLint * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterIuivNV, (GLenum target, GLuint index, GLuint * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterdvARB, (GLenum target, GLuint index, GLdouble * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterfvARB, (GLenum target, GLuint index, GLfloat * params), (target, index, params)) +GEN_THUNKS(glGetProgramNamedParameterdvNV, (GLuint id, GLsizei len, const GLubyte * name, GLdouble * params), (id, len, name, params)) +GEN_THUNKS(glGetProgramNamedParameterfvNV, (GLuint id, GLsizei len, const GLubyte * name, GLfloat * params), (id, len, name, params)) +GEN_THUNKS(glGetProgramParameterdvNV, (GLenum target, GLuint index, GLenum pname, GLdouble * params), (target, index, pname, params)) +GEN_THUNKS(glGetProgramParameterfvNV, (GLenum target, GLuint index, GLenum pname, GLfloat * params), (target, index, pname, params)) +GEN_THUNKS(glGetProgramPipelineInfoLog, (GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (pipeline, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (pipeline, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramPipelineiv, (GLuint pipeline, GLenum pname, GLint * params), (pipeline, pname, params)) +GEN_THUNKS(glGetProgramPipelineivEXT, (GLuint pipeline, GLenum pname, GLint * params), (pipeline, pname, params)) +GEN_THUNKS_RET(GLuint, glGetProgramResourceIndex, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocation, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocationIndex, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocationIndexEXT, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS(glGetProgramResourceName, (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name), (program, programInterface, index, bufSize, length, name)) +GEN_THUNKS(glGetProgramResourcefvNV, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params), (program, programInterface, index, propCount, props, bufSize, length, params)) +GEN_THUNKS(glGetProgramResourceiv, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params), (program, programInterface, index, propCount, props, bufSize, length, params)) +GEN_THUNKS(glGetProgramStageiv, (GLuint program, GLenum shadertype, GLenum pname, GLint * values), (program, shadertype, pname, values)) +GEN_THUNKS(glGetProgramStringARB, (GLenum target, GLenum pname, void * string), (target, pname, string)) +GEN_THUNKS(glGetProgramStringNV, (GLuint id, GLenum pname, GLubyte * program), (id, pname, program)) +GEN_THUNKS(glGetProgramSubroutineParameteruivNV, (GLenum target, GLuint index, GLuint * param), (target, index, param)) +GEN_THUNKS(glGetProgramiv, (GLuint program, GLenum pname, GLint * params), (program, pname, params)) +GEN_THUNKS(glGetProgramivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetProgramivNV, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryBufferObjecti64v, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectiv, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectui64v, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectuiv, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryIndexediv, (GLenum target, GLuint index, GLenum pname, GLint * params), (target, index, pname, params)) +GEN_THUNKS(glGetQueryObjecti64v, (GLuint id, GLenum pname, GLint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjecti64vEXT, (GLuint id, GLenum pname, GLint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectiv, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectivARB, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectivEXT, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectui64v, (GLuint id, GLenum pname, GLuint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectui64vEXT, (GLuint id, GLenum pname, GLuint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuiv, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuivARB, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuivEXT, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryiv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetQueryivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetQueryivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameterivOES, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetSamplerParameterIiv, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIivEXT, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIivOES, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuiv, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuivEXT, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuivOES, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterfv, (GLuint sampler, GLenum pname, GLfloat * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameteriv, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSeparableFilter, (GLenum target, GLenum format, GLenum type, void * row, void * column, void * span), (target, format, type, row, column, span)) +GEN_THUNKS(glGetSeparableFilterEXT, (GLenum target, GLenum format, GLenum type, void * row, void * column, void * span), (target, format, type, row, column, span)) +GEN_THUNKS(glGetShaderInfoLog, (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (shader, bufSize, length, infoLog)) +GEN_THUNKS(glGetShaderPrecisionFormat, (GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision), (shadertype, precisiontype, range, precision)) +GEN_THUNKS(glGetShaderSource, (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source), (shader, bufSize, length, source)) +GEN_THUNKS(glGetShaderSourceARB, (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source), ((uintptr_t)obj, maxLength, length, source)) +GEN_THUNKS(glGetShaderiv, (GLuint shader, GLenum pname, GLint * params), (shader, pname, params)) +GEN_THUNKS(glGetSharpenTexFuncSGIS, (GLenum target, GLfloat * points), (target, points)) +GEN_THUNKS_RET(GLushort, glGetStageIndexNV, (GLenum shadertype), (shadertype)) +GEN_THUNKS_RET(const GLubyte *, glGetString, (GLenum name), (name)) +GEN_THUNKS_RET(const GLubyte *, glGetStringi, (GLenum name, GLuint index), (name, index)) +GEN_THUNKS_RET(GLuint, glGetSubroutineIndex, (GLuint program, GLenum shadertype, const GLchar * name), (program, shadertype, name)) +GEN_THUNKS_RET(GLint, glGetSubroutineUniformLocation, (GLuint program, GLenum shadertype, const GLchar * name), (program, shadertype, name)) +GEN_THUNKS(glGetSynciv, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (sync, pname, bufSize, length, values)) +GEN_THUNKS(glGetSyncivAPPLE, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (sync, pname, bufSize, length, values)) +GEN_THUNKS(glGetTexBumpParameterfvATI, (GLenum pname, GLfloat * param), (pname, param)) +GEN_THUNKS(glGetTexBumpParameterivATI, (GLenum pname, GLint * param), (pname, param)) +GEN_THUNKS(glGetTexEnvfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnviv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnvxv, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnvxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexFilterFuncSGIS, (GLenum target, GLenum filter, GLfloat * weights), (target, filter, weights)) +GEN_THUNKS(glGetTexGendv, (GLenum coord, GLenum pname, GLdouble * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenfv, (GLenum coord, GLenum pname, GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenfvOES, (GLenum coord, GLenum pname, GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGeniv, (GLenum coord, GLenum pname, GLint * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenivOES, (GLenum coord, GLenum pname, GLint * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenxvOES, (GLenum coord, GLenum pname, GLfixed * params), (coord, pname, params)) +GEN_THUNKS(glGetTexImage, (GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (target, level, format, type, pixels)) +GEN_THUNKS(glGetTexLevelParameterfv, (GLenum target, GLint level, GLenum pname, GLfloat * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexLevelParameterxvOES, (GLenum target, GLint level, GLenum pname, GLfixed * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexParameterIiv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIivOES, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuiv, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuivEXT, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuivOES, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterPointervAPPLE, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterxv, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetTextureHandleARB, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLuint64, glGetTextureHandleNV, (GLuint texture), (texture)) +GEN_THUNKS(glGetTextureImage, (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (texture, level, format, type, bufSize, pixels)) +GEN_THUNKS(glGetTextureImageEXT, (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (texture, target, level, format, type, pixels)) +GEN_THUNKS(glGetTextureLevelParameterfv, (GLuint texture, GLint level, GLenum pname, GLfloat * params), (texture, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameterfvEXT, (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params), (texture, target, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameteriv, (GLuint texture, GLint level, GLenum pname, GLint * params), (texture, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameterivEXT, (GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params), (texture, target, level, pname, params)) +GEN_THUNKS(glGetTextureParameterIiv, (GLuint texture, GLenum pname, GLint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterIivEXT, (GLuint texture, GLenum target, GLenum pname, GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameterIuiv, (GLuint texture, GLenum pname, GLuint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterIuivEXT, (GLuint texture, GLenum target, GLenum pname, GLuint * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameterfv, (GLuint texture, GLenum pname, GLfloat * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterfvEXT, (GLuint texture, GLenum target, GLenum pname, GLfloat * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameteriv, (GLuint texture, GLenum pname, GLint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterivEXT, (GLuint texture, GLenum target, GLenum pname, GLint * params), (texture, target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetTextureSamplerHandleARB, (GLuint texture, GLuint sampler), (texture, sampler)) +GEN_THUNKS_RET(GLuint64, glGetTextureSamplerHandleNV, (GLuint texture, GLuint sampler), (texture, sampler)) +GEN_THUNKS(glGetTextureSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels)) +GEN_THUNKS(glGetTrackMatrixivNV, (GLenum target, GLuint address, GLenum pname, GLint * params), (target, address, pname, params)) +GEN_THUNKS(glGetTransformFeedbackVarying, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetTransformFeedbackVaryingEXT, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetTransformFeedbackVaryingNV, (GLuint program, GLuint index, GLint * location), (program, index, location)) +GEN_THUNKS(glGetTransformFeedbacki64_v, (GLuint xfb, GLenum pname, GLuint index, GLint64 * param), (xfb, pname, index, param)) +GEN_THUNKS(glGetTransformFeedbacki_v, (GLuint xfb, GLenum pname, GLuint index, GLint * param), (xfb, pname, index, param)) +GEN_THUNKS(glGetTransformFeedbackiv, (GLuint xfb, GLenum pname, GLint * param), (xfb, pname, param)) +GEN_THUNKS(glGetTranslatedShaderSourceANGLE, (GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source), (shader, bufsize, length, source)) +GEN_THUNKS_RET(GLuint, glGetUniformBlockIndex, (GLuint program, const GLchar * uniformBlockName), (program, uniformBlockName)) +GEN_THUNKS_RET(GLint, glGetUniformBufferSizeEXT, (GLuint program, GLint location), (program, location)) +GEN_THUNKS(glGetUniformIndices, (GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices), (program, uniformCount, uniformNames, uniformIndices)) +GEN_THUNKS_RET(GLint, glGetUniformLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetUniformLocationARB, (GLhandleARB programObj, const GLcharARB * name), ((uintptr_t)programObj, name)) +GEN_THUNKS_RET(GLintptr, glGetUniformOffsetEXT, (GLuint program, GLint location), (program, location)) +GEN_THUNKS(glGetUniformSubroutineuiv, (GLenum shadertype, GLint location, GLuint * params), (shadertype, location, params)) +GEN_THUNKS(glGetUniformdv, (GLuint program, GLint location, GLdouble * params), (program, location, params)) +GEN_THUNKS(glGetUniformfv, (GLuint program, GLint location, GLfloat * params), (program, location, params)) +GEN_THUNKS(glGetUniformfvARB, (GLhandleARB programObj, GLint location, GLfloat * params), ((uintptr_t)programObj, location, params)) +GEN_THUNKS(glGetUniformi64vARB, (GLuint program, GLint location, GLint64 * params), (program, location, params)) +GEN_THUNKS(glGetUniformi64vNV, (GLuint program, GLint location, GLint64EXT * params), (program, location, params)) +GEN_THUNKS(glGetUniformiv, (GLuint program, GLint location, GLint * params), (program, location, params)) +GEN_THUNKS(glGetUniformivARB, (GLhandleARB programObj, GLint location, GLint * params), ((uintptr_t)programObj, location, params)) +GEN_THUNKS(glGetUniformui64vARB, (GLuint program, GLint location, GLuint64 * params), (program, location, params)) +GEN_THUNKS(glGetUniformui64vNV, (GLuint program, GLint location, GLuint64EXT * params), (program, location, params)) +GEN_THUNKS(glGetUniformuiv, (GLuint program, GLint location, GLuint * params), (program, location, params)) +GEN_THUNKS(glGetUniformuivEXT, (GLuint program, GLint location, GLuint * params), (program, location, params)) +GEN_THUNKS(glGetVariantArrayObjectfvATI, (GLuint id, GLenum pname, GLfloat * params), (id, pname, params)) +GEN_THUNKS(glGetVariantArrayObjectivATI, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetVariantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetVariantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetVariantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetVariantPointervEXT, (GLuint id, GLenum value, void ** data), (id, value, data)) +GEN_THUNKS_RET(GLint, glGetVaryingLocationNV, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glGetVertexArrayIndexed64iv, (GLuint vaobj, GLuint index, GLenum pname, GLint64 * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIndexediv, (GLuint vaobj, GLuint index, GLenum pname, GLint * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIntegeri_vEXT, (GLuint vaobj, GLuint index, GLenum pname, GLint * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIntegervEXT, (GLuint vaobj, GLenum pname, GLint * param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexArrayPointeri_vEXT, (GLuint vaobj, GLuint index, GLenum pname, void ** param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayPointervEXT, (GLuint vaobj, GLenum pname, void ** param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexArrayiv, (GLuint vaobj, GLenum pname, GLint * param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexAttribArrayObjectfvATI, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribArrayObjectivATI, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIiv, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIivEXT, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIuiv, (GLuint index, GLenum pname, GLuint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIuivEXT, (GLuint index, GLenum pname, GLuint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLdv, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLdvEXT, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLi64vNV, (GLuint index, GLenum pname, GLint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLui64vARB, (GLuint index, GLenum pname, GLuint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLui64vNV, (GLuint index, GLenum pname, GLuint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribPointerv, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribPointervARB, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribPointervNV, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribdv, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribdvARB, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribdvNV, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfv, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfvARB, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfvNV, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribiv, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribivARB, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribivNV, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamdvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamfvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamivNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureivNV, (GLuint video_capture_slot, GLenum pname, GLint * params), (video_capture_slot, pname, params)) +GEN_THUNKS(glGetVideoi64vNV, (GLuint video_slot, GLenum pname, GLint64EXT * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideoivNV, (GLuint video_slot, GLenum pname, GLint * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideoui64vNV, (GLuint video_slot, GLenum pname, GLuint64EXT * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideouivNV, (GLuint video_slot, GLenum pname, GLuint * params), (video_slot, pname, params)) +GEN_THUNKS(glGetnColorTable, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table), (target, format, type, bufSize, table)) +GEN_THUNKS(glGetnColorTableARB, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table), (target, format, type, bufSize, table)) +GEN_THUNKS(glGetnCompressedTexImage, (GLenum target, GLint lod, GLsizei bufSize, void * pixels), (target, lod, bufSize, pixels)) +GEN_THUNKS(glGetnCompressedTexImageARB, (GLenum target, GLint lod, GLsizei bufSize, void * img), (target, lod, bufSize, img)) +GEN_THUNKS(glGetnConvolutionFilter, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image), (target, format, type, bufSize, image)) +GEN_THUNKS(glGetnConvolutionFilterARB, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image), (target, format, type, bufSize, image)) +GEN_THUNKS(glGetnHistogram, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnHistogramARB, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnMapdv, (GLenum target, GLenum query, GLsizei bufSize, GLdouble * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapdvARB, (GLenum target, GLenum query, GLsizei bufSize, GLdouble * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapfv, (GLenum target, GLenum query, GLsizei bufSize, GLfloat * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapfvARB, (GLenum target, GLenum query, GLsizei bufSize, GLfloat * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapiv, (GLenum target, GLenum query, GLsizei bufSize, GLint * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapivARB, (GLenum target, GLenum query, GLsizei bufSize, GLint * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMinmax, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnMinmaxARB, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnPixelMapfv, (GLenum map, GLsizei bufSize, GLfloat * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapfvARB, (GLenum map, GLsizei bufSize, GLfloat * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapuiv, (GLenum map, GLsizei bufSize, GLuint * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapuivARB, (GLenum map, GLsizei bufSize, GLuint * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapusv, (GLenum map, GLsizei bufSize, GLushort * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapusvARB, (GLenum map, GLsizei bufSize, GLushort * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPolygonStipple, (GLsizei bufSize, GLubyte * pattern), (bufSize, pattern)) +GEN_THUNKS(glGetnPolygonStippleARB, (GLsizei bufSize, GLubyte * pattern), (bufSize, pattern)) +GEN_THUNKS(glGetnSeparableFilter, (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span), (target, format, type, rowBufSize, row, columnBufSize, column, span)) +GEN_THUNKS(glGetnSeparableFilterARB, (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span), (target, format, type, rowBufSize, row, columnBufSize, column, span)) +GEN_THUNKS(glGetnTexImage, (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (target, level, format, type, bufSize, pixels)) +GEN_THUNKS(glGetnTexImageARB, (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img), (target, level, format, type, bufSize, img)) +GEN_THUNKS(glGetnUniformdv, (GLuint program, GLint location, GLsizei bufSize, GLdouble * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformdvARB, (GLuint program, GLint location, GLsizei bufSize, GLdouble * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfv, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvARB, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvEXT, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvKHR, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformi64vARB, (GLuint program, GLint location, GLsizei bufSize, GLint64 * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformiv, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivARB, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivEXT, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivKHR, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformui64vARB, (GLuint program, GLint location, GLsizei bufSize, GLuint64 * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuiv, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuivARB, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuivKHR, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGlobalAlphaFactorbSUN, (GLbyte factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactordSUN, (GLdouble factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorfSUN, (GLfloat factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactoriSUN, (GLint factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorsSUN, (GLshort factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorubSUN, (GLubyte factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactoruiSUN, (GLuint factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorusSUN, (GLushort factor), (factor)) +GEN_THUNKS(glHint, (GLenum target, GLenum mode), (target, mode)) +GEN_THUNKS(glHintPGI, (GLenum target, GLint mode), (target, mode)) +GEN_THUNKS(glHistogram, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target, width, internalformat, sink)) +GEN_THUNKS(glHistogramEXT, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target, width, internalformat, sink)) +GEN_THUNKS(glIglooInterfaceSGIX, (GLenum pname, const void * params), (pname, params)) +GEN_THUNKS(glImageTransformParameterfHP, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glImageTransformParameterfvHP, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glImageTransformParameteriHP, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glImageTransformParameterivHP, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS_RET(GLsync, glImportSyncEXT, (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags), (external_sync_type, external_sync, flags)) +GEN_THUNKS(glIndexFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glIndexFuncEXT, (GLenum func, GLclampf ref), (func, ref)) +GEN_THUNKS(glIndexMask, (GLuint mask), (mask)) +GEN_THUNKS(glIndexMaterialEXT, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glIndexPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glIndexPointerEXT, (GLenum type, GLsizei stride, GLsizei count, const void * pointer), (type, stride, count, pointer)) +GEN_THUNKS(glIndexPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glIndexd, (GLdouble c), (c)) +GEN_THUNKS(glIndexdv, (const GLdouble * c), (c)) +GEN_THUNKS(glIndexf, (GLfloat c), (c)) +GEN_THUNKS(glIndexfv, (const GLfloat * c), (c)) +GEN_THUNKS(glIndexi, (GLint c), (c)) +GEN_THUNKS(glIndexiv, (const GLint * c), (c)) +GEN_THUNKS(glIndexs, (GLshort c), (c)) +GEN_THUNKS(glIndexsv, (const GLshort * c), (c)) +GEN_THUNKS(glIndexub, (GLubyte c), (c)) +GEN_THUNKS(glIndexubv, (const GLubyte * c), (c)) +GEN_THUNKS(glIndexxOES, (GLfixed component), (component)) +GEN_THUNKS(glIndexxvOES, (const GLfixed * component), (component)) +GEN_THUNKS(glInitNames, (void), ()) +GEN_THUNKS(glInsertComponentEXT, (GLuint res, GLuint src, GLuint num), (res, src, num)) +GEN_THUNKS(glInsertEventMarkerEXT, (GLsizei length, const GLchar * marker), (length, marker)) +GEN_THUNKS(glInstrumentsBufferSGIX, (GLsizei size, GLint * buffer), (size, buffer)) +GEN_THUNKS(glInterleavedArrays, (GLenum format, GLsizei stride, const void * pointer), (format, stride, pointer)) +GEN_THUNKS(glInterpolatePathsNV, (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight), (resultPath, pathA, pathB, weight)) +GEN_THUNKS(glInvalidateBufferData, (GLuint buffer), (buffer)) +GEN_THUNKS(glInvalidateBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glInvalidateFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum * attachments), (target, numAttachments, attachments)) +GEN_THUNKS(glInvalidateNamedFramebufferData, (GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments), (framebuffer, numAttachments, attachments)) +GEN_THUNKS(glInvalidateNamedFramebufferSubData, (GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height), (framebuffer, numAttachments, attachments, x, y, width, height)) +GEN_THUNKS(glInvalidateSubFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height), (target, numAttachments, attachments, x, y, width, height)) +GEN_THUNKS(glInvalidateTexImage, (GLuint texture, GLint level), (texture, level)) +GEN_THUNKS(glInvalidateTexSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth), (texture, level, xoffset, yoffset, zoffset, width, height, depth)) +GEN_THUNKS_RET(GLboolean, glIsAsyncMarkerSGIX, (GLuint marker), (marker)) +GEN_THUNKS_RET(GLboolean, glIsBuffer, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsBufferARB, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsBufferResidentNV, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glIsCommandListNV, (GLuint list), (list)) +GEN_THUNKS_RET(GLboolean, glIsEnabled, (GLenum cap), (cap)) +GEN_THUNKS_RET(GLboolean, glIsEnabledIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnabledi, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glIsFenceNV, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glIsFramebuffer, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsFramebufferEXT, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsFramebufferOES, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsImageHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsImageHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsList, (GLuint list), (list)) +GEN_THUNKS_RET(GLboolean, glIsNameAMD, (GLenum identifier, GLuint name), (identifier, name)) +GEN_THUNKS_RET(GLboolean, glIsNamedBufferResidentNV, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsNamedStringARB, (GLint namelen, const GLchar * name), (namelen, name)) +GEN_THUNKS_RET(GLboolean, glIsObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsOcclusionQueryNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsPathNV, (GLuint path), (path)) +GEN_THUNKS_RET(GLboolean, glIsPointInFillPathNV, (GLuint path, GLuint mask, GLfloat x, GLfloat y), (path, mask, x, y)) +GEN_THUNKS_RET(GLboolean, glIsPointInStrokePathNV, (GLuint path, GLfloat x, GLfloat y), (path, x, y)) +GEN_THUNKS_RET(GLboolean, glIsProgram, (GLuint program), (program)) +GEN_THUNKS_RET(GLboolean, glIsProgramARB, (GLuint program), (program)) +GEN_THUNKS_RET(GLboolean, glIsProgramNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS_RET(GLboolean, glIsProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS_RET(GLboolean, glIsQuery, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsQueryARB, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsQueryEXT, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsRenderbuffer, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsRenderbufferEXT, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsRenderbufferOES, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsSampler, (GLuint sampler), (sampler)) +GEN_THUNKS_RET(GLboolean, glIsShader, (GLuint shader), (shader)) +GEN_THUNKS_RET(GLboolean, glIsStateNV, (GLuint state), (state)) +GEN_THUNKS_RET(GLboolean, glIsSync, (GLsync sync), (sync)) +GEN_THUNKS_RET(GLboolean, glIsSyncAPPLE, (GLsync sync), (sync)) +GEN_THUNKS_RET(GLboolean, glIsTexture, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLboolean, glIsTextureEXT, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLboolean, glIsTextureHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsTextureHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsTransformFeedback, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsTransformFeedbackNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsVariantEnabledEXT, (GLuint id, GLenum cap), (id, cap)) +GEN_THUNKS_RET(GLboolean, glIsVertexArray, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexArrayAPPLE, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexArrayOES, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexAttribEnabledAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glLabelObjectEXT, (GLenum type, GLuint object, GLsizei length, const GLchar * label), (type, object, length, label)) +GEN_THUNKS(glLightEnviSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glLightModelf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glLightModelfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glLightModeli, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glLightModeliv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glLightModelx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glLightModelxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glLightModelxv, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glLightModelxvOES, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glLightf, (GLenum light, GLenum pname, GLfloat param), (light, pname, param)) +GEN_THUNKS(glLightfv, (GLenum light, GLenum pname, const GLfloat * params), (light, pname, params)) +GEN_THUNKS(glLighti, (GLenum light, GLenum pname, GLint param), (light, pname, param)) +GEN_THUNKS(glLightiv, (GLenum light, GLenum pname, const GLint * params), (light, pname, params)) +GEN_THUNKS(glLightx, (GLenum light, GLenum pname, GLfixed param), (light, pname, param)) +GEN_THUNKS(glLightxOES, (GLenum light, GLenum pname, GLfixed param), (light, pname, param)) +GEN_THUNKS(glLightxv, (GLenum light, GLenum pname, const GLfixed * params), (light, pname, params)) +GEN_THUNKS(glLightxvOES, (GLenum light, GLenum pname, const GLfixed * params), (light, pname, params)) +GEN_THUNKS(glLineStipple, (GLint factor, GLushort pattern), (factor, pattern)) +GEN_THUNKS(glLineWidth, (GLfloat width), (width)) +GEN_THUNKS(glLineWidthx, (GLfixed width), (width)) +GEN_THUNKS(glLineWidthxOES, (GLfixed width), (width)) +GEN_THUNKS(glLinkProgram, (GLuint program), (program)) +GEN_THUNKS(glLinkProgramARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glListBase, (GLuint base), (base)) +GEN_THUNKS(glListDrawCommandsStatesClientNV, (GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (list, segment, indirects, sizes, states, fbos, count)) +GEN_THUNKS(glListParameterfSGIX, (GLuint list, GLenum pname, GLfloat param), (list, pname, param)) +GEN_THUNKS(glListParameterfvSGIX, (GLuint list, GLenum pname, const GLfloat * params), (list, pname, params)) +GEN_THUNKS(glListParameteriSGIX, (GLuint list, GLenum pname, GLint param), (list, pname, param)) +GEN_THUNKS(glListParameterivSGIX, (GLuint list, GLenum pname, const GLint * params), (list, pname, params)) +GEN_THUNKS(glLoadIdentity, (void), ()) +GEN_THUNKS(glLoadIdentityDeformationMapSGIX, (GLbitfield mask), (mask)) +GEN_THUNKS(glLoadMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadMatrixx, (const GLfixed * m), (m)) +GEN_THUNKS(glLoadMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glLoadName, (GLuint name), (name)) +GEN_THUNKS(glLoadPaletteFromModelViewMatrixOES, (void), ()) +GEN_THUNKS(glLoadProgramNV, (GLenum target, GLuint id, GLsizei len, const GLubyte * program), (target, id, len, program)) +GEN_THUNKS(glLoadTransposeMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixdARB, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixfARB, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glLockArraysEXT, (GLint first, GLsizei count), (first, count)) +GEN_THUNKS(glLogicOp, (GLenum opcode), (opcode)) +GEN_THUNKS(glMakeBufferNonResidentNV, (GLenum target), (target)) +GEN_THUNKS(glMakeBufferResidentNV, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS(glMakeImageHandleNonResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeImageHandleNonResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeImageHandleResidentARB, (GLuint64 handle, GLenum access), (handle, access)) +GEN_THUNKS(glMakeImageHandleResidentNV, (GLuint64 handle, GLenum access), (handle, access)) +GEN_THUNKS(glMakeNamedBufferNonResidentNV, (GLuint buffer), (buffer)) +GEN_THUNKS(glMakeNamedBufferResidentNV, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS(glMakeTextureHandleNonResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleNonResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMap1d, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap1f, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap1xOES, (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap2d, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMap2f, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMap2xOES, (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS_RET(void *, glMapBuffer, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferARB, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferOES, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access), (target, offset, length, access)) +GEN_THUNKS_RET(void *, glMapBufferRangeEXT, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access), (target, offset, length, access)) +GEN_THUNKS(glMapControlPointsNV, (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points), (target, index, type, ustride, vstride, uorder, vorder, packed, points)) +GEN_THUNKS(glMapGrid1d, (GLint un, GLdouble u1, GLdouble u2), (un, u1, u2)) +GEN_THUNKS(glMapGrid1f, (GLint un, GLfloat u1, GLfloat u2), (un, u1, u2)) +GEN_THUNKS(glMapGrid1xOES, (GLint n, GLfixed u1, GLfixed u2), (n, u1, u2)) +GEN_THUNKS(glMapGrid2d, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2), (un, u1, u2, vn, v1, v2)) +GEN_THUNKS(glMapGrid2f, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2), (un, u1, u2, vn, v1, v2)) +GEN_THUNKS(glMapGrid2xOES, (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2), (n, u1, u2, v1, v2)) +GEN_THUNKS_RET(void *, glMapNamedBuffer, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferEXT, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferRange, (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access), (buffer, offset, length, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferRangeEXT, (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access), (buffer, offset, length, access)) +GEN_THUNKS_RET(void *, glMapObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glMapParameterfvNV, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glMapParameterivNV, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS_RET(void *, glMapTexture2DINTEL, (GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout), (texture, level, access, stride, layout)) +GEN_THUNKS(glMapVertexAttrib1dAPPLE, (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points), (index, size, u1, u2, stride, order, points)) +GEN_THUNKS(glMapVertexAttrib1fAPPLE, (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points), (index, size, u1, u2, stride, order, points)) +GEN_THUNKS(glMapVertexAttrib2dAPPLE, (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMapVertexAttrib2fAPPLE, (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMaterialf, (GLenum face, GLenum pname, GLfloat param), (face, pname, param)) +GEN_THUNKS(glMaterialfv, (GLenum face, GLenum pname, const GLfloat * params), (face, pname, params)) +GEN_THUNKS(glMateriali, (GLenum face, GLenum pname, GLint param), (face, pname, param)) +GEN_THUNKS(glMaterialiv, (GLenum face, GLenum pname, const GLint * params), (face, pname, params)) +GEN_THUNKS(glMaterialx, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glMaterialxOES, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glMaterialxv, (GLenum face, GLenum pname, const GLfixed * param), (face, pname, param)) +GEN_THUNKS(glMaterialxvOES, (GLenum face, GLenum pname, const GLfixed * param), (face, pname, param)) +GEN_THUNKS(glMatrixFrustumEXT, (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (mode, left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glMatrixIndexPointerARB, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glMatrixIndexPointerOES, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glMatrixIndexubvARB, (GLint size, const GLubyte * indices), (size, indices)) +GEN_THUNKS(glMatrixIndexuivARB, (GLint size, const GLuint * indices), (size, indices)) +GEN_THUNKS(glMatrixIndexusvARB, (GLint size, const GLushort * indices), (size, indices)) +GEN_THUNKS(glMatrixLoad3x2fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoad3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoadIdentityEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixLoadTranspose3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoadTransposedEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixLoadTransposefEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixLoaddEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixLoadfEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixMode, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixMult3x2fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMult3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMultTranspose3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMultTransposedEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixMultTransposefEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixMultdEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixMultfEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixOrthoEXT, (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (mode, left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glMatrixPopEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixPushEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixRotatedEXT, (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (mode, angle, x, y, z)) +GEN_THUNKS(glMatrixRotatefEXT, (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (mode, angle, x, y, z)) +GEN_THUNKS(glMatrixScaledEXT, (GLenum mode, GLdouble x, GLdouble y, GLdouble z), (mode, x, y, z)) +GEN_THUNKS(glMatrixScalefEXT, (GLenum mode, GLfloat x, GLfloat y, GLfloat z), (mode, x, y, z)) +GEN_THUNKS(glMatrixTranslatedEXT, (GLenum mode, GLdouble x, GLdouble y, GLdouble z), (mode, x, y, z)) +GEN_THUNKS(glMatrixTranslatefEXT, (GLenum mode, GLfloat x, GLfloat y, GLfloat z), (mode, x, y, z)) +GEN_THUNKS(glMaxShaderCompilerThreadsARB, (GLuint count), (count)) +GEN_THUNKS(glMemoryBarrier, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMemoryBarrierByRegion, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMemoryBarrierEXT, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMinSampleShading, (GLfloat value), (value)) +GEN_THUNKS(glMinSampleShadingARB, (GLfloat value), (value)) +GEN_THUNKS(glMinSampleShadingOES, (GLfloat value), (value)) +GEN_THUNKS(glMinmax, (GLenum target, GLenum internalformat, GLboolean sink), (target, internalformat, sink)) +GEN_THUNKS(glMinmaxEXT, (GLenum target, GLenum internalformat, GLboolean sink), (target, internalformat, sink)) +GEN_THUNKS(glMultMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glMultMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glMultMatrixx, (const GLfixed * m), (m)) +GEN_THUNKS(glMultMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glMultTransposeMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glMultTransposeMatrixdARB, (const GLdouble * m), (m)) +GEN_THUNKS(glMultTransposeMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glMultTransposeMatrixfARB, (const GLfloat * m), (m)) +GEN_THUNKS(glMultTransposeMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glMultiDrawArrays, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount), (mode, first, count, drawcount)) +GEN_THUNKS(glMultiDrawArraysEXT, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glMultiDrawArraysIndirect, (GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectAMD, (GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride), (mode, indirect, primcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectBindlessCountNV, (GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount), (mode, indirect, drawCount, maxDrawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawArraysIndirectBindlessNV, (GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount), (mode, indirect, drawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawArraysIndirectCountARB, (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride), (mode, indirect, drawcount, maxdrawcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectEXT, (GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawElementArrayAPPLE, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glMultiDrawElements, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount), (mode, count, type, indices, drawcount)) +GEN_THUNKS(glMultiDrawElementsBaseVertex, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex), (mode, count, type, indices, drawcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsBaseVertexEXT, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex), (mode, count, type, indices, primcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsBaseVertexOES, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex), (mode, count, type, indices, primcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsEXT, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glMultiDrawElementsIndirect, (GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, type, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectAMD, (GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride), (mode, type, indirect, primcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectBindlessCountNV, (GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount), (mode, type, indirect, drawCount, maxDrawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawElementsIndirectBindlessNV, (GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount), (mode, type, indirect, drawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawElementsIndirectCountARB, (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride), (mode, type, indirect, drawcount, maxdrawcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectEXT, (GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, type, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawRangeElementArrayAPPLE, (GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, start, end, first, count, primcount)) +GEN_THUNKS(glMultiModeDrawArraysIBM, (const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride), (mode, first, count, primcount, modestride)) +GEN_THUNKS(glMultiModeDrawElementsIBM, (const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride), (mode, count, type, indices, primcount, modestride)) +GEN_THUNKS(glMultiTexBufferEXT, (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer), (texunit, target, internalformat, buffer)) +GEN_THUNKS(glMultiTexCoord1bOES, (GLenum texture, GLbyte s), (texture, s)) +GEN_THUNKS(glMultiTexCoord1bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord1d, (GLenum target, GLdouble s), (target, s)) +GEN_THUNKS(glMultiTexCoord1dARB, (GLenum target, GLdouble s), (target, s)) +GEN_THUNKS(glMultiTexCoord1dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1f, (GLenum target, GLfloat s), (target, s)) +GEN_THUNKS(glMultiTexCoord1fARB, (GLenum target, GLfloat s), (target, s)) +GEN_THUNKS(glMultiTexCoord1fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1hNV, (GLenum target, GLhalfNV s), (target, s)) +GEN_THUNKS(glMultiTexCoord1hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1i, (GLenum target, GLint s), (target, s)) +GEN_THUNKS(glMultiTexCoord1iARB, (GLenum target, GLint s), (target, s)) +GEN_THUNKS(glMultiTexCoord1iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1s, (GLenum target, GLshort s), (target, s)) +GEN_THUNKS(glMultiTexCoord1sARB, (GLenum target, GLshort s), (target, s)) +GEN_THUNKS(glMultiTexCoord1sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1xOES, (GLenum texture, GLfixed s), (texture, s)) +GEN_THUNKS(glMultiTexCoord1xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord2bOES, (GLenum texture, GLbyte s, GLbyte t), (texture, s, t)) +GEN_THUNKS(glMultiTexCoord2bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord2d, (GLenum target, GLdouble s, GLdouble t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2dARB, (GLenum target, GLdouble s, GLdouble t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2f, (GLenum target, GLfloat s, GLfloat t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2fARB, (GLenum target, GLfloat s, GLfloat t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2hNV, (GLenum target, GLhalfNV s, GLhalfNV t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2i, (GLenum target, GLint s, GLint t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2iARB, (GLenum target, GLint s, GLint t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2s, (GLenum target, GLshort s, GLshort t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2sARB, (GLenum target, GLshort s, GLshort t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2xOES, (GLenum texture, GLfixed s, GLfixed t), (texture, s, t)) +GEN_THUNKS(glMultiTexCoord2xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord3bOES, (GLenum texture, GLbyte s, GLbyte t, GLbyte r), (texture, s, t, r)) +GEN_THUNKS(glMultiTexCoord3bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord3d, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3dARB, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3f, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3fARB, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3hNV, (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3i, (GLenum target, GLint s, GLint t, GLint r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3iARB, (GLenum target, GLint s, GLint t, GLint r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3s, (GLenum target, GLshort s, GLshort t, GLshort r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3sARB, (GLenum target, GLshort s, GLshort t, GLshort r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3xOES, (GLenum texture, GLfixed s, GLfixed t, GLfixed r), (texture, s, t, r)) +GEN_THUNKS(glMultiTexCoord3xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord4bOES, (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord4d, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4dARB, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4f, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4fARB, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4hNV, (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4i, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4iARB, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4s, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4sARB, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4x, (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4xOES, (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoordP1ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP1uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP2ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP2uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP3ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP3uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP4ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP4uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordPointerEXT, (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer), (texunit, size, type, stride, pointer)) +GEN_THUNKS(glMultiTexEnvfEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexEnvfvEXT, (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexEnviEXT, (GLenum texunit, GLenum target, GLenum pname, GLint param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexEnvivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexGendEXT, (GLenum texunit, GLenum coord, GLenum pname, GLdouble param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGendvEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexGenfEXT, (GLenum texunit, GLenum coord, GLenum pname, GLfloat param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGenfvEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexGeniEXT, (GLenum texunit, GLenum coord, GLenum pname, GLint param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGenivEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLint * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glMultiTexImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glMultiTexParameterIivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameterIuivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLuint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameterfEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexParameterfvEXT, (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameteriEXT, (GLenum texunit, GLenum target, GLenum pname, GLint param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexParameterivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexRenderbufferEXT, (GLenum texunit, GLenum target, GLuint renderbuffer), (texunit, target, renderbuffer)) +GEN_THUNKS(glMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glNamedBufferData, (GLuint buffer, GLsizeiptr size, const void * data, GLenum usage), (buffer, size, data, usage)) +GEN_THUNKS(glNamedBufferDataEXT, (GLuint buffer, GLsizeiptr size, const void * data, GLenum usage), (buffer, size, data, usage)) +GEN_THUNKS(glNamedBufferPageCommitmentARB, (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit), (buffer, offset, size, commit)) +GEN_THUNKS(glNamedBufferPageCommitmentEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit), (buffer, offset, size, commit)) +GEN_THUNKS(glNamedBufferStorage, (GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags), (buffer, size, data, flags)) +GEN_THUNKS(glNamedBufferStorageEXT, (GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags), (buffer, size, data, flags)) +GEN_THUNKS(glNamedBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data), (buffer, offset, size, data)) +GEN_THUNKS(glNamedBufferSubDataEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data), (buffer, offset, size, data)) +GEN_THUNKS(glNamedCopyBufferSubDataEXT, (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS(glNamedFramebufferDrawBuffer, (GLuint framebuffer, GLenum buf), (framebuffer, buf)) +GEN_THUNKS(glNamedFramebufferDrawBuffers, (GLuint framebuffer, GLsizei n, const GLenum * bufs), (framebuffer, n, bufs)) +GEN_THUNKS(glNamedFramebufferParameteri, (GLuint framebuffer, GLenum pname, GLint param), (framebuffer, pname, param)) +GEN_THUNKS(glNamedFramebufferParameteriEXT, (GLuint framebuffer, GLenum pname, GLint param), (framebuffer, pname, param)) +GEN_THUNKS(glNamedFramebufferReadBuffer, (GLuint framebuffer, GLenum src), (framebuffer, src)) +GEN_THUNKS(glNamedFramebufferRenderbuffer, (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (framebuffer, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glNamedFramebufferRenderbufferEXT, (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (framebuffer, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glNamedFramebufferSampleLocationsfvARB, (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v), (framebuffer, start, count, v)) +GEN_THUNKS(glNamedFramebufferSampleLocationsfvNV, (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v), (framebuffer, start, count, v)) +GEN_THUNKS(glNamedFramebufferTexture, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level), (framebuffer, attachment, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture1DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (framebuffer, attachment, textarget, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture2DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (framebuffer, attachment, textarget, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture3DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (framebuffer, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glNamedFramebufferTextureEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level), (framebuffer, attachment, texture, level)) +GEN_THUNKS(glNamedFramebufferTextureFaceEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face), (framebuffer, attachment, texture, level, face)) +GEN_THUNKS(glNamedFramebufferTextureLayer, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer), (framebuffer, attachment, texture, level, layer)) +GEN_THUNKS(glNamedFramebufferTextureLayerEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer), (framebuffer, attachment, texture, level, layer)) +GEN_THUNKS(glNamedProgramLocalParameter4dEXT, (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameter4dvEXT, (GLuint program, GLenum target, GLuint index, const GLdouble * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameter4fEXT, (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameter4fvEXT, (GLuint program, GLenum target, GLuint index, const GLfloat * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameterI4iEXT, (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameterI4ivEXT, (GLuint program, GLenum target, GLuint index, const GLint * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameterI4uiEXT, (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameterI4uivEXT, (GLuint program, GLenum target, GLuint index, const GLuint * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameters4fvEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramLocalParametersI4ivEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramLocalParametersI4uivEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramStringEXT, (GLuint program, GLenum target, GLenum format, GLsizei len, const void * string), (program, target, format, len, string)) +GEN_THUNKS(glNamedRenderbufferStorage, (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageEXT, (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisample, (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, samples, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisampleCoverageEXT, (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, coverageSamples, colorSamples, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisampleEXT, (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, samples, internalformat, width, height)) +GEN_THUNKS(glNamedStringARB, (GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string), (type, namelen, name, stringlen, string)) +GEN_THUNKS(glNewList, (GLuint list, GLenum mode), (list, mode)) +GEN_THUNKS_RET(GLuint, glNewObjectBufferATI, (GLsizei size, const void * pointer, GLenum usage), (size, pointer, usage)) +GEN_THUNKS(glNormal3b, (GLbyte nx, GLbyte ny, GLbyte nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glNormal3d, (GLdouble nx, GLdouble ny, GLdouble nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glNormal3f, (GLfloat nx, GLfloat ny, GLfloat nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3fVertex3fSUN, (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (nx, ny, nz, x, y, z)) +GEN_THUNKS(glNormal3fVertex3fvSUN, (const GLfloat * n, const GLfloat * v), (n, v)) +GEN_THUNKS(glNormal3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glNormal3hNV, (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glNormal3i, (GLint nx, GLint ny, GLint nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3iv, (const GLint * v), (v)) +GEN_THUNKS(glNormal3s, (GLshort nx, GLshort ny, GLshort nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3sv, (const GLshort * v), (v)) +GEN_THUNKS(glNormal3x, (GLfixed nx, GLfixed ny, GLfixed nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3xOES, (GLfixed nx, GLfixed ny, GLfixed nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glNormalFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glNormalP3ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glNormalP3uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glNormalPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glNormalPointerEXT, (GLenum type, GLsizei stride, GLsizei count, const void * pointer), (type, stride, count, pointer)) +GEN_THUNKS(glNormalPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glNormalPointervINTEL, (GLenum type, const void ** pointer), (type, pointer)) +GEN_THUNKS(glNormalStream3bATI, (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3bvATI, (GLenum stream, const GLbyte * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3dATI, (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3fATI, (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3iATI, (GLenum stream, GLint nx, GLint ny, GLint nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3sATI, (GLenum stream, GLshort nx, GLshort ny, GLshort nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glObjectLabel, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label), (identifier, name, length, label)) +GEN_THUNKS(glObjectLabelKHR, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label), (identifier, name, length, label)) +GEN_THUNKS(glObjectPtrLabel, (const void * ptr, GLsizei length, const GLchar * label), (ptr, length, label)) +GEN_THUNKS(glObjectPtrLabelKHR, (const void * ptr, GLsizei length, const GLchar * label), (ptr, length, label)) +GEN_THUNKS_RET(GLenum, glObjectPurgeableAPPLE, (GLenum objectType, GLuint name, GLenum option), (objectType, name, option)) +GEN_THUNKS_RET(GLenum, glObjectUnpurgeableAPPLE, (GLenum objectType, GLuint name, GLenum option), (objectType, name, option)) +GEN_THUNKS(glOrtho, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glOrthof, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthofOES, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthox, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthoxOES, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glPNTrianglesfATI, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPNTrianglesiATI, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPassTexCoordATI, (GLuint dst, GLuint coord, GLenum swizzle), (dst, coord, swizzle)) +GEN_THUNKS(glPassThrough, (GLfloat token), (token)) +GEN_THUNKS(glPassThroughxOES, (GLfixed token), (token)) +GEN_THUNKS(glPatchParameterfv, (GLenum pname, const GLfloat * values), (pname, values)) +GEN_THUNKS(glPatchParameteri, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPatchParameteriEXT, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPatchParameteriOES, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPathColorGenNV, (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs), (color, genMode, colorFormat, coeffs)) +GEN_THUNKS(glPathCommandsNV, (GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords), (path, numCommands, commands, numCoords, coordType, coords)) +GEN_THUNKS(glPathCoordsNV, (GLuint path, GLsizei numCoords, GLenum coordType, const void * coords), (path, numCoords, coordType, coords)) +GEN_THUNKS(glPathCoverDepthFuncNV, (GLenum func), (func)) +GEN_THUNKS(glPathDashArrayNV, (GLuint path, GLsizei dashCount, const GLfloat * dashArray), (path, dashCount, dashArray)) +GEN_THUNKS(glPathFogGenNV, (GLenum genMode), (genMode)) +GEN_THUNKS_RET(GLenum, glPathGlyphIndexArrayNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS_RET(GLenum, glPathGlyphIndexRangeNV, (GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount), (fontTarget, fontName, fontStyle, pathParameterTemplate, emScale, baseAndCount)) +GEN_THUNKS(glPathGlyphRangeNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS(glPathGlyphsNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, numGlyphs, type, charcodes, handleMissingGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS_RET(GLenum, glPathMemoryGlyphIndexArrayNV, (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontSize, fontData, faceIndex, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS(glPathParameterfNV, (GLuint path, GLenum pname, GLfloat value), (path, pname, value)) +GEN_THUNKS(glPathParameterfvNV, (GLuint path, GLenum pname, const GLfloat * value), (path, pname, value)) +GEN_THUNKS(glPathParameteriNV, (GLuint path, GLenum pname, GLint value), (path, pname, value)) +GEN_THUNKS(glPathParameterivNV, (GLuint path, GLenum pname, const GLint * value), (path, pname, value)) +GEN_THUNKS(glPathStencilDepthOffsetNV, (GLfloat factor, GLfloat units), (factor, units)) +GEN_THUNKS(glPathStencilFuncNV, (GLenum func, GLint ref, GLuint mask), (func, ref, mask)) +GEN_THUNKS(glPathStringNV, (GLuint path, GLenum format, GLsizei length, const void * pathString), (path, format, length, pathString)) +GEN_THUNKS(glPathSubCommandsNV, (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords), (path, commandStart, commandsToDelete, numCommands, commands, numCoords, coordType, coords)) +GEN_THUNKS(glPathSubCoordsNV, (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords), (path, coordStart, numCoords, coordType, coords)) +GEN_THUNKS(glPathTexGenNV, (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs), (texCoordSet, genMode, components, coeffs)) +GEN_THUNKS(glPauseTransformFeedback, (void), ()) +GEN_THUNKS(glPauseTransformFeedbackNV, (void), ()) +GEN_THUNKS(glPixelDataRangeNV, (GLenum target, GLsizei length, const void * pointer), (target, length, pointer)) +GEN_THUNKS(glPixelMapfv, (GLenum map, GLsizei mapsize, const GLfloat * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapuiv, (GLenum map, GLsizei mapsize, const GLuint * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapusv, (GLenum map, GLsizei mapsize, const GLushort * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapx, (GLenum map, GLint size, const GLfixed * values), (map, size, values)) +GEN_THUNKS(glPixelStoref, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelStorei, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelStorex, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterfSGIS, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterfvSGIS, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPixelTexGenParameteriSGIS, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterivSGIS, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPixelTexGenSGIX, (GLenum mode), (mode)) +GEN_THUNKS(glPixelTransferf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelTransferi, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelTransferxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPixelTransformParameterfEXT, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glPixelTransformParameterfvEXT, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glPixelTransformParameteriEXT, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glPixelTransformParameterivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glPixelZoom, (GLfloat xfactor, GLfloat yfactor), (xfactor, yfactor)) +GEN_THUNKS(glPixelZoomxOES, (GLfixed xfactor, GLfixed yfactor), (xfactor, yfactor)) +GEN_THUNKS_RET(GLboolean, glPointAlongPathNV, (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY), (path, startSegment, numSegments, distance, x, y, tangentX, tangentY)) +GEN_THUNKS(glPointParameterf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfARB, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfEXT, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfSGIS, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvARB, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvEXT, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvSGIS, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameteri, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPointParameteriNV, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPointParameteriv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPointParameterivNV, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPointParameterx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPointParameterxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPointParameterxv, (GLenum pname, const GLfixed * params), (pname, params)) +GEN_THUNKS(glPointParameterxvOES, (GLenum pname, const GLfixed * params), (pname, params)) +GEN_THUNKS(glPointSize, (GLfloat size), (size)) +GEN_THUNKS(glPointSizePointerOES, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glPointSizex, (GLfixed size), (size)) +GEN_THUNKS(glPointSizexOES, (GLfixed size), (size)) +GEN_THUNKS_RET(GLint, glPollAsyncSGIX, (GLuint * markerp), (markerp)) +GEN_THUNKS_RET(GLint, glPollInstrumentsSGIX, (GLint * marker_p), (marker_p)) +GEN_THUNKS(glPolygonMode, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glPolygonModeNV, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glPolygonOffset, (GLfloat factor, GLfloat units), (factor, units)) +GEN_THUNKS(glPolygonOffsetClampEXT, (GLfloat factor, GLfloat units, GLfloat clamp), (factor, units, clamp)) +GEN_THUNKS(glPolygonOffsetEXT, (GLfloat factor, GLfloat bias), (factor, bias)) +GEN_THUNKS(glPolygonOffsetx, (GLfixed factor, GLfixed units), (factor, units)) +GEN_THUNKS(glPolygonOffsetxOES, (GLfixed factor, GLfixed units), (factor, units)) +GEN_THUNKS(glPolygonStipple, (const GLubyte * mask), (mask)) +GEN_THUNKS(glPopAttrib, (void), ()) +GEN_THUNKS(glPopClientAttrib, (void), ()) +GEN_THUNKS(glPopDebugGroup, (void), ()) +GEN_THUNKS(glPopDebugGroupKHR, (void), ()) +GEN_THUNKS(glPopGroupMarkerEXT, (void), ()) +GEN_THUNKS(glPopMatrix, (void), ()) +GEN_THUNKS(glPopName, (void), ()) +GEN_THUNKS(glPresentFrameDualFillNV, (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3)) +GEN_THUNKS(glPresentFrameKeyedNV, (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1)) +GEN_THUNKS(glPrimitiveBoundingBox, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxARB, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxEXT, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxOES, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveRestartIndex, (GLuint index), (index)) +GEN_THUNKS(glPrimitiveRestartIndexNV, (GLuint index), (index)) +GEN_THUNKS(glPrimitiveRestartNV, (void), ()) +GEN_THUNKS(glPrioritizeTextures, (GLsizei n, const GLuint * textures, const GLfloat * priorities), (n, textures, priorities)) +GEN_THUNKS(glPrioritizeTexturesEXT, (GLsizei n, const GLuint * textures, const GLclampf * priorities), (n, textures, priorities)) +GEN_THUNKS(glPrioritizeTexturesxOES, (GLsizei n, const GLuint * textures, const GLfixed * priorities), (n, textures, priorities)) +GEN_THUNKS(glProgramBinary, (GLuint program, GLenum binaryFormat, const void * binary, GLsizei length), (program, binaryFormat, binary, length)) +GEN_THUNKS(glProgramBinaryOES, (GLuint program, GLenum binaryFormat, const void * binary, GLint length), (program, binaryFormat, binary, length)) +GEN_THUNKS(glProgramBufferParametersIivNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramBufferParametersIuivNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramBufferParametersfvNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramEnvParameter4dARB, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameter4dvARB, (GLenum target, GLuint index, const GLdouble * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameter4fARB, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameter4fvARB, (GLenum target, GLuint index, const GLfloat * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameterI4iNV, (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameterI4ivNV, (GLenum target, GLuint index, const GLint * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameterI4uiNV, (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameterI4uivNV, (GLenum target, GLuint index, const GLuint * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameters4fvEXT, (GLenum target, GLuint index, GLsizei count, const GLfloat * params), (target, index, count, params)) +GEN_THUNKS(glProgramEnvParametersI4ivNV, (GLenum target, GLuint index, GLsizei count, const GLint * params), (target, index, count, params)) +GEN_THUNKS(glProgramEnvParametersI4uivNV, (GLenum target, GLuint index, GLsizei count, const GLuint * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParameter4dARB, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameter4dvARB, (GLenum target, GLuint index, const GLdouble * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameter4fARB, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameter4fvARB, (GLenum target, GLuint index, const GLfloat * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameterI4iNV, (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameterI4ivNV, (GLenum target, GLuint index, const GLint * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameterI4uiNV, (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameterI4uivNV, (GLenum target, GLuint index, const GLuint * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameters4fvEXT, (GLenum target, GLuint index, GLsizei count, const GLfloat * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParametersI4ivNV, (GLenum target, GLuint index, GLsizei count, const GLint * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParametersI4uivNV, (GLenum target, GLuint index, GLsizei count, const GLuint * params), (target, index, count, params)) +GEN_THUNKS(glProgramNamedParameter4dNV, (GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (id, len, name, x, y, z, w)) +GEN_THUNKS(glProgramNamedParameter4dvNV, (GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v), (id, len, name, v)) +GEN_THUNKS(glProgramNamedParameter4fNV, (GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (id, len, name, x, y, z, w)) +GEN_THUNKS(glProgramNamedParameter4fvNV, (GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v), (id, len, name, v)) +GEN_THUNKS(glProgramParameter4dNV, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramParameter4dvNV, (GLenum target, GLuint index, const GLdouble * v), (target, index, v)) +GEN_THUNKS(glProgramParameter4fNV, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramParameter4fvNV, (GLenum target, GLuint index, const GLfloat * v), (target, index, v)) +GEN_THUNKS(glProgramParameteri, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameteriARB, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameteriEXT, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameters4dvNV, (GLenum target, GLuint index, GLsizei count, const GLdouble * v), (target, index, count, v)) +GEN_THUNKS(glProgramParameters4fvNV, (GLenum target, GLuint index, GLsizei count, const GLfloat * v), (target, index, count, v)) +GEN_THUNKS(glProgramPathFragmentInputGenNV, (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs), (program, location, genMode, components, coeffs)) +GEN_THUNKS(glProgramStringARB, (GLenum target, GLenum format, GLsizei len, const void * string), (target, format, len, string)) +GEN_THUNKS(glProgramSubroutineParametersuivNV, (GLenum target, GLsizei count, const GLuint * params), (target, count, params)) +GEN_THUNKS(glProgramUniform1d, (GLuint program, GLint location, GLdouble v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1dEXT, (GLuint program, GLint location, GLdouble x), (program, location, x)) +GEN_THUNKS(glProgramUniform1dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1f, (GLuint program, GLint location, GLfloat v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1fEXT, (GLuint program, GLint location, GLfloat v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1i, (GLuint program, GLint location, GLint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1i64ARB, (GLuint program, GLint location, GLint64 x), (program, location, x)) +GEN_THUNKS(glProgramUniform1i64NV, (GLuint program, GLint location, GLint64EXT x), (program, location, x)) +GEN_THUNKS(glProgramUniform1i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1iEXT, (GLuint program, GLint location, GLint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ui, (GLuint program, GLint location, GLuint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1ui64ARB, (GLuint program, GLint location, GLuint64 x), (program, location, x)) +GEN_THUNKS(glProgramUniform1ui64NV, (GLuint program, GLint location, GLuint64EXT x), (program, location, x)) +GEN_THUNKS(glProgramUniform1ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1uiEXT, (GLuint program, GLint location, GLuint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2d, (GLuint program, GLint location, GLdouble v0, GLdouble v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2f, (GLuint program, GLint location, GLfloat v0, GLfloat v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2i, (GLuint program, GLint location, GLint v0, GLint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2iEXT, (GLuint program, GLint location, GLint v0, GLint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ui, (GLuint program, GLint location, GLuint v0, GLuint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3d, (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3iEXT, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4d, (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4iEXT, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniformHandleui64ARB, (GLuint program, GLint location, GLuint64 value), (program, location, value)) +GEN_THUNKS(glProgramUniformHandleui64NV, (GLuint program, GLint location, GLuint64 value), (program, location, value)) +GEN_THUNKS(glProgramUniformHandleui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * values), (program, location, count, values)) +GEN_THUNKS(glProgramUniformHandleui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64 * values), (program, location, count, values)) +GEN_THUNKS(glProgramUniformMatrix2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformui64NV, (GLuint program, GLint location, GLuint64EXT value), (program, location, value)) +GEN_THUNKS(glProgramUniformui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramVertexLimitNV, (GLenum target, GLint limit), (target, limit)) +GEN_THUNKS(glProvokingVertex, (GLenum mode), (mode)) +GEN_THUNKS(glProvokingVertexEXT, (GLenum mode), (mode)) +GEN_THUNKS(glPushAttrib, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushClientAttrib, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushClientAttribDefaultEXT, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushDebugGroup, (GLenum source, GLuint id, GLsizei length, const GLchar * message), (source, id, length, message)) +GEN_THUNKS(glPushDebugGroupKHR, (GLenum source, GLuint id, GLsizei length, const GLchar * message), (source, id, length, message)) +GEN_THUNKS(glPushGroupMarkerEXT, (GLsizei length, const GLchar * marker), (length, marker)) +GEN_THUNKS(glPushMatrix, (void), ()) +GEN_THUNKS(glPushName, (GLuint name), (name)) +GEN_THUNKS(glQueryCounter, (GLuint id, GLenum target), (id, target)) +GEN_THUNKS(glQueryCounterEXT, (GLuint id, GLenum target), (id, target)) +GEN_THUNKS_RET(GLbitfield, glQueryMatrixxOES, (GLfixed * mantissa, GLint * exponent), (mantissa, exponent)) +GEN_THUNKS(glQueryObjectParameteruiAMD, (GLenum target, GLuint id, GLenum pname, GLuint param), (target, id, pname, param)) +GEN_THUNKS(glRasterPos2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glRasterPos2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glRasterPos2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glRasterPos2iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glRasterPos2sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos2xOES, (GLfixed x, GLfixed y), (x, y)) +GEN_THUNKS(glRasterPos2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterPos3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glRasterPos3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glRasterPos3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glRasterPos3iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glRasterPos3sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos3xOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glRasterPos3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterPos4d, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos4f, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos4i, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos4s, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos4xOES, (GLfixed x, GLfixed y, GLfixed z, GLfixed w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterSamplesEXT, (GLuint samples, GLboolean fixedsamplelocations), (samples, fixedsamplelocations)) +GEN_THUNKS(glReadBuffer, (GLenum src), (src)) +GEN_THUNKS(glReadBufferIndexedEXT, (GLenum src, GLint index), (src, index)) +GEN_THUNKS(glReadBufferNV, (GLenum mode), (mode)) +GEN_THUNKS(glReadInstrumentsSGIX, (GLint marker), (marker)) +GEN_THUNKS(glReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels), (x, y, width, height, format, type, pixels)) +GEN_THUNKS(glReadnPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsARB, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsEXT, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsKHR, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glRectd, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectdv, (const GLdouble * v1, const GLdouble * v2), (v1, v2)) +GEN_THUNKS(glRectf, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectfv, (const GLfloat * v1, const GLfloat * v2), (v1, v2)) +GEN_THUNKS(glRecti, (GLint x1, GLint y1, GLint x2, GLint y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectiv, (const GLint * v1, const GLint * v2), (v1, v2)) +GEN_THUNKS(glRects, (GLshort x1, GLshort y1, GLshort x2, GLshort y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectsv, (const GLshort * v1, const GLshort * v2), (v1, v2)) +GEN_THUNKS(glRectxOES, (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectxvOES, (const GLfixed * v1, const GLfixed * v2), (v1, v2)) +GEN_THUNKS(glReferencePlaneSGIX, (const GLdouble * equation), (equation)) +GEN_THUNKS(glReleaseShaderCompiler, (void), ()) +GEN_THUNKS_RET(GLint, glRenderMode, (GLenum mode), (mode)) +GEN_THUNKS(glRenderbufferStorage, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleANGLE, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleAPPLE, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height), (target, coverageSamples, colorSamples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleEXT, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleIMG, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleNV, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageOES, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glReplacementCodePointerSUN, (GLenum type, GLsizei stride, const void ** pointer), (type, stride, pointer)) +GEN_THUNKS(glReplacementCodeubSUN, (GLubyte code), (code)) +GEN_THUNKS(glReplacementCodeubvSUN, (const GLubyte * code), (code)) +GEN_THUNKS(glReplacementCodeuiColor3fVertex3fSUN, (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor3fVertex3fvSUN, (const GLuint * rc, const GLfloat * c, const GLfloat * v), (rc, c, v)) +GEN_THUNKS(glReplacementCodeuiColor4fNormal3fVertex3fSUN, (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor4fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (rc, c, n, v)) +GEN_THUNKS(glReplacementCodeuiColor4ubVertex3fSUN, (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, a, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor4ubVertex3fvSUN, (const GLuint * rc, const GLubyte * c, const GLfloat * v), (rc, c, v)) +GEN_THUNKS(glReplacementCodeuiNormal3fVertex3fSUN, (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * n, const GLfloat * v), (rc, n, v)) +GEN_THUNKS(glReplacementCodeuiSUN, (GLuint code), (code)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (rc, tc, c, n, v)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v), (rc, tc, n, v)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * v), (rc, tc, v)) +GEN_THUNKS(glReplacementCodeuiVertex3fSUN, (GLuint rc, GLfloat x, GLfloat y, GLfloat z), (rc, x, y, z)) +GEN_THUNKS(glReplacementCodeuiVertex3fvSUN, (const GLuint * rc, const GLfloat * v), (rc, v)) +GEN_THUNKS(glReplacementCodeuivSUN, (const GLuint * code), (code)) +GEN_THUNKS(glReplacementCodeusSUN, (GLushort code), (code)) +GEN_THUNKS(glReplacementCodeusvSUN, (const GLushort * code), (code)) +GEN_THUNKS(glRequestResidentProgramsNV, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glResetHistogram, (GLenum target), (target)) +GEN_THUNKS(glResetHistogramEXT, (GLenum target), (target)) +GEN_THUNKS(glResetMinmax, (GLenum target), (target)) +GEN_THUNKS(glResetMinmaxEXT, (GLenum target), (target)) +GEN_THUNKS(glResizeBuffersMESA, (void), ()) +GEN_THUNKS(glResolveDepthValuesNV, (void), ()) +GEN_THUNKS(glResolveMultisampleFramebufferAPPLE, (void), ()) +GEN_THUNKS(glResumeTransformFeedback, (void), ()) +GEN_THUNKS(glResumeTransformFeedbackNV, (void), ()) +GEN_THUNKS(glRotated, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (angle, x, y, z)) +GEN_THUNKS(glRotatef, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (angle, x, y, z)) +GEN_THUNKS(glRotatex, (GLfixed angle, GLfixed x, GLfixed y, GLfixed z), (angle, x, y, z)) +GEN_THUNKS(glRotatexOES, (GLfixed angle, GLfixed x, GLfixed y, GLfixed z), (angle, x, y, z)) +GEN_THUNKS(glSampleCoverage, (GLfloat value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoverageARB, (GLfloat value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoveragex, (GLclampx value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoveragexOES, (GLclampx value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMapATI, (GLuint dst, GLuint interp, GLenum swizzle), (dst, interp, swizzle)) +GEN_THUNKS(glSampleMaskEXT, (GLclampf value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMaskIndexedNV, (GLuint index, GLbitfield mask), (index, mask)) +GEN_THUNKS(glSampleMaskSGIS, (GLclampf value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMaski, (GLuint maskNumber, GLbitfield mask), (maskNumber, mask)) +GEN_THUNKS(glSamplePatternEXT, (GLenum pattern), (pattern)) +GEN_THUNKS(glSamplePatternSGIS, (GLenum pattern), (pattern)) +GEN_THUNKS(glSamplerParameterIiv, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIivEXT, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIivOES, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuiv, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuivEXT, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuivOES, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterf, (GLuint sampler, GLenum pname, GLfloat param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterfv, (GLuint sampler, GLenum pname, const GLfloat * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameteri, (GLuint sampler, GLenum pname, GLint param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameteriv, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glScaled, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glScalef, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glScalex, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glScalexOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glScissor, (GLint x, GLint y, GLsizei width, GLsizei height), (x, y, width, height)) +GEN_THUNKS(glScissorArrayv, (GLuint first, GLsizei count, const GLint * v), (first, count, v)) +GEN_THUNKS(glScissorArrayvNV, (GLuint first, GLsizei count, const GLint * v), (first, count, v)) +GEN_THUNKS(glScissorIndexed, (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height), (index, left, bottom, width, height)) +GEN_THUNKS(glScissorIndexedNV, (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height), (index, left, bottom, width, height)) +GEN_THUNKS(glScissorIndexedv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glScissorIndexedvNV, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glSecondaryColor3b, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3bEXT, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glSecondaryColor3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glSecondaryColor3d, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3dEXT, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glSecondaryColor3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glSecondaryColor3f, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3fEXT, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glSecondaryColor3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glSecondaryColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glSecondaryColor3i, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3iEXT, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3iv, (const GLint * v), (v)) +GEN_THUNKS(glSecondaryColor3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glSecondaryColor3s, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3sEXT, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3sv, (const GLshort * v), (v)) +GEN_THUNKS(glSecondaryColor3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glSecondaryColor3ub, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3ubEXT, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glSecondaryColor3ubvEXT, (const GLubyte * v), (v)) +GEN_THUNKS(glSecondaryColor3ui, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3uiEXT, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3uiv, (const GLuint * v), (v)) +GEN_THUNKS(glSecondaryColor3uivEXT, (const GLuint * v), (v)) +GEN_THUNKS(glSecondaryColor3us, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3usEXT, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3usv, (const GLushort * v), (v)) +GEN_THUNKS(glSecondaryColor3usvEXT, (const GLushort * v), (v)) +GEN_THUNKS(glSecondaryColorFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glSecondaryColorP3ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glSecondaryColorP3uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glSecondaryColorPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glSecondaryColorPointerEXT, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glSecondaryColorPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glSelectBuffer, (GLsizei size, GLuint * buffer), (size, buffer)) +GEN_THUNKS(glSelectPerfMonitorCountersAMD, (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList), (monitor, enable, group, numCounters, counterList)) +GEN_THUNKS(glSeparableFilter2D, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column), (target, internalformat, width, height, format, type, row, column)) +GEN_THUNKS(glSeparableFilter2DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column), (target, internalformat, width, height, format, type, row, column)) +GEN_THUNKS(glSetFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS(glSetFenceNV, (GLuint fence, GLenum condition), (fence, condition)) +GEN_THUNKS(glSetFragmentShaderConstantATI, (GLuint dst, const GLfloat * value), (dst, value)) +GEN_THUNKS(glSetInvariantEXT, (GLuint id, GLenum type, const void * addr), (id, type, addr)) +GEN_THUNKS(glSetLocalConstantEXT, (GLuint id, GLenum type, const void * addr), (id, type, addr)) +GEN_THUNKS(glSetMultisamplefvAMD, (GLenum pname, GLuint index, const GLfloat * val), (pname, index, val)) +GEN_THUNKS(glShadeModel, (GLenum mode), (mode)) +GEN_THUNKS(glShaderBinary, (GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length), (count, shaders, binaryformat, binary, length)) +GEN_THUNKS(glShaderOp1EXT, (GLenum op, GLuint res, GLuint arg1), (op, res, arg1)) +GEN_THUNKS(glShaderOp2EXT, (GLenum op, GLuint res, GLuint arg1, GLuint arg2), (op, res, arg1, arg2)) +GEN_THUNKS(glShaderOp3EXT, (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3), (op, res, arg1, arg2, arg3)) +GEN_THUNKS(glShaderSource, (GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length), (shader, count, string, length)) +GEN_THUNKS(glShaderSourceARB, (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length), ((uintptr_t)shaderObj, count, string, length)) +GEN_THUNKS(glShaderStorageBlockBinding, (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding), (program, storageBlockIndex, storageBlockBinding)) +GEN_THUNKS(glSharpenTexFuncSGIS, (GLenum target, GLsizei n, const GLfloat * points), (target, n, points)) +GEN_THUNKS(glSpriteParameterfSGIX, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glSpriteParameterfvSGIX, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glSpriteParameteriSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glSpriteParameterivSGIX, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glStartInstrumentsSGIX, (void), ()) +GEN_THUNKS(glStartTilingQCOM, (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask), (x, y, width, height, preserveMask)) +GEN_THUNKS(glStateCaptureNV, (GLuint state, GLenum mode), (state, mode)) +GEN_THUNKS(glStencilClearTagEXT, (GLsizei stencilTagBits, GLuint stencilClearTag), (stencilTagBits, stencilClearTag)) +GEN_THUNKS(glStencilFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues)) +GEN_THUNKS(glStencilFillPathNV, (GLuint path, GLenum fillMode, GLuint mask), (path, fillMode, mask)) +GEN_THUNKS(glStencilFunc, (GLenum func, GLint ref, GLuint mask), (func, ref, mask)) +GEN_THUNKS(glStencilFuncSeparate, (GLenum face, GLenum func, GLint ref, GLuint mask), (face, func, ref, mask)) +GEN_THUNKS(glStencilFuncSeparateATI, (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask), (frontfunc, backfunc, ref, mask)) +GEN_THUNKS(glStencilMask, (GLuint mask), (mask)) +GEN_THUNKS(glStencilMaskSeparate, (GLenum face, GLuint mask), (face, mask)) +GEN_THUNKS(glStencilOp, (GLenum fail, GLenum zfail, GLenum zpass), (fail, zfail, zpass)) +GEN_THUNKS(glStencilOpSeparate, (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass), (face, sfail, dpfail, dppass)) +GEN_THUNKS(glStencilOpSeparateATI, (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass), (face, sfail, dpfail, dppass)) +GEN_THUNKS(glStencilOpValueAMD, (GLenum face, GLuint value), (face, value)) +GEN_THUNKS(glStencilStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues)) +GEN_THUNKS(glStencilStrokePathNV, (GLuint path, GLint reference, GLuint mask), (path, reference, mask)) +GEN_THUNKS(glStencilThenCoverFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType, transformValues)) +GEN_THUNKS(glStencilThenCoverFillPathNV, (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode), (path, fillMode, mask, coverMode)) +GEN_THUNKS(glStencilThenCoverStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType, transformValues)) +GEN_THUNKS(glStencilThenCoverStrokePathNV, (GLuint path, GLint reference, GLuint mask, GLenum coverMode), (path, reference, mask, coverMode)) +GEN_THUNKS(glStopInstrumentsSGIX, (GLint marker), (marker)) +GEN_THUNKS(glStringMarkerGREMEDY, (GLsizei len, const void * string), (len, string)) +GEN_THUNKS(glSubpixelPrecisionBiasNV, (GLuint xbits, GLuint ybits), (xbits, ybits)) +GEN_THUNKS(glSwizzleEXT, (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW), (res, in, outX, outY, outZ, outW)) +GEN_THUNKS(glSyncTextureINTEL, (GLuint texture), (texture)) +GEN_THUNKS(glTagSampleBufferSGIX, (void), ()) +GEN_THUNKS(glTangent3bEXT, (GLbyte tx, GLbyte ty, GLbyte tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glTangent3dEXT, (GLdouble tx, GLdouble ty, GLdouble tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glTangent3fEXT, (GLfloat tx, GLfloat ty, GLfloat tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glTangent3iEXT, (GLint tx, GLint ty, GLint tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glTangent3sEXT, (GLshort tx, GLshort ty, GLshort tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glTangentPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glTbufferMask3DFX, (GLuint mask), (mask)) +GEN_THUNKS(glTessellationFactorAMD, (GLfloat factor), (factor)) +GEN_THUNKS(glTessellationModeAMD, (GLenum mode), (mode)) +GEN_THUNKS_RET(GLboolean, glTestFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glTestFenceNV, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glTestObjectAPPLE, (GLenum object, GLuint name), (object, name)) +GEN_THUNKS(glTexBuffer, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferARB, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferEXT, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferOES, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferRange, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBufferRangeEXT, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBufferRangeOES, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBumpParameterfvATI, (GLenum pname, const GLfloat * param), (pname, param)) +GEN_THUNKS(glTexBumpParameterivATI, (GLenum pname, const GLint * param), (pname, param)) +GEN_THUNKS(glTexCoord1bOES, (GLbyte s), (s)) +GEN_THUNKS(glTexCoord1bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord1d, (GLdouble s), (s)) +GEN_THUNKS(glTexCoord1dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord1f, (GLfloat s), (s)) +GEN_THUNKS(glTexCoord1fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord1hNV, (GLhalfNV s), (s)) +GEN_THUNKS(glTexCoord1hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord1i, (GLint s), (s)) +GEN_THUNKS(glTexCoord1iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord1s, (GLshort s), (s)) +GEN_THUNKS(glTexCoord1sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord1xOES, (GLfixed s), (s)) +GEN_THUNKS(glTexCoord1xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord2bOES, (GLbyte s, GLbyte t), (s, t)) +GEN_THUNKS(glTexCoord2bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord2d, (GLdouble s, GLdouble t), (s, t)) +GEN_THUNKS(glTexCoord2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord2f, (GLfloat s, GLfloat t), (s, t)) +GEN_THUNKS(glTexCoord2fColor3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, x, y, z)) +GEN_THUNKS(glTexCoord2fColor3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * v), (tc, c, v)) +GEN_THUNKS(glTexCoord2fColor4fNormal3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glTexCoord2fColor4fNormal3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (tc, c, n, v)) +GEN_THUNKS(glTexCoord2fColor4ubVertex3fSUN, (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, a, x, y, z)) +GEN_THUNKS(glTexCoord2fColor4ubVertex3fvSUN, (const GLfloat * tc, const GLubyte * c, const GLfloat * v), (tc, c, v)) +GEN_THUNKS(glTexCoord2fNormal3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (s, t, nx, ny, nz, x, y, z)) +GEN_THUNKS(glTexCoord2fNormal3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * n, const GLfloat * v), (tc, n, v)) +GEN_THUNKS(glTexCoord2fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z), (s, t, x, y, z)) +GEN_THUNKS(glTexCoord2fVertex3fvSUN, (const GLfloat * tc, const GLfloat * v), (tc, v)) +GEN_THUNKS(glTexCoord2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord2hNV, (GLhalfNV s, GLhalfNV t), (s, t)) +GEN_THUNKS(glTexCoord2hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord2i, (GLint s, GLint t), (s, t)) +GEN_THUNKS(glTexCoord2iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord2s, (GLshort s, GLshort t), (s, t)) +GEN_THUNKS(glTexCoord2sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord2xOES, (GLfixed s, GLfixed t), (s, t)) +GEN_THUNKS(glTexCoord2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord3bOES, (GLbyte s, GLbyte t, GLbyte r), (s, t, r)) +GEN_THUNKS(glTexCoord3bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord3d, (GLdouble s, GLdouble t, GLdouble r), (s, t, r)) +GEN_THUNKS(glTexCoord3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord3f, (GLfloat s, GLfloat t, GLfloat r), (s, t, r)) +GEN_THUNKS(glTexCoord3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord3hNV, (GLhalfNV s, GLhalfNV t, GLhalfNV r), (s, t, r)) +GEN_THUNKS(glTexCoord3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord3i, (GLint s, GLint t, GLint r), (s, t, r)) +GEN_THUNKS(glTexCoord3iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord3s, (GLshort s, GLshort t, GLshort r), (s, t, r)) +GEN_THUNKS(glTexCoord3sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord3xOES, (GLfixed s, GLfixed t, GLfixed r), (s, t, r)) +GEN_THUNKS(glTexCoord3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord4bOES, (GLbyte s, GLbyte t, GLbyte r, GLbyte q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord4d, (GLdouble s, GLdouble t, GLdouble r, GLdouble q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord4f, (GLfloat s, GLfloat t, GLfloat r, GLfloat q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4fColor4fNormal3fVertex4fSUN, (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w)) +GEN_THUNKS(glTexCoord4fColor4fNormal3fVertex4fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (tc, c, n, v)) +GEN_THUNKS(glTexCoord4fVertex4fSUN, (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (s, t, p, q, x, y, z, w)) +GEN_THUNKS(glTexCoord4fVertex4fvSUN, (const GLfloat * tc, const GLfloat * v), (tc, v)) +GEN_THUNKS(glTexCoord4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord4hNV, (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord4i, (GLint s, GLint t, GLint r, GLint q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord4s, (GLshort s, GLshort t, GLshort r, GLshort q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord4xOES, (GLfixed s, GLfixed t, GLfixed r, GLfixed q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoordFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glTexCoordP1ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP1uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP2ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP2uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP3ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP3uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP4ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP4uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glTexCoordPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glTexCoordPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glTexCoordPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glTexEnvf, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glTexEnvfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glTexEnvi, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glTexEnviv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexEnvx, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexEnvxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexEnvxv, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexEnvxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexFilterFuncSGIS, (GLenum target, GLenum filter, GLsizei n, const GLfloat * weights), (target, filter, n, weights)) +GEN_THUNKS(glTexGend, (GLenum coord, GLenum pname, GLdouble param), (coord, pname, param)) +GEN_THUNKS(glTexGendv, (GLenum coord, GLenum pname, const GLdouble * params), (coord, pname, params)) +GEN_THUNKS(glTexGenf, (GLenum coord, GLenum pname, GLfloat param), (coord, pname, param)) +GEN_THUNKS(glTexGenfOES, (GLenum coord, GLenum pname, GLfloat param), (coord, pname, param)) +GEN_THUNKS(glTexGenfv, (GLenum coord, GLenum pname, const GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glTexGenfvOES, (GLenum coord, GLenum pname, const GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glTexGeni, (GLenum coord, GLenum pname, GLint param), (coord, pname, param)) +GEN_THUNKS(glTexGeniOES, (GLenum coord, GLenum pname, GLint param), (coord, pname, param)) +GEN_THUNKS(glTexGeniv, (GLenum coord, GLenum pname, const GLint * params), (coord, pname, params)) +GEN_THUNKS(glTexGenivOES, (GLenum coord, GLenum pname, const GLint * params), (coord, pname, params)) +GEN_THUNKS(glTexGenxOES, (GLenum coord, GLenum pname, GLfixed param), (coord, pname, param)) +GEN_THUNKS(glTexGenxvOES, (GLenum coord, GLenum pname, const GLfixed * params), (coord, pname, params)) +GEN_THUNKS(glTexImage1D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glTexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glTexImage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTexImage2DMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage3DEXT, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexImage3DMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage4DSGIS, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels)) +GEN_THUNKS(glTexPageCommitmentARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (target, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTexPageCommitmentEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (target, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTexParameterIiv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIivOES, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuiv, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuivEXT, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuivOES, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterf, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glTexParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glTexParameteri, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glTexParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterx, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexParameterxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexParameterxv, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexParameterxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexRenderbufferNV, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glTexStorage1D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (target, levels, internalformat, width)) +GEN_THUNKS(glTexStorage1DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (target, levels, internalformat, width)) +GEN_THUNKS(glTexStorage2D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (target, levels, internalformat, width, height)) +GEN_THUNKS(glTexStorage2DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (target, levels, internalformat, width, height)) +GEN_THUNKS(glTexStorage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTexStorage3D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTexStorage3DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTexStorage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexStorage3DMultisampleOES, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexStorageSparseAMD, (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags), (target, internalFormat, width, height, depth, layers, flags)) +GEN_THUNKS(glTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTexSubImage1DEXT, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTexSubImage2DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage3DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage4DSGIS, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels)) +GEN_THUNKS(glTextureBarrier, (void), ()) +GEN_THUNKS(glTextureBarrierNV, (void), ()) +GEN_THUNKS(glTextureBuffer, (GLuint texture, GLenum internalformat, GLuint buffer), (texture, internalformat, buffer)) +GEN_THUNKS(glTextureBufferEXT, (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer), (texture, target, internalformat, buffer)) +GEN_THUNKS(glTextureBufferRange, (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (texture, internalformat, buffer, offset, size)) +GEN_THUNKS(glTextureBufferRangeEXT, (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (texture, target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTextureColorMaskSGIS, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red, green, blue, alpha)) +GEN_THUNKS(glTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glTextureImage2DMultisampleCoverageNV, (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (texture, target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTextureImage2DMultisampleNV, (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (texture, target, samples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTextureImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTextureImage3DMultisampleCoverageNV, (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (texture, target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTextureImage3DMultisampleNV, (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTextureLightEXT, (GLenum pname), (pname)) +GEN_THUNKS(glTextureMaterialEXT, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glTextureNormalEXT, (GLenum mode), (mode)) +GEN_THUNKS(glTexturePageCommitmentEXT, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (texture, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTextureParameterIiv, (GLuint texture, GLenum pname, const GLint * params), (texture, pname, params)) +GEN_THUNKS(glTextureParameterIivEXT, (GLuint texture, GLenum target, GLenum pname, const GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameterIuiv, (GLuint texture, GLenum pname, const GLuint * params), (texture, pname, params)) +GEN_THUNKS(glTextureParameterIuivEXT, (GLuint texture, GLenum target, GLenum pname, const GLuint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameterf, (GLuint texture, GLenum pname, GLfloat param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterfEXT, (GLuint texture, GLenum target, GLenum pname, GLfloat param), (texture, target, pname, param)) +GEN_THUNKS(glTextureParameterfv, (GLuint texture, GLenum pname, const GLfloat * param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterfvEXT, (GLuint texture, GLenum target, GLenum pname, const GLfloat * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameteri, (GLuint texture, GLenum pname, GLint param), (texture, pname, param)) +GEN_THUNKS(glTextureParameteriEXT, (GLuint texture, GLenum target, GLenum pname, GLint param), (texture, target, pname, param)) +GEN_THUNKS(glTextureParameteriv, (GLuint texture, GLenum pname, const GLint * param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterivEXT, (GLuint texture, GLenum target, GLenum pname, const GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureRangeAPPLE, (GLenum target, GLsizei length, const void * pointer), (target, length, pointer)) +GEN_THUNKS(glTextureRenderbufferEXT, (GLuint texture, GLenum target, GLuint renderbuffer), (texture, target, renderbuffer)) +GEN_THUNKS(glTextureStorage1D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width), (texture, levels, internalformat, width)) +GEN_THUNKS(glTextureStorage1DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (texture, target, levels, internalformat, width)) +GEN_THUNKS(glTextureStorage2D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (texture, levels, internalformat, width, height)) +GEN_THUNKS(glTextureStorage2DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (texture, target, levels, internalformat, width, height)) +GEN_THUNKS(glTextureStorage2DMultisample, (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (texture, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage2DMultisampleEXT, (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (texture, target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage3D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (texture, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTextureStorage3DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (texture, target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTextureStorage3DMultisample, (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (texture, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage3DMultisampleEXT, (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (texture, target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTextureStorageSparseAMD, (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags), (texture, target, internalFormat, width, height, depth, layers, flags)) +GEN_THUNKS(glTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTextureView, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTextureViewEXT, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTextureViewOES, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTrackMatrixNV, (GLenum target, GLuint address, GLenum matrix, GLenum transform), (target, address, matrix, transform)) +GEN_THUNKS(glTransformFeedbackAttribsNV, (GLsizei count, const GLint * attribs, GLenum bufferMode), (count, attribs, bufferMode)) +GEN_THUNKS(glTransformFeedbackBufferBase, (GLuint xfb, GLuint index, GLuint buffer), (xfb, index, buffer)) +GEN_THUNKS(glTransformFeedbackBufferRange, (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (xfb, index, buffer, offset, size)) +GEN_THUNKS(glTransformFeedbackStreamAttribsNV, (GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode), (count, attribs, nbuffers, bufstreams, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryings, (GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode), (program, count, varyings, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryingsEXT, (GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode), (program, count, varyings, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryingsNV, (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode), (program, count, locations, bufferMode)) +GEN_THUNKS(glTransformPathNV, (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues), (resultPath, srcPath, transformType, transformValues)) +GEN_THUNKS(glTranslated, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glTranslatef, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glTranslatex, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glTranslatexOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glUniform1d, (GLint location, GLdouble x), (location, x)) +GEN_THUNKS(glUniform1dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform1f, (GLint location, GLfloat v0), (location, v0)) +GEN_THUNKS(glUniform1fARB, (GLint location, GLfloat v0), (location, v0)) +GEN_THUNKS(glUniform1fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform1fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform1i, (GLint location, GLint v0), (location, v0)) +GEN_THUNKS(glUniform1i64ARB, (GLint location, GLint64 x), (location, x)) +GEN_THUNKS(glUniform1i64NV, (GLint location, GLint64EXT x), (location, x)) +GEN_THUNKS(glUniform1i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform1i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform1iARB, (GLint location, GLint v0), (location, v0)) +GEN_THUNKS(glUniform1iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform1ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform1ui, (GLint location, GLuint v0), (location, v0)) +GEN_THUNKS(glUniform1ui64ARB, (GLint location, GLuint64 x), (location, x)) +GEN_THUNKS(glUniform1ui64NV, (GLint location, GLuint64EXT x), (location, x)) +GEN_THUNKS(glUniform1ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform1ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform1uiEXT, (GLint location, GLuint v0), (location, v0)) +GEN_THUNKS(glUniform1uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform1uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform2d, (GLint location, GLdouble x, GLdouble y), (location, x, y)) +GEN_THUNKS(glUniform2dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform2f, (GLint location, GLfloat v0, GLfloat v1), (location, v0, v1)) +GEN_THUNKS(glUniform2fARB, (GLint location, GLfloat v0, GLfloat v1), (location, v0, v1)) +GEN_THUNKS(glUniform2fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform2fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform2i, (GLint location, GLint v0, GLint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2i64ARB, (GLint location, GLint64 x, GLint64 y), (location, x, y)) +GEN_THUNKS(glUniform2i64NV, (GLint location, GLint64EXT x, GLint64EXT y), (location, x, y)) +GEN_THUNKS(glUniform2i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform2i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform2iARB, (GLint location, GLint v0, GLint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform2ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform2ui, (GLint location, GLuint v0, GLuint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2ui64ARB, (GLint location, GLuint64 x, GLuint64 y), (location, x, y)) +GEN_THUNKS(glUniform2ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y), (location, x, y)) +GEN_THUNKS(glUniform2ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform2ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform2uiEXT, (GLint location, GLuint v0, GLuint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform2uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform3d, (GLint location, GLdouble x, GLdouble y, GLdouble z), (location, x, y, z)) +GEN_THUNKS(glUniform3dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform3f, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3fARB, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform3fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform3i, (GLint location, GLint v0, GLint v1, GLint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3i64ARB, (GLint location, GLint64 x, GLint64 y, GLint64 z), (location, x, y, z)) +GEN_THUNKS(glUniform3i64NV, (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z), (location, x, y, z)) +GEN_THUNKS(glUniform3i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform3i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform3iARB, (GLint location, GLint v0, GLint v1, GLint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform3ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform3ui, (GLint location, GLuint v0, GLuint v1, GLuint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3ui64ARB, (GLint location, GLuint64 x, GLuint64 y, GLuint64 z), (location, x, y, z)) +GEN_THUNKS(glUniform3ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (location, x, y, z)) +GEN_THUNKS(glUniform3ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform3ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform3uiEXT, (GLint location, GLuint v0, GLuint v1, GLuint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform3uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform4d, (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform4f, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4fARB, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform4fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform4i, (GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4i64ARB, (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4i64NV, (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform4i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform4iARB, (GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform4ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform4ui, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4ui64ARB, (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform4ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform4uiEXT, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform4uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniformBlockBinding, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding), (program, uniformBlockIndex, uniformBlockBinding)) +GEN_THUNKS(glUniformBufferEXT, (GLuint program, GLint location, GLuint buffer), (program, location, buffer)) +GEN_THUNKS(glUniformHandleui64ARB, (GLint location, GLuint64 value), (location, value)) +GEN_THUNKS(glUniformHandleui64NV, (GLint location, GLuint64 value), (location, value)) +GEN_THUNKS(glUniformHandleui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniformHandleui64vNV, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniformMatrix2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformSubroutinesuiv, (GLenum shadertype, GLsizei count, const GLuint * indices), (shadertype, count, indices)) +GEN_THUNKS(glUniformui64NV, (GLint location, GLuint64EXT value), (location, value)) +GEN_THUNKS(glUniformui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUnlockArraysEXT, (void), ()) +GEN_THUNKS_RET(GLboolean, glUnmapBuffer, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapBufferARB, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapBufferOES, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapNamedBuffer, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glUnmapNamedBufferEXT, (GLuint buffer), (buffer)) +GEN_THUNKS(glUnmapObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glUnmapTexture2DINTEL, (GLuint texture, GLint level), (texture, level)) +GEN_THUNKS(glUpdateObjectBufferATI, (GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve), (buffer, offset, size, pointer, preserve)) +GEN_THUNKS(glUseProgram, (GLuint program), (program)) +GEN_THUNKS(glUseProgramObjectARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glUseProgramStages, (GLuint pipeline, GLbitfield stages, GLuint program), (pipeline, stages, program)) +GEN_THUNKS(glUseProgramStagesEXT, (GLuint pipeline, GLbitfield stages, GLuint program), (pipeline, stages, program)) +GEN_THUNKS(glUseShaderProgramEXT, (GLenum type, GLuint program), (type, program)) +GEN_THUNKS(glVDPAUFiniNV, (void), ()) +GEN_THUNKS(glVDPAUGetSurfaceivNV, (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (surface, pname, bufSize, length, values)) +GEN_THUNKS(glVDPAUInitNV, (const void * vdpDevice, const void * getProcAddress), (vdpDevice, getProcAddress)) +GEN_THUNKS_RET(GLboolean, glVDPAUIsSurfaceNV, (GLvdpauSurfaceNV surface), (surface)) +GEN_THUNKS(glVDPAUMapSurfacesNV, (GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces), (numSurfaces, surfaces)) +GEN_THUNKS_RET(GLvdpauSurfaceNV, glVDPAURegisterOutputSurfaceNV, (const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames), (vdpSurface, target, numTextureNames, textureNames)) +GEN_THUNKS_RET(GLvdpauSurfaceNV, glVDPAURegisterVideoSurfaceNV, (const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames), (vdpSurface, target, numTextureNames, textureNames)) +GEN_THUNKS(glVDPAUSurfaceAccessNV, (GLvdpauSurfaceNV surface, GLenum access), (surface, access)) +GEN_THUNKS(glVDPAUUnmapSurfacesNV, (GLsizei numSurface, const GLvdpauSurfaceNV * surfaces), (numSurface, surfaces)) +GEN_THUNKS(glVDPAUUnregisterSurfaceNV, (GLvdpauSurfaceNV surface), (surface)) +GEN_THUNKS(glValidateProgram, (GLuint program), (program)) +GEN_THUNKS(glValidateProgramARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glValidateProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glValidateProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glVariantArrayObjectATI, (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset), (id, type, stride, buffer, offset)) +GEN_THUNKS(glVariantPointerEXT, (GLuint id, GLenum type, GLuint stride, const void * addr), (id, type, stride, addr)) +GEN_THUNKS(glVariantbvEXT, (GLuint id, const GLbyte * addr), (id, addr)) +GEN_THUNKS(glVariantdvEXT, (GLuint id, const GLdouble * addr), (id, addr)) +GEN_THUNKS(glVariantfvEXT, (GLuint id, const GLfloat * addr), (id, addr)) +GEN_THUNKS(glVariantivEXT, (GLuint id, const GLint * addr), (id, addr)) +GEN_THUNKS(glVariantsvEXT, (GLuint id, const GLshort * addr), (id, addr)) +GEN_THUNKS(glVariantubvEXT, (GLuint id, const GLubyte * addr), (id, addr)) +GEN_THUNKS(glVariantuivEXT, (GLuint id, const GLuint * addr), (id, addr)) +GEN_THUNKS(glVariantusvEXT, (GLuint id, const GLushort * addr), (id, addr)) +GEN_THUNKS(glVertex2bOES, (GLbyte x, GLbyte y), (x, y)) +GEN_THUNKS(glVertex2bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glVertex2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glVertex2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex2hNV, (GLhalfNV x, GLhalfNV y), (x, y)) +GEN_THUNKS(glVertex2hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glVertex2iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glVertex2sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex2xOES, (GLfixed x), (x)) +GEN_THUNKS(glVertex2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertex3bOES, (GLbyte x, GLbyte y, GLbyte z), (x, y, z)) +GEN_THUNKS(glVertex3bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glVertex3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glVertex3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex3hNV, (GLhalfNV x, GLhalfNV y, GLhalfNV z), (x, y, z)) +GEN_THUNKS(glVertex3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glVertex3iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glVertex3sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex3xOES, (GLfixed x, GLfixed y), (x, y)) +GEN_THUNKS(glVertex3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertex4bOES, (GLbyte x, GLbyte y, GLbyte z, GLbyte w), (x, y, z, w)) +GEN_THUNKS(glVertex4bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex4d, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glVertex4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex4f, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glVertex4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex4hNV, (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w), (x, y, z, w)) +GEN_THUNKS(glVertex4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex4i, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glVertex4iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex4s, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glVertex4sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex4xOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glVertex4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertexArrayAttribBinding, (GLuint vaobj, GLuint attribindex, GLuint bindingindex), (vaobj, attribindex, bindingindex)) +GEN_THUNKS(glVertexArrayAttribFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (vaobj, attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexArrayAttribIFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayAttribLFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayBindVertexBufferEXT, (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (vaobj, bindingindex, buffer, offset, stride)) +GEN_THUNKS(glVertexArrayBindingDivisor, (GLuint vaobj, GLuint bindingindex, GLuint divisor), (vaobj, bindingindex, divisor)) +GEN_THUNKS(glVertexArrayColorOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayEdgeFlagOffsetEXT, (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset), (vaobj, buffer, stride, offset)) +GEN_THUNKS(glVertexArrayElementBuffer, (GLuint vaobj, GLuint buffer), (vaobj, buffer)) +GEN_THUNKS(glVertexArrayFogCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayIndexOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayMultiTexCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, texunit, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayNormalOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayParameteriAPPLE, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glVertexArrayRangeAPPLE, (GLsizei length, void * pointer), (length, pointer)) +GEN_THUNKS(glVertexArrayRangeNV, (GLsizei length, const void * pointer), (length, pointer)) +GEN_THUNKS(glVertexArraySecondaryColorOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayTexCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribBindingEXT, (GLuint vaobj, GLuint attribindex, GLuint bindingindex), (vaobj, attribindex, bindingindex)) +GEN_THUNKS(glVertexArrayVertexAttribDivisorEXT, (GLuint vaobj, GLuint index, GLuint divisor), (vaobj, index, divisor)) +GEN_THUNKS(glVertexArrayVertexAttribFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (vaobj, attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribIFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribIOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribLFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribLOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, normalized, stride, offset)) +GEN_THUNKS(glVertexArrayVertexBindingDivisorEXT, (GLuint vaobj, GLuint bindingindex, GLuint divisor), (vaobj, bindingindex, divisor)) +GEN_THUNKS(glVertexArrayVertexBuffer, (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (vaobj, bindingindex, buffer, offset, stride)) +GEN_THUNKS(glVertexArrayVertexBuffers, (GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides), (vaobj, first, count, buffers, offsets, strides)) +GEN_THUNKS(glVertexArrayVertexOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexAttrib1d, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dARB, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dNV, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1f, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fARB, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fNV, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1hNV, (GLuint index, GLhalfNV x), (index, x)) +GEN_THUNKS(glVertexAttrib1hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib1s, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sARB, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sNV, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib1svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib1svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2d, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dARB, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dNV, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2f, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fARB, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fNV, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2hNV, (GLuint index, GLhalfNV x, GLhalfNV y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib2s, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sARB, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sNV, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3d, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dARB, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dNV, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3f, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fARB, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fNV, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3hNV, (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib3s, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sARB, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sNV, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nbv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NbvARB, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Niv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NivARB, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nsv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NsvARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nub, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4NubARB, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4Nubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NubvARB, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nuiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NuivARB, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nusv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NusvARB, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4bv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4bvARB, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4d, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dARB, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dNV, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4f, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fARB, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fNV, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4hNV, (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib4iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ivARB, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4s, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sARB, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sNV, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubNV, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4ubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubvARB, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubvNV, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4uivARB, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4usv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4usvARB, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribArrayObjectATI, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset), (index, size, type, normalized, stride, buffer, offset)) +GEN_THUNKS(glVertexAttribBinding, (GLuint attribindex, GLuint bindingindex), (attribindex, bindingindex)) +GEN_THUNKS(glVertexAttribDivisor, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorANGLE, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorARB, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorEXT, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorNV, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribFormat, (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexAttribFormatNV, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride), (index, size, type, normalized, stride)) +GEN_THUNKS(glVertexAttribI1i, (GLuint index, GLint x), (index, x)) +GEN_THUNKS(glVertexAttribI1iEXT, (GLuint index, GLint x), (index, x)) +GEN_THUNKS(glVertexAttribI1iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1ui, (GLuint index, GLuint x), (index, x)) +GEN_THUNKS(glVertexAttribI1uiEXT, (GLuint index, GLuint x), (index, x)) +GEN_THUNKS(glVertexAttribI1uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2i, (GLuint index, GLint x, GLint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2iEXT, (GLuint index, GLint x, GLint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2ui, (GLuint index, GLuint x, GLuint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2uiEXT, (GLuint index, GLuint x, GLuint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3i, (GLuint index, GLint x, GLint y, GLint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3iEXT, (GLuint index, GLint x, GLint y, GLint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3ui, (GLuint index, GLuint x, GLuint y, GLuint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3uiEXT, (GLuint index, GLuint x, GLuint y, GLuint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4bv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4bvEXT, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4i, (GLuint index, GLint x, GLint y, GLint z, GLint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4iEXT, (GLuint index, GLint x, GLint y, GLint z, GLint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4svEXT, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ubvEXT, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ui, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4uiEXT, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4usv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4usvEXT, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribIFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexAttribIFormatNV, (GLuint index, GLint size, GLenum type, GLsizei stride), (index, size, type, stride)) +GEN_THUNKS(glVertexAttribIPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribIPointerEXT, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribL1d, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttribL1dEXT, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttribL1dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL1dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL1i64NV, (GLuint index, GLint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL1ui64ARB, (GLuint index, GLuint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1ui64NV, (GLuint index, GLuint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1ui64vARB, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL1ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL2d, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2dEXT, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL2dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL2i64NV, (GLuint index, GLint64EXT x, GLint64EXT y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL2ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL3d, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3dEXT, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL3dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL3i64NV, (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL3ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL4d, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4dEXT, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL4dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL4i64NV, (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL4ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribLFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexAttribLFormatNV, (GLuint index, GLint size, GLenum type, GLsizei stride), (index, size, type, stride)) +GEN_THUNKS(glVertexAttribLPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribLPointerEXT, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribP1ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP1uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP2ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP2uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP3ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP3uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP4ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP4uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribParameteriAMD, (GLuint index, GLenum pname, GLint param), (index, pname, param)) +GEN_THUNKS(glVertexAttribPointer, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer), (index, size, type, normalized, stride, pointer)) +GEN_THUNKS(glVertexAttribPointerARB, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer), (index, size, type, normalized, stride, pointer)) +GEN_THUNKS(glVertexAttribPointerNV, (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer), (index, fsize, type, stride, pointer)) +GEN_THUNKS(glVertexAttribs1dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs1fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs1hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs1svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs2svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs3svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs4svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4ubvNV, (GLuint index, GLsizei count, const GLubyte * v), (index, count, v)) +GEN_THUNKS(glVertexBindingDivisor, (GLuint bindingindex, GLuint divisor), (bindingindex, divisor)) +GEN_THUNKS(glVertexBlendARB, (GLint count), (count)) +GEN_THUNKS(glVertexBlendEnvfATI, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glVertexBlendEnviATI, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glVertexFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glVertexP2ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP2uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexP3ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP3uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexP4ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP4uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glVertexPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glVertexPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glVertexPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glVertexStream1dATI, (GLenum stream, GLdouble x), (stream, x)) +GEN_THUNKS(glVertexStream1dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1fATI, (GLenum stream, GLfloat x), (stream, x)) +GEN_THUNKS(glVertexStream1fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1iATI, (GLenum stream, GLint x), (stream, x)) +GEN_THUNKS(glVertexStream1ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1sATI, (GLenum stream, GLshort x), (stream, x)) +GEN_THUNKS(glVertexStream1svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2dATI, (GLenum stream, GLdouble x, GLdouble y), (stream, x, y)) +GEN_THUNKS(glVertexStream2dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2fATI, (GLenum stream, GLfloat x, GLfloat y), (stream, x, y)) +GEN_THUNKS(glVertexStream2fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2iATI, (GLenum stream, GLint x, GLint y), (stream, x, y)) +GEN_THUNKS(glVertexStream2ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2sATI, (GLenum stream, GLshort x, GLshort y), (stream, x, y)) +GEN_THUNKS(glVertexStream2svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3dATI, (GLenum stream, GLdouble x, GLdouble y, GLdouble z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3fATI, (GLenum stream, GLfloat x, GLfloat y, GLfloat z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3iATI, (GLenum stream, GLint x, GLint y, GLint z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3sATI, (GLenum stream, GLshort x, GLshort y, GLshort z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4dATI, (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4fATI, (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4iATI, (GLenum stream, GLint x, GLint y, GLint z, GLint w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4sATI, (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexWeightPointerEXT, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glVertexWeightfEXT, (GLfloat weight), (weight)) +GEN_THUNKS(glVertexWeightfvEXT, (const GLfloat * weight), (weight)) +GEN_THUNKS(glVertexWeighthNV, (GLhalfNV weight), (weight)) +GEN_THUNKS(glVertexWeighthvNV, (const GLhalfNV * weight), (weight)) +GEN_THUNKS_RET(GLenum, glVideoCaptureNV, (GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time), (video_capture_slot, sequence_num, capture_time)) +GEN_THUNKS(glVideoCaptureStreamParameterdvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glVideoCaptureStreamParameterfvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glVideoCaptureStreamParameterivNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glViewport, (GLint x, GLint y, GLsizei width, GLsizei height), (x, y, width, height)) +GEN_THUNKS(glViewportArrayv, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glViewportArrayvNV, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glViewportIndexedf, (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h), (index, x, y, w, h)) +GEN_THUNKS(glViewportIndexedfNV, (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h), (index, x, y, w, h)) +GEN_THUNKS(glViewportIndexedfv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glViewportIndexedfvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glWaitSyncAPPLE, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glWeightPathsNV, (GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights), (resultPath, numPaths, paths, weights)) +GEN_THUNKS(glWeightPointerARB, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glWeightPointerOES, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glWeightbvARB, (GLint size, const GLbyte * weights), (size, weights)) +GEN_THUNKS(glWeightdvARB, (GLint size, const GLdouble * weights), (size, weights)) +GEN_THUNKS(glWeightfvARB, (GLint size, const GLfloat * weights), (size, weights)) +GEN_THUNKS(glWeightivARB, (GLint size, const GLint * weights), (size, weights)) +GEN_THUNKS(glWeightsvARB, (GLint size, const GLshort * weights), (size, weights)) +GEN_THUNKS(glWeightubvARB, (GLint size, const GLubyte * weights), (size, weights)) +GEN_THUNKS(glWeightuivARB, (GLint size, const GLuint * weights), (size, weights)) +GEN_THUNKS(glWeightusvARB, (GLint size, const GLushort * weights), (size, weights)) +GEN_THUNKS(glWindowPos2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dARB, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dMESA, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2dvARB, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fARB, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fMESA, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2fvARB, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iARB, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iMESA, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iv, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2ivARB, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sARB, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sMESA, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sv, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos2svARB, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos2svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dARB, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dMESA, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3dvARB, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fARB, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fMESA, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3fvARB, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iARB, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iMESA, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iv, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3ivARB, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sARB, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sMESA, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sv, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3svARB, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos4dMESA, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos4fMESA, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos4iMESA, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos4sMESA, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWriteMaskEXT, (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW), (res, in, outX, outY, outZ, outW)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_glAccum_dispatch_table_rewrite_ptr, /* glAccum */ + epoxy_glAccumxOES_dispatch_table_rewrite_ptr, /* glAccumxOES */ + epoxy_glActiveProgramEXT_dispatch_table_rewrite_ptr, /* glActiveProgramEXT */ + epoxy_glActiveShaderProgram_dispatch_table_rewrite_ptr, /* glActiveShaderProgram */ + epoxy_glActiveShaderProgramEXT_dispatch_table_rewrite_ptr, /* glActiveShaderProgramEXT */ + epoxy_glActiveStencilFaceEXT_dispatch_table_rewrite_ptr, /* glActiveStencilFaceEXT */ + epoxy_glActiveTexture_dispatch_table_rewrite_ptr, /* glActiveTexture */ + epoxy_glActiveTextureARB_dispatch_table_rewrite_ptr, /* glActiveTextureARB */ + epoxy_glActiveVaryingNV_dispatch_table_rewrite_ptr, /* glActiveVaryingNV */ + epoxy_glAlphaFragmentOp1ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp1ATI */ + epoxy_glAlphaFragmentOp2ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp2ATI */ + epoxy_glAlphaFragmentOp3ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp3ATI */ + epoxy_glAlphaFunc_dispatch_table_rewrite_ptr, /* glAlphaFunc */ + epoxy_glAlphaFuncQCOM_dispatch_table_rewrite_ptr, /* glAlphaFuncQCOM */ + epoxy_glAlphaFuncx_dispatch_table_rewrite_ptr, /* glAlphaFuncx */ + epoxy_glAlphaFuncxOES_dispatch_table_rewrite_ptr, /* glAlphaFuncxOES */ + epoxy_glApplyFramebufferAttachmentCMAAINTEL_dispatch_table_rewrite_ptr, /* glApplyFramebufferAttachmentCMAAINTEL */ + epoxy_glApplyTextureEXT_dispatch_table_rewrite_ptr, /* glApplyTextureEXT */ + epoxy_glAreProgramsResidentNV_dispatch_table_rewrite_ptr, /* glAreProgramsResidentNV */ + epoxy_glAreTexturesResident_dispatch_table_rewrite_ptr, /* glAreTexturesResident */ + epoxy_glAreTexturesResidentEXT_dispatch_table_rewrite_ptr, /* glAreTexturesResidentEXT */ + epoxy_glArrayElement_dispatch_table_rewrite_ptr, /* glArrayElement */ + epoxy_glArrayElementEXT_dispatch_table_rewrite_ptr, /* glArrayElementEXT */ + epoxy_glArrayObjectATI_dispatch_table_rewrite_ptr, /* glArrayObjectATI */ + epoxy_glAsyncMarkerSGIX_dispatch_table_rewrite_ptr, /* glAsyncMarkerSGIX */ + epoxy_glAttachObjectARB_dispatch_table_rewrite_ptr, /* glAttachObjectARB */ + epoxy_glAttachShader_dispatch_table_rewrite_ptr, /* glAttachShader */ + epoxy_glBegin_unwrapped_dispatch_table_rewrite_ptr, /* glBegin_unwrapped */ + epoxy_glBeginConditionalRender_dispatch_table_rewrite_ptr, /* glBeginConditionalRender */ + epoxy_glBeginConditionalRenderNV_dispatch_table_rewrite_ptr, /* glBeginConditionalRenderNV */ + epoxy_glBeginConditionalRenderNVX_dispatch_table_rewrite_ptr, /* glBeginConditionalRenderNVX */ + epoxy_glBeginFragmentShaderATI_dispatch_table_rewrite_ptr, /* glBeginFragmentShaderATI */ + epoxy_glBeginOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glBeginOcclusionQueryNV */ + epoxy_glBeginPerfMonitorAMD_dispatch_table_rewrite_ptr, /* glBeginPerfMonitorAMD */ + epoxy_glBeginPerfQueryINTEL_dispatch_table_rewrite_ptr, /* glBeginPerfQueryINTEL */ + epoxy_glBeginQuery_dispatch_table_rewrite_ptr, /* glBeginQuery */ + epoxy_glBeginQueryARB_dispatch_table_rewrite_ptr, /* glBeginQueryARB */ + epoxy_glBeginQueryEXT_dispatch_table_rewrite_ptr, /* glBeginQueryEXT */ + epoxy_glBeginQueryIndexed_dispatch_table_rewrite_ptr, /* glBeginQueryIndexed */ + epoxy_glBeginTransformFeedback_dispatch_table_rewrite_ptr, /* glBeginTransformFeedback */ + epoxy_glBeginTransformFeedbackEXT_dispatch_table_rewrite_ptr, /* glBeginTransformFeedbackEXT */ + epoxy_glBeginTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glBeginTransformFeedbackNV */ + epoxy_glBeginVertexShaderEXT_dispatch_table_rewrite_ptr, /* glBeginVertexShaderEXT */ + epoxy_glBeginVideoCaptureNV_dispatch_table_rewrite_ptr, /* glBeginVideoCaptureNV */ + epoxy_glBindAttribLocation_dispatch_table_rewrite_ptr, /* glBindAttribLocation */ + epoxy_glBindAttribLocationARB_dispatch_table_rewrite_ptr, /* glBindAttribLocationARB */ + epoxy_glBindBuffer_dispatch_table_rewrite_ptr, /* glBindBuffer */ + epoxy_glBindBufferARB_dispatch_table_rewrite_ptr, /* glBindBufferARB */ + epoxy_glBindBufferBase_dispatch_table_rewrite_ptr, /* glBindBufferBase */ + epoxy_glBindBufferBaseEXT_dispatch_table_rewrite_ptr, /* glBindBufferBaseEXT */ + epoxy_glBindBufferBaseNV_dispatch_table_rewrite_ptr, /* glBindBufferBaseNV */ + epoxy_glBindBufferOffsetEXT_dispatch_table_rewrite_ptr, /* glBindBufferOffsetEXT */ + epoxy_glBindBufferOffsetNV_dispatch_table_rewrite_ptr, /* glBindBufferOffsetNV */ + epoxy_glBindBufferRange_dispatch_table_rewrite_ptr, /* glBindBufferRange */ + epoxy_glBindBufferRangeEXT_dispatch_table_rewrite_ptr, /* glBindBufferRangeEXT */ + epoxy_glBindBufferRangeNV_dispatch_table_rewrite_ptr, /* glBindBufferRangeNV */ + epoxy_glBindBuffersBase_dispatch_table_rewrite_ptr, /* glBindBuffersBase */ + epoxy_glBindBuffersRange_dispatch_table_rewrite_ptr, /* glBindBuffersRange */ + epoxy_glBindFragDataLocation_dispatch_table_rewrite_ptr, /* glBindFragDataLocation */ + epoxy_glBindFragDataLocationEXT_dispatch_table_rewrite_ptr, /* glBindFragDataLocationEXT */ + epoxy_glBindFragDataLocationIndexed_dispatch_table_rewrite_ptr, /* glBindFragDataLocationIndexed */ + epoxy_glBindFragDataLocationIndexedEXT_dispatch_table_rewrite_ptr, /* glBindFragDataLocationIndexedEXT */ + epoxy_glBindFragmentShaderATI_dispatch_table_rewrite_ptr, /* glBindFragmentShaderATI */ + epoxy_glBindFramebuffer_dispatch_table_rewrite_ptr, /* glBindFramebuffer */ + epoxy_glBindFramebufferEXT_dispatch_table_rewrite_ptr, /* glBindFramebufferEXT */ + epoxy_glBindFramebufferOES_dispatch_table_rewrite_ptr, /* glBindFramebufferOES */ + epoxy_glBindImageTexture_dispatch_table_rewrite_ptr, /* glBindImageTexture */ + epoxy_glBindImageTextureEXT_dispatch_table_rewrite_ptr, /* glBindImageTextureEXT */ + epoxy_glBindImageTextures_dispatch_table_rewrite_ptr, /* glBindImageTextures */ + epoxy_glBindLightParameterEXT_dispatch_table_rewrite_ptr, /* glBindLightParameterEXT */ + epoxy_glBindMaterialParameterEXT_dispatch_table_rewrite_ptr, /* glBindMaterialParameterEXT */ + epoxy_glBindMultiTextureEXT_dispatch_table_rewrite_ptr, /* glBindMultiTextureEXT */ + epoxy_glBindParameterEXT_dispatch_table_rewrite_ptr, /* glBindParameterEXT */ + epoxy_glBindProgramARB_dispatch_table_rewrite_ptr, /* glBindProgramARB */ + epoxy_glBindProgramNV_dispatch_table_rewrite_ptr, /* glBindProgramNV */ + epoxy_glBindProgramPipeline_dispatch_table_rewrite_ptr, /* glBindProgramPipeline */ + epoxy_glBindProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glBindProgramPipelineEXT */ + epoxy_glBindRenderbuffer_dispatch_table_rewrite_ptr, /* glBindRenderbuffer */ + epoxy_glBindRenderbufferEXT_dispatch_table_rewrite_ptr, /* glBindRenderbufferEXT */ + epoxy_glBindRenderbufferOES_dispatch_table_rewrite_ptr, /* glBindRenderbufferOES */ + epoxy_glBindSampler_dispatch_table_rewrite_ptr, /* glBindSampler */ + epoxy_glBindSamplers_dispatch_table_rewrite_ptr, /* glBindSamplers */ + epoxy_glBindTexGenParameterEXT_dispatch_table_rewrite_ptr, /* glBindTexGenParameterEXT */ + epoxy_glBindTexture_dispatch_table_rewrite_ptr, /* glBindTexture */ + epoxy_glBindTextureEXT_dispatch_table_rewrite_ptr, /* glBindTextureEXT */ + epoxy_glBindTextureUnit_dispatch_table_rewrite_ptr, /* glBindTextureUnit */ + epoxy_glBindTextureUnitParameterEXT_dispatch_table_rewrite_ptr, /* glBindTextureUnitParameterEXT */ + epoxy_glBindTextures_dispatch_table_rewrite_ptr, /* glBindTextures */ + epoxy_glBindTransformFeedback_dispatch_table_rewrite_ptr, /* glBindTransformFeedback */ + epoxy_glBindTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glBindTransformFeedbackNV */ + epoxy_glBindVertexArray_dispatch_table_rewrite_ptr, /* glBindVertexArray */ + epoxy_glBindVertexArrayAPPLE_dispatch_table_rewrite_ptr, /* glBindVertexArrayAPPLE */ + epoxy_glBindVertexArrayOES_dispatch_table_rewrite_ptr, /* glBindVertexArrayOES */ + epoxy_glBindVertexBuffer_dispatch_table_rewrite_ptr, /* glBindVertexBuffer */ + epoxy_glBindVertexBuffers_dispatch_table_rewrite_ptr, /* glBindVertexBuffers */ + epoxy_glBindVertexShaderEXT_dispatch_table_rewrite_ptr, /* glBindVertexShaderEXT */ + epoxy_glBindVideoCaptureStreamBufferNV_dispatch_table_rewrite_ptr, /* glBindVideoCaptureStreamBufferNV */ + epoxy_glBindVideoCaptureStreamTextureNV_dispatch_table_rewrite_ptr, /* glBindVideoCaptureStreamTextureNV */ + epoxy_glBinormal3bEXT_dispatch_table_rewrite_ptr, /* glBinormal3bEXT */ + epoxy_glBinormal3bvEXT_dispatch_table_rewrite_ptr, /* glBinormal3bvEXT */ + epoxy_glBinormal3dEXT_dispatch_table_rewrite_ptr, /* glBinormal3dEXT */ + epoxy_glBinormal3dvEXT_dispatch_table_rewrite_ptr, /* glBinormal3dvEXT */ + epoxy_glBinormal3fEXT_dispatch_table_rewrite_ptr, /* glBinormal3fEXT */ + epoxy_glBinormal3fvEXT_dispatch_table_rewrite_ptr, /* glBinormal3fvEXT */ + epoxy_glBinormal3iEXT_dispatch_table_rewrite_ptr, /* glBinormal3iEXT */ + epoxy_glBinormal3ivEXT_dispatch_table_rewrite_ptr, /* glBinormal3ivEXT */ + epoxy_glBinormal3sEXT_dispatch_table_rewrite_ptr, /* glBinormal3sEXT */ + epoxy_glBinormal3svEXT_dispatch_table_rewrite_ptr, /* glBinormal3svEXT */ + epoxy_glBinormalPointerEXT_dispatch_table_rewrite_ptr, /* glBinormalPointerEXT */ + epoxy_glBitmap_dispatch_table_rewrite_ptr, /* glBitmap */ + epoxy_glBitmapxOES_dispatch_table_rewrite_ptr, /* glBitmapxOES */ + epoxy_glBlendBarrier_dispatch_table_rewrite_ptr, /* glBlendBarrier */ + epoxy_glBlendBarrierKHR_dispatch_table_rewrite_ptr, /* glBlendBarrierKHR */ + epoxy_glBlendBarrierNV_dispatch_table_rewrite_ptr, /* glBlendBarrierNV */ + epoxy_glBlendColor_dispatch_table_rewrite_ptr, /* glBlendColor */ + epoxy_glBlendColorEXT_dispatch_table_rewrite_ptr, /* glBlendColorEXT */ + epoxy_glBlendColorxOES_dispatch_table_rewrite_ptr, /* glBlendColorxOES */ + epoxy_glBlendEquation_dispatch_table_rewrite_ptr, /* glBlendEquation */ + epoxy_glBlendEquationEXT_dispatch_table_rewrite_ptr, /* glBlendEquationEXT */ + epoxy_glBlendEquationIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendEquationIndexedAMD */ + epoxy_glBlendEquationOES_dispatch_table_rewrite_ptr, /* glBlendEquationOES */ + epoxy_glBlendEquationSeparate_dispatch_table_rewrite_ptr, /* glBlendEquationSeparate */ + epoxy_glBlendEquationSeparateEXT_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateEXT */ + epoxy_glBlendEquationSeparateIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateIndexedAMD */ + epoxy_glBlendEquationSeparateOES_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateOES */ + epoxy_glBlendEquationSeparatei_dispatch_table_rewrite_ptr, /* glBlendEquationSeparatei */ + epoxy_glBlendEquationSeparateiARB_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiARB */ + epoxy_glBlendEquationSeparateiEXT_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiEXT */ + epoxy_glBlendEquationSeparateiOES_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiOES */ + epoxy_glBlendEquationi_dispatch_table_rewrite_ptr, /* glBlendEquationi */ + epoxy_glBlendEquationiARB_dispatch_table_rewrite_ptr, /* glBlendEquationiARB */ + epoxy_glBlendEquationiEXT_dispatch_table_rewrite_ptr, /* glBlendEquationiEXT */ + epoxy_glBlendEquationiOES_dispatch_table_rewrite_ptr, /* glBlendEquationiOES */ + epoxy_glBlendFunc_dispatch_table_rewrite_ptr, /* glBlendFunc */ + epoxy_glBlendFuncIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendFuncIndexedAMD */ + epoxy_glBlendFuncSeparate_dispatch_table_rewrite_ptr, /* glBlendFuncSeparate */ + epoxy_glBlendFuncSeparateEXT_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateEXT */ + epoxy_glBlendFuncSeparateINGR_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateINGR */ + epoxy_glBlendFuncSeparateIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateIndexedAMD */ + epoxy_glBlendFuncSeparateOES_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateOES */ + epoxy_glBlendFuncSeparatei_dispatch_table_rewrite_ptr, /* glBlendFuncSeparatei */ + epoxy_glBlendFuncSeparateiARB_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiARB */ + epoxy_glBlendFuncSeparateiEXT_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiEXT */ + epoxy_glBlendFuncSeparateiOES_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiOES */ + epoxy_glBlendFunci_dispatch_table_rewrite_ptr, /* glBlendFunci */ + epoxy_glBlendFunciARB_dispatch_table_rewrite_ptr, /* glBlendFunciARB */ + epoxy_glBlendFunciEXT_dispatch_table_rewrite_ptr, /* glBlendFunciEXT */ + epoxy_glBlendFunciOES_dispatch_table_rewrite_ptr, /* glBlendFunciOES */ + epoxy_glBlendParameteriNV_dispatch_table_rewrite_ptr, /* glBlendParameteriNV */ + epoxy_glBlitFramebuffer_dispatch_table_rewrite_ptr, /* glBlitFramebuffer */ + epoxy_glBlitFramebufferANGLE_dispatch_table_rewrite_ptr, /* glBlitFramebufferANGLE */ + epoxy_glBlitFramebufferEXT_dispatch_table_rewrite_ptr, /* glBlitFramebufferEXT */ + epoxy_glBlitFramebufferNV_dispatch_table_rewrite_ptr, /* glBlitFramebufferNV */ + epoxy_glBlitNamedFramebuffer_dispatch_table_rewrite_ptr, /* glBlitNamedFramebuffer */ + epoxy_glBufferAddressRangeNV_dispatch_table_rewrite_ptr, /* glBufferAddressRangeNV */ + epoxy_glBufferData_dispatch_table_rewrite_ptr, /* glBufferData */ + epoxy_glBufferDataARB_dispatch_table_rewrite_ptr, /* glBufferDataARB */ + epoxy_glBufferPageCommitmentARB_dispatch_table_rewrite_ptr, /* glBufferPageCommitmentARB */ + epoxy_glBufferParameteriAPPLE_dispatch_table_rewrite_ptr, /* glBufferParameteriAPPLE */ + epoxy_glBufferStorage_dispatch_table_rewrite_ptr, /* glBufferStorage */ + epoxy_glBufferStorageEXT_dispatch_table_rewrite_ptr, /* glBufferStorageEXT */ + epoxy_glBufferSubData_dispatch_table_rewrite_ptr, /* glBufferSubData */ + epoxy_glBufferSubDataARB_dispatch_table_rewrite_ptr, /* glBufferSubDataARB */ + epoxy_glCallCommandListNV_dispatch_table_rewrite_ptr, /* glCallCommandListNV */ + epoxy_glCallList_dispatch_table_rewrite_ptr, /* glCallList */ + epoxy_glCallLists_dispatch_table_rewrite_ptr, /* glCallLists */ + epoxy_glCheckFramebufferStatus_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatus */ + epoxy_glCheckFramebufferStatusEXT_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatusEXT */ + epoxy_glCheckFramebufferStatusOES_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatusOES */ + epoxy_glCheckNamedFramebufferStatus_dispatch_table_rewrite_ptr, /* glCheckNamedFramebufferStatus */ + epoxy_glCheckNamedFramebufferStatusEXT_dispatch_table_rewrite_ptr, /* glCheckNamedFramebufferStatusEXT */ + epoxy_glClampColor_dispatch_table_rewrite_ptr, /* glClampColor */ + epoxy_glClampColorARB_dispatch_table_rewrite_ptr, /* glClampColorARB */ + epoxy_glClear_dispatch_table_rewrite_ptr, /* glClear */ + epoxy_glClearAccum_dispatch_table_rewrite_ptr, /* glClearAccum */ + epoxy_glClearAccumxOES_dispatch_table_rewrite_ptr, /* glClearAccumxOES */ + epoxy_glClearBufferData_dispatch_table_rewrite_ptr, /* glClearBufferData */ + epoxy_glClearBufferSubData_dispatch_table_rewrite_ptr, /* glClearBufferSubData */ + epoxy_glClearBufferfi_dispatch_table_rewrite_ptr, /* glClearBufferfi */ + epoxy_glClearBufferfv_dispatch_table_rewrite_ptr, /* glClearBufferfv */ + epoxy_glClearBufferiv_dispatch_table_rewrite_ptr, /* glClearBufferiv */ + epoxy_glClearBufferuiv_dispatch_table_rewrite_ptr, /* glClearBufferuiv */ + epoxy_glClearColor_dispatch_table_rewrite_ptr, /* glClearColor */ + epoxy_glClearColorIiEXT_dispatch_table_rewrite_ptr, /* glClearColorIiEXT */ + epoxy_glClearColorIuiEXT_dispatch_table_rewrite_ptr, /* glClearColorIuiEXT */ + epoxy_glClearColorx_dispatch_table_rewrite_ptr, /* glClearColorx */ + epoxy_glClearColorxOES_dispatch_table_rewrite_ptr, /* glClearColorxOES */ + epoxy_glClearDepth_dispatch_table_rewrite_ptr, /* glClearDepth */ + epoxy_glClearDepthdNV_dispatch_table_rewrite_ptr, /* glClearDepthdNV */ + epoxy_glClearDepthf_dispatch_table_rewrite_ptr, /* glClearDepthf */ + epoxy_glClearDepthfOES_dispatch_table_rewrite_ptr, /* glClearDepthfOES */ + epoxy_glClearDepthx_dispatch_table_rewrite_ptr, /* glClearDepthx */ + epoxy_glClearDepthxOES_dispatch_table_rewrite_ptr, /* glClearDepthxOES */ + epoxy_glClearIndex_dispatch_table_rewrite_ptr, /* glClearIndex */ + epoxy_glClearNamedBufferData_dispatch_table_rewrite_ptr, /* glClearNamedBufferData */ + epoxy_glClearNamedBufferDataEXT_dispatch_table_rewrite_ptr, /* glClearNamedBufferDataEXT */ + epoxy_glClearNamedBufferSubData_dispatch_table_rewrite_ptr, /* glClearNamedBufferSubData */ + epoxy_glClearNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glClearNamedBufferSubDataEXT */ + epoxy_glClearNamedFramebufferfi_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferfi */ + epoxy_glClearNamedFramebufferfv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferfv */ + epoxy_glClearNamedFramebufferiv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferiv */ + epoxy_glClearNamedFramebufferuiv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferuiv */ + epoxy_glClearStencil_dispatch_table_rewrite_ptr, /* glClearStencil */ + epoxy_glClearTexImage_dispatch_table_rewrite_ptr, /* glClearTexImage */ + epoxy_glClearTexSubImage_dispatch_table_rewrite_ptr, /* glClearTexSubImage */ + epoxy_glClientActiveTexture_dispatch_table_rewrite_ptr, /* glClientActiveTexture */ + epoxy_glClientActiveTextureARB_dispatch_table_rewrite_ptr, /* glClientActiveTextureARB */ + epoxy_glClientActiveVertexStreamATI_dispatch_table_rewrite_ptr, /* glClientActiveVertexStreamATI */ + epoxy_glClientAttribDefaultEXT_dispatch_table_rewrite_ptr, /* glClientAttribDefaultEXT */ + epoxy_glClientWaitSync_dispatch_table_rewrite_ptr, /* glClientWaitSync */ + epoxy_glClientWaitSyncAPPLE_dispatch_table_rewrite_ptr, /* glClientWaitSyncAPPLE */ + epoxy_glClipControl_dispatch_table_rewrite_ptr, /* glClipControl */ + epoxy_glClipPlane_dispatch_table_rewrite_ptr, /* glClipPlane */ + epoxy_glClipPlanef_dispatch_table_rewrite_ptr, /* glClipPlanef */ + epoxy_glClipPlanefIMG_dispatch_table_rewrite_ptr, /* glClipPlanefIMG */ + epoxy_glClipPlanefOES_dispatch_table_rewrite_ptr, /* glClipPlanefOES */ + epoxy_glClipPlanex_dispatch_table_rewrite_ptr, /* glClipPlanex */ + epoxy_glClipPlanexIMG_dispatch_table_rewrite_ptr, /* glClipPlanexIMG */ + epoxy_glClipPlanexOES_dispatch_table_rewrite_ptr, /* glClipPlanexOES */ + epoxy_glColor3b_dispatch_table_rewrite_ptr, /* glColor3b */ + epoxy_glColor3bv_dispatch_table_rewrite_ptr, /* glColor3bv */ + epoxy_glColor3d_dispatch_table_rewrite_ptr, /* glColor3d */ + epoxy_glColor3dv_dispatch_table_rewrite_ptr, /* glColor3dv */ + epoxy_glColor3f_dispatch_table_rewrite_ptr, /* glColor3f */ + epoxy_glColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor3fVertex3fSUN */ + epoxy_glColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor3fVertex3fvSUN */ + epoxy_glColor3fv_dispatch_table_rewrite_ptr, /* glColor3fv */ + epoxy_glColor3hNV_dispatch_table_rewrite_ptr, /* glColor3hNV */ + epoxy_glColor3hvNV_dispatch_table_rewrite_ptr, /* glColor3hvNV */ + epoxy_glColor3i_dispatch_table_rewrite_ptr, /* glColor3i */ + epoxy_glColor3iv_dispatch_table_rewrite_ptr, /* glColor3iv */ + epoxy_glColor3s_dispatch_table_rewrite_ptr, /* glColor3s */ + epoxy_glColor3sv_dispatch_table_rewrite_ptr, /* glColor3sv */ + epoxy_glColor3ub_dispatch_table_rewrite_ptr, /* glColor3ub */ + epoxy_glColor3ubv_dispatch_table_rewrite_ptr, /* glColor3ubv */ + epoxy_glColor3ui_dispatch_table_rewrite_ptr, /* glColor3ui */ + epoxy_glColor3uiv_dispatch_table_rewrite_ptr, /* glColor3uiv */ + epoxy_glColor3us_dispatch_table_rewrite_ptr, /* glColor3us */ + epoxy_glColor3usv_dispatch_table_rewrite_ptr, /* glColor3usv */ + epoxy_glColor3xOES_dispatch_table_rewrite_ptr, /* glColor3xOES */ + epoxy_glColor3xvOES_dispatch_table_rewrite_ptr, /* glColor3xvOES */ + epoxy_glColor4b_dispatch_table_rewrite_ptr, /* glColor4b */ + epoxy_glColor4bv_dispatch_table_rewrite_ptr, /* glColor4bv */ + epoxy_glColor4d_dispatch_table_rewrite_ptr, /* glColor4d */ + epoxy_glColor4dv_dispatch_table_rewrite_ptr, /* glColor4dv */ + epoxy_glColor4f_dispatch_table_rewrite_ptr, /* glColor4f */ + epoxy_glColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor4fNormal3fVertex3fSUN */ + epoxy_glColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor4fNormal3fVertex3fvSUN */ + epoxy_glColor4fv_dispatch_table_rewrite_ptr, /* glColor4fv */ + epoxy_glColor4hNV_dispatch_table_rewrite_ptr, /* glColor4hNV */ + epoxy_glColor4hvNV_dispatch_table_rewrite_ptr, /* glColor4hvNV */ + epoxy_glColor4i_dispatch_table_rewrite_ptr, /* glColor4i */ + epoxy_glColor4iv_dispatch_table_rewrite_ptr, /* glColor4iv */ + epoxy_glColor4s_dispatch_table_rewrite_ptr, /* glColor4s */ + epoxy_glColor4sv_dispatch_table_rewrite_ptr, /* glColor4sv */ + epoxy_glColor4ub_dispatch_table_rewrite_ptr, /* glColor4ub */ + epoxy_glColor4ubVertex2fSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex2fSUN */ + epoxy_glColor4ubVertex2fvSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex2fvSUN */ + epoxy_glColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex3fSUN */ + epoxy_glColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex3fvSUN */ + epoxy_glColor4ubv_dispatch_table_rewrite_ptr, /* glColor4ubv */ + epoxy_glColor4ui_dispatch_table_rewrite_ptr, /* glColor4ui */ + epoxy_glColor4uiv_dispatch_table_rewrite_ptr, /* glColor4uiv */ + epoxy_glColor4us_dispatch_table_rewrite_ptr, /* glColor4us */ + epoxy_glColor4usv_dispatch_table_rewrite_ptr, /* glColor4usv */ + epoxy_glColor4x_dispatch_table_rewrite_ptr, /* glColor4x */ + epoxy_glColor4xOES_dispatch_table_rewrite_ptr, /* glColor4xOES */ + epoxy_glColor4xvOES_dispatch_table_rewrite_ptr, /* glColor4xvOES */ + epoxy_glColorFormatNV_dispatch_table_rewrite_ptr, /* glColorFormatNV */ + epoxy_glColorFragmentOp1ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp1ATI */ + epoxy_glColorFragmentOp2ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp2ATI */ + epoxy_glColorFragmentOp3ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp3ATI */ + epoxy_glColorMask_dispatch_table_rewrite_ptr, /* glColorMask */ + epoxy_glColorMaskIndexedEXT_dispatch_table_rewrite_ptr, /* glColorMaskIndexedEXT */ + epoxy_glColorMaski_dispatch_table_rewrite_ptr, /* glColorMaski */ + epoxy_glColorMaskiEXT_dispatch_table_rewrite_ptr, /* glColorMaskiEXT */ + epoxy_glColorMaskiOES_dispatch_table_rewrite_ptr, /* glColorMaskiOES */ + epoxy_glColorMaterial_dispatch_table_rewrite_ptr, /* glColorMaterial */ + epoxy_glColorP3ui_dispatch_table_rewrite_ptr, /* glColorP3ui */ + epoxy_glColorP3uiv_dispatch_table_rewrite_ptr, /* glColorP3uiv */ + epoxy_glColorP4ui_dispatch_table_rewrite_ptr, /* glColorP4ui */ + epoxy_glColorP4uiv_dispatch_table_rewrite_ptr, /* glColorP4uiv */ + epoxy_glColorPointer_dispatch_table_rewrite_ptr, /* glColorPointer */ + epoxy_glColorPointerEXT_dispatch_table_rewrite_ptr, /* glColorPointerEXT */ + epoxy_glColorPointerListIBM_dispatch_table_rewrite_ptr, /* glColorPointerListIBM */ + epoxy_glColorPointervINTEL_dispatch_table_rewrite_ptr, /* glColorPointervINTEL */ + epoxy_glColorSubTable_dispatch_table_rewrite_ptr, /* glColorSubTable */ + epoxy_glColorSubTableEXT_dispatch_table_rewrite_ptr, /* glColorSubTableEXT */ + epoxy_glColorTable_dispatch_table_rewrite_ptr, /* glColorTable */ + epoxy_glColorTableEXT_dispatch_table_rewrite_ptr, /* glColorTableEXT */ + epoxy_glColorTableParameterfv_dispatch_table_rewrite_ptr, /* glColorTableParameterfv */ + epoxy_glColorTableParameterfvSGI_dispatch_table_rewrite_ptr, /* glColorTableParameterfvSGI */ + epoxy_glColorTableParameteriv_dispatch_table_rewrite_ptr, /* glColorTableParameteriv */ + epoxy_glColorTableParameterivSGI_dispatch_table_rewrite_ptr, /* glColorTableParameterivSGI */ + epoxy_glColorTableSGI_dispatch_table_rewrite_ptr, /* glColorTableSGI */ + epoxy_glCombinerInputNV_dispatch_table_rewrite_ptr, /* glCombinerInputNV */ + epoxy_glCombinerOutputNV_dispatch_table_rewrite_ptr, /* glCombinerOutputNV */ + epoxy_glCombinerParameterfNV_dispatch_table_rewrite_ptr, /* glCombinerParameterfNV */ + epoxy_glCombinerParameterfvNV_dispatch_table_rewrite_ptr, /* glCombinerParameterfvNV */ + epoxy_glCombinerParameteriNV_dispatch_table_rewrite_ptr, /* glCombinerParameteriNV */ + epoxy_glCombinerParameterivNV_dispatch_table_rewrite_ptr, /* glCombinerParameterivNV */ + epoxy_glCombinerStageParameterfvNV_dispatch_table_rewrite_ptr, /* glCombinerStageParameterfvNV */ + epoxy_glCommandListSegmentsNV_dispatch_table_rewrite_ptr, /* glCommandListSegmentsNV */ + epoxy_glCompileCommandListNV_dispatch_table_rewrite_ptr, /* glCompileCommandListNV */ + epoxy_glCompileShader_dispatch_table_rewrite_ptr, /* glCompileShader */ + epoxy_glCompileShaderARB_dispatch_table_rewrite_ptr, /* glCompileShaderARB */ + epoxy_glCompileShaderIncludeARB_dispatch_table_rewrite_ptr, /* glCompileShaderIncludeARB */ + epoxy_glCompressedMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage1DEXT */ + epoxy_glCompressedMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage2DEXT */ + epoxy_glCompressedMultiTexImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage3DEXT */ + epoxy_glCompressedMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage1DEXT */ + epoxy_glCompressedMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage2DEXT */ + epoxy_glCompressedMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage3DEXT */ + epoxy_glCompressedTexImage1D_dispatch_table_rewrite_ptr, /* glCompressedTexImage1D */ + epoxy_glCompressedTexImage1DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage1DARB */ + epoxy_glCompressedTexImage2D_dispatch_table_rewrite_ptr, /* glCompressedTexImage2D */ + epoxy_glCompressedTexImage2DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage2DARB */ + epoxy_glCompressedTexImage3D_dispatch_table_rewrite_ptr, /* glCompressedTexImage3D */ + epoxy_glCompressedTexImage3DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage3DARB */ + epoxy_glCompressedTexImage3DOES_dispatch_table_rewrite_ptr, /* glCompressedTexImage3DOES */ + epoxy_glCompressedTexSubImage1D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage1D */ + epoxy_glCompressedTexSubImage1DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage1DARB */ + epoxy_glCompressedTexSubImage2D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage2D */ + epoxy_glCompressedTexSubImage2DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage2DARB */ + epoxy_glCompressedTexSubImage3D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3D */ + epoxy_glCompressedTexSubImage3DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3DARB */ + epoxy_glCompressedTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3DOES */ + epoxy_glCompressedTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage1DEXT */ + epoxy_glCompressedTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage2DEXT */ + epoxy_glCompressedTextureImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage3DEXT */ + epoxy_glCompressedTextureSubImage1D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage1D */ + epoxy_glCompressedTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage1DEXT */ + epoxy_glCompressedTextureSubImage2D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage2D */ + epoxy_glCompressedTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage2DEXT */ + epoxy_glCompressedTextureSubImage3D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage3D */ + epoxy_glCompressedTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage3DEXT */ + epoxy_glConservativeRasterParameterfNV_dispatch_table_rewrite_ptr, /* glConservativeRasterParameterfNV */ + epoxy_glConvolutionFilter1D_dispatch_table_rewrite_ptr, /* glConvolutionFilter1D */ + epoxy_glConvolutionFilter1DEXT_dispatch_table_rewrite_ptr, /* glConvolutionFilter1DEXT */ + epoxy_glConvolutionFilter2D_dispatch_table_rewrite_ptr, /* glConvolutionFilter2D */ + epoxy_glConvolutionFilter2DEXT_dispatch_table_rewrite_ptr, /* glConvolutionFilter2DEXT */ + epoxy_glConvolutionParameterf_dispatch_table_rewrite_ptr, /* glConvolutionParameterf */ + epoxy_glConvolutionParameterfEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterfEXT */ + epoxy_glConvolutionParameterfv_dispatch_table_rewrite_ptr, /* glConvolutionParameterfv */ + epoxy_glConvolutionParameterfvEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterfvEXT */ + epoxy_glConvolutionParameteri_dispatch_table_rewrite_ptr, /* glConvolutionParameteri */ + epoxy_glConvolutionParameteriEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameteriEXT */ + epoxy_glConvolutionParameteriv_dispatch_table_rewrite_ptr, /* glConvolutionParameteriv */ + epoxy_glConvolutionParameterivEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterivEXT */ + epoxy_glConvolutionParameterxOES_dispatch_table_rewrite_ptr, /* glConvolutionParameterxOES */ + epoxy_glConvolutionParameterxvOES_dispatch_table_rewrite_ptr, /* glConvolutionParameterxvOES */ + epoxy_glCopyBufferSubData_dispatch_table_rewrite_ptr, /* glCopyBufferSubData */ + epoxy_glCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glCopyBufferSubDataNV */ + epoxy_glCopyColorSubTable_dispatch_table_rewrite_ptr, /* glCopyColorSubTable */ + epoxy_glCopyColorSubTableEXT_dispatch_table_rewrite_ptr, /* glCopyColorSubTableEXT */ + epoxy_glCopyColorTable_dispatch_table_rewrite_ptr, /* glCopyColorTable */ + epoxy_glCopyColorTableSGI_dispatch_table_rewrite_ptr, /* glCopyColorTableSGI */ + epoxy_glCopyConvolutionFilter1D_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter1D */ + epoxy_glCopyConvolutionFilter1DEXT_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter1DEXT */ + epoxy_glCopyConvolutionFilter2D_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter2D */ + epoxy_glCopyConvolutionFilter2DEXT_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter2DEXT */ + epoxy_glCopyImageSubData_dispatch_table_rewrite_ptr, /* glCopyImageSubData */ + epoxy_glCopyImageSubDataEXT_dispatch_table_rewrite_ptr, /* glCopyImageSubDataEXT */ + epoxy_glCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* glCopyImageSubDataNV */ + epoxy_glCopyImageSubDataOES_dispatch_table_rewrite_ptr, /* glCopyImageSubDataOES */ + epoxy_glCopyMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexImage1DEXT */ + epoxy_glCopyMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexImage2DEXT */ + epoxy_glCopyMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage1DEXT */ + epoxy_glCopyMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage2DEXT */ + epoxy_glCopyMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage3DEXT */ + epoxy_glCopyNamedBufferSubData_dispatch_table_rewrite_ptr, /* glCopyNamedBufferSubData */ + epoxy_glCopyPathNV_dispatch_table_rewrite_ptr, /* glCopyPathNV */ + epoxy_glCopyPixels_dispatch_table_rewrite_ptr, /* glCopyPixels */ + epoxy_glCopyTexImage1D_dispatch_table_rewrite_ptr, /* glCopyTexImage1D */ + epoxy_glCopyTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTexImage1DEXT */ + epoxy_glCopyTexImage2D_dispatch_table_rewrite_ptr, /* glCopyTexImage2D */ + epoxy_glCopyTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTexImage2DEXT */ + epoxy_glCopyTexSubImage1D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage1D */ + epoxy_glCopyTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage1DEXT */ + epoxy_glCopyTexSubImage2D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage2D */ + epoxy_glCopyTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage2DEXT */ + epoxy_glCopyTexSubImage3D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3D */ + epoxy_glCopyTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3DEXT */ + epoxy_glCopyTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3DOES */ + epoxy_glCopyTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureImage1DEXT */ + epoxy_glCopyTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureImage2DEXT */ + epoxy_glCopyTextureLevelsAPPLE_dispatch_table_rewrite_ptr, /* glCopyTextureLevelsAPPLE */ + epoxy_glCopyTextureSubImage1D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage1D */ + epoxy_glCopyTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage1DEXT */ + epoxy_glCopyTextureSubImage2D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage2D */ + epoxy_glCopyTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage2DEXT */ + epoxy_glCopyTextureSubImage3D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage3D */ + epoxy_glCopyTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage3DEXT */ + epoxy_glCoverFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glCoverFillPathInstancedNV */ + epoxy_glCoverFillPathNV_dispatch_table_rewrite_ptr, /* glCoverFillPathNV */ + epoxy_glCoverStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glCoverStrokePathInstancedNV */ + epoxy_glCoverStrokePathNV_dispatch_table_rewrite_ptr, /* glCoverStrokePathNV */ + epoxy_glCoverageMaskNV_dispatch_table_rewrite_ptr, /* glCoverageMaskNV */ + epoxy_glCoverageModulationNV_dispatch_table_rewrite_ptr, /* glCoverageModulationNV */ + epoxy_glCoverageModulationTableNV_dispatch_table_rewrite_ptr, /* glCoverageModulationTableNV */ + epoxy_glCoverageOperationNV_dispatch_table_rewrite_ptr, /* glCoverageOperationNV */ + epoxy_glCreateBuffers_dispatch_table_rewrite_ptr, /* glCreateBuffers */ + epoxy_glCreateCommandListsNV_dispatch_table_rewrite_ptr, /* glCreateCommandListsNV */ + epoxy_glCreateFramebuffers_dispatch_table_rewrite_ptr, /* glCreateFramebuffers */ + epoxy_glCreatePerfQueryINTEL_dispatch_table_rewrite_ptr, /* glCreatePerfQueryINTEL */ + epoxy_glCreateProgram_dispatch_table_rewrite_ptr, /* glCreateProgram */ + epoxy_glCreateProgramObjectARB_dispatch_table_rewrite_ptr, /* glCreateProgramObjectARB */ + epoxy_glCreateProgramPipelines_dispatch_table_rewrite_ptr, /* glCreateProgramPipelines */ + epoxy_glCreateQueries_dispatch_table_rewrite_ptr, /* glCreateQueries */ + epoxy_glCreateRenderbuffers_dispatch_table_rewrite_ptr, /* glCreateRenderbuffers */ + epoxy_glCreateSamplers_dispatch_table_rewrite_ptr, /* glCreateSamplers */ + epoxy_glCreateShader_dispatch_table_rewrite_ptr, /* glCreateShader */ + epoxy_glCreateShaderObjectARB_dispatch_table_rewrite_ptr, /* glCreateShaderObjectARB */ + epoxy_glCreateShaderProgramEXT_dispatch_table_rewrite_ptr, /* glCreateShaderProgramEXT */ + epoxy_glCreateShaderProgramv_dispatch_table_rewrite_ptr, /* glCreateShaderProgramv */ + epoxy_glCreateShaderProgramvEXT_dispatch_table_rewrite_ptr, /* glCreateShaderProgramvEXT */ + epoxy_glCreateStatesNV_dispatch_table_rewrite_ptr, /* glCreateStatesNV */ + epoxy_glCreateSyncFromCLeventARB_dispatch_table_rewrite_ptr, /* glCreateSyncFromCLeventARB */ + epoxy_glCreateTextures_dispatch_table_rewrite_ptr, /* glCreateTextures */ + epoxy_glCreateTransformFeedbacks_dispatch_table_rewrite_ptr, /* glCreateTransformFeedbacks */ + epoxy_glCreateVertexArrays_dispatch_table_rewrite_ptr, /* glCreateVertexArrays */ + epoxy_glCullFace_dispatch_table_rewrite_ptr, /* glCullFace */ + epoxy_glCullParameterdvEXT_dispatch_table_rewrite_ptr, /* glCullParameterdvEXT */ + epoxy_glCullParameterfvEXT_dispatch_table_rewrite_ptr, /* glCullParameterfvEXT */ + epoxy_glCurrentPaletteMatrixARB_dispatch_table_rewrite_ptr, /* glCurrentPaletteMatrixARB */ + epoxy_glCurrentPaletteMatrixOES_dispatch_table_rewrite_ptr, /* glCurrentPaletteMatrixOES */ + epoxy_glDebugMessageCallback_dispatch_table_rewrite_ptr, /* glDebugMessageCallback */ + epoxy_glDebugMessageCallbackAMD_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackAMD */ + epoxy_glDebugMessageCallbackARB_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackARB */ + epoxy_glDebugMessageCallbackKHR_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackKHR */ + epoxy_glDebugMessageControl_dispatch_table_rewrite_ptr, /* glDebugMessageControl */ + epoxy_glDebugMessageControlARB_dispatch_table_rewrite_ptr, /* glDebugMessageControlARB */ + epoxy_glDebugMessageControlKHR_dispatch_table_rewrite_ptr, /* glDebugMessageControlKHR */ + epoxy_glDebugMessageEnableAMD_dispatch_table_rewrite_ptr, /* glDebugMessageEnableAMD */ + epoxy_glDebugMessageInsert_dispatch_table_rewrite_ptr, /* glDebugMessageInsert */ + epoxy_glDebugMessageInsertAMD_dispatch_table_rewrite_ptr, /* glDebugMessageInsertAMD */ + epoxy_glDebugMessageInsertARB_dispatch_table_rewrite_ptr, /* glDebugMessageInsertARB */ + epoxy_glDebugMessageInsertKHR_dispatch_table_rewrite_ptr, /* glDebugMessageInsertKHR */ + epoxy_glDeformSGIX_dispatch_table_rewrite_ptr, /* glDeformSGIX */ + epoxy_glDeformationMap3dSGIX_dispatch_table_rewrite_ptr, /* glDeformationMap3dSGIX */ + epoxy_glDeformationMap3fSGIX_dispatch_table_rewrite_ptr, /* glDeformationMap3fSGIX */ + epoxy_glDeleteAsyncMarkersSGIX_dispatch_table_rewrite_ptr, /* glDeleteAsyncMarkersSGIX */ + epoxy_glDeleteBuffers_dispatch_table_rewrite_ptr, /* glDeleteBuffers */ + epoxy_glDeleteBuffersARB_dispatch_table_rewrite_ptr, /* glDeleteBuffersARB */ + epoxy_glDeleteCommandListsNV_dispatch_table_rewrite_ptr, /* glDeleteCommandListsNV */ + epoxy_glDeleteFencesAPPLE_dispatch_table_rewrite_ptr, /* glDeleteFencesAPPLE */ + epoxy_glDeleteFencesNV_dispatch_table_rewrite_ptr, /* glDeleteFencesNV */ + epoxy_glDeleteFragmentShaderATI_dispatch_table_rewrite_ptr, /* glDeleteFragmentShaderATI */ + epoxy_glDeleteFramebuffers_dispatch_table_rewrite_ptr, /* glDeleteFramebuffers */ + epoxy_glDeleteFramebuffersEXT_dispatch_table_rewrite_ptr, /* glDeleteFramebuffersEXT */ + epoxy_glDeleteFramebuffersOES_dispatch_table_rewrite_ptr, /* glDeleteFramebuffersOES */ + epoxy_glDeleteLists_dispatch_table_rewrite_ptr, /* glDeleteLists */ + epoxy_glDeleteNamedStringARB_dispatch_table_rewrite_ptr, /* glDeleteNamedStringARB */ + epoxy_glDeleteNamesAMD_dispatch_table_rewrite_ptr, /* glDeleteNamesAMD */ + epoxy_glDeleteObjectARB_dispatch_table_rewrite_ptr, /* glDeleteObjectARB */ + epoxy_glDeleteOcclusionQueriesNV_dispatch_table_rewrite_ptr, /* glDeleteOcclusionQueriesNV */ + epoxy_glDeletePathsNV_dispatch_table_rewrite_ptr, /* glDeletePathsNV */ + epoxy_glDeletePerfMonitorsAMD_dispatch_table_rewrite_ptr, /* glDeletePerfMonitorsAMD */ + epoxy_glDeletePerfQueryINTEL_dispatch_table_rewrite_ptr, /* glDeletePerfQueryINTEL */ + epoxy_glDeleteProgram_dispatch_table_rewrite_ptr, /* glDeleteProgram */ + epoxy_glDeleteProgramPipelines_dispatch_table_rewrite_ptr, /* glDeleteProgramPipelines */ + epoxy_glDeleteProgramPipelinesEXT_dispatch_table_rewrite_ptr, /* glDeleteProgramPipelinesEXT */ + epoxy_glDeleteProgramsARB_dispatch_table_rewrite_ptr, /* glDeleteProgramsARB */ + epoxy_glDeleteProgramsNV_dispatch_table_rewrite_ptr, /* glDeleteProgramsNV */ + epoxy_glDeleteQueries_dispatch_table_rewrite_ptr, /* glDeleteQueries */ + epoxy_glDeleteQueriesARB_dispatch_table_rewrite_ptr, /* glDeleteQueriesARB */ + epoxy_glDeleteQueriesEXT_dispatch_table_rewrite_ptr, /* glDeleteQueriesEXT */ + epoxy_glDeleteRenderbuffers_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffers */ + epoxy_glDeleteRenderbuffersEXT_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffersEXT */ + epoxy_glDeleteRenderbuffersOES_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffersOES */ + epoxy_glDeleteSamplers_dispatch_table_rewrite_ptr, /* glDeleteSamplers */ + epoxy_glDeleteShader_dispatch_table_rewrite_ptr, /* glDeleteShader */ + epoxy_glDeleteStatesNV_dispatch_table_rewrite_ptr, /* glDeleteStatesNV */ + epoxy_glDeleteSync_dispatch_table_rewrite_ptr, /* glDeleteSync */ + epoxy_glDeleteSyncAPPLE_dispatch_table_rewrite_ptr, /* glDeleteSyncAPPLE */ + epoxy_glDeleteTextures_dispatch_table_rewrite_ptr, /* glDeleteTextures */ + epoxy_glDeleteTexturesEXT_dispatch_table_rewrite_ptr, /* glDeleteTexturesEXT */ + epoxy_glDeleteTransformFeedbacks_dispatch_table_rewrite_ptr, /* glDeleteTransformFeedbacks */ + epoxy_glDeleteTransformFeedbacksNV_dispatch_table_rewrite_ptr, /* glDeleteTransformFeedbacksNV */ + epoxy_glDeleteVertexArrays_dispatch_table_rewrite_ptr, /* glDeleteVertexArrays */ + epoxy_glDeleteVertexArraysAPPLE_dispatch_table_rewrite_ptr, /* glDeleteVertexArraysAPPLE */ + epoxy_glDeleteVertexArraysOES_dispatch_table_rewrite_ptr, /* glDeleteVertexArraysOES */ + epoxy_glDeleteVertexShaderEXT_dispatch_table_rewrite_ptr, /* glDeleteVertexShaderEXT */ + epoxy_glDepthBoundsEXT_dispatch_table_rewrite_ptr, /* glDepthBoundsEXT */ + epoxy_glDepthBoundsdNV_dispatch_table_rewrite_ptr, /* glDepthBoundsdNV */ + epoxy_glDepthFunc_dispatch_table_rewrite_ptr, /* glDepthFunc */ + epoxy_glDepthMask_dispatch_table_rewrite_ptr, /* glDepthMask */ + epoxy_glDepthRange_dispatch_table_rewrite_ptr, /* glDepthRange */ + epoxy_glDepthRangeArrayfvNV_dispatch_table_rewrite_ptr, /* glDepthRangeArrayfvNV */ + epoxy_glDepthRangeArrayv_dispatch_table_rewrite_ptr, /* glDepthRangeArrayv */ + epoxy_glDepthRangeIndexed_dispatch_table_rewrite_ptr, /* glDepthRangeIndexed */ + epoxy_glDepthRangeIndexedfNV_dispatch_table_rewrite_ptr, /* glDepthRangeIndexedfNV */ + epoxy_glDepthRangedNV_dispatch_table_rewrite_ptr, /* glDepthRangedNV */ + epoxy_glDepthRangef_dispatch_table_rewrite_ptr, /* glDepthRangef */ + epoxy_glDepthRangefOES_dispatch_table_rewrite_ptr, /* glDepthRangefOES */ + epoxy_glDepthRangex_dispatch_table_rewrite_ptr, /* glDepthRangex */ + epoxy_glDepthRangexOES_dispatch_table_rewrite_ptr, /* glDepthRangexOES */ + epoxy_glDetachObjectARB_dispatch_table_rewrite_ptr, /* glDetachObjectARB */ + epoxy_glDetachShader_dispatch_table_rewrite_ptr, /* glDetachShader */ + epoxy_glDetailTexFuncSGIS_dispatch_table_rewrite_ptr, /* glDetailTexFuncSGIS */ + epoxy_glDisable_dispatch_table_rewrite_ptr, /* glDisable */ + epoxy_glDisableClientState_dispatch_table_rewrite_ptr, /* glDisableClientState */ + epoxy_glDisableClientStateIndexedEXT_dispatch_table_rewrite_ptr, /* glDisableClientStateIndexedEXT */ + epoxy_glDisableClientStateiEXT_dispatch_table_rewrite_ptr, /* glDisableClientStateiEXT */ + epoxy_glDisableDriverControlQCOM_dispatch_table_rewrite_ptr, /* glDisableDriverControlQCOM */ + epoxy_glDisableIndexedEXT_dispatch_table_rewrite_ptr, /* glDisableIndexedEXT */ + epoxy_glDisableVariantClientStateEXT_dispatch_table_rewrite_ptr, /* glDisableVariantClientStateEXT */ + epoxy_glDisableVertexArrayAttrib_dispatch_table_rewrite_ptr, /* glDisableVertexArrayAttrib */ + epoxy_glDisableVertexArrayAttribEXT_dispatch_table_rewrite_ptr, /* glDisableVertexArrayAttribEXT */ + epoxy_glDisableVertexArrayEXT_dispatch_table_rewrite_ptr, /* glDisableVertexArrayEXT */ + epoxy_glDisableVertexAttribAPPLE_dispatch_table_rewrite_ptr, /* glDisableVertexAttribAPPLE */ + epoxy_glDisableVertexAttribArray_dispatch_table_rewrite_ptr, /* glDisableVertexAttribArray */ + epoxy_glDisableVertexAttribArrayARB_dispatch_table_rewrite_ptr, /* glDisableVertexAttribArrayARB */ + epoxy_glDisablei_dispatch_table_rewrite_ptr, /* glDisablei */ + epoxy_glDisableiEXT_dispatch_table_rewrite_ptr, /* glDisableiEXT */ + epoxy_glDisableiNV_dispatch_table_rewrite_ptr, /* glDisableiNV */ + epoxy_glDisableiOES_dispatch_table_rewrite_ptr, /* glDisableiOES */ + epoxy_glDiscardFramebufferEXT_dispatch_table_rewrite_ptr, /* glDiscardFramebufferEXT */ + epoxy_glDispatchCompute_dispatch_table_rewrite_ptr, /* glDispatchCompute */ + epoxy_glDispatchComputeGroupSizeARB_dispatch_table_rewrite_ptr, /* glDispatchComputeGroupSizeARB */ + epoxy_glDispatchComputeIndirect_dispatch_table_rewrite_ptr, /* glDispatchComputeIndirect */ + epoxy_glDrawArrays_dispatch_table_rewrite_ptr, /* glDrawArrays */ + epoxy_glDrawArraysEXT_dispatch_table_rewrite_ptr, /* glDrawArraysEXT */ + epoxy_glDrawArraysIndirect_dispatch_table_rewrite_ptr, /* glDrawArraysIndirect */ + epoxy_glDrawArraysInstanced_dispatch_table_rewrite_ptr, /* glDrawArraysInstanced */ + epoxy_glDrawArraysInstancedANGLE_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedANGLE */ + epoxy_glDrawArraysInstancedARB_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedARB */ + epoxy_glDrawArraysInstancedBaseInstance_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedBaseInstance */ + epoxy_glDrawArraysInstancedBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedBaseInstanceEXT */ + epoxy_glDrawArraysInstancedEXT_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedEXT */ + epoxy_glDrawArraysInstancedNV_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedNV */ + epoxy_glDrawBuffer_dispatch_table_rewrite_ptr, /* glDrawBuffer */ + epoxy_glDrawBuffers_dispatch_table_rewrite_ptr, /* glDrawBuffers */ + epoxy_glDrawBuffersARB_dispatch_table_rewrite_ptr, /* glDrawBuffersARB */ + epoxy_glDrawBuffersATI_dispatch_table_rewrite_ptr, /* glDrawBuffersATI */ + epoxy_glDrawBuffersEXT_dispatch_table_rewrite_ptr, /* glDrawBuffersEXT */ + epoxy_glDrawBuffersIndexedEXT_dispatch_table_rewrite_ptr, /* glDrawBuffersIndexedEXT */ + epoxy_glDrawBuffersNV_dispatch_table_rewrite_ptr, /* glDrawBuffersNV */ + epoxy_glDrawCommandsAddressNV_dispatch_table_rewrite_ptr, /* glDrawCommandsAddressNV */ + epoxy_glDrawCommandsNV_dispatch_table_rewrite_ptr, /* glDrawCommandsNV */ + epoxy_glDrawCommandsStatesAddressNV_dispatch_table_rewrite_ptr, /* glDrawCommandsStatesAddressNV */ + epoxy_glDrawCommandsStatesNV_dispatch_table_rewrite_ptr, /* glDrawCommandsStatesNV */ + epoxy_glDrawElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glDrawElementArrayAPPLE */ + epoxy_glDrawElementArrayATI_dispatch_table_rewrite_ptr, /* glDrawElementArrayATI */ + epoxy_glDrawElements_dispatch_table_rewrite_ptr, /* glDrawElements */ + epoxy_glDrawElementsBaseVertex_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertex */ + epoxy_glDrawElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertexEXT */ + epoxy_glDrawElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertexOES */ + epoxy_glDrawElementsIndirect_dispatch_table_rewrite_ptr, /* glDrawElementsIndirect */ + epoxy_glDrawElementsInstanced_dispatch_table_rewrite_ptr, /* glDrawElementsInstanced */ + epoxy_glDrawElementsInstancedANGLE_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedANGLE */ + epoxy_glDrawElementsInstancedARB_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedARB */ + epoxy_glDrawElementsInstancedBaseInstance_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseInstance */ + epoxy_glDrawElementsInstancedBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseInstanceEXT */ + epoxy_glDrawElementsInstancedBaseVertex_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertex */ + epoxy_glDrawElementsInstancedBaseVertexBaseInstance_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexBaseInstance */ + epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexBaseInstanceEXT */ + epoxy_glDrawElementsInstancedBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexEXT */ + epoxy_glDrawElementsInstancedBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexOES */ + epoxy_glDrawElementsInstancedEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedEXT */ + epoxy_glDrawElementsInstancedNV_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedNV */ + epoxy_glDrawMeshArraysSUN_dispatch_table_rewrite_ptr, /* glDrawMeshArraysSUN */ + epoxy_glDrawPixels_dispatch_table_rewrite_ptr, /* glDrawPixels */ + epoxy_glDrawRangeElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glDrawRangeElementArrayAPPLE */ + epoxy_glDrawRangeElementArrayATI_dispatch_table_rewrite_ptr, /* glDrawRangeElementArrayATI */ + epoxy_glDrawRangeElements_dispatch_table_rewrite_ptr, /* glDrawRangeElements */ + epoxy_glDrawRangeElementsBaseVertex_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertex */ + epoxy_glDrawRangeElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertexEXT */ + epoxy_glDrawRangeElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertexOES */ + epoxy_glDrawRangeElementsEXT_dispatch_table_rewrite_ptr, /* glDrawRangeElementsEXT */ + epoxy_glDrawTexfOES_dispatch_table_rewrite_ptr, /* glDrawTexfOES */ + epoxy_glDrawTexfvOES_dispatch_table_rewrite_ptr, /* glDrawTexfvOES */ + epoxy_glDrawTexiOES_dispatch_table_rewrite_ptr, /* glDrawTexiOES */ + epoxy_glDrawTexivOES_dispatch_table_rewrite_ptr, /* glDrawTexivOES */ + epoxy_glDrawTexsOES_dispatch_table_rewrite_ptr, /* glDrawTexsOES */ + epoxy_glDrawTexsvOES_dispatch_table_rewrite_ptr, /* glDrawTexsvOES */ + epoxy_glDrawTextureNV_dispatch_table_rewrite_ptr, /* glDrawTextureNV */ + epoxy_glDrawTexxOES_dispatch_table_rewrite_ptr, /* glDrawTexxOES */ + epoxy_glDrawTexxvOES_dispatch_table_rewrite_ptr, /* glDrawTexxvOES */ + epoxy_glDrawTransformFeedback_dispatch_table_rewrite_ptr, /* glDrawTransformFeedback */ + epoxy_glDrawTransformFeedbackInstanced_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackInstanced */ + epoxy_glDrawTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackNV */ + epoxy_glDrawTransformFeedbackStream_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackStream */ + epoxy_glDrawTransformFeedbackStreamInstanced_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackStreamInstanced */ + epoxy_glEGLImageTargetRenderbufferStorageOES_dispatch_table_rewrite_ptr, /* glEGLImageTargetRenderbufferStorageOES */ + epoxy_glEGLImageTargetTexture2DOES_dispatch_table_rewrite_ptr, /* glEGLImageTargetTexture2DOES */ + epoxy_glEdgeFlag_dispatch_table_rewrite_ptr, /* glEdgeFlag */ + epoxy_glEdgeFlagFormatNV_dispatch_table_rewrite_ptr, /* glEdgeFlagFormatNV */ + epoxy_glEdgeFlagPointer_dispatch_table_rewrite_ptr, /* glEdgeFlagPointer */ + epoxy_glEdgeFlagPointerEXT_dispatch_table_rewrite_ptr, /* glEdgeFlagPointerEXT */ + epoxy_glEdgeFlagPointerListIBM_dispatch_table_rewrite_ptr, /* glEdgeFlagPointerListIBM */ + epoxy_glEdgeFlagv_dispatch_table_rewrite_ptr, /* glEdgeFlagv */ + epoxy_glElementPointerAPPLE_dispatch_table_rewrite_ptr, /* glElementPointerAPPLE */ + epoxy_glElementPointerATI_dispatch_table_rewrite_ptr, /* glElementPointerATI */ + epoxy_glEnable_dispatch_table_rewrite_ptr, /* glEnable */ + epoxy_glEnableClientState_dispatch_table_rewrite_ptr, /* glEnableClientState */ + epoxy_glEnableClientStateIndexedEXT_dispatch_table_rewrite_ptr, /* glEnableClientStateIndexedEXT */ + epoxy_glEnableClientStateiEXT_dispatch_table_rewrite_ptr, /* glEnableClientStateiEXT */ + epoxy_glEnableDriverControlQCOM_dispatch_table_rewrite_ptr, /* glEnableDriverControlQCOM */ + epoxy_glEnableIndexedEXT_dispatch_table_rewrite_ptr, /* glEnableIndexedEXT */ + epoxy_glEnableVariantClientStateEXT_dispatch_table_rewrite_ptr, /* glEnableVariantClientStateEXT */ + epoxy_glEnableVertexArrayAttrib_dispatch_table_rewrite_ptr, /* glEnableVertexArrayAttrib */ + epoxy_glEnableVertexArrayAttribEXT_dispatch_table_rewrite_ptr, /* glEnableVertexArrayAttribEXT */ + epoxy_glEnableVertexArrayEXT_dispatch_table_rewrite_ptr, /* glEnableVertexArrayEXT */ + epoxy_glEnableVertexAttribAPPLE_dispatch_table_rewrite_ptr, /* glEnableVertexAttribAPPLE */ + epoxy_glEnableVertexAttribArray_dispatch_table_rewrite_ptr, /* glEnableVertexAttribArray */ + epoxy_glEnableVertexAttribArrayARB_dispatch_table_rewrite_ptr, /* glEnableVertexAttribArrayARB */ + epoxy_glEnablei_dispatch_table_rewrite_ptr, /* glEnablei */ + epoxy_glEnableiEXT_dispatch_table_rewrite_ptr, /* glEnableiEXT */ + epoxy_glEnableiNV_dispatch_table_rewrite_ptr, /* glEnableiNV */ + epoxy_glEnableiOES_dispatch_table_rewrite_ptr, /* glEnableiOES */ + epoxy_glEnd_unwrapped_dispatch_table_rewrite_ptr, /* glEnd_unwrapped */ + epoxy_glEndConditionalRender_dispatch_table_rewrite_ptr, /* glEndConditionalRender */ + epoxy_glEndConditionalRenderNV_dispatch_table_rewrite_ptr, /* glEndConditionalRenderNV */ + epoxy_glEndConditionalRenderNVX_dispatch_table_rewrite_ptr, /* glEndConditionalRenderNVX */ + epoxy_glEndFragmentShaderATI_dispatch_table_rewrite_ptr, /* glEndFragmentShaderATI */ + epoxy_glEndList_dispatch_table_rewrite_ptr, /* glEndList */ + epoxy_glEndOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glEndOcclusionQueryNV */ + epoxy_glEndPerfMonitorAMD_dispatch_table_rewrite_ptr, /* glEndPerfMonitorAMD */ + epoxy_glEndPerfQueryINTEL_dispatch_table_rewrite_ptr, /* glEndPerfQueryINTEL */ + epoxy_glEndQuery_dispatch_table_rewrite_ptr, /* glEndQuery */ + epoxy_glEndQueryARB_dispatch_table_rewrite_ptr, /* glEndQueryARB */ + epoxy_glEndQueryEXT_dispatch_table_rewrite_ptr, /* glEndQueryEXT */ + epoxy_glEndQueryIndexed_dispatch_table_rewrite_ptr, /* glEndQueryIndexed */ + epoxy_glEndTilingQCOM_dispatch_table_rewrite_ptr, /* glEndTilingQCOM */ + epoxy_glEndTransformFeedback_dispatch_table_rewrite_ptr, /* glEndTransformFeedback */ + epoxy_glEndTransformFeedbackEXT_dispatch_table_rewrite_ptr, /* glEndTransformFeedbackEXT */ + epoxy_glEndTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glEndTransformFeedbackNV */ + epoxy_glEndVertexShaderEXT_dispatch_table_rewrite_ptr, /* glEndVertexShaderEXT */ + epoxy_glEndVideoCaptureNV_dispatch_table_rewrite_ptr, /* glEndVideoCaptureNV */ + epoxy_glEvalCoord1d_dispatch_table_rewrite_ptr, /* glEvalCoord1d */ + epoxy_glEvalCoord1dv_dispatch_table_rewrite_ptr, /* glEvalCoord1dv */ + epoxy_glEvalCoord1f_dispatch_table_rewrite_ptr, /* glEvalCoord1f */ + epoxy_glEvalCoord1fv_dispatch_table_rewrite_ptr, /* glEvalCoord1fv */ + epoxy_glEvalCoord1xOES_dispatch_table_rewrite_ptr, /* glEvalCoord1xOES */ + epoxy_glEvalCoord1xvOES_dispatch_table_rewrite_ptr, /* glEvalCoord1xvOES */ + epoxy_glEvalCoord2d_dispatch_table_rewrite_ptr, /* glEvalCoord2d */ + epoxy_glEvalCoord2dv_dispatch_table_rewrite_ptr, /* glEvalCoord2dv */ + epoxy_glEvalCoord2f_dispatch_table_rewrite_ptr, /* glEvalCoord2f */ + epoxy_glEvalCoord2fv_dispatch_table_rewrite_ptr, /* glEvalCoord2fv */ + epoxy_glEvalCoord2xOES_dispatch_table_rewrite_ptr, /* glEvalCoord2xOES */ + epoxy_glEvalCoord2xvOES_dispatch_table_rewrite_ptr, /* glEvalCoord2xvOES */ + epoxy_glEvalMapsNV_dispatch_table_rewrite_ptr, /* glEvalMapsNV */ + epoxy_glEvalMesh1_dispatch_table_rewrite_ptr, /* glEvalMesh1 */ + epoxy_glEvalMesh2_dispatch_table_rewrite_ptr, /* glEvalMesh2 */ + epoxy_glEvalPoint1_dispatch_table_rewrite_ptr, /* glEvalPoint1 */ + epoxy_glEvalPoint2_dispatch_table_rewrite_ptr, /* glEvalPoint2 */ + epoxy_glEvaluateDepthValuesARB_dispatch_table_rewrite_ptr, /* glEvaluateDepthValuesARB */ + epoxy_glExecuteProgramNV_dispatch_table_rewrite_ptr, /* glExecuteProgramNV */ + epoxy_glExtGetBufferPointervQCOM_dispatch_table_rewrite_ptr, /* glExtGetBufferPointervQCOM */ + epoxy_glExtGetBuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetBuffersQCOM */ + epoxy_glExtGetFramebuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetFramebuffersQCOM */ + epoxy_glExtGetProgramBinarySourceQCOM_dispatch_table_rewrite_ptr, /* glExtGetProgramBinarySourceQCOM */ + epoxy_glExtGetProgramsQCOM_dispatch_table_rewrite_ptr, /* glExtGetProgramsQCOM */ + epoxy_glExtGetRenderbuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetRenderbuffersQCOM */ + epoxy_glExtGetShadersQCOM_dispatch_table_rewrite_ptr, /* glExtGetShadersQCOM */ + epoxy_glExtGetTexLevelParameterivQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexLevelParameterivQCOM */ + epoxy_glExtGetTexSubImageQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexSubImageQCOM */ + epoxy_glExtGetTexturesQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexturesQCOM */ + epoxy_glExtIsProgramBinaryQCOM_dispatch_table_rewrite_ptr, /* glExtIsProgramBinaryQCOM */ + epoxy_glExtTexObjectStateOverrideiQCOM_dispatch_table_rewrite_ptr, /* glExtTexObjectStateOverrideiQCOM */ + epoxy_glExtractComponentEXT_dispatch_table_rewrite_ptr, /* glExtractComponentEXT */ + epoxy_glFeedbackBuffer_dispatch_table_rewrite_ptr, /* glFeedbackBuffer */ + epoxy_glFeedbackBufferxOES_dispatch_table_rewrite_ptr, /* glFeedbackBufferxOES */ + epoxy_glFenceSync_dispatch_table_rewrite_ptr, /* glFenceSync */ + epoxy_glFenceSyncAPPLE_dispatch_table_rewrite_ptr, /* glFenceSyncAPPLE */ + epoxy_glFinalCombinerInputNV_dispatch_table_rewrite_ptr, /* glFinalCombinerInputNV */ + epoxy_glFinish_dispatch_table_rewrite_ptr, /* glFinish */ + epoxy_glFinishAsyncSGIX_dispatch_table_rewrite_ptr, /* glFinishAsyncSGIX */ + epoxy_glFinishFenceAPPLE_dispatch_table_rewrite_ptr, /* glFinishFenceAPPLE */ + epoxy_glFinishFenceNV_dispatch_table_rewrite_ptr, /* glFinishFenceNV */ + epoxy_glFinishObjectAPPLE_dispatch_table_rewrite_ptr, /* glFinishObjectAPPLE */ + epoxy_glFinishTextureSUNX_dispatch_table_rewrite_ptr, /* glFinishTextureSUNX */ + epoxy_glFlush_dispatch_table_rewrite_ptr, /* glFlush */ + epoxy_glFlushMappedBufferRange_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRange */ + epoxy_glFlushMappedBufferRangeAPPLE_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRangeAPPLE */ + epoxy_glFlushMappedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRangeEXT */ + epoxy_glFlushMappedNamedBufferRange_dispatch_table_rewrite_ptr, /* glFlushMappedNamedBufferRange */ + epoxy_glFlushMappedNamedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glFlushMappedNamedBufferRangeEXT */ + epoxy_glFlushPixelDataRangeNV_dispatch_table_rewrite_ptr, /* glFlushPixelDataRangeNV */ + epoxy_glFlushRasterSGIX_dispatch_table_rewrite_ptr, /* glFlushRasterSGIX */ + epoxy_glFlushStaticDataIBM_dispatch_table_rewrite_ptr, /* glFlushStaticDataIBM */ + epoxy_glFlushVertexArrayRangeAPPLE_dispatch_table_rewrite_ptr, /* glFlushVertexArrayRangeAPPLE */ + epoxy_glFlushVertexArrayRangeNV_dispatch_table_rewrite_ptr, /* glFlushVertexArrayRangeNV */ + epoxy_glFogCoordFormatNV_dispatch_table_rewrite_ptr, /* glFogCoordFormatNV */ + epoxy_glFogCoordPointer_dispatch_table_rewrite_ptr, /* glFogCoordPointer */ + epoxy_glFogCoordPointerEXT_dispatch_table_rewrite_ptr, /* glFogCoordPointerEXT */ + epoxy_glFogCoordPointerListIBM_dispatch_table_rewrite_ptr, /* glFogCoordPointerListIBM */ + epoxy_glFogCoordd_dispatch_table_rewrite_ptr, /* glFogCoordd */ + epoxy_glFogCoorddEXT_dispatch_table_rewrite_ptr, /* glFogCoorddEXT */ + epoxy_glFogCoorddv_dispatch_table_rewrite_ptr, /* glFogCoorddv */ + epoxy_glFogCoorddvEXT_dispatch_table_rewrite_ptr, /* glFogCoorddvEXT */ + epoxy_glFogCoordf_dispatch_table_rewrite_ptr, /* glFogCoordf */ + epoxy_glFogCoordfEXT_dispatch_table_rewrite_ptr, /* glFogCoordfEXT */ + epoxy_glFogCoordfv_dispatch_table_rewrite_ptr, /* glFogCoordfv */ + epoxy_glFogCoordfvEXT_dispatch_table_rewrite_ptr, /* glFogCoordfvEXT */ + epoxy_glFogCoordhNV_dispatch_table_rewrite_ptr, /* glFogCoordhNV */ + epoxy_glFogCoordhvNV_dispatch_table_rewrite_ptr, /* glFogCoordhvNV */ + epoxy_glFogFuncSGIS_dispatch_table_rewrite_ptr, /* glFogFuncSGIS */ + epoxy_glFogf_dispatch_table_rewrite_ptr, /* glFogf */ + epoxy_glFogfv_dispatch_table_rewrite_ptr, /* glFogfv */ + epoxy_glFogi_dispatch_table_rewrite_ptr, /* glFogi */ + epoxy_glFogiv_dispatch_table_rewrite_ptr, /* glFogiv */ + epoxy_glFogx_dispatch_table_rewrite_ptr, /* glFogx */ + epoxy_glFogxOES_dispatch_table_rewrite_ptr, /* glFogxOES */ + epoxy_glFogxv_dispatch_table_rewrite_ptr, /* glFogxv */ + epoxy_glFogxvOES_dispatch_table_rewrite_ptr, /* glFogxvOES */ + epoxy_glFragmentColorMaterialSGIX_dispatch_table_rewrite_ptr, /* glFragmentColorMaterialSGIX */ + epoxy_glFragmentCoverageColorNV_dispatch_table_rewrite_ptr, /* glFragmentCoverageColorNV */ + epoxy_glFragmentLightModelfSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelfSGIX */ + epoxy_glFragmentLightModelfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelfvSGIX */ + epoxy_glFragmentLightModeliSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModeliSGIX */ + epoxy_glFragmentLightModelivSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelivSGIX */ + epoxy_glFragmentLightfSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightfSGIX */ + epoxy_glFragmentLightfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightfvSGIX */ + epoxy_glFragmentLightiSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightiSGIX */ + epoxy_glFragmentLightivSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightivSGIX */ + epoxy_glFragmentMaterialfSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialfSGIX */ + epoxy_glFragmentMaterialfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialfvSGIX */ + epoxy_glFragmentMaterialiSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialiSGIX */ + epoxy_glFragmentMaterialivSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialivSGIX */ + epoxy_glFrameTerminatorGREMEDY_dispatch_table_rewrite_ptr, /* glFrameTerminatorGREMEDY */ + epoxy_glFrameZoomSGIX_dispatch_table_rewrite_ptr, /* glFrameZoomSGIX */ + epoxy_glFramebufferDrawBufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferDrawBufferEXT */ + epoxy_glFramebufferDrawBuffersEXT_dispatch_table_rewrite_ptr, /* glFramebufferDrawBuffersEXT */ + epoxy_glFramebufferParameteri_dispatch_table_rewrite_ptr, /* glFramebufferParameteri */ + epoxy_glFramebufferReadBufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferReadBufferEXT */ + epoxy_glFramebufferRenderbuffer_dispatch_table_rewrite_ptr, /* glFramebufferRenderbuffer */ + epoxy_glFramebufferRenderbufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferRenderbufferEXT */ + epoxy_glFramebufferRenderbufferOES_dispatch_table_rewrite_ptr, /* glFramebufferRenderbufferOES */ + epoxy_glFramebufferSampleLocationsfvARB_dispatch_table_rewrite_ptr, /* glFramebufferSampleLocationsfvARB */ + epoxy_glFramebufferSampleLocationsfvNV_dispatch_table_rewrite_ptr, /* glFramebufferSampleLocationsfvNV */ + epoxy_glFramebufferTexture_dispatch_table_rewrite_ptr, /* glFramebufferTexture */ + epoxy_glFramebufferTexture1D_dispatch_table_rewrite_ptr, /* glFramebufferTexture1D */ + epoxy_glFramebufferTexture1DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture1DEXT */ + epoxy_glFramebufferTexture2D_dispatch_table_rewrite_ptr, /* glFramebufferTexture2D */ + epoxy_glFramebufferTexture2DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DEXT */ + epoxy_glFramebufferTexture2DMultisampleEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DMultisampleEXT */ + epoxy_glFramebufferTexture2DMultisampleIMG_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DMultisampleIMG */ + epoxy_glFramebufferTexture2DOES_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DOES */ + epoxy_glFramebufferTexture3D_dispatch_table_rewrite_ptr, /* glFramebufferTexture3D */ + epoxy_glFramebufferTexture3DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture3DEXT */ + epoxy_glFramebufferTexture3DOES_dispatch_table_rewrite_ptr, /* glFramebufferTexture3DOES */ + epoxy_glFramebufferTextureARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureARB */ + epoxy_glFramebufferTextureEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureEXT */ + epoxy_glFramebufferTextureFaceARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureFaceARB */ + epoxy_glFramebufferTextureFaceEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureFaceEXT */ + epoxy_glFramebufferTextureLayer_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayer */ + epoxy_glFramebufferTextureLayerARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayerARB */ + epoxy_glFramebufferTextureLayerEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayerEXT */ + epoxy_glFramebufferTextureMultiviewOVR_dispatch_table_rewrite_ptr, /* glFramebufferTextureMultiviewOVR */ + epoxy_glFramebufferTextureOES_dispatch_table_rewrite_ptr, /* glFramebufferTextureOES */ + epoxy_glFreeObjectBufferATI_dispatch_table_rewrite_ptr, /* glFreeObjectBufferATI */ + epoxy_glFrontFace_dispatch_table_rewrite_ptr, /* glFrontFace */ + epoxy_glFrustum_dispatch_table_rewrite_ptr, /* glFrustum */ + epoxy_glFrustumf_dispatch_table_rewrite_ptr, /* glFrustumf */ + epoxy_glFrustumfOES_dispatch_table_rewrite_ptr, /* glFrustumfOES */ + epoxy_glFrustumx_dispatch_table_rewrite_ptr, /* glFrustumx */ + epoxy_glFrustumxOES_dispatch_table_rewrite_ptr, /* glFrustumxOES */ + epoxy_glGenAsyncMarkersSGIX_dispatch_table_rewrite_ptr, /* glGenAsyncMarkersSGIX */ + epoxy_glGenBuffers_dispatch_table_rewrite_ptr, /* glGenBuffers */ + epoxy_glGenBuffersARB_dispatch_table_rewrite_ptr, /* glGenBuffersARB */ + epoxy_glGenFencesAPPLE_dispatch_table_rewrite_ptr, /* glGenFencesAPPLE */ + epoxy_glGenFencesNV_dispatch_table_rewrite_ptr, /* glGenFencesNV */ + epoxy_glGenFragmentShadersATI_dispatch_table_rewrite_ptr, /* glGenFragmentShadersATI */ + epoxy_glGenFramebuffers_dispatch_table_rewrite_ptr, /* glGenFramebuffers */ + epoxy_glGenFramebuffersEXT_dispatch_table_rewrite_ptr, /* glGenFramebuffersEXT */ + epoxy_glGenFramebuffersOES_dispatch_table_rewrite_ptr, /* glGenFramebuffersOES */ + epoxy_glGenLists_dispatch_table_rewrite_ptr, /* glGenLists */ + epoxy_glGenNamesAMD_dispatch_table_rewrite_ptr, /* glGenNamesAMD */ + epoxy_glGenOcclusionQueriesNV_dispatch_table_rewrite_ptr, /* glGenOcclusionQueriesNV */ + epoxy_glGenPathsNV_dispatch_table_rewrite_ptr, /* glGenPathsNV */ + epoxy_glGenPerfMonitorsAMD_dispatch_table_rewrite_ptr, /* glGenPerfMonitorsAMD */ + epoxy_glGenProgramPipelines_dispatch_table_rewrite_ptr, /* glGenProgramPipelines */ + epoxy_glGenProgramPipelinesEXT_dispatch_table_rewrite_ptr, /* glGenProgramPipelinesEXT */ + epoxy_glGenProgramsARB_dispatch_table_rewrite_ptr, /* glGenProgramsARB */ + epoxy_glGenProgramsNV_dispatch_table_rewrite_ptr, /* glGenProgramsNV */ + epoxy_glGenQueries_dispatch_table_rewrite_ptr, /* glGenQueries */ + epoxy_glGenQueriesARB_dispatch_table_rewrite_ptr, /* glGenQueriesARB */ + epoxy_glGenQueriesEXT_dispatch_table_rewrite_ptr, /* glGenQueriesEXT */ + epoxy_glGenRenderbuffers_dispatch_table_rewrite_ptr, /* glGenRenderbuffers */ + epoxy_glGenRenderbuffersEXT_dispatch_table_rewrite_ptr, /* glGenRenderbuffersEXT */ + epoxy_glGenRenderbuffersOES_dispatch_table_rewrite_ptr, /* glGenRenderbuffersOES */ + epoxy_glGenSamplers_dispatch_table_rewrite_ptr, /* glGenSamplers */ + epoxy_glGenSymbolsEXT_dispatch_table_rewrite_ptr, /* glGenSymbolsEXT */ + epoxy_glGenTextures_dispatch_table_rewrite_ptr, /* glGenTextures */ + epoxy_glGenTexturesEXT_dispatch_table_rewrite_ptr, /* glGenTexturesEXT */ + epoxy_glGenTransformFeedbacks_dispatch_table_rewrite_ptr, /* glGenTransformFeedbacks */ + epoxy_glGenTransformFeedbacksNV_dispatch_table_rewrite_ptr, /* glGenTransformFeedbacksNV */ + epoxy_glGenVertexArrays_dispatch_table_rewrite_ptr, /* glGenVertexArrays */ + epoxy_glGenVertexArraysAPPLE_dispatch_table_rewrite_ptr, /* glGenVertexArraysAPPLE */ + epoxy_glGenVertexArraysOES_dispatch_table_rewrite_ptr, /* glGenVertexArraysOES */ + epoxy_glGenVertexShadersEXT_dispatch_table_rewrite_ptr, /* glGenVertexShadersEXT */ + epoxy_glGenerateMipmap_dispatch_table_rewrite_ptr, /* glGenerateMipmap */ + epoxy_glGenerateMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateMipmapEXT */ + epoxy_glGenerateMipmapOES_dispatch_table_rewrite_ptr, /* glGenerateMipmapOES */ + epoxy_glGenerateMultiTexMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateMultiTexMipmapEXT */ + epoxy_glGenerateTextureMipmap_dispatch_table_rewrite_ptr, /* glGenerateTextureMipmap */ + epoxy_glGenerateTextureMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateTextureMipmapEXT */ + epoxy_glGetActiveAtomicCounterBufferiv_dispatch_table_rewrite_ptr, /* glGetActiveAtomicCounterBufferiv */ + epoxy_glGetActiveAttrib_dispatch_table_rewrite_ptr, /* glGetActiveAttrib */ + epoxy_glGetActiveAttribARB_dispatch_table_rewrite_ptr, /* glGetActiveAttribARB */ + epoxy_glGetActiveSubroutineName_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineName */ + epoxy_glGetActiveSubroutineUniformName_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineUniformName */ + epoxy_glGetActiveSubroutineUniformiv_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineUniformiv */ + epoxy_glGetActiveUniform_dispatch_table_rewrite_ptr, /* glGetActiveUniform */ + epoxy_glGetActiveUniformARB_dispatch_table_rewrite_ptr, /* glGetActiveUniformARB */ + epoxy_glGetActiveUniformBlockName_dispatch_table_rewrite_ptr, /* glGetActiveUniformBlockName */ + epoxy_glGetActiveUniformBlockiv_dispatch_table_rewrite_ptr, /* glGetActiveUniformBlockiv */ + epoxy_glGetActiveUniformName_dispatch_table_rewrite_ptr, /* glGetActiveUniformName */ + epoxy_glGetActiveUniformsiv_dispatch_table_rewrite_ptr, /* glGetActiveUniformsiv */ + epoxy_glGetActiveVaryingNV_dispatch_table_rewrite_ptr, /* glGetActiveVaryingNV */ + epoxy_glGetArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetArrayObjectfvATI */ + epoxy_glGetArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetArrayObjectivATI */ + epoxy_glGetAttachedObjectsARB_dispatch_table_rewrite_ptr, /* glGetAttachedObjectsARB */ + epoxy_glGetAttachedShaders_dispatch_table_rewrite_ptr, /* glGetAttachedShaders */ + epoxy_glGetAttribLocation_dispatch_table_rewrite_ptr, /* glGetAttribLocation */ + epoxy_glGetAttribLocationARB_dispatch_table_rewrite_ptr, /* glGetAttribLocationARB */ + epoxy_glGetBooleanIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetBooleanIndexedvEXT */ + epoxy_glGetBooleani_v_dispatch_table_rewrite_ptr, /* glGetBooleani_v */ + epoxy_glGetBooleanv_dispatch_table_rewrite_ptr, /* glGetBooleanv */ + epoxy_glGetBufferParameteri64v_dispatch_table_rewrite_ptr, /* glGetBufferParameteri64v */ + epoxy_glGetBufferParameteriv_dispatch_table_rewrite_ptr, /* glGetBufferParameteriv */ + epoxy_glGetBufferParameterivARB_dispatch_table_rewrite_ptr, /* glGetBufferParameterivARB */ + epoxy_glGetBufferParameterui64vNV_dispatch_table_rewrite_ptr, /* glGetBufferParameterui64vNV */ + epoxy_glGetBufferPointerv_dispatch_table_rewrite_ptr, /* glGetBufferPointerv */ + epoxy_glGetBufferPointervARB_dispatch_table_rewrite_ptr, /* glGetBufferPointervARB */ + epoxy_glGetBufferPointervOES_dispatch_table_rewrite_ptr, /* glGetBufferPointervOES */ + epoxy_glGetBufferSubData_dispatch_table_rewrite_ptr, /* glGetBufferSubData */ + epoxy_glGetBufferSubDataARB_dispatch_table_rewrite_ptr, /* glGetBufferSubDataARB */ + epoxy_glGetClipPlane_dispatch_table_rewrite_ptr, /* glGetClipPlane */ + epoxy_glGetClipPlanef_dispatch_table_rewrite_ptr, /* glGetClipPlanef */ + epoxy_glGetClipPlanefOES_dispatch_table_rewrite_ptr, /* glGetClipPlanefOES */ + epoxy_glGetClipPlanex_dispatch_table_rewrite_ptr, /* glGetClipPlanex */ + epoxy_glGetClipPlanexOES_dispatch_table_rewrite_ptr, /* glGetClipPlanexOES */ + epoxy_glGetColorTable_dispatch_table_rewrite_ptr, /* glGetColorTable */ + epoxy_glGetColorTableEXT_dispatch_table_rewrite_ptr, /* glGetColorTableEXT */ + epoxy_glGetColorTableParameterfv_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfv */ + epoxy_glGetColorTableParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfvEXT */ + epoxy_glGetColorTableParameterfvSGI_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfvSGI */ + epoxy_glGetColorTableParameteriv_dispatch_table_rewrite_ptr, /* glGetColorTableParameteriv */ + epoxy_glGetColorTableParameterivEXT_dispatch_table_rewrite_ptr, /* glGetColorTableParameterivEXT */ + epoxy_glGetColorTableParameterivSGI_dispatch_table_rewrite_ptr, /* glGetColorTableParameterivSGI */ + epoxy_glGetColorTableSGI_dispatch_table_rewrite_ptr, /* glGetColorTableSGI */ + epoxy_glGetCombinerInputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerInputParameterfvNV */ + epoxy_glGetCombinerInputParameterivNV_dispatch_table_rewrite_ptr, /* glGetCombinerInputParameterivNV */ + epoxy_glGetCombinerOutputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerOutputParameterfvNV */ + epoxy_glGetCombinerOutputParameterivNV_dispatch_table_rewrite_ptr, /* glGetCombinerOutputParameterivNV */ + epoxy_glGetCombinerStageParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerStageParameterfvNV */ + epoxy_glGetCommandHeaderNV_dispatch_table_rewrite_ptr, /* glGetCommandHeaderNV */ + epoxy_glGetCompressedMultiTexImageEXT_dispatch_table_rewrite_ptr, /* glGetCompressedMultiTexImageEXT */ + epoxy_glGetCompressedTexImage_dispatch_table_rewrite_ptr, /* glGetCompressedTexImage */ + epoxy_glGetCompressedTexImageARB_dispatch_table_rewrite_ptr, /* glGetCompressedTexImageARB */ + epoxy_glGetCompressedTextureImage_dispatch_table_rewrite_ptr, /* glGetCompressedTextureImage */ + epoxy_glGetCompressedTextureImageEXT_dispatch_table_rewrite_ptr, /* glGetCompressedTextureImageEXT */ + epoxy_glGetCompressedTextureSubImage_dispatch_table_rewrite_ptr, /* glGetCompressedTextureSubImage */ + epoxy_glGetConvolutionFilter_dispatch_table_rewrite_ptr, /* glGetConvolutionFilter */ + epoxy_glGetConvolutionFilterEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionFilterEXT */ + epoxy_glGetConvolutionParameterfv_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterfv */ + epoxy_glGetConvolutionParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterfvEXT */ + epoxy_glGetConvolutionParameteriv_dispatch_table_rewrite_ptr, /* glGetConvolutionParameteriv */ + epoxy_glGetConvolutionParameterivEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterivEXT */ + epoxy_glGetConvolutionParameterxvOES_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterxvOES */ + epoxy_glGetCoverageModulationTableNV_dispatch_table_rewrite_ptr, /* glGetCoverageModulationTableNV */ + epoxy_glGetDebugMessageLog_dispatch_table_rewrite_ptr, /* glGetDebugMessageLog */ + epoxy_glGetDebugMessageLogAMD_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogAMD */ + epoxy_glGetDebugMessageLogARB_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogARB */ + epoxy_glGetDebugMessageLogKHR_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogKHR */ + epoxy_glGetDetailTexFuncSGIS_dispatch_table_rewrite_ptr, /* glGetDetailTexFuncSGIS */ + epoxy_glGetDoubleIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetDoubleIndexedvEXT */ + epoxy_glGetDoublei_v_dispatch_table_rewrite_ptr, /* glGetDoublei_v */ + epoxy_glGetDoublei_vEXT_dispatch_table_rewrite_ptr, /* glGetDoublei_vEXT */ + epoxy_glGetDoublev_dispatch_table_rewrite_ptr, /* glGetDoublev */ + epoxy_glGetDriverControlStringQCOM_dispatch_table_rewrite_ptr, /* glGetDriverControlStringQCOM */ + epoxy_glGetDriverControlsQCOM_dispatch_table_rewrite_ptr, /* glGetDriverControlsQCOM */ + epoxy_glGetError_dispatch_table_rewrite_ptr, /* glGetError */ + epoxy_glGetFenceivNV_dispatch_table_rewrite_ptr, /* glGetFenceivNV */ + epoxy_glGetFinalCombinerInputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetFinalCombinerInputParameterfvNV */ + epoxy_glGetFinalCombinerInputParameterivNV_dispatch_table_rewrite_ptr, /* glGetFinalCombinerInputParameterivNV */ + epoxy_glGetFirstPerfQueryIdINTEL_dispatch_table_rewrite_ptr, /* glGetFirstPerfQueryIdINTEL */ + epoxy_glGetFixedv_dispatch_table_rewrite_ptr, /* glGetFixedv */ + epoxy_glGetFixedvOES_dispatch_table_rewrite_ptr, /* glGetFixedvOES */ + epoxy_glGetFloatIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetFloatIndexedvEXT */ + epoxy_glGetFloati_v_dispatch_table_rewrite_ptr, /* glGetFloati_v */ + epoxy_glGetFloati_vEXT_dispatch_table_rewrite_ptr, /* glGetFloati_vEXT */ + epoxy_glGetFloati_vNV_dispatch_table_rewrite_ptr, /* glGetFloati_vNV */ + epoxy_glGetFloatv_dispatch_table_rewrite_ptr, /* glGetFloatv */ + epoxy_glGetFogFuncSGIS_dispatch_table_rewrite_ptr, /* glGetFogFuncSGIS */ + epoxy_glGetFragDataIndex_dispatch_table_rewrite_ptr, /* glGetFragDataIndex */ + epoxy_glGetFragDataIndexEXT_dispatch_table_rewrite_ptr, /* glGetFragDataIndexEXT */ + epoxy_glGetFragDataLocation_dispatch_table_rewrite_ptr, /* glGetFragDataLocation */ + epoxy_glGetFragDataLocationEXT_dispatch_table_rewrite_ptr, /* glGetFragDataLocationEXT */ + epoxy_glGetFragmentLightfvSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentLightfvSGIX */ + epoxy_glGetFragmentLightivSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentLightivSGIX */ + epoxy_glGetFragmentMaterialfvSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentMaterialfvSGIX */ + epoxy_glGetFragmentMaterialivSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentMaterialivSGIX */ + epoxy_glGetFramebufferAttachmentParameteriv_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameteriv */ + epoxy_glGetFramebufferAttachmentParameterivEXT_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameterivEXT */ + epoxy_glGetFramebufferAttachmentParameterivOES_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameterivOES */ + epoxy_glGetFramebufferParameteriv_dispatch_table_rewrite_ptr, /* glGetFramebufferParameteriv */ + epoxy_glGetFramebufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetFramebufferParameterivEXT */ + epoxy_glGetGraphicsResetStatus_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatus */ + epoxy_glGetGraphicsResetStatusARB_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusARB */ + epoxy_glGetGraphicsResetStatusEXT_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusEXT */ + epoxy_glGetGraphicsResetStatusKHR_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusKHR */ + epoxy_glGetHandleARB_dispatch_table_rewrite_ptr, /* glGetHandleARB */ + epoxy_glGetHistogram_dispatch_table_rewrite_ptr, /* glGetHistogram */ + epoxy_glGetHistogramEXT_dispatch_table_rewrite_ptr, /* glGetHistogramEXT */ + epoxy_glGetHistogramParameterfv_dispatch_table_rewrite_ptr, /* glGetHistogramParameterfv */ + epoxy_glGetHistogramParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetHistogramParameterfvEXT */ + epoxy_glGetHistogramParameteriv_dispatch_table_rewrite_ptr, /* glGetHistogramParameteriv */ + epoxy_glGetHistogramParameterivEXT_dispatch_table_rewrite_ptr, /* glGetHistogramParameterivEXT */ + epoxy_glGetHistogramParameterxvOES_dispatch_table_rewrite_ptr, /* glGetHistogramParameterxvOES */ + epoxy_glGetImageHandleARB_dispatch_table_rewrite_ptr, /* glGetImageHandleARB */ + epoxy_glGetImageHandleNV_dispatch_table_rewrite_ptr, /* glGetImageHandleNV */ + epoxy_glGetImageTransformParameterfvHP_dispatch_table_rewrite_ptr, /* glGetImageTransformParameterfvHP */ + epoxy_glGetImageTransformParameterivHP_dispatch_table_rewrite_ptr, /* glGetImageTransformParameterivHP */ + epoxy_glGetInfoLogARB_dispatch_table_rewrite_ptr, /* glGetInfoLogARB */ + epoxy_glGetInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glGetInstrumentsSGIX */ + epoxy_glGetInteger64i_v_dispatch_table_rewrite_ptr, /* glGetInteger64i_v */ + epoxy_glGetInteger64v_dispatch_table_rewrite_ptr, /* glGetInteger64v */ + epoxy_glGetInteger64vAPPLE_dispatch_table_rewrite_ptr, /* glGetInteger64vAPPLE */ + epoxy_glGetIntegerIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetIntegerIndexedvEXT */ + epoxy_glGetIntegeri_v_dispatch_table_rewrite_ptr, /* glGetIntegeri_v */ + epoxy_glGetIntegeri_vEXT_dispatch_table_rewrite_ptr, /* glGetIntegeri_vEXT */ + epoxy_glGetIntegerui64i_vNV_dispatch_table_rewrite_ptr, /* glGetIntegerui64i_vNV */ + epoxy_glGetIntegerui64vNV_dispatch_table_rewrite_ptr, /* glGetIntegerui64vNV */ + epoxy_glGetIntegerv_dispatch_table_rewrite_ptr, /* glGetIntegerv */ + epoxy_glGetInternalformatSampleivNV_dispatch_table_rewrite_ptr, /* glGetInternalformatSampleivNV */ + epoxy_glGetInternalformati64v_dispatch_table_rewrite_ptr, /* glGetInternalformati64v */ + epoxy_glGetInternalformativ_dispatch_table_rewrite_ptr, /* glGetInternalformativ */ + epoxy_glGetInvariantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetInvariantBooleanvEXT */ + epoxy_glGetInvariantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetInvariantFloatvEXT */ + epoxy_glGetInvariantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetInvariantIntegervEXT */ + epoxy_glGetLightfv_dispatch_table_rewrite_ptr, /* glGetLightfv */ + epoxy_glGetLightiv_dispatch_table_rewrite_ptr, /* glGetLightiv */ + epoxy_glGetLightxOES_dispatch_table_rewrite_ptr, /* glGetLightxOES */ + epoxy_glGetLightxv_dispatch_table_rewrite_ptr, /* glGetLightxv */ + epoxy_glGetLightxvOES_dispatch_table_rewrite_ptr, /* glGetLightxvOES */ + epoxy_glGetListParameterfvSGIX_dispatch_table_rewrite_ptr, /* glGetListParameterfvSGIX */ + epoxy_glGetListParameterivSGIX_dispatch_table_rewrite_ptr, /* glGetListParameterivSGIX */ + epoxy_glGetLocalConstantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantBooleanvEXT */ + epoxy_glGetLocalConstantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantFloatvEXT */ + epoxy_glGetLocalConstantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantIntegervEXT */ + epoxy_glGetMapAttribParameterfvNV_dispatch_table_rewrite_ptr, /* glGetMapAttribParameterfvNV */ + epoxy_glGetMapAttribParameterivNV_dispatch_table_rewrite_ptr, /* glGetMapAttribParameterivNV */ + epoxy_glGetMapControlPointsNV_dispatch_table_rewrite_ptr, /* glGetMapControlPointsNV */ + epoxy_glGetMapParameterfvNV_dispatch_table_rewrite_ptr, /* glGetMapParameterfvNV */ + epoxy_glGetMapParameterivNV_dispatch_table_rewrite_ptr, /* glGetMapParameterivNV */ + epoxy_glGetMapdv_dispatch_table_rewrite_ptr, /* glGetMapdv */ + epoxy_glGetMapfv_dispatch_table_rewrite_ptr, /* glGetMapfv */ + epoxy_glGetMapiv_dispatch_table_rewrite_ptr, /* glGetMapiv */ + epoxy_glGetMapxvOES_dispatch_table_rewrite_ptr, /* glGetMapxvOES */ + epoxy_glGetMaterialfv_dispatch_table_rewrite_ptr, /* glGetMaterialfv */ + epoxy_glGetMaterialiv_dispatch_table_rewrite_ptr, /* glGetMaterialiv */ + epoxy_glGetMaterialxOES_dispatch_table_rewrite_ptr, /* glGetMaterialxOES */ + epoxy_glGetMaterialxv_dispatch_table_rewrite_ptr, /* glGetMaterialxv */ + epoxy_glGetMaterialxvOES_dispatch_table_rewrite_ptr, /* glGetMaterialxvOES */ + epoxy_glGetMinmax_dispatch_table_rewrite_ptr, /* glGetMinmax */ + epoxy_glGetMinmaxEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxEXT */ + epoxy_glGetMinmaxParameterfv_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterfv */ + epoxy_glGetMinmaxParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterfvEXT */ + epoxy_glGetMinmaxParameteriv_dispatch_table_rewrite_ptr, /* glGetMinmaxParameteriv */ + epoxy_glGetMinmaxParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterivEXT */ + epoxy_glGetMultiTexEnvfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexEnvfvEXT */ + epoxy_glGetMultiTexEnvivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexEnvivEXT */ + epoxy_glGetMultiTexGendvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGendvEXT */ + epoxy_glGetMultiTexGenfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGenfvEXT */ + epoxy_glGetMultiTexGenivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGenivEXT */ + epoxy_glGetMultiTexImageEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexImageEXT */ + epoxy_glGetMultiTexLevelParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexLevelParameterfvEXT */ + epoxy_glGetMultiTexLevelParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexLevelParameterivEXT */ + epoxy_glGetMultiTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterIivEXT */ + epoxy_glGetMultiTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterIuivEXT */ + epoxy_glGetMultiTexParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterfvEXT */ + epoxy_glGetMultiTexParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterivEXT */ + epoxy_glGetMultisamplefv_dispatch_table_rewrite_ptr, /* glGetMultisamplefv */ + epoxy_glGetMultisamplefvNV_dispatch_table_rewrite_ptr, /* glGetMultisamplefvNV */ + epoxy_glGetNamedBufferParameteri64v_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameteri64v */ + epoxy_glGetNamedBufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameteriv */ + epoxy_glGetNamedBufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameterivEXT */ + epoxy_glGetNamedBufferParameterui64vNV_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameterui64vNV */ + epoxy_glGetNamedBufferPointerv_dispatch_table_rewrite_ptr, /* glGetNamedBufferPointerv */ + epoxy_glGetNamedBufferPointervEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferPointervEXT */ + epoxy_glGetNamedBufferSubData_dispatch_table_rewrite_ptr, /* glGetNamedBufferSubData */ + epoxy_glGetNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferSubDataEXT */ + epoxy_glGetNamedFramebufferAttachmentParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferAttachmentParameteriv */ + epoxy_glGetNamedFramebufferAttachmentParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferAttachmentParameterivEXT */ + epoxy_glGetNamedFramebufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferParameteriv */ + epoxy_glGetNamedFramebufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferParameterivEXT */ + epoxy_glGetNamedProgramLocalParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterIivEXT */ + epoxy_glGetNamedProgramLocalParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterIuivEXT */ + epoxy_glGetNamedProgramLocalParameterdvEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterdvEXT */ + epoxy_glGetNamedProgramLocalParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterfvEXT */ + epoxy_glGetNamedProgramStringEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramStringEXT */ + epoxy_glGetNamedProgramivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramivEXT */ + epoxy_glGetNamedRenderbufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedRenderbufferParameteriv */ + epoxy_glGetNamedRenderbufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedRenderbufferParameterivEXT */ + epoxy_glGetNamedStringARB_dispatch_table_rewrite_ptr, /* glGetNamedStringARB */ + epoxy_glGetNamedStringivARB_dispatch_table_rewrite_ptr, /* glGetNamedStringivARB */ + epoxy_glGetNextPerfQueryIdINTEL_dispatch_table_rewrite_ptr, /* glGetNextPerfQueryIdINTEL */ + epoxy_glGetObjectBufferfvATI_dispatch_table_rewrite_ptr, /* glGetObjectBufferfvATI */ + epoxy_glGetObjectBufferivATI_dispatch_table_rewrite_ptr, /* glGetObjectBufferivATI */ + epoxy_glGetObjectLabel_dispatch_table_rewrite_ptr, /* glGetObjectLabel */ + epoxy_glGetObjectLabelEXT_dispatch_table_rewrite_ptr, /* glGetObjectLabelEXT */ + epoxy_glGetObjectLabelKHR_dispatch_table_rewrite_ptr, /* glGetObjectLabelKHR */ + epoxy_glGetObjectParameterfvARB_dispatch_table_rewrite_ptr, /* glGetObjectParameterfvARB */ + epoxy_glGetObjectParameterivAPPLE_dispatch_table_rewrite_ptr, /* glGetObjectParameterivAPPLE */ + epoxy_glGetObjectParameterivARB_dispatch_table_rewrite_ptr, /* glGetObjectParameterivARB */ + epoxy_glGetObjectPtrLabel_dispatch_table_rewrite_ptr, /* glGetObjectPtrLabel */ + epoxy_glGetObjectPtrLabelKHR_dispatch_table_rewrite_ptr, /* glGetObjectPtrLabelKHR */ + epoxy_glGetOcclusionQueryivNV_dispatch_table_rewrite_ptr, /* glGetOcclusionQueryivNV */ + epoxy_glGetOcclusionQueryuivNV_dispatch_table_rewrite_ptr, /* glGetOcclusionQueryuivNV */ + epoxy_glGetPathColorGenfvNV_dispatch_table_rewrite_ptr, /* glGetPathColorGenfvNV */ + epoxy_glGetPathColorGenivNV_dispatch_table_rewrite_ptr, /* glGetPathColorGenivNV */ + epoxy_glGetPathCommandsNV_dispatch_table_rewrite_ptr, /* glGetPathCommandsNV */ + epoxy_glGetPathCoordsNV_dispatch_table_rewrite_ptr, /* glGetPathCoordsNV */ + epoxy_glGetPathDashArrayNV_dispatch_table_rewrite_ptr, /* glGetPathDashArrayNV */ + epoxy_glGetPathLengthNV_dispatch_table_rewrite_ptr, /* glGetPathLengthNV */ + epoxy_glGetPathMetricRangeNV_dispatch_table_rewrite_ptr, /* glGetPathMetricRangeNV */ + epoxy_glGetPathMetricsNV_dispatch_table_rewrite_ptr, /* glGetPathMetricsNV */ + epoxy_glGetPathParameterfvNV_dispatch_table_rewrite_ptr, /* glGetPathParameterfvNV */ + epoxy_glGetPathParameterivNV_dispatch_table_rewrite_ptr, /* glGetPathParameterivNV */ + epoxy_glGetPathSpacingNV_dispatch_table_rewrite_ptr, /* glGetPathSpacingNV */ + epoxy_glGetPathTexGenfvNV_dispatch_table_rewrite_ptr, /* glGetPathTexGenfvNV */ + epoxy_glGetPathTexGenivNV_dispatch_table_rewrite_ptr, /* glGetPathTexGenivNV */ + epoxy_glGetPerfCounterInfoINTEL_dispatch_table_rewrite_ptr, /* glGetPerfCounterInfoINTEL */ + epoxy_glGetPerfMonitorCounterDataAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterDataAMD */ + epoxy_glGetPerfMonitorCounterInfoAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterInfoAMD */ + epoxy_glGetPerfMonitorCounterStringAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterStringAMD */ + epoxy_glGetPerfMonitorCountersAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCountersAMD */ + epoxy_glGetPerfMonitorGroupStringAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorGroupStringAMD */ + epoxy_glGetPerfMonitorGroupsAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorGroupsAMD */ + epoxy_glGetPerfQueryDataINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryDataINTEL */ + epoxy_glGetPerfQueryIdByNameINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryIdByNameINTEL */ + epoxy_glGetPerfQueryInfoINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryInfoINTEL */ + epoxy_glGetPixelMapfv_dispatch_table_rewrite_ptr, /* glGetPixelMapfv */ + epoxy_glGetPixelMapuiv_dispatch_table_rewrite_ptr, /* glGetPixelMapuiv */ + epoxy_glGetPixelMapusv_dispatch_table_rewrite_ptr, /* glGetPixelMapusv */ + epoxy_glGetPixelMapxv_dispatch_table_rewrite_ptr, /* glGetPixelMapxv */ + epoxy_glGetPixelTexGenParameterfvSGIS_dispatch_table_rewrite_ptr, /* glGetPixelTexGenParameterfvSGIS */ + epoxy_glGetPixelTexGenParameterivSGIS_dispatch_table_rewrite_ptr, /* glGetPixelTexGenParameterivSGIS */ + epoxy_glGetPixelTransformParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetPixelTransformParameterfvEXT */ + epoxy_glGetPixelTransformParameterivEXT_dispatch_table_rewrite_ptr, /* glGetPixelTransformParameterivEXT */ + epoxy_glGetPointerIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetPointerIndexedvEXT */ + epoxy_glGetPointeri_vEXT_dispatch_table_rewrite_ptr, /* glGetPointeri_vEXT */ + epoxy_glGetPointerv_dispatch_table_rewrite_ptr, /* glGetPointerv */ + epoxy_glGetPointervEXT_dispatch_table_rewrite_ptr, /* glGetPointervEXT */ + epoxy_glGetPointervKHR_dispatch_table_rewrite_ptr, /* glGetPointervKHR */ + epoxy_glGetPolygonStipple_dispatch_table_rewrite_ptr, /* glGetPolygonStipple */ + epoxy_glGetProgramBinary_dispatch_table_rewrite_ptr, /* glGetProgramBinary */ + epoxy_glGetProgramBinaryOES_dispatch_table_rewrite_ptr, /* glGetProgramBinaryOES */ + epoxy_glGetProgramEnvParameterIivNV_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterIivNV */ + epoxy_glGetProgramEnvParameterIuivNV_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterIuivNV */ + epoxy_glGetProgramEnvParameterdvARB_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterdvARB */ + epoxy_glGetProgramEnvParameterfvARB_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterfvARB */ + epoxy_glGetProgramInfoLog_dispatch_table_rewrite_ptr, /* glGetProgramInfoLog */ + epoxy_glGetProgramInterfaceiv_dispatch_table_rewrite_ptr, /* glGetProgramInterfaceiv */ + epoxy_glGetProgramLocalParameterIivNV_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterIivNV */ + epoxy_glGetProgramLocalParameterIuivNV_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterIuivNV */ + epoxy_glGetProgramLocalParameterdvARB_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterdvARB */ + epoxy_glGetProgramLocalParameterfvARB_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterfvARB */ + epoxy_glGetProgramNamedParameterdvNV_dispatch_table_rewrite_ptr, /* glGetProgramNamedParameterdvNV */ + epoxy_glGetProgramNamedParameterfvNV_dispatch_table_rewrite_ptr, /* glGetProgramNamedParameterfvNV */ + epoxy_glGetProgramParameterdvNV_dispatch_table_rewrite_ptr, /* glGetProgramParameterdvNV */ + epoxy_glGetProgramParameterfvNV_dispatch_table_rewrite_ptr, /* glGetProgramParameterfvNV */ + epoxy_glGetProgramPipelineInfoLog_dispatch_table_rewrite_ptr, /* glGetProgramPipelineInfoLog */ + epoxy_glGetProgramPipelineInfoLogEXT_dispatch_table_rewrite_ptr, /* glGetProgramPipelineInfoLogEXT */ + epoxy_glGetProgramPipelineiv_dispatch_table_rewrite_ptr, /* glGetProgramPipelineiv */ + epoxy_glGetProgramPipelineivEXT_dispatch_table_rewrite_ptr, /* glGetProgramPipelineivEXT */ + epoxy_glGetProgramResourceIndex_dispatch_table_rewrite_ptr, /* glGetProgramResourceIndex */ + epoxy_glGetProgramResourceLocation_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocation */ + epoxy_glGetProgramResourceLocationIndex_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocationIndex */ + epoxy_glGetProgramResourceLocationIndexEXT_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocationIndexEXT */ + epoxy_glGetProgramResourceName_dispatch_table_rewrite_ptr, /* glGetProgramResourceName */ + epoxy_glGetProgramResourcefvNV_dispatch_table_rewrite_ptr, /* glGetProgramResourcefvNV */ + epoxy_glGetProgramResourceiv_dispatch_table_rewrite_ptr, /* glGetProgramResourceiv */ + epoxy_glGetProgramStageiv_dispatch_table_rewrite_ptr, /* glGetProgramStageiv */ + epoxy_glGetProgramStringARB_dispatch_table_rewrite_ptr, /* glGetProgramStringARB */ + epoxy_glGetProgramStringNV_dispatch_table_rewrite_ptr, /* glGetProgramStringNV */ + epoxy_glGetProgramSubroutineParameteruivNV_dispatch_table_rewrite_ptr, /* glGetProgramSubroutineParameteruivNV */ + epoxy_glGetProgramiv_dispatch_table_rewrite_ptr, /* glGetProgramiv */ + epoxy_glGetProgramivARB_dispatch_table_rewrite_ptr, /* glGetProgramivARB */ + epoxy_glGetProgramivNV_dispatch_table_rewrite_ptr, /* glGetProgramivNV */ + epoxy_glGetQueryBufferObjecti64v_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjecti64v */ + epoxy_glGetQueryBufferObjectiv_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectiv */ + epoxy_glGetQueryBufferObjectui64v_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectui64v */ + epoxy_glGetQueryBufferObjectuiv_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectuiv */ + epoxy_glGetQueryIndexediv_dispatch_table_rewrite_ptr, /* glGetQueryIndexediv */ + epoxy_glGetQueryObjecti64v_dispatch_table_rewrite_ptr, /* glGetQueryObjecti64v */ + epoxy_glGetQueryObjecti64vEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjecti64vEXT */ + epoxy_glGetQueryObjectiv_dispatch_table_rewrite_ptr, /* glGetQueryObjectiv */ + epoxy_glGetQueryObjectivARB_dispatch_table_rewrite_ptr, /* glGetQueryObjectivARB */ + epoxy_glGetQueryObjectivEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectivEXT */ + epoxy_glGetQueryObjectui64v_dispatch_table_rewrite_ptr, /* glGetQueryObjectui64v */ + epoxy_glGetQueryObjectui64vEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectui64vEXT */ + epoxy_glGetQueryObjectuiv_dispatch_table_rewrite_ptr, /* glGetQueryObjectuiv */ + epoxy_glGetQueryObjectuivARB_dispatch_table_rewrite_ptr, /* glGetQueryObjectuivARB */ + epoxy_glGetQueryObjectuivEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectuivEXT */ + epoxy_glGetQueryiv_dispatch_table_rewrite_ptr, /* glGetQueryiv */ + epoxy_glGetQueryivARB_dispatch_table_rewrite_ptr, /* glGetQueryivARB */ + epoxy_glGetQueryivEXT_dispatch_table_rewrite_ptr, /* glGetQueryivEXT */ + epoxy_glGetRenderbufferParameteriv_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameteriv */ + epoxy_glGetRenderbufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameterivEXT */ + epoxy_glGetRenderbufferParameterivOES_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameterivOES */ + epoxy_glGetSamplerParameterIiv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIiv */ + epoxy_glGetSamplerParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIivEXT */ + epoxy_glGetSamplerParameterIivOES_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIivOES */ + epoxy_glGetSamplerParameterIuiv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuiv */ + epoxy_glGetSamplerParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuivEXT */ + epoxy_glGetSamplerParameterIuivOES_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuivOES */ + epoxy_glGetSamplerParameterfv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterfv */ + epoxy_glGetSamplerParameteriv_dispatch_table_rewrite_ptr, /* glGetSamplerParameteriv */ + epoxy_glGetSeparableFilter_dispatch_table_rewrite_ptr, /* glGetSeparableFilter */ + epoxy_glGetSeparableFilterEXT_dispatch_table_rewrite_ptr, /* glGetSeparableFilterEXT */ + epoxy_glGetShaderInfoLog_dispatch_table_rewrite_ptr, /* glGetShaderInfoLog */ + epoxy_glGetShaderPrecisionFormat_dispatch_table_rewrite_ptr, /* glGetShaderPrecisionFormat */ + epoxy_glGetShaderSource_dispatch_table_rewrite_ptr, /* glGetShaderSource */ + epoxy_glGetShaderSourceARB_dispatch_table_rewrite_ptr, /* glGetShaderSourceARB */ + epoxy_glGetShaderiv_dispatch_table_rewrite_ptr, /* glGetShaderiv */ + epoxy_glGetSharpenTexFuncSGIS_dispatch_table_rewrite_ptr, /* glGetSharpenTexFuncSGIS */ + epoxy_glGetStageIndexNV_dispatch_table_rewrite_ptr, /* glGetStageIndexNV */ + epoxy_glGetString_dispatch_table_rewrite_ptr, /* glGetString */ + epoxy_glGetStringi_dispatch_table_rewrite_ptr, /* glGetStringi */ + epoxy_glGetSubroutineIndex_dispatch_table_rewrite_ptr, /* glGetSubroutineIndex */ + epoxy_glGetSubroutineUniformLocation_dispatch_table_rewrite_ptr, /* glGetSubroutineUniformLocation */ + epoxy_glGetSynciv_dispatch_table_rewrite_ptr, /* glGetSynciv */ + epoxy_glGetSyncivAPPLE_dispatch_table_rewrite_ptr, /* glGetSyncivAPPLE */ + epoxy_glGetTexBumpParameterfvATI_dispatch_table_rewrite_ptr, /* glGetTexBumpParameterfvATI */ + epoxy_glGetTexBumpParameterivATI_dispatch_table_rewrite_ptr, /* glGetTexBumpParameterivATI */ + epoxy_glGetTexEnvfv_dispatch_table_rewrite_ptr, /* glGetTexEnvfv */ + epoxy_glGetTexEnviv_dispatch_table_rewrite_ptr, /* glGetTexEnviv */ + epoxy_glGetTexEnvxv_dispatch_table_rewrite_ptr, /* glGetTexEnvxv */ + epoxy_glGetTexEnvxvOES_dispatch_table_rewrite_ptr, /* glGetTexEnvxvOES */ + epoxy_glGetTexFilterFuncSGIS_dispatch_table_rewrite_ptr, /* glGetTexFilterFuncSGIS */ + epoxy_glGetTexGendv_dispatch_table_rewrite_ptr, /* glGetTexGendv */ + epoxy_glGetTexGenfv_dispatch_table_rewrite_ptr, /* glGetTexGenfv */ + epoxy_glGetTexGenfvOES_dispatch_table_rewrite_ptr, /* glGetTexGenfvOES */ + epoxy_glGetTexGeniv_dispatch_table_rewrite_ptr, /* glGetTexGeniv */ + epoxy_glGetTexGenivOES_dispatch_table_rewrite_ptr, /* glGetTexGenivOES */ + epoxy_glGetTexGenxvOES_dispatch_table_rewrite_ptr, /* glGetTexGenxvOES */ + epoxy_glGetTexImage_dispatch_table_rewrite_ptr, /* glGetTexImage */ + epoxy_glGetTexLevelParameterfv_dispatch_table_rewrite_ptr, /* glGetTexLevelParameterfv */ + epoxy_glGetTexLevelParameteriv_dispatch_table_rewrite_ptr, /* glGetTexLevelParameteriv */ + epoxy_glGetTexLevelParameterxvOES_dispatch_table_rewrite_ptr, /* glGetTexLevelParameterxvOES */ + epoxy_glGetTexParameterIiv_dispatch_table_rewrite_ptr, /* glGetTexParameterIiv */ + epoxy_glGetTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetTexParameterIivEXT */ + epoxy_glGetTexParameterIivOES_dispatch_table_rewrite_ptr, /* glGetTexParameterIivOES */ + epoxy_glGetTexParameterIuiv_dispatch_table_rewrite_ptr, /* glGetTexParameterIuiv */ + epoxy_glGetTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetTexParameterIuivEXT */ + epoxy_glGetTexParameterIuivOES_dispatch_table_rewrite_ptr, /* glGetTexParameterIuivOES */ + epoxy_glGetTexParameterPointervAPPLE_dispatch_table_rewrite_ptr, /* glGetTexParameterPointervAPPLE */ + epoxy_glGetTexParameterfv_dispatch_table_rewrite_ptr, /* glGetTexParameterfv */ + epoxy_glGetTexParameteriv_dispatch_table_rewrite_ptr, /* glGetTexParameteriv */ + epoxy_glGetTexParameterxv_dispatch_table_rewrite_ptr, /* glGetTexParameterxv */ + epoxy_glGetTexParameterxvOES_dispatch_table_rewrite_ptr, /* glGetTexParameterxvOES */ + epoxy_glGetTextureHandleARB_dispatch_table_rewrite_ptr, /* glGetTextureHandleARB */ + epoxy_glGetTextureHandleNV_dispatch_table_rewrite_ptr, /* glGetTextureHandleNV */ + epoxy_glGetTextureImage_dispatch_table_rewrite_ptr, /* glGetTextureImage */ + epoxy_glGetTextureImageEXT_dispatch_table_rewrite_ptr, /* glGetTextureImageEXT */ + epoxy_glGetTextureLevelParameterfv_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterfv */ + epoxy_glGetTextureLevelParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterfvEXT */ + epoxy_glGetTextureLevelParameteriv_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameteriv */ + epoxy_glGetTextureLevelParameterivEXT_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterivEXT */ + epoxy_glGetTextureParameterIiv_dispatch_table_rewrite_ptr, /* glGetTextureParameterIiv */ + epoxy_glGetTextureParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterIivEXT */ + epoxy_glGetTextureParameterIuiv_dispatch_table_rewrite_ptr, /* glGetTextureParameterIuiv */ + epoxy_glGetTextureParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterIuivEXT */ + epoxy_glGetTextureParameterfv_dispatch_table_rewrite_ptr, /* glGetTextureParameterfv */ + epoxy_glGetTextureParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterfvEXT */ + epoxy_glGetTextureParameteriv_dispatch_table_rewrite_ptr, /* glGetTextureParameteriv */ + epoxy_glGetTextureParameterivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterivEXT */ + epoxy_glGetTextureSamplerHandleARB_dispatch_table_rewrite_ptr, /* glGetTextureSamplerHandleARB */ + epoxy_glGetTextureSamplerHandleNV_dispatch_table_rewrite_ptr, /* glGetTextureSamplerHandleNV */ + epoxy_glGetTextureSubImage_dispatch_table_rewrite_ptr, /* glGetTextureSubImage */ + epoxy_glGetTrackMatrixivNV_dispatch_table_rewrite_ptr, /* glGetTrackMatrixivNV */ + epoxy_glGetTransformFeedbackVarying_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVarying */ + epoxy_glGetTransformFeedbackVaryingEXT_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVaryingEXT */ + epoxy_glGetTransformFeedbackVaryingNV_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVaryingNV */ + epoxy_glGetTransformFeedbacki64_v_dispatch_table_rewrite_ptr, /* glGetTransformFeedbacki64_v */ + epoxy_glGetTransformFeedbacki_v_dispatch_table_rewrite_ptr, /* glGetTransformFeedbacki_v */ + epoxy_glGetTransformFeedbackiv_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackiv */ + epoxy_glGetTranslatedShaderSourceANGLE_dispatch_table_rewrite_ptr, /* glGetTranslatedShaderSourceANGLE */ + epoxy_glGetUniformBlockIndex_dispatch_table_rewrite_ptr, /* glGetUniformBlockIndex */ + epoxy_glGetUniformBufferSizeEXT_dispatch_table_rewrite_ptr, /* glGetUniformBufferSizeEXT */ + epoxy_glGetUniformIndices_dispatch_table_rewrite_ptr, /* glGetUniformIndices */ + epoxy_glGetUniformLocation_dispatch_table_rewrite_ptr, /* glGetUniformLocation */ + epoxy_glGetUniformLocationARB_dispatch_table_rewrite_ptr, /* glGetUniformLocationARB */ + epoxy_glGetUniformOffsetEXT_dispatch_table_rewrite_ptr, /* glGetUniformOffsetEXT */ + epoxy_glGetUniformSubroutineuiv_dispatch_table_rewrite_ptr, /* glGetUniformSubroutineuiv */ + epoxy_glGetUniformdv_dispatch_table_rewrite_ptr, /* glGetUniformdv */ + epoxy_glGetUniformfv_dispatch_table_rewrite_ptr, /* glGetUniformfv */ + epoxy_glGetUniformfvARB_dispatch_table_rewrite_ptr, /* glGetUniformfvARB */ + epoxy_glGetUniformi64vARB_dispatch_table_rewrite_ptr, /* glGetUniformi64vARB */ + epoxy_glGetUniformi64vNV_dispatch_table_rewrite_ptr, /* glGetUniformi64vNV */ + epoxy_glGetUniformiv_dispatch_table_rewrite_ptr, /* glGetUniformiv */ + epoxy_glGetUniformivARB_dispatch_table_rewrite_ptr, /* glGetUniformivARB */ + epoxy_glGetUniformui64vARB_dispatch_table_rewrite_ptr, /* glGetUniformui64vARB */ + epoxy_glGetUniformui64vNV_dispatch_table_rewrite_ptr, /* glGetUniformui64vNV */ + epoxy_glGetUniformuiv_dispatch_table_rewrite_ptr, /* glGetUniformuiv */ + epoxy_glGetUniformuivEXT_dispatch_table_rewrite_ptr, /* glGetUniformuivEXT */ + epoxy_glGetVariantArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetVariantArrayObjectfvATI */ + epoxy_glGetVariantArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetVariantArrayObjectivATI */ + epoxy_glGetVariantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetVariantBooleanvEXT */ + epoxy_glGetVariantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetVariantFloatvEXT */ + epoxy_glGetVariantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetVariantIntegervEXT */ + epoxy_glGetVariantPointervEXT_dispatch_table_rewrite_ptr, /* glGetVariantPointervEXT */ + epoxy_glGetVaryingLocationNV_dispatch_table_rewrite_ptr, /* glGetVaryingLocationNV */ + epoxy_glGetVertexArrayIndexed64iv_dispatch_table_rewrite_ptr, /* glGetVertexArrayIndexed64iv */ + epoxy_glGetVertexArrayIndexediv_dispatch_table_rewrite_ptr, /* glGetVertexArrayIndexediv */ + epoxy_glGetVertexArrayIntegeri_vEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayIntegeri_vEXT */ + epoxy_glGetVertexArrayIntegervEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayIntegervEXT */ + epoxy_glGetVertexArrayPointeri_vEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayPointeri_vEXT */ + epoxy_glGetVertexArrayPointervEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayPointervEXT */ + epoxy_glGetVertexArrayiv_dispatch_table_rewrite_ptr, /* glGetVertexArrayiv */ + epoxy_glGetVertexAttribArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetVertexAttribArrayObjectfvATI */ + epoxy_glGetVertexAttribArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetVertexAttribArrayObjectivATI */ + epoxy_glGetVertexAttribIiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribIiv */ + epoxy_glGetVertexAttribIivEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribIivEXT */ + epoxy_glGetVertexAttribIuiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribIuiv */ + epoxy_glGetVertexAttribIuivEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribIuivEXT */ + epoxy_glGetVertexAttribLdv_dispatch_table_rewrite_ptr, /* glGetVertexAttribLdv */ + epoxy_glGetVertexAttribLdvEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribLdvEXT */ + epoxy_glGetVertexAttribLi64vNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribLi64vNV */ + epoxy_glGetVertexAttribLui64vARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribLui64vARB */ + epoxy_glGetVertexAttribLui64vNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribLui64vNV */ + epoxy_glGetVertexAttribPointerv_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointerv */ + epoxy_glGetVertexAttribPointervARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointervARB */ + epoxy_glGetVertexAttribPointervNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointervNV */ + epoxy_glGetVertexAttribdv_dispatch_table_rewrite_ptr, /* glGetVertexAttribdv */ + epoxy_glGetVertexAttribdvARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribdvARB */ + epoxy_glGetVertexAttribdvNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribdvNV */ + epoxy_glGetVertexAttribfv_dispatch_table_rewrite_ptr, /* glGetVertexAttribfv */ + epoxy_glGetVertexAttribfvARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribfvARB */ + epoxy_glGetVertexAttribfvNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribfvNV */ + epoxy_glGetVertexAttribiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribiv */ + epoxy_glGetVertexAttribivARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribivARB */ + epoxy_glGetVertexAttribivNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribivNV */ + epoxy_glGetVideoCaptureStreamdvNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamdvNV */ + epoxy_glGetVideoCaptureStreamfvNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamfvNV */ + epoxy_glGetVideoCaptureStreamivNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamivNV */ + epoxy_glGetVideoCaptureivNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureivNV */ + epoxy_glGetVideoi64vNV_dispatch_table_rewrite_ptr, /* glGetVideoi64vNV */ + epoxy_glGetVideoivNV_dispatch_table_rewrite_ptr, /* glGetVideoivNV */ + epoxy_glGetVideoui64vNV_dispatch_table_rewrite_ptr, /* glGetVideoui64vNV */ + epoxy_glGetVideouivNV_dispatch_table_rewrite_ptr, /* glGetVideouivNV */ + epoxy_glGetnColorTable_dispatch_table_rewrite_ptr, /* glGetnColorTable */ + epoxy_glGetnColorTableARB_dispatch_table_rewrite_ptr, /* glGetnColorTableARB */ + epoxy_glGetnCompressedTexImage_dispatch_table_rewrite_ptr, /* glGetnCompressedTexImage */ + epoxy_glGetnCompressedTexImageARB_dispatch_table_rewrite_ptr, /* glGetnCompressedTexImageARB */ + epoxy_glGetnConvolutionFilter_dispatch_table_rewrite_ptr, /* glGetnConvolutionFilter */ + epoxy_glGetnConvolutionFilterARB_dispatch_table_rewrite_ptr, /* glGetnConvolutionFilterARB */ + epoxy_glGetnHistogram_dispatch_table_rewrite_ptr, /* glGetnHistogram */ + epoxy_glGetnHistogramARB_dispatch_table_rewrite_ptr, /* glGetnHistogramARB */ + epoxy_glGetnMapdv_dispatch_table_rewrite_ptr, /* glGetnMapdv */ + epoxy_glGetnMapdvARB_dispatch_table_rewrite_ptr, /* glGetnMapdvARB */ + epoxy_glGetnMapfv_dispatch_table_rewrite_ptr, /* glGetnMapfv */ + epoxy_glGetnMapfvARB_dispatch_table_rewrite_ptr, /* glGetnMapfvARB */ + epoxy_glGetnMapiv_dispatch_table_rewrite_ptr, /* glGetnMapiv */ + epoxy_glGetnMapivARB_dispatch_table_rewrite_ptr, /* glGetnMapivARB */ + epoxy_glGetnMinmax_dispatch_table_rewrite_ptr, /* glGetnMinmax */ + epoxy_glGetnMinmaxARB_dispatch_table_rewrite_ptr, /* glGetnMinmaxARB */ + epoxy_glGetnPixelMapfv_dispatch_table_rewrite_ptr, /* glGetnPixelMapfv */ + epoxy_glGetnPixelMapfvARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapfvARB */ + epoxy_glGetnPixelMapuiv_dispatch_table_rewrite_ptr, /* glGetnPixelMapuiv */ + epoxy_glGetnPixelMapuivARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapuivARB */ + epoxy_glGetnPixelMapusv_dispatch_table_rewrite_ptr, /* glGetnPixelMapusv */ + epoxy_glGetnPixelMapusvARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapusvARB */ + epoxy_glGetnPolygonStipple_dispatch_table_rewrite_ptr, /* glGetnPolygonStipple */ + epoxy_glGetnPolygonStippleARB_dispatch_table_rewrite_ptr, /* glGetnPolygonStippleARB */ + epoxy_glGetnSeparableFilter_dispatch_table_rewrite_ptr, /* glGetnSeparableFilter */ + epoxy_glGetnSeparableFilterARB_dispatch_table_rewrite_ptr, /* glGetnSeparableFilterARB */ + epoxy_glGetnTexImage_dispatch_table_rewrite_ptr, /* glGetnTexImage */ + epoxy_glGetnTexImageARB_dispatch_table_rewrite_ptr, /* glGetnTexImageARB */ + epoxy_glGetnUniformdv_dispatch_table_rewrite_ptr, /* glGetnUniformdv */ + epoxy_glGetnUniformdvARB_dispatch_table_rewrite_ptr, /* glGetnUniformdvARB */ + epoxy_glGetnUniformfv_dispatch_table_rewrite_ptr, /* glGetnUniformfv */ + epoxy_glGetnUniformfvARB_dispatch_table_rewrite_ptr, /* glGetnUniformfvARB */ + epoxy_glGetnUniformfvEXT_dispatch_table_rewrite_ptr, /* glGetnUniformfvEXT */ + epoxy_glGetnUniformfvKHR_dispatch_table_rewrite_ptr, /* glGetnUniformfvKHR */ + epoxy_glGetnUniformi64vARB_dispatch_table_rewrite_ptr, /* glGetnUniformi64vARB */ + epoxy_glGetnUniformiv_dispatch_table_rewrite_ptr, /* glGetnUniformiv */ + epoxy_glGetnUniformivARB_dispatch_table_rewrite_ptr, /* glGetnUniformivARB */ + epoxy_glGetnUniformivEXT_dispatch_table_rewrite_ptr, /* glGetnUniformivEXT */ + epoxy_glGetnUniformivKHR_dispatch_table_rewrite_ptr, /* glGetnUniformivKHR */ + epoxy_glGetnUniformui64vARB_dispatch_table_rewrite_ptr, /* glGetnUniformui64vARB */ + epoxy_glGetnUniformuiv_dispatch_table_rewrite_ptr, /* glGetnUniformuiv */ + epoxy_glGetnUniformuivARB_dispatch_table_rewrite_ptr, /* glGetnUniformuivARB */ + epoxy_glGetnUniformuivKHR_dispatch_table_rewrite_ptr, /* glGetnUniformuivKHR */ + epoxy_glGlobalAlphaFactorbSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorbSUN */ + epoxy_glGlobalAlphaFactordSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactordSUN */ + epoxy_glGlobalAlphaFactorfSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorfSUN */ + epoxy_glGlobalAlphaFactoriSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactoriSUN */ + epoxy_glGlobalAlphaFactorsSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorsSUN */ + epoxy_glGlobalAlphaFactorubSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorubSUN */ + epoxy_glGlobalAlphaFactoruiSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactoruiSUN */ + epoxy_glGlobalAlphaFactorusSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorusSUN */ + epoxy_glHint_dispatch_table_rewrite_ptr, /* glHint */ + epoxy_glHintPGI_dispatch_table_rewrite_ptr, /* glHintPGI */ + epoxy_glHistogram_dispatch_table_rewrite_ptr, /* glHistogram */ + epoxy_glHistogramEXT_dispatch_table_rewrite_ptr, /* glHistogramEXT */ + epoxy_glIglooInterfaceSGIX_dispatch_table_rewrite_ptr, /* glIglooInterfaceSGIX */ + epoxy_glImageTransformParameterfHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterfHP */ + epoxy_glImageTransformParameterfvHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterfvHP */ + epoxy_glImageTransformParameteriHP_dispatch_table_rewrite_ptr, /* glImageTransformParameteriHP */ + epoxy_glImageTransformParameterivHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterivHP */ + epoxy_glImportSyncEXT_dispatch_table_rewrite_ptr, /* glImportSyncEXT */ + epoxy_glIndexFormatNV_dispatch_table_rewrite_ptr, /* glIndexFormatNV */ + epoxy_glIndexFuncEXT_dispatch_table_rewrite_ptr, /* glIndexFuncEXT */ + epoxy_glIndexMask_dispatch_table_rewrite_ptr, /* glIndexMask */ + epoxy_glIndexMaterialEXT_dispatch_table_rewrite_ptr, /* glIndexMaterialEXT */ + epoxy_glIndexPointer_dispatch_table_rewrite_ptr, /* glIndexPointer */ + epoxy_glIndexPointerEXT_dispatch_table_rewrite_ptr, /* glIndexPointerEXT */ + epoxy_glIndexPointerListIBM_dispatch_table_rewrite_ptr, /* glIndexPointerListIBM */ + epoxy_glIndexd_dispatch_table_rewrite_ptr, /* glIndexd */ + epoxy_glIndexdv_dispatch_table_rewrite_ptr, /* glIndexdv */ + epoxy_glIndexf_dispatch_table_rewrite_ptr, /* glIndexf */ + epoxy_glIndexfv_dispatch_table_rewrite_ptr, /* glIndexfv */ + epoxy_glIndexi_dispatch_table_rewrite_ptr, /* glIndexi */ + epoxy_glIndexiv_dispatch_table_rewrite_ptr, /* glIndexiv */ + epoxy_glIndexs_dispatch_table_rewrite_ptr, /* glIndexs */ + epoxy_glIndexsv_dispatch_table_rewrite_ptr, /* glIndexsv */ + epoxy_glIndexub_dispatch_table_rewrite_ptr, /* glIndexub */ + epoxy_glIndexubv_dispatch_table_rewrite_ptr, /* glIndexubv */ + epoxy_glIndexxOES_dispatch_table_rewrite_ptr, /* glIndexxOES */ + epoxy_glIndexxvOES_dispatch_table_rewrite_ptr, /* glIndexxvOES */ + epoxy_glInitNames_dispatch_table_rewrite_ptr, /* glInitNames */ + epoxy_glInsertComponentEXT_dispatch_table_rewrite_ptr, /* glInsertComponentEXT */ + epoxy_glInsertEventMarkerEXT_dispatch_table_rewrite_ptr, /* glInsertEventMarkerEXT */ + epoxy_glInstrumentsBufferSGIX_dispatch_table_rewrite_ptr, /* glInstrumentsBufferSGIX */ + epoxy_glInterleavedArrays_dispatch_table_rewrite_ptr, /* glInterleavedArrays */ + epoxy_glInterpolatePathsNV_dispatch_table_rewrite_ptr, /* glInterpolatePathsNV */ + epoxy_glInvalidateBufferData_dispatch_table_rewrite_ptr, /* glInvalidateBufferData */ + epoxy_glInvalidateBufferSubData_dispatch_table_rewrite_ptr, /* glInvalidateBufferSubData */ + epoxy_glInvalidateFramebuffer_dispatch_table_rewrite_ptr, /* glInvalidateFramebuffer */ + epoxy_glInvalidateNamedFramebufferData_dispatch_table_rewrite_ptr, /* glInvalidateNamedFramebufferData */ + epoxy_glInvalidateNamedFramebufferSubData_dispatch_table_rewrite_ptr, /* glInvalidateNamedFramebufferSubData */ + epoxy_glInvalidateSubFramebuffer_dispatch_table_rewrite_ptr, /* glInvalidateSubFramebuffer */ + epoxy_glInvalidateTexImage_dispatch_table_rewrite_ptr, /* glInvalidateTexImage */ + epoxy_glInvalidateTexSubImage_dispatch_table_rewrite_ptr, /* glInvalidateTexSubImage */ + epoxy_glIsAsyncMarkerSGIX_dispatch_table_rewrite_ptr, /* glIsAsyncMarkerSGIX */ + epoxy_glIsBuffer_dispatch_table_rewrite_ptr, /* glIsBuffer */ + epoxy_glIsBufferARB_dispatch_table_rewrite_ptr, /* glIsBufferARB */ + epoxy_glIsBufferResidentNV_dispatch_table_rewrite_ptr, /* glIsBufferResidentNV */ + epoxy_glIsCommandListNV_dispatch_table_rewrite_ptr, /* glIsCommandListNV */ + epoxy_glIsEnabled_dispatch_table_rewrite_ptr, /* glIsEnabled */ + epoxy_glIsEnabledIndexedEXT_dispatch_table_rewrite_ptr, /* glIsEnabledIndexedEXT */ + epoxy_glIsEnabledi_dispatch_table_rewrite_ptr, /* glIsEnabledi */ + epoxy_glIsEnablediEXT_dispatch_table_rewrite_ptr, /* glIsEnablediEXT */ + epoxy_glIsEnablediNV_dispatch_table_rewrite_ptr, /* glIsEnablediNV */ + epoxy_glIsEnablediOES_dispatch_table_rewrite_ptr, /* glIsEnablediOES */ + epoxy_glIsFenceAPPLE_dispatch_table_rewrite_ptr, /* glIsFenceAPPLE */ + epoxy_glIsFenceNV_dispatch_table_rewrite_ptr, /* glIsFenceNV */ + epoxy_glIsFramebuffer_dispatch_table_rewrite_ptr, /* glIsFramebuffer */ + epoxy_glIsFramebufferEXT_dispatch_table_rewrite_ptr, /* glIsFramebufferEXT */ + epoxy_glIsFramebufferOES_dispatch_table_rewrite_ptr, /* glIsFramebufferOES */ + epoxy_glIsImageHandleResidentARB_dispatch_table_rewrite_ptr, /* glIsImageHandleResidentARB */ + epoxy_glIsImageHandleResidentNV_dispatch_table_rewrite_ptr, /* glIsImageHandleResidentNV */ + epoxy_glIsList_dispatch_table_rewrite_ptr, /* glIsList */ + epoxy_glIsNameAMD_dispatch_table_rewrite_ptr, /* glIsNameAMD */ + epoxy_glIsNamedBufferResidentNV_dispatch_table_rewrite_ptr, /* glIsNamedBufferResidentNV */ + epoxy_glIsNamedStringARB_dispatch_table_rewrite_ptr, /* glIsNamedStringARB */ + epoxy_glIsObjectBufferATI_dispatch_table_rewrite_ptr, /* glIsObjectBufferATI */ + epoxy_glIsOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glIsOcclusionQueryNV */ + epoxy_glIsPathNV_dispatch_table_rewrite_ptr, /* glIsPathNV */ + epoxy_glIsPointInFillPathNV_dispatch_table_rewrite_ptr, /* glIsPointInFillPathNV */ + epoxy_glIsPointInStrokePathNV_dispatch_table_rewrite_ptr, /* glIsPointInStrokePathNV */ + epoxy_glIsProgram_dispatch_table_rewrite_ptr, /* glIsProgram */ + epoxy_glIsProgramARB_dispatch_table_rewrite_ptr, /* glIsProgramARB */ + epoxy_glIsProgramNV_dispatch_table_rewrite_ptr, /* glIsProgramNV */ + epoxy_glIsProgramPipeline_dispatch_table_rewrite_ptr, /* glIsProgramPipeline */ + epoxy_glIsProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glIsProgramPipelineEXT */ + epoxy_glIsQuery_dispatch_table_rewrite_ptr, /* glIsQuery */ + epoxy_glIsQueryARB_dispatch_table_rewrite_ptr, /* glIsQueryARB */ + epoxy_glIsQueryEXT_dispatch_table_rewrite_ptr, /* glIsQueryEXT */ + epoxy_glIsRenderbuffer_dispatch_table_rewrite_ptr, /* glIsRenderbuffer */ + epoxy_glIsRenderbufferEXT_dispatch_table_rewrite_ptr, /* glIsRenderbufferEXT */ + epoxy_glIsRenderbufferOES_dispatch_table_rewrite_ptr, /* glIsRenderbufferOES */ + epoxy_glIsSampler_dispatch_table_rewrite_ptr, /* glIsSampler */ + epoxy_glIsShader_dispatch_table_rewrite_ptr, /* glIsShader */ + epoxy_glIsStateNV_dispatch_table_rewrite_ptr, /* glIsStateNV */ + epoxy_glIsSync_dispatch_table_rewrite_ptr, /* glIsSync */ + epoxy_glIsSyncAPPLE_dispatch_table_rewrite_ptr, /* glIsSyncAPPLE */ + epoxy_glIsTexture_dispatch_table_rewrite_ptr, /* glIsTexture */ + epoxy_glIsTextureEXT_dispatch_table_rewrite_ptr, /* glIsTextureEXT */ + epoxy_glIsTextureHandleResidentARB_dispatch_table_rewrite_ptr, /* glIsTextureHandleResidentARB */ + epoxy_glIsTextureHandleResidentNV_dispatch_table_rewrite_ptr, /* glIsTextureHandleResidentNV */ + epoxy_glIsTransformFeedback_dispatch_table_rewrite_ptr, /* glIsTransformFeedback */ + epoxy_glIsTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glIsTransformFeedbackNV */ + epoxy_glIsVariantEnabledEXT_dispatch_table_rewrite_ptr, /* glIsVariantEnabledEXT */ + epoxy_glIsVertexArray_dispatch_table_rewrite_ptr, /* glIsVertexArray */ + epoxy_glIsVertexArrayAPPLE_dispatch_table_rewrite_ptr, /* glIsVertexArrayAPPLE */ + epoxy_glIsVertexArrayOES_dispatch_table_rewrite_ptr, /* glIsVertexArrayOES */ + epoxy_glIsVertexAttribEnabledAPPLE_dispatch_table_rewrite_ptr, /* glIsVertexAttribEnabledAPPLE */ + epoxy_glLabelObjectEXT_dispatch_table_rewrite_ptr, /* glLabelObjectEXT */ + epoxy_glLightEnviSGIX_dispatch_table_rewrite_ptr, /* glLightEnviSGIX */ + epoxy_glLightModelf_dispatch_table_rewrite_ptr, /* glLightModelf */ + epoxy_glLightModelfv_dispatch_table_rewrite_ptr, /* glLightModelfv */ + epoxy_glLightModeli_dispatch_table_rewrite_ptr, /* glLightModeli */ + epoxy_glLightModeliv_dispatch_table_rewrite_ptr, /* glLightModeliv */ + epoxy_glLightModelx_dispatch_table_rewrite_ptr, /* glLightModelx */ + epoxy_glLightModelxOES_dispatch_table_rewrite_ptr, /* glLightModelxOES */ + epoxy_glLightModelxv_dispatch_table_rewrite_ptr, /* glLightModelxv */ + epoxy_glLightModelxvOES_dispatch_table_rewrite_ptr, /* glLightModelxvOES */ + epoxy_glLightf_dispatch_table_rewrite_ptr, /* glLightf */ + epoxy_glLightfv_dispatch_table_rewrite_ptr, /* glLightfv */ + epoxy_glLighti_dispatch_table_rewrite_ptr, /* glLighti */ + epoxy_glLightiv_dispatch_table_rewrite_ptr, /* glLightiv */ + epoxy_glLightx_dispatch_table_rewrite_ptr, /* glLightx */ + epoxy_glLightxOES_dispatch_table_rewrite_ptr, /* glLightxOES */ + epoxy_glLightxv_dispatch_table_rewrite_ptr, /* glLightxv */ + epoxy_glLightxvOES_dispatch_table_rewrite_ptr, /* glLightxvOES */ + epoxy_glLineStipple_dispatch_table_rewrite_ptr, /* glLineStipple */ + epoxy_glLineWidth_dispatch_table_rewrite_ptr, /* glLineWidth */ + epoxy_glLineWidthx_dispatch_table_rewrite_ptr, /* glLineWidthx */ + epoxy_glLineWidthxOES_dispatch_table_rewrite_ptr, /* glLineWidthxOES */ + epoxy_glLinkProgram_dispatch_table_rewrite_ptr, /* glLinkProgram */ + epoxy_glLinkProgramARB_dispatch_table_rewrite_ptr, /* glLinkProgramARB */ + epoxy_glListBase_dispatch_table_rewrite_ptr, /* glListBase */ + epoxy_glListDrawCommandsStatesClientNV_dispatch_table_rewrite_ptr, /* glListDrawCommandsStatesClientNV */ + epoxy_glListParameterfSGIX_dispatch_table_rewrite_ptr, /* glListParameterfSGIX */ + epoxy_glListParameterfvSGIX_dispatch_table_rewrite_ptr, /* glListParameterfvSGIX */ + epoxy_glListParameteriSGIX_dispatch_table_rewrite_ptr, /* glListParameteriSGIX */ + epoxy_glListParameterivSGIX_dispatch_table_rewrite_ptr, /* glListParameterivSGIX */ + epoxy_glLoadIdentity_dispatch_table_rewrite_ptr, /* glLoadIdentity */ + epoxy_glLoadIdentityDeformationMapSGIX_dispatch_table_rewrite_ptr, /* glLoadIdentityDeformationMapSGIX */ + epoxy_glLoadMatrixd_dispatch_table_rewrite_ptr, /* glLoadMatrixd */ + epoxy_glLoadMatrixf_dispatch_table_rewrite_ptr, /* glLoadMatrixf */ + epoxy_glLoadMatrixx_dispatch_table_rewrite_ptr, /* glLoadMatrixx */ + epoxy_glLoadMatrixxOES_dispatch_table_rewrite_ptr, /* glLoadMatrixxOES */ + epoxy_glLoadName_dispatch_table_rewrite_ptr, /* glLoadName */ + epoxy_glLoadPaletteFromModelViewMatrixOES_dispatch_table_rewrite_ptr, /* glLoadPaletteFromModelViewMatrixOES */ + epoxy_glLoadProgramNV_dispatch_table_rewrite_ptr, /* glLoadProgramNV */ + epoxy_glLoadTransposeMatrixd_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixd */ + epoxy_glLoadTransposeMatrixdARB_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixdARB */ + epoxy_glLoadTransposeMatrixf_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixf */ + epoxy_glLoadTransposeMatrixfARB_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixfARB */ + epoxy_glLoadTransposeMatrixxOES_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixxOES */ + epoxy_glLockArraysEXT_dispatch_table_rewrite_ptr, /* glLockArraysEXT */ + epoxy_glLogicOp_dispatch_table_rewrite_ptr, /* glLogicOp */ + epoxy_glMakeBufferNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeBufferNonResidentNV */ + epoxy_glMakeBufferResidentNV_dispatch_table_rewrite_ptr, /* glMakeBufferResidentNV */ + epoxy_glMakeImageHandleNonResidentARB_dispatch_table_rewrite_ptr, /* glMakeImageHandleNonResidentARB */ + epoxy_glMakeImageHandleNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeImageHandleNonResidentNV */ + epoxy_glMakeImageHandleResidentARB_dispatch_table_rewrite_ptr, /* glMakeImageHandleResidentARB */ + epoxy_glMakeImageHandleResidentNV_dispatch_table_rewrite_ptr, /* glMakeImageHandleResidentNV */ + epoxy_glMakeNamedBufferNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeNamedBufferNonResidentNV */ + epoxy_glMakeNamedBufferResidentNV_dispatch_table_rewrite_ptr, /* glMakeNamedBufferResidentNV */ + epoxy_glMakeTextureHandleNonResidentARB_dispatch_table_rewrite_ptr, /* glMakeTextureHandleNonResidentARB */ + epoxy_glMakeTextureHandleNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeTextureHandleNonResidentNV */ + epoxy_glMakeTextureHandleResidentARB_dispatch_table_rewrite_ptr, /* glMakeTextureHandleResidentARB */ + epoxy_glMakeTextureHandleResidentNV_dispatch_table_rewrite_ptr, /* glMakeTextureHandleResidentNV */ + epoxy_glMap1d_dispatch_table_rewrite_ptr, /* glMap1d */ + epoxy_glMap1f_dispatch_table_rewrite_ptr, /* glMap1f */ + epoxy_glMap1xOES_dispatch_table_rewrite_ptr, /* glMap1xOES */ + epoxy_glMap2d_dispatch_table_rewrite_ptr, /* glMap2d */ + epoxy_glMap2f_dispatch_table_rewrite_ptr, /* glMap2f */ + epoxy_glMap2xOES_dispatch_table_rewrite_ptr, /* glMap2xOES */ + epoxy_glMapBuffer_dispatch_table_rewrite_ptr, /* glMapBuffer */ + epoxy_glMapBufferARB_dispatch_table_rewrite_ptr, /* glMapBufferARB */ + epoxy_glMapBufferOES_dispatch_table_rewrite_ptr, /* glMapBufferOES */ + epoxy_glMapBufferRange_dispatch_table_rewrite_ptr, /* glMapBufferRange */ + epoxy_glMapBufferRangeEXT_dispatch_table_rewrite_ptr, /* glMapBufferRangeEXT */ + epoxy_glMapControlPointsNV_dispatch_table_rewrite_ptr, /* glMapControlPointsNV */ + epoxy_glMapGrid1d_dispatch_table_rewrite_ptr, /* glMapGrid1d */ + epoxy_glMapGrid1f_dispatch_table_rewrite_ptr, /* glMapGrid1f */ + epoxy_glMapGrid1xOES_dispatch_table_rewrite_ptr, /* glMapGrid1xOES */ + epoxy_glMapGrid2d_dispatch_table_rewrite_ptr, /* glMapGrid2d */ + epoxy_glMapGrid2f_dispatch_table_rewrite_ptr, /* glMapGrid2f */ + epoxy_glMapGrid2xOES_dispatch_table_rewrite_ptr, /* glMapGrid2xOES */ + epoxy_glMapNamedBuffer_dispatch_table_rewrite_ptr, /* glMapNamedBuffer */ + epoxy_glMapNamedBufferEXT_dispatch_table_rewrite_ptr, /* glMapNamedBufferEXT */ + epoxy_glMapNamedBufferRange_dispatch_table_rewrite_ptr, /* glMapNamedBufferRange */ + epoxy_glMapNamedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glMapNamedBufferRangeEXT */ + epoxy_glMapObjectBufferATI_dispatch_table_rewrite_ptr, /* glMapObjectBufferATI */ + epoxy_glMapParameterfvNV_dispatch_table_rewrite_ptr, /* glMapParameterfvNV */ + epoxy_glMapParameterivNV_dispatch_table_rewrite_ptr, /* glMapParameterivNV */ + epoxy_glMapTexture2DINTEL_dispatch_table_rewrite_ptr, /* glMapTexture2DINTEL */ + epoxy_glMapVertexAttrib1dAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib1dAPPLE */ + epoxy_glMapVertexAttrib1fAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib1fAPPLE */ + epoxy_glMapVertexAttrib2dAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib2dAPPLE */ + epoxy_glMapVertexAttrib2fAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib2fAPPLE */ + epoxy_glMaterialf_dispatch_table_rewrite_ptr, /* glMaterialf */ + epoxy_glMaterialfv_dispatch_table_rewrite_ptr, /* glMaterialfv */ + epoxy_glMateriali_dispatch_table_rewrite_ptr, /* glMateriali */ + epoxy_glMaterialiv_dispatch_table_rewrite_ptr, /* glMaterialiv */ + epoxy_glMaterialx_dispatch_table_rewrite_ptr, /* glMaterialx */ + epoxy_glMaterialxOES_dispatch_table_rewrite_ptr, /* glMaterialxOES */ + epoxy_glMaterialxv_dispatch_table_rewrite_ptr, /* glMaterialxv */ + epoxy_glMaterialxvOES_dispatch_table_rewrite_ptr, /* glMaterialxvOES */ + epoxy_glMatrixFrustumEXT_dispatch_table_rewrite_ptr, /* glMatrixFrustumEXT */ + epoxy_glMatrixIndexPointerARB_dispatch_table_rewrite_ptr, /* glMatrixIndexPointerARB */ + epoxy_glMatrixIndexPointerOES_dispatch_table_rewrite_ptr, /* glMatrixIndexPointerOES */ + epoxy_glMatrixIndexubvARB_dispatch_table_rewrite_ptr, /* glMatrixIndexubvARB */ + epoxy_glMatrixIndexuivARB_dispatch_table_rewrite_ptr, /* glMatrixIndexuivARB */ + epoxy_glMatrixIndexusvARB_dispatch_table_rewrite_ptr, /* glMatrixIndexusvARB */ + epoxy_glMatrixLoad3x2fNV_dispatch_table_rewrite_ptr, /* glMatrixLoad3x2fNV */ + epoxy_glMatrixLoad3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixLoad3x3fNV */ + epoxy_glMatrixLoadIdentityEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadIdentityEXT */ + epoxy_glMatrixLoadTranspose3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixLoadTranspose3x3fNV */ + epoxy_glMatrixLoadTransposedEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadTransposedEXT */ + epoxy_glMatrixLoadTransposefEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadTransposefEXT */ + epoxy_glMatrixLoaddEXT_dispatch_table_rewrite_ptr, /* glMatrixLoaddEXT */ + epoxy_glMatrixLoadfEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadfEXT */ + epoxy_glMatrixMode_dispatch_table_rewrite_ptr, /* glMatrixMode */ + epoxy_glMatrixMult3x2fNV_dispatch_table_rewrite_ptr, /* glMatrixMult3x2fNV */ + epoxy_glMatrixMult3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixMult3x3fNV */ + epoxy_glMatrixMultTranspose3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixMultTranspose3x3fNV */ + epoxy_glMatrixMultTransposedEXT_dispatch_table_rewrite_ptr, /* glMatrixMultTransposedEXT */ + epoxy_glMatrixMultTransposefEXT_dispatch_table_rewrite_ptr, /* glMatrixMultTransposefEXT */ + epoxy_glMatrixMultdEXT_dispatch_table_rewrite_ptr, /* glMatrixMultdEXT */ + epoxy_glMatrixMultfEXT_dispatch_table_rewrite_ptr, /* glMatrixMultfEXT */ + epoxy_glMatrixOrthoEXT_dispatch_table_rewrite_ptr, /* glMatrixOrthoEXT */ + epoxy_glMatrixPopEXT_dispatch_table_rewrite_ptr, /* glMatrixPopEXT */ + epoxy_glMatrixPushEXT_dispatch_table_rewrite_ptr, /* glMatrixPushEXT */ + epoxy_glMatrixRotatedEXT_dispatch_table_rewrite_ptr, /* glMatrixRotatedEXT */ + epoxy_glMatrixRotatefEXT_dispatch_table_rewrite_ptr, /* glMatrixRotatefEXT */ + epoxy_glMatrixScaledEXT_dispatch_table_rewrite_ptr, /* glMatrixScaledEXT */ + epoxy_glMatrixScalefEXT_dispatch_table_rewrite_ptr, /* glMatrixScalefEXT */ + epoxy_glMatrixTranslatedEXT_dispatch_table_rewrite_ptr, /* glMatrixTranslatedEXT */ + epoxy_glMatrixTranslatefEXT_dispatch_table_rewrite_ptr, /* glMatrixTranslatefEXT */ + epoxy_glMaxShaderCompilerThreadsARB_dispatch_table_rewrite_ptr, /* glMaxShaderCompilerThreadsARB */ + epoxy_glMemoryBarrier_dispatch_table_rewrite_ptr, /* glMemoryBarrier */ + epoxy_glMemoryBarrierByRegion_dispatch_table_rewrite_ptr, /* glMemoryBarrierByRegion */ + epoxy_glMemoryBarrierEXT_dispatch_table_rewrite_ptr, /* glMemoryBarrierEXT */ + epoxy_glMinSampleShading_dispatch_table_rewrite_ptr, /* glMinSampleShading */ + epoxy_glMinSampleShadingARB_dispatch_table_rewrite_ptr, /* glMinSampleShadingARB */ + epoxy_glMinSampleShadingOES_dispatch_table_rewrite_ptr, /* glMinSampleShadingOES */ + epoxy_glMinmax_dispatch_table_rewrite_ptr, /* glMinmax */ + epoxy_glMinmaxEXT_dispatch_table_rewrite_ptr, /* glMinmaxEXT */ + epoxy_glMultMatrixd_dispatch_table_rewrite_ptr, /* glMultMatrixd */ + epoxy_glMultMatrixf_dispatch_table_rewrite_ptr, /* glMultMatrixf */ + epoxy_glMultMatrixx_dispatch_table_rewrite_ptr, /* glMultMatrixx */ + epoxy_glMultMatrixxOES_dispatch_table_rewrite_ptr, /* glMultMatrixxOES */ + epoxy_glMultTransposeMatrixd_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixd */ + epoxy_glMultTransposeMatrixdARB_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixdARB */ + epoxy_glMultTransposeMatrixf_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixf */ + epoxy_glMultTransposeMatrixfARB_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixfARB */ + epoxy_glMultTransposeMatrixxOES_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixxOES */ + epoxy_glMultiDrawArrays_dispatch_table_rewrite_ptr, /* glMultiDrawArrays */ + epoxy_glMultiDrawArraysEXT_dispatch_table_rewrite_ptr, /* glMultiDrawArraysEXT */ + epoxy_glMultiDrawArraysIndirect_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirect */ + epoxy_glMultiDrawArraysIndirectAMD_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectAMD */ + epoxy_glMultiDrawArraysIndirectBindlessCountNV_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectBindlessCountNV */ + epoxy_glMultiDrawArraysIndirectBindlessNV_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectBindlessNV */ + epoxy_glMultiDrawArraysIndirectCountARB_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectCountARB */ + epoxy_glMultiDrawArraysIndirectEXT_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectEXT */ + epoxy_glMultiDrawElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glMultiDrawElementArrayAPPLE */ + epoxy_glMultiDrawElements_dispatch_table_rewrite_ptr, /* glMultiDrawElements */ + epoxy_glMultiDrawElementsBaseVertex_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertex */ + epoxy_glMultiDrawElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertexEXT */ + epoxy_glMultiDrawElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertexOES */ + epoxy_glMultiDrawElementsEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsEXT */ + epoxy_glMultiDrawElementsIndirect_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirect */ + epoxy_glMultiDrawElementsIndirectAMD_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectAMD */ + epoxy_glMultiDrawElementsIndirectBindlessCountNV_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectBindlessCountNV */ + epoxy_glMultiDrawElementsIndirectBindlessNV_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectBindlessNV */ + epoxy_glMultiDrawElementsIndirectCountARB_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectCountARB */ + epoxy_glMultiDrawElementsIndirectEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectEXT */ + epoxy_glMultiDrawRangeElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glMultiDrawRangeElementArrayAPPLE */ + epoxy_glMultiModeDrawArraysIBM_dispatch_table_rewrite_ptr, /* glMultiModeDrawArraysIBM */ + epoxy_glMultiModeDrawElementsIBM_dispatch_table_rewrite_ptr, /* glMultiModeDrawElementsIBM */ + epoxy_glMultiTexBufferEXT_dispatch_table_rewrite_ptr, /* glMultiTexBufferEXT */ + epoxy_glMultiTexCoord1bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1bOES */ + epoxy_glMultiTexCoord1bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1bvOES */ + epoxy_glMultiTexCoord1d_dispatch_table_rewrite_ptr, /* glMultiTexCoord1d */ + epoxy_glMultiTexCoord1dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dARB */ + epoxy_glMultiTexCoord1dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dv */ + epoxy_glMultiTexCoord1dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dvARB */ + epoxy_glMultiTexCoord1f_dispatch_table_rewrite_ptr, /* glMultiTexCoord1f */ + epoxy_glMultiTexCoord1fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fARB */ + epoxy_glMultiTexCoord1fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fv */ + epoxy_glMultiTexCoord1fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fvARB */ + epoxy_glMultiTexCoord1hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord1hNV */ + epoxy_glMultiTexCoord1hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord1hvNV */ + epoxy_glMultiTexCoord1i_dispatch_table_rewrite_ptr, /* glMultiTexCoord1i */ + epoxy_glMultiTexCoord1iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1iARB */ + epoxy_glMultiTexCoord1iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1iv */ + epoxy_glMultiTexCoord1ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1ivARB */ + epoxy_glMultiTexCoord1s_dispatch_table_rewrite_ptr, /* glMultiTexCoord1s */ + epoxy_glMultiTexCoord1sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1sARB */ + epoxy_glMultiTexCoord1sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1sv */ + epoxy_glMultiTexCoord1svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1svARB */ + epoxy_glMultiTexCoord1xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1xOES */ + epoxy_glMultiTexCoord1xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1xvOES */ + epoxy_glMultiTexCoord2bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2bOES */ + epoxy_glMultiTexCoord2bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2bvOES */ + epoxy_glMultiTexCoord2d_dispatch_table_rewrite_ptr, /* glMultiTexCoord2d */ + epoxy_glMultiTexCoord2dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dARB */ + epoxy_glMultiTexCoord2dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dv */ + epoxy_glMultiTexCoord2dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dvARB */ + epoxy_glMultiTexCoord2f_dispatch_table_rewrite_ptr, /* glMultiTexCoord2f */ + epoxy_glMultiTexCoord2fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fARB */ + epoxy_glMultiTexCoord2fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fv */ + epoxy_glMultiTexCoord2fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fvARB */ + epoxy_glMultiTexCoord2hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord2hNV */ + epoxy_glMultiTexCoord2hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord2hvNV */ + epoxy_glMultiTexCoord2i_dispatch_table_rewrite_ptr, /* glMultiTexCoord2i */ + epoxy_glMultiTexCoord2iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2iARB */ + epoxy_glMultiTexCoord2iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2iv */ + epoxy_glMultiTexCoord2ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2ivARB */ + epoxy_glMultiTexCoord2s_dispatch_table_rewrite_ptr, /* glMultiTexCoord2s */ + epoxy_glMultiTexCoord2sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2sARB */ + epoxy_glMultiTexCoord2sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2sv */ + epoxy_glMultiTexCoord2svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2svARB */ + epoxy_glMultiTexCoord2xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2xOES */ + epoxy_glMultiTexCoord2xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2xvOES */ + epoxy_glMultiTexCoord3bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3bOES */ + epoxy_glMultiTexCoord3bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3bvOES */ + epoxy_glMultiTexCoord3d_dispatch_table_rewrite_ptr, /* glMultiTexCoord3d */ + epoxy_glMultiTexCoord3dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dARB */ + epoxy_glMultiTexCoord3dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dv */ + epoxy_glMultiTexCoord3dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dvARB */ + epoxy_glMultiTexCoord3f_dispatch_table_rewrite_ptr, /* glMultiTexCoord3f */ + epoxy_glMultiTexCoord3fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fARB */ + epoxy_glMultiTexCoord3fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fv */ + epoxy_glMultiTexCoord3fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fvARB */ + epoxy_glMultiTexCoord3hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord3hNV */ + epoxy_glMultiTexCoord3hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord3hvNV */ + epoxy_glMultiTexCoord3i_dispatch_table_rewrite_ptr, /* glMultiTexCoord3i */ + epoxy_glMultiTexCoord3iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3iARB */ + epoxy_glMultiTexCoord3iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3iv */ + epoxy_glMultiTexCoord3ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3ivARB */ + epoxy_glMultiTexCoord3s_dispatch_table_rewrite_ptr, /* glMultiTexCoord3s */ + epoxy_glMultiTexCoord3sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3sARB */ + epoxy_glMultiTexCoord3sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3sv */ + epoxy_glMultiTexCoord3svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3svARB */ + epoxy_glMultiTexCoord3xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3xOES */ + epoxy_glMultiTexCoord3xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3xvOES */ + epoxy_glMultiTexCoord4bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4bOES */ + epoxy_glMultiTexCoord4bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4bvOES */ + epoxy_glMultiTexCoord4d_dispatch_table_rewrite_ptr, /* glMultiTexCoord4d */ + epoxy_glMultiTexCoord4dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dARB */ + epoxy_glMultiTexCoord4dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dv */ + epoxy_glMultiTexCoord4dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dvARB */ + epoxy_glMultiTexCoord4f_dispatch_table_rewrite_ptr, /* glMultiTexCoord4f */ + epoxy_glMultiTexCoord4fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fARB */ + epoxy_glMultiTexCoord4fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fv */ + epoxy_glMultiTexCoord4fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fvARB */ + epoxy_glMultiTexCoord4hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord4hNV */ + epoxy_glMultiTexCoord4hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord4hvNV */ + epoxy_glMultiTexCoord4i_dispatch_table_rewrite_ptr, /* glMultiTexCoord4i */ + epoxy_glMultiTexCoord4iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4iARB */ + epoxy_glMultiTexCoord4iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4iv */ + epoxy_glMultiTexCoord4ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4ivARB */ + epoxy_glMultiTexCoord4s_dispatch_table_rewrite_ptr, /* glMultiTexCoord4s */ + epoxy_glMultiTexCoord4sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4sARB */ + epoxy_glMultiTexCoord4sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4sv */ + epoxy_glMultiTexCoord4svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4svARB */ + epoxy_glMultiTexCoord4x_dispatch_table_rewrite_ptr, /* glMultiTexCoord4x */ + epoxy_glMultiTexCoord4xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4xOES */ + epoxy_glMultiTexCoord4xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4xvOES */ + epoxy_glMultiTexCoordP1ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP1ui */ + epoxy_glMultiTexCoordP1uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP1uiv */ + epoxy_glMultiTexCoordP2ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP2ui */ + epoxy_glMultiTexCoordP2uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP2uiv */ + epoxy_glMultiTexCoordP3ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP3ui */ + epoxy_glMultiTexCoordP3uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP3uiv */ + epoxy_glMultiTexCoordP4ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP4ui */ + epoxy_glMultiTexCoordP4uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP4uiv */ + epoxy_glMultiTexCoordPointerEXT_dispatch_table_rewrite_ptr, /* glMultiTexCoordPointerEXT */ + epoxy_glMultiTexEnvfEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvfEXT */ + epoxy_glMultiTexEnvfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvfvEXT */ + epoxy_glMultiTexEnviEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnviEXT */ + epoxy_glMultiTexEnvivEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvivEXT */ + epoxy_glMultiTexGendEXT_dispatch_table_rewrite_ptr, /* glMultiTexGendEXT */ + epoxy_glMultiTexGendvEXT_dispatch_table_rewrite_ptr, /* glMultiTexGendvEXT */ + epoxy_glMultiTexGenfEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenfEXT */ + epoxy_glMultiTexGenfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenfvEXT */ + epoxy_glMultiTexGeniEXT_dispatch_table_rewrite_ptr, /* glMultiTexGeniEXT */ + epoxy_glMultiTexGenivEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenivEXT */ + epoxy_glMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage1DEXT */ + epoxy_glMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage2DEXT */ + epoxy_glMultiTexImage3DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage3DEXT */ + epoxy_glMultiTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterIivEXT */ + epoxy_glMultiTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterIuivEXT */ + epoxy_glMultiTexParameterfEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterfEXT */ + epoxy_glMultiTexParameterfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterfvEXT */ + epoxy_glMultiTexParameteriEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameteriEXT */ + epoxy_glMultiTexParameterivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterivEXT */ + epoxy_glMultiTexRenderbufferEXT_dispatch_table_rewrite_ptr, /* glMultiTexRenderbufferEXT */ + epoxy_glMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage1DEXT */ + epoxy_glMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage2DEXT */ + epoxy_glMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage3DEXT */ + epoxy_glNamedBufferData_dispatch_table_rewrite_ptr, /* glNamedBufferData */ + epoxy_glNamedBufferDataEXT_dispatch_table_rewrite_ptr, /* glNamedBufferDataEXT */ + epoxy_glNamedBufferPageCommitmentARB_dispatch_table_rewrite_ptr, /* glNamedBufferPageCommitmentARB */ + epoxy_glNamedBufferPageCommitmentEXT_dispatch_table_rewrite_ptr, /* glNamedBufferPageCommitmentEXT */ + epoxy_glNamedBufferStorage_dispatch_table_rewrite_ptr, /* glNamedBufferStorage */ + epoxy_glNamedBufferStorageEXT_dispatch_table_rewrite_ptr, /* glNamedBufferStorageEXT */ + epoxy_glNamedBufferSubData_dispatch_table_rewrite_ptr, /* glNamedBufferSubData */ + epoxy_glNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glNamedBufferSubDataEXT */ + epoxy_glNamedCopyBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glNamedCopyBufferSubDataEXT */ + epoxy_glNamedFramebufferDrawBuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferDrawBuffer */ + epoxy_glNamedFramebufferDrawBuffers_dispatch_table_rewrite_ptr, /* glNamedFramebufferDrawBuffers */ + epoxy_glNamedFramebufferParameteri_dispatch_table_rewrite_ptr, /* glNamedFramebufferParameteri */ + epoxy_glNamedFramebufferParameteriEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferParameteriEXT */ + epoxy_glNamedFramebufferReadBuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferReadBuffer */ + epoxy_glNamedFramebufferRenderbuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferRenderbuffer */ + epoxy_glNamedFramebufferRenderbufferEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferRenderbufferEXT */ + epoxy_glNamedFramebufferSampleLocationsfvARB_dispatch_table_rewrite_ptr, /* glNamedFramebufferSampleLocationsfvARB */ + epoxy_glNamedFramebufferSampleLocationsfvNV_dispatch_table_rewrite_ptr, /* glNamedFramebufferSampleLocationsfvNV */ + epoxy_glNamedFramebufferTexture_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture */ + epoxy_glNamedFramebufferTexture1DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture1DEXT */ + epoxy_glNamedFramebufferTexture2DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture2DEXT */ + epoxy_glNamedFramebufferTexture3DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture3DEXT */ + epoxy_glNamedFramebufferTextureEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureEXT */ + epoxy_glNamedFramebufferTextureFaceEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureFaceEXT */ + epoxy_glNamedFramebufferTextureLayer_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureLayer */ + epoxy_glNamedFramebufferTextureLayerEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureLayerEXT */ + epoxy_glNamedProgramLocalParameter4dEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4dEXT */ + epoxy_glNamedProgramLocalParameter4dvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4dvEXT */ + epoxy_glNamedProgramLocalParameter4fEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4fEXT */ + epoxy_glNamedProgramLocalParameter4fvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4fvEXT */ + epoxy_glNamedProgramLocalParameterI4iEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4iEXT */ + epoxy_glNamedProgramLocalParameterI4ivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4ivEXT */ + epoxy_glNamedProgramLocalParameterI4uiEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4uiEXT */ + epoxy_glNamedProgramLocalParameterI4uivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4uivEXT */ + epoxy_glNamedProgramLocalParameters4fvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameters4fvEXT */ + epoxy_glNamedProgramLocalParametersI4ivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParametersI4ivEXT */ + epoxy_glNamedProgramLocalParametersI4uivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParametersI4uivEXT */ + epoxy_glNamedProgramStringEXT_dispatch_table_rewrite_ptr, /* glNamedProgramStringEXT */ + epoxy_glNamedRenderbufferStorage_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorage */ + epoxy_glNamedRenderbufferStorageEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageEXT */ + epoxy_glNamedRenderbufferStorageMultisample_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisample */ + epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisampleCoverageEXT */ + epoxy_glNamedRenderbufferStorageMultisampleEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisampleEXT */ + epoxy_glNamedStringARB_dispatch_table_rewrite_ptr, /* glNamedStringARB */ + epoxy_glNewList_dispatch_table_rewrite_ptr, /* glNewList */ + epoxy_glNewObjectBufferATI_dispatch_table_rewrite_ptr, /* glNewObjectBufferATI */ + epoxy_glNormal3b_dispatch_table_rewrite_ptr, /* glNormal3b */ + epoxy_glNormal3bv_dispatch_table_rewrite_ptr, /* glNormal3bv */ + epoxy_glNormal3d_dispatch_table_rewrite_ptr, /* glNormal3d */ + epoxy_glNormal3dv_dispatch_table_rewrite_ptr, /* glNormal3dv */ + epoxy_glNormal3f_dispatch_table_rewrite_ptr, /* glNormal3f */ + epoxy_glNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glNormal3fVertex3fSUN */ + epoxy_glNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glNormal3fVertex3fvSUN */ + epoxy_glNormal3fv_dispatch_table_rewrite_ptr, /* glNormal3fv */ + epoxy_glNormal3hNV_dispatch_table_rewrite_ptr, /* glNormal3hNV */ + epoxy_glNormal3hvNV_dispatch_table_rewrite_ptr, /* glNormal3hvNV */ + epoxy_glNormal3i_dispatch_table_rewrite_ptr, /* glNormal3i */ + epoxy_glNormal3iv_dispatch_table_rewrite_ptr, /* glNormal3iv */ + epoxy_glNormal3s_dispatch_table_rewrite_ptr, /* glNormal3s */ + epoxy_glNormal3sv_dispatch_table_rewrite_ptr, /* glNormal3sv */ + epoxy_glNormal3x_dispatch_table_rewrite_ptr, /* glNormal3x */ + epoxy_glNormal3xOES_dispatch_table_rewrite_ptr, /* glNormal3xOES */ + epoxy_glNormal3xvOES_dispatch_table_rewrite_ptr, /* glNormal3xvOES */ + epoxy_glNormalFormatNV_dispatch_table_rewrite_ptr, /* glNormalFormatNV */ + epoxy_glNormalP3ui_dispatch_table_rewrite_ptr, /* glNormalP3ui */ + epoxy_glNormalP3uiv_dispatch_table_rewrite_ptr, /* glNormalP3uiv */ + epoxy_glNormalPointer_dispatch_table_rewrite_ptr, /* glNormalPointer */ + epoxy_glNormalPointerEXT_dispatch_table_rewrite_ptr, /* glNormalPointerEXT */ + epoxy_glNormalPointerListIBM_dispatch_table_rewrite_ptr, /* glNormalPointerListIBM */ + epoxy_glNormalPointervINTEL_dispatch_table_rewrite_ptr, /* glNormalPointervINTEL */ + epoxy_glNormalStream3bATI_dispatch_table_rewrite_ptr, /* glNormalStream3bATI */ + epoxy_glNormalStream3bvATI_dispatch_table_rewrite_ptr, /* glNormalStream3bvATI */ + epoxy_glNormalStream3dATI_dispatch_table_rewrite_ptr, /* glNormalStream3dATI */ + epoxy_glNormalStream3dvATI_dispatch_table_rewrite_ptr, /* glNormalStream3dvATI */ + epoxy_glNormalStream3fATI_dispatch_table_rewrite_ptr, /* glNormalStream3fATI */ + epoxy_glNormalStream3fvATI_dispatch_table_rewrite_ptr, /* glNormalStream3fvATI */ + epoxy_glNormalStream3iATI_dispatch_table_rewrite_ptr, /* glNormalStream3iATI */ + epoxy_glNormalStream3ivATI_dispatch_table_rewrite_ptr, /* glNormalStream3ivATI */ + epoxy_glNormalStream3sATI_dispatch_table_rewrite_ptr, /* glNormalStream3sATI */ + epoxy_glNormalStream3svATI_dispatch_table_rewrite_ptr, /* glNormalStream3svATI */ + epoxy_glObjectLabel_dispatch_table_rewrite_ptr, /* glObjectLabel */ + epoxy_glObjectLabelKHR_dispatch_table_rewrite_ptr, /* glObjectLabelKHR */ + epoxy_glObjectPtrLabel_dispatch_table_rewrite_ptr, /* glObjectPtrLabel */ + epoxy_glObjectPtrLabelKHR_dispatch_table_rewrite_ptr, /* glObjectPtrLabelKHR */ + epoxy_glObjectPurgeableAPPLE_dispatch_table_rewrite_ptr, /* glObjectPurgeableAPPLE */ + epoxy_glObjectUnpurgeableAPPLE_dispatch_table_rewrite_ptr, /* glObjectUnpurgeableAPPLE */ + epoxy_glOrtho_dispatch_table_rewrite_ptr, /* glOrtho */ + epoxy_glOrthof_dispatch_table_rewrite_ptr, /* glOrthof */ + epoxy_glOrthofOES_dispatch_table_rewrite_ptr, /* glOrthofOES */ + epoxy_glOrthox_dispatch_table_rewrite_ptr, /* glOrthox */ + epoxy_glOrthoxOES_dispatch_table_rewrite_ptr, /* glOrthoxOES */ + epoxy_glPNTrianglesfATI_dispatch_table_rewrite_ptr, /* glPNTrianglesfATI */ + epoxy_glPNTrianglesiATI_dispatch_table_rewrite_ptr, /* glPNTrianglesiATI */ + epoxy_glPassTexCoordATI_dispatch_table_rewrite_ptr, /* glPassTexCoordATI */ + epoxy_glPassThrough_dispatch_table_rewrite_ptr, /* glPassThrough */ + epoxy_glPassThroughxOES_dispatch_table_rewrite_ptr, /* glPassThroughxOES */ + epoxy_glPatchParameterfv_dispatch_table_rewrite_ptr, /* glPatchParameterfv */ + epoxy_glPatchParameteri_dispatch_table_rewrite_ptr, /* glPatchParameteri */ + epoxy_glPatchParameteriEXT_dispatch_table_rewrite_ptr, /* glPatchParameteriEXT */ + epoxy_glPatchParameteriOES_dispatch_table_rewrite_ptr, /* glPatchParameteriOES */ + epoxy_glPathColorGenNV_dispatch_table_rewrite_ptr, /* glPathColorGenNV */ + epoxy_glPathCommandsNV_dispatch_table_rewrite_ptr, /* glPathCommandsNV */ + epoxy_glPathCoordsNV_dispatch_table_rewrite_ptr, /* glPathCoordsNV */ + epoxy_glPathCoverDepthFuncNV_dispatch_table_rewrite_ptr, /* glPathCoverDepthFuncNV */ + epoxy_glPathDashArrayNV_dispatch_table_rewrite_ptr, /* glPathDashArrayNV */ + epoxy_glPathFogGenNV_dispatch_table_rewrite_ptr, /* glPathFogGenNV */ + epoxy_glPathGlyphIndexArrayNV_dispatch_table_rewrite_ptr, /* glPathGlyphIndexArrayNV */ + epoxy_glPathGlyphIndexRangeNV_dispatch_table_rewrite_ptr, /* glPathGlyphIndexRangeNV */ + epoxy_glPathGlyphRangeNV_dispatch_table_rewrite_ptr, /* glPathGlyphRangeNV */ + epoxy_glPathGlyphsNV_dispatch_table_rewrite_ptr, /* glPathGlyphsNV */ + epoxy_glPathMemoryGlyphIndexArrayNV_dispatch_table_rewrite_ptr, /* glPathMemoryGlyphIndexArrayNV */ + epoxy_glPathParameterfNV_dispatch_table_rewrite_ptr, /* glPathParameterfNV */ + epoxy_glPathParameterfvNV_dispatch_table_rewrite_ptr, /* glPathParameterfvNV */ + epoxy_glPathParameteriNV_dispatch_table_rewrite_ptr, /* glPathParameteriNV */ + epoxy_glPathParameterivNV_dispatch_table_rewrite_ptr, /* glPathParameterivNV */ + epoxy_glPathStencilDepthOffsetNV_dispatch_table_rewrite_ptr, /* glPathStencilDepthOffsetNV */ + epoxy_glPathStencilFuncNV_dispatch_table_rewrite_ptr, /* glPathStencilFuncNV */ + epoxy_glPathStringNV_dispatch_table_rewrite_ptr, /* glPathStringNV */ + epoxy_glPathSubCommandsNV_dispatch_table_rewrite_ptr, /* glPathSubCommandsNV */ + epoxy_glPathSubCoordsNV_dispatch_table_rewrite_ptr, /* glPathSubCoordsNV */ + epoxy_glPathTexGenNV_dispatch_table_rewrite_ptr, /* glPathTexGenNV */ + epoxy_glPauseTransformFeedback_dispatch_table_rewrite_ptr, /* glPauseTransformFeedback */ + epoxy_glPauseTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glPauseTransformFeedbackNV */ + epoxy_glPixelDataRangeNV_dispatch_table_rewrite_ptr, /* glPixelDataRangeNV */ + epoxy_glPixelMapfv_dispatch_table_rewrite_ptr, /* glPixelMapfv */ + epoxy_glPixelMapuiv_dispatch_table_rewrite_ptr, /* glPixelMapuiv */ + epoxy_glPixelMapusv_dispatch_table_rewrite_ptr, /* glPixelMapusv */ + epoxy_glPixelMapx_dispatch_table_rewrite_ptr, /* glPixelMapx */ + epoxy_glPixelStoref_dispatch_table_rewrite_ptr, /* glPixelStoref */ + epoxy_glPixelStorei_dispatch_table_rewrite_ptr, /* glPixelStorei */ + epoxy_glPixelStorex_dispatch_table_rewrite_ptr, /* glPixelStorex */ + epoxy_glPixelTexGenParameterfSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterfSGIS */ + epoxy_glPixelTexGenParameterfvSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterfvSGIS */ + epoxy_glPixelTexGenParameteriSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameteriSGIS */ + epoxy_glPixelTexGenParameterivSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterivSGIS */ + epoxy_glPixelTexGenSGIX_dispatch_table_rewrite_ptr, /* glPixelTexGenSGIX */ + epoxy_glPixelTransferf_dispatch_table_rewrite_ptr, /* glPixelTransferf */ + epoxy_glPixelTransferi_dispatch_table_rewrite_ptr, /* glPixelTransferi */ + epoxy_glPixelTransferxOES_dispatch_table_rewrite_ptr, /* glPixelTransferxOES */ + epoxy_glPixelTransformParameterfEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterfEXT */ + epoxy_glPixelTransformParameterfvEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterfvEXT */ + epoxy_glPixelTransformParameteriEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameteriEXT */ + epoxy_glPixelTransformParameterivEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterivEXT */ + epoxy_glPixelZoom_dispatch_table_rewrite_ptr, /* glPixelZoom */ + epoxy_glPixelZoomxOES_dispatch_table_rewrite_ptr, /* glPixelZoomxOES */ + epoxy_glPointAlongPathNV_dispatch_table_rewrite_ptr, /* glPointAlongPathNV */ + epoxy_glPointParameterf_dispatch_table_rewrite_ptr, /* glPointParameterf */ + epoxy_glPointParameterfARB_dispatch_table_rewrite_ptr, /* glPointParameterfARB */ + epoxy_glPointParameterfEXT_dispatch_table_rewrite_ptr, /* glPointParameterfEXT */ + epoxy_glPointParameterfSGIS_dispatch_table_rewrite_ptr, /* glPointParameterfSGIS */ + epoxy_glPointParameterfv_dispatch_table_rewrite_ptr, /* glPointParameterfv */ + epoxy_glPointParameterfvARB_dispatch_table_rewrite_ptr, /* glPointParameterfvARB */ + epoxy_glPointParameterfvEXT_dispatch_table_rewrite_ptr, /* glPointParameterfvEXT */ + epoxy_glPointParameterfvSGIS_dispatch_table_rewrite_ptr, /* glPointParameterfvSGIS */ + epoxy_glPointParameteri_dispatch_table_rewrite_ptr, /* glPointParameteri */ + epoxy_glPointParameteriNV_dispatch_table_rewrite_ptr, /* glPointParameteriNV */ + epoxy_glPointParameteriv_dispatch_table_rewrite_ptr, /* glPointParameteriv */ + epoxy_glPointParameterivNV_dispatch_table_rewrite_ptr, /* glPointParameterivNV */ + epoxy_glPointParameterx_dispatch_table_rewrite_ptr, /* glPointParameterx */ + epoxy_glPointParameterxOES_dispatch_table_rewrite_ptr, /* glPointParameterxOES */ + epoxy_glPointParameterxv_dispatch_table_rewrite_ptr, /* glPointParameterxv */ + epoxy_glPointParameterxvOES_dispatch_table_rewrite_ptr, /* glPointParameterxvOES */ + epoxy_glPointSize_dispatch_table_rewrite_ptr, /* glPointSize */ + epoxy_glPointSizePointerOES_dispatch_table_rewrite_ptr, /* glPointSizePointerOES */ + epoxy_glPointSizex_dispatch_table_rewrite_ptr, /* glPointSizex */ + epoxy_glPointSizexOES_dispatch_table_rewrite_ptr, /* glPointSizexOES */ + epoxy_glPollAsyncSGIX_dispatch_table_rewrite_ptr, /* glPollAsyncSGIX */ + epoxy_glPollInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glPollInstrumentsSGIX */ + epoxy_glPolygonMode_dispatch_table_rewrite_ptr, /* glPolygonMode */ + epoxy_glPolygonModeNV_dispatch_table_rewrite_ptr, /* glPolygonModeNV */ + epoxy_glPolygonOffset_dispatch_table_rewrite_ptr, /* glPolygonOffset */ + epoxy_glPolygonOffsetClampEXT_dispatch_table_rewrite_ptr, /* glPolygonOffsetClampEXT */ + epoxy_glPolygonOffsetEXT_dispatch_table_rewrite_ptr, /* glPolygonOffsetEXT */ + epoxy_glPolygonOffsetx_dispatch_table_rewrite_ptr, /* glPolygonOffsetx */ + epoxy_glPolygonOffsetxOES_dispatch_table_rewrite_ptr, /* glPolygonOffsetxOES */ + epoxy_glPolygonStipple_dispatch_table_rewrite_ptr, /* glPolygonStipple */ + epoxy_glPopAttrib_dispatch_table_rewrite_ptr, /* glPopAttrib */ + epoxy_glPopClientAttrib_dispatch_table_rewrite_ptr, /* glPopClientAttrib */ + epoxy_glPopDebugGroup_dispatch_table_rewrite_ptr, /* glPopDebugGroup */ + epoxy_glPopDebugGroupKHR_dispatch_table_rewrite_ptr, /* glPopDebugGroupKHR */ + epoxy_glPopGroupMarkerEXT_dispatch_table_rewrite_ptr, /* glPopGroupMarkerEXT */ + epoxy_glPopMatrix_dispatch_table_rewrite_ptr, /* glPopMatrix */ + epoxy_glPopName_dispatch_table_rewrite_ptr, /* glPopName */ + epoxy_glPresentFrameDualFillNV_dispatch_table_rewrite_ptr, /* glPresentFrameDualFillNV */ + epoxy_glPresentFrameKeyedNV_dispatch_table_rewrite_ptr, /* glPresentFrameKeyedNV */ + epoxy_glPrimitiveBoundingBox_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBox */ + epoxy_glPrimitiveBoundingBoxARB_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxARB */ + epoxy_glPrimitiveBoundingBoxEXT_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxEXT */ + epoxy_glPrimitiveBoundingBoxOES_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxOES */ + epoxy_glPrimitiveRestartIndex_dispatch_table_rewrite_ptr, /* glPrimitiveRestartIndex */ + epoxy_glPrimitiveRestartIndexNV_dispatch_table_rewrite_ptr, /* glPrimitiveRestartIndexNV */ + epoxy_glPrimitiveRestartNV_dispatch_table_rewrite_ptr, /* glPrimitiveRestartNV */ + epoxy_glPrioritizeTextures_dispatch_table_rewrite_ptr, /* glPrioritizeTextures */ + epoxy_glPrioritizeTexturesEXT_dispatch_table_rewrite_ptr, /* glPrioritizeTexturesEXT */ + epoxy_glPrioritizeTexturesxOES_dispatch_table_rewrite_ptr, /* glPrioritizeTexturesxOES */ + epoxy_glProgramBinary_dispatch_table_rewrite_ptr, /* glProgramBinary */ + epoxy_glProgramBinaryOES_dispatch_table_rewrite_ptr, /* glProgramBinaryOES */ + epoxy_glProgramBufferParametersIivNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersIivNV */ + epoxy_glProgramBufferParametersIuivNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersIuivNV */ + epoxy_glProgramBufferParametersfvNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersfvNV */ + epoxy_glProgramEnvParameter4dARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4dARB */ + epoxy_glProgramEnvParameter4dvARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4dvARB */ + epoxy_glProgramEnvParameter4fARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4fARB */ + epoxy_glProgramEnvParameter4fvARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4fvARB */ + epoxy_glProgramEnvParameterI4iNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4iNV */ + epoxy_glProgramEnvParameterI4ivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4ivNV */ + epoxy_glProgramEnvParameterI4uiNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4uiNV */ + epoxy_glProgramEnvParameterI4uivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4uivNV */ + epoxy_glProgramEnvParameters4fvEXT_dispatch_table_rewrite_ptr, /* glProgramEnvParameters4fvEXT */ + epoxy_glProgramEnvParametersI4ivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParametersI4ivNV */ + epoxy_glProgramEnvParametersI4uivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParametersI4uivNV */ + epoxy_glProgramLocalParameter4dARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4dARB */ + epoxy_glProgramLocalParameter4dvARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4dvARB */ + epoxy_glProgramLocalParameter4fARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4fARB */ + epoxy_glProgramLocalParameter4fvARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4fvARB */ + epoxy_glProgramLocalParameterI4iNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4iNV */ + epoxy_glProgramLocalParameterI4ivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4ivNV */ + epoxy_glProgramLocalParameterI4uiNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4uiNV */ + epoxy_glProgramLocalParameterI4uivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4uivNV */ + epoxy_glProgramLocalParameters4fvEXT_dispatch_table_rewrite_ptr, /* glProgramLocalParameters4fvEXT */ + epoxy_glProgramLocalParametersI4ivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParametersI4ivNV */ + epoxy_glProgramLocalParametersI4uivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParametersI4uivNV */ + epoxy_glProgramNamedParameter4dNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4dNV */ + epoxy_glProgramNamedParameter4dvNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4dvNV */ + epoxy_glProgramNamedParameter4fNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4fNV */ + epoxy_glProgramNamedParameter4fvNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4fvNV */ + epoxy_glProgramParameter4dNV_dispatch_table_rewrite_ptr, /* glProgramParameter4dNV */ + epoxy_glProgramParameter4dvNV_dispatch_table_rewrite_ptr, /* glProgramParameter4dvNV */ + epoxy_glProgramParameter4fNV_dispatch_table_rewrite_ptr, /* glProgramParameter4fNV */ + epoxy_glProgramParameter4fvNV_dispatch_table_rewrite_ptr, /* glProgramParameter4fvNV */ + epoxy_glProgramParameteri_dispatch_table_rewrite_ptr, /* glProgramParameteri */ + epoxy_glProgramParameteriARB_dispatch_table_rewrite_ptr, /* glProgramParameteriARB */ + epoxy_glProgramParameteriEXT_dispatch_table_rewrite_ptr, /* glProgramParameteriEXT */ + epoxy_glProgramParameters4dvNV_dispatch_table_rewrite_ptr, /* glProgramParameters4dvNV */ + epoxy_glProgramParameters4fvNV_dispatch_table_rewrite_ptr, /* glProgramParameters4fvNV */ + epoxy_glProgramPathFragmentInputGenNV_dispatch_table_rewrite_ptr, /* glProgramPathFragmentInputGenNV */ + epoxy_glProgramStringARB_dispatch_table_rewrite_ptr, /* glProgramStringARB */ + epoxy_glProgramSubroutineParametersuivNV_dispatch_table_rewrite_ptr, /* glProgramSubroutineParametersuivNV */ + epoxy_glProgramUniform1d_dispatch_table_rewrite_ptr, /* glProgramUniform1d */ + epoxy_glProgramUniform1dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1dEXT */ + epoxy_glProgramUniform1dv_dispatch_table_rewrite_ptr, /* glProgramUniform1dv */ + epoxy_glProgramUniform1dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1dvEXT */ + epoxy_glProgramUniform1f_dispatch_table_rewrite_ptr, /* glProgramUniform1f */ + epoxy_glProgramUniform1fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1fEXT */ + epoxy_glProgramUniform1fv_dispatch_table_rewrite_ptr, /* glProgramUniform1fv */ + epoxy_glProgramUniform1fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1fvEXT */ + epoxy_glProgramUniform1i_dispatch_table_rewrite_ptr, /* glProgramUniform1i */ + epoxy_glProgramUniform1i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform1i64ARB */ + epoxy_glProgramUniform1i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform1i64NV */ + epoxy_glProgramUniform1i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform1i64vARB */ + epoxy_glProgramUniform1i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform1i64vNV */ + epoxy_glProgramUniform1iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1iEXT */ + epoxy_glProgramUniform1iv_dispatch_table_rewrite_ptr, /* glProgramUniform1iv */ + epoxy_glProgramUniform1ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1ivEXT */ + epoxy_glProgramUniform1ui_dispatch_table_rewrite_ptr, /* glProgramUniform1ui */ + epoxy_glProgramUniform1ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64ARB */ + epoxy_glProgramUniform1ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64NV */ + epoxy_glProgramUniform1ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64vARB */ + epoxy_glProgramUniform1ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64vNV */ + epoxy_glProgramUniform1uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1uiEXT */ + epoxy_glProgramUniform1uiv_dispatch_table_rewrite_ptr, /* glProgramUniform1uiv */ + epoxy_glProgramUniform1uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1uivEXT */ + epoxy_glProgramUniform2d_dispatch_table_rewrite_ptr, /* glProgramUniform2d */ + epoxy_glProgramUniform2dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2dEXT */ + epoxy_glProgramUniform2dv_dispatch_table_rewrite_ptr, /* glProgramUniform2dv */ + epoxy_glProgramUniform2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2dvEXT */ + epoxy_glProgramUniform2f_dispatch_table_rewrite_ptr, /* glProgramUniform2f */ + epoxy_glProgramUniform2fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2fEXT */ + epoxy_glProgramUniform2fv_dispatch_table_rewrite_ptr, /* glProgramUniform2fv */ + epoxy_glProgramUniform2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2fvEXT */ + epoxy_glProgramUniform2i_dispatch_table_rewrite_ptr, /* glProgramUniform2i */ + epoxy_glProgramUniform2i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform2i64ARB */ + epoxy_glProgramUniform2i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform2i64NV */ + epoxy_glProgramUniform2i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform2i64vARB */ + epoxy_glProgramUniform2i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform2i64vNV */ + epoxy_glProgramUniform2iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2iEXT */ + epoxy_glProgramUniform2iv_dispatch_table_rewrite_ptr, /* glProgramUniform2iv */ + epoxy_glProgramUniform2ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2ivEXT */ + epoxy_glProgramUniform2ui_dispatch_table_rewrite_ptr, /* glProgramUniform2ui */ + epoxy_glProgramUniform2ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64ARB */ + epoxy_glProgramUniform2ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64NV */ + epoxy_glProgramUniform2ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64vARB */ + epoxy_glProgramUniform2ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64vNV */ + epoxy_glProgramUniform2uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2uiEXT */ + epoxy_glProgramUniform2uiv_dispatch_table_rewrite_ptr, /* glProgramUniform2uiv */ + epoxy_glProgramUniform2uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2uivEXT */ + epoxy_glProgramUniform3d_dispatch_table_rewrite_ptr, /* glProgramUniform3d */ + epoxy_glProgramUniform3dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3dEXT */ + epoxy_glProgramUniform3dv_dispatch_table_rewrite_ptr, /* glProgramUniform3dv */ + epoxy_glProgramUniform3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3dvEXT */ + epoxy_glProgramUniform3f_dispatch_table_rewrite_ptr, /* glProgramUniform3f */ + epoxy_glProgramUniform3fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3fEXT */ + epoxy_glProgramUniform3fv_dispatch_table_rewrite_ptr, /* glProgramUniform3fv */ + epoxy_glProgramUniform3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3fvEXT */ + epoxy_glProgramUniform3i_dispatch_table_rewrite_ptr, /* glProgramUniform3i */ + epoxy_glProgramUniform3i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform3i64ARB */ + epoxy_glProgramUniform3i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform3i64NV */ + epoxy_glProgramUniform3i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform3i64vARB */ + epoxy_glProgramUniform3i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform3i64vNV */ + epoxy_glProgramUniform3iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3iEXT */ + epoxy_glProgramUniform3iv_dispatch_table_rewrite_ptr, /* glProgramUniform3iv */ + epoxy_glProgramUniform3ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3ivEXT */ + epoxy_glProgramUniform3ui_dispatch_table_rewrite_ptr, /* glProgramUniform3ui */ + epoxy_glProgramUniform3ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64ARB */ + epoxy_glProgramUniform3ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64NV */ + epoxy_glProgramUniform3ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64vARB */ + epoxy_glProgramUniform3ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64vNV */ + epoxy_glProgramUniform3uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3uiEXT */ + epoxy_glProgramUniform3uiv_dispatch_table_rewrite_ptr, /* glProgramUniform3uiv */ + epoxy_glProgramUniform3uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3uivEXT */ + epoxy_glProgramUniform4d_dispatch_table_rewrite_ptr, /* glProgramUniform4d */ + epoxy_glProgramUniform4dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4dEXT */ + epoxy_glProgramUniform4dv_dispatch_table_rewrite_ptr, /* glProgramUniform4dv */ + epoxy_glProgramUniform4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4dvEXT */ + epoxy_glProgramUniform4f_dispatch_table_rewrite_ptr, /* glProgramUniform4f */ + epoxy_glProgramUniform4fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4fEXT */ + epoxy_glProgramUniform4fv_dispatch_table_rewrite_ptr, /* glProgramUniform4fv */ + epoxy_glProgramUniform4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4fvEXT */ + epoxy_glProgramUniform4i_dispatch_table_rewrite_ptr, /* glProgramUniform4i */ + epoxy_glProgramUniform4i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform4i64ARB */ + epoxy_glProgramUniform4i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform4i64NV */ + epoxy_glProgramUniform4i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform4i64vARB */ + epoxy_glProgramUniform4i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform4i64vNV */ + epoxy_glProgramUniform4iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4iEXT */ + epoxy_glProgramUniform4iv_dispatch_table_rewrite_ptr, /* glProgramUniform4iv */ + epoxy_glProgramUniform4ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4ivEXT */ + epoxy_glProgramUniform4ui_dispatch_table_rewrite_ptr, /* glProgramUniform4ui */ + epoxy_glProgramUniform4ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64ARB */ + epoxy_glProgramUniform4ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64NV */ + epoxy_glProgramUniform4ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64vARB */ + epoxy_glProgramUniform4ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64vNV */ + epoxy_glProgramUniform4uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4uiEXT */ + epoxy_glProgramUniform4uiv_dispatch_table_rewrite_ptr, /* glProgramUniform4uiv */ + epoxy_glProgramUniform4uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4uivEXT */ + epoxy_glProgramUniformHandleui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64ARB */ + epoxy_glProgramUniformHandleui64NV_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64NV */ + epoxy_glProgramUniformHandleui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64vARB */ + epoxy_glProgramUniformHandleui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64vNV */ + epoxy_glProgramUniformMatrix2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2dv */ + epoxy_glProgramUniformMatrix2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2dvEXT */ + epoxy_glProgramUniformMatrix2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2fv */ + epoxy_glProgramUniformMatrix2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2fvEXT */ + epoxy_glProgramUniformMatrix2x3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3dv */ + epoxy_glProgramUniformMatrix2x3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3dvEXT */ + epoxy_glProgramUniformMatrix2x3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3fv */ + epoxy_glProgramUniformMatrix2x3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3fvEXT */ + epoxy_glProgramUniformMatrix2x4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4dv */ + epoxy_glProgramUniformMatrix2x4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4dvEXT */ + epoxy_glProgramUniformMatrix2x4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4fv */ + epoxy_glProgramUniformMatrix2x4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4fvEXT */ + epoxy_glProgramUniformMatrix3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3dv */ + epoxy_glProgramUniformMatrix3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3dvEXT */ + epoxy_glProgramUniformMatrix3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3fv */ + epoxy_glProgramUniformMatrix3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3fvEXT */ + epoxy_glProgramUniformMatrix3x2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2dv */ + epoxy_glProgramUniformMatrix3x2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2dvEXT */ + epoxy_glProgramUniformMatrix3x2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2fv */ + epoxy_glProgramUniformMatrix3x2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2fvEXT */ + epoxy_glProgramUniformMatrix3x4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4dv */ + epoxy_glProgramUniformMatrix3x4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4dvEXT */ + epoxy_glProgramUniformMatrix3x4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4fv */ + epoxy_glProgramUniformMatrix3x4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4fvEXT */ + epoxy_glProgramUniformMatrix4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4dv */ + epoxy_glProgramUniformMatrix4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4dvEXT */ + epoxy_glProgramUniformMatrix4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4fv */ + epoxy_glProgramUniformMatrix4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4fvEXT */ + epoxy_glProgramUniformMatrix4x2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2dv */ + epoxy_glProgramUniformMatrix4x2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2dvEXT */ + epoxy_glProgramUniformMatrix4x2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2fv */ + epoxy_glProgramUniformMatrix4x2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2fvEXT */ + epoxy_glProgramUniformMatrix4x3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3dv */ + epoxy_glProgramUniformMatrix4x3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3dvEXT */ + epoxy_glProgramUniformMatrix4x3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3fv */ + epoxy_glProgramUniformMatrix4x3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3fvEXT */ + epoxy_glProgramUniformui64NV_dispatch_table_rewrite_ptr, /* glProgramUniformui64NV */ + epoxy_glProgramUniformui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniformui64vNV */ + epoxy_glProgramVertexLimitNV_dispatch_table_rewrite_ptr, /* glProgramVertexLimitNV */ + epoxy_glProvokingVertex_dispatch_table_rewrite_ptr, /* glProvokingVertex */ + epoxy_glProvokingVertexEXT_dispatch_table_rewrite_ptr, /* glProvokingVertexEXT */ + epoxy_glPushAttrib_dispatch_table_rewrite_ptr, /* glPushAttrib */ + epoxy_glPushClientAttrib_dispatch_table_rewrite_ptr, /* glPushClientAttrib */ + epoxy_glPushClientAttribDefaultEXT_dispatch_table_rewrite_ptr, /* glPushClientAttribDefaultEXT */ + epoxy_glPushDebugGroup_dispatch_table_rewrite_ptr, /* glPushDebugGroup */ + epoxy_glPushDebugGroupKHR_dispatch_table_rewrite_ptr, /* glPushDebugGroupKHR */ + epoxy_glPushGroupMarkerEXT_dispatch_table_rewrite_ptr, /* glPushGroupMarkerEXT */ + epoxy_glPushMatrix_dispatch_table_rewrite_ptr, /* glPushMatrix */ + epoxy_glPushName_dispatch_table_rewrite_ptr, /* glPushName */ + epoxy_glQueryCounter_dispatch_table_rewrite_ptr, /* glQueryCounter */ + epoxy_glQueryCounterEXT_dispatch_table_rewrite_ptr, /* glQueryCounterEXT */ + epoxy_glQueryMatrixxOES_dispatch_table_rewrite_ptr, /* glQueryMatrixxOES */ + epoxy_glQueryObjectParameteruiAMD_dispatch_table_rewrite_ptr, /* glQueryObjectParameteruiAMD */ + epoxy_glRasterPos2d_dispatch_table_rewrite_ptr, /* glRasterPos2d */ + epoxy_glRasterPos2dv_dispatch_table_rewrite_ptr, /* glRasterPos2dv */ + epoxy_glRasterPos2f_dispatch_table_rewrite_ptr, /* glRasterPos2f */ + epoxy_glRasterPos2fv_dispatch_table_rewrite_ptr, /* glRasterPos2fv */ + epoxy_glRasterPos2i_dispatch_table_rewrite_ptr, /* glRasterPos2i */ + epoxy_glRasterPos2iv_dispatch_table_rewrite_ptr, /* glRasterPos2iv */ + epoxy_glRasterPos2s_dispatch_table_rewrite_ptr, /* glRasterPos2s */ + epoxy_glRasterPos2sv_dispatch_table_rewrite_ptr, /* glRasterPos2sv */ + epoxy_glRasterPos2xOES_dispatch_table_rewrite_ptr, /* glRasterPos2xOES */ + epoxy_glRasterPos2xvOES_dispatch_table_rewrite_ptr, /* glRasterPos2xvOES */ + epoxy_glRasterPos3d_dispatch_table_rewrite_ptr, /* glRasterPos3d */ + epoxy_glRasterPos3dv_dispatch_table_rewrite_ptr, /* glRasterPos3dv */ + epoxy_glRasterPos3f_dispatch_table_rewrite_ptr, /* glRasterPos3f */ + epoxy_glRasterPos3fv_dispatch_table_rewrite_ptr, /* glRasterPos3fv */ + epoxy_glRasterPos3i_dispatch_table_rewrite_ptr, /* glRasterPos3i */ + epoxy_glRasterPos3iv_dispatch_table_rewrite_ptr, /* glRasterPos3iv */ + epoxy_glRasterPos3s_dispatch_table_rewrite_ptr, /* glRasterPos3s */ + epoxy_glRasterPos3sv_dispatch_table_rewrite_ptr, /* glRasterPos3sv */ + epoxy_glRasterPos3xOES_dispatch_table_rewrite_ptr, /* glRasterPos3xOES */ + epoxy_glRasterPos3xvOES_dispatch_table_rewrite_ptr, /* glRasterPos3xvOES */ + epoxy_glRasterPos4d_dispatch_table_rewrite_ptr, /* glRasterPos4d */ + epoxy_glRasterPos4dv_dispatch_table_rewrite_ptr, /* glRasterPos4dv */ + epoxy_glRasterPos4f_dispatch_table_rewrite_ptr, /* glRasterPos4f */ + epoxy_glRasterPos4fv_dispatch_table_rewrite_ptr, /* glRasterPos4fv */ + epoxy_glRasterPos4i_dispatch_table_rewrite_ptr, /* glRasterPos4i */ + epoxy_glRasterPos4iv_dispatch_table_rewrite_ptr, /* glRasterPos4iv */ + epoxy_glRasterPos4s_dispatch_table_rewrite_ptr, /* glRasterPos4s */ + epoxy_glRasterPos4sv_dispatch_table_rewrite_ptr, /* glRasterPos4sv */ + epoxy_glRasterPos4xOES_dispatch_table_rewrite_ptr, /* glRasterPos4xOES */ + epoxy_glRasterPos4xvOES_dispatch_table_rewrite_ptr, /* glRasterPos4xvOES */ + epoxy_glRasterSamplesEXT_dispatch_table_rewrite_ptr, /* glRasterSamplesEXT */ + epoxy_glReadBuffer_dispatch_table_rewrite_ptr, /* glReadBuffer */ + epoxy_glReadBufferIndexedEXT_dispatch_table_rewrite_ptr, /* glReadBufferIndexedEXT */ + epoxy_glReadBufferNV_dispatch_table_rewrite_ptr, /* glReadBufferNV */ + epoxy_glReadInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glReadInstrumentsSGIX */ + epoxy_glReadPixels_dispatch_table_rewrite_ptr, /* glReadPixels */ + epoxy_glReadnPixels_dispatch_table_rewrite_ptr, /* glReadnPixels */ + epoxy_glReadnPixelsARB_dispatch_table_rewrite_ptr, /* glReadnPixelsARB */ + epoxy_glReadnPixelsEXT_dispatch_table_rewrite_ptr, /* glReadnPixelsEXT */ + epoxy_glReadnPixelsKHR_dispatch_table_rewrite_ptr, /* glReadnPixelsKHR */ + epoxy_glRectd_dispatch_table_rewrite_ptr, /* glRectd */ + epoxy_glRectdv_dispatch_table_rewrite_ptr, /* glRectdv */ + epoxy_glRectf_dispatch_table_rewrite_ptr, /* glRectf */ + epoxy_glRectfv_dispatch_table_rewrite_ptr, /* glRectfv */ + epoxy_glRecti_dispatch_table_rewrite_ptr, /* glRecti */ + epoxy_glRectiv_dispatch_table_rewrite_ptr, /* glRectiv */ + epoxy_glRects_dispatch_table_rewrite_ptr, /* glRects */ + epoxy_glRectsv_dispatch_table_rewrite_ptr, /* glRectsv */ + epoxy_glRectxOES_dispatch_table_rewrite_ptr, /* glRectxOES */ + epoxy_glRectxvOES_dispatch_table_rewrite_ptr, /* glRectxvOES */ + epoxy_glReferencePlaneSGIX_dispatch_table_rewrite_ptr, /* glReferencePlaneSGIX */ + epoxy_glReleaseShaderCompiler_dispatch_table_rewrite_ptr, /* glReleaseShaderCompiler */ + epoxy_glRenderMode_dispatch_table_rewrite_ptr, /* glRenderMode */ + epoxy_glRenderbufferStorage_dispatch_table_rewrite_ptr, /* glRenderbufferStorage */ + epoxy_glRenderbufferStorageEXT_dispatch_table_rewrite_ptr, /* glRenderbufferStorageEXT */ + epoxy_glRenderbufferStorageMultisample_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisample */ + epoxy_glRenderbufferStorageMultisampleANGLE_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleANGLE */ + epoxy_glRenderbufferStorageMultisampleAPPLE_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleAPPLE */ + epoxy_glRenderbufferStorageMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleCoverageNV */ + epoxy_glRenderbufferStorageMultisampleEXT_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleEXT */ + epoxy_glRenderbufferStorageMultisampleIMG_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleIMG */ + epoxy_glRenderbufferStorageMultisampleNV_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleNV */ + epoxy_glRenderbufferStorageOES_dispatch_table_rewrite_ptr, /* glRenderbufferStorageOES */ + epoxy_glReplacementCodePointerSUN_dispatch_table_rewrite_ptr, /* glReplacementCodePointerSUN */ + epoxy_glReplacementCodeubSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeubSUN */ + epoxy_glReplacementCodeubvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeubvSUN */ + epoxy_glReplacementCodeuiColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor3fVertex3fSUN */ + epoxy_glReplacementCodeuiColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor3fVertex3fvSUN */ + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4ubVertex3fSUN */ + epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4ubVertex3fvSUN */ + epoxy_glReplacementCodeuiNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiSUN */ + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fVertex3fvSUN */ + epoxy_glReplacementCodeuiVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiVertex3fSUN */ + epoxy_glReplacementCodeuiVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiVertex3fvSUN */ + epoxy_glReplacementCodeuivSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuivSUN */ + epoxy_glReplacementCodeusSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeusSUN */ + epoxy_glReplacementCodeusvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeusvSUN */ + epoxy_glRequestResidentProgramsNV_dispatch_table_rewrite_ptr, /* glRequestResidentProgramsNV */ + epoxy_glResetHistogram_dispatch_table_rewrite_ptr, /* glResetHistogram */ + epoxy_glResetHistogramEXT_dispatch_table_rewrite_ptr, /* glResetHistogramEXT */ + epoxy_glResetMinmax_dispatch_table_rewrite_ptr, /* glResetMinmax */ + epoxy_glResetMinmaxEXT_dispatch_table_rewrite_ptr, /* glResetMinmaxEXT */ + epoxy_glResizeBuffersMESA_dispatch_table_rewrite_ptr, /* glResizeBuffersMESA */ + epoxy_glResolveDepthValuesNV_dispatch_table_rewrite_ptr, /* glResolveDepthValuesNV */ + epoxy_glResolveMultisampleFramebufferAPPLE_dispatch_table_rewrite_ptr, /* glResolveMultisampleFramebufferAPPLE */ + epoxy_glResumeTransformFeedback_dispatch_table_rewrite_ptr, /* glResumeTransformFeedback */ + epoxy_glResumeTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glResumeTransformFeedbackNV */ + epoxy_glRotated_dispatch_table_rewrite_ptr, /* glRotated */ + epoxy_glRotatef_dispatch_table_rewrite_ptr, /* glRotatef */ + epoxy_glRotatex_dispatch_table_rewrite_ptr, /* glRotatex */ + epoxy_glRotatexOES_dispatch_table_rewrite_ptr, /* glRotatexOES */ + epoxy_glSampleCoverage_dispatch_table_rewrite_ptr, /* glSampleCoverage */ + epoxy_glSampleCoverageARB_dispatch_table_rewrite_ptr, /* glSampleCoverageARB */ + epoxy_glSampleCoveragex_dispatch_table_rewrite_ptr, /* glSampleCoveragex */ + epoxy_glSampleCoveragexOES_dispatch_table_rewrite_ptr, /* glSampleCoveragexOES */ + epoxy_glSampleMapATI_dispatch_table_rewrite_ptr, /* glSampleMapATI */ + epoxy_glSampleMaskEXT_dispatch_table_rewrite_ptr, /* glSampleMaskEXT */ + epoxy_glSampleMaskIndexedNV_dispatch_table_rewrite_ptr, /* glSampleMaskIndexedNV */ + epoxy_glSampleMaskSGIS_dispatch_table_rewrite_ptr, /* glSampleMaskSGIS */ + epoxy_glSampleMaski_dispatch_table_rewrite_ptr, /* glSampleMaski */ + epoxy_glSamplePatternEXT_dispatch_table_rewrite_ptr, /* glSamplePatternEXT */ + epoxy_glSamplePatternSGIS_dispatch_table_rewrite_ptr, /* glSamplePatternSGIS */ + epoxy_glSamplerParameterIiv_dispatch_table_rewrite_ptr, /* glSamplerParameterIiv */ + epoxy_glSamplerParameterIivEXT_dispatch_table_rewrite_ptr, /* glSamplerParameterIivEXT */ + epoxy_glSamplerParameterIivOES_dispatch_table_rewrite_ptr, /* glSamplerParameterIivOES */ + epoxy_glSamplerParameterIuiv_dispatch_table_rewrite_ptr, /* glSamplerParameterIuiv */ + epoxy_glSamplerParameterIuivEXT_dispatch_table_rewrite_ptr, /* glSamplerParameterIuivEXT */ + epoxy_glSamplerParameterIuivOES_dispatch_table_rewrite_ptr, /* glSamplerParameterIuivOES */ + epoxy_glSamplerParameterf_dispatch_table_rewrite_ptr, /* glSamplerParameterf */ + epoxy_glSamplerParameterfv_dispatch_table_rewrite_ptr, /* glSamplerParameterfv */ + epoxy_glSamplerParameteri_dispatch_table_rewrite_ptr, /* glSamplerParameteri */ + epoxy_glSamplerParameteriv_dispatch_table_rewrite_ptr, /* glSamplerParameteriv */ + epoxy_glScaled_dispatch_table_rewrite_ptr, /* glScaled */ + epoxy_glScalef_dispatch_table_rewrite_ptr, /* glScalef */ + epoxy_glScalex_dispatch_table_rewrite_ptr, /* glScalex */ + epoxy_glScalexOES_dispatch_table_rewrite_ptr, /* glScalexOES */ + epoxy_glScissor_dispatch_table_rewrite_ptr, /* glScissor */ + epoxy_glScissorArrayv_dispatch_table_rewrite_ptr, /* glScissorArrayv */ + epoxy_glScissorArrayvNV_dispatch_table_rewrite_ptr, /* glScissorArrayvNV */ + epoxy_glScissorIndexed_dispatch_table_rewrite_ptr, /* glScissorIndexed */ + epoxy_glScissorIndexedNV_dispatch_table_rewrite_ptr, /* glScissorIndexedNV */ + epoxy_glScissorIndexedv_dispatch_table_rewrite_ptr, /* glScissorIndexedv */ + epoxy_glScissorIndexedvNV_dispatch_table_rewrite_ptr, /* glScissorIndexedvNV */ + epoxy_glSecondaryColor3b_dispatch_table_rewrite_ptr, /* glSecondaryColor3b */ + epoxy_glSecondaryColor3bEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3bEXT */ + epoxy_glSecondaryColor3bv_dispatch_table_rewrite_ptr, /* glSecondaryColor3bv */ + epoxy_glSecondaryColor3bvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3bvEXT */ + epoxy_glSecondaryColor3d_dispatch_table_rewrite_ptr, /* glSecondaryColor3d */ + epoxy_glSecondaryColor3dEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3dEXT */ + epoxy_glSecondaryColor3dv_dispatch_table_rewrite_ptr, /* glSecondaryColor3dv */ + epoxy_glSecondaryColor3dvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3dvEXT */ + epoxy_glSecondaryColor3f_dispatch_table_rewrite_ptr, /* glSecondaryColor3f */ + epoxy_glSecondaryColor3fEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3fEXT */ + epoxy_glSecondaryColor3fv_dispatch_table_rewrite_ptr, /* glSecondaryColor3fv */ + epoxy_glSecondaryColor3fvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3fvEXT */ + epoxy_glSecondaryColor3hNV_dispatch_table_rewrite_ptr, /* glSecondaryColor3hNV */ + epoxy_glSecondaryColor3hvNV_dispatch_table_rewrite_ptr, /* glSecondaryColor3hvNV */ + epoxy_glSecondaryColor3i_dispatch_table_rewrite_ptr, /* glSecondaryColor3i */ + epoxy_glSecondaryColor3iEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3iEXT */ + epoxy_glSecondaryColor3iv_dispatch_table_rewrite_ptr, /* glSecondaryColor3iv */ + epoxy_glSecondaryColor3ivEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ivEXT */ + epoxy_glSecondaryColor3s_dispatch_table_rewrite_ptr, /* glSecondaryColor3s */ + epoxy_glSecondaryColor3sEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3sEXT */ + epoxy_glSecondaryColor3sv_dispatch_table_rewrite_ptr, /* glSecondaryColor3sv */ + epoxy_glSecondaryColor3svEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3svEXT */ + epoxy_glSecondaryColor3ub_dispatch_table_rewrite_ptr, /* glSecondaryColor3ub */ + epoxy_glSecondaryColor3ubEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubEXT */ + epoxy_glSecondaryColor3ubv_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubv */ + epoxy_glSecondaryColor3ubvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubvEXT */ + epoxy_glSecondaryColor3ui_dispatch_table_rewrite_ptr, /* glSecondaryColor3ui */ + epoxy_glSecondaryColor3uiEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3uiEXT */ + epoxy_glSecondaryColor3uiv_dispatch_table_rewrite_ptr, /* glSecondaryColor3uiv */ + epoxy_glSecondaryColor3uivEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3uivEXT */ + epoxy_glSecondaryColor3us_dispatch_table_rewrite_ptr, /* glSecondaryColor3us */ + epoxy_glSecondaryColor3usEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3usEXT */ + epoxy_glSecondaryColor3usv_dispatch_table_rewrite_ptr, /* glSecondaryColor3usv */ + epoxy_glSecondaryColor3usvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3usvEXT */ + epoxy_glSecondaryColorFormatNV_dispatch_table_rewrite_ptr, /* glSecondaryColorFormatNV */ + epoxy_glSecondaryColorP3ui_dispatch_table_rewrite_ptr, /* glSecondaryColorP3ui */ + epoxy_glSecondaryColorP3uiv_dispatch_table_rewrite_ptr, /* glSecondaryColorP3uiv */ + epoxy_glSecondaryColorPointer_dispatch_table_rewrite_ptr, /* glSecondaryColorPointer */ + epoxy_glSecondaryColorPointerEXT_dispatch_table_rewrite_ptr, /* glSecondaryColorPointerEXT */ + epoxy_glSecondaryColorPointerListIBM_dispatch_table_rewrite_ptr, /* glSecondaryColorPointerListIBM */ + epoxy_glSelectBuffer_dispatch_table_rewrite_ptr, /* glSelectBuffer */ + epoxy_glSelectPerfMonitorCountersAMD_dispatch_table_rewrite_ptr, /* glSelectPerfMonitorCountersAMD */ + epoxy_glSeparableFilter2D_dispatch_table_rewrite_ptr, /* glSeparableFilter2D */ + epoxy_glSeparableFilter2DEXT_dispatch_table_rewrite_ptr, /* glSeparableFilter2DEXT */ + epoxy_glSetFenceAPPLE_dispatch_table_rewrite_ptr, /* glSetFenceAPPLE */ + epoxy_glSetFenceNV_dispatch_table_rewrite_ptr, /* glSetFenceNV */ + epoxy_glSetFragmentShaderConstantATI_dispatch_table_rewrite_ptr, /* glSetFragmentShaderConstantATI */ + epoxy_glSetInvariantEXT_dispatch_table_rewrite_ptr, /* glSetInvariantEXT */ + epoxy_glSetLocalConstantEXT_dispatch_table_rewrite_ptr, /* glSetLocalConstantEXT */ + epoxy_glSetMultisamplefvAMD_dispatch_table_rewrite_ptr, /* glSetMultisamplefvAMD */ + epoxy_glShadeModel_dispatch_table_rewrite_ptr, /* glShadeModel */ + epoxy_glShaderBinary_dispatch_table_rewrite_ptr, /* glShaderBinary */ + epoxy_glShaderOp1EXT_dispatch_table_rewrite_ptr, /* glShaderOp1EXT */ + epoxy_glShaderOp2EXT_dispatch_table_rewrite_ptr, /* glShaderOp2EXT */ + epoxy_glShaderOp3EXT_dispatch_table_rewrite_ptr, /* glShaderOp3EXT */ + epoxy_glShaderSource_dispatch_table_rewrite_ptr, /* glShaderSource */ + epoxy_glShaderSourceARB_dispatch_table_rewrite_ptr, /* glShaderSourceARB */ + epoxy_glShaderStorageBlockBinding_dispatch_table_rewrite_ptr, /* glShaderStorageBlockBinding */ + epoxy_glSharpenTexFuncSGIS_dispatch_table_rewrite_ptr, /* glSharpenTexFuncSGIS */ + epoxy_glSpriteParameterfSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterfSGIX */ + epoxy_glSpriteParameterfvSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterfvSGIX */ + epoxy_glSpriteParameteriSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameteriSGIX */ + epoxy_glSpriteParameterivSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterivSGIX */ + epoxy_glStartInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glStartInstrumentsSGIX */ + epoxy_glStartTilingQCOM_dispatch_table_rewrite_ptr, /* glStartTilingQCOM */ + epoxy_glStateCaptureNV_dispatch_table_rewrite_ptr, /* glStateCaptureNV */ + epoxy_glStencilClearTagEXT_dispatch_table_rewrite_ptr, /* glStencilClearTagEXT */ + epoxy_glStencilFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilFillPathInstancedNV */ + epoxy_glStencilFillPathNV_dispatch_table_rewrite_ptr, /* glStencilFillPathNV */ + epoxy_glStencilFunc_dispatch_table_rewrite_ptr, /* glStencilFunc */ + epoxy_glStencilFuncSeparate_dispatch_table_rewrite_ptr, /* glStencilFuncSeparate */ + epoxy_glStencilFuncSeparateATI_dispatch_table_rewrite_ptr, /* glStencilFuncSeparateATI */ + epoxy_glStencilMask_dispatch_table_rewrite_ptr, /* glStencilMask */ + epoxy_glStencilMaskSeparate_dispatch_table_rewrite_ptr, /* glStencilMaskSeparate */ + epoxy_glStencilOp_dispatch_table_rewrite_ptr, /* glStencilOp */ + epoxy_glStencilOpSeparate_dispatch_table_rewrite_ptr, /* glStencilOpSeparate */ + epoxy_glStencilOpSeparateATI_dispatch_table_rewrite_ptr, /* glStencilOpSeparateATI */ + epoxy_glStencilOpValueAMD_dispatch_table_rewrite_ptr, /* glStencilOpValueAMD */ + epoxy_glStencilStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilStrokePathInstancedNV */ + epoxy_glStencilStrokePathNV_dispatch_table_rewrite_ptr, /* glStencilStrokePathNV */ + epoxy_glStencilThenCoverFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverFillPathInstancedNV */ + epoxy_glStencilThenCoverFillPathNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverFillPathNV */ + epoxy_glStencilThenCoverStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverStrokePathInstancedNV */ + epoxy_glStencilThenCoverStrokePathNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverStrokePathNV */ + epoxy_glStopInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glStopInstrumentsSGIX */ + epoxy_glStringMarkerGREMEDY_dispatch_table_rewrite_ptr, /* glStringMarkerGREMEDY */ + epoxy_glSubpixelPrecisionBiasNV_dispatch_table_rewrite_ptr, /* glSubpixelPrecisionBiasNV */ + epoxy_glSwizzleEXT_dispatch_table_rewrite_ptr, /* glSwizzleEXT */ + epoxy_glSyncTextureINTEL_dispatch_table_rewrite_ptr, /* glSyncTextureINTEL */ + epoxy_glTagSampleBufferSGIX_dispatch_table_rewrite_ptr, /* glTagSampleBufferSGIX */ + epoxy_glTangent3bEXT_dispatch_table_rewrite_ptr, /* glTangent3bEXT */ + epoxy_glTangent3bvEXT_dispatch_table_rewrite_ptr, /* glTangent3bvEXT */ + epoxy_glTangent3dEXT_dispatch_table_rewrite_ptr, /* glTangent3dEXT */ + epoxy_glTangent3dvEXT_dispatch_table_rewrite_ptr, /* glTangent3dvEXT */ + epoxy_glTangent3fEXT_dispatch_table_rewrite_ptr, /* glTangent3fEXT */ + epoxy_glTangent3fvEXT_dispatch_table_rewrite_ptr, /* glTangent3fvEXT */ + epoxy_glTangent3iEXT_dispatch_table_rewrite_ptr, /* glTangent3iEXT */ + epoxy_glTangent3ivEXT_dispatch_table_rewrite_ptr, /* glTangent3ivEXT */ + epoxy_glTangent3sEXT_dispatch_table_rewrite_ptr, /* glTangent3sEXT */ + epoxy_glTangent3svEXT_dispatch_table_rewrite_ptr, /* glTangent3svEXT */ + epoxy_glTangentPointerEXT_dispatch_table_rewrite_ptr, /* glTangentPointerEXT */ + epoxy_glTbufferMask3DFX_dispatch_table_rewrite_ptr, /* glTbufferMask3DFX */ + epoxy_glTessellationFactorAMD_dispatch_table_rewrite_ptr, /* glTessellationFactorAMD */ + epoxy_glTessellationModeAMD_dispatch_table_rewrite_ptr, /* glTessellationModeAMD */ + epoxy_glTestFenceAPPLE_dispatch_table_rewrite_ptr, /* glTestFenceAPPLE */ + epoxy_glTestFenceNV_dispatch_table_rewrite_ptr, /* glTestFenceNV */ + epoxy_glTestObjectAPPLE_dispatch_table_rewrite_ptr, /* glTestObjectAPPLE */ + epoxy_glTexBuffer_dispatch_table_rewrite_ptr, /* glTexBuffer */ + epoxy_glTexBufferARB_dispatch_table_rewrite_ptr, /* glTexBufferARB */ + epoxy_glTexBufferEXT_dispatch_table_rewrite_ptr, /* glTexBufferEXT */ + epoxy_glTexBufferOES_dispatch_table_rewrite_ptr, /* glTexBufferOES */ + epoxy_glTexBufferRange_dispatch_table_rewrite_ptr, /* glTexBufferRange */ + epoxy_glTexBufferRangeEXT_dispatch_table_rewrite_ptr, /* glTexBufferRangeEXT */ + epoxy_glTexBufferRangeOES_dispatch_table_rewrite_ptr, /* glTexBufferRangeOES */ + epoxy_glTexBumpParameterfvATI_dispatch_table_rewrite_ptr, /* glTexBumpParameterfvATI */ + epoxy_glTexBumpParameterivATI_dispatch_table_rewrite_ptr, /* glTexBumpParameterivATI */ + epoxy_glTexCoord1bOES_dispatch_table_rewrite_ptr, /* glTexCoord1bOES */ + epoxy_glTexCoord1bvOES_dispatch_table_rewrite_ptr, /* glTexCoord1bvOES */ + epoxy_glTexCoord1d_dispatch_table_rewrite_ptr, /* glTexCoord1d */ + epoxy_glTexCoord1dv_dispatch_table_rewrite_ptr, /* glTexCoord1dv */ + epoxy_glTexCoord1f_dispatch_table_rewrite_ptr, /* glTexCoord1f */ + epoxy_glTexCoord1fv_dispatch_table_rewrite_ptr, /* glTexCoord1fv */ + epoxy_glTexCoord1hNV_dispatch_table_rewrite_ptr, /* glTexCoord1hNV */ + epoxy_glTexCoord1hvNV_dispatch_table_rewrite_ptr, /* glTexCoord1hvNV */ + epoxy_glTexCoord1i_dispatch_table_rewrite_ptr, /* glTexCoord1i */ + epoxy_glTexCoord1iv_dispatch_table_rewrite_ptr, /* glTexCoord1iv */ + epoxy_glTexCoord1s_dispatch_table_rewrite_ptr, /* glTexCoord1s */ + epoxy_glTexCoord1sv_dispatch_table_rewrite_ptr, /* glTexCoord1sv */ + epoxy_glTexCoord1xOES_dispatch_table_rewrite_ptr, /* glTexCoord1xOES */ + epoxy_glTexCoord1xvOES_dispatch_table_rewrite_ptr, /* glTexCoord1xvOES */ + epoxy_glTexCoord2bOES_dispatch_table_rewrite_ptr, /* glTexCoord2bOES */ + epoxy_glTexCoord2bvOES_dispatch_table_rewrite_ptr, /* glTexCoord2bvOES */ + epoxy_glTexCoord2d_dispatch_table_rewrite_ptr, /* glTexCoord2d */ + epoxy_glTexCoord2dv_dispatch_table_rewrite_ptr, /* glTexCoord2dv */ + epoxy_glTexCoord2f_dispatch_table_rewrite_ptr, /* glTexCoord2f */ + epoxy_glTexCoord2fColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor3fVertex3fSUN */ + epoxy_glTexCoord2fColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor3fVertex3fvSUN */ + epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4fNormal3fVertex3fSUN */ + epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4fNormal3fVertex3fvSUN */ + epoxy_glTexCoord2fColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4ubVertex3fSUN */ + epoxy_glTexCoord2fColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4ubVertex3fvSUN */ + epoxy_glTexCoord2fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fNormal3fVertex3fSUN */ + epoxy_glTexCoord2fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fNormal3fVertex3fvSUN */ + epoxy_glTexCoord2fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fVertex3fSUN */ + epoxy_glTexCoord2fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fVertex3fvSUN */ + epoxy_glTexCoord2fv_dispatch_table_rewrite_ptr, /* glTexCoord2fv */ + epoxy_glTexCoord2hNV_dispatch_table_rewrite_ptr, /* glTexCoord2hNV */ + epoxy_glTexCoord2hvNV_dispatch_table_rewrite_ptr, /* glTexCoord2hvNV */ + epoxy_glTexCoord2i_dispatch_table_rewrite_ptr, /* glTexCoord2i */ + epoxy_glTexCoord2iv_dispatch_table_rewrite_ptr, /* glTexCoord2iv */ + epoxy_glTexCoord2s_dispatch_table_rewrite_ptr, /* glTexCoord2s */ + epoxy_glTexCoord2sv_dispatch_table_rewrite_ptr, /* glTexCoord2sv */ + epoxy_glTexCoord2xOES_dispatch_table_rewrite_ptr, /* glTexCoord2xOES */ + epoxy_glTexCoord2xvOES_dispatch_table_rewrite_ptr, /* glTexCoord2xvOES */ + epoxy_glTexCoord3bOES_dispatch_table_rewrite_ptr, /* glTexCoord3bOES */ + epoxy_glTexCoord3bvOES_dispatch_table_rewrite_ptr, /* glTexCoord3bvOES */ + epoxy_glTexCoord3d_dispatch_table_rewrite_ptr, /* glTexCoord3d */ + epoxy_glTexCoord3dv_dispatch_table_rewrite_ptr, /* glTexCoord3dv */ + epoxy_glTexCoord3f_dispatch_table_rewrite_ptr, /* glTexCoord3f */ + epoxy_glTexCoord3fv_dispatch_table_rewrite_ptr, /* glTexCoord3fv */ + epoxy_glTexCoord3hNV_dispatch_table_rewrite_ptr, /* glTexCoord3hNV */ + epoxy_glTexCoord3hvNV_dispatch_table_rewrite_ptr, /* glTexCoord3hvNV */ + epoxy_glTexCoord3i_dispatch_table_rewrite_ptr, /* glTexCoord3i */ + epoxy_glTexCoord3iv_dispatch_table_rewrite_ptr, /* glTexCoord3iv */ + epoxy_glTexCoord3s_dispatch_table_rewrite_ptr, /* glTexCoord3s */ + epoxy_glTexCoord3sv_dispatch_table_rewrite_ptr, /* glTexCoord3sv */ + epoxy_glTexCoord3xOES_dispatch_table_rewrite_ptr, /* glTexCoord3xOES */ + epoxy_glTexCoord3xvOES_dispatch_table_rewrite_ptr, /* glTexCoord3xvOES */ + epoxy_glTexCoord4bOES_dispatch_table_rewrite_ptr, /* glTexCoord4bOES */ + epoxy_glTexCoord4bvOES_dispatch_table_rewrite_ptr, /* glTexCoord4bvOES */ + epoxy_glTexCoord4d_dispatch_table_rewrite_ptr, /* glTexCoord4d */ + epoxy_glTexCoord4dv_dispatch_table_rewrite_ptr, /* glTexCoord4dv */ + epoxy_glTexCoord4f_dispatch_table_rewrite_ptr, /* glTexCoord4f */ + epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fColor4fNormal3fVertex4fSUN */ + epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fColor4fNormal3fVertex4fvSUN */ + epoxy_glTexCoord4fVertex4fSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fVertex4fSUN */ + epoxy_glTexCoord4fVertex4fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fVertex4fvSUN */ + epoxy_glTexCoord4fv_dispatch_table_rewrite_ptr, /* glTexCoord4fv */ + epoxy_glTexCoord4hNV_dispatch_table_rewrite_ptr, /* glTexCoord4hNV */ + epoxy_glTexCoord4hvNV_dispatch_table_rewrite_ptr, /* glTexCoord4hvNV */ + epoxy_glTexCoord4i_dispatch_table_rewrite_ptr, /* glTexCoord4i */ + epoxy_glTexCoord4iv_dispatch_table_rewrite_ptr, /* glTexCoord4iv */ + epoxy_glTexCoord4s_dispatch_table_rewrite_ptr, /* glTexCoord4s */ + epoxy_glTexCoord4sv_dispatch_table_rewrite_ptr, /* glTexCoord4sv */ + epoxy_glTexCoord4xOES_dispatch_table_rewrite_ptr, /* glTexCoord4xOES */ + epoxy_glTexCoord4xvOES_dispatch_table_rewrite_ptr, /* glTexCoord4xvOES */ + epoxy_glTexCoordFormatNV_dispatch_table_rewrite_ptr, /* glTexCoordFormatNV */ + epoxy_glTexCoordP1ui_dispatch_table_rewrite_ptr, /* glTexCoordP1ui */ + epoxy_glTexCoordP1uiv_dispatch_table_rewrite_ptr, /* glTexCoordP1uiv */ + epoxy_glTexCoordP2ui_dispatch_table_rewrite_ptr, /* glTexCoordP2ui */ + epoxy_glTexCoordP2uiv_dispatch_table_rewrite_ptr, /* glTexCoordP2uiv */ + epoxy_glTexCoordP3ui_dispatch_table_rewrite_ptr, /* glTexCoordP3ui */ + epoxy_glTexCoordP3uiv_dispatch_table_rewrite_ptr, /* glTexCoordP3uiv */ + epoxy_glTexCoordP4ui_dispatch_table_rewrite_ptr, /* glTexCoordP4ui */ + epoxy_glTexCoordP4uiv_dispatch_table_rewrite_ptr, /* glTexCoordP4uiv */ + epoxy_glTexCoordPointer_dispatch_table_rewrite_ptr, /* glTexCoordPointer */ + epoxy_glTexCoordPointerEXT_dispatch_table_rewrite_ptr, /* glTexCoordPointerEXT */ + epoxy_glTexCoordPointerListIBM_dispatch_table_rewrite_ptr, /* glTexCoordPointerListIBM */ + epoxy_glTexCoordPointervINTEL_dispatch_table_rewrite_ptr, /* glTexCoordPointervINTEL */ + epoxy_glTexEnvf_dispatch_table_rewrite_ptr, /* glTexEnvf */ + epoxy_glTexEnvfv_dispatch_table_rewrite_ptr, /* glTexEnvfv */ + epoxy_glTexEnvi_dispatch_table_rewrite_ptr, /* glTexEnvi */ + epoxy_glTexEnviv_dispatch_table_rewrite_ptr, /* glTexEnviv */ + epoxy_glTexEnvx_dispatch_table_rewrite_ptr, /* glTexEnvx */ + epoxy_glTexEnvxOES_dispatch_table_rewrite_ptr, /* glTexEnvxOES */ + epoxy_glTexEnvxv_dispatch_table_rewrite_ptr, /* glTexEnvxv */ + epoxy_glTexEnvxvOES_dispatch_table_rewrite_ptr, /* glTexEnvxvOES */ + epoxy_glTexFilterFuncSGIS_dispatch_table_rewrite_ptr, /* glTexFilterFuncSGIS */ + epoxy_glTexGend_dispatch_table_rewrite_ptr, /* glTexGend */ + epoxy_glTexGendv_dispatch_table_rewrite_ptr, /* glTexGendv */ + epoxy_glTexGenf_dispatch_table_rewrite_ptr, /* glTexGenf */ + epoxy_glTexGenfOES_dispatch_table_rewrite_ptr, /* glTexGenfOES */ + epoxy_glTexGenfv_dispatch_table_rewrite_ptr, /* glTexGenfv */ + epoxy_glTexGenfvOES_dispatch_table_rewrite_ptr, /* glTexGenfvOES */ + epoxy_glTexGeni_dispatch_table_rewrite_ptr, /* glTexGeni */ + epoxy_glTexGeniOES_dispatch_table_rewrite_ptr, /* glTexGeniOES */ + epoxy_glTexGeniv_dispatch_table_rewrite_ptr, /* glTexGeniv */ + epoxy_glTexGenivOES_dispatch_table_rewrite_ptr, /* glTexGenivOES */ + epoxy_glTexGenxOES_dispatch_table_rewrite_ptr, /* glTexGenxOES */ + epoxy_glTexGenxvOES_dispatch_table_rewrite_ptr, /* glTexGenxvOES */ + epoxy_glTexImage1D_dispatch_table_rewrite_ptr, /* glTexImage1D */ + epoxy_glTexImage2D_dispatch_table_rewrite_ptr, /* glTexImage2D */ + epoxy_glTexImage2DMultisample_dispatch_table_rewrite_ptr, /* glTexImage2DMultisample */ + epoxy_glTexImage2DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTexImage2DMultisampleCoverageNV */ + epoxy_glTexImage3D_dispatch_table_rewrite_ptr, /* glTexImage3D */ + epoxy_glTexImage3DEXT_dispatch_table_rewrite_ptr, /* glTexImage3DEXT */ + epoxy_glTexImage3DMultisample_dispatch_table_rewrite_ptr, /* glTexImage3DMultisample */ + epoxy_glTexImage3DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTexImage3DMultisampleCoverageNV */ + epoxy_glTexImage3DOES_dispatch_table_rewrite_ptr, /* glTexImage3DOES */ + epoxy_glTexImage4DSGIS_dispatch_table_rewrite_ptr, /* glTexImage4DSGIS */ + epoxy_glTexPageCommitmentARB_dispatch_table_rewrite_ptr, /* glTexPageCommitmentARB */ + epoxy_glTexPageCommitmentEXT_dispatch_table_rewrite_ptr, /* glTexPageCommitmentEXT */ + epoxy_glTexParameterIiv_dispatch_table_rewrite_ptr, /* glTexParameterIiv */ + epoxy_glTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glTexParameterIivEXT */ + epoxy_glTexParameterIivOES_dispatch_table_rewrite_ptr, /* glTexParameterIivOES */ + epoxy_glTexParameterIuiv_dispatch_table_rewrite_ptr, /* glTexParameterIuiv */ + epoxy_glTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glTexParameterIuivEXT */ + epoxy_glTexParameterIuivOES_dispatch_table_rewrite_ptr, /* glTexParameterIuivOES */ + epoxy_glTexParameterf_dispatch_table_rewrite_ptr, /* glTexParameterf */ + epoxy_glTexParameterfv_dispatch_table_rewrite_ptr, /* glTexParameterfv */ + epoxy_glTexParameteri_dispatch_table_rewrite_ptr, /* glTexParameteri */ + epoxy_glTexParameteriv_dispatch_table_rewrite_ptr, /* glTexParameteriv */ + epoxy_glTexParameterx_dispatch_table_rewrite_ptr, /* glTexParameterx */ + epoxy_glTexParameterxOES_dispatch_table_rewrite_ptr, /* glTexParameterxOES */ + epoxy_glTexParameterxv_dispatch_table_rewrite_ptr, /* glTexParameterxv */ + epoxy_glTexParameterxvOES_dispatch_table_rewrite_ptr, /* glTexParameterxvOES */ + epoxy_glTexRenderbufferNV_dispatch_table_rewrite_ptr, /* glTexRenderbufferNV */ + epoxy_glTexStorage1D_dispatch_table_rewrite_ptr, /* glTexStorage1D */ + epoxy_glTexStorage1DEXT_dispatch_table_rewrite_ptr, /* glTexStorage1DEXT */ + epoxy_glTexStorage2D_dispatch_table_rewrite_ptr, /* glTexStorage2D */ + epoxy_glTexStorage2DEXT_dispatch_table_rewrite_ptr, /* glTexStorage2DEXT */ + epoxy_glTexStorage2DMultisample_dispatch_table_rewrite_ptr, /* glTexStorage2DMultisample */ + epoxy_glTexStorage3D_dispatch_table_rewrite_ptr, /* glTexStorage3D */ + epoxy_glTexStorage3DEXT_dispatch_table_rewrite_ptr, /* glTexStorage3DEXT */ + epoxy_glTexStorage3DMultisample_dispatch_table_rewrite_ptr, /* glTexStorage3DMultisample */ + epoxy_glTexStorage3DMultisampleOES_dispatch_table_rewrite_ptr, /* glTexStorage3DMultisampleOES */ + epoxy_glTexStorageSparseAMD_dispatch_table_rewrite_ptr, /* glTexStorageSparseAMD */ + epoxy_glTexSubImage1D_dispatch_table_rewrite_ptr, /* glTexSubImage1D */ + epoxy_glTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage1DEXT */ + epoxy_glTexSubImage2D_dispatch_table_rewrite_ptr, /* glTexSubImage2D */ + epoxy_glTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage2DEXT */ + epoxy_glTexSubImage3D_dispatch_table_rewrite_ptr, /* glTexSubImage3D */ + epoxy_glTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage3DEXT */ + epoxy_glTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glTexSubImage3DOES */ + epoxy_glTexSubImage4DSGIS_dispatch_table_rewrite_ptr, /* glTexSubImage4DSGIS */ + epoxy_glTextureBarrier_dispatch_table_rewrite_ptr, /* glTextureBarrier */ + epoxy_glTextureBarrierNV_dispatch_table_rewrite_ptr, /* glTextureBarrierNV */ + epoxy_glTextureBuffer_dispatch_table_rewrite_ptr, /* glTextureBuffer */ + epoxy_glTextureBufferEXT_dispatch_table_rewrite_ptr, /* glTextureBufferEXT */ + epoxy_glTextureBufferRange_dispatch_table_rewrite_ptr, /* glTextureBufferRange */ + epoxy_glTextureBufferRangeEXT_dispatch_table_rewrite_ptr, /* glTextureBufferRangeEXT */ + epoxy_glTextureColorMaskSGIS_dispatch_table_rewrite_ptr, /* glTextureColorMaskSGIS */ + epoxy_glTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glTextureImage1DEXT */ + epoxy_glTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glTextureImage2DEXT */ + epoxy_glTextureImage2DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTextureImage2DMultisampleCoverageNV */ + epoxy_glTextureImage2DMultisampleNV_dispatch_table_rewrite_ptr, /* glTextureImage2DMultisampleNV */ + epoxy_glTextureImage3DEXT_dispatch_table_rewrite_ptr, /* glTextureImage3DEXT */ + epoxy_glTextureImage3DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTextureImage3DMultisampleCoverageNV */ + epoxy_glTextureImage3DMultisampleNV_dispatch_table_rewrite_ptr, /* glTextureImage3DMultisampleNV */ + epoxy_glTextureLightEXT_dispatch_table_rewrite_ptr, /* glTextureLightEXT */ + epoxy_glTextureMaterialEXT_dispatch_table_rewrite_ptr, /* glTextureMaterialEXT */ + epoxy_glTextureNormalEXT_dispatch_table_rewrite_ptr, /* glTextureNormalEXT */ + epoxy_glTexturePageCommitmentEXT_dispatch_table_rewrite_ptr, /* glTexturePageCommitmentEXT */ + epoxy_glTextureParameterIiv_dispatch_table_rewrite_ptr, /* glTextureParameterIiv */ + epoxy_glTextureParameterIivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterIivEXT */ + epoxy_glTextureParameterIuiv_dispatch_table_rewrite_ptr, /* glTextureParameterIuiv */ + epoxy_glTextureParameterIuivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterIuivEXT */ + epoxy_glTextureParameterf_dispatch_table_rewrite_ptr, /* glTextureParameterf */ + epoxy_glTextureParameterfEXT_dispatch_table_rewrite_ptr, /* glTextureParameterfEXT */ + epoxy_glTextureParameterfv_dispatch_table_rewrite_ptr, /* glTextureParameterfv */ + epoxy_glTextureParameterfvEXT_dispatch_table_rewrite_ptr, /* glTextureParameterfvEXT */ + epoxy_glTextureParameteri_dispatch_table_rewrite_ptr, /* glTextureParameteri */ + epoxy_glTextureParameteriEXT_dispatch_table_rewrite_ptr, /* glTextureParameteriEXT */ + epoxy_glTextureParameteriv_dispatch_table_rewrite_ptr, /* glTextureParameteriv */ + epoxy_glTextureParameterivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterivEXT */ + epoxy_glTextureRangeAPPLE_dispatch_table_rewrite_ptr, /* glTextureRangeAPPLE */ + epoxy_glTextureRenderbufferEXT_dispatch_table_rewrite_ptr, /* glTextureRenderbufferEXT */ + epoxy_glTextureStorage1D_dispatch_table_rewrite_ptr, /* glTextureStorage1D */ + epoxy_glTextureStorage1DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage1DEXT */ + epoxy_glTextureStorage2D_dispatch_table_rewrite_ptr, /* glTextureStorage2D */ + epoxy_glTextureStorage2DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage2DEXT */ + epoxy_glTextureStorage2DMultisample_dispatch_table_rewrite_ptr, /* glTextureStorage2DMultisample */ + epoxy_glTextureStorage2DMultisampleEXT_dispatch_table_rewrite_ptr, /* glTextureStorage2DMultisampleEXT */ + epoxy_glTextureStorage3D_dispatch_table_rewrite_ptr, /* glTextureStorage3D */ + epoxy_glTextureStorage3DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage3DEXT */ + epoxy_glTextureStorage3DMultisample_dispatch_table_rewrite_ptr, /* glTextureStorage3DMultisample */ + epoxy_glTextureStorage3DMultisampleEXT_dispatch_table_rewrite_ptr, /* glTextureStorage3DMultisampleEXT */ + epoxy_glTextureStorageSparseAMD_dispatch_table_rewrite_ptr, /* glTextureStorageSparseAMD */ + epoxy_glTextureSubImage1D_dispatch_table_rewrite_ptr, /* glTextureSubImage1D */ + epoxy_glTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage1DEXT */ + epoxy_glTextureSubImage2D_dispatch_table_rewrite_ptr, /* glTextureSubImage2D */ + epoxy_glTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage2DEXT */ + epoxy_glTextureSubImage3D_dispatch_table_rewrite_ptr, /* glTextureSubImage3D */ + epoxy_glTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage3DEXT */ + epoxy_glTextureView_dispatch_table_rewrite_ptr, /* glTextureView */ + epoxy_glTextureViewEXT_dispatch_table_rewrite_ptr, /* glTextureViewEXT */ + epoxy_glTextureViewOES_dispatch_table_rewrite_ptr, /* glTextureViewOES */ + epoxy_glTrackMatrixNV_dispatch_table_rewrite_ptr, /* glTrackMatrixNV */ + epoxy_glTransformFeedbackAttribsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackAttribsNV */ + epoxy_glTransformFeedbackBufferBase_dispatch_table_rewrite_ptr, /* glTransformFeedbackBufferBase */ + epoxy_glTransformFeedbackBufferRange_dispatch_table_rewrite_ptr, /* glTransformFeedbackBufferRange */ + epoxy_glTransformFeedbackStreamAttribsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackStreamAttribsNV */ + epoxy_glTransformFeedbackVaryings_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryings */ + epoxy_glTransformFeedbackVaryingsEXT_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryingsEXT */ + epoxy_glTransformFeedbackVaryingsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryingsNV */ + epoxy_glTransformPathNV_dispatch_table_rewrite_ptr, /* glTransformPathNV */ + epoxy_glTranslated_dispatch_table_rewrite_ptr, /* glTranslated */ + epoxy_glTranslatef_dispatch_table_rewrite_ptr, /* glTranslatef */ + epoxy_glTranslatex_dispatch_table_rewrite_ptr, /* glTranslatex */ + epoxy_glTranslatexOES_dispatch_table_rewrite_ptr, /* glTranslatexOES */ + epoxy_glUniform1d_dispatch_table_rewrite_ptr, /* glUniform1d */ + epoxy_glUniform1dv_dispatch_table_rewrite_ptr, /* glUniform1dv */ + epoxy_glUniform1f_dispatch_table_rewrite_ptr, /* glUniform1f */ + epoxy_glUniform1fARB_dispatch_table_rewrite_ptr, /* glUniform1fARB */ + epoxy_glUniform1fv_dispatch_table_rewrite_ptr, /* glUniform1fv */ + epoxy_glUniform1fvARB_dispatch_table_rewrite_ptr, /* glUniform1fvARB */ + epoxy_glUniform1i_dispatch_table_rewrite_ptr, /* glUniform1i */ + epoxy_glUniform1i64ARB_dispatch_table_rewrite_ptr, /* glUniform1i64ARB */ + epoxy_glUniform1i64NV_dispatch_table_rewrite_ptr, /* glUniform1i64NV */ + epoxy_glUniform1i64vARB_dispatch_table_rewrite_ptr, /* glUniform1i64vARB */ + epoxy_glUniform1i64vNV_dispatch_table_rewrite_ptr, /* glUniform1i64vNV */ + epoxy_glUniform1iARB_dispatch_table_rewrite_ptr, /* glUniform1iARB */ + epoxy_glUniform1iv_dispatch_table_rewrite_ptr, /* glUniform1iv */ + epoxy_glUniform1ivARB_dispatch_table_rewrite_ptr, /* glUniform1ivARB */ + epoxy_glUniform1ui_dispatch_table_rewrite_ptr, /* glUniform1ui */ + epoxy_glUniform1ui64ARB_dispatch_table_rewrite_ptr, /* glUniform1ui64ARB */ + epoxy_glUniform1ui64NV_dispatch_table_rewrite_ptr, /* glUniform1ui64NV */ + epoxy_glUniform1ui64vARB_dispatch_table_rewrite_ptr, /* glUniform1ui64vARB */ + epoxy_glUniform1ui64vNV_dispatch_table_rewrite_ptr, /* glUniform1ui64vNV */ + epoxy_glUniform1uiEXT_dispatch_table_rewrite_ptr, /* glUniform1uiEXT */ + epoxy_glUniform1uiv_dispatch_table_rewrite_ptr, /* glUniform1uiv */ + epoxy_glUniform1uivEXT_dispatch_table_rewrite_ptr, /* glUniform1uivEXT */ + epoxy_glUniform2d_dispatch_table_rewrite_ptr, /* glUniform2d */ + epoxy_glUniform2dv_dispatch_table_rewrite_ptr, /* glUniform2dv */ + epoxy_glUniform2f_dispatch_table_rewrite_ptr, /* glUniform2f */ + epoxy_glUniform2fARB_dispatch_table_rewrite_ptr, /* glUniform2fARB */ + epoxy_glUniform2fv_dispatch_table_rewrite_ptr, /* glUniform2fv */ + epoxy_glUniform2fvARB_dispatch_table_rewrite_ptr, /* glUniform2fvARB */ + epoxy_glUniform2i_dispatch_table_rewrite_ptr, /* glUniform2i */ + epoxy_glUniform2i64ARB_dispatch_table_rewrite_ptr, /* glUniform2i64ARB */ + epoxy_glUniform2i64NV_dispatch_table_rewrite_ptr, /* glUniform2i64NV */ + epoxy_glUniform2i64vARB_dispatch_table_rewrite_ptr, /* glUniform2i64vARB */ + epoxy_glUniform2i64vNV_dispatch_table_rewrite_ptr, /* glUniform2i64vNV */ + epoxy_glUniform2iARB_dispatch_table_rewrite_ptr, /* glUniform2iARB */ + epoxy_glUniform2iv_dispatch_table_rewrite_ptr, /* glUniform2iv */ + epoxy_glUniform2ivARB_dispatch_table_rewrite_ptr, /* glUniform2ivARB */ + epoxy_glUniform2ui_dispatch_table_rewrite_ptr, /* glUniform2ui */ + epoxy_glUniform2ui64ARB_dispatch_table_rewrite_ptr, /* glUniform2ui64ARB */ + epoxy_glUniform2ui64NV_dispatch_table_rewrite_ptr, /* glUniform2ui64NV */ + epoxy_glUniform2ui64vARB_dispatch_table_rewrite_ptr, /* glUniform2ui64vARB */ + epoxy_glUniform2ui64vNV_dispatch_table_rewrite_ptr, /* glUniform2ui64vNV */ + epoxy_glUniform2uiEXT_dispatch_table_rewrite_ptr, /* glUniform2uiEXT */ + epoxy_glUniform2uiv_dispatch_table_rewrite_ptr, /* glUniform2uiv */ + epoxy_glUniform2uivEXT_dispatch_table_rewrite_ptr, /* glUniform2uivEXT */ + epoxy_glUniform3d_dispatch_table_rewrite_ptr, /* glUniform3d */ + epoxy_glUniform3dv_dispatch_table_rewrite_ptr, /* glUniform3dv */ + epoxy_glUniform3f_dispatch_table_rewrite_ptr, /* glUniform3f */ + epoxy_glUniform3fARB_dispatch_table_rewrite_ptr, /* glUniform3fARB */ + epoxy_glUniform3fv_dispatch_table_rewrite_ptr, /* glUniform3fv */ + epoxy_glUniform3fvARB_dispatch_table_rewrite_ptr, /* glUniform3fvARB */ + epoxy_glUniform3i_dispatch_table_rewrite_ptr, /* glUniform3i */ + epoxy_glUniform3i64ARB_dispatch_table_rewrite_ptr, /* glUniform3i64ARB */ + epoxy_glUniform3i64NV_dispatch_table_rewrite_ptr, /* glUniform3i64NV */ + epoxy_glUniform3i64vARB_dispatch_table_rewrite_ptr, /* glUniform3i64vARB */ + epoxy_glUniform3i64vNV_dispatch_table_rewrite_ptr, /* glUniform3i64vNV */ + epoxy_glUniform3iARB_dispatch_table_rewrite_ptr, /* glUniform3iARB */ + epoxy_glUniform3iv_dispatch_table_rewrite_ptr, /* glUniform3iv */ + epoxy_glUniform3ivARB_dispatch_table_rewrite_ptr, /* glUniform3ivARB */ + epoxy_glUniform3ui_dispatch_table_rewrite_ptr, /* glUniform3ui */ + epoxy_glUniform3ui64ARB_dispatch_table_rewrite_ptr, /* glUniform3ui64ARB */ + epoxy_glUniform3ui64NV_dispatch_table_rewrite_ptr, /* glUniform3ui64NV */ + epoxy_glUniform3ui64vARB_dispatch_table_rewrite_ptr, /* glUniform3ui64vARB */ + epoxy_glUniform3ui64vNV_dispatch_table_rewrite_ptr, /* glUniform3ui64vNV */ + epoxy_glUniform3uiEXT_dispatch_table_rewrite_ptr, /* glUniform3uiEXT */ + epoxy_glUniform3uiv_dispatch_table_rewrite_ptr, /* glUniform3uiv */ + epoxy_glUniform3uivEXT_dispatch_table_rewrite_ptr, /* glUniform3uivEXT */ + epoxy_glUniform4d_dispatch_table_rewrite_ptr, /* glUniform4d */ + epoxy_glUniform4dv_dispatch_table_rewrite_ptr, /* glUniform4dv */ + epoxy_glUniform4f_dispatch_table_rewrite_ptr, /* glUniform4f */ + epoxy_glUniform4fARB_dispatch_table_rewrite_ptr, /* glUniform4fARB */ + epoxy_glUniform4fv_dispatch_table_rewrite_ptr, /* glUniform4fv */ + epoxy_glUniform4fvARB_dispatch_table_rewrite_ptr, /* glUniform4fvARB */ + epoxy_glUniform4i_dispatch_table_rewrite_ptr, /* glUniform4i */ + epoxy_glUniform4i64ARB_dispatch_table_rewrite_ptr, /* glUniform4i64ARB */ + epoxy_glUniform4i64NV_dispatch_table_rewrite_ptr, /* glUniform4i64NV */ + epoxy_glUniform4i64vARB_dispatch_table_rewrite_ptr, /* glUniform4i64vARB */ + epoxy_glUniform4i64vNV_dispatch_table_rewrite_ptr, /* glUniform4i64vNV */ + epoxy_glUniform4iARB_dispatch_table_rewrite_ptr, /* glUniform4iARB */ + epoxy_glUniform4iv_dispatch_table_rewrite_ptr, /* glUniform4iv */ + epoxy_glUniform4ivARB_dispatch_table_rewrite_ptr, /* glUniform4ivARB */ + epoxy_glUniform4ui_dispatch_table_rewrite_ptr, /* glUniform4ui */ + epoxy_glUniform4ui64ARB_dispatch_table_rewrite_ptr, /* glUniform4ui64ARB */ + epoxy_glUniform4ui64NV_dispatch_table_rewrite_ptr, /* glUniform4ui64NV */ + epoxy_glUniform4ui64vARB_dispatch_table_rewrite_ptr, /* glUniform4ui64vARB */ + epoxy_glUniform4ui64vNV_dispatch_table_rewrite_ptr, /* glUniform4ui64vNV */ + epoxy_glUniform4uiEXT_dispatch_table_rewrite_ptr, /* glUniform4uiEXT */ + epoxy_glUniform4uiv_dispatch_table_rewrite_ptr, /* glUniform4uiv */ + epoxy_glUniform4uivEXT_dispatch_table_rewrite_ptr, /* glUniform4uivEXT */ + epoxy_glUniformBlockBinding_dispatch_table_rewrite_ptr, /* glUniformBlockBinding */ + epoxy_glUniformBufferEXT_dispatch_table_rewrite_ptr, /* glUniformBufferEXT */ + epoxy_glUniformHandleui64ARB_dispatch_table_rewrite_ptr, /* glUniformHandleui64ARB */ + epoxy_glUniformHandleui64NV_dispatch_table_rewrite_ptr, /* glUniformHandleui64NV */ + epoxy_glUniformHandleui64vARB_dispatch_table_rewrite_ptr, /* glUniformHandleui64vARB */ + epoxy_glUniformHandleui64vNV_dispatch_table_rewrite_ptr, /* glUniformHandleui64vNV */ + epoxy_glUniformMatrix2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2dv */ + epoxy_glUniformMatrix2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2fv */ + epoxy_glUniformMatrix2fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix2fvARB */ + epoxy_glUniformMatrix2x3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3dv */ + epoxy_glUniformMatrix2x3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3fv */ + epoxy_glUniformMatrix2x3fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3fvNV */ + epoxy_glUniformMatrix2x4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4dv */ + epoxy_glUniformMatrix2x4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4fv */ + epoxy_glUniformMatrix2x4fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4fvNV */ + epoxy_glUniformMatrix3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3dv */ + epoxy_glUniformMatrix3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3fv */ + epoxy_glUniformMatrix3fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix3fvARB */ + epoxy_glUniformMatrix3x2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2dv */ + epoxy_glUniformMatrix3x2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2fv */ + epoxy_glUniformMatrix3x2fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2fvNV */ + epoxy_glUniformMatrix3x4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4dv */ + epoxy_glUniformMatrix3x4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4fv */ + epoxy_glUniformMatrix3x4fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4fvNV */ + epoxy_glUniformMatrix4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4dv */ + epoxy_glUniformMatrix4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4fv */ + epoxy_glUniformMatrix4fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix4fvARB */ + epoxy_glUniformMatrix4x2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2dv */ + epoxy_glUniformMatrix4x2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2fv */ + epoxy_glUniformMatrix4x2fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2fvNV */ + epoxy_glUniformMatrix4x3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3dv */ + epoxy_glUniformMatrix4x3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3fv */ + epoxy_glUniformMatrix4x3fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3fvNV */ + epoxy_glUniformSubroutinesuiv_dispatch_table_rewrite_ptr, /* glUniformSubroutinesuiv */ + epoxy_glUniformui64NV_dispatch_table_rewrite_ptr, /* glUniformui64NV */ + epoxy_glUniformui64vNV_dispatch_table_rewrite_ptr, /* glUniformui64vNV */ + epoxy_glUnlockArraysEXT_dispatch_table_rewrite_ptr, /* glUnlockArraysEXT */ + epoxy_glUnmapBuffer_dispatch_table_rewrite_ptr, /* glUnmapBuffer */ + epoxy_glUnmapBufferARB_dispatch_table_rewrite_ptr, /* glUnmapBufferARB */ + epoxy_glUnmapBufferOES_dispatch_table_rewrite_ptr, /* glUnmapBufferOES */ + epoxy_glUnmapNamedBuffer_dispatch_table_rewrite_ptr, /* glUnmapNamedBuffer */ + epoxy_glUnmapNamedBufferEXT_dispatch_table_rewrite_ptr, /* glUnmapNamedBufferEXT */ + epoxy_glUnmapObjectBufferATI_dispatch_table_rewrite_ptr, /* glUnmapObjectBufferATI */ + epoxy_glUnmapTexture2DINTEL_dispatch_table_rewrite_ptr, /* glUnmapTexture2DINTEL */ + epoxy_glUpdateObjectBufferATI_dispatch_table_rewrite_ptr, /* glUpdateObjectBufferATI */ + epoxy_glUseProgram_dispatch_table_rewrite_ptr, /* glUseProgram */ + epoxy_glUseProgramObjectARB_dispatch_table_rewrite_ptr, /* glUseProgramObjectARB */ + epoxy_glUseProgramStages_dispatch_table_rewrite_ptr, /* glUseProgramStages */ + epoxy_glUseProgramStagesEXT_dispatch_table_rewrite_ptr, /* glUseProgramStagesEXT */ + epoxy_glUseShaderProgramEXT_dispatch_table_rewrite_ptr, /* glUseShaderProgramEXT */ + epoxy_glVDPAUFiniNV_dispatch_table_rewrite_ptr, /* glVDPAUFiniNV */ + epoxy_glVDPAUGetSurfaceivNV_dispatch_table_rewrite_ptr, /* glVDPAUGetSurfaceivNV */ + epoxy_glVDPAUInitNV_dispatch_table_rewrite_ptr, /* glVDPAUInitNV */ + epoxy_glVDPAUIsSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAUIsSurfaceNV */ + epoxy_glVDPAUMapSurfacesNV_dispatch_table_rewrite_ptr, /* glVDPAUMapSurfacesNV */ + epoxy_glVDPAURegisterOutputSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAURegisterOutputSurfaceNV */ + epoxy_glVDPAURegisterVideoSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAURegisterVideoSurfaceNV */ + epoxy_glVDPAUSurfaceAccessNV_dispatch_table_rewrite_ptr, /* glVDPAUSurfaceAccessNV */ + epoxy_glVDPAUUnmapSurfacesNV_dispatch_table_rewrite_ptr, /* glVDPAUUnmapSurfacesNV */ + epoxy_glVDPAUUnregisterSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAUUnregisterSurfaceNV */ + epoxy_glValidateProgram_dispatch_table_rewrite_ptr, /* glValidateProgram */ + epoxy_glValidateProgramARB_dispatch_table_rewrite_ptr, /* glValidateProgramARB */ + epoxy_glValidateProgramPipeline_dispatch_table_rewrite_ptr, /* glValidateProgramPipeline */ + epoxy_glValidateProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glValidateProgramPipelineEXT */ + epoxy_glVariantArrayObjectATI_dispatch_table_rewrite_ptr, /* glVariantArrayObjectATI */ + epoxy_glVariantPointerEXT_dispatch_table_rewrite_ptr, /* glVariantPointerEXT */ + epoxy_glVariantbvEXT_dispatch_table_rewrite_ptr, /* glVariantbvEXT */ + epoxy_glVariantdvEXT_dispatch_table_rewrite_ptr, /* glVariantdvEXT */ + epoxy_glVariantfvEXT_dispatch_table_rewrite_ptr, /* glVariantfvEXT */ + epoxy_glVariantivEXT_dispatch_table_rewrite_ptr, /* glVariantivEXT */ + epoxy_glVariantsvEXT_dispatch_table_rewrite_ptr, /* glVariantsvEXT */ + epoxy_glVariantubvEXT_dispatch_table_rewrite_ptr, /* glVariantubvEXT */ + epoxy_glVariantuivEXT_dispatch_table_rewrite_ptr, /* glVariantuivEXT */ + epoxy_glVariantusvEXT_dispatch_table_rewrite_ptr, /* glVariantusvEXT */ + epoxy_glVertex2bOES_dispatch_table_rewrite_ptr, /* glVertex2bOES */ + epoxy_glVertex2bvOES_dispatch_table_rewrite_ptr, /* glVertex2bvOES */ + epoxy_glVertex2d_dispatch_table_rewrite_ptr, /* glVertex2d */ + epoxy_glVertex2dv_dispatch_table_rewrite_ptr, /* glVertex2dv */ + epoxy_glVertex2f_dispatch_table_rewrite_ptr, /* glVertex2f */ + epoxy_glVertex2fv_dispatch_table_rewrite_ptr, /* glVertex2fv */ + epoxy_glVertex2hNV_dispatch_table_rewrite_ptr, /* glVertex2hNV */ + epoxy_glVertex2hvNV_dispatch_table_rewrite_ptr, /* glVertex2hvNV */ + epoxy_glVertex2i_dispatch_table_rewrite_ptr, /* glVertex2i */ + epoxy_glVertex2iv_dispatch_table_rewrite_ptr, /* glVertex2iv */ + epoxy_glVertex2s_dispatch_table_rewrite_ptr, /* glVertex2s */ + epoxy_glVertex2sv_dispatch_table_rewrite_ptr, /* glVertex2sv */ + epoxy_glVertex2xOES_dispatch_table_rewrite_ptr, /* glVertex2xOES */ + epoxy_glVertex2xvOES_dispatch_table_rewrite_ptr, /* glVertex2xvOES */ + epoxy_glVertex3bOES_dispatch_table_rewrite_ptr, /* glVertex3bOES */ + epoxy_glVertex3bvOES_dispatch_table_rewrite_ptr, /* glVertex3bvOES */ + epoxy_glVertex3d_dispatch_table_rewrite_ptr, /* glVertex3d */ + epoxy_glVertex3dv_dispatch_table_rewrite_ptr, /* glVertex3dv */ + epoxy_glVertex3f_dispatch_table_rewrite_ptr, /* glVertex3f */ + epoxy_glVertex3fv_dispatch_table_rewrite_ptr, /* glVertex3fv */ + epoxy_glVertex3hNV_dispatch_table_rewrite_ptr, /* glVertex3hNV */ + epoxy_glVertex3hvNV_dispatch_table_rewrite_ptr, /* glVertex3hvNV */ + epoxy_glVertex3i_dispatch_table_rewrite_ptr, /* glVertex3i */ + epoxy_glVertex3iv_dispatch_table_rewrite_ptr, /* glVertex3iv */ + epoxy_glVertex3s_dispatch_table_rewrite_ptr, /* glVertex3s */ + epoxy_glVertex3sv_dispatch_table_rewrite_ptr, /* glVertex3sv */ + epoxy_glVertex3xOES_dispatch_table_rewrite_ptr, /* glVertex3xOES */ + epoxy_glVertex3xvOES_dispatch_table_rewrite_ptr, /* glVertex3xvOES */ + epoxy_glVertex4bOES_dispatch_table_rewrite_ptr, /* glVertex4bOES */ + epoxy_glVertex4bvOES_dispatch_table_rewrite_ptr, /* glVertex4bvOES */ + epoxy_glVertex4d_dispatch_table_rewrite_ptr, /* glVertex4d */ + epoxy_glVertex4dv_dispatch_table_rewrite_ptr, /* glVertex4dv */ + epoxy_glVertex4f_dispatch_table_rewrite_ptr, /* glVertex4f */ + epoxy_glVertex4fv_dispatch_table_rewrite_ptr, /* glVertex4fv */ + epoxy_glVertex4hNV_dispatch_table_rewrite_ptr, /* glVertex4hNV */ + epoxy_glVertex4hvNV_dispatch_table_rewrite_ptr, /* glVertex4hvNV */ + epoxy_glVertex4i_dispatch_table_rewrite_ptr, /* glVertex4i */ + epoxy_glVertex4iv_dispatch_table_rewrite_ptr, /* glVertex4iv */ + epoxy_glVertex4s_dispatch_table_rewrite_ptr, /* glVertex4s */ + epoxy_glVertex4sv_dispatch_table_rewrite_ptr, /* glVertex4sv */ + epoxy_glVertex4xOES_dispatch_table_rewrite_ptr, /* glVertex4xOES */ + epoxy_glVertex4xvOES_dispatch_table_rewrite_ptr, /* glVertex4xvOES */ + epoxy_glVertexArrayAttribBinding_dispatch_table_rewrite_ptr, /* glVertexArrayAttribBinding */ + epoxy_glVertexArrayAttribFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribFormat */ + epoxy_glVertexArrayAttribIFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribIFormat */ + epoxy_glVertexArrayAttribLFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribLFormat */ + epoxy_glVertexArrayBindVertexBufferEXT_dispatch_table_rewrite_ptr, /* glVertexArrayBindVertexBufferEXT */ + epoxy_glVertexArrayBindingDivisor_dispatch_table_rewrite_ptr, /* glVertexArrayBindingDivisor */ + epoxy_glVertexArrayColorOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayColorOffsetEXT */ + epoxy_glVertexArrayEdgeFlagOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayEdgeFlagOffsetEXT */ + epoxy_glVertexArrayElementBuffer_dispatch_table_rewrite_ptr, /* glVertexArrayElementBuffer */ + epoxy_glVertexArrayFogCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayFogCoordOffsetEXT */ + epoxy_glVertexArrayIndexOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayIndexOffsetEXT */ + epoxy_glVertexArrayMultiTexCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayMultiTexCoordOffsetEXT */ + epoxy_glVertexArrayNormalOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayNormalOffsetEXT */ + epoxy_glVertexArrayParameteriAPPLE_dispatch_table_rewrite_ptr, /* glVertexArrayParameteriAPPLE */ + epoxy_glVertexArrayRangeAPPLE_dispatch_table_rewrite_ptr, /* glVertexArrayRangeAPPLE */ + epoxy_glVertexArrayRangeNV_dispatch_table_rewrite_ptr, /* glVertexArrayRangeNV */ + epoxy_glVertexArraySecondaryColorOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArraySecondaryColorOffsetEXT */ + epoxy_glVertexArrayTexCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayTexCoordOffsetEXT */ + epoxy_glVertexArrayVertexAttribBindingEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribBindingEXT */ + epoxy_glVertexArrayVertexAttribDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribDivisorEXT */ + epoxy_glVertexArrayVertexAttribFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribFormatEXT */ + epoxy_glVertexArrayVertexAttribIFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribIFormatEXT */ + epoxy_glVertexArrayVertexAttribIOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribIOffsetEXT */ + epoxy_glVertexArrayVertexAttribLFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribLFormatEXT */ + epoxy_glVertexArrayVertexAttribLOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribLOffsetEXT */ + epoxy_glVertexArrayVertexAttribOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribOffsetEXT */ + epoxy_glVertexArrayVertexBindingDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBindingDivisorEXT */ + epoxy_glVertexArrayVertexBuffer_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBuffer */ + epoxy_glVertexArrayVertexBuffers_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBuffers */ + epoxy_glVertexArrayVertexOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexOffsetEXT */ + epoxy_glVertexAttrib1d_dispatch_table_rewrite_ptr, /* glVertexAttrib1d */ + epoxy_glVertexAttrib1dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1dARB */ + epoxy_glVertexAttrib1dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1dNV */ + epoxy_glVertexAttrib1dv_dispatch_table_rewrite_ptr, /* glVertexAttrib1dv */ + epoxy_glVertexAttrib1dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1dvARB */ + epoxy_glVertexAttrib1dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1dvNV */ + epoxy_glVertexAttrib1f_dispatch_table_rewrite_ptr, /* glVertexAttrib1f */ + epoxy_glVertexAttrib1fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1fARB */ + epoxy_glVertexAttrib1fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1fNV */ + epoxy_glVertexAttrib1fv_dispatch_table_rewrite_ptr, /* glVertexAttrib1fv */ + epoxy_glVertexAttrib1fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1fvARB */ + epoxy_glVertexAttrib1fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1fvNV */ + epoxy_glVertexAttrib1hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1hNV */ + epoxy_glVertexAttrib1hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1hvNV */ + epoxy_glVertexAttrib1s_dispatch_table_rewrite_ptr, /* glVertexAttrib1s */ + epoxy_glVertexAttrib1sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1sARB */ + epoxy_glVertexAttrib1sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1sNV */ + epoxy_glVertexAttrib1sv_dispatch_table_rewrite_ptr, /* glVertexAttrib1sv */ + epoxy_glVertexAttrib1svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1svARB */ + epoxy_glVertexAttrib1svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1svNV */ + epoxy_glVertexAttrib2d_dispatch_table_rewrite_ptr, /* glVertexAttrib2d */ + epoxy_glVertexAttrib2dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2dARB */ + epoxy_glVertexAttrib2dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2dNV */ + epoxy_glVertexAttrib2dv_dispatch_table_rewrite_ptr, /* glVertexAttrib2dv */ + epoxy_glVertexAttrib2dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2dvARB */ + epoxy_glVertexAttrib2dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2dvNV */ + epoxy_glVertexAttrib2f_dispatch_table_rewrite_ptr, /* glVertexAttrib2f */ + epoxy_glVertexAttrib2fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2fARB */ + epoxy_glVertexAttrib2fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2fNV */ + epoxy_glVertexAttrib2fv_dispatch_table_rewrite_ptr, /* glVertexAttrib2fv */ + epoxy_glVertexAttrib2fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2fvARB */ + epoxy_glVertexAttrib2fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2fvNV */ + epoxy_glVertexAttrib2hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2hNV */ + epoxy_glVertexAttrib2hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2hvNV */ + epoxy_glVertexAttrib2s_dispatch_table_rewrite_ptr, /* glVertexAttrib2s */ + epoxy_glVertexAttrib2sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2sARB */ + epoxy_glVertexAttrib2sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2sNV */ + epoxy_glVertexAttrib2sv_dispatch_table_rewrite_ptr, /* glVertexAttrib2sv */ + epoxy_glVertexAttrib2svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2svARB */ + epoxy_glVertexAttrib2svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2svNV */ + epoxy_glVertexAttrib3d_dispatch_table_rewrite_ptr, /* glVertexAttrib3d */ + epoxy_glVertexAttrib3dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3dARB */ + epoxy_glVertexAttrib3dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3dNV */ + epoxy_glVertexAttrib3dv_dispatch_table_rewrite_ptr, /* glVertexAttrib3dv */ + epoxy_glVertexAttrib3dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3dvARB */ + epoxy_glVertexAttrib3dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3dvNV */ + epoxy_glVertexAttrib3f_dispatch_table_rewrite_ptr, /* glVertexAttrib3f */ + epoxy_glVertexAttrib3fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3fARB */ + epoxy_glVertexAttrib3fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3fNV */ + epoxy_glVertexAttrib3fv_dispatch_table_rewrite_ptr, /* glVertexAttrib3fv */ + epoxy_glVertexAttrib3fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3fvARB */ + epoxy_glVertexAttrib3fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3fvNV */ + epoxy_glVertexAttrib3hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3hNV */ + epoxy_glVertexAttrib3hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3hvNV */ + epoxy_glVertexAttrib3s_dispatch_table_rewrite_ptr, /* glVertexAttrib3s */ + epoxy_glVertexAttrib3sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3sARB */ + epoxy_glVertexAttrib3sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3sNV */ + epoxy_glVertexAttrib3sv_dispatch_table_rewrite_ptr, /* glVertexAttrib3sv */ + epoxy_glVertexAttrib3svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3svARB */ + epoxy_glVertexAttrib3svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3svNV */ + epoxy_glVertexAttrib4Nbv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nbv */ + epoxy_glVertexAttrib4NbvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NbvARB */ + epoxy_glVertexAttrib4Niv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Niv */ + epoxy_glVertexAttrib4NivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NivARB */ + epoxy_glVertexAttrib4Nsv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nsv */ + epoxy_glVertexAttrib4NsvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NsvARB */ + epoxy_glVertexAttrib4Nub_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nub */ + epoxy_glVertexAttrib4NubARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NubARB */ + epoxy_glVertexAttrib4Nubv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nubv */ + epoxy_glVertexAttrib4NubvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NubvARB */ + epoxy_glVertexAttrib4Nuiv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nuiv */ + epoxy_glVertexAttrib4NuivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NuivARB */ + epoxy_glVertexAttrib4Nusv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nusv */ + epoxy_glVertexAttrib4NusvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NusvARB */ + epoxy_glVertexAttrib4bv_dispatch_table_rewrite_ptr, /* glVertexAttrib4bv */ + epoxy_glVertexAttrib4bvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4bvARB */ + epoxy_glVertexAttrib4d_dispatch_table_rewrite_ptr, /* glVertexAttrib4d */ + epoxy_glVertexAttrib4dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4dARB */ + epoxy_glVertexAttrib4dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4dNV */ + epoxy_glVertexAttrib4dv_dispatch_table_rewrite_ptr, /* glVertexAttrib4dv */ + epoxy_glVertexAttrib4dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4dvARB */ + epoxy_glVertexAttrib4dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4dvNV */ + epoxy_glVertexAttrib4f_dispatch_table_rewrite_ptr, /* glVertexAttrib4f */ + epoxy_glVertexAttrib4fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4fARB */ + epoxy_glVertexAttrib4fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4fNV */ + epoxy_glVertexAttrib4fv_dispatch_table_rewrite_ptr, /* glVertexAttrib4fv */ + epoxy_glVertexAttrib4fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4fvARB */ + epoxy_glVertexAttrib4fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4fvNV */ + epoxy_glVertexAttrib4hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4hNV */ + epoxy_glVertexAttrib4hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4hvNV */ + epoxy_glVertexAttrib4iv_dispatch_table_rewrite_ptr, /* glVertexAttrib4iv */ + epoxy_glVertexAttrib4ivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4ivARB */ + epoxy_glVertexAttrib4s_dispatch_table_rewrite_ptr, /* glVertexAttrib4s */ + epoxy_glVertexAttrib4sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4sARB */ + epoxy_glVertexAttrib4sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4sNV */ + epoxy_glVertexAttrib4sv_dispatch_table_rewrite_ptr, /* glVertexAttrib4sv */ + epoxy_glVertexAttrib4svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4svARB */ + epoxy_glVertexAttrib4svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4svNV */ + epoxy_glVertexAttrib4ubNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubNV */ + epoxy_glVertexAttrib4ubv_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubv */ + epoxy_glVertexAttrib4ubvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubvARB */ + epoxy_glVertexAttrib4ubvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubvNV */ + epoxy_glVertexAttrib4uiv_dispatch_table_rewrite_ptr, /* glVertexAttrib4uiv */ + epoxy_glVertexAttrib4uivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4uivARB */ + epoxy_glVertexAttrib4usv_dispatch_table_rewrite_ptr, /* glVertexAttrib4usv */ + epoxy_glVertexAttrib4usvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4usvARB */ + epoxy_glVertexAttribArrayObjectATI_dispatch_table_rewrite_ptr, /* glVertexAttribArrayObjectATI */ + epoxy_glVertexAttribBinding_dispatch_table_rewrite_ptr, /* glVertexAttribBinding */ + epoxy_glVertexAttribDivisor_dispatch_table_rewrite_ptr, /* glVertexAttribDivisor */ + epoxy_glVertexAttribDivisorANGLE_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorANGLE */ + epoxy_glVertexAttribDivisorARB_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorARB */ + epoxy_glVertexAttribDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorEXT */ + epoxy_glVertexAttribDivisorNV_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorNV */ + epoxy_glVertexAttribFormat_dispatch_table_rewrite_ptr, /* glVertexAttribFormat */ + epoxy_glVertexAttribFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribFormatNV */ + epoxy_glVertexAttribI1i_dispatch_table_rewrite_ptr, /* glVertexAttribI1i */ + epoxy_glVertexAttribI1iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1iEXT */ + epoxy_glVertexAttribI1iv_dispatch_table_rewrite_ptr, /* glVertexAttribI1iv */ + epoxy_glVertexAttribI1ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1ivEXT */ + epoxy_glVertexAttribI1ui_dispatch_table_rewrite_ptr, /* glVertexAttribI1ui */ + epoxy_glVertexAttribI1uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1uiEXT */ + epoxy_glVertexAttribI1uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI1uiv */ + epoxy_glVertexAttribI1uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1uivEXT */ + epoxy_glVertexAttribI2i_dispatch_table_rewrite_ptr, /* glVertexAttribI2i */ + epoxy_glVertexAttribI2iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2iEXT */ + epoxy_glVertexAttribI2iv_dispatch_table_rewrite_ptr, /* glVertexAttribI2iv */ + epoxy_glVertexAttribI2ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2ivEXT */ + epoxy_glVertexAttribI2ui_dispatch_table_rewrite_ptr, /* glVertexAttribI2ui */ + epoxy_glVertexAttribI2uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2uiEXT */ + epoxy_glVertexAttribI2uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI2uiv */ + epoxy_glVertexAttribI2uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2uivEXT */ + epoxy_glVertexAttribI3i_dispatch_table_rewrite_ptr, /* glVertexAttribI3i */ + epoxy_glVertexAttribI3iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3iEXT */ + epoxy_glVertexAttribI3iv_dispatch_table_rewrite_ptr, /* glVertexAttribI3iv */ + epoxy_glVertexAttribI3ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3ivEXT */ + epoxy_glVertexAttribI3ui_dispatch_table_rewrite_ptr, /* glVertexAttribI3ui */ + epoxy_glVertexAttribI3uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3uiEXT */ + epoxy_glVertexAttribI3uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI3uiv */ + epoxy_glVertexAttribI3uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3uivEXT */ + epoxy_glVertexAttribI4bv_dispatch_table_rewrite_ptr, /* glVertexAttribI4bv */ + epoxy_glVertexAttribI4bvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4bvEXT */ + epoxy_glVertexAttribI4i_dispatch_table_rewrite_ptr, /* glVertexAttribI4i */ + epoxy_glVertexAttribI4iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4iEXT */ + epoxy_glVertexAttribI4iv_dispatch_table_rewrite_ptr, /* glVertexAttribI4iv */ + epoxy_glVertexAttribI4ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4ivEXT */ + epoxy_glVertexAttribI4sv_dispatch_table_rewrite_ptr, /* glVertexAttribI4sv */ + epoxy_glVertexAttribI4svEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4svEXT */ + epoxy_glVertexAttribI4ubv_dispatch_table_rewrite_ptr, /* glVertexAttribI4ubv */ + epoxy_glVertexAttribI4ubvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4ubvEXT */ + epoxy_glVertexAttribI4ui_dispatch_table_rewrite_ptr, /* glVertexAttribI4ui */ + epoxy_glVertexAttribI4uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4uiEXT */ + epoxy_glVertexAttribI4uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI4uiv */ + epoxy_glVertexAttribI4uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4uivEXT */ + epoxy_glVertexAttribI4usv_dispatch_table_rewrite_ptr, /* glVertexAttribI4usv */ + epoxy_glVertexAttribI4usvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4usvEXT */ + epoxy_glVertexAttribIFormat_dispatch_table_rewrite_ptr, /* glVertexAttribIFormat */ + epoxy_glVertexAttribIFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribIFormatNV */ + epoxy_glVertexAttribIPointer_dispatch_table_rewrite_ptr, /* glVertexAttribIPointer */ + epoxy_glVertexAttribIPointerEXT_dispatch_table_rewrite_ptr, /* glVertexAttribIPointerEXT */ + epoxy_glVertexAttribL1d_dispatch_table_rewrite_ptr, /* glVertexAttribL1d */ + epoxy_glVertexAttribL1dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL1dEXT */ + epoxy_glVertexAttribL1dv_dispatch_table_rewrite_ptr, /* glVertexAttribL1dv */ + epoxy_glVertexAttribL1dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL1dvEXT */ + epoxy_glVertexAttribL1i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL1i64NV */ + epoxy_glVertexAttribL1i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL1i64vNV */ + epoxy_glVertexAttribL1ui64ARB_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64ARB */ + epoxy_glVertexAttribL1ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64NV */ + epoxy_glVertexAttribL1ui64vARB_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64vARB */ + epoxy_glVertexAttribL1ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64vNV */ + epoxy_glVertexAttribL2d_dispatch_table_rewrite_ptr, /* glVertexAttribL2d */ + epoxy_glVertexAttribL2dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL2dEXT */ + epoxy_glVertexAttribL2dv_dispatch_table_rewrite_ptr, /* glVertexAttribL2dv */ + epoxy_glVertexAttribL2dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL2dvEXT */ + epoxy_glVertexAttribL2i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL2i64NV */ + epoxy_glVertexAttribL2i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL2i64vNV */ + epoxy_glVertexAttribL2ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL2ui64NV */ + epoxy_glVertexAttribL2ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL2ui64vNV */ + epoxy_glVertexAttribL3d_dispatch_table_rewrite_ptr, /* glVertexAttribL3d */ + epoxy_glVertexAttribL3dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL3dEXT */ + epoxy_glVertexAttribL3dv_dispatch_table_rewrite_ptr, /* glVertexAttribL3dv */ + epoxy_glVertexAttribL3dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL3dvEXT */ + epoxy_glVertexAttribL3i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL3i64NV */ + epoxy_glVertexAttribL3i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL3i64vNV */ + epoxy_glVertexAttribL3ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL3ui64NV */ + epoxy_glVertexAttribL3ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL3ui64vNV */ + epoxy_glVertexAttribL4d_dispatch_table_rewrite_ptr, /* glVertexAttribL4d */ + epoxy_glVertexAttribL4dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL4dEXT */ + epoxy_glVertexAttribL4dv_dispatch_table_rewrite_ptr, /* glVertexAttribL4dv */ + epoxy_glVertexAttribL4dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL4dvEXT */ + epoxy_glVertexAttribL4i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL4i64NV */ + epoxy_glVertexAttribL4i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL4i64vNV */ + epoxy_glVertexAttribL4ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL4ui64NV */ + epoxy_glVertexAttribL4ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL4ui64vNV */ + epoxy_glVertexAttribLFormat_dispatch_table_rewrite_ptr, /* glVertexAttribLFormat */ + epoxy_glVertexAttribLFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribLFormatNV */ + epoxy_glVertexAttribLPointer_dispatch_table_rewrite_ptr, /* glVertexAttribLPointer */ + epoxy_glVertexAttribLPointerEXT_dispatch_table_rewrite_ptr, /* glVertexAttribLPointerEXT */ + epoxy_glVertexAttribP1ui_dispatch_table_rewrite_ptr, /* glVertexAttribP1ui */ + epoxy_glVertexAttribP1uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP1uiv */ + epoxy_glVertexAttribP2ui_dispatch_table_rewrite_ptr, /* glVertexAttribP2ui */ + epoxy_glVertexAttribP2uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP2uiv */ + epoxy_glVertexAttribP3ui_dispatch_table_rewrite_ptr, /* glVertexAttribP3ui */ + epoxy_glVertexAttribP3uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP3uiv */ + epoxy_glVertexAttribP4ui_dispatch_table_rewrite_ptr, /* glVertexAttribP4ui */ + epoxy_glVertexAttribP4uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP4uiv */ + epoxy_glVertexAttribParameteriAMD_dispatch_table_rewrite_ptr, /* glVertexAttribParameteriAMD */ + epoxy_glVertexAttribPointer_dispatch_table_rewrite_ptr, /* glVertexAttribPointer */ + epoxy_glVertexAttribPointerARB_dispatch_table_rewrite_ptr, /* glVertexAttribPointerARB */ + epoxy_glVertexAttribPointerNV_dispatch_table_rewrite_ptr, /* glVertexAttribPointerNV */ + epoxy_glVertexAttribs1dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1dvNV */ + epoxy_glVertexAttribs1fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1fvNV */ + epoxy_glVertexAttribs1hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1hvNV */ + epoxy_glVertexAttribs1svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1svNV */ + epoxy_glVertexAttribs2dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2dvNV */ + epoxy_glVertexAttribs2fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2fvNV */ + epoxy_glVertexAttribs2hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2hvNV */ + epoxy_glVertexAttribs2svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2svNV */ + epoxy_glVertexAttribs3dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3dvNV */ + epoxy_glVertexAttribs3fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3fvNV */ + epoxy_glVertexAttribs3hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3hvNV */ + epoxy_glVertexAttribs3svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3svNV */ + epoxy_glVertexAttribs4dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4dvNV */ + epoxy_glVertexAttribs4fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4fvNV */ + epoxy_glVertexAttribs4hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4hvNV */ + epoxy_glVertexAttribs4svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4svNV */ + epoxy_glVertexAttribs4ubvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4ubvNV */ + epoxy_glVertexBindingDivisor_dispatch_table_rewrite_ptr, /* glVertexBindingDivisor */ + epoxy_glVertexBlendARB_dispatch_table_rewrite_ptr, /* glVertexBlendARB */ + epoxy_glVertexBlendEnvfATI_dispatch_table_rewrite_ptr, /* glVertexBlendEnvfATI */ + epoxy_glVertexBlendEnviATI_dispatch_table_rewrite_ptr, /* glVertexBlendEnviATI */ + epoxy_glVertexFormatNV_dispatch_table_rewrite_ptr, /* glVertexFormatNV */ + epoxy_glVertexP2ui_dispatch_table_rewrite_ptr, /* glVertexP2ui */ + epoxy_glVertexP2uiv_dispatch_table_rewrite_ptr, /* glVertexP2uiv */ + epoxy_glVertexP3ui_dispatch_table_rewrite_ptr, /* glVertexP3ui */ + epoxy_glVertexP3uiv_dispatch_table_rewrite_ptr, /* glVertexP3uiv */ + epoxy_glVertexP4ui_dispatch_table_rewrite_ptr, /* glVertexP4ui */ + epoxy_glVertexP4uiv_dispatch_table_rewrite_ptr, /* glVertexP4uiv */ + epoxy_glVertexPointer_dispatch_table_rewrite_ptr, /* glVertexPointer */ + epoxy_glVertexPointerEXT_dispatch_table_rewrite_ptr, /* glVertexPointerEXT */ + epoxy_glVertexPointerListIBM_dispatch_table_rewrite_ptr, /* glVertexPointerListIBM */ + epoxy_glVertexPointervINTEL_dispatch_table_rewrite_ptr, /* glVertexPointervINTEL */ + epoxy_glVertexStream1dATI_dispatch_table_rewrite_ptr, /* glVertexStream1dATI */ + epoxy_glVertexStream1dvATI_dispatch_table_rewrite_ptr, /* glVertexStream1dvATI */ + epoxy_glVertexStream1fATI_dispatch_table_rewrite_ptr, /* glVertexStream1fATI */ + epoxy_glVertexStream1fvATI_dispatch_table_rewrite_ptr, /* glVertexStream1fvATI */ + epoxy_glVertexStream1iATI_dispatch_table_rewrite_ptr, /* glVertexStream1iATI */ + epoxy_glVertexStream1ivATI_dispatch_table_rewrite_ptr, /* glVertexStream1ivATI */ + epoxy_glVertexStream1sATI_dispatch_table_rewrite_ptr, /* glVertexStream1sATI */ + epoxy_glVertexStream1svATI_dispatch_table_rewrite_ptr, /* glVertexStream1svATI */ + epoxy_glVertexStream2dATI_dispatch_table_rewrite_ptr, /* glVertexStream2dATI */ + epoxy_glVertexStream2dvATI_dispatch_table_rewrite_ptr, /* glVertexStream2dvATI */ + epoxy_glVertexStream2fATI_dispatch_table_rewrite_ptr, /* glVertexStream2fATI */ + epoxy_glVertexStream2fvATI_dispatch_table_rewrite_ptr, /* glVertexStream2fvATI */ + epoxy_glVertexStream2iATI_dispatch_table_rewrite_ptr, /* glVertexStream2iATI */ + epoxy_glVertexStream2ivATI_dispatch_table_rewrite_ptr, /* glVertexStream2ivATI */ + epoxy_glVertexStream2sATI_dispatch_table_rewrite_ptr, /* glVertexStream2sATI */ + epoxy_glVertexStream2svATI_dispatch_table_rewrite_ptr, /* glVertexStream2svATI */ + epoxy_glVertexStream3dATI_dispatch_table_rewrite_ptr, /* glVertexStream3dATI */ + epoxy_glVertexStream3dvATI_dispatch_table_rewrite_ptr, /* glVertexStream3dvATI */ + epoxy_glVertexStream3fATI_dispatch_table_rewrite_ptr, /* glVertexStream3fATI */ + epoxy_glVertexStream3fvATI_dispatch_table_rewrite_ptr, /* glVertexStream3fvATI */ + epoxy_glVertexStream3iATI_dispatch_table_rewrite_ptr, /* glVertexStream3iATI */ + epoxy_glVertexStream3ivATI_dispatch_table_rewrite_ptr, /* glVertexStream3ivATI */ + epoxy_glVertexStream3sATI_dispatch_table_rewrite_ptr, /* glVertexStream3sATI */ + epoxy_glVertexStream3svATI_dispatch_table_rewrite_ptr, /* glVertexStream3svATI */ + epoxy_glVertexStream4dATI_dispatch_table_rewrite_ptr, /* glVertexStream4dATI */ + epoxy_glVertexStream4dvATI_dispatch_table_rewrite_ptr, /* glVertexStream4dvATI */ + epoxy_glVertexStream4fATI_dispatch_table_rewrite_ptr, /* glVertexStream4fATI */ + epoxy_glVertexStream4fvATI_dispatch_table_rewrite_ptr, /* glVertexStream4fvATI */ + epoxy_glVertexStream4iATI_dispatch_table_rewrite_ptr, /* glVertexStream4iATI */ + epoxy_glVertexStream4ivATI_dispatch_table_rewrite_ptr, /* glVertexStream4ivATI */ + epoxy_glVertexStream4sATI_dispatch_table_rewrite_ptr, /* glVertexStream4sATI */ + epoxy_glVertexStream4svATI_dispatch_table_rewrite_ptr, /* glVertexStream4svATI */ + epoxy_glVertexWeightPointerEXT_dispatch_table_rewrite_ptr, /* glVertexWeightPointerEXT */ + epoxy_glVertexWeightfEXT_dispatch_table_rewrite_ptr, /* glVertexWeightfEXT */ + epoxy_glVertexWeightfvEXT_dispatch_table_rewrite_ptr, /* glVertexWeightfvEXT */ + epoxy_glVertexWeighthNV_dispatch_table_rewrite_ptr, /* glVertexWeighthNV */ + epoxy_glVertexWeighthvNV_dispatch_table_rewrite_ptr, /* glVertexWeighthvNV */ + epoxy_glVideoCaptureNV_dispatch_table_rewrite_ptr, /* glVideoCaptureNV */ + epoxy_glVideoCaptureStreamParameterdvNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterdvNV */ + epoxy_glVideoCaptureStreamParameterfvNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterfvNV */ + epoxy_glVideoCaptureStreamParameterivNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterivNV */ + epoxy_glViewport_dispatch_table_rewrite_ptr, /* glViewport */ + epoxy_glViewportArrayv_dispatch_table_rewrite_ptr, /* glViewportArrayv */ + epoxy_glViewportArrayvNV_dispatch_table_rewrite_ptr, /* glViewportArrayvNV */ + epoxy_glViewportIndexedf_dispatch_table_rewrite_ptr, /* glViewportIndexedf */ + epoxy_glViewportIndexedfNV_dispatch_table_rewrite_ptr, /* glViewportIndexedfNV */ + epoxy_glViewportIndexedfv_dispatch_table_rewrite_ptr, /* glViewportIndexedfv */ + epoxy_glViewportIndexedfvNV_dispatch_table_rewrite_ptr, /* glViewportIndexedfvNV */ + epoxy_glWaitSync_dispatch_table_rewrite_ptr, /* glWaitSync */ + epoxy_glWaitSyncAPPLE_dispatch_table_rewrite_ptr, /* glWaitSyncAPPLE */ + epoxy_glWeightPathsNV_dispatch_table_rewrite_ptr, /* glWeightPathsNV */ + epoxy_glWeightPointerARB_dispatch_table_rewrite_ptr, /* glWeightPointerARB */ + epoxy_glWeightPointerOES_dispatch_table_rewrite_ptr, /* glWeightPointerOES */ + epoxy_glWeightbvARB_dispatch_table_rewrite_ptr, /* glWeightbvARB */ + epoxy_glWeightdvARB_dispatch_table_rewrite_ptr, /* glWeightdvARB */ + epoxy_glWeightfvARB_dispatch_table_rewrite_ptr, /* glWeightfvARB */ + epoxy_glWeightivARB_dispatch_table_rewrite_ptr, /* glWeightivARB */ + epoxy_glWeightsvARB_dispatch_table_rewrite_ptr, /* glWeightsvARB */ + epoxy_glWeightubvARB_dispatch_table_rewrite_ptr, /* glWeightubvARB */ + epoxy_glWeightuivARB_dispatch_table_rewrite_ptr, /* glWeightuivARB */ + epoxy_glWeightusvARB_dispatch_table_rewrite_ptr, /* glWeightusvARB */ + epoxy_glWindowPos2d_dispatch_table_rewrite_ptr, /* glWindowPos2d */ + epoxy_glWindowPos2dARB_dispatch_table_rewrite_ptr, /* glWindowPos2dARB */ + epoxy_glWindowPos2dMESA_dispatch_table_rewrite_ptr, /* glWindowPos2dMESA */ + epoxy_glWindowPos2dv_dispatch_table_rewrite_ptr, /* glWindowPos2dv */ + epoxy_glWindowPos2dvARB_dispatch_table_rewrite_ptr, /* glWindowPos2dvARB */ + epoxy_glWindowPos2dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos2dvMESA */ + epoxy_glWindowPos2f_dispatch_table_rewrite_ptr, /* glWindowPos2f */ + epoxy_glWindowPos2fARB_dispatch_table_rewrite_ptr, /* glWindowPos2fARB */ + epoxy_glWindowPos2fMESA_dispatch_table_rewrite_ptr, /* glWindowPos2fMESA */ + epoxy_glWindowPos2fv_dispatch_table_rewrite_ptr, /* glWindowPos2fv */ + epoxy_glWindowPos2fvARB_dispatch_table_rewrite_ptr, /* glWindowPos2fvARB */ + epoxy_glWindowPos2fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos2fvMESA */ + epoxy_glWindowPos2i_dispatch_table_rewrite_ptr, /* glWindowPos2i */ + epoxy_glWindowPos2iARB_dispatch_table_rewrite_ptr, /* glWindowPos2iARB */ + epoxy_glWindowPos2iMESA_dispatch_table_rewrite_ptr, /* glWindowPos2iMESA */ + epoxy_glWindowPos2iv_dispatch_table_rewrite_ptr, /* glWindowPos2iv */ + epoxy_glWindowPos2ivARB_dispatch_table_rewrite_ptr, /* glWindowPos2ivARB */ + epoxy_glWindowPos2ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos2ivMESA */ + epoxy_glWindowPos2s_dispatch_table_rewrite_ptr, /* glWindowPos2s */ + epoxy_glWindowPos2sARB_dispatch_table_rewrite_ptr, /* glWindowPos2sARB */ + epoxy_glWindowPos2sMESA_dispatch_table_rewrite_ptr, /* glWindowPos2sMESA */ + epoxy_glWindowPos2sv_dispatch_table_rewrite_ptr, /* glWindowPos2sv */ + epoxy_glWindowPos2svARB_dispatch_table_rewrite_ptr, /* glWindowPos2svARB */ + epoxy_glWindowPos2svMESA_dispatch_table_rewrite_ptr, /* glWindowPos2svMESA */ + epoxy_glWindowPos3d_dispatch_table_rewrite_ptr, /* glWindowPos3d */ + epoxy_glWindowPos3dARB_dispatch_table_rewrite_ptr, /* glWindowPos3dARB */ + epoxy_glWindowPos3dMESA_dispatch_table_rewrite_ptr, /* glWindowPos3dMESA */ + epoxy_glWindowPos3dv_dispatch_table_rewrite_ptr, /* glWindowPos3dv */ + epoxy_glWindowPos3dvARB_dispatch_table_rewrite_ptr, /* glWindowPos3dvARB */ + epoxy_glWindowPos3dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos3dvMESA */ + epoxy_glWindowPos3f_dispatch_table_rewrite_ptr, /* glWindowPos3f */ + epoxy_glWindowPos3fARB_dispatch_table_rewrite_ptr, /* glWindowPos3fARB */ + epoxy_glWindowPos3fMESA_dispatch_table_rewrite_ptr, /* glWindowPos3fMESA */ + epoxy_glWindowPos3fv_dispatch_table_rewrite_ptr, /* glWindowPos3fv */ + epoxy_glWindowPos3fvARB_dispatch_table_rewrite_ptr, /* glWindowPos3fvARB */ + epoxy_glWindowPos3fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos3fvMESA */ + epoxy_glWindowPos3i_dispatch_table_rewrite_ptr, /* glWindowPos3i */ + epoxy_glWindowPos3iARB_dispatch_table_rewrite_ptr, /* glWindowPos3iARB */ + epoxy_glWindowPos3iMESA_dispatch_table_rewrite_ptr, /* glWindowPos3iMESA */ + epoxy_glWindowPos3iv_dispatch_table_rewrite_ptr, /* glWindowPos3iv */ + epoxy_glWindowPos3ivARB_dispatch_table_rewrite_ptr, /* glWindowPos3ivARB */ + epoxy_glWindowPos3ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos3ivMESA */ + epoxy_glWindowPos3s_dispatch_table_rewrite_ptr, /* glWindowPos3s */ + epoxy_glWindowPos3sARB_dispatch_table_rewrite_ptr, /* glWindowPos3sARB */ + epoxy_glWindowPos3sMESA_dispatch_table_rewrite_ptr, /* glWindowPos3sMESA */ + epoxy_glWindowPos3sv_dispatch_table_rewrite_ptr, /* glWindowPos3sv */ + epoxy_glWindowPos3svARB_dispatch_table_rewrite_ptr, /* glWindowPos3svARB */ + epoxy_glWindowPos3svMESA_dispatch_table_rewrite_ptr, /* glWindowPos3svMESA */ + epoxy_glWindowPos4dMESA_dispatch_table_rewrite_ptr, /* glWindowPos4dMESA */ + epoxy_glWindowPos4dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos4dvMESA */ + epoxy_glWindowPos4fMESA_dispatch_table_rewrite_ptr, /* glWindowPos4fMESA */ + epoxy_glWindowPos4fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos4fvMESA */ + epoxy_glWindowPos4iMESA_dispatch_table_rewrite_ptr, /* glWindowPos4iMESA */ + epoxy_glWindowPos4ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos4ivMESA */ + epoxy_glWindowPos4sMESA_dispatch_table_rewrite_ptr, /* glWindowPos4sMESA */ + epoxy_glWindowPos4svMESA_dispatch_table_rewrite_ptr, /* glWindowPos4svMESA */ + epoxy_glWriteMaskEXT_dispatch_table_rewrite_ptr, /* glWriteMaskEXT */ +}; + +uint32_t gl_tls_index; +uint32_t gl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(gl_tls_index); +} + +void +gl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +gl_switch_to_dispatch_table(void) +{ + epoxy_glAccum = epoxy_glAccum_dispatch_table_thunk; + epoxy_glAccumxOES = epoxy_glAccumxOES_dispatch_table_thunk; + epoxy_glActiveProgramEXT = epoxy_glActiveProgramEXT_dispatch_table_thunk; + epoxy_glActiveShaderProgram = epoxy_glActiveShaderProgram_dispatch_table_thunk; + epoxy_glActiveShaderProgramEXT = epoxy_glActiveShaderProgramEXT_dispatch_table_thunk; + epoxy_glActiveStencilFaceEXT = epoxy_glActiveStencilFaceEXT_dispatch_table_thunk; + epoxy_glActiveTexture = epoxy_glActiveTexture_dispatch_table_thunk; + epoxy_glActiveTextureARB = epoxy_glActiveTextureARB_dispatch_table_thunk; + epoxy_glActiveVaryingNV = epoxy_glActiveVaryingNV_dispatch_table_thunk; + epoxy_glAlphaFragmentOp1ATI = epoxy_glAlphaFragmentOp1ATI_dispatch_table_thunk; + epoxy_glAlphaFragmentOp2ATI = epoxy_glAlphaFragmentOp2ATI_dispatch_table_thunk; + epoxy_glAlphaFragmentOp3ATI = epoxy_glAlphaFragmentOp3ATI_dispatch_table_thunk; + epoxy_glAlphaFunc = epoxy_glAlphaFunc_dispatch_table_thunk; + epoxy_glAlphaFuncQCOM = epoxy_glAlphaFuncQCOM_dispatch_table_thunk; + epoxy_glAlphaFuncx = epoxy_glAlphaFuncx_dispatch_table_thunk; + epoxy_glAlphaFuncxOES = epoxy_glAlphaFuncxOES_dispatch_table_thunk; + epoxy_glApplyFramebufferAttachmentCMAAINTEL = epoxy_glApplyFramebufferAttachmentCMAAINTEL_dispatch_table_thunk; + epoxy_glApplyTextureEXT = epoxy_glApplyTextureEXT_dispatch_table_thunk; + epoxy_glAreProgramsResidentNV = epoxy_glAreProgramsResidentNV_dispatch_table_thunk; + epoxy_glAreTexturesResident = epoxy_glAreTexturesResident_dispatch_table_thunk; + epoxy_glAreTexturesResidentEXT = epoxy_glAreTexturesResidentEXT_dispatch_table_thunk; + epoxy_glArrayElement = epoxy_glArrayElement_dispatch_table_thunk; + epoxy_glArrayElementEXT = epoxy_glArrayElementEXT_dispatch_table_thunk; + epoxy_glArrayObjectATI = epoxy_glArrayObjectATI_dispatch_table_thunk; + epoxy_glAsyncMarkerSGIX = epoxy_glAsyncMarkerSGIX_dispatch_table_thunk; + epoxy_glAttachObjectARB = epoxy_glAttachObjectARB_dispatch_table_thunk; + epoxy_glAttachShader = epoxy_glAttachShader_dispatch_table_thunk; + epoxy_glBegin_unwrapped = epoxy_glBegin_unwrapped_dispatch_table_thunk; + epoxy_glBeginConditionalRender = epoxy_glBeginConditionalRender_dispatch_table_thunk; + epoxy_glBeginConditionalRenderNV = epoxy_glBeginConditionalRenderNV_dispatch_table_thunk; + epoxy_glBeginConditionalRenderNVX = epoxy_glBeginConditionalRenderNVX_dispatch_table_thunk; + epoxy_glBeginFragmentShaderATI = epoxy_glBeginFragmentShaderATI_dispatch_table_thunk; + epoxy_glBeginOcclusionQueryNV = epoxy_glBeginOcclusionQueryNV_dispatch_table_thunk; + epoxy_glBeginPerfMonitorAMD = epoxy_glBeginPerfMonitorAMD_dispatch_table_thunk; + epoxy_glBeginPerfQueryINTEL = epoxy_glBeginPerfQueryINTEL_dispatch_table_thunk; + epoxy_glBeginQuery = epoxy_glBeginQuery_dispatch_table_thunk; + epoxy_glBeginQueryARB = epoxy_glBeginQueryARB_dispatch_table_thunk; + epoxy_glBeginQueryEXT = epoxy_glBeginQueryEXT_dispatch_table_thunk; + epoxy_glBeginQueryIndexed = epoxy_glBeginQueryIndexed_dispatch_table_thunk; + epoxy_glBeginTransformFeedback = epoxy_glBeginTransformFeedback_dispatch_table_thunk; + epoxy_glBeginTransformFeedbackEXT = epoxy_glBeginTransformFeedbackEXT_dispatch_table_thunk; + epoxy_glBeginTransformFeedbackNV = epoxy_glBeginTransformFeedbackNV_dispatch_table_thunk; + epoxy_glBeginVertexShaderEXT = epoxy_glBeginVertexShaderEXT_dispatch_table_thunk; + epoxy_glBeginVideoCaptureNV = epoxy_glBeginVideoCaptureNV_dispatch_table_thunk; + epoxy_glBindAttribLocation = epoxy_glBindAttribLocation_dispatch_table_thunk; + epoxy_glBindAttribLocationARB = epoxy_glBindAttribLocationARB_dispatch_table_thunk; + epoxy_glBindBuffer = epoxy_glBindBuffer_dispatch_table_thunk; + epoxy_glBindBufferARB = epoxy_glBindBufferARB_dispatch_table_thunk; + epoxy_glBindBufferBase = epoxy_glBindBufferBase_dispatch_table_thunk; + epoxy_glBindBufferBaseEXT = epoxy_glBindBufferBaseEXT_dispatch_table_thunk; + epoxy_glBindBufferBaseNV = epoxy_glBindBufferBaseNV_dispatch_table_thunk; + epoxy_glBindBufferOffsetEXT = epoxy_glBindBufferOffsetEXT_dispatch_table_thunk; + epoxy_glBindBufferOffsetNV = epoxy_glBindBufferOffsetNV_dispatch_table_thunk; + epoxy_glBindBufferRange = epoxy_glBindBufferRange_dispatch_table_thunk; + epoxy_glBindBufferRangeEXT = epoxy_glBindBufferRangeEXT_dispatch_table_thunk; + epoxy_glBindBufferRangeNV = epoxy_glBindBufferRangeNV_dispatch_table_thunk; + epoxy_glBindBuffersBase = epoxy_glBindBuffersBase_dispatch_table_thunk; + epoxy_glBindBuffersRange = epoxy_glBindBuffersRange_dispatch_table_thunk; + epoxy_glBindFragDataLocation = epoxy_glBindFragDataLocation_dispatch_table_thunk; + epoxy_glBindFragDataLocationEXT = epoxy_glBindFragDataLocationEXT_dispatch_table_thunk; + epoxy_glBindFragDataLocationIndexed = epoxy_glBindFragDataLocationIndexed_dispatch_table_thunk; + epoxy_glBindFragDataLocationIndexedEXT = epoxy_glBindFragDataLocationIndexedEXT_dispatch_table_thunk; + epoxy_glBindFragmentShaderATI = epoxy_glBindFragmentShaderATI_dispatch_table_thunk; + epoxy_glBindFramebuffer = epoxy_glBindFramebuffer_dispatch_table_thunk; + epoxy_glBindFramebufferEXT = epoxy_glBindFramebufferEXT_dispatch_table_thunk; + epoxy_glBindFramebufferOES = epoxy_glBindFramebufferOES_dispatch_table_thunk; + epoxy_glBindImageTexture = epoxy_glBindImageTexture_dispatch_table_thunk; + epoxy_glBindImageTextureEXT = epoxy_glBindImageTextureEXT_dispatch_table_thunk; + epoxy_glBindImageTextures = epoxy_glBindImageTextures_dispatch_table_thunk; + epoxy_glBindLightParameterEXT = epoxy_glBindLightParameterEXT_dispatch_table_thunk; + epoxy_glBindMaterialParameterEXT = epoxy_glBindMaterialParameterEXT_dispatch_table_thunk; + epoxy_glBindMultiTextureEXT = epoxy_glBindMultiTextureEXT_dispatch_table_thunk; + epoxy_glBindParameterEXT = epoxy_glBindParameterEXT_dispatch_table_thunk; + epoxy_glBindProgramARB = epoxy_glBindProgramARB_dispatch_table_thunk; + epoxy_glBindProgramNV = epoxy_glBindProgramNV_dispatch_table_thunk; + epoxy_glBindProgramPipeline = epoxy_glBindProgramPipeline_dispatch_table_thunk; + epoxy_glBindProgramPipelineEXT = epoxy_glBindProgramPipelineEXT_dispatch_table_thunk; + epoxy_glBindRenderbuffer = epoxy_glBindRenderbuffer_dispatch_table_thunk; + epoxy_glBindRenderbufferEXT = epoxy_glBindRenderbufferEXT_dispatch_table_thunk; + epoxy_glBindRenderbufferOES = epoxy_glBindRenderbufferOES_dispatch_table_thunk; + epoxy_glBindSampler = epoxy_glBindSampler_dispatch_table_thunk; + epoxy_glBindSamplers = epoxy_glBindSamplers_dispatch_table_thunk; + epoxy_glBindTexGenParameterEXT = epoxy_glBindTexGenParameterEXT_dispatch_table_thunk; + epoxy_glBindTexture = epoxy_glBindTexture_dispatch_table_thunk; + epoxy_glBindTextureEXT = epoxy_glBindTextureEXT_dispatch_table_thunk; + epoxy_glBindTextureUnit = epoxy_glBindTextureUnit_dispatch_table_thunk; + epoxy_glBindTextureUnitParameterEXT = epoxy_glBindTextureUnitParameterEXT_dispatch_table_thunk; + epoxy_glBindTextures = epoxy_glBindTextures_dispatch_table_thunk; + epoxy_glBindTransformFeedback = epoxy_glBindTransformFeedback_dispatch_table_thunk; + epoxy_glBindTransformFeedbackNV = epoxy_glBindTransformFeedbackNV_dispatch_table_thunk; + epoxy_glBindVertexArray = epoxy_glBindVertexArray_dispatch_table_thunk; + epoxy_glBindVertexArrayAPPLE = epoxy_glBindVertexArrayAPPLE_dispatch_table_thunk; + epoxy_glBindVertexArrayOES = epoxy_glBindVertexArrayOES_dispatch_table_thunk; + epoxy_glBindVertexBuffer = epoxy_glBindVertexBuffer_dispatch_table_thunk; + epoxy_glBindVertexBuffers = epoxy_glBindVertexBuffers_dispatch_table_thunk; + epoxy_glBindVertexShaderEXT = epoxy_glBindVertexShaderEXT_dispatch_table_thunk; + epoxy_glBindVideoCaptureStreamBufferNV = epoxy_glBindVideoCaptureStreamBufferNV_dispatch_table_thunk; + epoxy_glBindVideoCaptureStreamTextureNV = epoxy_glBindVideoCaptureStreamTextureNV_dispatch_table_thunk; + epoxy_glBinormal3bEXT = epoxy_glBinormal3bEXT_dispatch_table_thunk; + epoxy_glBinormal3bvEXT = epoxy_glBinormal3bvEXT_dispatch_table_thunk; + epoxy_glBinormal3dEXT = epoxy_glBinormal3dEXT_dispatch_table_thunk; + epoxy_glBinormal3dvEXT = epoxy_glBinormal3dvEXT_dispatch_table_thunk; + epoxy_glBinormal3fEXT = epoxy_glBinormal3fEXT_dispatch_table_thunk; + epoxy_glBinormal3fvEXT = epoxy_glBinormal3fvEXT_dispatch_table_thunk; + epoxy_glBinormal3iEXT = epoxy_glBinormal3iEXT_dispatch_table_thunk; + epoxy_glBinormal3ivEXT = epoxy_glBinormal3ivEXT_dispatch_table_thunk; + epoxy_glBinormal3sEXT = epoxy_glBinormal3sEXT_dispatch_table_thunk; + epoxy_glBinormal3svEXT = epoxy_glBinormal3svEXT_dispatch_table_thunk; + epoxy_glBinormalPointerEXT = epoxy_glBinormalPointerEXT_dispatch_table_thunk; + epoxy_glBitmap = epoxy_glBitmap_dispatch_table_thunk; + epoxy_glBitmapxOES = epoxy_glBitmapxOES_dispatch_table_thunk; + epoxy_glBlendBarrier = epoxy_glBlendBarrier_dispatch_table_thunk; + epoxy_glBlendBarrierKHR = epoxy_glBlendBarrierKHR_dispatch_table_thunk; + epoxy_glBlendBarrierNV = epoxy_glBlendBarrierNV_dispatch_table_thunk; + epoxy_glBlendColor = epoxy_glBlendColor_dispatch_table_thunk; + epoxy_glBlendColorEXT = epoxy_glBlendColorEXT_dispatch_table_thunk; + epoxy_glBlendColorxOES = epoxy_glBlendColorxOES_dispatch_table_thunk; + epoxy_glBlendEquation = epoxy_glBlendEquation_dispatch_table_thunk; + epoxy_glBlendEquationEXT = epoxy_glBlendEquationEXT_dispatch_table_thunk; + epoxy_glBlendEquationIndexedAMD = epoxy_glBlendEquationIndexedAMD_dispatch_table_thunk; + epoxy_glBlendEquationOES = epoxy_glBlendEquationOES_dispatch_table_thunk; + epoxy_glBlendEquationSeparate = epoxy_glBlendEquationSeparate_dispatch_table_thunk; + epoxy_glBlendEquationSeparateEXT = epoxy_glBlendEquationSeparateEXT_dispatch_table_thunk; + epoxy_glBlendEquationSeparateIndexedAMD = epoxy_glBlendEquationSeparateIndexedAMD_dispatch_table_thunk; + epoxy_glBlendEquationSeparateOES = epoxy_glBlendEquationSeparateOES_dispatch_table_thunk; + epoxy_glBlendEquationSeparatei = epoxy_glBlendEquationSeparatei_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiARB = epoxy_glBlendEquationSeparateiARB_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiEXT = epoxy_glBlendEquationSeparateiEXT_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiOES = epoxy_glBlendEquationSeparateiOES_dispatch_table_thunk; + epoxy_glBlendEquationi = epoxy_glBlendEquationi_dispatch_table_thunk; + epoxy_glBlendEquationiARB = epoxy_glBlendEquationiARB_dispatch_table_thunk; + epoxy_glBlendEquationiEXT = epoxy_glBlendEquationiEXT_dispatch_table_thunk; + epoxy_glBlendEquationiOES = epoxy_glBlendEquationiOES_dispatch_table_thunk; + epoxy_glBlendFunc = epoxy_glBlendFunc_dispatch_table_thunk; + epoxy_glBlendFuncIndexedAMD = epoxy_glBlendFuncIndexedAMD_dispatch_table_thunk; + epoxy_glBlendFuncSeparate = epoxy_glBlendFuncSeparate_dispatch_table_thunk; + epoxy_glBlendFuncSeparateEXT = epoxy_glBlendFuncSeparateEXT_dispatch_table_thunk; + epoxy_glBlendFuncSeparateINGR = epoxy_glBlendFuncSeparateINGR_dispatch_table_thunk; + epoxy_glBlendFuncSeparateIndexedAMD = epoxy_glBlendFuncSeparateIndexedAMD_dispatch_table_thunk; + epoxy_glBlendFuncSeparateOES = epoxy_glBlendFuncSeparateOES_dispatch_table_thunk; + epoxy_glBlendFuncSeparatei = epoxy_glBlendFuncSeparatei_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiARB = epoxy_glBlendFuncSeparateiARB_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiEXT = epoxy_glBlendFuncSeparateiEXT_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiOES = epoxy_glBlendFuncSeparateiOES_dispatch_table_thunk; + epoxy_glBlendFunci = epoxy_glBlendFunci_dispatch_table_thunk; + epoxy_glBlendFunciARB = epoxy_glBlendFunciARB_dispatch_table_thunk; + epoxy_glBlendFunciEXT = epoxy_glBlendFunciEXT_dispatch_table_thunk; + epoxy_glBlendFunciOES = epoxy_glBlendFunciOES_dispatch_table_thunk; + epoxy_glBlendParameteriNV = epoxy_glBlendParameteriNV_dispatch_table_thunk; + epoxy_glBlitFramebuffer = epoxy_glBlitFramebuffer_dispatch_table_thunk; + epoxy_glBlitFramebufferANGLE = epoxy_glBlitFramebufferANGLE_dispatch_table_thunk; + epoxy_glBlitFramebufferEXT = epoxy_glBlitFramebufferEXT_dispatch_table_thunk; + epoxy_glBlitFramebufferNV = epoxy_glBlitFramebufferNV_dispatch_table_thunk; + epoxy_glBlitNamedFramebuffer = epoxy_glBlitNamedFramebuffer_dispatch_table_thunk; + epoxy_glBufferAddressRangeNV = epoxy_glBufferAddressRangeNV_dispatch_table_thunk; + epoxy_glBufferData = epoxy_glBufferData_dispatch_table_thunk; + epoxy_glBufferDataARB = epoxy_glBufferDataARB_dispatch_table_thunk; + epoxy_glBufferPageCommitmentARB = epoxy_glBufferPageCommitmentARB_dispatch_table_thunk; + epoxy_glBufferParameteriAPPLE = epoxy_glBufferParameteriAPPLE_dispatch_table_thunk; + epoxy_glBufferStorage = epoxy_glBufferStorage_dispatch_table_thunk; + epoxy_glBufferStorageEXT = epoxy_glBufferStorageEXT_dispatch_table_thunk; + epoxy_glBufferSubData = epoxy_glBufferSubData_dispatch_table_thunk; + epoxy_glBufferSubDataARB = epoxy_glBufferSubDataARB_dispatch_table_thunk; + epoxy_glCallCommandListNV = epoxy_glCallCommandListNV_dispatch_table_thunk; + epoxy_glCallList = epoxy_glCallList_dispatch_table_thunk; + epoxy_glCallLists = epoxy_glCallLists_dispatch_table_thunk; + epoxy_glCheckFramebufferStatus = epoxy_glCheckFramebufferStatus_dispatch_table_thunk; + epoxy_glCheckFramebufferStatusEXT = epoxy_glCheckFramebufferStatusEXT_dispatch_table_thunk; + epoxy_glCheckFramebufferStatusOES = epoxy_glCheckFramebufferStatusOES_dispatch_table_thunk; + epoxy_glCheckNamedFramebufferStatus = epoxy_glCheckNamedFramebufferStatus_dispatch_table_thunk; + epoxy_glCheckNamedFramebufferStatusEXT = epoxy_glCheckNamedFramebufferStatusEXT_dispatch_table_thunk; + epoxy_glClampColor = epoxy_glClampColor_dispatch_table_thunk; + epoxy_glClampColorARB = epoxy_glClampColorARB_dispatch_table_thunk; + epoxy_glClear = epoxy_glClear_dispatch_table_thunk; + epoxy_glClearAccum = epoxy_glClearAccum_dispatch_table_thunk; + epoxy_glClearAccumxOES = epoxy_glClearAccumxOES_dispatch_table_thunk; + epoxy_glClearBufferData = epoxy_glClearBufferData_dispatch_table_thunk; + epoxy_glClearBufferSubData = epoxy_glClearBufferSubData_dispatch_table_thunk; + epoxy_glClearBufferfi = epoxy_glClearBufferfi_dispatch_table_thunk; + epoxy_glClearBufferfv = epoxy_glClearBufferfv_dispatch_table_thunk; + epoxy_glClearBufferiv = epoxy_glClearBufferiv_dispatch_table_thunk; + epoxy_glClearBufferuiv = epoxy_glClearBufferuiv_dispatch_table_thunk; + epoxy_glClearColor = epoxy_glClearColor_dispatch_table_thunk; + epoxy_glClearColorIiEXT = epoxy_glClearColorIiEXT_dispatch_table_thunk; + epoxy_glClearColorIuiEXT = epoxy_glClearColorIuiEXT_dispatch_table_thunk; + epoxy_glClearColorx = epoxy_glClearColorx_dispatch_table_thunk; + epoxy_glClearColorxOES = epoxy_glClearColorxOES_dispatch_table_thunk; + epoxy_glClearDepth = epoxy_glClearDepth_dispatch_table_thunk; + epoxy_glClearDepthdNV = epoxy_glClearDepthdNV_dispatch_table_thunk; + epoxy_glClearDepthf = epoxy_glClearDepthf_dispatch_table_thunk; + epoxy_glClearDepthfOES = epoxy_glClearDepthfOES_dispatch_table_thunk; + epoxy_glClearDepthx = epoxy_glClearDepthx_dispatch_table_thunk; + epoxy_glClearDepthxOES = epoxy_glClearDepthxOES_dispatch_table_thunk; + epoxy_glClearIndex = epoxy_glClearIndex_dispatch_table_thunk; + epoxy_glClearNamedBufferData = epoxy_glClearNamedBufferData_dispatch_table_thunk; + epoxy_glClearNamedBufferDataEXT = epoxy_glClearNamedBufferDataEXT_dispatch_table_thunk; + epoxy_glClearNamedBufferSubData = epoxy_glClearNamedBufferSubData_dispatch_table_thunk; + epoxy_glClearNamedBufferSubDataEXT = epoxy_glClearNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glClearNamedFramebufferfi = epoxy_glClearNamedFramebufferfi_dispatch_table_thunk; + epoxy_glClearNamedFramebufferfv = epoxy_glClearNamedFramebufferfv_dispatch_table_thunk; + epoxy_glClearNamedFramebufferiv = epoxy_glClearNamedFramebufferiv_dispatch_table_thunk; + epoxy_glClearNamedFramebufferuiv = epoxy_glClearNamedFramebufferuiv_dispatch_table_thunk; + epoxy_glClearStencil = epoxy_glClearStencil_dispatch_table_thunk; + epoxy_glClearTexImage = epoxy_glClearTexImage_dispatch_table_thunk; + epoxy_glClearTexSubImage = epoxy_glClearTexSubImage_dispatch_table_thunk; + epoxy_glClientActiveTexture = epoxy_glClientActiveTexture_dispatch_table_thunk; + epoxy_glClientActiveTextureARB = epoxy_glClientActiveTextureARB_dispatch_table_thunk; + epoxy_glClientActiveVertexStreamATI = epoxy_glClientActiveVertexStreamATI_dispatch_table_thunk; + epoxy_glClientAttribDefaultEXT = epoxy_glClientAttribDefaultEXT_dispatch_table_thunk; + epoxy_glClientWaitSync = epoxy_glClientWaitSync_dispatch_table_thunk; + epoxy_glClientWaitSyncAPPLE = epoxy_glClientWaitSyncAPPLE_dispatch_table_thunk; + epoxy_glClipControl = epoxy_glClipControl_dispatch_table_thunk; + epoxy_glClipPlane = epoxy_glClipPlane_dispatch_table_thunk; + epoxy_glClipPlanef = epoxy_glClipPlanef_dispatch_table_thunk; + epoxy_glClipPlanefIMG = epoxy_glClipPlanefIMG_dispatch_table_thunk; + epoxy_glClipPlanefOES = epoxy_glClipPlanefOES_dispatch_table_thunk; + epoxy_glClipPlanex = epoxy_glClipPlanex_dispatch_table_thunk; + epoxy_glClipPlanexIMG = epoxy_glClipPlanexIMG_dispatch_table_thunk; + epoxy_glClipPlanexOES = epoxy_glClipPlanexOES_dispatch_table_thunk; + epoxy_glColor3b = epoxy_glColor3b_dispatch_table_thunk; + epoxy_glColor3bv = epoxy_glColor3bv_dispatch_table_thunk; + epoxy_glColor3d = epoxy_glColor3d_dispatch_table_thunk; + epoxy_glColor3dv = epoxy_glColor3dv_dispatch_table_thunk; + epoxy_glColor3f = epoxy_glColor3f_dispatch_table_thunk; + epoxy_glColor3fVertex3fSUN = epoxy_glColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glColor3fVertex3fvSUN = epoxy_glColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor3fv = epoxy_glColor3fv_dispatch_table_thunk; + epoxy_glColor3hNV = epoxy_glColor3hNV_dispatch_table_thunk; + epoxy_glColor3hvNV = epoxy_glColor3hvNV_dispatch_table_thunk; + epoxy_glColor3i = epoxy_glColor3i_dispatch_table_thunk; + epoxy_glColor3iv = epoxy_glColor3iv_dispatch_table_thunk; + epoxy_glColor3s = epoxy_glColor3s_dispatch_table_thunk; + epoxy_glColor3sv = epoxy_glColor3sv_dispatch_table_thunk; + epoxy_glColor3ub = epoxy_glColor3ub_dispatch_table_thunk; + epoxy_glColor3ubv = epoxy_glColor3ubv_dispatch_table_thunk; + epoxy_glColor3ui = epoxy_glColor3ui_dispatch_table_thunk; + epoxy_glColor3uiv = epoxy_glColor3uiv_dispatch_table_thunk; + epoxy_glColor3us = epoxy_glColor3us_dispatch_table_thunk; + epoxy_glColor3usv = epoxy_glColor3usv_dispatch_table_thunk; + epoxy_glColor3xOES = epoxy_glColor3xOES_dispatch_table_thunk; + epoxy_glColor3xvOES = epoxy_glColor3xvOES_dispatch_table_thunk; + epoxy_glColor4b = epoxy_glColor4b_dispatch_table_thunk; + epoxy_glColor4bv = epoxy_glColor4bv_dispatch_table_thunk; + epoxy_glColor4d = epoxy_glColor4d_dispatch_table_thunk; + epoxy_glColor4dv = epoxy_glColor4dv_dispatch_table_thunk; + epoxy_glColor4f = epoxy_glColor4f_dispatch_table_thunk; + epoxy_glColor4fNormal3fVertex3fSUN = epoxy_glColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glColor4fNormal3fVertex3fvSUN = epoxy_glColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor4fv = epoxy_glColor4fv_dispatch_table_thunk; + epoxy_glColor4hNV = epoxy_glColor4hNV_dispatch_table_thunk; + epoxy_glColor4hvNV = epoxy_glColor4hvNV_dispatch_table_thunk; + epoxy_glColor4i = epoxy_glColor4i_dispatch_table_thunk; + epoxy_glColor4iv = epoxy_glColor4iv_dispatch_table_thunk; + epoxy_glColor4s = epoxy_glColor4s_dispatch_table_thunk; + epoxy_glColor4sv = epoxy_glColor4sv_dispatch_table_thunk; + epoxy_glColor4ub = epoxy_glColor4ub_dispatch_table_thunk; + epoxy_glColor4ubVertex2fSUN = epoxy_glColor4ubVertex2fSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex2fvSUN = epoxy_glColor4ubVertex2fvSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex3fSUN = epoxy_glColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex3fvSUN = epoxy_glColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor4ubv = epoxy_glColor4ubv_dispatch_table_thunk; + epoxy_glColor4ui = epoxy_glColor4ui_dispatch_table_thunk; + epoxy_glColor4uiv = epoxy_glColor4uiv_dispatch_table_thunk; + epoxy_glColor4us = epoxy_glColor4us_dispatch_table_thunk; + epoxy_glColor4usv = epoxy_glColor4usv_dispatch_table_thunk; + epoxy_glColor4x = epoxy_glColor4x_dispatch_table_thunk; + epoxy_glColor4xOES = epoxy_glColor4xOES_dispatch_table_thunk; + epoxy_glColor4xvOES = epoxy_glColor4xvOES_dispatch_table_thunk; + epoxy_glColorFormatNV = epoxy_glColorFormatNV_dispatch_table_thunk; + epoxy_glColorFragmentOp1ATI = epoxy_glColorFragmentOp1ATI_dispatch_table_thunk; + epoxy_glColorFragmentOp2ATI = epoxy_glColorFragmentOp2ATI_dispatch_table_thunk; + epoxy_glColorFragmentOp3ATI = epoxy_glColorFragmentOp3ATI_dispatch_table_thunk; + epoxy_glColorMask = epoxy_glColorMask_dispatch_table_thunk; + epoxy_glColorMaskIndexedEXT = epoxy_glColorMaskIndexedEXT_dispatch_table_thunk; + epoxy_glColorMaski = epoxy_glColorMaski_dispatch_table_thunk; + epoxy_glColorMaskiEXT = epoxy_glColorMaskiEXT_dispatch_table_thunk; + epoxy_glColorMaskiOES = epoxy_glColorMaskiOES_dispatch_table_thunk; + epoxy_glColorMaterial = epoxy_glColorMaterial_dispatch_table_thunk; + epoxy_glColorP3ui = epoxy_glColorP3ui_dispatch_table_thunk; + epoxy_glColorP3uiv = epoxy_glColorP3uiv_dispatch_table_thunk; + epoxy_glColorP4ui = epoxy_glColorP4ui_dispatch_table_thunk; + epoxy_glColorP4uiv = epoxy_glColorP4uiv_dispatch_table_thunk; + epoxy_glColorPointer = epoxy_glColorPointer_dispatch_table_thunk; + epoxy_glColorPointerEXT = epoxy_glColorPointerEXT_dispatch_table_thunk; + epoxy_glColorPointerListIBM = epoxy_glColorPointerListIBM_dispatch_table_thunk; + epoxy_glColorPointervINTEL = epoxy_glColorPointervINTEL_dispatch_table_thunk; + epoxy_glColorSubTable = epoxy_glColorSubTable_dispatch_table_thunk; + epoxy_glColorSubTableEXT = epoxy_glColorSubTableEXT_dispatch_table_thunk; + epoxy_glColorTable = epoxy_glColorTable_dispatch_table_thunk; + epoxy_glColorTableEXT = epoxy_glColorTableEXT_dispatch_table_thunk; + epoxy_glColorTableParameterfv = epoxy_glColorTableParameterfv_dispatch_table_thunk; + epoxy_glColorTableParameterfvSGI = epoxy_glColorTableParameterfvSGI_dispatch_table_thunk; + epoxy_glColorTableParameteriv = epoxy_glColorTableParameteriv_dispatch_table_thunk; + epoxy_glColorTableParameterivSGI = epoxy_glColorTableParameterivSGI_dispatch_table_thunk; + epoxy_glColorTableSGI = epoxy_glColorTableSGI_dispatch_table_thunk; + epoxy_glCombinerInputNV = epoxy_glCombinerInputNV_dispatch_table_thunk; + epoxy_glCombinerOutputNV = epoxy_glCombinerOutputNV_dispatch_table_thunk; + epoxy_glCombinerParameterfNV = epoxy_glCombinerParameterfNV_dispatch_table_thunk; + epoxy_glCombinerParameterfvNV = epoxy_glCombinerParameterfvNV_dispatch_table_thunk; + epoxy_glCombinerParameteriNV = epoxy_glCombinerParameteriNV_dispatch_table_thunk; + epoxy_glCombinerParameterivNV = epoxy_glCombinerParameterivNV_dispatch_table_thunk; + epoxy_glCombinerStageParameterfvNV = epoxy_glCombinerStageParameterfvNV_dispatch_table_thunk; + epoxy_glCommandListSegmentsNV = epoxy_glCommandListSegmentsNV_dispatch_table_thunk; + epoxy_glCompileCommandListNV = epoxy_glCompileCommandListNV_dispatch_table_thunk; + epoxy_glCompileShader = epoxy_glCompileShader_dispatch_table_thunk; + epoxy_glCompileShaderARB = epoxy_glCompileShaderARB_dispatch_table_thunk; + epoxy_glCompileShaderIncludeARB = epoxy_glCompileShaderIncludeARB_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage1DEXT = epoxy_glCompressedMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage2DEXT = epoxy_glCompressedMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage3DEXT = epoxy_glCompressedMultiTexImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage1DEXT = epoxy_glCompressedMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage2DEXT = epoxy_glCompressedMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage3DEXT = epoxy_glCompressedMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedTexImage1D = epoxy_glCompressedTexImage1D_dispatch_table_thunk; + epoxy_glCompressedTexImage1DARB = epoxy_glCompressedTexImage1DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage2D = epoxy_glCompressedTexImage2D_dispatch_table_thunk; + epoxy_glCompressedTexImage2DARB = epoxy_glCompressedTexImage2DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage3D = epoxy_glCompressedTexImage3D_dispatch_table_thunk; + epoxy_glCompressedTexImage3DARB = epoxy_glCompressedTexImage3DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage3DOES = epoxy_glCompressedTexImage3DOES_dispatch_table_thunk; + epoxy_glCompressedTexSubImage1D = epoxy_glCompressedTexSubImage1D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage1DARB = epoxy_glCompressedTexSubImage1DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage2D = epoxy_glCompressedTexSubImage2D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage2DARB = epoxy_glCompressedTexSubImage2DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3D = epoxy_glCompressedTexSubImage3D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3DARB = epoxy_glCompressedTexSubImage3DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3DOES = epoxy_glCompressedTexSubImage3DOES_dispatch_table_thunk; + epoxy_glCompressedTextureImage1DEXT = epoxy_glCompressedTextureImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureImage2DEXT = epoxy_glCompressedTextureImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureImage3DEXT = epoxy_glCompressedTextureImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage1D = epoxy_glCompressedTextureSubImage1D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage1DEXT = epoxy_glCompressedTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage2D = epoxy_glCompressedTextureSubImage2D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage2DEXT = epoxy_glCompressedTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage3D = epoxy_glCompressedTextureSubImage3D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage3DEXT = epoxy_glCompressedTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glConservativeRasterParameterfNV = epoxy_glConservativeRasterParameterfNV_dispatch_table_thunk; + epoxy_glConvolutionFilter1D = epoxy_glConvolutionFilter1D_dispatch_table_thunk; + epoxy_glConvolutionFilter1DEXT = epoxy_glConvolutionFilter1DEXT_dispatch_table_thunk; + epoxy_glConvolutionFilter2D = epoxy_glConvolutionFilter2D_dispatch_table_thunk; + epoxy_glConvolutionFilter2DEXT = epoxy_glConvolutionFilter2DEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterf = epoxy_glConvolutionParameterf_dispatch_table_thunk; + epoxy_glConvolutionParameterfEXT = epoxy_glConvolutionParameterfEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterfv = epoxy_glConvolutionParameterfv_dispatch_table_thunk; + epoxy_glConvolutionParameterfvEXT = epoxy_glConvolutionParameterfvEXT_dispatch_table_thunk; + epoxy_glConvolutionParameteri = epoxy_glConvolutionParameteri_dispatch_table_thunk; + epoxy_glConvolutionParameteriEXT = epoxy_glConvolutionParameteriEXT_dispatch_table_thunk; + epoxy_glConvolutionParameteriv = epoxy_glConvolutionParameteriv_dispatch_table_thunk; + epoxy_glConvolutionParameterivEXT = epoxy_glConvolutionParameterivEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterxOES = epoxy_glConvolutionParameterxOES_dispatch_table_thunk; + epoxy_glConvolutionParameterxvOES = epoxy_glConvolutionParameterxvOES_dispatch_table_thunk; + epoxy_glCopyBufferSubData = epoxy_glCopyBufferSubData_dispatch_table_thunk; + epoxy_glCopyBufferSubDataNV = epoxy_glCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glCopyColorSubTable = epoxy_glCopyColorSubTable_dispatch_table_thunk; + epoxy_glCopyColorSubTableEXT = epoxy_glCopyColorSubTableEXT_dispatch_table_thunk; + epoxy_glCopyColorTable = epoxy_glCopyColorTable_dispatch_table_thunk; + epoxy_glCopyColorTableSGI = epoxy_glCopyColorTableSGI_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter1D = epoxy_glCopyConvolutionFilter1D_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter1DEXT = epoxy_glCopyConvolutionFilter1DEXT_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter2D = epoxy_glCopyConvolutionFilter2D_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter2DEXT = epoxy_glCopyConvolutionFilter2DEXT_dispatch_table_thunk; + epoxy_glCopyImageSubData = epoxy_glCopyImageSubData_dispatch_table_thunk; + epoxy_glCopyImageSubDataEXT = epoxy_glCopyImageSubDataEXT_dispatch_table_thunk; + epoxy_glCopyImageSubDataNV = epoxy_glCopyImageSubDataNV_dispatch_table_thunk; + epoxy_glCopyImageSubDataOES = epoxy_glCopyImageSubDataOES_dispatch_table_thunk; + epoxy_glCopyMultiTexImage1DEXT = epoxy_glCopyMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexImage2DEXT = epoxy_glCopyMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage1DEXT = epoxy_glCopyMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage2DEXT = epoxy_glCopyMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage3DEXT = epoxy_glCopyMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCopyNamedBufferSubData = epoxy_glCopyNamedBufferSubData_dispatch_table_thunk; + epoxy_glCopyPathNV = epoxy_glCopyPathNV_dispatch_table_thunk; + epoxy_glCopyPixels = epoxy_glCopyPixels_dispatch_table_thunk; + epoxy_glCopyTexImage1D = epoxy_glCopyTexImage1D_dispatch_table_thunk; + epoxy_glCopyTexImage1DEXT = epoxy_glCopyTexImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTexImage2D = epoxy_glCopyTexImage2D_dispatch_table_thunk; + epoxy_glCopyTexImage2DEXT = epoxy_glCopyTexImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage1D = epoxy_glCopyTexSubImage1D_dispatch_table_thunk; + epoxy_glCopyTexSubImage1DEXT = epoxy_glCopyTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage2D = epoxy_glCopyTexSubImage2D_dispatch_table_thunk; + epoxy_glCopyTexSubImage2DEXT = epoxy_glCopyTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage3D = epoxy_glCopyTexSubImage3D_dispatch_table_thunk; + epoxy_glCopyTexSubImage3DEXT = epoxy_glCopyTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage3DOES = epoxy_glCopyTexSubImage3DOES_dispatch_table_thunk; + epoxy_glCopyTextureImage1DEXT = epoxy_glCopyTextureImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTextureImage2DEXT = epoxy_glCopyTextureImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTextureLevelsAPPLE = epoxy_glCopyTextureLevelsAPPLE_dispatch_table_thunk; + epoxy_glCopyTextureSubImage1D = epoxy_glCopyTextureSubImage1D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage1DEXT = epoxy_glCopyTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTextureSubImage2D = epoxy_glCopyTextureSubImage2D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage2DEXT = epoxy_glCopyTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTextureSubImage3D = epoxy_glCopyTextureSubImage3D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage3DEXT = epoxy_glCopyTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glCoverFillPathInstancedNV = epoxy_glCoverFillPathInstancedNV_dispatch_table_thunk; + epoxy_glCoverFillPathNV = epoxy_glCoverFillPathNV_dispatch_table_thunk; + epoxy_glCoverStrokePathInstancedNV = epoxy_glCoverStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glCoverStrokePathNV = epoxy_glCoverStrokePathNV_dispatch_table_thunk; + epoxy_glCoverageMaskNV = epoxy_glCoverageMaskNV_dispatch_table_thunk; + epoxy_glCoverageModulationNV = epoxy_glCoverageModulationNV_dispatch_table_thunk; + epoxy_glCoverageModulationTableNV = epoxy_glCoverageModulationTableNV_dispatch_table_thunk; + epoxy_glCoverageOperationNV = epoxy_glCoverageOperationNV_dispatch_table_thunk; + epoxy_glCreateBuffers = epoxy_glCreateBuffers_dispatch_table_thunk; + epoxy_glCreateCommandListsNV = epoxy_glCreateCommandListsNV_dispatch_table_thunk; + epoxy_glCreateFramebuffers = epoxy_glCreateFramebuffers_dispatch_table_thunk; + epoxy_glCreatePerfQueryINTEL = epoxy_glCreatePerfQueryINTEL_dispatch_table_thunk; + epoxy_glCreateProgram = epoxy_glCreateProgram_dispatch_table_thunk; + epoxy_glCreateProgramObjectARB = epoxy_glCreateProgramObjectARB_dispatch_table_thunk; + epoxy_glCreateProgramPipelines = epoxy_glCreateProgramPipelines_dispatch_table_thunk; + epoxy_glCreateQueries = epoxy_glCreateQueries_dispatch_table_thunk; + epoxy_glCreateRenderbuffers = epoxy_glCreateRenderbuffers_dispatch_table_thunk; + epoxy_glCreateSamplers = epoxy_glCreateSamplers_dispatch_table_thunk; + epoxy_glCreateShader = epoxy_glCreateShader_dispatch_table_thunk; + epoxy_glCreateShaderObjectARB = epoxy_glCreateShaderObjectARB_dispatch_table_thunk; + epoxy_glCreateShaderProgramEXT = epoxy_glCreateShaderProgramEXT_dispatch_table_thunk; + epoxy_glCreateShaderProgramv = epoxy_glCreateShaderProgramv_dispatch_table_thunk; + epoxy_glCreateShaderProgramvEXT = epoxy_glCreateShaderProgramvEXT_dispatch_table_thunk; + epoxy_glCreateStatesNV = epoxy_glCreateStatesNV_dispatch_table_thunk; + epoxy_glCreateSyncFromCLeventARB = epoxy_glCreateSyncFromCLeventARB_dispatch_table_thunk; + epoxy_glCreateTextures = epoxy_glCreateTextures_dispatch_table_thunk; + epoxy_glCreateTransformFeedbacks = epoxy_glCreateTransformFeedbacks_dispatch_table_thunk; + epoxy_glCreateVertexArrays = epoxy_glCreateVertexArrays_dispatch_table_thunk; + epoxy_glCullFace = epoxy_glCullFace_dispatch_table_thunk; + epoxy_glCullParameterdvEXT = epoxy_glCullParameterdvEXT_dispatch_table_thunk; + epoxy_glCullParameterfvEXT = epoxy_glCullParameterfvEXT_dispatch_table_thunk; + epoxy_glCurrentPaletteMatrixARB = epoxy_glCurrentPaletteMatrixARB_dispatch_table_thunk; + epoxy_glCurrentPaletteMatrixOES = epoxy_glCurrentPaletteMatrixOES_dispatch_table_thunk; + epoxy_glDebugMessageCallback = epoxy_glDebugMessageCallback_dispatch_table_thunk; + epoxy_glDebugMessageCallbackAMD = epoxy_glDebugMessageCallbackAMD_dispatch_table_thunk; + epoxy_glDebugMessageCallbackARB = epoxy_glDebugMessageCallbackARB_dispatch_table_thunk; + epoxy_glDebugMessageCallbackKHR = epoxy_glDebugMessageCallbackKHR_dispatch_table_thunk; + epoxy_glDebugMessageControl = epoxy_glDebugMessageControl_dispatch_table_thunk; + epoxy_glDebugMessageControlARB = epoxy_glDebugMessageControlARB_dispatch_table_thunk; + epoxy_glDebugMessageControlKHR = epoxy_glDebugMessageControlKHR_dispatch_table_thunk; + epoxy_glDebugMessageEnableAMD = epoxy_glDebugMessageEnableAMD_dispatch_table_thunk; + epoxy_glDebugMessageInsert = epoxy_glDebugMessageInsert_dispatch_table_thunk; + epoxy_glDebugMessageInsertAMD = epoxy_glDebugMessageInsertAMD_dispatch_table_thunk; + epoxy_glDebugMessageInsertARB = epoxy_glDebugMessageInsertARB_dispatch_table_thunk; + epoxy_glDebugMessageInsertKHR = epoxy_glDebugMessageInsertKHR_dispatch_table_thunk; + epoxy_glDeformSGIX = epoxy_glDeformSGIX_dispatch_table_thunk; + epoxy_glDeformationMap3dSGIX = epoxy_glDeformationMap3dSGIX_dispatch_table_thunk; + epoxy_glDeformationMap3fSGIX = epoxy_glDeformationMap3fSGIX_dispatch_table_thunk; + epoxy_glDeleteAsyncMarkersSGIX = epoxy_glDeleteAsyncMarkersSGIX_dispatch_table_thunk; + epoxy_glDeleteBuffers = epoxy_glDeleteBuffers_dispatch_table_thunk; + epoxy_glDeleteBuffersARB = epoxy_glDeleteBuffersARB_dispatch_table_thunk; + epoxy_glDeleteCommandListsNV = epoxy_glDeleteCommandListsNV_dispatch_table_thunk; + epoxy_glDeleteFencesAPPLE = epoxy_glDeleteFencesAPPLE_dispatch_table_thunk; + epoxy_glDeleteFencesNV = epoxy_glDeleteFencesNV_dispatch_table_thunk; + epoxy_glDeleteFragmentShaderATI = epoxy_glDeleteFragmentShaderATI_dispatch_table_thunk; + epoxy_glDeleteFramebuffers = epoxy_glDeleteFramebuffers_dispatch_table_thunk; + epoxy_glDeleteFramebuffersEXT = epoxy_glDeleteFramebuffersEXT_dispatch_table_thunk; + epoxy_glDeleteFramebuffersOES = epoxy_glDeleteFramebuffersOES_dispatch_table_thunk; + epoxy_glDeleteLists = epoxy_glDeleteLists_dispatch_table_thunk; + epoxy_glDeleteNamedStringARB = epoxy_glDeleteNamedStringARB_dispatch_table_thunk; + epoxy_glDeleteNamesAMD = epoxy_glDeleteNamesAMD_dispatch_table_thunk; + epoxy_glDeleteObjectARB = epoxy_glDeleteObjectARB_dispatch_table_thunk; + epoxy_glDeleteOcclusionQueriesNV = epoxy_glDeleteOcclusionQueriesNV_dispatch_table_thunk; + epoxy_glDeletePathsNV = epoxy_glDeletePathsNV_dispatch_table_thunk; + epoxy_glDeletePerfMonitorsAMD = epoxy_glDeletePerfMonitorsAMD_dispatch_table_thunk; + epoxy_glDeletePerfQueryINTEL = epoxy_glDeletePerfQueryINTEL_dispatch_table_thunk; + epoxy_glDeleteProgram = epoxy_glDeleteProgram_dispatch_table_thunk; + epoxy_glDeleteProgramPipelines = epoxy_glDeleteProgramPipelines_dispatch_table_thunk; + epoxy_glDeleteProgramPipelinesEXT = epoxy_glDeleteProgramPipelinesEXT_dispatch_table_thunk; + epoxy_glDeleteProgramsARB = epoxy_glDeleteProgramsARB_dispatch_table_thunk; + epoxy_glDeleteProgramsNV = epoxy_glDeleteProgramsNV_dispatch_table_thunk; + epoxy_glDeleteQueries = epoxy_glDeleteQueries_dispatch_table_thunk; + epoxy_glDeleteQueriesARB = epoxy_glDeleteQueriesARB_dispatch_table_thunk; + epoxy_glDeleteQueriesEXT = epoxy_glDeleteQueriesEXT_dispatch_table_thunk; + epoxy_glDeleteRenderbuffers = epoxy_glDeleteRenderbuffers_dispatch_table_thunk; + epoxy_glDeleteRenderbuffersEXT = epoxy_glDeleteRenderbuffersEXT_dispatch_table_thunk; + epoxy_glDeleteRenderbuffersOES = epoxy_glDeleteRenderbuffersOES_dispatch_table_thunk; + epoxy_glDeleteSamplers = epoxy_glDeleteSamplers_dispatch_table_thunk; + epoxy_glDeleteShader = epoxy_glDeleteShader_dispatch_table_thunk; + epoxy_glDeleteStatesNV = epoxy_glDeleteStatesNV_dispatch_table_thunk; + epoxy_glDeleteSync = epoxy_glDeleteSync_dispatch_table_thunk; + epoxy_glDeleteSyncAPPLE = epoxy_glDeleteSyncAPPLE_dispatch_table_thunk; + epoxy_glDeleteTextures = epoxy_glDeleteTextures_dispatch_table_thunk; + epoxy_glDeleteTexturesEXT = epoxy_glDeleteTexturesEXT_dispatch_table_thunk; + epoxy_glDeleteTransformFeedbacks = epoxy_glDeleteTransformFeedbacks_dispatch_table_thunk; + epoxy_glDeleteTransformFeedbacksNV = epoxy_glDeleteTransformFeedbacksNV_dispatch_table_thunk; + epoxy_glDeleteVertexArrays = epoxy_glDeleteVertexArrays_dispatch_table_thunk; + epoxy_glDeleteVertexArraysAPPLE = epoxy_glDeleteVertexArraysAPPLE_dispatch_table_thunk; + epoxy_glDeleteVertexArraysOES = epoxy_glDeleteVertexArraysOES_dispatch_table_thunk; + epoxy_glDeleteVertexShaderEXT = epoxy_glDeleteVertexShaderEXT_dispatch_table_thunk; + epoxy_glDepthBoundsEXT = epoxy_glDepthBoundsEXT_dispatch_table_thunk; + epoxy_glDepthBoundsdNV = epoxy_glDepthBoundsdNV_dispatch_table_thunk; + epoxy_glDepthFunc = epoxy_glDepthFunc_dispatch_table_thunk; + epoxy_glDepthMask = epoxy_glDepthMask_dispatch_table_thunk; + epoxy_glDepthRange = epoxy_glDepthRange_dispatch_table_thunk; + epoxy_glDepthRangeArrayfvNV = epoxy_glDepthRangeArrayfvNV_dispatch_table_thunk; + epoxy_glDepthRangeArrayv = epoxy_glDepthRangeArrayv_dispatch_table_thunk; + epoxy_glDepthRangeIndexed = epoxy_glDepthRangeIndexed_dispatch_table_thunk; + epoxy_glDepthRangeIndexedfNV = epoxy_glDepthRangeIndexedfNV_dispatch_table_thunk; + epoxy_glDepthRangedNV = epoxy_glDepthRangedNV_dispatch_table_thunk; + epoxy_glDepthRangef = epoxy_glDepthRangef_dispatch_table_thunk; + epoxy_glDepthRangefOES = epoxy_glDepthRangefOES_dispatch_table_thunk; + epoxy_glDepthRangex = epoxy_glDepthRangex_dispatch_table_thunk; + epoxy_glDepthRangexOES = epoxy_glDepthRangexOES_dispatch_table_thunk; + epoxy_glDetachObjectARB = epoxy_glDetachObjectARB_dispatch_table_thunk; + epoxy_glDetachShader = epoxy_glDetachShader_dispatch_table_thunk; + epoxy_glDetailTexFuncSGIS = epoxy_glDetailTexFuncSGIS_dispatch_table_thunk; + epoxy_glDisable = epoxy_glDisable_dispatch_table_thunk; + epoxy_glDisableClientState = epoxy_glDisableClientState_dispatch_table_thunk; + epoxy_glDisableClientStateIndexedEXT = epoxy_glDisableClientStateIndexedEXT_dispatch_table_thunk; + epoxy_glDisableClientStateiEXT = epoxy_glDisableClientStateiEXT_dispatch_table_thunk; + epoxy_glDisableDriverControlQCOM = epoxy_glDisableDriverControlQCOM_dispatch_table_thunk; + epoxy_glDisableIndexedEXT = epoxy_glDisableIndexedEXT_dispatch_table_thunk; + epoxy_glDisableVariantClientStateEXT = epoxy_glDisableVariantClientStateEXT_dispatch_table_thunk; + epoxy_glDisableVertexArrayAttrib = epoxy_glDisableVertexArrayAttrib_dispatch_table_thunk; + epoxy_glDisableVertexArrayAttribEXT = epoxy_glDisableVertexArrayAttribEXT_dispatch_table_thunk; + epoxy_glDisableVertexArrayEXT = epoxy_glDisableVertexArrayEXT_dispatch_table_thunk; + epoxy_glDisableVertexAttribAPPLE = epoxy_glDisableVertexAttribAPPLE_dispatch_table_thunk; + epoxy_glDisableVertexAttribArray = epoxy_glDisableVertexAttribArray_dispatch_table_thunk; + epoxy_glDisableVertexAttribArrayARB = epoxy_glDisableVertexAttribArrayARB_dispatch_table_thunk; + epoxy_glDisablei = epoxy_glDisablei_dispatch_table_thunk; + epoxy_glDisableiEXT = epoxy_glDisableiEXT_dispatch_table_thunk; + epoxy_glDisableiNV = epoxy_glDisableiNV_dispatch_table_thunk; + epoxy_glDisableiOES = epoxy_glDisableiOES_dispatch_table_thunk; + epoxy_glDiscardFramebufferEXT = epoxy_glDiscardFramebufferEXT_dispatch_table_thunk; + epoxy_glDispatchCompute = epoxy_glDispatchCompute_dispatch_table_thunk; + epoxy_glDispatchComputeGroupSizeARB = epoxy_glDispatchComputeGroupSizeARB_dispatch_table_thunk; + epoxy_glDispatchComputeIndirect = epoxy_glDispatchComputeIndirect_dispatch_table_thunk; + epoxy_glDrawArrays = epoxy_glDrawArrays_dispatch_table_thunk; + epoxy_glDrawArraysEXT = epoxy_glDrawArraysEXT_dispatch_table_thunk; + epoxy_glDrawArraysIndirect = epoxy_glDrawArraysIndirect_dispatch_table_thunk; + epoxy_glDrawArraysInstanced = epoxy_glDrawArraysInstanced_dispatch_table_thunk; + epoxy_glDrawArraysInstancedANGLE = epoxy_glDrawArraysInstancedANGLE_dispatch_table_thunk; + epoxy_glDrawArraysInstancedARB = epoxy_glDrawArraysInstancedARB_dispatch_table_thunk; + epoxy_glDrawArraysInstancedBaseInstance = epoxy_glDrawArraysInstancedBaseInstance_dispatch_table_thunk; + epoxy_glDrawArraysInstancedBaseInstanceEXT = epoxy_glDrawArraysInstancedBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawArraysInstancedEXT = epoxy_glDrawArraysInstancedEXT_dispatch_table_thunk; + epoxy_glDrawArraysInstancedNV = epoxy_glDrawArraysInstancedNV_dispatch_table_thunk; + epoxy_glDrawBuffer = epoxy_glDrawBuffer_dispatch_table_thunk; + epoxy_glDrawBuffers = epoxy_glDrawBuffers_dispatch_table_thunk; + epoxy_glDrawBuffersARB = epoxy_glDrawBuffersARB_dispatch_table_thunk; + epoxy_glDrawBuffersATI = epoxy_glDrawBuffersATI_dispatch_table_thunk; + epoxy_glDrawBuffersEXT = epoxy_glDrawBuffersEXT_dispatch_table_thunk; + epoxy_glDrawBuffersIndexedEXT = epoxy_glDrawBuffersIndexedEXT_dispatch_table_thunk; + epoxy_glDrawBuffersNV = epoxy_glDrawBuffersNV_dispatch_table_thunk; + epoxy_glDrawCommandsAddressNV = epoxy_glDrawCommandsAddressNV_dispatch_table_thunk; + epoxy_glDrawCommandsNV = epoxy_glDrawCommandsNV_dispatch_table_thunk; + epoxy_glDrawCommandsStatesAddressNV = epoxy_glDrawCommandsStatesAddressNV_dispatch_table_thunk; + epoxy_glDrawCommandsStatesNV = epoxy_glDrawCommandsStatesNV_dispatch_table_thunk; + epoxy_glDrawElementArrayAPPLE = epoxy_glDrawElementArrayAPPLE_dispatch_table_thunk; + epoxy_glDrawElementArrayATI = epoxy_glDrawElementArrayATI_dispatch_table_thunk; + epoxy_glDrawElements = epoxy_glDrawElements_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertex = epoxy_glDrawElementsBaseVertex_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertexEXT = epoxy_glDrawElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertexOES = epoxy_glDrawElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawElementsIndirect = epoxy_glDrawElementsIndirect_dispatch_table_thunk; + epoxy_glDrawElementsInstanced = epoxy_glDrawElementsInstanced_dispatch_table_thunk; + epoxy_glDrawElementsInstancedANGLE = epoxy_glDrawElementsInstancedANGLE_dispatch_table_thunk; + epoxy_glDrawElementsInstancedARB = epoxy_glDrawElementsInstancedARB_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseInstance = epoxy_glDrawElementsInstancedBaseInstance_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertex = epoxy_glDrawElementsInstancedBaseVertex_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexBaseInstance = epoxy_glDrawElementsInstancedBaseVertexBaseInstance_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexEXT = epoxy_glDrawElementsInstancedBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexOES = epoxy_glDrawElementsInstancedBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawElementsInstancedEXT = epoxy_glDrawElementsInstancedEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedNV = epoxy_glDrawElementsInstancedNV_dispatch_table_thunk; + epoxy_glDrawMeshArraysSUN = epoxy_glDrawMeshArraysSUN_dispatch_table_thunk; + epoxy_glDrawPixels = epoxy_glDrawPixels_dispatch_table_thunk; + epoxy_glDrawRangeElementArrayAPPLE = epoxy_glDrawRangeElementArrayAPPLE_dispatch_table_thunk; + epoxy_glDrawRangeElementArrayATI = epoxy_glDrawRangeElementArrayATI_dispatch_table_thunk; + epoxy_glDrawRangeElements = epoxy_glDrawRangeElements_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertex = epoxy_glDrawRangeElementsBaseVertex_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertexEXT = epoxy_glDrawRangeElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertexOES = epoxy_glDrawRangeElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawRangeElementsEXT = epoxy_glDrawRangeElementsEXT_dispatch_table_thunk; + epoxy_glDrawTexfOES = epoxy_glDrawTexfOES_dispatch_table_thunk; + epoxy_glDrawTexfvOES = epoxy_glDrawTexfvOES_dispatch_table_thunk; + epoxy_glDrawTexiOES = epoxy_glDrawTexiOES_dispatch_table_thunk; + epoxy_glDrawTexivOES = epoxy_glDrawTexivOES_dispatch_table_thunk; + epoxy_glDrawTexsOES = epoxy_glDrawTexsOES_dispatch_table_thunk; + epoxy_glDrawTexsvOES = epoxy_glDrawTexsvOES_dispatch_table_thunk; + epoxy_glDrawTextureNV = epoxy_glDrawTextureNV_dispatch_table_thunk; + epoxy_glDrawTexxOES = epoxy_glDrawTexxOES_dispatch_table_thunk; + epoxy_glDrawTexxvOES = epoxy_glDrawTexxvOES_dispatch_table_thunk; + epoxy_glDrawTransformFeedback = epoxy_glDrawTransformFeedback_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackInstanced = epoxy_glDrawTransformFeedbackInstanced_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackNV = epoxy_glDrawTransformFeedbackNV_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackStream = epoxy_glDrawTransformFeedbackStream_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackStreamInstanced = epoxy_glDrawTransformFeedbackStreamInstanced_dispatch_table_thunk; + epoxy_glEGLImageTargetRenderbufferStorageOES = epoxy_glEGLImageTargetRenderbufferStorageOES_dispatch_table_thunk; + epoxy_glEGLImageTargetTexture2DOES = epoxy_glEGLImageTargetTexture2DOES_dispatch_table_thunk; + epoxy_glEdgeFlag = epoxy_glEdgeFlag_dispatch_table_thunk; + epoxy_glEdgeFlagFormatNV = epoxy_glEdgeFlagFormatNV_dispatch_table_thunk; + epoxy_glEdgeFlagPointer = epoxy_glEdgeFlagPointer_dispatch_table_thunk; + epoxy_glEdgeFlagPointerEXT = epoxy_glEdgeFlagPointerEXT_dispatch_table_thunk; + epoxy_glEdgeFlagPointerListIBM = epoxy_glEdgeFlagPointerListIBM_dispatch_table_thunk; + epoxy_glEdgeFlagv = epoxy_glEdgeFlagv_dispatch_table_thunk; + epoxy_glElementPointerAPPLE = epoxy_glElementPointerAPPLE_dispatch_table_thunk; + epoxy_glElementPointerATI = epoxy_glElementPointerATI_dispatch_table_thunk; + epoxy_glEnable = epoxy_glEnable_dispatch_table_thunk; + epoxy_glEnableClientState = epoxy_glEnableClientState_dispatch_table_thunk; + epoxy_glEnableClientStateIndexedEXT = epoxy_glEnableClientStateIndexedEXT_dispatch_table_thunk; + epoxy_glEnableClientStateiEXT = epoxy_glEnableClientStateiEXT_dispatch_table_thunk; + epoxy_glEnableDriverControlQCOM = epoxy_glEnableDriverControlQCOM_dispatch_table_thunk; + epoxy_glEnableIndexedEXT = epoxy_glEnableIndexedEXT_dispatch_table_thunk; + epoxy_glEnableVariantClientStateEXT = epoxy_glEnableVariantClientStateEXT_dispatch_table_thunk; + epoxy_glEnableVertexArrayAttrib = epoxy_glEnableVertexArrayAttrib_dispatch_table_thunk; + epoxy_glEnableVertexArrayAttribEXT = epoxy_glEnableVertexArrayAttribEXT_dispatch_table_thunk; + epoxy_glEnableVertexArrayEXT = epoxy_glEnableVertexArrayEXT_dispatch_table_thunk; + epoxy_glEnableVertexAttribAPPLE = epoxy_glEnableVertexAttribAPPLE_dispatch_table_thunk; + epoxy_glEnableVertexAttribArray = epoxy_glEnableVertexAttribArray_dispatch_table_thunk; + epoxy_glEnableVertexAttribArrayARB = epoxy_glEnableVertexAttribArrayARB_dispatch_table_thunk; + epoxy_glEnablei = epoxy_glEnablei_dispatch_table_thunk; + epoxy_glEnableiEXT = epoxy_glEnableiEXT_dispatch_table_thunk; + epoxy_glEnableiNV = epoxy_glEnableiNV_dispatch_table_thunk; + epoxy_glEnableiOES = epoxy_glEnableiOES_dispatch_table_thunk; + epoxy_glEnd_unwrapped = epoxy_glEnd_unwrapped_dispatch_table_thunk; + epoxy_glEndConditionalRender = epoxy_glEndConditionalRender_dispatch_table_thunk; + epoxy_glEndConditionalRenderNV = epoxy_glEndConditionalRenderNV_dispatch_table_thunk; + epoxy_glEndConditionalRenderNVX = epoxy_glEndConditionalRenderNVX_dispatch_table_thunk; + epoxy_glEndFragmentShaderATI = epoxy_glEndFragmentShaderATI_dispatch_table_thunk; + epoxy_glEndList = epoxy_glEndList_dispatch_table_thunk; + epoxy_glEndOcclusionQueryNV = epoxy_glEndOcclusionQueryNV_dispatch_table_thunk; + epoxy_glEndPerfMonitorAMD = epoxy_glEndPerfMonitorAMD_dispatch_table_thunk; + epoxy_glEndPerfQueryINTEL = epoxy_glEndPerfQueryINTEL_dispatch_table_thunk; + epoxy_glEndQuery = epoxy_glEndQuery_dispatch_table_thunk; + epoxy_glEndQueryARB = epoxy_glEndQueryARB_dispatch_table_thunk; + epoxy_glEndQueryEXT = epoxy_glEndQueryEXT_dispatch_table_thunk; + epoxy_glEndQueryIndexed = epoxy_glEndQueryIndexed_dispatch_table_thunk; + epoxy_glEndTilingQCOM = epoxy_glEndTilingQCOM_dispatch_table_thunk; + epoxy_glEndTransformFeedback = epoxy_glEndTransformFeedback_dispatch_table_thunk; + epoxy_glEndTransformFeedbackEXT = epoxy_glEndTransformFeedbackEXT_dispatch_table_thunk; + epoxy_glEndTransformFeedbackNV = epoxy_glEndTransformFeedbackNV_dispatch_table_thunk; + epoxy_glEndVertexShaderEXT = epoxy_glEndVertexShaderEXT_dispatch_table_thunk; + epoxy_glEndVideoCaptureNV = epoxy_glEndVideoCaptureNV_dispatch_table_thunk; + epoxy_glEvalCoord1d = epoxy_glEvalCoord1d_dispatch_table_thunk; + epoxy_glEvalCoord1dv = epoxy_glEvalCoord1dv_dispatch_table_thunk; + epoxy_glEvalCoord1f = epoxy_glEvalCoord1f_dispatch_table_thunk; + epoxy_glEvalCoord1fv = epoxy_glEvalCoord1fv_dispatch_table_thunk; + epoxy_glEvalCoord1xOES = epoxy_glEvalCoord1xOES_dispatch_table_thunk; + epoxy_glEvalCoord1xvOES = epoxy_glEvalCoord1xvOES_dispatch_table_thunk; + epoxy_glEvalCoord2d = epoxy_glEvalCoord2d_dispatch_table_thunk; + epoxy_glEvalCoord2dv = epoxy_glEvalCoord2dv_dispatch_table_thunk; + epoxy_glEvalCoord2f = epoxy_glEvalCoord2f_dispatch_table_thunk; + epoxy_glEvalCoord2fv = epoxy_glEvalCoord2fv_dispatch_table_thunk; + epoxy_glEvalCoord2xOES = epoxy_glEvalCoord2xOES_dispatch_table_thunk; + epoxy_glEvalCoord2xvOES = epoxy_glEvalCoord2xvOES_dispatch_table_thunk; + epoxy_glEvalMapsNV = epoxy_glEvalMapsNV_dispatch_table_thunk; + epoxy_glEvalMesh1 = epoxy_glEvalMesh1_dispatch_table_thunk; + epoxy_glEvalMesh2 = epoxy_glEvalMesh2_dispatch_table_thunk; + epoxy_glEvalPoint1 = epoxy_glEvalPoint1_dispatch_table_thunk; + epoxy_glEvalPoint2 = epoxy_glEvalPoint2_dispatch_table_thunk; + epoxy_glEvaluateDepthValuesARB = epoxy_glEvaluateDepthValuesARB_dispatch_table_thunk; + epoxy_glExecuteProgramNV = epoxy_glExecuteProgramNV_dispatch_table_thunk; + epoxy_glExtGetBufferPointervQCOM = epoxy_glExtGetBufferPointervQCOM_dispatch_table_thunk; + epoxy_glExtGetBuffersQCOM = epoxy_glExtGetBuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetFramebuffersQCOM = epoxy_glExtGetFramebuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetProgramBinarySourceQCOM = epoxy_glExtGetProgramBinarySourceQCOM_dispatch_table_thunk; + epoxy_glExtGetProgramsQCOM = epoxy_glExtGetProgramsQCOM_dispatch_table_thunk; + epoxy_glExtGetRenderbuffersQCOM = epoxy_glExtGetRenderbuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetShadersQCOM = epoxy_glExtGetShadersQCOM_dispatch_table_thunk; + epoxy_glExtGetTexLevelParameterivQCOM = epoxy_glExtGetTexLevelParameterivQCOM_dispatch_table_thunk; + epoxy_glExtGetTexSubImageQCOM = epoxy_glExtGetTexSubImageQCOM_dispatch_table_thunk; + epoxy_glExtGetTexturesQCOM = epoxy_glExtGetTexturesQCOM_dispatch_table_thunk; + epoxy_glExtIsProgramBinaryQCOM = epoxy_glExtIsProgramBinaryQCOM_dispatch_table_thunk; + epoxy_glExtTexObjectStateOverrideiQCOM = epoxy_glExtTexObjectStateOverrideiQCOM_dispatch_table_thunk; + epoxy_glExtractComponentEXT = epoxy_glExtractComponentEXT_dispatch_table_thunk; + epoxy_glFeedbackBuffer = epoxy_glFeedbackBuffer_dispatch_table_thunk; + epoxy_glFeedbackBufferxOES = epoxy_glFeedbackBufferxOES_dispatch_table_thunk; + epoxy_glFenceSync = epoxy_glFenceSync_dispatch_table_thunk; + epoxy_glFenceSyncAPPLE = epoxy_glFenceSyncAPPLE_dispatch_table_thunk; + epoxy_glFinalCombinerInputNV = epoxy_glFinalCombinerInputNV_dispatch_table_thunk; + epoxy_glFinish = epoxy_glFinish_dispatch_table_thunk; + epoxy_glFinishAsyncSGIX = epoxy_glFinishAsyncSGIX_dispatch_table_thunk; + epoxy_glFinishFenceAPPLE = epoxy_glFinishFenceAPPLE_dispatch_table_thunk; + epoxy_glFinishFenceNV = epoxy_glFinishFenceNV_dispatch_table_thunk; + epoxy_glFinishObjectAPPLE = epoxy_glFinishObjectAPPLE_dispatch_table_thunk; + epoxy_glFinishTextureSUNX = epoxy_glFinishTextureSUNX_dispatch_table_thunk; + epoxy_glFlush = epoxy_glFlush_dispatch_table_thunk; + epoxy_glFlushMappedBufferRange = epoxy_glFlushMappedBufferRange_dispatch_table_thunk; + epoxy_glFlushMappedBufferRangeAPPLE = epoxy_glFlushMappedBufferRangeAPPLE_dispatch_table_thunk; + epoxy_glFlushMappedBufferRangeEXT = epoxy_glFlushMappedBufferRangeEXT_dispatch_table_thunk; + epoxy_glFlushMappedNamedBufferRange = epoxy_glFlushMappedNamedBufferRange_dispatch_table_thunk; + epoxy_glFlushMappedNamedBufferRangeEXT = epoxy_glFlushMappedNamedBufferRangeEXT_dispatch_table_thunk; + epoxy_glFlushPixelDataRangeNV = epoxy_glFlushPixelDataRangeNV_dispatch_table_thunk; + epoxy_glFlushRasterSGIX = epoxy_glFlushRasterSGIX_dispatch_table_thunk; + epoxy_glFlushStaticDataIBM = epoxy_glFlushStaticDataIBM_dispatch_table_thunk; + epoxy_glFlushVertexArrayRangeAPPLE = epoxy_glFlushVertexArrayRangeAPPLE_dispatch_table_thunk; + epoxy_glFlushVertexArrayRangeNV = epoxy_glFlushVertexArrayRangeNV_dispatch_table_thunk; + epoxy_glFogCoordFormatNV = epoxy_glFogCoordFormatNV_dispatch_table_thunk; + epoxy_glFogCoordPointer = epoxy_glFogCoordPointer_dispatch_table_thunk; + epoxy_glFogCoordPointerEXT = epoxy_glFogCoordPointerEXT_dispatch_table_thunk; + epoxy_glFogCoordPointerListIBM = epoxy_glFogCoordPointerListIBM_dispatch_table_thunk; + epoxy_glFogCoordd = epoxy_glFogCoordd_dispatch_table_thunk; + epoxy_glFogCoorddEXT = epoxy_glFogCoorddEXT_dispatch_table_thunk; + epoxy_glFogCoorddv = epoxy_glFogCoorddv_dispatch_table_thunk; + epoxy_glFogCoorddvEXT = epoxy_glFogCoorddvEXT_dispatch_table_thunk; + epoxy_glFogCoordf = epoxy_glFogCoordf_dispatch_table_thunk; + epoxy_glFogCoordfEXT = epoxy_glFogCoordfEXT_dispatch_table_thunk; + epoxy_glFogCoordfv = epoxy_glFogCoordfv_dispatch_table_thunk; + epoxy_glFogCoordfvEXT = epoxy_glFogCoordfvEXT_dispatch_table_thunk; + epoxy_glFogCoordhNV = epoxy_glFogCoordhNV_dispatch_table_thunk; + epoxy_glFogCoordhvNV = epoxy_glFogCoordhvNV_dispatch_table_thunk; + epoxy_glFogFuncSGIS = epoxy_glFogFuncSGIS_dispatch_table_thunk; + epoxy_glFogf = epoxy_glFogf_dispatch_table_thunk; + epoxy_glFogfv = epoxy_glFogfv_dispatch_table_thunk; + epoxy_glFogi = epoxy_glFogi_dispatch_table_thunk; + epoxy_glFogiv = epoxy_glFogiv_dispatch_table_thunk; + epoxy_glFogx = epoxy_glFogx_dispatch_table_thunk; + epoxy_glFogxOES = epoxy_glFogxOES_dispatch_table_thunk; + epoxy_glFogxv = epoxy_glFogxv_dispatch_table_thunk; + epoxy_glFogxvOES = epoxy_glFogxvOES_dispatch_table_thunk; + epoxy_glFragmentColorMaterialSGIX = epoxy_glFragmentColorMaterialSGIX_dispatch_table_thunk; + epoxy_glFragmentCoverageColorNV = epoxy_glFragmentCoverageColorNV_dispatch_table_thunk; + epoxy_glFragmentLightModelfSGIX = epoxy_glFragmentLightModelfSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModelfvSGIX = epoxy_glFragmentLightModelfvSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModeliSGIX = epoxy_glFragmentLightModeliSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModelivSGIX = epoxy_glFragmentLightModelivSGIX_dispatch_table_thunk; + epoxy_glFragmentLightfSGIX = epoxy_glFragmentLightfSGIX_dispatch_table_thunk; + epoxy_glFragmentLightfvSGIX = epoxy_glFragmentLightfvSGIX_dispatch_table_thunk; + epoxy_glFragmentLightiSGIX = epoxy_glFragmentLightiSGIX_dispatch_table_thunk; + epoxy_glFragmentLightivSGIX = epoxy_glFragmentLightivSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialfSGIX = epoxy_glFragmentMaterialfSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialfvSGIX = epoxy_glFragmentMaterialfvSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialiSGIX = epoxy_glFragmentMaterialiSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialivSGIX = epoxy_glFragmentMaterialivSGIX_dispatch_table_thunk; + epoxy_glFrameTerminatorGREMEDY = epoxy_glFrameTerminatorGREMEDY_dispatch_table_thunk; + epoxy_glFrameZoomSGIX = epoxy_glFrameZoomSGIX_dispatch_table_thunk; + epoxy_glFramebufferDrawBufferEXT = epoxy_glFramebufferDrawBufferEXT_dispatch_table_thunk; + epoxy_glFramebufferDrawBuffersEXT = epoxy_glFramebufferDrawBuffersEXT_dispatch_table_thunk; + epoxy_glFramebufferParameteri = epoxy_glFramebufferParameteri_dispatch_table_thunk; + epoxy_glFramebufferReadBufferEXT = epoxy_glFramebufferReadBufferEXT_dispatch_table_thunk; + epoxy_glFramebufferRenderbuffer = epoxy_glFramebufferRenderbuffer_dispatch_table_thunk; + epoxy_glFramebufferRenderbufferEXT = epoxy_glFramebufferRenderbufferEXT_dispatch_table_thunk; + epoxy_glFramebufferRenderbufferOES = epoxy_glFramebufferRenderbufferOES_dispatch_table_thunk; + epoxy_glFramebufferSampleLocationsfvARB = epoxy_glFramebufferSampleLocationsfvARB_dispatch_table_thunk; + epoxy_glFramebufferSampleLocationsfvNV = epoxy_glFramebufferSampleLocationsfvNV_dispatch_table_thunk; + epoxy_glFramebufferTexture = epoxy_glFramebufferTexture_dispatch_table_thunk; + epoxy_glFramebufferTexture1D = epoxy_glFramebufferTexture1D_dispatch_table_thunk; + epoxy_glFramebufferTexture1DEXT = epoxy_glFramebufferTexture1DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2D = epoxy_glFramebufferTexture2D_dispatch_table_thunk; + epoxy_glFramebufferTexture2DEXT = epoxy_glFramebufferTexture2DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2DMultisampleEXT = epoxy_glFramebufferTexture2DMultisampleEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2DMultisampleIMG = epoxy_glFramebufferTexture2DMultisampleIMG_dispatch_table_thunk; + epoxy_glFramebufferTexture2DOES = epoxy_glFramebufferTexture2DOES_dispatch_table_thunk; + epoxy_glFramebufferTexture3D = epoxy_glFramebufferTexture3D_dispatch_table_thunk; + epoxy_glFramebufferTexture3DEXT = epoxy_glFramebufferTexture3DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture3DOES = epoxy_glFramebufferTexture3DOES_dispatch_table_thunk; + epoxy_glFramebufferTextureARB = epoxy_glFramebufferTextureARB_dispatch_table_thunk; + epoxy_glFramebufferTextureEXT = epoxy_glFramebufferTextureEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureFaceARB = epoxy_glFramebufferTextureFaceARB_dispatch_table_thunk; + epoxy_glFramebufferTextureFaceEXT = epoxy_glFramebufferTextureFaceEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureLayer = epoxy_glFramebufferTextureLayer_dispatch_table_thunk; + epoxy_glFramebufferTextureLayerARB = epoxy_glFramebufferTextureLayerARB_dispatch_table_thunk; + epoxy_glFramebufferTextureLayerEXT = epoxy_glFramebufferTextureLayerEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureMultiviewOVR = epoxy_glFramebufferTextureMultiviewOVR_dispatch_table_thunk; + epoxy_glFramebufferTextureOES = epoxy_glFramebufferTextureOES_dispatch_table_thunk; + epoxy_glFreeObjectBufferATI = epoxy_glFreeObjectBufferATI_dispatch_table_thunk; + epoxy_glFrontFace = epoxy_glFrontFace_dispatch_table_thunk; + epoxy_glFrustum = epoxy_glFrustum_dispatch_table_thunk; + epoxy_glFrustumf = epoxy_glFrustumf_dispatch_table_thunk; + epoxy_glFrustumfOES = epoxy_glFrustumfOES_dispatch_table_thunk; + epoxy_glFrustumx = epoxy_glFrustumx_dispatch_table_thunk; + epoxy_glFrustumxOES = epoxy_glFrustumxOES_dispatch_table_thunk; + epoxy_glGenAsyncMarkersSGIX = epoxy_glGenAsyncMarkersSGIX_dispatch_table_thunk; + epoxy_glGenBuffers = epoxy_glGenBuffers_dispatch_table_thunk; + epoxy_glGenBuffersARB = epoxy_glGenBuffersARB_dispatch_table_thunk; + epoxy_glGenFencesAPPLE = epoxy_glGenFencesAPPLE_dispatch_table_thunk; + epoxy_glGenFencesNV = epoxy_glGenFencesNV_dispatch_table_thunk; + epoxy_glGenFragmentShadersATI = epoxy_glGenFragmentShadersATI_dispatch_table_thunk; + epoxy_glGenFramebuffers = epoxy_glGenFramebuffers_dispatch_table_thunk; + epoxy_glGenFramebuffersEXT = epoxy_glGenFramebuffersEXT_dispatch_table_thunk; + epoxy_glGenFramebuffersOES = epoxy_glGenFramebuffersOES_dispatch_table_thunk; + epoxy_glGenLists = epoxy_glGenLists_dispatch_table_thunk; + epoxy_glGenNamesAMD = epoxy_glGenNamesAMD_dispatch_table_thunk; + epoxy_glGenOcclusionQueriesNV = epoxy_glGenOcclusionQueriesNV_dispatch_table_thunk; + epoxy_glGenPathsNV = epoxy_glGenPathsNV_dispatch_table_thunk; + epoxy_glGenPerfMonitorsAMD = epoxy_glGenPerfMonitorsAMD_dispatch_table_thunk; + epoxy_glGenProgramPipelines = epoxy_glGenProgramPipelines_dispatch_table_thunk; + epoxy_glGenProgramPipelinesEXT = epoxy_glGenProgramPipelinesEXT_dispatch_table_thunk; + epoxy_glGenProgramsARB = epoxy_glGenProgramsARB_dispatch_table_thunk; + epoxy_glGenProgramsNV = epoxy_glGenProgramsNV_dispatch_table_thunk; + epoxy_glGenQueries = epoxy_glGenQueries_dispatch_table_thunk; + epoxy_glGenQueriesARB = epoxy_glGenQueriesARB_dispatch_table_thunk; + epoxy_glGenQueriesEXT = epoxy_glGenQueriesEXT_dispatch_table_thunk; + epoxy_glGenRenderbuffers = epoxy_glGenRenderbuffers_dispatch_table_thunk; + epoxy_glGenRenderbuffersEXT = epoxy_glGenRenderbuffersEXT_dispatch_table_thunk; + epoxy_glGenRenderbuffersOES = epoxy_glGenRenderbuffersOES_dispatch_table_thunk; + epoxy_glGenSamplers = epoxy_glGenSamplers_dispatch_table_thunk; + epoxy_glGenSymbolsEXT = epoxy_glGenSymbolsEXT_dispatch_table_thunk; + epoxy_glGenTextures = epoxy_glGenTextures_dispatch_table_thunk; + epoxy_glGenTexturesEXT = epoxy_glGenTexturesEXT_dispatch_table_thunk; + epoxy_glGenTransformFeedbacks = epoxy_glGenTransformFeedbacks_dispatch_table_thunk; + epoxy_glGenTransformFeedbacksNV = epoxy_glGenTransformFeedbacksNV_dispatch_table_thunk; + epoxy_glGenVertexArrays = epoxy_glGenVertexArrays_dispatch_table_thunk; + epoxy_glGenVertexArraysAPPLE = epoxy_glGenVertexArraysAPPLE_dispatch_table_thunk; + epoxy_glGenVertexArraysOES = epoxy_glGenVertexArraysOES_dispatch_table_thunk; + epoxy_glGenVertexShadersEXT = epoxy_glGenVertexShadersEXT_dispatch_table_thunk; + epoxy_glGenerateMipmap = epoxy_glGenerateMipmap_dispatch_table_thunk; + epoxy_glGenerateMipmapEXT = epoxy_glGenerateMipmapEXT_dispatch_table_thunk; + epoxy_glGenerateMipmapOES = epoxy_glGenerateMipmapOES_dispatch_table_thunk; + epoxy_glGenerateMultiTexMipmapEXT = epoxy_glGenerateMultiTexMipmapEXT_dispatch_table_thunk; + epoxy_glGenerateTextureMipmap = epoxy_glGenerateTextureMipmap_dispatch_table_thunk; + epoxy_glGenerateTextureMipmapEXT = epoxy_glGenerateTextureMipmapEXT_dispatch_table_thunk; + epoxy_glGetActiveAtomicCounterBufferiv = epoxy_glGetActiveAtomicCounterBufferiv_dispatch_table_thunk; + epoxy_glGetActiveAttrib = epoxy_glGetActiveAttrib_dispatch_table_thunk; + epoxy_glGetActiveAttribARB = epoxy_glGetActiveAttribARB_dispatch_table_thunk; + epoxy_glGetActiveSubroutineName = epoxy_glGetActiveSubroutineName_dispatch_table_thunk; + epoxy_glGetActiveSubroutineUniformName = epoxy_glGetActiveSubroutineUniformName_dispatch_table_thunk; + epoxy_glGetActiveSubroutineUniformiv = epoxy_glGetActiveSubroutineUniformiv_dispatch_table_thunk; + epoxy_glGetActiveUniform = epoxy_glGetActiveUniform_dispatch_table_thunk; + epoxy_glGetActiveUniformARB = epoxy_glGetActiveUniformARB_dispatch_table_thunk; + epoxy_glGetActiveUniformBlockName = epoxy_glGetActiveUniformBlockName_dispatch_table_thunk; + epoxy_glGetActiveUniformBlockiv = epoxy_glGetActiveUniformBlockiv_dispatch_table_thunk; + epoxy_glGetActiveUniformName = epoxy_glGetActiveUniformName_dispatch_table_thunk; + epoxy_glGetActiveUniformsiv = epoxy_glGetActiveUniformsiv_dispatch_table_thunk; + epoxy_glGetActiveVaryingNV = epoxy_glGetActiveVaryingNV_dispatch_table_thunk; + epoxy_glGetArrayObjectfvATI = epoxy_glGetArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetArrayObjectivATI = epoxy_glGetArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetAttachedObjectsARB = epoxy_glGetAttachedObjectsARB_dispatch_table_thunk; + epoxy_glGetAttachedShaders = epoxy_glGetAttachedShaders_dispatch_table_thunk; + epoxy_glGetAttribLocation = epoxy_glGetAttribLocation_dispatch_table_thunk; + epoxy_glGetAttribLocationARB = epoxy_glGetAttribLocationARB_dispatch_table_thunk; + epoxy_glGetBooleanIndexedvEXT = epoxy_glGetBooleanIndexedvEXT_dispatch_table_thunk; + epoxy_glGetBooleani_v = epoxy_glGetBooleani_v_dispatch_table_thunk; + epoxy_glGetBooleanv = epoxy_glGetBooleanv_dispatch_table_thunk; + epoxy_glGetBufferParameteri64v = epoxy_glGetBufferParameteri64v_dispatch_table_thunk; + epoxy_glGetBufferParameteriv = epoxy_glGetBufferParameteriv_dispatch_table_thunk; + epoxy_glGetBufferParameterivARB = epoxy_glGetBufferParameterivARB_dispatch_table_thunk; + epoxy_glGetBufferParameterui64vNV = epoxy_glGetBufferParameterui64vNV_dispatch_table_thunk; + epoxy_glGetBufferPointerv = epoxy_glGetBufferPointerv_dispatch_table_thunk; + epoxy_glGetBufferPointervARB = epoxy_glGetBufferPointervARB_dispatch_table_thunk; + epoxy_glGetBufferPointervOES = epoxy_glGetBufferPointervOES_dispatch_table_thunk; + epoxy_glGetBufferSubData = epoxy_glGetBufferSubData_dispatch_table_thunk; + epoxy_glGetBufferSubDataARB = epoxy_glGetBufferSubDataARB_dispatch_table_thunk; + epoxy_glGetClipPlane = epoxy_glGetClipPlane_dispatch_table_thunk; + epoxy_glGetClipPlanef = epoxy_glGetClipPlanef_dispatch_table_thunk; + epoxy_glGetClipPlanefOES = epoxy_glGetClipPlanefOES_dispatch_table_thunk; + epoxy_glGetClipPlanex = epoxy_glGetClipPlanex_dispatch_table_thunk; + epoxy_glGetClipPlanexOES = epoxy_glGetClipPlanexOES_dispatch_table_thunk; + epoxy_glGetColorTable = epoxy_glGetColorTable_dispatch_table_thunk; + epoxy_glGetColorTableEXT = epoxy_glGetColorTableEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterfv = epoxy_glGetColorTableParameterfv_dispatch_table_thunk; + epoxy_glGetColorTableParameterfvEXT = epoxy_glGetColorTableParameterfvEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterfvSGI = epoxy_glGetColorTableParameterfvSGI_dispatch_table_thunk; + epoxy_glGetColorTableParameteriv = epoxy_glGetColorTableParameteriv_dispatch_table_thunk; + epoxy_glGetColorTableParameterivEXT = epoxy_glGetColorTableParameterivEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterivSGI = epoxy_glGetColorTableParameterivSGI_dispatch_table_thunk; + epoxy_glGetColorTableSGI = epoxy_glGetColorTableSGI_dispatch_table_thunk; + epoxy_glGetCombinerInputParameterfvNV = epoxy_glGetCombinerInputParameterfvNV_dispatch_table_thunk; + epoxy_glGetCombinerInputParameterivNV = epoxy_glGetCombinerInputParameterivNV_dispatch_table_thunk; + epoxy_glGetCombinerOutputParameterfvNV = epoxy_glGetCombinerOutputParameterfvNV_dispatch_table_thunk; + epoxy_glGetCombinerOutputParameterivNV = epoxy_glGetCombinerOutputParameterivNV_dispatch_table_thunk; + epoxy_glGetCombinerStageParameterfvNV = epoxy_glGetCombinerStageParameterfvNV_dispatch_table_thunk; + epoxy_glGetCommandHeaderNV = epoxy_glGetCommandHeaderNV_dispatch_table_thunk; + epoxy_glGetCompressedMultiTexImageEXT = epoxy_glGetCompressedMultiTexImageEXT_dispatch_table_thunk; + epoxy_glGetCompressedTexImage = epoxy_glGetCompressedTexImage_dispatch_table_thunk; + epoxy_glGetCompressedTexImageARB = epoxy_glGetCompressedTexImageARB_dispatch_table_thunk; + epoxy_glGetCompressedTextureImage = epoxy_glGetCompressedTextureImage_dispatch_table_thunk; + epoxy_glGetCompressedTextureImageEXT = epoxy_glGetCompressedTextureImageEXT_dispatch_table_thunk; + epoxy_glGetCompressedTextureSubImage = epoxy_glGetCompressedTextureSubImage_dispatch_table_thunk; + epoxy_glGetConvolutionFilter = epoxy_glGetConvolutionFilter_dispatch_table_thunk; + epoxy_glGetConvolutionFilterEXT = epoxy_glGetConvolutionFilterEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameterfv = epoxy_glGetConvolutionParameterfv_dispatch_table_thunk; + epoxy_glGetConvolutionParameterfvEXT = epoxy_glGetConvolutionParameterfvEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameteriv = epoxy_glGetConvolutionParameteriv_dispatch_table_thunk; + epoxy_glGetConvolutionParameterivEXT = epoxy_glGetConvolutionParameterivEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameterxvOES = epoxy_glGetConvolutionParameterxvOES_dispatch_table_thunk; + epoxy_glGetCoverageModulationTableNV = epoxy_glGetCoverageModulationTableNV_dispatch_table_thunk; + epoxy_glGetDebugMessageLog = epoxy_glGetDebugMessageLog_dispatch_table_thunk; + epoxy_glGetDebugMessageLogAMD = epoxy_glGetDebugMessageLogAMD_dispatch_table_thunk; + epoxy_glGetDebugMessageLogARB = epoxy_glGetDebugMessageLogARB_dispatch_table_thunk; + epoxy_glGetDebugMessageLogKHR = epoxy_glGetDebugMessageLogKHR_dispatch_table_thunk; + epoxy_glGetDetailTexFuncSGIS = epoxy_glGetDetailTexFuncSGIS_dispatch_table_thunk; + epoxy_glGetDoubleIndexedvEXT = epoxy_glGetDoubleIndexedvEXT_dispatch_table_thunk; + epoxy_glGetDoublei_v = epoxy_glGetDoublei_v_dispatch_table_thunk; + epoxy_glGetDoublei_vEXT = epoxy_glGetDoublei_vEXT_dispatch_table_thunk; + epoxy_glGetDoublev = epoxy_glGetDoublev_dispatch_table_thunk; + epoxy_glGetDriverControlStringQCOM = epoxy_glGetDriverControlStringQCOM_dispatch_table_thunk; + epoxy_glGetDriverControlsQCOM = epoxy_glGetDriverControlsQCOM_dispatch_table_thunk; + epoxy_glGetError = epoxy_glGetError_dispatch_table_thunk; + epoxy_glGetFenceivNV = epoxy_glGetFenceivNV_dispatch_table_thunk; + epoxy_glGetFinalCombinerInputParameterfvNV = epoxy_glGetFinalCombinerInputParameterfvNV_dispatch_table_thunk; + epoxy_glGetFinalCombinerInputParameterivNV = epoxy_glGetFinalCombinerInputParameterivNV_dispatch_table_thunk; + epoxy_glGetFirstPerfQueryIdINTEL = epoxy_glGetFirstPerfQueryIdINTEL_dispatch_table_thunk; + epoxy_glGetFixedv = epoxy_glGetFixedv_dispatch_table_thunk; + epoxy_glGetFixedvOES = epoxy_glGetFixedvOES_dispatch_table_thunk; + epoxy_glGetFloatIndexedvEXT = epoxy_glGetFloatIndexedvEXT_dispatch_table_thunk; + epoxy_glGetFloati_v = epoxy_glGetFloati_v_dispatch_table_thunk; + epoxy_glGetFloati_vEXT = epoxy_glGetFloati_vEXT_dispatch_table_thunk; + epoxy_glGetFloati_vNV = epoxy_glGetFloati_vNV_dispatch_table_thunk; + epoxy_glGetFloatv = epoxy_glGetFloatv_dispatch_table_thunk; + epoxy_glGetFogFuncSGIS = epoxy_glGetFogFuncSGIS_dispatch_table_thunk; + epoxy_glGetFragDataIndex = epoxy_glGetFragDataIndex_dispatch_table_thunk; + epoxy_glGetFragDataIndexEXT = epoxy_glGetFragDataIndexEXT_dispatch_table_thunk; + epoxy_glGetFragDataLocation = epoxy_glGetFragDataLocation_dispatch_table_thunk; + epoxy_glGetFragDataLocationEXT = epoxy_glGetFragDataLocationEXT_dispatch_table_thunk; + epoxy_glGetFragmentLightfvSGIX = epoxy_glGetFragmentLightfvSGIX_dispatch_table_thunk; + epoxy_glGetFragmentLightivSGIX = epoxy_glGetFragmentLightivSGIX_dispatch_table_thunk; + epoxy_glGetFragmentMaterialfvSGIX = epoxy_glGetFragmentMaterialfvSGIX_dispatch_table_thunk; + epoxy_glGetFragmentMaterialivSGIX = epoxy_glGetFragmentMaterialivSGIX_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameteriv = epoxy_glGetFramebufferAttachmentParameteriv_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameterivEXT = epoxy_glGetFramebufferAttachmentParameterivEXT_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameterivOES = epoxy_glGetFramebufferAttachmentParameterivOES_dispatch_table_thunk; + epoxy_glGetFramebufferParameteriv = epoxy_glGetFramebufferParameteriv_dispatch_table_thunk; + epoxy_glGetFramebufferParameterivEXT = epoxy_glGetFramebufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatus = epoxy_glGetGraphicsResetStatus_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusARB = epoxy_glGetGraphicsResetStatusARB_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusEXT = epoxy_glGetGraphicsResetStatusEXT_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusKHR = epoxy_glGetGraphicsResetStatusKHR_dispatch_table_thunk; + epoxy_glGetHandleARB = epoxy_glGetHandleARB_dispatch_table_thunk; + epoxy_glGetHistogram = epoxy_glGetHistogram_dispatch_table_thunk; + epoxy_glGetHistogramEXT = epoxy_glGetHistogramEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameterfv = epoxy_glGetHistogramParameterfv_dispatch_table_thunk; + epoxy_glGetHistogramParameterfvEXT = epoxy_glGetHistogramParameterfvEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameteriv = epoxy_glGetHistogramParameteriv_dispatch_table_thunk; + epoxy_glGetHistogramParameterivEXT = epoxy_glGetHistogramParameterivEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameterxvOES = epoxy_glGetHistogramParameterxvOES_dispatch_table_thunk; + epoxy_glGetImageHandleARB = epoxy_glGetImageHandleARB_dispatch_table_thunk; + epoxy_glGetImageHandleNV = epoxy_glGetImageHandleNV_dispatch_table_thunk; + epoxy_glGetImageTransformParameterfvHP = epoxy_glGetImageTransformParameterfvHP_dispatch_table_thunk; + epoxy_glGetImageTransformParameterivHP = epoxy_glGetImageTransformParameterivHP_dispatch_table_thunk; + epoxy_glGetInfoLogARB = epoxy_glGetInfoLogARB_dispatch_table_thunk; + epoxy_glGetInstrumentsSGIX = epoxy_glGetInstrumentsSGIX_dispatch_table_thunk; + epoxy_glGetInteger64i_v = epoxy_glGetInteger64i_v_dispatch_table_thunk; + epoxy_glGetInteger64v = epoxy_glGetInteger64v_dispatch_table_thunk; + epoxy_glGetInteger64vAPPLE = epoxy_glGetInteger64vAPPLE_dispatch_table_thunk; + epoxy_glGetIntegerIndexedvEXT = epoxy_glGetIntegerIndexedvEXT_dispatch_table_thunk; + epoxy_glGetIntegeri_v = epoxy_glGetIntegeri_v_dispatch_table_thunk; + epoxy_glGetIntegeri_vEXT = epoxy_glGetIntegeri_vEXT_dispatch_table_thunk; + epoxy_glGetIntegerui64i_vNV = epoxy_glGetIntegerui64i_vNV_dispatch_table_thunk; + epoxy_glGetIntegerui64vNV = epoxy_glGetIntegerui64vNV_dispatch_table_thunk; + epoxy_glGetIntegerv = epoxy_glGetIntegerv_dispatch_table_thunk; + epoxy_glGetInternalformatSampleivNV = epoxy_glGetInternalformatSampleivNV_dispatch_table_thunk; + epoxy_glGetInternalformati64v = epoxy_glGetInternalformati64v_dispatch_table_thunk; + epoxy_glGetInternalformativ = epoxy_glGetInternalformativ_dispatch_table_thunk; + epoxy_glGetInvariantBooleanvEXT = epoxy_glGetInvariantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetInvariantFloatvEXT = epoxy_glGetInvariantFloatvEXT_dispatch_table_thunk; + epoxy_glGetInvariantIntegervEXT = epoxy_glGetInvariantIntegervEXT_dispatch_table_thunk; + epoxy_glGetLightfv = epoxy_glGetLightfv_dispatch_table_thunk; + epoxy_glGetLightiv = epoxy_glGetLightiv_dispatch_table_thunk; + epoxy_glGetLightxOES = epoxy_glGetLightxOES_dispatch_table_thunk; + epoxy_glGetLightxv = epoxy_glGetLightxv_dispatch_table_thunk; + epoxy_glGetLightxvOES = epoxy_glGetLightxvOES_dispatch_table_thunk; + epoxy_glGetListParameterfvSGIX = epoxy_glGetListParameterfvSGIX_dispatch_table_thunk; + epoxy_glGetListParameterivSGIX = epoxy_glGetListParameterivSGIX_dispatch_table_thunk; + epoxy_glGetLocalConstantBooleanvEXT = epoxy_glGetLocalConstantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetLocalConstantFloatvEXT = epoxy_glGetLocalConstantFloatvEXT_dispatch_table_thunk; + epoxy_glGetLocalConstantIntegervEXT = epoxy_glGetLocalConstantIntegervEXT_dispatch_table_thunk; + epoxy_glGetMapAttribParameterfvNV = epoxy_glGetMapAttribParameterfvNV_dispatch_table_thunk; + epoxy_glGetMapAttribParameterivNV = epoxy_glGetMapAttribParameterivNV_dispatch_table_thunk; + epoxy_glGetMapControlPointsNV = epoxy_glGetMapControlPointsNV_dispatch_table_thunk; + epoxy_glGetMapParameterfvNV = epoxy_glGetMapParameterfvNV_dispatch_table_thunk; + epoxy_glGetMapParameterivNV = epoxy_glGetMapParameterivNV_dispatch_table_thunk; + epoxy_glGetMapdv = epoxy_glGetMapdv_dispatch_table_thunk; + epoxy_glGetMapfv = epoxy_glGetMapfv_dispatch_table_thunk; + epoxy_glGetMapiv = epoxy_glGetMapiv_dispatch_table_thunk; + epoxy_glGetMapxvOES = epoxy_glGetMapxvOES_dispatch_table_thunk; + epoxy_glGetMaterialfv = epoxy_glGetMaterialfv_dispatch_table_thunk; + epoxy_glGetMaterialiv = epoxy_glGetMaterialiv_dispatch_table_thunk; + epoxy_glGetMaterialxOES = epoxy_glGetMaterialxOES_dispatch_table_thunk; + epoxy_glGetMaterialxv = epoxy_glGetMaterialxv_dispatch_table_thunk; + epoxy_glGetMaterialxvOES = epoxy_glGetMaterialxvOES_dispatch_table_thunk; + epoxy_glGetMinmax = epoxy_glGetMinmax_dispatch_table_thunk; + epoxy_glGetMinmaxEXT = epoxy_glGetMinmaxEXT_dispatch_table_thunk; + epoxy_glGetMinmaxParameterfv = epoxy_glGetMinmaxParameterfv_dispatch_table_thunk; + epoxy_glGetMinmaxParameterfvEXT = epoxy_glGetMinmaxParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMinmaxParameteriv = epoxy_glGetMinmaxParameteriv_dispatch_table_thunk; + epoxy_glGetMinmaxParameterivEXT = epoxy_glGetMinmaxParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexEnvfvEXT = epoxy_glGetMultiTexEnvfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexEnvivEXT = epoxy_glGetMultiTexEnvivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGendvEXT = epoxy_glGetMultiTexGendvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGenfvEXT = epoxy_glGetMultiTexGenfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGenivEXT = epoxy_glGetMultiTexGenivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexImageEXT = epoxy_glGetMultiTexImageEXT_dispatch_table_thunk; + epoxy_glGetMultiTexLevelParameterfvEXT = epoxy_glGetMultiTexLevelParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexLevelParameterivEXT = epoxy_glGetMultiTexLevelParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterIivEXT = epoxy_glGetMultiTexParameterIivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterIuivEXT = epoxy_glGetMultiTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterfvEXT = epoxy_glGetMultiTexParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterivEXT = epoxy_glGetMultiTexParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultisamplefv = epoxy_glGetMultisamplefv_dispatch_table_thunk; + epoxy_glGetMultisamplefvNV = epoxy_glGetMultisamplefvNV_dispatch_table_thunk; + epoxy_glGetNamedBufferParameteri64v = epoxy_glGetNamedBufferParameteri64v_dispatch_table_thunk; + epoxy_glGetNamedBufferParameteriv = epoxy_glGetNamedBufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedBufferParameterivEXT = epoxy_glGetNamedBufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedBufferParameterui64vNV = epoxy_glGetNamedBufferParameterui64vNV_dispatch_table_thunk; + epoxy_glGetNamedBufferPointerv = epoxy_glGetNamedBufferPointerv_dispatch_table_thunk; + epoxy_glGetNamedBufferPointervEXT = epoxy_glGetNamedBufferPointervEXT_dispatch_table_thunk; + epoxy_glGetNamedBufferSubData = epoxy_glGetNamedBufferSubData_dispatch_table_thunk; + epoxy_glGetNamedBufferSubDataEXT = epoxy_glGetNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glGetNamedFramebufferAttachmentParameteriv = epoxy_glGetNamedFramebufferAttachmentParameteriv_dispatch_table_thunk; + epoxy_glGetNamedFramebufferAttachmentParameterivEXT = epoxy_glGetNamedFramebufferAttachmentParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedFramebufferParameteriv = epoxy_glGetNamedFramebufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedFramebufferParameterivEXT = epoxy_glGetNamedFramebufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterIivEXT = epoxy_glGetNamedProgramLocalParameterIivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterIuivEXT = epoxy_glGetNamedProgramLocalParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterdvEXT = epoxy_glGetNamedProgramLocalParameterdvEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterfvEXT = epoxy_glGetNamedProgramLocalParameterfvEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramStringEXT = epoxy_glGetNamedProgramStringEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramivEXT = epoxy_glGetNamedProgramivEXT_dispatch_table_thunk; + epoxy_glGetNamedRenderbufferParameteriv = epoxy_glGetNamedRenderbufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedRenderbufferParameterivEXT = epoxy_glGetNamedRenderbufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedStringARB = epoxy_glGetNamedStringARB_dispatch_table_thunk; + epoxy_glGetNamedStringivARB = epoxy_glGetNamedStringivARB_dispatch_table_thunk; + epoxy_glGetNextPerfQueryIdINTEL = epoxy_glGetNextPerfQueryIdINTEL_dispatch_table_thunk; + epoxy_glGetObjectBufferfvATI = epoxy_glGetObjectBufferfvATI_dispatch_table_thunk; + epoxy_glGetObjectBufferivATI = epoxy_glGetObjectBufferivATI_dispatch_table_thunk; + epoxy_glGetObjectLabel = epoxy_glGetObjectLabel_dispatch_table_thunk; + epoxy_glGetObjectLabelEXT = epoxy_glGetObjectLabelEXT_dispatch_table_thunk; + epoxy_glGetObjectLabelKHR = epoxy_glGetObjectLabelKHR_dispatch_table_thunk; + epoxy_glGetObjectParameterfvARB = epoxy_glGetObjectParameterfvARB_dispatch_table_thunk; + epoxy_glGetObjectParameterivAPPLE = epoxy_glGetObjectParameterivAPPLE_dispatch_table_thunk; + epoxy_glGetObjectParameterivARB = epoxy_glGetObjectParameterivARB_dispatch_table_thunk; + epoxy_glGetObjectPtrLabel = epoxy_glGetObjectPtrLabel_dispatch_table_thunk; + epoxy_glGetObjectPtrLabelKHR = epoxy_glGetObjectPtrLabelKHR_dispatch_table_thunk; + epoxy_glGetOcclusionQueryivNV = epoxy_glGetOcclusionQueryivNV_dispatch_table_thunk; + epoxy_glGetOcclusionQueryuivNV = epoxy_glGetOcclusionQueryuivNV_dispatch_table_thunk; + epoxy_glGetPathColorGenfvNV = epoxy_glGetPathColorGenfvNV_dispatch_table_thunk; + epoxy_glGetPathColorGenivNV = epoxy_glGetPathColorGenivNV_dispatch_table_thunk; + epoxy_glGetPathCommandsNV = epoxy_glGetPathCommandsNV_dispatch_table_thunk; + epoxy_glGetPathCoordsNV = epoxy_glGetPathCoordsNV_dispatch_table_thunk; + epoxy_glGetPathDashArrayNV = epoxy_glGetPathDashArrayNV_dispatch_table_thunk; + epoxy_glGetPathLengthNV = epoxy_glGetPathLengthNV_dispatch_table_thunk; + epoxy_glGetPathMetricRangeNV = epoxy_glGetPathMetricRangeNV_dispatch_table_thunk; + epoxy_glGetPathMetricsNV = epoxy_glGetPathMetricsNV_dispatch_table_thunk; + epoxy_glGetPathParameterfvNV = epoxy_glGetPathParameterfvNV_dispatch_table_thunk; + epoxy_glGetPathParameterivNV = epoxy_glGetPathParameterivNV_dispatch_table_thunk; + epoxy_glGetPathSpacingNV = epoxy_glGetPathSpacingNV_dispatch_table_thunk; + epoxy_glGetPathTexGenfvNV = epoxy_glGetPathTexGenfvNV_dispatch_table_thunk; + epoxy_glGetPathTexGenivNV = epoxy_glGetPathTexGenivNV_dispatch_table_thunk; + epoxy_glGetPerfCounterInfoINTEL = epoxy_glGetPerfCounterInfoINTEL_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterDataAMD = epoxy_glGetPerfMonitorCounterDataAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterInfoAMD = epoxy_glGetPerfMonitorCounterInfoAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterStringAMD = epoxy_glGetPerfMonitorCounterStringAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCountersAMD = epoxy_glGetPerfMonitorCountersAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorGroupStringAMD = epoxy_glGetPerfMonitorGroupStringAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorGroupsAMD = epoxy_glGetPerfMonitorGroupsAMD_dispatch_table_thunk; + epoxy_glGetPerfQueryDataINTEL = epoxy_glGetPerfQueryDataINTEL_dispatch_table_thunk; + epoxy_glGetPerfQueryIdByNameINTEL = epoxy_glGetPerfQueryIdByNameINTEL_dispatch_table_thunk; + epoxy_glGetPerfQueryInfoINTEL = epoxy_glGetPerfQueryInfoINTEL_dispatch_table_thunk; + epoxy_glGetPixelMapfv = epoxy_glGetPixelMapfv_dispatch_table_thunk; + epoxy_glGetPixelMapuiv = epoxy_glGetPixelMapuiv_dispatch_table_thunk; + epoxy_glGetPixelMapusv = epoxy_glGetPixelMapusv_dispatch_table_thunk; + epoxy_glGetPixelMapxv = epoxy_glGetPixelMapxv_dispatch_table_thunk; + epoxy_glGetPixelTexGenParameterfvSGIS = epoxy_glGetPixelTexGenParameterfvSGIS_dispatch_table_thunk; + epoxy_glGetPixelTexGenParameterivSGIS = epoxy_glGetPixelTexGenParameterivSGIS_dispatch_table_thunk; + epoxy_glGetPixelTransformParameterfvEXT = epoxy_glGetPixelTransformParameterfvEXT_dispatch_table_thunk; + epoxy_glGetPixelTransformParameterivEXT = epoxy_glGetPixelTransformParameterivEXT_dispatch_table_thunk; + epoxy_glGetPointerIndexedvEXT = epoxy_glGetPointerIndexedvEXT_dispatch_table_thunk; + epoxy_glGetPointeri_vEXT = epoxy_glGetPointeri_vEXT_dispatch_table_thunk; + epoxy_glGetPointerv = epoxy_glGetPointerv_dispatch_table_thunk; + epoxy_glGetPointervEXT = epoxy_glGetPointervEXT_dispatch_table_thunk; + epoxy_glGetPointervKHR = epoxy_glGetPointervKHR_dispatch_table_thunk; + epoxy_glGetPolygonStipple = epoxy_glGetPolygonStipple_dispatch_table_thunk; + epoxy_glGetProgramBinary = epoxy_glGetProgramBinary_dispatch_table_thunk; + epoxy_glGetProgramBinaryOES = epoxy_glGetProgramBinaryOES_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterIivNV = epoxy_glGetProgramEnvParameterIivNV_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterIuivNV = epoxy_glGetProgramEnvParameterIuivNV_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterdvARB = epoxy_glGetProgramEnvParameterdvARB_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterfvARB = epoxy_glGetProgramEnvParameterfvARB_dispatch_table_thunk; + epoxy_glGetProgramInfoLog = epoxy_glGetProgramInfoLog_dispatch_table_thunk; + epoxy_glGetProgramInterfaceiv = epoxy_glGetProgramInterfaceiv_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterIivNV = epoxy_glGetProgramLocalParameterIivNV_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterIuivNV = epoxy_glGetProgramLocalParameterIuivNV_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterdvARB = epoxy_glGetProgramLocalParameterdvARB_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterfvARB = epoxy_glGetProgramLocalParameterfvARB_dispatch_table_thunk; + epoxy_glGetProgramNamedParameterdvNV = epoxy_glGetProgramNamedParameterdvNV_dispatch_table_thunk; + epoxy_glGetProgramNamedParameterfvNV = epoxy_glGetProgramNamedParameterfvNV_dispatch_table_thunk; + epoxy_glGetProgramParameterdvNV = epoxy_glGetProgramParameterdvNV_dispatch_table_thunk; + epoxy_glGetProgramParameterfvNV = epoxy_glGetProgramParameterfvNV_dispatch_table_thunk; + epoxy_glGetProgramPipelineInfoLog = epoxy_glGetProgramPipelineInfoLog_dispatch_table_thunk; + epoxy_glGetProgramPipelineInfoLogEXT = epoxy_glGetProgramPipelineInfoLogEXT_dispatch_table_thunk; + epoxy_glGetProgramPipelineiv = epoxy_glGetProgramPipelineiv_dispatch_table_thunk; + epoxy_glGetProgramPipelineivEXT = epoxy_glGetProgramPipelineivEXT_dispatch_table_thunk; + epoxy_glGetProgramResourceIndex = epoxy_glGetProgramResourceIndex_dispatch_table_thunk; + epoxy_glGetProgramResourceLocation = epoxy_glGetProgramResourceLocation_dispatch_table_thunk; + epoxy_glGetProgramResourceLocationIndex = epoxy_glGetProgramResourceLocationIndex_dispatch_table_thunk; + epoxy_glGetProgramResourceLocationIndexEXT = epoxy_glGetProgramResourceLocationIndexEXT_dispatch_table_thunk; + epoxy_glGetProgramResourceName = epoxy_glGetProgramResourceName_dispatch_table_thunk; + epoxy_glGetProgramResourcefvNV = epoxy_glGetProgramResourcefvNV_dispatch_table_thunk; + epoxy_glGetProgramResourceiv = epoxy_glGetProgramResourceiv_dispatch_table_thunk; + epoxy_glGetProgramStageiv = epoxy_glGetProgramStageiv_dispatch_table_thunk; + epoxy_glGetProgramStringARB = epoxy_glGetProgramStringARB_dispatch_table_thunk; + epoxy_glGetProgramStringNV = epoxy_glGetProgramStringNV_dispatch_table_thunk; + epoxy_glGetProgramSubroutineParameteruivNV = epoxy_glGetProgramSubroutineParameteruivNV_dispatch_table_thunk; + epoxy_glGetProgramiv = epoxy_glGetProgramiv_dispatch_table_thunk; + epoxy_glGetProgramivARB = epoxy_glGetProgramivARB_dispatch_table_thunk; + epoxy_glGetProgramivNV = epoxy_glGetProgramivNV_dispatch_table_thunk; + epoxy_glGetQueryBufferObjecti64v = epoxy_glGetQueryBufferObjecti64v_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectiv = epoxy_glGetQueryBufferObjectiv_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectui64v = epoxy_glGetQueryBufferObjectui64v_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectuiv = epoxy_glGetQueryBufferObjectuiv_dispatch_table_thunk; + epoxy_glGetQueryIndexediv = epoxy_glGetQueryIndexediv_dispatch_table_thunk; + epoxy_glGetQueryObjecti64v = epoxy_glGetQueryObjecti64v_dispatch_table_thunk; + epoxy_glGetQueryObjecti64vEXT = epoxy_glGetQueryObjecti64vEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectiv = epoxy_glGetQueryObjectiv_dispatch_table_thunk; + epoxy_glGetQueryObjectivARB = epoxy_glGetQueryObjectivARB_dispatch_table_thunk; + epoxy_glGetQueryObjectivEXT = epoxy_glGetQueryObjectivEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectui64v = epoxy_glGetQueryObjectui64v_dispatch_table_thunk; + epoxy_glGetQueryObjectui64vEXT = epoxy_glGetQueryObjectui64vEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectuiv = epoxy_glGetQueryObjectuiv_dispatch_table_thunk; + epoxy_glGetQueryObjectuivARB = epoxy_glGetQueryObjectuivARB_dispatch_table_thunk; + epoxy_glGetQueryObjectuivEXT = epoxy_glGetQueryObjectuivEXT_dispatch_table_thunk; + epoxy_glGetQueryiv = epoxy_glGetQueryiv_dispatch_table_thunk; + epoxy_glGetQueryivARB = epoxy_glGetQueryivARB_dispatch_table_thunk; + epoxy_glGetQueryivEXT = epoxy_glGetQueryivEXT_dispatch_table_thunk; + epoxy_glGetRenderbufferParameteriv = epoxy_glGetRenderbufferParameteriv_dispatch_table_thunk; + epoxy_glGetRenderbufferParameterivEXT = epoxy_glGetRenderbufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetRenderbufferParameterivOES = epoxy_glGetRenderbufferParameterivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterIiv = epoxy_glGetSamplerParameterIiv_dispatch_table_thunk; + epoxy_glGetSamplerParameterIivEXT = epoxy_glGetSamplerParameterIivEXT_dispatch_table_thunk; + epoxy_glGetSamplerParameterIivOES = epoxy_glGetSamplerParameterIivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuiv = epoxy_glGetSamplerParameterIuiv_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuivEXT = epoxy_glGetSamplerParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuivOES = epoxy_glGetSamplerParameterIuivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterfv = epoxy_glGetSamplerParameterfv_dispatch_table_thunk; + epoxy_glGetSamplerParameteriv = epoxy_glGetSamplerParameteriv_dispatch_table_thunk; + epoxy_glGetSeparableFilter = epoxy_glGetSeparableFilter_dispatch_table_thunk; + epoxy_glGetSeparableFilterEXT = epoxy_glGetSeparableFilterEXT_dispatch_table_thunk; + epoxy_glGetShaderInfoLog = epoxy_glGetShaderInfoLog_dispatch_table_thunk; + epoxy_glGetShaderPrecisionFormat = epoxy_glGetShaderPrecisionFormat_dispatch_table_thunk; + epoxy_glGetShaderSource = epoxy_glGetShaderSource_dispatch_table_thunk; + epoxy_glGetShaderSourceARB = epoxy_glGetShaderSourceARB_dispatch_table_thunk; + epoxy_glGetShaderiv = epoxy_glGetShaderiv_dispatch_table_thunk; + epoxy_glGetSharpenTexFuncSGIS = epoxy_glGetSharpenTexFuncSGIS_dispatch_table_thunk; + epoxy_glGetStageIndexNV = epoxy_glGetStageIndexNV_dispatch_table_thunk; + epoxy_glGetString = epoxy_glGetString_dispatch_table_thunk; + epoxy_glGetStringi = epoxy_glGetStringi_dispatch_table_thunk; + epoxy_glGetSubroutineIndex = epoxy_glGetSubroutineIndex_dispatch_table_thunk; + epoxy_glGetSubroutineUniformLocation = epoxy_glGetSubroutineUniformLocation_dispatch_table_thunk; + epoxy_glGetSynciv = epoxy_glGetSynciv_dispatch_table_thunk; + epoxy_glGetSyncivAPPLE = epoxy_glGetSyncivAPPLE_dispatch_table_thunk; + epoxy_glGetTexBumpParameterfvATI = epoxy_glGetTexBumpParameterfvATI_dispatch_table_thunk; + epoxy_glGetTexBumpParameterivATI = epoxy_glGetTexBumpParameterivATI_dispatch_table_thunk; + epoxy_glGetTexEnvfv = epoxy_glGetTexEnvfv_dispatch_table_thunk; + epoxy_glGetTexEnviv = epoxy_glGetTexEnviv_dispatch_table_thunk; + epoxy_glGetTexEnvxv = epoxy_glGetTexEnvxv_dispatch_table_thunk; + epoxy_glGetTexEnvxvOES = epoxy_glGetTexEnvxvOES_dispatch_table_thunk; + epoxy_glGetTexFilterFuncSGIS = epoxy_glGetTexFilterFuncSGIS_dispatch_table_thunk; + epoxy_glGetTexGendv = epoxy_glGetTexGendv_dispatch_table_thunk; + epoxy_glGetTexGenfv = epoxy_glGetTexGenfv_dispatch_table_thunk; + epoxy_glGetTexGenfvOES = epoxy_glGetTexGenfvOES_dispatch_table_thunk; + epoxy_glGetTexGeniv = epoxy_glGetTexGeniv_dispatch_table_thunk; + epoxy_glGetTexGenivOES = epoxy_glGetTexGenivOES_dispatch_table_thunk; + epoxy_glGetTexGenxvOES = epoxy_glGetTexGenxvOES_dispatch_table_thunk; + epoxy_glGetTexImage = epoxy_glGetTexImage_dispatch_table_thunk; + epoxy_glGetTexLevelParameterfv = epoxy_glGetTexLevelParameterfv_dispatch_table_thunk; + epoxy_glGetTexLevelParameteriv = epoxy_glGetTexLevelParameteriv_dispatch_table_thunk; + epoxy_glGetTexLevelParameterxvOES = epoxy_glGetTexLevelParameterxvOES_dispatch_table_thunk; + epoxy_glGetTexParameterIiv = epoxy_glGetTexParameterIiv_dispatch_table_thunk; + epoxy_glGetTexParameterIivEXT = epoxy_glGetTexParameterIivEXT_dispatch_table_thunk; + epoxy_glGetTexParameterIivOES = epoxy_glGetTexParameterIivOES_dispatch_table_thunk; + epoxy_glGetTexParameterIuiv = epoxy_glGetTexParameterIuiv_dispatch_table_thunk; + epoxy_glGetTexParameterIuivEXT = epoxy_glGetTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetTexParameterIuivOES = epoxy_glGetTexParameterIuivOES_dispatch_table_thunk; + epoxy_glGetTexParameterPointervAPPLE = epoxy_glGetTexParameterPointervAPPLE_dispatch_table_thunk; + epoxy_glGetTexParameterfv = epoxy_glGetTexParameterfv_dispatch_table_thunk; + epoxy_glGetTexParameteriv = epoxy_glGetTexParameteriv_dispatch_table_thunk; + epoxy_glGetTexParameterxv = epoxy_glGetTexParameterxv_dispatch_table_thunk; + epoxy_glGetTexParameterxvOES = epoxy_glGetTexParameterxvOES_dispatch_table_thunk; + epoxy_glGetTextureHandleARB = epoxy_glGetTextureHandleARB_dispatch_table_thunk; + epoxy_glGetTextureHandleNV = epoxy_glGetTextureHandleNV_dispatch_table_thunk; + epoxy_glGetTextureImage = epoxy_glGetTextureImage_dispatch_table_thunk; + epoxy_glGetTextureImageEXT = epoxy_glGetTextureImageEXT_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterfv = epoxy_glGetTextureLevelParameterfv_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterfvEXT = epoxy_glGetTextureLevelParameterfvEXT_dispatch_table_thunk; + epoxy_glGetTextureLevelParameteriv = epoxy_glGetTextureLevelParameteriv_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterivEXT = epoxy_glGetTextureLevelParameterivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterIiv = epoxy_glGetTextureParameterIiv_dispatch_table_thunk; + epoxy_glGetTextureParameterIivEXT = epoxy_glGetTextureParameterIivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterIuiv = epoxy_glGetTextureParameterIuiv_dispatch_table_thunk; + epoxy_glGetTextureParameterIuivEXT = epoxy_glGetTextureParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterfv = epoxy_glGetTextureParameterfv_dispatch_table_thunk; + epoxy_glGetTextureParameterfvEXT = epoxy_glGetTextureParameterfvEXT_dispatch_table_thunk; + epoxy_glGetTextureParameteriv = epoxy_glGetTextureParameteriv_dispatch_table_thunk; + epoxy_glGetTextureParameterivEXT = epoxy_glGetTextureParameterivEXT_dispatch_table_thunk; + epoxy_glGetTextureSamplerHandleARB = epoxy_glGetTextureSamplerHandleARB_dispatch_table_thunk; + epoxy_glGetTextureSamplerHandleNV = epoxy_glGetTextureSamplerHandleNV_dispatch_table_thunk; + epoxy_glGetTextureSubImage = epoxy_glGetTextureSubImage_dispatch_table_thunk; + epoxy_glGetTrackMatrixivNV = epoxy_glGetTrackMatrixivNV_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVarying = epoxy_glGetTransformFeedbackVarying_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVaryingEXT = epoxy_glGetTransformFeedbackVaryingEXT_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVaryingNV = epoxy_glGetTransformFeedbackVaryingNV_dispatch_table_thunk; + epoxy_glGetTransformFeedbacki64_v = epoxy_glGetTransformFeedbacki64_v_dispatch_table_thunk; + epoxy_glGetTransformFeedbacki_v = epoxy_glGetTransformFeedbacki_v_dispatch_table_thunk; + epoxy_glGetTransformFeedbackiv = epoxy_glGetTransformFeedbackiv_dispatch_table_thunk; + epoxy_glGetTranslatedShaderSourceANGLE = epoxy_glGetTranslatedShaderSourceANGLE_dispatch_table_thunk; + epoxy_glGetUniformBlockIndex = epoxy_glGetUniformBlockIndex_dispatch_table_thunk; + epoxy_glGetUniformBufferSizeEXT = epoxy_glGetUniformBufferSizeEXT_dispatch_table_thunk; + epoxy_glGetUniformIndices = epoxy_glGetUniformIndices_dispatch_table_thunk; + epoxy_glGetUniformLocation = epoxy_glGetUniformLocation_dispatch_table_thunk; + epoxy_glGetUniformLocationARB = epoxy_glGetUniformLocationARB_dispatch_table_thunk; + epoxy_glGetUniformOffsetEXT = epoxy_glGetUniformOffsetEXT_dispatch_table_thunk; + epoxy_glGetUniformSubroutineuiv = epoxy_glGetUniformSubroutineuiv_dispatch_table_thunk; + epoxy_glGetUniformdv = epoxy_glGetUniformdv_dispatch_table_thunk; + epoxy_glGetUniformfv = epoxy_glGetUniformfv_dispatch_table_thunk; + epoxy_glGetUniformfvARB = epoxy_glGetUniformfvARB_dispatch_table_thunk; + epoxy_glGetUniformi64vARB = epoxy_glGetUniformi64vARB_dispatch_table_thunk; + epoxy_glGetUniformi64vNV = epoxy_glGetUniformi64vNV_dispatch_table_thunk; + epoxy_glGetUniformiv = epoxy_glGetUniformiv_dispatch_table_thunk; + epoxy_glGetUniformivARB = epoxy_glGetUniformivARB_dispatch_table_thunk; + epoxy_glGetUniformui64vARB = epoxy_glGetUniformui64vARB_dispatch_table_thunk; + epoxy_glGetUniformui64vNV = epoxy_glGetUniformui64vNV_dispatch_table_thunk; + epoxy_glGetUniformuiv = epoxy_glGetUniformuiv_dispatch_table_thunk; + epoxy_glGetUniformuivEXT = epoxy_glGetUniformuivEXT_dispatch_table_thunk; + epoxy_glGetVariantArrayObjectfvATI = epoxy_glGetVariantArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetVariantArrayObjectivATI = epoxy_glGetVariantArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetVariantBooleanvEXT = epoxy_glGetVariantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetVariantFloatvEXT = epoxy_glGetVariantFloatvEXT_dispatch_table_thunk; + epoxy_glGetVariantIntegervEXT = epoxy_glGetVariantIntegervEXT_dispatch_table_thunk; + epoxy_glGetVariantPointervEXT = epoxy_glGetVariantPointervEXT_dispatch_table_thunk; + epoxy_glGetVaryingLocationNV = epoxy_glGetVaryingLocationNV_dispatch_table_thunk; + epoxy_glGetVertexArrayIndexed64iv = epoxy_glGetVertexArrayIndexed64iv_dispatch_table_thunk; + epoxy_glGetVertexArrayIndexediv = epoxy_glGetVertexArrayIndexediv_dispatch_table_thunk; + epoxy_glGetVertexArrayIntegeri_vEXT = epoxy_glGetVertexArrayIntegeri_vEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayIntegervEXT = epoxy_glGetVertexArrayIntegervEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayPointeri_vEXT = epoxy_glGetVertexArrayPointeri_vEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayPointervEXT = epoxy_glGetVertexArrayPointervEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayiv = epoxy_glGetVertexArrayiv_dispatch_table_thunk; + epoxy_glGetVertexAttribArrayObjectfvATI = epoxy_glGetVertexAttribArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetVertexAttribArrayObjectivATI = epoxy_glGetVertexAttribArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetVertexAttribIiv = epoxy_glGetVertexAttribIiv_dispatch_table_thunk; + epoxy_glGetVertexAttribIivEXT = epoxy_glGetVertexAttribIivEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribIuiv = epoxy_glGetVertexAttribIuiv_dispatch_table_thunk; + epoxy_glGetVertexAttribIuivEXT = epoxy_glGetVertexAttribIuivEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribLdv = epoxy_glGetVertexAttribLdv_dispatch_table_thunk; + epoxy_glGetVertexAttribLdvEXT = epoxy_glGetVertexAttribLdvEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribLi64vNV = epoxy_glGetVertexAttribLi64vNV_dispatch_table_thunk; + epoxy_glGetVertexAttribLui64vARB = epoxy_glGetVertexAttribLui64vARB_dispatch_table_thunk; + epoxy_glGetVertexAttribLui64vNV = epoxy_glGetVertexAttribLui64vNV_dispatch_table_thunk; + epoxy_glGetVertexAttribPointerv = epoxy_glGetVertexAttribPointerv_dispatch_table_thunk; + epoxy_glGetVertexAttribPointervARB = epoxy_glGetVertexAttribPointervARB_dispatch_table_thunk; + epoxy_glGetVertexAttribPointervNV = epoxy_glGetVertexAttribPointervNV_dispatch_table_thunk; + epoxy_glGetVertexAttribdv = epoxy_glGetVertexAttribdv_dispatch_table_thunk; + epoxy_glGetVertexAttribdvARB = epoxy_glGetVertexAttribdvARB_dispatch_table_thunk; + epoxy_glGetVertexAttribdvNV = epoxy_glGetVertexAttribdvNV_dispatch_table_thunk; + epoxy_glGetVertexAttribfv = epoxy_glGetVertexAttribfv_dispatch_table_thunk; + epoxy_glGetVertexAttribfvARB = epoxy_glGetVertexAttribfvARB_dispatch_table_thunk; + epoxy_glGetVertexAttribfvNV = epoxy_glGetVertexAttribfvNV_dispatch_table_thunk; + epoxy_glGetVertexAttribiv = epoxy_glGetVertexAttribiv_dispatch_table_thunk; + epoxy_glGetVertexAttribivARB = epoxy_glGetVertexAttribivARB_dispatch_table_thunk; + epoxy_glGetVertexAttribivNV = epoxy_glGetVertexAttribivNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamdvNV = epoxy_glGetVideoCaptureStreamdvNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamfvNV = epoxy_glGetVideoCaptureStreamfvNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamivNV = epoxy_glGetVideoCaptureStreamivNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureivNV = epoxy_glGetVideoCaptureivNV_dispatch_table_thunk; + epoxy_glGetVideoi64vNV = epoxy_glGetVideoi64vNV_dispatch_table_thunk; + epoxy_glGetVideoivNV = epoxy_glGetVideoivNV_dispatch_table_thunk; + epoxy_glGetVideoui64vNV = epoxy_glGetVideoui64vNV_dispatch_table_thunk; + epoxy_glGetVideouivNV = epoxy_glGetVideouivNV_dispatch_table_thunk; + epoxy_glGetnColorTable = epoxy_glGetnColorTable_dispatch_table_thunk; + epoxy_glGetnColorTableARB = epoxy_glGetnColorTableARB_dispatch_table_thunk; + epoxy_glGetnCompressedTexImage = epoxy_glGetnCompressedTexImage_dispatch_table_thunk; + epoxy_glGetnCompressedTexImageARB = epoxy_glGetnCompressedTexImageARB_dispatch_table_thunk; + epoxy_glGetnConvolutionFilter = epoxy_glGetnConvolutionFilter_dispatch_table_thunk; + epoxy_glGetnConvolutionFilterARB = epoxy_glGetnConvolutionFilterARB_dispatch_table_thunk; + epoxy_glGetnHistogram = epoxy_glGetnHistogram_dispatch_table_thunk; + epoxy_glGetnHistogramARB = epoxy_glGetnHistogramARB_dispatch_table_thunk; + epoxy_glGetnMapdv = epoxy_glGetnMapdv_dispatch_table_thunk; + epoxy_glGetnMapdvARB = epoxy_glGetnMapdvARB_dispatch_table_thunk; + epoxy_glGetnMapfv = epoxy_glGetnMapfv_dispatch_table_thunk; + epoxy_glGetnMapfvARB = epoxy_glGetnMapfvARB_dispatch_table_thunk; + epoxy_glGetnMapiv = epoxy_glGetnMapiv_dispatch_table_thunk; + epoxy_glGetnMapivARB = epoxy_glGetnMapivARB_dispatch_table_thunk; + epoxy_glGetnMinmax = epoxy_glGetnMinmax_dispatch_table_thunk; + epoxy_glGetnMinmaxARB = epoxy_glGetnMinmaxARB_dispatch_table_thunk; + epoxy_glGetnPixelMapfv = epoxy_glGetnPixelMapfv_dispatch_table_thunk; + epoxy_glGetnPixelMapfvARB = epoxy_glGetnPixelMapfvARB_dispatch_table_thunk; + epoxy_glGetnPixelMapuiv = epoxy_glGetnPixelMapuiv_dispatch_table_thunk; + epoxy_glGetnPixelMapuivARB = epoxy_glGetnPixelMapuivARB_dispatch_table_thunk; + epoxy_glGetnPixelMapusv = epoxy_glGetnPixelMapusv_dispatch_table_thunk; + epoxy_glGetnPixelMapusvARB = epoxy_glGetnPixelMapusvARB_dispatch_table_thunk; + epoxy_glGetnPolygonStipple = epoxy_glGetnPolygonStipple_dispatch_table_thunk; + epoxy_glGetnPolygonStippleARB = epoxy_glGetnPolygonStippleARB_dispatch_table_thunk; + epoxy_glGetnSeparableFilter = epoxy_glGetnSeparableFilter_dispatch_table_thunk; + epoxy_glGetnSeparableFilterARB = epoxy_glGetnSeparableFilterARB_dispatch_table_thunk; + epoxy_glGetnTexImage = epoxy_glGetnTexImage_dispatch_table_thunk; + epoxy_glGetnTexImageARB = epoxy_glGetnTexImageARB_dispatch_table_thunk; + epoxy_glGetnUniformdv = epoxy_glGetnUniformdv_dispatch_table_thunk; + epoxy_glGetnUniformdvARB = epoxy_glGetnUniformdvARB_dispatch_table_thunk; + epoxy_glGetnUniformfv = epoxy_glGetnUniformfv_dispatch_table_thunk; + epoxy_glGetnUniformfvARB = epoxy_glGetnUniformfvARB_dispatch_table_thunk; + epoxy_glGetnUniformfvEXT = epoxy_glGetnUniformfvEXT_dispatch_table_thunk; + epoxy_glGetnUniformfvKHR = epoxy_glGetnUniformfvKHR_dispatch_table_thunk; + epoxy_glGetnUniformi64vARB = epoxy_glGetnUniformi64vARB_dispatch_table_thunk; + epoxy_glGetnUniformiv = epoxy_glGetnUniformiv_dispatch_table_thunk; + epoxy_glGetnUniformivARB = epoxy_glGetnUniformivARB_dispatch_table_thunk; + epoxy_glGetnUniformivEXT = epoxy_glGetnUniformivEXT_dispatch_table_thunk; + epoxy_glGetnUniformivKHR = epoxy_glGetnUniformivKHR_dispatch_table_thunk; + epoxy_glGetnUniformui64vARB = epoxy_glGetnUniformui64vARB_dispatch_table_thunk; + epoxy_glGetnUniformuiv = epoxy_glGetnUniformuiv_dispatch_table_thunk; + epoxy_glGetnUniformuivARB = epoxy_glGetnUniformuivARB_dispatch_table_thunk; + epoxy_glGetnUniformuivKHR = epoxy_glGetnUniformuivKHR_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorbSUN = epoxy_glGlobalAlphaFactorbSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactordSUN = epoxy_glGlobalAlphaFactordSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorfSUN = epoxy_glGlobalAlphaFactorfSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactoriSUN = epoxy_glGlobalAlphaFactoriSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorsSUN = epoxy_glGlobalAlphaFactorsSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorubSUN = epoxy_glGlobalAlphaFactorubSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactoruiSUN = epoxy_glGlobalAlphaFactoruiSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorusSUN = epoxy_glGlobalAlphaFactorusSUN_dispatch_table_thunk; + epoxy_glHint = epoxy_glHint_dispatch_table_thunk; + epoxy_glHintPGI = epoxy_glHintPGI_dispatch_table_thunk; + epoxy_glHistogram = epoxy_glHistogram_dispatch_table_thunk; + epoxy_glHistogramEXT = epoxy_glHistogramEXT_dispatch_table_thunk; + epoxy_glIglooInterfaceSGIX = epoxy_glIglooInterfaceSGIX_dispatch_table_thunk; + epoxy_glImageTransformParameterfHP = epoxy_glImageTransformParameterfHP_dispatch_table_thunk; + epoxy_glImageTransformParameterfvHP = epoxy_glImageTransformParameterfvHP_dispatch_table_thunk; + epoxy_glImageTransformParameteriHP = epoxy_glImageTransformParameteriHP_dispatch_table_thunk; + epoxy_glImageTransformParameterivHP = epoxy_glImageTransformParameterivHP_dispatch_table_thunk; + epoxy_glImportSyncEXT = epoxy_glImportSyncEXT_dispatch_table_thunk; + epoxy_glIndexFormatNV = epoxy_glIndexFormatNV_dispatch_table_thunk; + epoxy_glIndexFuncEXT = epoxy_glIndexFuncEXT_dispatch_table_thunk; + epoxy_glIndexMask = epoxy_glIndexMask_dispatch_table_thunk; + epoxy_glIndexMaterialEXT = epoxy_glIndexMaterialEXT_dispatch_table_thunk; + epoxy_glIndexPointer = epoxy_glIndexPointer_dispatch_table_thunk; + epoxy_glIndexPointerEXT = epoxy_glIndexPointerEXT_dispatch_table_thunk; + epoxy_glIndexPointerListIBM = epoxy_glIndexPointerListIBM_dispatch_table_thunk; + epoxy_glIndexd = epoxy_glIndexd_dispatch_table_thunk; + epoxy_glIndexdv = epoxy_glIndexdv_dispatch_table_thunk; + epoxy_glIndexf = epoxy_glIndexf_dispatch_table_thunk; + epoxy_glIndexfv = epoxy_glIndexfv_dispatch_table_thunk; + epoxy_glIndexi = epoxy_glIndexi_dispatch_table_thunk; + epoxy_glIndexiv = epoxy_glIndexiv_dispatch_table_thunk; + epoxy_glIndexs = epoxy_glIndexs_dispatch_table_thunk; + epoxy_glIndexsv = epoxy_glIndexsv_dispatch_table_thunk; + epoxy_glIndexub = epoxy_glIndexub_dispatch_table_thunk; + epoxy_glIndexubv = epoxy_glIndexubv_dispatch_table_thunk; + epoxy_glIndexxOES = epoxy_glIndexxOES_dispatch_table_thunk; + epoxy_glIndexxvOES = epoxy_glIndexxvOES_dispatch_table_thunk; + epoxy_glInitNames = epoxy_glInitNames_dispatch_table_thunk; + epoxy_glInsertComponentEXT = epoxy_glInsertComponentEXT_dispatch_table_thunk; + epoxy_glInsertEventMarkerEXT = epoxy_glInsertEventMarkerEXT_dispatch_table_thunk; + epoxy_glInstrumentsBufferSGIX = epoxy_glInstrumentsBufferSGIX_dispatch_table_thunk; + epoxy_glInterleavedArrays = epoxy_glInterleavedArrays_dispatch_table_thunk; + epoxy_glInterpolatePathsNV = epoxy_glInterpolatePathsNV_dispatch_table_thunk; + epoxy_glInvalidateBufferData = epoxy_glInvalidateBufferData_dispatch_table_thunk; + epoxy_glInvalidateBufferSubData = epoxy_glInvalidateBufferSubData_dispatch_table_thunk; + epoxy_glInvalidateFramebuffer = epoxy_glInvalidateFramebuffer_dispatch_table_thunk; + epoxy_glInvalidateNamedFramebufferData = epoxy_glInvalidateNamedFramebufferData_dispatch_table_thunk; + epoxy_glInvalidateNamedFramebufferSubData = epoxy_glInvalidateNamedFramebufferSubData_dispatch_table_thunk; + epoxy_glInvalidateSubFramebuffer = epoxy_glInvalidateSubFramebuffer_dispatch_table_thunk; + epoxy_glInvalidateTexImage = epoxy_glInvalidateTexImage_dispatch_table_thunk; + epoxy_glInvalidateTexSubImage = epoxy_glInvalidateTexSubImage_dispatch_table_thunk; + epoxy_glIsAsyncMarkerSGIX = epoxy_glIsAsyncMarkerSGIX_dispatch_table_thunk; + epoxy_glIsBuffer = epoxy_glIsBuffer_dispatch_table_thunk; + epoxy_glIsBufferARB = epoxy_glIsBufferARB_dispatch_table_thunk; + epoxy_glIsBufferResidentNV = epoxy_glIsBufferResidentNV_dispatch_table_thunk; + epoxy_glIsCommandListNV = epoxy_glIsCommandListNV_dispatch_table_thunk; + epoxy_glIsEnabled = epoxy_glIsEnabled_dispatch_table_thunk; + epoxy_glIsEnabledIndexedEXT = epoxy_glIsEnabledIndexedEXT_dispatch_table_thunk; + epoxy_glIsEnabledi = epoxy_glIsEnabledi_dispatch_table_thunk; + epoxy_glIsEnablediEXT = epoxy_glIsEnablediEXT_dispatch_table_thunk; + epoxy_glIsEnablediNV = epoxy_glIsEnablediNV_dispatch_table_thunk; + epoxy_glIsEnablediOES = epoxy_glIsEnablediOES_dispatch_table_thunk; + epoxy_glIsFenceAPPLE = epoxy_glIsFenceAPPLE_dispatch_table_thunk; + epoxy_glIsFenceNV = epoxy_glIsFenceNV_dispatch_table_thunk; + epoxy_glIsFramebuffer = epoxy_glIsFramebuffer_dispatch_table_thunk; + epoxy_glIsFramebufferEXT = epoxy_glIsFramebufferEXT_dispatch_table_thunk; + epoxy_glIsFramebufferOES = epoxy_glIsFramebufferOES_dispatch_table_thunk; + epoxy_glIsImageHandleResidentARB = epoxy_glIsImageHandleResidentARB_dispatch_table_thunk; + epoxy_glIsImageHandleResidentNV = epoxy_glIsImageHandleResidentNV_dispatch_table_thunk; + epoxy_glIsList = epoxy_glIsList_dispatch_table_thunk; + epoxy_glIsNameAMD = epoxy_glIsNameAMD_dispatch_table_thunk; + epoxy_glIsNamedBufferResidentNV = epoxy_glIsNamedBufferResidentNV_dispatch_table_thunk; + epoxy_glIsNamedStringARB = epoxy_glIsNamedStringARB_dispatch_table_thunk; + epoxy_glIsObjectBufferATI = epoxy_glIsObjectBufferATI_dispatch_table_thunk; + epoxy_glIsOcclusionQueryNV = epoxy_glIsOcclusionQueryNV_dispatch_table_thunk; + epoxy_glIsPathNV = epoxy_glIsPathNV_dispatch_table_thunk; + epoxy_glIsPointInFillPathNV = epoxy_glIsPointInFillPathNV_dispatch_table_thunk; + epoxy_glIsPointInStrokePathNV = epoxy_glIsPointInStrokePathNV_dispatch_table_thunk; + epoxy_glIsProgram = epoxy_glIsProgram_dispatch_table_thunk; + epoxy_glIsProgramARB = epoxy_glIsProgramARB_dispatch_table_thunk; + epoxy_glIsProgramNV = epoxy_glIsProgramNV_dispatch_table_thunk; + epoxy_glIsProgramPipeline = epoxy_glIsProgramPipeline_dispatch_table_thunk; + epoxy_glIsProgramPipelineEXT = epoxy_glIsProgramPipelineEXT_dispatch_table_thunk; + epoxy_glIsQuery = epoxy_glIsQuery_dispatch_table_thunk; + epoxy_glIsQueryARB = epoxy_glIsQueryARB_dispatch_table_thunk; + epoxy_glIsQueryEXT = epoxy_glIsQueryEXT_dispatch_table_thunk; + epoxy_glIsRenderbuffer = epoxy_glIsRenderbuffer_dispatch_table_thunk; + epoxy_glIsRenderbufferEXT = epoxy_glIsRenderbufferEXT_dispatch_table_thunk; + epoxy_glIsRenderbufferOES = epoxy_glIsRenderbufferOES_dispatch_table_thunk; + epoxy_glIsSampler = epoxy_glIsSampler_dispatch_table_thunk; + epoxy_glIsShader = epoxy_glIsShader_dispatch_table_thunk; + epoxy_glIsStateNV = epoxy_glIsStateNV_dispatch_table_thunk; + epoxy_glIsSync = epoxy_glIsSync_dispatch_table_thunk; + epoxy_glIsSyncAPPLE = epoxy_glIsSyncAPPLE_dispatch_table_thunk; + epoxy_glIsTexture = epoxy_glIsTexture_dispatch_table_thunk; + epoxy_glIsTextureEXT = epoxy_glIsTextureEXT_dispatch_table_thunk; + epoxy_glIsTextureHandleResidentARB = epoxy_glIsTextureHandleResidentARB_dispatch_table_thunk; + epoxy_glIsTextureHandleResidentNV = epoxy_glIsTextureHandleResidentNV_dispatch_table_thunk; + epoxy_glIsTransformFeedback = epoxy_glIsTransformFeedback_dispatch_table_thunk; + epoxy_glIsTransformFeedbackNV = epoxy_glIsTransformFeedbackNV_dispatch_table_thunk; + epoxy_glIsVariantEnabledEXT = epoxy_glIsVariantEnabledEXT_dispatch_table_thunk; + epoxy_glIsVertexArray = epoxy_glIsVertexArray_dispatch_table_thunk; + epoxy_glIsVertexArrayAPPLE = epoxy_glIsVertexArrayAPPLE_dispatch_table_thunk; + epoxy_glIsVertexArrayOES = epoxy_glIsVertexArrayOES_dispatch_table_thunk; + epoxy_glIsVertexAttribEnabledAPPLE = epoxy_glIsVertexAttribEnabledAPPLE_dispatch_table_thunk; + epoxy_glLabelObjectEXT = epoxy_glLabelObjectEXT_dispatch_table_thunk; + epoxy_glLightEnviSGIX = epoxy_glLightEnviSGIX_dispatch_table_thunk; + epoxy_glLightModelf = epoxy_glLightModelf_dispatch_table_thunk; + epoxy_glLightModelfv = epoxy_glLightModelfv_dispatch_table_thunk; + epoxy_glLightModeli = epoxy_glLightModeli_dispatch_table_thunk; + epoxy_glLightModeliv = epoxy_glLightModeliv_dispatch_table_thunk; + epoxy_glLightModelx = epoxy_glLightModelx_dispatch_table_thunk; + epoxy_glLightModelxOES = epoxy_glLightModelxOES_dispatch_table_thunk; + epoxy_glLightModelxv = epoxy_glLightModelxv_dispatch_table_thunk; + epoxy_glLightModelxvOES = epoxy_glLightModelxvOES_dispatch_table_thunk; + epoxy_glLightf = epoxy_glLightf_dispatch_table_thunk; + epoxy_glLightfv = epoxy_glLightfv_dispatch_table_thunk; + epoxy_glLighti = epoxy_glLighti_dispatch_table_thunk; + epoxy_glLightiv = epoxy_glLightiv_dispatch_table_thunk; + epoxy_glLightx = epoxy_glLightx_dispatch_table_thunk; + epoxy_glLightxOES = epoxy_glLightxOES_dispatch_table_thunk; + epoxy_glLightxv = epoxy_glLightxv_dispatch_table_thunk; + epoxy_glLightxvOES = epoxy_glLightxvOES_dispatch_table_thunk; + epoxy_glLineStipple = epoxy_glLineStipple_dispatch_table_thunk; + epoxy_glLineWidth = epoxy_glLineWidth_dispatch_table_thunk; + epoxy_glLineWidthx = epoxy_glLineWidthx_dispatch_table_thunk; + epoxy_glLineWidthxOES = epoxy_glLineWidthxOES_dispatch_table_thunk; + epoxy_glLinkProgram = epoxy_glLinkProgram_dispatch_table_thunk; + epoxy_glLinkProgramARB = epoxy_glLinkProgramARB_dispatch_table_thunk; + epoxy_glListBase = epoxy_glListBase_dispatch_table_thunk; + epoxy_glListDrawCommandsStatesClientNV = epoxy_glListDrawCommandsStatesClientNV_dispatch_table_thunk; + epoxy_glListParameterfSGIX = epoxy_glListParameterfSGIX_dispatch_table_thunk; + epoxy_glListParameterfvSGIX = epoxy_glListParameterfvSGIX_dispatch_table_thunk; + epoxy_glListParameteriSGIX = epoxy_glListParameteriSGIX_dispatch_table_thunk; + epoxy_glListParameterivSGIX = epoxy_glListParameterivSGIX_dispatch_table_thunk; + epoxy_glLoadIdentity = epoxy_glLoadIdentity_dispatch_table_thunk; + epoxy_glLoadIdentityDeformationMapSGIX = epoxy_glLoadIdentityDeformationMapSGIX_dispatch_table_thunk; + epoxy_glLoadMatrixd = epoxy_glLoadMatrixd_dispatch_table_thunk; + epoxy_glLoadMatrixf = epoxy_glLoadMatrixf_dispatch_table_thunk; + epoxy_glLoadMatrixx = epoxy_glLoadMatrixx_dispatch_table_thunk; + epoxy_glLoadMatrixxOES = epoxy_glLoadMatrixxOES_dispatch_table_thunk; + epoxy_glLoadName = epoxy_glLoadName_dispatch_table_thunk; + epoxy_glLoadPaletteFromModelViewMatrixOES = epoxy_glLoadPaletteFromModelViewMatrixOES_dispatch_table_thunk; + epoxy_glLoadProgramNV = epoxy_glLoadProgramNV_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixd = epoxy_glLoadTransposeMatrixd_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixdARB = epoxy_glLoadTransposeMatrixdARB_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixf = epoxy_glLoadTransposeMatrixf_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixfARB = epoxy_glLoadTransposeMatrixfARB_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixxOES = epoxy_glLoadTransposeMatrixxOES_dispatch_table_thunk; + epoxy_glLockArraysEXT = epoxy_glLockArraysEXT_dispatch_table_thunk; + epoxy_glLogicOp = epoxy_glLogicOp_dispatch_table_thunk; + epoxy_glMakeBufferNonResidentNV = epoxy_glMakeBufferNonResidentNV_dispatch_table_thunk; + epoxy_glMakeBufferResidentNV = epoxy_glMakeBufferResidentNV_dispatch_table_thunk; + epoxy_glMakeImageHandleNonResidentARB = epoxy_glMakeImageHandleNonResidentARB_dispatch_table_thunk; + epoxy_glMakeImageHandleNonResidentNV = epoxy_glMakeImageHandleNonResidentNV_dispatch_table_thunk; + epoxy_glMakeImageHandleResidentARB = epoxy_glMakeImageHandleResidentARB_dispatch_table_thunk; + epoxy_glMakeImageHandleResidentNV = epoxy_glMakeImageHandleResidentNV_dispatch_table_thunk; + epoxy_glMakeNamedBufferNonResidentNV = epoxy_glMakeNamedBufferNonResidentNV_dispatch_table_thunk; + epoxy_glMakeNamedBufferResidentNV = epoxy_glMakeNamedBufferResidentNV_dispatch_table_thunk; + epoxy_glMakeTextureHandleNonResidentARB = epoxy_glMakeTextureHandleNonResidentARB_dispatch_table_thunk; + epoxy_glMakeTextureHandleNonResidentNV = epoxy_glMakeTextureHandleNonResidentNV_dispatch_table_thunk; + epoxy_glMakeTextureHandleResidentARB = epoxy_glMakeTextureHandleResidentARB_dispatch_table_thunk; + epoxy_glMakeTextureHandleResidentNV = epoxy_glMakeTextureHandleResidentNV_dispatch_table_thunk; + epoxy_glMap1d = epoxy_glMap1d_dispatch_table_thunk; + epoxy_glMap1f = epoxy_glMap1f_dispatch_table_thunk; + epoxy_glMap1xOES = epoxy_glMap1xOES_dispatch_table_thunk; + epoxy_glMap2d = epoxy_glMap2d_dispatch_table_thunk; + epoxy_glMap2f = epoxy_glMap2f_dispatch_table_thunk; + epoxy_glMap2xOES = epoxy_glMap2xOES_dispatch_table_thunk; + epoxy_glMapBuffer = epoxy_glMapBuffer_dispatch_table_thunk; + epoxy_glMapBufferARB = epoxy_glMapBufferARB_dispatch_table_thunk; + epoxy_glMapBufferOES = epoxy_glMapBufferOES_dispatch_table_thunk; + epoxy_glMapBufferRange = epoxy_glMapBufferRange_dispatch_table_thunk; + epoxy_glMapBufferRangeEXT = epoxy_glMapBufferRangeEXT_dispatch_table_thunk; + epoxy_glMapControlPointsNV = epoxy_glMapControlPointsNV_dispatch_table_thunk; + epoxy_glMapGrid1d = epoxy_glMapGrid1d_dispatch_table_thunk; + epoxy_glMapGrid1f = epoxy_glMapGrid1f_dispatch_table_thunk; + epoxy_glMapGrid1xOES = epoxy_glMapGrid1xOES_dispatch_table_thunk; + epoxy_glMapGrid2d = epoxy_glMapGrid2d_dispatch_table_thunk; + epoxy_glMapGrid2f = epoxy_glMapGrid2f_dispatch_table_thunk; + epoxy_glMapGrid2xOES = epoxy_glMapGrid2xOES_dispatch_table_thunk; + epoxy_glMapNamedBuffer = epoxy_glMapNamedBuffer_dispatch_table_thunk; + epoxy_glMapNamedBufferEXT = epoxy_glMapNamedBufferEXT_dispatch_table_thunk; + epoxy_glMapNamedBufferRange = epoxy_glMapNamedBufferRange_dispatch_table_thunk; + epoxy_glMapNamedBufferRangeEXT = epoxy_glMapNamedBufferRangeEXT_dispatch_table_thunk; + epoxy_glMapObjectBufferATI = epoxy_glMapObjectBufferATI_dispatch_table_thunk; + epoxy_glMapParameterfvNV = epoxy_glMapParameterfvNV_dispatch_table_thunk; + epoxy_glMapParameterivNV = epoxy_glMapParameterivNV_dispatch_table_thunk; + epoxy_glMapTexture2DINTEL = epoxy_glMapTexture2DINTEL_dispatch_table_thunk; + epoxy_glMapVertexAttrib1dAPPLE = epoxy_glMapVertexAttrib1dAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib1fAPPLE = epoxy_glMapVertexAttrib1fAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib2dAPPLE = epoxy_glMapVertexAttrib2dAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib2fAPPLE = epoxy_glMapVertexAttrib2fAPPLE_dispatch_table_thunk; + epoxy_glMaterialf = epoxy_glMaterialf_dispatch_table_thunk; + epoxy_glMaterialfv = epoxy_glMaterialfv_dispatch_table_thunk; + epoxy_glMateriali = epoxy_glMateriali_dispatch_table_thunk; + epoxy_glMaterialiv = epoxy_glMaterialiv_dispatch_table_thunk; + epoxy_glMaterialx = epoxy_glMaterialx_dispatch_table_thunk; + epoxy_glMaterialxOES = epoxy_glMaterialxOES_dispatch_table_thunk; + epoxy_glMaterialxv = epoxy_glMaterialxv_dispatch_table_thunk; + epoxy_glMaterialxvOES = epoxy_glMaterialxvOES_dispatch_table_thunk; + epoxy_glMatrixFrustumEXT = epoxy_glMatrixFrustumEXT_dispatch_table_thunk; + epoxy_glMatrixIndexPointerARB = epoxy_glMatrixIndexPointerARB_dispatch_table_thunk; + epoxy_glMatrixIndexPointerOES = epoxy_glMatrixIndexPointerOES_dispatch_table_thunk; + epoxy_glMatrixIndexubvARB = epoxy_glMatrixIndexubvARB_dispatch_table_thunk; + epoxy_glMatrixIndexuivARB = epoxy_glMatrixIndexuivARB_dispatch_table_thunk; + epoxy_glMatrixIndexusvARB = epoxy_glMatrixIndexusvARB_dispatch_table_thunk; + epoxy_glMatrixLoad3x2fNV = epoxy_glMatrixLoad3x2fNV_dispatch_table_thunk; + epoxy_glMatrixLoad3x3fNV = epoxy_glMatrixLoad3x3fNV_dispatch_table_thunk; + epoxy_glMatrixLoadIdentityEXT = epoxy_glMatrixLoadIdentityEXT_dispatch_table_thunk; + epoxy_glMatrixLoadTranspose3x3fNV = epoxy_glMatrixLoadTranspose3x3fNV_dispatch_table_thunk; + epoxy_glMatrixLoadTransposedEXT = epoxy_glMatrixLoadTransposedEXT_dispatch_table_thunk; + epoxy_glMatrixLoadTransposefEXT = epoxy_glMatrixLoadTransposefEXT_dispatch_table_thunk; + epoxy_glMatrixLoaddEXT = epoxy_glMatrixLoaddEXT_dispatch_table_thunk; + epoxy_glMatrixLoadfEXT = epoxy_glMatrixLoadfEXT_dispatch_table_thunk; + epoxy_glMatrixMode = epoxy_glMatrixMode_dispatch_table_thunk; + epoxy_glMatrixMult3x2fNV = epoxy_glMatrixMult3x2fNV_dispatch_table_thunk; + epoxy_glMatrixMult3x3fNV = epoxy_glMatrixMult3x3fNV_dispatch_table_thunk; + epoxy_glMatrixMultTranspose3x3fNV = epoxy_glMatrixMultTranspose3x3fNV_dispatch_table_thunk; + epoxy_glMatrixMultTransposedEXT = epoxy_glMatrixMultTransposedEXT_dispatch_table_thunk; + epoxy_glMatrixMultTransposefEXT = epoxy_glMatrixMultTransposefEXT_dispatch_table_thunk; + epoxy_glMatrixMultdEXT = epoxy_glMatrixMultdEXT_dispatch_table_thunk; + epoxy_glMatrixMultfEXT = epoxy_glMatrixMultfEXT_dispatch_table_thunk; + epoxy_glMatrixOrthoEXT = epoxy_glMatrixOrthoEXT_dispatch_table_thunk; + epoxy_glMatrixPopEXT = epoxy_glMatrixPopEXT_dispatch_table_thunk; + epoxy_glMatrixPushEXT = epoxy_glMatrixPushEXT_dispatch_table_thunk; + epoxy_glMatrixRotatedEXT = epoxy_glMatrixRotatedEXT_dispatch_table_thunk; + epoxy_glMatrixRotatefEXT = epoxy_glMatrixRotatefEXT_dispatch_table_thunk; + epoxy_glMatrixScaledEXT = epoxy_glMatrixScaledEXT_dispatch_table_thunk; + epoxy_glMatrixScalefEXT = epoxy_glMatrixScalefEXT_dispatch_table_thunk; + epoxy_glMatrixTranslatedEXT = epoxy_glMatrixTranslatedEXT_dispatch_table_thunk; + epoxy_glMatrixTranslatefEXT = epoxy_glMatrixTranslatefEXT_dispatch_table_thunk; + epoxy_glMaxShaderCompilerThreadsARB = epoxy_glMaxShaderCompilerThreadsARB_dispatch_table_thunk; + epoxy_glMemoryBarrier = epoxy_glMemoryBarrier_dispatch_table_thunk; + epoxy_glMemoryBarrierByRegion = epoxy_glMemoryBarrierByRegion_dispatch_table_thunk; + epoxy_glMemoryBarrierEXT = epoxy_glMemoryBarrierEXT_dispatch_table_thunk; + epoxy_glMinSampleShading = epoxy_glMinSampleShading_dispatch_table_thunk; + epoxy_glMinSampleShadingARB = epoxy_glMinSampleShadingARB_dispatch_table_thunk; + epoxy_glMinSampleShadingOES = epoxy_glMinSampleShadingOES_dispatch_table_thunk; + epoxy_glMinmax = epoxy_glMinmax_dispatch_table_thunk; + epoxy_glMinmaxEXT = epoxy_glMinmaxEXT_dispatch_table_thunk; + epoxy_glMultMatrixd = epoxy_glMultMatrixd_dispatch_table_thunk; + epoxy_glMultMatrixf = epoxy_glMultMatrixf_dispatch_table_thunk; + epoxy_glMultMatrixx = epoxy_glMultMatrixx_dispatch_table_thunk; + epoxy_glMultMatrixxOES = epoxy_glMultMatrixxOES_dispatch_table_thunk; + epoxy_glMultTransposeMatrixd = epoxy_glMultTransposeMatrixd_dispatch_table_thunk; + epoxy_glMultTransposeMatrixdARB = epoxy_glMultTransposeMatrixdARB_dispatch_table_thunk; + epoxy_glMultTransposeMatrixf = epoxy_glMultTransposeMatrixf_dispatch_table_thunk; + epoxy_glMultTransposeMatrixfARB = epoxy_glMultTransposeMatrixfARB_dispatch_table_thunk; + epoxy_glMultTransposeMatrixxOES = epoxy_glMultTransposeMatrixxOES_dispatch_table_thunk; + epoxy_glMultiDrawArrays = epoxy_glMultiDrawArrays_dispatch_table_thunk; + epoxy_glMultiDrawArraysEXT = epoxy_glMultiDrawArraysEXT_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirect = epoxy_glMultiDrawArraysIndirect_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectAMD = epoxy_glMultiDrawArraysIndirectAMD_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectBindlessCountNV = epoxy_glMultiDrawArraysIndirectBindlessCountNV_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectBindlessNV = epoxy_glMultiDrawArraysIndirectBindlessNV_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectCountARB = epoxy_glMultiDrawArraysIndirectCountARB_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectEXT = epoxy_glMultiDrawArraysIndirectEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementArrayAPPLE = epoxy_glMultiDrawElementArrayAPPLE_dispatch_table_thunk; + epoxy_glMultiDrawElements = epoxy_glMultiDrawElements_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertex = epoxy_glMultiDrawElementsBaseVertex_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertexEXT = epoxy_glMultiDrawElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertexOES = epoxy_glMultiDrawElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glMultiDrawElementsEXT = epoxy_glMultiDrawElementsEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirect = epoxy_glMultiDrawElementsIndirect_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectAMD = epoxy_glMultiDrawElementsIndirectAMD_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectBindlessCountNV = epoxy_glMultiDrawElementsIndirectBindlessCountNV_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectBindlessNV = epoxy_glMultiDrawElementsIndirectBindlessNV_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectCountARB = epoxy_glMultiDrawElementsIndirectCountARB_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectEXT = epoxy_glMultiDrawElementsIndirectEXT_dispatch_table_thunk; + epoxy_glMultiDrawRangeElementArrayAPPLE = epoxy_glMultiDrawRangeElementArrayAPPLE_dispatch_table_thunk; + epoxy_glMultiModeDrawArraysIBM = epoxy_glMultiModeDrawArraysIBM_dispatch_table_thunk; + epoxy_glMultiModeDrawElementsIBM = epoxy_glMultiModeDrawElementsIBM_dispatch_table_thunk; + epoxy_glMultiTexBufferEXT = epoxy_glMultiTexBufferEXT_dispatch_table_thunk; + epoxy_glMultiTexCoord1bOES = epoxy_glMultiTexCoord1bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1bvOES = epoxy_glMultiTexCoord1bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1d = epoxy_glMultiTexCoord1d_dispatch_table_thunk; + epoxy_glMultiTexCoord1dARB = epoxy_glMultiTexCoord1dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1dv = epoxy_glMultiTexCoord1dv_dispatch_table_thunk; + epoxy_glMultiTexCoord1dvARB = epoxy_glMultiTexCoord1dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1f = epoxy_glMultiTexCoord1f_dispatch_table_thunk; + epoxy_glMultiTexCoord1fARB = epoxy_glMultiTexCoord1fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1fv = epoxy_glMultiTexCoord1fv_dispatch_table_thunk; + epoxy_glMultiTexCoord1fvARB = epoxy_glMultiTexCoord1fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1hNV = epoxy_glMultiTexCoord1hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord1hvNV = epoxy_glMultiTexCoord1hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord1i = epoxy_glMultiTexCoord1i_dispatch_table_thunk; + epoxy_glMultiTexCoord1iARB = epoxy_glMultiTexCoord1iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1iv = epoxy_glMultiTexCoord1iv_dispatch_table_thunk; + epoxy_glMultiTexCoord1ivARB = epoxy_glMultiTexCoord1ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1s = epoxy_glMultiTexCoord1s_dispatch_table_thunk; + epoxy_glMultiTexCoord1sARB = epoxy_glMultiTexCoord1sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1sv = epoxy_glMultiTexCoord1sv_dispatch_table_thunk; + epoxy_glMultiTexCoord1svARB = epoxy_glMultiTexCoord1svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1xOES = epoxy_glMultiTexCoord1xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1xvOES = epoxy_glMultiTexCoord1xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2bOES = epoxy_glMultiTexCoord2bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2bvOES = epoxy_glMultiTexCoord2bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2d = epoxy_glMultiTexCoord2d_dispatch_table_thunk; + epoxy_glMultiTexCoord2dARB = epoxy_glMultiTexCoord2dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2dv = epoxy_glMultiTexCoord2dv_dispatch_table_thunk; + epoxy_glMultiTexCoord2dvARB = epoxy_glMultiTexCoord2dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2f = epoxy_glMultiTexCoord2f_dispatch_table_thunk; + epoxy_glMultiTexCoord2fARB = epoxy_glMultiTexCoord2fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2fv = epoxy_glMultiTexCoord2fv_dispatch_table_thunk; + epoxy_glMultiTexCoord2fvARB = epoxy_glMultiTexCoord2fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2hNV = epoxy_glMultiTexCoord2hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord2hvNV = epoxy_glMultiTexCoord2hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord2i = epoxy_glMultiTexCoord2i_dispatch_table_thunk; + epoxy_glMultiTexCoord2iARB = epoxy_glMultiTexCoord2iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2iv = epoxy_glMultiTexCoord2iv_dispatch_table_thunk; + epoxy_glMultiTexCoord2ivARB = epoxy_glMultiTexCoord2ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2s = epoxy_glMultiTexCoord2s_dispatch_table_thunk; + epoxy_glMultiTexCoord2sARB = epoxy_glMultiTexCoord2sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2sv = epoxy_glMultiTexCoord2sv_dispatch_table_thunk; + epoxy_glMultiTexCoord2svARB = epoxy_glMultiTexCoord2svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2xOES = epoxy_glMultiTexCoord2xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2xvOES = epoxy_glMultiTexCoord2xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3bOES = epoxy_glMultiTexCoord3bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3bvOES = epoxy_glMultiTexCoord3bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3d = epoxy_glMultiTexCoord3d_dispatch_table_thunk; + epoxy_glMultiTexCoord3dARB = epoxy_glMultiTexCoord3dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3dv = epoxy_glMultiTexCoord3dv_dispatch_table_thunk; + epoxy_glMultiTexCoord3dvARB = epoxy_glMultiTexCoord3dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3f = epoxy_glMultiTexCoord3f_dispatch_table_thunk; + epoxy_glMultiTexCoord3fARB = epoxy_glMultiTexCoord3fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3fv = epoxy_glMultiTexCoord3fv_dispatch_table_thunk; + epoxy_glMultiTexCoord3fvARB = epoxy_glMultiTexCoord3fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3hNV = epoxy_glMultiTexCoord3hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord3hvNV = epoxy_glMultiTexCoord3hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord3i = epoxy_glMultiTexCoord3i_dispatch_table_thunk; + epoxy_glMultiTexCoord3iARB = epoxy_glMultiTexCoord3iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3iv = epoxy_glMultiTexCoord3iv_dispatch_table_thunk; + epoxy_glMultiTexCoord3ivARB = epoxy_glMultiTexCoord3ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3s = epoxy_glMultiTexCoord3s_dispatch_table_thunk; + epoxy_glMultiTexCoord3sARB = epoxy_glMultiTexCoord3sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3sv = epoxy_glMultiTexCoord3sv_dispatch_table_thunk; + epoxy_glMultiTexCoord3svARB = epoxy_glMultiTexCoord3svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3xOES = epoxy_glMultiTexCoord3xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3xvOES = epoxy_glMultiTexCoord3xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4bOES = epoxy_glMultiTexCoord4bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4bvOES = epoxy_glMultiTexCoord4bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4d = epoxy_glMultiTexCoord4d_dispatch_table_thunk; + epoxy_glMultiTexCoord4dARB = epoxy_glMultiTexCoord4dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4dv = epoxy_glMultiTexCoord4dv_dispatch_table_thunk; + epoxy_glMultiTexCoord4dvARB = epoxy_glMultiTexCoord4dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4f = epoxy_glMultiTexCoord4f_dispatch_table_thunk; + epoxy_glMultiTexCoord4fARB = epoxy_glMultiTexCoord4fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4fv = epoxy_glMultiTexCoord4fv_dispatch_table_thunk; + epoxy_glMultiTexCoord4fvARB = epoxy_glMultiTexCoord4fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4hNV = epoxy_glMultiTexCoord4hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord4hvNV = epoxy_glMultiTexCoord4hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord4i = epoxy_glMultiTexCoord4i_dispatch_table_thunk; + epoxy_glMultiTexCoord4iARB = epoxy_glMultiTexCoord4iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4iv = epoxy_glMultiTexCoord4iv_dispatch_table_thunk; + epoxy_glMultiTexCoord4ivARB = epoxy_glMultiTexCoord4ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4s = epoxy_glMultiTexCoord4s_dispatch_table_thunk; + epoxy_glMultiTexCoord4sARB = epoxy_glMultiTexCoord4sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4sv = epoxy_glMultiTexCoord4sv_dispatch_table_thunk; + epoxy_glMultiTexCoord4svARB = epoxy_glMultiTexCoord4svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4x = epoxy_glMultiTexCoord4x_dispatch_table_thunk; + epoxy_glMultiTexCoord4xOES = epoxy_glMultiTexCoord4xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4xvOES = epoxy_glMultiTexCoord4xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoordP1ui = epoxy_glMultiTexCoordP1ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP1uiv = epoxy_glMultiTexCoordP1uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP2ui = epoxy_glMultiTexCoordP2ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP2uiv = epoxy_glMultiTexCoordP2uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP3ui = epoxy_glMultiTexCoordP3ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP3uiv = epoxy_glMultiTexCoordP3uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP4ui = epoxy_glMultiTexCoordP4ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP4uiv = epoxy_glMultiTexCoordP4uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordPointerEXT = epoxy_glMultiTexCoordPointerEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvfEXT = epoxy_glMultiTexEnvfEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvfvEXT = epoxy_glMultiTexEnvfvEXT_dispatch_table_thunk; + epoxy_glMultiTexEnviEXT = epoxy_glMultiTexEnviEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvivEXT = epoxy_glMultiTexEnvivEXT_dispatch_table_thunk; + epoxy_glMultiTexGendEXT = epoxy_glMultiTexGendEXT_dispatch_table_thunk; + epoxy_glMultiTexGendvEXT = epoxy_glMultiTexGendvEXT_dispatch_table_thunk; + epoxy_glMultiTexGenfEXT = epoxy_glMultiTexGenfEXT_dispatch_table_thunk; + epoxy_glMultiTexGenfvEXT = epoxy_glMultiTexGenfvEXT_dispatch_table_thunk; + epoxy_glMultiTexGeniEXT = epoxy_glMultiTexGeniEXT_dispatch_table_thunk; + epoxy_glMultiTexGenivEXT = epoxy_glMultiTexGenivEXT_dispatch_table_thunk; + epoxy_glMultiTexImage1DEXT = epoxy_glMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glMultiTexImage2DEXT = epoxy_glMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glMultiTexImage3DEXT = epoxy_glMultiTexImage3DEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterIivEXT = epoxy_glMultiTexParameterIivEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterIuivEXT = epoxy_glMultiTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterfEXT = epoxy_glMultiTexParameterfEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterfvEXT = epoxy_glMultiTexParameterfvEXT_dispatch_table_thunk; + epoxy_glMultiTexParameteriEXT = epoxy_glMultiTexParameteriEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterivEXT = epoxy_glMultiTexParameterivEXT_dispatch_table_thunk; + epoxy_glMultiTexRenderbufferEXT = epoxy_glMultiTexRenderbufferEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage1DEXT = epoxy_glMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage2DEXT = epoxy_glMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage3DEXT = epoxy_glMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glNamedBufferData = epoxy_glNamedBufferData_dispatch_table_thunk; + epoxy_glNamedBufferDataEXT = epoxy_glNamedBufferDataEXT_dispatch_table_thunk; + epoxy_glNamedBufferPageCommitmentARB = epoxy_glNamedBufferPageCommitmentARB_dispatch_table_thunk; + epoxy_glNamedBufferPageCommitmentEXT = epoxy_glNamedBufferPageCommitmentEXT_dispatch_table_thunk; + epoxy_glNamedBufferStorage = epoxy_glNamedBufferStorage_dispatch_table_thunk; + epoxy_glNamedBufferStorageEXT = epoxy_glNamedBufferStorageEXT_dispatch_table_thunk; + epoxy_glNamedBufferSubData = epoxy_glNamedBufferSubData_dispatch_table_thunk; + epoxy_glNamedBufferSubDataEXT = epoxy_glNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glNamedCopyBufferSubDataEXT = epoxy_glNamedCopyBufferSubDataEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferDrawBuffer = epoxy_glNamedFramebufferDrawBuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferDrawBuffers = epoxy_glNamedFramebufferDrawBuffers_dispatch_table_thunk; + epoxy_glNamedFramebufferParameteri = epoxy_glNamedFramebufferParameteri_dispatch_table_thunk; + epoxy_glNamedFramebufferParameteriEXT = epoxy_glNamedFramebufferParameteriEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferReadBuffer = epoxy_glNamedFramebufferReadBuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferRenderbuffer = epoxy_glNamedFramebufferRenderbuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferRenderbufferEXT = epoxy_glNamedFramebufferRenderbufferEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferSampleLocationsfvARB = epoxy_glNamedFramebufferSampleLocationsfvARB_dispatch_table_thunk; + epoxy_glNamedFramebufferSampleLocationsfvNV = epoxy_glNamedFramebufferSampleLocationsfvNV_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture = epoxy_glNamedFramebufferTexture_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture1DEXT = epoxy_glNamedFramebufferTexture1DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture2DEXT = epoxy_glNamedFramebufferTexture2DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture3DEXT = epoxy_glNamedFramebufferTexture3DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureEXT = epoxy_glNamedFramebufferTextureEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureFaceEXT = epoxy_glNamedFramebufferTextureFaceEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureLayer = epoxy_glNamedFramebufferTextureLayer_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureLayerEXT = epoxy_glNamedFramebufferTextureLayerEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4dEXT = epoxy_glNamedProgramLocalParameter4dEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4dvEXT = epoxy_glNamedProgramLocalParameter4dvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4fEXT = epoxy_glNamedProgramLocalParameter4fEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4fvEXT = epoxy_glNamedProgramLocalParameter4fvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4iEXT = epoxy_glNamedProgramLocalParameterI4iEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4ivEXT = epoxy_glNamedProgramLocalParameterI4ivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4uiEXT = epoxy_glNamedProgramLocalParameterI4uiEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4uivEXT = epoxy_glNamedProgramLocalParameterI4uivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameters4fvEXT = epoxy_glNamedProgramLocalParameters4fvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParametersI4ivEXT = epoxy_glNamedProgramLocalParametersI4ivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParametersI4uivEXT = epoxy_glNamedProgramLocalParametersI4uivEXT_dispatch_table_thunk; + epoxy_glNamedProgramStringEXT = epoxy_glNamedProgramStringEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorage = epoxy_glNamedRenderbufferStorage_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageEXT = epoxy_glNamedRenderbufferStorageEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisample = epoxy_glNamedRenderbufferStorageMultisample_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT = epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisampleEXT = epoxy_glNamedRenderbufferStorageMultisampleEXT_dispatch_table_thunk; + epoxy_glNamedStringARB = epoxy_glNamedStringARB_dispatch_table_thunk; + epoxy_glNewList = epoxy_glNewList_dispatch_table_thunk; + epoxy_glNewObjectBufferATI = epoxy_glNewObjectBufferATI_dispatch_table_thunk; + epoxy_glNormal3b = epoxy_glNormal3b_dispatch_table_thunk; + epoxy_glNormal3bv = epoxy_glNormal3bv_dispatch_table_thunk; + epoxy_glNormal3d = epoxy_glNormal3d_dispatch_table_thunk; + epoxy_glNormal3dv = epoxy_glNormal3dv_dispatch_table_thunk; + epoxy_glNormal3f = epoxy_glNormal3f_dispatch_table_thunk; + epoxy_glNormal3fVertex3fSUN = epoxy_glNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glNormal3fVertex3fvSUN = epoxy_glNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glNormal3fv = epoxy_glNormal3fv_dispatch_table_thunk; + epoxy_glNormal3hNV = epoxy_glNormal3hNV_dispatch_table_thunk; + epoxy_glNormal3hvNV = epoxy_glNormal3hvNV_dispatch_table_thunk; + epoxy_glNormal3i = epoxy_glNormal3i_dispatch_table_thunk; + epoxy_glNormal3iv = epoxy_glNormal3iv_dispatch_table_thunk; + epoxy_glNormal3s = epoxy_glNormal3s_dispatch_table_thunk; + epoxy_glNormal3sv = epoxy_glNormal3sv_dispatch_table_thunk; + epoxy_glNormal3x = epoxy_glNormal3x_dispatch_table_thunk; + epoxy_glNormal3xOES = epoxy_glNormal3xOES_dispatch_table_thunk; + epoxy_glNormal3xvOES = epoxy_glNormal3xvOES_dispatch_table_thunk; + epoxy_glNormalFormatNV = epoxy_glNormalFormatNV_dispatch_table_thunk; + epoxy_glNormalP3ui = epoxy_glNormalP3ui_dispatch_table_thunk; + epoxy_glNormalP3uiv = epoxy_glNormalP3uiv_dispatch_table_thunk; + epoxy_glNormalPointer = epoxy_glNormalPointer_dispatch_table_thunk; + epoxy_glNormalPointerEXT = epoxy_glNormalPointerEXT_dispatch_table_thunk; + epoxy_glNormalPointerListIBM = epoxy_glNormalPointerListIBM_dispatch_table_thunk; + epoxy_glNormalPointervINTEL = epoxy_glNormalPointervINTEL_dispatch_table_thunk; + epoxy_glNormalStream3bATI = epoxy_glNormalStream3bATI_dispatch_table_thunk; + epoxy_glNormalStream3bvATI = epoxy_glNormalStream3bvATI_dispatch_table_thunk; + epoxy_glNormalStream3dATI = epoxy_glNormalStream3dATI_dispatch_table_thunk; + epoxy_glNormalStream3dvATI = epoxy_glNormalStream3dvATI_dispatch_table_thunk; + epoxy_glNormalStream3fATI = epoxy_glNormalStream3fATI_dispatch_table_thunk; + epoxy_glNormalStream3fvATI = epoxy_glNormalStream3fvATI_dispatch_table_thunk; + epoxy_glNormalStream3iATI = epoxy_glNormalStream3iATI_dispatch_table_thunk; + epoxy_glNormalStream3ivATI = epoxy_glNormalStream3ivATI_dispatch_table_thunk; + epoxy_glNormalStream3sATI = epoxy_glNormalStream3sATI_dispatch_table_thunk; + epoxy_glNormalStream3svATI = epoxy_glNormalStream3svATI_dispatch_table_thunk; + epoxy_glObjectLabel = epoxy_glObjectLabel_dispatch_table_thunk; + epoxy_glObjectLabelKHR = epoxy_glObjectLabelKHR_dispatch_table_thunk; + epoxy_glObjectPtrLabel = epoxy_glObjectPtrLabel_dispatch_table_thunk; + epoxy_glObjectPtrLabelKHR = epoxy_glObjectPtrLabelKHR_dispatch_table_thunk; + epoxy_glObjectPurgeableAPPLE = epoxy_glObjectPurgeableAPPLE_dispatch_table_thunk; + epoxy_glObjectUnpurgeableAPPLE = epoxy_glObjectUnpurgeableAPPLE_dispatch_table_thunk; + epoxy_glOrtho = epoxy_glOrtho_dispatch_table_thunk; + epoxy_glOrthof = epoxy_glOrthof_dispatch_table_thunk; + epoxy_glOrthofOES = epoxy_glOrthofOES_dispatch_table_thunk; + epoxy_glOrthox = epoxy_glOrthox_dispatch_table_thunk; + epoxy_glOrthoxOES = epoxy_glOrthoxOES_dispatch_table_thunk; + epoxy_glPNTrianglesfATI = epoxy_glPNTrianglesfATI_dispatch_table_thunk; + epoxy_glPNTrianglesiATI = epoxy_glPNTrianglesiATI_dispatch_table_thunk; + epoxy_glPassTexCoordATI = epoxy_glPassTexCoordATI_dispatch_table_thunk; + epoxy_glPassThrough = epoxy_glPassThrough_dispatch_table_thunk; + epoxy_glPassThroughxOES = epoxy_glPassThroughxOES_dispatch_table_thunk; + epoxy_glPatchParameterfv = epoxy_glPatchParameterfv_dispatch_table_thunk; + epoxy_glPatchParameteri = epoxy_glPatchParameteri_dispatch_table_thunk; + epoxy_glPatchParameteriEXT = epoxy_glPatchParameteriEXT_dispatch_table_thunk; + epoxy_glPatchParameteriOES = epoxy_glPatchParameteriOES_dispatch_table_thunk; + epoxy_glPathColorGenNV = epoxy_glPathColorGenNV_dispatch_table_thunk; + epoxy_glPathCommandsNV = epoxy_glPathCommandsNV_dispatch_table_thunk; + epoxy_glPathCoordsNV = epoxy_glPathCoordsNV_dispatch_table_thunk; + epoxy_glPathCoverDepthFuncNV = epoxy_glPathCoverDepthFuncNV_dispatch_table_thunk; + epoxy_glPathDashArrayNV = epoxy_glPathDashArrayNV_dispatch_table_thunk; + epoxy_glPathFogGenNV = epoxy_glPathFogGenNV_dispatch_table_thunk; + epoxy_glPathGlyphIndexArrayNV = epoxy_glPathGlyphIndexArrayNV_dispatch_table_thunk; + epoxy_glPathGlyphIndexRangeNV = epoxy_glPathGlyphIndexRangeNV_dispatch_table_thunk; + epoxy_glPathGlyphRangeNV = epoxy_glPathGlyphRangeNV_dispatch_table_thunk; + epoxy_glPathGlyphsNV = epoxy_glPathGlyphsNV_dispatch_table_thunk; + epoxy_glPathMemoryGlyphIndexArrayNV = epoxy_glPathMemoryGlyphIndexArrayNV_dispatch_table_thunk; + epoxy_glPathParameterfNV = epoxy_glPathParameterfNV_dispatch_table_thunk; + epoxy_glPathParameterfvNV = epoxy_glPathParameterfvNV_dispatch_table_thunk; + epoxy_glPathParameteriNV = epoxy_glPathParameteriNV_dispatch_table_thunk; + epoxy_glPathParameterivNV = epoxy_glPathParameterivNV_dispatch_table_thunk; + epoxy_glPathStencilDepthOffsetNV = epoxy_glPathStencilDepthOffsetNV_dispatch_table_thunk; + epoxy_glPathStencilFuncNV = epoxy_glPathStencilFuncNV_dispatch_table_thunk; + epoxy_glPathStringNV = epoxy_glPathStringNV_dispatch_table_thunk; + epoxy_glPathSubCommandsNV = epoxy_glPathSubCommandsNV_dispatch_table_thunk; + epoxy_glPathSubCoordsNV = epoxy_glPathSubCoordsNV_dispatch_table_thunk; + epoxy_glPathTexGenNV = epoxy_glPathTexGenNV_dispatch_table_thunk; + epoxy_glPauseTransformFeedback = epoxy_glPauseTransformFeedback_dispatch_table_thunk; + epoxy_glPauseTransformFeedbackNV = epoxy_glPauseTransformFeedbackNV_dispatch_table_thunk; + epoxy_glPixelDataRangeNV = epoxy_glPixelDataRangeNV_dispatch_table_thunk; + epoxy_glPixelMapfv = epoxy_glPixelMapfv_dispatch_table_thunk; + epoxy_glPixelMapuiv = epoxy_glPixelMapuiv_dispatch_table_thunk; + epoxy_glPixelMapusv = epoxy_glPixelMapusv_dispatch_table_thunk; + epoxy_glPixelMapx = epoxy_glPixelMapx_dispatch_table_thunk; + epoxy_glPixelStoref = epoxy_glPixelStoref_dispatch_table_thunk; + epoxy_glPixelStorei = epoxy_glPixelStorei_dispatch_table_thunk; + epoxy_glPixelStorex = epoxy_glPixelStorex_dispatch_table_thunk; + epoxy_glPixelTexGenParameterfSGIS = epoxy_glPixelTexGenParameterfSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameterfvSGIS = epoxy_glPixelTexGenParameterfvSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameteriSGIS = epoxy_glPixelTexGenParameteriSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameterivSGIS = epoxy_glPixelTexGenParameterivSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenSGIX = epoxy_glPixelTexGenSGIX_dispatch_table_thunk; + epoxy_glPixelTransferf = epoxy_glPixelTransferf_dispatch_table_thunk; + epoxy_glPixelTransferi = epoxy_glPixelTransferi_dispatch_table_thunk; + epoxy_glPixelTransferxOES = epoxy_glPixelTransferxOES_dispatch_table_thunk; + epoxy_glPixelTransformParameterfEXT = epoxy_glPixelTransformParameterfEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameterfvEXT = epoxy_glPixelTransformParameterfvEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameteriEXT = epoxy_glPixelTransformParameteriEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameterivEXT = epoxy_glPixelTransformParameterivEXT_dispatch_table_thunk; + epoxy_glPixelZoom = epoxy_glPixelZoom_dispatch_table_thunk; + epoxy_glPixelZoomxOES = epoxy_glPixelZoomxOES_dispatch_table_thunk; + epoxy_glPointAlongPathNV = epoxy_glPointAlongPathNV_dispatch_table_thunk; + epoxy_glPointParameterf = epoxy_glPointParameterf_dispatch_table_thunk; + epoxy_glPointParameterfARB = epoxy_glPointParameterfARB_dispatch_table_thunk; + epoxy_glPointParameterfEXT = epoxy_glPointParameterfEXT_dispatch_table_thunk; + epoxy_glPointParameterfSGIS = epoxy_glPointParameterfSGIS_dispatch_table_thunk; + epoxy_glPointParameterfv = epoxy_glPointParameterfv_dispatch_table_thunk; + epoxy_glPointParameterfvARB = epoxy_glPointParameterfvARB_dispatch_table_thunk; + epoxy_glPointParameterfvEXT = epoxy_glPointParameterfvEXT_dispatch_table_thunk; + epoxy_glPointParameterfvSGIS = epoxy_glPointParameterfvSGIS_dispatch_table_thunk; + epoxy_glPointParameteri = epoxy_glPointParameteri_dispatch_table_thunk; + epoxy_glPointParameteriNV = epoxy_glPointParameteriNV_dispatch_table_thunk; + epoxy_glPointParameteriv = epoxy_glPointParameteriv_dispatch_table_thunk; + epoxy_glPointParameterivNV = epoxy_glPointParameterivNV_dispatch_table_thunk; + epoxy_glPointParameterx = epoxy_glPointParameterx_dispatch_table_thunk; + epoxy_glPointParameterxOES = epoxy_glPointParameterxOES_dispatch_table_thunk; + epoxy_glPointParameterxv = epoxy_glPointParameterxv_dispatch_table_thunk; + epoxy_glPointParameterxvOES = epoxy_glPointParameterxvOES_dispatch_table_thunk; + epoxy_glPointSize = epoxy_glPointSize_dispatch_table_thunk; + epoxy_glPointSizePointerOES = epoxy_glPointSizePointerOES_dispatch_table_thunk; + epoxy_glPointSizex = epoxy_glPointSizex_dispatch_table_thunk; + epoxy_glPointSizexOES = epoxy_glPointSizexOES_dispatch_table_thunk; + epoxy_glPollAsyncSGIX = epoxy_glPollAsyncSGIX_dispatch_table_thunk; + epoxy_glPollInstrumentsSGIX = epoxy_glPollInstrumentsSGIX_dispatch_table_thunk; + epoxy_glPolygonMode = epoxy_glPolygonMode_dispatch_table_thunk; + epoxy_glPolygonModeNV = epoxy_glPolygonModeNV_dispatch_table_thunk; + epoxy_glPolygonOffset = epoxy_glPolygonOffset_dispatch_table_thunk; + epoxy_glPolygonOffsetClampEXT = epoxy_glPolygonOffsetClampEXT_dispatch_table_thunk; + epoxy_glPolygonOffsetEXT = epoxy_glPolygonOffsetEXT_dispatch_table_thunk; + epoxy_glPolygonOffsetx = epoxy_glPolygonOffsetx_dispatch_table_thunk; + epoxy_glPolygonOffsetxOES = epoxy_glPolygonOffsetxOES_dispatch_table_thunk; + epoxy_glPolygonStipple = epoxy_glPolygonStipple_dispatch_table_thunk; + epoxy_glPopAttrib = epoxy_glPopAttrib_dispatch_table_thunk; + epoxy_glPopClientAttrib = epoxy_glPopClientAttrib_dispatch_table_thunk; + epoxy_glPopDebugGroup = epoxy_glPopDebugGroup_dispatch_table_thunk; + epoxy_glPopDebugGroupKHR = epoxy_glPopDebugGroupKHR_dispatch_table_thunk; + epoxy_glPopGroupMarkerEXT = epoxy_glPopGroupMarkerEXT_dispatch_table_thunk; + epoxy_glPopMatrix = epoxy_glPopMatrix_dispatch_table_thunk; + epoxy_glPopName = epoxy_glPopName_dispatch_table_thunk; + epoxy_glPresentFrameDualFillNV = epoxy_glPresentFrameDualFillNV_dispatch_table_thunk; + epoxy_glPresentFrameKeyedNV = epoxy_glPresentFrameKeyedNV_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBox = epoxy_glPrimitiveBoundingBox_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxARB = epoxy_glPrimitiveBoundingBoxARB_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxEXT = epoxy_glPrimitiveBoundingBoxEXT_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxOES = epoxy_glPrimitiveBoundingBoxOES_dispatch_table_thunk; + epoxy_glPrimitiveRestartIndex = epoxy_glPrimitiveRestartIndex_dispatch_table_thunk; + epoxy_glPrimitiveRestartIndexNV = epoxy_glPrimitiveRestartIndexNV_dispatch_table_thunk; + epoxy_glPrimitiveRestartNV = epoxy_glPrimitiveRestartNV_dispatch_table_thunk; + epoxy_glPrioritizeTextures = epoxy_glPrioritizeTextures_dispatch_table_thunk; + epoxy_glPrioritizeTexturesEXT = epoxy_glPrioritizeTexturesEXT_dispatch_table_thunk; + epoxy_glPrioritizeTexturesxOES = epoxy_glPrioritizeTexturesxOES_dispatch_table_thunk; + epoxy_glProgramBinary = epoxy_glProgramBinary_dispatch_table_thunk; + epoxy_glProgramBinaryOES = epoxy_glProgramBinaryOES_dispatch_table_thunk; + epoxy_glProgramBufferParametersIivNV = epoxy_glProgramBufferParametersIivNV_dispatch_table_thunk; + epoxy_glProgramBufferParametersIuivNV = epoxy_glProgramBufferParametersIuivNV_dispatch_table_thunk; + epoxy_glProgramBufferParametersfvNV = epoxy_glProgramBufferParametersfvNV_dispatch_table_thunk; + epoxy_glProgramEnvParameter4dARB = epoxy_glProgramEnvParameter4dARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4dvARB = epoxy_glProgramEnvParameter4dvARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4fARB = epoxy_glProgramEnvParameter4fARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4fvARB = epoxy_glProgramEnvParameter4fvARB_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4iNV = epoxy_glProgramEnvParameterI4iNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4ivNV = epoxy_glProgramEnvParameterI4ivNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4uiNV = epoxy_glProgramEnvParameterI4uiNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4uivNV = epoxy_glProgramEnvParameterI4uivNV_dispatch_table_thunk; + epoxy_glProgramEnvParameters4fvEXT = epoxy_glProgramEnvParameters4fvEXT_dispatch_table_thunk; + epoxy_glProgramEnvParametersI4ivNV = epoxy_glProgramEnvParametersI4ivNV_dispatch_table_thunk; + epoxy_glProgramEnvParametersI4uivNV = epoxy_glProgramEnvParametersI4uivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameter4dARB = epoxy_glProgramLocalParameter4dARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4dvARB = epoxy_glProgramLocalParameter4dvARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4fARB = epoxy_glProgramLocalParameter4fARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4fvARB = epoxy_glProgramLocalParameter4fvARB_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4iNV = epoxy_glProgramLocalParameterI4iNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4ivNV = epoxy_glProgramLocalParameterI4ivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4uiNV = epoxy_glProgramLocalParameterI4uiNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4uivNV = epoxy_glProgramLocalParameterI4uivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameters4fvEXT = epoxy_glProgramLocalParameters4fvEXT_dispatch_table_thunk; + epoxy_glProgramLocalParametersI4ivNV = epoxy_glProgramLocalParametersI4ivNV_dispatch_table_thunk; + epoxy_glProgramLocalParametersI4uivNV = epoxy_glProgramLocalParametersI4uivNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4dNV = epoxy_glProgramNamedParameter4dNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4dvNV = epoxy_glProgramNamedParameter4dvNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4fNV = epoxy_glProgramNamedParameter4fNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4fvNV = epoxy_glProgramNamedParameter4fvNV_dispatch_table_thunk; + epoxy_glProgramParameter4dNV = epoxy_glProgramParameter4dNV_dispatch_table_thunk; + epoxy_glProgramParameter4dvNV = epoxy_glProgramParameter4dvNV_dispatch_table_thunk; + epoxy_glProgramParameter4fNV = epoxy_glProgramParameter4fNV_dispatch_table_thunk; + epoxy_glProgramParameter4fvNV = epoxy_glProgramParameter4fvNV_dispatch_table_thunk; + epoxy_glProgramParameteri = epoxy_glProgramParameteri_dispatch_table_thunk; + epoxy_glProgramParameteriARB = epoxy_glProgramParameteriARB_dispatch_table_thunk; + epoxy_glProgramParameteriEXT = epoxy_glProgramParameteriEXT_dispatch_table_thunk; + epoxy_glProgramParameters4dvNV = epoxy_glProgramParameters4dvNV_dispatch_table_thunk; + epoxy_glProgramParameters4fvNV = epoxy_glProgramParameters4fvNV_dispatch_table_thunk; + epoxy_glProgramPathFragmentInputGenNV = epoxy_glProgramPathFragmentInputGenNV_dispatch_table_thunk; + epoxy_glProgramStringARB = epoxy_glProgramStringARB_dispatch_table_thunk; + epoxy_glProgramSubroutineParametersuivNV = epoxy_glProgramSubroutineParametersuivNV_dispatch_table_thunk; + epoxy_glProgramUniform1d = epoxy_glProgramUniform1d_dispatch_table_thunk; + epoxy_glProgramUniform1dEXT = epoxy_glProgramUniform1dEXT_dispatch_table_thunk; + epoxy_glProgramUniform1dv = epoxy_glProgramUniform1dv_dispatch_table_thunk; + epoxy_glProgramUniform1dvEXT = epoxy_glProgramUniform1dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform1f = epoxy_glProgramUniform1f_dispatch_table_thunk; + epoxy_glProgramUniform1fEXT = epoxy_glProgramUniform1fEXT_dispatch_table_thunk; + epoxy_glProgramUniform1fv = epoxy_glProgramUniform1fv_dispatch_table_thunk; + epoxy_glProgramUniform1fvEXT = epoxy_glProgramUniform1fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform1i = epoxy_glProgramUniform1i_dispatch_table_thunk; + epoxy_glProgramUniform1i64ARB = epoxy_glProgramUniform1i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform1i64NV = epoxy_glProgramUniform1i64NV_dispatch_table_thunk; + epoxy_glProgramUniform1i64vARB = epoxy_glProgramUniform1i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform1i64vNV = epoxy_glProgramUniform1i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform1iEXT = epoxy_glProgramUniform1iEXT_dispatch_table_thunk; + epoxy_glProgramUniform1iv = epoxy_glProgramUniform1iv_dispatch_table_thunk; + epoxy_glProgramUniform1ivEXT = epoxy_glProgramUniform1ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform1ui = epoxy_glProgramUniform1ui_dispatch_table_thunk; + epoxy_glProgramUniform1ui64ARB = epoxy_glProgramUniform1ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform1ui64NV = epoxy_glProgramUniform1ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform1ui64vARB = epoxy_glProgramUniform1ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform1ui64vNV = epoxy_glProgramUniform1ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform1uiEXT = epoxy_glProgramUniform1uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform1uiv = epoxy_glProgramUniform1uiv_dispatch_table_thunk; + epoxy_glProgramUniform1uivEXT = epoxy_glProgramUniform1uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform2d = epoxy_glProgramUniform2d_dispatch_table_thunk; + epoxy_glProgramUniform2dEXT = epoxy_glProgramUniform2dEXT_dispatch_table_thunk; + epoxy_glProgramUniform2dv = epoxy_glProgramUniform2dv_dispatch_table_thunk; + epoxy_glProgramUniform2dvEXT = epoxy_glProgramUniform2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform2f = epoxy_glProgramUniform2f_dispatch_table_thunk; + epoxy_glProgramUniform2fEXT = epoxy_glProgramUniform2fEXT_dispatch_table_thunk; + epoxy_glProgramUniform2fv = epoxy_glProgramUniform2fv_dispatch_table_thunk; + epoxy_glProgramUniform2fvEXT = epoxy_glProgramUniform2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform2i = epoxy_glProgramUniform2i_dispatch_table_thunk; + epoxy_glProgramUniform2i64ARB = epoxy_glProgramUniform2i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform2i64NV = epoxy_glProgramUniform2i64NV_dispatch_table_thunk; + epoxy_glProgramUniform2i64vARB = epoxy_glProgramUniform2i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform2i64vNV = epoxy_glProgramUniform2i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform2iEXT = epoxy_glProgramUniform2iEXT_dispatch_table_thunk; + epoxy_glProgramUniform2iv = epoxy_glProgramUniform2iv_dispatch_table_thunk; + epoxy_glProgramUniform2ivEXT = epoxy_glProgramUniform2ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform2ui = epoxy_glProgramUniform2ui_dispatch_table_thunk; + epoxy_glProgramUniform2ui64ARB = epoxy_glProgramUniform2ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform2ui64NV = epoxy_glProgramUniform2ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform2ui64vARB = epoxy_glProgramUniform2ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform2ui64vNV = epoxy_glProgramUniform2ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform2uiEXT = epoxy_glProgramUniform2uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform2uiv = epoxy_glProgramUniform2uiv_dispatch_table_thunk; + epoxy_glProgramUniform2uivEXT = epoxy_glProgramUniform2uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform3d = epoxy_glProgramUniform3d_dispatch_table_thunk; + epoxy_glProgramUniform3dEXT = epoxy_glProgramUniform3dEXT_dispatch_table_thunk; + epoxy_glProgramUniform3dv = epoxy_glProgramUniform3dv_dispatch_table_thunk; + epoxy_glProgramUniform3dvEXT = epoxy_glProgramUniform3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform3f = epoxy_glProgramUniform3f_dispatch_table_thunk; + epoxy_glProgramUniform3fEXT = epoxy_glProgramUniform3fEXT_dispatch_table_thunk; + epoxy_glProgramUniform3fv = epoxy_glProgramUniform3fv_dispatch_table_thunk; + epoxy_glProgramUniform3fvEXT = epoxy_glProgramUniform3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform3i = epoxy_glProgramUniform3i_dispatch_table_thunk; + epoxy_glProgramUniform3i64ARB = epoxy_glProgramUniform3i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform3i64NV = epoxy_glProgramUniform3i64NV_dispatch_table_thunk; + epoxy_glProgramUniform3i64vARB = epoxy_glProgramUniform3i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform3i64vNV = epoxy_glProgramUniform3i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform3iEXT = epoxy_glProgramUniform3iEXT_dispatch_table_thunk; + epoxy_glProgramUniform3iv = epoxy_glProgramUniform3iv_dispatch_table_thunk; + epoxy_glProgramUniform3ivEXT = epoxy_glProgramUniform3ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform3ui = epoxy_glProgramUniform3ui_dispatch_table_thunk; + epoxy_glProgramUniform3ui64ARB = epoxy_glProgramUniform3ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform3ui64NV = epoxy_glProgramUniform3ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform3ui64vARB = epoxy_glProgramUniform3ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform3ui64vNV = epoxy_glProgramUniform3ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform3uiEXT = epoxy_glProgramUniform3uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform3uiv = epoxy_glProgramUniform3uiv_dispatch_table_thunk; + epoxy_glProgramUniform3uivEXT = epoxy_glProgramUniform3uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform4d = epoxy_glProgramUniform4d_dispatch_table_thunk; + epoxy_glProgramUniform4dEXT = epoxy_glProgramUniform4dEXT_dispatch_table_thunk; + epoxy_glProgramUniform4dv = epoxy_glProgramUniform4dv_dispatch_table_thunk; + epoxy_glProgramUniform4dvEXT = epoxy_glProgramUniform4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform4f = epoxy_glProgramUniform4f_dispatch_table_thunk; + epoxy_glProgramUniform4fEXT = epoxy_glProgramUniform4fEXT_dispatch_table_thunk; + epoxy_glProgramUniform4fv = epoxy_glProgramUniform4fv_dispatch_table_thunk; + epoxy_glProgramUniform4fvEXT = epoxy_glProgramUniform4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform4i = epoxy_glProgramUniform4i_dispatch_table_thunk; + epoxy_glProgramUniform4i64ARB = epoxy_glProgramUniform4i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform4i64NV = epoxy_glProgramUniform4i64NV_dispatch_table_thunk; + epoxy_glProgramUniform4i64vARB = epoxy_glProgramUniform4i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform4i64vNV = epoxy_glProgramUniform4i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform4iEXT = epoxy_glProgramUniform4iEXT_dispatch_table_thunk; + epoxy_glProgramUniform4iv = epoxy_glProgramUniform4iv_dispatch_table_thunk; + epoxy_glProgramUniform4ivEXT = epoxy_glProgramUniform4ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform4ui = epoxy_glProgramUniform4ui_dispatch_table_thunk; + epoxy_glProgramUniform4ui64ARB = epoxy_glProgramUniform4ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform4ui64NV = epoxy_glProgramUniform4ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform4ui64vARB = epoxy_glProgramUniform4ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform4ui64vNV = epoxy_glProgramUniform4ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform4uiEXT = epoxy_glProgramUniform4uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform4uiv = epoxy_glProgramUniform4uiv_dispatch_table_thunk; + epoxy_glProgramUniform4uivEXT = epoxy_glProgramUniform4uivEXT_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64ARB = epoxy_glProgramUniformHandleui64ARB_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64NV = epoxy_glProgramUniformHandleui64NV_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64vARB = epoxy_glProgramUniformHandleui64vARB_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64vNV = epoxy_glProgramUniformHandleui64vNV_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2dv = epoxy_glProgramUniformMatrix2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2dvEXT = epoxy_glProgramUniformMatrix2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2fv = epoxy_glProgramUniformMatrix2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2fvEXT = epoxy_glProgramUniformMatrix2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3dv = epoxy_glProgramUniformMatrix2x3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3dvEXT = epoxy_glProgramUniformMatrix2x3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3fv = epoxy_glProgramUniformMatrix2x3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3fvEXT = epoxy_glProgramUniformMatrix2x3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4dv = epoxy_glProgramUniformMatrix2x4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4dvEXT = epoxy_glProgramUniformMatrix2x4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4fv = epoxy_glProgramUniformMatrix2x4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4fvEXT = epoxy_glProgramUniformMatrix2x4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3dv = epoxy_glProgramUniformMatrix3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3dvEXT = epoxy_glProgramUniformMatrix3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3fv = epoxy_glProgramUniformMatrix3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3fvEXT = epoxy_glProgramUniformMatrix3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2dv = epoxy_glProgramUniformMatrix3x2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2dvEXT = epoxy_glProgramUniformMatrix3x2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2fv = epoxy_glProgramUniformMatrix3x2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2fvEXT = epoxy_glProgramUniformMatrix3x2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4dv = epoxy_glProgramUniformMatrix3x4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4dvEXT = epoxy_glProgramUniformMatrix3x4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4fv = epoxy_glProgramUniformMatrix3x4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4fvEXT = epoxy_glProgramUniformMatrix3x4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4dv = epoxy_glProgramUniformMatrix4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4dvEXT = epoxy_glProgramUniformMatrix4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4fv = epoxy_glProgramUniformMatrix4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4fvEXT = epoxy_glProgramUniformMatrix4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2dv = epoxy_glProgramUniformMatrix4x2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2dvEXT = epoxy_glProgramUniformMatrix4x2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2fv = epoxy_glProgramUniformMatrix4x2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2fvEXT = epoxy_glProgramUniformMatrix4x2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3dv = epoxy_glProgramUniformMatrix4x3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3dvEXT = epoxy_glProgramUniformMatrix4x3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3fv = epoxy_glProgramUniformMatrix4x3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3fvEXT = epoxy_glProgramUniformMatrix4x3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformui64NV = epoxy_glProgramUniformui64NV_dispatch_table_thunk; + epoxy_glProgramUniformui64vNV = epoxy_glProgramUniformui64vNV_dispatch_table_thunk; + epoxy_glProgramVertexLimitNV = epoxy_glProgramVertexLimitNV_dispatch_table_thunk; + epoxy_glProvokingVertex = epoxy_glProvokingVertex_dispatch_table_thunk; + epoxy_glProvokingVertexEXT = epoxy_glProvokingVertexEXT_dispatch_table_thunk; + epoxy_glPushAttrib = epoxy_glPushAttrib_dispatch_table_thunk; + epoxy_glPushClientAttrib = epoxy_glPushClientAttrib_dispatch_table_thunk; + epoxy_glPushClientAttribDefaultEXT = epoxy_glPushClientAttribDefaultEXT_dispatch_table_thunk; + epoxy_glPushDebugGroup = epoxy_glPushDebugGroup_dispatch_table_thunk; + epoxy_glPushDebugGroupKHR = epoxy_glPushDebugGroupKHR_dispatch_table_thunk; + epoxy_glPushGroupMarkerEXT = epoxy_glPushGroupMarkerEXT_dispatch_table_thunk; + epoxy_glPushMatrix = epoxy_glPushMatrix_dispatch_table_thunk; + epoxy_glPushName = epoxy_glPushName_dispatch_table_thunk; + epoxy_glQueryCounter = epoxy_glQueryCounter_dispatch_table_thunk; + epoxy_glQueryCounterEXT = epoxy_glQueryCounterEXT_dispatch_table_thunk; + epoxy_glQueryMatrixxOES = epoxy_glQueryMatrixxOES_dispatch_table_thunk; + epoxy_glQueryObjectParameteruiAMD = epoxy_glQueryObjectParameteruiAMD_dispatch_table_thunk; + epoxy_glRasterPos2d = epoxy_glRasterPos2d_dispatch_table_thunk; + epoxy_glRasterPos2dv = epoxy_glRasterPos2dv_dispatch_table_thunk; + epoxy_glRasterPos2f = epoxy_glRasterPos2f_dispatch_table_thunk; + epoxy_glRasterPos2fv = epoxy_glRasterPos2fv_dispatch_table_thunk; + epoxy_glRasterPos2i = epoxy_glRasterPos2i_dispatch_table_thunk; + epoxy_glRasterPos2iv = epoxy_glRasterPos2iv_dispatch_table_thunk; + epoxy_glRasterPos2s = epoxy_glRasterPos2s_dispatch_table_thunk; + epoxy_glRasterPos2sv = epoxy_glRasterPos2sv_dispatch_table_thunk; + epoxy_glRasterPos2xOES = epoxy_glRasterPos2xOES_dispatch_table_thunk; + epoxy_glRasterPos2xvOES = epoxy_glRasterPos2xvOES_dispatch_table_thunk; + epoxy_glRasterPos3d = epoxy_glRasterPos3d_dispatch_table_thunk; + epoxy_glRasterPos3dv = epoxy_glRasterPos3dv_dispatch_table_thunk; + epoxy_glRasterPos3f = epoxy_glRasterPos3f_dispatch_table_thunk; + epoxy_glRasterPos3fv = epoxy_glRasterPos3fv_dispatch_table_thunk; + epoxy_glRasterPos3i = epoxy_glRasterPos3i_dispatch_table_thunk; + epoxy_glRasterPos3iv = epoxy_glRasterPos3iv_dispatch_table_thunk; + epoxy_glRasterPos3s = epoxy_glRasterPos3s_dispatch_table_thunk; + epoxy_glRasterPos3sv = epoxy_glRasterPos3sv_dispatch_table_thunk; + epoxy_glRasterPos3xOES = epoxy_glRasterPos3xOES_dispatch_table_thunk; + epoxy_glRasterPos3xvOES = epoxy_glRasterPos3xvOES_dispatch_table_thunk; + epoxy_glRasterPos4d = epoxy_glRasterPos4d_dispatch_table_thunk; + epoxy_glRasterPos4dv = epoxy_glRasterPos4dv_dispatch_table_thunk; + epoxy_glRasterPos4f = epoxy_glRasterPos4f_dispatch_table_thunk; + epoxy_glRasterPos4fv = epoxy_glRasterPos4fv_dispatch_table_thunk; + epoxy_glRasterPos4i = epoxy_glRasterPos4i_dispatch_table_thunk; + epoxy_glRasterPos4iv = epoxy_glRasterPos4iv_dispatch_table_thunk; + epoxy_glRasterPos4s = epoxy_glRasterPos4s_dispatch_table_thunk; + epoxy_glRasterPos4sv = epoxy_glRasterPos4sv_dispatch_table_thunk; + epoxy_glRasterPos4xOES = epoxy_glRasterPos4xOES_dispatch_table_thunk; + epoxy_glRasterPos4xvOES = epoxy_glRasterPos4xvOES_dispatch_table_thunk; + epoxy_glRasterSamplesEXT = epoxy_glRasterSamplesEXT_dispatch_table_thunk; + epoxy_glReadBuffer = epoxy_glReadBuffer_dispatch_table_thunk; + epoxy_glReadBufferIndexedEXT = epoxy_glReadBufferIndexedEXT_dispatch_table_thunk; + epoxy_glReadBufferNV = epoxy_glReadBufferNV_dispatch_table_thunk; + epoxy_glReadInstrumentsSGIX = epoxy_glReadInstrumentsSGIX_dispatch_table_thunk; + epoxy_glReadPixels = epoxy_glReadPixels_dispatch_table_thunk; + epoxy_glReadnPixels = epoxy_glReadnPixels_dispatch_table_thunk; + epoxy_glReadnPixelsARB = epoxy_glReadnPixelsARB_dispatch_table_thunk; + epoxy_glReadnPixelsEXT = epoxy_glReadnPixelsEXT_dispatch_table_thunk; + epoxy_glReadnPixelsKHR = epoxy_glReadnPixelsKHR_dispatch_table_thunk; + epoxy_glRectd = epoxy_glRectd_dispatch_table_thunk; + epoxy_glRectdv = epoxy_glRectdv_dispatch_table_thunk; + epoxy_glRectf = epoxy_glRectf_dispatch_table_thunk; + epoxy_glRectfv = epoxy_glRectfv_dispatch_table_thunk; + epoxy_glRecti = epoxy_glRecti_dispatch_table_thunk; + epoxy_glRectiv = epoxy_glRectiv_dispatch_table_thunk; + epoxy_glRects = epoxy_glRects_dispatch_table_thunk; + epoxy_glRectsv = epoxy_glRectsv_dispatch_table_thunk; + epoxy_glRectxOES = epoxy_glRectxOES_dispatch_table_thunk; + epoxy_glRectxvOES = epoxy_glRectxvOES_dispatch_table_thunk; + epoxy_glReferencePlaneSGIX = epoxy_glReferencePlaneSGIX_dispatch_table_thunk; + epoxy_glReleaseShaderCompiler = epoxy_glReleaseShaderCompiler_dispatch_table_thunk; + epoxy_glRenderMode = epoxy_glRenderMode_dispatch_table_thunk; + epoxy_glRenderbufferStorage = epoxy_glRenderbufferStorage_dispatch_table_thunk; + epoxy_glRenderbufferStorageEXT = epoxy_glRenderbufferStorageEXT_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisample = epoxy_glRenderbufferStorageMultisample_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleANGLE = epoxy_glRenderbufferStorageMultisampleANGLE_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleAPPLE = epoxy_glRenderbufferStorageMultisampleAPPLE_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleCoverageNV = epoxy_glRenderbufferStorageMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleEXT = epoxy_glRenderbufferStorageMultisampleEXT_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleIMG = epoxy_glRenderbufferStorageMultisampleIMG_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleNV = epoxy_glRenderbufferStorageMultisampleNV_dispatch_table_thunk; + epoxy_glRenderbufferStorageOES = epoxy_glRenderbufferStorageOES_dispatch_table_thunk; + epoxy_glReplacementCodePointerSUN = epoxy_glReplacementCodePointerSUN_dispatch_table_thunk; + epoxy_glReplacementCodeubSUN = epoxy_glReplacementCodeubSUN_dispatch_table_thunk; + epoxy_glReplacementCodeubvSUN = epoxy_glReplacementCodeubvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor3fVertex3fSUN = epoxy_glReplacementCodeuiColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor3fVertex3fvSUN = epoxy_glReplacementCodeuiColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4ubVertex3fSUN = epoxy_glReplacementCodeuiColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4ubVertex3fvSUN = epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiNormal3fVertex3fSUN = epoxy_glReplacementCodeuiNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiSUN = epoxy_glReplacementCodeuiSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiVertex3fSUN = epoxy_glReplacementCodeuiVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiVertex3fvSUN = epoxy_glReplacementCodeuiVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuivSUN = epoxy_glReplacementCodeuivSUN_dispatch_table_thunk; + epoxy_glReplacementCodeusSUN = epoxy_glReplacementCodeusSUN_dispatch_table_thunk; + epoxy_glReplacementCodeusvSUN = epoxy_glReplacementCodeusvSUN_dispatch_table_thunk; + epoxy_glRequestResidentProgramsNV = epoxy_glRequestResidentProgramsNV_dispatch_table_thunk; + epoxy_glResetHistogram = epoxy_glResetHistogram_dispatch_table_thunk; + epoxy_glResetHistogramEXT = epoxy_glResetHistogramEXT_dispatch_table_thunk; + epoxy_glResetMinmax = epoxy_glResetMinmax_dispatch_table_thunk; + epoxy_glResetMinmaxEXT = epoxy_glResetMinmaxEXT_dispatch_table_thunk; + epoxy_glResizeBuffersMESA = epoxy_glResizeBuffersMESA_dispatch_table_thunk; + epoxy_glResolveDepthValuesNV = epoxy_glResolveDepthValuesNV_dispatch_table_thunk; + epoxy_glResolveMultisampleFramebufferAPPLE = epoxy_glResolveMultisampleFramebufferAPPLE_dispatch_table_thunk; + epoxy_glResumeTransformFeedback = epoxy_glResumeTransformFeedback_dispatch_table_thunk; + epoxy_glResumeTransformFeedbackNV = epoxy_glResumeTransformFeedbackNV_dispatch_table_thunk; + epoxy_glRotated = epoxy_glRotated_dispatch_table_thunk; + epoxy_glRotatef = epoxy_glRotatef_dispatch_table_thunk; + epoxy_glRotatex = epoxy_glRotatex_dispatch_table_thunk; + epoxy_glRotatexOES = epoxy_glRotatexOES_dispatch_table_thunk; + epoxy_glSampleCoverage = epoxy_glSampleCoverage_dispatch_table_thunk; + epoxy_glSampleCoverageARB = epoxy_glSampleCoverageARB_dispatch_table_thunk; + epoxy_glSampleCoveragex = epoxy_glSampleCoveragex_dispatch_table_thunk; + epoxy_glSampleCoveragexOES = epoxy_glSampleCoveragexOES_dispatch_table_thunk; + epoxy_glSampleMapATI = epoxy_glSampleMapATI_dispatch_table_thunk; + epoxy_glSampleMaskEXT = epoxy_glSampleMaskEXT_dispatch_table_thunk; + epoxy_glSampleMaskIndexedNV = epoxy_glSampleMaskIndexedNV_dispatch_table_thunk; + epoxy_glSampleMaskSGIS = epoxy_glSampleMaskSGIS_dispatch_table_thunk; + epoxy_glSampleMaski = epoxy_glSampleMaski_dispatch_table_thunk; + epoxy_glSamplePatternEXT = epoxy_glSamplePatternEXT_dispatch_table_thunk; + epoxy_glSamplePatternSGIS = epoxy_glSamplePatternSGIS_dispatch_table_thunk; + epoxy_glSamplerParameterIiv = epoxy_glSamplerParameterIiv_dispatch_table_thunk; + epoxy_glSamplerParameterIivEXT = epoxy_glSamplerParameterIivEXT_dispatch_table_thunk; + epoxy_glSamplerParameterIivOES = epoxy_glSamplerParameterIivOES_dispatch_table_thunk; + epoxy_glSamplerParameterIuiv = epoxy_glSamplerParameterIuiv_dispatch_table_thunk; + epoxy_glSamplerParameterIuivEXT = epoxy_glSamplerParameterIuivEXT_dispatch_table_thunk; + epoxy_glSamplerParameterIuivOES = epoxy_glSamplerParameterIuivOES_dispatch_table_thunk; + epoxy_glSamplerParameterf = epoxy_glSamplerParameterf_dispatch_table_thunk; + epoxy_glSamplerParameterfv = epoxy_glSamplerParameterfv_dispatch_table_thunk; + epoxy_glSamplerParameteri = epoxy_glSamplerParameteri_dispatch_table_thunk; + epoxy_glSamplerParameteriv = epoxy_glSamplerParameteriv_dispatch_table_thunk; + epoxy_glScaled = epoxy_glScaled_dispatch_table_thunk; + epoxy_glScalef = epoxy_glScalef_dispatch_table_thunk; + epoxy_glScalex = epoxy_glScalex_dispatch_table_thunk; + epoxy_glScalexOES = epoxy_glScalexOES_dispatch_table_thunk; + epoxy_glScissor = epoxy_glScissor_dispatch_table_thunk; + epoxy_glScissorArrayv = epoxy_glScissorArrayv_dispatch_table_thunk; + epoxy_glScissorArrayvNV = epoxy_glScissorArrayvNV_dispatch_table_thunk; + epoxy_glScissorIndexed = epoxy_glScissorIndexed_dispatch_table_thunk; + epoxy_glScissorIndexedNV = epoxy_glScissorIndexedNV_dispatch_table_thunk; + epoxy_glScissorIndexedv = epoxy_glScissorIndexedv_dispatch_table_thunk; + epoxy_glScissorIndexedvNV = epoxy_glScissorIndexedvNV_dispatch_table_thunk; + epoxy_glSecondaryColor3b = epoxy_glSecondaryColor3b_dispatch_table_thunk; + epoxy_glSecondaryColor3bEXT = epoxy_glSecondaryColor3bEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3bv = epoxy_glSecondaryColor3bv_dispatch_table_thunk; + epoxy_glSecondaryColor3bvEXT = epoxy_glSecondaryColor3bvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3d = epoxy_glSecondaryColor3d_dispatch_table_thunk; + epoxy_glSecondaryColor3dEXT = epoxy_glSecondaryColor3dEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3dv = epoxy_glSecondaryColor3dv_dispatch_table_thunk; + epoxy_glSecondaryColor3dvEXT = epoxy_glSecondaryColor3dvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3f = epoxy_glSecondaryColor3f_dispatch_table_thunk; + epoxy_glSecondaryColor3fEXT = epoxy_glSecondaryColor3fEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3fv = epoxy_glSecondaryColor3fv_dispatch_table_thunk; + epoxy_glSecondaryColor3fvEXT = epoxy_glSecondaryColor3fvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3hNV = epoxy_glSecondaryColor3hNV_dispatch_table_thunk; + epoxy_glSecondaryColor3hvNV = epoxy_glSecondaryColor3hvNV_dispatch_table_thunk; + epoxy_glSecondaryColor3i = epoxy_glSecondaryColor3i_dispatch_table_thunk; + epoxy_glSecondaryColor3iEXT = epoxy_glSecondaryColor3iEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3iv = epoxy_glSecondaryColor3iv_dispatch_table_thunk; + epoxy_glSecondaryColor3ivEXT = epoxy_glSecondaryColor3ivEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3s = epoxy_glSecondaryColor3s_dispatch_table_thunk; + epoxy_glSecondaryColor3sEXT = epoxy_glSecondaryColor3sEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3sv = epoxy_glSecondaryColor3sv_dispatch_table_thunk; + epoxy_glSecondaryColor3svEXT = epoxy_glSecondaryColor3svEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ub = epoxy_glSecondaryColor3ub_dispatch_table_thunk; + epoxy_glSecondaryColor3ubEXT = epoxy_glSecondaryColor3ubEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ubv = epoxy_glSecondaryColor3ubv_dispatch_table_thunk; + epoxy_glSecondaryColor3ubvEXT = epoxy_glSecondaryColor3ubvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ui = epoxy_glSecondaryColor3ui_dispatch_table_thunk; + epoxy_glSecondaryColor3uiEXT = epoxy_glSecondaryColor3uiEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3uiv = epoxy_glSecondaryColor3uiv_dispatch_table_thunk; + epoxy_glSecondaryColor3uivEXT = epoxy_glSecondaryColor3uivEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3us = epoxy_glSecondaryColor3us_dispatch_table_thunk; + epoxy_glSecondaryColor3usEXT = epoxy_glSecondaryColor3usEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3usv = epoxy_glSecondaryColor3usv_dispatch_table_thunk; + epoxy_glSecondaryColor3usvEXT = epoxy_glSecondaryColor3usvEXT_dispatch_table_thunk; + epoxy_glSecondaryColorFormatNV = epoxy_glSecondaryColorFormatNV_dispatch_table_thunk; + epoxy_glSecondaryColorP3ui = epoxy_glSecondaryColorP3ui_dispatch_table_thunk; + epoxy_glSecondaryColorP3uiv = epoxy_glSecondaryColorP3uiv_dispatch_table_thunk; + epoxy_glSecondaryColorPointer = epoxy_glSecondaryColorPointer_dispatch_table_thunk; + epoxy_glSecondaryColorPointerEXT = epoxy_glSecondaryColorPointerEXT_dispatch_table_thunk; + epoxy_glSecondaryColorPointerListIBM = epoxy_glSecondaryColorPointerListIBM_dispatch_table_thunk; + epoxy_glSelectBuffer = epoxy_glSelectBuffer_dispatch_table_thunk; + epoxy_glSelectPerfMonitorCountersAMD = epoxy_glSelectPerfMonitorCountersAMD_dispatch_table_thunk; + epoxy_glSeparableFilter2D = epoxy_glSeparableFilter2D_dispatch_table_thunk; + epoxy_glSeparableFilter2DEXT = epoxy_glSeparableFilter2DEXT_dispatch_table_thunk; + epoxy_glSetFenceAPPLE = epoxy_glSetFenceAPPLE_dispatch_table_thunk; + epoxy_glSetFenceNV = epoxy_glSetFenceNV_dispatch_table_thunk; + epoxy_glSetFragmentShaderConstantATI = epoxy_glSetFragmentShaderConstantATI_dispatch_table_thunk; + epoxy_glSetInvariantEXT = epoxy_glSetInvariantEXT_dispatch_table_thunk; + epoxy_glSetLocalConstantEXT = epoxy_glSetLocalConstantEXT_dispatch_table_thunk; + epoxy_glSetMultisamplefvAMD = epoxy_glSetMultisamplefvAMD_dispatch_table_thunk; + epoxy_glShadeModel = epoxy_glShadeModel_dispatch_table_thunk; + epoxy_glShaderBinary = epoxy_glShaderBinary_dispatch_table_thunk; + epoxy_glShaderOp1EXT = epoxy_glShaderOp1EXT_dispatch_table_thunk; + epoxy_glShaderOp2EXT = epoxy_glShaderOp2EXT_dispatch_table_thunk; + epoxy_glShaderOp3EXT = epoxy_glShaderOp3EXT_dispatch_table_thunk; + epoxy_glShaderSource = epoxy_glShaderSource_dispatch_table_thunk; + epoxy_glShaderSourceARB = epoxy_glShaderSourceARB_dispatch_table_thunk; + epoxy_glShaderStorageBlockBinding = epoxy_glShaderStorageBlockBinding_dispatch_table_thunk; + epoxy_glSharpenTexFuncSGIS = epoxy_glSharpenTexFuncSGIS_dispatch_table_thunk; + epoxy_glSpriteParameterfSGIX = epoxy_glSpriteParameterfSGIX_dispatch_table_thunk; + epoxy_glSpriteParameterfvSGIX = epoxy_glSpriteParameterfvSGIX_dispatch_table_thunk; + epoxy_glSpriteParameteriSGIX = epoxy_glSpriteParameteriSGIX_dispatch_table_thunk; + epoxy_glSpriteParameterivSGIX = epoxy_glSpriteParameterivSGIX_dispatch_table_thunk; + epoxy_glStartInstrumentsSGIX = epoxy_glStartInstrumentsSGIX_dispatch_table_thunk; + epoxy_glStartTilingQCOM = epoxy_glStartTilingQCOM_dispatch_table_thunk; + epoxy_glStateCaptureNV = epoxy_glStateCaptureNV_dispatch_table_thunk; + epoxy_glStencilClearTagEXT = epoxy_glStencilClearTagEXT_dispatch_table_thunk; + epoxy_glStencilFillPathInstancedNV = epoxy_glStencilFillPathInstancedNV_dispatch_table_thunk; + epoxy_glStencilFillPathNV = epoxy_glStencilFillPathNV_dispatch_table_thunk; + epoxy_glStencilFunc = epoxy_glStencilFunc_dispatch_table_thunk; + epoxy_glStencilFuncSeparate = epoxy_glStencilFuncSeparate_dispatch_table_thunk; + epoxy_glStencilFuncSeparateATI = epoxy_glStencilFuncSeparateATI_dispatch_table_thunk; + epoxy_glStencilMask = epoxy_glStencilMask_dispatch_table_thunk; + epoxy_glStencilMaskSeparate = epoxy_glStencilMaskSeparate_dispatch_table_thunk; + epoxy_glStencilOp = epoxy_glStencilOp_dispatch_table_thunk; + epoxy_glStencilOpSeparate = epoxy_glStencilOpSeparate_dispatch_table_thunk; + epoxy_glStencilOpSeparateATI = epoxy_glStencilOpSeparateATI_dispatch_table_thunk; + epoxy_glStencilOpValueAMD = epoxy_glStencilOpValueAMD_dispatch_table_thunk; + epoxy_glStencilStrokePathInstancedNV = epoxy_glStencilStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glStencilStrokePathNV = epoxy_glStencilStrokePathNV_dispatch_table_thunk; + epoxy_glStencilThenCoverFillPathInstancedNV = epoxy_glStencilThenCoverFillPathInstancedNV_dispatch_table_thunk; + epoxy_glStencilThenCoverFillPathNV = epoxy_glStencilThenCoverFillPathNV_dispatch_table_thunk; + epoxy_glStencilThenCoverStrokePathInstancedNV = epoxy_glStencilThenCoverStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glStencilThenCoverStrokePathNV = epoxy_glStencilThenCoverStrokePathNV_dispatch_table_thunk; + epoxy_glStopInstrumentsSGIX = epoxy_glStopInstrumentsSGIX_dispatch_table_thunk; + epoxy_glStringMarkerGREMEDY = epoxy_glStringMarkerGREMEDY_dispatch_table_thunk; + epoxy_glSubpixelPrecisionBiasNV = epoxy_glSubpixelPrecisionBiasNV_dispatch_table_thunk; + epoxy_glSwizzleEXT = epoxy_glSwizzleEXT_dispatch_table_thunk; + epoxy_glSyncTextureINTEL = epoxy_glSyncTextureINTEL_dispatch_table_thunk; + epoxy_glTagSampleBufferSGIX = epoxy_glTagSampleBufferSGIX_dispatch_table_thunk; + epoxy_glTangent3bEXT = epoxy_glTangent3bEXT_dispatch_table_thunk; + epoxy_glTangent3bvEXT = epoxy_glTangent3bvEXT_dispatch_table_thunk; + epoxy_glTangent3dEXT = epoxy_glTangent3dEXT_dispatch_table_thunk; + epoxy_glTangent3dvEXT = epoxy_glTangent3dvEXT_dispatch_table_thunk; + epoxy_glTangent3fEXT = epoxy_glTangent3fEXT_dispatch_table_thunk; + epoxy_glTangent3fvEXT = epoxy_glTangent3fvEXT_dispatch_table_thunk; + epoxy_glTangent3iEXT = epoxy_glTangent3iEXT_dispatch_table_thunk; + epoxy_glTangent3ivEXT = epoxy_glTangent3ivEXT_dispatch_table_thunk; + epoxy_glTangent3sEXT = epoxy_glTangent3sEXT_dispatch_table_thunk; + epoxy_glTangent3svEXT = epoxy_glTangent3svEXT_dispatch_table_thunk; + epoxy_glTangentPointerEXT = epoxy_glTangentPointerEXT_dispatch_table_thunk; + epoxy_glTbufferMask3DFX = epoxy_glTbufferMask3DFX_dispatch_table_thunk; + epoxy_glTessellationFactorAMD = epoxy_glTessellationFactorAMD_dispatch_table_thunk; + epoxy_glTessellationModeAMD = epoxy_glTessellationModeAMD_dispatch_table_thunk; + epoxy_glTestFenceAPPLE = epoxy_glTestFenceAPPLE_dispatch_table_thunk; + epoxy_glTestFenceNV = epoxy_glTestFenceNV_dispatch_table_thunk; + epoxy_glTestObjectAPPLE = epoxy_glTestObjectAPPLE_dispatch_table_thunk; + epoxy_glTexBuffer = epoxy_glTexBuffer_dispatch_table_thunk; + epoxy_glTexBufferARB = epoxy_glTexBufferARB_dispatch_table_thunk; + epoxy_glTexBufferEXT = epoxy_glTexBufferEXT_dispatch_table_thunk; + epoxy_glTexBufferOES = epoxy_glTexBufferOES_dispatch_table_thunk; + epoxy_glTexBufferRange = epoxy_glTexBufferRange_dispatch_table_thunk; + epoxy_glTexBufferRangeEXT = epoxy_glTexBufferRangeEXT_dispatch_table_thunk; + epoxy_glTexBufferRangeOES = epoxy_glTexBufferRangeOES_dispatch_table_thunk; + epoxy_glTexBumpParameterfvATI = epoxy_glTexBumpParameterfvATI_dispatch_table_thunk; + epoxy_glTexBumpParameterivATI = epoxy_glTexBumpParameterivATI_dispatch_table_thunk; + epoxy_glTexCoord1bOES = epoxy_glTexCoord1bOES_dispatch_table_thunk; + epoxy_glTexCoord1bvOES = epoxy_glTexCoord1bvOES_dispatch_table_thunk; + epoxy_glTexCoord1d = epoxy_glTexCoord1d_dispatch_table_thunk; + epoxy_glTexCoord1dv = epoxy_glTexCoord1dv_dispatch_table_thunk; + epoxy_glTexCoord1f = epoxy_glTexCoord1f_dispatch_table_thunk; + epoxy_glTexCoord1fv = epoxy_glTexCoord1fv_dispatch_table_thunk; + epoxy_glTexCoord1hNV = epoxy_glTexCoord1hNV_dispatch_table_thunk; + epoxy_glTexCoord1hvNV = epoxy_glTexCoord1hvNV_dispatch_table_thunk; + epoxy_glTexCoord1i = epoxy_glTexCoord1i_dispatch_table_thunk; + epoxy_glTexCoord1iv = epoxy_glTexCoord1iv_dispatch_table_thunk; + epoxy_glTexCoord1s = epoxy_glTexCoord1s_dispatch_table_thunk; + epoxy_glTexCoord1sv = epoxy_glTexCoord1sv_dispatch_table_thunk; + epoxy_glTexCoord1xOES = epoxy_glTexCoord1xOES_dispatch_table_thunk; + epoxy_glTexCoord1xvOES = epoxy_glTexCoord1xvOES_dispatch_table_thunk; + epoxy_glTexCoord2bOES = epoxy_glTexCoord2bOES_dispatch_table_thunk; + epoxy_glTexCoord2bvOES = epoxy_glTexCoord2bvOES_dispatch_table_thunk; + epoxy_glTexCoord2d = epoxy_glTexCoord2d_dispatch_table_thunk; + epoxy_glTexCoord2dv = epoxy_glTexCoord2dv_dispatch_table_thunk; + epoxy_glTexCoord2f = epoxy_glTexCoord2f_dispatch_table_thunk; + epoxy_glTexCoord2fColor3fVertex3fSUN = epoxy_glTexCoord2fColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor3fVertex3fvSUN = epoxy_glTexCoord2fColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4ubVertex3fSUN = epoxy_glTexCoord2fColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4ubVertex3fvSUN = epoxy_glTexCoord2fColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fNormal3fVertex3fSUN = epoxy_glTexCoord2fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fNormal3fVertex3fvSUN = epoxy_glTexCoord2fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fVertex3fSUN = epoxy_glTexCoord2fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fVertex3fvSUN = epoxy_glTexCoord2fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fv = epoxy_glTexCoord2fv_dispatch_table_thunk; + epoxy_glTexCoord2hNV = epoxy_glTexCoord2hNV_dispatch_table_thunk; + epoxy_glTexCoord2hvNV = epoxy_glTexCoord2hvNV_dispatch_table_thunk; + epoxy_glTexCoord2i = epoxy_glTexCoord2i_dispatch_table_thunk; + epoxy_glTexCoord2iv = epoxy_glTexCoord2iv_dispatch_table_thunk; + epoxy_glTexCoord2s = epoxy_glTexCoord2s_dispatch_table_thunk; + epoxy_glTexCoord2sv = epoxy_glTexCoord2sv_dispatch_table_thunk; + epoxy_glTexCoord2xOES = epoxy_glTexCoord2xOES_dispatch_table_thunk; + epoxy_glTexCoord2xvOES = epoxy_glTexCoord2xvOES_dispatch_table_thunk; + epoxy_glTexCoord3bOES = epoxy_glTexCoord3bOES_dispatch_table_thunk; + epoxy_glTexCoord3bvOES = epoxy_glTexCoord3bvOES_dispatch_table_thunk; + epoxy_glTexCoord3d = epoxy_glTexCoord3d_dispatch_table_thunk; + epoxy_glTexCoord3dv = epoxy_glTexCoord3dv_dispatch_table_thunk; + epoxy_glTexCoord3f = epoxy_glTexCoord3f_dispatch_table_thunk; + epoxy_glTexCoord3fv = epoxy_glTexCoord3fv_dispatch_table_thunk; + epoxy_glTexCoord3hNV = epoxy_glTexCoord3hNV_dispatch_table_thunk; + epoxy_glTexCoord3hvNV = epoxy_glTexCoord3hvNV_dispatch_table_thunk; + epoxy_glTexCoord3i = epoxy_glTexCoord3i_dispatch_table_thunk; + epoxy_glTexCoord3iv = epoxy_glTexCoord3iv_dispatch_table_thunk; + epoxy_glTexCoord3s = epoxy_glTexCoord3s_dispatch_table_thunk; + epoxy_glTexCoord3sv = epoxy_glTexCoord3sv_dispatch_table_thunk; + epoxy_glTexCoord3xOES = epoxy_glTexCoord3xOES_dispatch_table_thunk; + epoxy_glTexCoord3xvOES = epoxy_glTexCoord3xvOES_dispatch_table_thunk; + epoxy_glTexCoord4bOES = epoxy_glTexCoord4bOES_dispatch_table_thunk; + epoxy_glTexCoord4bvOES = epoxy_glTexCoord4bvOES_dispatch_table_thunk; + epoxy_glTexCoord4d = epoxy_glTexCoord4d_dispatch_table_thunk; + epoxy_glTexCoord4dv = epoxy_glTexCoord4dv_dispatch_table_thunk; + epoxy_glTexCoord4f = epoxy_glTexCoord4f_dispatch_table_thunk; + epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_dispatch_table_thunk; + epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_dispatch_table_thunk; + epoxy_glTexCoord4fVertex4fSUN = epoxy_glTexCoord4fVertex4fSUN_dispatch_table_thunk; + epoxy_glTexCoord4fVertex4fvSUN = epoxy_glTexCoord4fVertex4fvSUN_dispatch_table_thunk; + epoxy_glTexCoord4fv = epoxy_glTexCoord4fv_dispatch_table_thunk; + epoxy_glTexCoord4hNV = epoxy_glTexCoord4hNV_dispatch_table_thunk; + epoxy_glTexCoord4hvNV = epoxy_glTexCoord4hvNV_dispatch_table_thunk; + epoxy_glTexCoord4i = epoxy_glTexCoord4i_dispatch_table_thunk; + epoxy_glTexCoord4iv = epoxy_glTexCoord4iv_dispatch_table_thunk; + epoxy_glTexCoord4s = epoxy_glTexCoord4s_dispatch_table_thunk; + epoxy_glTexCoord4sv = epoxy_glTexCoord4sv_dispatch_table_thunk; + epoxy_glTexCoord4xOES = epoxy_glTexCoord4xOES_dispatch_table_thunk; + epoxy_glTexCoord4xvOES = epoxy_glTexCoord4xvOES_dispatch_table_thunk; + epoxy_glTexCoordFormatNV = epoxy_glTexCoordFormatNV_dispatch_table_thunk; + epoxy_glTexCoordP1ui = epoxy_glTexCoordP1ui_dispatch_table_thunk; + epoxy_glTexCoordP1uiv = epoxy_glTexCoordP1uiv_dispatch_table_thunk; + epoxy_glTexCoordP2ui = epoxy_glTexCoordP2ui_dispatch_table_thunk; + epoxy_glTexCoordP2uiv = epoxy_glTexCoordP2uiv_dispatch_table_thunk; + epoxy_glTexCoordP3ui = epoxy_glTexCoordP3ui_dispatch_table_thunk; + epoxy_glTexCoordP3uiv = epoxy_glTexCoordP3uiv_dispatch_table_thunk; + epoxy_glTexCoordP4ui = epoxy_glTexCoordP4ui_dispatch_table_thunk; + epoxy_glTexCoordP4uiv = epoxy_glTexCoordP4uiv_dispatch_table_thunk; + epoxy_glTexCoordPointer = epoxy_glTexCoordPointer_dispatch_table_thunk; + epoxy_glTexCoordPointerEXT = epoxy_glTexCoordPointerEXT_dispatch_table_thunk; + epoxy_glTexCoordPointerListIBM = epoxy_glTexCoordPointerListIBM_dispatch_table_thunk; + epoxy_glTexCoordPointervINTEL = epoxy_glTexCoordPointervINTEL_dispatch_table_thunk; + epoxy_glTexEnvf = epoxy_glTexEnvf_dispatch_table_thunk; + epoxy_glTexEnvfv = epoxy_glTexEnvfv_dispatch_table_thunk; + epoxy_glTexEnvi = epoxy_glTexEnvi_dispatch_table_thunk; + epoxy_glTexEnviv = epoxy_glTexEnviv_dispatch_table_thunk; + epoxy_glTexEnvx = epoxy_glTexEnvx_dispatch_table_thunk; + epoxy_glTexEnvxOES = epoxy_glTexEnvxOES_dispatch_table_thunk; + epoxy_glTexEnvxv = epoxy_glTexEnvxv_dispatch_table_thunk; + epoxy_glTexEnvxvOES = epoxy_glTexEnvxvOES_dispatch_table_thunk; + epoxy_glTexFilterFuncSGIS = epoxy_glTexFilterFuncSGIS_dispatch_table_thunk; + epoxy_glTexGend = epoxy_glTexGend_dispatch_table_thunk; + epoxy_glTexGendv = epoxy_glTexGendv_dispatch_table_thunk; + epoxy_glTexGenf = epoxy_glTexGenf_dispatch_table_thunk; + epoxy_glTexGenfOES = epoxy_glTexGenfOES_dispatch_table_thunk; + epoxy_glTexGenfv = epoxy_glTexGenfv_dispatch_table_thunk; + epoxy_glTexGenfvOES = epoxy_glTexGenfvOES_dispatch_table_thunk; + epoxy_glTexGeni = epoxy_glTexGeni_dispatch_table_thunk; + epoxy_glTexGeniOES = epoxy_glTexGeniOES_dispatch_table_thunk; + epoxy_glTexGeniv = epoxy_glTexGeniv_dispatch_table_thunk; + epoxy_glTexGenivOES = epoxy_glTexGenivOES_dispatch_table_thunk; + epoxy_glTexGenxOES = epoxy_glTexGenxOES_dispatch_table_thunk; + epoxy_glTexGenxvOES = epoxy_glTexGenxvOES_dispatch_table_thunk; + epoxy_glTexImage1D = epoxy_glTexImage1D_dispatch_table_thunk; + epoxy_glTexImage2D = epoxy_glTexImage2D_dispatch_table_thunk; + epoxy_glTexImage2DMultisample = epoxy_glTexImage2DMultisample_dispatch_table_thunk; + epoxy_glTexImage2DMultisampleCoverageNV = epoxy_glTexImage2DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTexImage3D = epoxy_glTexImage3D_dispatch_table_thunk; + epoxy_glTexImage3DEXT = epoxy_glTexImage3DEXT_dispatch_table_thunk; + epoxy_glTexImage3DMultisample = epoxy_glTexImage3DMultisample_dispatch_table_thunk; + epoxy_glTexImage3DMultisampleCoverageNV = epoxy_glTexImage3DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTexImage3DOES = epoxy_glTexImage3DOES_dispatch_table_thunk; + epoxy_glTexImage4DSGIS = epoxy_glTexImage4DSGIS_dispatch_table_thunk; + epoxy_glTexPageCommitmentARB = epoxy_glTexPageCommitmentARB_dispatch_table_thunk; + epoxy_glTexPageCommitmentEXT = epoxy_glTexPageCommitmentEXT_dispatch_table_thunk; + epoxy_glTexParameterIiv = epoxy_glTexParameterIiv_dispatch_table_thunk; + epoxy_glTexParameterIivEXT = epoxy_glTexParameterIivEXT_dispatch_table_thunk; + epoxy_glTexParameterIivOES = epoxy_glTexParameterIivOES_dispatch_table_thunk; + epoxy_glTexParameterIuiv = epoxy_glTexParameterIuiv_dispatch_table_thunk; + epoxy_glTexParameterIuivEXT = epoxy_glTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glTexParameterIuivOES = epoxy_glTexParameterIuivOES_dispatch_table_thunk; + epoxy_glTexParameterf = epoxy_glTexParameterf_dispatch_table_thunk; + epoxy_glTexParameterfv = epoxy_glTexParameterfv_dispatch_table_thunk; + epoxy_glTexParameteri = epoxy_glTexParameteri_dispatch_table_thunk; + epoxy_glTexParameteriv = epoxy_glTexParameteriv_dispatch_table_thunk; + epoxy_glTexParameterx = epoxy_glTexParameterx_dispatch_table_thunk; + epoxy_glTexParameterxOES = epoxy_glTexParameterxOES_dispatch_table_thunk; + epoxy_glTexParameterxv = epoxy_glTexParameterxv_dispatch_table_thunk; + epoxy_glTexParameterxvOES = epoxy_glTexParameterxvOES_dispatch_table_thunk; + epoxy_glTexRenderbufferNV = epoxy_glTexRenderbufferNV_dispatch_table_thunk; + epoxy_glTexStorage1D = epoxy_glTexStorage1D_dispatch_table_thunk; + epoxy_glTexStorage1DEXT = epoxy_glTexStorage1DEXT_dispatch_table_thunk; + epoxy_glTexStorage2D = epoxy_glTexStorage2D_dispatch_table_thunk; + epoxy_glTexStorage2DEXT = epoxy_glTexStorage2DEXT_dispatch_table_thunk; + epoxy_glTexStorage2DMultisample = epoxy_glTexStorage2DMultisample_dispatch_table_thunk; + epoxy_glTexStorage3D = epoxy_glTexStorage3D_dispatch_table_thunk; + epoxy_glTexStorage3DEXT = epoxy_glTexStorage3DEXT_dispatch_table_thunk; + epoxy_glTexStorage3DMultisample = epoxy_glTexStorage3DMultisample_dispatch_table_thunk; + epoxy_glTexStorage3DMultisampleOES = epoxy_glTexStorage3DMultisampleOES_dispatch_table_thunk; + epoxy_glTexStorageSparseAMD = epoxy_glTexStorageSparseAMD_dispatch_table_thunk; + epoxy_glTexSubImage1D = epoxy_glTexSubImage1D_dispatch_table_thunk; + epoxy_glTexSubImage1DEXT = epoxy_glTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glTexSubImage2D = epoxy_glTexSubImage2D_dispatch_table_thunk; + epoxy_glTexSubImage2DEXT = epoxy_glTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glTexSubImage3D = epoxy_glTexSubImage3D_dispatch_table_thunk; + epoxy_glTexSubImage3DEXT = epoxy_glTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glTexSubImage3DOES = epoxy_glTexSubImage3DOES_dispatch_table_thunk; + epoxy_glTexSubImage4DSGIS = epoxy_glTexSubImage4DSGIS_dispatch_table_thunk; + epoxy_glTextureBarrier = epoxy_glTextureBarrier_dispatch_table_thunk; + epoxy_glTextureBarrierNV = epoxy_glTextureBarrierNV_dispatch_table_thunk; + epoxy_glTextureBuffer = epoxy_glTextureBuffer_dispatch_table_thunk; + epoxy_glTextureBufferEXT = epoxy_glTextureBufferEXT_dispatch_table_thunk; + epoxy_glTextureBufferRange = epoxy_glTextureBufferRange_dispatch_table_thunk; + epoxy_glTextureBufferRangeEXT = epoxy_glTextureBufferRangeEXT_dispatch_table_thunk; + epoxy_glTextureColorMaskSGIS = epoxy_glTextureColorMaskSGIS_dispatch_table_thunk; + epoxy_glTextureImage1DEXT = epoxy_glTextureImage1DEXT_dispatch_table_thunk; + epoxy_glTextureImage2DEXT = epoxy_glTextureImage2DEXT_dispatch_table_thunk; + epoxy_glTextureImage2DMultisampleCoverageNV = epoxy_glTextureImage2DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTextureImage2DMultisampleNV = epoxy_glTextureImage2DMultisampleNV_dispatch_table_thunk; + epoxy_glTextureImage3DEXT = epoxy_glTextureImage3DEXT_dispatch_table_thunk; + epoxy_glTextureImage3DMultisampleCoverageNV = epoxy_glTextureImage3DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTextureImage3DMultisampleNV = epoxy_glTextureImage3DMultisampleNV_dispatch_table_thunk; + epoxy_glTextureLightEXT = epoxy_glTextureLightEXT_dispatch_table_thunk; + epoxy_glTextureMaterialEXT = epoxy_glTextureMaterialEXT_dispatch_table_thunk; + epoxy_glTextureNormalEXT = epoxy_glTextureNormalEXT_dispatch_table_thunk; + epoxy_glTexturePageCommitmentEXT = epoxy_glTexturePageCommitmentEXT_dispatch_table_thunk; + epoxy_glTextureParameterIiv = epoxy_glTextureParameterIiv_dispatch_table_thunk; + epoxy_glTextureParameterIivEXT = epoxy_glTextureParameterIivEXT_dispatch_table_thunk; + epoxy_glTextureParameterIuiv = epoxy_glTextureParameterIuiv_dispatch_table_thunk; + epoxy_glTextureParameterIuivEXT = epoxy_glTextureParameterIuivEXT_dispatch_table_thunk; + epoxy_glTextureParameterf = epoxy_glTextureParameterf_dispatch_table_thunk; + epoxy_glTextureParameterfEXT = epoxy_glTextureParameterfEXT_dispatch_table_thunk; + epoxy_glTextureParameterfv = epoxy_glTextureParameterfv_dispatch_table_thunk; + epoxy_glTextureParameterfvEXT = epoxy_glTextureParameterfvEXT_dispatch_table_thunk; + epoxy_glTextureParameteri = epoxy_glTextureParameteri_dispatch_table_thunk; + epoxy_glTextureParameteriEXT = epoxy_glTextureParameteriEXT_dispatch_table_thunk; + epoxy_glTextureParameteriv = epoxy_glTextureParameteriv_dispatch_table_thunk; + epoxy_glTextureParameterivEXT = epoxy_glTextureParameterivEXT_dispatch_table_thunk; + epoxy_glTextureRangeAPPLE = epoxy_glTextureRangeAPPLE_dispatch_table_thunk; + epoxy_glTextureRenderbufferEXT = epoxy_glTextureRenderbufferEXT_dispatch_table_thunk; + epoxy_glTextureStorage1D = epoxy_glTextureStorage1D_dispatch_table_thunk; + epoxy_glTextureStorage1DEXT = epoxy_glTextureStorage1DEXT_dispatch_table_thunk; + epoxy_glTextureStorage2D = epoxy_glTextureStorage2D_dispatch_table_thunk; + epoxy_glTextureStorage2DEXT = epoxy_glTextureStorage2DEXT_dispatch_table_thunk; + epoxy_glTextureStorage2DMultisample = epoxy_glTextureStorage2DMultisample_dispatch_table_thunk; + epoxy_glTextureStorage2DMultisampleEXT = epoxy_glTextureStorage2DMultisampleEXT_dispatch_table_thunk; + epoxy_glTextureStorage3D = epoxy_glTextureStorage3D_dispatch_table_thunk; + epoxy_glTextureStorage3DEXT = epoxy_glTextureStorage3DEXT_dispatch_table_thunk; + epoxy_glTextureStorage3DMultisample = epoxy_glTextureStorage3DMultisample_dispatch_table_thunk; + epoxy_glTextureStorage3DMultisampleEXT = epoxy_glTextureStorage3DMultisampleEXT_dispatch_table_thunk; + epoxy_glTextureStorageSparseAMD = epoxy_glTextureStorageSparseAMD_dispatch_table_thunk; + epoxy_glTextureSubImage1D = epoxy_glTextureSubImage1D_dispatch_table_thunk; + epoxy_glTextureSubImage1DEXT = epoxy_glTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glTextureSubImage2D = epoxy_glTextureSubImage2D_dispatch_table_thunk; + epoxy_glTextureSubImage2DEXT = epoxy_glTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glTextureSubImage3D = epoxy_glTextureSubImage3D_dispatch_table_thunk; + epoxy_glTextureSubImage3DEXT = epoxy_glTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glTextureView = epoxy_glTextureView_dispatch_table_thunk; + epoxy_glTextureViewEXT = epoxy_glTextureViewEXT_dispatch_table_thunk; + epoxy_glTextureViewOES = epoxy_glTextureViewOES_dispatch_table_thunk; + epoxy_glTrackMatrixNV = epoxy_glTrackMatrixNV_dispatch_table_thunk; + epoxy_glTransformFeedbackAttribsNV = epoxy_glTransformFeedbackAttribsNV_dispatch_table_thunk; + epoxy_glTransformFeedbackBufferBase = epoxy_glTransformFeedbackBufferBase_dispatch_table_thunk; + epoxy_glTransformFeedbackBufferRange = epoxy_glTransformFeedbackBufferRange_dispatch_table_thunk; + epoxy_glTransformFeedbackStreamAttribsNV = epoxy_glTransformFeedbackStreamAttribsNV_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryings = epoxy_glTransformFeedbackVaryings_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryingsEXT = epoxy_glTransformFeedbackVaryingsEXT_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryingsNV = epoxy_glTransformFeedbackVaryingsNV_dispatch_table_thunk; + epoxy_glTransformPathNV = epoxy_glTransformPathNV_dispatch_table_thunk; + epoxy_glTranslated = epoxy_glTranslated_dispatch_table_thunk; + epoxy_glTranslatef = epoxy_glTranslatef_dispatch_table_thunk; + epoxy_glTranslatex = epoxy_glTranslatex_dispatch_table_thunk; + epoxy_glTranslatexOES = epoxy_glTranslatexOES_dispatch_table_thunk; + epoxy_glUniform1d = epoxy_glUniform1d_dispatch_table_thunk; + epoxy_glUniform1dv = epoxy_glUniform1dv_dispatch_table_thunk; + epoxy_glUniform1f = epoxy_glUniform1f_dispatch_table_thunk; + epoxy_glUniform1fARB = epoxy_glUniform1fARB_dispatch_table_thunk; + epoxy_glUniform1fv = epoxy_glUniform1fv_dispatch_table_thunk; + epoxy_glUniform1fvARB = epoxy_glUniform1fvARB_dispatch_table_thunk; + epoxy_glUniform1i = epoxy_glUniform1i_dispatch_table_thunk; + epoxy_glUniform1i64ARB = epoxy_glUniform1i64ARB_dispatch_table_thunk; + epoxy_glUniform1i64NV = epoxy_glUniform1i64NV_dispatch_table_thunk; + epoxy_glUniform1i64vARB = epoxy_glUniform1i64vARB_dispatch_table_thunk; + epoxy_glUniform1i64vNV = epoxy_glUniform1i64vNV_dispatch_table_thunk; + epoxy_glUniform1iARB = epoxy_glUniform1iARB_dispatch_table_thunk; + epoxy_glUniform1iv = epoxy_glUniform1iv_dispatch_table_thunk; + epoxy_glUniform1ivARB = epoxy_glUniform1ivARB_dispatch_table_thunk; + epoxy_glUniform1ui = epoxy_glUniform1ui_dispatch_table_thunk; + epoxy_glUniform1ui64ARB = epoxy_glUniform1ui64ARB_dispatch_table_thunk; + epoxy_glUniform1ui64NV = epoxy_glUniform1ui64NV_dispatch_table_thunk; + epoxy_glUniform1ui64vARB = epoxy_glUniform1ui64vARB_dispatch_table_thunk; + epoxy_glUniform1ui64vNV = epoxy_glUniform1ui64vNV_dispatch_table_thunk; + epoxy_glUniform1uiEXT = epoxy_glUniform1uiEXT_dispatch_table_thunk; + epoxy_glUniform1uiv = epoxy_glUniform1uiv_dispatch_table_thunk; + epoxy_glUniform1uivEXT = epoxy_glUniform1uivEXT_dispatch_table_thunk; + epoxy_glUniform2d = epoxy_glUniform2d_dispatch_table_thunk; + epoxy_glUniform2dv = epoxy_glUniform2dv_dispatch_table_thunk; + epoxy_glUniform2f = epoxy_glUniform2f_dispatch_table_thunk; + epoxy_glUniform2fARB = epoxy_glUniform2fARB_dispatch_table_thunk; + epoxy_glUniform2fv = epoxy_glUniform2fv_dispatch_table_thunk; + epoxy_glUniform2fvARB = epoxy_glUniform2fvARB_dispatch_table_thunk; + epoxy_glUniform2i = epoxy_glUniform2i_dispatch_table_thunk; + epoxy_glUniform2i64ARB = epoxy_glUniform2i64ARB_dispatch_table_thunk; + epoxy_glUniform2i64NV = epoxy_glUniform2i64NV_dispatch_table_thunk; + epoxy_glUniform2i64vARB = epoxy_glUniform2i64vARB_dispatch_table_thunk; + epoxy_glUniform2i64vNV = epoxy_glUniform2i64vNV_dispatch_table_thunk; + epoxy_glUniform2iARB = epoxy_glUniform2iARB_dispatch_table_thunk; + epoxy_glUniform2iv = epoxy_glUniform2iv_dispatch_table_thunk; + epoxy_glUniform2ivARB = epoxy_glUniform2ivARB_dispatch_table_thunk; + epoxy_glUniform2ui = epoxy_glUniform2ui_dispatch_table_thunk; + epoxy_glUniform2ui64ARB = epoxy_glUniform2ui64ARB_dispatch_table_thunk; + epoxy_glUniform2ui64NV = epoxy_glUniform2ui64NV_dispatch_table_thunk; + epoxy_glUniform2ui64vARB = epoxy_glUniform2ui64vARB_dispatch_table_thunk; + epoxy_glUniform2ui64vNV = epoxy_glUniform2ui64vNV_dispatch_table_thunk; + epoxy_glUniform2uiEXT = epoxy_glUniform2uiEXT_dispatch_table_thunk; + epoxy_glUniform2uiv = epoxy_glUniform2uiv_dispatch_table_thunk; + epoxy_glUniform2uivEXT = epoxy_glUniform2uivEXT_dispatch_table_thunk; + epoxy_glUniform3d = epoxy_glUniform3d_dispatch_table_thunk; + epoxy_glUniform3dv = epoxy_glUniform3dv_dispatch_table_thunk; + epoxy_glUniform3f = epoxy_glUniform3f_dispatch_table_thunk; + epoxy_glUniform3fARB = epoxy_glUniform3fARB_dispatch_table_thunk; + epoxy_glUniform3fv = epoxy_glUniform3fv_dispatch_table_thunk; + epoxy_glUniform3fvARB = epoxy_glUniform3fvARB_dispatch_table_thunk; + epoxy_glUniform3i = epoxy_glUniform3i_dispatch_table_thunk; + epoxy_glUniform3i64ARB = epoxy_glUniform3i64ARB_dispatch_table_thunk; + epoxy_glUniform3i64NV = epoxy_glUniform3i64NV_dispatch_table_thunk; + epoxy_glUniform3i64vARB = epoxy_glUniform3i64vARB_dispatch_table_thunk; + epoxy_glUniform3i64vNV = epoxy_glUniform3i64vNV_dispatch_table_thunk; + epoxy_glUniform3iARB = epoxy_glUniform3iARB_dispatch_table_thunk; + epoxy_glUniform3iv = epoxy_glUniform3iv_dispatch_table_thunk; + epoxy_glUniform3ivARB = epoxy_glUniform3ivARB_dispatch_table_thunk; + epoxy_glUniform3ui = epoxy_glUniform3ui_dispatch_table_thunk; + epoxy_glUniform3ui64ARB = epoxy_glUniform3ui64ARB_dispatch_table_thunk; + epoxy_glUniform3ui64NV = epoxy_glUniform3ui64NV_dispatch_table_thunk; + epoxy_glUniform3ui64vARB = epoxy_glUniform3ui64vARB_dispatch_table_thunk; + epoxy_glUniform3ui64vNV = epoxy_glUniform3ui64vNV_dispatch_table_thunk; + epoxy_glUniform3uiEXT = epoxy_glUniform3uiEXT_dispatch_table_thunk; + epoxy_glUniform3uiv = epoxy_glUniform3uiv_dispatch_table_thunk; + epoxy_glUniform3uivEXT = epoxy_glUniform3uivEXT_dispatch_table_thunk; + epoxy_glUniform4d = epoxy_glUniform4d_dispatch_table_thunk; + epoxy_glUniform4dv = epoxy_glUniform4dv_dispatch_table_thunk; + epoxy_glUniform4f = epoxy_glUniform4f_dispatch_table_thunk; + epoxy_glUniform4fARB = epoxy_glUniform4fARB_dispatch_table_thunk; + epoxy_glUniform4fv = epoxy_glUniform4fv_dispatch_table_thunk; + epoxy_glUniform4fvARB = epoxy_glUniform4fvARB_dispatch_table_thunk; + epoxy_glUniform4i = epoxy_glUniform4i_dispatch_table_thunk; + epoxy_glUniform4i64ARB = epoxy_glUniform4i64ARB_dispatch_table_thunk; + epoxy_glUniform4i64NV = epoxy_glUniform4i64NV_dispatch_table_thunk; + epoxy_glUniform4i64vARB = epoxy_glUniform4i64vARB_dispatch_table_thunk; + epoxy_glUniform4i64vNV = epoxy_glUniform4i64vNV_dispatch_table_thunk; + epoxy_glUniform4iARB = epoxy_glUniform4iARB_dispatch_table_thunk; + epoxy_glUniform4iv = epoxy_glUniform4iv_dispatch_table_thunk; + epoxy_glUniform4ivARB = epoxy_glUniform4ivARB_dispatch_table_thunk; + epoxy_glUniform4ui = epoxy_glUniform4ui_dispatch_table_thunk; + epoxy_glUniform4ui64ARB = epoxy_glUniform4ui64ARB_dispatch_table_thunk; + epoxy_glUniform4ui64NV = epoxy_glUniform4ui64NV_dispatch_table_thunk; + epoxy_glUniform4ui64vARB = epoxy_glUniform4ui64vARB_dispatch_table_thunk; + epoxy_glUniform4ui64vNV = epoxy_glUniform4ui64vNV_dispatch_table_thunk; + epoxy_glUniform4uiEXT = epoxy_glUniform4uiEXT_dispatch_table_thunk; + epoxy_glUniform4uiv = epoxy_glUniform4uiv_dispatch_table_thunk; + epoxy_glUniform4uivEXT = epoxy_glUniform4uivEXT_dispatch_table_thunk; + epoxy_glUniformBlockBinding = epoxy_glUniformBlockBinding_dispatch_table_thunk; + epoxy_glUniformBufferEXT = epoxy_glUniformBufferEXT_dispatch_table_thunk; + epoxy_glUniformHandleui64ARB = epoxy_glUniformHandleui64ARB_dispatch_table_thunk; + epoxy_glUniformHandleui64NV = epoxy_glUniformHandleui64NV_dispatch_table_thunk; + epoxy_glUniformHandleui64vARB = epoxy_glUniformHandleui64vARB_dispatch_table_thunk; + epoxy_glUniformHandleui64vNV = epoxy_glUniformHandleui64vNV_dispatch_table_thunk; + epoxy_glUniformMatrix2dv = epoxy_glUniformMatrix2dv_dispatch_table_thunk; + epoxy_glUniformMatrix2fv = epoxy_glUniformMatrix2fv_dispatch_table_thunk; + epoxy_glUniformMatrix2fvARB = epoxy_glUniformMatrix2fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix2x3dv = epoxy_glUniformMatrix2x3dv_dispatch_table_thunk; + epoxy_glUniformMatrix2x3fv = epoxy_glUniformMatrix2x3fv_dispatch_table_thunk; + epoxy_glUniformMatrix2x3fvNV = epoxy_glUniformMatrix2x3fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix2x4dv = epoxy_glUniformMatrix2x4dv_dispatch_table_thunk; + epoxy_glUniformMatrix2x4fv = epoxy_glUniformMatrix2x4fv_dispatch_table_thunk; + epoxy_glUniformMatrix2x4fvNV = epoxy_glUniformMatrix2x4fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix3dv = epoxy_glUniformMatrix3dv_dispatch_table_thunk; + epoxy_glUniformMatrix3fv = epoxy_glUniformMatrix3fv_dispatch_table_thunk; + epoxy_glUniformMatrix3fvARB = epoxy_glUniformMatrix3fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix3x2dv = epoxy_glUniformMatrix3x2dv_dispatch_table_thunk; + epoxy_glUniformMatrix3x2fv = epoxy_glUniformMatrix3x2fv_dispatch_table_thunk; + epoxy_glUniformMatrix3x2fvNV = epoxy_glUniformMatrix3x2fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix3x4dv = epoxy_glUniformMatrix3x4dv_dispatch_table_thunk; + epoxy_glUniformMatrix3x4fv = epoxy_glUniformMatrix3x4fv_dispatch_table_thunk; + epoxy_glUniformMatrix3x4fvNV = epoxy_glUniformMatrix3x4fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix4dv = epoxy_glUniformMatrix4dv_dispatch_table_thunk; + epoxy_glUniformMatrix4fv = epoxy_glUniformMatrix4fv_dispatch_table_thunk; + epoxy_glUniformMatrix4fvARB = epoxy_glUniformMatrix4fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix4x2dv = epoxy_glUniformMatrix4x2dv_dispatch_table_thunk; + epoxy_glUniformMatrix4x2fv = epoxy_glUniformMatrix4x2fv_dispatch_table_thunk; + epoxy_glUniformMatrix4x2fvNV = epoxy_glUniformMatrix4x2fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix4x3dv = epoxy_glUniformMatrix4x3dv_dispatch_table_thunk; + epoxy_glUniformMatrix4x3fv = epoxy_glUniformMatrix4x3fv_dispatch_table_thunk; + epoxy_glUniformMatrix4x3fvNV = epoxy_glUniformMatrix4x3fvNV_dispatch_table_thunk; + epoxy_glUniformSubroutinesuiv = epoxy_glUniformSubroutinesuiv_dispatch_table_thunk; + epoxy_glUniformui64NV = epoxy_glUniformui64NV_dispatch_table_thunk; + epoxy_glUniformui64vNV = epoxy_glUniformui64vNV_dispatch_table_thunk; + epoxy_glUnlockArraysEXT = epoxy_glUnlockArraysEXT_dispatch_table_thunk; + epoxy_glUnmapBuffer = epoxy_glUnmapBuffer_dispatch_table_thunk; + epoxy_glUnmapBufferARB = epoxy_glUnmapBufferARB_dispatch_table_thunk; + epoxy_glUnmapBufferOES = epoxy_glUnmapBufferOES_dispatch_table_thunk; + epoxy_glUnmapNamedBuffer = epoxy_glUnmapNamedBuffer_dispatch_table_thunk; + epoxy_glUnmapNamedBufferEXT = epoxy_glUnmapNamedBufferEXT_dispatch_table_thunk; + epoxy_glUnmapObjectBufferATI = epoxy_glUnmapObjectBufferATI_dispatch_table_thunk; + epoxy_glUnmapTexture2DINTEL = epoxy_glUnmapTexture2DINTEL_dispatch_table_thunk; + epoxy_glUpdateObjectBufferATI = epoxy_glUpdateObjectBufferATI_dispatch_table_thunk; + epoxy_glUseProgram = epoxy_glUseProgram_dispatch_table_thunk; + epoxy_glUseProgramObjectARB = epoxy_glUseProgramObjectARB_dispatch_table_thunk; + epoxy_glUseProgramStages = epoxy_glUseProgramStages_dispatch_table_thunk; + epoxy_glUseProgramStagesEXT = epoxy_glUseProgramStagesEXT_dispatch_table_thunk; + epoxy_glUseShaderProgramEXT = epoxy_glUseShaderProgramEXT_dispatch_table_thunk; + epoxy_glVDPAUFiniNV = epoxy_glVDPAUFiniNV_dispatch_table_thunk; + epoxy_glVDPAUGetSurfaceivNV = epoxy_glVDPAUGetSurfaceivNV_dispatch_table_thunk; + epoxy_glVDPAUInitNV = epoxy_glVDPAUInitNV_dispatch_table_thunk; + epoxy_glVDPAUIsSurfaceNV = epoxy_glVDPAUIsSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAUMapSurfacesNV = epoxy_glVDPAUMapSurfacesNV_dispatch_table_thunk; + epoxy_glVDPAURegisterOutputSurfaceNV = epoxy_glVDPAURegisterOutputSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAURegisterVideoSurfaceNV = epoxy_glVDPAURegisterVideoSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAUSurfaceAccessNV = epoxy_glVDPAUSurfaceAccessNV_dispatch_table_thunk; + epoxy_glVDPAUUnmapSurfacesNV = epoxy_glVDPAUUnmapSurfacesNV_dispatch_table_thunk; + epoxy_glVDPAUUnregisterSurfaceNV = epoxy_glVDPAUUnregisterSurfaceNV_dispatch_table_thunk; + epoxy_glValidateProgram = epoxy_glValidateProgram_dispatch_table_thunk; + epoxy_glValidateProgramARB = epoxy_glValidateProgramARB_dispatch_table_thunk; + epoxy_glValidateProgramPipeline = epoxy_glValidateProgramPipeline_dispatch_table_thunk; + epoxy_glValidateProgramPipelineEXT = epoxy_glValidateProgramPipelineEXT_dispatch_table_thunk; + epoxy_glVariantArrayObjectATI = epoxy_glVariantArrayObjectATI_dispatch_table_thunk; + epoxy_glVariantPointerEXT = epoxy_glVariantPointerEXT_dispatch_table_thunk; + epoxy_glVariantbvEXT = epoxy_glVariantbvEXT_dispatch_table_thunk; + epoxy_glVariantdvEXT = epoxy_glVariantdvEXT_dispatch_table_thunk; + epoxy_glVariantfvEXT = epoxy_glVariantfvEXT_dispatch_table_thunk; + epoxy_glVariantivEXT = epoxy_glVariantivEXT_dispatch_table_thunk; + epoxy_glVariantsvEXT = epoxy_glVariantsvEXT_dispatch_table_thunk; + epoxy_glVariantubvEXT = epoxy_glVariantubvEXT_dispatch_table_thunk; + epoxy_glVariantuivEXT = epoxy_glVariantuivEXT_dispatch_table_thunk; + epoxy_glVariantusvEXT = epoxy_glVariantusvEXT_dispatch_table_thunk; + epoxy_glVertex2bOES = epoxy_glVertex2bOES_dispatch_table_thunk; + epoxy_glVertex2bvOES = epoxy_glVertex2bvOES_dispatch_table_thunk; + epoxy_glVertex2d = epoxy_glVertex2d_dispatch_table_thunk; + epoxy_glVertex2dv = epoxy_glVertex2dv_dispatch_table_thunk; + epoxy_glVertex2f = epoxy_glVertex2f_dispatch_table_thunk; + epoxy_glVertex2fv = epoxy_glVertex2fv_dispatch_table_thunk; + epoxy_glVertex2hNV = epoxy_glVertex2hNV_dispatch_table_thunk; + epoxy_glVertex2hvNV = epoxy_glVertex2hvNV_dispatch_table_thunk; + epoxy_glVertex2i = epoxy_glVertex2i_dispatch_table_thunk; + epoxy_glVertex2iv = epoxy_glVertex2iv_dispatch_table_thunk; + epoxy_glVertex2s = epoxy_glVertex2s_dispatch_table_thunk; + epoxy_glVertex2sv = epoxy_glVertex2sv_dispatch_table_thunk; + epoxy_glVertex2xOES = epoxy_glVertex2xOES_dispatch_table_thunk; + epoxy_glVertex2xvOES = epoxy_glVertex2xvOES_dispatch_table_thunk; + epoxy_glVertex3bOES = epoxy_glVertex3bOES_dispatch_table_thunk; + epoxy_glVertex3bvOES = epoxy_glVertex3bvOES_dispatch_table_thunk; + epoxy_glVertex3d = epoxy_glVertex3d_dispatch_table_thunk; + epoxy_glVertex3dv = epoxy_glVertex3dv_dispatch_table_thunk; + epoxy_glVertex3f = epoxy_glVertex3f_dispatch_table_thunk; + epoxy_glVertex3fv = epoxy_glVertex3fv_dispatch_table_thunk; + epoxy_glVertex3hNV = epoxy_glVertex3hNV_dispatch_table_thunk; + epoxy_glVertex3hvNV = epoxy_glVertex3hvNV_dispatch_table_thunk; + epoxy_glVertex3i = epoxy_glVertex3i_dispatch_table_thunk; + epoxy_glVertex3iv = epoxy_glVertex3iv_dispatch_table_thunk; + epoxy_glVertex3s = epoxy_glVertex3s_dispatch_table_thunk; + epoxy_glVertex3sv = epoxy_glVertex3sv_dispatch_table_thunk; + epoxy_glVertex3xOES = epoxy_glVertex3xOES_dispatch_table_thunk; + epoxy_glVertex3xvOES = epoxy_glVertex3xvOES_dispatch_table_thunk; + epoxy_glVertex4bOES = epoxy_glVertex4bOES_dispatch_table_thunk; + epoxy_glVertex4bvOES = epoxy_glVertex4bvOES_dispatch_table_thunk; + epoxy_glVertex4d = epoxy_glVertex4d_dispatch_table_thunk; + epoxy_glVertex4dv = epoxy_glVertex4dv_dispatch_table_thunk; + epoxy_glVertex4f = epoxy_glVertex4f_dispatch_table_thunk; + epoxy_glVertex4fv = epoxy_glVertex4fv_dispatch_table_thunk; + epoxy_glVertex4hNV = epoxy_glVertex4hNV_dispatch_table_thunk; + epoxy_glVertex4hvNV = epoxy_glVertex4hvNV_dispatch_table_thunk; + epoxy_glVertex4i = epoxy_glVertex4i_dispatch_table_thunk; + epoxy_glVertex4iv = epoxy_glVertex4iv_dispatch_table_thunk; + epoxy_glVertex4s = epoxy_glVertex4s_dispatch_table_thunk; + epoxy_glVertex4sv = epoxy_glVertex4sv_dispatch_table_thunk; + epoxy_glVertex4xOES = epoxy_glVertex4xOES_dispatch_table_thunk; + epoxy_glVertex4xvOES = epoxy_glVertex4xvOES_dispatch_table_thunk; + epoxy_glVertexArrayAttribBinding = epoxy_glVertexArrayAttribBinding_dispatch_table_thunk; + epoxy_glVertexArrayAttribFormat = epoxy_glVertexArrayAttribFormat_dispatch_table_thunk; + epoxy_glVertexArrayAttribIFormat = epoxy_glVertexArrayAttribIFormat_dispatch_table_thunk; + epoxy_glVertexArrayAttribLFormat = epoxy_glVertexArrayAttribLFormat_dispatch_table_thunk; + epoxy_glVertexArrayBindVertexBufferEXT = epoxy_glVertexArrayBindVertexBufferEXT_dispatch_table_thunk; + epoxy_glVertexArrayBindingDivisor = epoxy_glVertexArrayBindingDivisor_dispatch_table_thunk; + epoxy_glVertexArrayColorOffsetEXT = epoxy_glVertexArrayColorOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayEdgeFlagOffsetEXT = epoxy_glVertexArrayEdgeFlagOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayElementBuffer = epoxy_glVertexArrayElementBuffer_dispatch_table_thunk; + epoxy_glVertexArrayFogCoordOffsetEXT = epoxy_glVertexArrayFogCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayIndexOffsetEXT = epoxy_glVertexArrayIndexOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayMultiTexCoordOffsetEXT = epoxy_glVertexArrayMultiTexCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayNormalOffsetEXT = epoxy_glVertexArrayNormalOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayParameteriAPPLE = epoxy_glVertexArrayParameteriAPPLE_dispatch_table_thunk; + epoxy_glVertexArrayRangeAPPLE = epoxy_glVertexArrayRangeAPPLE_dispatch_table_thunk; + epoxy_glVertexArrayRangeNV = epoxy_glVertexArrayRangeNV_dispatch_table_thunk; + epoxy_glVertexArraySecondaryColorOffsetEXT = epoxy_glVertexArraySecondaryColorOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayTexCoordOffsetEXT = epoxy_glVertexArrayTexCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribBindingEXT = epoxy_glVertexArrayVertexAttribBindingEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribDivisorEXT = epoxy_glVertexArrayVertexAttribDivisorEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribFormatEXT = epoxy_glVertexArrayVertexAttribFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribIFormatEXT = epoxy_glVertexArrayVertexAttribIFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribIOffsetEXT = epoxy_glVertexArrayVertexAttribIOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribLFormatEXT = epoxy_glVertexArrayVertexAttribLFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribLOffsetEXT = epoxy_glVertexArrayVertexAttribLOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribOffsetEXT = epoxy_glVertexArrayVertexAttribOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexBindingDivisorEXT = epoxy_glVertexArrayVertexBindingDivisorEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexBuffer = epoxy_glVertexArrayVertexBuffer_dispatch_table_thunk; + epoxy_glVertexArrayVertexBuffers = epoxy_glVertexArrayVertexBuffers_dispatch_table_thunk; + epoxy_glVertexArrayVertexOffsetEXT = epoxy_glVertexArrayVertexOffsetEXT_dispatch_table_thunk; + epoxy_glVertexAttrib1d = epoxy_glVertexAttrib1d_dispatch_table_thunk; + epoxy_glVertexAttrib1dARB = epoxy_glVertexAttrib1dARB_dispatch_table_thunk; + epoxy_glVertexAttrib1dNV = epoxy_glVertexAttrib1dNV_dispatch_table_thunk; + epoxy_glVertexAttrib1dv = epoxy_glVertexAttrib1dv_dispatch_table_thunk; + epoxy_glVertexAttrib1dvARB = epoxy_glVertexAttrib1dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib1dvNV = epoxy_glVertexAttrib1dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1f = epoxy_glVertexAttrib1f_dispatch_table_thunk; + epoxy_glVertexAttrib1fARB = epoxy_glVertexAttrib1fARB_dispatch_table_thunk; + epoxy_glVertexAttrib1fNV = epoxy_glVertexAttrib1fNV_dispatch_table_thunk; + epoxy_glVertexAttrib1fv = epoxy_glVertexAttrib1fv_dispatch_table_thunk; + epoxy_glVertexAttrib1fvARB = epoxy_glVertexAttrib1fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib1fvNV = epoxy_glVertexAttrib1fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1hNV = epoxy_glVertexAttrib1hNV_dispatch_table_thunk; + epoxy_glVertexAttrib1hvNV = epoxy_glVertexAttrib1hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1s = epoxy_glVertexAttrib1s_dispatch_table_thunk; + epoxy_glVertexAttrib1sARB = epoxy_glVertexAttrib1sARB_dispatch_table_thunk; + epoxy_glVertexAttrib1sNV = epoxy_glVertexAttrib1sNV_dispatch_table_thunk; + epoxy_glVertexAttrib1sv = epoxy_glVertexAttrib1sv_dispatch_table_thunk; + epoxy_glVertexAttrib1svARB = epoxy_glVertexAttrib1svARB_dispatch_table_thunk; + epoxy_glVertexAttrib1svNV = epoxy_glVertexAttrib1svNV_dispatch_table_thunk; + epoxy_glVertexAttrib2d = epoxy_glVertexAttrib2d_dispatch_table_thunk; + epoxy_glVertexAttrib2dARB = epoxy_glVertexAttrib2dARB_dispatch_table_thunk; + epoxy_glVertexAttrib2dNV = epoxy_glVertexAttrib2dNV_dispatch_table_thunk; + epoxy_glVertexAttrib2dv = epoxy_glVertexAttrib2dv_dispatch_table_thunk; + epoxy_glVertexAttrib2dvARB = epoxy_glVertexAttrib2dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib2dvNV = epoxy_glVertexAttrib2dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2f = epoxy_glVertexAttrib2f_dispatch_table_thunk; + epoxy_glVertexAttrib2fARB = epoxy_glVertexAttrib2fARB_dispatch_table_thunk; + epoxy_glVertexAttrib2fNV = epoxy_glVertexAttrib2fNV_dispatch_table_thunk; + epoxy_glVertexAttrib2fv = epoxy_glVertexAttrib2fv_dispatch_table_thunk; + epoxy_glVertexAttrib2fvARB = epoxy_glVertexAttrib2fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib2fvNV = epoxy_glVertexAttrib2fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2hNV = epoxy_glVertexAttrib2hNV_dispatch_table_thunk; + epoxy_glVertexAttrib2hvNV = epoxy_glVertexAttrib2hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2s = epoxy_glVertexAttrib2s_dispatch_table_thunk; + epoxy_glVertexAttrib2sARB = epoxy_glVertexAttrib2sARB_dispatch_table_thunk; + epoxy_glVertexAttrib2sNV = epoxy_glVertexAttrib2sNV_dispatch_table_thunk; + epoxy_glVertexAttrib2sv = epoxy_glVertexAttrib2sv_dispatch_table_thunk; + epoxy_glVertexAttrib2svARB = epoxy_glVertexAttrib2svARB_dispatch_table_thunk; + epoxy_glVertexAttrib2svNV = epoxy_glVertexAttrib2svNV_dispatch_table_thunk; + epoxy_glVertexAttrib3d = epoxy_glVertexAttrib3d_dispatch_table_thunk; + epoxy_glVertexAttrib3dARB = epoxy_glVertexAttrib3dARB_dispatch_table_thunk; + epoxy_glVertexAttrib3dNV = epoxy_glVertexAttrib3dNV_dispatch_table_thunk; + epoxy_glVertexAttrib3dv = epoxy_glVertexAttrib3dv_dispatch_table_thunk; + epoxy_glVertexAttrib3dvARB = epoxy_glVertexAttrib3dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib3dvNV = epoxy_glVertexAttrib3dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3f = epoxy_glVertexAttrib3f_dispatch_table_thunk; + epoxy_glVertexAttrib3fARB = epoxy_glVertexAttrib3fARB_dispatch_table_thunk; + epoxy_glVertexAttrib3fNV = epoxy_glVertexAttrib3fNV_dispatch_table_thunk; + epoxy_glVertexAttrib3fv = epoxy_glVertexAttrib3fv_dispatch_table_thunk; + epoxy_glVertexAttrib3fvARB = epoxy_glVertexAttrib3fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib3fvNV = epoxy_glVertexAttrib3fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3hNV = epoxy_glVertexAttrib3hNV_dispatch_table_thunk; + epoxy_glVertexAttrib3hvNV = epoxy_glVertexAttrib3hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3s = epoxy_glVertexAttrib3s_dispatch_table_thunk; + epoxy_glVertexAttrib3sARB = epoxy_glVertexAttrib3sARB_dispatch_table_thunk; + epoxy_glVertexAttrib3sNV = epoxy_glVertexAttrib3sNV_dispatch_table_thunk; + epoxy_glVertexAttrib3sv = epoxy_glVertexAttrib3sv_dispatch_table_thunk; + epoxy_glVertexAttrib3svARB = epoxy_glVertexAttrib3svARB_dispatch_table_thunk; + epoxy_glVertexAttrib3svNV = epoxy_glVertexAttrib3svNV_dispatch_table_thunk; + epoxy_glVertexAttrib4Nbv = epoxy_glVertexAttrib4Nbv_dispatch_table_thunk; + epoxy_glVertexAttrib4NbvARB = epoxy_glVertexAttrib4NbvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Niv = epoxy_glVertexAttrib4Niv_dispatch_table_thunk; + epoxy_glVertexAttrib4NivARB = epoxy_glVertexAttrib4NivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nsv = epoxy_glVertexAttrib4Nsv_dispatch_table_thunk; + epoxy_glVertexAttrib4NsvARB = epoxy_glVertexAttrib4NsvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nub = epoxy_glVertexAttrib4Nub_dispatch_table_thunk; + epoxy_glVertexAttrib4NubARB = epoxy_glVertexAttrib4NubARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nubv = epoxy_glVertexAttrib4Nubv_dispatch_table_thunk; + epoxy_glVertexAttrib4NubvARB = epoxy_glVertexAttrib4NubvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nuiv = epoxy_glVertexAttrib4Nuiv_dispatch_table_thunk; + epoxy_glVertexAttrib4NuivARB = epoxy_glVertexAttrib4NuivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nusv = epoxy_glVertexAttrib4Nusv_dispatch_table_thunk; + epoxy_glVertexAttrib4NusvARB = epoxy_glVertexAttrib4NusvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4bv = epoxy_glVertexAttrib4bv_dispatch_table_thunk; + epoxy_glVertexAttrib4bvARB = epoxy_glVertexAttrib4bvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4d = epoxy_glVertexAttrib4d_dispatch_table_thunk; + epoxy_glVertexAttrib4dARB = epoxy_glVertexAttrib4dARB_dispatch_table_thunk; + epoxy_glVertexAttrib4dNV = epoxy_glVertexAttrib4dNV_dispatch_table_thunk; + epoxy_glVertexAttrib4dv = epoxy_glVertexAttrib4dv_dispatch_table_thunk; + epoxy_glVertexAttrib4dvARB = epoxy_glVertexAttrib4dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4dvNV = epoxy_glVertexAttrib4dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4f = epoxy_glVertexAttrib4f_dispatch_table_thunk; + epoxy_glVertexAttrib4fARB = epoxy_glVertexAttrib4fARB_dispatch_table_thunk; + epoxy_glVertexAttrib4fNV = epoxy_glVertexAttrib4fNV_dispatch_table_thunk; + epoxy_glVertexAttrib4fv = epoxy_glVertexAttrib4fv_dispatch_table_thunk; + epoxy_glVertexAttrib4fvARB = epoxy_glVertexAttrib4fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4fvNV = epoxy_glVertexAttrib4fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4hNV = epoxy_glVertexAttrib4hNV_dispatch_table_thunk; + epoxy_glVertexAttrib4hvNV = epoxy_glVertexAttrib4hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4iv = epoxy_glVertexAttrib4iv_dispatch_table_thunk; + epoxy_glVertexAttrib4ivARB = epoxy_glVertexAttrib4ivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4s = epoxy_glVertexAttrib4s_dispatch_table_thunk; + epoxy_glVertexAttrib4sARB = epoxy_glVertexAttrib4sARB_dispatch_table_thunk; + epoxy_glVertexAttrib4sNV = epoxy_glVertexAttrib4sNV_dispatch_table_thunk; + epoxy_glVertexAttrib4sv = epoxy_glVertexAttrib4sv_dispatch_table_thunk; + epoxy_glVertexAttrib4svARB = epoxy_glVertexAttrib4svARB_dispatch_table_thunk; + epoxy_glVertexAttrib4svNV = epoxy_glVertexAttrib4svNV_dispatch_table_thunk; + epoxy_glVertexAttrib4ubNV = epoxy_glVertexAttrib4ubNV_dispatch_table_thunk; + epoxy_glVertexAttrib4ubv = epoxy_glVertexAttrib4ubv_dispatch_table_thunk; + epoxy_glVertexAttrib4ubvARB = epoxy_glVertexAttrib4ubvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4ubvNV = epoxy_glVertexAttrib4ubvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4uiv = epoxy_glVertexAttrib4uiv_dispatch_table_thunk; + epoxy_glVertexAttrib4uivARB = epoxy_glVertexAttrib4uivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4usv = epoxy_glVertexAttrib4usv_dispatch_table_thunk; + epoxy_glVertexAttrib4usvARB = epoxy_glVertexAttrib4usvARB_dispatch_table_thunk; + epoxy_glVertexAttribArrayObjectATI = epoxy_glVertexAttribArrayObjectATI_dispatch_table_thunk; + epoxy_glVertexAttribBinding = epoxy_glVertexAttribBinding_dispatch_table_thunk; + epoxy_glVertexAttribDivisor = epoxy_glVertexAttribDivisor_dispatch_table_thunk; + epoxy_glVertexAttribDivisorANGLE = epoxy_glVertexAttribDivisorANGLE_dispatch_table_thunk; + epoxy_glVertexAttribDivisorARB = epoxy_glVertexAttribDivisorARB_dispatch_table_thunk; + epoxy_glVertexAttribDivisorEXT = epoxy_glVertexAttribDivisorEXT_dispatch_table_thunk; + epoxy_glVertexAttribDivisorNV = epoxy_glVertexAttribDivisorNV_dispatch_table_thunk; + epoxy_glVertexAttribFormat = epoxy_glVertexAttribFormat_dispatch_table_thunk; + epoxy_glVertexAttribFormatNV = epoxy_glVertexAttribFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribI1i = epoxy_glVertexAttribI1i_dispatch_table_thunk; + epoxy_glVertexAttribI1iEXT = epoxy_glVertexAttribI1iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1iv = epoxy_glVertexAttribI1iv_dispatch_table_thunk; + epoxy_glVertexAttribI1ivEXT = epoxy_glVertexAttribI1ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1ui = epoxy_glVertexAttribI1ui_dispatch_table_thunk; + epoxy_glVertexAttribI1uiEXT = epoxy_glVertexAttribI1uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1uiv = epoxy_glVertexAttribI1uiv_dispatch_table_thunk; + epoxy_glVertexAttribI1uivEXT = epoxy_glVertexAttribI1uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2i = epoxy_glVertexAttribI2i_dispatch_table_thunk; + epoxy_glVertexAttribI2iEXT = epoxy_glVertexAttribI2iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2iv = epoxy_glVertexAttribI2iv_dispatch_table_thunk; + epoxy_glVertexAttribI2ivEXT = epoxy_glVertexAttribI2ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2ui = epoxy_glVertexAttribI2ui_dispatch_table_thunk; + epoxy_glVertexAttribI2uiEXT = epoxy_glVertexAttribI2uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2uiv = epoxy_glVertexAttribI2uiv_dispatch_table_thunk; + epoxy_glVertexAttribI2uivEXT = epoxy_glVertexAttribI2uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3i = epoxy_glVertexAttribI3i_dispatch_table_thunk; + epoxy_glVertexAttribI3iEXT = epoxy_glVertexAttribI3iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3iv = epoxy_glVertexAttribI3iv_dispatch_table_thunk; + epoxy_glVertexAttribI3ivEXT = epoxy_glVertexAttribI3ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3ui = epoxy_glVertexAttribI3ui_dispatch_table_thunk; + epoxy_glVertexAttribI3uiEXT = epoxy_glVertexAttribI3uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3uiv = epoxy_glVertexAttribI3uiv_dispatch_table_thunk; + epoxy_glVertexAttribI3uivEXT = epoxy_glVertexAttribI3uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4bv = epoxy_glVertexAttribI4bv_dispatch_table_thunk; + epoxy_glVertexAttribI4bvEXT = epoxy_glVertexAttribI4bvEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4i = epoxy_glVertexAttribI4i_dispatch_table_thunk; + epoxy_glVertexAttribI4iEXT = epoxy_glVertexAttribI4iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4iv = epoxy_glVertexAttribI4iv_dispatch_table_thunk; + epoxy_glVertexAttribI4ivEXT = epoxy_glVertexAttribI4ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4sv = epoxy_glVertexAttribI4sv_dispatch_table_thunk; + epoxy_glVertexAttribI4svEXT = epoxy_glVertexAttribI4svEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4ubv = epoxy_glVertexAttribI4ubv_dispatch_table_thunk; + epoxy_glVertexAttribI4ubvEXT = epoxy_glVertexAttribI4ubvEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4ui = epoxy_glVertexAttribI4ui_dispatch_table_thunk; + epoxy_glVertexAttribI4uiEXT = epoxy_glVertexAttribI4uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4uiv = epoxy_glVertexAttribI4uiv_dispatch_table_thunk; + epoxy_glVertexAttribI4uivEXT = epoxy_glVertexAttribI4uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4usv = epoxy_glVertexAttribI4usv_dispatch_table_thunk; + epoxy_glVertexAttribI4usvEXT = epoxy_glVertexAttribI4usvEXT_dispatch_table_thunk; + epoxy_glVertexAttribIFormat = epoxy_glVertexAttribIFormat_dispatch_table_thunk; + epoxy_glVertexAttribIFormatNV = epoxy_glVertexAttribIFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribIPointer = epoxy_glVertexAttribIPointer_dispatch_table_thunk; + epoxy_glVertexAttribIPointerEXT = epoxy_glVertexAttribIPointerEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1d = epoxy_glVertexAttribL1d_dispatch_table_thunk; + epoxy_glVertexAttribL1dEXT = epoxy_glVertexAttribL1dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1dv = epoxy_glVertexAttribL1dv_dispatch_table_thunk; + epoxy_glVertexAttribL1dvEXT = epoxy_glVertexAttribL1dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1i64NV = epoxy_glVertexAttribL1i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL1i64vNV = epoxy_glVertexAttribL1i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64ARB = epoxy_glVertexAttribL1ui64ARB_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64NV = epoxy_glVertexAttribL1ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64vARB = epoxy_glVertexAttribL1ui64vARB_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64vNV = epoxy_glVertexAttribL1ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL2d = epoxy_glVertexAttribL2d_dispatch_table_thunk; + epoxy_glVertexAttribL2dEXT = epoxy_glVertexAttribL2dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL2dv = epoxy_glVertexAttribL2dv_dispatch_table_thunk; + epoxy_glVertexAttribL2dvEXT = epoxy_glVertexAttribL2dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL2i64NV = epoxy_glVertexAttribL2i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL2i64vNV = epoxy_glVertexAttribL2i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL2ui64NV = epoxy_glVertexAttribL2ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL2ui64vNV = epoxy_glVertexAttribL2ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL3d = epoxy_glVertexAttribL3d_dispatch_table_thunk; + epoxy_glVertexAttribL3dEXT = epoxy_glVertexAttribL3dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL3dv = epoxy_glVertexAttribL3dv_dispatch_table_thunk; + epoxy_glVertexAttribL3dvEXT = epoxy_glVertexAttribL3dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL3i64NV = epoxy_glVertexAttribL3i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL3i64vNV = epoxy_glVertexAttribL3i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL3ui64NV = epoxy_glVertexAttribL3ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL3ui64vNV = epoxy_glVertexAttribL3ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL4d = epoxy_glVertexAttribL4d_dispatch_table_thunk; + epoxy_glVertexAttribL4dEXT = epoxy_glVertexAttribL4dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL4dv = epoxy_glVertexAttribL4dv_dispatch_table_thunk; + epoxy_glVertexAttribL4dvEXT = epoxy_glVertexAttribL4dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL4i64NV = epoxy_glVertexAttribL4i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL4i64vNV = epoxy_glVertexAttribL4i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL4ui64NV = epoxy_glVertexAttribL4ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL4ui64vNV = epoxy_glVertexAttribL4ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribLFormat = epoxy_glVertexAttribLFormat_dispatch_table_thunk; + epoxy_glVertexAttribLFormatNV = epoxy_glVertexAttribLFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribLPointer = epoxy_glVertexAttribLPointer_dispatch_table_thunk; + epoxy_glVertexAttribLPointerEXT = epoxy_glVertexAttribLPointerEXT_dispatch_table_thunk; + epoxy_glVertexAttribP1ui = epoxy_glVertexAttribP1ui_dispatch_table_thunk; + epoxy_glVertexAttribP1uiv = epoxy_glVertexAttribP1uiv_dispatch_table_thunk; + epoxy_glVertexAttribP2ui = epoxy_glVertexAttribP2ui_dispatch_table_thunk; + epoxy_glVertexAttribP2uiv = epoxy_glVertexAttribP2uiv_dispatch_table_thunk; + epoxy_glVertexAttribP3ui = epoxy_glVertexAttribP3ui_dispatch_table_thunk; + epoxy_glVertexAttribP3uiv = epoxy_glVertexAttribP3uiv_dispatch_table_thunk; + epoxy_glVertexAttribP4ui = epoxy_glVertexAttribP4ui_dispatch_table_thunk; + epoxy_glVertexAttribP4uiv = epoxy_glVertexAttribP4uiv_dispatch_table_thunk; + epoxy_glVertexAttribParameteriAMD = epoxy_glVertexAttribParameteriAMD_dispatch_table_thunk; + epoxy_glVertexAttribPointer = epoxy_glVertexAttribPointer_dispatch_table_thunk; + epoxy_glVertexAttribPointerARB = epoxy_glVertexAttribPointerARB_dispatch_table_thunk; + epoxy_glVertexAttribPointerNV = epoxy_glVertexAttribPointerNV_dispatch_table_thunk; + epoxy_glVertexAttribs1dvNV = epoxy_glVertexAttribs1dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1fvNV = epoxy_glVertexAttribs1fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1hvNV = epoxy_glVertexAttribs1hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1svNV = epoxy_glVertexAttribs1svNV_dispatch_table_thunk; + epoxy_glVertexAttribs2dvNV = epoxy_glVertexAttribs2dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2fvNV = epoxy_glVertexAttribs2fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2hvNV = epoxy_glVertexAttribs2hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2svNV = epoxy_glVertexAttribs2svNV_dispatch_table_thunk; + epoxy_glVertexAttribs3dvNV = epoxy_glVertexAttribs3dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3fvNV = epoxy_glVertexAttribs3fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3hvNV = epoxy_glVertexAttribs3hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3svNV = epoxy_glVertexAttribs3svNV_dispatch_table_thunk; + epoxy_glVertexAttribs4dvNV = epoxy_glVertexAttribs4dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4fvNV = epoxy_glVertexAttribs4fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4hvNV = epoxy_glVertexAttribs4hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4svNV = epoxy_glVertexAttribs4svNV_dispatch_table_thunk; + epoxy_glVertexAttribs4ubvNV = epoxy_glVertexAttribs4ubvNV_dispatch_table_thunk; + epoxy_glVertexBindingDivisor = epoxy_glVertexBindingDivisor_dispatch_table_thunk; + epoxy_glVertexBlendARB = epoxy_glVertexBlendARB_dispatch_table_thunk; + epoxy_glVertexBlendEnvfATI = epoxy_glVertexBlendEnvfATI_dispatch_table_thunk; + epoxy_glVertexBlendEnviATI = epoxy_glVertexBlendEnviATI_dispatch_table_thunk; + epoxy_glVertexFormatNV = epoxy_glVertexFormatNV_dispatch_table_thunk; + epoxy_glVertexP2ui = epoxy_glVertexP2ui_dispatch_table_thunk; + epoxy_glVertexP2uiv = epoxy_glVertexP2uiv_dispatch_table_thunk; + epoxy_glVertexP3ui = epoxy_glVertexP3ui_dispatch_table_thunk; + epoxy_glVertexP3uiv = epoxy_glVertexP3uiv_dispatch_table_thunk; + epoxy_glVertexP4ui = epoxy_glVertexP4ui_dispatch_table_thunk; + epoxy_glVertexP4uiv = epoxy_glVertexP4uiv_dispatch_table_thunk; + epoxy_glVertexPointer = epoxy_glVertexPointer_dispatch_table_thunk; + epoxy_glVertexPointerEXT = epoxy_glVertexPointerEXT_dispatch_table_thunk; + epoxy_glVertexPointerListIBM = epoxy_glVertexPointerListIBM_dispatch_table_thunk; + epoxy_glVertexPointervINTEL = epoxy_glVertexPointervINTEL_dispatch_table_thunk; + epoxy_glVertexStream1dATI = epoxy_glVertexStream1dATI_dispatch_table_thunk; + epoxy_glVertexStream1dvATI = epoxy_glVertexStream1dvATI_dispatch_table_thunk; + epoxy_glVertexStream1fATI = epoxy_glVertexStream1fATI_dispatch_table_thunk; + epoxy_glVertexStream1fvATI = epoxy_glVertexStream1fvATI_dispatch_table_thunk; + epoxy_glVertexStream1iATI = epoxy_glVertexStream1iATI_dispatch_table_thunk; + epoxy_glVertexStream1ivATI = epoxy_glVertexStream1ivATI_dispatch_table_thunk; + epoxy_glVertexStream1sATI = epoxy_glVertexStream1sATI_dispatch_table_thunk; + epoxy_glVertexStream1svATI = epoxy_glVertexStream1svATI_dispatch_table_thunk; + epoxy_glVertexStream2dATI = epoxy_glVertexStream2dATI_dispatch_table_thunk; + epoxy_glVertexStream2dvATI = epoxy_glVertexStream2dvATI_dispatch_table_thunk; + epoxy_glVertexStream2fATI = epoxy_glVertexStream2fATI_dispatch_table_thunk; + epoxy_glVertexStream2fvATI = epoxy_glVertexStream2fvATI_dispatch_table_thunk; + epoxy_glVertexStream2iATI = epoxy_glVertexStream2iATI_dispatch_table_thunk; + epoxy_glVertexStream2ivATI = epoxy_glVertexStream2ivATI_dispatch_table_thunk; + epoxy_glVertexStream2sATI = epoxy_glVertexStream2sATI_dispatch_table_thunk; + epoxy_glVertexStream2svATI = epoxy_glVertexStream2svATI_dispatch_table_thunk; + epoxy_glVertexStream3dATI = epoxy_glVertexStream3dATI_dispatch_table_thunk; + epoxy_glVertexStream3dvATI = epoxy_glVertexStream3dvATI_dispatch_table_thunk; + epoxy_glVertexStream3fATI = epoxy_glVertexStream3fATI_dispatch_table_thunk; + epoxy_glVertexStream3fvATI = epoxy_glVertexStream3fvATI_dispatch_table_thunk; + epoxy_glVertexStream3iATI = epoxy_glVertexStream3iATI_dispatch_table_thunk; + epoxy_glVertexStream3ivATI = epoxy_glVertexStream3ivATI_dispatch_table_thunk; + epoxy_glVertexStream3sATI = epoxy_glVertexStream3sATI_dispatch_table_thunk; + epoxy_glVertexStream3svATI = epoxy_glVertexStream3svATI_dispatch_table_thunk; + epoxy_glVertexStream4dATI = epoxy_glVertexStream4dATI_dispatch_table_thunk; + epoxy_glVertexStream4dvATI = epoxy_glVertexStream4dvATI_dispatch_table_thunk; + epoxy_glVertexStream4fATI = epoxy_glVertexStream4fATI_dispatch_table_thunk; + epoxy_glVertexStream4fvATI = epoxy_glVertexStream4fvATI_dispatch_table_thunk; + epoxy_glVertexStream4iATI = epoxy_glVertexStream4iATI_dispatch_table_thunk; + epoxy_glVertexStream4ivATI = epoxy_glVertexStream4ivATI_dispatch_table_thunk; + epoxy_glVertexStream4sATI = epoxy_glVertexStream4sATI_dispatch_table_thunk; + epoxy_glVertexStream4svATI = epoxy_glVertexStream4svATI_dispatch_table_thunk; + epoxy_glVertexWeightPointerEXT = epoxy_glVertexWeightPointerEXT_dispatch_table_thunk; + epoxy_glVertexWeightfEXT = epoxy_glVertexWeightfEXT_dispatch_table_thunk; + epoxy_glVertexWeightfvEXT = epoxy_glVertexWeightfvEXT_dispatch_table_thunk; + epoxy_glVertexWeighthNV = epoxy_glVertexWeighthNV_dispatch_table_thunk; + epoxy_glVertexWeighthvNV = epoxy_glVertexWeighthvNV_dispatch_table_thunk; + epoxy_glVideoCaptureNV = epoxy_glVideoCaptureNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterdvNV = epoxy_glVideoCaptureStreamParameterdvNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterfvNV = epoxy_glVideoCaptureStreamParameterfvNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterivNV = epoxy_glVideoCaptureStreamParameterivNV_dispatch_table_thunk; + epoxy_glViewport = epoxy_glViewport_dispatch_table_thunk; + epoxy_glViewportArrayv = epoxy_glViewportArrayv_dispatch_table_thunk; + epoxy_glViewportArrayvNV = epoxy_glViewportArrayvNV_dispatch_table_thunk; + epoxy_glViewportIndexedf = epoxy_glViewportIndexedf_dispatch_table_thunk; + epoxy_glViewportIndexedfNV = epoxy_glViewportIndexedfNV_dispatch_table_thunk; + epoxy_glViewportIndexedfv = epoxy_glViewportIndexedfv_dispatch_table_thunk; + epoxy_glViewportIndexedfvNV = epoxy_glViewportIndexedfvNV_dispatch_table_thunk; + epoxy_glWaitSync = epoxy_glWaitSync_dispatch_table_thunk; + epoxy_glWaitSyncAPPLE = epoxy_glWaitSyncAPPLE_dispatch_table_thunk; + epoxy_glWeightPathsNV = epoxy_glWeightPathsNV_dispatch_table_thunk; + epoxy_glWeightPointerARB = epoxy_glWeightPointerARB_dispatch_table_thunk; + epoxy_glWeightPointerOES = epoxy_glWeightPointerOES_dispatch_table_thunk; + epoxy_glWeightbvARB = epoxy_glWeightbvARB_dispatch_table_thunk; + epoxy_glWeightdvARB = epoxy_glWeightdvARB_dispatch_table_thunk; + epoxy_glWeightfvARB = epoxy_glWeightfvARB_dispatch_table_thunk; + epoxy_glWeightivARB = epoxy_glWeightivARB_dispatch_table_thunk; + epoxy_glWeightsvARB = epoxy_glWeightsvARB_dispatch_table_thunk; + epoxy_glWeightubvARB = epoxy_glWeightubvARB_dispatch_table_thunk; + epoxy_glWeightuivARB = epoxy_glWeightuivARB_dispatch_table_thunk; + epoxy_glWeightusvARB = epoxy_glWeightusvARB_dispatch_table_thunk; + epoxy_glWindowPos2d = epoxy_glWindowPos2d_dispatch_table_thunk; + epoxy_glWindowPos2dARB = epoxy_glWindowPos2dARB_dispatch_table_thunk; + epoxy_glWindowPos2dMESA = epoxy_glWindowPos2dMESA_dispatch_table_thunk; + epoxy_glWindowPos2dv = epoxy_glWindowPos2dv_dispatch_table_thunk; + epoxy_glWindowPos2dvARB = epoxy_glWindowPos2dvARB_dispatch_table_thunk; + epoxy_glWindowPos2dvMESA = epoxy_glWindowPos2dvMESA_dispatch_table_thunk; + epoxy_glWindowPos2f = epoxy_glWindowPos2f_dispatch_table_thunk; + epoxy_glWindowPos2fARB = epoxy_glWindowPos2fARB_dispatch_table_thunk; + epoxy_glWindowPos2fMESA = epoxy_glWindowPos2fMESA_dispatch_table_thunk; + epoxy_glWindowPos2fv = epoxy_glWindowPos2fv_dispatch_table_thunk; + epoxy_glWindowPos2fvARB = epoxy_glWindowPos2fvARB_dispatch_table_thunk; + epoxy_glWindowPos2fvMESA = epoxy_glWindowPos2fvMESA_dispatch_table_thunk; + epoxy_glWindowPos2i = epoxy_glWindowPos2i_dispatch_table_thunk; + epoxy_glWindowPos2iARB = epoxy_glWindowPos2iARB_dispatch_table_thunk; + epoxy_glWindowPos2iMESA = epoxy_glWindowPos2iMESA_dispatch_table_thunk; + epoxy_glWindowPos2iv = epoxy_glWindowPos2iv_dispatch_table_thunk; + epoxy_glWindowPos2ivARB = epoxy_glWindowPos2ivARB_dispatch_table_thunk; + epoxy_glWindowPos2ivMESA = epoxy_glWindowPos2ivMESA_dispatch_table_thunk; + epoxy_glWindowPos2s = epoxy_glWindowPos2s_dispatch_table_thunk; + epoxy_glWindowPos2sARB = epoxy_glWindowPos2sARB_dispatch_table_thunk; + epoxy_glWindowPos2sMESA = epoxy_glWindowPos2sMESA_dispatch_table_thunk; + epoxy_glWindowPos2sv = epoxy_glWindowPos2sv_dispatch_table_thunk; + epoxy_glWindowPos2svARB = epoxy_glWindowPos2svARB_dispatch_table_thunk; + epoxy_glWindowPos2svMESA = epoxy_glWindowPos2svMESA_dispatch_table_thunk; + epoxy_glWindowPos3d = epoxy_glWindowPos3d_dispatch_table_thunk; + epoxy_glWindowPos3dARB = epoxy_glWindowPos3dARB_dispatch_table_thunk; + epoxy_glWindowPos3dMESA = epoxy_glWindowPos3dMESA_dispatch_table_thunk; + epoxy_glWindowPos3dv = epoxy_glWindowPos3dv_dispatch_table_thunk; + epoxy_glWindowPos3dvARB = epoxy_glWindowPos3dvARB_dispatch_table_thunk; + epoxy_glWindowPos3dvMESA = epoxy_glWindowPos3dvMESA_dispatch_table_thunk; + epoxy_glWindowPos3f = epoxy_glWindowPos3f_dispatch_table_thunk; + epoxy_glWindowPos3fARB = epoxy_glWindowPos3fARB_dispatch_table_thunk; + epoxy_glWindowPos3fMESA = epoxy_glWindowPos3fMESA_dispatch_table_thunk; + epoxy_glWindowPos3fv = epoxy_glWindowPos3fv_dispatch_table_thunk; + epoxy_glWindowPos3fvARB = epoxy_glWindowPos3fvARB_dispatch_table_thunk; + epoxy_glWindowPos3fvMESA = epoxy_glWindowPos3fvMESA_dispatch_table_thunk; + epoxy_glWindowPos3i = epoxy_glWindowPos3i_dispatch_table_thunk; + epoxy_glWindowPos3iARB = epoxy_glWindowPos3iARB_dispatch_table_thunk; + epoxy_glWindowPos3iMESA = epoxy_glWindowPos3iMESA_dispatch_table_thunk; + epoxy_glWindowPos3iv = epoxy_glWindowPos3iv_dispatch_table_thunk; + epoxy_glWindowPos3ivARB = epoxy_glWindowPos3ivARB_dispatch_table_thunk; + epoxy_glWindowPos3ivMESA = epoxy_glWindowPos3ivMESA_dispatch_table_thunk; + epoxy_glWindowPos3s = epoxy_glWindowPos3s_dispatch_table_thunk; + epoxy_glWindowPos3sARB = epoxy_glWindowPos3sARB_dispatch_table_thunk; + epoxy_glWindowPos3sMESA = epoxy_glWindowPos3sMESA_dispatch_table_thunk; + epoxy_glWindowPos3sv = epoxy_glWindowPos3sv_dispatch_table_thunk; + epoxy_glWindowPos3svARB = epoxy_glWindowPos3svARB_dispatch_table_thunk; + epoxy_glWindowPos3svMESA = epoxy_glWindowPos3svMESA_dispatch_table_thunk; + epoxy_glWindowPos4dMESA = epoxy_glWindowPos4dMESA_dispatch_table_thunk; + epoxy_glWindowPos4dvMESA = epoxy_glWindowPos4dvMESA_dispatch_table_thunk; + epoxy_glWindowPos4fMESA = epoxy_glWindowPos4fMESA_dispatch_table_thunk; + epoxy_glWindowPos4fvMESA = epoxy_glWindowPos4fvMESA_dispatch_table_thunk; + epoxy_glWindowPos4iMESA = epoxy_glWindowPos4iMESA_dispatch_table_thunk; + epoxy_glWindowPos4ivMESA = epoxy_glWindowPos4ivMESA_dispatch_table_thunk; + epoxy_glWindowPos4sMESA = epoxy_glWindowPos4sMESA_dispatch_table_thunk; + epoxy_glWindowPos4svMESA = epoxy_glWindowPos4svMESA_dispatch_table_thunk; + epoxy_glWriteMaskEXT = epoxy_glWriteMaskEXT_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNGLACCUMPROC epoxy_glAccum = epoxy_glAccum_global_rewrite_ptr; + +PUBLIC PFNGLACCUMXOESPROC epoxy_glAccumxOES = epoxy_glAccumxOES_global_rewrite_ptr; + +PUBLIC PFNGLACTIVEPROGRAMEXTPROC epoxy_glActiveProgramEXT = epoxy_glActiveProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESHADERPROGRAMPROC epoxy_glActiveShaderProgram = epoxy_glActiveShaderProgram_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESHADERPROGRAMEXTPROC epoxy_glActiveShaderProgramEXT = epoxy_glActiveShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESTENCILFACEEXTPROC epoxy_glActiveStencilFaceEXT = epoxy_glActiveStencilFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVETEXTUREPROC epoxy_glActiveTexture = epoxy_glActiveTexture_global_rewrite_ptr; + +PUBLIC PFNGLACTIVETEXTUREARBPROC epoxy_glActiveTextureARB = epoxy_glActiveTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLACTIVEVARYINGNVPROC epoxy_glActiveVaryingNV = epoxy_glActiveVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP1ATIPROC epoxy_glAlphaFragmentOp1ATI = epoxy_glAlphaFragmentOp1ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP2ATIPROC epoxy_glAlphaFragmentOp2ATI = epoxy_glAlphaFragmentOp2ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP3ATIPROC epoxy_glAlphaFragmentOp3ATI = epoxy_glAlphaFragmentOp3ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCPROC epoxy_glAlphaFunc = epoxy_glAlphaFunc_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCQCOMPROC epoxy_glAlphaFuncQCOM = epoxy_glAlphaFuncQCOM_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCXPROC epoxy_glAlphaFuncx = epoxy_glAlphaFuncx_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCXOESPROC epoxy_glAlphaFuncxOES = epoxy_glAlphaFuncxOES_global_rewrite_ptr; + +PUBLIC PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC epoxy_glApplyFramebufferAttachmentCMAAINTEL = epoxy_glApplyFramebufferAttachmentCMAAINTEL_global_rewrite_ptr; + +PUBLIC PFNGLAPPLYTEXTUREEXTPROC epoxy_glApplyTextureEXT = epoxy_glApplyTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLAREPROGRAMSRESIDENTNVPROC epoxy_glAreProgramsResidentNV = epoxy_glAreProgramsResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLARETEXTURESRESIDENTPROC epoxy_glAreTexturesResident = epoxy_glAreTexturesResident_global_rewrite_ptr; + +PUBLIC PFNGLARETEXTURESRESIDENTEXTPROC epoxy_glAreTexturesResidentEXT = epoxy_glAreTexturesResidentEXT_global_rewrite_ptr; + +PUBLIC PFNGLARRAYELEMENTPROC epoxy_glArrayElement = epoxy_glArrayElement_global_rewrite_ptr; + +PUBLIC PFNGLARRAYELEMENTEXTPROC epoxy_glArrayElementEXT = epoxy_glArrayElementEXT_global_rewrite_ptr; + +PUBLIC PFNGLARRAYOBJECTATIPROC epoxy_glArrayObjectATI = epoxy_glArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLASYNCMARKERSGIXPROC epoxy_glAsyncMarkerSGIX = epoxy_glAsyncMarkerSGIX_global_rewrite_ptr; + +PUBLIC PFNGLATTACHOBJECTARBPROC epoxy_glAttachObjectARB = epoxy_glAttachObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLATTACHSHADERPROC epoxy_glAttachShader = epoxy_glAttachShader_global_rewrite_ptr; + +PFNGLBEGINPROC epoxy_glBegin_unwrapped = epoxy_glBegin_unwrapped_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERPROC epoxy_glBeginConditionalRender = epoxy_glBeginConditionalRender_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERNVPROC epoxy_glBeginConditionalRenderNV = epoxy_glBeginConditionalRenderNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERNVXPROC epoxy_glBeginConditionalRenderNVX = epoxy_glBeginConditionalRenderNVX_global_rewrite_ptr; + +PUBLIC PFNGLBEGINFRAGMENTSHADERATIPROC epoxy_glBeginFragmentShaderATI = epoxy_glBeginFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLBEGINOCCLUSIONQUERYNVPROC epoxy_glBeginOcclusionQueryNV = epoxy_glBeginOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINPERFMONITORAMDPROC epoxy_glBeginPerfMonitorAMD = epoxy_glBeginPerfMonitorAMD_global_rewrite_ptr; + +PUBLIC PFNGLBEGINPERFQUERYINTELPROC epoxy_glBeginPerfQueryINTEL = epoxy_glBeginPerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYPROC epoxy_glBeginQuery = epoxy_glBeginQuery_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYARBPROC epoxy_glBeginQueryARB = epoxy_glBeginQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYEXTPROC epoxy_glBeginQueryEXT = epoxy_glBeginQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYINDEXEDPROC epoxy_glBeginQueryIndexed = epoxy_glBeginQueryIndexed_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKPROC epoxy_glBeginTransformFeedback = epoxy_glBeginTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKEXTPROC epoxy_glBeginTransformFeedbackEXT = epoxy_glBeginTransformFeedbackEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKNVPROC epoxy_glBeginTransformFeedbackNV = epoxy_glBeginTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINVERTEXSHADEREXTPROC epoxy_glBeginVertexShaderEXT = epoxy_glBeginVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINVIDEOCAPTURENVPROC epoxy_glBeginVideoCaptureNV = epoxy_glBeginVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDATTRIBLOCATIONPROC epoxy_glBindAttribLocation = epoxy_glBindAttribLocation_global_rewrite_ptr; + +PUBLIC PFNGLBINDATTRIBLOCATIONARBPROC epoxy_glBindAttribLocationARB = epoxy_glBindAttribLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERPROC epoxy_glBindBuffer = epoxy_glBindBuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERARBPROC epoxy_glBindBufferARB = epoxy_glBindBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASEPROC epoxy_glBindBufferBase = epoxy_glBindBufferBase_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASEEXTPROC epoxy_glBindBufferBaseEXT = epoxy_glBindBufferBaseEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASENVPROC epoxy_glBindBufferBaseNV = epoxy_glBindBufferBaseNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFEROFFSETEXTPROC epoxy_glBindBufferOffsetEXT = epoxy_glBindBufferOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFEROFFSETNVPROC epoxy_glBindBufferOffsetNV = epoxy_glBindBufferOffsetNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGEPROC epoxy_glBindBufferRange = epoxy_glBindBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGEEXTPROC epoxy_glBindBufferRangeEXT = epoxy_glBindBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGENVPROC epoxy_glBindBufferRangeNV = epoxy_glBindBufferRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERSBASEPROC epoxy_glBindBuffersBase = epoxy_glBindBuffersBase_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERSRANGEPROC epoxy_glBindBuffersRange = epoxy_glBindBuffersRange_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONPROC epoxy_glBindFragDataLocation = epoxy_glBindFragDataLocation_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONEXTPROC epoxy_glBindFragDataLocationEXT = epoxy_glBindFragDataLocationEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONINDEXEDPROC epoxy_glBindFragDataLocationIndexed = epoxy_glBindFragDataLocationIndexed_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC epoxy_glBindFragDataLocationIndexedEXT = epoxy_glBindFragDataLocationIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGMENTSHADERATIPROC epoxy_glBindFragmentShaderATI = epoxy_glBindFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFERPROC epoxy_glBindFramebuffer = epoxy_glBindFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFEREXTPROC epoxy_glBindFramebufferEXT = epoxy_glBindFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFEROESPROC epoxy_glBindFramebufferOES = epoxy_glBindFramebufferOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTUREPROC epoxy_glBindImageTexture = epoxy_glBindImageTexture_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTUREEXTPROC epoxy_glBindImageTextureEXT = epoxy_glBindImageTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTURESPROC epoxy_glBindImageTextures = epoxy_glBindImageTextures_global_rewrite_ptr; + +PUBLIC PFNGLBINDLIGHTPARAMETEREXTPROC epoxy_glBindLightParameterEXT = epoxy_glBindLightParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDMATERIALPARAMETEREXTPROC epoxy_glBindMaterialParameterEXT = epoxy_glBindMaterialParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDMULTITEXTUREEXTPROC epoxy_glBindMultiTextureEXT = epoxy_glBindMultiTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDPARAMETEREXTPROC epoxy_glBindParameterEXT = epoxy_glBindParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMARBPROC epoxy_glBindProgramARB = epoxy_glBindProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMNVPROC epoxy_glBindProgramNV = epoxy_glBindProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMPIPELINEPROC epoxy_glBindProgramPipeline = epoxy_glBindProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMPIPELINEEXTPROC epoxy_glBindProgramPipelineEXT = epoxy_glBindProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFERPROC epoxy_glBindRenderbuffer = epoxy_glBindRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFEREXTPROC epoxy_glBindRenderbufferEXT = epoxy_glBindRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFEROESPROC epoxy_glBindRenderbufferOES = epoxy_glBindRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDSAMPLERPROC epoxy_glBindSampler = epoxy_glBindSampler_global_rewrite_ptr; + +PUBLIC PFNGLBINDSAMPLERSPROC epoxy_glBindSamplers = epoxy_glBindSamplers_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXGENPARAMETEREXTPROC epoxy_glBindTexGenParameterEXT = epoxy_glBindTexGenParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREPROC epoxy_glBindTexture = epoxy_glBindTexture_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREEXTPROC epoxy_glBindTextureEXT = epoxy_glBindTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREUNITPROC epoxy_glBindTextureUnit = epoxy_glBindTextureUnit_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREUNITPARAMETEREXTPROC epoxy_glBindTextureUnitParameterEXT = epoxy_glBindTextureUnitParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTURESPROC epoxy_glBindTextures = epoxy_glBindTextures_global_rewrite_ptr; + +PUBLIC PFNGLBINDTRANSFORMFEEDBACKPROC epoxy_glBindTransformFeedback = epoxy_glBindTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLBINDTRANSFORMFEEDBACKNVPROC epoxy_glBindTransformFeedbackNV = epoxy_glBindTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYPROC epoxy_glBindVertexArray = epoxy_glBindVertexArray_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYAPPLEPROC epoxy_glBindVertexArrayAPPLE = epoxy_glBindVertexArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYOESPROC epoxy_glBindVertexArrayOES = epoxy_glBindVertexArrayOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXBUFFERPROC epoxy_glBindVertexBuffer = epoxy_glBindVertexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXBUFFERSPROC epoxy_glBindVertexBuffers = epoxy_glBindVertexBuffers_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXSHADEREXTPROC epoxy_glBindVertexShaderEXT = epoxy_glBindVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC epoxy_glBindVideoCaptureStreamBufferNV = epoxy_glBindVideoCaptureStreamBufferNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC epoxy_glBindVideoCaptureStreamTextureNV = epoxy_glBindVideoCaptureStreamTextureNV_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3BEXTPROC epoxy_glBinormal3bEXT = epoxy_glBinormal3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3BVEXTPROC epoxy_glBinormal3bvEXT = epoxy_glBinormal3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3DEXTPROC epoxy_glBinormal3dEXT = epoxy_glBinormal3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3DVEXTPROC epoxy_glBinormal3dvEXT = epoxy_glBinormal3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3FEXTPROC epoxy_glBinormal3fEXT = epoxy_glBinormal3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3FVEXTPROC epoxy_glBinormal3fvEXT = epoxy_glBinormal3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3IEXTPROC epoxy_glBinormal3iEXT = epoxy_glBinormal3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3IVEXTPROC epoxy_glBinormal3ivEXT = epoxy_glBinormal3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3SEXTPROC epoxy_glBinormal3sEXT = epoxy_glBinormal3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3SVEXTPROC epoxy_glBinormal3svEXT = epoxy_glBinormal3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMALPOINTEREXTPROC epoxy_glBinormalPointerEXT = epoxy_glBinormalPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLBITMAPPROC epoxy_glBitmap = epoxy_glBitmap_global_rewrite_ptr; + +PUBLIC PFNGLBITMAPXOESPROC epoxy_glBitmapxOES = epoxy_glBitmapxOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERPROC epoxy_glBlendBarrier = epoxy_glBlendBarrier_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERKHRPROC epoxy_glBlendBarrierKHR = epoxy_glBlendBarrierKHR_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERNVPROC epoxy_glBlendBarrierNV = epoxy_glBlendBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLORPROC epoxy_glBlendColor = epoxy_glBlendColor_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLOREXTPROC epoxy_glBlendColorEXT = epoxy_glBlendColorEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLORXOESPROC epoxy_glBlendColorxOES = epoxy_glBlendColorxOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONPROC epoxy_glBlendEquation = epoxy_glBlendEquation_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONEXTPROC epoxy_glBlendEquationEXT = epoxy_glBlendEquationEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONINDEXEDAMDPROC epoxy_glBlendEquationIndexedAMD = epoxy_glBlendEquationIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONOESPROC epoxy_glBlendEquationOES = epoxy_glBlendEquationOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEPROC epoxy_glBlendEquationSeparate = epoxy_glBlendEquationSeparate_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEEXTPROC epoxy_glBlendEquationSeparateEXT = epoxy_glBlendEquationSeparateEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC epoxy_glBlendEquationSeparateIndexedAMD = epoxy_glBlendEquationSeparateIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEOESPROC epoxy_glBlendEquationSeparateOES = epoxy_glBlendEquationSeparateOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIPROC epoxy_glBlendEquationSeparatei = epoxy_glBlendEquationSeparatei_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIARBPROC epoxy_glBlendEquationSeparateiARB = epoxy_glBlendEquationSeparateiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIEXTPROC epoxy_glBlendEquationSeparateiEXT = epoxy_glBlendEquationSeparateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIOESPROC epoxy_glBlendEquationSeparateiOES = epoxy_glBlendEquationSeparateiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIPROC epoxy_glBlendEquationi = epoxy_glBlendEquationi_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIARBPROC epoxy_glBlendEquationiARB = epoxy_glBlendEquationiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIEXTPROC epoxy_glBlendEquationiEXT = epoxy_glBlendEquationiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIOESPROC epoxy_glBlendEquationiOES = epoxy_glBlendEquationiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCPROC epoxy_glBlendFunc = epoxy_glBlendFunc_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCINDEXEDAMDPROC epoxy_glBlendFuncIndexedAMD = epoxy_glBlendFuncIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEPROC epoxy_glBlendFuncSeparate = epoxy_glBlendFuncSeparate_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEEXTPROC epoxy_glBlendFuncSeparateEXT = epoxy_glBlendFuncSeparateEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEINGRPROC epoxy_glBlendFuncSeparateINGR = epoxy_glBlendFuncSeparateINGR_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC epoxy_glBlendFuncSeparateIndexedAMD = epoxy_glBlendFuncSeparateIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEOESPROC epoxy_glBlendFuncSeparateOES = epoxy_glBlendFuncSeparateOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIPROC epoxy_glBlendFuncSeparatei = epoxy_glBlendFuncSeparatei_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIARBPROC epoxy_glBlendFuncSeparateiARB = epoxy_glBlendFuncSeparateiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIEXTPROC epoxy_glBlendFuncSeparateiEXT = epoxy_glBlendFuncSeparateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIOESPROC epoxy_glBlendFuncSeparateiOES = epoxy_glBlendFuncSeparateiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIPROC epoxy_glBlendFunci = epoxy_glBlendFunci_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIARBPROC epoxy_glBlendFunciARB = epoxy_glBlendFunciARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIEXTPROC epoxy_glBlendFunciEXT = epoxy_glBlendFunciEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIOESPROC epoxy_glBlendFunciOES = epoxy_glBlendFunciOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDPARAMETERINVPROC epoxy_glBlendParameteriNV = epoxy_glBlendParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERPROC epoxy_glBlitFramebuffer = epoxy_glBlitFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERANGLEPROC epoxy_glBlitFramebufferANGLE = epoxy_glBlitFramebufferANGLE_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFEREXTPROC epoxy_glBlitFramebufferEXT = epoxy_glBlitFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERNVPROC epoxy_glBlitFramebufferNV = epoxy_glBlitFramebufferNV_global_rewrite_ptr; + +PUBLIC PFNGLBLITNAMEDFRAMEBUFFERPROC epoxy_glBlitNamedFramebuffer = epoxy_glBlitNamedFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERADDRESSRANGENVPROC epoxy_glBufferAddressRangeNV = epoxy_glBufferAddressRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERDATAPROC epoxy_glBufferData = epoxy_glBufferData_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERDATAARBPROC epoxy_glBufferDataARB = epoxy_glBufferDataARB_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERPAGECOMMITMENTARBPROC epoxy_glBufferPageCommitmentARB = epoxy_glBufferPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERPARAMETERIAPPLEPROC epoxy_glBufferParameteriAPPLE = epoxy_glBufferParameteriAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSTORAGEPROC epoxy_glBufferStorage = epoxy_glBufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSTORAGEEXTPROC epoxy_glBufferStorageEXT = epoxy_glBufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSUBDATAPROC epoxy_glBufferSubData = epoxy_glBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSUBDATAARBPROC epoxy_glBufferSubDataARB = epoxy_glBufferSubDataARB_global_rewrite_ptr; + +PUBLIC PFNGLCALLCOMMANDLISTNVPROC epoxy_glCallCommandListNV = epoxy_glCallCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLCALLLISTPROC epoxy_glCallList = epoxy_glCallList_global_rewrite_ptr; + +PUBLIC PFNGLCALLLISTSPROC epoxy_glCallLists = epoxy_glCallLists_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSPROC epoxy_glCheckFramebufferStatus = epoxy_glCheckFramebufferStatus_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckFramebufferStatusEXT = epoxy_glCheckFramebufferStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSOESPROC epoxy_glCheckFramebufferStatusOES = epoxy_glCheckFramebufferStatusOES_global_rewrite_ptr; + +PUBLIC PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC epoxy_glCheckNamedFramebufferStatus = epoxy_glCheckNamedFramebufferStatus_global_rewrite_ptr; + +PUBLIC PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckNamedFramebufferStatusEXT = epoxy_glCheckNamedFramebufferStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLAMPCOLORPROC epoxy_glClampColor = epoxy_glClampColor_global_rewrite_ptr; + +PUBLIC PFNGLCLAMPCOLORARBPROC epoxy_glClampColorARB = epoxy_glClampColorARB_global_rewrite_ptr; + +PUBLIC PFNGLCLEARPROC epoxy_glClear = epoxy_glClear_global_rewrite_ptr; + +PUBLIC PFNGLCLEARACCUMPROC epoxy_glClearAccum = epoxy_glClearAccum_global_rewrite_ptr; + +PUBLIC PFNGLCLEARACCUMXOESPROC epoxy_glClearAccumxOES = epoxy_glClearAccumxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERDATAPROC epoxy_glClearBufferData = epoxy_glClearBufferData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERSUBDATAPROC epoxy_glClearBufferSubData = epoxy_glClearBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERFIPROC epoxy_glClearBufferfi = epoxy_glClearBufferfi_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERFVPROC epoxy_glClearBufferfv = epoxy_glClearBufferfv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERIVPROC epoxy_glClearBufferiv = epoxy_glClearBufferiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERUIVPROC epoxy_glClearBufferuiv = epoxy_glClearBufferuiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORPROC epoxy_glClearColor = epoxy_glClearColor_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORIIEXTPROC epoxy_glClearColorIiEXT = epoxy_glClearColorIiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORIUIEXTPROC epoxy_glClearColorIuiEXT = epoxy_glClearColorIuiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORXPROC epoxy_glClearColorx = epoxy_glClearColorx_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORXOESPROC epoxy_glClearColorxOES = epoxy_glClearColorxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHPROC epoxy_glClearDepth = epoxy_glClearDepth_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHDNVPROC epoxy_glClearDepthdNV = epoxy_glClearDepthdNV_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHFPROC epoxy_glClearDepthf = epoxy_glClearDepthf_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHFOESPROC epoxy_glClearDepthfOES = epoxy_glClearDepthfOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHXPROC epoxy_glClearDepthx = epoxy_glClearDepthx_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHXOESPROC epoxy_glClearDepthxOES = epoxy_glClearDepthxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARINDEXPROC epoxy_glClearIndex = epoxy_glClearIndex_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERDATAPROC epoxy_glClearNamedBufferData = epoxy_glClearNamedBufferData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERDATAEXTPROC epoxy_glClearNamedBufferDataEXT = epoxy_glClearNamedBufferDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERSUBDATAPROC epoxy_glClearNamedBufferSubData = epoxy_glClearNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC epoxy_glClearNamedBufferSubDataEXT = epoxy_glClearNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERFIPROC epoxy_glClearNamedFramebufferfi = epoxy_glClearNamedFramebufferfi_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERFVPROC epoxy_glClearNamedFramebufferfv = epoxy_glClearNamedFramebufferfv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERIVPROC epoxy_glClearNamedFramebufferiv = epoxy_glClearNamedFramebufferiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC epoxy_glClearNamedFramebufferuiv = epoxy_glClearNamedFramebufferuiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARSTENCILPROC epoxy_glClearStencil = epoxy_glClearStencil_global_rewrite_ptr; + +PUBLIC PFNGLCLEARTEXIMAGEPROC epoxy_glClearTexImage = epoxy_glClearTexImage_global_rewrite_ptr; + +PUBLIC PFNGLCLEARTEXSUBIMAGEPROC epoxy_glClearTexSubImage = epoxy_glClearTexSubImage_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVETEXTUREPROC epoxy_glClientActiveTexture = epoxy_glClientActiveTexture_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVETEXTUREARBPROC epoxy_glClientActiveTextureARB = epoxy_glClientActiveTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC epoxy_glClientActiveVertexStreamATI = epoxy_glClientActiveVertexStreamATI_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTATTRIBDEFAULTEXTPROC epoxy_glClientAttribDefaultEXT = epoxy_glClientAttribDefaultEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTWAITSYNCPROC epoxy_glClientWaitSync = epoxy_glClientWaitSync_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTWAITSYNCAPPLEPROC epoxy_glClientWaitSyncAPPLE = epoxy_glClientWaitSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLCLIPCONTROLPROC epoxy_glClipControl = epoxy_glClipControl_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEPROC epoxy_glClipPlane = epoxy_glClipPlane_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFPROC epoxy_glClipPlanef = epoxy_glClipPlanef_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFIMGPROC epoxy_glClipPlanefIMG = epoxy_glClipPlanefIMG_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFOESPROC epoxy_glClipPlanefOES = epoxy_glClipPlanefOES_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXPROC epoxy_glClipPlanex = epoxy_glClipPlanex_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXIMGPROC epoxy_glClipPlanexIMG = epoxy_glClipPlanexIMG_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXOESPROC epoxy_glClipPlanexOES = epoxy_glClipPlanexOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3BPROC epoxy_glColor3b = epoxy_glColor3b_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3BVPROC epoxy_glColor3bv = epoxy_glColor3bv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3DPROC epoxy_glColor3d = epoxy_glColor3d_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3DVPROC epoxy_glColor3dv = epoxy_glColor3dv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FPROC epoxy_glColor3f = epoxy_glColor3f_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVERTEX3FSUNPROC epoxy_glColor3fVertex3fSUN = epoxy_glColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVERTEX3FVSUNPROC epoxy_glColor3fVertex3fvSUN = epoxy_glColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVPROC epoxy_glColor3fv = epoxy_glColor3fv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3HNVPROC epoxy_glColor3hNV = epoxy_glColor3hNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3HVNVPROC epoxy_glColor3hvNV = epoxy_glColor3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3IPROC epoxy_glColor3i = epoxy_glColor3i_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3IVPROC epoxy_glColor3iv = epoxy_glColor3iv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3SPROC epoxy_glColor3s = epoxy_glColor3s_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3SVPROC epoxy_glColor3sv = epoxy_glColor3sv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UBPROC epoxy_glColor3ub = epoxy_glColor3ub_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UBVPROC epoxy_glColor3ubv = epoxy_glColor3ubv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UIPROC epoxy_glColor3ui = epoxy_glColor3ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UIVPROC epoxy_glColor3uiv = epoxy_glColor3uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3USPROC epoxy_glColor3us = epoxy_glColor3us_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3USVPROC epoxy_glColor3usv = epoxy_glColor3usv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3XOESPROC epoxy_glColor3xOES = epoxy_glColor3xOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3XVOESPROC epoxy_glColor3xvOES = epoxy_glColor3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4BPROC epoxy_glColor4b = epoxy_glColor4b_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4BVPROC epoxy_glColor4bv = epoxy_glColor4bv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4DPROC epoxy_glColor4d = epoxy_glColor4d_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4DVPROC epoxy_glColor4dv = epoxy_glColor4dv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FPROC epoxy_glColor4f = epoxy_glColor4f_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glColor4fNormal3fVertex3fSUN = epoxy_glColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glColor4fNormal3fVertex3fvSUN = epoxy_glColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FVPROC epoxy_glColor4fv = epoxy_glColor4fv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4HNVPROC epoxy_glColor4hNV = epoxy_glColor4hNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4HVNVPROC epoxy_glColor4hvNV = epoxy_glColor4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4IPROC epoxy_glColor4i = epoxy_glColor4i_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4IVPROC epoxy_glColor4iv = epoxy_glColor4iv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4SPROC epoxy_glColor4s = epoxy_glColor4s_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4SVPROC epoxy_glColor4sv = epoxy_glColor4sv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBPROC epoxy_glColor4ub = epoxy_glColor4ub_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX2FSUNPROC epoxy_glColor4ubVertex2fSUN = epoxy_glColor4ubVertex2fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX2FVSUNPROC epoxy_glColor4ubVertex2fvSUN = epoxy_glColor4ubVertex2fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX3FSUNPROC epoxy_glColor4ubVertex3fSUN = epoxy_glColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX3FVSUNPROC epoxy_glColor4ubVertex3fvSUN = epoxy_glColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVPROC epoxy_glColor4ubv = epoxy_glColor4ubv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UIPROC epoxy_glColor4ui = epoxy_glColor4ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UIVPROC epoxy_glColor4uiv = epoxy_glColor4uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4USPROC epoxy_glColor4us = epoxy_glColor4us_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4USVPROC epoxy_glColor4usv = epoxy_glColor4usv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XPROC epoxy_glColor4x = epoxy_glColor4x_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XOESPROC epoxy_glColor4xOES = epoxy_glColor4xOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XVOESPROC epoxy_glColor4xvOES = epoxy_glColor4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFORMATNVPROC epoxy_glColorFormatNV = epoxy_glColorFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP1ATIPROC epoxy_glColorFragmentOp1ATI = epoxy_glColorFragmentOp1ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP2ATIPROC epoxy_glColorFragmentOp2ATI = epoxy_glColorFragmentOp2ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP3ATIPROC epoxy_glColorFragmentOp3ATI = epoxy_glColorFragmentOp3ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKPROC epoxy_glColorMask = epoxy_glColorMask_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKINDEXEDEXTPROC epoxy_glColorMaskIndexedEXT = epoxy_glColorMaskIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIPROC epoxy_glColorMaski = epoxy_glColorMaski_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIEXTPROC epoxy_glColorMaskiEXT = epoxy_glColorMaskiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIOESPROC epoxy_glColorMaskiOES = epoxy_glColorMaskiOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMATERIALPROC epoxy_glColorMaterial = epoxy_glColorMaterial_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP3UIPROC epoxy_glColorP3ui = epoxy_glColorP3ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP3UIVPROC epoxy_glColorP3uiv = epoxy_glColorP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP4UIPROC epoxy_glColorP4ui = epoxy_glColorP4ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP4UIVPROC epoxy_glColorP4uiv = epoxy_glColorP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERPROC epoxy_glColorPointer = epoxy_glColorPointer_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTEREXTPROC epoxy_glColorPointerEXT = epoxy_glColorPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERLISTIBMPROC epoxy_glColorPointerListIBM = epoxy_glColorPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERVINTELPROC epoxy_glColorPointervINTEL = epoxy_glColorPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLCOLORSUBTABLEPROC epoxy_glColorSubTable = epoxy_glColorSubTable_global_rewrite_ptr; + +PUBLIC PFNGLCOLORSUBTABLEEXTPROC epoxy_glColorSubTableEXT = epoxy_glColorSubTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPROC epoxy_glColorTable = epoxy_glColorTable_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEEXTPROC epoxy_glColorTableEXT = epoxy_glColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERFVPROC epoxy_glColorTableParameterfv = epoxy_glColorTableParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERFVSGIPROC epoxy_glColorTableParameterfvSGI = epoxy_glColorTableParameterfvSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERIVPROC epoxy_glColorTableParameteriv = epoxy_glColorTableParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERIVSGIPROC epoxy_glColorTableParameterivSGI = epoxy_glColorTableParameterivSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLESGIPROC epoxy_glColorTableSGI = epoxy_glColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERINPUTNVPROC epoxy_glCombinerInputNV = epoxy_glCombinerInputNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINEROUTPUTNVPROC epoxy_glCombinerOutputNV = epoxy_glCombinerOutputNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERFNVPROC epoxy_glCombinerParameterfNV = epoxy_glCombinerParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERFVNVPROC epoxy_glCombinerParameterfvNV = epoxy_glCombinerParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERINVPROC epoxy_glCombinerParameteriNV = epoxy_glCombinerParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERIVNVPROC epoxy_glCombinerParameterivNV = epoxy_glCombinerParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glCombinerStageParameterfvNV = epoxy_glCombinerStageParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMMANDLISTSEGMENTSNVPROC epoxy_glCommandListSegmentsNV = epoxy_glCommandListSegmentsNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILECOMMANDLISTNVPROC epoxy_glCompileCommandListNV = epoxy_glCompileCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERPROC epoxy_glCompileShader = epoxy_glCompileShader_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERARBPROC epoxy_glCompileShaderARB = epoxy_glCompileShaderARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERINCLUDEARBPROC epoxy_glCompileShaderIncludeARB = epoxy_glCompileShaderIncludeARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC epoxy_glCompressedMultiTexImage1DEXT = epoxy_glCompressedMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC epoxy_glCompressedMultiTexImage2DEXT = epoxy_glCompressedMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC epoxy_glCompressedMultiTexImage3DEXT = epoxy_glCompressedMultiTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC epoxy_glCompressedMultiTexSubImage1DEXT = epoxy_glCompressedMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC epoxy_glCompressedMultiTexSubImage2DEXT = epoxy_glCompressedMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC epoxy_glCompressedMultiTexSubImage3DEXT = epoxy_glCompressedMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE1DPROC epoxy_glCompressedTexImage1D = epoxy_glCompressedTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE1DARBPROC epoxy_glCompressedTexImage1DARB = epoxy_glCompressedTexImage1DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE2DPROC epoxy_glCompressedTexImage2D = epoxy_glCompressedTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE2DARBPROC epoxy_glCompressedTexImage2DARB = epoxy_glCompressedTexImage2DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DPROC epoxy_glCompressedTexImage3D = epoxy_glCompressedTexImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DARBPROC epoxy_glCompressedTexImage3DARB = epoxy_glCompressedTexImage3DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DOESPROC epoxy_glCompressedTexImage3DOES = epoxy_glCompressedTexImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC epoxy_glCompressedTexSubImage1D = epoxy_glCompressedTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC epoxy_glCompressedTexSubImage1DARB = epoxy_glCompressedTexSubImage1DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC epoxy_glCompressedTexSubImage2D = epoxy_glCompressedTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC epoxy_glCompressedTexSubImage2DARB = epoxy_glCompressedTexSubImage2DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC epoxy_glCompressedTexSubImage3D = epoxy_glCompressedTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC epoxy_glCompressedTexSubImage3DARB = epoxy_glCompressedTexSubImage3DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC epoxy_glCompressedTexSubImage3DOES = epoxy_glCompressedTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC epoxy_glCompressedTextureImage1DEXT = epoxy_glCompressedTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC epoxy_glCompressedTextureImage2DEXT = epoxy_glCompressedTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC epoxy_glCompressedTextureImage3DEXT = epoxy_glCompressedTextureImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC epoxy_glCompressedTextureSubImage1D = epoxy_glCompressedTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC epoxy_glCompressedTextureSubImage1DEXT = epoxy_glCompressedTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC epoxy_glCompressedTextureSubImage2D = epoxy_glCompressedTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC epoxy_glCompressedTextureSubImage2DEXT = epoxy_glCompressedTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC epoxy_glCompressedTextureSubImage3D = epoxy_glCompressedTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC epoxy_glCompressedTextureSubImage3DEXT = epoxy_glCompressedTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONSERVATIVERASTERPARAMETERFNVPROC epoxy_glConservativeRasterParameterfNV = epoxy_glConservativeRasterParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER1DPROC epoxy_glConvolutionFilter1D = epoxy_glConvolutionFilter1D_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER1DEXTPROC epoxy_glConvolutionFilter1DEXT = epoxy_glConvolutionFilter1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER2DPROC epoxy_glConvolutionFilter2D = epoxy_glConvolutionFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER2DEXTPROC epoxy_glConvolutionFilter2DEXT = epoxy_glConvolutionFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFPROC epoxy_glConvolutionParameterf = epoxy_glConvolutionParameterf_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFEXTPROC epoxy_glConvolutionParameterfEXT = epoxy_glConvolutionParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFVPROC epoxy_glConvolutionParameterfv = epoxy_glConvolutionParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFVEXTPROC epoxy_glConvolutionParameterfvEXT = epoxy_glConvolutionParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIPROC epoxy_glConvolutionParameteri = epoxy_glConvolutionParameteri_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIEXTPROC epoxy_glConvolutionParameteriEXT = epoxy_glConvolutionParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIVPROC epoxy_glConvolutionParameteriv = epoxy_glConvolutionParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIVEXTPROC epoxy_glConvolutionParameterivEXT = epoxy_glConvolutionParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERXOESPROC epoxy_glConvolutionParameterxOES = epoxy_glConvolutionParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERXVOESPROC epoxy_glConvolutionParameterxvOES = epoxy_glConvolutionParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYBUFFERSUBDATAPROC epoxy_glCopyBufferSubData = epoxy_glCopyBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYBUFFERSUBDATANVPROC epoxy_glCopyBufferSubDataNV = epoxy_glCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORSUBTABLEPROC epoxy_glCopyColorSubTable = epoxy_glCopyColorSubTable_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORSUBTABLEEXTPROC epoxy_glCopyColorSubTableEXT = epoxy_glCopyColorSubTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORTABLEPROC epoxy_glCopyColorTable = epoxy_glCopyColorTable_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORTABLESGIPROC epoxy_glCopyColorTableSGI = epoxy_glCopyColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER1DPROC epoxy_glCopyConvolutionFilter1D = epoxy_glCopyConvolutionFilter1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC epoxy_glCopyConvolutionFilter1DEXT = epoxy_glCopyConvolutionFilter1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER2DPROC epoxy_glCopyConvolutionFilter2D = epoxy_glCopyConvolutionFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC epoxy_glCopyConvolutionFilter2DEXT = epoxy_glCopyConvolutionFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAPROC epoxy_glCopyImageSubData = epoxy_glCopyImageSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAEXTPROC epoxy_glCopyImageSubDataEXT = epoxy_glCopyImageSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATANVPROC epoxy_glCopyImageSubDataNV = epoxy_glCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAOESPROC epoxy_glCopyImageSubDataOES = epoxy_glCopyImageSubDataOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXIMAGE1DEXTPROC epoxy_glCopyMultiTexImage1DEXT = epoxy_glCopyMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXIMAGE2DEXTPROC epoxy_glCopyMultiTexImage2DEXT = epoxy_glCopyMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC epoxy_glCopyMultiTexSubImage1DEXT = epoxy_glCopyMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC epoxy_glCopyMultiTexSubImage2DEXT = epoxy_glCopyMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC epoxy_glCopyMultiTexSubImage3DEXT = epoxy_glCopyMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYNAMEDBUFFERSUBDATAPROC epoxy_glCopyNamedBufferSubData = epoxy_glCopyNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYPATHNVPROC epoxy_glCopyPathNV = epoxy_glCopyPathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYPIXELSPROC epoxy_glCopyPixels = epoxy_glCopyPixels_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE1DPROC epoxy_glCopyTexImage1D = epoxy_glCopyTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE1DEXTPROC epoxy_glCopyTexImage1DEXT = epoxy_glCopyTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE2DPROC epoxy_glCopyTexImage2D = epoxy_glCopyTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE2DEXTPROC epoxy_glCopyTexImage2DEXT = epoxy_glCopyTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE1DPROC epoxy_glCopyTexSubImage1D = epoxy_glCopyTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE1DEXTPROC epoxy_glCopyTexSubImage1DEXT = epoxy_glCopyTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE2DPROC epoxy_glCopyTexSubImage2D = epoxy_glCopyTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE2DEXTPROC epoxy_glCopyTexSubImage2DEXT = epoxy_glCopyTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DPROC epoxy_glCopyTexSubImage3D = epoxy_glCopyTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DEXTPROC epoxy_glCopyTexSubImage3DEXT = epoxy_glCopyTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DOESPROC epoxy_glCopyTexSubImage3DOES = epoxy_glCopyTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTUREIMAGE1DEXTPROC epoxy_glCopyTextureImage1DEXT = epoxy_glCopyTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTUREIMAGE2DEXTPROC epoxy_glCopyTextureImage2DEXT = epoxy_glCopyTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURELEVELSAPPLEPROC epoxy_glCopyTextureLevelsAPPLE = epoxy_glCopyTextureLevelsAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE1DPROC epoxy_glCopyTextureSubImage1D = epoxy_glCopyTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC epoxy_glCopyTextureSubImage1DEXT = epoxy_glCopyTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE2DPROC epoxy_glCopyTextureSubImage2D = epoxy_glCopyTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC epoxy_glCopyTextureSubImage2DEXT = epoxy_glCopyTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE3DPROC epoxy_glCopyTextureSubImage3D = epoxy_glCopyTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC epoxy_glCopyTextureSubImage3DEXT = epoxy_glCopyTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOVERFILLPATHINSTANCEDNVPROC epoxy_glCoverFillPathInstancedNV = epoxy_glCoverFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERFILLPATHNVPROC epoxy_glCoverFillPathNV = epoxy_glCoverFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glCoverStrokePathInstancedNV = epoxy_glCoverStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERSTROKEPATHNVPROC epoxy_glCoverStrokePathNV = epoxy_glCoverStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMASKNVPROC epoxy_glCoverageMaskNV = epoxy_glCoverageMaskNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMODULATIONNVPROC epoxy_glCoverageModulationNV = epoxy_glCoverageModulationNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMODULATIONTABLENVPROC epoxy_glCoverageModulationTableNV = epoxy_glCoverageModulationTableNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEOPERATIONNVPROC epoxy_glCoverageOperationNV = epoxy_glCoverageOperationNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATEBUFFERSPROC epoxy_glCreateBuffers = epoxy_glCreateBuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATECOMMANDLISTSNVPROC epoxy_glCreateCommandListsNV = epoxy_glCreateCommandListsNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATEFRAMEBUFFERSPROC epoxy_glCreateFramebuffers = epoxy_glCreateFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPERFQUERYINTELPROC epoxy_glCreatePerfQueryINTEL = epoxy_glCreatePerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMPROC epoxy_glCreateProgram = epoxy_glCreateProgram_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMOBJECTARBPROC epoxy_glCreateProgramObjectARB = epoxy_glCreateProgramObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMPIPELINESPROC epoxy_glCreateProgramPipelines = epoxy_glCreateProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLCREATEQUERIESPROC epoxy_glCreateQueries = epoxy_glCreateQueries_global_rewrite_ptr; + +PUBLIC PFNGLCREATERENDERBUFFERSPROC epoxy_glCreateRenderbuffers = epoxy_glCreateRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATESAMPLERSPROC epoxy_glCreateSamplers = epoxy_glCreateSamplers_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROC epoxy_glCreateShader = epoxy_glCreateShader_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADEROBJECTARBPROC epoxy_glCreateShaderObjectARB = epoxy_glCreateShaderObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMEXTPROC epoxy_glCreateShaderProgramEXT = epoxy_glCreateShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMVPROC epoxy_glCreateShaderProgramv = epoxy_glCreateShaderProgramv_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMVEXTPROC epoxy_glCreateShaderProgramvEXT = epoxy_glCreateShaderProgramvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCREATESTATESNVPROC epoxy_glCreateStatesNV = epoxy_glCreateStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATESYNCFROMCLEVENTARBPROC epoxy_glCreateSyncFromCLeventARB = epoxy_glCreateSyncFromCLeventARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATETEXTURESPROC epoxy_glCreateTextures = epoxy_glCreateTextures_global_rewrite_ptr; + +PUBLIC PFNGLCREATETRANSFORMFEEDBACKSPROC epoxy_glCreateTransformFeedbacks = epoxy_glCreateTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLCREATEVERTEXARRAYSPROC epoxy_glCreateVertexArrays = epoxy_glCreateVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLCULLFACEPROC epoxy_glCullFace = epoxy_glCullFace_global_rewrite_ptr; + +PUBLIC PFNGLCULLPARAMETERDVEXTPROC epoxy_glCullParameterdvEXT = epoxy_glCullParameterdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCULLPARAMETERFVEXTPROC epoxy_glCullParameterfvEXT = epoxy_glCullParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCURRENTPALETTEMATRIXARBPROC epoxy_glCurrentPaletteMatrixARB = epoxy_glCurrentPaletteMatrixARB_global_rewrite_ptr; + +PUBLIC PFNGLCURRENTPALETTEMATRIXOESPROC epoxy_glCurrentPaletteMatrixOES = epoxy_glCurrentPaletteMatrixOES_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKPROC epoxy_glDebugMessageCallback = epoxy_glDebugMessageCallback_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKAMDPROC epoxy_glDebugMessageCallbackAMD = epoxy_glDebugMessageCallbackAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKARBPROC epoxy_glDebugMessageCallbackARB = epoxy_glDebugMessageCallbackARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKKHRPROC epoxy_glDebugMessageCallbackKHR = epoxy_glDebugMessageCallbackKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLPROC epoxy_glDebugMessageControl = epoxy_glDebugMessageControl_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLARBPROC epoxy_glDebugMessageControlARB = epoxy_glDebugMessageControlARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLKHRPROC epoxy_glDebugMessageControlKHR = epoxy_glDebugMessageControlKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEENABLEAMDPROC epoxy_glDebugMessageEnableAMD = epoxy_glDebugMessageEnableAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTPROC epoxy_glDebugMessageInsert = epoxy_glDebugMessageInsert_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTAMDPROC epoxy_glDebugMessageInsertAMD = epoxy_glDebugMessageInsertAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTARBPROC epoxy_glDebugMessageInsertARB = epoxy_glDebugMessageInsertARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTKHRPROC epoxy_glDebugMessageInsertKHR = epoxy_glDebugMessageInsertKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMSGIXPROC epoxy_glDeformSGIX = epoxy_glDeformSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMATIONMAP3DSGIXPROC epoxy_glDeformationMap3dSGIX = epoxy_glDeformationMap3dSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMATIONMAP3FSGIXPROC epoxy_glDeformationMap3fSGIX = epoxy_glDeformationMap3fSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDELETEASYNCMARKERSSGIXPROC epoxy_glDeleteAsyncMarkersSGIX = epoxy_glDeleteAsyncMarkersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDELETEBUFFERSPROC epoxy_glDeleteBuffers = epoxy_glDeleteBuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETEBUFFERSARBPROC epoxy_glDeleteBuffersARB = epoxy_glDeleteBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETECOMMANDLISTSNVPROC epoxy_glDeleteCommandListsNV = epoxy_glDeleteCommandListsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFENCESAPPLEPROC epoxy_glDeleteFencesAPPLE = epoxy_glDeleteFencesAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFENCESNVPROC epoxy_glDeleteFencesNV = epoxy_glDeleteFencesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAGMENTSHADERATIPROC epoxy_glDeleteFragmentShaderATI = epoxy_glDeleteFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSPROC epoxy_glDeleteFramebuffers = epoxy_glDeleteFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSEXTPROC epoxy_glDeleteFramebuffersEXT = epoxy_glDeleteFramebuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSOESPROC epoxy_glDeleteFramebuffersOES = epoxy_glDeleteFramebuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETELISTSPROC epoxy_glDeleteLists = epoxy_glDeleteLists_global_rewrite_ptr; + +PUBLIC PFNGLDELETENAMEDSTRINGARBPROC epoxy_glDeleteNamedStringARB = epoxy_glDeleteNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETENAMESAMDPROC epoxy_glDeleteNamesAMD = epoxy_glDeleteNamesAMD_global_rewrite_ptr; + +PUBLIC PFNGLDELETEOBJECTARBPROC epoxy_glDeleteObjectARB = epoxy_glDeleteObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEOCCLUSIONQUERIESNVPROC epoxy_glDeleteOcclusionQueriesNV = epoxy_glDeleteOcclusionQueriesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPATHSNVPROC epoxy_glDeletePathsNV = epoxy_glDeletePathsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPERFMONITORSAMDPROC epoxy_glDeletePerfMonitorsAMD = epoxy_glDeletePerfMonitorsAMD_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPERFQUERYINTELPROC epoxy_glDeletePerfQueryINTEL = epoxy_glDeletePerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPROC epoxy_glDeleteProgram = epoxy_glDeleteProgram_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPIPELINESPROC epoxy_glDeleteProgramPipelines = epoxy_glDeleteProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPIPELINESEXTPROC epoxy_glDeleteProgramPipelinesEXT = epoxy_glDeleteProgramPipelinesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMSARBPROC epoxy_glDeleteProgramsARB = epoxy_glDeleteProgramsARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMSNVPROC epoxy_glDeleteProgramsNV = epoxy_glDeleteProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESPROC epoxy_glDeleteQueries = epoxy_glDeleteQueries_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESARBPROC epoxy_glDeleteQueriesARB = epoxy_glDeleteQueriesARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESEXTPROC epoxy_glDeleteQueriesEXT = epoxy_glDeleteQueriesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSPROC epoxy_glDeleteRenderbuffers = epoxy_glDeleteRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSEXTPROC epoxy_glDeleteRenderbuffersEXT = epoxy_glDeleteRenderbuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSOESPROC epoxy_glDeleteRenderbuffersOES = epoxy_glDeleteRenderbuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETESAMPLERSPROC epoxy_glDeleteSamplers = epoxy_glDeleteSamplers_global_rewrite_ptr; + +PUBLIC PFNGLDELETESHADERPROC epoxy_glDeleteShader = epoxy_glDeleteShader_global_rewrite_ptr; + +PUBLIC PFNGLDELETESTATESNVPROC epoxy_glDeleteStatesNV = epoxy_glDeleteStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETESYNCPROC epoxy_glDeleteSync = epoxy_glDeleteSync_global_rewrite_ptr; + +PUBLIC PFNGLDELETESYNCAPPLEPROC epoxy_glDeleteSyncAPPLE = epoxy_glDeleteSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETETEXTURESPROC epoxy_glDeleteTextures = epoxy_glDeleteTextures_global_rewrite_ptr; + +PUBLIC PFNGLDELETETEXTURESEXTPROC epoxy_glDeleteTexturesEXT = epoxy_glDeleteTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETETRANSFORMFEEDBACKSPROC epoxy_glDeleteTransformFeedbacks = epoxy_glDeleteTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLDELETETRANSFORMFEEDBACKSNVPROC epoxy_glDeleteTransformFeedbacksNV = epoxy_glDeleteTransformFeedbacksNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSPROC epoxy_glDeleteVertexArrays = epoxy_glDeleteVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSAPPLEPROC epoxy_glDeleteVertexArraysAPPLE = epoxy_glDeleteVertexArraysAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSOESPROC epoxy_glDeleteVertexArraysOES = epoxy_glDeleteVertexArraysOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXSHADEREXTPROC epoxy_glDeleteVertexShaderEXT = epoxy_glDeleteVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHBOUNDSEXTPROC epoxy_glDepthBoundsEXT = epoxy_glDepthBoundsEXT_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHBOUNDSDNVPROC epoxy_glDepthBoundsdNV = epoxy_glDepthBoundsdNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHFUNCPROC epoxy_glDepthFunc = epoxy_glDepthFunc_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHMASKPROC epoxy_glDepthMask = epoxy_glDepthMask_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEPROC epoxy_glDepthRange = epoxy_glDepthRange_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEARRAYFVNVPROC epoxy_glDepthRangeArrayfvNV = epoxy_glDepthRangeArrayfvNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEARRAYVPROC epoxy_glDepthRangeArrayv = epoxy_glDepthRangeArrayv_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEINDEXEDPROC epoxy_glDepthRangeIndexed = epoxy_glDepthRangeIndexed_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEINDEXEDFNVPROC epoxy_glDepthRangeIndexedfNV = epoxy_glDepthRangeIndexedfNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEDNVPROC epoxy_glDepthRangedNV = epoxy_glDepthRangedNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEFPROC epoxy_glDepthRangef = epoxy_glDepthRangef_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEFOESPROC epoxy_glDepthRangefOES = epoxy_glDepthRangefOES_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEXPROC epoxy_glDepthRangex = epoxy_glDepthRangex_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEXOESPROC epoxy_glDepthRangexOES = epoxy_glDepthRangexOES_global_rewrite_ptr; + +PUBLIC PFNGLDETACHOBJECTARBPROC epoxy_glDetachObjectARB = epoxy_glDetachObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLDETACHSHADERPROC epoxy_glDetachShader = epoxy_glDetachShader_global_rewrite_ptr; + +PUBLIC PFNGLDETAILTEXFUNCSGISPROC epoxy_glDetailTexFuncSGIS = epoxy_glDetailTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEPROC epoxy_glDisable = epoxy_glDisable_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEPROC epoxy_glDisableClientState = epoxy_glDisableClientState_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC epoxy_glDisableClientStateIndexedEXT = epoxy_glDisableClientStateIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEIEXTPROC epoxy_glDisableClientStateiEXT = epoxy_glDisableClientStateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEDRIVERCONTROLQCOMPROC epoxy_glDisableDriverControlQCOM = epoxy_glDisableDriverControlQCOM_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEINDEXEDEXTPROC epoxy_glDisableIndexedEXT = epoxy_glDisableIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC epoxy_glDisableVariantClientStateEXT = epoxy_glDisableVariantClientStateEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYATTRIBPROC epoxy_glDisableVertexArrayAttrib = epoxy_glDisableVertexArrayAttrib_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC epoxy_glDisableVertexArrayAttribEXT = epoxy_glDisableVertexArrayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYEXTPROC epoxy_glDisableVertexArrayEXT = epoxy_glDisableVertexArrayEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBAPPLEPROC epoxy_glDisableVertexAttribAPPLE = epoxy_glDisableVertexAttribAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBARRAYPROC epoxy_glDisableVertexAttribArray = epoxy_glDisableVertexAttribArray_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBARRAYARBPROC epoxy_glDisableVertexAttribArrayARB = epoxy_glDisableVertexAttribArrayARB_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIPROC epoxy_glDisablei = epoxy_glDisablei_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIEXTPROC epoxy_glDisableiEXT = epoxy_glDisableiEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEINVPROC epoxy_glDisableiNV = epoxy_glDisableiNV_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIOESPROC epoxy_glDisableiOES = epoxy_glDisableiOES_global_rewrite_ptr; + +PUBLIC PFNGLDISCARDFRAMEBUFFEREXTPROC epoxy_glDiscardFramebufferEXT = epoxy_glDiscardFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEPROC epoxy_glDispatchCompute = epoxy_glDispatchCompute_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC epoxy_glDispatchComputeGroupSizeARB = epoxy_glDispatchComputeGroupSizeARB_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEINDIRECTPROC epoxy_glDispatchComputeIndirect = epoxy_glDispatchComputeIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSPROC epoxy_glDrawArrays = epoxy_glDrawArrays_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSEXTPROC epoxy_glDrawArraysEXT = epoxy_glDrawArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINDIRECTPROC epoxy_glDrawArraysIndirect = epoxy_glDrawArraysIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDPROC epoxy_glDrawArraysInstanced = epoxy_glDrawArraysInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDANGLEPROC epoxy_glDrawArraysInstancedANGLE = epoxy_glDrawArraysInstancedANGLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDARBPROC epoxy_glDrawArraysInstancedARB = epoxy_glDrawArraysInstancedARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC epoxy_glDrawArraysInstancedBaseInstance = epoxy_glDrawArraysInstancedBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawArraysInstancedBaseInstanceEXT = epoxy_glDrawArraysInstancedBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDEXTPROC epoxy_glDrawArraysInstancedEXT = epoxy_glDrawArraysInstancedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDNVPROC epoxy_glDrawArraysInstancedNV = epoxy_glDrawArraysInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERPROC epoxy_glDrawBuffer = epoxy_glDrawBuffer_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSPROC epoxy_glDrawBuffers = epoxy_glDrawBuffers_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSARBPROC epoxy_glDrawBuffersARB = epoxy_glDrawBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSATIPROC epoxy_glDrawBuffersATI = epoxy_glDrawBuffersATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSEXTPROC epoxy_glDrawBuffersEXT = epoxy_glDrawBuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSINDEXEDEXTPROC epoxy_glDrawBuffersIndexedEXT = epoxy_glDrawBuffersIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSNVPROC epoxy_glDrawBuffersNV = epoxy_glDrawBuffersNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSADDRESSNVPROC epoxy_glDrawCommandsAddressNV = epoxy_glDrawCommandsAddressNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSNVPROC epoxy_glDrawCommandsNV = epoxy_glDrawCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC epoxy_glDrawCommandsStatesAddressNV = epoxy_glDrawCommandsStatesAddressNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSSTATESNVPROC epoxy_glDrawCommandsStatesNV = epoxy_glDrawCommandsStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTARRAYAPPLEPROC epoxy_glDrawElementArrayAPPLE = epoxy_glDrawElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTARRAYATIPROC epoxy_glDrawElementArrayATI = epoxy_glDrawElementArrayATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSPROC epoxy_glDrawElements = epoxy_glDrawElements_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXPROC epoxy_glDrawElementsBaseVertex = epoxy_glDrawElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glDrawElementsBaseVertexEXT = epoxy_glDrawElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXOESPROC epoxy_glDrawElementsBaseVertexOES = epoxy_glDrawElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINDIRECTPROC epoxy_glDrawElementsIndirect = epoxy_glDrawElementsIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDPROC epoxy_glDrawElementsInstanced = epoxy_glDrawElementsInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDANGLEPROC epoxy_glDrawElementsInstancedANGLE = epoxy_glDrawElementsInstancedANGLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDARBPROC epoxy_glDrawElementsInstancedARB = epoxy_glDrawElementsInstancedARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseInstance = epoxy_glDrawElementsInstancedBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC epoxy_glDrawElementsInstancedBaseVertex = epoxy_glDrawElementsInstancedBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstance = epoxy_glDrawElementsInstancedBaseVertexBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC epoxy_glDrawElementsInstancedBaseVertexEXT = epoxy_glDrawElementsInstancedBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC epoxy_glDrawElementsInstancedBaseVertexOES = epoxy_glDrawElementsInstancedBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDEXTPROC epoxy_glDrawElementsInstancedEXT = epoxy_glDrawElementsInstancedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDNVPROC epoxy_glDrawElementsInstancedNV = epoxy_glDrawElementsInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWMESHARRAYSSUNPROC epoxy_glDrawMeshArraysSUN = epoxy_glDrawMeshArraysSUN_global_rewrite_ptr; + +PUBLIC PFNGLDRAWPIXELSPROC epoxy_glDrawPixels = epoxy_glDrawPixels_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glDrawRangeElementArrayAPPLE = epoxy_glDrawRangeElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTARRAYATIPROC epoxy_glDrawRangeElementArrayATI = epoxy_glDrawRangeElementArrayATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSPROC epoxy_glDrawRangeElements = epoxy_glDrawRangeElements_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC epoxy_glDrawRangeElementsBaseVertex = epoxy_glDrawRangeElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC epoxy_glDrawRangeElementsBaseVertexEXT = epoxy_glDrawRangeElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC epoxy_glDrawRangeElementsBaseVertexOES = epoxy_glDrawRangeElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSEXTPROC epoxy_glDrawRangeElementsEXT = epoxy_glDrawRangeElementsEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXFOESPROC epoxy_glDrawTexfOES = epoxy_glDrawTexfOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXFVOESPROC epoxy_glDrawTexfvOES = epoxy_glDrawTexfvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXIOESPROC epoxy_glDrawTexiOES = epoxy_glDrawTexiOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXIVOESPROC epoxy_glDrawTexivOES = epoxy_glDrawTexivOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXSOESPROC epoxy_glDrawTexsOES = epoxy_glDrawTexsOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXSVOESPROC epoxy_glDrawTexsvOES = epoxy_glDrawTexsvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXTURENVPROC epoxy_glDrawTextureNV = epoxy_glDrawTextureNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXXOESPROC epoxy_glDrawTexxOES = epoxy_glDrawTexxOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXXVOESPROC epoxy_glDrawTexxvOES = epoxy_glDrawTexxvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKPROC epoxy_glDrawTransformFeedback = epoxy_glDrawTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC epoxy_glDrawTransformFeedbackInstanced = epoxy_glDrawTransformFeedbackInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKNVPROC epoxy_glDrawTransformFeedbackNV = epoxy_glDrawTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC epoxy_glDrawTransformFeedbackStream = epoxy_glDrawTransformFeedbackStream_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC epoxy_glDrawTransformFeedbackStreamInstanced = epoxy_glDrawTransformFeedbackStreamInstanced_global_rewrite_ptr; + +PUBLIC PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC epoxy_glEGLImageTargetRenderbufferStorageOES = epoxy_glEGLImageTargetRenderbufferStorageOES_global_rewrite_ptr; + +PUBLIC PFNGLEGLIMAGETARGETTEXTURE2DOESPROC epoxy_glEGLImageTargetTexture2DOES = epoxy_glEGLImageTargetTexture2DOES_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPROC epoxy_glEdgeFlag = epoxy_glEdgeFlag_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGFORMATNVPROC epoxy_glEdgeFlagFormatNV = epoxy_glEdgeFlagFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTERPROC epoxy_glEdgeFlagPointer = epoxy_glEdgeFlagPointer_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTEREXTPROC epoxy_glEdgeFlagPointerEXT = epoxy_glEdgeFlagPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTERLISTIBMPROC epoxy_glEdgeFlagPointerListIBM = epoxy_glEdgeFlagPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGVPROC epoxy_glEdgeFlagv = epoxy_glEdgeFlagv_global_rewrite_ptr; + +PUBLIC PFNGLELEMENTPOINTERAPPLEPROC epoxy_glElementPointerAPPLE = epoxy_glElementPointerAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLELEMENTPOINTERATIPROC epoxy_glElementPointerATI = epoxy_glElementPointerATI_global_rewrite_ptr; + +PUBLIC PFNGLENABLEPROC epoxy_glEnable = epoxy_glEnable_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEPROC epoxy_glEnableClientState = epoxy_glEnableClientState_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEINDEXEDEXTPROC epoxy_glEnableClientStateIndexedEXT = epoxy_glEnableClientStateIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEIEXTPROC epoxy_glEnableClientStateiEXT = epoxy_glEnableClientStateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEDRIVERCONTROLQCOMPROC epoxy_glEnableDriverControlQCOM = epoxy_glEnableDriverControlQCOM_global_rewrite_ptr; + +PUBLIC PFNGLENABLEINDEXEDEXTPROC epoxy_glEnableIndexedEXT = epoxy_glEnableIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVARIANTCLIENTSTATEEXTPROC epoxy_glEnableVariantClientStateEXT = epoxy_glEnableVariantClientStateEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYATTRIBPROC epoxy_glEnableVertexArrayAttrib = epoxy_glEnableVertexArrayAttrib_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYATTRIBEXTPROC epoxy_glEnableVertexArrayAttribEXT = epoxy_glEnableVertexArrayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYEXTPROC epoxy_glEnableVertexArrayEXT = epoxy_glEnableVertexArrayEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBAPPLEPROC epoxy_glEnableVertexAttribAPPLE = epoxy_glEnableVertexAttribAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBARRAYPROC epoxy_glEnableVertexAttribArray = epoxy_glEnableVertexAttribArray_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBARRAYARBPROC epoxy_glEnableVertexAttribArrayARB = epoxy_glEnableVertexAttribArrayARB_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIPROC epoxy_glEnablei = epoxy_glEnablei_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIEXTPROC epoxy_glEnableiEXT = epoxy_glEnableiEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEINVPROC epoxy_glEnableiNV = epoxy_glEnableiNV_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIOESPROC epoxy_glEnableiOES = epoxy_glEnableiOES_global_rewrite_ptr; + +PFNGLENDPROC epoxy_glEnd_unwrapped = epoxy_glEnd_unwrapped_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERPROC epoxy_glEndConditionalRender = epoxy_glEndConditionalRender_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERNVPROC epoxy_glEndConditionalRenderNV = epoxy_glEndConditionalRenderNV_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERNVXPROC epoxy_glEndConditionalRenderNVX = epoxy_glEndConditionalRenderNVX_global_rewrite_ptr; + +PUBLIC PFNGLENDFRAGMENTSHADERATIPROC epoxy_glEndFragmentShaderATI = epoxy_glEndFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLENDLISTPROC epoxy_glEndList = epoxy_glEndList_global_rewrite_ptr; + +PUBLIC PFNGLENDOCCLUSIONQUERYNVPROC epoxy_glEndOcclusionQueryNV = epoxy_glEndOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLENDPERFMONITORAMDPROC epoxy_glEndPerfMonitorAMD = epoxy_glEndPerfMonitorAMD_global_rewrite_ptr; + +PUBLIC PFNGLENDPERFQUERYINTELPROC epoxy_glEndPerfQueryINTEL = epoxy_glEndPerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYPROC epoxy_glEndQuery = epoxy_glEndQuery_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYARBPROC epoxy_glEndQueryARB = epoxy_glEndQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYEXTPROC epoxy_glEndQueryEXT = epoxy_glEndQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYINDEXEDPROC epoxy_glEndQueryIndexed = epoxy_glEndQueryIndexed_global_rewrite_ptr; + +PUBLIC PFNGLENDTILINGQCOMPROC epoxy_glEndTilingQCOM = epoxy_glEndTilingQCOM_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKPROC epoxy_glEndTransformFeedback = epoxy_glEndTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKEXTPROC epoxy_glEndTransformFeedbackEXT = epoxy_glEndTransformFeedbackEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKNVPROC epoxy_glEndTransformFeedbackNV = epoxy_glEndTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLENDVERTEXSHADEREXTPROC epoxy_glEndVertexShaderEXT = epoxy_glEndVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDVIDEOCAPTURENVPROC epoxy_glEndVideoCaptureNV = epoxy_glEndVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1DPROC epoxy_glEvalCoord1d = epoxy_glEvalCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1DVPROC epoxy_glEvalCoord1dv = epoxy_glEvalCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1FPROC epoxy_glEvalCoord1f = epoxy_glEvalCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1FVPROC epoxy_glEvalCoord1fv = epoxy_glEvalCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1XOESPROC epoxy_glEvalCoord1xOES = epoxy_glEvalCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1XVOESPROC epoxy_glEvalCoord1xvOES = epoxy_glEvalCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2DPROC epoxy_glEvalCoord2d = epoxy_glEvalCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2DVPROC epoxy_glEvalCoord2dv = epoxy_glEvalCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2FPROC epoxy_glEvalCoord2f = epoxy_glEvalCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2FVPROC epoxy_glEvalCoord2fv = epoxy_glEvalCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2XOESPROC epoxy_glEvalCoord2xOES = epoxy_glEvalCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2XVOESPROC epoxy_glEvalCoord2xvOES = epoxy_glEvalCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALMAPSNVPROC epoxy_glEvalMapsNV = epoxy_glEvalMapsNV_global_rewrite_ptr; + +PUBLIC PFNGLEVALMESH1PROC epoxy_glEvalMesh1 = epoxy_glEvalMesh1_global_rewrite_ptr; + +PUBLIC PFNGLEVALMESH2PROC epoxy_glEvalMesh2 = epoxy_glEvalMesh2_global_rewrite_ptr; + +PUBLIC PFNGLEVALPOINT1PROC epoxy_glEvalPoint1 = epoxy_glEvalPoint1_global_rewrite_ptr; + +PUBLIC PFNGLEVALPOINT2PROC epoxy_glEvalPoint2 = epoxy_glEvalPoint2_global_rewrite_ptr; + +PUBLIC PFNGLEVALUATEDEPTHVALUESARBPROC epoxy_glEvaluateDepthValuesARB = epoxy_glEvaluateDepthValuesARB_global_rewrite_ptr; + +PUBLIC PFNGLEXECUTEPROGRAMNVPROC epoxy_glExecuteProgramNV = epoxy_glExecuteProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETBUFFERPOINTERVQCOMPROC epoxy_glExtGetBufferPointervQCOM = epoxy_glExtGetBufferPointervQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETBUFFERSQCOMPROC epoxy_glExtGetBuffersQCOM = epoxy_glExtGetBuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETFRAMEBUFFERSQCOMPROC epoxy_glExtGetFramebuffersQCOM = epoxy_glExtGetFramebuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC epoxy_glExtGetProgramBinarySourceQCOM = epoxy_glExtGetProgramBinarySourceQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETPROGRAMSQCOMPROC epoxy_glExtGetProgramsQCOM = epoxy_glExtGetProgramsQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETRENDERBUFFERSQCOMPROC epoxy_glExtGetRenderbuffersQCOM = epoxy_glExtGetRenderbuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETSHADERSQCOMPROC epoxy_glExtGetShadersQCOM = epoxy_glExtGetShadersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC epoxy_glExtGetTexLevelParameterivQCOM = epoxy_glExtGetTexLevelParameterivQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXSUBIMAGEQCOMPROC epoxy_glExtGetTexSubImageQCOM = epoxy_glExtGetTexSubImageQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXTURESQCOMPROC epoxy_glExtGetTexturesQCOM = epoxy_glExtGetTexturesQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTISPROGRAMBINARYQCOMPROC epoxy_glExtIsProgramBinaryQCOM = epoxy_glExtIsProgramBinaryQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC epoxy_glExtTexObjectStateOverrideiQCOM = epoxy_glExtTexObjectStateOverrideiQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTRACTCOMPONENTEXTPROC epoxy_glExtractComponentEXT = epoxy_glExtractComponentEXT_global_rewrite_ptr; + +PUBLIC PFNGLFEEDBACKBUFFERPROC epoxy_glFeedbackBuffer = epoxy_glFeedbackBuffer_global_rewrite_ptr; + +PUBLIC PFNGLFEEDBACKBUFFERXOESPROC epoxy_glFeedbackBufferxOES = epoxy_glFeedbackBufferxOES_global_rewrite_ptr; + +PUBLIC PFNGLFENCESYNCPROC epoxy_glFenceSync = epoxy_glFenceSync_global_rewrite_ptr; + +PUBLIC PFNGLFENCESYNCAPPLEPROC epoxy_glFenceSyncAPPLE = epoxy_glFenceSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINALCOMBINERINPUTNVPROC epoxy_glFinalCombinerInputNV = epoxy_glFinalCombinerInputNV_global_rewrite_ptr; + +PUBLIC PFNGLFINISHPROC epoxy_glFinish = epoxy_glFinish_global_rewrite_ptr; + +PUBLIC PFNGLFINISHASYNCSGIXPROC epoxy_glFinishAsyncSGIX = epoxy_glFinishAsyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFINISHFENCEAPPLEPROC epoxy_glFinishFenceAPPLE = epoxy_glFinishFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINISHFENCENVPROC epoxy_glFinishFenceNV = epoxy_glFinishFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLFINISHOBJECTAPPLEPROC epoxy_glFinishObjectAPPLE = epoxy_glFinishObjectAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINISHTEXTURESUNXPROC epoxy_glFinishTextureSUNX = epoxy_glFinishTextureSUNX_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHPROC epoxy_glFlush = epoxy_glFlush_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEPROC epoxy_glFlushMappedBufferRange = epoxy_glFlushMappedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC epoxy_glFlushMappedBufferRangeAPPLE = epoxy_glFlushMappedBufferRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC epoxy_glFlushMappedBufferRangeEXT = epoxy_glFlushMappedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC epoxy_glFlushMappedNamedBufferRange = epoxy_glFlushMappedNamedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC epoxy_glFlushMappedNamedBufferRangeEXT = epoxy_glFlushMappedNamedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHPIXELDATARANGENVPROC epoxy_glFlushPixelDataRangeNV = epoxy_glFlushPixelDataRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHRASTERSGIXPROC epoxy_glFlushRasterSGIX = epoxy_glFlushRasterSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHSTATICDATAIBMPROC epoxy_glFlushStaticDataIBM = epoxy_glFlushStaticDataIBM_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC epoxy_glFlushVertexArrayRangeAPPLE = epoxy_glFlushVertexArrayRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHVERTEXARRAYRANGENVPROC epoxy_glFlushVertexArrayRangeNV = epoxy_glFlushVertexArrayRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFORMATNVPROC epoxy_glFogCoordFormatNV = epoxy_glFogCoordFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTERPROC epoxy_glFogCoordPointer = epoxy_glFogCoordPointer_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTEREXTPROC epoxy_glFogCoordPointerEXT = epoxy_glFogCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTERLISTIBMPROC epoxy_glFogCoordPointerListIBM = epoxy_glFogCoordPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDPROC epoxy_glFogCoordd = epoxy_glFogCoordd_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDEXTPROC epoxy_glFogCoorddEXT = epoxy_glFogCoorddEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDVPROC epoxy_glFogCoorddv = epoxy_glFogCoorddv_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDVEXTPROC epoxy_glFogCoorddvEXT = epoxy_glFogCoorddvEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFPROC epoxy_glFogCoordf = epoxy_glFogCoordf_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFEXTPROC epoxy_glFogCoordfEXT = epoxy_glFogCoordfEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFVPROC epoxy_glFogCoordfv = epoxy_glFogCoordfv_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFVEXTPROC epoxy_glFogCoordfvEXT = epoxy_glFogCoordfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDHNVPROC epoxy_glFogCoordhNV = epoxy_glFogCoordhNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDHVNVPROC epoxy_glFogCoordhvNV = epoxy_glFogCoordhvNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGFUNCSGISPROC epoxy_glFogFuncSGIS = epoxy_glFogFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLFOGFPROC epoxy_glFogf = epoxy_glFogf_global_rewrite_ptr; + +PUBLIC PFNGLFOGFVPROC epoxy_glFogfv = epoxy_glFogfv_global_rewrite_ptr; + +PUBLIC PFNGLFOGIPROC epoxy_glFogi = epoxy_glFogi_global_rewrite_ptr; + +PUBLIC PFNGLFOGIVPROC epoxy_glFogiv = epoxy_glFogiv_global_rewrite_ptr; + +PUBLIC PFNGLFOGXPROC epoxy_glFogx = epoxy_glFogx_global_rewrite_ptr; + +PUBLIC PFNGLFOGXOESPROC epoxy_glFogxOES = epoxy_glFogxOES_global_rewrite_ptr; + +PUBLIC PFNGLFOGXVPROC epoxy_glFogxv = epoxy_glFogxv_global_rewrite_ptr; + +PUBLIC PFNGLFOGXVOESPROC epoxy_glFogxvOES = epoxy_glFogxvOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTCOLORMATERIALSGIXPROC epoxy_glFragmentColorMaterialSGIX = epoxy_glFragmentColorMaterialSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTCOVERAGECOLORNVPROC epoxy_glFragmentCoverageColorNV = epoxy_glFragmentCoverageColorNV_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELFSGIXPROC epoxy_glFragmentLightModelfSGIX = epoxy_glFragmentLightModelfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELFVSGIXPROC epoxy_glFragmentLightModelfvSGIX = epoxy_glFragmentLightModelfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELISGIXPROC epoxy_glFragmentLightModeliSGIX = epoxy_glFragmentLightModeliSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELIVSGIXPROC epoxy_glFragmentLightModelivSGIX = epoxy_glFragmentLightModelivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTFSGIXPROC epoxy_glFragmentLightfSGIX = epoxy_glFragmentLightfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTFVSGIXPROC epoxy_glFragmentLightfvSGIX = epoxy_glFragmentLightfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTISGIXPROC epoxy_glFragmentLightiSGIX = epoxy_glFragmentLightiSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTIVSGIXPROC epoxy_glFragmentLightivSGIX = epoxy_glFragmentLightivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALFSGIXPROC epoxy_glFragmentMaterialfSGIX = epoxy_glFragmentMaterialfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALFVSGIXPROC epoxy_glFragmentMaterialfvSGIX = epoxy_glFragmentMaterialfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALISGIXPROC epoxy_glFragmentMaterialiSGIX = epoxy_glFragmentMaterialiSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALIVSGIXPROC epoxy_glFragmentMaterialivSGIX = epoxy_glFragmentMaterialivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAMETERMINATORGREMEDYPROC epoxy_glFrameTerminatorGREMEDY = epoxy_glFrameTerminatorGREMEDY_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEZOOMSGIXPROC epoxy_glFrameZoomSGIX = epoxy_glFrameZoomSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC epoxy_glFramebufferDrawBufferEXT = epoxy_glFramebufferDrawBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC epoxy_glFramebufferDrawBuffersEXT = epoxy_glFramebufferDrawBuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERPARAMETERIPROC epoxy_glFramebufferParameteri = epoxy_glFramebufferParameteri_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERREADBUFFEREXTPROC epoxy_glFramebufferReadBufferEXT = epoxy_glFramebufferReadBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFERPROC epoxy_glFramebufferRenderbuffer = epoxy_glFramebufferRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glFramebufferRenderbufferEXT = epoxy_glFramebufferRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFEROESPROC epoxy_glFramebufferRenderbufferOES = epoxy_glFramebufferRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glFramebufferSampleLocationsfvARB = epoxy_glFramebufferSampleLocationsfvARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glFramebufferSampleLocationsfvNV = epoxy_glFramebufferSampleLocationsfvNV_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREPROC epoxy_glFramebufferTexture = epoxy_glFramebufferTexture_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE1DPROC epoxy_glFramebufferTexture1D = epoxy_glFramebufferTexture1D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glFramebufferTexture1DEXT = epoxy_glFramebufferTexture1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DPROC epoxy_glFramebufferTexture2D = epoxy_glFramebufferTexture2D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glFramebufferTexture2DEXT = epoxy_glFramebufferTexture2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC epoxy_glFramebufferTexture2DMultisampleEXT = epoxy_glFramebufferTexture2DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC epoxy_glFramebufferTexture2DMultisampleIMG = epoxy_glFramebufferTexture2DMultisampleIMG_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DOESPROC epoxy_glFramebufferTexture2DOES = epoxy_glFramebufferTexture2DOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DPROC epoxy_glFramebufferTexture3D = epoxy_glFramebufferTexture3D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glFramebufferTexture3DEXT = epoxy_glFramebufferTexture3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DOESPROC epoxy_glFramebufferTexture3DOES = epoxy_glFramebufferTexture3DOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREARBPROC epoxy_glFramebufferTextureARB = epoxy_glFramebufferTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREEXTPROC epoxy_glFramebufferTextureEXT = epoxy_glFramebufferTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREFACEARBPROC epoxy_glFramebufferTextureFaceARB = epoxy_glFramebufferTextureFaceARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glFramebufferTextureFaceEXT = epoxy_glFramebufferTextureFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYERPROC epoxy_glFramebufferTextureLayer = epoxy_glFramebufferTextureLayer_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYERARBPROC epoxy_glFramebufferTextureLayerARB = epoxy_glFramebufferTextureLayerARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glFramebufferTextureLayerEXT = epoxy_glFramebufferTextureLayerEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC epoxy_glFramebufferTextureMultiviewOVR = epoxy_glFramebufferTextureMultiviewOVR_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREOESPROC epoxy_glFramebufferTextureOES = epoxy_glFramebufferTextureOES_global_rewrite_ptr; + +PUBLIC PFNGLFREEOBJECTBUFFERATIPROC epoxy_glFreeObjectBufferATI = epoxy_glFreeObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLFRONTFACEPROC epoxy_glFrontFace = epoxy_glFrontFace_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMPROC epoxy_glFrustum = epoxy_glFrustum_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMFPROC epoxy_glFrustumf = epoxy_glFrustumf_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMFOESPROC epoxy_glFrustumfOES = epoxy_glFrustumfOES_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMXPROC epoxy_glFrustumx = epoxy_glFrustumx_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMXOESPROC epoxy_glFrustumxOES = epoxy_glFrustumxOES_global_rewrite_ptr; + +PUBLIC PFNGLGENASYNCMARKERSSGIXPROC epoxy_glGenAsyncMarkersSGIX = epoxy_glGenAsyncMarkersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGENBUFFERSPROC epoxy_glGenBuffers = epoxy_glGenBuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENBUFFERSARBPROC epoxy_glGenBuffersARB = epoxy_glGenBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLGENFENCESAPPLEPROC epoxy_glGenFencesAPPLE = epoxy_glGenFencesAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGENFENCESNVPROC epoxy_glGenFencesNV = epoxy_glGenFencesNV_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAGMENTSHADERSATIPROC epoxy_glGenFragmentShadersATI = epoxy_glGenFragmentShadersATI_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSPROC epoxy_glGenFramebuffers = epoxy_glGenFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSEXTPROC epoxy_glGenFramebuffersEXT = epoxy_glGenFramebuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSOESPROC epoxy_glGenFramebuffersOES = epoxy_glGenFramebuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLGENLISTSPROC epoxy_glGenLists = epoxy_glGenLists_global_rewrite_ptr; + +PUBLIC PFNGLGENNAMESAMDPROC epoxy_glGenNamesAMD = epoxy_glGenNamesAMD_global_rewrite_ptr; + +PUBLIC PFNGLGENOCCLUSIONQUERIESNVPROC epoxy_glGenOcclusionQueriesNV = epoxy_glGenOcclusionQueriesNV_global_rewrite_ptr; + +PUBLIC PFNGLGENPATHSNVPROC epoxy_glGenPathsNV = epoxy_glGenPathsNV_global_rewrite_ptr; + +PUBLIC PFNGLGENPERFMONITORSAMDPROC epoxy_glGenPerfMonitorsAMD = epoxy_glGenPerfMonitorsAMD_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMPIPELINESPROC epoxy_glGenProgramPipelines = epoxy_glGenProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMPIPELINESEXTPROC epoxy_glGenProgramPipelinesEXT = epoxy_glGenProgramPipelinesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMSARBPROC epoxy_glGenProgramsARB = epoxy_glGenProgramsARB_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMSNVPROC epoxy_glGenProgramsNV = epoxy_glGenProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESPROC epoxy_glGenQueries = epoxy_glGenQueries_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESARBPROC epoxy_glGenQueriesARB = epoxy_glGenQueriesARB_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESEXTPROC epoxy_glGenQueriesEXT = epoxy_glGenQueriesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSPROC epoxy_glGenRenderbuffers = epoxy_glGenRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSEXTPROC epoxy_glGenRenderbuffersEXT = epoxy_glGenRenderbuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSOESPROC epoxy_glGenRenderbuffersOES = epoxy_glGenRenderbuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLGENSAMPLERSPROC epoxy_glGenSamplers = epoxy_glGenSamplers_global_rewrite_ptr; + +PUBLIC PFNGLGENSYMBOLSEXTPROC epoxy_glGenSymbolsEXT = epoxy_glGenSymbolsEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENTEXTURESPROC epoxy_glGenTextures = epoxy_glGenTextures_global_rewrite_ptr; + +PUBLIC PFNGLGENTEXTURESEXTPROC epoxy_glGenTexturesEXT = epoxy_glGenTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENTRANSFORMFEEDBACKSPROC epoxy_glGenTransformFeedbacks = epoxy_glGenTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLGENTRANSFORMFEEDBACKSNVPROC epoxy_glGenTransformFeedbacksNV = epoxy_glGenTransformFeedbacksNV_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSPROC epoxy_glGenVertexArrays = epoxy_glGenVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSAPPLEPROC epoxy_glGenVertexArraysAPPLE = epoxy_glGenVertexArraysAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSOESPROC epoxy_glGenVertexArraysOES = epoxy_glGenVertexArraysOES_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXSHADERSEXTPROC epoxy_glGenVertexShadersEXT = epoxy_glGenVertexShadersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPPROC epoxy_glGenerateMipmap = epoxy_glGenerateMipmap_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPEXTPROC epoxy_glGenerateMipmapEXT = epoxy_glGenerateMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPOESPROC epoxy_glGenerateMipmapOES = epoxy_glGenerateMipmapOES_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMULTITEXMIPMAPEXTPROC epoxy_glGenerateMultiTexMipmapEXT = epoxy_glGenerateMultiTexMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATETEXTUREMIPMAPPROC epoxy_glGenerateTextureMipmap = epoxy_glGenerateTextureMipmap_global_rewrite_ptr; + +PUBLIC PFNGLGENERATETEXTUREMIPMAPEXTPROC epoxy_glGenerateTextureMipmapEXT = epoxy_glGenerateTextureMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC epoxy_glGetActiveAtomicCounterBufferiv = epoxy_glGetActiveAtomicCounterBufferiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATTRIBPROC epoxy_glGetActiveAttrib = epoxy_glGetActiveAttrib_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATTRIBARBPROC epoxy_glGetActiveAttribARB = epoxy_glGetActiveAttribARB_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINENAMEPROC epoxy_glGetActiveSubroutineName = epoxy_glGetActiveSubroutineName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC epoxy_glGetActiveSubroutineUniformName = epoxy_glGetActiveSubroutineUniformName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC epoxy_glGetActiveSubroutineUniformiv = epoxy_glGetActiveSubroutineUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMPROC epoxy_glGetActiveUniform = epoxy_glGetActiveUniform_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMARBPROC epoxy_glGetActiveUniformARB = epoxy_glGetActiveUniformARB_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC epoxy_glGetActiveUniformBlockName = epoxy_glGetActiveUniformBlockName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMBLOCKIVPROC epoxy_glGetActiveUniformBlockiv = epoxy_glGetActiveUniformBlockiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMNAMEPROC epoxy_glGetActiveUniformName = epoxy_glGetActiveUniformName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMSIVPROC epoxy_glGetActiveUniformsiv = epoxy_glGetActiveUniformsiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEVARYINGNVPROC epoxy_glGetActiveVaryingNV = epoxy_glGetActiveVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETARRAYOBJECTFVATIPROC epoxy_glGetArrayObjectfvATI = epoxy_glGetArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETARRAYOBJECTIVATIPROC epoxy_glGetArrayObjectivATI = epoxy_glGetArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETATTACHEDOBJECTSARBPROC epoxy_glGetAttachedObjectsARB = epoxy_glGetAttachedObjectsARB_global_rewrite_ptr; + +PUBLIC PFNGLGETATTACHEDSHADERSPROC epoxy_glGetAttachedShaders = epoxy_glGetAttachedShaders_global_rewrite_ptr; + +PUBLIC PFNGLGETATTRIBLOCATIONPROC epoxy_glGetAttribLocation = epoxy_glGetAttribLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETATTRIBLOCATIONARBPROC epoxy_glGetAttribLocationARB = epoxy_glGetAttribLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANINDEXEDVEXTPROC epoxy_glGetBooleanIndexedvEXT = epoxy_glGetBooleanIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANI_VPROC epoxy_glGetBooleani_v = epoxy_glGetBooleani_v_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANVPROC epoxy_glGetBooleanv = epoxy_glGetBooleanv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERI64VPROC epoxy_glGetBufferParameteri64v = epoxy_glGetBufferParameteri64v_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERIVPROC epoxy_glGetBufferParameteriv = epoxy_glGetBufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERIVARBPROC epoxy_glGetBufferParameterivARB = epoxy_glGetBufferParameterivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERUI64VNVPROC epoxy_glGetBufferParameterui64vNV = epoxy_glGetBufferParameterui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVPROC epoxy_glGetBufferPointerv = epoxy_glGetBufferPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVARBPROC epoxy_glGetBufferPointervARB = epoxy_glGetBufferPointervARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVOESPROC epoxy_glGetBufferPointervOES = epoxy_glGetBufferPointervOES_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERSUBDATAPROC epoxy_glGetBufferSubData = epoxy_glGetBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERSUBDATAARBPROC epoxy_glGetBufferSubDataARB = epoxy_glGetBufferSubDataARB_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEPROC epoxy_glGetClipPlane = epoxy_glGetClipPlane_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEFPROC epoxy_glGetClipPlanef = epoxy_glGetClipPlanef_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEFOESPROC epoxy_glGetClipPlanefOES = epoxy_glGetClipPlanefOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEXPROC epoxy_glGetClipPlanex = epoxy_glGetClipPlanex_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEXOESPROC epoxy_glGetClipPlanexOES = epoxy_glGetClipPlanexOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPROC epoxy_glGetColorTable = epoxy_glGetColorTable_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEEXTPROC epoxy_glGetColorTableEXT = epoxy_glGetColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVPROC epoxy_glGetColorTableParameterfv = epoxy_glGetColorTableParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVEXTPROC epoxy_glGetColorTableParameterfvEXT = epoxy_glGetColorTableParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVSGIPROC epoxy_glGetColorTableParameterfvSGI = epoxy_glGetColorTableParameterfvSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVPROC epoxy_glGetColorTableParameteriv = epoxy_glGetColorTableParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVEXTPROC epoxy_glGetColorTableParameterivEXT = epoxy_glGetColorTableParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVSGIPROC epoxy_glGetColorTableParameterivSGI = epoxy_glGetColorTableParameterivSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLESGIPROC epoxy_glGetColorTableSGI = epoxy_glGetColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetCombinerInputParameterfvNV = epoxy_glGetCombinerInputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetCombinerInputParameterivNV = epoxy_glGetCombinerInputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC epoxy_glGetCombinerOutputParameterfvNV = epoxy_glGetCombinerOutputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC epoxy_glGetCombinerOutputParameterivNV = epoxy_glGetCombinerOutputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glGetCombinerStageParameterfvNV = epoxy_glGetCombinerStageParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMMANDHEADERNVPROC epoxy_glGetCommandHeaderNV = epoxy_glGetCommandHeaderNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC epoxy_glGetCompressedMultiTexImageEXT = epoxy_glGetCompressedMultiTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXIMAGEPROC epoxy_glGetCompressedTexImage = epoxy_glGetCompressedTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetCompressedTexImageARB = epoxy_glGetCompressedTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC epoxy_glGetCompressedTextureImage = epoxy_glGetCompressedTextureImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC epoxy_glGetCompressedTextureImageEXT = epoxy_glGetCompressedTextureImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC epoxy_glGetCompressedTextureSubImage = epoxy_glGetCompressedTextureSubImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONFILTERPROC epoxy_glGetConvolutionFilter = epoxy_glGetConvolutionFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONFILTEREXTPROC epoxy_glGetConvolutionFilterEXT = epoxy_glGetConvolutionFilterEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERFVPROC epoxy_glGetConvolutionParameterfv = epoxy_glGetConvolutionParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC epoxy_glGetConvolutionParameterfvEXT = epoxy_glGetConvolutionParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERIVPROC epoxy_glGetConvolutionParameteriv = epoxy_glGetConvolutionParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC epoxy_glGetConvolutionParameterivEXT = epoxy_glGetConvolutionParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERXVOESPROC epoxy_glGetConvolutionParameterxvOES = epoxy_glGetConvolutionParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCOVERAGEMODULATIONTABLENVPROC epoxy_glGetCoverageModulationTableNV = epoxy_glGetCoverageModulationTableNV_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGPROC epoxy_glGetDebugMessageLog = epoxy_glGetDebugMessageLog_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGAMDPROC epoxy_glGetDebugMessageLogAMD = epoxy_glGetDebugMessageLogAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGARBPROC epoxy_glGetDebugMessageLogARB = epoxy_glGetDebugMessageLogARB_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGKHRPROC epoxy_glGetDebugMessageLogKHR = epoxy_glGetDebugMessageLogKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETDETAILTEXFUNCSGISPROC epoxy_glGetDetailTexFuncSGIS = epoxy_glGetDetailTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEINDEXEDVEXTPROC epoxy_glGetDoubleIndexedvEXT = epoxy_glGetDoubleIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEI_VPROC epoxy_glGetDoublei_v = epoxy_glGetDoublei_v_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEI_VEXTPROC epoxy_glGetDoublei_vEXT = epoxy_glGetDoublei_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEVPROC epoxy_glGetDoublev = epoxy_glGetDoublev_global_rewrite_ptr; + +PUBLIC PFNGLGETDRIVERCONTROLSTRINGQCOMPROC epoxy_glGetDriverControlStringQCOM = epoxy_glGetDriverControlStringQCOM_global_rewrite_ptr; + +PUBLIC PFNGLGETDRIVERCONTROLSQCOMPROC epoxy_glGetDriverControlsQCOM = epoxy_glGetDriverControlsQCOM_global_rewrite_ptr; + +PUBLIC PFNGLGETERRORPROC epoxy_glGetError = epoxy_glGetError_global_rewrite_ptr; + +PUBLIC PFNGLGETFENCEIVNVPROC epoxy_glGetFenceivNV = epoxy_glGetFenceivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetFinalCombinerInputParameterfvNV = epoxy_glGetFinalCombinerInputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetFinalCombinerInputParameterivNV = epoxy_glGetFinalCombinerInputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFIRSTPERFQUERYIDINTELPROC epoxy_glGetFirstPerfQueryIdINTEL = epoxy_glGetFirstPerfQueryIdINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETFIXEDVPROC epoxy_glGetFixedv = epoxy_glGetFixedv_global_rewrite_ptr; + +PUBLIC PFNGLGETFIXEDVOESPROC epoxy_glGetFixedvOES = epoxy_glGetFixedvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATINDEXEDVEXTPROC epoxy_glGetFloatIndexedvEXT = epoxy_glGetFloatIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VPROC epoxy_glGetFloati_v = epoxy_glGetFloati_v_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VEXTPROC epoxy_glGetFloati_vEXT = epoxy_glGetFloati_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VNVPROC epoxy_glGetFloati_vNV = epoxy_glGetFloati_vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATVPROC epoxy_glGetFloatv = epoxy_glGetFloatv_global_rewrite_ptr; + +PUBLIC PFNGLGETFOGFUNCSGISPROC epoxy_glGetFogFuncSGIS = epoxy_glGetFogFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATAINDEXPROC epoxy_glGetFragDataIndex = epoxy_glGetFragDataIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATAINDEXEXTPROC epoxy_glGetFragDataIndexEXT = epoxy_glGetFragDataIndexEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATALOCATIONPROC epoxy_glGetFragDataLocation = epoxy_glGetFragDataLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATALOCATIONEXTPROC epoxy_glGetFragDataLocationEXT = epoxy_glGetFragDataLocationEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTLIGHTFVSGIXPROC epoxy_glGetFragmentLightfvSGIX = epoxy_glGetFragmentLightfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTLIGHTIVSGIXPROC epoxy_glGetFragmentLightivSGIX = epoxy_glGetFragmentLightivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTMATERIALFVSGIXPROC epoxy_glGetFragmentMaterialfvSGIX = epoxy_glGetFragmentMaterialfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTMATERIALIVSGIXPROC epoxy_glGetFragmentMaterialivSGIX = epoxy_glGetFragmentMaterialivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetFramebufferAttachmentParameteriv = epoxy_glGetFramebufferAttachmentParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetFramebufferAttachmentParameterivEXT = epoxy_glGetFramebufferAttachmentParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC epoxy_glGetFramebufferAttachmentParameterivOES = epoxy_glGetFramebufferAttachmentParameterivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERPARAMETERIVPROC epoxy_glGetFramebufferParameteriv = epoxy_glGetFramebufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetFramebufferParameterivEXT = epoxy_glGetFramebufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSPROC epoxy_glGetGraphicsResetStatus = epoxy_glGetGraphicsResetStatus_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSARBPROC epoxy_glGetGraphicsResetStatusARB = epoxy_glGetGraphicsResetStatusARB_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSEXTPROC epoxy_glGetGraphicsResetStatusEXT = epoxy_glGetGraphicsResetStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSKHRPROC epoxy_glGetGraphicsResetStatusKHR = epoxy_glGetGraphicsResetStatusKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETHANDLEARBPROC epoxy_glGetHandleARB = epoxy_glGetHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPROC epoxy_glGetHistogram = epoxy_glGetHistogram_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMEXTPROC epoxy_glGetHistogramEXT = epoxy_glGetHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERFVPROC epoxy_glGetHistogramParameterfv = epoxy_glGetHistogramParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERFVEXTPROC epoxy_glGetHistogramParameterfvEXT = epoxy_glGetHistogramParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERIVPROC epoxy_glGetHistogramParameteriv = epoxy_glGetHistogramParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERIVEXTPROC epoxy_glGetHistogramParameterivEXT = epoxy_glGetHistogramParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERXVOESPROC epoxy_glGetHistogramParameterxvOES = epoxy_glGetHistogramParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGEHANDLEARBPROC epoxy_glGetImageHandleARB = epoxy_glGetImageHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGEHANDLENVPROC epoxy_glGetImageHandleNV = epoxy_glGetImageHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glGetImageTransformParameterfvHP = epoxy_glGetImageTransformParameterfvHP_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glGetImageTransformParameterivHP = epoxy_glGetImageTransformParameterivHP_global_rewrite_ptr; + +PUBLIC PFNGLGETINFOLOGARBPROC epoxy_glGetInfoLogARB = epoxy_glGetInfoLogARB_global_rewrite_ptr; + +PUBLIC PFNGLGETINSTRUMENTSSGIXPROC epoxy_glGetInstrumentsSGIX = epoxy_glGetInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64I_VPROC epoxy_glGetInteger64i_v = epoxy_glGetInteger64i_v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64VPROC epoxy_glGetInteger64v = epoxy_glGetInteger64v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64VAPPLEPROC epoxy_glGetInteger64vAPPLE = epoxy_glGetInteger64vAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERINDEXEDVEXTPROC epoxy_glGetIntegerIndexedvEXT = epoxy_glGetIntegerIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERI_VPROC epoxy_glGetIntegeri_v = epoxy_glGetIntegeri_v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERI_VEXTPROC epoxy_glGetIntegeri_vEXT = epoxy_glGetIntegeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERUI64I_VNVPROC epoxy_glGetIntegerui64i_vNV = epoxy_glGetIntegerui64i_vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERUI64VNVPROC epoxy_glGetIntegerui64vNV = epoxy_glGetIntegerui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERVPROC epoxy_glGetIntegerv = epoxy_glGetIntegerv_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATSAMPLEIVNVPROC epoxy_glGetInternalformatSampleivNV = epoxy_glGetInternalformatSampleivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATI64VPROC epoxy_glGetInternalformati64v = epoxy_glGetInternalformati64v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATIVPROC epoxy_glGetInternalformativ = epoxy_glGetInternalformativ_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTBOOLEANVEXTPROC epoxy_glGetInvariantBooleanvEXT = epoxy_glGetInvariantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTFLOATVEXTPROC epoxy_glGetInvariantFloatvEXT = epoxy_glGetInvariantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTINTEGERVEXTPROC epoxy_glGetInvariantIntegervEXT = epoxy_glGetInvariantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTFVPROC epoxy_glGetLightfv = epoxy_glGetLightfv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTIVPROC epoxy_glGetLightiv = epoxy_glGetLightiv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXOESPROC epoxy_glGetLightxOES = epoxy_glGetLightxOES_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXVPROC epoxy_glGetLightxv = epoxy_glGetLightxv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXVOESPROC epoxy_glGetLightxvOES = epoxy_glGetLightxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETLISTPARAMETERFVSGIXPROC epoxy_glGetListParameterfvSGIX = epoxy_glGetListParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETLISTPARAMETERIVSGIXPROC epoxy_glGetListParameterivSGIX = epoxy_glGetListParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC epoxy_glGetLocalConstantBooleanvEXT = epoxy_glGetLocalConstantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTFLOATVEXTPROC epoxy_glGetLocalConstantFloatvEXT = epoxy_glGetLocalConstantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTINTEGERVEXTPROC epoxy_glGetLocalConstantIntegervEXT = epoxy_glGetLocalConstantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPATTRIBPARAMETERFVNVPROC epoxy_glGetMapAttribParameterfvNV = epoxy_glGetMapAttribParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPATTRIBPARAMETERIVNVPROC epoxy_glGetMapAttribParameterivNV = epoxy_glGetMapAttribParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPCONTROLPOINTSNVPROC epoxy_glGetMapControlPointsNV = epoxy_glGetMapControlPointsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPPARAMETERFVNVPROC epoxy_glGetMapParameterfvNV = epoxy_glGetMapParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPPARAMETERIVNVPROC epoxy_glGetMapParameterivNV = epoxy_glGetMapParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPDVPROC epoxy_glGetMapdv = epoxy_glGetMapdv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPFVPROC epoxy_glGetMapfv = epoxy_glGetMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPIVPROC epoxy_glGetMapiv = epoxy_glGetMapiv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPXVOESPROC epoxy_glGetMapxvOES = epoxy_glGetMapxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALFVPROC epoxy_glGetMaterialfv = epoxy_glGetMaterialfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALIVPROC epoxy_glGetMaterialiv = epoxy_glGetMaterialiv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXOESPROC epoxy_glGetMaterialxOES = epoxy_glGetMaterialxOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXVPROC epoxy_glGetMaterialxv = epoxy_glGetMaterialxv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXVOESPROC epoxy_glGetMaterialxvOES = epoxy_glGetMaterialxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPROC epoxy_glGetMinmax = epoxy_glGetMinmax_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXEXTPROC epoxy_glGetMinmaxEXT = epoxy_glGetMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERFVPROC epoxy_glGetMinmaxParameterfv = epoxy_glGetMinmaxParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERFVEXTPROC epoxy_glGetMinmaxParameterfvEXT = epoxy_glGetMinmaxParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERIVPROC epoxy_glGetMinmaxParameteriv = epoxy_glGetMinmaxParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERIVEXTPROC epoxy_glGetMinmaxParameterivEXT = epoxy_glGetMinmaxParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXENVFVEXTPROC epoxy_glGetMultiTexEnvfvEXT = epoxy_glGetMultiTexEnvfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXENVIVEXTPROC epoxy_glGetMultiTexEnvivEXT = epoxy_glGetMultiTexEnvivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENDVEXTPROC epoxy_glGetMultiTexGendvEXT = epoxy_glGetMultiTexGendvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENFVEXTPROC epoxy_glGetMultiTexGenfvEXT = epoxy_glGetMultiTexGenfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENIVEXTPROC epoxy_glGetMultiTexGenivEXT = epoxy_glGetMultiTexGenivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXIMAGEEXTPROC epoxy_glGetMultiTexImageEXT = epoxy_glGetMultiTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC epoxy_glGetMultiTexLevelParameterfvEXT = epoxy_glGetMultiTexLevelParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC epoxy_glGetMultiTexLevelParameterivEXT = epoxy_glGetMultiTexLevelParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIIVEXTPROC epoxy_glGetMultiTexParameterIivEXT = epoxy_glGetMultiTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIUIVEXTPROC epoxy_glGetMultiTexParameterIuivEXT = epoxy_glGetMultiTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERFVEXTPROC epoxy_glGetMultiTexParameterfvEXT = epoxy_glGetMultiTexParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIVEXTPROC epoxy_glGetMultiTexParameterivEXT = epoxy_glGetMultiTexParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTISAMPLEFVPROC epoxy_glGetMultisamplefv = epoxy_glGetMultisamplefv_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTISAMPLEFVNVPROC epoxy_glGetMultisamplefvNV = epoxy_glGetMultisamplefvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERI64VPROC epoxy_glGetNamedBufferParameteri64v = epoxy_glGetNamedBufferParameteri64v_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERIVPROC epoxy_glGetNamedBufferParameteriv = epoxy_glGetNamedBufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedBufferParameterivEXT = epoxy_glGetNamedBufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC epoxy_glGetNamedBufferParameterui64vNV = epoxy_glGetNamedBufferParameterui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPOINTERVPROC epoxy_glGetNamedBufferPointerv = epoxy_glGetNamedBufferPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPOINTERVEXTPROC epoxy_glGetNamedBufferPointervEXT = epoxy_glGetNamedBufferPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERSUBDATAPROC epoxy_glGetNamedBufferSubData = epoxy_glGetNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERSUBDATAEXTPROC epoxy_glGetNamedBufferSubDataEXT = epoxy_glGetNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetNamedFramebufferAttachmentParameteriv = epoxy_glGetNamedFramebufferAttachmentParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferAttachmentParameterivEXT = epoxy_glGetNamedFramebufferAttachmentParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC epoxy_glGetNamedFramebufferParameteriv = epoxy_glGetNamedFramebufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferParameterivEXT = epoxy_glGetNamedFramebufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC epoxy_glGetNamedProgramLocalParameterIivEXT = epoxy_glGetNamedProgramLocalParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC epoxy_glGetNamedProgramLocalParameterIuivEXT = epoxy_glGetNamedProgramLocalParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC epoxy_glGetNamedProgramLocalParameterdvEXT = epoxy_glGetNamedProgramLocalParameterdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC epoxy_glGetNamedProgramLocalParameterfvEXT = epoxy_glGetNamedProgramLocalParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMSTRINGEXTPROC epoxy_glGetNamedProgramStringEXT = epoxy_glGetNamedProgramStringEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMIVEXTPROC epoxy_glGetNamedProgramivEXT = epoxy_glGetNamedProgramivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC epoxy_glGetNamedRenderbufferParameteriv = epoxy_glGetNamedRenderbufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedRenderbufferParameterivEXT = epoxy_glGetNamedRenderbufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDSTRINGARBPROC epoxy_glGetNamedStringARB = epoxy_glGetNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDSTRINGIVARBPROC epoxy_glGetNamedStringivARB = epoxy_glGetNamedStringivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNEXTPERFQUERYIDINTELPROC epoxy_glGetNextPerfQueryIdINTEL = epoxy_glGetNextPerfQueryIdINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTBUFFERFVATIPROC epoxy_glGetObjectBufferfvATI = epoxy_glGetObjectBufferfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTBUFFERIVATIPROC epoxy_glGetObjectBufferivATI = epoxy_glGetObjectBufferivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELPROC epoxy_glGetObjectLabel = epoxy_glGetObjectLabel_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELEXTPROC epoxy_glGetObjectLabelEXT = epoxy_glGetObjectLabelEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELKHRPROC epoxy_glGetObjectLabelKHR = epoxy_glGetObjectLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERFVARBPROC epoxy_glGetObjectParameterfvARB = epoxy_glGetObjectParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERIVAPPLEPROC epoxy_glGetObjectParameterivAPPLE = epoxy_glGetObjectParameterivAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERIVARBPROC epoxy_glGetObjectParameterivARB = epoxy_glGetObjectParameterivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPTRLABELPROC epoxy_glGetObjectPtrLabel = epoxy_glGetObjectPtrLabel_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPTRLABELKHRPROC epoxy_glGetObjectPtrLabelKHR = epoxy_glGetObjectPtrLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETOCCLUSIONQUERYIVNVPROC epoxy_glGetOcclusionQueryivNV = epoxy_glGetOcclusionQueryivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETOCCLUSIONQUERYUIVNVPROC epoxy_glGetOcclusionQueryuivNV = epoxy_glGetOcclusionQueryuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOLORGENFVNVPROC epoxy_glGetPathColorGenfvNV = epoxy_glGetPathColorGenfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOLORGENIVNVPROC epoxy_glGetPathColorGenivNV = epoxy_glGetPathColorGenivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOMMANDSNVPROC epoxy_glGetPathCommandsNV = epoxy_glGetPathCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOORDSNVPROC epoxy_glGetPathCoordsNV = epoxy_glGetPathCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHDASHARRAYNVPROC epoxy_glGetPathDashArrayNV = epoxy_glGetPathDashArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHLENGTHNVPROC epoxy_glGetPathLengthNV = epoxy_glGetPathLengthNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHMETRICRANGENVPROC epoxy_glGetPathMetricRangeNV = epoxy_glGetPathMetricRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHMETRICSNVPROC epoxy_glGetPathMetricsNV = epoxy_glGetPathMetricsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHPARAMETERFVNVPROC epoxy_glGetPathParameterfvNV = epoxy_glGetPathParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHPARAMETERIVNVPROC epoxy_glGetPathParameterivNV = epoxy_glGetPathParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHSPACINGNVPROC epoxy_glGetPathSpacingNV = epoxy_glGetPathSpacingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHTEXGENFVNVPROC epoxy_glGetPathTexGenfvNV = epoxy_glGetPathTexGenfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHTEXGENIVNVPROC epoxy_glGetPathTexGenivNV = epoxy_glGetPathTexGenivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFCOUNTERINFOINTELPROC epoxy_glGetPerfCounterInfoINTEL = epoxy_glGetPerfCounterInfoINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERDATAAMDPROC epoxy_glGetPerfMonitorCounterDataAMD = epoxy_glGetPerfMonitorCounterDataAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERINFOAMDPROC epoxy_glGetPerfMonitorCounterInfoAMD = epoxy_glGetPerfMonitorCounterInfoAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC epoxy_glGetPerfMonitorCounterStringAMD = epoxy_glGetPerfMonitorCounterStringAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERSAMDPROC epoxy_glGetPerfMonitorCountersAMD = epoxy_glGetPerfMonitorCountersAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORGROUPSTRINGAMDPROC epoxy_glGetPerfMonitorGroupStringAMD = epoxy_glGetPerfMonitorGroupStringAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORGROUPSAMDPROC epoxy_glGetPerfMonitorGroupsAMD = epoxy_glGetPerfMonitorGroupsAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYDATAINTELPROC epoxy_glGetPerfQueryDataINTEL = epoxy_glGetPerfQueryDataINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYIDBYNAMEINTELPROC epoxy_glGetPerfQueryIdByNameINTEL = epoxy_glGetPerfQueryIdByNameINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYINFOINTELPROC epoxy_glGetPerfQueryInfoINTEL = epoxy_glGetPerfQueryInfoINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPFVPROC epoxy_glGetPixelMapfv = epoxy_glGetPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPUIVPROC epoxy_glGetPixelMapuiv = epoxy_glGetPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPUSVPROC epoxy_glGetPixelMapusv = epoxy_glGetPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPXVPROC epoxy_glGetPixelMapxv = epoxy_glGetPixelMapxv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC epoxy_glGetPixelTexGenParameterfvSGIS = epoxy_glGetPixelTexGenParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC epoxy_glGetPixelTexGenParameterivSGIS = epoxy_glGetPixelTexGenParameterivSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glGetPixelTransformParameterfvEXT = epoxy_glGetPixelTransformParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glGetPixelTransformParameterivEXT = epoxy_glGetPixelTransformParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERINDEXEDVEXTPROC epoxy_glGetPointerIndexedvEXT = epoxy_glGetPointerIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERI_VEXTPROC epoxy_glGetPointeri_vEXT = epoxy_glGetPointeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVPROC epoxy_glGetPointerv = epoxy_glGetPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVEXTPROC epoxy_glGetPointervEXT = epoxy_glGetPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVKHRPROC epoxy_glGetPointervKHR = epoxy_glGetPointervKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETPOLYGONSTIPPLEPROC epoxy_glGetPolygonStipple = epoxy_glGetPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMBINARYPROC epoxy_glGetProgramBinary = epoxy_glGetProgramBinary_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMBINARYOESPROC epoxy_glGetProgramBinaryOES = epoxy_glGetProgramBinaryOES_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERIIVNVPROC epoxy_glGetProgramEnvParameterIivNV = epoxy_glGetProgramEnvParameterIivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC epoxy_glGetProgramEnvParameterIuivNV = epoxy_glGetProgramEnvParameterIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERDVARBPROC epoxy_glGetProgramEnvParameterdvARB = epoxy_glGetProgramEnvParameterdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERFVARBPROC epoxy_glGetProgramEnvParameterfvARB = epoxy_glGetProgramEnvParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMINFOLOGPROC epoxy_glGetProgramInfoLog = epoxy_glGetProgramInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMINTERFACEIVPROC epoxy_glGetProgramInterfaceiv = epoxy_glGetProgramInterfaceiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC epoxy_glGetProgramLocalParameterIivNV = epoxy_glGetProgramLocalParameterIivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC epoxy_glGetProgramLocalParameterIuivNV = epoxy_glGetProgramLocalParameterIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC epoxy_glGetProgramLocalParameterdvARB = epoxy_glGetProgramLocalParameterdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC epoxy_glGetProgramLocalParameterfvARB = epoxy_glGetProgramLocalParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC epoxy_glGetProgramNamedParameterdvNV = epoxy_glGetProgramNamedParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC epoxy_glGetProgramNamedParameterfvNV = epoxy_glGetProgramNamedParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPARAMETERDVNVPROC epoxy_glGetProgramParameterdvNV = epoxy_glGetProgramParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPARAMETERFVNVPROC epoxy_glGetProgramParameterfvNV = epoxy_glGetProgramParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEINFOLOGPROC epoxy_glGetProgramPipelineInfoLog = epoxy_glGetProgramPipelineInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC epoxy_glGetProgramPipelineInfoLogEXT = epoxy_glGetProgramPipelineInfoLogEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEIVPROC epoxy_glGetProgramPipelineiv = epoxy_glGetProgramPipelineiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEIVEXTPROC epoxy_glGetProgramPipelineivEXT = epoxy_glGetProgramPipelineivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEINDEXPROC epoxy_glGetProgramResourceIndex = epoxy_glGetProgramResourceIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONPROC epoxy_glGetProgramResourceLocation = epoxy_glGetProgramResourceLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC epoxy_glGetProgramResourceLocationIndex = epoxy_glGetProgramResourceLocationIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC epoxy_glGetProgramResourceLocationIndexEXT = epoxy_glGetProgramResourceLocationIndexEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCENAMEPROC epoxy_glGetProgramResourceName = epoxy_glGetProgramResourceName_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEFVNVPROC epoxy_glGetProgramResourcefvNV = epoxy_glGetProgramResourcefvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEIVPROC epoxy_glGetProgramResourceiv = epoxy_glGetProgramResourceiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTAGEIVPROC epoxy_glGetProgramStageiv = epoxy_glGetProgramStageiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTRINGARBPROC epoxy_glGetProgramStringARB = epoxy_glGetProgramStringARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTRINGNVPROC epoxy_glGetProgramStringNV = epoxy_glGetProgramStringNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC epoxy_glGetProgramSubroutineParameteruivNV = epoxy_glGetProgramSubroutineParameteruivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVPROC epoxy_glGetProgramiv = epoxy_glGetProgramiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVARBPROC epoxy_glGetProgramivARB = epoxy_glGetProgramivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVNVPROC epoxy_glGetProgramivNV = epoxy_glGetProgramivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTI64VPROC epoxy_glGetQueryBufferObjecti64v = epoxy_glGetQueryBufferObjecti64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTIVPROC epoxy_glGetQueryBufferObjectiv = epoxy_glGetQueryBufferObjectiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTUI64VPROC epoxy_glGetQueryBufferObjectui64v = epoxy_glGetQueryBufferObjectui64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTUIVPROC epoxy_glGetQueryBufferObjectuiv = epoxy_glGetQueryBufferObjectuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYINDEXEDIVPROC epoxy_glGetQueryIndexediv = epoxy_glGetQueryIndexediv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTI64VPROC epoxy_glGetQueryObjecti64v = epoxy_glGetQueryObjecti64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTI64VEXTPROC epoxy_glGetQueryObjecti64vEXT = epoxy_glGetQueryObjecti64vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVPROC epoxy_glGetQueryObjectiv = epoxy_glGetQueryObjectiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVARBPROC epoxy_glGetQueryObjectivARB = epoxy_glGetQueryObjectivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVEXTPROC epoxy_glGetQueryObjectivEXT = epoxy_glGetQueryObjectivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUI64VPROC epoxy_glGetQueryObjectui64v = epoxy_glGetQueryObjectui64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUI64VEXTPROC epoxy_glGetQueryObjectui64vEXT = epoxy_glGetQueryObjectui64vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVPROC epoxy_glGetQueryObjectuiv = epoxy_glGetQueryObjectuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVARBPROC epoxy_glGetQueryObjectuivARB = epoxy_glGetQueryObjectuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVEXTPROC epoxy_glGetQueryObjectuivEXT = epoxy_glGetQueryObjectuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVPROC epoxy_glGetQueryiv = epoxy_glGetQueryiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVARBPROC epoxy_glGetQueryivARB = epoxy_glGetQueryivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVEXTPROC epoxy_glGetQueryivEXT = epoxy_glGetQueryivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVPROC epoxy_glGetRenderbufferParameteriv = epoxy_glGetRenderbufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetRenderbufferParameterivEXT = epoxy_glGetRenderbufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVOESPROC epoxy_glGetRenderbufferParameterivOES = epoxy_glGetRenderbufferParameterivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVPROC epoxy_glGetSamplerParameterIiv = epoxy_glGetSamplerParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVEXTPROC epoxy_glGetSamplerParameterIivEXT = epoxy_glGetSamplerParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVOESPROC epoxy_glGetSamplerParameterIivOES = epoxy_glGetSamplerParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVPROC epoxy_glGetSamplerParameterIuiv = epoxy_glGetSamplerParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVEXTPROC epoxy_glGetSamplerParameterIuivEXT = epoxy_glGetSamplerParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVOESPROC epoxy_glGetSamplerParameterIuivOES = epoxy_glGetSamplerParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERFVPROC epoxy_glGetSamplerParameterfv = epoxy_glGetSamplerParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIVPROC epoxy_glGetSamplerParameteriv = epoxy_glGetSamplerParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETSEPARABLEFILTERPROC epoxy_glGetSeparableFilter = epoxy_glGetSeparableFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETSEPARABLEFILTEREXTPROC epoxy_glGetSeparableFilterEXT = epoxy_glGetSeparableFilterEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERINFOLOGPROC epoxy_glGetShaderInfoLog = epoxy_glGetShaderInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERPRECISIONFORMATPROC epoxy_glGetShaderPrecisionFormat = epoxy_glGetShaderPrecisionFormat_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERSOURCEPROC epoxy_glGetShaderSource = epoxy_glGetShaderSource_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERSOURCEARBPROC epoxy_glGetShaderSourceARB = epoxy_glGetShaderSourceARB_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERIVPROC epoxy_glGetShaderiv = epoxy_glGetShaderiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSHARPENTEXFUNCSGISPROC epoxy_glGetSharpenTexFuncSGIS = epoxy_glGetSharpenTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETSTAGEINDEXNVPROC epoxy_glGetStageIndexNV = epoxy_glGetStageIndexNV_global_rewrite_ptr; + +PUBLIC PFNGLGETSTRINGPROC epoxy_glGetString = epoxy_glGetString_global_rewrite_ptr; + +PUBLIC PFNGLGETSTRINGIPROC epoxy_glGetStringi = epoxy_glGetStringi_global_rewrite_ptr; + +PUBLIC PFNGLGETSUBROUTINEINDEXPROC epoxy_glGetSubroutineIndex = epoxy_glGetSubroutineIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC epoxy_glGetSubroutineUniformLocation = epoxy_glGetSubroutineUniformLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETSYNCIVPROC epoxy_glGetSynciv = epoxy_glGetSynciv_global_rewrite_ptr; + +PUBLIC PFNGLGETSYNCIVAPPLEPROC epoxy_glGetSyncivAPPLE = epoxy_glGetSyncivAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXBUMPPARAMETERFVATIPROC epoxy_glGetTexBumpParameterfvATI = epoxy_glGetTexBumpParameterfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXBUMPPARAMETERIVATIPROC epoxy_glGetTexBumpParameterivATI = epoxy_glGetTexBumpParameterivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVFVPROC epoxy_glGetTexEnvfv = epoxy_glGetTexEnvfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVIVPROC epoxy_glGetTexEnviv = epoxy_glGetTexEnviv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVXVPROC epoxy_glGetTexEnvxv = epoxy_glGetTexEnvxv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVXVOESPROC epoxy_glGetTexEnvxvOES = epoxy_glGetTexEnvxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXFILTERFUNCSGISPROC epoxy_glGetTexFilterFuncSGIS = epoxy_glGetTexFilterFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENDVPROC epoxy_glGetTexGendv = epoxy_glGetTexGendv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENFVPROC epoxy_glGetTexGenfv = epoxy_glGetTexGenfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENFVOESPROC epoxy_glGetTexGenfvOES = epoxy_glGetTexGenfvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENIVPROC epoxy_glGetTexGeniv = epoxy_glGetTexGeniv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENIVOESPROC epoxy_glGetTexGenivOES = epoxy_glGetTexGenivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENXVOESPROC epoxy_glGetTexGenxvOES = epoxy_glGetTexGenxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXIMAGEPROC epoxy_glGetTexImage = epoxy_glGetTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERFVPROC epoxy_glGetTexLevelParameterfv = epoxy_glGetTexLevelParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERIVPROC epoxy_glGetTexLevelParameteriv = epoxy_glGetTexLevelParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERXVOESPROC epoxy_glGetTexLevelParameterxvOES = epoxy_glGetTexLevelParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVPROC epoxy_glGetTexParameterIiv = epoxy_glGetTexParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVEXTPROC epoxy_glGetTexParameterIivEXT = epoxy_glGetTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVOESPROC epoxy_glGetTexParameterIivOES = epoxy_glGetTexParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVPROC epoxy_glGetTexParameterIuiv = epoxy_glGetTexParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVEXTPROC epoxy_glGetTexParameterIuivEXT = epoxy_glGetTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVOESPROC epoxy_glGetTexParameterIuivOES = epoxy_glGetTexParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC epoxy_glGetTexParameterPointervAPPLE = epoxy_glGetTexParameterPointervAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERFVPROC epoxy_glGetTexParameterfv = epoxy_glGetTexParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIVPROC epoxy_glGetTexParameteriv = epoxy_glGetTexParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERXVPROC epoxy_glGetTexParameterxv = epoxy_glGetTexParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERXVOESPROC epoxy_glGetTexParameterxvOES = epoxy_glGetTexParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREHANDLEARBPROC epoxy_glGetTextureHandleARB = epoxy_glGetTextureHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREHANDLENVPROC epoxy_glGetTextureHandleNV = epoxy_glGetTextureHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREIMAGEPROC epoxy_glGetTextureImage = epoxy_glGetTextureImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREIMAGEEXTPROC epoxy_glGetTextureImageEXT = epoxy_glGetTextureImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERFVPROC epoxy_glGetTextureLevelParameterfv = epoxy_glGetTextureLevelParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC epoxy_glGetTextureLevelParameterfvEXT = epoxy_glGetTextureLevelParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERIVPROC epoxy_glGetTextureLevelParameteriv = epoxy_glGetTextureLevelParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC epoxy_glGetTextureLevelParameterivEXT = epoxy_glGetTextureLevelParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIIVPROC epoxy_glGetTextureParameterIiv = epoxy_glGetTextureParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIIVEXTPROC epoxy_glGetTextureParameterIivEXT = epoxy_glGetTextureParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIUIVPROC epoxy_glGetTextureParameterIuiv = epoxy_glGetTextureParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIUIVEXTPROC epoxy_glGetTextureParameterIuivEXT = epoxy_glGetTextureParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERFVPROC epoxy_glGetTextureParameterfv = epoxy_glGetTextureParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERFVEXTPROC epoxy_glGetTextureParameterfvEXT = epoxy_glGetTextureParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIVPROC epoxy_glGetTextureParameteriv = epoxy_glGetTextureParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIVEXTPROC epoxy_glGetTextureParameterivEXT = epoxy_glGetTextureParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESAMPLERHANDLEARBPROC epoxy_glGetTextureSamplerHandleARB = epoxy_glGetTextureSamplerHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESAMPLERHANDLENVPROC epoxy_glGetTextureSamplerHandleNV = epoxy_glGetTextureSamplerHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESUBIMAGEPROC epoxy_glGetTextureSubImage = epoxy_glGetTextureSubImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTRACKMATRIXIVNVPROC epoxy_glGetTrackMatrixivNV = epoxy_glGetTrackMatrixivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGPROC epoxy_glGetTransformFeedbackVarying = epoxy_glGetTransformFeedbackVarying_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC epoxy_glGetTransformFeedbackVaryingEXT = epoxy_glGetTransformFeedbackVaryingEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC epoxy_glGetTransformFeedbackVaryingNV = epoxy_glGetTransformFeedbackVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKI64_VPROC epoxy_glGetTransformFeedbacki64_v = epoxy_glGetTransformFeedbacki64_v_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKI_VPROC epoxy_glGetTransformFeedbacki_v = epoxy_glGetTransformFeedbacki_v_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKIVPROC epoxy_glGetTransformFeedbackiv = epoxy_glGetTransformFeedbackiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC epoxy_glGetTranslatedShaderSourceANGLE = epoxy_glGetTranslatedShaderSourceANGLE_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMBLOCKINDEXPROC epoxy_glGetUniformBlockIndex = epoxy_glGetUniformBlockIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMBUFFERSIZEEXTPROC epoxy_glGetUniformBufferSizeEXT = epoxy_glGetUniformBufferSizeEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMINDICESPROC epoxy_glGetUniformIndices = epoxy_glGetUniformIndices_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMLOCATIONPROC epoxy_glGetUniformLocation = epoxy_glGetUniformLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMLOCATIONARBPROC epoxy_glGetUniformLocationARB = epoxy_glGetUniformLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMOFFSETEXTPROC epoxy_glGetUniformOffsetEXT = epoxy_glGetUniformOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMSUBROUTINEUIVPROC epoxy_glGetUniformSubroutineuiv = epoxy_glGetUniformSubroutineuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMDVPROC epoxy_glGetUniformdv = epoxy_glGetUniformdv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMFVPROC epoxy_glGetUniformfv = epoxy_glGetUniformfv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMFVARBPROC epoxy_glGetUniformfvARB = epoxy_glGetUniformfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMI64VARBPROC epoxy_glGetUniformi64vARB = epoxy_glGetUniformi64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMI64VNVPROC epoxy_glGetUniformi64vNV = epoxy_glGetUniformi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMIVPROC epoxy_glGetUniformiv = epoxy_glGetUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMIVARBPROC epoxy_glGetUniformivARB = epoxy_glGetUniformivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUI64VARBPROC epoxy_glGetUniformui64vARB = epoxy_glGetUniformui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUI64VNVPROC epoxy_glGetUniformui64vNV = epoxy_glGetUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUIVPROC epoxy_glGetUniformuiv = epoxy_glGetUniformuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUIVEXTPROC epoxy_glGetUniformuivEXT = epoxy_glGetUniformuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTARRAYOBJECTFVATIPROC epoxy_glGetVariantArrayObjectfvATI = epoxy_glGetVariantArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTARRAYOBJECTIVATIPROC epoxy_glGetVariantArrayObjectivATI = epoxy_glGetVariantArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTBOOLEANVEXTPROC epoxy_glGetVariantBooleanvEXT = epoxy_glGetVariantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTFLOATVEXTPROC epoxy_glGetVariantFloatvEXT = epoxy_glGetVariantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTINTEGERVEXTPROC epoxy_glGetVariantIntegervEXT = epoxy_glGetVariantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTPOINTERVEXTPROC epoxy_glGetVariantPointervEXT = epoxy_glGetVariantPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARYINGLOCATIONNVPROC epoxy_glGetVaryingLocationNV = epoxy_glGetVaryingLocationNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINDEXED64IVPROC epoxy_glGetVertexArrayIndexed64iv = epoxy_glGetVertexArrayIndexed64iv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINDEXEDIVPROC epoxy_glGetVertexArrayIndexediv = epoxy_glGetVertexArrayIndexediv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC epoxy_glGetVertexArrayIntegeri_vEXT = epoxy_glGetVertexArrayIntegeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINTEGERVEXTPROC epoxy_glGetVertexArrayIntegervEXT = epoxy_glGetVertexArrayIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC epoxy_glGetVertexArrayPointeri_vEXT = epoxy_glGetVertexArrayPointeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYPOINTERVEXTPROC epoxy_glGetVertexArrayPointervEXT = epoxy_glGetVertexArrayPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYIVPROC epoxy_glGetVertexArrayiv = epoxy_glGetVertexArrayiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC epoxy_glGetVertexAttribArrayObjectfvATI = epoxy_glGetVertexAttribArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC epoxy_glGetVertexAttribArrayObjectivATI = epoxy_glGetVertexAttribArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIIVPROC epoxy_glGetVertexAttribIiv = epoxy_glGetVertexAttribIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIIVEXTPROC epoxy_glGetVertexAttribIivEXT = epoxy_glGetVertexAttribIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIUIVPROC epoxy_glGetVertexAttribIuiv = epoxy_glGetVertexAttribIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIUIVEXTPROC epoxy_glGetVertexAttribIuivEXT = epoxy_glGetVertexAttribIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLDVPROC epoxy_glGetVertexAttribLdv = epoxy_glGetVertexAttribLdv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLDVEXTPROC epoxy_glGetVertexAttribLdvEXT = epoxy_glGetVertexAttribLdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLI64VNVPROC epoxy_glGetVertexAttribLi64vNV = epoxy_glGetVertexAttribLi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLUI64VARBPROC epoxy_glGetVertexAttribLui64vARB = epoxy_glGetVertexAttribLui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLUI64VNVPROC epoxy_glGetVertexAttribLui64vNV = epoxy_glGetVertexAttribLui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVPROC epoxy_glGetVertexAttribPointerv = epoxy_glGetVertexAttribPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVARBPROC epoxy_glGetVertexAttribPointervARB = epoxy_glGetVertexAttribPointervARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVNVPROC epoxy_glGetVertexAttribPointervNV = epoxy_glGetVertexAttribPointervNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVPROC epoxy_glGetVertexAttribdv = epoxy_glGetVertexAttribdv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVARBPROC epoxy_glGetVertexAttribdvARB = epoxy_glGetVertexAttribdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVNVPROC epoxy_glGetVertexAttribdvNV = epoxy_glGetVertexAttribdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVPROC epoxy_glGetVertexAttribfv = epoxy_glGetVertexAttribfv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVARBPROC epoxy_glGetVertexAttribfvARB = epoxy_glGetVertexAttribfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVNVPROC epoxy_glGetVertexAttribfvNV = epoxy_glGetVertexAttribfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVPROC epoxy_glGetVertexAttribiv = epoxy_glGetVertexAttribiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVARBPROC epoxy_glGetVertexAttribivARB = epoxy_glGetVertexAttribivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVNVPROC epoxy_glGetVertexAttribivNV = epoxy_glGetVertexAttribivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMDVNVPROC epoxy_glGetVideoCaptureStreamdvNV = epoxy_glGetVideoCaptureStreamdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMFVNVPROC epoxy_glGetVideoCaptureStreamfvNV = epoxy_glGetVideoCaptureStreamfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMIVNVPROC epoxy_glGetVideoCaptureStreamivNV = epoxy_glGetVideoCaptureStreamivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTUREIVNVPROC epoxy_glGetVideoCaptureivNV = epoxy_glGetVideoCaptureivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOI64VNVPROC epoxy_glGetVideoi64vNV = epoxy_glGetVideoi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOIVNVPROC epoxy_glGetVideoivNV = epoxy_glGetVideoivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOUI64VNVPROC epoxy_glGetVideoui64vNV = epoxy_glGetVideoui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOUIVNVPROC epoxy_glGetVideouivNV = epoxy_glGetVideouivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOLORTABLEPROC epoxy_glGetnColorTable = epoxy_glGetnColorTable_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOLORTABLEARBPROC epoxy_glGetnColorTableARB = epoxy_glGetnColorTableARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOMPRESSEDTEXIMAGEPROC epoxy_glGetnCompressedTexImage = epoxy_glGetnCompressedTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetnCompressedTexImageARB = epoxy_glGetnCompressedTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNCONVOLUTIONFILTERPROC epoxy_glGetnConvolutionFilter = epoxy_glGetnConvolutionFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETNCONVOLUTIONFILTERARBPROC epoxy_glGetnConvolutionFilterARB = epoxy_glGetnConvolutionFilterARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNHISTOGRAMPROC epoxy_glGetnHistogram = epoxy_glGetnHistogram_global_rewrite_ptr; + +PUBLIC PFNGLGETNHISTOGRAMARBPROC epoxy_glGetnHistogramARB = epoxy_glGetnHistogramARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPDVPROC epoxy_glGetnMapdv = epoxy_glGetnMapdv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPDVARBPROC epoxy_glGetnMapdvARB = epoxy_glGetnMapdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPFVPROC epoxy_glGetnMapfv = epoxy_glGetnMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPFVARBPROC epoxy_glGetnMapfvARB = epoxy_glGetnMapfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPIVPROC epoxy_glGetnMapiv = epoxy_glGetnMapiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPIVARBPROC epoxy_glGetnMapivARB = epoxy_glGetnMapivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMINMAXPROC epoxy_glGetnMinmax = epoxy_glGetnMinmax_global_rewrite_ptr; + +PUBLIC PFNGLGETNMINMAXARBPROC epoxy_glGetnMinmaxARB = epoxy_glGetnMinmaxARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPFVPROC epoxy_glGetnPixelMapfv = epoxy_glGetnPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPFVARBPROC epoxy_glGetnPixelMapfvARB = epoxy_glGetnPixelMapfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUIVPROC epoxy_glGetnPixelMapuiv = epoxy_glGetnPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUIVARBPROC epoxy_glGetnPixelMapuivARB = epoxy_glGetnPixelMapuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUSVPROC epoxy_glGetnPixelMapusv = epoxy_glGetnPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUSVARBPROC epoxy_glGetnPixelMapusvARB = epoxy_glGetnPixelMapusvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPOLYGONSTIPPLEPROC epoxy_glGetnPolygonStipple = epoxy_glGetnPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLGETNPOLYGONSTIPPLEARBPROC epoxy_glGetnPolygonStippleARB = epoxy_glGetnPolygonStippleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNSEPARABLEFILTERPROC epoxy_glGetnSeparableFilter = epoxy_glGetnSeparableFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETNSEPARABLEFILTERARBPROC epoxy_glGetnSeparableFilterARB = epoxy_glGetnSeparableFilterARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNTEXIMAGEPROC epoxy_glGetnTexImage = epoxy_glGetnTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETNTEXIMAGEARBPROC epoxy_glGetnTexImageARB = epoxy_glGetnTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMDVPROC epoxy_glGetnUniformdv = epoxy_glGetnUniformdv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMDVARBPROC epoxy_glGetnUniformdvARB = epoxy_glGetnUniformdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVPROC epoxy_glGetnUniformfv = epoxy_glGetnUniformfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVARBPROC epoxy_glGetnUniformfvARB = epoxy_glGetnUniformfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVEXTPROC epoxy_glGetnUniformfvEXT = epoxy_glGetnUniformfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVKHRPROC epoxy_glGetnUniformfvKHR = epoxy_glGetnUniformfvKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMI64VARBPROC epoxy_glGetnUniformi64vARB = epoxy_glGetnUniformi64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVPROC epoxy_glGetnUniformiv = epoxy_glGetnUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVARBPROC epoxy_glGetnUniformivARB = epoxy_glGetnUniformivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVEXTPROC epoxy_glGetnUniformivEXT = epoxy_glGetnUniformivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVKHRPROC epoxy_glGetnUniformivKHR = epoxy_glGetnUniformivKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUI64VARBPROC epoxy_glGetnUniformui64vARB = epoxy_glGetnUniformui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVPROC epoxy_glGetnUniformuiv = epoxy_glGetnUniformuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVARBPROC epoxy_glGetnUniformuivARB = epoxy_glGetnUniformuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVKHRPROC epoxy_glGetnUniformuivKHR = epoxy_glGetnUniformuivKHR_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORBSUNPROC epoxy_glGlobalAlphaFactorbSUN = epoxy_glGlobalAlphaFactorbSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORDSUNPROC epoxy_glGlobalAlphaFactordSUN = epoxy_glGlobalAlphaFactordSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORFSUNPROC epoxy_glGlobalAlphaFactorfSUN = epoxy_glGlobalAlphaFactorfSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORISUNPROC epoxy_glGlobalAlphaFactoriSUN = epoxy_glGlobalAlphaFactoriSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORSSUNPROC epoxy_glGlobalAlphaFactorsSUN = epoxy_glGlobalAlphaFactorsSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUBSUNPROC epoxy_glGlobalAlphaFactorubSUN = epoxy_glGlobalAlphaFactorubSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUISUNPROC epoxy_glGlobalAlphaFactoruiSUN = epoxy_glGlobalAlphaFactoruiSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUSSUNPROC epoxy_glGlobalAlphaFactorusSUN = epoxy_glGlobalAlphaFactorusSUN_global_rewrite_ptr; + +PUBLIC PFNGLHINTPROC epoxy_glHint = epoxy_glHint_global_rewrite_ptr; + +PUBLIC PFNGLHINTPGIPROC epoxy_glHintPGI = epoxy_glHintPGI_global_rewrite_ptr; + +PUBLIC PFNGLHISTOGRAMPROC epoxy_glHistogram = epoxy_glHistogram_global_rewrite_ptr; + +PUBLIC PFNGLHISTOGRAMEXTPROC epoxy_glHistogramEXT = epoxy_glHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLIGLOOINTERFACESGIXPROC epoxy_glIglooInterfaceSGIX = epoxy_glIglooInterfaceSGIX_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERFHPPROC epoxy_glImageTransformParameterfHP = epoxy_glImageTransformParameterfHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glImageTransformParameterfvHP = epoxy_glImageTransformParameterfvHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERIHPPROC epoxy_glImageTransformParameteriHP = epoxy_glImageTransformParameteriHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glImageTransformParameterivHP = epoxy_glImageTransformParameterivHP_global_rewrite_ptr; + +PUBLIC PFNGLIMPORTSYNCEXTPROC epoxy_glImportSyncEXT = epoxy_glImportSyncEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFORMATNVPROC epoxy_glIndexFormatNV = epoxy_glIndexFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFUNCEXTPROC epoxy_glIndexFuncEXT = epoxy_glIndexFuncEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXMASKPROC epoxy_glIndexMask = epoxy_glIndexMask_global_rewrite_ptr; + +PUBLIC PFNGLINDEXMATERIALEXTPROC epoxy_glIndexMaterialEXT = epoxy_glIndexMaterialEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTERPROC epoxy_glIndexPointer = epoxy_glIndexPointer_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTEREXTPROC epoxy_glIndexPointerEXT = epoxy_glIndexPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTERLISTIBMPROC epoxy_glIndexPointerListIBM = epoxy_glIndexPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLINDEXDPROC epoxy_glIndexd = epoxy_glIndexd_global_rewrite_ptr; + +PUBLIC PFNGLINDEXDVPROC epoxy_glIndexdv = epoxy_glIndexdv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFPROC epoxy_glIndexf = epoxy_glIndexf_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFVPROC epoxy_glIndexfv = epoxy_glIndexfv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXIPROC epoxy_glIndexi = epoxy_glIndexi_global_rewrite_ptr; + +PUBLIC PFNGLINDEXIVPROC epoxy_glIndexiv = epoxy_glIndexiv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXSPROC epoxy_glIndexs = epoxy_glIndexs_global_rewrite_ptr; + +PUBLIC PFNGLINDEXSVPROC epoxy_glIndexsv = epoxy_glIndexsv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXUBPROC epoxy_glIndexub = epoxy_glIndexub_global_rewrite_ptr; + +PUBLIC PFNGLINDEXUBVPROC epoxy_glIndexubv = epoxy_glIndexubv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXXOESPROC epoxy_glIndexxOES = epoxy_glIndexxOES_global_rewrite_ptr; + +PUBLIC PFNGLINDEXXVOESPROC epoxy_glIndexxvOES = epoxy_glIndexxvOES_global_rewrite_ptr; + +PUBLIC PFNGLINITNAMESPROC epoxy_glInitNames = epoxy_glInitNames_global_rewrite_ptr; + +PUBLIC PFNGLINSERTCOMPONENTEXTPROC epoxy_glInsertComponentEXT = epoxy_glInsertComponentEXT_global_rewrite_ptr; + +PUBLIC PFNGLINSERTEVENTMARKEREXTPROC epoxy_glInsertEventMarkerEXT = epoxy_glInsertEventMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLINSTRUMENTSBUFFERSGIXPROC epoxy_glInstrumentsBufferSGIX = epoxy_glInstrumentsBufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLINTERLEAVEDARRAYSPROC epoxy_glInterleavedArrays = epoxy_glInterleavedArrays_global_rewrite_ptr; + +PUBLIC PFNGLINTERPOLATEPATHSNVPROC epoxy_glInterpolatePathsNV = epoxy_glInterpolatePathsNV_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEBUFFERDATAPROC epoxy_glInvalidateBufferData = epoxy_glInvalidateBufferData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEBUFFERSUBDATAPROC epoxy_glInvalidateBufferSubData = epoxy_glInvalidateBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEFRAMEBUFFERPROC epoxy_glInvalidateFramebuffer = epoxy_glInvalidateFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC epoxy_glInvalidateNamedFramebufferData = epoxy_glInvalidateNamedFramebufferData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC epoxy_glInvalidateNamedFramebufferSubData = epoxy_glInvalidateNamedFramebufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATESUBFRAMEBUFFERPROC epoxy_glInvalidateSubFramebuffer = epoxy_glInvalidateSubFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATETEXIMAGEPROC epoxy_glInvalidateTexImage = epoxy_glInvalidateTexImage_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATETEXSUBIMAGEPROC epoxy_glInvalidateTexSubImage = epoxy_glInvalidateTexSubImage_global_rewrite_ptr; + +PUBLIC PFNGLISASYNCMARKERSGIXPROC epoxy_glIsAsyncMarkerSGIX = epoxy_glIsAsyncMarkerSGIX_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERPROC epoxy_glIsBuffer = epoxy_glIsBuffer_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERARBPROC epoxy_glIsBufferARB = epoxy_glIsBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERRESIDENTNVPROC epoxy_glIsBufferResidentNV = epoxy_glIsBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISCOMMANDLISTNVPROC epoxy_glIsCommandListNV = epoxy_glIsCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDPROC epoxy_glIsEnabled = epoxy_glIsEnabled_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDINDEXEDEXTPROC epoxy_glIsEnabledIndexedEXT = epoxy_glIsEnabledIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIPROC epoxy_glIsEnabledi = epoxy_glIsEnabledi_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIEXTPROC epoxy_glIsEnablediEXT = epoxy_glIsEnablediEXT_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDINVPROC epoxy_glIsEnablediNV = epoxy_glIsEnablediNV_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIOESPROC epoxy_glIsEnablediOES = epoxy_glIsEnablediOES_global_rewrite_ptr; + +PUBLIC PFNGLISFENCEAPPLEPROC epoxy_glIsFenceAPPLE = epoxy_glIsFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISFENCENVPROC epoxy_glIsFenceNV = epoxy_glIsFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFERPROC epoxy_glIsFramebuffer = epoxy_glIsFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFEREXTPROC epoxy_glIsFramebufferEXT = epoxy_glIsFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFEROESPROC epoxy_glIsFramebufferOES = epoxy_glIsFramebufferOES_global_rewrite_ptr; + +PUBLIC PFNGLISIMAGEHANDLERESIDENTARBPROC epoxy_glIsImageHandleResidentARB = epoxy_glIsImageHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLISIMAGEHANDLERESIDENTNVPROC epoxy_glIsImageHandleResidentNV = epoxy_glIsImageHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISLISTPROC epoxy_glIsList = epoxy_glIsList_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEAMDPROC epoxy_glIsNameAMD = epoxy_glIsNameAMD_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEDBUFFERRESIDENTNVPROC epoxy_glIsNamedBufferResidentNV = epoxy_glIsNamedBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEDSTRINGARBPROC epoxy_glIsNamedStringARB = epoxy_glIsNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLISOBJECTBUFFERATIPROC epoxy_glIsObjectBufferATI = epoxy_glIsObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLISOCCLUSIONQUERYNVPROC epoxy_glIsOcclusionQueryNV = epoxy_glIsOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLISPATHNVPROC epoxy_glIsPathNV = epoxy_glIsPathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPOINTINFILLPATHNVPROC epoxy_glIsPointInFillPathNV = epoxy_glIsPointInFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPOINTINSTROKEPATHNVPROC epoxy_glIsPointInStrokePathNV = epoxy_glIsPointInStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPROC epoxy_glIsProgram = epoxy_glIsProgram_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMARBPROC epoxy_glIsProgramARB = epoxy_glIsProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMNVPROC epoxy_glIsProgramNV = epoxy_glIsProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPIPELINEPROC epoxy_glIsProgramPipeline = epoxy_glIsProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPIPELINEEXTPROC epoxy_glIsProgramPipelineEXT = epoxy_glIsProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYPROC epoxy_glIsQuery = epoxy_glIsQuery_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYARBPROC epoxy_glIsQueryARB = epoxy_glIsQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYEXTPROC epoxy_glIsQueryEXT = epoxy_glIsQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFERPROC epoxy_glIsRenderbuffer = epoxy_glIsRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFEREXTPROC epoxy_glIsRenderbufferEXT = epoxy_glIsRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFEROESPROC epoxy_glIsRenderbufferOES = epoxy_glIsRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLISSAMPLERPROC epoxy_glIsSampler = epoxy_glIsSampler_global_rewrite_ptr; + +PUBLIC PFNGLISSHADERPROC epoxy_glIsShader = epoxy_glIsShader_global_rewrite_ptr; + +PUBLIC PFNGLISSTATENVPROC epoxy_glIsStateNV = epoxy_glIsStateNV_global_rewrite_ptr; + +PUBLIC PFNGLISSYNCPROC epoxy_glIsSync = epoxy_glIsSync_global_rewrite_ptr; + +PUBLIC PFNGLISSYNCAPPLEPROC epoxy_glIsSyncAPPLE = epoxy_glIsSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREPROC epoxy_glIsTexture = epoxy_glIsTexture_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREEXTPROC epoxy_glIsTextureEXT = epoxy_glIsTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREHANDLERESIDENTARBPROC epoxy_glIsTextureHandleResidentARB = epoxy_glIsTextureHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREHANDLERESIDENTNVPROC epoxy_glIsTextureHandleResidentNV = epoxy_glIsTextureHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISTRANSFORMFEEDBACKPROC epoxy_glIsTransformFeedback = epoxy_glIsTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLISTRANSFORMFEEDBACKNVPROC epoxy_glIsTransformFeedbackNV = epoxy_glIsTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLISVARIANTENABLEDEXTPROC epoxy_glIsVariantEnabledEXT = epoxy_glIsVariantEnabledEXT_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYPROC epoxy_glIsVertexArray = epoxy_glIsVertexArray_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYAPPLEPROC epoxy_glIsVertexArrayAPPLE = epoxy_glIsVertexArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYOESPROC epoxy_glIsVertexArrayOES = epoxy_glIsVertexArrayOES_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXATTRIBENABLEDAPPLEPROC epoxy_glIsVertexAttribEnabledAPPLE = epoxy_glIsVertexAttribEnabledAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLLABELOBJECTEXTPROC epoxy_glLabelObjectEXT = epoxy_glLabelObjectEXT_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTENVISGIXPROC epoxy_glLightEnviSGIX = epoxy_glLightEnviSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELFPROC epoxy_glLightModelf = epoxy_glLightModelf_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELFVPROC epoxy_glLightModelfv = epoxy_glLightModelfv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELIPROC epoxy_glLightModeli = epoxy_glLightModeli_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELIVPROC epoxy_glLightModeliv = epoxy_glLightModeliv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXPROC epoxy_glLightModelx = epoxy_glLightModelx_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXOESPROC epoxy_glLightModelxOES = epoxy_glLightModelxOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXVPROC epoxy_glLightModelxv = epoxy_glLightModelxv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXVOESPROC epoxy_glLightModelxvOES = epoxy_glLightModelxvOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTFPROC epoxy_glLightf = epoxy_glLightf_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTFVPROC epoxy_glLightfv = epoxy_glLightfv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTIPROC epoxy_glLighti = epoxy_glLighti_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTIVPROC epoxy_glLightiv = epoxy_glLightiv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXPROC epoxy_glLightx = epoxy_glLightx_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXOESPROC epoxy_glLightxOES = epoxy_glLightxOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXVPROC epoxy_glLightxv = epoxy_glLightxv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXVOESPROC epoxy_glLightxvOES = epoxy_glLightxvOES_global_rewrite_ptr; + +PUBLIC PFNGLLINESTIPPLEPROC epoxy_glLineStipple = epoxy_glLineStipple_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHPROC epoxy_glLineWidth = epoxy_glLineWidth_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHXPROC epoxy_glLineWidthx = epoxy_glLineWidthx_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHXOESPROC epoxy_glLineWidthxOES = epoxy_glLineWidthxOES_global_rewrite_ptr; + +PUBLIC PFNGLLINKPROGRAMPROC epoxy_glLinkProgram = epoxy_glLinkProgram_global_rewrite_ptr; + +PUBLIC PFNGLLINKPROGRAMARBPROC epoxy_glLinkProgramARB = epoxy_glLinkProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLLISTBASEPROC epoxy_glListBase = epoxy_glListBase_global_rewrite_ptr; + +PUBLIC PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC epoxy_glListDrawCommandsStatesClientNV = epoxy_glListDrawCommandsStatesClientNV_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERFSGIXPROC epoxy_glListParameterfSGIX = epoxy_glListParameterfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERFVSGIXPROC epoxy_glListParameterfvSGIX = epoxy_glListParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERISGIXPROC epoxy_glListParameteriSGIX = epoxy_glListParameteriSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERIVSGIXPROC epoxy_glListParameterivSGIX = epoxy_glListParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLOADIDENTITYPROC epoxy_glLoadIdentity = epoxy_glLoadIdentity_global_rewrite_ptr; + +PUBLIC PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC epoxy_glLoadIdentityDeformationMapSGIX = epoxy_glLoadIdentityDeformationMapSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXDPROC epoxy_glLoadMatrixd = epoxy_glLoadMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXFPROC epoxy_glLoadMatrixf = epoxy_glLoadMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXXPROC epoxy_glLoadMatrixx = epoxy_glLoadMatrixx_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXXOESPROC epoxy_glLoadMatrixxOES = epoxy_glLoadMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLLOADNAMEPROC epoxy_glLoadName = epoxy_glLoadName_global_rewrite_ptr; + +PUBLIC PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC epoxy_glLoadPaletteFromModelViewMatrixOES = epoxy_glLoadPaletteFromModelViewMatrixOES_global_rewrite_ptr; + +PUBLIC PFNGLLOADPROGRAMNVPROC epoxy_glLoadProgramNV = epoxy_glLoadProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXDPROC epoxy_glLoadTransposeMatrixd = epoxy_glLoadTransposeMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXDARBPROC epoxy_glLoadTransposeMatrixdARB = epoxy_glLoadTransposeMatrixdARB_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXFPROC epoxy_glLoadTransposeMatrixf = epoxy_glLoadTransposeMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXFARBPROC epoxy_glLoadTransposeMatrixfARB = epoxy_glLoadTransposeMatrixfARB_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXXOESPROC epoxy_glLoadTransposeMatrixxOES = epoxy_glLoadTransposeMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLLOCKARRAYSEXTPROC epoxy_glLockArraysEXT = epoxy_glLockArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLLOGICOPPROC epoxy_glLogicOp = epoxy_glLogicOp_global_rewrite_ptr; + +PUBLIC PFNGLMAKEBUFFERNONRESIDENTNVPROC epoxy_glMakeBufferNonResidentNV = epoxy_glMakeBufferNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEBUFFERRESIDENTNVPROC epoxy_glMakeBufferResidentNV = epoxy_glMakeBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC epoxy_glMakeImageHandleNonResidentARB = epoxy_glMakeImageHandleNonResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC epoxy_glMakeImageHandleNonResidentNV = epoxy_glMakeImageHandleNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLERESIDENTARBPROC epoxy_glMakeImageHandleResidentARB = epoxy_glMakeImageHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLERESIDENTNVPROC epoxy_glMakeImageHandleResidentNV = epoxy_glMakeImageHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC epoxy_glMakeNamedBufferNonResidentNV = epoxy_glMakeNamedBufferNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKENAMEDBUFFERRESIDENTNVPROC epoxy_glMakeNamedBufferResidentNV = epoxy_glMakeNamedBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC epoxy_glMakeTextureHandleNonResidentARB = epoxy_glMakeTextureHandleNonResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC epoxy_glMakeTextureHandleNonResidentNV = epoxy_glMakeTextureHandleNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLERESIDENTARBPROC epoxy_glMakeTextureHandleResidentARB = epoxy_glMakeTextureHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLERESIDENTNVPROC epoxy_glMakeTextureHandleResidentNV = epoxy_glMakeTextureHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAP1DPROC epoxy_glMap1d = epoxy_glMap1d_global_rewrite_ptr; + +PUBLIC PFNGLMAP1FPROC epoxy_glMap1f = epoxy_glMap1f_global_rewrite_ptr; + +PUBLIC PFNGLMAP1XOESPROC epoxy_glMap1xOES = epoxy_glMap1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAP2DPROC epoxy_glMap2d = epoxy_glMap2d_global_rewrite_ptr; + +PUBLIC PFNGLMAP2FPROC epoxy_glMap2f = epoxy_glMap2f_global_rewrite_ptr; + +PUBLIC PFNGLMAP2XOESPROC epoxy_glMap2xOES = epoxy_glMap2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERPROC epoxy_glMapBuffer = epoxy_glMapBuffer_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERARBPROC epoxy_glMapBufferARB = epoxy_glMapBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFEROESPROC epoxy_glMapBufferOES = epoxy_glMapBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERRANGEPROC epoxy_glMapBufferRange = epoxy_glMapBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERRANGEEXTPROC epoxy_glMapBufferRangeEXT = epoxy_glMapBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPCONTROLPOINTSNVPROC epoxy_glMapControlPointsNV = epoxy_glMapControlPointsNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1DPROC epoxy_glMapGrid1d = epoxy_glMapGrid1d_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1FPROC epoxy_glMapGrid1f = epoxy_glMapGrid1f_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1XOESPROC epoxy_glMapGrid1xOES = epoxy_glMapGrid1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2DPROC epoxy_glMapGrid2d = epoxy_glMapGrid2d_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2FPROC epoxy_glMapGrid2f = epoxy_glMapGrid2f_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2XOESPROC epoxy_glMapGrid2xOES = epoxy_glMapGrid2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERPROC epoxy_glMapNamedBuffer = epoxy_glMapNamedBuffer_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFEREXTPROC epoxy_glMapNamedBufferEXT = epoxy_glMapNamedBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERRANGEPROC epoxy_glMapNamedBufferRange = epoxy_glMapNamedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERRANGEEXTPROC epoxy_glMapNamedBufferRangeEXT = epoxy_glMapNamedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPOBJECTBUFFERATIPROC epoxy_glMapObjectBufferATI = epoxy_glMapObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLMAPPARAMETERFVNVPROC epoxy_glMapParameterfvNV = epoxy_glMapParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPPARAMETERIVNVPROC epoxy_glMapParameterivNV = epoxy_glMapParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPTEXTURE2DINTELPROC epoxy_glMapTexture2DINTEL = epoxy_glMapTexture2DINTEL_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB1DAPPLEPROC epoxy_glMapVertexAttrib1dAPPLE = epoxy_glMapVertexAttrib1dAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB1FAPPLEPROC epoxy_glMapVertexAttrib1fAPPLE = epoxy_glMapVertexAttrib1fAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB2DAPPLEPROC epoxy_glMapVertexAttrib2dAPPLE = epoxy_glMapVertexAttrib2dAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB2FAPPLEPROC epoxy_glMapVertexAttrib2fAPPLE = epoxy_glMapVertexAttrib2fAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALFPROC epoxy_glMaterialf = epoxy_glMaterialf_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALFVPROC epoxy_glMaterialfv = epoxy_glMaterialfv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALIPROC epoxy_glMateriali = epoxy_glMateriali_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALIVPROC epoxy_glMaterialiv = epoxy_glMaterialiv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXPROC epoxy_glMaterialx = epoxy_glMaterialx_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXOESPROC epoxy_glMaterialxOES = epoxy_glMaterialxOES_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXVPROC epoxy_glMaterialxv = epoxy_glMaterialxv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXVOESPROC epoxy_glMaterialxvOES = epoxy_glMaterialxvOES_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXFRUSTUMEXTPROC epoxy_glMatrixFrustumEXT = epoxy_glMatrixFrustumEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXPOINTERARBPROC epoxy_glMatrixIndexPointerARB = epoxy_glMatrixIndexPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXPOINTEROESPROC epoxy_glMatrixIndexPointerOES = epoxy_glMatrixIndexPointerOES_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUBVARBPROC epoxy_glMatrixIndexubvARB = epoxy_glMatrixIndexubvARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUIVARBPROC epoxy_glMatrixIndexuivARB = epoxy_glMatrixIndexuivARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUSVARBPROC epoxy_glMatrixIndexusvARB = epoxy_glMatrixIndexusvARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOAD3X2FNVPROC epoxy_glMatrixLoad3x2fNV = epoxy_glMatrixLoad3x2fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOAD3X3FNVPROC epoxy_glMatrixLoad3x3fNV = epoxy_glMatrixLoad3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADIDENTITYEXTPROC epoxy_glMatrixLoadIdentityEXT = epoxy_glMatrixLoadIdentityEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC epoxy_glMatrixLoadTranspose3x3fNV = epoxy_glMatrixLoadTranspose3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSEDEXTPROC epoxy_glMatrixLoadTransposedEXT = epoxy_glMatrixLoadTransposedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSEFEXTPROC epoxy_glMatrixLoadTransposefEXT = epoxy_glMatrixLoadTransposefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADDEXTPROC epoxy_glMatrixLoaddEXT = epoxy_glMatrixLoaddEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADFEXTPROC epoxy_glMatrixLoadfEXT = epoxy_glMatrixLoadfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMODEPROC epoxy_glMatrixMode = epoxy_glMatrixMode_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULT3X2FNVPROC epoxy_glMatrixMult3x2fNV = epoxy_glMatrixMult3x2fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULT3X3FNVPROC epoxy_glMatrixMult3x3fNV = epoxy_glMatrixMult3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC epoxy_glMatrixMultTranspose3x3fNV = epoxy_glMatrixMultTranspose3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSEDEXTPROC epoxy_glMatrixMultTransposedEXT = epoxy_glMatrixMultTransposedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSEFEXTPROC epoxy_glMatrixMultTransposefEXT = epoxy_glMatrixMultTransposefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTDEXTPROC epoxy_glMatrixMultdEXT = epoxy_glMatrixMultdEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTFEXTPROC epoxy_glMatrixMultfEXT = epoxy_glMatrixMultfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXORTHOEXTPROC epoxy_glMatrixOrthoEXT = epoxy_glMatrixOrthoEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXPOPEXTPROC epoxy_glMatrixPopEXT = epoxy_glMatrixPopEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXPUSHEXTPROC epoxy_glMatrixPushEXT = epoxy_glMatrixPushEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXROTATEDEXTPROC epoxy_glMatrixRotatedEXT = epoxy_glMatrixRotatedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXROTATEFEXTPROC epoxy_glMatrixRotatefEXT = epoxy_glMatrixRotatefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXSCALEDEXTPROC epoxy_glMatrixScaledEXT = epoxy_glMatrixScaledEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXSCALEFEXTPROC epoxy_glMatrixScalefEXT = epoxy_glMatrixScalefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXTRANSLATEDEXTPROC epoxy_glMatrixTranslatedEXT = epoxy_glMatrixTranslatedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXTRANSLATEFEXTPROC epoxy_glMatrixTranslatefEXT = epoxy_glMatrixTranslatefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAXSHADERCOMPILERTHREADSARBPROC epoxy_glMaxShaderCompilerThreadsARB = epoxy_glMaxShaderCompilerThreadsARB_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIERPROC epoxy_glMemoryBarrier = epoxy_glMemoryBarrier_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIERBYREGIONPROC epoxy_glMemoryBarrierByRegion = epoxy_glMemoryBarrierByRegion_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIEREXTPROC epoxy_glMemoryBarrierEXT = epoxy_glMemoryBarrierEXT_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGPROC epoxy_glMinSampleShading = epoxy_glMinSampleShading_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGARBPROC epoxy_glMinSampleShadingARB = epoxy_glMinSampleShadingARB_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGOESPROC epoxy_glMinSampleShadingOES = epoxy_glMinSampleShadingOES_global_rewrite_ptr; + +PUBLIC PFNGLMINMAXPROC epoxy_glMinmax = epoxy_glMinmax_global_rewrite_ptr; + +PUBLIC PFNGLMINMAXEXTPROC epoxy_glMinmaxEXT = epoxy_glMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXDPROC epoxy_glMultMatrixd = epoxy_glMultMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXFPROC epoxy_glMultMatrixf = epoxy_glMultMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXXPROC epoxy_glMultMatrixx = epoxy_glMultMatrixx_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXXOESPROC epoxy_glMultMatrixxOES = epoxy_glMultMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXDPROC epoxy_glMultTransposeMatrixd = epoxy_glMultTransposeMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXDARBPROC epoxy_glMultTransposeMatrixdARB = epoxy_glMultTransposeMatrixdARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXFPROC epoxy_glMultTransposeMatrixf = epoxy_glMultTransposeMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXFARBPROC epoxy_glMultTransposeMatrixfARB = epoxy_glMultTransposeMatrixfARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXXOESPROC epoxy_glMultTransposeMatrixxOES = epoxy_glMultTransposeMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSPROC epoxy_glMultiDrawArrays = epoxy_glMultiDrawArrays_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSEXTPROC epoxy_glMultiDrawArraysEXT = epoxy_glMultiDrawArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTPROC epoxy_glMultiDrawArraysIndirect = epoxy_glMultiDrawArraysIndirect_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC epoxy_glMultiDrawArraysIndirectAMD = epoxy_glMultiDrawArraysIndirectAMD_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawArraysIndirectBindlessCountNV = epoxy_glMultiDrawArraysIndirectBindlessCountNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawArraysIndirectBindlessNV = epoxy_glMultiDrawArraysIndirectBindlessNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC epoxy_glMultiDrawArraysIndirectCountARB = epoxy_glMultiDrawArraysIndirectCountARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC epoxy_glMultiDrawArraysIndirectEXT = epoxy_glMultiDrawArraysIndirectEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC epoxy_glMultiDrawElementArrayAPPLE = epoxy_glMultiDrawElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSPROC epoxy_glMultiDrawElements = epoxy_glMultiDrawElements_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC epoxy_glMultiDrawElementsBaseVertex = epoxy_glMultiDrawElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glMultiDrawElementsBaseVertexEXT = epoxy_glMultiDrawElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC epoxy_glMultiDrawElementsBaseVertexOES = epoxy_glMultiDrawElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSEXTPROC epoxy_glMultiDrawElementsEXT = epoxy_glMultiDrawElementsEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTPROC epoxy_glMultiDrawElementsIndirect = epoxy_glMultiDrawElementsIndirect_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC epoxy_glMultiDrawElementsIndirectAMD = epoxy_glMultiDrawElementsIndirectAMD_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawElementsIndirectBindlessCountNV = epoxy_glMultiDrawElementsIndirectBindlessCountNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawElementsIndirectBindlessNV = epoxy_glMultiDrawElementsIndirectBindlessNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC epoxy_glMultiDrawElementsIndirectCountARB = epoxy_glMultiDrawElementsIndirectCountARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC epoxy_glMultiDrawElementsIndirectEXT = epoxy_glMultiDrawElementsIndirectEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glMultiDrawRangeElementArrayAPPLE = epoxy_glMultiDrawRangeElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMULTIMODEDRAWARRAYSIBMPROC epoxy_glMultiModeDrawArraysIBM = epoxy_glMultiModeDrawArraysIBM_global_rewrite_ptr; + +PUBLIC PFNGLMULTIMODEDRAWELEMENTSIBMPROC epoxy_glMultiModeDrawElementsIBM = epoxy_glMultiModeDrawElementsIBM_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXBUFFEREXTPROC epoxy_glMultiTexBufferEXT = epoxy_glMultiTexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1BOESPROC epoxy_glMultiTexCoord1bOES = epoxy_glMultiTexCoord1bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1BVOESPROC epoxy_glMultiTexCoord1bvOES = epoxy_glMultiTexCoord1bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DPROC epoxy_glMultiTexCoord1d = epoxy_glMultiTexCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DARBPROC epoxy_glMultiTexCoord1dARB = epoxy_glMultiTexCoord1dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DVPROC epoxy_glMultiTexCoord1dv = epoxy_glMultiTexCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DVARBPROC epoxy_glMultiTexCoord1dvARB = epoxy_glMultiTexCoord1dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FPROC epoxy_glMultiTexCoord1f = epoxy_glMultiTexCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FARBPROC epoxy_glMultiTexCoord1fARB = epoxy_glMultiTexCoord1fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FVPROC epoxy_glMultiTexCoord1fv = epoxy_glMultiTexCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FVARBPROC epoxy_glMultiTexCoord1fvARB = epoxy_glMultiTexCoord1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1HNVPROC epoxy_glMultiTexCoord1hNV = epoxy_glMultiTexCoord1hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1HVNVPROC epoxy_glMultiTexCoord1hvNV = epoxy_glMultiTexCoord1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IPROC epoxy_glMultiTexCoord1i = epoxy_glMultiTexCoord1i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IARBPROC epoxy_glMultiTexCoord1iARB = epoxy_glMultiTexCoord1iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IVPROC epoxy_glMultiTexCoord1iv = epoxy_glMultiTexCoord1iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IVARBPROC epoxy_glMultiTexCoord1ivARB = epoxy_glMultiTexCoord1ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SPROC epoxy_glMultiTexCoord1s = epoxy_glMultiTexCoord1s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SARBPROC epoxy_glMultiTexCoord1sARB = epoxy_glMultiTexCoord1sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SVPROC epoxy_glMultiTexCoord1sv = epoxy_glMultiTexCoord1sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SVARBPROC epoxy_glMultiTexCoord1svARB = epoxy_glMultiTexCoord1svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1XOESPROC epoxy_glMultiTexCoord1xOES = epoxy_glMultiTexCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1XVOESPROC epoxy_glMultiTexCoord1xvOES = epoxy_glMultiTexCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2BOESPROC epoxy_glMultiTexCoord2bOES = epoxy_glMultiTexCoord2bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2BVOESPROC epoxy_glMultiTexCoord2bvOES = epoxy_glMultiTexCoord2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DPROC epoxy_glMultiTexCoord2d = epoxy_glMultiTexCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DARBPROC epoxy_glMultiTexCoord2dARB = epoxy_glMultiTexCoord2dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DVPROC epoxy_glMultiTexCoord2dv = epoxy_glMultiTexCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DVARBPROC epoxy_glMultiTexCoord2dvARB = epoxy_glMultiTexCoord2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FPROC epoxy_glMultiTexCoord2f = epoxy_glMultiTexCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FARBPROC epoxy_glMultiTexCoord2fARB = epoxy_glMultiTexCoord2fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FVPROC epoxy_glMultiTexCoord2fv = epoxy_glMultiTexCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FVARBPROC epoxy_glMultiTexCoord2fvARB = epoxy_glMultiTexCoord2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2HNVPROC epoxy_glMultiTexCoord2hNV = epoxy_glMultiTexCoord2hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2HVNVPROC epoxy_glMultiTexCoord2hvNV = epoxy_glMultiTexCoord2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IPROC epoxy_glMultiTexCoord2i = epoxy_glMultiTexCoord2i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IARBPROC epoxy_glMultiTexCoord2iARB = epoxy_glMultiTexCoord2iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IVPROC epoxy_glMultiTexCoord2iv = epoxy_glMultiTexCoord2iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IVARBPROC epoxy_glMultiTexCoord2ivARB = epoxy_glMultiTexCoord2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SPROC epoxy_glMultiTexCoord2s = epoxy_glMultiTexCoord2s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SARBPROC epoxy_glMultiTexCoord2sARB = epoxy_glMultiTexCoord2sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SVPROC epoxy_glMultiTexCoord2sv = epoxy_glMultiTexCoord2sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SVARBPROC epoxy_glMultiTexCoord2svARB = epoxy_glMultiTexCoord2svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2XOESPROC epoxy_glMultiTexCoord2xOES = epoxy_glMultiTexCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2XVOESPROC epoxy_glMultiTexCoord2xvOES = epoxy_glMultiTexCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3BOESPROC epoxy_glMultiTexCoord3bOES = epoxy_glMultiTexCoord3bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3BVOESPROC epoxy_glMultiTexCoord3bvOES = epoxy_glMultiTexCoord3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DPROC epoxy_glMultiTexCoord3d = epoxy_glMultiTexCoord3d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DARBPROC epoxy_glMultiTexCoord3dARB = epoxy_glMultiTexCoord3dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DVPROC epoxy_glMultiTexCoord3dv = epoxy_glMultiTexCoord3dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DVARBPROC epoxy_glMultiTexCoord3dvARB = epoxy_glMultiTexCoord3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FPROC epoxy_glMultiTexCoord3f = epoxy_glMultiTexCoord3f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FARBPROC epoxy_glMultiTexCoord3fARB = epoxy_glMultiTexCoord3fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FVPROC epoxy_glMultiTexCoord3fv = epoxy_glMultiTexCoord3fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FVARBPROC epoxy_glMultiTexCoord3fvARB = epoxy_glMultiTexCoord3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3HNVPROC epoxy_glMultiTexCoord3hNV = epoxy_glMultiTexCoord3hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3HVNVPROC epoxy_glMultiTexCoord3hvNV = epoxy_glMultiTexCoord3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IPROC epoxy_glMultiTexCoord3i = epoxy_glMultiTexCoord3i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IARBPROC epoxy_glMultiTexCoord3iARB = epoxy_glMultiTexCoord3iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IVPROC epoxy_glMultiTexCoord3iv = epoxy_glMultiTexCoord3iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IVARBPROC epoxy_glMultiTexCoord3ivARB = epoxy_glMultiTexCoord3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SPROC epoxy_glMultiTexCoord3s = epoxy_glMultiTexCoord3s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SARBPROC epoxy_glMultiTexCoord3sARB = epoxy_glMultiTexCoord3sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SVPROC epoxy_glMultiTexCoord3sv = epoxy_glMultiTexCoord3sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SVARBPROC epoxy_glMultiTexCoord3svARB = epoxy_glMultiTexCoord3svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3XOESPROC epoxy_glMultiTexCoord3xOES = epoxy_glMultiTexCoord3xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3XVOESPROC epoxy_glMultiTexCoord3xvOES = epoxy_glMultiTexCoord3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4BOESPROC epoxy_glMultiTexCoord4bOES = epoxy_glMultiTexCoord4bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4BVOESPROC epoxy_glMultiTexCoord4bvOES = epoxy_glMultiTexCoord4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DPROC epoxy_glMultiTexCoord4d = epoxy_glMultiTexCoord4d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DARBPROC epoxy_glMultiTexCoord4dARB = epoxy_glMultiTexCoord4dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DVPROC epoxy_glMultiTexCoord4dv = epoxy_glMultiTexCoord4dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DVARBPROC epoxy_glMultiTexCoord4dvARB = epoxy_glMultiTexCoord4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FPROC epoxy_glMultiTexCoord4f = epoxy_glMultiTexCoord4f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FARBPROC epoxy_glMultiTexCoord4fARB = epoxy_glMultiTexCoord4fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FVPROC epoxy_glMultiTexCoord4fv = epoxy_glMultiTexCoord4fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FVARBPROC epoxy_glMultiTexCoord4fvARB = epoxy_glMultiTexCoord4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4HNVPROC epoxy_glMultiTexCoord4hNV = epoxy_glMultiTexCoord4hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4HVNVPROC epoxy_glMultiTexCoord4hvNV = epoxy_glMultiTexCoord4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IPROC epoxy_glMultiTexCoord4i = epoxy_glMultiTexCoord4i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IARBPROC epoxy_glMultiTexCoord4iARB = epoxy_glMultiTexCoord4iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IVPROC epoxy_glMultiTexCoord4iv = epoxy_glMultiTexCoord4iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IVARBPROC epoxy_glMultiTexCoord4ivARB = epoxy_glMultiTexCoord4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SPROC epoxy_glMultiTexCoord4s = epoxy_glMultiTexCoord4s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SARBPROC epoxy_glMultiTexCoord4sARB = epoxy_glMultiTexCoord4sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SVPROC epoxy_glMultiTexCoord4sv = epoxy_glMultiTexCoord4sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SVARBPROC epoxy_glMultiTexCoord4svARB = epoxy_glMultiTexCoord4svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XPROC epoxy_glMultiTexCoord4x = epoxy_glMultiTexCoord4x_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XOESPROC epoxy_glMultiTexCoord4xOES = epoxy_glMultiTexCoord4xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XVOESPROC epoxy_glMultiTexCoord4xvOES = epoxy_glMultiTexCoord4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP1UIPROC epoxy_glMultiTexCoordP1ui = epoxy_glMultiTexCoordP1ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP1UIVPROC epoxy_glMultiTexCoordP1uiv = epoxy_glMultiTexCoordP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP2UIPROC epoxy_glMultiTexCoordP2ui = epoxy_glMultiTexCoordP2ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP2UIVPROC epoxy_glMultiTexCoordP2uiv = epoxy_glMultiTexCoordP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP3UIPROC epoxy_glMultiTexCoordP3ui = epoxy_glMultiTexCoordP3ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP3UIVPROC epoxy_glMultiTexCoordP3uiv = epoxy_glMultiTexCoordP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP4UIPROC epoxy_glMultiTexCoordP4ui = epoxy_glMultiTexCoordP4ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP4UIVPROC epoxy_glMultiTexCoordP4uiv = epoxy_glMultiTexCoordP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDPOINTEREXTPROC epoxy_glMultiTexCoordPointerEXT = epoxy_glMultiTexCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVFEXTPROC epoxy_glMultiTexEnvfEXT = epoxy_glMultiTexEnvfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVFVEXTPROC epoxy_glMultiTexEnvfvEXT = epoxy_glMultiTexEnvfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVIEXTPROC epoxy_glMultiTexEnviEXT = epoxy_glMultiTexEnviEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVIVEXTPROC epoxy_glMultiTexEnvivEXT = epoxy_glMultiTexEnvivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENDEXTPROC epoxy_glMultiTexGendEXT = epoxy_glMultiTexGendEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENDVEXTPROC epoxy_glMultiTexGendvEXT = epoxy_glMultiTexGendvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENFEXTPROC epoxy_glMultiTexGenfEXT = epoxy_glMultiTexGenfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENFVEXTPROC epoxy_glMultiTexGenfvEXT = epoxy_glMultiTexGenfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENIEXTPROC epoxy_glMultiTexGeniEXT = epoxy_glMultiTexGeniEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENIVEXTPROC epoxy_glMultiTexGenivEXT = epoxy_glMultiTexGenivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE1DEXTPROC epoxy_glMultiTexImage1DEXT = epoxy_glMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE2DEXTPROC epoxy_glMultiTexImage2DEXT = epoxy_glMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE3DEXTPROC epoxy_glMultiTexImage3DEXT = epoxy_glMultiTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIIVEXTPROC epoxy_glMultiTexParameterIivEXT = epoxy_glMultiTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIUIVEXTPROC epoxy_glMultiTexParameterIuivEXT = epoxy_glMultiTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERFEXTPROC epoxy_glMultiTexParameterfEXT = epoxy_glMultiTexParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERFVEXTPROC epoxy_glMultiTexParameterfvEXT = epoxy_glMultiTexParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIEXTPROC epoxy_glMultiTexParameteriEXT = epoxy_glMultiTexParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIVEXTPROC epoxy_glMultiTexParameterivEXT = epoxy_glMultiTexParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXRENDERBUFFEREXTPROC epoxy_glMultiTexRenderbufferEXT = epoxy_glMultiTexRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE1DEXTPROC epoxy_glMultiTexSubImage1DEXT = epoxy_glMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE2DEXTPROC epoxy_glMultiTexSubImage2DEXT = epoxy_glMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE3DEXTPROC epoxy_glMultiTexSubImage3DEXT = epoxy_glMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERDATAPROC epoxy_glNamedBufferData = epoxy_glNamedBufferData_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERDATAEXTPROC epoxy_glNamedBufferDataEXT = epoxy_glNamedBufferDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC epoxy_glNamedBufferPageCommitmentARB = epoxy_glNamedBufferPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC epoxy_glNamedBufferPageCommitmentEXT = epoxy_glNamedBufferPageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSTORAGEPROC epoxy_glNamedBufferStorage = epoxy_glNamedBufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSTORAGEEXTPROC epoxy_glNamedBufferStorageEXT = epoxy_glNamedBufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSUBDATAPROC epoxy_glNamedBufferSubData = epoxy_glNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSUBDATAEXTPROC epoxy_glNamedBufferSubDataEXT = epoxy_glNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC epoxy_glNamedCopyBufferSubDataEXT = epoxy_glNamedCopyBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC epoxy_glNamedFramebufferDrawBuffer = epoxy_glNamedFramebufferDrawBuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC epoxy_glNamedFramebufferDrawBuffers = epoxy_glNamedFramebufferDrawBuffers_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC epoxy_glNamedFramebufferParameteri = epoxy_glNamedFramebufferParameteri_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC epoxy_glNamedFramebufferParameteriEXT = epoxy_glNamedFramebufferParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC epoxy_glNamedFramebufferReadBuffer = epoxy_glNamedFramebufferReadBuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC epoxy_glNamedFramebufferRenderbuffer = epoxy_glNamedFramebufferRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glNamedFramebufferRenderbufferEXT = epoxy_glNamedFramebufferRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glNamedFramebufferSampleLocationsfvARB = epoxy_glNamedFramebufferSampleLocationsfvARB_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glNamedFramebufferSampleLocationsfvNV = epoxy_glNamedFramebufferSampleLocationsfvNV_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREPROC epoxy_glNamedFramebufferTexture = epoxy_glNamedFramebufferTexture_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glNamedFramebufferTexture1DEXT = epoxy_glNamedFramebufferTexture1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glNamedFramebufferTexture2DEXT = epoxy_glNamedFramebufferTexture2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glNamedFramebufferTexture3DEXT = epoxy_glNamedFramebufferTexture3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC epoxy_glNamedFramebufferTextureEXT = epoxy_glNamedFramebufferTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glNamedFramebufferTextureFaceEXT = epoxy_glNamedFramebufferTextureFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC epoxy_glNamedFramebufferTextureLayer = epoxy_glNamedFramebufferTextureLayer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glNamedFramebufferTextureLayerEXT = epoxy_glNamedFramebufferTextureLayerEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC epoxy_glNamedProgramLocalParameter4dEXT = epoxy_glNamedProgramLocalParameter4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC epoxy_glNamedProgramLocalParameter4dvEXT = epoxy_glNamedProgramLocalParameter4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC epoxy_glNamedProgramLocalParameter4fEXT = epoxy_glNamedProgramLocalParameter4fEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC epoxy_glNamedProgramLocalParameter4fvEXT = epoxy_glNamedProgramLocalParameter4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC epoxy_glNamedProgramLocalParameterI4iEXT = epoxy_glNamedProgramLocalParameterI4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC epoxy_glNamedProgramLocalParameterI4ivEXT = epoxy_glNamedProgramLocalParameterI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC epoxy_glNamedProgramLocalParameterI4uiEXT = epoxy_glNamedProgramLocalParameterI4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC epoxy_glNamedProgramLocalParameterI4uivEXT = epoxy_glNamedProgramLocalParameterI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glNamedProgramLocalParameters4fvEXT = epoxy_glNamedProgramLocalParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC epoxy_glNamedProgramLocalParametersI4ivEXT = epoxy_glNamedProgramLocalParametersI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC epoxy_glNamedProgramLocalParametersI4uivEXT = epoxy_glNamedProgramLocalParametersI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMSTRINGEXTPROC epoxy_glNamedProgramStringEXT = epoxy_glNamedProgramStringEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEPROC epoxy_glNamedRenderbufferStorage = epoxy_glNamedRenderbufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC epoxy_glNamedRenderbufferStorageEXT = epoxy_glNamedRenderbufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glNamedRenderbufferStorageMultisample = epoxy_glNamedRenderbufferStorageMultisample_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT = epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleEXT = epoxy_glNamedRenderbufferStorageMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDSTRINGARBPROC epoxy_glNamedStringARB = epoxy_glNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLNEWLISTPROC epoxy_glNewList = epoxy_glNewList_global_rewrite_ptr; + +PUBLIC PFNGLNEWOBJECTBUFFERATIPROC epoxy_glNewObjectBufferATI = epoxy_glNewObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3BPROC epoxy_glNormal3b = epoxy_glNormal3b_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3BVPROC epoxy_glNormal3bv = epoxy_glNormal3bv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3DPROC epoxy_glNormal3d = epoxy_glNormal3d_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3DVPROC epoxy_glNormal3dv = epoxy_glNormal3dv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FPROC epoxy_glNormal3f = epoxy_glNormal3f_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVERTEX3FSUNPROC epoxy_glNormal3fVertex3fSUN = epoxy_glNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVERTEX3FVSUNPROC epoxy_glNormal3fVertex3fvSUN = epoxy_glNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVPROC epoxy_glNormal3fv = epoxy_glNormal3fv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3HNVPROC epoxy_glNormal3hNV = epoxy_glNormal3hNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3HVNVPROC epoxy_glNormal3hvNV = epoxy_glNormal3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3IPROC epoxy_glNormal3i = epoxy_glNormal3i_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3IVPROC epoxy_glNormal3iv = epoxy_glNormal3iv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3SPROC epoxy_glNormal3s = epoxy_glNormal3s_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3SVPROC epoxy_glNormal3sv = epoxy_glNormal3sv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XPROC epoxy_glNormal3x = epoxy_glNormal3x_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XOESPROC epoxy_glNormal3xOES = epoxy_glNormal3xOES_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XVOESPROC epoxy_glNormal3xvOES = epoxy_glNormal3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLNORMALFORMATNVPROC epoxy_glNormalFormatNV = epoxy_glNormalFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMALP3UIPROC epoxy_glNormalP3ui = epoxy_glNormalP3ui_global_rewrite_ptr; + +PUBLIC PFNGLNORMALP3UIVPROC epoxy_glNormalP3uiv = epoxy_glNormalP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERPROC epoxy_glNormalPointer = epoxy_glNormalPointer_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTEREXTPROC epoxy_glNormalPointerEXT = epoxy_glNormalPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERLISTIBMPROC epoxy_glNormalPointerListIBM = epoxy_glNormalPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERVINTELPROC epoxy_glNormalPointervINTEL = epoxy_glNormalPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3BATIPROC epoxy_glNormalStream3bATI = epoxy_glNormalStream3bATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3BVATIPROC epoxy_glNormalStream3bvATI = epoxy_glNormalStream3bvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3DATIPROC epoxy_glNormalStream3dATI = epoxy_glNormalStream3dATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3DVATIPROC epoxy_glNormalStream3dvATI = epoxy_glNormalStream3dvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3FATIPROC epoxy_glNormalStream3fATI = epoxy_glNormalStream3fATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3FVATIPROC epoxy_glNormalStream3fvATI = epoxy_glNormalStream3fvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3IATIPROC epoxy_glNormalStream3iATI = epoxy_glNormalStream3iATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3IVATIPROC epoxy_glNormalStream3ivATI = epoxy_glNormalStream3ivATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3SATIPROC epoxy_glNormalStream3sATI = epoxy_glNormalStream3sATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3SVATIPROC epoxy_glNormalStream3svATI = epoxy_glNormalStream3svATI_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTLABELPROC epoxy_glObjectLabel = epoxy_glObjectLabel_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTLABELKHRPROC epoxy_glObjectLabelKHR = epoxy_glObjectLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPTRLABELPROC epoxy_glObjectPtrLabel = epoxy_glObjectPtrLabel_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPTRLABELKHRPROC epoxy_glObjectPtrLabelKHR = epoxy_glObjectPtrLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPURGEABLEAPPLEPROC epoxy_glObjectPurgeableAPPLE = epoxy_glObjectPurgeableAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTUNPURGEABLEAPPLEPROC epoxy_glObjectUnpurgeableAPPLE = epoxy_glObjectUnpurgeableAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLORTHOPROC epoxy_glOrtho = epoxy_glOrtho_global_rewrite_ptr; + +PUBLIC PFNGLORTHOFPROC epoxy_glOrthof = epoxy_glOrthof_global_rewrite_ptr; + +PUBLIC PFNGLORTHOFOESPROC epoxy_glOrthofOES = epoxy_glOrthofOES_global_rewrite_ptr; + +PUBLIC PFNGLORTHOXPROC epoxy_glOrthox = epoxy_glOrthox_global_rewrite_ptr; + +PUBLIC PFNGLORTHOXOESPROC epoxy_glOrthoxOES = epoxy_glOrthoxOES_global_rewrite_ptr; + +PUBLIC PFNGLPNTRIANGLESFATIPROC epoxy_glPNTrianglesfATI = epoxy_glPNTrianglesfATI_global_rewrite_ptr; + +PUBLIC PFNGLPNTRIANGLESIATIPROC epoxy_glPNTrianglesiATI = epoxy_glPNTrianglesiATI_global_rewrite_ptr; + +PUBLIC PFNGLPASSTEXCOORDATIPROC epoxy_glPassTexCoordATI = epoxy_glPassTexCoordATI_global_rewrite_ptr; + +PUBLIC PFNGLPASSTHROUGHPROC epoxy_glPassThrough = epoxy_glPassThrough_global_rewrite_ptr; + +PUBLIC PFNGLPASSTHROUGHXOESPROC epoxy_glPassThroughxOES = epoxy_glPassThroughxOES_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERFVPROC epoxy_glPatchParameterfv = epoxy_glPatchParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIPROC epoxy_glPatchParameteri = epoxy_glPatchParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIEXTPROC epoxy_glPatchParameteriEXT = epoxy_glPatchParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIOESPROC epoxy_glPatchParameteriOES = epoxy_glPatchParameteriOES_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOLORGENNVPROC epoxy_glPathColorGenNV = epoxy_glPathColorGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOMMANDSNVPROC epoxy_glPathCommandsNV = epoxy_glPathCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOORDSNVPROC epoxy_glPathCoordsNV = epoxy_glPathCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOVERDEPTHFUNCNVPROC epoxy_glPathCoverDepthFuncNV = epoxy_glPathCoverDepthFuncNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHDASHARRAYNVPROC epoxy_glPathDashArrayNV = epoxy_glPathDashArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHFOGGENNVPROC epoxy_glPathFogGenNV = epoxy_glPathFogGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHINDEXARRAYNVPROC epoxy_glPathGlyphIndexArrayNV = epoxy_glPathGlyphIndexArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHINDEXRANGENVPROC epoxy_glPathGlyphIndexRangeNV = epoxy_glPathGlyphIndexRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHRANGENVPROC epoxy_glPathGlyphRangeNV = epoxy_glPathGlyphRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHSNVPROC epoxy_glPathGlyphsNV = epoxy_glPathGlyphsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC epoxy_glPathMemoryGlyphIndexArrayNV = epoxy_glPathMemoryGlyphIndexArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERFNVPROC epoxy_glPathParameterfNV = epoxy_glPathParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERFVNVPROC epoxy_glPathParameterfvNV = epoxy_glPathParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERINVPROC epoxy_glPathParameteriNV = epoxy_glPathParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERIVNVPROC epoxy_glPathParameterivNV = epoxy_glPathParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTENCILDEPTHOFFSETNVPROC epoxy_glPathStencilDepthOffsetNV = epoxy_glPathStencilDepthOffsetNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTENCILFUNCNVPROC epoxy_glPathStencilFuncNV = epoxy_glPathStencilFuncNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTRINGNVPROC epoxy_glPathStringNV = epoxy_glPathStringNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSUBCOMMANDSNVPROC epoxy_glPathSubCommandsNV = epoxy_glPathSubCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSUBCOORDSNVPROC epoxy_glPathSubCoordsNV = epoxy_glPathSubCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHTEXGENNVPROC epoxy_glPathTexGenNV = epoxy_glPathTexGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPAUSETRANSFORMFEEDBACKPROC epoxy_glPauseTransformFeedback = epoxy_glPauseTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLPAUSETRANSFORMFEEDBACKNVPROC epoxy_glPauseTransformFeedbackNV = epoxy_glPauseTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLPIXELDATARANGENVPROC epoxy_glPixelDataRangeNV = epoxy_glPixelDataRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPFVPROC epoxy_glPixelMapfv = epoxy_glPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPUIVPROC epoxy_glPixelMapuiv = epoxy_glPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPUSVPROC epoxy_glPixelMapusv = epoxy_glPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPXPROC epoxy_glPixelMapx = epoxy_glPixelMapx_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREFPROC epoxy_glPixelStoref = epoxy_glPixelStoref_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREIPROC epoxy_glPixelStorei = epoxy_glPixelStorei_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREXPROC epoxy_glPixelStorex = epoxy_glPixelStorex_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERFSGISPROC epoxy_glPixelTexGenParameterfSGIS = epoxy_glPixelTexGenParameterfSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERFVSGISPROC epoxy_glPixelTexGenParameterfvSGIS = epoxy_glPixelTexGenParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERISGISPROC epoxy_glPixelTexGenParameteriSGIS = epoxy_glPixelTexGenParameteriSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERIVSGISPROC epoxy_glPixelTexGenParameterivSGIS = epoxy_glPixelTexGenParameterivSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENSGIXPROC epoxy_glPixelTexGenSGIX = epoxy_glPixelTexGenSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERFPROC epoxy_glPixelTransferf = epoxy_glPixelTransferf_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERIPROC epoxy_glPixelTransferi = epoxy_glPixelTransferi_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERXOESPROC epoxy_glPixelTransferxOES = epoxy_glPixelTransferxOES_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERFEXTPROC epoxy_glPixelTransformParameterfEXT = epoxy_glPixelTransformParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glPixelTransformParameterfvEXT = epoxy_glPixelTransformParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERIEXTPROC epoxy_glPixelTransformParameteriEXT = epoxy_glPixelTransformParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glPixelTransformParameterivEXT = epoxy_glPixelTransformParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELZOOMPROC epoxy_glPixelZoom = epoxy_glPixelZoom_global_rewrite_ptr; + +PUBLIC PFNGLPIXELZOOMXOESPROC epoxy_glPixelZoomxOES = epoxy_glPixelZoomxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTALONGPATHNVPROC epoxy_glPointAlongPathNV = epoxy_glPointAlongPathNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFPROC epoxy_glPointParameterf = epoxy_glPointParameterf_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFARBPROC epoxy_glPointParameterfARB = epoxy_glPointParameterfARB_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFEXTPROC epoxy_glPointParameterfEXT = epoxy_glPointParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFSGISPROC epoxy_glPointParameterfSGIS = epoxy_glPointParameterfSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVPROC epoxy_glPointParameterfv = epoxy_glPointParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVARBPROC epoxy_glPointParameterfvARB = epoxy_glPointParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVEXTPROC epoxy_glPointParameterfvEXT = epoxy_glPointParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVSGISPROC epoxy_glPointParameterfvSGIS = epoxy_glPointParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIPROC epoxy_glPointParameteri = epoxy_glPointParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERINVPROC epoxy_glPointParameteriNV = epoxy_glPointParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIVPROC epoxy_glPointParameteriv = epoxy_glPointParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIVNVPROC epoxy_glPointParameterivNV = epoxy_glPointParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXPROC epoxy_glPointParameterx = epoxy_glPointParameterx_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXOESPROC epoxy_glPointParameterxOES = epoxy_glPointParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXVPROC epoxy_glPointParameterxv = epoxy_glPointParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXVOESPROC epoxy_glPointParameterxvOES = epoxy_glPointParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEPROC epoxy_glPointSize = epoxy_glPointSize_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEPOINTEROESPROC epoxy_glPointSizePointerOES = epoxy_glPointSizePointerOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEXPROC epoxy_glPointSizex = epoxy_glPointSizex_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEXOESPROC epoxy_glPointSizexOES = epoxy_glPointSizexOES_global_rewrite_ptr; + +PUBLIC PFNGLPOLLASYNCSGIXPROC epoxy_glPollAsyncSGIX = epoxy_glPollAsyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPOLLINSTRUMENTSSGIXPROC epoxy_glPollInstrumentsSGIX = epoxy_glPollInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONMODEPROC epoxy_glPolygonMode = epoxy_glPolygonMode_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONMODENVPROC epoxy_glPolygonModeNV = epoxy_glPolygonModeNV_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETPROC epoxy_glPolygonOffset = epoxy_glPolygonOffset_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETCLAMPEXTPROC epoxy_glPolygonOffsetClampEXT = epoxy_glPolygonOffsetClampEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETEXTPROC epoxy_glPolygonOffsetEXT = epoxy_glPolygonOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETXPROC epoxy_glPolygonOffsetx = epoxy_glPolygonOffsetx_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETXOESPROC epoxy_glPolygonOffsetxOES = epoxy_glPolygonOffsetxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONSTIPPLEPROC epoxy_glPolygonStipple = epoxy_glPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLPOPATTRIBPROC epoxy_glPopAttrib = epoxy_glPopAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPOPCLIENTATTRIBPROC epoxy_glPopClientAttrib = epoxy_glPopClientAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPOPDEBUGGROUPPROC epoxy_glPopDebugGroup = epoxy_glPopDebugGroup_global_rewrite_ptr; + +PUBLIC PFNGLPOPDEBUGGROUPKHRPROC epoxy_glPopDebugGroupKHR = epoxy_glPopDebugGroupKHR_global_rewrite_ptr; + +PUBLIC PFNGLPOPGROUPMARKEREXTPROC epoxy_glPopGroupMarkerEXT = epoxy_glPopGroupMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOPMATRIXPROC epoxy_glPopMatrix = epoxy_glPopMatrix_global_rewrite_ptr; + +PUBLIC PFNGLPOPNAMEPROC epoxy_glPopName = epoxy_glPopName_global_rewrite_ptr; + +PUBLIC PFNGLPRESENTFRAMEDUALFILLNVPROC epoxy_glPresentFrameDualFillNV = epoxy_glPresentFrameDualFillNV_global_rewrite_ptr; + +PUBLIC PFNGLPRESENTFRAMEKEYEDNVPROC epoxy_glPresentFrameKeyedNV = epoxy_glPresentFrameKeyedNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXPROC epoxy_glPrimitiveBoundingBox = epoxy_glPrimitiveBoundingBox_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXARBPROC epoxy_glPrimitiveBoundingBoxARB = epoxy_glPrimitiveBoundingBoxARB_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXEXTPROC epoxy_glPrimitiveBoundingBoxEXT = epoxy_glPrimitiveBoundingBoxEXT_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXOESPROC epoxy_glPrimitiveBoundingBoxOES = epoxy_glPrimitiveBoundingBoxOES_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTINDEXPROC epoxy_glPrimitiveRestartIndex = epoxy_glPrimitiveRestartIndex_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTINDEXNVPROC epoxy_glPrimitiveRestartIndexNV = epoxy_glPrimitiveRestartIndexNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTNVPROC epoxy_glPrimitiveRestartNV = epoxy_glPrimitiveRestartNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESPROC epoxy_glPrioritizeTextures = epoxy_glPrioritizeTextures_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESEXTPROC epoxy_glPrioritizeTexturesEXT = epoxy_glPrioritizeTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESXOESPROC epoxy_glPrioritizeTexturesxOES = epoxy_glPrioritizeTexturesxOES_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBINARYPROC epoxy_glProgramBinary = epoxy_glProgramBinary_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBINARYOESPROC epoxy_glProgramBinaryOES = epoxy_glProgramBinaryOES_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC epoxy_glProgramBufferParametersIivNV = epoxy_glProgramBufferParametersIivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC epoxy_glProgramBufferParametersIuivNV = epoxy_glProgramBufferParametersIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC epoxy_glProgramBufferParametersfvNV = epoxy_glProgramBufferParametersfvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4DARBPROC epoxy_glProgramEnvParameter4dARB = epoxy_glProgramEnvParameter4dARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4DVARBPROC epoxy_glProgramEnvParameter4dvARB = epoxy_glProgramEnvParameter4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4FARBPROC epoxy_glProgramEnvParameter4fARB = epoxy_glProgramEnvParameter4fARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4FVARBPROC epoxy_glProgramEnvParameter4fvARB = epoxy_glProgramEnvParameter4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4INVPROC epoxy_glProgramEnvParameterI4iNV = epoxy_glProgramEnvParameterI4iNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4IVNVPROC epoxy_glProgramEnvParameterI4ivNV = epoxy_glProgramEnvParameterI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4UINVPROC epoxy_glProgramEnvParameterI4uiNV = epoxy_glProgramEnvParameterI4uiNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4UIVNVPROC epoxy_glProgramEnvParameterI4uivNV = epoxy_glProgramEnvParameterI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERS4FVEXTPROC epoxy_glProgramEnvParameters4fvEXT = epoxy_glProgramEnvParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERSI4IVNVPROC epoxy_glProgramEnvParametersI4ivNV = epoxy_glProgramEnvParametersI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC epoxy_glProgramEnvParametersI4uivNV = epoxy_glProgramEnvParametersI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4DARBPROC epoxy_glProgramLocalParameter4dARB = epoxy_glProgramLocalParameter4dARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4DVARBPROC epoxy_glProgramLocalParameter4dvARB = epoxy_glProgramLocalParameter4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4FARBPROC epoxy_glProgramLocalParameter4fARB = epoxy_glProgramLocalParameter4fARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4FVARBPROC epoxy_glProgramLocalParameter4fvARB = epoxy_glProgramLocalParameter4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4INVPROC epoxy_glProgramLocalParameterI4iNV = epoxy_glProgramLocalParameterI4iNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC epoxy_glProgramLocalParameterI4ivNV = epoxy_glProgramLocalParameterI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4UINVPROC epoxy_glProgramLocalParameterI4uiNV = epoxy_glProgramLocalParameterI4uiNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC epoxy_glProgramLocalParameterI4uivNV = epoxy_glProgramLocalParameterI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glProgramLocalParameters4fvEXT = epoxy_glProgramLocalParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC epoxy_glProgramLocalParametersI4ivNV = epoxy_glProgramLocalParametersI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC epoxy_glProgramLocalParametersI4uivNV = epoxy_glProgramLocalParametersI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4DNVPROC epoxy_glProgramNamedParameter4dNV = epoxy_glProgramNamedParameter4dNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC epoxy_glProgramNamedParameter4dvNV = epoxy_glProgramNamedParameter4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4FNVPROC epoxy_glProgramNamedParameter4fNV = epoxy_glProgramNamedParameter4fNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC epoxy_glProgramNamedParameter4fvNV = epoxy_glProgramNamedParameter4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4DNVPROC epoxy_glProgramParameter4dNV = epoxy_glProgramParameter4dNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4DVNVPROC epoxy_glProgramParameter4dvNV = epoxy_glProgramParameter4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4FNVPROC epoxy_glProgramParameter4fNV = epoxy_glProgramParameter4fNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4FVNVPROC epoxy_glProgramParameter4fvNV = epoxy_glProgramParameter4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIPROC epoxy_glProgramParameteri = epoxy_glProgramParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIARBPROC epoxy_glProgramParameteriARB = epoxy_glProgramParameteriARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIEXTPROC epoxy_glProgramParameteriEXT = epoxy_glProgramParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERS4DVNVPROC epoxy_glProgramParameters4dvNV = epoxy_glProgramParameters4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERS4FVNVPROC epoxy_glProgramParameters4fvNV = epoxy_glProgramParameters4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC epoxy_glProgramPathFragmentInputGenNV = epoxy_glProgramPathFragmentInputGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMSTRINGARBPROC epoxy_glProgramStringARB = epoxy_glProgramStringARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC epoxy_glProgramSubroutineParametersuivNV = epoxy_glProgramSubroutineParametersuivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DPROC epoxy_glProgramUniform1d = epoxy_glProgramUniform1d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DEXTPROC epoxy_glProgramUniform1dEXT = epoxy_glProgramUniform1dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DVPROC epoxy_glProgramUniform1dv = epoxy_glProgramUniform1dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DVEXTPROC epoxy_glProgramUniform1dvEXT = epoxy_glProgramUniform1dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FPROC epoxy_glProgramUniform1f = epoxy_glProgramUniform1f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FEXTPROC epoxy_glProgramUniform1fEXT = epoxy_glProgramUniform1fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FVPROC epoxy_glProgramUniform1fv = epoxy_glProgramUniform1fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FVEXTPROC epoxy_glProgramUniform1fvEXT = epoxy_glProgramUniform1fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IPROC epoxy_glProgramUniform1i = epoxy_glProgramUniform1i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64ARBPROC epoxy_glProgramUniform1i64ARB = epoxy_glProgramUniform1i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64NVPROC epoxy_glProgramUniform1i64NV = epoxy_glProgramUniform1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64VARBPROC epoxy_glProgramUniform1i64vARB = epoxy_glProgramUniform1i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64VNVPROC epoxy_glProgramUniform1i64vNV = epoxy_glProgramUniform1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IEXTPROC epoxy_glProgramUniform1iEXT = epoxy_glProgramUniform1iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IVPROC epoxy_glProgramUniform1iv = epoxy_glProgramUniform1iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IVEXTPROC epoxy_glProgramUniform1ivEXT = epoxy_glProgramUniform1ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIPROC epoxy_glProgramUniform1ui = epoxy_glProgramUniform1ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64ARBPROC epoxy_glProgramUniform1ui64ARB = epoxy_glProgramUniform1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64NVPROC epoxy_glProgramUniform1ui64NV = epoxy_glProgramUniform1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64VARBPROC epoxy_glProgramUniform1ui64vARB = epoxy_glProgramUniform1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64VNVPROC epoxy_glProgramUniform1ui64vNV = epoxy_glProgramUniform1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIEXTPROC epoxy_glProgramUniform1uiEXT = epoxy_glProgramUniform1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIVPROC epoxy_glProgramUniform1uiv = epoxy_glProgramUniform1uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIVEXTPROC epoxy_glProgramUniform1uivEXT = epoxy_glProgramUniform1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DPROC epoxy_glProgramUniform2d = epoxy_glProgramUniform2d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DEXTPROC epoxy_glProgramUniform2dEXT = epoxy_glProgramUniform2dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DVPROC epoxy_glProgramUniform2dv = epoxy_glProgramUniform2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DVEXTPROC epoxy_glProgramUniform2dvEXT = epoxy_glProgramUniform2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FPROC epoxy_glProgramUniform2f = epoxy_glProgramUniform2f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FEXTPROC epoxy_glProgramUniform2fEXT = epoxy_glProgramUniform2fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FVPROC epoxy_glProgramUniform2fv = epoxy_glProgramUniform2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FVEXTPROC epoxy_glProgramUniform2fvEXT = epoxy_glProgramUniform2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IPROC epoxy_glProgramUniform2i = epoxy_glProgramUniform2i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64ARBPROC epoxy_glProgramUniform2i64ARB = epoxy_glProgramUniform2i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64NVPROC epoxy_glProgramUniform2i64NV = epoxy_glProgramUniform2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64VARBPROC epoxy_glProgramUniform2i64vARB = epoxy_glProgramUniform2i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64VNVPROC epoxy_glProgramUniform2i64vNV = epoxy_glProgramUniform2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IEXTPROC epoxy_glProgramUniform2iEXT = epoxy_glProgramUniform2iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IVPROC epoxy_glProgramUniform2iv = epoxy_glProgramUniform2iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IVEXTPROC epoxy_glProgramUniform2ivEXT = epoxy_glProgramUniform2ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIPROC epoxy_glProgramUniform2ui = epoxy_glProgramUniform2ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64ARBPROC epoxy_glProgramUniform2ui64ARB = epoxy_glProgramUniform2ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64NVPROC epoxy_glProgramUniform2ui64NV = epoxy_glProgramUniform2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64VARBPROC epoxy_glProgramUniform2ui64vARB = epoxy_glProgramUniform2ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64VNVPROC epoxy_glProgramUniform2ui64vNV = epoxy_glProgramUniform2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIEXTPROC epoxy_glProgramUniform2uiEXT = epoxy_glProgramUniform2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIVPROC epoxy_glProgramUniform2uiv = epoxy_glProgramUniform2uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIVEXTPROC epoxy_glProgramUniform2uivEXT = epoxy_glProgramUniform2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DPROC epoxy_glProgramUniform3d = epoxy_glProgramUniform3d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DEXTPROC epoxy_glProgramUniform3dEXT = epoxy_glProgramUniform3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DVPROC epoxy_glProgramUniform3dv = epoxy_glProgramUniform3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DVEXTPROC epoxy_glProgramUniform3dvEXT = epoxy_glProgramUniform3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FPROC epoxy_glProgramUniform3f = epoxy_glProgramUniform3f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FEXTPROC epoxy_glProgramUniform3fEXT = epoxy_glProgramUniform3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FVPROC epoxy_glProgramUniform3fv = epoxy_glProgramUniform3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FVEXTPROC epoxy_glProgramUniform3fvEXT = epoxy_glProgramUniform3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IPROC epoxy_glProgramUniform3i = epoxy_glProgramUniform3i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64ARBPROC epoxy_glProgramUniform3i64ARB = epoxy_glProgramUniform3i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64NVPROC epoxy_glProgramUniform3i64NV = epoxy_glProgramUniform3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64VARBPROC epoxy_glProgramUniform3i64vARB = epoxy_glProgramUniform3i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64VNVPROC epoxy_glProgramUniform3i64vNV = epoxy_glProgramUniform3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IEXTPROC epoxy_glProgramUniform3iEXT = epoxy_glProgramUniform3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IVPROC epoxy_glProgramUniform3iv = epoxy_glProgramUniform3iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IVEXTPROC epoxy_glProgramUniform3ivEXT = epoxy_glProgramUniform3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIPROC epoxy_glProgramUniform3ui = epoxy_glProgramUniform3ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64ARBPROC epoxy_glProgramUniform3ui64ARB = epoxy_glProgramUniform3ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64NVPROC epoxy_glProgramUniform3ui64NV = epoxy_glProgramUniform3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64VARBPROC epoxy_glProgramUniform3ui64vARB = epoxy_glProgramUniform3ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64VNVPROC epoxy_glProgramUniform3ui64vNV = epoxy_glProgramUniform3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIEXTPROC epoxy_glProgramUniform3uiEXT = epoxy_glProgramUniform3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIVPROC epoxy_glProgramUniform3uiv = epoxy_glProgramUniform3uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIVEXTPROC epoxy_glProgramUniform3uivEXT = epoxy_glProgramUniform3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DPROC epoxy_glProgramUniform4d = epoxy_glProgramUniform4d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DEXTPROC epoxy_glProgramUniform4dEXT = epoxy_glProgramUniform4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DVPROC epoxy_glProgramUniform4dv = epoxy_glProgramUniform4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DVEXTPROC epoxy_glProgramUniform4dvEXT = epoxy_glProgramUniform4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FPROC epoxy_glProgramUniform4f = epoxy_glProgramUniform4f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FEXTPROC epoxy_glProgramUniform4fEXT = epoxy_glProgramUniform4fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FVPROC epoxy_glProgramUniform4fv = epoxy_glProgramUniform4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FVEXTPROC epoxy_glProgramUniform4fvEXT = epoxy_glProgramUniform4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IPROC epoxy_glProgramUniform4i = epoxy_glProgramUniform4i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64ARBPROC epoxy_glProgramUniform4i64ARB = epoxy_glProgramUniform4i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64NVPROC epoxy_glProgramUniform4i64NV = epoxy_glProgramUniform4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64VARBPROC epoxy_glProgramUniform4i64vARB = epoxy_glProgramUniform4i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64VNVPROC epoxy_glProgramUniform4i64vNV = epoxy_glProgramUniform4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IEXTPROC epoxy_glProgramUniform4iEXT = epoxy_glProgramUniform4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IVPROC epoxy_glProgramUniform4iv = epoxy_glProgramUniform4iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IVEXTPROC epoxy_glProgramUniform4ivEXT = epoxy_glProgramUniform4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIPROC epoxy_glProgramUniform4ui = epoxy_glProgramUniform4ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64ARBPROC epoxy_glProgramUniform4ui64ARB = epoxy_glProgramUniform4ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64NVPROC epoxy_glProgramUniform4ui64NV = epoxy_glProgramUniform4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64VARBPROC epoxy_glProgramUniform4ui64vARB = epoxy_glProgramUniform4ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64VNVPROC epoxy_glProgramUniform4ui64vNV = epoxy_glProgramUniform4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIEXTPROC epoxy_glProgramUniform4uiEXT = epoxy_glProgramUniform4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIVPROC epoxy_glProgramUniform4uiv = epoxy_glProgramUniform4uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIVEXTPROC epoxy_glProgramUniform4uivEXT = epoxy_glProgramUniform4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC epoxy_glProgramUniformHandleui64ARB = epoxy_glProgramUniformHandleui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC epoxy_glProgramUniformHandleui64NV = epoxy_glProgramUniformHandleui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC epoxy_glProgramUniformHandleui64vARB = epoxy_glProgramUniformHandleui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC epoxy_glProgramUniformHandleui64vNV = epoxy_glProgramUniformHandleui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2DVPROC epoxy_glProgramUniformMatrix2dv = epoxy_glProgramUniformMatrix2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC epoxy_glProgramUniformMatrix2dvEXT = epoxy_glProgramUniformMatrix2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2FVPROC epoxy_glProgramUniformMatrix2fv = epoxy_glProgramUniformMatrix2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC epoxy_glProgramUniformMatrix2fvEXT = epoxy_glProgramUniformMatrix2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC epoxy_glProgramUniformMatrix2x3dv = epoxy_glProgramUniformMatrix2x3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC epoxy_glProgramUniformMatrix2x3dvEXT = epoxy_glProgramUniformMatrix2x3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC epoxy_glProgramUniformMatrix2x3fv = epoxy_glProgramUniformMatrix2x3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC epoxy_glProgramUniformMatrix2x3fvEXT = epoxy_glProgramUniformMatrix2x3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC epoxy_glProgramUniformMatrix2x4dv = epoxy_glProgramUniformMatrix2x4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC epoxy_glProgramUniformMatrix2x4dvEXT = epoxy_glProgramUniformMatrix2x4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC epoxy_glProgramUniformMatrix2x4fv = epoxy_glProgramUniformMatrix2x4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC epoxy_glProgramUniformMatrix2x4fvEXT = epoxy_glProgramUniformMatrix2x4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3DVPROC epoxy_glProgramUniformMatrix3dv = epoxy_glProgramUniformMatrix3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC epoxy_glProgramUniformMatrix3dvEXT = epoxy_glProgramUniformMatrix3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3FVPROC epoxy_glProgramUniformMatrix3fv = epoxy_glProgramUniformMatrix3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC epoxy_glProgramUniformMatrix3fvEXT = epoxy_glProgramUniformMatrix3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC epoxy_glProgramUniformMatrix3x2dv = epoxy_glProgramUniformMatrix3x2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC epoxy_glProgramUniformMatrix3x2dvEXT = epoxy_glProgramUniformMatrix3x2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC epoxy_glProgramUniformMatrix3x2fv = epoxy_glProgramUniformMatrix3x2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC epoxy_glProgramUniformMatrix3x2fvEXT = epoxy_glProgramUniformMatrix3x2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC epoxy_glProgramUniformMatrix3x4dv = epoxy_glProgramUniformMatrix3x4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC epoxy_glProgramUniformMatrix3x4dvEXT = epoxy_glProgramUniformMatrix3x4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC epoxy_glProgramUniformMatrix3x4fv = epoxy_glProgramUniformMatrix3x4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC epoxy_glProgramUniformMatrix3x4fvEXT = epoxy_glProgramUniformMatrix3x4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4DVPROC epoxy_glProgramUniformMatrix4dv = epoxy_glProgramUniformMatrix4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC epoxy_glProgramUniformMatrix4dvEXT = epoxy_glProgramUniformMatrix4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4FVPROC epoxy_glProgramUniformMatrix4fv = epoxy_glProgramUniformMatrix4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC epoxy_glProgramUniformMatrix4fvEXT = epoxy_glProgramUniformMatrix4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC epoxy_glProgramUniformMatrix4x2dv = epoxy_glProgramUniformMatrix4x2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC epoxy_glProgramUniformMatrix4x2dvEXT = epoxy_glProgramUniformMatrix4x2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC epoxy_glProgramUniformMatrix4x2fv = epoxy_glProgramUniformMatrix4x2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC epoxy_glProgramUniformMatrix4x2fvEXT = epoxy_glProgramUniformMatrix4x2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC epoxy_glProgramUniformMatrix4x3dv = epoxy_glProgramUniformMatrix4x3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC epoxy_glProgramUniformMatrix4x3dvEXT = epoxy_glProgramUniformMatrix4x3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC epoxy_glProgramUniformMatrix4x3fv = epoxy_glProgramUniformMatrix4x3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC epoxy_glProgramUniformMatrix4x3fvEXT = epoxy_glProgramUniformMatrix4x3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMUI64NVPROC epoxy_glProgramUniformui64NV = epoxy_glProgramUniformui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMUI64VNVPROC epoxy_glProgramUniformui64vNV = epoxy_glProgramUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMVERTEXLIMITNVPROC epoxy_glProgramVertexLimitNV = epoxy_glProgramVertexLimitNV_global_rewrite_ptr; + +PUBLIC PFNGLPROVOKINGVERTEXPROC epoxy_glProvokingVertex = epoxy_glProvokingVertex_global_rewrite_ptr; + +PUBLIC PFNGLPROVOKINGVERTEXEXTPROC epoxy_glProvokingVertexEXT = epoxy_glProvokingVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHATTRIBPROC epoxy_glPushAttrib = epoxy_glPushAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPUSHCLIENTATTRIBPROC epoxy_glPushClientAttrib = epoxy_glPushClientAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC epoxy_glPushClientAttribDefaultEXT = epoxy_glPushClientAttribDefaultEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHDEBUGGROUPPROC epoxy_glPushDebugGroup = epoxy_glPushDebugGroup_global_rewrite_ptr; + +PUBLIC PFNGLPUSHDEBUGGROUPKHRPROC epoxy_glPushDebugGroupKHR = epoxy_glPushDebugGroupKHR_global_rewrite_ptr; + +PUBLIC PFNGLPUSHGROUPMARKEREXTPROC epoxy_glPushGroupMarkerEXT = epoxy_glPushGroupMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHMATRIXPROC epoxy_glPushMatrix = epoxy_glPushMatrix_global_rewrite_ptr; + +PUBLIC PFNGLPUSHNAMEPROC epoxy_glPushName = epoxy_glPushName_global_rewrite_ptr; + +PUBLIC PFNGLQUERYCOUNTERPROC epoxy_glQueryCounter = epoxy_glQueryCounter_global_rewrite_ptr; + +PUBLIC PFNGLQUERYCOUNTEREXTPROC epoxy_glQueryCounterEXT = epoxy_glQueryCounterEXT_global_rewrite_ptr; + +PUBLIC PFNGLQUERYMATRIXXOESPROC epoxy_glQueryMatrixxOES = epoxy_glQueryMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLQUERYOBJECTPARAMETERUIAMDPROC epoxy_glQueryObjectParameteruiAMD = epoxy_glQueryObjectParameteruiAMD_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2DPROC epoxy_glRasterPos2d = epoxy_glRasterPos2d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2DVPROC epoxy_glRasterPos2dv = epoxy_glRasterPos2dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2FPROC epoxy_glRasterPos2f = epoxy_glRasterPos2f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2FVPROC epoxy_glRasterPos2fv = epoxy_glRasterPos2fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2IPROC epoxy_glRasterPos2i = epoxy_glRasterPos2i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2IVPROC epoxy_glRasterPos2iv = epoxy_glRasterPos2iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2SPROC epoxy_glRasterPos2s = epoxy_glRasterPos2s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2SVPROC epoxy_glRasterPos2sv = epoxy_glRasterPos2sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2XOESPROC epoxy_glRasterPos2xOES = epoxy_glRasterPos2xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2XVOESPROC epoxy_glRasterPos2xvOES = epoxy_glRasterPos2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3DPROC epoxy_glRasterPos3d = epoxy_glRasterPos3d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3DVPROC epoxy_glRasterPos3dv = epoxy_glRasterPos3dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3FPROC epoxy_glRasterPos3f = epoxy_glRasterPos3f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3FVPROC epoxy_glRasterPos3fv = epoxy_glRasterPos3fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3IPROC epoxy_glRasterPos3i = epoxy_glRasterPos3i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3IVPROC epoxy_glRasterPos3iv = epoxy_glRasterPos3iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3SPROC epoxy_glRasterPos3s = epoxy_glRasterPos3s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3SVPROC epoxy_glRasterPos3sv = epoxy_glRasterPos3sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3XOESPROC epoxy_glRasterPos3xOES = epoxy_glRasterPos3xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3XVOESPROC epoxy_glRasterPos3xvOES = epoxy_glRasterPos3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4DPROC epoxy_glRasterPos4d = epoxy_glRasterPos4d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4DVPROC epoxy_glRasterPos4dv = epoxy_glRasterPos4dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4FPROC epoxy_glRasterPos4f = epoxy_glRasterPos4f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4FVPROC epoxy_glRasterPos4fv = epoxy_glRasterPos4fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4IPROC epoxy_glRasterPos4i = epoxy_glRasterPos4i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4IVPROC epoxy_glRasterPos4iv = epoxy_glRasterPos4iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4SPROC epoxy_glRasterPos4s = epoxy_glRasterPos4s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4SVPROC epoxy_glRasterPos4sv = epoxy_glRasterPos4sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4XOESPROC epoxy_glRasterPos4xOES = epoxy_glRasterPos4xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4XVOESPROC epoxy_glRasterPos4xvOES = epoxy_glRasterPos4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERSAMPLESEXTPROC epoxy_glRasterSamplesEXT = epoxy_glRasterSamplesEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERPROC epoxy_glReadBuffer = epoxy_glReadBuffer_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERINDEXEDEXTPROC epoxy_glReadBufferIndexedEXT = epoxy_glReadBufferIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERNVPROC epoxy_glReadBufferNV = epoxy_glReadBufferNV_global_rewrite_ptr; + +PUBLIC PFNGLREADINSTRUMENTSSGIXPROC epoxy_glReadInstrumentsSGIX = epoxy_glReadInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLREADPIXELSPROC epoxy_glReadPixels = epoxy_glReadPixels_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSPROC epoxy_glReadnPixels = epoxy_glReadnPixels_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSARBPROC epoxy_glReadnPixelsARB = epoxy_glReadnPixelsARB_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSEXTPROC epoxy_glReadnPixelsEXT = epoxy_glReadnPixelsEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSKHRPROC epoxy_glReadnPixelsKHR = epoxy_glReadnPixelsKHR_global_rewrite_ptr; + +PUBLIC PFNGLRECTDPROC epoxy_glRectd = epoxy_glRectd_global_rewrite_ptr; + +PUBLIC PFNGLRECTDVPROC epoxy_glRectdv = epoxy_glRectdv_global_rewrite_ptr; + +PUBLIC PFNGLRECTFPROC epoxy_glRectf = epoxy_glRectf_global_rewrite_ptr; + +PUBLIC PFNGLRECTFVPROC epoxy_glRectfv = epoxy_glRectfv_global_rewrite_ptr; + +PUBLIC PFNGLRECTIPROC epoxy_glRecti = epoxy_glRecti_global_rewrite_ptr; + +PUBLIC PFNGLRECTIVPROC epoxy_glRectiv = epoxy_glRectiv_global_rewrite_ptr; + +PUBLIC PFNGLRECTSPROC epoxy_glRects = epoxy_glRects_global_rewrite_ptr; + +PUBLIC PFNGLRECTSVPROC epoxy_glRectsv = epoxy_glRectsv_global_rewrite_ptr; + +PUBLIC PFNGLRECTXOESPROC epoxy_glRectxOES = epoxy_glRectxOES_global_rewrite_ptr; + +PUBLIC PFNGLRECTXVOESPROC epoxy_glRectxvOES = epoxy_glRectxvOES_global_rewrite_ptr; + +PUBLIC PFNGLREFERENCEPLANESGIXPROC epoxy_glReferencePlaneSGIX = epoxy_glReferencePlaneSGIX_global_rewrite_ptr; + +PUBLIC PFNGLRELEASESHADERCOMPILERPROC epoxy_glReleaseShaderCompiler = epoxy_glReleaseShaderCompiler_global_rewrite_ptr; + +PUBLIC PFNGLRENDERMODEPROC epoxy_glRenderMode = epoxy_glRenderMode_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEPROC epoxy_glRenderbufferStorage = epoxy_glRenderbufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEEXTPROC epoxy_glRenderbufferStorageEXT = epoxy_glRenderbufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glRenderbufferStorageMultisample = epoxy_glRenderbufferStorageMultisample_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC epoxy_glRenderbufferStorageMultisampleANGLE = epoxy_glRenderbufferStorageMultisampleANGLE_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC epoxy_glRenderbufferStorageMultisampleAPPLE = epoxy_glRenderbufferStorageMultisampleAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC epoxy_glRenderbufferStorageMultisampleCoverageNV = epoxy_glRenderbufferStorageMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glRenderbufferStorageMultisampleEXT = epoxy_glRenderbufferStorageMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC epoxy_glRenderbufferStorageMultisampleIMG = epoxy_glRenderbufferStorageMultisampleIMG_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC epoxy_glRenderbufferStorageMultisampleNV = epoxy_glRenderbufferStorageMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEOESPROC epoxy_glRenderbufferStorageOES = epoxy_glRenderbufferStorageOES_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEPOINTERSUNPROC epoxy_glReplacementCodePointerSUN = epoxy_glReplacementCodePointerSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUBSUNPROC epoxy_glReplacementCodeubSUN = epoxy_glReplacementCodeubSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUBVSUNPROC epoxy_glReplacementCodeubvSUN = epoxy_glReplacementCodeubvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fSUN = epoxy_glReplacementCodeuiColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fvSUN = epoxy_glReplacementCodeuiColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fSUN = epoxy_glReplacementCodeuiColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fvSUN = epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fSUN = epoxy_glReplacementCodeuiNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUISUNPROC epoxy_glReplacementCodeuiSUN = epoxy_glReplacementCodeuiSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC epoxy_glReplacementCodeuiVertex3fSUN = epoxy_glReplacementCodeuiVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC epoxy_glReplacementCodeuiVertex3fvSUN = epoxy_glReplacementCodeuiVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVSUNPROC epoxy_glReplacementCodeuivSUN = epoxy_glReplacementCodeuivSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUSSUNPROC epoxy_glReplacementCodeusSUN = epoxy_glReplacementCodeusSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUSVSUNPROC epoxy_glReplacementCodeusvSUN = epoxy_glReplacementCodeusvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREQUESTRESIDENTPROGRAMSNVPROC epoxy_glRequestResidentProgramsNV = epoxy_glRequestResidentProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLRESETHISTOGRAMPROC epoxy_glResetHistogram = epoxy_glResetHistogram_global_rewrite_ptr; + +PUBLIC PFNGLRESETHISTOGRAMEXTPROC epoxy_glResetHistogramEXT = epoxy_glResetHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLRESETMINMAXPROC epoxy_glResetMinmax = epoxy_glResetMinmax_global_rewrite_ptr; + +PUBLIC PFNGLRESETMINMAXEXTPROC epoxy_glResetMinmaxEXT = epoxy_glResetMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLRESIZEBUFFERSMESAPROC epoxy_glResizeBuffersMESA = epoxy_glResizeBuffersMESA_global_rewrite_ptr; + +PUBLIC PFNGLRESOLVEDEPTHVALUESNVPROC epoxy_glResolveDepthValuesNV = epoxy_glResolveDepthValuesNV_global_rewrite_ptr; + +PUBLIC PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC epoxy_glResolveMultisampleFramebufferAPPLE = epoxy_glResolveMultisampleFramebufferAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLRESUMETRANSFORMFEEDBACKPROC epoxy_glResumeTransformFeedback = epoxy_glResumeTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLRESUMETRANSFORMFEEDBACKNVPROC epoxy_glResumeTransformFeedbackNV = epoxy_glResumeTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLROTATEDPROC epoxy_glRotated = epoxy_glRotated_global_rewrite_ptr; + +PUBLIC PFNGLROTATEFPROC epoxy_glRotatef = epoxy_glRotatef_global_rewrite_ptr; + +PUBLIC PFNGLROTATEXPROC epoxy_glRotatex = epoxy_glRotatex_global_rewrite_ptr; + +PUBLIC PFNGLROTATEXOESPROC epoxy_glRotatexOES = epoxy_glRotatexOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEPROC epoxy_glSampleCoverage = epoxy_glSampleCoverage_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEARBPROC epoxy_glSampleCoverageARB = epoxy_glSampleCoverageARB_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEXPROC epoxy_glSampleCoveragex = epoxy_glSampleCoveragex_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEXOESPROC epoxy_glSampleCoveragexOES = epoxy_glSampleCoveragexOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMAPATIPROC epoxy_glSampleMapATI = epoxy_glSampleMapATI_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKEXTPROC epoxy_glSampleMaskEXT = epoxy_glSampleMaskEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKINDEXEDNVPROC epoxy_glSampleMaskIndexedNV = epoxy_glSampleMaskIndexedNV_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKSGISPROC epoxy_glSampleMaskSGIS = epoxy_glSampleMaskSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKIPROC epoxy_glSampleMaski = epoxy_glSampleMaski_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEPATTERNEXTPROC epoxy_glSamplePatternEXT = epoxy_glSamplePatternEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEPATTERNSGISPROC epoxy_glSamplePatternSGIS = epoxy_glSamplePatternSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVPROC epoxy_glSamplerParameterIiv = epoxy_glSamplerParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVEXTPROC epoxy_glSamplerParameterIivEXT = epoxy_glSamplerParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVOESPROC epoxy_glSamplerParameterIivOES = epoxy_glSamplerParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVPROC epoxy_glSamplerParameterIuiv = epoxy_glSamplerParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVEXTPROC epoxy_glSamplerParameterIuivEXT = epoxy_glSamplerParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVOESPROC epoxy_glSamplerParameterIuivOES = epoxy_glSamplerParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERFPROC epoxy_glSamplerParameterf = epoxy_glSamplerParameterf_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERFVPROC epoxy_glSamplerParameterfv = epoxy_glSamplerParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIPROC epoxy_glSamplerParameteri = epoxy_glSamplerParameteri_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIVPROC epoxy_glSamplerParameteriv = epoxy_glSamplerParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLSCALEDPROC epoxy_glScaled = epoxy_glScaled_global_rewrite_ptr; + +PUBLIC PFNGLSCALEFPROC epoxy_glScalef = epoxy_glScalef_global_rewrite_ptr; + +PUBLIC PFNGLSCALEXPROC epoxy_glScalex = epoxy_glScalex_global_rewrite_ptr; + +PUBLIC PFNGLSCALEXOESPROC epoxy_glScalexOES = epoxy_glScalexOES_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORPROC epoxy_glScissor = epoxy_glScissor_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORARRAYVPROC epoxy_glScissorArrayv = epoxy_glScissorArrayv_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORARRAYVNVPROC epoxy_glScissorArrayvNV = epoxy_glScissorArrayvNV_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDPROC epoxy_glScissorIndexed = epoxy_glScissorIndexed_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDNVPROC epoxy_glScissorIndexedNV = epoxy_glScissorIndexedNV_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDVPROC epoxy_glScissorIndexedv = epoxy_glScissorIndexedv_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDVNVPROC epoxy_glScissorIndexedvNV = epoxy_glScissorIndexedvNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BPROC epoxy_glSecondaryColor3b = epoxy_glSecondaryColor3b_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BEXTPROC epoxy_glSecondaryColor3bEXT = epoxy_glSecondaryColor3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BVPROC epoxy_glSecondaryColor3bv = epoxy_glSecondaryColor3bv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BVEXTPROC epoxy_glSecondaryColor3bvEXT = epoxy_glSecondaryColor3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DPROC epoxy_glSecondaryColor3d = epoxy_glSecondaryColor3d_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DEXTPROC epoxy_glSecondaryColor3dEXT = epoxy_glSecondaryColor3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DVPROC epoxy_glSecondaryColor3dv = epoxy_glSecondaryColor3dv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DVEXTPROC epoxy_glSecondaryColor3dvEXT = epoxy_glSecondaryColor3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FPROC epoxy_glSecondaryColor3f = epoxy_glSecondaryColor3f_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FEXTPROC epoxy_glSecondaryColor3fEXT = epoxy_glSecondaryColor3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FVPROC epoxy_glSecondaryColor3fv = epoxy_glSecondaryColor3fv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FVEXTPROC epoxy_glSecondaryColor3fvEXT = epoxy_glSecondaryColor3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3HNVPROC epoxy_glSecondaryColor3hNV = epoxy_glSecondaryColor3hNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3HVNVPROC epoxy_glSecondaryColor3hvNV = epoxy_glSecondaryColor3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IPROC epoxy_glSecondaryColor3i = epoxy_glSecondaryColor3i_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IEXTPROC epoxy_glSecondaryColor3iEXT = epoxy_glSecondaryColor3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IVPROC epoxy_glSecondaryColor3iv = epoxy_glSecondaryColor3iv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IVEXTPROC epoxy_glSecondaryColor3ivEXT = epoxy_glSecondaryColor3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SPROC epoxy_glSecondaryColor3s = epoxy_glSecondaryColor3s_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SEXTPROC epoxy_glSecondaryColor3sEXT = epoxy_glSecondaryColor3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SVPROC epoxy_glSecondaryColor3sv = epoxy_glSecondaryColor3sv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SVEXTPROC epoxy_glSecondaryColor3svEXT = epoxy_glSecondaryColor3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBPROC epoxy_glSecondaryColor3ub = epoxy_glSecondaryColor3ub_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBEXTPROC epoxy_glSecondaryColor3ubEXT = epoxy_glSecondaryColor3ubEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBVPROC epoxy_glSecondaryColor3ubv = epoxy_glSecondaryColor3ubv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBVEXTPROC epoxy_glSecondaryColor3ubvEXT = epoxy_glSecondaryColor3ubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIPROC epoxy_glSecondaryColor3ui = epoxy_glSecondaryColor3ui_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIEXTPROC epoxy_glSecondaryColor3uiEXT = epoxy_glSecondaryColor3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIVPROC epoxy_glSecondaryColor3uiv = epoxy_glSecondaryColor3uiv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIVEXTPROC epoxy_glSecondaryColor3uivEXT = epoxy_glSecondaryColor3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USPROC epoxy_glSecondaryColor3us = epoxy_glSecondaryColor3us_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USEXTPROC epoxy_glSecondaryColor3usEXT = epoxy_glSecondaryColor3usEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USVPROC epoxy_glSecondaryColor3usv = epoxy_glSecondaryColor3usv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USVEXTPROC epoxy_glSecondaryColor3usvEXT = epoxy_glSecondaryColor3usvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORFORMATNVPROC epoxy_glSecondaryColorFormatNV = epoxy_glSecondaryColorFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORP3UIPROC epoxy_glSecondaryColorP3ui = epoxy_glSecondaryColorP3ui_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORP3UIVPROC epoxy_glSecondaryColorP3uiv = epoxy_glSecondaryColorP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTERPROC epoxy_glSecondaryColorPointer = epoxy_glSecondaryColorPointer_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTEREXTPROC epoxy_glSecondaryColorPointerEXT = epoxy_glSecondaryColorPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTERLISTIBMPROC epoxy_glSecondaryColorPointerListIBM = epoxy_glSecondaryColorPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLSELECTBUFFERPROC epoxy_glSelectBuffer = epoxy_glSelectBuffer_global_rewrite_ptr; + +PUBLIC PFNGLSELECTPERFMONITORCOUNTERSAMDPROC epoxy_glSelectPerfMonitorCountersAMD = epoxy_glSelectPerfMonitorCountersAMD_global_rewrite_ptr; + +PUBLIC PFNGLSEPARABLEFILTER2DPROC epoxy_glSeparableFilter2D = epoxy_glSeparableFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLSEPARABLEFILTER2DEXTPROC epoxy_glSeparableFilter2DEXT = epoxy_glSeparableFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETFENCEAPPLEPROC epoxy_glSetFenceAPPLE = epoxy_glSetFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLSETFENCENVPROC epoxy_glSetFenceNV = epoxy_glSetFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLSETFRAGMENTSHADERCONSTANTATIPROC epoxy_glSetFragmentShaderConstantATI = epoxy_glSetFragmentShaderConstantATI_global_rewrite_ptr; + +PUBLIC PFNGLSETINVARIANTEXTPROC epoxy_glSetInvariantEXT = epoxy_glSetInvariantEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETLOCALCONSTANTEXTPROC epoxy_glSetLocalConstantEXT = epoxy_glSetLocalConstantEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETMULTISAMPLEFVAMDPROC epoxy_glSetMultisamplefvAMD = epoxy_glSetMultisamplefvAMD_global_rewrite_ptr; + +PUBLIC PFNGLSHADEMODELPROC epoxy_glShadeModel = epoxy_glShadeModel_global_rewrite_ptr; + +PUBLIC PFNGLSHADERBINARYPROC epoxy_glShaderBinary = epoxy_glShaderBinary_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP1EXTPROC epoxy_glShaderOp1EXT = epoxy_glShaderOp1EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP2EXTPROC epoxy_glShaderOp2EXT = epoxy_glShaderOp2EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP3EXTPROC epoxy_glShaderOp3EXT = epoxy_glShaderOp3EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSOURCEPROC epoxy_glShaderSource = epoxy_glShaderSource_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSOURCEARBPROC epoxy_glShaderSourceARB = epoxy_glShaderSourceARB_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSTORAGEBLOCKBINDINGPROC epoxy_glShaderStorageBlockBinding = epoxy_glShaderStorageBlockBinding_global_rewrite_ptr; + +PUBLIC PFNGLSHARPENTEXFUNCSGISPROC epoxy_glSharpenTexFuncSGIS = epoxy_glSharpenTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERFSGIXPROC epoxy_glSpriteParameterfSGIX = epoxy_glSpriteParameterfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERFVSGIXPROC epoxy_glSpriteParameterfvSGIX = epoxy_glSpriteParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERISGIXPROC epoxy_glSpriteParameteriSGIX = epoxy_glSpriteParameteriSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERIVSGIXPROC epoxy_glSpriteParameterivSGIX = epoxy_glSpriteParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTARTINSTRUMENTSSGIXPROC epoxy_glStartInstrumentsSGIX = epoxy_glStartInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTARTTILINGQCOMPROC epoxy_glStartTilingQCOM = epoxy_glStartTilingQCOM_global_rewrite_ptr; + +PUBLIC PFNGLSTATECAPTURENVPROC epoxy_glStateCaptureNV = epoxy_glStateCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILCLEARTAGEXTPROC epoxy_glStencilClearTagEXT = epoxy_glStencilClearTagEXT_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFILLPATHINSTANCEDNVPROC epoxy_glStencilFillPathInstancedNV = epoxy_glStencilFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFILLPATHNVPROC epoxy_glStencilFillPathNV = epoxy_glStencilFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCPROC epoxy_glStencilFunc = epoxy_glStencilFunc_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCSEPARATEPROC epoxy_glStencilFuncSeparate = epoxy_glStencilFuncSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCSEPARATEATIPROC epoxy_glStencilFuncSeparateATI = epoxy_glStencilFuncSeparateATI_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILMASKPROC epoxy_glStencilMask = epoxy_glStencilMask_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILMASKSEPARATEPROC epoxy_glStencilMaskSeparate = epoxy_glStencilMaskSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPPROC epoxy_glStencilOp = epoxy_glStencilOp_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPSEPARATEPROC epoxy_glStencilOpSeparate = epoxy_glStencilOpSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPSEPARATEATIPROC epoxy_glStencilOpSeparateATI = epoxy_glStencilOpSeparateATI_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPVALUEAMDPROC epoxy_glStencilOpValueAMD = epoxy_glStencilOpValueAMD_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC epoxy_glStencilStrokePathInstancedNV = epoxy_glStencilStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILSTROKEPATHNVPROC epoxy_glStencilStrokePathNV = epoxy_glStencilStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC epoxy_glStencilThenCoverFillPathInstancedNV = epoxy_glStencilThenCoverFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERFILLPATHNVPROC epoxy_glStencilThenCoverFillPathNV = epoxy_glStencilThenCoverFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glStencilThenCoverStrokePathInstancedNV = epoxy_glStencilThenCoverStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC epoxy_glStencilThenCoverStrokePathNV = epoxy_glStencilThenCoverStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTOPINSTRUMENTSSGIXPROC epoxy_glStopInstrumentsSGIX = epoxy_glStopInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTRINGMARKERGREMEDYPROC epoxy_glStringMarkerGREMEDY = epoxy_glStringMarkerGREMEDY_global_rewrite_ptr; + +PUBLIC PFNGLSUBPIXELPRECISIONBIASNVPROC epoxy_glSubpixelPrecisionBiasNV = epoxy_glSubpixelPrecisionBiasNV_global_rewrite_ptr; + +PUBLIC PFNGLSWIZZLEEXTPROC epoxy_glSwizzleEXT = epoxy_glSwizzleEXT_global_rewrite_ptr; + +PUBLIC PFNGLSYNCTEXTUREINTELPROC epoxy_glSyncTextureINTEL = epoxy_glSyncTextureINTEL_global_rewrite_ptr; + +PUBLIC PFNGLTAGSAMPLEBUFFERSGIXPROC epoxy_glTagSampleBufferSGIX = epoxy_glTagSampleBufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3BEXTPROC epoxy_glTangent3bEXT = epoxy_glTangent3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3BVEXTPROC epoxy_glTangent3bvEXT = epoxy_glTangent3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3DEXTPROC epoxy_glTangent3dEXT = epoxy_glTangent3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3DVEXTPROC epoxy_glTangent3dvEXT = epoxy_glTangent3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3FEXTPROC epoxy_glTangent3fEXT = epoxy_glTangent3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3FVEXTPROC epoxy_glTangent3fvEXT = epoxy_glTangent3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3IEXTPROC epoxy_glTangent3iEXT = epoxy_glTangent3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3IVEXTPROC epoxy_glTangent3ivEXT = epoxy_glTangent3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3SEXTPROC epoxy_glTangent3sEXT = epoxy_glTangent3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3SVEXTPROC epoxy_glTangent3svEXT = epoxy_glTangent3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENTPOINTEREXTPROC epoxy_glTangentPointerEXT = epoxy_glTangentPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLTBUFFERMASK3DFXPROC epoxy_glTbufferMask3DFX = epoxy_glTbufferMask3DFX_global_rewrite_ptr; + +PUBLIC PFNGLTESSELLATIONFACTORAMDPROC epoxy_glTessellationFactorAMD = epoxy_glTessellationFactorAMD_global_rewrite_ptr; + +PUBLIC PFNGLTESSELLATIONMODEAMDPROC epoxy_glTessellationModeAMD = epoxy_glTessellationModeAMD_global_rewrite_ptr; + +PUBLIC PFNGLTESTFENCEAPPLEPROC epoxy_glTestFenceAPPLE = epoxy_glTestFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTESTFENCENVPROC epoxy_glTestFenceNV = epoxy_glTestFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLTESTOBJECTAPPLEPROC epoxy_glTestObjectAPPLE = epoxy_glTestObjectAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERPROC epoxy_glTexBuffer = epoxy_glTexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERARBPROC epoxy_glTexBufferARB = epoxy_glTexBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFEREXTPROC epoxy_glTexBufferEXT = epoxy_glTexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFEROESPROC epoxy_glTexBufferOES = epoxy_glTexBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEPROC epoxy_glTexBufferRange = epoxy_glTexBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEEXTPROC epoxy_glTexBufferRangeEXT = epoxy_glTexBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEOESPROC epoxy_glTexBufferRangeOES = epoxy_glTexBufferRangeOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUMPPARAMETERFVATIPROC epoxy_glTexBumpParameterfvATI = epoxy_glTexBumpParameterfvATI_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUMPPARAMETERIVATIPROC epoxy_glTexBumpParameterivATI = epoxy_glTexBumpParameterivATI_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1BOESPROC epoxy_glTexCoord1bOES = epoxy_glTexCoord1bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1BVOESPROC epoxy_glTexCoord1bvOES = epoxy_glTexCoord1bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1DPROC epoxy_glTexCoord1d = epoxy_glTexCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1DVPROC epoxy_glTexCoord1dv = epoxy_glTexCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1FPROC epoxy_glTexCoord1f = epoxy_glTexCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1FVPROC epoxy_glTexCoord1fv = epoxy_glTexCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1HNVPROC epoxy_glTexCoord1hNV = epoxy_glTexCoord1hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1HVNVPROC epoxy_glTexCoord1hvNV = epoxy_glTexCoord1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1IPROC epoxy_glTexCoord1i = epoxy_glTexCoord1i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1IVPROC epoxy_glTexCoord1iv = epoxy_glTexCoord1iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1SPROC epoxy_glTexCoord1s = epoxy_glTexCoord1s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1SVPROC epoxy_glTexCoord1sv = epoxy_glTexCoord1sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1XOESPROC epoxy_glTexCoord1xOES = epoxy_glTexCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1XVOESPROC epoxy_glTexCoord1xvOES = epoxy_glTexCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2BOESPROC epoxy_glTexCoord2bOES = epoxy_glTexCoord2bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2BVOESPROC epoxy_glTexCoord2bvOES = epoxy_glTexCoord2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2DPROC epoxy_glTexCoord2d = epoxy_glTexCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2DVPROC epoxy_glTexCoord2dv = epoxy_glTexCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FPROC epoxy_glTexCoord2f = epoxy_glTexCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor3fVertex3fSUN = epoxy_glTexCoord2fColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor3fVertex3fvSUN = epoxy_glTexCoord2fColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC epoxy_glTexCoord2fColor4ubVertex3fSUN = epoxy_glTexCoord2fColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4ubVertex3fvSUN = epoxy_glTexCoord2fColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fNormal3fVertex3fSUN = epoxy_glTexCoord2fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fNormal3fVertex3fvSUN = epoxy_glTexCoord2fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVERTEX3FSUNPROC epoxy_glTexCoord2fVertex3fSUN = epoxy_glTexCoord2fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVERTEX3FVSUNPROC epoxy_glTexCoord2fVertex3fvSUN = epoxy_glTexCoord2fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVPROC epoxy_glTexCoord2fv = epoxy_glTexCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2HNVPROC epoxy_glTexCoord2hNV = epoxy_glTexCoord2hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2HVNVPROC epoxy_glTexCoord2hvNV = epoxy_glTexCoord2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2IPROC epoxy_glTexCoord2i = epoxy_glTexCoord2i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2IVPROC epoxy_glTexCoord2iv = epoxy_glTexCoord2iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2SPROC epoxy_glTexCoord2s = epoxy_glTexCoord2s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2SVPROC epoxy_glTexCoord2sv = epoxy_glTexCoord2sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2XOESPROC epoxy_glTexCoord2xOES = epoxy_glTexCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2XVOESPROC epoxy_glTexCoord2xvOES = epoxy_glTexCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3BOESPROC epoxy_glTexCoord3bOES = epoxy_glTexCoord3bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3BVOESPROC epoxy_glTexCoord3bvOES = epoxy_glTexCoord3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3DPROC epoxy_glTexCoord3d = epoxy_glTexCoord3d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3DVPROC epoxy_glTexCoord3dv = epoxy_glTexCoord3dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3FPROC epoxy_glTexCoord3f = epoxy_glTexCoord3f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3FVPROC epoxy_glTexCoord3fv = epoxy_glTexCoord3fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3HNVPROC epoxy_glTexCoord3hNV = epoxy_glTexCoord3hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3HVNVPROC epoxy_glTexCoord3hvNV = epoxy_glTexCoord3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3IPROC epoxy_glTexCoord3i = epoxy_glTexCoord3i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3IVPROC epoxy_glTexCoord3iv = epoxy_glTexCoord3iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3SPROC epoxy_glTexCoord3s = epoxy_glTexCoord3s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3SVPROC epoxy_glTexCoord3sv = epoxy_glTexCoord3sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3XOESPROC epoxy_glTexCoord3xOES = epoxy_glTexCoord3xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3XVOESPROC epoxy_glTexCoord3xvOES = epoxy_glTexCoord3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4BOESPROC epoxy_glTexCoord4bOES = epoxy_glTexCoord4bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4BVOESPROC epoxy_glTexCoord4bvOES = epoxy_glTexCoord4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4DPROC epoxy_glTexCoord4d = epoxy_glTexCoord4d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4DVPROC epoxy_glTexCoord4dv = epoxy_glTexCoord4dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FPROC epoxy_glTexCoord4f = epoxy_glTexCoord4f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVERTEX4FSUNPROC epoxy_glTexCoord4fVertex4fSUN = epoxy_glTexCoord4fVertex4fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVERTEX4FVSUNPROC epoxy_glTexCoord4fVertex4fvSUN = epoxy_glTexCoord4fVertex4fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVPROC epoxy_glTexCoord4fv = epoxy_glTexCoord4fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4HNVPROC epoxy_glTexCoord4hNV = epoxy_glTexCoord4hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4HVNVPROC epoxy_glTexCoord4hvNV = epoxy_glTexCoord4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4IPROC epoxy_glTexCoord4i = epoxy_glTexCoord4i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4IVPROC epoxy_glTexCoord4iv = epoxy_glTexCoord4iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4SPROC epoxy_glTexCoord4s = epoxy_glTexCoord4s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4SVPROC epoxy_glTexCoord4sv = epoxy_glTexCoord4sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4XOESPROC epoxy_glTexCoord4xOES = epoxy_glTexCoord4xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4XVOESPROC epoxy_glTexCoord4xvOES = epoxy_glTexCoord4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDFORMATNVPROC epoxy_glTexCoordFormatNV = epoxy_glTexCoordFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP1UIPROC epoxy_glTexCoordP1ui = epoxy_glTexCoordP1ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP1UIVPROC epoxy_glTexCoordP1uiv = epoxy_glTexCoordP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP2UIPROC epoxy_glTexCoordP2ui = epoxy_glTexCoordP2ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP2UIVPROC epoxy_glTexCoordP2uiv = epoxy_glTexCoordP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP3UIPROC epoxy_glTexCoordP3ui = epoxy_glTexCoordP3ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP3UIVPROC epoxy_glTexCoordP3uiv = epoxy_glTexCoordP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP4UIPROC epoxy_glTexCoordP4ui = epoxy_glTexCoordP4ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP4UIVPROC epoxy_glTexCoordP4uiv = epoxy_glTexCoordP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERPROC epoxy_glTexCoordPointer = epoxy_glTexCoordPointer_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTEREXTPROC epoxy_glTexCoordPointerEXT = epoxy_glTexCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERLISTIBMPROC epoxy_glTexCoordPointerListIBM = epoxy_glTexCoordPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERVINTELPROC epoxy_glTexCoordPointervINTEL = epoxy_glTexCoordPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVFPROC epoxy_glTexEnvf = epoxy_glTexEnvf_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVFVPROC epoxy_glTexEnvfv = epoxy_glTexEnvfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVIPROC epoxy_glTexEnvi = epoxy_glTexEnvi_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVIVPROC epoxy_glTexEnviv = epoxy_glTexEnviv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXPROC epoxy_glTexEnvx = epoxy_glTexEnvx_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXOESPROC epoxy_glTexEnvxOES = epoxy_glTexEnvxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXVPROC epoxy_glTexEnvxv = epoxy_glTexEnvxv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXVOESPROC epoxy_glTexEnvxvOES = epoxy_glTexEnvxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXFILTERFUNCSGISPROC epoxy_glTexFilterFuncSGIS = epoxy_glTexFilterFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENDPROC epoxy_glTexGend = epoxy_glTexGend_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENDVPROC epoxy_glTexGendv = epoxy_glTexGendv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFPROC epoxy_glTexGenf = epoxy_glTexGenf_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFOESPROC epoxy_glTexGenfOES = epoxy_glTexGenfOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFVPROC epoxy_glTexGenfv = epoxy_glTexGenfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFVOESPROC epoxy_glTexGenfvOES = epoxy_glTexGenfvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIPROC epoxy_glTexGeni = epoxy_glTexGeni_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIOESPROC epoxy_glTexGeniOES = epoxy_glTexGeniOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIVPROC epoxy_glTexGeniv = epoxy_glTexGeniv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIVOESPROC epoxy_glTexGenivOES = epoxy_glTexGenivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENXOESPROC epoxy_glTexGenxOES = epoxy_glTexGenxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENXVOESPROC epoxy_glTexGenxvOES = epoxy_glTexGenxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE1DPROC epoxy_glTexImage1D = epoxy_glTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DPROC epoxy_glTexImage2D = epoxy_glTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DMULTISAMPLEPROC epoxy_glTexImage2DMultisample = epoxy_glTexImage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage2DMultisampleCoverageNV = epoxy_glTexImage2DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DPROC epoxy_glTexImage3D = epoxy_glTexImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DEXTPROC epoxy_glTexImage3DEXT = epoxy_glTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DMULTISAMPLEPROC epoxy_glTexImage3DMultisample = epoxy_glTexImage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage3DMultisampleCoverageNV = epoxy_glTexImage3DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DOESPROC epoxy_glTexImage3DOES = epoxy_glTexImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE4DSGISPROC epoxy_glTexImage4DSGIS = epoxy_glTexImage4DSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXPAGECOMMITMENTARBPROC epoxy_glTexPageCommitmentARB = epoxy_glTexPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLTEXPAGECOMMITMENTEXTPROC epoxy_glTexPageCommitmentEXT = epoxy_glTexPageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVPROC epoxy_glTexParameterIiv = epoxy_glTexParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVEXTPROC epoxy_glTexParameterIivEXT = epoxy_glTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVOESPROC epoxy_glTexParameterIivOES = epoxy_glTexParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVPROC epoxy_glTexParameterIuiv = epoxy_glTexParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVEXTPROC epoxy_glTexParameterIuivEXT = epoxy_glTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVOESPROC epoxy_glTexParameterIuivOES = epoxy_glTexParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERFPROC epoxy_glTexParameterf = epoxy_glTexParameterf_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERFVPROC epoxy_glTexParameterfv = epoxy_glTexParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIPROC epoxy_glTexParameteri = epoxy_glTexParameteri_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIVPROC epoxy_glTexParameteriv = epoxy_glTexParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXPROC epoxy_glTexParameterx = epoxy_glTexParameterx_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXOESPROC epoxy_glTexParameterxOES = epoxy_glTexParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXVPROC epoxy_glTexParameterxv = epoxy_glTexParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXVOESPROC epoxy_glTexParameterxvOES = epoxy_glTexParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXRENDERBUFFERNVPROC epoxy_glTexRenderbufferNV = epoxy_glTexRenderbufferNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE1DPROC epoxy_glTexStorage1D = epoxy_glTexStorage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE1DEXTPROC epoxy_glTexStorage1DEXT = epoxy_glTexStorage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DPROC epoxy_glTexStorage2D = epoxy_glTexStorage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DEXTPROC epoxy_glTexStorage2DEXT = epoxy_glTexStorage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DMULTISAMPLEPROC epoxy_glTexStorage2DMultisample = epoxy_glTexStorage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DPROC epoxy_glTexStorage3D = epoxy_glTexStorage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DEXTPROC epoxy_glTexStorage3DEXT = epoxy_glTexStorage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DMULTISAMPLEPROC epoxy_glTexStorage3DMultisample = epoxy_glTexStorage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC epoxy_glTexStorage3DMultisampleOES = epoxy_glTexStorage3DMultisampleOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGESPARSEAMDPROC epoxy_glTexStorageSparseAMD = epoxy_glTexStorageSparseAMD_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE1DPROC epoxy_glTexSubImage1D = epoxy_glTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE1DEXTPROC epoxy_glTexSubImage1DEXT = epoxy_glTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE2DPROC epoxy_glTexSubImage2D = epoxy_glTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE2DEXTPROC epoxy_glTexSubImage2DEXT = epoxy_glTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DPROC epoxy_glTexSubImage3D = epoxy_glTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DEXTPROC epoxy_glTexSubImage3DEXT = epoxy_glTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DOESPROC epoxy_glTexSubImage3DOES = epoxy_glTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE4DSGISPROC epoxy_glTexSubImage4DSGIS = epoxy_glTexSubImage4DSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBARRIERPROC epoxy_glTextureBarrier = epoxy_glTextureBarrier_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBARRIERNVPROC epoxy_glTextureBarrierNV = epoxy_glTextureBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERPROC epoxy_glTextureBuffer = epoxy_glTextureBuffer_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFEREXTPROC epoxy_glTextureBufferEXT = epoxy_glTextureBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERRANGEPROC epoxy_glTextureBufferRange = epoxy_glTextureBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERRANGEEXTPROC epoxy_glTextureBufferRangeEXT = epoxy_glTextureBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURECOLORMASKSGISPROC epoxy_glTextureColorMaskSGIS = epoxy_glTextureColorMaskSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE1DEXTPROC epoxy_glTextureImage1DEXT = epoxy_glTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DEXTPROC epoxy_glTextureImage2DEXT = epoxy_glTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage2DMultisampleCoverageNV = epoxy_glTextureImage2DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC epoxy_glTextureImage2DMultisampleNV = epoxy_glTextureImage2DMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DEXTPROC epoxy_glTextureImage3DEXT = epoxy_glTextureImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage3DMultisampleCoverageNV = epoxy_glTextureImage3DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC epoxy_glTextureImage3DMultisampleNV = epoxy_glTextureImage3DMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURELIGHTEXTPROC epoxy_glTextureLightEXT = epoxy_glTextureLightEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREMATERIALEXTPROC epoxy_glTextureMaterialEXT = epoxy_glTextureMaterialEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURENORMALEXTPROC epoxy_glTextureNormalEXT = epoxy_glTextureNormalEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPAGECOMMITMENTEXTPROC epoxy_glTexturePageCommitmentEXT = epoxy_glTexturePageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIIVPROC epoxy_glTextureParameterIiv = epoxy_glTextureParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIIVEXTPROC epoxy_glTextureParameterIivEXT = epoxy_glTextureParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIUIVPROC epoxy_glTextureParameterIuiv = epoxy_glTextureParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIUIVEXTPROC epoxy_glTextureParameterIuivEXT = epoxy_glTextureParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFPROC epoxy_glTextureParameterf = epoxy_glTextureParameterf_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFEXTPROC epoxy_glTextureParameterfEXT = epoxy_glTextureParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFVPROC epoxy_glTextureParameterfv = epoxy_glTextureParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFVEXTPROC epoxy_glTextureParameterfvEXT = epoxy_glTextureParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIPROC epoxy_glTextureParameteri = epoxy_glTextureParameteri_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIEXTPROC epoxy_glTextureParameteriEXT = epoxy_glTextureParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIVPROC epoxy_glTextureParameteriv = epoxy_glTextureParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIVEXTPROC epoxy_glTextureParameterivEXT = epoxy_glTextureParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURERANGEAPPLEPROC epoxy_glTextureRangeAPPLE = epoxy_glTextureRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURERENDERBUFFEREXTPROC epoxy_glTextureRenderbufferEXT = epoxy_glTextureRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE1DPROC epoxy_glTextureStorage1D = epoxy_glTextureStorage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE1DEXTPROC epoxy_glTextureStorage1DEXT = epoxy_glTextureStorage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DPROC epoxy_glTextureStorage2D = epoxy_glTextureStorage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DEXTPROC epoxy_glTextureStorage2DEXT = epoxy_glTextureStorage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC epoxy_glTextureStorage2DMultisample = epoxy_glTextureStorage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC epoxy_glTextureStorage2DMultisampleEXT = epoxy_glTextureStorage2DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DPROC epoxy_glTextureStorage3D = epoxy_glTextureStorage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DEXTPROC epoxy_glTextureStorage3DEXT = epoxy_glTextureStorage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC epoxy_glTextureStorage3DMultisample = epoxy_glTextureStorage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC epoxy_glTextureStorage3DMultisampleEXT = epoxy_glTextureStorage3DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGESPARSEAMDPROC epoxy_glTextureStorageSparseAMD = epoxy_glTextureStorageSparseAMD_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE1DPROC epoxy_glTextureSubImage1D = epoxy_glTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE1DEXTPROC epoxy_glTextureSubImage1DEXT = epoxy_glTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE2DPROC epoxy_glTextureSubImage2D = epoxy_glTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE2DEXTPROC epoxy_glTextureSubImage2DEXT = epoxy_glTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE3DPROC epoxy_glTextureSubImage3D = epoxy_glTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE3DEXTPROC epoxy_glTextureSubImage3DEXT = epoxy_glTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWPROC epoxy_glTextureView = epoxy_glTextureView_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWEXTPROC epoxy_glTextureViewEXT = epoxy_glTextureViewEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWOESPROC epoxy_glTextureViewOES = epoxy_glTextureViewOES_global_rewrite_ptr; + +PUBLIC PFNGLTRACKMATRIXNVPROC epoxy_glTrackMatrixNV = epoxy_glTrackMatrixNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC epoxy_glTransformFeedbackAttribsNV = epoxy_glTransformFeedbackAttribsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC epoxy_glTransformFeedbackBufferBase = epoxy_glTransformFeedbackBufferBase_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC epoxy_glTransformFeedbackBufferRange = epoxy_glTransformFeedbackBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC epoxy_glTransformFeedbackStreamAttribsNV = epoxy_glTransformFeedbackStreamAttribsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSPROC epoxy_glTransformFeedbackVaryings = epoxy_glTransformFeedbackVaryings_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC epoxy_glTransformFeedbackVaryingsEXT = epoxy_glTransformFeedbackVaryingsEXT_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC epoxy_glTransformFeedbackVaryingsNV = epoxy_glTransformFeedbackVaryingsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMPATHNVPROC epoxy_glTransformPathNV = epoxy_glTransformPathNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEDPROC epoxy_glTranslated = epoxy_glTranslated_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEFPROC epoxy_glTranslatef = epoxy_glTranslatef_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEXPROC epoxy_glTranslatex = epoxy_glTranslatex_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEXOESPROC epoxy_glTranslatexOES = epoxy_glTranslatexOES_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1DPROC epoxy_glUniform1d = epoxy_glUniform1d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1DVPROC epoxy_glUniform1dv = epoxy_glUniform1dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FPROC epoxy_glUniform1f = epoxy_glUniform1f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FARBPROC epoxy_glUniform1fARB = epoxy_glUniform1fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FVPROC epoxy_glUniform1fv = epoxy_glUniform1fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FVARBPROC epoxy_glUniform1fvARB = epoxy_glUniform1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IPROC epoxy_glUniform1i = epoxy_glUniform1i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64ARBPROC epoxy_glUniform1i64ARB = epoxy_glUniform1i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64NVPROC epoxy_glUniform1i64NV = epoxy_glUniform1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64VARBPROC epoxy_glUniform1i64vARB = epoxy_glUniform1i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64VNVPROC epoxy_glUniform1i64vNV = epoxy_glUniform1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IARBPROC epoxy_glUniform1iARB = epoxy_glUniform1iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IVPROC epoxy_glUniform1iv = epoxy_glUniform1iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IVARBPROC epoxy_glUniform1ivARB = epoxy_glUniform1ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIPROC epoxy_glUniform1ui = epoxy_glUniform1ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64ARBPROC epoxy_glUniform1ui64ARB = epoxy_glUniform1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64NVPROC epoxy_glUniform1ui64NV = epoxy_glUniform1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64VARBPROC epoxy_glUniform1ui64vARB = epoxy_glUniform1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64VNVPROC epoxy_glUniform1ui64vNV = epoxy_glUniform1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIEXTPROC epoxy_glUniform1uiEXT = epoxy_glUniform1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIVPROC epoxy_glUniform1uiv = epoxy_glUniform1uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIVEXTPROC epoxy_glUniform1uivEXT = epoxy_glUniform1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2DPROC epoxy_glUniform2d = epoxy_glUniform2d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2DVPROC epoxy_glUniform2dv = epoxy_glUniform2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FPROC epoxy_glUniform2f = epoxy_glUniform2f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FARBPROC epoxy_glUniform2fARB = epoxy_glUniform2fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FVPROC epoxy_glUniform2fv = epoxy_glUniform2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FVARBPROC epoxy_glUniform2fvARB = epoxy_glUniform2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IPROC epoxy_glUniform2i = epoxy_glUniform2i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64ARBPROC epoxy_glUniform2i64ARB = epoxy_glUniform2i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64NVPROC epoxy_glUniform2i64NV = epoxy_glUniform2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64VARBPROC epoxy_glUniform2i64vARB = epoxy_glUniform2i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64VNVPROC epoxy_glUniform2i64vNV = epoxy_glUniform2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IARBPROC epoxy_glUniform2iARB = epoxy_glUniform2iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IVPROC epoxy_glUniform2iv = epoxy_glUniform2iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IVARBPROC epoxy_glUniform2ivARB = epoxy_glUniform2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIPROC epoxy_glUniform2ui = epoxy_glUniform2ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64ARBPROC epoxy_glUniform2ui64ARB = epoxy_glUniform2ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64NVPROC epoxy_glUniform2ui64NV = epoxy_glUniform2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64VARBPROC epoxy_glUniform2ui64vARB = epoxy_glUniform2ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64VNVPROC epoxy_glUniform2ui64vNV = epoxy_glUniform2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIEXTPROC epoxy_glUniform2uiEXT = epoxy_glUniform2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIVPROC epoxy_glUniform2uiv = epoxy_glUniform2uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIVEXTPROC epoxy_glUniform2uivEXT = epoxy_glUniform2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3DPROC epoxy_glUniform3d = epoxy_glUniform3d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3DVPROC epoxy_glUniform3dv = epoxy_glUniform3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FPROC epoxy_glUniform3f = epoxy_glUniform3f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FARBPROC epoxy_glUniform3fARB = epoxy_glUniform3fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FVPROC epoxy_glUniform3fv = epoxy_glUniform3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FVARBPROC epoxy_glUniform3fvARB = epoxy_glUniform3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IPROC epoxy_glUniform3i = epoxy_glUniform3i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64ARBPROC epoxy_glUniform3i64ARB = epoxy_glUniform3i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64NVPROC epoxy_glUniform3i64NV = epoxy_glUniform3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64VARBPROC epoxy_glUniform3i64vARB = epoxy_glUniform3i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64VNVPROC epoxy_glUniform3i64vNV = epoxy_glUniform3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IARBPROC epoxy_glUniform3iARB = epoxy_glUniform3iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IVPROC epoxy_glUniform3iv = epoxy_glUniform3iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IVARBPROC epoxy_glUniform3ivARB = epoxy_glUniform3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIPROC epoxy_glUniform3ui = epoxy_glUniform3ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64ARBPROC epoxy_glUniform3ui64ARB = epoxy_glUniform3ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64NVPROC epoxy_glUniform3ui64NV = epoxy_glUniform3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64VARBPROC epoxy_glUniform3ui64vARB = epoxy_glUniform3ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64VNVPROC epoxy_glUniform3ui64vNV = epoxy_glUniform3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIEXTPROC epoxy_glUniform3uiEXT = epoxy_glUniform3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIVPROC epoxy_glUniform3uiv = epoxy_glUniform3uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIVEXTPROC epoxy_glUniform3uivEXT = epoxy_glUniform3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4DPROC epoxy_glUniform4d = epoxy_glUniform4d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4DVPROC epoxy_glUniform4dv = epoxy_glUniform4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FPROC epoxy_glUniform4f = epoxy_glUniform4f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FARBPROC epoxy_glUniform4fARB = epoxy_glUniform4fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FVPROC epoxy_glUniform4fv = epoxy_glUniform4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FVARBPROC epoxy_glUniform4fvARB = epoxy_glUniform4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IPROC epoxy_glUniform4i = epoxy_glUniform4i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64ARBPROC epoxy_glUniform4i64ARB = epoxy_glUniform4i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64NVPROC epoxy_glUniform4i64NV = epoxy_glUniform4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64VARBPROC epoxy_glUniform4i64vARB = epoxy_glUniform4i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64VNVPROC epoxy_glUniform4i64vNV = epoxy_glUniform4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IARBPROC epoxy_glUniform4iARB = epoxy_glUniform4iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IVPROC epoxy_glUniform4iv = epoxy_glUniform4iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IVARBPROC epoxy_glUniform4ivARB = epoxy_glUniform4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIPROC epoxy_glUniform4ui = epoxy_glUniform4ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64ARBPROC epoxy_glUniform4ui64ARB = epoxy_glUniform4ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64NVPROC epoxy_glUniform4ui64NV = epoxy_glUniform4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64VARBPROC epoxy_glUniform4ui64vARB = epoxy_glUniform4ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64VNVPROC epoxy_glUniform4ui64vNV = epoxy_glUniform4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIEXTPROC epoxy_glUniform4uiEXT = epoxy_glUniform4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIVPROC epoxy_glUniform4uiv = epoxy_glUniform4uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIVEXTPROC epoxy_glUniform4uivEXT = epoxy_glUniform4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMBLOCKBINDINGPROC epoxy_glUniformBlockBinding = epoxy_glUniformBlockBinding_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMBUFFEREXTPROC epoxy_glUniformBufferEXT = epoxy_glUniformBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64ARBPROC epoxy_glUniformHandleui64ARB = epoxy_glUniformHandleui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64NVPROC epoxy_glUniformHandleui64NV = epoxy_glUniformHandleui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64VARBPROC epoxy_glUniformHandleui64vARB = epoxy_glUniformHandleui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64VNVPROC epoxy_glUniformHandleui64vNV = epoxy_glUniformHandleui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2DVPROC epoxy_glUniformMatrix2dv = epoxy_glUniformMatrix2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2FVPROC epoxy_glUniformMatrix2fv = epoxy_glUniformMatrix2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2FVARBPROC epoxy_glUniformMatrix2fvARB = epoxy_glUniformMatrix2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3DVPROC epoxy_glUniformMatrix2x3dv = epoxy_glUniformMatrix2x3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3FVPROC epoxy_glUniformMatrix2x3fv = epoxy_glUniformMatrix2x3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3FVNVPROC epoxy_glUniformMatrix2x3fvNV = epoxy_glUniformMatrix2x3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4DVPROC epoxy_glUniformMatrix2x4dv = epoxy_glUniformMatrix2x4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4FVPROC epoxy_glUniformMatrix2x4fv = epoxy_glUniformMatrix2x4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4FVNVPROC epoxy_glUniformMatrix2x4fvNV = epoxy_glUniformMatrix2x4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3DVPROC epoxy_glUniformMatrix3dv = epoxy_glUniformMatrix3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3FVPROC epoxy_glUniformMatrix3fv = epoxy_glUniformMatrix3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3FVARBPROC epoxy_glUniformMatrix3fvARB = epoxy_glUniformMatrix3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2DVPROC epoxy_glUniformMatrix3x2dv = epoxy_glUniformMatrix3x2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2FVPROC epoxy_glUniformMatrix3x2fv = epoxy_glUniformMatrix3x2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2FVNVPROC epoxy_glUniformMatrix3x2fvNV = epoxy_glUniformMatrix3x2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4DVPROC epoxy_glUniformMatrix3x4dv = epoxy_glUniformMatrix3x4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4FVPROC epoxy_glUniformMatrix3x4fv = epoxy_glUniformMatrix3x4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4FVNVPROC epoxy_glUniformMatrix3x4fvNV = epoxy_glUniformMatrix3x4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4DVPROC epoxy_glUniformMatrix4dv = epoxy_glUniformMatrix4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4FVPROC epoxy_glUniformMatrix4fv = epoxy_glUniformMatrix4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4FVARBPROC epoxy_glUniformMatrix4fvARB = epoxy_glUniformMatrix4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2DVPROC epoxy_glUniformMatrix4x2dv = epoxy_glUniformMatrix4x2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2FVPROC epoxy_glUniformMatrix4x2fv = epoxy_glUniformMatrix4x2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2FVNVPROC epoxy_glUniformMatrix4x2fvNV = epoxy_glUniformMatrix4x2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3DVPROC epoxy_glUniformMatrix4x3dv = epoxy_glUniformMatrix4x3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3FVPROC epoxy_glUniformMatrix4x3fv = epoxy_glUniformMatrix4x3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3FVNVPROC epoxy_glUniformMatrix4x3fvNV = epoxy_glUniformMatrix4x3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMSUBROUTINESUIVPROC epoxy_glUniformSubroutinesuiv = epoxy_glUniformSubroutinesuiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMUI64NVPROC epoxy_glUniformui64NV = epoxy_glUniformui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMUI64VNVPROC epoxy_glUniformui64vNV = epoxy_glUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNLOCKARRAYSEXTPROC epoxy_glUnlockArraysEXT = epoxy_glUnlockArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFERPROC epoxy_glUnmapBuffer = epoxy_glUnmapBuffer_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFERARBPROC epoxy_glUnmapBufferARB = epoxy_glUnmapBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFEROESPROC epoxy_glUnmapBufferOES = epoxy_glUnmapBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPNAMEDBUFFERPROC epoxy_glUnmapNamedBuffer = epoxy_glUnmapNamedBuffer_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPNAMEDBUFFEREXTPROC epoxy_glUnmapNamedBufferEXT = epoxy_glUnmapNamedBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPOBJECTBUFFERATIPROC epoxy_glUnmapObjectBufferATI = epoxy_glUnmapObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPTEXTURE2DINTELPROC epoxy_glUnmapTexture2DINTEL = epoxy_glUnmapTexture2DINTEL_global_rewrite_ptr; + +PUBLIC PFNGLUPDATEOBJECTBUFFERATIPROC epoxy_glUpdateObjectBufferATI = epoxy_glUpdateObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMPROC epoxy_glUseProgram = epoxy_glUseProgram_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMOBJECTARBPROC epoxy_glUseProgramObjectARB = epoxy_glUseProgramObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMSTAGESPROC epoxy_glUseProgramStages = epoxy_glUseProgramStages_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMSTAGESEXTPROC epoxy_glUseProgramStagesEXT = epoxy_glUseProgramStagesEXT_global_rewrite_ptr; + +PUBLIC PFNGLUSESHADERPROGRAMEXTPROC epoxy_glUseShaderProgramEXT = epoxy_glUseShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUFININVPROC epoxy_glVDPAUFiniNV = epoxy_glVDPAUFiniNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUGETSURFACEIVNVPROC epoxy_glVDPAUGetSurfaceivNV = epoxy_glVDPAUGetSurfaceivNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUINITNVPROC epoxy_glVDPAUInitNV = epoxy_glVDPAUInitNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUISSURFACENVPROC epoxy_glVDPAUIsSurfaceNV = epoxy_glVDPAUIsSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUMAPSURFACESNVPROC epoxy_glVDPAUMapSurfacesNV = epoxy_glVDPAUMapSurfacesNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC epoxy_glVDPAURegisterOutputSurfaceNV = epoxy_glVDPAURegisterOutputSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUREGISTERVIDEOSURFACENVPROC epoxy_glVDPAURegisterVideoSurfaceNV = epoxy_glVDPAURegisterVideoSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUSURFACEACCESSNVPROC epoxy_glVDPAUSurfaceAccessNV = epoxy_glVDPAUSurfaceAccessNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUUNMAPSURFACESNVPROC epoxy_glVDPAUUnmapSurfacesNV = epoxy_glVDPAUUnmapSurfacesNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUUNREGISTERSURFACENVPROC epoxy_glVDPAUUnregisterSurfaceNV = epoxy_glVDPAUUnregisterSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPROC epoxy_glValidateProgram = epoxy_glValidateProgram_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMARBPROC epoxy_glValidateProgramARB = epoxy_glValidateProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPIPELINEPROC epoxy_glValidateProgramPipeline = epoxy_glValidateProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPIPELINEEXTPROC epoxy_glValidateProgramPipelineEXT = epoxy_glValidateProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTARRAYOBJECTATIPROC epoxy_glVariantArrayObjectATI = epoxy_glVariantArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTPOINTEREXTPROC epoxy_glVariantPointerEXT = epoxy_glVariantPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTBVEXTPROC epoxy_glVariantbvEXT = epoxy_glVariantbvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTDVEXTPROC epoxy_glVariantdvEXT = epoxy_glVariantdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTFVEXTPROC epoxy_glVariantfvEXT = epoxy_glVariantfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTIVEXTPROC epoxy_glVariantivEXT = epoxy_glVariantivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTSVEXTPROC epoxy_glVariantsvEXT = epoxy_glVariantsvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUBVEXTPROC epoxy_glVariantubvEXT = epoxy_glVariantubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUIVEXTPROC epoxy_glVariantuivEXT = epoxy_glVariantuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUSVEXTPROC epoxy_glVariantusvEXT = epoxy_glVariantusvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2BOESPROC epoxy_glVertex2bOES = epoxy_glVertex2bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2BVOESPROC epoxy_glVertex2bvOES = epoxy_glVertex2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2DPROC epoxy_glVertex2d = epoxy_glVertex2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2DVPROC epoxy_glVertex2dv = epoxy_glVertex2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2FPROC epoxy_glVertex2f = epoxy_glVertex2f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2FVPROC epoxy_glVertex2fv = epoxy_glVertex2fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2HNVPROC epoxy_glVertex2hNV = epoxy_glVertex2hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2HVNVPROC epoxy_glVertex2hvNV = epoxy_glVertex2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2IPROC epoxy_glVertex2i = epoxy_glVertex2i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2IVPROC epoxy_glVertex2iv = epoxy_glVertex2iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2SPROC epoxy_glVertex2s = epoxy_glVertex2s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2SVPROC epoxy_glVertex2sv = epoxy_glVertex2sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2XOESPROC epoxy_glVertex2xOES = epoxy_glVertex2xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2XVOESPROC epoxy_glVertex2xvOES = epoxy_glVertex2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3BOESPROC epoxy_glVertex3bOES = epoxy_glVertex3bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3BVOESPROC epoxy_glVertex3bvOES = epoxy_glVertex3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3DPROC epoxy_glVertex3d = epoxy_glVertex3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3DVPROC epoxy_glVertex3dv = epoxy_glVertex3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3FPROC epoxy_glVertex3f = epoxy_glVertex3f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3FVPROC epoxy_glVertex3fv = epoxy_glVertex3fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3HNVPROC epoxy_glVertex3hNV = epoxy_glVertex3hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3HVNVPROC epoxy_glVertex3hvNV = epoxy_glVertex3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3IPROC epoxy_glVertex3i = epoxy_glVertex3i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3IVPROC epoxy_glVertex3iv = epoxy_glVertex3iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3SPROC epoxy_glVertex3s = epoxy_glVertex3s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3SVPROC epoxy_glVertex3sv = epoxy_glVertex3sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3XOESPROC epoxy_glVertex3xOES = epoxy_glVertex3xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3XVOESPROC epoxy_glVertex3xvOES = epoxy_glVertex3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4BOESPROC epoxy_glVertex4bOES = epoxy_glVertex4bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4BVOESPROC epoxy_glVertex4bvOES = epoxy_glVertex4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4DPROC epoxy_glVertex4d = epoxy_glVertex4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4DVPROC epoxy_glVertex4dv = epoxy_glVertex4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4FPROC epoxy_glVertex4f = epoxy_glVertex4f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4FVPROC epoxy_glVertex4fv = epoxy_glVertex4fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4HNVPROC epoxy_glVertex4hNV = epoxy_glVertex4hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4HVNVPROC epoxy_glVertex4hvNV = epoxy_glVertex4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4IPROC epoxy_glVertex4i = epoxy_glVertex4i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4IVPROC epoxy_glVertex4iv = epoxy_glVertex4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4SPROC epoxy_glVertex4s = epoxy_glVertex4s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4SVPROC epoxy_glVertex4sv = epoxy_glVertex4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4XOESPROC epoxy_glVertex4xOES = epoxy_glVertex4xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4XVOESPROC epoxy_glVertex4xvOES = epoxy_glVertex4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBBINDINGPROC epoxy_glVertexArrayAttribBinding = epoxy_glVertexArrayAttribBinding_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBFORMATPROC epoxy_glVertexArrayAttribFormat = epoxy_glVertexArrayAttribFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBIFORMATPROC epoxy_glVertexArrayAttribIFormat = epoxy_glVertexArrayAttribIFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBLFORMATPROC epoxy_glVertexArrayAttribLFormat = epoxy_glVertexArrayAttribLFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC epoxy_glVertexArrayBindVertexBufferEXT = epoxy_glVertexArrayBindVertexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYBINDINGDIVISORPROC epoxy_glVertexArrayBindingDivisor = epoxy_glVertexArrayBindingDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYCOLOROFFSETEXTPROC epoxy_glVertexArrayColorOffsetEXT = epoxy_glVertexArrayColorOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC epoxy_glVertexArrayEdgeFlagOffsetEXT = epoxy_glVertexArrayEdgeFlagOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYELEMENTBUFFERPROC epoxy_glVertexArrayElementBuffer = epoxy_glVertexArrayElementBuffer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC epoxy_glVertexArrayFogCoordOffsetEXT = epoxy_glVertexArrayFogCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYINDEXOFFSETEXTPROC epoxy_glVertexArrayIndexOffsetEXT = epoxy_glVertexArrayIndexOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC epoxy_glVertexArrayMultiTexCoordOffsetEXT = epoxy_glVertexArrayMultiTexCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYNORMALOFFSETEXTPROC epoxy_glVertexArrayNormalOffsetEXT = epoxy_glVertexArrayNormalOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYPARAMETERIAPPLEPROC epoxy_glVertexArrayParameteriAPPLE = epoxy_glVertexArrayParameteriAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYRANGEAPPLEPROC epoxy_glVertexArrayRangeAPPLE = epoxy_glVertexArrayRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYRANGENVPROC epoxy_glVertexArrayRangeNV = epoxy_glVertexArrayRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC epoxy_glVertexArraySecondaryColorOffsetEXT = epoxy_glVertexArraySecondaryColorOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC epoxy_glVertexArrayTexCoordOffsetEXT = epoxy_glVertexArrayTexCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC epoxy_glVertexArrayVertexAttribBindingEXT = epoxy_glVertexArrayVertexAttribBindingEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexArrayVertexAttribDivisorEXT = epoxy_glVertexArrayVertexAttribDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC epoxy_glVertexArrayVertexAttribFormatEXT = epoxy_glVertexArrayVertexAttribFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC epoxy_glVertexArrayVertexAttribIFormatEXT = epoxy_glVertexArrayVertexAttribIFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC epoxy_glVertexArrayVertexAttribIOffsetEXT = epoxy_glVertexArrayVertexAttribIOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC epoxy_glVertexArrayVertexAttribLFormatEXT = epoxy_glVertexArrayVertexAttribLFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC epoxy_glVertexArrayVertexAttribLOffsetEXT = epoxy_glVertexArrayVertexAttribLOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC epoxy_glVertexArrayVertexAttribOffsetEXT = epoxy_glVertexArrayVertexAttribOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC epoxy_glVertexArrayVertexBindingDivisorEXT = epoxy_glVertexArrayVertexBindingDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBUFFERPROC epoxy_glVertexArrayVertexBuffer = epoxy_glVertexArrayVertexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBUFFERSPROC epoxy_glVertexArrayVertexBuffers = epoxy_glVertexArrayVertexBuffers_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC epoxy_glVertexArrayVertexOffsetEXT = epoxy_glVertexArrayVertexOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DPROC epoxy_glVertexAttrib1d = epoxy_glVertexAttrib1d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DARBPROC epoxy_glVertexAttrib1dARB = epoxy_glVertexAttrib1dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DNVPROC epoxy_glVertexAttrib1dNV = epoxy_glVertexAttrib1dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVPROC epoxy_glVertexAttrib1dv = epoxy_glVertexAttrib1dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVARBPROC epoxy_glVertexAttrib1dvARB = epoxy_glVertexAttrib1dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVNVPROC epoxy_glVertexAttrib1dvNV = epoxy_glVertexAttrib1dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FPROC epoxy_glVertexAttrib1f = epoxy_glVertexAttrib1f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FARBPROC epoxy_glVertexAttrib1fARB = epoxy_glVertexAttrib1fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FNVPROC epoxy_glVertexAttrib1fNV = epoxy_glVertexAttrib1fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVPROC epoxy_glVertexAttrib1fv = epoxy_glVertexAttrib1fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVARBPROC epoxy_glVertexAttrib1fvARB = epoxy_glVertexAttrib1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVNVPROC epoxy_glVertexAttrib1fvNV = epoxy_glVertexAttrib1fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1HNVPROC epoxy_glVertexAttrib1hNV = epoxy_glVertexAttrib1hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1HVNVPROC epoxy_glVertexAttrib1hvNV = epoxy_glVertexAttrib1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SPROC epoxy_glVertexAttrib1s = epoxy_glVertexAttrib1s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SARBPROC epoxy_glVertexAttrib1sARB = epoxy_glVertexAttrib1sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SNVPROC epoxy_glVertexAttrib1sNV = epoxy_glVertexAttrib1sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVPROC epoxy_glVertexAttrib1sv = epoxy_glVertexAttrib1sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVARBPROC epoxy_glVertexAttrib1svARB = epoxy_glVertexAttrib1svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVNVPROC epoxy_glVertexAttrib1svNV = epoxy_glVertexAttrib1svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DPROC epoxy_glVertexAttrib2d = epoxy_glVertexAttrib2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DARBPROC epoxy_glVertexAttrib2dARB = epoxy_glVertexAttrib2dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DNVPROC epoxy_glVertexAttrib2dNV = epoxy_glVertexAttrib2dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVPROC epoxy_glVertexAttrib2dv = epoxy_glVertexAttrib2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVARBPROC epoxy_glVertexAttrib2dvARB = epoxy_glVertexAttrib2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVNVPROC epoxy_glVertexAttrib2dvNV = epoxy_glVertexAttrib2dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FPROC epoxy_glVertexAttrib2f = epoxy_glVertexAttrib2f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FARBPROC epoxy_glVertexAttrib2fARB = epoxy_glVertexAttrib2fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FNVPROC epoxy_glVertexAttrib2fNV = epoxy_glVertexAttrib2fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVPROC epoxy_glVertexAttrib2fv = epoxy_glVertexAttrib2fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVARBPROC epoxy_glVertexAttrib2fvARB = epoxy_glVertexAttrib2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVNVPROC epoxy_glVertexAttrib2fvNV = epoxy_glVertexAttrib2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2HNVPROC epoxy_glVertexAttrib2hNV = epoxy_glVertexAttrib2hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2HVNVPROC epoxy_glVertexAttrib2hvNV = epoxy_glVertexAttrib2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SPROC epoxy_glVertexAttrib2s = epoxy_glVertexAttrib2s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SARBPROC epoxy_glVertexAttrib2sARB = epoxy_glVertexAttrib2sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SNVPROC epoxy_glVertexAttrib2sNV = epoxy_glVertexAttrib2sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVPROC epoxy_glVertexAttrib2sv = epoxy_glVertexAttrib2sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVARBPROC epoxy_glVertexAttrib2svARB = epoxy_glVertexAttrib2svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVNVPROC epoxy_glVertexAttrib2svNV = epoxy_glVertexAttrib2svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DPROC epoxy_glVertexAttrib3d = epoxy_glVertexAttrib3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DARBPROC epoxy_glVertexAttrib3dARB = epoxy_glVertexAttrib3dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DNVPROC epoxy_glVertexAttrib3dNV = epoxy_glVertexAttrib3dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVPROC epoxy_glVertexAttrib3dv = epoxy_glVertexAttrib3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVARBPROC epoxy_glVertexAttrib3dvARB = epoxy_glVertexAttrib3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVNVPROC epoxy_glVertexAttrib3dvNV = epoxy_glVertexAttrib3dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FPROC epoxy_glVertexAttrib3f = epoxy_glVertexAttrib3f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FARBPROC epoxy_glVertexAttrib3fARB = epoxy_glVertexAttrib3fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FNVPROC epoxy_glVertexAttrib3fNV = epoxy_glVertexAttrib3fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVPROC epoxy_glVertexAttrib3fv = epoxy_glVertexAttrib3fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVARBPROC epoxy_glVertexAttrib3fvARB = epoxy_glVertexAttrib3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVNVPROC epoxy_glVertexAttrib3fvNV = epoxy_glVertexAttrib3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3HNVPROC epoxy_glVertexAttrib3hNV = epoxy_glVertexAttrib3hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3HVNVPROC epoxy_glVertexAttrib3hvNV = epoxy_glVertexAttrib3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SPROC epoxy_glVertexAttrib3s = epoxy_glVertexAttrib3s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SARBPROC epoxy_glVertexAttrib3sARB = epoxy_glVertexAttrib3sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SNVPROC epoxy_glVertexAttrib3sNV = epoxy_glVertexAttrib3sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVPROC epoxy_glVertexAttrib3sv = epoxy_glVertexAttrib3sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVARBPROC epoxy_glVertexAttrib3svARB = epoxy_glVertexAttrib3svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVNVPROC epoxy_glVertexAttrib3svNV = epoxy_glVertexAttrib3svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NBVPROC epoxy_glVertexAttrib4Nbv = epoxy_glVertexAttrib4Nbv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NBVARBPROC epoxy_glVertexAttrib4NbvARB = epoxy_glVertexAttrib4NbvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NIVPROC epoxy_glVertexAttrib4Niv = epoxy_glVertexAttrib4Niv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NIVARBPROC epoxy_glVertexAttrib4NivARB = epoxy_glVertexAttrib4NivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NSVPROC epoxy_glVertexAttrib4Nsv = epoxy_glVertexAttrib4Nsv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NSVARBPROC epoxy_glVertexAttrib4NsvARB = epoxy_glVertexAttrib4NsvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBPROC epoxy_glVertexAttrib4Nub = epoxy_glVertexAttrib4Nub_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBARBPROC epoxy_glVertexAttrib4NubARB = epoxy_glVertexAttrib4NubARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBVPROC epoxy_glVertexAttrib4Nubv = epoxy_glVertexAttrib4Nubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBVARBPROC epoxy_glVertexAttrib4NubvARB = epoxy_glVertexAttrib4NubvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUIVPROC epoxy_glVertexAttrib4Nuiv = epoxy_glVertexAttrib4Nuiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUIVARBPROC epoxy_glVertexAttrib4NuivARB = epoxy_glVertexAttrib4NuivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUSVPROC epoxy_glVertexAttrib4Nusv = epoxy_glVertexAttrib4Nusv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUSVARBPROC epoxy_glVertexAttrib4NusvARB = epoxy_glVertexAttrib4NusvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4BVPROC epoxy_glVertexAttrib4bv = epoxy_glVertexAttrib4bv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4BVARBPROC epoxy_glVertexAttrib4bvARB = epoxy_glVertexAttrib4bvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DPROC epoxy_glVertexAttrib4d = epoxy_glVertexAttrib4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DARBPROC epoxy_glVertexAttrib4dARB = epoxy_glVertexAttrib4dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DNVPROC epoxy_glVertexAttrib4dNV = epoxy_glVertexAttrib4dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVPROC epoxy_glVertexAttrib4dv = epoxy_glVertexAttrib4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVARBPROC epoxy_glVertexAttrib4dvARB = epoxy_glVertexAttrib4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVNVPROC epoxy_glVertexAttrib4dvNV = epoxy_glVertexAttrib4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FPROC epoxy_glVertexAttrib4f = epoxy_glVertexAttrib4f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FARBPROC epoxy_glVertexAttrib4fARB = epoxy_glVertexAttrib4fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FNVPROC epoxy_glVertexAttrib4fNV = epoxy_glVertexAttrib4fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVPROC epoxy_glVertexAttrib4fv = epoxy_glVertexAttrib4fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVARBPROC epoxy_glVertexAttrib4fvARB = epoxy_glVertexAttrib4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVNVPROC epoxy_glVertexAttrib4fvNV = epoxy_glVertexAttrib4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4HNVPROC epoxy_glVertexAttrib4hNV = epoxy_glVertexAttrib4hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4HVNVPROC epoxy_glVertexAttrib4hvNV = epoxy_glVertexAttrib4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4IVPROC epoxy_glVertexAttrib4iv = epoxy_glVertexAttrib4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4IVARBPROC epoxy_glVertexAttrib4ivARB = epoxy_glVertexAttrib4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SPROC epoxy_glVertexAttrib4s = epoxy_glVertexAttrib4s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SARBPROC epoxy_glVertexAttrib4sARB = epoxy_glVertexAttrib4sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SNVPROC epoxy_glVertexAttrib4sNV = epoxy_glVertexAttrib4sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVPROC epoxy_glVertexAttrib4sv = epoxy_glVertexAttrib4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVARBPROC epoxy_glVertexAttrib4svARB = epoxy_glVertexAttrib4svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVNVPROC epoxy_glVertexAttrib4svNV = epoxy_glVertexAttrib4svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBNVPROC epoxy_glVertexAttrib4ubNV = epoxy_glVertexAttrib4ubNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVPROC epoxy_glVertexAttrib4ubv = epoxy_glVertexAttrib4ubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVARBPROC epoxy_glVertexAttrib4ubvARB = epoxy_glVertexAttrib4ubvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVNVPROC epoxy_glVertexAttrib4ubvNV = epoxy_glVertexAttrib4ubvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UIVPROC epoxy_glVertexAttrib4uiv = epoxy_glVertexAttrib4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UIVARBPROC epoxy_glVertexAttrib4uivARB = epoxy_glVertexAttrib4uivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4USVPROC epoxy_glVertexAttrib4usv = epoxy_glVertexAttrib4usv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4USVARBPROC epoxy_glVertexAttrib4usvARB = epoxy_glVertexAttrib4usvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBARRAYOBJECTATIPROC epoxy_glVertexAttribArrayObjectATI = epoxy_glVertexAttribArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBBINDINGPROC epoxy_glVertexAttribBinding = epoxy_glVertexAttribBinding_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORPROC epoxy_glVertexAttribDivisor = epoxy_glVertexAttribDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORANGLEPROC epoxy_glVertexAttribDivisorANGLE = epoxy_glVertexAttribDivisorANGLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORARBPROC epoxy_glVertexAttribDivisorARB = epoxy_glVertexAttribDivisorARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexAttribDivisorEXT = epoxy_glVertexAttribDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORNVPROC epoxy_glVertexAttribDivisorNV = epoxy_glVertexAttribDivisorNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBFORMATPROC epoxy_glVertexAttribFormat = epoxy_glVertexAttribFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBFORMATNVPROC epoxy_glVertexAttribFormatNV = epoxy_glVertexAttribFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IPROC epoxy_glVertexAttribI1i = epoxy_glVertexAttribI1i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IEXTPROC epoxy_glVertexAttribI1iEXT = epoxy_glVertexAttribI1iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IVPROC epoxy_glVertexAttribI1iv = epoxy_glVertexAttribI1iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IVEXTPROC epoxy_glVertexAttribI1ivEXT = epoxy_glVertexAttribI1ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIPROC epoxy_glVertexAttribI1ui = epoxy_glVertexAttribI1ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIEXTPROC epoxy_glVertexAttribI1uiEXT = epoxy_glVertexAttribI1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIVPROC epoxy_glVertexAttribI1uiv = epoxy_glVertexAttribI1uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIVEXTPROC epoxy_glVertexAttribI1uivEXT = epoxy_glVertexAttribI1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IPROC epoxy_glVertexAttribI2i = epoxy_glVertexAttribI2i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IEXTPROC epoxy_glVertexAttribI2iEXT = epoxy_glVertexAttribI2iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IVPROC epoxy_glVertexAttribI2iv = epoxy_glVertexAttribI2iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IVEXTPROC epoxy_glVertexAttribI2ivEXT = epoxy_glVertexAttribI2ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIPROC epoxy_glVertexAttribI2ui = epoxy_glVertexAttribI2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIEXTPROC epoxy_glVertexAttribI2uiEXT = epoxy_glVertexAttribI2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIVPROC epoxy_glVertexAttribI2uiv = epoxy_glVertexAttribI2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIVEXTPROC epoxy_glVertexAttribI2uivEXT = epoxy_glVertexAttribI2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IPROC epoxy_glVertexAttribI3i = epoxy_glVertexAttribI3i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IEXTPROC epoxy_glVertexAttribI3iEXT = epoxy_glVertexAttribI3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IVPROC epoxy_glVertexAttribI3iv = epoxy_glVertexAttribI3iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IVEXTPROC epoxy_glVertexAttribI3ivEXT = epoxy_glVertexAttribI3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIPROC epoxy_glVertexAttribI3ui = epoxy_glVertexAttribI3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIEXTPROC epoxy_glVertexAttribI3uiEXT = epoxy_glVertexAttribI3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIVPROC epoxy_glVertexAttribI3uiv = epoxy_glVertexAttribI3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIVEXTPROC epoxy_glVertexAttribI3uivEXT = epoxy_glVertexAttribI3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4BVPROC epoxy_glVertexAttribI4bv = epoxy_glVertexAttribI4bv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4BVEXTPROC epoxy_glVertexAttribI4bvEXT = epoxy_glVertexAttribI4bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IPROC epoxy_glVertexAttribI4i = epoxy_glVertexAttribI4i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IEXTPROC epoxy_glVertexAttribI4iEXT = epoxy_glVertexAttribI4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IVPROC epoxy_glVertexAttribI4iv = epoxy_glVertexAttribI4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IVEXTPROC epoxy_glVertexAttribI4ivEXT = epoxy_glVertexAttribI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4SVPROC epoxy_glVertexAttribI4sv = epoxy_glVertexAttribI4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4SVEXTPROC epoxy_glVertexAttribI4svEXT = epoxy_glVertexAttribI4svEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UBVPROC epoxy_glVertexAttribI4ubv = epoxy_glVertexAttribI4ubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UBVEXTPROC epoxy_glVertexAttribI4ubvEXT = epoxy_glVertexAttribI4ubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIPROC epoxy_glVertexAttribI4ui = epoxy_glVertexAttribI4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIEXTPROC epoxy_glVertexAttribI4uiEXT = epoxy_glVertexAttribI4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIVPROC epoxy_glVertexAttribI4uiv = epoxy_glVertexAttribI4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIVEXTPROC epoxy_glVertexAttribI4uivEXT = epoxy_glVertexAttribI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4USVPROC epoxy_glVertexAttribI4usv = epoxy_glVertexAttribI4usv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4USVEXTPROC epoxy_glVertexAttribI4usvEXT = epoxy_glVertexAttribI4usvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIFORMATPROC epoxy_glVertexAttribIFormat = epoxy_glVertexAttribIFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIFORMATNVPROC epoxy_glVertexAttribIFormatNV = epoxy_glVertexAttribIFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIPOINTERPROC epoxy_glVertexAttribIPointer = epoxy_glVertexAttribIPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIPOINTEREXTPROC epoxy_glVertexAttribIPointerEXT = epoxy_glVertexAttribIPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DPROC epoxy_glVertexAttribL1d = epoxy_glVertexAttribL1d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DEXTPROC epoxy_glVertexAttribL1dEXT = epoxy_glVertexAttribL1dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DVPROC epoxy_glVertexAttribL1dv = epoxy_glVertexAttribL1dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DVEXTPROC epoxy_glVertexAttribL1dvEXT = epoxy_glVertexAttribL1dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1I64NVPROC epoxy_glVertexAttribL1i64NV = epoxy_glVertexAttribL1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1I64VNVPROC epoxy_glVertexAttribL1i64vNV = epoxy_glVertexAttribL1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64ARBPROC epoxy_glVertexAttribL1ui64ARB = epoxy_glVertexAttribL1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64NVPROC epoxy_glVertexAttribL1ui64NV = epoxy_glVertexAttribL1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64VARBPROC epoxy_glVertexAttribL1ui64vARB = epoxy_glVertexAttribL1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64VNVPROC epoxy_glVertexAttribL1ui64vNV = epoxy_glVertexAttribL1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DPROC epoxy_glVertexAttribL2d = epoxy_glVertexAttribL2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DEXTPROC epoxy_glVertexAttribL2dEXT = epoxy_glVertexAttribL2dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DVPROC epoxy_glVertexAttribL2dv = epoxy_glVertexAttribL2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DVEXTPROC epoxy_glVertexAttribL2dvEXT = epoxy_glVertexAttribL2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2I64NVPROC epoxy_glVertexAttribL2i64NV = epoxy_glVertexAttribL2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2I64VNVPROC epoxy_glVertexAttribL2i64vNV = epoxy_glVertexAttribL2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2UI64NVPROC epoxy_glVertexAttribL2ui64NV = epoxy_glVertexAttribL2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2UI64VNVPROC epoxy_glVertexAttribL2ui64vNV = epoxy_glVertexAttribL2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DPROC epoxy_glVertexAttribL3d = epoxy_glVertexAttribL3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DEXTPROC epoxy_glVertexAttribL3dEXT = epoxy_glVertexAttribL3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DVPROC epoxy_glVertexAttribL3dv = epoxy_glVertexAttribL3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DVEXTPROC epoxy_glVertexAttribL3dvEXT = epoxy_glVertexAttribL3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3I64NVPROC epoxy_glVertexAttribL3i64NV = epoxy_glVertexAttribL3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3I64VNVPROC epoxy_glVertexAttribL3i64vNV = epoxy_glVertexAttribL3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3UI64NVPROC epoxy_glVertexAttribL3ui64NV = epoxy_glVertexAttribL3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3UI64VNVPROC epoxy_glVertexAttribL3ui64vNV = epoxy_glVertexAttribL3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DPROC epoxy_glVertexAttribL4d = epoxy_glVertexAttribL4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DEXTPROC epoxy_glVertexAttribL4dEXT = epoxy_glVertexAttribL4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DVPROC epoxy_glVertexAttribL4dv = epoxy_glVertexAttribL4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DVEXTPROC epoxy_glVertexAttribL4dvEXT = epoxy_glVertexAttribL4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4I64NVPROC epoxy_glVertexAttribL4i64NV = epoxy_glVertexAttribL4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4I64VNVPROC epoxy_glVertexAttribL4i64vNV = epoxy_glVertexAttribL4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4UI64NVPROC epoxy_glVertexAttribL4ui64NV = epoxy_glVertexAttribL4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4UI64VNVPROC epoxy_glVertexAttribL4ui64vNV = epoxy_glVertexAttribL4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLFORMATPROC epoxy_glVertexAttribLFormat = epoxy_glVertexAttribLFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLFORMATNVPROC epoxy_glVertexAttribLFormatNV = epoxy_glVertexAttribLFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLPOINTERPROC epoxy_glVertexAttribLPointer = epoxy_glVertexAttribLPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLPOINTEREXTPROC epoxy_glVertexAttribLPointerEXT = epoxy_glVertexAttribLPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP1UIPROC epoxy_glVertexAttribP1ui = epoxy_glVertexAttribP1ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP1UIVPROC epoxy_glVertexAttribP1uiv = epoxy_glVertexAttribP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP2UIPROC epoxy_glVertexAttribP2ui = epoxy_glVertexAttribP2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP2UIVPROC epoxy_glVertexAttribP2uiv = epoxy_glVertexAttribP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP3UIPROC epoxy_glVertexAttribP3ui = epoxy_glVertexAttribP3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP3UIVPROC epoxy_glVertexAttribP3uiv = epoxy_glVertexAttribP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP4UIPROC epoxy_glVertexAttribP4ui = epoxy_glVertexAttribP4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP4UIVPROC epoxy_glVertexAttribP4uiv = epoxy_glVertexAttribP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPARAMETERIAMDPROC epoxy_glVertexAttribParameteriAMD = epoxy_glVertexAttribParameteriAMD_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERPROC epoxy_glVertexAttribPointer = epoxy_glVertexAttribPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERARBPROC epoxy_glVertexAttribPointerARB = epoxy_glVertexAttribPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERNVPROC epoxy_glVertexAttribPointerNV = epoxy_glVertexAttribPointerNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1DVNVPROC epoxy_glVertexAttribs1dvNV = epoxy_glVertexAttribs1dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1FVNVPROC epoxy_glVertexAttribs1fvNV = epoxy_glVertexAttribs1fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1HVNVPROC epoxy_glVertexAttribs1hvNV = epoxy_glVertexAttribs1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1SVNVPROC epoxy_glVertexAttribs1svNV = epoxy_glVertexAttribs1svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2DVNVPROC epoxy_glVertexAttribs2dvNV = epoxy_glVertexAttribs2dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2FVNVPROC epoxy_glVertexAttribs2fvNV = epoxy_glVertexAttribs2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2HVNVPROC epoxy_glVertexAttribs2hvNV = epoxy_glVertexAttribs2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2SVNVPROC epoxy_glVertexAttribs2svNV = epoxy_glVertexAttribs2svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3DVNVPROC epoxy_glVertexAttribs3dvNV = epoxy_glVertexAttribs3dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3FVNVPROC epoxy_glVertexAttribs3fvNV = epoxy_glVertexAttribs3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3HVNVPROC epoxy_glVertexAttribs3hvNV = epoxy_glVertexAttribs3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3SVNVPROC epoxy_glVertexAttribs3svNV = epoxy_glVertexAttribs3svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4DVNVPROC epoxy_glVertexAttribs4dvNV = epoxy_glVertexAttribs4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4FVNVPROC epoxy_glVertexAttribs4fvNV = epoxy_glVertexAttribs4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4HVNVPROC epoxy_glVertexAttribs4hvNV = epoxy_glVertexAttribs4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4SVNVPROC epoxy_glVertexAttribs4svNV = epoxy_glVertexAttribs4svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4UBVNVPROC epoxy_glVertexAttribs4ubvNV = epoxy_glVertexAttribs4ubvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBINDINGDIVISORPROC epoxy_glVertexBindingDivisor = epoxy_glVertexBindingDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDARBPROC epoxy_glVertexBlendARB = epoxy_glVertexBlendARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDENVFATIPROC epoxy_glVertexBlendEnvfATI = epoxy_glVertexBlendEnvfATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDENVIATIPROC epoxy_glVertexBlendEnviATI = epoxy_glVertexBlendEnviATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXFORMATNVPROC epoxy_glVertexFormatNV = epoxy_glVertexFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP2UIPROC epoxy_glVertexP2ui = epoxy_glVertexP2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP2UIVPROC epoxy_glVertexP2uiv = epoxy_glVertexP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP3UIPROC epoxy_glVertexP3ui = epoxy_glVertexP3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP3UIVPROC epoxy_glVertexP3uiv = epoxy_glVertexP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP4UIPROC epoxy_glVertexP4ui = epoxy_glVertexP4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP4UIVPROC epoxy_glVertexP4uiv = epoxy_glVertexP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERPROC epoxy_glVertexPointer = epoxy_glVertexPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTEREXTPROC epoxy_glVertexPointerEXT = epoxy_glVertexPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERLISTIBMPROC epoxy_glVertexPointerListIBM = epoxy_glVertexPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERVINTELPROC epoxy_glVertexPointervINTEL = epoxy_glVertexPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1DATIPROC epoxy_glVertexStream1dATI = epoxy_glVertexStream1dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1DVATIPROC epoxy_glVertexStream1dvATI = epoxy_glVertexStream1dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1FATIPROC epoxy_glVertexStream1fATI = epoxy_glVertexStream1fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1FVATIPROC epoxy_glVertexStream1fvATI = epoxy_glVertexStream1fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1IATIPROC epoxy_glVertexStream1iATI = epoxy_glVertexStream1iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1IVATIPROC epoxy_glVertexStream1ivATI = epoxy_glVertexStream1ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1SATIPROC epoxy_glVertexStream1sATI = epoxy_glVertexStream1sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1SVATIPROC epoxy_glVertexStream1svATI = epoxy_glVertexStream1svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2DATIPROC epoxy_glVertexStream2dATI = epoxy_glVertexStream2dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2DVATIPROC epoxy_glVertexStream2dvATI = epoxy_glVertexStream2dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2FATIPROC epoxy_glVertexStream2fATI = epoxy_glVertexStream2fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2FVATIPROC epoxy_glVertexStream2fvATI = epoxy_glVertexStream2fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2IATIPROC epoxy_glVertexStream2iATI = epoxy_glVertexStream2iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2IVATIPROC epoxy_glVertexStream2ivATI = epoxy_glVertexStream2ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2SATIPROC epoxy_glVertexStream2sATI = epoxy_glVertexStream2sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2SVATIPROC epoxy_glVertexStream2svATI = epoxy_glVertexStream2svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3DATIPROC epoxy_glVertexStream3dATI = epoxy_glVertexStream3dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3DVATIPROC epoxy_glVertexStream3dvATI = epoxy_glVertexStream3dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3FATIPROC epoxy_glVertexStream3fATI = epoxy_glVertexStream3fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3FVATIPROC epoxy_glVertexStream3fvATI = epoxy_glVertexStream3fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3IATIPROC epoxy_glVertexStream3iATI = epoxy_glVertexStream3iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3IVATIPROC epoxy_glVertexStream3ivATI = epoxy_glVertexStream3ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3SATIPROC epoxy_glVertexStream3sATI = epoxy_glVertexStream3sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3SVATIPROC epoxy_glVertexStream3svATI = epoxy_glVertexStream3svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4DATIPROC epoxy_glVertexStream4dATI = epoxy_glVertexStream4dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4DVATIPROC epoxy_glVertexStream4dvATI = epoxy_glVertexStream4dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4FATIPROC epoxy_glVertexStream4fATI = epoxy_glVertexStream4fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4FVATIPROC epoxy_glVertexStream4fvATI = epoxy_glVertexStream4fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4IATIPROC epoxy_glVertexStream4iATI = epoxy_glVertexStream4iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4IVATIPROC epoxy_glVertexStream4ivATI = epoxy_glVertexStream4ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4SATIPROC epoxy_glVertexStream4sATI = epoxy_glVertexStream4sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4SVATIPROC epoxy_glVertexStream4svATI = epoxy_glVertexStream4svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTPOINTEREXTPROC epoxy_glVertexWeightPointerEXT = epoxy_glVertexWeightPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTFEXTPROC epoxy_glVertexWeightfEXT = epoxy_glVertexWeightfEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTFVEXTPROC epoxy_glVertexWeightfvEXT = epoxy_glVertexWeightfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTHNVPROC epoxy_glVertexWeighthNV = epoxy_glVertexWeighthNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTHVNVPROC epoxy_glVertexWeighthvNV = epoxy_glVertexWeighthvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURENVPROC epoxy_glVideoCaptureNV = epoxy_glVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC epoxy_glVideoCaptureStreamParameterdvNV = epoxy_glVideoCaptureStreamParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC epoxy_glVideoCaptureStreamParameterfvNV = epoxy_glVideoCaptureStreamParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC epoxy_glVideoCaptureStreamParameterivNV = epoxy_glVideoCaptureStreamParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTPROC epoxy_glViewport = epoxy_glViewport_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTARRAYVPROC epoxy_glViewportArrayv = epoxy_glViewportArrayv_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTARRAYVNVPROC epoxy_glViewportArrayvNV = epoxy_glViewportArrayvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFPROC epoxy_glViewportIndexedf = epoxy_glViewportIndexedf_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFNVPROC epoxy_glViewportIndexedfNV = epoxy_glViewportIndexedfNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFVPROC epoxy_glViewportIndexedfv = epoxy_glViewportIndexedfv_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFVNVPROC epoxy_glViewportIndexedfvNV = epoxy_glViewportIndexedfvNV_global_rewrite_ptr; + +PUBLIC PFNGLWAITSYNCPROC epoxy_glWaitSync = epoxy_glWaitSync_global_rewrite_ptr; + +PUBLIC PFNGLWAITSYNCAPPLEPROC epoxy_glWaitSyncAPPLE = epoxy_glWaitSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPATHSNVPROC epoxy_glWeightPathsNV = epoxy_glWeightPathsNV_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPOINTERARBPROC epoxy_glWeightPointerARB = epoxy_glWeightPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPOINTEROESPROC epoxy_glWeightPointerOES = epoxy_glWeightPointerOES_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTBVARBPROC epoxy_glWeightbvARB = epoxy_glWeightbvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTDVARBPROC epoxy_glWeightdvARB = epoxy_glWeightdvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTFVARBPROC epoxy_glWeightfvARB = epoxy_glWeightfvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTIVARBPROC epoxy_glWeightivARB = epoxy_glWeightivARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTSVARBPROC epoxy_glWeightsvARB = epoxy_glWeightsvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUBVARBPROC epoxy_glWeightubvARB = epoxy_glWeightubvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUIVARBPROC epoxy_glWeightuivARB = epoxy_glWeightuivARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUSVARBPROC epoxy_glWeightusvARB = epoxy_glWeightusvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DPROC epoxy_glWindowPos2d = epoxy_glWindowPos2d_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DARBPROC epoxy_glWindowPos2dARB = epoxy_glWindowPos2dARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DMESAPROC epoxy_glWindowPos2dMESA = epoxy_glWindowPos2dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVPROC epoxy_glWindowPos2dv = epoxy_glWindowPos2dv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVARBPROC epoxy_glWindowPos2dvARB = epoxy_glWindowPos2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVMESAPROC epoxy_glWindowPos2dvMESA = epoxy_glWindowPos2dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FPROC epoxy_glWindowPos2f = epoxy_glWindowPos2f_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FARBPROC epoxy_glWindowPos2fARB = epoxy_glWindowPos2fARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FMESAPROC epoxy_glWindowPos2fMESA = epoxy_glWindowPos2fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVPROC epoxy_glWindowPos2fv = epoxy_glWindowPos2fv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVARBPROC epoxy_glWindowPos2fvARB = epoxy_glWindowPos2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVMESAPROC epoxy_glWindowPos2fvMESA = epoxy_glWindowPos2fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IPROC epoxy_glWindowPos2i = epoxy_glWindowPos2i_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IARBPROC epoxy_glWindowPos2iARB = epoxy_glWindowPos2iARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IMESAPROC epoxy_glWindowPos2iMESA = epoxy_glWindowPos2iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVPROC epoxy_glWindowPos2iv = epoxy_glWindowPos2iv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVARBPROC epoxy_glWindowPos2ivARB = epoxy_glWindowPos2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVMESAPROC epoxy_glWindowPos2ivMESA = epoxy_glWindowPos2ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SPROC epoxy_glWindowPos2s = epoxy_glWindowPos2s_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SARBPROC epoxy_glWindowPos2sARB = epoxy_glWindowPos2sARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SMESAPROC epoxy_glWindowPos2sMESA = epoxy_glWindowPos2sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVPROC epoxy_glWindowPos2sv = epoxy_glWindowPos2sv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVARBPROC epoxy_glWindowPos2svARB = epoxy_glWindowPos2svARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVMESAPROC epoxy_glWindowPos2svMESA = epoxy_glWindowPos2svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DPROC epoxy_glWindowPos3d = epoxy_glWindowPos3d_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DARBPROC epoxy_glWindowPos3dARB = epoxy_glWindowPos3dARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DMESAPROC epoxy_glWindowPos3dMESA = epoxy_glWindowPos3dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVPROC epoxy_glWindowPos3dv = epoxy_glWindowPos3dv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVARBPROC epoxy_glWindowPos3dvARB = epoxy_glWindowPos3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVMESAPROC epoxy_glWindowPos3dvMESA = epoxy_glWindowPos3dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FPROC epoxy_glWindowPos3f = epoxy_glWindowPos3f_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FARBPROC epoxy_glWindowPos3fARB = epoxy_glWindowPos3fARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FMESAPROC epoxy_glWindowPos3fMESA = epoxy_glWindowPos3fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVPROC epoxy_glWindowPos3fv = epoxy_glWindowPos3fv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVARBPROC epoxy_glWindowPos3fvARB = epoxy_glWindowPos3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVMESAPROC epoxy_glWindowPos3fvMESA = epoxy_glWindowPos3fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IPROC epoxy_glWindowPos3i = epoxy_glWindowPos3i_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IARBPROC epoxy_glWindowPos3iARB = epoxy_glWindowPos3iARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IMESAPROC epoxy_glWindowPos3iMESA = epoxy_glWindowPos3iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVPROC epoxy_glWindowPos3iv = epoxy_glWindowPos3iv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVARBPROC epoxy_glWindowPos3ivARB = epoxy_glWindowPos3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVMESAPROC epoxy_glWindowPos3ivMESA = epoxy_glWindowPos3ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SPROC epoxy_glWindowPos3s = epoxy_glWindowPos3s_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SARBPROC epoxy_glWindowPos3sARB = epoxy_glWindowPos3sARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SMESAPROC epoxy_glWindowPos3sMESA = epoxy_glWindowPos3sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVPROC epoxy_glWindowPos3sv = epoxy_glWindowPos3sv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVARBPROC epoxy_glWindowPos3svARB = epoxy_glWindowPos3svARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVMESAPROC epoxy_glWindowPos3svMESA = epoxy_glWindowPos3svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4DMESAPROC epoxy_glWindowPos4dMESA = epoxy_glWindowPos4dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4DVMESAPROC epoxy_glWindowPos4dvMESA = epoxy_glWindowPos4dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4FMESAPROC epoxy_glWindowPos4fMESA = epoxy_glWindowPos4fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4FVMESAPROC epoxy_glWindowPos4fvMESA = epoxy_glWindowPos4fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4IMESAPROC epoxy_glWindowPos4iMESA = epoxy_glWindowPos4iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4IVMESAPROC epoxy_glWindowPos4ivMESA = epoxy_glWindowPos4ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4SMESAPROC epoxy_glWindowPos4sMESA = epoxy_glWindowPos4sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4SVMESAPROC epoxy_glWindowPos4svMESA = epoxy_glWindowPos4svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWRITEMASKEXTPROC epoxy_glWriteMaskEXT = epoxy_glWriteMaskEXT_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/glx/dispatch_glx.c b/Engine/lib/epoxy/src/glx/dispatch_glx.c new file mode 100644 index 0000000000..ee9027b403 --- /dev/null +++ b/Engine/lib/epoxy/src/glx/dispatch_glx.c @@ -0,0 +1,106 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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 +#include +#include + +#include "dispatch_common.h" + +/** + * If we can determine the GLX version from the current context, then + * return that, otherwise return a version that will just send us on + * to dlsym() or get_proc_address(). + */ +int +epoxy_conservative_glx_version(void) +{ + Display *dpy = glXGetCurrentDisplay(); + GLXContext ctx = glXGetCurrentContext(); + int screen; + + if (!dpy || !ctx) + return 14; + + glXQueryContext(dpy, ctx, GLX_SCREEN, &screen); + + return epoxy_glx_version(dpy, screen); +} + +PUBLIC int +epoxy_glx_version(Display *dpy, int screen) +{ + int server_major, server_minor; + int client_major, client_minor; + int server, client; + const char *version_string; + int ret=0, sscanf_ret; + + if ((version_string = glXQueryServerString(dpy, screen, GLX_VERSION))) + { + sscanf_ret = sscanf(version_string, "%d.%d", &server_major, &server_minor); + assert(sscanf_ret == 2); + server = server_major * 10 + server_minor; + if ((version_string = glXGetClientString(dpy, GLX_VERSION))) + { + sscanf_ret = sscanf(version_string, "%d.%d", &client_major, &client_minor); + assert(sscanf_ret == 2); + client = client_major * 10 + client_minor; + ret = client <= server ? client : server; + } + } + + return ret; +} + +/** + * If we can determine the GLX extension support from the current + * context, then return that, otherwise give the answer that will just + * send us on to get_proc_address(). + */ +bool +epoxy_conservative_has_glx_extension(const char *ext) +{ + Display *dpy = glXGetCurrentDisplay(); + GLXContext ctx = glXGetCurrentContext(); + int screen; + + if (!dpy || !ctx) + return true; + + glXQueryContext(dpy, ctx, GLX_SCREEN, &screen); + + return epoxy_has_glx_extension(dpy, screen, ext); +} + +PUBLIC bool +epoxy_has_glx_extension(Display *dpy, int screen, const char *ext) + { + /* No, you can't just use glXGetClientString or + * glXGetServerString() here. Those each tell you about one half + * of what's needed for an extension to be supported, and + * glXQueryExtensionsString() is what gives you the intersection + * of the two. + */ + return epoxy_extension_in_string(glXQueryExtensionsString(dpy, screen), ext); +} diff --git a/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c b/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c new file mode 100644 index 0000000000..667268c495 --- /dev/null +++ b/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c @@ -0,0 +1,4812 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/glx.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNGLXBINDCHANNELTOWINDOWSGIXPROC epoxy_glXBindChannelToWindowSGIX; + PFNGLXBINDHYPERPIPESGIXPROC epoxy_glXBindHyperpipeSGIX; + PFNGLXBINDSWAPBARRIERNVPROC epoxy_glXBindSwapBarrierNV; + PFNGLXBINDSWAPBARRIERSGIXPROC epoxy_glXBindSwapBarrierSGIX; + PFNGLXBINDTEXIMAGEEXTPROC epoxy_glXBindTexImageEXT; + PFNGLXBINDVIDEOCAPTUREDEVICENVPROC epoxy_glXBindVideoCaptureDeviceNV; + PFNGLXBINDVIDEODEVICENVPROC epoxy_glXBindVideoDeviceNV; + PFNGLXBINDVIDEOIMAGENVPROC epoxy_glXBindVideoImageNV; + PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_glXBlitContextFramebufferAMD; + PFNGLXCHANNELRECTSGIXPROC epoxy_glXChannelRectSGIX; + PFNGLXCHANNELRECTSYNCSGIXPROC epoxy_glXChannelRectSyncSGIX; + PFNGLXCHOOSEFBCONFIGPROC epoxy_glXChooseFBConfig; + PFNGLXCHOOSEFBCONFIGSGIXPROC epoxy_glXChooseFBConfigSGIX; + PFNGLXCHOOSEVISUALPROC epoxy_glXChooseVisual; + PFNGLXCOPYBUFFERSUBDATANVPROC epoxy_glXCopyBufferSubDataNV; + PFNGLXCOPYCONTEXTPROC epoxy_glXCopyContext; + PFNGLXCOPYIMAGESUBDATANVPROC epoxy_glXCopyImageSubDataNV; + PFNGLXCOPYSUBBUFFERMESAPROC epoxy_glXCopySubBufferMESA; + PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC epoxy_glXCreateAssociatedContextAMD; + PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_glXCreateAssociatedContextAttribsAMD; + PFNGLXCREATECONTEXTPROC epoxy_glXCreateContext; + PFNGLXCREATECONTEXTATTRIBSARBPROC epoxy_glXCreateContextAttribsARB; + PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC epoxy_glXCreateContextWithConfigSGIX; + PFNGLXCREATEGLXPBUFFERSGIXPROC epoxy_glXCreateGLXPbufferSGIX; + PFNGLXCREATEGLXPIXMAPPROC epoxy_glXCreateGLXPixmap; + PFNGLXCREATEGLXPIXMAPMESAPROC epoxy_glXCreateGLXPixmapMESA; + PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC epoxy_glXCreateGLXPixmapWithConfigSGIX; + PFNGLXCREATENEWCONTEXTPROC epoxy_glXCreateNewContext; + PFNGLXCREATEPBUFFERPROC epoxy_glXCreatePbuffer; + PFNGLXCREATEPIXMAPPROC epoxy_glXCreatePixmap; + PFNGLXCREATEWINDOWPROC epoxy_glXCreateWindow; + PFNGLXCUSHIONSGIPROC epoxy_glXCushionSGI; + PFNGLXDELAYBEFORESWAPNVPROC epoxy_glXDelayBeforeSwapNV; + PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC epoxy_glXDeleteAssociatedContextAMD; + PFNGLXDESTROYCONTEXTPROC epoxy_glXDestroyContext; + PFNGLXDESTROYGLXPBUFFERSGIXPROC epoxy_glXDestroyGLXPbufferSGIX; + PFNGLXDESTROYGLXPIXMAPPROC epoxy_glXDestroyGLXPixmap; + PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC epoxy_glXDestroyGLXVideoSourceSGIX; + PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC epoxy_glXDestroyHyperpipeConfigSGIX; + PFNGLXDESTROYPBUFFERPROC epoxy_glXDestroyPbuffer; + PFNGLXDESTROYPIXMAPPROC epoxy_glXDestroyPixmap; + PFNGLXDESTROYWINDOWPROC epoxy_glXDestroyWindow; + PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_glXEnumerateVideoCaptureDevicesNV; + PFNGLXENUMERATEVIDEODEVICESNVPROC epoxy_glXEnumerateVideoDevicesNV; + PFNGLXFREECONTEXTEXTPROC epoxy_glXFreeContextEXT; + PFNGLXGETAGPOFFSETMESAPROC epoxy_glXGetAGPOffsetMESA; + PFNGLXGETCLIENTSTRINGPROC epoxy_glXGetClientString; + PFNGLXGETCONFIGPROC epoxy_glXGetConfig; + PFNGLXGETCONTEXTGPUIDAMDPROC epoxy_glXGetContextGPUIDAMD; + PFNGLXGETCONTEXTIDEXTPROC epoxy_glXGetContextIDEXT; + PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_glXGetCurrentAssociatedContextAMD; + PFNGLXGETCURRENTCONTEXTPROC epoxy_glXGetCurrentContext; + PFNGLXGETCURRENTDISPLAYPROC epoxy_glXGetCurrentDisplay; + PFNGLXGETCURRENTDISPLAYEXTPROC epoxy_glXGetCurrentDisplayEXT; + PFNGLXGETCURRENTDRAWABLEPROC epoxy_glXGetCurrentDrawable; + PFNGLXGETCURRENTREADDRAWABLEPROC epoxy_glXGetCurrentReadDrawable; + PFNGLXGETCURRENTREADDRAWABLESGIPROC epoxy_glXGetCurrentReadDrawableSGI; + PFNGLXGETFBCONFIGATTRIBPROC epoxy_glXGetFBConfigAttrib; + PFNGLXGETFBCONFIGATTRIBSGIXPROC epoxy_glXGetFBConfigAttribSGIX; + PFNGLXGETFBCONFIGFROMVISUALSGIXPROC epoxy_glXGetFBConfigFromVisualSGIX; + PFNGLXGETFBCONFIGSPROC epoxy_glXGetFBConfigs; + PFNGLXGETGPUIDSAMDPROC epoxy_glXGetGPUIDsAMD; + PFNGLXGETGPUINFOAMDPROC epoxy_glXGetGPUInfoAMD; + PFNGLXGETMSCRATEOMLPROC epoxy_glXGetMscRateOML; + PFNGLXGETPROCADDRESSPROC epoxy_glXGetProcAddress; + PFNGLXGETPROCADDRESSARBPROC epoxy_glXGetProcAddressARB; + PFNGLXGETSELECTEDEVENTPROC epoxy_glXGetSelectedEvent; + PFNGLXGETSELECTEDEVENTSGIXPROC epoxy_glXGetSelectedEventSGIX; + PFNGLXGETSYNCVALUESOMLPROC epoxy_glXGetSyncValuesOML; + PFNGLXGETTRANSPARENTINDEXSUNPROC epoxy_glXGetTransparentIndexSUN; + PFNGLXGETVIDEODEVICENVPROC epoxy_glXGetVideoDeviceNV; + PFNGLXGETVIDEOINFONVPROC epoxy_glXGetVideoInfoNV; + PFNGLXGETVIDEOSYNCSGIPROC epoxy_glXGetVideoSyncSGI; + PFNGLXGETVISUALFROMFBCONFIGPROC epoxy_glXGetVisualFromFBConfig; + PFNGLXGETVISUALFROMFBCONFIGSGIXPROC epoxy_glXGetVisualFromFBConfigSGIX; + PFNGLXHYPERPIPEATTRIBSGIXPROC epoxy_glXHyperpipeAttribSGIX; + PFNGLXHYPERPIPECONFIGSGIXPROC epoxy_glXHyperpipeConfigSGIX; + PFNGLXIMPORTCONTEXTEXTPROC epoxy_glXImportContextEXT; + PFNGLXISDIRECTPROC epoxy_glXIsDirect; + PFNGLXJOINSWAPGROUPNVPROC epoxy_glXJoinSwapGroupNV; + PFNGLXJOINSWAPGROUPSGIXPROC epoxy_glXJoinSwapGroupSGIX; + PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC epoxy_glXLockVideoCaptureDeviceNV; + PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_glXMakeAssociatedContextCurrentAMD; + PFNGLXMAKECONTEXTCURRENTPROC epoxy_glXMakeContextCurrent; + PFNGLXMAKECURRENTPROC epoxy_glXMakeCurrent; + PFNGLXMAKECURRENTREADSGIPROC epoxy_glXMakeCurrentReadSGI; + PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC epoxy_glXNamedCopyBufferSubDataNV; + PFNGLXQUERYCHANNELDELTASSGIXPROC epoxy_glXQueryChannelDeltasSGIX; + PFNGLXQUERYCHANNELRECTSGIXPROC epoxy_glXQueryChannelRectSGIX; + PFNGLXQUERYCONTEXTPROC epoxy_glXQueryContext; + PFNGLXQUERYCONTEXTINFOEXTPROC epoxy_glXQueryContextInfoEXT; + PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC epoxy_glXQueryCurrentRendererIntegerMESA; + PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC epoxy_glXQueryCurrentRendererStringMESA; + PFNGLXQUERYDRAWABLEPROC epoxy_glXQueryDrawable; + PFNGLXQUERYEXTENSIONPROC epoxy_glXQueryExtension; + PFNGLXQUERYEXTENSIONSSTRINGPROC epoxy_glXQueryExtensionsString; + PFNGLXQUERYFRAMECOUNTNVPROC epoxy_glXQueryFrameCountNV; + PFNGLXQUERYGLXPBUFFERSGIXPROC epoxy_glXQueryGLXPbufferSGIX; + PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC epoxy_glXQueryHyperpipeAttribSGIX; + PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC epoxy_glXQueryHyperpipeBestAttribSGIX; + PFNGLXQUERYHYPERPIPECONFIGSGIXPROC epoxy_glXQueryHyperpipeConfigSGIX; + PFNGLXQUERYHYPERPIPENETWORKSGIXPROC epoxy_glXQueryHyperpipeNetworkSGIX; + PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC epoxy_glXQueryMaxSwapBarriersSGIX; + PFNGLXQUERYMAXSWAPGROUPSNVPROC epoxy_glXQueryMaxSwapGroupsNV; + PFNGLXQUERYRENDERERINTEGERMESAPROC epoxy_glXQueryRendererIntegerMESA; + PFNGLXQUERYRENDERERSTRINGMESAPROC epoxy_glXQueryRendererStringMESA; + PFNGLXQUERYSERVERSTRINGPROC epoxy_glXQueryServerString; + PFNGLXQUERYSWAPGROUPNVPROC epoxy_glXQuerySwapGroupNV; + PFNGLXQUERYVERSIONPROC epoxy_glXQueryVersion; + PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC epoxy_glXQueryVideoCaptureDeviceNV; + PFNGLXRELEASEBUFFERSMESAPROC epoxy_glXReleaseBuffersMESA; + PFNGLXRELEASETEXIMAGEEXTPROC epoxy_glXReleaseTexImageEXT; + PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_glXReleaseVideoCaptureDeviceNV; + PFNGLXRELEASEVIDEODEVICENVPROC epoxy_glXReleaseVideoDeviceNV; + PFNGLXRELEASEVIDEOIMAGENVPROC epoxy_glXReleaseVideoImageNV; + PFNGLXRESETFRAMECOUNTNVPROC epoxy_glXResetFrameCountNV; + PFNGLXSELECTEVENTPROC epoxy_glXSelectEvent; + PFNGLXSELECTEVENTSGIXPROC epoxy_glXSelectEventSGIX; + PFNGLXSENDPBUFFERTOVIDEONVPROC epoxy_glXSendPbufferToVideoNV; + PFNGLXSET3DFXMODEMESAPROC epoxy_glXSet3DfxModeMESA; + PFNGLXSWAPBUFFERSPROC epoxy_glXSwapBuffers; + PFNGLXSWAPBUFFERSMSCOMLPROC epoxy_glXSwapBuffersMscOML; + PFNGLXSWAPINTERVALEXTPROC epoxy_glXSwapIntervalEXT; + PFNGLXSWAPINTERVALSGIPROC epoxy_glXSwapIntervalSGI; + PFNGLXUSEXFONTPROC epoxy_glXUseXFont; + PFNGLXWAITFORMSCOMLPROC epoxy_glXWaitForMscOML; + PFNGLXWAITFORSBCOMLPROC epoxy_glXWaitForSbcOML; + PFNGLXWAITGLPROC epoxy_glXWaitGL; + PFNGLXWAITVIDEOSYNCSGIPROC epoxy_glXWaitVideoSyncSGI; + PFNGLXWAITXPROC epoxy_glXWaitX; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum glx_provider { + glx_provider_terminator = 0, + GLX_10, + GLX_11, + GLX_12, + GLX_13, + GLX_extension_GLX_AMD_gpu_association, + GLX_extension_GLX_ARB_create_context, + GLX_extension_GLX_ARB_get_proc_address, + GLX_extension_GLX_EXT_import_context, + GLX_extension_GLX_EXT_swap_control, + GLX_extension_GLX_EXT_texture_from_pixmap, + GLX_extension_GLX_MESA_agp_offset, + GLX_extension_GLX_MESA_copy_sub_buffer, + GLX_extension_GLX_MESA_pixmap_colormap, + GLX_extension_GLX_MESA_query_renderer, + GLX_extension_GLX_MESA_release_buffers, + GLX_extension_GLX_MESA_set_3dfx_mode, + GLX_extension_GLX_NV_copy_buffer, + GLX_extension_GLX_NV_copy_image, + GLX_extension_GLX_NV_delay_before_swap, + GLX_extension_GLX_NV_present_video, + GLX_extension_GLX_NV_swap_group, + GLX_extension_GLX_NV_video_capture, + GLX_extension_GLX_NV_video_out, + GLX_extension_GLX_OML_sync_control, + GLX_extension_GLX_SGIX_fbconfig, + GLX_extension_GLX_SGIX_hyperpipe, + GLX_extension_GLX_SGIX_pbuffer, + GLX_extension_GLX_SGIX_swap_barrier, + GLX_extension_GLX_SGIX_swap_group, + GLX_extension_GLX_SGIX_video_resize, + GLX_extension_GLX_SGIX_video_source, + GLX_extension_GLX_SGI_cushion, + GLX_extension_GLX_SGI_make_current_read, + GLX_extension_GLX_SGI_swap_control, + GLX_extension_GLX_SGI_video_sync, + GLX_extension_GLX_SUN_get_transparent_index, + always_present, +} PACKED; + +static const char *enum_string = + "GLX 10\0" + "GLX 11\0" + "GLX 12\0" + "GLX 13\0" + "GLX extension \"GLX_AMD_gpu_association\"\0" + "GLX extension \"GLX_ARB_create_context\"\0" + "GLX extension \"GLX_ARB_get_proc_address\"\0" + "GLX extension \"GLX_EXT_import_context\"\0" + "GLX extension \"GLX_EXT_swap_control\"\0" + "GLX extension \"GLX_EXT_texture_from_pixmap\"\0" + "GLX extension \"GLX_MESA_agp_offset\"\0" + "GLX extension \"GLX_MESA_copy_sub_buffer\"\0" + "GLX extension \"GLX_MESA_pixmap_colormap\"\0" + "GLX extension \"GLX_MESA_query_renderer\"\0" + "GLX extension \"GLX_MESA_release_buffers\"\0" + "GLX extension \"GLX_MESA_set_3dfx_mode\"\0" + "GLX extension \"GLX_NV_copy_buffer\"\0" + "GLX extension \"GLX_NV_copy_image\"\0" + "GLX extension \"GLX_NV_delay_before_swap\"\0" + "GLX extension \"GLX_NV_present_video\"\0" + "GLX extension \"GLX_NV_swap_group\"\0" + "GLX extension \"GLX_NV_video_capture\"\0" + "GLX extension \"GLX_NV_video_out\"\0" + "GLX extension \"GLX_OML_sync_control\"\0" + "GLX extension \"GLX_SGIX_fbconfig\"\0" + "GLX extension \"GLX_SGIX_hyperpipe\"\0" + "GLX extension \"GLX_SGIX_pbuffer\"\0" + "GLX extension \"GLX_SGIX_swap_barrier\"\0" + "GLX extension \"GLX_SGIX_swap_group\"\0" + "GLX extension \"GLX_SGIX_video_resize\"\0" + "GLX extension \"GLX_SGIX_video_source\"\0" + "GLX extension \"GLX_SGI_cushion\"\0" + "GLX extension \"GLX_SGI_make_current_read\"\0" + "GLX extension \"GLX_SGI_swap_control\"\0" + "GLX extension \"GLX_SGI_video_sync\"\0" + "GLX extension \"GLX_SUN_get_transparent_index\"\0" + "always present\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* glx_provider_terminator, unused */ + 0, /* GLX_10 */ + 7, /* GLX_11 */ + 14, /* GLX_12 */ + 21, /* GLX_13 */ + 28, /* GLX_extension_GLX_AMD_gpu_association */ + 68, /* GLX_extension_GLX_ARB_create_context */ + 107, /* GLX_extension_GLX_ARB_get_proc_address */ + 148, /* GLX_extension_GLX_EXT_import_context */ + 187, /* GLX_extension_GLX_EXT_swap_control */ + 224, /* GLX_extension_GLX_EXT_texture_from_pixmap */ + 268, /* GLX_extension_GLX_MESA_agp_offset */ + 304, /* GLX_extension_GLX_MESA_copy_sub_buffer */ + 345, /* GLX_extension_GLX_MESA_pixmap_colormap */ + 386, /* GLX_extension_GLX_MESA_query_renderer */ + 426, /* GLX_extension_GLX_MESA_release_buffers */ + 467, /* GLX_extension_GLX_MESA_set_3dfx_mode */ + 506, /* GLX_extension_GLX_NV_copy_buffer */ + 541, /* GLX_extension_GLX_NV_copy_image */ + 575, /* GLX_extension_GLX_NV_delay_before_swap */ + 616, /* GLX_extension_GLX_NV_present_video */ + 653, /* GLX_extension_GLX_NV_swap_group */ + 687, /* GLX_extension_GLX_NV_video_capture */ + 724, /* GLX_extension_GLX_NV_video_out */ + 757, /* GLX_extension_GLX_OML_sync_control */ + 794, /* GLX_extension_GLX_SGIX_fbconfig */ + 828, /* GLX_extension_GLX_SGIX_hyperpipe */ + 863, /* GLX_extension_GLX_SGIX_pbuffer */ + 896, /* GLX_extension_GLX_SGIX_swap_barrier */ + 934, /* GLX_extension_GLX_SGIX_swap_group */ + 970, /* GLX_extension_GLX_SGIX_video_resize */ + 1008, /* GLX_extension_GLX_SGIX_video_source */ + 1046, /* GLX_extension_GLX_SGI_cushion */ + 1078, /* GLX_extension_GLX_SGI_make_current_read */ + 1120, /* GLX_extension_GLX_SGI_swap_control */ + 1157, /* GLX_extension_GLX_SGI_video_sync */ + 1192, /* GLX_extension_GLX_SUN_get_transparent_index */ + 1238, /* always_present */ +}; + +static const char entrypoint_strings[] = { + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'T', + 'o', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindChannelToWindowSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindHyperpipeSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glXBindSwapBarrierNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindSwapBarrierSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glXBindTexImageEXT + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXBindVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXBindVideoDeviceNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glXBindVideoImageNV + 'g', + 'l', + 'X', + 'B', + 'l', + 'i', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'M', + 'D', + 0, // glXBlitContextFramebufferAMD + 'g', + 'l', + 'X', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXChannelRectSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glXChannelRectSyncSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXChooseFBConfig + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXChooseFBConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 0, // glXChooseVisual + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXCopyBufferSubDataNV + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCopyContext + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXCopyImageSubDataNV + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'S', + 'u', + 'b', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXCopySubBufferMESA + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXCreateAssociatedContextAMD + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'M', + 'D', + 0, // glXCreateAssociatedContextAttribsAMD + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCreateContext + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'R', + 'B', + 0, // glXCreateContextAttribsARB + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'W', + 'i', + 't', + 'h', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateContextWithConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateGLXPbufferSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXCreateGLXPixmap + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'M', + 'E', + 'S', + 'A', + 0, // glXCreateGLXPixmapMESA + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'W', + 'i', + 't', + 'h', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateGLXPixmapWithConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'N', + 'e', + 'w', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCreateNewContext + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glXCreatePbuffer + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXCreatePixmap + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 0, // glXCreateWindow + 'g', + 'l', + 'X', + 'C', + 'u', + 's', + 'h', + 'i', + 'o', + 'n', + 'S', + 'G', + 'I', + 0, // glXCushionSGI + 'g', + 'l', + 'X', + 'D', + 'e', + 'l', + 'a', + 'y', + 'B', + 'e', + 'f', + 'o', + 'r', + 'e', + 'S', + 'w', + 'a', + 'p', + 'N', + 'V', + 0, // glXDelayBeforeSwapNV + 'g', + 'l', + 'X', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXDeleteAssociatedContextAMD + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXDestroyContext + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyGLXPbufferSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXDestroyGLXPixmap + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyGLXVideoSourceSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glXDestroyPbuffer + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXDestroyPixmap + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 0, // glXDestroyWindow + 'g', + 'l', + 'X', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glXEnumerateVideoCaptureDevicesNV + 'g', + 'l', + 'X', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glXEnumerateVideoDevicesNV + 'g', + 'l', + 'X', + 'F', + 'r', + 'e', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'E', + 'X', + 'T', + 0, // glXFreeContextEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'A', + 'G', + 'P', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'M', + 'E', + 'S', + 'A', + 0, // glXGetAGPOffsetMESA + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXGetClientString + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXGetConfig + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 'A', + 'M', + 'D', + 0, // glXGetContextGPUIDAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'I', + 'D', + 'E', + 'X', + 'T', + 0, // glXGetContextIDEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXGetCurrentAssociatedContextAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXGetCurrentContext + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // glXGetCurrentDisplay + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glXGetCurrentDisplayEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXGetCurrentDrawable + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXGetCurrentReadDrawable + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glXGetCurrentReadDrawableSGI + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glXGetFBConfigAttrib + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetFBConfigAttribSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'F', + 'r', + 'o', + 'm', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetFBConfigFromVisualSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 's', + 0, // glXGetFBConfigs + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 's', + 'A', + 'M', + 'D', + 0, // glXGetGPUIDsAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // glXGetGPUInfoAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'M', + 's', + 'c', + 'R', + 'a', + 't', + 'e', + 'O', + 'M', + 'L', + 0, // glXGetMscRateOML + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // glXGetProcAddress + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'A', + 'R', + 'B', + 0, // glXGetProcAddressARB + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'e', + 'd', + 'E', + 'v', + 'e', + 'n', + 't', + 0, // glXGetSelectedEvent + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'e', + 'd', + 'E', + 'v', + 'e', + 'n', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetSelectedEventSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'O', + 'M', + 'L', + 0, // glXGetSyncValuesOML + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'a', + 'r', + 'e', + 'n', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'S', + 'U', + 'N', + 0, // glXGetTransparentIndexSUN + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXGetVideoDeviceNV + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'n', + 'f', + 'o', + 'N', + 'V', + 0, // glXGetVideoInfoNV + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 0, // glXGetVideoSyncSGI + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'F', + 'r', + 'o', + 'm', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXGetVisualFromFBConfig + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'F', + 'r', + 'o', + 'm', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetVisualFromFBConfigSGIX + 'g', + 'l', + 'X', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXHyperpipeAttribSGIX + 'g', + 'l', + 'X', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'I', + 'm', + 'p', + 'o', + 'r', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'E', + 'X', + 'T', + 0, // glXImportContextEXT + 'g', + 'l', + 'X', + 'I', + 's', + 'D', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glXIsDirect + 'g', + 'l', + 'X', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // glXJoinSwapGroupNV + 'g', + 'l', + 'X', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 'G', + 'I', + 'X', + 0, // glXJoinSwapGroupSGIX + 'g', + 'l', + 'X', + 'L', + 'o', + 'c', + 'k', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXLockVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'M', + 'D', + 0, // glXMakeAssociatedContextCurrentAMD + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // glXMakeContextCurrent + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // glXMakeCurrent + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'S', + 'G', + 'I', + 0, // glXMakeCurrentReadSGI + 'g', + 'l', + 'X', + 'N', + 'a', + 'm', + 'e', + 'd', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXNamedCopyBufferSubDataNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'D', + 'e', + 'l', + 't', + 'a', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryChannelDeltasSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryChannelRectSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXQueryContext + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'I', + 'n', + 'f', + 'o', + 'E', + 'X', + 'T', + 0, // glXQueryContextInfoEXT + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryCurrentRendererIntegerMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryCurrentRendererStringMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXQueryDrawable + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 0, // glXQueryExtension + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXQueryExtensionsString + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glXQueryFrameCountNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryGLXPbufferSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeAttribSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'B', + 'e', + 's', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeBestAttribSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'N', + 'e', + 't', + 'w', + 'o', + 'r', + 'k', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeNetworkSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryMaxSwapBarriersSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'N', + 'V', + 0, // glXQueryMaxSwapGroupsNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryRendererIntegerMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryRendererStringMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'e', + 'r', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXQueryServerString + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // glXQuerySwapGroupNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'e', + 'r', + 's', + 'i', + 'o', + 'n', + 0, // glXQueryVersion + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXQueryVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glXReleaseBuffersMESA + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glXReleaseTexImageEXT + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoImageNV + 'g', + 'l', + 'X', + 'R', + 'e', + 's', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glXResetFrameCountNV + 'g', + 'l', + 'X', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 0, // glXSelectEvent + 'g', + 'l', + 'X', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXSelectEventSGIX + 'g', + 'l', + 'X', + 'S', + 'e', + 'n', + 'd', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'o', + 'V', + 'i', + 'd', + 'e', + 'o', + 'N', + 'V', + 0, // glXSendPbufferToVideoNV + 'g', + 'l', + 'X', + 'S', + 'e', + 't', + '3', + 'D', + 'f', + 'x', + 'M', + 'o', + 'd', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // glXSet3DfxModeMESA + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glXSwapBuffers + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // glXSwapBuffersMscOML + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glXSwapIntervalEXT + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'S', + 'G', + 'I', + 0, // glXSwapIntervalSGI + 'g', + 'l', + 'X', + 'U', + 's', + 'e', + 'X', + 'F', + 'o', + 'n', + 't', + 0, // glXUseXFont + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // glXWaitForMscOML + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'S', + 'b', + 'c', + 'O', + 'M', + 'L', + 0, // glXWaitForSbcOML + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'G', + 'L', + 0, // glXWaitGL + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 0, // glXWaitVideoSyncSGI + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'X', + 0, // glXWaitX + 0 }; + +static void *glx_provider_resolver(const char *name, + const enum glx_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != glx_provider_terminator; i++) { + switch (providers[i]) { + case GLX_10: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_11: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_12: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_13: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_AMD_gpu_association: + if (epoxy_conservative_has_glx_extension("GLX_AMD_gpu_association")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_ARB_create_context: + if (epoxy_conservative_has_glx_extension("GLX_ARB_create_context")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_ARB_get_proc_address: + if (epoxy_conservative_has_glx_extension("GLX_ARB_get_proc_address")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_import_context: + if (epoxy_conservative_has_glx_extension("GLX_EXT_import_context")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_swap_control: + if (epoxy_conservative_has_glx_extension("GLX_EXT_swap_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_texture_from_pixmap: + if (epoxy_conservative_has_glx_extension("GLX_EXT_texture_from_pixmap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_agp_offset: + if (epoxy_conservative_has_glx_extension("GLX_MESA_agp_offset")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_copy_sub_buffer: + if (epoxy_conservative_has_glx_extension("GLX_MESA_copy_sub_buffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_pixmap_colormap: + if (epoxy_conservative_has_glx_extension("GLX_MESA_pixmap_colormap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_query_renderer: + if (epoxy_conservative_has_glx_extension("GLX_MESA_query_renderer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_release_buffers: + if (epoxy_conservative_has_glx_extension("GLX_MESA_release_buffers")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_set_3dfx_mode: + if (epoxy_conservative_has_glx_extension("GLX_MESA_set_3dfx_mode")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_copy_buffer: + if (epoxy_conservative_has_glx_extension("GLX_NV_copy_buffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_copy_image: + if (epoxy_conservative_has_glx_extension("GLX_NV_copy_image")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_delay_before_swap: + if (epoxy_conservative_has_glx_extension("GLX_NV_delay_before_swap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_present_video: + if (epoxy_conservative_has_glx_extension("GLX_NV_present_video")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_swap_group: + if (epoxy_conservative_has_glx_extension("GLX_NV_swap_group")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_video_capture: + if (epoxy_conservative_has_glx_extension("GLX_NV_video_capture")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_video_out: + if (epoxy_conservative_has_glx_extension("GLX_NV_video_out")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_OML_sync_control: + if (epoxy_conservative_has_glx_extension("GLX_OML_sync_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_fbconfig: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_fbconfig")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_hyperpipe: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_hyperpipe")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_pbuffer: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_pbuffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_swap_barrier: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_swap_barrier")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_swap_group: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_swap_group")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_video_resize: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_video_resize")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_video_source: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_video_source")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_cushion: + if (epoxy_conservative_has_glx_extension("GLX_SGI_cushion")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_make_current_read: + if (epoxy_conservative_has_glx_extension("GLX_SGI_make_current_read")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_swap_control: + if (epoxy_conservative_has_glx_extension("GLX_SGI_swap_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_video_sync: + if (epoxy_conservative_has_glx_extension("GLX_SGI_video_sync")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SUN_get_transparent_index: + if (epoxy_conservative_has_glx_extension("GLX_SUN_get_transparent_index")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case always_present: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case glx_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != glx_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == glx_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +glx_single_resolver(const enum glx_provider provider, const uint32_t entrypoint_offset); + +static void * +glx_single_resolver(const enum glx_provider provider, const uint32_t entrypoint_offset) +{ + const enum glx_provider providers[] = { + provider, + glx_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return glx_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNGLXBINDCHANNELTOWINDOWSGIXPROC +epoxy_glXBindChannelToWindowSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 0 /* glXBindChannelToWindowSGIX */); +} + +static PFNGLXBINDHYPERPIPESGIXPROC +epoxy_glXBindHyperpipeSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 27 /* glXBindHyperpipeSGIX */); +} + +static PFNGLXBINDSWAPBARRIERNVPROC +epoxy_glXBindSwapBarrierNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 48 /* glXBindSwapBarrierNV */); +} + +static PFNGLXBINDSWAPBARRIERSGIXPROC +epoxy_glXBindSwapBarrierSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_barrier, 69 /* glXBindSwapBarrierSGIX */); +} + +static PFNGLXBINDTEXIMAGEEXTPROC +epoxy_glXBindTexImageEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_texture_from_pixmap, 92 /* glXBindTexImageEXT */); +} + +static PFNGLXBINDVIDEOCAPTUREDEVICENVPROC +epoxy_glXBindVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 111 /* glXBindVideoCaptureDeviceNV */); +} + +static PFNGLXBINDVIDEODEVICENVPROC +epoxy_glXBindVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_present_video, 139 /* glXBindVideoDeviceNV */); +} + +static PFNGLXBINDVIDEOIMAGENVPROC +epoxy_glXBindVideoImageNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 160 /* glXBindVideoImageNV */); +} + +static PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC +epoxy_glXBlitContextFramebufferAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 180 /* glXBlitContextFramebufferAMD */); +} + +static PFNGLXCHANNELRECTSGIXPROC +epoxy_glXChannelRectSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 209 /* glXChannelRectSGIX */); +} + +static PFNGLXCHANNELRECTSYNCSGIXPROC +epoxy_glXChannelRectSyncSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 228 /* glXChannelRectSyncSGIX */); +} + +static PFNGLXCHOOSEFBCONFIGPROC +epoxy_glXChooseFBConfig_resolver(void) +{ + return glx_single_resolver(GLX_13, 251 /* glXChooseFBConfig */); +} + +static PFNGLXCHOOSEFBCONFIGSGIXPROC +epoxy_glXChooseFBConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 269 /* glXChooseFBConfigSGIX */); +} + +static PFNGLXCHOOSEVISUALPROC +epoxy_glXChooseVisual_resolver(void) +{ + return glx_single_resolver(GLX_10, 291 /* glXChooseVisual */); +} + +static PFNGLXCOPYBUFFERSUBDATANVPROC +epoxy_glXCopyBufferSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_buffer, 307 /* glXCopyBufferSubDataNV */); +} + +static PFNGLXCOPYCONTEXTPROC +epoxy_glXCopyContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 330 /* glXCopyContext */); +} + +static PFNGLXCOPYIMAGESUBDATANVPROC +epoxy_glXCopyImageSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_image, 345 /* glXCopyImageSubDataNV */); +} + +static PFNGLXCOPYSUBBUFFERMESAPROC +epoxy_glXCopySubBufferMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_copy_sub_buffer, 367 /* glXCopySubBufferMESA */); +} + +static PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC +epoxy_glXCreateAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 388 /* glXCreateAssociatedContextAMD */); +} + +static PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC +epoxy_glXCreateAssociatedContextAttribsAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 418 /* glXCreateAssociatedContextAttribsAMD */); +} + +static PFNGLXCREATECONTEXTPROC +epoxy_glXCreateContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 455 /* glXCreateContext */); +} + +static PFNGLXCREATECONTEXTATTRIBSARBPROC +epoxy_glXCreateContextAttribsARB_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_ARB_create_context, 472 /* glXCreateContextAttribsARB */); +} + +static PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC +epoxy_glXCreateContextWithConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 499 /* glXCreateContextWithConfigSGIX */); +} + +static PFNGLXCREATEGLXPBUFFERSGIXPROC +epoxy_glXCreateGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 530 /* glXCreateGLXPbufferSGIX */); +} + +static PFNGLXCREATEGLXPIXMAPPROC +epoxy_glXCreateGLXPixmap_resolver(void) +{ + return glx_single_resolver(GLX_10, 554 /* glXCreateGLXPixmap */); +} + +static PFNGLXCREATEGLXPIXMAPMESAPROC +epoxy_glXCreateGLXPixmapMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_pixmap_colormap, 573 /* glXCreateGLXPixmapMESA */); +} + +static PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC +epoxy_glXCreateGLXPixmapWithConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 596 /* glXCreateGLXPixmapWithConfigSGIX */); +} + +static PFNGLXCREATENEWCONTEXTPROC +epoxy_glXCreateNewContext_resolver(void) +{ + return glx_single_resolver(GLX_13, 629 /* glXCreateNewContext */); +} + +static PFNGLXCREATEPBUFFERPROC +epoxy_glXCreatePbuffer_resolver(void) +{ + return glx_single_resolver(GLX_13, 649 /* glXCreatePbuffer */); +} + +static PFNGLXCREATEPIXMAPPROC +epoxy_glXCreatePixmap_resolver(void) +{ + return glx_single_resolver(GLX_13, 666 /* glXCreatePixmap */); +} + +static PFNGLXCREATEWINDOWPROC +epoxy_glXCreateWindow_resolver(void) +{ + return glx_single_resolver(GLX_13, 682 /* glXCreateWindow */); +} + +static PFNGLXCUSHIONSGIPROC +epoxy_glXCushionSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_cushion, 698 /* glXCushionSGI */); +} + +static PFNGLXDELAYBEFORESWAPNVPROC +epoxy_glXDelayBeforeSwapNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_delay_before_swap, 712 /* glXDelayBeforeSwapNV */); +} + +static PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC +epoxy_glXDeleteAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 733 /* glXDeleteAssociatedContextAMD */); +} + +static PFNGLXDESTROYCONTEXTPROC +epoxy_glXDestroyContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 763 /* glXDestroyContext */); +} + +static PFNGLXDESTROYGLXPBUFFERSGIXPROC +epoxy_glXDestroyGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 781 /* glXDestroyGLXPbufferSGIX */); +} + +static PFNGLXDESTROYGLXPIXMAPPROC +epoxy_glXDestroyGLXPixmap_resolver(void) +{ + return glx_single_resolver(GLX_10, 806 /* glXDestroyGLXPixmap */); +} + +static PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC +epoxy_glXDestroyGLXVideoSourceSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_source, 826 /* glXDestroyGLXVideoSourceSGIX */); +} + +static PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC +epoxy_glXDestroyHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 855 /* glXDestroyHyperpipeConfigSGIX */); +} + +static PFNGLXDESTROYPBUFFERPROC +epoxy_glXDestroyPbuffer_resolver(void) +{ + return glx_single_resolver(GLX_13, 885 /* glXDestroyPbuffer */); +} + +static PFNGLXDESTROYPIXMAPPROC +epoxy_glXDestroyPixmap_resolver(void) +{ + return glx_single_resolver(GLX_13, 903 /* glXDestroyPixmap */); +} + +static PFNGLXDESTROYWINDOWPROC +epoxy_glXDestroyWindow_resolver(void) +{ + return glx_single_resolver(GLX_13, 920 /* glXDestroyWindow */); +} + +static PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC +epoxy_glXEnumerateVideoCaptureDevicesNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 937 /* glXEnumerateVideoCaptureDevicesNV */); +} + +static PFNGLXENUMERATEVIDEODEVICESNVPROC +epoxy_glXEnumerateVideoDevicesNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_present_video, 971 /* glXEnumerateVideoDevicesNV */); +} + +static PFNGLXFREECONTEXTEXTPROC +epoxy_glXFreeContextEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 998 /* glXFreeContextEXT */); +} + +static PFNGLXGETAGPOFFSETMESAPROC +epoxy_glXGetAGPOffsetMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_agp_offset, 1016 /* glXGetAGPOffsetMESA */); +} + +static PFNGLXGETCLIENTSTRINGPROC +epoxy_glXGetClientString_resolver(void) +{ + return glx_single_resolver(GLX_11, 1036 /* glXGetClientString */); +} + +static PFNGLXGETCONFIGPROC +epoxy_glXGetConfig_resolver(void) +{ + return glx_single_resolver(GLX_10, 1055 /* glXGetConfig */); +} + +static PFNGLXGETCONTEXTGPUIDAMDPROC +epoxy_glXGetContextGPUIDAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1068 /* glXGetContextGPUIDAMD */); +} + +static PFNGLXGETCONTEXTIDEXTPROC +epoxy_glXGetContextIDEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1090 /* glXGetContextIDEXT */); +} + +static PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC +epoxy_glXGetCurrentAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1109 /* glXGetCurrentAssociatedContextAMD */); +} + +static PFNGLXGETCURRENTCONTEXTPROC +epoxy_glXGetCurrentContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 1143 /* glXGetCurrentContext */); +} + +static PFNGLXGETCURRENTDISPLAYPROC +epoxy_glXGetCurrentDisplay_resolver(void) +{ + return glx_single_resolver(GLX_12, 1164 /* glXGetCurrentDisplay */); +} + +static PFNGLXGETCURRENTDISPLAYEXTPROC +epoxy_glXGetCurrentDisplayEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1185 /* glXGetCurrentDisplayEXT */); +} + +static PFNGLXGETCURRENTDRAWABLEPROC +epoxy_glXGetCurrentDrawable_resolver(void) +{ + return glx_single_resolver(GLX_10, 1209 /* glXGetCurrentDrawable */); +} + +static PFNGLXGETCURRENTREADDRAWABLEPROC +epoxy_glXGetCurrentReadDrawable_resolver(void) +{ + return glx_single_resolver(GLX_13, 1231 /* glXGetCurrentReadDrawable */); +} + +static PFNGLXGETCURRENTREADDRAWABLESGIPROC +epoxy_glXGetCurrentReadDrawableSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_make_current_read, 1257 /* glXGetCurrentReadDrawableSGI */); +} + +static PFNGLXGETFBCONFIGATTRIBPROC +epoxy_glXGetFBConfigAttrib_resolver(void) +{ + return glx_single_resolver(GLX_13, 1286 /* glXGetFBConfigAttrib */); +} + +static PFNGLXGETFBCONFIGATTRIBSGIXPROC +epoxy_glXGetFBConfigAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1307 /* glXGetFBConfigAttribSGIX */); +} + +static PFNGLXGETFBCONFIGFROMVISUALSGIXPROC +epoxy_glXGetFBConfigFromVisualSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1332 /* glXGetFBConfigFromVisualSGIX */); +} + +static PFNGLXGETFBCONFIGSPROC +epoxy_glXGetFBConfigs_resolver(void) +{ + return glx_single_resolver(GLX_13, 1361 /* glXGetFBConfigs */); +} + +static PFNGLXGETGPUIDSAMDPROC +epoxy_glXGetGPUIDsAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1377 /* glXGetGPUIDsAMD */); +} + +static PFNGLXGETGPUINFOAMDPROC +epoxy_glXGetGPUInfoAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1393 /* glXGetGPUInfoAMD */); +} + +static PFNGLXGETMSCRATEOMLPROC +epoxy_glXGetMscRateOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 1410 /* glXGetMscRateOML */); +} + +static PFNGLXGETPROCADDRESSPROC +epoxy_glXGetProcAddress_resolver(void) +{ + return glx_single_resolver(always_present, 1427 /* glXGetProcAddress */); +} + +static PFNGLXGETPROCADDRESSARBPROC +epoxy_glXGetProcAddressARB_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_ARB_get_proc_address, 1445 /* glXGetProcAddressARB */); +} + +static PFNGLXGETSELECTEDEVENTPROC +epoxy_glXGetSelectedEvent_resolver(void) +{ + return glx_single_resolver(GLX_13, 1466 /* glXGetSelectedEvent */); +} + +static PFNGLXGETSELECTEDEVENTSGIXPROC +epoxy_glXGetSelectedEventSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 1486 /* glXGetSelectedEventSGIX */); +} + +static PFNGLXGETSYNCVALUESOMLPROC +epoxy_glXGetSyncValuesOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 1510 /* glXGetSyncValuesOML */); +} + +static PFNGLXGETTRANSPARENTINDEXSUNPROC +epoxy_glXGetTransparentIndexSUN_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SUN_get_transparent_index, 1530 /* glXGetTransparentIndexSUN */); +} + +static PFNGLXGETVIDEODEVICENVPROC +epoxy_glXGetVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 1556 /* glXGetVideoDeviceNV */); +} + +static PFNGLXGETVIDEOINFONVPROC +epoxy_glXGetVideoInfoNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 1576 /* glXGetVideoInfoNV */); +} + +static PFNGLXGETVIDEOSYNCSGIPROC +epoxy_glXGetVideoSyncSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_video_sync, 1594 /* glXGetVideoSyncSGI */); +} + +static PFNGLXGETVISUALFROMFBCONFIGPROC +epoxy_glXGetVisualFromFBConfig_resolver(void) +{ + return glx_single_resolver(GLX_13, 1613 /* glXGetVisualFromFBConfig */); +} + +static PFNGLXGETVISUALFROMFBCONFIGSGIXPROC +epoxy_glXGetVisualFromFBConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1638 /* glXGetVisualFromFBConfigSGIX */); +} + +static PFNGLXHYPERPIPEATTRIBSGIXPROC +epoxy_glXHyperpipeAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 1667 /* glXHyperpipeAttribSGIX */); +} + +static PFNGLXHYPERPIPECONFIGSGIXPROC +epoxy_glXHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 1690 /* glXHyperpipeConfigSGIX */); +} + +static PFNGLXIMPORTCONTEXTEXTPROC +epoxy_glXImportContextEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1713 /* glXImportContextEXT */); +} + +static PFNGLXISDIRECTPROC +epoxy_glXIsDirect_resolver(void) +{ + return glx_single_resolver(GLX_10, 1733 /* glXIsDirect */); +} + +static PFNGLXJOINSWAPGROUPNVPROC +epoxy_glXJoinSwapGroupNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 1745 /* glXJoinSwapGroupNV */); +} + +static PFNGLXJOINSWAPGROUPSGIXPROC +epoxy_glXJoinSwapGroupSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_group, 1764 /* glXJoinSwapGroupSGIX */); +} + +static PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC +epoxy_glXLockVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 1785 /* glXLockVideoCaptureDeviceNV */); +} + +static PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC +epoxy_glXMakeAssociatedContextCurrentAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1813 /* glXMakeAssociatedContextCurrentAMD */); +} + +static PFNGLXMAKECONTEXTCURRENTPROC +epoxy_glXMakeContextCurrent_resolver(void) +{ + return glx_single_resolver(GLX_13, 1848 /* glXMakeContextCurrent */); +} + +static PFNGLXMAKECURRENTPROC +epoxy_glXMakeCurrent_resolver(void) +{ + return glx_single_resolver(GLX_10, 1870 /* glXMakeCurrent */); +} + +static PFNGLXMAKECURRENTREADSGIPROC +epoxy_glXMakeCurrentReadSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_make_current_read, 1885 /* glXMakeCurrentReadSGI */); +} + +static PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC +epoxy_glXNamedCopyBufferSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_buffer, 1907 /* glXNamedCopyBufferSubDataNV */); +} + +static PFNGLXQUERYCHANNELDELTASSGIXPROC +epoxy_glXQueryChannelDeltasSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 1935 /* glXQueryChannelDeltasSGIX */); +} + +static PFNGLXQUERYCHANNELRECTSGIXPROC +epoxy_glXQueryChannelRectSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 1961 /* glXQueryChannelRectSGIX */); +} + +static PFNGLXQUERYCONTEXTPROC +epoxy_glXQueryContext_resolver(void) +{ + return glx_single_resolver(GLX_13, 1985 /* glXQueryContext */); +} + +static PFNGLXQUERYCONTEXTINFOEXTPROC +epoxy_glXQueryContextInfoEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 2001 /* glXQueryContextInfoEXT */); +} + +static PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC +epoxy_glXQueryCurrentRendererIntegerMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2024 /* glXQueryCurrentRendererIntegerMESA */); +} + +static PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC +epoxy_glXQueryCurrentRendererStringMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2059 /* glXQueryCurrentRendererStringMESA */); +} + +static PFNGLXQUERYDRAWABLEPROC +epoxy_glXQueryDrawable_resolver(void) +{ + return glx_single_resolver(GLX_13, 2093 /* glXQueryDrawable */); +} + +static PFNGLXQUERYEXTENSIONPROC +epoxy_glXQueryExtension_resolver(void) +{ + return glx_single_resolver(GLX_10, 2110 /* glXQueryExtension */); +} + +static PFNGLXQUERYEXTENSIONSSTRINGPROC +epoxy_glXQueryExtensionsString_resolver(void) +{ + return glx_single_resolver(GLX_11, 2128 /* glXQueryExtensionsString */); +} + +static PFNGLXQUERYFRAMECOUNTNVPROC +epoxy_glXQueryFrameCountNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2153 /* glXQueryFrameCountNV */); +} + +static PFNGLXQUERYGLXPBUFFERSGIXPROC +epoxy_glXQueryGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 2174 /* glXQueryGLXPbufferSGIX */); +} + +static PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC +epoxy_glXQueryHyperpipeAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2197 /* glXQueryHyperpipeAttribSGIX */); +} + +static PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC +epoxy_glXQueryHyperpipeBestAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2225 /* glXQueryHyperpipeBestAttribSGIX */); +} + +static PFNGLXQUERYHYPERPIPECONFIGSGIXPROC +epoxy_glXQueryHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2257 /* glXQueryHyperpipeConfigSGIX */); +} + +static PFNGLXQUERYHYPERPIPENETWORKSGIXPROC +epoxy_glXQueryHyperpipeNetworkSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2285 /* glXQueryHyperpipeNetworkSGIX */); +} + +static PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC +epoxy_glXQueryMaxSwapBarriersSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_barrier, 2314 /* glXQueryMaxSwapBarriersSGIX */); +} + +static PFNGLXQUERYMAXSWAPGROUPSNVPROC +epoxy_glXQueryMaxSwapGroupsNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2342 /* glXQueryMaxSwapGroupsNV */); +} + +static PFNGLXQUERYRENDERERINTEGERMESAPROC +epoxy_glXQueryRendererIntegerMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2366 /* glXQueryRendererIntegerMESA */); +} + +static PFNGLXQUERYRENDERERSTRINGMESAPROC +epoxy_glXQueryRendererStringMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2394 /* glXQueryRendererStringMESA */); +} + +static PFNGLXQUERYSERVERSTRINGPROC +epoxy_glXQueryServerString_resolver(void) +{ + return glx_single_resolver(GLX_11, 2421 /* glXQueryServerString */); +} + +static PFNGLXQUERYSWAPGROUPNVPROC +epoxy_glXQuerySwapGroupNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2442 /* glXQuerySwapGroupNV */); +} + +static PFNGLXQUERYVERSIONPROC +epoxy_glXQueryVersion_resolver(void) +{ + return glx_single_resolver(GLX_10, 2462 /* glXQueryVersion */); +} + +static PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC +epoxy_glXQueryVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 2478 /* glXQueryVideoCaptureDeviceNV */); +} + +static PFNGLXRELEASEBUFFERSMESAPROC +epoxy_glXReleaseBuffersMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_release_buffers, 2507 /* glXReleaseBuffersMESA */); +} + +static PFNGLXRELEASETEXIMAGEEXTPROC +epoxy_glXReleaseTexImageEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_texture_from_pixmap, 2529 /* glXReleaseTexImageEXT */); +} + +static PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC +epoxy_glXReleaseVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 2551 /* glXReleaseVideoCaptureDeviceNV */); +} + +static PFNGLXRELEASEVIDEODEVICENVPROC +epoxy_glXReleaseVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2582 /* glXReleaseVideoDeviceNV */); +} + +static PFNGLXRELEASEVIDEOIMAGENVPROC +epoxy_glXReleaseVideoImageNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2606 /* glXReleaseVideoImageNV */); +} + +static PFNGLXRESETFRAMECOUNTNVPROC +epoxy_glXResetFrameCountNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2629 /* glXResetFrameCountNV */); +} + +static PFNGLXSELECTEVENTPROC +epoxy_glXSelectEvent_resolver(void) +{ + return glx_single_resolver(GLX_13, 2650 /* glXSelectEvent */); +} + +static PFNGLXSELECTEVENTSGIXPROC +epoxy_glXSelectEventSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 2665 /* glXSelectEventSGIX */); +} + +static PFNGLXSENDPBUFFERTOVIDEONVPROC +epoxy_glXSendPbufferToVideoNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2684 /* glXSendPbufferToVideoNV */); +} + +static PFNGLXSET3DFXMODEMESAPROC +epoxy_glXSet3DfxModeMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_set_3dfx_mode, 2708 /* glXSet3DfxModeMESA */); +} + +static PFNGLXSWAPBUFFERSPROC +epoxy_glXSwapBuffers_resolver(void) +{ + return glx_single_resolver(GLX_10, 2727 /* glXSwapBuffers */); +} + +static PFNGLXSWAPBUFFERSMSCOMLPROC +epoxy_glXSwapBuffersMscOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2742 /* glXSwapBuffersMscOML */); +} + +static PFNGLXSWAPINTERVALEXTPROC +epoxy_glXSwapIntervalEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_swap_control, 2763 /* glXSwapIntervalEXT */); +} + +static PFNGLXSWAPINTERVALSGIPROC +epoxy_glXSwapIntervalSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_swap_control, 2782 /* glXSwapIntervalSGI */); +} + +static PFNGLXUSEXFONTPROC +epoxy_glXUseXFont_resolver(void) +{ + return glx_single_resolver(GLX_10, 2801 /* glXUseXFont */); +} + +static PFNGLXWAITFORMSCOMLPROC +epoxy_glXWaitForMscOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2813 /* glXWaitForMscOML */); +} + +static PFNGLXWAITFORSBCOMLPROC +epoxy_glXWaitForSbcOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2830 /* glXWaitForSbcOML */); +} + +static PFNGLXWAITGLPROC +epoxy_glXWaitGL_resolver(void) +{ + return glx_single_resolver(GLX_10, 2847 /* glXWaitGL */); +} + +static PFNGLXWAITVIDEOSYNCSGIPROC +epoxy_glXWaitVideoSyncSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_video_sync, 2857 /* glXWaitVideoSyncSGI */); +} + +static PFNGLXWAITXPROC +epoxy_glXWaitX_resolver(void) +{ + return glx_single_resolver(GLX_10, 2877 /* glXWaitX */); +} + +GEN_THUNKS_RET(int, glXBindChannelToWindowSGIX, (Display * display, int screen, int channel, Window window), (display, screen, channel, window)) +GEN_THUNKS_RET(int, glXBindHyperpipeSGIX, (Display * dpy, int hpId), (dpy, hpId)) +GEN_THUNKS_RET(Bool, glXBindSwapBarrierNV, (Display * dpy, GLuint group, GLuint barrier), (dpy, group, barrier)) +GEN_THUNKS(glXBindSwapBarrierSGIX, (Display * dpy, GLXDrawable drawable, int barrier), (dpy, drawable, barrier)) +GEN_THUNKS(glXBindTexImageEXT, (Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list), (dpy, drawable, buffer, attrib_list)) +GEN_THUNKS_RET(int, glXBindVideoCaptureDeviceNV, (Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device), (dpy, video_capture_slot, device)) +GEN_THUNKS_RET(int, glXBindVideoDeviceNV, (Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list), (dpy, video_slot, video_device, attrib_list)) +GEN_THUNKS_RET(int, glXBindVideoImageNV, (Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer), (dpy, VideoDevice, pbuf, iVideoBuffer)) +GEN_THUNKS(glXBlitContextFramebufferAMD, (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS_RET(int, glXChannelRectSGIX, (Display * display, int screen, int channel, int x, int y, int w, int h), (display, screen, channel, x, y, w, h)) +GEN_THUNKS_RET(int, glXChannelRectSyncSGIX, (Display * display, int screen, int channel, GLenum synctype), (display, screen, channel, synctype)) +GEN_THUNKS_RET(GLXFBConfig *, glXChooseFBConfig, (Display * dpy, int screen, const int * attrib_list, int * nelements), (dpy, screen, attrib_list, nelements)) +GEN_THUNKS_RET(GLXFBConfigSGIX *, glXChooseFBConfigSGIX, (Display * dpy, int screen, int * attrib_list, int * nelements), (dpy, screen, attrib_list, nelements)) +GEN_THUNKS_RET(XVisualInfo *, glXChooseVisual, (Display * dpy, int screen, int * attribList), (dpy, screen, attribList)) +GEN_THUNKS(glXCopyBufferSubDataNV, (Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (dpy, readCtx, writeCtx, readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glXCopyContext, (Display * dpy, GLXContext src, GLXContext dst, unsigned long mask), (dpy, src, dst, mask)) +GEN_THUNKS(glXCopyImageSubDataNV, (Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (dpy, srcCtx, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstCtx, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS(glXCopySubBufferMESA, (Display * dpy, GLXDrawable drawable, int x, int y, int width, int height), (dpy, drawable, x, y, width, height)) +GEN_THUNKS_RET(GLXContext, glXCreateAssociatedContextAMD, (unsigned int id, GLXContext share_list), (id, share_list)) +GEN_THUNKS_RET(GLXContext, glXCreateAssociatedContextAttribsAMD, (unsigned int id, GLXContext share_context, const int * attribList), (id, share_context, attribList)) +GEN_THUNKS_RET(GLXContext, glXCreateContext, (Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct), (dpy, vis, shareList, direct)) +GEN_THUNKS_RET(GLXContext, glXCreateContextAttribsARB, (Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list), (dpy, config, share_context, direct, attrib_list)) +GEN_THUNKS_RET(GLXContext, glXCreateContextWithConfigSGIX, (Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct), (dpy, config, render_type, share_list, direct)) +GEN_THUNKS_RET(GLXPbufferSGIX, glXCreateGLXPbufferSGIX, (Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list), (dpy, config, width, height, attrib_list)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmap, (Display * dpy, XVisualInfo * visual, Pixmap pixmap), (dpy, visual, pixmap)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmapMESA, (Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap), (dpy, visual, pixmap, cmap)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmapWithConfigSGIX, (Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap), (dpy, config, pixmap)) +GEN_THUNKS_RET(GLXContext, glXCreateNewContext, (Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct), (dpy, config, render_type, share_list, direct)) +GEN_THUNKS_RET(GLXPbuffer, glXCreatePbuffer, (Display * dpy, GLXFBConfig config, const int * attrib_list), (dpy, config, attrib_list)) +GEN_THUNKS_RET(GLXPixmap, glXCreatePixmap, (Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list), (dpy, config, pixmap, attrib_list)) +GEN_THUNKS_RET(GLXWindow, glXCreateWindow, (Display * dpy, GLXFBConfig config, Window win, const int * attrib_list), (dpy, config, win, attrib_list)) +GEN_THUNKS(glXCushionSGI, (Display * dpy, Window window, float cushion), (dpy, window, cushion)) +GEN_THUNKS_RET(Bool, glXDelayBeforeSwapNV, (Display * dpy, GLXDrawable drawable, GLfloat seconds), (dpy, drawable, seconds)) +GEN_THUNKS_RET(Bool, glXDeleteAssociatedContextAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS(glXDestroyContext, (Display * dpy, GLXContext ctx), (dpy, ctx)) +GEN_THUNKS(glXDestroyGLXPbufferSGIX, (Display * dpy, GLXPbufferSGIX pbuf), (dpy, pbuf)) +GEN_THUNKS(glXDestroyGLXPixmap, (Display * dpy, GLXPixmap pixmap), (dpy, pixmap)) +GEN_THUNKS(glXDestroyGLXVideoSourceSGIX, (Display * dpy, GLXVideoSourceSGIX glxvideosource), (dpy, glxvideosource)) +GEN_THUNKS_RET(int, glXDestroyHyperpipeConfigSGIX, (Display * dpy, int hpId), (dpy, hpId)) +GEN_THUNKS(glXDestroyPbuffer, (Display * dpy, GLXPbuffer pbuf), (dpy, pbuf)) +GEN_THUNKS(glXDestroyPixmap, (Display * dpy, GLXPixmap pixmap), (dpy, pixmap)) +GEN_THUNKS(glXDestroyWindow, (Display * dpy, GLXWindow win), (dpy, win)) +GEN_THUNKS_RET(GLXVideoCaptureDeviceNV *, glXEnumerateVideoCaptureDevicesNV, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS_RET(unsigned int *, glXEnumerateVideoDevicesNV, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS(glXFreeContextEXT, (Display * dpy, GLXContext context), (dpy, context)) +GEN_THUNKS_RET(unsigned int, glXGetAGPOffsetMESA, (const void * pointer), (pointer)) +GEN_THUNKS_RET(const char *, glXGetClientString, (Display * dpy, int name), (dpy, name)) +GEN_THUNKS_RET(int, glXGetConfig, (Display * dpy, XVisualInfo * visual, int attrib, int * value), (dpy, visual, attrib, value)) +GEN_THUNKS_RET(unsigned int, glXGetContextGPUIDAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS_RET(GLXContextID, glXGetContextIDEXT, (const GLXContext context), (context)) +GEN_THUNKS_RET(GLXContext, glXGetCurrentAssociatedContextAMD, (void), ()) +GEN_THUNKS_RET(GLXContext, glXGetCurrentContext, (void), ()) +GEN_THUNKS_RET(Display *, glXGetCurrentDisplay, (void), ()) +GEN_THUNKS_RET(Display *, glXGetCurrentDisplayEXT, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentDrawable, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentReadDrawable, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentReadDrawableSGI, (void), ()) +GEN_THUNKS_RET(int, glXGetFBConfigAttrib, (Display * dpy, GLXFBConfig config, int attribute, int * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(int, glXGetFBConfigAttribSGIX, (Display * dpy, GLXFBConfigSGIX config, int attribute, int * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(GLXFBConfigSGIX, glXGetFBConfigFromVisualSGIX, (Display * dpy, XVisualInfo * vis), (dpy, vis)) +GEN_THUNKS_RET(GLXFBConfig *, glXGetFBConfigs, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS_RET(unsigned int, glXGetGPUIDsAMD, (unsigned int maxCount, unsigned int * ids), (maxCount, ids)) +GEN_THUNKS_RET(int, glXGetGPUInfoAMD, (unsigned int id, int property, GLenum dataType, unsigned int size, void * data), (id, property, dataType, size, data)) +GEN_THUNKS_RET(Bool, glXGetMscRateOML, (Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator), (dpy, drawable, numerator, denominator)) +GEN_THUNKS_RET(__GLXextFuncPtr, glXGetProcAddress, (const GLubyte * procName), (procName)) +GEN_THUNKS_RET(__GLXextFuncPtr, glXGetProcAddressARB, (const GLubyte * procName), (procName)) +GEN_THUNKS(glXGetSelectedEvent, (Display * dpy, GLXDrawable draw, unsigned long * event_mask), (dpy, draw, event_mask)) +GEN_THUNKS(glXGetSelectedEventSGIX, (Display * dpy, GLXDrawable drawable, unsigned long * mask), (dpy, drawable, mask)) +GEN_THUNKS_RET(Bool, glXGetSyncValuesOML, (Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, ust, msc, sbc)) +GEN_THUNKS_RET(Status, glXGetTransparentIndexSUN, (Display * dpy, Window overlay, Window underlay, long * pTransparentIndex), (dpy, overlay, underlay, pTransparentIndex)) +GEN_THUNKS_RET(int, glXGetVideoDeviceNV, (Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice), (dpy, screen, numVideoDevices, pVideoDevice)) +GEN_THUNKS_RET(int, glXGetVideoInfoNV, (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo), (dpy, screen, VideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo)) +GEN_THUNKS_RET(int, glXGetVideoSyncSGI, (unsigned int * count), (count)) +GEN_THUNKS_RET(XVisualInfo *, glXGetVisualFromFBConfig, (Display * dpy, GLXFBConfig config), (dpy, config)) +GEN_THUNKS_RET(XVisualInfo *, glXGetVisualFromFBConfigSGIX, (Display * dpy, GLXFBConfigSGIX config), (dpy, config)) +GEN_THUNKS_RET(int, glXHyperpipeAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * attribList), (dpy, timeSlice, attrib, size, attribList)) +GEN_THUNKS_RET(int, glXHyperpipeConfigSGIX, (Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId), (dpy, networkId, npipes, cfg, hpId)) +GEN_THUNKS_RET(GLXContext, glXImportContextEXT, (Display * dpy, GLXContextID contextID), (dpy, contextID)) +GEN_THUNKS_RET(Bool, glXIsDirect, (Display * dpy, GLXContext ctx), (dpy, ctx)) +GEN_THUNKS_RET(Bool, glXJoinSwapGroupNV, (Display * dpy, GLXDrawable drawable, GLuint group), (dpy, drawable, group)) +GEN_THUNKS(glXJoinSwapGroupSGIX, (Display * dpy, GLXDrawable drawable, GLXDrawable member), (dpy, drawable, member)) +GEN_THUNKS(glXLockVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device), (dpy, device)) +GEN_THUNKS_RET(Bool, glXMakeAssociatedContextCurrentAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS_RET(Bool, glXMakeContextCurrent, (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS_RET(Bool, glXMakeCurrent, (Display * dpy, GLXDrawable drawable, GLXContext ctx), (dpy, drawable, ctx)) +GEN_THUNKS_RET(Bool, glXMakeCurrentReadSGI, (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS(glXNamedCopyBufferSubDataNV, (Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (dpy, readCtx, writeCtx, readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS_RET(int, glXQueryChannelDeltasSGIX, (Display * display, int screen, int channel, int * x, int * y, int * w, int * h), (display, screen, channel, x, y, w, h)) +GEN_THUNKS_RET(int, glXQueryChannelRectSGIX, (Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh), (display, screen, channel, dx, dy, dw, dh)) +GEN_THUNKS_RET(int, glXQueryContext, (Display * dpy, GLXContext ctx, int attribute, int * value), (dpy, ctx, attribute, value)) +GEN_THUNKS_RET(int, glXQueryContextInfoEXT, (Display * dpy, GLXContext context, int attribute, int * value), (dpy, context, attribute, value)) +GEN_THUNKS_RET(Bool, glXQueryCurrentRendererIntegerMESA, (int attribute, unsigned int * value), (attribute, value)) +GEN_THUNKS_RET(const char *, glXQueryCurrentRendererStringMESA, (int attribute), (attribute)) +GEN_THUNKS(glXQueryDrawable, (Display * dpy, GLXDrawable draw, int attribute, unsigned int * value), (dpy, draw, attribute, value)) +GEN_THUNKS_RET(Bool, glXQueryExtension, (Display * dpy, int * errorb, int * event), (dpy, errorb, event)) +GEN_THUNKS_RET(const char *, glXQueryExtensionsString, (Display * dpy, int screen), (dpy, screen)) +GEN_THUNKS_RET(Bool, glXQueryFrameCountNV, (Display * dpy, int screen, GLuint * count), (dpy, screen, count)) +GEN_THUNKS_RET(int, glXQueryGLXPbufferSGIX, (Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value), (dpy, pbuf, attribute, value)) +GEN_THUNKS_RET(int, glXQueryHyperpipeAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList), (dpy, timeSlice, attrib, size, returnAttribList)) +GEN_THUNKS_RET(int, glXQueryHyperpipeBestAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList), (dpy, timeSlice, attrib, size, attribList, returnAttribList)) +GEN_THUNKS_RET(GLXHyperpipeConfigSGIX *, glXQueryHyperpipeConfigSGIX, (Display * dpy, int hpId, int * npipes), (dpy, hpId, npipes)) +GEN_THUNKS_RET(GLXHyperpipeNetworkSGIX *, glXQueryHyperpipeNetworkSGIX, (Display * dpy, int * npipes), (dpy, npipes)) +GEN_THUNKS_RET(Bool, glXQueryMaxSwapBarriersSGIX, (Display * dpy, int screen, int * max), (dpy, screen, max)) +GEN_THUNKS_RET(Bool, glXQueryMaxSwapGroupsNV, (Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers), (dpy, screen, maxGroups, maxBarriers)) +GEN_THUNKS_RET(Bool, glXQueryRendererIntegerMESA, (Display * dpy, int screen, int renderer, int attribute, unsigned int * value), (dpy, screen, renderer, attribute, value)) +GEN_THUNKS_RET(const char *, glXQueryRendererStringMESA, (Display * dpy, int screen, int renderer, int attribute), (dpy, screen, renderer, attribute)) +GEN_THUNKS_RET(const char *, glXQueryServerString, (Display * dpy, int screen, int name), (dpy, screen, name)) +GEN_THUNKS_RET(Bool, glXQuerySwapGroupNV, (Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier), (dpy, drawable, group, barrier)) +GEN_THUNKS_RET(Bool, glXQueryVersion, (Display * dpy, int * maj, int * min), (dpy, maj, min)) +GEN_THUNKS_RET(int, glXQueryVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value), (dpy, device, attribute, value)) +GEN_THUNKS_RET(Bool, glXReleaseBuffersMESA, (Display * dpy, GLXDrawable drawable), (dpy, drawable)) +GEN_THUNKS(glXReleaseTexImageEXT, (Display * dpy, GLXDrawable drawable, int buffer), (dpy, drawable, buffer)) +GEN_THUNKS(glXReleaseVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device), (dpy, device)) +GEN_THUNKS_RET(int, glXReleaseVideoDeviceNV, (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice), (dpy, screen, VideoDevice)) +GEN_THUNKS_RET(int, glXReleaseVideoImageNV, (Display * dpy, GLXPbuffer pbuf), (dpy, pbuf)) +GEN_THUNKS_RET(Bool, glXResetFrameCountNV, (Display * dpy, int screen), (dpy, screen)) +GEN_THUNKS(glXSelectEvent, (Display * dpy, GLXDrawable draw, unsigned long event_mask), (dpy, draw, event_mask)) +GEN_THUNKS(glXSelectEventSGIX, (Display * dpy, GLXDrawable drawable, unsigned long mask), (dpy, drawable, mask)) +GEN_THUNKS_RET(int, glXSendPbufferToVideoNV, (Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock), (dpy, pbuf, iBufferType, pulCounterPbuffer, bBlock)) +GEN_THUNKS_RET(Bool, glXSet3DfxModeMESA, (int mode), (mode)) +GEN_THUNKS(glXSwapBuffers, (Display * dpy, GLXDrawable drawable), (dpy, drawable)) +GEN_THUNKS_RET(int64_t, glXSwapBuffersMscOML, (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder), (dpy, drawable, target_msc, divisor, remainder)) +GEN_THUNKS(glXSwapIntervalEXT, (Display * dpy, GLXDrawable drawable, int interval), (dpy, drawable, interval)) +GEN_THUNKS_RET(int, glXSwapIntervalSGI, (int interval), (interval)) +GEN_THUNKS(glXUseXFont, (Font font, int first, int count, int list), (font, first, count, list)) +GEN_THUNKS_RET(Bool, glXWaitForMscOML, (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc)) +GEN_THUNKS_RET(Bool, glXWaitForSbcOML, (Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, target_sbc, ust, msc, sbc)) +GEN_THUNKS(glXWaitGL, (void), ()) +GEN_THUNKS_RET(int, glXWaitVideoSyncSGI, (int divisor, int remainder, unsigned int * count), (divisor, remainder, count)) +GEN_THUNKS(glXWaitX, (void), ()) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_glXBindChannelToWindowSGIX_dispatch_table_rewrite_ptr, /* glXBindChannelToWindowSGIX */ + epoxy_glXBindHyperpipeSGIX_dispatch_table_rewrite_ptr, /* glXBindHyperpipeSGIX */ + epoxy_glXBindSwapBarrierNV_dispatch_table_rewrite_ptr, /* glXBindSwapBarrierNV */ + epoxy_glXBindSwapBarrierSGIX_dispatch_table_rewrite_ptr, /* glXBindSwapBarrierSGIX */ + epoxy_glXBindTexImageEXT_dispatch_table_rewrite_ptr, /* glXBindTexImageEXT */ + epoxy_glXBindVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXBindVideoCaptureDeviceNV */ + epoxy_glXBindVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXBindVideoDeviceNV */ + epoxy_glXBindVideoImageNV_dispatch_table_rewrite_ptr, /* glXBindVideoImageNV */ + epoxy_glXBlitContextFramebufferAMD_dispatch_table_rewrite_ptr, /* glXBlitContextFramebufferAMD */ + epoxy_glXChannelRectSGIX_dispatch_table_rewrite_ptr, /* glXChannelRectSGIX */ + epoxy_glXChannelRectSyncSGIX_dispatch_table_rewrite_ptr, /* glXChannelRectSyncSGIX */ + epoxy_glXChooseFBConfig_dispatch_table_rewrite_ptr, /* glXChooseFBConfig */ + epoxy_glXChooseFBConfigSGIX_dispatch_table_rewrite_ptr, /* glXChooseFBConfigSGIX */ + epoxy_glXChooseVisual_dispatch_table_rewrite_ptr, /* glXChooseVisual */ + epoxy_glXCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glXCopyBufferSubDataNV */ + epoxy_glXCopyContext_dispatch_table_rewrite_ptr, /* glXCopyContext */ + epoxy_glXCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* glXCopyImageSubDataNV */ + epoxy_glXCopySubBufferMESA_dispatch_table_rewrite_ptr, /* glXCopySubBufferMESA */ + epoxy_glXCreateAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXCreateAssociatedContextAMD */ + epoxy_glXCreateAssociatedContextAttribsAMD_dispatch_table_rewrite_ptr, /* glXCreateAssociatedContextAttribsAMD */ + epoxy_glXCreateContext_dispatch_table_rewrite_ptr, /* glXCreateContext */ + epoxy_glXCreateContextAttribsARB_dispatch_table_rewrite_ptr, /* glXCreateContextAttribsARB */ + epoxy_glXCreateContextWithConfigSGIX_dispatch_table_rewrite_ptr, /* glXCreateContextWithConfigSGIX */ + epoxy_glXCreateGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXCreateGLXPbufferSGIX */ + epoxy_glXCreateGLXPixmap_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmap */ + epoxy_glXCreateGLXPixmapMESA_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmapMESA */ + epoxy_glXCreateGLXPixmapWithConfigSGIX_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmapWithConfigSGIX */ + epoxy_glXCreateNewContext_dispatch_table_rewrite_ptr, /* glXCreateNewContext */ + epoxy_glXCreatePbuffer_dispatch_table_rewrite_ptr, /* glXCreatePbuffer */ + epoxy_glXCreatePixmap_dispatch_table_rewrite_ptr, /* glXCreatePixmap */ + epoxy_glXCreateWindow_dispatch_table_rewrite_ptr, /* glXCreateWindow */ + epoxy_glXCushionSGI_dispatch_table_rewrite_ptr, /* glXCushionSGI */ + epoxy_glXDelayBeforeSwapNV_dispatch_table_rewrite_ptr, /* glXDelayBeforeSwapNV */ + epoxy_glXDeleteAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXDeleteAssociatedContextAMD */ + epoxy_glXDestroyContext_dispatch_table_rewrite_ptr, /* glXDestroyContext */ + epoxy_glXDestroyGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXDestroyGLXPbufferSGIX */ + epoxy_glXDestroyGLXPixmap_dispatch_table_rewrite_ptr, /* glXDestroyGLXPixmap */ + epoxy_glXDestroyGLXVideoSourceSGIX_dispatch_table_rewrite_ptr, /* glXDestroyGLXVideoSourceSGIX */ + epoxy_glXDestroyHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXDestroyHyperpipeConfigSGIX */ + epoxy_glXDestroyPbuffer_dispatch_table_rewrite_ptr, /* glXDestroyPbuffer */ + epoxy_glXDestroyPixmap_dispatch_table_rewrite_ptr, /* glXDestroyPixmap */ + epoxy_glXDestroyWindow_dispatch_table_rewrite_ptr, /* glXDestroyWindow */ + epoxy_glXEnumerateVideoCaptureDevicesNV_dispatch_table_rewrite_ptr, /* glXEnumerateVideoCaptureDevicesNV */ + epoxy_glXEnumerateVideoDevicesNV_dispatch_table_rewrite_ptr, /* glXEnumerateVideoDevicesNV */ + epoxy_glXFreeContextEXT_dispatch_table_rewrite_ptr, /* glXFreeContextEXT */ + epoxy_glXGetAGPOffsetMESA_dispatch_table_rewrite_ptr, /* glXGetAGPOffsetMESA */ + epoxy_glXGetClientString_dispatch_table_rewrite_ptr, /* glXGetClientString */ + epoxy_glXGetConfig_dispatch_table_rewrite_ptr, /* glXGetConfig */ + epoxy_glXGetContextGPUIDAMD_dispatch_table_rewrite_ptr, /* glXGetContextGPUIDAMD */ + epoxy_glXGetContextIDEXT_dispatch_table_rewrite_ptr, /* glXGetContextIDEXT */ + epoxy_glXGetCurrentAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXGetCurrentAssociatedContextAMD */ + epoxy_glXGetCurrentContext_dispatch_table_rewrite_ptr, /* glXGetCurrentContext */ + epoxy_glXGetCurrentDisplay_dispatch_table_rewrite_ptr, /* glXGetCurrentDisplay */ + epoxy_glXGetCurrentDisplayEXT_dispatch_table_rewrite_ptr, /* glXGetCurrentDisplayEXT */ + epoxy_glXGetCurrentDrawable_dispatch_table_rewrite_ptr, /* glXGetCurrentDrawable */ + epoxy_glXGetCurrentReadDrawable_dispatch_table_rewrite_ptr, /* glXGetCurrentReadDrawable */ + epoxy_glXGetCurrentReadDrawableSGI_dispatch_table_rewrite_ptr, /* glXGetCurrentReadDrawableSGI */ + epoxy_glXGetFBConfigAttrib_dispatch_table_rewrite_ptr, /* glXGetFBConfigAttrib */ + epoxy_glXGetFBConfigAttribSGIX_dispatch_table_rewrite_ptr, /* glXGetFBConfigAttribSGIX */ + epoxy_glXGetFBConfigFromVisualSGIX_dispatch_table_rewrite_ptr, /* glXGetFBConfigFromVisualSGIX */ + epoxy_glXGetFBConfigs_dispatch_table_rewrite_ptr, /* glXGetFBConfigs */ + epoxy_glXGetGPUIDsAMD_dispatch_table_rewrite_ptr, /* glXGetGPUIDsAMD */ + epoxy_glXGetGPUInfoAMD_dispatch_table_rewrite_ptr, /* glXGetGPUInfoAMD */ + epoxy_glXGetMscRateOML_dispatch_table_rewrite_ptr, /* glXGetMscRateOML */ + epoxy_glXGetProcAddress_dispatch_table_rewrite_ptr, /* glXGetProcAddress */ + epoxy_glXGetProcAddressARB_dispatch_table_rewrite_ptr, /* glXGetProcAddressARB */ + epoxy_glXGetSelectedEvent_dispatch_table_rewrite_ptr, /* glXGetSelectedEvent */ + epoxy_glXGetSelectedEventSGIX_dispatch_table_rewrite_ptr, /* glXGetSelectedEventSGIX */ + epoxy_glXGetSyncValuesOML_dispatch_table_rewrite_ptr, /* glXGetSyncValuesOML */ + epoxy_glXGetTransparentIndexSUN_dispatch_table_rewrite_ptr, /* glXGetTransparentIndexSUN */ + epoxy_glXGetVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXGetVideoDeviceNV */ + epoxy_glXGetVideoInfoNV_dispatch_table_rewrite_ptr, /* glXGetVideoInfoNV */ + epoxy_glXGetVideoSyncSGI_dispatch_table_rewrite_ptr, /* glXGetVideoSyncSGI */ + epoxy_glXGetVisualFromFBConfig_dispatch_table_rewrite_ptr, /* glXGetVisualFromFBConfig */ + epoxy_glXGetVisualFromFBConfigSGIX_dispatch_table_rewrite_ptr, /* glXGetVisualFromFBConfigSGIX */ + epoxy_glXHyperpipeAttribSGIX_dispatch_table_rewrite_ptr, /* glXHyperpipeAttribSGIX */ + epoxy_glXHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXHyperpipeConfigSGIX */ + epoxy_glXImportContextEXT_dispatch_table_rewrite_ptr, /* glXImportContextEXT */ + epoxy_glXIsDirect_dispatch_table_rewrite_ptr, /* glXIsDirect */ + epoxy_glXJoinSwapGroupNV_dispatch_table_rewrite_ptr, /* glXJoinSwapGroupNV */ + epoxy_glXJoinSwapGroupSGIX_dispatch_table_rewrite_ptr, /* glXJoinSwapGroupSGIX */ + epoxy_glXLockVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXLockVideoCaptureDeviceNV */ + epoxy_glXMakeAssociatedContextCurrentAMD_dispatch_table_rewrite_ptr, /* glXMakeAssociatedContextCurrentAMD */ + epoxy_glXMakeContextCurrent_dispatch_table_rewrite_ptr, /* glXMakeContextCurrent */ + epoxy_glXMakeCurrent_dispatch_table_rewrite_ptr, /* glXMakeCurrent */ + epoxy_glXMakeCurrentReadSGI_dispatch_table_rewrite_ptr, /* glXMakeCurrentReadSGI */ + epoxy_glXNamedCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glXNamedCopyBufferSubDataNV */ + epoxy_glXQueryChannelDeltasSGIX_dispatch_table_rewrite_ptr, /* glXQueryChannelDeltasSGIX */ + epoxy_glXQueryChannelRectSGIX_dispatch_table_rewrite_ptr, /* glXQueryChannelRectSGIX */ + epoxy_glXQueryContext_dispatch_table_rewrite_ptr, /* glXQueryContext */ + epoxy_glXQueryContextInfoEXT_dispatch_table_rewrite_ptr, /* glXQueryContextInfoEXT */ + epoxy_glXQueryCurrentRendererIntegerMESA_dispatch_table_rewrite_ptr, /* glXQueryCurrentRendererIntegerMESA */ + epoxy_glXQueryCurrentRendererStringMESA_dispatch_table_rewrite_ptr, /* glXQueryCurrentRendererStringMESA */ + epoxy_glXQueryDrawable_dispatch_table_rewrite_ptr, /* glXQueryDrawable */ + epoxy_glXQueryExtension_dispatch_table_rewrite_ptr, /* glXQueryExtension */ + epoxy_glXQueryExtensionsString_dispatch_table_rewrite_ptr, /* glXQueryExtensionsString */ + epoxy_glXQueryFrameCountNV_dispatch_table_rewrite_ptr, /* glXQueryFrameCountNV */ + epoxy_glXQueryGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXQueryGLXPbufferSGIX */ + epoxy_glXQueryHyperpipeAttribSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeAttribSGIX */ + epoxy_glXQueryHyperpipeBestAttribSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeBestAttribSGIX */ + epoxy_glXQueryHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeConfigSGIX */ + epoxy_glXQueryHyperpipeNetworkSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeNetworkSGIX */ + epoxy_glXQueryMaxSwapBarriersSGIX_dispatch_table_rewrite_ptr, /* glXQueryMaxSwapBarriersSGIX */ + epoxy_glXQueryMaxSwapGroupsNV_dispatch_table_rewrite_ptr, /* glXQueryMaxSwapGroupsNV */ + epoxy_glXQueryRendererIntegerMESA_dispatch_table_rewrite_ptr, /* glXQueryRendererIntegerMESA */ + epoxy_glXQueryRendererStringMESA_dispatch_table_rewrite_ptr, /* glXQueryRendererStringMESA */ + epoxy_glXQueryServerString_dispatch_table_rewrite_ptr, /* glXQueryServerString */ + epoxy_glXQuerySwapGroupNV_dispatch_table_rewrite_ptr, /* glXQuerySwapGroupNV */ + epoxy_glXQueryVersion_dispatch_table_rewrite_ptr, /* glXQueryVersion */ + epoxy_glXQueryVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXQueryVideoCaptureDeviceNV */ + epoxy_glXReleaseBuffersMESA_dispatch_table_rewrite_ptr, /* glXReleaseBuffersMESA */ + epoxy_glXReleaseTexImageEXT_dispatch_table_rewrite_ptr, /* glXReleaseTexImageEXT */ + epoxy_glXReleaseVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoCaptureDeviceNV */ + epoxy_glXReleaseVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoDeviceNV */ + epoxy_glXReleaseVideoImageNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoImageNV */ + epoxy_glXResetFrameCountNV_dispatch_table_rewrite_ptr, /* glXResetFrameCountNV */ + epoxy_glXSelectEvent_dispatch_table_rewrite_ptr, /* glXSelectEvent */ + epoxy_glXSelectEventSGIX_dispatch_table_rewrite_ptr, /* glXSelectEventSGIX */ + epoxy_glXSendPbufferToVideoNV_dispatch_table_rewrite_ptr, /* glXSendPbufferToVideoNV */ + epoxy_glXSet3DfxModeMESA_dispatch_table_rewrite_ptr, /* glXSet3DfxModeMESA */ + epoxy_glXSwapBuffers_dispatch_table_rewrite_ptr, /* glXSwapBuffers */ + epoxy_glXSwapBuffersMscOML_dispatch_table_rewrite_ptr, /* glXSwapBuffersMscOML */ + epoxy_glXSwapIntervalEXT_dispatch_table_rewrite_ptr, /* glXSwapIntervalEXT */ + epoxy_glXSwapIntervalSGI_dispatch_table_rewrite_ptr, /* glXSwapIntervalSGI */ + epoxy_glXUseXFont_dispatch_table_rewrite_ptr, /* glXUseXFont */ + epoxy_glXWaitForMscOML_dispatch_table_rewrite_ptr, /* glXWaitForMscOML */ + epoxy_glXWaitForSbcOML_dispatch_table_rewrite_ptr, /* glXWaitForSbcOML */ + epoxy_glXWaitGL_dispatch_table_rewrite_ptr, /* glXWaitGL */ + epoxy_glXWaitVideoSyncSGI_dispatch_table_rewrite_ptr, /* glXWaitVideoSyncSGI */ + epoxy_glXWaitX_dispatch_table_rewrite_ptr, /* glXWaitX */ +}; + +uint32_t glx_tls_index; +uint32_t glx_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(glx_tls_index); +} + +void +glx_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +glx_switch_to_dispatch_table(void) +{ + epoxy_glXBindChannelToWindowSGIX = epoxy_glXBindChannelToWindowSGIX_dispatch_table_thunk; + epoxy_glXBindHyperpipeSGIX = epoxy_glXBindHyperpipeSGIX_dispatch_table_thunk; + epoxy_glXBindSwapBarrierNV = epoxy_glXBindSwapBarrierNV_dispatch_table_thunk; + epoxy_glXBindSwapBarrierSGIX = epoxy_glXBindSwapBarrierSGIX_dispatch_table_thunk; + epoxy_glXBindTexImageEXT = epoxy_glXBindTexImageEXT_dispatch_table_thunk; + epoxy_glXBindVideoCaptureDeviceNV = epoxy_glXBindVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXBindVideoDeviceNV = epoxy_glXBindVideoDeviceNV_dispatch_table_thunk; + epoxy_glXBindVideoImageNV = epoxy_glXBindVideoImageNV_dispatch_table_thunk; + epoxy_glXBlitContextFramebufferAMD = epoxy_glXBlitContextFramebufferAMD_dispatch_table_thunk; + epoxy_glXChannelRectSGIX = epoxy_glXChannelRectSGIX_dispatch_table_thunk; + epoxy_glXChannelRectSyncSGIX = epoxy_glXChannelRectSyncSGIX_dispatch_table_thunk; + epoxy_glXChooseFBConfig = epoxy_glXChooseFBConfig_dispatch_table_thunk; + epoxy_glXChooseFBConfigSGIX = epoxy_glXChooseFBConfigSGIX_dispatch_table_thunk; + epoxy_glXChooseVisual = epoxy_glXChooseVisual_dispatch_table_thunk; + epoxy_glXCopyBufferSubDataNV = epoxy_glXCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glXCopyContext = epoxy_glXCopyContext_dispatch_table_thunk; + epoxy_glXCopyImageSubDataNV = epoxy_glXCopyImageSubDataNV_dispatch_table_thunk; + epoxy_glXCopySubBufferMESA = epoxy_glXCopySubBufferMESA_dispatch_table_thunk; + epoxy_glXCreateAssociatedContextAMD = epoxy_glXCreateAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXCreateAssociatedContextAttribsAMD = epoxy_glXCreateAssociatedContextAttribsAMD_dispatch_table_thunk; + epoxy_glXCreateContext = epoxy_glXCreateContext_dispatch_table_thunk; + epoxy_glXCreateContextAttribsARB = epoxy_glXCreateContextAttribsARB_dispatch_table_thunk; + epoxy_glXCreateContextWithConfigSGIX = epoxy_glXCreateContextWithConfigSGIX_dispatch_table_thunk; + epoxy_glXCreateGLXPbufferSGIX = epoxy_glXCreateGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXCreateGLXPixmap = epoxy_glXCreateGLXPixmap_dispatch_table_thunk; + epoxy_glXCreateGLXPixmapMESA = epoxy_glXCreateGLXPixmapMESA_dispatch_table_thunk; + epoxy_glXCreateGLXPixmapWithConfigSGIX = epoxy_glXCreateGLXPixmapWithConfigSGIX_dispatch_table_thunk; + epoxy_glXCreateNewContext = epoxy_glXCreateNewContext_dispatch_table_thunk; + epoxy_glXCreatePbuffer = epoxy_glXCreatePbuffer_dispatch_table_thunk; + epoxy_glXCreatePixmap = epoxy_glXCreatePixmap_dispatch_table_thunk; + epoxy_glXCreateWindow = epoxy_glXCreateWindow_dispatch_table_thunk; + epoxy_glXCushionSGI = epoxy_glXCushionSGI_dispatch_table_thunk; + epoxy_glXDelayBeforeSwapNV = epoxy_glXDelayBeforeSwapNV_dispatch_table_thunk; + epoxy_glXDeleteAssociatedContextAMD = epoxy_glXDeleteAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXDestroyContext = epoxy_glXDestroyContext_dispatch_table_thunk; + epoxy_glXDestroyGLXPbufferSGIX = epoxy_glXDestroyGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXDestroyGLXPixmap = epoxy_glXDestroyGLXPixmap_dispatch_table_thunk; + epoxy_glXDestroyGLXVideoSourceSGIX = epoxy_glXDestroyGLXVideoSourceSGIX_dispatch_table_thunk; + epoxy_glXDestroyHyperpipeConfigSGIX = epoxy_glXDestroyHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXDestroyPbuffer = epoxy_glXDestroyPbuffer_dispatch_table_thunk; + epoxy_glXDestroyPixmap = epoxy_glXDestroyPixmap_dispatch_table_thunk; + epoxy_glXDestroyWindow = epoxy_glXDestroyWindow_dispatch_table_thunk; + epoxy_glXEnumerateVideoCaptureDevicesNV = epoxy_glXEnumerateVideoCaptureDevicesNV_dispatch_table_thunk; + epoxy_glXEnumerateVideoDevicesNV = epoxy_glXEnumerateVideoDevicesNV_dispatch_table_thunk; + epoxy_glXFreeContextEXT = epoxy_glXFreeContextEXT_dispatch_table_thunk; + epoxy_glXGetAGPOffsetMESA = epoxy_glXGetAGPOffsetMESA_dispatch_table_thunk; + epoxy_glXGetClientString = epoxy_glXGetClientString_dispatch_table_thunk; + epoxy_glXGetConfig = epoxy_glXGetConfig_dispatch_table_thunk; + epoxy_glXGetContextGPUIDAMD = epoxy_glXGetContextGPUIDAMD_dispatch_table_thunk; + epoxy_glXGetContextIDEXT = epoxy_glXGetContextIDEXT_dispatch_table_thunk; + epoxy_glXGetCurrentAssociatedContextAMD = epoxy_glXGetCurrentAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXGetCurrentContext = epoxy_glXGetCurrentContext_dispatch_table_thunk; + epoxy_glXGetCurrentDisplay = epoxy_glXGetCurrentDisplay_dispatch_table_thunk; + epoxy_glXGetCurrentDisplayEXT = epoxy_glXGetCurrentDisplayEXT_dispatch_table_thunk; + epoxy_glXGetCurrentDrawable = epoxy_glXGetCurrentDrawable_dispatch_table_thunk; + epoxy_glXGetCurrentReadDrawable = epoxy_glXGetCurrentReadDrawable_dispatch_table_thunk; + epoxy_glXGetCurrentReadDrawableSGI = epoxy_glXGetCurrentReadDrawableSGI_dispatch_table_thunk; + epoxy_glXGetFBConfigAttrib = epoxy_glXGetFBConfigAttrib_dispatch_table_thunk; + epoxy_glXGetFBConfigAttribSGIX = epoxy_glXGetFBConfigAttribSGIX_dispatch_table_thunk; + epoxy_glXGetFBConfigFromVisualSGIX = epoxy_glXGetFBConfigFromVisualSGIX_dispatch_table_thunk; + epoxy_glXGetFBConfigs = epoxy_glXGetFBConfigs_dispatch_table_thunk; + epoxy_glXGetGPUIDsAMD = epoxy_glXGetGPUIDsAMD_dispatch_table_thunk; + epoxy_glXGetGPUInfoAMD = epoxy_glXGetGPUInfoAMD_dispatch_table_thunk; + epoxy_glXGetMscRateOML = epoxy_glXGetMscRateOML_dispatch_table_thunk; + epoxy_glXGetProcAddress = epoxy_glXGetProcAddress_dispatch_table_thunk; + epoxy_glXGetProcAddressARB = epoxy_glXGetProcAddressARB_dispatch_table_thunk; + epoxy_glXGetSelectedEvent = epoxy_glXGetSelectedEvent_dispatch_table_thunk; + epoxy_glXGetSelectedEventSGIX = epoxy_glXGetSelectedEventSGIX_dispatch_table_thunk; + epoxy_glXGetSyncValuesOML = epoxy_glXGetSyncValuesOML_dispatch_table_thunk; + epoxy_glXGetTransparentIndexSUN = epoxy_glXGetTransparentIndexSUN_dispatch_table_thunk; + epoxy_glXGetVideoDeviceNV = epoxy_glXGetVideoDeviceNV_dispatch_table_thunk; + epoxy_glXGetVideoInfoNV = epoxy_glXGetVideoInfoNV_dispatch_table_thunk; + epoxy_glXGetVideoSyncSGI = epoxy_glXGetVideoSyncSGI_dispatch_table_thunk; + epoxy_glXGetVisualFromFBConfig = epoxy_glXGetVisualFromFBConfig_dispatch_table_thunk; + epoxy_glXGetVisualFromFBConfigSGIX = epoxy_glXGetVisualFromFBConfigSGIX_dispatch_table_thunk; + epoxy_glXHyperpipeAttribSGIX = epoxy_glXHyperpipeAttribSGIX_dispatch_table_thunk; + epoxy_glXHyperpipeConfigSGIX = epoxy_glXHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXImportContextEXT = epoxy_glXImportContextEXT_dispatch_table_thunk; + epoxy_glXIsDirect = epoxy_glXIsDirect_dispatch_table_thunk; + epoxy_glXJoinSwapGroupNV = epoxy_glXJoinSwapGroupNV_dispatch_table_thunk; + epoxy_glXJoinSwapGroupSGIX = epoxy_glXJoinSwapGroupSGIX_dispatch_table_thunk; + epoxy_glXLockVideoCaptureDeviceNV = epoxy_glXLockVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXMakeAssociatedContextCurrentAMD = epoxy_glXMakeAssociatedContextCurrentAMD_dispatch_table_thunk; + epoxy_glXMakeContextCurrent = epoxy_glXMakeContextCurrent_dispatch_table_thunk; + epoxy_glXMakeCurrent = epoxy_glXMakeCurrent_dispatch_table_thunk; + epoxy_glXMakeCurrentReadSGI = epoxy_glXMakeCurrentReadSGI_dispatch_table_thunk; + epoxy_glXNamedCopyBufferSubDataNV = epoxy_glXNamedCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glXQueryChannelDeltasSGIX = epoxy_glXQueryChannelDeltasSGIX_dispatch_table_thunk; + epoxy_glXQueryChannelRectSGIX = epoxy_glXQueryChannelRectSGIX_dispatch_table_thunk; + epoxy_glXQueryContext = epoxy_glXQueryContext_dispatch_table_thunk; + epoxy_glXQueryContextInfoEXT = epoxy_glXQueryContextInfoEXT_dispatch_table_thunk; + epoxy_glXQueryCurrentRendererIntegerMESA = epoxy_glXQueryCurrentRendererIntegerMESA_dispatch_table_thunk; + epoxy_glXQueryCurrentRendererStringMESA = epoxy_glXQueryCurrentRendererStringMESA_dispatch_table_thunk; + epoxy_glXQueryDrawable = epoxy_glXQueryDrawable_dispatch_table_thunk; + epoxy_glXQueryExtension = epoxy_glXQueryExtension_dispatch_table_thunk; + epoxy_glXQueryExtensionsString = epoxy_glXQueryExtensionsString_dispatch_table_thunk; + epoxy_glXQueryFrameCountNV = epoxy_glXQueryFrameCountNV_dispatch_table_thunk; + epoxy_glXQueryGLXPbufferSGIX = epoxy_glXQueryGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeAttribSGIX = epoxy_glXQueryHyperpipeAttribSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeBestAttribSGIX = epoxy_glXQueryHyperpipeBestAttribSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeConfigSGIX = epoxy_glXQueryHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeNetworkSGIX = epoxy_glXQueryHyperpipeNetworkSGIX_dispatch_table_thunk; + epoxy_glXQueryMaxSwapBarriersSGIX = epoxy_glXQueryMaxSwapBarriersSGIX_dispatch_table_thunk; + epoxy_glXQueryMaxSwapGroupsNV = epoxy_glXQueryMaxSwapGroupsNV_dispatch_table_thunk; + epoxy_glXQueryRendererIntegerMESA = epoxy_glXQueryRendererIntegerMESA_dispatch_table_thunk; + epoxy_glXQueryRendererStringMESA = epoxy_glXQueryRendererStringMESA_dispatch_table_thunk; + epoxy_glXQueryServerString = epoxy_glXQueryServerString_dispatch_table_thunk; + epoxy_glXQuerySwapGroupNV = epoxy_glXQuerySwapGroupNV_dispatch_table_thunk; + epoxy_glXQueryVersion = epoxy_glXQueryVersion_dispatch_table_thunk; + epoxy_glXQueryVideoCaptureDeviceNV = epoxy_glXQueryVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseBuffersMESA = epoxy_glXReleaseBuffersMESA_dispatch_table_thunk; + epoxy_glXReleaseTexImageEXT = epoxy_glXReleaseTexImageEXT_dispatch_table_thunk; + epoxy_glXReleaseVideoCaptureDeviceNV = epoxy_glXReleaseVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseVideoDeviceNV = epoxy_glXReleaseVideoDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseVideoImageNV = epoxy_glXReleaseVideoImageNV_dispatch_table_thunk; + epoxy_glXResetFrameCountNV = epoxy_glXResetFrameCountNV_dispatch_table_thunk; + epoxy_glXSelectEvent = epoxy_glXSelectEvent_dispatch_table_thunk; + epoxy_glXSelectEventSGIX = epoxy_glXSelectEventSGIX_dispatch_table_thunk; + epoxy_glXSendPbufferToVideoNV = epoxy_glXSendPbufferToVideoNV_dispatch_table_thunk; + epoxy_glXSet3DfxModeMESA = epoxy_glXSet3DfxModeMESA_dispatch_table_thunk; + epoxy_glXSwapBuffers = epoxy_glXSwapBuffers_dispatch_table_thunk; + epoxy_glXSwapBuffersMscOML = epoxy_glXSwapBuffersMscOML_dispatch_table_thunk; + epoxy_glXSwapIntervalEXT = epoxy_glXSwapIntervalEXT_dispatch_table_thunk; + epoxy_glXSwapIntervalSGI = epoxy_glXSwapIntervalSGI_dispatch_table_thunk; + epoxy_glXUseXFont = epoxy_glXUseXFont_dispatch_table_thunk; + epoxy_glXWaitForMscOML = epoxy_glXWaitForMscOML_dispatch_table_thunk; + epoxy_glXWaitForSbcOML = epoxy_glXWaitForSbcOML_dispatch_table_thunk; + epoxy_glXWaitGL = epoxy_glXWaitGL_dispatch_table_thunk; + epoxy_glXWaitVideoSyncSGI = epoxy_glXWaitVideoSyncSGI_dispatch_table_thunk; + epoxy_glXWaitX = epoxy_glXWaitX_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNGLXBINDCHANNELTOWINDOWSGIXPROC epoxy_glXBindChannelToWindowSGIX = epoxy_glXBindChannelToWindowSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDHYPERPIPESGIXPROC epoxy_glXBindHyperpipeSGIX = epoxy_glXBindHyperpipeSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDSWAPBARRIERNVPROC epoxy_glXBindSwapBarrierNV = epoxy_glXBindSwapBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDSWAPBARRIERSGIXPROC epoxy_glXBindSwapBarrierSGIX = epoxy_glXBindSwapBarrierSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDTEXIMAGEEXTPROC epoxy_glXBindTexImageEXT = epoxy_glXBindTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEOCAPTUREDEVICENVPROC epoxy_glXBindVideoCaptureDeviceNV = epoxy_glXBindVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEODEVICENVPROC epoxy_glXBindVideoDeviceNV = epoxy_glXBindVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEOIMAGENVPROC epoxy_glXBindVideoImageNV = epoxy_glXBindVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_glXBlitContextFramebufferAMD = epoxy_glXBlitContextFramebufferAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCHANNELRECTSGIXPROC epoxy_glXChannelRectSGIX = epoxy_glXChannelRectSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHANNELRECTSYNCSGIXPROC epoxy_glXChannelRectSyncSGIX = epoxy_glXChannelRectSyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEFBCONFIGPROC epoxy_glXChooseFBConfig = epoxy_glXChooseFBConfig_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEFBCONFIGSGIXPROC epoxy_glXChooseFBConfigSGIX = epoxy_glXChooseFBConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEVISUALPROC epoxy_glXChooseVisual = epoxy_glXChooseVisual_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYBUFFERSUBDATANVPROC epoxy_glXCopyBufferSubDataNV = epoxy_glXCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYCONTEXTPROC epoxy_glXCopyContext = epoxy_glXCopyContext_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYIMAGESUBDATANVPROC epoxy_glXCopyImageSubDataNV = epoxy_glXCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYSUBBUFFERMESAPROC epoxy_glXCopySubBufferMESA = epoxy_glXCopySubBufferMESA_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC epoxy_glXCreateAssociatedContextAMD = epoxy_glXCreateAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_glXCreateAssociatedContextAttribsAMD = epoxy_glXCreateAssociatedContextAttribsAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTPROC epoxy_glXCreateContext = epoxy_glXCreateContext_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTATTRIBSARBPROC epoxy_glXCreateContextAttribsARB = epoxy_glXCreateContextAttribsARB_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC epoxy_glXCreateContextWithConfigSGIX = epoxy_glXCreateContextWithConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPBUFFERSGIXPROC epoxy_glXCreateGLXPbufferSGIX = epoxy_glXCreateGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPPROC epoxy_glXCreateGLXPixmap = epoxy_glXCreateGLXPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPMESAPROC epoxy_glXCreateGLXPixmapMESA = epoxy_glXCreateGLXPixmapMESA_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC epoxy_glXCreateGLXPixmapWithConfigSGIX = epoxy_glXCreateGLXPixmapWithConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATENEWCONTEXTPROC epoxy_glXCreateNewContext = epoxy_glXCreateNewContext_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEPBUFFERPROC epoxy_glXCreatePbuffer = epoxy_glXCreatePbuffer_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEPIXMAPPROC epoxy_glXCreatePixmap = epoxy_glXCreatePixmap_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEWINDOWPROC epoxy_glXCreateWindow = epoxy_glXCreateWindow_global_rewrite_ptr; + +PUBLIC PFNGLXCUSHIONSGIPROC epoxy_glXCushionSGI = epoxy_glXCushionSGI_global_rewrite_ptr; + +PUBLIC PFNGLXDELAYBEFORESWAPNVPROC epoxy_glXDelayBeforeSwapNV = epoxy_glXDelayBeforeSwapNV_global_rewrite_ptr; + +PUBLIC PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC epoxy_glXDeleteAssociatedContextAMD = epoxy_glXDeleteAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYCONTEXTPROC epoxy_glXDestroyContext = epoxy_glXDestroyContext_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXPBUFFERSGIXPROC epoxy_glXDestroyGLXPbufferSGIX = epoxy_glXDestroyGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXPIXMAPPROC epoxy_glXDestroyGLXPixmap = epoxy_glXDestroyGLXPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC epoxy_glXDestroyGLXVideoSourceSGIX = epoxy_glXDestroyGLXVideoSourceSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC epoxy_glXDestroyHyperpipeConfigSGIX = epoxy_glXDestroyHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYPBUFFERPROC epoxy_glXDestroyPbuffer = epoxy_glXDestroyPbuffer_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYPIXMAPPROC epoxy_glXDestroyPixmap = epoxy_glXDestroyPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYWINDOWPROC epoxy_glXDestroyWindow = epoxy_glXDestroyWindow_global_rewrite_ptr; + +PUBLIC PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_glXEnumerateVideoCaptureDevicesNV = epoxy_glXEnumerateVideoCaptureDevicesNV_global_rewrite_ptr; + +PUBLIC PFNGLXENUMERATEVIDEODEVICESNVPROC epoxy_glXEnumerateVideoDevicesNV = epoxy_glXEnumerateVideoDevicesNV_global_rewrite_ptr; + +PUBLIC PFNGLXFREECONTEXTEXTPROC epoxy_glXFreeContextEXT = epoxy_glXFreeContextEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETAGPOFFSETMESAPROC epoxy_glXGetAGPOffsetMESA = epoxy_glXGetAGPOffsetMESA_global_rewrite_ptr; + +PUBLIC PFNGLXGETCLIENTSTRINGPROC epoxy_glXGetClientString = epoxy_glXGetClientString_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONFIGPROC epoxy_glXGetConfig = epoxy_glXGetConfig_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONTEXTGPUIDAMDPROC epoxy_glXGetContextGPUIDAMD = epoxy_glXGetContextGPUIDAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONTEXTIDEXTPROC epoxy_glXGetContextIDEXT = epoxy_glXGetContextIDEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_glXGetCurrentAssociatedContextAMD = epoxy_glXGetCurrentAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTCONTEXTPROC epoxy_glXGetCurrentContext = epoxy_glXGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDISPLAYPROC epoxy_glXGetCurrentDisplay = epoxy_glXGetCurrentDisplay_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDISPLAYEXTPROC epoxy_glXGetCurrentDisplayEXT = epoxy_glXGetCurrentDisplayEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDRAWABLEPROC epoxy_glXGetCurrentDrawable = epoxy_glXGetCurrentDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTREADDRAWABLEPROC epoxy_glXGetCurrentReadDrawable = epoxy_glXGetCurrentReadDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTREADDRAWABLESGIPROC epoxy_glXGetCurrentReadDrawableSGI = epoxy_glXGetCurrentReadDrawableSGI_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGATTRIBPROC epoxy_glXGetFBConfigAttrib = epoxy_glXGetFBConfigAttrib_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGATTRIBSGIXPROC epoxy_glXGetFBConfigAttribSGIX = epoxy_glXGetFBConfigAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGFROMVISUALSGIXPROC epoxy_glXGetFBConfigFromVisualSGIX = epoxy_glXGetFBConfigFromVisualSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGSPROC epoxy_glXGetFBConfigs = epoxy_glXGetFBConfigs_global_rewrite_ptr; + +PUBLIC PFNGLXGETGPUIDSAMDPROC epoxy_glXGetGPUIDsAMD = epoxy_glXGetGPUIDsAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETGPUINFOAMDPROC epoxy_glXGetGPUInfoAMD = epoxy_glXGetGPUInfoAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETMSCRATEOMLPROC epoxy_glXGetMscRateOML = epoxy_glXGetMscRateOML_global_rewrite_ptr; + +PUBLIC PFNGLXGETPROCADDRESSPROC epoxy_glXGetProcAddress = epoxy_glXGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNGLXGETPROCADDRESSARBPROC epoxy_glXGetProcAddressARB = epoxy_glXGetProcAddressARB_global_rewrite_ptr; + +PUBLIC PFNGLXGETSELECTEDEVENTPROC epoxy_glXGetSelectedEvent = epoxy_glXGetSelectedEvent_global_rewrite_ptr; + +PUBLIC PFNGLXGETSELECTEDEVENTSGIXPROC epoxy_glXGetSelectedEventSGIX = epoxy_glXGetSelectedEventSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETSYNCVALUESOMLPROC epoxy_glXGetSyncValuesOML = epoxy_glXGetSyncValuesOML_global_rewrite_ptr; + +PUBLIC PFNGLXGETTRANSPARENTINDEXSUNPROC epoxy_glXGetTransparentIndexSUN = epoxy_glXGetTransparentIndexSUN_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEODEVICENVPROC epoxy_glXGetVideoDeviceNV = epoxy_glXGetVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEOINFONVPROC epoxy_glXGetVideoInfoNV = epoxy_glXGetVideoInfoNV_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEOSYNCSGIPROC epoxy_glXGetVideoSyncSGI = epoxy_glXGetVideoSyncSGI_global_rewrite_ptr; + +PUBLIC PFNGLXGETVISUALFROMFBCONFIGPROC epoxy_glXGetVisualFromFBConfig = epoxy_glXGetVisualFromFBConfig_global_rewrite_ptr; + +PUBLIC PFNGLXGETVISUALFROMFBCONFIGSGIXPROC epoxy_glXGetVisualFromFBConfigSGIX = epoxy_glXGetVisualFromFBConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXHYPERPIPEATTRIBSGIXPROC epoxy_glXHyperpipeAttribSGIX = epoxy_glXHyperpipeAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXHYPERPIPECONFIGSGIXPROC epoxy_glXHyperpipeConfigSGIX = epoxy_glXHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXIMPORTCONTEXTEXTPROC epoxy_glXImportContextEXT = epoxy_glXImportContextEXT_global_rewrite_ptr; + +PUBLIC PFNGLXISDIRECTPROC epoxy_glXIsDirect = epoxy_glXIsDirect_global_rewrite_ptr; + +PUBLIC PFNGLXJOINSWAPGROUPNVPROC epoxy_glXJoinSwapGroupNV = epoxy_glXJoinSwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNGLXJOINSWAPGROUPSGIXPROC epoxy_glXJoinSwapGroupSGIX = epoxy_glXJoinSwapGroupSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC epoxy_glXLockVideoCaptureDeviceNV = epoxy_glXLockVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_glXMakeAssociatedContextCurrentAMD = epoxy_glXMakeAssociatedContextCurrentAMD_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECONTEXTCURRENTPROC epoxy_glXMakeContextCurrent = epoxy_glXMakeContextCurrent_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECURRENTPROC epoxy_glXMakeCurrent = epoxy_glXMakeCurrent_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECURRENTREADSGIPROC epoxy_glXMakeCurrentReadSGI = epoxy_glXMakeCurrentReadSGI_global_rewrite_ptr; + +PUBLIC PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC epoxy_glXNamedCopyBufferSubDataNV = epoxy_glXNamedCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCHANNELDELTASSGIXPROC epoxy_glXQueryChannelDeltasSGIX = epoxy_glXQueryChannelDeltasSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCHANNELRECTSGIXPROC epoxy_glXQueryChannelRectSGIX = epoxy_glXQueryChannelRectSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCONTEXTPROC epoxy_glXQueryContext = epoxy_glXQueryContext_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCONTEXTINFOEXTPROC epoxy_glXQueryContextInfoEXT = epoxy_glXQueryContextInfoEXT_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC epoxy_glXQueryCurrentRendererIntegerMESA = epoxy_glXQueryCurrentRendererIntegerMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC epoxy_glXQueryCurrentRendererStringMESA = epoxy_glXQueryCurrentRendererStringMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYDRAWABLEPROC epoxy_glXQueryDrawable = epoxy_glXQueryDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYEXTENSIONPROC epoxy_glXQueryExtension = epoxy_glXQueryExtension_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYEXTENSIONSSTRINGPROC epoxy_glXQueryExtensionsString = epoxy_glXQueryExtensionsString_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYFRAMECOUNTNVPROC epoxy_glXQueryFrameCountNV = epoxy_glXQueryFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYGLXPBUFFERSGIXPROC epoxy_glXQueryGLXPbufferSGIX = epoxy_glXQueryGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC epoxy_glXQueryHyperpipeAttribSGIX = epoxy_glXQueryHyperpipeAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC epoxy_glXQueryHyperpipeBestAttribSGIX = epoxy_glXQueryHyperpipeBestAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPECONFIGSGIXPROC epoxy_glXQueryHyperpipeConfigSGIX = epoxy_glXQueryHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPENETWORKSGIXPROC epoxy_glXQueryHyperpipeNetworkSGIX = epoxy_glXQueryHyperpipeNetworkSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC epoxy_glXQueryMaxSwapBarriersSGIX = epoxy_glXQueryMaxSwapBarriersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYMAXSWAPGROUPSNVPROC epoxy_glXQueryMaxSwapGroupsNV = epoxy_glXQueryMaxSwapGroupsNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYRENDERERINTEGERMESAPROC epoxy_glXQueryRendererIntegerMESA = epoxy_glXQueryRendererIntegerMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYRENDERERSTRINGMESAPROC epoxy_glXQueryRendererStringMESA = epoxy_glXQueryRendererStringMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYSERVERSTRINGPROC epoxy_glXQueryServerString = epoxy_glXQueryServerString_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYSWAPGROUPNVPROC epoxy_glXQuerySwapGroupNV = epoxy_glXQuerySwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYVERSIONPROC epoxy_glXQueryVersion = epoxy_glXQueryVersion_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC epoxy_glXQueryVideoCaptureDeviceNV = epoxy_glXQueryVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEBUFFERSMESAPROC epoxy_glXReleaseBuffersMESA = epoxy_glXReleaseBuffersMESA_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASETEXIMAGEEXTPROC epoxy_glXReleaseTexImageEXT = epoxy_glXReleaseTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_glXReleaseVideoCaptureDeviceNV = epoxy_glXReleaseVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEODEVICENVPROC epoxy_glXReleaseVideoDeviceNV = epoxy_glXReleaseVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEOIMAGENVPROC epoxy_glXReleaseVideoImageNV = epoxy_glXReleaseVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNGLXRESETFRAMECOUNTNVPROC epoxy_glXResetFrameCountNV = epoxy_glXResetFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNGLXSELECTEVENTPROC epoxy_glXSelectEvent = epoxy_glXSelectEvent_global_rewrite_ptr; + +PUBLIC PFNGLXSELECTEVENTSGIXPROC epoxy_glXSelectEventSGIX = epoxy_glXSelectEventSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXSENDPBUFFERTOVIDEONVPROC epoxy_glXSendPbufferToVideoNV = epoxy_glXSendPbufferToVideoNV_global_rewrite_ptr; + +PUBLIC PFNGLXSET3DFXMODEMESAPROC epoxy_glXSet3DfxModeMESA = epoxy_glXSet3DfxModeMESA_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPBUFFERSPROC epoxy_glXSwapBuffers = epoxy_glXSwapBuffers_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPBUFFERSMSCOMLPROC epoxy_glXSwapBuffersMscOML = epoxy_glXSwapBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPINTERVALEXTPROC epoxy_glXSwapIntervalEXT = epoxy_glXSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPINTERVALSGIPROC epoxy_glXSwapIntervalSGI = epoxy_glXSwapIntervalSGI_global_rewrite_ptr; + +PUBLIC PFNGLXUSEXFONTPROC epoxy_glXUseXFont = epoxy_glXUseXFont_global_rewrite_ptr; + +PUBLIC PFNGLXWAITFORMSCOMLPROC epoxy_glXWaitForMscOML = epoxy_glXWaitForMscOML_global_rewrite_ptr; + +PUBLIC PFNGLXWAITFORSBCOMLPROC epoxy_glXWaitForSbcOML = epoxy_glXWaitForSbcOML_global_rewrite_ptr; + +PUBLIC PFNGLXWAITGLPROC epoxy_glXWaitGL = epoxy_glXWaitGL_global_rewrite_ptr; + +PUBLIC PFNGLXWAITVIDEOSYNCSGIPROC epoxy_glXWaitVideoSyncSGI = epoxy_glXWaitVideoSyncSGI_global_rewrite_ptr; + +PUBLIC PFNGLXWAITXPROC epoxy_glXWaitX = epoxy_glXWaitX_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/wgl/dispatch_wgl.c b/Engine/lib/epoxy/src/wgl/dispatch_wgl.c new file mode 100644 index 0000000000..b1b215c3ef --- /dev/null +++ b/Engine/lib/epoxy/src/wgl/dispatch_wgl.c @@ -0,0 +1,217 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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 +#include +#include + +#include "dispatch_common.h" + +static bool first_context_current = false; +static bool already_switched_to_dispatch_table = false; + +/** + * If we can determine the WGL extension support from the current + * context, then return that, otherwise give the answer that will just + * send us on to get_proc_address(). + */ +bool +epoxy_conservative_has_wgl_extension(const char *ext) +{ + HDC hdc = wglGetCurrentDC(); + + if (!hdc) + return true; + + return epoxy_has_wgl_extension(hdc, ext); +} + +PUBLIC bool +epoxy_has_wgl_extension(HDC hdc, const char *ext) + { + PFNWGLGETEXTENSIONSSTRINGARBPROC getext; + + getext = (void *)wglGetProcAddress("wglGetExtensionsStringARB"); + if (!getext) { + fprintf(stderr, + "Implementation unexpectedly missing " + "WGL_ARB_extensions_string. Probably a libepoxy bug.\n"); + return false; + } + + return epoxy_extension_in_string(getext(hdc), ext); +} + +/** + * Does the work necessary to update the win32 per-thread dispatch + * tables when wglMakeCurrent() is called. + * + * Right now, we use global function pointers until the second + * MakeCurrent occurs, at which point we switch to dispatch tables. + * This could be improved in the future to track a resolved dispatch + * table per context and reuse it when the context is made current + * again. + */ +PUBLIC void +epoxy_handle_external_wglMakeCurrent(void) +{ + if (!first_context_current) { + first_context_current = true; + } else { + if (!already_switched_to_dispatch_table) { + already_switched_to_dispatch_table = true; + gl_switch_to_dispatch_table(); + wgl_switch_to_dispatch_table(); + } + + gl_init_dispatch_table(); + wgl_init_dispatch_table(); + } +} + +/** + * This global symbol is apparently looked up by Windows when loading + * a DLL, but it doesn't declare the prototype. + */ +BOOL WINAPI +DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved); + +BOOL WINAPI +DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved) +{ + void *data; + + switch (reason) { + case DLL_PROCESS_ATTACH: + gl_tls_index = TlsAlloc(); + if (gl_tls_index == TLS_OUT_OF_INDEXES) + return FALSE; + wgl_tls_index = TlsAlloc(); + if (wgl_tls_index == TLS_OUT_OF_INDEXES) + return FALSE; + + first_context_current = false; + + /* FALLTHROUGH */ + + case DLL_THREAD_ATTACH: + data = LocalAlloc(LPTR, gl_tls_size); + TlsSetValue(gl_tls_index, data); + + data = LocalAlloc(LPTR, wgl_tls_size); + TlsSetValue(wgl_tls_index, data); + + break; + + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + data = TlsGetValue(gl_tls_index); + LocalFree(data); + + data = TlsGetValue(wgl_tls_index); + LocalFree(data); + + if (reason == DLL_PROCESS_DETACH) { + TlsFree(gl_tls_index); + TlsFree(wgl_tls_index); + } + break; + } + + return TRUE; +} + +#ifndef EPOXY_DLL +#ifdef __GNUC__ + PIMAGE_TLS_CALLBACK dllmain_callback __attribute__((section(".CRT$XLB"))) = (PIMAGE_TLS_CALLBACK)DllMain; +#else +# ifdef _WIN64 +# pragma comment(linker, "/INCLUDE:_tls_used") +# pragma comment(linker, "/INCLUDE:dllmain_callback") +# pragma const_seg(".CRT$XLB") + extern const PIMAGE_TLS_CALLBACK dllmain_callback; + const PIMAGE_TLS_CALLBACK dllmain_callback = DllMain; +# pragma const_seg() +# else +# pragma comment(linker, "/INCLUDE:__tls_used") +# pragma comment(linker, "/INCLUDE:_dllmain_callback") +# pragma data_seg(".CRT$XLB") + PIMAGE_TLS_CALLBACK dllmain_callback = DllMain; +# pragma data_seg() +# endif +#endif +#endif + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeCurrent)(HDC hdc, HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeCurrent_unwrapped(hdc, hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeContextCurrentARB)(HDC hDrawDC, + HDC hReadDC, + HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeContextCurrentARB_unwrapped(hDrawDC, hReadDC, + hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeContextCurrentEXT)(HDC hDrawDC, + HDC hReadDC, + HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeContextCurrentEXT_unwrapped(hDrawDC, hReadDC, + hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeAssociatedContextCurrentAMD)(HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped(hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + +PUBLIC PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent = epoxy_wglMakeCurrent_wrapped; +PUBLIC PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT = epoxy_wglMakeContextCurrentEXT_wrapped; +PUBLIC PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB = epoxy_wglMakeContextCurrentARB_wrapped; +PUBLIC PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentEXT = epoxy_wglMakeAssociatedContextCurrentAMD_wrapped; diff --git a/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c b/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c new file mode 100644 index 0000000000..426a61d35e --- /dev/null +++ b/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c @@ -0,0 +1,5250 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/wgl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNWGLALLOCATEMEMORYNVPROC epoxy_wglAllocateMemoryNV; + PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC epoxy_wglAssociateImageBufferEventsI3D; + PFNWGLBEGINFRAMETRACKINGI3DPROC epoxy_wglBeginFrameTrackingI3D; + PFNWGLBINDDISPLAYCOLORTABLEEXTPROC epoxy_wglBindDisplayColorTableEXT; + PFNWGLBINDSWAPBARRIERNVPROC epoxy_wglBindSwapBarrierNV; + PFNWGLBINDTEXIMAGEARBPROC epoxy_wglBindTexImageARB; + PFNWGLBINDVIDEOCAPTUREDEVICENVPROC epoxy_wglBindVideoCaptureDeviceNV; + PFNWGLBINDVIDEODEVICENVPROC epoxy_wglBindVideoDeviceNV; + PFNWGLBINDVIDEOIMAGENVPROC epoxy_wglBindVideoImageNV; + PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_wglBlitContextFramebufferAMD; + PFNWGLCHOOSEPIXELFORMATARBPROC epoxy_wglChoosePixelFormatARB; + PFNWGLCHOOSEPIXELFORMATEXTPROC epoxy_wglChoosePixelFormatEXT; + PFNWGLCOPYCONTEXTPROC epoxy_wglCopyContext; + PFNWGLCOPYIMAGESUBDATANVPROC epoxy_wglCopyImageSubDataNV; + PFNWGLCREATEAFFINITYDCNVPROC epoxy_wglCreateAffinityDCNV; + PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC epoxy_wglCreateAssociatedContextAMD; + PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_wglCreateAssociatedContextAttribsAMD; + PFNWGLCREATEBUFFERREGIONARBPROC epoxy_wglCreateBufferRegionARB; + PFNWGLCREATECONTEXTPROC epoxy_wglCreateContext; + PFNWGLCREATECONTEXTATTRIBSARBPROC epoxy_wglCreateContextAttribsARB; + PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC epoxy_wglCreateDisplayColorTableEXT; + PFNWGLCREATEIMAGEBUFFERI3DPROC epoxy_wglCreateImageBufferI3D; + PFNWGLCREATELAYERCONTEXTPROC epoxy_wglCreateLayerContext; + PFNWGLCREATEPBUFFERARBPROC epoxy_wglCreatePbufferARB; + PFNWGLCREATEPBUFFEREXTPROC epoxy_wglCreatePbufferEXT; + PFNWGLDXCLOSEDEVICENVPROC epoxy_wglDXCloseDeviceNV; + PFNWGLDXLOCKOBJECTSNVPROC epoxy_wglDXLockObjectsNV; + PFNWGLDXOBJECTACCESSNVPROC epoxy_wglDXObjectAccessNV; + PFNWGLDXOPENDEVICENVPROC epoxy_wglDXOpenDeviceNV; + PFNWGLDXREGISTEROBJECTNVPROC epoxy_wglDXRegisterObjectNV; + PFNWGLDXSETRESOURCESHAREHANDLENVPROC epoxy_wglDXSetResourceShareHandleNV; + PFNWGLDXUNLOCKOBJECTSNVPROC epoxy_wglDXUnlockObjectsNV; + PFNWGLDXUNREGISTEROBJECTNVPROC epoxy_wglDXUnregisterObjectNV; + PFNWGLDELAYBEFORESWAPNVPROC epoxy_wglDelayBeforeSwapNV; + PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC epoxy_wglDeleteAssociatedContextAMD; + PFNWGLDELETEBUFFERREGIONARBPROC epoxy_wglDeleteBufferRegionARB; + PFNWGLDELETECONTEXTPROC epoxy_wglDeleteContext; + PFNWGLDELETEDCNVPROC epoxy_wglDeleteDCNV; + PFNWGLDESCRIBELAYERPLANEPROC epoxy_wglDescribeLayerPlane; + PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC epoxy_wglDestroyDisplayColorTableEXT; + PFNWGLDESTROYIMAGEBUFFERI3DPROC epoxy_wglDestroyImageBufferI3D; + PFNWGLDESTROYPBUFFERARBPROC epoxy_wglDestroyPbufferARB; + PFNWGLDESTROYPBUFFEREXTPROC epoxy_wglDestroyPbufferEXT; + PFNWGLDISABLEFRAMELOCKI3DPROC epoxy_wglDisableFrameLockI3D; + PFNWGLDISABLEGENLOCKI3DPROC epoxy_wglDisableGenlockI3D; + PFNWGLENABLEFRAMELOCKI3DPROC epoxy_wglEnableFrameLockI3D; + PFNWGLENABLEGENLOCKI3DPROC epoxy_wglEnableGenlockI3D; + PFNWGLENDFRAMETRACKINGI3DPROC epoxy_wglEndFrameTrackingI3D; + PFNWGLENUMGPUDEVICESNVPROC epoxy_wglEnumGpuDevicesNV; + PFNWGLENUMGPUSFROMAFFINITYDCNVPROC epoxy_wglEnumGpusFromAffinityDCNV; + PFNWGLENUMGPUSNVPROC epoxy_wglEnumGpusNV; + PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_wglEnumerateVideoCaptureDevicesNV; + PFNWGLENUMERATEVIDEODEVICESNVPROC epoxy_wglEnumerateVideoDevicesNV; + PFNWGLFREEMEMORYNVPROC epoxy_wglFreeMemoryNV; + PFNWGLGENLOCKSAMPLERATEI3DPROC epoxy_wglGenlockSampleRateI3D; + PFNWGLGENLOCKSOURCEDELAYI3DPROC epoxy_wglGenlockSourceDelayI3D; + PFNWGLGENLOCKSOURCEEDGEI3DPROC epoxy_wglGenlockSourceEdgeI3D; + PFNWGLGENLOCKSOURCEI3DPROC epoxy_wglGenlockSourceI3D; + PFNWGLGETCONTEXTGPUIDAMDPROC epoxy_wglGetContextGPUIDAMD; + PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_wglGetCurrentAssociatedContextAMD; + PFNWGLGETCURRENTCONTEXTPROC epoxy_wglGetCurrentContext; + PFNWGLGETCURRENTDCPROC epoxy_wglGetCurrentDC; + PFNWGLGETCURRENTREADDCARBPROC epoxy_wglGetCurrentReadDCARB; + PFNWGLGETCURRENTREADDCEXTPROC epoxy_wglGetCurrentReadDCEXT; + PFNWGLGETDEFAULTPROCADDRESSPROC epoxy_wglGetDefaultProcAddress; + PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglGetDigitalVideoParametersI3D; + PFNWGLGETEXTENSIONSSTRINGARBPROC epoxy_wglGetExtensionsStringARB; + PFNWGLGETEXTENSIONSSTRINGEXTPROC epoxy_wglGetExtensionsStringEXT; + PFNWGLGETFRAMEUSAGEI3DPROC epoxy_wglGetFrameUsageI3D; + PFNWGLGETGPUIDSAMDPROC epoxy_wglGetGPUIDsAMD; + PFNWGLGETGPUINFOAMDPROC epoxy_wglGetGPUInfoAMD; + PFNWGLGETGAMMATABLEI3DPROC epoxy_wglGetGammaTableI3D; + PFNWGLGETGAMMATABLEPARAMETERSI3DPROC epoxy_wglGetGammaTableParametersI3D; + PFNWGLGETGENLOCKSAMPLERATEI3DPROC epoxy_wglGetGenlockSampleRateI3D; + PFNWGLGETGENLOCKSOURCEDELAYI3DPROC epoxy_wglGetGenlockSourceDelayI3D; + PFNWGLGETGENLOCKSOURCEEDGEI3DPROC epoxy_wglGetGenlockSourceEdgeI3D; + PFNWGLGETGENLOCKSOURCEI3DPROC epoxy_wglGetGenlockSourceI3D; + PFNWGLGETLAYERPALETTEENTRIESPROC epoxy_wglGetLayerPaletteEntries; + PFNWGLGETMSCRATEOMLPROC epoxy_wglGetMscRateOML; + PFNWGLGETPBUFFERDCARBPROC epoxy_wglGetPbufferDCARB; + PFNWGLGETPBUFFERDCEXTPROC epoxy_wglGetPbufferDCEXT; + PFNWGLGETPIXELFORMATATTRIBFVARBPROC epoxy_wglGetPixelFormatAttribfvARB; + PFNWGLGETPIXELFORMATATTRIBFVEXTPROC epoxy_wglGetPixelFormatAttribfvEXT; + PFNWGLGETPIXELFORMATATTRIBIVARBPROC epoxy_wglGetPixelFormatAttribivARB; + PFNWGLGETPIXELFORMATATTRIBIVEXTPROC epoxy_wglGetPixelFormatAttribivEXT; + PFNWGLGETPROCADDRESSPROC epoxy_wglGetProcAddress; + PFNWGLGETSWAPINTERVALEXTPROC epoxy_wglGetSwapIntervalEXT; + PFNWGLGETSYNCVALUESOMLPROC epoxy_wglGetSyncValuesOML; + PFNWGLGETVIDEODEVICENVPROC epoxy_wglGetVideoDeviceNV; + PFNWGLGETVIDEOINFONVPROC epoxy_wglGetVideoInfoNV; + PFNWGLISENABLEDFRAMELOCKI3DPROC epoxy_wglIsEnabledFrameLockI3D; + PFNWGLISENABLEDGENLOCKI3DPROC epoxy_wglIsEnabledGenlockI3D; + PFNWGLJOINSWAPGROUPNVPROC epoxy_wglJoinSwapGroupNV; + PFNWGLLOADDISPLAYCOLORTABLEEXTPROC epoxy_wglLoadDisplayColorTableEXT; + PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC epoxy_wglLockVideoCaptureDeviceNV; + PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped; + PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB_unwrapped; + PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT_unwrapped; + PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent_unwrapped; + PFNWGLQUERYCURRENTCONTEXTNVPROC epoxy_wglQueryCurrentContextNV; + PFNWGLQUERYFRAMECOUNTNVPROC epoxy_wglQueryFrameCountNV; + PFNWGLQUERYFRAMELOCKMASTERI3DPROC epoxy_wglQueryFrameLockMasterI3D; + PFNWGLQUERYFRAMETRACKINGI3DPROC epoxy_wglQueryFrameTrackingI3D; + PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC epoxy_wglQueryGenlockMaxSourceDelayI3D; + PFNWGLQUERYMAXSWAPGROUPSNVPROC epoxy_wglQueryMaxSwapGroupsNV; + PFNWGLQUERYPBUFFERARBPROC epoxy_wglQueryPbufferARB; + PFNWGLQUERYPBUFFEREXTPROC epoxy_wglQueryPbufferEXT; + PFNWGLQUERYSWAPGROUPNVPROC epoxy_wglQuerySwapGroupNV; + PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC epoxy_wglQueryVideoCaptureDeviceNV; + PFNWGLREALIZELAYERPALETTEPROC epoxy_wglRealizeLayerPalette; + PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC epoxy_wglReleaseImageBufferEventsI3D; + PFNWGLRELEASEPBUFFERDCARBPROC epoxy_wglReleasePbufferDCARB; + PFNWGLRELEASEPBUFFERDCEXTPROC epoxy_wglReleasePbufferDCEXT; + PFNWGLRELEASETEXIMAGEARBPROC epoxy_wglReleaseTexImageARB; + PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_wglReleaseVideoCaptureDeviceNV; + PFNWGLRELEASEVIDEODEVICENVPROC epoxy_wglReleaseVideoDeviceNV; + PFNWGLRELEASEVIDEOIMAGENVPROC epoxy_wglReleaseVideoImageNV; + PFNWGLRESETFRAMECOUNTNVPROC epoxy_wglResetFrameCountNV; + PFNWGLRESTOREBUFFERREGIONARBPROC epoxy_wglRestoreBufferRegionARB; + PFNWGLSAVEBUFFERREGIONARBPROC epoxy_wglSaveBufferRegionARB; + PFNWGLSENDPBUFFERTOVIDEONVPROC epoxy_wglSendPbufferToVideoNV; + PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglSetDigitalVideoParametersI3D; + PFNWGLSETGAMMATABLEI3DPROC epoxy_wglSetGammaTableI3D; + PFNWGLSETGAMMATABLEPARAMETERSI3DPROC epoxy_wglSetGammaTableParametersI3D; + PFNWGLSETLAYERPALETTEENTRIESPROC epoxy_wglSetLayerPaletteEntries; + PFNWGLSETPBUFFERATTRIBARBPROC epoxy_wglSetPbufferAttribARB; + PFNWGLSETSTEREOEMITTERSTATE3DLPROC epoxy_wglSetStereoEmitterState3DL; + PFNWGLSHARELISTSPROC epoxy_wglShareLists; + PFNWGLSWAPBUFFERSMSCOMLPROC epoxy_wglSwapBuffersMscOML; + PFNWGLSWAPINTERVALEXTPROC epoxy_wglSwapIntervalEXT; + PFNWGLSWAPLAYERBUFFERSPROC epoxy_wglSwapLayerBuffers; + PFNWGLSWAPLAYERBUFFERSMSCOMLPROC epoxy_wglSwapLayerBuffersMscOML; + PFNWGLUSEFONTBITMAPSAPROC epoxy_wglUseFontBitmapsA; + PFNWGLUSEFONTBITMAPSWPROC epoxy_wglUseFontBitmapsW; + PFNWGLUSEFONTOUTLINESPROC epoxy_wglUseFontOutlines; + PFNWGLUSEFONTOUTLINESAPROC epoxy_wglUseFontOutlinesA; + PFNWGLUSEFONTOUTLINESWPROC epoxy_wglUseFontOutlinesW; + PFNWGLWAITFORMSCOMLPROC epoxy_wglWaitForMscOML; + PFNWGLWAITFORSBCOMLPROC epoxy_wglWaitForSbcOML; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum wgl_provider { + wgl_provider_terminator = 0, + WGL_10, + WGL_extension_WGL_3DL_stereo_control, + WGL_extension_WGL_AMD_gpu_association, + WGL_extension_WGL_ARB_buffer_region, + WGL_extension_WGL_ARB_create_context, + WGL_extension_WGL_ARB_extensions_string, + WGL_extension_WGL_ARB_make_current_read, + WGL_extension_WGL_ARB_pbuffer, + WGL_extension_WGL_ARB_pixel_format, + WGL_extension_WGL_ARB_render_texture, + WGL_extension_WGL_EXT_display_color_table, + WGL_extension_WGL_EXT_extensions_string, + WGL_extension_WGL_EXT_make_current_read, + WGL_extension_WGL_EXT_pbuffer, + WGL_extension_WGL_EXT_pixel_format, + WGL_extension_WGL_EXT_swap_control, + WGL_extension_WGL_I3D_digital_video_control, + WGL_extension_WGL_I3D_gamma, + WGL_extension_WGL_I3D_genlock, + WGL_extension_WGL_I3D_image_buffer, + WGL_extension_WGL_I3D_swap_frame_lock, + WGL_extension_WGL_I3D_swap_frame_usage, + WGL_extension_WGL_NV_DX_interop, + WGL_extension_WGL_NV_copy_image, + WGL_extension_WGL_NV_delay_before_swap, + WGL_extension_WGL_NV_gpu_affinity, + WGL_extension_WGL_NV_present_video, + WGL_extension_WGL_NV_swap_group, + WGL_extension_WGL_NV_vertex_array_range, + WGL_extension_WGL_NV_video_capture, + WGL_extension_WGL_NV_video_output, + WGL_extension_WGL_OML_sync_control, +} PACKED; + +static const char *enum_string = + "WGL 10\0" + "WGL extension \"WGL_3DL_stereo_control\"\0" + "WGL extension \"WGL_AMD_gpu_association\"\0" + "WGL extension \"WGL_ARB_buffer_region\"\0" + "WGL extension \"WGL_ARB_create_context\"\0" + "WGL extension \"WGL_ARB_extensions_string\"\0" + "WGL extension \"WGL_ARB_make_current_read\"\0" + "WGL extension \"WGL_ARB_pbuffer\"\0" + "WGL extension \"WGL_ARB_pixel_format\"\0" + "WGL extension \"WGL_ARB_render_texture\"\0" + "WGL extension \"WGL_EXT_display_color_table\"\0" + "WGL extension \"WGL_EXT_extensions_string\"\0" + "WGL extension \"WGL_EXT_make_current_read\"\0" + "WGL extension \"WGL_EXT_pbuffer\"\0" + "WGL extension \"WGL_EXT_pixel_format\"\0" + "WGL extension \"WGL_EXT_swap_control\"\0" + "WGL extension \"WGL_I3D_digital_video_control\"\0" + "WGL extension \"WGL_I3D_gamma\"\0" + "WGL extension \"WGL_I3D_genlock\"\0" + "WGL extension \"WGL_I3D_image_buffer\"\0" + "WGL extension \"WGL_I3D_swap_frame_lock\"\0" + "WGL extension \"WGL_I3D_swap_frame_usage\"\0" + "WGL extension \"WGL_NV_DX_interop\"\0" + "WGL extension \"WGL_NV_copy_image\"\0" + "WGL extension \"WGL_NV_delay_before_swap\"\0" + "WGL extension \"WGL_NV_gpu_affinity\"\0" + "WGL extension \"WGL_NV_present_video\"\0" + "WGL extension \"WGL_NV_swap_group\"\0" + "WGL extension \"WGL_NV_vertex_array_range\"\0" + "WGL extension \"WGL_NV_video_capture\"\0" + "WGL extension \"WGL_NV_video_output\"\0" + "WGL extension \"WGL_OML_sync_control\"\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* wgl_provider_terminator, unused */ + 0, /* WGL_10 */ + 7, /* WGL_extension_WGL_3DL_stereo_control */ + 46, /* WGL_extension_WGL_AMD_gpu_association */ + 86, /* WGL_extension_WGL_ARB_buffer_region */ + 124, /* WGL_extension_WGL_ARB_create_context */ + 163, /* WGL_extension_WGL_ARB_extensions_string */ + 205, /* WGL_extension_WGL_ARB_make_current_read */ + 247, /* WGL_extension_WGL_ARB_pbuffer */ + 279, /* WGL_extension_WGL_ARB_pixel_format */ + 316, /* WGL_extension_WGL_ARB_render_texture */ + 355, /* WGL_extension_WGL_EXT_display_color_table */ + 399, /* WGL_extension_WGL_EXT_extensions_string */ + 441, /* WGL_extension_WGL_EXT_make_current_read */ + 483, /* WGL_extension_WGL_EXT_pbuffer */ + 515, /* WGL_extension_WGL_EXT_pixel_format */ + 552, /* WGL_extension_WGL_EXT_swap_control */ + 589, /* WGL_extension_WGL_I3D_digital_video_control */ + 635, /* WGL_extension_WGL_I3D_gamma */ + 665, /* WGL_extension_WGL_I3D_genlock */ + 697, /* WGL_extension_WGL_I3D_image_buffer */ + 734, /* WGL_extension_WGL_I3D_swap_frame_lock */ + 774, /* WGL_extension_WGL_I3D_swap_frame_usage */ + 815, /* WGL_extension_WGL_NV_DX_interop */ + 849, /* WGL_extension_WGL_NV_copy_image */ + 883, /* WGL_extension_WGL_NV_delay_before_swap */ + 924, /* WGL_extension_WGL_NV_gpu_affinity */ + 960, /* WGL_extension_WGL_NV_present_video */ + 997, /* WGL_extension_WGL_NV_swap_group */ + 1031, /* WGL_extension_WGL_NV_vertex_array_range */ + 1073, /* WGL_extension_WGL_NV_video_capture */ + 1110, /* WGL_extension_WGL_NV_video_output */ + 1146, /* WGL_extension_WGL_OML_sync_control */ +}; + +static const char entrypoint_strings[] = { + 'w', + 'g', + 'l', + 'A', + 'l', + 'l', + 'o', + 'c', + 'a', + 't', + 'e', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'N', + 'V', + 0, // wglAllocateMemoryNV + 'w', + 'g', + 'l', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'v', + 'e', + 'n', + 't', + 's', + 'I', + '3', + 'D', + 0, // wglAssociateImageBufferEventsI3D + 'w', + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglBeginFrameTrackingI3D + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglBindDisplayColorTableEXT + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // wglBindSwapBarrierNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // wglBindTexImageARB + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglBindVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglBindVideoDeviceNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // wglBindVideoImageNV + 'w', + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'M', + 'D', + 0, // wglBlitContextFramebufferAMD + 'w', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 'R', + 'B', + 0, // wglChoosePixelFormatARB + 'w', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // wglChoosePixelFormatEXT + 'w', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCopyContext + 'w', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // wglCopyImageSubDataNV + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 'f', + 'f', + 'i', + 'n', + 'i', + 't', + 'y', + 'D', + 'C', + 'N', + 'V', + 0, // wglCreateAffinityDCNV + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglCreateAssociatedContextAMD + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'M', + 'D', + 0, // wglCreateAssociatedContextAttribsAMD + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglCreateBufferRegionARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCreateContext + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'R', + 'B', + 0, // wglCreateContextAttribsARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglCreateDisplayColorTableEXT + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglCreateImageBufferI3D + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCreateLayerContext + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglCreatePbufferARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglCreatePbufferEXT + 'w', + 'g', + 'l', + 'D', + 'X', + 'C', + 'l', + 'o', + 's', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglDXCloseDeviceNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'L', + 'o', + 'c', + 'k', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'N', + 'V', + 0, // wglDXLockObjectsNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'c', + 'c', + 'e', + 's', + 's', + 'N', + 'V', + 0, // wglDXObjectAccessNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'O', + 'p', + 'e', + 'n', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglDXOpenDeviceNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'N', + 'V', + 0, // wglDXRegisterObjectNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'S', + 'e', + 't', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'S', + 'h', + 'a', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // wglDXSetResourceShareHandleNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'N', + 'V', + 0, // wglDXUnlockObjectsNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'U', + 'n', + 'r', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'N', + 'V', + 0, // wglDXUnregisterObjectNV + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'a', + 'y', + 'B', + 'e', + 'f', + 'o', + 'r', + 'e', + 'S', + 'w', + 'a', + 'p', + 'N', + 'V', + 0, // wglDelayBeforeSwapNV + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglDeleteAssociatedContextAMD + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglDeleteBufferRegionARB + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglDeleteContext + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'D', + 'C', + 'N', + 'V', + 0, // wglDeleteDCNV + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'b', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // wglDescribeLayerPlane + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglDestroyDisplayColorTableEXT + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglDestroyImageBufferI3D + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglDestroyPbufferARB + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglDestroyPbufferEXT + 'w', + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglDisableFrameLockI3D + 'w', + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglDisableGenlockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglEnableFrameLockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglEnableGenlockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglEndFrameTrackingI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumGpuDevicesNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 's', + 'F', + 'r', + 'o', + 'm', + 'A', + 'f', + 'f', + 'i', + 'n', + 'i', + 't', + 'y', + 'D', + 'C', + 'N', + 'V', + 0, // wglEnumGpusFromAffinityDCNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 's', + 'N', + 'V', + 0, // wglEnumGpusNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumerateVideoCaptureDevicesNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumerateVideoDevicesNV + 'w', + 'g', + 'l', + 'F', + 'r', + 'e', + 'e', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'N', + 'V', + 0, // wglFreeMemoryNV + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'R', + 'a', + 't', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSampleRateI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglGenlockSourceDelayI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'E', + 'd', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSourceEdgeI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSourceI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 'A', + 'M', + 'D', + 0, // wglGetContextGPUIDAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglGetCurrentAssociatedContextAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglGetCurrentContext + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'C', + 0, // wglGetCurrentDC + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglGetCurrentReadDCARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglGetCurrentReadDCEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // wglGetDefaultProcAddress + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'i', + 'g', + 'i', + 't', + 'a', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglGetDigitalVideoParametersI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // wglGetExtensionsStringARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // wglGetExtensionsStringEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'U', + 's', + 'a', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGetFrameUsageI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 's', + 'A', + 'M', + 'D', + 0, // wglGetGPUIDsAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // wglGetGPUInfoAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGammaTableI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglGetGammaTableParametersI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'R', + 'a', + 't', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSampleRateI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceDelayI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'E', + 'd', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceEdgeI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'E', + 'n', + 't', + 'r', + 'i', + 'e', + 's', + 0, // wglGetLayerPaletteEntries + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 's', + 'c', + 'R', + 'a', + 't', + 'e', + 'O', + 'M', + 'L', + 0, // wglGetMscRateOML + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglGetPbufferDCARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglGetPbufferDCEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // wglGetPixelFormatAttribfvARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // wglGetPixelFormatAttribfvEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // wglGetPixelFormatAttribivARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // wglGetPixelFormatAttribivEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // wglGetProcAddress + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // wglGetSwapIntervalEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'O', + 'M', + 'L', + 0, // wglGetSyncValuesOML + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglGetVideoDeviceNV + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'n', + 'f', + 'o', + 'N', + 'V', + 0, // wglGetVideoInfoNV + 'w', + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglIsEnabledFrameLockI3D + 'w', + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglIsEnabledGenlockI3D + 'w', + 'g', + 'l', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // wglJoinSwapGroupNV + 'w', + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglLoadDisplayColorTableEXT + 'w', + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglLockVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'M', + 'D', + 0, // wglMakeAssociatedContextCurrentAMD + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // wglMakeContextCurrentARB + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // wglMakeContextCurrentEXT + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // wglMakeCurrent + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'N', + 'V', + 0, // wglQueryCurrentContextNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // wglQueryFrameCountNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'M', + 'a', + 's', + 't', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglQueryFrameLockMasterI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglQueryFrameTrackingI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'M', + 'a', + 'x', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglQueryGenlockMaxSourceDelayI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'N', + 'V', + 0, // wglQueryMaxSwapGroupsNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglQueryPbufferARB + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglQueryPbufferEXT + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // wglQuerySwapGroupNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglQueryVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'a', + 'l', + 'i', + 'z', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 0, // wglRealizeLayerPalette + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'v', + 'e', + 'n', + 't', + 's', + 'I', + '3', + 'D', + 0, // wglReleaseImageBufferEventsI3D + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglReleasePbufferDCARB + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglReleasePbufferDCEXT + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // wglReleaseTexImageARB + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoImageNV + 'w', + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // wglResetFrameCountNV + 'w', + 'g', + 'l', + 'R', + 'e', + 's', + 't', + 'o', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglRestoreBufferRegionARB + 'w', + 'g', + 'l', + 'S', + 'a', + 'v', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglSaveBufferRegionARB + 'w', + 'g', + 'l', + 'S', + 'e', + 'n', + 'd', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'o', + 'V', + 'i', + 'd', + 'e', + 'o', + 'N', + 'V', + 0, // wglSendPbufferToVideoNV + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'D', + 'i', + 'g', + 'i', + 't', + 'a', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglSetDigitalVideoParametersI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'I', + '3', + 'D', + 0, // wglSetGammaTableI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglSetGammaTableParametersI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'E', + 'n', + 't', + 'r', + 'i', + 'e', + 's', + 0, // wglSetLayerPaletteEntries + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'R', + 'B', + 0, // wglSetPbufferAttribARB + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'S', + 't', + 'e', + 'r', + 'e', + 'o', + 'E', + 'm', + 'i', + 't', + 't', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'e', + '3', + 'D', + 'L', + 0, // wglSetStereoEmitterState3DL + 'w', + 'g', + 'l', + 'S', + 'h', + 'a', + 'r', + 'e', + 'L', + 'i', + 's', + 't', + 's', + 0, // wglShareLists + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglSwapBuffersMscOML + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // wglSwapIntervalEXT + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'L', + 'a', + 'y', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // wglSwapLayerBuffers + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'L', + 'a', + 'y', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglSwapLayerBuffersMscOML + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 's', + 'A', + 0, // wglUseFontBitmapsA + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 's', + 'W', + 0, // wglUseFontBitmapsW + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // wglUseFontOutlines + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 'A', + 0, // wglUseFontOutlinesA + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 'W', + 0, // wglUseFontOutlinesW + 'w', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglWaitForMscOML + 'w', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'S', + 'b', + 'c', + 'O', + 'M', + 'L', + 0, // wglWaitForSbcOML + 0 }; + +static void *wgl_provider_resolver(const char *name, + const enum wgl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != wgl_provider_terminator; i++) { + switch (providers[i]) { + case WGL_10: + if (true) + return epoxy_gl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_3DL_stereo_control: + if (epoxy_conservative_has_wgl_extension("WGL_3DL_stereo_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_AMD_gpu_association: + if (epoxy_conservative_has_wgl_extension("WGL_AMD_gpu_association")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_buffer_region: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_buffer_region")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_create_context: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_create_context")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_extensions_string: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_extensions_string")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_make_current_read: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_make_current_read")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_pbuffer: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_pbuffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_pixel_format: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_pixel_format")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_render_texture: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_render_texture")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_display_color_table: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_display_color_table")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_extensions_string: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_extensions_string")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_make_current_read: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_make_current_read")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_pbuffer: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_pbuffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_pixel_format: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_pixel_format")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_swap_control: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_swap_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_digital_video_control: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_digital_video_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_gamma: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_gamma")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_genlock: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_genlock")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_image_buffer: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_image_buffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_swap_frame_lock: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_swap_frame_lock")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_swap_frame_usage: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_swap_frame_usage")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_DX_interop: + if (epoxy_conservative_has_wgl_extension("WGL_NV_DX_interop")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_copy_image: + if (epoxy_conservative_has_wgl_extension("WGL_NV_copy_image")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_delay_before_swap: + if (epoxy_conservative_has_wgl_extension("WGL_NV_delay_before_swap")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_gpu_affinity: + if (epoxy_conservative_has_wgl_extension("WGL_NV_gpu_affinity")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_present_video: + if (epoxy_conservative_has_wgl_extension("WGL_NV_present_video")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_swap_group: + if (epoxy_conservative_has_wgl_extension("WGL_NV_swap_group")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_vertex_array_range: + if (epoxy_conservative_has_wgl_extension("WGL_NV_vertex_array_range")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_video_capture: + if (epoxy_conservative_has_wgl_extension("WGL_NV_video_capture")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_video_output: + if (epoxy_conservative_has_wgl_extension("WGL_NV_video_output")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_OML_sync_control: + if (epoxy_conservative_has_wgl_extension("WGL_OML_sync_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case wgl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != wgl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == wgl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +wgl_single_resolver(const enum wgl_provider provider, const uint32_t entrypoint_offset); + +static void * +wgl_single_resolver(const enum wgl_provider provider, const uint32_t entrypoint_offset) +{ + const enum wgl_provider providers[] = { + provider, + wgl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return wgl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNWGLALLOCATEMEMORYNVPROC +epoxy_wglAllocateMemoryNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_vertex_array_range, 0 /* wglAllocateMemoryNV */); +} + +static PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC +epoxy_wglAssociateImageBufferEventsI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 20 /* wglAssociateImageBufferEventsI3D */); +} + +static PFNWGLBEGINFRAMETRACKINGI3DPROC +epoxy_wglBeginFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 53 /* wglBeginFrameTrackingI3D */); +} + +static PFNWGLBINDDISPLAYCOLORTABLEEXTPROC +epoxy_wglBindDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 78 /* wglBindDisplayColorTableEXT */); +} + +static PFNWGLBINDSWAPBARRIERNVPROC +epoxy_wglBindSwapBarrierNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 106 /* wglBindSwapBarrierNV */); +} + +static PFNWGLBINDTEXIMAGEARBPROC +epoxy_wglBindTexImageARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 127 /* wglBindTexImageARB */); +} + +static PFNWGLBINDVIDEOCAPTUREDEVICENVPROC +epoxy_wglBindVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 146 /* wglBindVideoCaptureDeviceNV */); +} + +static PFNWGLBINDVIDEODEVICENVPROC +epoxy_wglBindVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 174 /* wglBindVideoDeviceNV */); +} + +static PFNWGLBINDVIDEOIMAGENVPROC +epoxy_wglBindVideoImageNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 195 /* wglBindVideoImageNV */); +} + +static PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC +epoxy_wglBlitContextFramebufferAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 215 /* wglBlitContextFramebufferAMD */); +} + +static PFNWGLCHOOSEPIXELFORMATARBPROC +epoxy_wglChoosePixelFormatARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 244 /* wglChoosePixelFormatARB */); +} + +static PFNWGLCHOOSEPIXELFORMATEXTPROC +epoxy_wglChoosePixelFormatEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 268 /* wglChoosePixelFormatEXT */); +} + +static PFNWGLCOPYCONTEXTPROC +epoxy_wglCopyContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 292 /* wglCopyContext */); +} + +static PFNWGLCOPYIMAGESUBDATANVPROC +epoxy_wglCopyImageSubDataNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_copy_image, 307 /* wglCopyImageSubDataNV */); +} + +static PFNWGLCREATEAFFINITYDCNVPROC +epoxy_wglCreateAffinityDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 329 /* wglCreateAffinityDCNV */); +} + +static PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC +epoxy_wglCreateAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 351 /* wglCreateAssociatedContextAMD */); +} + +static PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC +epoxy_wglCreateAssociatedContextAttribsAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 381 /* wglCreateAssociatedContextAttribsAMD */); +} + +static PFNWGLCREATEBUFFERREGIONARBPROC +epoxy_wglCreateBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 418 /* wglCreateBufferRegionARB */); +} + +static PFNWGLCREATECONTEXTPROC +epoxy_wglCreateContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 443 /* wglCreateContext */); +} + +static PFNWGLCREATECONTEXTATTRIBSARBPROC +epoxy_wglCreateContextAttribsARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_create_context, 460 /* wglCreateContextAttribsARB */); +} + +static PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC +epoxy_wglCreateDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 487 /* wglCreateDisplayColorTableEXT */); +} + +static PFNWGLCREATEIMAGEBUFFERI3DPROC +epoxy_wglCreateImageBufferI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 517 /* wglCreateImageBufferI3D */); +} + +static PFNWGLCREATELAYERCONTEXTPROC +epoxy_wglCreateLayerContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 541 /* wglCreateLayerContext */); +} + +static PFNWGLCREATEPBUFFERARBPROC +epoxy_wglCreatePbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 563 /* wglCreatePbufferARB */); +} + +static PFNWGLCREATEPBUFFEREXTPROC +epoxy_wglCreatePbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 583 /* wglCreatePbufferEXT */); +} + +static PFNWGLDXCLOSEDEVICENVPROC +epoxy_wglDXCloseDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 603 /* wglDXCloseDeviceNV */); +} + +static PFNWGLDXLOCKOBJECTSNVPROC +epoxy_wglDXLockObjectsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 622 /* wglDXLockObjectsNV */); +} + +static PFNWGLDXOBJECTACCESSNVPROC +epoxy_wglDXObjectAccessNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 641 /* wglDXObjectAccessNV */); +} + +static PFNWGLDXOPENDEVICENVPROC +epoxy_wglDXOpenDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 661 /* wglDXOpenDeviceNV */); +} + +static PFNWGLDXREGISTEROBJECTNVPROC +epoxy_wglDXRegisterObjectNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 679 /* wglDXRegisterObjectNV */); +} + +static PFNWGLDXSETRESOURCESHAREHANDLENVPROC +epoxy_wglDXSetResourceShareHandleNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 701 /* wglDXSetResourceShareHandleNV */); +} + +static PFNWGLDXUNLOCKOBJECTSNVPROC +epoxy_wglDXUnlockObjectsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 731 /* wglDXUnlockObjectsNV */); +} + +static PFNWGLDXUNREGISTEROBJECTNVPROC +epoxy_wglDXUnregisterObjectNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 752 /* wglDXUnregisterObjectNV */); +} + +static PFNWGLDELAYBEFORESWAPNVPROC +epoxy_wglDelayBeforeSwapNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_delay_before_swap, 776 /* wglDelayBeforeSwapNV */); +} + +static PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC +epoxy_wglDeleteAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 797 /* wglDeleteAssociatedContextAMD */); +} + +static PFNWGLDELETEBUFFERREGIONARBPROC +epoxy_wglDeleteBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 827 /* wglDeleteBufferRegionARB */); +} + +static PFNWGLDELETECONTEXTPROC +epoxy_wglDeleteContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 852 /* wglDeleteContext */); +} + +static PFNWGLDELETEDCNVPROC +epoxy_wglDeleteDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 869 /* wglDeleteDCNV */); +} + +static PFNWGLDESCRIBELAYERPLANEPROC +epoxy_wglDescribeLayerPlane_resolver(void) +{ + return wgl_single_resolver(WGL_10, 883 /* wglDescribeLayerPlane */); +} + +static PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC +epoxy_wglDestroyDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 905 /* wglDestroyDisplayColorTableEXT */); +} + +static PFNWGLDESTROYIMAGEBUFFERI3DPROC +epoxy_wglDestroyImageBufferI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 936 /* wglDestroyImageBufferI3D */); +} + +static PFNWGLDESTROYPBUFFERARBPROC +epoxy_wglDestroyPbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 961 /* wglDestroyPbufferARB */); +} + +static PFNWGLDESTROYPBUFFEREXTPROC +epoxy_wglDestroyPbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 982 /* wglDestroyPbufferEXT */); +} + +static PFNWGLDISABLEFRAMELOCKI3DPROC +epoxy_wglDisableFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 1003 /* wglDisableFrameLockI3D */); +} + +static PFNWGLDISABLEGENLOCKI3DPROC +epoxy_wglDisableGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1026 /* wglDisableGenlockI3D */); +} + +static PFNWGLENABLEFRAMELOCKI3DPROC +epoxy_wglEnableFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 1047 /* wglEnableFrameLockI3D */); +} + +static PFNWGLENABLEGENLOCKI3DPROC +epoxy_wglEnableGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1069 /* wglEnableGenlockI3D */); +} + +static PFNWGLENDFRAMETRACKINGI3DPROC +epoxy_wglEndFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 1089 /* wglEndFrameTrackingI3D */); +} + +static PFNWGLENUMGPUDEVICESNVPROC +epoxy_wglEnumGpuDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1112 /* wglEnumGpuDevicesNV */); +} + +static PFNWGLENUMGPUSFROMAFFINITYDCNVPROC +epoxy_wglEnumGpusFromAffinityDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1132 /* wglEnumGpusFromAffinityDCNV */); +} + +static PFNWGLENUMGPUSNVPROC +epoxy_wglEnumGpusNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1160 /* wglEnumGpusNV */); +} + +static PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC +epoxy_wglEnumerateVideoCaptureDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 1174 /* wglEnumerateVideoCaptureDevicesNV */); +} + +static PFNWGLENUMERATEVIDEODEVICESNVPROC +epoxy_wglEnumerateVideoDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 1208 /* wglEnumerateVideoDevicesNV */); +} + +static PFNWGLFREEMEMORYNVPROC +epoxy_wglFreeMemoryNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_vertex_array_range, 1235 /* wglFreeMemoryNV */); +} + +static PFNWGLGENLOCKSAMPLERATEI3DPROC +epoxy_wglGenlockSampleRateI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1251 /* wglGenlockSampleRateI3D */); +} + +static PFNWGLGENLOCKSOURCEDELAYI3DPROC +epoxy_wglGenlockSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1275 /* wglGenlockSourceDelayI3D */); +} + +static PFNWGLGENLOCKSOURCEEDGEI3DPROC +epoxy_wglGenlockSourceEdgeI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1300 /* wglGenlockSourceEdgeI3D */); +} + +static PFNWGLGENLOCKSOURCEI3DPROC +epoxy_wglGenlockSourceI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1324 /* wglGenlockSourceI3D */); +} + +static PFNWGLGETCONTEXTGPUIDAMDPROC +epoxy_wglGetContextGPUIDAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1344 /* wglGetContextGPUIDAMD */); +} + +static PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC +epoxy_wglGetCurrentAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1366 /* wglGetCurrentAssociatedContextAMD */); +} + +static PFNWGLGETCURRENTCONTEXTPROC +epoxy_wglGetCurrentContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1400 /* wglGetCurrentContext */); +} + +static PFNWGLGETCURRENTDCPROC +epoxy_wglGetCurrentDC_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1421 /* wglGetCurrentDC */); +} + +static PFNWGLGETCURRENTREADDCARBPROC +epoxy_wglGetCurrentReadDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_make_current_read, 1437 /* wglGetCurrentReadDCARB */); +} + +static PFNWGLGETCURRENTREADDCEXTPROC +epoxy_wglGetCurrentReadDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_make_current_read, 1460 /* wglGetCurrentReadDCEXT */); +} + +static PFNWGLGETDEFAULTPROCADDRESSPROC +epoxy_wglGetDefaultProcAddress_resolver(void) +{ + static const enum wgl_provider providers[] = { + wgl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 0 /* None */, + }; + return wgl_provider_resolver(entrypoint_strings + 1483 /* "wglGetDefaultProcAddress" */, + providers, entrypoints); +} + +static PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC +epoxy_wglGetDigitalVideoParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_digital_video_control, 1508 /* wglGetDigitalVideoParametersI3D */); +} + +static PFNWGLGETEXTENSIONSSTRINGARBPROC +epoxy_wglGetExtensionsStringARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_extensions_string, 1540 /* wglGetExtensionsStringARB */); +} + +static PFNWGLGETEXTENSIONSSTRINGEXTPROC +epoxy_wglGetExtensionsStringEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_extensions_string, 1566 /* wglGetExtensionsStringEXT */); +} + +static PFNWGLGETFRAMEUSAGEI3DPROC +epoxy_wglGetFrameUsageI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 1592 /* wglGetFrameUsageI3D */); +} + +static PFNWGLGETGPUIDSAMDPROC +epoxy_wglGetGPUIDsAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1612 /* wglGetGPUIDsAMD */); +} + +static PFNWGLGETGPUINFOAMDPROC +epoxy_wglGetGPUInfoAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1628 /* wglGetGPUInfoAMD */); +} + +static PFNWGLGETGAMMATABLEI3DPROC +epoxy_wglGetGammaTableI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 1645 /* wglGetGammaTableI3D */); +} + +static PFNWGLGETGAMMATABLEPARAMETERSI3DPROC +epoxy_wglGetGammaTableParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 1665 /* wglGetGammaTableParametersI3D */); +} + +static PFNWGLGETGENLOCKSAMPLERATEI3DPROC +epoxy_wglGetGenlockSampleRateI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1695 /* wglGetGenlockSampleRateI3D */); +} + +static PFNWGLGETGENLOCKSOURCEDELAYI3DPROC +epoxy_wglGetGenlockSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1722 /* wglGetGenlockSourceDelayI3D */); +} + +static PFNWGLGETGENLOCKSOURCEEDGEI3DPROC +epoxy_wglGetGenlockSourceEdgeI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1750 /* wglGetGenlockSourceEdgeI3D */); +} + +static PFNWGLGETGENLOCKSOURCEI3DPROC +epoxy_wglGetGenlockSourceI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1777 /* wglGetGenlockSourceI3D */); +} + +static PFNWGLGETLAYERPALETTEENTRIESPROC +epoxy_wglGetLayerPaletteEntries_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1800 /* wglGetLayerPaletteEntries */); +} + +static PFNWGLGETMSCRATEOMLPROC +epoxy_wglGetMscRateOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 1826 /* wglGetMscRateOML */); +} + +static PFNWGLGETPBUFFERDCARBPROC +epoxy_wglGetPbufferDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 1843 /* wglGetPbufferDCARB */); +} + +static PFNWGLGETPBUFFERDCEXTPROC +epoxy_wglGetPbufferDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 1862 /* wglGetPbufferDCEXT */); +} + +static PFNWGLGETPIXELFORMATATTRIBFVARBPROC +epoxy_wglGetPixelFormatAttribfvARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 1881 /* wglGetPixelFormatAttribfvARB */); +} + +static PFNWGLGETPIXELFORMATATTRIBFVEXTPROC +epoxy_wglGetPixelFormatAttribfvEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 1910 /* wglGetPixelFormatAttribfvEXT */); +} + +static PFNWGLGETPIXELFORMATATTRIBIVARBPROC +epoxy_wglGetPixelFormatAttribivARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 1939 /* wglGetPixelFormatAttribivARB */); +} + +static PFNWGLGETPIXELFORMATATTRIBIVEXTPROC +epoxy_wglGetPixelFormatAttribivEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 1968 /* wglGetPixelFormatAttribivEXT */); +} + +static PFNWGLGETPROCADDRESSPROC +epoxy_wglGetProcAddress_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1997 /* wglGetProcAddress */); +} + +static PFNWGLGETSWAPINTERVALEXTPROC +epoxy_wglGetSwapIntervalEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_swap_control, 2015 /* wglGetSwapIntervalEXT */); +} + +static PFNWGLGETSYNCVALUESOMLPROC +epoxy_wglGetSyncValuesOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 2037 /* wglGetSyncValuesOML */); +} + +static PFNWGLGETVIDEODEVICENVPROC +epoxy_wglGetVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2057 /* wglGetVideoDeviceNV */); +} + +static PFNWGLGETVIDEOINFONVPROC +epoxy_wglGetVideoInfoNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2077 /* wglGetVideoInfoNV */); +} + +static PFNWGLISENABLEDFRAMELOCKI3DPROC +epoxy_wglIsEnabledFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 2095 /* wglIsEnabledFrameLockI3D */); +} + +static PFNWGLISENABLEDGENLOCKI3DPROC +epoxy_wglIsEnabledGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 2120 /* wglIsEnabledGenlockI3D */); +} + +static PFNWGLJOINSWAPGROUPNVPROC +epoxy_wglJoinSwapGroupNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2143 /* wglJoinSwapGroupNV */); +} + +static PFNWGLLOADDISPLAYCOLORTABLEEXTPROC +epoxy_wglLoadDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 2162 /* wglLoadDisplayColorTableEXT */); +} + +static PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC +epoxy_wglLockVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2190 /* wglLockVideoCaptureDeviceNV */); +} + +static PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC +epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 2218 /* wglMakeAssociatedContextCurrentAMD */); +} + +static PFNWGLMAKECONTEXTCURRENTARBPROC +epoxy_wglMakeContextCurrentARB_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_make_current_read, 2253 /* wglMakeContextCurrentARB */); +} + +static PFNWGLMAKECONTEXTCURRENTEXTPROC +epoxy_wglMakeContextCurrentEXT_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_make_current_read, 2278 /* wglMakeContextCurrentEXT */); +} + +static PFNWGLMAKECURRENTPROC +epoxy_wglMakeCurrent_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2303 /* wglMakeCurrent */); +} + +static PFNWGLQUERYCURRENTCONTEXTNVPROC +epoxy_wglQueryCurrentContextNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 2318 /* wglQueryCurrentContextNV */); +} + +static PFNWGLQUERYFRAMECOUNTNVPROC +epoxy_wglQueryFrameCountNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2343 /* wglQueryFrameCountNV */); +} + +static PFNWGLQUERYFRAMELOCKMASTERI3DPROC +epoxy_wglQueryFrameLockMasterI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 2364 /* wglQueryFrameLockMasterI3D */); +} + +static PFNWGLQUERYFRAMETRACKINGI3DPROC +epoxy_wglQueryFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 2391 /* wglQueryFrameTrackingI3D */); +} + +static PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC +epoxy_wglQueryGenlockMaxSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 2416 /* wglQueryGenlockMaxSourceDelayI3D */); +} + +static PFNWGLQUERYMAXSWAPGROUPSNVPROC +epoxy_wglQueryMaxSwapGroupsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2449 /* wglQueryMaxSwapGroupsNV */); +} + +static PFNWGLQUERYPBUFFERARBPROC +epoxy_wglQueryPbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 2473 /* wglQueryPbufferARB */); +} + +static PFNWGLQUERYPBUFFEREXTPROC +epoxy_wglQueryPbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 2492 /* wglQueryPbufferEXT */); +} + +static PFNWGLQUERYSWAPGROUPNVPROC +epoxy_wglQuerySwapGroupNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2511 /* wglQuerySwapGroupNV */); +} + +static PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC +epoxy_wglQueryVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2531 /* wglQueryVideoCaptureDeviceNV */); +} + +static PFNWGLREALIZELAYERPALETTEPROC +epoxy_wglRealizeLayerPalette_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2560 /* wglRealizeLayerPalette */); +} + +static PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC +epoxy_wglReleaseImageBufferEventsI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 2583 /* wglReleaseImageBufferEventsI3D */); +} + +static PFNWGLRELEASEPBUFFERDCARBPROC +epoxy_wglReleasePbufferDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 2614 /* wglReleasePbufferDCARB */); +} + +static PFNWGLRELEASEPBUFFERDCEXTPROC +epoxy_wglReleasePbufferDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 2637 /* wglReleasePbufferDCEXT */); +} + +static PFNWGLRELEASETEXIMAGEARBPROC +epoxy_wglReleaseTexImageARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 2660 /* wglReleaseTexImageARB */); +} + +static PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC +epoxy_wglReleaseVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2682 /* wglReleaseVideoCaptureDeviceNV */); +} + +static PFNWGLRELEASEVIDEODEVICENVPROC +epoxy_wglReleaseVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2713 /* wglReleaseVideoDeviceNV */); +} + +static PFNWGLRELEASEVIDEOIMAGENVPROC +epoxy_wglReleaseVideoImageNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2737 /* wglReleaseVideoImageNV */); +} + +static PFNWGLRESETFRAMECOUNTNVPROC +epoxy_wglResetFrameCountNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2760 /* wglResetFrameCountNV */); +} + +static PFNWGLRESTOREBUFFERREGIONARBPROC +epoxy_wglRestoreBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 2781 /* wglRestoreBufferRegionARB */); +} + +static PFNWGLSAVEBUFFERREGIONARBPROC +epoxy_wglSaveBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 2807 /* wglSaveBufferRegionARB */); +} + +static PFNWGLSENDPBUFFERTOVIDEONVPROC +epoxy_wglSendPbufferToVideoNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2830 /* wglSendPbufferToVideoNV */); +} + +static PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC +epoxy_wglSetDigitalVideoParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_digital_video_control, 2854 /* wglSetDigitalVideoParametersI3D */); +} + +static PFNWGLSETGAMMATABLEI3DPROC +epoxy_wglSetGammaTableI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 2886 /* wglSetGammaTableI3D */); +} + +static PFNWGLSETGAMMATABLEPARAMETERSI3DPROC +epoxy_wglSetGammaTableParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 2906 /* wglSetGammaTableParametersI3D */); +} + +static PFNWGLSETLAYERPALETTEENTRIESPROC +epoxy_wglSetLayerPaletteEntries_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2936 /* wglSetLayerPaletteEntries */); +} + +static PFNWGLSETPBUFFERATTRIBARBPROC +epoxy_wglSetPbufferAttribARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 2962 /* wglSetPbufferAttribARB */); +} + +static PFNWGLSETSTEREOEMITTERSTATE3DLPROC +epoxy_wglSetStereoEmitterState3DL_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_3DL_stereo_control, 2985 /* wglSetStereoEmitterState3DL */); +} + +static PFNWGLSHARELISTSPROC +epoxy_wglShareLists_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3013 /* wglShareLists */); +} + +static PFNWGLSWAPBUFFERSMSCOMLPROC +epoxy_wglSwapBuffersMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3027 /* wglSwapBuffersMscOML */); +} + +static PFNWGLSWAPINTERVALEXTPROC +epoxy_wglSwapIntervalEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_swap_control, 3048 /* wglSwapIntervalEXT */); +} + +static PFNWGLSWAPLAYERBUFFERSPROC +epoxy_wglSwapLayerBuffers_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3067 /* wglSwapLayerBuffers */); +} + +static PFNWGLSWAPLAYERBUFFERSMSCOMLPROC +epoxy_wglSwapLayerBuffersMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3087 /* wglSwapLayerBuffersMscOML */); +} + +static PFNWGLUSEFONTBITMAPSAPROC +epoxy_wglUseFontBitmapsA_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3113 /* wglUseFontBitmapsA */); +} + +static PFNWGLUSEFONTBITMAPSWPROC +epoxy_wglUseFontBitmapsW_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3132 /* wglUseFontBitmapsW */); +} + +static PFNWGLUSEFONTOUTLINESPROC +epoxy_wglUseFontOutlines_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3151 /* wglUseFontOutlines */); +} + +static PFNWGLUSEFONTOUTLINESAPROC +epoxy_wglUseFontOutlinesA_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3170 /* wglUseFontOutlinesA */); +} + +static PFNWGLUSEFONTOUTLINESWPROC +epoxy_wglUseFontOutlinesW_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3190 /* wglUseFontOutlinesW */); +} + +static PFNWGLWAITFORMSCOMLPROC +epoxy_wglWaitForMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3210 /* wglWaitForMscOML */); +} + +static PFNWGLWAITFORSBCOMLPROC +epoxy_wglWaitForSbcOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3227 /* wglWaitForSbcOML */); +} + +GEN_THUNKS_RET(void *, wglAllocateMemoryNV, (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority), (size, readfreq, writefreq, priority)) +GEN_THUNKS_RET(BOOL, wglAssociateImageBufferEventsI3D, (HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count), (hDC, pEvent, pAddress, pSize, count)) +GEN_THUNKS_RET(BOOL, wglBeginFrameTrackingI3D, (void), ()) +GEN_THUNKS_RET(GLboolean, wglBindDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(BOOL, wglBindSwapBarrierNV, (GLuint group, GLuint barrier), (group, barrier)) +GEN_THUNKS_RET(BOOL, wglBindTexImageARB, (HPBUFFERARB hPbuffer, int iBuffer), (hPbuffer, iBuffer)) +GEN_THUNKS_RET(BOOL, wglBindVideoCaptureDeviceNV, (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice), (uVideoSlot, hDevice)) +GEN_THUNKS_RET(BOOL, wglBindVideoDeviceNV, (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList), (hDC, uVideoSlot, hVideoDevice, piAttribList)) +GEN_THUNKS_RET(BOOL, wglBindVideoImageNV, (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer), (hVideoDevice, hPbuffer, iVideoBuffer)) +GEN_THUNKS(wglBlitContextFramebufferAMD, (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS_RET(BOOL, wglChoosePixelFormatARB, (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats), (hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats)) +GEN_THUNKS_RET(BOOL, wglChoosePixelFormatEXT, (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats), (hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats)) +GEN_THUNKS_RET(BOOL, wglCopyContext, (HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask), (hglrcSrc, hglrcDst, mask)) +GEN_THUNKS_RET(BOOL, wglCopyImageSubDataNV, (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (hSrcRC, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, hDstRC, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS_RET(HDC, wglCreateAffinityDCNV, (const HGPUNV * phGpuList), (phGpuList)) +GEN_THUNKS_RET(HGLRC, wglCreateAssociatedContextAMD, (UINT id), (id)) +GEN_THUNKS_RET(HGLRC, wglCreateAssociatedContextAttribsAMD, (UINT id, HGLRC hShareContext, const int * attribList), (id, hShareContext, attribList)) +GEN_THUNKS_RET(HANDLE, wglCreateBufferRegionARB, (HDC hDC, int iLayerPlane, UINT uType), (hDC, iLayerPlane, uType)) +GEN_THUNKS_RET(HGLRC, wglCreateContext, (HDC hDc), (hDc)) +GEN_THUNKS_RET(HGLRC, wglCreateContextAttribsARB, (HDC hDC, HGLRC hShareContext, const int * attribList), (hDC, hShareContext, attribList)) +GEN_THUNKS_RET(GLboolean, wglCreateDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(LPVOID, wglCreateImageBufferI3D, (HDC hDC, DWORD dwSize, UINT uFlags), (hDC, dwSize, uFlags)) +GEN_THUNKS_RET(HGLRC, wglCreateLayerContext, (HDC hDc, int level), (hDc, level)) +GEN_THUNKS_RET(HPBUFFERARB, wglCreatePbufferARB, (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList), (hDC, iPixelFormat, iWidth, iHeight, piAttribList)) +GEN_THUNKS_RET(HPBUFFEREXT, wglCreatePbufferEXT, (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList), (hDC, iPixelFormat, iWidth, iHeight, piAttribList)) +GEN_THUNKS_RET(BOOL, wglDXCloseDeviceNV, (HANDLE hDevice), (hDevice)) +GEN_THUNKS_RET(BOOL, wglDXLockObjectsNV, (HANDLE hDevice, GLint count, HANDLE * hObjects), (hDevice, count, hObjects)) +GEN_THUNKS_RET(BOOL, wglDXObjectAccessNV, (HANDLE hObject, GLenum access), (hObject, access)) +GEN_THUNKS_RET(HANDLE, wglDXOpenDeviceNV, (void * dxDevice), (dxDevice)) +GEN_THUNKS_RET(HANDLE, wglDXRegisterObjectNV, (HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access), (hDevice, dxObject, name, type, access)) +GEN_THUNKS_RET(BOOL, wglDXSetResourceShareHandleNV, (void * dxObject, HANDLE shareHandle), (dxObject, shareHandle)) +GEN_THUNKS_RET(BOOL, wglDXUnlockObjectsNV, (HANDLE hDevice, GLint count, HANDLE * hObjects), (hDevice, count, hObjects)) +GEN_THUNKS_RET(BOOL, wglDXUnregisterObjectNV, (HANDLE hDevice, HANDLE hObject), (hDevice, hObject)) +GEN_THUNKS_RET(BOOL, wglDelayBeforeSwapNV, (HDC hDC, GLfloat seconds), (hDC, seconds)) +GEN_THUNKS_RET(BOOL, wglDeleteAssociatedContextAMD, (HGLRC hglrc), (hglrc)) +GEN_THUNKS(wglDeleteBufferRegionARB, (HANDLE hRegion), (hRegion)) +GEN_THUNKS_RET(BOOL, wglDeleteContext, (HGLRC oldContext), (oldContext)) +GEN_THUNKS_RET(BOOL, wglDeleteDCNV, (HDC hdc), (hdc)) +GEN_THUNKS_RET(BOOL, wglDescribeLayerPlane, (HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd), (hDc, pixelFormat, layerPlane, nBytes, plpd)) +GEN_THUNKS(wglDestroyDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(BOOL, wglDestroyImageBufferI3D, (HDC hDC, LPVOID pAddress), (hDC, pAddress)) +GEN_THUNKS_RET(BOOL, wglDestroyPbufferARB, (HPBUFFERARB hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglDestroyPbufferEXT, (HPBUFFEREXT hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglDisableFrameLockI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglDisableGenlockI3D, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglEnableFrameLockI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglEnableGenlockI3D, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglEndFrameTrackingI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglEnumGpuDevicesNV, (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice), (hGpu, iDeviceIndex, lpGpuDevice)) +GEN_THUNKS_RET(BOOL, wglEnumGpusFromAffinityDCNV, (HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu), (hAffinityDC, iGpuIndex, hGpu)) +GEN_THUNKS_RET(BOOL, wglEnumGpusNV, (UINT iGpuIndex, HGPUNV * phGpu), (iGpuIndex, phGpu)) +GEN_THUNKS_RET(UINT, wglEnumerateVideoCaptureDevicesNV, (HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList), (hDc, phDeviceList)) +GEN_THUNKS_RET(int, wglEnumerateVideoDevicesNV, (HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList), (hDC, phDeviceList)) +GEN_THUNKS(wglFreeMemoryNV, (void * pointer), (pointer)) +GEN_THUNKS_RET(BOOL, wglGenlockSampleRateI3D, (HDC hDC, UINT uRate), (hDC, uRate)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceDelayI3D, (HDC hDC, UINT uDelay), (hDC, uDelay)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceEdgeI3D, (HDC hDC, UINT uEdge), (hDC, uEdge)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceI3D, (HDC hDC, UINT uSource), (hDC, uSource)) +GEN_THUNKS_RET(UINT, wglGetContextGPUIDAMD, (HGLRC hglrc), (hglrc)) +GEN_THUNKS_RET(HGLRC, wglGetCurrentAssociatedContextAMD, (void), ()) +GEN_THUNKS_RET(HGLRC, wglGetCurrentContext, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentDC, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentReadDCARB, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentReadDCEXT, (void), ()) +GEN_THUNKS_RET(PROC, wglGetDefaultProcAddress, (LPCSTR lpszProc), (lpszProc)) +GEN_THUNKS_RET(BOOL, wglGetDigitalVideoParametersI3D, (HDC hDC, int iAttribute, int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(const char *, wglGetExtensionsStringARB, (HDC hdc), (hdc)) +GEN_THUNKS_RET(const char *, wglGetExtensionsStringEXT, (void), ()) +GEN_THUNKS_RET(BOOL, wglGetFrameUsageI3D, (float * pUsage), (pUsage)) +GEN_THUNKS_RET(UINT, wglGetGPUIDsAMD, (UINT maxCount, UINT * ids), (maxCount, ids)) +GEN_THUNKS_RET(INT, wglGetGPUInfoAMD, (UINT id, int property, GLenum dataType, UINT size, void * data), (id, property, dataType, size, data)) +GEN_THUNKS_RET(BOOL, wglGetGammaTableI3D, (HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue), (hDC, iEntries, puRed, puGreen, puBlue)) +GEN_THUNKS_RET(BOOL, wglGetGammaTableParametersI3D, (HDC hDC, int iAttribute, int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSampleRateI3D, (HDC hDC, UINT * uRate), (hDC, uRate)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceDelayI3D, (HDC hDC, UINT * uDelay), (hDC, uDelay)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceEdgeI3D, (HDC hDC, UINT * uEdge), (hDC, uEdge)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceI3D, (HDC hDC, UINT * uSource), (hDC, uSource)) +GEN_THUNKS_RET(int, wglGetLayerPaletteEntries, (HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr), (hdc, iLayerPlane, iStart, cEntries, pcr)) +GEN_THUNKS_RET(BOOL, wglGetMscRateOML, (HDC hdc, INT32 * numerator, INT32 * denominator), (hdc, numerator, denominator)) +GEN_THUNKS_RET(HDC, wglGetPbufferDCARB, (HPBUFFERARB hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(HDC, wglGetPbufferDCEXT, (HPBUFFEREXT hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribfvARB, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribfvEXT, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribivARB, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribivEXT, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues)) +GEN_THUNKS_RET(PROC, wglGetProcAddress, (LPCSTR lpszProc), (lpszProc)) +GEN_THUNKS_RET(int, wglGetSwapIntervalEXT, (void), ()) +GEN_THUNKS_RET(BOOL, wglGetSyncValuesOML, (HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, ust, msc, sbc)) +GEN_THUNKS_RET(BOOL, wglGetVideoDeviceNV, (HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice), (hDC, numDevices, hVideoDevice)) +GEN_THUNKS_RET(BOOL, wglGetVideoInfoNV, (HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo), (hpVideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo)) +GEN_THUNKS_RET(BOOL, wglIsEnabledFrameLockI3D, (BOOL * pFlag), (pFlag)) +GEN_THUNKS_RET(BOOL, wglIsEnabledGenlockI3D, (HDC hDC, BOOL * pFlag), (hDC, pFlag)) +GEN_THUNKS_RET(BOOL, wglJoinSwapGroupNV, (HDC hDC, GLuint group), (hDC, group)) +GEN_THUNKS_RET(GLboolean, wglLoadDisplayColorTableEXT, (const GLushort * table, GLuint length), (table, length)) +GEN_THUNKS_RET(BOOL, wglLockVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice), (hDc, hDevice)) +GEN_THUNKS_RET(BOOL, wglMakeAssociatedContextCurrentAMD_unwrapped, (HGLRC hglrc), (hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeContextCurrentARB_unwrapped, (HDC hDrawDC, HDC hReadDC, HGLRC hglrc), (hDrawDC, hReadDC, hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeContextCurrentEXT_unwrapped, (HDC hDrawDC, HDC hReadDC, HGLRC hglrc), (hDrawDC, hReadDC, hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeCurrent_unwrapped, (HDC hDc, HGLRC newContext), (hDc, newContext)) +GEN_THUNKS_RET(BOOL, wglQueryCurrentContextNV, (int iAttribute, int * piValue), (iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQueryFrameCountNV, (HDC hDC, GLuint * count), (hDC, count)) +GEN_THUNKS_RET(BOOL, wglQueryFrameLockMasterI3D, (BOOL * pFlag), (pFlag)) +GEN_THUNKS_RET(BOOL, wglQueryFrameTrackingI3D, (DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage), (pFrameCount, pMissedFrames, pLastMissedUsage)) +GEN_THUNKS_RET(BOOL, wglQueryGenlockMaxSourceDelayI3D, (HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay), (hDC, uMaxLineDelay, uMaxPixelDelay)) +GEN_THUNKS_RET(BOOL, wglQueryMaxSwapGroupsNV, (HDC hDC, GLuint * maxGroups, GLuint * maxBarriers), (hDC, maxGroups, maxBarriers)) +GEN_THUNKS_RET(BOOL, wglQueryPbufferARB, (HPBUFFERARB hPbuffer, int iAttribute, int * piValue), (hPbuffer, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQueryPbufferEXT, (HPBUFFEREXT hPbuffer, int iAttribute, int * piValue), (hPbuffer, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQuerySwapGroupNV, (HDC hDC, GLuint * group, GLuint * barrier), (hDC, group, barrier)) +GEN_THUNKS_RET(BOOL, wglQueryVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue), (hDc, hDevice, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglRealizeLayerPalette, (HDC hdc, int iLayerPlane, BOOL bRealize), (hdc, iLayerPlane, bRealize)) +GEN_THUNKS_RET(BOOL, wglReleaseImageBufferEventsI3D, (HDC hDC, const LPVOID * pAddress, UINT count), (hDC, pAddress, count)) +GEN_THUNKS_RET(int, wglReleasePbufferDCARB, (HPBUFFERARB hPbuffer, HDC hDC), (hPbuffer, hDC)) +GEN_THUNKS_RET(int, wglReleasePbufferDCEXT, (HPBUFFEREXT hPbuffer, HDC hDC), (hPbuffer, hDC)) +GEN_THUNKS_RET(BOOL, wglReleaseTexImageARB, (HPBUFFERARB hPbuffer, int iBuffer), (hPbuffer, iBuffer)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice), (hDc, hDevice)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoDeviceNV, (HPVIDEODEV hVideoDevice), (hVideoDevice)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoImageNV, (HPBUFFERARB hPbuffer, int iVideoBuffer), (hPbuffer, iVideoBuffer)) +GEN_THUNKS_RET(BOOL, wglResetFrameCountNV, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglRestoreBufferRegionARB, (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc), (hRegion, x, y, width, height, xSrc, ySrc)) +GEN_THUNKS_RET(BOOL, wglSaveBufferRegionARB, (HANDLE hRegion, int x, int y, int width, int height), (hRegion, x, y, width, height)) +GEN_THUNKS_RET(BOOL, wglSendPbufferToVideoNV, (HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock), (hPbuffer, iBufferType, pulCounterPbuffer, bBlock)) +GEN_THUNKS_RET(BOOL, wglSetDigitalVideoParametersI3D, (HDC hDC, int iAttribute, const int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglSetGammaTableI3D, (HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue), (hDC, iEntries, puRed, puGreen, puBlue)) +GEN_THUNKS_RET(BOOL, wglSetGammaTableParametersI3D, (HDC hDC, int iAttribute, const int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(int, wglSetLayerPaletteEntries, (HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr), (hdc, iLayerPlane, iStart, cEntries, pcr)) +GEN_THUNKS_RET(BOOL, wglSetPbufferAttribARB, (HPBUFFERARB hPbuffer, const int * piAttribList), (hPbuffer, piAttribList)) +GEN_THUNKS_RET(BOOL, wglSetStereoEmitterState3DL, (HDC hDC, UINT uState), (hDC, uState)) +GEN_THUNKS_RET(BOOL, wglShareLists, (HGLRC hrcSrvShare, HGLRC hrcSrvSource), (hrcSrvShare, hrcSrvSource)) +GEN_THUNKS_RET(INT64, wglSwapBuffersMscOML, (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder), (hdc, target_msc, divisor, remainder)) +GEN_THUNKS_RET(BOOL, wglSwapIntervalEXT, (int interval), (interval)) +GEN_THUNKS_RET(BOOL, wglSwapLayerBuffers, (HDC hdc, UINT fuFlags), (hdc, fuFlags)) +GEN_THUNKS_RET(INT64, wglSwapLayerBuffersMscOML, (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder), (hdc, fuPlanes, target_msc, divisor, remainder)) +GEN_THUNKS_RET(BOOL, wglUseFontBitmapsA, (HDC hDC, DWORD first, DWORD count, DWORD listBase), (hDC, first, count, listBase)) +GEN_THUNKS_RET(BOOL, wglUseFontBitmapsW, (HDC hDC, DWORD first, DWORD count, DWORD listBase), (hDC, first, count, listBase)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlines, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlinesA, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlinesW, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglWaitForMscOML, (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, target_msc, divisor, remainder, ust, msc, sbc)) +GEN_THUNKS_RET(BOOL, wglWaitForSbcOML, (HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, target_sbc, ust, msc, sbc)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_wglAllocateMemoryNV_dispatch_table_rewrite_ptr, /* wglAllocateMemoryNV */ + epoxy_wglAssociateImageBufferEventsI3D_dispatch_table_rewrite_ptr, /* wglAssociateImageBufferEventsI3D */ + epoxy_wglBeginFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglBeginFrameTrackingI3D */ + epoxy_wglBindDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglBindDisplayColorTableEXT */ + epoxy_wglBindSwapBarrierNV_dispatch_table_rewrite_ptr, /* wglBindSwapBarrierNV */ + epoxy_wglBindTexImageARB_dispatch_table_rewrite_ptr, /* wglBindTexImageARB */ + epoxy_wglBindVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglBindVideoCaptureDeviceNV */ + epoxy_wglBindVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglBindVideoDeviceNV */ + epoxy_wglBindVideoImageNV_dispatch_table_rewrite_ptr, /* wglBindVideoImageNV */ + epoxy_wglBlitContextFramebufferAMD_dispatch_table_rewrite_ptr, /* wglBlitContextFramebufferAMD */ + epoxy_wglChoosePixelFormatARB_dispatch_table_rewrite_ptr, /* wglChoosePixelFormatARB */ + epoxy_wglChoosePixelFormatEXT_dispatch_table_rewrite_ptr, /* wglChoosePixelFormatEXT */ + epoxy_wglCopyContext_dispatch_table_rewrite_ptr, /* wglCopyContext */ + epoxy_wglCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* wglCopyImageSubDataNV */ + epoxy_wglCreateAffinityDCNV_dispatch_table_rewrite_ptr, /* wglCreateAffinityDCNV */ + epoxy_wglCreateAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglCreateAssociatedContextAMD */ + epoxy_wglCreateAssociatedContextAttribsAMD_dispatch_table_rewrite_ptr, /* wglCreateAssociatedContextAttribsAMD */ + epoxy_wglCreateBufferRegionARB_dispatch_table_rewrite_ptr, /* wglCreateBufferRegionARB */ + epoxy_wglCreateContext_dispatch_table_rewrite_ptr, /* wglCreateContext */ + epoxy_wglCreateContextAttribsARB_dispatch_table_rewrite_ptr, /* wglCreateContextAttribsARB */ + epoxy_wglCreateDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglCreateDisplayColorTableEXT */ + epoxy_wglCreateImageBufferI3D_dispatch_table_rewrite_ptr, /* wglCreateImageBufferI3D */ + epoxy_wglCreateLayerContext_dispatch_table_rewrite_ptr, /* wglCreateLayerContext */ + epoxy_wglCreatePbufferARB_dispatch_table_rewrite_ptr, /* wglCreatePbufferARB */ + epoxy_wglCreatePbufferEXT_dispatch_table_rewrite_ptr, /* wglCreatePbufferEXT */ + epoxy_wglDXCloseDeviceNV_dispatch_table_rewrite_ptr, /* wglDXCloseDeviceNV */ + epoxy_wglDXLockObjectsNV_dispatch_table_rewrite_ptr, /* wglDXLockObjectsNV */ + epoxy_wglDXObjectAccessNV_dispatch_table_rewrite_ptr, /* wglDXObjectAccessNV */ + epoxy_wglDXOpenDeviceNV_dispatch_table_rewrite_ptr, /* wglDXOpenDeviceNV */ + epoxy_wglDXRegisterObjectNV_dispatch_table_rewrite_ptr, /* wglDXRegisterObjectNV */ + epoxy_wglDXSetResourceShareHandleNV_dispatch_table_rewrite_ptr, /* wglDXSetResourceShareHandleNV */ + epoxy_wglDXUnlockObjectsNV_dispatch_table_rewrite_ptr, /* wglDXUnlockObjectsNV */ + epoxy_wglDXUnregisterObjectNV_dispatch_table_rewrite_ptr, /* wglDXUnregisterObjectNV */ + epoxy_wglDelayBeforeSwapNV_dispatch_table_rewrite_ptr, /* wglDelayBeforeSwapNV */ + epoxy_wglDeleteAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglDeleteAssociatedContextAMD */ + epoxy_wglDeleteBufferRegionARB_dispatch_table_rewrite_ptr, /* wglDeleteBufferRegionARB */ + epoxy_wglDeleteContext_dispatch_table_rewrite_ptr, /* wglDeleteContext */ + epoxy_wglDeleteDCNV_dispatch_table_rewrite_ptr, /* wglDeleteDCNV */ + epoxy_wglDescribeLayerPlane_dispatch_table_rewrite_ptr, /* wglDescribeLayerPlane */ + epoxy_wglDestroyDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglDestroyDisplayColorTableEXT */ + epoxy_wglDestroyImageBufferI3D_dispatch_table_rewrite_ptr, /* wglDestroyImageBufferI3D */ + epoxy_wglDestroyPbufferARB_dispatch_table_rewrite_ptr, /* wglDestroyPbufferARB */ + epoxy_wglDestroyPbufferEXT_dispatch_table_rewrite_ptr, /* wglDestroyPbufferEXT */ + epoxy_wglDisableFrameLockI3D_dispatch_table_rewrite_ptr, /* wglDisableFrameLockI3D */ + epoxy_wglDisableGenlockI3D_dispatch_table_rewrite_ptr, /* wglDisableGenlockI3D */ + epoxy_wglEnableFrameLockI3D_dispatch_table_rewrite_ptr, /* wglEnableFrameLockI3D */ + epoxy_wglEnableGenlockI3D_dispatch_table_rewrite_ptr, /* wglEnableGenlockI3D */ + epoxy_wglEndFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglEndFrameTrackingI3D */ + epoxy_wglEnumGpuDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumGpuDevicesNV */ + epoxy_wglEnumGpusFromAffinityDCNV_dispatch_table_rewrite_ptr, /* wglEnumGpusFromAffinityDCNV */ + epoxy_wglEnumGpusNV_dispatch_table_rewrite_ptr, /* wglEnumGpusNV */ + epoxy_wglEnumerateVideoCaptureDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumerateVideoCaptureDevicesNV */ + epoxy_wglEnumerateVideoDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumerateVideoDevicesNV */ + epoxy_wglFreeMemoryNV_dispatch_table_rewrite_ptr, /* wglFreeMemoryNV */ + epoxy_wglGenlockSampleRateI3D_dispatch_table_rewrite_ptr, /* wglGenlockSampleRateI3D */ + epoxy_wglGenlockSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceDelayI3D */ + epoxy_wglGenlockSourceEdgeI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceEdgeI3D */ + epoxy_wglGenlockSourceI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceI3D */ + epoxy_wglGetContextGPUIDAMD_dispatch_table_rewrite_ptr, /* wglGetContextGPUIDAMD */ + epoxy_wglGetCurrentAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglGetCurrentAssociatedContextAMD */ + epoxy_wglGetCurrentContext_dispatch_table_rewrite_ptr, /* wglGetCurrentContext */ + epoxy_wglGetCurrentDC_dispatch_table_rewrite_ptr, /* wglGetCurrentDC */ + epoxy_wglGetCurrentReadDCARB_dispatch_table_rewrite_ptr, /* wglGetCurrentReadDCARB */ + epoxy_wglGetCurrentReadDCEXT_dispatch_table_rewrite_ptr, /* wglGetCurrentReadDCEXT */ + epoxy_wglGetDefaultProcAddress_dispatch_table_rewrite_ptr, /* wglGetDefaultProcAddress */ + epoxy_wglGetDigitalVideoParametersI3D_dispatch_table_rewrite_ptr, /* wglGetDigitalVideoParametersI3D */ + epoxy_wglGetExtensionsStringARB_dispatch_table_rewrite_ptr, /* wglGetExtensionsStringARB */ + epoxy_wglGetExtensionsStringEXT_dispatch_table_rewrite_ptr, /* wglGetExtensionsStringEXT */ + epoxy_wglGetFrameUsageI3D_dispatch_table_rewrite_ptr, /* wglGetFrameUsageI3D */ + epoxy_wglGetGPUIDsAMD_dispatch_table_rewrite_ptr, /* wglGetGPUIDsAMD */ + epoxy_wglGetGPUInfoAMD_dispatch_table_rewrite_ptr, /* wglGetGPUInfoAMD */ + epoxy_wglGetGammaTableI3D_dispatch_table_rewrite_ptr, /* wglGetGammaTableI3D */ + epoxy_wglGetGammaTableParametersI3D_dispatch_table_rewrite_ptr, /* wglGetGammaTableParametersI3D */ + epoxy_wglGetGenlockSampleRateI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSampleRateI3D */ + epoxy_wglGetGenlockSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceDelayI3D */ + epoxy_wglGetGenlockSourceEdgeI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceEdgeI3D */ + epoxy_wglGetGenlockSourceI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceI3D */ + epoxy_wglGetLayerPaletteEntries_dispatch_table_rewrite_ptr, /* wglGetLayerPaletteEntries */ + epoxy_wglGetMscRateOML_dispatch_table_rewrite_ptr, /* wglGetMscRateOML */ + epoxy_wglGetPbufferDCARB_dispatch_table_rewrite_ptr, /* wglGetPbufferDCARB */ + epoxy_wglGetPbufferDCEXT_dispatch_table_rewrite_ptr, /* wglGetPbufferDCEXT */ + epoxy_wglGetPixelFormatAttribfvARB_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribfvARB */ + epoxy_wglGetPixelFormatAttribfvEXT_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribfvEXT */ + epoxy_wglGetPixelFormatAttribivARB_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribivARB */ + epoxy_wglGetPixelFormatAttribivEXT_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribivEXT */ + epoxy_wglGetProcAddress_dispatch_table_rewrite_ptr, /* wglGetProcAddress */ + epoxy_wglGetSwapIntervalEXT_dispatch_table_rewrite_ptr, /* wglGetSwapIntervalEXT */ + epoxy_wglGetSyncValuesOML_dispatch_table_rewrite_ptr, /* wglGetSyncValuesOML */ + epoxy_wglGetVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglGetVideoDeviceNV */ + epoxy_wglGetVideoInfoNV_dispatch_table_rewrite_ptr, /* wglGetVideoInfoNV */ + epoxy_wglIsEnabledFrameLockI3D_dispatch_table_rewrite_ptr, /* wglIsEnabledFrameLockI3D */ + epoxy_wglIsEnabledGenlockI3D_dispatch_table_rewrite_ptr, /* wglIsEnabledGenlockI3D */ + epoxy_wglJoinSwapGroupNV_dispatch_table_rewrite_ptr, /* wglJoinSwapGroupNV */ + epoxy_wglLoadDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglLoadDisplayColorTableEXT */ + epoxy_wglLockVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglLockVideoCaptureDeviceNV */ + epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeAssociatedContextCurrentAMD_unwrapped */ + epoxy_wglMakeContextCurrentARB_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeContextCurrentARB_unwrapped */ + epoxy_wglMakeContextCurrentEXT_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeContextCurrentEXT_unwrapped */ + epoxy_wglMakeCurrent_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeCurrent_unwrapped */ + epoxy_wglQueryCurrentContextNV_dispatch_table_rewrite_ptr, /* wglQueryCurrentContextNV */ + epoxy_wglQueryFrameCountNV_dispatch_table_rewrite_ptr, /* wglQueryFrameCountNV */ + epoxy_wglQueryFrameLockMasterI3D_dispatch_table_rewrite_ptr, /* wglQueryFrameLockMasterI3D */ + epoxy_wglQueryFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglQueryFrameTrackingI3D */ + epoxy_wglQueryGenlockMaxSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglQueryGenlockMaxSourceDelayI3D */ + epoxy_wglQueryMaxSwapGroupsNV_dispatch_table_rewrite_ptr, /* wglQueryMaxSwapGroupsNV */ + epoxy_wglQueryPbufferARB_dispatch_table_rewrite_ptr, /* wglQueryPbufferARB */ + epoxy_wglQueryPbufferEXT_dispatch_table_rewrite_ptr, /* wglQueryPbufferEXT */ + epoxy_wglQuerySwapGroupNV_dispatch_table_rewrite_ptr, /* wglQuerySwapGroupNV */ + epoxy_wglQueryVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglQueryVideoCaptureDeviceNV */ + epoxy_wglRealizeLayerPalette_dispatch_table_rewrite_ptr, /* wglRealizeLayerPalette */ + epoxy_wglReleaseImageBufferEventsI3D_dispatch_table_rewrite_ptr, /* wglReleaseImageBufferEventsI3D */ + epoxy_wglReleasePbufferDCARB_dispatch_table_rewrite_ptr, /* wglReleasePbufferDCARB */ + epoxy_wglReleasePbufferDCEXT_dispatch_table_rewrite_ptr, /* wglReleasePbufferDCEXT */ + epoxy_wglReleaseTexImageARB_dispatch_table_rewrite_ptr, /* wglReleaseTexImageARB */ + epoxy_wglReleaseVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoCaptureDeviceNV */ + epoxy_wglReleaseVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoDeviceNV */ + epoxy_wglReleaseVideoImageNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoImageNV */ + epoxy_wglResetFrameCountNV_dispatch_table_rewrite_ptr, /* wglResetFrameCountNV */ + epoxy_wglRestoreBufferRegionARB_dispatch_table_rewrite_ptr, /* wglRestoreBufferRegionARB */ + epoxy_wglSaveBufferRegionARB_dispatch_table_rewrite_ptr, /* wglSaveBufferRegionARB */ + epoxy_wglSendPbufferToVideoNV_dispatch_table_rewrite_ptr, /* wglSendPbufferToVideoNV */ + epoxy_wglSetDigitalVideoParametersI3D_dispatch_table_rewrite_ptr, /* wglSetDigitalVideoParametersI3D */ + epoxy_wglSetGammaTableI3D_dispatch_table_rewrite_ptr, /* wglSetGammaTableI3D */ + epoxy_wglSetGammaTableParametersI3D_dispatch_table_rewrite_ptr, /* wglSetGammaTableParametersI3D */ + epoxy_wglSetLayerPaletteEntries_dispatch_table_rewrite_ptr, /* wglSetLayerPaletteEntries */ + epoxy_wglSetPbufferAttribARB_dispatch_table_rewrite_ptr, /* wglSetPbufferAttribARB */ + epoxy_wglSetStereoEmitterState3DL_dispatch_table_rewrite_ptr, /* wglSetStereoEmitterState3DL */ + epoxy_wglShareLists_dispatch_table_rewrite_ptr, /* wglShareLists */ + epoxy_wglSwapBuffersMscOML_dispatch_table_rewrite_ptr, /* wglSwapBuffersMscOML */ + epoxy_wglSwapIntervalEXT_dispatch_table_rewrite_ptr, /* wglSwapIntervalEXT */ + epoxy_wglSwapLayerBuffers_dispatch_table_rewrite_ptr, /* wglSwapLayerBuffers */ + epoxy_wglSwapLayerBuffersMscOML_dispatch_table_rewrite_ptr, /* wglSwapLayerBuffersMscOML */ + epoxy_wglUseFontBitmapsA_dispatch_table_rewrite_ptr, /* wglUseFontBitmapsA */ + epoxy_wglUseFontBitmapsW_dispatch_table_rewrite_ptr, /* wglUseFontBitmapsW */ + epoxy_wglUseFontOutlines_dispatch_table_rewrite_ptr, /* wglUseFontOutlines */ + epoxy_wglUseFontOutlinesA_dispatch_table_rewrite_ptr, /* wglUseFontOutlinesA */ + epoxy_wglUseFontOutlinesW_dispatch_table_rewrite_ptr, /* wglUseFontOutlinesW */ + epoxy_wglWaitForMscOML_dispatch_table_rewrite_ptr, /* wglWaitForMscOML */ + epoxy_wglWaitForSbcOML_dispatch_table_rewrite_ptr, /* wglWaitForSbcOML */ +}; + +uint32_t wgl_tls_index; +uint32_t wgl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(wgl_tls_index); +} + +void +wgl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +wgl_switch_to_dispatch_table(void) +{ + epoxy_wglAllocateMemoryNV = epoxy_wglAllocateMemoryNV_dispatch_table_thunk; + epoxy_wglAssociateImageBufferEventsI3D = epoxy_wglAssociateImageBufferEventsI3D_dispatch_table_thunk; + epoxy_wglBeginFrameTrackingI3D = epoxy_wglBeginFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglBindDisplayColorTableEXT = epoxy_wglBindDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglBindSwapBarrierNV = epoxy_wglBindSwapBarrierNV_dispatch_table_thunk; + epoxy_wglBindTexImageARB = epoxy_wglBindTexImageARB_dispatch_table_thunk; + epoxy_wglBindVideoCaptureDeviceNV = epoxy_wglBindVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglBindVideoDeviceNV = epoxy_wglBindVideoDeviceNV_dispatch_table_thunk; + epoxy_wglBindVideoImageNV = epoxy_wglBindVideoImageNV_dispatch_table_thunk; + epoxy_wglBlitContextFramebufferAMD = epoxy_wglBlitContextFramebufferAMD_dispatch_table_thunk; + epoxy_wglChoosePixelFormatARB = epoxy_wglChoosePixelFormatARB_dispatch_table_thunk; + epoxy_wglChoosePixelFormatEXT = epoxy_wglChoosePixelFormatEXT_dispatch_table_thunk; + epoxy_wglCopyContext = epoxy_wglCopyContext_dispatch_table_thunk; + epoxy_wglCopyImageSubDataNV = epoxy_wglCopyImageSubDataNV_dispatch_table_thunk; + epoxy_wglCreateAffinityDCNV = epoxy_wglCreateAffinityDCNV_dispatch_table_thunk; + epoxy_wglCreateAssociatedContextAMD = epoxy_wglCreateAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglCreateAssociatedContextAttribsAMD = epoxy_wglCreateAssociatedContextAttribsAMD_dispatch_table_thunk; + epoxy_wglCreateBufferRegionARB = epoxy_wglCreateBufferRegionARB_dispatch_table_thunk; + epoxy_wglCreateContext = epoxy_wglCreateContext_dispatch_table_thunk; + epoxy_wglCreateContextAttribsARB = epoxy_wglCreateContextAttribsARB_dispatch_table_thunk; + epoxy_wglCreateDisplayColorTableEXT = epoxy_wglCreateDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglCreateImageBufferI3D = epoxy_wglCreateImageBufferI3D_dispatch_table_thunk; + epoxy_wglCreateLayerContext = epoxy_wglCreateLayerContext_dispatch_table_thunk; + epoxy_wglCreatePbufferARB = epoxy_wglCreatePbufferARB_dispatch_table_thunk; + epoxy_wglCreatePbufferEXT = epoxy_wglCreatePbufferEXT_dispatch_table_thunk; + epoxy_wglDXCloseDeviceNV = epoxy_wglDXCloseDeviceNV_dispatch_table_thunk; + epoxy_wglDXLockObjectsNV = epoxy_wglDXLockObjectsNV_dispatch_table_thunk; + epoxy_wglDXObjectAccessNV = epoxy_wglDXObjectAccessNV_dispatch_table_thunk; + epoxy_wglDXOpenDeviceNV = epoxy_wglDXOpenDeviceNV_dispatch_table_thunk; + epoxy_wglDXRegisterObjectNV = epoxy_wglDXRegisterObjectNV_dispatch_table_thunk; + epoxy_wglDXSetResourceShareHandleNV = epoxy_wglDXSetResourceShareHandleNV_dispatch_table_thunk; + epoxy_wglDXUnlockObjectsNV = epoxy_wglDXUnlockObjectsNV_dispatch_table_thunk; + epoxy_wglDXUnregisterObjectNV = epoxy_wglDXUnregisterObjectNV_dispatch_table_thunk; + epoxy_wglDelayBeforeSwapNV = epoxy_wglDelayBeforeSwapNV_dispatch_table_thunk; + epoxy_wglDeleteAssociatedContextAMD = epoxy_wglDeleteAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglDeleteBufferRegionARB = epoxy_wglDeleteBufferRegionARB_dispatch_table_thunk; + epoxy_wglDeleteContext = epoxy_wglDeleteContext_dispatch_table_thunk; + epoxy_wglDeleteDCNV = epoxy_wglDeleteDCNV_dispatch_table_thunk; + epoxy_wglDescribeLayerPlane = epoxy_wglDescribeLayerPlane_dispatch_table_thunk; + epoxy_wglDestroyDisplayColorTableEXT = epoxy_wglDestroyDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglDestroyImageBufferI3D = epoxy_wglDestroyImageBufferI3D_dispatch_table_thunk; + epoxy_wglDestroyPbufferARB = epoxy_wglDestroyPbufferARB_dispatch_table_thunk; + epoxy_wglDestroyPbufferEXT = epoxy_wglDestroyPbufferEXT_dispatch_table_thunk; + epoxy_wglDisableFrameLockI3D = epoxy_wglDisableFrameLockI3D_dispatch_table_thunk; + epoxy_wglDisableGenlockI3D = epoxy_wglDisableGenlockI3D_dispatch_table_thunk; + epoxy_wglEnableFrameLockI3D = epoxy_wglEnableFrameLockI3D_dispatch_table_thunk; + epoxy_wglEnableGenlockI3D = epoxy_wglEnableGenlockI3D_dispatch_table_thunk; + epoxy_wglEndFrameTrackingI3D = epoxy_wglEndFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglEnumGpuDevicesNV = epoxy_wglEnumGpuDevicesNV_dispatch_table_thunk; + epoxy_wglEnumGpusFromAffinityDCNV = epoxy_wglEnumGpusFromAffinityDCNV_dispatch_table_thunk; + epoxy_wglEnumGpusNV = epoxy_wglEnumGpusNV_dispatch_table_thunk; + epoxy_wglEnumerateVideoCaptureDevicesNV = epoxy_wglEnumerateVideoCaptureDevicesNV_dispatch_table_thunk; + epoxy_wglEnumerateVideoDevicesNV = epoxy_wglEnumerateVideoDevicesNV_dispatch_table_thunk; + epoxy_wglFreeMemoryNV = epoxy_wglFreeMemoryNV_dispatch_table_thunk; + epoxy_wglGenlockSampleRateI3D = epoxy_wglGenlockSampleRateI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceDelayI3D = epoxy_wglGenlockSourceDelayI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceEdgeI3D = epoxy_wglGenlockSourceEdgeI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceI3D = epoxy_wglGenlockSourceI3D_dispatch_table_thunk; + epoxy_wglGetContextGPUIDAMD = epoxy_wglGetContextGPUIDAMD_dispatch_table_thunk; + epoxy_wglGetCurrentAssociatedContextAMD = epoxy_wglGetCurrentAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglGetCurrentContext = epoxy_wglGetCurrentContext_dispatch_table_thunk; + epoxy_wglGetCurrentDC = epoxy_wglGetCurrentDC_dispatch_table_thunk; + epoxy_wglGetCurrentReadDCARB = epoxy_wglGetCurrentReadDCARB_dispatch_table_thunk; + epoxy_wglGetCurrentReadDCEXT = epoxy_wglGetCurrentReadDCEXT_dispatch_table_thunk; + epoxy_wglGetDefaultProcAddress = epoxy_wglGetDefaultProcAddress_dispatch_table_thunk; + epoxy_wglGetDigitalVideoParametersI3D = epoxy_wglGetDigitalVideoParametersI3D_dispatch_table_thunk; + epoxy_wglGetExtensionsStringARB = epoxy_wglGetExtensionsStringARB_dispatch_table_thunk; + epoxy_wglGetExtensionsStringEXT = epoxy_wglGetExtensionsStringEXT_dispatch_table_thunk; + epoxy_wglGetFrameUsageI3D = epoxy_wglGetFrameUsageI3D_dispatch_table_thunk; + epoxy_wglGetGPUIDsAMD = epoxy_wglGetGPUIDsAMD_dispatch_table_thunk; + epoxy_wglGetGPUInfoAMD = epoxy_wglGetGPUInfoAMD_dispatch_table_thunk; + epoxy_wglGetGammaTableI3D = epoxy_wglGetGammaTableI3D_dispatch_table_thunk; + epoxy_wglGetGammaTableParametersI3D = epoxy_wglGetGammaTableParametersI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSampleRateI3D = epoxy_wglGetGenlockSampleRateI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceDelayI3D = epoxy_wglGetGenlockSourceDelayI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceEdgeI3D = epoxy_wglGetGenlockSourceEdgeI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceI3D = epoxy_wglGetGenlockSourceI3D_dispatch_table_thunk; + epoxy_wglGetLayerPaletteEntries = epoxy_wglGetLayerPaletteEntries_dispatch_table_thunk; + epoxy_wglGetMscRateOML = epoxy_wglGetMscRateOML_dispatch_table_thunk; + epoxy_wglGetPbufferDCARB = epoxy_wglGetPbufferDCARB_dispatch_table_thunk; + epoxy_wglGetPbufferDCEXT = epoxy_wglGetPbufferDCEXT_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribfvARB = epoxy_wglGetPixelFormatAttribfvARB_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribfvEXT = epoxy_wglGetPixelFormatAttribfvEXT_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribivARB = epoxy_wglGetPixelFormatAttribivARB_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribivEXT = epoxy_wglGetPixelFormatAttribivEXT_dispatch_table_thunk; + epoxy_wglGetProcAddress = epoxy_wglGetProcAddress_dispatch_table_thunk; + epoxy_wglGetSwapIntervalEXT = epoxy_wglGetSwapIntervalEXT_dispatch_table_thunk; + epoxy_wglGetSyncValuesOML = epoxy_wglGetSyncValuesOML_dispatch_table_thunk; + epoxy_wglGetVideoDeviceNV = epoxy_wglGetVideoDeviceNV_dispatch_table_thunk; + epoxy_wglGetVideoInfoNV = epoxy_wglGetVideoInfoNV_dispatch_table_thunk; + epoxy_wglIsEnabledFrameLockI3D = epoxy_wglIsEnabledFrameLockI3D_dispatch_table_thunk; + epoxy_wglIsEnabledGenlockI3D = epoxy_wglIsEnabledGenlockI3D_dispatch_table_thunk; + epoxy_wglJoinSwapGroupNV = epoxy_wglJoinSwapGroupNV_dispatch_table_thunk; + epoxy_wglLoadDisplayColorTableEXT = epoxy_wglLoadDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglLockVideoCaptureDeviceNV = epoxy_wglLockVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_dispatch_table_thunk; + epoxy_wglMakeContextCurrentARB_unwrapped = epoxy_wglMakeContextCurrentARB_unwrapped_dispatch_table_thunk; + epoxy_wglMakeContextCurrentEXT_unwrapped = epoxy_wglMakeContextCurrentEXT_unwrapped_dispatch_table_thunk; + epoxy_wglMakeCurrent_unwrapped = epoxy_wglMakeCurrent_unwrapped_dispatch_table_thunk; + epoxy_wglQueryCurrentContextNV = epoxy_wglQueryCurrentContextNV_dispatch_table_thunk; + epoxy_wglQueryFrameCountNV = epoxy_wglQueryFrameCountNV_dispatch_table_thunk; + epoxy_wglQueryFrameLockMasterI3D = epoxy_wglQueryFrameLockMasterI3D_dispatch_table_thunk; + epoxy_wglQueryFrameTrackingI3D = epoxy_wglQueryFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglQueryGenlockMaxSourceDelayI3D = epoxy_wglQueryGenlockMaxSourceDelayI3D_dispatch_table_thunk; + epoxy_wglQueryMaxSwapGroupsNV = epoxy_wglQueryMaxSwapGroupsNV_dispatch_table_thunk; + epoxy_wglQueryPbufferARB = epoxy_wglQueryPbufferARB_dispatch_table_thunk; + epoxy_wglQueryPbufferEXT = epoxy_wglQueryPbufferEXT_dispatch_table_thunk; + epoxy_wglQuerySwapGroupNV = epoxy_wglQuerySwapGroupNV_dispatch_table_thunk; + epoxy_wglQueryVideoCaptureDeviceNV = epoxy_wglQueryVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglRealizeLayerPalette = epoxy_wglRealizeLayerPalette_dispatch_table_thunk; + epoxy_wglReleaseImageBufferEventsI3D = epoxy_wglReleaseImageBufferEventsI3D_dispatch_table_thunk; + epoxy_wglReleasePbufferDCARB = epoxy_wglReleasePbufferDCARB_dispatch_table_thunk; + epoxy_wglReleasePbufferDCEXT = epoxy_wglReleasePbufferDCEXT_dispatch_table_thunk; + epoxy_wglReleaseTexImageARB = epoxy_wglReleaseTexImageARB_dispatch_table_thunk; + epoxy_wglReleaseVideoCaptureDeviceNV = epoxy_wglReleaseVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglReleaseVideoDeviceNV = epoxy_wglReleaseVideoDeviceNV_dispatch_table_thunk; + epoxy_wglReleaseVideoImageNV = epoxy_wglReleaseVideoImageNV_dispatch_table_thunk; + epoxy_wglResetFrameCountNV = epoxy_wglResetFrameCountNV_dispatch_table_thunk; + epoxy_wglRestoreBufferRegionARB = epoxy_wglRestoreBufferRegionARB_dispatch_table_thunk; + epoxy_wglSaveBufferRegionARB = epoxy_wglSaveBufferRegionARB_dispatch_table_thunk; + epoxy_wglSendPbufferToVideoNV = epoxy_wglSendPbufferToVideoNV_dispatch_table_thunk; + epoxy_wglSetDigitalVideoParametersI3D = epoxy_wglSetDigitalVideoParametersI3D_dispatch_table_thunk; + epoxy_wglSetGammaTableI3D = epoxy_wglSetGammaTableI3D_dispatch_table_thunk; + epoxy_wglSetGammaTableParametersI3D = epoxy_wglSetGammaTableParametersI3D_dispatch_table_thunk; + epoxy_wglSetLayerPaletteEntries = epoxy_wglSetLayerPaletteEntries_dispatch_table_thunk; + epoxy_wglSetPbufferAttribARB = epoxy_wglSetPbufferAttribARB_dispatch_table_thunk; + epoxy_wglSetStereoEmitterState3DL = epoxy_wglSetStereoEmitterState3DL_dispatch_table_thunk; + epoxy_wglShareLists = epoxy_wglShareLists_dispatch_table_thunk; + epoxy_wglSwapBuffersMscOML = epoxy_wglSwapBuffersMscOML_dispatch_table_thunk; + epoxy_wglSwapIntervalEXT = epoxy_wglSwapIntervalEXT_dispatch_table_thunk; + epoxy_wglSwapLayerBuffers = epoxy_wglSwapLayerBuffers_dispatch_table_thunk; + epoxy_wglSwapLayerBuffersMscOML = epoxy_wglSwapLayerBuffersMscOML_dispatch_table_thunk; + epoxy_wglUseFontBitmapsA = epoxy_wglUseFontBitmapsA_dispatch_table_thunk; + epoxy_wglUseFontBitmapsW = epoxy_wglUseFontBitmapsW_dispatch_table_thunk; + epoxy_wglUseFontOutlines = epoxy_wglUseFontOutlines_dispatch_table_thunk; + epoxy_wglUseFontOutlinesA = epoxy_wglUseFontOutlinesA_dispatch_table_thunk; + epoxy_wglUseFontOutlinesW = epoxy_wglUseFontOutlinesW_dispatch_table_thunk; + epoxy_wglWaitForMscOML = epoxy_wglWaitForMscOML_dispatch_table_thunk; + epoxy_wglWaitForSbcOML = epoxy_wglWaitForSbcOML_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNWGLALLOCATEMEMORYNVPROC epoxy_wglAllocateMemoryNV = epoxy_wglAllocateMemoryNV_global_rewrite_ptr; + +PUBLIC PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC epoxy_wglAssociateImageBufferEventsI3D = epoxy_wglAssociateImageBufferEventsI3D_global_rewrite_ptr; + +PUBLIC PFNWGLBEGINFRAMETRACKINGI3DPROC epoxy_wglBeginFrameTrackingI3D = epoxy_wglBeginFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLBINDDISPLAYCOLORTABLEEXTPROC epoxy_wglBindDisplayColorTableEXT = epoxy_wglBindDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLBINDSWAPBARRIERNVPROC epoxy_wglBindSwapBarrierNV = epoxy_wglBindSwapBarrierNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDTEXIMAGEARBPROC epoxy_wglBindTexImageARB = epoxy_wglBindTexImageARB_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEOCAPTUREDEVICENVPROC epoxy_wglBindVideoCaptureDeviceNV = epoxy_wglBindVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEODEVICENVPROC epoxy_wglBindVideoDeviceNV = epoxy_wglBindVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEOIMAGENVPROC epoxy_wglBindVideoImageNV = epoxy_wglBindVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_wglBlitContextFramebufferAMD = epoxy_wglBlitContextFramebufferAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCHOOSEPIXELFORMATARBPROC epoxy_wglChoosePixelFormatARB = epoxy_wglChoosePixelFormatARB_global_rewrite_ptr; + +PUBLIC PFNWGLCHOOSEPIXELFORMATEXTPROC epoxy_wglChoosePixelFormatEXT = epoxy_wglChoosePixelFormatEXT_global_rewrite_ptr; + +PUBLIC PFNWGLCOPYCONTEXTPROC epoxy_wglCopyContext = epoxy_wglCopyContext_global_rewrite_ptr; + +PUBLIC PFNWGLCOPYIMAGESUBDATANVPROC epoxy_wglCopyImageSubDataNV = epoxy_wglCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEAFFINITYDCNVPROC epoxy_wglCreateAffinityDCNV = epoxy_wglCreateAffinityDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC epoxy_wglCreateAssociatedContextAMD = epoxy_wglCreateAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_wglCreateAssociatedContextAttribsAMD = epoxy_wglCreateAssociatedContextAttribsAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEBUFFERREGIONARBPROC epoxy_wglCreateBufferRegionARB = epoxy_wglCreateBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATECONTEXTPROC epoxy_wglCreateContext = epoxy_wglCreateContext_global_rewrite_ptr; + +PUBLIC PFNWGLCREATECONTEXTATTRIBSARBPROC epoxy_wglCreateContextAttribsARB = epoxy_wglCreateContextAttribsARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC epoxy_wglCreateDisplayColorTableEXT = epoxy_wglCreateDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEIMAGEBUFFERI3DPROC epoxy_wglCreateImageBufferI3D = epoxy_wglCreateImageBufferI3D_global_rewrite_ptr; + +PUBLIC PFNWGLCREATELAYERCONTEXTPROC epoxy_wglCreateLayerContext = epoxy_wglCreateLayerContext_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEPBUFFERARBPROC epoxy_wglCreatePbufferARB = epoxy_wglCreatePbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEPBUFFEREXTPROC epoxy_wglCreatePbufferEXT = epoxy_wglCreatePbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDXCLOSEDEVICENVPROC epoxy_wglDXCloseDeviceNV = epoxy_wglDXCloseDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXLOCKOBJECTSNVPROC epoxy_wglDXLockObjectsNV = epoxy_wglDXLockObjectsNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXOBJECTACCESSNVPROC epoxy_wglDXObjectAccessNV = epoxy_wglDXObjectAccessNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXOPENDEVICENVPROC epoxy_wglDXOpenDeviceNV = epoxy_wglDXOpenDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXREGISTEROBJECTNVPROC epoxy_wglDXRegisterObjectNV = epoxy_wglDXRegisterObjectNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXSETRESOURCESHAREHANDLENVPROC epoxy_wglDXSetResourceShareHandleNV = epoxy_wglDXSetResourceShareHandleNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXUNLOCKOBJECTSNVPROC epoxy_wglDXUnlockObjectsNV = epoxy_wglDXUnlockObjectsNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXUNREGISTEROBJECTNVPROC epoxy_wglDXUnregisterObjectNV = epoxy_wglDXUnregisterObjectNV_global_rewrite_ptr; + +PUBLIC PFNWGLDELAYBEFORESWAPNVPROC epoxy_wglDelayBeforeSwapNV = epoxy_wglDelayBeforeSwapNV_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC epoxy_wglDeleteAssociatedContextAMD = epoxy_wglDeleteAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEBUFFERREGIONARBPROC epoxy_wglDeleteBufferRegionARB = epoxy_wglDeleteBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLDELETECONTEXTPROC epoxy_wglDeleteContext = epoxy_wglDeleteContext_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEDCNVPROC epoxy_wglDeleteDCNV = epoxy_wglDeleteDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLDESCRIBELAYERPLANEPROC epoxy_wglDescribeLayerPlane = epoxy_wglDescribeLayerPlane_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC epoxy_wglDestroyDisplayColorTableEXT = epoxy_wglDestroyDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYIMAGEBUFFERI3DPROC epoxy_wglDestroyImageBufferI3D = epoxy_wglDestroyImageBufferI3D_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYPBUFFERARBPROC epoxy_wglDestroyPbufferARB = epoxy_wglDestroyPbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYPBUFFEREXTPROC epoxy_wglDestroyPbufferEXT = epoxy_wglDestroyPbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDISABLEFRAMELOCKI3DPROC epoxy_wglDisableFrameLockI3D = epoxy_wglDisableFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLDISABLEGENLOCKI3DPROC epoxy_wglDisableGenlockI3D = epoxy_wglDisableGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENABLEFRAMELOCKI3DPROC epoxy_wglEnableFrameLockI3D = epoxy_wglEnableFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENABLEGENLOCKI3DPROC epoxy_wglEnableGenlockI3D = epoxy_wglEnableGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENDFRAMETRACKINGI3DPROC epoxy_wglEndFrameTrackingI3D = epoxy_wglEndFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUDEVICESNVPROC epoxy_wglEnumGpuDevicesNV = epoxy_wglEnumGpuDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUSFROMAFFINITYDCNVPROC epoxy_wglEnumGpusFromAffinityDCNV = epoxy_wglEnumGpusFromAffinityDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUSNVPROC epoxy_wglEnumGpusNV = epoxy_wglEnumGpusNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_wglEnumerateVideoCaptureDevicesNV = epoxy_wglEnumerateVideoCaptureDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMERATEVIDEODEVICESNVPROC epoxy_wglEnumerateVideoDevicesNV = epoxy_wglEnumerateVideoDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLFREEMEMORYNVPROC epoxy_wglFreeMemoryNV = epoxy_wglFreeMemoryNV_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSAMPLERATEI3DPROC epoxy_wglGenlockSampleRateI3D = epoxy_wglGenlockSampleRateI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEDELAYI3DPROC epoxy_wglGenlockSourceDelayI3D = epoxy_wglGenlockSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEEDGEI3DPROC epoxy_wglGenlockSourceEdgeI3D = epoxy_wglGenlockSourceEdgeI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEI3DPROC epoxy_wglGenlockSourceI3D = epoxy_wglGenlockSourceI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETCONTEXTGPUIDAMDPROC epoxy_wglGetContextGPUIDAMD = epoxy_wglGetContextGPUIDAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_wglGetCurrentAssociatedContextAMD = epoxy_wglGetCurrentAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTCONTEXTPROC epoxy_wglGetCurrentContext = epoxy_wglGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTDCPROC epoxy_wglGetCurrentDC = epoxy_wglGetCurrentDC_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTREADDCARBPROC epoxy_wglGetCurrentReadDCARB = epoxy_wglGetCurrentReadDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTREADDCEXTPROC epoxy_wglGetCurrentReadDCEXT = epoxy_wglGetCurrentReadDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETDEFAULTPROCADDRESSPROC epoxy_wglGetDefaultProcAddress = epoxy_wglGetDefaultProcAddress_global_rewrite_ptr; + +PUBLIC PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglGetDigitalVideoParametersI3D = epoxy_wglGetDigitalVideoParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETEXTENSIONSSTRINGARBPROC epoxy_wglGetExtensionsStringARB = epoxy_wglGetExtensionsStringARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETEXTENSIONSSTRINGEXTPROC epoxy_wglGetExtensionsStringEXT = epoxy_wglGetExtensionsStringEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETFRAMEUSAGEI3DPROC epoxy_wglGetFrameUsageI3D = epoxy_wglGetFrameUsageI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGPUIDSAMDPROC epoxy_wglGetGPUIDsAMD = epoxy_wglGetGPUIDsAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETGPUINFOAMDPROC epoxy_wglGetGPUInfoAMD = epoxy_wglGetGPUInfoAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETGAMMATABLEI3DPROC epoxy_wglGetGammaTableI3D = epoxy_wglGetGammaTableI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGAMMATABLEPARAMETERSI3DPROC epoxy_wglGetGammaTableParametersI3D = epoxy_wglGetGammaTableParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSAMPLERATEI3DPROC epoxy_wglGetGenlockSampleRateI3D = epoxy_wglGetGenlockSampleRateI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEDELAYI3DPROC epoxy_wglGetGenlockSourceDelayI3D = epoxy_wglGetGenlockSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEEDGEI3DPROC epoxy_wglGetGenlockSourceEdgeI3D = epoxy_wglGetGenlockSourceEdgeI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEI3DPROC epoxy_wglGetGenlockSourceI3D = epoxy_wglGetGenlockSourceI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETLAYERPALETTEENTRIESPROC epoxy_wglGetLayerPaletteEntries = epoxy_wglGetLayerPaletteEntries_global_rewrite_ptr; + +PUBLIC PFNWGLGETMSCRATEOMLPROC epoxy_wglGetMscRateOML = epoxy_wglGetMscRateOML_global_rewrite_ptr; + +PUBLIC PFNWGLGETPBUFFERDCARBPROC epoxy_wglGetPbufferDCARB = epoxy_wglGetPbufferDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPBUFFERDCEXTPROC epoxy_wglGetPbufferDCEXT = epoxy_wglGetPbufferDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBFVARBPROC epoxy_wglGetPixelFormatAttribfvARB = epoxy_wglGetPixelFormatAttribfvARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBFVEXTPROC epoxy_wglGetPixelFormatAttribfvEXT = epoxy_wglGetPixelFormatAttribfvEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBIVARBPROC epoxy_wglGetPixelFormatAttribivARB = epoxy_wglGetPixelFormatAttribivARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBIVEXTPROC epoxy_wglGetPixelFormatAttribivEXT = epoxy_wglGetPixelFormatAttribivEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPROCADDRESSPROC epoxy_wglGetProcAddress = epoxy_wglGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNWGLGETSWAPINTERVALEXTPROC epoxy_wglGetSwapIntervalEXT = epoxy_wglGetSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETSYNCVALUESOMLPROC epoxy_wglGetSyncValuesOML = epoxy_wglGetSyncValuesOML_global_rewrite_ptr; + +PUBLIC PFNWGLGETVIDEODEVICENVPROC epoxy_wglGetVideoDeviceNV = epoxy_wglGetVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLGETVIDEOINFONVPROC epoxy_wglGetVideoInfoNV = epoxy_wglGetVideoInfoNV_global_rewrite_ptr; + +PUBLIC PFNWGLISENABLEDFRAMELOCKI3DPROC epoxy_wglIsEnabledFrameLockI3D = epoxy_wglIsEnabledFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLISENABLEDGENLOCKI3DPROC epoxy_wglIsEnabledGenlockI3D = epoxy_wglIsEnabledGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLJOINSWAPGROUPNVPROC epoxy_wglJoinSwapGroupNV = epoxy_wglJoinSwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNWGLLOADDISPLAYCOLORTABLEEXTPROC epoxy_wglLoadDisplayColorTableEXT = epoxy_wglLoadDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC epoxy_wglLockVideoCaptureDeviceNV = epoxy_wglLockVideoCaptureDeviceNV_global_rewrite_ptr; + +PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB_unwrapped = epoxy_wglMakeContextCurrentARB_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT_unwrapped = epoxy_wglMakeContextCurrentEXT_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent_unwrapped = epoxy_wglMakeCurrent_unwrapped_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYCURRENTCONTEXTNVPROC epoxy_wglQueryCurrentContextNV = epoxy_wglQueryCurrentContextNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMECOUNTNVPROC epoxy_wglQueryFrameCountNV = epoxy_wglQueryFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMELOCKMASTERI3DPROC epoxy_wglQueryFrameLockMasterI3D = epoxy_wglQueryFrameLockMasterI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMETRACKINGI3DPROC epoxy_wglQueryFrameTrackingI3D = epoxy_wglQueryFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC epoxy_wglQueryGenlockMaxSourceDelayI3D = epoxy_wglQueryGenlockMaxSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYMAXSWAPGROUPSNVPROC epoxy_wglQueryMaxSwapGroupsNV = epoxy_wglQueryMaxSwapGroupsNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYPBUFFERARBPROC epoxy_wglQueryPbufferARB = epoxy_wglQueryPbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYPBUFFEREXTPROC epoxy_wglQueryPbufferEXT = epoxy_wglQueryPbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYSWAPGROUPNVPROC epoxy_wglQuerySwapGroupNV = epoxy_wglQuerySwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC epoxy_wglQueryVideoCaptureDeviceNV = epoxy_wglQueryVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLREALIZELAYERPALETTEPROC epoxy_wglRealizeLayerPalette = epoxy_wglRealizeLayerPalette_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC epoxy_wglReleaseImageBufferEventsI3D = epoxy_wglReleaseImageBufferEventsI3D_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEPBUFFERDCARBPROC epoxy_wglReleasePbufferDCARB = epoxy_wglReleasePbufferDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEPBUFFERDCEXTPROC epoxy_wglReleasePbufferDCEXT = epoxy_wglReleasePbufferDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASETEXIMAGEARBPROC epoxy_wglReleaseTexImageARB = epoxy_wglReleaseTexImageARB_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_wglReleaseVideoCaptureDeviceNV = epoxy_wglReleaseVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEODEVICENVPROC epoxy_wglReleaseVideoDeviceNV = epoxy_wglReleaseVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEOIMAGENVPROC epoxy_wglReleaseVideoImageNV = epoxy_wglReleaseVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNWGLRESETFRAMECOUNTNVPROC epoxy_wglResetFrameCountNV = epoxy_wglResetFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNWGLRESTOREBUFFERREGIONARBPROC epoxy_wglRestoreBufferRegionARB = epoxy_wglRestoreBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLSAVEBUFFERREGIONARBPROC epoxy_wglSaveBufferRegionARB = epoxy_wglSaveBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLSENDPBUFFERTOVIDEONVPROC epoxy_wglSendPbufferToVideoNV = epoxy_wglSendPbufferToVideoNV_global_rewrite_ptr; + +PUBLIC PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglSetDigitalVideoParametersI3D = epoxy_wglSetDigitalVideoParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETGAMMATABLEI3DPROC epoxy_wglSetGammaTableI3D = epoxy_wglSetGammaTableI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETGAMMATABLEPARAMETERSI3DPROC epoxy_wglSetGammaTableParametersI3D = epoxy_wglSetGammaTableParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETLAYERPALETTEENTRIESPROC epoxy_wglSetLayerPaletteEntries = epoxy_wglSetLayerPaletteEntries_global_rewrite_ptr; + +PUBLIC PFNWGLSETPBUFFERATTRIBARBPROC epoxy_wglSetPbufferAttribARB = epoxy_wglSetPbufferAttribARB_global_rewrite_ptr; + +PUBLIC PFNWGLSETSTEREOEMITTERSTATE3DLPROC epoxy_wglSetStereoEmitterState3DL = epoxy_wglSetStereoEmitterState3DL_global_rewrite_ptr; + +PUBLIC PFNWGLSHARELISTSPROC epoxy_wglShareLists = epoxy_wglShareLists_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPBUFFERSMSCOMLPROC epoxy_wglSwapBuffersMscOML = epoxy_wglSwapBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPINTERVALEXTPROC epoxy_wglSwapIntervalEXT = epoxy_wglSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPLAYERBUFFERSPROC epoxy_wglSwapLayerBuffers = epoxy_wglSwapLayerBuffers_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPLAYERBUFFERSMSCOMLPROC epoxy_wglSwapLayerBuffersMscOML = epoxy_wglSwapLayerBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTBITMAPSAPROC epoxy_wglUseFontBitmapsA = epoxy_wglUseFontBitmapsA_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTBITMAPSWPROC epoxy_wglUseFontBitmapsW = epoxy_wglUseFontBitmapsW_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESPROC epoxy_wglUseFontOutlines = epoxy_wglUseFontOutlines_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESAPROC epoxy_wglUseFontOutlinesA = epoxy_wglUseFontOutlinesA_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESWPROC epoxy_wglUseFontOutlinesW = epoxy_wglUseFontOutlinesW_global_rewrite_ptr; + +PUBLIC PFNWGLWAITFORMSCOMLPROC epoxy_wglWaitForMscOML = epoxy_wglWaitForMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLWAITFORSBCOMLPROC epoxy_wglWaitForSbcOML = epoxy_wglWaitForSbcOML_global_rewrite_ptr; + diff --git a/Engine/lib/glew/LICENSE.txt b/Engine/lib/glew/LICENSE.txt deleted file mode 100644 index f7078042e9..0000000000 --- a/Engine/lib/glew/LICENSE.txt +++ /dev/null @@ -1,73 +0,0 @@ -The OpenGL Extension Wrangler Library -Copyright (C) 2002-2007, Milan Ikits -Copyright (C) 2002-2007, Marcelo E. Magallon -Copyright (C) 2002, Lev Povalahev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* The name of the author may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. - - -Mesa 3-D graphics library -Version: 7.0 - -Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - -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 -BRIAN PAUL 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. - - -Copyright (c) 2007 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/Engine/lib/glew/Makefile b/Engine/lib/glew/Makefile deleted file mode 100644 index e6f08a72c2..0000000000 --- a/Engine/lib/glew/Makefile +++ /dev/null @@ -1,402 +0,0 @@ -#!gmake -## The OpenGL Extension Wrangler Library -## Copyright (C) 2002-2008, Milan Ikits -## Copyright (C) 2002-2008, Marcelo E. Magallon -## Copyright (C) 2002, Lev Povalahev -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are met: -## -## * Redistributions of source code must retain the above copyright notice, -## this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright notice, -## this list of conditions and the following disclaimer in the documentation -## and/or other materials provided with the distribution. -## * The name of the author may be used to endorse or promote products -## derived from this software without specific prior written permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -## THE POSSIBILITY OF SUCH DAMAGE. - -include config/version - -SHELL = /bin/sh -SYSTEM ?= $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;') -SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1) - -ifeq ($(SYSTEM.SUPPORTED), 1) -include config/Makefile.$(SYSTEM) -else -$(error "Platform '$(SYSTEM)' not supported") -endif - -GLEW_DEST ?= /usr -BINDIR ?= $(GLEW_DEST)/bin -LIBDIR ?= $(GLEW_DEST)/lib -INCDIR ?= $(GLEW_DEST)/include/GL - -DIST_NAME ?= glew-$(GLEW_VERSION) -DIST_SRC_ZIP ?= $(shell pwd)/$(DIST_NAME).zip -DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz -DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip - -DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) - -# To disable stripping of binaries either: -# - use STRIP= on gmake command-line -# - edit this makefile to set STRIP to the empty string -# -# To disable symlinks: -# - use LN= on gmake command-line - -AR ?= ar -INSTALL ?= install -STRIP ?= strip -RM ?= rm -f -LN ?= ln -sf - -ifeq ($(MAKECMDGOALS), debug) -OPT = -g -else -OPT = $(POPT) -endif -INCLUDE = -Iinclude -CFLAGS = $(OPT) $(WARN) $(INCLUDE) $(CFLAGS.EXTRA) - -all debug: glew.lib glew.lib.mx glew.bin - -# GLEW shared and static libraries - -LIB.LDFLAGS := $(LDFLAGS.EXTRA) $(LDFLAGS.GL) -LIB.LIBS := $(GL_LDFLAGS) - -LIB.SRCS := src/glew.c -LIB.SRCS.NAMES := $(notdir $(LIB.SRCS)) - -LIB.OBJS := $(addprefix tmp/$(SYSTEM)/default/static/,$(LIB.SRCS.NAMES)) -LIB.OBJS := $(LIB.OBJS:.c=.o) -LIB.SOBJS := $(addprefix tmp/$(SYSTEM)/default/shared/,$(LIB.SRCS.NAMES)) -LIB.SOBJS := $(LIB.SOBJS:.c=.o) - -LIB.OBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/static/,$(LIB.SRCS.NAMES)) -LIB.OBJS.MX := $(LIB.OBJS.MX:.c=.o) -LIB.SOBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/shared/,$(LIB.SRCS.NAMES)) -LIB.SOBJS.MX := $(LIB.SOBJS.MX:.c=.o) - -glew.lib: lib lib/$(LIB.SHARED) lib/$(LIB.STATIC) glew.pc - -lib: - mkdir lib - -lib/$(LIB.STATIC): $(LIB.OBJS) - $(AR) cr $@ $^ -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -lib/$(LIB.SHARED): $(LIB.SOBJS) - $(LD) $(LDFLAGS.SO) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) -ifneq ($(LN),) - $(LN) $(LIB.SHARED) lib/$(LIB.SONAME) - $(LN) $(LIB.SHARED) lib/$(LIB.DEVLNK) -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -tmp/$(SYSTEM)/default/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -tmp/$(SYSTEM)/default/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Force re-write of glew.pc, GLEW_DEST can vary - -.PHONY: glew.pc - -glew.pc: glew.pc.in - sed \ - -e "s|@prefix@|$(GLEW_DEST)|g" \ - -e "s|@libdir@|$(LIBDIR)|g" \ - -e "s|@exec_prefix@|$(BINDIR)|g" \ - -e "s|@includedir@|$(INCDIR)|g" \ - -e "s|@version@|$(GLEW_VERSION)|g" \ - -e "s|@cflags@||g" \ - -e "s|@libname@|GLEW|g" \ - < $< > $@ - -# GLEW MX static and shared libraries - -glew.lib.mx: lib lib/$(LIB.SHARED.MX) lib/$(LIB.STATIC.MX) glewmx.pc - -lib/$(LIB.STATIC.MX): $(LIB.OBJS.MX) - $(AR) cr $@ $^ - -lib/$(LIB.SHARED.MX): $(LIB.SOBJS.MX) - $(LD) $(LDFLAGS.SO.MX) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.SONAME.MX) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.DEVLNK.MX) -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -tmp/$(SYSTEM)/mx/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -tmp/$(SYSTEM)/mx/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Force re-write of glewmx.pc, GLEW_DEST can vary - -.PHONY: glewmx.pc - -glewmx.pc: glew.pc.in - sed \ - -e "s|@prefix@|$(GLEW_DEST)|g" \ - -e "s|@libdir@|$(LIBDIR)|g" \ - -e "s|@exec_prefix@|$(BINDIR)|g" \ - -e "s|@includedir@|$(INCDIR)|g" \ - -e "s|@version@|$(GLEW_VERSION)|g" \ - -e "s|@cflags@|-DGLEW_MX|g" \ - -e "s|@libname@|GLEWmx|g" \ - < $< > $@ - -# GLEW utility programs - -BIN.LIBS = -Llib $(LDFLAGS.DYNAMIC) -l$(NAME) $(LDFLAGS.EXTRA) $(LDFLAGS.GL) - -GLEWINFO.BIN := glewinfo$(BIN.SUFFIX) -GLEWINFO.BIN.SRC := src/glewinfo.c -GLEWINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(GLEWINFO.BIN.SRC))) -GLEWINFO.BIN.OBJ := $(GLEWINFO.BIN.OBJ:.c=.o) - -VISUALINFO.BIN := visualinfo$(BIN.SUFFIX) -VISUALINFO.BIN.SRC := src/visualinfo.c -VISUALINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(VISUALINFO.BIN.SRC))) -VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o) - -# Don't build glewinfo or visualinfo for NaCL, yet. - -ifneq ($(filter nacl%,$(SYSTEM)),) -glew.bin: glew.lib bin -else -glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) -endif - -bin: - mkdir bin - -bin/$(GLEWINFO.BIN): $(GLEWINFO.BIN.OBJ) lib/$(LIB.SHARED) - $(CC) $(CFLAGS) -o $@ $(GLEWINFO.BIN.OBJ) $(BIN.LIBS) -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -bin/$(VISUALINFO.BIN): $(VISUALINFO.BIN.OBJ) lib/$(LIB.SHARED) - $(CC) $(CFLAGS) -o $@ $(VISUALINFO.BIN.OBJ) $(BIN.LIBS) -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -$(GLEWINFO.BIN.OBJ): $(GLEWINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -$(VISUALINFO.BIN.OBJ): $(VISUALINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Install targets - -install.all: install install.mx install.bin - -install: install.include install.lib install.pkgconfig - -install.mx: install.include install.lib.mx install.pkgconfig.mx - -install.lib: glew.lib - $(INSTALL) -d -m 0755 $(LIBDIR) -# runtime -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -m 0755 lib/$(LIB.SHARED) $(BINDIR)/ -else - $(INSTALL) -m 0644 lib/$(LIB.SHARED) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED) $(LIBDIR)/$(LIB.SONAME) -endif - -# development files -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -m 0644 lib/$(LIB.DEVLNK) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED) $(LIBDIR)/$(LIB.DEVLNK) -endif - $(INSTALL) -m 0644 lib/$(LIB.STATIC) $(LIBDIR)/ - -install.lib.mx: glew.lib.mx - $(INSTALL) -d -m 0755 $(LIBDIR) -# runtime -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -m 0755 lib/$(LIB.SHARED.MX) $(BINDIR)/ -else - $(INSTALL) -m 0644 lib/$(LIB.SHARED.MX) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) $(LIBDIR)/$(LIB.SONAME.MX) -endif -# development files -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -m 0644 lib/$(LIB.DEVLNK.MX) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) $(LIBDIR)/$(LIB.DEVLNK.MX) -endif - $(INSTALL) -m 0644 lib/$(LIB.STATIC.MX) $(LIBDIR)/ - -install.bin: glew.bin - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -s -m 0755 bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) $(BINDIR)/ - -install.include: - $(INSTALL) -d -m 0755 $(INCDIR) - $(INSTALL) -m 0644 include/GL/wglew.h $(INCDIR)/ - $(INSTALL) -m 0644 include/GL/glew.h $(INCDIR)/ - $(INSTALL) -m 0644 include/GL/glxew.h $(INCDIR)/ - -install.pkgconfig: glew.pc - $(INSTALL) -d -m 0755 $(LIBDIR) - $(INSTALL) -d -m 0755 $(LIBDIR)/pkgconfig - $(INSTALL) -m 0644 glew.pc $(LIBDIR)/pkgconfig/ - -install.pkgconfig.mx: glewmx.pc - $(INSTALL) -d -m 0755 $(LIBDIR) - $(INSTALL) -d -m 0755 $(LIBDIR)/pkgconfig - $(INSTALL) -m 0644 glewmx.pc $(LIBDIR)/pkgconfig/ - -uninstall: - $(RM) $(INCDIR)/wglew.h - $(RM) $(INCDIR)/glew.h - $(RM) $(INCDIR)/glxew.h - $(RM) $(LIBDIR)/$(LIB.DEVLNK) $(LIBDIR)/$(LIB.DEVLNK.MX) -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(RM) $(BINDIR)/$(LIB.SHARED) $(BINDIR)/$(LIB.SHARED.MX) -else - $(RM) $(LIBDIR)/$(LIB.SONAME) $(LIBDIR)/$(LIB.SONAME.MX) - $(RM) $(LIBDIR)/$(LIB.SHARED) $(LIBDIR)/$(LIB.SHARED.MX) -endif - $(RM) $(LIBDIR)/$(LIB.STATIC) $(LIBDIR)/$(LIB.STATIC.MX) - $(RM) $(BINDIR)/$(GLEWINFO.BIN) $(BINDIR)/$(VISUALINFO.BIN) - -clean: - $(RM) -r tmp/ - $(RM) -r lib/ - $(RM) -r bin/ - $(RM) glew.pc glewmx.pc - -distclean: clean - find . -name \*~ | xargs $(RM) - find . -name .\*.sw\? | xargs $(RM) - -# Distributions - -dist-win32: - $(RM) -r $(DIST_DIR) - mkdir -p $(DIST_DIR) - cp -a include $(DIST_DIR) - cp -a doc $(DIST_DIR) - cp -a *.txt $(DIST_DIR) - cp -a bin $(DIST_DIR) - cp -a lib $(DIST_DIR) - $(RM) -f $(DIST_DIR)/bin/*/*/*.pdb $(DIST_DIR)/bin/*/*/*.exp - $(RM) -f $(DIST_DIR)/bin/*/*/glewinfo-*.exe $(DIST_DIR)/bin/*/*/visualinfo-*.exe - $(RM) -f $(DIST_DIR)/lib/*/*/*.pdb $(DIST_DIR)/lib/*/*/*.exp - unix2dos $(DIST_DIR)/include/GL/*.h - unix2dos $(DIST_DIR)/doc/*.txt - unix2dos $(DIST_DIR)/doc/*.html - unix2dos $(DIST_DIR)/*.txt - rm -f $(DIST_WIN32) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_WIN32) $(DIST_NAME) - $(RM) -r $(DIST_DIR) - -dist-src: - $(RM) -r $(DIST_DIR) - mkdir -p $(DIST_DIR) - mkdir -p $(DIST_DIR)/bin - mkdir -p $(DIST_DIR)/lib - cp -a auto $(DIST_DIR) - $(RM) -Rf $(DIST_DIR)/auto/registry - cp -a build $(DIST_DIR) - cp -a config $(DIST_DIR) - cp -a src $(DIST_DIR) - cp -a doc $(DIST_DIR) - cp -a include $(DIST_DIR) - cp -a *.txt $(DIST_DIR) - cp -a Makefile $(DIST_DIR) - cp -a glew.pc.in $(DIST_DIR) - find $(DIST_DIR) -name '*.o' | xargs $(RM) -r - find $(DIST_DIR) -name '*~' | xargs $(RM) -r - find $(DIST_DIR) -name CVS -o -name .cvsignore | xargs $(RM) -r - find $(DIST_DIR) -name .svn | xargs $(RM) -r - find $(DIST_DIR) -name "*.patch" | xargs $(RM) -r - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - unix2dos $(DIST_DIR)/auto/core/* - unix2dos $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs unix2dos - find $(DIST_DIR) -name '*.c' | xargs unix2dos - find $(DIST_DIR) -name '*.txt' | xargs unix2dos - find $(DIST_DIR) -name '*.html' | xargs unix2dos - find $(DIST_DIR) -name '*.css' | xargs unix2dos - find $(DIST_DIR) -name '*.sh' | xargs unix2dos - find $(DIST_DIR) -name '*.pl' | xargs unix2dos - find $(DIST_DIR) -name 'Makefile' | xargs unix2dos - find $(DIST_DIR) -name '*.in' | xargs unix2dos - find $(DIST_DIR) -name '*.pm' | xargs unix2dos - find $(DIST_DIR) -name '*.rc' | xargs unix2dos - rm -f $(DIST_SRC_ZIP) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_SRC_ZIP) $(DIST_NAME) - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - dos2unix $(DIST_DIR)/auto/core/* - dos2unix $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs dos2unix - find $(DIST_DIR) -name '*.c' | xargs dos2unix - find $(DIST_DIR) -name '*.txt' | xargs dos2unix - find $(DIST_DIR) -name '*.html' | xargs dos2unix - find $(DIST_DIR) -name '*.css' | xargs dos2unix - find $(DIST_DIR) -name '*.sh' | xargs dos2unix - find $(DIST_DIR) -name '*.pl' | xargs dos2unix - find $(DIST_DIR) -name 'Makefile' | xargs dos2unix - find $(DIST_DIR) -name '*.in' | xargs dos2unix - find $(DIST_DIR) -name '*.pm' | xargs dos2unix - find $(DIST_DIR) -name '*.rc' | xargs dos2unix - rm -f $(DIST_SRC_TGZ) - cd $(DIST_DIR)/.. && env GZIP=-9 tar cvzf $(DIST_SRC_TGZ) $(DIST_NAME) - $(RM) -r $(DIST_DIR) - -extensions: - $(MAKE) -C auto - -.PHONY: clean distclean tardist dist-win32 dist-src diff --git a/Engine/lib/glew/README.txt b/Engine/lib/glew/README.txt deleted file mode 100644 index 1b19c53523..0000000000 --- a/Engine/lib/glew/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -See doc/index.html for more information. - -If you downloaded the tarball from the GLEW website, you just need to: - - Unix: - - make - - Windows: - - use the project file in build/vc6/ - -If you wish to build GLEW from scratch (update the extension data from -the net or add your own extension information), you need a Unix -environment (including wget, perl, and GNU make). The extension data -is regenerated from the top level source directory with: - - make extensions diff --git a/Engine/lib/glew/TODO.txt b/Engine/lib/glew/TODO.txt deleted file mode 100644 index d2701b652e..0000000000 --- a/Engine/lib/glew/TODO.txt +++ /dev/null @@ -1,12 +0,0 @@ -Major: - - add support for windows mini-client drivers - - add windows installer (msi) - - separate build of static and shared object files (for mingw and - cygwin) - - start designing GLEW 2.0 - -Minor: - - make auto scripts work with text mode cygwin mounts - - add support for all SUN, MTX, and OML extensions - - make auto/Makefile more robust against auto/core/*~ mistakes - - web poll on separating glew, glxew and wglew diff --git a/Engine/lib/glew/auto/Makefile b/Engine/lib/glew/auto/Makefile deleted file mode 100644 index 113313f2a1..0000000000 --- a/Engine/lib/glew/auto/Makefile +++ /dev/null @@ -1,389 +0,0 @@ -## Copyright (C) 2002-2008, Marcelo E. Magallon -## Copyright (C) 2002-2008, Milan Ikits -## -## This program is distributed under the terms and conditions of the GNU -## General Public License Version 2 as published by the Free Software -## Foundation or, at your option, any later version. - -include ../config/version - -#GLEW_SPLIT_SOURCE = yes - -SHELL = bash - -### Use git repository for GL extension specifications - -GIT_CLONE ?= git clone --branch glew https://github.com/nigels-com/glfixes.git - -### -### Conventional desktop OpenGL settings -### - -REGISTRY = registry/gl/specs -EXT = extensions/gl -FILTER = filter_gl_ext.sh -CORE = core/gl -REGISTRY_URL = http://www.opengl.org/registry/ - -### -### Experimental OpenGL ES settings -### - -# REGISTRY = registry/gles -# EXT = extensions/gles -# FILTER = filter_gles_ext.sh -# CORE = core/gles -# REGISTRY_URL = http://www.khronos.org/registry/gles/ - -BIN = bin -SRC = src -BLACKLIST = blacklist - -GL_CORE_SPEC := $(CORE)/GL_VERSION* -GLX_CORE_SPEC := $(CORE)/GLX_VERSION* -ifeq (custom,$(MAKECMDGOALS)) -#GL_CORE_SPEC := $(shell grep GL_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") -GL_EXT_SPEC := $(shell grep "^[ \t]*GL_" custom.txt | grep -v GL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") -WGL_EXT_SPEC := $(shell grep "^[ \t]*WGL_" custom.txt | perl -pi -e "s=^=$(EXT)/=g;") -#GLX_CORE_SPEC := $(shell grep GLX_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") -GLX_EXT_SPEC := $(shell grep "^[ \t]*GLX_" custom.txt | grep -v GLX_VERSION | perl -pi -e "s=^=$(EXT)/=g;") -else -GL_EXT_SPEC := $(EXT)/GL_* -WGL_EXT_SPEC := $(EXT)/WGL_* -GLX_EXT_SPEC := $(EXT)/GLX_* -endif - -PARSE_SPEC = parse_spec.pl -SYSTEM = $(strip $(shell uname -s)) - -TOP = .. -I.DEST = $(TOP)/include/GL -S.DEST = $(TOP)/src -D.DEST = $(TOP)/doc -B.DEST = $(TOP)/build - -I.TARGETS = \ - $(I.DEST)/glew.h \ - $(I.DEST)/wglew.h \ - $(I.DEST)/glxew.h - -ifeq (yes,$(GLEW_SPLIT_SOURCE)) -S.TARGETS = \ - $(S.DEST)/glew_def.c \ - $(S.DEST)/glew_init.c \ - $(S.DEST)/glew_str.c \ - $(S.DEST)/glewinfo.c -else -S.TARGETS = \ - $(S.DEST)/glew.c \ - $(S.DEST)/glewinfo.c -endif - -D.TARGETS = \ - $(D.DEST)/index.html \ - $(D.DEST)/install.html \ - $(D.DEST)/basic.html \ - $(D.DEST)/advanced.html \ - $(D.DEST)/build.html \ - $(D.DEST)/credits.html \ - $(D.DEST)/log.html \ - $(D.DEST)/glew.html \ - $(D.DEST)/wglew.html \ - $(D.DEST)/glxew.html - -B.TARGETS = \ - $(B.DEST)/glew.rc \ - $(B.DEST)/glewinfo.rc \ - $(B.DEST)/visualinfo.rc - -all custom: $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) - -registry: $(REGISTRY)/.dummy -ext: $(EXT)/.dummy - -$(REGISTRY)/.dummy: - @echo "--------------------------------------------------------------------" - @echo "Downloading registry" - @echo "--------------------------------------------------------------------" - $(GIT_CLONE) registry - touch $@ - -$(EXT)/.dummy: $(REGISTRY)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating descriptors" - @echo "--------------------------------------------------------------------" - rm -rf $(EXT) - $(BIN)/update_ext.sh $(EXT) $(REGISTRY) $(BLACKLIST) - $(BIN)/$(FILTER) $(EXT) -ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin) - find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ - xargs -J % cp % $(EXT) -else - find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ - xargs cp --target-directory=$(EXT) -endif - touch $@ - -$(I.DEST)/glew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.h" - @echo "--------------------------------------------------------------------" - test -d $(I.DEST) || mkdir -p $(I.DEST) - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/mesa_license.h >> $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/glew_head.h >> $@ - $(BIN)/make_header.pl GLAPIENTRY GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_header.pl GLAPIENTRY GL $(GL_EXT_SPEC) >> $@ - echo -e "/* ------------------------------------------------------------------------- */\n\n#if defined(GLEW_MX) && defined(_WIN32)\n#define GLEW_FUN_EXPORT\n#else\n#define GLEW_FUN_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX)\n#define GLEW_VAR_EXPORT\n#else\n#define GLEW_VAR_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX) && defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ - $(BIN)/make_struct_fun.pl GLEW_FUN_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX) && !defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ - $(BIN)/make_struct_var.pl GLEW_VAR_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - perl -e "s/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;\nGLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/" -pi $@ - rm -f $@.bak - cat $(SRC)/glew_tail.h >> $@ - -$(I.DEST)/wglew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating wglew.h" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/wglew_head.h >> $@ - $(BIN)/make_header.pl WINAPI WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/wglew_mid.h >> $@ - echo -e "\n#ifdef GLEW_MX\nstruct WGLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ - $(BIN)/make_struct_fun.pl WGLEW_FUN_EXPORT $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_struct_var.pl WGLEW_VAR_EXPORT $(WGL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* WGLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - cat $(SRC)/wglew_tail.h >> $@ - -$(I.DEST)/glxew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glxew.h" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/mesa_license.h >> $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/glxew_head.h >> $@ - $(BIN)/make_header.pl "" GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_header.pl "" GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glxew_mid.h >> $@ - $(BIN)/make_struct_fun.pl GLXEW_FUN_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX)\nstruct GLXEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ - $(BIN)/make_struct_var.pl GLXEW_VAR_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLXEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@ - cat $(SRC)/glxew_tail.h >> $@ - -$(S.DEST)/glew.c: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.c" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/glew_head.c >> $@ - echo -e "\n#if !defined(_WIN32) || !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !WIN32 || !GLEW_MX */" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_gl.c >> $@ - $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ - $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(_WIN32)" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_wgl.c >> $@ - $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}" >> $@; - echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ - echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_glx.c >> $@ - $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@ - $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}" >> $@ - echo -e "\n#endif /* !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */\n" >> $@; - cat $(SRC)/glew_init_tail.c >> $@ - cat $(SRC)/glew_str_head.c >> $@ - $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_wgl.c >> $@ - $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_glx.c >> $@ - $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_tail.c >> $@ - perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ - perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ - perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - perl -e "s/\(\(glColorSubTable = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glColorSubTable = /g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glew_def.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "#include \"glew_utils.h\"\n\n#if !defined(_WIN32) || !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !WIN32 || !GLEW_MX */" >> $@ - echo -e "\n#if !defined(GLEW_MX)\n\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#if defined(_WIN32)" >> $@ - $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ - echo -e "\n#endif /* _WIN32 */" >> $@ - echo -e "\n#endif /* !GLEW_MX */" >> $@; - echo -e "\n#if !defined(_WIN32) && !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ - echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */" >> $@; - echo -e "\n#endif /* !defined(_WIN32) && !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */" >> $@; - rm -f $@.bak - -$(S.DEST)/glew_init.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "#include \"glew_utils.h\"\n" >> $@ - $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_gl.c >> $@ - $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ - $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n#if defined(_WIN32)\n" >> $@; - $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_wgl.c >> $@ - $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n" >> $@; - echo -e "\n#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX)\n" >> $@ - $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_glx.c >> $@ - $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@ - $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n#endif /* !__APPLE__ || GLEW_APPLE_GLX */\n" >> $@; - cat $(SRC)/glew_init_tail.c >> $@ - perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ - perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ - perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - perl -e "s/\(\(glBlendColor = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glBlendColor = /g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glew_str.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "\n#include \"glew_utils.h\"\n" >> $@ - cat $(SRC)/glew_str_head.c >> $@ - $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_wgl.c >> $@ - $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_glx.c >> $@ - $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_tail.c >> $@ -# perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ -# perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glewinfo.c: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glewinfo.c" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/glewinfo_head.c >> $@ - $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ - $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ - echo -e "#ifdef _WIN32\n" >> $@ - $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ - echo -e "#else /* _UNIX */\n" >> $@ - $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@ - echo -e "#endif /* _WIN32 */\n" >> $@ - - cat $(SRC)/glewinfo_gl.c >> $@ - $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@ - $(BIN)/make_info_list.pl $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_wgl.c >> $@ - $(BIN)/make_info_list.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_glx.c >> $@ - $(BIN)/make_info_list.pl $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_info_list.pl $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_tail.c >> $@ - perl -e 's/"glColorSubTable"/"glBlendEquation", glBlendEquation == NULL);\n glewInfoFunc("glColorSubTable"/g' -pi $@ - rm -f $@.bak - -# Update documentation - -$(D.DEST)/%.html: doc/%.html - @echo "--------------------------------------------------------------------" - @echo "Creating $(@F)" - @echo "--------------------------------------------------------------------" - cat $(SRC)/header.html $< $(SRC)/footer.html | \ - perl -pe 's#(.*)#\1#' > $@ - -$(D.DEST)/glew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported OpenGL Extensions

\n" >> $@ - $(BIN)/make_html.pl $(GL_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(D.DEST)/wglew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating wglew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported WGL Extensions

\n" >> $@ - $(BIN)/make_html.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(D.DEST)/glxew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glxew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported GLX Extensions

\n" >> $@ - $(BIN)/make_html.pl $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(B.DEST)/%.rc: src/%.rc $(EXT)/.dummy - perl -e "s/GLEW_MAJOR/$(GLEW_MAJOR)/g;s/GLEW_MINOR/$(GLEW_MINOR)/g;s/GLEW_MICRO/$(GLEW_MICRO)/g;" -p $< > $@ - -clean: - rm -rf $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) - -clobber: clean - rm -rf $(EXT) - -destroy: clobber - rm -rf registry diff --git a/Engine/lib/glew/auto/blacklist b/Engine/lib/glew/auto/blacklist deleted file mode 100644 index 6cd0e1149f..0000000000 --- a/Engine/lib/glew/auto/blacklist +++ /dev/null @@ -1,14 +0,0 @@ -EXT/draw_range_elements.txt -EXT/static_vertex_array.txt -EXT/vertex_array_set.alt.txt -EXT/vertex_array_set.txt -EXT/nurbs_tessellator.txt -EXT/object_space_tess.txt -SGI/filter4_parameters.txt -SGIS/texture_color_mask.txt -SGIX/dmbuffer.txt -SGIX/instruments.txt -SGIX/video_source.txt -SGIX/hyperpipe_group.txt -OES/OES_fixed_point.txt -OES/OES_query_matrix.txt diff --git a/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association b/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association deleted file mode 100644 index 002164e8d9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -GLX_AMD_gpu_association -http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt -GLX_AMD_gpu_association - GLX_GPU_VENDOR_AMD 0x1F00 - GLX_GPU_RENDERER_STRING_AMD 0x1F01 - GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - GLX_GPU_RAM_AMD 0x21A3 - GLX_GPU_CLOCK_AMD 0x21A4 - GLX_GPU_NUM_PIPES_AMD 0x21A5 - GLX_GPU_NUM_SIMD_AMD 0x21A6 - GLX_GPU_NUM_RB_AMD 0x21A7 - GLX_GPU_NUM_SPI_AMD 0x21A8 - void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list) - GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int* attribList) - Bool glXDeleteAssociatedContextAMD (GLXContext ctx) - unsigned int glXGetContextGPUIDAMD (GLXContext ctx) - GLXContext glXGetCurrentAssociatedContextAMD (void) - unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int* ids) - int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void* data) - Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx) diff --git a/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address b/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address deleted file mode 100644 index 5c066d7d00..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_get_proc_address -http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt -GLX_ARB_get_proc_address - extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float b/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float deleted file mode 100644 index 854ca716ba..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ATI_pixel_format_float - -GLX_ATI_pixel_format_float - GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture b/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture deleted file mode 100644 index 254eb9f3bc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture +++ /dev/null @@ -1,41 +0,0 @@ -GLX_ATI_render_texture - -GLX_ATI_render_texture - GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 - GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 - GLX_TEXTURE_FORMAT_ATI 0x9802 - GLX_TEXTURE_TARGET_ATI 0x9803 - GLX_MIPMAP_TEXTURE_ATI 0x9804 - GLX_TEXTURE_RGB_ATI 0x9805 - GLX_TEXTURE_RGBA_ATI 0x9806 - GLX_NO_TEXTURE_ATI 0x9807 - GLX_TEXTURE_CUBE_MAP_ATI 0x9808 - GLX_TEXTURE_1D_ATI 0x9809 - GLX_TEXTURE_2D_ATI 0x980A - GLX_MIPMAP_LEVEL_ATI 0x980B - GLX_CUBE_MAP_FACE_ATI 0x980C - GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D - GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E - GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 - GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 - GLX_FRONT_LEFT_ATI 0x9813 - GLX_FRONT_RIGHT_ATI 0x9814 - GLX_BACK_LEFT_ATI 0x9815 - GLX_BACK_RIGHT_ATI 0x9816 - GLX_AUX0_ATI 0x9817 - GLX_AUX1_ATI 0x9818 - GLX_AUX2_ATI 0x9819 - GLX_AUX3_ATI 0x981A - GLX_AUX4_ATI 0x981B - GLX_AUX5_ATI 0x981C - GLX_AUX6_ATI 0x981D - GLX_AUX7_ATI 0x981E - GLX_AUX8_ATI 0x981F - GLX_AUX9_ATI 0x9820 - GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 - GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - void glXBindTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXReleaseTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXDrawableAttribATI (Display *dpy, GLXDrawable draw, const int *attrib_list) diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile b/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile deleted file mode 100644 index 3093baa3bd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt -GLX_EXT_create_context_es2_profile - GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile b/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile deleted file mode 100644 index 845f65ee71..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt -GLX_EXT_create_context_es_profile - GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float b/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float deleted file mode 100644 index 7c7822d81a..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_EXT_fbconfig_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GLX_EXT_fbconfig_packed_float - GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB deleted file mode 100644 index f51c484afd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GLX_EXT_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 diff --git a/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control b/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control deleted file mode 100644 index 4416519379..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -GLX_MESA_swap_control -http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec -GLX_MESA_swap_control - int glXGetSwapIntervalMESA (void) - int glXSwapIntervalMESA (unsigned int interval) diff --git a/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer b/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer deleted file mode 100644 index cc9185ee94..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_float_buffer -http://cvs1.nvidia.com/inc/GL/glxtokens.h -GLX_NV_float_buffer - GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range b/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range deleted file mode 100644 index 11afe17406..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -GLX_NV_vertex_array_range - void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void glXFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample b/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample deleted file mode 100644 index 274e90f76e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_shared_multisample - -GLX_SGIS_shared_multisample - GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 - GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe b/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe deleted file mode 100644 index 79ec30295c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe +++ /dev/null @@ -1,25 +0,0 @@ -GLX_SGIX_hyperpipe -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt -GLX_SGIX_hyperpipe - GLX_HYPERPIPE_ID_SGIX 0x8030 - GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 - GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 - GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 - GLX_PIPE_RECT_SGIX 0x00000001 - GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 - GLX_HYPERPIPE_STEREO_SGIX 0x00000003 - GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 - GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 - GLX_BAD_HYPERPIPE_SGIX 92 - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; - GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes) - int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId) - GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes) - int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId) - int glXBindHyperpipeSGIX (Display *dpy, int hpId) - int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList) - int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList) - int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier b/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier deleted file mode 100644 index 57dd60dbb0..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIX_swap_barrier -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt -GLX_SGIX_swap_barrier - void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier) - Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group b/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group deleted file mode 100644 index 3530604605..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_swap_group -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt -GLX_SGIX_swap_group - void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync b/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync deleted file mode 100644 index dcdb968c65..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_video_sync -http://www.opengl.org/registry/specs/SGI/video_sync.txt -GLX_SGI_video_sync - int glXGetVideoSyncSGI (unsigned int* count) - int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int* count) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize b/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize deleted file mode 100644 index 0a0cefe3db..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize +++ /dev/null @@ -1,7 +0,0 @@ -GLX_SUN_video_resize -http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt -GLX_SUN_video_resize - GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - GLX_VIDEO_RESIZE_SUN 0x8171 - int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) - int glXGetVideoResizeSUN (Display* display, GLXDrawable window, float* factor) diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 deleted file mode 100644 index 39d7a09bc8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 +++ /dev/null @@ -1,4 +0,0 @@ -GLX_VERSION_1_2 -http://www.opengl.org/documentation/specs/glx/glx1.2.ps -GLX_VERSION_1_2 - Display* glXGetCurrentDisplay (void) diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 deleted file mode 100644 index 46eedb979c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 +++ /dev/null @@ -1,82 +0,0 @@ -GLX_VERSION_1_3 -http://www.opengl.org/documentation/specs/glx/glx1.3.pdf -GLX_VERSION_1_3 - GLX_WINDOW_BIT 0x00000001 - GLX_PIXMAP_BIT 0x00000002 - GLX_PBUFFER_BIT 0x00000004 - GLX_RGBA_BIT 0x00000001 - GLX_COLOR_INDEX_BIT 0x00000002 - GLX_PBUFFER_CLOBBER_MASK 0x08000000 - GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 - GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 - GLX_BACK_LEFT_BUFFER_BIT 0x00000004 - GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 - GLX_AUX_BUFFERS_BIT 0x00000010 - GLX_DEPTH_BUFFER_BIT 0x00000020 - GLX_STENCIL_BUFFER_BIT 0x00000040 - GLX_ACCUM_BUFFER_BIT 0x00000080 - GLX_CONFIG_CAVEAT 0x20 - GLX_X_VISUAL_TYPE 0x22 - GLX_TRANSPARENT_TYPE 0x23 - GLX_TRANSPARENT_INDEX_VALUE 0x24 - GLX_TRANSPARENT_RED_VALUE 0x25 - GLX_TRANSPARENT_GREEN_VALUE 0x26 - GLX_TRANSPARENT_BLUE_VALUE 0x27 - GLX_TRANSPARENT_ALPHA_VALUE 0x28 - GLX_DONT_CARE 0xFFFFFFFF - GLX_NONE 0x8000 - GLX_SLOW_CONFIG 0x8001 - GLX_TRUE_COLOR 0x8002 - GLX_DIRECT_COLOR 0x8003 - GLX_PSEUDO_COLOR 0x8004 - GLX_STATIC_COLOR 0x8005 - GLX_GRAY_SCALE 0x8006 - GLX_STATIC_GRAY 0x8007 - GLX_TRANSPARENT_RGB 0x8008 - GLX_TRANSPARENT_INDEX 0x8009 - GLX_VISUAL_ID 0x800B - GLX_SCREEN 0x800C - GLX_NON_CONFORMANT_CONFIG 0x800D - GLX_DRAWABLE_TYPE 0x8010 - GLX_RENDER_TYPE 0x8011 - GLX_X_RENDERABLE 0x8012 - GLX_FBCONFIG_ID 0x8013 - GLX_RGBA_TYPE 0x8014 - GLX_COLOR_INDEX_TYPE 0x8015 - GLX_MAX_PBUFFER_WIDTH 0x8016 - GLX_MAX_PBUFFER_HEIGHT 0x8017 - GLX_MAX_PBUFFER_PIXELS 0x8018 - GLX_PRESERVED_CONTENTS 0x801B - GLX_LARGEST_PBUFFER 0x801C - GLX_WIDTH 0x801D - GLX_HEIGHT 0x801E - GLX_EVENT_MASK 0x801F - GLX_DAMAGED 0x8020 - GLX_SAVED 0x8021 - GLX_WINDOW 0x8022 - GLX_PBUFFER 0x8023 - GLX_PBUFFER_HEIGHT 0x8040 - GLX_PBUFFER_WIDTH 0x8041 - GLXFBConfig* glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements) - GLXFBConfig* glXGetFBConfigs (Display *dpy, int screen, int *nelements) - XVisualInfo* glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config) - int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value) - GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list) - void glXDestroyWindow (Display *dpy, GLXWindow win) - GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list) - void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap) - GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list) - void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf) - void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value) - GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) - Bool glXMakeContextCurrent (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx) - GLXDrawable glXGetCurrentReadDrawable (void) - int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value) - void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask) - void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask) - typedef XID GLXWindow - typedef XID GLXPbuffer - typedef XID GLXFBConfigID - typedef struct __GLXFBConfigRec *GLXFBConfig - typedef struct { int event_type; int draw_type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; unsigned int buffer_mask; unsigned int aux_buffer; int x, y; int width, height; int count; } GLXPbufferClobberEvent; - typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent; diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 deleted file mode 100644 index 138262161e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 +++ /dev/null @@ -1,6 +0,0 @@ -GLX_VERSION_1_4 -http://www.opengl.org/documentation/specs/glx/glx1.4.pdf -GLX_VERSION_1_4 - GLX_SAMPLE_BUFFERS 100000 - GLX_SAMPLES 100001 - extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels b/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels deleted file mode 100644 index 2bf7458089..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels +++ /dev/null @@ -1,17 +0,0 @@ -GL_APPLE_float_pixels -http://www.opengl.org/registry/specs/APPLE/float_pixels.txt -GL_APPLE_float_pixels - GL_HALF_APPLE 0x140B - GL_COLOR_FLOAT_APPLE 0x8A0F - GL_RGBA_FLOAT32_APPLE 0x8814 - GL_RGB_FLOAT32_APPLE 0x8815 - GL_ALPHA_FLOAT32_APPLE 0x8816 - GL_INTENSITY_FLOAT32_APPLE 0x8817 - GL_LUMINANCE_FLOAT32_APPLE 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 - GL_RGBA_FLOAT16_APPLE 0x881A - GL_RGB_FLOAT16_APPLE 0x881B - GL_ALPHA_FLOAT16_APPLE 0x881C - GL_INTENSITY_FLOAT16_APPLE 0x881D - GL_LUMINANCE_FLOAT16_APPLE 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer b/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer deleted file mode 100644 index 7449f2918e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_pixel_buffer - -GL_APPLE_pixel_buffer - GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range b/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range deleted file mode 100644 index 7ca9b9bad8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_texture_range -http://www.opengl.org/registry/specs/APPLE/texture_range.txt -GL_APPLE_texture_range - GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC - GL_STORAGE_PRIVATE_APPLE 0x85BD - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 - GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 - void glTextureRangeAPPLE (GLenum target, GLsizei length, GLvoid *pointer) - void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid **params) - diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced b/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced deleted file mode 100644 index 4140beaaa6..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_draw_instanced -http://www.opengl.org/registry/specs/ARB/draw_instanced.txt -GL_ARB_draw_instanced diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_imaging b/Engine/lib/glew/auto/core/gl/GL_ARB_imaging deleted file mode 100644 index 0efd0c1b8e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_imaging +++ /dev/null @@ -1,112 +0,0 @@ -GL_ARB_imaging - -GL_ARB_imaging - GL_CONSTANT_COLOR 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR 0x8002 - GL_CONSTANT_ALPHA 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 - GL_BLEND_COLOR 0x8005 - GL_FUNC_ADD 0x8006 - GL_MIN 0x8007 - GL_MAX 0x8008 - GL_BLEND_EQUATION 0x8009 - GL_FUNC_SUBTRACT 0x800A - GL_FUNC_REVERSE_SUBTRACT 0x800B - GL_CONVOLUTION_1D 0x8010 - GL_CONVOLUTION_2D 0x8011 - GL_SEPARABLE_2D 0x8012 - GL_CONVOLUTION_BORDER_MODE 0x8013 - GL_CONVOLUTION_FILTER_SCALE 0x8014 - GL_CONVOLUTION_FILTER_BIAS 0x8015 - GL_REDUCE 0x8016 - GL_CONVOLUTION_FORMAT 0x8017 - GL_CONVOLUTION_WIDTH 0x8018 - GL_CONVOLUTION_HEIGHT 0x8019 - GL_MAX_CONVOLUTION_WIDTH 0x801A - GL_MAX_CONVOLUTION_HEIGHT 0x801B - GL_POST_CONVOLUTION_RED_SCALE 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F - GL_POST_CONVOLUTION_RED_BIAS 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 - GL_HISTOGRAM 0x8024 - GL_PROXY_HISTOGRAM 0x8025 - GL_HISTOGRAM_WIDTH 0x8026 - GL_HISTOGRAM_FORMAT 0x8027 - GL_HISTOGRAM_RED_SIZE 0x8028 - GL_HISTOGRAM_GREEN_SIZE 0x8029 - GL_HISTOGRAM_BLUE_SIZE 0x802A - GL_HISTOGRAM_ALPHA_SIZE 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE 0x802C - GL_HISTOGRAM_SINK 0x802D - GL_MINMAX 0x802E - GL_MINMAX_FORMAT 0x802F - GL_MINMAX_SINK 0x8030 - GL_TABLE_TOO_LARGE 0x8031 - GL_COLOR_MATRIX 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB - GL_COLOR_TABLE 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 - GL_PROXY_COLOR_TABLE 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 - GL_COLOR_TABLE_SCALE 0x80D6 - GL_COLOR_TABLE_BIAS 0x80D7 - GL_COLOR_TABLE_FORMAT 0x80D8 - GL_COLOR_TABLE_WIDTH 0x80D9 - GL_COLOR_TABLE_RED_SIZE 0x80DA - GL_COLOR_TABLE_GREEN_SIZE 0x80DB - GL_COLOR_TABLE_BLUE_SIZE 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF - GL_IGNORE_BORDER 0x8150 - GL_CONSTANT_BORDER 0x8151 - GL_WRAP_BORDER 0x8152 - GL_REPLICATE_BORDER 0x8153 - GL_CONVOLUTION_BORDER_COLOR 0x8154 - void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) - void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) - void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table) - void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) - void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glResetHistogram (GLenum target) - void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) - void glMinmax (GLenum target, GLenum internalformat, GLboolean sink) - void glResetMinmax (GLenum target) - void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) - void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) - void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glConvolutionParameteri (GLenum target, GLenum pname, GLint params) - void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) - void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) - void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) - void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays b/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays deleted file mode 100644 index b1c88734d1..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_instanced_arrays -http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt -GL_ARB_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - void glVertexAttribDivisorARB (GLuint index, GLuint divisor) - void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 b/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 deleted file mode 100644 index 1210966327..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 +++ /dev/null @@ -1,103 +0,0 @@ -GL_ARB_internalformat_query2 -http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt -GL_ARB_internalformat_query2 - GL_INTERNALFORMAT_SUPPORTED 0x826F - GL_INTERNALFORMAT_PREFERRED 0x8270 - GL_INTERNALFORMAT_RED_SIZE 0x8271 - GL_INTERNALFORMAT_GREEN_SIZE 0x8272 - GL_INTERNALFORMAT_BLUE_SIZE 0x8273 - GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 - GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 - GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 - GL_INTERNALFORMAT_SHARED_SIZE 0x8277 - GL_INTERNALFORMAT_RED_TYPE 0x8278 - GL_INTERNALFORMAT_GREEN_TYPE 0x8279 - GL_INTERNALFORMAT_BLUE_TYPE 0x827A - GL_INTERNALFORMAT_ALPHA_TYPE 0x827B - GL_INTERNALFORMAT_DEPTH_TYPE 0x827C - GL_INTERNALFORMAT_STENCIL_TYPE 0x827D - GL_MAX_WIDTH 0x827E - GL_MAX_HEIGHT 0x827F - GL_MAX_DEPTH 0x8280 - GL_MAX_LAYERS 0x8281 - GL_MAX_COMBINED_DIMENSIONS 0x8282 - GL_COLOR_COMPONENTS 0x8283 - GL_DEPTH_COMPONENTS 0x8284 - GL_STENCIL_COMPONENTS 0x8285 - GL_COLOR_RENDERABLE 0x8286 - GL_DEPTH_RENDERABLE 0x8287 - GL_STENCIL_RENDERABLE 0x8288 - GL_FRAMEBUFFER_RENDERABLE 0x8289 - GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A - GL_FRAMEBUFFER_BLEND 0x828B - GL_READ_PIXELS 0x828C - GL_READ_PIXELS_FORMAT 0x828D - GL_READ_PIXELS_TYPE 0x828E - GL_TEXTURE_IMAGE_FORMAT 0x828F - GL_TEXTURE_IMAGE_TYPE 0x8290 - GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 - GL_GET_TEXTURE_IMAGE_TYPE 0x8292 - GL_MIPMAP 0x8293 - GL_MANUAL_GENERATE_MIPMAP 0x8294 - GL_AUTO_GENERATE_MIPMAP 0x8295 - GL_COLOR_ENCODING 0x8296 - GL_SRGB_READ 0x8297 - GL_SRGB_WRITE 0x8298 - GL_SRGB_DECODE_ARB 0x8299 - GL_FILTER 0x829A - GL_VERTEX_TEXTURE 0x829B - GL_TESS_CONTROL_TEXTURE 0x829C - GL_TESS_EVALUATION_TEXTURE 0x829D - GL_GEOMETRY_TEXTURE 0x829E - GL_FRAGMENT_TEXTURE 0x829F - GL_COMPUTE_TEXTURE 0x82A0 - GL_TEXTURE_SHADOW 0x82A1 - GL_TEXTURE_GATHER 0x82A2 - GL_TEXTURE_GATHER_SHADOW 0x82A3 - GL_SHADER_IMAGE_LOAD 0x82A4 - GL_SHADER_IMAGE_STORE 0x82A5 - GL_SHADER_IMAGE_ATOMIC 0x82A6 - GL_IMAGE_TEXEL_SIZE 0x82A7 - GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 - GL_IMAGE_PIXEL_FORMAT 0x82A9 - GL_IMAGE_PIXEL_TYPE 0x82AA - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF - GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 - GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 - GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 - GL_CLEAR_BUFFER 0x82B4 - GL_TEXTURE_VIEW 0x82B5 - GL_VIEW_COMPATIBILITY_CLASS 0x82B6 - GL_FULL_SUPPORT 0x82B7 - GL_CAVEAT_SUPPORT 0x82B8 - GL_IMAGE_CLASS_4_X_32 0x82B9 - GL_IMAGE_CLASS_2_X_32 0x82BA - GL_IMAGE_CLASS_1_X_32 0x82BB - GL_IMAGE_CLASS_4_X_16 0x82BC - GL_IMAGE_CLASS_2_X_16 0x82BD - GL_IMAGE_CLASS_1_X_16 0x82BE - GL_IMAGE_CLASS_4_X_8 0x82BF - GL_IMAGE_CLASS_2_X_8 0x82C0 - GL_IMAGE_CLASS_1_X_8 0x82C1 - GL_IMAGE_CLASS_11_11_10 0x82C2 - GL_IMAGE_CLASS_10_10_10_2 0x82C3 - GL_VIEW_CLASS_128_BITS 0x82C4 - GL_VIEW_CLASS_96_BITS 0x82C5 - GL_VIEW_CLASS_64_BITS 0x82C6 - GL_VIEW_CLASS_48_BITS 0x82C7 - GL_VIEW_CLASS_32_BITS 0x82C8 - GL_VIEW_CLASS_24_BITS 0x82C9 - GL_VIEW_CLASS_16_BITS 0x82CA - GL_VIEW_CLASS_8_BITS 0x82CB - GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC - GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD - GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE - GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF - GL_VIEW_CLASS_RGTC1_RED 0x82D0 - GL_VIEW_CLASS_RGTC2_RG 0x82D1 - GL_VIEW_CLASS_BPTC_UNORM 0x82D2 - GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - void glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette b/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette deleted file mode 100644 index 4b67c15cf4..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_matrix_palette -http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt -GL_ARB_matrix_palette - GL_MATRIX_PALETTE_ARB 0x8840 - GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 - GL_MAX_PALETTE_MATRICES_ARB 0x8842 - GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 - GL_MATRIX_INDEX_ARRAY_ARB 0x8844 - GL_CURRENT_MATRIX_INDEX_ARB 0x8845 - GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 - GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 - GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 - GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - void glCurrentPaletteMatrixARB (GLint index) - void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glMatrixIndexubvARB (GLint size, GLubyte *indices) - void glMatrixIndexusvARB (GLint size, GLushort *indices) - void glMatrixIndexuivARB (GLint size, GLuint *indices) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture b/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture deleted file mode 100644 index ee80791831..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_multitexture -http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt -GL_ARB_multitexture - GL_TEXTURE0_ARB 0x84C0 - GL_TEXTURE1_ARB 0x84C1 - GL_TEXTURE2_ARB 0x84C2 - GL_TEXTURE3_ARB 0x84C3 - GL_TEXTURE4_ARB 0x84C4 - GL_TEXTURE5_ARB 0x84C5 - GL_TEXTURE6_ARB 0x84C6 - GL_TEXTURE7_ARB 0x84C7 - GL_TEXTURE8_ARB 0x84C8 - GL_TEXTURE9_ARB 0x84C9 - GL_TEXTURE10_ARB 0x84CA - GL_TEXTURE11_ARB 0x84CB - GL_TEXTURE12_ARB 0x84CC - GL_TEXTURE13_ARB 0x84CD - GL_TEXTURE14_ARB 0x84CE - GL_TEXTURE15_ARB 0x84CF - GL_TEXTURE16_ARB 0x84D0 - GL_TEXTURE17_ARB 0x84D1 - GL_TEXTURE18_ARB 0x84D2 - GL_TEXTURE19_ARB 0x84D3 - GL_TEXTURE20_ARB 0x84D4 - GL_TEXTURE21_ARB 0x84D5 - GL_TEXTURE22_ARB 0x84D6 - GL_TEXTURE23_ARB 0x84D7 - GL_TEXTURE24_ARB 0x84D8 - GL_TEXTURE25_ARB 0x84D9 - GL_TEXTURE26_ARB 0x84DA - GL_TEXTURE27_ARB 0x84DB - GL_TEXTURE28_ARB 0x84DC - GL_TEXTURE29_ARB 0x84DD - GL_TEXTURE30_ARB 0x84DE - GL_TEXTURE31_ARB 0x84DF - GL_ACTIVE_TEXTURE_ARB 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 - GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - void glActiveTextureARB (GLenum texture) - void glClientActiveTextureARB (GLenum texture) - void glMultiTexCoord1dARB (GLenum target, GLdouble s) - void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord1fARB (GLenum target, GLfloat s) - void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord1iARB (GLenum target, GLint s) - void glMultiTexCoord1ivARB (GLenum target, const GLint *v) - void glMultiTexCoord1sARB (GLenum target, GLshort s) - void glMultiTexCoord1svARB (GLenum target, const GLshort *v) - void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t) - void glMultiTexCoord2ivARB (GLenum target, const GLint *v) - void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2svARB (GLenum target, const GLshort *v) - void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3ivARB (GLenum target, const GLint *v) - void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3svARB (GLenum target, const GLshort *v) - void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4ivARB (GLenum target, const GLint *v) - void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4svARB (GLenum target, const GLshort *v) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_robustness b/Engine/lib/glew/auto/core/gl/GL_ARB_robustness deleted file mode 100644 index cdeeb4ff94..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_robustness +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_robustness -http://www.opengl.org/registry/specs/ARB/robustness.txt -GL_ARB_robustness - GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 - GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GL_GUILTY_CONTEXT_RESET_ARB 0x8253 - GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 - GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 - GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GL_NO_RESET_NOTIFICATION_ARB 0x8261 - GLenum glGetGraphicsResetStatusARB (void) - void glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) - void glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void* img) - void glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) - void glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) - void glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) - void glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint* v) - void glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat* values) - void glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint* values) - void glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort* values) - void glGetnPolygonStippleARB (GLsizei bufSize, GLubyte* pattern) - void glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span) - void glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) - void glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble* params) - void glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat* params) - void glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint* params) - void glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint* params) - void glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects b/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects deleted file mode 100644 index b90b68ab4e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_separate_shader_objects -http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt -GL_ARB_separate_shader_objects - GL_VERTEX_SHADER_BIT 0x00000001 - GL_FRAGMENT_SHADER_BIT 0x00000002 - GL_GEOMETRY_SHADER_BIT 0x00000004 - GL_TESS_CONTROL_SHADER_BIT 0x00000008 - GL_TESS_EVALUATION_SHADER_BIT 0x00000010 - GL_PROGRAM_SEPARABLE 0x8258 - GL_ACTIVE_PROGRAM 0x8259 - GL_PROGRAM_PIPELINE_BINDING 0x825A - GL_ALL_SHADER_BITS 0xFFFFFFFF - void glActiveShaderProgram (GLuint pipeline, GLuint program) - void glBindProgramPipeline (GLuint pipeline) - GLuint glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar ** strings) - void glDeleteProgramPipelines (GLsizei n, const GLuint* pipelines) - void glGenProgramPipelines (GLsizei n, GLuint* pipelines) - void glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog) - void glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params) - GLboolean glIsProgramPipeline (GLuint pipeline) - void glProgramUniform1d (GLuint program, GLint location, GLdouble x) - void glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform1f (GLuint program, GLint location, GLfloat x) - void glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1i (GLuint program, GLint location, GLint x) - void glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1ui (GLuint program, GLint location, GLuint x) - void glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2d (GLuint program, GLint location, GLdouble x, GLdouble y) - void glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform2f (GLuint program, GLint location, GLfloat x, GLfloat y) - void glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2i (GLuint program, GLint location, GLint x, GLint y) - void glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2ui (GLuint program, GLint location, GLuint x, GLuint y) - void glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) - void glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform3f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) - void glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3i (GLuint program, GLint location, GLint x, GLint y, GLint z) - void glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z) - void glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform4f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4i (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) - void glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program) - void glValidateProgramPipeline (GLuint pipeline) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit b/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit deleted file mode 100644 index a30aa06252..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_attrib_64bit -http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt -GL_ARB_vertex_attrib_64bit - void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) - void glVertexAttribL1d (GLuint index, GLdouble x) - void glVertexAttribL1dv (GLuint index, const GLdouble* v) - void glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dv (GLuint index, const GLdouble* v) - void glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dv (GLuint index, const GLdouble* v) - void glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dv (GLuint index, const GLdouble* v) - void glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend b/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend deleted file mode 100644 index 8da2c785b9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend +++ /dev/null @@ -1,55 +0,0 @@ -GL_ARB_vertex_blend -http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt -GL_ARB_vertex_blend - GL_MAX_VERTEX_UNITS_ARB 0x86A4 - GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 - GL_WEIGHT_SUM_UNITY_ARB 0x86A6 - GL_VERTEX_BLEND_ARB 0x86A7 - GL_CURRENT_WEIGHT_ARB 0x86A8 - GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 - GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA - GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB - GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC - GL_WEIGHT_ARRAY_ARB 0x86AD - GL_MODELVIEW0_ARB 0x1700 - GL_MODELVIEW1_ARB 0x850A - GL_MODELVIEW2_ARB 0x8722 - GL_MODELVIEW3_ARB 0x8723 - GL_MODELVIEW4_ARB 0x8724 - GL_MODELVIEW5_ARB 0x8725 - GL_MODELVIEW6_ARB 0x8726 - GL_MODELVIEW7_ARB 0x8727 - GL_MODELVIEW8_ARB 0x8728 - GL_MODELVIEW9_ARB 0x8729 - GL_MODELVIEW10_ARB 0x872A - GL_MODELVIEW11_ARB 0x872B - GL_MODELVIEW12_ARB 0x872C - GL_MODELVIEW13_ARB 0x872D - GL_MODELVIEW14_ARB 0x872E - GL_MODELVIEW15_ARB 0x872F - GL_MODELVIEW16_ARB 0x8730 - GL_MODELVIEW17_ARB 0x8731 - GL_MODELVIEW18_ARB 0x8732 - GL_MODELVIEW19_ARB 0x8733 - GL_MODELVIEW20_ARB 0x8734 - GL_MODELVIEW21_ARB 0x8735 - GL_MODELVIEW22_ARB 0x8736 - GL_MODELVIEW23_ARB 0x8737 - GL_MODELVIEW24_ARB 0x8738 - GL_MODELVIEW25_ARB 0x8739 - GL_MODELVIEW26_ARB 0x873A - GL_MODELVIEW27_ARB 0x873B - GL_MODELVIEW28_ARB 0x873C - GL_MODELVIEW29_ARB 0x873D - GL_MODELVIEW30_ARB 0x873E - GL_MODELVIEW31_ARB 0x873F - void glWeightbvARB (GLint size, GLbyte *weights) - void glWeightsvARB (GLint size, GLshort *weights) - void glWeightivARB (GLint size, GLint *weights) - void glWeightfvARB (GLint size, GLfloat *weights) - void glWeightdvARB (GLint size, GLdouble *weights) - void glWeightubvARB (GLint size, GLubyte *weights) - void glWeightusvARB (GLint size, GLushort *weights) - void glWeightuivARB (GLint size, GLuint *weights) - void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexBlendARB (GLint count) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites b/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites deleted file mode 100644 index 0f4f574131..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATIX_point_sprites -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_point_sprites - GL_TEXTURE_POINT_MODE_ATIX 0x60B0 - GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 - GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 - GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 - GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 - GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 b/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 deleted file mode 100644 index 537426b95d..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_combine3 -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_texture_env_combine3 - GL_MODULATE_ADD_ATIX 0x8744 - GL_MODULATE_SIGNED_ADD_ATIX 0x8745 - GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route b/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route deleted file mode 100644 index 939ae09b95..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_route -http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt -GL_ATIX_texture_env_route - GL_SECONDARY_COLOR_ATIX 0x8747 - GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 - GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size b/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size deleted file mode 100644 index 277a3136cb..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATIX_vertex_shader_output_point_size -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_vertex_shader_output_point_size - GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap b/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap deleted file mode 100644 index fbd992551e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_envmap_bumpmap -http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt -GL_ATI_envmap_bumpmap - GL_BUMP_ROT_MATRIX_ATI 0x8775 - GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 - GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 - GL_BUMP_TEX_UNITS_ATI 0x8778 - GL_DUDV_ATI 0x8779 - GL_DU8DV8_ATI 0x877A - GL_BUMP_ENVMAP_ATI 0x877B - GL_BUMP_TARGET_ATI 0x877C - void glTexBumpParameterivATI (GLenum pname, GLint *param) - void glTexBumpParameterfvATI (GLenum pname, GLfloat *param) - void glGetTexBumpParameterivATI (GLenum pname, GLint *param) - void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer b/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer deleted file mode 100644 index 573afd273f..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_map_object_buffer -http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt -GL_ATI_map_object_buffer - GLvoid * glMapObjectBufferATI (GLuint buffer) - void glUnmapObjectBufferATI (GLuint buffer) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles b/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles deleted file mode 100644 index a61e27a061..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles +++ /dev/null @@ -1,14 +0,0 @@ -GL_ATI_pn_triangles -http://www.opengl.org/registry/specs/ATI/pn_triangles.txt -GL_ATI_pn_triangles - GL_PN_TRIANGLES_ATI 0x87F0 - GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 - GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 - GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 - GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 - GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 - GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 - GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 - GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - void glPNTrianglesiATI (GLenum pname, GLint param) - void glPNTrianglesfATI (GLenum pname, GLfloat param) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil b/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil deleted file mode 100644 index be55bb44f5..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_separate_stencil -http://www.opengl.org/registry/specs/ATI/separate_stencil.txt -GL_ATI_separate_stencil - GL_STENCIL_BACK_FUNC_ATI 0x8800 - GL_STENCIL_BACK_FAIL_ATI 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod b/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod deleted file mode 100644 index 5fbc624a6b..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ATI_shader_texture_lod - -GL_ATI_shader_texture_lod diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc b/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc deleted file mode 100644 index 2548b30ead..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_texture_compression_3dc - -GL_ATI_texture_compression_3dc - GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams b/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams deleted file mode 100644 index 060f8446e2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams +++ /dev/null @@ -1,58 +0,0 @@ -GL_ATI_vertex_streams -http://www.opengl.org/registry/specs/ATI/vertex_streams.txt -GL_ATI_vertex_streams - GL_MAX_VERTEX_STREAMS_ATI 0x876B - GL_VERTEX_SOURCE_ATI 0x876C - GL_VERTEX_STREAM0_ATI 0x876D - GL_VERTEX_STREAM1_ATI 0x876E - GL_VERTEX_STREAM2_ATI 0x876F - GL_VERTEX_STREAM3_ATI 0x8770 - GL_VERTEX_STREAM4_ATI 0x8771 - GL_VERTEX_STREAM5_ATI 0x8772 - GL_VERTEX_STREAM6_ATI 0x8773 - GL_VERTEX_STREAM7_ATI 0x8774 - void glClientActiveVertexStreamATI (GLenum stream) - void glVertexBlendEnviATI (GLenum pname, GLint param) - void glVertexBlendEnvfATI (GLenum pname, GLfloat param) - void glVertexStream1sATI (GLenum stream, GLshort x) - void glVertexStream1svATI (GLenum stream, const GLshort *coords) - void glVertexStream1iATI (GLenum stream, GLint x) - void glVertexStream1ivATI (GLenum stream, const GLint *coords) - void glVertexStream1fATI (GLenum stream, GLfloat x) - void glVertexStream1fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream1dATI (GLenum stream, GLdouble x) - void glVertexStream1dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y) - void glVertexStream2svATI (GLenum stream, const GLshort *coords) - void glVertexStream2iATI (GLenum stream, GLint x, GLint y) - void glVertexStream2ivATI (GLenum stream, const GLint *coords) - void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) - void glVertexStream2fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) - void glVertexStream2dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glVertexStream3svATI (GLenum stream, const GLshort *coords) - void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glVertexStream3ivATI (GLenum stream, const GLint *coords) - void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glVertexStream3fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glVertexStream3dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexStream4svATI (GLenum stream, const GLshort *coords) - void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) - void glVertexStream4ivATI (GLenum stream, const GLint *coords) - void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexStream4fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexStream4dvATI (GLenum stream, const GLdouble *coords) - void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z) - void glNormalStream3bvATI (GLenum stream, const GLbyte *coords) - void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glNormalStream3svATI (GLenum stream, const GLshort *coords) - void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glNormalStream3ivATI (GLenum stream, const GLint *coords) - void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glNormalStream3fvATI (GLenum stream, const GLfloat *coords) - void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glNormalStream3dvATI (GLenum stream, const GLdouble *coords) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader b/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader deleted file mode 100644 index 34d3152931..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_Cg_shader -http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf -GL_EXT_Cg_shader - GL_CG_VERTEX_SHADER_EXT 0x890E - GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform b/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform deleted file mode 100644 index 809123b659..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_bindable_uniform -http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt -GL_EXT_bindable_uniform - GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 - GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 - GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 - GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED - GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - GL_UNIFORM_BUFFER_EXT 0x8DEE - void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer) - GLint glGetUniformBufferSizeEXT (GLuint program, GLint location) - GLintptr glGetUniformOffsetEXT (GLuint program, GLint location) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker b/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker deleted file mode 100644 index 9d0628c8fe..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_debug_marker -http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt -GL_EXT_debug_marker - void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) - void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) - void glPopGroupMarkerEXT (void) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test b/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test deleted file mode 100644 index 62528b7b0c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_depth_bounds_test -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt -GL_EXT_depth_bounds_test - GL_DEPTH_BOUNDS_TEST_EXT 0x8890 - GL_DEPTH_BOUNDS_EXT 0x8891 - void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced b/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced deleted file mode 100644 index afafa27f3e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_draw_instanced -http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt -GL_EXT_draw_instanced - void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements b/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements deleted file mode 100644 index 347ce62eb2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_draw_range_elements -http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt -GL_EXT_draw_range_elements - GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 - GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord b/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord deleted file mode 100644 index ac7868aa32..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord +++ /dev/null @@ -1,16 +0,0 @@ -GL_EXT_fog_coord -http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt -GL_EXT_fog_coord - GL_FOG_COORDINATE_SOURCE_EXT 0x8450 - GL_FOG_COORDINATE_EXT 0x8451 - GL_FRAGMENT_DEPTH_EXT 0x8452 - GL_CURRENT_FOG_COORDINATE_EXT 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 - GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - void glFogCoordfEXT (GLfloat coord) - void glFogCoordfvEXT (const GLfloat *coord) - void glFogCoorddEXT (GLdouble coord) - void glFogCoorddvEXT (const GLdouble *coord) - void glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB deleted file mode 100644 index 4ca897b1fd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GL_EXT_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 - GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 b/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 deleted file mode 100644 index f6f6785988..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt -GL_EXT_geometry_shader4 - GL_GEOMETRY_SHADER_EXT 0x8DD9 - GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE - GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA - GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 - GL_LINES_ADJACENCY_EXT 0xA - GL_LINE_STRIP_ADJACENCY_EXT 0xB - GL_TRIANGLES_ADJACENCY_EXT 0xC - GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 - GL_PROGRAM_POINT_SIZE_EXT 0x8642 - void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value) - void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters b/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters deleted file mode 100644 index 9048c98d96..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_gpu_program_parameters -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt -GL_EXT_gpu_program_parameters - void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 b/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 deleted file mode 100644 index 0e89f0db06..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 +++ /dev/null @@ -1,63 +0,0 @@ -GL_EXT_gpu_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt -GL_EXT_gpu_shader4 - GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 - GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 - GL_SAMPLER_BUFFER_EXT 0x8DC2 - GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 - GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 - GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 - GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 - GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 - GL_INT_SAMPLER_1D_EXT 0x8DC9 - GL_INT_SAMPLER_2D_EXT 0x8DCA - GL_INT_SAMPLER_3D_EXT 0x8DCB - GL_INT_SAMPLER_CUBE_EXT 0x8DCC - GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD - GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE - GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF - GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 - GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD - void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params) - void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name) - GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name) - void glUniform1uiEXT (GLint location, GLuint v0) - void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1) - void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2) - void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value) - void glVertexAttribI1iEXT (GLuint index, GLint x) - void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y) - void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z) - void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w) - void glVertexAttribI1uiEXT (GLuint index, GLuint x) - void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y) - void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z) - void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glVertexAttribI1ivEXT (GLuint index, const GLint *v) - void glVertexAttribI2ivEXT (GLuint index, const GLint *v) - void glVertexAttribI3ivEXT (GLuint index, const GLint *v) - void glVertexAttribI4ivEXT (GLuint index, const GLint *v) - void glVertexAttribI1uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI2uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI3uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v) - void glVertexAttribI4svEXT (GLuint index, const GLshort *v) - void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v) - void glVertexAttribI4usvEXT (GLuint index, const GLushort *v) - void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params) - void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float b/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float deleted file mode 100644 index bcb22557d6..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GL_EXT_packed_float - GL_R11F_G11F_B10F_EXT 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B - GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object b/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object deleted file mode 100644 index a7f8f2c80e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_pixel_buffer_object -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt -GL_EXT_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_EXT 0x88EB - GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color b/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color deleted file mode 100644 index e915455003..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color +++ /dev/null @@ -1,27 +0,0 @@ -GL_EXT_secondary_color -http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt -GL_EXT_secondary_color - GL_COLOR_SUM_EXT 0x8458 - GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D - GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bvEXT (const GLbyte *v) - void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dvEXT (const GLdouble *v) - void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fvEXT (const GLfloat *v) - void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue) - void glSecondaryColor3ivEXT (const GLint *v) - void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3svEXT (const GLshort *v) - void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubvEXT (const GLubyte *v) - void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uivEXT (const GLuint *v) - void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usvEXT (const GLushort *v) - void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array deleted file mode 100644 index 11877f0e56..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_texture_array -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt -GL_EXT_texture_array - GL_TEXTURE_1D_ARRAY_EXT 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 - GL_TEXTURE_2D_ARRAY_EXT 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF - GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E - void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object deleted file mode 100644 index c00e1f3367..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_texture_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt -GL_EXT_texture_buffer_object - GL_TEXTURE_BUFFER_EXT 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B - GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc deleted file mode 100644 index ddf8d26449..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_latc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt -GL_EXT_texture_compression_latc - GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 - GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 - GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 - GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc deleted file mode 100644 index 7c5c57ff83..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_rgtc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt -GL_EXT_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC - GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD - GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map deleted file mode 100644 index 5909f4803c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_texture_cube_map -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt -GL_EXT_texture_cube_map - GL_NORMAL_MAP_EXT 0x8511 - GL_REFLECTION_MAP_EXT 0x8512 - GL_TEXTURE_CUBE_MAP_EXT 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp deleted file mode 100644 index 4df0997d74..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_texture_edge_clamp -http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt -GL_EXT_texture_edge_clamp - GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer deleted file mode 100644 index 1c57e40d87..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer +++ /dev/null @@ -1,56 +0,0 @@ -GL_EXT_texture_integer -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt -GL_EXT_texture_integer - GL_RGBA32UI_EXT 0x8D70 - GL_RGB32UI_EXT 0x8D71 - GL_ALPHA32UI_EXT 0x8D72 - GL_INTENSITY32UI_EXT 0x8D73 - GL_LUMINANCE32UI_EXT 0x8D74 - GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 - GL_RGBA16UI_EXT 0x8D76 - GL_RGB16UI_EXT 0x8D77 - GL_ALPHA16UI_EXT 0x8D78 - GL_INTENSITY16UI_EXT 0x8D79 - GL_LUMINANCE16UI_EXT 0x8D7A - GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B - GL_RGBA8UI_EXT 0x8D7C - GL_RGB8UI_EXT 0x8D7D - GL_ALPHA8UI_EXT 0x8D7E - GL_INTENSITY8UI_EXT 0x8D7F - GL_LUMINANCE8UI_EXT 0x8D80 - GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 - GL_RGBA32I_EXT 0x8D82 - GL_RGB32I_EXT 0x8D83 - GL_ALPHA32I_EXT 0x8D84 - GL_INTENSITY32I_EXT 0x8D85 - GL_LUMINANCE32I_EXT 0x8D86 - GL_LUMINANCE_ALPHA32I_EXT 0x8D87 - GL_RGBA16I_EXT 0x8D88 - GL_RGB16I_EXT 0x8D89 - GL_ALPHA16I_EXT 0x8D8A - GL_INTENSITY16I_EXT 0x8D8B - GL_LUMINANCE16I_EXT 0x8D8C - GL_LUMINANCE_ALPHA16I_EXT 0x8D8D - GL_RGBA8I_EXT 0x8D8E - GL_RGB8I_EXT 0x8D8F - GL_ALPHA8I_EXT 0x8D90 - GL_INTENSITY8I_EXT 0x8D91 - GL_LUMINANCE8I_EXT 0x8D92 - GL_LUMINANCE_ALPHA8I_EXT 0x8D93 - GL_RED_INTEGER_EXT 0x8D94 - GL_GREEN_INTEGER_EXT 0x8D95 - GL_BLUE_INTEGER_EXT 0x8D96 - GL_ALPHA_INTEGER_EXT 0x8D97 - GL_RGB_INTEGER_EXT 0x8D98 - GL_RGBA_INTEGER_EXT 0x8D99 - GL_BGR_INTEGER_EXT 0x8D9A - GL_BGRA_INTEGER_EXT 0x8D9B - GL_LUMINANCE_INTEGER_EXT 0x8D9C - GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D - GL_RGBA_INTEGER_MODE_EXT 0x8D9E - void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params) - void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params) - void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params) - void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params) - void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha) - void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle deleted file mode 100644 index 4028a9e671..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_rectangle -http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html -GL_EXT_texture_rectangle - GL_TEXTURE_RECTANGLE_EXT 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent deleted file mode 100644 index 4ff7efcd35..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_shared_exponent -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt -GL_EXT_texture_shared_exponent - GL_RGB9_E5_EXT 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E - GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query b/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query deleted file mode 100644 index 390e6fc0cd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_timer_query -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt -GL_EXT_timer_query - GL_TIME_ELAPSED_EXT 0x88BF - void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) - void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader b/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader deleted file mode 100644 index eb125b6083..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader +++ /dev/null @@ -1,156 +0,0 @@ -GL_EXT_vertex_shader -http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt -GL_EXT_vertex_shader - GL_VERTEX_SHADER_EXT 0x8780 - GL_VERTEX_SHADER_BINDING_EXT 0x8781 - GL_OP_INDEX_EXT 0x8782 - GL_OP_NEGATE_EXT 0x8783 - GL_OP_DOT3_EXT 0x8784 - GL_OP_DOT4_EXT 0x8785 - GL_OP_MUL_EXT 0x8786 - GL_OP_ADD_EXT 0x8787 - GL_OP_MADD_EXT 0x8788 - GL_OP_FRAC_EXT 0x8789 - GL_OP_MAX_EXT 0x878A - GL_OP_MIN_EXT 0x878B - GL_OP_SET_GE_EXT 0x878C - GL_OP_SET_LT_EXT 0x878D - GL_OP_CLAMP_EXT 0x878E - GL_OP_FLOOR_EXT 0x878F - GL_OP_ROUND_EXT 0x8790 - GL_OP_EXP_BASE_2_EXT 0x8791 - GL_OP_LOG_BASE_2_EXT 0x8792 - GL_OP_POWER_EXT 0x8793 - GL_OP_RECIP_EXT 0x8794 - GL_OP_RECIP_SQRT_EXT 0x8795 - GL_OP_SUB_EXT 0x8796 - GL_OP_CROSS_PRODUCT_EXT 0x8797 - GL_OP_MULTIPLY_MATRIX_EXT 0x8798 - GL_OP_MOV_EXT 0x8799 - GL_OUTPUT_VERTEX_EXT 0x879A - GL_OUTPUT_COLOR0_EXT 0x879B - GL_OUTPUT_COLOR1_EXT 0x879C - GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D - GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E - GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F - GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 - GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 - GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 - GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 - GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 - GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 - GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 - GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 - GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 - GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 - GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA - GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB - GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC - GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD - GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE - GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF - GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 - GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 - GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 - GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 - GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 - GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 - GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 - GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 - GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 - GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 - GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA - GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB - GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC - GL_OUTPUT_FOG_EXT 0x87BD - GL_SCALAR_EXT 0x87BE - GL_VECTOR_EXT 0x87BF - GL_MATRIX_EXT 0x87C0 - GL_VARIANT_EXT 0x87C1 - GL_INVARIANT_EXT 0x87C2 - GL_LOCAL_CONSTANT_EXT 0x87C3 - GL_LOCAL_EXT 0x87C4 - GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 - GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 - GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 - GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 - GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 - GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA - GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB - GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE - GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF - GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 - GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 - GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 - GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 - GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 - GL_X_EXT 0x87D5 - GL_Y_EXT 0x87D6 - GL_Z_EXT 0x87D7 - GL_W_EXT 0x87D8 - GL_NEGATIVE_X_EXT 0x87D9 - GL_NEGATIVE_Y_EXT 0x87DA - GL_NEGATIVE_Z_EXT 0x87DB - GL_NEGATIVE_W_EXT 0x87DC - GL_ZERO_EXT 0x87DD - GL_ONE_EXT 0x87DE - GL_NEGATIVE_ONE_EXT 0x87DF - GL_NORMALIZED_RANGE_EXT 0x87E0 - GL_FULL_RANGE_EXT 0x87E1 - GL_CURRENT_VERTEX_EXT 0x87E2 - GL_MVP_MATRIX_EXT 0x87E3 - GL_VARIANT_VALUE_EXT 0x87E4 - GL_VARIANT_DATATYPE_EXT 0x87E5 - GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 - GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 - GL_VARIANT_ARRAY_EXT 0x87E8 - GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 - GL_INVARIANT_VALUE_EXT 0x87EA - GL_INVARIANT_DATATYPE_EXT 0x87EB - GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC - GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - - void glBeginVertexShaderEXT (void) - void glEndVertexShaderEXT (void) - void glBindVertexShaderEXT (GLuint id) - GLuint glGenVertexShadersEXT (GLuint range) - void glDeleteVertexShaderEXT (GLuint id) - void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) - void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) - void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) - void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glInsertComponentEXT (GLuint res, GLuint src, GLuint num) - void glExtractComponentEXT (GLuint res, GLuint src, GLuint num) - GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components) - void glSetInvariantEXT (GLuint id, GLenum type, GLvoid *addr) - void glSetLocalConstantEXT (GLuint id, GLenum type, GLvoid *addr) - void glVariantbvEXT (GLuint id, GLbyte *addr) - void glVariantsvEXT (GLuint id, GLshort *addr) - void glVariantivEXT (GLuint id, GLint *addr) - void glVariantfvEXT (GLuint id, GLfloat *addr) - void glVariantdvEXT (GLuint id, GLdouble *addr) - void glVariantubvEXT (GLuint id, GLubyte *addr) - void glVariantusvEXT (GLuint id, GLushort *addr) - void glVariantuivEXT (GLuint id, GLuint *addr) - void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, GLvoid *addr) - void glEnableVariantClientStateEXT (GLuint id) - void glDisableVariantClientStateEXT (GLuint id) - GLuint glBindLightParameterEXT (GLenum light, GLenum value) - GLuint glBindMaterialParameterEXT (GLenum face, GLenum value) - GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) - GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value) - GLuint glBindParameterEXT (GLenum value) - GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap) - void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid **data) - void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) diff --git a/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region b/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region deleted file mode 100644 index adc6c6f6ab..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region +++ /dev/null @@ -1,12 +0,0 @@ -GL_KTX_buffer_region - -GL_KTX_buffer_region - GL_KTX_FRONT_REGION 0x0 - GL_KTX_BACK_REGION 0x1 - GL_KTX_Z_REGION 0x2 - GL_KTX_STENCIL_REGION 0x3 - GLuint glBufferRegionEnabled (void) - GLuint glNewBufferRegion (GLenum region) - void glDeleteBufferRegion (GLenum region) - void glReadBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height) - void glDrawBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest) diff --git a/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info b/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info deleted file mode 100644 index 6dd7bdddd3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info +++ /dev/null @@ -1,8 +0,0 @@ -GL_NVX_gpu_memory_info -http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt -GL_NVX_gpu_memory_info - GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 - GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 - GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 - GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A - GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float b/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float deleted file mode 100644 index 493b245589..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_depth_buffer_float -http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt -GL_NV_depth_buffer_float - GL_DEPTH_COMPONENT32F_NV 0x8DAB - GL_DEPTH32F_STENCIL8_NV 0x8DAC - GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD - GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - void glDepthRangedNV (GLdouble zNear, GLdouble zFar) - void glClearDepthdNV (GLdouble depth) - void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped b/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped deleted file mode 100644 index 62b4e59fa7..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_depth_range_unclamped - -GL_NV_depth_range_unclamped - GL_SAMPLE_COUNT_BITS_NV 0x8864 - GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 - GL_QUERY_RESULT_NV 0x8866 - GL_QUERY_RESULT_AVAILABLE_NV 0x8867 - GL_SAMPLE_COUNT_NV 0x8914 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 deleted file mode 100644 index 7fb59eea1b..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_fragment_program2 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt -GL_NV_fragment_program2 - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 - GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 - GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 deleted file mode 100644 index 0ae2598795..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt -GL_NV_gpu_program4 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option deleted file mode 100644 index 7af9731bd8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt -GL_NV_fragment_program_option diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage b/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage deleted file mode 100644 index d1d066056c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_framebuffer_multisample_coverage -http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt -GL_NV_framebuffer_multisample_coverage - GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB - GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 - GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 - GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 deleted file mode 100644 index 3f82b195d3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_geometry_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt -GL_NV_gpu_program4 - GL_GEOMETRY_PROGRAM_NV 0x8C26 - GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 - GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - void glProgramVertexLimitNV (GLenum target, GLint limit) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 b/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 deleted file mode 100644 index 2040c0dbb3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt -GL_NV_geometry_shader4 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 deleted file mode 100644 index 030f68e1cc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 +++ /dev/null @@ -1,23 +0,0 @@ -GL_NV_gpu_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt -GL_NV_gpu_program4 - GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 - GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 - GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 - GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 - GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 - GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 - GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) - void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 b/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 deleted file mode 100644 index 18bb28fed0..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_gpu_program5 -http://www.opengl.org/registry/specs/NV/gpu_program5.txt -GL_NV_gpu_program5 - GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C - GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object b/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object deleted file mode 100644 index d2525a1766..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_parameter_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt -GL_NV_parameter_buffer_object - GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 - GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 - GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 - GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 - void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params) - void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params) - void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering b/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering deleted file mode 100644 index 42e1336327..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering +++ /dev/null @@ -1,180 +0,0 @@ -GL_NV_path_rendering -http://www.opengl.org/registry/specs/NV/path_rendering.txt -GL_NV_path_rendering - GL_CLOSE_PATH_NV 0x00 - GL_BOLD_BIT_NV 0x01 - GL_GLYPH_WIDTH_BIT_NV 0x01 - GL_GLYPH_HEIGHT_BIT_NV 0x02 - GL_ITALIC_BIT_NV 0x02 - GL_MOVE_TO_NV 0x02 - GL_RELATIVE_MOVE_TO_NV 0x03 - GL_LINE_TO_NV 0x04 - GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 - GL_RELATIVE_LINE_TO_NV 0x05 - GL_HORIZONTAL_LINE_TO_NV 0x06 - GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 - GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 - GL_VERTICAL_LINE_TO_NV 0x08 - GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 - GL_QUADRATIC_CURVE_TO_NV 0x0A - GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B - GL_CUBIC_CURVE_TO_NV 0x0C - GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D - GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E - GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F - GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 - GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 - GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 - GL_SMALL_CCW_ARC_TO_NV 0x12 - GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 - GL_SMALL_CW_ARC_TO_NV 0x14 - GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 - GL_LARGE_CCW_ARC_TO_NV 0x16 - GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 - GL_LARGE_CW_ARC_TO_NV 0x18 - GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 - GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 - GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 - GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 - GL_RESTART_PATH_NV 0xF0 - GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 - GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 - GL_RECT_NV 0xF6 - GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 - GL_CIRCULAR_CW_ARC_TO_NV 0xFA - GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC - GL_ARC_TO_NV 0xFE - GL_RELATIVE_ARC_TO_NV 0xFF - GL_GLYPH_HAS_KERNING_BIT_NV 0x100 - GL_PRIMARY_COLOR 0x8577 - GL_PATH_FORMAT_SVG_NV 0x9070 - GL_PATH_FORMAT_PS_NV 0x9071 - GL_STANDARD_FONT_NAME_NV 0x9072 - GL_SYSTEM_FONT_NAME_NV 0x9073 - GL_FILE_NAME_NV 0x9074 - GL_PATH_STROKE_WIDTH_NV 0x9075 - GL_PATH_END_CAPS_NV 0x9076 - GL_PATH_INITIAL_END_CAP_NV 0x9077 - GL_PATH_TERMINAL_END_CAP_NV 0x9078 - GL_PATH_JOIN_STYLE_NV 0x9079 - GL_PATH_MITER_LIMIT_NV 0x907A - GL_PATH_DASH_CAPS_NV 0x907B - GL_PATH_INITIAL_DASH_CAP_NV 0x907C - GL_PATH_TERMINAL_DASH_CAP_NV 0x907D - GL_PATH_DASH_OFFSET_NV 0x907E - GL_PATH_CLIENT_LENGTH_NV 0x907F - GL_PATH_FILL_MODE_NV 0x9080 - GL_PATH_FILL_MASK_NV 0x9081 - GL_PATH_FILL_COVER_MODE_NV 0x9082 - GL_PATH_STROKE_COVER_MODE_NV 0x9083 - GL_PATH_STROKE_MASK_NV 0x9084 - GL_COUNT_UP_NV 0x9088 - GL_COUNT_DOWN_NV 0x9089 - GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A - GL_CONVEX_HULL_NV 0x908B - GL_BOUNDING_BOX_NV 0x908D - GL_TRANSLATE_X_NV 0x908E - GL_TRANSLATE_Y_NV 0x908F - GL_TRANSLATE_2D_NV 0x9090 - GL_TRANSLATE_3D_NV 0x9091 - GL_AFFINE_2D_NV 0x9092 - GL_AFFINE_3D_NV 0x9094 - GL_TRANSPOSE_AFFINE_2D_NV 0x9096 - GL_TRANSPOSE_AFFINE_3D_NV 0x9098 - GL_UTF8_NV 0x909A - GL_UTF16_NV 0x909B - GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C - GL_PATH_COMMAND_COUNT_NV 0x909D - GL_PATH_COORD_COUNT_NV 0x909E - GL_PATH_DASH_ARRAY_COUNT_NV 0x909F - GL_PATH_COMPUTED_LENGTH_NV 0x90A0 - GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 - GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 - GL_SQUARE_NV 0x90A3 - GL_ROUND_NV 0x90A4 - GL_TRIANGULAR_NV 0x90A5 - GL_BEVEL_NV 0x90A6 - GL_MITER_REVERT_NV 0x90A7 - GL_MITER_TRUNCATE_NV 0x90A8 - GL_SKIP_MISSING_GLYPH_NV 0x90A9 - GL_USE_MISSING_GLYPH_NV 0x90AA - GL_PATH_ERROR_POSITION_NV 0x90AB - GL_PATH_FOG_GEN_MODE_NV 0x90AC - GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD - GL_ADJACENT_PAIRS_NV 0x90AE - GL_FIRST_TO_REST_NV 0x90AF - GL_PATH_GEN_MODE_NV 0x90B0 - GL_PATH_GEN_COEFF_NV 0x90B1 - GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 - GL_PATH_GEN_COMPONENTS_NV 0x90B3 - GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 - GL_MOVE_TO_RESETS_NV 0x90B5 - GL_MOVE_TO_CONTINUES_NV 0x90B6 - GL_PATH_STENCIL_FUNC_NV 0x90B7 - GL_PATH_STENCIL_REF_NV 0x90B8 - GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 - GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD - GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE - GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF - GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 - GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 - GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 - GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 - GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 - GL_FONT_ASCENDER_BIT_NV 0x00200000 - GL_FONT_DESCENDER_BIT_NV 0x00400000 - GL_FONT_HEIGHT_BIT_NV 0x00800000 - GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 - GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 - GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 - GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 - GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - void glCopyPathNV (GLuint resultPath, GLuint srcPath) - void glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverFillPathNV (GLuint path, GLenum coverMode) - void glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverStrokePathNV (GLuint name, GLenum coverMode) - void glDeletePathsNV (GLuint path, GLsizei range) - GLuint glGenPathsNV (GLsizei range) - void glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat* value) - void glGetPathColorGenivNV (GLenum color, GLenum pname, GLint* value) - void glGetPathCommandsNV (GLuint name, GLubyte* commands) - void glGetPathCoordsNV (GLuint name, GLfloat* coords) - void glGetPathDashArrayNV (GLuint name, GLfloat* dashArray) - GLfloat glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments) - void glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics) - void glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics) - void glGetPathParameterfvNV (GLuint name, GLenum param, GLfloat* value) - void glGetPathParameterivNV (GLuint name, GLenum param, GLint* value) - void glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing) - void glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat* value) - void glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint* value) - void glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) - GLboolean glIsPathNV (GLuint path) - GLboolean glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y) - GLboolean glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y) - void glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs) - void glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathCoverDepthFuncNV (GLenum zfunc) - void glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat* dashArray) - void glPathFogGenNV (GLenum genMode) - void glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathParameterfNV (GLuint path, GLenum pname, GLfloat value) - void glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat* value) - void glPathParameteriNV (GLuint path, GLenum pname, GLint value) - void glPathParameterivNV (GLuint path, GLenum pname, const GLint* value) - void glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units) - void glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask) - void glPathStringNV (GLuint path, GLenum format, GLsizei length, const void* pathString) - void glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs) - GLboolean glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY) - void glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask) - void glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask) - void glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues) - void glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_present_video b/Engine/lib/glew/auto/core/gl/GL_NV_present_video deleted file mode 100644 index 893c74c8e9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_present_video +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_present_video -http://www.opengl.org/registry/specs/NV/present_video.txt -GL_NV_present_video - GL_FRAME_NV 0x8E26 - GL_FIELDS_NV 0x8E27 - GL_CURRENT_TIME_NV 0x8E28 - GL_NUM_FILL_STREAMS_NV 0x8E29 - GL_PRESENT_TIME_NV 0x8E2A - GL_PRESENT_DURATION_NV 0x8E2B - void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params) - void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params) - void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params) - void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params) - void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) - void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 b/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 deleted file mode 100644 index b663c974dc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_tessellation_program5 -http://www.opengl.org/registry/specs/NV/tessellation_program5.txt -GL_NV_gpu_program5 - GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 - GL_TESS_CONTROL_PROGRAM_NV 0x891E - GL_TESS_EVALUATION_PROGRAM_NV 0x891F - GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 - GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback b/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback deleted file mode 100644 index fce47571e8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback +++ /dev/null @@ -1,39 +0,0 @@ -GL_NV_transform_feedback -http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt -GL_NV_transform_feedback - GL_BACK_PRIMARY_COLOR_NV 0x8C77 - GL_BACK_SECONDARY_COLOR_NV 0x8C78 - GL_TEXTURE_COORD_NV 0x8C79 - GL_CLIP_DISTANCE_NV 0x8C7A - GL_VERTEX_ID_NV 0x8C7B - GL_PRIMITIVE_ID_NV 0x8C7C - GL_GENERIC_ATTRIB_NV 0x8C7D - GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 - GL_ACTIVE_VARYINGS_NV 0x8C81 - GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 - GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 - GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 - GL_PRIMITIVES_GENERATED_NV 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 - GL_RASTERIZER_DISCARD_NV 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B - GL_INTERLEAVED_ATTRIBS_NV 0x8C8C - GL_SEPARATE_ATTRIBS_NV 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - void glBeginTransformFeedbackNV (GLenum primitiveMode) - void glEndTransformFeedbackNV (void) - void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode) - void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer) - void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode) - void glActiveVaryingNV (GLuint program, const GLchar *name) - GLint glGetVaryingLocationNV (GLuint program, const GLchar *name) - void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) - void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop b/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop deleted file mode 100644 index a2b68b2a68..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_vdpau_interop -http://www.opengl.org/registry/specs/NV/vdpau_interop.txt -GL_NV_vdpau_interop - GL_SURFACE_STATE_NV 0x86EB - GL_SURFACE_REGISTERED_NV 0x86FD - GL_SURFACE_MAPPED_NV 0x8700 - GL_WRITE_DISCARD_NV 0x88BE - void glVDPAUFiniNV (void) - void glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values) - void glVDPAUInitNV (const void* vdpDevice, const GLvoid*getProcAddress) - void glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface) - void glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) - GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - void glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access) - void glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) - void glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface) - typedef GLintptr GLvdpauSurfaceNV diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option deleted file mode 100644 index 1fecc4c040..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_vertex_program2_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt -GL_NV_vertex_program2_option - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 deleted file mode 100644 index 6510e0649c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program3 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt -GL_NV_vertex_program3 - MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 deleted file mode 100644 index c51d08a5cd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt -GL_NV_gpu_program4 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow b/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow deleted file mode 100644 index 2b34cc83a9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_shadow -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt -GL_SGIX_shadow - GL_TEXTURE_COMPARE_SGIX 0x819A - GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B - GL_TEXTURE_LEQUAL_R_SGIX 0x819C - GL_TEXTURE_GEQUAL_R_SGIX 0x819D diff --git a/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels b/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels deleted file mode 100644 index faa55f972c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_read_video_pixels -http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt -GL_SUN_read_video_pixels - void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 deleted file mode 100644 index 977fec03ce..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 +++ /dev/null @@ -1,49 +0,0 @@ -GL_VERSION_1_2 -http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf - - GL_UNSIGNED_BYTE_3_3_2 0x8032 - GL_UNSIGNED_SHORT_4_4_4_4 0x8033 - GL_UNSIGNED_SHORT_5_5_5_1 0x8034 - GL_UNSIGNED_INT_8_8_8_8 0x8035 - GL_UNSIGNED_INT_10_10_10_2 0x8036 - GL_RESCALE_NORMAL 0x803A - GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 - GL_UNSIGNED_SHORT_5_6_5 0x8363 - GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 - GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 - GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 - GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 - GL_BGR 0x80E0 - GL_BGRA 0x80E1 - GL_MAX_ELEMENTS_VERTICES 0x80E8 - GL_MAX_ELEMENTS_INDICES 0x80E9 - GL_CLAMP_TO_EDGE 0x812F - GL_TEXTURE_MIN_LOD 0x813A - GL_TEXTURE_MAX_LOD 0x813B - GL_TEXTURE_BASE_LEVEL 0x813C - GL_TEXTURE_MAX_LEVEL 0x813D - GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 - GL_SINGLE_COLOR 0x81F9 - GL_SEPARATE_SPECULAR_COLOR 0x81FA - GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 - GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 - GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 - GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 - GL_ALIASED_POINT_SIZE_RANGE 0x846D - GL_ALIASED_LINE_WIDTH_RANGE 0x846E - GL_PACK_SKIP_IMAGES 0x806B - GL_PACK_IMAGE_HEIGHT 0x806C - GL_UNPACK_SKIP_IMAGES 0x806D - GL_UNPACK_IMAGE_HEIGHT 0x806E - GL_TEXTURE_3D 0x806F - GL_PROXY_TEXTURE_3D 0x8070 - GL_TEXTURE_DEPTH 0x8071 - GL_TEXTURE_WRAP_R 0x8072 - GL_MAX_3D_TEXTURE_SIZE 0x8073 - GL_TEXTURE_BINDING_3D 0x806A - GL_MAX_ELEMENTS_VERTICES 0x80E8 - GL_MAX_ELEMENTS_INDICES 0x80E9 - void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) - void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 deleted file mode 100644 index a6ecf242c2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_VERSION_1_2_1 -http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 deleted file mode 100644 index 737ad7c0d3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 +++ /dev/null @@ -1,146 +0,0 @@ -GL_VERSION_1_3 -http://www.opengl.org/documentation/specs/version1.3/glspec13.pdf - - GL_TEXTURE0 0x84C0 - GL_TEXTURE1 0x84C1 - GL_TEXTURE2 0x84C2 - GL_TEXTURE3 0x84C3 - GL_TEXTURE4 0x84C4 - GL_TEXTURE5 0x84C5 - GL_TEXTURE6 0x84C6 - GL_TEXTURE7 0x84C7 - GL_TEXTURE8 0x84C8 - GL_TEXTURE9 0x84C9 - GL_TEXTURE10 0x84CA - GL_TEXTURE11 0x84CB - GL_TEXTURE12 0x84CC - GL_TEXTURE13 0x84CD - GL_TEXTURE14 0x84CE - GL_TEXTURE15 0x84CF - GL_TEXTURE16 0x84D0 - GL_TEXTURE17 0x84D1 - GL_TEXTURE18 0x84D2 - GL_TEXTURE19 0x84D3 - GL_TEXTURE20 0x84D4 - GL_TEXTURE21 0x84D5 - GL_TEXTURE22 0x84D6 - GL_TEXTURE23 0x84D7 - GL_TEXTURE24 0x84D8 - GL_TEXTURE25 0x84D9 - GL_TEXTURE26 0x84DA - GL_TEXTURE27 0x84DB - GL_TEXTURE28 0x84DC - GL_TEXTURE29 0x84DD - GL_TEXTURE30 0x84DE - GL_TEXTURE31 0x84DF - GL_ACTIVE_TEXTURE 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE 0x84E1 - GL_MAX_TEXTURE_UNITS 0x84E2 - GL_NORMAL_MAP 0x8511 - GL_REFLECTION_MAP 0x8512 - GL_TEXTURE_CUBE_MAP 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A - GL_PROXY_TEXTURE_CUBE_MAP 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - GL_COMPRESSED_ALPHA 0x84E9 - GL_COMPRESSED_LUMINANCE 0x84EA - GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB - GL_COMPRESSED_INTENSITY 0x84EC - GL_COMPRESSED_RGB 0x84ED - GL_COMPRESSED_RGBA 0x84EE - GL_TEXTURE_COMPRESSION_HINT 0x84EF - GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 - GL_TEXTURE_COMPRESSED 0x86A1 - GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 - GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - GL_MULTISAMPLE 0x809D - GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E - GL_SAMPLE_ALPHA_TO_ONE 0x809F - GL_SAMPLE_COVERAGE 0x80A0 - GL_SAMPLE_BUFFERS 0x80A8 - GL_SAMPLES 0x80A9 - GL_SAMPLE_COVERAGE_VALUE 0x80AA - GL_SAMPLE_COVERAGE_INVERT 0x80AB - GL_MULTISAMPLE_BIT 0x20000000 - GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 - GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 - GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 - GL_TRANSPOSE_COLOR_MATRIX 0x84E6 - GL_COMBINE 0x8570 - GL_COMBINE_RGB 0x8571 - GL_COMBINE_ALPHA 0x8572 - GL_SOURCE0_RGB 0x8580 - GL_SOURCE1_RGB 0x8581 - GL_SOURCE2_RGB 0x8582 - GL_SOURCE0_ALPHA 0x8588 - GL_SOURCE1_ALPHA 0x8589 - GL_SOURCE2_ALPHA 0x858A - GL_OPERAND0_RGB 0x8590 - GL_OPERAND1_RGB 0x8591 - GL_OPERAND2_RGB 0x8592 - GL_OPERAND0_ALPHA 0x8598 - GL_OPERAND1_ALPHA 0x8599 - GL_OPERAND2_ALPHA 0x859A - GL_RGB_SCALE 0x8573 - GL_ADD_SIGNED 0x8574 - GL_INTERPOLATE 0x8575 - GL_SUBTRACT 0x84E7 - GL_CONSTANT 0x8576 - GL_PRIMARY_COLOR 0x8577 - GL_PREVIOUS 0x8578 - GL_DOT3_RGB 0x86AE - GL_DOT3_RGBA 0x86AF - GL_CLAMP_TO_BORDER 0x812D - - void glActiveTexture (GLenum texture) - void glClientActiveTexture (GLenum texture) - void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glGetCompressedTexImage (GLenum target, GLint lod, GLvoid *img) - void glLoadTransposeMatrixd (const GLdouble m[16]) - void glLoadTransposeMatrixf (const GLfloat m[16]) - void glMultTransposeMatrixd (const GLdouble m[16]) - void glMultTransposeMatrixf (const GLfloat m[16]) - void glMultiTexCoord1d (GLenum target, GLdouble s) - void glMultiTexCoord1dv (GLenum target, const GLdouble *v) - void glMultiTexCoord1f (GLenum target, GLfloat s) - void glMultiTexCoord1fv (GLenum target, const GLfloat *v) - void glMultiTexCoord1i (GLenum target, GLint s) - void glMultiTexCoord1iv (GLenum target, const GLint *v) - void glMultiTexCoord1s (GLenum target, GLshort s) - void glMultiTexCoord1sv (GLenum target, const GLshort *v) - void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dv (GLenum target, const GLdouble *v) - void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fv (GLenum target, const GLfloat *v) - void glMultiTexCoord2i (GLenum target, GLint s, GLint t) - void glMultiTexCoord2iv (GLenum target, const GLint *v) - void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2sv (GLenum target, const GLshort *v) - void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dv (GLenum target, const GLdouble *v) - void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fv (GLenum target, const GLfloat *v) - void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3iv (GLenum target, const GLint *v) - void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3sv (GLenum target, const GLshort *v) - void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dv (GLenum target, const GLdouble *v) - void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fv (GLenum target, const GLfloat *v) - void glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4iv (GLenum target, const GLint *v) - void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4sv (GLenum target, const GLshort *v) - void glSampleCoverage (GLclampf value, GLboolean invert) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 deleted file mode 100644 index ed5b4e8263..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 +++ /dev/null @@ -1,89 +0,0 @@ -GL_VERSION_1_4 -http://www.opengl.org/documentation/specs/version1.4/glspec14.pdf - - GL_GENERATE_MIPMAP 0x8191 - GL_GENERATE_MIPMAP_HINT 0x8192 - GL_DEPTH_COMPONENT16 0x81A5 - GL_DEPTH_COMPONENT24 0x81A6 - GL_DEPTH_COMPONENT32 0x81A7 - GL_TEXTURE_DEPTH_SIZE 0x884A - GL_DEPTH_TEXTURE_MODE 0x884B - GL_TEXTURE_COMPARE_MODE 0x884C - GL_TEXTURE_COMPARE_FUNC 0x884D - GL_COMPARE_R_TO_TEXTURE 0x884E - GL_FOG_COORDINATE_SOURCE 0x8450 - GL_FOG_COORDINATE 0x8451 - GL_FRAGMENT_DEPTH 0x8452 - GL_CURRENT_FOG_COORDINATE 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 - GL_FOG_COORDINATE_ARRAY 0x8457 - GL_POINT_SIZE_MIN 0x8126 - GL_POINT_SIZE_MAX 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE 0x8128 - GL_POINT_DISTANCE_ATTENUATION 0x8129 - GL_COLOR_SUM 0x8458 - GL_CURRENT_SECONDARY_COLOR 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D - GL_SECONDARY_COLOR_ARRAY 0x845E - GL_BLEND_DST_RGB 0x80C8 - GL_BLEND_SRC_RGB 0x80C9 - GL_BLEND_DST_ALPHA 0x80CA - GL_BLEND_SRC_ALPHA 0x80CB - GL_INCR_WRAP 0x8507 - GL_DECR_WRAP 0x8508 - GL_TEXTURE_FILTER_CONTROL 0x8500 - GL_TEXTURE_LOD_BIAS 0x8501 - GL_MAX_TEXTURE_LOD_BIAS 0x84FD - GL_MIRRORED_REPEAT 0x8370 - void glBlendEquation (GLenum mode) - void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) - void glFogCoordf (GLfloat coord) - void glFogCoordfv (const GLfloat *coord) - void glFogCoordd (GLdouble coord) - void glFogCoorddv (const GLdouble *coord) - void glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer) - void glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) - void glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei drawcount) - void glPointParameteri (GLenum pname, GLint param) - void glPointParameteriv (GLenum pname, const GLint *params) - void glPointParameterf (GLenum pname, GLfloat param) - void glPointParameterfv (GLenum pname, const GLfloat *params) - void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bv (const GLbyte *v) - void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dv (const GLdouble *v) - void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fv (const GLfloat *v) - void glSecondaryColor3i (GLint red, GLint green, GLint blue) - void glSecondaryColor3iv (const GLint *v) - void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3sv (const GLshort *v) - void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubv (const GLubyte *v) - void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uiv (const GLuint *v) - void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usv (const GLushort *v) - void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) - void glWindowPos2d (GLdouble x, GLdouble y) - void glWindowPos2f (GLfloat x, GLfloat y) - void glWindowPos2i (GLint x, GLint y) - void glWindowPos2s (GLshort x, GLshort y) - void glWindowPos2dv (const GLdouble *p) - void glWindowPos2fv (const GLfloat *p) - void glWindowPos2iv (const GLint *p) - void glWindowPos2sv (const GLshort *p) - void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3i (GLint x, GLint y, GLint z) - void glWindowPos3s (GLshort x, GLshort y, GLshort z) - void glWindowPos3dv (const GLdouble *p) - void glWindowPos3fv (const GLfloat *p) - void glWindowPos3iv (const GLint *p) - void glWindowPos3sv (const GLshort *p) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 deleted file mode 100644 index d1ec8d4b27..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 +++ /dev/null @@ -1,74 +0,0 @@ -GL_VERSION_1_5 -http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf - - GL_BUFFER_SIZE 0x8764 - GL_BUFFER_USAGE 0x8765 - GL_QUERY_COUNTER_BITS 0x8864 - GL_CURRENT_QUERY 0x8865 - GL_QUERY_RESULT 0x8866 - GL_QUERY_RESULT_AVAILABLE 0x8867 - GL_ARRAY_BUFFER 0x8892 - GL_ELEMENT_ARRAY_BUFFER 0x8893 - GL_ARRAY_BUFFER_BINDING 0x8894 - GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 - GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 - GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 - GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D - GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - GL_READ_ONLY 0x88B8 - GL_WRITE_ONLY 0x88B9 - GL_READ_WRITE 0x88BA - GL_BUFFER_ACCESS 0x88BB - GL_BUFFER_MAPPED 0x88BC - GL_BUFFER_MAP_POINTER 0x88BD - GL_STREAM_DRAW 0x88E0 - GL_STREAM_READ 0x88E1 - GL_STREAM_COPY 0x88E2 - GL_STATIC_DRAW 0x88E4 - GL_STATIC_READ 0x88E5 - GL_STATIC_COPY 0x88E6 - GL_DYNAMIC_DRAW 0x88E8 - GL_DYNAMIC_READ 0x88E9 - GL_DYNAMIC_COPY 0x88EA - GL_SAMPLES_PASSED 0x8914 - GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE - GL_FOG_COORD GL_FOG_COORDINATE - GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE - GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE - GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE - GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER - GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY - GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING - GL_SRC0_RGB GL_SOURCE0_RGB - GL_SRC1_RGB GL_SOURCE1_RGB - GL_SRC2_RGB GL_SOURCE2_RGB - GL_SRC0_ALPHA GL_SOURCE0_ALPHA - GL_SRC1_ALPHA GL_SOURCE1_ALPHA - GL_SRC2_ALPHA GL_SOURCE2_ALPHA - void glGenQueries (GLsizei n, GLuint* ids) - void glDeleteQueries (GLsizei n, const GLuint* ids) - GLboolean glIsQuery (GLuint id) - void glBeginQuery (GLenum target, GLuint id) - void glEndQuery (GLenum target) - void glGetQueryiv (GLenum target, GLenum pname, GLint* params) - void glGetQueryObjectiv (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params) - void glBindBuffer (GLenum target, GLuint buffer) - void glDeleteBuffers (GLsizei n, const GLuint* buffers) - void glGenBuffers (GLsizei n, GLuint* buffers) - GLboolean glIsBuffer (GLuint buffer) - void glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) - void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) - void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) - GLvoid* glMapBuffer (GLenum target, GLenum access) - GLboolean glUnmapBuffer (GLenum target) - void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params) - void glGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params) - typedef ptrdiff_t GLsizeiptr - typedef ptrdiff_t GLintptr diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 deleted file mode 100644 index 2b65bd8d6c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 +++ /dev/null @@ -1,180 +0,0 @@ -GL_VERSION_2_0 -http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf - - GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION - GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 - GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 - GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 - GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 - GL_CURRENT_VERTEX_ATTRIB 0x8626 - GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 - GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 - GL_STENCIL_BACK_FUNC 0x8800 - GL_STENCIL_BACK_FAIL 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 - GL_MAX_DRAW_BUFFERS 0x8824 - GL_DRAW_BUFFER0 0x8825 - GL_DRAW_BUFFER1 0x8826 - GL_DRAW_BUFFER2 0x8827 - GL_DRAW_BUFFER3 0x8828 - GL_DRAW_BUFFER4 0x8829 - GL_DRAW_BUFFER5 0x882A - GL_DRAW_BUFFER6 0x882B - GL_DRAW_BUFFER7 0x882C - GL_DRAW_BUFFER8 0x882D - GL_DRAW_BUFFER9 0x882E - GL_DRAW_BUFFER10 0x882F - GL_DRAW_BUFFER11 0x8830 - GL_DRAW_BUFFER12 0x8831 - GL_DRAW_BUFFER13 0x8832 - GL_DRAW_BUFFER14 0x8833 - GL_DRAW_BUFFER15 0x8834 - GL_BLEND_EQUATION_ALPHA 0x883D - GL_POINT_SPRITE 0x8861 - GL_COORD_REPLACE 0x8862 - GL_MAX_VERTEX_ATTRIBS 0x8869 - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A - GL_MAX_TEXTURE_COORDS 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 - GL_FRAGMENT_SHADER 0x8B30 - GL_VERTEX_SHADER 0x8B31 - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 - GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A - GL_MAX_VARYING_FLOATS 0x8B4B - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D - GL_SHADER_TYPE 0x8B4F - GL_FLOAT_VEC2 0x8B50 - GL_FLOAT_VEC3 0x8B51 - GL_FLOAT_VEC4 0x8B52 - GL_INT_VEC2 0x8B53 - GL_INT_VEC3 0x8B54 - GL_INT_VEC4 0x8B55 - GL_BOOL 0x8B56 - GL_BOOL_VEC2 0x8B57 - GL_BOOL_VEC3 0x8B58 - GL_BOOL_VEC4 0x8B59 - GL_FLOAT_MAT2 0x8B5A - GL_FLOAT_MAT3 0x8B5B - GL_FLOAT_MAT4 0x8B5C - GL_SAMPLER_1D 0x8B5D - GL_SAMPLER_2D 0x8B5E - GL_SAMPLER_3D 0x8B5F - GL_SAMPLER_CUBE 0x8B60 - GL_SAMPLER_1D_SHADOW 0x8B61 - GL_SAMPLER_2D_SHADOW 0x8B62 - GL_DELETE_STATUS 0x8B80 - GL_COMPILE_STATUS 0x8B81 - GL_LINK_STATUS 0x8B82 - GL_VALIDATE_STATUS 0x8B83 - GL_INFO_LOG_LENGTH 0x8B84 - GL_ATTACHED_SHADERS 0x8B85 - GL_ACTIVE_UNIFORMS 0x8B86 - GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 - GL_SHADER_SOURCE_LENGTH 0x8B88 - GL_ACTIVE_ATTRIBUTES 0x8B89 - GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A - GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B - GL_SHADING_LANGUAGE_VERSION 0x8B8C - GL_CURRENT_PROGRAM 0x8B8D - GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 - GL_LOWER_LEFT 0x8CA1 - GL_UPPER_LEFT 0x8CA2 - GL_STENCIL_BACK_REF 0x8CA3 - GL_STENCIL_BACK_VALUE_MASK 0x8CA4 - GL_STENCIL_BACK_WRITEMASK 0x8CA5 - void glBlendEquationSeparate (GLenum, GLenum) - void glDrawBuffers (GLsizei n, const GLenum* bufs) - void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) - void glStencilMaskSeparate (GLenum, GLuint) - void glAttachShader (GLuint program, GLuint shader) - void glBindAttribLocation (GLuint program, GLuint index, const GLchar* name) - void glCompileShader (GLuint shader) - GLuint glCreateProgram (void) - GLuint glCreateShader (GLenum type) - void glDeleteProgram (GLuint program) - void glDeleteShader (GLuint shader) - void glDetachShader (GLuint program, GLuint shader) - void glDisableVertexAttribArray (GLuint) - void glEnableVertexAttribArray (GLuint) - void glGetActiveAttrib (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) - void glGetActiveUniform (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) - void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders) - GLint glGetAttribLocation (GLuint program, const GLchar* name) - void glGetProgramiv (GLuint program, GLenum pname, GLint* param) - void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) - void glGetShaderiv (GLuint shader, GLenum pname, GLint* param) - void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) - void glShaderSource (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths) - GLint glGetUniformLocation (GLuint program, const GLchar* name) - void glGetUniformfv (GLuint program, GLint location, GLfloat* params) - void glGetUniformiv (GLuint program, GLint location, GLint* params) - void glGetVertexAttribdv (GLuint, GLenum, GLdouble*) - void glGetVertexAttribfv (GLuint, GLenum, GLfloat*) - void glGetVertexAttribiv (GLuint, GLenum, GLint*) - void glGetVertexAttribPointerv (GLuint, GLenum, GLvoid**) - GLboolean glIsProgram (GLuint program) - GLboolean glIsShader (GLuint shader) - void glLinkProgram (GLuint program) - void glGetShaderSource (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source) - void glUseProgram (GLuint program) - void glUniform1f (GLint location, GLfloat v0) - void glUniform1fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform1i (GLint location, GLint v0) - void glUniform1iv (GLint location, GLsizei count, const GLint* value) - void glUniform2f (GLint location, GLfloat v0, GLfloat v1) - void glUniform2fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform2i (GLint location, GLint v0, GLint v1) - void glUniform2iv (GLint location, GLsizei count, const GLint* value) - void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glUniform3fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2) - void glUniform3iv (GLint location, GLsizei count, const GLint* value) - void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glUniform4fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glUniform4iv (GLint location, GLsizei count, const GLint* value) - void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glValidateProgram (GLuint program) - void glVertexAttrib1d (GLuint index, GLdouble x) - void glVertexAttrib1dv (GLuint index, const GLdouble* v) - void glVertexAttrib1f (GLuint index, GLfloat x) - void glVertexAttrib1fv (GLuint index, const GLfloat* v) - void glVertexAttrib1s (GLuint index, GLshort x) - void glVertexAttrib1sv (GLuint index, const GLshort* v) - void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dv (GLuint index, const GLdouble* v) - void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fv (GLuint index, const GLfloat* v) - void glVertexAttrib2s (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2sv (GLuint index, const GLshort* v) - void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dv (GLuint index, const GLdouble* v) - void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fv (GLuint index, const GLfloat* v) - void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3sv (GLuint index, const GLshort* v) - void glVertexAttrib4Nbv (GLuint index, const GLbyte* v) - void glVertexAttrib4Niv (GLuint index, const GLint* v) - void glVertexAttrib4Nsv (GLuint index, const GLshort* v) - void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4Nubv (GLuint index, const GLubyte* v) - void glVertexAttrib4Nuiv (GLuint index, const GLuint* v) - void glVertexAttrib4Nusv (GLuint index, const GLushort* v) - void glVertexAttrib4bv (GLuint index, const GLbyte* v) - void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dv (GLuint index, const GLdouble* v) - void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fv (GLuint index, const GLfloat* v) - void glVertexAttrib4iv (GLuint index, const GLint* v) - void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4sv (GLuint index, const GLshort* v) - void glVertexAttrib4ubv (GLuint index, const GLubyte* v) - void glVertexAttrib4uiv (GLuint index, const GLuint* v) - void glVertexAttrib4usv (GLuint index, const GLushort* v) - void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 deleted file mode 100644 index 51aa95b840..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 +++ /dev/null @@ -1,32 +0,0 @@ -GL_VERSION_2_1 -http://www.opengl.org/documentation/specs/version2.1/glspec21.pdf - - GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F - GL_PIXEL_PACK_BUFFER 0x88EB - GL_PIXEL_UNPACK_BUFFER 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF - GL_FLOAT_MAT2x3 0x8B65 - GL_FLOAT_MAT2x4 0x8B66 - GL_FLOAT_MAT3x2 0x8B67 - GL_FLOAT_MAT3x4 0x8B68 - GL_FLOAT_MAT4x2 0x8B69 - GL_FLOAT_MAT4x3 0x8B6A - GL_SRGB 0x8C40 - GL_SRGB8 0x8C41 - GL_SRGB_ALPHA 0x8C42 - GL_SRGB8_ALPHA8 0x8C43 - GL_SLUMINANCE_ALPHA 0x8C44 - GL_SLUMINANCE8_ALPHA8 0x8C45 - GL_SLUMINANCE 0x8C46 - GL_SLUMINANCE8 0x8C47 - GL_COMPRESSED_SRGB 0x8C48 - GL_COMPRESSED_SRGB_ALPHA 0x8C49 - GL_COMPRESSED_SLUMINANCE 0x8C4A - GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B - void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 deleted file mode 100644 index 747eb83294..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 +++ /dev/null @@ -1,163 +0,0 @@ -GL_VERSION_3_0 -http://www.opengl.org/registry/doc/glspec30.20080811.pdf - - GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB - GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 - GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 - GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 - GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 - GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 - GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 - GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES - GL_MAJOR_VERSION 0x821B - GL_MINOR_VERSION 0x821C - GL_NUM_EXTENSIONS 0x821D - GL_CONTEXT_FLAGS 0x821E - GL_DEPTH_BUFFER 0x8223 - GL_STENCIL_BUFFER 0x8224 - GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 - GL_RGBA32F 0x8814 - GL_RGB32F 0x8815 - GL_RGBA16F 0x881A - GL_RGB16F 0x881B - GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD - GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF - GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 - GL_CLAMP_VERTEX_COLOR 0x891A - GL_CLAMP_FRAGMENT_COLOR 0x891B - GL_CLAMP_READ_COLOR 0x891C - GL_FIXED_ONLY 0x891D - GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS - GL_TEXTURE_RED_TYPE 0x8C10 - GL_TEXTURE_GREEN_TYPE 0x8C11 - GL_TEXTURE_BLUE_TYPE 0x8C12 - GL_TEXTURE_ALPHA_TYPE 0x8C13 - GL_TEXTURE_LUMINANCE_TYPE 0x8C14 - GL_TEXTURE_INTENSITY_TYPE 0x8C15 - GL_TEXTURE_DEPTH_TYPE 0x8C16 - GL_TEXTURE_1D_ARRAY 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 - GL_TEXTURE_2D_ARRAY 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D - GL_R11F_G11F_B10F 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B - GL_RGB9_E5 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E - GL_TEXTURE_SHARED_SIZE 0x8C3F - GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 - GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 - GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 - GL_PRIMITIVES_GENERATED 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 - GL_RASTERIZER_DISCARD 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B - GL_INTERLEAVED_ATTRIBS 0x8C8C - GL_SEPARATE_ATTRIBS 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F - GL_RGBA32UI 0x8D70 - GL_RGB32UI 0x8D71 - GL_RGBA16UI 0x8D76 - GL_RGB16UI 0x8D77 - GL_RGBA8UI 0x8D7C - GL_RGB8UI 0x8D7D - GL_RGBA32I 0x8D82 - GL_RGB32I 0x8D83 - GL_RGBA16I 0x8D88 - GL_RGB16I 0x8D89 - GL_RGBA8I 0x8D8E - GL_RGB8I 0x8D8F - GL_RED_INTEGER 0x8D94 - GL_GREEN_INTEGER 0x8D95 - GL_BLUE_INTEGER 0x8D96 - GL_ALPHA_INTEGER 0x8D97 - GL_RGB_INTEGER 0x8D98 - GL_RGBA_INTEGER 0x8D99 - GL_BGR_INTEGER 0x8D9A - GL_BGRA_INTEGER 0x8D9B - GL_SAMPLER_1D_ARRAY 0x8DC0 - GL_SAMPLER_2D_ARRAY 0x8DC1 - GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 - GL_SAMPLER_CUBE_SHADOW 0x8DC5 - GL_UNSIGNED_INT_VEC2 0x8DC6 - GL_UNSIGNED_INT_VEC3 0x8DC7 - GL_UNSIGNED_INT_VEC4 0x8DC8 - GL_INT_SAMPLER_1D 0x8DC9 - GL_INT_SAMPLER_2D 0x8DCA - GL_INT_SAMPLER_3D 0x8DCB - GL_INT_SAMPLER_CUBE 0x8DCC - GL_INT_SAMPLER_1D_ARRAY 0x8DCE - GL_INT_SAMPLER_2D_ARRAY 0x8DCF - GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 - GL_QUERY_WAIT 0x8E13 - GL_QUERY_NO_WAIT 0x8E14 - GL_QUERY_BY_REGION_WAIT 0x8E15 - GL_QUERY_BY_REGION_NO_WAIT 0x8E16 - void glColorMaski (GLuint, GLboolean, GLboolean, GLboolean, GLboolean) - void glGetBooleani_v (GLenum, GLuint, GLboolean*) - void glEnablei (GLenum, GLuint) - void glDisablei (GLenum, GLuint) - GLboolean glIsEnabledi (GLenum, GLuint) - void glBeginTransformFeedback (GLenum) - void glEndTransformFeedback (void) - void glTransformFeedbackVaryings (GLuint, GLsizei, const GLchar **, GLenum) - void glGetTransformFeedbackVarying (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *) - void glClampColor (GLenum, GLenum) - void glBeginConditionalRender (GLuint, GLenum) - void glEndConditionalRender (void) - void glVertexAttribI1i (GLuint, GLint) - void glVertexAttribI2i (GLuint, GLint, GLint) - void glVertexAttribI3i (GLuint, GLint, GLint, GLint) - void glVertexAttribI4i (GLuint, GLint, GLint, GLint, GLint) - void glVertexAttribI1ui (GLuint, GLuint) - void glVertexAttribI2ui (GLuint, GLuint, GLuint) - void glVertexAttribI3ui (GLuint, GLuint, GLuint, GLuint) - void glVertexAttribI4ui (GLuint, GLuint, GLuint, GLuint, GLuint) - void glVertexAttribI1iv (GLuint, const GLint*) - void glVertexAttribI2iv (GLuint, const GLint*) - void glVertexAttribI3iv (GLuint, const GLint*) - void glVertexAttribI4iv (GLuint, const GLint*) - void glVertexAttribI1uiv (GLuint, const GLuint*) - void glVertexAttribI2uiv (GLuint, const GLuint*) - void glVertexAttribI3uiv (GLuint, const GLuint*) - void glVertexAttribI4uiv (GLuint, const GLuint*) - void glVertexAttribI4bv (GLuint, const GLbyte*) - void glVertexAttribI4sv (GLuint, const GLshort*) - void glVertexAttribI4ubv (GLuint, const GLubyte*) - void glVertexAttribI4usv (GLuint, const GLushort*) - void glVertexAttribIPointer (GLuint, GLint, GLenum, GLsizei, const GLvoid*) - void glGetVertexAttribIiv (GLuint, GLenum, GLint*) - void glGetVertexAttribIuiv (GLuint, GLenum, GLuint*) - void glGetUniformuiv (GLuint, GLint, GLuint*) - void glBindFragDataLocation (GLuint, GLuint, const GLchar*) - GLint glGetFragDataLocation (GLuint, const GLchar*) - void glUniform1ui (GLint, GLuint) - void glUniform2ui (GLint, GLuint, GLuint) - void glUniform3ui (GLint, GLuint, GLuint, GLuint) - void glUniform4ui (GLint, GLuint, GLuint, GLuint, GLuint) - void glUniform1uiv (GLint, GLsizei, const GLuint*) - void glUniform2uiv (GLint, GLsizei, const GLuint*) - void glUniform3uiv (GLint, GLsizei, const GLuint*) - void glUniform4uiv (GLint, GLsizei, const GLuint*) - void glTexParameterIiv (GLenum, GLenum, const GLint*) - void glTexParameterIuiv (GLenum, GLenum, const GLuint*) - void glGetTexParameterIiv (GLenum, GLenum, GLint*) - void glGetTexParameterIuiv (GLenum, GLenum, GLuint*) - void glClearBufferiv (GLenum, GLint, const GLint*) - void glClearBufferuiv (GLenum, GLint, const GLuint*) - void glClearBufferfv (GLenum, GLint, const GLfloat*) - void glClearBufferfi (GLenum, GLint, GLfloat, GLint) - const GLubyte* glGetStringi (GLenum, GLuint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 deleted file mode 100644 index 3e387a3c9c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 +++ /dev/null @@ -1,41 +0,0 @@ -GL_VERSION_3_1 -http://www.opengl.org/registry/doc/glspec30.20080811.pdf - - GL_SAMPLER_2D_RECT 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW 0x8B64 - GL_SAMPLER_BUFFER 0x8DC2 - GL_INT_SAMPLER_2D_RECT 0x8DCD - GL_INT_SAMPLER_BUFFER 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 - GL_TEXTURE_BUFFER 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B - GL_TEXTURE_BINDING_BUFFER 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D - GL_TEXTURE_BUFFER_FORMAT 0x8C2E - GL_TEXTURE_RECTANGLE 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 - GL_RED_SNORM 0x8F90 - GL_RG_SNORM 0x8F91 - GL_RGB_SNORM 0x8F92 - GL_RGBA_SNORM 0x8F93 - GL_R8_SNORM 0x8F94 - GL_RG8_SNORM 0x8F95 - GL_RGB8_SNORM 0x8F96 - GL_RGBA8_SNORM 0x8F97 - GL_R16_SNORM 0x8F98 - GL_RG16_SNORM 0x8F99 - GL_RGB16_SNORM 0x8F9A - GL_RGBA16_SNORM 0x8F9B - GL_SIGNED_NORMALIZED 0x8F9C - GL_PRIMITIVE_RESTART 0x8F9D - GL_PRIMITIVE_RESTART_INDEX 0x8F9E - GL_BUFFER_ACCESS_FLAGS 0x911F - GL_BUFFER_MAP_LENGTH 0x9120 - GL_BUFFER_MAP_OFFSET 0x9121 - void glDrawArraysInstanced (GLenum, GLint, GLsizei, GLsizei) - void glDrawElementsInstanced (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei) - void glTexBuffer (GLenum, GLenum, GLuint) - void glPrimitiveRestartIndex (GLuint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 deleted file mode 100644 index 81ba55dcc2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 +++ /dev/null @@ -1,28 +0,0 @@ -GL_VERSION_3_2 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 - GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 - GL_LINES_ADJACENCY 0x000A - GL_LINE_STRIP_ADJACENCY 0x000B - GL_TRIANGLES_ADJACENCY 0x000C - GL_TRIANGLE_STRIP_ADJACENCY 0x000D - GL_PROGRAM_POINT_SIZE 0x8642 - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 - GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 - GL_GEOMETRY_SHADER 0x8DD9 - GL_GEOMETRY_VERTICES_OUT 0x8916 - GL_GEOMETRY_INPUT_TYPE 0x8917 - GL_GEOMETRY_OUTPUT_TYPE 0x8918 - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 - GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 - GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 - GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 - GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 - GL_CONTEXT_PROFILE_MASK 0x9126 - void glGetInteger64i_v (GLenum, GLuint, GLint64 *) - void glGetBufferParameteri64v (GLenum, GLenum, GLint64 *) - void glFramebufferTexture (GLenum, GLenum, GLuint, GLint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 deleted file mode 100644 index 1fbe90b97a..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_VERSION_3_3 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_RGB10_A2UI 0x906F - GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE - void glVertexAttribDivisor (GLuint index, GLuint divisor) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 deleted file mode 100644 index dc33f9179f..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 +++ /dev/null @@ -1,20 +0,0 @@ -GL_VERSION_4_0 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_SAMPLE_SHADING 0x8C36 - GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F - GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F - GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 - GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A - GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B - GL_SAMPLER_CUBE_MAP_ARRAY 0x900C - GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D - GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E - GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F - void glMinSampleShading (GLclampf value) - void glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendEquationi (GLuint buf, GLenum mode) - void glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - void glBlendFunci (GLuint buf, GLenum src, GLenum dst) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 deleted file mode 100644 index 4c51e00973..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_VERSION_4_1 -http://www.opengl.org/registry/doc/glspec41.core.20100725.pdf - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 deleted file mode 100644 index 401fb633c4..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_VERSION_4_2 -http://www.opengl.org/registry/doc/glspec42.core.20110822.pdf - - GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C - GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D - GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E - GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 deleted file mode 100644 index 333109f7af..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_VERSION_4_3 -http://www.opengl.org/registry/ - - GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E - GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 deleted file mode 100644 index dfa3bf2291..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 +++ /dev/null @@ -1,5 +0,0 @@ -GL_VERSION_4_4 -http://www.opengl.org/registry/ - - GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 - diff --git a/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint b/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint deleted file mode 100644 index 6916189eb2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_swap_hint -http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp -GL_WIN_swap_hint - void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context b/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context deleted file mode 100644 index 20b3119c80..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context +++ /dev/null @@ -1,12 +0,0 @@ -WGL_ARB_create_context -http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt -WGL_ARB_create_context - WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 - WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 - WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 - WGL_CONTEXT_FLAGS_ARB 0x2094 - ERROR_INVALID_VERSION_ARB 0x2095 - ERROR_INVALID_PROFILE_ARB 0x2096 - HGLRC wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int* attribList) diff --git a/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle b/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle deleted file mode 100644 index 55df114d31..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ATI_render_texture_rectangle - -WGL_ATI_render_texture_rectangle - WGL_TEXTURE_RECTANGLE_ATI 0x21A5 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile b/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile deleted file mode 100644 index ca9881af6b..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt -WGL_EXT_create_context_es2_profile - WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile b/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile deleted file mode 100644 index 6eb7cddfb3..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt -WGL_EXT_create_context_es_profile - WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB deleted file mode 100644 index e4a40322fd..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -WGL_EXT_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float b/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float deleted file mode 100644 index 30925fc5da..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_pixel_format_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -WGL_EXT_pixel_format_packed_float - WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 diff --git a/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity b/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity deleted file mode 100644 index f722204cd7..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_gpu_affinity -http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt -WGL_NV_gpu_affinity - WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 - WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) - BOOL wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) - HDC wglCreateAffinityDCNV (const HGPUNV *phGpuList) - BOOL wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu) - BOOL wglDeleteDCNV (HDC hdc) - DECLARE_HANDLE(HGPUNV); - typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; diff --git a/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range b/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range deleted file mode 100644 index ca22d31a3e..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -WGL_NV_vertex_array_range - void * wglAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void wglFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/custom.txt b/Engine/lib/glew/auto/custom.txt deleted file mode 100644 index b797b95887..0000000000 --- a/Engine/lib/glew/auto/custom.txt +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_extensions_string -WGL_EXT_extensions_string -WGL_ARB_pixel_format -WGL_ARB_pbuffer -WGL_NV_float_buffer -WGL_ATI_pixel_format_float -WGL_ARB_multisample diff --git a/Engine/lib/glew/auto/doc/advanced.html b/Engine/lib/glew/auto/doc/advanced.html deleted file mode 100644 index 4bf2aa8817..0000000000 --- a/Engine/lib/glew/auto/doc/advanced.html +++ /dev/null @@ -1,169 +0,0 @@ -

Automatic Code Generation

- -

-Starting from release 1.1.0, the source code and parts of the -documentation are automatically generated from the extension -specifications in a two-step process. In the first step, -specification files from the OpenGL registry are downloaded and -parsed. Skeleton descriptors are created for each extension. These -descriptors contain all necessary information for creating the source -code and documentation in a simple and compact format, including the -name of the extension, url link to the specification, tokens, function -declarations, typedefs and struct definitions. In the second step, -the header files as well as the library and glewinfo source are -generated from the descriptor files. The code generation scripts are -located in the auto subdirectory. -

- -

-The code generation scripts require GNU make, wget, and perl. On -Windows, the simplest way to get access to these tools is to install -Cygwin, but make sure that the -root directory is mounted in binary mode. The makefile in the -auto directory provides the following build targets: -

- - - - - - - - - - - - -
makeCreate the source files from the descriptors.
If the -descriptors do not exist, create them from the spec files.
If the spec -files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions -listed in auto/custom.txt.
See "Custom Code -Generation" below for more details.
- -

Adding a New Extension

- -

-To add a new extension, create a descriptor file for the extension in -auto/core and rerun the code generation scripts by typing -make clean; make in the auto directory. -

- -

-The format of the descriptor file is given below. Items in -brackets are optional. -

- -

-<Extension Name>
-[<URL of Specification File>]
-    [<Token Name> <Token Value>]
-    [<Token Name> <Token Value>]
-    ...
-    [<Typedef>]
-    [<Typedef>]
-    ...
-    [<Function Signature>]
-    [<Function Signature>]
-    ...
- -

- - - -

-Take a look at one of the files in auto/core for an -example. Note that typedefs and function signatures should not be -terminated with a semicolon. -

- -

Custom Code Generation

-

-Starting from GLEW 1.3.0, it is possible to control which extensions -to include in the libarary by specifying a list in -auto/custom.txt. This is useful when you do not need all the -extensions and would like to reduce the size of the source files. -Type make clean; make custom in the auto directory -to rerun the scripts with the custom list of extensions. -

- -

-For example, the following is the list of extensions needed to get GLEW and the -utilities to compile. -

- -

-WGL_ARB_extensions_string
-WGL_ARB_multisample
-WGL_ARB_pixel_format
-WGL_ARB_pbuffer
-WGL_EXT_extensions_string
-WGL_ATI_pixel_format_float
-WGL_NV_float_buffer
-

- -

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

- -

Separate Namespace

- -

-To avoid name clashes when linking with libraries that include the -same symbols, extension entry points are declared in a separate -namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL -function names to their GLEW equivalents. For instance, -glFancyFunction is simply an alias to -glewFancyFunction. The separate namespace does not effect -token and function pointer definitions. -

- -

Known Issues

- -

-GLEW requires GLX 1.2 for compatibility with GLUT. -

- diff --git a/Engine/lib/glew/auto/doc/basic.html b/Engine/lib/glew/auto/doc/basic.html deleted file mode 100644 index 693575ba5a..0000000000 --- a/Engine/lib/glew/auto/doc/basic.html +++ /dev/null @@ -1,180 +0,0 @@ -

Initializing GLEW

-

-First you need to create a valid OpenGL rendering context and call -glewInit() to initialize the extension entry points. If -glewInit() returns GLEW_OK, the initialization -succeeded and you can use the available extensions as well as core -OpenGL functionality. For example: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-...
-glutInit(&argc, argv);
-glutCreateWindow("GLEW Test");
-GLenum err = glewInit();
-if (GLEW_OK != err)
-{
-  /* Problem: glewInit failed, something is seriously wrong. */
-  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
-  ...
-}
-fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
-

- -

Checking for Extensions

- -

-Starting from GLEW 1.1.0, you can find out if a particular extension -is available on your platform by querying globally defined variables -of the form GLEW_{extension_name}: -

- -

-if (GLEW_ARB_vertex_program)
-{
-  /* It is safe to use the ARB_vertex_program extension here. */
-  glGenProgramsARB(...);
-}
-

- -

-In GLEW 1.0.x, a global structure was used for this task. To ensure -binary compatibility between releases, the struct was replaced with a -set of variables. -

- -

-You can also check for core OpenGL functionality. For example, to -see if OpenGL 1.3 is supported, do the following: -

- -

-if (GLEW_VERSION_1_3)
-{
-  /* Yay! OpenGL 1.3 is supported! */
-}
-

- -

-In general, you can check if GLEW_{extension_name} or -GLEW_VERSION_{version} is true or false. -

- -

-It is also possible to perform extension checks from string -input. Starting from the 1.3.0 release, use glewIsSupported -to check if the required core or extension functionality is -available: -

- -

-if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
-{
-  /* Great, we have OpenGL 1.4 + point sprites. */
-}
-

- -

-For extensions only, glewGetExtension provides a slower alternative -(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release -glewGetExtension was replaced with -glewIsSupported. -

- -

-if (glewGetExtension("GL_ARB_fragment_program"))
-{
-  /* Looks like ARB_fragment_program is supported. */
-}
-

- -

Experimental Drivers

- -

-GLEW obtains information on the supported extensions from the graphics -driver. Experimental or pre-release drivers, however, might not -report every available extension through the standard mechanism, in -which case GLEW will report it unsupported. To circumvent this -situation, the glewExperimental global switch can be turned -on by setting it to GL_TRUE before calling -glewInit(), which ensures that all extensions with valid -entry points will be exposed. -

- -

Platform Specific Extensions

- -

-Platform specific extensions are separated into two header files: -wglew.h and glxew.h, which define the available -WGL and GLX extensions. To determine if a certain -extension is supported, query WGLEW_{extension name} or -GLXEW_{extension_name}. For example: -

- -

-#include <GL/wglew.h>
-
-if (WGLEW_ARB_pbuffer)
-{
-  /* OK, we can use pbuffers. */
-}
-else
-{
-  /* Sorry, pbuffers will not work on this platform. */
-}
-

- -

-Alternatively, use wglewIsSupported or -glxewIsSupported to check for extensions from a string: -

- -

-if (wglewIsSupported("WGL_ARB_pbuffer"))
-{
-  /* OK, we can use pbuffers. */
-}
-

- -

Utilities

- -

-GLEW provides two command-line utilities: one for creating a list of -available extensions and visuals; and another for verifying extension -entry points. -

- -

visualinfo: extensions and visuals

- -

-visualinfo is an extended version of glxinfo. The -Windows version creates a file called visualinfo.txt, which -contains a list of available OpenGL, WGL, and GLU extensions as well -as a table of visuals aka. pixel formats. Pbuffer and MRT capable -visuals are also included. For additional usage information, type -visualinfo -h. -

- -

glewinfo: extension verification utility

- -

-glewinfo allows you to verify the entry points for the -extensions supported on your platform. The Windows version -reports the results to a text file called glewinfo.txt. The -Unix version prints the results to stdout. -

- -

Windows usage:

-
glewinfo [-pf <id>]
- -

where <id> is the pixel format id for which the -capabilities are displayed.

- -

Unix usage:

-
glewinfo [-display <dpy>] [-visual <id>]
- -

where <dpy> is the X11 display and <id> is -the visual id for which the capabilities are displayed.

- diff --git a/Engine/lib/glew/auto/doc/build.html b/Engine/lib/glew/auto/doc/build.html deleted file mode 100644 index ef06a85cbe..0000000000 --- a/Engine/lib/glew/auto/doc/build.html +++ /dev/null @@ -1,47 +0,0 @@ -

Building GLEW

- -

Windows

- -

A MS Visual Studio project is provided in the build/vc6 directory.

-

Pre-built shared and static libraries are also available for download.

- -

Makefile

- -

For platforms other than MS Windows, the provided Makefile is used.

- -

Command-line variables

- - - - - - -
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
-config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
- -

Make targets

- - - - - - - - - - - - -
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
- -

Requirements

- -
    -
  • GNU make
  • -
  • perl
  • -
  • wget
  • -
  • GNU sed
  • -
  • gcc compiler
  • -
- -Ubuntu:
sudo apt-get install Xmu-dev Xi-Dev
diff --git a/Engine/lib/glew/auto/doc/credits.html b/Engine/lib/glew/auto/doc/credits.html deleted file mode 100644 index 7f1b8d9a87..0000000000 --- a/Engine/lib/glew/auto/doc/credits.html +++ /dev/null @@ -1,25 +0,0 @@ -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

diff --git a/Engine/lib/glew/auto/doc/index.html b/Engine/lib/glew/auto/doc/index.html deleted file mode 100644 index 1650becc0e..0000000000 --- a/Engine/lib/glew/auto/doc/index.html +++ /dev/null @@ -1,118 +0,0 @@ -

-The OpenGL Extension Wrangler Library (GLEW) is a cross-platform -open-source C/C++ extension loading library. GLEW provides efficient -run-time mechanisms for determining which OpenGL extensions are -supported on the target platform. OpenGL core and extension -functionality is exposed in a single header file. GLEW has been -tested on a variety of operating systems, including Windows, Linux, -Mac OS X, FreeBSD, Irix, and Solaris. -

- -

Downloads

-

-GLEW is distributed -as source and precompiled binaries.
-The latest release is -1.10.0[07-22-13]: -

-

-

-

- - - -
- - - - - - - - - - - - - - - -
Source -ZIP |  -TGZ
Binaries -Windows 32-bit and 64-bit |  -
-
- -

-

-An up-to-date copy is also available using git: -

-
    -
  • github
    -git clone https://github.com/nigels-com/glew.git glew
     
  • -
  • Sourceforge
    -git clone git://git.code.sf.net/p/glew/code glew
     
  • -
- -

-

-Unsupported snapshots are also available: -

- - -

Supported Extensions

-

-The latest release contains support for OpenGL 4.4 and the following extensions: -

- - -

News

-
    -
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • -
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • -
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • -
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • -
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • -
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • -
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • -
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • -
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • -
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • -
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • -
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • -
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • -
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • -
  • [04-27-07] GLEW 1.4.0 is released
  • -
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • -
  • [03-04-07] GLEW 1.3.6 is released
  • -
  • [02-28-07] Repository is migrated to SVN
  • -
  • [02-25-07] GLEW is included in the OpenGL SDK
  • -
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • -
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • -
  • [05-16-05] GLEW 1.3.3 is released
  • -
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • -
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • -
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • -
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • -
  • [12-22-04] GLEWpy Python wrapper announced
  • -
  • [12-12-04] Mailing lists created on sourceforge
  • -
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • -
- -

Links

- - diff --git a/Engine/lib/glew/auto/doc/install.html b/Engine/lib/glew/auto/doc/install.html deleted file mode 100644 index 448aafd819..0000000000 --- a/Engine/lib/glew/auto/doc/install.html +++ /dev/null @@ -1,126 +0,0 @@ -

Installation

- -

-To use the shared library version of GLEW, you need to copy the -headers and libraries into their destination directories. On Windows -this typically boils down to copying: -

- - - - - - - - - - -
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
-

-

- -

-where {VC Root} is the Visual C++ root directory, typically -C:/Program Files/Microsoft Visual Studio/VC98 for Visual -Studio 6.0 or C:/Program Files/Microsoft Visual -Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. -

- -

-On Unix, typing make install will attempt to install GLEW -into /usr/include/GL and /usr/lib. You can -customize the installation target via the GLEW_DEST -environment variable if you do not have write access to these -directories. -

- -

Building Your Project with GLEW

-

-There are two ways to build your project with GLEW. -

-

Including the source files / project file

-

-The simpler but less flexible way is to include glew.h and -glew.c into your project. On Windows, you also need to -define the GLEW_STATIC preprocessor token when building a -static library or executable, and the GLEW_BUILD preprocessor -token when building a dll. You also need to replace -<GL/gl.h> and <GL/glu.h> with -<glew.h> in your code and set the appropriate include -flag (-I) to tell the compiler where to look for it. For -example: -

-

-#include <glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

-

-Depending on where you put glew.h you may also need to change -the include directives in glew.c. Note that if you are using -GLEW together with GLUT, you have to include glew.h first. -In addition, glew.h includes glu.h, so you do not -need to include it separately. -

-

-On Windows, you also have the option of adding the supplied project -file glew_static.dsp to your workspace (solution) and compile -it together with your other projects. In this case you also need to -change the GLEW_BUILD preprocessor constant to -GLEW_STATIC when building a static library or executable, -otherwise you get build errors. -

-

-Note that GLEW does not use the C -runtime library, so it does not matter which version (single-threaded, -multi-threaded or multi-threaded DLL) it is linked with (without -debugging information). It is, however, always a good idea to compile all -your projects including GLEW with the same C runtime settings. -

- -

Using GLEW as a shared library

- -

-Alternatively, you can use the provided project files / makefile to -build a separate shared library you can link your projects with later. -In this case the best practice is to install glew.h, -glew32.lib, and glew32.dll / libGLEW.so to -where the OpenGL equivalents gl.h, opengl32.lib, and -opengl32.dll / libGL.so are located. Note that you -need administrative privileges to do this. If you do not have -administrator access and your system administrator will not do it for -you, you can install GLEW into your own lib and include subdirectories -and tell the compiler where to find it. Then you can just replace -<GL/gl.h> with <GL/glew.h> in your -program: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

- -

-or: -

- -

-#include <GL/glew.h>
-<gl and glu functionality is available here>
-

- -

-Remember to link your project with glew32.lib, -glu32.lib, and opengl32.lib on Windows and -libGLEW.so, libGLU.so, and libGL.so on -Unix (-lGLEW -lGLU -lGL). -

- -

-It is important to keep in mind that glew.h includes neither -windows.h nor gl.h. Also, GLEW will warn you by -issuing a preprocessor error in case you have included gl.h, -glext.h, or glATI.h before glew.h. -

- diff --git a/Engine/lib/glew/auto/doc/log.html b/Engine/lib/glew/auto/doc/log.html deleted file mode 100644 index 13b18a5964..0000000000 --- a/Engine/lib/glew/auto/doc/log.html +++ /dev/null @@ -1,912 +0,0 @@ -

Change Log

- -
-
    -
  • 1.10.0 [07-22-13] -
      -
    • New features: -
        -
      • Support for OpenGL 4.4 -
      -
    • New extensions: -
        -
      • GL_AMD_interleaved_elements -
      • GL_AMD_shader_trinary_minmax -
      • GL_AMD_sparse_texture -
      • GL_ANGLE_depth_texture -
      • GL_ANGLE_framebuffer_blit -
      • GL_ANGLE_framebuffer_multisample -
      • GL_ANGLE_instanced_arrays -
      • GL_ANGLE_pack_reverse_row_order -
      • GL_ANGLE_program_binary -
      • GL_ANGLE_texture_compression_dxt1 -
      • GL_ANGLE_texture_compression_dxt3 -
      • GL_ANGLE_texture_compression_dxt5 -
      • GL_ANGLE_texture_usage -
      • GL_ANGLE_timer_query -
      • GL_ANGLE_translated_shader_source -
      • GL_ARB_bindless_texture -
      • GL_ARB_buffer_storage -
      • GL_ARB_clear_texture -
      • GL_ARB_compute_variable_group_size -
      • GL_ARB_enhanced_layouts -
      • GL_ARB_indirect_parameters -
      • GL_ARB_multi_bind -
      • GL_ARB_query_buffer_object -
      • GL_ARB_seamless_cubemap_per_texture -
      • GL_ARB_shader_draw_parameters -
      • GL_ARB_shader_group_vote -
      • GL_ARB_sparse_texture -
      • GL_ARB_texture_mirror_clamp_to_edge -
      • GL_ARB_texture_stencil8 -
      • GL_ARB_vertex_type_10f_11f_11f_rev -
      • GL_INTEL_map_texture -
      • GL_NVX_conditional_render -
      • GL_NV_bindless_multi_draw_indirect -
      • GL_NV_blend_equation_advanced -
      • GL_NV_compute_program5 -
      • GL_NV_deep_texture3D -
      • GL_NV_draw_texture -
      • GL_NV_shader_atomic_counters -
      • GL_NV_shader_storage_buffer_object -
      • GL_REGAL_ES1_0_compatibility -
      • GL_REGAL_ES1_1_compatibility -
      • GL_REGAL_enable -
      • GLX_EXT_buffer_age -
      • WGL_ARB_robustness_application_isolation -
      • WGL_ARB_robustness_share_group_isolation -
      -
    • Bug fixes -
    -
- -
-
    -
  • 1.9.0 [08-06-12] -
      -
    • New features: - -
    • New extensions: -
        -
      • GL_ARB_ES3_compatibility -
      • GL_ARB_clear_buffer_object -
      • GL_ARB_compute_shader -
      • GL_ARB_copy_image -
      • GL_ARB_explicit_uniform_location -
      • GL_ARB_fragment_layer_viewport -
      • GL_ARB_framebuffer_no_attachments -
      • GL_ARB_internalformat_query2 -
      • GL_ARB_multi_draw_indirect -
      • GL_ARB_program_interface_query -
      • GL_ARB_robust_buffer_access_behavior -
      • GL_ARB_robustness_application_isolation -
      • GL_ARB_robustness_share_group_isolation -
      • GL_ARB_shader_image_size -
      • GL_ARB_shader_storage_buffer_object -
      • GL_ARB_stencil_texturing -
      • GL_ARB_texture_buffer_range -
      • GL_ARB_texture_query_levels -
      • GL_ARB_texture_storage_multisample -
      • GL_ARB_texture_view -
      • GL_ARB_vertex_attrib_binding -
      • GL_EXT_debug_marker -
      • GL_KHR_debug -
      • GL_REGAL_error_string -
      • GL_REGAL_extension_query -
      • GL_REGAL_log -
      • GLX_ARB_robustness_application_isolation -
      • GLX_ARB_robustness_share_group_isolation -
      • GLX_EXT_create_context_es_profile -
      • WGL_EXT_create_context_es_profile -
      -
    • Bug fixes: -
        -
      • Not using GLU library for Makefile builds. -
      -
    -
- -
-
    -
  • 1.8.0 [07-17-12] -
      -
    • New extensions: -
        -
      • GL_AMD_pinned_memory -
      • GL_AMD_query_buffer_object -
      • GL_AMD_stencil_operation_extended -
      • GL_AMD_vertex_shader_layer -
      • GL_AMD_vertex_shader_viewport_index -
      • GL_NV_bindless_texture -
      • GL_NV_shader_atomic_float -
      • GLX_EXT_swap_control_tear -
      • WGL_EXT_swap_control_tear -
      • WGL_NV_DX_interop2 -
      -
    • Bug fixes: -
        -
      • MS Visual Studio 2010 projects added -
      • GLX_NV_video_out replaces GLX_NV_video_output -
      • ANSI C prototype for glewInit -
      • Improved CentOS build support -
      • Improved GL_ARB_gpu_shader_fp64 support -
      • ARB_texture_compression_bptc and ARB_copy_buffer constants -
      • Linux needs to define GLEW_STATIC for static library builds -
      • Custom code generation problem resolved -
      • GLEWAPIENTRY added to glew.h for calling convention customization -
      • Correction for glPathStencilDepthOffsetNV -
      • Resolve OSX gcc warnings -
      • Added build support for NetBSD -
      -
    -
- -
-
    -
  • 1.7.0 [08-26-11] -
      -
    • New features: -
        -
      • Support for OpenGL 4.2 -
      -
    • New extensions: -
        -
      • GL_AMD_multi_draw_indirect -
      • GL_ARB_base_instance -
      • GL_ARB_compressed_texture_pixel_storage -
      • GL_ARB_conservative_depth -
      • GL_ARB_internalformat_query -
      • GL_ARB_map_buffer_alignment -
      • GL_ARB_shader_atomic_counters -
      • GL_ARB_shader_image_load_store -
      • GL_ARB_shading_language_420pack -
      • GL_ARB_shading_language_packing -
      • GL_ARB_texture_storage -
      • GL_ARB_transform_feedback_instanced -
      • GL_EXT_framebuffer_multisample_blit_scaled -
      • GL_NV_path_rendering -
      • GL_NV_path_rendering -
      • GLX_MESA_swap_control -
      -
    • Bug fixes: -
        -
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements -
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness -
      • Remove EXT suffix from GL_KTX_buffer_region entry points -
      • Solaris needs inttypes.h -
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context -
      • Add GLX_MESA_swap_control -
      • Set -install_name for OSX -
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) -
      • Add GL_NV_path_rendering -
      -
    -
- -
-
    -
  • 1.6.0 [04-27-11] -
      -
    • New extensions: -
        -
      • GL_AMD_blend_minmax_factor -
      • GL_AMD_sample_positions -
      • GL_EXT_x11_sync_object -
      • GL_NV_texture_multisample -
      • GL_NV_video_capture -
      • GLX_NV_video_capture -
      • WGL_NV_DX_interop -
      • WGL_NV_video_capture -
      -
    • Bug fixes: -
        -
      • Define GLEW_NO_GLU for no glu dependency. -
      • mx suffix for GLEW MX libraries, build both libraries by default. -
      • Cygwin build improvements -
      • Soname of GLEWmx shared libraries -
      • Query GL extension string only once -
      • GLX_OML_sync_control no longer requires C99 -
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays -
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array -
      • Fixes for BSD build -
      -
    -
- -
-
    -
  • 1.5.8 [01-31-11] -
      -
    • New extensions: -
        -
      • GL_AMD_depth_clamp_separate -
      • GL_EXT_texture_sRGB_decode -
      -
    • Bug fixes: -
        -
      • Borland C++ fix for __int64 -
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 -
      • Correction to glGetTransformFeedbackVarying -
      • Correction to glSecondaryColorPointer -
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource -
      • Switched code repository from svn to git -
      -
    -
- -
-
    -
  • 1.5.7 [11-03-10] -
      -
    • New extension: -
        -
      • GL_NVX_gpu_memory_info -
      -
    • Bug fixes: -
        -
      • Improved mingw32 build support -
      • Improved cygwin build support -
      • glGetPointervEXT fix -
      • Add GLEW_VERSION_1_2_1 -
      -
    -
- -
-
    -
  • 1.5.6 [09-07-10] -
      -
    • New features: -
        -
      • Support for OpenGL 4.1 -
      -
    • New extensions: -
        -
      • GL_ARB_ES2_compatibility -
      • GL_ARB_cl_event -
      • GL_ARB_debug_output -
      • GL_ARB_get_program_binary -
      • GL_ARB_robustness -
      • GL_ARB_separate_shader_objects -
      • GL_ARB_shader_precision -
      • GL_ARB_shader_stencil_export -
      • GL_ARB_vertex_attrib_64bit -
      • GL_ARB_viewport_array -
      • GLX_ARB_create_context_robustness -
      • GLX_EXT_create_context_es2_profile -
      • WGL_ARB_create_context_robustness -
      • WGL_EXT_create_context_es2_profile -
      -
    -
- -
-
    -
  • 1.5.5 [07-13-10] -
      -
    • New extensions: -
        -
      • GL_AMD_debug_output -
      • GL_AMD_name_gen_delete -
      • GL_AMD_transform_feedback3_lines_triangles -
      • GL_NV_multisample_coverage -
      • GL_NV_vdpau_interop -
      • GLX_AMD_gpu_association -
      • GLX_NV_multisample_coverage -
      • WGL_NV_multisample_coverage -
      -
    • Bug fixes: -
        -
      • Compilation issue with GLX_SGI_video_sync -
      • OpenGL 4.0 double-precision uniform functions added -
      • Constness of glPointParameterfvARB and glPointParameterfvEXT -
      • Added glVertexAttribDivisor -
      • Compilation issue with Nvidia GLX headers -
      -
    -
- -
-
    -
  • 1.5.4 [04-21-10] -
      -
    • New features: -
        -
      • Support for OpenGL 3.3 -
      • Support for OpenGL 4.0 -
      -
    • New extensions: -
        -
      • GL_AMD_conservative_depth -
      • GL_ARB_blend_func_extended -
      • GL_ARB_draw_indirect -
      • GL_ARB_explicit_attrib_location -
      • GL_ARB_gpu_shader5 -
      • GL_ARB_gpu_shader_fp64 -
      • GL_ARB_occlusion_query2 -
      • GL_ARB_sampler_objects -
      • GL_ARB_shader_bit_encoding -
      • GL_ARB_shader_subroutine -
      • GL_ARB_shading_language_include -
      • GL_ARB_tessellation_shader -
      • GL_ARB_texture_buffer_object_rgb32 -
      • GL_ARB_texture_compression_bptc -
      • GL_ARB_texture_rgb10_a2ui -
      • GL_ARB_texture_swizzle -
      • GL_ARB_timer_query -
      • GL_ARB_transform_feedback2 -
      • GL_ARB_transform_feedback3 -
      • GL_ARB_vertex_type_2_10_10_10_rev -
      • GL_EXT_shader_image_load_store -
      • GL_EXT_vertex_attrib_64bit -
      • GL_NV_gpu_program5 -
      • GL_NV_gpu_program_fp64 -
      • GL_NV_gpu_shader5 -
      • GL_NV_tessellation_program5 -
      • GL_NV_vertex_attrib_integer_64bit -
      • GLX_ARB_vertex_buffer_object -
      -
    • Bug fixes: -
        -
      • Parameter constness fix for glPointParameteriv and glPointParameterfv -
      -
    -
- -
-
    -
  • 1.5.3 [02-28-10] -
      -
    • New extensions: -
        -
      • GLX_INTEL_swap_event -
      • GL_AMD_seamless_cubemap_per_texture -
      • GL_AMD_shader_stencil_export -
      -
    • Bug fixes: -
        -
      • Correct version detection for GL 3.1 and 3.2 -
      • Missing 3.1 enumerants -
      • Add glew.pc -
      -
    -
- -
-
    -
  • 1.5.2 [12-31-09] -
      -
    • New features: -
        -
      • Support for OpenGL 3.1 -
      • Support for OpenGL 3.2 -
      -
    • New extensions: -
        -
      • GL_AMD_draw_buffers_blend -
      • GL_AMD_performance_monitor -
      • GL_AMD_texture_texture4 -
      • GL_AMD_vertex_shader_tessellator -
      • GL_APPLE_aux_depth_stencil -
      • GL_APPLE_object_purgeable -
      • GL_APPLE_rgb_422 -
      • GL_APPLE_row_bytes -
      • GL_APPLE_vertex_program_evaluators -
      • GL_ARB_compatibility -
      • GL_ARB_copy_buffer -
      • GL_ARB_depth_clamp -
      • GL_ARB_draw_buffers_blend -
      • GL_ARB_draw_elements_base_vertex -
      • GL_ARB_fragment_coord_conventions -
      • GL_ARB_provoking_vertex -
      • GL_ARB_sample_shading -
      • GL_ARB_seamless_cube_map -
      • GL_ARB_shader_texture_lod -
      • GL_ARB_sync -
      • GL_ARB_texture_cube_map_array -
      • GL_ARB_texture_gather -
      • GL_ARB_texture_multisample -
      • GL_ARB_texture_query_lod -
      • GL_ARB_uniform_buffer_object -
      • GL_ARB_vertex_array_bgra -
      • GL_ATI_meminfo -
      • GL_EXT_provoking_vertex -
      • GL_EXT_separate_shader_objects -
      • GL_EXT_texture_snorm -
      • GL_NV_copy_image -
      • GL_NV_parameter_buffer_object2 -
      • GL_NV_shader_buffer_load -
      • GL_NV_texture_barrier -
      • GL_NV_transform_feedback2 -
      • GL_NV_vertex_buffer_unified_memory -
      • WGL_AMD_gpu_association -
      • WGL_ARB_create_context_profile -
      • WGL_NV_copy_image -
      • GLX_ARB_create_context_profile -
      • GLX_EXT_swap_control -
      • GLX_NV_copy_image -
      -
    • Bug fixes: -
        -
      • DOS line endings for windows .zip archives only. -
      • glTransformFeedbackVaryings arguments. -
      • Resource leak in glewinfo and visualinfo tools. -
      • WIN32_LEAN_AND_MEAN preprocessor pollution. -
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. -
      • MesaGLUT glut.h GLAPIENTRY dependency. -
      • glFramebufferTextureLayer correction. -
      • OSX compiler warnings resolved. -
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. -
      • SnowLeopard (OSX 10.6) gl.h detection. -
      • Use $(STRIP) consistently. -
      -
    -
- -
-
    -
  • 1.5.1 [11-03-08] -
      -
    • New features: -
        -
      • Support for OpenGL 3.0 -
      -
    • New extensions: -
        -
      • GL_ARB_depth_buffer_float -
      • GL_ARB_draw_instance, -
      • GL_ARB_framebuffer_object -
      • GL_ARB_framebuffer_sRGB -
      • GL_ARB_geometry_shader4 -
      • GL_ARB_half_float_pixel -
      • GL_ARB_half_float_vertex -
      • GL_ARB_instanced_arrays -
      • GL_ARB_map_buffer_range -
      • GL_ARB_texture_buffer_object -
      • GL_ARB_texture_compression_rgtc -
      • GL_ARB_vertex_array_object -
      • GL_EXT_direct_state_access -
      • GL_EXT_texture_swizzle -
      • GL_EXT_transform_feedback -
      • GL_EXT_vertex_array_bgra -
      • GL_NV_conditional_render -
      • GL_NV_explicit_multisample -
      • GL_NV_present_video -
      • GL_SGIS_point_line_texgen -
      • GL_SGIX_convolution_accuracy -
      • WGL_ARB_create_context -
      • WGL_ARB_framebuffer_sRGB -
      • WGL_NV_present_video -
      • WGL_NV_swap_group -
      • WGL_NV_video_output -
      • GLX_ARB_create_context -
      • GLX_ARB_framebuffer_sRGB -
      • GLX_NV_present_video -
      • GLX_NV_swap_group -
      • GLX_NV_video_output -
      -
    • Bug fixes: -
        -
      • Licensing issues with documentation -
      • Problems with long long and _MSC_VER on MINGW -
      • Incorrect parameter for glGetUniformLocation -
      • glewGetExtension fails on last entry -
      • Incomplete GL_NV_texture_shader tokens -
      • Scripting problems on Cygwin -
      • Incorrect definition for GLint on OS X -
      -
    -
- -
-
    -
  • 1.5.0 [12-27-07] -
      -
    • New features: -
        -
      • Licensing change (BSD, Mesa 3-D, Khronos) -
      • Switch to using registry on www.opengl.org -
      • Support for major and minor version strings -
      -
    • New extensions: -
        -
      • GL_APPLE_flush_buffer_range -
      • GL_GREMEDY_frame_terminator -
      • GLX_EXT_texture_from_pixmap -
      -
    • Bug fixes: -
        -
      • Incorrent 64-bit type definitions -
      • Do not strip static library on install -
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read -
      • Missing tokens in GL_VERSION_2_1 -
      • Missing functions in GL_VERSION_1_4 -
      • Incorrect parameter type for glXCopyContext -
      -
    -
-
-
    -
  • 1.4.0 [04-27-07] -
      -
    • New features: -
        -
      • Extension variables are declared const to avoid possible -corruption of their values -
      -
    • New extensions: -
        -
      • GL_NV_depth_range_unclamped -
      -
    • Bug fixes: -
        -
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage -
      • Incorrect function names in GL_EXT_gpu_program_parameters -
      • Missing tokens in GL_EXT_framebuffer_multisample -
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string -
      -
    -
-
-
    -
  • 1.3.6 [03-04-07] -
      -
    • New extensions: -
        -
      • GL_ATI_shader_texture_lod -
      • GL_EXT_gpu_program_parameters -
      • GL_NV_geometry_shader4 -
      • WGL_NV_gpu_affinity -
      • GLX_SGIX_hyperpipe -
      -
    • Bug fixes: -
        -
      • Missing include guards in glxew.h -
      • Makefile and install problems for Cygwin builds -
      • Install problem for Linux AMD64 builds -
      • Incorrent token in GL_ATI_texture_compression_3dc -
      • Missing tokens from GL_ATIX_point_sprites -
      -
    -
-
-
    -
  • 1.3.5 [11-21-06] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.1 -
      • Debug support for glewIsSupported -
      -
    • New extensions: -
        -
      • GL_EXT_bindable_uniform -
      • GL_EXT_draw_buffers2 -
      • GL_EXT_draw_instanced -
      • GL_EXT_framebuffer_sRGB -
      • GL_EXT_geometry_shader4 -
      • GL_EXT_gpu_shader4 -
      • GL_EXT_packed_float -
      • GL_EXT_texture_array -
      • GL_EXT_texture_buffer_object -
      • GL_EXT_texture_compression_latc -
      • GL_EXT_texture_compression_rgtc -
      • GL_EXT_texture_integer -
      • GL_EXT_texture_shared_exponent -
      • GL_EXT_timer_query -
      • GL_NV_depth_buffer_float -
      • GL_NV_fragment_program4 -
      • GL_NV_framebuffer_multisample_coverage -
      • GL_NV_geometry_program4 -
      • GL_NV_gpu_program4 -
      • GL_NV_parameter_buffer_object -
      • GL_NV_transform_feedback -
      • GL_NV_vertex_program4 -
      • GL_OES_byte_coordinates -
      • GL_OES_compressed_paletted_texture -
      • GL_OES_read_format -
      • GL_OES_single_precision -
      • WGL_EXT_pixel_format_packed_float -
      • WGL_EXT_framebuffer_sRGB -
      • GLX_EXT_fbconfig_packed_float -
      • GLX_EXT_framebuffer_sRGB -
      -
    • Bug fixes: -
        -
      • Wrong GLXContext definition on Solaris -
      • Makefile problem for parallel builds -
      -
    -
-
-
    -
  • 1.3.4 [03-04-06] -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_blit -
      • GL_EXT_framebuffer_multisample -
      • GL_EXT_packed_depth_stencil -
      • GL_MESAX_texture_stack -
      • WGL_3DL_stereo_control -
      -
    -
      -
    • Bug fixes: -
        -
      • glBlendEquation missing from GL_ARB_imaging -
      • Wrong APIENTRY definition for Cygwin -
      • Incorrect OS X OpenGL types -
      • Unix 64-bit installation patch -
      -
    -
-
-
    -
  • 1.3.3 [05-16-05] -
      -
    • New feature: -
        -
      • Code generation option to split source into multiple files -
      -
    -
      -
    • Bug fixes: -
        -
      • OpenGL 2.0 core initialization problems -
      • Wrong value for token GL_SHADER_TYPE -
      • Missing tokens in GL_ATI_fragment_shader -
      • Missing entry points in GL_ARB_transpose_matrix -
      -
    -
-
-
    -
  • 1.3.2 [03-16-05] -
      -
    • New extension: -
        -
      • GL_APPLE_pixel_buffer -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 entry points -
      • Missing tokens in GL_SGIX_shadow -
      • MinGW makefile problem -
      • Check for incorrect OpenGL version string on SiS hardware -
      • Documentation update to meet the HTML 4.01 Transitional specification -
      -
    -
-
-
    -
  • 1.3.1 [02-02-05] -
      -
    • New features: -
        -
      • Consistent Unix and Windows versioning -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_object -
      • GL_ARB_pixel_buffer_object -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 tokens -
      • Incorrect typedefs (GLhandleARB and GLhalf) -
      • Borland compiler problems -
      -
    -
-
-
    -
  • 1.3.0 [01-04-05] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.0 -
      • glewIsSupported provides efficient string-based extension checks -
      • Custom code generation from a list of extensions -
      • Makefile changes -
      -
    • New extensions: -
        -
      • WGL_ATI_render_texture_rectangle -
      -
    • Bug fixes: -
        -
      • Incorrect function signature in OpenGL 1.5 core -
      -
    -
-
-
    -
  • 1.2.5 [12-06-04] -
      -
    • New extensions: -
        -
      • GL_ATI_texture_compression_3dc -
      • GL_EXT_Cg_shader -
      • GL_EXT_draw_range_elements -
      • GL_KTX_buffer_region -
      -
    • Bug fixes: -
        -
      • OpenGL version detection bug -
      • Problems with wxWindows and MinGW compilation -
      • visualinfo compilation problem with GLEW_MX specified -
      • Wrong token name in OpenGL 1.5 core -
      -
    • Support for FreeBSD -
    -
-
-
    -
  • 1.2.4 [09-06-04] -
      -
    • Added ARB_draw_buffers and ARB_texture_rectangle -
    • Fixed bug in ARB_shader_objects -
    • Replaced wglinfo with visualinfo -
    -
-
-
    -
  • 1.2.3 [06-10-04] -
      -
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 -
    • Bug fix in GL_ARB_vertex_blend -
    -
-
-
    -
  • 1.2.2 [05-08-04] -
      -
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array -
    • Fixed GLEW_MX problems -
    • Bug fix in GL_EXT_texture_rectangle and wglinfo -
    -
-
-
    -
  • 1.2.1 [03-18-04] -
      -
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) -
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader -
    • Added flags on GDI support and multisampling to wglinfo -
    -
-
-
    -
  • 1.2.0 [02-19-04] -
      -
    • Added full OpenGL 1.5 support -
    • Added support for multiple rendering contexts with different capabilities -
    • Added command line flags to glewinfo for selecting displays and visuals -
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels -
    • Added MinGW/MSYS support -
    • Bug fixes in GL_ARB_shader_objects and the OS X build -
    -
-
-
    -
  • 1.1.4 [12-15-03] -
      -
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, -GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, -GLX_ATI_pixel_format_float, and GLX_ATI_render_texture -
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader -
    -
-
-
    -
  • 1.1.3 [10-28-03] -
      -
    • Added Solaris and Darwin support -
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader -
    • Fixed bug in GL_WIN_swap_hint -
    • Removed glewinfo's dependency on GLUT -
    -
-
-
    -
  • 1.1.2 [09-15-03] -
      -
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards -
    • Added glewGetString for querying the GLEW version string -
    -
-
-
    -
  • 1.1.1 [08-11-03] -
      -
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two -
    • Fixed bug in GL_ARB_vertex_buffer_object -
    • Minor updates in documentation -
    -
-
-
    -
  • 1.1.0 [07-08-03] -
      -
    • Added automatic code generation -
    • Added almost every extension in the registry -
    • Added separate namespace -
    • Added Irix support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.7 [06-29-03] -
      -
    • Added GL_EXT_depth_bounds_test -
    • Fixed typos -
    -
-
-
    -
  • 1.0.6 [05-05-03] -
      -
    • Added ARB_vertex_buffer_object and NV_half_float -
    • Updated wglinfo -
    • Temporary Linux bug fixes (problems with SDL and MESA) -
    -
-
-
    -
  • 1.0.5 [02-17-03] -
      -
    • Bug fixes -
    • Added wglinfo -
    • Updated documentation -
    -
-
-
    -
  • 1.0.4 [02-02-03] -
      -
    • Added NV_texture_expand_normal -
    • Added mingw support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.3 [01-09-03] -
      -
    • Cleaned up ATI extensions -
    • Changed function prototypes to match glext.h -
    • Added EXT_texture3D -
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers -
    -
-
-
    -
  • 1.0.2 [12-21-02] -
      -
    • Added list of supported extensions to documentation -
    • Added NV_half_float and NV_texgen_emboss -
    -
-
-
    -
  • 1.0.1 [12-17-02] -
      -
    • Bug fixes -
    • Added glewGetExtension -
    -
-
-
    -
  • 1.0.0 [12-12-02] -
      -
    • Initial release -
    -
-
- diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample deleted file mode 100644 index cccfa90c3f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -GLX_3DFX_multisample - GLX_SAMPLE_BUFFERS_3DFX 0x8050 - GLX_SAMPLES_3DFX 0x8051 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association b/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association deleted file mode 100644 index 002164e8d9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -GLX_AMD_gpu_association -http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt -GLX_AMD_gpu_association - GLX_GPU_VENDOR_AMD 0x1F00 - GLX_GPU_RENDERER_STRING_AMD 0x1F01 - GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - GLX_GPU_RAM_AMD 0x21A3 - GLX_GPU_CLOCK_AMD 0x21A4 - GLX_GPU_NUM_PIPES_AMD 0x21A5 - GLX_GPU_NUM_SIMD_AMD 0x21A6 - GLX_GPU_NUM_RB_AMD 0x21A7 - GLX_GPU_NUM_SPI_AMD 0x21A8 - void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list) - GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int* attribList) - Bool glXDeleteAssociatedContextAMD (GLXContext ctx) - unsigned int glXGetContextGPUIDAMD (GLXContext ctx) - GLXContext glXGetCurrentAssociatedContextAMD (void) - unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int* ids) - int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void* data) - Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context deleted file mode 100644 index adeabb1bd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context +++ /dev/null @@ -1,9 +0,0 @@ -GLX_ARB_create_context -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context.txt -GLX_ARB_create_context - GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 - GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 - GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 - GLX_CONTEXT_FLAGS_ARB 0x2094 - GLXContext glXCreateContextAttribsARB (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile deleted file mode 100644 index dd42fac77b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile +++ /dev/null @@ -1,6 +0,0 @@ -GLX_ARB_create_context_profile -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context.txt -GLX_ARB_create_context_profile - GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 - GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness deleted file mode 100644 index 338a18421c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness +++ /dev/null @@ -1,7 +0,0 @@ -GLX_ARB_create_context_robustness -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context_robustness.txt -GLX_ARB_create_context_robustness - GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 - GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GLX_NO_RESET_NOTIFICATION_ARB 0x8261 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float deleted file mode 100644 index 0db2664872..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_ARB_fbconfig_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -GLX_ARB_fbconfig_float - GLX_RGBA_FLOAT_BIT 0x00000004 - GLX_RGBA_FLOAT_TYPE 0x20B9 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB deleted file mode 100644 index bbe0829d6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -GLX_ARB_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address deleted file mode 100644 index 5c066d7d00..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_get_proc_address -http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt -GLX_ARB_get_proc_address - extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample deleted file mode 100644 index 27dcc86c95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -GLX_ARB_multisample - GLX_SAMPLE_BUFFERS_ARB 100000 - GLX_SAMPLES_ARB 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation deleted file mode 100644 index c05fce291f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/glx_robustness_isolation.txt -GLX_ARB_robustness_application_isolation - GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation deleted file mode 100644 index bb2e8e0bdc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/glx_robustness_isolation.txt -GLX_ARB_robustness_share_group_isolation - GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object deleted file mode 100644 index de367dacdb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_vertex_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_buffer_object.txt -GLX_ARB_vertex_buffer_object - GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float deleted file mode 100644 index 854ca716ba..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ATI_pixel_format_float - -GLX_ATI_pixel_format_float - GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture b/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture deleted file mode 100644 index 254eb9f3bc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture +++ /dev/null @@ -1,41 +0,0 @@ -GLX_ATI_render_texture - -GLX_ATI_render_texture - GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 - GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 - GLX_TEXTURE_FORMAT_ATI 0x9802 - GLX_TEXTURE_TARGET_ATI 0x9803 - GLX_MIPMAP_TEXTURE_ATI 0x9804 - GLX_TEXTURE_RGB_ATI 0x9805 - GLX_TEXTURE_RGBA_ATI 0x9806 - GLX_NO_TEXTURE_ATI 0x9807 - GLX_TEXTURE_CUBE_MAP_ATI 0x9808 - GLX_TEXTURE_1D_ATI 0x9809 - GLX_TEXTURE_2D_ATI 0x980A - GLX_MIPMAP_LEVEL_ATI 0x980B - GLX_CUBE_MAP_FACE_ATI 0x980C - GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D - GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E - GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 - GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 - GLX_FRONT_LEFT_ATI 0x9813 - GLX_FRONT_RIGHT_ATI 0x9814 - GLX_BACK_LEFT_ATI 0x9815 - GLX_BACK_RIGHT_ATI 0x9816 - GLX_AUX0_ATI 0x9817 - GLX_AUX1_ATI 0x9818 - GLX_AUX2_ATI 0x9819 - GLX_AUX3_ATI 0x981A - GLX_AUX4_ATI 0x981B - GLX_AUX5_ATI 0x981C - GLX_AUX6_ATI 0x981D - GLX_AUX7_ATI 0x981E - GLX_AUX8_ATI 0x981F - GLX_AUX9_ATI 0x9820 - GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 - GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - void glXBindTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXReleaseTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXDrawableAttribATI (Display *dpy, GLXDrawable draw, const int *attrib_list) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age deleted file mode 100644 index c944bc1dbf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_buffer_age -http://www.opengl.org/registry/specs/gl/EXT/glx_buffer_age.txt -GLX_EXT_buffer_age - GLX_BACK_BUFFER_AGE_EXT 0x20F4 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile deleted file mode 100644 index 3093baa3bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt -GLX_EXT_create_context_es2_profile - GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile deleted file mode 100644 index 845f65ee71..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt -GLX_EXT_create_context_es_profile - GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float deleted file mode 100644 index 7c7822d81a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_EXT_fbconfig_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GLX_EXT_fbconfig_packed_float - GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB deleted file mode 100644 index f51c484afd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GLX_EXT_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context deleted file mode 100644 index 336ed852ad..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context +++ /dev/null @@ -1,11 +0,0 @@ -GLX_EXT_import_context -http://www.opengl.org/registry/specs/gl/EXT/import_context.txt -GLX_EXT_import_context - GLX_SHARE_CONTEXT_EXT 0x800A - GLX_VISUAL_ID_EXT 0x800B - GLX_SCREEN_EXT 0x800C - void glXFreeContextEXT (Display* dpy, GLXContext context) - GLXContextID glXGetContextIDEXT (const GLXContext context) - GLXContext glXImportContextEXT (Display* dpy, GLXContextID contextID) - int glXQueryContextInfoEXT (Display* dpy, GLXContext context, int attribute,int *value) - typedef XID GLXContextID diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker deleted file mode 100644 index 2ac9523ec7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker +++ /dev/null @@ -1,3 +0,0 @@ -GLX_EXT_scene_marker -http://www.opengl.org/registry/specs/gl/EXT/scene_marker.txt -GLX_EXT_scene_marker diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control deleted file mode 100644 index 3eb54439de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control +++ /dev/null @@ -1,6 +0,0 @@ -GLX_EXT_swap_control -http://www.opengl.org/registry/specs/gl/EXT/swap_control.txt -GLX_EXT_swap_control - GLX_SWAP_INTERVAL_EXT 0x20F1 - GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 - void glXSwapIntervalEXT (Display* dpy, GLXDrawable drawable, int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear deleted file mode 100644 index f832830d27..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_swap_control_tear -http://www.opengl.org/registry/specs/gl/EXT/glx_swap_control_tear.txt -GLX_EXT_swap_control_tear - GLX_LATE_SWAPS_TEAR_EXT 0x20F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap deleted file mode 100644 index 794a406ecb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap +++ /dev/null @@ -1,36 +0,0 @@ -GLX_EXT_texture_from_pixmap -http://www.opengl.org/registry/specs/gl/EXT/texture_from_pixmap.txt -GLX_EXT_texture_from_pixmap - GLX_TEXTURE_1D_BIT_EXT 0x00000001 - GLX_TEXTURE_2D_BIT_EXT 0x00000002 - GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 - GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 - GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 - GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 - GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 - GLX_Y_INVERTED_EXT 0x20D4 - GLX_TEXTURE_FORMAT_EXT 0x20D5 - GLX_TEXTURE_TARGET_EXT 0x20D6 - GLX_MIPMAP_TEXTURE_EXT 0x20D7 - GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 - GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 - GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA - GLX_TEXTURE_1D_EXT 0x20DB - GLX_TEXTURE_2D_EXT 0x20DC - GLX_TEXTURE_RECTANGLE_EXT 0x20DD - GLX_FRONT_LEFT_EXT 0x20DE - GLX_FRONT_RIGHT_EXT 0x20DF - GLX_BACK_LEFT_EXT 0x20E0 - GLX_BACK_RIGHT_EXT 0x20E1 - GLX_AUX0_EXT 0x20E2 - GLX_AUX1_EXT 0x20E3 - GLX_AUX2_EXT 0x20E4 - GLX_AUX3_EXT 0x20E5 - GLX_AUX4_EXT 0x20E6 - GLX_AUX5_EXT 0x20E7 - GLX_AUX6_EXT 0x20E8 - GLX_AUX7_EXT 0x20E9 - GLX_AUX8_EXT 0x20EA - GLX_AUX9_EXT 0x20EB - void glXBindTexImageEXT (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list) - void glXReleaseTexImageEXT (Display* display, GLXDrawable drawable, int buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info deleted file mode 100644 index ead815487a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info +++ /dev/null @@ -1,19 +0,0 @@ -GLX_EXT_visual_info -http://www.opengl.org/registry/specs/gl/EXT/visual_info.txt -GLX_EXT_visual_info - GLX_X_VISUAL_TYPE_EXT 0x22 - GLX_TRANSPARENT_TYPE_EXT 0x23 - GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 - GLX_TRANSPARENT_RED_VALUE_EXT 0x25 - GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 - GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 - GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 - GLX_NONE_EXT 0x8000 - GLX_TRUE_COLOR_EXT 0x8002 - GLX_DIRECT_COLOR_EXT 0x8003 - GLX_PSEUDO_COLOR_EXT 0x8004 - GLX_STATIC_COLOR_EXT 0x8005 - GLX_GRAY_SCALE_EXT 0x8006 - GLX_STATIC_GRAY_EXT 0x8007 - GLX_TRANSPARENT_RGB_EXT 0x8008 - GLX_TRANSPARENT_INDEX_EXT 0x8009 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating deleted file mode 100644 index b5fd56b902..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating +++ /dev/null @@ -1,6 +0,0 @@ -GLX_EXT_visual_rating -http://www.opengl.org/registry/specs/gl/EXT/visual_rating.txt -GLX_EXT_visual_rating - GLX_VISUAL_CAVEAT_EXT 0x20 - GLX_SLOW_VISUAL_EXT 0x8001 - GLX_NON_CONFORMANT_VISUAL_EXT 0x800D diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event b/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event deleted file mode 100644 index bd407af55b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event +++ /dev/null @@ -1,7 +0,0 @@ -GLX_INTEL_swap_event -http://www.opengl.org/registry/specs/gl/INTEL/swap_event.txt -GLX_INTEL_swap_event - GLX_EXCHANGE_COMPLETE_INTEL 0x8180 - GLX_COPY_COMPLETE_INTEL 0x8181 - GLX_FLIP_COMPLETE_INTEL 0x8182 - GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset deleted file mode 100644 index cbbf7bbfc3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_agp_offset -http://www.opengl.org/registry/specs/gl/MESA/agp_offset.txt -GLX_MESA_agp_offset - unsigned int glXGetAGPOffsetMESA (const void* pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer deleted file mode 100644 index 318bf2964a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_copy_sub_buffer -http://www.opengl.org/registry/specs/gl/MESA/copy_sub_buffer.txt -GLX_MESA_copy_sub_buffer - void glXCopySubBufferMESA (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap deleted file mode 100644 index 1cd79c4cf0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_pixmap_colormap -http://www.opengl.org/registry/specs/gl/MESA/pixmap_colormap.txt -GLX_MESA_pixmap_colormap - GLXPixmap glXCreateGLXPixmapMESA (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers deleted file mode 100644 index dc8bf0e948..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_release_buffers -http://www.opengl.org/registry/specs/gl/MESA/release_buffers.txt -GLX_MESA_release_buffers - Bool glXReleaseBuffersMESA (Display* dpy, GLXDrawable d) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode deleted file mode 100644 index da51ee9bf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode +++ /dev/null @@ -1,6 +0,0 @@ -GLX_MESA_set_3dfx_mode -http://www.opengl.org/registry/specs/gl/MESA/set_3dfx_mode.txt -GLX_MESA_set_3dfx_mode - GLX_3DFX_WINDOW_MODE_MESA 0x1 - GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 - GLboolean glXSet3DfxModeMESA (GLint mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control deleted file mode 100644 index 4416519379..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -GLX_MESA_swap_control -http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec -GLX_MESA_swap_control - int glXGetSwapIntervalMESA (void) - int glXSwapIntervalMESA (unsigned int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image deleted file mode 100644 index 4ca2597d18..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -GLX_NV_copy_image - void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer deleted file mode 100644 index cc9185ee94..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_float_buffer -http://cvs1.nvidia.com/inc/GL/glxtokens.h -GLX_NV_float_buffer - GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage deleted file mode 100644 index ee3a30f25a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -GLX_NV_multisample_coverage - GLX_COLOR_SAMPLES_NV 0x20B3 - GLX_COVERAGE_SAMPLES_NV 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video b/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video deleted file mode 100644 index bd8b3812a5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video +++ /dev/null @@ -1,6 +0,0 @@ -GLX_NV_present_video -http://www.opengl.org/registry/specs/gl/NV/present_video.txt -GLX_NV_present_video - GLX_NUM_VIDEO_SLOTS_NV 0x20F0 - int glXBindVideoDeviceNV (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list) - unsigned int* glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group b/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group deleted file mode 100644 index e5534b35aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group +++ /dev/null @@ -1,9 +0,0 @@ -GLX_NV_swap_group -http://www.opengl.org/registry/specs/gl/NV/glx_swap_group.txt -GLX_NV_swap_group - Bool glXBindSwapBarrierNV (Display* dpy, GLuint group, GLuint barrier) - Bool glXJoinSwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint group) - Bool glXQueryFrameCountNV (Display* dpy, int screen, GLuint *count) - Bool glXQueryMaxSwapGroupsNV (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers) - Bool glXQuerySwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier) - Bool glXResetFrameCountNV (Display* dpy, int screen) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range deleted file mode 100644 index 11afe17406..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -GLX_NV_vertex_array_range - void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void glXFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture deleted file mode 100644 index d8aa6131f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture +++ /dev/null @@ -1,12 +0,0 @@ -GLX_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -GLX_NV_video_capture - GLX_DEVICE_ID_NV 0x20CD - GLX_UNIQUE_ID_NV 0x20CE - GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - int glXBindVideoCaptureDeviceNV (Display* dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device) - GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display* dpy, int screen, int *nelements) - void glXLockVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) - int glXQueryVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value) - void glXReleaseVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) - typedef XID GLXVideoCaptureDeviceNV diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output b/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output deleted file mode 100644 index a476ba68bf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output +++ /dev/null @@ -1,19 +0,0 @@ -GLX_NV_video_output -http://www.opengl.org/registry/specs/gl/NV/glx_video_output.txt -GLX_NV_video_output - GLX_VIDEO_OUT_COLOR_NV 0x20C3 - GLX_VIDEO_OUT_ALPHA_NV 0x20C4 - GLX_VIDEO_OUT_DEPTH_NV 0x20C5 - GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 - GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 - GLX_VIDEO_OUT_FRAME_NV 0x20C8 - GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 - GLX_VIDEO_OUT_FIELD_2_NV 0x20CA - GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB - GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC - int glXBindVideoImageNV (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer) - int glXGetVideoDeviceNV (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice) - int glXGetVideoInfoNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo) - int glXReleaseVideoDeviceNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice) - int glXReleaseVideoImageNV (Display* dpy, GLXPbuffer pbuf) - int glXSendPbufferToVideoNV (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method b/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method deleted file mode 100644 index aa7d97e50a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method +++ /dev/null @@ -1,7 +0,0 @@ -GLX_OML_swap_method -http://www.opengl.org/registry/specs/gl/OML/glx_swap_method.txt -GLX_OML_swap_method - GLX_SWAP_METHOD_OML 0x8060 - GLX_SWAP_EXCHANGE_OML 0x8061 - GLX_SWAP_COPY_OML 0x8062 - GLX_SWAP_UNDEFINED_OML 0x8063 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control b/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control deleted file mode 100644 index 4ef4765df9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control +++ /dev/null @@ -1,8 +0,0 @@ -GLX_OML_sync_control -http://www.opengl.org/registry/specs/gl/OML/glx_sync_control.txt -GLX_OML_sync_control - Bool glXGetMscRateOML (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator) - Bool glXGetSyncValuesOML (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc) - int64_t glXSwapBuffersMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder) - Bool glXWaitForMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc) - Bool glXWaitForSbcOML (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay deleted file mode 100644 index ab2201d1d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIS_blended_overlay -http://www.opengl.org/registry/specs/gl/SGIS/blended_overlay.txt -GLX_SGIS_blended_overlay - GLX_BLENDED_RGBA_SGIS 0x8025 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range deleted file mode 100644 index 073f6dc00f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range +++ /dev/null @@ -1,3 +0,0 @@ -GLX_SGIS_color_range -http://www.opengl.org/registry/specs/gl/SGIS/color_range.txt -GLX_SGIS_color_range diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample deleted file mode 100644 index 6cc1019449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_multisample -http://www.opengl.org/registry/specs/gl/SGIS/multisample.txt -GLX_SGIS_multisample - GLX_SAMPLE_BUFFERS_SGIS 100000 - GLX_SAMPLES_SGIS 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample deleted file mode 100644 index 274e90f76e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_shared_multisample - -GLX_SGIS_shared_multisample - GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 - GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig deleted file mode 100644 index 59b33f8352..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig +++ /dev/null @@ -1,22 +0,0 @@ -GLX_SGIX_fbconfig -http://www.opengl.org/registry/specs/gl/SGIX/fbconfig.txt -GLX_SGIX_fbconfig - GLX_WINDOW_BIT_SGIX 0x00000001 - GLX_RGBA_BIT_SGIX 0x00000001 - GLX_PIXMAP_BIT_SGIX 0x00000002 - GLX_COLOR_INDEX_BIT_SGIX 0x00000002 - GLX_SCREEN_EXT 0x800C - GLX_DRAWABLE_TYPE_SGIX 0x8010 - GLX_RENDER_TYPE_SGIX 0x8011 - GLX_X_RENDERABLE_SGIX 0x8012 - GLX_FBCONFIG_ID_SGIX 0x8013 - GLX_RGBA_TYPE_SGIX 0x8014 - GLX_COLOR_INDEX_TYPE_SGIX 0x8015 - GLXFBConfigSGIX* glXChooseFBConfigSGIX (Display *dpy, int screen, const int *attrib_list, int *nelements) - GLXContext glXCreateContextWithConfigSGIX (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) - GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display* dpy, GLXFBConfig config, Pixmap pixmap) - int glXGetFBConfigAttribSGIX (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value) - GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display* dpy, XVisualInfo *vis) - XVisualInfo* glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfig config) - typedef XID GLXFBConfigIDSGIX - typedef struct __GLXFBConfigRec *GLXFBConfigSGIX diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe deleted file mode 100644 index 79ec30295c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe +++ /dev/null @@ -1,25 +0,0 @@ -GLX_SGIX_hyperpipe -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt -GLX_SGIX_hyperpipe - GLX_HYPERPIPE_ID_SGIX 0x8030 - GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 - GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 - GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 - GLX_PIPE_RECT_SGIX 0x00000001 - GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 - GLX_HYPERPIPE_STEREO_SGIX 0x00000003 - GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 - GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 - GLX_BAD_HYPERPIPE_SGIX 92 - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; - GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes) - int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId) - GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes) - int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId) - int glXBindHyperpipeSGIX (Display *dpy, int hpId) - int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList) - int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList) - int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer deleted file mode 100644 index 6740d8289b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer +++ /dev/null @@ -1,35 +0,0 @@ -GLX_SGIX_pbuffer -http://www.opengl.org/registry/specs/gl/SGIX/pbuffer.txt -GLX_SGIX_pbuffer - GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 - GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 - GLX_PBUFFER_BIT_SGIX 0x00000004 - GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 - GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 - GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 - GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 - GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 - GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 - GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 - GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 - GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 - GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 - GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 - GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A - GLX_PRESERVED_CONTENTS_SGIX 0x801B - GLX_LARGEST_PBUFFER_SGIX 0x801C - GLX_WIDTH_SGIX 0x801D - GLX_HEIGHT_SGIX 0x801E - GLX_EVENT_MASK_SGIX 0x801F - GLX_DAMAGED_SGIX 0x8020 - GLX_SAVED_SGIX 0x8021 - GLX_WINDOW_SGIX 0x8022 - GLX_PBUFFER_SGIX 0x8023 - GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 - GLXPbuffer glXCreateGLXPbufferSGIX (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list) - void glXDestroyGLXPbufferSGIX (Display* dpy, GLXPbuffer pbuf) - void glXGetSelectedEventSGIX (Display* dpy, GLXDrawable drawable, unsigned long *mask) - void glXQueryGLXPbufferSGIX (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value) - void glXSelectEventSGIX (Display* dpy, GLXDrawable drawable, unsigned long mask) - typedef XID GLXPbufferSGIX - typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier deleted file mode 100644 index 57dd60dbb0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIX_swap_barrier -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt -GLX_SGIX_swap_barrier - void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier) - Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group deleted file mode 100644 index 3530604605..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_swap_group -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt -GLX_SGIX_swap_group - void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize deleted file mode 100644 index 8591e30140..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize +++ /dev/null @@ -1,10 +0,0 @@ -GLX_SGIX_video_resize -http://www.opengl.org/registry/specs/gl/SGIX/video_resize.txt -GLX_SGIX_video_resize - GLX_SYNC_FRAME_SGIX 0x00000000 - GLX_SYNC_SWAP_SGIX 0x00000001 - int glXBindChannelToWindowSGIX (Display* display, int screen, int channel, Window window) - int glXChannelRectSGIX (Display* display, int screen, int channel, int x, int y, int w, int h) - int glXChannelRectSyncSGIX (Display* display, int screen, int channel, GLenum synctype) - int glXQueryChannelDeltasSGIX (Display* display, int screen, int channel, int *x, int *y, int *w, int *h) - int glXQueryChannelRectSGIX (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group deleted file mode 100644 index 572563f822..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_visual_select_group -http://www.opengl.org/registry/specs/gl/SGIX/visual_select_group.txt -GLX_SGIX_visual_select_group - GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion deleted file mode 100644 index 2c934fdcf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGI_cushion -http://www.opengl.org/registry/specs/gl/SGI/cushion.txt -GLX_SGI_cushion - void glXCushionSGI (Display* dpy, Window window, float cushion) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read deleted file mode 100644 index 8978949272..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_make_current_read -http://www.opengl.org/registry/specs/gl/SGI/make_current_read.txt -GLX_SGI_make_current_read - GLXDrawable glXGetCurrentReadDrawableSGI (void) - Bool glXMakeCurrentReadSGI (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control deleted file mode 100644 index 71d2411a9f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGI_swap_control -http://www.opengl.org/registry/specs/gl/SGI/swap_control.txt -GLX_SGI_swap_control - int glXSwapIntervalSGI (int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync deleted file mode 100644 index dcdb968c65..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_video_sync -http://www.opengl.org/registry/specs/SGI/video_sync.txt -GLX_SGI_video_sync - int glXGetVideoSyncSGI (unsigned int* count) - int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int* count) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index b/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index deleted file mode 100644 index ae7bee6dd8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SUN_get_transparent_index -http://www.opengl.org/registry/specs/gl/SUN/get_transparent_index.txt -GLX_SUN_get_transparent_index - Status glXGetTransparentIndexSUN (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize b/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize deleted file mode 100644 index 0a0cefe3db..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize +++ /dev/null @@ -1,7 +0,0 @@ -GLX_SUN_video_resize -http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt -GLX_SUN_video_resize - GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - GLX_VIDEO_RESIZE_SUN 0x8171 - int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) - int glXGetVideoResizeSUN (Display* display, GLXDrawable window, float* factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample deleted file mode 100644 index d78f3d7988..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -GL_3DFX_multisample - GL_MULTISAMPLE_3DFX 0x86B2 - GL_SAMPLE_BUFFERS_3DFX 0x86B3 - GL_SAMPLES_3DFX 0x86B4 - GL_MULTISAMPLE_BIT_3DFX 0x20000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer deleted file mode 100644 index eeed6ceab3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_3DFX_tbuffer -http://www.opengl.org/registry/specs/gl/3DFX/tbuffer.txt -GL_3DFX_tbuffer - void glTbufferMask3DFX (GLuint mask) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 deleted file mode 100644 index 87a98d1008..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 +++ /dev/null @@ -1,5 +0,0 @@ -GL_3DFX_texture_compression_FXT1 -http://www.opengl.org/registry/specs/gl/3DFX/texture_compression_FXT1.txt -GL_3DFX_texture_compression_FXT1 - GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 - GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor b/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor deleted file mode 100644 index d231b8b049..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_blend_minmax_factor -http://www.opengl.org/registry/specs/gl/AMD/blend_minmax_factor.txt -GL_AMD_blend_minmax_factor - GL_FACTOR_MIN_AMD 0x901C - GL_FACTOR_MAX_AMD 0x901D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth b/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth deleted file mode 100644 index 2501e7c82b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_conservative_depth -http://www.opengl.org/registry/specs/gl/AMD/conservative_depth.txt -GL_AMD_conservative_depth diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output b/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output deleted file mode 100644 index a70ff683c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output +++ /dev/null @@ -1,22 +0,0 @@ -GL_AMD_debug_output -http://www.opengl.org/registry/specs/gl/AMD/debug_output.txt -GL_AMD_debug_output - GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 - GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 - GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 - GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 - GL_DEBUG_SEVERITY_LOW_AMD 0x9148 - GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 - GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A - GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B - GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C - GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D - GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E - GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F - GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 - void glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam) - void glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message) - typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate b/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate deleted file mode 100644 index d1bc82005e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_depth_clamp_separate -http://www.opengl.org/registry/specs/gl/AMD/depth_clamp_separate.txt -GL_AMD_depth_clamp_separate - GL_DEPTH_CLAMP_NEAR_AMD 0x901E - GL_DEPTH_CLAMP_FAR_AMD 0x901F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend b/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend deleted file mode 100644 index f69023ef4d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend +++ /dev/null @@ -1,7 +0,0 @@ -GL_AMD_draw_buffers_blend -http://www.opengl.org/registry/specs/gl/AMD/draw_buffers_blend.txt -GL_AMD_draw_buffers_blend - void glBlendEquationIndexedAMD (GLuint buf, GLenum mode) - void glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst) - void glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements b/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements deleted file mode 100644 index 936e7adcfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements +++ /dev/null @@ -1,13 +0,0 @@ -GL_AMD_interleaved_elements -http://www.opengl.org/registry/specs/gl/AMD/interleaved_elements.txt -GL_AMD_interleaved_elements - GL_RED 0x1903 - GL_GREEN 0x1904 - GL_BLUE 0x1905 - GL_ALPHA 0x1906 - GL_RG8UI 0x8238 - GL_RG16UI 0x823A - GL_RGBA8UI 0x8D7C - GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 - GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 - void glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect deleted file mode 100644 index 9c52a80623..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/AMD/multi_draw_indirect.txt -GL_AMD_multi_draw_indirect - void glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride) - void glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete b/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete deleted file mode 100644 index a8b69ff7c9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete +++ /dev/null @@ -1,11 +0,0 @@ -GL_AMD_name_gen_delete -http://www.opengl.org/registry/specs/gl/AMD/name_gen_delete.txt -GL_AMD_name_gen_delete - GL_DATA_BUFFER_AMD 0x9151 - GL_PERFORMANCE_MONITOR_AMD 0x9152 - GL_QUERY_OBJECT_AMD 0x9153 - GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 - GL_SAMPLER_OBJECT_AMD 0x9155 - void glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint* names) - void glGenNamesAMD (GLenum identifier, GLuint num, GLuint* names) - GLboolean glIsNameAMD (GLenum identifier, GLuint name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor b/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor deleted file mode 100644 index 0135859da8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor +++ /dev/null @@ -1,21 +0,0 @@ -GL_AMD_performance_monitor -http://www.opengl.org/registry/specs/gl/AMD/performance_monitor.txt -GL_AMD_performance_monitor - GL_COUNTER_TYPE_AMD 0x8BC0 - GL_COUNTER_RANGE_AMD 0x8BC1 - GL_UNSIGNED_INT64_AMD 0x8BC2 - GL_PERCENTAGE_AMD 0x8BC3 - GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 - GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 - GL_PERFMON_RESULT_AMD 0x8BC6 - void glBeginPerfMonitorAMD (GLuint monitor) - void glDeletePerfMonitorsAMD (GLsizei n, GLuint* monitors) - void glEndPerfMonitorAMD (GLuint monitor) - void glGenPerfMonitorsAMD (GLsizei n, GLuint* monitors) - void glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten) - void glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data) - void glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar *counterString) - void glGetPerfMonitorCountersAMD (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters) - void glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei* length, GLchar *groupString) - void glGetPerfMonitorGroupsAMD (GLint* numGroups, GLsizei groupsSize, GLuint *groups) - void glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory b/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory deleted file mode 100644 index 2a39cae5d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory +++ /dev/null @@ -1,4 +0,0 @@ -GL_AMD_pinned_memory -http://www.opengl.org/registry/specs/gl/AMD/pinned_memory.txt -GL_AMD_pinned_memory - GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object deleted file mode 100644 index ed36d63beb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object +++ /dev/null @@ -1,6 +0,0 @@ -GL_AMD_query_buffer_object -http://www.opengl.org/registry/specs/gl/AMD/query_buffer_object.txt -GL_AMD_query_buffer_object - GL_QUERY_BUFFER_AMD 0x9192 - GL_QUERY_BUFFER_BINDING_AMD 0x9193 - GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions b/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions deleted file mode 100644 index 88b94c6048..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_sample_positions -http://www.opengl.org/registry/specs/gl/AMD/sample_positions.txt -GL_AMD_sample_positions - GL_SUBSAMPLE_DISTANCE_AMD 0x883F - void glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat* val) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture b/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture deleted file mode 100644 index c9c317196d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_AMD_seamless_cubemap_per_texture -http://www.opengl.org/registry/specs/gl/AMD/seamless_cubemap_per_texture.txt -GL_AMD_seamless_cubemap_per_texture - GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export b/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export deleted file mode 100644 index ff90459b43..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_shader_stencil_export -http://www.opengl.org/registry/specs/gl/AMD/shader_stencil_export.txt -GL_AMD_shader_stencil_export diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax b/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax deleted file mode 100644 index c6f4be7962..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_shader_trinary_minmax -http://www.opengl.org/registry/specs/gl/AMD/shader_trinary_minmax.txt -GL_AMD_shader_trinary_minmax diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture b/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture deleted file mode 100644 index da930fcfdf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture +++ /dev/null @@ -1,14 +0,0 @@ -GL_AMD_sparse_texture -http://www.opengl.org/registry/specs/gl/AMD/sparse_texture.txt -GL_AMD_sparse_texture - GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 - GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 - GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 - GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 - GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 - GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 - GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A - GL_MIN_SPARSE_LEVEL_AMD 0x919B - GL_MIN_LOD_WARNING_AMD 0x919C - void glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) - void glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended b/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended deleted file mode 100644 index 150f1129f3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended +++ /dev/null @@ -1,8 +0,0 @@ -GL_AMD_stencil_operation_extended -http://www.opengl.org/registry/specs/gl/AMD/stencil_operation_extended.txt -GL_AMD_stencil_operation_extended - GL_SET_AMD 0x874A - GL_REPLACE_VALUE_AMD 0x874B - GL_STENCIL_OP_VALUE_AMD 0x874C - GL_STENCIL_BACK_OP_VALUE_AMD 0x874D - void glStencilOpValueAMD (GLenum face, GLuint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 b/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 deleted file mode 100644 index 618a61626c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_texture_texture4 -http://www.opengl.org/registry/specs/gl/AMD/texture_texture4.txt -GL_AMD_texture_texture4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles b/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles deleted file mode 100644 index 7f3c99eec0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_transform_feedback3_lines_triangles -http://www.opengl.org/registry/specs/gl/AMD/transform_feedback3_lines_triangles.txt -GL_AMD_transform_feedback3_lines_triangles diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer deleted file mode 100644 index e93d575091..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_vertex_shader_layer -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_layer.txt -GL_AMD_vertex_shader_layer diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator deleted file mode 100644 index d61c90691c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator +++ /dev/null @@ -1,12 +0,0 @@ -GL_AMD_vertex_shader_tessellator -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_tessellator.txt -GL_AMD_vertex_shader_tessellator - GL_SAMPLER_BUFFER_AMD 0x9001 - GL_INT_SAMPLER_BUFFER_AMD 0x9002 - GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 - GL_TESSELLATION_MODE_AMD 0x9004 - GL_TESSELLATION_FACTOR_AMD 0x9005 - GL_DISCRETE_AMD 0x9006 - GL_CONTINUOUS_AMD 0x9007 - void glTessellationFactorAMD (GLfloat factor) - void glTessellationModeAMD (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index deleted file mode 100644 index 31010b3304..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_vertex_shader_viewport_index -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_viewport_index.txt -GL_AMD_vertex_shader_viewport_index diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture deleted file mode 100644 index 608ea62e2b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_ANGLE_depth_texture -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_depth_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit deleted file mode 100644 index 8c8a305e95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit +++ /dev/null @@ -1,8 +0,0 @@ -GL_ANGLE_framebuffer_blit -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_framebuffer_blit - GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 - GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 - GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA - void glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample deleted file mode 100644 index b6a66cbd09..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_framebuffer_multisample -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_framebuffer_multisample - GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 - GL_MAX_SAMPLES_ANGLE 0x8D57 - void glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays deleted file mode 100644 index ec2f3ac7b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_instanced_arrays -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE - void glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) - void glVertexAttribDivisorANGLE (GLuint index, GLuint divisor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order deleted file mode 100644 index 6d9697ee91..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order +++ /dev/null @@ -1,4 +0,0 @@ -GL_ANGLE_pack_reverse_row_order -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_pack_reverse_row_order - GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary deleted file mode 100644 index 40ebd5a03d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary +++ /dev/null @@ -1,4 +0,0 @@ -GL_ANGLE_program_binary -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_program_binary - GL_PROGRAM_BINARY_ANGLE 0x93A6 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 deleted file mode 100644 index 1ea73ba1d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt1 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt1 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 deleted file mode 100644 index 4ca07dd001..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt3 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt3 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 deleted file mode 100644 index ebaa7f623a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt5 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt5 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage deleted file mode 100644 index 903e1bbea7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage +++ /dev/null @@ -1,5 +0,0 @@ -GL_ANGLE_texture_usage -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_usage - GL_TEXTURE_USAGE_ANGLE 0x93A2 - GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query deleted file mode 100644 index 05f905ee75..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query +++ /dev/null @@ -1,20 +0,0 @@ -GL_ANGLE_timer_query -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_timer_query - GL_QUERY_COUNTER_BITS_ANGLE 0x8864 - GL_CURRENT_QUERY_ANGLE 0x8865 - GL_QUERY_RESULT_ANGLE 0x8866 - GL_QUERY_RESULT_AVAILABLE_ANGLE 0x8867 - GL_TIME_ELAPSED_ANGLE 0x88BF - GL_TIMESTAMP_ANGLE 0x8E28 - void glBeginQueryANGLE (GLenum target, GLuint id) - void glDeleteQueriesANGLE (GLsizei n, const GLuint* ids) - void glEndQueryANGLE (GLenum target) - void glGenQueriesANGLE (GLsizei n, GLuint* ids) - void glGetQueryObjecti64vANGLE (GLuint id, GLenum pname, GLint64* params) - void glGetQueryObjectivANGLE (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectui64vANGLE (GLuint id, GLenum pname, GLuint64* params) - void glGetQueryObjectuivANGLE (GLuint id, GLenum pname, GLuint* params) - void glGetQueryivANGLE (GLenum target, GLenum pname, GLint* params) - GLboolean glIsQueryANGLE (GLuint id) - void glQueryCounterANGLE (GLuint id, GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source deleted file mode 100644 index 3296048943..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source +++ /dev/null @@ -1,5 +0,0 @@ -GL_ANGLE_translated_shader_source -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_translated_shader_source - GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 - void glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil deleted file mode 100644 index 730cdb4f98..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_aux_depth_stencil -http://www.opengl.org/registry/specs/gl/APPLE/aux_depth_stencil.txt -GL_APPLE_aux_depth_stencil - GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage deleted file mode 100644 index 8f40a5ca04..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_client_storage -http://www.opengl.org/registry/specs/gl/APPLE/client_storage.txt -GL_APPLE_client_storage - GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array deleted file mode 100644 index f719ccd3b3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array +++ /dev/null @@ -1,11 +0,0 @@ -GL_APPLE_element_array -http://www.opengl.org/registry/specs/gl/APPLE/element_array.txt -GL_APPLE_element_array - GL_ELEMENT_ARRAY_APPLE 0x8A0C - GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D - GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E - void glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count) - void glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) - void glElementPointerAPPLE (GLenum type, const GLvoid *pointer) - void glMultiDrawElementArrayAPPLE (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount) - void glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence deleted file mode 100644 index d21cd342d5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence +++ /dev/null @@ -1,13 +0,0 @@ -GL_APPLE_fence -http://www.opengl.org/registry/specs/gl/APPLE/fence.txt -GL_APPLE_fence - GL_DRAW_PIXELS_APPLE 0x8A0A - GL_FENCE_APPLE 0x8A0B - void glDeleteFencesAPPLE (GLsizei n, const GLuint* fences) - void glFinishFenceAPPLE (GLuint fence) - void glFinishObjectAPPLE (GLenum object, GLint name) - void glGenFencesAPPLE (GLsizei n, GLuint* fences) - GLboolean glIsFenceAPPLE (GLuint fence) - void glSetFenceAPPLE (GLuint fence) - GLboolean glTestFenceAPPLE (GLuint fence) - GLboolean glTestObjectAPPLE (GLenum object, GLuint name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels deleted file mode 100644 index 2bf7458089..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels +++ /dev/null @@ -1,17 +0,0 @@ -GL_APPLE_float_pixels -http://www.opengl.org/registry/specs/APPLE/float_pixels.txt -GL_APPLE_float_pixels - GL_HALF_APPLE 0x140B - GL_COLOR_FLOAT_APPLE 0x8A0F - GL_RGBA_FLOAT32_APPLE 0x8814 - GL_RGB_FLOAT32_APPLE 0x8815 - GL_ALPHA_FLOAT32_APPLE 0x8816 - GL_INTENSITY_FLOAT32_APPLE 0x8817 - GL_LUMINANCE_FLOAT32_APPLE 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 - GL_RGBA_FLOAT16_APPLE 0x881A - GL_RGB_FLOAT16_APPLE 0x881B - GL_ALPHA_FLOAT16_APPLE 0x881C - GL_INTENSITY_FLOAT16_APPLE 0x881D - GL_LUMINANCE_FLOAT16_APPLE 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range deleted file mode 100644 index e1b283e7e7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range +++ /dev/null @@ -1,7 +0,0 @@ -GL_APPLE_flush_buffer_range -http://www.opengl.org/registry/specs/gl/APPLE/flush_buffer_range.txt -GL_APPLE_flush_buffer_range - GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 - GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 - void glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param) - void glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable deleted file mode 100644 index 35a653269c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_object_purgeable -http://www.opengl.org/registry/specs/gl/APPLE/object_purgeable.txt -GL_APPLE_object_purgeable - GL_BUFFER_OBJECT_APPLE 0x85B3 - GL_RELEASED_APPLE 0x8A19 - GL_VOLATILE_APPLE 0x8A1A - GL_RETAINED_APPLE 0x8A1B - GL_UNDEFINED_APPLE 0x8A1C - GL_PURGEABLE_APPLE 0x8A1D - void glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint* params) - GLenum glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option) - GLenum glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer deleted file mode 100644 index 7449f2918e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_pixel_buffer - -GL_APPLE_pixel_buffer - GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 deleted file mode 100644 index 5ec30449a5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 +++ /dev/null @@ -1,6 +0,0 @@ -GL_APPLE_rgb_422 -http://www.opengl.org/registry/specs/gl/APPLE/rgb_422.txt -GL_APPLE_rgb_422 - GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA - GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB - GL_RGB_422_APPLE 0x8A1F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes deleted file mode 100644 index d7c24b0756..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes +++ /dev/null @@ -1,5 +0,0 @@ -GL_APPLE_row_bytes -http://www.opengl.org/registry/specs/gl/APPLE/row_bytes.txt -GL_APPLE_row_bytes - GL_PACK_ROW_BYTES_APPLE 0x8A15 - GL_UNPACK_ROW_BYTES_APPLE 0x8A16 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector deleted file mode 100644 index 5c7296aacb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_specular_vector -http://www.opengl.org/registry/specs/gl/APPLE/specular_vector.txt -GL_APPLE_specular_vector - GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range deleted file mode 100644 index 7ca9b9bad8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_texture_range -http://www.opengl.org/registry/specs/APPLE/texture_range.txt -GL_APPLE_texture_range - GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC - GL_STORAGE_PRIVATE_APPLE 0x85BD - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 - GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 - void glTextureRangeAPPLE (GLenum target, GLsizei length, GLvoid *pointer) - void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid **params) - diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint deleted file mode 100644 index 1b7dd206e6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_transform_hint -http://www.opengl.org/registry/specs/gl/APPLE/transform_hint.txt -GL_APPLE_transform_hint - GL_TRANSFORM_HINT_APPLE 0x85B1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object deleted file mode 100644 index 9c7bc04c9f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object +++ /dev/null @@ -1,8 +0,0 @@ -GL_APPLE_vertex_array_object -http://www.opengl.org/registry/specs/gl/APPLE/vertex_array_object.txt -GL_APPLE_vertex_array_object - GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 - void glBindVertexArrayAPPLE (GLuint array) - void glDeleteVertexArraysAPPLE (GLsizei n, const GLuint* arrays) - void glGenVertexArraysAPPLE (GLsizei n, const GLuint* arrays) - GLboolean glIsVertexArrayAPPLE (GLuint array) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range deleted file mode 100644 index e52e5f69ec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range +++ /dev/null @@ -1,14 +0,0 @@ -GL_APPLE_vertex_array_range -http://www.opengl.org/registry/specs/gl/APPLE/vertex_array_range.txt -GL_APPLE_vertex_array_range - GL_VERTEX_ARRAY_RANGE_APPLE 0x851D - GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E - GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 - GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 - GL_STORAGE_CLIENT_APPLE 0x85B4 - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - void glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) - void glVertexArrayParameteriAPPLE (GLenum pname, GLint param) - void glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators deleted file mode 100644 index 2171a74fb5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators +++ /dev/null @@ -1,20 +0,0 @@ -GL_APPLE_vertex_program_evaluators -http://www.opengl.org/registry/specs/gl/APPLE/vertex_program_evaluators.txt -GL_APPLE_vertex_program_evaluators - GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 - GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 - GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 - GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 - GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 - GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 - GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 - GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 - GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 - GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 - void glDisableVertexAttribAPPLE (GLuint index, GLenum pname) - void glEnableVertexAttribAPPLE (GLuint index, GLenum pname) - GLboolean glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname) - void glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) - void glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) - void glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) - void glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 deleted file mode 100644 index 068ee10e9a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_ycbcr_422 -http://www.opengl.org/registry/specs/gl/APPLE/ycbcr_422.txt -GL_APPLE_ycbcr_422 - GL_YCBCR_422_APPLE 0x85B9 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility deleted file mode 100644 index a89355bbd0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_ES2_compatibility -http://www.opengl.org/registry/specs/gl/ARB/ES2_compatibility.txt -GL_ARB_ES2_compatibility - GL_FIXED 0x140C - GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A - GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - GL_RGB565 0x8D62 - GL_LOW_FLOAT 0x8DF0 - GL_MEDIUM_FLOAT 0x8DF1 - GL_HIGH_FLOAT 0x8DF2 - GL_LOW_INT 0x8DF3 - GL_MEDIUM_INT 0x8DF4 - GL_HIGH_INT 0x8DF5 - GL_SHADER_BINARY_FORMATS 0x8DF8 - GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - GL_SHADER_COMPILER 0x8DFA - GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB - GL_MAX_VARYING_VECTORS 0x8DFC - GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD - void glClearDepthf (GLclampf d) - void glDepthRangef (GLclampf n, GLclampf f) - void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision) - void glReleaseShaderCompiler (void) - void glShaderBinary (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid*binary, GLsizei length) - typedef int GLfixed diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility deleted file mode 100644 index 9cfe8f0453..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility +++ /dev/null @@ -1,17 +0,0 @@ -GL_ARB_ES3_compatibility -http://www.opengl.org/registry/specs/gl/ARB/ES3_compatibility.txt -GL_ARB_ES3_compatibility - GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 - GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A - GL_MAX_ELEMENT_INDEX 0x8D6B - GL_COMPRESSED_R11_EAC 0x9270 - GL_COMPRESSED_SIGNED_R11_EAC 0x9271 - GL_COMPRESSED_RG11_EAC 0x9272 - GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 - GL_COMPRESSED_RGB8_ETC2 0x9274 - GL_COMPRESSED_SRGB8_ETC2 0x9275 - GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 - GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 - GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 - GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays deleted file mode 100644 index 82c99c87d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_arrays_of_arrays -http://www.opengl.org/registry/specs/gl/ARB/arrays_of_arrays.txt -GL_ARB_arrays_of_arrays diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance b/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance deleted file mode 100644 index e86711de53..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_base_instance -http://www.opengl.org/registry/specs/gl/ARB/base_instance.txt -GL_ARB_base_instance - void glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance) - void glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLuint baseinstance) - void glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture deleted file mode 100644 index d77436072d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_bindless_texture -http://www.opengl.org/registry/specs/gl/ARB/bindless_texture.txt -GL_ARB_bindless_texture - GL_UNSIGNED_INT64_ARB 0x140F - GLuint64 glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) - GLuint64 glGetTextureHandleARB (GLuint texture) - GLuint64 glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler) - void glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT* params) - GLboolean glIsImageHandleResidentARB (GLuint64 handle) - GLboolean glIsTextureHandleResidentARB (GLuint64 handle) - void glMakeImageHandleNonResidentARB (GLuint64 handle) - void glMakeImageHandleResidentARB (GLuint64 handle, GLenum access) - void glMakeTextureHandleNonResidentARB (GLuint64 handle) - void glMakeTextureHandleResidentARB (GLuint64 handle) - void glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value) - void glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64* values) - void glUniformHandleui64ARB (GLint location, GLuint64 value) - void glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64* value) - void glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x) - void glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT* v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended b/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended deleted file mode 100644 index 9f3dbb9909..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_blend_func_extended -http://www.opengl.org/registry/specs/gl/ARB/blend_func_extended.txt -GL_ARB_blend_func_extended - GL_SRC1_COLOR 0x88F9 - GL_ONE_MINUS_SRC1_COLOR 0x88FA - GL_ONE_MINUS_SRC1_ALPHA 0x88FB - GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC - void glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name) - GLint glGetFragDataIndex (GLuint program, const GLchar * name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage deleted file mode 100644 index 03d8d97283..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage +++ /dev/null @@ -1,14 +0,0 @@ -GL_ARB_buffer_storage -http://www.opengl.org/registry/specs/gl/ARB/buffer_storage.txt -GL_ARB_buffer_storage - GL_MAP_READ_BIT 0x0001 - GL_MAP_WRITE_BIT 0x0002 - GL_MAP_PERSISTENT_BIT 0x00000040 - GL_MAP_COHERENT_BIT 0x00000080 - GL_DYNAMIC_STORAGE_BIT 0x0100 - GL_CLIENT_STORAGE_BIT 0x0200 - GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 - GL_BUFFER_IMMUTABLE_STORAGE 0x821F - GL_BUFFER_STORAGE_FLAGS 0x8220 - void glBufferStorage (GLenum target, GLsizeiptr size, const GLvoid* data, GLbitfield flags) - void glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const GLvoid* data, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event b/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event deleted file mode 100644 index 8469e239dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_cl_event -http://www.opengl.org/registry/specs/gl/ARB/cl_event.txt -GL_ARB_cl_event - GL_SYNC_CL_EVENT_ARB 0x8240 - GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 - GLsync glCreateSyncFromCLeventARB (cl_context context, cl_event event, GLbitfield flags) - typedef struct _cl_context *cl_context - typedef struct _cl_event *cl_event diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object deleted file mode 100644 index d2cba8c50f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_clear_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/clear_buffer_object.txt -GL_ARB_clear_buffer_object - void glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data) - void glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data) - void glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data) - void glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture deleted file mode 100644 index 2879aa0abc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_clear_texture -http://www.opengl.org/registry/specs/gl/ARB/clear_texture.txt -GL_ARB_clear_texture - GL_CLEAR_TEXTURE 0x9365 - void glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid* data) - void glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float deleted file mode 100644 index d070f52311..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_color_buffer_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -GL_ARB_color_buffer_float - GL_RGBA_FLOAT_MODE_ARB 0x8820 - GL_CLAMP_VERTEX_COLOR_ARB 0x891A - GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B - GL_CLAMP_READ_COLOR_ARB 0x891C - GL_FIXED_ONLY_ARB 0x891D - void glClampColorARB (GLenum target, GLenum clamp) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility deleted file mode 100644 index a2fe3711d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_compatibility -http://www.opengl.org/registry/specs/gl/ARB/compatibility.txt -GL_ARB_compatibility diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage deleted file mode 100644 index a4a3951332..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_compressed_texture_pixel_storage -http://www.opengl.org/registry/specs/gl/ARB/compressed_texture_pixel_storage.txt -GL_ARB_compressed_texture_pixel_storage - GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 - GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 - GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 - GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A - GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B - GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C - GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D - GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader deleted file mode 100644 index c36257e552..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader +++ /dev/null @@ -1,23 +0,0 @@ -GL_ARB_compute_shader -http://www.opengl.org/registry/specs/gl/ARB/compute_shader.txt -GL_ARB_compute_shader - GL_COMPUTE_SHADER_BIT 0x00000020 - GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 - GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 - GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 - GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 - GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 - GL_COMPUTE_WORK_GROUP_SIZE 0x8267 - GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB - GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED - GL_DISPATCH_INDIRECT_BUFFER 0x90EE - GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF - GL_COMPUTE_SHADER 0x91B9 - GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB - GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC - GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD - GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE - GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF - void glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) - void glDispatchComputeIndirect (GLintptr indirect) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size deleted file mode 100644 index 4d2a5ba6d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_compute_variable_group_size -http://www.opengl.org/registry/specs/gl/ARB/compute_variable_group_size.txt -GL_ARB_compute_variable_group_size - GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB - GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF - GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 - GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 - void glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth b/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth deleted file mode 100644 index c2e2c3aa54..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_conservative_depth -http://www.opengl.org/registry/specs/gl/ARB/conservative_depth.txt -GL_ARB_conservative_depth diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer b/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer deleted file mode 100644 index 401dda60b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_copy_buffer -http://www.opengl.org/registry/specs/gl/ARB/copy_buffer.txt -GL_ARB_copy_buffer - GL_COPY_READ_BUFFER 0x8F36 - GL_COPY_WRITE_BUFFER 0x8F37 - void glCopyBufferSubData (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image b/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image deleted file mode 100644 index a65e038105..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_copy_image -http://www.opengl.org/registry/specs/gl/ARB/copy_image.txt -GL_ARB_copy_image - void glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output b/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output deleted file mode 100644 index c047939816..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_debug_output -http://www.opengl.org/registry/specs/gl/ARB/debug_output.txt -GL_ARB_debug_output - GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 - GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 - GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 - GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 - GL_DEBUG_SOURCE_API_ARB 0x8246 - GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 - GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 - GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 - GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A - GL_DEBUG_SOURCE_OTHER_ARB 0x824B - GL_DEBUG_TYPE_ERROR_ARB 0x824C - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E - GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F - GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 - GL_DEBUG_TYPE_OTHER_ARB 0x8251 - GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 - GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 - GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 - GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 - GL_DEBUG_SEVERITY_LOW_ARB 0x9148 - void glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam) - void glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) - typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float deleted file mode 100644 index 325f65ba59..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_depth_buffer_float -http://www.opengl.org/registry/specs/gl/ARB/depth_buffer_float.txt -GL_ARB_depth_buffer_float - GL_DEPTH_COMPONENT32F 0x8CAC - GL_DEPTH32F_STENCIL8 0x8CAD - GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp deleted file mode 100644 index 94c22bb13d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_depth_clamp -http://www.opengl.org/registry/specs/gl/ARB/depth_clamp.txt -GL_ARB_depth_clamp - GL_DEPTH_CLAMP 0x864F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture deleted file mode 100644 index 13f20d9b42..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_depth_texture -http://www.opengl.org/registry/specs/gl/ARB/depth_texture.txt -GL_ARB_depth_texture - GL_DEPTH_COMPONENT16_ARB 0x81A5 - GL_DEPTH_COMPONENT24_ARB 0x81A6 - GL_DEPTH_COMPONENT32_ARB 0x81A7 - GL_TEXTURE_DEPTH_SIZE_ARB 0x884A - GL_DEPTH_TEXTURE_MODE_ARB 0x884B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers deleted file mode 100644 index 5550c2d13c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers +++ /dev/null @@ -1,21 +0,0 @@ -GL_ARB_draw_buffers -http://www.opengl.org/registry/specs/gl/ARB/draw_buffers.txt -GL_ARB_draw_buffers - GL_MAX_DRAW_BUFFERS_ARB 0x8824 - GL_DRAW_BUFFER0_ARB 0x8825 - GL_DRAW_BUFFER1_ARB 0x8826 - GL_DRAW_BUFFER2_ARB 0x8827 - GL_DRAW_BUFFER3_ARB 0x8828 - GL_DRAW_BUFFER4_ARB 0x8829 - GL_DRAW_BUFFER5_ARB 0x882A - GL_DRAW_BUFFER6_ARB 0x882B - GL_DRAW_BUFFER7_ARB 0x882C - GL_DRAW_BUFFER8_ARB 0x882D - GL_DRAW_BUFFER9_ARB 0x882E - GL_DRAW_BUFFER10_ARB 0x882F - GL_DRAW_BUFFER11_ARB 0x8830 - GL_DRAW_BUFFER12_ARB 0x8831 - GL_DRAW_BUFFER13_ARB 0x8832 - GL_DRAW_BUFFER14_ARB 0x8833 - GL_DRAW_BUFFER15_ARB 0x8834 - void glDrawBuffersARB (GLsizei n, const GLenum* bufs) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend deleted file mode 100644 index e90578bc45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_buffers_blend -http://www.opengl.org/registry/specs/gl/ARB/draw_buffers_blend.txt -GL_ARB_draw_buffers_blend - void glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendEquationiARB (GLuint buf, GLenum mode) - void glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - void glBlendFunciARB (GLuint buf, GLenum src, GLenum dst) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex deleted file mode 100644 index 452296049e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_elements_base_vertex -http://www.opengl.org/registry/specs/gl/ARB/draw_elements_base_vertex.txt -GL_ARB_draw_elements_base_vertex - void glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) - void glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex) - void glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) - void glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const *indices, GLsizei primcount, const GLint *basevertex) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect deleted file mode 100644 index 1868e8a3c3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_indirect -http://www.opengl.org/registry/specs/gl/ARB/draw_indirect.txt -GL_ARB_draw_indirect - GL_DRAW_INDIRECT_BUFFER 0x8F3F - GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 - void glDrawArraysIndirect (GLenum mode, const GLvoid *indirect) - void glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced deleted file mode 100644 index 4140beaaa6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_draw_instanced -http://www.opengl.org/registry/specs/ARB/draw_instanced.txt -GL_ARB_draw_instanced diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts b/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts deleted file mode 100644 index 81f007b1b2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_enhanced_layouts -http://www.opengl.org/registry/specs/gl/ARB/enhanced_layouts.txt -GL_ARB_enhanced_layouts - GL_LOCATION_COMPONENT 0x934A - GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B - GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location b/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location deleted file mode 100644 index 63a0b15a81..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_explicit_attrib_location -http://www.opengl.org/registry/specs/gl/ARB/explicit_attrib_location.txt -GL_ARB_explicit_attrib_location diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location b/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location deleted file mode 100644 index 6b737058ab..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_explicit_uniform_location -http://www.opengl.org/registry/specs/gl/ARB/explicit_uniform_location.txt -GL_ARB_explicit_uniform_location - GL_MAX_UNIFORM_LOCATIONS 0x826E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions deleted file mode 100644 index 897721a619..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_coord_conventions -http://www.opengl.org/registry/specs/gl/ARB/fragment_coord_conventions.txt -GL_ARB_fragment_coord_conventions diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport deleted file mode 100644 index e959b48b25..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_layer_viewport -http://www.opengl.org/registry/specs/gl/ARB/fragment_layer_viewport.txt -GL_ARB_fragment_layer_viewport diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program deleted file mode 100644 index 2c7f5bb6dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_fragment_program -http://www.opengl.org/registry/specs/gl/ARB/fragment_program.txt -GL_ARB_fragment_program - GL_FRAGMENT_PROGRAM_ARB 0x8804 - GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 - GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 - GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 - GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 - GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 - GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A - GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B - GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C - GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D - GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E - GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F - GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 - GL_MAX_TEXTURE_COORDS_ARB 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow deleted file mode 100644 index bed6654304..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_program_shadow -http://www.opengl.org/registry/specs/gl/ARB/fragment_program_shadow.txt -GL_ARB_fragment_program_shadow diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader deleted file mode 100644 index fd6b3a20de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_fragment_shader -http://www.opengl.org/registry/specs/gl/ARB/fragment_shader.txt -GL_ARB_fragment_shader - GL_FRAGMENT_SHADER_ARB 0x8B30 - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 - GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments deleted file mode 100644 index 04143e8ec1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_framebuffer_no_attachments -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_no_attachments.txt -GL_ARB_framebuffer_no_attachments - GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 - GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 - GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 - GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 - GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 - GL_MAX_FRAMEBUFFER_WIDTH 0x9315 - GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 - GL_MAX_FRAMEBUFFER_LAYERS 0x9317 - GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 - void glFramebufferParameteri (GLenum target, GLenum pname, GLint param) - void glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint* params) - void glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint* params) - void glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object deleted file mode 100644 index 33b4b1943d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object +++ /dev/null @@ -1,97 +0,0 @@ -GL_ARB_framebuffer_object -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_object.txt -GL_ARB_framebuffer_object - GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 - GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 - GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 - GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 - GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 - GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 - GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 - GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 - GL_FRAMEBUFFER_DEFAULT 0x8218 - GL_FRAMEBUFFER_UNDEFINED 0x8219 - GL_DEPTH_STENCIL_ATTACHMENT 0x821A - GL_INDEX 0x8222 - GL_MAX_RENDERBUFFER_SIZE 0x84E8 - GL_DEPTH_STENCIL 0x84F9 - GL_UNSIGNED_INT_24_8 0x84FA - GL_DEPTH24_STENCIL8 0x88F0 - GL_TEXTURE_STENCIL_SIZE 0x88F1 - GL_UNSIGNED_NORMALIZED 0x8C17 - GL_SRGB 0x8C40 - GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 - GL_FRAMEBUFFER_BINDING 0x8CA6 - GL_RENDERBUFFER_BINDING 0x8CA7 - GL_READ_FRAMEBUFFER 0x8CA8 - GL_DRAW_FRAMEBUFFER 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING 0x8CAA - GL_RENDERBUFFER_SAMPLES 0x8CAB - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 - GL_FRAMEBUFFER_COMPLETE 0x8CD5 - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC - GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - GL_MAX_COLOR_ATTACHMENTS 0x8CDF - GL_COLOR_ATTACHMENT0 0x8CE0 - GL_COLOR_ATTACHMENT1 0x8CE1 - GL_COLOR_ATTACHMENT2 0x8CE2 - GL_COLOR_ATTACHMENT3 0x8CE3 - GL_COLOR_ATTACHMENT4 0x8CE4 - GL_COLOR_ATTACHMENT5 0x8CE5 - GL_COLOR_ATTACHMENT6 0x8CE6 - GL_COLOR_ATTACHMENT7 0x8CE7 - GL_COLOR_ATTACHMENT8 0x8CE8 - GL_COLOR_ATTACHMENT9 0x8CE9 - GL_COLOR_ATTACHMENT10 0x8CEA - GL_COLOR_ATTACHMENT11 0x8CEB - GL_COLOR_ATTACHMENT12 0x8CEC - GL_COLOR_ATTACHMENT13 0x8CED - GL_COLOR_ATTACHMENT14 0x8CEE - GL_COLOR_ATTACHMENT15 0x8CEF - GL_DEPTH_ATTACHMENT 0x8D00 - GL_STENCIL_ATTACHMENT 0x8D20 - GL_FRAMEBUFFER 0x8D40 - GL_RENDERBUFFER 0x8D41 - GL_RENDERBUFFER_WIDTH 0x8D42 - GL_RENDERBUFFER_HEIGHT 0x8D43 - GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 - GL_STENCIL_INDEX1 0x8D46 - GL_STENCIL_INDEX4 0x8D47 - GL_STENCIL_INDEX8 0x8D48 - GL_STENCIL_INDEX16 0x8D49 - GL_RENDERBUFFER_RED_SIZE 0x8D50 - GL_RENDERBUFFER_GREEN_SIZE 0x8D51 - GL_RENDERBUFFER_BLUE_SIZE 0x8D52 - GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 - GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 - GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 - GL_MAX_SAMPLES 0x8D57 - void glBindFramebuffer (GLenum target, GLuint framebuffer) - void glBindRenderbuffer (GLenum target, GLuint renderbuffer) - void glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLenum glCheckFramebufferStatus (GLenum target) - void glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers) - void glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers) - void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer) - void glFramebufferTextureLayer (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer) - void glGenFramebuffers (GLsizei n, GLuint* framebuffers) - void glGenRenderbuffers (GLsizei n, GLuint* renderbuffers) - void glGenerateMipmap (GLenum target) - void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params) - void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params) - GLboolean glIsFramebuffer (GLuint framebuffer) - GLboolean glIsRenderbuffer (GLuint renderbuffer) - void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) - void glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB deleted file mode 100644 index 848f2338e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -GL_ARB_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB 0x8DB9 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 deleted file mode 100644 index b24a071443..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_ARB_geometry_shader4 -http://www.opengl.org/registry/specs/gl/ARB/geometry_shader4.txt -GL_ARB_geometry_shader4 - GL_LINES_ADJACENCY_ARB 0xA - GL_LINE_STRIP_ADJACENCY_ARB 0xB - GL_TRIANGLES_ADJACENCY_ARB 0xC - GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD - GL_PROGRAM_POINT_SIZE_ARB 0x8642 - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 - GL_GEOMETRY_SHADER_ARB 0x8DD9 - GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA - GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC - GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 - void glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) - void glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) - void glProgramParameteriARB (GLuint program, GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary b/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary deleted file mode 100644 index 8e52552fa1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_get_program_binary -http://www.opengl.org/registry/specs/gl/ARB/get_program_binary.txt -GL_ARB_get_program_binary - GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 - GL_PROGRAM_BINARY_LENGTH 0x8741 - GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE - GL_PROGRAM_BINARY_FORMATS 0x87FF - void glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary) - void glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length) - void glProgramParameteri (GLuint program, GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 deleted file mode 100644 index 5d5c91af0b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_gpu_shader5 -http://www.opengl.org/registry/specs/gl/ARB/gpu_shader5.txt -GL_ARB_gpu_shader5 - GL_GEOMETRY_SHADER_INVOCATIONS 0x887F - GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C - GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D - GL_MAX_VERTEX_STREAMS 0x8E71 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 deleted file mode 100644 index bcdd7c33dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 +++ /dev/null @@ -1,33 +0,0 @@ -GL_ARB_gpu_shader_fp64 -http://www.opengl.org/registry/specs/gl/ARB/gpu_shader_fp64.txt -GL_ARB_gpu_shader_fp64 - GL_DOUBLE_MAT2 0x8F46 - GL_DOUBLE_MAT3 0x8F47 - GL_DOUBLE_MAT4 0x8F48 - GL_DOUBLE_MAT2x3 0x8F49 - GL_DOUBLE_MAT2x4 0x8F4A - GL_DOUBLE_MAT3x2 0x8F4B - GL_DOUBLE_MAT3x4 0x8F4C - GL_DOUBLE_MAT4x2 0x8F4D - GL_DOUBLE_MAT4x3 0x8F4E - GL_DOUBLE_VEC2 0x8FFC - GL_DOUBLE_VEC3 0x8FFD - GL_DOUBLE_VEC4 0x8FFE - void glGetUniformdv (GLuint program, GLint location, GLdouble* params) - void glUniform1d (GLint location, GLdouble x) - void glUniform1dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform2d (GLint location, GLdouble x, GLdouble y) - void glUniform2dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z) - void glUniform3dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glUniform4dv (GLint location, GLsizei count, const GLdouble* value) - void glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel b/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel deleted file mode 100644 index b8e7e53a66..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_half_float_pixel -http://www.opengl.org/registry/specs/gl/ARB/half_float_pixel.txt -GL_ARB_half_float_pixel - GL_HALF_FLOAT_ARB 0x140B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex deleted file mode 100644 index abed78e9d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_half_float_vertex -http://www.opengl.org/registry/specs/gl/ARB/half_float_vertex.txt -GL_ARB_half_float_vertex - GL_HALF_FLOAT 0x140B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging b/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging deleted file mode 100644 index 0efd0c1b8e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging +++ /dev/null @@ -1,112 +0,0 @@ -GL_ARB_imaging - -GL_ARB_imaging - GL_CONSTANT_COLOR 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR 0x8002 - GL_CONSTANT_ALPHA 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 - GL_BLEND_COLOR 0x8005 - GL_FUNC_ADD 0x8006 - GL_MIN 0x8007 - GL_MAX 0x8008 - GL_BLEND_EQUATION 0x8009 - GL_FUNC_SUBTRACT 0x800A - GL_FUNC_REVERSE_SUBTRACT 0x800B - GL_CONVOLUTION_1D 0x8010 - GL_CONVOLUTION_2D 0x8011 - GL_SEPARABLE_2D 0x8012 - GL_CONVOLUTION_BORDER_MODE 0x8013 - GL_CONVOLUTION_FILTER_SCALE 0x8014 - GL_CONVOLUTION_FILTER_BIAS 0x8015 - GL_REDUCE 0x8016 - GL_CONVOLUTION_FORMAT 0x8017 - GL_CONVOLUTION_WIDTH 0x8018 - GL_CONVOLUTION_HEIGHT 0x8019 - GL_MAX_CONVOLUTION_WIDTH 0x801A - GL_MAX_CONVOLUTION_HEIGHT 0x801B - GL_POST_CONVOLUTION_RED_SCALE 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F - GL_POST_CONVOLUTION_RED_BIAS 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 - GL_HISTOGRAM 0x8024 - GL_PROXY_HISTOGRAM 0x8025 - GL_HISTOGRAM_WIDTH 0x8026 - GL_HISTOGRAM_FORMAT 0x8027 - GL_HISTOGRAM_RED_SIZE 0x8028 - GL_HISTOGRAM_GREEN_SIZE 0x8029 - GL_HISTOGRAM_BLUE_SIZE 0x802A - GL_HISTOGRAM_ALPHA_SIZE 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE 0x802C - GL_HISTOGRAM_SINK 0x802D - GL_MINMAX 0x802E - GL_MINMAX_FORMAT 0x802F - GL_MINMAX_SINK 0x8030 - GL_TABLE_TOO_LARGE 0x8031 - GL_COLOR_MATRIX 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB - GL_COLOR_TABLE 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 - GL_PROXY_COLOR_TABLE 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 - GL_COLOR_TABLE_SCALE 0x80D6 - GL_COLOR_TABLE_BIAS 0x80D7 - GL_COLOR_TABLE_FORMAT 0x80D8 - GL_COLOR_TABLE_WIDTH 0x80D9 - GL_COLOR_TABLE_RED_SIZE 0x80DA - GL_COLOR_TABLE_GREEN_SIZE 0x80DB - GL_COLOR_TABLE_BLUE_SIZE 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF - GL_IGNORE_BORDER 0x8150 - GL_CONSTANT_BORDER 0x8151 - GL_WRAP_BORDER 0x8152 - GL_REPLICATE_BORDER 0x8153 - GL_CONVOLUTION_BORDER_COLOR 0x8154 - void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) - void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) - void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table) - void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) - void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glResetHistogram (GLenum target) - void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) - void glMinmax (GLenum target, GLenum internalformat, GLboolean sink) - void glResetMinmax (GLenum target) - void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) - void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) - void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glConvolutionParameteri (GLenum target, GLenum pname, GLint params) - void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) - void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) - void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) - void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters deleted file mode 100644 index 1b189a028f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_indirect_parameters -http://www.opengl.org/registry/specs/gl/ARB/indirect_parameters.txt -GL_ARB_indirect_parameters - GL_PARAMETER_BUFFER_ARB 0x80EE - GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF - void glMultiDrawArraysIndirectCountARB (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) - void glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays deleted file mode 100644 index b1c88734d1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_instanced_arrays -http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt -GL_ARB_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - void glVertexAttribDivisorARB (GLuint index, GLuint divisor) - void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query deleted file mode 100644 index fcaa9be1aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_internalformat_query -http://www.opengl.org/registry/specs/gl/ARB/internalformat_query.txt -GL_ARB_internalformat_query - GL_NUM_SAMPLE_COUNTS 0x9380 - void glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 deleted file mode 100644 index 1210966327..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 +++ /dev/null @@ -1,103 +0,0 @@ -GL_ARB_internalformat_query2 -http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt -GL_ARB_internalformat_query2 - GL_INTERNALFORMAT_SUPPORTED 0x826F - GL_INTERNALFORMAT_PREFERRED 0x8270 - GL_INTERNALFORMAT_RED_SIZE 0x8271 - GL_INTERNALFORMAT_GREEN_SIZE 0x8272 - GL_INTERNALFORMAT_BLUE_SIZE 0x8273 - GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 - GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 - GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 - GL_INTERNALFORMAT_SHARED_SIZE 0x8277 - GL_INTERNALFORMAT_RED_TYPE 0x8278 - GL_INTERNALFORMAT_GREEN_TYPE 0x8279 - GL_INTERNALFORMAT_BLUE_TYPE 0x827A - GL_INTERNALFORMAT_ALPHA_TYPE 0x827B - GL_INTERNALFORMAT_DEPTH_TYPE 0x827C - GL_INTERNALFORMAT_STENCIL_TYPE 0x827D - GL_MAX_WIDTH 0x827E - GL_MAX_HEIGHT 0x827F - GL_MAX_DEPTH 0x8280 - GL_MAX_LAYERS 0x8281 - GL_MAX_COMBINED_DIMENSIONS 0x8282 - GL_COLOR_COMPONENTS 0x8283 - GL_DEPTH_COMPONENTS 0x8284 - GL_STENCIL_COMPONENTS 0x8285 - GL_COLOR_RENDERABLE 0x8286 - GL_DEPTH_RENDERABLE 0x8287 - GL_STENCIL_RENDERABLE 0x8288 - GL_FRAMEBUFFER_RENDERABLE 0x8289 - GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A - GL_FRAMEBUFFER_BLEND 0x828B - GL_READ_PIXELS 0x828C - GL_READ_PIXELS_FORMAT 0x828D - GL_READ_PIXELS_TYPE 0x828E - GL_TEXTURE_IMAGE_FORMAT 0x828F - GL_TEXTURE_IMAGE_TYPE 0x8290 - GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 - GL_GET_TEXTURE_IMAGE_TYPE 0x8292 - GL_MIPMAP 0x8293 - GL_MANUAL_GENERATE_MIPMAP 0x8294 - GL_AUTO_GENERATE_MIPMAP 0x8295 - GL_COLOR_ENCODING 0x8296 - GL_SRGB_READ 0x8297 - GL_SRGB_WRITE 0x8298 - GL_SRGB_DECODE_ARB 0x8299 - GL_FILTER 0x829A - GL_VERTEX_TEXTURE 0x829B - GL_TESS_CONTROL_TEXTURE 0x829C - GL_TESS_EVALUATION_TEXTURE 0x829D - GL_GEOMETRY_TEXTURE 0x829E - GL_FRAGMENT_TEXTURE 0x829F - GL_COMPUTE_TEXTURE 0x82A0 - GL_TEXTURE_SHADOW 0x82A1 - GL_TEXTURE_GATHER 0x82A2 - GL_TEXTURE_GATHER_SHADOW 0x82A3 - GL_SHADER_IMAGE_LOAD 0x82A4 - GL_SHADER_IMAGE_STORE 0x82A5 - GL_SHADER_IMAGE_ATOMIC 0x82A6 - GL_IMAGE_TEXEL_SIZE 0x82A7 - GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 - GL_IMAGE_PIXEL_FORMAT 0x82A9 - GL_IMAGE_PIXEL_TYPE 0x82AA - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF - GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 - GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 - GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 - GL_CLEAR_BUFFER 0x82B4 - GL_TEXTURE_VIEW 0x82B5 - GL_VIEW_COMPATIBILITY_CLASS 0x82B6 - GL_FULL_SUPPORT 0x82B7 - GL_CAVEAT_SUPPORT 0x82B8 - GL_IMAGE_CLASS_4_X_32 0x82B9 - GL_IMAGE_CLASS_2_X_32 0x82BA - GL_IMAGE_CLASS_1_X_32 0x82BB - GL_IMAGE_CLASS_4_X_16 0x82BC - GL_IMAGE_CLASS_2_X_16 0x82BD - GL_IMAGE_CLASS_1_X_16 0x82BE - GL_IMAGE_CLASS_4_X_8 0x82BF - GL_IMAGE_CLASS_2_X_8 0x82C0 - GL_IMAGE_CLASS_1_X_8 0x82C1 - GL_IMAGE_CLASS_11_11_10 0x82C2 - GL_IMAGE_CLASS_10_10_10_2 0x82C3 - GL_VIEW_CLASS_128_BITS 0x82C4 - GL_VIEW_CLASS_96_BITS 0x82C5 - GL_VIEW_CLASS_64_BITS 0x82C6 - GL_VIEW_CLASS_48_BITS 0x82C7 - GL_VIEW_CLASS_32_BITS 0x82C8 - GL_VIEW_CLASS_24_BITS 0x82C9 - GL_VIEW_CLASS_16_BITS 0x82CA - GL_VIEW_CLASS_8_BITS 0x82CB - GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC - GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD - GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE - GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF - GL_VIEW_CLASS_RGTC1_RED 0x82D0 - GL_VIEW_CLASS_RGTC2_RG 0x82D1 - GL_VIEW_CLASS_BPTC_UNORM 0x82D2 - GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - void glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata b/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata deleted file mode 100644 index 1313cb636f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_invalidate_subdata -http://www.opengl.org/registry/specs/gl/ARB/invalidate_subdata.txt -GL_ARB_invalidate_subdata - void glInvalidateBufferData (GLuint buffer) - void glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length) - void glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments) - void glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) - void glInvalidateTexImage (GLuint texture, GLint level) - void glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment b/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment deleted file mode 100644 index cafeb012dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_map_buffer_alignment -http://www.opengl.org/registry/specs/gl/ARB/map_buffer_alignment.txt -GL_ARB_map_buffer_alignment - GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range deleted file mode 100644 index f79a0feee8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_map_buffer_range -http://www.opengl.org/registry/specs/gl/ARB/map_buffer_range.txt -GL_ARB_map_buffer_range - GL_MAP_READ_BIT 0x0001 - GL_MAP_WRITE_BIT 0x0002 - GL_MAP_INVALIDATE_RANGE_BIT 0x0004 - GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 - GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 - GL_MAP_UNSYNCHRONIZED_BIT 0x0020 - void glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length) - GLvoid * glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette b/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette deleted file mode 100644 index 4b67c15cf4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_matrix_palette -http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt -GL_ARB_matrix_palette - GL_MATRIX_PALETTE_ARB 0x8840 - GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 - GL_MAX_PALETTE_MATRICES_ARB 0x8842 - GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 - GL_MATRIX_INDEX_ARRAY_ARB 0x8844 - GL_CURRENT_MATRIX_INDEX_ARB 0x8845 - GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 - GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 - GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 - GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - void glCurrentPaletteMatrixARB (GLint index) - void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glMatrixIndexubvARB (GLint size, GLubyte *indices) - void glMatrixIndexusvARB (GLint size, GLushort *indices) - void glMatrixIndexuivARB (GLint size, GLuint *indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind deleted file mode 100644 index 31d1d31482..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_multi_bind -http://www.opengl.org/registry/specs/gl/ARB/multi_bind.txt -GL_ARB_multi_bind - void glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint* buffers) - void glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizeiptr *sizes) - void glBindImageTextures (GLuint first, GLsizei count, const GLuint* textures) - void glBindSamplers (GLuint first, GLsizei count, const GLuint* samplers) - void glBindTextures (GLuint first, GLsizei count, const GLuint* textures) - void glBindVertexBuffers (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizei *strides) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect deleted file mode 100644 index 1c2d4dda60..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/ARB/multi_draw_indirect.txt -GL_ARB_multi_draw_indirect - void glMultiDrawArraysIndirect (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride) - void glMultiDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample deleted file mode 100644 index 10d35d0054..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -GL_ARB_multisample - GL_MULTISAMPLE_ARB 0x809D - GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E - GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F - GL_SAMPLE_COVERAGE_ARB 0x80A0 - GL_SAMPLE_BUFFERS_ARB 0x80A8 - GL_SAMPLES_ARB 0x80A9 - GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA - GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB - GL_MULTISAMPLE_BIT_ARB 0x20000000 - void glSampleCoverageARB (GLclampf value, GLboolean invert) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture deleted file mode 100644 index ee80791831..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_multitexture -http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt -GL_ARB_multitexture - GL_TEXTURE0_ARB 0x84C0 - GL_TEXTURE1_ARB 0x84C1 - GL_TEXTURE2_ARB 0x84C2 - GL_TEXTURE3_ARB 0x84C3 - GL_TEXTURE4_ARB 0x84C4 - GL_TEXTURE5_ARB 0x84C5 - GL_TEXTURE6_ARB 0x84C6 - GL_TEXTURE7_ARB 0x84C7 - GL_TEXTURE8_ARB 0x84C8 - GL_TEXTURE9_ARB 0x84C9 - GL_TEXTURE10_ARB 0x84CA - GL_TEXTURE11_ARB 0x84CB - GL_TEXTURE12_ARB 0x84CC - GL_TEXTURE13_ARB 0x84CD - GL_TEXTURE14_ARB 0x84CE - GL_TEXTURE15_ARB 0x84CF - GL_TEXTURE16_ARB 0x84D0 - GL_TEXTURE17_ARB 0x84D1 - GL_TEXTURE18_ARB 0x84D2 - GL_TEXTURE19_ARB 0x84D3 - GL_TEXTURE20_ARB 0x84D4 - GL_TEXTURE21_ARB 0x84D5 - GL_TEXTURE22_ARB 0x84D6 - GL_TEXTURE23_ARB 0x84D7 - GL_TEXTURE24_ARB 0x84D8 - GL_TEXTURE25_ARB 0x84D9 - GL_TEXTURE26_ARB 0x84DA - GL_TEXTURE27_ARB 0x84DB - GL_TEXTURE28_ARB 0x84DC - GL_TEXTURE29_ARB 0x84DD - GL_TEXTURE30_ARB 0x84DE - GL_TEXTURE31_ARB 0x84DF - GL_ACTIVE_TEXTURE_ARB 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 - GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - void glActiveTextureARB (GLenum texture) - void glClientActiveTextureARB (GLenum texture) - void glMultiTexCoord1dARB (GLenum target, GLdouble s) - void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord1fARB (GLenum target, GLfloat s) - void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord1iARB (GLenum target, GLint s) - void glMultiTexCoord1ivARB (GLenum target, const GLint *v) - void glMultiTexCoord1sARB (GLenum target, GLshort s) - void glMultiTexCoord1svARB (GLenum target, const GLshort *v) - void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t) - void glMultiTexCoord2ivARB (GLenum target, const GLint *v) - void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2svARB (GLenum target, const GLshort *v) - void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3ivARB (GLenum target, const GLint *v) - void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3svARB (GLenum target, const GLshort *v) - void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4ivARB (GLenum target, const GLint *v) - void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4svARB (GLenum target, const GLshort *v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query deleted file mode 100644 index efc2bdadde..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_occlusion_query -http://www.opengl.org/registry/specs/gl/ARB/occlusion_query.txt -GL_ARB_occlusion_query - GL_QUERY_COUNTER_BITS_ARB 0x8864 - GL_CURRENT_QUERY_ARB 0x8865 - GL_QUERY_RESULT_ARB 0x8866 - GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 - GL_SAMPLES_PASSED_ARB 0x8914 - void glBeginQueryARB (GLenum target, GLuint id) - void glDeleteQueriesARB (GLsizei n, const GLuint* ids) - void glEndQueryARB (GLenum target) - void glGenQueriesARB (GLsizei n, GLuint* ids) - void glGetQueryObjectivARB (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint* params) - void glGetQueryivARB (GLenum target, GLenum pname, GLint* params) - GLboolean glIsQueryARB (GLuint id) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 deleted file mode 100644 index 3134ed969b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_occlusion_query2 -http://www.opengl.org/registry/specs/gl/ARB/occlusion_query2.txt -GL_ARB_occlusion_query2 - GL_ANY_SAMPLES_PASSED 0x8C2F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object deleted file mode 100644 index 33c00a86b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_pixel_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/pixel_buffer_object.txt -GL_ARB_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_ARB 0x88EB - GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters deleted file mode 100644 index b982043f58..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_point_parameters -http://www.opengl.org/registry/specs/gl/ARB/point_parameters.txt -GL_ARB_point_parameters - GL_POINT_SIZE_MIN_ARB 0x8126 - GL_POINT_SIZE_MAX_ARB 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 - GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 - void glPointParameterfARB (GLenum pname, GLfloat param) - void glPointParameterfvARB (GLenum pname, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite b/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite deleted file mode 100644 index 414138e482..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_point_sprite -http://www.opengl.org/registry/specs/gl/ARB/point_sprite.txt -GL_ARB_point_sprite - GL_POINT_SPRITE_ARB 0x8861 - GL_COORD_REPLACE_ARB 0x8862 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query deleted file mode 100644 index 096f086c76..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query +++ /dev/null @@ -1,56 +0,0 @@ -GL_ARB_program_interface_query -http://www.opengl.org/registry/specs/gl/ARB/program_interface_query.txt -GL_ARB_program_interface_query - GL_UNIFORM 0x92E1 - GL_UNIFORM_BLOCK 0x92E2 - GL_PROGRAM_INPUT 0x92E3 - GL_PROGRAM_OUTPUT 0x92E4 - GL_BUFFER_VARIABLE 0x92E5 - GL_SHADER_STORAGE_BLOCK 0x92E6 - GL_IS_PER_PATCH 0x92E7 - GL_VERTEX_SUBROUTINE 0x92E8 - GL_TESS_CONTROL_SUBROUTINE 0x92E9 - GL_TESS_EVALUATION_SUBROUTINE 0x92EA - GL_GEOMETRY_SUBROUTINE 0x92EB - GL_FRAGMENT_SUBROUTINE 0x92EC - GL_COMPUTE_SUBROUTINE 0x92ED - GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE - GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF - GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 - GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 - GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 - GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 - GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 - GL_ACTIVE_RESOURCES 0x92F5 - GL_MAX_NAME_LENGTH 0x92F6 - GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 - GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 - GL_NAME_LENGTH 0x92F9 - GL_TYPE 0x92FA - GL_ARRAY_SIZE 0x92FB - GL_OFFSET 0x92FC - GL_BLOCK_INDEX 0x92FD - GL_ARRAY_STRIDE 0x92FE - GL_MATRIX_STRIDE 0x92FF - GL_IS_ROW_MAJOR 0x9300 - GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 - GL_BUFFER_BINDING 0x9302 - GL_BUFFER_DATA_SIZE 0x9303 - GL_NUM_ACTIVE_VARIABLES 0x9304 - GL_ACTIVE_VARIABLES 0x9305 - GL_REFERENCED_BY_VERTEX_SHADER 0x9306 - GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 - GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 - GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 - GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A - GL_REFERENCED_BY_COMPUTE_SHADER 0x930B - GL_TOP_LEVEL_ARRAY_SIZE 0x930C - GL_TOP_LEVEL_ARRAY_STRIDE 0x930D - GL_LOCATION 0x930E - GL_LOCATION_INDEX 0x930F - void glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint* params) - GLuint glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar* name) - GLint glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar* name) - GLint glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar* name) - void glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name) - void glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex deleted file mode 100644 index 61609112ee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_provoking_vertex -http://www.opengl.org/registry/specs/gl/ARB/provoking_vertex.txt -GL_ARB_provoking_vertex - GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C - GL_FIRST_VERTEX_CONVENTION 0x8E4D - GL_LAST_VERTEX_CONVENTION 0x8E4E - GL_PROVOKING_VERTEX 0x8E4F - void glProvokingVertex (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object deleted file mode 100644 index 3de28a5a9b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_query_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/query_buffer_object.txt -GL_ARB_query_buffer_object - GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 - GL_QUERY_BUFFER 0x9192 - GL_QUERY_BUFFER_BINDING 0x9193 - GL_QUERY_RESULT_NO_WAIT 0x9194 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior deleted file mode 100644 index b973c08323..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robust_buffer_access_behavior -http://www.opengl.org/registry/specs/gl/ARB/robust_buffer_access_behavior.txt -GL_ARB_robust_buffer_access_behavior diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness deleted file mode 100644 index cdeeb4ff94..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_robustness -http://www.opengl.org/registry/specs/ARB/robustness.txt -GL_ARB_robustness - GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 - GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GL_GUILTY_CONTEXT_RESET_ARB 0x8253 - GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 - GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 - GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GL_NO_RESET_NOTIFICATION_ARB 0x8261 - GLenum glGetGraphicsResetStatusARB (void) - void glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) - void glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void* img) - void glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) - void glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) - void glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) - void glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint* v) - void glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat* values) - void glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint* values) - void glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort* values) - void glGetnPolygonStippleARB (GLsizei bufSize, GLubyte* pattern) - void glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span) - void glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) - void glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble* params) - void glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat* params) - void glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint* params) - void glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint* params) - void glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation deleted file mode 100644 index 229707e4ae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/robustness_isolation.txt -GL_ARB_robustness_application_isolation diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation deleted file mode 100644 index 39be33c888..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/robustness_isolation.txt -GL_ARB_robustness_share_group_isolation diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading deleted file mode 100644 index 8761659aae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_sample_shading -http://www.opengl.org/registry/specs/gl/ARB/sample_shading.txt -GL_ARB_sample_shading - GL_SAMPLE_SHADING_ARB 0x8C36 - GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 - void glMinSampleShadingARB (GLclampf value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects deleted file mode 100644 index 8847cc9a64..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_sampler_objects -http://www.opengl.org/registry/specs/gl/ARB/sampler_objects.txt -GL_ARB_sampler_objects - GL_SAMPLER_BINDING 0x8919 - void glBindSampler (GLuint unit, GLuint sampler) - void glDeleteSamplers (GLsizei count, const GLuint * samplers) - void glGenSamplers (GLsizei count, GLuint* samplers) - void glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint* params) - void glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint* params) - void glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat* params) - void glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint* params) - GLboolean glIsSampler (GLuint sampler) - void glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint* params) - void glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint* params) - void glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param) - void glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat* params) - void glSamplerParameteri (GLuint sampler, GLenum pname, GLint param) - void glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map deleted file mode 100644 index 6c129c68b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_seamless_cube_map -http://www.opengl.org/registry/specs/gl/ARB/seamless_cube_map.txt -GL_ARB_seamless_cube_map - GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture deleted file mode 100644 index 54e1975b56..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_seamless_cubemap_per_texture -http://www.opengl.org/registry/specs/gl/ARB/seamless_cubemap_per_texture.txt -GL_ARB_seamless_cubemap_per_texture - GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects deleted file mode 100644 index b90b68ab4e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_separate_shader_objects -http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt -GL_ARB_separate_shader_objects - GL_VERTEX_SHADER_BIT 0x00000001 - GL_FRAGMENT_SHADER_BIT 0x00000002 - GL_GEOMETRY_SHADER_BIT 0x00000004 - GL_TESS_CONTROL_SHADER_BIT 0x00000008 - GL_TESS_EVALUATION_SHADER_BIT 0x00000010 - GL_PROGRAM_SEPARABLE 0x8258 - GL_ACTIVE_PROGRAM 0x8259 - GL_PROGRAM_PIPELINE_BINDING 0x825A - GL_ALL_SHADER_BITS 0xFFFFFFFF - void glActiveShaderProgram (GLuint pipeline, GLuint program) - void glBindProgramPipeline (GLuint pipeline) - GLuint glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar ** strings) - void glDeleteProgramPipelines (GLsizei n, const GLuint* pipelines) - void glGenProgramPipelines (GLsizei n, GLuint* pipelines) - void glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog) - void glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params) - GLboolean glIsProgramPipeline (GLuint pipeline) - void glProgramUniform1d (GLuint program, GLint location, GLdouble x) - void glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform1f (GLuint program, GLint location, GLfloat x) - void glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1i (GLuint program, GLint location, GLint x) - void glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1ui (GLuint program, GLint location, GLuint x) - void glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2d (GLuint program, GLint location, GLdouble x, GLdouble y) - void glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform2f (GLuint program, GLint location, GLfloat x, GLfloat y) - void glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2i (GLuint program, GLint location, GLint x, GLint y) - void glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2ui (GLuint program, GLint location, GLuint x, GLuint y) - void glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) - void glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform3f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) - void glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3i (GLuint program, GLint location, GLint x, GLint y, GLint z) - void glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z) - void glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform4f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4i (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) - void glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program) - void glValidateProgramPipeline (GLuint pipeline) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters deleted file mode 100644 index 5cf5311bf1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters +++ /dev/null @@ -1,33 +0,0 @@ -GL_ARB_shader_atomic_counters -http://www.opengl.org/registry/specs/gl/ARB/shader_atomic_counters.txt -GL_ARB_shader_atomic_counters - GL_ATOMIC_COUNTER_BUFFER 0x92C0 - GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 - GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 - GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 - GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB - GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC - GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE - GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF - GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 - GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 - GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 - GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 - GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 - GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 - GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 - GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 - GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 - GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA - GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB - GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC - void glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding deleted file mode 100644 index ccf032ca64..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_bit_encoding -http://www.opengl.org/registry/specs/gl/ARB/shader_bit_encoding.txt -GL_ARB_shader_bit_encoding diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters deleted file mode 100644 index 478c4a2042..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_draw_parameters -http://www.opengl.org/registry/specs/gl/ARB/shader_draw_parameters.txt -GL_ARB_shader_draw_parameters diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote deleted file mode 100644 index 10251109d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_group_vote -http://www.opengl.org/registry/specs/gl/ARB/shader_group_vote.txt -GL_ARB_shader_group_vote diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store deleted file mode 100644 index efcb45bb45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store +++ /dev/null @@ -1,69 +0,0 @@ -GL_ARB_shader_image_load_store -http://www.opengl.org/registry/specs/gl/ARB/shader_image_load_store.txt -GL_ARB_shader_image_load_store - GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 - GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 - GL_UNIFORM_BARRIER_BIT 0x00000004 - GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 - GL_COMMAND_BARRIER_BIT 0x00000040 - GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 - GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 - GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 - GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 - GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 - GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 - GL_MAX_IMAGE_UNITS 0x8F38 - GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 - GL_IMAGE_BINDING_NAME 0x8F3A - GL_IMAGE_BINDING_LEVEL 0x8F3B - GL_IMAGE_BINDING_LAYERED 0x8F3C - GL_IMAGE_BINDING_LAYER 0x8F3D - GL_IMAGE_BINDING_ACCESS 0x8F3E - GL_IMAGE_1D 0x904C - GL_IMAGE_2D 0x904D - GL_IMAGE_3D 0x904E - GL_IMAGE_2D_RECT 0x904F - GL_IMAGE_CUBE 0x9050 - GL_IMAGE_BUFFER 0x9051 - GL_IMAGE_1D_ARRAY 0x9052 - GL_IMAGE_2D_ARRAY 0x9053 - GL_IMAGE_CUBE_MAP_ARRAY 0x9054 - GL_IMAGE_2D_MULTISAMPLE 0x9055 - GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 - GL_INT_IMAGE_1D 0x9057 - GL_INT_IMAGE_2D 0x9058 - GL_INT_IMAGE_3D 0x9059 - GL_INT_IMAGE_2D_RECT 0x905A - GL_INT_IMAGE_CUBE 0x905B - GL_INT_IMAGE_BUFFER 0x905C - GL_INT_IMAGE_1D_ARRAY 0x905D - GL_INT_IMAGE_2D_ARRAY 0x905E - GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F - GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 - GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 - GL_UNSIGNED_INT_IMAGE_1D 0x9062 - GL_UNSIGNED_INT_IMAGE_2D 0x9063 - GL_UNSIGNED_INT_IMAGE_3D 0x9064 - GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 - GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 - GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 - GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 - GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 - GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C - GL_MAX_IMAGE_SAMPLES 0x906D - GL_IMAGE_BINDING_FORMAT 0x906E - GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 - GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 - GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 - GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA - GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB - GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC - GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD - GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE - GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF - GL_ALL_BARRIER_BITS 0xFFFFFFFF - void glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) - void glMemoryBarrier (GLbitfield barriers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size deleted file mode 100644 index 456213e3dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_image_size -http://www.opengl.org/registry/specs/gl/ARB/shader_image_size.txt -GL_ARB_shader_image_size diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects deleted file mode 100644 index ca12d114fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects +++ /dev/null @@ -1,78 +0,0 @@ -GL_ARB_shader_objects -http://www.opengl.org/registry/specs/gl/ARB/shader_objects.txt -GL_ARB_shader_objects - GL_PROGRAM_OBJECT_ARB 0x8B40 - GL_SHADER_OBJECT_ARB 0x8B48 - GL_OBJECT_TYPE_ARB 0x8B4E - GL_OBJECT_SUBTYPE_ARB 0x8B4F - GL_FLOAT_VEC2_ARB 0x8B50 - GL_FLOAT_VEC3_ARB 0x8B51 - GL_FLOAT_VEC4_ARB 0x8B52 - GL_INT_VEC2_ARB 0x8B53 - GL_INT_VEC3_ARB 0x8B54 - GL_INT_VEC4_ARB 0x8B55 - GL_BOOL_ARB 0x8B56 - GL_BOOL_VEC2_ARB 0x8B57 - GL_BOOL_VEC3_ARB 0x8B58 - GL_BOOL_VEC4_ARB 0x8B59 - GL_FLOAT_MAT2_ARB 0x8B5A - GL_FLOAT_MAT3_ARB 0x8B5B - GL_FLOAT_MAT4_ARB 0x8B5C - GL_SAMPLER_1D_ARB 0x8B5D - GL_SAMPLER_2D_ARB 0x8B5E - GL_SAMPLER_3D_ARB 0x8B5F - GL_SAMPLER_CUBE_ARB 0x8B60 - GL_SAMPLER_1D_SHADOW_ARB 0x8B61 - GL_SAMPLER_2D_SHADOW_ARB 0x8B62 - GL_SAMPLER_2D_RECT_ARB 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 - GL_OBJECT_DELETE_STATUS_ARB 0x8B80 - GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 - GL_OBJECT_LINK_STATUS_ARB 0x8B82 - GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 - GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 - GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 - GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 - GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 - GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 - void glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj) - void glCompileShaderARB (GLhandleARB shaderObj) - GLhandleARB glCreateProgramObjectARB (void) - GLhandleARB glCreateShaderObjectARB (GLenum shaderType) - void glDeleteObjectARB (GLhandleARB obj) - void glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj) - void glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name) - void glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj) - GLhandleARB glGetHandleARB (GLenum pname) - void glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog) - void glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat* params) - void glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint* params) - void glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source) - GLint glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB* name) - void glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat* params) - void glGetUniformivARB (GLhandleARB programObj, GLint location, GLint* params) - void glLinkProgramARB (GLhandleARB programObj) - void glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length) - void glUniform1fARB (GLint location, GLfloat v0) - void glUniform1fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform1iARB (GLint location, GLint v0) - void glUniform1ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform2fARB (GLint location, GLfloat v0, GLfloat v1) - void glUniform2fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform2iARB (GLint location, GLint v0, GLint v1) - void glUniform2ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glUniform3fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2) - void glUniform3ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glUniform4fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glUniform4ivARB (GLint location, GLsizei count, const GLint* value) - void glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramObjectARB (GLhandleARB programObj) - void glValidateProgramARB (GLhandleARB programObj) - typedef char GLcharARB - typedef unsigned int GLhandleARB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision deleted file mode 100644 index 72e6a88828..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_precision -http://www.opengl.org/registry/specs/gl/ARB/shader_precision.txt -GL_ARB_shader_precision diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export deleted file mode 100644 index 609d6180a9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_stencil_export -http://www.opengl.org/registry/specs/gl/ARB/shader_stencil_export.txt -GL_ARB_shader_stencil_export diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object deleted file mode 100644 index 062774e142..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_shader_storage_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/shader_storage_buffer_object.txt -GL_ARB_shader_storage_buffer_object - GL_SHADER_STORAGE_BARRIER_BIT 0x2000 - GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 - GL_SHADER_STORAGE_BUFFER 0x90D2 - GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 - GL_SHADER_STORAGE_BUFFER_START 0x90D4 - GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 - GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 - GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 - GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 - GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 - GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA - GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB - GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC - GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD - GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE - GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF - void glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine deleted file mode 100644 index 322d74ceac..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_shader_subroutine -http://www.opengl.org/registry/specs/gl/ARB/shader_subroutine.txt -GL_ARB_shader_subroutine - GL_ACTIVE_SUBROUTINES 0x8DE5 - GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 - GL_MAX_SUBROUTINES 0x8DE7 - GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 - GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 - GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 - GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 - GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A - GL_COMPATIBLE_SUBROUTINES 0x8E4B - void glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name) - void glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name) - void glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) - void glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint* values) - GLuint glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar* name) - GLint glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar* name) - void glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint* params) - void glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint* indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod deleted file mode 100644 index cf56fef4ca..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_texture_lod -http://www.opengl.org/registry/specs/gl/ARB/shader_texture_lod.txt -GL_ARB_shader_texture_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 deleted file mode 100644 index 46c30defbf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_shading_language_100 -http://www.opengl.org/registry/specs/gl/ARB/shading_language_100.txt -GL_ARB_shading_language_100 - GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack deleted file mode 100644 index f4eeba49b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shading_language_420pack -http://www.opengl.org/registry/specs/gl/ARB/shading_language_420pack.txt -GL_ARB_shading_language_420pack diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include deleted file mode 100644 index 2cb1127213..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include +++ /dev/null @@ -1,12 +0,0 @@ -GL_ARB_shading_language_include -http://www.opengl.org/registry/specs/gl/ARB/shading_language_include.txt -GL_ARB_shading_language_include - GL_SHADER_INCLUDE_ARB 0x8DAE - GL_NAMED_STRING_LENGTH_ARB 0x8DE9 - GL_NAMED_STRING_TYPE_ARB 0x8DEA - void glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* const *path, const GLint *length) - void glDeleteNamedStringARB (GLint namelen, const GLchar* name) - void glGetNamedStringARB (GLint namelen, const GLchar* name, GLsizei bufSize, GLint *stringlen, GLchar *string) - void glGetNamedStringivARB (GLint namelen, const GLchar* name, GLenum pname, GLint *params) - GLboolean glIsNamedStringARB (GLint namelen, const GLchar* name) - void glNamedStringARB (GLenum type, GLint namelen, const GLchar* name, GLint stringlen, const GLchar *string) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing deleted file mode 100644 index 4d83cf0577..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shading_language_packing -http://www.opengl.org/registry/specs/gl/ARB/shading_language_packing.txt -GL_ARB_shading_language_packing diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow deleted file mode 100644 index 12fb91ca7a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_shadow -http://www.opengl.org/registry/specs/gl/ARB/shadow.txt -GL_ARB_shadow - GL_TEXTURE_COMPARE_MODE_ARB 0x884C - GL_TEXTURE_COMPARE_FUNC_ARB 0x884D - GL_COMPARE_R_TO_TEXTURE_ARB 0x884E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient deleted file mode 100644 index 03f0095be0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_shadow_ambient -http://www.opengl.org/registry/specs/gl/ARB/shadow_ambient.txt -GL_ARB_shadow_ambient - GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture deleted file mode 100644 index 69985673d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_sparse_texture -http://www.opengl.org/registry/specs/gl/ARB/sparse_texture.txt -GL_ARB_sparse_texture - GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 - GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 - GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 - GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 - GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 - GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A - GL_TEXTURE_SPARSE_ARB 0x91A6 - GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 - GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 - GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 - GL_NUM_SPARSE_LEVELS_ARB 0x91AA - void glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) - void glTexturePageCommitmentEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing b/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing deleted file mode 100644 index f486c2e98d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_stencil_texturing -http://www.opengl.org/registry/specs/gl/ARB/stencil_texturing.txt -GL_ARB_stencil_texturing - GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync deleted file mode 100644 index d0421d9de9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_sync -http://www.opengl.org/registry/specs/gl/ARB/sync.txt -GL_ARB_sync - GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 - GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 - GL_OBJECT_TYPE 0x9112 - GL_SYNC_CONDITION 0x9113 - GL_SYNC_STATUS 0x9114 - GL_SYNC_FLAGS 0x9115 - GL_SYNC_FENCE 0x9116 - GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 - GL_UNSIGNALED 0x9118 - GL_SIGNALED 0x9119 - GL_ALREADY_SIGNALED 0x911A - GL_TIMEOUT_EXPIRED 0x911B - GL_CONDITION_SATISFIED 0x911C - GL_WAIT_FAILED 0x911D - GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF - GLenum glClientWaitSync (GLsync GLsync,GLbitfield flags,GLuint64 timeout) - void glDeleteSync (GLsync GLsync) - GLsync glFenceSync (GLenum condition,GLbitfield flags) - void glGetInteger64v (GLenum pname, GLint64* params) - void glGetSynciv (GLsync GLsync,GLenum pname,GLsizei bufSize,GLsizei* length, GLint *values) - GLboolean glIsSync (GLsync GLsync) - void glWaitSync (GLsync GLsync,GLbitfield flags,GLuint64 timeout) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader deleted file mode 100644 index 97fbfec457..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader +++ /dev/null @@ -1,37 +0,0 @@ -GL_ARB_tessellation_shader -http://www.opengl.org/registry/specs/gl/ARB/tessellation_shader.txt -GL_ARB_tessellation_shader - GL_PATCHES 0xE - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 - GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C - GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D - GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E - GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F - GL_PATCH_VERTICES 0x8E72 - GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 - GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 - GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 - GL_TESS_GEN_MODE 0x8E76 - GL_TESS_GEN_SPACING 0x8E77 - GL_TESS_GEN_VERTEX_ORDER 0x8E78 - GL_TESS_GEN_POINT_MODE 0x8E79 - GL_ISOLINES 0x8E7A - GL_FRACTIONAL_ODD 0x8E7B - GL_FRACTIONAL_EVEN 0x8E7C - GL_MAX_PATCH_VERTICES 0x8E7D - GL_MAX_TESS_GEN_LEVEL 0x8E7E - GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F - GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 - GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 - GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 - GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 - GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 - GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 - GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 - GL_TESS_EVALUATION_SHADER 0x8E87 - GL_TESS_CONTROL_SHADER 0x8E88 - GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 - GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A - void glPatchParameterfv (GLenum pname, const GLfloat* values) - void glPatchParameteri (GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp deleted file mode 100644 index f9916e0771..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_border_clamp -http://www.opengl.org/registry/specs/gl/ARB/texture_border_clamp.txt -GL_ARB_texture_border_clamp - GL_CLAMP_TO_BORDER_ARB 0x812D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object deleted file mode 100644 index 8209839a42..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_object.txt -GL_ARB_texture_buffer_object - GL_TEXTURE_BUFFER_ARB 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B - GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E - void glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 deleted file mode 100644 index 49a60e008a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_buffer_object_rgb32 -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_object_rgb32.txt -GL_ARB_texture_buffer_object_rgb32 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range deleted file mode 100644 index 6dd8d29a1c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_texture_buffer_range -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_range.txt -GL_ARB_texture_buffer_range - GL_TEXTURE_BUFFER_OFFSET 0x919D - GL_TEXTURE_BUFFER_SIZE 0x919E - GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F - void glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression deleted file mode 100644 index 7419fa8bec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression +++ /dev/null @@ -1,21 +0,0 @@ -GL_ARB_texture_compression -http://www.opengl.org/registry/specs/gl/ARB/texture_compression.txt -GL_ARB_texture_compression - GL_COMPRESSED_ALPHA_ARB 0x84E9 - GL_COMPRESSED_LUMINANCE_ARB 0x84EA - GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB - GL_COMPRESSED_INTENSITY_ARB 0x84EC - GL_COMPRESSED_RGB_ARB 0x84ED - GL_COMPRESSED_RGBA_ARB 0x84EE - GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF - GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 - GL_TEXTURE_COMPRESSED_ARB 0x86A1 - GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 - GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 - void glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glGetCompressedTexImageARB (GLenum target, GLint lod, GLvoid *img) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc deleted file mode 100644 index 3461d963fc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_compression_bptc -http://www.opengl.org/registry/specs/gl/ARB/texture_compression_bptc.txt -GL_ARB_texture_compression_bptc - GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C - GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D - GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E - GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc deleted file mode 100644 index 7bbc9eca0b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_compression_rgtc -http://www.opengl.org/registry/specs/gl/ARB/texture_compression_rgtc.txt -GL_ARB_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC - GL_COMPRESSED_RG_RGTC2 0x8DBD - GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map deleted file mode 100644 index e91076bbc7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_ARB_texture_cube_map -http://www.opengl.org/registry/specs/gl/ARB/texture_cube_map.txt -GL_ARB_texture_cube_map - GL_NORMAL_MAP_ARB 0x8511 - GL_REFLECTION_MAP_ARB 0x8512 - GL_TEXTURE_CUBE_MAP_ARB 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array deleted file mode 100644 index 40c679a63c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_texture_cube_map_array -http://www.opengl.org/registry/specs/gl/ARB/texture_cube_map_array.txt -GL_ARB_texture_cube_map_array - GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 - GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A - GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B - GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C - GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D - GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E - GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add deleted file mode 100644 index c937c02d90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_env_add -http://www.opengl.org/registry/specs/gl/ARB/texture_env_add.txt -GL_ARB_texture_env_add diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine deleted file mode 100644 index f7bc6410f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_texture_env_combine -http://www.opengl.org/registry/specs/gl/ARB/texture_env_combine.txt -GL_ARB_texture_env_combine - GL_SUBTRACT_ARB 0x84E7 - GL_COMBINE_ARB 0x8570 - GL_COMBINE_RGB_ARB 0x8571 - GL_COMBINE_ALPHA_ARB 0x8572 - GL_RGB_SCALE_ARB 0x8573 - GL_ADD_SIGNED_ARB 0x8574 - GL_INTERPOLATE_ARB 0x8575 - GL_CONSTANT_ARB 0x8576 - GL_PRIMARY_COLOR_ARB 0x8577 - GL_PREVIOUS_ARB 0x8578 - GL_SOURCE0_RGB_ARB 0x8580 - GL_SOURCE1_RGB_ARB 0x8581 - GL_SOURCE2_RGB_ARB 0x8582 - GL_SOURCE0_ALPHA_ARB 0x8588 - GL_SOURCE1_ALPHA_ARB 0x8589 - GL_SOURCE2_ALPHA_ARB 0x858A - GL_OPERAND0_RGB_ARB 0x8590 - GL_OPERAND1_RGB_ARB 0x8591 - GL_OPERAND2_RGB_ARB 0x8592 - GL_OPERAND0_ALPHA_ARB 0x8598 - GL_OPERAND1_ALPHA_ARB 0x8599 - GL_OPERAND2_ALPHA_ARB 0x859A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar deleted file mode 100644 index d0b74c0ef8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_env_crossbar -http://www.opengl.org/registry/specs/gl/ARB/texture_env_crossbar.txt -GL_ARB_texture_env_crossbar diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 deleted file mode 100644 index 488911b9c0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_texture_env_dot3 -http://www.opengl.org/registry/specs/gl/ARB/texture_env_dot3.txt -GL_ARB_texture_env_dot3 - GL_DOT3_RGB_ARB 0x86AE - GL_DOT3_RGBA_ARB 0x86AF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float deleted file mode 100644 index a48a387034..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float +++ /dev/null @@ -1,23 +0,0 @@ -GL_ARB_texture_float -http://www.opengl.org/registry/specs/gl/ARB/texture_float.txt -GL_ARB_texture_float - GL_RGBA32F_ARB 0x8814 - GL_RGB32F_ARB 0x8815 - GL_ALPHA32F_ARB 0x8816 - GL_INTENSITY32F_ARB 0x8817 - GL_LUMINANCE32F_ARB 0x8818 - GL_LUMINANCE_ALPHA32F_ARB 0x8819 - GL_RGBA16F_ARB 0x881A - GL_RGB16F_ARB 0x881B - GL_ALPHA16F_ARB 0x881C - GL_INTENSITY16F_ARB 0x881D - GL_LUMINANCE16F_ARB 0x881E - GL_LUMINANCE_ALPHA16F_ARB 0x881F - GL_TEXTURE_RED_TYPE_ARB 0x8C10 - GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 - GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 - GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 - GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 - GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 - GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 - GL_UNSIGNED_NORMALIZED_ARB 0x8C17 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather deleted file mode 100644 index e1af3a0cbd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_texture_gather -http://www.opengl.org/registry/specs/gl/ARB/texture_gather.txt -GL_ARB_texture_gather - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F - GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge deleted file mode 100644 index a484fd14b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_mirror_clamp_to_edge -http://www.opengl.org/registry/specs/gl/ARB/texture_mirror_clamp_to_edge.txt -GL_ARB_texture_mirror_clamp_to_edge - GL_MIRROR_CLAMP_TO_EDGE 0x8743 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat deleted file mode 100644 index 46ffd19f4b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_mirrored_repeat -http://www.opengl.org/registry/specs/gl/ARB/texture_mirrored_repeat.txt -GL_ARB_texture_mirrored_repeat - GL_MIRRORED_REPEAT_ARB 0x8370 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample deleted file mode 100644 index f664421ade..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample +++ /dev/null @@ -1,28 +0,0 @@ -GL_ARB_texture_multisample -http://www.opengl.org/registry/specs/gl/ARB/texture_multisample.txt -GL_ARB_texture_multisample - GL_SAMPLE_POSITION 0x8E50 - GL_SAMPLE_MASK 0x8E51 - GL_SAMPLE_MASK_VALUE 0x8E52 - GL_MAX_SAMPLE_MASK_WORDS 0x8E59 - GL_TEXTURE_2D_MULTISAMPLE 0x9100 - GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 - GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 - GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 - GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 - GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 - GL_TEXTURE_SAMPLES 0x9106 - GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 - GL_SAMPLER_2D_MULTISAMPLE 0x9108 - GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A - GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B - GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D - GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E - GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F - GL_MAX_INTEGER_SAMPLES 0x9110 - void glGetMultisamplefv (GLenum pname, GLuint index, GLfloat* val) - void glSampleMaski (GLuint index, GLbitfield mask) - void glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two deleted file mode 100644 index c46ea3e3d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_non_power_of_two -http://www.opengl.org/registry/specs/gl/ARB/texture_non_power_of_two.txt -GL_ARB_texture_non_power_of_two diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels deleted file mode 100644 index bfd9060b24..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_query_levels -http://www.opengl.org/registry/specs/gl/ARB/texture_query_levels.txt -GL_ARB_texture_query_levels diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod deleted file mode 100644 index c443775dd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_query_lod -http://www.opengl.org/registry/specs/gl/ARB/texture_query_lod.txt -GL_ARB_texture_query_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle deleted file mode 100644 index 715446cbc2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_rectangle -http://www.opengl.org/registry/specs/gl/ARB/texture_rectangle.txt -GL_ARB_texture_rectangle - GL_TEXTURE_RECTANGLE_ARB 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 - GL_SAMPLER_2D_RECT_ARB 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg deleted file mode 100644 index 1bda4f22dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg +++ /dev/null @@ -1,27 +0,0 @@ -GL_ARB_texture_rg -http://www.opengl.org/registry/specs/gl/ARB/texture_rg.txt -GL_ARB_texture_rg - GL_COMPRESSED_RED 0x8225 - GL_COMPRESSED_RG 0x8226 - GL_RG 0x8227 - GL_RG_INTEGER 0x8228 - GL_R8 0x8229 - GL_R16 0x822A - GL_RG8 0x822B - GL_RG16 0x822C - GL_R16F 0x822D - GL_R32F 0x822E - GL_RG16F 0x822F - GL_RG32F 0x8230 - GL_R8I 0x8231 - GL_R8UI 0x8232 - GL_R16I 0x8233 - GL_R16UI 0x8234 - GL_R32I 0x8235 - GL_R32UI 0x8236 - GL_RG8I 0x8237 - GL_RG8UI 0x8238 - GL_RG16I 0x8239 - GL_RG16UI 0x823A - GL_RG32I 0x823B - GL_RG32UI 0x823C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui deleted file mode 100644 index e66f7be4f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_rgb10_a2ui -http://www.opengl.org/registry/specs/gl/ARB/texture_rgb10_a2ui.txt -GL_ARB_texture_rgb10_a2ui - GL_RGB10_A2UI 0x906F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 deleted file mode 100644 index 83d2e1aee9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_texture_stencil8 -http://www.opengl.org/registry/specs/gl/ARB/texture_stencil8.txt -GL_ARB_texture_stencil8 - GL_STENCIL_INDEX 0x1901 - GL_STENCIL_INDEX8 0x8D48 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage deleted file mode 100644 index 83026e095a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_texture_storage -http://www.opengl.org/registry/specs/gl/ARB/texture_storage.txt -GL_ARB_texture_storage - GL_TEXTURE_IMMUTABLE_FORMAT 0x912F - void glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) - void glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) - void glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) - void glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) - void glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) - void glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample deleted file mode 100644 index 4ca59e65fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_storage_multisample -http://www.opengl.org/registry/specs/gl/ARB/texture_storage_multisample.txt -GL_ARB_texture_storage_multisample - void glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) - void glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle deleted file mode 100644 index 09ba7d6c6c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_texture_swizzle -http://www.opengl.org/registry/specs/gl/ARB/texture_swizzle.txt -GL_ARB_texture_swizzle - GL_TEXTURE_SWIZZLE_R 0x8E42 - GL_TEXTURE_SWIZZLE_G 0x8E43 - GL_TEXTURE_SWIZZLE_B 0x8E44 - GL_TEXTURE_SWIZZLE_A 0x8E45 - GL_TEXTURE_SWIZZLE_RGBA 0x8E46 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view deleted file mode 100644 index 337e3413fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_view -http://www.opengl.org/registry/specs/gl/ARB/texture_view.txt -GL_ARB_texture_view - GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB - GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC - GL_TEXTURE_VIEW_MIN_LAYER 0x82DD - GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE - GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - void glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query deleted file mode 100644 index 7b2cb1c6b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_timer_query -http://www.opengl.org/registry/specs/gl/ARB/timer_query.txt -GL_ARB_timer_query - GL_TIME_ELAPSED 0x88BF - GL_TIMESTAMP 0x8E28 - void glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64* params) - void glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64* params) - void glQueryCounter (GLuint id, GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 deleted file mode 100644 index 7caaf98d5b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 +++ /dev/null @@ -1,14 +0,0 @@ -GL_ARB_transform_feedback2 -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback2.txt -GL_ARB_transform_feedback2 - GL_TRANSFORM_FEEDBACK 0x8E22 - GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 - GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 - GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 - void glBindTransformFeedback (GLenum target, GLuint id) - void glDeleteTransformFeedbacks (GLsizei n, const GLuint* ids) - void glDrawTransformFeedback (GLenum mode, GLuint id) - void glGenTransformFeedbacks (GLsizei n, GLuint* ids) - GLboolean glIsTransformFeedback (GLuint id) - void glPauseTransformFeedback (void) - void glResumeTransformFeedback (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 deleted file mode 100644 index 07e7ec902e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_transform_feedback3 -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback3.txt -GL_ARB_transform_feedback3 - GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 - GL_MAX_VERTEX_STREAMS 0x8E71 - void glBeginQueryIndexed (GLenum target, GLuint index, GLuint id) - void glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream) - void glEndQueryIndexed (GLenum target, GLuint index) - void glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced deleted file mode 100644 index 1f651c42a8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_transform_feedback_instanced -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback_instanced.txt -GL_ARB_transform_feedback_instanced - void glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei primcount) - void glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix deleted file mode 100644 index f7e0902789..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_transpose_matrix -http://www.opengl.org/registry/specs/gl/ARB/transpose_matrix.txt -GL_ARB_transpose_matrix - GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 - GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 - GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 - GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 - void glLoadTransposeMatrixfARB (GLfloat m[16]) - void glLoadTransposeMatrixdARB (GLdouble m[16]) - void glMultTransposeMatrixfARB (GLfloat m[16]) - void glMultTransposeMatrixdARB (GLdouble m[16]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object deleted file mode 100644 index 4a83f14cc4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object +++ /dev/null @@ -1,46 +0,0 @@ -GL_ARB_uniform_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/uniform_buffer_object.txt -GL_ARB_uniform_buffer_object - GL_UNIFORM_BUFFER 0x8A11 - GL_UNIFORM_BUFFER_BINDING 0x8A28 - GL_UNIFORM_BUFFER_START 0x8A29 - GL_UNIFORM_BUFFER_SIZE 0x8A2A - GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B - GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C - GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D - GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E - GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F - GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 - GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 - GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 - GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 - GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 - GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 - GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 - GL_UNIFORM_TYPE 0x8A37 - GL_UNIFORM_SIZE 0x8A38 - GL_UNIFORM_NAME_LENGTH 0x8A39 - GL_UNIFORM_BLOCK_INDEX 0x8A3A - GL_UNIFORM_OFFSET 0x8A3B - GL_UNIFORM_ARRAY_STRIDE 0x8A3C - GL_UNIFORM_MATRIX_STRIDE 0x8A3D - GL_UNIFORM_IS_ROW_MAJOR 0x8A3E - GL_UNIFORM_BLOCK_BINDING 0x8A3F - GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 - GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 - GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 - GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 - GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 - GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 - GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 - GL_INVALID_INDEX 0xFFFFFFFF - void glBindBufferBase (GLenum target, GLuint index, GLuint buffer) - void glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) - void glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) - void glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) - void glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) - void glGetIntegeri_v (GLenum target, GLuint index, GLint* data) - GLuint glGetUniformBlockIndex (GLuint program, const GLchar* uniformBlockName) - void glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices) - void glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra deleted file mode 100644 index 1869a2b68a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_vertex_array_bgra -http://www.opengl.org/registry/specs/gl/ARB/vertex_array_bgra.txt -GL_ARB_vertex_array_bgra - GL_BGRA 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object deleted file mode 100644 index 3413324313..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_vertex_array_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_array_object.txt -GL_ARB_vertex_array_object - GL_VERTEX_ARRAY_BINDING 0x85B5 - void glBindVertexArray (GLuint array) - void glDeleteVertexArrays (GLsizei n, const GLuint* arrays) - void glGenVertexArrays (GLsizei n, GLuint* arrays) - GLboolean glIsVertexArray (GLuint array) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit deleted file mode 100644 index a30aa06252..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_attrib_64bit -http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt -GL_ARB_vertex_attrib_64bit - void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) - void glVertexAttribL1d (GLuint index, GLdouble x) - void glVertexAttribL1dv (GLuint index, const GLdouble* v) - void glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dv (GLuint index, const GLdouble* v) - void glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dv (GLuint index, const GLdouble* v) - void glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dv (GLuint index, const GLdouble* v) - void glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding deleted file mode 100644 index 53492cd08b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_vertex_attrib_binding -http://www.opengl.org/registry/specs/gl/ARB/vertex_attrib_binding.txt -GL_ARB_vertex_attrib_binding - GL_VERTEX_ATTRIB_BINDING 0x82D4 - GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 - GL_VERTEX_BINDING_DIVISOR 0x82D6 - GL_VERTEX_BINDING_OFFSET 0x82D7 - GL_VERTEX_BINDING_STRIDE 0x82D8 - GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 - GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA - void glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) - void glVertexAttribBinding (GLuint attribindex, GLuint bindingindex) - void glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) - void glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) - void glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) - void glVertexBindingDivisor (GLuint bindingindex, GLuint divisor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend deleted file mode 100644 index 8da2c785b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend +++ /dev/null @@ -1,55 +0,0 @@ -GL_ARB_vertex_blend -http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt -GL_ARB_vertex_blend - GL_MAX_VERTEX_UNITS_ARB 0x86A4 - GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 - GL_WEIGHT_SUM_UNITY_ARB 0x86A6 - GL_VERTEX_BLEND_ARB 0x86A7 - GL_CURRENT_WEIGHT_ARB 0x86A8 - GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 - GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA - GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB - GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC - GL_WEIGHT_ARRAY_ARB 0x86AD - GL_MODELVIEW0_ARB 0x1700 - GL_MODELVIEW1_ARB 0x850A - GL_MODELVIEW2_ARB 0x8722 - GL_MODELVIEW3_ARB 0x8723 - GL_MODELVIEW4_ARB 0x8724 - GL_MODELVIEW5_ARB 0x8725 - GL_MODELVIEW6_ARB 0x8726 - GL_MODELVIEW7_ARB 0x8727 - GL_MODELVIEW8_ARB 0x8728 - GL_MODELVIEW9_ARB 0x8729 - GL_MODELVIEW10_ARB 0x872A - GL_MODELVIEW11_ARB 0x872B - GL_MODELVIEW12_ARB 0x872C - GL_MODELVIEW13_ARB 0x872D - GL_MODELVIEW14_ARB 0x872E - GL_MODELVIEW15_ARB 0x872F - GL_MODELVIEW16_ARB 0x8730 - GL_MODELVIEW17_ARB 0x8731 - GL_MODELVIEW18_ARB 0x8732 - GL_MODELVIEW19_ARB 0x8733 - GL_MODELVIEW20_ARB 0x8734 - GL_MODELVIEW21_ARB 0x8735 - GL_MODELVIEW22_ARB 0x8736 - GL_MODELVIEW23_ARB 0x8737 - GL_MODELVIEW24_ARB 0x8738 - GL_MODELVIEW25_ARB 0x8739 - GL_MODELVIEW26_ARB 0x873A - GL_MODELVIEW27_ARB 0x873B - GL_MODELVIEW28_ARB 0x873C - GL_MODELVIEW29_ARB 0x873D - GL_MODELVIEW30_ARB 0x873E - GL_MODELVIEW31_ARB 0x873F - void glWeightbvARB (GLint size, GLbyte *weights) - void glWeightsvARB (GLint size, GLshort *weights) - void glWeightivARB (GLint size, GLint *weights) - void glWeightfvARB (GLint size, GLfloat *weights) - void glWeightdvARB (GLint size, GLdouble *weights) - void glWeightubvARB (GLint size, GLubyte *weights) - void glWeightusvARB (GLint size, GLushort *weights) - void glWeightuivARB (GLint size, GLuint *weights) - void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexBlendARB (GLint count) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object deleted file mode 100644 index 2e094fdd1b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object +++ /dev/null @@ -1,47 +0,0 @@ -GL_ARB_vertex_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_buffer_object.txt -GL_ARB_vertex_buffer_object - GL_BUFFER_SIZE_ARB 0x8764 - GL_BUFFER_USAGE_ARB 0x8765 - GL_ARRAY_BUFFER_ARB 0x8892 - GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 - GL_ARRAY_BUFFER_BINDING_ARB 0x8894 - GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 - GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 - GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 - GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 - GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D - GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F - GL_READ_ONLY_ARB 0x88B8 - GL_WRITE_ONLY_ARB 0x88B9 - GL_READ_WRITE_ARB 0x88BA - GL_BUFFER_ACCESS_ARB 0x88BB - GL_BUFFER_MAPPED_ARB 0x88BC - GL_BUFFER_MAP_POINTER_ARB 0x88BD - GL_STREAM_DRAW_ARB 0x88E0 - GL_STREAM_READ_ARB 0x88E1 - GL_STREAM_COPY_ARB 0x88E2 - GL_STATIC_DRAW_ARB 0x88E4 - GL_STATIC_READ_ARB 0x88E5 - GL_STATIC_COPY_ARB 0x88E6 - GL_DYNAMIC_DRAW_ARB 0x88E8 - GL_DYNAMIC_READ_ARB 0x88E9 - GL_DYNAMIC_COPY_ARB 0x88EA - void glBindBufferARB (GLenum target, GLuint buffer) - void glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage) - void glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data) - void glDeleteBuffersARB (GLsizei n, const GLuint* buffers) - void glGenBuffersARB (GLsizei n, GLuint* buffers) - void glGetBufferParameterivARB (GLenum target, GLenum pname, GLint* params) - void glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid** params) - void glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data) - GLboolean glIsBufferARB (GLuint buffer) - GLvoid * glMapBufferARB (GLenum target, GLenum access) - GLboolean glUnmapBufferARB (GLenum target) - typedef ptrdiff_t GLsizeiptrARB - typedef ptrdiff_t GLintptrARB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program deleted file mode 100644 index 2a5f94dbff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program +++ /dev/null @@ -1,144 +0,0 @@ -GL_ARB_vertex_program -http://www.opengl.org/registry/specs/gl/ARB/vertex_program.txt -GL_ARB_vertex_program - GL_COLOR_SUM_ARB 0x8458 - GL_VERTEX_PROGRAM_ARB 0x8620 - GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 - GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 - GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 - GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 - GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 - GL_PROGRAM_LENGTH_ARB 0x8627 - GL_PROGRAM_STRING_ARB 0x8628 - GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E - GL_MAX_PROGRAM_MATRICES_ARB 0x862F - GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 - GL_CURRENT_MATRIX_ARB 0x8641 - GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 - GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 - GL_PROGRAM_ERROR_POSITION_ARB 0x864B - GL_PROGRAM_BINDING_ARB 0x8677 - GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A - GL_PROGRAM_ERROR_STRING_ARB 0x8874 - GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 - GL_PROGRAM_FORMAT_ARB 0x8876 - GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 - GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 - GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 - GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 - GL_PROGRAM_TEMPORARIES_ARB 0x88A4 - GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 - GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 - GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 - GL_PROGRAM_PARAMETERS_ARB 0x88A8 - GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 - GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA - GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB - GL_PROGRAM_ATTRIBS_ARB 0x88AC - GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD - GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE - GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF - GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 - GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 - GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 - GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 - GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 - GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 - GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 - GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 - GL_MATRIX0_ARB 0x88C0 - GL_MATRIX1_ARB 0x88C1 - GL_MATRIX2_ARB 0x88C2 - GL_MATRIX3_ARB 0x88C3 - GL_MATRIX4_ARB 0x88C4 - GL_MATRIX5_ARB 0x88C5 - GL_MATRIX6_ARB 0x88C6 - GL_MATRIX7_ARB 0x88C7 - GL_MATRIX8_ARB 0x88C8 - GL_MATRIX9_ARB 0x88C9 - GL_MATRIX10_ARB 0x88CA - GL_MATRIX11_ARB 0x88CB - GL_MATRIX12_ARB 0x88CC - GL_MATRIX13_ARB 0x88CD - GL_MATRIX14_ARB 0x88CE - GL_MATRIX15_ARB 0x88CF - GL_MATRIX16_ARB 0x88D0 - GL_MATRIX17_ARB 0x88D1 - GL_MATRIX18_ARB 0x88D2 - GL_MATRIX19_ARB 0x88D3 - GL_MATRIX20_ARB 0x88D4 - GL_MATRIX21_ARB 0x88D5 - GL_MATRIX22_ARB 0x88D6 - GL_MATRIX23_ARB 0x88D7 - GL_MATRIX24_ARB 0x88D8 - GL_MATRIX25_ARB 0x88D9 - GL_MATRIX26_ARB 0x88DA - GL_MATRIX27_ARB 0x88DB - GL_MATRIX28_ARB 0x88DC - GL_MATRIX29_ARB 0x88DD - GL_MATRIX30_ARB 0x88DE - GL_MATRIX31_ARB 0x88DF - void glBindProgramARB (GLenum target, GLuint program) - void glDeleteProgramsARB (GLsizei n, const GLuint* programs) - void glDisableVertexAttribArrayARB (GLuint index) - void glEnableVertexAttribArrayARB (GLuint index) - void glGenProgramsARB (GLsizei n, GLuint* programs) - void glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble* params) - void glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat* params) - void glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble* params) - void glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat* params) - void glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string) - void glGetProgramivARB (GLenum target, GLenum pname, GLint* params) - void glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid** pointer) - void glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble* params) - void glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribivARB (GLuint index, GLenum pname, GLint* params) - GLboolean glIsProgramARB (GLuint program) - void glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble* params) - void glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat* params) - void glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble* params) - void glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat* params) - void glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string) - void glVertexAttrib1dARB (GLuint index, GLdouble x) - void glVertexAttrib1dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib1fARB (GLuint index, GLfloat x) - void glVertexAttrib1fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib1sARB (GLuint index, GLshort x) - void glVertexAttrib1svARB (GLuint index, const GLshort* v) - void glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2svARB (GLuint index, const GLshort* v) - void glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3svARB (GLuint index, const GLshort* v) - void glVertexAttrib4NbvARB (GLuint index, const GLbyte* v) - void glVertexAttrib4NivARB (GLuint index, const GLint* v) - void glVertexAttrib4NsvARB (GLuint index, const GLshort* v) - void glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4NubvARB (GLuint index, const GLubyte* v) - void glVertexAttrib4NuivARB (GLuint index, const GLuint* v) - void glVertexAttrib4NusvARB (GLuint index, const GLushort* v) - void glVertexAttrib4bvARB (GLuint index, const GLbyte* v) - void glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib4ivARB (GLuint index, const GLint* v) - void glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4svARB (GLuint index, const GLshort* v) - void glVertexAttrib4ubvARB (GLuint index, const GLubyte* v) - void glVertexAttrib4uivARB (GLuint index, const GLuint* v) - void glVertexAttrib4usvARB (GLuint index, const GLushort* v) - void glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader deleted file mode 100644 index 6a235f2356..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_shader -http://www.opengl.org/registry/specs/gl/ARB/vertex_shader.txt -GL_ARB_vertex_shader - GL_VERTEX_SHADER_ARB 0x8B31 - GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A - GL_MAX_VARYING_FLOATS_ARB 0x8B4B - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D - GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 - GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A - void glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB* name) - void glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name) - GLint glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB* name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev deleted file mode 100644 index 662af3474b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_vertex_type_10f_11f_11f_rev -http://www.opengl.org/registry/specs/gl/ARB/vertex_type_10f_11f_11f_rev.txt -GL_ARB_vertex_type_10f_11f_11f_rev - GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev deleted file mode 100644 index b46b266dff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev +++ /dev/null @@ -1,43 +0,0 @@ -GL_ARB_vertex_type_2_10_10_10_rev -http://www.opengl.org/registry/specs/gl/ARB/vertex_type_2_10_10_10_rev.txt -GL_ARB_vertex_type_2_10_10_10_rev - GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 - GL_INT_2_10_10_10_REV 0x8D9F - void glColorP3ui (GLenum type, GLuint color) - void glColorP3uiv (GLenum type, const GLuint* color) - void glColorP4ui (GLenum type, GLuint color) - void glColorP4uiv (GLenum type, const GLuint* color) - void glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint* coords) - void glNormalP3ui (GLenum type, GLuint coords) - void glNormalP3uiv (GLenum type, const GLuint* coords) - void glSecondaryColorP3ui (GLenum type, GLuint color) - void glSecondaryColorP3uiv (GLenum type, const GLuint* color) - void glTexCoordP1ui (GLenum type, GLuint coords) - void glTexCoordP1uiv (GLenum type, const GLuint* coords) - void glTexCoordP2ui (GLenum type, GLuint coords) - void glTexCoordP2uiv (GLenum type, const GLuint* coords) - void glTexCoordP3ui (GLenum type, GLuint coords) - void glTexCoordP3uiv (GLenum type, const GLuint* coords) - void glTexCoordP4ui (GLenum type, GLuint coords) - void glTexCoordP4uiv (GLenum type, const GLuint* coords) - void glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexP2ui (GLenum type, GLuint value) - void glVertexP2uiv (GLenum type, const GLuint* value) - void glVertexP3ui (GLenum type, GLuint value) - void glVertexP3uiv (GLenum type, const GLuint* value) - void glVertexP4ui (GLenum type, GLuint value) - void glVertexP4uiv (GLenum type, const GLuint* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array b/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array deleted file mode 100644 index e8a012b21c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array +++ /dev/null @@ -1,26 +0,0 @@ -GL_ARB_viewport_array -http://www.opengl.org/registry/specs/gl/ARB/viewport_array.txt -GL_ARB_viewport_array - GL_DEPTH_RANGE 0x0B70 - GL_VIEWPORT 0x0BA2 - GL_SCISSOR_BOX 0x0C10 - GL_SCISSOR_TEST 0x0C11 - GL_MAX_VIEWPORTS 0x825B - GL_VIEWPORT_SUBPIXEL_BITS 0x825C - GL_VIEWPORT_BOUNDS_RANGE 0x825D - GL_LAYER_PROVOKING_VERTEX 0x825E - GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F - GL_UNDEFINED_VERTEX 0x8260 - GL_FIRST_VERTEX_CONVENTION 0x8E4D - GL_LAST_VERTEX_CONVENTION 0x8E4E - GL_PROVOKING_VERTEX 0x8E4F - void glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd * v) - void glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f) - void glGetDoublei_v (GLenum target, GLuint index, GLdouble* data) - void glGetFloati_v (GLenum target, GLuint index, GLfloat* data) - void glScissorArrayv (GLuint first, GLsizei count, const GLint * v) - void glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) - void glScissorIndexedv (GLuint index, const GLint * v) - void glViewportArrayv (GLuint first, GLsizei count, const GLfloat * v) - void glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) - void glViewportIndexedfv (GLuint index, const GLfloat * v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos b/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos deleted file mode 100644 index 75a52ad5ca..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos +++ /dev/null @@ -1,19 +0,0 @@ -GL_ARB_window_pos -http://www.opengl.org/registry/specs/gl/ARB/window_pos.txt -GL_ARB_window_pos - void glWindowPos2dARB (GLdouble x, GLdouble y) - void glWindowPos2dvARB (const GLdouble* p) - void glWindowPos2fARB (GLfloat x, GLfloat y) - void glWindowPos2fvARB (const GLfloat* p) - void glWindowPos2iARB (GLint x, GLint y) - void glWindowPos2ivARB (const GLint* p) - void glWindowPos2sARB (GLshort x, GLshort y) - void glWindowPos2svARB (const GLshort* p) - void glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3dvARB (const GLdouble* p) - void glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3fvARB (const GLfloat* p) - void glWindowPos3iARB (GLint x, GLint y, GLint z) - void glWindowPos3ivARB (const GLint* p) - void glWindowPos3sARB (GLshort x, GLshort y, GLshort z) - void glWindowPos3svARB (const GLshort* p) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites deleted file mode 100644 index 0f4f574131..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATIX_point_sprites -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_point_sprites - GL_TEXTURE_POINT_MODE_ATIX 0x60B0 - GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 - GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 - GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 - GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 - GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 deleted file mode 100644 index 537426b95d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_combine3 -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_texture_env_combine3 - GL_MODULATE_ADD_ATIX 0x8744 - GL_MODULATE_SIGNED_ADD_ATIX 0x8745 - GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route deleted file mode 100644 index 939ae09b95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_route -http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt -GL_ATIX_texture_env_route - GL_SECONDARY_COLOR_ATIX 0x8747 - GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 - GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size deleted file mode 100644 index 277a3136cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATIX_vertex_shader_output_point_size -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_vertex_shader_output_point_size - GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers b/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers deleted file mode 100644 index 9761b24530..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers +++ /dev/null @@ -1,21 +0,0 @@ -GL_ATI_draw_buffers -http://www.opengl.org/registry/specs/gl/ATI/draw_buffers.txt -GL_ATI_draw_buffers - GL_MAX_DRAW_BUFFERS_ATI 0x8824 - GL_DRAW_BUFFER0_ATI 0x8825 - GL_DRAW_BUFFER1_ATI 0x8826 - GL_DRAW_BUFFER2_ATI 0x8827 - GL_DRAW_BUFFER3_ATI 0x8828 - GL_DRAW_BUFFER4_ATI 0x8829 - GL_DRAW_BUFFER5_ATI 0x882A - GL_DRAW_BUFFER6_ATI 0x882B - GL_DRAW_BUFFER7_ATI 0x882C - GL_DRAW_BUFFER8_ATI 0x882D - GL_DRAW_BUFFER9_ATI 0x882E - GL_DRAW_BUFFER10_ATI 0x882F - GL_DRAW_BUFFER11_ATI 0x8830 - GL_DRAW_BUFFER12_ATI 0x8831 - GL_DRAW_BUFFER13_ATI 0x8832 - GL_DRAW_BUFFER14_ATI 0x8833 - GL_DRAW_BUFFER15_ATI 0x8834 - void glDrawBuffersATI (GLsizei n, const GLenum* bufs) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array b/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array deleted file mode 100644 index 5dfa2c04e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_element_array -http://www.opengl.org/registry/specs/gl/ATI/element_array.txt -GL_ATI_element_array - GL_ELEMENT_ARRAY_ATI 0x8768 - GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 - GL_ELEMENT_ARRAY_POINTER_ATI 0x876A - void glDrawElementArrayATI (GLenum mode, GLsizei count) - void glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count) - void glElementPointerATI (GLenum type, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap b/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap deleted file mode 100644 index fbd992551e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_envmap_bumpmap -http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt -GL_ATI_envmap_bumpmap - GL_BUMP_ROT_MATRIX_ATI 0x8775 - GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 - GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 - GL_BUMP_TEX_UNITS_ATI 0x8778 - GL_DUDV_ATI 0x8779 - GL_DU8DV8_ATI 0x877A - GL_BUMP_ENVMAP_ATI 0x877B - GL_BUMP_TARGET_ATI 0x877C - void glTexBumpParameterivATI (GLenum pname, GLint *param) - void glTexBumpParameterfvATI (GLenum pname, GLfloat *param) - void glGetTexBumpParameterivATI (GLenum pname, GLint *param) - void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader deleted file mode 100644 index da65d9ab0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader +++ /dev/null @@ -1,71 +0,0 @@ -GL_ATI_fragment_shader -http://www.opengl.org/registry/specs/gl/ATI/fragment_shader.txt -GL_ATI_fragment_shader - GL_RED_BIT_ATI 0x00000001 - GL_2X_BIT_ATI 0x00000001 - GL_4X_BIT_ATI 0x00000002 - GL_GREEN_BIT_ATI 0x00000002 - GL_COMP_BIT_ATI 0x00000002 - GL_BLUE_BIT_ATI 0x00000004 - GL_8X_BIT_ATI 0x00000004 - GL_NEGATE_BIT_ATI 0x00000004 - GL_BIAS_BIT_ATI 0x00000008 - GL_HALF_BIT_ATI 0x00000008 - GL_QUARTER_BIT_ATI 0x00000010 - GL_EIGHTH_BIT_ATI 0x00000020 - GL_SATURATE_BIT_ATI 0x00000040 - GL_FRAGMENT_SHADER_ATI 0x8920 - GL_REG_0_ATI 0x8921 - GL_REG_1_ATI 0x8922 - GL_REG_2_ATI 0x8923 - GL_REG_3_ATI 0x8924 - GL_REG_4_ATI 0x8925 - GL_REG_5_ATI 0x8926 - GL_CON_0_ATI 0x8941 - GL_CON_1_ATI 0x8942 - GL_CON_2_ATI 0x8943 - GL_CON_3_ATI 0x8944 - GL_CON_4_ATI 0x8945 - GL_CON_5_ATI 0x8946 - GL_CON_6_ATI 0x8947 - GL_CON_7_ATI 0x8948 - GL_MOV_ATI 0x8961 - GL_ADD_ATI 0x8963 - GL_MUL_ATI 0x8964 - GL_SUB_ATI 0x8965 - GL_DOT3_ATI 0x8966 - GL_DOT4_ATI 0x8967 - GL_MAD_ATI 0x8968 - GL_LERP_ATI 0x8969 - GL_CND_ATI 0x896A - GL_CND0_ATI 0x896B - GL_DOT2_ADD_ATI 0x896C - GL_SECONDARY_INTERPOLATOR_ATI 0x896D - GL_SWIZZLE_STR_ATI 0x8976 - GL_SWIZZLE_STQ_ATI 0x8977 - GL_SWIZZLE_STR_DR_ATI 0x8978 - GL_SWIZZLE_STQ_DQ_ATI 0x8979 - void glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) - void glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) - void glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) - void glBeginFragmentShaderATI (void) - void glBindFragmentShaderATI (GLuint id) - void glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) - void glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) - void glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) - void glDeleteFragmentShaderATI (GLuint id) - void glEndFragmentShaderATI (void) - GLuint glGenFragmentShadersATI (GLuint range) - void glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle) - void glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle) - void glSetFragmentShaderConstantATI (GLuint dst, const GLfloat* value) - GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E - GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F - GL_NUM_PASSES_ATI 0x8970 - GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 - GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 - GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 - GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 - GL_COLOR_ALPHA_PAIRING_ATI 0x8975 - GL_SWIZZLE_STRQ_ATI 0x897A - GL_SWIZZLE_STRQ_DQ_ATI 0x897B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer b/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer deleted file mode 100644 index 573afd273f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_map_object_buffer -http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt -GL_ATI_map_object_buffer - GLvoid * glMapObjectBufferATI (GLuint buffer) - void glUnmapObjectBufferATI (GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo b/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo deleted file mode 100644 index e8a4ee97cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_meminfo -http://www.opengl.org/registry/specs/gl/ATI/meminfo.txt -GL_ATI_meminfo - GL_VBO_FREE_MEMORY_ATI 0x87FB - GL_TEXTURE_FREE_MEMORY_ATI 0x87FC - GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles b/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles deleted file mode 100644 index a61e27a061..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles +++ /dev/null @@ -1,14 +0,0 @@ -GL_ATI_pn_triangles -http://www.opengl.org/registry/specs/ATI/pn_triangles.txt -GL_ATI_pn_triangles - GL_PN_TRIANGLES_ATI 0x87F0 - GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 - GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 - GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 - GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 - GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 - GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 - GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 - GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - void glPNTrianglesiATI (GLenum pname, GLint param) - void glPNTrianglesfATI (GLenum pname, GLfloat param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil b/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil deleted file mode 100644 index be55bb44f5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_separate_stencil -http://www.opengl.org/registry/specs/ATI/separate_stencil.txt -GL_ATI_separate_stencil - GL_STENCIL_BACK_FUNC_ATI 0x8800 - GL_STENCIL_BACK_FAIL_ATI 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod deleted file mode 100644 index 5fbc624a6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ATI_shader_texture_lod - -GL_ATI_shader_texture_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader deleted file mode 100644 index d12a66f0bf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_text_fragment_shader -http://www.opengl.org/registry/specs/gl/ATI/text_fragment_shader.txt -GL_ATI_text_fragment_shader - GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc deleted file mode 100644 index 2548b30ead..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_texture_compression_3dc - -GL_ATI_texture_compression_3dc - GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 deleted file mode 100644 index 8dfeecf7f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_texture_env_combine3 -http://www.opengl.org/registry/specs/gl/ATI/texture_env_combine3.txt -GL_ATI_texture_env_combine3 - GL_MODULATE_ADD_ATI 0x8744 - GL_MODULATE_SIGNED_ADD_ATI 0x8745 - GL_MODULATE_SUBTRACT_ATI 0x8746 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float deleted file mode 100644 index 9d935f5789..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_texture_float -http://www.opengl.org/registry/specs/gl/ATI/texture_float.txt -GL_ATI_texture_float - GL_RGBA_FLOAT32_ATI 0x8814 - GL_RGB_FLOAT32_ATI 0x8815 - GL_ALPHA_FLOAT32_ATI 0x8816 - GL_INTENSITY_FLOAT32_ATI 0x8817 - GL_LUMINANCE_FLOAT32_ATI 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 - GL_RGBA_FLOAT16_ATI 0x881A - GL_RGB_FLOAT16_ATI 0x881B - GL_ALPHA_FLOAT16_ATI 0x881C - GL_INTENSITY_FLOAT16_ATI 0x881D - GL_LUMINANCE_FLOAT16_ATI 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once deleted file mode 100644 index a3a9c273b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_texture_mirror_once -http://www.opengl.org/registry/specs/gl/ATI/texture_mirror_once.txt -GL_ATI_texture_mirror_once - GL_MIRROR_CLAMP_ATI 0x8742 - GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object deleted file mode 100644 index b6ea168ba1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object +++ /dev/null @@ -1,23 +0,0 @@ -GL_ATI_vertex_array_object -http://www.opengl.org/registry/specs/gl/ATI/vertex_array_object.txt -GL_ATI_vertex_array_object - GL_STATIC_ATI 0x8760 - GL_DYNAMIC_ATI 0x8761 - GL_PRESERVE_ATI 0x8762 - GL_DISCARD_ATI 0x8763 - GL_OBJECT_BUFFER_SIZE_ATI 0x8764 - GL_OBJECT_BUFFER_USAGE_ATI 0x8765 - GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 - GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 - void glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) - void glFreeObjectBufferATI (GLuint buffer) - void glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat* params) - void glGetArrayObjectivATI (GLenum array, GLenum pname, GLint* params) - void glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat* params) - void glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint* params) - void glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat* params) - void glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint* params) - GLboolean glIsObjectBufferATI (GLuint buffer) - GLuint glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage) - void glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve) - void glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object deleted file mode 100644 index b47304d979..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_vertex_attrib_array_object -http://www.opengl.org/registry/specs/gl/ATI/vertex_attrib_array_object.txt -GL_ATI_vertex_attrib_array_object - void glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint* params) - void glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams deleted file mode 100644 index 060f8446e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams +++ /dev/null @@ -1,58 +0,0 @@ -GL_ATI_vertex_streams -http://www.opengl.org/registry/specs/ATI/vertex_streams.txt -GL_ATI_vertex_streams - GL_MAX_VERTEX_STREAMS_ATI 0x876B - GL_VERTEX_SOURCE_ATI 0x876C - GL_VERTEX_STREAM0_ATI 0x876D - GL_VERTEX_STREAM1_ATI 0x876E - GL_VERTEX_STREAM2_ATI 0x876F - GL_VERTEX_STREAM3_ATI 0x8770 - GL_VERTEX_STREAM4_ATI 0x8771 - GL_VERTEX_STREAM5_ATI 0x8772 - GL_VERTEX_STREAM6_ATI 0x8773 - GL_VERTEX_STREAM7_ATI 0x8774 - void glClientActiveVertexStreamATI (GLenum stream) - void glVertexBlendEnviATI (GLenum pname, GLint param) - void glVertexBlendEnvfATI (GLenum pname, GLfloat param) - void glVertexStream1sATI (GLenum stream, GLshort x) - void glVertexStream1svATI (GLenum stream, const GLshort *coords) - void glVertexStream1iATI (GLenum stream, GLint x) - void glVertexStream1ivATI (GLenum stream, const GLint *coords) - void glVertexStream1fATI (GLenum stream, GLfloat x) - void glVertexStream1fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream1dATI (GLenum stream, GLdouble x) - void glVertexStream1dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y) - void glVertexStream2svATI (GLenum stream, const GLshort *coords) - void glVertexStream2iATI (GLenum stream, GLint x, GLint y) - void glVertexStream2ivATI (GLenum stream, const GLint *coords) - void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) - void glVertexStream2fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) - void glVertexStream2dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glVertexStream3svATI (GLenum stream, const GLshort *coords) - void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glVertexStream3ivATI (GLenum stream, const GLint *coords) - void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glVertexStream3fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glVertexStream3dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexStream4svATI (GLenum stream, const GLshort *coords) - void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) - void glVertexStream4ivATI (GLenum stream, const GLint *coords) - void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexStream4fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexStream4dvATI (GLenum stream, const GLdouble *coords) - void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z) - void glNormalStream3bvATI (GLenum stream, const GLbyte *coords) - void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glNormalStream3svATI (GLenum stream, const GLshort *coords) - void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glNormalStream3ivATI (GLenum stream, const GLint *coords) - void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glNormalStream3fvATI (GLenum stream, const GLfloat *coords) - void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glNormalStream3dvATI (GLenum stream, const GLdouble *coords) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels b/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels deleted file mode 100644 index 0eb2c856c2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_422_pixels -http://www.opengl.org/registry/specs/gl/EXT/422_pixels.txt -GL_EXT_422_pixels - GL_422_EXT 0x80CC - GL_422_REV_EXT 0x80CD - GL_422_AVERAGE_EXT 0x80CE - GL_422_REV_AVERAGE_EXT 0x80CF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader b/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader deleted file mode 100644 index 34d3152931..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_Cg_shader -http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf -GL_EXT_Cg_shader - GL_CG_VERTEX_SHADER_EXT 0x890E - GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr b/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr deleted file mode 100644 index 6de4d4d1aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_abgr -http://www.opengl.org/registry/specs/gl/EXT/abgr.txt -GL_EXT_abgr - GL_ABGR_EXT 0x8000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra b/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra deleted file mode 100644 index 8b95a71abf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_bgra -http://www.opengl.org/registry/specs/gl/EXT/bgra.txt -GL_EXT_bgra - GL_BGR_EXT 0x80E0 - GL_BGRA_EXT 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform b/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform deleted file mode 100644 index 809123b659..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_bindable_uniform -http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt -GL_EXT_bindable_uniform - GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 - GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 - GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 - GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED - GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - GL_UNIFORM_BUFFER_EXT 0x8DEE - void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer) - GLint glGetUniformBufferSizeEXT (GLuint program, GLint location) - GLintptr glGetUniformOffsetEXT (GLuint program, GLint location) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color deleted file mode 100644 index eb9c8409fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_blend_color -http://www.opengl.org/registry/specs/gl/EXT/blend_color.txt -GL_EXT_blend_color - GL_CONSTANT_COLOR_EXT 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 - GL_CONSTANT_ALPHA_EXT 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 - GL_BLEND_COLOR_EXT 0x8005 - void glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate deleted file mode 100644 index 198dd4cc4e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_blend_equation_separate -http://www.opengl.org/registry/specs/gl/EXT/blend_equation_separate.txt -GL_EXT_blend_equation_separate - GL_BLEND_EQUATION_RGB_EXT 0x8009 - GL_BLEND_EQUATION_ALPHA_EXT 0x883D - void glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate deleted file mode 100644 index 01939ba72b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_blend_func_separate -http://www.opengl.org/registry/specs/gl/EXT/blend_func_separate.txt -GL_EXT_blend_func_separate - GL_BLEND_DST_RGB_EXT 0x80C8 - GL_BLEND_SRC_RGB_EXT 0x80C9 - GL_BLEND_DST_ALPHA_EXT 0x80CA - GL_BLEND_SRC_ALPHA_EXT 0x80CB - void glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op deleted file mode 100644 index e67cefae00..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_blend_logic_op -http://www.opengl.org/registry/specs/gl/EXT/blend_logic_op.txt -GL_EXT_blend_logic_op diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax deleted file mode 100644 index af567c0942..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_blend_minmax -http://www.opengl.org/registry/specs/gl/EXT/blend_minmax.txt -GL_EXT_blend_minmax - GL_FUNC_ADD_EXT 0x8006 - GL_MIN_EXT 0x8007 - GL_MAX_EXT 0x8008 - GL_BLEND_EQUATION_EXT 0x8009 - void glBlendEquationEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract deleted file mode 100644 index 027e49e056..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_blend_subtract -http://www.opengl.org/registry/specs/gl/EXT/blend_subtract.txt -GL_EXT_blend_subtract - GL_FUNC_SUBTRACT_EXT 0x800A - GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint b/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint deleted file mode 100644 index 9de1cb6d6f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_clip_volume_hint -http://www.opengl.org/registry/specs/gl/EXT/clip_volume_hint.txt -GL_EXT_clip_volume_hint - GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka b/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka deleted file mode 100644 index 11c568db90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_cmyka -http://www.opengl.org/registry/specs/gl/EXT/cmyka.txt -GL_EXT_cmyka - GL_CMYK_EXT 0x800C - GL_CMYKA_EXT 0x800D - GL_PACK_CMYK_HINT_EXT 0x800E - GL_UNPACK_CMYK_HINT_EXT 0x800F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable b/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable deleted file mode 100644 index f50224367c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_color_subtable -http://www.opengl.org/registry/specs/gl/EXT/color_subtable.txt -GL_EXT_color_subtable - void glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array deleted file mode 100644 index cc6ae26dd6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_compiled_vertex_array -http://www.opengl.org/registry/specs/gl/EXT/compiled_vertex_array.txt -GL_EXT_compiled_vertex_array - GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 - GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 - void glLockArraysEXT (GLint first, GLsizei count) - void glUnlockArraysEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution b/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution deleted file mode 100644 index f2df4f084a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution +++ /dev/null @@ -1,36 +0,0 @@ -GL_EXT_convolution -http://www.opengl.org/registry/specs/gl/EXT/convolution.txt -GL_EXT_convolution - GL_CONVOLUTION_1D_EXT 0x8010 - GL_CONVOLUTION_2D_EXT 0x8011 - GL_SEPARABLE_2D_EXT 0x8012 - GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 - GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 - GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 - GL_REDUCE_EXT 0x8016 - GL_CONVOLUTION_FORMAT_EXT 0x8017 - GL_CONVOLUTION_WIDTH_EXT 0x8018 - GL_CONVOLUTION_HEIGHT_EXT 0x8019 - GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A - GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B - GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F - GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 - void glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat param) - void glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint param) - void glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint* params) - void glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame b/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame deleted file mode 100644 index fc87321507..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_coordinate_frame -http://www.opengl.org/registry/specs/gl/EXT/coordinate_frame.txt -GL_EXT_coordinate_frame - GL_TANGENT_ARRAY_EXT 0x8439 - GL_BINORMAL_ARRAY_EXT 0x843A - GL_CURRENT_TANGENT_EXT 0x843B - GL_CURRENT_BINORMAL_EXT 0x843C - GL_TANGENT_ARRAY_TYPE_EXT 0x843E - GL_TANGENT_ARRAY_STRIDE_EXT 0x843F - GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 - GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 - GL_TANGENT_ARRAY_POINTER_EXT 0x8442 - GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 - GL_MAP1_TANGENT_EXT 0x8444 - GL_MAP2_TANGENT_EXT 0x8445 - GL_MAP1_BINORMAL_EXT 0x8446 - GL_MAP2_BINORMAL_EXT 0x8447 - void glBinormalPointerEXT (GLenum type, GLsizei stride, GLvoid *pointer) - void glTangentPointerEXT (GLenum type, GLsizei stride, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture deleted file mode 100644 index 361407ed8b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_copy_texture -http://www.opengl.org/registry/specs/gl/EXT/copy_texture.txt -GL_EXT_copy_texture - void glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex b/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex deleted file mode 100644 index fb8120c7ff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_cull_vertex -http://www.opengl.org/registry/specs/gl/EXT/cull_vertex.txt -GL_EXT_cull_vertex - GL_CULL_VERTEX_EXT 0x81AA - GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB - GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC - void glCullParameterdvEXT (GLenum pname, GLdouble* params) - void glCullParameterfvEXT (GLenum pname, GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker b/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker deleted file mode 100644 index 9d0628c8fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_debug_marker -http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt -GL_EXT_debug_marker - void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) - void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) - void glPopGroupMarkerEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test b/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test deleted file mode 100644 index 62528b7b0c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_depth_bounds_test -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt -GL_EXT_depth_bounds_test - GL_DEPTH_BOUNDS_TEST_EXT 0x8890 - GL_DEPTH_BOUNDS_EXT 0x8891 - void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access b/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access deleted file mode 100644 index 851209e7e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access +++ /dev/null @@ -1,219 +0,0 @@ -GL_EXT_direct_state_access -http://www.opengl.org/registry/specs/gl/EXT/direct_state_access.txt -GL_EXT_direct_state_access - GL_PROGRAM_MATRIX_EXT 0x8E2D - GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E - GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F - void glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture) - GLenum glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target) - void glClientAttribDefaultEXT (GLbitfield mask) - void glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glDisableClientStateIndexedEXT (GLenum array, GLuint index) - void glDisableClientStateiEXT (GLenum array, GLuint index) - void glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index) - void glDisableVertexArrayEXT (GLuint vaobj, GLenum array) - void glEnableClientStateIndexedEXT (GLenum array, GLuint index) - void glEnableClientStateiEXT (GLenum array, GLuint index) - void glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index) - void glEnableVertexArrayEXT (GLuint vaobj, GLenum array) - void glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length) - void glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode) - void glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum* bufs) - void glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode) - void glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target) - void glGenerateTextureMipmapEXT (GLuint texture, GLenum target) - void glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLvoid *img) - void glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint level, GLvoid *img) - void glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble* params) - void glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble* params) - void glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat* params) - void glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat* params) - void glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint* param) - void glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params) - void glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params) - void glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params) - void glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint* params) - void glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) - void glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params) - void glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params) - void glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint* params) - void glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params) - void glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint* params) - void glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void** params) - void glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data) - void glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params) - void glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint* params) - void glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint* params) - void glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble* params) - void glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat* params) - void glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string) - void glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint* params) - void glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint* params) - void glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid** params) - void glGetPointeri_vEXT (GLenum pname, GLuint index, GLvoid** params) - void glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) - void glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params) - void glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params) - void glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params) - void glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint* params) - void glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat* params) - void glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params) - void glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint* param) - void glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint* param) - void glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLvoid** param) - void glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, GLvoid** param) - GLvoid * glMapNamedBufferEXT (GLuint buffer, GLenum access) - GLvoid * glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access) - void glMatrixFrustumEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f) - void glMatrixLoadIdentityEXT (GLenum matrixMode) - void glMatrixLoadTransposedEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixLoadTransposefEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixLoaddEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixLoadfEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixMultTransposedEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixMultTransposefEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixMultdEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixMultfEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixOrthoEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f) - void glMatrixPopEXT (GLenum matrixMode) - void glMatrixPushEXT (GLenum matrixMode) - void glMatrixRotatedEXT (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) - void glMatrixRotatefEXT (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) - void glMatrixScaledEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z) - void glMatrixScalefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z) - void glMatrixTranslatedEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z) - void glMatrixTranslatefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z) - void glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer) - void glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param) - void glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params) - void glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param) - void glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params) - void glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param) - void glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params) - void glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param) - void glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params) - void glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param) - void glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint* params) - void glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params) - void glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint* params) - void glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param) - void glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param) - void glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param) - void glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* param) - void glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer) - void glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - void glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage) - void glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data) - void glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) - void glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) - void glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) - void glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) - void glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) - void glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble* params) - void glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat* params) - void glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint* params) - void glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint* params) - void glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params) - void glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params) - void glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string) - void glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) - void glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) - void glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) - void glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0) - void glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1iEXT (GLuint program, GLint location, GLint v0) - void glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0) - void glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1) - void glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1) - void glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1) - void glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2) - void glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) - void glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glPushClientAttribDefaultEXT (GLbitfield mask) - void glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer) - void glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* params) - void glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint* params) - void glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param) - void glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat* param) - void glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param) - void glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* param) - void glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer) - void glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - GLboolean glUnmapNamedBufferEXT (GLuint buffer) - void glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset) - void glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset) - void glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 deleted file mode 100644 index e075b7f46d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_draw_buffers2 -http://www.opengl.org/registry/specs/gl/EXT/draw_buffers2.txt -GL_EXT_draw_buffers2 - void glColorMaskIndexedEXT (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a) - void glDisableIndexedEXT (GLenum target, GLuint index) - void glEnableIndexedEXT (GLenum target, GLuint index) - void glGetBooleanIndexedvEXT (GLenum value, GLuint index, GLboolean* data) - void glGetIntegerIndexedvEXT (GLenum value, GLuint index, GLint* data) - GLboolean glIsEnabledIndexedEXT (GLenum target, GLuint index) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced deleted file mode 100644 index afafa27f3e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_draw_instanced -http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt -GL_EXT_draw_instanced - void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements deleted file mode 100644 index 347ce62eb2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_draw_range_elements -http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt -GL_EXT_draw_range_elements - GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 - GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord b/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord deleted file mode 100644 index ac7868aa32..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord +++ /dev/null @@ -1,16 +0,0 @@ -GL_EXT_fog_coord -http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt -GL_EXT_fog_coord - GL_FOG_COORDINATE_SOURCE_EXT 0x8450 - GL_FOG_COORDINATE_EXT 0x8451 - GL_FRAGMENT_DEPTH_EXT 0x8452 - GL_CURRENT_FOG_COORDINATE_EXT 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 - GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - void glFogCoordfEXT (GLfloat coord) - void glFogCoordfvEXT (const GLfloat *coord) - void glFogCoorddEXT (GLdouble coord) - void glFogCoorddvEXT (const GLdouble *coord) - void glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting b/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting deleted file mode 100644 index 1f93aac96c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting +++ /dev/null @@ -1,35 +0,0 @@ -GL_EXT_fragment_lighting -http://www.opengl.org/registry/specs/gl/EXT/fragment_lighting.txt -GL_EXT_fragment_lighting - GL_FRAGMENT_LIGHTING_EXT 0x8400 - GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 - GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 - GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 - GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 - GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 - GL_CURRENT_RASTER_NORMAL_EXT 0x8406 - GL_LIGHT_ENV_MODE_EXT 0x8407 - GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 - GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 - GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A - GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B - GL_FRAGMENT_LIGHT0_EXT 0x840C - GL_FRAGMENT_LIGHT7_EXT 0x8413 - void glFragmentColorMaterialEXT (GLenum face, GLenum mode) - void glFragmentLightModelfEXT (GLenum pname, GLfloat param) - void glFragmentLightModelfvEXT (GLenum pname, GLfloat* params) - void glFragmentLightModeliEXT (GLenum pname, GLint param) - void glFragmentLightModelivEXT (GLenum pname, GLint* params) - void glFragmentLightfEXT (GLenum light, GLenum pname, GLfloat param) - void glFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params) - void glFragmentLightiEXT (GLenum light, GLenum pname, GLint param) - void glFragmentLightivEXT (GLenum light, GLenum pname, GLint* params) - void glFragmentMaterialfEXT (GLenum face, GLenum pname, const GLfloat param) - void glFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params) - void glFragmentMaterialiEXT (GLenum face, GLenum pname, const GLint param) - void glFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params) - void glGetFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params) - void glGetFragmentLightivEXT (GLenum light, GLenum pname, GLint* params) - void glGetFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params) - void glGetFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params) - void glLightEnviEXT (GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit deleted file mode 100644 index e2be219a3b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_framebuffer_blit -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_blit.txt -GL_EXT_framebuffer_blit - GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 - GL_READ_FRAMEBUFFER_EXT 0x8CA8 - GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA - void glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample deleted file mode 100644 index 4f96470453..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_framebuffer_multisample -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_multisample.txt -GL_EXT_framebuffer_multisample - GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 - GL_MAX_SAMPLES_EXT 0x8D57 - void glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 - GL_MAX_SAMPLES_EXT 0x8D57 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled deleted file mode 100644 index dc133c2a07..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_multisample_blit_scaled -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_multisample_blit_scaled.txt -GL_EXT_framebuffer_multisample_blit_scaled - GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA - GL_SCALED_RESOLVE_NICEST_EXT 0x90BB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object deleted file mode 100644 index bb3d5b23b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object +++ /dev/null @@ -1,71 +0,0 @@ -GL_EXT_framebuffer_object -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_object.txt -GL_EXT_framebuffer_object - GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 - GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 - GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 - GL_RENDERBUFFER_BINDING_EXT 0x8CA7 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 - GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 - GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC - GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD - GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF - GL_COLOR_ATTACHMENT0_EXT 0x8CE0 - GL_COLOR_ATTACHMENT1_EXT 0x8CE1 - GL_COLOR_ATTACHMENT2_EXT 0x8CE2 - GL_COLOR_ATTACHMENT3_EXT 0x8CE3 - GL_COLOR_ATTACHMENT4_EXT 0x8CE4 - GL_COLOR_ATTACHMENT5_EXT 0x8CE5 - GL_COLOR_ATTACHMENT6_EXT 0x8CE6 - GL_COLOR_ATTACHMENT7_EXT 0x8CE7 - GL_COLOR_ATTACHMENT8_EXT 0x8CE8 - GL_COLOR_ATTACHMENT9_EXT 0x8CE9 - GL_COLOR_ATTACHMENT10_EXT 0x8CEA - GL_COLOR_ATTACHMENT11_EXT 0x8CEB - GL_COLOR_ATTACHMENT12_EXT 0x8CEC - GL_COLOR_ATTACHMENT13_EXT 0x8CED - GL_COLOR_ATTACHMENT14_EXT 0x8CEE - GL_COLOR_ATTACHMENT15_EXT 0x8CEF - GL_DEPTH_ATTACHMENT_EXT 0x8D00 - GL_STENCIL_ATTACHMENT_EXT 0x8D20 - GL_FRAMEBUFFER_EXT 0x8D40 - GL_RENDERBUFFER_EXT 0x8D41 - GL_RENDERBUFFER_WIDTH_EXT 0x8D42 - GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 - GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 - GL_STENCIL_INDEX1_EXT 0x8D46 - GL_STENCIL_INDEX4_EXT 0x8D47 - GL_STENCIL_INDEX8_EXT 0x8D48 - GL_STENCIL_INDEX16_EXT 0x8D49 - GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 - GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 - GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 - GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 - GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 - GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 - void glBindFramebufferEXT (GLenum target, GLuint framebuffer) - void glBindRenderbufferEXT (GLenum target, GLuint renderbuffer) - GLenum glCheckFramebufferStatusEXT (GLenum target) - void glDeleteFramebuffersEXT (GLsizei n, const GLuint* framebuffers) - void glDeleteRenderbuffersEXT (GLsizei n, const GLuint* renderbuffers) - void glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) - void glGenFramebuffersEXT (GLsizei n, GLuint* framebuffers) - void glGenRenderbuffersEXT (GLsizei n, GLuint* renderbuffers) - void glGenerateMipmapEXT (GLenum target) - void glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint* params) - void glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint* params) - GLboolean glIsFramebufferEXT (GLuint framebuffer) - GLboolean glIsRenderbufferEXT (GLuint renderbuffer) - void glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB deleted file mode 100644 index 4ca897b1fd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GL_EXT_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 - GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 deleted file mode 100644 index f6f6785988..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt -GL_EXT_geometry_shader4 - GL_GEOMETRY_SHADER_EXT 0x8DD9 - GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE - GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA - GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 - GL_LINES_ADJACENCY_EXT 0xA - GL_LINE_STRIP_ADJACENCY_EXT 0xB - GL_TRIANGLES_ADJACENCY_EXT 0xC - GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 - GL_PROGRAM_POINT_SIZE_EXT 0x8642 - void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value) - void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters b/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters deleted file mode 100644 index 9048c98d96..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_gpu_program_parameters -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt -GL_EXT_gpu_program_parameters - void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 deleted file mode 100644 index 0e89f0db06..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 +++ /dev/null @@ -1,63 +0,0 @@ -GL_EXT_gpu_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt -GL_EXT_gpu_shader4 - GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 - GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 - GL_SAMPLER_BUFFER_EXT 0x8DC2 - GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 - GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 - GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 - GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 - GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 - GL_INT_SAMPLER_1D_EXT 0x8DC9 - GL_INT_SAMPLER_2D_EXT 0x8DCA - GL_INT_SAMPLER_3D_EXT 0x8DCB - GL_INT_SAMPLER_CUBE_EXT 0x8DCC - GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD - GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE - GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF - GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 - GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD - void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params) - void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name) - GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name) - void glUniform1uiEXT (GLint location, GLuint v0) - void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1) - void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2) - void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value) - void glVertexAttribI1iEXT (GLuint index, GLint x) - void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y) - void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z) - void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w) - void glVertexAttribI1uiEXT (GLuint index, GLuint x) - void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y) - void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z) - void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glVertexAttribI1ivEXT (GLuint index, const GLint *v) - void glVertexAttribI2ivEXT (GLuint index, const GLint *v) - void glVertexAttribI3ivEXT (GLuint index, const GLint *v) - void glVertexAttribI4ivEXT (GLuint index, const GLint *v) - void glVertexAttribI1uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI2uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI3uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v) - void glVertexAttribI4svEXT (GLuint index, const GLshort *v) - void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v) - void glVertexAttribI4usvEXT (GLuint index, const GLushort *v) - void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params) - void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram b/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram deleted file mode 100644 index 4392ca63cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_histogram -http://www.opengl.org/registry/specs/gl/EXT/histogram.txt -GL_EXT_histogram - GL_HISTOGRAM_EXT 0x8024 - GL_PROXY_HISTOGRAM_EXT 0x8025 - GL_HISTOGRAM_WIDTH_EXT 0x8026 - GL_HISTOGRAM_FORMAT_EXT 0x8027 - GL_HISTOGRAM_RED_SIZE_EXT 0x8028 - GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 - GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A - GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C - GL_HISTOGRAM_SINK_EXT 0x802D - GL_MINMAX_EXT 0x802E - GL_MINMAX_FORMAT_EXT 0x802F - GL_MINMAX_SINK_EXT 0x8030 - void glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink) - void glResetHistogramEXT (GLenum target) - void glResetMinmaxEXT (GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats deleted file mode 100644 index 1fdd3d9e86..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_index_array_formats -http://www.opengl.org/registry/specs/gl/EXT/index_array_formats.txt -GL_EXT_index_array_formats diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func deleted file mode 100644 index 7802afff10..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_index_func -http://www.opengl.org/registry/specs/gl/EXT/index_func.txt -GL_EXT_index_func - void glIndexFuncEXT (GLenum func, GLfloat ref) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material deleted file mode 100644 index 96012baf45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_index_material -http://www.opengl.org/registry/specs/gl/EXT/index_material.txt -GL_EXT_index_material - void glIndexMaterialEXT (GLenum face, GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture deleted file mode 100644 index dbd9e319ec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_index_texture -http://www.opengl.org/registry/specs/gl/EXT/index_texture.txt -GL_EXT_index_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture deleted file mode 100644 index bdfd545b3a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_light_texture -http://www.opengl.org/registry/specs/gl/EXT/light_texture.txt -GL_EXT_light_texture - GL_FRAGMENT_MATERIAL_EXT 0x8349 - GL_FRAGMENT_NORMAL_EXT 0x834A - GL_FRAGMENT_COLOR_EXT 0x834C - GL_ATTENUATION_EXT 0x834D - GL_SHADOW_ATTENUATION_EXT 0x834E - GL_TEXTURE_APPLICATION_MODE_EXT 0x834F - GL_TEXTURE_LIGHT_EXT 0x8350 - GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 - GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 - void glApplyTextureEXT (GLenum mode) - void glTextureLightEXT (GLenum pname) - void glTextureMaterialEXT (GLenum face, GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute b/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute deleted file mode 100644 index 72504f6770..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_misc_attribute -http://www.opengl.org/registry/specs/gl/EXT/misc_attribute.txt -GL_EXT_misc_attribute diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays b/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays deleted file mode 100644 index b9c81edfd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_multi_draw_arrays -http://www.opengl.org/registry/specs/gl/EXT/multi_draw_arrays.txt -GL_EXT_multi_draw_arrays - void glMultiDrawArraysEXT (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount) - void glMultiDrawElementsEXT (GLenum mode, GLsizei* count, GLenum type, const GLvoid * const *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample b/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample deleted file mode 100644 index 099f73502f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample +++ /dev/null @@ -1,22 +0,0 @@ -GL_EXT_multisample -http://www.opengl.org/registry/specs/gl/EXT/wgl_multisample.txt -GL_EXT_multisample - GL_MULTISAMPLE_EXT 0x809D - GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E - GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F - GL_SAMPLE_MASK_EXT 0x80A0 - GL_1PASS_EXT 0x80A1 - GL_2PASS_0_EXT 0x80A2 - GL_2PASS_1_EXT 0x80A3 - GL_4PASS_0_EXT 0x80A4 - GL_4PASS_1_EXT 0x80A5 - GL_4PASS_2_EXT 0x80A6 - GL_4PASS_3_EXT 0x80A7 - GL_SAMPLE_BUFFERS_EXT 0x80A8 - GL_SAMPLES_EXT 0x80A9 - GL_SAMPLE_MASK_VALUE_EXT 0x80AA - GL_SAMPLE_MASK_INVERT_EXT 0x80AB - GL_SAMPLE_PATTERN_EXT 0x80AC - GL_MULTISAMPLE_BIT_EXT 0x20000000 - void glSampleMaskEXT (GLclampf value, GLboolean invert) - void glSamplePatternEXT (GLenum pattern) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil deleted file mode 100644 index 7dbc43dd02..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_packed_depth_stencil -http://www.opengl.org/registry/specs/gl/EXT/packed_depth_stencil.txt -GL_EXT_packed_depth_stencil - GL_DEPTH_STENCIL_EXT 0x84F9 - GL_UNSIGNED_INT_24_8_EXT 0x84FA - GL_DEPTH24_STENCIL8_EXT 0x88F0 - GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float deleted file mode 100644 index bcb22557d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GL_EXT_packed_float - GL_R11F_G11F_B10F_EXT 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B - GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels deleted file mode 100644 index 85fc9df882..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_packed_pixels -http://www.opengl.org/registry/specs/gl/EXT/packed_pixels.txt -GL_EXT_packed_pixels - GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 - GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 - GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 - GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 - GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture deleted file mode 100644 index f4e1a9e9d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture +++ /dev/null @@ -1,28 +0,0 @@ -GL_EXT_paletted_texture -http://www.opengl.org/registry/specs/gl/EXT/paletted_texture.txt -GL_EXT_paletted_texture - GL_TEXTURE_1D 0x0DE0 - GL_TEXTURE_2D 0x0DE1 - GL_PROXY_TEXTURE_1D 0x8063 - GL_PROXY_TEXTURE_2D 0x8064 - GL_COLOR_TABLE_FORMAT_EXT 0x80D8 - GL_COLOR_TABLE_WIDTH_EXT 0x80D9 - GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA - GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB - GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF - GL_COLOR_INDEX1_EXT 0x80E2 - GL_COLOR_INDEX2_EXT 0x80E3 - GL_COLOR_INDEX4_EXT 0x80E4 - GL_COLOR_INDEX8_EXT 0x80E5 - GL_COLOR_INDEX12_EXT 0x80E6 - GL_COLOR_INDEX16_EXT 0x80E7 - GL_TEXTURE_INDEX_SIZE_EXT 0x80ED - GL_TEXTURE_CUBE_MAP_ARB 0x8513 - GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - void glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data) - void glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data) - void glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object deleted file mode 100644 index a7f8f2c80e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_pixel_buffer_object -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt -GL_EXT_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_EXT 0x88EB - GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform deleted file mode 100644 index 20eef6f2a7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform +++ /dev/null @@ -1,18 +0,0 @@ -GL_EXT_pixel_transform -http://www.opengl.org/registry/specs/gl/EXT/pixel_transform.txt -GL_EXT_pixel_transform - GL_PIXEL_TRANSFORM_2D_EXT 0x8330 - GL_PIXEL_MAG_FILTER_EXT 0x8331 - GL_PIXEL_MIN_FILTER_EXT 0x8332 - GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 - GL_CUBIC_EXT 0x8334 - GL_AVERAGE_EXT 0x8335 - GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 - GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 - GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 - void glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params) - void glPixelTransformParameterfEXT (GLenum target, GLenum pname, const GLfloat param) - void glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glPixelTransformParameteriEXT (GLenum target, GLenum pname, const GLint param) - void glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table deleted file mode 100644 index 5488505da8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_pixel_transform_color_table -http://www.opengl.org/registry/specs/gl/EXT/pixel_transform_color_table.txt -GL_EXT_pixel_transform_color_table diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters b/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters deleted file mode 100644 index 94679c107b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_point_parameters -http://www.opengl.org/registry/specs/gl/EXT/point_parameters.txt -GL_EXT_point_parameters - GL_POINT_SIZE_MIN_EXT 0x8126 - GL_POINT_SIZE_MAX_EXT 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 - GL_DISTANCE_ATTENUATION_EXT 0x8129 - void glPointParameterfEXT (GLenum pname, GLfloat param) - void glPointParameterfvEXT (GLenum pname, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset b/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset deleted file mode 100644 index bf7c1960d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_polygon_offset -http://www.opengl.org/registry/specs/gl/EXT/polygon_offset.txt -GL_EXT_polygon_offset - GL_POLYGON_OFFSET_EXT 0x8037 - GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 - GL_POLYGON_OFFSET_BIAS_EXT 0x8039 - void glPolygonOffsetEXT (GLfloat factor, GLfloat bias) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex b/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex deleted file mode 100644 index 67190742d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_provoking_vertex -http://www.opengl.org/registry/specs/gl/EXT/provoking_vertex.txt -GL_EXT_provoking_vertex - GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C - GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D - GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E - GL_PROVOKING_VERTEX_EXT 0x8E4F - void glProvokingVertexEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal b/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal deleted file mode 100644 index 5d2fb22404..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_rescale_normal -http://www.opengl.org/registry/specs/gl/EXT/rescale_normal.txt -GL_EXT_rescale_normal - GL_RESCALE_NORMAL_EXT 0x803A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker b/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker deleted file mode 100644 index 16d8688929..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_scene_marker -http://www.opengl.org/registry/specs/gl/EXT/scene_marker.txt -GL_EXT_scene_marker - void glBeginSceneEXT (void) - void glEndSceneEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color deleted file mode 100644 index e915455003..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color +++ /dev/null @@ -1,27 +0,0 @@ -GL_EXT_secondary_color -http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt -GL_EXT_secondary_color - GL_COLOR_SUM_EXT 0x8458 - GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D - GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bvEXT (const GLbyte *v) - void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dvEXT (const GLdouble *v) - void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fvEXT (const GLfloat *v) - void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue) - void glSecondaryColor3ivEXT (const GLint *v) - void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3svEXT (const GLshort *v) - void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubvEXT (const GLubyte *v) - void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uivEXT (const GLuint *v) - void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usvEXT (const GLushort *v) - void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects deleted file mode 100644 index 3a5b982eec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_separate_shader_objects -http://www.opengl.org/registry/specs/gl/EXT/separate_shader_objects.txt -GL_EXT_separate_shader_objects - GL_ACTIVE_PROGRAM_EXT 0x8B8D - void glActiveProgramEXT (GLuint program) - GLuint glCreateShaderProgramEXT (GLenum type, const GLchar* string) - void glUseShaderProgramEXT (GLenum type, GLuint program) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color deleted file mode 100644 index 93d212eb0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_separate_specular_color -http://www.opengl.org/registry/specs/gl/EXT/separate_specular_color.txt -GL_EXT_separate_specular_color - GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 - GL_SINGLE_COLOR_EXT 0x81F9 - GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store deleted file mode 100644 index 701874db36..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store +++ /dev/null @@ -1,60 +0,0 @@ -GL_EXT_shader_image_load_store -http://www.opengl.org/registry/specs/gl/EXT/shader_image_load_store.txt -GL_EXT_shader_image_load_store - GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 - GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 - GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 - GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 - GL_COMMAND_BARRIER_BIT_EXT 0x00000040 - GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 - GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 - GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 - GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 - GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 - GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 - GL_MAX_IMAGE_UNITS_EXT 0x8F38 - GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 - GL_IMAGE_BINDING_NAME_EXT 0x8F3A - GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B - GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C - GL_IMAGE_BINDING_LAYER_EXT 0x8F3D - GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E - GL_IMAGE_1D_EXT 0x904C - GL_IMAGE_2D_EXT 0x904D - GL_IMAGE_3D_EXT 0x904E - GL_IMAGE_2D_RECT_EXT 0x904F - GL_IMAGE_CUBE_EXT 0x9050 - GL_IMAGE_BUFFER_EXT 0x9051 - GL_IMAGE_1D_ARRAY_EXT 0x9052 - GL_IMAGE_2D_ARRAY_EXT 0x9053 - GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 - GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 - GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 - GL_INT_IMAGE_1D_EXT 0x9057 - GL_INT_IMAGE_2D_EXT 0x9058 - GL_INT_IMAGE_3D_EXT 0x9059 - GL_INT_IMAGE_2D_RECT_EXT 0x905A - GL_INT_IMAGE_CUBE_EXT 0x905B - GL_INT_IMAGE_BUFFER_EXT 0x905C - GL_INT_IMAGE_1D_ARRAY_EXT 0x905D - GL_INT_IMAGE_2D_ARRAY_EXT 0x905E - GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F - GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 - GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 - GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 - GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 - GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 - GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 - GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 - GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 - GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 - GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 - GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C - GL_MAX_IMAGE_SAMPLES_EXT 0x906D - GL_IMAGE_BINDING_FORMAT_EXT 0x906E - GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF - void glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format) - void glMemoryBarrierEXT (GLbitfield barriers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs deleted file mode 100644 index 2d9ff5c684..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_shadow_funcs -http://www.opengl.org/registry/specs/gl/EXT/shadow_funcs.txt -GL_EXT_shadow_funcs diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette deleted file mode 100644 index 2f03293a62..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_shared_texture_palette -http://www.opengl.org/registry/specs/gl/EXT/shared_texture_palette.txt -GL_EXT_shared_texture_palette - GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag deleted file mode 100644 index 7fe0f86da0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_stencil_clear_tag -http://www.opengl.org/registry/specs/gl/EXT/stencil_clear_tag.txt -GL_EXT_stencil_clear_tag - GL_STENCIL_TAG_BITS_EXT 0x88F2 - GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side deleted file mode 100644 index fdd1017010..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_stencil_two_side -http://www.opengl.org/registry/specs/gl/EXT/stencil_two_side.txt -GL_EXT_stencil_two_side - GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 - GL_ACTIVE_STENCIL_FACE_EXT 0x8911 - void glActiveStencilFaceEXT (GLenum face) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap deleted file mode 100644 index 9fdf4313bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_stencil_wrap -http://www.opengl.org/registry/specs/gl/EXT/stencil_wrap.txt -GL_EXT_stencil_wrap - GL_INCR_WRAP_EXT 0x8507 - GL_DECR_WRAP_EXT 0x8508 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture deleted file mode 100644 index 39c8c704a6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_subtexture -http://www.opengl.org/registry/specs/gl/EXT/subtexture.txt -GL_EXT_subtexture - void glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture deleted file mode 100644 index 7087c88024..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture +++ /dev/null @@ -1,45 +0,0 @@ -GL_EXT_texture -http://www.opengl.org/registry/specs/gl/EXT/texture.txt -GL_EXT_texture - GL_ALPHA4_EXT 0x803B - GL_ALPHA8_EXT 0x803C - GL_ALPHA12_EXT 0x803D - GL_ALPHA16_EXT 0x803E - GL_LUMINANCE4_EXT 0x803F - GL_LUMINANCE8_EXT 0x8040 - GL_LUMINANCE12_EXT 0x8041 - GL_LUMINANCE16_EXT 0x8042 - GL_LUMINANCE4_ALPHA4_EXT 0x8043 - GL_LUMINANCE6_ALPHA2_EXT 0x8044 - GL_LUMINANCE8_ALPHA8_EXT 0x8045 - GL_LUMINANCE12_ALPHA4_EXT 0x8046 - GL_LUMINANCE12_ALPHA12_EXT 0x8047 - GL_LUMINANCE16_ALPHA16_EXT 0x8048 - GL_INTENSITY_EXT 0x8049 - GL_INTENSITY4_EXT 0x804A - GL_INTENSITY8_EXT 0x804B - GL_INTENSITY12_EXT 0x804C - GL_INTENSITY16_EXT 0x804D - GL_RGB2_EXT 0x804E - GL_RGB4_EXT 0x804F - GL_RGB5_EXT 0x8050 - GL_RGB8_EXT 0x8051 - GL_RGB10_EXT 0x8052 - GL_RGB12_EXT 0x8053 - GL_RGB16_EXT 0x8054 - GL_RGBA2_EXT 0x8055 - GL_RGBA4_EXT 0x8056 - GL_RGB5_A1_EXT 0x8057 - GL_RGBA8_EXT 0x8058 - GL_RGB10_A2_EXT 0x8059 - GL_RGBA12_EXT 0x805A - GL_RGBA16_EXT 0x805B - GL_TEXTURE_RED_SIZE_EXT 0x805C - GL_TEXTURE_GREEN_SIZE_EXT 0x805D - GL_TEXTURE_BLUE_SIZE_EXT 0x805E - GL_TEXTURE_ALPHA_SIZE_EXT 0x805F - GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 - GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 - GL_REPLACE_EXT 0x8062 - GL_PROXY_TEXTURE_1D_EXT 0x8063 - GL_PROXY_TEXTURE_2D_EXT 0x8064 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D deleted file mode 100644 index 86a272b5c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D +++ /dev/null @@ -1,13 +0,0 @@ -GL_EXT_texture3D -http://www.opengl.org/registry/specs/gl/EXT/texture3D.txt -GL_EXT_texture3D - GL_PACK_SKIP_IMAGES_EXT 0x806B - GL_PACK_IMAGE_HEIGHT_EXT 0x806C - GL_UNPACK_SKIP_IMAGES_EXT 0x806D - GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E - GL_TEXTURE_3D_EXT 0x806F - GL_PROXY_TEXTURE_3D_EXT 0x8070 - GL_TEXTURE_DEPTH_EXT 0x8071 - GL_TEXTURE_WRAP_R_EXT 0x8072 - GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 - void glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array deleted file mode 100644 index 11877f0e56..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_texture_array -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt -GL_EXT_texture_array - GL_TEXTURE_1D_ARRAY_EXT 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 - GL_TEXTURE_2D_ARRAY_EXT 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF - GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E - void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object deleted file mode 100644 index c00e1f3367..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_texture_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt -GL_EXT_texture_buffer_object - GL_TEXTURE_BUFFER_EXT 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B - GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 deleted file mode 100644 index 84608288ef..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_compression_dxt1 -http://www.opengl.org/registry/specs/gl/EXT/texture_compression_dxt1.txt -GL_EXT_texture_compression_dxt1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc deleted file mode 100644 index ddf8d26449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_latc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt -GL_EXT_texture_compression_latc - GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 - GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 - GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 - GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc deleted file mode 100644 index 7c5c57ff83..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_rgtc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt -GL_EXT_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC - GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD - GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc deleted file mode 100644 index fb9aa97413..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_s3tc -http://www.opengl.org/registry/specs/gl/EXT/texture_compression_s3tc.txt -GL_EXT_texture_compression_s3tc - GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map deleted file mode 100644 index 5909f4803c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_texture_cube_map -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt -GL_EXT_texture_cube_map - GL_NORMAL_MAP_EXT 0x8511 - GL_REFLECTION_MAP_EXT 0x8512 - GL_TEXTURE_CUBE_MAP_EXT 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp deleted file mode 100644 index 4df0997d74..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_texture_edge_clamp -http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt -GL_EXT_texture_edge_clamp - GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env deleted file mode 100644 index 86601de348..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_env -http://www.opengl.org/registry/specs/gl/EXT/texture_env.txt -GL_EXT_texture_env diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add deleted file mode 100644 index b93523f967..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_env_add -http://www.opengl.org/registry/specs/gl/EXT/texture_env_add.txt -GL_EXT_texture_env_add diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine deleted file mode 100644 index cc917f5103..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine +++ /dev/null @@ -1,24 +0,0 @@ -GL_EXT_texture_env_combine -http://www.opengl.org/registry/specs/gl/EXT/texture_env_combine.txt -GL_EXT_texture_env_combine - GL_COMBINE_EXT 0x8570 - GL_COMBINE_RGB_EXT 0x8571 - GL_COMBINE_ALPHA_EXT 0x8572 - GL_RGB_SCALE_EXT 0x8573 - GL_ADD_SIGNED_EXT 0x8574 - GL_INTERPOLATE_EXT 0x8575 - GL_CONSTANT_EXT 0x8576 - GL_PRIMARY_COLOR_EXT 0x8577 - GL_PREVIOUS_EXT 0x8578 - GL_SOURCE0_RGB_EXT 0x8580 - GL_SOURCE1_RGB_EXT 0x8581 - GL_SOURCE2_RGB_EXT 0x8582 - GL_SOURCE0_ALPHA_EXT 0x8588 - GL_SOURCE1_ALPHA_EXT 0x8589 - GL_SOURCE2_ALPHA_EXT 0x858A - GL_OPERAND0_RGB_EXT 0x8590 - GL_OPERAND1_RGB_EXT 0x8591 - GL_OPERAND2_RGB_EXT 0x8592 - GL_OPERAND0_ALPHA_EXT 0x8598 - GL_OPERAND1_ALPHA_EXT 0x8599 - GL_OPERAND2_ALPHA_EXT 0x859A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 deleted file mode 100644 index f21c7fd3bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_texture_env_dot3 -http://www.opengl.org/registry/specs/gl/EXT/texture_env_dot3.txt -GL_EXT_texture_env_dot3 - GL_DOT3_RGB_EXT 0x8740 - GL_DOT3_RGBA_EXT 0x8741 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic deleted file mode 100644 index 8091701cb8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_texture_filter_anisotropic -http://www.opengl.org/registry/specs/gl/EXT/texture_filter_anisotropic.txt -GL_EXT_texture_filter_anisotropic - GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE - GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer deleted file mode 100644 index 1c57e40d87..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer +++ /dev/null @@ -1,56 +0,0 @@ -GL_EXT_texture_integer -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt -GL_EXT_texture_integer - GL_RGBA32UI_EXT 0x8D70 - GL_RGB32UI_EXT 0x8D71 - GL_ALPHA32UI_EXT 0x8D72 - GL_INTENSITY32UI_EXT 0x8D73 - GL_LUMINANCE32UI_EXT 0x8D74 - GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 - GL_RGBA16UI_EXT 0x8D76 - GL_RGB16UI_EXT 0x8D77 - GL_ALPHA16UI_EXT 0x8D78 - GL_INTENSITY16UI_EXT 0x8D79 - GL_LUMINANCE16UI_EXT 0x8D7A - GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B - GL_RGBA8UI_EXT 0x8D7C - GL_RGB8UI_EXT 0x8D7D - GL_ALPHA8UI_EXT 0x8D7E - GL_INTENSITY8UI_EXT 0x8D7F - GL_LUMINANCE8UI_EXT 0x8D80 - GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 - GL_RGBA32I_EXT 0x8D82 - GL_RGB32I_EXT 0x8D83 - GL_ALPHA32I_EXT 0x8D84 - GL_INTENSITY32I_EXT 0x8D85 - GL_LUMINANCE32I_EXT 0x8D86 - GL_LUMINANCE_ALPHA32I_EXT 0x8D87 - GL_RGBA16I_EXT 0x8D88 - GL_RGB16I_EXT 0x8D89 - GL_ALPHA16I_EXT 0x8D8A - GL_INTENSITY16I_EXT 0x8D8B - GL_LUMINANCE16I_EXT 0x8D8C - GL_LUMINANCE_ALPHA16I_EXT 0x8D8D - GL_RGBA8I_EXT 0x8D8E - GL_RGB8I_EXT 0x8D8F - GL_ALPHA8I_EXT 0x8D90 - GL_INTENSITY8I_EXT 0x8D91 - GL_LUMINANCE8I_EXT 0x8D92 - GL_LUMINANCE_ALPHA8I_EXT 0x8D93 - GL_RED_INTEGER_EXT 0x8D94 - GL_GREEN_INTEGER_EXT 0x8D95 - GL_BLUE_INTEGER_EXT 0x8D96 - GL_ALPHA_INTEGER_EXT 0x8D97 - GL_RGB_INTEGER_EXT 0x8D98 - GL_RGBA_INTEGER_EXT 0x8D99 - GL_BGR_INTEGER_EXT 0x8D9A - GL_BGRA_INTEGER_EXT 0x8D9B - GL_LUMINANCE_INTEGER_EXT 0x8D9C - GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D - GL_RGBA_INTEGER_MODE_EXT 0x8D9E - void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params) - void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params) - void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params) - void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params) - void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha) - void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias deleted file mode 100644 index 4e6978369b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_lod_bias -http://www.opengl.org/registry/specs/gl/EXT/texture_lod_bias.txt -GL_EXT_texture_lod_bias - GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD - GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 - GL_TEXTURE_LOD_BIAS_EXT 0x8501 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp deleted file mode 100644 index 1bad3c3c38..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_mirror_clamp -http://www.opengl.org/registry/specs/gl/EXT/texture_mirror_clamp.txt -GL_EXT_texture_mirror_clamp - GL_MIRROR_CLAMP_EXT 0x8742 - GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 - GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object deleted file mode 100644 index 5885a1febe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object +++ /dev/null @@ -1,14 +0,0 @@ -GL_EXT_texture_object -http://www.opengl.org/registry/specs/gl/EXT/texture_object.txt -GL_EXT_texture_object - GL_TEXTURE_PRIORITY_EXT 0x8066 - GL_TEXTURE_RESIDENT_EXT 0x8067 - GL_TEXTURE_1D_BINDING_EXT 0x8068 - GL_TEXTURE_2D_BINDING_EXT 0x8069 - GL_TEXTURE_3D_BINDING_EXT 0x806A - GLboolean glAreTexturesResidentEXT (GLsizei n, const GLuint* textures, GLboolean* residences) - void glBindTextureEXT (GLenum target, GLuint texture) - void glDeleteTexturesEXT (GLsizei n, const GLuint* textures) - void glGenTexturesEXT (GLsizei n, GLuint* textures) - GLboolean glIsTextureEXT (GLuint texture) - void glPrioritizeTexturesEXT (GLsizei n, const GLuint* textures, const GLclampf* priorities) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal deleted file mode 100644 index b376846627..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_perturb_normal -http://www.opengl.org/registry/specs/gl/EXT/texture_perturb_normal.txt -GL_EXT_texture_perturb_normal - GL_PERTURB_EXT 0x85AE - GL_TEXTURE_NORMAL_EXT 0x85AF - void glTextureNormalEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle deleted file mode 100644 index 4028a9e671..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_rectangle -http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html -GL_EXT_texture_rectangle - GL_TEXTURE_RECTANGLE_EXT 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB deleted file mode 100644 index f68917a680..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_texture_sRGB -http://www.opengl.org/registry/specs/gl/EXT/texture_sRGB.txt -GL_EXT_texture_sRGB - GL_SRGB_EXT 0x8C40 - GL_SRGB8_EXT 0x8C41 - GL_SRGB_ALPHA_EXT 0x8C42 - GL_SRGB8_ALPHA8_EXT 0x8C43 - GL_SLUMINANCE_ALPHA_EXT 0x8C44 - GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 - GL_SLUMINANCE_EXT 0x8C46 - GL_SLUMINANCE8_EXT 0x8C47 - GL_COMPRESSED_SRGB_EXT 0x8C48 - GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 - GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A - GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B - GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode deleted file mode 100644 index e03f31926f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_sRGB_decode -http://www.opengl.org/registry/specs/gl/EXT/texture_sRGB_decode.txt -GL_EXT_texture_sRGB_decode - GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 - GL_DECODE_EXT 0x8A49 - GL_SKIP_DECODE_EXT 0x8A4A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent deleted file mode 100644 index 4ff7efcd35..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_shared_exponent -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt -GL_EXT_texture_shared_exponent - GL_RGB9_E5_EXT 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E - GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm deleted file mode 100644 index b516d46ae0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm +++ /dev/null @@ -1,28 +0,0 @@ -GL_EXT_texture_snorm -http://www.opengl.org/registry/specs/gl/EXT/texture_snorm.txt -GL_EXT_texture_snorm - GL_RED_SNORM 0x8F90 - GL_RG_SNORM 0x8F91 - GL_RGB_SNORM 0x8F92 - GL_RGBA_SNORM 0x8F93 - GL_R8_SNORM 0x8F94 - GL_RG8_SNORM 0x8F95 - GL_RGB8_SNORM 0x8F96 - GL_RGBA8_SNORM 0x8F97 - GL_R16_SNORM 0x8F98 - GL_RG16_SNORM 0x8F99 - GL_RGB16_SNORM 0x8F9A - GL_RGBA16_SNORM 0x8F9B - GL_SIGNED_NORMALIZED 0x8F9C - GL_ALPHA_SNORM 0x9010 - GL_LUMINANCE_SNORM 0x9011 - GL_LUMINANCE_ALPHA_SNORM 0x9012 - GL_INTENSITY_SNORM 0x9013 - GL_ALPHA8_SNORM 0x9014 - GL_LUMINANCE8_SNORM 0x9015 - GL_LUMINANCE8_ALPHA8_SNORM 0x9016 - GL_INTENSITY8_SNORM 0x9017 - GL_ALPHA16_SNORM 0x9018 - GL_LUMINANCE16_SNORM 0x9019 - GL_LUMINANCE16_ALPHA16_SNORM 0x901A - GL_INTENSITY16_SNORM 0x901B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle deleted file mode 100644 index c2cffee1e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_texture_swizzle -http://www.opengl.org/registry/specs/gl/EXT/texture_swizzle.txt -GL_EXT_texture_swizzle - GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 - GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 - GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 - GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 - GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query deleted file mode 100644 index 390e6fc0cd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_timer_query -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt -GL_EXT_timer_query - GL_TIME_ELAPSED_EXT 0x88BF - void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) - void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback b/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback deleted file mode 100644 index 4ca6e53966..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback +++ /dev/null @@ -1,25 +0,0 @@ -GL_EXT_transform_feedback -http://www.opengl.org/registry/specs/gl/EXT/transform_feedback.txt -GL_EXT_transform_feedback - GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 - GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 - GL_PRIMITIVES_GENERATED_EXT 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 - GL_RASTERIZER_DISCARD_EXT 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B - GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C - GL_SEPARATE_ATTRIBS_EXT 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F - void glBeginTransformFeedbackEXT (GLenum primitiveMode) - void glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer) - void glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glEndTransformFeedbackEXT (void) - void glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, GLchar *name) - void glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar * const* varyings, GLenum bufferMode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array deleted file mode 100644 index 6804627448..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array +++ /dev/null @@ -1,44 +0,0 @@ -GL_EXT_vertex_array -http://www.opengl.org/registry/specs/gl/EXT/vertex_array.txt -GL_EXT_vertex_array - GL_DOUBLE_EXT 0x140A - GL_VERTEX_ARRAY_EXT 0x8074 - GL_NORMAL_ARRAY_EXT 0x8075 - GL_COLOR_ARRAY_EXT 0x8076 - GL_INDEX_ARRAY_EXT 0x8077 - GL_TEXTURE_COORD_ARRAY_EXT 0x8078 - GL_EDGE_FLAG_ARRAY_EXT 0x8079 - GL_VERTEX_ARRAY_SIZE_EXT 0x807A - GL_VERTEX_ARRAY_TYPE_EXT 0x807B - GL_VERTEX_ARRAY_STRIDE_EXT 0x807C - GL_VERTEX_ARRAY_COUNT_EXT 0x807D - GL_NORMAL_ARRAY_TYPE_EXT 0x807E - GL_NORMAL_ARRAY_STRIDE_EXT 0x807F - GL_NORMAL_ARRAY_COUNT_EXT 0x8080 - GL_COLOR_ARRAY_SIZE_EXT 0x8081 - GL_COLOR_ARRAY_TYPE_EXT 0x8082 - GL_COLOR_ARRAY_STRIDE_EXT 0x8083 - GL_COLOR_ARRAY_COUNT_EXT 0x8084 - GL_INDEX_ARRAY_TYPE_EXT 0x8085 - GL_INDEX_ARRAY_STRIDE_EXT 0x8086 - GL_INDEX_ARRAY_COUNT_EXT 0x8087 - GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 - GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 - GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A - GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B - GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C - GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D - GL_VERTEX_ARRAY_POINTER_EXT 0x808E - GL_NORMAL_ARRAY_POINTER_EXT 0x808F - GL_COLOR_ARRAY_POINTER_EXT 0x8090 - GL_INDEX_ARRAY_POINTER_EXT 0x8091 - GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 - GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 - void glArrayElementEXT (GLint i) - void glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glDrawArraysEXT (GLenum mode, GLint first, GLsizei count) - void glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean* pointer) - void glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra deleted file mode 100644 index 640773d240..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_vertex_array_bgra -http://www.opengl.org/registry/specs/gl/EXT/vertex_array_bgra.txt -GL_EXT_vertex_array_bgra - GL_BGRA 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit deleted file mode 100644 index 969030d1ae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_vertex_attrib_64bit -http://www.opengl.org/registry/specs/gl/EXT/vertex_attrib_64bit.txt -GL_EXT_vertex_attrib_64bit - GL_DOUBLE_MAT2_EXT 0x8F46 - GL_DOUBLE_MAT3_EXT 0x8F47 - GL_DOUBLE_MAT4_EXT 0x8F48 - GL_DOUBLE_MAT2x3_EXT 0x8F49 - GL_DOUBLE_MAT2x4_EXT 0x8F4A - GL_DOUBLE_MAT3x2_EXT 0x8F4B - GL_DOUBLE_MAT3x4_EXT 0x8F4C - GL_DOUBLE_MAT4x2_EXT 0x8F4D - GL_DOUBLE_MAT4x3_EXT 0x8F4E - GL_DOUBLE_VEC2_EXT 0x8FFC - GL_DOUBLE_VEC3_EXT 0x8FFD - GL_DOUBLE_VEC4_EXT 0x8FFE - void glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble* params) - void glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexAttribL1dEXT (GLuint index, GLdouble x) - void glVertexAttribL1dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader deleted file mode 100644 index eb125b6083..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader +++ /dev/null @@ -1,156 +0,0 @@ -GL_EXT_vertex_shader -http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt -GL_EXT_vertex_shader - GL_VERTEX_SHADER_EXT 0x8780 - GL_VERTEX_SHADER_BINDING_EXT 0x8781 - GL_OP_INDEX_EXT 0x8782 - GL_OP_NEGATE_EXT 0x8783 - GL_OP_DOT3_EXT 0x8784 - GL_OP_DOT4_EXT 0x8785 - GL_OP_MUL_EXT 0x8786 - GL_OP_ADD_EXT 0x8787 - GL_OP_MADD_EXT 0x8788 - GL_OP_FRAC_EXT 0x8789 - GL_OP_MAX_EXT 0x878A - GL_OP_MIN_EXT 0x878B - GL_OP_SET_GE_EXT 0x878C - GL_OP_SET_LT_EXT 0x878D - GL_OP_CLAMP_EXT 0x878E - GL_OP_FLOOR_EXT 0x878F - GL_OP_ROUND_EXT 0x8790 - GL_OP_EXP_BASE_2_EXT 0x8791 - GL_OP_LOG_BASE_2_EXT 0x8792 - GL_OP_POWER_EXT 0x8793 - GL_OP_RECIP_EXT 0x8794 - GL_OP_RECIP_SQRT_EXT 0x8795 - GL_OP_SUB_EXT 0x8796 - GL_OP_CROSS_PRODUCT_EXT 0x8797 - GL_OP_MULTIPLY_MATRIX_EXT 0x8798 - GL_OP_MOV_EXT 0x8799 - GL_OUTPUT_VERTEX_EXT 0x879A - GL_OUTPUT_COLOR0_EXT 0x879B - GL_OUTPUT_COLOR1_EXT 0x879C - GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D - GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E - GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F - GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 - GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 - GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 - GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 - GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 - GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 - GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 - GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 - GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 - GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 - GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA - GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB - GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC - GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD - GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE - GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF - GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 - GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 - GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 - GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 - GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 - GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 - GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 - GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 - GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 - GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 - GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA - GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB - GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC - GL_OUTPUT_FOG_EXT 0x87BD - GL_SCALAR_EXT 0x87BE - GL_VECTOR_EXT 0x87BF - GL_MATRIX_EXT 0x87C0 - GL_VARIANT_EXT 0x87C1 - GL_INVARIANT_EXT 0x87C2 - GL_LOCAL_CONSTANT_EXT 0x87C3 - GL_LOCAL_EXT 0x87C4 - GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 - GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 - GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 - GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 - GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 - GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA - GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB - GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE - GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF - GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 - GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 - GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 - GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 - GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 - GL_X_EXT 0x87D5 - GL_Y_EXT 0x87D6 - GL_Z_EXT 0x87D7 - GL_W_EXT 0x87D8 - GL_NEGATIVE_X_EXT 0x87D9 - GL_NEGATIVE_Y_EXT 0x87DA - GL_NEGATIVE_Z_EXT 0x87DB - GL_NEGATIVE_W_EXT 0x87DC - GL_ZERO_EXT 0x87DD - GL_ONE_EXT 0x87DE - GL_NEGATIVE_ONE_EXT 0x87DF - GL_NORMALIZED_RANGE_EXT 0x87E0 - GL_FULL_RANGE_EXT 0x87E1 - GL_CURRENT_VERTEX_EXT 0x87E2 - GL_MVP_MATRIX_EXT 0x87E3 - GL_VARIANT_VALUE_EXT 0x87E4 - GL_VARIANT_DATATYPE_EXT 0x87E5 - GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 - GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 - GL_VARIANT_ARRAY_EXT 0x87E8 - GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 - GL_INVARIANT_VALUE_EXT 0x87EA - GL_INVARIANT_DATATYPE_EXT 0x87EB - GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC - GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - - void glBeginVertexShaderEXT (void) - void glEndVertexShaderEXT (void) - void glBindVertexShaderEXT (GLuint id) - GLuint glGenVertexShadersEXT (GLuint range) - void glDeleteVertexShaderEXT (GLuint id) - void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) - void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) - void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) - void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glInsertComponentEXT (GLuint res, GLuint src, GLuint num) - void glExtractComponentEXT (GLuint res, GLuint src, GLuint num) - GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components) - void glSetInvariantEXT (GLuint id, GLenum type, GLvoid *addr) - void glSetLocalConstantEXT (GLuint id, GLenum type, GLvoid *addr) - void glVariantbvEXT (GLuint id, GLbyte *addr) - void glVariantsvEXT (GLuint id, GLshort *addr) - void glVariantivEXT (GLuint id, GLint *addr) - void glVariantfvEXT (GLuint id, GLfloat *addr) - void glVariantdvEXT (GLuint id, GLdouble *addr) - void glVariantubvEXT (GLuint id, GLubyte *addr) - void glVariantusvEXT (GLuint id, GLushort *addr) - void glVariantuivEXT (GLuint id, GLuint *addr) - void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, GLvoid *addr) - void glEnableVariantClientStateEXT (GLuint id) - void glDisableVariantClientStateEXT (GLuint id) - GLuint glBindLightParameterEXT (GLenum light, GLenum value) - GLuint glBindMaterialParameterEXT (GLenum face, GLenum value) - GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) - GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value) - GLuint glBindParameterEXT (GLenum value) - GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap) - void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid **data) - void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting deleted file mode 100644 index 32e7bc6ef3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_vertex_weighting -http://www.opengl.org/registry/specs/gl/EXT/vertex_weighting.txt -GL_EXT_vertex_weighting - GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 - GL_MODELVIEW0_MATRIX_EXT 0x0BA6 - GL_MODELVIEW0_EXT 0x1700 - GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 - GL_MODELVIEW1_MATRIX_EXT 0x8506 - GL_VERTEX_WEIGHTING_EXT 0x8509 - GL_MODELVIEW1_EXT 0x850A - GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B - GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C - GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D - GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E - GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F - GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 - void glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexWeightfEXT (GLfloat weight) - void glVertexWeightfvEXT (GLfloat* weight) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object deleted file mode 100644 index a5ee698154..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_x11_sync_object -http://www.opengl.org/registry/specs/gl/EXT/x11_sync_object.txt -GL_EXT_x11_sync_object - GL_SYNC_X11_FENCE_EXT 0x90E1 - GLsync glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator b/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator deleted file mode 100644 index b4e9f8dfcd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator +++ /dev/null @@ -1,4 +0,0 @@ -GL_GREMEDY_frame_terminator -http://www.opengl.org/registry/specs/gl/GREMEDY/frame_terminator.txt -GL_GREMEDY_frame_terminator - void glFrameTerminatorGREMEDY (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker b/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker deleted file mode 100644 index 1b2fd1acf1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker +++ /dev/null @@ -1,4 +0,0 @@ -GL_GREMEDY_string_marker -http://www.opengl.org/registry/specs/gl/GREMEDY/string_marker.txt -GL_GREMEDY_string_marker - void glStringMarkerGREMEDY (GLsizei len, const GLvoid *string) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes b/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes deleted file mode 100644 index e0074aab49..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_convolution_border_modes -http://www.opengl.org/registry/specs/gl/HP/convolution_border_modes.txt -GL_HP_convolution_border_modes diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform b/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform deleted file mode 100644 index 48b4bdaadd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform +++ /dev/null @@ -1,9 +0,0 @@ -GL_HP_image_transform -http://www.opengl.org/registry/specs/gl/HP/image_transform.txt -GL_HP_image_transform - void glGetImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params) - void glGetImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params) - void glImageTransformParameterfHP (GLenum target, GLenum pname, const GLfloat param) - void glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params) - void glImageTransformParameteriHP (GLenum target, GLenum pname, const GLint param) - void glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test b/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test deleted file mode 100644 index ecc1148428..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_occlusion_test -http://www.opengl.org/registry/specs/gl/HP/occlusion_test.txt -GL_HP_occlusion_test diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting b/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting deleted file mode 100644 index 574737eeeb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_texture_lighting -http://www.opengl.org/registry/specs/gl/HP/texture_lighting.txt -GL_HP_texture_lighting diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex b/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex deleted file mode 100644 index 0f2ad120e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_cull_vertex -http://www.opengl.org/registry/specs/gl/IBM/cull_vertex.txt -GL_IBM_cull_vertex - GL_CULL_VERTEX_IBM 103050 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays b/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays deleted file mode 100644 index f215f2e449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays +++ /dev/null @@ -1,5 +0,0 @@ -GL_IBM_multimode_draw_arrays -http://www.opengl.org/registry/specs/gl/IBM/multimode_draw_arrays.txt -GL_IBM_multimode_draw_arrays - void glMultiModeDrawArraysIBM (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride) - void glMultiModeDrawElementsIBM (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip b/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip deleted file mode 100644 index 7c410b3093..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_rasterpos_clip -http://www.opengl.org/registry/specs/gl/IBM/rasterpos_clip.txt -GL_IBM_rasterpos_clip - GL_RASTER_POSITION_UNCLIPPED_IBM 103010 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data b/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data deleted file mode 100644 index ca3dc2567a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data +++ /dev/null @@ -1,5 +0,0 @@ -GL_IBM_static_data -http://www.opengl.org/registry/specs/gl/IBM/static_data.txt -GL_IBM_static_data - GL_ALL_STATIC_DATA_IBM 103060 - GL_STATIC_VERTEX_ARRAY_IBM 103061 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat b/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat deleted file mode 100644 index 49b1f63386..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_texture_mirrored_repeat -http://www.opengl.org/registry/specs/gl/IBM/texture_mirrored_repeat.txt -GL_IBM_texture_mirrored_repeat - GL_MIRRORED_REPEAT_IBM 0x8370 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists b/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists deleted file mode 100644 index bdc4ab5011..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists +++ /dev/null @@ -1,27 +0,0 @@ -GL_IBM_vertex_array_lists -http://www.opengl.org/registry/specs/gl/IBM/vertex_array_lists.txt -GL_IBM_vertex_array_lists - GL_VERTEX_ARRAY_LIST_IBM 103070 - GL_NORMAL_ARRAY_LIST_IBM 103071 - GL_COLOR_ARRAY_LIST_IBM 103072 - GL_INDEX_ARRAY_LIST_IBM 103073 - GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 - GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 - GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 - GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 - GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 - GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 - GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 - GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 - GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 - GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 - GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 - GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 - void glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glEdgeFlagPointerListIBM (GLint stride, const GLboolean ** pointer, GLint ptrstride) - void glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp b/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp deleted file mode 100644 index f8a50eeba3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp +++ /dev/null @@ -1,11 +0,0 @@ -GL_INGR_color_clamp -http://www.opengl.org/registry/specs/gl/INGR/color_clamp.txt -GL_INGR_color_clamp - GL_RED_MIN_CLAMP_INGR 0x8560 - GL_GREEN_MIN_CLAMP_INGR 0x8561 - GL_BLUE_MIN_CLAMP_INGR 0x8562 - GL_ALPHA_MIN_CLAMP_INGR 0x8563 - GL_RED_MAX_CLAMP_INGR 0x8564 - GL_GREEN_MAX_CLAMP_INGR 0x8565 - GL_BLUE_MAX_CLAMP_INGR 0x8566 - GL_ALPHA_MAX_CLAMP_INGR 0x8567 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read b/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read deleted file mode 100644 index 247f995d8c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read +++ /dev/null @@ -1,4 +0,0 @@ -GL_INGR_interlace_read -http://www.opengl.org/registry/specs/gl/INGR/interlace_read.txt -GL_INGR_interlace_read - GL_INTERLACE_READ_INGR 0x8568 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture deleted file mode 100644 index 8a6c1cd7f9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture +++ /dev/null @@ -1,10 +0,0 @@ -GL_INTEL_map_texture -http://www.opengl.org/registry/specs/gl/INTEL/map_texture.txt -GL_INTEL_map_texture - GL_LAYOUT_DEFAULT_INTEL 0 - GL_LAYOUT_LINEAR_INTEL 1 - GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 - GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF - GLvoid * glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum *layout) - void glSyncTextureINTEL (GLuint texture) - void glUnmapTexture2DINTEL (GLuint texture, GLint level) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays deleted file mode 100644 index 3077600b27..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays +++ /dev/null @@ -1,12 +0,0 @@ -GL_INTEL_parallel_arrays -http://www.opengl.org/registry/specs/gl/INTEL/parallel_arrays.txt -GL_INTEL_parallel_arrays - GL_PARALLEL_ARRAYS_INTEL 0x83F4 - GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 - GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 - GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 - GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 - void glColorPointervINTEL (GLint size, GLenum type, const void** pointer) - void glNormalPointervINTEL (GLenum type, const void** pointer) - void glTexCoordPointervINTEL (GLint size, GLenum type, const void** pointer) - void glVertexPointervINTEL (GLint size, GLenum type, const void** pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor deleted file mode 100644 index 436e261a43..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor +++ /dev/null @@ -1,5 +0,0 @@ -GL_INTEL_texture_scissor -http://www.opengl.org/registry/specs/gl/INTEL/texture_scissor.txt -GL_INTEL_texture_scissor - void glTexScissorFuncINTEL (GLenum target, GLenum lfunc, GLenum hfunc) - void glTexScissorINTEL (GLenum target, GLclampf tlow, GLclampf thigh) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug b/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug deleted file mode 100644 index c985da6c97..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug +++ /dev/null @@ -1,54 +0,0 @@ -GL_KHR_debug -http://www.opengl.org/registry/specs/gl/KHR/debug.txt -GL_KHR_debug - GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 - GL_STACK_OVERFLOW 0x0503 - GL_STACK_UNDERFLOW 0x0504 - GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 - GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 - GL_DEBUG_CALLBACK_FUNCTION 0x8244 - GL_DEBUG_CALLBACK_USER_PARAM 0x8245 - GL_DEBUG_SOURCE_API 0x8246 - GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 - GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 - GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 - GL_DEBUG_SOURCE_APPLICATION 0x824A - GL_DEBUG_SOURCE_OTHER 0x824B - GL_DEBUG_TYPE_ERROR 0x824C - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E - GL_DEBUG_TYPE_PORTABILITY 0x824F - GL_DEBUG_TYPE_PERFORMANCE 0x8250 - GL_DEBUG_TYPE_OTHER 0x8251 - GL_DEBUG_TYPE_MARKER 0x8268 - GL_DEBUG_TYPE_PUSH_GROUP 0x8269 - GL_DEBUG_TYPE_POP_GROUP 0x826A - GL_DEBUG_SEVERITY_NOTIFICATION 0x826B - GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C - GL_DEBUG_GROUP_STACK_DEPTH 0x826D - GL_BUFFER 0x82E0 - GL_SHADER 0x82E1 - GL_PROGRAM 0x82E2 - GL_QUERY 0x82E3 - GL_PROGRAM_PIPELINE 0x82E4 - GL_SAMPLER 0x82E6 - GL_DISPLAY_LIST 0x82E7 - GL_MAX_LABEL_LENGTH 0x82E8 - GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 - GL_DEBUG_LOGGED_MESSAGES 0x9145 - GL_DEBUG_SEVERITY_HIGH 0x9146 - GL_DEBUG_SEVERITY_MEDIUM 0x9147 - GL_DEBUG_SEVERITY_LOW 0x9148 - GL_DEBUG_OUTPUT 0x92E0 - void glDebugMessageCallback (GLDEBUGPROC callback, const GLvoid *userParam) - void glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) - void glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label) - void glGetObjectPtrLabel (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label) - void glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar* label) - void glObjectPtrLabel (void* ptr, GLsizei length, const GLchar* label) - void glPopDebugGroup (void) - void glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar * message) - typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr b/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr deleted file mode 100644 index 906a051e83..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr +++ /dev/null @@ -1,31 +0,0 @@ -GL_KHR_texture_compression_astc_ldr -http://www.opengl.org/registry/specs/gl/KHR/texture_compression_astc_ldr.txt -GL_KHR_texture_compression_astc_ldr - GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 - GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 - GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 - GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 - GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 - GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 - GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 - GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 - GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 - GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 - GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA - GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB - GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC - GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region b/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region deleted file mode 100644 index adc6c6f6ab..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region +++ /dev/null @@ -1,12 +0,0 @@ -GL_KTX_buffer_region - -GL_KTX_buffer_region - GL_KTX_FRONT_REGION 0x0 - GL_KTX_BACK_REGION 0x1 - GL_KTX_Z_REGION 0x2 - GL_KTX_STENCIL_REGION 0x3 - GLuint glBufferRegionEnabled (void) - GLuint glNewBufferRegion (GLenum region) - void glDeleteBufferRegion (GLenum region) - void glReadBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height) - void glDrawBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack b/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack deleted file mode 100644 index 88fab302b3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack +++ /dev/null @@ -1,9 +0,0 @@ -GL_MESAX_texture_stack -http://www.opengl.org/registry/specs/gl/MESAX/texture_stack.txt -GL_MESAX_texture_stack - GL_TEXTURE_1D_STACK_MESAX 0x8759 - GL_TEXTURE_2D_STACK_MESAX 0x875A - GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B - GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C - GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D - GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert b/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert deleted file mode 100644 index 03357a5880..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert +++ /dev/null @@ -1,4 +0,0 @@ -GL_MESA_pack_invert -http://www.opengl.org/registry/specs/gl/MESA/pack_invert.txt -GL_MESA_pack_invert - GL_PACK_INVERT_MESA 0x8758 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers b/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers deleted file mode 100644 index 31433742d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers +++ /dev/null @@ -1,4 +0,0 @@ -GL_MESA_resize_buffers -http://www.opengl.org/registry/specs/gl/MESA/resize_buffers.txt -GL_MESA_resize_buffers - void glResizeBuffersMESA (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos b/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos deleted file mode 100644 index 12d3454f22..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos +++ /dev/null @@ -1,27 +0,0 @@ -GL_MESA_window_pos -http://www.opengl.org/registry/specs/gl/MESA/window_pos.txt -GL_MESA_window_pos - void glWindowPos2dMESA (GLdouble x, GLdouble y) - void glWindowPos2dvMESA (const GLdouble* p) - void glWindowPos2fMESA (GLfloat x, GLfloat y) - void glWindowPos2fvMESA (const GLfloat* p) - void glWindowPos2iMESA (GLint x, GLint y) - void glWindowPos2ivMESA (const GLint* p) - void glWindowPos2sMESA (GLshort x, GLshort y) - void glWindowPos2svMESA (const GLshort* p) - void glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3dvMESA (const GLdouble* p) - void glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3fvMESA (const GLfloat* p) - void glWindowPos3iMESA (GLint x, GLint y, GLint z) - void glWindowPos3ivMESA (const GLint* p) - void glWindowPos3sMESA (GLshort x, GLshort y, GLshort z) - void glWindowPos3svMESA (const GLshort* p) - void glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble) - void glWindowPos4dvMESA (const GLdouble* p) - void glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glWindowPos4fvMESA (const GLfloat* p) - void glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w) - void glWindowPos4ivMESA (const GLint* p) - void glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w) - void glWindowPos4svMESA (const GLshort* p) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture b/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture deleted file mode 100644 index ac91880943..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_MESA_ycbcr_texture -http://www.opengl.org/registry/specs/gl/MESA/ycbcr_texture.txt -GL_MESA_ycbcr_texture - GL_UNSIGNED_SHORT_8_8_MESA 0x85BA - GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB - GL_YCBCR_MESA 0x8757 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render b/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render deleted file mode 100644 index e47bce648e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render +++ /dev/null @@ -1,5 +0,0 @@ -GL_NVX_conditional_render -http://www.opengl.org/registry/specs/gl/NVX/nvx_conditional_render.txt -GL_NVX_conditional_render - void glBeginConditionalRenderNVX (GLuint id) - void glEndConditionalRenderNVX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info b/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info deleted file mode 100644 index 6dd7bdddd3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info +++ /dev/null @@ -1,8 +0,0 @@ -GL_NVX_gpu_memory_info -http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt -GL_NVX_gpu_memory_info - GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 - GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 - GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 - GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A - GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect deleted file mode 100644 index db12aae048..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_bindless_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/NV/bindless_multi_draw_indirect.txt -GL_NV_bindless_multi_draw_indirect - void glMultiDrawArraysIndirectBindlessNV (GLenum mode, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) - void glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture b/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture deleted file mode 100644 index 7f337b92da..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture +++ /dev/null @@ -1,16 +0,0 @@ -GL_NV_bindless_texture -http://www.opengl.org/registry/specs/gl/NV/bindless_texture.txt -GL_NV_bindless_texture - GLuint64 glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) - GLuint64 glGetTextureHandleNV (GLuint texture) - GLuint64 glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler) - GLboolean glIsImageHandleResidentNV (GLuint64 handle) - GLboolean glIsTextureHandleResidentNV (GLuint64 handle) - void glMakeImageHandleNonResidentNV (GLuint64 handle) - void glMakeImageHandleResidentNV (GLuint64 handle, GLenum access) - void glMakeTextureHandleNonResidentNV (GLuint64 handle) - void glMakeTextureHandleResidentNV (GLuint64 handle) - void glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value) - void glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64* values) - void glUniformHandleui64NV (GLint location, GLuint64 value) - void glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced deleted file mode 100644 index f125830cb6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced +++ /dev/null @@ -1,51 +0,0 @@ -GL_NV_blend_equation_advanced -http://www.opengl.org/registry/specs/gl/NV/blend_equation_advanced.txt -GL_NV_blend_equation_advanced - GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 - GL_BLEND_OVERLAP_NV 0x9281 - GL_UNCORRELATED_NV 0x9282 - GL_DISJOINT_NV 0x9283 - GL_CONJOINT_NV 0x9284 - GL_BLEND_ADVANCED_COHERENT_NV 0x9285 - GL_SRC_NV 0x9286 - GL_DST_NV 0x9287 - GL_SRC_OVER_NV 0x9288 - GL_DST_OVER_NV 0x9289 - GL_SRC_IN_NV 0x928A - GL_DST_IN_NV 0x928B - GL_SRC_OUT_NV 0x928C - GL_DST_OUT_NV 0x928D - GL_SRC_ATOP_NV 0x928E - GL_DST_ATOP_NV 0x928F - GL_PLUS_NV 0x9291 - GL_PLUS_DARKER_NV 0x9292 - GL_MULTIPLY_NV 0x9294 - GL_SCREEN_NV 0x9295 - GL_OVERLAY_NV 0x9296 - GL_DARKEN_NV 0x9297 - GL_LIGHTEN_NV 0x9298 - GL_COLORDODGE_NV 0x9299 - GL_COLORBURN_NV 0x929A - GL_HARDLIGHT_NV 0x929B - GL_SOFTLIGHT_NV 0x929C - GL_DIFFERENCE_NV 0x929E - GL_MINUS_NV 0x929F - GL_EXCLUSION_NV 0x92A0 - GL_CONTRAST_NV 0x92A1 - GL_INVERT_RGB_NV 0x92A3 - GL_LINEARDODGE_NV 0x92A4 - GL_LINEARBURN_NV 0x92A5 - GL_VIVIDLIGHT_NV 0x92A6 - GL_LINEARLIGHT_NV 0x92A7 - GL_PINLIGHT_NV 0x92A8 - GL_HARDMIX_NV 0x92A9 - GL_HSL_HUE_NV 0x92AD - GL_HSL_SATURATION_NV 0x92AE - GL_HSL_COLOR_NV 0x92AF - GL_HSL_LUMINOSITY_NV 0x92B0 - GL_PLUS_CLAMPED_NV 0x92B1 - GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 - GL_MINUS_CLAMPED_NV 0x92B3 - GL_INVERT_OVG_NV 0x92B4 - void glBlendBarrierNV (void) - void glBlendParameteriNV (GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent deleted file mode 100644 index 5d93c3263f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_blend_equation_advanced_coherent -http://www.opengl.org/registry/specs/gl/NV/blend_equation_advanced.txt -GL_NV_blend_equation_advanced_coherent diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square deleted file mode 100644 index 939a2061fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_blend_square -http://www.opengl.org/registry/specs/gl/NV/blend_square.txt -GL_NV_blend_square diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 deleted file mode 100644 index 7631dc0b72..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_compute_program5 -http://www.opengl.org/registry/specs/gl/NV/compute_program5.txt -GL_NV_compute_program5 - GL_COMPUTE_PROGRAM_NV 0x90FB - GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render b/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render deleted file mode 100644 index b5710e8d12..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_conditional_render -http://www.opengl.org/registry/specs/gl/NV/conditional_render.txt -GL_NV_conditional_render - GL_QUERY_WAIT_NV 0x8E13 - GL_QUERY_NO_WAIT_NV 0x8E14 - GL_QUERY_BY_REGION_WAIT_NV 0x8E15 - GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 - void glBeginConditionalRenderNV (GLuint id, GLenum mode) - void glEndConditionalRenderNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color b/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color deleted file mode 100644 index 7547e8c065..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_copy_depth_to_color -http://www.opengl.org/registry/specs/gl/NV/copy_depth_to_color.txt -GL_NV_copy_depth_to_color - GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E - GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image deleted file mode 100644 index 668467537b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -GL_NV_copy_image - void glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D b/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D deleted file mode 100644 index 1191fac228..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_deep_texture3D -http://www.opengl.org/registry/specs/gl/NV/deep_texture3D.txt -GL_NV_deep_texture3D - GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 - GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float deleted file mode 100644 index 493b245589..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_depth_buffer_float -http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt -GL_NV_depth_buffer_float - GL_DEPTH_COMPONENT32F_NV 0x8DAB - GL_DEPTH32F_STENCIL8_NV 0x8DAC - GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD - GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - void glDepthRangedNV (GLdouble zNear, GLdouble zFar) - void glClearDepthdNV (GLdouble depth) - void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp deleted file mode 100644 index b1bdef659f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_depth_clamp -http://www.opengl.org/registry/specs/gl/NV/depth_clamp.txt -GL_NV_depth_clamp - GL_DEPTH_CLAMP_NV 0x864F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped deleted file mode 100644 index 62b4e59fa7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_depth_range_unclamped - -GL_NV_depth_range_unclamped - GL_SAMPLE_COUNT_BITS_NV 0x8864 - GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 - GL_QUERY_RESULT_NV 0x8866 - GL_QUERY_RESULT_AVAILABLE_NV 0x8867 - GL_SAMPLE_COUNT_NV 0x8914 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture b/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture deleted file mode 100644 index 6ede8af5fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_draw_texture -http://www.opengl.org/registry/specs/gl/NV/draw_texture.txt -GL_NV_draw_texture - void glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators b/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators deleted file mode 100644 index 70ec157b0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators +++ /dev/null @@ -1,36 +0,0 @@ -GL_NV_evaluators -http://www.opengl.org/registry/specs/gl/NV/evaluators.txt -GL_NV_evaluators - GL_EVAL_2D_NV 0x86C0 - GL_EVAL_TRIANGULAR_2D_NV 0x86C1 - GL_MAP_TESSELLATION_NV 0x86C2 - GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 - GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 - GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 - GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 - GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 - GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 - GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 - GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA - GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB - GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC - GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD - GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE - GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF - GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 - GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 - GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 - GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 - GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 - GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 - GL_MAX_MAP_TESSELLATION_NV 0x86D6 - GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 - void glEvalMapsNV (GLenum target, GLenum mode) - void glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params) - void glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint* params) - void glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points) - void glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat* params) - void glGetMapParameterivNV (GLenum target, GLenum pname, GLint* params) - void glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points) - void glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat* params) - void glMapParameterivNV (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample b/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample deleted file mode 100644 index 4270984673..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample +++ /dev/null @@ -1,16 +0,0 @@ -GL_NV_explicit_multisample -http://www.opengl.org/registry/specs/gl/NV/explicit_multisample.txt -GL_NV_explicit_multisample - GL_SAMPLE_POSITION_NV 0x8E50 - GL_SAMPLE_MASK_NV 0x8E51 - GL_SAMPLE_MASK_VALUE_NV 0x8E52 - GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 - GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 - GL_TEXTURE_RENDERBUFFER_NV 0x8E55 - GL_SAMPLER_RENDERBUFFER_NV 0x8E56 - GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 - GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 - GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 - void glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat* val) - void glSampleMaskIndexedNV (GLuint index, GLbitfield mask) - void glTexRenderbufferNV (GLenum target, GLuint renderbuffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fence b/Engine/lib/glew/auto/extensions/gl/GL_NV_fence deleted file mode 100644 index aeb24c759a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fence +++ /dev/null @@ -1,13 +0,0 @@ -GL_NV_fence -http://www.opengl.org/registry/specs/gl/NV/fence.txt -GL_NV_fence - GL_ALL_COMPLETED_NV 0x84F2 - GL_FENCE_STATUS_NV 0x84F3 - GL_FENCE_CONDITION_NV 0x84F4 - void glDeleteFencesNV (GLsizei n, const GLuint* fences) - void glFinishFenceNV (GLuint fence) - void glGenFencesNV (GLsizei n, GLuint* fences) - void glGetFenceivNV (GLuint fence, GLenum pname, GLint* params) - GLboolean glIsFenceNV (GLuint fence) - void glSetFenceNV (GLuint fence, GLenum condition) - GLboolean glTestFenceNV (GLuint fence) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer deleted file mode 100644 index 175e171b44..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_float_buffer -http://www.opengl.org/registry/specs/gl/NV/float_buffer.txt -GL_NV_float_buffer - GL_FLOAT_R_NV 0x8880 - GL_FLOAT_RG_NV 0x8881 - GL_FLOAT_RGB_NV 0x8882 - GL_FLOAT_RGBA_NV 0x8883 - GL_FLOAT_R16_NV 0x8884 - GL_FLOAT_R32_NV 0x8885 - GL_FLOAT_RG16_NV 0x8886 - GL_FLOAT_RG32_NV 0x8887 - GL_FLOAT_RGB16_NV 0x8888 - GL_FLOAT_RGB32_NV 0x8889 - GL_FLOAT_RGBA16_NV 0x888A - GL_FLOAT_RGBA32_NV 0x888B - GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C - GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D - GL_FLOAT_RGBA_MODE_NV 0x888E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance b/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance deleted file mode 100644 index bcb065ba21..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_fog_distance -http://www.opengl.org/registry/specs/gl/NV/fog_distance.txt -GL_NV_fog_distance - GL_FOG_DISTANCE_MODE_NV 0x855A - GL_EYE_RADIAL_NV 0x855B - GL_EYE_PLANE_ABSOLUTE_NV 0x855C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program deleted file mode 100644 index 334fa04a6e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_fragment_program -http://www.opengl.org/registry/specs/gl/NV/fragment_program.txt -GL_NV_fragment_program - GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 - GL_FRAGMENT_PROGRAM_NV 0x8870 - GL_MAX_TEXTURE_COORDS_NV 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 - GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 - GL_PROGRAM_ERROR_STRING_NV 0x8874 - void glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params) - void glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params) - void glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]) - void glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 deleted file mode 100644 index 7fb59eea1b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_fragment_program2 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt -GL_NV_fragment_program2 - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 - GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 - GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 deleted file mode 100644 index 0ae2598795..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt -GL_NV_gpu_program4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option deleted file mode 100644 index 7af9731bd8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt -GL_NV_fragment_program_option diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage deleted file mode 100644 index d1d066056c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_framebuffer_multisample_coverage -http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt -GL_NV_framebuffer_multisample_coverage - GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB - GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 - GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 - GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 deleted file mode 100644 index 3f82b195d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_geometry_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt -GL_NV_gpu_program4 - GL_GEOMETRY_PROGRAM_NV 0x8C26 - GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 - GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - void glProgramVertexLimitNV (GLenum target, GLint limit) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 deleted file mode 100644 index 2040c0dbb3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt -GL_NV_geometry_shader4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 deleted file mode 100644 index 030f68e1cc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 +++ /dev/null @@ -1,23 +0,0 @@ -GL_NV_gpu_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt -GL_NV_gpu_program4 - GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 - GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 - GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 - GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 - GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 - GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 - GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) - void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 deleted file mode 100644 index 18bb28fed0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_gpu_program5 -http://www.opengl.org/registry/specs/NV/gpu_program5.txt -GL_NV_gpu_program5 - GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C - GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended deleted file mode 100644 index 9e24534e73..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_gpu_program5_mem_extended -http://www.opengl.org/registry/specs/gl/NV/gpu_program5_mem_extended.txt -GL_NV_gpu_program5_mem_extended diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 deleted file mode 100644 index ff7a87c757..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_gpu_program_fp64 -http://www.opengl.org/registry/specs/gl/NV/gpu_program5.txt -GL_NV_gpu_program_fp64 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 deleted file mode 100644 index 7c3fbb9f30..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 +++ /dev/null @@ -1,65 +0,0 @@ -GL_NV_gpu_shader5 -http://www.opengl.org/registry/specs/gl/NV/gpu_shader5.txt -GL_NV_gpu_shader5 - GL_INT64_NV 0x140E - GL_UNSIGNED_INT64_NV 0x140F - GL_INT8_NV 0x8FE0 - GL_INT8_VEC2_NV 0x8FE1 - GL_INT8_VEC3_NV 0x8FE2 - GL_INT8_VEC4_NV 0x8FE3 - GL_INT16_NV 0x8FE4 - GL_INT16_VEC2_NV 0x8FE5 - GL_INT16_VEC3_NV 0x8FE6 - GL_INT16_VEC4_NV 0x8FE7 - GL_INT64_VEC2_NV 0x8FE9 - GL_INT64_VEC3_NV 0x8FEA - GL_INT64_VEC4_NV 0x8FEB - GL_UNSIGNED_INT8_NV 0x8FEC - GL_UNSIGNED_INT8_VEC2_NV 0x8FED - GL_UNSIGNED_INT8_VEC3_NV 0x8FEE - GL_UNSIGNED_INT8_VEC4_NV 0x8FEF - GL_UNSIGNED_INT16_NV 0x8FF0 - GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 - GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 - GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 - GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 - GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 - GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 - GL_FLOAT16_NV 0x8FF8 - GL_FLOAT16_VEC2_NV 0x8FF9 - GL_FLOAT16_VEC3_NV 0x8FFA - GL_FLOAT16_VEC4_NV 0x8FFB - void glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT* params) - void glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT* params) - void glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x) - void glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x) - void glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y) - void glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) - void glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform1i64NV (GLint location, GLint64EXT x) - void glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform1ui64NV (GLint location, GLuint64EXT x) - void glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y) - void glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y) - void glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float deleted file mode 100644 index 059d5e02aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float +++ /dev/null @@ -1,51 +0,0 @@ -GL_NV_half_float -http://www.opengl.org/registry/specs/gl/NV/half_float.txt -GL_NV_half_float - GL_HALF_FLOAT_NV 0x140B - void glColor3hNV (GLhalf red, GLhalf green, GLhalf blue) - void glColor3hvNV (const GLhalf* v) - void glColor4hNV (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha) - void glColor4hvNV (const GLhalf* v) - void glFogCoordhNV (GLhalf fog) - void glFogCoordhvNV (const GLhalf* fog) - void glMultiTexCoord1hNV (GLenum target, GLhalf s) - void glMultiTexCoord1hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord2hNV (GLenum target, GLhalf s, GLhalf t) - void glMultiTexCoord2hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord3hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r) - void glMultiTexCoord3hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord4hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q) - void glMultiTexCoord4hvNV (GLenum target, const GLhalf* v) - void glNormal3hNV (GLhalf nx, GLhalf ny, GLhalf nz) - void glNormal3hvNV (const GLhalf* v) - void glSecondaryColor3hNV (GLhalf red, GLhalf green, GLhalf blue) - void glSecondaryColor3hvNV (const GLhalf* v) - void glTexCoord1hNV (GLhalf s) - void glTexCoord1hvNV (const GLhalf* v) - void glTexCoord2hNV (GLhalf s, GLhalf t) - void glTexCoord2hvNV (const GLhalf* v) - void glTexCoord3hNV (GLhalf s, GLhalf t, GLhalf r) - void glTexCoord3hvNV (const GLhalf* v) - void glTexCoord4hNV (GLhalf s, GLhalf t, GLhalf r, GLhalf q) - void glTexCoord4hvNV (const GLhalf* v) - void glVertex2hNV (GLhalf x, GLhalf y) - void glVertex2hvNV (const GLhalf* v) - void glVertex3hNV (GLhalf x, GLhalf y, GLhalf z) - void glVertex3hvNV (const GLhalf* v) - void glVertex4hNV (GLhalf x, GLhalf y, GLhalf z, GLhalf w) - void glVertex4hvNV (const GLhalf* v) - void glVertexAttrib1hNV (GLuint index, GLhalf x) - void glVertexAttrib1hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib2hNV (GLuint index, GLhalf x, GLhalf y) - void glVertexAttrib2hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib3hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z) - void glVertexAttrib3hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib4hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w) - void glVertexAttrib4hvNV (GLuint index, const GLhalf* v) - void glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexWeighthNV (GLhalf weight) - void glVertexWeighthvNV (const GLhalf* weight) - typedef unsigned short GLhalf diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent b/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent deleted file mode 100644 index 9f7c4632f2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_light_max_exponent -http://www.opengl.org/registry/specs/gl/NV/light_max_exponent.txt -GL_NV_light_max_exponent - GL_MAX_SHININESS_NV 0x8504 - GL_MAX_SPOT_EXPONENT_NV 0x8505 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage deleted file mode 100644 index 5413d52bdf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -GL_NV_multisample_coverage - GL_COLOR_SAMPLES_NV 0x8E20 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint b/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint deleted file mode 100644 index 2f4791994f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_multisample_filter_hint -http://www.opengl.org/registry/specs/gl/NV/multisample_filter_hint.txt -GL_NV_multisample_filter_hint - GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query b/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query deleted file mode 100644 index a767ada46a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query +++ /dev/null @@ -1,14 +0,0 @@ -GL_NV_occlusion_query -http://www.opengl.org/registry/specs/gl/NV/occlusion_query.txt -GL_NV_occlusion_query - GL_PIXEL_COUNTER_BITS_NV 0x8864 - GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 - GL_PIXEL_COUNT_NV 0x8866 - GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 - void glBeginOcclusionQueryNV (GLuint id) - void glDeleteOcclusionQueriesNV (GLsizei n, const GLuint* ids) - void glEndOcclusionQueryNV (void) - void glGenOcclusionQueriesNV (GLsizei n, GLuint* ids) - void glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint* params) - void glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint* params) - GLboolean glIsOcclusionQueryNV (GLuint id) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil deleted file mode 100644 index ffe3d11a6c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_packed_depth_stencil -http://www.opengl.org/registry/specs/gl/NV/packed_depth_stencil.txt -GL_NV_packed_depth_stencil - GL_DEPTH_STENCIL_NV 0x84F9 - GL_UNSIGNED_INT_24_8_NV 0x84FA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object deleted file mode 100644 index d2525a1766..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_parameter_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt -GL_NV_parameter_buffer_object - GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 - GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 - GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 - GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 - void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params) - void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params) - void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 deleted file mode 100644 index 8a6755705a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_parameter_buffer_object2 -http://www.opengl.org/registry/specs/gl/NV/parameter_buffer_object2.txt -GL_NV_parameter_buffer_object2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering b/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering deleted file mode 100644 index 42e1336327..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering +++ /dev/null @@ -1,180 +0,0 @@ -GL_NV_path_rendering -http://www.opengl.org/registry/specs/NV/path_rendering.txt -GL_NV_path_rendering - GL_CLOSE_PATH_NV 0x00 - GL_BOLD_BIT_NV 0x01 - GL_GLYPH_WIDTH_BIT_NV 0x01 - GL_GLYPH_HEIGHT_BIT_NV 0x02 - GL_ITALIC_BIT_NV 0x02 - GL_MOVE_TO_NV 0x02 - GL_RELATIVE_MOVE_TO_NV 0x03 - GL_LINE_TO_NV 0x04 - GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 - GL_RELATIVE_LINE_TO_NV 0x05 - GL_HORIZONTAL_LINE_TO_NV 0x06 - GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 - GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 - GL_VERTICAL_LINE_TO_NV 0x08 - GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 - GL_QUADRATIC_CURVE_TO_NV 0x0A - GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B - GL_CUBIC_CURVE_TO_NV 0x0C - GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D - GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E - GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F - GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 - GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 - GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 - GL_SMALL_CCW_ARC_TO_NV 0x12 - GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 - GL_SMALL_CW_ARC_TO_NV 0x14 - GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 - GL_LARGE_CCW_ARC_TO_NV 0x16 - GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 - GL_LARGE_CW_ARC_TO_NV 0x18 - GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 - GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 - GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 - GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 - GL_RESTART_PATH_NV 0xF0 - GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 - GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 - GL_RECT_NV 0xF6 - GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 - GL_CIRCULAR_CW_ARC_TO_NV 0xFA - GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC - GL_ARC_TO_NV 0xFE - GL_RELATIVE_ARC_TO_NV 0xFF - GL_GLYPH_HAS_KERNING_BIT_NV 0x100 - GL_PRIMARY_COLOR 0x8577 - GL_PATH_FORMAT_SVG_NV 0x9070 - GL_PATH_FORMAT_PS_NV 0x9071 - GL_STANDARD_FONT_NAME_NV 0x9072 - GL_SYSTEM_FONT_NAME_NV 0x9073 - GL_FILE_NAME_NV 0x9074 - GL_PATH_STROKE_WIDTH_NV 0x9075 - GL_PATH_END_CAPS_NV 0x9076 - GL_PATH_INITIAL_END_CAP_NV 0x9077 - GL_PATH_TERMINAL_END_CAP_NV 0x9078 - GL_PATH_JOIN_STYLE_NV 0x9079 - GL_PATH_MITER_LIMIT_NV 0x907A - GL_PATH_DASH_CAPS_NV 0x907B - GL_PATH_INITIAL_DASH_CAP_NV 0x907C - GL_PATH_TERMINAL_DASH_CAP_NV 0x907D - GL_PATH_DASH_OFFSET_NV 0x907E - GL_PATH_CLIENT_LENGTH_NV 0x907F - GL_PATH_FILL_MODE_NV 0x9080 - GL_PATH_FILL_MASK_NV 0x9081 - GL_PATH_FILL_COVER_MODE_NV 0x9082 - GL_PATH_STROKE_COVER_MODE_NV 0x9083 - GL_PATH_STROKE_MASK_NV 0x9084 - GL_COUNT_UP_NV 0x9088 - GL_COUNT_DOWN_NV 0x9089 - GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A - GL_CONVEX_HULL_NV 0x908B - GL_BOUNDING_BOX_NV 0x908D - GL_TRANSLATE_X_NV 0x908E - GL_TRANSLATE_Y_NV 0x908F - GL_TRANSLATE_2D_NV 0x9090 - GL_TRANSLATE_3D_NV 0x9091 - GL_AFFINE_2D_NV 0x9092 - GL_AFFINE_3D_NV 0x9094 - GL_TRANSPOSE_AFFINE_2D_NV 0x9096 - GL_TRANSPOSE_AFFINE_3D_NV 0x9098 - GL_UTF8_NV 0x909A - GL_UTF16_NV 0x909B - GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C - GL_PATH_COMMAND_COUNT_NV 0x909D - GL_PATH_COORD_COUNT_NV 0x909E - GL_PATH_DASH_ARRAY_COUNT_NV 0x909F - GL_PATH_COMPUTED_LENGTH_NV 0x90A0 - GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 - GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 - GL_SQUARE_NV 0x90A3 - GL_ROUND_NV 0x90A4 - GL_TRIANGULAR_NV 0x90A5 - GL_BEVEL_NV 0x90A6 - GL_MITER_REVERT_NV 0x90A7 - GL_MITER_TRUNCATE_NV 0x90A8 - GL_SKIP_MISSING_GLYPH_NV 0x90A9 - GL_USE_MISSING_GLYPH_NV 0x90AA - GL_PATH_ERROR_POSITION_NV 0x90AB - GL_PATH_FOG_GEN_MODE_NV 0x90AC - GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD - GL_ADJACENT_PAIRS_NV 0x90AE - GL_FIRST_TO_REST_NV 0x90AF - GL_PATH_GEN_MODE_NV 0x90B0 - GL_PATH_GEN_COEFF_NV 0x90B1 - GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 - GL_PATH_GEN_COMPONENTS_NV 0x90B3 - GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 - GL_MOVE_TO_RESETS_NV 0x90B5 - GL_MOVE_TO_CONTINUES_NV 0x90B6 - GL_PATH_STENCIL_FUNC_NV 0x90B7 - GL_PATH_STENCIL_REF_NV 0x90B8 - GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 - GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD - GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE - GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF - GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 - GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 - GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 - GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 - GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 - GL_FONT_ASCENDER_BIT_NV 0x00200000 - GL_FONT_DESCENDER_BIT_NV 0x00400000 - GL_FONT_HEIGHT_BIT_NV 0x00800000 - GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 - GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 - GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 - GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 - GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - void glCopyPathNV (GLuint resultPath, GLuint srcPath) - void glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverFillPathNV (GLuint path, GLenum coverMode) - void glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverStrokePathNV (GLuint name, GLenum coverMode) - void glDeletePathsNV (GLuint path, GLsizei range) - GLuint glGenPathsNV (GLsizei range) - void glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat* value) - void glGetPathColorGenivNV (GLenum color, GLenum pname, GLint* value) - void glGetPathCommandsNV (GLuint name, GLubyte* commands) - void glGetPathCoordsNV (GLuint name, GLfloat* coords) - void glGetPathDashArrayNV (GLuint name, GLfloat* dashArray) - GLfloat glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments) - void glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics) - void glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics) - void glGetPathParameterfvNV (GLuint name, GLenum param, GLfloat* value) - void glGetPathParameterivNV (GLuint name, GLenum param, GLint* value) - void glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing) - void glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat* value) - void glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint* value) - void glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) - GLboolean glIsPathNV (GLuint path) - GLboolean glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y) - GLboolean glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y) - void glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs) - void glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathCoverDepthFuncNV (GLenum zfunc) - void glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat* dashArray) - void glPathFogGenNV (GLenum genMode) - void glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathParameterfNV (GLuint path, GLenum pname, GLfloat value) - void glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat* value) - void glPathParameteriNV (GLuint path, GLenum pname, GLint value) - void glPathParameterivNV (GLuint path, GLenum pname, const GLint* value) - void glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units) - void glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask) - void glPathStringNV (GLuint path, GLenum format, GLsizei length, const void* pathString) - void glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs) - GLboolean glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY) - void glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask) - void glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask) - void glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues) - void glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range b/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range deleted file mode 100644 index 8783ea11fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_pixel_data_range -http://www.opengl.org/registry/specs/gl/NV/pixel_data_range.txt -GL_NV_pixel_data_range - GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 - GL_READ_PIXEL_DATA_RANGE_NV 0x8879 - GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A - GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B - GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C - GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D - void glFlushPixelDataRangeNV (GLenum target) - void glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite b/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite deleted file mode 100644 index f6f96957d9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_point_sprite -http://www.opengl.org/registry/specs/gl/NV/point_sprite.txt -GL_NV_point_sprite - GL_POINT_SPRITE_NV 0x8861 - GL_COORD_REPLACE_NV 0x8862 - GL_POINT_SPRITE_R_MODE_NV 0x8863 - void glPointParameteriNV (GLenum pname, GLint param) - void glPointParameterivNV (GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video b/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video deleted file mode 100644 index 893c74c8e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_present_video -http://www.opengl.org/registry/specs/NV/present_video.txt -GL_NV_present_video - GL_FRAME_NV 0x8E26 - GL_FIELDS_NV 0x8E27 - GL_CURRENT_TIME_NV 0x8E28 - GL_NUM_FILL_STREAMS_NV 0x8E29 - GL_PRESENT_TIME_NV 0x8E2A - GL_PRESENT_DURATION_NV 0x8E2B - void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params) - void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params) - void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params) - void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params) - void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) - void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart b/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart deleted file mode 100644 index 7d9995c83f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_primitive_restart -http://www.opengl.org/registry/specs/gl/NV/primitive_restart.txt -GL_NV_primitive_restart - GL_PRIMITIVE_RESTART_NV 0x8558 - GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 - void glPrimitiveRestartIndexNV (GLuint index) - void glPrimitiveRestartNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners b/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners deleted file mode 100644 index 684f7b3cfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners +++ /dev/null @@ -1,67 +0,0 @@ -GL_NV_register_combiners -http://www.opengl.org/registry/specs/gl/NV/register_combiners.txt -GL_NV_register_combiners - GL_REGISTER_COMBINERS_NV 0x8522 - GL_VARIABLE_A_NV 0x8523 - GL_VARIABLE_B_NV 0x8524 - GL_VARIABLE_C_NV 0x8525 - GL_VARIABLE_D_NV 0x8526 - GL_VARIABLE_E_NV 0x8527 - GL_VARIABLE_F_NV 0x8528 - GL_VARIABLE_G_NV 0x8529 - GL_CONSTANT_COLOR0_NV 0x852A - GL_CONSTANT_COLOR1_NV 0x852B - GL_PRIMARY_COLOR_NV 0x852C - GL_SECONDARY_COLOR_NV 0x852D - GL_SPARE0_NV 0x852E - GL_SPARE1_NV 0x852F - GL_DISCARD_NV 0x8530 - GL_E_TIMES_F_NV 0x8531 - GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 - GL_UNSIGNED_IDENTITY_NV 0x8536 - GL_UNSIGNED_INVERT_NV 0x8537 - GL_EXPAND_NORMAL_NV 0x8538 - GL_EXPAND_NEGATE_NV 0x8539 - GL_HALF_BIAS_NORMAL_NV 0x853A - GL_HALF_BIAS_NEGATE_NV 0x853B - GL_SIGNED_IDENTITY_NV 0x853C - GL_SIGNED_NEGATE_NV 0x853D - GL_SCALE_BY_TWO_NV 0x853E - GL_SCALE_BY_FOUR_NV 0x853F - GL_SCALE_BY_ONE_HALF_NV 0x8540 - GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 - GL_COMBINER_INPUT_NV 0x8542 - GL_COMBINER_MAPPING_NV 0x8543 - GL_COMBINER_COMPONENT_USAGE_NV 0x8544 - GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 - GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 - GL_COMBINER_MUX_SUM_NV 0x8547 - GL_COMBINER_SCALE_NV 0x8548 - GL_COMBINER_BIAS_NV 0x8549 - GL_COMBINER_AB_OUTPUT_NV 0x854A - GL_COMBINER_CD_OUTPUT_NV 0x854B - GL_COMBINER_SUM_OUTPUT_NV 0x854C - GL_MAX_GENERAL_COMBINERS_NV 0x854D - GL_NUM_GENERAL_COMBINERS_NV 0x854E - GL_COLOR_SUM_CLAMP_NV 0x854F - GL_COMBINER0_NV 0x8550 - GL_COMBINER1_NV 0x8551 - GL_COMBINER2_NV 0x8552 - GL_COMBINER3_NV 0x8553 - GL_COMBINER4_NV 0x8554 - GL_COMBINER5_NV 0x8555 - GL_COMBINER6_NV 0x8556 - GL_COMBINER7_NV 0x8557 - void glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) - void glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum) - void glCombinerParameterfNV (GLenum pname, GLfloat param) - void glCombinerParameterfvNV (GLenum pname, const GLfloat* params) - void glCombinerParameteriNV (GLenum pname, GLint param) - void glCombinerParameterivNV (GLenum pname, const GLint* params) - void glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) - void glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params) - void glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params) - void glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat* params) - void glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint* params) - void glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat* params) - void glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 deleted file mode 100644 index 3368f4d2dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_register_combiners2 -http://www.opengl.org/registry/specs/gl/NV/register_combiners2.txt -GL_NV_register_combiners2 - GL_PER_STAGE_CONSTANTS_NV 0x8535 - void glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat* params) - void glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters deleted file mode 100644 index 91a70cfbcd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_atomic_counters -http://www.opengl.org/registry/specs/gl/NV/shader_atomic_counters.txt -GL_NV_shader_atomic_counters diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float deleted file mode 100644 index 9376c5ffbc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_atomic_float -http://www.opengl.org/registry/specs/gl/NV/shader_atomic_float.txt -GL_NV_shader_atomic_float diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load deleted file mode 100644 index d46da164d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load +++ /dev/null @@ -1,19 +0,0 @@ -GL_NV_shader_buffer_load -http://www.opengl.org/registry/specs/gl/NV/shader_buffer_load.txt -GL_NV_shader_buffer_load - GL_BUFFER_GPU_ADDRESS_NV 0x8F1D - GL_GPU_ADDRESS_NV 0x8F34 - GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 - void glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT* params) - void glGetIntegerui64vNV (GLenum value, GLuint64EXT* result) - void glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT* params) - GLboolean glIsBufferResidentNV (GLenum target) - GLboolean glIsNamedBufferResidentNV (GLuint buffer) - void glMakeBufferNonResidentNV (GLenum target) - void glMakeBufferResidentNV (GLenum target, GLenum access) - void glMakeNamedBufferNonResidentNV (GLuint buffer) - void glMakeNamedBufferResidentNV (GLuint buffer, GLenum access) - void glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value) - void glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glUniformui64NV (GLint location, GLuint64EXT value) - void glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object deleted file mode 100644 index 23990fc41f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_storage_buffer_object -http://www.opengl.org/registry/specs/gl/NV/shader_storage_buffer_object.txt -GL_NV_shader_storage_buffer_object diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 deleted file mode 100644 index b663c974dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_tessellation_program5 -http://www.opengl.org/registry/specs/NV/tessellation_program5.txt -GL_NV_gpu_program5 - GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 - GL_TESS_CONTROL_PROGRAM_NV 0x891E - GL_TESS_EVALUATION_PROGRAM_NV 0x891F - GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 - GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss b/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss deleted file mode 100644 index d3cb134d50..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_texgen_emboss -http://www.opengl.org/registry/specs/gl/NV/texgen_emboss.txt -GL_NV_texgen_emboss - GL_EMBOSS_LIGHT_NV 0x855D - GL_EMBOSS_CONSTANT_NV 0x855E - GL_EMBOSS_MAP_NV 0x855F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection b/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection deleted file mode 100644 index 3ca2180900..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_texgen_reflection -http://www.opengl.org/registry/specs/gl/NV/texgen_reflection.txt -GL_NV_texgen_reflection - GL_NORMAL_MAP_NV 0x8511 - GL_REFLECTION_MAP_NV 0x8512 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier deleted file mode 100644 index c3a08fded5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_texture_barrier -http://www.opengl.org/registry/specs/gl/NV/texture_barrier.txt -GL_NV_texture_barrier - void glTextureBarrierNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc deleted file mode 100644 index 2fe9071d23..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_texture_compression_vtc -http://www.opengl.org/registry/specs/gl/NV/texture_compression_vtc.txt -GL_NV_texture_compression_vtc diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 deleted file mode 100644 index 11445f45d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_texture_env_combine4 -http://www.opengl.org/registry/specs/gl/NV/texture_env_combine4.txt -GL_NV_texture_env_combine4 - GL_COMBINE4_NV 0x8503 - GL_SOURCE3_RGB_NV 0x8583 - GL_SOURCE3_ALPHA_NV 0x858B - GL_OPERAND3_RGB_NV 0x8593 - GL_OPERAND3_ALPHA_NV 0x859B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal deleted file mode 100644 index aadb93d859..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_texture_expand_normal -http://www.opengl.org/registry/specs/gl/NV/texture_expand_normal.txt -GL_NV_texture_expand_normal - GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample deleted file mode 100644 index 942abc98cf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_texture_multisample -http://www.opengl.org/registry/specs/gl/NV/texture_multisample.txt -GL_NV_texture_multisample - GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 - GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 - void glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) - void glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) - void glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle deleted file mode 100644 index 2cf7e54974..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_texture_rectangle -http://www.opengl.org/registry/specs/gl/NV/texture_rectangle.txt -GL_NV_texture_rectangle - GL_TEXTURE_RECTANGLE_NV 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader deleted file mode 100644 index 4f5bd09a9e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader +++ /dev/null @@ -1,76 +0,0 @@ -GL_NV_texture_shader -http://www.opengl.org/registry/specs/gl/NV/texture_shader.txt -GL_NV_texture_shader - GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C - GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D - GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E - GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 - GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA - GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB - GL_DSDT_MAG_INTENSITY_NV 0x86DC - GL_SHADER_CONSISTENT_NV 0x86DD - GL_TEXTURE_SHADER_NV 0x86DE - GL_SHADER_OPERATION_NV 0x86DF - GL_CULL_MODES_NV 0x86E0 - GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 - GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 - GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 - GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 - GL_CONST_EYE_NV 0x86E5 - GL_PASS_THROUGH_NV 0x86E6 - GL_CULL_FRAGMENT_NV 0x86E7 - GL_OFFSET_TEXTURE_2D_NV 0x86E8 - GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 - GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA - GL_DOT_PRODUCT_NV 0x86EC - GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED - GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE - GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 - GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 - GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 - GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 - GL_HILO_NV 0x86F4 - GL_DSDT_NV 0x86F5 - GL_DSDT_MAG_NV 0x86F6 - GL_DSDT_MAG_VIB_NV 0x86F7 - GL_HILO16_NV 0x86F8 - GL_SIGNED_HILO_NV 0x86F9 - GL_SIGNED_HILO16_NV 0x86FA - GL_SIGNED_RGBA_NV 0x86FB - GL_SIGNED_RGBA8_NV 0x86FC - GL_SIGNED_RGB_NV 0x86FE - GL_SIGNED_RGB8_NV 0x86FF - GL_SIGNED_LUMINANCE_NV 0x8701 - GL_SIGNED_LUMINANCE8_NV 0x8702 - GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 - GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 - GL_SIGNED_ALPHA_NV 0x8705 - GL_SIGNED_ALPHA8_NV 0x8706 - GL_SIGNED_INTENSITY_NV 0x8707 - GL_SIGNED_INTENSITY8_NV 0x8708 - GL_DSDT8_NV 0x8709 - GL_DSDT8_MAG8_NV 0x870A - GL_DSDT8_MAG8_INTENSITY8_NV 0x870B - GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C - GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D - GL_HI_SCALE_NV 0x870E - GL_LO_SCALE_NV 0x870F - GL_DS_SCALE_NV 0x8710 - GL_DT_SCALE_NV 0x8711 - GL_MAGNITUDE_SCALE_NV 0x8712 - GL_VIBRANCE_SCALE_NV 0x8713 - GL_HI_BIAS_NV 0x8714 - GL_LO_BIAS_NV 0x8715 - GL_DS_BIAS_NV 0x8716 - GL_DT_BIAS_NV 0x8717 - GL_MAGNITUDE_BIAS_NV 0x8718 - GL_VIBRANCE_BIAS_NV 0x8719 - GL_TEXTURE_BORDER_VALUES_NV 0x871A - GL_TEXTURE_HI_SIZE_NV 0x871B - GL_TEXTURE_LO_SIZE_NV 0x871C - GL_TEXTURE_DS_SIZE_NV 0x871D - GL_TEXTURE_DT_SIZE_NV 0x871E - GL_TEXTURE_MAG_SIZE_NV 0x871F - GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 - GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 - GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 deleted file mode 100644 index a9e6bac619..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 +++ /dev/null @@ -1,31 +0,0 @@ -GL_NV_texture_shader2 -http://www.opengl.org/registry/specs/gl/NV/texture_shader2.txt -GL_NV_texture_shader2 - GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA - GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB - GL_DSDT_MAG_INTENSITY_NV 0x86DC - GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF - GL_HILO_NV 0x86F4 - GL_DSDT_NV 0x86F5 - GL_DSDT_MAG_NV 0x86F6 - GL_DSDT_MAG_VIB_NV 0x86F7 - GL_HILO16_NV 0x86F8 - GL_SIGNED_HILO_NV 0x86F9 - GL_SIGNED_HILO16_NV 0x86FA - GL_SIGNED_RGBA_NV 0x86FB - GL_SIGNED_RGBA8_NV 0x86FC - GL_SIGNED_RGB_NV 0x86FE - GL_SIGNED_RGB8_NV 0x86FF - GL_SIGNED_LUMINANCE_NV 0x8701 - GL_SIGNED_LUMINANCE8_NV 0x8702 - GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 - GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 - GL_SIGNED_ALPHA_NV 0x8705 - GL_SIGNED_ALPHA8_NV 0x8706 - GL_SIGNED_INTENSITY_NV 0x8707 - GL_SIGNED_INTENSITY8_NV 0x8708 - GL_DSDT8_NV 0x8709 - GL_DSDT8_MAG8_NV 0x870A - GL_DSDT8_MAG8_INTENSITY8_NV 0x870B - GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C - GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 deleted file mode 100644 index c75823ac8d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 +++ /dev/null @@ -1,20 +0,0 @@ -GL_NV_texture_shader3 -http://www.opengl.org/registry/specs/gl/NV/texture_shader3.txt -GL_NV_texture_shader3 - GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 - GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 - GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 - GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 - GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 - GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 - GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A - GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B - GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C - GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D - GL_HILO8_NV 0x885E - GL_SIGNED_HILO8_NV 0x885F - GL_FORCE_BLUE_TO_ONE_NV 0x8860 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback b/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback deleted file mode 100644 index fce47571e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback +++ /dev/null @@ -1,39 +0,0 @@ -GL_NV_transform_feedback -http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt -GL_NV_transform_feedback - GL_BACK_PRIMARY_COLOR_NV 0x8C77 - GL_BACK_SECONDARY_COLOR_NV 0x8C78 - GL_TEXTURE_COORD_NV 0x8C79 - GL_CLIP_DISTANCE_NV 0x8C7A - GL_VERTEX_ID_NV 0x8C7B - GL_PRIMITIVE_ID_NV 0x8C7C - GL_GENERIC_ATTRIB_NV 0x8C7D - GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 - GL_ACTIVE_VARYINGS_NV 0x8C81 - GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 - GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 - GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 - GL_PRIMITIVES_GENERATED_NV 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 - GL_RASTERIZER_DISCARD_NV 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B - GL_INTERLEAVED_ATTRIBS_NV 0x8C8C - GL_SEPARATE_ATTRIBS_NV 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - void glBeginTransformFeedbackNV (GLenum primitiveMode) - void glEndTransformFeedbackNV (void) - void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode) - void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer) - void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode) - void glActiveVaryingNV (GLuint program, const GLchar *name) - GLint glGetVaryingLocationNV (GLuint program, const GLchar *name) - void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) - void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 deleted file mode 100644 index 771861f8b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 +++ /dev/null @@ -1,14 +0,0 @@ -GL_NV_transform_feedback2 -http://www.opengl.org/registry/specs/gl/NV/transform_feedback2.txt -GL_NV_transform_feedback2 - GL_TRANSFORM_FEEDBACK_NV 0x8E22 - GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 - GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 - GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 - void glBindTransformFeedbackNV (GLenum target, GLuint id) - void glDeleteTransformFeedbacksNV (GLsizei n, const GLuint* ids) - void glDrawTransformFeedbackNV (GLenum mode, GLuint id) - void glGenTransformFeedbacksNV (GLsizei n, GLuint* ids) - GLboolean glIsTransformFeedbackNV (GLuint id) - void glPauseTransformFeedbackNV (void) - void glResumeTransformFeedbackNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop b/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop deleted file mode 100644 index a2b68b2a68..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_vdpau_interop -http://www.opengl.org/registry/specs/NV/vdpau_interop.txt -GL_NV_vdpau_interop - GL_SURFACE_STATE_NV 0x86EB - GL_SURFACE_REGISTERED_NV 0x86FD - GL_SURFACE_MAPPED_NV 0x8700 - GL_WRITE_DISCARD_NV 0x88BE - void glVDPAUFiniNV (void) - void glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values) - void glVDPAUInitNV (const void* vdpDevice, const GLvoid*getProcAddress) - void glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface) - void glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) - GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - void glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access) - void glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) - void glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface) - typedef GLintptr GLvdpauSurfaceNV diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range deleted file mode 100644 index 7ba11bdffd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_vertex_array_range -http://www.opengl.org/registry/specs/gl/NV/vertex_array_range.txt -GL_NV_vertex_array_range - GL_VERTEX_ARRAY_RANGE_NV 0x851D - GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E - GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 - GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 - void glFlushVertexArrayRangeNV (void) - void glVertexArrayRangeNV (GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 deleted file mode 100644 index 57b6cb0f9b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_array_range2 -http://www.opengl.org/registry/specs/gl/NV/vertex_array_range2.txt -GL_NV_vertex_array_range2 - GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit deleted file mode 100644 index 833a167029..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit +++ /dev/null @@ -1,24 +0,0 @@ -GL_NV_vertex_attrib_integer_64bit -http://www.opengl.org/registry/specs/gl/NV/vertex_attrib_integer_64bit.txt -GL_NV_vertex_attrib_integer_64bit - GL_INT64_NV 0x140E - GL_UNSIGNED_INT64_NV 0x140F - void glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT* params) - void glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT* params) - void glVertexAttribL1i64NV (GLuint index, GLint64EXT x) - void glVertexAttribL1i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x) - void glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y) - void glVertexAttribL2i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y) - void glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glVertexAttribL3i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glVertexAttribL4i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory deleted file mode 100644 index 4e65f4da7d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory +++ /dev/null @@ -1,40 +0,0 @@ -GL_NV_vertex_buffer_unified_memory -http://www.opengl.org/registry/specs/gl/NV/vertex_buffer_unified_memory.txt -GL_NV_vertex_buffer_unified_memory - GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E - GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F - GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 - GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 - GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 - GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 - GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 - GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 - GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 - GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 - GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 - GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 - GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A - GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B - GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C - GL_COLOR_ARRAY_LENGTH_NV 0x8F2D - GL_INDEX_ARRAY_LENGTH_NV 0x8F2E - GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F - GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 - GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 - GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 - GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 - void glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length) - void glColorFormatNV (GLint size, GLenum type, GLsizei stride) - void glEdgeFlagFormatNV (GLsizei stride) - void glFogCoordFormatNV (GLenum type, GLsizei stride) - void glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT result[]) - void glIndexFormatNV (GLenum type, GLsizei stride) - void glNormalFormatNV (GLenum type, GLsizei stride) - void glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride) - void glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride) - void glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride) - void glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride) - void glVertexFormatNV (GLint size, GLenum type, GLsizei stride) - GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 - GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 - GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program deleted file mode 100644 index 21d1cd2d66..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program +++ /dev/null @@ -1,150 +0,0 @@ -GL_NV_vertex_program -http://www.opengl.org/registry/specs/gl/NV/vertex_program.txt -GL_NV_vertex_program - GL_VERTEX_PROGRAM_NV 0x8620 - GL_VERTEX_STATE_PROGRAM_NV 0x8621 - GL_ATTRIB_ARRAY_SIZE_NV 0x8623 - GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 - GL_ATTRIB_ARRAY_TYPE_NV 0x8625 - GL_CURRENT_ATTRIB_NV 0x8626 - GL_PROGRAM_LENGTH_NV 0x8627 - GL_PROGRAM_STRING_NV 0x8628 - GL_MODELVIEW_PROJECTION_NV 0x8629 - GL_IDENTITY_NV 0x862A - GL_INVERSE_NV 0x862B - GL_TRANSPOSE_NV 0x862C - GL_INVERSE_TRANSPOSE_NV 0x862D - GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E - GL_MAX_TRACK_MATRICES_NV 0x862F - GL_MATRIX0_NV 0x8630 - GL_MATRIX1_NV 0x8631 - GL_MATRIX2_NV 0x8632 - GL_MATRIX3_NV 0x8633 - GL_MATRIX4_NV 0x8634 - GL_MATRIX5_NV 0x8635 - GL_MATRIX6_NV 0x8636 - GL_MATRIX7_NV 0x8637 - GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 - GL_CURRENT_MATRIX_NV 0x8641 - GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 - GL_PROGRAM_PARAMETER_NV 0x8644 - GL_ATTRIB_ARRAY_POINTER_NV 0x8645 - GL_PROGRAM_TARGET_NV 0x8646 - GL_PROGRAM_RESIDENT_NV 0x8647 - GL_TRACK_MATRIX_NV 0x8648 - GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 - GL_VERTEX_PROGRAM_BINDING_NV 0x864A - GL_PROGRAM_ERROR_POSITION_NV 0x864B - GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 - GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 - GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 - GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 - GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 - GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 - GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 - GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 - GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 - GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 - GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A - GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B - GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C - GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D - GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E - GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F - GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 - GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 - GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 - GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 - GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 - GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 - GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 - GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 - GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 - GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 - GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A - GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B - GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C - GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D - GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E - GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F - GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 - GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 - GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 - GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 - GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 - GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 - GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 - GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 - GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 - GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 - GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A - GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B - GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C - GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D - GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E - GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F - GLboolean glAreProgramsResidentNV (GLsizei n, const GLuint* ids, GLboolean *residences) - void glBindProgramNV (GLenum target, GLuint id) - void glDeleteProgramsNV (GLsizei n, const GLuint* ids) - void glExecuteProgramNV (GLenum target, GLuint id, const GLfloat* params) - void glGenProgramsNV (GLsizei n, GLuint* ids) - void glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble* params) - void glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params) - void glGetProgramStringNV (GLuint id, GLenum pname, GLubyte* program) - void glGetProgramivNV (GLuint id, GLenum pname, GLint* params) - void glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint* params) - void glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid** pointer) - void glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble* params) - void glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribivNV (GLuint index, GLenum pname, GLint* params) - GLboolean glIsProgramNV (GLuint id) - void glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte* program) - void glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble* params) - void glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat* params) - void glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei num, const GLdouble* params) - void glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei num, const GLfloat* params) - void glRequestResidentProgramsNV (GLsizei n, GLuint* ids) - void glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform) - void glVertexAttrib1dNV (GLuint index, GLdouble x) - void glVertexAttrib1dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib1fNV (GLuint index, GLfloat x) - void glVertexAttrib1fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib1sNV (GLuint index, GLshort x) - void glVertexAttrib1svNV (GLuint index, const GLshort* v) - void glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2svNV (GLuint index, const GLshort* v) - void glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3svNV (GLuint index, const GLshort* v) - void glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4svNV (GLuint index, const GLshort* v) - void glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4ubvNV (GLuint index, const GLubyte* v) - void glVertexAttribPointerNV (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glVertexAttribs1dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs1fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs1svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs2dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs2fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs2svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs3dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs3fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs3svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs4dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs4fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs4svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs4ubvNV (GLuint index, GLsizei n, const GLubyte* v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 deleted file mode 100644 index 32d7b09dad..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_vertex_program1_1 -http://www.opengl.org/registry/specs/gl/NV/vertex_program1_1.txt -GL_NV_vertex_program1_1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 deleted file mode 100644 index e8256b03f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_vertex_program2 -http://www.opengl.org/registry/specs/gl/NV/vertex_program2.txt -GL_NV_vertex_program2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option deleted file mode 100644 index 1fecc4c040..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_vertex_program2_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt -GL_NV_vertex_program2_option - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 deleted file mode 100644 index 6510e0649c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program3 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt -GL_NV_vertex_program3 - MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 deleted file mode 100644 index c51d08a5cd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt -GL_NV_gpu_program4 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture deleted file mode 100644 index 09675d531a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture +++ /dev/null @@ -1,44 +0,0 @@ -GL_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -GL_NV_video_capture - GL_VIDEO_BUFFER_NV 0x9020 - GL_VIDEO_BUFFER_BINDING_NV 0x9021 - GL_FIELD_UPPER_NV 0x9022 - GL_FIELD_LOWER_NV 0x9023 - GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 - GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 - GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 - GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 - GL_VIDEO_BUFFER_PITCH_NV 0x9028 - GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 - GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A - GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B - GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C - GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D - GL_PARTIAL_SUCCESS_NV 0x902E - GL_SUCCESS_NV 0x902F - GL_FAILURE_NV 0x9030 - GL_YCBYCR8_422_NV 0x9031 - GL_YCBAYCR8A_4224_NV 0x9032 - GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 - GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 - GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 - GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 - GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 - GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 - GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 - GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A - GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B - GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C - void glBeginVideoCaptureNV (GLuint video_capture_slot) - void glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset) - void glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture) - void glEndVideoCaptureNV (GLuint video_capture_slot) - void glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint* params) - GLenum glVideoCaptureNV (GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT *capture_time) - void glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params) - void glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params) - void glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params) - void glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params) - void glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params) - void glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates b/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates deleted file mode 100644 index ae4b655311..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates +++ /dev/null @@ -1,3 +0,0 @@ -GL_OES_byte_coordinates -http://www.opengl.org/registry/specs/gl/OES/OES_byte_coordinates.txt -GL_OES_byte_coordinates diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture b/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture deleted file mode 100644 index 2cdf65e9b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture +++ /dev/null @@ -1,13 +0,0 @@ -GL_OES_compressed_paletted_texture -http://www.opengl.org/registry/specs/gl/OES/OES_compressed_paletted_texture.txt -GL_OES_compressed_paletted_texture - GL_PALETTE4_RGB8_OES 0x8B90 - GL_PALETTE4_RGBA8_OES 0x8B91 - GL_PALETTE4_R5_G6_B5_OES 0x8B92 - GL_PALETTE4_RGBA4_OES 0x8B93 - GL_PALETTE4_RGB5_A1_OES 0x8B94 - GL_PALETTE8_RGB8_OES 0x8B95 - GL_PALETTE8_RGBA8_OES 0x8B96 - GL_PALETTE8_R5_G6_B5_OES 0x8B97 - GL_PALETTE8_RGBA4_OES 0x8B98 - GL_PALETTE8_RGB5_A1_OES 0x8B99 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format b/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format deleted file mode 100644 index 9248136ed4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format +++ /dev/null @@ -1,5 +0,0 @@ -GL_OES_read_format -http://www.opengl.org/registry/specs/gl/OES/OES_read_format.txt -GL_OES_read_format - GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A - GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision b/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision deleted file mode 100644 index 1e2091c658..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision +++ /dev/null @@ -1,9 +0,0 @@ -GL_OES_single_precision -http://www.opengl.org/registry/specs/gl/OES/OES_single_precision.txt -GL_OES_single_precision - void glClearDepthfOES (GLclampd depth) - void glClipPlanefOES (GLenum plane, const GLfloat* equation) - void glDepthRangefOES (GLclampf n, GLclampf f) - void glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) - void glGetClipPlanefOES (GLenum plane, GLfloat* equation) - void glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace b/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace deleted file mode 100644 index c18da1a111..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace +++ /dev/null @@ -1,5 +0,0 @@ -GL_OML_interlace -http://www.opengl.org/registry/specs/gl/OML/interlace.txt -GL_OML_interlace - GL_INTERLACE_OML 0x8980 - GL_INTERLACE_READ_OML 0x8981 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_resample b/Engine/lib/glew/auto/extensions/gl/GL_OML_resample deleted file mode 100644 index 342b2c48b7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_resample +++ /dev/null @@ -1,9 +0,0 @@ -GL_OML_resample -http://www.opengl.org/registry/specs/gl/OML/resample.txt -GL_OML_resample - GL_PACK_RESAMPLE_OML 0x8984 - GL_UNPACK_RESAMPLE_OML 0x8985 - GL_RESAMPLE_REPLICATE_OML 0x8986 - GL_RESAMPLE_ZERO_FILL_OML 0x8987 - GL_RESAMPLE_AVERAGE_OML 0x8988 - GL_RESAMPLE_DECIMATE_OML 0x8989 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample b/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample deleted file mode 100644 index 2a1fa866d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample +++ /dev/null @@ -1,5 +0,0 @@ -GL_OML_subsample -http://www.opengl.org/registry/specs/gl/OML/subsample.txt -GL_OML_subsample - GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 - GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints b/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints deleted file mode 100644 index a1bd97a1fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints +++ /dev/null @@ -1,23 +0,0 @@ -GL_PGI_misc_hints -http://www.opengl.org/registry/specs/gl/PGI/misc_hints.txt -GL_PGI_misc_hints - GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 - GL_CONSERVE_MEMORY_HINT_PGI 107005 - GL_RECLAIM_MEMORY_HINT_PGI 107006 - GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 - GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 - GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 - GL_ALWAYS_FAST_HINT_PGI 107020 - GL_ALWAYS_SOFT_HINT_PGI 107021 - GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 - GL_ALLOW_DRAW_WIN_HINT_PGI 107023 - GL_ALLOW_DRAW_FRG_HINT_PGI 107024 - GL_ALLOW_DRAW_MEM_HINT_PGI 107025 - GL_STRICT_DEPTHFUNC_HINT_PGI 107030 - GL_STRICT_LIGHTING_HINT_PGI 107031 - GL_STRICT_SCISSOR_HINT_PGI 107032 - GL_FULL_STIPPLE_HINT_PGI 107033 - GL_CLIP_NEAR_HINT_PGI 107040 - GL_CLIP_FAR_HINT_PGI 107041 - GL_WIDE_LINE_HINT_PGI 107042 - GL_BACK_NORMALS_HINT_PGI 107043 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints b/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints deleted file mode 100644 index 1761a8f723..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints +++ /dev/null @@ -1,25 +0,0 @@ -GL_PGI_vertex_hints -http://www.opengl.org/registry/specs/gl/PGI/vertex_hints.txt -GL_PGI_vertex_hints - GL_VERTEX23_BIT_PGI 0x00000004 - GL_VERTEX4_BIT_PGI 0x00000008 - GL_COLOR3_BIT_PGI 0x00010000 - GL_COLOR4_BIT_PGI 0x00020000 - GL_EDGEFLAG_BIT_PGI 0x00040000 - GL_INDEX_BIT_PGI 0x00080000 - GL_MAT_AMBIENT_BIT_PGI 0x00100000 - GL_VERTEX_DATA_HINT_PGI 107050 - GL_VERTEX_CONSISTENT_HINT_PGI 107051 - GL_MATERIAL_SIDE_HINT_PGI 107052 - GL_MAX_VERTEX_HINT_PGI 107053 - GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 - GL_MAT_DIFFUSE_BIT_PGI 0x00400000 - GL_MAT_EMISSION_BIT_PGI 0x00800000 - GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 - GL_MAT_SHININESS_BIT_PGI 0x02000000 - GL_MAT_SPECULAR_BIT_PGI 0x04000000 - GL_NORMAL_BIT_PGI 0x08000000 - GL_TEXCOORD1_BIT_PGI 0x10000000 - GL_TEXCOORD2_BIT_PGI 0x20000000 - GL_TEXCOORD3_BIT_PGI 0x40000000 - GL_TEXCOORD4_BIT_PGI 0x80000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility deleted file mode 100644 index 2ead46fd7e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility +++ /dev/null @@ -1,35 +0,0 @@ -GL_REGAL_ES1_0_compatibility -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_ES1_0_compatibility - void glAlphaFuncx (GLenum func, GLclampx ref) - void glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) - void glClearDepthx (GLclampx depth) - void glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) - void glDepthRangex (GLclampx zNear, GLclampx zFar) - void glFogx (GLenum pname, GLfixed param) - void glFogxv (GLenum pname, const GLfixed* params) - void glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) - void glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) - void glLightModelx (GLenum pname, GLfixed param) - void glLightModelxv (GLenum pname, const GLfixed* params) - void glLightx (GLenum light, GLenum pname, GLfixed param) - void glLightxv (GLenum light, GLenum pname, const GLfixed* params) - void glLineWidthx (GLfixed width) - void glLoadMatrixx (const GLfixed* m) - void glMaterialx (GLenum face, GLenum pname, GLfixed param) - void glMaterialxv (GLenum face, GLenum pname, const GLfixed* params) - void glMultMatrixx (const GLfixed* m) - void glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) - void glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz) - void glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) - void glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) - void glPointSizex (GLfixed size) - void glPolygonOffsetx (GLfixed factor, GLfixed units) - void glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z) - void glSampleCoveragex (GLclampx value, GLboolean invert) - void glScalex (GLfixed x, GLfixed y, GLfixed z) - void glTexEnvx (GLenum target, GLenum pname, GLfixed param) - void glTexEnvxv (GLenum target, GLenum pname, const GLfixed* params) - void glTexParameterx (GLenum target, GLenum pname, GLfixed param) - void glTranslatex (GLfixed x, GLfixed y, GLfixed z) - typedef int GLclampx diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility deleted file mode 100644 index c760d62351..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility +++ /dev/null @@ -1,16 +0,0 @@ -GL_REGAL_ES1_1_compatibility -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_ES1_1_compatibility - void glClipPlanef (GLenum plane, const GLfloat* equation) - void glClipPlanex (GLenum plane, const GLfixed* equation) - void glGetClipPlanef (GLenum pname, GLfloat eqn[4]) - void glGetClipPlanex (GLenum pname, GLfixed eqn[4]) - void glGetFixedv (GLenum pname, GLfixed* params) - void glGetLightxv (GLenum light, GLenum pname, GLfixed* params) - void glGetMaterialxv (GLenum face, GLenum pname, GLfixed* params) - void glGetTexEnvxv (GLenum env, GLenum pname, GLfixed* params) - void glGetTexParameterxv (GLenum target, GLenum pname, GLfixed* params) - void glPointParameterx (GLenum pname, GLfixed param) - void glPointParameterxv (GLenum pname, const GLfixed* params) - void glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid* pointer) - void glTexParameterxv (GLenum target, GLenum pname, const GLfixed* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable deleted file mode 100644 index 6139a91e45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable +++ /dev/null @@ -1,13 +0,0 @@ -GL_REGAL_enable -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_enable - GL_ERROR_REGAL 0x9322 - GL_DEBUG_REGAL 0x9323 - GL_LOG_REGAL 0x9324 - GL_EMULATION_REGAL 0x9325 - GL_DRIVER_REGAL 0x9326 - GL_MISSING_REGAL 0x9360 - GL_TRACE_REGAL 0x9361 - GL_CACHE_REGAL 0x9362 - GL_CODE_REGAL 0x9363 - GL_STATISTICS_REGAL 0x9364 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string deleted file mode 100644 index 415f32a0e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string +++ /dev/null @@ -1,4 +0,0 @@ -GL_REGAL_error_string -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_error_string - const GLchar* glErrorStringREGAL (GLenum error) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query deleted file mode 100644 index a72934fa61..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query +++ /dev/null @@ -1,5 +0,0 @@ -GL_REGAL_extension_query -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_extension_query - GLboolean glGetExtensionREGAL (const GLchar* ext) - GLboolean glIsSupportedREGAL (const GLchar* ext) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log deleted file mode 100644 index fc42416404..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log +++ /dev/null @@ -1,14 +0,0 @@ -GL_REGAL_log -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_log - GL_LOG_ERROR_REGAL 0x9319 - GL_LOG_WARNING_REGAL 0x931A - GL_LOG_INFO_REGAL 0x931B - GL_LOG_APP_REGAL 0x931C - GL_LOG_DRIVER_REGAL 0x931D - GL_LOG_INTERNAL_REGAL 0x931E - GL_LOG_DEBUG_REGAL 0x931F - GL_LOG_STATUS_REGAL 0x9320 - GL_LOG_HTTP_REGAL 0x9321 - void glLogMessageCallbackREGAL (GLLOGPROCREGAL callback) - typedef void (APIENTRY *GLLOGPROCREGAL)(GLenum stream, GLsizei length, const GLchar *message, GLvoid *context) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates b/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates deleted file mode 100644 index 3902d5ffb9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates +++ /dev/null @@ -1,5 +0,0 @@ -GL_REND_screen_coordinates -http://www.opengl.org/registry/specs/gl/REND/screen_coordinates.txt -GL_REND_screen_coordinates - GL_SCREEN_COORDINATES_REND 0x8490 - GL_INVERTED_SCREEN_W_REND 0x8491 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc b/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc deleted file mode 100644 index fc02b37e4f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc +++ /dev/null @@ -1,9 +0,0 @@ -GL_S3_s3tc -http://www.opengl.org/registry/specs/gl/S3/s3tc.txt -GL_S3_s3tc - GL_RGB_S3TC 0x83A0 - GL_RGB4_S3TC 0x83A1 - GL_RGBA_S3TC 0x83A2 - GL_RGBA4_S3TC 0x83A3 - GL_RGBA_DXT5_S3TC 0x83A4 - GL_RGBA4_DXT5_S3TC 0x83A5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range deleted file mode 100644 index 18962bb246..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_SGIS_color_range -http://www.opengl.org/registry/specs/gl/SGIS/color_range.txt -GL_SGIS_color_range - GL_EXTENDED_RANGE_SGIS 0x85A5 - GL_MIN_RED_SGIS 0x85A6 - GL_MAX_RED_SGIS 0x85A7 - GL_MIN_GREEN_SGIS 0x85A8 - GL_MAX_GREEN_SGIS 0x85A9 - GL_MIN_BLUE_SGIS 0x85AA - GL_MAX_BLUE_SGIS 0x85AB - GL_MIN_ALPHA_SGIS 0x85AC - GL_MAX_ALPHA_SGIS 0x85AD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture deleted file mode 100644 index 1fc421f648..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_detail_texture -http://www.opengl.org/registry/specs/gl/SGIS/detail_texture.txt -GL_SGIS_detail_texture - void glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points) - void glGetDetailTexFuncSGIS (GLenum target, GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function deleted file mode 100644 index 964ea54865..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_fog_function -http://www.opengl.org/registry/specs/gl/SGIS/fog_func.txt -GL_SGIS_fog_function - void glFogFuncSGIS (GLsizei n, const GLfloat* points) - void glGetFogFuncSGIS (GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap deleted file mode 100644 index d1f448a6e6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_generate_mipmap -http://www.opengl.org/registry/specs/gl/SGIS/generate_mipmap.txt -GL_SGIS_generate_mipmap - GL_GENERATE_MIPMAP_SGIS 0x8191 - GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample deleted file mode 100644 index 53960cedfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample +++ /dev/null @@ -1,21 +0,0 @@ -GL_SGIS_multisample -http://www.opengl.org/registry/specs/gl/SGIS/multisample.txt -GL_SGIS_multisample - GL_MULTISAMPLE_SGIS 0x809D - GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E - GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F - GL_SAMPLE_MASK_SGIS 0x80A0 - GL_1PASS_SGIS 0x80A1 - GL_2PASS_0_SGIS 0x80A2 - GL_2PASS_1_SGIS 0x80A3 - GL_4PASS_0_SGIS 0x80A4 - GL_4PASS_1_SGIS 0x80A5 - GL_4PASS_2_SGIS 0x80A6 - GL_4PASS_3_SGIS 0x80A7 - GL_SAMPLE_BUFFERS_SGIS 0x80A8 - GL_SAMPLES_SGIS 0x80A9 - GL_SAMPLE_MASK_VALUE_SGIS 0x80AA - GL_SAMPLE_MASK_INVERT_SGIS 0x80AB - GL_SAMPLE_PATTERN_SGIS 0x80AC - void glSampleMaskSGIS (GLclampf value, GLboolean invert) - void glSamplePatternSGIS (GLenum pattern) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture deleted file mode 100644 index df7441b7d1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIS_pixel_texture -http://www.opengl.org/registry/specs/gl/SGIS/pixel_texture.txt -GL_SGIS_pixel_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen deleted file mode 100644 index f5379b8196..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen +++ /dev/null @@ -1,11 +0,0 @@ -GL_SGIS_point_line_texgen -http://www.opengl.org/registry/specs/gl/SGIS/point_line_texgen.txt -GL_SGIS_point_line_texgen - GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 - GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 - GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 - GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 - GL_EYE_POINT_SGIS 0x81F4 - GL_OBJECT_POINT_SGIS 0x81F5 - GL_EYE_LINE_SGIS 0x81F6 - GL_OBJECT_LINE_SGIS 0x81F7 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture deleted file mode 100644 index 1f55e90f15..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_sharpen_texture -http://www.opengl.org/registry/specs/gl/SGIS/sharpen_texture.txt -GL_SGIS_sharpen_texture - void glGetSharpenTexFuncSGIS (GLenum target, GLfloat* points) - void glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D deleted file mode 100644 index c5a3d51f6d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_texture4D -http://www.opengl.org/registry/specs/gl/SGIS/texture4D.txt -GL_SGIS_texture4D - void glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp deleted file mode 100644 index 46a02b17b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIS_texture_border_clamp -http://www.opengl.org/registry/specs/gl/SGIS/texture_border_clamp.txt -GL_SGIS_texture_border_clamp - GL_CLAMP_TO_BORDER_SGIS 0x812D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp deleted file mode 100644 index b8ffbce9f4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIS_texture_edge_clamp -http://www.opengl.org/registry/specs/gl/SGIS/texture_edge_clamp.txt -GL_SGIS_texture_edge_clamp - GL_CLAMP_TO_EDGE_SGIS 0x812F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 deleted file mode 100644 index bb9af98af2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_texture_filter4 -http://www.opengl.org/registry/specs/gl/SGIS/texture_filter4.txt -GL_SGIS_texture_filter4 - void glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat* weights) - void glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod deleted file mode 100644 index a46110a025..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIS_texture_lod -http://www.opengl.org/registry/specs/gl/SGIS/texture_lod.txt -GL_SGIS_texture_lod - GL_TEXTURE_MIN_LOD_SGIS 0x813A - GL_TEXTURE_MAX_LOD_SGIS 0x813B - GL_TEXTURE_BASE_LEVEL_SGIS 0x813C - GL_TEXTURE_MAX_LEVEL_SGIS 0x813D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select deleted file mode 100644 index e74b6abe49..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIS_texture_select -http://www.opengl.org/registry/specs/gl/SGIS/texture_select.txt -GL_SGIS_texture_select diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async deleted file mode 100644 index 5f0150ead5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async +++ /dev/null @@ -1,10 +0,0 @@ -GL_SGIX_async -http://www.opengl.org/registry/specs/gl/SGIX/async.txt -GL_SGIX_async - GL_ASYNC_MARKER_SGIX 0x8329 - void glAsyncMarkerSGIX (GLuint marker) - void glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range) - GLint glFinishAsyncSGIX (GLuint* markerp) - GLuint glGenAsyncMarkersSGIX (GLsizei range) - GLboolean glIsAsyncMarkerSGIX (GLuint marker) - GLint glPollAsyncSGIX (GLuint* markerp) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram deleted file mode 100644 index 2317e97d2a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_async_histogram -http://www.opengl.org/registry/specs/gl/SGIX/async_histogram.txt -GL_SGIX_async_histogram - GL_ASYNC_HISTOGRAM_SGIX 0x832C - GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel deleted file mode 100644 index 3435cb055f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel +++ /dev/null @@ -1,9 +0,0 @@ -GL_SGIX_async_pixel -http://www.opengl.org/registry/specs/gl/SGIX/async_pixel.txt -GL_SGIX_async_pixel - GL_ASYNC_TEX_IMAGE_SGIX 0x835C - GL_ASYNC_DRAW_PIXELS_SGIX 0x835D - GL_ASYNC_READ_PIXELS_SGIX 0x835E - GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F - GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 - GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax deleted file mode 100644 index 651004a7c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_blend_alpha_minmax -http://www.opengl.org/registry/specs/gl/SGIX/blend_alpha_minmax.txt -GL_SGIX_blend_alpha_minmax - GL_ALPHA_MIN_SGIX 0x8320 - GL_ALPHA_MAX_SGIX 0x8321 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap deleted file mode 100644 index be80ef67d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_clipmap -http://www.opengl.org/registry/specs/gl/SGIX/clipmap.txt -GL_SGIX_clipmap diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy deleted file mode 100644 index b912c42aa0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_convolution_accuracy -http://www.opengl.org/registry/specs/gl/SGIX/convolution_accuracy.txt -GL_SGIX_convolution_accuracy - GL_CONVOLUTION_HINT_SGIX 0x8316 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture deleted file mode 100644 index 38e348a065..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_SGIX_depth_texture -http://www.opengl.org/registry/specs/gl/SGIX/depth_texture.txt -GL_SGIX_depth_texture - GL_DEPTH_COMPONENT16_SGIX 0x81A5 - GL_DEPTH_COMPONENT24_SGIX 0x81A6 - GL_DEPTH_COMPONENT32_SGIX 0x81A7 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster deleted file mode 100644 index 65c955d28d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_flush_raster -http://www.opengl.org/registry/specs/gl/SGIX/flush_raster.txt -GL_SGIX_flush_raster - void glFlushRasterSGIX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset deleted file mode 100644 index be6bb83ca7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_fog_offset -http://www.opengl.org/registry/specs/gl/SGIX/fog_offset.txt -GL_SGIX_fog_offset - GL_FOG_OFFSET_SGIX 0x8198 - GL_FOG_OFFSET_VALUE_SGIX 0x8199 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture deleted file mode 100644 index 168affb259..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_fog_texture -http://www.opengl.org/registry/specs/gl/SGIX/fog_texture.txt -GL_SGIX_fog_texture - GL_TEXTURE_FOG_SGIX 0 - GL_FOG_PATCHY_FACTOR_SGIX 0 - GL_FRAGMENT_FOG_SGIX 0 - void glTextureFogSGIX (GLenum pname) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting deleted file mode 100644 index 098ae6006d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting +++ /dev/null @@ -1,20 +0,0 @@ -GL_SGIX_fragment_specular_lighting -http://www.opengl.org/registry/specs/gl/SGIX/fragment_specular_lighting.txt -GL_SGIX_fragment_specular_lighting - void glFragmentColorMaterialSGIX (GLenum face, GLenum mode) - void glFragmentLightModelfSGIX (GLenum pname, GLfloat param) - void glFragmentLightModelfvSGIX (GLenum pname, GLfloat* params) - void glFragmentLightModeliSGIX (GLenum pname, GLint param) - void glFragmentLightModelivSGIX (GLenum pname, GLint* params) - void glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param) - void glFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat* params) - void glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param) - void glFragmentLightivSGIX (GLenum light, GLenum pname, GLint* params) - void glFragmentMaterialfSGIX (GLenum face, GLenum pname, const GLfloat param) - void glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* params) - void glFragmentMaterialiSGIX (GLenum face, GLenum pname, const GLint param) - void glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* params) - void glGetFragmentLightfvSGIX (GLenum light, GLenum value, GLfloat* data) - void glGetFragmentLightivSGIX (GLenum light, GLenum value, GLint* data) - void glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* data) - void glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom deleted file mode 100644 index 24bfd258a3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_framezoom -http://www.opengl.org/registry/specs/gl/SGIX/framezoom.txt -GL_SGIX_framezoom - void glFrameZoomSGIX (GLint factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace deleted file mode 100644 index 9c83a90f2e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_interlace -http://www.opengl.org/registry/specs/gl/SGIX/interlace.txt -GL_SGIX_interlace - GL_INTERLACE_SGIX 0x8094 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 deleted file mode 100644 index 775b15524d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_ir_instrument1 -http://www.opengl.org/registry/specs/gl/SGIX/ir_instrument1.txt -GL_SGIX_ir_instrument1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority deleted file mode 100644 index 713b8c9053..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_list_priority -http://www.opengl.org/registry/specs/gl/SGIX/list_priority.txt -GL_SGIX_list_priority diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture deleted file mode 100644 index f84a66bbeb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_pixel_texture -http://www.opengl.org/registry/specs/gl/SGIX/sgix_pixel_texture.txt -GL_SGIX_pixel_texture - void glPixelTexGenSGIX (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits deleted file mode 100644 index d14788fa67..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_pixel_texture_bits -http://www.opengl.org/registry/specs/gl/SGIX/pixel_texture_bits.txt -GL_SGIX_pixel_texture_bits diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane deleted file mode 100644 index 5b27c9de29..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_reference_plane -http://www.opengl.org/registry/specs/gl/SGIX/reference_plane.txt -GL_SGIX_reference_plane - void glReferencePlaneSGIX (const GLdouble* equation) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample deleted file mode 100644 index 5569c1f51d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample +++ /dev/null @@ -1,8 +0,0 @@ -GL_SGIX_resample -http://www.opengl.org/registry/specs/gl/SGIX/resample.txt -GL_SGIX_resample - GL_PACK_RESAMPLE_SGIX 0x842E - GL_UNPACK_RESAMPLE_SGIX 0x842F - GL_RESAMPLE_DECIMATE_SGIX 0x8430 - GL_RESAMPLE_REPLICATE_SGIX 0x8433 - GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow deleted file mode 100644 index 2b34cc83a9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_shadow -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt -GL_SGIX_shadow - GL_TEXTURE_COMPARE_SGIX 0x819A - GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B - GL_TEXTURE_LEQUAL_R_SGIX 0x819C - GL_TEXTURE_GEQUAL_R_SGIX 0x819D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient deleted file mode 100644 index 19d9898ce5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_shadow_ambient -http://www.opengl.org/registry/specs/gl/SGIX/shadow_ambient.txt -GL_SGIX_shadow_ambient - GL_SHADOW_AMBIENT_SGIX 0x80BF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite deleted file mode 100644 index d501097d3a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_sprite -http://www.opengl.org/registry/specs/gl/SGIX/sprite.txt -GL_SGIX_sprite - void glSpriteParameterfSGIX (GLenum pname, GLfloat param) - void glSpriteParameterfvSGIX (GLenum pname, GLfloat* params) - void glSpriteParameteriSGIX (GLenum pname, GLint param) - void glSpriteParameterivSGIX (GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer deleted file mode 100644 index 65bbf5daf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_tag_sample_buffer -http://www.opengl.org/registry/specs/gl/SGIX/tag_sample_buffer.txt -GL_SGIX_tag_sample_buffer - void glTagSampleBufferSGIX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env deleted file mode 100644 index cc4d1e239a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_texture_add_env -http://www.opengl.org/registry/specs/gl/SGIX/texture_env_add.txt -GL_SGIX_texture_add_env diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp deleted file mode 100644 index 6c0265dc47..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp +++ /dev/null @@ -1,6 +0,0 @@ -GL_SGIX_texture_coordinate_clamp -http://www.opengl.org/registry/specs/gl/SGIX/texture_coordinate_clamp.txt -GL_SGIX_texture_coordinate_clamp - GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 - GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A - GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias deleted file mode 100644 index f2499f71c1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_texture_lod_bias -http://www.opengl.org/registry/specs/gl/SGIX/texture_lod_bias.txt -GL_SGIX_texture_lod_bias diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer deleted file mode 100644 index 7238f46f14..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_texture_multi_buffer -http://www.opengl.org/registry/specs/gl/SGIX/texture_multi_buffer.txt -GL_SGIX_texture_multi_buffer - GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range deleted file mode 100644 index 6b2761bdc4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range +++ /dev/null @@ -1,31 +0,0 @@ -GL_SGIX_texture_range -http://www.opengl.org/registry/specs/gl/SGIX/texture_range.txt -GL_SGIX_texture_range - GL_RGB_SIGNED_SGIX 0x85E0 - GL_RGBA_SIGNED_SGIX 0x85E1 - GL_ALPHA_SIGNED_SGIX 0x85E2 - GL_LUMINANCE_SIGNED_SGIX 0x85E3 - GL_INTENSITY_SIGNED_SGIX 0x85E4 - GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 - GL_RGB16_SIGNED_SGIX 0x85E6 - GL_RGBA16_SIGNED_SGIX 0x85E7 - GL_ALPHA16_SIGNED_SGIX 0x85E8 - GL_LUMINANCE16_SIGNED_SGIX 0x85E9 - GL_INTENSITY16_SIGNED_SGIX 0x85EA - GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB - GL_RGB_EXTENDED_RANGE_SGIX 0x85EC - GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED - GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE - GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF - GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 - GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 - GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 - GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 - GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 - GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 - GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 - GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 - GL_MIN_LUMINANCE_SGIS 0x85F8 - GL_MAX_LUMINANCE_SGIS 0x85F9 - GL_MIN_INTENSITY_SGIS 0x85FA - GL_MAX_INTENSITY_SGIS 0x85FB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias deleted file mode 100644 index dc6e5bd141..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_texture_scale_bias -http://www.opengl.org/registry/specs/gl/SGIX/texture_scale_bias.txt -GL_SGIX_texture_scale_bias - GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 - GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A - GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B - GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip deleted file mode 100644 index 8412b7c442..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_vertex_preclip -http://www.opengl.org/registry/specs/gl/SGIX/vertex_preclip.txt -GL_SGIX_vertex_preclip - GL_VERTEX_PRECLIP_SGIX 0x83EE - GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint deleted file mode 100644 index 42c56a5d26..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_vertex_preclip_hint -http://www.opengl.org/registry/specs/gl/SGIX/vertex_preclip.txt -GL_SGIX_vertex_preclip_hint - GL_VERTEX_PRECLIP_SGIX 0x83EE - GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb deleted file mode 100644 index 3f553e0020..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_ycrcb -http://www.opengl.org/registry/specs/gl/SGIX/ycrcb.txt -GL_SGIX_ycrcb diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix b/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix deleted file mode 100644 index 49dee1df47..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix +++ /dev/null @@ -1,14 +0,0 @@ -GL_SGI_color_matrix -http://www.opengl.org/registry/specs/gl/SGI/color_matrix.txt -GL_SGI_color_matrix - GL_COLOR_MATRIX_SGI 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table b/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table deleted file mode 100644 index efa027e9c0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table +++ /dev/null @@ -1,26 +0,0 @@ -GL_SGI_color_table -http://www.opengl.org/registry/specs/gl/SGI/color_table.txt -GL_SGI_color_table - GL_COLOR_TABLE_SGI 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 - GL_PROXY_COLOR_TABLE_SGI 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 - GL_COLOR_TABLE_SCALE_SGI 0x80D6 - GL_COLOR_TABLE_BIAS_SGI 0x80D7 - GL_COLOR_TABLE_FORMAT_SGI 0x80D8 - GL_COLOR_TABLE_WIDTH_SGI 0x80D9 - GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA - GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB - GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF - void glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat* params) - void glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint* params) - void glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat* params) - void glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint* params) - void glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table b/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table deleted file mode 100644 index ceff38b456..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGI_texture_color_table -http://www.opengl.org/registry/specs/gl/SGI/texture_color_table.txt -GL_SGI_texture_color_table - GL_TEXTURE_COLOR_TABLE_SGI 0x80BC - GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data b/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data deleted file mode 100644 index ab77e7434b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data +++ /dev/null @@ -1,6 +0,0 @@ -GL_SUNX_constant_data -http://www.opengl.org/registry/specs/gl/SUNX/constant_data.txt -GL_SUNX_constant_data - GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 - GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 - void glFinishTextureSUNX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes b/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes deleted file mode 100644 index 7a4250ea6e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_convolution_border_modes -http://www.opengl.org/registry/specs/gl/SUN/convolution_border_modes.txt -GL_SUN_convolution_border_modes - GL_WRAP_BORDER_SUN 0x81D4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha b/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha deleted file mode 100644 index d3378b6f11..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha +++ /dev/null @@ -1,13 +0,0 @@ -GL_SUN_global_alpha -http://www.opengl.org/registry/specs/gl/SUN/global_alpha.txt -GL_SUN_global_alpha - GL_GLOBAL_ALPHA_SUN 0x81D9 - GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA - void glGlobalAlphaFactorbSUN (GLbyte factor) - void glGlobalAlphaFactordSUN (GLdouble factor) - void glGlobalAlphaFactorfSUN (GLfloat factor) - void glGlobalAlphaFactoriSUN (GLint factor) - void glGlobalAlphaFactorsSUN (GLshort factor) - void glGlobalAlphaFactorubSUN (GLubyte factor) - void glGlobalAlphaFactoruiSUN (GLuint factor) - void glGlobalAlphaFactorusSUN (GLushort factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array b/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array deleted file mode 100644 index f35e2b76ce..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array +++ /dev/null @@ -1,5 +0,0 @@ -GL_SUN_mesh_array -http://www.opengl.org/registry/specs/gl/SUN/mesh_array.txt -GL_SUN_mesh_array - GL_QUAD_MESH_SUN 0x8614 - GL_TRIANGLE_MESH_SUN 0x8615 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels b/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels deleted file mode 100644 index faa55f972c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_read_video_pixels -http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt -GL_SUN_read_video_pixels - void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum b/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum deleted file mode 100644 index cacd7a520e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_slice_accum -http://www.opengl.org/registry/specs/gl/SUN/slice_accum.txt -GL_SUN_slice_accum - GL_SLICE_ACCUM_SUN 0x85CC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list b/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list deleted file mode 100644 index 2d38968265..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list +++ /dev/null @@ -1,27 +0,0 @@ -GL_SUN_triangle_list -http://www.opengl.org/registry/specs/gl/SUN/triangle_list.txt -GL_SUN_triangle_list - GL_RESTART_SUN 0x01 - GL_REPLACE_MIDDLE_SUN 0x02 - GL_REPLACE_OLDEST_SUN 0x03 - GL_TRIANGLE_LIST_SUN 0x81D7 - GL_REPLACEMENT_CODE_SUN 0x81D8 - GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 - GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 - GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 - GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 - GL_R1UI_V3F_SUN 0x85C4 - GL_R1UI_C4UB_V3F_SUN 0x85C5 - GL_R1UI_C3F_V3F_SUN 0x85C6 - GL_R1UI_N3F_V3F_SUN 0x85C7 - GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 - GL_R1UI_T2F_V3F_SUN 0x85C9 - GL_R1UI_T2F_N3F_V3F_SUN 0x85CA - GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB - void glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid *pointer) - void glReplacementCodeubSUN (GLubyte code) - void glReplacementCodeubvSUN (const GLubyte* code) - void glReplacementCodeuiSUN (GLuint code) - void glReplacementCodeuivSUN (const GLuint* code) - void glReplacementCodeusSUN (GLushort code) - void glReplacementCodeusvSUN (const GLushort* code) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex b/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex deleted file mode 100644 index 576e27e0d5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex +++ /dev/null @@ -1,43 +0,0 @@ -GL_SUN_vertex -http://www.opengl.org/registry/specs/gl/SUN/vertex.txt -GL_SUN_vertex - void glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glColor3fVertex3fvSUN (const GLfloat* c, const GLfloat *v) - void glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glColor4fNormal3fVertex3fvSUN (const GLfloat* c, const GLfloat *n, const GLfloat *v) - void glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y) - void glColor4ubVertex2fvSUN (const GLubyte* c, const GLfloat *v) - void glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glColor4ubVertex3fvSUN (const GLubyte* c, const GLfloat *v) - void glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glNormal3fVertex3fvSUN (const GLfloat* n, const GLfloat *v) - void glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *v) - void glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint* rc, const GLubyte *c, const GLfloat *v) - void glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *v) - void glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiVertex3fvSUN (const GLuint* rc, const GLfloat *v) - void glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *v) - void glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor4ubVertex3fvSUN (const GLfloat* tc, const GLubyte *c, const GLfloat *v) - void glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *n, const GLfloat *v) - void glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fVertex3fvSUN (const GLfloat* tc, const GLfloat *v) - void glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glTexCoord4fVertex4fvSUN (const GLfloat* tc, const GLfloat *v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading b/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading deleted file mode 100644 index 44d7ca5c6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading +++ /dev/null @@ -1,5 +0,0 @@ -GL_WIN_phong_shading -http://www.opengl.org/registry/specs/gl/WIN/phong_shading.txt -GL_WIN_phong_shading - GL_PHONG_WIN 0x80EA - GL_PHONG_HINT_WIN 0x80EB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog b/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog deleted file mode 100644 index 2cb203b43c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_specular_fog -http://www.opengl.org/registry/specs/gl/WIN/specular_fog.txt -GL_WIN_specular_fog - GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint b/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint deleted file mode 100644 index 6916189eb2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_swap_hint -http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp -GL_WIN_swap_hint - void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample deleted file mode 100644 index ec588470de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -WGL_3DFX_multisample - WGL_SAMPLE_BUFFERS_3DFX 0x2060 - WGL_SAMPLES_3DFX 0x2061 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control b/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control deleted file mode 100644 index e34c4d1fba..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control +++ /dev/null @@ -1,8 +0,0 @@ -WGL_3DL_stereo_control -http://www.opengl.org/registry/specs/gl/3DL/stereo_control.txt -WGL_3DL_stereo_control - WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 - WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 - WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 - WGL_STEREO_POLARITY_INVERT_3DL 0x2058 - BOOL wglSetStereoEmitterState3DL (HDC hDC, UINT uState) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association b/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association deleted file mode 100644 index ea9ce4ce4c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -WGL_AMD_gpu_association -http://www.opengl.org/registry/specs/gl/AMD/wgl_gpu_association.txt -WGL_AMD_gpu_association - WGL_GPU_VENDOR_AMD 0x1F00 - WGL_GPU_RENDERER_STRING_AMD 0x1F01 - WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - WGL_GPU_RAM_AMD 0x21A3 - WGL_GPU_CLOCK_AMD 0x21A4 - WGL_GPU_NUM_PIPES_AMD 0x21A5 - WGL_GPU_NUM_SIMD_AMD 0x21A6 - WGL_GPU_NUM_RB_AMD 0x21A7 - WGL_GPU_NUM_SPI_AMD 0x21A8 - VOID wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - HGLRC wglCreateAssociatedContextAMD (UINT id) - HGLRC wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int* attribList) - BOOL wglDeleteAssociatedContextAMD (HGLRC hglrc) - UINT wglGetContextGPUIDAMD (HGLRC hglrc) - HGLRC wglGetCurrentAssociatedContextAMD (void) - UINT wglGetGPUIDsAMD (UINT maxCount, UINT* ids) - INT wglGetGPUInfoAMD (UINT id, INT property, GLenum dataType, UINT size, void* data) - BOOL wglMakeAssociatedContextCurrentAMD (HGLRC hglrc) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region deleted file mode 100644 index fade0eb2e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region +++ /dev/null @@ -1,11 +0,0 @@ -WGL_ARB_buffer_region -http://www.opengl.org/registry/specs/gl/ARB/wgl_buffer_region.txt -WGL_ARB_buffer_region - WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 - WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 - WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 - WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 - HANDLE wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType) - VOID wglDeleteBufferRegionARB (HANDLE hRegion) - BOOL wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) - BOOL wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context deleted file mode 100644 index 20b3119c80..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context +++ /dev/null @@ -1,12 +0,0 @@ -WGL_ARB_create_context -http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt -WGL_ARB_create_context - WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 - WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 - WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 - WGL_CONTEXT_FLAGS_ARB 0x2094 - ERROR_INVALID_VERSION_ARB 0x2095 - ERROR_INVALID_PROFILE_ARB 0x2096 - HGLRC wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int* attribList) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile deleted file mode 100644 index cac5a44d4b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile +++ /dev/null @@ -1,6 +0,0 @@ -WGL_ARB_create_context_profile -http://www.opengl.org/registry/specs/gl/ARB/wgl_create_context.txt -WGL_ARB_create_context_profile - WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 - WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness deleted file mode 100644 index bb2fb9ffea..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_create_context_robustness -http://www.opengl.org/registry/specs/gl/ARB/wgl_create_context_robustness.txt -WGL_ARB_create_context_robustness - WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 - WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - WGL_NO_RESET_NOTIFICATION_ARB 0x8261 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string deleted file mode 100644 index 1fad95a42a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_extensions_string -http://www.opengl.org/registry/specs/gl/ARB/wgl_extensions_string.txt -WGL_ARB_extensions_string - const char* wglGetExtensionsStringARB (HDC hdc) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB deleted file mode 100644 index a913c72ba8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -WGL_ARB_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read deleted file mode 100644 index d91181d874..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_make_current_read -http://www.opengl.org/registry/specs/gl/ARB/wgl_make_current_read.txt -WGL_ARB_make_current_read - HDC wglGetCurrentReadDCARB (VOID) - BOOL wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) - ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 - ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample deleted file mode 100644 index 2eb8dace90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -WGL_ARB_multisample - WGL_SAMPLE_BUFFERS_ARB 0x2041 - WGL_SAMPLES_ARB 0x2042 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer deleted file mode 100644 index e5553ba71d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer +++ /dev/null @@ -1,17 +0,0 @@ -WGL_ARB_pbuffer -http://www.opengl.org/registry/specs/gl/ARB/wgl_pbuffer.txt -WGL_ARB_pbuffer - WGL_DRAW_TO_PBUFFER_ARB 0x202D - WGL_MAX_PBUFFER_PIXELS_ARB 0x202E - WGL_MAX_PBUFFER_WIDTH_ARB 0x202F - WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 - WGL_PBUFFER_LARGEST_ARB 0x2033 - WGL_PBUFFER_WIDTH_ARB 0x2034 - WGL_PBUFFER_HEIGHT_ARB 0x2035 - WGL_PBUFFER_LOST_ARB 0x2036 - HPBUFFERARB wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList) - BOOL wglDestroyPbufferARB (HPBUFFERARB hPbuffer) - HDC wglGetPbufferDCARB (HPBUFFERARB hPbuffer) - BOOL wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int* piValue) - int wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC) - DECLARE_HANDLE(HPBUFFERARB); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format deleted file mode 100644 index 6df791c9e0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format +++ /dev/null @@ -1,55 +0,0 @@ -WGL_ARB_pixel_format -http://www.opengl.org/registry/specs/gl/ARB/wgl_pixel_format.txt -WGL_ARB_pixel_format - WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 - WGL_DRAW_TO_WINDOW_ARB 0x2001 - WGL_DRAW_TO_BITMAP_ARB 0x2002 - WGL_ACCELERATION_ARB 0x2003 - WGL_NEED_PALETTE_ARB 0x2004 - WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 - WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 - WGL_SWAP_METHOD_ARB 0x2007 - WGL_NUMBER_OVERLAYS_ARB 0x2008 - WGL_NUMBER_UNDERLAYS_ARB 0x2009 - WGL_TRANSPARENT_ARB 0x200A - WGL_SHARE_DEPTH_ARB 0x200C - WGL_SHARE_STENCIL_ARB 0x200D - WGL_SHARE_ACCUM_ARB 0x200E - WGL_SUPPORT_GDI_ARB 0x200F - WGL_SUPPORT_OPENGL_ARB 0x2010 - WGL_DOUBLE_BUFFER_ARB 0x2011 - WGL_STEREO_ARB 0x2012 - WGL_PIXEL_TYPE_ARB 0x2013 - WGL_COLOR_BITS_ARB 0x2014 - WGL_RED_BITS_ARB 0x2015 - WGL_RED_SHIFT_ARB 0x2016 - WGL_GREEN_BITS_ARB 0x2017 - WGL_GREEN_SHIFT_ARB 0x2018 - WGL_BLUE_BITS_ARB 0x2019 - WGL_BLUE_SHIFT_ARB 0x201A - WGL_ALPHA_BITS_ARB 0x201B - WGL_ALPHA_SHIFT_ARB 0x201C - WGL_ACCUM_BITS_ARB 0x201D - WGL_ACCUM_RED_BITS_ARB 0x201E - WGL_ACCUM_GREEN_BITS_ARB 0x201F - WGL_ACCUM_BLUE_BITS_ARB 0x2020 - WGL_ACCUM_ALPHA_BITS_ARB 0x2021 - WGL_DEPTH_BITS_ARB 0x2022 - WGL_STENCIL_BITS_ARB 0x2023 - WGL_AUX_BUFFERS_ARB 0x2024 - WGL_NO_ACCELERATION_ARB 0x2025 - WGL_GENERIC_ACCELERATION_ARB 0x2026 - WGL_FULL_ACCELERATION_ARB 0x2027 - WGL_SWAP_EXCHANGE_ARB 0x2028 - WGL_SWAP_COPY_ARB 0x2029 - WGL_SWAP_UNDEFINED_ARB 0x202A - WGL_TYPE_RGBA_ARB 0x202B - WGL_TYPE_COLORINDEX_ARB 0x202C - WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 - WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 - WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 - WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A - WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B - BOOL wglChoosePixelFormatARB (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) - BOOL wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues) - BOOL wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float deleted file mode 100644 index 8c135dbd6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_pixel_format_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -WGL_ARB_pixel_format_float - WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture deleted file mode 100644 index 4c0ddf944a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture +++ /dev/null @@ -1,39 +0,0 @@ -WGL_ARB_render_texture -http://www.opengl.org/registry/specs/gl/ARB/wgl_render_texture.txt -WGL_ARB_render_texture - WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 - WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 - WGL_TEXTURE_FORMAT_ARB 0x2072 - WGL_TEXTURE_TARGET_ARB 0x2073 - WGL_MIPMAP_TEXTURE_ARB 0x2074 - WGL_TEXTURE_RGB_ARB 0x2075 - WGL_TEXTURE_RGBA_ARB 0x2076 - WGL_NO_TEXTURE_ARB 0x2077 - WGL_TEXTURE_CUBE_MAP_ARB 0x2078 - WGL_TEXTURE_1D_ARB 0x2079 - WGL_TEXTURE_2D_ARB 0x207A - WGL_MIPMAP_LEVEL_ARB 0x207B - WGL_CUBE_MAP_FACE_ARB 0x207C - WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D - WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E - WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 - WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 - WGL_FRONT_LEFT_ARB 0x2083 - WGL_FRONT_RIGHT_ARB 0x2084 - WGL_BACK_LEFT_ARB 0x2085 - WGL_BACK_RIGHT_ARB 0x2086 - WGL_AUX0_ARB 0x2087 - WGL_AUX1_ARB 0x2088 - WGL_AUX2_ARB 0x2089 - WGL_AUX3_ARB 0x208A - WGL_AUX4_ARB 0x208B - WGL_AUX5_ARB 0x208C - WGL_AUX6_ARB 0x208D - WGL_AUX7_ARB 0x208E - WGL_AUX8_ARB 0x208F - WGL_AUX9_ARB 0x2090 - BOOL wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) - BOOL wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) - BOOL wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int* piAttribList) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation deleted file mode 100644 index b480049564..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/wgl_robustness_isolation.txt -WGL_ARB_robustness_application_isolation - WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation deleted file mode 100644 index dfaa9c2b69..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/wgl_robustness_isolation.txt -WGL_ARB_robustness_share_group_isolation - WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float deleted file mode 100644 index 1065604d20..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float +++ /dev/null @@ -1,6 +0,0 @@ -WGL_ATI_pixel_format_float -http://www.opengl.org/registry/specs/gl/ATI/pixel_format_float.txt -WGL_ATI_pixel_format_float - WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 - GL_RGBA_FLOAT_MODE_ATI 0x8820 - GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle deleted file mode 100644 index 55df114d31..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ATI_render_texture_rectangle - -WGL_ATI_render_texture_rectangle - WGL_TEXTURE_RECTANGLE_ATI 0x21A5 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile deleted file mode 100644 index ca9881af6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt -WGL_EXT_create_context_es2_profile - WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile deleted file mode 100644 index 6eb7cddfb3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt -WGL_EXT_create_context_es_profile - WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float deleted file mode 100644 index c9d5bf5d86..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_depth_float -http://www.opengl.org/registry/specs/gl/EXT/wgl_depth_float.txt -WGL_EXT_depth_float - WGL_DEPTH_FLOAT_EXT 0x2040 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table deleted file mode 100644 index b0607bb4b2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table +++ /dev/null @@ -1,7 +0,0 @@ -WGL_EXT_display_color_table -http://www.opengl.org/registry/specs/gl/EXT/wgl_display_color_table.txt -WGL_EXT_display_color_table - GLboolean wglBindDisplayColorTableEXT (GLushort id) - GLboolean wglCreateDisplayColorTableEXT (GLushort id) - void wglDestroyDisplayColorTableEXT (GLushort id) - GLboolean wglLoadDisplayColorTableEXT (GLushort* table, GLuint length) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string deleted file mode 100644 index 1b546fa189..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_extensions_string -http://www.opengl.org/registry/specs/gl/EXT/wgl_extensions_string.txt -WGL_EXT_extensions_string - const char* wglGetExtensionsStringEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB deleted file mode 100644 index e4a40322fd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -WGL_EXT_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read deleted file mode 100644 index 61935dc4ee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read +++ /dev/null @@ -1,6 +0,0 @@ -WGL_EXT_make_current_read -http://www.opengl.org/registry/specs/gl/EXT/wgl_make_current_read.txt -WGL_EXT_make_current_read - HDC wglGetCurrentReadDCEXT (VOID) - BOOL wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) - ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample deleted file mode 100644 index 55c76bed0f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_EXT_multisample -http://www.opengl.org/registry/specs/gl/EXT/wgl_multisample.txt -WGL_EXT_multisample - WGL_SAMPLE_BUFFERS_EXT 0x2041 - WGL_SAMPLES_EXT 0x2042 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer deleted file mode 100644 index 3e0da7c4a6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer +++ /dev/null @@ -1,18 +0,0 @@ -WGL_EXT_pbuffer -http://www.opengl.org/registry/specs/gl/EXT/wgl_pbuffer.txt -WGL_EXT_pbuffer - WGL_DRAW_TO_PBUFFER_EXT 0x202D - WGL_MAX_PBUFFER_PIXELS_EXT 0x202E - WGL_MAX_PBUFFER_WIDTH_EXT 0x202F - WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 - WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 - WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 - WGL_PBUFFER_LARGEST_EXT 0x2033 - WGL_PBUFFER_WIDTH_EXT 0x2034 - WGL_PBUFFER_HEIGHT_EXT 0x2035 - HPBUFFEREXT wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList) - BOOL wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer) - HDC wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer) - BOOL wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue) - int wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC) - DECLARE_HANDLE(HPBUFFEREXT); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format deleted file mode 100644 index 19aa219ad9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format +++ /dev/null @@ -1,51 +0,0 @@ -WGL_EXT_pixel_format -http://www.opengl.org/registry/specs/gl/EXT/wgl_pixel_format.txt -WGL_EXT_pixel_format - WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 - WGL_DRAW_TO_WINDOW_EXT 0x2001 - WGL_DRAW_TO_BITMAP_EXT 0x2002 - WGL_ACCELERATION_EXT 0x2003 - WGL_NEED_PALETTE_EXT 0x2004 - WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 - WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 - WGL_SWAP_METHOD_EXT 0x2007 - WGL_NUMBER_OVERLAYS_EXT 0x2008 - WGL_NUMBER_UNDERLAYS_EXT 0x2009 - WGL_TRANSPARENT_EXT 0x200A - WGL_TRANSPARENT_VALUE_EXT 0x200B - WGL_SHARE_DEPTH_EXT 0x200C - WGL_SHARE_STENCIL_EXT 0x200D - WGL_SHARE_ACCUM_EXT 0x200E - WGL_SUPPORT_GDI_EXT 0x200F - WGL_SUPPORT_OPENGL_EXT 0x2010 - WGL_DOUBLE_BUFFER_EXT 0x2011 - WGL_STEREO_EXT 0x2012 - WGL_PIXEL_TYPE_EXT 0x2013 - WGL_COLOR_BITS_EXT 0x2014 - WGL_RED_BITS_EXT 0x2015 - WGL_RED_SHIFT_EXT 0x2016 - WGL_GREEN_BITS_EXT 0x2017 - WGL_GREEN_SHIFT_EXT 0x2018 - WGL_BLUE_BITS_EXT 0x2019 - WGL_BLUE_SHIFT_EXT 0x201A - WGL_ALPHA_BITS_EXT 0x201B - WGL_ALPHA_SHIFT_EXT 0x201C - WGL_ACCUM_BITS_EXT 0x201D - WGL_ACCUM_RED_BITS_EXT 0x201E - WGL_ACCUM_GREEN_BITS_EXT 0x201F - WGL_ACCUM_BLUE_BITS_EXT 0x2020 - WGL_ACCUM_ALPHA_BITS_EXT 0x2021 - WGL_DEPTH_BITS_EXT 0x2022 - WGL_STENCIL_BITS_EXT 0x2023 - WGL_AUX_BUFFERS_EXT 0x2024 - WGL_NO_ACCELERATION_EXT 0x2025 - WGL_GENERIC_ACCELERATION_EXT 0x2026 - WGL_FULL_ACCELERATION_EXT 0x2027 - WGL_SWAP_EXCHANGE_EXT 0x2028 - WGL_SWAP_COPY_EXT 0x2029 - WGL_SWAP_UNDEFINED_EXT 0x202A - WGL_TYPE_RGBA_EXT 0x202B - WGL_TYPE_COLORINDEX_EXT 0x202C - BOOL wglChoosePixelFormatEXT (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) - BOOL wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues) - BOOL wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float deleted file mode 100644 index 30925fc5da..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_pixel_format_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -WGL_EXT_pixel_format_packed_float - WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control deleted file mode 100644 index e806726eee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -WGL_EXT_swap_control -http://www.opengl.org/registry/specs/gl/EXT/wgl_swap_control.txt -WGL_EXT_swap_control - int wglGetSwapIntervalEXT (void) - BOOL wglSwapIntervalEXT (int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear deleted file mode 100644 index b8d8d295f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear +++ /dev/null @@ -1,3 +0,0 @@ -WGL_EXT_swap_control_tear -http://www.opengl.org/registry/specs/gl/EXT/wgl_swap_control_tear.txt -WGL_EXT_swap_control_tear diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control deleted file mode 100644 index 8ab1870d74..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_digital_video_control -http://www.opengl.org/registry/specs/gl/I3D/wgl_digital_video_control.txt -WGL_I3D_digital_video_control - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 - WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 - WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 - BOOL wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int* piValue) - BOOL wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int* piValue) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma deleted file mode 100644 index 4f2ec324af..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_gamma -http://www.opengl.org/registry/specs/gl/I3D/wgl_gamma.txt -WGL_I3D_gamma - WGL_GAMMA_TABLE_SIZE_I3D 0x204E - WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F - BOOL wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue) - BOOL wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int* piValue) - BOOL wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue) - BOOL wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int* piValue) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock deleted file mode 100644 index 8b990d32b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock +++ /dev/null @@ -1,24 +0,0 @@ -WGL_I3D_genlock -http://www.opengl.org/registry/specs/gl/I3D/wgl_genlock.txt -WGL_I3D_genlock - WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 - WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 - WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 - WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 - WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 - WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 - WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A - WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B - WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C - BOOL wglDisableGenlockI3D (HDC hDC) - BOOL wglEnableGenlockI3D (HDC hDC) - BOOL wglGenlockSampleRateI3D (HDC hDC, UINT uRate) - BOOL wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay) - BOOL wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge) - BOOL wglGenlockSourceI3D (HDC hDC, UINT uSource) - BOOL wglGetGenlockSampleRateI3D (HDC hDC, UINT* uRate) - BOOL wglGetGenlockSourceDelayI3D (HDC hDC, UINT* uDelay) - BOOL wglGetGenlockSourceEdgeI3D (HDC hDC, UINT* uEdge) - BOOL wglGetGenlockSourceI3D (HDC hDC, UINT* uSource) - BOOL wglIsEnabledGenlockI3D (HDC hDC, BOOL* pFlag) - BOOL wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer deleted file mode 100644 index bf735c0023..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_image_buffer -http://www.opengl.org/registry/specs/gl/I3D/wgl_image_buffer.txt -WGL_I3D_image_buffer - WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 - WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 - BOOL wglAssociateImageBufferEventsI3D (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count) - LPVOID wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags) - BOOL wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress) - BOOL wglReleaseImageBufferEventsI3D (HDC hdc, LPVOID* pAddress, UINT count) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock deleted file mode 100644 index d009ea741e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock +++ /dev/null @@ -1,7 +0,0 @@ -WGL_I3D_swap_frame_lock -http://www.opengl.org/registry/specs/gl/I3D/wgl_swap_frame_lock.txt -WGL_I3D_swap_frame_lock - BOOL wglDisableFrameLockI3D (VOID) - BOOL wglEnableFrameLockI3D (VOID) - BOOL wglIsEnabledFrameLockI3D (BOOL* pFlag) - BOOL wglQueryFrameLockMasterI3D (BOOL* pFlag) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage deleted file mode 100644 index 8f41ee8194..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage +++ /dev/null @@ -1,7 +0,0 @@ -WGL_I3D_swap_frame_usage -http://www.opengl.org/registry/specs/gl/I3D/wgl_swap_frame_usage.txt -WGL_I3D_swap_frame_usage - BOOL wglBeginFrameTrackingI3D (void) - BOOL wglEndFrameTrackingI3D (void) - BOOL wglGetFrameUsageI3D (float* pUsage) - BOOL wglQueryFrameTrackingI3D (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop b/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop deleted file mode 100644 index 31cea77efa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop +++ /dev/null @@ -1,14 +0,0 @@ -WGL_NV_DX_interop -http://www.opengl.org/registry/specs/gl/NV/DX_interop.txt -WGL_NV_DX_interop - WGL_ACCESS_READ_ONLY_NV 0x0000 - WGL_ACCESS_READ_WRITE_NV 0x0001 - WGL_ACCESS_WRITE_DISCARD_NV 0x0002 - BOOL wglDXCloseDeviceNV (HANDLE hDevice) - BOOL wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE* hObjects) - BOOL wglDXObjectAccessNV (HANDLE hObject, GLenum access) - HANDLE wglDXOpenDeviceNV (void* dxDevice) - HANDLE wglDXRegisterObjectNV (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access) - BOOL wglDXSetResourceShareHandleNV (void* dxObject, HANDLE shareHandle) - BOOL wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE* hObjects) - BOOL wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 b/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 deleted file mode 100644 index fe0fb9ef05..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 +++ /dev/null @@ -1,3 +0,0 @@ -WGL_NV_DX_interop2 -http://www.opengl.org/registry/specs/gl/NV/DX_interop2.txt -WGL_NV_DX_interop2 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image deleted file mode 100644 index 493b45d950..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -WGL_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -WGL_NV_copy_image - BOOL wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer deleted file mode 100644 index fb32fd27aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_float_buffer -http://www.opengl.org/registry/specs/gl/NV/float_buffer.txt -WGL_NV_float_buffer - WGL_FLOAT_COMPONENTS_NV 0x20B0 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 - WGL_TEXTURE_FLOAT_R_NV 0x20B5 - WGL_TEXTURE_FLOAT_RG_NV 0x20B6 - WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 - WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity b/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity deleted file mode 100644 index f722204cd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_gpu_affinity -http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt -WGL_NV_gpu_affinity - WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 - WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) - BOOL wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) - HDC wglCreateAffinityDCNV (const HGPUNV *phGpuList) - BOOL wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu) - BOOL wglDeleteDCNV (HDC hdc) - DECLARE_HANDLE(HGPUNV); - typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage deleted file mode 100644 index c3e748474f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -WGL_NV_multisample_coverage - WGL_COVERAGE_SAMPLES_NV 0x2042 - WGL_COLOR_SAMPLES_NV 0x20B9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video b/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video deleted file mode 100644 index 2b5ca9f80c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video +++ /dev/null @@ -1,8 +0,0 @@ -WGL_NV_present_video -http://www.opengl.org/registry/specs/gl/NV/present_video.txt -WGL_NV_present_video - WGL_NUM_VIDEO_SLOTS_NV 0x20F0 - BOOL wglBindVideoDeviceNV (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList) - int wglEnumerateVideoDevicesNV (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList) - BOOL wglQueryCurrentContextNV (int iAttribute, int* piValue) - DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture b/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture deleted file mode 100644 index 2fc36cbe6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture +++ /dev/null @@ -1,9 +0,0 @@ -WGL_NV_render_depth_texture -http://www.opengl.org/registry/specs/gl/NV/render_depth_texture.txt -WGL_NV_render_depth_texture - WGL_NO_TEXTURE_ARB 0x2077 - WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 - WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 - WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 - WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 - WGL_DEPTH_COMPONENT_NV 0x20A7 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle deleted file mode 100644 index ec410c0da5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle +++ /dev/null @@ -1,6 +0,0 @@ -WGL_NV_render_texture_rectangle -http://www.opengl.org/registry/specs/gl/NV/render_texture_rectangle.txt -WGL_NV_render_texture_rectangle - WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 - WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 - WGL_TEXTURE_RECTANGLE_NV 0x20A2 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group b/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group deleted file mode 100644 index 5a9d012646..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group +++ /dev/null @@ -1,9 +0,0 @@ -WGL_NV_swap_group -http://www.opengl.org/registry/specs/gl/NV/wgl_swap_group.txt -WGL_NV_swap_group - BOOL wglBindSwapBarrierNV (GLuint group, GLuint barrier) - BOOL wglJoinSwapGroupNV (HDC hDC, GLuint group) - BOOL wglQueryFrameCountNV (HDC hDC, GLuint* count) - BOOL wglQueryMaxSwapGroupsNV (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers) - BOOL wglQuerySwapGroupNV (HDC hDC, GLuint* group, GLuint *barrier) - BOOL wglResetFrameCountNV (HDC hDC) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range deleted file mode 100644 index ca22d31a3e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -WGL_NV_vertex_array_range - void * wglAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void wglFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture deleted file mode 100644 index 8c4c68ac36..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture +++ /dev/null @@ -1,11 +0,0 @@ -WGL_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -WGL_NV_video_capture - WGL_UNIQUE_ID_NV 0x20CE - WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - BOOL wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice) - UINT wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV* phDeviceList) - BOOL wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice) - BOOL wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int* piValue) - BOOL wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice) - DECLARE_HANDLE(HVIDEOINPUTDEVICENV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output b/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output deleted file mode 100644 index a3c39164a0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output +++ /dev/null @@ -1,23 +0,0 @@ -WGL_NV_video_output -http://www.opengl.org/registry/specs/gl/NV/wgl_video_output.txt -WGL_NV_video_output - WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 - WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 - WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 - WGL_VIDEO_OUT_COLOR_NV 0x20C3 - WGL_VIDEO_OUT_ALPHA_NV 0x20C4 - WGL_VIDEO_OUT_DEPTH_NV 0x20C5 - WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 - WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 - WGL_VIDEO_OUT_FRAME 0x20C8 - WGL_VIDEO_OUT_FIELD_1 0x20C9 - WGL_VIDEO_OUT_FIELD_2 0x20CA - WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB - WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC - BOOL wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer) - BOOL wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice) - BOOL wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo) - BOOL wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice) - BOOL wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer) - BOOL wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock) - DECLARE_HANDLE(HPVIDEODEV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control b/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control deleted file mode 100644 index f9c810022c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control +++ /dev/null @@ -1,9 +0,0 @@ -WGL_OML_sync_control -http://www.opengl.org/registry/specs/gl/OML/wgl_sync_control.txt -WGL_OML_sync_control - BOOL wglGetMscRateOML (HDC hdc, INT32* numerator, INT32 *denominator) - BOOL wglGetSyncValuesOML (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc) - INT64 wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder) - INT64 wglSwapLayerBuffersMscOML (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder) - BOOL wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc) - BOOL wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc) diff --git a/Engine/lib/glew/auto/lib/OpenGL/Spec.pm b/Engine/lib/glew/auto/lib/OpenGL/Spec.pm deleted file mode 100644 index 1311b394dd..0000000000 --- a/Engine/lib/glew/auto/lib/OpenGL/Spec.pm +++ /dev/null @@ -1,202 +0,0 @@ -package OpenGL::Spec; - -# A very simple task further complicated by the fact that some people -# can't read, others use legacy Operating Systems, and others don't give -# a damn about using a halfway decent text editor. -# -# The code to parse the _template_ is so simple and straightforward... -# yet the code to parse the real spec files is this mess. - -my %typemap = ( - bitfield => "GLbitfield", - boolean => "GLboolean", - # fsck up in EXT_vertex_array - Boolean => "GLboolean", - byte => "GLbyte", - clampd => "GLclampd", - clampf => "GLclampf", - double => "GLdouble", - enum => "GLenum", - # Intel fsck up - Glenum => "GLenum", - float => "GLfloat", - half => "GLuint", - int => "GLint", - short => "GLshort", - sizei => "GLsizei", - ubyte => "GLubyte", - uint => "GLuint", - ushort => "GLushort", - DMbuffer => "void *", - - # ARB VBO introduces these - sizeiptrARB => "GLsizeiptrARB", - intptrARB => "GLintptrARB", - - # ARB shader objects introduces these, charARB is at least 8 bits, - # handleARB is at least 32 bits - charARB => "GLcharARB", - handleARB => "GLhandleARB", - - # GLX 1.3 defines new types which might not be available at compile time - #GLXFBConfig => "void*", - #GLXFBConfigID => "XID", - #GLXContextID => "XID", - #GLXWindow => "XID", - #GLXPbuffer => "XID", - - # Weird stuff for some SGIX extension - #GLXFBConfigSGIX => "void*", - #GLXFBConfigIDSGIX => "XID", -); - -my %void_typemap = ( - void => "GLvoid", -); - -my $section_re = qr{^[A-Z]}; -my $function_re = qr{^(.+) ([a-z][a-z0-9_]*) \((.+)\)$}i; -my $token_re = qr{^([A-Z0-9][A-Z0-9_]*):?\s+((?:0x)?[0-9A-F]+)(.*)$}; -my $prefix_re = qr{^(?:AGL | GLX | WGL)_}x; -my $eofnc_re = qr{ \);?$ | ^$ }x; -my $function_re = qr{^(.+) ([a-z][a-z0-9_]*) \((.+)\)$}i; -my $prefix_re = qr{^(?:gl | agl | wgl | glX)}x; -my $types_re = __compile_wordlist_cap(keys %typemap); -my $voidtype_re = __compile_wordlist_cap(keys %void_typemap); - -sub new($) -{ - my $class = shift; - my $self = { section => {} }; - $self->{filename} = shift; - local $/; - open(my $fh, "<$self->{filename}") or die "Can't open $self->{filename}"; - my $content = <$fh>; - my $section; - my $s = $self->{section}; - - $content =~ s{[ \t]+$}{}mg; - # Join lines that end with a word-character and ones that *begin* - # with one - $content =~ s{(\w)\n(\w)}{$1 $2}sg; - - foreach (split /\n/, $content) - { - if (/$section_re/) - { - chomp; - s/^Name String$/Name Strings/; # Fix common mistake - $section = $_; - $s->{$section} = ""; - } - elsif (defined $section and exists $s->{$section}) - { - s{^\s+}{}mg; # Remove leading whitespace - $s->{$section} .= $_ . "\n"; - } - } - - $s->{$_} =~ s{(?:^\n+|\n+$)}{}s foreach keys %$s; - - bless $self, $class; -} - -sub sections() -{ - my $self = shift; - keys %{$self->{section}}; -} - -sub name() -{ - my $self = shift; - $self->{section}->{Name}; -} - -sub name_strings() -{ - my $self = shift; - split("\n", $self->{section}->{"Name Strings"}); -} - -sub tokens() -{ - my $self = shift; - my %tokens = (); - foreach (split /\n/, $self->{section}->{"New Tokens"}) - { - next unless /$token_re/; - my ($name, $value) = ($1, $2); - $name =~ s{^}{GL_} unless $name =~ /$prefix_re/; - $tokens{$name} = $value; - } - - return %tokens; -} - -sub functions() -{ - my $self = shift; - my %functions = (); - my @fnc = (); - - foreach (split /\n/, $self->{section}->{"New Procedures and Functions"}) - { - push @fnc, $_ unless ($_ eq "" or $_ eq "None"); - - next unless /$eofnc_re/; - - if (__normalize_proto(@fnc) =~ /$function_re/) - { - my ($return, $name, $parms) = ($1, $2, $3); - if (!__ignore_function($name, $extname)) - { - $name =~ s/^/gl/ unless $name =~ /$prefix_re/; - if ($name =~ /^gl/ && $name !~ /^glX/) - { - $return =~ s/$types_re/$typemap{$1}/g; - $return =~ s/$voidtype_re/$void_typemap{$1}/g; - $parms =~ s/$types_re/$typemap{$1}/g; - $parms =~ s/$voidtype_re/$void_typemap{$1}/g; - } - $functions{$name} = { - rtype => $return, - parms => $parms, - }; - } - } - @fnc = (); - } - - return %functions; -} - -sub __normalize_proto -{ - local $_ = join(" ", @_); - s/\s+/ /g; # multiple whitespace -> single space - s/\s*\(\s*/ \(/; # exactly one space before ( and none after - s/\s*\)\s*/\)/; # no after before or after ) - s/\s*\*([a-zA-Z])/\* $1/; # "* identifier" XXX: g missing? - s/\*wgl/\* wgl/; # "* wgl" XXX: why doesn't the - s/\*glX/\* glX/; # "* glX" previous re catch this? - s/\.\.\./void/; # ... -> void - s/;$//; # remove ; at the end of the line - return $_; -} - -sub __ignore_function -{ - return 0; -} - -sub __compile_regex -{ - my $regex = join('', @_); - return qr/$regex/ -} - -sub __compile_wordlist_cap -{ - __compile_regex('\b(', join('|', @_), ')\b'); -} diff --git a/Engine/lib/glew/auto/src/footer.html b/Engine/lib/glew/auto/src/footer.html deleted file mode 100644 index 3adb9c14cb..0000000000 --- a/Engine/lib/glew/auto/src/footer.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Engine/lib/glew/auto/src/glew.rc b/Engine/lib/glew/auto/src/glew.rc deleted file mode 100644 index 5674cc9cd5..0000000000 --- a/Engine/lib/glew/auto/src/glew.rc +++ /dev/null @@ -1,77 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32mxsd.dll" -# else -# define FILENAME "glew32mxs.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32mxd.dll" -# else -# define FILENAME "glew32mx.dll" -# endif -# endif -#else -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32sd.dll" -# else -# define FILENAME "glew32s.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32d.dll" -# else -# define FILENAME "glew32.dll" -# endif -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -#ifdef GLEW_STATIC -FILETYPE VFT_STATIC_LIB -#else -FILETYPE VFT_DLL -#endif -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n\r\nMesa 3-D graphics library\r\n\r\nVersion: 7.0\r\n\r\nCopyright (C) 1999-2007 Brian Paul All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of this software and associated documentation files (the ''Software''),\r\nto deal in the Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\r\nand/or sell copies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included\r\nin all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\nBRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nCopyright (c) 2007 The Khronos Group Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of this software and/or associated documentation files (the\r\n''Materials''), to deal in the Materials without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Materials, and to\r\npermit persons to whom the Materials are furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included\r\nin all copies or substantial portions of the Materials.\r\n\r\nTHE MATERIALS ARE PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "The OpenGL Extension Wrangler Library\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "GLEW\0" - VALUE "LegalCopyright", " 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/glew_head.c b/Engine/lib/glew/auto/src/glew_head.c deleted file mode 100644 index 252d55a8ea..0000000000 --- a/Engine/lib/glew/auto/src/glew_head.c +++ /dev/null @@ -1,249 +0,0 @@ -#include - -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -#if defined(__sgi) || defined (__sun) || defined(GLEW_APPLE_GLX) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun || GLEW_APPLE_GLX */ - -#if defined(__APPLE__) -#include -#include -#include - -#ifdef MAC_OS_X_VERSION_10_3 - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static void* image = NULL; - void* addr; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = dlopen("libRegal.dylib", RTLD_LAZY); -#else - image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); -#endif - } - if( !image ) return NULL; - addr = dlsym(image, (const char*)name); - if( addr ) return addr; -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#else - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static const struct mach_header* image = NULL; - NSSymbol symbol; - char* symbolName; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = NSAddImage("libRegal.dylib", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#else - image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#endif - } - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - /* if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); */ - symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; - free(symbolName); - if( symbol ) return NSAddressOfSymbol(symbol); -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#endif /* MAC_OS_X_VERSION_10_3 */ -#endif /* __APPLE__ */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -#elif defined(__sgi) || defined(__sun) -# define glewGetProcAddress(name) dlGetProcAddress(name) -#elif defined(__ANDROID__) -# define glewGetProcAddress(name) NULL /* TODO */ -#elif defined(__native_client__) -# define glewGetProcAddress(name) NULL /* TODO */ -#else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -#endif - -/* - * Define GLboolean const cast. - */ -#define CONST_CAST(x) (*(GLboolean*)&x) - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ -static GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0') i++; - return i; -} - -static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0' && s[i] != c) i++; - return (s[i] == '\0' || s[i] == c) ? i : 0; -} - -static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - if(a == NULL || b == NULL) - return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; - while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - (*a)++; - (*na)--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -/* - * Search for name in the extensions string. Use of strstr() - * is not sufficient because extension names can be prefixes of - * other extension names. Could use strtok() but the constant - * string returned by glGetString might be in read-only memory. - */ -static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) -{ - const GLubyte* p; - GLuint len = _glewStrLen((const GLubyte*)name); - p = start; - while (p < end) - { - GLuint n = _glewStrCLen(p, ' '); - if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; - p += n+1; - } - return GL_FALSE; -} diff --git a/Engine/lib/glew/auto/src/glew_head.h b/Engine/lib/glew/auto/src/glew_head.h deleted file mode 100644 index f33f4403de..0000000000 --- a/Engine/lib/glew/auto/src/glew_head.h +++ /dev/null @@ -1,1113 +0,0 @@ -#ifndef __glew_h__ -#define __glew_h__ -#define __GLEW_H__ - -#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) -#error gl.h included before glew.h -#endif -#if defined(__gl2_h_) -#error gl2.h included before glew.h -#endif -#if defined(__gltypes_h_) -#error gltypes.h included before glew.h -#endif -#if defined(__REGAL_H__) -#error Regal.h included before glew.h -#endif -#if defined(__glext_h_) || defined(__GLEXT_H_) -#error glext.h included before glew.h -#endif -#if defined(__gl_ATI_h_) -#error glATI.h included before glew.h -#endif - -#define __gl_h_ -#define __gl2_h_ -#define __GL_H__ -#define __gltypes_h_ -#define __REGAL_H__ -#define __X_GL_H -#define __glext_h_ -#define __GLEXT_H_ -#define __gl_ATI_h_ - -#if defined(_WIN32) - -/* - * GLEW does not include to avoid name space pollution. - * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t - * defined properly. - */ -/* */ -#ifndef APIENTRY -#define GLEW_APIENTRY_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define APIENTRY __stdcall -# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -#endif -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# endif -#endif -/* */ -#ifndef CALLBACK -#define GLEW_CALLBACK_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define CALLBACK __attribute__ ((__stdcall__)) -# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -#endif -/* and */ -#ifndef WINGDIAPI -#define GLEW_WINGDIAPI_DEFINED -#define WINGDIAPI __declspec(dllimport) -#endif -/* */ -#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -#endif -/* */ -#if !defined(_W64) -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif -#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) -# ifdef _WIN64 -typedef __int64 ptrdiff_t; -# else -typedef _W64 int ptrdiff_t; -# endif -# define _PTRDIFF_T_DEFINED -# define _PTRDIFF_T_ -#endif - -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# else -# define GLAPI WINGDIAPI -# endif -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY APIENTRY -#endif - -/* - * GLEW_STATIC is defined for static library. - * GLEW_BUILD is defined for building the DLL library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#else /* _UNIX */ - -/* - * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO - * C. On my system, this amounts to _3 lines_ of included code, all of - * them pretty much harmless. If you know of a way of detecting 32 vs - * 64 _targets_ at compile time you are free to replace this with - * something that's portable. For now, _this_ is the portable solution. - * (mem, 2004-01-04) - */ - -#include - -/* SGI MIPSPro doesn't like stdint.h in C++ mode */ -/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ - -#if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) -#include -#else -#include -#endif - -#define GLEW_APIENTRY_DEFINED -#define APIENTRY - -/* - * GLEW_STATIC is defined for static library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# if defined(__GNUC__) && __GNUC__>=4 -# define GLEWAPI extern __attribute__ ((visibility("default"))) -# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# define GLEWAPI extern __global -# else -# define GLEWAPI extern -# endif -#endif - -/* */ -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY -#endif - -#endif /* _WIN32 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 - -typedef unsigned int GLenum; -typedef unsigned int GLbitfield; -typedef unsigned int GLuint; -typedef int GLint; -typedef int GLsizei; -typedef unsigned char GLboolean; -typedef signed char GLbyte; -typedef short GLshort; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned long GLulong; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; -#if defined(_MSC_VER) && _MSC_VER < 1400 -typedef __int64 GLint64EXT; -typedef unsigned __int64 GLuint64EXT; -#elif defined(_MSC_VER) || defined(__BORLANDC__) -typedef signed long long GLint64EXT; -typedef unsigned long long GLuint64EXT; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) -#include -# endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif -typedef GLint64EXT GLint64; -typedef GLuint64EXT GLuint64; -typedef struct __GLsync *GLsync; - -typedef char GLchar; - -#define GL_ZERO 0 -#define GL_FALSE 0 -#define GL_LOGIC_OP 0x0BF1 -#define GL_NONE 0 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_NO_ERROR 0 -#define GL_POINTS 0x0000 -#define GL_CURRENT_BIT 0x00000001 -#define GL_TRUE 1 -#define GL_ONE 1 -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_POINT_BIT 0x00000002 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_LINE_STRIP 0x0003 -#define GL_LINE_BIT 0x00000004 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON 0x0009 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM 0x0100 -#define GL_LOAD 0x0101 -#define GL_RETURN 0x0102 -#define GL_MULT 0x0103 -#define GL_ADD 0x0104 -#define GL_NEVER 0x0200 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_EXP 0x0800 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_EXP2 0x0801 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LIST_MODE 0x0B30 -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_SHADE_MODEL 0x0B54 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_FOG 0x0B60 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_NORMALIZE 0x0BA1 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_INDEX_MODE 0x0C30 -#define GL_RGBA_MODE 0x0C31 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_RENDER_MODE 0x0C40 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_INDEX_BITS 0x0D51 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_COLOR_INDEX 0x1900 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_BITMAP 0x1A00 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_RENDER 0x1C00 -#define GL_FEEDBACK 0x1C01 -#define GL_SELECT 0x1C02 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_S 0x2000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_EYE_LINEAR 0x2400 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_SPHERE_MAP 0x2402 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_PLANE 0x2502 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_CLAMP 0x2900 -#define GL_REPEAT 0x2901 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_R3_G3_B2 0x2A10 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_LIGHT0 0x4000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_HINT_BIT 0x00008000 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000fffff -#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff - -GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); -GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); -GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void GLAPIENTRY glArrayElement (GLint i); -GLAPI void GLAPIENTRY glBegin (GLenum mode); -GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void GLAPIENTRY glCallList (GLuint list); -GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); -GLAPI void GLAPIENTRY glClear (GLbitfield mask); -GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); -GLAPI void GLAPIENTRY glClearIndex (GLfloat c); -GLAPI void GLAPIENTRY glClearStencil (GLint s); -GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); -GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); -GLAPI void GLAPIENTRY glColor3iv (const GLint *v); -GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); -GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void GLAPIENTRY glColor4iv (const GLint *v); -GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); -GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); -GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); -GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glCullFace (GLenum mode); -GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); -GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void GLAPIENTRY glDepthFunc (GLenum func); -GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); -GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); -GLAPI void GLAPIENTRY glDisable (GLenum cap); -GLAPI void GLAPIENTRY glDisableClientState (GLenum array); -GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); -GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); -GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); -GLAPI void GLAPIENTRY glEnable (GLenum cap); -GLAPI void GLAPIENTRY glEnableClientState (GLenum array); -GLAPI void GLAPIENTRY glEnd (void); -GLAPI void GLAPIENTRY glEndList (void); -GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); -GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); -GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); -GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); -GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); -GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); -GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); -GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); -GLAPI void GLAPIENTRY glFinish (void); -GLAPI void GLAPIENTRY glFlush (void); -GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glFrontFace (GLenum mode); -GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); -GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); -GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum GLAPIENTRY glGetError (void); -GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); -GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); -GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); -GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); -GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); -GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); -GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); -GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); -GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); -GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); -GLAPI void GLAPIENTRY glIndexMask (GLuint mask); -GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glIndexd (GLdouble c); -GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); -GLAPI void GLAPIENTRY glIndexf (GLfloat c); -GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); -GLAPI void GLAPIENTRY glIndexi (GLint c); -GLAPI void GLAPIENTRY glIndexiv (const GLint *c); -GLAPI void GLAPIENTRY glIndexs (GLshort c); -GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); -GLAPI void GLAPIENTRY glIndexub (GLubyte c); -GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); -GLAPI void GLAPIENTRY glInitNames (void); -GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); -GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); -GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); -GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); -GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); -GLAPI void GLAPIENTRY glLineWidth (GLfloat width); -GLAPI void GLAPIENTRY glListBase (GLuint base); -GLAPI void GLAPIENTRY glLoadIdentity (void); -GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glLoadName (GLuint name); -GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); -GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); -GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); -GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); -GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); -GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); -GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); -GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); -GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); -GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void GLAPIENTRY glPassThrough (GLfloat token); -GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); -GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); -GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); -GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); -GLAPI void GLAPIENTRY glPointSize (GLfloat size); -GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); -GLAPI void GLAPIENTRY glPopAttrib (void); -GLAPI void GLAPIENTRY glPopClientAttrib (void); -GLAPI void GLAPIENTRY glPopMatrix (void); -GLAPI void GLAPIENTRY glPopName (void); -GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); -GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushMatrix (void); -GLAPI void GLAPIENTRY glPushName (GLuint name); -GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); -GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); -GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); -GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); -GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); -GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); -GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); -GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); -GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); -GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); -GLAPI void GLAPIENTRY glShadeModel (GLenum mode); -GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void GLAPIENTRY glStencilMask (GLuint mask); -GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); -GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); -GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord1i (GLint s); -GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); -GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); -GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); -GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); -GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) - -#endif /* GL_VERSION_1_1 */ - -/* ---------------------------------- GLU ---------------------------------- */ - -#ifndef GLEW_NO_GLU -/* this is where we can safely include GLU */ -# if defined(__APPLE__) && defined(__MACH__) -# include -# else -# include -# endif -#endif - diff --git a/Engine/lib/glew/auto/src/glew_init_gl.c b/Engine/lib/glew/auto/src/glew_init_gl.c deleted file mode 100644 index 39efd2c38a..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_gl.c +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -GLboolean GLEWAPIENTRY glewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - start = (const GLubyte*)glGetString(GL_EXTENSIONS); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -/* ------------------------------------------------------------------------- */ - -#ifndef GLEW_MX -static -#endif -GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) -{ - const GLubyte* s; - GLuint dot; - GLint major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* query opengl version */ - s = glGetString(GL_VERSION); - dot = _glewStrCLen(s, '.'); - if (dot == 0) - return GLEW_ERROR_NO_GL_VERSION; - - major = s[dot-1]-'0'; - minor = s[dot+1]-'0'; - - if (minor < 0 || minor > 9) - minor = 0; - if (major<0 || major>9) - return GLEW_ERROR_NO_GL_VERSION; - - - if (major == 1 && minor == 0) - { - return GLEW_ERROR_GL_VERSION_10_ONLY; - } - else - { - CONST_CAST(GLEW_VERSION_4_4) = ( major > 4 ) || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_3) = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_3) = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_2) = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_1) = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_0) = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_1) = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_0) = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_5) = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_4) = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_3) = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2_1) = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2) = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - } - - /* query opengl extensions string */ - extStart = glGetString(GL_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte*)""; - extEnd = extStart + _glewStrLen(extStart); - - /* initialize extensions */ diff --git a/Engine/lib/glew/auto/src/glew_init_glx.c b/Engine/lib/glew/auto/src/glew_init_glx.c deleted file mode 100644 index f5b393b2da..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_glx.c +++ /dev/null @@ -1,53 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -GLboolean glxewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - - if (glXGetCurrentDisplay == NULL) return GL_FALSE; - start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (0 == start) return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) -{ - int major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* initialize core GLX 1.2 */ - if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; - /* initialize flags */ - CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; - /* query GLX version */ - glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); - if (major == 1 && minor <= 3) - { - switch (minor) - { - case 3: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - break; - case 2: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; - break; - default: - return GLEW_ERROR_GLX_VERSION_11_ONLY; - break; - } - } - /* query GLX extension string */ - extStart = 0; - if (glXGetCurrentDisplay != NULL) - extStart = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte *)""; - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ diff --git a/Engine/lib/glew/auto/src/glew_init_tail.c b/Engine/lib/glew/auto/src/glew_init_tail.c deleted file mode 100644 index 2316fb3207..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_tail.c +++ /dev/null @@ -1,57 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) -{ - static const GLubyte* _glewErrorString[] = - { - (const GLubyte*)"No error", - (const GLubyte*)"Missing GL version", - (const GLubyte*)"GL 1.1 and up are not supported", - (const GLubyte*)"GLX 1.2 and up are not supported", - (const GLubyte*)"Unknown error" - }; - const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; - return _glewErrorString[(int)error > max_error ? max_error : (int)error]; -} - -const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) -{ - static const GLubyte* _glewString[] = - { - (const GLubyte*)NULL, - (const GLubyte*)"GLEW_VERSION_STRING", - (const GLubyte*)"GLEW_VERSION_MAJOR_STRING", - (const GLubyte*)"GLEW_VERSION_MINOR_STRING", - (const GLubyte*)"GLEW_VERSION_MICRO_STRING" - }; - const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; - return _glewString[(int)name > max_string ? 0 : (int)name]; -} - -/* ------------------------------------------------------------------------ */ - -GLboolean glewExperimental = GL_FALSE; - -#if !defined(GLEW_MX) - -#if defined(_WIN32) -extern GLenum GLEWAPIENTRY wglewContextInit (void); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -extern GLenum GLEWAPIENTRY glxewContextInit (void); -#endif /* _WIN32 */ - -GLenum GLEWAPIENTRY glewInit (void) -{ - GLenum r; - r = glewContextInit(); - if ( r != 0 ) return r; -#if defined(_WIN32) - return wglewContextInit(); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ - return glxewContextInit(); -#else - return r; -#endif /* _WIN32 */ -} - -#endif /* !GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/glew_init_wgl.c b/Engine/lib/glew/auto/src/glew_init_wgl.c deleted file mode 100644 index 7e76099a56..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_wgl.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; -static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; - -GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - return GL_FALSE; - else - start = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) -{ - GLboolean crippled; - const GLubyte* extStart; - const GLubyte* extEnd; - /* find wgl extension string query functions */ - _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); - _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); - /* query wgl extension string */ - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - extStart = (const GLubyte*)""; - else - extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ - crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; diff --git a/Engine/lib/glew/auto/src/glew_license.h b/Engine/lib/glew/auto/src/glew_license.h deleted file mode 100644 index 5c3e781f71..0000000000 --- a/Engine/lib/glew/auto/src/glew_license.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - diff --git a/Engine/lib/glew/auto/src/glew_str_glx.c b/Engine/lib/glew/auto/src/glew_str_glx.c deleted file mode 100644 index f6ddc6c6a5..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_glx.c +++ /dev/null @@ -1,21 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - -#if defined(GLEW_MX) -GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) -#else -GLboolean glxewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) - { diff --git a/Engine/lib/glew/auto/src/glew_str_head.c b/Engine/lib/glew/auto/src/glew_str_head.c deleted file mode 100644 index ebeb48d637..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_head.c +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef GLEW_MX -GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY glewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) - { diff --git a/Engine/lib/glew/auto/src/glew_str_tail.c b/Engine/lib/glew/auto/src/glew_str_tail.c deleted file mode 100644 index caa95727d3..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_tail.c +++ /dev/null @@ -1,7 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#endif /* _WIN32 */ diff --git a/Engine/lib/glew/auto/src/glew_str_wgl.c b/Engine/lib/glew/auto/src/glew_str_wgl.c deleted file mode 100644 index 20552bd7cb..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_wgl.c +++ /dev/null @@ -1,21 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#if defined(_WIN32) - -#if defined(GLEW_MX) -GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) - { diff --git a/Engine/lib/glew/auto/src/glew_tail.h b/Engine/lib/glew/auto/src/glew_tail.h deleted file mode 100644 index 54023e35c2..0000000000 --- a/Engine/lib/glew/auto/src/glew_tail.h +++ /dev/null @@ -1,74 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -/* error codes */ -#define GLEW_OK 0 -#define GLEW_NO_ERROR 0 -#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ -#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ -#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ - -/* string codes */ -#define GLEW_VERSION 1 -#define GLEW_VERSION_MAJOR 2 -#define GLEW_VERSION_MINOR 3 -#define GLEW_VERSION_MICRO 4 - -/* API */ -#ifdef GLEW_MX - -typedef struct GLEWContextStruct GLEWContext; -GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name); - -#define glewInit() glewContextInit(glewGetContext()) -#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) -#ifdef _WIN32 -# define GLEW_GET_FUN(x) glewGetContext()->x -#else -# define GLEW_GET_FUN(x) x -#endif - -#else /* GLEW_MX */ - -GLEWAPI GLenum GLEWAPIENTRY glewInit (void); -GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLEW_GET_FUN(x) x - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean glewExperimental; -GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString (GLenum name); - -#ifdef __cplusplus -} -#endif - -#ifdef GLEW_APIENTRY_DEFINED -#undef GLEW_APIENTRY_DEFINED -#undef APIENTRY -#undef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifdef GLEW_CALLBACK_DEFINED -#undef GLEW_CALLBACK_DEFINED -#undef CALLBACK -#endif - -#ifdef GLEW_WINGDIAPI_DEFINED -#undef GLEW_WINGDIAPI_DEFINED -#undef WINGDIAPI -#endif - -#undef GLAPI -/* #undef GLEWAPI */ - -#endif /* __glew_h__ */ diff --git a/Engine/lib/glew/auto/src/glew_utils.c b/Engine/lib/glew/auto/src/glew_utils.c deleted file mode 100644 index a7748df238..0000000000 --- a/Engine/lib/glew/auto/src/glew_utils.c +++ /dev/null @@ -1,162 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -#include "glew_utils.h" - -#if defined(__APPLE__) -#include -#include -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - NSSymbol symbol; - char* symbolName; - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); - free(symbolName); - return symbol ? NSAddressOfSymbol(symbol) : NULL; -} -#endif /* __APPLE__ */ - -#if defined(__sgi) || defined (__sun) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun */ - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ - -GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - while (s+i != NULL && s[i] != '\0') i++; - return i; -} - -GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - while (s+i != NULL && s[i] != '\0' && s[i] != c) i++; - return i; -} - -GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - while (i < n && a+i != NULL && b+i != NULL && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - *a++; - *na--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if (i == nb && (*na == nb || *a[i] == ' ' || *a[i] == '\n' || *a[i] == '\r' || *a[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} diff --git a/Engine/lib/glew/auto/src/glew_utils.h b/Engine/lib/glew/auto/src/glew_utils.h deleted file mode 100644 index 4291972a40..0000000000 --- a/Engine/lib/glew/auto/src/glew_utils.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __glew_utils_h__ -#define __glew_utils_h__ - -#include -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#else -# if defined(__APPLE__) - extern void* NSGLGetProcAddress (const GLubyte* name); -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -# else -# if defined(__sgi) || defined(__sun) - extern void* dlGetProcAddress (const GLubyte* name); -# define glewGetProcAddress(name) dlGetProcAddress(name) -# else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -# endif -# endif -#endif - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the string processing functionality required in the library. - */ -extern GLuint _glewStrLen (const GLubyte* s); -extern GLuint _glewStrCLen (const GLubyte* s, GLubyte c); -extern GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n); -extern GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb); -extern GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb); -extern GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) - -#endif /* __glew_utils_h__ */ diff --git a/Engine/lib/glew/auto/src/glewinfo.rc b/Engine/lib/glew/auto/src/glewinfo.rc deleted file mode 100644 index 60b001dfdb..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo.rc +++ /dev/null @@ -1,57 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "glewinfo-mxd.exe" -# else -# define FILENAME "glewinfo-mx.exe" -# endif -#else -# ifdef _DEBUG -# define FILENAME "glewinfod.exe" -# else -# define FILENAME "glewinfo.exe" -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n \r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\nLicense Applicability. Except to the extent portions of this file are\r\nmade subject to an alternative license as permitted in the SGI Free\r\nSoftware License B, Version 1.1 (the 'License'), the contents of this\r\nfile are subject only to the provisions of the License. You may not use\r\nthis file except in compliance with the License. You may obtain a copy\r\nof the License at Silicon Graphics, Inc., attn: Legal Services, 1600\r\nAmphitheatre Parkway, Mountain View, CA 94043-1351, or at:\r\n\r\nhttp://oss.sgi.com/projects/FreeB\r\n\r\nNote that, as provided in the License, the Software is distributed on an\r\n'AS IS' basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\r\nDISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\r\nCONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\r\nPARTICULAR PURPOSE, AND NON-INFRINGEMENT.\r\n\r\nOriginal Code. The Original Code is: OpenGL Sample Implementation,\r\nVersion 1.2.1, released January 26, 2000, developed by Silicon Graphics,\r\nInc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\r\nCopyright in any portions created by third parties is as indicated\r\nelsewhere herein. All Rights Reserved.\r\n\r\nAdditional Notice Provisions: This software was created using the\r\nOpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\r\nnot been independently verified as being compliant with the OpenGL(R)\r\nversion 1.2.1 Specification.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "Utility for verifying extension entry points\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "glewinfo\0" - VALUE "LegalCopyright", " 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/glewinfo_gl.c b/Engine/lib/glew/auto/src/glewinfo_gl.c deleted file mode 100644 index 9d7835d0b8..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_gl.c +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -static void glewInfo (void) -{ -#ifdef GL_VERSION_1_1 - _glewInfo_GL_VERSION_1_1(); -#endif /* GL_VERSION_1_1 */ diff --git a/Engine/lib/glew/auto/src/glewinfo_glx.c b/Engine/lib/glew/auto/src/glewinfo_glx.c deleted file mode 100644 index 287d7e1fd1..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_glx.c +++ /dev/null @@ -1,6 +0,0 @@ -} - -#else /* _UNIX */ - -static void glxewInfo () -{ diff --git a/Engine/lib/glew/auto/src/glewinfo_head.c b/Engine/lib/glew/auto/src/glewinfo_head.c deleted file mode 100644 index 95a36a7d5a..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_head.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -#include -#endif - -#ifdef GLEW_REGAL -#include -#endif - -static FILE* f; - -#ifdef GLEW_MX -GLEWContext _glewctx; -#define glewGetContext() (&_glewctx) -#ifdef _WIN32 -WGLEWContext _wglewctx; -#define wglewGetContext() (&_wglewctx) -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -#define glxewGetContext() (&_glxewctx) -#endif -#endif - -#if defined(_WIN32) -GLboolean glewCreateContext (int* pixelformat); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewCreateContext (const char* display, int* visual); -#else -GLboolean glewCreateContext (); -#endif - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual); -#endif - -void glewDestroyContext (); - -/* ------------------------------------------------------------------------- */ - -static void glewPrintExt (const char* name, GLboolean def1, GLboolean def2, GLboolean def3) -{ - unsigned int i; - fprintf(f, "\n%s:", name); - for (i=0; i<62-strlen(name); i++) fprintf(f, " "); - fprintf(f, "%s ", def1 ? "OK" : "MISSING"); - if (def1 != def2) - fprintf(f, "[%s] ", def2 ? "OK" : "MISSING"); - if (def1 != def3) - fprintf(f, "[%s]\n", def3 ? "OK" : "MISSING"); - else - fprintf(f, "\n"); - for (i=0; i]\n"); -#else - fprintf(stderr, "Usage: glewinfo [-display ] [-visual ]\n"); -#endif - return 1; - } -#endif - -#if defined(_WIN32) - if (GL_TRUE == glewCreateContext(&visual)) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - if (GL_TRUE == glewCreateContext()) -#else - if (GL_TRUE == glewCreateContext(display, &visual)) -#endif - { - fprintf(stderr, "Error: glewCreateContext failed\n"); - glewDestroyContext(); - return 1; - } - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -#ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -#endif - -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - glewDestroyContext(); - return 1; - } -#if defined(_WIN32) - f = fopen("glewinfo.txt", "w"); - if (f == NULL) f = stdout; -#else - f = stdout; -#endif - fprintf(f, "---------------------------\n"); - fprintf(f, " GLEW Extension Info\n"); - fprintf(f, "---------------------------\n\n"); - fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(_WIN32) - fprintf(f, "Reporting capabilities of pixelformat %d\n", visual); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", - display == NULL ? getenv("DISPLAY") : display, visual); -#endif - fprintf(f, "Running on a %s from %s\n", - glGetString(GL_RENDERER), glGetString(GL_VENDOR)); - fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); - glewInfo(); -#if defined(_WIN32) - wglewInfo(); -#else - glxewInfo(); -#endif - if (f != stdout) fclose(f); - glewDestroyContext(); - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - *display = 0; - *visual = strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - *display = argv[p++]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - *visual = (int)strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#endif - } - return GL_FALSE; -} -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -HWND wnd = NULL; -HDC dc = NULL; -HGLRC rc = NULL; - -GLboolean glewCreateContext (int* pixelformat) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); - if (NULL == wnd) return GL_TRUE; - /* get the device context */ - dc = GetDC(wnd); - if (NULL == dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (*pixelformat == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - *pixelformat = ChoosePixelFormat(dc, &pfd); - if (*pixelformat == 0) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(dc, *pixelformat, &pfd)) return GL_TRUE; - /* create rendering context */ - rc = wglCreateContext(dc); - if (NULL == rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(dc, rc)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != rc) wglMakeCurrent(NULL, NULL); - if (NULL != rc) wglDeleteContext(rc); - if (NULL != wnd && NULL != dc) ReleaseDC(wnd, dc); - if (NULL != wnd) DestroyWindow(wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#include - -AGLContext ctx, octx; - -GLboolean glewCreateContext () -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx = aglCreateContext(pf, NULL); - if (NULL == ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx)) return GL_TRUE; - /* Needed for Regal on the Mac */ - #if defined(GLEW_REGAL) && defined(__APPLE__) - RegalMakeCurrent(octx); - #endif - return GL_FALSE; -} - -void glewDestroyContext () -{ - aglSetCurrentContext(octx); - if (NULL != ctx) aglDestroyContext(ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -Display* dpy = NULL; -XVisualInfo* vi = NULL; -XVisualInfo* vis = NULL; -GLXContext ctx = NULL; -Window wnd = 0; -Colormap cmap = 0; - -GLboolean glewCreateContext (const char* display, int* visual) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* open display */ - dpy = XOpenDisplay(display); - if (NULL == dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - if (*visual == -1) - { - vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); - if (NULL == vi) return GL_TRUE; - *visual = (int)XVisualIDFromVisual(vi->visual); - } - else - { - int n_vis, i; - vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); - for (i=0; iscreen), 0, 0, 1, 1, 1, 0, 0);*/ - cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = cmap; - wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), - 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != dpy && NULL != ctx) glXDestroyContext(dpy, ctx); - if (NULL != dpy && 0 != wnd) XDestroyWindow(dpy, wnd); - if (NULL != dpy && 0 != cmap) XFreeColormap(dpy, cmap); - if (NULL != vis) - XFree(vis); - else if (NULL != vi) - XFree(vi); - if (NULL != dpy) XCloseDisplay(dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ diff --git a/Engine/lib/glew/auto/src/glewinfo_wgl.c b/Engine/lib/glew/auto/src/glewinfo_wgl.c deleted file mode 100644 index 61f101a090..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_wgl.c +++ /dev/null @@ -1,8 +0,0 @@ -} - -/* ------------------------------------------------------------------------ */ - -#ifdef _WIN32 - -static void wglewInfo () -{ diff --git a/Engine/lib/glew/auto/src/glxew_head.h b/Engine/lib/glew/auto/src/glxew_head.h deleted file mode 100644 index 16fdfa4126..0000000000 --- a/Engine/lib/glew/auto/src/glxew_head.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef __glxew_h__ -#define __glxew_h__ -#define __GLXEW_H__ - -#ifdef __glxext_h_ -#error glxext.h included before glxew.h -#endif - -#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) -#error glx.h included before glxew.h -#endif - -#define __glxext_h_ - -#define GLX_H -#define __GLX_glx_h__ -#define __glx_h__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ - -#ifndef GLX_VERSION_1_0 -#define GLX_VERSION_1_0 1 - -#define GLX_USE_GL 1 -#define GLX_BUFFER_SIZE 2 -#define GLX_LEVEL 3 -#define GLX_RGBA 4 -#define GLX_DOUBLEBUFFER 5 -#define GLX_STEREO 6 -#define GLX_AUX_BUFFERS 7 -#define GLX_RED_SIZE 8 -#define GLX_GREEN_SIZE 9 -#define GLX_BLUE_SIZE 10 -#define GLX_ALPHA_SIZE 11 -#define GLX_DEPTH_SIZE 12 -#define GLX_STENCIL_SIZE 13 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_NO_EXTENSION 3 -#define GLX_BAD_VISUAL 4 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_ENUM 7 - -typedef XID GLXDrawable; -typedef XID GLXPixmap; -#ifdef __sun -typedef struct __glXContextRec *GLXContext; -#else -typedef struct __GLXcontextRec *GLXContext; -#endif - -typedef unsigned int GLXVideoDeviceNV; - -extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); -extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); -extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); -extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); -extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); -extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); -extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); -extern void glXDestroyContext (Display *dpy, GLXContext ctx); -extern Bool glXIsDirect (Display *dpy, GLXContext ctx); -extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); -extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); -extern GLXContext glXGetCurrentContext (void); -extern GLXDrawable glXGetCurrentDrawable (void); -extern void glXWaitGL (void); -extern void glXWaitX (void); -extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); -extern void glXUseXFont (Font font, int first, int count, int listBase); - -#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) - -#endif /* GLX_VERSION_1_0 */ - -/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ - -#ifndef GLX_VERSION_1_1 -#define GLX_VERSION_1_1 - -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_EXTENSIONS 0x3 - -extern const char* glXQueryExtensionsString (Display *dpy, int screen); -extern const char* glXGetClientString (Display *dpy, int name); -extern const char* glXQueryServerString (Display *dpy, int screen, int name); - -#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) - -#endif /* GLX_VERSION_1_1 */ - diff --git a/Engine/lib/glew/auto/src/glxew_mid.h b/Engine/lib/glew/auto/src/glxew_mid.h deleted file mode 100644 index e9a3391ace..0000000000 --- a/Engine/lib/glew/auto/src/glxew_mid.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT -#else -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/glxew_tail.h b/Engine/lib/glew/auto/src/glxew_tail.h deleted file mode 100644 index 39e9953923..0000000000 --- a/Engine/lib/glew/auto/src/glxew_tail.h +++ /dev/null @@ -1,30 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -#ifdef GLEW_MX - -typedef struct GLXEWContextStruct GLXEWContext; -GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name); - -#define glxewInit() glxewContextInit(glxewGetContext()) -#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) -#define GLXEW_GET_FUN(x) x - -#else /* GLEW_MX */ - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLXEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* __glxew_h__ */ diff --git a/Engine/lib/glew/auto/src/header.html b/Engine/lib/glew/auto/src/header.html deleted file mode 100644 index 95fcd739af..0000000000 --- a/Engine/lib/glew/auto/src/header.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - diff --git a/Engine/lib/glew/auto/src/khronos_license.h b/Engine/lib/glew/auto/src/khronos_license.h deleted file mode 100644 index 420cd72273..0000000000 --- a/Engine/lib/glew/auto/src/khronos_license.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - diff --git a/Engine/lib/glew/auto/src/mesa_license.h b/Engine/lib/glew/auto/src/mesa_license.h deleted file mode 100644 index 3350cca3f0..0000000000 --- a/Engine/lib/glew/auto/src/mesa_license.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * - * 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 - * BRIAN PAUL 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. - */ - diff --git a/Engine/lib/glew/auto/src/visualinfo.rc b/Engine/lib/glew/auto/src/visualinfo.rc deleted file mode 100644 index 2373944577..0000000000 --- a/Engine/lib/glew/auto/src/visualinfo.rc +++ /dev/null @@ -1,57 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "visualinfo-mxd.exe" -# else -# define FILENAME "visualinfo-mx.exe" -# endif -#else -# ifdef _DEBUG -# define FILENAME "visualinfod.exe" -# else -# define FILENAME "visualinfo.exe" -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n \r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\nLicense Applicability. Except to the extent portions of this file are\r\nmade subject to an alternative license as permitted in the SGI Free\r\nSoftware License B, Version 1.1 (the 'License'), the contents of this\r\nfile are subject only to the provisions of the License. You may not use\r\nthis file except in compliance with the License. You may obtain a copy\r\nof the License at Silicon Graphics, Inc., attn: Legal Services, 1600\r\nAmphitheatre Parkway, Mountain View, CA 94043-1351, or at:\r\n\r\nhttp://oss.sgi.com/projects/FreeB\r\n\r\nNote that, as provided in the License, the Software is distributed on an\r\n'AS IS' basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\r\nDISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\r\nCONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\r\nPARTICULAR PURPOSE, AND NON-INFRINGEMENT.\r\n\r\nOriginal Code. The Original Code is: OpenGL Sample Implementation,\r\nVersion 1.2.1, released January 26, 2000, developed by Silicon Graphics,\r\nInc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\r\nCopyright in any portions created by third parties is as indicated\r\nelsewhere herein. All Rights Reserved.\r\n\r\nAdditional Notice Provisions: This software was created using the\r\nOpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\r\nnot been independently verified as being compliant with the OpenGL(R)\r\nversion 1.2.1 Specification.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "Utility for listing pixelformat capabilities\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "visualinfo\0" - VALUE "LegalCopyright", " 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/wglew_head.h b/Engine/lib/glew/auto/src/wglew_head.h deleted file mode 100644 index df8850392f..0000000000 --- a/Engine/lib/glew/auto/src/wglew_head.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef __wglew_h__ -#define __wglew_h__ -#define __WGLEW_H__ - -#ifdef __wglext_h_ -#error wglext.h included before wglew.h -#endif - -#define __wglext_h_ - -#if !defined(WINAPI) -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN 1 -# endif -#include -# undef WIN32_LEAN_AND_MEAN -#endif - -/* - * GLEW_STATIC needs to be set when using the static version. - * GLEW_BUILD is set when building the DLL version. - */ -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - diff --git a/Engine/lib/glew/auto/src/wglew_mid.h b/Engine/lib/glew/auto/src/wglew_mid.h deleted file mode 100644 index a0a5ade406..0000000000 --- a/Engine/lib/glew/auto/src/wglew_mid.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define WGLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT -#else -#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/wglew_tail.h b/Engine/lib/glew/auto/src/wglew_tail.h deleted file mode 100644 index 9bbe94572d..0000000000 --- a/Engine/lib/glew/auto/src/wglew_tail.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX - -typedef struct WGLEWContextStruct WGLEWContext; -GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name); - -#define wglewInit() wglewContextInit(wglewGetContext()) -#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) -#define WGLEW_GET_FUN(x) wglewGetContext()->x - -#else /* GLEW_MX */ - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define WGLEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#undef GLEWAPI - -#endif /* __wglew_h__ */ diff --git a/Engine/lib/glew/config/Makefile.cygming b/Engine/lib/glew/config/Makefile.cygming deleted file mode 100644 index afdd851e4e..0000000000 --- a/Engine/lib/glew/config/Makefile.cygming +++ /dev/null @@ -1,25 +0,0 @@ -NAME = glew32 -GLEW_DEST = /usr -BINDIR = /usr/bin -LIBDIR = /usr/lib/mingw -INCDIR = /usr/include/mingw/GL -# use gcc for linking, with ld it does not work -CC := gcc -mno-cygwin -LD := gcc -mno-cygwin -LN := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -LDFLAGS.EXTRA = -L$(LIBDIR) -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.cygwin b/Engine/lib/glew/config/Makefile.cygwin deleted file mode 100644 index b044273df2..0000000000 --- a/Engine/lib/glew/config/Makefile.cygwin +++ /dev/null @@ -1,24 +0,0 @@ -NAME = GLEW -GLEW_DEST ?= /usr -# use gcc for linking, with ld it does not work -CC := cc -LD := cc -LN := -LDFLAGS.EXTRA = -LIBDIR = $(GLEW_DEST)/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.DEVLNK = lib$(NAME).dll.a -LIB.SHARED = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a -LIB.SHARED.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.darwin b/Engine/lib/glew/config/Makefile.darwin deleted file mode 100644 index 0c05ed1b81..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.darwin-ppc b/Engine/lib/glew/config/Makefile.darwin-ppc deleted file mode 100644 index 2aaf66a45f..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin-ppc +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -arch ppc -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -arch ppc -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.darwin-x86_64 b/Engine/lib/glew/config/Makefile.darwin-x86_64 deleted file mode 100644 index 83e5c474e5..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin-x86_64 +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -arch x86_64 -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -arch x86_64 -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.fedora-mingw32 b/Engine/lib/glew/config/Makefile.fedora-mingw32 deleted file mode 100644 index f27db344d3..0000000000 --- a/Engine/lib/glew/config/Makefile.fedora-mingw32 +++ /dev/null @@ -1,11 +0,0 @@ -# For cross-compiling from Linux to Windows x86 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=fedora-mingw32 -# - -include config/Makefile.linux-mingw32 - -CC := i686-pc-mingw32-gcc -LD := i686-pc-mingw32-ld -LDFLAGS.GL += -L/usr/i686-pc-mingw32/sys-root/mingw/lib diff --git a/Engine/lib/glew/config/Makefile.freebsd b/Engine/lib/glew/config/Makefile.freebsd deleted file mode 100644 index ab9d9d90b2..0000000000 --- a/Engine/lib/glew/config/Makefile.freebsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R6/include -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.gnu b/Engine/lib/glew/config/Makefile.gnu deleted file mode 100644 index 2398ab0540..0000000000 --- a/Engine/lib/glew/config/Makefile.gnu +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.irix b/Engine/lib/glew/config/Makefile.irix deleted file mode 100644 index a1be5eeff8..0000000000 --- a/Engine/lib/glew/config/Makefile.irix +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -ABI = -64# -n32 -CC += $(ABI) -LD += $(ABI) -LDFLAGS.EXTRA = -LDFLAGS.GL = -lGL -lXext -lX11 -NAME = GLEW -WARN = -fullwarn -woff 1110,1498 -POPT = -O2 -OPT:Olimit=0 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.kfreebsd b/Engine/lib/glew/config/Makefile.kfreebsd deleted file mode 100644 index 9501091bb0..0000000000 --- a/Engine/lib/glew/config/Makefile.kfreebsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.linux b/Engine/lib/glew/config/Makefile.linux deleted file mode 100644 index 234adc65c3..0000000000 --- a/Engine/lib/glew/config/Makefile.linux +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -M_ARCH ?= $(shell uname -m) -ARCH64 = false -ifeq (x86_64,${M_ARCH}) - ARCH64 = true -endif -ifeq (ppc64,${M_ARCH}) - ARCH64 = true -endif -ifeq (${ARCH64},true) - LDFLAGS.EXTRA = -L/usr/X11R6/lib64 -L/usr/lib64 - LIBDIR = $(GLEW_DEST)/lib64 -else - LDFLAGS.EXTRA = -L/usr/X11R6/lib -L/usr/lib - LIBDIR = $(GLEW_DEST)/lib -endif -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.linux-mingw32 b/Engine/lib/glew/config/Makefile.linux-mingw32 deleted file mode 100644 index d9573a7809..0000000000 --- a/Engine/lib/glew/config/Makefile.linux-mingw32 +++ /dev/null @@ -1,26 +0,0 @@ -# For cross-compiling from Linux to Windows x86 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=linux-mingw32 -# - -NAME := glew32 -CC := i586-mingw32msvc-gcc -LD := i586-mingw32msvc-ld -LN := -STRIP := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.linux-mingw64 b/Engine/lib/glew/config/Makefile.linux-mingw64 deleted file mode 100644 index 6093351168..0000000000 --- a/Engine/lib/glew/config/Makefile.linux-mingw64 +++ /dev/null @@ -1,26 +0,0 @@ -# For cross-compiling from Linux to Windows amd64 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=linux-mingw64 -# - -NAME := glew32 -CC := amd64-mingw32msvc-gcc -LD := amd64-mingw32msvc-ld -LN := -STRIP := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.mingw b/Engine/lib/glew/config/Makefile.mingw deleted file mode 100644 index e74fd3c24d..0000000000 --- a/Engine/lib/glew/config/Makefile.mingw +++ /dev/null @@ -1,21 +0,0 @@ -NAME = glew32 -# use gcc for linking, with ld it does not work -CC := gcc -LD := gcc -LN := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -LDFLAGS.EXTRA = -L/mingw/lib -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.nacl-32 b/Engine/lib/glew/config/Makefile.nacl-32 deleted file mode 100644 index 2a5cec757a..0000000000 --- a/Engine/lib/glew/config/Makefile.nacl-32 +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(REGAL_NAME) - -M_PREFIX = i686 -M_NAME ?= $(shell uname -s) -ifeq (Linux,${M_NAME}) -M_PREFIX = i686 -endif - -CC = $(M_PREFIX)-nacl-gcc -CXX = $(M_PREFIX)-nacl-g++ -LD = $(M_PREFIX)-nacl-ld -STRIP ?= -EXT.DYNAMIC = so -LDFLAGS.EXTRA = -LIBDIR = -CFLAGS.EXTRA += -fPIC -CFLAGS.EXTRA += -m32 -LDFLAGS.EXTRA += -melf_nacl -LDFLAGS.GL = -LDFLAGS.GLU = -lRegalGLU -LDFLAGS.GLUT = -lRegalGLUT -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -shared -WARN = -Wall -W -Wno-unused-parameter -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.nacl-64 b/Engine/lib/glew/config/Makefile.nacl-64 deleted file mode 100644 index 37cb6e93bd..0000000000 --- a/Engine/lib/glew/config/Makefile.nacl-64 +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(REGAL_NAME) - -M_PREFIX = i686 -M_NAME ?= $(shell uname -s) -ifeq (Linux,${M_NAME}) -M_PREFIX = i686 -endif - -CC = $(M_PREFIX)-nacl-gcc -CXX = $(M_PREFIX)-nacl-g++ -LD = $(M_PREFIX)-nacl-ld -STRIP ?= -EXT.DYNAMIC = so -LDFLAGS.EXTRA = -LIBDIR = -CFLAGS.EXTRA += -fPIC -CFLAGS.EXTRA += -m64 -LDFLAGS.EXTRA += -melf64_nacl -LDFLAGS.GL = -LDFLAGS.GLU = -lRegalGLU -LDFLAGS.GLUT = -lRegalGLUT -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -shared -WARN = -Wall -W -Wno-unused-parameter -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.netbsd b/Engine/lib/glew/config/Makefile.netbsd deleted file mode 100644 index 5f69cd60ef..0000000000 --- a/Engine/lib/glew/config/Makefile.netbsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R7/lib -R /usr/X11R7/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R7/include -fPIC -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.openbsd b/Engine/lib/glew/config/Makefile.openbsd deleted file mode 100644 index 365ea9e4b8..0000000000 --- a/Engine/lib/glew/config/Makefile.openbsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGLU -lGL -lXext -lX11 -lm -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R6/include -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.solaris b/Engine/lib/glew/config/Makefile.solaris deleted file mode 100644 index befba5a838..0000000000 --- a/Engine/lib/glew/config/Makefile.solaris +++ /dev/null @@ -1,18 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -CFLAGS.EXTRA = -I/usr/openwin/include -LDFLAGS.SO = -G -LDFLAGS.EXTRA = -L/usr/openwin/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -NAME = GLEW -BIN.SUFFIX = -POPT = -xO2 -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a diff --git a/Engine/lib/glew/config/Makefile.solaris-gcc b/Engine/lib/glew/config/Makefile.solaris-gcc deleted file mode 100644 index c0373f4d48..0000000000 --- a/Engine/lib/glew/config/Makefile.solaris-gcc +++ /dev/null @@ -1,20 +0,0 @@ -NAME = $(GLEW_NAME) -CC = gcc -LD = ld -CFLAGS.EXTRA = -I/usr/openwin/include -LDFLAGS.SO = -G -LDFLAGS.EXTRA = -L/usr/openwin/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -NAME = GLEW -BIN.SUFFIX = -POPT = -O2 -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/config.guess b/Engine/lib/glew/config/config.guess deleted file mode 100644 index 116b959ee5..0000000000 --- a/Engine/lib/glew/config/config.guess +++ /dev/null @@ -1,1523 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. - -timestamp='2012-02-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Engine/lib/glew/config/version b/Engine/lib/glew/config/version deleted file mode 100644 index 3d56f1959c..0000000000 --- a/Engine/lib/glew/config/version +++ /dev/null @@ -1,7 +0,0 @@ -GLEW_MAJOR = 1 -GLEW_MINOR = 10 -GLEW_MICRO = 0 -GLEW_VERSION = $(GLEW_MAJOR).$(GLEW_MINOR).$(GLEW_MICRO) -GLEW_NAME = GLEW -SO_MAJOR = $(GLEW_MAJOR).$(GLEW_MINOR) -SO_VERSION = $(GLEW_VERSION) diff --git a/Engine/lib/glew/doc/advanced.html b/Engine/lib/glew/doc/advanced.html deleted file mode 100644 index a3cb7db90a..0000000000 --- a/Engine/lib/glew/doc/advanced.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Automatic Code Generation

- -

-Starting from release 1.1.0, the source code and parts of the -documentation are automatically generated from the extension -specifications in a two-step process. In the first step, -specification files from the OpenGL registry are downloaded and -parsed. Skeleton descriptors are created for each extension. These -descriptors contain all necessary information for creating the source -code and documentation in a simple and compact format, including the -name of the extension, url link to the specification, tokens, function -declarations, typedefs and struct definitions. In the second step, -the header files as well as the library and glewinfo source are -generated from the descriptor files. The code generation scripts are -located in the auto subdirectory. -

- -

-The code generation scripts require GNU make, wget, and perl. On -Windows, the simplest way to get access to these tools is to install -Cygwin, but make sure that the -root directory is mounted in binary mode. The makefile in the -auto directory provides the following build targets: -

- - - - - - - - - - - - -
makeCreate the source files from the descriptors.
If the -descriptors do not exist, create them from the spec files.
If the spec -files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions -listed in auto/custom.txt.
See "Custom Code -Generation" below for more details.
- -

Adding a New Extension

- -

-To add a new extension, create a descriptor file for the extension in -auto/core and rerun the code generation scripts by typing -make clean; make in the auto directory. -

- -

-The format of the descriptor file is given below. Items in -brackets are optional. -

- -

-<Extension Name>
-[<URL of Specification File>]
-    [<Token Name> <Token Value>]
-    [<Token Name> <Token Value>]
-    ...
-    [<Typedef>]
-    [<Typedef>]
-    ...
-    [<Function Signature>]
-    [<Function Signature>]
-    ...
- -

- - - -

-Take a look at one of the files in auto/core for an -example. Note that typedefs and function signatures should not be -terminated with a semicolon. -

- -

Custom Code Generation

-

-Starting from GLEW 1.3.0, it is possible to control which extensions -to include in the libarary by specifying a list in -auto/custom.txt. This is useful when you do not need all the -extensions and would like to reduce the size of the source files. -Type make clean; make custom in the auto directory -to rerun the scripts with the custom list of extensions. -

- -

-For example, the following is the list of extensions needed to get GLEW and the -utilities to compile. -

- -

-WGL_ARB_extensions_string
-WGL_ARB_multisample
-WGL_ARB_pixel_format
-WGL_ARB_pbuffer
-WGL_EXT_extensions_string
-WGL_ATI_pixel_format_float
-WGL_NV_float_buffer
-

- -

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

- -

Separate Namespace

- -

-To avoid name clashes when linking with libraries that include the -same symbols, extension entry points are declared in a separate -namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL -function names to their GLEW equivalents. For instance, -glFancyFunction is simply an alias to -glewFancyFunction. The separate namespace does not effect -token and function pointer definitions. -

- -

Known Issues

- -

-GLEW requires GLX 1.2 for compatibility with GLUT. -

- - -
- - diff --git a/Engine/lib/glew/doc/basic.html b/Engine/lib/glew/doc/basic.html deleted file mode 100644 index 4419b33b06..0000000000 --- a/Engine/lib/glew/doc/basic.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Initializing GLEW

-

-First you need to create a valid OpenGL rendering context and call -glewInit() to initialize the extension entry points. If -glewInit() returns GLEW_OK, the initialization -succeeded and you can use the available extensions as well as core -OpenGL functionality. For example: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-...
-glutInit(&argc, argv);
-glutCreateWindow("GLEW Test");
-GLenum err = glewInit();
-if (GLEW_OK != err)
-{
-  /* Problem: glewInit failed, something is seriously wrong. */
-  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
-  ...
-}
-fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
-

- -

Checking for Extensions

- -

-Starting from GLEW 1.1.0, you can find out if a particular extension -is available on your platform by querying globally defined variables -of the form GLEW_{extension_name}: -

- -

-if (GLEW_ARB_vertex_program)
-{
-  /* It is safe to use the ARB_vertex_program extension here. */
-  glGenProgramsARB(...);
-}
-

- -

-In GLEW 1.0.x, a global structure was used for this task. To ensure -binary compatibility between releases, the struct was replaced with a -set of variables. -

- -

-You can also check for core OpenGL functionality. For example, to -see if OpenGL 1.3 is supported, do the following: -

- -

-if (GLEW_VERSION_1_3)
-{
-  /* Yay! OpenGL 1.3 is supported! */
-}
-

- -

-In general, you can check if GLEW_{extension_name} or -GLEW_VERSION_{version} is true or false. -

- -

-It is also possible to perform extension checks from string -input. Starting from the 1.3.0 release, use glewIsSupported -to check if the required core or extension functionality is -available: -

- -

-if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
-{
-  /* Great, we have OpenGL 1.4 + point sprites. */
-}
-

- -

-For extensions only, glewGetExtension provides a slower alternative -(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release -glewGetExtension was replaced with -glewIsSupported. -

- -

-if (glewGetExtension("GL_ARB_fragment_program"))
-{
-  /* Looks like ARB_fragment_program is supported. */
-}
-

- -

Experimental Drivers

- -

-GLEW obtains information on the supported extensions from the graphics -driver. Experimental or pre-release drivers, however, might not -report every available extension through the standard mechanism, in -which case GLEW will report it unsupported. To circumvent this -situation, the glewExperimental global switch can be turned -on by setting it to GL_TRUE before calling -glewInit(), which ensures that all extensions with valid -entry points will be exposed. -

- -

Platform Specific Extensions

- -

-Platform specific extensions are separated into two header files: -wglew.h and glxew.h, which define the available -WGL and GLX extensions. To determine if a certain -extension is supported, query WGLEW_{extension name} or -GLXEW_{extension_name}. For example: -

- -

-#include <GL/wglew.h>
-
-if (WGLEW_ARB_pbuffer)
-{
-  /* OK, we can use pbuffers. */
-}
-else
-{
-  /* Sorry, pbuffers will not work on this platform. */
-}
-

- -

-Alternatively, use wglewIsSupported or -glxewIsSupported to check for extensions from a string: -

- -

-if (wglewIsSupported("WGL_ARB_pbuffer"))
-{
-  /* OK, we can use pbuffers. */
-}
-

- -

Utilities

- -

-GLEW provides two command-line utilities: one for creating a list of -available extensions and visuals; and another for verifying extension -entry points. -

- -

visualinfo: extensions and visuals

- -

-visualinfo is an extended version of glxinfo. The -Windows version creates a file called visualinfo.txt, which -contains a list of available OpenGL, WGL, and GLU extensions as well -as a table of visuals aka. pixel formats. Pbuffer and MRT capable -visuals are also included. For additional usage information, type -visualinfo -h. -

- -

glewinfo: extension verification utility

- -

-glewinfo allows you to verify the entry points for the -extensions supported on your platform. The Windows version -reports the results to a text file called glewinfo.txt. The -Unix version prints the results to stdout. -

- -

Windows usage:

-
glewinfo [-pf <id>]
- -

where <id> is the pixel format id for which the -capabilities are displayed.

- -

Unix usage:

-
glewinfo [-display <dpy>] [-visual <id>]
- -

where <dpy> is the X11 display and <id> is -the visual id for which the capabilities are displayed.

- - -
- - diff --git a/Engine/lib/glew/doc/build.html b/Engine/lib/glew/doc/build.html deleted file mode 100644 index 7e31e944ad..0000000000 --- a/Engine/lib/glew/doc/build.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Building GLEW

- -

Windows

- -

A MS Visual Studio project is provided in the build/vc6 directory.

-

Pre-built shared and static libraries are also available for download.

- -

Makefile

- -

For platforms other than MS Windows, the provided Makefile is used.

- -

Command-line variables

- - - - - - -
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
-config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
- -

Make targets

- - - - - - - - - - - - -
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
- -

Requirements

- -
    -
  • GNU make
  • -
  • perl
  • -
  • wget
  • -
  • GNU sed
  • -
  • gcc compiler
  • -
- -Ubuntu:
sudo apt-get install Xmu-dev Xi-Dev
- -
- - diff --git a/Engine/lib/glew/doc/credits.html b/Engine/lib/glew/doc/credits.html deleted file mode 100644 index 983fc7bfca..0000000000 --- a/Engine/lib/glew/doc/credits.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

- -
- - diff --git a/Engine/lib/glew/doc/glew.css b/Engine/lib/glew/doc/glew.css deleted file mode 100644 index 1bb7dd178a..0000000000 --- a/Engine/lib/glew/doc/glew.css +++ /dev/null @@ -1,187 +0,0 @@ -h1 -{ - color: black; - font: 23px "Verdana", "Arial", "Helvetica", sans-serif; - font-weight: bold; - text-align: center; - margin-top: 12px; - margin-bottom: 18px; -} - -h2 -{ - color: black; - font: 18px "Verdana", "Arial", "Helvetica", sans-serif; - font-weight: bold; - text-align: left; - padding-top: 0px; - padding-bottom: 0px; - margin-top: 18px; - margin-bottom: 12px; -} - -h3 -{ - color: black; - font: 17px "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; - padding-top: 0px; - padding-bottom: 0px; - margin-top: 12px; - margin-bottom: 12px; -} - -small -{ - font: 8pt "Verdana", "Arial", "Helvetica", sans-serif; -} - -body -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; -} - -td -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; -} - -tt -{ - color: rgb(0,120,0); -} -/* color: maroon; */ - -td.num -{ - color: lightgrey; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: right; -} - -blockquote -{ - color: rgb(0,120,0); - background: #f0f0f0; - text-align: left; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 6px; - padding-bottom: 0px; - margin-top: 0px; - padding-top: 0px; - border-top: 0px; - border-width: 0px; -} - -pre -{ - color: rgb(0,120,0); - background: #f0f0f0; - text-align: left; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 6px; - padding-bottom: 0px; - margin-top: 0px; - padding-top: 0px; - border-top: 0px; - border-width: 0px; -} - -p -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; - margin-bottom: 0px; - padding-bottom: 6px; - margin-top: 0px; - padding-top: 0px; -} - -p.right -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: right; - margin-bottom: 0px; - padding-bottom: 6px; - margin-top: 0px; - padding-top: 0px; -} - -p.pre -{ - color: rgb(0,120,0); - font: 10pt "Courier New", "Courier", monospace; - background: #f0f0f0; - text-align: left; - margin-top: 0px; - margin-bottom: 6px; - margin-left: 40px; - margin-right: 40px; - padding-top: 0px; - padding-bottom: 6px; - padding-left: 6px; - padding-right: 6px; - border-top: 0px; - border-width: 0px; -} - -a:link -{ - color: rgb(0,0,139); - text-decoration: none; -} - -a:visited -{ - color: rgb(220,20,60); - text-decoration: none; -} - -a:hover -{ - color: rgb(220,20,60); - text-decoration: underline; - background: "#e8e8e8"; -} - -ul -{ - list-style-type: disc; - text-align: left; - margin-left: 40px; - margin-top: 0px; - padding-top: 0px; - margin-bottom: 0px; - padding-bottom: 3px; -} - -ul.none -{ - list-style-type: none; -} - -ol -{ - text-align: left; - margin-left: 40px; - margin-top: 0px; - padding-top: 0px; - margin-bottom: 0px; - padding-bottom: 12px; -} - -hr -{ - color: maroon; - background-color: maroon; - height: 1px; - border: 0px; - width: 80%; -} diff --git a/Engine/lib/glew/doc/glew.html b/Engine/lib/glew/doc/glew.html deleted file mode 100644 index 4800bbfa0b..0000000000 --- a/Engine/lib/glew/doc/glew.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported OpenGL Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample
2 3DFX_tbuffer
3 3DFX_texture_compression_FXT1

4 AMD_blend_minmax_factor
5 AMD_conservative_depth
6 AMD_debug_output
7 AMD_depth_clamp_separate
8 AMD_draw_buffers_blend
9 AMD_interleaved_elements
10 AMD_multi_draw_indirect
11 AMD_name_gen_delete
12 AMD_performance_monitor
13 AMD_pinned_memory
14 AMD_query_buffer_object
15 AMD_sample_positions
16 AMD_seamless_cubemap_per_texture
17 AMD_shader_stencil_export
18 AMD_shader_trinary_minmax
19 AMD_sparse_texture
20 AMD_stencil_operation_extended
21 AMD_texture_texture4
22 AMD_transform_feedback3_lines_triangles
23 AMD_vertex_shader_layer
24 AMD_vertex_shader_tessellator
25 AMD_vertex_shader_viewport_index

26 ANGLE_depth_texture
27 ANGLE_framebuffer_blit
28 ANGLE_framebuffer_multisample
29 ANGLE_instanced_arrays
30 ANGLE_pack_reverse_row_order
31 ANGLE_program_binary
32 ANGLE_texture_compression_dxt1
33 ANGLE_texture_compression_dxt3
34 ANGLE_texture_compression_dxt5
35 ANGLE_texture_usage
36 ANGLE_timer_query
37 ANGLE_translated_shader_source

38 APPLE_aux_depth_stencil
39 APPLE_client_storage
40 APPLE_element_array
41 APPLE_fence
42 APPLE_float_pixels
43 APPLE_flush_buffer_range
44 APPLE_object_purgeable
45 APPLE_pixel_buffer
46 APPLE_rgb_422
47 APPLE_row_bytes
48 APPLE_specular_vector
49 APPLE_texture_range
50 APPLE_transform_hint
51 APPLE_vertex_array_object
52 APPLE_vertex_array_range
53 APPLE_vertex_program_evaluators
54 APPLE_ycbcr_422

55 ARB_ES2_compatibility
56 ARB_ES3_compatibility
57 ARB_arrays_of_arrays
58 ARB_base_instance
59 ARB_bindless_texture
60 ARB_blend_func_extended
61 ARB_buffer_storage
62 ARB_cl_event
63 ARB_clear_buffer_object
64 ARB_clear_texture
65 ARB_color_buffer_float
66 ARB_compatibility
67 ARB_compressed_texture_pixel_storage
68 ARB_compute_shader
69 ARB_compute_variable_group_size
70 ARB_conservative_depth
71 ARB_copy_buffer
72 ARB_copy_image
73 ARB_debug_output
74 ARB_depth_buffer_float
75 ARB_depth_clamp
76 ARB_depth_texture
77 ARB_draw_buffers
78 ARB_draw_buffers_blend
79 ARB_draw_elements_base_vertex
80 ARB_draw_indirect
81 ARB_draw_instanced
82 ARB_enhanced_layouts
83 ARB_explicit_attrib_location
84 ARB_explicit_uniform_location
85 ARB_fragment_coord_conventions
86 ARB_fragment_layer_viewport
87 ARB_fragment_program
88 ARB_fragment_program_shadow
89 ARB_fragment_shader
90 ARB_framebuffer_no_attachments
91 ARB_framebuffer_object
92 ARB_framebuffer_sRGB
93 ARB_geometry_shader4
94 ARB_get_program_binary
95 ARB_gpu_shader5
96 ARB_gpu_shader_fp64
97 ARB_half_float_pixel
98 ARB_half_float_vertex
99 ARB_imaging
100 ARB_indirect_parameters
101 ARB_instanced_arrays
102 ARB_internalformat_query
103 ARB_internalformat_query2
104 ARB_invalidate_subdata
105 ARB_map_buffer_alignment
106 ARB_map_buffer_range
107 ARB_matrix_palette
108 ARB_multi_bind
109 ARB_multi_draw_indirect
110 ARB_multisample
111 ARB_multitexture
112 ARB_occlusion_query
113 ARB_occlusion_query2
114 ARB_pixel_buffer_object
115 ARB_point_parameters
116 ARB_point_sprite
117 ARB_program_interface_query
118 ARB_provoking_vertex
119 ARB_query_buffer_object
120 ARB_robust_buffer_access_behavior
121 ARB_robustness
122 ARB_robustness_application_isolation
123 ARB_robustness_share_group_isolation
124 ARB_sample_shading
125 ARB_sampler_objects
126 ARB_seamless_cube_map
127 ARB_seamless_cubemap_per_texture
128 ARB_separate_shader_objects
129 ARB_shader_atomic_counters
130 ARB_shader_bit_encoding
131 ARB_shader_draw_parameters
132 ARB_shader_group_vote
133 ARB_shader_image_load_store
134 ARB_shader_image_size
135 ARB_shader_objects
136 ARB_shader_precision
137 ARB_shader_stencil_export
138 ARB_shader_storage_buffer_object
139 ARB_shader_subroutine
140 ARB_shader_texture_lod
141 ARB_shading_language_100
142 ARB_shading_language_420pack
143 ARB_shading_language_include
144 ARB_shading_language_packing
145 ARB_shadow
146 ARB_shadow_ambient
147 ARB_sparse_texture
148 ARB_stencil_texturing
149 ARB_sync
150 ARB_tessellation_shader
151 ARB_texture_border_clamp
152 ARB_texture_buffer_object
153 ARB_texture_buffer_object_rgb32
154 ARB_texture_buffer_range
155 ARB_texture_compression
156 ARB_texture_compression_bptc
157 ARB_texture_compression_rgtc
158 ARB_texture_cube_map
159 ARB_texture_cube_map_array
160 ARB_texture_env_add
161 ARB_texture_env_combine
162 ARB_texture_env_crossbar
163 ARB_texture_env_dot3
164 ARB_texture_float
165 ARB_texture_gather
166 ARB_texture_mirror_clamp_to_edge
167 ARB_texture_mirrored_repeat
168 ARB_texture_multisample
169 ARB_texture_non_power_of_two
170 ARB_texture_query_levels
171 ARB_texture_query_lod
172 ARB_texture_rectangle
173 ARB_texture_rg
174 ARB_texture_rgb10_a2ui
175 ARB_texture_stencil8
176 ARB_texture_storage
177 ARB_texture_storage_multisample
178 ARB_texture_swizzle
179 ARB_texture_view
180 ARB_timer_query
181 ARB_transform_feedback2
182 ARB_transform_feedback3
183 ARB_transform_feedback_instanced
184 ARB_transpose_matrix
185 ARB_uniform_buffer_object
186 ARB_vertex_array_bgra
187 ARB_vertex_array_object
188 ARB_vertex_attrib_64bit
189 ARB_vertex_attrib_binding
190 ARB_vertex_blend
191 ARB_vertex_buffer_object
192 ARB_vertex_program
193 ARB_vertex_shader
194 ARB_vertex_type_10f_11f_11f_rev
195 ARB_vertex_type_2_10_10_10_rev
196 ARB_viewport_array
197 ARB_window_pos

198 ATIX_point_sprites
199 ATIX_texture_env_combine3
200 ATIX_texture_env_route
201 ATIX_vertex_shader_output_point_size

202 ATI_draw_buffers
203 ATI_element_array
204 ATI_envmap_bumpmap
205 ATI_fragment_shader
206 ATI_map_object_buffer
207 ATI_meminfo
208 ATI_pn_triangles
209 ATI_separate_stencil
210 ATI_shader_texture_lod
211 ATI_text_fragment_shader
212 ATI_texture_compression_3dc
213 ATI_texture_env_combine3
214 ATI_texture_float
215 ATI_texture_mirror_once
216 ATI_vertex_array_object
217 ATI_vertex_attrib_array_object
218 ATI_vertex_streams

219 EXT_422_pixels
220 EXT_Cg_shader
221 EXT_abgr
222 EXT_bgra
223 EXT_bindable_uniform
224 EXT_blend_color
225 EXT_blend_equation_separate
226 EXT_blend_func_separate
227 EXT_blend_logic_op
228 EXT_blend_minmax
229 EXT_blend_subtract
230 EXT_clip_volume_hint
231 EXT_cmyka
232 EXT_color_subtable
233 EXT_compiled_vertex_array
234 EXT_convolution
235 EXT_coordinate_frame
236 EXT_copy_texture
237 EXT_cull_vertex
238 EXT_debug_marker
239 EXT_depth_bounds_test
240 EXT_direct_state_access
241 EXT_draw_buffers2
242 EXT_draw_instanced
243 EXT_draw_range_elements
244 EXT_fog_coord
245 EXT_fragment_lighting
246 EXT_framebuffer_blit
247 EXT_framebuffer_multisample
248 EXT_framebuffer_multisample_blit_scaled
249 EXT_framebuffer_object
250 EXT_framebuffer_sRGB
251 EXT_geometry_shader4
252 EXT_gpu_program_parameters
253 EXT_gpu_shader4
254 EXT_histogram
255 EXT_index_array_formats
256 EXT_index_func
257 EXT_index_material
258 EXT_index_texture
259 EXT_light_texture
260 EXT_misc_attribute
261 EXT_multi_draw_arrays
262 EXT_multisample
263 EXT_packed_depth_stencil
264 EXT_packed_float
265 EXT_packed_pixels
266 EXT_paletted_texture
267 EXT_pixel_buffer_object
268 EXT_pixel_transform
269 EXT_pixel_transform_color_table
270 EXT_point_parameters
271 EXT_polygon_offset
272 EXT_provoking_vertex
273 EXT_rescale_normal
274 EXT_scene_marker
275 EXT_secondary_color
276 EXT_separate_shader_objects
277 EXT_separate_specular_color
278 EXT_shader_image_load_store
279 EXT_shadow_funcs
280 EXT_shared_texture_palette
281 EXT_stencil_clear_tag
282 EXT_stencil_two_side
283 EXT_stencil_wrap
284 EXT_subtexture
285 EXT_texture
286 EXT_texture3D
287 EXT_texture_array
288 EXT_texture_buffer_object
289 EXT_texture_compression_dxt1
290 EXT_texture_compression_latc
291 EXT_texture_compression_rgtc
292 EXT_texture_compression_s3tc
293 EXT_texture_cube_map
294 EXT_texture_edge_clamp
295 EXT_texture_env
296 EXT_texture_env_add
297 EXT_texture_env_combine
298 EXT_texture_env_dot3
299 EXT_texture_filter_anisotropic
300 EXT_texture_integer
301 EXT_texture_lod_bias
302 EXT_texture_mirror_clamp
303 EXT_texture_object
304 EXT_texture_perturb_normal
305 EXT_texture_rectangle
306 EXT_texture_sRGB
307 EXT_texture_sRGB_decode
308 EXT_texture_shared_exponent
309 EXT_texture_snorm
310 EXT_texture_swizzle
311 EXT_timer_query
312 EXT_transform_feedback
313 EXT_vertex_array
314 EXT_vertex_array_bgra
315 EXT_vertex_attrib_64bit
316 EXT_vertex_shader
317 EXT_vertex_weighting
318 EXT_x11_sync_object

319 GREMEDY_frame_terminator
320 GREMEDY_string_marker

321 HP_convolution_border_modes
322 HP_image_transform
323 HP_occlusion_test
324 HP_texture_lighting

325 IBM_cull_vertex
326 IBM_multimode_draw_arrays
327 IBM_rasterpos_clip
328 IBM_static_data
329 IBM_texture_mirrored_repeat
330 IBM_vertex_array_lists

331 INGR_color_clamp
332 INGR_interlace_read

333 INTEL_map_texture
334 INTEL_parallel_arrays
335 INTEL_texture_scissor

336 KHR_debug
337 KHR_texture_compression_astc_ldr

338 KTX_buffer_region

339 MESAX_texture_stack

340 MESA_pack_invert
341 MESA_resize_buffers
342 MESA_window_pos
343 MESA_ycbcr_texture

344 NVX_conditional_render
345 NVX_gpu_memory_info

346 NV_bindless_multi_draw_indirect
347 NV_bindless_texture
348 NV_blend_equation_advanced
349 NV_blend_equation_advanced_coherent
350 NV_blend_square
351 NV_compute_program5
352 NV_conditional_render
353 NV_copy_depth_to_color
354 NV_copy_image
355 NV_deep_texture3D
356 NV_depth_buffer_float
357 NV_depth_clamp
358 NV_depth_range_unclamped
359 NV_draw_texture
360 NV_evaluators
361 NV_explicit_multisample
362 NV_fence
363 NV_float_buffer
364 NV_fog_distance
365 NV_fragment_program
366 NV_fragment_program2
367 NV_fragment_program4
368 NV_fragment_program_option
369 NV_framebuffer_multisample_coverage
370 NV_geometry_program4
371 NV_geometry_shader4
372 NV_gpu_program4
373 NV_gpu_program5
374 NV_gpu_program5_mem_extended
375 NV_gpu_program_fp64
376 NV_gpu_shader5
377 NV_half_float
378 NV_light_max_exponent
379 NV_multisample_coverage
380 NV_multisample_filter_hint
381 NV_occlusion_query
382 NV_packed_depth_stencil
383 NV_parameter_buffer_object
384 NV_parameter_buffer_object2
385 NV_path_rendering
386 NV_pixel_data_range
387 NV_point_sprite
388 NV_present_video
389 NV_primitive_restart
390 NV_register_combiners
391 NV_register_combiners2
392 NV_shader_atomic_counters
393 NV_shader_atomic_float
394 NV_shader_buffer_load
395 NV_shader_storage_buffer_object
396 NV_tessellation_program5
397 NV_texgen_emboss
398 NV_texgen_reflection
399 NV_texture_barrier
400 NV_texture_compression_vtc
401 NV_texture_env_combine4
402 NV_texture_expand_normal
403 NV_texture_multisample
404 NV_texture_rectangle
405 NV_texture_shader
406 NV_texture_shader2
407 NV_texture_shader3
408 NV_transform_feedback
409 NV_transform_feedback2
410 NV_vdpau_interop
411 NV_vertex_array_range
412 NV_vertex_array_range2
413 NV_vertex_attrib_integer_64bit
414 NV_vertex_buffer_unified_memory
415 NV_vertex_program
416 NV_vertex_program1_1
417 NV_vertex_program2
418 NV_vertex_program2_option
419 NV_vertex_program3
420 NV_vertex_program4
421 NV_video_capture

422 OES_byte_coordinates
423 OES_compressed_paletted_texture
424 OES_read_format
425 OES_single_precision

426 OML_interlace
427 OML_resample
428 OML_subsample

429 PGI_misc_hints
430 PGI_vertex_hints

431 REGAL_ES1_0_compatibility
432 REGAL_ES1_1_compatibility
433 REGAL_enable
434 REGAL_error_string
435 REGAL_extension_query
436 REGAL_log

437 REND_screen_coordinates

438 S3_s3tc

439 SGIS_color_range
440 SGIS_detail_texture
441 SGIS_fog_function
442 SGIS_generate_mipmap
443 SGIS_multisample
444 SGIS_pixel_texture
445 SGIS_point_line_texgen
446 SGIS_sharpen_texture
447 SGIS_texture4D
448 SGIS_texture_border_clamp
449 SGIS_texture_edge_clamp
450 SGIS_texture_filter4
451 SGIS_texture_lod
452 SGIS_texture_select

453 SGIX_async
454 SGIX_async_histogram
455 SGIX_async_pixel
456 SGIX_blend_alpha_minmax
457 SGIX_clipmap
458 SGIX_convolution_accuracy
459 SGIX_depth_texture
460 SGIX_flush_raster
461 SGIX_fog_offset
462 SGIX_fog_texture
463 SGIX_fragment_specular_lighting
464 SGIX_framezoom
465 SGIX_interlace
466 SGIX_ir_instrument1
467 SGIX_list_priority
468 SGIX_pixel_texture
469 SGIX_pixel_texture_bits
470 SGIX_reference_plane
471 SGIX_resample
472 SGIX_shadow
473 SGIX_shadow_ambient
474 SGIX_sprite
475 SGIX_tag_sample_buffer
476 SGIX_texture_add_env
477 SGIX_texture_coordinate_clamp
478 SGIX_texture_lod_bias
479 SGIX_texture_multi_buffer
480 SGIX_texture_range
481 SGIX_texture_scale_bias
482 SGIX_vertex_preclip
483 SGIX_vertex_preclip_hint
484 SGIX_ycrcb

485 SGI_color_matrix
486 SGI_color_table
487 SGI_texture_color_table

488 SUNX_constant_data

489 SUN_convolution_border_modes
490 SUN_global_alpha
491 SUN_mesh_array
492 SUN_read_video_pixels
493 SUN_slice_accum
494 SUN_triangle_list
495 SUN_vertex

496 WIN_phong_shading
497 WIN_specular_fog
498 WIN_swap_hint
- -
- - diff --git a/Engine/lib/glew/doc/glew.png b/Engine/lib/glew/doc/glew.png deleted file mode 100644 index d46550f194..0000000000 Binary files a/Engine/lib/glew/doc/glew.png and /dev/null differ diff --git a/Engine/lib/glew/doc/glew.txt b/Engine/lib/glew/doc/glew.txt deleted file mode 100644 index 31a31d3dbe..0000000000 --- a/Engine/lib/glew/doc/glew.txt +++ /dev/null @@ -1,28 +0,0 @@ -The OpenGL Extension Wrangler Library -Copyright (C) 2002-2008, Milan Ikits -Copyright (C) 2002-2008, Marcelo E. Magallon -Copyright (C) 2002, Lev Povalahev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* The name of the author may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Engine/lib/glew/doc/glxew.html b/Engine/lib/glew/doc/glxew.html deleted file mode 100644 index 08f01079f7..0000000000 --- a/Engine/lib/glew/doc/glxew.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported GLX Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample

2 AMD_gpu_association

3 ARB_create_context
4 ARB_create_context_profile
5 ARB_create_context_robustness
6 ARB_fbconfig_float
7 ARB_framebuffer_sRGB
8 ARB_get_proc_address
9 ARB_multisample
10 ARB_robustness_application_isolation
11 ARB_robustness_share_group_isolation
12 ARB_vertex_buffer_object

13 ATI_pixel_format_float
14 ATI_render_texture

15 EXT_buffer_age
16 EXT_create_context_es2_profile
17 EXT_create_context_es_profile
18 EXT_fbconfig_packed_float
19 EXT_framebuffer_sRGB
20 EXT_import_context
21 EXT_scene_marker
22 EXT_swap_control
23 EXT_swap_control_tear
24 EXT_texture_from_pixmap
25 EXT_visual_info
26 EXT_visual_rating

27 INTEL_swap_event

28 MESA_agp_offset
29 MESA_copy_sub_buffer
30 MESA_pixmap_colormap
31 MESA_release_buffers
32 MESA_set_3dfx_mode
33 MESA_swap_control

34 NV_copy_image
35 NV_float_buffer
36 NV_multisample_coverage
37 NV_present_video
38 NV_swap_group
39 NV_vertex_array_range
40 NV_video_capture
41 NV_video_output

42 OML_swap_method
43 OML_sync_control

44 SGIS_blended_overlay
45 SGIS_color_range
46 SGIS_multisample
47 SGIS_shared_multisample

48 SGIX_fbconfig
49 SGIX_hyperpipe
50 SGIX_pbuffer
51 SGIX_swap_barrier
52 SGIX_swap_group
53 SGIX_video_resize
54 SGIX_visual_select_group

55 SGI_cushion
56 SGI_make_current_read
57 SGI_swap_control
58 SGI_video_sync

59 SUN_get_transparent_index
60 SUN_video_resize
- -
- - diff --git a/Engine/lib/glew/doc/gpl.txt b/Engine/lib/glew/doc/gpl.txt deleted file mode 100644 index b7b5f53df1..0000000000 --- a/Engine/lib/glew/doc/gpl.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/Engine/lib/glew/doc/index.html b/Engine/lib/glew/doc/index.html deleted file mode 100644 index 2969b947f1..0000000000 --- a/Engine/lib/glew/doc/index.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

-The OpenGL Extension Wrangler Library (GLEW) is a cross-platform -open-source C/C++ extension loading library. GLEW provides efficient -run-time mechanisms for determining which OpenGL extensions are -supported on the target platform. OpenGL core and extension -functionality is exposed in a single header file. GLEW has been -tested on a variety of operating systems, including Windows, Linux, -Mac OS X, FreeBSD, Irix, and Solaris. -

- -

Downloads

-

-GLEW is distributed -as source and precompiled binaries.
-The latest release is -1.10.0[07-22-13]: -

-

-

-

- - - -
- - - - - - - - - - - - - - - -
Source -ZIP |  -TGZ
Binaries -Windows 32-bit and 64-bit |  -
-
- -

-

-An up-to-date copy is also available using git: -

-
    -
  • github
    -git clone https://github.com/nigels-com/glew.git glew
     
  • -
  • Sourceforge
    -git clone git://git.code.sf.net/p/glew/code glew
     
  • -
- -

-

-Unsupported snapshots are also available: -

- - -

Supported Extensions

-

-The latest release contains support for OpenGL 4.4 and the following extensions: -

- - -

News

-
    -
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • -
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • -
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • -
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • -
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • -
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • -
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • -
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • -
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • -
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • -
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • -
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • -
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • -
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • -
  • [04-27-07] GLEW 1.4.0 is released
  • -
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • -
  • [03-04-07] GLEW 1.3.6 is released
  • -
  • [02-28-07] Repository is migrated to SVN
  • -
  • [02-25-07] GLEW is included in the OpenGL SDK
  • -
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • -
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • -
  • [05-16-05] GLEW 1.3.3 is released
  • -
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • -
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • -
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • -
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • -
  • [12-22-04] GLEWpy Python wrapper announced
  • -
  • [12-12-04] Mailing lists created on sourceforge
  • -
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • -
- -

Links

- - - -
- - diff --git a/Engine/lib/glew/doc/install.html b/Engine/lib/glew/doc/install.html deleted file mode 100644 index b47d40fbba..0000000000 --- a/Engine/lib/glew/doc/install.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Installation

- -

-To use the shared library version of GLEW, you need to copy the -headers and libraries into their destination directories. On Windows -this typically boils down to copying: -

- - - - - - - - - - -
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
-

-

- -

-where {VC Root} is the Visual C++ root directory, typically -C:/Program Files/Microsoft Visual Studio/VC98 for Visual -Studio 6.0 or C:/Program Files/Microsoft Visual -Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. -

- -

-On Unix, typing make install will attempt to install GLEW -into /usr/include/GL and /usr/lib. You can -customize the installation target via the GLEW_DEST -environment variable if you do not have write access to these -directories. -

- -

Building Your Project with GLEW

-

-There are two ways to build your project with GLEW. -

-

Including the source files / project file

-

-The simpler but less flexible way is to include glew.h and -glew.c into your project. On Windows, you also need to -define the GLEW_STATIC preprocessor token when building a -static library or executable, and the GLEW_BUILD preprocessor -token when building a dll. You also need to replace -<GL/gl.h> and <GL/glu.h> with -<glew.h> in your code and set the appropriate include -flag (-I) to tell the compiler where to look for it. For -example: -

-

-#include <glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

-

-Depending on where you put glew.h you may also need to change -the include directives in glew.c. Note that if you are using -GLEW together with GLUT, you have to include glew.h first. -In addition, glew.h includes glu.h, so you do not -need to include it separately. -

-

-On Windows, you also have the option of adding the supplied project -file glew_static.dsp to your workspace (solution) and compile -it together with your other projects. In this case you also need to -change the GLEW_BUILD preprocessor constant to -GLEW_STATIC when building a static library or executable, -otherwise you get build errors. -

-

-Note that GLEW does not use the C -runtime library, so it does not matter which version (single-threaded, -multi-threaded or multi-threaded DLL) it is linked with (without -debugging information). It is, however, always a good idea to compile all -your projects including GLEW with the same C runtime settings. -

- -

Using GLEW as a shared library

- -

-Alternatively, you can use the provided project files / makefile to -build a separate shared library you can link your projects with later. -In this case the best practice is to install glew.h, -glew32.lib, and glew32.dll / libGLEW.so to -where the OpenGL equivalents gl.h, opengl32.lib, and -opengl32.dll / libGL.so are located. Note that you -need administrative privileges to do this. If you do not have -administrator access and your system administrator will not do it for -you, you can install GLEW into your own lib and include subdirectories -and tell the compiler where to find it. Then you can just replace -<GL/gl.h> with <GL/glew.h> in your -program: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

- -

-or: -

- -

-#include <GL/glew.h>
-<gl and glu functionality is available here>
-

- -

-Remember to link your project with glew32.lib, -glu32.lib, and opengl32.lib on Windows and -libGLEW.so, libGLU.so, and libGL.so on -Unix (-lGLEW -lGLU -lGL). -

- -

-It is important to keep in mind that glew.h includes neither -windows.h nor gl.h. Also, GLEW will warn you by -issuing a preprocessor error in case you have included gl.h, -glext.h, or glATI.h before glew.h. -

- - -
- - diff --git a/Engine/lib/glew/doc/khronos.txt b/Engine/lib/glew/doc/khronos.txt deleted file mode 100644 index ffc271c915..0000000000 --- a/Engine/lib/glew/doc/khronos.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2007 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/Engine/lib/glew/doc/log.html b/Engine/lib/glew/doc/log.html deleted file mode 100644 index b2998b9634..0000000000 --- a/Engine/lib/glew/doc/log.html +++ /dev/null @@ -1,1015 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Change Log

- -
-
    -
  • 1.10.0 [07-22-13] -
      -
    • New features: -
        -
      • Support for OpenGL 4.4 -
      -
    • New extensions: -
        -
      • GL_AMD_interleaved_elements -
      • GL_AMD_shader_trinary_minmax -
      • GL_AMD_sparse_texture -
      • GL_ANGLE_depth_texture -
      • GL_ANGLE_framebuffer_blit -
      • GL_ANGLE_framebuffer_multisample -
      • GL_ANGLE_instanced_arrays -
      • GL_ANGLE_pack_reverse_row_order -
      • GL_ANGLE_program_binary -
      • GL_ANGLE_texture_compression_dxt1 -
      • GL_ANGLE_texture_compression_dxt3 -
      • GL_ANGLE_texture_compression_dxt5 -
      • GL_ANGLE_texture_usage -
      • GL_ANGLE_timer_query -
      • GL_ANGLE_translated_shader_source -
      • GL_ARB_bindless_texture -
      • GL_ARB_buffer_storage -
      • GL_ARB_clear_texture -
      • GL_ARB_compute_variable_group_size -
      • GL_ARB_enhanced_layouts -
      • GL_ARB_indirect_parameters -
      • GL_ARB_multi_bind -
      • GL_ARB_query_buffer_object -
      • GL_ARB_seamless_cubemap_per_texture -
      • GL_ARB_shader_draw_parameters -
      • GL_ARB_shader_group_vote -
      • GL_ARB_sparse_texture -
      • GL_ARB_texture_mirror_clamp_to_edge -
      • GL_ARB_texture_stencil8 -
      • GL_ARB_vertex_type_10f_11f_11f_rev -
      • GL_INTEL_map_texture -
      • GL_NVX_conditional_render -
      • GL_NV_bindless_multi_draw_indirect -
      • GL_NV_blend_equation_advanced -
      • GL_NV_compute_program5 -
      • GL_NV_deep_texture3D -
      • GL_NV_draw_texture -
      • GL_NV_shader_atomic_counters -
      • GL_NV_shader_storage_buffer_object -
      • GL_REGAL_ES1_0_compatibility -
      • GL_REGAL_ES1_1_compatibility -
      • GL_REGAL_enable -
      • GLX_EXT_buffer_age -
      • WGL_ARB_robustness_application_isolation -
      • WGL_ARB_robustness_share_group_isolation -
      -
    • Bug fixes -
    -
- -
-
    -
  • 1.9.0 [08-06-12] -
      -
    • New features: - -
    • New extensions: -
        -
      • GL_ARB_ES3_compatibility -
      • GL_ARB_clear_buffer_object -
      • GL_ARB_compute_shader -
      • GL_ARB_copy_image -
      • GL_ARB_explicit_uniform_location -
      • GL_ARB_fragment_layer_viewport -
      • GL_ARB_framebuffer_no_attachments -
      • GL_ARB_internalformat_query2 -
      • GL_ARB_multi_draw_indirect -
      • GL_ARB_program_interface_query -
      • GL_ARB_robust_buffer_access_behavior -
      • GL_ARB_robustness_application_isolation -
      • GL_ARB_robustness_share_group_isolation -
      • GL_ARB_shader_image_size -
      • GL_ARB_shader_storage_buffer_object -
      • GL_ARB_stencil_texturing -
      • GL_ARB_texture_buffer_range -
      • GL_ARB_texture_query_levels -
      • GL_ARB_texture_storage_multisample -
      • GL_ARB_texture_view -
      • GL_ARB_vertex_attrib_binding -
      • GL_EXT_debug_marker -
      • GL_KHR_debug -
      • GL_REGAL_error_string -
      • GL_REGAL_extension_query -
      • GL_REGAL_log -
      • GLX_ARB_robustness_application_isolation -
      • GLX_ARB_robustness_share_group_isolation -
      • GLX_EXT_create_context_es_profile -
      • WGL_EXT_create_context_es_profile -
      -
    • Bug fixes: -
        -
      • Not using GLU library for Makefile builds. -
      -
    -
- -
-
    -
  • 1.8.0 [07-17-12] -
      -
    • New extensions: -
        -
      • GL_AMD_pinned_memory -
      • GL_AMD_query_buffer_object -
      • GL_AMD_stencil_operation_extended -
      • GL_AMD_vertex_shader_layer -
      • GL_AMD_vertex_shader_viewport_index -
      • GL_NV_bindless_texture -
      • GL_NV_shader_atomic_float -
      • GLX_EXT_swap_control_tear -
      • WGL_EXT_swap_control_tear -
      • WGL_NV_DX_interop2 -
      -
    • Bug fixes: -
        -
      • MS Visual Studio 2010 projects added -
      • GLX_NV_video_out replaces GLX_NV_video_output -
      • ANSI C prototype for glewInit -
      • Improved CentOS build support -
      • Improved GL_ARB_gpu_shader_fp64 support -
      • ARB_texture_compression_bptc and ARB_copy_buffer constants -
      • Linux needs to define GLEW_STATIC for static library builds -
      • Custom code generation problem resolved -
      • GLEWAPIENTRY added to glew.h for calling convention customization -
      • Correction for glPathStencilDepthOffsetNV -
      • Resolve OSX gcc warnings -
      • Added build support for NetBSD -
      -
    -
- -
-
    -
  • 1.7.0 [08-26-11] -
      -
    • New features: -
        -
      • Support for OpenGL 4.2 -
      -
    • New extensions: -
        -
      • GL_AMD_multi_draw_indirect -
      • GL_ARB_base_instance -
      • GL_ARB_compressed_texture_pixel_storage -
      • GL_ARB_conservative_depth -
      • GL_ARB_internalformat_query -
      • GL_ARB_map_buffer_alignment -
      • GL_ARB_shader_atomic_counters -
      • GL_ARB_shader_image_load_store -
      • GL_ARB_shading_language_420pack -
      • GL_ARB_shading_language_packing -
      • GL_ARB_texture_storage -
      • GL_ARB_transform_feedback_instanced -
      • GL_EXT_framebuffer_multisample_blit_scaled -
      • GL_NV_path_rendering -
      • GL_NV_path_rendering -
      • GLX_MESA_swap_control -
      -
    • Bug fixes: -
        -
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements -
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness -
      • Remove EXT suffix from GL_KTX_buffer_region entry points -
      • Solaris needs inttypes.h -
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context -
      • Add GLX_MESA_swap_control -
      • Set -install_name for OSX -
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) -
      • Add GL_NV_path_rendering -
      -
    -
- -
-
    -
  • 1.6.0 [04-27-11] -
      -
    • New extensions: -
        -
      • GL_AMD_blend_minmax_factor -
      • GL_AMD_sample_positions -
      • GL_EXT_x11_sync_object -
      • GL_NV_texture_multisample -
      • GL_NV_video_capture -
      • GLX_NV_video_capture -
      • WGL_NV_DX_interop -
      • WGL_NV_video_capture -
      -
    • Bug fixes: -
        -
      • Define GLEW_NO_GLU for no glu dependency. -
      • mx suffix for GLEW MX libraries, build both libraries by default. -
      • Cygwin build improvements -
      • Soname of GLEWmx shared libraries -
      • Query GL extension string only once -
      • GLX_OML_sync_control no longer requires C99 -
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays -
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array -
      • Fixes for BSD build -
      -
    -
- -
-
    -
  • 1.5.8 [01-31-11] -
      -
    • New extensions: -
        -
      • GL_AMD_depth_clamp_separate -
      • GL_EXT_texture_sRGB_decode -
      -
    • Bug fixes: -
        -
      • Borland C++ fix for __int64 -
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 -
      • Correction to glGetTransformFeedbackVarying -
      • Correction to glSecondaryColorPointer -
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource -
      • Switched code repository from svn to git -
      -
    -
- -
-
    -
  • 1.5.7 [11-03-10] -
      -
    • New extension: -
        -
      • GL_NVX_gpu_memory_info -
      -
    • Bug fixes: -
        -
      • Improved mingw32 build support -
      • Improved cygwin build support -
      • glGetPointervEXT fix -
      • Add GLEW_VERSION_1_2_1 -
      -
    -
- -
-
    -
  • 1.5.6 [09-07-10] -
      -
    • New features: -
        -
      • Support for OpenGL 4.1 -
      -
    • New extensions: -
        -
      • GL_ARB_ES2_compatibility -
      • GL_ARB_cl_event -
      • GL_ARB_debug_output -
      • GL_ARB_get_program_binary -
      • GL_ARB_robustness -
      • GL_ARB_separate_shader_objects -
      • GL_ARB_shader_precision -
      • GL_ARB_shader_stencil_export -
      • GL_ARB_vertex_attrib_64bit -
      • GL_ARB_viewport_array -
      • GLX_ARB_create_context_robustness -
      • GLX_EXT_create_context_es2_profile -
      • WGL_ARB_create_context_robustness -
      • WGL_EXT_create_context_es2_profile -
      -
    -
- -
-
    -
  • 1.5.5 [07-13-10] -
      -
    • New extensions: -
        -
      • GL_AMD_debug_output -
      • GL_AMD_name_gen_delete -
      • GL_AMD_transform_feedback3_lines_triangles -
      • GL_NV_multisample_coverage -
      • GL_NV_vdpau_interop -
      • GLX_AMD_gpu_association -
      • GLX_NV_multisample_coverage -
      • WGL_NV_multisample_coverage -
      -
    • Bug fixes: -
        -
      • Compilation issue with GLX_SGI_video_sync -
      • OpenGL 4.0 double-precision uniform functions added -
      • Constness of glPointParameterfvARB and glPointParameterfvEXT -
      • Added glVertexAttribDivisor -
      • Compilation issue with Nvidia GLX headers -
      -
    -
- -
-
    -
  • 1.5.4 [04-21-10] -
      -
    • New features: -
        -
      • Support for OpenGL 3.3 -
      • Support for OpenGL 4.0 -
      -
    • New extensions: -
        -
      • GL_AMD_conservative_depth -
      • GL_ARB_blend_func_extended -
      • GL_ARB_draw_indirect -
      • GL_ARB_explicit_attrib_location -
      • GL_ARB_gpu_shader5 -
      • GL_ARB_gpu_shader_fp64 -
      • GL_ARB_occlusion_query2 -
      • GL_ARB_sampler_objects -
      • GL_ARB_shader_bit_encoding -
      • GL_ARB_shader_subroutine -
      • GL_ARB_shading_language_include -
      • GL_ARB_tessellation_shader -
      • GL_ARB_texture_buffer_object_rgb32 -
      • GL_ARB_texture_compression_bptc -
      • GL_ARB_texture_rgb10_a2ui -
      • GL_ARB_texture_swizzle -
      • GL_ARB_timer_query -
      • GL_ARB_transform_feedback2 -
      • GL_ARB_transform_feedback3 -
      • GL_ARB_vertex_type_2_10_10_10_rev -
      • GL_EXT_shader_image_load_store -
      • GL_EXT_vertex_attrib_64bit -
      • GL_NV_gpu_program5 -
      • GL_NV_gpu_program_fp64 -
      • GL_NV_gpu_shader5 -
      • GL_NV_tessellation_program5 -
      • GL_NV_vertex_attrib_integer_64bit -
      • GLX_ARB_vertex_buffer_object -
      -
    • Bug fixes: -
        -
      • Parameter constness fix for glPointParameteriv and glPointParameterfv -
      -
    -
- -
-
    -
  • 1.5.3 [02-28-10] -
      -
    • New extensions: -
        -
      • GLX_INTEL_swap_event -
      • GL_AMD_seamless_cubemap_per_texture -
      • GL_AMD_shader_stencil_export -
      -
    • Bug fixes: -
        -
      • Correct version detection for GL 3.1 and 3.2 -
      • Missing 3.1 enumerants -
      • Add glew.pc -
      -
    -
- -
-
    -
  • 1.5.2 [12-31-09] -
      -
    • New features: -
        -
      • Support for OpenGL 3.1 -
      • Support for OpenGL 3.2 -
      -
    • New extensions: -
        -
      • GL_AMD_draw_buffers_blend -
      • GL_AMD_performance_monitor -
      • GL_AMD_texture_texture4 -
      • GL_AMD_vertex_shader_tessellator -
      • GL_APPLE_aux_depth_stencil -
      • GL_APPLE_object_purgeable -
      • GL_APPLE_rgb_422 -
      • GL_APPLE_row_bytes -
      • GL_APPLE_vertex_program_evaluators -
      • GL_ARB_compatibility -
      • GL_ARB_copy_buffer -
      • GL_ARB_depth_clamp -
      • GL_ARB_draw_buffers_blend -
      • GL_ARB_draw_elements_base_vertex -
      • GL_ARB_fragment_coord_conventions -
      • GL_ARB_provoking_vertex -
      • GL_ARB_sample_shading -
      • GL_ARB_seamless_cube_map -
      • GL_ARB_shader_texture_lod -
      • GL_ARB_sync -
      • GL_ARB_texture_cube_map_array -
      • GL_ARB_texture_gather -
      • GL_ARB_texture_multisample -
      • GL_ARB_texture_query_lod -
      • GL_ARB_uniform_buffer_object -
      • GL_ARB_vertex_array_bgra -
      • GL_ATI_meminfo -
      • GL_EXT_provoking_vertex -
      • GL_EXT_separate_shader_objects -
      • GL_EXT_texture_snorm -
      • GL_NV_copy_image -
      • GL_NV_parameter_buffer_object2 -
      • GL_NV_shader_buffer_load -
      • GL_NV_texture_barrier -
      • GL_NV_transform_feedback2 -
      • GL_NV_vertex_buffer_unified_memory -
      • WGL_AMD_gpu_association -
      • WGL_ARB_create_context_profile -
      • WGL_NV_copy_image -
      • GLX_ARB_create_context_profile -
      • GLX_EXT_swap_control -
      • GLX_NV_copy_image -
      -
    • Bug fixes: -
        -
      • DOS line endings for windows .zip archives only. -
      • glTransformFeedbackVaryings arguments. -
      • Resource leak in glewinfo and visualinfo tools. -
      • WIN32_LEAN_AND_MEAN preprocessor pollution. -
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. -
      • MesaGLUT glut.h GLAPIENTRY dependency. -
      • glFramebufferTextureLayer correction. -
      • OSX compiler warnings resolved. -
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. -
      • SnowLeopard (OSX 10.6) gl.h detection. -
      • Use $(STRIP) consistently. -
      -
    -
- -
-
    -
  • 1.5.1 [11-03-08] -
      -
    • New features: -
        -
      • Support for OpenGL 3.0 -
      -
    • New extensions: -
        -
      • GL_ARB_depth_buffer_float -
      • GL_ARB_draw_instance, -
      • GL_ARB_framebuffer_object -
      • GL_ARB_framebuffer_sRGB -
      • GL_ARB_geometry_shader4 -
      • GL_ARB_half_float_pixel -
      • GL_ARB_half_float_vertex -
      • GL_ARB_instanced_arrays -
      • GL_ARB_map_buffer_range -
      • GL_ARB_texture_buffer_object -
      • GL_ARB_texture_compression_rgtc -
      • GL_ARB_vertex_array_object -
      • GL_EXT_direct_state_access -
      • GL_EXT_texture_swizzle -
      • GL_EXT_transform_feedback -
      • GL_EXT_vertex_array_bgra -
      • GL_NV_conditional_render -
      • GL_NV_explicit_multisample -
      • GL_NV_present_video -
      • GL_SGIS_point_line_texgen -
      • GL_SGIX_convolution_accuracy -
      • WGL_ARB_create_context -
      • WGL_ARB_framebuffer_sRGB -
      • WGL_NV_present_video -
      • WGL_NV_swap_group -
      • WGL_NV_video_output -
      • GLX_ARB_create_context -
      • GLX_ARB_framebuffer_sRGB -
      • GLX_NV_present_video -
      • GLX_NV_swap_group -
      • GLX_NV_video_output -
      -
    • Bug fixes: -
        -
      • Licensing issues with documentation -
      • Problems with long long and _MSC_VER on MINGW -
      • Incorrect parameter for glGetUniformLocation -
      • glewGetExtension fails on last entry -
      • Incomplete GL_NV_texture_shader tokens -
      • Scripting problems on Cygwin -
      • Incorrect definition for GLint on OS X -
      -
    -
- -
-
    -
  • 1.5.0 [12-27-07] -
      -
    • New features: -
        -
      • Licensing change (BSD, Mesa 3-D, Khronos) -
      • Switch to using registry on www.opengl.org -
      • Support for major and minor version strings -
      -
    • New extensions: -
        -
      • GL_APPLE_flush_buffer_range -
      • GL_GREMEDY_frame_terminator -
      • GLX_EXT_texture_from_pixmap -
      -
    • Bug fixes: -
        -
      • Incorrent 64-bit type definitions -
      • Do not strip static library on install -
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read -
      • Missing tokens in GL_VERSION_2_1 -
      • Missing functions in GL_VERSION_1_4 -
      • Incorrect parameter type for glXCopyContext -
      -
    -
-
-
    -
  • 1.4.0 [04-27-07] -
      -
    • New features: -
        -
      • Extension variables are declared const to avoid possible -corruption of their values -
      -
    • New extensions: -
        -
      • GL_NV_depth_range_unclamped -
      -
    • Bug fixes: -
        -
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage -
      • Incorrect function names in GL_EXT_gpu_program_parameters -
      • Missing tokens in GL_EXT_framebuffer_multisample -
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string -
      -
    -
-
-
    -
  • 1.3.6 [03-04-07] -
      -
    • New extensions: -
        -
      • GL_ATI_shader_texture_lod -
      • GL_EXT_gpu_program_parameters -
      • GL_NV_geometry_shader4 -
      • WGL_NV_gpu_affinity -
      • GLX_SGIX_hyperpipe -
      -
    • Bug fixes: -
        -
      • Missing include guards in glxew.h -
      • Makefile and install problems for Cygwin builds -
      • Install problem for Linux AMD64 builds -
      • Incorrent token in GL_ATI_texture_compression_3dc -
      • Missing tokens from GL_ATIX_point_sprites -
      -
    -
-
-
    -
  • 1.3.5 [11-21-06] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.1 -
      • Debug support for glewIsSupported -
      -
    • New extensions: -
        -
      • GL_EXT_bindable_uniform -
      • GL_EXT_draw_buffers2 -
      • GL_EXT_draw_instanced -
      • GL_EXT_framebuffer_sRGB -
      • GL_EXT_geometry_shader4 -
      • GL_EXT_gpu_shader4 -
      • GL_EXT_packed_float -
      • GL_EXT_texture_array -
      • GL_EXT_texture_buffer_object -
      • GL_EXT_texture_compression_latc -
      • GL_EXT_texture_compression_rgtc -
      • GL_EXT_texture_integer -
      • GL_EXT_texture_shared_exponent -
      • GL_EXT_timer_query -
      • GL_NV_depth_buffer_float -
      • GL_NV_fragment_program4 -
      • GL_NV_framebuffer_multisample_coverage -
      • GL_NV_geometry_program4 -
      • GL_NV_gpu_program4 -
      • GL_NV_parameter_buffer_object -
      • GL_NV_transform_feedback -
      • GL_NV_vertex_program4 -
      • GL_OES_byte_coordinates -
      • GL_OES_compressed_paletted_texture -
      • GL_OES_read_format -
      • GL_OES_single_precision -
      • WGL_EXT_pixel_format_packed_float -
      • WGL_EXT_framebuffer_sRGB -
      • GLX_EXT_fbconfig_packed_float -
      • GLX_EXT_framebuffer_sRGB -
      -
    • Bug fixes: -
        -
      • Wrong GLXContext definition on Solaris -
      • Makefile problem for parallel builds -
      -
    -
-
-
    -
  • 1.3.4 [03-04-06] -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_blit -
      • GL_EXT_framebuffer_multisample -
      • GL_EXT_packed_depth_stencil -
      • GL_MESAX_texture_stack -
      • WGL_3DL_stereo_control -
      -
    -
      -
    • Bug fixes: -
        -
      • glBlendEquation missing from GL_ARB_imaging -
      • Wrong APIENTRY definition for Cygwin -
      • Incorrect OS X OpenGL types -
      • Unix 64-bit installation patch -
      -
    -
-
-
    -
  • 1.3.3 [05-16-05] -
      -
    • New feature: -
        -
      • Code generation option to split source into multiple files -
      -
    -
      -
    • Bug fixes: -
        -
      • OpenGL 2.0 core initialization problems -
      • Wrong value for token GL_SHADER_TYPE -
      • Missing tokens in GL_ATI_fragment_shader -
      • Missing entry points in GL_ARB_transpose_matrix -
      -
    -
-
-
    -
  • 1.3.2 [03-16-05] -
      -
    • New extension: -
        -
      • GL_APPLE_pixel_buffer -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 entry points -
      • Missing tokens in GL_SGIX_shadow -
      • MinGW makefile problem -
      • Check for incorrect OpenGL version string on SiS hardware -
      • Documentation update to meet the HTML 4.01 Transitional specification -
      -
    -
-
-
    -
  • 1.3.1 [02-02-05] -
      -
    • New features: -
        -
      • Consistent Unix and Windows versioning -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_object -
      • GL_ARB_pixel_buffer_object -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 tokens -
      • Incorrect typedefs (GLhandleARB and GLhalf) -
      • Borland compiler problems -
      -
    -
-
-
    -
  • 1.3.0 [01-04-05] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.0 -
      • glewIsSupported provides efficient string-based extension checks -
      • Custom code generation from a list of extensions -
      • Makefile changes -
      -
    • New extensions: -
        -
      • WGL_ATI_render_texture_rectangle -
      -
    • Bug fixes: -
        -
      • Incorrect function signature in OpenGL 1.5 core -
      -
    -
-
-
    -
  • 1.2.5 [12-06-04] -
      -
    • New extensions: -
        -
      • GL_ATI_texture_compression_3dc -
      • GL_EXT_Cg_shader -
      • GL_EXT_draw_range_elements -
      • GL_KTX_buffer_region -
      -
    • Bug fixes: -
        -
      • OpenGL version detection bug -
      • Problems with wxWindows and MinGW compilation -
      • visualinfo compilation problem with GLEW_MX specified -
      • Wrong token name in OpenGL 1.5 core -
      -
    • Support for FreeBSD -
    -
-
-
    -
  • 1.2.4 [09-06-04] -
      -
    • Added ARB_draw_buffers and ARB_texture_rectangle -
    • Fixed bug in ARB_shader_objects -
    • Replaced wglinfo with visualinfo -
    -
-
-
    -
  • 1.2.3 [06-10-04] -
      -
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 -
    • Bug fix in GL_ARB_vertex_blend -
    -
-
-
    -
  • 1.2.2 [05-08-04] -
      -
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array -
    • Fixed GLEW_MX problems -
    • Bug fix in GL_EXT_texture_rectangle and wglinfo -
    -
-
-
    -
  • 1.2.1 [03-18-04] -
      -
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) -
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader -
    • Added flags on GDI support and multisampling to wglinfo -
    -
-
-
    -
  • 1.2.0 [02-19-04] -
      -
    • Added full OpenGL 1.5 support -
    • Added support for multiple rendering contexts with different capabilities -
    • Added command line flags to glewinfo for selecting displays and visuals -
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels -
    • Added MinGW/MSYS support -
    • Bug fixes in GL_ARB_shader_objects and the OS X build -
    -
-
-
    -
  • 1.1.4 [12-15-03] -
      -
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, -GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, -GLX_ATI_pixel_format_float, and GLX_ATI_render_texture -
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader -
    -
-
-
    -
  • 1.1.3 [10-28-03] -
      -
    • Added Solaris and Darwin support -
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader -
    • Fixed bug in GL_WIN_swap_hint -
    • Removed glewinfo's dependency on GLUT -
    -
-
-
    -
  • 1.1.2 [09-15-03] -
      -
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards -
    • Added glewGetString for querying the GLEW version string -
    -
-
-
    -
  • 1.1.1 [08-11-03] -
      -
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two -
    • Fixed bug in GL_ARB_vertex_buffer_object -
    • Minor updates in documentation -
    -
-
-
    -
  • 1.1.0 [07-08-03] -
      -
    • Added automatic code generation -
    • Added almost every extension in the registry -
    • Added separate namespace -
    • Added Irix support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.7 [06-29-03] -
      -
    • Added GL_EXT_depth_bounds_test -
    • Fixed typos -
    -
-
-
    -
  • 1.0.6 [05-05-03] -
      -
    • Added ARB_vertex_buffer_object and NV_half_float -
    • Updated wglinfo -
    • Temporary Linux bug fixes (problems with SDL and MESA) -
    -
-
-
    -
  • 1.0.5 [02-17-03] -
      -
    • Bug fixes -
    • Added wglinfo -
    • Updated documentation -
    -
-
-
    -
  • 1.0.4 [02-02-03] -
      -
    • Added NV_texture_expand_normal -
    • Added mingw support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.3 [01-09-03] -
      -
    • Cleaned up ATI extensions -
    • Changed function prototypes to match glext.h -
    • Added EXT_texture3D -
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers -
    -
-
-
    -
  • 1.0.2 [12-21-02] -
      -
    • Added list of supported extensions to documentation -
    • Added NV_half_float and NV_texgen_emboss -
    -
-
-
    -
  • 1.0.1 [12-17-02] -
      -
    • Bug fixes -
    • Added glewGetExtension -
    -
-
-
    -
  • 1.0.0 [12-12-02] -
      -
    • Initial release -
    -
-
- - -
- - diff --git a/Engine/lib/glew/doc/mesa.txt b/Engine/lib/glew/doc/mesa.txt deleted file mode 100644 index a82dd4bd44..0000000000 --- a/Engine/lib/glew/doc/mesa.txt +++ /dev/null @@ -1,21 +0,0 @@ -Mesa 3-D graphics library -Version: 7.0 - -Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - -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 -BRIAN PAUL 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. diff --git a/Engine/lib/glew/doc/new.png b/Engine/lib/glew/doc/new.png deleted file mode 100644 index 7ce2b47960..0000000000 Binary files a/Engine/lib/glew/doc/new.png and /dev/null differ diff --git a/Engine/lib/glew/doc/ogl_sm.jpg b/Engine/lib/glew/doc/ogl_sm.jpg deleted file mode 100644 index f318d7655b..0000000000 Binary files a/Engine/lib/glew/doc/ogl_sm.jpg and /dev/null differ diff --git a/Engine/lib/glew/doc/wglew.html b/Engine/lib/glew/doc/wglew.html deleted file mode 100644 index 3f9cee4c68..0000000000 --- a/Engine/lib/glew/doc/wglew.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported WGL Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample

2 3DL_stereo_control

3 AMD_gpu_association

4 ARB_buffer_region
5 ARB_create_context
6 ARB_create_context_profile
7 ARB_create_context_robustness
8 ARB_extensions_string
9 ARB_framebuffer_sRGB
10 ARB_make_current_read
11 ARB_multisample
12 ARB_pbuffer
13 ARB_pixel_format
14 ARB_pixel_format_float
15 ARB_render_texture
16 ARB_robustness_application_isolation
17 ARB_robustness_share_group_isolation

18 ATI_pixel_format_float
19 ATI_render_texture_rectangle

20 EXT_create_context_es2_profile
21 EXT_create_context_es_profile
22 EXT_depth_float
23 EXT_display_color_table
24 EXT_extensions_string
25 EXT_framebuffer_sRGB
26 EXT_make_current_read
27 EXT_multisample
28 EXT_pbuffer
29 EXT_pixel_format
30 EXT_pixel_format_packed_float
31 EXT_swap_control
32 EXT_swap_control_tear

33 I3D_digital_video_control
34 I3D_gamma
35 I3D_genlock
36 I3D_image_buffer
37 I3D_swap_frame_lock
38 I3D_swap_frame_usage

39 NV_DX_interop
40 NV_DX_interop2
41 NV_copy_image
42 NV_float_buffer
43 NV_gpu_affinity
44 NV_multisample_coverage
45 NV_present_video
46 NV_render_depth_texture
47 NV_render_texture_rectangle
48 NV_swap_group
49 NV_vertex_array_range
50 NV_video_capture
51 NV_video_output

52 OML_sync_control
- -
- - diff --git a/Engine/lib/glew/glew.pc.in b/Engine/lib/glew/glew.pc.in deleted file mode 100644 index 4c934af1a5..0000000000 --- a/Engine/lib/glew/glew.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: glew -Description: The OpenGL Extension Wrangler library -Version: @version@ -Cflags: -I${includedir} @cflags@ -Libs: -L${libdir} -l@libname@ -Requires: glu diff --git a/Engine/lib/glew/include/GL/glew.h b/Engine/lib/glew/include/GL/glew.h deleted file mode 100644 index 51a29ef8b9..0000000000 --- a/Engine/lib/glew/include/GL/glew.h +++ /dev/null @@ -1,18062 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * - * 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 - * BRIAN PAUL 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. - */ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __glew_h__ -#define __glew_h__ -#define __GLEW_H__ - -#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) -#error gl.h included before glew.h -#endif -#if defined(__gl2_h_) -#error gl2.h included before glew.h -#endif -#if defined(__gltypes_h_) -#error gltypes.h included before glew.h -#endif -#if defined(__REGAL_H__) -#error Regal.h included before glew.h -#endif -#if defined(__glext_h_) || defined(__GLEXT_H_) -#error glext.h included before glew.h -#endif -#if defined(__gl_ATI_h_) -#error glATI.h included before glew.h -#endif - -#define __gl_h_ -#define __gl2_h_ -#define __GL_H__ -#define __gltypes_h_ -#define __REGAL_H__ -#define __X_GL_H -#define __glext_h_ -#define __GLEXT_H_ -#define __gl_ATI_h_ - -#if defined(_WIN32) - -/* - * GLEW does not include to avoid name space pollution. - * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t - * defined properly. - */ -/* */ -#ifndef APIENTRY -#define GLEW_APIENTRY_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define APIENTRY __stdcall -# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -#endif -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# endif -#endif -/* */ -#ifndef CALLBACK -#define GLEW_CALLBACK_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define CALLBACK __attribute__ ((__stdcall__)) -# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -#endif -/* and */ -#ifndef WINGDIAPI -#define GLEW_WINGDIAPI_DEFINED -#define WINGDIAPI __declspec(dllimport) -#endif -/* */ -#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -#endif -/* */ -#if !defined(_W64) -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif -#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) -# ifdef _WIN64 -typedef __int64 ptrdiff_t; -# else -typedef _W64 int ptrdiff_t; -# endif -# define _PTRDIFF_T_DEFINED -# define _PTRDIFF_T_ -#endif - -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# else -# define GLAPI WINGDIAPI -# endif -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY APIENTRY -#endif - -/* - * GLEW_STATIC is defined for static library. - * GLEW_BUILD is defined for building the DLL library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#else /* _UNIX */ - -/* - * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO - * C. On my system, this amounts to _3 lines_ of included code, all of - * them pretty much harmless. If you know of a way of detecting 32 vs - * 64 _targets_ at compile time you are free to replace this with - * something that's portable. For now, _this_ is the portable solution. - * (mem, 2004-01-04) - */ - -#include - -/* SGI MIPSPro doesn't like stdint.h in C++ mode */ -/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ - -#if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) -#include -#else -#include -#endif - -#define GLEW_APIENTRY_DEFINED -#define APIENTRY - -/* - * GLEW_STATIC is defined for static library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# if defined(__GNUC__) && __GNUC__>=4 -# define GLEWAPI extern __attribute__ ((visibility("default"))) -# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# define GLEWAPI extern __global -# else -# define GLEWAPI extern -# endif -#endif - -/* */ -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY -#endif - -#endif /* _WIN32 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 - -typedef unsigned int GLenum; -typedef unsigned int GLbitfield; -typedef unsigned int GLuint; -typedef int GLint; -typedef int GLsizei; -typedef unsigned char GLboolean; -typedef signed char GLbyte; -typedef short GLshort; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned long GLulong; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; -#if defined(_MSC_VER) && _MSC_VER < 1400 -typedef __int64 GLint64EXT; -typedef unsigned __int64 GLuint64EXT; -#elif defined(_MSC_VER) || defined(__BORLANDC__) -typedef signed long long GLint64EXT; -typedef unsigned long long GLuint64EXT; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) -#include -# endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif -typedef GLint64EXT GLint64; -typedef GLuint64EXT GLuint64; -typedef struct __GLsync *GLsync; - -typedef char GLchar; - -#define GL_ZERO 0 -#define GL_FALSE 0 -#define GL_LOGIC_OP 0x0BF1 -#define GL_NONE 0 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_NO_ERROR 0 -#define GL_POINTS 0x0000 -#define GL_CURRENT_BIT 0x00000001 -#define GL_TRUE 1 -#define GL_ONE 1 -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_POINT_BIT 0x00000002 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_LINE_STRIP 0x0003 -#define GL_LINE_BIT 0x00000004 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON 0x0009 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM 0x0100 -#define GL_LOAD 0x0101 -#define GL_RETURN 0x0102 -#define GL_MULT 0x0103 -#define GL_ADD 0x0104 -#define GL_NEVER 0x0200 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_EXP 0x0800 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_EXP2 0x0801 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LIST_MODE 0x0B30 -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_SHADE_MODEL 0x0B54 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_FOG 0x0B60 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_NORMALIZE 0x0BA1 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_INDEX_MODE 0x0C30 -#define GL_RGBA_MODE 0x0C31 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_RENDER_MODE 0x0C40 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_INDEX_BITS 0x0D51 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_COLOR_INDEX 0x1900 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_BITMAP 0x1A00 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_RENDER 0x1C00 -#define GL_FEEDBACK 0x1C01 -#define GL_SELECT 0x1C02 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_S 0x2000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_EYE_LINEAR 0x2400 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_SPHERE_MAP 0x2402 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_PLANE 0x2502 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_CLAMP 0x2900 -#define GL_REPEAT 0x2901 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_R3_G3_B2 0x2A10 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_LIGHT0 0x4000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_HINT_BIT 0x00008000 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000fffff -#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff - -GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); -GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); -GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void GLAPIENTRY glArrayElement (GLint i); -GLAPI void GLAPIENTRY glBegin (GLenum mode); -GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void GLAPIENTRY glCallList (GLuint list); -GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); -GLAPI void GLAPIENTRY glClear (GLbitfield mask); -GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); -GLAPI void GLAPIENTRY glClearIndex (GLfloat c); -GLAPI void GLAPIENTRY glClearStencil (GLint s); -GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); -GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); -GLAPI void GLAPIENTRY glColor3iv (const GLint *v); -GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); -GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void GLAPIENTRY glColor4iv (const GLint *v); -GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); -GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); -GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); -GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glCullFace (GLenum mode); -GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); -GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void GLAPIENTRY glDepthFunc (GLenum func); -GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); -GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); -GLAPI void GLAPIENTRY glDisable (GLenum cap); -GLAPI void GLAPIENTRY glDisableClientState (GLenum array); -GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); -GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); -GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); -GLAPI void GLAPIENTRY glEnable (GLenum cap); -GLAPI void GLAPIENTRY glEnableClientState (GLenum array); -GLAPI void GLAPIENTRY glEnd (void); -GLAPI void GLAPIENTRY glEndList (void); -GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); -GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); -GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); -GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); -GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); -GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); -GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); -GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); -GLAPI void GLAPIENTRY glFinish (void); -GLAPI void GLAPIENTRY glFlush (void); -GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glFrontFace (GLenum mode); -GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); -GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); -GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum GLAPIENTRY glGetError (void); -GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); -GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); -GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); -GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); -GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); -GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); -GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); -GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); -GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); -GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); -GLAPI void GLAPIENTRY glIndexMask (GLuint mask); -GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glIndexd (GLdouble c); -GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); -GLAPI void GLAPIENTRY glIndexf (GLfloat c); -GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); -GLAPI void GLAPIENTRY glIndexi (GLint c); -GLAPI void GLAPIENTRY glIndexiv (const GLint *c); -GLAPI void GLAPIENTRY glIndexs (GLshort c); -GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); -GLAPI void GLAPIENTRY glIndexub (GLubyte c); -GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); -GLAPI void GLAPIENTRY glInitNames (void); -GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); -GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); -GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); -GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); -GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); -GLAPI void GLAPIENTRY glLineWidth (GLfloat width); -GLAPI void GLAPIENTRY glListBase (GLuint base); -GLAPI void GLAPIENTRY glLoadIdentity (void); -GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glLoadName (GLuint name); -GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); -GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); -GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); -GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); -GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); -GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); -GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); -GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); -GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); -GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void GLAPIENTRY glPassThrough (GLfloat token); -GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); -GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); -GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); -GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); -GLAPI void GLAPIENTRY glPointSize (GLfloat size); -GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); -GLAPI void GLAPIENTRY glPopAttrib (void); -GLAPI void GLAPIENTRY glPopClientAttrib (void); -GLAPI void GLAPIENTRY glPopMatrix (void); -GLAPI void GLAPIENTRY glPopName (void); -GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); -GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushMatrix (void); -GLAPI void GLAPIENTRY glPushName (GLuint name); -GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); -GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); -GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); -GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); -GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); -GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); -GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); -GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); -GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); -GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); -GLAPI void GLAPIENTRY glShadeModel (GLenum mode); -GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void GLAPIENTRY glStencilMask (GLuint mask); -GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); -GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); -GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord1i (GLint s); -GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); -GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); -GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); -GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); -GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) - -#endif /* GL_VERSION_1_1 */ - -/* ---------------------------------- GLU ---------------------------------- */ - -#ifndef GLEW_NO_GLU -/* this is where we can safely include GLU */ -# if defined(__APPLE__) && defined(__MACH__) -# include -# else -# include -# endif -#endif - -/* ----------------------------- GL_VERSION_1_2 ---------------------------- */ - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 - -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E - -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - -#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D) -#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements) -#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D) -#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D) - -#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2) - -#endif /* GL_VERSION_1_2 */ - -/* ---------------------------- GL_VERSION_1_2_1 --------------------------- */ - -#ifndef GL_VERSION_1_2_1 -#define GL_VERSION_1_2_1 1 - -#define GLEW_VERSION_1_2_1 GLEW_GET_VAR(__GLEW_VERSION_1_2_1) - -#endif /* GL_VERSION_1_2_1 */ - -/* ----------------------------- GL_VERSION_1_3 ---------------------------- */ - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 - -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_SUBTRACT 0x84E7 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#define GL_MULTISAMPLE_BIT 0x20000000 - -typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); - -#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture) -#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture) -#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D) -#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D) -#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D) -#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D) -#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D) -#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D) -#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage) -#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd) -#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf) -#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd) -#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf) -#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d) -#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv) -#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f) -#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv) -#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i) -#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv) -#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s) -#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv) -#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d) -#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv) -#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f) -#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv) -#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i) -#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv) -#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s) -#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv) -#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d) -#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv) -#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f) -#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv) -#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i) -#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv) -#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s) -#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv) -#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d) -#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv) -#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f) -#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv) -#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i) -#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv) -#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s) -#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv) -#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage) - -#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3) - -#endif /* GL_VERSION_1_3 */ - -/* ----------------------------- GL_VERSION_1_4 ---------------------------- */ - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 - -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_COMPARE_R_TO_TEXTURE 0x884E - -typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei drawcount); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p); - -#define glBlendColor GLEW_GET_FUN(__glewBlendColor) -#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation) -#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate) -#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer) -#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd) -#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv) -#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf) -#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv) -#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays) -#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements) -#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf) -#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv) -#define glPointParameteri GLEW_GET_FUN(__glewPointParameteri) -#define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv) -#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b) -#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv) -#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d) -#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv) -#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f) -#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv) -#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i) -#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv) -#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s) -#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv) -#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub) -#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv) -#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui) -#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv) -#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us) -#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv) -#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer) -#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d) -#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv) -#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f) -#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv) -#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i) -#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv) -#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s) -#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv) -#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d) -#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv) -#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f) -#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv) -#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i) -#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv) -#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s) -#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv) - -#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4) - -#endif /* GL_VERSION_1_4 */ - -/* ----------------------------- GL_VERSION_1_5 ---------------------------- */ - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 - -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 - -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id); -typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target); - -#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery) -#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer) -#define glBufferData GLEW_GET_FUN(__glewBufferData) -#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData) -#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers) -#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries) -#define glEndQuery GLEW_GET_FUN(__glewEndQuery) -#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers) -#define glGenQueries GLEW_GET_FUN(__glewGenQueries) -#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv) -#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv) -#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData) -#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv) -#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv) -#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv) -#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer) -#define glIsQuery GLEW_GET_FUN(__glewIsQuery) -#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer) -#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer) - -#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5) - -#endif /* GL_VERSION_1_5 */ - -/* ----------------------------- GL_VERSION_2_0 ---------------------------- */ - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 - -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 - -typedef void (GLAPIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum, GLenum); -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (GLAPIENTRY * PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROC) (GLenum type); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (GLAPIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum* bufs); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); -typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEPROC) (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source); -typedef void (GLAPIENTRY * PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint* param); -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint, GLenum, GLvoid**); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC) (GLuint, GLenum, GLdouble*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC) (GLuint, GLenum, GLfloat*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC) (GLuint, GLenum, GLint*); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (GLAPIENTRY * PFNGLISSHADERPROC) (GLuint shader); -typedef void (GLAPIENTRY * PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths); -typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); - -#define glAttachShader GLEW_GET_FUN(__glewAttachShader) -#define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation) -#define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate) -#define glCompileShader GLEW_GET_FUN(__glewCompileShader) -#define glCreateProgram GLEW_GET_FUN(__glewCreateProgram) -#define glCreateShader GLEW_GET_FUN(__glewCreateShader) -#define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram) -#define glDeleteShader GLEW_GET_FUN(__glewDeleteShader) -#define glDetachShader GLEW_GET_FUN(__glewDetachShader) -#define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray) -#define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers) -#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray) -#define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib) -#define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform) -#define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders) -#define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation) -#define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog) -#define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv) -#define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog) -#define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource) -#define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv) -#define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation) -#define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv) -#define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv) -#define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv) -#define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv) -#define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv) -#define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv) -#define glIsProgram GLEW_GET_FUN(__glewIsProgram) -#define glIsShader GLEW_GET_FUN(__glewIsShader) -#define glLinkProgram GLEW_GET_FUN(__glewLinkProgram) -#define glShaderSource GLEW_GET_FUN(__glewShaderSource) -#define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate) -#define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate) -#define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate) -#define glUniform1f GLEW_GET_FUN(__glewUniform1f) -#define glUniform1fv GLEW_GET_FUN(__glewUniform1fv) -#define glUniform1i GLEW_GET_FUN(__glewUniform1i) -#define glUniform1iv GLEW_GET_FUN(__glewUniform1iv) -#define glUniform2f GLEW_GET_FUN(__glewUniform2f) -#define glUniform2fv GLEW_GET_FUN(__glewUniform2fv) -#define glUniform2i GLEW_GET_FUN(__glewUniform2i) -#define glUniform2iv GLEW_GET_FUN(__glewUniform2iv) -#define glUniform3f GLEW_GET_FUN(__glewUniform3f) -#define glUniform3fv GLEW_GET_FUN(__glewUniform3fv) -#define glUniform3i GLEW_GET_FUN(__glewUniform3i) -#define glUniform3iv GLEW_GET_FUN(__glewUniform3iv) -#define glUniform4f GLEW_GET_FUN(__glewUniform4f) -#define glUniform4fv GLEW_GET_FUN(__glewUniform4fv) -#define glUniform4i GLEW_GET_FUN(__glewUniform4i) -#define glUniform4iv GLEW_GET_FUN(__glewUniform4iv) -#define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv) -#define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv) -#define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv) -#define glUseProgram GLEW_GET_FUN(__glewUseProgram) -#define glValidateProgram GLEW_GET_FUN(__glewValidateProgram) -#define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d) -#define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv) -#define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f) -#define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv) -#define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s) -#define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv) -#define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d) -#define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv) -#define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f) -#define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv) -#define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s) -#define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv) -#define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d) -#define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv) -#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) -#define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv) -#define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s) -#define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv) -#define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv) -#define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv) -#define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv) -#define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub) -#define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv) -#define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv) -#define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv) -#define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv) -#define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d) -#define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv) -#define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f) -#define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv) -#define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv) -#define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s) -#define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv) -#define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv) -#define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv) -#define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv) -#define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer) - -#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0) - -#endif /* GL_VERSION_2_0 */ - -/* ----------------------------- GL_VERSION_2_1 ---------------------------- */ - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 - -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B - -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - -#define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv) -#define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv) -#define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv) -#define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv) -#define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv) -#define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv) - -#define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1) - -#endif /* GL_VERSION_2_1 */ - -/* ----------------------------- GL_VERSION_3_0 ---------------------------- */ - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 - -#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES -#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 -#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 -#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 -#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB -#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 -#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 -#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 -#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_DEPTH_BUFFER 0x8223 -#define GL_STENCIL_BUFFER 0x8224 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_ALPHA_INTEGER 0x8D97 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERPROC) (GLuint, GLenum); -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum); -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONPROC) (GLuint, GLuint, const GLchar*); -typedef void (GLAPIENTRY * PFNGLCLAMPCOLORPROC) (GLenum, GLenum); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFIPROC) (GLenum, GLint, GLfloat, GLint); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFVPROC) (GLenum, GLint, const GLfloat*); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERIVPROC) (GLenum, GLint, const GLint*); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERUIVPROC) (GLenum, GLint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLCOLORMASKIPROC) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -typedef void (GLAPIENTRY * PFNGLDISABLEIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLENABLEIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETBOOLEANI_VPROC) (GLenum, GLuint, GLboolean*); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONPROC) (GLuint, const GLchar*); -typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVPROC) (GLenum, GLenum, GLint*); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVPROC) (GLenum, GLenum, GLuint*); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVPROC) (GLuint, GLint, GLuint*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVPROC) (GLuint, GLenum, GLint*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint, GLenum, GLuint*); -typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVPROC) (GLenum, GLenum, const GLint*); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVPROC) (GLenum, GLenum, const GLuint*); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint, GLsizei, const GLchar **, GLenum); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIPROC) (GLint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIPROC) (GLint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIPROC) (GLint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIPROC) (GLint, GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IPROC) (GLuint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIPROC) (GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IPROC) (GLuint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIPROC) (GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IPROC) (GLuint, GLint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIPROC) (GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVPROC) (GLuint, const GLbyte*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IPROC) (GLuint, GLint, GLint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVPROC) (GLuint, const GLshort*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVPROC) (GLuint, const GLubyte*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIPROC) (GLuint, GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVPROC) (GLuint, const GLushort*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint, GLint, GLenum, GLsizei, const GLvoid*); - -#define glBeginConditionalRender GLEW_GET_FUN(__glewBeginConditionalRender) -#define glBeginTransformFeedback GLEW_GET_FUN(__glewBeginTransformFeedback) -#define glBindFragDataLocation GLEW_GET_FUN(__glewBindFragDataLocation) -#define glClampColor GLEW_GET_FUN(__glewClampColor) -#define glClearBufferfi GLEW_GET_FUN(__glewClearBufferfi) -#define glClearBufferfv GLEW_GET_FUN(__glewClearBufferfv) -#define glClearBufferiv GLEW_GET_FUN(__glewClearBufferiv) -#define glClearBufferuiv GLEW_GET_FUN(__glewClearBufferuiv) -#define glColorMaski GLEW_GET_FUN(__glewColorMaski) -#define glDisablei GLEW_GET_FUN(__glewDisablei) -#define glEnablei GLEW_GET_FUN(__glewEnablei) -#define glEndConditionalRender GLEW_GET_FUN(__glewEndConditionalRender) -#define glEndTransformFeedback GLEW_GET_FUN(__glewEndTransformFeedback) -#define glGetBooleani_v GLEW_GET_FUN(__glewGetBooleani_v) -#define glGetFragDataLocation GLEW_GET_FUN(__glewGetFragDataLocation) -#define glGetStringi GLEW_GET_FUN(__glewGetStringi) -#define glGetTexParameterIiv GLEW_GET_FUN(__glewGetTexParameterIiv) -#define glGetTexParameterIuiv GLEW_GET_FUN(__glewGetTexParameterIuiv) -#define glGetTransformFeedbackVarying GLEW_GET_FUN(__glewGetTransformFeedbackVarying) -#define glGetUniformuiv GLEW_GET_FUN(__glewGetUniformuiv) -#define glGetVertexAttribIiv GLEW_GET_FUN(__glewGetVertexAttribIiv) -#define glGetVertexAttribIuiv GLEW_GET_FUN(__glewGetVertexAttribIuiv) -#define glIsEnabledi GLEW_GET_FUN(__glewIsEnabledi) -#define glTexParameterIiv GLEW_GET_FUN(__glewTexParameterIiv) -#define glTexParameterIuiv GLEW_GET_FUN(__glewTexParameterIuiv) -#define glTransformFeedbackVaryings GLEW_GET_FUN(__glewTransformFeedbackVaryings) -#define glUniform1ui GLEW_GET_FUN(__glewUniform1ui) -#define glUniform1uiv GLEW_GET_FUN(__glewUniform1uiv) -#define glUniform2ui GLEW_GET_FUN(__glewUniform2ui) -#define glUniform2uiv GLEW_GET_FUN(__glewUniform2uiv) -#define glUniform3ui GLEW_GET_FUN(__glewUniform3ui) -#define glUniform3uiv GLEW_GET_FUN(__glewUniform3uiv) -#define glUniform4ui GLEW_GET_FUN(__glewUniform4ui) -#define glUniform4uiv GLEW_GET_FUN(__glewUniform4uiv) -#define glVertexAttribI1i GLEW_GET_FUN(__glewVertexAttribI1i) -#define glVertexAttribI1iv GLEW_GET_FUN(__glewVertexAttribI1iv) -#define glVertexAttribI1ui GLEW_GET_FUN(__glewVertexAttribI1ui) -#define glVertexAttribI1uiv GLEW_GET_FUN(__glewVertexAttribI1uiv) -#define glVertexAttribI2i GLEW_GET_FUN(__glewVertexAttribI2i) -#define glVertexAttribI2iv GLEW_GET_FUN(__glewVertexAttribI2iv) -#define glVertexAttribI2ui GLEW_GET_FUN(__glewVertexAttribI2ui) -#define glVertexAttribI2uiv GLEW_GET_FUN(__glewVertexAttribI2uiv) -#define glVertexAttribI3i GLEW_GET_FUN(__glewVertexAttribI3i) -#define glVertexAttribI3iv GLEW_GET_FUN(__glewVertexAttribI3iv) -#define glVertexAttribI3ui GLEW_GET_FUN(__glewVertexAttribI3ui) -#define glVertexAttribI3uiv GLEW_GET_FUN(__glewVertexAttribI3uiv) -#define glVertexAttribI4bv GLEW_GET_FUN(__glewVertexAttribI4bv) -#define glVertexAttribI4i GLEW_GET_FUN(__glewVertexAttribI4i) -#define glVertexAttribI4iv GLEW_GET_FUN(__glewVertexAttribI4iv) -#define glVertexAttribI4sv GLEW_GET_FUN(__glewVertexAttribI4sv) -#define glVertexAttribI4ubv GLEW_GET_FUN(__glewVertexAttribI4ubv) -#define glVertexAttribI4ui GLEW_GET_FUN(__glewVertexAttribI4ui) -#define glVertexAttribI4uiv GLEW_GET_FUN(__glewVertexAttribI4uiv) -#define glVertexAttribI4usv GLEW_GET_FUN(__glewVertexAttribI4usv) -#define glVertexAttribIPointer GLEW_GET_FUN(__glewVertexAttribIPointer) - -#define GLEW_VERSION_3_0 GLEW_GET_VAR(__GLEW_VERSION_3_0) - -#endif /* GL_VERSION_3_0 */ - -/* ----------------------------- GL_VERSION_3_1 ---------------------------- */ - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 - -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum, GLint, GLsizei, GLsizei); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei); -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLTEXBUFFERPROC) (GLenum, GLenum, GLuint); - -#define glDrawArraysInstanced GLEW_GET_FUN(__glewDrawArraysInstanced) -#define glDrawElementsInstanced GLEW_GET_FUN(__glewDrawElementsInstanced) -#define glPrimitiveRestartIndex GLEW_GET_FUN(__glewPrimitiveRestartIndex) -#define glTexBuffer GLEW_GET_FUN(__glewTexBuffer) - -#define GLEW_VERSION_3_1 GLEW_GET_VAR(__GLEW_VERSION_3_1) - -#endif /* GL_VERSION_3_1 */ - -/* ----------------------------- GL_VERSION_3_2 ---------------------------- */ - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 - -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum, GLenum, GLuint, GLint); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum, GLenum, GLint64 *); -typedef void (GLAPIENTRY * PFNGLGETINTEGER64I_VPROC) (GLenum, GLuint, GLint64 *); - -#define glFramebufferTexture GLEW_GET_FUN(__glewFramebufferTexture) -#define glGetBufferParameteri64v GLEW_GET_FUN(__glewGetBufferParameteri64v) -#define glGetInteger64i_v GLEW_GET_FUN(__glewGetInteger64i_v) - -#define GLEW_VERSION_3_2 GLEW_GET_VAR(__GLEW_VERSION_3_2) - -#endif /* GL_VERSION_3_2 */ - -/* ----------------------------- GL_VERSION_3_3 ---------------------------- */ - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_RGB10_A2UI 0x906F - -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); - -#define glVertexAttribDivisor GLEW_GET_FUN(__glewVertexAttribDivisor) - -#define GLEW_VERSION_3_3 GLEW_GET_VAR(__GLEW_VERSION_3_3) - -#endif /* GL_VERSION_3_3 */ - -/* ----------------------------- GL_VERSION_4_0 ---------------------------- */ - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 - -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGPROC) (GLclampf value); - -#define glBlendEquationSeparatei GLEW_GET_FUN(__glewBlendEquationSeparatei) -#define glBlendEquationi GLEW_GET_FUN(__glewBlendEquationi) -#define glBlendFuncSeparatei GLEW_GET_FUN(__glewBlendFuncSeparatei) -#define glBlendFunci GLEW_GET_FUN(__glewBlendFunci) -#define glMinSampleShading GLEW_GET_FUN(__glewMinSampleShading) - -#define GLEW_VERSION_4_0 GLEW_GET_VAR(__GLEW_VERSION_4_0) - -#endif /* GL_VERSION_4_0 */ - -/* ----------------------------- GL_VERSION_4_1 ---------------------------- */ - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 - -#define GLEW_VERSION_4_1 GLEW_GET_VAR(__GLEW_VERSION_4_1) - -#endif /* GL_VERSION_4_1 */ - -/* ----------------------------- GL_VERSION_4_2 ---------------------------- */ - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 - -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F - -#define GLEW_VERSION_4_2 GLEW_GET_VAR(__GLEW_VERSION_4_2) - -#endif /* GL_VERSION_4_2 */ - -/* ----------------------------- GL_VERSION_4_3 ---------------------------- */ - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 - -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E - -#define GLEW_VERSION_4_3 GLEW_GET_VAR(__GLEW_VERSION_4_3) - -#endif /* GL_VERSION_4_3 */ - -/* ----------------------------- GL_VERSION_4_4 ---------------------------- */ - -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 - -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 - -#define GLEW_VERSION_4_4 GLEW_GET_VAR(__GLEW_VERSION_4_4) - -#endif /* GL_VERSION_4_4 */ - -/* -------------------------- GL_3DFX_multisample -------------------------- */ - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 - -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 - -#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample) - -#endif /* GL_3DFX_multisample */ - -/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 - -typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); - -#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX) - -#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer) - -#endif /* GL_3DFX_tbuffer */ - -/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 - -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 - -#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1) - -#endif /* GL_3DFX_texture_compression_FXT1 */ - -/* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */ - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 - -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D - -#define GLEW_AMD_blend_minmax_factor GLEW_GET_VAR(__GLEW_AMD_blend_minmax_factor) - -#endif /* GL_AMD_blend_minmax_factor */ - -/* ----------------------- GL_AMD_conservative_depth ----------------------- */ - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 - -#define GLEW_AMD_conservative_depth GLEW_GET_VAR(__GLEW_AMD_conservative_depth) - -#endif /* GL_AMD_conservative_depth */ - -/* -------------------------- GL_AMD_debug_output -------------------------- */ - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 - -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 - -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message); - -#define glDebugMessageCallbackAMD GLEW_GET_FUN(__glewDebugMessageCallbackAMD) -#define glDebugMessageEnableAMD GLEW_GET_FUN(__glewDebugMessageEnableAMD) -#define glDebugMessageInsertAMD GLEW_GET_FUN(__glewDebugMessageInsertAMD) -#define glGetDebugMessageLogAMD GLEW_GET_FUN(__glewGetDebugMessageLogAMD) - -#define GLEW_AMD_debug_output GLEW_GET_VAR(__GLEW_AMD_debug_output) - -#endif /* GL_AMD_debug_output */ - -/* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */ - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 - -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F - -#define GLEW_AMD_depth_clamp_separate GLEW_GET_VAR(__GLEW_AMD_depth_clamp_separate) - -#endif /* GL_AMD_depth_clamp_separate */ - -/* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */ - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); - -#define glBlendEquationIndexedAMD GLEW_GET_FUN(__glewBlendEquationIndexedAMD) -#define glBlendEquationSeparateIndexedAMD GLEW_GET_FUN(__glewBlendEquationSeparateIndexedAMD) -#define glBlendFuncIndexedAMD GLEW_GET_FUN(__glewBlendFuncIndexedAMD) -#define glBlendFuncSeparateIndexedAMD GLEW_GET_FUN(__glewBlendFuncSeparateIndexedAMD) - -#define GLEW_AMD_draw_buffers_blend GLEW_GET_VAR(__GLEW_AMD_draw_buffers_blend) - -#endif /* GL_AMD_draw_buffers_blend */ - -/* ---------------------- GL_AMD_interleaved_elements ---------------------- */ - -#ifndef GL_AMD_interleaved_elements -#define GL_AMD_interleaved_elements 1 - -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RG8UI 0x8238 -#define GL_RG16UI 0x823A -#define GL_RGBA8UI 0x8D7C -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 - -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); - -#define glVertexAttribParameteriAMD GLEW_GET_FUN(__glewVertexAttribParameteriAMD) - -#define GLEW_AMD_interleaved_elements GLEW_GET_VAR(__GLEW_AMD_interleaved_elements) - -#endif /* GL_AMD_interleaved_elements */ - -/* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); - -#define glMultiDrawArraysIndirectAMD GLEW_GET_FUN(__glewMultiDrawArraysIndirectAMD) -#define glMultiDrawElementsIndirectAMD GLEW_GET_FUN(__glewMultiDrawElementsIndirectAMD) - -#define GLEW_AMD_multi_draw_indirect GLEW_GET_VAR(__GLEW_AMD_multi_draw_indirect) - -#endif /* GL_AMD_multi_draw_indirect */ - -/* ------------------------- GL_AMD_name_gen_delete ------------------------ */ - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 - -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 - -typedef void (GLAPIENTRY * PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint* names); -typedef void (GLAPIENTRY * PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint* names); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); - -#define glDeleteNamesAMD GLEW_GET_FUN(__glewDeleteNamesAMD) -#define glGenNamesAMD GLEW_GET_FUN(__glewGenNamesAMD) -#define glIsNameAMD GLEW_GET_FUN(__glewIsNameAMD) - -#define GLEW_AMD_name_gen_delete GLEW_GET_VAR(__GLEW_AMD_name_gen_delete) - -#endif /* GL_AMD_name_gen_delete */ - -/* ----------------------- GL_AMD_performance_monitor ---------------------- */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 - -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 - -typedef void (GLAPIENTRY * PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GLAPIENTRY * PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors); -typedef void (GLAPIENTRY * PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GLAPIENTRY * PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar *counterString); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei* length, GLchar *groupString); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint* numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GLAPIENTRY * PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList); - -#define glBeginPerfMonitorAMD GLEW_GET_FUN(__glewBeginPerfMonitorAMD) -#define glDeletePerfMonitorsAMD GLEW_GET_FUN(__glewDeletePerfMonitorsAMD) -#define glEndPerfMonitorAMD GLEW_GET_FUN(__glewEndPerfMonitorAMD) -#define glGenPerfMonitorsAMD GLEW_GET_FUN(__glewGenPerfMonitorsAMD) -#define glGetPerfMonitorCounterDataAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterDataAMD) -#define glGetPerfMonitorCounterInfoAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterInfoAMD) -#define glGetPerfMonitorCounterStringAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterStringAMD) -#define glGetPerfMonitorCountersAMD GLEW_GET_FUN(__glewGetPerfMonitorCountersAMD) -#define glGetPerfMonitorGroupStringAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupStringAMD) -#define glGetPerfMonitorGroupsAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupsAMD) -#define glSelectPerfMonitorCountersAMD GLEW_GET_FUN(__glewSelectPerfMonitorCountersAMD) - -#define GLEW_AMD_performance_monitor GLEW_GET_VAR(__GLEW_AMD_performance_monitor) - -#endif /* GL_AMD_performance_monitor */ - -/* -------------------------- GL_AMD_pinned_memory ------------------------- */ - -#ifndef GL_AMD_pinned_memory -#define GL_AMD_pinned_memory 1 - -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 - -#define GLEW_AMD_pinned_memory GLEW_GET_VAR(__GLEW_AMD_pinned_memory) - -#endif /* GL_AMD_pinned_memory */ - -/* ----------------------- GL_AMD_query_buffer_object ---------------------- */ - -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 - -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 - -#define GLEW_AMD_query_buffer_object GLEW_GET_VAR(__GLEW_AMD_query_buffer_object) - -#endif /* GL_AMD_query_buffer_object */ - -/* ------------------------ GL_AMD_sample_positions ------------------------ */ - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 - -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F - -typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat* val); - -#define glSetMultisamplefvAMD GLEW_GET_FUN(__glewSetMultisamplefvAMD) - -#define GLEW_AMD_sample_positions GLEW_GET_VAR(__GLEW_AMD_sample_positions) - -#endif /* GL_AMD_sample_positions */ - -/* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */ - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F - -#define GLEW_AMD_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_AMD_seamless_cubemap_per_texture) - -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -/* ---------------------- GL_AMD_shader_stencil_export --------------------- */ - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 - -#define GLEW_AMD_shader_stencil_export GLEW_GET_VAR(__GLEW_AMD_shader_stencil_export) - -#endif /* GL_AMD_shader_stencil_export */ - -/* ---------------------- GL_AMD_shader_trinary_minmax --------------------- */ - -#ifndef GL_AMD_shader_trinary_minmax -#define GL_AMD_shader_trinary_minmax 1 - -#define GLEW_AMD_shader_trinary_minmax GLEW_GET_VAR(__GLEW_AMD_shader_trinary_minmax) - -#endif /* GL_AMD_shader_trinary_minmax */ - -/* ------------------------- GL_AMD_sparse_texture ------------------------- */ - -#ifndef GL_AMD_sparse_texture -#define GL_AMD_sparse_texture 1 - -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); - -#define glTexStorageSparseAMD GLEW_GET_FUN(__glewTexStorageSparseAMD) -#define glTextureStorageSparseAMD GLEW_GET_FUN(__glewTextureStorageSparseAMD) - -#define GLEW_AMD_sparse_texture GLEW_GET_VAR(__GLEW_AMD_sparse_texture) - -#endif /* GL_AMD_sparse_texture */ - -/* ------------------- GL_AMD_stencil_operation_extended ------------------- */ - -#ifndef GL_AMD_stencil_operation_extended -#define GL_AMD_stencil_operation_extended 1 - -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D - -typedef void (GLAPIENTRY * PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); - -#define glStencilOpValueAMD GLEW_GET_FUN(__glewStencilOpValueAMD) - -#define GLEW_AMD_stencil_operation_extended GLEW_GET_VAR(__GLEW_AMD_stencil_operation_extended) - -#endif /* GL_AMD_stencil_operation_extended */ - -/* ------------------------ GL_AMD_texture_texture4 ------------------------ */ - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 - -#define GLEW_AMD_texture_texture4 GLEW_GET_VAR(__GLEW_AMD_texture_texture4) - -#endif /* GL_AMD_texture_texture4 */ - -/* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */ - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 - -#define GLEW_AMD_transform_feedback3_lines_triangles GLEW_GET_VAR(__GLEW_AMD_transform_feedback3_lines_triangles) - -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -/* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */ - -#ifndef GL_AMD_vertex_shader_layer -#define GL_AMD_vertex_shader_layer 1 - -#define GLEW_AMD_vertex_shader_layer GLEW_GET_VAR(__GLEW_AMD_vertex_shader_layer) - -#endif /* GL_AMD_vertex_shader_layer */ - -/* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */ - -#ifndef GL_AMD_vertex_shader_tessellator -#define GL_AMD_vertex_shader_tessellator 1 - -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 - -typedef void (GLAPIENTRY * PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); - -#define glTessellationFactorAMD GLEW_GET_FUN(__glewTessellationFactorAMD) -#define glTessellationModeAMD GLEW_GET_FUN(__glewTessellationModeAMD) - -#define GLEW_AMD_vertex_shader_tessellator GLEW_GET_VAR(__GLEW_AMD_vertex_shader_tessellator) - -#endif /* GL_AMD_vertex_shader_tessellator */ - -/* ------------------ GL_AMD_vertex_shader_viewport_index ------------------ */ - -#ifndef GL_AMD_vertex_shader_viewport_index -#define GL_AMD_vertex_shader_viewport_index 1 - -#define GLEW_AMD_vertex_shader_viewport_index GLEW_GET_VAR(__GLEW_AMD_vertex_shader_viewport_index) - -#endif /* GL_AMD_vertex_shader_viewport_index */ - -/* ------------------------- GL_ANGLE_depth_texture ------------------------ */ - -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 - -#define GLEW_ANGLE_depth_texture GLEW_GET_VAR(__GLEW_ANGLE_depth_texture) - -#endif /* GL_ANGLE_depth_texture */ - -/* ----------------------- GL_ANGLE_framebuffer_blit ----------------------- */ - -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 - -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA - -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - -#define glBlitFramebufferANGLE GLEW_GET_FUN(__glewBlitFramebufferANGLE) - -#define GLEW_ANGLE_framebuffer_blit GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_blit) - -#endif /* GL_ANGLE_framebuffer_blit */ - -/* -------------------- GL_ANGLE_framebuffer_multisample ------------------- */ - -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 - -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleANGLE GLEW_GET_FUN(__glewRenderbufferStorageMultisampleANGLE) - -#define GLEW_ANGLE_framebuffer_multisample GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_multisample) - -#endif /* GL_ANGLE_framebuffer_multisample */ - -/* ----------------------- GL_ANGLE_instanced_arrays ----------------------- */ - -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); - -#define glDrawArraysInstancedANGLE GLEW_GET_FUN(__glewDrawArraysInstancedANGLE) -#define glDrawElementsInstancedANGLE GLEW_GET_FUN(__glewDrawElementsInstancedANGLE) -#define glVertexAttribDivisorANGLE GLEW_GET_FUN(__glewVertexAttribDivisorANGLE) - -#define GLEW_ANGLE_instanced_arrays GLEW_GET_VAR(__GLEW_ANGLE_instanced_arrays) - -#endif /* GL_ANGLE_instanced_arrays */ - -/* -------------------- GL_ANGLE_pack_reverse_row_order -------------------- */ - -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 - -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 - -#define GLEW_ANGLE_pack_reverse_row_order GLEW_GET_VAR(__GLEW_ANGLE_pack_reverse_row_order) - -#endif /* GL_ANGLE_pack_reverse_row_order */ - -/* ------------------------ GL_ANGLE_program_binary ------------------------ */ - -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 - -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 - -#define GLEW_ANGLE_program_binary GLEW_GET_VAR(__GLEW_ANGLE_program_binary) - -#endif /* GL_ANGLE_program_binary */ - -/* ------------------- GL_ANGLE_texture_compression_dxt1 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt1 -#define GL_ANGLE_texture_compression_dxt1 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt1) - -#endif /* GL_ANGLE_texture_compression_dxt1 */ - -/* ------------------- GL_ANGLE_texture_compression_dxt3 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt3 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt3) - -#endif /* GL_ANGLE_texture_compression_dxt3 */ - -/* ------------------- GL_ANGLE_texture_compression_dxt5 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt5 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt5) - -#endif /* GL_ANGLE_texture_compression_dxt5 */ - -/* ------------------------- GL_ANGLE_texture_usage ------------------------ */ - -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 - -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 - -#define GLEW_ANGLE_texture_usage GLEW_GET_VAR(__GLEW_ANGLE_texture_usage) - -#endif /* GL_ANGLE_texture_usage */ - -/* -------------------------- GL_ANGLE_timer_query ------------------------- */ - -#ifndef GL_ANGLE_timer_query -#define GL_ANGLE_timer_query 1 - -#define GL_QUERY_COUNTER_BITS_ANGLE 0x8864 -#define GL_CURRENT_QUERY_ANGLE 0x8865 -#define GL_QUERY_RESULT_ANGLE 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ANGLE 0x8867 -#define GL_TIME_ELAPSED_ANGLE 0x88BF -#define GL_TIMESTAMP_ANGLE 0x8E28 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYANGLEPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESANGLEPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYANGLEPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENQUERIESANGLEPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VANGLEPROC) (GLuint id, GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVANGLEPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VANGLEPROC) (GLuint id, GLenum pname, GLuint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVANGLEPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVANGLEPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYANGLEPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERANGLEPROC) (GLuint id, GLenum target); - -#define glBeginQueryANGLE GLEW_GET_FUN(__glewBeginQueryANGLE) -#define glDeleteQueriesANGLE GLEW_GET_FUN(__glewDeleteQueriesANGLE) -#define glEndQueryANGLE GLEW_GET_FUN(__glewEndQueryANGLE) -#define glGenQueriesANGLE GLEW_GET_FUN(__glewGenQueriesANGLE) -#define glGetQueryObjecti64vANGLE GLEW_GET_FUN(__glewGetQueryObjecti64vANGLE) -#define glGetQueryObjectivANGLE GLEW_GET_FUN(__glewGetQueryObjectivANGLE) -#define glGetQueryObjectui64vANGLE GLEW_GET_FUN(__glewGetQueryObjectui64vANGLE) -#define glGetQueryObjectuivANGLE GLEW_GET_FUN(__glewGetQueryObjectuivANGLE) -#define glGetQueryivANGLE GLEW_GET_FUN(__glewGetQueryivANGLE) -#define glIsQueryANGLE GLEW_GET_FUN(__glewIsQueryANGLE) -#define glQueryCounterANGLE GLEW_GET_FUN(__glewQueryCounterANGLE) - -#define GLEW_ANGLE_timer_query GLEW_GET_VAR(__GLEW_ANGLE_timer_query) - -#endif /* GL_ANGLE_timer_query */ - -/* ------------------- GL_ANGLE_translated_shader_source ------------------- */ - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 - -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 - -typedef void (GLAPIENTRY * PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); - -#define glGetTranslatedShaderSourceANGLE GLEW_GET_FUN(__glewGetTranslatedShaderSourceANGLE) - -#define GLEW_ANGLE_translated_shader_source GLEW_GET_VAR(__GLEW_ANGLE_translated_shader_source) - -#endif /* GL_ANGLE_translated_shader_source */ - -/* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 - -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 - -#define GLEW_APPLE_aux_depth_stencil GLEW_GET_VAR(__GLEW_APPLE_aux_depth_stencil) - -#endif /* GL_APPLE_aux_depth_stencil */ - -/* ------------------------ GL_APPLE_client_storage ------------------------ */ - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 - -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 - -#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage) - -#endif /* GL_APPLE_client_storage */ - -/* ------------------------- GL_APPLE_element_array ------------------------ */ - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 - -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount); - -#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE) -#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE) -#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE) -#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE) -#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE) - -#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array) - -#endif /* GL_APPLE_element_array */ - -/* ----------------------------- GL_APPLE_fence ---------------------------- */ - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 - -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B - -typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences); -typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences); -typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); - -#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE) -#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE) -#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE) -#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE) -#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE) -#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE) -#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE) -#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE) - -#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence) - -#endif /* GL_APPLE_fence */ - -/* ------------------------- GL_APPLE_float_pixels ------------------------- */ - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 - -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F - -#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels) - -#endif /* GL_APPLE_float_pixels */ - -/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 - -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 - -typedef void (GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); - -#define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE) -#define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE) - -#define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range) - -#endif /* GL_APPLE_flush_buffer_range */ - -/* ----------------------- GL_APPLE_object_purgeable ----------------------- */ - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 - -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D - -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint* params); -typedef GLenum (GLAPIENTRY * PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (GLAPIENTRY * PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); - -#define glGetObjectParameterivAPPLE GLEW_GET_FUN(__glewGetObjectParameterivAPPLE) -#define glObjectPurgeableAPPLE GLEW_GET_FUN(__glewObjectPurgeableAPPLE) -#define glObjectUnpurgeableAPPLE GLEW_GET_FUN(__glewObjectUnpurgeableAPPLE) - -#define GLEW_APPLE_object_purgeable GLEW_GET_VAR(__GLEW_APPLE_object_purgeable) - -#endif /* GL_APPLE_object_purgeable */ - -/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ - -#ifndef GL_APPLE_pixel_buffer -#define GL_APPLE_pixel_buffer 1 - -#define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 - -#define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer) - -#endif /* GL_APPLE_pixel_buffer */ - -/* ---------------------------- GL_APPLE_rgb_422 --------------------------- */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 - -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_422_APPLE 0x8A1F - -#define GLEW_APPLE_rgb_422 GLEW_GET_VAR(__GLEW_APPLE_rgb_422) - -#endif /* GL_APPLE_rgb_422 */ - -/* --------------------------- GL_APPLE_row_bytes -------------------------- */ - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 - -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 - -#define GLEW_APPLE_row_bytes GLEW_GET_VAR(__GLEW_APPLE_row_bytes) - -#endif /* GL_APPLE_row_bytes */ - -/* ------------------------ GL_APPLE_specular_vector ----------------------- */ - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 - -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 - -#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector) - -#endif /* GL_APPLE_specular_vector */ - -/* ------------------------- GL_APPLE_texture_range ------------------------ */ - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 - -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF - -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params); -typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer); - -#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE) -#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE) - -#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range) - -#endif /* GL_APPLE_texture_range */ - -/* ------------------------ GL_APPLE_transform_hint ------------------------ */ - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 - -#define GL_TRANSFORM_HINT_APPLE 0x85B1 - -#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint) - -#endif /* GL_APPLE_transform_hint */ - -/* ---------------------- GL_APPLE_vertex_array_object --------------------- */ - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 - -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); -typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); - -#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE) -#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE) -#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE) -#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE) - -#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object) - -#endif /* GL_APPLE_vertex_array_object */ - -/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 - -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF - -typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); - -#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) -#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) -#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE) - -#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range) - -#endif /* GL_APPLE_vertex_array_range */ - -/* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */ - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 - -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 - -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); - -#define glDisableVertexAttribAPPLE GLEW_GET_FUN(__glewDisableVertexAttribAPPLE) -#define glEnableVertexAttribAPPLE GLEW_GET_FUN(__glewEnableVertexAttribAPPLE) -#define glIsVertexAttribEnabledAPPLE GLEW_GET_FUN(__glewIsVertexAttribEnabledAPPLE) -#define glMapVertexAttrib1dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1dAPPLE) -#define glMapVertexAttrib1fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1fAPPLE) -#define glMapVertexAttrib2dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2dAPPLE) -#define glMapVertexAttrib2fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2fAPPLE) - -#define GLEW_APPLE_vertex_program_evaluators GLEW_GET_VAR(__GLEW_APPLE_vertex_program_evaluators) - -#endif /* GL_APPLE_vertex_program_evaluators */ - -/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 - -#define GL_YCBCR_422_APPLE 0x85B9 - -#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422) - -#endif /* GL_APPLE_ycbcr_422 */ - -/* ------------------------ GL_ARB_ES2_compatibility ----------------------- */ - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 - -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_RGB565 0x8D62 -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD - -typedef int GLfixed; - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFPROC) (GLclampf d); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); -typedef void (GLAPIENTRY * PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision); -typedef void (GLAPIENTRY * PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (GLAPIENTRY * PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid*binary, GLsizei length); - -#define glClearDepthf GLEW_GET_FUN(__glewClearDepthf) -#define glDepthRangef GLEW_GET_FUN(__glewDepthRangef) -#define glGetShaderPrecisionFormat GLEW_GET_FUN(__glewGetShaderPrecisionFormat) -#define glReleaseShaderCompiler GLEW_GET_FUN(__glewReleaseShaderCompiler) -#define glShaderBinary GLEW_GET_FUN(__glewShaderBinary) - -#define GLEW_ARB_ES2_compatibility GLEW_GET_VAR(__GLEW_ARB_ES2_compatibility) - -#endif /* GL_ARB_ES2_compatibility */ - -/* ------------------------ GL_ARB_ES3_compatibility ----------------------- */ - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 - -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 - -#define GLEW_ARB_ES3_compatibility GLEW_GET_VAR(__GLEW_ARB_ES3_compatibility) - -#endif /* GL_ARB_ES3_compatibility */ - -/* ------------------------ GL_ARB_arrays_of_arrays ------------------------ */ - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 - -#define GLEW_ARB_arrays_of_arrays GLEW_GET_VAR(__GLEW_ARB_arrays_of_arrays) - -#endif /* GL_ARB_arrays_of_arrays */ - -/* -------------------------- GL_ARB_base_instance ------------------------- */ - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); - -#define glDrawArraysInstancedBaseInstance GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstance) -#define glDrawElementsInstancedBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstance) -#define glDrawElementsInstancedBaseVertexBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexBaseInstance) - -#define GLEW_ARB_base_instance GLEW_GET_VAR(__GLEW_ARB_base_instance) - -#endif /* GL_ARB_base_instance */ - -/* ------------------------ GL_ARB_bindless_texture ------------------------ */ - -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 - -#define GL_UNSIGNED_INT64_ARB 0x140F - -typedef GLuint64 (GLAPIENTRY * PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT* params); -typedef GLboolean (GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64* values); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT* v); - -#define glGetImageHandleARB GLEW_GET_FUN(__glewGetImageHandleARB) -#define glGetTextureHandleARB GLEW_GET_FUN(__glewGetTextureHandleARB) -#define glGetTextureSamplerHandleARB GLEW_GET_FUN(__glewGetTextureSamplerHandleARB) -#define glGetVertexAttribLui64vARB GLEW_GET_FUN(__glewGetVertexAttribLui64vARB) -#define glIsImageHandleResidentARB GLEW_GET_FUN(__glewIsImageHandleResidentARB) -#define glIsTextureHandleResidentARB GLEW_GET_FUN(__glewIsTextureHandleResidentARB) -#define glMakeImageHandleNonResidentARB GLEW_GET_FUN(__glewMakeImageHandleNonResidentARB) -#define glMakeImageHandleResidentARB GLEW_GET_FUN(__glewMakeImageHandleResidentARB) -#define glMakeTextureHandleNonResidentARB GLEW_GET_FUN(__glewMakeTextureHandleNonResidentARB) -#define glMakeTextureHandleResidentARB GLEW_GET_FUN(__glewMakeTextureHandleResidentARB) -#define glProgramUniformHandleui64ARB GLEW_GET_FUN(__glewProgramUniformHandleui64ARB) -#define glProgramUniformHandleui64vARB GLEW_GET_FUN(__glewProgramUniformHandleui64vARB) -#define glUniformHandleui64ARB GLEW_GET_FUN(__glewUniformHandleui64ARB) -#define glUniformHandleui64vARB GLEW_GET_FUN(__glewUniformHandleui64vARB) -#define glVertexAttribL1ui64ARB GLEW_GET_FUN(__glewVertexAttribL1ui64ARB) -#define glVertexAttribL1ui64vARB GLEW_GET_FUN(__glewVertexAttribL1ui64vARB) - -#define GLEW_ARB_bindless_texture GLEW_GET_VAR(__GLEW_ARB_bindless_texture) - -#endif /* GL_ARB_bindless_texture */ - -/* ----------------------- GL_ARB_blend_func_extended ---------------------- */ - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 - -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC - -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar * name); - -#define glBindFragDataLocationIndexed GLEW_GET_FUN(__glewBindFragDataLocationIndexed) -#define glGetFragDataIndex GLEW_GET_FUN(__glewGetFragDataIndex) - -#define GLEW_ARB_blend_func_extended GLEW_GET_VAR(__GLEW_ARB_blend_func_extended) - -#endif /* GL_ARB_blend_func_extended */ - -/* ------------------------- GL_ARB_buffer_storage ------------------------- */ - -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 - -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_PERSISTENT_BIT 0x00000040 -#define GL_MAP_COHERENT_BIT 0x00000080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 - -typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid* data, GLbitfield flags); - -#define glBufferStorage GLEW_GET_FUN(__glewBufferStorage) -#define glNamedBufferStorageEXT GLEW_GET_FUN(__glewNamedBufferStorageEXT) - -#define GLEW_ARB_buffer_storage GLEW_GET_VAR(__GLEW_ARB_buffer_storage) - -#endif /* GL_ARB_buffer_storage */ - -/* ---------------------------- GL_ARB_cl_event ---------------------------- */ - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 - -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 - -typedef struct _cl_context *cl_context; -typedef struct _cl_event *cl_event; - -typedef GLsync (GLAPIENTRY * PFNGLCREATESYNCFROMCLEVENTARBPROC) (cl_context context, cl_event event, GLbitfield flags); - -#define glCreateSyncFromCLeventARB GLEW_GET_FUN(__glewCreateSyncFromCLeventARB) - -#define GLEW_ARB_cl_event GLEW_GET_VAR(__GLEW_ARB_cl_event) - -#endif /* GL_ARB_cl_event */ - -/* ----------------------- GL_ARB_clear_buffer_object ---------------------- */ - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 - -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data); - -#define glClearBufferData GLEW_GET_FUN(__glewClearBufferData) -#define glClearBufferSubData GLEW_GET_FUN(__glewClearBufferSubData) -#define glClearNamedBufferDataEXT GLEW_GET_FUN(__glewClearNamedBufferDataEXT) -#define glClearNamedBufferSubDataEXT GLEW_GET_FUN(__glewClearNamedBufferSubDataEXT) - -#define GLEW_ARB_clear_buffer_object GLEW_GET_VAR(__GLEW_ARB_clear_buffer_object) - -#endif /* GL_ARB_clear_buffer_object */ - -/* -------------------------- GL_ARB_clear_texture ------------------------- */ - -#ifndef GL_ARB_clear_texture -#define GL_ARB_clear_texture 1 - -#define GL_CLEAR_TEXTURE 0x9365 - -typedef void (GLAPIENTRY * PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data); - -#define glClearTexImage GLEW_GET_FUN(__glewClearTexImage) -#define glClearTexSubImage GLEW_GET_FUN(__glewClearTexSubImage) - -#define GLEW_ARB_clear_texture GLEW_GET_VAR(__GLEW_ARB_clear_texture) - -#endif /* GL_ARB_clear_texture */ - -/* ----------------------- GL_ARB_color_buffer_float ----------------------- */ - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 - -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D - -typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); - -#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB) - -#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float) - -#endif /* GL_ARB_color_buffer_float */ - -/* -------------------------- GL_ARB_compatibility ------------------------- */ - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 - -#define GLEW_ARB_compatibility GLEW_GET_VAR(__GLEW_ARB_compatibility) - -#endif /* GL_ARB_compatibility */ - -/* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */ - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 - -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E - -#define GLEW_ARB_compressed_texture_pixel_storage GLEW_GET_VAR(__GLEW_ARB_compressed_texture_pixel_storage) - -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -/* ------------------------- GL_ARB_compute_shader ------------------------- */ - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 - -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF - -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); - -#define glDispatchCompute GLEW_GET_FUN(__glewDispatchCompute) -#define glDispatchComputeIndirect GLEW_GET_FUN(__glewDispatchComputeIndirect) - -#define GLEW_ARB_compute_shader GLEW_GET_VAR(__GLEW_ARB_compute_shader) - -#endif /* GL_ARB_compute_shader */ - -/* ------------------- GL_ARB_compute_variable_group_size ------------------ */ - -#ifndef GL_ARB_compute_variable_group_size -#define GL_ARB_compute_variable_group_size 1 - -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 - -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); - -#define glDispatchComputeGroupSizeARB GLEW_GET_FUN(__glewDispatchComputeGroupSizeARB) - -#define GLEW_ARB_compute_variable_group_size GLEW_GET_VAR(__GLEW_ARB_compute_variable_group_size) - -#endif /* GL_ARB_compute_variable_group_size */ - -/* ----------------------- GL_ARB_conservative_depth ----------------------- */ - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 - -#define GLEW_ARB_conservative_depth GLEW_GET_VAR(__GLEW_ARB_conservative_depth) - -#endif /* GL_ARB_conservative_depth */ - -/* --------------------------- GL_ARB_copy_buffer -------------------------- */ - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 - -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 - -typedef void (GLAPIENTRY * PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size); - -#define glCopyBufferSubData GLEW_GET_FUN(__glewCopyBufferSubData) - -#define GLEW_ARB_copy_buffer GLEW_GET_VAR(__GLEW_ARB_copy_buffer) - -#endif /* GL_ARB_copy_buffer */ - -/* --------------------------- GL_ARB_copy_image --------------------------- */ - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 - -typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); - -#define glCopyImageSubData GLEW_GET_FUN(__glewCopyImageSubData) - -#define GLEW_ARB_copy_image GLEW_GET_VAR(__GLEW_ARB_copy_image) - -#endif /* GL_ARB_copy_image */ - -/* -------------------------- GL_ARB_debug_output -------------------------- */ - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 - -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 - -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); - -#define glDebugMessageCallbackARB GLEW_GET_FUN(__glewDebugMessageCallbackARB) -#define glDebugMessageControlARB GLEW_GET_FUN(__glewDebugMessageControlARB) -#define glDebugMessageInsertARB GLEW_GET_FUN(__glewDebugMessageInsertARB) -#define glGetDebugMessageLogARB GLEW_GET_FUN(__glewGetDebugMessageLogARB) - -#define GLEW_ARB_debug_output GLEW_GET_VAR(__GLEW_ARB_debug_output) - -#endif /* GL_ARB_debug_output */ - -/* ----------------------- GL_ARB_depth_buffer_float ----------------------- */ - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 - -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD - -#define GLEW_ARB_depth_buffer_float GLEW_GET_VAR(__GLEW_ARB_depth_buffer_float) - -#endif /* GL_ARB_depth_buffer_float */ - -/* --------------------------- GL_ARB_depth_clamp -------------------------- */ - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 - -#define GL_DEPTH_CLAMP 0x864F - -#define GLEW_ARB_depth_clamp GLEW_GET_VAR(__GLEW_ARB_depth_clamp) - -#endif /* GL_ARB_depth_clamp */ - -/* -------------------------- GL_ARB_depth_texture ------------------------- */ - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 - -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B - -#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture) - -#endif /* GL_ARB_depth_texture */ - -/* -------------------------- GL_ARB_draw_buffers -------------------------- */ - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 - -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 - -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs); - -#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB) - -#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers) - -#endif /* GL_ARB_draw_buffers */ - -/* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */ - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); - -#define glBlendEquationSeparateiARB GLEW_GET_FUN(__glewBlendEquationSeparateiARB) -#define glBlendEquationiARB GLEW_GET_FUN(__glewBlendEquationiARB) -#define glBlendFuncSeparateiARB GLEW_GET_FUN(__glewBlendFuncSeparateiARB) -#define glBlendFunciARB GLEW_GET_FUN(__glewBlendFunciARB) - -#define GLEW_ARB_draw_buffers_blend GLEW_GET_VAR(__GLEW_ARB_draw_buffers_blend) - -#endif /* GL_ARB_draw_buffers_blend */ - -/* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */ - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const *indices, GLsizei primcount, const GLint *basevertex); - -#define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex) -#define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex) -#define glDrawRangeElementsBaseVertex GLEW_GET_FUN(__glewDrawRangeElementsBaseVertex) -#define glMultiDrawElementsBaseVertex GLEW_GET_FUN(__glewMultiDrawElementsBaseVertex) - -#define GLEW_ARB_draw_elements_base_vertex GLEW_GET_VAR(__GLEW_ARB_draw_elements_base_vertex) - -#endif /* GL_ARB_draw_elements_base_vertex */ - -/* -------------------------- GL_ARB_draw_indirect ------------------------- */ - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 - -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); - -#define glDrawArraysIndirect GLEW_GET_FUN(__glewDrawArraysIndirect) -#define glDrawElementsIndirect GLEW_GET_FUN(__glewDrawElementsIndirect) - -#define GLEW_ARB_draw_indirect GLEW_GET_VAR(__GLEW_ARB_draw_indirect) - -#endif /* GL_ARB_draw_indirect */ - -/* ------------------------- GL_ARB_draw_instanced ------------------------- */ - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 - -#define GLEW_ARB_draw_instanced GLEW_GET_VAR(__GLEW_ARB_draw_instanced) - -#endif /* GL_ARB_draw_instanced */ - -/* ------------------------ GL_ARB_enhanced_layouts ------------------------ */ - -#ifndef GL_ARB_enhanced_layouts -#define GL_ARB_enhanced_layouts 1 - -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C - -#define GLEW_ARB_enhanced_layouts GLEW_GET_VAR(__GLEW_ARB_enhanced_layouts) - -#endif /* GL_ARB_enhanced_layouts */ - -/* -------------------- GL_ARB_explicit_attrib_location -------------------- */ - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 - -#define GLEW_ARB_explicit_attrib_location GLEW_GET_VAR(__GLEW_ARB_explicit_attrib_location) - -#endif /* GL_ARB_explicit_attrib_location */ - -/* -------------------- GL_ARB_explicit_uniform_location ------------------- */ - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 - -#define GL_MAX_UNIFORM_LOCATIONS 0x826E - -#define GLEW_ARB_explicit_uniform_location GLEW_GET_VAR(__GLEW_ARB_explicit_uniform_location) - -#endif /* GL_ARB_explicit_uniform_location */ - -/* ------------------- GL_ARB_fragment_coord_conventions ------------------- */ - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 - -#define GLEW_ARB_fragment_coord_conventions GLEW_GET_VAR(__GLEW_ARB_fragment_coord_conventions) - -#endif /* GL_ARB_fragment_coord_conventions */ - -/* --------------------- GL_ARB_fragment_layer_viewport -------------------- */ - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 - -#define GLEW_ARB_fragment_layer_viewport GLEW_GET_VAR(__GLEW_ARB_fragment_layer_viewport) - -#endif /* GL_ARB_fragment_layer_viewport */ - -/* ------------------------ GL_ARB_fragment_program ------------------------ */ - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 - -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 - -#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program) - -#endif /* GL_ARB_fragment_program */ - -/* --------------------- GL_ARB_fragment_program_shadow -------------------- */ - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 - -#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow) - -#endif /* GL_ARB_fragment_program_shadow */ - -/* ------------------------- GL_ARB_fragment_shader ------------------------ */ - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 - -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B - -#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader) - -#endif /* GL_ARB_fragment_shader */ - -/* ------------------- GL_ARB_framebuffer_no_attachments ------------------- */ - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 - -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); - -#define glFramebufferParameteri GLEW_GET_FUN(__glewFramebufferParameteri) -#define glGetFramebufferParameteriv GLEW_GET_FUN(__glewGetFramebufferParameteriv) -#define glGetNamedFramebufferParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferParameterivEXT) -#define glNamedFramebufferParameteriEXT GLEW_GET_FUN(__glewNamedFramebufferParameteriEXT) - -#define GLEW_ARB_framebuffer_no_attachments GLEW_GET_VAR(__GLEW_ARB_framebuffer_no_attachments) - -#endif /* GL_ARB_framebuffer_no_attachments */ - -/* ----------------------- GL_ARB_framebuffer_object ----------------------- */ - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_INDEX 0x8222 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_SRGB 0x8C40 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 - -typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer); -typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glBindFramebuffer GLEW_GET_FUN(__glewBindFramebuffer) -#define glBindRenderbuffer GLEW_GET_FUN(__glewBindRenderbuffer) -#define glBlitFramebuffer GLEW_GET_FUN(__glewBlitFramebuffer) -#define glCheckFramebufferStatus GLEW_GET_FUN(__glewCheckFramebufferStatus) -#define glDeleteFramebuffers GLEW_GET_FUN(__glewDeleteFramebuffers) -#define glDeleteRenderbuffers GLEW_GET_FUN(__glewDeleteRenderbuffers) -#define glFramebufferRenderbuffer GLEW_GET_FUN(__glewFramebufferRenderbuffer) -#define glFramebufferTexture1D GLEW_GET_FUN(__glewFramebufferTexture1D) -#define glFramebufferTexture2D GLEW_GET_FUN(__glewFramebufferTexture2D) -#define glFramebufferTexture3D GLEW_GET_FUN(__glewFramebufferTexture3D) -#define glFramebufferTextureLayer GLEW_GET_FUN(__glewFramebufferTextureLayer) -#define glGenFramebuffers GLEW_GET_FUN(__glewGenFramebuffers) -#define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers) -#define glGenerateMipmap GLEW_GET_FUN(__glewGenerateMipmap) -#define glGetFramebufferAttachmentParameteriv GLEW_GET_FUN(__glewGetFramebufferAttachmentParameteriv) -#define glGetRenderbufferParameteriv GLEW_GET_FUN(__glewGetRenderbufferParameteriv) -#define glIsFramebuffer GLEW_GET_FUN(__glewIsFramebuffer) -#define glIsRenderbuffer GLEW_GET_FUN(__glewIsRenderbuffer) -#define glRenderbufferStorage GLEW_GET_FUN(__glewRenderbufferStorage) -#define glRenderbufferStorageMultisample GLEW_GET_FUN(__glewRenderbufferStorageMultisample) - -#define GLEW_ARB_framebuffer_object GLEW_GET_VAR(__GLEW_ARB_framebuffer_object) - -#endif /* GL_ARB_framebuffer_object */ - -/* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 - -#define GL_FRAMEBUFFER_SRGB 0x8DB9 - -#define GLEW_ARB_framebuffer_sRGB GLEW_GET_VAR(__GLEW_ARB_framebuffer_sRGB) - -#endif /* GL_ARB_framebuffer_sRGB */ - -/* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 - -#define GL_LINES_ADJACENCY_ARB 0xA -#define GL_LINE_STRIP_ADJACENCY_ARB 0xB -#define GL_TRIANGLES_ADJACENCY_ARB 0xC -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); - -#define glFramebufferTextureARB GLEW_GET_FUN(__glewFramebufferTextureARB) -#define glFramebufferTextureFaceARB GLEW_GET_FUN(__glewFramebufferTextureFaceARB) -#define glFramebufferTextureLayerARB GLEW_GET_FUN(__glewFramebufferTextureLayerARB) -#define glProgramParameteriARB GLEW_GET_FUN(__glewProgramParameteriARB) - -#define GLEW_ARB_geometry_shader4 GLEW_GET_VAR(__GLEW_ARB_geometry_shader4) - -#endif /* GL_ARB_geometry_shader4 */ - -/* ----------------------- GL_ARB_get_program_binary ----------------------- */ - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 - -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary); -typedef void (GLAPIENTRY * PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); - -#define glGetProgramBinary GLEW_GET_FUN(__glewGetProgramBinary) -#define glProgramBinary GLEW_GET_FUN(__glewProgramBinary) -#define glProgramParameteri GLEW_GET_FUN(__glewProgramParameteri) - -#define GLEW_ARB_get_program_binary GLEW_GET_VAR(__GLEW_ARB_get_program_binary) - -#endif /* GL_ARB_get_program_binary */ - -/* --------------------------- GL_ARB_gpu_shader5 -------------------------- */ - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 - -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 - -#define GLEW_ARB_gpu_shader5 GLEW_GET_VAR(__GLEW_ARB_gpu_shader5) - -#endif /* GL_ARB_gpu_shader5 */ - -/* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */ - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 - -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE - -typedef void (GLAPIENTRY * PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); - -#define glGetUniformdv GLEW_GET_FUN(__glewGetUniformdv) -#define glUniform1d GLEW_GET_FUN(__glewUniform1d) -#define glUniform1dv GLEW_GET_FUN(__glewUniform1dv) -#define glUniform2d GLEW_GET_FUN(__glewUniform2d) -#define glUniform2dv GLEW_GET_FUN(__glewUniform2dv) -#define glUniform3d GLEW_GET_FUN(__glewUniform3d) -#define glUniform3dv GLEW_GET_FUN(__glewUniform3dv) -#define glUniform4d GLEW_GET_FUN(__glewUniform4d) -#define glUniform4dv GLEW_GET_FUN(__glewUniform4dv) -#define glUniformMatrix2dv GLEW_GET_FUN(__glewUniformMatrix2dv) -#define glUniformMatrix2x3dv GLEW_GET_FUN(__glewUniformMatrix2x3dv) -#define glUniformMatrix2x4dv GLEW_GET_FUN(__glewUniformMatrix2x4dv) -#define glUniformMatrix3dv GLEW_GET_FUN(__glewUniformMatrix3dv) -#define glUniformMatrix3x2dv GLEW_GET_FUN(__glewUniformMatrix3x2dv) -#define glUniformMatrix3x4dv GLEW_GET_FUN(__glewUniformMatrix3x4dv) -#define glUniformMatrix4dv GLEW_GET_FUN(__glewUniformMatrix4dv) -#define glUniformMatrix4x2dv GLEW_GET_FUN(__glewUniformMatrix4x2dv) -#define glUniformMatrix4x3dv GLEW_GET_FUN(__glewUniformMatrix4x3dv) - -#define GLEW_ARB_gpu_shader_fp64 GLEW_GET_VAR(__GLEW_ARB_gpu_shader_fp64) - -#endif /* GL_ARB_gpu_shader_fp64 */ - -/* ------------------------ GL_ARB_half_float_pixel ------------------------ */ - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 - -#define GL_HALF_FLOAT_ARB 0x140B - -#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel) - -#endif /* GL_ARB_half_float_pixel */ - -/* ------------------------ GL_ARB_half_float_vertex ----------------------- */ - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 - -#define GL_HALF_FLOAT 0x140B - -#define GLEW_ARB_half_float_vertex GLEW_GET_VAR(__GLEW_ARB_half_float_vertex) - -#endif /* GL_ARB_half_float_vertex */ - -/* ----------------------------- GL_ARB_imaging ---------------------------- */ - -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 - -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_IGNORE_BORDER 0x8150 -#define GL_CONSTANT_BORDER 0x8151 -#define GL_WRAP_BORDER 0x8152 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 - -typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - -#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable) -#define glColorTable GLEW_GET_FUN(__glewColorTable) -#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv) -#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv) -#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D) -#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D) -#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf) -#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv) -#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri) -#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv) -#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable) -#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable) -#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D) -#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D) -#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable) -#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv) -#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv) -#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter) -#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv) -#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv) -#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram) -#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv) -#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv) -#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax) -#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv) -#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv) -#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter) -#define glHistogram GLEW_GET_FUN(__glewHistogram) -#define glMinmax GLEW_GET_FUN(__glewMinmax) -#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram) -#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax) -#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D) - -#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging) - -#endif /* GL_ARB_imaging */ - -/* ----------------------- GL_ARB_indirect_parameters ---------------------- */ - -#ifndef GL_ARB_indirect_parameters -#define GL_ARB_indirect_parameters 1 - -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); - -#define glMultiDrawArraysIndirectCountARB GLEW_GET_FUN(__glewMultiDrawArraysIndirectCountARB) -#define glMultiDrawElementsIndirectCountARB GLEW_GET_FUN(__glewMultiDrawElementsIndirectCountARB) - -#define GLEW_ARB_indirect_parameters GLEW_GET_VAR(__GLEW_ARB_indirect_parameters) - -#endif /* GL_ARB_indirect_parameters */ - -/* ------------------------ GL_ARB_instanced_arrays ------------------------ */ - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); - -#define glDrawArraysInstancedARB GLEW_GET_FUN(__glewDrawArraysInstancedARB) -#define glDrawElementsInstancedARB GLEW_GET_FUN(__glewDrawElementsInstancedARB) -#define glVertexAttribDivisorARB GLEW_GET_FUN(__glewVertexAttribDivisorARB) - -#define GLEW_ARB_instanced_arrays GLEW_GET_VAR(__GLEW_ARB_instanced_arrays) - -#endif /* GL_ARB_instanced_arrays */ - -/* ---------------------- GL_ARB_internalformat_query ---------------------- */ - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 - -#define GL_NUM_SAMPLE_COUNTS 0x9380 - -typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params); - -#define glGetInternalformativ GLEW_GET_FUN(__glewGetInternalformativ) - -#define GLEW_ARB_internalformat_query GLEW_GET_VAR(__GLEW_ARB_internalformat_query) - -#endif /* GL_ARB_internalformat_query */ - -/* ---------------------- GL_ARB_internalformat_query2 --------------------- */ - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 - -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - -typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params); - -#define glGetInternalformati64v GLEW_GET_FUN(__glewGetInternalformati64v) - -#define GLEW_ARB_internalformat_query2 GLEW_GET_VAR(__GLEW_ARB_internalformat_query2) - -#endif /* GL_ARB_internalformat_query2 */ - -/* ----------------------- GL_ARB_invalidate_subdata ----------------------- */ - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 - -typedef void (GLAPIENTRY * PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum* attachments); -typedef void (GLAPIENTRY * PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); - -#define glInvalidateBufferData GLEW_GET_FUN(__glewInvalidateBufferData) -#define glInvalidateBufferSubData GLEW_GET_FUN(__glewInvalidateBufferSubData) -#define glInvalidateFramebuffer GLEW_GET_FUN(__glewInvalidateFramebuffer) -#define glInvalidateSubFramebuffer GLEW_GET_FUN(__glewInvalidateSubFramebuffer) -#define glInvalidateTexImage GLEW_GET_FUN(__glewInvalidateTexImage) -#define glInvalidateTexSubImage GLEW_GET_FUN(__glewInvalidateTexSubImage) - -#define GLEW_ARB_invalidate_subdata GLEW_GET_VAR(__GLEW_ARB_invalidate_subdata) - -#endif /* GL_ARB_invalidate_subdata */ - -/* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */ - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 - -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC - -#define GLEW_ARB_map_buffer_alignment GLEW_GET_VAR(__GLEW_ARB_map_buffer_alignment) - -#endif /* GL_ARB_map_buffer_alignment */ - -/* ------------------------ GL_ARB_map_buffer_range ------------------------ */ - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 - -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 - -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); - -#define glFlushMappedBufferRange GLEW_GET_FUN(__glewFlushMappedBufferRange) -#define glMapBufferRange GLEW_GET_FUN(__glewMapBufferRange) - -#define GLEW_ARB_map_buffer_range GLEW_GET_VAR(__GLEW_ARB_map_buffer_range) - -#endif /* GL_ARB_map_buffer_range */ - -/* ------------------------- GL_ARB_matrix_palette ------------------------- */ - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 - -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - -typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices); - -#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB) -#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB) -#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB) -#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB) -#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB) - -#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette) - -#endif /* GL_ARB_matrix_palette */ - -/* --------------------------- GL_ARB_multi_bind --------------------------- */ - -#ifndef GL_ARB_multi_bind -#define GL_ARB_multi_bind 1 - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint* samplers); -typedef void (GLAPIENTRY * PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizei *strides); - -#define glBindBuffersBase GLEW_GET_FUN(__glewBindBuffersBase) -#define glBindBuffersRange GLEW_GET_FUN(__glewBindBuffersRange) -#define glBindImageTextures GLEW_GET_FUN(__glewBindImageTextures) -#define glBindSamplers GLEW_GET_FUN(__glewBindSamplers) -#define glBindTextures GLEW_GET_FUN(__glewBindTextures) -#define glBindVertexBuffers GLEW_GET_FUN(__glewBindVertexBuffers) - -#define GLEW_ARB_multi_bind GLEW_GET_VAR(__GLEW_ARB_multi_bind) - -#endif /* GL_ARB_multi_bind */ - -/* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); - -#define glMultiDrawArraysIndirect GLEW_GET_FUN(__glewMultiDrawArraysIndirect) -#define glMultiDrawElementsIndirect GLEW_GET_FUN(__glewMultiDrawElementsIndirect) - -#define GLEW_ARB_multi_draw_indirect GLEW_GET_VAR(__GLEW_ARB_multi_draw_indirect) - -#endif /* GL_ARB_multi_draw_indirect */ - -/* --------------------------- GL_ARB_multisample -------------------------- */ - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 - -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 - -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); - -#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB) - -#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample) - -#endif /* GL_ARB_multisample */ - -/* -------------------------- GL_ARB_multitexture -------------------------- */ - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 - -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - -typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB) -#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB) -#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB) -#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB) -#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB) -#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB) -#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB) -#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB) -#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB) -#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB) -#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB) -#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB) -#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB) -#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB) -#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB) -#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB) -#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB) -#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB) -#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB) -#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB) -#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB) -#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB) -#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB) -#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB) -#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB) -#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB) -#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB) -#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB) -#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB) -#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB) -#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB) -#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB) -#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB) -#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB) - -#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture) - -#endif /* GL_ARB_multitexture */ - -/* ------------------------- GL_ARB_occlusion_query ------------------------ */ - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 - -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id); - -#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB) -#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB) -#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB) -#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB) -#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB) -#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB) -#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB) -#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB) - -#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query) - -#endif /* GL_ARB_occlusion_query */ - -/* ------------------------ GL_ARB_occlusion_query2 ------------------------ */ - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 - -#define GL_ANY_SAMPLES_PASSED 0x8C2F - -#define GLEW_ARB_occlusion_query2 GLEW_GET_VAR(__GLEW_ARB_occlusion_query2) - -#endif /* GL_ARB_occlusion_query2 */ - -/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 - -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF - -#define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object) - -#endif /* GL_ARB_pixel_buffer_object */ - -/* ------------------------ GL_ARB_point_parameters ------------------------ */ - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 - -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat* params); - -#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB) -#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB) - -#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters) - -#endif /* GL_ARB_point_parameters */ - -/* -------------------------- GL_ARB_point_sprite -------------------------- */ - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 - -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 - -#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite) - -#endif /* GL_ARB_point_sprite */ - -/* --------------------- GL_ARB_program_interface_query -------------------- */ - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 - -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_IS_PER_PATCH 0x92E7 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint* params); -typedef GLuint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params); - -#define glGetProgramInterfaceiv GLEW_GET_FUN(__glewGetProgramInterfaceiv) -#define glGetProgramResourceIndex GLEW_GET_FUN(__glewGetProgramResourceIndex) -#define glGetProgramResourceLocation GLEW_GET_FUN(__glewGetProgramResourceLocation) -#define glGetProgramResourceLocationIndex GLEW_GET_FUN(__glewGetProgramResourceLocationIndex) -#define glGetProgramResourceName GLEW_GET_FUN(__glewGetProgramResourceName) -#define glGetProgramResourceiv GLEW_GET_FUN(__glewGetProgramResourceiv) - -#define GLEW_ARB_program_interface_query GLEW_GET_VAR(__GLEW_ARB_program_interface_query) - -#endif /* GL_ARB_program_interface_query */ - -/* ------------------------ GL_ARB_provoking_vertex ------------------------ */ - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 - -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F - -typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXPROC) (GLenum mode); - -#define glProvokingVertex GLEW_GET_FUN(__glewProvokingVertex) - -#define GLEW_ARB_provoking_vertex GLEW_GET_VAR(__GLEW_ARB_provoking_vertex) - -#endif /* GL_ARB_provoking_vertex */ - -/* ----------------------- GL_ARB_query_buffer_object ---------------------- */ - -#ifndef GL_ARB_query_buffer_object -#define GL_ARB_query_buffer_object 1 - -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 - -#define GLEW_ARB_query_buffer_object GLEW_GET_VAR(__GLEW_ARB_query_buffer_object) - -#endif /* GL_ARB_query_buffer_object */ - -/* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 - -#define GLEW_ARB_robust_buffer_access_behavior GLEW_GET_VAR(__GLEW_ARB_robust_buffer_access_behavior) - -#endif /* GL_ARB_robust_buffer_access_behavior */ - -/* --------------------------- GL_ARB_robustness --------------------------- */ - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 - -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 - -typedef GLenum (GLAPIENTRY * PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table); -typedef void (GLAPIENTRY * PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void* img); -typedef void (GLAPIENTRY * PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image); -typedef void (GLAPIENTRY * PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values); -typedef void (GLAPIENTRY * PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v); -typedef void (GLAPIENTRY * PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v); -typedef void (GLAPIENTRY * PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint* v); -typedef void (GLAPIENTRY * PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort* values); -typedef void (GLAPIENTRY * PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte* pattern); -typedef void (GLAPIENTRY * PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span); -typedef void (GLAPIENTRY * PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint* params); -typedef void (GLAPIENTRY * PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data); - -#define glGetGraphicsResetStatusARB GLEW_GET_FUN(__glewGetGraphicsResetStatusARB) -#define glGetnColorTableARB GLEW_GET_FUN(__glewGetnColorTableARB) -#define glGetnCompressedTexImageARB GLEW_GET_FUN(__glewGetnCompressedTexImageARB) -#define glGetnConvolutionFilterARB GLEW_GET_FUN(__glewGetnConvolutionFilterARB) -#define glGetnHistogramARB GLEW_GET_FUN(__glewGetnHistogramARB) -#define glGetnMapdvARB GLEW_GET_FUN(__glewGetnMapdvARB) -#define glGetnMapfvARB GLEW_GET_FUN(__glewGetnMapfvARB) -#define glGetnMapivARB GLEW_GET_FUN(__glewGetnMapivARB) -#define glGetnMinmaxARB GLEW_GET_FUN(__glewGetnMinmaxARB) -#define glGetnPixelMapfvARB GLEW_GET_FUN(__glewGetnPixelMapfvARB) -#define glGetnPixelMapuivARB GLEW_GET_FUN(__glewGetnPixelMapuivARB) -#define glGetnPixelMapusvARB GLEW_GET_FUN(__glewGetnPixelMapusvARB) -#define glGetnPolygonStippleARB GLEW_GET_FUN(__glewGetnPolygonStippleARB) -#define glGetnSeparableFilterARB GLEW_GET_FUN(__glewGetnSeparableFilterARB) -#define glGetnTexImageARB GLEW_GET_FUN(__glewGetnTexImageARB) -#define glGetnUniformdvARB GLEW_GET_FUN(__glewGetnUniformdvARB) -#define glGetnUniformfvARB GLEW_GET_FUN(__glewGetnUniformfvARB) -#define glGetnUniformivARB GLEW_GET_FUN(__glewGetnUniformivARB) -#define glGetnUniformuivARB GLEW_GET_FUN(__glewGetnUniformuivARB) -#define glReadnPixelsARB GLEW_GET_FUN(__glewReadnPixelsARB) - -#define GLEW_ARB_robustness GLEW_GET_VAR(__GLEW_ARB_robustness) - -#endif /* GL_ARB_robustness */ - -/* ---------------- GL_ARB_robustness_application_isolation ---------------- */ - -#ifndef GL_ARB_robustness_application_isolation -#define GL_ARB_robustness_application_isolation 1 - -#define GLEW_ARB_robustness_application_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_application_isolation) - -#endif /* GL_ARB_robustness_application_isolation */ - -/* ---------------- GL_ARB_robustness_share_group_isolation ---------------- */ - -#ifndef GL_ARB_robustness_share_group_isolation -#define GL_ARB_robustness_share_group_isolation 1 - -#define GLEW_ARB_robustness_share_group_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_share_group_isolation) - -#endif /* GL_ARB_robustness_share_group_isolation */ - -/* ------------------------- GL_ARB_sample_shading ------------------------- */ - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 - -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 - -typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); - -#define glMinSampleShadingARB GLEW_GET_FUN(__glewMinSampleShadingARB) - -#define GLEW_ARB_sample_shading GLEW_GET_VAR(__GLEW_ARB_sample_shading) - -#endif /* GL_ARB_sample_shading */ - -/* ------------------------- GL_ARB_sampler_objects ------------------------ */ - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 - -#define GL_SAMPLER_BINDING 0x8919 - -typedef void (GLAPIENTRY * PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (GLAPIENTRY * PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint * samplers); -typedef void (GLAPIENTRY * PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint* samplers); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint* params); - -#define glBindSampler GLEW_GET_FUN(__glewBindSampler) -#define glDeleteSamplers GLEW_GET_FUN(__glewDeleteSamplers) -#define glGenSamplers GLEW_GET_FUN(__glewGenSamplers) -#define glGetSamplerParameterIiv GLEW_GET_FUN(__glewGetSamplerParameterIiv) -#define glGetSamplerParameterIuiv GLEW_GET_FUN(__glewGetSamplerParameterIuiv) -#define glGetSamplerParameterfv GLEW_GET_FUN(__glewGetSamplerParameterfv) -#define glGetSamplerParameteriv GLEW_GET_FUN(__glewGetSamplerParameteriv) -#define glIsSampler GLEW_GET_FUN(__glewIsSampler) -#define glSamplerParameterIiv GLEW_GET_FUN(__glewSamplerParameterIiv) -#define glSamplerParameterIuiv GLEW_GET_FUN(__glewSamplerParameterIuiv) -#define glSamplerParameterf GLEW_GET_FUN(__glewSamplerParameterf) -#define glSamplerParameterfv GLEW_GET_FUN(__glewSamplerParameterfv) -#define glSamplerParameteri GLEW_GET_FUN(__glewSamplerParameteri) -#define glSamplerParameteriv GLEW_GET_FUN(__glewSamplerParameteriv) - -#define GLEW_ARB_sampler_objects GLEW_GET_VAR(__GLEW_ARB_sampler_objects) - -#endif /* GL_ARB_sampler_objects */ - -/* ------------------------ GL_ARB_seamless_cube_map ----------------------- */ - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F - -#define GLEW_ARB_seamless_cube_map GLEW_GET_VAR(__GLEW_ARB_seamless_cube_map) - -#endif /* GL_ARB_seamless_cube_map */ - -/* ------------------ GL_ARB_seamless_cubemap_per_texture ------------------ */ - -#ifndef GL_ARB_seamless_cubemap_per_texture -#define GL_ARB_seamless_cubemap_per_texture 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F - -#define GLEW_ARB_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_ARB_seamless_cubemap_per_texture) - -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -/* --------------------- GL_ARB_separate_shader_objects -------------------- */ - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 - -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_ALL_SHADER_BITS 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar ** strings); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint* pipelines); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint* pipelines); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint x, GLuint y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); - -#define glActiveShaderProgram GLEW_GET_FUN(__glewActiveShaderProgram) -#define glBindProgramPipeline GLEW_GET_FUN(__glewBindProgramPipeline) -#define glCreateShaderProgramv GLEW_GET_FUN(__glewCreateShaderProgramv) -#define glDeleteProgramPipelines GLEW_GET_FUN(__glewDeleteProgramPipelines) -#define glGenProgramPipelines GLEW_GET_FUN(__glewGenProgramPipelines) -#define glGetProgramPipelineInfoLog GLEW_GET_FUN(__glewGetProgramPipelineInfoLog) -#define glGetProgramPipelineiv GLEW_GET_FUN(__glewGetProgramPipelineiv) -#define glIsProgramPipeline GLEW_GET_FUN(__glewIsProgramPipeline) -#define glProgramUniform1d GLEW_GET_FUN(__glewProgramUniform1d) -#define glProgramUniform1dv GLEW_GET_FUN(__glewProgramUniform1dv) -#define glProgramUniform1f GLEW_GET_FUN(__glewProgramUniform1f) -#define glProgramUniform1fv GLEW_GET_FUN(__glewProgramUniform1fv) -#define glProgramUniform1i GLEW_GET_FUN(__glewProgramUniform1i) -#define glProgramUniform1iv GLEW_GET_FUN(__glewProgramUniform1iv) -#define glProgramUniform1ui GLEW_GET_FUN(__glewProgramUniform1ui) -#define glProgramUniform1uiv GLEW_GET_FUN(__glewProgramUniform1uiv) -#define glProgramUniform2d GLEW_GET_FUN(__glewProgramUniform2d) -#define glProgramUniform2dv GLEW_GET_FUN(__glewProgramUniform2dv) -#define glProgramUniform2f GLEW_GET_FUN(__glewProgramUniform2f) -#define glProgramUniform2fv GLEW_GET_FUN(__glewProgramUniform2fv) -#define glProgramUniform2i GLEW_GET_FUN(__glewProgramUniform2i) -#define glProgramUniform2iv GLEW_GET_FUN(__glewProgramUniform2iv) -#define glProgramUniform2ui GLEW_GET_FUN(__glewProgramUniform2ui) -#define glProgramUniform2uiv GLEW_GET_FUN(__glewProgramUniform2uiv) -#define glProgramUniform3d GLEW_GET_FUN(__glewProgramUniform3d) -#define glProgramUniform3dv GLEW_GET_FUN(__glewProgramUniform3dv) -#define glProgramUniform3f GLEW_GET_FUN(__glewProgramUniform3f) -#define glProgramUniform3fv GLEW_GET_FUN(__glewProgramUniform3fv) -#define glProgramUniform3i GLEW_GET_FUN(__glewProgramUniform3i) -#define glProgramUniform3iv GLEW_GET_FUN(__glewProgramUniform3iv) -#define glProgramUniform3ui GLEW_GET_FUN(__glewProgramUniform3ui) -#define glProgramUniform3uiv GLEW_GET_FUN(__glewProgramUniform3uiv) -#define glProgramUniform4d GLEW_GET_FUN(__glewProgramUniform4d) -#define glProgramUniform4dv GLEW_GET_FUN(__glewProgramUniform4dv) -#define glProgramUniform4f GLEW_GET_FUN(__glewProgramUniform4f) -#define glProgramUniform4fv GLEW_GET_FUN(__glewProgramUniform4fv) -#define glProgramUniform4i GLEW_GET_FUN(__glewProgramUniform4i) -#define glProgramUniform4iv GLEW_GET_FUN(__glewProgramUniform4iv) -#define glProgramUniform4ui GLEW_GET_FUN(__glewProgramUniform4ui) -#define glProgramUniform4uiv GLEW_GET_FUN(__glewProgramUniform4uiv) -#define glProgramUniformMatrix2dv GLEW_GET_FUN(__glewProgramUniformMatrix2dv) -#define glProgramUniformMatrix2fv GLEW_GET_FUN(__glewProgramUniformMatrix2fv) -#define glProgramUniformMatrix2x3dv GLEW_GET_FUN(__glewProgramUniformMatrix2x3dv) -#define glProgramUniformMatrix2x3fv GLEW_GET_FUN(__glewProgramUniformMatrix2x3fv) -#define glProgramUniformMatrix2x4dv GLEW_GET_FUN(__glewProgramUniformMatrix2x4dv) -#define glProgramUniformMatrix2x4fv GLEW_GET_FUN(__glewProgramUniformMatrix2x4fv) -#define glProgramUniformMatrix3dv GLEW_GET_FUN(__glewProgramUniformMatrix3dv) -#define glProgramUniformMatrix3fv GLEW_GET_FUN(__glewProgramUniformMatrix3fv) -#define glProgramUniformMatrix3x2dv GLEW_GET_FUN(__glewProgramUniformMatrix3x2dv) -#define glProgramUniformMatrix3x2fv GLEW_GET_FUN(__glewProgramUniformMatrix3x2fv) -#define glProgramUniformMatrix3x4dv GLEW_GET_FUN(__glewProgramUniformMatrix3x4dv) -#define glProgramUniformMatrix3x4fv GLEW_GET_FUN(__glewProgramUniformMatrix3x4fv) -#define glProgramUniformMatrix4dv GLEW_GET_FUN(__glewProgramUniformMatrix4dv) -#define glProgramUniformMatrix4fv GLEW_GET_FUN(__glewProgramUniformMatrix4fv) -#define glProgramUniformMatrix4x2dv GLEW_GET_FUN(__glewProgramUniformMatrix4x2dv) -#define glProgramUniformMatrix4x2fv GLEW_GET_FUN(__glewProgramUniformMatrix4x2fv) -#define glProgramUniformMatrix4x3dv GLEW_GET_FUN(__glewProgramUniformMatrix4x3dv) -#define glProgramUniformMatrix4x3fv GLEW_GET_FUN(__glewProgramUniformMatrix4x3fv) -#define glUseProgramStages GLEW_GET_FUN(__glewUseProgramStages) -#define glValidateProgramPipeline GLEW_GET_FUN(__glewValidateProgramPipeline) - -#define GLEW_ARB_separate_shader_objects GLEW_GET_VAR(__GLEW_ARB_separate_shader_objects) - -#endif /* GL_ARB_separate_shader_objects */ - -/* --------------------- GL_ARB_shader_atomic_counters --------------------- */ - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 - -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC - -typedef void (GLAPIENTRY * PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); - -#define glGetActiveAtomicCounterBufferiv GLEW_GET_FUN(__glewGetActiveAtomicCounterBufferiv) - -#define GLEW_ARB_shader_atomic_counters GLEW_GET_VAR(__GLEW_ARB_shader_atomic_counters) - -#endif /* GL_ARB_shader_atomic_counters */ - -/* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */ - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 - -#define GLEW_ARB_shader_bit_encoding GLEW_GET_VAR(__GLEW_ARB_shader_bit_encoding) - -#endif /* GL_ARB_shader_bit_encoding */ - -/* --------------------- GL_ARB_shader_draw_parameters --------------------- */ - -#ifndef GL_ARB_shader_draw_parameters -#define GL_ARB_shader_draw_parameters 1 - -#define GLEW_ARB_shader_draw_parameters GLEW_GET_VAR(__GLEW_ARB_shader_draw_parameters) - -#endif /* GL_ARB_shader_draw_parameters */ - -/* ------------------------ GL_ARB_shader_group_vote ----------------------- */ - -#ifndef GL_ARB_shader_group_vote -#define GL_ARB_shader_group_vote 1 - -#define GLEW_ARB_shader_group_vote GLEW_GET_VAR(__GLEW_ARB_shader_group_vote) - -#endif /* GL_ARB_shader_group_vote */ - -/* --------------------- GL_ARB_shader_image_load_store -------------------- */ - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 - -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (GLAPIENTRY * PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); - -#define glBindImageTexture GLEW_GET_FUN(__glewBindImageTexture) -#define glMemoryBarrier GLEW_GET_FUN(__glewMemoryBarrier) - -#define GLEW_ARB_shader_image_load_store GLEW_GET_VAR(__GLEW_ARB_shader_image_load_store) - -#endif /* GL_ARB_shader_image_load_store */ - -/* ------------------------ GL_ARB_shader_image_size ----------------------- */ - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 - -#define GLEW_ARB_shader_image_size GLEW_GET_VAR(__GLEW_ARB_shader_image_size) - -#endif /* GL_ARB_shader_image_size */ - -/* ------------------------- GL_ARB_shader_objects ------------------------- */ - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 - -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 - -typedef char GLcharARB; -typedef unsigned int GLhandleARB; - -typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj); -typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source); -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params); -typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); - -#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB) -#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB) -#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB) -#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB) -#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB) -#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB) -#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB) -#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB) -#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB) -#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB) -#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB) -#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB) -#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB) -#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB) -#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB) -#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB) -#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB) -#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB) -#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB) -#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB) -#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB) -#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB) -#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB) -#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB) -#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB) -#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB) -#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB) -#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB) -#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB) -#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB) -#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB) -#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB) -#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB) -#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB) -#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB) -#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB) -#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB) -#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB) -#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB) - -#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects) - -#endif /* GL_ARB_shader_objects */ - -/* ------------------------ GL_ARB_shader_precision ------------------------ */ - -#ifndef GL_ARB_shader_precision -#define GL_ARB_shader_precision 1 - -#define GLEW_ARB_shader_precision GLEW_GET_VAR(__GLEW_ARB_shader_precision) - -#endif /* GL_ARB_shader_precision */ - -/* ---------------------- GL_ARB_shader_stencil_export --------------------- */ - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 - -#define GLEW_ARB_shader_stencil_export GLEW_GET_VAR(__GLEW_ARB_shader_stencil_export) - -#endif /* GL_ARB_shader_stencil_export */ - -/* ------------------ GL_ARB_shader_storage_buffer_object ------------------ */ - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 - -#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF - -typedef void (GLAPIENTRY * PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); - -#define glShaderStorageBlockBinding GLEW_GET_FUN(__glewShaderStorageBlockBinding) - -#define GLEW_ARB_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_ARB_shader_storage_buffer_object) - -#endif /* GL_ARB_shader_storage_buffer_object */ - -/* ------------------------ GL_ARB_shader_subroutine ----------------------- */ - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 - -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B - -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint* values); -typedef GLuint (GLAPIENTRY * PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint* params); -typedef void (GLAPIENTRY * PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint* indices); - -#define glGetActiveSubroutineName GLEW_GET_FUN(__glewGetActiveSubroutineName) -#define glGetActiveSubroutineUniformName GLEW_GET_FUN(__glewGetActiveSubroutineUniformName) -#define glGetActiveSubroutineUniformiv GLEW_GET_FUN(__glewGetActiveSubroutineUniformiv) -#define glGetProgramStageiv GLEW_GET_FUN(__glewGetProgramStageiv) -#define glGetSubroutineIndex GLEW_GET_FUN(__glewGetSubroutineIndex) -#define glGetSubroutineUniformLocation GLEW_GET_FUN(__glewGetSubroutineUniformLocation) -#define glGetUniformSubroutineuiv GLEW_GET_FUN(__glewGetUniformSubroutineuiv) -#define glUniformSubroutinesuiv GLEW_GET_FUN(__glewUniformSubroutinesuiv) - -#define GLEW_ARB_shader_subroutine GLEW_GET_VAR(__GLEW_ARB_shader_subroutine) - -#endif /* GL_ARB_shader_subroutine */ - -/* ----------------------- GL_ARB_shader_texture_lod ----------------------- */ - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 - -#define GLEW_ARB_shader_texture_lod GLEW_GET_VAR(__GLEW_ARB_shader_texture_lod) - -#endif /* GL_ARB_shader_texture_lod */ - -/* ---------------------- GL_ARB_shading_language_100 ---------------------- */ - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 - -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C - -#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100) - -#endif /* GL_ARB_shading_language_100 */ - -/* -------------------- GL_ARB_shading_language_420pack -------------------- */ - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 - -#define GLEW_ARB_shading_language_420pack GLEW_GET_VAR(__GLEW_ARB_shading_language_420pack) - -#endif /* GL_ARB_shading_language_420pack */ - -/* -------------------- GL_ARB_shading_language_include -------------------- */ - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 - -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA - -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* const *path, const GLint *length); -typedef void (GLAPIENTRY * PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar* name, GLenum pname, GLint *params); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar* name, GLint stringlen, const GLchar *string); - -#define glCompileShaderIncludeARB GLEW_GET_FUN(__glewCompileShaderIncludeARB) -#define glDeleteNamedStringARB GLEW_GET_FUN(__glewDeleteNamedStringARB) -#define glGetNamedStringARB GLEW_GET_FUN(__glewGetNamedStringARB) -#define glGetNamedStringivARB GLEW_GET_FUN(__glewGetNamedStringivARB) -#define glIsNamedStringARB GLEW_GET_FUN(__glewIsNamedStringARB) -#define glNamedStringARB GLEW_GET_FUN(__glewNamedStringARB) - -#define GLEW_ARB_shading_language_include GLEW_GET_VAR(__GLEW_ARB_shading_language_include) - -#endif /* GL_ARB_shading_language_include */ - -/* -------------------- GL_ARB_shading_language_packing -------------------- */ - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 - -#define GLEW_ARB_shading_language_packing GLEW_GET_VAR(__GLEW_ARB_shading_language_packing) - -#endif /* GL_ARB_shading_language_packing */ - -/* ----------------------------- GL_ARB_shadow ----------------------------- */ - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 - -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E - -#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow) - -#endif /* GL_ARB_shadow */ - -/* ------------------------- GL_ARB_shadow_ambient ------------------------- */ - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 - -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF - -#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient) - -#endif /* GL_ARB_shadow_ambient */ - -/* ------------------------- GL_ARB_sparse_texture ------------------------- */ - -#ifndef GL_ARB_sparse_texture -#define GL_ARB_sparse_texture 1 - -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA - -typedef void (GLAPIENTRY * PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); - -#define glTexPageCommitmentARB GLEW_GET_FUN(__glewTexPageCommitmentARB) -#define glTexturePageCommitmentEXT GLEW_GET_FUN(__glewTexturePageCommitmentEXT) - -#define GLEW_ARB_sparse_texture GLEW_GET_VAR(__GLEW_ARB_sparse_texture) - -#endif /* GL_ARB_sparse_texture */ - -/* ------------------------ GL_ARB_stencil_texturing ----------------------- */ - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 - -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA - -#define GLEW_ARB_stencil_texturing GLEW_GET_VAR(__GLEW_ARB_stencil_texturing) - -#endif /* GL_ARB_stencil_texturing */ - -/* ------------------------------ GL_ARB_sync ------------------------------ */ - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 - -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF - -typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout); -typedef void (GLAPIENTRY * PFNGLDELETESYNCPROC) (GLsync GLsync); -typedef GLsync (GLAPIENTRY * PFNGLFENCESYNCPROC) (GLenum condition,GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETSYNCIVPROC) (GLsync GLsync,GLenum pname,GLsizei bufSize,GLsizei* length, GLint *values); -typedef GLboolean (GLAPIENTRY * PFNGLISSYNCPROC) (GLsync GLsync); -typedef void (GLAPIENTRY * PFNGLWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout); - -#define glClientWaitSync GLEW_GET_FUN(__glewClientWaitSync) -#define glDeleteSync GLEW_GET_FUN(__glewDeleteSync) -#define glFenceSync GLEW_GET_FUN(__glewFenceSync) -#define glGetInteger64v GLEW_GET_FUN(__glewGetInteger64v) -#define glGetSynciv GLEW_GET_FUN(__glewGetSynciv) -#define glIsSync GLEW_GET_FUN(__glewIsSync) -#define glWaitSync GLEW_GET_FUN(__glewWaitSync) - -#define GLEW_ARB_sync GLEW_GET_VAR(__GLEW_ARB_sync) - -#endif /* GL_ARB_sync */ - -/* ----------------------- GL_ARB_tessellation_shader ---------------------- */ - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 - -#define GL_PATCHES 0xE -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A - -typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat* values); -typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); - -#define glPatchParameterfv GLEW_GET_FUN(__glewPatchParameterfv) -#define glPatchParameteri GLEW_GET_FUN(__glewPatchParameteri) - -#define GLEW_ARB_tessellation_shader GLEW_GET_VAR(__GLEW_ARB_tessellation_shader) - -#endif /* GL_ARB_tessellation_shader */ - -/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 - -#define GL_CLAMP_TO_BORDER_ARB 0x812D - -#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp) - -#endif /* GL_ARB_texture_border_clamp */ - -/* ---------------------- GL_ARB_texture_buffer_object --------------------- */ - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 - -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E - -typedef void (GLAPIENTRY * PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); - -#define glTexBufferARB GLEW_GET_FUN(__glewTexBufferARB) - -#define GLEW_ARB_texture_buffer_object GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object) - -#endif /* GL_ARB_texture_buffer_object */ - -/* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */ - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 - -#define GLEW_ARB_texture_buffer_object_rgb32 GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object_rgb32) - -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -/* ---------------------- GL_ARB_texture_buffer_range ---------------------- */ - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 - -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F - -typedef void (GLAPIENTRY * PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); - -#define glTexBufferRange GLEW_GET_FUN(__glewTexBufferRange) -#define glTextureBufferRangeEXT GLEW_GET_FUN(__glewTextureBufferRangeEXT) - -#define GLEW_ARB_texture_buffer_range GLEW_GET_VAR(__GLEW_ARB_texture_buffer_range) - -#endif /* GL_ARB_texture_buffer_range */ - -/* ----------------------- GL_ARB_texture_compression ---------------------- */ - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 - -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 - -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLvoid *img); - -#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) -#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) -#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB) -#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB) -#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB) -#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB) -#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB) - -#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression) - -#endif /* GL_ARB_texture_compression */ - -/* -------------------- GL_ARB_texture_compression_bptc -------------------- */ - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 - -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F - -#define GLEW_ARB_texture_compression_bptc GLEW_GET_VAR(__GLEW_ARB_texture_compression_bptc) - -#endif /* GL_ARB_texture_compression_bptc */ - -/* -------------------- GL_ARB_texture_compression_rgtc -------------------- */ - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 - -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE - -#define GLEW_ARB_texture_compression_rgtc GLEW_GET_VAR(__GLEW_ARB_texture_compression_rgtc) - -#endif /* GL_ARB_texture_compression_rgtc */ - -/* ------------------------ GL_ARB_texture_cube_map ------------------------ */ - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 - -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C - -#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map) - -#endif /* GL_ARB_texture_cube_map */ - -/* --------------------- GL_ARB_texture_cube_map_array --------------------- */ - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 - -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F - -#define GLEW_ARB_texture_cube_map_array GLEW_GET_VAR(__GLEW_ARB_texture_cube_map_array) - -#endif /* GL_ARB_texture_cube_map_array */ - -/* ------------------------- GL_ARB_texture_env_add ------------------------ */ - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 - -#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add) - -#endif /* GL_ARB_texture_env_add */ - -/* ----------------------- GL_ARB_texture_env_combine ---------------------- */ - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 - -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A - -#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine) - -#endif /* GL_ARB_texture_env_combine */ - -/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 - -#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar) - -#endif /* GL_ARB_texture_env_crossbar */ - -/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 - -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF - -#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3) - -#endif /* GL_ARB_texture_env_dot3 */ - -/* -------------------------- GL_ARB_texture_float ------------------------- */ - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 - -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 - -#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float) - -#endif /* GL_ARB_texture_float */ - -/* ------------------------- GL_ARB_texture_gather ------------------------- */ - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 - -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F - -#define GLEW_ARB_texture_gather GLEW_GET_VAR(__GLEW_ARB_texture_gather) - -#endif /* GL_ARB_texture_gather */ - -/* ------------------ GL_ARB_texture_mirror_clamp_to_edge ------------------ */ - -#ifndef GL_ARB_texture_mirror_clamp_to_edge -#define GL_ARB_texture_mirror_clamp_to_edge 1 - -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 - -#define GLEW_ARB_texture_mirror_clamp_to_edge GLEW_GET_VAR(__GLEW_ARB_texture_mirror_clamp_to_edge) - -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 - -#define GL_MIRRORED_REPEAT_ARB 0x8370 - -#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat) - -#endif /* GL_ARB_texture_mirrored_repeat */ - -/* ----------------------- GL_ARB_texture_multisample ---------------------- */ - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 - -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 - -typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat* val); -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); - -#define glGetMultisamplefv GLEW_GET_FUN(__glewGetMultisamplefv) -#define glSampleMaski GLEW_GET_FUN(__glewSampleMaski) -#define glTexImage2DMultisample GLEW_GET_FUN(__glewTexImage2DMultisample) -#define glTexImage3DMultisample GLEW_GET_FUN(__glewTexImage3DMultisample) - -#define GLEW_ARB_texture_multisample GLEW_GET_VAR(__GLEW_ARB_texture_multisample) - -#endif /* GL_ARB_texture_multisample */ - -/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 - -#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two) - -#endif /* GL_ARB_texture_non_power_of_two */ - -/* ---------------------- GL_ARB_texture_query_levels ---------------------- */ - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 - -#define GLEW_ARB_texture_query_levels GLEW_GET_VAR(__GLEW_ARB_texture_query_levels) - -#endif /* GL_ARB_texture_query_levels */ - -/* ------------------------ GL_ARB_texture_query_lod ----------------------- */ - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 - -#define GLEW_ARB_texture_query_lod GLEW_GET_VAR(__GLEW_ARB_texture_query_lod) - -#endif /* GL_ARB_texture_query_lod */ - -/* ------------------------ GL_ARB_texture_rectangle ----------------------- */ - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 - -#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle) - -#endif /* GL_ARB_texture_rectangle */ - -/* --------------------------- GL_ARB_texture_rg --------------------------- */ - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 - -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C - -#define GLEW_ARB_texture_rg GLEW_GET_VAR(__GLEW_ARB_texture_rg) - -#endif /* GL_ARB_texture_rg */ - -/* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */ - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 - -#define GL_RGB10_A2UI 0x906F - -#define GLEW_ARB_texture_rgb10_a2ui GLEW_GET_VAR(__GLEW_ARB_texture_rgb10_a2ui) - -#endif /* GL_ARB_texture_rgb10_a2ui */ - -/* ------------------------ GL_ARB_texture_stencil8 ------------------------ */ - -#ifndef GL_ARB_texture_stencil8 -#define GL_ARB_texture_stencil8 1 - -#define GL_STENCIL_INDEX 0x1901 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GLEW_ARB_texture_stencil8 GLEW_GET_VAR(__GLEW_ARB_texture_stencil8) - -#endif /* GL_ARB_texture_stencil8 */ - -/* ------------------------- GL_ARB_texture_storage ------------------------ */ - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 - -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); - -#define glTexStorage1D GLEW_GET_FUN(__glewTexStorage1D) -#define glTexStorage2D GLEW_GET_FUN(__glewTexStorage2D) -#define glTexStorage3D GLEW_GET_FUN(__glewTexStorage3D) -#define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT) -#define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT) -#define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT) - -#define GLEW_ARB_texture_storage GLEW_GET_VAR(__GLEW_ARB_texture_storage) - -#endif /* GL_ARB_texture_storage */ - -/* ------------------- GL_ARB_texture_storage_multisample ------------------ */ - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); - -#define glTexStorage2DMultisample GLEW_GET_FUN(__glewTexStorage2DMultisample) -#define glTexStorage3DMultisample GLEW_GET_FUN(__glewTexStorage3DMultisample) -#define glTextureStorage2DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage2DMultisampleEXT) -#define glTextureStorage3DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage3DMultisampleEXT) - -#define GLEW_ARB_texture_storage_multisample GLEW_GET_VAR(__GLEW_ARB_texture_storage_multisample) - -#endif /* GL_ARB_texture_storage_multisample */ - -/* ------------------------- GL_ARB_texture_swizzle ------------------------ */ - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 - -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 - -#define GLEW_ARB_texture_swizzle GLEW_GET_VAR(__GLEW_ARB_texture_swizzle) - -#endif /* GL_ARB_texture_swizzle */ - -/* -------------------------- GL_ARB_texture_view -------------------------- */ - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 - -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - -typedef void (GLAPIENTRY * PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); - -#define glTextureView GLEW_GET_FUN(__glewTextureView) - -#define GLEW_ARB_texture_view GLEW_GET_VAR(__GLEW_ARB_texture_view) - -#endif /* GL_ARB_texture_view */ - -/* --------------------------- GL_ARB_timer_query -------------------------- */ - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 - -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 - -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64* params); -typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); - -#define glGetQueryObjecti64v GLEW_GET_FUN(__glewGetQueryObjecti64v) -#define glGetQueryObjectui64v GLEW_GET_FUN(__glewGetQueryObjectui64v) -#define glQueryCounter GLEW_GET_FUN(__glewQueryCounter) - -#define GLEW_ARB_timer_query GLEW_GET_VAR(__GLEW_ARB_timer_query) - -#endif /* GL_ARB_timer_query */ - -/* ----------------------- GL_ARB_transform_feedback2 ---------------------- */ - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 - -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 - -typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint* ids); -typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); - -#define glBindTransformFeedback GLEW_GET_FUN(__glewBindTransformFeedback) -#define glDeleteTransformFeedbacks GLEW_GET_FUN(__glewDeleteTransformFeedbacks) -#define glDrawTransformFeedback GLEW_GET_FUN(__glewDrawTransformFeedback) -#define glGenTransformFeedbacks GLEW_GET_FUN(__glewGenTransformFeedbacks) -#define glIsTransformFeedback GLEW_GET_FUN(__glewIsTransformFeedback) -#define glPauseTransformFeedback GLEW_GET_FUN(__glewPauseTransformFeedback) -#define glResumeTransformFeedback GLEW_GET_FUN(__glewResumeTransformFeedback) - -#define GLEW_ARB_transform_feedback2 GLEW_GET_VAR(__GLEW_ARB_transform_feedback2) - -#endif /* GL_ARB_transform_feedback2 */ - -/* ----------------------- GL_ARB_transform_feedback3 ---------------------- */ - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 - -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (GLAPIENTRY * PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); - -#define glBeginQueryIndexed GLEW_GET_FUN(__glewBeginQueryIndexed) -#define glDrawTransformFeedbackStream GLEW_GET_FUN(__glewDrawTransformFeedbackStream) -#define glEndQueryIndexed GLEW_GET_FUN(__glewEndQueryIndexed) -#define glGetQueryIndexediv GLEW_GET_FUN(__glewGetQueryIndexediv) - -#define GLEW_ARB_transform_feedback3 GLEW_GET_VAR(__GLEW_ARB_transform_feedback3) - -#endif /* GL_ARB_transform_feedback3 */ - -/* ------------------ GL_ARB_transform_feedback_instanced ------------------ */ - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 - -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei primcount); - -#define glDrawTransformFeedbackInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackInstanced) -#define glDrawTransformFeedbackStreamInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackStreamInstanced) - -#define GLEW_ARB_transform_feedback_instanced GLEW_GET_VAR(__GLEW_ARB_transform_feedback_instanced) - -#endif /* GL_ARB_transform_feedback_instanced */ - -/* ------------------------ GL_ARB_transpose_matrix ------------------------ */ - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 - -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 - -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); - -#define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB) -#define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB) -#define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB) -#define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB) - -#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix) - -#endif /* GL_ARB_transpose_matrix */ - -/* ---------------------- GL_ARB_uniform_buffer_object --------------------- */ - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 - -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint* data); -typedef GLuint (GLAPIENTRY * PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar* uniformBlockName); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices); -typedef void (GLAPIENTRY * PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); - -#define glBindBufferBase GLEW_GET_FUN(__glewBindBufferBase) -#define glBindBufferRange GLEW_GET_FUN(__glewBindBufferRange) -#define glGetActiveUniformBlockName GLEW_GET_FUN(__glewGetActiveUniformBlockName) -#define glGetActiveUniformBlockiv GLEW_GET_FUN(__glewGetActiveUniformBlockiv) -#define glGetActiveUniformName GLEW_GET_FUN(__glewGetActiveUniformName) -#define glGetActiveUniformsiv GLEW_GET_FUN(__glewGetActiveUniformsiv) -#define glGetIntegeri_v GLEW_GET_FUN(__glewGetIntegeri_v) -#define glGetUniformBlockIndex GLEW_GET_FUN(__glewGetUniformBlockIndex) -#define glGetUniformIndices GLEW_GET_FUN(__glewGetUniformIndices) -#define glUniformBlockBinding GLEW_GET_FUN(__glewUniformBlockBinding) - -#define GLEW_ARB_uniform_buffer_object GLEW_GET_VAR(__GLEW_ARB_uniform_buffer_object) - -#endif /* GL_ARB_uniform_buffer_object */ - -/* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */ - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 - -#define GL_BGRA 0x80E1 - -#define GLEW_ARB_vertex_array_bgra GLEW_GET_VAR(__GLEW_ARB_vertex_array_bgra) - -#endif /* GL_ARB_vertex_array_bgra */ - -/* ----------------------- GL_ARB_vertex_array_object ---------------------- */ - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 - -#define GL_VERTEX_ARRAY_BINDING 0x85B5 - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); -typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYPROC) (GLuint array); - -#define glBindVertexArray GLEW_GET_FUN(__glewBindVertexArray) -#define glDeleteVertexArrays GLEW_GET_FUN(__glewDeleteVertexArrays) -#define glGenVertexArrays GLEW_GET_FUN(__glewGenVertexArrays) -#define glIsVertexArray GLEW_GET_FUN(__glewIsVertexArray) - -#define GLEW_ARB_vertex_array_object GLEW_GET_VAR(__GLEW_ARB_vertex_array_object) - -#endif /* GL_ARB_vertex_array_object */ - -/* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */ - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); - -#define glGetVertexAttribLdv GLEW_GET_FUN(__glewGetVertexAttribLdv) -#define glVertexAttribL1d GLEW_GET_FUN(__glewVertexAttribL1d) -#define glVertexAttribL1dv GLEW_GET_FUN(__glewVertexAttribL1dv) -#define glVertexAttribL2d GLEW_GET_FUN(__glewVertexAttribL2d) -#define glVertexAttribL2dv GLEW_GET_FUN(__glewVertexAttribL2dv) -#define glVertexAttribL3d GLEW_GET_FUN(__glewVertexAttribL3d) -#define glVertexAttribL3dv GLEW_GET_FUN(__glewVertexAttribL3dv) -#define glVertexAttribL4d GLEW_GET_FUN(__glewVertexAttribL4d) -#define glVertexAttribL4dv GLEW_GET_FUN(__glewVertexAttribL4dv) -#define glVertexAttribLPointer GLEW_GET_FUN(__glewVertexAttribLPointer) - -#define GLEW_ARB_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_64bit) - -#endif /* GL_ARB_vertex_attrib_64bit */ - -/* ---------------------- GL_ARB_vertex_attrib_binding --------------------- */ - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 - -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); - -#define glBindVertexBuffer GLEW_GET_FUN(__glewBindVertexBuffer) -#define glVertexAttribBinding GLEW_GET_FUN(__glewVertexAttribBinding) -#define glVertexAttribFormat GLEW_GET_FUN(__glewVertexAttribFormat) -#define glVertexAttribIFormat GLEW_GET_FUN(__glewVertexAttribIFormat) -#define glVertexAttribLFormat GLEW_GET_FUN(__glewVertexAttribLFormat) -#define glVertexBindingDivisor GLEW_GET_FUN(__glewVertexBindingDivisor) - -#define GLEW_ARB_vertex_attrib_binding GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_binding) - -#endif /* GL_ARB_vertex_attrib_binding */ - -/* -------------------------- GL_ARB_vertex_blend -------------------------- */ - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 - -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F - -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count); -typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights); - -#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB) -#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB) -#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB) -#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB) -#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB) -#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB) -#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB) -#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB) -#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB) -#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB) - -#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend) - -#endif /* GL_ARB_vertex_blend */ - -/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 - -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA - -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target); - -#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB) -#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB) -#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB) -#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB) -#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB) -#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB) -#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB) -#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB) -#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB) -#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB) -#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB) - -#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object) - -#endif /* GL_ARB_vertex_buffer_object */ - -/* ------------------------- GL_ARB_vertex_program ------------------------- */ - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 - -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF - -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); - -#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) -#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) -#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB) -#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB) -#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB) -#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB) -#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB) -#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB) -#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB) -#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB) -#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB) -#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB) -#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB) -#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB) -#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB) -#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB) -#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB) -#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB) -#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB) -#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB) -#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB) -#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB) -#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB) -#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB) -#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB) -#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB) -#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB) -#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB) -#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB) -#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB) -#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB) -#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB) -#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB) -#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB) -#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB) -#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB) -#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB) -#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB) -#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB) -#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB) -#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB) -#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB) -#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB) -#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB) -#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB) -#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB) -#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB) -#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB) -#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB) -#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB) -#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB) -#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB) -#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB) -#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB) -#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB) -#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB) -#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB) -#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB) -#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB) -#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB) -#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB) -#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB) - -#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program) - -#endif /* GL_ARB_vertex_program */ - -/* -------------------------- GL_ARB_vertex_shader ------------------------- */ - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 - -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A - -typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name); -typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); - -#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB) -#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB) -#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB) - -#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader) - -#endif /* GL_ARB_vertex_shader */ - -/* ------------------- GL_ARB_vertex_type_10f_11f_11f_rev ------------------ */ - -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev -#define GL_ARB_vertex_type_10f_11f_11f_rev 1 - -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B - -#define GLEW_ARB_vertex_type_10f_11f_11f_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_10f_11f_11f_rev) - -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -/* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 - -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_INT_2_10_10_10_REV 0x8D9F - -typedef void (GLAPIENTRY * PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint* value); - -#define glColorP3ui GLEW_GET_FUN(__glewColorP3ui) -#define glColorP3uiv GLEW_GET_FUN(__glewColorP3uiv) -#define glColorP4ui GLEW_GET_FUN(__glewColorP4ui) -#define glColorP4uiv GLEW_GET_FUN(__glewColorP4uiv) -#define glMultiTexCoordP1ui GLEW_GET_FUN(__glewMultiTexCoordP1ui) -#define glMultiTexCoordP1uiv GLEW_GET_FUN(__glewMultiTexCoordP1uiv) -#define glMultiTexCoordP2ui GLEW_GET_FUN(__glewMultiTexCoordP2ui) -#define glMultiTexCoordP2uiv GLEW_GET_FUN(__glewMultiTexCoordP2uiv) -#define glMultiTexCoordP3ui GLEW_GET_FUN(__glewMultiTexCoordP3ui) -#define glMultiTexCoordP3uiv GLEW_GET_FUN(__glewMultiTexCoordP3uiv) -#define glMultiTexCoordP4ui GLEW_GET_FUN(__glewMultiTexCoordP4ui) -#define glMultiTexCoordP4uiv GLEW_GET_FUN(__glewMultiTexCoordP4uiv) -#define glNormalP3ui GLEW_GET_FUN(__glewNormalP3ui) -#define glNormalP3uiv GLEW_GET_FUN(__glewNormalP3uiv) -#define glSecondaryColorP3ui GLEW_GET_FUN(__glewSecondaryColorP3ui) -#define glSecondaryColorP3uiv GLEW_GET_FUN(__glewSecondaryColorP3uiv) -#define glTexCoordP1ui GLEW_GET_FUN(__glewTexCoordP1ui) -#define glTexCoordP1uiv GLEW_GET_FUN(__glewTexCoordP1uiv) -#define glTexCoordP2ui GLEW_GET_FUN(__glewTexCoordP2ui) -#define glTexCoordP2uiv GLEW_GET_FUN(__glewTexCoordP2uiv) -#define glTexCoordP3ui GLEW_GET_FUN(__glewTexCoordP3ui) -#define glTexCoordP3uiv GLEW_GET_FUN(__glewTexCoordP3uiv) -#define glTexCoordP4ui GLEW_GET_FUN(__glewTexCoordP4ui) -#define glTexCoordP4uiv GLEW_GET_FUN(__glewTexCoordP4uiv) -#define glVertexAttribP1ui GLEW_GET_FUN(__glewVertexAttribP1ui) -#define glVertexAttribP1uiv GLEW_GET_FUN(__glewVertexAttribP1uiv) -#define glVertexAttribP2ui GLEW_GET_FUN(__glewVertexAttribP2ui) -#define glVertexAttribP2uiv GLEW_GET_FUN(__glewVertexAttribP2uiv) -#define glVertexAttribP3ui GLEW_GET_FUN(__glewVertexAttribP3ui) -#define glVertexAttribP3uiv GLEW_GET_FUN(__glewVertexAttribP3uiv) -#define glVertexAttribP4ui GLEW_GET_FUN(__glewVertexAttribP4ui) -#define glVertexAttribP4uiv GLEW_GET_FUN(__glewVertexAttribP4uiv) -#define glVertexP2ui GLEW_GET_FUN(__glewVertexP2ui) -#define glVertexP2uiv GLEW_GET_FUN(__glewVertexP2uiv) -#define glVertexP3ui GLEW_GET_FUN(__glewVertexP3ui) -#define glVertexP3uiv GLEW_GET_FUN(__glewVertexP3uiv) -#define glVertexP4ui GLEW_GET_FUN(__glewVertexP4ui) -#define glVertexP4uiv GLEW_GET_FUN(__glewVertexP4uiv) - -#define GLEW_ARB_vertex_type_2_10_10_10_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_2_10_10_10_rev) - -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -/* ------------------------- GL_ARB_viewport_array ------------------------- */ - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 - -#define GL_DEPTH_RANGE 0x0B70 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F - -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd * v); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble* data); -typedef void (GLAPIENTRY * PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat* data); -typedef void (GLAPIENTRY * PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint * v); -typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint * v); -typedef void (GLAPIENTRY * PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat * v); -typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat * v); - -#define glDepthRangeArrayv GLEW_GET_FUN(__glewDepthRangeArrayv) -#define glDepthRangeIndexed GLEW_GET_FUN(__glewDepthRangeIndexed) -#define glGetDoublei_v GLEW_GET_FUN(__glewGetDoublei_v) -#define glGetFloati_v GLEW_GET_FUN(__glewGetFloati_v) -#define glScissorArrayv GLEW_GET_FUN(__glewScissorArrayv) -#define glScissorIndexed GLEW_GET_FUN(__glewScissorIndexed) -#define glScissorIndexedv GLEW_GET_FUN(__glewScissorIndexedv) -#define glViewportArrayv GLEW_GET_FUN(__glewViewportArrayv) -#define glViewportIndexedf GLEW_GET_FUN(__glewViewportIndexedf) -#define glViewportIndexedfv GLEW_GET_FUN(__glewViewportIndexedfv) - -#define GLEW_ARB_viewport_array GLEW_GET_VAR(__GLEW_ARB_viewport_array) - -#endif /* GL_ARB_viewport_array */ - -/* --------------------------- GL_ARB_window_pos --------------------------- */ - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 - -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p); - -#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB) -#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB) -#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB) -#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB) -#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB) -#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB) -#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB) -#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB) -#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB) -#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB) -#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB) -#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB) -#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB) -#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB) -#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB) -#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB) - -#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos) - -#endif /* GL_ARB_window_pos */ - -/* ------------------------- GL_ATIX_point_sprites ------------------------- */ - -#ifndef GL_ATIX_point_sprites -#define GL_ATIX_point_sprites 1 - -#define GL_TEXTURE_POINT_MODE_ATIX 0x60B0 -#define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 -#define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 -#define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 -#define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 -#define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 - -#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites) - -#endif /* GL_ATIX_point_sprites */ - -/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ - -#ifndef GL_ATIX_texture_env_combine3 -#define GL_ATIX_texture_env_combine3 1 - -#define GL_MODULATE_ADD_ATIX 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745 -#define GL_MODULATE_SUBTRACT_ATIX 0x8746 - -#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3) - -#endif /* GL_ATIX_texture_env_combine3 */ - -/* ----------------------- GL_ATIX_texture_env_route ----------------------- */ - -#ifndef GL_ATIX_texture_env_route -#define GL_ATIX_texture_env_route 1 - -#define GL_SECONDARY_COLOR_ATIX 0x8747 -#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 -#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 - -#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route) - -#endif /* GL_ATIX_texture_env_route */ - -/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ - -#ifndef GL_ATIX_vertex_shader_output_point_size -#define GL_ATIX_vertex_shader_output_point_size 1 - -#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E - -#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size) - -#endif /* GL_ATIX_vertex_shader_output_point_size */ - -/* -------------------------- GL_ATI_draw_buffers -------------------------- */ - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 - -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 - -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs); - -#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI) - -#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers) - -#endif /* GL_ATI_draw_buffers */ - -/* -------------------------- GL_ATI_element_array ------------------------- */ - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 - -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); - -#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) -#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) -#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI) - -#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array) - -#endif /* GL_ATI_element_array */ - -/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 - -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C - -typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); - -#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI) -#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI) -#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI) -#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI) - -#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap) - -#endif /* GL_ATI_envmap_bumpmap */ - -/* ------------------------- GL_ATI_fragment_shader ------------------------ */ - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 - -#define GL_RED_BIT_ATI 0x00000001 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B - -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value); - -#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI) -#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI) -#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI) -#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI) -#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI) -#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI) -#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI) -#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI) -#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI) -#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI) -#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI) -#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI) -#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI) -#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI) - -#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader) - -#endif /* GL_ATI_fragment_shader */ - -/* ------------------------ GL_ATI_map_object_buffer ----------------------- */ - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 - -typedef GLvoid * (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); - -#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI) -#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI) - -#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer) - -#endif /* GL_ATI_map_object_buffer */ - -/* ----------------------------- GL_ATI_meminfo ---------------------------- */ - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 - -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD - -#define GLEW_ATI_meminfo GLEW_GET_VAR(__GLEW_ATI_meminfo) - -#endif /* GL_ATI_meminfo */ - -/* -------------------------- GL_ATI_pn_triangles -------------------------- */ - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 - -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - -typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); - -#define glPNTrianglesfATI GLEW_GET_FUN(__glewPNTrianglesfATI) -#define glPNTrianglesiATI GLEW_GET_FUN(__glewPNTrianglesiATI) - -#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles) - -#endif /* GL_ATI_pn_triangles */ - -/* ------------------------ GL_ATI_separate_stencil ------------------------ */ - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 - -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - -typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - -#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI) -#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI) - -#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil) - -#endif /* GL_ATI_separate_stencil */ - -/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ - -#ifndef GL_ATI_shader_texture_lod -#define GL_ATI_shader_texture_lod 1 - -#define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod) - -#endif /* GL_ATI_shader_texture_lod */ - -/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 - -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 - -#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader) - -#endif /* GL_ATI_text_fragment_shader */ - -/* --------------------- GL_ATI_texture_compression_3dc -------------------- */ - -#ifndef GL_ATI_texture_compression_3dc -#define GL_ATI_texture_compression_3dc 1 - -#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 - -#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc) - -#endif /* GL_ATI_texture_compression_3dc */ - -/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 - -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 - -#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3) - -#endif /* GL_ATI_texture_env_combine3 */ - -/* -------------------------- GL_ATI_texture_float ------------------------- */ - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 - -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F - -#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float) - -#endif /* GL_ATI_texture_float */ - -/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 - -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 - -#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once) - -#endif /* GL_ATI_texture_mirror_once */ - -/* ----------------------- GL_ATI_vertex_array_object ---------------------- */ - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 - -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 - -typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); - -#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) -#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI) -#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI) -#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI) -#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI) -#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI) -#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI) -#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI) -#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI) -#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI) -#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI) -#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI) - -#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object) - -#endif /* GL_ATI_vertex_array_object */ - -/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); - -#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI) -#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI) -#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI) - -#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object) - -#endif /* GL_ATI_vertex_attrib_array_object */ - -/* ------------------------- GL_ATI_vertex_streams ------------------------- */ - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 - -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_SOURCE_ATI 0x876C -#define GL_VERTEX_STREAM0_ATI 0x876D -#define GL_VERTEX_STREAM1_ATI 0x876E -#define GL_VERTEX_STREAM2_ATI 0x876F -#define GL_VERTEX_STREAM3_ATI 0x8770 -#define GL_VERTEX_STREAM4_ATI 0x8771 -#define GL_VERTEX_STREAM5_ATI 0x8772 -#define GL_VERTEX_STREAM6_ATI 0x8773 -#define GL_VERTEX_STREAM7_ATI 0x8774 - -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); - -#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI) -#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI) -#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI) -#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI) -#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI) -#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI) -#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI) -#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI) -#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI) -#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI) -#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI) -#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI) -#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI) -#define glVertexStream1dATI GLEW_GET_FUN(__glewVertexStream1dATI) -#define glVertexStream1dvATI GLEW_GET_FUN(__glewVertexStream1dvATI) -#define glVertexStream1fATI GLEW_GET_FUN(__glewVertexStream1fATI) -#define glVertexStream1fvATI GLEW_GET_FUN(__glewVertexStream1fvATI) -#define glVertexStream1iATI GLEW_GET_FUN(__glewVertexStream1iATI) -#define glVertexStream1ivATI GLEW_GET_FUN(__glewVertexStream1ivATI) -#define glVertexStream1sATI GLEW_GET_FUN(__glewVertexStream1sATI) -#define glVertexStream1svATI GLEW_GET_FUN(__glewVertexStream1svATI) -#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI) -#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI) -#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI) -#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI) -#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI) -#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI) -#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI) -#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI) -#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI) -#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI) -#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI) -#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI) -#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI) -#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI) -#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI) -#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI) -#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI) -#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI) -#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI) -#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI) -#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI) -#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI) -#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI) -#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI) - -#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams) - -#endif /* GL_ATI_vertex_streams */ - -/* --------------------------- GL_EXT_422_pixels --------------------------- */ - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 - -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF - -#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels) - -#endif /* GL_EXT_422_pixels */ - -/* ---------------------------- GL_EXT_Cg_shader --------------------------- */ - -#ifndef GL_EXT_Cg_shader -#define GL_EXT_Cg_shader 1 - -#define GL_CG_VERTEX_SHADER_EXT 0x890E -#define GL_CG_FRAGMENT_SHADER_EXT 0x890F - -#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader) - -#endif /* GL_EXT_Cg_shader */ - -/* ------------------------------ GL_EXT_abgr ------------------------------ */ - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 - -#define GL_ABGR_EXT 0x8000 - -#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr) - -#endif /* GL_EXT_abgr */ - -/* ------------------------------ GL_EXT_bgra ------------------------------ */ - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 - -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 - -#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra) - -#endif /* GL_EXT_bgra */ - -/* ------------------------ GL_EXT_bindable_uniform ------------------------ */ - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 - -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -typedef void (GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); - -#define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT) -#define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT) -#define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT) - -#define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform) - -#endif /* GL_EXT_bindable_uniform */ - -/* --------------------------- GL_EXT_blend_color -------------------------- */ - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 - -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 - -typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - -#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT) - -#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color) - -#endif /* GL_EXT_blend_color */ - -/* --------------------- GL_EXT_blend_equation_separate -------------------- */ - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 - -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); - -#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT) - -#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate) - -#endif /* GL_EXT_blend_equation_separate */ - -/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 - -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB - -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - -#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT) - -#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate) - -#endif /* GL_EXT_blend_func_separate */ - -/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 - -#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op) - -#endif /* GL_EXT_blend_logic_op */ - -/* -------------------------- GL_EXT_blend_minmax -------------------------- */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 - -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); - -#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT) - -#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax) - -#endif /* GL_EXT_blend_minmax */ - -/* ------------------------- GL_EXT_blend_subtract ------------------------- */ - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 - -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B - -#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract) - -#endif /* GL_EXT_blend_subtract */ - -/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 - -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 - -#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint) - -#endif /* GL_EXT_clip_volume_hint */ - -/* ------------------------------ GL_EXT_cmyka ----------------------------- */ - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 - -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F - -#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka) - -#endif /* GL_EXT_cmyka */ - -/* ------------------------- GL_EXT_color_subtable ------------------------- */ - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 - -typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - -#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) -#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT) - -#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable) - -#endif /* GL_EXT_color_subtable */ - -/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 - -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 - -typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); - -#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT) -#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT) - -#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array) - -#endif /* GL_EXT_compiled_vertex_array */ - -/* --------------------------- GL_EXT_convolution -------------------------- */ - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 - -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 - -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - -#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) -#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) -#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT) -#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT) -#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT) -#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT) -#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT) -#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT) -#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT) -#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT) -#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT) -#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT) -#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT) - -#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution) - -#endif /* GL_EXT_convolution */ - -/* ------------------------ GL_EXT_coordinate_frame ------------------------ */ - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 - -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 - -typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); - -#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) -#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) - -#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame) - -#endif /* GL_EXT_coordinate_frame */ - -/* -------------------------- GL_EXT_copy_texture -------------------------- */ - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 - -typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - -#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT) -#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT) -#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT) -#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT) -#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT) - -#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture) - -#endif /* GL_EXT_copy_texture */ - -/* --------------------------- GL_EXT_cull_vertex -------------------------- */ - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 - -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC - -typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); - -#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT) -#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT) - -#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex) - -#endif /* GL_EXT_cull_vertex */ - -/* -------------------------- GL_EXT_debug_marker -------------------------- */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 - -typedef void (GLAPIENTRY * PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar* marker); -typedef void (GLAPIENTRY * PFNGLPOPGROUPMARKEREXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar* marker); - -#define glInsertEventMarkerEXT GLEW_GET_FUN(__glewInsertEventMarkerEXT) -#define glPopGroupMarkerEXT GLEW_GET_FUN(__glewPopGroupMarkerEXT) -#define glPushGroupMarkerEXT GLEW_GET_FUN(__glewPushGroupMarkerEXT) - -#define GLEW_EXT_debug_marker GLEW_GET_VAR(__GLEW_EXT_debug_marker) - -#endif /* GL_EXT_debug_marker */ - -/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 - -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 - -typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); - -#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT) - -#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test) - -#endif /* GL_EXT_depth_bounds_test */ - -/* ----------------------- GL_EXT_direct_state_access ---------------------- */ - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 - -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F - -typedef void (GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum* bufs); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void** params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLvoid** param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, GLvoid** param); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GLAPIENTRY * PFNGLMATRIXFRUSTUMEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXORTHOEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); -typedef void (GLAPIENTRY * PFNGLMATRIXPOPEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXPUSHEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXROTATEDEXTPROC) (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXROTATEFEXTPROC) (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMATRIXSCALEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* param); -typedef void (GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat* param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* param); -typedef void (GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); - -#define glBindMultiTextureEXT GLEW_GET_FUN(__glewBindMultiTextureEXT) -#define glCheckNamedFramebufferStatusEXT GLEW_GET_FUN(__glewCheckNamedFramebufferStatusEXT) -#define glClientAttribDefaultEXT GLEW_GET_FUN(__glewClientAttribDefaultEXT) -#define glCompressedMultiTexImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage1DEXT) -#define glCompressedMultiTexImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage2DEXT) -#define glCompressedMultiTexImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage3DEXT) -#define glCompressedMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage1DEXT) -#define glCompressedMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage2DEXT) -#define glCompressedMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage3DEXT) -#define glCompressedTextureImage1DEXT GLEW_GET_FUN(__glewCompressedTextureImage1DEXT) -#define glCompressedTextureImage2DEXT GLEW_GET_FUN(__glewCompressedTextureImage2DEXT) -#define glCompressedTextureImage3DEXT GLEW_GET_FUN(__glewCompressedTextureImage3DEXT) -#define glCompressedTextureSubImage1DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage1DEXT) -#define glCompressedTextureSubImage2DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage2DEXT) -#define glCompressedTextureSubImage3DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage3DEXT) -#define glCopyMultiTexImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexImage1DEXT) -#define glCopyMultiTexImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexImage2DEXT) -#define glCopyMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage1DEXT) -#define glCopyMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage2DEXT) -#define glCopyMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage3DEXT) -#define glCopyTextureImage1DEXT GLEW_GET_FUN(__glewCopyTextureImage1DEXT) -#define glCopyTextureImage2DEXT GLEW_GET_FUN(__glewCopyTextureImage2DEXT) -#define glCopyTextureSubImage1DEXT GLEW_GET_FUN(__glewCopyTextureSubImage1DEXT) -#define glCopyTextureSubImage2DEXT GLEW_GET_FUN(__glewCopyTextureSubImage2DEXT) -#define glCopyTextureSubImage3DEXT GLEW_GET_FUN(__glewCopyTextureSubImage3DEXT) -#define glDisableClientStateIndexedEXT GLEW_GET_FUN(__glewDisableClientStateIndexedEXT) -#define glDisableClientStateiEXT GLEW_GET_FUN(__glewDisableClientStateiEXT) -#define glDisableVertexArrayAttribEXT GLEW_GET_FUN(__glewDisableVertexArrayAttribEXT) -#define glDisableVertexArrayEXT GLEW_GET_FUN(__glewDisableVertexArrayEXT) -#define glEnableClientStateIndexedEXT GLEW_GET_FUN(__glewEnableClientStateIndexedEXT) -#define glEnableClientStateiEXT GLEW_GET_FUN(__glewEnableClientStateiEXT) -#define glEnableVertexArrayAttribEXT GLEW_GET_FUN(__glewEnableVertexArrayAttribEXT) -#define glEnableVertexArrayEXT GLEW_GET_FUN(__glewEnableVertexArrayEXT) -#define glFlushMappedNamedBufferRangeEXT GLEW_GET_FUN(__glewFlushMappedNamedBufferRangeEXT) -#define glFramebufferDrawBufferEXT GLEW_GET_FUN(__glewFramebufferDrawBufferEXT) -#define glFramebufferDrawBuffersEXT GLEW_GET_FUN(__glewFramebufferDrawBuffersEXT) -#define glFramebufferReadBufferEXT GLEW_GET_FUN(__glewFramebufferReadBufferEXT) -#define glGenerateMultiTexMipmapEXT GLEW_GET_FUN(__glewGenerateMultiTexMipmapEXT) -#define glGenerateTextureMipmapEXT GLEW_GET_FUN(__glewGenerateTextureMipmapEXT) -#define glGetCompressedMultiTexImageEXT GLEW_GET_FUN(__glewGetCompressedMultiTexImageEXT) -#define glGetCompressedTextureImageEXT GLEW_GET_FUN(__glewGetCompressedTextureImageEXT) -#define glGetDoubleIndexedvEXT GLEW_GET_FUN(__glewGetDoubleIndexedvEXT) -#define glGetDoublei_vEXT GLEW_GET_FUN(__glewGetDoublei_vEXT) -#define glGetFloatIndexedvEXT GLEW_GET_FUN(__glewGetFloatIndexedvEXT) -#define glGetFloati_vEXT GLEW_GET_FUN(__glewGetFloati_vEXT) -#define glGetFramebufferParameterivEXT GLEW_GET_FUN(__glewGetFramebufferParameterivEXT) -#define glGetMultiTexEnvfvEXT GLEW_GET_FUN(__glewGetMultiTexEnvfvEXT) -#define glGetMultiTexEnvivEXT GLEW_GET_FUN(__glewGetMultiTexEnvivEXT) -#define glGetMultiTexGendvEXT GLEW_GET_FUN(__glewGetMultiTexGendvEXT) -#define glGetMultiTexGenfvEXT GLEW_GET_FUN(__glewGetMultiTexGenfvEXT) -#define glGetMultiTexGenivEXT GLEW_GET_FUN(__glewGetMultiTexGenivEXT) -#define glGetMultiTexImageEXT GLEW_GET_FUN(__glewGetMultiTexImageEXT) -#define glGetMultiTexLevelParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterfvEXT) -#define glGetMultiTexLevelParameterivEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterivEXT) -#define glGetMultiTexParameterIivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIivEXT) -#define glGetMultiTexParameterIuivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIuivEXT) -#define glGetMultiTexParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexParameterfvEXT) -#define glGetMultiTexParameterivEXT GLEW_GET_FUN(__glewGetMultiTexParameterivEXT) -#define glGetNamedBufferParameterivEXT GLEW_GET_FUN(__glewGetNamedBufferParameterivEXT) -#define glGetNamedBufferPointervEXT GLEW_GET_FUN(__glewGetNamedBufferPointervEXT) -#define glGetNamedBufferSubDataEXT GLEW_GET_FUN(__glewGetNamedBufferSubDataEXT) -#define glGetNamedFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferAttachmentParameterivEXT) -#define glGetNamedProgramLocalParameterIivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIivEXT) -#define glGetNamedProgramLocalParameterIuivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIuivEXT) -#define glGetNamedProgramLocalParameterdvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterdvEXT) -#define glGetNamedProgramLocalParameterfvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterfvEXT) -#define glGetNamedProgramStringEXT GLEW_GET_FUN(__glewGetNamedProgramStringEXT) -#define glGetNamedProgramivEXT GLEW_GET_FUN(__glewGetNamedProgramivEXT) -#define glGetNamedRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetNamedRenderbufferParameterivEXT) -#define glGetPointerIndexedvEXT GLEW_GET_FUN(__glewGetPointerIndexedvEXT) -#define glGetPointeri_vEXT GLEW_GET_FUN(__glewGetPointeri_vEXT) -#define glGetTextureImageEXT GLEW_GET_FUN(__glewGetTextureImageEXT) -#define glGetTextureLevelParameterfvEXT GLEW_GET_FUN(__glewGetTextureLevelParameterfvEXT) -#define glGetTextureLevelParameterivEXT GLEW_GET_FUN(__glewGetTextureLevelParameterivEXT) -#define glGetTextureParameterIivEXT GLEW_GET_FUN(__glewGetTextureParameterIivEXT) -#define glGetTextureParameterIuivEXT GLEW_GET_FUN(__glewGetTextureParameterIuivEXT) -#define glGetTextureParameterfvEXT GLEW_GET_FUN(__glewGetTextureParameterfvEXT) -#define glGetTextureParameterivEXT GLEW_GET_FUN(__glewGetTextureParameterivEXT) -#define glGetVertexArrayIntegeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayIntegeri_vEXT) -#define glGetVertexArrayIntegervEXT GLEW_GET_FUN(__glewGetVertexArrayIntegervEXT) -#define glGetVertexArrayPointeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayPointeri_vEXT) -#define glGetVertexArrayPointervEXT GLEW_GET_FUN(__glewGetVertexArrayPointervEXT) -#define glMapNamedBufferEXT GLEW_GET_FUN(__glewMapNamedBufferEXT) -#define glMapNamedBufferRangeEXT GLEW_GET_FUN(__glewMapNamedBufferRangeEXT) -#define glMatrixFrustumEXT GLEW_GET_FUN(__glewMatrixFrustumEXT) -#define glMatrixLoadIdentityEXT GLEW_GET_FUN(__glewMatrixLoadIdentityEXT) -#define glMatrixLoadTransposedEXT GLEW_GET_FUN(__glewMatrixLoadTransposedEXT) -#define glMatrixLoadTransposefEXT GLEW_GET_FUN(__glewMatrixLoadTransposefEXT) -#define glMatrixLoaddEXT GLEW_GET_FUN(__glewMatrixLoaddEXT) -#define glMatrixLoadfEXT GLEW_GET_FUN(__glewMatrixLoadfEXT) -#define glMatrixMultTransposedEXT GLEW_GET_FUN(__glewMatrixMultTransposedEXT) -#define glMatrixMultTransposefEXT GLEW_GET_FUN(__glewMatrixMultTransposefEXT) -#define glMatrixMultdEXT GLEW_GET_FUN(__glewMatrixMultdEXT) -#define glMatrixMultfEXT GLEW_GET_FUN(__glewMatrixMultfEXT) -#define glMatrixOrthoEXT GLEW_GET_FUN(__glewMatrixOrthoEXT) -#define glMatrixPopEXT GLEW_GET_FUN(__glewMatrixPopEXT) -#define glMatrixPushEXT GLEW_GET_FUN(__glewMatrixPushEXT) -#define glMatrixRotatedEXT GLEW_GET_FUN(__glewMatrixRotatedEXT) -#define glMatrixRotatefEXT GLEW_GET_FUN(__glewMatrixRotatefEXT) -#define glMatrixScaledEXT GLEW_GET_FUN(__glewMatrixScaledEXT) -#define glMatrixScalefEXT GLEW_GET_FUN(__glewMatrixScalefEXT) -#define glMatrixTranslatedEXT GLEW_GET_FUN(__glewMatrixTranslatedEXT) -#define glMatrixTranslatefEXT GLEW_GET_FUN(__glewMatrixTranslatefEXT) -#define glMultiTexBufferEXT GLEW_GET_FUN(__glewMultiTexBufferEXT) -#define glMultiTexCoordPointerEXT GLEW_GET_FUN(__glewMultiTexCoordPointerEXT) -#define glMultiTexEnvfEXT GLEW_GET_FUN(__glewMultiTexEnvfEXT) -#define glMultiTexEnvfvEXT GLEW_GET_FUN(__glewMultiTexEnvfvEXT) -#define glMultiTexEnviEXT GLEW_GET_FUN(__glewMultiTexEnviEXT) -#define glMultiTexEnvivEXT GLEW_GET_FUN(__glewMultiTexEnvivEXT) -#define glMultiTexGendEXT GLEW_GET_FUN(__glewMultiTexGendEXT) -#define glMultiTexGendvEXT GLEW_GET_FUN(__glewMultiTexGendvEXT) -#define glMultiTexGenfEXT GLEW_GET_FUN(__glewMultiTexGenfEXT) -#define glMultiTexGenfvEXT GLEW_GET_FUN(__glewMultiTexGenfvEXT) -#define glMultiTexGeniEXT GLEW_GET_FUN(__glewMultiTexGeniEXT) -#define glMultiTexGenivEXT GLEW_GET_FUN(__glewMultiTexGenivEXT) -#define glMultiTexImage1DEXT GLEW_GET_FUN(__glewMultiTexImage1DEXT) -#define glMultiTexImage2DEXT GLEW_GET_FUN(__glewMultiTexImage2DEXT) -#define glMultiTexImage3DEXT GLEW_GET_FUN(__glewMultiTexImage3DEXT) -#define glMultiTexParameterIivEXT GLEW_GET_FUN(__glewMultiTexParameterIivEXT) -#define glMultiTexParameterIuivEXT GLEW_GET_FUN(__glewMultiTexParameterIuivEXT) -#define glMultiTexParameterfEXT GLEW_GET_FUN(__glewMultiTexParameterfEXT) -#define glMultiTexParameterfvEXT GLEW_GET_FUN(__glewMultiTexParameterfvEXT) -#define glMultiTexParameteriEXT GLEW_GET_FUN(__glewMultiTexParameteriEXT) -#define glMultiTexParameterivEXT GLEW_GET_FUN(__glewMultiTexParameterivEXT) -#define glMultiTexRenderbufferEXT GLEW_GET_FUN(__glewMultiTexRenderbufferEXT) -#define glMultiTexSubImage1DEXT GLEW_GET_FUN(__glewMultiTexSubImage1DEXT) -#define glMultiTexSubImage2DEXT GLEW_GET_FUN(__glewMultiTexSubImage2DEXT) -#define glMultiTexSubImage3DEXT GLEW_GET_FUN(__glewMultiTexSubImage3DEXT) -#define glNamedBufferDataEXT GLEW_GET_FUN(__glewNamedBufferDataEXT) -#define glNamedBufferSubDataEXT GLEW_GET_FUN(__glewNamedBufferSubDataEXT) -#define glNamedCopyBufferSubDataEXT GLEW_GET_FUN(__glewNamedCopyBufferSubDataEXT) -#define glNamedFramebufferRenderbufferEXT GLEW_GET_FUN(__glewNamedFramebufferRenderbufferEXT) -#define glNamedFramebufferTexture1DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture1DEXT) -#define glNamedFramebufferTexture2DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture2DEXT) -#define glNamedFramebufferTexture3DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture3DEXT) -#define glNamedFramebufferTextureEXT GLEW_GET_FUN(__glewNamedFramebufferTextureEXT) -#define glNamedFramebufferTextureFaceEXT GLEW_GET_FUN(__glewNamedFramebufferTextureFaceEXT) -#define glNamedFramebufferTextureLayerEXT GLEW_GET_FUN(__glewNamedFramebufferTextureLayerEXT) -#define glNamedProgramLocalParameter4dEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dEXT) -#define glNamedProgramLocalParameter4dvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dvEXT) -#define glNamedProgramLocalParameter4fEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fEXT) -#define glNamedProgramLocalParameter4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fvEXT) -#define glNamedProgramLocalParameterI4iEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4iEXT) -#define glNamedProgramLocalParameterI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4ivEXT) -#define glNamedProgramLocalParameterI4uiEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uiEXT) -#define glNamedProgramLocalParameterI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uivEXT) -#define glNamedProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameters4fvEXT) -#define glNamedProgramLocalParametersI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4ivEXT) -#define glNamedProgramLocalParametersI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4uivEXT) -#define glNamedProgramStringEXT GLEW_GET_FUN(__glewNamedProgramStringEXT) -#define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT) -#define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT) -#define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT) -#define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT) -#define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT) -#define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT) -#define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT) -#define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT) -#define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT) -#define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT) -#define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT) -#define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT) -#define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT) -#define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT) -#define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT) -#define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT) -#define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT) -#define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT) -#define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT) -#define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT) -#define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT) -#define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT) -#define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT) -#define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT) -#define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT) -#define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT) -#define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT) -#define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT) -#define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT) -#define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT) -#define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT) -#define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT) -#define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT) -#define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT) -#define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT) -#define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT) -#define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT) -#define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT) -#define glTextureImage1DEXT GLEW_GET_FUN(__glewTextureImage1DEXT) -#define glTextureImage2DEXT GLEW_GET_FUN(__glewTextureImage2DEXT) -#define glTextureImage3DEXT GLEW_GET_FUN(__glewTextureImage3DEXT) -#define glTextureParameterIivEXT GLEW_GET_FUN(__glewTextureParameterIivEXT) -#define glTextureParameterIuivEXT GLEW_GET_FUN(__glewTextureParameterIuivEXT) -#define glTextureParameterfEXT GLEW_GET_FUN(__glewTextureParameterfEXT) -#define glTextureParameterfvEXT GLEW_GET_FUN(__glewTextureParameterfvEXT) -#define glTextureParameteriEXT GLEW_GET_FUN(__glewTextureParameteriEXT) -#define glTextureParameterivEXT GLEW_GET_FUN(__glewTextureParameterivEXT) -#define glTextureRenderbufferEXT GLEW_GET_FUN(__glewTextureRenderbufferEXT) -#define glTextureSubImage1DEXT GLEW_GET_FUN(__glewTextureSubImage1DEXT) -#define glTextureSubImage2DEXT GLEW_GET_FUN(__glewTextureSubImage2DEXT) -#define glTextureSubImage3DEXT GLEW_GET_FUN(__glewTextureSubImage3DEXT) -#define glUnmapNamedBufferEXT GLEW_GET_FUN(__glewUnmapNamedBufferEXT) -#define glVertexArrayColorOffsetEXT GLEW_GET_FUN(__glewVertexArrayColorOffsetEXT) -#define glVertexArrayEdgeFlagOffsetEXT GLEW_GET_FUN(__glewVertexArrayEdgeFlagOffsetEXT) -#define glVertexArrayFogCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayFogCoordOffsetEXT) -#define glVertexArrayIndexOffsetEXT GLEW_GET_FUN(__glewVertexArrayIndexOffsetEXT) -#define glVertexArrayMultiTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayMultiTexCoordOffsetEXT) -#define glVertexArrayNormalOffsetEXT GLEW_GET_FUN(__glewVertexArrayNormalOffsetEXT) -#define glVertexArraySecondaryColorOffsetEXT GLEW_GET_FUN(__glewVertexArraySecondaryColorOffsetEXT) -#define glVertexArrayTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayTexCoordOffsetEXT) -#define glVertexArrayVertexAttribIOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribIOffsetEXT) -#define glVertexArrayVertexAttribOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribOffsetEXT) -#define glVertexArrayVertexOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexOffsetEXT) - -#define GLEW_EXT_direct_state_access GLEW_GET_VAR(__GLEW_EXT_direct_state_access) - -#endif /* GL_EXT_direct_state_access */ - -/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 - -typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum value, GLuint index, GLboolean* data); -typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum value, GLuint index, GLint* data); -typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); - -#define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT) -#define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT) -#define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT) -#define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT) -#define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT) -#define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT) - -#define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2) - -#endif /* GL_EXT_draw_buffers2 */ - -/* ------------------------- GL_EXT_draw_instanced ------------------------- */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); - -#define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT) -#define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT) - -#define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced) - -#endif /* GL_EXT_draw_instanced */ - -/* ----------------------- GL_EXT_draw_range_elements ---------------------- */ - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 - -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - -#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT) - -#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements) - -#endif /* GL_EXT_draw_range_elements */ - -/* ---------------------------- GL_EXT_fog_coord --------------------------- */ - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 - -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); - -#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT) -#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT) -#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT) -#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT) -#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT) - -#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord) - -#endif /* GL_EXT_fog_coord */ - -/* ------------------------ GL_EXT_fragment_lighting ----------------------- */ - -#ifndef GL_EXT_fragment_lighting -#define GL_EXT_fragment_lighting 1 - -#define GL_FRAGMENT_LIGHTING_EXT 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 -#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 -#define GL_LIGHT_ENV_MODE_EXT 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B -#define GL_FRAGMENT_LIGHT0_EXT 0x840C -#define GL_FRAGMENT_LIGHT7_EXT 0x8413 - -typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param); - -#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT) -#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT) -#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT) -#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT) -#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT) -#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT) -#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT) -#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT) -#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT) -#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT) -#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT) -#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT) -#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT) -#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT) -#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT) -#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT) -#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT) -#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT) - -#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting) - -#endif /* GL_EXT_fragment_lighting */ - -/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 - -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA - -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - -#define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT) - -#define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit) - -#endif /* GL_EXT_framebuffer_blit */ - -/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 - -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT) - -#define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample) - -#endif /* GL_EXT_framebuffer_multisample */ - -/* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */ - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 - -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB - -#define GLEW_EXT_framebuffer_multisample_blit_scaled GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample_blit_scaled) - -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -/* ----------------------- GL_EXT_framebuffer_object ----------------------- */ - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 - -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 - -typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - -#define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT) -#define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT) -#define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT) -#define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT) -#define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT) -#define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT) -#define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT) -#define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT) -#define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT) -#define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT) -#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT) -#define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT) -#define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT) -#define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT) -#define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT) -#define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT) -#define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT) - -#define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object) - -#endif /* GL_EXT_framebuffer_object */ - -/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 - -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA - -#define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB) - -#endif /* GL_EXT_framebuffer_sRGB */ - -/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 - -#define GL_LINES_ADJACENCY_EXT 0xA -#define GL_LINE_STRIP_ADJACENCY_EXT 0xB -#define GL_TRIANGLES_ADJACENCY_EXT 0xC -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); - -#define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT) -#define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT) -#define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT) - -#define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4) - -#endif /* GL_EXT_geometry_shader4 */ - -/* --------------------- GL_EXT_gpu_program_parameters --------------------- */ - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 - -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); - -#define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT) -#define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT) - -#define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters) - -#endif /* GL_EXT_gpu_program_parameters */ - -/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 - -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT) -#define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT) -#define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT) -#define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT) -#define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT) -#define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT) -#define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT) -#define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT) -#define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT) -#define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT) -#define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT) -#define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT) -#define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT) -#define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT) -#define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT) -#define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT) -#define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT) -#define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT) -#define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT) -#define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT) -#define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT) -#define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT) -#define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT) -#define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT) -#define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT) -#define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT) -#define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT) -#define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT) -#define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT) -#define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT) -#define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT) -#define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT) -#define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT) -#define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT) - -#define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4) - -#endif /* GL_EXT_gpu_shader4 */ - -/* ---------------------------- GL_EXT_histogram --------------------------- */ - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 - -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 - -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); - -#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT) -#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT) -#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT) -#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT) -#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT) -#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT) -#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT) -#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT) -#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT) -#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT) - -#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram) - -#endif /* GL_EXT_histogram */ - -/* ----------------------- GL_EXT_index_array_formats ---------------------- */ - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 - -#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats) - -#endif /* GL_EXT_index_array_formats */ - -/* --------------------------- GL_EXT_index_func --------------------------- */ - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 - -typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref); - -#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT) - -#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func) - -#endif /* GL_EXT_index_func */ - -/* ------------------------- GL_EXT_index_material ------------------------- */ - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 - -typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); - -#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT) - -#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material) - -#endif /* GL_EXT_index_material */ - -/* -------------------------- GL_EXT_index_texture ------------------------- */ - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 - -#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture) - -#endif /* GL_EXT_index_texture */ - -/* -------------------------- GL_EXT_light_texture ------------------------- */ - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 - -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 - -typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); - -#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT) -#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT) -#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT) - -#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture) - -#endif /* GL_EXT_light_texture */ - -/* ------------------------- GL_EXT_misc_attribute ------------------------- */ - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 - -#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute) - -#endif /* GL_EXT_misc_attribute */ - -/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid * const *indices, GLsizei primcount); - -#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) -#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) - -#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays) - -#endif /* GL_EXT_multi_draw_arrays */ - -/* --------------------------- GL_EXT_multisample -------------------------- */ - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 - -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 - -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); - -#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT) -#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT) - -#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample) - -#endif /* GL_EXT_multisample */ - -/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 - -#define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil) - -#endif /* GL_EXT_packed_depth_stencil */ - -/* -------------------------- GL_EXT_packed_float -------------------------- */ - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 - -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C - -#define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float) - -#endif /* GL_EXT_packed_float */ - -/* -------------------------- GL_EXT_packed_pixels ------------------------- */ - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 - -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 - -#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels) - -#endif /* GL_EXT_packed_pixels */ - -/* ------------------------ GL_EXT_paletted_texture ------------------------ */ - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 - -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 -#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - -typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); - -#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT) -#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT) -#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT) -#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT) - -#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture) - -#endif /* GL_EXT_paletted_texture */ - -/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 - -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF - -#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object) - -#endif /* GL_EXT_pixel_buffer_object */ - -/* ------------------------- GL_EXT_pixel_transform ------------------------ */ - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 - -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 - -typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT) -#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT) -#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT) -#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT) -#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT) -#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT) - -#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform) - -#endif /* GL_EXT_pixel_transform */ - -/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 - -#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table) - -#endif /* GL_EXT_pixel_transform_color_table */ - -/* ------------------------ GL_EXT_point_parameters ------------------------ */ - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 - -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat* params); - -#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT) -#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT) - -#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters) - -#endif /* GL_EXT_point_parameters */ - -/* ------------------------- GL_EXT_polygon_offset ------------------------- */ - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 - -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 - -typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); - -#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT) - -#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset) - -#endif /* GL_EXT_polygon_offset */ - -/* ------------------------ GL_EXT_provoking_vertex ------------------------ */ - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 - -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F - -typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); - -#define glProvokingVertexEXT GLEW_GET_FUN(__glewProvokingVertexEXT) - -#define GLEW_EXT_provoking_vertex GLEW_GET_VAR(__GLEW_EXT_provoking_vertex) - -#endif /* GL_EXT_provoking_vertex */ - -/* ------------------------- GL_EXT_rescale_normal ------------------------- */ - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 - -#define GL_RESCALE_NORMAL_EXT 0x803A - -#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal) - -#endif /* GL_EXT_rescale_normal */ - -/* -------------------------- GL_EXT_scene_marker -------------------------- */ - -#ifndef GL_EXT_scene_marker -#define GL_EXT_scene_marker 1 - -typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void); - -#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT) -#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT) - -#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker) - -#endif /* GL_EXT_scene_marker */ - -/* ------------------------- GL_EXT_secondary_color ------------------------ */ - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 - -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT) -#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT) -#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT) -#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT) -#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT) -#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT) -#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT) -#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT) -#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT) -#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT) -#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT) -#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT) -#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT) -#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT) -#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT) -#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT) -#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT) - -#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color) - -#endif /* GL_EXT_secondary_color */ - -/* --------------------- GL_EXT_separate_shader_objects -------------------- */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 - -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D - -typedef void (GLAPIENTRY * PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar* string); -typedef void (GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); - -#define glActiveProgramEXT GLEW_GET_FUN(__glewActiveProgramEXT) -#define glCreateShaderProgramEXT GLEW_GET_FUN(__glewCreateShaderProgramEXT) -#define glUseShaderProgramEXT GLEW_GET_FUN(__glewUseShaderProgramEXT) - -#define GLEW_EXT_separate_shader_objects GLEW_GET_VAR(__GLEW_EXT_separate_shader_objects) - -#endif /* GL_EXT_separate_shader_objects */ - -/* --------------------- GL_EXT_separate_specular_color -------------------- */ - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 - -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA - -#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color) - -#endif /* GL_EXT_separate_specular_color */ - -/* --------------------- GL_EXT_shader_image_load_store -------------------- */ - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 - -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); - -#define glBindImageTextureEXT GLEW_GET_FUN(__glewBindImageTextureEXT) -#define glMemoryBarrierEXT GLEW_GET_FUN(__glewMemoryBarrierEXT) - -#define GLEW_EXT_shader_image_load_store GLEW_GET_VAR(__GLEW_EXT_shader_image_load_store) - -#endif /* GL_EXT_shader_image_load_store */ - -/* -------------------------- GL_EXT_shadow_funcs -------------------------- */ - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 - -#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs) - -#endif /* GL_EXT_shadow_funcs */ - -/* --------------------- GL_EXT_shared_texture_palette --------------------- */ - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 - -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB - -#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette) - -#endif /* GL_EXT_shared_texture_palette */ - -/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 - -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 - -#define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag) - -#endif /* GL_EXT_stencil_clear_tag */ - -/* ------------------------ GL_EXT_stencil_two_side ------------------------ */ - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 - -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 - -typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); - -#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT) - -#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side) - -#endif /* GL_EXT_stencil_two_side */ - -/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 - -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 - -#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap) - -#endif /* GL_EXT_stencil_wrap */ - -/* --------------------------- GL_EXT_subtexture --------------------------- */ - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 - -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) -#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) -#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT) - -#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture) - -#endif /* GL_EXT_subtexture */ - -/* ----------------------------- GL_EXT_texture ---------------------------- */ - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 - -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 - -#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture) - -#endif /* GL_EXT_texture */ - -/* ---------------------------- GL_EXT_texture3D --------------------------- */ - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 - -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) - -#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D) - -#endif /* GL_EXT_texture3D */ - -/* -------------------------- GL_EXT_texture_array ------------------------- */ - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 - -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); - -#define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT) - -#define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array) - -#endif /* GL_EXT_texture_array */ - -/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 - -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - -typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); - -#define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT) - -#define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object) - -#endif /* GL_EXT_texture_buffer_object */ - -/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ - -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 - -#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1) - -#endif /* GL_EXT_texture_compression_dxt1 */ - -/* -------------------- GL_EXT_texture_compression_latc -------------------- */ - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 - -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 - -#define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc) - -#endif /* GL_EXT_texture_compression_latc */ - -/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 - -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE - -#define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc) - -#endif /* GL_EXT_texture_compression_rgtc */ - -/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 - -#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc) - -#endif /* GL_EXT_texture_compression_s3tc */ - -/* ------------------------ GL_EXT_texture_cube_map ------------------------ */ - -#ifndef GL_EXT_texture_cube_map -#define GL_EXT_texture_cube_map 1 - -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C - -#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map) - -#endif /* GL_EXT_texture_cube_map */ - -/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ - -#ifndef GL_EXT_texture_edge_clamp -#define GL_EXT_texture_edge_clamp 1 - -#define GL_CLAMP_TO_EDGE_EXT 0x812F - -#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp) - -#endif /* GL_EXT_texture_edge_clamp */ - -/* --------------------------- GL_EXT_texture_env -------------------------- */ - -#ifndef GL_EXT_texture_env -#define GL_EXT_texture_env 1 - -#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) - -#endif /* GL_EXT_texture_env */ - -/* ------------------------- GL_EXT_texture_env_add ------------------------ */ - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 - -#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add) - -#endif /* GL_EXT_texture_env_add */ - -/* ----------------------- GL_EXT_texture_env_combine ---------------------- */ - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 - -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A - -#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine) - -#endif /* GL_EXT_texture_env_combine */ - -/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 - -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 - -#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3) - -#endif /* GL_EXT_texture_env_dot3 */ - -/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 - -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF - -#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic) - -#endif /* GL_EXT_texture_filter_anisotropic */ - -/* ------------------------- GL_EXT_texture_integer ------------------------ */ - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 - -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E - -typedef void (GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); - -#define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT) -#define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT) -#define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT) -#define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT) -#define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT) -#define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT) - -#define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer) - -#endif /* GL_EXT_texture_integer */ - -/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 - -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 - -#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias) - -#endif /* GL_EXT_texture_lod_bias */ - -/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 - -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 - -#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp) - -#endif /* GL_EXT_texture_mirror_clamp */ - -/* ------------------------- GL_EXT_texture_object ------------------------- */ - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 - -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A - -typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences); -typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities); - -#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT) -#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT) -#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT) -#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT) -#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT) -#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT) - -#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object) - -#endif /* GL_EXT_texture_object */ - -/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 - -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF - -typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); - -#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT) - -#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal) - -#endif /* GL_EXT_texture_perturb_normal */ - -/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ - -#ifndef GL_EXT_texture_rectangle -#define GL_EXT_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_EXT 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 - -#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle) - -#endif /* GL_EXT_texture_rectangle */ - -/* -------------------------- GL_EXT_texture_sRGB -------------------------- */ - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 - -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F - -#define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB) - -#endif /* GL_EXT_texture_sRGB */ - -/* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 - -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A - -#define GLEW_EXT_texture_sRGB_decode GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_decode) - -#endif /* GL_EXT_texture_sRGB_decode */ - -/* --------------------- GL_EXT_texture_shared_exponent -------------------- */ - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 - -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F - -#define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent) - -#endif /* GL_EXT_texture_shared_exponent */ - -/* -------------------------- GL_EXT_texture_snorm ------------------------- */ - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 - -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B - -#define GLEW_EXT_texture_snorm GLEW_GET_VAR(__GLEW_EXT_texture_snorm) - -#endif /* GL_EXT_texture_snorm */ - -/* ------------------------- GL_EXT_texture_swizzle ------------------------ */ - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 - -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 - -#define GLEW_EXT_texture_swizzle GLEW_GET_VAR(__GLEW_EXT_texture_swizzle) - -#endif /* GL_EXT_texture_swizzle */ - -/* --------------------------- GL_EXT_timer_query -------------------------- */ - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 - -#define GL_TIME_ELAPSED_EXT 0x88BF - -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); - -#define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT) -#define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT) - -#define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query) - -#endif /* GL_EXT_timer_query */ - -/* ----------------------- GL_EXT_transform_feedback ----------------------- */ - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 - -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F - -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar * const* varyings, GLenum bufferMode); - -#define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT) -#define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT) -#define glBindBufferOffsetEXT GLEW_GET_FUN(__glewBindBufferOffsetEXT) -#define glBindBufferRangeEXT GLEW_GET_FUN(__glewBindBufferRangeEXT) -#define glEndTransformFeedbackEXT GLEW_GET_FUN(__glewEndTransformFeedbackEXT) -#define glGetTransformFeedbackVaryingEXT GLEW_GET_FUN(__glewGetTransformFeedbackVaryingEXT) -#define glTransformFeedbackVaryingsEXT GLEW_GET_FUN(__glewTransformFeedbackVaryingsEXT) - -#define GLEW_EXT_transform_feedback GLEW_GET_VAR(__GLEW_EXT_transform_feedback) - -#endif /* GL_EXT_transform_feedback */ - -/* -------------------------- GL_EXT_vertex_array -------------------------- */ - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 - -#define GL_DOUBLE_EXT 0x140A -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 - -typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer); -typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - -#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) -#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) -#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT) -#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT) -#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT) -#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT) -#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT) -#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT) - -#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array) - -#endif /* GL_EXT_vertex_array */ - -/* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */ - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 - -#define GL_BGRA 0x80E1 - -#define GLEW_EXT_vertex_array_bgra GLEW_GET_VAR(__GLEW_EXT_vertex_array_bgra) - -#endif /* GL_EXT_vertex_array_bgra */ - -/* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 - -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glGetVertexAttribLdvEXT GLEW_GET_FUN(__glewGetVertexAttribLdvEXT) -#define glVertexArrayVertexAttribLOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribLOffsetEXT) -#define glVertexAttribL1dEXT GLEW_GET_FUN(__glewVertexAttribL1dEXT) -#define glVertexAttribL1dvEXT GLEW_GET_FUN(__glewVertexAttribL1dvEXT) -#define glVertexAttribL2dEXT GLEW_GET_FUN(__glewVertexAttribL2dEXT) -#define glVertexAttribL2dvEXT GLEW_GET_FUN(__glewVertexAttribL2dvEXT) -#define glVertexAttribL3dEXT GLEW_GET_FUN(__glewVertexAttribL3dEXT) -#define glVertexAttribL3dvEXT GLEW_GET_FUN(__glewVertexAttribL3dvEXT) -#define glVertexAttribL4dEXT GLEW_GET_FUN(__glewVertexAttribL4dEXT) -#define glVertexAttribL4dvEXT GLEW_GET_FUN(__glewVertexAttribL4dvEXT) -#define glVertexAttribLPointerEXT GLEW_GET_FUN(__glewVertexAttribLPointerEXT) - -#define GLEW_EXT_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_EXT_vertex_attrib_64bit) - -#endif /* GL_EXT_vertex_attrib_64bit */ - -/* -------------------------- GL_EXT_vertex_shader ------------------------- */ - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 - -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - -typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components); -typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data); -typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr); -typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); - -#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT) -#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT) -#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT) -#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT) -#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT) -#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT) -#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT) -#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT) -#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT) -#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT) -#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT) -#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT) -#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT) -#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT) -#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT) -#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT) -#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT) -#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT) -#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT) -#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT) -#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT) -#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT) -#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT) -#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT) -#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT) -#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT) -#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT) -#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT) -#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT) -#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT) -#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT) -#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT) -#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT) -#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT) -#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT) -#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT) -#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT) -#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT) -#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT) -#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT) -#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT) -#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT) - -#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader) - -#endif /* GL_EXT_vertex_shader */ - -/* ------------------------ GL_EXT_vertex_weighting ------------------------ */ - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 - -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 - -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); - -#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT) -#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT) -#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT) - -#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting) - -#endif /* GL_EXT_vertex_weighting */ - -/* ------------------------- GL_EXT_x11_sync_object ------------------------ */ - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 - -#define GL_SYNC_X11_FENCE_EXT 0x90E1 - -typedef GLsync (GLAPIENTRY * PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); - -#define glImportSyncEXT GLEW_GET_FUN(__glewImportSyncEXT) - -#define GLEW_EXT_x11_sync_object GLEW_GET_VAR(__GLEW_EXT_x11_sync_object) - -#endif /* GL_EXT_x11_sync_object */ - -/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 - -typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void); - -#define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY) - -#define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator) - -#endif /* GL_GREMEDY_frame_terminator */ - -/* ------------------------ GL_GREMEDY_string_marker ----------------------- */ - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 - -typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); - -#define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) - -#define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker) - -#endif /* GL_GREMEDY_string_marker */ - -/* --------------------- GL_HP_convolution_border_modes -------------------- */ - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 - -#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes) - -#endif /* GL_HP_convolution_border_modes */ - -/* ------------------------- GL_HP_image_transform ------------------------- */ - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 - -typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP) -#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP) -#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP) -#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP) -#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP) -#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP) - -#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform) - -#endif /* GL_HP_image_transform */ - -/* -------------------------- GL_HP_occlusion_test ------------------------- */ - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 - -#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) - -#endif /* GL_HP_occlusion_test */ - -/* ------------------------- GL_HP_texture_lighting ------------------------ */ - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 - -#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting) - -#endif /* GL_HP_texture_lighting */ - -/* --------------------------- GL_IBM_cull_vertex -------------------------- */ - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 - -#define GL_CULL_VERTEX_IBM 103050 - -#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex) - -#endif /* GL_IBM_cull_vertex */ - -/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 - -typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride); - -#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM) -#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM) - -#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays) - -#endif /* GL_IBM_multimode_draw_arrays */ - -/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 - -#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010 - -#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip) - -#endif /* GL_IBM_rasterpos_clip */ - -/* --------------------------- GL_IBM_static_data -------------------------- */ - -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 - -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 - -#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data) - -#endif /* GL_IBM_static_data */ - -/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 - -#define GL_MIRRORED_REPEAT_IBM 0x8370 - -#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat) - -#endif /* GL_IBM_texture_mirrored_repeat */ - -/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 - -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 - -typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); - -#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM) -#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM) -#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM) -#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM) -#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM) -#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM) -#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM) -#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM) - -#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists) - -#endif /* GL_IBM_vertex_array_lists */ - -/* -------------------------- GL_INGR_color_clamp -------------------------- */ - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 - -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 - -#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp) - -#endif /* GL_INGR_color_clamp */ - -/* ------------------------- GL_INGR_interlace_read ------------------------ */ - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 - -#define GL_INTERLACE_READ_INGR 0x8568 - -#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read) - -#endif /* GL_INGR_interlace_read */ - -/* -------------------------- GL_INTEL_map_texture ------------------------- */ - -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 - -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF - -typedef GLvoid * (GLAPIENTRY * PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum *layout); -typedef void (GLAPIENTRY * PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); -typedef void (GLAPIENTRY * PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); - -#define glMapTexture2DINTEL GLEW_GET_FUN(__glewMapTexture2DINTEL) -#define glSyncTextureINTEL GLEW_GET_FUN(__glewSyncTextureINTEL) -#define glUnmapTexture2DINTEL GLEW_GET_FUN(__glewUnmapTexture2DINTEL) - -#define GLEW_INTEL_map_texture GLEW_GET_VAR(__GLEW_INTEL_map_texture) - -#endif /* GL_INTEL_map_texture */ - -/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 - -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 - -typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); - -#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL) -#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL) -#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL) -#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL) - -#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays) - -#endif /* GL_INTEL_parallel_arrays */ - -/* ------------------------ GL_INTEL_texture_scissor ----------------------- */ - -#ifndef GL_INTEL_texture_scissor -#define GL_INTEL_texture_scissor 1 - -typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc); -typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh); - -#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL) -#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL) - -#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor) - -#endif /* GL_INTEL_texture_scissor */ - -/* ------------------------------ GL_KHR_debug ----------------------------- */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 - -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_DISPLAY_LIST 0x82E7 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 - -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); -typedef void (GLAPIENTRY * PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label); -typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (void* ptr, GLsizei length, const GLchar* label); -typedef void (GLAPIENTRY * PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message); - -#define glDebugMessageCallback GLEW_GET_FUN(__glewDebugMessageCallback) -#define glDebugMessageControl GLEW_GET_FUN(__glewDebugMessageControl) -#define glDebugMessageInsert GLEW_GET_FUN(__glewDebugMessageInsert) -#define glGetDebugMessageLog GLEW_GET_FUN(__glewGetDebugMessageLog) -#define glGetObjectLabel GLEW_GET_FUN(__glewGetObjectLabel) -#define glGetObjectPtrLabel GLEW_GET_FUN(__glewGetObjectPtrLabel) -#define glObjectLabel GLEW_GET_FUN(__glewObjectLabel) -#define glObjectPtrLabel GLEW_GET_FUN(__glewObjectPtrLabel) -#define glPopDebugGroup GLEW_GET_FUN(__glewPopDebugGroup) -#define glPushDebugGroup GLEW_GET_FUN(__glewPushDebugGroup) - -#define GLEW_KHR_debug GLEW_GET_VAR(__GLEW_KHR_debug) - -#endif /* GL_KHR_debug */ - -/* ------------------ GL_KHR_texture_compression_astc_ldr ------------------ */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 - -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD - -#define GLEW_KHR_texture_compression_astc_ldr GLEW_GET_VAR(__GLEW_KHR_texture_compression_astc_ldr) - -#endif /* GL_KHR_texture_compression_astc_ldr */ - -/* -------------------------- GL_KTX_buffer_region ------------------------- */ - -#ifndef GL_KTX_buffer_region -#define GL_KTX_buffer_region 1 - -#define GL_KTX_FRONT_REGION 0x0 -#define GL_KTX_BACK_REGION 0x1 -#define GL_KTX_Z_REGION 0x2 -#define GL_KTX_STENCIL_REGION 0x3 - -typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDPROC) (void); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONPROC) (GLenum region); -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest); -typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONPROC) (GLenum region); -typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height); - -#define glBufferRegionEnabled GLEW_GET_FUN(__glewBufferRegionEnabled) -#define glDeleteBufferRegion GLEW_GET_FUN(__glewDeleteBufferRegion) -#define glDrawBufferRegion GLEW_GET_FUN(__glewDrawBufferRegion) -#define glNewBufferRegion GLEW_GET_FUN(__glewNewBufferRegion) -#define glReadBufferRegion GLEW_GET_FUN(__glewReadBufferRegion) - -#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region) - -#endif /* GL_KTX_buffer_region */ - -/* ------------------------- GL_MESAX_texture_stack ------------------------ */ - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 - -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E - -#define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack) - -#endif /* GL_MESAX_texture_stack */ - -/* -------------------------- GL_MESA_pack_invert -------------------------- */ - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 - -#define GL_PACK_INVERT_MESA 0x8758 - -#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert) - -#endif /* GL_MESA_pack_invert */ - -/* ------------------------- GL_MESA_resize_buffers ------------------------ */ - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 - -typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); - -#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA) - -#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers) - -#endif /* GL_MESA_resize_buffers */ - -/* --------------------------- GL_MESA_window_pos -------------------------- */ - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 - -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); - -#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA) -#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA) -#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA) -#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA) -#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA) -#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA) -#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA) -#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA) -#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA) -#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA) -#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA) -#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA) -#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA) -#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA) -#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA) -#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA) -#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA) -#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA) -#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA) -#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA) -#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA) -#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA) -#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA) -#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA) - -#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos) - -#endif /* GL_MESA_window_pos */ - -/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 - -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 - -#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture) - -#endif /* GL_MESA_ycbcr_texture */ - -/* ----------------------- GL_NVX_conditional_render ----------------------- */ - -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVXPROC) (void); - -#define glBeginConditionalRenderNVX GLEW_GET_FUN(__glewBeginConditionalRenderNVX) -#define glEndConditionalRenderNVX GLEW_GET_FUN(__glewEndConditionalRenderNVX) - -#define GLEW_NVX_conditional_render GLEW_GET_VAR(__GLEW_NVX_conditional_render) - -#endif /* GL_NVX_conditional_render */ - -/* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ - -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 - -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B - -#define GLEW_NVX_gpu_memory_info GLEW_GET_VAR(__GLEW_NVX_gpu_memory_info) - -#endif /* GL_NVX_gpu_memory_info */ - -/* ------------------- GL_NV_bindless_multi_draw_indirect ------------------ */ - -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); - -#define glMultiDrawArraysIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawArraysIndirectBindlessNV) -#define glMultiDrawElementsIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawElementsIndirectBindlessNV) - -#define GLEW_NV_bindless_multi_draw_indirect GLEW_GET_VAR(__GLEW_NV_bindless_multi_draw_indirect) - -#endif /* GL_NV_bindless_multi_draw_indirect */ - -/* ------------------------- GL_NV_bindless_texture ------------------------ */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 - -typedef GLuint64 (GLAPIENTRY * PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef GLboolean (GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64* values); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64* value); - -#define glGetImageHandleNV GLEW_GET_FUN(__glewGetImageHandleNV) -#define glGetTextureHandleNV GLEW_GET_FUN(__glewGetTextureHandleNV) -#define glGetTextureSamplerHandleNV GLEW_GET_FUN(__glewGetTextureSamplerHandleNV) -#define glIsImageHandleResidentNV GLEW_GET_FUN(__glewIsImageHandleResidentNV) -#define glIsTextureHandleResidentNV GLEW_GET_FUN(__glewIsTextureHandleResidentNV) -#define glMakeImageHandleNonResidentNV GLEW_GET_FUN(__glewMakeImageHandleNonResidentNV) -#define glMakeImageHandleResidentNV GLEW_GET_FUN(__glewMakeImageHandleResidentNV) -#define glMakeTextureHandleNonResidentNV GLEW_GET_FUN(__glewMakeTextureHandleNonResidentNV) -#define glMakeTextureHandleResidentNV GLEW_GET_FUN(__glewMakeTextureHandleResidentNV) -#define glProgramUniformHandleui64NV GLEW_GET_FUN(__glewProgramUniformHandleui64NV) -#define glProgramUniformHandleui64vNV GLEW_GET_FUN(__glewProgramUniformHandleui64vNV) -#define glUniformHandleui64NV GLEW_GET_FUN(__glewUniformHandleui64NV) -#define glUniformHandleui64vNV GLEW_GET_FUN(__glewUniformHandleui64vNV) - -#define GLEW_NV_bindless_texture GLEW_GET_VAR(__GLEW_NV_bindless_texture) - -#endif /* GL_NV_bindless_texture */ - -/* --------------------- GL_NV_blend_equation_advanced --------------------- */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 - -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_DISJOINT_NV 0x9283 -#define GL_CONJOINT_NV 0x9284 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#define GL_SRC_NV 0x9286 -#define GL_DST_NV 0x9287 -#define GL_SRC_OVER_NV 0x9288 -#define GL_DST_OVER_NV 0x9289 -#define GL_SRC_IN_NV 0x928A -#define GL_DST_IN_NV 0x928B -#define GL_SRC_OUT_NV 0x928C -#define GL_DST_OUT_NV 0x928D -#define GL_SRC_ATOP_NV 0x928E -#define GL_DST_ATOP_NV 0x928F -#define GL_PLUS_NV 0x9291 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_MULTIPLY_NV 0x9294 -#define GL_SCREEN_NV 0x9295 -#define GL_OVERLAY_NV 0x9296 -#define GL_DARKEN_NV 0x9297 -#define GL_LIGHTEN_NV 0x9298 -#define GL_COLORDODGE_NV 0x9299 -#define GL_COLORBURN_NV 0x929A -#define GL_HARDLIGHT_NV 0x929B -#define GL_SOFTLIGHT_NV 0x929C -#define GL_DIFFERENCE_NV 0x929E -#define GL_MINUS_NV 0x929F -#define GL_EXCLUSION_NV 0x92A0 -#define GL_CONTRAST_NV 0x92A1 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_INVERT_OVG_NV 0x92B4 - -typedef void (GLAPIENTRY * PFNGLBLENDBARRIERNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); - -#define glBlendBarrierNV GLEW_GET_FUN(__glewBlendBarrierNV) -#define glBlendParameteriNV GLEW_GET_FUN(__glewBlendParameteriNV) - -#define GLEW_NV_blend_equation_advanced GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced) - -#endif /* GL_NV_blend_equation_advanced */ - -/* ----------------- GL_NV_blend_equation_advanced_coherent ---------------- */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 - -#define GLEW_NV_blend_equation_advanced_coherent GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced_coherent) - -#endif /* GL_NV_blend_equation_advanced_coherent */ - -/* --------------------------- GL_NV_blend_square -------------------------- */ - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 - -#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square) - -#endif /* GL_NV_blend_square */ - -/* ------------------------- GL_NV_compute_program5 ------------------------ */ - -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 - -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC - -#define GLEW_NV_compute_program5 GLEW_GET_VAR(__GLEW_NV_compute_program5) - -#endif /* GL_NV_compute_program5 */ - -/* ------------------------ GL_NV_conditional_render ----------------------- */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 - -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVPROC) (void); - -#define glBeginConditionalRenderNV GLEW_GET_FUN(__glewBeginConditionalRenderNV) -#define glEndConditionalRenderNV GLEW_GET_FUN(__glewEndConditionalRenderNV) - -#define GLEW_NV_conditional_render GLEW_GET_VAR(__GLEW_NV_conditional_render) - -#endif /* GL_NV_conditional_render */ - -/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 - -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F - -#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color) - -#endif /* GL_NV_copy_depth_to_color */ - -/* ---------------------------- GL_NV_copy_image --------------------------- */ - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 - -typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define glCopyImageSubDataNV GLEW_GET_FUN(__glewCopyImageSubDataNV) - -#define GLEW_NV_copy_image GLEW_GET_VAR(__GLEW_NV_copy_image) - -#endif /* GL_NV_copy_image */ - -/* -------------------------- GL_NV_deep_texture3D ------------------------- */ - -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 - -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 - -#define GLEW_NV_deep_texture3D GLEW_GET_VAR(__GLEW_NV_deep_texture3D) - -#endif /* GL_NV_deep_texture3D */ - -/* ------------------------ GL_NV_depth_buffer_float ----------------------- */ - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 - -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); - -#define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV) -#define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV) -#define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV) - -#define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float) - -#endif /* GL_NV_depth_buffer_float */ - -/* --------------------------- GL_NV_depth_clamp --------------------------- */ - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 - -#define GL_DEPTH_CLAMP_NV 0x864F - -#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp) - -#endif /* GL_NV_depth_clamp */ - -/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ - -#ifndef GL_NV_depth_range_unclamped -#define GL_NV_depth_range_unclamped 1 - -#define GL_SAMPLE_COUNT_BITS_NV 0x8864 -#define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 -#define GL_QUERY_RESULT_NV 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_NV 0x8867 -#define GL_SAMPLE_COUNT_NV 0x8914 - -#define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped) - -#endif /* GL_NV_depth_range_unclamped */ - -/* --------------------------- GL_NV_draw_texture -------------------------- */ - -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 - -typedef void (GLAPIENTRY * PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); - -#define glDrawTextureNV GLEW_GET_FUN(__glewDrawTextureNV) - -#define GLEW_NV_draw_texture GLEW_GET_VAR(__GLEW_NV_draw_texture) - -#endif /* GL_NV_draw_texture */ - -/* ---------------------------- GL_NV_evaluators --------------------------- */ - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 - -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 - -typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV) -#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV) -#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV) -#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV) -#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV) -#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV) -#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV) -#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV) -#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV) - -#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators) - -#endif /* GL_NV_evaluators */ - -/* ----------------------- GL_NV_explicit_multisample ---------------------- */ - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 - -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 - -typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat* val); -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); - -#define glGetMultisamplefvNV GLEW_GET_FUN(__glewGetMultisamplefvNV) -#define glSampleMaskIndexedNV GLEW_GET_FUN(__glewSampleMaskIndexedNV) -#define glTexRenderbufferNV GLEW_GET_FUN(__glewTexRenderbufferNV) - -#define GLEW_NV_explicit_multisample GLEW_GET_VAR(__GLEW_NV_explicit_multisample) - -#endif /* GL_NV_explicit_multisample */ - -/* ------------------------------ GL_NV_fence ------------------------------ */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 - -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 - -typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences); -typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences); -typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence); - -#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV) -#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV) -#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV) -#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV) -#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV) -#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV) -#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV) - -#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence) - -#endif /* GL_NV_fence */ - -/* --------------------------- GL_NV_float_buffer -------------------------- */ - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 - -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E - -#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer) - -#endif /* GL_NV_float_buffer */ - -/* --------------------------- GL_NV_fog_distance -------------------------- */ - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 - -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C - -#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance) - -#endif /* GL_NV_fog_distance */ - -/* ------------------------- GL_NV_fragment_program ------------------------ */ - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 - -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]); - -#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV) -#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV) -#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV) -#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV) -#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV) -#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV) - -#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program) - -#endif /* GL_NV_fragment_program */ - -/* ------------------------ GL_NV_fragment_program2 ------------------------ */ - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 - -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 - -#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2) - -#endif /* GL_NV_fragment_program2 */ - -/* ------------------------ GL_NV_fragment_program4 ------------------------ */ - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 - -#define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4) - -#endif /* GL_NV_fragment_program4 */ - -/* --------------------- GL_NV_fragment_program_option --------------------- */ - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 - -#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option) - -#endif /* GL_NV_fragment_program_option */ - -/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 - -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV) - -#define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage) - -#endif /* GL_NV_framebuffer_multisample_coverage */ - -/* ------------------------ GL_NV_geometry_program4 ------------------------ */ - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 - -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - -typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); - -#define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV) - -#define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4) - -#endif /* GL_NV_geometry_program4 */ - -/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 - -#define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4) - -#endif /* GL_NV_geometry_shader4 */ - -/* --------------------------- GL_NV_gpu_program4 -------------------------- */ - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 - -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); - -#define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV) -#define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV) -#define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV) -#define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV) -#define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV) -#define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV) -#define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV) -#define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV) -#define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV) -#define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV) -#define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV) -#define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV) - -#define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4) - -#endif /* GL_NV_gpu_program4 */ - -/* --------------------------- GL_NV_gpu_program5 -------------------------- */ - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 - -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F - -#define GLEW_NV_gpu_program5 GLEW_GET_VAR(__GLEW_NV_gpu_program5) - -#endif /* GL_NV_gpu_program5 */ - -/* -------------------- GL_NV_gpu_program5_mem_extended -------------------- */ - -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 - -#define GLEW_NV_gpu_program5_mem_extended GLEW_GET_VAR(__GLEW_NV_gpu_program5_mem_extended) - -#endif /* GL_NV_gpu_program5_mem_extended */ - -/* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ - -#ifndef GL_NV_gpu_program_fp64 -#define GL_NV_gpu_program_fp64 1 - -#define GLEW_NV_gpu_program_fp64 GLEW_GET_VAR(__GLEW_NV_gpu_program_fp64) - -#endif /* GL_NV_gpu_program_fp64 */ - -/* --------------------------- GL_NV_gpu_shader5 --------------------------- */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 - -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB - -typedef void (GLAPIENTRY * PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); - -#define glGetUniformi64vNV GLEW_GET_FUN(__glewGetUniformi64vNV) -#define glGetUniformui64vNV GLEW_GET_FUN(__glewGetUniformui64vNV) -#define glProgramUniform1i64NV GLEW_GET_FUN(__glewProgramUniform1i64NV) -#define glProgramUniform1i64vNV GLEW_GET_FUN(__glewProgramUniform1i64vNV) -#define glProgramUniform1ui64NV GLEW_GET_FUN(__glewProgramUniform1ui64NV) -#define glProgramUniform1ui64vNV GLEW_GET_FUN(__glewProgramUniform1ui64vNV) -#define glProgramUniform2i64NV GLEW_GET_FUN(__glewProgramUniform2i64NV) -#define glProgramUniform2i64vNV GLEW_GET_FUN(__glewProgramUniform2i64vNV) -#define glProgramUniform2ui64NV GLEW_GET_FUN(__glewProgramUniform2ui64NV) -#define glProgramUniform2ui64vNV GLEW_GET_FUN(__glewProgramUniform2ui64vNV) -#define glProgramUniform3i64NV GLEW_GET_FUN(__glewProgramUniform3i64NV) -#define glProgramUniform3i64vNV GLEW_GET_FUN(__glewProgramUniform3i64vNV) -#define glProgramUniform3ui64NV GLEW_GET_FUN(__glewProgramUniform3ui64NV) -#define glProgramUniform3ui64vNV GLEW_GET_FUN(__glewProgramUniform3ui64vNV) -#define glProgramUniform4i64NV GLEW_GET_FUN(__glewProgramUniform4i64NV) -#define glProgramUniform4i64vNV GLEW_GET_FUN(__glewProgramUniform4i64vNV) -#define glProgramUniform4ui64NV GLEW_GET_FUN(__glewProgramUniform4ui64NV) -#define glProgramUniform4ui64vNV GLEW_GET_FUN(__glewProgramUniform4ui64vNV) -#define glUniform1i64NV GLEW_GET_FUN(__glewUniform1i64NV) -#define glUniform1i64vNV GLEW_GET_FUN(__glewUniform1i64vNV) -#define glUniform1ui64NV GLEW_GET_FUN(__glewUniform1ui64NV) -#define glUniform1ui64vNV GLEW_GET_FUN(__glewUniform1ui64vNV) -#define glUniform2i64NV GLEW_GET_FUN(__glewUniform2i64NV) -#define glUniform2i64vNV GLEW_GET_FUN(__glewUniform2i64vNV) -#define glUniform2ui64NV GLEW_GET_FUN(__glewUniform2ui64NV) -#define glUniform2ui64vNV GLEW_GET_FUN(__glewUniform2ui64vNV) -#define glUniform3i64NV GLEW_GET_FUN(__glewUniform3i64NV) -#define glUniform3i64vNV GLEW_GET_FUN(__glewUniform3i64vNV) -#define glUniform3ui64NV GLEW_GET_FUN(__glewUniform3ui64NV) -#define glUniform3ui64vNV GLEW_GET_FUN(__glewUniform3ui64vNV) -#define glUniform4i64NV GLEW_GET_FUN(__glewUniform4i64NV) -#define glUniform4i64vNV GLEW_GET_FUN(__glewUniform4i64vNV) -#define glUniform4ui64NV GLEW_GET_FUN(__glewUniform4ui64NV) -#define glUniform4ui64vNV GLEW_GET_FUN(__glewUniform4ui64vNV) - -#define GLEW_NV_gpu_shader5 GLEW_GET_VAR(__GLEW_NV_gpu_shader5) - -#endif /* GL_NV_gpu_shader5 */ - -/* ---------------------------- GL_NV_half_float --------------------------- */ - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 - -#define GL_HALF_FLOAT_NV 0x140B - -typedef unsigned short GLhalf; - -typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); -typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha); -typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLhalf fog); -typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLhalf* fog); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLhalf nx, GLhalf ny, GLhalf nz); -typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLhalf s); -typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLhalf s, GLhalf t); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLhalf s, GLhalf t, GLhalf r); -typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLhalf s, GLhalf t, GLhalf r, GLhalf q); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLhalf x, GLhalf y); -typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLhalf x, GLhalf y, GLhalf z); -typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLhalf x, GLhalf y, GLhalf z, GLhalf w); -typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalf x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalf x, GLhalf y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLhalf weight); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); - -#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV) -#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV) -#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV) -#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV) -#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV) -#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV) -#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV) -#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV) -#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV) -#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV) -#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV) -#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV) -#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV) -#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV) -#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV) -#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV) -#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV) -#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV) -#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV) -#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV) -#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV) -#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV) -#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV) -#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV) -#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV) -#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV) -#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV) -#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV) -#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV) -#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV) -#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV) -#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV) -#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV) -#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV) -#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV) -#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV) -#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV) -#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV) -#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV) -#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV) -#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV) -#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV) -#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV) -#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV) -#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV) -#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV) - -#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float) - -#endif /* GL_NV_half_float */ - -/* ------------------------ GL_NV_light_max_exponent ----------------------- */ - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 - -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 - -#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent) - -#endif /* GL_NV_light_max_exponent */ - -/* ----------------------- GL_NV_multisample_coverage ---------------------- */ - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 - -#define GL_COLOR_SAMPLES_NV 0x8E20 - -#define GLEW_NV_multisample_coverage GLEW_GET_VAR(__GLEW_NV_multisample_coverage) - -#endif /* GL_NV_multisample_coverage */ - -/* --------------------- GL_NV_multisample_filter_hint --------------------- */ - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 - -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 - -#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint) - -#endif /* GL_NV_multisample_filter_hint */ - -/* ------------------------- GL_NV_occlusion_query ------------------------- */ - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 - -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 - -typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); - -#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV) -#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV) -#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV) -#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV) -#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV) -#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV) -#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV) - -#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query) - -#endif /* GL_NV_occlusion_query */ - -/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA - -#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil) - -#endif /* GL_NV_packed_depth_stencil */ - -/* --------------------- GL_NV_parameter_buffer_object --------------------- */ - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 - -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); - -#define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV) -#define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV) -#define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV) - -#define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object) - -#endif /* GL_NV_parameter_buffer_object */ - -/* --------------------- GL_NV_parameter_buffer_object2 -------------------- */ - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 - -#define GLEW_NV_parameter_buffer_object2 GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object2) - -#endif /* GL_NV_parameter_buffer_object2 */ - -/* -------------------------- GL_NV_path_rendering ------------------------- */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 - -#define GL_CLOSE_PATH_NV 0x00 -#define GL_BOLD_BIT_NV 0x01 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - -typedef void (GLAPIENTRY * PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHNVPROC) (GLuint name, GLenum coverMode); -typedef void (GLAPIENTRY * PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLuint (GLAPIENTRY * PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint* value); -typedef void (GLAPIENTRY * PFNGLGETPATHCOMMANDSNVPROC) (GLuint name, GLubyte* commands); -typedef void (GLAPIENTRY * PFNGLGETPATHCOORDSNVPROC) (GLuint name, GLfloat* coords); -typedef void (GLAPIENTRY * PFNGLGETPATHDASHARRAYNVPROC) (GLuint name, GLfloat* dashArray); -typedef GLfloat (GLAPIENTRY * PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef void (GLAPIENTRY * PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics); -typedef void (GLAPIENTRY * PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERFVNVPROC) (GLuint name, GLenum param, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERIVNVPROC) (GLuint name, GLenum param, GLint* value); -typedef void (GLAPIENTRY * PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint* value); -typedef void (GLAPIENTRY * PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef GLboolean (GLAPIENTRY * PFNGLISPATHNVPROC) (GLuint path); -typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs); -typedef void (GLAPIENTRY * PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords); -typedef void (GLAPIENTRY * PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords); -typedef void (GLAPIENTRY * PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum zfunc); -typedef void (GLAPIENTRY * PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat* dashArray); -typedef void (GLAPIENTRY * PFNGLPATHFOGGENNVPROC) (GLenum genMode); -typedef void (GLAPIENTRY * PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GLAPIENTRY * PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (GLAPIENTRY * PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void* pathString); -typedef void (GLAPIENTRY * PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords); -typedef void (GLAPIENTRY * PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords); -typedef void (GLAPIENTRY * PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs); -typedef GLboolean (GLAPIENTRY * PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (GLAPIENTRY * PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues); -typedef void (GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]); - -#define glCopyPathNV GLEW_GET_FUN(__glewCopyPathNV) -#define glCoverFillPathInstancedNV GLEW_GET_FUN(__glewCoverFillPathInstancedNV) -#define glCoverFillPathNV GLEW_GET_FUN(__glewCoverFillPathNV) -#define glCoverStrokePathInstancedNV GLEW_GET_FUN(__glewCoverStrokePathInstancedNV) -#define glCoverStrokePathNV GLEW_GET_FUN(__glewCoverStrokePathNV) -#define glDeletePathsNV GLEW_GET_FUN(__glewDeletePathsNV) -#define glGenPathsNV GLEW_GET_FUN(__glewGenPathsNV) -#define glGetPathColorGenfvNV GLEW_GET_FUN(__glewGetPathColorGenfvNV) -#define glGetPathColorGenivNV GLEW_GET_FUN(__glewGetPathColorGenivNV) -#define glGetPathCommandsNV GLEW_GET_FUN(__glewGetPathCommandsNV) -#define glGetPathCoordsNV GLEW_GET_FUN(__glewGetPathCoordsNV) -#define glGetPathDashArrayNV GLEW_GET_FUN(__glewGetPathDashArrayNV) -#define glGetPathLengthNV GLEW_GET_FUN(__glewGetPathLengthNV) -#define glGetPathMetricRangeNV GLEW_GET_FUN(__glewGetPathMetricRangeNV) -#define glGetPathMetricsNV GLEW_GET_FUN(__glewGetPathMetricsNV) -#define glGetPathParameterfvNV GLEW_GET_FUN(__glewGetPathParameterfvNV) -#define glGetPathParameterivNV GLEW_GET_FUN(__glewGetPathParameterivNV) -#define glGetPathSpacingNV GLEW_GET_FUN(__glewGetPathSpacingNV) -#define glGetPathTexGenfvNV GLEW_GET_FUN(__glewGetPathTexGenfvNV) -#define glGetPathTexGenivNV GLEW_GET_FUN(__glewGetPathTexGenivNV) -#define glInterpolatePathsNV GLEW_GET_FUN(__glewInterpolatePathsNV) -#define glIsPathNV GLEW_GET_FUN(__glewIsPathNV) -#define glIsPointInFillPathNV GLEW_GET_FUN(__glewIsPointInFillPathNV) -#define glIsPointInStrokePathNV GLEW_GET_FUN(__glewIsPointInStrokePathNV) -#define glPathColorGenNV GLEW_GET_FUN(__glewPathColorGenNV) -#define glPathCommandsNV GLEW_GET_FUN(__glewPathCommandsNV) -#define glPathCoordsNV GLEW_GET_FUN(__glewPathCoordsNV) -#define glPathCoverDepthFuncNV GLEW_GET_FUN(__glewPathCoverDepthFuncNV) -#define glPathDashArrayNV GLEW_GET_FUN(__glewPathDashArrayNV) -#define glPathFogGenNV GLEW_GET_FUN(__glewPathFogGenNV) -#define glPathGlyphRangeNV GLEW_GET_FUN(__glewPathGlyphRangeNV) -#define glPathGlyphsNV GLEW_GET_FUN(__glewPathGlyphsNV) -#define glPathParameterfNV GLEW_GET_FUN(__glewPathParameterfNV) -#define glPathParameterfvNV GLEW_GET_FUN(__glewPathParameterfvNV) -#define glPathParameteriNV GLEW_GET_FUN(__glewPathParameteriNV) -#define glPathParameterivNV GLEW_GET_FUN(__glewPathParameterivNV) -#define glPathStencilDepthOffsetNV GLEW_GET_FUN(__glewPathStencilDepthOffsetNV) -#define glPathStencilFuncNV GLEW_GET_FUN(__glewPathStencilFuncNV) -#define glPathStringNV GLEW_GET_FUN(__glewPathStringNV) -#define glPathSubCommandsNV GLEW_GET_FUN(__glewPathSubCommandsNV) -#define glPathSubCoordsNV GLEW_GET_FUN(__glewPathSubCoordsNV) -#define glPathTexGenNV GLEW_GET_FUN(__glewPathTexGenNV) -#define glPointAlongPathNV GLEW_GET_FUN(__glewPointAlongPathNV) -#define glStencilFillPathInstancedNV GLEW_GET_FUN(__glewStencilFillPathInstancedNV) -#define glStencilFillPathNV GLEW_GET_FUN(__glewStencilFillPathNV) -#define glStencilStrokePathInstancedNV GLEW_GET_FUN(__glewStencilStrokePathInstancedNV) -#define glStencilStrokePathNV GLEW_GET_FUN(__glewStencilStrokePathNV) -#define glTransformPathNV GLEW_GET_FUN(__glewTransformPathNV) -#define glWeightPathsNV GLEW_GET_FUN(__glewWeightPathsNV) - -#define GLEW_NV_path_rendering GLEW_GET_VAR(__GLEW_NV_path_rendering) - -#endif /* GL_NV_path_rendering */ - -/* ------------------------- GL_NV_pixel_data_range ------------------------ */ - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 - -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D - -typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); - -#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) -#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) - -#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range) - -#endif /* GL_NV_pixel_data_range */ - -/* --------------------------- GL_NV_point_sprite -------------------------- */ - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 - -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params); - -#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV) -#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV) - -#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite) - -#endif /* GL_NV_point_sprite */ - -/* -------------------------- GL_NV_present_video -------------------------- */ - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 - -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B - -typedef void (GLAPIENTRY * PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); - -#define glGetVideoi64vNV GLEW_GET_FUN(__glewGetVideoi64vNV) -#define glGetVideoivNV GLEW_GET_FUN(__glewGetVideoivNV) -#define glGetVideoui64vNV GLEW_GET_FUN(__glewGetVideoui64vNV) -#define glGetVideouivNV GLEW_GET_FUN(__glewGetVideouivNV) -#define glPresentFrameDualFillNV GLEW_GET_FUN(__glewPresentFrameDualFillNV) -#define glPresentFrameKeyedNV GLEW_GET_FUN(__glewPresentFrameKeyedNV) - -#define GLEW_NV_present_video GLEW_GET_VAR(__GLEW_NV_present_video) - -#endif /* GL_NV_present_video */ - -/* ------------------------ GL_NV_primitive_restart ------------------------ */ - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 - -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 - -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void); - -#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV) -#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV) - -#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart) - -#endif /* GL_NV_primitive_restart */ - -/* ------------------------ GL_NV_register_combiners ----------------------- */ - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 - -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 - -typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params); - -#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV) -#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV) -#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV) -#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV) -#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV) -#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV) -#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV) -#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV) -#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV) -#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV) -#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV) -#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV) -#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV) - -#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners) - -#endif /* GL_NV_register_combiners */ - -/* ----------------------- GL_NV_register_combiners2 ----------------------- */ - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 - -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 - -typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params); - -#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV) -#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV) - -#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2) - -#endif /* GL_NV_register_combiners2 */ - -/* ---------------------- GL_NV_shader_atomic_counters --------------------- */ - -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 - -#define GLEW_NV_shader_atomic_counters GLEW_GET_VAR(__GLEW_NV_shader_atomic_counters) - -#endif /* GL_NV_shader_atomic_counters */ - -/* ----------------------- GL_NV_shader_atomic_float ----------------------- */ - -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 - -#define GLEW_NV_shader_atomic_float GLEW_GET_VAR(__GLEW_NV_shader_atomic_float) - -#endif /* GL_NV_shader_atomic_float */ - -/* ------------------------ GL_NV_shader_buffer_load ----------------------- */ - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 - -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 - -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT* result); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT* params); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); - -#define glGetBufferParameterui64vNV GLEW_GET_FUN(__glewGetBufferParameterui64vNV) -#define glGetIntegerui64vNV GLEW_GET_FUN(__glewGetIntegerui64vNV) -#define glGetNamedBufferParameterui64vNV GLEW_GET_FUN(__glewGetNamedBufferParameterui64vNV) -#define glIsBufferResidentNV GLEW_GET_FUN(__glewIsBufferResidentNV) -#define glIsNamedBufferResidentNV GLEW_GET_FUN(__glewIsNamedBufferResidentNV) -#define glMakeBufferNonResidentNV GLEW_GET_FUN(__glewMakeBufferNonResidentNV) -#define glMakeBufferResidentNV GLEW_GET_FUN(__glewMakeBufferResidentNV) -#define glMakeNamedBufferNonResidentNV GLEW_GET_FUN(__glewMakeNamedBufferNonResidentNV) -#define glMakeNamedBufferResidentNV GLEW_GET_FUN(__glewMakeNamedBufferResidentNV) -#define glProgramUniformui64NV GLEW_GET_FUN(__glewProgramUniformui64NV) -#define glProgramUniformui64vNV GLEW_GET_FUN(__glewProgramUniformui64vNV) -#define glUniformui64NV GLEW_GET_FUN(__glewUniformui64NV) -#define glUniformui64vNV GLEW_GET_FUN(__glewUniformui64vNV) - -#define GLEW_NV_shader_buffer_load GLEW_GET_VAR(__GLEW_NV_shader_buffer_load) - -#endif /* GL_NV_shader_buffer_load */ - -/* ------------------- GL_NV_shader_storage_buffer_object ------------------ */ - -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 - -#define GLEW_NV_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_NV_shader_storage_buffer_object) - -#endif /* GL_NV_shader_storage_buffer_object */ - -/* ---------------------- GL_NV_tessellation_program5 ---------------------- */ - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 - -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 - -#define GLEW_NV_tessellation_program5 GLEW_GET_VAR(__GLEW_NV_tessellation_program5) - -#endif /* GL_NV_tessellation_program5 */ - -/* -------------------------- GL_NV_texgen_emboss -------------------------- */ - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 - -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F - -#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss) - -#endif /* GL_NV_texgen_emboss */ - -/* ------------------------ GL_NV_texgen_reflection ------------------------ */ - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 - -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 - -#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection) - -#endif /* GL_NV_texgen_reflection */ - -/* ------------------------- GL_NV_texture_barrier ------------------------- */ - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 - -typedef void (GLAPIENTRY * PFNGLTEXTUREBARRIERNVPROC) (void); - -#define glTextureBarrierNV GLEW_GET_FUN(__glewTextureBarrierNV) - -#define GLEW_NV_texture_barrier GLEW_GET_VAR(__GLEW_NV_texture_barrier) - -#endif /* GL_NV_texture_barrier */ - -/* --------------------- GL_NV_texture_compression_vtc --------------------- */ - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 - -#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc) - -#endif /* GL_NV_texture_compression_vtc */ - -/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 - -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B - -#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4) - -#endif /* GL_NV_texture_env_combine4 */ - -/* ---------------------- GL_NV_texture_expand_normal ---------------------- */ - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 - -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F - -#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal) - -#endif /* GL_NV_texture_expand_normal */ - -/* ----------------------- GL_NV_texture_multisample ----------------------- */ - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 - -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); - -#define glTexImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage2DMultisampleCoverageNV) -#define glTexImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage3DMultisampleCoverageNV) -#define glTextureImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage2DMultisampleCoverageNV) -#define glTextureImage2DMultisampleNV GLEW_GET_FUN(__glewTextureImage2DMultisampleNV) -#define glTextureImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage3DMultisampleCoverageNV) -#define glTextureImage3DMultisampleNV GLEW_GET_FUN(__glewTextureImage3DMultisampleNV) - -#define GLEW_NV_texture_multisample GLEW_GET_VAR(__GLEW_NV_texture_multisample) - -#endif /* GL_NV_texture_multisample */ - -/* ------------------------ GL_NV_texture_rectangle ------------------------ */ - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 - -#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle) - -#endif /* GL_NV_texture_rectangle */ - -/* -------------------------- GL_NV_texture_shader ------------------------- */ - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 - -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F - -#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader) - -#endif /* GL_NV_texture_shader */ - -/* ------------------------- GL_NV_texture_shader2 ------------------------- */ - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 - -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D - -#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2) - -#endif /* GL_NV_texture_shader2 */ - -/* ------------------------- GL_NV_texture_shader3 ------------------------- */ - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 - -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 - -#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3) - -#endif /* GL_NV_texture_shader3 */ - -/* ------------------------ GL_NV_transform_feedback ----------------------- */ - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 - -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - -typedef void (GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef GLint (GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); - -#define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV) -#define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV) -#define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV) -#define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV) -#define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV) -#define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV) -#define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV) -#define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV) -#define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV) -#define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV) -#define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV) - -#define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback) - -#endif /* GL_NV_transform_feedback */ - -/* ----------------------- GL_NV_transform_feedback2 ----------------------- */ - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 - -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 - -typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint* ids); -typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); - -#define glBindTransformFeedbackNV GLEW_GET_FUN(__glewBindTransformFeedbackNV) -#define glDeleteTransformFeedbacksNV GLEW_GET_FUN(__glewDeleteTransformFeedbacksNV) -#define glDrawTransformFeedbackNV GLEW_GET_FUN(__glewDrawTransformFeedbackNV) -#define glGenTransformFeedbacksNV GLEW_GET_FUN(__glewGenTransformFeedbacksNV) -#define glIsTransformFeedbackNV GLEW_GET_FUN(__glewIsTransformFeedbackNV) -#define glPauseTransformFeedbackNV GLEW_GET_FUN(__glewPauseTransformFeedbackNV) -#define glResumeTransformFeedbackNV GLEW_GET_FUN(__glewResumeTransformFeedbackNV) - -#define GLEW_NV_transform_feedback2 GLEW_GET_VAR(__GLEW_NV_transform_feedback2) - -#endif /* GL_NV_transform_feedback2 */ - -/* -------------------------- GL_NV_vdpau_interop -------------------------- */ - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 - -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE - -typedef GLintptr GLvdpauSurfaceNV; - -typedef void (GLAPIENTRY * PFNGLVDPAUFININVPROC) (void); -typedef void (GLAPIENTRY * PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values); -typedef void (GLAPIENTRY * PFNGLVDPAUINITNVPROC) (const void* vdpDevice, const GLvoid*getProcAddress); -typedef void (GLAPIENTRY * PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (GLAPIENTRY * PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces); -typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef void (GLAPIENTRY * PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (GLAPIENTRY * PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces); -typedef void (GLAPIENTRY * PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); - -#define glVDPAUFiniNV GLEW_GET_FUN(__glewVDPAUFiniNV) -#define glVDPAUGetSurfaceivNV GLEW_GET_FUN(__glewVDPAUGetSurfaceivNV) -#define glVDPAUInitNV GLEW_GET_FUN(__glewVDPAUInitNV) -#define glVDPAUIsSurfaceNV GLEW_GET_FUN(__glewVDPAUIsSurfaceNV) -#define glVDPAUMapSurfacesNV GLEW_GET_FUN(__glewVDPAUMapSurfacesNV) -#define glVDPAURegisterOutputSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterOutputSurfaceNV) -#define glVDPAURegisterVideoSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterVideoSurfaceNV) -#define glVDPAUSurfaceAccessNV GLEW_GET_FUN(__glewVDPAUSurfaceAccessNV) -#define glVDPAUUnmapSurfacesNV GLEW_GET_FUN(__glewVDPAUUnmapSurfacesNV) -#define glVDPAUUnregisterSurfaceNV GLEW_GET_FUN(__glewVDPAUUnregisterSurfaceNV) - -#define GLEW_NV_vdpau_interop GLEW_GET_VAR(__GLEW_NV_vdpau_interop) - -#endif /* GL_NV_vdpau_interop */ - -/* ------------------------ GL_NV_vertex_array_range ----------------------- */ - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 - -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 - -typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, GLvoid *pointer); - -#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) -#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) - -#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range) - -#endif /* GL_NV_vertex_array_range */ - -/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 - -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 - -#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2) - -#endif /* GL_NV_vertex_array_range2 */ - -/* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */ - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 - -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); - -#define glGetVertexAttribLi64vNV GLEW_GET_FUN(__glewGetVertexAttribLi64vNV) -#define glGetVertexAttribLui64vNV GLEW_GET_FUN(__glewGetVertexAttribLui64vNV) -#define glVertexAttribL1i64NV GLEW_GET_FUN(__glewVertexAttribL1i64NV) -#define glVertexAttribL1i64vNV GLEW_GET_FUN(__glewVertexAttribL1i64vNV) -#define glVertexAttribL1ui64NV GLEW_GET_FUN(__glewVertexAttribL1ui64NV) -#define glVertexAttribL1ui64vNV GLEW_GET_FUN(__glewVertexAttribL1ui64vNV) -#define glVertexAttribL2i64NV GLEW_GET_FUN(__glewVertexAttribL2i64NV) -#define glVertexAttribL2i64vNV GLEW_GET_FUN(__glewVertexAttribL2i64vNV) -#define glVertexAttribL2ui64NV GLEW_GET_FUN(__glewVertexAttribL2ui64NV) -#define glVertexAttribL2ui64vNV GLEW_GET_FUN(__glewVertexAttribL2ui64vNV) -#define glVertexAttribL3i64NV GLEW_GET_FUN(__glewVertexAttribL3i64NV) -#define glVertexAttribL3i64vNV GLEW_GET_FUN(__glewVertexAttribL3i64vNV) -#define glVertexAttribL3ui64NV GLEW_GET_FUN(__glewVertexAttribL3ui64NV) -#define glVertexAttribL3ui64vNV GLEW_GET_FUN(__glewVertexAttribL3ui64vNV) -#define glVertexAttribL4i64NV GLEW_GET_FUN(__glewVertexAttribL4i64NV) -#define glVertexAttribL4i64vNV GLEW_GET_FUN(__glewVertexAttribL4i64vNV) -#define glVertexAttribL4ui64NV GLEW_GET_FUN(__glewVertexAttribL4ui64NV) -#define glVertexAttribL4ui64vNV GLEW_GET_FUN(__glewVertexAttribL4ui64vNV) -#define glVertexAttribLFormatNV GLEW_GET_FUN(__glewVertexAttribLFormatNV) - -#define GLEW_NV_vertex_attrib_integer_64bit GLEW_GET_VAR(__GLEW_NV_vertex_attrib_integer_64bit) - -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -/* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */ - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 - -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 - -typedef void (GLAPIENTRY * PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT result[]); -typedef void (GLAPIENTRY * PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); - -#define glBufferAddressRangeNV GLEW_GET_FUN(__glewBufferAddressRangeNV) -#define glColorFormatNV GLEW_GET_FUN(__glewColorFormatNV) -#define glEdgeFlagFormatNV GLEW_GET_FUN(__glewEdgeFlagFormatNV) -#define glFogCoordFormatNV GLEW_GET_FUN(__glewFogCoordFormatNV) -#define glGetIntegerui64i_vNV GLEW_GET_FUN(__glewGetIntegerui64i_vNV) -#define glIndexFormatNV GLEW_GET_FUN(__glewIndexFormatNV) -#define glNormalFormatNV GLEW_GET_FUN(__glewNormalFormatNV) -#define glSecondaryColorFormatNV GLEW_GET_FUN(__glewSecondaryColorFormatNV) -#define glTexCoordFormatNV GLEW_GET_FUN(__glewTexCoordFormatNV) -#define glVertexAttribFormatNV GLEW_GET_FUN(__glewVertexAttribFormatNV) -#define glVertexAttribIFormatNV GLEW_GET_FUN(__glewVertexAttribIFormatNV) -#define glVertexFormatNV GLEW_GET_FUN(__glewVertexFormatNV) - -#define GLEW_NV_vertex_buffer_unified_memory GLEW_GET_VAR(__GLEW_NV_vertex_buffer_unified_memory) - -#endif /* GL_NV_vertex_buffer_unified_memory */ - -/* -------------------------- GL_NV_vertex_program ------------------------- */ - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 - -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F - -typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences); -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v); - -#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV) -#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV) -#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV) -#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV) -#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV) -#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV) -#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV) -#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV) -#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV) -#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV) -#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV) -#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV) -#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV) -#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV) -#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV) -#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV) -#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV) -#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV) -#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV) -#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV) -#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV) -#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV) -#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV) -#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV) -#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV) -#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV) -#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV) -#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV) -#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV) -#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV) -#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV) -#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV) -#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV) -#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV) -#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV) -#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV) -#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV) -#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV) -#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV) -#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV) -#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV) -#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV) -#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV) -#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV) -#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV) -#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV) -#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV) -#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV) -#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV) -#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV) -#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV) -#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV) -#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV) -#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV) -#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV) -#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV) -#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV) -#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV) -#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV) -#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV) -#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV) -#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV) -#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV) -#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV) - -#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program) - -#endif /* GL_NV_vertex_program */ - -/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 - -#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1) - -#endif /* GL_NV_vertex_program1_1 */ - -/* ------------------------- GL_NV_vertex_program2 ------------------------- */ - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 - -#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2) - -#endif /* GL_NV_vertex_program2 */ - -/* ---------------------- GL_NV_vertex_program2_option --------------------- */ - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 - -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - -#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option) - -#endif /* GL_NV_vertex_program2_option */ - -/* ------------------------- GL_NV_vertex_program3 ------------------------- */ - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 - -#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C - -#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3) - -#endif /* GL_NV_vertex_program3 */ - -/* ------------------------- GL_NV_vertex_program4 ------------------------- */ - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 - -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD - -#define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4) - -#endif /* GL_NV_vertex_program4 */ - -/* -------------------------- GL_NV_video_capture -------------------------- */ - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 - -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C - -typedef void (GLAPIENTRY * PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (GLAPIENTRY * PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint* params); -typedef GLenum (GLAPIENTRY * PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT *capture_time); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params); - -#define glBeginVideoCaptureNV GLEW_GET_FUN(__glewBeginVideoCaptureNV) -#define glBindVideoCaptureStreamBufferNV GLEW_GET_FUN(__glewBindVideoCaptureStreamBufferNV) -#define glBindVideoCaptureStreamTextureNV GLEW_GET_FUN(__glewBindVideoCaptureStreamTextureNV) -#define glEndVideoCaptureNV GLEW_GET_FUN(__glewEndVideoCaptureNV) -#define glGetVideoCaptureStreamdvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamdvNV) -#define glGetVideoCaptureStreamfvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamfvNV) -#define glGetVideoCaptureStreamivNV GLEW_GET_FUN(__glewGetVideoCaptureStreamivNV) -#define glGetVideoCaptureivNV GLEW_GET_FUN(__glewGetVideoCaptureivNV) -#define glVideoCaptureNV GLEW_GET_FUN(__glewVideoCaptureNV) -#define glVideoCaptureStreamParameterdvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterdvNV) -#define glVideoCaptureStreamParameterfvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterfvNV) -#define glVideoCaptureStreamParameterivNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterivNV) - -#define GLEW_NV_video_capture GLEW_GET_VAR(__GLEW_NV_video_capture) - -#endif /* GL_NV_video_capture */ - -/* ------------------------ GL_OES_byte_coordinates ------------------------ */ - -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 - -#define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) - -#endif /* GL_OES_byte_coordinates */ - -/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 - -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 - -#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) - -#endif /* GL_OES_compressed_paletted_texture */ - -/* --------------------------- GL_OES_read_format -------------------------- */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 - -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B - -#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) - -#endif /* GL_OES_read_format */ - -/* ------------------------ GL_OES_single_precision ------------------------ */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampd depth); -typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); - -#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) -#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) -#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) -#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) -#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) -#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) - -#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) - -#endif /* GL_OES_single_precision */ - -/* ---------------------------- GL_OML_interlace --------------------------- */ - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 - -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 - -#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace) - -#endif /* GL_OML_interlace */ - -/* ---------------------------- GL_OML_resample ---------------------------- */ - -#ifndef GL_OML_resample -#define GL_OML_resample 1 - -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 - -#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample) - -#endif /* GL_OML_resample */ - -/* ---------------------------- GL_OML_subsample --------------------------- */ - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 - -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 - -#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample) - -#endif /* GL_OML_subsample */ - -/* --------------------------- GL_PGI_misc_hints --------------------------- */ - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 - -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 -#define GL_CONSERVE_MEMORY_HINT_PGI 107005 -#define GL_RECLAIM_MEMORY_HINT_PGI 107006 -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 -#define GL_ALWAYS_FAST_HINT_PGI 107020 -#define GL_ALWAYS_SOFT_HINT_PGI 107021 -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 -#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023 -#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030 -#define GL_STRICT_LIGHTING_HINT_PGI 107031 -#define GL_STRICT_SCISSOR_HINT_PGI 107032 -#define GL_FULL_STIPPLE_HINT_PGI 107033 -#define GL_CLIP_NEAR_HINT_PGI 107040 -#define GL_CLIP_FAR_HINT_PGI 107041 -#define GL_WIDE_LINE_HINT_PGI 107042 -#define GL_BACK_NORMALS_HINT_PGI 107043 - -#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints) - -#endif /* GL_PGI_misc_hints */ - -/* -------------------------- GL_PGI_vertex_hints -------------------------- */ - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 - -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_VERTEX_DATA_HINT_PGI 107050 -#define GL_VERTEX_CONSISTENT_HINT_PGI 107051 -#define GL_MATERIAL_SIDE_HINT_PGI 107052 -#define GL_MAX_VERTEX_HINT_PGI 107053 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 - -#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints) - -#endif /* GL_PGI_vertex_hints */ - -/* ---------------------- GL_REGAL_ES1_0_compatibility --------------------- */ - -#ifndef GL_REGAL_ES1_0_compatibility -#define GL_REGAL_ES1_0_compatibility 1 - -typedef int GLclampx; - -typedef void (GLAPIENTRY * PFNGLALPHAFUNCXPROC) (GLenum func, GLclampx ref); -typedef void (GLAPIENTRY * PFNGLCLEARCOLORXPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHXPROC) (GLclampx depth); -typedef void (GLAPIENTRY * PFNGLCOLOR4XPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEXPROC) (GLclampx zNear, GLclampx zFar); -typedef void (GLAPIENTRY * PFNGLFOGXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLFOGXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLFRUSTUMFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); -typedef void (GLAPIENTRY * PFNGLFRUSTUMXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); -typedef void (GLAPIENTRY * PFNGLLIGHTMODELXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLLIGHTMODELXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLLIGHTXPROC) (GLenum light, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLLIGHTXVPROC) (GLenum light, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLLINEWIDTHXPROC) (GLfixed width); -typedef void (GLAPIENTRY * PFNGLLOADMATRIXXPROC) (const GLfixed* m); -typedef void (GLAPIENTRY * PFNGLMATERIALXPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLMATERIALXVPROC) (GLenum face, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLMULTMATRIXXPROC) (const GLfixed* m); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (GLAPIENTRY * PFNGLNORMAL3XPROC) (GLfixed nx, GLfixed ny, GLfixed nz); -typedef void (GLAPIENTRY * PFNGLORTHOFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); -typedef void (GLAPIENTRY * PFNGLORTHOXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); -typedef void (GLAPIENTRY * PFNGLPOINTSIZEXPROC) (GLfixed size); -typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETXPROC) (GLfixed factor, GLfixed units); -typedef void (GLAPIENTRY * PFNGLROTATEXPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEXPROC) (GLclampx value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSCALEXPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (GLAPIENTRY * PFNGLTEXENVXPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLTEXENVXVPROC) (GLenum target, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLTRANSLATEXPROC) (GLfixed x, GLfixed y, GLfixed z); - -#define glAlphaFuncx GLEW_GET_FUN(__glewAlphaFuncx) -#define glClearColorx GLEW_GET_FUN(__glewClearColorx) -#define glClearDepthx GLEW_GET_FUN(__glewClearDepthx) -#define glColor4x GLEW_GET_FUN(__glewColor4x) -#define glDepthRangex GLEW_GET_FUN(__glewDepthRangex) -#define glFogx GLEW_GET_FUN(__glewFogx) -#define glFogxv GLEW_GET_FUN(__glewFogxv) -#define glFrustumf GLEW_GET_FUN(__glewFrustumf) -#define glFrustumx GLEW_GET_FUN(__glewFrustumx) -#define glLightModelx GLEW_GET_FUN(__glewLightModelx) -#define glLightModelxv GLEW_GET_FUN(__glewLightModelxv) -#define glLightx GLEW_GET_FUN(__glewLightx) -#define glLightxv GLEW_GET_FUN(__glewLightxv) -#define glLineWidthx GLEW_GET_FUN(__glewLineWidthx) -#define glLoadMatrixx GLEW_GET_FUN(__glewLoadMatrixx) -#define glMaterialx GLEW_GET_FUN(__glewMaterialx) -#define glMaterialxv GLEW_GET_FUN(__glewMaterialxv) -#define glMultMatrixx GLEW_GET_FUN(__glewMultMatrixx) -#define glMultiTexCoord4x GLEW_GET_FUN(__glewMultiTexCoord4x) -#define glNormal3x GLEW_GET_FUN(__glewNormal3x) -#define glOrthof GLEW_GET_FUN(__glewOrthof) -#define glOrthox GLEW_GET_FUN(__glewOrthox) -#define glPointSizex GLEW_GET_FUN(__glewPointSizex) -#define glPolygonOffsetx GLEW_GET_FUN(__glewPolygonOffsetx) -#define glRotatex GLEW_GET_FUN(__glewRotatex) -#define glSampleCoveragex GLEW_GET_FUN(__glewSampleCoveragex) -#define glScalex GLEW_GET_FUN(__glewScalex) -#define glTexEnvx GLEW_GET_FUN(__glewTexEnvx) -#define glTexEnvxv GLEW_GET_FUN(__glewTexEnvxv) -#define glTexParameterx GLEW_GET_FUN(__glewTexParameterx) -#define glTranslatex GLEW_GET_FUN(__glewTranslatex) - -#define GLEW_REGAL_ES1_0_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_0_compatibility) - -#endif /* GL_REGAL_ES1_0_compatibility */ - -/* ---------------------- GL_REGAL_ES1_1_compatibility --------------------- */ - -#ifndef GL_REGAL_ES1_1_compatibility -#define GL_REGAL_ES1_1_compatibility 1 - -typedef void (GLAPIENTRY * PFNGLCLIPPLANEFPROC) (GLenum plane, const GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLCLIPPLANEXPROC) (GLenum plane, const GLfixed* equation); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFPROC) (GLenum pname, GLfloat eqn[4]); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEXPROC) (GLenum pname, GLfixed eqn[4]); -typedef void (GLAPIENTRY * PFNGLGETFIXEDVPROC) (GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETLIGHTXVPROC) (GLenum light, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETMATERIALXVPROC) (GLenum face, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETTEXENVXVPROC) (GLenum env, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERXVPROC) (GLenum target, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLPOINTSIZEPOINTEROESPROC) (GLenum type, GLsizei stride, const GLvoid* pointer); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXVPROC) (GLenum target, GLenum pname, const GLfixed* params); - -#define glClipPlanef GLEW_GET_FUN(__glewClipPlanef) -#define glClipPlanex GLEW_GET_FUN(__glewClipPlanex) -#define glGetClipPlanef GLEW_GET_FUN(__glewGetClipPlanef) -#define glGetClipPlanex GLEW_GET_FUN(__glewGetClipPlanex) -#define glGetFixedv GLEW_GET_FUN(__glewGetFixedv) -#define glGetLightxv GLEW_GET_FUN(__glewGetLightxv) -#define glGetMaterialxv GLEW_GET_FUN(__glewGetMaterialxv) -#define glGetTexEnvxv GLEW_GET_FUN(__glewGetTexEnvxv) -#define glGetTexParameterxv GLEW_GET_FUN(__glewGetTexParameterxv) -#define glPointParameterx GLEW_GET_FUN(__glewPointParameterx) -#define glPointParameterxv GLEW_GET_FUN(__glewPointParameterxv) -#define glPointSizePointerOES GLEW_GET_FUN(__glewPointSizePointerOES) -#define glTexParameterxv GLEW_GET_FUN(__glewTexParameterxv) - -#define GLEW_REGAL_ES1_1_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_1_compatibility) - -#endif /* GL_REGAL_ES1_1_compatibility */ - -/* ---------------------------- GL_REGAL_enable ---------------------------- */ - -#ifndef GL_REGAL_enable -#define GL_REGAL_enable 1 - -#define GL_ERROR_REGAL 0x9322 -#define GL_DEBUG_REGAL 0x9323 -#define GL_LOG_REGAL 0x9324 -#define GL_EMULATION_REGAL 0x9325 -#define GL_DRIVER_REGAL 0x9326 -#define GL_MISSING_REGAL 0x9360 -#define GL_TRACE_REGAL 0x9361 -#define GL_CACHE_REGAL 0x9362 -#define GL_CODE_REGAL 0x9363 -#define GL_STATISTICS_REGAL 0x9364 - -#define GLEW_REGAL_enable GLEW_GET_VAR(__GLEW_REGAL_enable) - -#endif /* GL_REGAL_enable */ - -/* ------------------------- GL_REGAL_error_string ------------------------- */ - -#ifndef GL_REGAL_error_string -#define GL_REGAL_error_string 1 - -typedef const GLchar* (GLAPIENTRY * PFNGLERRORSTRINGREGALPROC) (GLenum error); - -#define glErrorStringREGAL GLEW_GET_FUN(__glewErrorStringREGAL) - -#define GLEW_REGAL_error_string GLEW_GET_VAR(__GLEW_REGAL_error_string) - -#endif /* GL_REGAL_error_string */ - -/* ------------------------ GL_REGAL_extension_query ----------------------- */ - -#ifndef GL_REGAL_extension_query -#define GL_REGAL_extension_query 1 - -typedef GLboolean (GLAPIENTRY * PFNGLGETEXTENSIONREGALPROC) (const GLchar* ext); -typedef GLboolean (GLAPIENTRY * PFNGLISSUPPORTEDREGALPROC) (const GLchar* ext); - -#define glGetExtensionREGAL GLEW_GET_FUN(__glewGetExtensionREGAL) -#define glIsSupportedREGAL GLEW_GET_FUN(__glewIsSupportedREGAL) - -#define GLEW_REGAL_extension_query GLEW_GET_VAR(__GLEW_REGAL_extension_query) - -#endif /* GL_REGAL_extension_query */ - -/* ------------------------------ GL_REGAL_log ----------------------------- */ - -#ifndef GL_REGAL_log -#define GL_REGAL_log 1 - -#define GL_LOG_ERROR_REGAL 0x9319 -#define GL_LOG_WARNING_REGAL 0x931A -#define GL_LOG_INFO_REGAL 0x931B -#define GL_LOG_APP_REGAL 0x931C -#define GL_LOG_DRIVER_REGAL 0x931D -#define GL_LOG_INTERNAL_REGAL 0x931E -#define GL_LOG_DEBUG_REGAL 0x931F -#define GL_LOG_STATUS_REGAL 0x9320 -#define GL_LOG_HTTP_REGAL 0x9321 - -typedef void (APIENTRY *GLLOGPROCREGAL)(GLenum stream, GLsizei length, const GLchar *message, GLvoid *context); - -typedef void (GLAPIENTRY * PFNGLLOGMESSAGECALLBACKREGALPROC) (GLLOGPROCREGAL callback); - -#define glLogMessageCallbackREGAL GLEW_GET_FUN(__glewLogMessageCallbackREGAL) - -#define GLEW_REGAL_log GLEW_GET_VAR(__GLEW_REGAL_log) - -#endif /* GL_REGAL_log */ - -/* ----------------------- GL_REND_screen_coordinates ---------------------- */ - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 - -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 - -#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates) - -#endif /* GL_REND_screen_coordinates */ - -/* ------------------------------- GL_S3_s3tc ------------------------------ */ - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 - -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 - -#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc) - -#endif /* GL_S3_s3tc */ - -/* -------------------------- GL_SGIS_color_range -------------------------- */ - -#ifndef GL_SGIS_color_range -#define GL_SGIS_color_range 1 - -#define GL_EXTENDED_RANGE_SGIS 0x85A5 -#define GL_MIN_RED_SGIS 0x85A6 -#define GL_MAX_RED_SGIS 0x85A7 -#define GL_MIN_GREEN_SGIS 0x85A8 -#define GL_MAX_GREEN_SGIS 0x85A9 -#define GL_MIN_BLUE_SGIS 0x85AA -#define GL_MAX_BLUE_SGIS 0x85AB -#define GL_MIN_ALPHA_SGIS 0x85AC -#define GL_MAX_ALPHA_SGIS 0x85AD - -#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range) - -#endif /* GL_SGIS_color_range */ - -/* ------------------------- GL_SGIS_detail_texture ------------------------ */ - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 - -typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points); - -#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS) -#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS) - -#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture) - -#endif /* GL_SGIS_detail_texture */ - -/* -------------------------- GL_SGIS_fog_function ------------------------- */ - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 - -typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points); - -#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS) -#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS) - -#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function) - -#endif /* GL_SGIS_fog_function */ - -/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 - -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 - -#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap) - -#endif /* GL_SGIS_generate_mipmap */ - -/* -------------------------- GL_SGIS_multisample -------------------------- */ - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 - -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC - -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); - -#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS) -#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS) - -#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample) - -#endif /* GL_SGIS_multisample */ - -/* ------------------------- GL_SGIS_pixel_texture ------------------------- */ - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 - -#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture) - -#endif /* GL_SGIS_pixel_texture */ - -/* ----------------------- GL_SGIS_point_line_texgen ----------------------- */ - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 - -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 - -#define GLEW_SGIS_point_line_texgen GLEW_GET_VAR(__GLEW_SGIS_point_line_texgen) - -#endif /* GL_SGIS_point_line_texgen */ - -/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 - -typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points); -typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); - -#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS) -#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS) - -#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture) - -#endif /* GL_SGIS_sharpen_texture */ - -/* --------------------------- GL_SGIS_texture4D --------------------------- */ - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) -#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) - -#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D) - -#endif /* GL_SGIS_texture4D */ - -/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 - -#define GL_CLAMP_TO_BORDER_SGIS 0x812D - -#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp) - -#endif /* GL_SGIS_texture_border_clamp */ - -/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 - -#define GL_CLAMP_TO_EDGE_SGIS 0x812F - -#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp) - -#endif /* GL_SGIS_texture_edge_clamp */ - -/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 - -typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights); -typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights); - -#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS) -#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS) - -#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4) - -#endif /* GL_SGIS_texture_filter4 */ - -/* -------------------------- GL_SGIS_texture_lod -------------------------- */ - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 - -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D - -#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod) - -#endif /* GL_SGIS_texture_lod */ - -/* ------------------------- GL_SGIS_texture_select ------------------------ */ - -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 - -#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select) - -#endif /* GL_SGIS_texture_select */ - -/* ----------------------------- GL_SGIX_async ----------------------------- */ - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 - -#define GL_ASYNC_MARKER_SGIX 0x8329 - -typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp); -typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); - -#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX) -#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX) -#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX) -#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX) -#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX) -#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX) - -#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async) - -#endif /* GL_SGIX_async */ - -/* ------------------------ GL_SGIX_async_histogram ------------------------ */ - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 - -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D - -#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram) - -#endif /* GL_SGIX_async_histogram */ - -/* -------------------------- GL_SGIX_async_pixel -------------------------- */ - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 - -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 - -#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel) - -#endif /* GL_SGIX_async_pixel */ - -/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 - -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 - -#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax) - -#endif /* GL_SGIX_blend_alpha_minmax */ - -/* ---------------------------- GL_SGIX_clipmap ---------------------------- */ - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 - -#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap) - -#endif /* GL_SGIX_clipmap */ - -/* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 - -#define GL_CONVOLUTION_HINT_SGIX 0x8316 - -#define GLEW_SGIX_convolution_accuracy GLEW_GET_VAR(__GLEW_SGIX_convolution_accuracy) - -#endif /* GL_SGIX_convolution_accuracy */ - -/* ------------------------- GL_SGIX_depth_texture ------------------------- */ - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 - -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 - -#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture) - -#endif /* GL_SGIX_depth_texture */ - -/* -------------------------- GL_SGIX_flush_raster ------------------------- */ - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 - -typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); - -#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX) - -#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster) - -#endif /* GL_SGIX_flush_raster */ - -/* --------------------------- GL_SGIX_fog_offset -------------------------- */ - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 - -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 - -#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset) - -#endif /* GL_SGIX_fog_offset */ - -/* -------------------------- GL_SGIX_fog_texture -------------------------- */ - -#ifndef GL_SGIX_fog_texture -#define GL_SGIX_fog_texture 1 - -#define GL_TEXTURE_FOG_SGIX 0 -#define GL_FOG_PATCHY_FACTOR_SGIX 0 -#define GL_FRAGMENT_FOG_SGIX 0 - -typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname); - -#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX) - -#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture) - -#endif /* GL_SGIX_fog_texture */ - -/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ - -#ifndef GL_SGIX_fragment_specular_lighting -#define GL_SGIX_fragment_specular_lighting 1 - -typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data); - -#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX) -#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX) -#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX) -#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX) -#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX) -#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX) -#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX) -#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX) -#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX) -#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX) -#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX) -#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX) -#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX) -#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX) -#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX) -#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX) -#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX) - -#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting) - -#endif /* GL_SGIX_fragment_specular_lighting */ - -/* --------------------------- GL_SGIX_framezoom --------------------------- */ - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 - -typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); - -#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX) - -#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom) - -#endif /* GL_SGIX_framezoom */ - -/* --------------------------- GL_SGIX_interlace --------------------------- */ - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 - -#define GL_INTERLACE_SGIX 0x8094 - -#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace) - -#endif /* GL_SGIX_interlace */ - -/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 - -#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1) - -#endif /* GL_SGIX_ir_instrument1 */ - -/* ------------------------- GL_SGIX_list_priority ------------------------- */ - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 - -#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority) - -#endif /* GL_SGIX_list_priority */ - -/* ------------------------- GL_SGIX_pixel_texture ------------------------- */ - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 - -typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); - -#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX) - -#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture) - -#endif /* GL_SGIX_pixel_texture */ - -/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ - -#ifndef GL_SGIX_pixel_texture_bits -#define GL_SGIX_pixel_texture_bits 1 - -#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits) - -#endif /* GL_SGIX_pixel_texture_bits */ - -/* ------------------------ GL_SGIX_reference_plane ------------------------ */ - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 - -typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation); - -#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX) - -#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane) - -#endif /* GL_SGIX_reference_plane */ - -/* ---------------------------- GL_SGIX_resample --------------------------- */ - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 - -#define GL_PACK_RESAMPLE_SGIX 0x842E -#define GL_UNPACK_RESAMPLE_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 - -#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample) - -#endif /* GL_SGIX_resample */ - -/* ----------------------------- GL_SGIX_shadow ---------------------------- */ - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 - -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D - -#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow) - -#endif /* GL_SGIX_shadow */ - -/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 - -#define GL_SHADOW_AMBIENT_SGIX 0x80BF - -#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient) - -#endif /* GL_SGIX_shadow_ambient */ - -/* ----------------------------- GL_SGIX_sprite ---------------------------- */ - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 - -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params); - -#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX) -#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX) -#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX) -#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX) - -#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite) - -#endif /* GL_SGIX_sprite */ - -/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 - -typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); - -#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX) - -#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer) - -#endif /* GL_SGIX_tag_sample_buffer */ - -/* ------------------------ GL_SGIX_texture_add_env ------------------------ */ - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 - -#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env) - -#endif /* GL_SGIX_texture_add_env */ - -/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 - -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B - -#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp) - -#endif /* GL_SGIX_texture_coordinate_clamp */ - -/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 - -#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias) - -#endif /* GL_SGIX_texture_lod_bias */ - -/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 - -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E - -#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer) - -#endif /* GL_SGIX_texture_multi_buffer */ - -/* ------------------------- GL_SGIX_texture_range ------------------------- */ - -#ifndef GL_SGIX_texture_range -#define GL_SGIX_texture_range 1 - -#define GL_RGB_SIGNED_SGIX 0x85E0 -#define GL_RGBA_SIGNED_SGIX 0x85E1 -#define GL_ALPHA_SIGNED_SGIX 0x85E2 -#define GL_LUMINANCE_SIGNED_SGIX 0x85E3 -#define GL_INTENSITY_SIGNED_SGIX 0x85E4 -#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 -#define GL_RGB16_SIGNED_SGIX 0x85E6 -#define GL_RGBA16_SIGNED_SGIX 0x85E7 -#define GL_ALPHA16_SIGNED_SGIX 0x85E8 -#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 -#define GL_INTENSITY16_SIGNED_SGIX 0x85EA -#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB -#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC -#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED -#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE -#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF -#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 -#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 -#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 -#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 -#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 -#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 -#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 -#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 -#define GL_MIN_LUMINANCE_SGIS 0x85F8 -#define GL_MAX_LUMINANCE_SGIS 0x85F9 -#define GL_MIN_INTENSITY_SGIS 0x85FA -#define GL_MAX_INTENSITY_SGIS 0x85FB - -#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range) - -#endif /* GL_SGIX_texture_range */ - -/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 - -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C - -#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias) - -#endif /* GL_SGIX_texture_scale_bias */ - -/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 - -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF - -#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip) - -#endif /* GL_SGIX_vertex_preclip */ - -/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ - -#ifndef GL_SGIX_vertex_preclip_hint -#define GL_SGIX_vertex_preclip_hint 1 - -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF - -#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint) - -#endif /* GL_SGIX_vertex_preclip_hint */ - -/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 - -#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb) - -#endif /* GL_SGIX_ycrcb */ - -/* -------------------------- GL_SGI_color_matrix -------------------------- */ - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 - -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB - -#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix) - -#endif /* GL_SGI_color_matrix */ - -/* --------------------------- GL_SGI_color_table -------------------------- */ - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 - -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF - -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); - -#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) -#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) -#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI) -#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI) -#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI) -#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI) -#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI) - -#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table) - -#endif /* GL_SGI_color_table */ - -/* ----------------------- GL_SGI_texture_color_table ---------------------- */ - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 - -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD - -#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table) - -#endif /* GL_SGI_texture_color_table */ - -/* ------------------------- GL_SUNX_constant_data ------------------------- */ - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 - -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 - -typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); - -#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX) - -#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data) - -#endif /* GL_SUNX_constant_data */ - -/* -------------------- GL_SUN_convolution_border_modes -------------------- */ - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 - -#define GL_WRAP_BORDER_SUN 0x81D4 - -#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes) - -#endif /* GL_SUN_convolution_border_modes */ - -/* -------------------------- GL_SUN_global_alpha -------------------------- */ - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 - -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA - -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); - -#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN) -#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN) -#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN) -#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN) -#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN) -#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN) -#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN) -#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN) - -#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha) - -#endif /* GL_SUN_global_alpha */ - -/* --------------------------- GL_SUN_mesh_array --------------------------- */ - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 - -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 - -#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array) - -#endif /* GL_SUN_mesh_array */ - -/* ------------------------ GL_SUN_read_video_pixels ----------------------- */ - -#ifndef GL_SUN_read_video_pixels -#define GL_SUN_read_video_pixels 1 - -typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); - -#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN) - -#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels) - -#endif /* GL_SUN_read_video_pixels */ - -/* --------------------------- GL_SUN_slice_accum -------------------------- */ - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 - -#define GL_SLICE_ACCUM_SUN 0x85CC - -#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum) - -#endif /* GL_SUN_slice_accum */ - -/* -------------------------- GL_SUN_triangle_list ------------------------- */ - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 - -#define GL_RESTART_SUN 0x01 -#define GL_REPLACE_MIDDLE_SUN 0x02 -#define GL_REPLACE_OLDEST_SUN 0x03 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB - -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code); - -#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN) -#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN) -#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN) -#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN) -#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN) -#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN) -#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN) - -#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list) - -#endif /* GL_SUN_triangle_list */ - -/* ----------------------------- GL_SUN_vertex ----------------------------- */ - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 - -typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v); - -#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN) -#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN) -#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN) -#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN) -#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN) -#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN) -#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN) -#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN) -#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN) -#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN) -#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN) -#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN) -#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN) -#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN) -#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN) -#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN) -#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN) -#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN) -#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN) -#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN) -#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN) -#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN) -#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN) -#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN) -#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN) -#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN) -#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN) -#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN) -#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN) -#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN) -#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN) -#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN) - -#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex) - -#endif /* GL_SUN_vertex */ - -/* -------------------------- GL_WIN_phong_shading ------------------------- */ - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 - -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB - -#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading) - -#endif /* GL_WIN_phong_shading */ - -/* -------------------------- GL_WIN_specular_fog -------------------------- */ - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 - -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC - -#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog) - -#endif /* GL_WIN_specular_fog */ - -/* ---------------------------- GL_WIN_swap_hint --------------------------- */ - -#ifndef GL_WIN_swap_hint -#define GL_WIN_swap_hint 1 - -typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height); - -#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN) - -#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint) - -#endif /* GL_WIN_swap_hint */ - -/* ------------------------------------------------------------------------- */ - -#if defined(GLEW_MX) && defined(_WIN32) -#define GLEW_FUN_EXPORT -#else -#define GLEW_FUN_EXPORT GLEWAPI -#endif /* GLEW_MX */ - -#if defined(GLEW_MX) -#define GLEW_VAR_EXPORT -#else -#define GLEW_VAR_EXPORT GLEWAPI -#endif /* GLEW_MX */ - -#if defined(GLEW_MX) && defined(_WIN32) -struct GLEWContextStruct -{ -#endif /* GLEW_MX */ - -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D; - -GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture; -GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv; -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage; - -GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate; -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer; -GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd; -GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv; -GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf; -GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv; -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery; -GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer; -GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData; -GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries; -GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery; -GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers; -GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv; -GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv; -GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv; -GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv; -GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer; -GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery; -GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer; -GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer; - -GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader; -GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate; -GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader; -GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram; -GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader; -GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray; -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray; -GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform; -GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders; -GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation; -GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv; -GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog; -GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource; -GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv; -GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation; -GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv; -GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv; -GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram; -GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader; -GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram; -GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource; -GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate; -GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate; -GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate; -GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f; -GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv; -GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i; -GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv; -GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f; -GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv; -GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i; -GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv; -GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f; -GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv; -GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i; -GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv; -GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f; -GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv; -GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i; -GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer; - -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender; -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback; -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation; -GLEW_FUN_EXPORT PFNGLCLAMPCOLORPROC __glewClampColor; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERFIPROC __glewClearBufferfi; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERFVPROC __glewClearBufferfv; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERIVPROC __glewClearBufferiv; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv; -GLEW_FUN_EXPORT PFNGLCOLORMASKIPROC __glewColorMaski; -GLEW_FUN_EXPORT PFNGLDISABLEIPROC __glewDisablei; -GLEW_FUN_EXPORT PFNGLENABLEIPROC __glewEnablei; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback; -GLEW_FUN_EXPORT PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v; -GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation; -GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC __glewGetStringi; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv; -GLEW_FUN_EXPORT PFNGLISENABLEDIPROC __glewIsEnabledi; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIPROC __glewUniform1ui; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIVPROC __glewUniform1uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIPROC __glewUniform2ui; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIVPROC __glewUniform2uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIPROC __glewUniform3ui; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIVPROC __glewUniform3uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIPROC __glewUniform4ui; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIVPROC __glewUniform4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced; -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex; -GLEW_FUN_EXPORT PFNGLTEXBUFFERPROC __glewTexBuffer; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v; -GLEW_FUN_EXPORT PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v; - -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIPROC __glewBlendEquationi; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei; -GLEW_FUN_EXPORT PFNGLBLENDFUNCIPROC __glewBlendFunci; -GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading; - -GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD; - -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD; - -GLEW_FUN_EXPORT PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD; -GLEW_FUN_EXPORT PFNGLGENNAMESAMDPROC __glewGenNamesAMD; -GLEW_FUN_EXPORT PFNGLISNAMEAMDPROC __glewIsNameAMD; - -GLEW_FUN_EXPORT PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD; -GLEW_FUN_EXPORT PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD; -GLEW_FUN_EXPORT PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD; -GLEW_FUN_EXPORT PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD; -GLEW_FUN_EXPORT PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD; - -GLEW_FUN_EXPORT PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD; - -GLEW_FUN_EXPORT PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD; - -GLEW_FUN_EXPORT PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD; -GLEW_FUN_EXPORT PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD; - -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE; -GLEW_FUN_EXPORT PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE; -GLEW_FUN_EXPORT PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE; -GLEW_FUN_EXPORT PFNGLISQUERYANGLEPROC __glewIsQueryANGLE; -GLEW_FUN_EXPORT PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE; - -GLEW_FUN_EXPORT PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE; - -GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE; -GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE; -GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE; -GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE; -GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE; -GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE; -GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE; -GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; - -GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE; -GLEW_FUN_EXPORT PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE; -GLEW_FUN_EXPORT PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE; - -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; -GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE; -GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE; -GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE; - -GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE; -GLEW_FUN_EXPORT PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHFPROC __glewClearDepthf; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEFPROC __glewDepthRangef; -GLEW_FUN_EXPORT PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat; -GLEW_FUN_EXPORT PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler; -GLEW_FUN_EXPORT PFNGLSHADERBINARYPROC __glewShaderBinary; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance; - -GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB; -GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB; -GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB; -GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB; -GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB; - -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed; -GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex; - -GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEPROC __glewBufferStorage; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT; - -GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB; - -GLEW_FUN_EXPORT PFNGLCLEARBUFFERDATAPROC __glewClearBufferData; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData; -GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT; -GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT; - -GLEW_FUN_EXPORT PFNGLCLEARTEXIMAGEPROC __glewClearTexImage; -GLEW_FUN_EXPORT PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage; - -GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; - -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute; -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect; - -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB; - -GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData; - -GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB; - -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB; -GLEW_FUN_EXPORT PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv; -GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer; -GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer; -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer; -GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus; -GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers; -GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer; -GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers; -GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers; -GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv; -GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv; -GLEW_FUN_EXPORT PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer; -GLEW_FUN_EXPORT PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary; -GLEW_FUN_EXPORT PFNGLPROGRAMBINARYPROC __glewProgramBinary; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMDVPROC __glewGetUniformdv; -GLEW_FUN_EXPORT PFNGLUNIFORM1DPROC __glewUniform1d; -GLEW_FUN_EXPORT PFNGLUNIFORM1DVPROC __glewUniform1dv; -GLEW_FUN_EXPORT PFNGLUNIFORM2DPROC __glewUniform2d; -GLEW_FUN_EXPORT PFNGLUNIFORM2DVPROC __glewUniform2dv; -GLEW_FUN_EXPORT PFNGLUNIFORM3DPROC __glewUniform3d; -GLEW_FUN_EXPORT PFNGLUNIFORM3DVPROC __glewUniform3dv; -GLEW_FUN_EXPORT PFNGLUNIFORM4DPROC __glewUniform4d; -GLEW_FUN_EXPORT PFNGLUNIFORM4DVPROC __glewUniform4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv; - -GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv; -GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable; -GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv; -GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv; -GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter; -GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram; -GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax; -GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; -GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; -GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB; - -GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ; - -GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v; - -GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData; -GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData; -GLEW_FUN_EXPORT PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer; -GLEW_FUN_EXPORT PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer; -GLEW_FUN_EXPORT PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage; -GLEW_FUN_EXPORT PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage; - -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange; -GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange; - -GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase; -GLEW_FUN_EXPORT PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange; -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures; -GLEW_FUN_EXPORT PFNGLBINDSAMPLERSPROC __glewBindSamplers; -GLEW_FUN_EXPORT PFNGLBINDTEXTURESPROC __glewBindTextures; -GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect; - -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB; - -GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB; -GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB; -GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB; -GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB; -GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB; -GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv; - -GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex; - -GLEW_FUN_EXPORT PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB; -GLEW_FUN_EXPORT PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB; -GLEW_FUN_EXPORT PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB; -GLEW_FUN_EXPORT PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB; -GLEW_FUN_EXPORT PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB; -GLEW_FUN_EXPORT PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB; -GLEW_FUN_EXPORT PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB; -GLEW_FUN_EXPORT PFNGLGETNMAPIVARBPROC __glewGetnMapivARB; -GLEW_FUN_EXPORT PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB; -GLEW_FUN_EXPORT PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB; -GLEW_FUN_EXPORT PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB; -GLEW_FUN_EXPORT PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB; -GLEW_FUN_EXPORT PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB; - -GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB; - -GLEW_FUN_EXPORT PFNGLBINDSAMPLERPROC __glewBindSampler; -GLEW_FUN_EXPORT PFNGLDELETESAMPLERSPROC __glewDeleteSamplers; -GLEW_FUN_EXPORT PFNGLGENSAMPLERSPROC __glewGenSamplers; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv; -GLEW_FUN_EXPORT PFNGLISSAMPLERPROC __glewIsSampler; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv; - -GLEW_FUN_EXPORT PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram; -GLEW_FUN_EXPORT PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines; -GLEW_FUN_EXPORT PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv; -GLEW_FUN_EXPORT PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline; - -GLEW_FUN_EXPORT PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv; - -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture; -GLEW_FUN_EXPORT PFNGLMEMORYBARRIERPROC __glewMemoryBarrier; - -GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB; -GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB; -GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB; -GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB; -GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB; -GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB; -GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB; -GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB; -GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB; -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB; -GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB; -GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB; -GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB; - -GLEW_FUN_EXPORT PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding; - -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName; -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName; -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv; -GLEW_FUN_EXPORT PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex; -GLEW_FUN_EXPORT PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation; -GLEW_FUN_EXPORT PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv; -GLEW_FUN_EXPORT PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv; - -GLEW_FUN_EXPORT PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB; -GLEW_FUN_EXPORT PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB; -GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB; -GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB; -GLEW_FUN_EXPORT PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB; -GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB; - -GLEW_FUN_EXPORT PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB; -GLEW_FUN_EXPORT PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT; - -GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync; -GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync; -GLEW_FUN_EXPORT PFNGLFENCESYNCPROC __glewFenceSync; -GLEW_FUN_EXPORT PFNGLGETINTEGER64VPROC __glewGetInteger64v; -GLEW_FUN_EXPORT PFNGLGETSYNCIVPROC __glewGetSynciv; -GLEW_FUN_EXPORT PFNGLISSYNCPROC __glewIsSync; -GLEW_FUN_EXPORT PFNGLWAITSYNCPROC __glewWaitSync; - -GLEW_FUN_EXPORT PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv; -GLEW_FUN_EXPORT PFNGLPATCHPARAMETERIPROC __glewPatchParameteri; - -GLEW_FUN_EXPORT PFNGLTEXBUFFERARBPROC __glewTexBufferARB; - -GLEW_FUN_EXPORT PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange; -GLEW_FUN_EXPORT PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT; - -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB; - -GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv; -GLEW_FUN_EXPORT PFNGLSAMPLEMASKIPROC __glewSampleMaski; -GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DPROC __glewTexStorage1D; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DPROC __glewTexStorage2D; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DPROC __glewTexStorage3D; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT; - -GLEW_FUN_EXPORT PFNGLTEXTUREVIEWPROC __glewTextureView; - -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v; -GLEW_FUN_EXPORT PFNGLQUERYCOUNTERPROC __glewQueryCounter; - -GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback; -GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback; -GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks; -GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback; -GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback; -GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream; -GLEW_FUN_EXPORT PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed; -GLEW_FUN_EXPORT PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv; - -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced; - -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEPROC __glewBindBufferBase; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv; -GLEW_FUN_EXPORT PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v; -GLEW_FUN_EXPORT PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex; -GLEW_FUN_EXPORT PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices; -GLEW_FUN_EXPORT PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays; -GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays; -GLEW_FUN_EXPORT PFNGLISVERTEXARRAYPROC __glewIsVertexArray; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat; -GLEW_FUN_EXPORT PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor; - -GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB; -GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB; -GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB; -GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB; -GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB; -GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB; -GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB; -GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB; -GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB; -GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB; - -GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB; -GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB; -GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB; - -GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB; -GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB; -GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB; - -GLEW_FUN_EXPORT PFNGLCOLORP3UIPROC __glewColorP3ui; -GLEW_FUN_EXPORT PFNGLCOLORP3UIVPROC __glewColorP3uiv; -GLEW_FUN_EXPORT PFNGLCOLORP4UIPROC __glewColorP4ui; -GLEW_FUN_EXPORT PFNGLCOLORP4UIVPROC __glewColorP4uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv; -GLEW_FUN_EXPORT PFNGLNORMALP3UIPROC __glewNormalP3ui; -GLEW_FUN_EXPORT PFNGLNORMALP3UIVPROC __glewNormalP3uiv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP2UIPROC __glewVertexP2ui; -GLEW_FUN_EXPORT PFNGLVERTEXP2UIVPROC __glewVertexP2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP3UIPROC __glewVertexP3ui; -GLEW_FUN_EXPORT PFNGLVERTEXP3UIVPROC __glewVertexP3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP4UIPROC __glewVertexP4ui; -GLEW_FUN_EXPORT PFNGLVERTEXP4UIVPROC __glewVertexP4uiv; - -GLEW_FUN_EXPORT PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed; -GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v; -GLEW_FUN_EXPORT PFNGLGETFLOATI_VPROC __glewGetFloati_v; -GLEW_FUN_EXPORT PFNGLSCISSORARRAYVPROC __glewScissorArrayv; -GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDPROC __glewScissorIndexed; -GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv; -GLEW_FUN_EXPORT PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv; -GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf; -GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv; - -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB; - -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI; -GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI; - -GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI; -GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI; -GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI; -GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI; - -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI; -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI; -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI; -GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI; -GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI; -GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI; -GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI; -GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI; - -GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI; -GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI; - -GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI; -GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI; - -GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI; -GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI; - -GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI; -GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI; -GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI; -GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI; -GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI; -GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI; -GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI; -GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI; - -GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI; -GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI; -GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; -GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; -GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; - -GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; - -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; - -GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; -GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; - -GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT; -GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT; - -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT; -GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; - -GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; -GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; - -GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT; - -GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT; -GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT; - -GLEW_FUN_EXPORT PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT; -GLEW_FUN_EXPORT PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT; -GLEW_FUN_EXPORT PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT; - -GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT; - -GLEW_FUN_EXPORT PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT; -GLEW_FUN_EXPORT PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT; -GLEW_FUN_EXPORT PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT; -GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT; -GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT; -GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT; -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT; -GLEW_FUN_EXPORT PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT; -GLEW_FUN_EXPORT PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT; -GLEW_FUN_EXPORT PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT; -GLEW_FUN_EXPORT PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT; -GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT; -GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT; -GLEW_FUN_EXPORT PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT; -GLEW_FUN_EXPORT PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT; -GLEW_FUN_EXPORT PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT; -GLEW_FUN_EXPORT PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT; -GLEW_FUN_EXPORT PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT; -GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT; -GLEW_FUN_EXPORT PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT; - -GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; -GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; -GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; -GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; -GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; - -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; - -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT; - -GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT; -GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT; - -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT; -GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT; -GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT; -GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT; -GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT; -GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT; -GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT; -GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT; - -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT; - -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT; -GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT; -GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT; -GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT; -GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT; - -GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; - -GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; - -GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; -GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; - -GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; -GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; - -GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT; - -GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT; - -GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT; - -GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT; - -GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT; -GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT; - -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; - -GLEW_FUN_EXPORT PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT; -GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT; - -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT; -GLEW_FUN_EXPORT PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT; - -GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; - -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT; - -GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT; - -GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT; -GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT; - -GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT; -GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT; -GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT; -GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT; -GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; - -GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; - -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; - -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT; - -GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT; -GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT; -GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT; -GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT; -GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT; -GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT; - -GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT; -GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT; -GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT; -GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT; -GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT; -GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT; -GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT; -GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT; -GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT; -GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT; -GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT; -GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT; -GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT; -GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT; -GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT; -GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT; -GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT; - -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; - -GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT; - -GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY; - -GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY; - -GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP; -GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP; - -GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM; -GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM; - -GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM; -GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM; -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM; -GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM; -GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; - -GLEW_FUN_EXPORT PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL; -GLEW_FUN_EXPORT PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL; -GLEW_FUN_EXPORT PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL; - -GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; -GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL; - -GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL; -GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog; -GLEW_FUN_EXPORT PFNGLGETOBJECTLABELPROC __glewGetObjectLabel; -GLEW_FUN_EXPORT PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel; -GLEW_FUN_EXPORT PFNGLOBJECTLABELPROC __glewObjectLabel; -GLEW_FUN_EXPORT PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel; -GLEW_FUN_EXPORT PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup; -GLEW_FUN_EXPORT PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup; - -GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion; -GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion; -GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion; -GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion; - -GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA; - -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV; - -GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV; -GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV; -GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV; -GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV; -GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV; - -GLEW_FUN_EXPORT PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV; -GLEW_FUN_EXPORT PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV; - -GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; -GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; - -GLEW_FUN_EXPORT PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV; - -GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; -GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; -GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV; -GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV; -GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV; -GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV; -GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV; - -GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV; -GLEW_FUN_EXPORT PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV; -GLEW_FUN_EXPORT PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV; - -GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV; -GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV; -GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV; -GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV; -GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV; -GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV; -GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV; - -GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV; -GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV; -GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV; -GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV; -GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV; -GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV; -GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV; -GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV; -GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; - -GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; -GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; -GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; -GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV; -GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV; -GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV; -GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV; - -GLEW_FUN_EXPORT PFNGLCOPYPATHNVPROC __glewCopyPathNV; -GLEW_FUN_EXPORT PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV; -GLEW_FUN_EXPORT PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV; -GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV; -GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV; -GLEW_FUN_EXPORT PFNGLDELETEPATHSNVPROC __glewDeletePathsNV; -GLEW_FUN_EXPORT PFNGLGENPATHSNVPROC __glewGenPathsNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV; -GLEW_FUN_EXPORT PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV; -GLEW_FUN_EXPORT PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV; -GLEW_FUN_EXPORT PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV; -GLEW_FUN_EXPORT PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV; -GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV; -GLEW_FUN_EXPORT PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV; -GLEW_FUN_EXPORT PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV; -GLEW_FUN_EXPORT PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV; -GLEW_FUN_EXPORT PFNGLISPATHNVPROC __glewIsPathNV; -GLEW_FUN_EXPORT PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV; -GLEW_FUN_EXPORT PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV; -GLEW_FUN_EXPORT PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV; -GLEW_FUN_EXPORT PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV; -GLEW_FUN_EXPORT PFNGLPATHCOORDSNVPROC __glewPathCoordsNV; -GLEW_FUN_EXPORT PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV; -GLEW_FUN_EXPORT PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV; -GLEW_FUN_EXPORT PFNGLPATHFOGGENNVPROC __glewPathFogGenNV; -GLEW_FUN_EXPORT PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV; -GLEW_FUN_EXPORT PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV; -GLEW_FUN_EXPORT PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV; -GLEW_FUN_EXPORT PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV; -GLEW_FUN_EXPORT PFNGLPATHSTRINGNVPROC __glewPathStringNV; -GLEW_FUN_EXPORT PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV; -GLEW_FUN_EXPORT PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV; -GLEW_FUN_EXPORT PFNGLPATHTEXGENNVPROC __glewPathTexGenNV; -GLEW_FUN_EXPORT PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV; -GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV; -GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV; -GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV; -GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV; -GLEW_FUN_EXPORT PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV; - -GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV; -GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; - -GLEW_FUN_EXPORT PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV; -GLEW_FUN_EXPORT PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV; -GLEW_FUN_EXPORT PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV; - -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV; -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV; - -GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV; -GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV; -GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV; -GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV; - -GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV; - -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV; -GLEW_FUN_EXPORT PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV; -GLEW_FUN_EXPORT PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV; -GLEW_FUN_EXPORT PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV; -GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORMUI64NVPROC __glewUniformui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV; - -GLEW_FUN_EXPORT PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV; - -GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV; -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV; -GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV; - -GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV; -GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV; - -GLEW_FUN_EXPORT PFNGLVDPAUFININVPROC __glewVDPAUFiniNV; -GLEW_FUN_EXPORT PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV; -GLEW_FUN_EXPORT PFNGLVDPAUINITNVPROC __glewVDPAUInitNV; -GLEW_FUN_EXPORT PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV; -GLEW_FUN_EXPORT PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV; -GLEW_FUN_EXPORT PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV; -GLEW_FUN_EXPORT PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV; - -GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV; - -GLEW_FUN_EXPORT PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV; -GLEW_FUN_EXPORT PFNGLCOLORFORMATNVPROC __glewColorFormatNV; -GLEW_FUN_EXPORT PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV; -GLEW_FUN_EXPORT PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV; -GLEW_FUN_EXPORT PFNGLINDEXFORMATNVPROC __glewIndexFormatNV; -GLEW_FUN_EXPORT PFNGLNORMALFORMATNVPROC __glewNormalFormatNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV; -GLEW_FUN_EXPORT PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV; - -GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV; -GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV; -GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV; -GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV; -GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV; -GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV; -GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV; -GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV; -GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV; - -GLEW_FUN_EXPORT PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV; -GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV; -GLEW_FUN_EXPORT PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; -GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; -GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; -GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; - -GLEW_FUN_EXPORT PFNGLALPHAFUNCXPROC __glewAlphaFuncx; -GLEW_FUN_EXPORT PFNGLCLEARCOLORXPROC __glewClearColorx; -GLEW_FUN_EXPORT PFNGLCLEARDEPTHXPROC __glewClearDepthx; -GLEW_FUN_EXPORT PFNGLCOLOR4XPROC __glewColor4x; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEXPROC __glewDepthRangex; -GLEW_FUN_EXPORT PFNGLFOGXPROC __glewFogx; -GLEW_FUN_EXPORT PFNGLFOGXVPROC __glewFogxv; -GLEW_FUN_EXPORT PFNGLFRUSTUMFPROC __glewFrustumf; -GLEW_FUN_EXPORT PFNGLFRUSTUMXPROC __glewFrustumx; -GLEW_FUN_EXPORT PFNGLLIGHTMODELXPROC __glewLightModelx; -GLEW_FUN_EXPORT PFNGLLIGHTMODELXVPROC __glewLightModelxv; -GLEW_FUN_EXPORT PFNGLLIGHTXPROC __glewLightx; -GLEW_FUN_EXPORT PFNGLLIGHTXVPROC __glewLightxv; -GLEW_FUN_EXPORT PFNGLLINEWIDTHXPROC __glewLineWidthx; -GLEW_FUN_EXPORT PFNGLLOADMATRIXXPROC __glewLoadMatrixx; -GLEW_FUN_EXPORT PFNGLMATERIALXPROC __glewMaterialx; -GLEW_FUN_EXPORT PFNGLMATERIALXVPROC __glewMaterialxv; -GLEW_FUN_EXPORT PFNGLMULTMATRIXXPROC __glewMultMatrixx; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x; -GLEW_FUN_EXPORT PFNGLNORMAL3XPROC __glewNormal3x; -GLEW_FUN_EXPORT PFNGLORTHOFPROC __glewOrthof; -GLEW_FUN_EXPORT PFNGLORTHOXPROC __glewOrthox; -GLEW_FUN_EXPORT PFNGLPOINTSIZEXPROC __glewPointSizex; -GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx; -GLEW_FUN_EXPORT PFNGLROTATEXPROC __glewRotatex; -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex; -GLEW_FUN_EXPORT PFNGLSCALEXPROC __glewScalex; -GLEW_FUN_EXPORT PFNGLTEXENVXPROC __glewTexEnvx; -GLEW_FUN_EXPORT PFNGLTEXENVXVPROC __glewTexEnvxv; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERXPROC __glewTexParameterx; -GLEW_FUN_EXPORT PFNGLTRANSLATEXPROC __glewTranslatex; - -GLEW_FUN_EXPORT PFNGLCLIPPLANEFPROC __glewClipPlanef; -GLEW_FUN_EXPORT PFNGLCLIPPLANEXPROC __glewClipPlanex; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex; -GLEW_FUN_EXPORT PFNGLGETFIXEDVPROC __glewGetFixedv; -GLEW_FUN_EXPORT PFNGLGETLIGHTXVPROC __glewGetLightxv; -GLEW_FUN_EXPORT PFNGLGETMATERIALXVPROC __glewGetMaterialxv; -GLEW_FUN_EXPORT PFNGLGETTEXENVXVPROC __glewGetTexEnvxv; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXPROC __glewPointParameterx; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv; -GLEW_FUN_EXPORT PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERXVPROC __glewTexParameterxv; - -GLEW_FUN_EXPORT PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL; - -GLEW_FUN_EXPORT PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL; -GLEW_FUN_EXPORT PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL; - -GLEW_FUN_EXPORT PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL; - -GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; -GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; - -GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS; -GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; - -GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; -GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; - -GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; -GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS; - -GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS; -GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS; - -GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX; -GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX; -GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX; -GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; -GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; -GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; - -GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; - -GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; - -GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX; - -GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; - -GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; - -GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; - -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; - -GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; - -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; -GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; -GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; - -GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; - -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN; - -GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN; - -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN; - -GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN; - -GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN; - -#if defined(GLEW_MX) && !defined(_WIN32) -struct GLEWContextStruct -{ -#endif /* GLEW_MX */ - -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_4; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_blend_minmax_factor; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_interleaved_elements; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_pinned_memory; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_trinary_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sparse_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_blit; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_instanced_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_pack_reverse_row_order; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_program_binary; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt1; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt3; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt5; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_usage; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_translated_shader_source; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_object_purgeable; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_rgb_422; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_row_bytes; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_program_evaluators; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES2_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES3_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_arrays_of_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_base_instance; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_bindless_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_blend_func_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_buffer_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_cl_event; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compressed_texture_pixel_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_variable_group_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_conservative_depth; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_image; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_debug_output; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_elements_base_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_enhanced_layouts; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_attrib_location; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_uniform_location; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_coord_conventions; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_layer_viewport; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_no_attachments; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_program_binary; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader5; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_indirect_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_invalidate_subdata; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_alignment; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_bind; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_program_interface_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_query_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robust_buffer_access_behavior; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_application_isolation; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_share_group_isolation; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sample_shading; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sampler_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cubemap_per_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_separate_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_atomic_counters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_bit_encoding; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_draw_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_group_vote; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_load_store; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_precision; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_stencil_export; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_storage_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_subroutine; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_420pack; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_include; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_packing; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_stencil_texturing; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object_rgb32; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_bptc; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_rgtc; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_levels; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rg; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rgb10_a2ui; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_stencil8; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_swizzle; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_view; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback3; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_uniform_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_binding; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_meminfo; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_debug_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_direct_state_access; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_provoking_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_decode; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_snorm; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_swizzle; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object; -GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; -GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; -GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_map_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; -GLEW_VAR_EXPORT GLboolean __GLEW_KHR_debug; -GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_ldr; -GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region; -GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NVX_conditional_render; -GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced_coherent; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_compute_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_deep_texture3D; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5_mem_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_coverage; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_barrier; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vdpau_interop; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_attrib_integer_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_buffer_unified_memory; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; -GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; -GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_0_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_1_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_enable; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_error_string; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_extension_query; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_log; -GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; -GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_point_line_texgen; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_convolution_accuracy; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; - -#ifdef GLEW_MX -}; /* GLEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------- */ - -/* error codes */ -#define GLEW_OK 0 -#define GLEW_NO_ERROR 0 -#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ -#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ -#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ - -/* string codes */ -#define GLEW_VERSION 1 -#define GLEW_VERSION_MAJOR 2 -#define GLEW_VERSION_MINOR 3 -#define GLEW_VERSION_MICRO 4 - -/* API */ -#ifdef GLEW_MX - -typedef struct GLEWContextStruct GLEWContext; -GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name); - -#define glewInit() glewContextInit(glewGetContext()) -#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) -#ifdef _WIN32 -# define GLEW_GET_FUN(x) glewGetContext()->x -#else -# define GLEW_GET_FUN(x) x -#endif - -#else /* GLEW_MX */ - -GLEWAPI GLenum GLEWAPIENTRY glewInit (void); -GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLEW_GET_FUN(x) x - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean glewExperimental; -GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString (GLenum name); - -#ifdef __cplusplus -} -#endif - -#ifdef GLEW_APIENTRY_DEFINED -#undef GLEW_APIENTRY_DEFINED -#undef APIENTRY -#undef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifdef GLEW_CALLBACK_DEFINED -#undef GLEW_CALLBACK_DEFINED -#undef CALLBACK -#endif - -#ifdef GLEW_WINGDIAPI_DEFINED -#undef GLEW_WINGDIAPI_DEFINED -#undef WINGDIAPI -#endif - -#undef GLAPI -/* #undef GLEWAPI */ - -#endif /* __glew_h__ */ diff --git a/Engine/lib/glew/include/GL/glxew.h b/Engine/lib/glew/include/GL/glxew.h deleted file mode 100644 index 76a5f0d82a..0000000000 --- a/Engine/lib/glew/include/GL/glxew.h +++ /dev/null @@ -1,1669 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. - * - * 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 - * BRIAN PAUL 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. - */ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __glxew_h__ -#define __glxew_h__ -#define __GLXEW_H__ - -#ifdef __glxext_h_ -#error glxext.h included before glxew.h -#endif - -#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) -#error glx.h included before glxew.h -#endif - -#define __glxext_h_ - -#define GLX_H -#define __GLX_glx_h__ -#define __glx_h__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ - -#ifndef GLX_VERSION_1_0 -#define GLX_VERSION_1_0 1 - -#define GLX_USE_GL 1 -#define GLX_BUFFER_SIZE 2 -#define GLX_LEVEL 3 -#define GLX_RGBA 4 -#define GLX_DOUBLEBUFFER 5 -#define GLX_STEREO 6 -#define GLX_AUX_BUFFERS 7 -#define GLX_RED_SIZE 8 -#define GLX_GREEN_SIZE 9 -#define GLX_BLUE_SIZE 10 -#define GLX_ALPHA_SIZE 11 -#define GLX_DEPTH_SIZE 12 -#define GLX_STENCIL_SIZE 13 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_NO_EXTENSION 3 -#define GLX_BAD_VISUAL 4 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_ENUM 7 - -typedef XID GLXDrawable; -typedef XID GLXPixmap; -#ifdef __sun -typedef struct __glXContextRec *GLXContext; -#else -typedef struct __GLXcontextRec *GLXContext; -#endif - -typedef unsigned int GLXVideoDeviceNV; - -extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); -extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); -extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); -extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); -extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); -extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); -extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); -extern void glXDestroyContext (Display *dpy, GLXContext ctx); -extern Bool glXIsDirect (Display *dpy, GLXContext ctx); -extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); -extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); -extern GLXContext glXGetCurrentContext (void); -extern GLXDrawable glXGetCurrentDrawable (void); -extern void glXWaitGL (void); -extern void glXWaitX (void); -extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); -extern void glXUseXFont (Font font, int first, int count, int listBase); - -#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) - -#endif /* GLX_VERSION_1_0 */ - -/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ - -#ifndef GLX_VERSION_1_1 -#define GLX_VERSION_1_1 - -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_EXTENSIONS 0x3 - -extern const char* glXQueryExtensionsString (Display *dpy, int screen); -extern const char* glXGetClientString (Display *dpy, int name); -extern const char* glXQueryServerString (Display *dpy, int screen, int name); - -#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) - -#endif /* GLX_VERSION_1_1 */ - -/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */ - -#ifndef GLX_VERSION_1_2 -#define GLX_VERSION_1_2 1 - -typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void); - -#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay) - -#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2) - -#endif /* GLX_VERSION_1_2 */ - -/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */ - -#ifndef GLX_VERSION_1_3 -#define GLX_VERSION_1_3 1 - -#define GLX_RGBA_BIT 0x00000001 -#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 -#define GLX_WINDOW_BIT 0x00000001 -#define GLX_COLOR_INDEX_BIT 0x00000002 -#define GLX_PIXMAP_BIT 0x00000002 -#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 -#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 -#define GLX_PBUFFER_BIT 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 -#define GLX_AUX_BUFFERS_BIT 0x00000010 -#define GLX_CONFIG_CAVEAT 0x20 -#define GLX_DEPTH_BUFFER_BIT 0x00000020 -#define GLX_X_VISUAL_TYPE 0x22 -#define GLX_TRANSPARENT_TYPE 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE 0x24 -#define GLX_TRANSPARENT_RED_VALUE 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 -#define GLX_STENCIL_BUFFER_BIT 0x00000040 -#define GLX_ACCUM_BUFFER_BIT 0x00000080 -#define GLX_NONE 0x8000 -#define GLX_SLOW_CONFIG 0x8001 -#define GLX_TRUE_COLOR 0x8002 -#define GLX_DIRECT_COLOR 0x8003 -#define GLX_PSEUDO_COLOR 0x8004 -#define GLX_STATIC_COLOR 0x8005 -#define GLX_GRAY_SCALE 0x8006 -#define GLX_STATIC_GRAY 0x8007 -#define GLX_TRANSPARENT_RGB 0x8008 -#define GLX_TRANSPARENT_INDEX 0x8009 -#define GLX_VISUAL_ID 0x800B -#define GLX_SCREEN 0x800C -#define GLX_NON_CONFORMANT_CONFIG 0x800D -#define GLX_DRAWABLE_TYPE 0x8010 -#define GLX_RENDER_TYPE 0x8011 -#define GLX_X_RENDERABLE 0x8012 -#define GLX_FBCONFIG_ID 0x8013 -#define GLX_RGBA_TYPE 0x8014 -#define GLX_COLOR_INDEX_TYPE 0x8015 -#define GLX_MAX_PBUFFER_WIDTH 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT 0x8017 -#define GLX_MAX_PBUFFER_PIXELS 0x8018 -#define GLX_PRESERVED_CONTENTS 0x801B -#define GLX_LARGEST_PBUFFER 0x801C -#define GLX_WIDTH 0x801D -#define GLX_HEIGHT 0x801E -#define GLX_EVENT_MASK 0x801F -#define GLX_DAMAGED 0x8020 -#define GLX_SAVED 0x8021 -#define GLX_WINDOW 0x8022 -#define GLX_PBUFFER 0x8023 -#define GLX_PBUFFER_HEIGHT 0x8040 -#define GLX_PBUFFER_WIDTH 0x8041 -#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 -#define GLX_DONT_CARE 0xFFFFFFFF - -typedef XID GLXFBConfigID; -typedef XID GLXPbuffer; -typedef XID GLXWindow; -typedef struct __GLXFBConfigRec *GLXFBConfig; - -typedef struct { - int event_type; - int draw_type; - unsigned long serial; - Bool send_event; - Display *display; - GLXDrawable drawable; - unsigned int buffer_mask; - unsigned int aux_buffer; - int x, y; - int width, height; - int count; -} GLXPbufferClobberEvent; -typedef union __GLXEvent { - GLXPbufferClobberEvent glxpbufferclobber; - long pad[24]; -} GLXEvent; - -typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); -typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); -typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); -typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); -typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); -typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); -typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); -typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void); -typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); -typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); -typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); -typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); -typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); -typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); -typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); - -#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig) -#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext) -#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer) -#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap) -#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow) -#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer) -#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap) -#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow) -#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable) -#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib) -#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs) -#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent) -#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig) -#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent) -#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext) -#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable) -#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent) - -#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3) - -#endif /* GLX_VERSION_1_3 */ - -/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */ - -#ifndef GLX_VERSION_1_4 -#define GLX_VERSION_1_4 1 - -#define GLX_SAMPLE_BUFFERS 100000 -#define GLX_SAMPLES 100001 - -extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); - -#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4) - -#endif /* GLX_VERSION_1_4 */ - -/* -------------------------- GLX_3DFX_multisample ------------------------- */ - -#ifndef GLX_3DFX_multisample -#define GLX_3DFX_multisample 1 - -#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 -#define GLX_SAMPLES_3DFX 0x8051 - -#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample) - -#endif /* GLX_3DFX_multisample */ - -/* ------------------------ GLX_AMD_gpu_association ------------------------ */ - -#ifndef GLX_AMD_gpu_association -#define GLX_AMD_gpu_association 1 - -#define GLX_GPU_VENDOR_AMD 0x1F00 -#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 -#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define GLX_GPU_RAM_AMD 0x21A3 -#define GLX_GPU_CLOCK_AMD 0x21A4 -#define GLX_GPU_NUM_PIPES_AMD 0x21A5 -#define GLX_GPU_NUM_SIMD_AMD 0x21A6 -#define GLX_GPU_NUM_RB_AMD 0x21A7 -#define GLX_GPU_NUM_SPI_AMD 0x21A8 - -typedef void ( * PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list); -typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int* attribList); -typedef Bool ( * PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx); -typedef unsigned int ( * PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx); -typedef GLXContext ( * PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); -typedef unsigned int ( * PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int* ids); -typedef int ( * PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void* data); -typedef Bool ( * PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); - -#define glXBlitContextFramebufferAMD GLXEW_GET_FUN(__glewXBlitContextFramebufferAMD) -#define glXCreateAssociatedContextAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAMD) -#define glXCreateAssociatedContextAttribsAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAttribsAMD) -#define glXDeleteAssociatedContextAMD GLXEW_GET_FUN(__glewXDeleteAssociatedContextAMD) -#define glXGetContextGPUIDAMD GLXEW_GET_FUN(__glewXGetContextGPUIDAMD) -#define glXGetCurrentAssociatedContextAMD GLXEW_GET_FUN(__glewXGetCurrentAssociatedContextAMD) -#define glXGetGPUIDsAMD GLXEW_GET_FUN(__glewXGetGPUIDsAMD) -#define glXGetGPUInfoAMD GLXEW_GET_FUN(__glewXGetGPUInfoAMD) -#define glXMakeAssociatedContextCurrentAMD GLXEW_GET_FUN(__glewXMakeAssociatedContextCurrentAMD) - -#define GLXEW_AMD_gpu_association GLXEW_GET_VAR(__GLXEW_AMD_gpu_association) - -#endif /* GLX_AMD_gpu_association */ - -/* ------------------------- GLX_ARB_create_context ------------------------ */ - -#ifndef GLX_ARB_create_context -#define GLX_ARB_create_context 1 - -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 - -typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); - -#define glXCreateContextAttribsARB GLXEW_GET_FUN(__glewXCreateContextAttribsARB) - -#define GLXEW_ARB_create_context GLXEW_GET_VAR(__GLXEW_ARB_create_context) - -#endif /* GLX_ARB_create_context */ - -/* --------------------- GLX_ARB_create_context_profile -------------------- */ - -#ifndef GLX_ARB_create_context_profile -#define GLX_ARB_create_context_profile 1 - -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 - -#define GLXEW_ARB_create_context_profile GLXEW_GET_VAR(__GLXEW_ARB_create_context_profile) - -#endif /* GLX_ARB_create_context_profile */ - -/* ------------------- GLX_ARB_create_context_robustness ------------------- */ - -#ifndef GLX_ARB_create_context_robustness -#define GLX_ARB_create_context_robustness 1 - -#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 - -#define GLXEW_ARB_create_context_robustness GLXEW_GET_VAR(__GLXEW_ARB_create_context_robustness) - -#endif /* GLX_ARB_create_context_robustness */ - -/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */ - -#ifndef GLX_ARB_fbconfig_float -#define GLX_ARB_fbconfig_float 1 - -#define GLX_RGBA_FLOAT_BIT 0x00000004 -#define GLX_RGBA_FLOAT_TYPE 0x20B9 - -#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float) - -#endif /* GLX_ARB_fbconfig_float */ - -/* ------------------------ GLX_ARB_framebuffer_sRGB ----------------------- */ - -#ifndef GLX_ARB_framebuffer_sRGB -#define GLX_ARB_framebuffer_sRGB 1 - -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 - -#define GLXEW_ARB_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_ARB_framebuffer_sRGB) - -#endif /* GLX_ARB_framebuffer_sRGB */ - -/* ------------------------ GLX_ARB_get_proc_address ----------------------- */ - -#ifndef GLX_ARB_get_proc_address -#define GLX_ARB_get_proc_address 1 - -extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); - -#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address) - -#endif /* GLX_ARB_get_proc_address */ - -/* -------------------------- GLX_ARB_multisample -------------------------- */ - -#ifndef GLX_ARB_multisample -#define GLX_ARB_multisample 1 - -#define GLX_SAMPLE_BUFFERS_ARB 100000 -#define GLX_SAMPLES_ARB 100001 - -#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample) - -#endif /* GLX_ARB_multisample */ - -/* ---------------- GLX_ARB_robustness_application_isolation --------------- */ - -#ifndef GLX_ARB_robustness_application_isolation -#define GLX_ARB_robustness_application_isolation 1 - -#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define GLXEW_ARB_robustness_application_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_application_isolation) - -#endif /* GLX_ARB_robustness_application_isolation */ - -/* ---------------- GLX_ARB_robustness_share_group_isolation --------------- */ - -#ifndef GLX_ARB_robustness_share_group_isolation -#define GLX_ARB_robustness_share_group_isolation 1 - -#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define GLXEW_ARB_robustness_share_group_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_share_group_isolation) - -#endif /* GLX_ARB_robustness_share_group_isolation */ - -/* ---------------------- GLX_ARB_vertex_buffer_object --------------------- */ - -#ifndef GLX_ARB_vertex_buffer_object -#define GLX_ARB_vertex_buffer_object 1 - -#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 - -#define GLXEW_ARB_vertex_buffer_object GLXEW_GET_VAR(__GLXEW_ARB_vertex_buffer_object) - -#endif /* GLX_ARB_vertex_buffer_object */ - -/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */ - -#ifndef GLX_ATI_pixel_format_float -#define GLX_ATI_pixel_format_float 1 - -#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100 - -#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float) - -#endif /* GLX_ATI_pixel_format_float */ - -/* ------------------------- GLX_ATI_render_texture ------------------------ */ - -#ifndef GLX_ATI_render_texture -#define GLX_ATI_render_texture 1 - -#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 -#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 -#define GLX_TEXTURE_FORMAT_ATI 0x9802 -#define GLX_TEXTURE_TARGET_ATI 0x9803 -#define GLX_MIPMAP_TEXTURE_ATI 0x9804 -#define GLX_TEXTURE_RGB_ATI 0x9805 -#define GLX_TEXTURE_RGBA_ATI 0x9806 -#define GLX_NO_TEXTURE_ATI 0x9807 -#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808 -#define GLX_TEXTURE_1D_ATI 0x9809 -#define GLX_TEXTURE_2D_ATI 0x980A -#define GLX_MIPMAP_LEVEL_ATI 0x980B -#define GLX_CUBE_MAP_FACE_ATI 0x980C -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 -#define GLX_FRONT_LEFT_ATI 0x9813 -#define GLX_FRONT_RIGHT_ATI 0x9814 -#define GLX_BACK_LEFT_ATI 0x9815 -#define GLX_BACK_RIGHT_ATI 0x9816 -#define GLX_AUX0_ATI 0x9817 -#define GLX_AUX1_ATI 0x9818 -#define GLX_AUX2_ATI 0x9819 -#define GLX_AUX3_ATI 0x981A -#define GLX_AUX4_ATI 0x981B -#define GLX_AUX5_ATI 0x981C -#define GLX_AUX6_ATI 0x981D -#define GLX_AUX7_ATI 0x981E -#define GLX_AUX8_ATI 0x981F -#define GLX_AUX9_ATI 0x9820 -#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 -#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - -typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); -typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list); -typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); - -#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI) -#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI) -#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI) - -#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture) - -#endif /* GLX_ATI_render_texture */ - -/* --------------------------- GLX_EXT_buffer_age -------------------------- */ - -#ifndef GLX_EXT_buffer_age -#define GLX_EXT_buffer_age 1 - -#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 - -#define GLXEW_EXT_buffer_age GLXEW_GET_VAR(__GLXEW_EXT_buffer_age) - -#endif /* GLX_EXT_buffer_age */ - -/* ------------------- GLX_EXT_create_context_es2_profile ------------------ */ - -#ifndef GLX_EXT_create_context_es2_profile -#define GLX_EXT_create_context_es2_profile 1 - -#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 - -#define GLXEW_EXT_create_context_es2_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es2_profile) - -#endif /* GLX_EXT_create_context_es2_profile */ - -/* ------------------- GLX_EXT_create_context_es_profile ------------------- */ - -#ifndef GLX_EXT_create_context_es_profile -#define GLX_EXT_create_context_es_profile 1 - -#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 - -#define GLXEW_EXT_create_context_es_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es_profile) - -#endif /* GLX_EXT_create_context_es_profile */ - -/* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */ - -#ifndef GLX_EXT_fbconfig_packed_float -#define GLX_EXT_fbconfig_packed_float 1 - -#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 -#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - -#define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float) - -#endif /* GLX_EXT_fbconfig_packed_float */ - -/* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */ - -#ifndef GLX_EXT_framebuffer_sRGB -#define GLX_EXT_framebuffer_sRGB 1 - -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 - -#define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB) - -#endif /* GLX_EXT_framebuffer_sRGB */ - -/* ------------------------- GLX_EXT_import_context ------------------------ */ - -#ifndef GLX_EXT_import_context -#define GLX_EXT_import_context 1 - -#define GLX_SHARE_CONTEXT_EXT 0x800A -#define GLX_VISUAL_ID_EXT 0x800B -#define GLX_SCREEN_EXT 0x800C - -typedef XID GLXContextID; - -typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context); -typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); -typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID); -typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value); - -#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT) -#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT) -#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT) -#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT) - -#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context) - -#endif /* GLX_EXT_import_context */ - -/* -------------------------- GLX_EXT_scene_marker ------------------------- */ - -#ifndef GLX_EXT_scene_marker -#define GLX_EXT_scene_marker 1 - -#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker) - -#endif /* GLX_EXT_scene_marker */ - -/* -------------------------- GLX_EXT_swap_control ------------------------- */ - -#ifndef GLX_EXT_swap_control -#define GLX_EXT_swap_control 1 - -#define GLX_SWAP_INTERVAL_EXT 0x20F1 -#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 - -typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display* dpy, GLXDrawable drawable, int interval); - -#define glXSwapIntervalEXT GLXEW_GET_FUN(__glewXSwapIntervalEXT) - -#define GLXEW_EXT_swap_control GLXEW_GET_VAR(__GLXEW_EXT_swap_control) - -#endif /* GLX_EXT_swap_control */ - -/* ----------------------- GLX_EXT_swap_control_tear ----------------------- */ - -#ifndef GLX_EXT_swap_control_tear -#define GLX_EXT_swap_control_tear 1 - -#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 - -#define GLXEW_EXT_swap_control_tear GLXEW_GET_VAR(__GLXEW_EXT_swap_control_tear) - -#endif /* GLX_EXT_swap_control_tear */ - -/* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */ - -#ifndef GLX_EXT_texture_from_pixmap -#define GLX_EXT_texture_from_pixmap 1 - -#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 -#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 -#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 -#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 -#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 -#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 -#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 -#define GLX_Y_INVERTED_EXT 0x20D4 -#define GLX_TEXTURE_FORMAT_EXT 0x20D5 -#define GLX_TEXTURE_TARGET_EXT 0x20D6 -#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 -#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 -#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 -#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA -#define GLX_TEXTURE_1D_EXT 0x20DB -#define GLX_TEXTURE_2D_EXT 0x20DC -#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD -#define GLX_FRONT_LEFT_EXT 0x20DE -#define GLX_FRONT_RIGHT_EXT 0x20DF -#define GLX_BACK_LEFT_EXT 0x20E0 -#define GLX_BACK_RIGHT_EXT 0x20E1 -#define GLX_AUX0_EXT 0x20E2 -#define GLX_AUX1_EXT 0x20E3 -#define GLX_AUX2_EXT 0x20E4 -#define GLX_AUX3_EXT 0x20E5 -#define GLX_AUX4_EXT 0x20E6 -#define GLX_AUX5_EXT 0x20E7 -#define GLX_AUX6_EXT 0x20E8 -#define GLX_AUX7_EXT 0x20E9 -#define GLX_AUX8_EXT 0x20EA -#define GLX_AUX9_EXT 0x20EB - -typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list); -typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer); - -#define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT) -#define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT) - -#define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap) - -#endif /* GLX_EXT_texture_from_pixmap */ - -/* -------------------------- GLX_EXT_visual_info -------------------------- */ - -#ifndef GLX_EXT_visual_info -#define GLX_EXT_visual_info 1 - -#define GLX_X_VISUAL_TYPE_EXT 0x22 -#define GLX_TRANSPARENT_TYPE_EXT 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 -#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 -#define GLX_NONE_EXT 0x8000 -#define GLX_TRUE_COLOR_EXT 0x8002 -#define GLX_DIRECT_COLOR_EXT 0x8003 -#define GLX_PSEUDO_COLOR_EXT 0x8004 -#define GLX_STATIC_COLOR_EXT 0x8005 -#define GLX_GRAY_SCALE_EXT 0x8006 -#define GLX_STATIC_GRAY_EXT 0x8007 -#define GLX_TRANSPARENT_RGB_EXT 0x8008 -#define GLX_TRANSPARENT_INDEX_EXT 0x8009 - -#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info) - -#endif /* GLX_EXT_visual_info */ - -/* ------------------------- GLX_EXT_visual_rating ------------------------- */ - -#ifndef GLX_EXT_visual_rating -#define GLX_EXT_visual_rating 1 - -#define GLX_VISUAL_CAVEAT_EXT 0x20 -#define GLX_SLOW_VISUAL_EXT 0x8001 -#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D - -#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating) - -#endif /* GLX_EXT_visual_rating */ - -/* -------------------------- GLX_INTEL_swap_event ------------------------- */ - -#ifndef GLX_INTEL_swap_event -#define GLX_INTEL_swap_event 1 - -#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 -#define GLX_COPY_COMPLETE_INTEL 0x8181 -#define GLX_FLIP_COMPLETE_INTEL 0x8182 -#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 - -#define GLXEW_INTEL_swap_event GLXEW_GET_VAR(__GLXEW_INTEL_swap_event) - -#endif /* GLX_INTEL_swap_event */ - -/* -------------------------- GLX_MESA_agp_offset -------------------------- */ - -#ifndef GLX_MESA_agp_offset -#define GLX_MESA_agp_offset 1 - -typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer); - -#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA) - -#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset) - -#endif /* GLX_MESA_agp_offset */ - -/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */ - -#ifndef GLX_MESA_copy_sub_buffer -#define GLX_MESA_copy_sub_buffer 1 - -typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height); - -#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA) - -#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer) - -#endif /* GLX_MESA_copy_sub_buffer */ - -/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */ - -#ifndef GLX_MESA_pixmap_colormap -#define GLX_MESA_pixmap_colormap 1 - -typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); - -#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA) - -#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap) - -#endif /* GLX_MESA_pixmap_colormap */ - -/* ------------------------ GLX_MESA_release_buffers ----------------------- */ - -#ifndef GLX_MESA_release_buffers -#define GLX_MESA_release_buffers 1 - -typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d); - -#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA) - -#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers) - -#endif /* GLX_MESA_release_buffers */ - -/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */ - -#ifndef GLX_MESA_set_3dfx_mode -#define GLX_MESA_set_3dfx_mode 1 - -#define GLX_3DFX_WINDOW_MODE_MESA 0x1 -#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 - -typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode); - -#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA) - -#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode) - -#endif /* GLX_MESA_set_3dfx_mode */ - -/* ------------------------- GLX_MESA_swap_control ------------------------- */ - -#ifndef GLX_MESA_swap_control -#define GLX_MESA_swap_control 1 - -typedef int ( * PFNGLXGETSWAPINTERVALMESAPROC) (void); -typedef int ( * PFNGLXSWAPINTERVALMESAPROC) (unsigned int interval); - -#define glXGetSwapIntervalMESA GLXEW_GET_FUN(__glewXGetSwapIntervalMESA) -#define glXSwapIntervalMESA GLXEW_GET_FUN(__glewXSwapIntervalMESA) - -#define GLXEW_MESA_swap_control GLXEW_GET_VAR(__GLXEW_MESA_swap_control) - -#endif /* GLX_MESA_swap_control */ - -/* --------------------------- GLX_NV_copy_image --------------------------- */ - -#ifndef GLX_NV_copy_image -#define GLX_NV_copy_image 1 - -typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define glXCopyImageSubDataNV GLXEW_GET_FUN(__glewXCopyImageSubDataNV) - -#define GLXEW_NV_copy_image GLXEW_GET_VAR(__GLXEW_NV_copy_image) - -#endif /* GLX_NV_copy_image */ - -/* -------------------------- GLX_NV_float_buffer -------------------------- */ - -#ifndef GLX_NV_float_buffer -#define GLX_NV_float_buffer 1 - -#define GLX_FLOAT_COMPONENTS_NV 0x20B0 - -#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer) - -#endif /* GLX_NV_float_buffer */ - -/* ---------------------- GLX_NV_multisample_coverage ---------------------- */ - -#ifndef GLX_NV_multisample_coverage -#define GLX_NV_multisample_coverage 1 - -#define GLX_COLOR_SAMPLES_NV 0x20B3 -#define GLX_COVERAGE_SAMPLES_NV 100001 - -#define GLXEW_NV_multisample_coverage GLXEW_GET_VAR(__GLXEW_NV_multisample_coverage) - -#endif /* GLX_NV_multisample_coverage */ - -/* -------------------------- GLX_NV_present_video ------------------------- */ - -#ifndef GLX_NV_present_video -#define GLX_NV_present_video 1 - -#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 - -typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); -typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements); - -#define glXBindVideoDeviceNV GLXEW_GET_FUN(__glewXBindVideoDeviceNV) -#define glXEnumerateVideoDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoDevicesNV) - -#define GLXEW_NV_present_video GLXEW_GET_VAR(__GLXEW_NV_present_video) - -#endif /* GLX_NV_present_video */ - -/* --------------------------- GLX_NV_swap_group --------------------------- */ - -#ifndef GLX_NV_swap_group -#define GLX_NV_swap_group 1 - -typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display* dpy, GLuint group, GLuint barrier); -typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint group); -typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display* dpy, int screen, GLuint *count); -typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); -typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); -typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display* dpy, int screen); - -#define glXBindSwapBarrierNV GLXEW_GET_FUN(__glewXBindSwapBarrierNV) -#define glXJoinSwapGroupNV GLXEW_GET_FUN(__glewXJoinSwapGroupNV) -#define glXQueryFrameCountNV GLXEW_GET_FUN(__glewXQueryFrameCountNV) -#define glXQueryMaxSwapGroupsNV GLXEW_GET_FUN(__glewXQueryMaxSwapGroupsNV) -#define glXQuerySwapGroupNV GLXEW_GET_FUN(__glewXQuerySwapGroupNV) -#define glXResetFrameCountNV GLXEW_GET_FUN(__glewXResetFrameCountNV) - -#define GLXEW_NV_swap_group GLXEW_GET_VAR(__GLXEW_NV_swap_group) - -#endif /* GLX_NV_swap_group */ - -/* ----------------------- GLX_NV_vertex_array_range ----------------------- */ - -#ifndef GLX_NV_vertex_array_range -#define GLX_NV_vertex_array_range 1 - -typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); -typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer); - -#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV) -#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV) - -#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range) - -#endif /* GLX_NV_vertex_array_range */ - -/* -------------------------- GLX_NV_video_capture ------------------------- */ - -#ifndef GLX_NV_video_capture -#define GLX_NV_video_capture 1 - -#define GLX_DEVICE_ID_NV 0x20CD -#define GLX_UNIQUE_ID_NV 0x20CE -#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - -typedef XID GLXVideoCaptureDeviceNV; - -typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display* dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); -typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display* dpy, int screen, int *nelements); -typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device); -typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); -typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device); - -#define glXBindVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXBindVideoCaptureDeviceNV) -#define glXEnumerateVideoCaptureDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoCaptureDevicesNV) -#define glXLockVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXLockVideoCaptureDeviceNV) -#define glXQueryVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXQueryVideoCaptureDeviceNV) -#define glXReleaseVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoCaptureDeviceNV) - -#define GLXEW_NV_video_capture GLXEW_GET_VAR(__GLXEW_NV_video_capture) - -#endif /* GLX_NV_video_capture */ - -/* -------------------------- GLX_NV_video_output -------------------------- */ - -#ifndef GLX_NV_video_output -#define GLX_NV_video_output 1 - -#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 -#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 -#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 -#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 -#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 -#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA -#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB -#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC - -typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); -typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); -typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice); -typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display* dpy, GLXPbuffer pbuf); -typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); - -#define glXBindVideoImageNV GLXEW_GET_FUN(__glewXBindVideoImageNV) -#define glXGetVideoDeviceNV GLXEW_GET_FUN(__glewXGetVideoDeviceNV) -#define glXGetVideoInfoNV GLXEW_GET_FUN(__glewXGetVideoInfoNV) -#define glXReleaseVideoDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoDeviceNV) -#define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV) -#define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV) - -#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output) - -#endif /* GLX_NV_video_output */ - -/* -------------------------- GLX_OML_swap_method -------------------------- */ - -#ifndef GLX_OML_swap_method -#define GLX_OML_swap_method 1 - -#define GLX_SWAP_METHOD_OML 0x8060 -#define GLX_SWAP_EXCHANGE_OML 0x8061 -#define GLX_SWAP_COPY_OML 0x8062 -#define GLX_SWAP_UNDEFINED_OML 0x8063 - -#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method) - -#endif /* GLX_OML_swap_method */ - -/* -------------------------- GLX_OML_sync_control ------------------------- */ - -#ifndef GLX_OML_sync_control -#define GLX_OML_sync_control 1 - -typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator); -typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc); -typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); -typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc); -typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc); - -#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML) -#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML) -#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML) -#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML) -#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML) - -#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control) - -#endif /* GLX_OML_sync_control */ - -/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */ - -#ifndef GLX_SGIS_blended_overlay -#define GLX_SGIS_blended_overlay 1 - -#define GLX_BLENDED_RGBA_SGIS 0x8025 - -#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay) - -#endif /* GLX_SGIS_blended_overlay */ - -/* -------------------------- GLX_SGIS_color_range ------------------------- */ - -#ifndef GLX_SGIS_color_range -#define GLX_SGIS_color_range 1 - -#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) - -#endif /* GLX_SGIS_color_range */ - -/* -------------------------- GLX_SGIS_multisample ------------------------- */ - -#ifndef GLX_SGIS_multisample -#define GLX_SGIS_multisample 1 - -#define GLX_SAMPLE_BUFFERS_SGIS 100000 -#define GLX_SAMPLES_SGIS 100001 - -#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample) - -#endif /* GLX_SGIS_multisample */ - -/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */ - -#ifndef GLX_SGIS_shared_multisample -#define GLX_SGIS_shared_multisample 1 - -#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 -#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 - -#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample) - -#endif /* GLX_SGIS_shared_multisample */ - -/* --------------------------- GLX_SGIX_fbconfig --------------------------- */ - -#ifndef GLX_SGIX_fbconfig -#define GLX_SGIX_fbconfig 1 - -#define GLX_WINDOW_BIT_SGIX 0x00000001 -#define GLX_RGBA_BIT_SGIX 0x00000001 -#define GLX_PIXMAP_BIT_SGIX 0x00000002 -#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 -#define GLX_SCREEN_EXT 0x800C -#define GLX_DRAWABLE_TYPE_SGIX 0x8010 -#define GLX_RENDER_TYPE_SGIX 0x8011 -#define GLX_X_RENDERABLE_SGIX 0x8012 -#define GLX_FBCONFIG_ID_SGIX 0x8013 -#define GLX_RGBA_TYPE_SGIX 0x8014 -#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 - -typedef XID GLXFBConfigIDSGIX; -typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; - -typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); -typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap); -typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value); -typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis); -typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config); - -#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX) -#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX) -#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX) -#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX) -#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX) -#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX) - -#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig) - -#endif /* GLX_SGIX_fbconfig */ - -/* --------------------------- GLX_SGIX_hyperpipe -------------------------- */ - -#ifndef GLX_SGIX_hyperpipe -#define GLX_SGIX_hyperpipe 1 - -#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 -#define GLX_PIPE_RECT_SGIX 0x00000001 -#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 -#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 -#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 -#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 -#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 -#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 -#define GLX_BAD_HYPERPIPE_SGIX 92 -#define GLX_HYPERPIPE_ID_SGIX 0x8030 - -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int networkId; -} GLXHyperpipeNetworkSGIX; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int XOrigin; - int YOrigin; - int maxHeight; - int maxWidth; -} GLXPipeRectLimits; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int channel; - unsigned int participationType; - int timeSlice; -} GLXHyperpipeConfigSGIX; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int srcXOrigin; - int srcYOrigin; - int srcWidth; - int srcHeight; - int destXOrigin; - int destYOrigin; - int destWidth; - int destHeight; -} GLXPipeRect; - -typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); -typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); -typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); -typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); -typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); -typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); -typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); -typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); - -#define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX) -#define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX) -#define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX) -#define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX) -#define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX) -#define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX) -#define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX) -#define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX) - -#define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe) - -#endif /* GLX_SGIX_hyperpipe */ - -/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */ - -#ifndef GLX_SGIX_pbuffer -#define GLX_SGIX_pbuffer 1 - -#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 -#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 -#define GLX_PBUFFER_BIT_SGIX 0x00000004 -#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 -#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 -#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 -#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 -#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 -#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 -#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 -#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 -#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 -#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A -#define GLX_PRESERVED_CONTENTS_SGIX 0x801B -#define GLX_LARGEST_PBUFFER_SGIX 0x801C -#define GLX_WIDTH_SGIX 0x801D -#define GLX_HEIGHT_SGIX 0x801E -#define GLX_EVENT_MASK_SGIX 0x801F -#define GLX_DAMAGED_SGIX 0x8020 -#define GLX_SAVED_SGIX 0x8021 -#define GLX_WINDOW_SGIX 0x8022 -#define GLX_PBUFFER_SGIX 0x8023 -#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 - -typedef XID GLXPbufferSGIX; -typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; - -typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list); -typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf); -typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask); -typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value); -typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask); - -#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX) -#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX) -#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX) -#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX) -#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX) - -#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer) - -#endif /* GLX_SGIX_pbuffer */ - -/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */ - -#ifndef GLX_SGIX_swap_barrier -#define GLX_SGIX_swap_barrier 1 - -typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); -typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); - -#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX) -#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX) - -#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier) - -#endif /* GLX_SGIX_swap_barrier */ - -/* -------------------------- GLX_SGIX_swap_group -------------------------- */ - -#ifndef GLX_SGIX_swap_group -#define GLX_SGIX_swap_group 1 - -typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); - -#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX) - -#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group) - -#endif /* GLX_SGIX_swap_group */ - -/* ------------------------- GLX_SGIX_video_resize ------------------------- */ - -#ifndef GLX_SGIX_video_resize -#define GLX_SGIX_video_resize 1 - -#define GLX_SYNC_FRAME_SGIX 0x00000000 -#define GLX_SYNC_SWAP_SGIX 0x00000001 - -typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window); -typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h); -typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype); -typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h); -typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); - -#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX) -#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX) -#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX) -#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX) -#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX) - -#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize) - -#endif /* GLX_SGIX_video_resize */ - -/* ---------------------- GLX_SGIX_visual_select_group --------------------- */ - -#ifndef GLX_SGIX_visual_select_group -#define GLX_SGIX_visual_select_group 1 - -#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 - -#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group) - -#endif /* GLX_SGIX_visual_select_group */ - -/* ---------------------------- GLX_SGI_cushion ---------------------------- */ - -#ifndef GLX_SGI_cushion -#define GLX_SGI_cushion 1 - -typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion); - -#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI) - -#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion) - -#endif /* GLX_SGI_cushion */ - -/* ----------------------- GLX_SGI_make_current_read ----------------------- */ - -#ifndef GLX_SGI_make_current_read -#define GLX_SGI_make_current_read 1 - -typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); -typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); - -#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI) -#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI) - -#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read) - -#endif /* GLX_SGI_make_current_read */ - -/* -------------------------- GLX_SGI_swap_control ------------------------- */ - -#ifndef GLX_SGI_swap_control -#define GLX_SGI_swap_control 1 - -typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval); - -#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI) - -#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control) - -#endif /* GLX_SGI_swap_control */ - -/* --------------------------- GLX_SGI_video_sync -------------------------- */ - -#ifndef GLX_SGI_video_sync -#define GLX_SGI_video_sync 1 - -typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int* count); -typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count); - -#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI) -#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI) - -#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync) - -#endif /* GLX_SGI_video_sync */ - -/* --------------------- GLX_SUN_get_transparent_index --------------------- */ - -#ifndef GLX_SUN_get_transparent_index -#define GLX_SUN_get_transparent_index 1 - -typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex); - -#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN) - -#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index) - -#endif /* GLX_SUN_get_transparent_index */ - -/* -------------------------- GLX_SUN_video_resize ------------------------- */ - -#ifndef GLX_SUN_video_resize -#define GLX_SUN_video_resize 1 - -#define GLX_VIDEO_RESIZE_SUN 0x8171 -#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - -typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor); -typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor); - -#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN) -#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN) - -#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize) - -#endif /* GLX_SUN_video_resize */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT -#else -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ - -GLXEW_FUN_EXPORT PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay; - -GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig; -GLXEW_FUN_EXPORT PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext; -GLXEW_FUN_EXPORT PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer; -GLXEW_FUN_EXPORT PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap; -GLXEW_FUN_EXPORT PFNGLXCREATEWINDOWPROC __glewXCreateWindow; -GLXEW_FUN_EXPORT PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer; -GLXEW_FUN_EXPORT PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap; -GLXEW_FUN_EXPORT PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow; -GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs; -GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent; -GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig; -GLXEW_FUN_EXPORT PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent; -GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTPROC __glewXQueryContext; -GLXEW_FUN_EXPORT PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; -GLXEW_FUN_EXPORT PFNGLXSELECTEVENTPROC __glewXSelectEvent; - -GLXEW_FUN_EXPORT PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD; -GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD; -GLXEW_FUN_EXPORT PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD; -GLXEW_FUN_EXPORT PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD; -GLXEW_FUN_EXPORT PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD; -GLXEW_FUN_EXPORT PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD; - -GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB; - -GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; -GLXEW_FUN_EXPORT PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI; -GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI; - -GLXEW_FUN_EXPORT PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT; -GLXEW_FUN_EXPORT PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT; -GLXEW_FUN_EXPORT PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT; -GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT; - -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT; - -GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT; -GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT; - -GLXEW_FUN_EXPORT PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA; - -GLXEW_FUN_EXPORT PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA; - -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA; - -GLXEW_FUN_EXPORT PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA; - -GLXEW_FUN_EXPORT PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA; - -GLXEW_FUN_EXPORT PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA; -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA; - -GLXEW_FUN_EXPORT PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV; - -GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV; -GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV; -GLXEW_FUN_EXPORT PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV; -GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV; -GLXEW_FUN_EXPORT PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV; -GLXEW_FUN_EXPORT PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV; - -GLXEW_FUN_EXPORT PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; -GLXEW_FUN_EXPORT PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV; -GLXEW_FUN_EXPORT PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV; -GLXEW_FUN_EXPORT PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV; -GLXEW_FUN_EXPORT PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV; - -GLXEW_FUN_EXPORT PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML; -GLXEW_FUN_EXPORT PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML; -GLXEW_FUN_EXPORT PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML; -GLXEW_FUN_EXPORT PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML; -GLXEW_FUN_EXPORT PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML; - -GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX; -GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX; -GLXEW_FUN_EXPORT PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX; - -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX; - -GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX; -GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX; -GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX; - -GLXEW_FUN_EXPORT PFNGLXCUSHIONSGIPROC __glewXCushionSGI; - -GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI; -GLXEW_FUN_EXPORT PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI; - -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI; - -GLXEW_FUN_EXPORT PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI; -GLXEW_FUN_EXPORT PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI; - -GLXEW_FUN_EXPORT PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN; - -GLXEW_FUN_EXPORT PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN; -GLXEW_FUN_EXPORT PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN; - -#if defined(GLEW_MX) -struct GLXEWContextStruct -{ -#endif /* GLEW_MX */ - -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_3; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_4; -GLXEW_VAR_EXPORT GLboolean __GLXEW_3DFX_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_AMD_gpu_association; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_robustness; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_framebuffer_sRGB; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_get_proc_address; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_application_isolation; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_share_group_isolation; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_vertex_buffer_object; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_render_texture; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_buffer_age; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es2_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_import_context; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_scene_marker; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control_tear; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_info; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_rating; -GLXEW_VAR_EXPORT GLboolean __GLXEW_INTEL_swap_event; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_agp_offset; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_release_buffers; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_copy_image; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_float_buffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_multisample_coverage; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_output; -GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_swap_method; -GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_sync_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_color_range; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_shared_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_fbconfig; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_hyperpipe; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_pbuffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_barrier; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_video_resize; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_visual_select_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_cushion; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_make_current_read; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_video_sync; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_get_transparent_index; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_video_resize; - -#ifdef GLEW_MX -}; /* GLXEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------ */ - -#ifdef GLEW_MX - -typedef struct GLXEWContextStruct GLXEWContext; -GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name); - -#define glxewInit() glxewContextInit(glxewGetContext()) -#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) -#define GLXEW_GET_FUN(x) x - -#else /* GLEW_MX */ - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLXEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* __glxew_h__ */ diff --git a/Engine/lib/glew/include/GL/wglew.h b/Engine/lib/glew/include/GL/wglew.h deleted file mode 100644 index 8659841d35..0000000000 --- a/Engine/lib/glew/include/GL/wglew.h +++ /dev/null @@ -1,1421 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __wglew_h__ -#define __wglew_h__ -#define __WGLEW_H__ - -#ifdef __wglext_h_ -#error wglext.h included before wglew.h -#endif - -#define __wglext_h_ - -#if !defined(WINAPI) -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN 1 -# endif -#include -# undef WIN32_LEAN_AND_MEAN -#endif - -/* - * GLEW_STATIC needs to be set when using the static version. - * GLEW_BUILD is set when building the DLL version. - */ -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* -------------------------- WGL_3DFX_multisample ------------------------- */ - -#ifndef WGL_3DFX_multisample -#define WGL_3DFX_multisample 1 - -#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 -#define WGL_SAMPLES_3DFX 0x2061 - -#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample) - -#endif /* WGL_3DFX_multisample */ - -/* ------------------------- WGL_3DL_stereo_control ------------------------ */ - -#ifndef WGL_3DL_stereo_control -#define WGL_3DL_stereo_control 1 - -#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 -#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 -#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 -#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 - -typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); - -#define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL) - -#define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control) - -#endif /* WGL_3DL_stereo_control */ - -/* ------------------------ WGL_AMD_gpu_association ------------------------ */ - -#ifndef WGL_AMD_gpu_association -#define WGL_AMD_gpu_association 1 - -#define WGL_GPU_VENDOR_AMD 0x1F00 -#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 -#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define WGL_GPU_RAM_AMD 0x21A3 -#define WGL_GPU_CLOCK_AMD 0x21A4 -#define WGL_GPU_NUM_PIPES_AMD 0x21A5 -#define WGL_GPU_NUM_SIMD_AMD 0x21A6 -#define WGL_GPU_NUM_RB_AMD 0x21A7 -#define WGL_GPU_NUM_SPI_AMD 0x21A8 - -typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int* attribList); -typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); -typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); -typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); -typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT* ids); -typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void* data); -typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); - -#define wglBlitContextFramebufferAMD WGLEW_GET_FUN(__wglewBlitContextFramebufferAMD) -#define wglCreateAssociatedContextAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAMD) -#define wglCreateAssociatedContextAttribsAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAttribsAMD) -#define wglDeleteAssociatedContextAMD WGLEW_GET_FUN(__wglewDeleteAssociatedContextAMD) -#define wglGetContextGPUIDAMD WGLEW_GET_FUN(__wglewGetContextGPUIDAMD) -#define wglGetCurrentAssociatedContextAMD WGLEW_GET_FUN(__wglewGetCurrentAssociatedContextAMD) -#define wglGetGPUIDsAMD WGLEW_GET_FUN(__wglewGetGPUIDsAMD) -#define wglGetGPUInfoAMD WGLEW_GET_FUN(__wglewGetGPUInfoAMD) -#define wglMakeAssociatedContextCurrentAMD WGLEW_GET_FUN(__wglewMakeAssociatedContextCurrentAMD) - -#define WGLEW_AMD_gpu_association WGLEW_GET_VAR(__WGLEW_AMD_gpu_association) - -#endif /* WGL_AMD_gpu_association */ - -/* ------------------------- WGL_ARB_buffer_region ------------------------- */ - -#ifndef WGL_ARB_buffer_region -#define WGL_ARB_buffer_region 1 - -#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 -#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 -#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 -#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 - -typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); -typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); -typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); -typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); - -#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB) -#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB) -#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB) -#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB) - -#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region) - -#endif /* WGL_ARB_buffer_region */ - -/* ------------------------- WGL_ARB_create_context ------------------------ */ - -#ifndef WGL_ARB_create_context -#define WGL_ARB_create_context 1 - -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define ERROR_INVALID_VERSION_ARB 0x2095 -#define ERROR_INVALID_PROFILE_ARB 0x2096 - -typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList); - -#define wglCreateContextAttribsARB WGLEW_GET_FUN(__wglewCreateContextAttribsARB) - -#define WGLEW_ARB_create_context WGLEW_GET_VAR(__WGLEW_ARB_create_context) - -#endif /* WGL_ARB_create_context */ - -/* --------------------- WGL_ARB_create_context_profile -------------------- */ - -#ifndef WGL_ARB_create_context_profile -#define WGL_ARB_create_context_profile 1 - -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 - -#define WGLEW_ARB_create_context_profile WGLEW_GET_VAR(__WGLEW_ARB_create_context_profile) - -#endif /* WGL_ARB_create_context_profile */ - -/* ------------------- WGL_ARB_create_context_robustness ------------------- */ - -#ifndef WGL_ARB_create_context_robustness -#define WGL_ARB_create_context_robustness 1 - -#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 - -#define WGLEW_ARB_create_context_robustness WGLEW_GET_VAR(__WGLEW_ARB_create_context_robustness) - -#endif /* WGL_ARB_create_context_robustness */ - -/* ----------------------- WGL_ARB_extensions_string ----------------------- */ - -#ifndef WGL_ARB_extensions_string -#define WGL_ARB_extensions_string 1 - -typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); - -#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB) - -#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string) - -#endif /* WGL_ARB_extensions_string */ - -/* ------------------------ WGL_ARB_framebuffer_sRGB ----------------------- */ - -#ifndef WGL_ARB_framebuffer_sRGB -#define WGL_ARB_framebuffer_sRGB 1 - -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 - -#define WGLEW_ARB_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_ARB_framebuffer_sRGB) - -#endif /* WGL_ARB_framebuffer_sRGB */ - -/* ----------------------- WGL_ARB_make_current_read ----------------------- */ - -#ifndef WGL_ARB_make_current_read -#define WGL_ARB_make_current_read 1 - -#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 -#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 - -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - -#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB) -#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB) - -#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read) - -#endif /* WGL_ARB_make_current_read */ - -/* -------------------------- WGL_ARB_multisample -------------------------- */ - -#ifndef WGL_ARB_multisample -#define WGL_ARB_multisample 1 - -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 - -#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample) - -#endif /* WGL_ARB_multisample */ - -/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */ - -#ifndef WGL_ARB_pbuffer -#define WGL_ARB_pbuffer 1 - -#define WGL_DRAW_TO_PBUFFER_ARB 0x202D -#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E -#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 -#define WGL_PBUFFER_LARGEST_ARB 0x2033 -#define WGL_PBUFFER_WIDTH_ARB 0x2034 -#define WGL_PBUFFER_HEIGHT_ARB 0x2035 -#define WGL_PBUFFER_LOST_ARB 0x2036 - -DECLARE_HANDLE(HPBUFFERARB); - -typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); - -#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB) -#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB) -#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB) -#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB) -#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB) - -#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer) - -#endif /* WGL_ARB_pbuffer */ - -/* -------------------------- WGL_ARB_pixel_format ------------------------- */ - -#ifndef WGL_ARB_pixel_format -#define WGL_ARB_pixel_format 1 - -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_DRAW_TO_BITMAP_ARB 0x2002 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_NEED_PALETTE_ARB 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 -#define WGL_SWAP_METHOD_ARB 0x2007 -#define WGL_NUMBER_OVERLAYS_ARB 0x2008 -#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 -#define WGL_TRANSPARENT_ARB 0x200A -#define WGL_SHARE_DEPTH_ARB 0x200C -#define WGL_SHARE_STENCIL_ARB 0x200D -#define WGL_SHARE_ACCUM_ARB 0x200E -#define WGL_SUPPORT_GDI_ARB 0x200F -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_RED_SHIFT_ARB 0x2016 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_GREEN_SHIFT_ARB 0x2018 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_BLUE_SHIFT_ARB 0x201A -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ALPHA_SHIFT_ARB 0x201C -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_SWAP_EXCHANGE_ARB 0x2028 -#define WGL_SWAP_COPY_ARB 0x2029 -#define WGL_SWAP_UNDEFINED_ARB 0x202A -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C -#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 -#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 -#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 -#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A -#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B - -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues); - -#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB) -#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB) -#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB) - -#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format) - -#endif /* WGL_ARB_pixel_format */ - -/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */ - -#ifndef WGL_ARB_pixel_format_float -#define WGL_ARB_pixel_format_float 1 - -#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 - -#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float) - -#endif /* WGL_ARB_pixel_format_float */ - -/* ------------------------- WGL_ARB_render_texture ------------------------ */ - -#ifndef WGL_ARB_render_texture -#define WGL_ARB_render_texture 1 - -#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 -#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 -#define WGL_TEXTURE_FORMAT_ARB 0x2072 -#define WGL_TEXTURE_TARGET_ARB 0x2073 -#define WGL_MIPMAP_TEXTURE_ARB 0x2074 -#define WGL_TEXTURE_RGB_ARB 0x2075 -#define WGL_TEXTURE_RGBA_ARB 0x2076 -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 -#define WGL_TEXTURE_1D_ARB 0x2079 -#define WGL_TEXTURE_2D_ARB 0x207A -#define WGL_MIPMAP_LEVEL_ARB 0x207B -#define WGL_CUBE_MAP_FACE_ARB 0x207C -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 -#define WGL_FRONT_LEFT_ARB 0x2083 -#define WGL_FRONT_RIGHT_ARB 0x2084 -#define WGL_BACK_LEFT_ARB 0x2085 -#define WGL_BACK_RIGHT_ARB 0x2086 -#define WGL_AUX0_ARB 0x2087 -#define WGL_AUX1_ARB 0x2088 -#define WGL_AUX2_ARB 0x2089 -#define WGL_AUX3_ARB 0x208A -#define WGL_AUX4_ARB 0x208B -#define WGL_AUX5_ARB 0x208C -#define WGL_AUX6_ARB 0x208D -#define WGL_AUX7_ARB 0x208E -#define WGL_AUX8_ARB 0x208F -#define WGL_AUX9_ARB 0x2090 - -typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList); - -#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB) -#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB) -#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB) - -#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture) - -#endif /* WGL_ARB_render_texture */ - -/* ---------------- WGL_ARB_robustness_application_isolation --------------- */ - -#ifndef WGL_ARB_robustness_application_isolation -#define WGL_ARB_robustness_application_isolation 1 - -#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define WGLEW_ARB_robustness_application_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_application_isolation) - -#endif /* WGL_ARB_robustness_application_isolation */ - -/* ---------------- WGL_ARB_robustness_share_group_isolation --------------- */ - -#ifndef WGL_ARB_robustness_share_group_isolation -#define WGL_ARB_robustness_share_group_isolation 1 - -#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define WGLEW_ARB_robustness_share_group_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_share_group_isolation) - -#endif /* WGL_ARB_robustness_share_group_isolation */ - -/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ - -#ifndef WGL_ATI_pixel_format_float -#define WGL_ATI_pixel_format_float 1 - -#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 - -#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float) - -#endif /* WGL_ATI_pixel_format_float */ - -/* -------------------- WGL_ATI_render_texture_rectangle ------------------- */ - -#ifndef WGL_ATI_render_texture_rectangle -#define WGL_ATI_render_texture_rectangle 1 - -#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 - -#define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle) - -#endif /* WGL_ATI_render_texture_rectangle */ - -/* ------------------- WGL_EXT_create_context_es2_profile ------------------ */ - -#ifndef WGL_EXT_create_context_es2_profile -#define WGL_EXT_create_context_es2_profile 1 - -#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 - -#define WGLEW_EXT_create_context_es2_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es2_profile) - -#endif /* WGL_EXT_create_context_es2_profile */ - -/* ------------------- WGL_EXT_create_context_es_profile ------------------- */ - -#ifndef WGL_EXT_create_context_es_profile -#define WGL_EXT_create_context_es_profile 1 - -#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 - -#define WGLEW_EXT_create_context_es_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es_profile) - -#endif /* WGL_EXT_create_context_es_profile */ - -/* -------------------------- WGL_EXT_depth_float -------------------------- */ - -#ifndef WGL_EXT_depth_float -#define WGL_EXT_depth_float 1 - -#define WGL_DEPTH_FLOAT_EXT 0x2040 - -#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float) - -#endif /* WGL_EXT_depth_float */ - -/* ---------------------- WGL_EXT_display_color_table ---------------------- */ - -#ifndef WGL_EXT_display_color_table -#define WGL_EXT_display_color_table 1 - -typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length); - -#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT) -#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT) -#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT) -#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT) - -#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table) - -#endif /* WGL_EXT_display_color_table */ - -/* ----------------------- WGL_EXT_extensions_string ----------------------- */ - -#ifndef WGL_EXT_extensions_string -#define WGL_EXT_extensions_string 1 - -typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); - -#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT) - -#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string) - -#endif /* WGL_EXT_extensions_string */ - -/* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */ - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_EXT_framebuffer_sRGB 1 - -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 - -#define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB) - -#endif /* WGL_EXT_framebuffer_sRGB */ - -/* ----------------------- WGL_EXT_make_current_read ----------------------- */ - -#ifndef WGL_EXT_make_current_read -#define WGL_EXT_make_current_read 1 - -#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 - -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - -#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT) -#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT) - -#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read) - -#endif /* WGL_EXT_make_current_read */ - -/* -------------------------- WGL_EXT_multisample -------------------------- */ - -#ifndef WGL_EXT_multisample -#define WGL_EXT_multisample 1 - -#define WGL_SAMPLE_BUFFERS_EXT 0x2041 -#define WGL_SAMPLES_EXT 0x2042 - -#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample) - -#endif /* WGL_EXT_multisample */ - -/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */ - -#ifndef WGL_EXT_pbuffer -#define WGL_EXT_pbuffer 1 - -#define WGL_DRAW_TO_PBUFFER_EXT 0x202D -#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E -#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 -#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 -#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 -#define WGL_PBUFFER_LARGEST_EXT 0x2033 -#define WGL_PBUFFER_WIDTH_EXT 0x2034 -#define WGL_PBUFFER_HEIGHT_EXT 0x2035 - -DECLARE_HANDLE(HPBUFFEREXT); - -typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); - -#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT) -#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT) -#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT) -#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT) -#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT) - -#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer) - -#endif /* WGL_EXT_pbuffer */ - -/* -------------------------- WGL_EXT_pixel_format ------------------------- */ - -#ifndef WGL_EXT_pixel_format -#define WGL_EXT_pixel_format 1 - -#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 -#define WGL_DRAW_TO_WINDOW_EXT 0x2001 -#define WGL_DRAW_TO_BITMAP_EXT 0x2002 -#define WGL_ACCELERATION_EXT 0x2003 -#define WGL_NEED_PALETTE_EXT 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 -#define WGL_SWAP_METHOD_EXT 0x2007 -#define WGL_NUMBER_OVERLAYS_EXT 0x2008 -#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 -#define WGL_TRANSPARENT_EXT 0x200A -#define WGL_TRANSPARENT_VALUE_EXT 0x200B -#define WGL_SHARE_DEPTH_EXT 0x200C -#define WGL_SHARE_STENCIL_EXT 0x200D -#define WGL_SHARE_ACCUM_EXT 0x200E -#define WGL_SUPPORT_GDI_EXT 0x200F -#define WGL_SUPPORT_OPENGL_EXT 0x2010 -#define WGL_DOUBLE_BUFFER_EXT 0x2011 -#define WGL_STEREO_EXT 0x2012 -#define WGL_PIXEL_TYPE_EXT 0x2013 -#define WGL_COLOR_BITS_EXT 0x2014 -#define WGL_RED_BITS_EXT 0x2015 -#define WGL_RED_SHIFT_EXT 0x2016 -#define WGL_GREEN_BITS_EXT 0x2017 -#define WGL_GREEN_SHIFT_EXT 0x2018 -#define WGL_BLUE_BITS_EXT 0x2019 -#define WGL_BLUE_SHIFT_EXT 0x201A -#define WGL_ALPHA_BITS_EXT 0x201B -#define WGL_ALPHA_SHIFT_EXT 0x201C -#define WGL_ACCUM_BITS_EXT 0x201D -#define WGL_ACCUM_RED_BITS_EXT 0x201E -#define WGL_ACCUM_GREEN_BITS_EXT 0x201F -#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 -#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 -#define WGL_DEPTH_BITS_EXT 0x2022 -#define WGL_STENCIL_BITS_EXT 0x2023 -#define WGL_AUX_BUFFERS_EXT 0x2024 -#define WGL_NO_ACCELERATION_EXT 0x2025 -#define WGL_GENERIC_ACCELERATION_EXT 0x2026 -#define WGL_FULL_ACCELERATION_EXT 0x2027 -#define WGL_SWAP_EXCHANGE_EXT 0x2028 -#define WGL_SWAP_COPY_EXT 0x2029 -#define WGL_SWAP_UNDEFINED_EXT 0x202A -#define WGL_TYPE_RGBA_EXT 0x202B -#define WGL_TYPE_COLORINDEX_EXT 0x202C - -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues); - -#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT) -#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT) -#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT) - -#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format) - -#endif /* WGL_EXT_pixel_format */ - -/* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */ - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_EXT_pixel_format_packed_float 1 - -#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 - -#define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float) - -#endif /* WGL_EXT_pixel_format_packed_float */ - -/* -------------------------- WGL_EXT_swap_control ------------------------- */ - -#ifndef WGL_EXT_swap_control -#define WGL_EXT_swap_control 1 - -typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); -typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); - -#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT) -#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT) - -#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control) - -#endif /* WGL_EXT_swap_control */ - -/* ----------------------- WGL_EXT_swap_control_tear ----------------------- */ - -#ifndef WGL_EXT_swap_control_tear -#define WGL_EXT_swap_control_tear 1 - -#define WGLEW_EXT_swap_control_tear WGLEW_GET_VAR(__WGLEW_EXT_swap_control_tear) - -#endif /* WGL_EXT_swap_control_tear */ - -/* --------------------- WGL_I3D_digital_video_control --------------------- */ - -#ifndef WGL_I3D_digital_video_control -#define WGL_I3D_digital_video_control 1 - -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 -#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 -#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 - -typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); - -#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D) -#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D) - -#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control) - -#endif /* WGL_I3D_digital_video_control */ - -/* ----------------------------- WGL_I3D_gamma ----------------------------- */ - -#ifndef WGL_I3D_gamma -#define WGL_I3D_gamma 1 - -#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E -#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F - -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); - -#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D) -#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D) -#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D) -#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D) - -#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma) - -#endif /* WGL_I3D_gamma */ - -/* ---------------------------- WGL_I3D_genlock ---------------------------- */ - -#ifndef WGL_I3D_genlock -#define WGL_I3D_genlock 1 - -#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 -#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 -#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 -#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 -#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 -#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 -#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A -#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B -#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C - -typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource); -typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay); - -#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D) -#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D) -#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D) -#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D) -#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D) -#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D) -#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D) -#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D) -#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D) -#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D) -#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D) -#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D) - -#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock) - -#endif /* WGL_I3D_genlock */ - -/* -------------------------- WGL_I3D_image_buffer ------------------------- */ - -#ifndef WGL_I3D_image_buffer -#define WGL_I3D_image_buffer 1 - -#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 -#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 - -typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count); -typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); -typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); -typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count); - -#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D) -#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D) -#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D) -#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D) - -#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer) - -#endif /* WGL_I3D_image_buffer */ - -/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */ - -#ifndef WGL_I3D_swap_frame_lock -#define WGL_I3D_swap_frame_lock 1 - -typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag); - -#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D) -#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D) -#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D) -#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D) - -#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock) - -#endif /* WGL_I3D_swap_frame_lock */ - -/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */ - -#ifndef WGL_I3D_swap_frame_usage -#define WGL_I3D_swap_frame_usage 1 - -typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); - -#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D) -#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D) -#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D) -#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D) - -#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage) - -#endif /* WGL_I3D_swap_frame_usage */ - -/* --------------------------- WGL_NV_DX_interop --------------------------- */ - -#ifndef WGL_NV_DX_interop -#define WGL_NV_DX_interop 1 - -#define WGL_ACCESS_READ_ONLY_NV 0x0000 -#define WGL_ACCESS_READ_WRITE_NV 0x0001 -#define WGL_ACCESS_WRITE_DISCARD_NV 0x0002 - -typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); -typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects); -typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); -typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void* dxDevice); -typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access); -typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void* dxObject, HANDLE shareHandle); -typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects); -typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); - -#define wglDXCloseDeviceNV WGLEW_GET_FUN(__wglewDXCloseDeviceNV) -#define wglDXLockObjectsNV WGLEW_GET_FUN(__wglewDXLockObjectsNV) -#define wglDXObjectAccessNV WGLEW_GET_FUN(__wglewDXObjectAccessNV) -#define wglDXOpenDeviceNV WGLEW_GET_FUN(__wglewDXOpenDeviceNV) -#define wglDXRegisterObjectNV WGLEW_GET_FUN(__wglewDXRegisterObjectNV) -#define wglDXSetResourceShareHandleNV WGLEW_GET_FUN(__wglewDXSetResourceShareHandleNV) -#define wglDXUnlockObjectsNV WGLEW_GET_FUN(__wglewDXUnlockObjectsNV) -#define wglDXUnregisterObjectNV WGLEW_GET_FUN(__wglewDXUnregisterObjectNV) - -#define WGLEW_NV_DX_interop WGLEW_GET_VAR(__WGLEW_NV_DX_interop) - -#endif /* WGL_NV_DX_interop */ - -/* --------------------------- WGL_NV_DX_interop2 -------------------------- */ - -#ifndef WGL_NV_DX_interop2 -#define WGL_NV_DX_interop2 1 - -#define WGLEW_NV_DX_interop2 WGLEW_GET_VAR(__WGLEW_NV_DX_interop2) - -#endif /* WGL_NV_DX_interop2 */ - -/* --------------------------- WGL_NV_copy_image --------------------------- */ - -#ifndef WGL_NV_copy_image -#define WGL_NV_copy_image 1 - -typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define wglCopyImageSubDataNV WGLEW_GET_FUN(__wglewCopyImageSubDataNV) - -#define WGLEW_NV_copy_image WGLEW_GET_VAR(__WGLEW_NV_copy_image) - -#endif /* WGL_NV_copy_image */ - -/* -------------------------- WGL_NV_float_buffer -------------------------- */ - -#ifndef WGL_NV_float_buffer -#define WGL_NV_float_buffer 1 - -#define WGL_FLOAT_COMPONENTS_NV 0x20B0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 -#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 -#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 -#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 -#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 - -#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer) - -#endif /* WGL_NV_float_buffer */ - -/* -------------------------- WGL_NV_gpu_affinity -------------------------- */ - -#ifndef WGL_NV_gpu_affinity -#define WGL_NV_gpu_affinity 1 - -#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 -#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - -DECLARE_HANDLE(HGPUNV); -typedef struct _GPU_DEVICE { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD Flags; - RECT rcVirtualScreen; -} GPU_DEVICE, *PGPU_DEVICE; - -typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); -typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); -typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); -typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); -typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); - -#define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV) -#define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV) -#define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV) -#define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV) -#define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV) - -#define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity) - -#endif /* WGL_NV_gpu_affinity */ - -/* ---------------------- WGL_NV_multisample_coverage ---------------------- */ - -#ifndef WGL_NV_multisample_coverage -#define WGL_NV_multisample_coverage 1 - -#define WGL_COVERAGE_SAMPLES_NV 0x2042 -#define WGL_COLOR_SAMPLES_NV 0x20B9 - -#define WGLEW_NV_multisample_coverage WGLEW_GET_VAR(__WGLEW_NV_multisample_coverage) - -#endif /* WGL_NV_multisample_coverage */ - -/* -------------------------- WGL_NV_present_video ------------------------- */ - -#ifndef WGL_NV_present_video -#define WGL_NV_present_video 1 - -#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 - -DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList); -typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList); -typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int* piValue); - -#define wglBindVideoDeviceNV WGLEW_GET_FUN(__wglewBindVideoDeviceNV) -#define wglEnumerateVideoDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoDevicesNV) -#define wglQueryCurrentContextNV WGLEW_GET_FUN(__wglewQueryCurrentContextNV) - -#define WGLEW_NV_present_video WGLEW_GET_VAR(__WGLEW_NV_present_video) - -#endif /* WGL_NV_present_video */ - -/* ---------------------- WGL_NV_render_depth_texture ---------------------- */ - -#ifndef WGL_NV_render_depth_texture -#define WGL_NV_render_depth_texture 1 - -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 -#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 -#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 -#define WGL_DEPTH_COMPONENT_NV 0x20A7 - -#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture) - -#endif /* WGL_NV_render_depth_texture */ - -/* -------------------- WGL_NV_render_texture_rectangle -------------------- */ - -#ifndef WGL_NV_render_texture_rectangle -#define WGL_NV_render_texture_rectangle 1 - -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 -#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 - -#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle) - -#endif /* WGL_NV_render_texture_rectangle */ - -/* --------------------------- WGL_NV_swap_group --------------------------- */ - -#ifndef WGL_NV_swap_group -#define WGL_NV_swap_group 1 - -typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); -typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint* count); -typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers); -typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint* group, GLuint *barrier); -typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); - -#define wglBindSwapBarrierNV WGLEW_GET_FUN(__wglewBindSwapBarrierNV) -#define wglJoinSwapGroupNV WGLEW_GET_FUN(__wglewJoinSwapGroupNV) -#define wglQueryFrameCountNV WGLEW_GET_FUN(__wglewQueryFrameCountNV) -#define wglQueryMaxSwapGroupsNV WGLEW_GET_FUN(__wglewQueryMaxSwapGroupsNV) -#define wglQuerySwapGroupNV WGLEW_GET_FUN(__wglewQuerySwapGroupNV) -#define wglResetFrameCountNV WGLEW_GET_FUN(__wglewResetFrameCountNV) - -#define WGLEW_NV_swap_group WGLEW_GET_VAR(__WGLEW_NV_swap_group) - -#endif /* WGL_NV_swap_group */ - -/* ----------------------- WGL_NV_vertex_array_range ----------------------- */ - -#ifndef WGL_NV_vertex_array_range -#define WGL_NV_vertex_array_range 1 - -typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); -typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); - -#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV) -#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV) - -#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range) - -#endif /* WGL_NV_vertex_array_range */ - -/* -------------------------- WGL_NV_video_capture ------------------------- */ - -#ifndef WGL_NV_video_capture -#define WGL_NV_video_capture 1 - -#define WGL_UNIQUE_ID_NV 0x20CE -#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - -DECLARE_HANDLE(HVIDEOINPUTDEVICENV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); -typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV* phDeviceList); -typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); -typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); - -#define wglBindVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewBindVideoCaptureDeviceNV) -#define wglEnumerateVideoCaptureDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoCaptureDevicesNV) -#define wglLockVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewLockVideoCaptureDeviceNV) -#define wglQueryVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewQueryVideoCaptureDeviceNV) -#define wglReleaseVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoCaptureDeviceNV) - -#define WGLEW_NV_video_capture WGLEW_GET_VAR(__WGLEW_NV_video_capture) - -#endif /* WGL_NV_video_capture */ - -/* -------------------------- WGL_NV_video_output -------------------------- */ - -#ifndef WGL_NV_video_output -#define WGL_NV_video_output 1 - -#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 -#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 -#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 -#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 -#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 -#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 -#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define WGL_VIDEO_OUT_FRAME 0x20C8 -#define WGL_VIDEO_OUT_FIELD_1 0x20C9 -#define WGL_VIDEO_OUT_FIELD_2 0x20CA -#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB -#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC - -DECLARE_HANDLE(HPVIDEODEV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice); -typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock); - -#define wglBindVideoImageNV WGLEW_GET_FUN(__wglewBindVideoImageNV) -#define wglGetVideoDeviceNV WGLEW_GET_FUN(__wglewGetVideoDeviceNV) -#define wglGetVideoInfoNV WGLEW_GET_FUN(__wglewGetVideoInfoNV) -#define wglReleaseVideoDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoDeviceNV) -#define wglReleaseVideoImageNV WGLEW_GET_FUN(__wglewReleaseVideoImageNV) -#define wglSendPbufferToVideoNV WGLEW_GET_FUN(__wglewSendPbufferToVideoNV) - -#define WGLEW_NV_video_output WGLEW_GET_VAR(__WGLEW_NV_video_output) - -#endif /* WGL_NV_video_output */ - -/* -------------------------- WGL_OML_sync_control ------------------------- */ - -#ifndef WGL_OML_sync_control -#define WGL_OML_sync_control 1 - -typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator); -typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc); -typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc); - -#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML) -#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML) -#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML) -#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML) -#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML) -#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML) - -#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control) - -#endif /* WGL_OML_sync_control */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define WGLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT -#else -#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ - -#ifdef GLEW_MX -struct WGLEWContextStruct -{ -#endif /* GLEW_MX */ - -WGLEW_FUN_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL; - -WGLEW_FUN_EXPORT PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD; -WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD; -WGLEW_FUN_EXPORT PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD; -WGLEW_FUN_EXPORT PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD; -WGLEW_FUN_EXPORT PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD; -WGLEW_FUN_EXPORT PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD; - -WGLEW_FUN_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB; - -WGLEW_FUN_EXPORT PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB; - -WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB; - -WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB; -WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB; - -WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB; -WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB; -WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB; -WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB; -WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB; - -WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB; - -WGLEW_FUN_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB; -WGLEW_FUN_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB; -WGLEW_FUN_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB; - -WGLEW_FUN_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT; - -WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT; - -WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT; -WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT; - -WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT; -WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT; -WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT; -WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT; -WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT; - -WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT; - -WGLEW_FUN_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT; -WGLEW_FUN_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT; - -WGLEW_FUN_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D; -WGLEW_FUN_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D; - -WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D; -WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D; -WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D; -WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D; - -WGLEW_FUN_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D; -WGLEW_FUN_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D; - -WGLEW_FUN_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D; -WGLEW_FUN_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D; -WGLEW_FUN_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D; -WGLEW_FUN_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D; - -WGLEW_FUN_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D; - -WGLEW_FUN_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D; -WGLEW_FUN_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D; -WGLEW_FUN_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D; - -WGLEW_FUN_EXPORT PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV; -WGLEW_FUN_EXPORT PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV; -WGLEW_FUN_EXPORT PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV; -WGLEW_FUN_EXPORT PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV; -WGLEW_FUN_EXPORT PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV; -WGLEW_FUN_EXPORT PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV; -WGLEW_FUN_EXPORT PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV; -WGLEW_FUN_EXPORT PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV; - -WGLEW_FUN_EXPORT PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV; - -WGLEW_FUN_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV; -WGLEW_FUN_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV; -WGLEW_FUN_EXPORT PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV; - -WGLEW_FUN_EXPORT PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV; -WGLEW_FUN_EXPORT PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV; -WGLEW_FUN_EXPORT PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV; -WGLEW_FUN_EXPORT PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV; -WGLEW_FUN_EXPORT PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV; - -WGLEW_FUN_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV; -WGLEW_FUN_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV; -WGLEW_FUN_EXPORT PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV; -WGLEW_FUN_EXPORT PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV; -WGLEW_FUN_EXPORT PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV; - -WGLEW_FUN_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML; -WGLEW_FUN_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML; -WGLEW_FUN_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML; -WGLEW_FUN_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML; -WGLEW_FUN_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML; -WGLEW_FUN_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML; -WGLEW_VAR_EXPORT GLboolean __WGLEW_3DFX_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_3DL_stereo_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_AMD_gpu_association; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_buffer_region; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_robustness; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_extensions_string; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_framebuffer_sRGB; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_make_current_read; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pbuffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_render_texture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_application_isolation; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_share_group_isolation; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_depth_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_display_color_table; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_extensions_string; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_make_current_read; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pbuffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control_tear; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_digital_video_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_gamma; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_genlock; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_image_buffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop2; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_copy_image; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_float_buffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_gpu_affinity; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_multisample_coverage; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_present_video; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_depth_texture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_swap_group; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_vertex_array_range; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_capture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_output; -WGLEW_VAR_EXPORT GLboolean __WGLEW_OML_sync_control; - -#ifdef GLEW_MX -}; /* WGLEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX - -typedef struct WGLEWContextStruct WGLEWContext; -GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name); - -#define wglewInit() wglewContextInit(wglewGetContext()) -#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) -#define WGLEW_GET_FUN(x) wglewGetContext()->x - -#else /* GLEW_MX */ - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define WGLEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#undef GLEWAPI - -#endif /* __wglew_h__ */ diff --git a/Engine/lib/glew/src/glew.c b/Engine/lib/glew/src/glew.c deleted file mode 100644 index d075b52488..0000000000 --- a/Engine/lib/glew/src/glew.c +++ /dev/null @@ -1,18123 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include - -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -#if defined(__sgi) || defined (__sun) || defined(GLEW_APPLE_GLX) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun || GLEW_APPLE_GLX */ - -#if defined(__APPLE__) -#include -#include -#include - -#ifdef MAC_OS_X_VERSION_10_3 - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static void* image = NULL; - void* addr; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = dlopen("libRegal.dylib", RTLD_LAZY); -#else - image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); -#endif - } - if( !image ) return NULL; - addr = dlsym(image, (const char*)name); - if( addr ) return addr; -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#else - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static const struct mach_header* image = NULL; - NSSymbol symbol; - char* symbolName; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = NSAddImage("libRegal.dylib", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#else - image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#endif - } - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - /* if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); */ - symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; - free(symbolName); - if( symbol ) return NSAddressOfSymbol(symbol); -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#endif /* MAC_OS_X_VERSION_10_3 */ -#endif /* __APPLE__ */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -#elif defined(__sgi) || defined(__sun) -# define glewGetProcAddress(name) dlGetProcAddress(name) -#elif defined(__ANDROID__) -# define glewGetProcAddress(name) NULL /* TODO */ -#elif defined(__native_client__) -# define glewGetProcAddress(name) NULL /* TODO */ -#else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -#endif - -/* - * Define GLboolean const cast. - */ -#define CONST_CAST(x) (*(GLboolean*)&x) - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ -static GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0') i++; - return i; -} - -static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0' && s[i] != c) i++; - return (s[i] == '\0' || s[i] == c) ? i : 0; -} - -static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - if(a == NULL || b == NULL) - return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; - while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - (*a)++; - (*na)--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -/* - * Search for name in the extensions string. Use of strstr() - * is not sufficient because extension names can be prefixes of - * other extension names. Could use strtok() but the constant - * string returned by glGetString might be in read-only memory. - */ -static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) -{ - const GLubyte* p; - GLuint len = _glewStrLen((const GLubyte*)name); - p = start; - while (p < end) - { - GLuint n = _glewStrCLen(p, ' '); - if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; - p += n+1; - } - return GL_FALSE; -} - -#if !defined(_WIN32) || !defined(GLEW_MX) - -PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL; -PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL; -PFNGLTEXIMAGE3DPROC __glewTexImage3D = NULL; -PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D = NULL; - -PFNGLACTIVETEXTUREPROC __glewActiveTexture = NULL; -PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture = NULL; -PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D = NULL; -PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D = NULL; -PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage = NULL; -PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd = NULL; -PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf = NULL; -PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd = NULL; -PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf = NULL; -PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d = NULL; -PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv = NULL; -PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f = NULL; -PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv = NULL; -PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i = NULL; -PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv = NULL; -PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s = NULL; -PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv = NULL; -PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d = NULL; -PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv = NULL; -PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f = NULL; -PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv = NULL; -PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i = NULL; -PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv = NULL; -PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s = NULL; -PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv = NULL; -PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d = NULL; -PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv = NULL; -PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f = NULL; -PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv = NULL; -PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i = NULL; -PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv = NULL; -PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s = NULL; -PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv = NULL; -PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d = NULL; -PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv = NULL; -PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f = NULL; -PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv = NULL; -PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i = NULL; -PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv = NULL; -PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s = NULL; -PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv = NULL; -PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage = NULL; - -PFNGLBLENDCOLORPROC __glewBlendColor = NULL; -PFNGLBLENDEQUATIONPROC __glewBlendEquation = NULL; -PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate = NULL; -PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer = NULL; -PFNGLFOGCOORDDPROC __glewFogCoordd = NULL; -PFNGLFOGCOORDDVPROC __glewFogCoorddv = NULL; -PFNGLFOGCOORDFPROC __glewFogCoordf = NULL; -PFNGLFOGCOORDFVPROC __glewFogCoordfv = NULL; -PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays = NULL; -PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements = NULL; -PFNGLPOINTPARAMETERFPROC __glewPointParameterf = NULL; -PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv = NULL; -PFNGLPOINTPARAMETERIPROC __glewPointParameteri = NULL; -PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv = NULL; -PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b = NULL; -PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv = NULL; -PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d = NULL; -PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv = NULL; -PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f = NULL; -PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv = NULL; -PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i = NULL; -PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv = NULL; -PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s = NULL; -PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv = NULL; -PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub = NULL; -PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv = NULL; -PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui = NULL; -PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv = NULL; -PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us = NULL; -PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv = NULL; -PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer = NULL; -PFNGLWINDOWPOS2DPROC __glewWindowPos2d = NULL; -PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv = NULL; -PFNGLWINDOWPOS2FPROC __glewWindowPos2f = NULL; -PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv = NULL; -PFNGLWINDOWPOS2IPROC __glewWindowPos2i = NULL; -PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv = NULL; -PFNGLWINDOWPOS2SPROC __glewWindowPos2s = NULL; -PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv = NULL; -PFNGLWINDOWPOS3DPROC __glewWindowPos3d = NULL; -PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv = NULL; -PFNGLWINDOWPOS3FPROC __glewWindowPos3f = NULL; -PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv = NULL; -PFNGLWINDOWPOS3IPROC __glewWindowPos3i = NULL; -PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv = NULL; -PFNGLWINDOWPOS3SPROC __glewWindowPos3s = NULL; -PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv = NULL; - -PFNGLBEGINQUERYPROC __glewBeginQuery = NULL; -PFNGLBINDBUFFERPROC __glewBindBuffer = NULL; -PFNGLBUFFERDATAPROC __glewBufferData = NULL; -PFNGLBUFFERSUBDATAPROC __glewBufferSubData = NULL; -PFNGLDELETEBUFFERSPROC __glewDeleteBuffers = NULL; -PFNGLDELETEQUERIESPROC __glewDeleteQueries = NULL; -PFNGLENDQUERYPROC __glewEndQuery = NULL; -PFNGLGENBUFFERSPROC __glewGenBuffers = NULL; -PFNGLGENQUERIESPROC __glewGenQueries = NULL; -PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv = NULL; -PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv = NULL; -PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData = NULL; -PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv = NULL; -PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv = NULL; -PFNGLGETQUERYIVPROC __glewGetQueryiv = NULL; -PFNGLISBUFFERPROC __glewIsBuffer = NULL; -PFNGLISQUERYPROC __glewIsQuery = NULL; -PFNGLMAPBUFFERPROC __glewMapBuffer = NULL; -PFNGLUNMAPBUFFERPROC __glewUnmapBuffer = NULL; - -PFNGLATTACHSHADERPROC __glewAttachShader = NULL; -PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation = NULL; -PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate = NULL; -PFNGLCOMPILESHADERPROC __glewCompileShader = NULL; -PFNGLCREATEPROGRAMPROC __glewCreateProgram = NULL; -PFNGLCREATESHADERPROC __glewCreateShader = NULL; -PFNGLDELETEPROGRAMPROC __glewDeleteProgram = NULL; -PFNGLDELETESHADERPROC __glewDeleteShader = NULL; -PFNGLDETACHSHADERPROC __glewDetachShader = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray = NULL; -PFNGLDRAWBUFFERSPROC __glewDrawBuffers = NULL; -PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray = NULL; -PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib = NULL; -PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform = NULL; -PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders = NULL; -PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation = NULL; -PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog = NULL; -PFNGLGETPROGRAMIVPROC __glewGetProgramiv = NULL; -PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog = NULL; -PFNGLGETSHADERSOURCEPROC __glewGetShaderSource = NULL; -PFNGLGETSHADERIVPROC __glewGetShaderiv = NULL; -PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation = NULL; -PFNGLGETUNIFORMFVPROC __glewGetUniformfv = NULL; -PFNGLGETUNIFORMIVPROC __glewGetUniformiv = NULL; -PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv = NULL; -PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv = NULL; -PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv = NULL; -PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv = NULL; -PFNGLISPROGRAMPROC __glewIsProgram = NULL; -PFNGLISSHADERPROC __glewIsShader = NULL; -PFNGLLINKPROGRAMPROC __glewLinkProgram = NULL; -PFNGLSHADERSOURCEPROC __glewShaderSource = NULL; -PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate = NULL; -PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate = NULL; -PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate = NULL; -PFNGLUNIFORM1FPROC __glewUniform1f = NULL; -PFNGLUNIFORM1FVPROC __glewUniform1fv = NULL; -PFNGLUNIFORM1IPROC __glewUniform1i = NULL; -PFNGLUNIFORM1IVPROC __glewUniform1iv = NULL; -PFNGLUNIFORM2FPROC __glewUniform2f = NULL; -PFNGLUNIFORM2FVPROC __glewUniform2fv = NULL; -PFNGLUNIFORM2IPROC __glewUniform2i = NULL; -PFNGLUNIFORM2IVPROC __glewUniform2iv = NULL; -PFNGLUNIFORM3FPROC __glewUniform3f = NULL; -PFNGLUNIFORM3FVPROC __glewUniform3fv = NULL; -PFNGLUNIFORM3IPROC __glewUniform3i = NULL; -PFNGLUNIFORM3IVPROC __glewUniform3iv = NULL; -PFNGLUNIFORM4FPROC __glewUniform4f = NULL; -PFNGLUNIFORM4FVPROC __glewUniform4fv = NULL; -PFNGLUNIFORM4IPROC __glewUniform4i = NULL; -PFNGLUNIFORM4IVPROC __glewUniform4iv = NULL; -PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv = NULL; -PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv = NULL; -PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv = NULL; -PFNGLUSEPROGRAMPROC __glewUseProgram = NULL; -PFNGLVALIDATEPROGRAMPROC __glewValidateProgram = NULL; -PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d = NULL; -PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv = NULL; -PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f = NULL; -PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv = NULL; -PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s = NULL; -PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv = NULL; -PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d = NULL; -PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv = NULL; -PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f = NULL; -PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv = NULL; -PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s = NULL; -PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv = NULL; -PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d = NULL; -PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv = NULL; -PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f = NULL; -PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv = NULL; -PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s = NULL; -PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv = NULL; -PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv = NULL; -PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv = NULL; -PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv = NULL; -PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub = NULL; -PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv = NULL; -PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv = NULL; -PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv = NULL; -PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv = NULL; -PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d = NULL; -PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv = NULL; -PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f = NULL; -PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv = NULL; -PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv = NULL; -PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s = NULL; -PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv = NULL; -PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv = NULL; -PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv = NULL; -PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv = NULL; -PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer = NULL; - -PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv = NULL; -PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv = NULL; -PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv = NULL; -PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv = NULL; -PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv = NULL; -PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv = NULL; - -PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender = NULL; -PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback = NULL; -PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation = NULL; -PFNGLCLAMPCOLORPROC __glewClampColor = NULL; -PFNGLCLEARBUFFERFIPROC __glewClearBufferfi = NULL; -PFNGLCLEARBUFFERFVPROC __glewClearBufferfv = NULL; -PFNGLCLEARBUFFERIVPROC __glewClearBufferiv = NULL; -PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv = NULL; -PFNGLCOLORMASKIPROC __glewColorMaski = NULL; -PFNGLDISABLEIPROC __glewDisablei = NULL; -PFNGLENABLEIPROC __glewEnablei = NULL; -PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender = NULL; -PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback = NULL; -PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v = NULL; -PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation = NULL; -PFNGLGETSTRINGIPROC __glewGetStringi = NULL; -PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv = NULL; -PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying = NULL; -PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv = NULL; -PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv = NULL; -PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv = NULL; -PFNGLISENABLEDIPROC __glewIsEnabledi = NULL; -PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv = NULL; -PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings = NULL; -PFNGLUNIFORM1UIPROC __glewUniform1ui = NULL; -PFNGLUNIFORM1UIVPROC __glewUniform1uiv = NULL; -PFNGLUNIFORM2UIPROC __glewUniform2ui = NULL; -PFNGLUNIFORM2UIVPROC __glewUniform2uiv = NULL; -PFNGLUNIFORM3UIPROC __glewUniform3ui = NULL; -PFNGLUNIFORM3UIVPROC __glewUniform3uiv = NULL; -PFNGLUNIFORM4UIPROC __glewUniform4ui = NULL; -PFNGLUNIFORM4UIVPROC __glewUniform4uiv = NULL; -PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i = NULL; -PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv = NULL; -PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui = NULL; -PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv = NULL; -PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i = NULL; -PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv = NULL; -PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui = NULL; -PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv = NULL; -PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i = NULL; -PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv = NULL; -PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui = NULL; -PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv = NULL; -PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv = NULL; -PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i = NULL; -PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv = NULL; -PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv = NULL; -PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv = NULL; -PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui = NULL; -PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv = NULL; -PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv = NULL; -PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer = NULL; - -PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced = NULL; -PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced = NULL; -PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex = NULL; -PFNGLTEXBUFFERPROC __glewTexBuffer = NULL; - -PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture = NULL; -PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v = NULL; -PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v = NULL; - -PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor = NULL; - -PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei = NULL; -PFNGLBLENDEQUATIONIPROC __glewBlendEquationi = NULL; -PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei = NULL; -PFNGLBLENDFUNCIPROC __glewBlendFunci = NULL; -PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading = NULL; - -PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX = NULL; - -PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD = NULL; -PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD = NULL; -PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD = NULL; -PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD = NULL; - -PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD = NULL; -PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD = NULL; -PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD = NULL; -PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD = NULL; - -PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD = NULL; - -PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD = NULL; -PFNGLGENNAMESAMDPROC __glewGenNamesAMD = NULL; -PFNGLISNAMEAMDPROC __glewIsNameAMD = NULL; - -PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD = NULL; -PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD = NULL; -PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD = NULL; -PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD = NULL; -PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD = NULL; -PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD = NULL; -PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD = NULL; -PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD = NULL; -PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD = NULL; -PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD = NULL; -PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD = NULL; - -PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD = NULL; - -PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD = NULL; -PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD = NULL; - -PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD = NULL; - -PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD = NULL; -PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD = NULL; - -PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE = NULL; - -PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE = NULL; -PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE = NULL; -PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE = NULL; - -PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE = NULL; -PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE = NULL; -PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE = NULL; -PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE = NULL; -PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE = NULL; -PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE = NULL; -PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE = NULL; -PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE = NULL; -PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE = NULL; -PFNGLISQUERYANGLEPROC __glewIsQueryANGLE = NULL; -PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE = NULL; - -PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE = NULL; - -PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; -PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; -PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; -PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE = NULL; -PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE = NULL; - -PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE = NULL; -PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE = NULL; -PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE = NULL; -PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE = NULL; -PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE = NULL; -PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE = NULL; -PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE = NULL; -PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE = NULL; - -PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE = NULL; -PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE = NULL; - -PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE = NULL; -PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE = NULL; -PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE = NULL; - -PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE = NULL; -PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE = NULL; - -PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE = NULL; -PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE = NULL; -PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE = NULL; -PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE = NULL; - -PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE = NULL; -PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE = NULL; -PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE = NULL; - -PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE = NULL; -PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE = NULL; -PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE = NULL; -PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE = NULL; -PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE = NULL; -PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE = NULL; -PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE = NULL; - -PFNGLCLEARDEPTHFPROC __glewClearDepthf = NULL; -PFNGLDEPTHRANGEFPROC __glewDepthRangef = NULL; -PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat = NULL; -PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler = NULL; -PFNGLSHADERBINARYPROC __glewShaderBinary = NULL; - -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance = NULL; - -PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB = NULL; -PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB = NULL; -PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB = NULL; -PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB = NULL; -PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB = NULL; -PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB = NULL; -PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB = NULL; -PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB = NULL; -PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB = NULL; -PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB = NULL; -PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB = NULL; -PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB = NULL; -PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB = NULL; -PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB = NULL; - -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed = NULL; -PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex = NULL; - -PFNGLBUFFERSTORAGEPROC __glewBufferStorage = NULL; -PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT = NULL; - -PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB = NULL; - -PFNGLCLEARBUFFERDATAPROC __glewClearBufferData = NULL; -PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData = NULL; -PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT = NULL; -PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT = NULL; - -PFNGLCLEARTEXIMAGEPROC __glewClearTexImage = NULL; -PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage = NULL; - -PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; - -PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute = NULL; -PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect = NULL; - -PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB = NULL; - -PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData = NULL; - -PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData = NULL; - -PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB = NULL; -PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB = NULL; -PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB = NULL; -PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB = NULL; - -PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB = NULL; - -PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB = NULL; -PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB = NULL; -PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB = NULL; -PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB = NULL; - -PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex = NULL; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex = NULL; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex = NULL; - -PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect = NULL; -PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect = NULL; - -PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri = NULL; -PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv = NULL; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT = NULL; -PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT = NULL; - -PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer = NULL; -PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer = NULL; -PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus = NULL; -PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers = NULL; -PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers = NULL; -PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer = NULL; -PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D = NULL; -PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D = NULL; -PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D = NULL; -PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer = NULL; -PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers = NULL; -PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers = NULL; -PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv = NULL; -PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer = NULL; -PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer = NULL; -PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage = NULL; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample = NULL; - -PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB = NULL; -PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB = NULL; -PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB = NULL; -PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB = NULL; - -PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary = NULL; -PFNGLPROGRAMBINARYPROC __glewProgramBinary = NULL; -PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri = NULL; - -PFNGLGETUNIFORMDVPROC __glewGetUniformdv = NULL; -PFNGLUNIFORM1DPROC __glewUniform1d = NULL; -PFNGLUNIFORM1DVPROC __glewUniform1dv = NULL; -PFNGLUNIFORM2DPROC __glewUniform2d = NULL; -PFNGLUNIFORM2DVPROC __glewUniform2dv = NULL; -PFNGLUNIFORM3DPROC __glewUniform3d = NULL; -PFNGLUNIFORM3DVPROC __glewUniform3dv = NULL; -PFNGLUNIFORM4DPROC __glewUniform4d = NULL; -PFNGLUNIFORM4DVPROC __glewUniform4dv = NULL; -PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv = NULL; -PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv = NULL; -PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv = NULL; -PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv = NULL; -PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv = NULL; -PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv = NULL; -PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv = NULL; -PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv = NULL; -PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv = NULL; - -PFNGLCOLORSUBTABLEPROC __glewColorSubTable = NULL; -PFNGLCOLORTABLEPROC __glewColorTable = NULL; -PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv = NULL; -PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv = NULL; -PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D = NULL; -PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D = NULL; -PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf = NULL; -PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv = NULL; -PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri = NULL; -PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv = NULL; -PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable = NULL; -PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable = NULL; -PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D = NULL; -PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D = NULL; -PFNGLGETCOLORTABLEPROC __glewGetColorTable = NULL; -PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv = NULL; -PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv = NULL; -PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter = NULL; -PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv = NULL; -PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv = NULL; -PFNGLGETHISTOGRAMPROC __glewGetHistogram = NULL; -PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv = NULL; -PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv = NULL; -PFNGLGETMINMAXPROC __glewGetMinmax = NULL; -PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv = NULL; -PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv = NULL; -PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter = NULL; -PFNGLHISTOGRAMPROC __glewHistogram = NULL; -PFNGLMINMAXPROC __glewMinmax = NULL; -PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; -PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; -PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB = NULL; - -PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB = NULL; -PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB = NULL; -PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB = NULL; - -PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ = NULL; - -PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v = NULL; - -PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData = NULL; -PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData = NULL; -PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer = NULL; -PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer = NULL; -PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage = NULL; -PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage = NULL; - -PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange = NULL; -PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange = NULL; - -PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB = NULL; -PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB = NULL; -PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; -PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; -PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; - -PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase = NULL; -PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange = NULL; -PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures = NULL; -PFNGLBINDSAMPLERSPROC __glewBindSamplers = NULL; -PFNGLBINDTEXTURESPROC __glewBindTextures = NULL; -PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect = NULL; - -PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB = NULL; - -PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB = NULL; -PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB = NULL; -PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB = NULL; -PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB = NULL; -PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB = NULL; -PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB = NULL; -PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB = NULL; -PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB = NULL; -PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB = NULL; -PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB = NULL; -PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB = NULL; -PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB = NULL; -PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB = NULL; -PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB = NULL; -PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB = NULL; -PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB = NULL; -PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB = NULL; -PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB = NULL; -PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB = NULL; -PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB = NULL; -PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB = NULL; -PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB = NULL; -PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB = NULL; -PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB = NULL; -PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB = NULL; -PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB = NULL; -PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB = NULL; -PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB = NULL; -PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB = NULL; -PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB = NULL; -PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB = NULL; -PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB = NULL; -PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB = NULL; -PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB = NULL; - -PFNGLBEGINQUERYARBPROC __glewBeginQueryARB = NULL; -PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB = NULL; -PFNGLENDQUERYARBPROC __glewEndQueryARB = NULL; -PFNGLGENQUERIESARBPROC __glewGenQueriesARB = NULL; -PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB = NULL; -PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB = NULL; -PFNGLGETQUERYIVARBPROC __glewGetQueryivARB = NULL; -PFNGLISQUERYARBPROC __glewIsQueryARB = NULL; - -PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB = NULL; -PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB = NULL; - -PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv = NULL; -PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex = NULL; -PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation = NULL; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex = NULL; -PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName = NULL; -PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv = NULL; - -PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex = NULL; - -PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB = NULL; -PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB = NULL; -PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB = NULL; -PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB = NULL; -PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB = NULL; -PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB = NULL; -PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB = NULL; -PFNGLGETNMAPIVARBPROC __glewGetnMapivARB = NULL; -PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB = NULL; -PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB = NULL; -PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB = NULL; -PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB = NULL; -PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB = NULL; -PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB = NULL; -PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB = NULL; -PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB = NULL; -PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB = NULL; -PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB = NULL; -PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB = NULL; -PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB = NULL; - -PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB = NULL; - -PFNGLBINDSAMPLERPROC __glewBindSampler = NULL; -PFNGLDELETESAMPLERSPROC __glewDeleteSamplers = NULL; -PFNGLGENSAMPLERSPROC __glewGenSamplers = NULL; -PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv = NULL; -PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv = NULL; -PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv = NULL; -PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv = NULL; -PFNGLISSAMPLERPROC __glewIsSampler = NULL; -PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv = NULL; -PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv = NULL; -PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf = NULL; -PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv = NULL; -PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri = NULL; -PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv = NULL; - -PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram = NULL; -PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline = NULL; -PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv = NULL; -PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines = NULL; -PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines = NULL; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog = NULL; -PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv = NULL; -PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline = NULL; -PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d = NULL; -PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv = NULL; -PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f = NULL; -PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv = NULL; -PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i = NULL; -PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv = NULL; -PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui = NULL; -PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv = NULL; -PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d = NULL; -PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv = NULL; -PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f = NULL; -PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv = NULL; -PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i = NULL; -PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv = NULL; -PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui = NULL; -PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv = NULL; -PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d = NULL; -PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv = NULL; -PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f = NULL; -PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv = NULL; -PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i = NULL; -PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv = NULL; -PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui = NULL; -PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv = NULL; -PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d = NULL; -PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv = NULL; -PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f = NULL; -PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv = NULL; -PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i = NULL; -PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv = NULL; -PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui = NULL; -PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv = NULL; -PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages = NULL; -PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline = NULL; - -PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv = NULL; - -PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture = NULL; -PFNGLMEMORYBARRIERPROC __glewMemoryBarrier = NULL; - -PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB = NULL; -PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB = NULL; -PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB = NULL; -PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB = NULL; -PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB = NULL; -PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB = NULL; -PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB = NULL; -PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB = NULL; -PFNGLGETHANDLEARBPROC __glewGetHandleARB = NULL; -PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB = NULL; -PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB = NULL; -PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB = NULL; -PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB = NULL; -PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB = NULL; -PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB = NULL; -PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB = NULL; -PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB = NULL; -PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB = NULL; -PFNGLUNIFORM1FARBPROC __glewUniform1fARB = NULL; -PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB = NULL; -PFNGLUNIFORM1IARBPROC __glewUniform1iARB = NULL; -PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB = NULL; -PFNGLUNIFORM2FARBPROC __glewUniform2fARB = NULL; -PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB = NULL; -PFNGLUNIFORM2IARBPROC __glewUniform2iARB = NULL; -PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB = NULL; -PFNGLUNIFORM3FARBPROC __glewUniform3fARB = NULL; -PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB = NULL; -PFNGLUNIFORM3IARBPROC __glewUniform3iARB = NULL; -PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB = NULL; -PFNGLUNIFORM4FARBPROC __glewUniform4fARB = NULL; -PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB = NULL; -PFNGLUNIFORM4IARBPROC __glewUniform4iARB = NULL; -PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB = NULL; -PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB = NULL; -PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB = NULL; -PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB = NULL; -PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB = NULL; -PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB = NULL; - -PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding = NULL; - -PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName = NULL; -PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName = NULL; -PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv = NULL; -PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv = NULL; -PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex = NULL; -PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation = NULL; -PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv = NULL; -PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv = NULL; - -PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB = NULL; -PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB = NULL; -PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB = NULL; -PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB = NULL; -PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB = NULL; -PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB = NULL; - -PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB = NULL; -PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT = NULL; - -PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync = NULL; -PFNGLDELETESYNCPROC __glewDeleteSync = NULL; -PFNGLFENCESYNCPROC __glewFenceSync = NULL; -PFNGLGETINTEGER64VPROC __glewGetInteger64v = NULL; -PFNGLGETSYNCIVPROC __glewGetSynciv = NULL; -PFNGLISSYNCPROC __glewIsSync = NULL; -PFNGLWAITSYNCPROC __glewWaitSync = NULL; - -PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv = NULL; -PFNGLPATCHPARAMETERIPROC __glewPatchParameteri = NULL; - -PFNGLTEXBUFFERARBPROC __glewTexBufferARB = NULL; - -PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange = NULL; -PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT = NULL; - -PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB = NULL; -PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB = NULL; -PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB = NULL; - -PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv = NULL; -PFNGLSAMPLEMASKIPROC __glewSampleMaski = NULL; -PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample = NULL; -PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample = NULL; - -PFNGLTEXSTORAGE1DPROC __glewTexStorage1D = NULL; -PFNGLTEXSTORAGE2DPROC __glewTexStorage2D = NULL; -PFNGLTEXSTORAGE3DPROC __glewTexStorage3D = NULL; -PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT = NULL; -PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT = NULL; -PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT = NULL; - -PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample = NULL; -PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample = NULL; -PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT = NULL; -PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT = NULL; - -PFNGLTEXTUREVIEWPROC __glewTextureView = NULL; - -PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v = NULL; -PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v = NULL; -PFNGLQUERYCOUNTERPROC __glewQueryCounter = NULL; - -PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback = NULL; -PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks = NULL; -PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback = NULL; -PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks = NULL; -PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback = NULL; -PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback = NULL; -PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback = NULL; - -PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed = NULL; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream = NULL; -PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed = NULL; -PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv = NULL; - -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced = NULL; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced = NULL; - -PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB = NULL; -PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB = NULL; -PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB = NULL; -PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB = NULL; - -PFNGLBINDBUFFERBASEPROC __glewBindBufferBase = NULL; -PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange = NULL; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName = NULL; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv = NULL; -PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName = NULL; -PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv = NULL; -PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v = NULL; -PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex = NULL; -PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices = NULL; -PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding = NULL; - -PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray = NULL; -PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays = NULL; -PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays = NULL; -PFNGLISVERTEXARRAYPROC __glewIsVertexArray = NULL; - -PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv = NULL; -PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d = NULL; -PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv = NULL; -PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d = NULL; -PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv = NULL; -PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d = NULL; -PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv = NULL; -PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d = NULL; -PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv = NULL; -PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer = NULL; - -PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer = NULL; -PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding = NULL; -PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat = NULL; -PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat = NULL; -PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat = NULL; -PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor = NULL; - -PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB = NULL; -PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB = NULL; -PFNGLWEIGHTBVARBPROC __glewWeightbvARB = NULL; -PFNGLWEIGHTDVARBPROC __glewWeightdvARB = NULL; -PFNGLWEIGHTFVARBPROC __glewWeightfvARB = NULL; -PFNGLWEIGHTIVARBPROC __glewWeightivARB = NULL; -PFNGLWEIGHTSVARBPROC __glewWeightsvARB = NULL; -PFNGLWEIGHTUBVARBPROC __glewWeightubvARB = NULL; -PFNGLWEIGHTUIVARBPROC __glewWeightuivARB = NULL; -PFNGLWEIGHTUSVARBPROC __glewWeightusvARB = NULL; - -PFNGLBINDBUFFERARBPROC __glewBindBufferARB = NULL; -PFNGLBUFFERDATAARBPROC __glewBufferDataARB = NULL; -PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB = NULL; -PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB = NULL; -PFNGLGENBUFFERSARBPROC __glewGenBuffersARB = NULL; -PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB = NULL; -PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB = NULL; -PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB = NULL; -PFNGLISBUFFERARBPROC __glewIsBufferARB = NULL; -PFNGLMAPBUFFERARBPROC __glewMapBufferARB = NULL; -PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB = NULL; - -PFNGLBINDPROGRAMARBPROC __glewBindProgramARB = NULL; -PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB = NULL; -PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB = NULL; -PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB = NULL; -PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB = NULL; -PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB = NULL; -PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB = NULL; -PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB = NULL; -PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB = NULL; -PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB = NULL; -PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB = NULL; -PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB = NULL; -PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB = NULL; -PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB = NULL; -PFNGLISPROGRAMARBPROC __glewIsProgramARB = NULL; -PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB = NULL; -PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB = NULL; -PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB = NULL; -PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB = NULL; -PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB = NULL; -PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB = NULL; -PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB = NULL; -PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB = NULL; -PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB = NULL; -PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB = NULL; -PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB = NULL; -PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB = NULL; -PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB = NULL; -PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB = NULL; -PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB = NULL; -PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB = NULL; -PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB = NULL; -PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB = NULL; -PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB = NULL; -PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB = NULL; -PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB = NULL; -PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB = NULL; -PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB = NULL; -PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB = NULL; -PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB = NULL; -PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB = NULL; -PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB = NULL; -PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB = NULL; -PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB = NULL; -PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB = NULL; -PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB = NULL; -PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB = NULL; -PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB = NULL; -PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB = NULL; -PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB = NULL; -PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB = NULL; -PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB = NULL; -PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB = NULL; -PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB = NULL; -PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB = NULL; -PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB = NULL; -PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB = NULL; - -PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB = NULL; -PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB = NULL; -PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB = NULL; - -PFNGLCOLORP3UIPROC __glewColorP3ui = NULL; -PFNGLCOLORP3UIVPROC __glewColorP3uiv = NULL; -PFNGLCOLORP4UIPROC __glewColorP4ui = NULL; -PFNGLCOLORP4UIVPROC __glewColorP4uiv = NULL; -PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui = NULL; -PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv = NULL; -PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui = NULL; -PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv = NULL; -PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui = NULL; -PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv = NULL; -PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui = NULL; -PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv = NULL; -PFNGLNORMALP3UIPROC __glewNormalP3ui = NULL; -PFNGLNORMALP3UIVPROC __glewNormalP3uiv = NULL; -PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui = NULL; -PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv = NULL; -PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui = NULL; -PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv = NULL; -PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui = NULL; -PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv = NULL; -PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui = NULL; -PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv = NULL; -PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui = NULL; -PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv = NULL; -PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui = NULL; -PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv = NULL; -PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui = NULL; -PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv = NULL; -PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui = NULL; -PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv = NULL; -PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui = NULL; -PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv = NULL; -PFNGLVERTEXP2UIPROC __glewVertexP2ui = NULL; -PFNGLVERTEXP2UIVPROC __glewVertexP2uiv = NULL; -PFNGLVERTEXP3UIPROC __glewVertexP3ui = NULL; -PFNGLVERTEXP3UIVPROC __glewVertexP3uiv = NULL; -PFNGLVERTEXP4UIPROC __glewVertexP4ui = NULL; -PFNGLVERTEXP4UIVPROC __glewVertexP4uiv = NULL; - -PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv = NULL; -PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed = NULL; -PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v = NULL; -PFNGLGETFLOATI_VPROC __glewGetFloati_v = NULL; -PFNGLSCISSORARRAYVPROC __glewScissorArrayv = NULL; -PFNGLSCISSORINDEXEDPROC __glewScissorIndexed = NULL; -PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv = NULL; -PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv = NULL; -PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf = NULL; -PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv = NULL; - -PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB = NULL; -PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB = NULL; -PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB = NULL; -PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB = NULL; -PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB = NULL; -PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB = NULL; -PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB = NULL; -PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB = NULL; -PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB = NULL; -PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB = NULL; -PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB = NULL; -PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB = NULL; -PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB = NULL; -PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB = NULL; -PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB = NULL; -PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB = NULL; - -PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI = NULL; - -PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI = NULL; -PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI = NULL; -PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI = NULL; - -PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI = NULL; -PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI = NULL; -PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI = NULL; -PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI = NULL; - -PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI = NULL; -PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI = NULL; -PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI = NULL; -PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI = NULL; -PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI = NULL; -PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI = NULL; -PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI = NULL; -PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI = NULL; -PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI = NULL; -PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI = NULL; -PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI = NULL; -PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI = NULL; -PFNGLSAMPLEMAPATIPROC __glewSampleMapATI = NULL; -PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI = NULL; - -PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI = NULL; -PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI = NULL; - -PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI = NULL; -PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI = NULL; - -PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI = NULL; -PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI = NULL; - -PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI = NULL; -PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI = NULL; -PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI = NULL; -PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI = NULL; -PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI = NULL; -PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI = NULL; -PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI = NULL; -PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI = NULL; -PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI = NULL; -PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI = NULL; -PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI = NULL; -PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI = NULL; - -PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI = NULL; -PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI = NULL; -PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI = NULL; - -PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI = NULL; -PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI = NULL; -PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI = NULL; -PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI = NULL; -PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI = NULL; -PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI = NULL; -PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI = NULL; -PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI = NULL; -PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI = NULL; -PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI = NULL; -PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI = NULL; -PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI = NULL; -PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI = NULL; -PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI = NULL; -PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI = NULL; -PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI = NULL; -PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI = NULL; -PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI = NULL; -PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI = NULL; -PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI = NULL; -PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI = NULL; -PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI = NULL; -PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI = NULL; -PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI = NULL; -PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI = NULL; -PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI = NULL; -PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI = NULL; -PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI = NULL; -PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI = NULL; -PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI = NULL; -PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI = NULL; -PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI = NULL; -PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI = NULL; -PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI = NULL; -PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI = NULL; -PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI = NULL; -PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI = NULL; -PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI = NULL; -PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI = NULL; -PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI = NULL; -PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI = NULL; -PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI = NULL; -PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI = NULL; -PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI = NULL; -PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI = NULL; - -PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT = NULL; -PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT = NULL; -PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT = NULL; - -PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT = NULL; - -PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT = NULL; - -PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT = NULL; - -PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT = NULL; - -PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT = NULL; -PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT = NULL; - -PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT = NULL; -PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT = NULL; - -PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT = NULL; -PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT = NULL; -PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT = NULL; -PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT = NULL; -PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT = NULL; -PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT = NULL; -PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT = NULL; -PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT = NULL; -PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT = NULL; -PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT = NULL; -PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT = NULL; -PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT = NULL; -PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT = NULL; - -PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT = NULL; -PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT = NULL; - -PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT = NULL; -PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT = NULL; - -PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT = NULL; -PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT = NULL; - -PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT = NULL; -PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT = NULL; -PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT = NULL; - -PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT = NULL; - -PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT = NULL; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT = NULL; -PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT = NULL; -PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT = NULL; -PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT = NULL; -PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT = NULL; -PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT = NULL; -PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT = NULL; -PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT = NULL; -PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT = NULL; -PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT = NULL; -PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT = NULL; -PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT = NULL; -PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT = NULL; -PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT = NULL; -PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT = NULL; -PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT = NULL; -PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT = NULL; -PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT = NULL; -PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT = NULL; -PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT = NULL; -PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT = NULL; -PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT = NULL; -PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT = NULL; -PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT = NULL; -PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT = NULL; -PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT = NULL; -PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT = NULL; -PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT = NULL; -PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT = NULL; -PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT = NULL; -PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT = NULL; -PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT = NULL; -PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT = NULL; -PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT = NULL; -PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT = NULL; -PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT = NULL; -PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT = NULL; -PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT = NULL; -PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT = NULL; -PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT = NULL; -PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT = NULL; -PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT = NULL; -PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT = NULL; -PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT = NULL; -PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT = NULL; -PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT = NULL; -PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT = NULL; -PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT = NULL; -PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT = NULL; -PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT = NULL; -PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT = NULL; -PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT = NULL; -PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT = NULL; -PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT = NULL; -PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT = NULL; -PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT = NULL; -PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT = NULL; -PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT = NULL; -PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT = NULL; -PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT = NULL; -PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT = NULL; -PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT = NULL; -PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT = NULL; -PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT = NULL; -PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT = NULL; -PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT = NULL; -PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT = NULL; -PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT = NULL; -PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT = NULL; -PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT = NULL; -PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT = NULL; -PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT = NULL; -PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT = NULL; -PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT = NULL; -PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT = NULL; -PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT = NULL; -PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT = NULL; -PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT = NULL; -PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT = NULL; -PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT = NULL; -PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT = NULL; -PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT = NULL; -PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT = NULL; -PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT = NULL; -PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT = NULL; -PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT = NULL; -PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT = NULL; -PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT = NULL; -PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT = NULL; -PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT = NULL; -PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT = NULL; -PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT = NULL; -PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT = NULL; -PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT = NULL; -PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT = NULL; -PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT = NULL; -PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT = NULL; -PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT = NULL; -PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT = NULL; -PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT = NULL; -PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT = NULL; -PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT = NULL; -PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT = NULL; -PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT = NULL; -PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT = NULL; -PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT = NULL; -PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT = NULL; -PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT = NULL; -PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT = NULL; -PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT = NULL; -PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT = NULL; -PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT = NULL; -PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT = NULL; -PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT = NULL; -PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT = NULL; -PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT = NULL; -PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT = NULL; -PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT = NULL; -PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT = NULL; -PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT = NULL; -PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT = NULL; -PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT = NULL; -PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT = NULL; -PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT = NULL; -PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT = NULL; -PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT = NULL; -PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT = NULL; -PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT = NULL; -PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT = NULL; -PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT = NULL; -PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT = NULL; -PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT = NULL; -PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT = NULL; -PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT = NULL; -PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT = NULL; -PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT = NULL; -PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT = NULL; -PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT = NULL; -PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT = NULL; -PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT = NULL; -PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT = NULL; -PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT = NULL; -PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT = NULL; -PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT = NULL; -PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT = NULL; -PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT = NULL; -PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT = NULL; -PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT = NULL; -PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT = NULL; -PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT = NULL; -PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT = NULL; -PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT = NULL; -PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT = NULL; -PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT = NULL; -PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT = NULL; -PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT = NULL; - -PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT = NULL; -PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT = NULL; -PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT = NULL; -PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT = NULL; -PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT = NULL; -PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT = NULL; - -PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT = NULL; -PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT = NULL; - -PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT = NULL; - -PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT = NULL; -PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT = NULL; -PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT = NULL; -PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT = NULL; -PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT = NULL; - -PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT = NULL; -PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT = NULL; -PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT = NULL; -PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT = NULL; -PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT = NULL; -PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT = NULL; -PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT = NULL; -PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT = NULL; -PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT = NULL; -PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT = NULL; -PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT = NULL; -PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT = NULL; -PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT = NULL; -PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT = NULL; -PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT = NULL; -PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT = NULL; -PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT = NULL; -PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT = NULL; - -PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT = NULL; - -PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT = NULL; -PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT = NULL; -PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT = NULL; -PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT = NULL; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT = NULL; -PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT = NULL; -PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT = NULL; -PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT = NULL; -PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT = NULL; -PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT = NULL; -PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT = NULL; - -PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT = NULL; -PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT = NULL; -PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT = NULL; - -PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT = NULL; -PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT = NULL; - -PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT = NULL; -PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT = NULL; -PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT = NULL; -PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT = NULL; -PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT = NULL; -PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT = NULL; -PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT = NULL; -PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT = NULL; -PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT = NULL; -PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT = NULL; -PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT = NULL; -PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT = NULL; -PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT = NULL; -PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT = NULL; -PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT = NULL; -PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT = NULL; -PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT = NULL; -PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT = NULL; -PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT = NULL; -PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT = NULL; -PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT = NULL; -PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT = NULL; -PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT = NULL; -PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT = NULL; -PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT = NULL; -PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT = NULL; -PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT = NULL; -PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT = NULL; -PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT = NULL; -PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT = NULL; -PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT = NULL; -PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT = NULL; -PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT = NULL; -PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT = NULL; - -PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT = NULL; -PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT = NULL; -PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT = NULL; -PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT = NULL; -PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT = NULL; -PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT = NULL; -PFNGLHISTOGRAMEXTPROC __glewHistogramEXT = NULL; -PFNGLMINMAXEXTPROC __glewMinmaxEXT = NULL; -PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT = NULL; -PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT = NULL; - -PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT = NULL; - -PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT = NULL; - -PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT = NULL; -PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT = NULL; -PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT = NULL; - -PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT = NULL; -PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT = NULL; - -PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT = NULL; -PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT = NULL; - -PFNGLCOLORTABLEEXTPROC __glewColorTableEXT = NULL; -PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT = NULL; -PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT = NULL; -PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT = NULL; - -PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT = NULL; -PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT = NULL; - -PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT = NULL; -PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT = NULL; - -PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT = NULL; - -PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT = NULL; - -PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT = NULL; -PFNGLENDSCENEEXTPROC __glewEndSceneEXT = NULL; - -PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT = NULL; -PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT = NULL; -PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT = NULL; -PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT = NULL; -PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT = NULL; -PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT = NULL; -PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT = NULL; -PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT = NULL; -PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT = NULL; -PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT = NULL; -PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT = NULL; -PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT = NULL; -PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT = NULL; -PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT = NULL; -PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT = NULL; -PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT = NULL; -PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT = NULL; - -PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT = NULL; -PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT = NULL; -PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT = NULL; - -PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT = NULL; -PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT = NULL; - -PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT = NULL; - -PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT = NULL; -PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT = NULL; -PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT = NULL; - -PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT = NULL; - -PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT = NULL; - -PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT = NULL; - -PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT = NULL; -PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT = NULL; -PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT = NULL; -PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT = NULL; -PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT = NULL; -PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT = NULL; - -PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT = NULL; -PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT = NULL; -PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT = NULL; -PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT = NULL; -PFNGLISTEXTUREEXTPROC __glewIsTextureEXT = NULL; -PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT = NULL; - -PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT = NULL; - -PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT = NULL; -PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT = NULL; - -PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT = NULL; -PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT = NULL; -PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT = NULL; -PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT = NULL; -PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT = NULL; - -PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT = NULL; -PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT = NULL; -PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT = NULL; -PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT = NULL; -PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT = NULL; -PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT = NULL; -PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT = NULL; -PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT = NULL; - -PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT = NULL; -PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT = NULL; -PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT = NULL; -PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT = NULL; -PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT = NULL; -PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT = NULL; -PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT = NULL; -PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT = NULL; -PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT = NULL; -PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT = NULL; - -PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT = NULL; -PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT = NULL; -PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT = NULL; -PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT = NULL; -PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT = NULL; -PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT = NULL; -PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT = NULL; -PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT = NULL; -PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT = NULL; -PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT = NULL; -PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT = NULL; -PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT = NULL; -PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT = NULL; -PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT = NULL; -PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT = NULL; -PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT = NULL; -PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT = NULL; -PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT = NULL; -PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT = NULL; -PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT = NULL; -PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT = NULL; -PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT = NULL; -PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT = NULL; -PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT = NULL; -PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT = NULL; -PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT = NULL; -PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT = NULL; -PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT = NULL; -PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT = NULL; -PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT = NULL; -PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT = NULL; -PFNGLSWIZZLEEXTPROC __glewSwizzleEXT = NULL; -PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT = NULL; -PFNGLVARIANTBVEXTPROC __glewVariantbvEXT = NULL; -PFNGLVARIANTDVEXTPROC __glewVariantdvEXT = NULL; -PFNGLVARIANTFVEXTPROC __glewVariantfvEXT = NULL; -PFNGLVARIANTIVEXTPROC __glewVariantivEXT = NULL; -PFNGLVARIANTSVEXTPROC __glewVariantsvEXT = NULL; -PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT = NULL; -PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT = NULL; -PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT = NULL; -PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT = NULL; - -PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL; -PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL; -PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL; - -PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT = NULL; - -PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL; - -PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY = NULL; - -PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP = NULL; -PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP = NULL; - -PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM = NULL; -PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM = NULL; - -PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM = NULL; -PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM = NULL; -PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM = NULL; -PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM = NULL; -PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM = NULL; -PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; -PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; -PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; - -PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL = NULL; -PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL = NULL; -PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL = NULL; - -PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; -PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; -PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; -PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL = NULL; - -PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL = NULL; -PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL = NULL; - -PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback = NULL; -PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl = NULL; -PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert = NULL; -PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog = NULL; -PFNGLGETOBJECTLABELPROC __glewGetObjectLabel = NULL; -PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel = NULL; -PFNGLOBJECTLABELPROC __glewObjectLabel = NULL; -PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel = NULL; -PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup = NULL; -PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup = NULL; - -PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled = NULL; -PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion = NULL; -PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion = NULL; -PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion = NULL; -PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion = NULL; - -PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA = NULL; - -PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA = NULL; -PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA = NULL; -PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA = NULL; -PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA = NULL; -PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA = NULL; -PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA = NULL; -PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA = NULL; -PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA = NULL; -PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA = NULL; -PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA = NULL; -PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA = NULL; -PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA = NULL; -PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA = NULL; -PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA = NULL; -PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA = NULL; -PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA = NULL; -PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA = NULL; -PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA = NULL; -PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA = NULL; -PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA = NULL; -PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA = NULL; -PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; -PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; -PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; - -PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX = NULL; -PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV = NULL; - -PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV = NULL; -PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV = NULL; -PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV = NULL; -PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV = NULL; -PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV = NULL; -PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV = NULL; -PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV = NULL; -PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV = NULL; -PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV = NULL; -PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV = NULL; -PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV = NULL; - -PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV = NULL; -PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV = NULL; - -PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL; -PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = NULL; - -PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV = NULL; - -PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; -PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; -PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; - -PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV = NULL; - -PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; -PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; -PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; -PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV = NULL; -PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV = NULL; -PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV = NULL; -PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV = NULL; -PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV = NULL; -PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV = NULL; - -PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV = NULL; -PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV = NULL; -PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV = NULL; - -PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV = NULL; -PFNGLFINISHFENCENVPROC __glewFinishFenceNV = NULL; -PFNGLGENFENCESNVPROC __glewGenFencesNV = NULL; -PFNGLGETFENCEIVNVPROC __glewGetFenceivNV = NULL; -PFNGLISFENCENVPROC __glewIsFenceNV = NULL; -PFNGLSETFENCENVPROC __glewSetFenceNV = NULL; -PFNGLTESTFENCENVPROC __glewTestFenceNV = NULL; - -PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV = NULL; -PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV = NULL; - -PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL; - -PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL; -PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL; -PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL; -PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV = NULL; -PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV = NULL; -PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV = NULL; - -PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV = NULL; -PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV = NULL; -PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV = NULL; -PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV = NULL; -PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV = NULL; -PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV = NULL; -PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV = NULL; -PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV = NULL; -PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV = NULL; -PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV = NULL; -PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV = NULL; -PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV = NULL; -PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV = NULL; -PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV = NULL; -PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV = NULL; -PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV = NULL; -PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV = NULL; -PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV = NULL; -PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV = NULL; -PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV = NULL; -PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV = NULL; -PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV = NULL; -PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV = NULL; -PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV = NULL; -PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV = NULL; -PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV = NULL; -PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV = NULL; -PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV = NULL; -PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV = NULL; -PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV = NULL; -PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV = NULL; -PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV = NULL; -PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV = NULL; -PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV = NULL; - -PFNGLCOLOR3HNVPROC __glewColor3hNV = NULL; -PFNGLCOLOR3HVNVPROC __glewColor3hvNV = NULL; -PFNGLCOLOR4HNVPROC __glewColor4hNV = NULL; -PFNGLCOLOR4HVNVPROC __glewColor4hvNV = NULL; -PFNGLFOGCOORDHNVPROC __glewFogCoordhNV = NULL; -PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV = NULL; -PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV = NULL; -PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV = NULL; -PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV = NULL; -PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV = NULL; -PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV = NULL; -PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV = NULL; -PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV = NULL; -PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV = NULL; -PFNGLNORMAL3HNVPROC __glewNormal3hNV = NULL; -PFNGLNORMAL3HVNVPROC __glewNormal3hvNV = NULL; -PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV = NULL; -PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV = NULL; -PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV = NULL; -PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV = NULL; -PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV = NULL; -PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV = NULL; -PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV = NULL; -PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV = NULL; -PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV = NULL; -PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV = NULL; -PFNGLVERTEX2HNVPROC __glewVertex2hNV = NULL; -PFNGLVERTEX2HVNVPROC __glewVertex2hvNV = NULL; -PFNGLVERTEX3HNVPROC __glewVertex3hNV = NULL; -PFNGLVERTEX3HVNVPROC __glewVertex3hvNV = NULL; -PFNGLVERTEX4HNVPROC __glewVertex4hNV = NULL; -PFNGLVERTEX4HVNVPROC __glewVertex4hvNV = NULL; -PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV = NULL; -PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV = NULL; -PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV = NULL; -PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV = NULL; -PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV = NULL; -PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV = NULL; -PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV = NULL; -PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV = NULL; -PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV = NULL; -PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV = NULL; -PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV = NULL; -PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV = NULL; -PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV = NULL; -PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV = NULL; - -PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV = NULL; -PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV = NULL; -PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV = NULL; -PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV = NULL; -PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV = NULL; -PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV = NULL; -PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV = NULL; - -PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV = NULL; -PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV = NULL; -PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV = NULL; - -PFNGLCOPYPATHNVPROC __glewCopyPathNV = NULL; -PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV = NULL; -PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV = NULL; -PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV = NULL; -PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV = NULL; -PFNGLDELETEPATHSNVPROC __glewDeletePathsNV = NULL; -PFNGLGENPATHSNVPROC __glewGenPathsNV = NULL; -PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV = NULL; -PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV = NULL; -PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV = NULL; -PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV = NULL; -PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV = NULL; -PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV = NULL; -PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV = NULL; -PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV = NULL; -PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV = NULL; -PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV = NULL; -PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV = NULL; -PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV = NULL; -PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV = NULL; -PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV = NULL; -PFNGLISPATHNVPROC __glewIsPathNV = NULL; -PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV = NULL; -PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV = NULL; -PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV = NULL; -PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV = NULL; -PFNGLPATHCOORDSNVPROC __glewPathCoordsNV = NULL; -PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV = NULL; -PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV = NULL; -PFNGLPATHFOGGENNVPROC __glewPathFogGenNV = NULL; -PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV = NULL; -PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV = NULL; -PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV = NULL; -PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV = NULL; -PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV = NULL; -PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV = NULL; -PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV = NULL; -PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV = NULL; -PFNGLPATHSTRINGNVPROC __glewPathStringNV = NULL; -PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV = NULL; -PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV = NULL; -PFNGLPATHTEXGENNVPROC __glewPathTexGenNV = NULL; -PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV = NULL; -PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV = NULL; -PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV = NULL; -PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV = NULL; -PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV = NULL; -PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV = NULL; -PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV = NULL; - -PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV = NULL; -PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV = NULL; - -PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV = NULL; -PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV = NULL; - -PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV = NULL; -PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV = NULL; -PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV = NULL; -PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV = NULL; -PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV = NULL; -PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV = NULL; - -PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV = NULL; -PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV = NULL; - -PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV = NULL; -PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV = NULL; -PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV = NULL; -PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV = NULL; -PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV = NULL; -PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV = NULL; -PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV = NULL; -PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV = NULL; -PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV = NULL; -PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV = NULL; -PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV = NULL; -PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV = NULL; -PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV = NULL; - -PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV = NULL; -PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV = NULL; - -PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV = NULL; -PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV = NULL; -PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV = NULL; -PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV = NULL; -PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV = NULL; -PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV = NULL; -PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV = NULL; -PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV = NULL; -PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV = NULL; -PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV = NULL; -PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV = NULL; -PFNGLUNIFORMUI64NVPROC __glewUniformui64NV = NULL; -PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV = NULL; - -PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV = NULL; - -PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV = NULL; -PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV = NULL; -PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV = NULL; - -PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV = NULL; -PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV = NULL; -PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV = NULL; -PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV = NULL; -PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV = NULL; -PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV = NULL; -PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV = NULL; -PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV = NULL; -PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV = NULL; - -PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV = NULL; -PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV = NULL; -PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV = NULL; -PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV = NULL; -PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV = NULL; -PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV = NULL; -PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV = NULL; - -PFNGLVDPAUFININVPROC __glewVDPAUFiniNV = NULL; -PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV = NULL; -PFNGLVDPAUINITNVPROC __glewVDPAUInitNV = NULL; -PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV = NULL; -PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV = NULL; -PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV = NULL; -PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV = NULL; -PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV = NULL; -PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV = NULL; -PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV = NULL; - -PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV = NULL; -PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV = NULL; - -PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV = NULL; -PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV = NULL; -PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV = NULL; -PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV = NULL; -PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV = NULL; -PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV = NULL; -PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV = NULL; -PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV = NULL; -PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV = NULL; -PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV = NULL; -PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV = NULL; -PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV = NULL; -PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV = NULL; -PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV = NULL; -PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV = NULL; -PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV = NULL; -PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV = NULL; -PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV = NULL; -PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV = NULL; - -PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV = NULL; -PFNGLCOLORFORMATNVPROC __glewColorFormatNV = NULL; -PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV = NULL; -PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV = NULL; -PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV = NULL; -PFNGLINDEXFORMATNVPROC __glewIndexFormatNV = NULL; -PFNGLNORMALFORMATNVPROC __glewNormalFormatNV = NULL; -PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV = NULL; -PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV = NULL; -PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV = NULL; -PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV = NULL; -PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV = NULL; - -PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV = NULL; -PFNGLBINDPROGRAMNVPROC __glewBindProgramNV = NULL; -PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV = NULL; -PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV = NULL; -PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV = NULL; -PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV = NULL; -PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV = NULL; -PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV = NULL; -PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV = NULL; -PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV = NULL; -PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV = NULL; -PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV = NULL; -PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV = NULL; -PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV = NULL; -PFNGLISPROGRAMNVPROC __glewIsProgramNV = NULL; -PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV = NULL; -PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV = NULL; -PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV = NULL; -PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV = NULL; -PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV = NULL; -PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV = NULL; -PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV = NULL; -PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV = NULL; -PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV = NULL; -PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV = NULL; -PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV = NULL; -PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV = NULL; -PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV = NULL; -PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV = NULL; -PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV = NULL; -PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV = NULL; -PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV = NULL; -PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV = NULL; -PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV = NULL; -PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV = NULL; -PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV = NULL; -PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV = NULL; -PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV = NULL; -PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV = NULL; -PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV = NULL; -PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV = NULL; -PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV = NULL; -PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV = NULL; -PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV = NULL; -PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV = NULL; -PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV = NULL; -PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV = NULL; -PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV = NULL; -PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV = NULL; -PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV = NULL; -PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV = NULL; -PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV = NULL; -PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV = NULL; -PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV = NULL; -PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV = NULL; -PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV = NULL; -PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV = NULL; -PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV = NULL; -PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV = NULL; -PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV = NULL; -PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV = NULL; -PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV = NULL; -PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV = NULL; -PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV = NULL; - -PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV = NULL; -PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV = NULL; -PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV = NULL; -PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV = NULL; -PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV = NULL; -PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV = NULL; - -PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL; -PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL; -PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL; -PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; -PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; -PFNGLORTHOFOESPROC __glewOrthofOES = NULL; - -PFNGLALPHAFUNCXPROC __glewAlphaFuncx = NULL; -PFNGLCLEARCOLORXPROC __glewClearColorx = NULL; -PFNGLCLEARDEPTHXPROC __glewClearDepthx = NULL; -PFNGLCOLOR4XPROC __glewColor4x = NULL; -PFNGLDEPTHRANGEXPROC __glewDepthRangex = NULL; -PFNGLFOGXPROC __glewFogx = NULL; -PFNGLFOGXVPROC __glewFogxv = NULL; -PFNGLFRUSTUMFPROC __glewFrustumf = NULL; -PFNGLFRUSTUMXPROC __glewFrustumx = NULL; -PFNGLLIGHTMODELXPROC __glewLightModelx = NULL; -PFNGLLIGHTMODELXVPROC __glewLightModelxv = NULL; -PFNGLLIGHTXPROC __glewLightx = NULL; -PFNGLLIGHTXVPROC __glewLightxv = NULL; -PFNGLLINEWIDTHXPROC __glewLineWidthx = NULL; -PFNGLLOADMATRIXXPROC __glewLoadMatrixx = NULL; -PFNGLMATERIALXPROC __glewMaterialx = NULL; -PFNGLMATERIALXVPROC __glewMaterialxv = NULL; -PFNGLMULTMATRIXXPROC __glewMultMatrixx = NULL; -PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x = NULL; -PFNGLNORMAL3XPROC __glewNormal3x = NULL; -PFNGLORTHOFPROC __glewOrthof = NULL; -PFNGLORTHOXPROC __glewOrthox = NULL; -PFNGLPOINTSIZEXPROC __glewPointSizex = NULL; -PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx = NULL; -PFNGLROTATEXPROC __glewRotatex = NULL; -PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex = NULL; -PFNGLSCALEXPROC __glewScalex = NULL; -PFNGLTEXENVXPROC __glewTexEnvx = NULL; -PFNGLTEXENVXVPROC __glewTexEnvxv = NULL; -PFNGLTEXPARAMETERXPROC __glewTexParameterx = NULL; -PFNGLTRANSLATEXPROC __glewTranslatex = NULL; - -PFNGLCLIPPLANEFPROC __glewClipPlanef = NULL; -PFNGLCLIPPLANEXPROC __glewClipPlanex = NULL; -PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef = NULL; -PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex = NULL; -PFNGLGETFIXEDVPROC __glewGetFixedv = NULL; -PFNGLGETLIGHTXVPROC __glewGetLightxv = NULL; -PFNGLGETMATERIALXVPROC __glewGetMaterialxv = NULL; -PFNGLGETTEXENVXVPROC __glewGetTexEnvxv = NULL; -PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv = NULL; -PFNGLPOINTPARAMETERXPROC __glewPointParameterx = NULL; -PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv = NULL; -PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES = NULL; -PFNGLTEXPARAMETERXVPROC __glewTexParameterxv = NULL; - -PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL = NULL; - -PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL = NULL; -PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL = NULL; - -PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL = NULL; - -PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; -PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; - -PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS = NULL; -PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS = NULL; - -PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS = NULL; -PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS = NULL; - -PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS = NULL; -PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS = NULL; - -PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS = NULL; -PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS = NULL; - -PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS = NULL; -PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS = NULL; - -PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX = NULL; -PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX = NULL; -PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX = NULL; -PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX = NULL; -PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX = NULL; -PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX = NULL; - -PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX = NULL; - -PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX = NULL; - -PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX = NULL; -PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX = NULL; -PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX = NULL; -PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX = NULL; -PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX = NULL; -PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX = NULL; -PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX = NULL; -PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX = NULL; -PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX = NULL; -PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX = NULL; -PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX = NULL; -PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX = NULL; -PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX = NULL; - -PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX = NULL; - -PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX = NULL; - -PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX = NULL; - -PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX = NULL; -PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX = NULL; -PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX = NULL; -PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX = NULL; - -PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX = NULL; - -PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI = NULL; -PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI = NULL; -PFNGLCOLORTABLESGIPROC __glewColorTableSGI = NULL; -PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI = NULL; -PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI = NULL; -PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI = NULL; -PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI = NULL; - -PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX = NULL; - -PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN = NULL; -PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN = NULL; -PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN = NULL; -PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN = NULL; -PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN = NULL; -PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN = NULL; -PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN = NULL; -PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN = NULL; - -PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN = NULL; - -PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN = NULL; -PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN = NULL; -PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN = NULL; -PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN = NULL; -PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN = NULL; -PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN = NULL; -PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN = NULL; - -PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN = NULL; -PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN = NULL; -PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN = NULL; -PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN = NULL; -PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN = NULL; -PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN = NULL; -PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN = NULL; -PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN = NULL; -PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN = NULL; -PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN = NULL; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN = NULL; -PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN = NULL; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN = NULL; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; -PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN = NULL; -PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL; - -PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL; - -#endif /* !WIN32 || !GLEW_MX */ - -#if !defined(GLEW_MX) - -GLboolean __GLEW_VERSION_1_1 = GL_FALSE; -GLboolean __GLEW_VERSION_1_2 = GL_FALSE; -GLboolean __GLEW_VERSION_1_2_1 = GL_FALSE; -GLboolean __GLEW_VERSION_1_3 = GL_FALSE; -GLboolean __GLEW_VERSION_1_4 = GL_FALSE; -GLboolean __GLEW_VERSION_1_5 = GL_FALSE; -GLboolean __GLEW_VERSION_2_0 = GL_FALSE; -GLboolean __GLEW_VERSION_2_1 = GL_FALSE; -GLboolean __GLEW_VERSION_3_0 = GL_FALSE; -GLboolean __GLEW_VERSION_3_1 = GL_FALSE; -GLboolean __GLEW_VERSION_3_2 = GL_FALSE; -GLboolean __GLEW_VERSION_3_3 = GL_FALSE; -GLboolean __GLEW_VERSION_4_0 = GL_FALSE; -GLboolean __GLEW_VERSION_4_1 = GL_FALSE; -GLboolean __GLEW_VERSION_4_2 = GL_FALSE; -GLboolean __GLEW_VERSION_4_3 = GL_FALSE; -GLboolean __GLEW_VERSION_4_4 = GL_FALSE; -GLboolean __GLEW_3DFX_multisample = GL_FALSE; -GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; -GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; -GLboolean __GLEW_AMD_blend_minmax_factor = GL_FALSE; -GLboolean __GLEW_AMD_conservative_depth = GL_FALSE; -GLboolean __GLEW_AMD_debug_output = GL_FALSE; -GLboolean __GLEW_AMD_depth_clamp_separate = GL_FALSE; -GLboolean __GLEW_AMD_draw_buffers_blend = GL_FALSE; -GLboolean __GLEW_AMD_interleaved_elements = GL_FALSE; -GLboolean __GLEW_AMD_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_AMD_name_gen_delete = GL_FALSE; -GLboolean __GLEW_AMD_performance_monitor = GL_FALSE; -GLboolean __GLEW_AMD_pinned_memory = GL_FALSE; -GLboolean __GLEW_AMD_query_buffer_object = GL_FALSE; -GLboolean __GLEW_AMD_sample_positions = GL_FALSE; -GLboolean __GLEW_AMD_seamless_cubemap_per_texture = GL_FALSE; -GLboolean __GLEW_AMD_shader_stencil_export = GL_FALSE; -GLboolean __GLEW_AMD_shader_trinary_minmax = GL_FALSE; -GLboolean __GLEW_AMD_sparse_texture = GL_FALSE; -GLboolean __GLEW_AMD_stencil_operation_extended = GL_FALSE; -GLboolean __GLEW_AMD_texture_texture4 = GL_FALSE; -GLboolean __GLEW_AMD_transform_feedback3_lines_triangles = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_layer = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_tessellator = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_viewport_index = GL_FALSE; -GLboolean __GLEW_ANGLE_depth_texture = GL_FALSE; -GLboolean __GLEW_ANGLE_framebuffer_blit = GL_FALSE; -GLboolean __GLEW_ANGLE_framebuffer_multisample = GL_FALSE; -GLboolean __GLEW_ANGLE_instanced_arrays = GL_FALSE; -GLboolean __GLEW_ANGLE_pack_reverse_row_order = GL_FALSE; -GLboolean __GLEW_ANGLE_program_binary = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt1 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt3 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt5 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_usage = GL_FALSE; -GLboolean __GLEW_ANGLE_timer_query = GL_FALSE; -GLboolean __GLEW_ANGLE_translated_shader_source = GL_FALSE; -GLboolean __GLEW_APPLE_aux_depth_stencil = GL_FALSE; -GLboolean __GLEW_APPLE_client_storage = GL_FALSE; -GLboolean __GLEW_APPLE_element_array = GL_FALSE; -GLboolean __GLEW_APPLE_fence = GL_FALSE; -GLboolean __GLEW_APPLE_float_pixels = GL_FALSE; -GLboolean __GLEW_APPLE_flush_buffer_range = GL_FALSE; -GLboolean __GLEW_APPLE_object_purgeable = GL_FALSE; -GLboolean __GLEW_APPLE_pixel_buffer = GL_FALSE; -GLboolean __GLEW_APPLE_rgb_422 = GL_FALSE; -GLboolean __GLEW_APPLE_row_bytes = GL_FALSE; -GLboolean __GLEW_APPLE_specular_vector = GL_FALSE; -GLboolean __GLEW_APPLE_texture_range = GL_FALSE; -GLboolean __GLEW_APPLE_transform_hint = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_array_object = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_array_range = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_program_evaluators = GL_FALSE; -GLboolean __GLEW_APPLE_ycbcr_422 = GL_FALSE; -GLboolean __GLEW_ARB_ES2_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_ES3_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_arrays_of_arrays = GL_FALSE; -GLboolean __GLEW_ARB_base_instance = GL_FALSE; -GLboolean __GLEW_ARB_bindless_texture = GL_FALSE; -GLboolean __GLEW_ARB_blend_func_extended = GL_FALSE; -GLboolean __GLEW_ARB_buffer_storage = GL_FALSE; -GLboolean __GLEW_ARB_cl_event = GL_FALSE; -GLboolean __GLEW_ARB_clear_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_clear_texture = GL_FALSE; -GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; -GLboolean __GLEW_ARB_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_compressed_texture_pixel_storage = GL_FALSE; -GLboolean __GLEW_ARB_compute_shader = GL_FALSE; -GLboolean __GLEW_ARB_compute_variable_group_size = GL_FALSE; -GLboolean __GLEW_ARB_conservative_depth = GL_FALSE; -GLboolean __GLEW_ARB_copy_buffer = GL_FALSE; -GLboolean __GLEW_ARB_copy_image = GL_FALSE; -GLboolean __GLEW_ARB_debug_output = GL_FALSE; -GLboolean __GLEW_ARB_depth_buffer_float = GL_FALSE; -GLboolean __GLEW_ARB_depth_clamp = GL_FALSE; -GLboolean __GLEW_ARB_depth_texture = GL_FALSE; -GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; -GLboolean __GLEW_ARB_draw_buffers_blend = GL_FALSE; -GLboolean __GLEW_ARB_draw_elements_base_vertex = GL_FALSE; -GLboolean __GLEW_ARB_draw_indirect = GL_FALSE; -GLboolean __GLEW_ARB_draw_instanced = GL_FALSE; -GLboolean __GLEW_ARB_enhanced_layouts = GL_FALSE; -GLboolean __GLEW_ARB_explicit_attrib_location = GL_FALSE; -GLboolean __GLEW_ARB_explicit_uniform_location = GL_FALSE; -GLboolean __GLEW_ARB_fragment_coord_conventions = GL_FALSE; -GLboolean __GLEW_ARB_fragment_layer_viewport = GL_FALSE; -GLboolean __GLEW_ARB_fragment_program = GL_FALSE; -GLboolean __GLEW_ARB_fragment_program_shadow = GL_FALSE; -GLboolean __GLEW_ARB_fragment_shader = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_no_attachments = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_object = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __GLEW_ARB_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_ARB_get_program_binary = GL_FALSE; -GLboolean __GLEW_ARB_gpu_shader5 = GL_FALSE; -GLboolean __GLEW_ARB_gpu_shader_fp64 = GL_FALSE; -GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; -GLboolean __GLEW_ARB_half_float_vertex = GL_FALSE; -GLboolean __GLEW_ARB_imaging = GL_FALSE; -GLboolean __GLEW_ARB_indirect_parameters = GL_FALSE; -GLboolean __GLEW_ARB_instanced_arrays = GL_FALSE; -GLboolean __GLEW_ARB_internalformat_query = GL_FALSE; -GLboolean __GLEW_ARB_internalformat_query2 = GL_FALSE; -GLboolean __GLEW_ARB_invalidate_subdata = GL_FALSE; -GLboolean __GLEW_ARB_map_buffer_alignment = GL_FALSE; -GLboolean __GLEW_ARB_map_buffer_range = GL_FALSE; -GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; -GLboolean __GLEW_ARB_multi_bind = GL_FALSE; -GLboolean __GLEW_ARB_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_ARB_multisample = GL_FALSE; -GLboolean __GLEW_ARB_multitexture = GL_FALSE; -GLboolean __GLEW_ARB_occlusion_query = GL_FALSE; -GLboolean __GLEW_ARB_occlusion_query2 = GL_FALSE; -GLboolean __GLEW_ARB_pixel_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_point_parameters = GL_FALSE; -GLboolean __GLEW_ARB_point_sprite = GL_FALSE; -GLboolean __GLEW_ARB_program_interface_query = GL_FALSE; -GLboolean __GLEW_ARB_provoking_vertex = GL_FALSE; -GLboolean __GLEW_ARB_query_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_robust_buffer_access_behavior = GL_FALSE; -GLboolean __GLEW_ARB_robustness = GL_FALSE; -GLboolean __GLEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __GLEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __GLEW_ARB_sample_shading = GL_FALSE; -GLboolean __GLEW_ARB_sampler_objects = GL_FALSE; -GLboolean __GLEW_ARB_seamless_cube_map = GL_FALSE; -GLboolean __GLEW_ARB_seamless_cubemap_per_texture = GL_FALSE; -GLboolean __GLEW_ARB_separate_shader_objects = GL_FALSE; -GLboolean __GLEW_ARB_shader_atomic_counters = GL_FALSE; -GLboolean __GLEW_ARB_shader_bit_encoding = GL_FALSE; -GLboolean __GLEW_ARB_shader_draw_parameters = GL_FALSE; -GLboolean __GLEW_ARB_shader_group_vote = GL_FALSE; -GLboolean __GLEW_ARB_shader_image_load_store = GL_FALSE; -GLboolean __GLEW_ARB_shader_image_size = GL_FALSE; -GLboolean __GLEW_ARB_shader_objects = GL_FALSE; -GLboolean __GLEW_ARB_shader_precision = GL_FALSE; -GLboolean __GLEW_ARB_shader_stencil_export = GL_FALSE; -GLboolean __GLEW_ARB_shader_storage_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_shader_subroutine = GL_FALSE; -GLboolean __GLEW_ARB_shader_texture_lod = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_100 = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_420pack = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_include = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_packing = GL_FALSE; -GLboolean __GLEW_ARB_shadow = GL_FALSE; -GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; -GLboolean __GLEW_ARB_sparse_texture = GL_FALSE; -GLboolean __GLEW_ARB_stencil_texturing = GL_FALSE; -GLboolean __GLEW_ARB_sync = GL_FALSE; -GLboolean __GLEW_ARB_tessellation_shader = GL_FALSE; -GLboolean __GLEW_ARB_texture_border_clamp = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_object_rgb32 = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_range = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression_bptc = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression_rgtc = GL_FALSE; -GLboolean __GLEW_ARB_texture_cube_map = GL_FALSE; -GLboolean __GLEW_ARB_texture_cube_map_array = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_add = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_combine = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; -GLboolean __GLEW_ARB_texture_float = GL_FALSE; -GLboolean __GLEW_ARB_texture_gather = GL_FALSE; -GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge = GL_FALSE; -GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; -GLboolean __GLEW_ARB_texture_multisample = GL_FALSE; -GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; -GLboolean __GLEW_ARB_texture_query_levels = GL_FALSE; -GLboolean __GLEW_ARB_texture_query_lod = GL_FALSE; -GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; -GLboolean __GLEW_ARB_texture_rg = GL_FALSE; -GLboolean __GLEW_ARB_texture_rgb10_a2ui = GL_FALSE; -GLboolean __GLEW_ARB_texture_stencil8 = GL_FALSE; -GLboolean __GLEW_ARB_texture_storage = GL_FALSE; -GLboolean __GLEW_ARB_texture_storage_multisample = GL_FALSE; -GLboolean __GLEW_ARB_texture_swizzle = GL_FALSE; -GLboolean __GLEW_ARB_texture_view = GL_FALSE; -GLboolean __GLEW_ARB_timer_query = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback2 = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback3 = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback_instanced = GL_FALSE; -GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; -GLboolean __GLEW_ARB_uniform_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_array_bgra = GL_FALSE; -GLboolean __GLEW_ARB_vertex_array_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_attrib_64bit = GL_FALSE; -GLboolean __GLEW_ARB_vertex_attrib_binding = GL_FALSE; -GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; -GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_program = GL_FALSE; -GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; -GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev = GL_FALSE; -GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev = GL_FALSE; -GLboolean __GLEW_ARB_viewport_array = GL_FALSE; -GLboolean __GLEW_ARB_window_pos = GL_FALSE; -GLboolean __GLEW_ATIX_point_sprites = GL_FALSE; -GLboolean __GLEW_ATIX_texture_env_combine3 = GL_FALSE; -GLboolean __GLEW_ATIX_texture_env_route = GL_FALSE; -GLboolean __GLEW_ATIX_vertex_shader_output_point_size = GL_FALSE; -GLboolean __GLEW_ATI_draw_buffers = GL_FALSE; -GLboolean __GLEW_ATI_element_array = GL_FALSE; -GLboolean __GLEW_ATI_envmap_bumpmap = GL_FALSE; -GLboolean __GLEW_ATI_fragment_shader = GL_FALSE; -GLboolean __GLEW_ATI_map_object_buffer = GL_FALSE; -GLboolean __GLEW_ATI_meminfo = GL_FALSE; -GLboolean __GLEW_ATI_pn_triangles = GL_FALSE; -GLboolean __GLEW_ATI_separate_stencil = GL_FALSE; -GLboolean __GLEW_ATI_shader_texture_lod = GL_FALSE; -GLboolean __GLEW_ATI_text_fragment_shader = GL_FALSE; -GLboolean __GLEW_ATI_texture_compression_3dc = GL_FALSE; -GLboolean __GLEW_ATI_texture_env_combine3 = GL_FALSE; -GLboolean __GLEW_ATI_texture_float = GL_FALSE; -GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE; -GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE; -GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE; -GLboolean __GLEW_ATI_vertex_streams = GL_FALSE; -GLboolean __GLEW_EXT_422_pixels = GL_FALSE; -GLboolean __GLEW_EXT_Cg_shader = GL_FALSE; -GLboolean __GLEW_EXT_abgr = GL_FALSE; -GLboolean __GLEW_EXT_bgra = GL_FALSE; -GLboolean __GLEW_EXT_bindable_uniform = GL_FALSE; -GLboolean __GLEW_EXT_blend_color = GL_FALSE; -GLboolean __GLEW_EXT_blend_equation_separate = GL_FALSE; -GLboolean __GLEW_EXT_blend_func_separate = GL_FALSE; -GLboolean __GLEW_EXT_blend_logic_op = GL_FALSE; -GLboolean __GLEW_EXT_blend_minmax = GL_FALSE; -GLboolean __GLEW_EXT_blend_subtract = GL_FALSE; -GLboolean __GLEW_EXT_clip_volume_hint = GL_FALSE; -GLboolean __GLEW_EXT_cmyka = GL_FALSE; -GLboolean __GLEW_EXT_color_subtable = GL_FALSE; -GLboolean __GLEW_EXT_compiled_vertex_array = GL_FALSE; -GLboolean __GLEW_EXT_convolution = GL_FALSE; -GLboolean __GLEW_EXT_coordinate_frame = GL_FALSE; -GLboolean __GLEW_EXT_copy_texture = GL_FALSE; -GLboolean __GLEW_EXT_cull_vertex = GL_FALSE; -GLboolean __GLEW_EXT_debug_marker = GL_FALSE; -GLboolean __GLEW_EXT_depth_bounds_test = GL_FALSE; -GLboolean __GLEW_EXT_direct_state_access = GL_FALSE; -GLboolean __GLEW_EXT_draw_buffers2 = GL_FALSE; -GLboolean __GLEW_EXT_draw_instanced = GL_FALSE; -GLboolean __GLEW_EXT_draw_range_elements = GL_FALSE; -GLboolean __GLEW_EXT_fog_coord = GL_FALSE; -GLboolean __GLEW_EXT_fragment_lighting = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_blit = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_multisample = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_object = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __GLEW_EXT_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_EXT_gpu_program_parameters = GL_FALSE; -GLboolean __GLEW_EXT_gpu_shader4 = GL_FALSE; -GLboolean __GLEW_EXT_histogram = GL_FALSE; -GLboolean __GLEW_EXT_index_array_formats = GL_FALSE; -GLboolean __GLEW_EXT_index_func = GL_FALSE; -GLboolean __GLEW_EXT_index_material = GL_FALSE; -GLboolean __GLEW_EXT_index_texture = GL_FALSE; -GLboolean __GLEW_EXT_light_texture = GL_FALSE; -GLboolean __GLEW_EXT_misc_attribute = GL_FALSE; -GLboolean __GLEW_EXT_multi_draw_arrays = GL_FALSE; -GLboolean __GLEW_EXT_multisample = GL_FALSE; -GLboolean __GLEW_EXT_packed_depth_stencil = GL_FALSE; -GLboolean __GLEW_EXT_packed_float = GL_FALSE; -GLboolean __GLEW_EXT_packed_pixels = GL_FALSE; -GLboolean __GLEW_EXT_paletted_texture = GL_FALSE; -GLboolean __GLEW_EXT_pixel_buffer_object = GL_FALSE; -GLboolean __GLEW_EXT_pixel_transform = GL_FALSE; -GLboolean __GLEW_EXT_pixel_transform_color_table = GL_FALSE; -GLboolean __GLEW_EXT_point_parameters = GL_FALSE; -GLboolean __GLEW_EXT_polygon_offset = GL_FALSE; -GLboolean __GLEW_EXT_provoking_vertex = GL_FALSE; -GLboolean __GLEW_EXT_rescale_normal = GL_FALSE; -GLboolean __GLEW_EXT_scene_marker = GL_FALSE; -GLboolean __GLEW_EXT_secondary_color = GL_FALSE; -GLboolean __GLEW_EXT_separate_shader_objects = GL_FALSE; -GLboolean __GLEW_EXT_separate_specular_color = GL_FALSE; -GLboolean __GLEW_EXT_shader_image_load_store = GL_FALSE; -GLboolean __GLEW_EXT_shadow_funcs = GL_FALSE; -GLboolean __GLEW_EXT_shared_texture_palette = GL_FALSE; -GLboolean __GLEW_EXT_stencil_clear_tag = GL_FALSE; -GLboolean __GLEW_EXT_stencil_two_side = GL_FALSE; -GLboolean __GLEW_EXT_stencil_wrap = GL_FALSE; -GLboolean __GLEW_EXT_subtexture = GL_FALSE; -GLboolean __GLEW_EXT_texture = GL_FALSE; -GLboolean __GLEW_EXT_texture3D = GL_FALSE; -GLboolean __GLEW_EXT_texture_array = GL_FALSE; -GLboolean __GLEW_EXT_texture_buffer_object = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_dxt1 = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_latc = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_rgtc = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_s3tc = GL_FALSE; -GLboolean __GLEW_EXT_texture_cube_map = GL_FALSE; -GLboolean __GLEW_EXT_texture_edge_clamp = GL_FALSE; -GLboolean __GLEW_EXT_texture_env = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_add = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_combine = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_dot3 = GL_FALSE; -GLboolean __GLEW_EXT_texture_filter_anisotropic = GL_FALSE; -GLboolean __GLEW_EXT_texture_integer = GL_FALSE; -GLboolean __GLEW_EXT_texture_lod_bias = GL_FALSE; -GLboolean __GLEW_EXT_texture_mirror_clamp = GL_FALSE; -GLboolean __GLEW_EXT_texture_object = GL_FALSE; -GLboolean __GLEW_EXT_texture_perturb_normal = GL_FALSE; -GLboolean __GLEW_EXT_texture_rectangle = GL_FALSE; -GLboolean __GLEW_EXT_texture_sRGB = GL_FALSE; -GLboolean __GLEW_EXT_texture_sRGB_decode = GL_FALSE; -GLboolean __GLEW_EXT_texture_shared_exponent = GL_FALSE; -GLboolean __GLEW_EXT_texture_snorm = GL_FALSE; -GLboolean __GLEW_EXT_texture_swizzle = GL_FALSE; -GLboolean __GLEW_EXT_timer_query = GL_FALSE; -GLboolean __GLEW_EXT_transform_feedback = GL_FALSE; -GLboolean __GLEW_EXT_vertex_array = GL_FALSE; -GLboolean __GLEW_EXT_vertex_array_bgra = GL_FALSE; -GLboolean __GLEW_EXT_vertex_attrib_64bit = GL_FALSE; -GLboolean __GLEW_EXT_vertex_shader = GL_FALSE; -GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE; -GLboolean __GLEW_EXT_x11_sync_object = GL_FALSE; -GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE; -GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE; -GLboolean __GLEW_HP_convolution_border_modes = GL_FALSE; -GLboolean __GLEW_HP_image_transform = GL_FALSE; -GLboolean __GLEW_HP_occlusion_test = GL_FALSE; -GLboolean __GLEW_HP_texture_lighting = GL_FALSE; -GLboolean __GLEW_IBM_cull_vertex = GL_FALSE; -GLboolean __GLEW_IBM_multimode_draw_arrays = GL_FALSE; -GLboolean __GLEW_IBM_rasterpos_clip = GL_FALSE; -GLboolean __GLEW_IBM_static_data = GL_FALSE; -GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; -GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; -GLboolean __GLEW_INGR_color_clamp = GL_FALSE; -GLboolean __GLEW_INGR_interlace_read = GL_FALSE; -GLboolean __GLEW_INTEL_map_texture = GL_FALSE; -GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; -GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; -GLboolean __GLEW_KHR_debug = GL_FALSE; -GLboolean __GLEW_KHR_texture_compression_astc_ldr = GL_FALSE; -GLboolean __GLEW_KTX_buffer_region = GL_FALSE; -GLboolean __GLEW_MESAX_texture_stack = GL_FALSE; -GLboolean __GLEW_MESA_pack_invert = GL_FALSE; -GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; -GLboolean __GLEW_MESA_window_pos = GL_FALSE; -GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; -GLboolean __GLEW_NVX_conditional_render = GL_FALSE; -GLboolean __GLEW_NVX_gpu_memory_info = GL_FALSE; -GLboolean __GLEW_NV_bindless_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_NV_bindless_texture = GL_FALSE; -GLboolean __GLEW_NV_blend_equation_advanced = GL_FALSE; -GLboolean __GLEW_NV_blend_equation_advanced_coherent = GL_FALSE; -GLboolean __GLEW_NV_blend_square = GL_FALSE; -GLboolean __GLEW_NV_compute_program5 = GL_FALSE; -GLboolean __GLEW_NV_conditional_render = GL_FALSE; -GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; -GLboolean __GLEW_NV_copy_image = GL_FALSE; -GLboolean __GLEW_NV_deep_texture3D = GL_FALSE; -GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; -GLboolean __GLEW_NV_depth_clamp = GL_FALSE; -GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; -GLboolean __GLEW_NV_draw_texture = GL_FALSE; -GLboolean __GLEW_NV_evaluators = GL_FALSE; -GLboolean __GLEW_NV_explicit_multisample = GL_FALSE; -GLboolean __GLEW_NV_fence = GL_FALSE; -GLboolean __GLEW_NV_float_buffer = GL_FALSE; -GLboolean __GLEW_NV_fog_distance = GL_FALSE; -GLboolean __GLEW_NV_fragment_program = GL_FALSE; -GLboolean __GLEW_NV_fragment_program2 = GL_FALSE; -GLboolean __GLEW_NV_fragment_program4 = GL_FALSE; -GLboolean __GLEW_NV_fragment_program_option = GL_FALSE; -GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE; -GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; -GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program5 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program5_mem_extended = GL_FALSE; -GLboolean __GLEW_NV_gpu_program_fp64 = GL_FALSE; -GLboolean __GLEW_NV_gpu_shader5 = GL_FALSE; -GLboolean __GLEW_NV_half_float = GL_FALSE; -GLboolean __GLEW_NV_light_max_exponent = GL_FALSE; -GLboolean __GLEW_NV_multisample_coverage = GL_FALSE; -GLboolean __GLEW_NV_multisample_filter_hint = GL_FALSE; -GLboolean __GLEW_NV_occlusion_query = GL_FALSE; -GLboolean __GLEW_NV_packed_depth_stencil = GL_FALSE; -GLboolean __GLEW_NV_parameter_buffer_object = GL_FALSE; -GLboolean __GLEW_NV_parameter_buffer_object2 = GL_FALSE; -GLboolean __GLEW_NV_path_rendering = GL_FALSE; -GLboolean __GLEW_NV_pixel_data_range = GL_FALSE; -GLboolean __GLEW_NV_point_sprite = GL_FALSE; -GLboolean __GLEW_NV_present_video = GL_FALSE; -GLboolean __GLEW_NV_primitive_restart = GL_FALSE; -GLboolean __GLEW_NV_register_combiners = GL_FALSE; -GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; -GLboolean __GLEW_NV_shader_atomic_counters = GL_FALSE; -GLboolean __GLEW_NV_shader_atomic_float = GL_FALSE; -GLboolean __GLEW_NV_shader_buffer_load = GL_FALSE; -GLboolean __GLEW_NV_shader_storage_buffer_object = GL_FALSE; -GLboolean __GLEW_NV_tessellation_program5 = GL_FALSE; -GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; -GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; -GLboolean __GLEW_NV_texture_barrier = GL_FALSE; -GLboolean __GLEW_NV_texture_compression_vtc = GL_FALSE; -GLboolean __GLEW_NV_texture_env_combine4 = GL_FALSE; -GLboolean __GLEW_NV_texture_expand_normal = GL_FALSE; -GLboolean __GLEW_NV_texture_multisample = GL_FALSE; -GLboolean __GLEW_NV_texture_rectangle = GL_FALSE; -GLboolean __GLEW_NV_texture_shader = GL_FALSE; -GLboolean __GLEW_NV_texture_shader2 = GL_FALSE; -GLboolean __GLEW_NV_texture_shader3 = GL_FALSE; -GLboolean __GLEW_NV_transform_feedback = GL_FALSE; -GLboolean __GLEW_NV_transform_feedback2 = GL_FALSE; -GLboolean __GLEW_NV_vdpau_interop = GL_FALSE; -GLboolean __GLEW_NV_vertex_array_range = GL_FALSE; -GLboolean __GLEW_NV_vertex_array_range2 = GL_FALSE; -GLboolean __GLEW_NV_vertex_attrib_integer_64bit = GL_FALSE; -GLboolean __GLEW_NV_vertex_buffer_unified_memory = GL_FALSE; -GLboolean __GLEW_NV_vertex_program = GL_FALSE; -GLboolean __GLEW_NV_vertex_program1_1 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program2 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program2_option = GL_FALSE; -GLboolean __GLEW_NV_vertex_program3 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program4 = GL_FALSE; -GLboolean __GLEW_NV_video_capture = GL_FALSE; -GLboolean __GLEW_OES_byte_coordinates = GL_FALSE; -GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE; -GLboolean __GLEW_OES_read_format = GL_FALSE; -GLboolean __GLEW_OES_single_precision = GL_FALSE; -GLboolean __GLEW_OML_interlace = GL_FALSE; -GLboolean __GLEW_OML_resample = GL_FALSE; -GLboolean __GLEW_OML_subsample = GL_FALSE; -GLboolean __GLEW_PGI_misc_hints = GL_FALSE; -GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; -GLboolean __GLEW_REGAL_ES1_0_compatibility = GL_FALSE; -GLboolean __GLEW_REGAL_ES1_1_compatibility = GL_FALSE; -GLboolean __GLEW_REGAL_enable = GL_FALSE; -GLboolean __GLEW_REGAL_error_string = GL_FALSE; -GLboolean __GLEW_REGAL_extension_query = GL_FALSE; -GLboolean __GLEW_REGAL_log = GL_FALSE; -GLboolean __GLEW_REND_screen_coordinates = GL_FALSE; -GLboolean __GLEW_S3_s3tc = GL_FALSE; -GLboolean __GLEW_SGIS_color_range = GL_FALSE; -GLboolean __GLEW_SGIS_detail_texture = GL_FALSE; -GLboolean __GLEW_SGIS_fog_function = GL_FALSE; -GLboolean __GLEW_SGIS_generate_mipmap = GL_FALSE; -GLboolean __GLEW_SGIS_multisample = GL_FALSE; -GLboolean __GLEW_SGIS_pixel_texture = GL_FALSE; -GLboolean __GLEW_SGIS_point_line_texgen = GL_FALSE; -GLboolean __GLEW_SGIS_sharpen_texture = GL_FALSE; -GLboolean __GLEW_SGIS_texture4D = GL_FALSE; -GLboolean __GLEW_SGIS_texture_border_clamp = GL_FALSE; -GLboolean __GLEW_SGIS_texture_edge_clamp = GL_FALSE; -GLboolean __GLEW_SGIS_texture_filter4 = GL_FALSE; -GLboolean __GLEW_SGIS_texture_lod = GL_FALSE; -GLboolean __GLEW_SGIS_texture_select = GL_FALSE; -GLboolean __GLEW_SGIX_async = GL_FALSE; -GLboolean __GLEW_SGIX_async_histogram = GL_FALSE; -GLboolean __GLEW_SGIX_async_pixel = GL_FALSE; -GLboolean __GLEW_SGIX_blend_alpha_minmax = GL_FALSE; -GLboolean __GLEW_SGIX_clipmap = GL_FALSE; -GLboolean __GLEW_SGIX_convolution_accuracy = GL_FALSE; -GLboolean __GLEW_SGIX_depth_texture = GL_FALSE; -GLboolean __GLEW_SGIX_flush_raster = GL_FALSE; -GLboolean __GLEW_SGIX_fog_offset = GL_FALSE; -GLboolean __GLEW_SGIX_fog_texture = GL_FALSE; -GLboolean __GLEW_SGIX_fragment_specular_lighting = GL_FALSE; -GLboolean __GLEW_SGIX_framezoom = GL_FALSE; -GLboolean __GLEW_SGIX_interlace = GL_FALSE; -GLboolean __GLEW_SGIX_ir_instrument1 = GL_FALSE; -GLboolean __GLEW_SGIX_list_priority = GL_FALSE; -GLboolean __GLEW_SGIX_pixel_texture = GL_FALSE; -GLboolean __GLEW_SGIX_pixel_texture_bits = GL_FALSE; -GLboolean __GLEW_SGIX_reference_plane = GL_FALSE; -GLboolean __GLEW_SGIX_resample = GL_FALSE; -GLboolean __GLEW_SGIX_shadow = GL_FALSE; -GLboolean __GLEW_SGIX_shadow_ambient = GL_FALSE; -GLboolean __GLEW_SGIX_sprite = GL_FALSE; -GLboolean __GLEW_SGIX_tag_sample_buffer = GL_FALSE; -GLboolean __GLEW_SGIX_texture_add_env = GL_FALSE; -GLboolean __GLEW_SGIX_texture_coordinate_clamp = GL_FALSE; -GLboolean __GLEW_SGIX_texture_lod_bias = GL_FALSE; -GLboolean __GLEW_SGIX_texture_multi_buffer = GL_FALSE; -GLboolean __GLEW_SGIX_texture_range = GL_FALSE; -GLboolean __GLEW_SGIX_texture_scale_bias = GL_FALSE; -GLboolean __GLEW_SGIX_vertex_preclip = GL_FALSE; -GLboolean __GLEW_SGIX_vertex_preclip_hint = GL_FALSE; -GLboolean __GLEW_SGIX_ycrcb = GL_FALSE; -GLboolean __GLEW_SGI_color_matrix = GL_FALSE; -GLboolean __GLEW_SGI_color_table = GL_FALSE; -GLboolean __GLEW_SGI_texture_color_table = GL_FALSE; -GLboolean __GLEW_SUNX_constant_data = GL_FALSE; -GLboolean __GLEW_SUN_convolution_border_modes = GL_FALSE; -GLboolean __GLEW_SUN_global_alpha = GL_FALSE; -GLboolean __GLEW_SUN_mesh_array = GL_FALSE; -GLboolean __GLEW_SUN_read_video_pixels = GL_FALSE; -GLboolean __GLEW_SUN_slice_accum = GL_FALSE; -GLboolean __GLEW_SUN_triangle_list = GL_FALSE; -GLboolean __GLEW_SUN_vertex = GL_FALSE; -GLboolean __GLEW_WIN_phong_shading = GL_FALSE; -GLboolean __GLEW_WIN_specular_fog = GL_FALSE; -GLboolean __GLEW_WIN_swap_hint = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef GL_VERSION_1_2 - -static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3D")) == NULL) || r; - r = ((glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElements")) == NULL) || r; - r = ((glTexImage3D = (PFNGLTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexImage3D")) == NULL) || r; - r = ((glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3D")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_2 */ - -#ifdef GL_VERSION_1_2_1 - -#endif /* GL_VERSION_1_2_1 */ - -#ifdef GL_VERSION_1_3 - -static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveTexture = (PFNGLACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glActiveTexture")) == NULL) || r; - r = ((glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTexture")) == NULL) || r; - r = ((glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1D")) == NULL) || r; - r = ((glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2D")) == NULL) || r; - r = ((glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3D")) == NULL) || r; - r = ((glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1D")) == NULL) || r; - r = ((glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2D")) == NULL) || r; - r = ((glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3D")) == NULL) || r; - r = ((glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImage")) == NULL) || r; - r = ((glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixd")) == NULL) || r; - r = ((glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixf")) == NULL) || r; - r = ((glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixd")) == NULL) || r; - r = ((glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixf")) == NULL) || r; - r = ((glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1d")) == NULL) || r; - r = ((glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dv")) == NULL) || r; - r = ((glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1f")) == NULL) || r; - r = ((glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fv")) == NULL) || r; - r = ((glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1i")) == NULL) || r; - r = ((glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iv")) == NULL) || r; - r = ((glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1s")) == NULL) || r; - r = ((glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sv")) == NULL) || r; - r = ((glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2d")) == NULL) || r; - r = ((glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dv")) == NULL) || r; - r = ((glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2f")) == NULL) || r; - r = ((glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fv")) == NULL) || r; - r = ((glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2i")) == NULL) || r; - r = ((glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iv")) == NULL) || r; - r = ((glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2s")) == NULL) || r; - r = ((glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sv")) == NULL) || r; - r = ((glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3d")) == NULL) || r; - r = ((glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dv")) == NULL) || r; - r = ((glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3f")) == NULL) || r; - r = ((glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fv")) == NULL) || r; - r = ((glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3i")) == NULL) || r; - r = ((glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iv")) == NULL) || r; - r = ((glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3s")) == NULL) || r; - r = ((glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sv")) == NULL) || r; - r = ((glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4d")) == NULL) || r; - r = ((glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dv")) == NULL) || r; - r = ((glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4f")) == NULL) || r; - r = ((glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fv")) == NULL) || r; - r = ((glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4i")) == NULL) || r; - r = ((glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iv")) == NULL) || r; - r = ((glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4s")) == NULL) || r; - r = ((glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sv")) == NULL) || r; - r = ((glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverage")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_3 */ - -#ifdef GL_VERSION_1_4 - -static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendColor = (PFNGLBLENDCOLORPROC)glewGetProcAddress((const GLubyte*)"glBlendColor")) == NULL) || r; - r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; - r = ((glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparate")) == NULL) || r; - r = ((glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointer")) == NULL) || r; - r = ((glFogCoordd = (PFNGLFOGCOORDDPROC)glewGetProcAddress((const GLubyte*)"glFogCoordd")) == NULL) || r; - r = ((glFogCoorddv = (PFNGLFOGCOORDDVPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddv")) == NULL) || r; - r = ((glFogCoordf = (PFNGLFOGCOORDFPROC)glewGetProcAddress((const GLubyte*)"glFogCoordf")) == NULL) || r; - r = ((glFogCoordfv = (PFNGLFOGCOORDFVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfv")) == NULL) || r; - r = ((glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArrays")) == NULL) || r; - r = ((glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElements")) == NULL) || r; - r = ((glPointParameterf = (PFNGLPOINTPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glPointParameterf")) == NULL) || r; - r = ((glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfv")) == NULL) || r; - r = ((glPointParameteri = (PFNGLPOINTPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPointParameteri")) == NULL) || r; - r = ((glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriv")) == NULL) || r; - r = ((glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3b")) == NULL) || r; - r = ((glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bv")) == NULL) || r; - r = ((glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3d")) == NULL) || r; - r = ((glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dv")) == NULL) || r; - r = ((glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3f")) == NULL) || r; - r = ((glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fv")) == NULL) || r; - r = ((glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3i")) == NULL) || r; - r = ((glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iv")) == NULL) || r; - r = ((glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3s")) == NULL) || r; - r = ((glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sv")) == NULL) || r; - r = ((glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ub")) == NULL) || r; - r = ((glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubv")) == NULL) || r; - r = ((glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ui")) == NULL) || r; - r = ((glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiv")) == NULL) || r; - r = ((glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3us")) == NULL) || r; - r = ((glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usv")) == NULL) || r; - r = ((glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointer")) == NULL) || r; - r = ((glWindowPos2d = (PFNGLWINDOWPOS2DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2d")) == NULL) || r; - r = ((glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dv")) == NULL) || r; - r = ((glWindowPos2f = (PFNGLWINDOWPOS2FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2f")) == NULL) || r; - r = ((glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fv")) == NULL) || r; - r = ((glWindowPos2i = (PFNGLWINDOWPOS2IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2i")) == NULL) || r; - r = ((glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iv")) == NULL) || r; - r = ((glWindowPos2s = (PFNGLWINDOWPOS2SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2s")) == NULL) || r; - r = ((glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sv")) == NULL) || r; - r = ((glWindowPos3d = (PFNGLWINDOWPOS3DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3d")) == NULL) || r; - r = ((glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dv")) == NULL) || r; - r = ((glWindowPos3f = (PFNGLWINDOWPOS3FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3f")) == NULL) || r; - r = ((glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fv")) == NULL) || r; - r = ((glWindowPos3i = (PFNGLWINDOWPOS3IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3i")) == NULL) || r; - r = ((glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iv")) == NULL) || r; - r = ((glWindowPos3s = (PFNGLWINDOWPOS3SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3s")) == NULL) || r; - r = ((glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sv")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_4 */ - -#ifdef GL_VERSION_1_5 - -static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQuery = (PFNGLBEGINQUERYPROC)glewGetProcAddress((const GLubyte*)"glBeginQuery")) == NULL) || r; - r = ((glBindBuffer = (PFNGLBINDBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindBuffer")) == NULL) || r; - r = ((glBufferData = (PFNGLBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferData")) == NULL) || r; - r = ((glBufferSubData = (PFNGLBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferSubData")) == NULL) || r; - r = ((glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffers")) == NULL) || r; - r = ((glDeleteQueries = (PFNGLDELETEQUERIESPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueries")) == NULL) || r; - r = ((glEndQuery = (PFNGLENDQUERYPROC)glewGetProcAddress((const GLubyte*)"glEndQuery")) == NULL) || r; - r = ((glGenBuffers = (PFNGLGENBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenBuffers")) == NULL) || r; - r = ((glGenQueries = (PFNGLGENQUERIESPROC)glewGetProcAddress((const GLubyte*)"glGenQueries")) == NULL) || r; - r = ((glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteriv")) == NULL) || r; - r = ((glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointerv")) == NULL) || r; - r = ((glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubData")) == NULL) || r; - r = ((glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectiv")) == NULL) || r; - r = ((glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuiv")) == NULL) || r; - r = ((glGetQueryiv = (PFNGLGETQUERYIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryiv")) == NULL) || r; - r = ((glIsBuffer = (PFNGLISBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsBuffer")) == NULL) || r; - r = ((glIsQuery = (PFNGLISQUERYPROC)glewGetProcAddress((const GLubyte*)"glIsQuery")) == NULL) || r; - r = ((glMapBuffer = (PFNGLMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glMapBuffer")) == NULL) || r; - r = ((glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glUnmapBuffer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_5 */ - -#ifdef GL_VERSION_2_0 - -static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAttachShader = (PFNGLATTACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glAttachShader")) == NULL) || r; - r = ((glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocation")) == NULL) || r; - r = ((glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparate")) == NULL) || r; - r = ((glCompileShader = (PFNGLCOMPILESHADERPROC)glewGetProcAddress((const GLubyte*)"glCompileShader")) == NULL) || r; - r = ((glCreateProgram = (PFNGLCREATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glCreateProgram")) == NULL) || r; - r = ((glCreateShader = (PFNGLCREATESHADERPROC)glewGetProcAddress((const GLubyte*)"glCreateShader")) == NULL) || r; - r = ((glDeleteProgram = (PFNGLDELETEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgram")) == NULL) || r; - r = ((glDeleteShader = (PFNGLDELETESHADERPROC)glewGetProcAddress((const GLubyte*)"glDeleteShader")) == NULL) || r; - r = ((glDetachShader = (PFNGLDETACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glDetachShader")) == NULL) || r; - r = ((glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArray")) == NULL) || r; - r = ((glDrawBuffers = (PFNGLDRAWBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffers")) == NULL) || r; - r = ((glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArray")) == NULL) || r; - r = ((glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttrib")) == NULL) || r; - r = ((glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniform")) == NULL) || r; - r = ((glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedShaders")) == NULL) || r; - r = ((glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocation")) == NULL) || r; - r = ((glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInfoLog")) == NULL) || r; - r = ((glGetProgramiv = (PFNGLGETPROGRAMIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramiv")) == NULL) || r; - r = ((glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetShaderInfoLog")) == NULL) || r; - r = ((glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSource")) == NULL) || r; - r = ((glGetShaderiv = (PFNGLGETSHADERIVPROC)glewGetProcAddress((const GLubyte*)"glGetShaderiv")) == NULL) || r; - r = ((glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocation")) == NULL) || r; - r = ((glGetUniformfv = (PFNGLGETUNIFORMFVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfv")) == NULL) || r; - r = ((glGetUniformiv = (PFNGLGETUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformiv")) == NULL) || r; - r = ((glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointerv")) == NULL) || r; - r = ((glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdv")) == NULL) || r; - r = ((glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfv")) == NULL) || r; - r = ((glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribiv")) == NULL) || r; - r = ((glIsProgram = (PFNGLISPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glIsProgram")) == NULL) || r; - r = ((glIsShader = (PFNGLISSHADERPROC)glewGetProcAddress((const GLubyte*)"glIsShader")) == NULL) || r; - r = ((glLinkProgram = (PFNGLLINKPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glLinkProgram")) == NULL) || r; - r = ((glShaderSource = (PFNGLSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glShaderSource")) == NULL) || r; - r = ((glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparate")) == NULL) || r; - r = ((glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilMaskSeparate")) == NULL) || r; - r = ((glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparate")) == NULL) || r; - r = ((glUniform1f = (PFNGLUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glUniform1f")) == NULL) || r; - r = ((glUniform1fv = (PFNGLUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glUniform1fv")) == NULL) || r; - r = ((glUniform1i = (PFNGLUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glUniform1i")) == NULL) || r; - r = ((glUniform1iv = (PFNGLUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glUniform1iv")) == NULL) || r; - r = ((glUniform2f = (PFNGLUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glUniform2f")) == NULL) || r; - r = ((glUniform2fv = (PFNGLUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glUniform2fv")) == NULL) || r; - r = ((glUniform2i = (PFNGLUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glUniform2i")) == NULL) || r; - r = ((glUniform2iv = (PFNGLUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glUniform2iv")) == NULL) || r; - r = ((glUniform3f = (PFNGLUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glUniform3f")) == NULL) || r; - r = ((glUniform3fv = (PFNGLUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glUniform3fv")) == NULL) || r; - r = ((glUniform3i = (PFNGLUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glUniform3i")) == NULL) || r; - r = ((glUniform3iv = (PFNGLUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glUniform3iv")) == NULL) || r; - r = ((glUniform4f = (PFNGLUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glUniform4f")) == NULL) || r; - r = ((glUniform4fv = (PFNGLUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glUniform4fv")) == NULL) || r; - r = ((glUniform4i = (PFNGLUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glUniform4i")) == NULL) || r; - r = ((glUniform4iv = (PFNGLUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glUniform4iv")) == NULL) || r; - r = ((glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fv")) == NULL) || r; - r = ((glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fv")) == NULL) || r; - r = ((glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fv")) == NULL) || r; - r = ((glUseProgram = (PFNGLUSEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glUseProgram")) == NULL) || r; - r = ((glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glValidateProgram")) == NULL) || r; - r = ((glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1d")) == NULL) || r; - r = ((glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dv")) == NULL) || r; - r = ((glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1f")) == NULL) || r; - r = ((glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fv")) == NULL) || r; - r = ((glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1s")) == NULL) || r; - r = ((glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sv")) == NULL) || r; - r = ((glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2d")) == NULL) || r; - r = ((glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dv")) == NULL) || r; - r = ((glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2f")) == NULL) || r; - r = ((glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fv")) == NULL) || r; - r = ((glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2s")) == NULL) || r; - r = ((glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sv")) == NULL) || r; - r = ((glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3d")) == NULL) || r; - r = ((glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dv")) == NULL) || r; - r = ((glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3f")) == NULL) || r; - r = ((glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fv")) == NULL) || r; - r = ((glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3s")) == NULL) || r; - r = ((glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sv")) == NULL) || r; - r = ((glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nbv")) == NULL) || r; - r = ((glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Niv")) == NULL) || r; - r = ((glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nsv")) == NULL) || r; - r = ((glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nub")) == NULL) || r; - r = ((glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nubv")) == NULL) || r; - r = ((glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nuiv")) == NULL) || r; - r = ((glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nusv")) == NULL) || r; - r = ((glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bv")) == NULL) || r; - r = ((glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4d")) == NULL) || r; - r = ((glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dv")) == NULL) || r; - r = ((glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4f")) == NULL) || r; - r = ((glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fv")) == NULL) || r; - r = ((glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4iv")) == NULL) || r; - r = ((glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4s")) == NULL) || r; - r = ((glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sv")) == NULL) || r; - r = ((glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubv")) == NULL) || r; - r = ((glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uiv")) == NULL) || r; - r = ((glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usv")) == NULL) || r; - r = ((glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_2_0 */ - -#ifdef GL_VERSION_2_1 - -static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3fv")) == NULL) || r; - r = ((glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4fv")) == NULL) || r; - r = ((glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2fv")) == NULL) || r; - r = ((glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4fv")) == NULL) || r; - r = ((glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2fv")) == NULL) || r; - r = ((glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3fv")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_2_1 */ - -#ifdef GL_VERSION_3_0 - -static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRender")) == NULL) || r; - r = ((glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedback")) == NULL) || r; - r = ((glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocation")) == NULL) || r; - r = ((glClampColor = (PFNGLCLAMPCOLORPROC)glewGetProcAddress((const GLubyte*)"glClampColor")) == NULL) || r; - r = ((glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfi")) == NULL) || r; - r = ((glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfv")) == NULL) || r; - r = ((glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferiv")) == NULL) || r; - r = ((glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferuiv")) == NULL) || r; - r = ((glColorMaski = (PFNGLCOLORMASKIPROC)glewGetProcAddress((const GLubyte*)"glColorMaski")) == NULL) || r; - r = ((glDisablei = (PFNGLDISABLEIPROC)glewGetProcAddress((const GLubyte*)"glDisablei")) == NULL) || r; - r = ((glEnablei = (PFNGLENABLEIPROC)glewGetProcAddress((const GLubyte*)"glEnablei")) == NULL) || r; - r = ((glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRender")) == NULL) || r; - r = ((glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedback")) == NULL) || r; - r = ((glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)glewGetProcAddress((const GLubyte*)"glGetBooleani_v")) == NULL) || r; - r = ((glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocation")) == NULL) || r; - r = ((glGetStringi = (PFNGLGETSTRINGIPROC)glewGetProcAddress((const GLubyte*)"glGetStringi")) == NULL) || r; - r = ((glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIiv")) == NULL) || r; - r = ((glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuiv")) == NULL) || r; - r = ((glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVarying")) == NULL) || r; - r = ((glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuiv")) == NULL) || r; - r = ((glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIiv")) == NULL) || r; - r = ((glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuiv")) == NULL) || r; - r = ((glIsEnabledi = (PFNGLISENABLEDIPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledi")) == NULL) || r; - r = ((glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIiv")) == NULL) || r; - r = ((glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuiv")) == NULL) || r; - r = ((glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryings")) == NULL) || r; - r = ((glUniform1ui = (PFNGLUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui")) == NULL) || r; - r = ((glUniform1uiv = (PFNGLUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiv")) == NULL) || r; - r = ((glUniform2ui = (PFNGLUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui")) == NULL) || r; - r = ((glUniform2uiv = (PFNGLUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiv")) == NULL) || r; - r = ((glUniform3ui = (PFNGLUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui")) == NULL) || r; - r = ((glUniform3uiv = (PFNGLUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiv")) == NULL) || r; - r = ((glUniform4ui = (PFNGLUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui")) == NULL) || r; - r = ((glUniform4uiv = (PFNGLUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiv")) == NULL) || r; - r = ((glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1i")) == NULL) || r; - r = ((glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iv")) == NULL) || r; - r = ((glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ui")) == NULL) || r; - r = ((glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiv")) == NULL) || r; - r = ((glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2i")) == NULL) || r; - r = ((glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iv")) == NULL) || r; - r = ((glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ui")) == NULL) || r; - r = ((glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiv")) == NULL) || r; - r = ((glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3i")) == NULL) || r; - r = ((glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iv")) == NULL) || r; - r = ((glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ui")) == NULL) || r; - r = ((glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiv")) == NULL) || r; - r = ((glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bv")) == NULL) || r; - r = ((glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4i")) == NULL) || r; - r = ((glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iv")) == NULL) || r; - r = ((glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4sv")) == NULL) || r; - r = ((glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubv")) == NULL) || r; - r = ((glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ui")) == NULL) || r; - r = ((glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiv")) == NULL) || r; - r = ((glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usv")) == NULL) || r; - r = ((glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_0 */ - -#ifdef GL_VERSION_3_1 - -static GLboolean _glewInit_GL_VERSION_3_1 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstanced")) == NULL) || r; - r = ((glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstanced")) == NULL) || r; - r = ((glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndex")) == NULL) || r; - r = ((glTexBuffer = (PFNGLTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glTexBuffer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_1 */ - -#ifdef GL_VERSION_3_2 - -static GLboolean _glewInit_GL_VERSION_3_2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture")) == NULL) || r; - r = ((glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteri64v")) == NULL) || r; - r = ((glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64i_v")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_2 */ - -#ifdef GL_VERSION_3_3 - -static GLboolean _glewInit_GL_VERSION_3_3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisor")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_3 */ - -#ifdef GL_VERSION_4_0 - -static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparatei")) == NULL) || r; - r = ((glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationi")) == NULL) || r; - r = ((glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparatei")) == NULL) || r; - r = ((glBlendFunci = (PFNGLBLENDFUNCIPROC)glewGetProcAddress((const GLubyte*)"glBlendFunci")) == NULL) || r; - r = ((glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShading")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_4_0 */ - -#ifdef GL_VERSION_4_1 - -#endif /* GL_VERSION_4_1 */ - -#ifdef GL_VERSION_4_2 - -#endif /* GL_VERSION_4_2 */ - -#ifdef GL_VERSION_4_3 - -#endif /* GL_VERSION_4_3 */ - -#ifdef GL_VERSION_4_4 - -#endif /* GL_VERSION_4_4 */ - -#ifdef GL_3DFX_multisample - -#endif /* GL_3DFX_multisample */ - -#ifdef GL_3DFX_tbuffer - -static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)glewGetProcAddress((const GLubyte*)"glTbufferMask3DFX")) == NULL) || r; - - return r; -} - -#endif /* GL_3DFX_tbuffer */ - -#ifdef GL_3DFX_texture_compression_FXT1 - -#endif /* GL_3DFX_texture_compression_FXT1 */ - -#ifdef GL_AMD_blend_minmax_factor - -#endif /* GL_AMD_blend_minmax_factor */ - -#ifdef GL_AMD_conservative_depth - -#endif /* GL_AMD_conservative_depth */ - -#ifdef GL_AMD_debug_output - -static GLboolean _glewInit_GL_AMD_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackAMD")) == NULL) || r; - r = ((glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageEnableAMD")) == NULL) || r; - r = ((glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertAMD")) == NULL) || r; - r = ((glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_debug_output */ - -#ifdef GL_AMD_depth_clamp_separate - -#endif /* GL_AMD_depth_clamp_separate */ - -#ifdef GL_AMD_draw_buffers_blend - -static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationIndexedAMD")) == NULL) || r; - r = ((glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateIndexedAMD")) == NULL) || r; - r = ((glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncIndexedAMD")) == NULL) || r; - r = ((glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateIndexedAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_draw_buffers_blend */ - -#ifdef GL_AMD_interleaved_elements - -static GLboolean _glewInit_GL_AMD_interleaved_elements (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribParameteriAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_interleaved_elements */ - -#ifdef GL_AMD_multi_draw_indirect - -static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectAMD")) == NULL) || r; - r = ((glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_multi_draw_indirect */ - -#ifdef GL_AMD_name_gen_delete - -static GLboolean _glewInit_GL_AMD_name_gen_delete (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamesAMD")) == NULL) || r; - r = ((glGenNamesAMD = (PFNGLGENNAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glGenNamesAMD")) == NULL) || r; - r = ((glIsNameAMD = (PFNGLISNAMEAMDPROC)glewGetProcAddress((const GLubyte*)"glIsNameAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_name_gen_delete */ - -#ifdef GL_AMD_performance_monitor - -static GLboolean _glewInit_GL_AMD_performance_monitor (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glBeginPerfMonitorAMD")) == NULL) || r; - r = ((glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glDeletePerfMonitorsAMD")) == NULL) || r; - r = ((glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glEndPerfMonitorAMD")) == NULL) || r; - r = ((glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glGenPerfMonitorsAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterDataAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterInfoAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterStringAMD")) == NULL) || r; - r = ((glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCountersAMD")) == NULL) || r; - r = ((glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupStringAMD")) == NULL) || r; - r = ((glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupsAMD")) == NULL) || r; - r = ((glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glSelectPerfMonitorCountersAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_performance_monitor */ - -#ifdef GL_AMD_pinned_memory - -#endif /* GL_AMD_pinned_memory */ - -#ifdef GL_AMD_query_buffer_object - -#endif /* GL_AMD_query_buffer_object */ - -#ifdef GL_AMD_sample_positions - -static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC)glewGetProcAddress((const GLubyte*)"glSetMultisamplefvAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_sample_positions */ - -#ifdef GL_AMD_seamless_cubemap_per_texture - -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -#ifdef GL_AMD_shader_stencil_export - -#endif /* GL_AMD_shader_stencil_export */ - -#ifdef GL_AMD_shader_trinary_minmax - -#endif /* GL_AMD_shader_trinary_minmax */ - -#ifdef GL_AMD_sparse_texture - -static GLboolean _glewInit_GL_AMD_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTexStorageSparseAMD")) == NULL) || r; - r = ((glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTextureStorageSparseAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_sparse_texture */ - -#ifdef GL_AMD_stencil_operation_extended - -static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC)glewGetProcAddress((const GLubyte*)"glStencilOpValueAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_stencil_operation_extended */ - -#ifdef GL_AMD_texture_texture4 - -#endif /* GL_AMD_texture_texture4 */ - -#ifdef GL_AMD_transform_feedback3_lines_triangles - -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -#ifdef GL_AMD_vertex_shader_layer - -#endif /* GL_AMD_vertex_shader_layer */ - -#ifdef GL_AMD_vertex_shader_tessellator - -static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationFactorAMD")) == NULL) || r; - r = ((glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationModeAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_vertex_shader_tessellator */ - -#ifdef GL_AMD_vertex_shader_viewport_index - -#endif /* GL_AMD_vertex_shader_viewport_index */ - -#ifdef GL_ANGLE_depth_texture - -#endif /* GL_ANGLE_depth_texture */ - -#ifdef GL_ANGLE_framebuffer_blit - -static GLboolean _glewInit_GL_ANGLE_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlitFramebufferANGLE = (PFNGLBLITFRAMEBUFFERANGLEPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_framebuffer_blit */ - -#ifdef GL_ANGLE_framebuffer_multisample - -static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleANGLE = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_framebuffer_multisample */ - -#ifdef GL_ANGLE_instanced_arrays - -static GLboolean _glewInit_GL_ANGLE_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedANGLE = (PFNGLDRAWARRAYSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedANGLE")) == NULL) || r; - r = ((glDrawElementsInstancedANGLE = (PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedANGLE")) == NULL) || r; - r = ((glVertexAttribDivisorANGLE = (PFNGLVERTEXATTRIBDIVISORANGLEPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_instanced_arrays */ - -#ifdef GL_ANGLE_pack_reverse_row_order - -#endif /* GL_ANGLE_pack_reverse_row_order */ - -#ifdef GL_ANGLE_program_binary - -#endif /* GL_ANGLE_program_binary */ - -#ifdef GL_ANGLE_texture_compression_dxt1 - -#endif /* GL_ANGLE_texture_compression_dxt1 */ - -#ifdef GL_ANGLE_texture_compression_dxt3 - -#endif /* GL_ANGLE_texture_compression_dxt3 */ - -#ifdef GL_ANGLE_texture_compression_dxt5 - -#endif /* GL_ANGLE_texture_compression_dxt5 */ - -#ifdef GL_ANGLE_texture_usage - -#endif /* GL_ANGLE_texture_usage */ - -#ifdef GL_ANGLE_timer_query - -static GLboolean _glewInit_GL_ANGLE_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryANGLE = (PFNGLBEGINQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryANGLE")) == NULL) || r; - r = ((glDeleteQueriesANGLE = (PFNGLDELETEQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesANGLE")) == NULL) || r; - r = ((glEndQueryANGLE = (PFNGLENDQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glEndQueryANGLE")) == NULL) || r; - r = ((glGenQueriesANGLE = (PFNGLGENQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesANGLE")) == NULL) || r; - r = ((glGetQueryObjecti64vANGLE = (PFNGLGETQUERYOBJECTI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vANGLE")) == NULL) || r; - r = ((glGetQueryObjectivANGLE = (PFNGLGETQUERYOBJECTIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivANGLE")) == NULL) || r; - r = ((glGetQueryObjectui64vANGLE = (PFNGLGETQUERYOBJECTUI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vANGLE")) == NULL) || r; - r = ((glGetQueryObjectuivANGLE = (PFNGLGETQUERYOBJECTUIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivANGLE")) == NULL) || r; - r = ((glGetQueryivANGLE = (PFNGLGETQUERYIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivANGLE")) == NULL) || r; - r = ((glIsQueryANGLE = (PFNGLISQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glIsQueryANGLE")) == NULL) || r; - r = ((glQueryCounterANGLE = (PFNGLQUERYCOUNTERANGLEPROC)glewGetProcAddress((const GLubyte*)"glQueryCounterANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_timer_query */ - -#ifdef GL_ANGLE_translated_shader_source - -static GLboolean _glewInit_GL_ANGLE_translated_shader_source (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTranslatedShaderSourceANGLE = (PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetTranslatedShaderSourceANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_translated_shader_source */ - -#ifdef GL_APPLE_aux_depth_stencil - -#endif /* GL_APPLE_aux_depth_stencil */ - -#ifdef GL_APPLE_client_storage - -#endif /* GL_APPLE_client_storage */ - -#ifdef GL_APPLE_element_array - -static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayAPPLE")) == NULL) || r; - r = ((glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayAPPLE")) == NULL) || r; - r = ((glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)glewGetProcAddress((const GLubyte*)"glElementPointerAPPLE")) == NULL) || r; - r = ((glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementArrayAPPLE")) == NULL) || r; - r = ((glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawRangeElementArrayAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_element_array */ - -#ifdef GL_APPLE_fence - -static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesAPPLE")) == NULL) || r; - r = ((glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceAPPLE")) == NULL) || r; - r = ((glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishObjectAPPLE")) == NULL) || r; - r = ((glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenFencesAPPLE")) == NULL) || r; - r = ((glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsFenceAPPLE")) == NULL) || r; - r = ((glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glSetFenceAPPLE")) == NULL) || r; - r = ((glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestFenceAPPLE")) == NULL) || r; - r = ((glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestObjectAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_fence */ - -#ifdef GL_APPLE_float_pixels - -#endif /* GL_APPLE_float_pixels */ - -#ifdef GL_APPLE_flush_buffer_range - -static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBufferParameteriAPPLE")) == NULL) || r; - r = ((glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_flush_buffer_range */ - -#ifdef GL_APPLE_object_purgeable - -static GLboolean _glewInit_GL_APPLE_object_purgeable (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivAPPLE")) == NULL) || r; - r = ((glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectPurgeableAPPLE")) == NULL) || r; - r = ((glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectUnpurgeableAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_object_purgeable */ - -#ifdef GL_APPLE_pixel_buffer - -#endif /* GL_APPLE_pixel_buffer */ - -#ifdef GL_APPLE_rgb_422 - -#endif /* GL_APPLE_rgb_422 */ - -#ifdef GL_APPLE_row_bytes - -#endif /* GL_APPLE_row_bytes */ - -#ifdef GL_APPLE_specular_vector - -#endif /* GL_APPLE_specular_vector */ - -#ifdef GL_APPLE_texture_range - -static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterPointervAPPLE")) == NULL) || r; - r = ((glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTextureRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_texture_range */ - -#ifdef GL_APPLE_transform_hint - -#endif /* GL_APPLE_transform_hint */ - -#ifdef GL_APPLE_vertex_array_object - -static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArrayAPPLE")) == NULL) || r; - r = ((glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArraysAPPLE")) == NULL) || r; - r = ((glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArraysAPPLE")) == NULL) || r; - r = ((glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArrayAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_array_object */ - -#ifdef GL_APPLE_vertex_array_range - -static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeAPPLE")) == NULL) || r; - r = ((glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayParameteriAPPLE")) == NULL) || r; - r = ((glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_array_range */ - -#ifdef GL_APPLE_vertex_program_evaluators - -static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribAPPLE")) == NULL) || r; - r = ((glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribAPPLE")) == NULL) || r; - r = ((glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexAttribEnabledAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1dAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1fAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2dAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2fAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_program_evaluators */ - -#ifdef GL_APPLE_ycbcr_422 - -#endif /* GL_APPLE_ycbcr_422 */ - -#ifdef GL_ARB_ES2_compatibility - -static GLboolean _glewInit_GL_ARB_ES2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthf = (PFNGLCLEARDEPTHFPROC)glewGetProcAddress((const GLubyte*)"glClearDepthf")) == NULL) || r; - r = ((glDepthRangef = (PFNGLDEPTHRANGEFPROC)glewGetProcAddress((const GLubyte*)"glDepthRangef")) == NULL) || r; - r = ((glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)glewGetProcAddress((const GLubyte*)"glGetShaderPrecisionFormat")) == NULL) || r; - r = ((glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)glewGetProcAddress((const GLubyte*)"glReleaseShaderCompiler")) == NULL) || r; - r = ((glShaderBinary = (PFNGLSHADERBINARYPROC)glewGetProcAddress((const GLubyte*)"glShaderBinary")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_ES2_compatibility */ - -#ifdef GL_ARB_ES3_compatibility - -#endif /* GL_ARB_ES3_compatibility */ - -#ifdef GL_ARB_arrays_of_arrays - -#endif /* GL_ARB_arrays_of_arrays */ - -#ifdef GL_ARB_base_instance - -static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedBaseInstance")) == NULL) || r; - r = ((glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseInstance")) == NULL) || r; - r = ((glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertexBaseInstance")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_base_instance */ - -#ifdef GL_ARB_bindless_texture - -static GLboolean _glewInit_GL_ARB_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleARB")) == NULL) || r; - r = ((glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleARB")) == NULL) || r; - r = ((glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleARB")) == NULL) || r; - r = ((glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vARB")) == NULL) || r; - r = ((glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentARB")) == NULL) || r; - r = ((glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentARB")) == NULL) || r; - r = ((glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentARB")) == NULL) || r; - r = ((glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentARB")) == NULL) || r; - r = ((glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentARB")) == NULL) || r; - r = ((glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentARB")) == NULL) || r; - r = ((glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64ARB")) == NULL) || r; - r = ((glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vARB")) == NULL) || r; - r = ((glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64ARB")) == NULL) || r; - r = ((glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vARB")) == NULL) || r; - r = ((glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64ARB")) == NULL) || r; - r = ((glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_bindless_texture */ - -#ifdef GL_ARB_blend_func_extended - -static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationIndexed")) == NULL) || r; - r = ((glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataIndex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_blend_func_extended */ - -#ifdef GL_ARB_buffer_storage - -static GLboolean _glewInit_GL_ARB_buffer_storage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferStorage = (PFNGLBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glBufferStorage")) == NULL) || r; - r = ((glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferStorageEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_buffer_storage */ - -#ifdef GL_ARB_cl_event - -static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateSyncFromCLeventARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_cl_event */ - -#ifdef GL_ARB_clear_buffer_object - -static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferData")) == NULL) || r; - r = ((glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferSubData")) == NULL) || r; - r = ((glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferDataEXT")) == NULL) || r; - r = ((glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferSubDataEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_clear_buffer_object */ - -#ifdef GL_ARB_clear_texture - -static GLboolean _glewInit_GL_ARB_clear_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexImage")) == NULL) || r; - r = ((glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexSubImage")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_clear_texture */ - -#ifdef GL_ARB_color_buffer_float - -static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClampColorARB = (PFNGLCLAMPCOLORARBPROC)glewGetProcAddress((const GLubyte*)"glClampColorARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_color_buffer_float */ - -#ifdef GL_ARB_compatibility - -#endif /* GL_ARB_compatibility */ - -#ifdef GL_ARB_compressed_texture_pixel_storage - -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -#ifdef GL_ARB_compute_shader - -static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)glewGetProcAddress((const GLubyte*)"glDispatchCompute")) == NULL) || r; - r = ((glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_compute_shader */ - -#ifdef GL_ARB_compute_variable_group_size - -static GLboolean _glewInit_GL_ARB_compute_variable_group_size (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeGroupSizeARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_compute_variable_group_size */ - -#ifdef GL_ARB_conservative_depth - -#endif /* GL_ARB_conservative_depth */ - -#ifdef GL_ARB_copy_buffer - -static GLboolean _glewInit_GL_ARB_copy_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyBufferSubData")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_copy_buffer */ - -#ifdef GL_ARB_copy_image - -static GLboolean _glewInit_GL_ARB_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubData")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_copy_image */ - -#ifdef GL_ARB_debug_output - -static GLboolean _glewInit_GL_ARB_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackARB")) == NULL) || r; - r = ((glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControlARB")) == NULL) || r; - r = ((glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertARB")) == NULL) || r; - r = ((glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_debug_output */ - -#ifdef GL_ARB_depth_buffer_float - -#endif /* GL_ARB_depth_buffer_float */ - -#ifdef GL_ARB_depth_clamp - -#endif /* GL_ARB_depth_clamp */ - -#ifdef GL_ARB_depth_texture - -#endif /* GL_ARB_depth_texture */ - -#ifdef GL_ARB_draw_buffers - -static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_buffers */ - -#ifdef GL_ARB_draw_buffers_blend - -static GLboolean _glewInit_GL_ARB_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateiARB")) == NULL) || r; - r = ((glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationiARB")) == NULL) || r; - r = ((glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateiARB")) == NULL) || r; - r = ((glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFunciARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_buffers_blend */ - -#ifdef GL_ARB_draw_elements_base_vertex - -static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsBaseVertex")) == NULL) || r; - r = ((glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertex")) == NULL) || r; - r = ((glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsBaseVertex")) == NULL) || r; - r = ((glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsBaseVertex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_elements_base_vertex */ - -#ifdef GL_ARB_draw_indirect - -static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysIndirect")) == NULL) || r; - r = ((glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_indirect */ - -#ifdef GL_ARB_draw_instanced - -#endif /* GL_ARB_draw_instanced */ - -#ifdef GL_ARB_enhanced_layouts - -#endif /* GL_ARB_enhanced_layouts */ - -#ifdef GL_ARB_explicit_attrib_location - -#endif /* GL_ARB_explicit_attrib_location */ - -#ifdef GL_ARB_explicit_uniform_location - -#endif /* GL_ARB_explicit_uniform_location */ - -#ifdef GL_ARB_fragment_coord_conventions - -#endif /* GL_ARB_fragment_coord_conventions */ - -#ifdef GL_ARB_fragment_layer_viewport - -#endif /* GL_ARB_fragment_layer_viewport */ - -#ifdef GL_ARB_fragment_program - -#endif /* GL_ARB_fragment_program */ - -#ifdef GL_ARB_fragment_program_shadow - -#endif /* GL_ARB_fragment_program_shadow */ - -#ifdef GL_ARB_fragment_shader - -#endif /* GL_ARB_fragment_shader */ - -#ifdef GL_ARB_framebuffer_no_attachments - -static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glFramebufferParameteri")) == NULL) || r; - r = ((glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameteriv")) == NULL) || r; - r = ((glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferParameterivEXT")) == NULL) || r; - r = ((glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferParameteriEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_framebuffer_no_attachments */ - -#ifdef GL_ARB_framebuffer_object - -static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindFramebuffer")) == NULL) || r; - r = ((glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbuffer")) == NULL) || r; - r = ((glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebuffer")) == NULL) || r; - r = ((glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatus")) == NULL) || r; - r = ((glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffers")) == NULL) || r; - r = ((glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffers")) == NULL) || r; - r = ((glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbuffer")) == NULL) || r; - r = ((glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1D")) == NULL) || r; - r = ((glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2D")) == NULL) || r; - r = ((glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3D")) == NULL) || r; - r = ((glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayer")) == NULL) || r; - r = ((glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffers")) == NULL) || r; - r = ((glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffers")) == NULL) || r; - r = ((glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmap")) == NULL) || r; - r = ((glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameteriv")) == NULL) || r; - r = ((glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameteriv")) == NULL) || r; - r = ((glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsFramebuffer")) == NULL) || r; - r = ((glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbuffer")) == NULL) || r; - r = ((glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorage")) == NULL) || r; - r = ((glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisample")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_framebuffer_object */ - -#ifdef GL_ARB_framebuffer_sRGB - -#endif /* GL_ARB_framebuffer_sRGB */ - -#ifdef GL_ARB_geometry_shader4 - -static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureARB")) == NULL) || r; - r = ((glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceARB")) == NULL) || r; - r = ((glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerARB")) == NULL) || r; - r = ((glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_geometry_shader4 */ - -#ifdef GL_ARB_get_program_binary - -static GLboolean _glewInit_GL_ARB_get_program_binary (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glGetProgramBinary")) == NULL) || r; - r = ((glProgramBinary = (PFNGLPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glProgramBinary")) == NULL) || r; - r = ((glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteri")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_get_program_binary */ - -#ifdef GL_ARB_gpu_shader5 - -#endif /* GL_ARB_gpu_shader5 */ - -#ifdef GL_ARB_gpu_shader_fp64 - -static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformdv = (PFNGLGETUNIFORMDVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformdv")) == NULL) || r; - r = ((glUniform1d = (PFNGLUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glUniform1d")) == NULL) || r; - r = ((glUniform1dv = (PFNGLUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glUniform1dv")) == NULL) || r; - r = ((glUniform2d = (PFNGLUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glUniform2d")) == NULL) || r; - r = ((glUniform2dv = (PFNGLUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glUniform2dv")) == NULL) || r; - r = ((glUniform3d = (PFNGLUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glUniform3d")) == NULL) || r; - r = ((glUniform3dv = (PFNGLUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glUniform3dv")) == NULL) || r; - r = ((glUniform4d = (PFNGLUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glUniform4d")) == NULL) || r; - r = ((glUniform4dv = (PFNGLUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glUniform4dv")) == NULL) || r; - r = ((glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2dv")) == NULL) || r; - r = ((glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3dv")) == NULL) || r; - r = ((glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4dv")) == NULL) || r; - r = ((glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3dv")) == NULL) || r; - r = ((glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2dv")) == NULL) || r; - r = ((glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4dv")) == NULL) || r; - r = ((glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4dv")) == NULL) || r; - r = ((glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2dv")) == NULL) || r; - r = ((glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3dv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_gpu_shader_fp64 */ - -#ifdef GL_ARB_half_float_pixel - -#endif /* GL_ARB_half_float_pixel */ - -#ifdef GL_ARB_half_float_vertex - -#endif /* GL_ARB_half_float_vertex */ - -#ifdef GL_ARB_imaging - -static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; - r = ((glColorSubTable = (PFNGLCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorSubTable")) == NULL) || r; - r = ((glColorTable = (PFNGLCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorTable")) == NULL) || r; - r = ((glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfv")) == NULL) || r; - r = ((glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameteriv")) == NULL) || r; - r = ((glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1D")) == NULL) || r; - r = ((glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2D")) == NULL) || r; - r = ((glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterf")) == NULL) || r; - r = ((glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfv")) == NULL) || r; - r = ((glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteri")) == NULL) || r; - r = ((glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriv")) == NULL) || r; - r = ((glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTable")) == NULL) || r; - r = ((glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTable")) == NULL) || r; - r = ((glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1D")) == NULL) || r; - r = ((glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2D")) == NULL) || r; - r = ((glGetColorTable = (PFNGLGETCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glGetColorTable")) == NULL) || r; - r = ((glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfv")) == NULL) || r; - r = ((glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameteriv")) == NULL) || r; - r = ((glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilter")) == NULL) || r; - r = ((glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfv")) == NULL) || r; - r = ((glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameteriv")) == NULL) || r; - r = ((glGetHistogram = (PFNGLGETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glGetHistogram")) == NULL) || r; - r = ((glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfv")) == NULL) || r; - r = ((glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameteriv")) == NULL) || r; - r = ((glGetMinmax = (PFNGLGETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glGetMinmax")) == NULL) || r; - r = ((glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfv")) == NULL) || r; - r = ((glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameteriv")) == NULL) || r; - r = ((glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilter")) == NULL) || r; - r = ((glHistogram = (PFNGLHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glHistogram")) == NULL) || r; - r = ((glMinmax = (PFNGLMINMAXPROC)glewGetProcAddress((const GLubyte*)"glMinmax")) == NULL) || r; - r = ((glResetHistogram = (PFNGLRESETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glResetHistogram")) == NULL) || r; - r = ((glResetMinmax = (PFNGLRESETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glResetMinmax")) == NULL) || r; - r = ((glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2D")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_imaging */ - -#ifdef GL_ARB_indirect_parameters - -static GLboolean _glewInit_GL_ARB_indirect_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectCountARB")) == NULL) || r; - r = ((glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectCountARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_indirect_parameters */ - -#ifdef GL_ARB_instanced_arrays - -static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedARB")) == NULL) || r; - r = ((glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedARB")) == NULL) || r; - r = ((glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_instanced_arrays */ - -#ifdef GL_ARB_internalformat_query - -static GLboolean _glewInit_GL_ARB_internalformat_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformativ")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_internalformat_query */ - -#ifdef GL_ARB_internalformat_query2 - -static GLboolean _glewInit_GL_ARB_internalformat_query2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformati64v")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_internalformat_query2 */ - -#ifdef GL_ARB_invalidate_subdata - -static GLboolean _glewInit_GL_ARB_invalidate_subdata (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferData")) == NULL) || r; - r = ((glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferSubData")) == NULL) || r; - r = ((glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateFramebuffer")) == NULL) || r; - r = ((glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateSubFramebuffer")) == NULL) || r; - r = ((glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexImage")) == NULL) || r; - r = ((glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexSubImage")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_invalidate_subdata */ - -#ifdef GL_ARB_map_buffer_alignment - -#endif /* GL_ARB_map_buffer_alignment */ - -#ifdef GL_ARB_map_buffer_range - -static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRange")) == NULL) || r; - r = ((glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glMapBufferRange")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_map_buffer_range */ - -#ifdef GL_ARB_matrix_palette - -static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)glewGetProcAddress((const GLubyte*)"glCurrentPaletteMatrixARB")) == NULL) || r; - r = ((glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexPointerARB")) == NULL) || r; - r = ((glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexubvARB")) == NULL) || r; - r = ((glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexuivARB")) == NULL) || r; - r = ((glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexusvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_matrix_palette */ - -#ifdef GL_ARB_multi_bind - -static GLboolean _glewInit_GL_ARB_multi_bind (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersBase")) == NULL) || r; - r = ((glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersRange")) == NULL) || r; - r = ((glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextures")) == NULL) || r; - r = ((glBindSamplers = (PFNGLBINDSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glBindSamplers")) == NULL) || r; - r = ((glBindTextures = (PFNGLBINDTEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindTextures")) == NULL) || r; - r = ((glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffers")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multi_bind */ - -#ifdef GL_ARB_multi_draw_indirect - -static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirect")) == NULL) || r; - r = ((glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multi_draw_indirect */ - -#ifdef GL_ARB_multisample - -static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverageARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multisample */ - -#ifdef GL_ARB_multitexture - -static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glActiveTextureARB")) == NULL) || r; - r = ((glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTextureARB")) == NULL) || r; - r = ((glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dARB")) == NULL) || r; - r = ((glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dvARB")) == NULL) || r; - r = ((glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fARB")) == NULL) || r; - r = ((glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fvARB")) == NULL) || r; - r = ((glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iARB")) == NULL) || r; - r = ((glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1ivARB")) == NULL) || r; - r = ((glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sARB")) == NULL) || r; - r = ((glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1svARB")) == NULL) || r; - r = ((glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dARB")) == NULL) || r; - r = ((glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dvARB")) == NULL) || r; - r = ((glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fARB")) == NULL) || r; - r = ((glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fvARB")) == NULL) || r; - r = ((glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iARB")) == NULL) || r; - r = ((glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2ivARB")) == NULL) || r; - r = ((glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sARB")) == NULL) || r; - r = ((glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2svARB")) == NULL) || r; - r = ((glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dARB")) == NULL) || r; - r = ((glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dvARB")) == NULL) || r; - r = ((glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fARB")) == NULL) || r; - r = ((glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fvARB")) == NULL) || r; - r = ((glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iARB")) == NULL) || r; - r = ((glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3ivARB")) == NULL) || r; - r = ((glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sARB")) == NULL) || r; - r = ((glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3svARB")) == NULL) || r; - r = ((glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dARB")) == NULL) || r; - r = ((glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dvARB")) == NULL) || r; - r = ((glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fARB")) == NULL) || r; - r = ((glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fvARB")) == NULL) || r; - r = ((glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iARB")) == NULL) || r; - r = ((glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4ivARB")) == NULL) || r; - r = ((glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sARB")) == NULL) || r; - r = ((glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4svARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multitexture */ - -#ifdef GL_ARB_occlusion_query - -static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryARB")) == NULL) || r; - r = ((glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesARB")) == NULL) || r; - r = ((glEndQueryARB = (PFNGLENDQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glEndQueryARB")) == NULL) || r; - r = ((glGenQueriesARB = (PFNGLGENQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesARB")) == NULL) || r; - r = ((glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivARB")) == NULL) || r; - r = ((glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivARB")) == NULL) || r; - r = ((glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivARB")) == NULL) || r; - r = ((glIsQueryARB = (PFNGLISQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glIsQueryARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_occlusion_query */ - -#ifdef GL_ARB_occlusion_query2 - -#endif /* GL_ARB_occlusion_query2 */ - -#ifdef GL_ARB_pixel_buffer_object - -#endif /* GL_ARB_pixel_buffer_object */ - -#ifdef GL_ARB_point_parameters - -static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfARB")) == NULL) || r; - r = ((glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_point_parameters */ - -#ifdef GL_ARB_point_sprite - -#endif /* GL_ARB_point_sprite */ - -#ifdef GL_ARB_program_interface_query - -static GLboolean _glewInit_GL_ARB_program_interface_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInterfaceiv")) == NULL) || r; - r = ((glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceIndex")) == NULL) || r; - r = ((glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocation")) == NULL) || r; - r = ((glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocationIndex")) == NULL) || r; - r = ((glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceName")) == NULL) || r; - r = ((glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_program_interface_query */ - -#ifdef GL_ARB_provoking_vertex - -static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_provoking_vertex */ - -#ifdef GL_ARB_query_buffer_object - -#endif /* GL_ARB_query_buffer_object */ - -#ifdef GL_ARB_robust_buffer_access_behavior - -#endif /* GL_ARB_robust_buffer_access_behavior */ - -#ifdef GL_ARB_robustness - -static GLboolean _glewInit_GL_ARB_robustness (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)glewGetProcAddress((const GLubyte*)"glGetGraphicsResetStatusARB")) == NULL) || r; - r = ((glGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnColorTableARB")) == NULL) || r; - r = ((glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnCompressedTexImageARB")) == NULL) || r; - r = ((glGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnConvolutionFilterARB")) == NULL) || r; - r = ((glGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glGetnHistogramARB")) == NULL) || r; - r = ((glGetnMapdvARB = (PFNGLGETNMAPDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapdvARB")) == NULL) || r; - r = ((glGetnMapfvARB = (PFNGLGETNMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapfvARB")) == NULL) || r; - r = ((glGetnMapivARB = (PFNGLGETNMAPIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapivARB")) == NULL) || r; - r = ((glGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMinmaxARB")) == NULL) || r; - r = ((glGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapfvARB")) == NULL) || r; - r = ((glGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapuivARB")) == NULL) || r; - r = ((glGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapusvARB")) == NULL) || r; - r = ((glGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPolygonStippleARB")) == NULL) || r; - r = ((glGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnSeparableFilterARB")) == NULL) || r; - r = ((glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnTexImageARB")) == NULL) || r; - r = ((glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformdvARB")) == NULL) || r; - r = ((glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformfvARB")) == NULL) || r; - r = ((glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformivARB")) == NULL) || r; - r = ((glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformuivARB")) == NULL) || r; - r = ((glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC)glewGetProcAddress((const GLubyte*)"glReadnPixelsARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_robustness */ - -#ifdef GL_ARB_robustness_application_isolation - -#endif /* GL_ARB_robustness_application_isolation */ - -#ifdef GL_ARB_robustness_share_group_isolation - -#endif /* GL_ARB_robustness_share_group_isolation */ - -#ifdef GL_ARB_sample_shading - -static GLboolean _glewInit_GL_ARB_sample_shading (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShadingARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sample_shading */ - -#ifdef GL_ARB_sampler_objects - -static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindSampler = (PFNGLBINDSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glBindSampler")) == NULL) || r; - r = ((glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteSamplers")) == NULL) || r; - r = ((glGenSamplers = (PFNGLGENSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glGenSamplers")) == NULL) || r; - r = ((glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIiv")) == NULL) || r; - r = ((glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIuiv")) == NULL) || r; - r = ((glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterfv")) == NULL) || r; - r = ((glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameteriv")) == NULL) || r; - r = ((glIsSampler = (PFNGLISSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glIsSampler")) == NULL) || r; - r = ((glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIiv")) == NULL) || r; - r = ((glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIuiv")) == NULL) || r; - r = ((glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterf")) == NULL) || r; - r = ((glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterfv")) == NULL) || r; - r = ((glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteri")) == NULL) || r; - r = ((glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteriv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sampler_objects */ - -#ifdef GL_ARB_seamless_cube_map - -#endif /* GL_ARB_seamless_cube_map */ - -#ifdef GL_ARB_seamless_cubemap_per_texture - -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -#ifdef GL_ARB_separate_shader_objects - -static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glActiveShaderProgram")) == NULL) || r; - r = ((glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glBindProgramPipeline")) == NULL) || r; - r = ((glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramv")) == NULL) || r; - r = ((glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramPipelines")) == NULL) || r; - r = ((glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glGenProgramPipelines")) == NULL) || r; - r = ((glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineInfoLog")) == NULL) || r; - r = ((glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineiv")) == NULL) || r; - r = ((glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glIsProgramPipeline")) == NULL) || r; - r = ((glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1d")) == NULL) || r; - r = ((glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dv")) == NULL) || r; - r = ((glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1f")) == NULL) || r; - r = ((glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fv")) == NULL) || r; - r = ((glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i")) == NULL) || r; - r = ((glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iv")) == NULL) || r; - r = ((glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui")) == NULL) || r; - r = ((glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiv")) == NULL) || r; - r = ((glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2d")) == NULL) || r; - r = ((glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dv")) == NULL) || r; - r = ((glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2f")) == NULL) || r; - r = ((glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fv")) == NULL) || r; - r = ((glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i")) == NULL) || r; - r = ((glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iv")) == NULL) || r; - r = ((glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui")) == NULL) || r; - r = ((glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiv")) == NULL) || r; - r = ((glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3d")) == NULL) || r; - r = ((glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dv")) == NULL) || r; - r = ((glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3f")) == NULL) || r; - r = ((glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fv")) == NULL) || r; - r = ((glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i")) == NULL) || r; - r = ((glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iv")) == NULL) || r; - r = ((glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui")) == NULL) || r; - r = ((glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiv")) == NULL) || r; - r = ((glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4d")) == NULL) || r; - r = ((glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dv")) == NULL) || r; - r = ((glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4f")) == NULL) || r; - r = ((glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fv")) == NULL) || r; - r = ((glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i")) == NULL) || r; - r = ((glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iv")) == NULL) || r; - r = ((glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui")) == NULL) || r; - r = ((glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiv")) == NULL) || r; - r = ((glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2dv")) == NULL) || r; - r = ((glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fv")) == NULL) || r; - r = ((glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3dv")) == NULL) || r; - r = ((glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fv")) == NULL) || r; - r = ((glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4dv")) == NULL) || r; - r = ((glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fv")) == NULL) || r; - r = ((glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3dv")) == NULL) || r; - r = ((glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fv")) == NULL) || r; - r = ((glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2dv")) == NULL) || r; - r = ((glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fv")) == NULL) || r; - r = ((glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4dv")) == NULL) || r; - r = ((glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fv")) == NULL) || r; - r = ((glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4dv")) == NULL) || r; - r = ((glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fv")) == NULL) || r; - r = ((glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2dv")) == NULL) || r; - r = ((glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fv")) == NULL) || r; - r = ((glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3dv")) == NULL) || r; - r = ((glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fv")) == NULL) || r; - r = ((glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)glewGetProcAddress((const GLubyte*)"glUseProgramStages")) == NULL) || r; - r = ((glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramPipeline")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_separate_shader_objects */ - -#ifdef GL_ARB_shader_atomic_counters - -static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAtomicCounterBufferiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_atomic_counters */ - -#ifdef GL_ARB_shader_bit_encoding - -#endif /* GL_ARB_shader_bit_encoding */ - -#ifdef GL_ARB_shader_draw_parameters - -#endif /* GL_ARB_shader_draw_parameters */ - -#ifdef GL_ARB_shader_group_vote - -#endif /* GL_ARB_shader_group_vote */ - -#ifdef GL_ARB_shader_image_load_store - -static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glBindImageTexture")) == NULL) || r; - r = ((glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrier")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_image_load_store */ - -#ifdef GL_ARB_shader_image_size - -#endif /* GL_ARB_shader_image_size */ - -#ifdef GL_ARB_shader_objects - -static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glAttachObjectARB")) == NULL) || r; - r = ((glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderARB")) == NULL) || r; - r = ((glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateProgramObjectARB")) == NULL) || r; - r = ((glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderObjectARB")) == NULL) || r; - r = ((glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteObjectARB")) == NULL) || r; - r = ((glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDetachObjectARB")) == NULL) || r; - r = ((glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformARB")) == NULL) || r; - r = ((glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedObjectsARB")) == NULL) || r; - r = ((glGetHandleARB = (PFNGLGETHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetHandleARB")) == NULL) || r; - r = ((glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetInfoLogARB")) == NULL) || r; - r = ((glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterfvARB")) == NULL) || r; - r = ((glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivARB")) == NULL) || r; - r = ((glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSourceARB")) == NULL) || r; - r = ((glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocationARB")) == NULL) || r; - r = ((glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfvARB")) == NULL) || r; - r = ((glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformivARB")) == NULL) || r; - r = ((glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glLinkProgramARB")) == NULL) || r; - r = ((glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glShaderSourceARB")) == NULL) || r; - r = ((glUniform1fARB = (PFNGLUNIFORM1FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fARB")) == NULL) || r; - r = ((glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fvARB")) == NULL) || r; - r = ((glUniform1iARB = (PFNGLUNIFORM1IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1iARB")) == NULL) || r; - r = ((glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1ivARB")) == NULL) || r; - r = ((glUniform2fARB = (PFNGLUNIFORM2FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fARB")) == NULL) || r; - r = ((glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fvARB")) == NULL) || r; - r = ((glUniform2iARB = (PFNGLUNIFORM2IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2iARB")) == NULL) || r; - r = ((glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2ivARB")) == NULL) || r; - r = ((glUniform3fARB = (PFNGLUNIFORM3FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fARB")) == NULL) || r; - r = ((glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fvARB")) == NULL) || r; - r = ((glUniform3iARB = (PFNGLUNIFORM3IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3iARB")) == NULL) || r; - r = ((glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3ivARB")) == NULL) || r; - r = ((glUniform4fARB = (PFNGLUNIFORM4FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fARB")) == NULL) || r; - r = ((glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fvARB")) == NULL) || r; - r = ((glUniform4iARB = (PFNGLUNIFORM4IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4iARB")) == NULL) || r; - r = ((glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4ivARB")) == NULL) || r; - r = ((glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fvARB")) == NULL) || r; - r = ((glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fvARB")) == NULL) || r; - r = ((glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fvARB")) == NULL) || r; - r = ((glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glUseProgramObjectARB")) == NULL) || r; - r = ((glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_objects */ - -#ifdef GL_ARB_shader_precision - -#endif /* GL_ARB_shader_precision */ - -#ifdef GL_ARB_shader_stencil_export - -#endif /* GL_ARB_shader_stencil_export */ - -#ifdef GL_ARB_shader_storage_buffer_object - -static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glShaderStorageBlockBinding")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_storage_buffer_object */ - -#ifdef GL_ARB_shader_subroutine - -static GLboolean _glewInit_GL_ARB_shader_subroutine (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineName")) == NULL) || r; - r = ((glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformName")) == NULL) || r; - r = ((glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformiv")) == NULL) || r; - r = ((glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStageiv")) == NULL) || r; - r = ((glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineIndex")) == NULL) || r; - r = ((glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineUniformLocation")) == NULL) || r; - r = ((glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformSubroutineuiv")) == NULL) || r; - r = ((glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)glewGetProcAddress((const GLubyte*)"glUniformSubroutinesuiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_subroutine */ - -#ifdef GL_ARB_shader_texture_lod - -#endif /* GL_ARB_shader_texture_lod */ - -#ifdef GL_ARB_shading_language_100 - -#endif /* GL_ARB_shading_language_100 */ - -#ifdef GL_ARB_shading_language_420pack - -#endif /* GL_ARB_shading_language_420pack */ - -#ifdef GL_ARB_shading_language_include - -static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderIncludeARB")) == NULL) || r; - r = ((glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamedStringARB")) == NULL) || r; - r = ((glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringARB")) == NULL) || r; - r = ((glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringivARB")) == NULL) || r; - r = ((glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glIsNamedStringARB")) == NULL) || r; - r = ((glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glNamedStringARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shading_language_include */ - -#ifdef GL_ARB_shading_language_packing - -#endif /* GL_ARB_shading_language_packing */ - -#ifdef GL_ARB_shadow - -#endif /* GL_ARB_shadow */ - -#ifdef GL_ARB_shadow_ambient - -#endif /* GL_ARB_shadow_ambient */ - -#ifdef GL_ARB_sparse_texture - -static GLboolean _glewInit_GL_ARB_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC)glewGetProcAddress((const GLubyte*)"glTexPageCommitmentARB")) == NULL) || r; - r = ((glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glTexturePageCommitmentEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sparse_texture */ - -#ifdef GL_ARB_stencil_texturing - -#endif /* GL_ARB_stencil_texturing */ - -#ifdef GL_ARB_sync - -static GLboolean _glewInit_GL_ARB_sync (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glClientWaitSync")) == NULL) || r; - r = ((glDeleteSync = (PFNGLDELETESYNCPROC)glewGetProcAddress((const GLubyte*)"glDeleteSync")) == NULL) || r; - r = ((glFenceSync = (PFNGLFENCESYNCPROC)glewGetProcAddress((const GLubyte*)"glFenceSync")) == NULL) || r; - r = ((glGetInteger64v = (PFNGLGETINTEGER64VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64v")) == NULL) || r; - r = ((glGetSynciv = (PFNGLGETSYNCIVPROC)glewGetProcAddress((const GLubyte*)"glGetSynciv")) == NULL) || r; - r = ((glIsSync = (PFNGLISSYNCPROC)glewGetProcAddress((const GLubyte*)"glIsSync")) == NULL) || r; - r = ((glWaitSync = (PFNGLWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glWaitSync")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sync */ - -#ifdef GL_ARB_tessellation_shader - -static GLboolean _glewInit_GL_ARB_tessellation_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPatchParameterfv")) == NULL) || r; - r = ((glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPatchParameteri")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_tessellation_shader */ - -#ifdef GL_ARB_texture_border_clamp - -#endif /* GL_ARB_texture_border_clamp */ - -#ifdef GL_ARB_texture_buffer_object - -static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferARB = (PFNGLTEXBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glTexBufferARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_buffer_object */ - -#ifdef GL_ARB_texture_buffer_object_rgb32 - -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -#ifdef GL_ARB_texture_buffer_range - -static GLboolean _glewInit_GL_ARB_texture_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glTexBufferRange")) == NULL) || r; - r = ((glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferRangeEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_buffer_range */ - -#ifdef GL_ARB_texture_compression - -static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1DARB")) == NULL) || r; - r = ((glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2DARB")) == NULL) || r; - r = ((glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3DARB")) == NULL) || r; - r = ((glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1DARB")) == NULL) || r; - r = ((glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2DARB")) == NULL) || r; - r = ((glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3DARB")) == NULL) || r; - r = ((glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImageARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_compression */ - -#ifdef GL_ARB_texture_compression_bptc - -#endif /* GL_ARB_texture_compression_bptc */ - -#ifdef GL_ARB_texture_compression_rgtc - -#endif /* GL_ARB_texture_compression_rgtc */ - -#ifdef GL_ARB_texture_cube_map - -#endif /* GL_ARB_texture_cube_map */ - -#ifdef GL_ARB_texture_cube_map_array - -#endif /* GL_ARB_texture_cube_map_array */ - -#ifdef GL_ARB_texture_env_add - -#endif /* GL_ARB_texture_env_add */ - -#ifdef GL_ARB_texture_env_combine - -#endif /* GL_ARB_texture_env_combine */ - -#ifdef GL_ARB_texture_env_crossbar - -#endif /* GL_ARB_texture_env_crossbar */ - -#ifdef GL_ARB_texture_env_dot3 - -#endif /* GL_ARB_texture_env_dot3 */ - -#ifdef GL_ARB_texture_float - -#endif /* GL_ARB_texture_float */ - -#ifdef GL_ARB_texture_gather - -#endif /* GL_ARB_texture_gather */ - -#ifdef GL_ARB_texture_mirror_clamp_to_edge - -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -#ifdef GL_ARB_texture_mirrored_repeat - -#endif /* GL_ARB_texture_mirrored_repeat */ - -#ifdef GL_ARB_texture_multisample - -static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefv")) == NULL) || r; - r = ((glSampleMaski = (PFNGLSAMPLEMASKIPROC)glewGetProcAddress((const GLubyte*)"glSampleMaski")) == NULL) || r; - r = ((glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisample")) == NULL) || r; - r = ((glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisample")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_multisample */ - -#ifdef GL_ARB_texture_non_power_of_two - -#endif /* GL_ARB_texture_non_power_of_two */ - -#ifdef GL_ARB_texture_query_levels - -#endif /* GL_ARB_texture_query_levels */ - -#ifdef GL_ARB_texture_query_lod - -#endif /* GL_ARB_texture_query_lod */ - -#ifdef GL_ARB_texture_rectangle - -#endif /* GL_ARB_texture_rectangle */ - -#ifdef GL_ARB_texture_rg - -#endif /* GL_ARB_texture_rg */ - -#ifdef GL_ARB_texture_rgb10_a2ui - -#endif /* GL_ARB_texture_rgb10_a2ui */ - -#ifdef GL_ARB_texture_stencil8 - -#endif /* GL_ARB_texture_stencil8 */ - -#ifdef GL_ARB_texture_storage - -static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage1D")) == NULL) || r; - r = ((glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2D")) == NULL) || r; - r = ((glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3D")) == NULL) || r; - r = ((glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage1DEXT")) == NULL) || r; - r = ((glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DEXT")) == NULL) || r; - r = ((glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_storage */ - -#ifdef GL_ARB_texture_storage_multisample - -static GLboolean _glewInit_GL_ARB_texture_storage_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2DMultisample")) == NULL) || r; - r = ((glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3DMultisample")) == NULL) || r; - r = ((glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DMultisampleEXT")) == NULL) || r; - r = ((glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DMultisampleEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_storage_multisample */ - -#ifdef GL_ARB_texture_swizzle - -#endif /* GL_ARB_texture_swizzle */ - -#ifdef GL_ARB_texture_view - -static GLboolean _glewInit_GL_ARB_texture_view (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureView = (PFNGLTEXTUREVIEWPROC)glewGetProcAddress((const GLubyte*)"glTextureView")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_view */ - -#ifdef GL_ARB_timer_query - -static GLboolean _glewInit_GL_ARB_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64v")) == NULL) || r; - r = ((glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64v")) == NULL) || r; - r = ((glQueryCounter = (PFNGLQUERYCOUNTERPROC)glewGetProcAddress((const GLubyte*)"glQueryCounter")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_timer_query */ - -#ifdef GL_ARB_transform_feedback2 - -static GLboolean _glewInit_GL_ARB_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedback")) == NULL) || r; - r = ((glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacks")) == NULL) || r; - r = ((glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedback")) == NULL) || r; - r = ((glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacks")) == NULL) || r; - r = ((glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedback")) == NULL) || r; - r = ((glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedback")) == NULL) || r; - r = ((glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedback")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback2 */ - -#ifdef GL_ARB_transform_feedback3 - -static GLboolean _glewInit_GL_ARB_transform_feedback3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryIndexed")) == NULL) || r; - r = ((glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStream")) == NULL) || r; - r = ((glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glEndQueryIndexed")) == NULL) || r; - r = ((glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryIndexediv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback3 */ - -#ifdef GL_ARB_transform_feedback_instanced - -static GLboolean _glewInit_GL_ARB_transform_feedback_instanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackInstanced")) == NULL) || r; - r = ((glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStreamInstanced")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback_instanced */ - -#ifdef GL_ARB_transpose_matrix - -static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixdARB")) == NULL) || r; - r = ((glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixfARB")) == NULL) || r; - r = ((glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixdARB")) == NULL) || r; - r = ((glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixfARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transpose_matrix */ - -#ifdef GL_ARB_uniform_buffer_object - -static GLboolean _glewInit_GL_ARB_uniform_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBase")) == NULL) || r; - r = ((glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRange")) == NULL) || r; - r = ((glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockName")) == NULL) || r; - r = ((glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockiv")) == NULL) || r; - r = ((glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformName")) == NULL) || r; - r = ((glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformsiv")) == NULL) || r; - r = ((glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)glewGetProcAddress((const GLubyte*)"glGetIntegeri_v")) == NULL) || r; - r = ((glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBlockIndex")) == NULL) || r; - r = ((glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)glewGetProcAddress((const GLubyte*)"glGetUniformIndices")) == NULL) || r; - r = ((glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glUniformBlockBinding")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_uniform_buffer_object */ - -#ifdef GL_ARB_vertex_array_bgra - -#endif /* GL_ARB_vertex_array_bgra */ - -#ifdef GL_ARB_vertex_array_object - -static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArray")) == NULL) || r; - r = ((glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArrays")) == NULL) || r; - r = ((glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArrays")) == NULL) || r; - r = ((glIsVertexArray = (PFNGLISVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArray")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_array_object */ - -#ifdef GL_ARB_vertex_attrib_64bit - -static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdv")) == NULL) || r; - r = ((glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1d")) == NULL) || r; - r = ((glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dv")) == NULL) || r; - r = ((glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2d")) == NULL) || r; - r = ((glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dv")) == NULL) || r; - r = ((glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3d")) == NULL) || r; - r = ((glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dv")) == NULL) || r; - r = ((glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4d")) == NULL) || r; - r = ((glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dv")) == NULL) || r; - r = ((glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_attrib_64bit */ - -#ifdef GL_ARB_vertex_attrib_binding - -static GLboolean _glewInit_GL_ARB_vertex_attrib_binding (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffer")) == NULL) || r; - r = ((glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribBinding")) == NULL) || r; - r = ((glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormat")) == NULL) || r; - r = ((glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormat")) == NULL) || r; - r = ((glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormat")) == NULL) || r; - r = ((glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexBindingDivisor")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_attrib_binding */ - -#ifdef GL_ARB_vertex_blend - -static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendARB")) == NULL) || r; - r = ((glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glWeightPointerARB")) == NULL) || r; - r = ((glWeightbvARB = (PFNGLWEIGHTBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightbvARB")) == NULL) || r; - r = ((glWeightdvARB = (PFNGLWEIGHTDVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightdvARB")) == NULL) || r; - r = ((glWeightfvARB = (PFNGLWEIGHTFVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightfvARB")) == NULL) || r; - r = ((glWeightivARB = (PFNGLWEIGHTIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightivARB")) == NULL) || r; - r = ((glWeightsvARB = (PFNGLWEIGHTSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightsvARB")) == NULL) || r; - r = ((glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightubvARB")) == NULL) || r; - r = ((glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightuivARB")) == NULL) || r; - r = ((glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightusvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_blend */ - -#ifdef GL_ARB_vertex_buffer_object - -static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBufferARB = (PFNGLBINDBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glBindBufferARB")) == NULL) || r; - r = ((glBufferDataARB = (PFNGLBUFFERDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferDataARB")) == NULL) || r; - r = ((glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferSubDataARB")) == NULL) || r; - r = ((glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffersARB")) == NULL) || r; - r = ((glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glGenBuffersARB")) == NULL) || r; - r = ((glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterivARB")) == NULL) || r; - r = ((glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointervARB")) == NULL) || r; - r = ((glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubDataARB")) == NULL) || r; - r = ((glIsBufferARB = (PFNGLISBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glIsBufferARB")) == NULL) || r; - r = ((glMapBufferARB = (PFNGLMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glMapBufferARB")) == NULL) || r; - r = ((glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glUnmapBufferARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_buffer_object */ - -#ifdef GL_ARB_vertex_program - -static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glBindProgramARB")) == NULL) || r; - r = ((glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsARB")) == NULL) || r; - r = ((glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArrayARB")) == NULL) || r; - r = ((glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArrayARB")) == NULL) || r; - r = ((glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsARB")) == NULL) || r; - r = ((glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterdvARB")) == NULL) || r; - r = ((glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterfvARB")) == NULL) || r; - r = ((glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterdvARB")) == NULL) || r; - r = ((glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterfvARB")) == NULL) || r; - r = ((glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringARB")) == NULL) || r; - r = ((glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivARB")) == NULL) || r; - r = ((glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervARB")) == NULL) || r; - r = ((glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvARB")) == NULL) || r; - r = ((glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvARB")) == NULL) || r; - r = ((glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivARB")) == NULL) || r; - r = ((glIsProgramARB = (PFNGLISPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glIsProgramARB")) == NULL) || r; - r = ((glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dARB")) == NULL) || r; - r = ((glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dvARB")) == NULL) || r; - r = ((glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fARB")) == NULL) || r; - r = ((glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fvARB")) == NULL) || r; - r = ((glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dARB")) == NULL) || r; - r = ((glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dvARB")) == NULL) || r; - r = ((glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fARB")) == NULL) || r; - r = ((glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fvARB")) == NULL) || r; - r = ((glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glProgramStringARB")) == NULL) || r; - r = ((glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dARB")) == NULL) || r; - r = ((glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvARB")) == NULL) || r; - r = ((glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fARB")) == NULL) || r; - r = ((glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvARB")) == NULL) || r; - r = ((glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sARB")) == NULL) || r; - r = ((glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svARB")) == NULL) || r; - r = ((glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dARB")) == NULL) || r; - r = ((glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvARB")) == NULL) || r; - r = ((glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fARB")) == NULL) || r; - r = ((glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvARB")) == NULL) || r; - r = ((glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sARB")) == NULL) || r; - r = ((glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svARB")) == NULL) || r; - r = ((glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dARB")) == NULL) || r; - r = ((glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvARB")) == NULL) || r; - r = ((glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fARB")) == NULL) || r; - r = ((glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvARB")) == NULL) || r; - r = ((glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sARB")) == NULL) || r; - r = ((glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svARB")) == NULL) || r; - r = ((glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NbvARB")) == NULL) || r; - r = ((glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NivARB")) == NULL) || r; - r = ((glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NsvARB")) == NULL) || r; - r = ((glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubARB")) == NULL) || r; - r = ((glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubvARB")) == NULL) || r; - r = ((glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NuivARB")) == NULL) || r; - r = ((glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NusvARB")) == NULL) || r; - r = ((glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bvARB")) == NULL) || r; - r = ((glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dARB")) == NULL) || r; - r = ((glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvARB")) == NULL) || r; - r = ((glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fARB")) == NULL) || r; - r = ((glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvARB")) == NULL) || r; - r = ((glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ivARB")) == NULL) || r; - r = ((glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sARB")) == NULL) || r; - r = ((glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svARB")) == NULL) || r; - r = ((glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvARB")) == NULL) || r; - r = ((glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uivARB")) == NULL) || r; - r = ((glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usvARB")) == NULL) || r; - r = ((glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_program */ - -#ifdef GL_ARB_vertex_shader - -static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocationARB")) == NULL) || r; - r = ((glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttribARB")) == NULL) || r; - r = ((glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocationARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_shader */ - -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - -static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorP3ui = (PFNGLCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glColorP3ui")) == NULL) || r; - r = ((glColorP3uiv = (PFNGLCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP3uiv")) == NULL) || r; - r = ((glColorP4ui = (PFNGLCOLORP4UIPROC)glewGetProcAddress((const GLubyte*)"glColorP4ui")) == NULL) || r; - r = ((glColorP4uiv = (PFNGLCOLORP4UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP4uiv")) == NULL) || r; - r = ((glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1ui")) == NULL) || r; - r = ((glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1uiv")) == NULL) || r; - r = ((glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2ui")) == NULL) || r; - r = ((glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2uiv")) == NULL) || r; - r = ((glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3ui")) == NULL) || r; - r = ((glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3uiv")) == NULL) || r; - r = ((glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4ui")) == NULL) || r; - r = ((glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4uiv")) == NULL) || r; - r = ((glNormalP3ui = (PFNGLNORMALP3UIPROC)glewGetProcAddress((const GLubyte*)"glNormalP3ui")) == NULL) || r; - r = ((glNormalP3uiv = (PFNGLNORMALP3UIVPROC)glewGetProcAddress((const GLubyte*)"glNormalP3uiv")) == NULL) || r; - r = ((glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3ui")) == NULL) || r; - r = ((glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3uiv")) == NULL) || r; - r = ((glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1ui")) == NULL) || r; - r = ((glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1uiv")) == NULL) || r; - r = ((glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2ui")) == NULL) || r; - r = ((glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2uiv")) == NULL) || r; - r = ((glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3ui")) == NULL) || r; - r = ((glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3uiv")) == NULL) || r; - r = ((glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4ui")) == NULL) || r; - r = ((glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4uiv")) == NULL) || r; - r = ((glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1ui")) == NULL) || r; - r = ((glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1uiv")) == NULL) || r; - r = ((glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2ui")) == NULL) || r; - r = ((glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2uiv")) == NULL) || r; - r = ((glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3ui")) == NULL) || r; - r = ((glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3uiv")) == NULL) || r; - r = ((glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4ui")) == NULL) || r; - r = ((glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4uiv")) == NULL) || r; - r = ((glVertexP2ui = (PFNGLVERTEXP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP2ui")) == NULL) || r; - r = ((glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP2uiv")) == NULL) || r; - r = ((glVertexP3ui = (PFNGLVERTEXP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP3ui")) == NULL) || r; - r = ((glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP3uiv")) == NULL) || r; - r = ((glVertexP4ui = (PFNGLVERTEXP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP4ui")) == NULL) || r; - r = ((glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP4uiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -#ifdef GL_ARB_viewport_array - -static GLboolean _glewInit_GL_ARB_viewport_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeArrayv")) == NULL) || r; - r = ((glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeIndexed")) == NULL) || r; - r = ((glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_v")) == NULL) || r; - r = ((glGetFloati_v = (PFNGLGETFLOATI_VPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_v")) == NULL) || r; - r = ((glScissorArrayv = (PFNGLSCISSORARRAYVPROC)glewGetProcAddress((const GLubyte*)"glScissorArrayv")) == NULL) || r; - r = ((glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexed")) == NULL) || r; - r = ((glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexedv")) == NULL) || r; - r = ((glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)glewGetProcAddress((const GLubyte*)"glViewportArrayv")) == NULL) || r; - r = ((glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedf")) == NULL) || r; - r = ((glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedfv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_viewport_array */ - -#ifdef GL_ARB_window_pos - -static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dARB")) == NULL) || r; - r = ((glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvARB")) == NULL) || r; - r = ((glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fARB")) == NULL) || r; - r = ((glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvARB")) == NULL) || r; - r = ((glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iARB")) == NULL) || r; - r = ((glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivARB")) == NULL) || r; - r = ((glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sARB")) == NULL) || r; - r = ((glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svARB")) == NULL) || r; - r = ((glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dARB")) == NULL) || r; - r = ((glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvARB")) == NULL) || r; - r = ((glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fARB")) == NULL) || r; - r = ((glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvARB")) == NULL) || r; - r = ((glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iARB")) == NULL) || r; - r = ((glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivARB")) == NULL) || r; - r = ((glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sARB")) == NULL) || r; - r = ((glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_window_pos */ - -#ifdef GL_ATIX_point_sprites - -#endif /* GL_ATIX_point_sprites */ - -#ifdef GL_ATIX_texture_env_combine3 - -#endif /* GL_ATIX_texture_env_combine3 */ - -#ifdef GL_ATIX_texture_env_route - -#endif /* GL_ATIX_texture_env_route */ - -#ifdef GL_ATIX_vertex_shader_output_point_size - -#endif /* GL_ATIX_vertex_shader_output_point_size */ - -#ifdef GL_ATI_draw_buffers - -static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_draw_buffers */ - -#ifdef GL_ATI_element_array - -static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayATI")) == NULL) || r; - r = ((glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayATI")) == NULL) || r; - r = ((glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)glewGetProcAddress((const GLubyte*)"glElementPointerATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_element_array */ - -#ifdef GL_ATI_envmap_bumpmap - -static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterfvATI")) == NULL) || r; - r = ((glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterivATI")) == NULL) || r; - r = ((glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterfvATI")) == NULL) || r; - r = ((glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterivATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_envmap_bumpmap */ - -#ifdef GL_ATI_fragment_shader - -static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp1ATI")) == NULL) || r; - r = ((glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp2ATI")) == NULL) || r; - r = ((glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp3ATI")) == NULL) || r; - r = ((glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBeginFragmentShaderATI")) == NULL) || r; - r = ((glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBindFragmentShaderATI")) == NULL) || r; - r = ((glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp1ATI")) == NULL) || r; - r = ((glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp2ATI")) == NULL) || r; - r = ((glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp3ATI")) == NULL) || r; - r = ((glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glDeleteFragmentShaderATI")) == NULL) || r; - r = ((glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glEndFragmentShaderATI")) == NULL) || r; - r = ((glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)glewGetProcAddress((const GLubyte*)"glGenFragmentShadersATI")) == NULL) || r; - r = ((glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)glewGetProcAddress((const GLubyte*)"glPassTexCoordATI")) == NULL) || r; - r = ((glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)glewGetProcAddress((const GLubyte*)"glSampleMapATI")) == NULL) || r; - r = ((glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)glewGetProcAddress((const GLubyte*)"glSetFragmentShaderConstantATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_fragment_shader */ - -#ifdef GL_ATI_map_object_buffer - -static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glMapObjectBufferATI")) == NULL) || r; - r = ((glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUnmapObjectBufferATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_map_object_buffer */ - -#ifdef GL_ATI_meminfo - -#endif /* GL_ATI_meminfo */ - -#ifdef GL_ATI_pn_triangles - -static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesfATI")) == NULL) || r; - r = ((glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesiATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_pn_triangles */ - -#ifdef GL_ATI_separate_stencil - -static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparateATI")) == NULL) || r; - r = ((glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparateATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_separate_stencil */ - -#ifdef GL_ATI_shader_texture_lod - -#endif /* GL_ATI_shader_texture_lod */ - -#ifdef GL_ATI_text_fragment_shader - -#endif /* GL_ATI_text_fragment_shader */ - -#ifdef GL_ATI_texture_compression_3dc - -#endif /* GL_ATI_texture_compression_3dc */ - -#ifdef GL_ATI_texture_env_combine3 - -#endif /* GL_ATI_texture_env_combine3 */ - -#ifdef GL_ATI_texture_float - -#endif /* GL_ATI_texture_float */ - -#ifdef GL_ATI_texture_mirror_once - -#endif /* GL_ATI_texture_mirror_once */ - -#ifdef GL_ATI_vertex_array_object - -static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glArrayObjectATI")) == NULL) || r; - r = ((glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glFreeObjectBufferATI")) == NULL) || r; - r = ((glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectfvATI")) == NULL) || r; - r = ((glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectivATI")) == NULL) || r; - r = ((glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferfvATI")) == NULL) || r; - r = ((glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferivATI")) == NULL) || r; - r = ((glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectfvATI")) == NULL) || r; - r = ((glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectivATI")) == NULL) || r; - r = ((glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glIsObjectBufferATI")) == NULL) || r; - r = ((glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glNewObjectBufferATI")) == NULL) || r; - r = ((glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUpdateObjectBufferATI")) == NULL) || r; - r = ((glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVariantArrayObjectATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_array_object */ - -#ifdef GL_ATI_vertex_attrib_array_object - -static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectfvATI")) == NULL) || r; - r = ((glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectivATI")) == NULL) || r; - r = ((glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribArrayObjectATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_attrib_array_object */ - -#ifdef GL_ATI_vertex_streams - -static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)glewGetProcAddress((const GLubyte*)"glClientActiveVertexStreamATI")) == NULL) || r; - r = ((glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bATI")) == NULL) || r; - r = ((glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bvATI")) == NULL) || r; - r = ((glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dATI")) == NULL) || r; - r = ((glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dvATI")) == NULL) || r; - r = ((glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fATI")) == NULL) || r; - r = ((glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fvATI")) == NULL) || r; - r = ((glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3iATI")) == NULL) || r; - r = ((glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3ivATI")) == NULL) || r; - r = ((glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3sATI")) == NULL) || r; - r = ((glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3svATI")) == NULL) || r; - r = ((glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnvfATI")) == NULL) || r; - r = ((glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnviATI")) == NULL) || r; - r = ((glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dATI")) == NULL) || r; - r = ((glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dvATI")) == NULL) || r; - r = ((glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fATI")) == NULL) || r; - r = ((glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fvATI")) == NULL) || r; - r = ((glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1iATI")) == NULL) || r; - r = ((glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1ivATI")) == NULL) || r; - r = ((glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1sATI")) == NULL) || r; - r = ((glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1svATI")) == NULL) || r; - r = ((glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dATI")) == NULL) || r; - r = ((glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dvATI")) == NULL) || r; - r = ((glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fATI")) == NULL) || r; - r = ((glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fvATI")) == NULL) || r; - r = ((glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2iATI")) == NULL) || r; - r = ((glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2ivATI")) == NULL) || r; - r = ((glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2sATI")) == NULL) || r; - r = ((glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2svATI")) == NULL) || r; - r = ((glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dATI")) == NULL) || r; - r = ((glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dvATI")) == NULL) || r; - r = ((glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fATI")) == NULL) || r; - r = ((glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fvATI")) == NULL) || r; - r = ((glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3iATI")) == NULL) || r; - r = ((glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3ivATI")) == NULL) || r; - r = ((glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3sATI")) == NULL) || r; - r = ((glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3svATI")) == NULL) || r; - r = ((glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dATI")) == NULL) || r; - r = ((glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dvATI")) == NULL) || r; - r = ((glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fATI")) == NULL) || r; - r = ((glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fvATI")) == NULL) || r; - r = ((glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4iATI")) == NULL) || r; - r = ((glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4ivATI")) == NULL) || r; - r = ((glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4sATI")) == NULL) || r; - r = ((glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4svATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_streams */ - -#ifdef GL_EXT_422_pixels - -#endif /* GL_EXT_422_pixels */ - -#ifdef GL_EXT_Cg_shader - -#endif /* GL_EXT_Cg_shader */ - -#ifdef GL_EXT_abgr - -#endif /* GL_EXT_abgr */ - -#ifdef GL_EXT_bgra - -#endif /* GL_EXT_bgra */ - -#ifdef GL_EXT_bindable_uniform - -static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBufferSizeEXT")) == NULL) || r; - r = ((glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformOffsetEXT")) == NULL) || r; - r = ((glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUniformBufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_bindable_uniform */ - -#ifdef GL_EXT_blend_color - -static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)glewGetProcAddress((const GLubyte*)"glBlendColorEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_color */ - -#ifdef GL_EXT_blend_equation_separate - -static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_equation_separate */ - -#ifdef GL_EXT_blend_func_separate - -static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_func_separate */ - -#ifdef GL_EXT_blend_logic_op - -#endif /* GL_EXT_blend_logic_op */ - -#ifdef GL_EXT_blend_minmax - -static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_minmax */ - -#ifdef GL_EXT_blend_subtract - -#endif /* GL_EXT_blend_subtract */ - -#ifdef GL_EXT_clip_volume_hint - -#endif /* GL_EXT_clip_volume_hint */ - -#ifdef GL_EXT_cmyka - -#endif /* GL_EXT_cmyka */ - -#ifdef GL_EXT_color_subtable - -static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorSubTableEXT")) == NULL) || r; - r = ((glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTableEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_color_subtable */ - -#ifdef GL_EXT_compiled_vertex_array - -static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glLockArraysEXT")) == NULL) || r; - r = ((glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glUnlockArraysEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_compiled_vertex_array */ - -#ifdef GL_EXT_convolution - -static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1DEXT")) == NULL) || r; - r = ((glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2DEXT")) == NULL) || r; - r = ((glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfEXT")) == NULL) || r; - r = ((glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfvEXT")) == NULL) || r; - r = ((glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriEXT")) == NULL) || r; - r = ((glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterivEXT")) == NULL) || r; - r = ((glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1DEXT")) == NULL) || r; - r = ((glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2DEXT")) == NULL) || r; - r = ((glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilterEXT")) == NULL) || r; - r = ((glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfvEXT")) == NULL) || r; - r = ((glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterivEXT")) == NULL) || r; - r = ((glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilterEXT")) == NULL) || r; - r = ((glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_convolution */ - -#ifdef GL_EXT_coordinate_frame - -static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glBinormalPointerEXT")) == NULL) || r; - r = ((glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTangentPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_coordinate_frame */ - -#ifdef GL_EXT_copy_texture - -static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage1DEXT")) == NULL) || r; - r = ((glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage2DEXT")) == NULL) || r; - r = ((glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage1DEXT")) == NULL) || r; - r = ((glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage2DEXT")) == NULL) || r; - r = ((glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_copy_texture */ - -#ifdef GL_EXT_cull_vertex - -static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterdvEXT")) == NULL) || r; - r = ((glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_cull_vertex */ - -#ifdef GL_EXT_debug_marker - -static GLboolean _glewInit_GL_EXT_debug_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glInsertEventMarkerEXT")) == NULL) || r; - r = ((glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPopGroupMarkerEXT")) == NULL) || r; - r = ((glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPushGroupMarkerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_debug_marker */ - -#ifdef GL_EXT_depth_bounds_test - -static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_depth_bounds_test */ - -#ifdef GL_EXT_direct_state_access - -static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindMultiTextureEXT")) == NULL) || r; - r = ((glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckNamedFramebufferStatusEXT")) == NULL) || r; - r = ((glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glClientAttribDefaultEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage1DEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage2DEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage3DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage1DEXT")) == NULL) || r; - r = ((glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage2DEXT")) == NULL) || r; - r = ((glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage3DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage1DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage2DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage3DEXT")) == NULL) || r; - r = ((glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage1DEXT")) == NULL) || r; - r = ((glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage2DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage1DEXT")) == NULL) || r; - r = ((glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage2DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage1DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage2DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage3DEXT")) == NULL) || r; - r = ((glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateIndexedEXT")) == NULL) || r; - r = ((glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateiEXT")) == NULL) || r; - r = ((glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayAttribEXT")) == NULL) || r; - r = ((glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayEXT")) == NULL) || r; - r = ((glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateIndexedEXT")) == NULL) || r; - r = ((glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateiEXT")) == NULL) || r; - r = ((glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayAttribEXT")) == NULL) || r; - r = ((glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayEXT")) == NULL) || r; - r = ((glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedNamedBufferRangeEXT")) == NULL) || r; - r = ((glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBufferEXT")) == NULL) || r; - r = ((glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBuffersEXT")) == NULL) || r; - r = ((glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferReadBufferEXT")) == NULL) || r; - r = ((glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMultiTexMipmapEXT")) == NULL) || r; - r = ((glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateTextureMipmapEXT")) == NULL) || r; - r = ((glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedMultiTexImageEXT")) == NULL) || r; - r = ((glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTextureImageEXT")) == NULL) || r; - r = ((glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoubleIndexedvEXT")) == NULL) || r; - r = ((glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_vEXT")) == NULL) || r; - r = ((glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloatIndexedvEXT")) == NULL) || r; - r = ((glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_vEXT")) == NULL) || r; - r = ((glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameterivEXT")) == NULL) || r; - r = ((glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvfvEXT")) == NULL) || r; - r = ((glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvivEXT")) == NULL) || r; - r = ((glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGendvEXT")) == NULL) || r; - r = ((glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenfvEXT")) == NULL) || r; - r = ((glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenivEXT")) == NULL) || r; - r = ((glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexImageEXT")) == NULL) || r; - r = ((glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterfvEXT")) == NULL) || r; - r = ((glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIuivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterfvEXT")) == NULL) || r; - r = ((glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterivEXT")) == NULL) || r; - r = ((glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterivEXT")) == NULL) || r; - r = ((glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferPointervEXT")) == NULL) || r; - r = ((glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferSubDataEXT")) == NULL) || r; - r = ((glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferAttachmentParameterivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIuivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterdvEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterfvEXT")) == NULL) || r; - r = ((glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramStringEXT")) == NULL) || r; - r = ((glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramivEXT")) == NULL) || r; - r = ((glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedRenderbufferParameterivEXT")) == NULL) || r; - r = ((glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointerIndexedvEXT")) == NULL) || r; - r = ((glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointeri_vEXT")) == NULL) || r; - r = ((glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureImageEXT")) == NULL) || r; - r = ((glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterfvEXT")) == NULL) || r; - r = ((glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterivEXT")) == NULL) || r; - r = ((glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIivEXT")) == NULL) || r; - r = ((glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIuivEXT")) == NULL) || r; - r = ((glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterfvEXT")) == NULL) || r; - r = ((glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterivEXT")) == NULL) || r; - r = ((glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegeri_vEXT")) == NULL) || r; - r = ((glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegervEXT")) == NULL) || r; - r = ((glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointeri_vEXT")) == NULL) || r; - r = ((glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointervEXT")) == NULL) || r; - r = ((glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferEXT")) == NULL) || r; - r = ((glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferRangeEXT")) == NULL) || r; - r = ((glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixFrustumEXT")) == NULL) || r; - r = ((glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadIdentityEXT")) == NULL) || r; - r = ((glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposedEXT")) == NULL) || r; - r = ((glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposefEXT")) == NULL) || r; - r = ((glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoaddEXT")) == NULL) || r; - r = ((glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadfEXT")) == NULL) || r; - r = ((glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposedEXT")) == NULL) || r; - r = ((glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposefEXT")) == NULL) || r; - r = ((glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultdEXT")) == NULL) || r; - r = ((glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultfEXT")) == NULL) || r; - r = ((glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixOrthoEXT")) == NULL) || r; - r = ((glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPopEXT")) == NULL) || r; - r = ((glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPushEXT")) == NULL) || r; - r = ((glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatedEXT")) == NULL) || r; - r = ((glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatefEXT")) == NULL) || r; - r = ((glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScaledEXT")) == NULL) || r; - r = ((glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScalefEXT")) == NULL) || r; - r = ((glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatedEXT")) == NULL) || r; - r = ((glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatefEXT")) == NULL) || r; - r = ((glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexBufferEXT")) == NULL) || r; - r = ((glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordPointerEXT")) == NULL) || r; - r = ((glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfEXT")) == NULL) || r; - r = ((glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfvEXT")) == NULL) || r; - r = ((glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnviEXT")) == NULL) || r; - r = ((glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvivEXT")) == NULL) || r; - r = ((glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendEXT")) == NULL) || r; - r = ((glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendvEXT")) == NULL) || r; - r = ((glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfEXT")) == NULL) || r; - r = ((glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfvEXT")) == NULL) || r; - r = ((glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGeniEXT")) == NULL) || r; - r = ((glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenivEXT")) == NULL) || r; - r = ((glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage1DEXT")) == NULL) || r; - r = ((glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage2DEXT")) == NULL) || r; - r = ((glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage3DEXT")) == NULL) || r; - r = ((glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIivEXT")) == NULL) || r; - r = ((glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIuivEXT")) == NULL) || r; - r = ((glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfEXT")) == NULL) || r; - r = ((glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfvEXT")) == NULL) || r; - r = ((glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameteriEXT")) == NULL) || r; - r = ((glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterivEXT")) == NULL) || r; - r = ((glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexRenderbufferEXT")) == NULL) || r; - r = ((glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferDataEXT")) == NULL) || r; - r = ((glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferSubDataEXT")) == NULL) || r; - r = ((glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedCopyBufferSubDataEXT")) == NULL) || r; - r = ((glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferRenderbufferEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture1DEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture2DEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture3DEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureFaceEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureLayerEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4iEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4ivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uiEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameters4fvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4ivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4uivEXT")) == NULL) || r; - r = ((glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramStringEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleCoverageEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleEXT")) == NULL) || r; - r = ((glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fEXT")) == NULL) || r; - r = ((glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fvEXT")) == NULL) || r; - r = ((glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iEXT")) == NULL) || r; - r = ((glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ivEXT")) == NULL) || r; - r = ((glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiEXT")) == NULL) || r; - r = ((glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uivEXT")) == NULL) || r; - r = ((glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fEXT")) == NULL) || r; - r = ((glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fvEXT")) == NULL) || r; - r = ((glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iEXT")) == NULL) || r; - r = ((glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ivEXT")) == NULL) || r; - r = ((glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiEXT")) == NULL) || r; - r = ((glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uivEXT")) == NULL) || r; - r = ((glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fEXT")) == NULL) || r; - r = ((glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fvEXT")) == NULL) || r; - r = ((glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iEXT")) == NULL) || r; - r = ((glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ivEXT")) == NULL) || r; - r = ((glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiEXT")) == NULL) || r; - r = ((glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uivEXT")) == NULL) || r; - r = ((glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fEXT")) == NULL) || r; - r = ((glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fvEXT")) == NULL) || r; - r = ((glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iEXT")) == NULL) || r; - r = ((glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ivEXT")) == NULL) || r; - r = ((glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiEXT")) == NULL) || r; - r = ((glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uivEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fvEXT")) == NULL) || r; - r = ((glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glPushClientAttribDefaultEXT")) == NULL) || r; - r = ((glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferEXT")) == NULL) || r; - r = ((glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage1DEXT")) == NULL) || r; - r = ((glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DEXT")) == NULL) || r; - r = ((glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DEXT")) == NULL) || r; - r = ((glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIivEXT")) == NULL) || r; - r = ((glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIuivEXT")) == NULL) || r; - r = ((glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfEXT")) == NULL) || r; - r = ((glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfvEXT")) == NULL) || r; - r = ((glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameteriEXT")) == NULL) || r; - r = ((glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterivEXT")) == NULL) || r; - r = ((glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureRenderbufferEXT")) == NULL) || r; - r = ((glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage1DEXT")) == NULL) || r; - r = ((glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage2DEXT")) == NULL) || r; - r = ((glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage3DEXT")) == NULL) || r; - r = ((glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUnmapNamedBufferEXT")) == NULL) || r; - r = ((glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayColorOffsetEXT")) == NULL) || r; - r = ((glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayEdgeFlagOffsetEXT")) == NULL) || r; - r = ((glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayFogCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayIndexOffsetEXT")) == NULL) || r; - r = ((glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayMultiTexCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayNormalOffsetEXT")) == NULL) || r; - r = ((glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArraySecondaryColorOffsetEXT")) == NULL) || r; - r = ((glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayTexCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribIOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexOffsetEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_direct_state_access */ - -#ifdef GL_EXT_draw_buffers2 - -static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glColorMaskIndexedEXT")) == NULL) || r; - r = ((glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableIndexedEXT")) == NULL) || r; - r = ((glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableIndexedEXT")) == NULL) || r; - r = ((glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetBooleanIndexedvEXT")) == NULL) || r; - r = ((glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerIndexedvEXT")) == NULL) || r; - r = ((glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledIndexedEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_buffers2 */ - -#ifdef GL_EXT_draw_instanced - -static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedEXT")) == NULL) || r; - r = ((glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_instanced */ - -#ifdef GL_EXT_draw_range_elements - -static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_range_elements */ - -#ifdef GL_EXT_fog_coord - -static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerEXT")) == NULL) || r; - r = ((glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddEXT")) == NULL) || r; - r = ((glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddvEXT")) == NULL) || r; - r = ((glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfEXT")) == NULL) || r; - r = ((glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_fog_coord */ - -#ifdef GL_EXT_fragment_lighting - -static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFragmentColorMaterialEXT = (PFNGLFRAGMENTCOLORMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialEXT")) == NULL) || r; - r = ((glFragmentLightModelfEXT = (PFNGLFRAGMENTLIGHTMODELFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfEXT")) == NULL) || r; - r = ((glFragmentLightModelfvEXT = (PFNGLFRAGMENTLIGHTMODELFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvEXT")) == NULL) || r; - r = ((glFragmentLightModeliEXT = (PFNGLFRAGMENTLIGHTMODELIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliEXT")) == NULL) || r; - r = ((glFragmentLightModelivEXT = (PFNGLFRAGMENTLIGHTMODELIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivEXT")) == NULL) || r; - r = ((glFragmentLightfEXT = (PFNGLFRAGMENTLIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfEXT")) == NULL) || r; - r = ((glFragmentLightfvEXT = (PFNGLFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvEXT")) == NULL) || r; - r = ((glFragmentLightiEXT = (PFNGLFRAGMENTLIGHTIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiEXT")) == NULL) || r; - r = ((glFragmentLightivEXT = (PFNGLFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivEXT")) == NULL) || r; - r = ((glFragmentMaterialfEXT = (PFNGLFRAGMENTMATERIALFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfEXT")) == NULL) || r; - r = ((glFragmentMaterialfvEXT = (PFNGLFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvEXT")) == NULL) || r; - r = ((glFragmentMaterialiEXT = (PFNGLFRAGMENTMATERIALIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiEXT")) == NULL) || r; - r = ((glFragmentMaterialivEXT = (PFNGLFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivEXT")) == NULL) || r; - r = ((glGetFragmentLightfvEXT = (PFNGLGETFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvEXT")) == NULL) || r; - r = ((glGetFragmentLightivEXT = (PFNGLGETFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivEXT")) == NULL) || r; - r = ((glGetFragmentMaterialfvEXT = (PFNGLGETFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvEXT")) == NULL) || r; - r = ((glGetFragmentMaterialivEXT = (PFNGLGETFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivEXT")) == NULL) || r; - r = ((glLightEnviEXT = (PFNGLLIGHTENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glLightEnviEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_fragment_lighting */ - -#ifdef GL_EXT_framebuffer_blit - -static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_blit */ - -#ifdef GL_EXT_framebuffer_multisample - -static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_multisample */ - -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -#ifdef GL_EXT_framebuffer_object - -static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindFramebufferEXT")) == NULL) || r; - r = ((glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbufferEXT")) == NULL) || r; - r = ((glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatusEXT")) == NULL) || r; - r = ((glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffersEXT")) == NULL) || r; - r = ((glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffersEXT")) == NULL) || r; - r = ((glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbufferEXT")) == NULL) || r; - r = ((glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1DEXT")) == NULL) || r; - r = ((glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2DEXT")) == NULL) || r; - r = ((glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3DEXT")) == NULL) || r; - r = ((glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffersEXT")) == NULL) || r; - r = ((glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffersEXT")) == NULL) || r; - r = ((glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmapEXT")) == NULL) || r; - r = ((glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameterivEXT")) == NULL) || r; - r = ((glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameterivEXT")) == NULL) || r; - r = ((glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsFramebufferEXT")) == NULL) || r; - r = ((glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbufferEXT")) == NULL) || r; - r = ((glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_object */ - -#ifdef GL_EXT_framebuffer_sRGB - -#endif /* GL_EXT_framebuffer_sRGB */ - -#ifdef GL_EXT_geometry_shader4 - -static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureEXT")) == NULL) || r; - r = ((glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceEXT")) == NULL) || r; - r = ((glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_geometry_shader4 */ - -#ifdef GL_EXT_gpu_program_parameters - -static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameters4fvEXT")) == NULL) || r; - r = ((glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameters4fvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_gpu_program_parameters */ - -#ifdef GL_EXT_gpu_shader4 - -static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationEXT")) == NULL) || r; - r = ((glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocationEXT")) == NULL) || r; - r = ((glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuivEXT")) == NULL) || r; - r = ((glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIivEXT")) == NULL) || r; - r = ((glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuivEXT")) == NULL) || r; - r = ((glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiEXT")) == NULL) || r; - r = ((glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uivEXT")) == NULL) || r; - r = ((glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiEXT")) == NULL) || r; - r = ((glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uivEXT")) == NULL) || r; - r = ((glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiEXT")) == NULL) || r; - r = ((glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uivEXT")) == NULL) || r; - r = ((glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiEXT")) == NULL) || r; - r = ((glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uivEXT")) == NULL) || r; - r = ((glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iEXT")) == NULL) || r; - r = ((glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ivEXT")) == NULL) || r; - r = ((glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiEXT")) == NULL) || r; - r = ((glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uivEXT")) == NULL) || r; - r = ((glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iEXT")) == NULL) || r; - r = ((glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ivEXT")) == NULL) || r; - r = ((glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiEXT")) == NULL) || r; - r = ((glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uivEXT")) == NULL) || r; - r = ((glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iEXT")) == NULL) || r; - r = ((glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ivEXT")) == NULL) || r; - r = ((glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiEXT")) == NULL) || r; - r = ((glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uivEXT")) == NULL) || r; - r = ((glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bvEXT")) == NULL) || r; - r = ((glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iEXT")) == NULL) || r; - r = ((glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ivEXT")) == NULL) || r; - r = ((glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4svEXT")) == NULL) || r; - r = ((glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubvEXT")) == NULL) || r; - r = ((glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiEXT")) == NULL) || r; - r = ((glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uivEXT")) == NULL) || r; - r = ((glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usvEXT")) == NULL) || r; - r = ((glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_gpu_shader4 */ - -#ifdef GL_EXT_histogram - -static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramEXT")) == NULL) || r; - r = ((glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfvEXT")) == NULL) || r; - r = ((glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterivEXT")) == NULL) || r; - r = ((glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxEXT")) == NULL) || r; - r = ((glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfvEXT")) == NULL) || r; - r = ((glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterivEXT")) == NULL) || r; - r = ((glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glHistogramEXT")) == NULL) || r; - r = ((glMinmaxEXT = (PFNGLMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glMinmaxEXT")) == NULL) || r; - r = ((glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glResetHistogramEXT")) == NULL) || r; - r = ((glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glResetMinmaxEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_histogram */ - -#ifdef GL_EXT_index_array_formats - -#endif /* GL_EXT_index_array_formats */ - -#ifdef GL_EXT_index_func - -static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexFuncEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_index_func */ - -#ifdef GL_EXT_index_material - -static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexMaterialEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_index_material */ - -#ifdef GL_EXT_index_texture - -#endif /* GL_EXT_index_texture */ - -#ifdef GL_EXT_light_texture - -static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glApplyTextureEXT")) == NULL) || r; - r = ((glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureLightEXT")) == NULL) || r; - r = ((glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureMaterialEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_light_texture */ - -#ifdef GL_EXT_misc_attribute - -#endif /* GL_EXT_misc_attribute */ - -#ifdef GL_EXT_multi_draw_arrays - -static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysEXT")) == NULL) || r; - r = ((glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_multi_draw_arrays */ - -#ifdef GL_EXT_multisample - -static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskEXT")) == NULL) || r; - r = ((glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_multisample */ - -#ifdef GL_EXT_packed_depth_stencil - -#endif /* GL_EXT_packed_depth_stencil */ - -#ifdef GL_EXT_packed_float - -#endif /* GL_EXT_packed_float */ - -#ifdef GL_EXT_packed_pixels - -#endif /* GL_EXT_packed_pixels */ - -#ifdef GL_EXT_paletted_texture - -static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorTableEXT")) == NULL) || r; - r = ((glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableEXT")) == NULL) || r; - r = ((glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvEXT")) == NULL) || r; - r = ((glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_paletted_texture */ - -#ifdef GL_EXT_pixel_buffer_object - -#endif /* GL_EXT_pixel_buffer_object */ - -#ifdef GL_EXT_pixel_transform - -static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterfvEXT")) == NULL) || r; - r = ((glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterivEXT")) == NULL) || r; - r = ((glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfEXT")) == NULL) || r; - r = ((glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfvEXT")) == NULL) || r; - r = ((glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameteriEXT")) == NULL) || r; - r = ((glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_pixel_transform */ - -#ifdef GL_EXT_pixel_transform_color_table - -#endif /* GL_EXT_pixel_transform_color_table */ - -#ifdef GL_EXT_point_parameters - -static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfEXT")) == NULL) || r; - r = ((glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_point_parameters */ - -#ifdef GL_EXT_polygon_offset - -static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_polygon_offset */ - -#ifdef GL_EXT_provoking_vertex - -static GLboolean _glewInit_GL_EXT_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertexEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_provoking_vertex */ - -#ifdef GL_EXT_rescale_normal - -#endif /* GL_EXT_rescale_normal */ - -#ifdef GL_EXT_scene_marker - -static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginSceneEXT = (PFNGLBEGINSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginSceneEXT")) == NULL) || r; - r = ((glEndSceneEXT = (PFNGLENDSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glEndSceneEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_scene_marker */ - -#ifdef GL_EXT_secondary_color - -static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bEXT")) == NULL) || r; - r = ((glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bvEXT")) == NULL) || r; - r = ((glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dEXT")) == NULL) || r; - r = ((glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dvEXT")) == NULL) || r; - r = ((glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fEXT")) == NULL) || r; - r = ((glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fvEXT")) == NULL) || r; - r = ((glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iEXT")) == NULL) || r; - r = ((glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ivEXT")) == NULL) || r; - r = ((glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sEXT")) == NULL) || r; - r = ((glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3svEXT")) == NULL) || r; - r = ((glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubEXT")) == NULL) || r; - r = ((glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubvEXT")) == NULL) || r; - r = ((glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiEXT")) == NULL) || r; - r = ((glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uivEXT")) == NULL) || r; - r = ((glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usEXT")) == NULL) || r; - r = ((glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usvEXT")) == NULL) || r; - r = ((glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_secondary_color */ - -#ifdef GL_EXT_separate_shader_objects - -static GLboolean _glewInit_GL_EXT_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveProgramEXT")) == NULL) || r; - r = ((glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramEXT")) == NULL) || r; - r = ((glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glUseShaderProgramEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_separate_shader_objects */ - -#ifdef GL_EXT_separate_specular_color - -#endif /* GL_EXT_separate_specular_color */ - -#ifdef GL_EXT_shader_image_load_store - -static GLboolean _glewInit_GL_EXT_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextureEXT")) == NULL) || r; - r = ((glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrierEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_shader_image_load_store */ - -#ifdef GL_EXT_shadow_funcs - -#endif /* GL_EXT_shadow_funcs */ - -#ifdef GL_EXT_shared_texture_palette - -#endif /* GL_EXT_shared_texture_palette */ - -#ifdef GL_EXT_stencil_clear_tag - -#endif /* GL_EXT_stencil_clear_tag */ - -#ifdef GL_EXT_stencil_two_side - -static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveStencilFaceEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_stencil_two_side */ - -#ifdef GL_EXT_stencil_wrap - -#endif /* GL_EXT_stencil_wrap */ - -#ifdef GL_EXT_subtexture - -static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage1DEXT")) == NULL) || r; - r = ((glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage2DEXT")) == NULL) || r; - r = ((glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_subtexture */ - -#ifdef GL_EXT_texture - -#endif /* GL_EXT_texture */ - -#ifdef GL_EXT_texture3D - -static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture3D */ - -#ifdef GL_EXT_texture_array - -static GLboolean _glewInit_GL_EXT_texture_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_array */ - -#ifdef GL_EXT_texture_buffer_object - -static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexBufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_buffer_object */ - -#ifdef GL_EXT_texture_compression_dxt1 - -#endif /* GL_EXT_texture_compression_dxt1 */ - -#ifdef GL_EXT_texture_compression_latc - -#endif /* GL_EXT_texture_compression_latc */ - -#ifdef GL_EXT_texture_compression_rgtc - -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifdef GL_EXT_texture_compression_s3tc - -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifdef GL_EXT_texture_cube_map - -#endif /* GL_EXT_texture_cube_map */ - -#ifdef GL_EXT_texture_edge_clamp - -#endif /* GL_EXT_texture_edge_clamp */ - -#ifdef GL_EXT_texture_env - -#endif /* GL_EXT_texture_env */ - -#ifdef GL_EXT_texture_env_add - -#endif /* GL_EXT_texture_env_add */ - -#ifdef GL_EXT_texture_env_combine - -#endif /* GL_EXT_texture_env_combine */ - -#ifdef GL_EXT_texture_env_dot3 - -#endif /* GL_EXT_texture_env_dot3 */ - -#ifdef GL_EXT_texture_filter_anisotropic - -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifdef GL_EXT_texture_integer - -static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIiEXT")) == NULL) || r; - r = ((glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIuiEXT")) == NULL) || r; - r = ((glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIivEXT")) == NULL) || r; - r = ((glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuivEXT")) == NULL) || r; - r = ((glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIivEXT")) == NULL) || r; - r = ((glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_integer */ - -#ifdef GL_EXT_texture_lod_bias - -#endif /* GL_EXT_texture_lod_bias */ - -#ifdef GL_EXT_texture_mirror_clamp - -#endif /* GL_EXT_texture_mirror_clamp */ - -#ifdef GL_EXT_texture_object - -static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)glewGetProcAddress((const GLubyte*)"glAreTexturesResidentEXT")) == NULL) || r; - r = ((glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureEXT")) == NULL) || r; - r = ((glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteTexturesEXT")) == NULL) || r; - r = ((glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glGenTexturesEXT")) == NULL) || r; - r = ((glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glIsTextureEXT")) == NULL) || r; - r = ((glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glPrioritizeTexturesEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_object */ - -#ifdef GL_EXT_texture_perturb_normal - -static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureNormalEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_perturb_normal */ - -#ifdef GL_EXT_texture_rectangle - -#endif /* GL_EXT_texture_rectangle */ - -#ifdef GL_EXT_texture_sRGB - -#endif /* GL_EXT_texture_sRGB */ - -#ifdef GL_EXT_texture_sRGB_decode - -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifdef GL_EXT_texture_shared_exponent - -#endif /* GL_EXT_texture_shared_exponent */ - -#ifdef GL_EXT_texture_snorm - -#endif /* GL_EXT_texture_snorm */ - -#ifdef GL_EXT_texture_swizzle - -#endif /* GL_EXT_texture_swizzle */ - -#ifdef GL_EXT_timer_query - -static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vEXT")) == NULL) || r; - r = ((glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_timer_query */ - -#ifdef GL_EXT_transform_feedback - -static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackEXT")) == NULL) || r; - r = ((glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseEXT")) == NULL) || r; - r = ((glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetEXT")) == NULL) || r; - r = ((glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeEXT")) == NULL) || r; - r = ((glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackEXT")) == NULL) || r; - r = ((glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingEXT")) == NULL) || r; - r = ((glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_transform_feedback */ - -#ifdef GL_EXT_vertex_array - -static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glArrayElementEXT")) == NULL) || r; - r = ((glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glColorPointerEXT")) == NULL) || r; - r = ((glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysEXT")) == NULL) || r; - r = ((glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerEXT")) == NULL) || r; - r = ((glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerEXT")) == NULL) || r; - r = ((glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerEXT")) == NULL) || r; - r = ((glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerEXT")) == NULL) || r; - r = ((glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_array */ - -#ifdef GL_EXT_vertex_array_bgra - -#endif /* GL_EXT_vertex_array_bgra */ - -#ifdef GL_EXT_vertex_attrib_64bit - -static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdvEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribLOffsetEXT")) == NULL) || r; - r = ((glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dEXT")) == NULL) || r; - r = ((glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dvEXT")) == NULL) || r; - r = ((glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dEXT")) == NULL) || r; - r = ((glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dvEXT")) == NULL) || r; - r = ((glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dEXT")) == NULL) || r; - r = ((glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dvEXT")) == NULL) || r; - r = ((glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dEXT")) == NULL) || r; - r = ((glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dvEXT")) == NULL) || r; - r = ((glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_attrib_64bit */ - -#ifdef GL_EXT_vertex_shader - -static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBeginVertexShaderEXT")) == NULL) || r; - r = ((glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindLightParameterEXT")) == NULL) || r; - r = ((glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindMaterialParameterEXT")) == NULL) || r; - r = ((glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindParameterEXT")) == NULL) || r; - r = ((glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTexGenParameterEXT")) == NULL) || r; - r = ((glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureUnitParameterEXT")) == NULL) || r; - r = ((glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindVertexShaderEXT")) == NULL) || r; - r = ((glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexShaderEXT")) == NULL) || r; - r = ((glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVariantClientStateEXT")) == NULL) || r; - r = ((glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVariantClientStateEXT")) == NULL) || r; - r = ((glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glEndVertexShaderEXT")) == NULL) || r; - r = ((glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glExtractComponentEXT")) == NULL) || r; - r = ((glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenSymbolsEXT")) == NULL) || r; - r = ((glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenVertexShadersEXT")) == NULL) || r; - r = ((glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantBooleanvEXT")) == NULL) || r; - r = ((glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantFloatvEXT")) == NULL) || r; - r = ((glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantIntegervEXT")) == NULL) || r; - r = ((glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantBooleanvEXT")) == NULL) || r; - r = ((glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantFloatvEXT")) == NULL) || r; - r = ((glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantIntegervEXT")) == NULL) || r; - r = ((glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantBooleanvEXT")) == NULL) || r; - r = ((glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantFloatvEXT")) == NULL) || r; - r = ((glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantIntegervEXT")) == NULL) || r; - r = ((glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantPointervEXT")) == NULL) || r; - r = ((glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glInsertComponentEXT")) == NULL) || r; - r = ((glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsVariantEnabledEXT")) == NULL) || r; - r = ((glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetInvariantEXT")) == NULL) || r; - r = ((glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetLocalConstantEXT")) == NULL) || r; - r = ((glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp1EXT")) == NULL) || r; - r = ((glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp2EXT")) == NULL) || r; - r = ((glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp3EXT")) == NULL) || r; - r = ((glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)glewGetProcAddress((const GLubyte*)"glSwizzleEXT")) == NULL) || r; - r = ((glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVariantPointerEXT")) == NULL) || r; - r = ((glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantbvEXT")) == NULL) || r; - r = ((glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantdvEXT")) == NULL) || r; - r = ((glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantfvEXT")) == NULL) || r; - r = ((glVariantivEXT = (PFNGLVARIANTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantivEXT")) == NULL) || r; - r = ((glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantsvEXT")) == NULL) || r; - r = ((glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantubvEXT")) == NULL) || r; - r = ((glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantuivEXT")) == NULL) || r; - r = ((glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantusvEXT")) == NULL) || r; - r = ((glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glWriteMaskEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_shader */ - -#ifdef GL_EXT_vertex_weighting - -static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightPointerEXT")) == NULL) || r; - r = ((glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfEXT")) == NULL) || r; - r = ((glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_weighting */ - -#ifdef GL_EXT_x11_sync_object - -static GLboolean _glewInit_GL_EXT_x11_sync_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC)glewGetProcAddress((const GLubyte*)"glImportSyncEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_x11_sync_object */ - -#ifdef GL_GREMEDY_frame_terminator - -static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glFrameTerminatorGREMEDY")) == NULL) || r; - - return r; -} - -#endif /* GL_GREMEDY_frame_terminator */ - -#ifdef GL_GREMEDY_string_marker - -static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glStringMarkerGREMEDY")) == NULL) || r; - - return r; -} - -#endif /* GL_GREMEDY_string_marker */ - -#ifdef GL_HP_convolution_border_modes - -#endif /* GL_HP_convolution_border_modes */ - -#ifdef GL_HP_image_transform - -static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterfvHP")) == NULL) || r; - r = ((glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterivHP")) == NULL) || r; - r = ((glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfHP")) == NULL) || r; - r = ((glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfvHP")) == NULL) || r; - r = ((glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameteriHP")) == NULL) || r; - r = ((glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterivHP")) == NULL) || r; - - return r; -} - -#endif /* GL_HP_image_transform */ - -#ifdef GL_HP_occlusion_test - -#endif /* GL_HP_occlusion_test */ - -#ifdef GL_HP_texture_lighting - -#endif /* GL_HP_texture_lighting */ - -#ifdef GL_IBM_cull_vertex - -#endif /* GL_IBM_cull_vertex */ - -#ifdef GL_IBM_multimode_draw_arrays - -static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawArraysIBM")) == NULL) || r; - r = ((glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawElementsIBM")) == NULL) || r; - - return r; -} - -#endif /* GL_IBM_multimode_draw_arrays */ - -#ifdef GL_IBM_rasterpos_clip - -#endif /* GL_IBM_rasterpos_clip */ - -#ifdef GL_IBM_static_data - -#endif /* GL_IBM_static_data */ - -#ifdef GL_IBM_texture_mirrored_repeat - -#endif /* GL_IBM_texture_mirrored_repeat */ - -#ifdef GL_IBM_vertex_array_lists - -static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glColorPointerListIBM")) == NULL) || r; - r = ((glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerListIBM")) == NULL) || r; - r = ((glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerListIBM")) == NULL) || r; - r = ((glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerListIBM")) == NULL) || r; - r = ((glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerListIBM")) == NULL) || r; - r = ((glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerListIBM")) == NULL) || r; - r = ((glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerListIBM")) == NULL) || r; - r = ((glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerListIBM")) == NULL) || r; - - return r; -} - -#endif /* GL_IBM_vertex_array_lists */ - -#ifdef GL_INGR_color_clamp - -#endif /* GL_INGR_color_clamp */ - -#ifdef GL_INGR_interlace_read - -#endif /* GL_INGR_interlace_read */ - -#ifdef GL_INTEL_map_texture - -static GLboolean _glewInit_GL_INTEL_map_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glMapTexture2DINTEL")) == NULL) || r; - r = ((glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC)glewGetProcAddress((const GLubyte*)"glSyncTextureINTEL")) == NULL) || r; - r = ((glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glUnmapTexture2DINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_map_texture */ - -#ifdef GL_INTEL_parallel_arrays - -static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glColorPointervINTEL")) == NULL) || r; - r = ((glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glNormalPointervINTEL")) == NULL) || r; - r = ((glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointervINTEL")) == NULL) || r; - r = ((glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glVertexPointervINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_parallel_arrays */ - -#ifdef GL_INTEL_texture_scissor - -static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexScissorFuncINTEL = (PFNGLTEXSCISSORFUNCINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorFuncINTEL")) == NULL) || r; - r = ((glTexScissorINTEL = (PFNGLTEXSCISSORINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_texture_scissor */ - -#ifdef GL_KHR_debug - -static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallback")) == NULL) || r; - r = ((glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControl")) == NULL) || r; - r = ((glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsert")) == NULL) || r; - r = ((glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLog")) == NULL) || r; - r = ((glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectLabel")) == NULL) || r; - r = ((glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectPtrLabel")) == NULL) || r; - r = ((glObjectLabel = (PFNGLOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectLabel")) == NULL) || r; - r = ((glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectPtrLabel")) == NULL) || r; - r = ((glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPopDebugGroup")) == NULL) || r; - r = ((glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPushDebugGroup")) == NULL) || r; - - return r; -} - -#endif /* GL_KHR_debug */ - -#ifdef GL_KHR_texture_compression_astc_ldr - -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifdef GL_KTX_buffer_region - -static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferRegionEnabled = (PFNGLBUFFERREGIONENABLEDPROC)glewGetProcAddress((const GLubyte*)"glBufferRegionEnabled")) == NULL) || r; - r = ((glDeleteBufferRegion = (PFNGLDELETEBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDeleteBufferRegion")) == NULL) || r; - r = ((glDrawBufferRegion = (PFNGLDRAWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDrawBufferRegion")) == NULL) || r; - r = ((glNewBufferRegion = (PFNGLNEWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glNewBufferRegion")) == NULL) || r; - r = ((glReadBufferRegion = (PFNGLREADBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glReadBufferRegion")) == NULL) || r; - - return r; -} - -#endif /* GL_KTX_buffer_region */ - -#ifdef GL_MESAX_texture_stack - -#endif /* GL_MESAX_texture_stack */ - -#ifdef GL_MESA_pack_invert - -#endif /* GL_MESA_pack_invert */ - -#ifdef GL_MESA_resize_buffers - -static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glResizeBuffersMESA")) == NULL) || r; - - return r; -} - -#endif /* GL_MESA_resize_buffers */ - -#ifdef GL_MESA_window_pos - -static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dMESA")) == NULL) || r; - r = ((glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvMESA")) == NULL) || r; - r = ((glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fMESA")) == NULL) || r; - r = ((glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvMESA")) == NULL) || r; - r = ((glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iMESA")) == NULL) || r; - r = ((glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivMESA")) == NULL) || r; - r = ((glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sMESA")) == NULL) || r; - r = ((glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svMESA")) == NULL) || r; - r = ((glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dMESA")) == NULL) || r; - r = ((glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvMESA")) == NULL) || r; - r = ((glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fMESA")) == NULL) || r; - r = ((glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvMESA")) == NULL) || r; - r = ((glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iMESA")) == NULL) || r; - r = ((glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivMESA")) == NULL) || r; - r = ((glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sMESA")) == NULL) || r; - r = ((glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svMESA")) == NULL) || r; - r = ((glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dMESA")) == NULL) || r; - r = ((glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dvMESA")) == NULL) || r; - r = ((glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fMESA")) == NULL) || r; - r = ((glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fvMESA")) == NULL) || r; - r = ((glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4iMESA")) == NULL) || r; - r = ((glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4ivMESA")) == NULL) || r; - r = ((glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4sMESA")) == NULL) || r; - r = ((glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4svMESA")) == NULL) || r; - - return r; -} - -#endif /* GL_MESA_window_pos */ - -#ifdef GL_MESA_ycbcr_texture - -#endif /* GL_MESA_ycbcr_texture */ - -#ifdef GL_NVX_conditional_render - -static GLboolean _glewInit_GL_NVX_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNVX")) == NULL) || r; - r = ((glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNVX")) == NULL) || r; - - return r; -} - -#endif /* GL_NVX_conditional_render */ - -#ifdef GL_NVX_gpu_memory_info - -#endif /* GL_NVX_gpu_memory_info */ - -#ifdef GL_NV_bindless_multi_draw_indirect - -static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectBindlessNV")) == NULL) || r; - r = ((glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectBindlessNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_bindless_multi_draw_indirect */ - -#ifdef GL_NV_bindless_texture - -static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleNV")) == NULL) || r; - r = ((glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleNV")) == NULL) || r; - r = ((glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleNV")) == NULL) || r; - r = ((glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentNV")) == NULL) || r; - r = ((glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentNV")) == NULL) || r; - r = ((glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentNV")) == NULL) || r; - r = ((glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentNV")) == NULL) || r; - r = ((glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentNV")) == NULL) || r; - r = ((glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentNV")) == NULL) || r; - r = ((glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64NV")) == NULL) || r; - r = ((glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vNV")) == NULL) || r; - r = ((glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64NV")) == NULL) || r; - r = ((glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_bindless_texture */ - -#ifdef GL_NV_blend_equation_advanced - -static GLboolean _glewInit_GL_NV_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glBlendBarrierNV")) == NULL) || r; - r = ((glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glBlendParameteriNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_blend_equation_advanced */ - -#ifdef GL_NV_blend_equation_advanced_coherent - -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifdef GL_NV_blend_square - -#endif /* GL_NV_blend_square */ - -#ifdef GL_NV_compute_program5 - -#endif /* GL_NV_compute_program5 */ - -#ifdef GL_NV_conditional_render - -static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNV")) == NULL) || r; - r = ((glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_conditional_render */ - -#ifdef GL_NV_copy_depth_to_color - -#endif /* GL_NV_copy_depth_to_color */ - -#ifdef GL_NV_copy_image - -static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_copy_image */ - -#ifdef GL_NV_deep_texture3D - -#endif /* GL_NV_deep_texture3D */ - -#ifdef GL_NV_depth_buffer_float - -static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)glewGetProcAddress((const GLubyte*)"glClearDepthdNV")) == NULL) || r; - r = ((glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsdNV")) == NULL) || r; - r = ((glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangedNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_depth_buffer_float */ - -#ifdef GL_NV_depth_clamp - -#endif /* GL_NV_depth_clamp */ - -#ifdef GL_NV_depth_range_unclamped - -#endif /* GL_NV_depth_range_unclamped */ - -#ifdef GL_NV_draw_texture - -static GLboolean _glewInit_GL_NV_draw_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glDrawTextureNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_draw_texture */ - -#ifdef GL_NV_evaluators - -static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glEvalMapsNV = (PFNGLEVALMAPSNVPROC)glewGetProcAddress((const GLubyte*)"glEvalMapsNV")) == NULL) || r; - r = ((glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterfvNV")) == NULL) || r; - r = ((glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterivNV")) == NULL) || r; - r = ((glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapControlPointsNV")) == NULL) || r; - r = ((glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterfvNV")) == NULL) || r; - r = ((glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterivNV")) == NULL) || r; - r = ((glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glMapControlPointsNV")) == NULL) || r; - r = ((glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterfvNV")) == NULL) || r; - r = ((glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_evaluators */ - -#ifdef GL_NV_explicit_multisample - -static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefvNV")) == NULL) || r; - r = ((glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskIndexedNV")) == NULL) || r; - r = ((glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glTexRenderbufferNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_explicit_multisample */ - -#ifdef GL_NV_fence - -static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesNV")) == NULL) || r; - r = ((glFinishFenceNV = (PFNGLFINISHFENCENVPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceNV")) == NULL) || r; - r = ((glGenFencesNV = (PFNGLGENFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glGenFencesNV")) == NULL) || r; - r = ((glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFenceivNV")) == NULL) || r; - r = ((glIsFenceNV = (PFNGLISFENCENVPROC)glewGetProcAddress((const GLubyte*)"glIsFenceNV")) == NULL) || r; - r = ((glSetFenceNV = (PFNGLSETFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSetFenceNV")) == NULL) || r; - r = ((glTestFenceNV = (PFNGLTESTFENCENVPROC)glewGetProcAddress((const GLubyte*)"glTestFenceNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_fence */ - -#ifdef GL_NV_float_buffer - -#endif /* GL_NV_float_buffer */ - -#ifdef GL_NV_fog_distance - -#endif /* GL_NV_fog_distance */ - -#ifdef GL_NV_fragment_program - -static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterdvNV")) == NULL) || r; - r = ((glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterfvNV")) == NULL) || r; - r = ((glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dNV")) == NULL) || r; - r = ((glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dvNV")) == NULL) || r; - r = ((glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fNV")) == NULL) || r; - r = ((glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_fragment_program */ - -#ifdef GL_NV_fragment_program2 - -#endif /* GL_NV_fragment_program2 */ - -#ifdef GL_NV_fragment_program4 - -#endif /* GL_NV_fragment_program4 */ - -#ifdef GL_NV_fragment_program_option - -#endif /* GL_NV_fragment_program_option */ - -#ifdef GL_NV_framebuffer_multisample_coverage - -static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleCoverageNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_framebuffer_multisample_coverage */ - -#ifdef GL_NV_geometry_program4 - -static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)glewGetProcAddress((const GLubyte*)"glProgramVertexLimitNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_geometry_program4 */ - -#ifdef GL_NV_geometry_shader4 - -#endif /* GL_NV_geometry_shader4 */ - -#ifdef GL_NV_gpu_program4 - -static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4iNV")) == NULL) || r; - r = ((glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4ivNV")) == NULL) || r; - r = ((glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uiNV")) == NULL) || r; - r = ((glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uivNV")) == NULL) || r; - r = ((glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4ivNV")) == NULL) || r; - r = ((glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4uivNV")) == NULL) || r; - r = ((glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4iNV")) == NULL) || r; - r = ((glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4ivNV")) == NULL) || r; - r = ((glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uiNV")) == NULL) || r; - r = ((glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uivNV")) == NULL) || r; - r = ((glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4ivNV")) == NULL) || r; - r = ((glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4uivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_gpu_program4 */ - -#ifdef GL_NV_gpu_program5 - -#endif /* GL_NV_gpu_program5 */ - -#ifdef GL_NV_gpu_program5_mem_extended - -#endif /* GL_NV_gpu_program5_mem_extended */ - -#ifdef GL_NV_gpu_program_fp64 - -#endif /* GL_NV_gpu_program_fp64 */ - -#ifdef GL_NV_gpu_shader5 - -static GLboolean _glewInit_GL_NV_gpu_shader5 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformi64vNV")) == NULL) || r; - r = ((glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformui64vNV")) == NULL) || r; - r = ((glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64NV")) == NULL) || r; - r = ((glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64vNV")) == NULL) || r; - r = ((glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64NV")) == NULL) || r; - r = ((glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64vNV")) == NULL) || r; - r = ((glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64NV")) == NULL) || r; - r = ((glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64vNV")) == NULL) || r; - r = ((glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64NV")) == NULL) || r; - r = ((glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64vNV")) == NULL) || r; - r = ((glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64NV")) == NULL) || r; - r = ((glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64vNV")) == NULL) || r; - r = ((glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64NV")) == NULL) || r; - r = ((glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64vNV")) == NULL) || r; - r = ((glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64NV")) == NULL) || r; - r = ((glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64vNV")) == NULL) || r; - r = ((glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64NV")) == NULL) || r; - r = ((glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64vNV")) == NULL) || r; - r = ((glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64NV")) == NULL) || r; - r = ((glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64vNV")) == NULL) || r; - r = ((glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64NV")) == NULL) || r; - r = ((glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64vNV")) == NULL) || r; - r = ((glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64NV")) == NULL) || r; - r = ((glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64vNV")) == NULL) || r; - r = ((glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64NV")) == NULL) || r; - r = ((glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64vNV")) == NULL) || r; - r = ((glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64NV")) == NULL) || r; - r = ((glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64vNV")) == NULL) || r; - r = ((glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64NV")) == NULL) || r; - r = ((glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64vNV")) == NULL) || r; - r = ((glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64NV")) == NULL) || r; - r = ((glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64vNV")) == NULL) || r; - r = ((glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64NV")) == NULL) || r; - r = ((glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_gpu_shader5 */ - -#ifdef GL_NV_half_float - -static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColor3hNV = (PFNGLCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hNV")) == NULL) || r; - r = ((glColor3hvNV = (PFNGLCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hvNV")) == NULL) || r; - r = ((glColor4hNV = (PFNGLCOLOR4HNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hNV")) == NULL) || r; - r = ((glColor4hvNV = (PFNGLCOLOR4HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hvNV")) == NULL) || r; - r = ((glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhNV")) == NULL) || r; - r = ((glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhvNV")) == NULL) || r; - r = ((glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hNV")) == NULL) || r; - r = ((glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hvNV")) == NULL) || r; - r = ((glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hNV")) == NULL) || r; - r = ((glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hvNV")) == NULL) || r; - r = ((glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hNV")) == NULL) || r; - r = ((glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hvNV")) == NULL) || r; - r = ((glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hNV")) == NULL) || r; - r = ((glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hvNV")) == NULL) || r; - r = ((glNormal3hNV = (PFNGLNORMAL3HNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hNV")) == NULL) || r; - r = ((glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hvNV")) == NULL) || r; - r = ((glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hNV")) == NULL) || r; - r = ((glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hvNV")) == NULL) || r; - r = ((glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hNV")) == NULL) || r; - r = ((glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hvNV")) == NULL) || r; - r = ((glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hNV")) == NULL) || r; - r = ((glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hvNV")) == NULL) || r; - r = ((glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hNV")) == NULL) || r; - r = ((glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hvNV")) == NULL) || r; - r = ((glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hNV")) == NULL) || r; - r = ((glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hvNV")) == NULL) || r; - r = ((glVertex2hNV = (PFNGLVERTEX2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hNV")) == NULL) || r; - r = ((glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hvNV")) == NULL) || r; - r = ((glVertex3hNV = (PFNGLVERTEX3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hNV")) == NULL) || r; - r = ((glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hvNV")) == NULL) || r; - r = ((glVertex4hNV = (PFNGLVERTEX4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hNV")) == NULL) || r; - r = ((glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hvNV")) == NULL) || r; - r = ((glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hNV")) == NULL) || r; - r = ((glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hvNV")) == NULL) || r; - r = ((glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hNV")) == NULL) || r; - r = ((glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hvNV")) == NULL) || r; - r = ((glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hNV")) == NULL) || r; - r = ((glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hvNV")) == NULL) || r; - r = ((glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hNV")) == NULL) || r; - r = ((glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hvNV")) == NULL) || r; - r = ((glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1hvNV")) == NULL) || r; - r = ((glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2hvNV")) == NULL) || r; - r = ((glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3hvNV")) == NULL) || r; - r = ((glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4hvNV")) == NULL) || r; - r = ((glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthNV")) == NULL) || r; - r = ((glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_half_float */ - -#ifdef GL_NV_light_max_exponent - -#endif /* GL_NV_light_max_exponent */ - -#ifdef GL_NV_multisample_coverage - -#endif /* GL_NV_multisample_coverage */ - -#ifdef GL_NV_multisample_filter_hint - -#endif /* GL_NV_multisample_filter_hint */ - -#ifdef GL_NV_occlusion_query - -static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glBeginOcclusionQueryNV")) == NULL) || r; - r = ((glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteOcclusionQueriesNV")) == NULL) || r; - r = ((glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glEndOcclusionQueryNV")) == NULL) || r; - r = ((glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glGenOcclusionQueriesNV")) == NULL) || r; - r = ((glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryivNV")) == NULL) || r; - r = ((glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryuivNV")) == NULL) || r; - r = ((glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glIsOcclusionQueryNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_occlusion_query */ - -#ifdef GL_NV_packed_depth_stencil - -#endif /* GL_NV_packed_depth_stencil */ - -#ifdef GL_NV_parameter_buffer_object - -static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIivNV")) == NULL) || r; - r = ((glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIuivNV")) == NULL) || r; - r = ((glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersfvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_parameter_buffer_object */ - -#ifdef GL_NV_parameter_buffer_object2 - -#endif /* GL_NV_parameter_buffer_object2 */ - -#ifdef GL_NV_path_rendering - -static GLboolean _glewInit_GL_NV_path_rendering (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyPathNV = (PFNGLCOPYPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCopyPathNV")) == NULL) || r; - r = ((glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathInstancedNV")) == NULL) || r; - r = ((glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathNV")) == NULL) || r; - r = ((glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathInstancedNV")) == NULL) || r; - r = ((glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathNV")) == NULL) || r; - r = ((glDeletePathsNV = (PFNGLDELETEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glDeletePathsNV")) == NULL) || r; - r = ((glGenPathsNV = (PFNGLGENPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glGenPathsNV")) == NULL) || r; - r = ((glGetPathColorGenfvNV = (PFNGLGETPATHCOLORGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenfvNV")) == NULL) || r; - r = ((glGetPathColorGenivNV = (PFNGLGETPATHCOLORGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenivNV")) == NULL) || r; - r = ((glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCommandsNV")) == NULL) || r; - r = ((glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCoordsNV")) == NULL) || r; - r = ((glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathDashArrayNV")) == NULL) || r; - r = ((glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathLengthNV")) == NULL) || r; - r = ((glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricRangeNV")) == NULL) || r; - r = ((glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricsNV")) == NULL) || r; - r = ((glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterfvNV")) == NULL) || r; - r = ((glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterivNV")) == NULL) || r; - r = ((glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathSpacingNV")) == NULL) || r; - r = ((glGetPathTexGenfvNV = (PFNGLGETPATHTEXGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenfvNV")) == NULL) || r; - r = ((glGetPathTexGenivNV = (PFNGLGETPATHTEXGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenivNV")) == NULL) || r; - r = ((glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glInterpolatePathsNV")) == NULL) || r; - r = ((glIsPathNV = (PFNGLISPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPathNV")) == NULL) || r; - r = ((glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInFillPathNV")) == NULL) || r; - r = ((glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInStrokePathNV")) == NULL) || r; - r = ((glPathColorGenNV = (PFNGLPATHCOLORGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathColorGenNV")) == NULL) || r; - r = ((glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCommandsNV")) == NULL) || r; - r = ((glPathCoordsNV = (PFNGLPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoordsNV")) == NULL) || r; - r = ((glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoverDepthFuncNV")) == NULL) || r; - r = ((glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glPathDashArrayNV")) == NULL) || r; - r = ((glPathFogGenNV = (PFNGLPATHFOGGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathFogGenNV")) == NULL) || r; - r = ((glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphRangeNV")) == NULL) || r; - r = ((glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphsNV")) == NULL) || r; - r = ((glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfNV")) == NULL) || r; - r = ((glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfvNV")) == NULL) || r; - r = ((glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPathParameteriNV")) == NULL) || r; - r = ((glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterivNV")) == NULL) || r; - r = ((glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilDepthOffsetNV")) == NULL) || r; - r = ((glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilFuncNV")) == NULL) || r; - r = ((glPathStringNV = (PFNGLPATHSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glPathStringNV")) == NULL) || r; - r = ((glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCommandsNV")) == NULL) || r; - r = ((glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCoordsNV")) == NULL) || r; - r = ((glPathTexGenNV = (PFNGLPATHTEXGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathTexGenNV")) == NULL) || r; - r = ((glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC)glewGetProcAddress((const GLubyte*)"glPointAlongPathNV")) == NULL) || r; - r = ((glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathInstancedNV")) == NULL) || r; - r = ((glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathNV")) == NULL) || r; - r = ((glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathInstancedNV")) == NULL) || r; - r = ((glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathNV")) == NULL) || r; - r = ((glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC)glewGetProcAddress((const GLubyte*)"glTransformPathNV")) == NULL) || r; - r = ((glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glWeightPathsNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_path_rendering */ - -#ifdef GL_NV_pixel_data_range - -static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushPixelDataRangeNV")) == NULL) || r; - r = ((glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glPixelDataRangeNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_pixel_data_range */ - -#ifdef GL_NV_point_sprite - -static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriNV")) == NULL) || r; - r = ((glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_point_sprite */ - -#ifdef GL_NV_present_video - -static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoi64vNV")) == NULL) || r; - r = ((glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoivNV")) == NULL) || r; - r = ((glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoui64vNV")) == NULL) || r; - r = ((glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideouivNV")) == NULL) || r; - r = ((glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameDualFillNV")) == NULL) || r; - r = ((glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameKeyedNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_present_video */ - -#ifdef GL_NV_primitive_restart - -static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndexNV")) == NULL) || r; - r = ((glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_primitive_restart */ - -#ifdef GL_NV_register_combiners - -static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerInputNV")) == NULL) || r; - r = ((glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerOutputNV")) == NULL) || r; - r = ((glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfNV")) == NULL) || r; - r = ((glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfvNV")) == NULL) || r; - r = ((glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameteriNV")) == NULL) || r; - r = ((glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterivNV")) == NULL) || r; - r = ((glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glFinalCombinerInputNV")) == NULL) || r; - r = ((glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterfvNV")) == NULL) || r; - r = ((glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterivNV")) == NULL) || r; - r = ((glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterfvNV")) == NULL) || r; - r = ((glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterivNV")) == NULL) || r; - r = ((glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterfvNV")) == NULL) || r; - r = ((glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_register_combiners */ - -#ifdef GL_NV_register_combiners2 - -static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerStageParameterfvNV")) == NULL) || r; - r = ((glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerStageParameterfvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_register_combiners2 */ - -#ifdef GL_NV_shader_atomic_counters - -#endif /* GL_NV_shader_atomic_counters */ - -#ifdef GL_NV_shader_atomic_float - -#endif /* GL_NV_shader_atomic_float */ - -#ifdef GL_NV_shader_buffer_load - -static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterui64vNV")) == NULL) || r; - r = ((glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64vNV")) == NULL) || r; - r = ((glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterui64vNV")) == NULL) || r; - r = ((glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsBufferResidentNV")) == NULL) || r; - r = ((glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsNamedBufferResidentNV")) == NULL) || r; - r = ((glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferNonResidentNV")) == NULL) || r; - r = ((glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferResidentNV")) == NULL) || r; - r = ((glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferNonResidentNV")) == NULL) || r; - r = ((glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferResidentNV")) == NULL) || r; - r = ((glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64NV")) == NULL) || r; - r = ((glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64vNV")) == NULL) || r; - r = ((glUniformui64NV = (PFNGLUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64NV")) == NULL) || r; - r = ((glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_shader_buffer_load */ - -#ifdef GL_NV_shader_storage_buffer_object - -#endif /* GL_NV_shader_storage_buffer_object */ - -#ifdef GL_NV_tessellation_program5 - -#endif /* GL_NV_tessellation_program5 */ - -#ifdef GL_NV_texgen_emboss - -#endif /* GL_NV_texgen_emboss */ - -#ifdef GL_NV_texgen_reflection - -#endif /* GL_NV_texgen_reflection */ - -#ifdef GL_NV_texture_barrier - -static GLboolean _glewInit_GL_NV_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glTextureBarrierNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_texture_barrier */ - -#ifdef GL_NV_texture_compression_vtc - -#endif /* GL_NV_texture_compression_vtc */ - -#ifdef GL_NV_texture_env_combine4 - -#endif /* GL_NV_texture_env_combine4 */ - -#ifdef GL_NV_texture_expand_normal - -#endif /* GL_NV_texture_expand_normal */ - -#ifdef GL_NV_texture_multisample - -static GLboolean _glewInit_GL_NV_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisampleCoverageNV")) == NULL) || r; - r = ((glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleNV")) == NULL) || r; - r = ((glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_texture_multisample */ - -#ifdef GL_NV_texture_rectangle - -#endif /* GL_NV_texture_rectangle */ - -#ifdef GL_NV_texture_shader - -#endif /* GL_NV_texture_shader */ - -#ifdef GL_NV_texture_shader2 - -#endif /* GL_NV_texture_shader2 */ - -#ifdef GL_NV_texture_shader3 - -#endif /* GL_NV_texture_shader3 */ - -#ifdef GL_NV_transform_feedback - -static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glActiveVaryingNV")) == NULL) || r; - r = ((glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackNV")) == NULL) || r; - r = ((glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseNV")) == NULL) || r; - r = ((glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetNV")) == NULL) || r; - r = ((glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeNV")) == NULL) || r; - r = ((glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackNV")) == NULL) || r; - r = ((glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveVaryingNV")) == NULL) || r; - r = ((glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingNV")) == NULL) || r; - r = ((glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)glewGetProcAddress((const GLubyte*)"glGetVaryingLocationNV")) == NULL) || r; - r = ((glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackAttribsNV")) == NULL) || r; - r = ((glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_transform_feedback */ - -#ifdef GL_NV_transform_feedback2 - -static GLboolean _glewInit_GL_NV_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedbackNV")) == NULL) || r; - r = ((glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacksNV")) == NULL) || r; - r = ((glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackNV")) == NULL) || r; - r = ((glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacksNV")) == NULL) || r; - r = ((glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedbackNV")) == NULL) || r; - r = ((glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedbackNV")) == NULL) || r; - r = ((glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedbackNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_transform_feedback2 */ - -#ifdef GL_NV_vdpau_interop - -static GLboolean _glewInit_GL_NV_vdpau_interop (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVDPAUFiniNV = (PFNGLVDPAUFININVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUFiniNV")) == NULL) || r; - r = ((glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUGetSurfaceivNV")) == NULL) || r; - r = ((glVDPAUInitNV = (PFNGLVDPAUINITNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUInitNV")) == NULL) || r; - r = ((glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUIsSurfaceNV")) == NULL) || r; - r = ((glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUMapSurfacesNV")) == NULL) || r; - r = ((glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterOutputSurfaceNV")) == NULL) || r; - r = ((glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterVideoSurfaceNV")) == NULL) || r; - r = ((glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUSurfaceAccessNV")) == NULL) || r; - r = ((glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnmapSurfacesNV")) == NULL) || r; - r = ((glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnregisterSurfaceNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vdpau_interop */ - -#ifdef GL_NV_vertex_array_range - -static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeNV")) == NULL) || r; - r = ((glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_array_range */ - -#ifdef GL_NV_vertex_array_range2 - -#endif /* GL_NV_vertex_array_range2 */ - -#ifdef GL_NV_vertex_attrib_integer_64bit - -static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLi64vNV")) == NULL) || r; - r = ((glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vNV")) == NULL) || r; - r = ((glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64NV")) == NULL) || r; - r = ((glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64vNV")) == NULL) || r; - r = ((glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64NV")) == NULL) || r; - r = ((glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vNV")) == NULL) || r; - r = ((glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64NV")) == NULL) || r; - r = ((glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64vNV")) == NULL) || r; - r = ((glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64NV")) == NULL) || r; - r = ((glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64vNV")) == NULL) || r; - r = ((glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64NV")) == NULL) || r; - r = ((glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64vNV")) == NULL) || r; - r = ((glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64NV")) == NULL) || r; - r = ((glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64vNV")) == NULL) || r; - r = ((glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64NV")) == NULL) || r; - r = ((glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64vNV")) == NULL) || r; - r = ((glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64NV")) == NULL) || r; - r = ((glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64vNV")) == NULL) || r; - r = ((glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormatNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -#ifdef GL_NV_vertex_buffer_unified_memory - -static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBufferAddressRangeNV")) == NULL) || r; - r = ((glColorFormatNV = (PFNGLCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glColorFormatNV")) == NULL) || r; - r = ((glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagFormatNV")) == NULL) || r; - r = ((glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordFormatNV")) == NULL) || r; - r = ((glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64i_vNV")) == NULL) || r; - r = ((glIndexFormatNV = (PFNGLINDEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glIndexFormatNV")) == NULL) || r; - r = ((glNormalFormatNV = (PFNGLNORMALFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glNormalFormatNV")) == NULL) || r; - r = ((glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorFormatNV")) == NULL) || r; - r = ((glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordFormatNV")) == NULL) || r; - r = ((glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormatNV")) == NULL) || r; - r = ((glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormatNV")) == NULL) || r; - r = ((glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexFormatNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_buffer_unified_memory */ - -#ifdef GL_NV_vertex_program - -static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glAreProgramsResidentNV")) == NULL) || r; - r = ((glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glBindProgramNV")) == NULL) || r; - r = ((glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsNV")) == NULL) || r; - r = ((glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glExecuteProgramNV")) == NULL) || r; - r = ((glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsNV")) == NULL) || r; - r = ((glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterdvNV")) == NULL) || r; - r = ((glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterfvNV")) == NULL) || r; - r = ((glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringNV")) == NULL) || r; - r = ((glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivNV")) == NULL) || r; - r = ((glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetTrackMatrixivNV")) == NULL) || r; - r = ((glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervNV")) == NULL) || r; - r = ((glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvNV")) == NULL) || r; - r = ((glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvNV")) == NULL) || r; - r = ((glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivNV")) == NULL) || r; - r = ((glIsProgramNV = (PFNGLISPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glIsProgramNV")) == NULL) || r; - r = ((glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glLoadProgramNV")) == NULL) || r; - r = ((glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dNV")) == NULL) || r; - r = ((glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dvNV")) == NULL) || r; - r = ((glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fNV")) == NULL) || r; - r = ((glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fvNV")) == NULL) || r; - r = ((glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4dvNV")) == NULL) || r; - r = ((glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4fvNV")) == NULL) || r; - r = ((glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glRequestResidentProgramsNV")) == NULL) || r; - r = ((glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)glewGetProcAddress((const GLubyte*)"glTrackMatrixNV")) == NULL) || r; - r = ((glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dNV")) == NULL) || r; - r = ((glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvNV")) == NULL) || r; - r = ((glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fNV")) == NULL) || r; - r = ((glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvNV")) == NULL) || r; - r = ((glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sNV")) == NULL) || r; - r = ((glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svNV")) == NULL) || r; - r = ((glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dNV")) == NULL) || r; - r = ((glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvNV")) == NULL) || r; - r = ((glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fNV")) == NULL) || r; - r = ((glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvNV")) == NULL) || r; - r = ((glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sNV")) == NULL) || r; - r = ((glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svNV")) == NULL) || r; - r = ((glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dNV")) == NULL) || r; - r = ((glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvNV")) == NULL) || r; - r = ((glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fNV")) == NULL) || r; - r = ((glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvNV")) == NULL) || r; - r = ((glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sNV")) == NULL) || r; - r = ((glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svNV")) == NULL) || r; - r = ((glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dNV")) == NULL) || r; - r = ((glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvNV")) == NULL) || r; - r = ((glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fNV")) == NULL) || r; - r = ((glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvNV")) == NULL) || r; - r = ((glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sNV")) == NULL) || r; - r = ((glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svNV")) == NULL) || r; - r = ((glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubNV")) == NULL) || r; - r = ((glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvNV")) == NULL) || r; - r = ((glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerNV")) == NULL) || r; - r = ((glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1dvNV")) == NULL) || r; - r = ((glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1fvNV")) == NULL) || r; - r = ((glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1svNV")) == NULL) || r; - r = ((glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2dvNV")) == NULL) || r; - r = ((glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2fvNV")) == NULL) || r; - r = ((glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2svNV")) == NULL) || r; - r = ((glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3dvNV")) == NULL) || r; - r = ((glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3fvNV")) == NULL) || r; - r = ((glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3svNV")) == NULL) || r; - r = ((glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4dvNV")) == NULL) || r; - r = ((glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4fvNV")) == NULL) || r; - r = ((glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4svNV")) == NULL) || r; - r = ((glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4ubvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_program */ - -#ifdef GL_NV_vertex_program1_1 - -#endif /* GL_NV_vertex_program1_1 */ - -#ifdef GL_NV_vertex_program2 - -#endif /* GL_NV_vertex_program2 */ - -#ifdef GL_NV_vertex_program2_option - -#endif /* GL_NV_vertex_program2_option */ - -#ifdef GL_NV_vertex_program3 - -#endif /* GL_NV_vertex_program3 */ - -#ifdef GL_NV_vertex_program4 - -#endif /* GL_NV_vertex_program4 */ - -#ifdef GL_NV_video_capture - -static GLboolean _glewInit_GL_NV_video_capture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glBeginVideoCaptureNV")) == NULL) || r; - r = ((glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamBufferNV")) == NULL) || r; - r = ((glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamTextureNV")) == NULL) || r; - r = ((glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glEndVideoCaptureNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamdvNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamfvNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamivNV")) == NULL) || r; - r = ((glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureivNV")) == NULL) || r; - r = ((glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterdvNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterfvNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_video_capture */ - -#ifdef GL_OES_byte_coordinates - -#endif /* GL_OES_byte_coordinates */ - -#ifdef GL_OES_compressed_paletted_texture - -#endif /* GL_OES_compressed_paletted_texture */ - -#ifdef GL_OES_read_format - -#endif /* GL_OES_read_format */ - -#ifdef GL_OES_single_precision - -static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)glewGetProcAddress((const GLubyte*)"glClearDepthfOES")) == NULL) || r; - r = ((glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glClipPlanefOES")) == NULL) || r; - r = ((glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)glewGetProcAddress((const GLubyte*)"glDepthRangefOES")) == NULL) || r; - r = ((glFrustumfOES = (PFNGLFRUSTUMFOESPROC)glewGetProcAddress((const GLubyte*)"glFrustumfOES")) == NULL) || r; - r = ((glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanefOES")) == NULL) || r; - r = ((glOrthofOES = (PFNGLORTHOFOESPROC)glewGetProcAddress((const GLubyte*)"glOrthofOES")) == NULL) || r; - - return r; -} - -#endif /* GL_OES_single_precision */ - -#ifdef GL_OML_interlace - -#endif /* GL_OML_interlace */ - -#ifdef GL_OML_resample - -#endif /* GL_OML_resample */ - -#ifdef GL_OML_subsample - -#endif /* GL_OML_subsample */ - -#ifdef GL_PGI_misc_hints - -#endif /* GL_PGI_misc_hints */ - -#ifdef GL_PGI_vertex_hints - -#endif /* GL_PGI_vertex_hints */ - -#ifdef GL_REGAL_ES1_0_compatibility - -static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAlphaFuncx = (PFNGLALPHAFUNCXPROC)glewGetProcAddress((const GLubyte*)"glAlphaFuncx")) == NULL) || r; - r = ((glClearColorx = (PFNGLCLEARCOLORXPROC)glewGetProcAddress((const GLubyte*)"glClearColorx")) == NULL) || r; - r = ((glClearDepthx = (PFNGLCLEARDEPTHXPROC)glewGetProcAddress((const GLubyte*)"glClearDepthx")) == NULL) || r; - r = ((glColor4x = (PFNGLCOLOR4XPROC)glewGetProcAddress((const GLubyte*)"glColor4x")) == NULL) || r; - r = ((glDepthRangex = (PFNGLDEPTHRANGEXPROC)glewGetProcAddress((const GLubyte*)"glDepthRangex")) == NULL) || r; - r = ((glFogx = (PFNGLFOGXPROC)glewGetProcAddress((const GLubyte*)"glFogx")) == NULL) || r; - r = ((glFogxv = (PFNGLFOGXVPROC)glewGetProcAddress((const GLubyte*)"glFogxv")) == NULL) || r; - r = ((glFrustumf = (PFNGLFRUSTUMFPROC)glewGetProcAddress((const GLubyte*)"glFrustumf")) == NULL) || r; - r = ((glFrustumx = (PFNGLFRUSTUMXPROC)glewGetProcAddress((const GLubyte*)"glFrustumx")) == NULL) || r; - r = ((glLightModelx = (PFNGLLIGHTMODELXPROC)glewGetProcAddress((const GLubyte*)"glLightModelx")) == NULL) || r; - r = ((glLightModelxv = (PFNGLLIGHTMODELXVPROC)glewGetProcAddress((const GLubyte*)"glLightModelxv")) == NULL) || r; - r = ((glLightx = (PFNGLLIGHTXPROC)glewGetProcAddress((const GLubyte*)"glLightx")) == NULL) || r; - r = ((glLightxv = (PFNGLLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glLightxv")) == NULL) || r; - r = ((glLineWidthx = (PFNGLLINEWIDTHXPROC)glewGetProcAddress((const GLubyte*)"glLineWidthx")) == NULL) || r; - r = ((glLoadMatrixx = (PFNGLLOADMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glLoadMatrixx")) == NULL) || r; - r = ((glMaterialx = (PFNGLMATERIALXPROC)glewGetProcAddress((const GLubyte*)"glMaterialx")) == NULL) || r; - r = ((glMaterialxv = (PFNGLMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glMaterialxv")) == NULL) || r; - r = ((glMultMatrixx = (PFNGLMULTMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glMultMatrixx")) == NULL) || r; - r = ((glMultiTexCoord4x = (PFNGLMULTITEXCOORD4XPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4x")) == NULL) || r; - r = ((glNormal3x = (PFNGLNORMAL3XPROC)glewGetProcAddress((const GLubyte*)"glNormal3x")) == NULL) || r; - r = ((glOrthof = (PFNGLORTHOFPROC)glewGetProcAddress((const GLubyte*)"glOrthof")) == NULL) || r; - r = ((glOrthox = (PFNGLORTHOXPROC)glewGetProcAddress((const GLubyte*)"glOrthox")) == NULL) || r; - r = ((glPointSizex = (PFNGLPOINTSIZEXPROC)glewGetProcAddress((const GLubyte*)"glPointSizex")) == NULL) || r; - r = ((glPolygonOffsetx = (PFNGLPOLYGONOFFSETXPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetx")) == NULL) || r; - r = ((glRotatex = (PFNGLROTATEXPROC)glewGetProcAddress((const GLubyte*)"glRotatex")) == NULL) || r; - r = ((glSampleCoveragex = (PFNGLSAMPLECOVERAGEXPROC)glewGetProcAddress((const GLubyte*)"glSampleCoveragex")) == NULL) || r; - r = ((glScalex = (PFNGLSCALEXPROC)glewGetProcAddress((const GLubyte*)"glScalex")) == NULL) || r; - r = ((glTexEnvx = (PFNGLTEXENVXPROC)glewGetProcAddress((const GLubyte*)"glTexEnvx")) == NULL) || r; - r = ((glTexEnvxv = (PFNGLTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glTexEnvxv")) == NULL) || r; - r = ((glTexParameterx = (PFNGLTEXPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glTexParameterx")) == NULL) || r; - r = ((glTranslatex = (PFNGLTRANSLATEXPROC)glewGetProcAddress((const GLubyte*)"glTranslatex")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_ES1_0_compatibility */ - -#ifdef GL_REGAL_ES1_1_compatibility - -static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClipPlanef = (PFNGLCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glClipPlanef")) == NULL) || r; - r = ((glClipPlanex = (PFNGLCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glClipPlanex")) == NULL) || r; - r = ((glGetClipPlanef = (PFNGLGETCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanef")) == NULL) || r; - r = ((glGetClipPlanex = (PFNGLGETCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanex")) == NULL) || r; - r = ((glGetFixedv = (PFNGLGETFIXEDVPROC)glewGetProcAddress((const GLubyte*)"glGetFixedv")) == NULL) || r; - r = ((glGetLightxv = (PFNGLGETLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glGetLightxv")) == NULL) || r; - r = ((glGetMaterialxv = (PFNGLGETMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glGetMaterialxv")) == NULL) || r; - r = ((glGetTexEnvxv = (PFNGLGETTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexEnvxv")) == NULL) || r; - r = ((glGetTexParameterxv = (PFNGLGETTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterxv")) == NULL) || r; - r = ((glPointParameterx = (PFNGLPOINTPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glPointParameterx")) == NULL) || r; - r = ((glPointParameterxv = (PFNGLPOINTPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterxv")) == NULL) || r; - r = ((glPointSizePointerOES = (PFNGLPOINTSIZEPOINTEROESPROC)glewGetProcAddress((const GLubyte*)"glPointSizePointerOES")) == NULL) || r; - r = ((glTexParameterxv = (PFNGLTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterxv")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_ES1_1_compatibility */ - -#ifdef GL_REGAL_enable - -#endif /* GL_REGAL_enable */ - -#ifdef GL_REGAL_error_string - -static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glErrorStringREGAL = (PFNGLERRORSTRINGREGALPROC)glewGetProcAddress((const GLubyte*)"glErrorStringREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_error_string */ - -#ifdef GL_REGAL_extension_query - -static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetExtensionREGAL = (PFNGLGETEXTENSIONREGALPROC)glewGetProcAddress((const GLubyte*)"glGetExtensionREGAL")) == NULL) || r; - r = ((glIsSupportedREGAL = (PFNGLISSUPPORTEDREGALPROC)glewGetProcAddress((const GLubyte*)"glIsSupportedREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_extension_query */ - -#ifdef GL_REGAL_log - -static GLboolean _glewInit_GL_REGAL_log (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLogMessageCallbackREGAL = (PFNGLLOGMESSAGECALLBACKREGALPROC)glewGetProcAddress((const GLubyte*)"glLogMessageCallbackREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_log */ - -#ifdef GL_REND_screen_coordinates - -#endif /* GL_REND_screen_coordinates */ - -#ifdef GL_S3_s3tc - -#endif /* GL_S3_s3tc */ - -#ifdef GL_SGIS_color_range - -#endif /* GL_SGIS_color_range */ - -#ifdef GL_SGIS_detail_texture - -static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glDetailTexFuncSGIS")) == NULL) || r; - r = ((glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetDetailTexFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_detail_texture */ - -#ifdef GL_SGIS_fog_function - -static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glFogFuncSGIS")) == NULL) || r; - r = ((glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetFogFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_fog_function */ - -#ifdef GL_SGIS_generate_mipmap - -#endif /* GL_SGIS_generate_mipmap */ - -#ifdef GL_SGIS_multisample - -static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskSGIS")) == NULL) || r; - r = ((glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_multisample */ - -#ifdef GL_SGIS_pixel_texture - -#endif /* GL_SGIS_pixel_texture */ - -#ifdef GL_SGIS_point_line_texgen - -#endif /* GL_SGIS_point_line_texgen */ - -#ifdef GL_SGIS_sharpen_texture - -static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetSharpenTexFuncSGIS")) == NULL) || r; - r = ((glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glSharpenTexFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_sharpen_texture */ - -#ifdef GL_SGIS_texture4D - -static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexImage4DSGIS")) == NULL) || r; - r = ((glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage4DSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_texture4D */ - -#ifdef GL_SGIS_texture_border_clamp - -#endif /* GL_SGIS_texture_border_clamp */ - -#ifdef GL_SGIS_texture_edge_clamp - -#endif /* GL_SGIS_texture_edge_clamp */ - -#ifdef GL_SGIS_texture_filter4 - -static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetTexFilterFuncSGIS")) == NULL) || r; - r = ((glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glTexFilterFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_texture_filter4 */ - -#ifdef GL_SGIS_texture_lod - -#endif /* GL_SGIS_texture_lod */ - -#ifdef GL_SGIS_texture_select - -#endif /* GL_SGIS_texture_select */ - -#ifdef GL_SGIX_async - -static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glAsyncMarkerSGIX")) == NULL) || r; - r = ((glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glDeleteAsyncMarkersSGIX")) == NULL) || r; - r = ((glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glFinishAsyncSGIX")) == NULL) || r; - r = ((glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glGenAsyncMarkersSGIX")) == NULL) || r; - r = ((glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glIsAsyncMarkerSGIX")) == NULL) || r; - r = ((glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glPollAsyncSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_async */ - -#ifdef GL_SGIX_async_histogram - -#endif /* GL_SGIX_async_histogram */ - -#ifdef GL_SGIX_async_pixel - -#endif /* GL_SGIX_async_pixel */ - -#ifdef GL_SGIX_blend_alpha_minmax - -#endif /* GL_SGIX_blend_alpha_minmax */ - -#ifdef GL_SGIX_clipmap - -#endif /* GL_SGIX_clipmap */ - -#ifdef GL_SGIX_convolution_accuracy - -#endif /* GL_SGIX_convolution_accuracy */ - -#ifdef GL_SGIX_depth_texture - -#endif /* GL_SGIX_depth_texture */ - -#ifdef GL_SGIX_flush_raster - -static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)glewGetProcAddress((const GLubyte*)"glFlushRasterSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_flush_raster */ - -#ifdef GL_SGIX_fog_offset - -#endif /* GL_SGIX_fog_offset */ - -#ifdef GL_SGIX_fog_texture - -static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureFogSGIX = (PFNGLTEXTUREFOGSGIXPROC)glewGetProcAddress((const GLubyte*)"glTextureFogSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_fog_texture */ - -#ifdef GL_SGIX_fragment_specular_lighting - -static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialSGIX")) == NULL) || r; - r = ((glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfSGIX")) == NULL) || r; - r = ((glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvSGIX")) == NULL) || r; - r = ((glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliSGIX")) == NULL) || r; - r = ((glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivSGIX")) == NULL) || r; - r = ((glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfSGIX")) == NULL) || r; - r = ((glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvSGIX")) == NULL) || r; - r = ((glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiSGIX")) == NULL) || r; - r = ((glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivSGIX")) == NULL) || r; - r = ((glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfSGIX")) == NULL) || r; - r = ((glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvSGIX")) == NULL) || r; - r = ((glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiSGIX")) == NULL) || r; - r = ((glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivSGIX")) == NULL) || r; - r = ((glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvSGIX")) == NULL) || r; - r = ((glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivSGIX")) == NULL) || r; - r = ((glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvSGIX")) == NULL) || r; - r = ((glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_fragment_specular_lighting */ - -#ifdef GL_SGIX_framezoom - -static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)glewGetProcAddress((const GLubyte*)"glFrameZoomSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_framezoom */ - -#ifdef GL_SGIX_interlace - -#endif /* GL_SGIX_interlace */ - -#ifdef GL_SGIX_ir_instrument1 - -#endif /* GL_SGIX_ir_instrument1 */ - -#ifdef GL_SGIX_list_priority - -#endif /* GL_SGIX_list_priority */ - -#ifdef GL_SGIX_pixel_texture - -static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)glewGetProcAddress((const GLubyte*)"glPixelTexGenSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_pixel_texture */ - -#ifdef GL_SGIX_pixel_texture_bits - -#endif /* GL_SGIX_pixel_texture_bits */ - -#ifdef GL_SGIX_reference_plane - -static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)glewGetProcAddress((const GLubyte*)"glReferencePlaneSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_reference_plane */ - -#ifdef GL_SGIX_resample - -#endif /* GL_SGIX_resample */ - -#ifdef GL_SGIX_shadow - -#endif /* GL_SGIX_shadow */ - -#ifdef GL_SGIX_shadow_ambient - -#endif /* GL_SGIX_shadow_ambient */ - -#ifdef GL_SGIX_sprite - -static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfSGIX")) == NULL) || r; - r = ((glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfvSGIX")) == NULL) || r; - r = ((glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameteriSGIX")) == NULL) || r; - r = ((glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterivSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_sprite */ - -#ifdef GL_SGIX_tag_sample_buffer - -static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glTagSampleBufferSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_tag_sample_buffer */ - -#ifdef GL_SGIX_texture_add_env - -#endif /* GL_SGIX_texture_add_env */ - -#ifdef GL_SGIX_texture_coordinate_clamp - -#endif /* GL_SGIX_texture_coordinate_clamp */ - -#ifdef GL_SGIX_texture_lod_bias - -#endif /* GL_SGIX_texture_lod_bias */ - -#ifdef GL_SGIX_texture_multi_buffer - -#endif /* GL_SGIX_texture_multi_buffer */ - -#ifdef GL_SGIX_texture_range - -#endif /* GL_SGIX_texture_range */ - -#ifdef GL_SGIX_texture_scale_bias - -#endif /* GL_SGIX_texture_scale_bias */ - -#ifdef GL_SGIX_vertex_preclip - -#endif /* GL_SGIX_vertex_preclip */ - -#ifdef GL_SGIX_vertex_preclip_hint - -#endif /* GL_SGIX_vertex_preclip_hint */ - -#ifdef GL_SGIX_ycrcb - -#endif /* GL_SGIX_ycrcb */ - -#ifdef GL_SGI_color_matrix - -#endif /* GL_SGI_color_matrix */ - -#ifdef GL_SGI_color_table - -static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfvSGI")) == NULL) || r; - r = ((glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterivSGI")) == NULL) || r; - r = ((glColorTableSGI = (PFNGLCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableSGI")) == NULL) || r; - r = ((glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTableSGI")) == NULL) || r; - r = ((glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvSGI")) == NULL) || r; - r = ((glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivSGI")) == NULL) || r; - r = ((glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableSGI")) == NULL) || r; - - return r; -} - -#endif /* GL_SGI_color_table */ - -#ifdef GL_SGI_texture_color_table - -#endif /* GL_SGI_texture_color_table */ - -#ifdef GL_SUNX_constant_data - -static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)glewGetProcAddress((const GLubyte*)"glFinishTextureSUNX")) == NULL) || r; - - return r; -} - -#endif /* GL_SUNX_constant_data */ - -#ifdef GL_SUN_convolution_border_modes - -#endif /* GL_SUN_convolution_border_modes */ - -#ifdef GL_SUN_global_alpha - -static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorbSUN")) == NULL) || r; - r = ((glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactordSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorfSUN")) == NULL) || r; - r = ((glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoriSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorsSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorubSUN")) == NULL) || r; - r = ((glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoruiSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorusSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_global_alpha */ - -#ifdef GL_SUN_mesh_array - -#endif /* GL_SUN_mesh_array */ - -#ifdef GL_SUN_read_video_pixels - -static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReadVideoPixelsSUN = (PFNGLREADVIDEOPIXELSSUNPROC)glewGetProcAddress((const GLubyte*)"glReadVideoPixelsSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_read_video_pixels */ - -#ifdef GL_SUN_slice_accum - -#endif /* GL_SUN_slice_accum */ - -#ifdef GL_SUN_triangle_list - -static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodePointerSUN")) == NULL) || r; - r = ((glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubSUN")) == NULL) || r; - r = ((glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubvSUN")) == NULL) || r; - r = ((glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiSUN")) == NULL) || r; - r = ((glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuivSUN")) == NULL) || r; - r = ((glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusSUN")) == NULL) || r; - r = ((glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusvSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_triangle_list */ - -#ifdef GL_SUN_vertex - -static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fSUN")) == NULL) || r; - r = ((glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fvSUN")) == NULL) || r; - r = ((glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fSUN")) == NULL) || r; - r = ((glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fvSUN")) == NULL) || r; - r = ((glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fSUN")) == NULL) || r; - r = ((glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fSUN")) == NULL) || r; - r = ((glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fSUN")) == NULL) || r; - r = ((glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fvSUN")) == NULL) || r; - r = ((glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fSUN")) == NULL) || r; - r = ((glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fvSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_vertex */ - -#ifdef GL_WIN_phong_shading - -#endif /* GL_WIN_phong_shading */ - -#ifdef GL_WIN_specular_fog - -#endif /* GL_WIN_specular_fog */ - -#ifdef GL_WIN_swap_hint - -static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAddSwapHintRectWIN = (PFNGLADDSWAPHINTRECTWINPROC)glewGetProcAddress((const GLubyte*)"glAddSwapHintRectWIN")) == NULL) || r; - - return r; -} - -#endif /* GL_WIN_swap_hint */ - -/* ------------------------------------------------------------------------- */ - -GLboolean GLEWAPIENTRY glewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - start = (const GLubyte*)glGetString(GL_EXTENSIONS); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -/* ------------------------------------------------------------------------- */ - -#ifndef GLEW_MX -static -#endif -GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) -{ - const GLubyte* s; - GLuint dot; - GLint major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* query opengl version */ - s = glGetString(GL_VERSION); - dot = _glewStrCLen(s, '.'); - if (dot == 0) - return GLEW_ERROR_NO_GL_VERSION; - - major = s[dot-1]-'0'; - minor = s[dot+1]-'0'; - - if (minor < 0 || minor > 9) - minor = 0; - if (major<0 || major>9) - return GLEW_ERROR_NO_GL_VERSION; - - - if (major == 1 && minor == 0) - { - return GLEW_ERROR_GL_VERSION_10_ONLY; - } - else - { - CONST_CAST(GLEW_VERSION_4_4) = ( major > 4 ) || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_3) = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_3) = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_2) = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_1) = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_0) = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_1) = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_0) = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_5) = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_4) = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_3) = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2_1) = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2) = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - } - - /* query opengl extensions string */ - extStart = glGetString(GL_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte*)""; - extEnd = extStart + _glewStrLen(extStart); - - /* initialize extensions */ -#ifdef GL_VERSION_1_2 - if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_2 */ -#ifdef GL_VERSION_1_2_1 -#endif /* GL_VERSION_1_2_1 */ -#ifdef GL_VERSION_1_3 - if (glewExperimental || GLEW_VERSION_1_3) CONST_CAST(GLEW_VERSION_1_3) = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_3 */ -#ifdef GL_VERSION_1_4 - if (glewExperimental || GLEW_VERSION_1_4) CONST_CAST(GLEW_VERSION_1_4) = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_4 */ -#ifdef GL_VERSION_1_5 - if (glewExperimental || GLEW_VERSION_1_5) CONST_CAST(GLEW_VERSION_1_5) = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_5 */ -#ifdef GL_VERSION_2_0 - if (glewExperimental || GLEW_VERSION_2_0) CONST_CAST(GLEW_VERSION_2_0) = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_2_0 */ -#ifdef GL_VERSION_2_1 - if (glewExperimental || GLEW_VERSION_2_1) CONST_CAST(GLEW_VERSION_2_1) = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_2_1 */ -#ifdef GL_VERSION_3_0 - if (glewExperimental || GLEW_VERSION_3_0) CONST_CAST(GLEW_VERSION_3_0) = !_glewInit_GL_VERSION_3_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_0 */ -#ifdef GL_VERSION_3_1 - if (glewExperimental || GLEW_VERSION_3_1) CONST_CAST(GLEW_VERSION_3_1) = !_glewInit_GL_VERSION_3_1(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_1 */ -#ifdef GL_VERSION_3_2 - if (glewExperimental || GLEW_VERSION_3_2) CONST_CAST(GLEW_VERSION_3_2) = !_glewInit_GL_VERSION_3_2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_2 */ -#ifdef GL_VERSION_3_3 - if (glewExperimental || GLEW_VERSION_3_3) CONST_CAST(GLEW_VERSION_3_3) = !_glewInit_GL_VERSION_3_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_3 */ -#ifdef GL_VERSION_4_0 - if (glewExperimental || GLEW_VERSION_4_0) CONST_CAST(GLEW_VERSION_4_0) = !_glewInit_GL_VERSION_4_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_4_0 */ -#ifdef GL_VERSION_4_1 -#endif /* GL_VERSION_4_1 */ -#ifdef GL_VERSION_4_2 -#endif /* GL_VERSION_4_2 */ -#ifdef GL_VERSION_4_3 -#endif /* GL_VERSION_4_3 */ -#ifdef GL_VERSION_4_4 -#endif /* GL_VERSION_4_4 */ -#ifdef GL_3DFX_multisample - CONST_CAST(GLEW_3DFX_multisample) = _glewSearchExtension("GL_3DFX_multisample", extStart, extEnd); -#endif /* GL_3DFX_multisample */ -#ifdef GL_3DFX_tbuffer - CONST_CAST(GLEW_3DFX_tbuffer) = _glewSearchExtension("GL_3DFX_tbuffer", extStart, extEnd); - if (glewExperimental || GLEW_3DFX_tbuffer) CONST_CAST(GLEW_3DFX_tbuffer) = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_3DFX_tbuffer */ -#ifdef GL_3DFX_texture_compression_FXT1 - CONST_CAST(GLEW_3DFX_texture_compression_FXT1) = _glewSearchExtension("GL_3DFX_texture_compression_FXT1", extStart, extEnd); -#endif /* GL_3DFX_texture_compression_FXT1 */ -#ifdef GL_AMD_blend_minmax_factor - CONST_CAST(GLEW_AMD_blend_minmax_factor) = _glewSearchExtension("GL_AMD_blend_minmax_factor", extStart, extEnd); -#endif /* GL_AMD_blend_minmax_factor */ -#ifdef GL_AMD_conservative_depth - CONST_CAST(GLEW_AMD_conservative_depth) = _glewSearchExtension("GL_AMD_conservative_depth", extStart, extEnd); -#endif /* GL_AMD_conservative_depth */ -#ifdef GL_AMD_debug_output - CONST_CAST(GLEW_AMD_debug_output) = _glewSearchExtension("GL_AMD_debug_output", extStart, extEnd); - if (glewExperimental || GLEW_AMD_debug_output) CONST_CAST(GLEW_AMD_debug_output) = !_glewInit_GL_AMD_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_debug_output */ -#ifdef GL_AMD_depth_clamp_separate - CONST_CAST(GLEW_AMD_depth_clamp_separate) = _glewSearchExtension("GL_AMD_depth_clamp_separate", extStart, extEnd); -#endif /* GL_AMD_depth_clamp_separate */ -#ifdef GL_AMD_draw_buffers_blend - CONST_CAST(GLEW_AMD_draw_buffers_blend) = _glewSearchExtension("GL_AMD_draw_buffers_blend", extStart, extEnd); - if (glewExperimental || GLEW_AMD_draw_buffers_blend) CONST_CAST(GLEW_AMD_draw_buffers_blend) = !_glewInit_GL_AMD_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_draw_buffers_blend */ -#ifdef GL_AMD_interleaved_elements - CONST_CAST(GLEW_AMD_interleaved_elements) = _glewSearchExtension("GL_AMD_interleaved_elements", extStart, extEnd); - if (glewExperimental || GLEW_AMD_interleaved_elements) CONST_CAST(GLEW_AMD_interleaved_elements) = !_glewInit_GL_AMD_interleaved_elements(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_interleaved_elements */ -#ifdef GL_AMD_multi_draw_indirect - CONST_CAST(GLEW_AMD_multi_draw_indirect) = _glewSearchExtension("GL_AMD_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_AMD_multi_draw_indirect) CONST_CAST(GLEW_AMD_multi_draw_indirect) = !_glewInit_GL_AMD_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_multi_draw_indirect */ -#ifdef GL_AMD_name_gen_delete - CONST_CAST(GLEW_AMD_name_gen_delete) = _glewSearchExtension("GL_AMD_name_gen_delete", extStart, extEnd); - if (glewExperimental || GLEW_AMD_name_gen_delete) CONST_CAST(GLEW_AMD_name_gen_delete) = !_glewInit_GL_AMD_name_gen_delete(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_name_gen_delete */ -#ifdef GL_AMD_performance_monitor - CONST_CAST(GLEW_AMD_performance_monitor) = _glewSearchExtension("GL_AMD_performance_monitor", extStart, extEnd); - if (glewExperimental || GLEW_AMD_performance_monitor) CONST_CAST(GLEW_AMD_performance_monitor) = !_glewInit_GL_AMD_performance_monitor(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_performance_monitor */ -#ifdef GL_AMD_pinned_memory - CONST_CAST(GLEW_AMD_pinned_memory) = _glewSearchExtension("GL_AMD_pinned_memory", extStart, extEnd); -#endif /* GL_AMD_pinned_memory */ -#ifdef GL_AMD_query_buffer_object - CONST_CAST(GLEW_AMD_query_buffer_object) = _glewSearchExtension("GL_AMD_query_buffer_object", extStart, extEnd); -#endif /* GL_AMD_query_buffer_object */ -#ifdef GL_AMD_sample_positions - CONST_CAST(GLEW_AMD_sample_positions) = _glewSearchExtension("GL_AMD_sample_positions", extStart, extEnd); - if (glewExperimental || GLEW_AMD_sample_positions) CONST_CAST(GLEW_AMD_sample_positions) = !_glewInit_GL_AMD_sample_positions(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_sample_positions */ -#ifdef GL_AMD_seamless_cubemap_per_texture - CONST_CAST(GLEW_AMD_seamless_cubemap_per_texture) = _glewSearchExtension("GL_AMD_seamless_cubemap_per_texture", extStart, extEnd); -#endif /* GL_AMD_seamless_cubemap_per_texture */ -#ifdef GL_AMD_shader_stencil_export - CONST_CAST(GLEW_AMD_shader_stencil_export) = _glewSearchExtension("GL_AMD_shader_stencil_export", extStart, extEnd); -#endif /* GL_AMD_shader_stencil_export */ -#ifdef GL_AMD_shader_trinary_minmax - CONST_CAST(GLEW_AMD_shader_trinary_minmax) = _glewSearchExtension("GL_AMD_shader_trinary_minmax", extStart, extEnd); -#endif /* GL_AMD_shader_trinary_minmax */ -#ifdef GL_AMD_sparse_texture - CONST_CAST(GLEW_AMD_sparse_texture) = _glewSearchExtension("GL_AMD_sparse_texture", extStart, extEnd); - if (glewExperimental || GLEW_AMD_sparse_texture) CONST_CAST(GLEW_AMD_sparse_texture) = !_glewInit_GL_AMD_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_sparse_texture */ -#ifdef GL_AMD_stencil_operation_extended - CONST_CAST(GLEW_AMD_stencil_operation_extended) = _glewSearchExtension("GL_AMD_stencil_operation_extended", extStart, extEnd); - if (glewExperimental || GLEW_AMD_stencil_operation_extended) CONST_CAST(GLEW_AMD_stencil_operation_extended) = !_glewInit_GL_AMD_stencil_operation_extended(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_stencil_operation_extended */ -#ifdef GL_AMD_texture_texture4 - CONST_CAST(GLEW_AMD_texture_texture4) = _glewSearchExtension("GL_AMD_texture_texture4", extStart, extEnd); -#endif /* GL_AMD_texture_texture4 */ -#ifdef GL_AMD_transform_feedback3_lines_triangles - CONST_CAST(GLEW_AMD_transform_feedback3_lines_triangles) = _glewSearchExtension("GL_AMD_transform_feedback3_lines_triangles", extStart, extEnd); -#endif /* GL_AMD_transform_feedback3_lines_triangles */ -#ifdef GL_AMD_vertex_shader_layer - CONST_CAST(GLEW_AMD_vertex_shader_layer) = _glewSearchExtension("GL_AMD_vertex_shader_layer", extStart, extEnd); -#endif /* GL_AMD_vertex_shader_layer */ -#ifdef GL_AMD_vertex_shader_tessellator - CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = _glewSearchExtension("GL_AMD_vertex_shader_tessellator", extStart, extEnd); - if (glewExperimental || GLEW_AMD_vertex_shader_tessellator) CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = !_glewInit_GL_AMD_vertex_shader_tessellator(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_vertex_shader_tessellator */ -#ifdef GL_AMD_vertex_shader_viewport_index - CONST_CAST(GLEW_AMD_vertex_shader_viewport_index) = _glewSearchExtension("GL_AMD_vertex_shader_viewport_index", extStart, extEnd); -#endif /* GL_AMD_vertex_shader_viewport_index */ -#ifdef GL_ANGLE_depth_texture - CONST_CAST(GLEW_ANGLE_depth_texture) = _glewSearchExtension("GL_ANGLE_depth_texture", extStart, extEnd); -#endif /* GL_ANGLE_depth_texture */ -#ifdef GL_ANGLE_framebuffer_blit - CONST_CAST(GLEW_ANGLE_framebuffer_blit) = _glewSearchExtension("GL_ANGLE_framebuffer_blit", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_framebuffer_blit) CONST_CAST(GLEW_ANGLE_framebuffer_blit) = !_glewInit_GL_ANGLE_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_framebuffer_blit */ -#ifdef GL_ANGLE_framebuffer_multisample - CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = _glewSearchExtension("GL_ANGLE_framebuffer_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_framebuffer_multisample) CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = !_glewInit_GL_ANGLE_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_framebuffer_multisample */ -#ifdef GL_ANGLE_instanced_arrays - CONST_CAST(GLEW_ANGLE_instanced_arrays) = _glewSearchExtension("GL_ANGLE_instanced_arrays", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_instanced_arrays) CONST_CAST(GLEW_ANGLE_instanced_arrays) = !_glewInit_GL_ANGLE_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_instanced_arrays */ -#ifdef GL_ANGLE_pack_reverse_row_order - CONST_CAST(GLEW_ANGLE_pack_reverse_row_order) = _glewSearchExtension("GL_ANGLE_pack_reverse_row_order", extStart, extEnd); -#endif /* GL_ANGLE_pack_reverse_row_order */ -#ifdef GL_ANGLE_program_binary - CONST_CAST(GLEW_ANGLE_program_binary) = _glewSearchExtension("GL_ANGLE_program_binary", extStart, extEnd); -#endif /* GL_ANGLE_program_binary */ -#ifdef GL_ANGLE_texture_compression_dxt1 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt1) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt1", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt1 */ -#ifdef GL_ANGLE_texture_compression_dxt3 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt3) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt3", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt3 */ -#ifdef GL_ANGLE_texture_compression_dxt5 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt5) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt5", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt5 */ -#ifdef GL_ANGLE_texture_usage - CONST_CAST(GLEW_ANGLE_texture_usage) = _glewSearchExtension("GL_ANGLE_texture_usage", extStart, extEnd); -#endif /* GL_ANGLE_texture_usage */ -#ifdef GL_ANGLE_timer_query - CONST_CAST(GLEW_ANGLE_timer_query) = _glewSearchExtension("GL_ANGLE_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_timer_query) CONST_CAST(GLEW_ANGLE_timer_query) = !_glewInit_GL_ANGLE_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_timer_query */ -#ifdef GL_ANGLE_translated_shader_source - CONST_CAST(GLEW_ANGLE_translated_shader_source) = _glewSearchExtension("GL_ANGLE_translated_shader_source", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_translated_shader_source) CONST_CAST(GLEW_ANGLE_translated_shader_source) = !_glewInit_GL_ANGLE_translated_shader_source(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_translated_shader_source */ -#ifdef GL_APPLE_aux_depth_stencil - CONST_CAST(GLEW_APPLE_aux_depth_stencil) = _glewSearchExtension("GL_APPLE_aux_depth_stencil", extStart, extEnd); -#endif /* GL_APPLE_aux_depth_stencil */ -#ifdef GL_APPLE_client_storage - CONST_CAST(GLEW_APPLE_client_storage) = _glewSearchExtension("GL_APPLE_client_storage", extStart, extEnd); -#endif /* GL_APPLE_client_storage */ -#ifdef GL_APPLE_element_array - CONST_CAST(GLEW_APPLE_element_array) = _glewSearchExtension("GL_APPLE_element_array", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_element_array) CONST_CAST(GLEW_APPLE_element_array) = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_element_array */ -#ifdef GL_APPLE_fence - CONST_CAST(GLEW_APPLE_fence) = _glewSearchExtension("GL_APPLE_fence", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_fence) CONST_CAST(GLEW_APPLE_fence) = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_fence */ -#ifdef GL_APPLE_float_pixels - CONST_CAST(GLEW_APPLE_float_pixels) = _glewSearchExtension("GL_APPLE_float_pixels", extStart, extEnd); -#endif /* GL_APPLE_float_pixels */ -#ifdef GL_APPLE_flush_buffer_range - CONST_CAST(GLEW_APPLE_flush_buffer_range) = _glewSearchExtension("GL_APPLE_flush_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_flush_buffer_range) CONST_CAST(GLEW_APPLE_flush_buffer_range) = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_flush_buffer_range */ -#ifdef GL_APPLE_object_purgeable - CONST_CAST(GLEW_APPLE_object_purgeable) = _glewSearchExtension("GL_APPLE_object_purgeable", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_object_purgeable) CONST_CAST(GLEW_APPLE_object_purgeable) = !_glewInit_GL_APPLE_object_purgeable(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_object_purgeable */ -#ifdef GL_APPLE_pixel_buffer - CONST_CAST(GLEW_APPLE_pixel_buffer) = _glewSearchExtension("GL_APPLE_pixel_buffer", extStart, extEnd); -#endif /* GL_APPLE_pixel_buffer */ -#ifdef GL_APPLE_rgb_422 - CONST_CAST(GLEW_APPLE_rgb_422) = _glewSearchExtension("GL_APPLE_rgb_422", extStart, extEnd); -#endif /* GL_APPLE_rgb_422 */ -#ifdef GL_APPLE_row_bytes - CONST_CAST(GLEW_APPLE_row_bytes) = _glewSearchExtension("GL_APPLE_row_bytes", extStart, extEnd); -#endif /* GL_APPLE_row_bytes */ -#ifdef GL_APPLE_specular_vector - CONST_CAST(GLEW_APPLE_specular_vector) = _glewSearchExtension("GL_APPLE_specular_vector", extStart, extEnd); -#endif /* GL_APPLE_specular_vector */ -#ifdef GL_APPLE_texture_range - CONST_CAST(GLEW_APPLE_texture_range) = _glewSearchExtension("GL_APPLE_texture_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_texture_range) CONST_CAST(GLEW_APPLE_texture_range) = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_texture_range */ -#ifdef GL_APPLE_transform_hint - CONST_CAST(GLEW_APPLE_transform_hint) = _glewSearchExtension("GL_APPLE_transform_hint", extStart, extEnd); -#endif /* GL_APPLE_transform_hint */ -#ifdef GL_APPLE_vertex_array_object - CONST_CAST(GLEW_APPLE_vertex_array_object) = _glewSearchExtension("GL_APPLE_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_array_object) CONST_CAST(GLEW_APPLE_vertex_array_object) = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_array_object */ -#ifdef GL_APPLE_vertex_array_range - CONST_CAST(GLEW_APPLE_vertex_array_range) = _glewSearchExtension("GL_APPLE_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_array_range) CONST_CAST(GLEW_APPLE_vertex_array_range) = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_array_range */ -#ifdef GL_APPLE_vertex_program_evaluators - CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = _glewSearchExtension("GL_APPLE_vertex_program_evaluators", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_program_evaluators) CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = !_glewInit_GL_APPLE_vertex_program_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_program_evaluators */ -#ifdef GL_APPLE_ycbcr_422 - CONST_CAST(GLEW_APPLE_ycbcr_422) = _glewSearchExtension("GL_APPLE_ycbcr_422", extStart, extEnd); -#endif /* GL_APPLE_ycbcr_422 */ -#ifdef GL_ARB_ES2_compatibility - CONST_CAST(GLEW_ARB_ES2_compatibility) = _glewSearchExtension("GL_ARB_ES2_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_ARB_ES2_compatibility) CONST_CAST(GLEW_ARB_ES2_compatibility) = !_glewInit_GL_ARB_ES2_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_ES2_compatibility */ -#ifdef GL_ARB_ES3_compatibility - CONST_CAST(GLEW_ARB_ES3_compatibility) = _glewSearchExtension("GL_ARB_ES3_compatibility", extStart, extEnd); -#endif /* GL_ARB_ES3_compatibility */ -#ifdef GL_ARB_arrays_of_arrays - CONST_CAST(GLEW_ARB_arrays_of_arrays) = _glewSearchExtension("GL_ARB_arrays_of_arrays", extStart, extEnd); -#endif /* GL_ARB_arrays_of_arrays */ -#ifdef GL_ARB_base_instance - CONST_CAST(GLEW_ARB_base_instance) = _glewSearchExtension("GL_ARB_base_instance", extStart, extEnd); - if (glewExperimental || GLEW_ARB_base_instance) CONST_CAST(GLEW_ARB_base_instance) = !_glewInit_GL_ARB_base_instance(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_base_instance */ -#ifdef GL_ARB_bindless_texture - CONST_CAST(GLEW_ARB_bindless_texture) = _glewSearchExtension("GL_ARB_bindless_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_bindless_texture) CONST_CAST(GLEW_ARB_bindless_texture) = !_glewInit_GL_ARB_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_bindless_texture */ -#ifdef GL_ARB_blend_func_extended - CONST_CAST(GLEW_ARB_blend_func_extended) = _glewSearchExtension("GL_ARB_blend_func_extended", extStart, extEnd); - if (glewExperimental || GLEW_ARB_blend_func_extended) CONST_CAST(GLEW_ARB_blend_func_extended) = !_glewInit_GL_ARB_blend_func_extended(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_blend_func_extended */ -#ifdef GL_ARB_buffer_storage - CONST_CAST(GLEW_ARB_buffer_storage) = _glewSearchExtension("GL_ARB_buffer_storage", extStart, extEnd); - if (glewExperimental || GLEW_ARB_buffer_storage) CONST_CAST(GLEW_ARB_buffer_storage) = !_glewInit_GL_ARB_buffer_storage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_buffer_storage */ -#ifdef GL_ARB_cl_event - CONST_CAST(GLEW_ARB_cl_event) = _glewSearchExtension("GL_ARB_cl_event", extStart, extEnd); - if (glewExperimental || GLEW_ARB_cl_event) CONST_CAST(GLEW_ARB_cl_event) = !_glewInit_GL_ARB_cl_event(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_cl_event */ -#ifdef GL_ARB_clear_buffer_object - CONST_CAST(GLEW_ARB_clear_buffer_object) = _glewSearchExtension("GL_ARB_clear_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_clear_buffer_object) CONST_CAST(GLEW_ARB_clear_buffer_object) = !_glewInit_GL_ARB_clear_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_clear_buffer_object */ -#ifdef GL_ARB_clear_texture - CONST_CAST(GLEW_ARB_clear_texture) = _glewSearchExtension("GL_ARB_clear_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_clear_texture) CONST_CAST(GLEW_ARB_clear_texture) = !_glewInit_GL_ARB_clear_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_clear_texture */ -#ifdef GL_ARB_color_buffer_float - CONST_CAST(GLEW_ARB_color_buffer_float) = _glewSearchExtension("GL_ARB_color_buffer_float", extStart, extEnd); - if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_color_buffer_float */ -#ifdef GL_ARB_compatibility - CONST_CAST(GLEW_ARB_compatibility) = _glewSearchExtension("GL_ARB_compatibility", extStart, extEnd); -#endif /* GL_ARB_compatibility */ -#ifdef GL_ARB_compressed_texture_pixel_storage - CONST_CAST(GLEW_ARB_compressed_texture_pixel_storage) = _glewSearchExtension("GL_ARB_compressed_texture_pixel_storage", extStart, extEnd); -#endif /* GL_ARB_compressed_texture_pixel_storage */ -#ifdef GL_ARB_compute_shader - CONST_CAST(GLEW_ARB_compute_shader) = _glewSearchExtension("GL_ARB_compute_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_compute_shader) CONST_CAST(GLEW_ARB_compute_shader) = !_glewInit_GL_ARB_compute_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_compute_shader */ -#ifdef GL_ARB_compute_variable_group_size - CONST_CAST(GLEW_ARB_compute_variable_group_size) = _glewSearchExtension("GL_ARB_compute_variable_group_size", extStart, extEnd); - if (glewExperimental || GLEW_ARB_compute_variable_group_size) CONST_CAST(GLEW_ARB_compute_variable_group_size) = !_glewInit_GL_ARB_compute_variable_group_size(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_compute_variable_group_size */ -#ifdef GL_ARB_conservative_depth - CONST_CAST(GLEW_ARB_conservative_depth) = _glewSearchExtension("GL_ARB_conservative_depth", extStart, extEnd); -#endif /* GL_ARB_conservative_depth */ -#ifdef GL_ARB_copy_buffer - CONST_CAST(GLEW_ARB_copy_buffer) = _glewSearchExtension("GL_ARB_copy_buffer", extStart, extEnd); - if (glewExperimental || GLEW_ARB_copy_buffer) CONST_CAST(GLEW_ARB_copy_buffer) = !_glewInit_GL_ARB_copy_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_copy_buffer */ -#ifdef GL_ARB_copy_image - CONST_CAST(GLEW_ARB_copy_image) = _glewSearchExtension("GL_ARB_copy_image", extStart, extEnd); - if (glewExperimental || GLEW_ARB_copy_image) CONST_CAST(GLEW_ARB_copy_image) = !_glewInit_GL_ARB_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_copy_image */ -#ifdef GL_ARB_debug_output - CONST_CAST(GLEW_ARB_debug_output) = _glewSearchExtension("GL_ARB_debug_output", extStart, extEnd); - if (glewExperimental || GLEW_ARB_debug_output) CONST_CAST(GLEW_ARB_debug_output) = !_glewInit_GL_ARB_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_debug_output */ -#ifdef GL_ARB_depth_buffer_float - CONST_CAST(GLEW_ARB_depth_buffer_float) = _glewSearchExtension("GL_ARB_depth_buffer_float", extStart, extEnd); -#endif /* GL_ARB_depth_buffer_float */ -#ifdef GL_ARB_depth_clamp - CONST_CAST(GLEW_ARB_depth_clamp) = _glewSearchExtension("GL_ARB_depth_clamp", extStart, extEnd); -#endif /* GL_ARB_depth_clamp */ -#ifdef GL_ARB_depth_texture - CONST_CAST(GLEW_ARB_depth_texture) = _glewSearchExtension("GL_ARB_depth_texture", extStart, extEnd); -#endif /* GL_ARB_depth_texture */ -#ifdef GL_ARB_draw_buffers - CONST_CAST(GLEW_ARB_draw_buffers) = _glewSearchExtension("GL_ARB_draw_buffers", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_buffers) CONST_CAST(GLEW_ARB_draw_buffers) = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_buffers */ -#ifdef GL_ARB_draw_buffers_blend - CONST_CAST(GLEW_ARB_draw_buffers_blend) = _glewSearchExtension("GL_ARB_draw_buffers_blend", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_buffers_blend) CONST_CAST(GLEW_ARB_draw_buffers_blend) = !_glewInit_GL_ARB_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_buffers_blend */ -#ifdef GL_ARB_draw_elements_base_vertex - CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = _glewSearchExtension("GL_ARB_draw_elements_base_vertex", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_elements_base_vertex) CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = !_glewInit_GL_ARB_draw_elements_base_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_elements_base_vertex */ -#ifdef GL_ARB_draw_indirect - CONST_CAST(GLEW_ARB_draw_indirect) = _glewSearchExtension("GL_ARB_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_indirect) CONST_CAST(GLEW_ARB_draw_indirect) = !_glewInit_GL_ARB_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_indirect */ -#ifdef GL_ARB_draw_instanced - CONST_CAST(GLEW_ARB_draw_instanced) = _glewSearchExtension("GL_ARB_draw_instanced", extStart, extEnd); -#endif /* GL_ARB_draw_instanced */ -#ifdef GL_ARB_enhanced_layouts - CONST_CAST(GLEW_ARB_enhanced_layouts) = _glewSearchExtension("GL_ARB_enhanced_layouts", extStart, extEnd); -#endif /* GL_ARB_enhanced_layouts */ -#ifdef GL_ARB_explicit_attrib_location - CONST_CAST(GLEW_ARB_explicit_attrib_location) = _glewSearchExtension("GL_ARB_explicit_attrib_location", extStart, extEnd); -#endif /* GL_ARB_explicit_attrib_location */ -#ifdef GL_ARB_explicit_uniform_location - CONST_CAST(GLEW_ARB_explicit_uniform_location) = _glewSearchExtension("GL_ARB_explicit_uniform_location", extStart, extEnd); -#endif /* GL_ARB_explicit_uniform_location */ -#ifdef GL_ARB_fragment_coord_conventions - CONST_CAST(GLEW_ARB_fragment_coord_conventions) = _glewSearchExtension("GL_ARB_fragment_coord_conventions", extStart, extEnd); -#endif /* GL_ARB_fragment_coord_conventions */ -#ifdef GL_ARB_fragment_layer_viewport - CONST_CAST(GLEW_ARB_fragment_layer_viewport) = _glewSearchExtension("GL_ARB_fragment_layer_viewport", extStart, extEnd); -#endif /* GL_ARB_fragment_layer_viewport */ -#ifdef GL_ARB_fragment_program - CONST_CAST(GLEW_ARB_fragment_program) = _glewSearchExtension("GL_ARB_fragment_program", extStart, extEnd); -#endif /* GL_ARB_fragment_program */ -#ifdef GL_ARB_fragment_program_shadow - CONST_CAST(GLEW_ARB_fragment_program_shadow) = _glewSearchExtension("GL_ARB_fragment_program_shadow", extStart, extEnd); -#endif /* GL_ARB_fragment_program_shadow */ -#ifdef GL_ARB_fragment_shader - CONST_CAST(GLEW_ARB_fragment_shader) = _glewSearchExtension("GL_ARB_fragment_shader", extStart, extEnd); -#endif /* GL_ARB_fragment_shader */ -#ifdef GL_ARB_framebuffer_no_attachments - CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = _glewSearchExtension("GL_ARB_framebuffer_no_attachments", extStart, extEnd); - if (glewExperimental || GLEW_ARB_framebuffer_no_attachments) CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = !_glewInit_GL_ARB_framebuffer_no_attachments(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_framebuffer_no_attachments */ -#ifdef GL_ARB_framebuffer_object - CONST_CAST(GLEW_ARB_framebuffer_object) = _glewSearchExtension("GL_ARB_framebuffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_framebuffer_object) CONST_CAST(GLEW_ARB_framebuffer_object) = !_glewInit_GL_ARB_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_framebuffer_object */ -#ifdef GL_ARB_framebuffer_sRGB - CONST_CAST(GLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GL_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* GL_ARB_framebuffer_sRGB */ -#ifdef GL_ARB_geometry_shader4 - CONST_CAST(GLEW_ARB_geometry_shader4) = _glewSearchExtension("GL_ARB_geometry_shader4", extStart, extEnd); - if (glewExperimental || GLEW_ARB_geometry_shader4) CONST_CAST(GLEW_ARB_geometry_shader4) = !_glewInit_GL_ARB_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_geometry_shader4 */ -#ifdef GL_ARB_get_program_binary - CONST_CAST(GLEW_ARB_get_program_binary) = _glewSearchExtension("GL_ARB_get_program_binary", extStart, extEnd); - if (glewExperimental || GLEW_ARB_get_program_binary) CONST_CAST(GLEW_ARB_get_program_binary) = !_glewInit_GL_ARB_get_program_binary(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_get_program_binary */ -#ifdef GL_ARB_gpu_shader5 - CONST_CAST(GLEW_ARB_gpu_shader5) = _glewSearchExtension("GL_ARB_gpu_shader5", extStart, extEnd); -#endif /* GL_ARB_gpu_shader5 */ -#ifdef GL_ARB_gpu_shader_fp64 - CONST_CAST(GLEW_ARB_gpu_shader_fp64) = _glewSearchExtension("GL_ARB_gpu_shader_fp64", extStart, extEnd); - if (glewExperimental || GLEW_ARB_gpu_shader_fp64) CONST_CAST(GLEW_ARB_gpu_shader_fp64) = !_glewInit_GL_ARB_gpu_shader_fp64(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_gpu_shader_fp64 */ -#ifdef GL_ARB_half_float_pixel - CONST_CAST(GLEW_ARB_half_float_pixel) = _glewSearchExtension("GL_ARB_half_float_pixel", extStart, extEnd); -#endif /* GL_ARB_half_float_pixel */ -#ifdef GL_ARB_half_float_vertex - CONST_CAST(GLEW_ARB_half_float_vertex) = _glewSearchExtension("GL_ARB_half_float_vertex", extStart, extEnd); -#endif /* GL_ARB_half_float_vertex */ -#ifdef GL_ARB_imaging - CONST_CAST(GLEW_ARB_imaging) = _glewSearchExtension("GL_ARB_imaging", extStart, extEnd); - if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_imaging */ -#ifdef GL_ARB_indirect_parameters - CONST_CAST(GLEW_ARB_indirect_parameters) = _glewSearchExtension("GL_ARB_indirect_parameters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_indirect_parameters) CONST_CAST(GLEW_ARB_indirect_parameters) = !_glewInit_GL_ARB_indirect_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_indirect_parameters */ -#ifdef GL_ARB_instanced_arrays - CONST_CAST(GLEW_ARB_instanced_arrays) = _glewSearchExtension("GL_ARB_instanced_arrays", extStart, extEnd); - if (glewExperimental || GLEW_ARB_instanced_arrays) CONST_CAST(GLEW_ARB_instanced_arrays) = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_instanced_arrays */ -#ifdef GL_ARB_internalformat_query - CONST_CAST(GLEW_ARB_internalformat_query) = _glewSearchExtension("GL_ARB_internalformat_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_internalformat_query) CONST_CAST(GLEW_ARB_internalformat_query) = !_glewInit_GL_ARB_internalformat_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_internalformat_query */ -#ifdef GL_ARB_internalformat_query2 - CONST_CAST(GLEW_ARB_internalformat_query2) = _glewSearchExtension("GL_ARB_internalformat_query2", extStart, extEnd); - if (glewExperimental || GLEW_ARB_internalformat_query2) CONST_CAST(GLEW_ARB_internalformat_query2) = !_glewInit_GL_ARB_internalformat_query2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_internalformat_query2 */ -#ifdef GL_ARB_invalidate_subdata - CONST_CAST(GLEW_ARB_invalidate_subdata) = _glewSearchExtension("GL_ARB_invalidate_subdata", extStart, extEnd); - if (glewExperimental || GLEW_ARB_invalidate_subdata) CONST_CAST(GLEW_ARB_invalidate_subdata) = !_glewInit_GL_ARB_invalidate_subdata(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_invalidate_subdata */ -#ifdef GL_ARB_map_buffer_alignment - CONST_CAST(GLEW_ARB_map_buffer_alignment) = _glewSearchExtension("GL_ARB_map_buffer_alignment", extStart, extEnd); -#endif /* GL_ARB_map_buffer_alignment */ -#ifdef GL_ARB_map_buffer_range - CONST_CAST(GLEW_ARB_map_buffer_range) = _glewSearchExtension("GL_ARB_map_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_ARB_map_buffer_range) CONST_CAST(GLEW_ARB_map_buffer_range) = !_glewInit_GL_ARB_map_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_map_buffer_range */ -#ifdef GL_ARB_matrix_palette - CONST_CAST(GLEW_ARB_matrix_palette) = _glewSearchExtension("GL_ARB_matrix_palette", extStart, extEnd); - if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_matrix_palette */ -#ifdef GL_ARB_multi_bind - CONST_CAST(GLEW_ARB_multi_bind) = _glewSearchExtension("GL_ARB_multi_bind", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multi_bind) CONST_CAST(GLEW_ARB_multi_bind) = !_glewInit_GL_ARB_multi_bind(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multi_bind */ -#ifdef GL_ARB_multi_draw_indirect - CONST_CAST(GLEW_ARB_multi_draw_indirect) = _glewSearchExtension("GL_ARB_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multi_draw_indirect) CONST_CAST(GLEW_ARB_multi_draw_indirect) = !_glewInit_GL_ARB_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multi_draw_indirect */ -#ifdef GL_ARB_multisample - CONST_CAST(GLEW_ARB_multisample) = _glewSearchExtension("GL_ARB_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multisample) CONST_CAST(GLEW_ARB_multisample) = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multisample */ -#ifdef GL_ARB_multitexture - CONST_CAST(GLEW_ARB_multitexture) = _glewSearchExtension("GL_ARB_multitexture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multitexture) CONST_CAST(GLEW_ARB_multitexture) = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multitexture */ -#ifdef GL_ARB_occlusion_query - CONST_CAST(GLEW_ARB_occlusion_query) = _glewSearchExtension("GL_ARB_occlusion_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_occlusion_query) CONST_CAST(GLEW_ARB_occlusion_query) = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_occlusion_query */ -#ifdef GL_ARB_occlusion_query2 - CONST_CAST(GLEW_ARB_occlusion_query2) = _glewSearchExtension("GL_ARB_occlusion_query2", extStart, extEnd); -#endif /* GL_ARB_occlusion_query2 */ -#ifdef GL_ARB_pixel_buffer_object - CONST_CAST(GLEW_ARB_pixel_buffer_object) = _glewSearchExtension("GL_ARB_pixel_buffer_object", extStart, extEnd); -#endif /* GL_ARB_pixel_buffer_object */ -#ifdef GL_ARB_point_parameters - CONST_CAST(GLEW_ARB_point_parameters) = _glewSearchExtension("GL_ARB_point_parameters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_point_parameters) CONST_CAST(GLEW_ARB_point_parameters) = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_point_parameters */ -#ifdef GL_ARB_point_sprite - CONST_CAST(GLEW_ARB_point_sprite) = _glewSearchExtension("GL_ARB_point_sprite", extStart, extEnd); -#endif /* GL_ARB_point_sprite */ -#ifdef GL_ARB_program_interface_query - CONST_CAST(GLEW_ARB_program_interface_query) = _glewSearchExtension("GL_ARB_program_interface_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_program_interface_query) CONST_CAST(GLEW_ARB_program_interface_query) = !_glewInit_GL_ARB_program_interface_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_program_interface_query */ -#ifdef GL_ARB_provoking_vertex - CONST_CAST(GLEW_ARB_provoking_vertex) = _glewSearchExtension("GL_ARB_provoking_vertex", extStart, extEnd); - if (glewExperimental || GLEW_ARB_provoking_vertex) CONST_CAST(GLEW_ARB_provoking_vertex) = !_glewInit_GL_ARB_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_provoking_vertex */ -#ifdef GL_ARB_query_buffer_object - CONST_CAST(GLEW_ARB_query_buffer_object) = _glewSearchExtension("GL_ARB_query_buffer_object", extStart, extEnd); -#endif /* GL_ARB_query_buffer_object */ -#ifdef GL_ARB_robust_buffer_access_behavior - CONST_CAST(GLEW_ARB_robust_buffer_access_behavior) = _glewSearchExtension("GL_ARB_robust_buffer_access_behavior", extStart, extEnd); -#endif /* GL_ARB_robust_buffer_access_behavior */ -#ifdef GL_ARB_robustness - CONST_CAST(GLEW_ARB_robustness) = _glewSearchExtension("GL_ARB_robustness", extStart, extEnd); - if (glewExperimental || GLEW_ARB_robustness) CONST_CAST(GLEW_ARB_robustness) = !_glewInit_GL_ARB_robustness(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_robustness */ -#ifdef GL_ARB_robustness_application_isolation - CONST_CAST(GLEW_ARB_robustness_application_isolation) = _glewSearchExtension("GL_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* GL_ARB_robustness_application_isolation */ -#ifdef GL_ARB_robustness_share_group_isolation - CONST_CAST(GLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GL_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* GL_ARB_robustness_share_group_isolation */ -#ifdef GL_ARB_sample_shading - CONST_CAST(GLEW_ARB_sample_shading) = _glewSearchExtension("GL_ARB_sample_shading", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sample_shading) CONST_CAST(GLEW_ARB_sample_shading) = !_glewInit_GL_ARB_sample_shading(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sample_shading */ -#ifdef GL_ARB_sampler_objects - CONST_CAST(GLEW_ARB_sampler_objects) = _glewSearchExtension("GL_ARB_sampler_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sampler_objects) CONST_CAST(GLEW_ARB_sampler_objects) = !_glewInit_GL_ARB_sampler_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sampler_objects */ -#ifdef GL_ARB_seamless_cube_map - CONST_CAST(GLEW_ARB_seamless_cube_map) = _glewSearchExtension("GL_ARB_seamless_cube_map", extStart, extEnd); -#endif /* GL_ARB_seamless_cube_map */ -#ifdef GL_ARB_seamless_cubemap_per_texture - CONST_CAST(GLEW_ARB_seamless_cubemap_per_texture) = _glewSearchExtension("GL_ARB_seamless_cubemap_per_texture", extStart, extEnd); -#endif /* GL_ARB_seamless_cubemap_per_texture */ -#ifdef GL_ARB_separate_shader_objects - CONST_CAST(GLEW_ARB_separate_shader_objects) = _glewSearchExtension("GL_ARB_separate_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_separate_shader_objects) CONST_CAST(GLEW_ARB_separate_shader_objects) = !_glewInit_GL_ARB_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_separate_shader_objects */ -#ifdef GL_ARB_shader_atomic_counters - CONST_CAST(GLEW_ARB_shader_atomic_counters) = _glewSearchExtension("GL_ARB_shader_atomic_counters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_atomic_counters) CONST_CAST(GLEW_ARB_shader_atomic_counters) = !_glewInit_GL_ARB_shader_atomic_counters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_atomic_counters */ -#ifdef GL_ARB_shader_bit_encoding - CONST_CAST(GLEW_ARB_shader_bit_encoding) = _glewSearchExtension("GL_ARB_shader_bit_encoding", extStart, extEnd); -#endif /* GL_ARB_shader_bit_encoding */ -#ifdef GL_ARB_shader_draw_parameters - CONST_CAST(GLEW_ARB_shader_draw_parameters) = _glewSearchExtension("GL_ARB_shader_draw_parameters", extStart, extEnd); -#endif /* GL_ARB_shader_draw_parameters */ -#ifdef GL_ARB_shader_group_vote - CONST_CAST(GLEW_ARB_shader_group_vote) = _glewSearchExtension("GL_ARB_shader_group_vote", extStart, extEnd); -#endif /* GL_ARB_shader_group_vote */ -#ifdef GL_ARB_shader_image_load_store - CONST_CAST(GLEW_ARB_shader_image_load_store) = _glewSearchExtension("GL_ARB_shader_image_load_store", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_image_load_store) CONST_CAST(GLEW_ARB_shader_image_load_store) = !_glewInit_GL_ARB_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_image_load_store */ -#ifdef GL_ARB_shader_image_size - CONST_CAST(GLEW_ARB_shader_image_size) = _glewSearchExtension("GL_ARB_shader_image_size", extStart, extEnd); -#endif /* GL_ARB_shader_image_size */ -#ifdef GL_ARB_shader_objects - CONST_CAST(GLEW_ARB_shader_objects) = _glewSearchExtension("GL_ARB_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_objects) CONST_CAST(GLEW_ARB_shader_objects) = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_objects */ -#ifdef GL_ARB_shader_precision - CONST_CAST(GLEW_ARB_shader_precision) = _glewSearchExtension("GL_ARB_shader_precision", extStart, extEnd); -#endif /* GL_ARB_shader_precision */ -#ifdef GL_ARB_shader_stencil_export - CONST_CAST(GLEW_ARB_shader_stencil_export) = _glewSearchExtension("GL_ARB_shader_stencil_export", extStart, extEnd); -#endif /* GL_ARB_shader_stencil_export */ -#ifdef GL_ARB_shader_storage_buffer_object - CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = _glewSearchExtension("GL_ARB_shader_storage_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_storage_buffer_object) CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = !_glewInit_GL_ARB_shader_storage_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_storage_buffer_object */ -#ifdef GL_ARB_shader_subroutine - CONST_CAST(GLEW_ARB_shader_subroutine) = _glewSearchExtension("GL_ARB_shader_subroutine", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_subroutine) CONST_CAST(GLEW_ARB_shader_subroutine) = !_glewInit_GL_ARB_shader_subroutine(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_subroutine */ -#ifdef GL_ARB_shader_texture_lod - CONST_CAST(GLEW_ARB_shader_texture_lod) = _glewSearchExtension("GL_ARB_shader_texture_lod", extStart, extEnd); -#endif /* GL_ARB_shader_texture_lod */ -#ifdef GL_ARB_shading_language_100 - CONST_CAST(GLEW_ARB_shading_language_100) = _glewSearchExtension("GL_ARB_shading_language_100", extStart, extEnd); -#endif /* GL_ARB_shading_language_100 */ -#ifdef GL_ARB_shading_language_420pack - CONST_CAST(GLEW_ARB_shading_language_420pack) = _glewSearchExtension("GL_ARB_shading_language_420pack", extStart, extEnd); -#endif /* GL_ARB_shading_language_420pack */ -#ifdef GL_ARB_shading_language_include - CONST_CAST(GLEW_ARB_shading_language_include) = _glewSearchExtension("GL_ARB_shading_language_include", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shading_language_include) CONST_CAST(GLEW_ARB_shading_language_include) = !_glewInit_GL_ARB_shading_language_include(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shading_language_include */ -#ifdef GL_ARB_shading_language_packing - CONST_CAST(GLEW_ARB_shading_language_packing) = _glewSearchExtension("GL_ARB_shading_language_packing", extStart, extEnd); -#endif /* GL_ARB_shading_language_packing */ -#ifdef GL_ARB_shadow - CONST_CAST(GLEW_ARB_shadow) = _glewSearchExtension("GL_ARB_shadow", extStart, extEnd); -#endif /* GL_ARB_shadow */ -#ifdef GL_ARB_shadow_ambient - CONST_CAST(GLEW_ARB_shadow_ambient) = _glewSearchExtension("GL_ARB_shadow_ambient", extStart, extEnd); -#endif /* GL_ARB_shadow_ambient */ -#ifdef GL_ARB_sparse_texture - CONST_CAST(GLEW_ARB_sparse_texture) = _glewSearchExtension("GL_ARB_sparse_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sparse_texture) CONST_CAST(GLEW_ARB_sparse_texture) = !_glewInit_GL_ARB_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sparse_texture */ -#ifdef GL_ARB_stencil_texturing - CONST_CAST(GLEW_ARB_stencil_texturing) = _glewSearchExtension("GL_ARB_stencil_texturing", extStart, extEnd); -#endif /* GL_ARB_stencil_texturing */ -#ifdef GL_ARB_sync - CONST_CAST(GLEW_ARB_sync) = _glewSearchExtension("GL_ARB_sync", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sync) CONST_CAST(GLEW_ARB_sync) = !_glewInit_GL_ARB_sync(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sync */ -#ifdef GL_ARB_tessellation_shader - CONST_CAST(GLEW_ARB_tessellation_shader) = _glewSearchExtension("GL_ARB_tessellation_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_tessellation_shader) CONST_CAST(GLEW_ARB_tessellation_shader) = !_glewInit_GL_ARB_tessellation_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_tessellation_shader */ -#ifdef GL_ARB_texture_border_clamp - CONST_CAST(GLEW_ARB_texture_border_clamp) = _glewSearchExtension("GL_ARB_texture_border_clamp", extStart, extEnd); -#endif /* GL_ARB_texture_border_clamp */ -#ifdef GL_ARB_texture_buffer_object - CONST_CAST(GLEW_ARB_texture_buffer_object) = _glewSearchExtension("GL_ARB_texture_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_buffer_object) CONST_CAST(GLEW_ARB_texture_buffer_object) = !_glewInit_GL_ARB_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_buffer_object */ -#ifdef GL_ARB_texture_buffer_object_rgb32 - CONST_CAST(GLEW_ARB_texture_buffer_object_rgb32) = _glewSearchExtension("GL_ARB_texture_buffer_object_rgb32", extStart, extEnd); -#endif /* GL_ARB_texture_buffer_object_rgb32 */ -#ifdef GL_ARB_texture_buffer_range - CONST_CAST(GLEW_ARB_texture_buffer_range) = _glewSearchExtension("GL_ARB_texture_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_buffer_range) CONST_CAST(GLEW_ARB_texture_buffer_range) = !_glewInit_GL_ARB_texture_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_buffer_range */ -#ifdef GL_ARB_texture_compression - CONST_CAST(GLEW_ARB_texture_compression) = _glewSearchExtension("GL_ARB_texture_compression", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_compression) CONST_CAST(GLEW_ARB_texture_compression) = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_compression */ -#ifdef GL_ARB_texture_compression_bptc - CONST_CAST(GLEW_ARB_texture_compression_bptc) = _glewSearchExtension("GL_ARB_texture_compression_bptc", extStart, extEnd); -#endif /* GL_ARB_texture_compression_bptc */ -#ifdef GL_ARB_texture_compression_rgtc - CONST_CAST(GLEW_ARB_texture_compression_rgtc) = _glewSearchExtension("GL_ARB_texture_compression_rgtc", extStart, extEnd); -#endif /* GL_ARB_texture_compression_rgtc */ -#ifdef GL_ARB_texture_cube_map - CONST_CAST(GLEW_ARB_texture_cube_map) = _glewSearchExtension("GL_ARB_texture_cube_map", extStart, extEnd); -#endif /* GL_ARB_texture_cube_map */ -#ifdef GL_ARB_texture_cube_map_array - CONST_CAST(GLEW_ARB_texture_cube_map_array) = _glewSearchExtension("GL_ARB_texture_cube_map_array", extStart, extEnd); -#endif /* GL_ARB_texture_cube_map_array */ -#ifdef GL_ARB_texture_env_add - CONST_CAST(GLEW_ARB_texture_env_add) = _glewSearchExtension("GL_ARB_texture_env_add", extStart, extEnd); -#endif /* GL_ARB_texture_env_add */ -#ifdef GL_ARB_texture_env_combine - CONST_CAST(GLEW_ARB_texture_env_combine) = _glewSearchExtension("GL_ARB_texture_env_combine", extStart, extEnd); -#endif /* GL_ARB_texture_env_combine */ -#ifdef GL_ARB_texture_env_crossbar - CONST_CAST(GLEW_ARB_texture_env_crossbar) = _glewSearchExtension("GL_ARB_texture_env_crossbar", extStart, extEnd); -#endif /* GL_ARB_texture_env_crossbar */ -#ifdef GL_ARB_texture_env_dot3 - CONST_CAST(GLEW_ARB_texture_env_dot3) = _glewSearchExtension("GL_ARB_texture_env_dot3", extStart, extEnd); -#endif /* GL_ARB_texture_env_dot3 */ -#ifdef GL_ARB_texture_float - CONST_CAST(GLEW_ARB_texture_float) = _glewSearchExtension("GL_ARB_texture_float", extStart, extEnd); -#endif /* GL_ARB_texture_float */ -#ifdef GL_ARB_texture_gather - CONST_CAST(GLEW_ARB_texture_gather) = _glewSearchExtension("GL_ARB_texture_gather", extStart, extEnd); -#endif /* GL_ARB_texture_gather */ -#ifdef GL_ARB_texture_mirror_clamp_to_edge - CONST_CAST(GLEW_ARB_texture_mirror_clamp_to_edge) = _glewSearchExtension("GL_ARB_texture_mirror_clamp_to_edge", extStart, extEnd); -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ -#ifdef GL_ARB_texture_mirrored_repeat - CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = _glewSearchExtension("GL_ARB_texture_mirrored_repeat", extStart, extEnd); -#endif /* GL_ARB_texture_mirrored_repeat */ -#ifdef GL_ARB_texture_multisample - CONST_CAST(GLEW_ARB_texture_multisample) = _glewSearchExtension("GL_ARB_texture_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_multisample) CONST_CAST(GLEW_ARB_texture_multisample) = !_glewInit_GL_ARB_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_multisample */ -#ifdef GL_ARB_texture_non_power_of_two - CONST_CAST(GLEW_ARB_texture_non_power_of_two) = _glewSearchExtension("GL_ARB_texture_non_power_of_two", extStart, extEnd); -#endif /* GL_ARB_texture_non_power_of_two */ -#ifdef GL_ARB_texture_query_levels - CONST_CAST(GLEW_ARB_texture_query_levels) = _glewSearchExtension("GL_ARB_texture_query_levels", extStart, extEnd); -#endif /* GL_ARB_texture_query_levels */ -#ifdef GL_ARB_texture_query_lod - CONST_CAST(GLEW_ARB_texture_query_lod) = _glewSearchExtension("GL_ARB_texture_query_lod", extStart, extEnd); -#endif /* GL_ARB_texture_query_lod */ -#ifdef GL_ARB_texture_rectangle - CONST_CAST(GLEW_ARB_texture_rectangle) = _glewSearchExtension("GL_ARB_texture_rectangle", extStart, extEnd); -#endif /* GL_ARB_texture_rectangle */ -#ifdef GL_ARB_texture_rg - CONST_CAST(GLEW_ARB_texture_rg) = _glewSearchExtension("GL_ARB_texture_rg", extStart, extEnd); -#endif /* GL_ARB_texture_rg */ -#ifdef GL_ARB_texture_rgb10_a2ui - CONST_CAST(GLEW_ARB_texture_rgb10_a2ui) = _glewSearchExtension("GL_ARB_texture_rgb10_a2ui", extStart, extEnd); -#endif /* GL_ARB_texture_rgb10_a2ui */ -#ifdef GL_ARB_texture_stencil8 - CONST_CAST(GLEW_ARB_texture_stencil8) = _glewSearchExtension("GL_ARB_texture_stencil8", extStart, extEnd); -#endif /* GL_ARB_texture_stencil8 */ -#ifdef GL_ARB_texture_storage - CONST_CAST(GLEW_ARB_texture_storage) = _glewSearchExtension("GL_ARB_texture_storage", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_storage) CONST_CAST(GLEW_ARB_texture_storage) = !_glewInit_GL_ARB_texture_storage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_storage */ -#ifdef GL_ARB_texture_storage_multisample - CONST_CAST(GLEW_ARB_texture_storage_multisample) = _glewSearchExtension("GL_ARB_texture_storage_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_storage_multisample) CONST_CAST(GLEW_ARB_texture_storage_multisample) = !_glewInit_GL_ARB_texture_storage_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_storage_multisample */ -#ifdef GL_ARB_texture_swizzle - CONST_CAST(GLEW_ARB_texture_swizzle) = _glewSearchExtension("GL_ARB_texture_swizzle", extStart, extEnd); -#endif /* GL_ARB_texture_swizzle */ -#ifdef GL_ARB_texture_view - CONST_CAST(GLEW_ARB_texture_view) = _glewSearchExtension("GL_ARB_texture_view", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_view) CONST_CAST(GLEW_ARB_texture_view) = !_glewInit_GL_ARB_texture_view(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_view */ -#ifdef GL_ARB_timer_query - CONST_CAST(GLEW_ARB_timer_query) = _glewSearchExtension("GL_ARB_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_timer_query) CONST_CAST(GLEW_ARB_timer_query) = !_glewInit_GL_ARB_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_timer_query */ -#ifdef GL_ARB_transform_feedback2 - CONST_CAST(GLEW_ARB_transform_feedback2) = _glewSearchExtension("GL_ARB_transform_feedback2", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback2) CONST_CAST(GLEW_ARB_transform_feedback2) = !_glewInit_GL_ARB_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback2 */ -#ifdef GL_ARB_transform_feedback3 - CONST_CAST(GLEW_ARB_transform_feedback3) = _glewSearchExtension("GL_ARB_transform_feedback3", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback3) CONST_CAST(GLEW_ARB_transform_feedback3) = !_glewInit_GL_ARB_transform_feedback3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback3 */ -#ifdef GL_ARB_transform_feedback_instanced - CONST_CAST(GLEW_ARB_transform_feedback_instanced) = _glewSearchExtension("GL_ARB_transform_feedback_instanced", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback_instanced) CONST_CAST(GLEW_ARB_transform_feedback_instanced) = !_glewInit_GL_ARB_transform_feedback_instanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback_instanced */ -#ifdef GL_ARB_transpose_matrix - CONST_CAST(GLEW_ARB_transpose_matrix) = _glewSearchExtension("GL_ARB_transpose_matrix", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transpose_matrix) CONST_CAST(GLEW_ARB_transpose_matrix) = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transpose_matrix */ -#ifdef GL_ARB_uniform_buffer_object - CONST_CAST(GLEW_ARB_uniform_buffer_object) = _glewSearchExtension("GL_ARB_uniform_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_uniform_buffer_object) CONST_CAST(GLEW_ARB_uniform_buffer_object) = !_glewInit_GL_ARB_uniform_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_uniform_buffer_object */ -#ifdef GL_ARB_vertex_array_bgra - CONST_CAST(GLEW_ARB_vertex_array_bgra) = _glewSearchExtension("GL_ARB_vertex_array_bgra", extStart, extEnd); -#endif /* GL_ARB_vertex_array_bgra */ -#ifdef GL_ARB_vertex_array_object - CONST_CAST(GLEW_ARB_vertex_array_object) = _glewSearchExtension("GL_ARB_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_array_object) CONST_CAST(GLEW_ARB_vertex_array_object) = !_glewInit_GL_ARB_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_array_object */ -#ifdef GL_ARB_vertex_attrib_64bit - CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = _glewSearchExtension("GL_ARB_vertex_attrib_64bit", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_attrib_64bit) CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = !_glewInit_GL_ARB_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_attrib_64bit */ -#ifdef GL_ARB_vertex_attrib_binding - CONST_CAST(GLEW_ARB_vertex_attrib_binding) = _glewSearchExtension("GL_ARB_vertex_attrib_binding", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_attrib_binding) CONST_CAST(GLEW_ARB_vertex_attrib_binding) = !_glewInit_GL_ARB_vertex_attrib_binding(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_attrib_binding */ -#ifdef GL_ARB_vertex_blend - CONST_CAST(GLEW_ARB_vertex_blend) = _glewSearchExtension("GL_ARB_vertex_blend", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_blend) CONST_CAST(GLEW_ARB_vertex_blend) = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_blend */ -#ifdef GL_ARB_vertex_buffer_object - CONST_CAST(GLEW_ARB_vertex_buffer_object) = _glewSearchExtension("GL_ARB_vertex_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_buffer_object) CONST_CAST(GLEW_ARB_vertex_buffer_object) = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_buffer_object */ -#ifdef GL_ARB_vertex_program - CONST_CAST(GLEW_ARB_vertex_program) = _glewSearchExtension("GL_ARB_vertex_program", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_program) CONST_CAST(GLEW_ARB_vertex_program) = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_program */ -#ifdef GL_ARB_vertex_shader - CONST_CAST(GLEW_ARB_vertex_shader) = _glewSearchExtension("GL_ARB_vertex_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_shader */ -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - CONST_CAST(GLEW_ARB_vertex_type_10f_11f_11f_rev) = _glewSearchExtension("GL_ARB_vertex_type_10f_11f_11f_rev", extStart, extEnd); -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = _glewSearchExtension("GL_ARB_vertex_type_2_10_10_10_rev", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ -#ifdef GL_ARB_viewport_array - CONST_CAST(GLEW_ARB_viewport_array) = _glewSearchExtension("GL_ARB_viewport_array", extStart, extEnd); - if (glewExperimental || GLEW_ARB_viewport_array) CONST_CAST(GLEW_ARB_viewport_array) = !_glewInit_GL_ARB_viewport_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_viewport_array */ -#ifdef GL_ARB_window_pos - CONST_CAST(GLEW_ARB_window_pos) = _glewSearchExtension("GL_ARB_window_pos", extStart, extEnd); - if (glewExperimental || GLEW_ARB_window_pos) CONST_CAST(GLEW_ARB_window_pos) = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_window_pos */ -#ifdef GL_ATIX_point_sprites - CONST_CAST(GLEW_ATIX_point_sprites) = _glewSearchExtension("GL_ATIX_point_sprites", extStart, extEnd); -#endif /* GL_ATIX_point_sprites */ -#ifdef GL_ATIX_texture_env_combine3 - CONST_CAST(GLEW_ATIX_texture_env_combine3) = _glewSearchExtension("GL_ATIX_texture_env_combine3", extStart, extEnd); -#endif /* GL_ATIX_texture_env_combine3 */ -#ifdef GL_ATIX_texture_env_route - CONST_CAST(GLEW_ATIX_texture_env_route) = _glewSearchExtension("GL_ATIX_texture_env_route", extStart, extEnd); -#endif /* GL_ATIX_texture_env_route */ -#ifdef GL_ATIX_vertex_shader_output_point_size - CONST_CAST(GLEW_ATIX_vertex_shader_output_point_size) = _glewSearchExtension("GL_ATIX_vertex_shader_output_point_size", extStart, extEnd); -#endif /* GL_ATIX_vertex_shader_output_point_size */ -#ifdef GL_ATI_draw_buffers - CONST_CAST(GLEW_ATI_draw_buffers) = _glewSearchExtension("GL_ATI_draw_buffers", extStart, extEnd); - if (glewExperimental || GLEW_ATI_draw_buffers) CONST_CAST(GLEW_ATI_draw_buffers) = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_draw_buffers */ -#ifdef GL_ATI_element_array - CONST_CAST(GLEW_ATI_element_array) = _glewSearchExtension("GL_ATI_element_array", extStart, extEnd); - if (glewExperimental || GLEW_ATI_element_array) CONST_CAST(GLEW_ATI_element_array) = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_element_array */ -#ifdef GL_ATI_envmap_bumpmap - CONST_CAST(GLEW_ATI_envmap_bumpmap) = _glewSearchExtension("GL_ATI_envmap_bumpmap", extStart, extEnd); - if (glewExperimental || GLEW_ATI_envmap_bumpmap) CONST_CAST(GLEW_ATI_envmap_bumpmap) = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_envmap_bumpmap */ -#ifdef GL_ATI_fragment_shader - CONST_CAST(GLEW_ATI_fragment_shader) = _glewSearchExtension("GL_ATI_fragment_shader", extStart, extEnd); - if (glewExperimental || GLEW_ATI_fragment_shader) CONST_CAST(GLEW_ATI_fragment_shader) = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_fragment_shader */ -#ifdef GL_ATI_map_object_buffer - CONST_CAST(GLEW_ATI_map_object_buffer) = _glewSearchExtension("GL_ATI_map_object_buffer", extStart, extEnd); - if (glewExperimental || GLEW_ATI_map_object_buffer) CONST_CAST(GLEW_ATI_map_object_buffer) = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_map_object_buffer */ -#ifdef GL_ATI_meminfo - CONST_CAST(GLEW_ATI_meminfo) = _glewSearchExtension("GL_ATI_meminfo", extStart, extEnd); -#endif /* GL_ATI_meminfo */ -#ifdef GL_ATI_pn_triangles - CONST_CAST(GLEW_ATI_pn_triangles) = _glewSearchExtension("GL_ATI_pn_triangles", extStart, extEnd); - if (glewExperimental || GLEW_ATI_pn_triangles) CONST_CAST(GLEW_ATI_pn_triangles) = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_pn_triangles */ -#ifdef GL_ATI_separate_stencil - CONST_CAST(GLEW_ATI_separate_stencil) = _glewSearchExtension("GL_ATI_separate_stencil", extStart, extEnd); - if (glewExperimental || GLEW_ATI_separate_stencil) CONST_CAST(GLEW_ATI_separate_stencil) = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_separate_stencil */ -#ifdef GL_ATI_shader_texture_lod - CONST_CAST(GLEW_ATI_shader_texture_lod) = _glewSearchExtension("GL_ATI_shader_texture_lod", extStart, extEnd); -#endif /* GL_ATI_shader_texture_lod */ -#ifdef GL_ATI_text_fragment_shader - CONST_CAST(GLEW_ATI_text_fragment_shader) = _glewSearchExtension("GL_ATI_text_fragment_shader", extStart, extEnd); -#endif /* GL_ATI_text_fragment_shader */ -#ifdef GL_ATI_texture_compression_3dc - CONST_CAST(GLEW_ATI_texture_compression_3dc) = _glewSearchExtension("GL_ATI_texture_compression_3dc", extStart, extEnd); -#endif /* GL_ATI_texture_compression_3dc */ -#ifdef GL_ATI_texture_env_combine3 - CONST_CAST(GLEW_ATI_texture_env_combine3) = _glewSearchExtension("GL_ATI_texture_env_combine3", extStart, extEnd); -#endif /* GL_ATI_texture_env_combine3 */ -#ifdef GL_ATI_texture_float - CONST_CAST(GLEW_ATI_texture_float) = _glewSearchExtension("GL_ATI_texture_float", extStart, extEnd); -#endif /* GL_ATI_texture_float */ -#ifdef GL_ATI_texture_mirror_once - CONST_CAST(GLEW_ATI_texture_mirror_once) = _glewSearchExtension("GL_ATI_texture_mirror_once", extStart, extEnd); -#endif /* GL_ATI_texture_mirror_once */ -#ifdef GL_ATI_vertex_array_object - CONST_CAST(GLEW_ATI_vertex_array_object) = _glewSearchExtension("GL_ATI_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_array_object) CONST_CAST(GLEW_ATI_vertex_array_object) = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_array_object */ -#ifdef GL_ATI_vertex_attrib_array_object - CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = _glewSearchExtension("GL_ATI_vertex_attrib_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_attrib_array_object */ -#ifdef GL_ATI_vertex_streams - CONST_CAST(GLEW_ATI_vertex_streams) = _glewSearchExtension("GL_ATI_vertex_streams", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_streams) CONST_CAST(GLEW_ATI_vertex_streams) = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_streams */ -#ifdef GL_EXT_422_pixels - CONST_CAST(GLEW_EXT_422_pixels) = _glewSearchExtension("GL_EXT_422_pixels", extStart, extEnd); -#endif /* GL_EXT_422_pixels */ -#ifdef GL_EXT_Cg_shader - CONST_CAST(GLEW_EXT_Cg_shader) = _glewSearchExtension("GL_EXT_Cg_shader", extStart, extEnd); -#endif /* GL_EXT_Cg_shader */ -#ifdef GL_EXT_abgr - CONST_CAST(GLEW_EXT_abgr) = _glewSearchExtension("GL_EXT_abgr", extStart, extEnd); -#endif /* GL_EXT_abgr */ -#ifdef GL_EXT_bgra - CONST_CAST(GLEW_EXT_bgra) = _glewSearchExtension("GL_EXT_bgra", extStart, extEnd); -#endif /* GL_EXT_bgra */ -#ifdef GL_EXT_bindable_uniform - CONST_CAST(GLEW_EXT_bindable_uniform) = _glewSearchExtension("GL_EXT_bindable_uniform", extStart, extEnd); - if (glewExperimental || GLEW_EXT_bindable_uniform) CONST_CAST(GLEW_EXT_bindable_uniform) = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_bindable_uniform */ -#ifdef GL_EXT_blend_color - CONST_CAST(GLEW_EXT_blend_color) = _glewSearchExtension("GL_EXT_blend_color", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_color) CONST_CAST(GLEW_EXT_blend_color) = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_color */ -#ifdef GL_EXT_blend_equation_separate - CONST_CAST(GLEW_EXT_blend_equation_separate) = _glewSearchExtension("GL_EXT_blend_equation_separate", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_equation_separate) CONST_CAST(GLEW_EXT_blend_equation_separate) = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_equation_separate */ -#ifdef GL_EXT_blend_func_separate - CONST_CAST(GLEW_EXT_blend_func_separate) = _glewSearchExtension("GL_EXT_blend_func_separate", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_func_separate) CONST_CAST(GLEW_EXT_blend_func_separate) = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_func_separate */ -#ifdef GL_EXT_blend_logic_op - CONST_CAST(GLEW_EXT_blend_logic_op) = _glewSearchExtension("GL_EXT_blend_logic_op", extStart, extEnd); -#endif /* GL_EXT_blend_logic_op */ -#ifdef GL_EXT_blend_minmax - CONST_CAST(GLEW_EXT_blend_minmax) = _glewSearchExtension("GL_EXT_blend_minmax", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_minmax) CONST_CAST(GLEW_EXT_blend_minmax) = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_minmax */ -#ifdef GL_EXT_blend_subtract - CONST_CAST(GLEW_EXT_blend_subtract) = _glewSearchExtension("GL_EXT_blend_subtract", extStart, extEnd); -#endif /* GL_EXT_blend_subtract */ -#ifdef GL_EXT_clip_volume_hint - CONST_CAST(GLEW_EXT_clip_volume_hint) = _glewSearchExtension("GL_EXT_clip_volume_hint", extStart, extEnd); -#endif /* GL_EXT_clip_volume_hint */ -#ifdef GL_EXT_cmyka - CONST_CAST(GLEW_EXT_cmyka) = _glewSearchExtension("GL_EXT_cmyka", extStart, extEnd); -#endif /* GL_EXT_cmyka */ -#ifdef GL_EXT_color_subtable - CONST_CAST(GLEW_EXT_color_subtable) = _glewSearchExtension("GL_EXT_color_subtable", extStart, extEnd); - if (glewExperimental || GLEW_EXT_color_subtable) CONST_CAST(GLEW_EXT_color_subtable) = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_color_subtable */ -#ifdef GL_EXT_compiled_vertex_array - CONST_CAST(GLEW_EXT_compiled_vertex_array) = _glewSearchExtension("GL_EXT_compiled_vertex_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_compiled_vertex_array) CONST_CAST(GLEW_EXT_compiled_vertex_array) = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_compiled_vertex_array */ -#ifdef GL_EXT_convolution - CONST_CAST(GLEW_EXT_convolution) = _glewSearchExtension("GL_EXT_convolution", extStart, extEnd); - if (glewExperimental || GLEW_EXT_convolution) CONST_CAST(GLEW_EXT_convolution) = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_convolution */ -#ifdef GL_EXT_coordinate_frame - CONST_CAST(GLEW_EXT_coordinate_frame) = _glewSearchExtension("GL_EXT_coordinate_frame", extStart, extEnd); - if (glewExperimental || GLEW_EXT_coordinate_frame) CONST_CAST(GLEW_EXT_coordinate_frame) = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_coordinate_frame */ -#ifdef GL_EXT_copy_texture - CONST_CAST(GLEW_EXT_copy_texture) = _glewSearchExtension("GL_EXT_copy_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_copy_texture) CONST_CAST(GLEW_EXT_copy_texture) = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_copy_texture */ -#ifdef GL_EXT_cull_vertex - CONST_CAST(GLEW_EXT_cull_vertex) = _glewSearchExtension("GL_EXT_cull_vertex", extStart, extEnd); - if (glewExperimental || GLEW_EXT_cull_vertex) CONST_CAST(GLEW_EXT_cull_vertex) = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_cull_vertex */ -#ifdef GL_EXT_debug_marker - CONST_CAST(GLEW_EXT_debug_marker) = _glewSearchExtension("GL_EXT_debug_marker", extStart, extEnd); - if (glewExperimental || GLEW_EXT_debug_marker) CONST_CAST(GLEW_EXT_debug_marker) = !_glewInit_GL_EXT_debug_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_debug_marker */ -#ifdef GL_EXT_depth_bounds_test - CONST_CAST(GLEW_EXT_depth_bounds_test) = _glewSearchExtension("GL_EXT_depth_bounds_test", extStart, extEnd); - if (glewExperimental || GLEW_EXT_depth_bounds_test) CONST_CAST(GLEW_EXT_depth_bounds_test) = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_depth_bounds_test */ -#ifdef GL_EXT_direct_state_access - CONST_CAST(GLEW_EXT_direct_state_access) = _glewSearchExtension("GL_EXT_direct_state_access", extStart, extEnd); - if (glewExperimental || GLEW_EXT_direct_state_access) CONST_CAST(GLEW_EXT_direct_state_access) = !_glewInit_GL_EXT_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_direct_state_access */ -#ifdef GL_EXT_draw_buffers2 - CONST_CAST(GLEW_EXT_draw_buffers2) = _glewSearchExtension("GL_EXT_draw_buffers2", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_buffers2) CONST_CAST(GLEW_EXT_draw_buffers2) = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_buffers2 */ -#ifdef GL_EXT_draw_instanced - CONST_CAST(GLEW_EXT_draw_instanced) = _glewSearchExtension("GL_EXT_draw_instanced", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_instanced) CONST_CAST(GLEW_EXT_draw_instanced) = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_instanced */ -#ifdef GL_EXT_draw_range_elements - CONST_CAST(GLEW_EXT_draw_range_elements) = _glewSearchExtension("GL_EXT_draw_range_elements", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_range_elements) CONST_CAST(GLEW_EXT_draw_range_elements) = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_range_elements */ -#ifdef GL_EXT_fog_coord - CONST_CAST(GLEW_EXT_fog_coord) = _glewSearchExtension("GL_EXT_fog_coord", extStart, extEnd); - if (glewExperimental || GLEW_EXT_fog_coord) CONST_CAST(GLEW_EXT_fog_coord) = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_fog_coord */ -#ifdef GL_EXT_fragment_lighting - CONST_CAST(GLEW_EXT_fragment_lighting) = _glewSearchExtension("GL_EXT_fragment_lighting", extStart, extEnd); - if (glewExperimental || GLEW_EXT_fragment_lighting) CONST_CAST(GLEW_EXT_fragment_lighting) = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_fragment_lighting */ -#ifdef GL_EXT_framebuffer_blit - CONST_CAST(GLEW_EXT_framebuffer_blit) = _glewSearchExtension("GL_EXT_framebuffer_blit", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_blit) CONST_CAST(GLEW_EXT_framebuffer_blit) = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_blit */ -#ifdef GL_EXT_framebuffer_multisample - CONST_CAST(GLEW_EXT_framebuffer_multisample) = _glewSearchExtension("GL_EXT_framebuffer_multisample", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_multisample) CONST_CAST(GLEW_EXT_framebuffer_multisample) = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_multisample */ -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - CONST_CAST(GLEW_EXT_framebuffer_multisample_blit_scaled) = _glewSearchExtension("GL_EXT_framebuffer_multisample_blit_scaled", extStart, extEnd); -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ -#ifdef GL_EXT_framebuffer_object - CONST_CAST(GLEW_EXT_framebuffer_object) = _glewSearchExtension("GL_EXT_framebuffer_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_object) CONST_CAST(GLEW_EXT_framebuffer_object) = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_object */ -#ifdef GL_EXT_framebuffer_sRGB - CONST_CAST(GLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GL_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* GL_EXT_framebuffer_sRGB */ -#ifdef GL_EXT_geometry_shader4 - CONST_CAST(GLEW_EXT_geometry_shader4) = _glewSearchExtension("GL_EXT_geometry_shader4", extStart, extEnd); - if (glewExperimental || GLEW_EXT_geometry_shader4) CONST_CAST(GLEW_EXT_geometry_shader4) = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_geometry_shader4 */ -#ifdef GL_EXT_gpu_program_parameters - CONST_CAST(GLEW_EXT_gpu_program_parameters) = _glewSearchExtension("GL_EXT_gpu_program_parameters", extStart, extEnd); - if (glewExperimental || GLEW_EXT_gpu_program_parameters) CONST_CAST(GLEW_EXT_gpu_program_parameters) = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_gpu_program_parameters */ -#ifdef GL_EXT_gpu_shader4 - CONST_CAST(GLEW_EXT_gpu_shader4) = _glewSearchExtension("GL_EXT_gpu_shader4", extStart, extEnd); - if (glewExperimental || GLEW_EXT_gpu_shader4) CONST_CAST(GLEW_EXT_gpu_shader4) = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_gpu_shader4 */ -#ifdef GL_EXT_histogram - CONST_CAST(GLEW_EXT_histogram) = _glewSearchExtension("GL_EXT_histogram", extStart, extEnd); - if (glewExperimental || GLEW_EXT_histogram) CONST_CAST(GLEW_EXT_histogram) = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_histogram */ -#ifdef GL_EXT_index_array_formats - CONST_CAST(GLEW_EXT_index_array_formats) = _glewSearchExtension("GL_EXT_index_array_formats", extStart, extEnd); -#endif /* GL_EXT_index_array_formats */ -#ifdef GL_EXT_index_func - CONST_CAST(GLEW_EXT_index_func) = _glewSearchExtension("GL_EXT_index_func", extStart, extEnd); - if (glewExperimental || GLEW_EXT_index_func) CONST_CAST(GLEW_EXT_index_func) = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_index_func */ -#ifdef GL_EXT_index_material - CONST_CAST(GLEW_EXT_index_material) = _glewSearchExtension("GL_EXT_index_material", extStart, extEnd); - if (glewExperimental || GLEW_EXT_index_material) CONST_CAST(GLEW_EXT_index_material) = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_index_material */ -#ifdef GL_EXT_index_texture - CONST_CAST(GLEW_EXT_index_texture) = _glewSearchExtension("GL_EXT_index_texture", extStart, extEnd); -#endif /* GL_EXT_index_texture */ -#ifdef GL_EXT_light_texture - CONST_CAST(GLEW_EXT_light_texture) = _glewSearchExtension("GL_EXT_light_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_light_texture) CONST_CAST(GLEW_EXT_light_texture) = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_light_texture */ -#ifdef GL_EXT_misc_attribute - CONST_CAST(GLEW_EXT_misc_attribute) = _glewSearchExtension("GL_EXT_misc_attribute", extStart, extEnd); -#endif /* GL_EXT_misc_attribute */ -#ifdef GL_EXT_multi_draw_arrays - CONST_CAST(GLEW_EXT_multi_draw_arrays) = _glewSearchExtension("GL_EXT_multi_draw_arrays", extStart, extEnd); - if (glewExperimental || GLEW_EXT_multi_draw_arrays) CONST_CAST(GLEW_EXT_multi_draw_arrays) = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_multi_draw_arrays */ -#ifdef GL_EXT_multisample - CONST_CAST(GLEW_EXT_multisample) = _glewSearchExtension("GL_EXT_multisample", extStart, extEnd); - if (glewExperimental || GLEW_EXT_multisample) CONST_CAST(GLEW_EXT_multisample) = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_multisample */ -#ifdef GL_EXT_packed_depth_stencil - CONST_CAST(GLEW_EXT_packed_depth_stencil) = _glewSearchExtension("GL_EXT_packed_depth_stencil", extStart, extEnd); -#endif /* GL_EXT_packed_depth_stencil */ -#ifdef GL_EXT_packed_float - CONST_CAST(GLEW_EXT_packed_float) = _glewSearchExtension("GL_EXT_packed_float", extStart, extEnd); -#endif /* GL_EXT_packed_float */ -#ifdef GL_EXT_packed_pixels - CONST_CAST(GLEW_EXT_packed_pixels) = _glewSearchExtension("GL_EXT_packed_pixels", extStart, extEnd); -#endif /* GL_EXT_packed_pixels */ -#ifdef GL_EXT_paletted_texture - CONST_CAST(GLEW_EXT_paletted_texture) = _glewSearchExtension("GL_EXT_paletted_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_paletted_texture) CONST_CAST(GLEW_EXT_paletted_texture) = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_paletted_texture */ -#ifdef GL_EXT_pixel_buffer_object - CONST_CAST(GLEW_EXT_pixel_buffer_object) = _glewSearchExtension("GL_EXT_pixel_buffer_object", extStart, extEnd); -#endif /* GL_EXT_pixel_buffer_object */ -#ifdef GL_EXT_pixel_transform - CONST_CAST(GLEW_EXT_pixel_transform) = _glewSearchExtension("GL_EXT_pixel_transform", extStart, extEnd); - if (glewExperimental || GLEW_EXT_pixel_transform) CONST_CAST(GLEW_EXT_pixel_transform) = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_pixel_transform */ -#ifdef GL_EXT_pixel_transform_color_table - CONST_CAST(GLEW_EXT_pixel_transform_color_table) = _glewSearchExtension("GL_EXT_pixel_transform_color_table", extStart, extEnd); -#endif /* GL_EXT_pixel_transform_color_table */ -#ifdef GL_EXT_point_parameters - CONST_CAST(GLEW_EXT_point_parameters) = _glewSearchExtension("GL_EXT_point_parameters", extStart, extEnd); - if (glewExperimental || GLEW_EXT_point_parameters) CONST_CAST(GLEW_EXT_point_parameters) = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_point_parameters */ -#ifdef GL_EXT_polygon_offset - CONST_CAST(GLEW_EXT_polygon_offset) = _glewSearchExtension("GL_EXT_polygon_offset", extStart, extEnd); - if (glewExperimental || GLEW_EXT_polygon_offset) CONST_CAST(GLEW_EXT_polygon_offset) = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_polygon_offset */ -#ifdef GL_EXT_provoking_vertex - CONST_CAST(GLEW_EXT_provoking_vertex) = _glewSearchExtension("GL_EXT_provoking_vertex", extStart, extEnd); - if (glewExperimental || GLEW_EXT_provoking_vertex) CONST_CAST(GLEW_EXT_provoking_vertex) = !_glewInit_GL_EXT_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_provoking_vertex */ -#ifdef GL_EXT_rescale_normal - CONST_CAST(GLEW_EXT_rescale_normal) = _glewSearchExtension("GL_EXT_rescale_normal", extStart, extEnd); -#endif /* GL_EXT_rescale_normal */ -#ifdef GL_EXT_scene_marker - CONST_CAST(GLEW_EXT_scene_marker) = _glewSearchExtension("GL_EXT_scene_marker", extStart, extEnd); - if (glewExperimental || GLEW_EXT_scene_marker) CONST_CAST(GLEW_EXT_scene_marker) = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_scene_marker */ -#ifdef GL_EXT_secondary_color - CONST_CAST(GLEW_EXT_secondary_color) = _glewSearchExtension("GL_EXT_secondary_color", extStart, extEnd); - if (glewExperimental || GLEW_EXT_secondary_color) CONST_CAST(GLEW_EXT_secondary_color) = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_secondary_color */ -#ifdef GL_EXT_separate_shader_objects - CONST_CAST(GLEW_EXT_separate_shader_objects) = _glewSearchExtension("GL_EXT_separate_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_EXT_separate_shader_objects) CONST_CAST(GLEW_EXT_separate_shader_objects) = !_glewInit_GL_EXT_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_separate_shader_objects */ -#ifdef GL_EXT_separate_specular_color - CONST_CAST(GLEW_EXT_separate_specular_color) = _glewSearchExtension("GL_EXT_separate_specular_color", extStart, extEnd); -#endif /* GL_EXT_separate_specular_color */ -#ifdef GL_EXT_shader_image_load_store - CONST_CAST(GLEW_EXT_shader_image_load_store) = _glewSearchExtension("GL_EXT_shader_image_load_store", extStart, extEnd); - if (glewExperimental || GLEW_EXT_shader_image_load_store) CONST_CAST(GLEW_EXT_shader_image_load_store) = !_glewInit_GL_EXT_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_shader_image_load_store */ -#ifdef GL_EXT_shadow_funcs - CONST_CAST(GLEW_EXT_shadow_funcs) = _glewSearchExtension("GL_EXT_shadow_funcs", extStart, extEnd); -#endif /* GL_EXT_shadow_funcs */ -#ifdef GL_EXT_shared_texture_palette - CONST_CAST(GLEW_EXT_shared_texture_palette) = _glewSearchExtension("GL_EXT_shared_texture_palette", extStart, extEnd); -#endif /* GL_EXT_shared_texture_palette */ -#ifdef GL_EXT_stencil_clear_tag - CONST_CAST(GLEW_EXT_stencil_clear_tag) = _glewSearchExtension("GL_EXT_stencil_clear_tag", extStart, extEnd); -#endif /* GL_EXT_stencil_clear_tag */ -#ifdef GL_EXT_stencil_two_side - CONST_CAST(GLEW_EXT_stencil_two_side) = _glewSearchExtension("GL_EXT_stencil_two_side", extStart, extEnd); - if (glewExperimental || GLEW_EXT_stencil_two_side) CONST_CAST(GLEW_EXT_stencil_two_side) = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_stencil_two_side */ -#ifdef GL_EXT_stencil_wrap - CONST_CAST(GLEW_EXT_stencil_wrap) = _glewSearchExtension("GL_EXT_stencil_wrap", extStart, extEnd); -#endif /* GL_EXT_stencil_wrap */ -#ifdef GL_EXT_subtexture - CONST_CAST(GLEW_EXT_subtexture) = _glewSearchExtension("GL_EXT_subtexture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_subtexture) CONST_CAST(GLEW_EXT_subtexture) = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_subtexture */ -#ifdef GL_EXT_texture - CONST_CAST(GLEW_EXT_texture) = _glewSearchExtension("GL_EXT_texture", extStart, extEnd); -#endif /* GL_EXT_texture */ -#ifdef GL_EXT_texture3D - CONST_CAST(GLEW_EXT_texture3D) = _glewSearchExtension("GL_EXT_texture3D", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture3D) CONST_CAST(GLEW_EXT_texture3D) = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture3D */ -#ifdef GL_EXT_texture_array - CONST_CAST(GLEW_EXT_texture_array) = _glewSearchExtension("GL_EXT_texture_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_array) CONST_CAST(GLEW_EXT_texture_array) = !_glewInit_GL_EXT_texture_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_array */ -#ifdef GL_EXT_texture_buffer_object - CONST_CAST(GLEW_EXT_texture_buffer_object) = _glewSearchExtension("GL_EXT_texture_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_buffer_object) CONST_CAST(GLEW_EXT_texture_buffer_object) = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_buffer_object */ -#ifdef GL_EXT_texture_compression_dxt1 - CONST_CAST(GLEW_EXT_texture_compression_dxt1) = _glewSearchExtension("GL_EXT_texture_compression_dxt1", extStart, extEnd); -#endif /* GL_EXT_texture_compression_dxt1 */ -#ifdef GL_EXT_texture_compression_latc - CONST_CAST(GLEW_EXT_texture_compression_latc) = _glewSearchExtension("GL_EXT_texture_compression_latc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_latc */ -#ifdef GL_EXT_texture_compression_rgtc - CONST_CAST(GLEW_EXT_texture_compression_rgtc) = _glewSearchExtension("GL_EXT_texture_compression_rgtc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_rgtc */ -#ifdef GL_EXT_texture_compression_s3tc - CONST_CAST(GLEW_EXT_texture_compression_s3tc) = _glewSearchExtension("GL_EXT_texture_compression_s3tc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_s3tc */ -#ifdef GL_EXT_texture_cube_map - CONST_CAST(GLEW_EXT_texture_cube_map) = _glewSearchExtension("GL_EXT_texture_cube_map", extStart, extEnd); -#endif /* GL_EXT_texture_cube_map */ -#ifdef GL_EXT_texture_edge_clamp - CONST_CAST(GLEW_EXT_texture_edge_clamp) = _glewSearchExtension("GL_EXT_texture_edge_clamp", extStart, extEnd); -#endif /* GL_EXT_texture_edge_clamp */ -#ifdef GL_EXT_texture_env - CONST_CAST(GLEW_EXT_texture_env) = _glewSearchExtension("GL_EXT_texture_env", extStart, extEnd); -#endif /* GL_EXT_texture_env */ -#ifdef GL_EXT_texture_env_add - CONST_CAST(GLEW_EXT_texture_env_add) = _glewSearchExtension("GL_EXT_texture_env_add", extStart, extEnd); -#endif /* GL_EXT_texture_env_add */ -#ifdef GL_EXT_texture_env_combine - CONST_CAST(GLEW_EXT_texture_env_combine) = _glewSearchExtension("GL_EXT_texture_env_combine", extStart, extEnd); -#endif /* GL_EXT_texture_env_combine */ -#ifdef GL_EXT_texture_env_dot3 - CONST_CAST(GLEW_EXT_texture_env_dot3) = _glewSearchExtension("GL_EXT_texture_env_dot3", extStart, extEnd); -#endif /* GL_EXT_texture_env_dot3 */ -#ifdef GL_EXT_texture_filter_anisotropic - CONST_CAST(GLEW_EXT_texture_filter_anisotropic) = _glewSearchExtension("GL_EXT_texture_filter_anisotropic", extStart, extEnd); -#endif /* GL_EXT_texture_filter_anisotropic */ -#ifdef GL_EXT_texture_integer - CONST_CAST(GLEW_EXT_texture_integer) = _glewSearchExtension("GL_EXT_texture_integer", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_integer) CONST_CAST(GLEW_EXT_texture_integer) = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_integer */ -#ifdef GL_EXT_texture_lod_bias - CONST_CAST(GLEW_EXT_texture_lod_bias) = _glewSearchExtension("GL_EXT_texture_lod_bias", extStart, extEnd); -#endif /* GL_EXT_texture_lod_bias */ -#ifdef GL_EXT_texture_mirror_clamp - CONST_CAST(GLEW_EXT_texture_mirror_clamp) = _glewSearchExtension("GL_EXT_texture_mirror_clamp", extStart, extEnd); -#endif /* GL_EXT_texture_mirror_clamp */ -#ifdef GL_EXT_texture_object - CONST_CAST(GLEW_EXT_texture_object) = _glewSearchExtension("GL_EXT_texture_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_object) CONST_CAST(GLEW_EXT_texture_object) = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_object */ -#ifdef GL_EXT_texture_perturb_normal - CONST_CAST(GLEW_EXT_texture_perturb_normal) = _glewSearchExtension("GL_EXT_texture_perturb_normal", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_perturb_normal) CONST_CAST(GLEW_EXT_texture_perturb_normal) = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_perturb_normal */ -#ifdef GL_EXT_texture_rectangle - CONST_CAST(GLEW_EXT_texture_rectangle) = _glewSearchExtension("GL_EXT_texture_rectangle", extStart, extEnd); -#endif /* GL_EXT_texture_rectangle */ -#ifdef GL_EXT_texture_sRGB - CONST_CAST(GLEW_EXT_texture_sRGB) = _glewSearchExtension("GL_EXT_texture_sRGB", extStart, extEnd); -#endif /* GL_EXT_texture_sRGB */ -#ifdef GL_EXT_texture_sRGB_decode - CONST_CAST(GLEW_EXT_texture_sRGB_decode) = _glewSearchExtension("GL_EXT_texture_sRGB_decode", extStart, extEnd); -#endif /* GL_EXT_texture_sRGB_decode */ -#ifdef GL_EXT_texture_shared_exponent - CONST_CAST(GLEW_EXT_texture_shared_exponent) = _glewSearchExtension("GL_EXT_texture_shared_exponent", extStart, extEnd); -#endif /* GL_EXT_texture_shared_exponent */ -#ifdef GL_EXT_texture_snorm - CONST_CAST(GLEW_EXT_texture_snorm) = _glewSearchExtension("GL_EXT_texture_snorm", extStart, extEnd); -#endif /* GL_EXT_texture_snorm */ -#ifdef GL_EXT_texture_swizzle - CONST_CAST(GLEW_EXT_texture_swizzle) = _glewSearchExtension("GL_EXT_texture_swizzle", extStart, extEnd); -#endif /* GL_EXT_texture_swizzle */ -#ifdef GL_EXT_timer_query - CONST_CAST(GLEW_EXT_timer_query) = _glewSearchExtension("GL_EXT_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_EXT_timer_query) CONST_CAST(GLEW_EXT_timer_query) = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_timer_query */ -#ifdef GL_EXT_transform_feedback - CONST_CAST(GLEW_EXT_transform_feedback) = _glewSearchExtension("GL_EXT_transform_feedback", extStart, extEnd); - if (glewExperimental || GLEW_EXT_transform_feedback) CONST_CAST(GLEW_EXT_transform_feedback) = !_glewInit_GL_EXT_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_transform_feedback */ -#ifdef GL_EXT_vertex_array - CONST_CAST(GLEW_EXT_vertex_array) = _glewSearchExtension("GL_EXT_vertex_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_array) CONST_CAST(GLEW_EXT_vertex_array) = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_array */ -#ifdef GL_EXT_vertex_array_bgra - CONST_CAST(GLEW_EXT_vertex_array_bgra) = _glewSearchExtension("GL_EXT_vertex_array_bgra", extStart, extEnd); -#endif /* GL_EXT_vertex_array_bgra */ -#ifdef GL_EXT_vertex_attrib_64bit - CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = _glewSearchExtension("GL_EXT_vertex_attrib_64bit", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_attrib_64bit) CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = !_glewInit_GL_EXT_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_attrib_64bit */ -#ifdef GL_EXT_vertex_shader - CONST_CAST(GLEW_EXT_vertex_shader) = _glewSearchExtension("GL_EXT_vertex_shader", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_shader) CONST_CAST(GLEW_EXT_vertex_shader) = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_shader */ -#ifdef GL_EXT_vertex_weighting - CONST_CAST(GLEW_EXT_vertex_weighting) = _glewSearchExtension("GL_EXT_vertex_weighting", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_weighting) CONST_CAST(GLEW_EXT_vertex_weighting) = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_weighting */ -#ifdef GL_EXT_x11_sync_object - CONST_CAST(GLEW_EXT_x11_sync_object) = _glewSearchExtension("GL_EXT_x11_sync_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_x11_sync_object) CONST_CAST(GLEW_EXT_x11_sync_object) = !_glewInit_GL_EXT_x11_sync_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_x11_sync_object */ -#ifdef GL_GREMEDY_frame_terminator - CONST_CAST(GLEW_GREMEDY_frame_terminator) = _glewSearchExtension("GL_GREMEDY_frame_terminator", extStart, extEnd); - if (glewExperimental || GLEW_GREMEDY_frame_terminator) CONST_CAST(GLEW_GREMEDY_frame_terminator) = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_GREMEDY_frame_terminator */ -#ifdef GL_GREMEDY_string_marker - CONST_CAST(GLEW_GREMEDY_string_marker) = _glewSearchExtension("GL_GREMEDY_string_marker", extStart, extEnd); - if (glewExperimental || GLEW_GREMEDY_string_marker) CONST_CAST(GLEW_GREMEDY_string_marker) = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_GREMEDY_string_marker */ -#ifdef GL_HP_convolution_border_modes - CONST_CAST(GLEW_HP_convolution_border_modes) = _glewSearchExtension("GL_HP_convolution_border_modes", extStart, extEnd); -#endif /* GL_HP_convolution_border_modes */ -#ifdef GL_HP_image_transform - CONST_CAST(GLEW_HP_image_transform) = _glewSearchExtension("GL_HP_image_transform", extStart, extEnd); - if (glewExperimental || GLEW_HP_image_transform) CONST_CAST(GLEW_HP_image_transform) = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_HP_image_transform */ -#ifdef GL_HP_occlusion_test - CONST_CAST(GLEW_HP_occlusion_test) = _glewSearchExtension("GL_HP_occlusion_test", extStart, extEnd); -#endif /* GL_HP_occlusion_test */ -#ifdef GL_HP_texture_lighting - CONST_CAST(GLEW_HP_texture_lighting) = _glewSearchExtension("GL_HP_texture_lighting", extStart, extEnd); -#endif /* GL_HP_texture_lighting */ -#ifdef GL_IBM_cull_vertex - CONST_CAST(GLEW_IBM_cull_vertex) = _glewSearchExtension("GL_IBM_cull_vertex", extStart, extEnd); -#endif /* GL_IBM_cull_vertex */ -#ifdef GL_IBM_multimode_draw_arrays - CONST_CAST(GLEW_IBM_multimode_draw_arrays) = _glewSearchExtension("GL_IBM_multimode_draw_arrays", extStart, extEnd); - if (glewExperimental || GLEW_IBM_multimode_draw_arrays) CONST_CAST(GLEW_IBM_multimode_draw_arrays) = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_IBM_multimode_draw_arrays */ -#ifdef GL_IBM_rasterpos_clip - CONST_CAST(GLEW_IBM_rasterpos_clip) = _glewSearchExtension("GL_IBM_rasterpos_clip", extStart, extEnd); -#endif /* GL_IBM_rasterpos_clip */ -#ifdef GL_IBM_static_data - CONST_CAST(GLEW_IBM_static_data) = _glewSearchExtension("GL_IBM_static_data", extStart, extEnd); -#endif /* GL_IBM_static_data */ -#ifdef GL_IBM_texture_mirrored_repeat - CONST_CAST(GLEW_IBM_texture_mirrored_repeat) = _glewSearchExtension("GL_IBM_texture_mirrored_repeat", extStart, extEnd); -#endif /* GL_IBM_texture_mirrored_repeat */ -#ifdef GL_IBM_vertex_array_lists - CONST_CAST(GLEW_IBM_vertex_array_lists) = _glewSearchExtension("GL_IBM_vertex_array_lists", extStart, extEnd); - if (glewExperimental || GLEW_IBM_vertex_array_lists) CONST_CAST(GLEW_IBM_vertex_array_lists) = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_IBM_vertex_array_lists */ -#ifdef GL_INGR_color_clamp - CONST_CAST(GLEW_INGR_color_clamp) = _glewSearchExtension("GL_INGR_color_clamp", extStart, extEnd); -#endif /* GL_INGR_color_clamp */ -#ifdef GL_INGR_interlace_read - CONST_CAST(GLEW_INGR_interlace_read) = _glewSearchExtension("GL_INGR_interlace_read", extStart, extEnd); -#endif /* GL_INGR_interlace_read */ -#ifdef GL_INTEL_map_texture - CONST_CAST(GLEW_INTEL_map_texture) = _glewSearchExtension("GL_INTEL_map_texture", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_map_texture) CONST_CAST(GLEW_INTEL_map_texture) = !_glewInit_GL_INTEL_map_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_map_texture */ -#ifdef GL_INTEL_parallel_arrays - CONST_CAST(GLEW_INTEL_parallel_arrays) = _glewSearchExtension("GL_INTEL_parallel_arrays", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_parallel_arrays */ -#ifdef GL_INTEL_texture_scissor - CONST_CAST(GLEW_INTEL_texture_scissor) = _glewSearchExtension("GL_INTEL_texture_scissor", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_texture_scissor) CONST_CAST(GLEW_INTEL_texture_scissor) = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_texture_scissor */ -#ifdef GL_KHR_debug - CONST_CAST(GLEW_KHR_debug) = _glewSearchExtension("GL_KHR_debug", extStart, extEnd); - if (glewExperimental || GLEW_KHR_debug) CONST_CAST(GLEW_KHR_debug) = !_glewInit_GL_KHR_debug(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_KHR_debug */ -#ifdef GL_KHR_texture_compression_astc_ldr - CONST_CAST(GLEW_KHR_texture_compression_astc_ldr) = _glewSearchExtension("GL_KHR_texture_compression_astc_ldr", extStart, extEnd); -#endif /* GL_KHR_texture_compression_astc_ldr */ -#ifdef GL_KTX_buffer_region - CONST_CAST(GLEW_KTX_buffer_region) = _glewSearchExtension("GL_KTX_buffer_region", extStart, extEnd); - if (glewExperimental || GLEW_KTX_buffer_region) CONST_CAST(GLEW_KTX_buffer_region) = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_KTX_buffer_region */ -#ifdef GL_MESAX_texture_stack - CONST_CAST(GLEW_MESAX_texture_stack) = _glewSearchExtension("GL_MESAX_texture_stack", extStart, extEnd); -#endif /* GL_MESAX_texture_stack */ -#ifdef GL_MESA_pack_invert - CONST_CAST(GLEW_MESA_pack_invert) = _glewSearchExtension("GL_MESA_pack_invert", extStart, extEnd); -#endif /* GL_MESA_pack_invert */ -#ifdef GL_MESA_resize_buffers - CONST_CAST(GLEW_MESA_resize_buffers) = _glewSearchExtension("GL_MESA_resize_buffers", extStart, extEnd); - if (glewExperimental || GLEW_MESA_resize_buffers) CONST_CAST(GLEW_MESA_resize_buffers) = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_MESA_resize_buffers */ -#ifdef GL_MESA_window_pos - CONST_CAST(GLEW_MESA_window_pos) = _glewSearchExtension("GL_MESA_window_pos", extStart, extEnd); - if (glewExperimental || GLEW_MESA_window_pos) CONST_CAST(GLEW_MESA_window_pos) = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_MESA_window_pos */ -#ifdef GL_MESA_ycbcr_texture - CONST_CAST(GLEW_MESA_ycbcr_texture) = _glewSearchExtension("GL_MESA_ycbcr_texture", extStart, extEnd); -#endif /* GL_MESA_ycbcr_texture */ -#ifdef GL_NVX_conditional_render - CONST_CAST(GLEW_NVX_conditional_render) = _glewSearchExtension("GL_NVX_conditional_render", extStart, extEnd); - if (glewExperimental || GLEW_NVX_conditional_render) CONST_CAST(GLEW_NVX_conditional_render) = !_glewInit_GL_NVX_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NVX_conditional_render */ -#ifdef GL_NVX_gpu_memory_info - CONST_CAST(GLEW_NVX_gpu_memory_info) = _glewSearchExtension("GL_NVX_gpu_memory_info", extStart, extEnd); -#endif /* GL_NVX_gpu_memory_info */ -#ifdef GL_NV_bindless_multi_draw_indirect - CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = _glewSearchExtension("GL_NV_bindless_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect) CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = !_glewInit_GL_NV_bindless_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_bindless_multi_draw_indirect */ -#ifdef GL_NV_bindless_texture - CONST_CAST(GLEW_NV_bindless_texture) = _glewSearchExtension("GL_NV_bindless_texture", extStart, extEnd); - if (glewExperimental || GLEW_NV_bindless_texture) CONST_CAST(GLEW_NV_bindless_texture) = !_glewInit_GL_NV_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_bindless_texture */ -#ifdef GL_NV_blend_equation_advanced - CONST_CAST(GLEW_NV_blend_equation_advanced) = _glewSearchExtension("GL_NV_blend_equation_advanced", extStart, extEnd); - if (glewExperimental || GLEW_NV_blend_equation_advanced) CONST_CAST(GLEW_NV_blend_equation_advanced) = !_glewInit_GL_NV_blend_equation_advanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_blend_equation_advanced */ -#ifdef GL_NV_blend_equation_advanced_coherent - CONST_CAST(GLEW_NV_blend_equation_advanced_coherent) = _glewSearchExtension("GL_NV_blend_equation_advanced_coherent", extStart, extEnd); -#endif /* GL_NV_blend_equation_advanced_coherent */ -#ifdef GL_NV_blend_square - CONST_CAST(GLEW_NV_blend_square) = _glewSearchExtension("GL_NV_blend_square", extStart, extEnd); -#endif /* GL_NV_blend_square */ -#ifdef GL_NV_compute_program5 - CONST_CAST(GLEW_NV_compute_program5) = _glewSearchExtension("GL_NV_compute_program5", extStart, extEnd); -#endif /* GL_NV_compute_program5 */ -#ifdef GL_NV_conditional_render - CONST_CAST(GLEW_NV_conditional_render) = _glewSearchExtension("GL_NV_conditional_render", extStart, extEnd); - if (glewExperimental || GLEW_NV_conditional_render) CONST_CAST(GLEW_NV_conditional_render) = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_conditional_render */ -#ifdef GL_NV_copy_depth_to_color - CONST_CAST(GLEW_NV_copy_depth_to_color) = _glewSearchExtension("GL_NV_copy_depth_to_color", extStart, extEnd); -#endif /* GL_NV_copy_depth_to_color */ -#ifdef GL_NV_copy_image - CONST_CAST(GLEW_NV_copy_image) = _glewSearchExtension("GL_NV_copy_image", extStart, extEnd); - if (glewExperimental || GLEW_NV_copy_image) CONST_CAST(GLEW_NV_copy_image) = !_glewInit_GL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_copy_image */ -#ifdef GL_NV_deep_texture3D - CONST_CAST(GLEW_NV_deep_texture3D) = _glewSearchExtension("GL_NV_deep_texture3D", extStart, extEnd); -#endif /* GL_NV_deep_texture3D */ -#ifdef GL_NV_depth_buffer_float - CONST_CAST(GLEW_NV_depth_buffer_float) = _glewSearchExtension("GL_NV_depth_buffer_float", extStart, extEnd); - if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_depth_buffer_float */ -#ifdef GL_NV_depth_clamp - CONST_CAST(GLEW_NV_depth_clamp) = _glewSearchExtension("GL_NV_depth_clamp", extStart, extEnd); -#endif /* GL_NV_depth_clamp */ -#ifdef GL_NV_depth_range_unclamped - CONST_CAST(GLEW_NV_depth_range_unclamped) = _glewSearchExtension("GL_NV_depth_range_unclamped", extStart, extEnd); -#endif /* GL_NV_depth_range_unclamped */ -#ifdef GL_NV_draw_texture - CONST_CAST(GLEW_NV_draw_texture) = _glewSearchExtension("GL_NV_draw_texture", extStart, extEnd); - if (glewExperimental || GLEW_NV_draw_texture) CONST_CAST(GLEW_NV_draw_texture) = !_glewInit_GL_NV_draw_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_draw_texture */ -#ifdef GL_NV_evaluators - CONST_CAST(GLEW_NV_evaluators) = _glewSearchExtension("GL_NV_evaluators", extStart, extEnd); - if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_evaluators */ -#ifdef GL_NV_explicit_multisample - CONST_CAST(GLEW_NV_explicit_multisample) = _glewSearchExtension("GL_NV_explicit_multisample", extStart, extEnd); - if (glewExperimental || GLEW_NV_explicit_multisample) CONST_CAST(GLEW_NV_explicit_multisample) = !_glewInit_GL_NV_explicit_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_explicit_multisample */ -#ifdef GL_NV_fence - CONST_CAST(GLEW_NV_fence) = _glewSearchExtension("GL_NV_fence", extStart, extEnd); - if (glewExperimental || GLEW_NV_fence) CONST_CAST(GLEW_NV_fence) = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_fence */ -#ifdef GL_NV_float_buffer - CONST_CAST(GLEW_NV_float_buffer) = _glewSearchExtension("GL_NV_float_buffer", extStart, extEnd); -#endif /* GL_NV_float_buffer */ -#ifdef GL_NV_fog_distance - CONST_CAST(GLEW_NV_fog_distance) = _glewSearchExtension("GL_NV_fog_distance", extStart, extEnd); -#endif /* GL_NV_fog_distance */ -#ifdef GL_NV_fragment_program - CONST_CAST(GLEW_NV_fragment_program) = _glewSearchExtension("GL_NV_fragment_program", extStart, extEnd); - if (glewExperimental || GLEW_NV_fragment_program) CONST_CAST(GLEW_NV_fragment_program) = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_fragment_program */ -#ifdef GL_NV_fragment_program2 - CONST_CAST(GLEW_NV_fragment_program2) = _glewSearchExtension("GL_NV_fragment_program2", extStart, extEnd); -#endif /* GL_NV_fragment_program2 */ -#ifdef GL_NV_fragment_program4 - CONST_CAST(GLEW_NV_fragment_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); -#endif /* GL_NV_fragment_program4 */ -#ifdef GL_NV_fragment_program_option - CONST_CAST(GLEW_NV_fragment_program_option) = _glewSearchExtension("GL_NV_fragment_program_option", extStart, extEnd); -#endif /* GL_NV_fragment_program_option */ -#ifdef GL_NV_framebuffer_multisample_coverage - CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = _glewSearchExtension("GL_NV_framebuffer_multisample_coverage", extStart, extEnd); - if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_framebuffer_multisample_coverage */ -#ifdef GL_NV_geometry_program4 - CONST_CAST(GLEW_NV_geometry_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); - if (glewExperimental || GLEW_NV_geometry_program4) CONST_CAST(GLEW_NV_geometry_program4) = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_geometry_program4 */ -#ifdef GL_NV_geometry_shader4 - CONST_CAST(GLEW_NV_geometry_shader4) = _glewSearchExtension("GL_NV_geometry_shader4", extStart, extEnd); -#endif /* GL_NV_geometry_shader4 */ -#ifdef GL_NV_gpu_program4 - CONST_CAST(GLEW_NV_gpu_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); - if (glewExperimental || GLEW_NV_gpu_program4) CONST_CAST(GLEW_NV_gpu_program4) = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_gpu_program4 */ -#ifdef GL_NV_gpu_program5 - CONST_CAST(GLEW_NV_gpu_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); -#endif /* GL_NV_gpu_program5 */ -#ifdef GL_NV_gpu_program5_mem_extended - CONST_CAST(GLEW_NV_gpu_program5_mem_extended) = _glewSearchExtension("GL_NV_gpu_program5_mem_extended", extStart, extEnd); -#endif /* GL_NV_gpu_program5_mem_extended */ -#ifdef GL_NV_gpu_program_fp64 - CONST_CAST(GLEW_NV_gpu_program_fp64) = _glewSearchExtension("GL_NV_gpu_program_fp64", extStart, extEnd); -#endif /* GL_NV_gpu_program_fp64 */ -#ifdef GL_NV_gpu_shader5 - CONST_CAST(GLEW_NV_gpu_shader5) = _glewSearchExtension("GL_NV_gpu_shader5", extStart, extEnd); - if (glewExperimental || GLEW_NV_gpu_shader5) CONST_CAST(GLEW_NV_gpu_shader5) = !_glewInit_GL_NV_gpu_shader5(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_gpu_shader5 */ -#ifdef GL_NV_half_float - CONST_CAST(GLEW_NV_half_float) = _glewSearchExtension("GL_NV_half_float", extStart, extEnd); - if (glewExperimental || GLEW_NV_half_float) CONST_CAST(GLEW_NV_half_float) = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_half_float */ -#ifdef GL_NV_light_max_exponent - CONST_CAST(GLEW_NV_light_max_exponent) = _glewSearchExtension("GL_NV_light_max_exponent", extStart, extEnd); -#endif /* GL_NV_light_max_exponent */ -#ifdef GL_NV_multisample_coverage - CONST_CAST(GLEW_NV_multisample_coverage) = _glewSearchExtension("GL_NV_multisample_coverage", extStart, extEnd); -#endif /* GL_NV_multisample_coverage */ -#ifdef GL_NV_multisample_filter_hint - CONST_CAST(GLEW_NV_multisample_filter_hint) = _glewSearchExtension("GL_NV_multisample_filter_hint", extStart, extEnd); -#endif /* GL_NV_multisample_filter_hint */ -#ifdef GL_NV_occlusion_query - CONST_CAST(GLEW_NV_occlusion_query) = _glewSearchExtension("GL_NV_occlusion_query", extStart, extEnd); - if (glewExperimental || GLEW_NV_occlusion_query) CONST_CAST(GLEW_NV_occlusion_query) = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_occlusion_query */ -#ifdef GL_NV_packed_depth_stencil - CONST_CAST(GLEW_NV_packed_depth_stencil) = _glewSearchExtension("GL_NV_packed_depth_stencil", extStart, extEnd); -#endif /* GL_NV_packed_depth_stencil */ -#ifdef GL_NV_parameter_buffer_object - CONST_CAST(GLEW_NV_parameter_buffer_object) = _glewSearchExtension("GL_NV_parameter_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_NV_parameter_buffer_object) CONST_CAST(GLEW_NV_parameter_buffer_object) = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_parameter_buffer_object */ -#ifdef GL_NV_parameter_buffer_object2 - CONST_CAST(GLEW_NV_parameter_buffer_object2) = _glewSearchExtension("GL_NV_parameter_buffer_object2", extStart, extEnd); -#endif /* GL_NV_parameter_buffer_object2 */ -#ifdef GL_NV_path_rendering - CONST_CAST(GLEW_NV_path_rendering) = _glewSearchExtension("GL_NV_path_rendering", extStart, extEnd); - if (glewExperimental || GLEW_NV_path_rendering) CONST_CAST(GLEW_NV_path_rendering) = !_glewInit_GL_NV_path_rendering(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_path_rendering */ -#ifdef GL_NV_pixel_data_range - CONST_CAST(GLEW_NV_pixel_data_range) = _glewSearchExtension("GL_NV_pixel_data_range", extStart, extEnd); - if (glewExperimental || GLEW_NV_pixel_data_range) CONST_CAST(GLEW_NV_pixel_data_range) = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_pixel_data_range */ -#ifdef GL_NV_point_sprite - CONST_CAST(GLEW_NV_point_sprite) = _glewSearchExtension("GL_NV_point_sprite", extStart, extEnd); - if (glewExperimental || GLEW_NV_point_sprite) CONST_CAST(GLEW_NV_point_sprite) = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_point_sprite */ -#ifdef GL_NV_present_video - CONST_CAST(GLEW_NV_present_video) = _glewSearchExtension("GL_NV_present_video", extStart, extEnd); - if (glewExperimental || GLEW_NV_present_video) CONST_CAST(GLEW_NV_present_video) = !_glewInit_GL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_present_video */ -#ifdef GL_NV_primitive_restart - CONST_CAST(GLEW_NV_primitive_restart) = _glewSearchExtension("GL_NV_primitive_restart", extStart, extEnd); - if (glewExperimental || GLEW_NV_primitive_restart) CONST_CAST(GLEW_NV_primitive_restart) = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_primitive_restart */ -#ifdef GL_NV_register_combiners - CONST_CAST(GLEW_NV_register_combiners) = _glewSearchExtension("GL_NV_register_combiners", extStart, extEnd); - if (glewExperimental || GLEW_NV_register_combiners) CONST_CAST(GLEW_NV_register_combiners) = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_register_combiners */ -#ifdef GL_NV_register_combiners2 - CONST_CAST(GLEW_NV_register_combiners2) = _glewSearchExtension("GL_NV_register_combiners2", extStart, extEnd); - if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_register_combiners2 */ -#ifdef GL_NV_shader_atomic_counters - CONST_CAST(GLEW_NV_shader_atomic_counters) = _glewSearchExtension("GL_NV_shader_atomic_counters", extStart, extEnd); -#endif /* GL_NV_shader_atomic_counters */ -#ifdef GL_NV_shader_atomic_float - CONST_CAST(GLEW_NV_shader_atomic_float) = _glewSearchExtension("GL_NV_shader_atomic_float", extStart, extEnd); -#endif /* GL_NV_shader_atomic_float */ -#ifdef GL_NV_shader_buffer_load - CONST_CAST(GLEW_NV_shader_buffer_load) = _glewSearchExtension("GL_NV_shader_buffer_load", extStart, extEnd); - if (glewExperimental || GLEW_NV_shader_buffer_load) CONST_CAST(GLEW_NV_shader_buffer_load) = !_glewInit_GL_NV_shader_buffer_load(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_shader_buffer_load */ -#ifdef GL_NV_shader_storage_buffer_object - CONST_CAST(GLEW_NV_shader_storage_buffer_object) = _glewSearchExtension("GL_NV_shader_storage_buffer_object", extStart, extEnd); -#endif /* GL_NV_shader_storage_buffer_object */ -#ifdef GL_NV_tessellation_program5 - CONST_CAST(GLEW_NV_tessellation_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); -#endif /* GL_NV_tessellation_program5 */ -#ifdef GL_NV_texgen_emboss - CONST_CAST(GLEW_NV_texgen_emboss) = _glewSearchExtension("GL_NV_texgen_emboss", extStart, extEnd); -#endif /* GL_NV_texgen_emboss */ -#ifdef GL_NV_texgen_reflection - CONST_CAST(GLEW_NV_texgen_reflection) = _glewSearchExtension("GL_NV_texgen_reflection", extStart, extEnd); -#endif /* GL_NV_texgen_reflection */ -#ifdef GL_NV_texture_barrier - CONST_CAST(GLEW_NV_texture_barrier) = _glewSearchExtension("GL_NV_texture_barrier", extStart, extEnd); - if (glewExperimental || GLEW_NV_texture_barrier) CONST_CAST(GLEW_NV_texture_barrier) = !_glewInit_GL_NV_texture_barrier(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_texture_barrier */ -#ifdef GL_NV_texture_compression_vtc - CONST_CAST(GLEW_NV_texture_compression_vtc) = _glewSearchExtension("GL_NV_texture_compression_vtc", extStart, extEnd); -#endif /* GL_NV_texture_compression_vtc */ -#ifdef GL_NV_texture_env_combine4 - CONST_CAST(GLEW_NV_texture_env_combine4) = _glewSearchExtension("GL_NV_texture_env_combine4", extStart, extEnd); -#endif /* GL_NV_texture_env_combine4 */ -#ifdef GL_NV_texture_expand_normal - CONST_CAST(GLEW_NV_texture_expand_normal) = _glewSearchExtension("GL_NV_texture_expand_normal", extStart, extEnd); -#endif /* GL_NV_texture_expand_normal */ -#ifdef GL_NV_texture_multisample - CONST_CAST(GLEW_NV_texture_multisample) = _glewSearchExtension("GL_NV_texture_multisample", extStart, extEnd); - if (glewExperimental || GLEW_NV_texture_multisample) CONST_CAST(GLEW_NV_texture_multisample) = !_glewInit_GL_NV_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_texture_multisample */ -#ifdef GL_NV_texture_rectangle - CONST_CAST(GLEW_NV_texture_rectangle) = _glewSearchExtension("GL_NV_texture_rectangle", extStart, extEnd); -#endif /* GL_NV_texture_rectangle */ -#ifdef GL_NV_texture_shader - CONST_CAST(GLEW_NV_texture_shader) = _glewSearchExtension("GL_NV_texture_shader", extStart, extEnd); -#endif /* GL_NV_texture_shader */ -#ifdef GL_NV_texture_shader2 - CONST_CAST(GLEW_NV_texture_shader2) = _glewSearchExtension("GL_NV_texture_shader2", extStart, extEnd); -#endif /* GL_NV_texture_shader2 */ -#ifdef GL_NV_texture_shader3 - CONST_CAST(GLEW_NV_texture_shader3) = _glewSearchExtension("GL_NV_texture_shader3", extStart, extEnd); -#endif /* GL_NV_texture_shader3 */ -#ifdef GL_NV_transform_feedback - CONST_CAST(GLEW_NV_transform_feedback) = _glewSearchExtension("GL_NV_transform_feedback", extStart, extEnd); - if (glewExperimental || GLEW_NV_transform_feedback) CONST_CAST(GLEW_NV_transform_feedback) = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_transform_feedback */ -#ifdef GL_NV_transform_feedback2 - CONST_CAST(GLEW_NV_transform_feedback2) = _glewSearchExtension("GL_NV_transform_feedback2", extStart, extEnd); - if (glewExperimental || GLEW_NV_transform_feedback2) CONST_CAST(GLEW_NV_transform_feedback2) = !_glewInit_GL_NV_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_transform_feedback2 */ -#ifdef GL_NV_vdpau_interop - CONST_CAST(GLEW_NV_vdpau_interop) = _glewSearchExtension("GL_NV_vdpau_interop", extStart, extEnd); - if (glewExperimental || GLEW_NV_vdpau_interop) CONST_CAST(GLEW_NV_vdpau_interop) = !_glewInit_GL_NV_vdpau_interop(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vdpau_interop */ -#ifdef GL_NV_vertex_array_range - CONST_CAST(GLEW_NV_vertex_array_range) = _glewSearchExtension("GL_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_array_range) CONST_CAST(GLEW_NV_vertex_array_range) = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_array_range */ -#ifdef GL_NV_vertex_array_range2 - CONST_CAST(GLEW_NV_vertex_array_range2) = _glewSearchExtension("GL_NV_vertex_array_range2", extStart, extEnd); -#endif /* GL_NV_vertex_array_range2 */ -#ifdef GL_NV_vertex_attrib_integer_64bit - CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = _glewSearchExtension("GL_NV_vertex_attrib_integer_64bit", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_attrib_integer_64bit) CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = !_glewInit_GL_NV_vertex_attrib_integer_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_attrib_integer_64bit */ -#ifdef GL_NV_vertex_buffer_unified_memory - CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = _glewSearchExtension("GL_NV_vertex_buffer_unified_memory", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_buffer_unified_memory) CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = !_glewInit_GL_NV_vertex_buffer_unified_memory(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_buffer_unified_memory */ -#ifdef GL_NV_vertex_program - CONST_CAST(GLEW_NV_vertex_program) = _glewSearchExtension("GL_NV_vertex_program", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_program) CONST_CAST(GLEW_NV_vertex_program) = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_program */ -#ifdef GL_NV_vertex_program1_1 - CONST_CAST(GLEW_NV_vertex_program1_1) = _glewSearchExtension("GL_NV_vertex_program1_1", extStart, extEnd); -#endif /* GL_NV_vertex_program1_1 */ -#ifdef GL_NV_vertex_program2 - CONST_CAST(GLEW_NV_vertex_program2) = _glewSearchExtension("GL_NV_vertex_program2", extStart, extEnd); -#endif /* GL_NV_vertex_program2 */ -#ifdef GL_NV_vertex_program2_option - CONST_CAST(GLEW_NV_vertex_program2_option) = _glewSearchExtension("GL_NV_vertex_program2_option", extStart, extEnd); -#endif /* GL_NV_vertex_program2_option */ -#ifdef GL_NV_vertex_program3 - CONST_CAST(GLEW_NV_vertex_program3) = _glewSearchExtension("GL_NV_vertex_program3", extStart, extEnd); -#endif /* GL_NV_vertex_program3 */ -#ifdef GL_NV_vertex_program4 - CONST_CAST(GLEW_NV_vertex_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); -#endif /* GL_NV_vertex_program4 */ -#ifdef GL_NV_video_capture - CONST_CAST(GLEW_NV_video_capture) = _glewSearchExtension("GL_NV_video_capture", extStart, extEnd); - if (glewExperimental || GLEW_NV_video_capture) CONST_CAST(GLEW_NV_video_capture) = !_glewInit_GL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_video_capture */ -#ifdef GL_OES_byte_coordinates - CONST_CAST(GLEW_OES_byte_coordinates) = _glewSearchExtension("GL_OES_byte_coordinates", extStart, extEnd); -#endif /* GL_OES_byte_coordinates */ -#ifdef GL_OES_compressed_paletted_texture - CONST_CAST(GLEW_OES_compressed_paletted_texture) = _glewSearchExtension("GL_OES_compressed_paletted_texture", extStart, extEnd); -#endif /* GL_OES_compressed_paletted_texture */ -#ifdef GL_OES_read_format - CONST_CAST(GLEW_OES_read_format) = _glewSearchExtension("GL_OES_read_format", extStart, extEnd); -#endif /* GL_OES_read_format */ -#ifdef GL_OES_single_precision - CONST_CAST(GLEW_OES_single_precision) = _glewSearchExtension("GL_OES_single_precision", extStart, extEnd); - if (glewExperimental || GLEW_OES_single_precision) CONST_CAST(GLEW_OES_single_precision) = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_OES_single_precision */ -#ifdef GL_OML_interlace - CONST_CAST(GLEW_OML_interlace) = _glewSearchExtension("GL_OML_interlace", extStart, extEnd); -#endif /* GL_OML_interlace */ -#ifdef GL_OML_resample - CONST_CAST(GLEW_OML_resample) = _glewSearchExtension("GL_OML_resample", extStart, extEnd); -#endif /* GL_OML_resample */ -#ifdef GL_OML_subsample - CONST_CAST(GLEW_OML_subsample) = _glewSearchExtension("GL_OML_subsample", extStart, extEnd); -#endif /* GL_OML_subsample */ -#ifdef GL_PGI_misc_hints - CONST_CAST(GLEW_PGI_misc_hints) = _glewSearchExtension("GL_PGI_misc_hints", extStart, extEnd); -#endif /* GL_PGI_misc_hints */ -#ifdef GL_PGI_vertex_hints - CONST_CAST(GLEW_PGI_vertex_hints) = _glewSearchExtension("GL_PGI_vertex_hints", extStart, extEnd); -#endif /* GL_PGI_vertex_hints */ -#ifdef GL_REGAL_ES1_0_compatibility - CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = _glewSearchExtension("GL_REGAL_ES1_0_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_ES1_0_compatibility) CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = !_glewInit_GL_REGAL_ES1_0_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_ES1_0_compatibility */ -#ifdef GL_REGAL_ES1_1_compatibility - CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = _glewSearchExtension("GL_REGAL_ES1_1_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_ES1_1_compatibility) CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = !_glewInit_GL_REGAL_ES1_1_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_ES1_1_compatibility */ -#ifdef GL_REGAL_enable - CONST_CAST(GLEW_REGAL_enable) = _glewSearchExtension("GL_REGAL_enable", extStart, extEnd); -#endif /* GL_REGAL_enable */ -#ifdef GL_REGAL_error_string - CONST_CAST(GLEW_REGAL_error_string) = _glewSearchExtension("GL_REGAL_error_string", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_error_string) CONST_CAST(GLEW_REGAL_error_string) = !_glewInit_GL_REGAL_error_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_error_string */ -#ifdef GL_REGAL_extension_query - CONST_CAST(GLEW_REGAL_extension_query) = _glewSearchExtension("GL_REGAL_extension_query", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_extension_query) CONST_CAST(GLEW_REGAL_extension_query) = !_glewInit_GL_REGAL_extension_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_extension_query */ -#ifdef GL_REGAL_log - CONST_CAST(GLEW_REGAL_log) = _glewSearchExtension("GL_REGAL_log", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_log) CONST_CAST(GLEW_REGAL_log) = !_glewInit_GL_REGAL_log(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_log */ -#ifdef GL_REND_screen_coordinates - CONST_CAST(GLEW_REND_screen_coordinates) = _glewSearchExtension("GL_REND_screen_coordinates", extStart, extEnd); -#endif /* GL_REND_screen_coordinates */ -#ifdef GL_S3_s3tc - CONST_CAST(GLEW_S3_s3tc) = _glewSearchExtension("GL_S3_s3tc", extStart, extEnd); -#endif /* GL_S3_s3tc */ -#ifdef GL_SGIS_color_range - CONST_CAST(GLEW_SGIS_color_range) = _glewSearchExtension("GL_SGIS_color_range", extStart, extEnd); -#endif /* GL_SGIS_color_range */ -#ifdef GL_SGIS_detail_texture - CONST_CAST(GLEW_SGIS_detail_texture) = _glewSearchExtension("GL_SGIS_detail_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_detail_texture) CONST_CAST(GLEW_SGIS_detail_texture) = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_detail_texture */ -#ifdef GL_SGIS_fog_function - CONST_CAST(GLEW_SGIS_fog_function) = _glewSearchExtension("GL_SGIS_fog_function", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_fog_function) CONST_CAST(GLEW_SGIS_fog_function) = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_fog_function */ -#ifdef GL_SGIS_generate_mipmap - CONST_CAST(GLEW_SGIS_generate_mipmap) = _glewSearchExtension("GL_SGIS_generate_mipmap", extStart, extEnd); -#endif /* GL_SGIS_generate_mipmap */ -#ifdef GL_SGIS_multisample - CONST_CAST(GLEW_SGIS_multisample) = _glewSearchExtension("GL_SGIS_multisample", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_multisample) CONST_CAST(GLEW_SGIS_multisample) = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_multisample */ -#ifdef GL_SGIS_pixel_texture - CONST_CAST(GLEW_SGIS_pixel_texture) = _glewSearchExtension("GL_SGIS_pixel_texture", extStart, extEnd); -#endif /* GL_SGIS_pixel_texture */ -#ifdef GL_SGIS_point_line_texgen - CONST_CAST(GLEW_SGIS_point_line_texgen) = _glewSearchExtension("GL_SGIS_point_line_texgen", extStart, extEnd); -#endif /* GL_SGIS_point_line_texgen */ -#ifdef GL_SGIS_sharpen_texture - CONST_CAST(GLEW_SGIS_sharpen_texture) = _glewSearchExtension("GL_SGIS_sharpen_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_sharpen_texture) CONST_CAST(GLEW_SGIS_sharpen_texture) = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_sharpen_texture */ -#ifdef GL_SGIS_texture4D - CONST_CAST(GLEW_SGIS_texture4D) = _glewSearchExtension("GL_SGIS_texture4D", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_texture4D) CONST_CAST(GLEW_SGIS_texture4D) = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_texture4D */ -#ifdef GL_SGIS_texture_border_clamp - CONST_CAST(GLEW_SGIS_texture_border_clamp) = _glewSearchExtension("GL_SGIS_texture_border_clamp", extStart, extEnd); -#endif /* GL_SGIS_texture_border_clamp */ -#ifdef GL_SGIS_texture_edge_clamp - CONST_CAST(GLEW_SGIS_texture_edge_clamp) = _glewSearchExtension("GL_SGIS_texture_edge_clamp", extStart, extEnd); -#endif /* GL_SGIS_texture_edge_clamp */ -#ifdef GL_SGIS_texture_filter4 - CONST_CAST(GLEW_SGIS_texture_filter4) = _glewSearchExtension("GL_SGIS_texture_filter4", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_texture_filter4) CONST_CAST(GLEW_SGIS_texture_filter4) = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_texture_filter4 */ -#ifdef GL_SGIS_texture_lod - CONST_CAST(GLEW_SGIS_texture_lod) = _glewSearchExtension("GL_SGIS_texture_lod", extStart, extEnd); -#endif /* GL_SGIS_texture_lod */ -#ifdef GL_SGIS_texture_select - CONST_CAST(GLEW_SGIS_texture_select) = _glewSearchExtension("GL_SGIS_texture_select", extStart, extEnd); -#endif /* GL_SGIS_texture_select */ -#ifdef GL_SGIX_async - CONST_CAST(GLEW_SGIX_async) = _glewSearchExtension("GL_SGIX_async", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_async) CONST_CAST(GLEW_SGIX_async) = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_async */ -#ifdef GL_SGIX_async_histogram - CONST_CAST(GLEW_SGIX_async_histogram) = _glewSearchExtension("GL_SGIX_async_histogram", extStart, extEnd); -#endif /* GL_SGIX_async_histogram */ -#ifdef GL_SGIX_async_pixel - CONST_CAST(GLEW_SGIX_async_pixel) = _glewSearchExtension("GL_SGIX_async_pixel", extStart, extEnd); -#endif /* GL_SGIX_async_pixel */ -#ifdef GL_SGIX_blend_alpha_minmax - CONST_CAST(GLEW_SGIX_blend_alpha_minmax) = _glewSearchExtension("GL_SGIX_blend_alpha_minmax", extStart, extEnd); -#endif /* GL_SGIX_blend_alpha_minmax */ -#ifdef GL_SGIX_clipmap - CONST_CAST(GLEW_SGIX_clipmap) = _glewSearchExtension("GL_SGIX_clipmap", extStart, extEnd); -#endif /* GL_SGIX_clipmap */ -#ifdef GL_SGIX_convolution_accuracy - CONST_CAST(GLEW_SGIX_convolution_accuracy) = _glewSearchExtension("GL_SGIX_convolution_accuracy", extStart, extEnd); -#endif /* GL_SGIX_convolution_accuracy */ -#ifdef GL_SGIX_depth_texture - CONST_CAST(GLEW_SGIX_depth_texture) = _glewSearchExtension("GL_SGIX_depth_texture", extStart, extEnd); -#endif /* GL_SGIX_depth_texture */ -#ifdef GL_SGIX_flush_raster - CONST_CAST(GLEW_SGIX_flush_raster) = _glewSearchExtension("GL_SGIX_flush_raster", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_flush_raster) CONST_CAST(GLEW_SGIX_flush_raster) = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_flush_raster */ -#ifdef GL_SGIX_fog_offset - CONST_CAST(GLEW_SGIX_fog_offset) = _glewSearchExtension("GL_SGIX_fog_offset", extStart, extEnd); -#endif /* GL_SGIX_fog_offset */ -#ifdef GL_SGIX_fog_texture - CONST_CAST(GLEW_SGIX_fog_texture) = _glewSearchExtension("GL_SGIX_fog_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_fog_texture) CONST_CAST(GLEW_SGIX_fog_texture) = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_fog_texture */ -#ifdef GL_SGIX_fragment_specular_lighting - CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = _glewSearchExtension("GL_SGIX_fragment_specular_lighting", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_fragment_specular_lighting */ -#ifdef GL_SGIX_framezoom - CONST_CAST(GLEW_SGIX_framezoom) = _glewSearchExtension("GL_SGIX_framezoom", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_framezoom) CONST_CAST(GLEW_SGIX_framezoom) = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_framezoom */ -#ifdef GL_SGIX_interlace - CONST_CAST(GLEW_SGIX_interlace) = _glewSearchExtension("GL_SGIX_interlace", extStart, extEnd); -#endif /* GL_SGIX_interlace */ -#ifdef GL_SGIX_ir_instrument1 - CONST_CAST(GLEW_SGIX_ir_instrument1) = _glewSearchExtension("GL_SGIX_ir_instrument1", extStart, extEnd); -#endif /* GL_SGIX_ir_instrument1 */ -#ifdef GL_SGIX_list_priority - CONST_CAST(GLEW_SGIX_list_priority) = _glewSearchExtension("GL_SGIX_list_priority", extStart, extEnd); -#endif /* GL_SGIX_list_priority */ -#ifdef GL_SGIX_pixel_texture - CONST_CAST(GLEW_SGIX_pixel_texture) = _glewSearchExtension("GL_SGIX_pixel_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_pixel_texture) CONST_CAST(GLEW_SGIX_pixel_texture) = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_pixel_texture */ -#ifdef GL_SGIX_pixel_texture_bits - CONST_CAST(GLEW_SGIX_pixel_texture_bits) = _glewSearchExtension("GL_SGIX_pixel_texture_bits", extStart, extEnd); -#endif /* GL_SGIX_pixel_texture_bits */ -#ifdef GL_SGIX_reference_plane - CONST_CAST(GLEW_SGIX_reference_plane) = _glewSearchExtension("GL_SGIX_reference_plane", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_reference_plane) CONST_CAST(GLEW_SGIX_reference_plane) = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_reference_plane */ -#ifdef GL_SGIX_resample - CONST_CAST(GLEW_SGIX_resample) = _glewSearchExtension("GL_SGIX_resample", extStart, extEnd); -#endif /* GL_SGIX_resample */ -#ifdef GL_SGIX_shadow - CONST_CAST(GLEW_SGIX_shadow) = _glewSearchExtension("GL_SGIX_shadow", extStart, extEnd); -#endif /* GL_SGIX_shadow */ -#ifdef GL_SGIX_shadow_ambient - CONST_CAST(GLEW_SGIX_shadow_ambient) = _glewSearchExtension("GL_SGIX_shadow_ambient", extStart, extEnd); -#endif /* GL_SGIX_shadow_ambient */ -#ifdef GL_SGIX_sprite - CONST_CAST(GLEW_SGIX_sprite) = _glewSearchExtension("GL_SGIX_sprite", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_sprite) CONST_CAST(GLEW_SGIX_sprite) = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_sprite */ -#ifdef GL_SGIX_tag_sample_buffer - CONST_CAST(GLEW_SGIX_tag_sample_buffer) = _glewSearchExtension("GL_SGIX_tag_sample_buffer", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_tag_sample_buffer) CONST_CAST(GLEW_SGIX_tag_sample_buffer) = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_tag_sample_buffer */ -#ifdef GL_SGIX_texture_add_env - CONST_CAST(GLEW_SGIX_texture_add_env) = _glewSearchExtension("GL_SGIX_texture_add_env", extStart, extEnd); -#endif /* GL_SGIX_texture_add_env */ -#ifdef GL_SGIX_texture_coordinate_clamp - CONST_CAST(GLEW_SGIX_texture_coordinate_clamp) = _glewSearchExtension("GL_SGIX_texture_coordinate_clamp", extStart, extEnd); -#endif /* GL_SGIX_texture_coordinate_clamp */ -#ifdef GL_SGIX_texture_lod_bias - CONST_CAST(GLEW_SGIX_texture_lod_bias) = _glewSearchExtension("GL_SGIX_texture_lod_bias", extStart, extEnd); -#endif /* GL_SGIX_texture_lod_bias */ -#ifdef GL_SGIX_texture_multi_buffer - CONST_CAST(GLEW_SGIX_texture_multi_buffer) = _glewSearchExtension("GL_SGIX_texture_multi_buffer", extStart, extEnd); -#endif /* GL_SGIX_texture_multi_buffer */ -#ifdef GL_SGIX_texture_range - CONST_CAST(GLEW_SGIX_texture_range) = _glewSearchExtension("GL_SGIX_texture_range", extStart, extEnd); -#endif /* GL_SGIX_texture_range */ -#ifdef GL_SGIX_texture_scale_bias - CONST_CAST(GLEW_SGIX_texture_scale_bias) = _glewSearchExtension("GL_SGIX_texture_scale_bias", extStart, extEnd); -#endif /* GL_SGIX_texture_scale_bias */ -#ifdef GL_SGIX_vertex_preclip - CONST_CAST(GLEW_SGIX_vertex_preclip) = _glewSearchExtension("GL_SGIX_vertex_preclip", extStart, extEnd); -#endif /* GL_SGIX_vertex_preclip */ -#ifdef GL_SGIX_vertex_preclip_hint - CONST_CAST(GLEW_SGIX_vertex_preclip_hint) = _glewSearchExtension("GL_SGIX_vertex_preclip_hint", extStart, extEnd); -#endif /* GL_SGIX_vertex_preclip_hint */ -#ifdef GL_SGIX_ycrcb - CONST_CAST(GLEW_SGIX_ycrcb) = _glewSearchExtension("GL_SGIX_ycrcb", extStart, extEnd); -#endif /* GL_SGIX_ycrcb */ -#ifdef GL_SGI_color_matrix - CONST_CAST(GLEW_SGI_color_matrix) = _glewSearchExtension("GL_SGI_color_matrix", extStart, extEnd); -#endif /* GL_SGI_color_matrix */ -#ifdef GL_SGI_color_table - CONST_CAST(GLEW_SGI_color_table) = _glewSearchExtension("GL_SGI_color_table", extStart, extEnd); - if (glewExperimental || GLEW_SGI_color_table) CONST_CAST(GLEW_SGI_color_table) = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGI_color_table */ -#ifdef GL_SGI_texture_color_table - CONST_CAST(GLEW_SGI_texture_color_table) = _glewSearchExtension("GL_SGI_texture_color_table", extStart, extEnd); -#endif /* GL_SGI_texture_color_table */ -#ifdef GL_SUNX_constant_data - CONST_CAST(GLEW_SUNX_constant_data) = _glewSearchExtension("GL_SUNX_constant_data", extStart, extEnd); - if (glewExperimental || GLEW_SUNX_constant_data) CONST_CAST(GLEW_SUNX_constant_data) = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUNX_constant_data */ -#ifdef GL_SUN_convolution_border_modes - CONST_CAST(GLEW_SUN_convolution_border_modes) = _glewSearchExtension("GL_SUN_convolution_border_modes", extStart, extEnd); -#endif /* GL_SUN_convolution_border_modes */ -#ifdef GL_SUN_global_alpha - CONST_CAST(GLEW_SUN_global_alpha) = _glewSearchExtension("GL_SUN_global_alpha", extStart, extEnd); - if (glewExperimental || GLEW_SUN_global_alpha) CONST_CAST(GLEW_SUN_global_alpha) = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_global_alpha */ -#ifdef GL_SUN_mesh_array - CONST_CAST(GLEW_SUN_mesh_array) = _glewSearchExtension("GL_SUN_mesh_array", extStart, extEnd); -#endif /* GL_SUN_mesh_array */ -#ifdef GL_SUN_read_video_pixels - CONST_CAST(GLEW_SUN_read_video_pixels) = _glewSearchExtension("GL_SUN_read_video_pixels", extStart, extEnd); - if (glewExperimental || GLEW_SUN_read_video_pixels) CONST_CAST(GLEW_SUN_read_video_pixels) = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_read_video_pixels */ -#ifdef GL_SUN_slice_accum - CONST_CAST(GLEW_SUN_slice_accum) = _glewSearchExtension("GL_SUN_slice_accum", extStart, extEnd); -#endif /* GL_SUN_slice_accum */ -#ifdef GL_SUN_triangle_list - CONST_CAST(GLEW_SUN_triangle_list) = _glewSearchExtension("GL_SUN_triangle_list", extStart, extEnd); - if (glewExperimental || GLEW_SUN_triangle_list) CONST_CAST(GLEW_SUN_triangle_list) = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_triangle_list */ -#ifdef GL_SUN_vertex - CONST_CAST(GLEW_SUN_vertex) = _glewSearchExtension("GL_SUN_vertex", extStart, extEnd); - if (glewExperimental || GLEW_SUN_vertex) CONST_CAST(GLEW_SUN_vertex) = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_vertex */ -#ifdef GL_WIN_phong_shading - CONST_CAST(GLEW_WIN_phong_shading) = _glewSearchExtension("GL_WIN_phong_shading", extStart, extEnd); -#endif /* GL_WIN_phong_shading */ -#ifdef GL_WIN_specular_fog - CONST_CAST(GLEW_WIN_specular_fog) = _glewSearchExtension("GL_WIN_specular_fog", extStart, extEnd); -#endif /* GL_WIN_specular_fog */ -#ifdef GL_WIN_swap_hint - CONST_CAST(GLEW_WIN_swap_hint) = _glewSearchExtension("GL_WIN_swap_hint", extStart, extEnd); - if (glewExperimental || GLEW_WIN_swap_hint) CONST_CAST(GLEW_WIN_swap_hint) = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_WIN_swap_hint */ - - return GLEW_OK; -} - - -#if defined(_WIN32) - -#if !defined(GLEW_MX) - -PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL; - -PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD = NULL; -PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD = NULL; -PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD = NULL; -PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD = NULL; -PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD = NULL; -PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD = NULL; -PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD = NULL; - -PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL; -PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB = NULL; -PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB = NULL; -PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB = NULL; - -PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB = NULL; - -PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB = NULL; - -PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB = NULL; -PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB = NULL; - -PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB = NULL; -PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB = NULL; -PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB = NULL; -PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB = NULL; -PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB = NULL; - -PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB = NULL; -PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB = NULL; -PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB = NULL; - -PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB = NULL; -PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB = NULL; -PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB = NULL; - -PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT = NULL; -PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT = NULL; -PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT = NULL; -PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT = NULL; - -PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT = NULL; - -PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT = NULL; -PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT = NULL; - -PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT = NULL; -PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT = NULL; -PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT = NULL; -PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT = NULL; -PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT = NULL; - -PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT = NULL; - -PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT = NULL; -PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT = NULL; - -PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D = NULL; -PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D = NULL; - -PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D = NULL; -PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D = NULL; -PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D = NULL; -PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D = NULL; - -PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D = NULL; -PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D = NULL; -PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D = NULL; -PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D = NULL; -PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D = NULL; -PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D = NULL; -PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D = NULL; -PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D = NULL; -PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D = NULL; -PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D = NULL; -PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D = NULL; -PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D = NULL; - -PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D = NULL; -PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D = NULL; -PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D = NULL; -PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D = NULL; - -PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D = NULL; -PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D = NULL; -PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D = NULL; -PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D = NULL; - -PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D = NULL; -PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D = NULL; -PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D = NULL; -PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D = NULL; - -PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV = NULL; -PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV = NULL; -PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV = NULL; -PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV = NULL; -PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV = NULL; -PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV = NULL; -PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV = NULL; -PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV = NULL; - -PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV = NULL; - -PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV = NULL; -PFNWGLDELETEDCNVPROC __wglewDeleteDCNV = NULL; -PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV = NULL; -PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV = NULL; -PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV = NULL; - -PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV = NULL; -PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV = NULL; -PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV = NULL; - -PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV = NULL; -PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV = NULL; -PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV = NULL; -PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV = NULL; -PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV = NULL; -PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV = NULL; - -PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; -PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; - -PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV = NULL; -PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV = NULL; -PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV = NULL; -PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV = NULL; -PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV = NULL; - -PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV = NULL; -PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV = NULL; -PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV = NULL; -PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV = NULL; -PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV = NULL; -PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV = NULL; - -PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML = NULL; -PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML = NULL; -PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML = NULL; -PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML = NULL; -PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML = NULL; -PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML = NULL; -GLboolean __WGLEW_3DFX_multisample = GL_FALSE; -GLboolean __WGLEW_3DL_stereo_control = GL_FALSE; -GLboolean __WGLEW_AMD_gpu_association = GL_FALSE; -GLboolean __WGLEW_ARB_buffer_region = GL_FALSE; -GLboolean __WGLEW_ARB_create_context = GL_FALSE; -GLboolean __WGLEW_ARB_create_context_profile = GL_FALSE; -GLboolean __WGLEW_ARB_create_context_robustness = GL_FALSE; -GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; -GLboolean __WGLEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __WGLEW_ARB_make_current_read = GL_FALSE; -GLboolean __WGLEW_ARB_multisample = GL_FALSE; -GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; -GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; -GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; -GLboolean __WGLEW_ARB_render_texture = GL_FALSE; -GLboolean __WGLEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __WGLEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; -GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; -GLboolean __WGLEW_EXT_create_context_es2_profile = GL_FALSE; -GLboolean __WGLEW_EXT_create_context_es_profile = GL_FALSE; -GLboolean __WGLEW_EXT_depth_float = GL_FALSE; -GLboolean __WGLEW_EXT_display_color_table = GL_FALSE; -GLboolean __WGLEW_EXT_extensions_string = GL_FALSE; -GLboolean __WGLEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __WGLEW_EXT_make_current_read = GL_FALSE; -GLboolean __WGLEW_EXT_multisample = GL_FALSE; -GLboolean __WGLEW_EXT_pbuffer = GL_FALSE; -GLboolean __WGLEW_EXT_pixel_format = GL_FALSE; -GLboolean __WGLEW_EXT_pixel_format_packed_float = GL_FALSE; -GLboolean __WGLEW_EXT_swap_control = GL_FALSE; -GLboolean __WGLEW_EXT_swap_control_tear = GL_FALSE; -GLboolean __WGLEW_I3D_digital_video_control = GL_FALSE; -GLboolean __WGLEW_I3D_gamma = GL_FALSE; -GLboolean __WGLEW_I3D_genlock = GL_FALSE; -GLboolean __WGLEW_I3D_image_buffer = GL_FALSE; -GLboolean __WGLEW_I3D_swap_frame_lock = GL_FALSE; -GLboolean __WGLEW_I3D_swap_frame_usage = GL_FALSE; -GLboolean __WGLEW_NV_DX_interop = GL_FALSE; -GLboolean __WGLEW_NV_DX_interop2 = GL_FALSE; -GLboolean __WGLEW_NV_copy_image = GL_FALSE; -GLboolean __WGLEW_NV_float_buffer = GL_FALSE; -GLboolean __WGLEW_NV_gpu_affinity = GL_FALSE; -GLboolean __WGLEW_NV_multisample_coverage = GL_FALSE; -GLboolean __WGLEW_NV_present_video = GL_FALSE; -GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; -GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; -GLboolean __WGLEW_NV_swap_group = GL_FALSE; -GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; -GLboolean __WGLEW_NV_video_capture = GL_FALSE; -GLboolean __WGLEW_NV_video_output = GL_FALSE; -GLboolean __WGLEW_OML_sync_control = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef WGL_3DFX_multisample - -#endif /* WGL_3DFX_multisample */ - -#ifdef WGL_3DL_stereo_control - -static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)glewGetProcAddress((const GLubyte*)"wglSetStereoEmitterState3DL")) == NULL) || r; - - return r; -} - -#endif /* WGL_3DL_stereo_control */ - -#ifdef WGL_AMD_gpu_association - -static GLboolean _glewInit_WGL_AMD_gpu_association (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBlitContextFramebufferAMD = (PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"wglBlitContextFramebufferAMD")) == NULL) || r; - r = ((wglCreateAssociatedContextAMD = (PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAMD")) == NULL) || r; - r = ((wglCreateAssociatedContextAttribsAMD = (PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAttribsAMD")) == NULL) || r; - r = ((wglDeleteAssociatedContextAMD = (PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglDeleteAssociatedContextAMD")) == NULL) || r; - r = ((wglGetContextGPUIDAMD = (PFNWGLGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetContextGPUIDAMD")) == NULL) || r; - r = ((wglGetCurrentAssociatedContextAMD = (PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentAssociatedContextAMD")) == NULL) || r; - r = ((wglGetGPUIDsAMD = (PFNWGLGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUIDsAMD")) == NULL) || r; - r = ((wglGetGPUInfoAMD = (PFNWGLGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUInfoAMD")) == NULL) || r; - r = ((wglMakeAssociatedContextCurrentAMD = (PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"wglMakeAssociatedContextCurrentAMD")) == NULL) || r; - - return r; -} - -#endif /* WGL_AMD_gpu_association */ - -#ifdef WGL_ARB_buffer_region - -static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateBufferRegionARB")) == NULL) || r; - r = ((wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglDeleteBufferRegionARB")) == NULL) || r; - r = ((wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglRestoreBufferRegionARB")) == NULL) || r; - r = ((wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglSaveBufferRegionARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_buffer_region */ - -#ifdef WGL_ARB_create_context - -static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateContextAttribsARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_create_context */ - -#ifdef WGL_ARB_create_context_profile - -#endif /* WGL_ARB_create_context_profile */ - -#ifdef WGL_ARB_create_context_robustness - -#endif /* WGL_ARB_create_context_robustness */ - -#ifdef WGL_ARB_extensions_string - -static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_extensions_string */ - -#ifdef WGL_ARB_framebuffer_sRGB - -#endif /* WGL_ARB_framebuffer_sRGB */ - -#ifdef WGL_ARB_make_current_read - -static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCARB")) == NULL) || r; - r = ((wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_make_current_read */ - -#ifdef WGL_ARB_multisample - -#endif /* WGL_ARB_multisample */ - -#ifdef WGL_ARB_pbuffer - -static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferARB")) == NULL) || r; - r = ((wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferARB")) == NULL) || r; - r = ((wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCARB")) == NULL) || r; - r = ((wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferARB")) == NULL) || r; - r = ((wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_pbuffer */ - -#ifdef WGL_ARB_pixel_format - -static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatARB")) == NULL) || r; - r = ((wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvARB")) == NULL) || r; - r = ((wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_pixel_format */ - -#ifdef WGL_ARB_pixel_format_float - -#endif /* WGL_ARB_pixel_format_float */ - -#ifdef WGL_ARB_render_texture - -static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglBindTexImageARB")) == NULL) || r; - r = ((wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglReleaseTexImageARB")) == NULL) || r; - r = ((wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"wglSetPbufferAttribARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_render_texture */ - -#ifdef WGL_ARB_robustness_application_isolation - -#endif /* WGL_ARB_robustness_application_isolation */ - -#ifdef WGL_ARB_robustness_share_group_isolation - -#endif /* WGL_ARB_robustness_share_group_isolation */ - -#ifdef WGL_ATI_pixel_format_float - -#endif /* WGL_ATI_pixel_format_float */ - -#ifdef WGL_ATI_render_texture_rectangle - -#endif /* WGL_ATI_render_texture_rectangle */ - -#ifdef WGL_EXT_create_context_es2_profile - -#endif /* WGL_EXT_create_context_es2_profile */ - -#ifdef WGL_EXT_create_context_es_profile - -#endif /* WGL_EXT_create_context_es_profile */ - -#ifdef WGL_EXT_depth_float - -#endif /* WGL_EXT_depth_float */ - -#ifdef WGL_EXT_display_color_table - -static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglBindDisplayColorTableEXT")) == NULL) || r; - r = ((wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglCreateDisplayColorTableEXT")) == NULL) || r; - r = ((wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyDisplayColorTableEXT")) == NULL) || r; - r = ((wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglLoadDisplayColorTableEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_display_color_table */ - -#ifdef WGL_EXT_extensions_string - -static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_extensions_string */ - -#ifdef WGL_EXT_framebuffer_sRGB - -#endif /* WGL_EXT_framebuffer_sRGB */ - -#ifdef WGL_EXT_make_current_read - -static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCEXT")) == NULL) || r; - r = ((wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_make_current_read */ - -#ifdef WGL_EXT_multisample - -#endif /* WGL_EXT_multisample */ - -#ifdef WGL_EXT_pbuffer - -static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferEXT")) == NULL) || r; - r = ((wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferEXT")) == NULL) || r; - r = ((wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCEXT")) == NULL) || r; - r = ((wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferEXT")) == NULL) || r; - r = ((wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_pbuffer */ - -#ifdef WGL_EXT_pixel_format - -static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatEXT")) == NULL) || r; - r = ((wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvEXT")) == NULL) || r; - r = ((wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_pixel_format */ - -#ifdef WGL_EXT_pixel_format_packed_float - -#endif /* WGL_EXT_pixel_format_packed_float */ - -#ifdef WGL_EXT_swap_control - -static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetSwapIntervalEXT")) == NULL) || r; - r = ((wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglSwapIntervalEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_swap_control */ - -#ifdef WGL_EXT_swap_control_tear - -#endif /* WGL_EXT_swap_control_tear */ - -#ifdef WGL_I3D_digital_video_control - -static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetDigitalVideoParametersI3D")) == NULL) || r; - r = ((wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetDigitalVideoParametersI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_digital_video_control */ - -#ifdef WGL_I3D_gamma - -static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableI3D")) == NULL) || r; - r = ((wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableParametersI3D")) == NULL) || r; - r = ((wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableI3D")) == NULL) || r; - r = ((wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableParametersI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_gamma */ - -#ifdef WGL_I3D_genlock - -static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableGenlockI3D")) == NULL) || r; - r = ((wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableGenlockI3D")) == NULL) || r; - r = ((wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSampleRateI3D")) == NULL) || r; - r = ((wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceDelayI3D")) == NULL) || r; - r = ((wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceEdgeI3D")) == NULL) || r; - r = ((wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceI3D")) == NULL) || r; - r = ((wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSampleRateI3D")) == NULL) || r; - r = ((wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceDelayI3D")) == NULL) || r; - r = ((wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceEdgeI3D")) == NULL) || r; - r = ((wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceI3D")) == NULL) || r; - r = ((wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledGenlockI3D")) == NULL) || r; - r = ((wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryGenlockMaxSourceDelayI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_genlock */ - -#ifdef WGL_I3D_image_buffer - -static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglAssociateImageBufferEventsI3D")) == NULL) || r; - r = ((wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglCreateImageBufferI3D")) == NULL) || r; - r = ((wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglDestroyImageBufferI3D")) == NULL) || r; - r = ((wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglReleaseImageBufferEventsI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_image_buffer */ - -#ifdef WGL_I3D_swap_frame_lock - -static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableFrameLockI3D")) == NULL) || r; - r = ((wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableFrameLockI3D")) == NULL) || r; - r = ((wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledFrameLockI3D")) == NULL) || r; - r = ((wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameLockMasterI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_swap_frame_lock */ - -#ifdef WGL_I3D_swap_frame_usage - -static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglBeginFrameTrackingI3D")) == NULL) || r; - r = ((wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglEndFrameTrackingI3D")) == NULL) || r; - r = ((wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetFrameUsageI3D")) == NULL) || r; - r = ((wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameTrackingI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_swap_frame_usage */ - -#ifdef WGL_NV_DX_interop - -static GLboolean _glewInit_WGL_NV_DX_interop (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDXCloseDeviceNV = (PFNWGLDXCLOSEDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXCloseDeviceNV")) == NULL) || r; - r = ((wglDXLockObjectsNV = (PFNWGLDXLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXLockObjectsNV")) == NULL) || r; - r = ((wglDXObjectAccessNV = (PFNWGLDXOBJECTACCESSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXObjectAccessNV")) == NULL) || r; - r = ((wglDXOpenDeviceNV = (PFNWGLDXOPENDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXOpenDeviceNV")) == NULL) || r; - r = ((wglDXRegisterObjectNV = (PFNWGLDXREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXRegisterObjectNV")) == NULL) || r; - r = ((wglDXSetResourceShareHandleNV = (PFNWGLDXSETRESOURCESHAREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"wglDXSetResourceShareHandleNV")) == NULL) || r; - r = ((wglDXUnlockObjectsNV = (PFNWGLDXUNLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnlockObjectsNV")) == NULL) || r; - r = ((wglDXUnregisterObjectNV = (PFNWGLDXUNREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnregisterObjectNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_DX_interop */ - -#ifdef WGL_NV_DX_interop2 - -#endif /* WGL_NV_DX_interop2 */ - -#ifdef WGL_NV_copy_image - -static GLboolean _glewInit_WGL_NV_copy_image (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCopyImageSubDataNV = (PFNWGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"wglCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_copy_image */ - -#ifdef WGL_NV_float_buffer - -#endif /* WGL_NV_float_buffer */ - -#ifdef WGL_NV_gpu_affinity - -static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglCreateAffinityDCNV")) == NULL) || r; - r = ((wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)glewGetProcAddress((const GLubyte*)"wglDeleteDCNV")) == NULL) || r; - r = ((wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpuDevicesNV")) == NULL) || r; - r = ((wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusFromAffinityDCNV")) == NULL) || r; - r = ((wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_gpu_affinity */ - -#ifdef WGL_NV_multisample_coverage - -#endif /* WGL_NV_multisample_coverage */ - -#ifdef WGL_NV_present_video - -static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoDeviceNV = (PFNWGLBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoDeviceNV")) == NULL) || r; - r = ((wglEnumerateVideoDevicesNV = (PFNWGLENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoDevicesNV")) == NULL) || r; - r = ((wglQueryCurrentContextNV = (PFNWGLQUERYCURRENTCONTEXTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryCurrentContextNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_present_video */ - -#ifdef WGL_NV_render_depth_texture - -#endif /* WGL_NV_render_depth_texture */ - -#ifdef WGL_NV_render_texture_rectangle - -#endif /* WGL_NV_render_texture_rectangle */ - -#ifdef WGL_NV_swap_group - -static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindSwapBarrierNV = (PFNWGLBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"wglBindSwapBarrierNV")) == NULL) || r; - r = ((wglJoinSwapGroupNV = (PFNWGLJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglJoinSwapGroupNV")) == NULL) || r; - r = ((wglQueryFrameCountNV = (PFNWGLQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameCountNV")) == NULL) || r; - r = ((wglQueryMaxSwapGroupsNV = (PFNWGLQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryMaxSwapGroupsNV")) == NULL) || r; - r = ((wglQuerySwapGroupNV = (PFNWGLQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglQuerySwapGroupNV")) == NULL) || r; - r = ((wglResetFrameCountNV = (PFNWGLRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglResetFrameCountNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_swap_group */ - -#ifdef WGL_NV_vertex_array_range - -static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglAllocateMemoryNV")) == NULL) || r; - r = ((wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglFreeMemoryNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_vertex_array_range */ - -#ifdef WGL_NV_video_capture - -static GLboolean _glewInit_WGL_NV_video_capture (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoCaptureDeviceNV = (PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglEnumerateVideoCaptureDevicesNV = (PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoCaptureDevicesNV")) == NULL) || r; - r = ((wglLockVideoCaptureDeviceNV = (PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglLockVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglQueryVideoCaptureDeviceNV = (PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglQueryVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglReleaseVideoCaptureDeviceNV = (PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoCaptureDeviceNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_video_capture */ - -#ifdef WGL_NV_video_output - -static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoImageNV = (PFNWGLBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoImageNV")) == NULL) || r; - r = ((wglGetVideoDeviceNV = (PFNWGLGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoDeviceNV")) == NULL) || r; - r = ((wglGetVideoInfoNV = (PFNWGLGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoInfoNV")) == NULL) || r; - r = ((wglReleaseVideoDeviceNV = (PFNWGLRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoDeviceNV")) == NULL) || r; - r = ((wglReleaseVideoImageNV = (PFNWGLRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoImageNV")) == NULL) || r; - r = ((wglSendPbufferToVideoNV = (PFNWGLSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"wglSendPbufferToVideoNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_video_output */ - -#ifdef WGL_OML_sync_control - -static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetMscRateOML")) == NULL) || r; - r = ((wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetSyncValuesOML")) == NULL) || r; - r = ((wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapBuffersMscOML")) == NULL) || r; - r = ((wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapLayerBuffersMscOML")) == NULL) || r; - r = ((wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForMscOML")) == NULL) || r; - r = ((wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForSbcOML")) == NULL) || r; - - return r; -} - -#endif /* WGL_OML_sync_control */ - -/* ------------------------------------------------------------------------- */ - -static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; -static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; - -GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - return GL_FALSE; - else - start = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) -{ - GLboolean crippled; - const GLubyte* extStart; - const GLubyte* extEnd; - /* find wgl extension string query functions */ - _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); - _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); - /* query wgl extension string */ - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - extStart = (const GLubyte*)""; - else - extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ - crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; -#ifdef WGL_3DFX_multisample - CONST_CAST(WGLEW_3DFX_multisample) = _glewSearchExtension("WGL_3DFX_multisample", extStart, extEnd); -#endif /* WGL_3DFX_multisample */ -#ifdef WGL_3DL_stereo_control - CONST_CAST(WGLEW_3DL_stereo_control) = _glewSearchExtension("WGL_3DL_stereo_control", extStart, extEnd); - if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) CONST_CAST(WGLEW_3DL_stereo_control)= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_3DL_stereo_control */ -#ifdef WGL_AMD_gpu_association - CONST_CAST(WGLEW_AMD_gpu_association) = _glewSearchExtension("WGL_AMD_gpu_association", extStart, extEnd); - if (glewExperimental || WGLEW_AMD_gpu_association|| crippled) CONST_CAST(WGLEW_AMD_gpu_association)= !_glewInit_WGL_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_AMD_gpu_association */ -#ifdef WGL_ARB_buffer_region - CONST_CAST(WGLEW_ARB_buffer_region) = _glewSearchExtension("WGL_ARB_buffer_region", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) CONST_CAST(WGLEW_ARB_buffer_region)= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_buffer_region */ -#ifdef WGL_ARB_create_context - CONST_CAST(WGLEW_ARB_create_context) = _glewSearchExtension("WGL_ARB_create_context", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_create_context|| crippled) CONST_CAST(WGLEW_ARB_create_context)= !_glewInit_WGL_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_create_context */ -#ifdef WGL_ARB_create_context_profile - CONST_CAST(WGLEW_ARB_create_context_profile) = _glewSearchExtension("WGL_ARB_create_context_profile", extStart, extEnd); -#endif /* WGL_ARB_create_context_profile */ -#ifdef WGL_ARB_create_context_robustness - CONST_CAST(WGLEW_ARB_create_context_robustness) = _glewSearchExtension("WGL_ARB_create_context_robustness", extStart, extEnd); -#endif /* WGL_ARB_create_context_robustness */ -#ifdef WGL_ARB_extensions_string - CONST_CAST(WGLEW_ARB_extensions_string) = _glewSearchExtension("WGL_ARB_extensions_string", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) CONST_CAST(WGLEW_ARB_extensions_string)= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_extensions_string */ -#ifdef WGL_ARB_framebuffer_sRGB - CONST_CAST(WGLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("WGL_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* WGL_ARB_framebuffer_sRGB */ -#ifdef WGL_ARB_make_current_read - CONST_CAST(WGLEW_ARB_make_current_read) = _glewSearchExtension("WGL_ARB_make_current_read", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) CONST_CAST(WGLEW_ARB_make_current_read)= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_make_current_read */ -#ifdef WGL_ARB_multisample - CONST_CAST(WGLEW_ARB_multisample) = _glewSearchExtension("WGL_ARB_multisample", extStart, extEnd); -#endif /* WGL_ARB_multisample */ -#ifdef WGL_ARB_pbuffer - CONST_CAST(WGLEW_ARB_pbuffer) = _glewSearchExtension("WGL_ARB_pbuffer", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) CONST_CAST(WGLEW_ARB_pbuffer)= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_pbuffer */ -#ifdef WGL_ARB_pixel_format - CONST_CAST(WGLEW_ARB_pixel_format) = _glewSearchExtension("WGL_ARB_pixel_format", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) CONST_CAST(WGLEW_ARB_pixel_format)= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_pixel_format */ -#ifdef WGL_ARB_pixel_format_float - CONST_CAST(WGLEW_ARB_pixel_format_float) = _glewSearchExtension("WGL_ARB_pixel_format_float", extStart, extEnd); -#endif /* WGL_ARB_pixel_format_float */ -#ifdef WGL_ARB_render_texture - CONST_CAST(WGLEW_ARB_render_texture) = _glewSearchExtension("WGL_ARB_render_texture", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_render_texture */ -#ifdef WGL_ARB_robustness_application_isolation - CONST_CAST(WGLEW_ARB_robustness_application_isolation) = _glewSearchExtension("WGL_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* WGL_ARB_robustness_application_isolation */ -#ifdef WGL_ARB_robustness_share_group_isolation - CONST_CAST(WGLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("WGL_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* WGL_ARB_robustness_share_group_isolation */ -#ifdef WGL_ATI_pixel_format_float - CONST_CAST(WGLEW_ATI_pixel_format_float) = _glewSearchExtension("WGL_ATI_pixel_format_float", extStart, extEnd); -#endif /* WGL_ATI_pixel_format_float */ -#ifdef WGL_ATI_render_texture_rectangle - CONST_CAST(WGLEW_ATI_render_texture_rectangle) = _glewSearchExtension("WGL_ATI_render_texture_rectangle", extStart, extEnd); -#endif /* WGL_ATI_render_texture_rectangle */ -#ifdef WGL_EXT_create_context_es2_profile - CONST_CAST(WGLEW_EXT_create_context_es2_profile) = _glewSearchExtension("WGL_EXT_create_context_es2_profile", extStart, extEnd); -#endif /* WGL_EXT_create_context_es2_profile */ -#ifdef WGL_EXT_create_context_es_profile - CONST_CAST(WGLEW_EXT_create_context_es_profile) = _glewSearchExtension("WGL_EXT_create_context_es_profile", extStart, extEnd); -#endif /* WGL_EXT_create_context_es_profile */ -#ifdef WGL_EXT_depth_float - CONST_CAST(WGLEW_EXT_depth_float) = _glewSearchExtension("WGL_EXT_depth_float", extStart, extEnd); -#endif /* WGL_EXT_depth_float */ -#ifdef WGL_EXT_display_color_table - CONST_CAST(WGLEW_EXT_display_color_table) = _glewSearchExtension("WGL_EXT_display_color_table", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) CONST_CAST(WGLEW_EXT_display_color_table)= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_display_color_table */ -#ifdef WGL_EXT_extensions_string - CONST_CAST(WGLEW_EXT_extensions_string) = _glewSearchExtension("WGL_EXT_extensions_string", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) CONST_CAST(WGLEW_EXT_extensions_string)= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_extensions_string */ -#ifdef WGL_EXT_framebuffer_sRGB - CONST_CAST(WGLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("WGL_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* WGL_EXT_framebuffer_sRGB */ -#ifdef WGL_EXT_make_current_read - CONST_CAST(WGLEW_EXT_make_current_read) = _glewSearchExtension("WGL_EXT_make_current_read", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) CONST_CAST(WGLEW_EXT_make_current_read)= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_make_current_read */ -#ifdef WGL_EXT_multisample - CONST_CAST(WGLEW_EXT_multisample) = _glewSearchExtension("WGL_EXT_multisample", extStart, extEnd); -#endif /* WGL_EXT_multisample */ -#ifdef WGL_EXT_pbuffer - CONST_CAST(WGLEW_EXT_pbuffer) = _glewSearchExtension("WGL_EXT_pbuffer", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) CONST_CAST(WGLEW_EXT_pbuffer)= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_pbuffer */ -#ifdef WGL_EXT_pixel_format - CONST_CAST(WGLEW_EXT_pixel_format) = _glewSearchExtension("WGL_EXT_pixel_format", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) CONST_CAST(WGLEW_EXT_pixel_format)= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_pixel_format */ -#ifdef WGL_EXT_pixel_format_packed_float - CONST_CAST(WGLEW_EXT_pixel_format_packed_float) = _glewSearchExtension("WGL_EXT_pixel_format_packed_float", extStart, extEnd); -#endif /* WGL_EXT_pixel_format_packed_float */ -#ifdef WGL_EXT_swap_control - CONST_CAST(WGLEW_EXT_swap_control) = _glewSearchExtension("WGL_EXT_swap_control", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_swap_control|| crippled) CONST_CAST(WGLEW_EXT_swap_control)= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_swap_control */ -#ifdef WGL_EXT_swap_control_tear - CONST_CAST(WGLEW_EXT_swap_control_tear) = _glewSearchExtension("WGL_EXT_swap_control_tear", extStart, extEnd); -#endif /* WGL_EXT_swap_control_tear */ -#ifdef WGL_I3D_digital_video_control - CONST_CAST(WGLEW_I3D_digital_video_control) = _glewSearchExtension("WGL_I3D_digital_video_control", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) CONST_CAST(WGLEW_I3D_digital_video_control)= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_digital_video_control */ -#ifdef WGL_I3D_gamma - CONST_CAST(WGLEW_I3D_gamma) = _glewSearchExtension("WGL_I3D_gamma", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_gamma|| crippled) CONST_CAST(WGLEW_I3D_gamma)= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_gamma */ -#ifdef WGL_I3D_genlock - CONST_CAST(WGLEW_I3D_genlock) = _glewSearchExtension("WGL_I3D_genlock", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_genlock|| crippled) CONST_CAST(WGLEW_I3D_genlock)= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_genlock */ -#ifdef WGL_I3D_image_buffer - CONST_CAST(WGLEW_I3D_image_buffer) = _glewSearchExtension("WGL_I3D_image_buffer", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) CONST_CAST(WGLEW_I3D_image_buffer)= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_image_buffer */ -#ifdef WGL_I3D_swap_frame_lock - CONST_CAST(WGLEW_I3D_swap_frame_lock) = _glewSearchExtension("WGL_I3D_swap_frame_lock", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_lock)= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_swap_frame_lock */ -#ifdef WGL_I3D_swap_frame_usage - CONST_CAST(WGLEW_I3D_swap_frame_usage) = _glewSearchExtension("WGL_I3D_swap_frame_usage", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_usage)= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_swap_frame_usage */ -#ifdef WGL_NV_DX_interop - CONST_CAST(WGLEW_NV_DX_interop) = _glewSearchExtension("WGL_NV_DX_interop", extStart, extEnd); - if (glewExperimental || WGLEW_NV_DX_interop|| crippled) CONST_CAST(WGLEW_NV_DX_interop)= !_glewInit_WGL_NV_DX_interop(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_DX_interop */ -#ifdef WGL_NV_DX_interop2 - CONST_CAST(WGLEW_NV_DX_interop2) = _glewSearchExtension("WGL_NV_DX_interop2", extStart, extEnd); -#endif /* WGL_NV_DX_interop2 */ -#ifdef WGL_NV_copy_image - CONST_CAST(WGLEW_NV_copy_image) = _glewSearchExtension("WGL_NV_copy_image", extStart, extEnd); - if (glewExperimental || WGLEW_NV_copy_image|| crippled) CONST_CAST(WGLEW_NV_copy_image)= !_glewInit_WGL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_copy_image */ -#ifdef WGL_NV_float_buffer - CONST_CAST(WGLEW_NV_float_buffer) = _glewSearchExtension("WGL_NV_float_buffer", extStart, extEnd); -#endif /* WGL_NV_float_buffer */ -#ifdef WGL_NV_gpu_affinity - CONST_CAST(WGLEW_NV_gpu_affinity) = _glewSearchExtension("WGL_NV_gpu_affinity", extStart, extEnd); - if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) CONST_CAST(WGLEW_NV_gpu_affinity)= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_gpu_affinity */ -#ifdef WGL_NV_multisample_coverage - CONST_CAST(WGLEW_NV_multisample_coverage) = _glewSearchExtension("WGL_NV_multisample_coverage", extStart, extEnd); -#endif /* WGL_NV_multisample_coverage */ -#ifdef WGL_NV_present_video - CONST_CAST(WGLEW_NV_present_video) = _glewSearchExtension("WGL_NV_present_video", extStart, extEnd); - if (glewExperimental || WGLEW_NV_present_video|| crippled) CONST_CAST(WGLEW_NV_present_video)= !_glewInit_WGL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_present_video */ -#ifdef WGL_NV_render_depth_texture - CONST_CAST(WGLEW_NV_render_depth_texture) = _glewSearchExtension("WGL_NV_render_depth_texture", extStart, extEnd); -#endif /* WGL_NV_render_depth_texture */ -#ifdef WGL_NV_render_texture_rectangle - CONST_CAST(WGLEW_NV_render_texture_rectangle) = _glewSearchExtension("WGL_NV_render_texture_rectangle", extStart, extEnd); -#endif /* WGL_NV_render_texture_rectangle */ -#ifdef WGL_NV_swap_group - CONST_CAST(WGLEW_NV_swap_group) = _glewSearchExtension("WGL_NV_swap_group", extStart, extEnd); - if (glewExperimental || WGLEW_NV_swap_group|| crippled) CONST_CAST(WGLEW_NV_swap_group)= !_glewInit_WGL_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_swap_group */ -#ifdef WGL_NV_vertex_array_range - CONST_CAST(WGLEW_NV_vertex_array_range) = _glewSearchExtension("WGL_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) CONST_CAST(WGLEW_NV_vertex_array_range)= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_vertex_array_range */ -#ifdef WGL_NV_video_capture - CONST_CAST(WGLEW_NV_video_capture) = _glewSearchExtension("WGL_NV_video_capture", extStart, extEnd); - if (glewExperimental || WGLEW_NV_video_capture|| crippled) CONST_CAST(WGLEW_NV_video_capture)= !_glewInit_WGL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_video_capture */ -#ifdef WGL_NV_video_output - CONST_CAST(WGLEW_NV_video_output) = _glewSearchExtension("WGL_NV_video_output", extStart, extEnd); - if (glewExperimental || WGLEW_NV_video_output|| crippled) CONST_CAST(WGLEW_NV_video_output)= !_glewInit_WGL_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_video_output */ -#ifdef WGL_OML_sync_control - CONST_CAST(WGLEW_OML_sync_control) = _glewSearchExtension("WGL_OML_sync_control", extStart, extEnd); - if (glewExperimental || WGLEW_OML_sync_control|| crippled) CONST_CAST(WGLEW_OML_sync_control)= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_OML_sync_control */ - - return GLEW_OK; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) - -PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; - -PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig = NULL; -PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext = NULL; -PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer = NULL; -PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap = NULL; -PFNGLXCREATEWINDOWPROC __glewXCreateWindow = NULL; -PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer = NULL; -PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap = NULL; -PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow = NULL; -PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable = NULL; -PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib = NULL; -PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs = NULL; -PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent = NULL; -PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig = NULL; -PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent = NULL; -PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; -PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; -PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; - -PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD = NULL; -PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD = NULL; -PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD = NULL; -PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD = NULL; -PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD = NULL; -PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD = NULL; -PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD = NULL; - -PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB = NULL; - -PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; -PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI = NULL; -PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI = NULL; - -PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT = NULL; -PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT = NULL; -PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT = NULL; -PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT = NULL; - -PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT = NULL; - -PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT = NULL; -PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT = NULL; - -PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA = NULL; - -PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA = NULL; - -PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA = NULL; - -PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA = NULL; - -PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA = NULL; - -PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA = NULL; -PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA = NULL; - -PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV = NULL; - -PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV = NULL; -PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV = NULL; - -PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV = NULL; -PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV = NULL; -PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV = NULL; -PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV = NULL; -PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV = NULL; -PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV = NULL; - -PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; -PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; - -PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV = NULL; -PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV = NULL; -PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV = NULL; -PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV = NULL; -PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV = NULL; - -PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV = NULL; -PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV = NULL; -PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV = NULL; -PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV = NULL; -PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV = NULL; -PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV = NULL; - -PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML = NULL; -PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML = NULL; -PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML = NULL; -PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML = NULL; -PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML = NULL; - -PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX = NULL; -PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX = NULL; -PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX = NULL; -PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX = NULL; -PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX = NULL; -PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX = NULL; - -PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX = NULL; -PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX = NULL; -PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX = NULL; -PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX = NULL; -PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX = NULL; -PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX = NULL; -PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX = NULL; -PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX = NULL; - -PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX = NULL; -PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX = NULL; -PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX = NULL; -PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX = NULL; -PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX = NULL; - -PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX = NULL; -PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX = NULL; - -PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX = NULL; - -PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX = NULL; -PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX = NULL; -PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX = NULL; -PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX = NULL; -PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX = NULL; - -PFNGLXCUSHIONSGIPROC __glewXCushionSGI = NULL; - -PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI = NULL; -PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI = NULL; - -PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI = NULL; - -PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI = NULL; -PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI = NULL; - -PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL; - -PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL; -PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL; - -#if !defined(GLEW_MX) - -GLboolean __GLXEW_VERSION_1_0 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_1 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_2 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_3 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_4 = GL_FALSE; -GLboolean __GLXEW_3DFX_multisample = GL_FALSE; -GLboolean __GLXEW_AMD_gpu_association = GL_FALSE; -GLboolean __GLXEW_ARB_create_context = GL_FALSE; -GLboolean __GLXEW_ARB_create_context_profile = GL_FALSE; -GLboolean __GLXEW_ARB_create_context_robustness = GL_FALSE; -GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; -GLboolean __GLXEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __GLXEW_ARB_get_proc_address = GL_FALSE; -GLboolean __GLXEW_ARB_multisample = GL_FALSE; -GLboolean __GLXEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __GLXEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __GLXEW_ARB_vertex_buffer_object = GL_FALSE; -GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; -GLboolean __GLXEW_ATI_render_texture = GL_FALSE; -GLboolean __GLXEW_EXT_buffer_age = GL_FALSE; -GLboolean __GLXEW_EXT_create_context_es2_profile = GL_FALSE; -GLboolean __GLXEW_EXT_create_context_es_profile = GL_FALSE; -GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; -GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __GLXEW_EXT_import_context = GL_FALSE; -GLboolean __GLXEW_EXT_scene_marker = GL_FALSE; -GLboolean __GLXEW_EXT_swap_control = GL_FALSE; -GLboolean __GLXEW_EXT_swap_control_tear = GL_FALSE; -GLboolean __GLXEW_EXT_texture_from_pixmap = GL_FALSE; -GLboolean __GLXEW_EXT_visual_info = GL_FALSE; -GLboolean __GLXEW_EXT_visual_rating = GL_FALSE; -GLboolean __GLXEW_INTEL_swap_event = GL_FALSE; -GLboolean __GLXEW_MESA_agp_offset = GL_FALSE; -GLboolean __GLXEW_MESA_copy_sub_buffer = GL_FALSE; -GLboolean __GLXEW_MESA_pixmap_colormap = GL_FALSE; -GLboolean __GLXEW_MESA_release_buffers = GL_FALSE; -GLboolean __GLXEW_MESA_set_3dfx_mode = GL_FALSE; -GLboolean __GLXEW_MESA_swap_control = GL_FALSE; -GLboolean __GLXEW_NV_copy_image = GL_FALSE; -GLboolean __GLXEW_NV_float_buffer = GL_FALSE; -GLboolean __GLXEW_NV_multisample_coverage = GL_FALSE; -GLboolean __GLXEW_NV_present_video = GL_FALSE; -GLboolean __GLXEW_NV_swap_group = GL_FALSE; -GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; -GLboolean __GLXEW_NV_video_capture = GL_FALSE; -GLboolean __GLXEW_NV_video_output = GL_FALSE; -GLboolean __GLXEW_OML_swap_method = GL_FALSE; -GLboolean __GLXEW_OML_sync_control = GL_FALSE; -GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; -GLboolean __GLXEW_SGIS_color_range = GL_FALSE; -GLboolean __GLXEW_SGIS_multisample = GL_FALSE; -GLboolean __GLXEW_SGIS_shared_multisample = GL_FALSE; -GLboolean __GLXEW_SGIX_fbconfig = GL_FALSE; -GLboolean __GLXEW_SGIX_hyperpipe = GL_FALSE; -GLboolean __GLXEW_SGIX_pbuffer = GL_FALSE; -GLboolean __GLXEW_SGIX_swap_barrier = GL_FALSE; -GLboolean __GLXEW_SGIX_swap_group = GL_FALSE; -GLboolean __GLXEW_SGIX_video_resize = GL_FALSE; -GLboolean __GLXEW_SGIX_visual_select_group = GL_FALSE; -GLboolean __GLXEW_SGI_cushion = GL_FALSE; -GLboolean __GLXEW_SGI_make_current_read = GL_FALSE; -GLboolean __GLXEW_SGI_swap_control = GL_FALSE; -GLboolean __GLXEW_SGI_video_sync = GL_FALSE; -GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE; -GLboolean __GLXEW_SUN_video_resize = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef GLX_VERSION_1_2 - -static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentDisplay")) == NULL) || r; - - return r; -} - -#endif /* GLX_VERSION_1_2 */ - -#ifdef GLX_VERSION_1_3 - -static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfig")) == NULL) || r; - r = ((glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXCreateNewContext")) == NULL) || r; - r = ((glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXCreatePbuffer")) == NULL) || r; - r = ((glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXCreatePixmap")) == NULL) || r; - r = ((glXCreateWindow = (PFNGLXCREATEWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXCreateWindow")) == NULL) || r; - r = ((glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPbuffer")) == NULL) || r; - r = ((glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPixmap")) == NULL) || r; - r = ((glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXDestroyWindow")) == NULL) || r; - r = ((glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawable")) == NULL) || r; - r = ((glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttrib")) == NULL) || r; - r = ((glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigs")) == NULL) || r; - r = ((glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEvent")) == NULL) || r; - r = ((glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfig")) == NULL) || r; - r = ((glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)glewGetProcAddress((const GLubyte*)"glXMakeContextCurrent")) == NULL) || r; - r = ((glXQueryContext = (PFNGLXQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContext")) == NULL) || r; - r = ((glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXQueryDrawable")) == NULL) || r; - r = ((glXSelectEvent = (PFNGLXSELECTEVENTPROC)glewGetProcAddress((const GLubyte*)"glXSelectEvent")) == NULL) || r; - - return r; -} - -#endif /* GLX_VERSION_1_3 */ - -#ifdef GLX_VERSION_1_4 - -#endif /* GLX_VERSION_1_4 */ - -#ifdef GLX_3DFX_multisample - -#endif /* GLX_3DFX_multisample */ - -#ifdef GLX_AMD_gpu_association - -static GLboolean _glewInit_GLX_AMD_gpu_association (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBlitContextFramebufferAMD = (PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"glXBlitContextFramebufferAMD")) == NULL) || r; - r = ((glXCreateAssociatedContextAMD = (PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAMD")) == NULL) || r; - r = ((glXCreateAssociatedContextAttribsAMD = (PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAttribsAMD")) == NULL) || r; - r = ((glXDeleteAssociatedContextAMD = (PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXDeleteAssociatedContextAMD")) == NULL) || r; - r = ((glXGetContextGPUIDAMD = (PFNGLXGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetContextGPUIDAMD")) == NULL) || r; - r = ((glXGetCurrentAssociatedContextAMD = (PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentAssociatedContextAMD")) == NULL) || r; - r = ((glXGetGPUIDsAMD = (PFNGLXGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUIDsAMD")) == NULL) || r; - r = ((glXGetGPUInfoAMD = (PFNGLXGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUInfoAMD")) == NULL) || r; - r = ((glXMakeAssociatedContextCurrentAMD = (PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"glXMakeAssociatedContextCurrentAMD")) == NULL) || r; - - return r; -} - -#endif /* GLX_AMD_gpu_association */ - -#ifdef GLX_ARB_create_context - -static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB")) == NULL) || r; - - return r; -} - -#endif /* GLX_ARB_create_context */ - -#ifdef GLX_ARB_create_context_profile - -#endif /* GLX_ARB_create_context_profile */ - -#ifdef GLX_ARB_create_context_robustness - -#endif /* GLX_ARB_create_context_robustness */ - -#ifdef GLX_ARB_fbconfig_float - -#endif /* GLX_ARB_fbconfig_float */ - -#ifdef GLX_ARB_framebuffer_sRGB - -#endif /* GLX_ARB_framebuffer_sRGB */ - -#ifdef GLX_ARB_get_proc_address - -#endif /* GLX_ARB_get_proc_address */ - -#ifdef GLX_ARB_multisample - -#endif /* GLX_ARB_multisample */ - -#ifdef GLX_ARB_robustness_application_isolation - -#endif /* GLX_ARB_robustness_application_isolation */ - -#ifdef GLX_ARB_robustness_share_group_isolation - -#endif /* GLX_ARB_robustness_share_group_isolation */ - -#ifdef GLX_ARB_vertex_buffer_object - -#endif /* GLX_ARB_vertex_buffer_object */ - -#ifdef GLX_ATI_pixel_format_float - -#endif /* GLX_ATI_pixel_format_float */ - -#ifdef GLX_ATI_render_texture - -static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindTexImageATI = (PFNGLXBINDTEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageATI")) == NULL) || r; - r = ((glXDrawableAttribATI = (PFNGLXDRAWABLEATTRIBATIPROC)glewGetProcAddress((const GLubyte*)"glXDrawableAttribATI")) == NULL) || r; - r = ((glXReleaseTexImageATI = (PFNGLXRELEASETEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageATI")) == NULL) || r; - - return r; -} - -#endif /* GLX_ATI_render_texture */ - -#ifdef GLX_EXT_buffer_age - -#endif /* GLX_EXT_buffer_age */ - -#ifdef GLX_EXT_create_context_es2_profile - -#endif /* GLX_EXT_create_context_es2_profile */ - -#ifdef GLX_EXT_create_context_es_profile - -#endif /* GLX_EXT_create_context_es_profile */ - -#ifdef GLX_EXT_fbconfig_packed_float - -#endif /* GLX_EXT_fbconfig_packed_float */ - -#ifdef GLX_EXT_framebuffer_sRGB - -#endif /* GLX_EXT_framebuffer_sRGB */ - -#ifdef GLX_EXT_import_context - -static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXFreeContextEXT")) == NULL) || r; - r = ((glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)glewGetProcAddress((const GLubyte*)"glXGetContextIDEXT")) == NULL) || r; - r = ((glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXImportContextEXT")) == NULL) || r; - r = ((glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContextInfoEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_import_context */ - -#ifdef GLX_EXT_scene_marker - -#endif /* GLX_EXT_scene_marker */ - -#ifdef GLX_EXT_swap_control - -static GLboolean _glewInit_GLX_EXT_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_swap_control */ - -#ifdef GLX_EXT_swap_control_tear - -#endif /* GLX_EXT_swap_control_tear */ - -#ifdef GLX_EXT_texture_from_pixmap - -static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageEXT")) == NULL) || r; - r = ((glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_texture_from_pixmap */ - -#ifdef GLX_EXT_visual_info - -#endif /* GLX_EXT_visual_info */ - -#ifdef GLX_EXT_visual_rating - -#endif /* GLX_EXT_visual_rating */ - -#ifdef GLX_INTEL_swap_event - -#endif /* GLX_INTEL_swap_event */ - -#ifdef GLX_MESA_agp_offset - -static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetAGPOffsetMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_agp_offset */ - -#ifdef GLX_MESA_copy_sub_buffer - -static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)glewGetProcAddress((const GLubyte*)"glXCopySubBufferMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_copy_sub_buffer */ - -#ifdef GLX_MESA_pixmap_colormap - -static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_pixmap_colormap */ - -#ifdef GLX_MESA_release_buffers - -static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glXReleaseBuffersMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_release_buffers */ - -#ifdef GLX_MESA_set_3dfx_mode - -static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)glewGetProcAddress((const GLubyte*)"glXSet3DfxModeMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_set_3dfx_mode */ - -#ifdef GLX_MESA_swap_control - -static GLboolean _glewInit_GLX_MESA_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetSwapIntervalMESA")) == NULL) || r; - r = ((glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_swap_control */ - -#ifdef GLX_NV_copy_image - -static GLboolean _glewInit_GLX_NV_copy_image (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCopyImageSubDataNV = (PFNGLXCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glXCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_copy_image */ - -#ifdef GLX_NV_float_buffer - -#endif /* GLX_NV_float_buffer */ - -#ifdef GLX_NV_multisample_coverage - -#endif /* GLX_NV_multisample_coverage */ - -#ifdef GLX_NV_present_video - -static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoDeviceNV")) == NULL) || r; - r = ((glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoDevicesNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_present_video */ - -#ifdef GLX_NV_swap_group - -static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierNV")) == NULL) || r; - r = ((glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupNV")) == NULL) || r; - r = ((glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryFrameCountNV")) == NULL) || r; - r = ((glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapGroupsNV")) == NULL) || r; - r = ((glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXQuerySwapGroupNV")) == NULL) || r; - r = ((glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXResetFrameCountNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_swap_group */ - -#ifdef GLX_NV_vertex_array_range - -static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXAllocateMemoryNV = (PFNGLXALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXAllocateMemoryNV")) == NULL) || r; - r = ((glXFreeMemoryNV = (PFNGLXFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXFreeMemoryNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_vertex_array_range */ - -#ifdef GLX_NV_video_capture - -static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoCaptureDeviceNV = (PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXEnumerateVideoCaptureDevicesNV = (PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoCaptureDevicesNV")) == NULL) || r; - r = ((glXLockVideoCaptureDeviceNV = (PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXLockVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXQueryVideoCaptureDeviceNV = (PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXQueryVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXReleaseVideoCaptureDeviceNV = (PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoCaptureDeviceNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_video_capture */ - -#ifdef GLX_NV_video_output - -static GLboolean _glewInit_GLX_NV_video_output (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoImageNV")) == NULL) || r; - r = ((glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoDeviceNV")) == NULL) || r; - r = ((glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoInfoNV")) == NULL) || r; - r = ((glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoDeviceNV")) == NULL) || r; - r = ((glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoImageNV")) == NULL) || r; - r = ((glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"glXSendPbufferToVideoNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_video_output */ - -#ifdef GLX_OML_swap_method - -#endif /* GLX_OML_swap_method */ - -#ifdef GLX_OML_sync_control - -static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetMscRateOML")) == NULL) || r; - r = ((glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetSyncValuesOML")) == NULL) || r; - r = ((glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML")) == NULL) || r; - r = ((glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForMscOML")) == NULL) || r; - r = ((glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForSbcOML")) == NULL) || r; - - return r; -} - -#endif /* GLX_OML_sync_control */ - -#ifdef GLX_SGIS_blended_overlay - -#endif /* GLX_SGIS_blended_overlay */ - -#ifdef GLX_SGIS_color_range - -#endif /* GLX_SGIS_color_range */ - -#ifdef GLX_SGIS_multisample - -#endif /* GLX_SGIS_multisample */ - -#ifdef GLX_SGIS_shared_multisample - -#endif /* GLX_SGIS_shared_multisample */ - -#ifdef GLX_SGIX_fbconfig - -static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfigSGIX")) == NULL) || r; - r = ((glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextWithConfigSGIX")) == NULL) || r; - r = ((glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapWithConfigSGIX")) == NULL) || r; - r = ((glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttribSGIX")) == NULL) || r; - r = ((glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigFromVisualSGIX")) == NULL) || r; - r = ((glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfigSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_fbconfig */ - -#ifdef GLX_SGIX_hyperpipe - -static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindHyperpipeSGIX")) == NULL) || r; - r = ((glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeAttribSGIX")) == NULL) || r; - r = ((glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeAttribSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeBestAttribSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeNetworkSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_hyperpipe */ - -#ifdef GLX_SGIX_pbuffer - -static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPbufferSGIX")) == NULL) || r; - r = ((glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyGLXPbufferSGIX")) == NULL) || r; - r = ((glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEventSGIX")) == NULL) || r; - r = ((glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryGLXPbufferSGIX")) == NULL) || r; - r = ((glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXSelectEventSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_pbuffer */ - -#ifdef GLX_SGIX_swap_barrier - -static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierSGIX")) == NULL) || r; - r = ((glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapBarriersSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_swap_barrier */ - -#ifdef GLX_SGIX_swap_group - -static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_swap_group */ - -#ifdef GLX_SGIX_video_resize - -static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindChannelToWindowSGIX")) == NULL) || r; - r = ((glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSGIX")) == NULL) || r; - r = ((glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSyncSGIX")) == NULL) || r; - r = ((glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelDeltasSGIX")) == NULL) || r; - r = ((glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelRectSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_video_resize */ - -#ifdef GLX_SGIX_visual_select_group - -#endif /* GLX_SGIX_visual_select_group */ - -#ifdef GLX_SGI_cushion - -static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCushionSGI = (PFNGLXCUSHIONSGIPROC)glewGetProcAddress((const GLubyte*)"glXCushionSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_cushion */ - -#ifdef GLX_SGI_make_current_read - -static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawableSGI")) == NULL) || r; - r = ((glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)glewGetProcAddress((const GLubyte*)"glXMakeCurrentReadSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_make_current_read */ - -#ifdef GLX_SGI_swap_control - -static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_swap_control */ - -#ifdef GLX_SGI_video_sync - -static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI")) == NULL) || r; - r = ((glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_video_sync */ - -#ifdef GLX_SUN_get_transparent_index - -static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)glewGetProcAddress((const GLubyte*)"glXGetTransparentIndexSUN")) == NULL) || r; - - return r; -} - -#endif /* GLX_SUN_get_transparent_index */ - -#ifdef GLX_SUN_video_resize - -static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetVideoResizeSUN = (PFNGLXGETVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoResizeSUN")) == NULL) || r; - r = ((glXVideoResizeSUN = (PFNGLXVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXVideoResizeSUN")) == NULL) || r; - - return r; -} - -#endif /* GLX_SUN_video_resize */ - -/* ------------------------------------------------------------------------ */ - -GLboolean glxewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - - if (glXGetCurrentDisplay == NULL) return GL_FALSE; - start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (0 == start) return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) -{ - int major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* initialize core GLX 1.2 */ - if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; - /* initialize flags */ - CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; - /* query GLX version */ - glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); - if (major == 1 && minor <= 3) - { - switch (minor) - { - case 3: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - break; - case 2: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; - break; - default: - return GLEW_ERROR_GLX_VERSION_11_ONLY; - break; - } - } - /* query GLX extension string */ - extStart = 0; - if (glXGetCurrentDisplay != NULL) - extStart = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte *)""; - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ -#ifdef GLX_VERSION_1_3 - if (glewExperimental || GLXEW_VERSION_1_3) CONST_CAST(GLXEW_VERSION_1_3) = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_VERSION_1_3 */ -#ifdef GLX_3DFX_multisample - CONST_CAST(GLXEW_3DFX_multisample) = _glewSearchExtension("GLX_3DFX_multisample", extStart, extEnd); -#endif /* GLX_3DFX_multisample */ -#ifdef GLX_AMD_gpu_association - CONST_CAST(GLXEW_AMD_gpu_association) = _glewSearchExtension("GLX_AMD_gpu_association", extStart, extEnd); - if (glewExperimental || GLXEW_AMD_gpu_association) CONST_CAST(GLXEW_AMD_gpu_association) = !_glewInit_GLX_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_AMD_gpu_association */ -#ifdef GLX_ARB_create_context - CONST_CAST(GLXEW_ARB_create_context) = _glewSearchExtension("GLX_ARB_create_context", extStart, extEnd); - if (glewExperimental || GLXEW_ARB_create_context) CONST_CAST(GLXEW_ARB_create_context) = !_glewInit_GLX_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_ARB_create_context */ -#ifdef GLX_ARB_create_context_profile - CONST_CAST(GLXEW_ARB_create_context_profile) = _glewSearchExtension("GLX_ARB_create_context_profile", extStart, extEnd); -#endif /* GLX_ARB_create_context_profile */ -#ifdef GLX_ARB_create_context_robustness - CONST_CAST(GLXEW_ARB_create_context_robustness) = _glewSearchExtension("GLX_ARB_create_context_robustness", extStart, extEnd); -#endif /* GLX_ARB_create_context_robustness */ -#ifdef GLX_ARB_fbconfig_float - CONST_CAST(GLXEW_ARB_fbconfig_float) = _glewSearchExtension("GLX_ARB_fbconfig_float", extStart, extEnd); -#endif /* GLX_ARB_fbconfig_float */ -#ifdef GLX_ARB_framebuffer_sRGB - CONST_CAST(GLXEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GLX_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* GLX_ARB_framebuffer_sRGB */ -#ifdef GLX_ARB_get_proc_address - CONST_CAST(GLXEW_ARB_get_proc_address) = _glewSearchExtension("GLX_ARB_get_proc_address", extStart, extEnd); -#endif /* GLX_ARB_get_proc_address */ -#ifdef GLX_ARB_multisample - CONST_CAST(GLXEW_ARB_multisample) = _glewSearchExtension("GLX_ARB_multisample", extStart, extEnd); -#endif /* GLX_ARB_multisample */ -#ifdef GLX_ARB_robustness_application_isolation - CONST_CAST(GLXEW_ARB_robustness_application_isolation) = _glewSearchExtension("GLX_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* GLX_ARB_robustness_application_isolation */ -#ifdef GLX_ARB_robustness_share_group_isolation - CONST_CAST(GLXEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GLX_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* GLX_ARB_robustness_share_group_isolation */ -#ifdef GLX_ARB_vertex_buffer_object - CONST_CAST(GLXEW_ARB_vertex_buffer_object) = _glewSearchExtension("GLX_ARB_vertex_buffer_object", extStart, extEnd); -#endif /* GLX_ARB_vertex_buffer_object */ -#ifdef GLX_ATI_pixel_format_float - CONST_CAST(GLXEW_ATI_pixel_format_float) = _glewSearchExtension("GLX_ATI_pixel_format_float", extStart, extEnd); -#endif /* GLX_ATI_pixel_format_float */ -#ifdef GLX_ATI_render_texture - CONST_CAST(GLXEW_ATI_render_texture) = _glewSearchExtension("GLX_ATI_render_texture", extStart, extEnd); - if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_ATI_render_texture */ -#ifdef GLX_EXT_buffer_age - CONST_CAST(GLXEW_EXT_buffer_age) = _glewSearchExtension("GLX_EXT_buffer_age", extStart, extEnd); -#endif /* GLX_EXT_buffer_age */ -#ifdef GLX_EXT_create_context_es2_profile - CONST_CAST(GLXEW_EXT_create_context_es2_profile) = _glewSearchExtension("GLX_EXT_create_context_es2_profile", extStart, extEnd); -#endif /* GLX_EXT_create_context_es2_profile */ -#ifdef GLX_EXT_create_context_es_profile - CONST_CAST(GLXEW_EXT_create_context_es_profile) = _glewSearchExtension("GLX_EXT_create_context_es_profile", extStart, extEnd); -#endif /* GLX_EXT_create_context_es_profile */ -#ifdef GLX_EXT_fbconfig_packed_float - CONST_CAST(GLXEW_EXT_fbconfig_packed_float) = _glewSearchExtension("GLX_EXT_fbconfig_packed_float", extStart, extEnd); -#endif /* GLX_EXT_fbconfig_packed_float */ -#ifdef GLX_EXT_framebuffer_sRGB - CONST_CAST(GLXEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GLX_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* GLX_EXT_framebuffer_sRGB */ -#ifdef GLX_EXT_import_context - CONST_CAST(GLXEW_EXT_import_context) = _glewSearchExtension("GLX_EXT_import_context", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_import_context) CONST_CAST(GLXEW_EXT_import_context) = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_import_context */ -#ifdef GLX_EXT_scene_marker - CONST_CAST(GLXEW_EXT_scene_marker) = _glewSearchExtension("GLX_EXT_scene_marker", extStart, extEnd); -#endif /* GLX_EXT_scene_marker */ -#ifdef GLX_EXT_swap_control - CONST_CAST(GLXEW_EXT_swap_control) = _glewSearchExtension("GLX_EXT_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_swap_control) CONST_CAST(GLXEW_EXT_swap_control) = !_glewInit_GLX_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_swap_control */ -#ifdef GLX_EXT_swap_control_tear - CONST_CAST(GLXEW_EXT_swap_control_tear) = _glewSearchExtension("GLX_EXT_swap_control_tear", extStart, extEnd); -#endif /* GLX_EXT_swap_control_tear */ -#ifdef GLX_EXT_texture_from_pixmap - CONST_CAST(GLXEW_EXT_texture_from_pixmap) = _glewSearchExtension("GLX_EXT_texture_from_pixmap", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_texture_from_pixmap) CONST_CAST(GLXEW_EXT_texture_from_pixmap) = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_texture_from_pixmap */ -#ifdef GLX_EXT_visual_info - CONST_CAST(GLXEW_EXT_visual_info) = _glewSearchExtension("GLX_EXT_visual_info", extStart, extEnd); -#endif /* GLX_EXT_visual_info */ -#ifdef GLX_EXT_visual_rating - CONST_CAST(GLXEW_EXT_visual_rating) = _glewSearchExtension("GLX_EXT_visual_rating", extStart, extEnd); -#endif /* GLX_EXT_visual_rating */ -#ifdef GLX_INTEL_swap_event - CONST_CAST(GLXEW_INTEL_swap_event) = _glewSearchExtension("GLX_INTEL_swap_event", extStart, extEnd); -#endif /* GLX_INTEL_swap_event */ -#ifdef GLX_MESA_agp_offset - CONST_CAST(GLXEW_MESA_agp_offset) = _glewSearchExtension("GLX_MESA_agp_offset", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_agp_offset) CONST_CAST(GLXEW_MESA_agp_offset) = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_agp_offset */ -#ifdef GLX_MESA_copy_sub_buffer - CONST_CAST(GLXEW_MESA_copy_sub_buffer) = _glewSearchExtension("GLX_MESA_copy_sub_buffer", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_copy_sub_buffer) CONST_CAST(GLXEW_MESA_copy_sub_buffer) = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_copy_sub_buffer */ -#ifdef GLX_MESA_pixmap_colormap - CONST_CAST(GLXEW_MESA_pixmap_colormap) = _glewSearchExtension("GLX_MESA_pixmap_colormap", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_pixmap_colormap) CONST_CAST(GLXEW_MESA_pixmap_colormap) = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_pixmap_colormap */ -#ifdef GLX_MESA_release_buffers - CONST_CAST(GLXEW_MESA_release_buffers) = _glewSearchExtension("GLX_MESA_release_buffers", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_release_buffers) CONST_CAST(GLXEW_MESA_release_buffers) = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_release_buffers */ -#ifdef GLX_MESA_set_3dfx_mode - CONST_CAST(GLXEW_MESA_set_3dfx_mode) = _glewSearchExtension("GLX_MESA_set_3dfx_mode", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_set_3dfx_mode) CONST_CAST(GLXEW_MESA_set_3dfx_mode) = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_set_3dfx_mode */ -#ifdef GLX_MESA_swap_control - CONST_CAST(GLXEW_MESA_swap_control) = _glewSearchExtension("GLX_MESA_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_swap_control) CONST_CAST(GLXEW_MESA_swap_control) = !_glewInit_GLX_MESA_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_swap_control */ -#ifdef GLX_NV_copy_image - CONST_CAST(GLXEW_NV_copy_image) = _glewSearchExtension("GLX_NV_copy_image", extStart, extEnd); - if (glewExperimental || GLXEW_NV_copy_image) CONST_CAST(GLXEW_NV_copy_image) = !_glewInit_GLX_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_copy_image */ -#ifdef GLX_NV_float_buffer - CONST_CAST(GLXEW_NV_float_buffer) = _glewSearchExtension("GLX_NV_float_buffer", extStart, extEnd); -#endif /* GLX_NV_float_buffer */ -#ifdef GLX_NV_multisample_coverage - CONST_CAST(GLXEW_NV_multisample_coverage) = _glewSearchExtension("GLX_NV_multisample_coverage", extStart, extEnd); -#endif /* GLX_NV_multisample_coverage */ -#ifdef GLX_NV_present_video - CONST_CAST(GLXEW_NV_present_video) = _glewSearchExtension("GLX_NV_present_video", extStart, extEnd); - if (glewExperimental || GLXEW_NV_present_video) CONST_CAST(GLXEW_NV_present_video) = !_glewInit_GLX_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_present_video */ -#ifdef GLX_NV_swap_group - CONST_CAST(GLXEW_NV_swap_group) = _glewSearchExtension("GLX_NV_swap_group", extStart, extEnd); - if (glewExperimental || GLXEW_NV_swap_group) CONST_CAST(GLXEW_NV_swap_group) = !_glewInit_GLX_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_swap_group */ -#ifdef GLX_NV_vertex_array_range - CONST_CAST(GLXEW_NV_vertex_array_range) = _glewSearchExtension("GLX_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLXEW_NV_vertex_array_range) CONST_CAST(GLXEW_NV_vertex_array_range) = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_vertex_array_range */ -#ifdef GLX_NV_video_capture - CONST_CAST(GLXEW_NV_video_capture) = _glewSearchExtension("GLX_NV_video_capture", extStart, extEnd); - if (glewExperimental || GLXEW_NV_video_capture) CONST_CAST(GLXEW_NV_video_capture) = !_glewInit_GLX_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_output - CONST_CAST(GLXEW_NV_video_output) = _glewSearchExtension("GLX_NV_video_output", extStart, extEnd); - if (glewExperimental || GLXEW_NV_video_output) CONST_CAST(GLXEW_NV_video_output) = !_glewInit_GLX_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_video_output */ -#ifdef GLX_OML_swap_method - CONST_CAST(GLXEW_OML_swap_method) = _glewSearchExtension("GLX_OML_swap_method", extStart, extEnd); -#endif /* GLX_OML_swap_method */ -#ifdef GLX_OML_sync_control - CONST_CAST(GLXEW_OML_sync_control) = _glewSearchExtension("GLX_OML_sync_control", extStart, extEnd); - if (glewExperimental || GLXEW_OML_sync_control) CONST_CAST(GLXEW_OML_sync_control) = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_OML_sync_control */ -#ifdef GLX_SGIS_blended_overlay - CONST_CAST(GLXEW_SGIS_blended_overlay) = _glewSearchExtension("GLX_SGIS_blended_overlay", extStart, extEnd); -#endif /* GLX_SGIS_blended_overlay */ -#ifdef GLX_SGIS_color_range - CONST_CAST(GLXEW_SGIS_color_range) = _glewSearchExtension("GLX_SGIS_color_range", extStart, extEnd); -#endif /* GLX_SGIS_color_range */ -#ifdef GLX_SGIS_multisample - CONST_CAST(GLXEW_SGIS_multisample) = _glewSearchExtension("GLX_SGIS_multisample", extStart, extEnd); -#endif /* GLX_SGIS_multisample */ -#ifdef GLX_SGIS_shared_multisample - CONST_CAST(GLXEW_SGIS_shared_multisample) = _glewSearchExtension("GLX_SGIS_shared_multisample", extStart, extEnd); -#endif /* GLX_SGIS_shared_multisample */ -#ifdef GLX_SGIX_fbconfig - CONST_CAST(GLXEW_SGIX_fbconfig) = _glewSearchExtension("GLX_SGIX_fbconfig", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_fbconfig) CONST_CAST(GLXEW_SGIX_fbconfig) = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_fbconfig */ -#ifdef GLX_SGIX_hyperpipe - CONST_CAST(GLXEW_SGIX_hyperpipe) = _glewSearchExtension("GLX_SGIX_hyperpipe", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_hyperpipe) CONST_CAST(GLXEW_SGIX_hyperpipe) = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_hyperpipe */ -#ifdef GLX_SGIX_pbuffer - CONST_CAST(GLXEW_SGIX_pbuffer) = _glewSearchExtension("GLX_SGIX_pbuffer", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_pbuffer) CONST_CAST(GLXEW_SGIX_pbuffer) = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_pbuffer */ -#ifdef GLX_SGIX_swap_barrier - CONST_CAST(GLXEW_SGIX_swap_barrier) = _glewSearchExtension("GLX_SGIX_swap_barrier", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_swap_barrier) CONST_CAST(GLXEW_SGIX_swap_barrier) = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_swap_barrier */ -#ifdef GLX_SGIX_swap_group - CONST_CAST(GLXEW_SGIX_swap_group) = _glewSearchExtension("GLX_SGIX_swap_group", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_swap_group) CONST_CAST(GLXEW_SGIX_swap_group) = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_swap_group */ -#ifdef GLX_SGIX_video_resize - CONST_CAST(GLXEW_SGIX_video_resize) = _glewSearchExtension("GLX_SGIX_video_resize", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_video_resize) CONST_CAST(GLXEW_SGIX_video_resize) = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_video_resize */ -#ifdef GLX_SGIX_visual_select_group - CONST_CAST(GLXEW_SGIX_visual_select_group) = _glewSearchExtension("GLX_SGIX_visual_select_group", extStart, extEnd); -#endif /* GLX_SGIX_visual_select_group */ -#ifdef GLX_SGI_cushion - CONST_CAST(GLXEW_SGI_cushion) = _glewSearchExtension("GLX_SGI_cushion", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_cushion) CONST_CAST(GLXEW_SGI_cushion) = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_cushion */ -#ifdef GLX_SGI_make_current_read - CONST_CAST(GLXEW_SGI_make_current_read) = _glewSearchExtension("GLX_SGI_make_current_read", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_make_current_read) CONST_CAST(GLXEW_SGI_make_current_read) = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_make_current_read */ -#ifdef GLX_SGI_swap_control - CONST_CAST(GLXEW_SGI_swap_control) = _glewSearchExtension("GLX_SGI_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_swap_control) CONST_CAST(GLXEW_SGI_swap_control) = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_swap_control */ -#ifdef GLX_SGI_video_sync - CONST_CAST(GLXEW_SGI_video_sync) = _glewSearchExtension("GLX_SGI_video_sync", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_video_sync) CONST_CAST(GLXEW_SGI_video_sync) = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_video_sync */ -#ifdef GLX_SUN_get_transparent_index - CONST_CAST(GLXEW_SUN_get_transparent_index) = _glewSearchExtension("GLX_SUN_get_transparent_index", extStart, extEnd); - if (glewExperimental || GLXEW_SUN_get_transparent_index) CONST_CAST(GLXEW_SUN_get_transparent_index) = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SUN_get_transparent_index */ -#ifdef GLX_SUN_video_resize - CONST_CAST(GLXEW_SUN_video_resize) = _glewSearchExtension("GLX_SUN_video_resize", extStart, extEnd); - if (glewExperimental || GLXEW_SUN_video_resize) CONST_CAST(GLXEW_SUN_video_resize) = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SUN_video_resize */ - - return GLEW_OK; -} - -#endif /* !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */ - -/* ------------------------------------------------------------------------ */ - -const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) -{ - static const GLubyte* _glewErrorString[] = - { - (const GLubyte*)"No error", - (const GLubyte*)"Missing GL version", - (const GLubyte*)"GL 1.1 and up are not supported", - (const GLubyte*)"GLX 1.2 and up are not supported", - (const GLubyte*)"Unknown error" - }; - const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; - return _glewErrorString[(int)error > max_error ? max_error : (int)error]; -} - -const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) -{ - static const GLubyte* _glewString[] = - { - (const GLubyte*)NULL, - (const GLubyte*)"1.10.0", - (const GLubyte*)"1", - (const GLubyte*)"10", - (const GLubyte*)"0" - }; - const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; - return _glewString[(int)name > max_string ? 0 : (int)name]; -} - -/* ------------------------------------------------------------------------ */ - -GLboolean glewExperimental = GL_FALSE; - -#if !defined(GLEW_MX) - -#if defined(_WIN32) -extern GLenum GLEWAPIENTRY wglewContextInit (void); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -extern GLenum GLEWAPIENTRY glxewContextInit (void); -#endif /* _WIN32 */ - -GLenum GLEWAPIENTRY glewInit (void) -{ - GLenum r; - r = glewContextInit(); - if ( r != 0 ) return r; -#if defined(_WIN32) - return wglewContextInit(); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ - return glxewContextInit(); -#else - return r; -#endif /* _WIN32 */ -} - -#endif /* !GLEW_MX */ -#ifdef GLEW_MX -GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY glewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) - { -#ifdef GL_VERSION_1_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) - { - ret = GLEW_VERSION_1_2; - continue; - } -#endif -#ifdef GL_VERSION_1_2_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2_1", 5)) - { - ret = GLEW_VERSION_1_2_1; - continue; - } -#endif -#ifdef GL_VERSION_1_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) - { - ret = GLEW_VERSION_1_3; - continue; - } -#endif -#ifdef GL_VERSION_1_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) - { - ret = GLEW_VERSION_1_4; - continue; - } -#endif -#ifdef GL_VERSION_1_5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3)) - { - ret = GLEW_VERSION_1_5; - continue; - } -#endif -#ifdef GL_VERSION_2_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_0", 3)) - { - ret = GLEW_VERSION_2_0; - continue; - } -#endif -#ifdef GL_VERSION_2_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_1", 3)) - { - ret = GLEW_VERSION_2_1; - continue; - } -#endif -#ifdef GL_VERSION_3_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_0", 3)) - { - ret = GLEW_VERSION_3_0; - continue; - } -#endif -#ifdef GL_VERSION_3_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_1", 3)) - { - ret = GLEW_VERSION_3_1; - continue; - } -#endif -#ifdef GL_VERSION_3_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_2", 3)) - { - ret = GLEW_VERSION_3_2; - continue; - } -#endif -#ifdef GL_VERSION_3_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_3", 3)) - { - ret = GLEW_VERSION_3_3; - continue; - } -#endif -#ifdef GL_VERSION_4_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_0", 3)) - { - ret = GLEW_VERSION_4_0; - continue; - } -#endif -#ifdef GL_VERSION_4_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_1", 3)) - { - ret = GLEW_VERSION_4_1; - continue; - } -#endif -#ifdef GL_VERSION_4_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_2", 3)) - { - ret = GLEW_VERSION_4_2; - continue; - } -#endif -#ifdef GL_VERSION_4_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_3", 3)) - { - ret = GLEW_VERSION_4_3; - continue; - } -#endif -#ifdef GL_VERSION_4_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_4", 3)) - { - ret = GLEW_VERSION_4_4; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef GL_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_3DFX_multisample; - continue; - } -#endif -#ifdef GL_3DFX_tbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tbuffer", 7)) - { - ret = GLEW_3DFX_tbuffer; - continue; - } -#endif -#ifdef GL_3DFX_texture_compression_FXT1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_FXT1", 24)) - { - ret = GLEW_3DFX_texture_compression_FXT1; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef GL_AMD_blend_minmax_factor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax_factor", 19)) - { - ret = GLEW_AMD_blend_minmax_factor; - continue; - } -#endif -#ifdef GL_AMD_conservative_depth - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) - { - ret = GLEW_AMD_conservative_depth; - continue; - } -#endif -#ifdef GL_AMD_debug_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) - { - ret = GLEW_AMD_debug_output; - continue; - } -#endif -#ifdef GL_AMD_depth_clamp_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp_separate", 20)) - { - ret = GLEW_AMD_depth_clamp_separate; - continue; - } -#endif -#ifdef GL_AMD_draw_buffers_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) - { - ret = GLEW_AMD_draw_buffers_blend; - continue; - } -#endif -#ifdef GL_AMD_interleaved_elements - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interleaved_elements", 20)) - { - ret = GLEW_AMD_interleaved_elements; - continue; - } -#endif -#ifdef GL_AMD_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) - { - ret = GLEW_AMD_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_AMD_name_gen_delete - if (_glewStrSame3(&pos, &len, (const GLubyte*)"name_gen_delete", 15)) - { - ret = GLEW_AMD_name_gen_delete; - continue; - } -#endif -#ifdef GL_AMD_performance_monitor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"performance_monitor", 19)) - { - ret = GLEW_AMD_performance_monitor; - continue; - } -#endif -#ifdef GL_AMD_pinned_memory - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pinned_memory", 13)) - { - ret = GLEW_AMD_pinned_memory; - continue; - } -#endif -#ifdef GL_AMD_query_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) - { - ret = GLEW_AMD_query_buffer_object; - continue; - } -#endif -#ifdef GL_AMD_sample_positions - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_positions", 16)) - { - ret = GLEW_AMD_sample_positions; - continue; - } -#endif -#ifdef GL_AMD_seamless_cubemap_per_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) - { - ret = GLEW_AMD_seamless_cubemap_per_texture; - continue; - } -#endif -#ifdef GL_AMD_shader_stencil_export - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) - { - ret = GLEW_AMD_shader_stencil_export; - continue; - } -#endif -#ifdef GL_AMD_shader_trinary_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_trinary_minmax", 21)) - { - ret = GLEW_AMD_shader_trinary_minmax; - continue; - } -#endif -#ifdef GL_AMD_sparse_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) - { - ret = GLEW_AMD_sparse_texture; - continue; - } -#endif -#ifdef GL_AMD_stencil_operation_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_operation_extended", 26)) - { - ret = GLEW_AMD_stencil_operation_extended; - continue; - } -#endif -#ifdef GL_AMD_texture_texture4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_texture4", 16)) - { - ret = GLEW_AMD_texture_texture4; - continue; - } -#endif -#ifdef GL_AMD_transform_feedback3_lines_triangles - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3_lines_triangles", 35)) - { - ret = GLEW_AMD_transform_feedback3_lines_triangles; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_layer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_layer", 19)) - { - ret = GLEW_AMD_vertex_shader_layer; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_tessellator - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_tessellator", 25)) - { - ret = GLEW_AMD_vertex_shader_tessellator; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_viewport_index - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_viewport_index", 28)) - { - ret = GLEW_AMD_vertex_shader_viewport_index; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ANGLE_", 6)) - { -#ifdef GL_ANGLE_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_ANGLE_depth_texture; - continue; - } -#endif -#ifdef GL_ANGLE_framebuffer_blit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) - { - ret = GLEW_ANGLE_framebuffer_blit; - continue; - } -#endif -#ifdef GL_ANGLE_framebuffer_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) - { - ret = GLEW_ANGLE_framebuffer_multisample; - continue; - } -#endif -#ifdef GL_ANGLE_instanced_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) - { - ret = GLEW_ANGLE_instanced_arrays; - continue; - } -#endif -#ifdef GL_ANGLE_pack_reverse_row_order - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_reverse_row_order", 22)) - { - ret = GLEW_ANGLE_pack_reverse_row_order; - continue; - } -#endif -#ifdef GL_ANGLE_program_binary - if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_binary", 14)) - { - ret = GLEW_ANGLE_program_binary; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt1; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt3", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt3; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt5", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt5; - continue; - } -#endif -#ifdef GL_ANGLE_texture_usage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_usage", 13)) - { - ret = GLEW_ANGLE_texture_usage; - continue; - } -#endif -#ifdef GL_ANGLE_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_ANGLE_timer_query; - continue; - } -#endif -#ifdef GL_ANGLE_translated_shader_source - if (_glewStrSame3(&pos, &len, (const GLubyte*)"translated_shader_source", 24)) - { - ret = GLEW_ANGLE_translated_shader_source; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) - { -#ifdef GL_APPLE_aux_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"aux_depth_stencil", 17)) - { - ret = GLEW_APPLE_aux_depth_stencil; - continue; - } -#endif -#ifdef GL_APPLE_client_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_storage", 14)) - { - ret = GLEW_APPLE_client_storage; - continue; - } -#endif -#ifdef GL_APPLE_element_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) - { - ret = GLEW_APPLE_element_array; - continue; - } -#endif -#ifdef GL_APPLE_fence - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) - { - ret = GLEW_APPLE_fence; - continue; - } -#endif -#ifdef GL_APPLE_float_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_pixels", 12)) - { - ret = GLEW_APPLE_float_pixels; - continue; - } -#endif -#ifdef GL_APPLE_flush_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_buffer_range", 18)) - { - ret = GLEW_APPLE_flush_buffer_range; - continue; - } -#endif -#ifdef GL_APPLE_object_purgeable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"object_purgeable", 16)) - { - ret = GLEW_APPLE_object_purgeable; - continue; - } -#endif -#ifdef GL_APPLE_pixel_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer", 12)) - { - ret = GLEW_APPLE_pixel_buffer; - continue; - } -#endif -#ifdef GL_APPLE_rgb_422 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rgb_422", 7)) - { - ret = GLEW_APPLE_rgb_422; - continue; - } -#endif -#ifdef GL_APPLE_row_bytes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"row_bytes", 9)) - { - ret = GLEW_APPLE_row_bytes; - continue; - } -#endif -#ifdef GL_APPLE_specular_vector - if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_vector", 15)) - { - ret = GLEW_APPLE_specular_vector; - continue; - } -#endif -#ifdef GL_APPLE_texture_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) - { - ret = GLEW_APPLE_texture_range; - continue; - } -#endif -#ifdef GL_APPLE_transform_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_hint", 14)) - { - ret = GLEW_APPLE_transform_hint; - continue; - } -#endif -#ifdef GL_APPLE_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_APPLE_vertex_array_object; - continue; - } -#endif -#ifdef GL_APPLE_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLEW_APPLE_vertex_array_range; - continue; - } -#endif -#ifdef GL_APPLE_vertex_program_evaluators - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program_evaluators", 25)) - { - ret = GLEW_APPLE_vertex_program_evaluators; - continue; - } -#endif -#ifdef GL_APPLE_ycbcr_422 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_422", 9)) - { - ret = GLEW_APPLE_ycbcr_422; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef GL_ARB_ES2_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES2_compatibility", 17)) - { - ret = GLEW_ARB_ES2_compatibility; - continue; - } -#endif -#ifdef GL_ARB_ES3_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES3_compatibility", 17)) - { - ret = GLEW_ARB_ES3_compatibility; - continue; - } -#endif -#ifdef GL_ARB_arrays_of_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"arrays_of_arrays", 16)) - { - ret = GLEW_ARB_arrays_of_arrays; - continue; - } -#endif -#ifdef GL_ARB_base_instance - if (_glewStrSame3(&pos, &len, (const GLubyte*)"base_instance", 13)) - { - ret = GLEW_ARB_base_instance; - continue; - } -#endif -#ifdef GL_ARB_bindless_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) - { - ret = GLEW_ARB_bindless_texture; - continue; - } -#endif -#ifdef GL_ARB_blend_func_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_extended", 19)) - { - ret = GLEW_ARB_blend_func_extended; - continue; - } -#endif -#ifdef GL_ARB_buffer_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_storage", 14)) - { - ret = GLEW_ARB_buffer_storage; - continue; - } -#endif -#ifdef GL_ARB_cl_event - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event", 8)) - { - ret = GLEW_ARB_cl_event; - continue; - } -#endif -#ifdef GL_ARB_clear_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_buffer_object", 19)) - { - ret = GLEW_ARB_clear_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_clear_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_texture", 13)) - { - ret = GLEW_ARB_clear_texture; - continue; - } -#endif -#ifdef GL_ARB_color_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) - { - ret = GLEW_ARB_color_buffer_float; - continue; - } -#endif -#ifdef GL_ARB_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compatibility", 13)) - { - ret = GLEW_ARB_compatibility; - continue; - } -#endif -#ifdef GL_ARB_compressed_texture_pixel_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_texture_pixel_storage", 32)) - { - ret = GLEW_ARB_compressed_texture_pixel_storage; - continue; - } -#endif -#ifdef GL_ARB_compute_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_shader", 14)) - { - ret = GLEW_ARB_compute_shader; - continue; - } -#endif -#ifdef GL_ARB_compute_variable_group_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_variable_group_size", 27)) - { - ret = GLEW_ARB_compute_variable_group_size; - continue; - } -#endif -#ifdef GL_ARB_conservative_depth - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) - { - ret = GLEW_ARB_conservative_depth; - continue; - } -#endif -#ifdef GL_ARB_copy_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_buffer", 11)) - { - ret = GLEW_ARB_copy_buffer; - continue; - } -#endif -#ifdef GL_ARB_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLEW_ARB_copy_image; - continue; - } -#endif -#ifdef GL_ARB_debug_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) - { - ret = GLEW_ARB_debug_output; - continue; - } -#endif -#ifdef GL_ARB_depth_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) - { - ret = GLEW_ARB_depth_buffer_float; - continue; - } -#endif -#ifdef GL_ARB_depth_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) - { - ret = GLEW_ARB_depth_clamp; - continue; - } -#endif -#ifdef GL_ARB_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_ARB_depth_texture; - continue; - } -#endif -#ifdef GL_ARB_draw_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) - { - ret = GLEW_ARB_draw_buffers; - continue; - } -#endif -#ifdef GL_ARB_draw_buffers_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) - { - ret = GLEW_ARB_draw_buffers_blend; - continue; - } -#endif -#ifdef GL_ARB_draw_elements_base_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_elements_base_vertex", 25)) - { - ret = GLEW_ARB_draw_elements_base_vertex; - continue; - } -#endif -#ifdef GL_ARB_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_indirect", 13)) - { - ret = GLEW_ARB_draw_indirect; - continue; - } -#endif -#ifdef GL_ARB_draw_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) - { - ret = GLEW_ARB_draw_instanced; - continue; - } -#endif -#ifdef GL_ARB_enhanced_layouts - if (_glewStrSame3(&pos, &len, (const GLubyte*)"enhanced_layouts", 16)) - { - ret = GLEW_ARB_enhanced_layouts; - continue; - } -#endif -#ifdef GL_ARB_explicit_attrib_location - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_attrib_location", 24)) - { - ret = GLEW_ARB_explicit_attrib_location; - continue; - } -#endif -#ifdef GL_ARB_explicit_uniform_location - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_uniform_location", 25)) - { - ret = GLEW_ARB_explicit_uniform_location; - continue; - } -#endif -#ifdef GL_ARB_fragment_coord_conventions - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_coord_conventions", 26)) - { - ret = GLEW_ARB_fragment_coord_conventions; - continue; - } -#endif -#ifdef GL_ARB_fragment_layer_viewport - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_layer_viewport", 23)) - { - ret = GLEW_ARB_fragment_layer_viewport; - continue; - } -#endif -#ifdef GL_ARB_fragment_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) - { - ret = GLEW_ARB_fragment_program; - continue; - } -#endif -#ifdef GL_ARB_fragment_program_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_shadow", 23)) - { - ret = GLEW_ARB_fragment_program_shadow; - continue; - } -#endif -#ifdef GL_ARB_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) - { - ret = GLEW_ARB_fragment_shader; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_no_attachments - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_no_attachments", 26)) - { - ret = GLEW_ARB_framebuffer_no_attachments; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) - { - ret = GLEW_ARB_framebuffer_object; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef GL_ARB_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_ARB_geometry_shader4; - continue; - } -#endif -#ifdef GL_ARB_get_program_binary - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_program_binary", 18)) - { - ret = GLEW_ARB_get_program_binary; - continue; - } -#endif -#ifdef GL_ARB_gpu_shader5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) - { - ret = GLEW_ARB_gpu_shader5; - continue; - } -#endif -#ifdef GL_ARB_gpu_shader_fp64 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader_fp64", 15)) - { - ret = GLEW_ARB_gpu_shader_fp64; - continue; - } -#endif -#ifdef GL_ARB_half_float_pixel - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_pixel", 16)) - { - ret = GLEW_ARB_half_float_pixel; - continue; - } -#endif -#ifdef GL_ARB_half_float_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_vertex", 17)) - { - ret = GLEW_ARB_half_float_vertex; - continue; - } -#endif -#ifdef GL_ARB_imaging - if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) - { - ret = GLEW_ARB_imaging; - continue; - } -#endif -#ifdef GL_ARB_indirect_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"indirect_parameters", 19)) - { - ret = GLEW_ARB_indirect_parameters; - continue; - } -#endif -#ifdef GL_ARB_instanced_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) - { - ret = GLEW_ARB_instanced_arrays; - continue; - } -#endif -#ifdef GL_ARB_internalformat_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query", 20)) - { - ret = GLEW_ARB_internalformat_query; - continue; - } -#endif -#ifdef GL_ARB_internalformat_query2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query2", 21)) - { - ret = GLEW_ARB_internalformat_query2; - continue; - } -#endif -#ifdef GL_ARB_invalidate_subdata - if (_glewStrSame3(&pos, &len, (const GLubyte*)"invalidate_subdata", 18)) - { - ret = GLEW_ARB_invalidate_subdata; - continue; - } -#endif -#ifdef GL_ARB_map_buffer_alignment - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_alignment", 20)) - { - ret = GLEW_ARB_map_buffer_alignment; - continue; - } -#endif -#ifdef GL_ARB_map_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_range", 16)) - { - ret = GLEW_ARB_map_buffer_range; - continue; - } -#endif -#ifdef GL_ARB_matrix_palette - if (_glewStrSame3(&pos, &len, (const GLubyte*)"matrix_palette", 14)) - { - ret = GLEW_ARB_matrix_palette; - continue; - } -#endif -#ifdef GL_ARB_multi_bind - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_bind", 10)) - { - ret = GLEW_ARB_multi_bind; - continue; - } -#endif -#ifdef GL_ARB_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) - { - ret = GLEW_ARB_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_ARB_multisample; - continue; - } -#endif -#ifdef GL_ARB_multitexture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multitexture", 12)) - { - ret = GLEW_ARB_multitexture; - continue; - } -#endif -#ifdef GL_ARB_occlusion_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) - { - ret = GLEW_ARB_occlusion_query; - continue; - } -#endif -#ifdef GL_ARB_occlusion_query2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query2", 16)) - { - ret = GLEW_ARB_occlusion_query2; - continue; - } -#endif -#ifdef GL_ARB_pixel_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) - { - ret = GLEW_ARB_pixel_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_point_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) - { - ret = GLEW_ARB_point_parameters; - continue; - } -#endif -#ifdef GL_ARB_point_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) - { - ret = GLEW_ARB_point_sprite; - continue; - } -#endif -#ifdef GL_ARB_program_interface_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_interface_query", 23)) - { - ret = GLEW_ARB_program_interface_query; - continue; - } -#endif -#ifdef GL_ARB_provoking_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) - { - ret = GLEW_ARB_provoking_vertex; - continue; - } -#endif -#ifdef GL_ARB_query_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) - { - ret = GLEW_ARB_query_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_robust_buffer_access_behavior - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robust_buffer_access_behavior", 29)) - { - ret = GLEW_ARB_robust_buffer_access_behavior; - continue; - } -#endif -#ifdef GL_ARB_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness", 10)) - { - ret = GLEW_ARB_robustness; - continue; - } -#endif -#ifdef GL_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = GLEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef GL_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = GLEW_ARB_robustness_share_group_isolation; - continue; - } -#endif -#ifdef GL_ARB_sample_shading - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_shading", 14)) - { - ret = GLEW_ARB_sample_shading; - continue; - } -#endif -#ifdef GL_ARB_sampler_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sampler_objects", 15)) - { - ret = GLEW_ARB_sampler_objects; - continue; - } -#endif -#ifdef GL_ARB_seamless_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cube_map", 17)) - { - ret = GLEW_ARB_seamless_cube_map; - continue; - } -#endif -#ifdef GL_ARB_seamless_cubemap_per_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) - { - ret = GLEW_ARB_seamless_cubemap_per_texture; - continue; - } -#endif -#ifdef GL_ARB_separate_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) - { - ret = GLEW_ARB_separate_shader_objects; - continue; - } -#endif -#ifdef GL_ARB_shader_atomic_counters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) - { - ret = GLEW_ARB_shader_atomic_counters; - continue; - } -#endif -#ifdef GL_ARB_shader_bit_encoding - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_bit_encoding", 19)) - { - ret = GLEW_ARB_shader_bit_encoding; - continue; - } -#endif -#ifdef GL_ARB_shader_draw_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_draw_parameters", 22)) - { - ret = GLEW_ARB_shader_draw_parameters; - continue; - } -#endif -#ifdef GL_ARB_shader_group_vote - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_group_vote", 17)) - { - ret = GLEW_ARB_shader_group_vote; - continue; - } -#endif -#ifdef GL_ARB_shader_image_load_store - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) - { - ret = GLEW_ARB_shader_image_load_store; - continue; - } -#endif -#ifdef GL_ARB_shader_image_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_size", 17)) - { - ret = GLEW_ARB_shader_image_size; - continue; - } -#endif -#ifdef GL_ARB_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_objects", 14)) - { - ret = GLEW_ARB_shader_objects; - continue; - } -#endif -#ifdef GL_ARB_shader_precision - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_precision", 16)) - { - ret = GLEW_ARB_shader_precision; - continue; - } -#endif -#ifdef GL_ARB_shader_stencil_export - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) - { - ret = GLEW_ARB_shader_stencil_export; - continue; - } -#endif -#ifdef GL_ARB_shader_storage_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) - { - ret = GLEW_ARB_shader_storage_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_shader_subroutine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_subroutine", 17)) - { - ret = GLEW_ARB_shader_subroutine; - continue; - } -#endif -#ifdef GL_ARB_shader_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) - { - ret = GLEW_ARB_shader_texture_lod; - continue; - } -#endif -#ifdef GL_ARB_shading_language_100 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_100", 20)) - { - ret = GLEW_ARB_shading_language_100; - continue; - } -#endif -#ifdef GL_ARB_shading_language_420pack - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_420pack", 24)) - { - ret = GLEW_ARB_shading_language_420pack; - continue; - } -#endif -#ifdef GL_ARB_shading_language_include - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_include", 24)) - { - ret = GLEW_ARB_shading_language_include; - continue; - } -#endif -#ifdef GL_ARB_shading_language_packing - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_packing", 24)) - { - ret = GLEW_ARB_shading_language_packing; - continue; - } -#endif -#ifdef GL_ARB_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) - { - ret = GLEW_ARB_shadow; - continue; - } -#endif -#ifdef GL_ARB_shadow_ambient - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) - { - ret = GLEW_ARB_shadow_ambient; - continue; - } -#endif -#ifdef GL_ARB_sparse_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) - { - ret = GLEW_ARB_sparse_texture; - continue; - } -#endif -#ifdef GL_ARB_stencil_texturing - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_texturing", 17)) - { - ret = GLEW_ARB_stencil_texturing; - continue; - } -#endif -#ifdef GL_ARB_sync - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync", 4)) - { - ret = GLEW_ARB_sync; - continue; - } -#endif -#ifdef GL_ARB_tessellation_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_shader", 19)) - { - ret = GLEW_ARB_tessellation_shader; - continue; - } -#endif -#ifdef GL_ARB_texture_border_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) - { - ret = GLEW_ARB_texture_border_clamp; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) - { - ret = GLEW_ARB_texture_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_object_rgb32 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object_rgb32", 27)) - { - ret = GLEW_ARB_texture_buffer_object_rgb32; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_range", 20)) - { - ret = GLEW_ARB_texture_buffer_range; - continue; - } -#endif -#ifdef GL_ARB_texture_compression - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression", 19)) - { - ret = GLEW_ARB_texture_compression; - continue; - } -#endif -#ifdef GL_ARB_texture_compression_bptc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_bptc", 24)) - { - ret = GLEW_ARB_texture_compression_bptc; - continue; - } -#endif -#ifdef GL_ARB_texture_compression_rgtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) - { - ret = GLEW_ARB_texture_compression_rgtc; - continue; - } -#endif -#ifdef GL_ARB_texture_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) - { - ret = GLEW_ARB_texture_cube_map; - continue; - } -#endif -#ifdef GL_ARB_texture_cube_map_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map_array", 22)) - { - ret = GLEW_ARB_texture_cube_map_array; - continue; - } -#endif -#ifdef GL_ARB_texture_env_add - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) - { - ret = GLEW_ARB_texture_env_add; - continue; - } -#endif -#ifdef GL_ARB_texture_env_combine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) - { - ret = GLEW_ARB_texture_env_combine; - continue; - } -#endif -#ifdef GL_ARB_texture_env_crossbar - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_crossbar", 20)) - { - ret = GLEW_ARB_texture_env_crossbar; - continue; - } -#endif -#ifdef GL_ARB_texture_env_dot3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) - { - ret = GLEW_ARB_texture_env_dot3; - continue; - } -#endif -#ifdef GL_ARB_texture_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) - { - ret = GLEW_ARB_texture_float; - continue; - } -#endif -#ifdef GL_ARB_texture_gather - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_gather", 14)) - { - ret = GLEW_ARB_texture_gather; - continue; - } -#endif -#ifdef GL_ARB_texture_mirror_clamp_to_edge - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp_to_edge", 28)) - { - ret = GLEW_ARB_texture_mirror_clamp_to_edge; - continue; - } -#endif -#ifdef GL_ARB_texture_mirrored_repeat - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) - { - ret = GLEW_ARB_texture_mirrored_repeat; - continue; - } -#endif -#ifdef GL_ARB_texture_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) - { - ret = GLEW_ARB_texture_multisample; - continue; - } -#endif -#ifdef GL_ARB_texture_non_power_of_two - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_non_power_of_two", 24)) - { - ret = GLEW_ARB_texture_non_power_of_two; - continue; - } -#endif -#ifdef GL_ARB_texture_query_levels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_levels", 20)) - { - ret = GLEW_ARB_texture_query_levels; - continue; - } -#endif -#ifdef GL_ARB_texture_query_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_lod", 17)) - { - ret = GLEW_ARB_texture_query_lod; - continue; - } -#endif -#ifdef GL_ARB_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_ARB_texture_rectangle; - continue; - } -#endif -#ifdef GL_ARB_texture_rg - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rg", 10)) - { - ret = GLEW_ARB_texture_rg; - continue; - } -#endif -#ifdef GL_ARB_texture_rgb10_a2ui - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rgb10_a2ui", 18)) - { - ret = GLEW_ARB_texture_rgb10_a2ui; - continue; - } -#endif -#ifdef GL_ARB_texture_stencil8 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stencil8", 16)) - { - ret = GLEW_ARB_texture_stencil8; - continue; - } -#endif -#ifdef GL_ARB_texture_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage", 15)) - { - ret = GLEW_ARB_texture_storage; - continue; - } -#endif -#ifdef GL_ARB_texture_storage_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage_multisample", 27)) - { - ret = GLEW_ARB_texture_storage_multisample; - continue; - } -#endif -#ifdef GL_ARB_texture_swizzle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) - { - ret = GLEW_ARB_texture_swizzle; - continue; - } -#endif -#ifdef GL_ARB_texture_view - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_view", 12)) - { - ret = GLEW_ARB_texture_view; - continue; - } -#endif -#ifdef GL_ARB_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_ARB_timer_query; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) - { - ret = GLEW_ARB_transform_feedback2; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3", 19)) - { - ret = GLEW_ARB_transform_feedback3; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback_instanced", 28)) - { - ret = GLEW_ARB_transform_feedback_instanced; - continue; - } -#endif -#ifdef GL_ARB_transpose_matrix - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transpose_matrix", 16)) - { - ret = GLEW_ARB_transpose_matrix; - continue; - } -#endif -#ifdef GL_ARB_uniform_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"uniform_buffer_object", 21)) - { - ret = GLEW_ARB_uniform_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_array_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) - { - ret = GLEW_ARB_vertex_array_bgra; - continue; - } -#endif -#ifdef GL_ARB_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_ARB_vertex_array_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_attrib_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) - { - ret = GLEW_ARB_vertex_attrib_64bit; - continue; - } -#endif -#ifdef GL_ARB_vertex_attrib_binding - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_binding", 21)) - { - ret = GLEW_ARB_vertex_attrib_binding; - continue; - } -#endif -#ifdef GL_ARB_vertex_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_blend", 12)) - { - ret = GLEW_ARB_vertex_blend; - continue; - } -#endif -#ifdef GL_ARB_vertex_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) - { - ret = GLEW_ARB_vertex_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) - { - ret = GLEW_ARB_vertex_program; - continue; - } -#endif -#ifdef GL_ARB_vertex_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) - { - ret = GLEW_ARB_vertex_shader; - continue; - } -#endif -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_10f_11f_11f_rev", 27)) - { - ret = GLEW_ARB_vertex_type_10f_11f_11f_rev; - continue; - } -#endif -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_2_10_10_10_rev", 26)) - { - ret = GLEW_ARB_vertex_type_2_10_10_10_rev; - continue; - } -#endif -#ifdef GL_ARB_viewport_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"viewport_array", 14)) - { - ret = GLEW_ARB_viewport_array; - continue; - } -#endif -#ifdef GL_ARB_window_pos - if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) - { - ret = GLEW_ARB_window_pos; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATIX_", 5)) - { -#ifdef GL_ATIX_point_sprites - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprites", 13)) - { - ret = GLEW_ATIX_point_sprites; - continue; - } -#endif -#ifdef GL_ATIX_texture_env_combine3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) - { - ret = GLEW_ATIX_texture_env_combine3; - continue; - } -#endif -#ifdef GL_ATIX_texture_env_route - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_route", 17)) - { - ret = GLEW_ATIX_texture_env_route; - continue; - } -#endif -#ifdef GL_ATIX_vertex_shader_output_point_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_output_point_size", 31)) - { - ret = GLEW_ATIX_vertex_shader_output_point_size; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef GL_ATI_draw_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) - { - ret = GLEW_ATI_draw_buffers; - continue; - } -#endif -#ifdef GL_ATI_element_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) - { - ret = GLEW_ATI_element_array; - continue; - } -#endif -#ifdef GL_ATI_envmap_bumpmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"envmap_bumpmap", 14)) - { - ret = GLEW_ATI_envmap_bumpmap; - continue; - } -#endif -#ifdef GL_ATI_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) - { - ret = GLEW_ATI_fragment_shader; - continue; - } -#endif -#ifdef GL_ATI_map_object_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_object_buffer", 17)) - { - ret = GLEW_ATI_map_object_buffer; - continue; - } -#endif -#ifdef GL_ATI_meminfo - if (_glewStrSame3(&pos, &len, (const GLubyte*)"meminfo", 7)) - { - ret = GLEW_ATI_meminfo; - continue; - } -#endif -#ifdef GL_ATI_pn_triangles - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pn_triangles", 12)) - { - ret = GLEW_ATI_pn_triangles; - continue; - } -#endif -#ifdef GL_ATI_separate_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_stencil", 16)) - { - ret = GLEW_ATI_separate_stencil; - continue; - } -#endif -#ifdef GL_ATI_shader_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) - { - ret = GLEW_ATI_shader_texture_lod; - continue; - } -#endif -#ifdef GL_ATI_text_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"text_fragment_shader", 20)) - { - ret = GLEW_ATI_text_fragment_shader; - continue; - } -#endif -#ifdef GL_ATI_texture_compression_3dc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_3dc", 23)) - { - ret = GLEW_ATI_texture_compression_3dc; - continue; - } -#endif -#ifdef GL_ATI_texture_env_combine3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) - { - ret = GLEW_ATI_texture_env_combine3; - continue; - } -#endif -#ifdef GL_ATI_texture_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) - { - ret = GLEW_ATI_texture_float; - continue; - } -#endif -#ifdef GL_ATI_texture_mirror_once - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_once", 19)) - { - ret = GLEW_ATI_texture_mirror_once; - continue; - } -#endif -#ifdef GL_ATI_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_ATI_vertex_array_object; - continue; - } -#endif -#ifdef GL_ATI_vertex_attrib_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_array_object", 26)) - { - ret = GLEW_ATI_vertex_attrib_array_object; - continue; - } -#endif -#ifdef GL_ATI_vertex_streams - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_streams", 14)) - { - ret = GLEW_ATI_vertex_streams; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef GL_EXT_422_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"422_pixels", 10)) - { - ret = GLEW_EXT_422_pixels; - continue; - } -#endif -#ifdef GL_EXT_Cg_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"Cg_shader", 9)) - { - ret = GLEW_EXT_Cg_shader; - continue; - } -#endif -#ifdef GL_EXT_abgr - if (_glewStrSame3(&pos, &len, (const GLubyte*)"abgr", 4)) - { - ret = GLEW_EXT_abgr; - continue; - } -#endif -#ifdef GL_EXT_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bgra", 4)) - { - ret = GLEW_EXT_bgra; - continue; - } -#endif -#ifdef GL_EXT_bindable_uniform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindable_uniform", 16)) - { - ret = GLEW_EXT_bindable_uniform; - continue; - } -#endif -#ifdef GL_EXT_blend_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_color", 11)) - { - ret = GLEW_EXT_blend_color; - continue; - } -#endif -#ifdef GL_EXT_blend_equation_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_separate", 23)) - { - ret = GLEW_EXT_blend_equation_separate; - continue; - } -#endif -#ifdef GL_EXT_blend_func_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_separate", 19)) - { - ret = GLEW_EXT_blend_func_separate; - continue; - } -#endif -#ifdef GL_EXT_blend_logic_op - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_logic_op", 14)) - { - ret = GLEW_EXT_blend_logic_op; - continue; - } -#endif -#ifdef GL_EXT_blend_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax", 12)) - { - ret = GLEW_EXT_blend_minmax; - continue; - } -#endif -#ifdef GL_EXT_blend_subtract - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_subtract", 14)) - { - ret = GLEW_EXT_blend_subtract; - continue; - } -#endif -#ifdef GL_EXT_clip_volume_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_volume_hint", 16)) - { - ret = GLEW_EXT_clip_volume_hint; - continue; - } -#endif -#ifdef GL_EXT_cmyka - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cmyka", 5)) - { - ret = GLEW_EXT_cmyka; - continue; - } -#endif -#ifdef GL_EXT_color_subtable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_subtable", 14)) - { - ret = GLEW_EXT_color_subtable; - continue; - } -#endif -#ifdef GL_EXT_compiled_vertex_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compiled_vertex_array", 21)) - { - ret = GLEW_EXT_compiled_vertex_array; - continue; - } -#endif -#ifdef GL_EXT_convolution - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution", 11)) - { - ret = GLEW_EXT_convolution; - continue; - } -#endif -#ifdef GL_EXT_coordinate_frame - if (_glewStrSame3(&pos, &len, (const GLubyte*)"coordinate_frame", 16)) - { - ret = GLEW_EXT_coordinate_frame; - continue; - } -#endif -#ifdef GL_EXT_copy_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_texture", 12)) - { - ret = GLEW_EXT_copy_texture; - continue; - } -#endif -#ifdef GL_EXT_cull_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) - { - ret = GLEW_EXT_cull_vertex; - continue; - } -#endif -#ifdef GL_EXT_debug_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_marker", 12)) - { - ret = GLEW_EXT_debug_marker; - continue; - } -#endif -#ifdef GL_EXT_depth_bounds_test - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_bounds_test", 17)) - { - ret = GLEW_EXT_depth_bounds_test; - continue; - } -#endif -#ifdef GL_EXT_direct_state_access - if (_glewStrSame3(&pos, &len, (const GLubyte*)"direct_state_access", 19)) - { - ret = GLEW_EXT_direct_state_access; - continue; - } -#endif -#ifdef GL_EXT_draw_buffers2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers2", 13)) - { - ret = GLEW_EXT_draw_buffers2; - continue; - } -#endif -#ifdef GL_EXT_draw_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) - { - ret = GLEW_EXT_draw_instanced; - continue; - } -#endif -#ifdef GL_EXT_draw_range_elements - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_range_elements", 19)) - { - ret = GLEW_EXT_draw_range_elements; - continue; - } -#endif -#ifdef GL_EXT_fog_coord - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_coord", 9)) - { - ret = GLEW_EXT_fog_coord; - continue; - } -#endif -#ifdef GL_EXT_fragment_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_lighting", 17)) - { - ret = GLEW_EXT_fragment_lighting; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_blit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) - { - ret = GLEW_EXT_framebuffer_blit; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) - { - ret = GLEW_EXT_framebuffer_multisample; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_blit_scaled", 35)) - { - ret = GLEW_EXT_framebuffer_multisample_blit_scaled; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) - { - ret = GLEW_EXT_framebuffer_object; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef GL_EXT_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_EXT_geometry_shader4; - continue; - } -#endif -#ifdef GL_EXT_gpu_program_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_parameters", 22)) - { - ret = GLEW_EXT_gpu_program_parameters; - continue; - } -#endif -#ifdef GL_EXT_gpu_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader4", 11)) - { - ret = GLEW_EXT_gpu_shader4; - continue; - } -#endif -#ifdef GL_EXT_histogram - if (_glewStrSame3(&pos, &len, (const GLubyte*)"histogram", 9)) - { - ret = GLEW_EXT_histogram; - continue; - } -#endif -#ifdef GL_EXT_index_array_formats - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_array_formats", 19)) - { - ret = GLEW_EXT_index_array_formats; - continue; - } -#endif -#ifdef GL_EXT_index_func - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_func", 10)) - { - ret = GLEW_EXT_index_func; - continue; - } -#endif -#ifdef GL_EXT_index_material - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_material", 14)) - { - ret = GLEW_EXT_index_material; - continue; - } -#endif -#ifdef GL_EXT_index_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_texture", 13)) - { - ret = GLEW_EXT_index_texture; - continue; - } -#endif -#ifdef GL_EXT_light_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_texture", 13)) - { - ret = GLEW_EXT_light_texture; - continue; - } -#endif -#ifdef GL_EXT_misc_attribute - if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_attribute", 14)) - { - ret = GLEW_EXT_misc_attribute; - continue; - } -#endif -#ifdef GL_EXT_multi_draw_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_arrays", 17)) - { - ret = GLEW_EXT_multi_draw_arrays; - continue; - } -#endif -#ifdef GL_EXT_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_EXT_multisample; - continue; - } -#endif -#ifdef GL_EXT_packed_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) - { - ret = GLEW_EXT_packed_depth_stencil; - continue; - } -#endif -#ifdef GL_EXT_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_float", 12)) - { - ret = GLEW_EXT_packed_float; - continue; - } -#endif -#ifdef GL_EXT_packed_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_pixels", 13)) - { - ret = GLEW_EXT_packed_pixels; - continue; - } -#endif -#ifdef GL_EXT_paletted_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"paletted_texture", 16)) - { - ret = GLEW_EXT_paletted_texture; - continue; - } -#endif -#ifdef GL_EXT_pixel_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) - { - ret = GLEW_EXT_pixel_buffer_object; - continue; - } -#endif -#ifdef GL_EXT_pixel_transform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform", 15)) - { - ret = GLEW_EXT_pixel_transform; - continue; - } -#endif -#ifdef GL_EXT_pixel_transform_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform_color_table", 27)) - { - ret = GLEW_EXT_pixel_transform_color_table; - continue; - } -#endif -#ifdef GL_EXT_point_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) - { - ret = GLEW_EXT_point_parameters; - continue; - } -#endif -#ifdef GL_EXT_polygon_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"polygon_offset", 14)) - { - ret = GLEW_EXT_polygon_offset; - continue; - } -#endif -#ifdef GL_EXT_provoking_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) - { - ret = GLEW_EXT_provoking_vertex; - continue; - } -#endif -#ifdef GL_EXT_rescale_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rescale_normal", 14)) - { - ret = GLEW_EXT_rescale_normal; - continue; - } -#endif -#ifdef GL_EXT_scene_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) - { - ret = GLEW_EXT_scene_marker; - continue; - } -#endif -#ifdef GL_EXT_secondary_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"secondary_color", 15)) - { - ret = GLEW_EXT_secondary_color; - continue; - } -#endif -#ifdef GL_EXT_separate_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) - { - ret = GLEW_EXT_separate_shader_objects; - continue; - } -#endif -#ifdef GL_EXT_separate_specular_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_specular_color", 23)) - { - ret = GLEW_EXT_separate_specular_color; - continue; - } -#endif -#ifdef GL_EXT_shader_image_load_store - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) - { - ret = GLEW_EXT_shader_image_load_store; - continue; - } -#endif -#ifdef GL_EXT_shadow_funcs - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_funcs", 12)) - { - ret = GLEW_EXT_shadow_funcs; - continue; - } -#endif -#ifdef GL_EXT_shared_texture_palette - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_texture_palette", 22)) - { - ret = GLEW_EXT_shared_texture_palette; - continue; - } -#endif -#ifdef GL_EXT_stencil_clear_tag - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_clear_tag", 17)) - { - ret = GLEW_EXT_stencil_clear_tag; - continue; - } -#endif -#ifdef GL_EXT_stencil_two_side - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_two_side", 16)) - { - ret = GLEW_EXT_stencil_two_side; - continue; - } -#endif -#ifdef GL_EXT_stencil_wrap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_wrap", 12)) - { - ret = GLEW_EXT_stencil_wrap; - continue; - } -#endif -#ifdef GL_EXT_subtexture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"subtexture", 10)) - { - ret = GLEW_EXT_subtexture; - continue; - } -#endif -#ifdef GL_EXT_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture", 7)) - { - ret = GLEW_EXT_texture; - continue; - } -#endif -#ifdef GL_EXT_texture3D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture3D", 9)) - { - ret = GLEW_EXT_texture3D; - continue; - } -#endif -#ifdef GL_EXT_texture_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_array", 13)) - { - ret = GLEW_EXT_texture_array; - continue; - } -#endif -#ifdef GL_EXT_texture_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) - { - ret = GLEW_EXT_texture_buffer_object; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_dxt1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) - { - ret = GLEW_EXT_texture_compression_dxt1; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_latc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_latc", 24)) - { - ret = GLEW_EXT_texture_compression_latc; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_rgtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) - { - ret = GLEW_EXT_texture_compression_rgtc; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_s3tc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_s3tc", 24)) - { - ret = GLEW_EXT_texture_compression_s3tc; - continue; - } -#endif -#ifdef GL_EXT_texture_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) - { - ret = GLEW_EXT_texture_cube_map; - continue; - } -#endif -#ifdef GL_EXT_texture_edge_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) - { - ret = GLEW_EXT_texture_edge_clamp; - continue; - } -#endif -#ifdef GL_EXT_texture_env - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env", 11)) - { - ret = GLEW_EXT_texture_env; - continue; - } -#endif -#ifdef GL_EXT_texture_env_add - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) - { - ret = GLEW_EXT_texture_env_add; - continue; - } -#endif -#ifdef GL_EXT_texture_env_combine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) - { - ret = GLEW_EXT_texture_env_combine; - continue; - } -#endif -#ifdef GL_EXT_texture_env_dot3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) - { - ret = GLEW_EXT_texture_env_dot3; - continue; - } -#endif -#ifdef GL_EXT_texture_filter_anisotropic - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter_anisotropic", 26)) - { - ret = GLEW_EXT_texture_filter_anisotropic; - continue; - } -#endif -#ifdef GL_EXT_texture_integer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_integer", 15)) - { - ret = GLEW_EXT_texture_integer; - continue; - } -#endif -#ifdef GL_EXT_texture_lod_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) - { - ret = GLEW_EXT_texture_lod_bias; - continue; - } -#endif -#ifdef GL_EXT_texture_mirror_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp", 20)) - { - ret = GLEW_EXT_texture_mirror_clamp; - continue; - } -#endif -#ifdef GL_EXT_texture_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_object", 14)) - { - ret = GLEW_EXT_texture_object; - continue; - } -#endif -#ifdef GL_EXT_texture_perturb_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_perturb_normal", 22)) - { - ret = GLEW_EXT_texture_perturb_normal; - continue; - } -#endif -#ifdef GL_EXT_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_EXT_texture_rectangle; - continue; - } -#endif -#ifdef GL_EXT_texture_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB", 12)) - { - ret = GLEW_EXT_texture_sRGB; - continue; - } -#endif -#ifdef GL_EXT_texture_sRGB_decode - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB_decode", 19)) - { - ret = GLEW_EXT_texture_sRGB_decode; - continue; - } -#endif -#ifdef GL_EXT_texture_shared_exponent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shared_exponent", 23)) - { - ret = GLEW_EXT_texture_shared_exponent; - continue; - } -#endif -#ifdef GL_EXT_texture_snorm - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_snorm", 13)) - { - ret = GLEW_EXT_texture_snorm; - continue; - } -#endif -#ifdef GL_EXT_texture_swizzle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) - { - ret = GLEW_EXT_texture_swizzle; - continue; - } -#endif -#ifdef GL_EXT_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_EXT_timer_query; - continue; - } -#endif -#ifdef GL_EXT_transform_feedback - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) - { - ret = GLEW_EXT_transform_feedback; - continue; - } -#endif -#ifdef GL_EXT_vertex_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array", 12)) - { - ret = GLEW_EXT_vertex_array; - continue; - } -#endif -#ifdef GL_EXT_vertex_array_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) - { - ret = GLEW_EXT_vertex_array_bgra; - continue; - } -#endif -#ifdef GL_EXT_vertex_attrib_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) - { - ret = GLEW_EXT_vertex_attrib_64bit; - continue; - } -#endif -#ifdef GL_EXT_vertex_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) - { - ret = GLEW_EXT_vertex_shader; - continue; - } -#endif -#ifdef GL_EXT_vertex_weighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_weighting", 16)) - { - ret = GLEW_EXT_vertex_weighting; - continue; - } -#endif -#ifdef GL_EXT_x11_sync_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"x11_sync_object", 15)) - { - ret = GLEW_EXT_x11_sync_object; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"GREMEDY_", 8)) - { -#ifdef GL_GREMEDY_frame_terminator - if (_glewStrSame3(&pos, &len, (const GLubyte*)"frame_terminator", 16)) - { - ret = GLEW_GREMEDY_frame_terminator; - continue; - } -#endif -#ifdef GL_GREMEDY_string_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"string_marker", 13)) - { - ret = GLEW_GREMEDY_string_marker; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"HP_", 3)) - { -#ifdef GL_HP_convolution_border_modes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) - { - ret = GLEW_HP_convolution_border_modes; - continue; - } -#endif -#ifdef GL_HP_image_transform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_transform", 15)) - { - ret = GLEW_HP_image_transform; - continue; - } -#endif -#ifdef GL_HP_occlusion_test - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_test", 14)) - { - ret = GLEW_HP_occlusion_test; - continue; - } -#endif -#ifdef GL_HP_texture_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lighting", 16)) - { - ret = GLEW_HP_texture_lighting; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"IBM_", 4)) - { -#ifdef GL_IBM_cull_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) - { - ret = GLEW_IBM_cull_vertex; - continue; - } -#endif -#ifdef GL_IBM_multimode_draw_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multimode_draw_arrays", 21)) - { - ret = GLEW_IBM_multimode_draw_arrays; - continue; - } -#endif -#ifdef GL_IBM_rasterpos_clip - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rasterpos_clip", 14)) - { - ret = GLEW_IBM_rasterpos_clip; - continue; - } -#endif -#ifdef GL_IBM_static_data - if (_glewStrSame3(&pos, &len, (const GLubyte*)"static_data", 11)) - { - ret = GLEW_IBM_static_data; - continue; - } -#endif -#ifdef GL_IBM_texture_mirrored_repeat - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) - { - ret = GLEW_IBM_texture_mirrored_repeat; - continue; - } -#endif -#ifdef GL_IBM_vertex_array_lists - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_lists", 18)) - { - ret = GLEW_IBM_vertex_array_lists; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INGR_", 5)) - { -#ifdef GL_INGR_color_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_clamp", 11)) - { - ret = GLEW_INGR_color_clamp; - continue; - } -#endif -#ifdef GL_INGR_interlace_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace_read", 14)) - { - ret = GLEW_INGR_interlace_read; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) - { -#ifdef GL_INTEL_map_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_texture", 11)) - { - ret = GLEW_INTEL_map_texture; - continue; - } -#endif -#ifdef GL_INTEL_parallel_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) - { - ret = GLEW_INTEL_parallel_arrays; - continue; - } -#endif -#ifdef GL_INTEL_texture_scissor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scissor", 15)) - { - ret = GLEW_INTEL_texture_scissor; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"KHR_", 4)) - { -#ifdef GL_KHR_debug - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug", 5)) - { - ret = GLEW_KHR_debug; - continue; - } -#endif -#ifdef GL_KHR_texture_compression_astc_ldr - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_astc_ldr", 28)) - { - ret = GLEW_KHR_texture_compression_astc_ldr; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4)) - { -#ifdef GL_KTX_buffer_region - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) - { - ret = GLEW_KTX_buffer_region; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESAX_", 6)) - { -#ifdef GL_MESAX_texture_stack - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stack", 13)) - { - ret = GLEW_MESAX_texture_stack; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) - { -#ifdef GL_MESA_pack_invert - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_invert", 11)) - { - ret = GLEW_MESA_pack_invert; - continue; - } -#endif -#ifdef GL_MESA_resize_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resize_buffers", 14)) - { - ret = GLEW_MESA_resize_buffers; - continue; - } -#endif -#ifdef GL_MESA_window_pos - if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) - { - ret = GLEW_MESA_window_pos; - continue; - } -#endif -#ifdef GL_MESA_ycbcr_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_texture", 13)) - { - ret = GLEW_MESA_ycbcr_texture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NVX_", 4)) - { -#ifdef GL_NVX_conditional_render - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) - { - ret = GLEW_NVX_conditional_render; - continue; - } -#endif -#ifdef GL_NVX_gpu_memory_info - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_memory_info", 15)) - { - ret = GLEW_NVX_gpu_memory_info; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef GL_NV_bindless_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_multi_draw_indirect", 28)) - { - ret = GLEW_NV_bindless_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_NV_bindless_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) - { - ret = GLEW_NV_bindless_texture; - continue; - } -#endif -#ifdef GL_NV_blend_equation_advanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced", 23)) - { - ret = GLEW_NV_blend_equation_advanced; - continue; - } -#endif -#ifdef GL_NV_blend_equation_advanced_coherent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced_coherent", 32)) - { - ret = GLEW_NV_blend_equation_advanced_coherent; - continue; - } -#endif -#ifdef GL_NV_blend_square - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) - { - ret = GLEW_NV_blend_square; - continue; - } -#endif -#ifdef GL_NV_compute_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_program5", 16)) - { - ret = GLEW_NV_compute_program5; - continue; - } -#endif -#ifdef GL_NV_conditional_render - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) - { - ret = GLEW_NV_conditional_render; - continue; - } -#endif -#ifdef GL_NV_copy_depth_to_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19)) - { - ret = GLEW_NV_copy_depth_to_color; - continue; - } -#endif -#ifdef GL_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLEW_NV_copy_image; - continue; - } -#endif -#ifdef GL_NV_deep_texture3D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"deep_texture3D", 14)) - { - ret = GLEW_NV_deep_texture3D; - continue; - } -#endif -#ifdef GL_NV_depth_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) - { - ret = GLEW_NV_depth_buffer_float; - continue; - } -#endif -#ifdef GL_NV_depth_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) - { - ret = GLEW_NV_depth_clamp; - continue; - } -#endif -#ifdef GL_NV_depth_range_unclamped - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_range_unclamped", 21)) - { - ret = GLEW_NV_depth_range_unclamped; - continue; - } -#endif -#ifdef GL_NV_draw_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_texture", 12)) - { - ret = GLEW_NV_draw_texture; - continue; - } -#endif -#ifdef GL_NV_evaluators - if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) - { - ret = GLEW_NV_evaluators; - continue; - } -#endif -#ifdef GL_NV_explicit_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_multisample", 20)) - { - ret = GLEW_NV_explicit_multisample; - continue; - } -#endif -#ifdef GL_NV_fence - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) - { - ret = GLEW_NV_fence; - continue; - } -#endif -#ifdef GL_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = GLEW_NV_float_buffer; - continue; - } -#endif -#ifdef GL_NV_fog_distance - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_distance", 12)) - { - ret = GLEW_NV_fog_distance; - continue; - } -#endif -#ifdef GL_NV_fragment_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) - { - ret = GLEW_NV_fragment_program; - continue; - } -#endif -#ifdef GL_NV_fragment_program2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program2", 17)) - { - ret = GLEW_NV_fragment_program2; - continue; - } -#endif -#ifdef GL_NV_fragment_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program4", 17)) - { - ret = GLEW_NV_fragment_program4; - continue; - } -#endif -#ifdef GL_NV_fragment_program_option - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_option", 23)) - { - ret = GLEW_NV_fragment_program_option; - continue; - } -#endif -#ifdef GL_NV_framebuffer_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_coverage", 32)) - { - ret = GLEW_NV_framebuffer_multisample_coverage; - continue; - } -#endif -#ifdef GL_NV_geometry_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_program4", 17)) - { - ret = GLEW_NV_geometry_program4; - continue; - } -#endif -#ifdef GL_NV_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_NV_geometry_shader4; - continue; - } -#endif -#ifdef GL_NV_gpu_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12)) - { - ret = GLEW_NV_gpu_program4; - continue; - } -#endif -#ifdef GL_NV_gpu_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5", 12)) - { - ret = GLEW_NV_gpu_program5; - continue; - } -#endif -#ifdef GL_NV_gpu_program5_mem_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5_mem_extended", 25)) - { - ret = GLEW_NV_gpu_program5_mem_extended; - continue; - } -#endif -#ifdef GL_NV_gpu_program_fp64 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_fp64", 16)) - { - ret = GLEW_NV_gpu_program_fp64; - continue; - } -#endif -#ifdef GL_NV_gpu_shader5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) - { - ret = GLEW_NV_gpu_shader5; - continue; - } -#endif -#ifdef GL_NV_half_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float", 10)) - { - ret = GLEW_NV_half_float; - continue; - } -#endif -#ifdef GL_NV_light_max_exponent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_max_exponent", 18)) - { - ret = GLEW_NV_light_max_exponent; - continue; - } -#endif -#ifdef GL_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = GLEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef GL_NV_multisample_filter_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_filter_hint", 23)) - { - ret = GLEW_NV_multisample_filter_hint; - continue; - } -#endif -#ifdef GL_NV_occlusion_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) - { - ret = GLEW_NV_occlusion_query; - continue; - } -#endif -#ifdef GL_NV_packed_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) - { - ret = GLEW_NV_packed_depth_stencil; - continue; - } -#endif -#ifdef GL_NV_parameter_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object", 23)) - { - ret = GLEW_NV_parameter_buffer_object; - continue; - } -#endif -#ifdef GL_NV_parameter_buffer_object2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object2", 24)) - { - ret = GLEW_NV_parameter_buffer_object2; - continue; - } -#endif -#ifdef GL_NV_path_rendering - if (_glewStrSame3(&pos, &len, (const GLubyte*)"path_rendering", 14)) - { - ret = GLEW_NV_path_rendering; - continue; - } -#endif -#ifdef GL_NV_pixel_data_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_data_range", 16)) - { - ret = GLEW_NV_pixel_data_range; - continue; - } -#endif -#ifdef GL_NV_point_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) - { - ret = GLEW_NV_point_sprite; - continue; - } -#endif -#ifdef GL_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = GLEW_NV_present_video; - continue; - } -#endif -#ifdef GL_NV_primitive_restart - if (_glewStrSame3(&pos, &len, (const GLubyte*)"primitive_restart", 17)) - { - ret = GLEW_NV_primitive_restart; - continue; - } -#endif -#ifdef GL_NV_register_combiners - if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners", 18)) - { - ret = GLEW_NV_register_combiners; - continue; - } -#endif -#ifdef GL_NV_register_combiners2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners2", 19)) - { - ret = GLEW_NV_register_combiners2; - continue; - } -#endif -#ifdef GL_NV_shader_atomic_counters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) - { - ret = GLEW_NV_shader_atomic_counters; - continue; - } -#endif -#ifdef GL_NV_shader_atomic_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_float", 19)) - { - ret = GLEW_NV_shader_atomic_float; - continue; - } -#endif -#ifdef GL_NV_shader_buffer_load - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_buffer_load", 18)) - { - ret = GLEW_NV_shader_buffer_load; - continue; - } -#endif -#ifdef GL_NV_shader_storage_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) - { - ret = GLEW_NV_shader_storage_buffer_object; - continue; - } -#endif -#ifdef GL_NV_tessellation_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_program5", 21)) - { - ret = GLEW_NV_tessellation_program5; - continue; - } -#endif -#ifdef GL_NV_texgen_emboss - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_emboss", 13)) - { - ret = GLEW_NV_texgen_emboss; - continue; - } -#endif -#ifdef GL_NV_texgen_reflection - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_reflection", 17)) - { - ret = GLEW_NV_texgen_reflection; - continue; - } -#endif -#ifdef GL_NV_texture_barrier - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_barrier", 15)) - { - ret = GLEW_NV_texture_barrier; - continue; - } -#endif -#ifdef GL_NV_texture_compression_vtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_vtc", 23)) - { - ret = GLEW_NV_texture_compression_vtc; - continue; - } -#endif -#ifdef GL_NV_texture_env_combine4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine4", 20)) - { - ret = GLEW_NV_texture_env_combine4; - continue; - } -#endif -#ifdef GL_NV_texture_expand_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_expand_normal", 21)) - { - ret = GLEW_NV_texture_expand_normal; - continue; - } -#endif -#ifdef GL_NV_texture_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) - { - ret = GLEW_NV_texture_multisample; - continue; - } -#endif -#ifdef GL_NV_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_NV_texture_rectangle; - continue; - } -#endif -#ifdef GL_NV_texture_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader", 14)) - { - ret = GLEW_NV_texture_shader; - continue; - } -#endif -#ifdef GL_NV_texture_shader2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader2", 15)) - { - ret = GLEW_NV_texture_shader2; - continue; - } -#endif -#ifdef GL_NV_texture_shader3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader3", 15)) - { - ret = GLEW_NV_texture_shader3; - continue; - } -#endif -#ifdef GL_NV_transform_feedback - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) - { - ret = GLEW_NV_transform_feedback; - continue; - } -#endif -#ifdef GL_NV_transform_feedback2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) - { - ret = GLEW_NV_transform_feedback2; - continue; - } -#endif -#ifdef GL_NV_vdpau_interop - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vdpau_interop", 13)) - { - ret = GLEW_NV_vdpau_interop; - continue; - } -#endif -#ifdef GL_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef GL_NV_vertex_array_range2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range2", 19)) - { - ret = GLEW_NV_vertex_array_range2; - continue; - } -#endif -#ifdef GL_NV_vertex_attrib_integer_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_integer_64bit", 27)) - { - ret = GLEW_NV_vertex_attrib_integer_64bit; - continue; - } -#endif -#ifdef GL_NV_vertex_buffer_unified_memory - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_unified_memory", 28)) - { - ret = GLEW_NV_vertex_buffer_unified_memory; - continue; - } -#endif -#ifdef GL_NV_vertex_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) - { - ret = GLEW_NV_vertex_program; - continue; - } -#endif -#ifdef GL_NV_vertex_program1_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program1_1", 17)) - { - ret = GLEW_NV_vertex_program1_1; - continue; - } -#endif -#ifdef GL_NV_vertex_program2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2", 15)) - { - ret = GLEW_NV_vertex_program2; - continue; - } -#endif -#ifdef GL_NV_vertex_program2_option - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2_option", 22)) - { - ret = GLEW_NV_vertex_program2_option; - continue; - } -#endif -#ifdef GL_NV_vertex_program3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program3", 15)) - { - ret = GLEW_NV_vertex_program3; - continue; - } -#endif -#ifdef GL_NV_vertex_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program4", 15)) - { - ret = GLEW_NV_vertex_program4; - continue; - } -#endif -#ifdef GL_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = GLEW_NV_video_capture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4)) - { -#ifdef GL_OES_byte_coordinates - if (_glewStrSame3(&pos, &len, (const GLubyte*)"byte_coordinates", 16)) - { - ret = GLEW_OES_byte_coordinates; - continue; - } -#endif -#ifdef GL_OES_compressed_paletted_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_paletted_texture", 27)) - { - ret = GLEW_OES_compressed_paletted_texture; - continue; - } -#endif -#ifdef GL_OES_read_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_format", 11)) - { - ret = GLEW_OES_read_format; - continue; - } -#endif -#ifdef GL_OES_single_precision - if (_glewStrSame3(&pos, &len, (const GLubyte*)"single_precision", 16)) - { - ret = GLEW_OES_single_precision; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef GL_OML_interlace - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) - { - ret = GLEW_OML_interlace; - continue; - } -#endif -#ifdef GL_OML_resample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) - { - ret = GLEW_OML_resample; - continue; - } -#endif -#ifdef GL_OML_subsample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"subsample", 9)) - { - ret = GLEW_OML_subsample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"PGI_", 4)) - { -#ifdef GL_PGI_misc_hints - if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_hints", 10)) - { - ret = GLEW_PGI_misc_hints; - continue; - } -#endif -#ifdef GL_PGI_vertex_hints - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_hints", 12)) - { - ret = GLEW_PGI_vertex_hints; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"REGAL_", 6)) - { -#ifdef GL_REGAL_ES1_0_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_0_compatibility", 19)) - { - ret = GLEW_REGAL_ES1_0_compatibility; - continue; - } -#endif -#ifdef GL_REGAL_ES1_1_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_1_compatibility", 19)) - { - ret = GLEW_REGAL_ES1_1_compatibility; - continue; - } -#endif -#ifdef GL_REGAL_enable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"enable", 6)) - { - ret = GLEW_REGAL_enable; - continue; - } -#endif -#ifdef GL_REGAL_error_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"error_string", 12)) - { - ret = GLEW_REGAL_error_string; - continue; - } -#endif -#ifdef GL_REGAL_extension_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extension_query", 15)) - { - ret = GLEW_REGAL_extension_query; - continue; - } -#endif -#ifdef GL_REGAL_log - if (_glewStrSame3(&pos, &len, (const GLubyte*)"log", 3)) - { - ret = GLEW_REGAL_log; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"REND_", 5)) - { -#ifdef GL_REND_screen_coordinates - if (_glewStrSame3(&pos, &len, (const GLubyte*)"screen_coordinates", 18)) - { - ret = GLEW_REND_screen_coordinates; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"S3_", 3)) - { -#ifdef GL_S3_s3tc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"s3tc", 4)) - { - ret = GLEW_S3_s3tc; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) - { -#ifdef GL_SGIS_color_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) - { - ret = GLEW_SGIS_color_range; - continue; - } -#endif -#ifdef GL_SGIS_detail_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"detail_texture", 14)) - { - ret = GLEW_SGIS_detail_texture; - continue; - } -#endif -#ifdef GL_SGIS_fog_function - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_function", 12)) - { - ret = GLEW_SGIS_fog_function; - continue; - } -#endif -#ifdef GL_SGIS_generate_mipmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"generate_mipmap", 15)) - { - ret = GLEW_SGIS_generate_mipmap; - continue; - } -#endif -#ifdef GL_SGIS_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_SGIS_multisample; - continue; - } -#endif -#ifdef GL_SGIS_pixel_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) - { - ret = GLEW_SGIS_pixel_texture; - continue; - } -#endif -#ifdef GL_SGIS_point_line_texgen - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_line_texgen", 17)) - { - ret = GLEW_SGIS_point_line_texgen; - continue; - } -#endif -#ifdef GL_SGIS_sharpen_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sharpen_texture", 15)) - { - ret = GLEW_SGIS_sharpen_texture; - continue; - } -#endif -#ifdef GL_SGIS_texture4D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture4D", 9)) - { - ret = GLEW_SGIS_texture4D; - continue; - } -#endif -#ifdef GL_SGIS_texture_border_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) - { - ret = GLEW_SGIS_texture_border_clamp; - continue; - } -#endif -#ifdef GL_SGIS_texture_edge_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) - { - ret = GLEW_SGIS_texture_edge_clamp; - continue; - } -#endif -#ifdef GL_SGIS_texture_filter4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter4", 15)) - { - ret = GLEW_SGIS_texture_filter4; - continue; - } -#endif -#ifdef GL_SGIS_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod", 11)) - { - ret = GLEW_SGIS_texture_lod; - continue; - } -#endif -#ifdef GL_SGIS_texture_select - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_select", 14)) - { - ret = GLEW_SGIS_texture_select; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) - { -#ifdef GL_SGIX_async - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async", 5)) - { - ret = GLEW_SGIX_async; - continue; - } -#endif -#ifdef GL_SGIX_async_histogram - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_histogram", 15)) - { - ret = GLEW_SGIX_async_histogram; - continue; - } -#endif -#ifdef GL_SGIX_async_pixel - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_pixel", 11)) - { - ret = GLEW_SGIX_async_pixel; - continue; - } -#endif -#ifdef GL_SGIX_blend_alpha_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_alpha_minmax", 18)) - { - ret = GLEW_SGIX_blend_alpha_minmax; - continue; - } -#endif -#ifdef GL_SGIX_clipmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clipmap", 7)) - { - ret = GLEW_SGIX_clipmap; - continue; - } -#endif -#ifdef GL_SGIX_convolution_accuracy - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_accuracy", 20)) - { - ret = GLEW_SGIX_convolution_accuracy; - continue; - } -#endif -#ifdef GL_SGIX_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_SGIX_depth_texture; - continue; - } -#endif -#ifdef GL_SGIX_flush_raster - if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_raster", 12)) - { - ret = GLEW_SGIX_flush_raster; - continue; - } -#endif -#ifdef GL_SGIX_fog_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_offset", 10)) - { - ret = GLEW_SGIX_fog_offset; - continue; - } -#endif -#ifdef GL_SGIX_fog_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_texture", 11)) - { - ret = GLEW_SGIX_fog_texture; - continue; - } -#endif -#ifdef GL_SGIX_fragment_specular_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_specular_lighting", 26)) - { - ret = GLEW_SGIX_fragment_specular_lighting; - continue; - } -#endif -#ifdef GL_SGIX_framezoom - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framezoom", 9)) - { - ret = GLEW_SGIX_framezoom; - continue; - } -#endif -#ifdef GL_SGIX_interlace - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) - { - ret = GLEW_SGIX_interlace; - continue; - } -#endif -#ifdef GL_SGIX_ir_instrument1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ir_instrument1", 14)) - { - ret = GLEW_SGIX_ir_instrument1; - continue; - } -#endif -#ifdef GL_SGIX_list_priority - if (_glewStrSame3(&pos, &len, (const GLubyte*)"list_priority", 13)) - { - ret = GLEW_SGIX_list_priority; - continue; - } -#endif -#ifdef GL_SGIX_pixel_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) - { - ret = GLEW_SGIX_pixel_texture; - continue; - } -#endif -#ifdef GL_SGIX_pixel_texture_bits - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture_bits", 18)) - { - ret = GLEW_SGIX_pixel_texture_bits; - continue; - } -#endif -#ifdef GL_SGIX_reference_plane - if (_glewStrSame3(&pos, &len, (const GLubyte*)"reference_plane", 15)) - { - ret = GLEW_SGIX_reference_plane; - continue; - } -#endif -#ifdef GL_SGIX_resample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) - { - ret = GLEW_SGIX_resample; - continue; - } -#endif -#ifdef GL_SGIX_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) - { - ret = GLEW_SGIX_shadow; - continue; - } -#endif -#ifdef GL_SGIX_shadow_ambient - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) - { - ret = GLEW_SGIX_shadow_ambient; - continue; - } -#endif -#ifdef GL_SGIX_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sprite", 6)) - { - ret = GLEW_SGIX_sprite; - continue; - } -#endif -#ifdef GL_SGIX_tag_sample_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tag_sample_buffer", 17)) - { - ret = GLEW_SGIX_tag_sample_buffer; - continue; - } -#endif -#ifdef GL_SGIX_texture_add_env - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_add_env", 15)) - { - ret = GLEW_SGIX_texture_add_env; - continue; - } -#endif -#ifdef GL_SGIX_texture_coordinate_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_coordinate_clamp", 24)) - { - ret = GLEW_SGIX_texture_coordinate_clamp; - continue; - } -#endif -#ifdef GL_SGIX_texture_lod_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) - { - ret = GLEW_SGIX_texture_lod_bias; - continue; - } -#endif -#ifdef GL_SGIX_texture_multi_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multi_buffer", 20)) - { - ret = GLEW_SGIX_texture_multi_buffer; - continue; - } -#endif -#ifdef GL_SGIX_texture_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) - { - ret = GLEW_SGIX_texture_range; - continue; - } -#endif -#ifdef GL_SGIX_texture_scale_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scale_bias", 18)) - { - ret = GLEW_SGIX_texture_scale_bias; - continue; - } -#endif -#ifdef GL_SGIX_vertex_preclip - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip", 14)) - { - ret = GLEW_SGIX_vertex_preclip; - continue; - } -#endif -#ifdef GL_SGIX_vertex_preclip_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip_hint", 19)) - { - ret = GLEW_SGIX_vertex_preclip_hint; - continue; - } -#endif -#ifdef GL_SGIX_ycrcb - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycrcb", 5)) - { - ret = GLEW_SGIX_ycrcb; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) - { -#ifdef GL_SGI_color_matrix - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_matrix", 12)) - { - ret = GLEW_SGI_color_matrix; - continue; - } -#endif -#ifdef GL_SGI_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_table", 11)) - { - ret = GLEW_SGI_color_table; - continue; - } -#endif -#ifdef GL_SGI_texture_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_color_table", 19)) - { - ret = GLEW_SGI_texture_color_table; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUNX_", 5)) - { -#ifdef GL_SUNX_constant_data - if (_glewStrSame3(&pos, &len, (const GLubyte*)"constant_data", 13)) - { - ret = GLEW_SUNX_constant_data; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) - { -#ifdef GL_SUN_convolution_border_modes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) - { - ret = GLEW_SUN_convolution_border_modes; - continue; - } -#endif -#ifdef GL_SUN_global_alpha - if (_glewStrSame3(&pos, &len, (const GLubyte*)"global_alpha", 12)) - { - ret = GLEW_SUN_global_alpha; - continue; - } -#endif -#ifdef GL_SUN_mesh_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"mesh_array", 10)) - { - ret = GLEW_SUN_mesh_array; - continue; - } -#endif -#ifdef GL_SUN_read_video_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_video_pixels", 17)) - { - ret = GLEW_SUN_read_video_pixels; - continue; - } -#endif -#ifdef GL_SUN_slice_accum - if (_glewStrSame3(&pos, &len, (const GLubyte*)"slice_accum", 11)) - { - ret = GLEW_SUN_slice_accum; - continue; - } -#endif -#ifdef GL_SUN_triangle_list - if (_glewStrSame3(&pos, &len, (const GLubyte*)"triangle_list", 13)) - { - ret = GLEW_SUN_triangle_list; - continue; - } -#endif -#ifdef GL_SUN_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex", 6)) - { - ret = GLEW_SUN_vertex; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"WIN_", 4)) - { -#ifdef GL_WIN_phong_shading - if (_glewStrSame3(&pos, &len, (const GLubyte*)"phong_shading", 13)) - { - ret = GLEW_WIN_phong_shading; - continue; - } -#endif -#ifdef GL_WIN_specular_fog - if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_fog", 12)) - { - ret = GLEW_WIN_specular_fog; - continue; - } -#endif -#ifdef GL_WIN_swap_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_hint", 9)) - { - ret = GLEW_WIN_swap_hint; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#if defined(_WIN32) - -#if defined(GLEW_MX) -GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef WGL_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_3DFX_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DL_", 4)) - { -#ifdef WGL_3DL_stereo_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_control", 14)) - { - ret = WGLEW_3DL_stereo_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef WGL_AMD_gpu_association - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) - { - ret = WGLEW_AMD_gpu_association; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef WGL_ARB_buffer_region - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) - { - ret = WGLEW_ARB_buffer_region; - continue; - } -#endif -#ifdef WGL_ARB_create_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) - { - ret = WGLEW_ARB_create_context; - continue; - } -#endif -#ifdef WGL_ARB_create_context_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) - { - ret = WGLEW_ARB_create_context_profile; - continue; - } -#endif -#ifdef WGL_ARB_create_context_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) - { - ret = WGLEW_ARB_create_context_robustness; - continue; - } -#endif -#ifdef WGL_ARB_extensions_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) - { - ret = WGLEW_ARB_extensions_string; - continue; - } -#endif -#ifdef WGL_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = WGLEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef WGL_ARB_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = WGLEW_ARB_make_current_read; - continue; - } -#endif -#ifdef WGL_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_ARB_multisample; - continue; - } -#endif -#ifdef WGL_ARB_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = WGLEW_ARB_pbuffer; - continue; - } -#endif -#ifdef WGL_ARB_pixel_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) - { - ret = WGLEW_ARB_pixel_format; - continue; - } -#endif -#ifdef WGL_ARB_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = WGLEW_ARB_pixel_format_float; - continue; - } -#endif -#ifdef WGL_ARB_render_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) - { - ret = WGLEW_ARB_render_texture; - continue; - } -#endif -#ifdef WGL_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = WGLEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef WGL_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = WGLEW_ARB_robustness_share_group_isolation; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef WGL_ATI_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = WGLEW_ATI_pixel_format_float; - continue; - } -#endif -#ifdef WGL_ATI_render_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) - { - ret = WGLEW_ATI_render_texture_rectangle; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef WGL_EXT_create_context_es2_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) - { - ret = WGLEW_EXT_create_context_es2_profile; - continue; - } -#endif -#ifdef WGL_EXT_create_context_es_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) - { - ret = WGLEW_EXT_create_context_es_profile; - continue; - } -#endif -#ifdef WGL_EXT_depth_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_float", 11)) - { - ret = WGLEW_EXT_depth_float; - continue; - } -#endif -#ifdef WGL_EXT_display_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"display_color_table", 19)) - { - ret = WGLEW_EXT_display_color_table; - continue; - } -#endif -#ifdef WGL_EXT_extensions_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) - { - ret = WGLEW_EXT_extensions_string; - continue; - } -#endif -#ifdef WGL_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = WGLEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef WGL_EXT_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = WGLEW_EXT_make_current_read; - continue; - } -#endif -#ifdef WGL_EXT_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_EXT_multisample; - continue; - } -#endif -#ifdef WGL_EXT_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = WGLEW_EXT_pbuffer; - continue; - } -#endif -#ifdef WGL_EXT_pixel_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) - { - ret = WGLEW_EXT_pixel_format; - continue; - } -#endif -#ifdef WGL_EXT_pixel_format_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_packed_float", 25)) - { - ret = WGLEW_EXT_pixel_format_packed_float; - continue; - } -#endif -#ifdef WGL_EXT_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = WGLEW_EXT_swap_control; - continue; - } -#endif -#ifdef WGL_EXT_swap_control_tear - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) - { - ret = WGLEW_EXT_swap_control_tear; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"I3D_", 4)) - { -#ifdef WGL_I3D_digital_video_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"digital_video_control", 21)) - { - ret = WGLEW_I3D_digital_video_control; - continue; - } -#endif -#ifdef WGL_I3D_gamma - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gamma", 5)) - { - ret = WGLEW_I3D_gamma; - continue; - } -#endif -#ifdef WGL_I3D_genlock - if (_glewStrSame3(&pos, &len, (const GLubyte*)"genlock", 7)) - { - ret = WGLEW_I3D_genlock; - continue; - } -#endif -#ifdef WGL_I3D_image_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_buffer", 12)) - { - ret = WGLEW_I3D_image_buffer; - continue; - } -#endif -#ifdef WGL_I3D_swap_frame_lock - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_lock", 15)) - { - ret = WGLEW_I3D_swap_frame_lock; - continue; - } -#endif -#ifdef WGL_I3D_swap_frame_usage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_usage", 16)) - { - ret = WGLEW_I3D_swap_frame_usage; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef WGL_NV_DX_interop - if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop", 10)) - { - ret = WGLEW_NV_DX_interop; - continue; - } -#endif -#ifdef WGL_NV_DX_interop2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop2", 11)) - { - ret = WGLEW_NV_DX_interop2; - continue; - } -#endif -#ifdef WGL_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = WGLEW_NV_copy_image; - continue; - } -#endif -#ifdef WGL_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = WGLEW_NV_float_buffer; - continue; - } -#endif -#ifdef WGL_NV_gpu_affinity - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_affinity", 12)) - { - ret = WGLEW_NV_gpu_affinity; - continue; - } -#endif -#ifdef WGL_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = WGLEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef WGL_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = WGLEW_NV_present_video; - continue; - } -#endif -#ifdef WGL_NV_render_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_depth_texture", 20)) - { - ret = WGLEW_NV_render_depth_texture; - continue; - } -#endif -#ifdef WGL_NV_render_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) - { - ret = WGLEW_NV_render_texture_rectangle; - continue; - } -#endif -#ifdef WGL_NV_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = WGLEW_NV_swap_group; - continue; - } -#endif -#ifdef WGL_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = WGLEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef WGL_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = WGLEW_NV_video_capture; - continue; - } -#endif -#ifdef WGL_NV_video_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) - { - ret = WGLEW_NV_video_output; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef WGL_OML_sync_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) - { - ret = WGLEW_OML_sync_control; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - -#if defined(GLEW_MX) -GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) -#else -GLboolean glxewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) - { -#ifdef GLX_VERSION_1_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) - { - ret = GLXEW_VERSION_1_2; - continue; - } -#endif -#ifdef GLX_VERSION_1_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) - { - ret = GLXEW_VERSION_1_3; - continue; - } -#endif -#ifdef GLX_VERSION_1_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) - { - ret = GLXEW_VERSION_1_4; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef GLX_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_3DFX_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef GLX_AMD_gpu_association - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) - { - ret = GLXEW_AMD_gpu_association; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef GLX_ARB_create_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) - { - ret = GLXEW_ARB_create_context; - continue; - } -#endif -#ifdef GLX_ARB_create_context_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) - { - ret = GLXEW_ARB_create_context_profile; - continue; - } -#endif -#ifdef GLX_ARB_create_context_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) - { - ret = GLXEW_ARB_create_context_robustness; - continue; - } -#endif -#ifdef GLX_ARB_fbconfig_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) - { - ret = GLXEW_ARB_fbconfig_float; - continue; - } -#endif -#ifdef GLX_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLXEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef GLX_ARB_get_proc_address - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_proc_address", 16)) - { - ret = GLXEW_ARB_get_proc_address; - continue; - } -#endif -#ifdef GLX_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_ARB_multisample; - continue; - } -#endif -#ifdef GLX_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = GLXEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef GLX_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = GLXEW_ARB_robustness_share_group_isolation; - continue; - } -#endif -#ifdef GLX_ARB_vertex_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) - { - ret = GLXEW_ARB_vertex_buffer_object; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef GLX_ATI_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = GLXEW_ATI_pixel_format_float; - continue; - } -#endif -#ifdef GLX_ATI_render_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) - { - ret = GLXEW_ATI_render_texture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef GLX_EXT_buffer_age - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_age", 10)) - { - ret = GLXEW_EXT_buffer_age; - continue; - } -#endif -#ifdef GLX_EXT_create_context_es2_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) - { - ret = GLXEW_EXT_create_context_es2_profile; - continue; - } -#endif -#ifdef GLX_EXT_create_context_es_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) - { - ret = GLXEW_EXT_create_context_es_profile; - continue; - } -#endif -#ifdef GLX_EXT_fbconfig_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_packed_float", 21)) - { - ret = GLXEW_EXT_fbconfig_packed_float; - continue; - } -#endif -#ifdef GLX_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLXEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef GLX_EXT_import_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"import_context", 14)) - { - ret = GLXEW_EXT_import_context; - continue; - } -#endif -#ifdef GLX_EXT_scene_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) - { - ret = GLXEW_EXT_scene_marker; - continue; - } -#endif -#ifdef GLX_EXT_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_EXT_swap_control; - continue; - } -#endif -#ifdef GLX_EXT_swap_control_tear - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) - { - ret = GLXEW_EXT_swap_control_tear; - continue; - } -#endif -#ifdef GLX_EXT_texture_from_pixmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19)) - { - ret = GLXEW_EXT_texture_from_pixmap; - continue; - } -#endif -#ifdef GLX_EXT_visual_info - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_info", 11)) - { - ret = GLXEW_EXT_visual_info; - continue; - } -#endif -#ifdef GLX_EXT_visual_rating - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_rating", 13)) - { - ret = GLXEW_EXT_visual_rating; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) - { -#ifdef GLX_INTEL_swap_event - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_event", 10)) - { - ret = GLXEW_INTEL_swap_event; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) - { -#ifdef GLX_MESA_agp_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"agp_offset", 10)) - { - ret = GLXEW_MESA_agp_offset; - continue; - } -#endif -#ifdef GLX_MESA_copy_sub_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_sub_buffer", 15)) - { - ret = GLXEW_MESA_copy_sub_buffer; - continue; - } -#endif -#ifdef GLX_MESA_pixmap_colormap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_colormap", 15)) - { - ret = GLXEW_MESA_pixmap_colormap; - continue; - } -#endif -#ifdef GLX_MESA_release_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"release_buffers", 15)) - { - ret = GLXEW_MESA_release_buffers; - continue; - } -#endif -#ifdef GLX_MESA_set_3dfx_mode - if (_glewStrSame3(&pos, &len, (const GLubyte*)"set_3dfx_mode", 13)) - { - ret = GLXEW_MESA_set_3dfx_mode; - continue; - } -#endif -#ifdef GLX_MESA_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_MESA_swap_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef GLX_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLXEW_NV_copy_image; - continue; - } -#endif -#ifdef GLX_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = GLXEW_NV_float_buffer; - continue; - } -#endif -#ifdef GLX_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = GLXEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef GLX_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = GLXEW_NV_present_video; - continue; - } -#endif -#ifdef GLX_NV_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = GLXEW_NV_swap_group; - continue; - } -#endif -#ifdef GLX_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLXEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef GLX_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = GLXEW_NV_video_capture; - continue; - } -#endif -#ifdef GLX_NV_video_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) - { - ret = GLXEW_NV_video_output; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef GLX_OML_swap_method - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_method", 11)) - { - ret = GLXEW_OML_swap_method; - continue; - } -#endif -#ifdef GLX_OML_sync_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) - { - ret = GLXEW_OML_sync_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) - { -#ifdef GLX_SGIS_blended_overlay - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blended_overlay", 15)) - { - ret = GLXEW_SGIS_blended_overlay; - continue; - } -#endif -#ifdef GLX_SGIS_color_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) - { - ret = GLXEW_SGIS_color_range; - continue; - } -#endif -#ifdef GLX_SGIS_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_SGIS_multisample; - continue; - } -#endif -#ifdef GLX_SGIS_shared_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_multisample", 18)) - { - ret = GLXEW_SGIS_shared_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) - { -#ifdef GLX_SGIX_fbconfig - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig", 8)) - { - ret = GLXEW_SGIX_fbconfig; - continue; - } -#endif -#ifdef GLX_SGIX_hyperpipe - if (_glewStrSame3(&pos, &len, (const GLubyte*)"hyperpipe", 9)) - { - ret = GLXEW_SGIX_hyperpipe; - continue; - } -#endif -#ifdef GLX_SGIX_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = GLXEW_SGIX_pbuffer; - continue; - } -#endif -#ifdef GLX_SGIX_swap_barrier - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_barrier", 12)) - { - ret = GLXEW_SGIX_swap_barrier; - continue; - } -#endif -#ifdef GLX_SGIX_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = GLXEW_SGIX_swap_group; - continue; - } -#endif -#ifdef GLX_SGIX_video_resize - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) - { - ret = GLXEW_SGIX_video_resize; - continue; - } -#endif -#ifdef GLX_SGIX_visual_select_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_select_group", 19)) - { - ret = GLXEW_SGIX_visual_select_group; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) - { -#ifdef GLX_SGI_cushion - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cushion", 7)) - { - ret = GLXEW_SGI_cushion; - continue; - } -#endif -#ifdef GLX_SGI_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = GLXEW_SGI_make_current_read; - continue; - } -#endif -#ifdef GLX_SGI_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_SGI_swap_control; - continue; - } -#endif -#ifdef GLX_SGI_video_sync - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_sync", 10)) - { - ret = GLXEW_SGI_video_sync; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) - { -#ifdef GLX_SUN_get_transparent_index - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_transparent_index", 21)) - { - ret = GLXEW_SUN_get_transparent_index; - continue; - } -#endif -#ifdef GLX_SUN_video_resize - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) - { - ret = GLXEW_SUN_video_resize; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#endif /* _WIN32 */ diff --git a/Engine/lib/glew/src/glewinfo.c b/Engine/lib/glew/src/glewinfo.c deleted file mode 100644 index ad44f7256c..0000000000 --- a/Engine/lib/glew/src/glewinfo.c +++ /dev/null @@ -1,10681 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -#include -#endif - -#ifdef GLEW_REGAL -#include -#endif - -static FILE* f; - -#ifdef GLEW_MX -GLEWContext _glewctx; -#define glewGetContext() (&_glewctx) -#ifdef _WIN32 -WGLEWContext _wglewctx; -#define wglewGetContext() (&_wglewctx) -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -#define glxewGetContext() (&_glxewctx) -#endif -#endif - -#if defined(_WIN32) -GLboolean glewCreateContext (int* pixelformat); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewCreateContext (const char* display, int* visual); -#else -GLboolean glewCreateContext (); -#endif - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual); -#endif - -void glewDestroyContext (); - -/* ------------------------------------------------------------------------- */ - -static void glewPrintExt (const char* name, GLboolean def1, GLboolean def2, GLboolean def3) -{ - unsigned int i; - fprintf(f, "\n%s:", name); - for (i=0; i<62-strlen(name); i++) fprintf(f, " "); - fprintf(f, "%s ", def1 ? "OK" : "MISSING"); - if (def1 != def2) - fprintf(f, "[%s] ", def2 ? "OK" : "MISSING"); - if (def1 != def3) - fprintf(f, "[%s]\n", def3 ? "OK" : "MISSING"); - else - fprintf(f, "\n"); - for (i=0; i]\n"); -#else - fprintf(stderr, "Usage: glewinfo [-display ] [-visual ]\n"); -#endif - return 1; - } -#endif - -#if defined(_WIN32) - if (GL_TRUE == glewCreateContext(&visual)) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - if (GL_TRUE == glewCreateContext()) -#else - if (GL_TRUE == glewCreateContext(display, &visual)) -#endif - { - fprintf(stderr, "Error: glewCreateContext failed\n"); - glewDestroyContext(); - return 1; - } - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -#ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -#endif - -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - glewDestroyContext(); - return 1; - } -#if defined(_WIN32) - f = fopen("glewinfo.txt", "w"); - if (f == NULL) f = stdout; -#else - f = stdout; -#endif - fprintf(f, "---------------------------\n"); - fprintf(f, " GLEW Extension Info\n"); - fprintf(f, "---------------------------\n\n"); - fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(_WIN32) - fprintf(f, "Reporting capabilities of pixelformat %d\n", visual); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", - display == NULL ? getenv("DISPLAY") : display, visual); -#endif - fprintf(f, "Running on a %s from %s\n", - glGetString(GL_RENDERER), glGetString(GL_VENDOR)); - fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); - glewInfo(); -#if defined(_WIN32) - wglewInfo(); -#else - glxewInfo(); -#endif - if (f != stdout) fclose(f); - glewDestroyContext(); - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - *display = 0; - *visual = strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - *display = argv[p++]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - *visual = (int)strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#endif - } - return GL_FALSE; -} -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -HWND wnd = NULL; -HDC dc = NULL; -HGLRC rc = NULL; - -GLboolean glewCreateContext (int* pixelformat) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); - if (NULL == wnd) return GL_TRUE; - /* get the device context */ - dc = GetDC(wnd); - if (NULL == dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (*pixelformat == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - *pixelformat = ChoosePixelFormat(dc, &pfd); - if (*pixelformat == 0) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(dc, *pixelformat, &pfd)) return GL_TRUE; - /* create rendering context */ - rc = wglCreateContext(dc); - if (NULL == rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(dc, rc)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != rc) wglMakeCurrent(NULL, NULL); - if (NULL != rc) wglDeleteContext(rc); - if (NULL != wnd && NULL != dc) ReleaseDC(wnd, dc); - if (NULL != wnd) DestroyWindow(wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#include - -AGLContext ctx, octx; - -GLboolean glewCreateContext () -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx = aglCreateContext(pf, NULL); - if (NULL == ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx)) return GL_TRUE; - /* Needed for Regal on the Mac */ - #if defined(GLEW_REGAL) && defined(__APPLE__) - RegalMakeCurrent(octx); - #endif - return GL_FALSE; -} - -void glewDestroyContext () -{ - aglSetCurrentContext(octx); - if (NULL != ctx) aglDestroyContext(ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -Display* dpy = NULL; -XVisualInfo* vi = NULL; -XVisualInfo* vis = NULL; -GLXContext ctx = NULL; -Window wnd = 0; -Colormap cmap = 0; - -GLboolean glewCreateContext (const char* display, int* visual) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* open display */ - dpy = XOpenDisplay(display); - if (NULL == dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - if (*visual == -1) - { - vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); - if (NULL == vi) return GL_TRUE; - *visual = (int)XVisualIDFromVisual(vi->visual); - } - else - { - int n_vis, i; - vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); - for (i=0; iscreen), 0, 0, 1, 1, 1, 0, 0);*/ - cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = cmap; - wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), - 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != dpy && NULL != ctx) glXDestroyContext(dpy, ctx); - if (NULL != dpy && 0 != wnd) XDestroyWindow(dpy, wnd); - if (NULL != dpy && 0 != cmap) XFreeColormap(dpy, cmap); - if (NULL != vis) - XFree(vis); - else if (NULL != vi) - XFree(vi); - if (NULL != dpy) XCloseDisplay(dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ diff --git a/Engine/lib/glew/src/visualinfo.c b/Engine/lib/glew/src/visualinfo.c deleted file mode 100644 index b8bb59ef60..0000000000 --- a/Engine/lib/glew/src/visualinfo.c +++ /dev/null @@ -1,1178 +0,0 @@ -/* -** visualinfo.c -** -** Copyright (C) Nate Robins, 1997 -** Michael Wimmer, 1999 -** Milan Ikits, 2002-2008 -** -** visualinfo is a small utility that displays all available visuals, -** aka. pixelformats, in an OpenGL system along with renderer version -** information. It shows a table of all the visuals that support OpenGL -** along with their capabilities. The format of the table is similar to -** that of glxinfo on Unix systems: -** -** visual ~= pixel format descriptor -** id = visual id (integer from 1 - max visuals) -** tp = type (wn: window, pb: pbuffer, wp: window & pbuffer, bm: bitmap) -** ac = acceleration (ge: generic, fu: full, no: none) -** fm = format (i: integer, f: float, c: color index) -** db = double buffer (y = yes) -** sw = swap method (x: exchange, c: copy, u: undefined) -** st = stereo (y = yes) -** sz = total # bits -** r = # bits of red -** g = # bits of green -** b = # bits of blue -** a = # bits of alpha -** axbf = # aux buffers -** dpth = # bits of depth -** stcl = # bits of stencil -*/ - -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -#include -#else -#include -#endif - -#ifdef GLEW_MX -GLEWContext _glewctx; -# define glewGetContext() (&_glewctx) -# ifdef _WIN32 -WGLEWContext _wglewctx; -# define wglewGetContext() (&_wglewctx) -# elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -# define glxewGetContext() (&_glxewctx) -# endif -#endif /* GLEW_MX */ - -typedef struct GLContextStruct -{ -#ifdef _WIN32 - HWND wnd; - HDC dc; - HGLRC rc; -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - AGLContext ctx, octx; -#else - Display* dpy; - XVisualInfo* vi; - GLXContext ctx; - Window wnd; - Colormap cmap; -#endif -} GLContext; - -void InitContext (GLContext* ctx); -GLboolean CreateContext (GLContext* ctx); -void DestroyContext (GLContext* ctx); -void VisualInfo (GLContext* ctx); -void PrintExtensions (const char* s); -GLboolean ParseArgs (int argc, char** argv); - -int showall = 0; -int displaystdout = 0; -int verbose = 0; -int drawableonly = 0; - -char* display = NULL; -int visual = -1; - -FILE* file = 0; - -int -main (int argc, char** argv) -{ - GLenum err; - GLContext ctx; - - /* ---------------------------------------------------------------------- */ - /* parse arguments */ - if (GL_TRUE == ParseArgs(argc-1, argv+1)) - { -#if defined(_WIN32) - fprintf(stderr, "Usage: visualinfo [-a] [-s] [-h] [-pf ]\n"); - fprintf(stderr, " -a: show all visuals\n"); - fprintf(stderr, " -s: display to stdout instead of visualinfo.txt\n"); - fprintf(stderr, " -pf : use given pixelformat\n"); - fprintf(stderr, " -h: this screen\n"); -#else - fprintf(stderr, "Usage: visualinfo [-h] [-display ] [-visual ]\n"); - fprintf(stderr, " -h: this screen\n"); - fprintf(stderr, " -display : use given display\n"); - fprintf(stderr, " -visual : use given visual\n"); -#endif - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* create OpenGL rendering context */ - InitContext(&ctx); - if (GL_TRUE == CreateContext(&ctx)) - { - fprintf(stderr, "Error: CreateContext failed\n"); - DestroyContext(&ctx); - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* initialize GLEW */ - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -# ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -# elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -# endif -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - DestroyContext(&ctx); - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* open file */ -#if defined(_WIN32) - if (!displaystdout) - file = fopen("visualinfo.txt", "w"); - if (file == NULL) - file = stdout; -#else - file = stdout; -#endif - - /* ---------------------------------------------------------------------- */ - /* output header information */ - /* OpenGL extensions */ - fprintf(file, "OpenGL vendor string: %s\n", glGetString(GL_VENDOR)); - fprintf(file, "OpenGL renderer string: %s\n", glGetString(GL_RENDERER)); - fprintf(file, "OpenGL version string: %s\n", glGetString(GL_VERSION)); - fprintf(file, "OpenGL extensions (GL_): \n"); - PrintExtensions((char*)glGetString(GL_EXTENSIONS)); - -#ifndef GLEW_NO_GLU - /* GLU extensions */ - fprintf(file, "GLU version string: %s\n", gluGetString(GLU_VERSION)); - fprintf(file, "GLU extensions (GLU_): \n"); - PrintExtensions((char*)gluGetString(GLU_EXTENSIONS)); -#endif - - /* ---------------------------------------------------------------------- */ - /* extensions string */ -#if defined(_WIN32) - /* WGL extensions */ - if (WGLEW_ARB_extensions_string || WGLEW_EXT_extensions_string) - { - fprintf(file, "WGL extensions (WGL_): \n"); - PrintExtensions(wglGetExtensionsStringARB ? - (char*)wglGetExtensionsStringARB(ctx.dc) : - (char*)wglGetExtensionsStringEXT()); - } -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#else - /* GLX extensions */ - fprintf(file, "GLX extensions (GLX_): \n"); - PrintExtensions(glXQueryExtensionsString(glXGetCurrentDisplay(), - DefaultScreen(glXGetCurrentDisplay()))); -#endif - - /* ---------------------------------------------------------------------- */ - /* enumerate all the formats */ - VisualInfo(&ctx); - - /* ---------------------------------------------------------------------- */ - /* release resources */ - DestroyContext(&ctx); - if (file != stdout) - fclose(file); - return 0; -} - -/* do the magic to separate all extensions with comma's, except - for the last one that _may_ terminate in a space. */ -void PrintExtensions (const char* s) -{ - char t[80]; - int i=0; - char* p=0; - - t[79] = '\0'; - while (*s) - { - t[i++] = *s; - if(*s == ' ') - { - if (*(s+1) != '\0') { - t[i-1] = ','; - t[i] = ' '; - p = &t[i++]; - } - else /* zoinks! last one terminated in a space! */ - { - t[i-1] = '\0'; - } - } - if(i > 80 - 5) - { - *p = t[i] = '\0'; - fprintf(file, " %s\n", t); - p++; - i = (int)strlen(p); - strcpy(t, p); - } - s++; - } - t[i] = '\0'; - fprintf(file, " %s.\n", t); -} - -/* ---------------------------------------------------------------------- */ - -#if defined(_WIN32) - -void -VisualInfoARB (GLContext* ctx) -{ - int attrib[32], value[32], n_attrib, n_pbuffer=0, n_float=0; - int i, pf, maxpf; - unsigned int c; - - /* to get pbuffer capable pixel formats */ - attrib[0] = WGL_DRAW_TO_PBUFFER_ARB; - attrib[1] = GL_TRUE; - attrib[2] = 0; - wglChoosePixelFormatARB(ctx->dc, attrib, 0, 1, &pf, &c); - /* query number of pixel formats */ - attrib[0] = WGL_NUMBER_PIXEL_FORMATS_ARB; - wglGetPixelFormatAttribivARB(ctx->dc, 0, 0, 1, attrib, value); - maxpf = value[0]; - for (i=0; i<32; i++) - value[i] = 0; - - attrib[0] = WGL_SUPPORT_OPENGL_ARB; - attrib[1] = WGL_DRAW_TO_WINDOW_ARB; - attrib[2] = WGL_DRAW_TO_BITMAP_ARB; - attrib[3] = WGL_ACCELERATION_ARB; - /* WGL_NO_ACCELERATION_ARB, WGL_GENERIC_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB */ - attrib[4] = WGL_SWAP_METHOD_ARB; - /* WGL_SWAP_EXCHANGE_ARB, WGL_SWAP_COPY_ARB, WGL_SWAP_UNDEFINED_ARB */ - attrib[5] = WGL_DOUBLE_BUFFER_ARB; - attrib[6] = WGL_STEREO_ARB; - attrib[7] = WGL_PIXEL_TYPE_ARB; - /* WGL_TYPE_RGBA_ARB, WGL_TYPE_COLORINDEX_ARB, - WGL_TYPE_RGBA_FLOAT_ATI (WGL_ATI_pixel_format_float) */ - /* Color buffer information */ - attrib[8] = WGL_COLOR_BITS_ARB; - attrib[9] = WGL_RED_BITS_ARB; - attrib[10] = WGL_GREEN_BITS_ARB; - attrib[11] = WGL_BLUE_BITS_ARB; - attrib[12] = WGL_ALPHA_BITS_ARB; - /* Accumulation buffer information */ - attrib[13] = WGL_ACCUM_BITS_ARB; - attrib[14] = WGL_ACCUM_RED_BITS_ARB; - attrib[15] = WGL_ACCUM_GREEN_BITS_ARB; - attrib[16] = WGL_ACCUM_BLUE_BITS_ARB; - attrib[17] = WGL_ACCUM_ALPHA_BITS_ARB; - /* Depth, stencil, and aux buffer information */ - attrib[18] = WGL_DEPTH_BITS_ARB; - attrib[19] = WGL_STENCIL_BITS_ARB; - attrib[20] = WGL_AUX_BUFFERS_ARB; - /* Layer information */ - attrib[21] = WGL_NUMBER_OVERLAYS_ARB; - attrib[22] = WGL_NUMBER_UNDERLAYS_ARB; - attrib[23] = WGL_SWAP_LAYER_BUFFERS_ARB; - attrib[24] = WGL_SAMPLES_ARB; - attrib[25] = WGL_SUPPORT_GDI_ARB; - n_attrib = 26; - if (WGLEW_ARB_pbuffer) - { - attrib[n_attrib] = WGL_DRAW_TO_PBUFFER_ARB; - n_pbuffer = n_attrib; - n_attrib++; - } - if (WGLEW_NV_float_buffer) - { - attrib[n_attrib] = WGL_FLOAT_COMPONENTS_NV; - n_float = n_attrib; - n_attrib++; - } - - if (!verbose) - { - /* print table header */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | layer |\n"); - fprintf(file, " | id | tp ac gd fm db sw st ms | sz r g b a | bf th cl | sz r g b a | ov un sw |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - wglGetPixelFormatAttribivARB(ctx->dc, i, 0, n_attrib, attrib, value); - /* only describe this format if it supports OpenGL */ - if (!value[0]) continue; - /* by default show only fully accelerated window or pbuffer capable visuals */ - if (!showall - && ((value[2] && !value[1]) - || (!WGLEW_ARB_pbuffer || !value[n_pbuffer]) - || (value[3] != WGL_FULL_ACCELERATION_ARB))) continue; - /* print out the information for this visual */ - /* visual id */ - fprintf(file, " |% 4d | ", i); - /* visual type */ - if (value[1]) - { - if (WGLEW_ARB_pbuffer && value[n_pbuffer]) fprintf(file, "wp "); - else fprintf(file, "wn "); - } - else - { - if (value[2]) fprintf(file, "bm "); - else if (WGLEW_ARB_pbuffer && value[n_pbuffer]) fprintf(file, "pb "); - } - /* acceleration */ - fprintf(file, "%s ", value[3] == WGL_FULL_ACCELERATION_ARB ? "fu" : - value[3] == WGL_GENERIC_ACCELERATION_ARB ? "ge" : - value[3] == WGL_NO_ACCELERATION_ARB ? "no" : ". "); - /* gdi support */ - fprintf(file, " %c ", value[25] ? 'y' : '.'); - /* format */ - if (WGLEW_NV_float_buffer && value[n_float]) fprintf(file, " f "); - else if (WGLEW_ATI_pixel_format_float && value[7] == WGL_TYPE_RGBA_FLOAT_ATI) fprintf(file, " f "); - else if (value[7] == WGL_TYPE_RGBA_ARB) fprintf(file, " i "); - else if (value[7] == WGL_TYPE_COLORINDEX_ARB) fprintf(file, " c "); - else if (value[7] == WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT) fprintf(file," p "); - else fprintf(file," ? "); - /* double buffer */ - fprintf(file, " %c ", value[5] ? 'y' : '.'); - /* swap method */ - if (value[4] == WGL_SWAP_EXCHANGE_ARB) fprintf(file, " x "); - else if (value[4] == WGL_SWAP_COPY_ARB) fprintf(file, " c "); - else if (value[4] == WGL_SWAP_UNDEFINED_ARB) fprintf(file, " . "); - else fprintf(file, " . "); - /* stereo */ - fprintf(file, " %c ", value[6] ? 'y' : '.'); - /* multisample */ - if (value[24] > 0) - fprintf(file, "%2d | ", value[24]); - else - fprintf(file, " . | "); - /* color size */ - if (value[8]) fprintf(file, "%3d ", value[8]); - else fprintf(file, " . "); - /* red */ - if (value[9]) fprintf(file, "%2d ", value[9]); - else fprintf(file, " . "); - /* green */ - if (value[10]) fprintf(file, "%2d ", value[10]); - else fprintf(file, " . "); - /* blue */ - if (value[11]) fprintf(file, "%2d ", value[11]); - else fprintf(file, " . "); - /* alpha */ - if (value[12]) fprintf(file, "%2d | ", value[12]); - else fprintf(file, " . | "); - /* aux buffers */ - if (value[20]) fprintf(file, "%2d ", value[20]); - else fprintf(file, " . "); - /* depth */ - if (value[18]) fprintf(file, "%2d ", value[18]); - else fprintf(file, " . "); - /* stencil */ - if (value[19]) fprintf(file, "%2d | ", value[19]); - else fprintf(file, " . | "); - /* accum size */ - if (value[13]) fprintf(file, "%3d ", value[13]); - else fprintf(file, " . "); - /* accum red */ - if (value[14]) fprintf(file, "%2d ", value[14]); - else fprintf(file, " . "); - /* accum green */ - if (value[15]) fprintf(file, "%2d ", value[15]); - else fprintf(file, " . "); - /* accum blue */ - if (value[16]) fprintf(file, "%2d ", value[16]); - else fprintf(file, " . "); - /* accum alpha */ - if (value[17]) fprintf(file, "%2d | ", value[17]); - else fprintf(file, " . | "); - /* overlay */ - if (value[21]) fprintf(file, "%2d ", value[21]); - else fprintf(file, " . "); - /* underlay */ - if (value[22]) fprintf(file, "%2d ", value[22]); - else fprintf(file, " . "); - /* layer swap */ - if (value[23]) fprintf(file, "y "); - else fprintf(file, " . "); - fprintf(file, "|\n"); - } - /* print table footer */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | layer |\n"); - fprintf(file, " | id | tp ac gd fm db sw st ms | sz r g b a | bf th cl | sz r g b a | ov un sw |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - } - else /* verbose */ - { -#if 0 - fprintf(file, "\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && !(pfd.dwFlags & PFD_DRAW_TO_WINDOW))) continue; - fprintf(file, "Visual ID: %2d depth=%d class=%s\n", i, pfd.cDepthBits, - pfd.cColorBits <= 8 ? "PseudoColor" : "TrueColor"); - fprintf(file, " bufferSize=%d level=%d renderType=%s doubleBuffer=%d stereo=%d\n", pfd.cColorBits, pfd.bReserved, pfd.iPixelType == PFD_TYPE_RGBA ? "rgba" : "ci", pfd.dwFlags & PFD_DOUBLEBUFFER, pfd.dwFlags & PFD_STEREO); - fprintf(file, " generic=%d generic accelerated=%d\n", (pfd.dwFlags & PFD_GENERIC_FORMAT) == PFD_GENERIC_FORMAT, (pfd.dwFlags & PFD_GENERIC_ACCELERATED) == PFD_GENERIC_ACCELERATED); - fprintf(file, " rgba: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits); - fprintf(file, " auxBuffers=%d depthSize=%d stencilSize=%d\n", pfd.cAuxBuffers, pfd.cDepthBits, pfd.cStencilBits); - fprintf(file, " accum: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cAccumRedBits, pfd.cAccumGreenBits, pfd.cAccumBlueBits, pfd.cAccumAlphaBits); - fprintf(file, " multiSample=%d multisampleBuffers=%d\n", 0, 0); - fprintf(file, " Opaque.\n"); - } -#endif - } -} - -void -VisualInfoGDI (GLContext* ctx) -{ - int i, maxpf; - PIXELFORMATDESCRIPTOR pfd; - - /* calling DescribePixelFormat() with NULL pfd (!!!) return maximum - number of pixel formats */ - maxpf = DescribePixelFormat(ctx->dc, 1, 0, NULL); - - if (!verbose) - { - fprintf(file, "-----------------------------------------------------------------------------\n"); - fprintf(file, " visual x bf lv rg d st ge ge r g b a ax dp st accum buffs ms \n"); - fprintf(file, " id dep tp sp sz l ci b ro ne ac sz sz sz sz bf th cl sz r g b a ns b\n"); - fprintf(file, "-----------------------------------------------------------------------------\n"); - - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && (pfd.dwFlags & PFD_DRAW_TO_BITMAP))) continue; - /* other criteria could be tested here for actual pixel format - choosing in an application: - - for (...each pixel format...) { - if (pfd.dwFlags & PFD_SUPPORT_OPENGL && - pfd.dwFlags & PFD_DOUBLEBUFFER && - pfd.cDepthBits >= 24 && - pfd.cColorBits >= 24) - { - goto found; - } - } - ... not found so exit ... - found: - ... found so use it ... - */ - /* print out the information for this pixel format */ - fprintf(file, "0x%02x ", i); - fprintf(file, "%3d ", pfd.cColorBits); - if(pfd.dwFlags & PFD_DRAW_TO_WINDOW) fprintf(file, "wn "); - else if(pfd.dwFlags & PFD_DRAW_TO_BITMAP) fprintf(file, "bm "); - else fprintf(file, "pb "); - /* should find transparent pixel from LAYERPLANEDESCRIPTOR */ - fprintf(file, " . "); - fprintf(file, "%3d ", pfd.cColorBits); - /* bReserved field indicates number of over/underlays */ - if(pfd.bReserved) fprintf(file, " %d ", pfd.bReserved); - else fprintf(file, " . "); - fprintf(file, " %c ", pfd.iPixelType == PFD_TYPE_RGBA ? 'r' : 'c'); - fprintf(file, "%c ", pfd.dwFlags & PFD_DOUBLEBUFFER ? 'y' : '.'); - fprintf(file, " %c ", pfd.dwFlags & PFD_STEREO ? 'y' : '.'); - /* added: */ - fprintf(file, " %c ", pfd.dwFlags & PFD_GENERIC_FORMAT ? 'y' : '.'); - fprintf(file, " %c ", pfd.dwFlags & PFD_GENERIC_ACCELERATED ? 'y' : '.'); - if(pfd.cRedBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cRedBits); - else fprintf(file, " . "); - if(pfd.cGreenBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cGreenBits); - else fprintf(file, " . "); - if(pfd.cBlueBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cBlueBits); - else fprintf(file, " . "); - if(pfd.cAlphaBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cAlphaBits); - else fprintf(file, " . "); - if(pfd.cAuxBuffers) fprintf(file, "%2d ", pfd.cAuxBuffers); - else fprintf(file, " . "); - if(pfd.cDepthBits) fprintf(file, "%2d ", pfd.cDepthBits); - else fprintf(file, " . "); - if(pfd.cStencilBits) fprintf(file, "%2d ", pfd.cStencilBits); - else fprintf(file, " . "); - if(pfd.cAccumBits) fprintf(file, "%3d ", pfd.cAccumBits); - else fprintf(file, " . "); - if(pfd.cAccumRedBits) fprintf(file, "%2d ", pfd.cAccumRedBits); - else fprintf(file, " . "); - if(pfd.cAccumGreenBits) fprintf(file, "%2d ", pfd.cAccumGreenBits); - else fprintf(file, " . "); - if(pfd.cAccumBlueBits) fprintf(file, "%2d ", pfd.cAccumBlueBits); - else fprintf(file, " . "); - if(pfd.cAccumAlphaBits) fprintf(file, "%2d ", pfd.cAccumAlphaBits); - else fprintf(file, " . "); - /* no multisample in win32 */ - fprintf(file, " . .\n"); - } - /* print table footer */ - fprintf(file, "-----------------------------------------------------------------------------\n"); - fprintf(file, " visual x bf lv rg d st ge ge r g b a ax dp st accum buffs ms \n"); - fprintf(file, " id dep tp sp sz l ci b ro ne ac sz sz sz sz bf th cl sz r g b a ns b\n"); - fprintf(file, "-----------------------------------------------------------------------------\n"); - } - else /* verbose */ - { - fprintf(file, "\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && !(pfd.dwFlags & PFD_DRAW_TO_WINDOW))) continue; - fprintf(file, "Visual ID: %2d depth=%d class=%s\n", i, pfd.cDepthBits, - pfd.cColorBits <= 8 ? "PseudoColor" : "TrueColor"); - fprintf(file, " bufferSize=%d level=%d renderType=%s doubleBuffer=%ld stereo=%ld\n", pfd.cColorBits, pfd.bReserved, pfd.iPixelType == PFD_TYPE_RGBA ? "rgba" : "ci", pfd.dwFlags & PFD_DOUBLEBUFFER, pfd.dwFlags & PFD_STEREO); - fprintf(file, " generic=%d generic accelerated=%d\n", (pfd.dwFlags & PFD_GENERIC_FORMAT) == PFD_GENERIC_FORMAT, (pfd.dwFlags & PFD_GENERIC_ACCELERATED) == PFD_GENERIC_ACCELERATED); - fprintf(file, " rgba: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits); - fprintf(file, " auxBuffers=%d depthSize=%d stencilSize=%d\n", pfd.cAuxBuffers, pfd.cDepthBits, pfd.cStencilBits); - fprintf(file, " accum: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cAccumRedBits, pfd.cAccumGreenBits, pfd.cAccumBlueBits, pfd.cAccumAlphaBits); - fprintf(file, " multiSample=%d multisampleBuffers=%d\n", 0, 0); - fprintf(file, " Opaque.\n"); - } - } -} - -void -VisualInfo (GLContext* ctx) -{ - if (WGLEW_ARB_pixel_format) - VisualInfoARB(ctx); - else - VisualInfoGDI(ctx); -} - -/* ---------------------------------------------------------------------- */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -void -VisualInfo (GLContext* ctx) -{ -/* - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - GLint value; - pf = aglChoosePixelFormat(NULL, 0, attrib); - while (pf != NULL) - { - aglDescribePixelFormat(pf, GL_RGBA, &value); - fprintf(stderr, "%d\n", value); - pf = aglNextPixelFormat(pf); - } -*/ -} - -#else /* GLX */ - -void -VisualInfo (GLContext* ctx) -{ - int n_fbc; - GLXFBConfig* fbc; - int value, ret, i; - - fbc = glXGetFBConfigs(ctx->dpy, DefaultScreen(ctx->dpy), &n_fbc); - - if (fbc) - { - if (!verbose) - { - /* print table header */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | ms | cav |\n"); - fprintf(file, " | id | tp xr cl fm db st lv xp | sz r g b a | bf th cl | r g b a | ns b | eat |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - /* loop through all the fbcs */ - for (i=0; idpy, fbc[i], GLX_FBCONFIG_ID, &value); - if (ret != Success) - { - fprintf(file, "| ? |"); - } - else - { - fprintf(file, " |% 4d | ", value); - } - /* visual type */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DRAWABLE_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (value & GLX_WINDOW_BIT) - { - if (value & GLX_PBUFFER_BIT) - { - fprintf(file, "wp "); - } - else - { - fprintf(file, "wn "); - } - } - else - { - if (value & GLX_PBUFFER_BIT) - { - fprintf(file, "pb "); - } - else if (value & GLX_PIXMAP_BIT) - { - fprintf(file, "pm "); - } - else - { - fprintf(file, " ? "); - } - } - } - /* x renderable */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_X_RENDERABLE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, value ? " y " : " n "); - } - /* class */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_X_VISUAL_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (GLX_TRUE_COLOR == value) - fprintf(file, "tc "); - else if (GLX_DIRECT_COLOR == value) - fprintf(file, "dc "); - else if (GLX_PSEUDO_COLOR == value) - fprintf(file, "pc "); - else if (GLX_STATIC_COLOR == value) - fprintf(file, "sc "); - else if (GLX_GRAY_SCALE == value) - fprintf(file, "gs "); - else if (GLX_STATIC_GRAY == value) - fprintf(file, "sg "); - else if (GLX_X_VISUAL_TYPE == value) - fprintf(file, " . "); - else - fprintf(file, " ? "); - } - /* format */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_RENDER_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (GLXEW_NV_float_buffer) - { - int ret2, value2; - ret2 = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_FLOAT_COMPONENTS_NV, &value2); - if (Success == ret2 && GL_TRUE == value2) - { - fprintf(file, " f "); - } - else if (value & GLX_RGBA_BIT) - fprintf(file, " i "); - else if (value & GLX_COLOR_INDEX_BIT) - fprintf(file, " c "); - else - fprintf(file, " ? "); - } - else - { - if (value & GLX_RGBA_FLOAT_ATI_BIT) - fprintf(file, " f "); - else if (value & GLX_RGBA_BIT) - fprintf(file, " i "); - else if (value & GLX_COLOR_INDEX_BIT) - fprintf(file, " c "); - else - fprintf(file, " ? "); - } - } - /* double buffer */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DOUBLEBUFFER, &value); - fprintf(file, " %c ", Success != ret ? '?' : (value ? 'y' : '.')); - /* stereo */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_STEREO, &value); - fprintf(file, " %c ", Success != ret ? '?' : (value ? 'y' : '.')); - /* level */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_LEVEL, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, "%2d ", value); - } - /* transparency */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_TRANSPARENT_TYPE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (GLX_TRANSPARENT_RGB == value) - fprintf(file, " r | "); - else if (GLX_TRANSPARENT_INDEX == value) - fprintf(file, " i | "); - else if (GLX_NONE == value) - fprintf(file, " . | "); - else - fprintf(file, " ? | "); - } - /* color size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_BUFFER_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%3d ", value); - else - fprintf(file, " . "); - } - /* red size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_RED_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* green size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_GREEN_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* blue size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_BLUE_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* alpha size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ALPHA_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* aux buffers */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_AUX_BUFFERS, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* depth size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DEPTH_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* stencil size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_STENCIL_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* accum red size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_RED_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum green size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_GREEN_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum blue size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_BLUE_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum alpha size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_ALPHA_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* multisample */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_SAMPLES, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, "%2d ", value); - } - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_SAMPLE_BUFFERS, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - fprintf(file, "%2d | ", value); - } - /* caveat */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_CONFIG_CAVEAT, &value); - if (Success != ret) - { - fprintf(file, "???? |"); - } - else - { - if (GLX_NONE == value) - fprintf(file, "none |\n"); - else if (GLX_SLOW_CONFIG == value) - fprintf(file, "slow |\n"); - else if (GLX_NON_CONFORMANT_CONFIG == value) - fprintf(file, "ncft |\n"); - else - fprintf(file, "???? |\n"); - } - } - /* print table footer */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - fprintf(file, " | id | tp xr cl fm db st lv xp | sz r g b a | bf th cl | r g b a | ns b | eat |\n"); - fprintf(file, " | | visual | color | ax dp st | accum | ms | cav |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - } - } -} - -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -void InitContext (GLContext* ctx) -{ - ctx->wnd = NULL; - ctx->dc = NULL; - ctx->rc = NULL; -} - -GLboolean CreateContext (GLContext* ctx) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* check for input */ - if (NULL == ctx) return GL_TRUE; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - ctx->wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, - GetModuleHandle(NULL), NULL); - if (NULL == ctx->wnd) return GL_TRUE; - /* get the device context */ - ctx->dc = GetDC(ctx->wnd); - if (NULL == ctx->dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (visual == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - visual = ChoosePixelFormat(ctx->dc, &pfd); - if (0 == visual) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(ctx->dc, visual, &pfd)) return GL_TRUE; - /* create rendering context */ - ctx->rc = wglCreateContext(ctx->dc); - if (NULL == ctx->rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(ctx->dc, ctx->rc)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL == ctx) return; - if (NULL != ctx->rc) wglMakeCurrent(NULL, NULL); - if (NULL != ctx->rc) wglDeleteContext(wglGetCurrentContext()); - if (NULL != ctx->wnd && NULL != ctx->dc) ReleaseDC(ctx->wnd, ctx->dc); - if (NULL != ctx->wnd) DestroyWindow(ctx->wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -void InitContext (GLContext* ctx) -{ - ctx->ctx = NULL; - ctx->octx = NULL; -} - -GLboolean CreateContext (GLContext* ctx) -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /* check input */ - if (NULL == ctx) return GL_TRUE; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx->ctx = aglCreateContext(pf, NULL); - if (NULL == ctx->ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - ctx->octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx->ctx)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL == ctx) return; - aglSetCurrentContext(ctx->octx); - if (NULL != ctx->ctx) aglDestroyContext(ctx->ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -void InitContext (GLContext* ctx) -{ - ctx->dpy = NULL; - ctx->vi = NULL; - ctx->ctx = NULL; - ctx->wnd = 0; - ctx->cmap = 0; -} - -GLboolean CreateContext (GLContext* ctx) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* check input */ - if (NULL == ctx) return GL_TRUE; - /* open display */ - ctx->dpy = XOpenDisplay(display); - if (NULL == ctx->dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(ctx->dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - ctx->vi = glXChooseVisual(ctx->dpy, DefaultScreen(ctx->dpy), attrib); - if (NULL == ctx->vi) return GL_TRUE; - /* create context */ - ctx->ctx = glXCreateContext(ctx->dpy, ctx->vi, None, True); - if (NULL == ctx->ctx) return GL_TRUE; - /* create window */ - /*wnd = XCreateSimpleWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 1, 1, 1, 0, 0);*/ - ctx->cmap = XCreateColormap(ctx->dpy, RootWindow(ctx->dpy, ctx->vi->screen), - ctx->vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = ctx->cmap; - ctx->wnd = XCreateWindow(ctx->dpy, RootWindow(ctx->dpy, ctx->vi->screen), - 0, 0, 1, 1, 0, ctx->vi->depth, InputOutput, ctx->vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(ctx->dpy, ctx->wnd, ctx->ctx)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL != ctx->dpy && NULL != ctx->ctx) glXDestroyContext(ctx->dpy, ctx->ctx); - if (NULL != ctx->dpy && 0 != ctx->wnd) XDestroyWindow(ctx->dpy, ctx->wnd); - if (NULL != ctx->dpy && 0 != ctx->cmap) XFreeColormap(ctx->dpy, ctx->cmap); - if (NULL != ctx->vi) XFree(ctx->vi); - if (NULL != ctx->dpy) XCloseDisplay(ctx->dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -GLboolean ParseArgs (int argc, char** argv) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - display = NULL; - visual = strtol(argv[p], NULL, 0); - } - else if (!strcmp(argv[p], "-a")) - { - showall = 1; - } - else if (!strcmp(argv[p], "-s")) - { - displaystdout = 1; - } - else if (!strcmp(argv[p], "-h")) - { - return GL_TRUE; - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - display = argv[p]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - visual = (int)strtol(argv[p], NULL, 0); - } - else if (!strcmp(argv[p], "-h")) - { - return GL_TRUE; - } - else - return GL_TRUE; -#endif - p++; - } - return GL_FALSE; -} diff --git a/Engine/lib/nativeFileDialogs/LICENSE b/Engine/lib/nativeFileDialogs/LICENSE new file mode 100644 index 0000000000..3ab103c551 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/LICENSE @@ -0,0 +1,16 @@ +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/Engine/lib/nativeFileDialogs/README.md b/Engine/lib/nativeFileDialogs/README.md new file mode 100644 index 0000000000..7ff1008a39 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/README.md @@ -0,0 +1,137 @@ +# Native File Dialog # + +A tiny, neat C library that portably invokes native file open and save dialogs. Write dialog code once and have it pop up native dialogs on all supported platforms. Avoid linking large dependencies like wxWidgets and qt. + +Features: + + - Lean C API, static library -- no ObjC, no C++, no STL. + - Zlib licensed. + - Consistent UTF-8 support on all platforms. + - Simple universal file filter syntax. + - Paid support available. + - Multiple file selection support. + - 64-bit and 32-bit friendly. + - GCC, Clang and Visual Studio supported. + - No third party dependencies. + - Support for Vista's modern `IFileDialog` on Windows. + - Support for non-deprecated Cocoa APIs on OS X. + - GTK+3 dialog on Linux. + - Tested, works alongside [http://www.libsdl.org](SDL2) on all platforms, for the game developers out there. + +# Example Usage # + +```C +#include +#include +#include + +int main( void ) +{ + nfdchar_t *outPath = NULL; + nfdresult_t result = NFD_OpenDialog( NULL, NULL, &outPath ); + + if ( result == NFD_OKAY ) { + puts("Success!"); + puts(outPath); + free(outPath); + } + else if ( result == NFD_CANCEL ) { + puts("User pressed cancel."); + } + else { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} +``` + +See [NFD.h](src/include/nfd.h) for more options. + +# Screenshots # + +![Windows 8 rendering an IFileOpenDialog](screens/open_win8.png?raw=true) +![GTK3 on Linux](screens/open_gtk3.png?raw=true) +![Cocoa on Yosemite](screens/open_cocoa.png?raw=true) + + +## Building ## + +NFD uses [SCons](http://www.scons.org) for cross-platform builds. After installing SCons, build it with: + + cd src + scons debug=[0,1] + +Alternatively, you can avoid Scons by just including NFD files to your existing project: + + 1. Add all header files in `src/` and `src/include` to your project. + 2. Add `src/include` to your include search path or copy it into your existing search path. + 3. Add `src/nfd_common.c` to your project. + 4. Add `src/nfd_` to your project, where `` is the NFD backend for the platform you are fixing to build. + 5. On Visual Studio, define `_CRT_SECURE_NO_WARNINGS` to avoid warnings. + +### Compiling Your Programs ### + + 1. Add `src/include` to your include search path. + 2. Add `nfd.lib` to the list of list of static libraries to link against. + 3. Add `src/` to the library search path. + +On Linux, you must compile and link against GTK+. Recommend use of `pkg-config --cflags --libs gtk+-3.0`. + +On Mac OS X, add `AppKit` to the list of frameworks. + +On Windows, ensure you are building against `comctl32.lib`. + +## Usage ## + +See `NFD.h` for API calls. See `tests/*.c` for example code. + +See `tests/SConstruct` for a working build script that compiles on all platforms. + +## File Filter Syntax ## + +There is a form of file filtering in every file dialog, but no consistent means of supporting it. NFD provides support for filtering files by groups of extensions, providing its own descriptions (where applicable) for the extensions. + +A wildcard filter is always added to every dialog. + +### Separators ### + + - `;` Begin a new filter. + - `,` Add a separate type to the filter. + +#### Examples #### + +`txt` The default filter is for text files. There is a wildcard option in a dropdown. + +`png,jpg;psd` The default filter is for png and jpg files. A second filter is available for psd files. There is a wildcard option in a dropdown. + +`NULL` Wildcard only. + +## Iterating Over PathSets ## + +See [test_opendialogmultiple.c](test/test_opendialogmultiple.c). + +# Known Limitations # + +I accept quality code patches, or will resolve these and other matters through support. + + - No support for Windows XP's legacy dialogs such as `GetOpenFileName`. + - No support for file filter names -- ex: "Image Files" (*.png, *.jpg). Nameless filters are supported, though. + - No support for selecting folders instead of files. + - On Linux, GTK+ cannot be uninitialized to save memory. Launching a file dialog costs memory. I am open to accepting an alternative `nfd_zenity.c` implementation which uses Zenity and pipes. + +# Copyright and Credit # + +Copyright © 2014 [Frogtoss Games](http://www.frogtoss.com), Inc. +File [LICENSE](LICENSE) covers all files in this repo. + +Native File Dialog by Michael Labbe + + +Tomasz Konojacki for [microutf8](http://puszcza.gnu.org.ua/software/microutf8/) + +## Support ## + +Directed support for this work is available from the original author under a paid agreement. + +[Contact Frogtoss Games](http://www.frogtoss.com/pages/contact.html). diff --git a/Engine/lib/nativeFileDialogs/SConstruct b/Engine/lib/nativeFileDialogs/SConstruct new file mode 100644 index 0000000000..342fa1a3a8 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/SConstruct @@ -0,0 +1,99 @@ +# +# Native File Dialog +# +# Scons build script -- GCC, Clang, Visual Studio +# Does not build test + + +import os + + +# target arch is build arch -- extend here for OS cross compiling +target_os=str(Platform()) + +# Corresponds to TARGET_ARCH set to environ. +target_arch = ARGUMENTS.get('target_arch', None) + +# visual studio does not import from environment +if target_os != 'win32': + IMPORT_FROM_ENV =['CC', 'CXX', 'CFLAGS', 'CXXFLAGS', 'ARFLAGS'] +else: + IMPORT_FROM_ENV =[] + + +debug = int(ARGUMENTS.get( 'debug', 0 )) + +nfd_files = ['nfd_common.c'] + +# Due to a Scons limitation, TARGET_ARCH cannot be appended to an existing environment. +if target_arch != None: + nfd_env = Environment( TARGET_ARCH=target_arch ) +else: + nfd_env = Environment() + +# import specific environment variables from the command line, overriding +# Scons environment defaults +for env_key in IMPORT_FROM_ENV: + if env_key in os.environ: + print "Making %s => %s" % ( env_key, os.environ[env_key] ) + nfd_env[env_key] = os.environ[env_key] + +# Windows runtime library types +win_rtl = {'debug': '/MDd', + 'release': '/MD'} + +def set_debug(env): + if target_os == 'win32': + env.Append( CCFLAGS=['/Z7', # obj contains full symbols + win_rtl['debug'] + ]) + else: + env.Append( CFLAGS=['-g'] ) + + +def set_release(env): + if target_os == 'win32': + env.Append( CCFLAGS=[win_rtl['release'], + '/O2'] ) + else: + env.Append( CFLAGS=['-O3'] ) + + +def set_warnings(env): + if target_os == 'win32': + env.Append( CCFLAGS=['/W3'], + CPPDEFINES=['_CRT_SECURE_NO_WARNINGS'] ) + else: + env.Append( CFLAGS=['-Wall', '-pedantic'] ) + + +def get_lib_name(base, is_debug): + if is_debug: + return base + '_d' + else: + return base + + +# Cocoa OS X builds - clang +if target_os == 'darwin': + nfd_files.append('nfd_cocoa.m') + nfd_env.CC='clang -fcolor-diagnostics' + +# Linux GTK+ 3 builds - GCC +elif target_os == 'posix': + nfd_files.append('nfd_gtk.c') + nfd_env.ParseConfig( 'pkg-config --cflags gtk+-3.0' ) + +# Windows builds - Visual Studio +elif target_os == 'win32': + nfd_files.append('nfd_win.cpp') + +if debug: + set_debug(nfd_env) +else: + set_release(nfd_env) + +set_warnings(nfd_env) + +nfd_env.Append( CPPPATH=['.','./include'] ) +nfd_env.StaticLibrary( get_lib_name('nfd', debug), nfd_files ) diff --git a/Engine/lib/nativeFileDialogs/common.h b/Engine/lib/nativeFileDialogs/common.h new file mode 100644 index 0000000000..688b0b1fdc --- /dev/null +++ b/Engine/lib/nativeFileDialogs/common.h @@ -0,0 +1,21 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +void NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); + +#endif diff --git a/Engine/lib/nativeFileDialogs/include/nfd.h b/Engine/lib/nativeFileDialogs/include/nfd.h new file mode 100644 index 0000000000..03fe532069 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/include/nfd.h @@ -0,0 +1,69 @@ +/* + Native File Dialog + + User API + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_H +#define _NFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* denotes UTF-8 char */ +typedef char nfdchar_t; + +/* opaque data structure -- see NFD_PathSet_* */ +typedef struct { + nfdchar_t *buf; + size_t *indices; /* byte offsets into buf */ + size_t count; /* number of indices into buf */ +}nfdpathset_t; + +typedef enum { + NFD_ERROR, /* programmatic error */ + NFD_OKAY, /* user pressed okay, or successful return */ + NFD_CANCEL /* user pressed cancel */ +}nfdresult_t; + + +/* nfd_.c */ + +/* single file open dialog */ +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + +/* multiple file open dialog */ +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ); + +/* save dialog */ +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + +/* nfd_common.c */ + +/* get last error -- set when nfdresult_t returns NFD_ERROR */ +const char *NFD_GetError( void ); +/* get the number of entries stored in pathSet */ +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathSet ); +/* Get the UTF-8 path at offset index */ +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathSet, size_t index ); +/* Free the pathSet */ +void NFD_PathSet_Free( nfdpathset_t *pathSet ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Engine/lib/nativeFileDialogs/nfd_cocoa.m b/Engine/lib/nativeFileDialogs/nfd_cocoa.m new file mode 100644 index 0000000000..a73e15714a --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_cocoa.m @@ -0,0 +1,235 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include "nfd.h" +#include "nfd_common.h" + +static NSArray *BuildAllowedFileTypes( const char *filterList ) +{ + // Commas and semicolons are the same thing on this platform + + NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; + + char typebuf[NFD_MAX_STRLEN] = {0}; + + size_t filterListLen = strlen(filterList); + char *p_typebuf = typebuf; + for ( size_t i = 0; i < filterListLen+1; ++i ) + { + if ( filterList[i] == ',' || filterList[i] == ';' || filterList[i] == '\0' ) + { + ++p_typebuf; + *p_typebuf = '\0'; + NSString *thisType = [NSString stringWithUTF8String: typebuf]; + [buildFilterList addObject:thisType]; + p_typebuf = typebuf; + *p_typebuf = '\0'; + } + else + { + *p_typebuf = filterList[i]; + ++p_typebuf; + + } + } + + NSArray *returnArray = [NSArray arrayWithArray:buildFilterList]; + + [buildFilterList release]; + return returnArray; +} + +static void AddFilterListToDialog( NSSavePanel *dialog, const char *filterList ) +{ + if ( !filterList || strlen(filterList) == 0 ) + return; + + NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList ); + if ( [allowedFileTypes count] != 0 ) + { + [dialog setAllowedFileTypes:allowedFileTypes]; + } +} + +static void SetDefaultPath( NSSavePanel *dialog, const nfdchar_t *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + NSString *defaultPathString = [NSString stringWithUTF8String: defaultPath]; + NSURL *url = [NSURL fileURLWithPath:defaultPathString isDirectory:YES]; + [dialog setDirectoryURL:url]; +} + + +/* fixme: pathset should be pathSet */ +static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) +{ + assert(pathset); + assert([urls count]); + + pathset->count = (size_t)[urls count]; + pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + if ( !pathset->indices ) + { + return NFD_ERROR; + } + + // count the total space needed for buf + size_t bufsize = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + } + + pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + if ( !pathset->buf ) + { + return NFD_ERROR; + } + + // fill buf + nfdchar_t *p_buf = pathset->buf; + size_t count = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + const nfdchar_t *utf8Path = [path UTF8String]; + size_t byteLen = [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + memcpy( p_buf, utf8Path, byteLen ); + + ptrdiff_t index = p_buf - pathset->buf; + assert( index >= 0 ); + pathset->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:NO]; + + // Build the filter list + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + // byte count, not char count + size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); + + *outPath = NFDi_Malloc( len+1 ); + if ( !*outPath ) + { + [pool release]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ + nfdResult = NFD_OKAY; + } + [pool release]; + + return nfdResult; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:YES]; + + // Build the fiter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSArray *urls = [dialog URLs]; + + if ( [urls count] == 0 ) + { + [pool release]; + return NFD_CANCEL; + } + + if ( AllocPathSet( urls, outPaths ) == NFD_ERROR ) + { + [pool release]; + return NFD_ERROR; + } + + nfdResult = NFD_OKAY; + } + [pool release]; + + return nfdResult; +} + + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSSavePanel *dialog = [NSSavePanel savePanel]; + [dialog setExtensionHidden:NO]; + + // Build the filter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + + *outPath = NFDi_Malloc( byteLen ); + if ( !*outPath ) + { + [pool release]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, byteLen ); + nfdResult = NFD_OKAY; + } + + [pool release]; + + return nfdResult; +} diff --git a/Engine/lib/nativeFileDialogs/nfd_common.c b/Engine/lib/nativeFileDialogs/nfd_common.c new file mode 100644 index 0000000000..269fbd2135 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_common.c @@ -0,0 +1,142 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include +#include +#include "nfd_common.h" + +static char g_errorstr[NFD_MAX_STRLEN] = {0}; + +/* public routines */ + +const char *NFD_GetError( void ) +{ + return g_errorstr; +} + +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathset ) +{ + assert(pathset); + return pathset->count; +} + +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathset, size_t num ) +{ + assert(pathset); + assert(num < pathset->count); + + return pathset->buf + pathset->indices[num]; +} + +void NFD_PathSet_Free( nfdpathset_t *pathset ) +{ + assert(pathset); + NFDi_Free( pathset->indices ); + NFDi_Free( pathset->buf ); +} + +/* internal routines */ + +void *NFDi_Malloc( size_t bytes ) +{ + void *ptr = malloc(bytes); + if ( !ptr ) + NFDi_SetError("NFDi_Malloc failed."); + + return ptr; +} + +void NFDi_Free( void *ptr ) +{ + assert(ptr); + free(ptr); +} + +void NFDi_SetError( const char *msg ) +{ + int bTruncate = NFDi_SafeStrncpy( g_errorstr, msg, NFD_MAX_STRLEN ); + assert( !bTruncate ); _NFD_UNUSED(bTruncate); +} + + +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ) +{ + size_t n = maxCopy; + char *d = dst; + + assert( src ); + assert( dst ); + + while ( n > 0 && *src != '\0' ) + { + *d++ = *src++; + --n; + } + + /* Truncation case - + terminate string and return true */ + if ( n == 0 ) + { + dst[maxCopy-1] = '\0'; + return 1; + } + + /* No truncation. Append a single NULL and return. */ + *d = '\0'; + return 0; +} + + +/* adapted from microutf8 */ +size_t NFDi_UTF8_Strlen( const nfdchar_t *str ) +{ + /* This function doesn't properly check validity of UTF-8 character + sequence, it is supposed to use only with valid UTF-8 strings. */ + + size_t character_count = 0; + size_t i = 0; /* Counter used to iterate over string. */ + nfdchar_t maybe_bom[4]; + + /* If there is UTF-8 BOM ignore it. */ + if (strlen(str) > 2) + { + strncpy(maybe_bom, str, 3); + maybe_bom[3] = 0; + if (strcmp(maybe_bom, (nfdchar_t*)NFD_UTF8_BOM) == 0) + i += 3; + } + + while(str[i]) + { + if (str[i] >> 7 == 0) + { + /* If bit pattern begins with 0 we have ascii character. */ + ++character_count; + } + else if (str[i] >> 6 == 3) + { + /* If bit pattern begins with 11 it is beginning of UTF-8 byte sequence. */ + ++character_count; + } + else if (str[i] >> 6 == 2) + ; /* If bit pattern begins with 10 it is middle of utf-8 byte sequence. */ + else + { + /* In any other case this is not valid UTF-8. */ + return -1; + } + ++i; + } + + return character_count; +} + +int NFDi_IsFilterSegmentChar( char ch ) +{ + return (ch==','||ch==';'||ch=='\0'); +} + diff --git a/Engine/lib/nativeFileDialogs/nfd_common.h b/Engine/lib/nativeFileDialogs/nfd_common.h new file mode 100644 index 0000000000..a3f6b4ad64 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_common.h @@ -0,0 +1,37 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#include "nfd.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +#define NFD_UTF8_BOM "\xEF\xBB\xBF" + + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); +size_t NFDi_UTF8_Strlen( const nfdchar_t *str ); +int NFDi_IsFilterSegmentChar( char ch ); + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/Engine/lib/nativeFileDialogs/nfd_gtk.c b/Engine/lib/nativeFileDialogs/nfd_gtk.c new file mode 100644 index 0000000000..fd15a86dd4 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_gtk.c @@ -0,0 +1,330 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs +*/ + +#include +#include +#include +#include +#include "nfd.h" +#include "nfd_common.h" + + +const char INIT_FAIL_MSG[] = "gtk_init_check failed to initilaize GTK+"; + + +static void AddTypeToFilterName( const char *typebuf, char *filterName, size_t bufsize ) +{ + const char SEP[] = ", "; + + size_t len = strlen(filterName); + if ( len != 0 ) + { + strncat( filterName, SEP, bufsize - len - 1 ); + len += strlen(SEP); + } + + strncat( filterName, typebuf, bufsize - len - 1 ); +} + +static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList ) +{ + GtkFileFilter *filter; + char typebuf[NFD_MAX_STRLEN] = {0}; + const char *p_filterList = filterList; + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + + if ( !filterList || strlen(filterList) == 0 ) + return; + + filter = gtk_file_filter_new(); + while ( 1 ) + { + + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + char typebufWildcard[NFD_MAX_STRLEN]; + + /* add another type to the filter */ + if (strlen(typebuf) <= 0 || strlen(typebuf) > NFD_MAX_STRLEN-1) + { + p_filterList++; + continue; + } + + snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf ); + AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN ); + + gtk_file_filter_add_pattern( filter, typebufWildcard ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char) * NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to the dialog */ + + gtk_file_filter_set_name( filter, filterName ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); + + filterName[0] = '\0'; + + if ( *p_filterList == '\0' ) + break; + + filter = gtk_file_filter_new(); + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList ) ) + { + *p_typebuf = *p_filterList; + p_typebuf++; + } + + p_filterList++; + } + + /* always append a wildcard option to the end*/ + + filter = gtk_file_filter_new(); + gtk_file_filter_set_name( filter, "*.*" ); + gtk_file_filter_add_pattern( filter, "*" ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); +} + +static void SetDefaultPath( GtkWidget *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + /* GTK+ manual recommends not specifically setting the default path. + We do it anyway in order to be consistent across platforms. + + If consistency with the native OS is preferred, this is the line + to comment out. -ml */ + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), defaultPath ); +} + +static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet ) +{ + size_t bufSize = 0; + GSList *node; + nfdchar_t *p_buf; + size_t count = 0; + + assert(fileList); + assert(pathSet); + + pathSet->count = (size_t)g_slist_length( fileList ); + assert( pathSet->count > 0 ); + + pathSet->indices = NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total space needed for buf */ + for ( node = fileList; node; node = node->next ) + { + assert(node->data); + bufSize += strlen( (const gchar*)node->data ) + 1; + } + + pathSet->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + p_buf = pathSet->buf; + for ( node = fileList; node; node = node->next ) + { + nfdchar_t *path = (nfdchar_t*)(node->data); + size_t byteLen = strlen(path)+1; + ptrdiff_t index; + + memcpy( p_buf, path, byteLen ); + g_free(node->data); + + index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + g_slist_free( fileList ); + + return NFD_OKAY; +} + +static void WaitForCleanup(void) +{ + while (gtk_events_pending()) + gtk_main_iteration(); +} + +/* public */ + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open File", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free( filename ); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open Files", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + GSList *fileList = gtk_file_chooser_get_filenames( GTK_FILE_CHOOSER(dialog) ); + if ( AllocPathSet( fileList, outPaths ) == NFD_ERROR ) + { + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Save File", + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Save", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free(filename); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} diff --git a/Engine/lib/nativeFileDialogs/nfd_win.cpp b/Engine/lib/nativeFileDialogs/nfd_win.cpp new file mode 100644 index 0000000000..b065d69cb7 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_win.cpp @@ -0,0 +1,619 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +/* only locally define UNICODE in this compilation unit */ +#ifndef UNICODE +#define UNICODE +#endif + + +#include +#include +#include +#include +#include +#include + +#include "nfd_common.h" + + +// allocs the space in outPath -- call free() +static void CopyWCharToNFDChar( const wchar_t *inStr, nfdchar_t **outStr ) +{ + int inStrCharacterCount = static_cast(wcslen(inStr)); + int bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + inStr, inStrCharacterCount, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + bytesNeeded += 1; + + *outStr = (nfdchar_t*)NFDi_Malloc( bytesNeeded ); + if ( !*outStr ) + return; + + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + *outStr, bytesNeeded, + NULL, NULL ); + assert( bytesWritten ); _NFD_UNUSED( bytesWritten ); +} + +/* includes NULL terminator byte in return */ +static size_t GetUTF8ByteCountForWChar( const wchar_t *str ) +{ + int bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + str, -1, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + return bytesNeeded+1; +} + +// write to outPtr -- no free() necessary. No memory stomp tests are done -- they must be done +// before entering this function. +static int CopyWCharToExistingNFDCharBuffer( const wchar_t *inStr, nfdchar_t *outPtr ) +{ + int inStrCharacterCount = static_cast(wcslen(inStr)); + int bytesNeeded = static_cast(GetUTF8ByteCountForWChar( inStr )); + + /* invocation copies null term */ + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + outPtr, bytesNeeded, + NULL, 0 ); + assert( bytesWritten ); + + return bytesWritten; + +} + + +// allocs the space in outStr -- call free() +static void CopyNFDCharToWChar( const nfdchar_t *inStr, wchar_t **outStr ) +{ + int inStrByteCount = static_cast(strlen(inStr)); + int charsNeeded = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + NULL, 0 ); + assert( charsNeeded ); + assert( !*outStr ); + charsNeeded += 1; // terminator + + *outStr = (wchar_t*)NFDi_Malloc( charsNeeded * sizeof(wchar_t) ); + if ( !*outStr ) + return; + + int ret = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + *outStr, charsNeeded); + (*outStr)[charsNeeded-1] = '\0'; + +#ifdef _DEBUG + int inStrCharacterCount = static_cast(NFDi_UTF8_Strlen(inStr)); + assert( ret == inStrCharacterCount ); +#else + _NFD_UNUSED(ret); +#endif +} + + +/* ext is in format "jpg", no wildcards or separators */ +static int AppendExtensionToSpecBuf( const char *ext, char *specBuf, size_t specBufLen ) +{ + const char SEP[] = ";"; + assert( specBufLen > strlen(ext)+3 ); + + if ( strlen(specBuf) > 0 ) + { + strncat( specBuf, SEP, specBufLen - strlen(specBuf) - 1 ); + specBufLen += strlen(SEP); + } + + char extWildcard[NFD_MAX_STRLEN]; + int bytesWritten = sprintf_s( extWildcard, NFD_MAX_STRLEN, "*.%s", ext ); + assert( bytesWritten == strlen(ext)+2 ); + + strncat( specBuf, extWildcard, specBufLen - strlen(specBuf) - 1 ); + + return NFD_OKAY; +} + +static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const char *filterList ) +{ + const wchar_t EMPTY_WSTR[] = L""; + const wchar_t WILDCARD[] = L"*.*"; + + if ( !filterList || strlen(filterList) == 0 ) + return NFD_OKAY; + + // Count rows to alloc + UINT filterCount = 1; /* guaranteed to have one filter on a correct, non-empty parse */ + const char *p_filterList; + for ( p_filterList = filterList; *p_filterList; ++p_filterList ) + { + if ( *p_filterList == ';' ) + ++filterCount; + } + + assert(filterCount); + if ( !filterCount ) + { + NFDi_SetError("Error parsing filters."); + return NFD_ERROR; + } + + /* filterCount plus 1 because we hardcode the *.* wildcard after the while loop */ + COMDLG_FILTERSPEC *specList = (COMDLG_FILTERSPEC*)NFDi_Malloc( sizeof(COMDLG_FILTERSPEC) * (filterCount + 1) ); + if ( !specList ) + { + return NFD_ERROR; + } + for (size_t i = 0; i < filterCount+1; ++i ) + { + specList[i].pszName = NULL; + specList[i].pszSpec = NULL; + } + + size_t specIdx = 0; + p_filterList = filterList; + char typebuf[NFD_MAX_STRLEN] = {0}; /* one per comma or semicolon */ + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + + char specbuf[NFD_MAX_STRLEN] = {0}; /* one per semicolon */ + + while ( 1 ) + { + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + /* append a type to the specbuf (pending filter) */ + AppendExtensionToSpecBuf( typebuf, specbuf, NFD_MAX_STRLEN ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to specList */ + + // Empty filter name -- Windows describes them by extension. + specList[specIdx].pszName = EMPTY_WSTR; + CopyNFDCharToWChar( specbuf, (wchar_t**)&specList[specIdx].pszSpec ); + + memset( specbuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + ++specIdx; + if ( specIdx == filterCount ) + break; + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList )) + { + *p_typebuf = *p_filterList; + ++p_typebuf; + } + + ++p_filterList; + } + + /* Add wildcard */ + specList[specIdx].pszSpec = WILDCARD; + specList[specIdx].pszName = EMPTY_WSTR; + + fileOpenDialog->SetFileTypes( filterCount+1, specList ); + + /* free speclist */ + for ( size_t i = 0; i < filterCount; ++i ) + { + NFDi_Free( (void*)specList[i].pszSpec ); + } + NFDi_Free( specList ); + + return NFD_OKAY; +} + +static nfdresult_t AllocPathSet( IShellItemArray *shellItems, nfdpathset_t *pathSet ) +{ + const char ERRORMSG[] = "Error allocating pathset."; + + assert(shellItems); + assert(pathSet); + + // How many items in shellItems? + DWORD numShellItems; + HRESULT result = shellItems->GetCount(&numShellItems); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + pathSet->count = static_cast(numShellItems); + assert( pathSet->count > 0 ); + + pathSet->indices = (size_t*)NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total bytes needed for buf */ + size_t bufSize = 0; + for ( DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + // Calculate length of name with UTF-8 encoding + bufSize += GetUTF8ByteCountForWChar( name ); + } + + assert(bufSize); + + pathSet->buf = (nfdchar_t*)NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + memset( pathSet->buf, 0, sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + nfdchar_t *p_buf = pathSet->buf; + for (DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + int bytesWritten = CopyWCharToExistingNFDCharBuffer(name, p_buf); + + ptrdiff_t index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[i] = static_cast(index); + + p_buf += bytesWritten; + } + + return NFD_OKAY; +} + + +static nfdresult_t SetDefaultPath( IFileDialog *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return NFD_OKAY; + + wchar_t *defaultPathW = {0}; + CopyNFDCharToWChar( defaultPath, &defaultPathW ); + + IShellItem *folder; + HRESULT result = SHCreateItemFromParsingName( defaultPathW, NULL, IID_PPV_ARGS(&folder) ); + + // Valid non results. + if ( result == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || result == HRESULT_FROM_WIN32(ERROR_INVALID_DRIVE) ) + { + NFDi_Free( defaultPathW ); + return NFD_OKAY; + } + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Error creating ShellItem"); + NFDi_Free( defaultPathW ); + return NFD_ERROR; + } + + // Could also call SetDefaultFolder(), but this guarantees defaultPath -- more consistency across API. + dialog->SetFolder( folder ); + + NFDi_Free( defaultPathW ); + folder->Release(); + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + goto end; + } + + ::IFileOpenDialog *fileOpenDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem(NULL); + result = fileOpenDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + return NFD_ERROR; + } + + ::IFileOpenDialog *fileOpenDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Set a flag for multiple options + DWORD dwFlags; + result = fileOpenDialog->GetOptions(&dwFlags); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get options."); + goto end; + } + result = fileOpenDialog->SetOptions(dwFlags | FOS_ALLOWMULTISELECT); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not set options."); + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + IShellItemArray *shellItems; + result = fileOpenDialog->GetResults( &shellItems ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell items."); + goto end; + } + + if ( AllocPathSet( shellItems, outPaths ) == NFD_ERROR ) + { + goto end; + } + + shellItems->Release(); + nfdResult = NFD_OKAY; + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + return NFD_ERROR; + } + + ::IFileSaveDialog *fileSaveDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileSaveDialog, NULL, + CLSCTX_ALL, ::IID_IFileSaveDialog, + reinterpret_cast(&fileSaveDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileSaveDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileSaveDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileSaveDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem; + result = fileSaveDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} diff --git a/Engine/lib/sdl/Android.mk b/Engine/lib/sdl/Android.mk index 4f94082042..13d765f579 100644 --- a/Engine/lib/sdl/Android.mk +++ b/Engine/lib/sdl/Android.mk @@ -34,7 +34,7 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/filesystem/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \ $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \ @@ -44,7 +44,7 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/test/*.c)) + $(wildcard $(LOCAL_PATH)/src/test/*.c)) LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid @@ -61,7 +61,7 @@ LOCAL_MODULE := SDL2_static LOCAL_MODULE_FILENAME := libSDL2 -LOCAL_SRC_FILES += $(LOCAL_PATH)/src/main/android/SDL_android_main.c +LOCAL_SRC_FILES += $(subst $(LOCAL_PATH)/,,$(LOCAL_PATH)/src/main/android/SDL_android_main.c) LOCAL_LDLIBS := LOCAL_EXPORT_LDLIBS := -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit -ldl -lGLESv1_CM -lGLESv2 -llog -landroid diff --git a/Engine/lib/sdl/CMakeLists.txt b/Engine/lib/sdl/CMakeLists.txt index 75a89378b8..74356b60f0 100644 --- a/Engine/lib/sdl/CMakeLists.txt +++ b/Engine/lib/sdl/CMakeLists.txt @@ -2,7 +2,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there") endif() -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8) project(SDL2 C) include(CheckFunctionExists) include(CheckLibraryExists) @@ -29,9 +29,9 @@ include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake) # set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0. set(SDL_MAJOR_VERSION 2) set(SDL_MINOR_VERSION 0) -set(SDL_MICRO_VERSION 3) -set(SDL_INTERFACE_AGE 1) -set(SDL_BINARY_AGE 3) +set(SDL_MICRO_VERSION 4) +set(SDL_INTERFACE_AGE 0) +set(SDL_BINARY_AGE 4) set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}") # Calculate a libtool-like version number @@ -117,6 +117,12 @@ else() set(UNIX_OR_MAC_SYS OFF) endif() +if (UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN) # JavaScript does not yet have threading support, so disable pthreads when building for Emscripten. + set(SDL_PTHREADS_ENABLED_BY_DEFAULT ON) +else() + set(SDL_PTHREADS_ENABLED_BY_DEFAULT OFF) +endif() + # Default option knobs if(APPLE OR ARCH_64) set(OPT_DEF_SSEMATH ON) @@ -144,7 +150,7 @@ if("$ENV{CFLAGS}" STREQUAL "") if(USE_GCC OR USE_CLANG) set(CMAKE_C_FLAGS "-g -O3") endif() -else("$ENV{CFLAGS}" STREQUAL "") +else() set(CMAKE_C_FLAGS "$ENV{CFLAGS}") list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}") endif() @@ -161,8 +167,15 @@ if(MSVC) if(${flag_var} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif() - endforeach(flag_var) + endforeach() endif() + + # Make sure /RTC1 is disabled, otherwise it will use functions from the CRT + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}") + endforeach(flag_var) endif() # Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config, @@ -170,13 +183,19 @@ endif() set(SDL_LIBS "-lSDL2") set(SDL_CFLAGS "") +# Emscripten toolchain has a nonempty default value for this, and the checks +# in this file need to change that, so remember the original value, and +# restore back to that afterwards. For check_function_exists() to work in +# Emscripten, this value must be at its default value. +set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + if(CYGWIN) # We build SDL on cygwin without the UNIX emulation layer include_directories("-I/usr/include/mingw") set(CMAKE_REQUIRED_FLAGS "-mno-cygwin") check_c_source_compiles("int main(int argc, char **argv) {}" HAVE_GCC_NO_CYGWIN) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) if(HAVE_GCC_NO_CYGWIN) list(APPEND EXTRA_LDFLAGS "-mno-cygwin") list(APPEND SDL_LIBS "-mno-cygwin") @@ -188,12 +207,35 @@ add_definitions(-DUSING_GENERATED_CONFIG_H) # General includes include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include) +# All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so +# you only need to have a platform override them if they are disabling. +set(OPT_DEF_ASM TRUE) +if(EMSCRIPTEN) + # Set up default values for the currently supported set of subsystems: + # Emscripten/Javascript does not have assembly support, a dynamic library + # loading architecture, low-level CPU inspection or multithreading. + set(OPT_DEF_ASM FALSE) + set(SDL_SHARED_ENABLED_BY_DEFAULT OFF) + set(SDL_ATOMIC_ENABLED_BY_DEFAULT OFF) + set(SDL_THREADS_ENABLED_BY_DEFAULT OFF) + set(SDL_LOADSO_ENABLED_BY_DEFAULT OFF) + set(SDL_CPUINFO_ENABLED_BY_DEFAULT OFF) + set(SDL_DLOPEN_ENABLED_BY_DEFAULT OFF) +endif() + +if (NOT DEFINED SDL_SHARED_ENABLED_BY_DEFAULT) + set(SDL_SHARED_ENABLED_BY_DEFAULT ON) +endif() + set(SDL_SUBSYSTEMS Atomic Audio Video Render Events Joystick Haptic Power Threads Timers - File Loadso CPUinfo Filesystem) + File Loadso CPUinfo Filesystem Dlopen) foreach(_SUB ${SDL_SUBSYSTEMS}) string(TOUPPER ${_SUB} _OPT) - option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ON) + if (NOT DEFINED SDL_${_OPT}_ENABLED_BY_DEFAULT) + set(SDL_${_OPT}_ENABLED_BY_DEFAULT ON) + endif() + option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ${SDL_${_OPT}_ENABLED_BY_DEFAULT}) endforeach() option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto") @@ -212,13 +254,13 @@ set_option(DUMMYAUDIO "Support the dummy audio driver" ON) set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF) dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF) set_option(FUSIONSOUND "Use FusionSound audio driver" OFF) -dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND_SHARED" OFF) +dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF) set_option(VIDEO_DUMMY "Use dummy video driver" ON) set_option(VIDEO_OPENGL "Include OpenGL support" ON) set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON) -set_option(PTHREADS "Use POSIX threads for multi-threading" ${UNIX_OR_MAC_SYS}) +set_option(PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_ENABLED_BY_DEFAULT}) dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF) -set_option(SDL_DLOPEN "Use dlopen for shared object loading" ON) +set_option(SDL_DLOPEN "Use dlopen for shared object loading" ${SDL_DLOPEN_ENABLED_BY_DEFAULT}) set_option(OSS "Support the OSS audio API" ${UNIX_SYS}) set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS}) dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF) @@ -235,8 +277,12 @@ set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS}) set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF) set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS}) set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS}) -set_option(VIDEO_WAYLAND "Use Wayland video driver" OFF) #${UNIX_SYS}) -set_option(VIDEO_MIR "Use Mir video driver" OFF) #${UNIX_SYS}) +set_option(VIDEO_WAYLAND "Use Wayland video driver" ${UNIX_SYS}) +dep_option(WAYLAND_SHARED "Dynamically load Wayland support" ON "VIDEO_WAYLAND" OFF) +dep_option(VIDEO_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "VIDEO_WAYLAND" OFF) +set_option(VIDEO_MIR "Use Mir video driver" ${UNIX_SYS}) +dep_option(MIR_SHARED "Dynamically load Mir support" ON "VIDEO_MIR" OFF) +set_option(VIDEO_RPI "Use Raspberry Pi video driver" ${UNIX_SYS}) dep_option(X11_SHARED "Dynamically load X11 support" ON "VIDEO_X11" OFF) set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm) foreach(_SUB ${SDL_X11_OPTIONS}) @@ -246,10 +292,11 @@ endforeach() set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE}) set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS}) +set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS}) # TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here # The options below are for compatibility to configure's default behaviour. -set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library") +set(SDL_SHARED ${SDL_SHARED_ENABLED_BY_DEFAULT} CACHE BOOL "Build a shared version of the library") set(SDL_STATIC ON CACHE BOOL "Build a static version of the library") # General source files @@ -315,7 +362,7 @@ if(USE_GCC OR USE_CLANG) set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2") check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}" HAVE_GCC_PREFERRED_STACK_BOUNDARY) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror") check_c_source_compiles(" @@ -326,14 +373,26 @@ if(USE_GCC OR USE_CLANG) if(HAVE_GCC_FVISIBILITY) list(APPEND EXTRA_CFLAGS "-fvisibility=hidden") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) check_c_compiler_flag(-Wall HAVE_GCC_WALL) if(HAVE_GCC_WALL) + list(APPEND EXTRA_CFLAGS "-Wall") if(HAIKU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar") endif() endif() + check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW) + if(HAVE_GCC_WSHADOW) + list(APPEND EXTRA_CFLAGS "-Wshadow") + endif() + + set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined") + check_c_compiler_flag("" HAVE_NO_UNDEFINED) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) + if(HAVE_NO_UNDEFINED) + list(APPEND EXTRA_LDFLAGS "-Wl,--no-undefined") + endif() endif() if(ASSEMBLY) @@ -362,7 +421,7 @@ if(ASSEMBLY) if(HAVE_MMX) list(APPEND EXTRA_CFLAGS "-mmmx") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(3DNOW) @@ -379,7 +438,7 @@ if(ASSEMBLY) if(HAVE_3DNOW) list(APPEND EXTRA_CFLAGS "-m3dnow") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSE) @@ -402,7 +461,7 @@ if(ASSEMBLY) if(HAVE_SSE) list(APPEND EXTRA_CFLAGS "-msse") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSE2) @@ -425,7 +484,7 @@ if(ASSEMBLY) if(HAVE_SSE2) list(APPEND EXTRA_CFLAGS "-msse2") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSEMATH) @@ -450,7 +509,7 @@ if(ASSEMBLY) return vec_splat_u32(0); } int main(int argc, char **argv) { }" HAVE_ALTIVEC) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR) set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set list(APPEND EXTRA_CFLAGS "-maltivec") @@ -472,7 +531,7 @@ if(ASSEMBLY) set(SDL_ASSEMBLY_ROUTINES 1) endif() # TODO: -#else(ASSEMBLY) +#else() # if(USE_GCC OR USE_CLANG) # list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx") # endif() @@ -494,7 +553,7 @@ if(LIBC) strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp _stricmp _strnicmp sscanf atan atan2 acos asin ceil copysign cos - cosf fabs floor log pow scalbn sin sinf sqrt) + cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf) string(TOUPPER ${_FN} _UPPER) set(HAVE_${_UPPER} 1) endforeach() @@ -504,7 +563,7 @@ if(LIBC) set(HAVE_M_PI 1) add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI set(STDC_HEADERS 1) - else(WINDOWS AND NOT MINGW) + else() set(HAVE_LIBC TRUE) check_include_file(sys/types.h HAVE_SYS_TYPES_H) foreach(_HEADER @@ -541,7 +600,7 @@ if(LIBC) set(CMAKE_REQUIRED_LIBRARIES m) foreach(_FN atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin - sinf sqrt) + sinf sqrt sqrtf tan tanf acos asin) string(TOUPPER ${_FN} _UPPER) set(_HAVEVAR "HAVE_${_UPPER}") check_function_exists("${_FN}" ${_HAVEVAR}) @@ -553,11 +612,20 @@ if(LIBC) check_library_exists(iconv iconv_open "" HAVE_LIBICONV) if(HAVE_LIBICONV) list(APPEND EXTRA_LIBS iconv) + set(HAVE_ICONV 1) + endif() + + if(NOT APPLE) + check_include_file(alloca.h HAVE_ALLOCA_H) + check_function_exists(alloca HAVE_ALLOCA) + else() + set(HAVE_ALLOCA_H 1) + set(HAVE_ALLOCA 1) endif() check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION) endif() -else(LIBC) +else() if(WINDOWS) set(HAVE_STDARG_H 1) set(HAVE_STDDEF_H 1) @@ -627,8 +695,96 @@ if(SDL_VIDEO) endif() endif() +if(ANDROID) + file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES}) + file(GLOB ANDROID_MAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_MAIN_SOURCES}) + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_ANDROID 1) + file(GLOB ANDROID_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_AUDIO_SOURCES}) + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_ANDROID 1) + file(GLOB ANDROID_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_FILESYSTEM_SOURCES}) + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_ANDROID 1) + file(GLOB ANDROID_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_JOYSTICK_SOURCES}) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_ANDROID 1) + file(GLOB ANDROID_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_POWER_SOURCES}) + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_ANDROID 1) + file(GLOB ANDROID_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_VIDEO_SOURCES}) + set(HAVE_SDL_VIDEO TRUE) + + #enable gles + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_VIDEO_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + endif() + endif() + list(APPEND EXTRA_LDFLAGS "-Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit") +endif() + # Platform-specific options and settings -if(UNIX AND NOT APPLE) +if(EMSCRIPTEN) + # Hide noisy warnings that intend to aid mostly during initial stages of porting a new + # project. Uncomment at will for verbose cross-compiling -I/../ path info. + add_definitions(-Wno-warn-absolute-paths) + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_EMSCRIPTEN 1) + file(GLOB EM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_AUDIO_SOURCES}) + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_EMSCRIPTEN 1) + file(GLOB EM_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_FILESYSTEM_SOURCES}) + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_EMSCRIPTEN 1) + file(GLOB EM_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_JOYSTICK_SOURCES}) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_EMSCRIPTEN 1) + file(GLOB EM_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_POWER_SOURCES}) + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_EMSCRIPTEN 1) + file(GLOB EM_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_VIDEO_SOURCES}) + set(HAVE_SDL_VIDEO TRUE) + + #enable gles + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_VIDEO_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + endif() + endif() +elseif(UNIX AND NOT APPLE) if(SDL_AUDIO) if(SYSV5 OR SOLARIS OR HPUX) set(SDL_AUDIO_DRIVER_SUNAUDIO 1) @@ -657,12 +813,15 @@ if(UNIX AND NOT APPLE) endif() if(SDL_VIDEO) + # Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails! + CheckRPI() CheckX11() CheckMir() CheckDirectFB() CheckOpenGLX11() CheckOpenGLESX11() CheckWayland() + CheckVivante() endif() if(LINUX) @@ -720,7 +879,7 @@ if(UNIX AND NOT APPLE) if(SDL_JOYSTICK) CheckUSBHID() # seems to be BSD specific - limit the test to BSD only? - if(LINUX) + if(LINUX AND NOT ANDROID) set(SDL_JOYSTICK_LINUX 1) file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) @@ -735,7 +894,7 @@ if(UNIX AND NOT APPLE) if(FOUND_CLOCK_GETTIME) list(APPEND EXTRA_LIBS rt) set(HAVE_CLOCK_GETTIME 1) - else(FOUND_CLOCK_GETTIME) + else() check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME) if(FOUND_CLOCK_GETTIME) set(HAVE_CLOCK_GETTIME 1) @@ -792,25 +951,52 @@ elseif(WINDOWS) file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) + if(MSVC) + # Prevent codegen that would use the VC runtime libraries. + add_definitions(/GS-) + if(NOT ARCH_64) + add_definitions(/arch:SSE) + endif() + endif() + # Check for DirectX if(DIRECTX) - if("$ENV{DXSDK_DIR}" STREQUAL "") - message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set") + if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) + set(USE_WINSDK_DIRECTX TRUE) + endif() + if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) + if("$ENV{DXSDK_DIR}" STREQUAL "") + message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set") + endif() + set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"") + endif() + + if(HAVE_WIN32_CC) + # xinput.h may need windows.h, but doesn't include it itself. + check_c_source_compiles(" + #include + #include + int main(int argc, char **argv) { }" HAVE_XINPUT_H) + else() + check_include_file(xinput.h HAVE_XINPUT_H) endif() - set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"") + check_include_file(d3d9.h HAVE_D3D_H) check_include_file(d3d11_1.h HAVE_D3D11_H) check_include_file(ddraw.h HAVE_DDRAW_H) check_include_file(dsound.h HAVE_DSOUND_H) check_include_file(dinput.h HAVE_DINPUT_H) check_include_file(xaudio2.h HAVE_XAUDIO2_H) + check_include_file(dxgi.h HAVE_DXGI_H) if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H) set(HAVE_DIRECTX TRUE) + if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks - link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}) - include_directories($ENV{DXSDK_DIR}\\Include) + link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}) + include_directories($ENV{DXSDK_DIR}\\Include) + endif() endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SDL_AUDIO) @@ -905,24 +1091,51 @@ elseif(WINDOWS) set(SDL_VIDEO_RENDER_OGL 1) set(HAVE_VIDEO_OPENGL TRUE) endif() + + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + set(HAVE_VIDEO_OPENGLES TRUE) + endif() endif() if(SDL_JOYSTICK) + file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/windows/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) if(HAVE_DINPUT_H) set(SDL_JOYSTICK_DINPUT 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_dxjoystick.c) - list(APPEND EXTRA_LIBS dinput8 dxguid dxerr) - else() + list(APPEND EXTRA_LIBS dinput8 dxguid) + if(CMAKE_COMPILER_IS_MINGW) + list(APPEND EXTRA_LIBS dxerr8) + elseif (NOT USE_WINSDK_DIRECTX) + list(APPEND EXTRA_LIBS dxerr) + endif() + endif() + if(HAVE_XINPUT_H) + set(SDL_JOYSTICK_XINPUT 1) + endif() + if(NOT HAVE_DINPUT_H AND NOT HAVE_XINPUT_H) set(SDL_JOYSTICK_WINMM 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_mmjoystick.c) endif() set(HAVE_SDL_JOYSTICK TRUE) - endif() - if(SDL_HAPTIC AND HAVE_DINPUT_H) - set(SDL_HAPTIC_DINPUT 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/haptic/windows/SDL_syshaptic.c) - set(HAVE_SDL_HAPTIC TRUE) + if(SDL_HAPTIC) + if(HAVE_DINPUT_H OR HAVE_XINPUT_H) + file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/windows/*.c) + if(HAVE_DINPUT_H) + set(SDL_HAPTIC_DINPUT 1) + endif() + if(HAVE_XINPUT_H) + set(SDL_HAPTIC_XINPUT 1) + endif() + else() + file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) + set(SDL_HAPTIC_DUMMY 1) + endif() + set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) + set(HAVE_SDL_HAPTIC TRUE) + endif() endif() file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc) @@ -938,17 +1151,18 @@ elseif(APPLE) # Requires the darwin file implementation if(SDL_FILE) - file(GLOB EXTRA_SOURCES ${PROJECT_SOURCE_DIR}/src/file/cocoa/*.m) + file(GLOB EXTRA_SOURCES ${SDL2_SOURCE_DIR}/src/file/cocoa/*.m) set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES}) set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C) set(HAVE_SDL_FILE TRUE) set(SDL_FRAMEWORK_COCOA 1) + set(SDL_FRAMEWORK_COREVIDEO 1) else() message_error("SDL_FILE must be enabled to build on MacOS X") endif() if(SDL_AUDIO) - set(MACOSX_COREAUDIO 1) + set(SDL_AUDIO_DRIVER_COREAUDIO 1) file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES}) set(HAVE_SDL_AUDIO TRUE) @@ -1002,6 +1216,10 @@ elseif(APPLE) endif() # Actually load the frameworks at the end so we don't duplicate include. + if(SDL_FRAMEWORK_COREVIDEO) + find_library(COREVIDEO CoreVideo) + list(APPEND EXTRA_LIBS ${COREVIDEO}) + endif() if(SDL_FRAMEWORK_COCOA) find_library(COCOA_LIBRARY Cocoa) list(APPEND EXTRA_LIBS ${COCOA_LIBRARY}) @@ -1034,10 +1252,6 @@ elseif(APPLE) set(SDL_VIDEO_OPENGL 1) set(SDL_VIDEO_OPENGL_CGL 1) set(SDL_VIDEO_RENDER_OGL 1) - if(DARWIN) - find_library(OpenGL_LIBRARY OpenGL) - list(APPEND EXTRA_LIBRARIES ${OpenGL_LIBRARY}) - endif() set(HAVE_VIDEO_OPENGL TRUE) endif() endif() @@ -1159,14 +1373,14 @@ if(NOT WINDOWS OR CYGWIN) if(SDL_STATIC) set(ENABLE_STATIC_TRUE "") set(ENABLE_STATIC_FALSE "#") - else(SDL_STATIC) + else() set(ENABLE_STATIC_TRUE "#") set(ENABLE_STATIC_FALSE "") endif() if(SDL_SHARED) set(ENABLE_SHARED_TRUE "") set(ENABLE_SHARED_FALSE "#") - else(SDL_SHARED) + else() set(ENABLE_SHARED_TRUE "#") set(ENABLE_SHARED_FALSE "") endif() @@ -1247,14 +1461,20 @@ if(SDL_SHARED) VERSION ${LT_VERSION} SOVERSION ${LT_REVISION} OUTPUT_NAME "SDL2-${LT_RELEASE}") - else(UNIX) + else() set_target_properties(SDL2 PROPERTIES VERSION ${SDL_VERSION} SOVERSION ${LT_REVISION} OUTPUT_NAME "SDL2") endif() - set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) - target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) + if(MSVC) + # Don't try to link with the default set of libraries. + set_target_properties(SDL2 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB") + set_target_properties(SDL2 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB") + set_target_properties(SDL2 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB") + endif() + set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) + target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) endif() if(SDL_STATIC) @@ -1275,7 +1495,8 @@ endif() ##### Installation targets ##### install(TARGETS ${_INSTALL_LIBS} LIBRARY DESTINATION "lib${LIB_SUFFIX}" - ARCHIVE DESTINATION "lib${LIB_SUFFIX}") + ARCHIVE DESTINATION "lib${LIB_SUFFIX}" + RUNTIME DESTINATION bin) file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h) file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h) @@ -1296,14 +1517,21 @@ if(NOT WINDOWS OR CYGWIN) if(FREEBSD) # FreeBSD uses ${PREFIX}/libdata/pkgconfig install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig") - else(FREEBSD) + else() install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "lib${LIB_SUFFIX}/pkgconfig") endif() install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin) # TODO: what about the .spec file? Is it only needed for RPM creation? install(FILES "${SDL2_SOURCE_DIR}/sdl2.m4" DESTINATION "share/aclocal") -else() - install(TARGETS SDL2 RUNTIME DESTINATION bin) endif() +##### Uninstall target ##### + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) diff --git a/Engine/lib/sdl/COPYING.txt b/Engine/lib/sdl/COPYING.txt index a17cd0dcf6..dd9574e06e 100644 --- a/Engine/lib/sdl/COPYING.txt +++ b/Engine/lib/sdl/COPYING.txt @@ -1,6 +1,6 @@ Simple DirectMedia Layer -Copyright (C) 1997-2014 Sam Lantinga +Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/INSTALL.txt b/Engine/lib/sdl/INSTALL.txt index 5bd27c51f4..66e5706f78 100644 --- a/Engine/lib/sdl/INSTALL.txt +++ b/Engine/lib/sdl/INSTALL.txt @@ -9,7 +9,7 @@ To compile and install SDL: * Run './configure; make; make install' Mac OS X with Xcode: - * Read README-macosx.txt + * Read docs/README-macosx.md Mac OS X from the command line: * Run './configure; make; make install' @@ -18,13 +18,13 @@ To compile and install SDL: * Run './configure; make; make install' Android: - * Read README-android.txt + * Read docs/README-android.md iOS: - * Read README-ios.txt + * Read docs/README-ios.md Using Cmake: - * Read README-cmake.txt + * Read docs/README-cmake.md 2. Look at the example programs in ./test, and check out the online documentation at http://wiki.libsdl.org/ diff --git a/Engine/lib/sdl/Makefile.in b/Engine/lib/sdl/Makefile.in index da42661c51..b66e0f5e24 100644 --- a/Engine/lib/sdl/Makefile.in +++ b/Engine/lib/sdl/Makefile.in @@ -39,18 +39,28 @@ SDLMAIN_OBJECTS = @SDLMAIN_OBJECTS@ SDLTEST_TARGET = libSDL2_test.a SDLTEST_OBJECTS = @SDLTEST_OBJECTS@ -SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake configure configure.in debian include Makefile.* sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in src test VisualC.html VisualC Xcode Xcode-iOS +SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.in debian docs include Makefile.* sdl2-config.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in src test VisualC.html VisualC VisualC-WinRT Xcode Xcode-iOS GEN_DIST = SDL2.spec +ifneq ($V,1) +RUN_CMD_AR = @echo " AR " $@; +RUN_CMD_CC = @echo " CC " $@; +RUN_CMD_CXX = @echo " CXX " $@; +RUN_CMD_LTLINK = @echo " LTLINK" $@; +RUN_CMD_RANLIB = @echo " RANLIB" $@; +LIBTOOL += --quiet +endif + HDRS = \ SDL.h \ SDL_assert.h \ SDL_atomic.h \ SDL_audio.h \ - SDL_bits.h \ + SDL_bits.h \ SDL_blendmode.h \ SDL_clipboard.h \ SDL_cpuinfo.h \ + SDL_egl.h \ SDL_endian.h \ SDL_error.h \ SDL_events.h \ @@ -70,8 +80,13 @@ HDRS = \ SDL_mutex.h \ SDL_name.h \ SDL_opengl.h \ + SDL_opengl_glext.h \ SDL_opengles.h \ + SDL_opengles2_gl2ext.h \ + SDL_opengles2_gl2.h \ + SDL_opengles2_gl2platform.h \ SDL_opengles2.h \ + SDL_opengles2_khrplatform.h \ SDL_pixels.h \ SDL_platform.h \ SDL_power.h \ @@ -123,15 +138,15 @@ update-revision: .PHONY: all update-revision install install-bin install-hdrs install-lib install-data uninstall uninstall-bin uninstall-hdrs uninstall-lib uninstall-data clean distclean dist $(OBJECTS:.lo=.d) $(objects)/$(TARGET): $(OBJECTS) $(VERSION_OBJECTS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) + $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CC --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) $(objects)/$(SDLMAIN_TARGET): $(SDLMAIN_OBJECTS) - $(AR) cru $@ $(SDLMAIN_OBJECTS) - $(RANLIB) $@ + $(RUN_CMD_AR)$(AR) cru $@ $(SDLMAIN_OBJECTS) + $(RUN_CMD_RANLIB)$(RANLIB) $@ $(objects)/$(SDLTEST_TARGET): $(SDLTEST_OBJECTS) - $(AR) cru $@ $(SDLTEST_OBJECTS) - $(RANLIB) $@ + $(RUN_CMD_AR)$(AR) cru $@ $(SDLTEST_OBJECTS) + $(RUN_CMD_RANLIB)$(RANLIB) $@ install: all install-bin install-hdrs install-lib install-data install-bin: @@ -161,6 +176,8 @@ install-data: $(INSTALL) -m 644 $(srcdir)/sdl2.m4 $(DESTDIR)$(datadir)/aclocal/sdl2.m4 $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/pkgconfig $(INSTALL) -m 644 sdl2.pc $(DESTDIR)$(libdir)/pkgconfig + $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/cmake/SDL2 + $(INSTALL) -m 644 sdl2-config.cmake $(DESTDIR)$(libdir)/cmake/SDL2 uninstall: uninstall-bin uninstall-hdrs uninstall-lib uninstall-data uninstall-bin: @@ -179,6 +196,7 @@ uninstall-lib: uninstall-data: rm -f $(DESTDIR)$(datadir)/aclocal/sdl2.m4 rm -f $(DESTDIR)$(libdir)/pkgconfig/sdl2.pc + rm -f $(DESTDIR)$(libdir)/cmake/SDL2/sdl2-config.cmake clean: rm -rf $(objects) diff --git a/Engine/lib/sdl/Makefile.wiz b/Engine/lib/sdl/Makefile.wiz index 82619f076c..bb7705789f 100644 --- a/Engine/lib/sdl/Makefile.wiz +++ b/Engine/lib/sdl/Makefile.wiz @@ -12,13 +12,13 @@ CFLAGS = -Wall -fPIC -I./include -I$(WIZSDK)/include -DWIZ_GLES_LITE TARGET_STATIC = libSDL13.a TARGET_SHARED = libSDL13.so -SOURCES = ./src/*.c ./src/audio/*.c ./src/cdrom/*.c ./src/cpuinfo/*.c ./src/events/*.c \ +SOURCES = ./src/*.c ./src/audio/*.c ./src/cpuinfo/*.c ./src/events/*.c \ ./src/file/*.c ./src/stdlib/*.c ./src/thread/*.c ./src/timer/*.c ./src/video/*.c \ ./src/joystick/*.c ./src/haptic/*.c ./src/video/dummy/*.c ./src/audio/disk/*.c \ ./src/audio/dummy/*.c ./src/loadso/dlopen/*.c ./src/audio/dsp/*.c \ ./src/thread/pthread/SDL_systhread.c ./src/thread/pthread/SDL_syssem.c \ ./src/thread/pthread/SDL_sysmutex.c ./src/thread/pthread/SDL_syscond.c \ - ./src/joystick/linux/*.c ./src/haptic/linux/*.c ./src/timer/unix/*.c ./src/cdrom/dummy/*.c \ + ./src/joystick/linux/*.c ./src/haptic/linux/*.c ./src/timer/unix/*.c \ ./src/video/pandora/SDL_pandora.o ./src/video/pandora/SDL_pandora_events.o diff --git a/Engine/lib/sdl/README-android.txt b/Engine/lib/sdl/README-android.txt deleted file mode 100644 index 08a2592d49..0000000000 --- a/Engine/lib/sdl/README-android.txt +++ /dev/null @@ -1,438 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Android -================================================================================ - -Requirements: - -Android SDK (version 12 or later) -http://developer.android.com/sdk/index.html - -Android NDK r7 or later -http://developer.android.com/tools/sdk/ndk/index.html - -Minimum API level supported by SDL: 10 (Android 2.3.3) -Joystick support is available for API level >=12 devices. - -================================================================================ - How the port works -================================================================================ - -- Android applications are Java-based, optionally with parts written in C -- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to -the SDL library -- This means that your application C code must be placed inside an Android -Java project, along with some C support code that communicates with Java -- This eventually produces a standard Android .apk package - -The Android Java code implements an "Activity" and can be found in: -android-project/src/org/libsdl/app/SDLActivity.java - -The Java code loads your game code, the SDL shared library, and -dispatches to native functions implemented in the SDL library: -src/core/android/SDL_android.c - -Your project must include some glue code that starts your main() routine: -src/main/android/SDL_android_main.c - - -================================================================================ - Building an app -================================================================================ - -For simple projects you can use the script located at build-scripts/androidbuild.sh - -There's two ways of using it: - -androidbuild.sh com.yourcompany.yourapp < sources.list -androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c - -sources.list should be a text file with a source file name in each line -Filenames should be specified relative to the current directory, for example if -you are in the build-scripts directory and want to create the testgles.c test, you'll -run: - -./androidbuild.sh org.libsdl.testgles ../test/testgles.c - -One limitation of this script is that all sources provided will be aggregated into -a single directory, thus all your source files should have a unique name. - -Once the project is complete the script will tell you where the debug APK is located. -If you want to create a signed release APK, you can use the project created by this -utility to generate it. - -Finally, a word of caution: re running androidbuild.sh wipes any changes you may have -done in the build directory for the app! - - -For more complex projects, follow these instructions: - -1. Copy the android-project directory wherever you want to keep your projects - and rename it to the name of your project. -2. Move or symlink this SDL directory into the /jni directory -3. Edit /jni/src/Android.mk to include your source files -4. Run 'ndk-build' (a script provided by the NDK). This compiles the C source - -If you want to use the Eclipse IDE, skip to the Eclipse section below. - -5. Create /local.properties and use that to point to the Android SDK directory, by writing a line with the following form: -sdk.dir=PATH_TO_ANDROID_SDK -6. Run 'ant debug' in android/project. This compiles the .java and eventually - creates a .apk with the native code embedded -7. 'ant debug install' will push the apk to the device or emulator (if connected) - -Here's an explanation of the files in the Android project, so you can customize them: - -android-project/ - AndroidManifest.xml - package manifest. Among others, it contains the class name - of the main Activity and the package name of the application. - build.properties - empty - build.xml - build description file, used by ant. The actual application name - is specified here. - default.properties - holds the target ABI for the application, android-10 and up - project.properties - holds the target ABI for the application, android-10 and up - local.properties - holds the SDK path, you should change this to the path to your SDK - jni/ - directory holding native code - jni/Android.mk - Android makefile that can call recursively the Android.mk files - in all subdirectories - jni/SDL/ - (symlink to) directory holding the SDL library files - jni/SDL/Android.mk - Android makefile for creating the SDL shared library - jni/src/ - directory holding your C/C++ source - jni/src/Android.mk - Android makefile that you should customize to include your - source code and any library references - res/ - directory holding resources for your application - res/drawable-* - directories holding icons for different phone hardware. Could be - one dir called "drawable". - res/layout/main.xml - Usually contains a file main.xml, which declares the screen layout. - We don't need it because we use the SDL video output. - res/values/strings.xml - strings used in your application, including the application name - shown on the phone. - src/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding - to SDL. Be very careful changing this, as the SDL library relies - on this implementation. - - -================================================================================ - Build an app with static linking of libSDL -================================================================================ - -This build uses the Android NDK module system. - -Instructions: -1. Copy the android-project directory wherever you want to keep your projects - and rename it to the name of your project. -2. Rename /jni/src/Android_static.mk to /jni/src/Android.mk - (overwrite the existing one) -3. Edit /jni/src/Android.mk to include your source files -4. create and export an environment variable named NDK_MODULE_PATH that points - to the parent directory of this SDL directory. e.g.: - - export NDK_MODULE_PATH="$PWD"/.. - -5. Edit /src/org/libsdl/app/SDLActivity.java and remove the call to - System.loadLibrary("SDL2") line 42. -6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source - - -================================================================================ - Customizing your application name -================================================================================ - -To customize your application name, edit AndroidManifest.xml and replace -"org.libsdl.app" with an identifier for your product package. - -Then create a Java class extending SDLActivity and place it in a directory -under src matching your package, e.g. - src/com/gamemaker/game/MyGame.java - -Here's an example of a minimal class file: ---- MyGame.java -------------------------- -package com.gamemaker.game; - -import org.libsdl.app.SDLActivity; - -/* - * A sample wrapper class that just calls SDLActivity - */ - -public class MyGame extends SDLActivity { } - ------------------------------------------- - -Then replace "SDLActivity" in AndroidManifest.xml with the name of your -class, .e.g. "MyGame" - -================================================================================ - Customizing your application icon -================================================================================ - -Conceptually changing your icon is just replacing the "ic_launcher.png" files in -the drawable directories under the res directory. There are four directories for -different screen sizes. These can be replaced with one dir called "drawable", -containing an icon file "ic_launcher.png" with dimensions 48x48 or 72x72. - -You may need to change the name of your icon in AndroidManifest.xml to match -this icon filename. - -================================================================================ - Loading assets -================================================================================ - -Any files you put in the "assets" directory of your android-project directory -will get bundled into the application package and you can load them using the -standard functions in SDL_rwops.h. - -There are also a few Android specific functions that allow you to get other -useful paths for saving and loading data: -SDL_AndroidGetInternalStoragePath() -SDL_AndroidGetExternalStorageState() -SDL_AndroidGetExternalStoragePath() - -See SDL_system.h for more details on these functions. - -The asset packaging system will, by default, compress certain file extensions. -SDL includes two asset file access mechanisms, the preferred one is the so -called "File Descriptor" method, which is faster and doesn't involve the Dalvik -GC, but given this method does not work on compressed assets, there is also the -"Input Stream" method, which is automatically used as a fall back by SDL. You -may want to keep this fact in mind when building your APK, specially when large -files are involved. -For more information on which extensions get compressed by default and how to -disable this behaviour, see for example: - -http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ - -================================================================================ - Pause / Resume behaviour -================================================================================ - -If SDL is compiled with SDL_ANDROID_BLOCK_ON_PAUSE defined (the default), -the event loop will block itself when the app is paused (ie, when the user -returns to the main Android dashboard). Blocking is better in terms of battery -use, and it allows your app to spring back to life instantaneously after resume -(versus polling for a resume message). - -Upon resume, SDL will attempt to restore the GL context automatically. -In modern devices (Android 3.0 and up) this will most likely succeed and your -app can continue to operate as it was. - -However, there's a chance (on older hardware, or on systems under heavy load), -where the GL context can not be restored. In that case you have to listen for -a specific message, (which is not yet implemented!) and restore your textures -manually or quit the app (which is actually the kind of behaviour you'll see -under iOS, if the OS can not restore your GL context it will just kill your app) - -================================================================================ - Threads and the Java VM -================================================================================ - -For a quick tour on how Linux native threads interoperate with the Java VM, take -a look here: http://developer.android.com/guide/practices/jni.html -If you want to use threads in your SDL app, it's strongly recommended that you -do so by creating them using SDL functions. This way, the required attach/detach -handling is managed by SDL automagically. If you have threads created by other -means and they make calls to SDL functions, make sure that you call -Android_JNI_SetupThread before doing anything else otherwise SDL will attach -your thread automatically anyway (when you make an SDL call), but it'll never -detach it. - -================================================================================ - Using STL -================================================================================ - -You can use STL in your project by creating an Application.mk file in the jni -folder and adding the following line: -APP_STL := stlport_static - -For more information check out CPLUSPLUS-SUPPORT.html in the NDK documentation. - -================================================================================ - Additional documentation -================================================================================ - -The documentation in the NDK docs directory is very helpful in understanding the -build process and how to work with native code on the Android platform. - -The best place to start is with docs/OVERVIEW.TXT - - -================================================================================ - Using Eclipse -================================================================================ - -First make sure that you've installed Eclipse and the Android extensions as described here: - http://developer.android.com/tools/sdk/eclipse-adt.html - -Once you've copied the SDL android project and customized it, you can create an Eclipse project from it: - * File -> New -> Other - * Select the Android -> Android Project wizard and click Next - * Enter the name you'd like your project to have - * Select "Create project from existing source" and browse for your project directory - * Make sure the Build Target is set to Android 2.0 - * Click Finish - - -================================================================================ - Using the emulator -================================================================================ - -There are some good tips and tricks for getting the most out of the -emulator here: http://developer.android.com/tools/devices/emulator.html - -Especially useful is the info on setting up OpenGL ES 2.0 emulation. - -Notice that this software emulator is incredibly slow and needs a lot of disk space. -Using a real device works better. - -================================================================================ - Troubleshooting -================================================================================ - -You can create and run an emulator from the Eclipse IDE: - * Window -> Android SDK and AVD Manager - -You can see if adb can see any devices with the following command: - adb devices - -You can see the output of log messages on the default device with: - adb logcat - -You can push files to the device with: - adb push local_file remote_path_and_file - -You can push files to the SD Card at /sdcard, for example: - adb push moose.dat /sdcard/moose.dat - -You can see the files on the SD card with a shell command: - adb shell ls /sdcard/ - -You can start a command shell on the default device with: - adb shell - -You can remove the library files of your project (and not the SDL lib files) with: - ndk-build clean - -You can do a build with the following command: - ndk-build - -You can see the complete command line that ndk-build is using by passing V=1 on the command line: - ndk-build V=1 - -If your application crashes in native code, you can use addr2line to convert the -addresses in the stack trace to lines in your code. - -For example, if your crash looks like this: -I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0 -I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4 -I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c -I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c -I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030 -I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so -I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so -I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so -I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so - -You can see that there's a crash in the C library being called from the main code. -I run addr2line with the debug version of my code: - arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so -and then paste in the number after "pc" in the call stack, from the line that I care about: -000014bc - -I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23. - -You can add logging to your code to help show what's happening: - -#include - - __android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x); - -If you need to build without optimization turned on, you can create a file called -"Application.mk" in the jni directory, with the following line in it: -APP_OPTIM := debug - - -================================================================================ - Memory debugging -================================================================================ - -The best (and slowest) way to debug memory issues on Android is valgrind. -Valgrind has support for Android out of the box, just grab code using: - svn co svn://svn.valgrind.org/valgrind/trunk valgrind -... and follow the instructions in the file README.android to build it. - -One thing I needed to do on Mac OS X was change the path to the toolchain, -and add ranlib to the environment variables: -export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib - -Once valgrind is built, you can create a wrapper script to launch your -application with it, changing org.libsdl.app to your package identifier: ---- start_valgrind_app ------------------- -#!/system/bin/sh -export TMPDIR=/data/data/org.libsdl.app -exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $* ------------------------------------------- - -Then push it to the device: - adb push start_valgrind_app /data/local - -and make it executable: - adb shell chmod 755 /data/local/start_valgrind_app - -and tell Android to use the script to launch your application: - adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app" - -If the setprop command says "could not set property", it's likely that -your package name is too long and you should make it shorter by changing -AndroidManifest.xml and the path to your class file in android-project/src - -You can then launch your application normally and waaaaaaaiiittt for it. -You can monitor the startup process with the logcat command above, and -when it's done (or even while it's running) you can grab the valgrind -output file: - adb pull /sdcard/valgrind.log - -When you're done instrumenting with valgrind, you can disable the wrapper: - adb shell setprop wrap.org.libsdl.app "" - -================================================================================ - Why is API level 10 the minimum required? -================================================================================ - -API level 10 is the minimum required level at runtime (that is, on the device) -because SDL requires some functionality for running not -available on older devices. Since the incorporation of joystick support into SDL, -the minimum SDK required to *build* SDL is version 12. Devices running API levels -10-11 are still supported, only with the joystick functionality disabled. - -Support for native OpenGL ES and ES2 applications was introduced in the NDK for -API level 4 and 8. EGL was made a stable API in the NDK for API level 9, which -has since then been obsoleted, with the recommendation to developers to bump the -required API level to 10. -As of this writing, according to http://developer.android.com/about/dashboards/index.html -about 90% of the Android devices accessing Google Play support API level 10 or -higher (March 2013). - -================================================================================ - A note regarding the use of the "dirty rectangles" rendering technique -================================================================================ - -If your app uses a variation of the "dirty rectangles" rendering technique, -where you only update a portion of the screen on each frame, you may notice a -variety of visual glitches on Android, that are not present on other platforms. -This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2 -contexts, in particular the use of the eglSwapBuffers function. As stated in the -documentation for the function "The contents of ancillary buffers are always -undefined after calling eglSwapBuffers". -Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED -is not possible for SDL as it requires EGL 1.4, available only on the API level -17+, so the only workaround available on this platform is to redraw the entire -screen each frame. - -Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html - -================================================================================ - Known issues -================================================================================ - -- The number of buttons reported for each joystick is hardcoded to be 36, which -is the current maximum number of buttons Android can report. - diff --git a/Engine/lib/sdl/README-cmake.txt b/Engine/lib/sdl/README-cmake.txt deleted file mode 100644 index 7f5ac80ddc..0000000000 --- a/Engine/lib/sdl/README-cmake.txt +++ /dev/null @@ -1,31 +0,0 @@ -================================================================================ -CMake build system for SDL (www.cmake.org) -================================================================================ - -SDL's build system was traditionally based on autotools. Over time, this -approach has suffered from several issues across the different supported -platforms. -To solve these problems, a new build system based on CMake is under development. -It works in parallel to the legacy system, so users can experiment with it -without complication. -While still experimental, the build system should be usable on the following -platforms: - - * FreeBSD - * Linux - * VS.NET 2010 - * MinGW and Msys - * OS X with support for XCode - -================================================================================ -Usage -================================================================================ - -Assuming the source for SDL is located at ~/sdl - -cd ~ -mkdir build -cd build -cmake ../sdl - -This will build the static and dynamic versions of SDL in the ~/build directory. diff --git a/Engine/lib/sdl/README-directfb.txt b/Engine/lib/sdl/README-directfb.txt deleted file mode 100644 index 9c16a7b67e..0000000000 --- a/Engine/lib/sdl/README-directfb.txt +++ /dev/null @@ -1,106 +0,0 @@ -SDL on DirectFB - -Supports: - -- Hardware YUV overlays -- OpenGL - software only -- 2D/3D accelerations (depends on directfb driver) -- multiple displays -- windows - -What you need: - -DirectFB 1.0.1, 1.2.x, 1.3.0 -Kernel-Framebuffer support: required: vesafb, radeonfb .... -Mesa 7.0.x - optional for OpenGL - -/etc/directfbrc - -This file should contain the following lines to make -your joystick work and avoid crashes: ------------------------- -disable-module=joystick -disable-module=cle266 -disable-module=cyber5k -no-linux-input-grab ------------------------- - -To disable to use x11 backend when DISPLAY variable is found use - -export SDL_DIRECTFB_X11_CHECK=0 - -To disable the use of linux input devices, i.e. multimice/multikeyboard support, -use - -export SDL_DIRECTFB_LINUX_INPUT=0 - -To use hardware accelerated YUV-overlays for YUV-textures, use: - -export SDL_DIRECTFB_YUV_DIRECT=1 - -This is disabled by default. It will only support one -YUV texture, namely the first. Every other YUV texture will be -rendered in software. - -In addition, you may use (directfb-1.2.x) - -export SDL_DIRECTFB_YUV_UNDERLAY=1 - -to make the YUV texture an underlay. This will make the cursor to -be shown. - -Simple Window Manager -===================== - -The driver has support for a very, very basic window manager you may -want to use when running with "wm=default". Use - -export SDL_DIRECTFB_WM=1 - -to enable basic window borders. In order to have the window title rendered, -you need to have the following font installed: - -/usr/share/fonts/truetype/freefont/FreeSans.ttf - -OpenGL Support -============== - -The following instructions will give you *software* OpenGL. However this -works at least on all directfb supported platforms. - -As of this writing 20100802 you need to pull Mesa from git and do the following: - ------------------------- -git clone git://anongit.freedesktop.org/git/mesa/mesa -cd mesa -git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a ------------------------- - -Edit configs/linux-directfb so that the Directories-section looks like ------------------------- -# Directories -SRC_DIRS = mesa glu -GLU_DIRS = sgi -DRIVER_DIRS = directfb -PROGRAM_DIRS = ------------------------- - -make linux-directfb -make - -echo Installing - please enter sudo pw. - -sudo make install INSTALL_DIR=/usr/local/dfb_GL -cd src/mesa/drivers/directfb -make -sudo make install INSTALL_DIR=/usr/local/dfb_GL ------------------------- - -To run the SDL - testprograms: - -export SDL_VIDEODRIVER=directfb -export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib -export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7 - -./testgl - diff --git a/Engine/lib/sdl/README-dynapi.txt b/Engine/lib/sdl/README-dynapi.txt deleted file mode 100644 index da52f3a328..0000000000 --- a/Engine/lib/sdl/README-dynapi.txt +++ /dev/null @@ -1,130 +0,0 @@ -================================================================================ -Dynamic API -================================================================================ -Originally posted by Ryan at https://plus.google.com/103391075724026391227/posts/TB8UfnDYu4U - -Background: - -- The Steam Runtime has (at least in theory) a really kick-ass build of SDL2, - but developers are shipping their own SDL2 with individual Steam games. - These games might stop getting updates, but a newer SDL2 might be needed later. - Certainly we'll always be fixing bugs in SDL, even if a new video target isn't - ever needed, and these fixes won't make it to a game shipping its own SDL. -- Even if we replace the SDL2 in those games with a compatible one, that is to - say, edit a developer's Steam depot (yuck!), there are developers that are - statically linking SDL2 that we can't do this for. We can't even force the - dynamic loader to ignore their SDL2 in this case, of course. -- If you don't ship an SDL2 with the game in some form, people that disabled the - Steam Runtime, or just tried to run the game from the command line instead of - Steam might find themselves unable to run the game, due to a missing dependency. -- If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target - generic Linux boxes that may or may not have SDL2 installed, you have to ship - the library or risk a total failure to launch. So now, you might have to have - a non-Steam build plus a Steam build (that is, one with and one without SDL2 - included), which is inconvenient if you could have had one universal build - that works everywhere. -- We like the zlib license, but the biggest complaint from the open source - community about the license change is the static linking. The LGPL forced this - as a legal, not technical issue, but zlib doesn't care. Even those that aren't - concerned about the GNU freedoms found themselves solving the same problems: - swapping in a newer SDL to an older game often times can save the day. - Static linking stops this dead. - -So here's what we did: - -SDL now has, internally, a table of function pointers. So, this is what SDL_Init -now looks like: - - UInt32 SDL_Init(Uint32 flags) - { - return jump_table.SDL_Init(flags); - } - -Except that is all done with a bunch of macro magic so we don't have to maintain -every one of these. - -What is jump_table.SDL_init()? Eventually, that's a function pointer of the real -SDL_Init() that you've been calling all this time. But at startup, it looks more -like this: - - Uint32 SDL_Init_DEFAULT(Uint32 flags) - { - SDL_InitDynamicAPI(); - return jump_table.SDL_Init(flags); - } - -SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function -pointers, which means that this _DEFAULT function never gets called again. -First call to any SDL function sets the whole thing up. - -So you might be asking, what was the value in that? Isn't this what the operating -system's dynamic loader was supposed to do for us? Yes, but now we've got this -level of indirection, we can do things like this: - - export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0 - ./MyGameThatIsStaticallyLinkedToSDL2 - -And now, this game that is staticallly linked to SDL, can still be overridden -with a newer, or better, SDL. The statically linked one will only be used as -far as calling into the jump table in this case. But in cases where no override -is desired, the statically linked version will provide its own jump table, -and everyone is happy. - -So now: -- Developers can statically link SDL, and users can still replace it. - (We'd still rather you ship a shared library, though!) -- Developers can ship an SDL with their game, Valve can override it for, say, - new features on SteamOS, or distros can override it for their own needs, - but it'll also just work in the default case. -- Developers can ship the same package to everyone (Humble Bundle, GOG, etc), - and it'll do the right thing. -- End users (and Valve) can update a game's SDL in almost any case, - to keep abandoned games running on newer platforms. -- Everyone develops with SDL exactly as they have been doing all along. - Same headers, same ABI. Just get the latest version to enable this magic. - - -A little more about SDL_InitDynamicAPI(): - -Internally, InitAPI does some locking to make sure everything waits until a -single thread initializes everything (although even SDL_CreateThread() goes -through here before spinning a thread, too), and then decides if it should use -an external SDL library. If not, it sets up the jump table using the current -SDL's function pointers (which might be statically linked into a program, or in -a shared library of its own). If so, it loads that library and looks for and -calls a single function: - - SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize); - -That function takes a version number (more on that in a moment), the address of -the jump table, and the size, in bytes, of the table. -Now, we've got policy here: this table's layout never changes; new stuff gets -added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all -the needed functions if tablesize <= sizeof its own jump table. If tablesize is -bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but -if it's smaller, we know we can provide the entire API that the caller needs. - -The version variable is a failsafe switch. -Right now it's always 1. This number changes when there are major API changes -(so we know if the tablesize might be smaller, or entries in it have changed). -Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not -inconceivable to have a small dispatch library that only supplies this one -function and loads different, otherwise-incompatible SDL libraries and has the -right one initialize the jump table based on the version. For something that -must generically catch lots of different versions of SDL over time, like the -Steam Client, this isn't a bad option. - -Finally, I'm sure some people are reading this and thinking -"I don't want that overhead in my project!" -To which I would point out that the extra function call through the jump table -probably wouldn't even show up in a profile, but lucky you: this can all be -disabled. You can build SDL without this if you absolutely must, but we would -encourage you not to do that. However, on heavily locked down platforms like -iOS, or maybe when debugging, it makes sense to disable it. The way this is -designed in SDL, you just have to change one #define, and the entire system -vaporizes out, and SDL functions exactly like it always did. Most of it is -macro magic, so the system is contained to one C file and a few headers. -However, this is on by default and you have to edit a header file to turn it -off. Our hopes is that if we make it easy to disable, but not too easy, -everyone will ultimately be able to get what they want, but we've gently -nudged everyone towards what we think is the best solution. diff --git a/Engine/lib/sdl/README-gesture.txt b/Engine/lib/sdl/README-gesture.txt deleted file mode 100644 index 205fb97d39..0000000000 --- a/Engine/lib/sdl/README-gesture.txt +++ /dev/null @@ -1,72 +0,0 @@ -=========================================================================== -Dollar Gestures -=========================================================================== -SDL Provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures. - -Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up. - -Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID. - -Recording: ----------- -To begin recording on a touch device call: -SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices. - -Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event. -A SDL_DOLLARRECORD event is a dgesture with the following fields: - -event.dgesture.touchId - the Id of the touch used to record the gesture. -event.dgesture.gestureId - the unique id of the recorded gesture. - - -Performing: ------------ -As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields: - -event.dgesture.touchId - the Id of the touch which performed the gesture. -event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke. -event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match. -event.dgesture.numFingers - the number of fingers used to draw the stroke. - -Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed). - - - -Saving: -------- -To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored. - -To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored. - -Both functions return the number of gestures successfully saved. - - -Loading: --------- -To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file. - -SDL_LoadDollarTemplates returns the number of templates successfully loaded. - - - -=========================================================================== -Multi Gestures -=========================================================================== -SDL provides simple support for pinch/rotate/swipe gestures. -Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields: - -event.mgesture.touchId - the Id of the touch on which the gesture was performed. -event.mgesture.x - the normalized x coordinate of the gesture. (0..1) -event.mgesture.y - the normalized y coordinate of the gesture. (0..1) -event.mgesture.dTheta - the amount that the fingers rotated during this motion. -event.mgesture.dDist - the amount that the fingers pinched during this motion. -event.mgesture.numFingers - the number of fingers used in the gesture. - - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com diff --git a/Engine/lib/sdl/README-hg.txt b/Engine/lib/sdl/README-hg.txt deleted file mode 100644 index 616307c6ca..0000000000 --- a/Engine/lib/sdl/README-hg.txt +++ /dev/null @@ -1,23 +0,0 @@ -The latest development version of SDL is available via Mercurial. -Mercurial allows you to get up-to-the-minute fixes and enhancements; -as a developer works on a source tree, you can use "hg" to mirror that -source tree instead of waiting for an official release. Please look -at the Mercurial website ( http://mercurial.selenic.com/ ) for more -information on using hg, where you can also download software for -Mac OS X, Windows, and Unix systems. - - hg clone http://hg.libsdl.org/SDL - -If you are building SDL with an IDE, you will need to copy the file -include/SDL_config.h.default to include/SDL_config.h before building. - -If you are building SDL via configure, you will need to run autogen.sh -before running configure. - -There is a web interface to the subversion repository at: - - http://hg.libsdl.org/SDL/ - -There is an RSS feed available at that URL, for those that want to -track commits in real time. - diff --git a/Engine/lib/sdl/README-ios.txt b/Engine/lib/sdl/README-ios.txt deleted file mode 100644 index 60f3391dc8..0000000000 --- a/Engine/lib/sdl/README-ios.txt +++ /dev/null @@ -1,222 +0,0 @@ -============================================================================== -Building the Simple DirectMedia Layer for iPhone OS 2.0 -============================================================================== - -Requirements: Mac OS X v10.5 or later and the iPhone SDK. - -Instructions: -1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in XCode. -2. Select your desired target, and hit build. - -There are three build targets: -- libSDL.a: - Build SDL as a statically linked library -- testsdl - Build a test program (there are known test failures which are fine) -- Template: - Package a project template together with the SDL for iPhone static libraries and copies of the SDL headers. The template includes proper references to the SDL library and headers, skeleton code for a basic SDL program, and placeholder graphics for the application icon and startup screen. - -============================================================================== -Build SDL for iOS from the command line -============================================================================== - -1. cd (PATH WHERE THE SDL CODE IS)/build-scripts -2. ./iosbuild.sh - -If everything goes fine, you should see a build/ios directory, inside there's -two directories "lib" and "include". -"include" contains a copy of the SDL headers that you'll need for your project, -make sure to configure XCode to look for headers there. -"lib" contains find two files, libSDL2.a and libSDL2main.a, you have to add both -to your XCode project. These libraries contain three architectures in them, -armv6 for legacy devices, armv7, and i386 (for the simulator). -By default, iosbuild.sh will autodetect the SDK version you have installed using -xcodebuild -showsdks, and build for iOS >= 3.0, you can override this behaviour -by setting the MIN_OS_VERSION variable, ie: - -MIN_OS_VERSION=4.2 ./iosbuild.sh - -============================================================================== -Using the Simple DirectMedia Layer for iOS -============================================================================== - -FIXME: This needs to be updated for the latest methods - -Here is the easiest method: -1. Build the SDL libraries (libSDL.a and libSDLSimulator.a) and the iPhone SDL Application template. -1. Install the iPhone SDL Application template by copying it to one of XCode's template directories. I recommend creating a directory called "SDL" in "/Developer/Platforms/iOS.platform/Developer/Library/XCode/Project Templates/" and placing it there. -2. Start a new project using the template. The project should be immediately ready for use with SDL. - -Here is a more manual method: -1. Create a new iPhone view based application. -2. Build the SDL static libraries (libSDL.a and libSDLSimulator.a) for iPhone and include them in your project. XCode will ignore the library that is not currently of the correct architecture, hence your app will work both on iPhone and in the iPhone Simulator. -3. Include the SDL header files in your project. -4. Remove the ApplicationDelegate.h and ApplicationDelegate.m files -- SDL for iPhone provides its own UIApplicationDelegate. Remove MainWindow.xib -- SDL for iPhone produces its user interface programmatically. -5. Delete the contents of main.m and program your app as a regular SDL program instead. You may replace main.m with your own main.c, but you must tell XCode not to use the project prefix file, as it includes Objective-C code. - -============================================================================== -Notes -- Application events -============================================================================== - -On iOS the application goes through a fixed life cycle and you will get -notifications of state changes via application events. When these events -are delivered you must handle them in an event callback because the OS may -not give you any processing time after the events are delivered. - -e.g. - -int HandleAppEvents(void *userdata, SDL_Event *event) -{ - switch (event->type) - { - case SDL_APP_TERMINATING: - /* Terminate the app. - Shut everything down before returning from this function. - */ - return 0; - case SDL_APP_LOWMEMORY: - /* You will get this when your app is paused and iOS wants more memory. - Release as much memory as possible. - */ - return 0; - case SDL_APP_WILLENTERBACKGROUND: - /* Prepare your app to go into the background. Stop loops, etc. - This gets called when the user hits the home button, or gets a call. - */ - return 0; - case SDL_APP_DIDENTERBACKGROUND: - /* This will get called if the user accepted whatever sent your app to the background. - If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops. - When you get this, you have 5 seconds to save all your state or the app will be terminated. - Your app is NOT active at this point. - */ - return 0; - case SDL_APP_WILLENTERFOREGROUND: - /* This call happens when your app is coming back to the foreground. - Restore all your state here. - */ - return 0; - case SDL_APP_DIDENTERFOREGROUND: - /* Restart your loops here. - Your app is interactive and getting CPU again. - */ - return 0; - default: - /* No special processing, add it to the event queue */ - return 1; - } -} - -int main(int argc, char *argv[]) -{ - SDL_SetEventFilter(HandleAppEvents, NULL); - - ... run your main loop - - return 0; -} - - -============================================================================== -Notes -- Accelerometer as Joystick -============================================================================== - -SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory. - -The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF. - -============================================================================== -Notes -- OpenGL ES -============================================================================== - -Your SDL application for iPhone uses OpenGL ES for video by default. - -OpenGL ES for iPhone supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute. - -If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0. - -Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 1. - -============================================================================== -Notes -- Keyboard -============================================================================== - -The SDL keyboard API has been extended to support on-screen keyboards: - -void SDL_StartTextInput() - -- enables text events and reveals the onscreen keyboard. -void SDL_StopTextInput() - -- disables text events and hides the onscreen keyboard. -SDL_bool SDL_IsTextInputActive() - -- returns whether or not text events are enabled (and the onscreen keyboard is visible) - -============================================================================== -Notes -- Reading and Writing files -============================================================================== - -Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory. - -Once your application is installed its directory tree looks like: - -MySDLApp Home/ - MySDLApp.app - Documents/ - Library/ - Preferences/ - tmp/ - -When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences". - -More information on this subject is available here: -http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html - -============================================================================== -Notes -- iPhone SDL limitations -============================================================================== - -Windows: - Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow the flag SDL_WINDOW_BORDERLESS). - -Textures: - The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats. - -Loading Shared Objects: - This is disabled by default since it seems to break the terms of the iPhone SDK agreement. It can be re-enabled in SDL_config_iphoneos.h. - -============================================================================== -Game Center -============================================================================== - -Game Center integration requires that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using: - -int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); - -This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run. - -e.g. - -extern "C" -void ShowFrame(void*) -{ - ... do event handling, frame logic and rendering -} - -int main(int argc, char *argv[]) -{ - ... initialize game ... - -#if __IPHONEOS__ - // Initialize the Game Center for scoring and matchmaking - InitGameCenter(); - - // Set up the game to run in the window animation callback on iOS - // so that Game Center and so forth works correctly. - SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL); -#else - while ( running ) { - ShowFrame(0); - DelayFrame(); - } -#endif - return 0; -} diff --git a/Engine/lib/sdl/README-linux.txt b/Engine/lib/sdl/README-linux.txt deleted file mode 100644 index e0f029d810..0000000000 --- a/Engine/lib/sdl/README-linux.txt +++ /dev/null @@ -1,80 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Linux -================================================================================ - -By default SDL will only link against glibc, the rest of the features will be -enabled dynamically at runtime depending on the available features on the target -system. So, for example if you built SDL with Xinerama support and the target -system does not have the Xinerama libraries installed, it will be disabled -at runtime, and you won't get a missing library error, at least with the -default configuration parameters. - - -================================================================================ -Build Dependencies -================================================================================ - -Ubuntu 13.04, all available features enabled: - -sudo apt-get install build-essential mercurial make cmake autoconf automake \ -libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \ -libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \ -libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \ -libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev - -NOTES: -- This includes all the audio targets except arts, because Ubuntu pulled the - artsc0-dev package, but in theory SDL still supports it. -- DirectFB isn't included because the configure script (currently) fails to find - it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the - configure script to include DirectFB support. Send patches. :) - - -================================================================================ -Joystick does not work -================================================================================ - -If you compiled or are using a version of SDL with udev support (and you should!) -there's a few issues that may cause SDL to fail to detect your joystick. To -debug this, start by installing the evtest utility. On Ubuntu/Debian: - - sudo apt-get install evtest - -Then run: - - sudo evtest - -You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX" -Now run: - - cat /dev/input/event/XX - -If you get a permission error, you need to set a udev rule to change the mode of -your device (see below) - -Also, try: - - sudo udevadm info --query=all --name=input/eventXX - -If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it, -you need to set up an udev rule to force this variable. - -A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks -like: - - SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - -You can set up similar rules for your device by changing the values listed in -idProduct and idVendor. To obtain these values, try: - - sudo udevadm info -a --name=input/eventXX | grep idVendor - sudo udevadm info -a --name=input/eventXX | grep idProduct - -If multiple values come up for each of these, the one you want is the first one of each. - -On other systems which ship with an older udev (such as CentOS), you may need -to set up a rule such as: - - SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1" - diff --git a/Engine/lib/sdl/README-macosx.txt b/Engine/lib/sdl/README-macosx.txt deleted file mode 100644 index 35d70b7591..0000000000 --- a/Engine/lib/sdl/README-macosx.txt +++ /dev/null @@ -1,226 +0,0 @@ -============================================================================== -Using the Simple DirectMedia Layer with Mac OS X -============================================================================== - -These instructions are for people using Apple's Mac OS X (pronounced -"ten"). - -From the developer's point of view, OS X is a sort of hybrid Mac and -Unix system, and you have the option of using either traditional -command line tools or Apple's IDE Xcode. - -To build SDL using the command line, use the standard configure and make -process: - - ./configure - make - sudo make install - -You can also build SDL as a Universal library (a single binary for both -32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using -the fatbuild.sh script in build-scripts: - sh build-scripts/fatbuild.sh - sudo build-scripts/fatbuild.sh install -This script builds SDL with 10.5 ABI compatibility on i386 and 10.6 -ABI compatibility on x86_64 architectures. For best compatibility you -should compile your application the same way. A script which wraps -gcc to make this easy is provided in test/gcc-fat.sh - -Please note that building SDL requires at least Xcode 4.6 and the 10.7 SDK -(even if you target back to 10.5 systems). PowerPC support for Mac OS X has -been officially dropped as of SDL 2.0.2. - -To use the library once it's built, you essential have two possibilities: -use the traditional autoconf/automake/make method, or use Xcode. - -============================================================================== -Caveats for using SDL with Mac OS X -============================================================================== - -Some things you have to be aware of when using SDL on Mac OS X: - -- If you register your own NSApplicationDelegate (using [NSApp setDelegate:]), - SDL will not register its own. This means that SDL will not terminate using - SDL_Quit if it receives a termination request, it will terminate like a - normal app, and it will not send a SDL_DROPFILE when you request to open a - file with the app. To solve these issues, put the following code in your - NSApplicationDelegate implementation: - - - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender - { - if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); - } - - return NSTerminateCancel; - } - - - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename - { - if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_DROPFILE; - event.drop.file = SDL_strdup([filename UTF8String]); - return (SDL_PushEvent(&event) > 0); - } - - return NO; - } - -============================================================================== -Using the Simple DirectMedia Layer with a traditional Makefile -============================================================================== - -An existing autoconf/automake build system for your SDL app has good chances -to work almost unchanged on OS X. However, to produce a "real" Mac OS X binary -that you can distribute to users, you need to put the generated binary into a -so called "bundle", which basically is a fancy folder with a name like -"MyCoolGame.app". - -To get this build automatically, add something like the following rule to -your Makefile.am: - -bundle_contents = APP_NAME.app/Contents -APP_NAME_bundle: EXE_NAME - mkdir -p $(bundle_contents)/MacOS - mkdir -p $(bundle_contents)/Resources - echo "APPL????" > $(bundle_contents)/PkgInfo - $(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/ - -You should replace EXE_NAME with the name of the executable. APP_NAME is what -will be visible to the user in the Finder. Usually it will be the same -as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME -usually is "TestGame". You might also want to use @PACKAGE@ to use the package -name as specified in your configure.in file. - -If your project builds more than one application, you will have to do a bit -more. For each of your target applications, you need a separate rule. - -If you want the created bundles to be installed, you may want to add this -rule to your Makefile.am: - -install-exec-hook: APP_NAME_bundle - rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app - mkdir -p $(DESTDIR)$(prefix)/Applications/ - cp -r $< /$(DESTDIR)$(prefix)Applications/ - -This rule takes the Bundle created by the rule from step 3 and installs them -into $(DESTDIR)$(prefix)/Applications/. - -Again, if you want to install multiple applications, you will have to augment -the make rule accordingly. - - -But beware! That is only part of the story! With the above, you end up with -a bare bone .app bundle, which is double clickable from the Finder. But -there are some more things you should do before shipping your product... - -1) The bundle right now probably is dynamically linked against SDL. That - means that when you copy it to another computer, *it will not run*, - unless you also install SDL on that other computer. A good solution - for this dilemma is to static link against SDL. On OS X, you can - achieve that by linking against the libraries listed by - sdl-config --static-libs - instead of those listed by - sdl-config --libs - Depending on how exactly SDL is integrated into your build systems, the - way to achieve that varies, so I won't describe it here in detail -2) Add an 'Info.plist' to your application. That is a special XML file which - contains some meta-information about your application (like some copyright - information, the version of your app, the name of an optional icon file, - and other things). Part of that information is displayed by the Finder - when you click on the .app, or if you look at the "Get Info" window. - More information about Info.plist files can be found on Apple's homepage. - - -As a final remark, let me add that I use some of the techniques (and some -variations of them) in Exult and ScummVM; both are available in source on -the net, so feel free to take a peek at them for inspiration! - - -============================================================================== -Using the Simple DirectMedia Layer with Xcode -============================================================================== - -These instructions are for using Apple's Xcode IDE to build SDL applications. - -- First steps - -The first thing to do is to unpack the Xcode.tar.gz archive in the -top level SDL directory (where the Xcode.tar.gz archive resides). -Because Stuffit Expander will unpack the archive into a subdirectory, -you should unpack the archive manually from the command line: - cd [path_to_SDL_source] - tar zxf Xcode.tar.gz -This will create a new folder called Xcode, which you can browse -normally from the Finder. - -- Building the Framework - -The SDL Library is packaged as a framework bundle, an organized -relocatable folder hierarchy of executable code, interface headers, -and additional resources. For practical purposes, you can think of a -framework as a more user and system-friendly shared library, whose library -file behaves more or less like a standard UNIX shared library. - -To build the framework, simply open the framework project and build it. -By default, the framework bundle "SDL.framework" is installed in -/Library/Frameworks. Therefore, the testers and project stationary expect -it to be located there. However, it will function the same in any of the -following locations: - - ~/Library/Frameworks - /Local/Library/Frameworks - /System/Library/Frameworks - -- Build Options - There are two "Build Styles" (See the "Targets" tab) for SDL. - "Deployment" should be used if you aren't tweaking the SDL library. - "Development" should be used to debug SDL apps or the library itself. - -- Building the Testers - Open the SDLTest project and build away! - -- Using the Project Stationary - Copy the stationary to the indicated folders to access it from - the "New Project" and "Add target" menus. What could be easier? - -- Setting up a new project by hand - Some of you won't want to use the Stationary so I'll give some tips: - * Create a new "Cocoa Application" - * Add src/main/macosx/SDLMain.m , .h and .nib to your project - * Remove "main.c" from your project - * Remove "MainMenu.nib" from your project - * Add "$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path - * Add "$(HOME)/Library/Frameworks" to the frameworks search path - * Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS" - * Set the "Main Nib File" under "Application Settings" to "SDLMain.nib" - * Add your files - * Clean and build - -- Building from command line - Use pbxbuild in the same directory as your .pbproj file - -- Running your app - You can send command line args to your app by either invoking it from - the command line (in *.app/Contents/MacOS) or by entering them in the - "Executables" panel of the target settings. - -- Implementation Notes - Some things that may be of interest about how it all works... - * Working directory - As defined in the SDL_main.m file, the working directory of your SDL app - is by default set to its parent. You may wish to change this to better - suit your needs. - * You have a Cocoa App! - Your SDL app is essentially a Cocoa application. When your app - starts up and the libraries finish loading, a Cocoa procedure is called, - which sets up the working directory and calls your main() method. - You are free to modify your Cocoa app with generally no consequence - to SDL. You cannot, however, easily change the SDL window itself. - Functionality may be added in the future to help this. - - -Known bugs are listed in the file "BUGS" diff --git a/Engine/lib/sdl/README-pandora.txt b/Engine/lib/sdl/README-pandora.txt deleted file mode 100644 index d522bc77aa..0000000000 --- a/Engine/lib/sdl/README-pandora.txt +++ /dev/null @@ -1,16 +0,0 @@ -SDL 2.0 with open pandora console support ( http://openpandora.org/ ) -===================================================================== - -- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES -support to work on the pandora under the framebuffer. This driver do not have -input support for now, so if you use it you will have to add your own control code. -The video driver name is "pandora" so if you have problem running it from -the framebuffer, try to set the following variable before starting your application : -"export SDL_VIDEODRIVER=pandora" - -- OpenGL ES support was added to the x11 driver, so it's working like the normal -x11 driver one with OpenGLX support, with SDL input event's etc.. - - -David Carré (Cpasjuste) -cpasjuste@gmail.com diff --git a/Engine/lib/sdl/README-platforms.txt b/Engine/lib/sdl/README-platforms.txt deleted file mode 100644 index 2a099cd4b6..0000000000 --- a/Engine/lib/sdl/README-platforms.txt +++ /dev/null @@ -1,30 +0,0 @@ - -This is a list of the platforms SDL supports, and who maintains them. - -Officially supported platforms -============================== -(code compiles, and thoroughly tested for release) -============================== -Windows XP/Vista/7/8 -Mac OS X 10.5+ -Linux 2.6+ -iOS 5.1.1+ -Android 2.3.3+ - -Unofficially supported platforms -================================ -(code compiles, but not thoroughly tested) -================================ -FreeBSD -NetBSD -OpenBSD -Solaris - -Platforms supported by volunteers -================================= -Haiku - maintained by Axel Dörfler -PSP - maintained by 527721088@qq.com -Pandora - maintained by Scott Smith - -Platforms that need maintainers -=============================== diff --git a/Engine/lib/sdl/README-porting.txt b/Engine/lib/sdl/README-porting.txt deleted file mode 100644 index f8540b600b..0000000000 --- a/Engine/lib/sdl/README-porting.txt +++ /dev/null @@ -1,61 +0,0 @@ - -* Porting To A New Platform - - The first thing you have to do when porting to a new platform, is look at -include/SDL_platform.h and create an entry there for your operating system. -The standard format is __PLATFORM__, where PLATFORM is the name of the OS. -Ideally SDL_platform.h will be able to auto-detect the system it's building -on based on C preprocessor symbols. - -There are two basic ways of building SDL at the moment: - -1. The "UNIX" way: ./configure; make; make install - - If you have a GNUish system, then you might try this. Edit configure.in, - take a look at the large section labelled: - "Set up the configuration based on the target platform!" - Add a section for your platform, and then re-run autogen.sh and build! - -2. Using an IDE: - - If you're using an IDE or other non-configure build system, you'll probably - want to create a custom SDL_config.h for your platform. Edit SDL_config.h, - add a section for your platform, and create a custom SDL_config_{platform}.h, - based on SDL_config.h.minimal and SDL_config.h.in - - Add the top level include directory to the header search path, and then add - the following sources to the project: - src/*.c - src/atomic/*.c - src/audio/*.c - src/cpuinfo/*.c - src/events/*.c - src/file/*.c - src/haptic/*.c - src/joystick/*.c - src/power/*.c - src/render/*.c - src/stdlib/*.c - src/thread/*.c - src/timer/*.c - src/video/*.c - src/audio/disk/*.c - src/audio/dummy/*.c - src/video/dummy/*.c - src/haptic/dummy/*.c - src/joystick/dummy/*.c - src/main/dummy/*.c - src/thread/generic/*.c - src/timer/dummy/*.c - src/loadso/dummy/*.c - - -Once you have a working library without any drivers, you can go back to each -of the major subsystems and start implementing drivers for your platform. - -If you have any questions, don't hesitate to ask on the SDL mailing list: - http://www.libsdl.org/mailing-list.php - -Enjoy! - Sam Lantinga (slouken@libsdl.org) - diff --git a/Engine/lib/sdl/README-psp.txt b/Engine/lib/sdl/README-psp.txt deleted file mode 100644 index d30842057a..0000000000 --- a/Engine/lib/sdl/README-psp.txt +++ /dev/null @@ -1,17 +0,0 @@ -SDL port for the Sony PSP contributed by - Captian Lex - -Credit to - Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP - Geecko for his PSP GU lib "Glib2d" - -Building --------- -To build for the PSP, make sure psp-config is in the path and run: - make -f Makefile.psp - - - -To Do ------- -PSP Screen Keyboard diff --git a/Engine/lib/sdl/README-raspberrypi.txt b/Engine/lib/sdl/README-raspberrypi.txt deleted file mode 100644 index bfc3f8b8c0..0000000000 --- a/Engine/lib/sdl/README-raspberrypi.txt +++ /dev/null @@ -1,161 +0,0 @@ -================================================================================ -SDL2 for Raspberry Pi -================================================================================ - -Requirements: - -Raspbian (other Linux distros may work as well). - -================================================================================ - Features -================================================================================ - -* Works without X11 -* Hardware accelerated OpenGL ES 2.x -* Sound via ALSA -* Input (mouse/keyboard/joystick) via EVDEV -* Hotplugging of input devices via UDEV - -================================================================================ - Raspbian Build Dependencies -================================================================================ - -sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev - -You also need the VideoCore binary stuff that ships in /opt/vc for EGL and -OpenGL ES 2.x, it usually comes pre installed, but in any case: - -sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev - -================================================================================ - Cross compiling from x86 Linux -================================================================================ - -To cross compile SDL for Raspbian from your desktop machine, you'll need a -Raspbian system root and the cross compilation tools. We'll assume these tools -will be placed in /opt/rpi-tools - - sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools - -You'll also need a Rasbian binary image. -Get it from: http://downloads.raspberrypi.org/raspbian_latest -After unzipping, you'll get file with a name like: -wheezy-raspbian.img -Let's assume the sysroot will be built in /opt/rpi-sysroot. - - export SYSROOT=/opt/rpi-sysroot - sudo kpartx -a -v .img - sudo mount -o loop /dev/mapper/loop0p2 /mnt - sudo cp -r /mnt $SYSROOT - sudo apt-get install qemu binfmt-support qemu-user-static - sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin - sudo mount --bind /dev $SYSROOT/dev - sudo mount --bind /proc $SYSROOT/proc - sudo mount --bind /sys $SYSROOT/sys - -Now, before chrooting into the ARM sysroot, you'll need to apply a workaround, -edit $SYSROOT/etc/ld.so.preload and comment out all lines in it. - - sudo chroot $SYSROOT - apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev - exit - sudo umount $SYSROOT/dev - sudo umount $SYSROOT/proc - sudo umount $SYSROOT/sys - sudo umount /mnt - -There's one more fix required, as the libdl.so symlink uses an absolute path -which doesn't quite work in our setup. - - sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - -The final step is compiling SDL itself. - - export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux" - cd - mkdir -p build;cd build - ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd - make - make install - -To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths: - - perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config - -================================================================================ - Apps don't work or poor video/audio performance -================================================================================ - -If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to -update the RPi's firmware. Note that doing so will fix these problems, but it -will also render the CMA - Dynamic Memory Split functionality useless. - -Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too -low in general, specially if a 1080p TV is hooked up. - -See here how to configure this setting: http://elinux.org/RPiconfig - -Using a fixed gpu_mem=128 is the best option (specially if you updated the -firmware, using CMA probably won't work, at least it's the current case). - -================================================================================ - No input -================================================================================ - -Make sure you belong to the "input" group. - - sudo usermod -aG input `whoami` - -================================================================================ - No HDMI Audio -================================================================================ - -If you notice that ALSA works but there's no audio over HDMI, try adding: - - hdmi_drive=2 - -to your config.txt file and reboot. - -Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062 - -================================================================================ - Text Input API support -================================================================================ - -The Text Input API is supported, with translation of scan codes done via the -kernel symbol tables. For this to work, SDL needs access to a valid console. -If you notice there's no SDL_TEXTINPUT message being emitted, double check that -your app has read access to one of the following: - -* /proc/self/fd/0 -* /dev/tty -* /dev/tty[0...6] -* /dev/vc/0 -* /dev/console - -This is usually not a problem if you run from the physical terminal (as opposed -to running from a pseudo terminal, such as via SSH). If running from a PTS, a -quick workaround is to run your app as root or add yourself to the tty group, -then re login to the system. - - sudo usermod -aG tty `whoami` - -The keyboard layout used by SDL is the same as the one the kernel uses. -To configure the layout on Raspbian: - - sudo dpkg-reconfigure keyboard-configuration - -To configure the locale, which controls which keys are interpreted as letters, -this determining the CAPS LOCK behavior: - - sudo dpkg-reconfigure locales - -================================================================================ - Notes -================================================================================ - -* When launching apps remotely (via SSH), SDL can prevent local keystrokes from - leaking into the console only if it has root privileges. Launching apps locally - does not suffer from this issue. - - diff --git a/Engine/lib/sdl/README-touch.txt b/Engine/lib/sdl/README-touch.txt deleted file mode 100644 index 6b41707ed5..0000000000 --- a/Engine/lib/sdl/README-touch.txt +++ /dev/null @@ -1,84 +0,0 @@ -=========================================================================== -System Specific Notes -=========================================================================== -Linux: -The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it. - -Mac: -The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do. - -iPhone: -Works out of box. - -Windows: -Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com - -=========================================================================== -Events -=========================================================================== -SDL_FINGERDOWN: -Sent when a finger (or stylus) is placed on a touch device. -Fields: -event.tfinger.touchId - the Id of the touch device. -event.tfinger.fingerId - the Id of the finger which just went down. -event.tfinger.x - the x coordinate of the touch (0..1) -event.tfinger.y - the y coordinate of the touch (0..1) -event.tfinger.pressure - the pressure of the touch (0..1) - -SDL_FINGERMOTION: -Sent when a finger (or stylus) is moved on the touch device. -Fields: -Same as SDL_FINGERDOWN but with additional: -event.tfinger.dx - change in x coordinate during this motion event. -event.tfinger.dy - change in y coordinate during this motion event. - -SDL_FINGERUP: -Sent when a finger (or stylus) is lifted from the touch device. -Fields: -Same as SDL_FINGERDOWN. - - -=========================================================================== -Functions -=========================================================================== -SDL provides the ability to access the underlying Finger structures. -These structures should _never_ be modified. - -The following functions are included from SDL_touch.h - -To get a SDL_TouchID call SDL_GetTouchDevice(index). -This returns a SDL_TouchID. -IMPORTANT: If the touch has been removed, or there is no touch with the given ID, SDL_GetTouchID will return 0. Be sure to check for this! - -The number of touch devices can be queried with SDL_GetNumTouchDevices(). - -A SDL_TouchID may be used to get pointers to SDL_Finger. - -SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device. - -The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following: - - float x = event.tfinger.x; - float y = event.tfinger.y; - - - -To get a SDL_Finger, call SDL_GetTouchFinger(touchID,index), where touchID is a SDL_TouchID, and index is the requested finger. -This returns a SDL_Finger*, or NULL if the finger does not exist, or has been removed. -A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled. -As a result, be very careful to check for NULL return values. - -A SDL_Finger has the following fields: ->x,y,pressure: - The current coordinates of the touch. ->pressure: - The pressure of the touch. - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com - (original author, API was changed since) diff --git a/Engine/lib/sdl/README-wince.txt b/Engine/lib/sdl/README-wince.txt deleted file mode 100644 index 9ebc695a72..0000000000 --- a/Engine/lib/sdl/README-wince.txt +++ /dev/null @@ -1,8 +0,0 @@ - -Windows CE is no longer supported by SDL. - -We have left the CE support in SDL 1.2 for those that must have it, and we -have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3. - ---ryan. - diff --git a/Engine/lib/sdl/README-windows.txt b/Engine/lib/sdl/README-windows.txt deleted file mode 100644 index 7f9c4a35f2..0000000000 --- a/Engine/lib/sdl/README-windows.txt +++ /dev/null @@ -1,42 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Windows -================================================================================ - -================================================================================ -OpenGL ES 2.x support -================================================================================ - -SDL has support for OpenGL ES 2.x under Windows via two alternative -implementations. -The most straightforward method consists in running your app in a system with -a graphic card paired with a relatively recent (as of November of 2013) driver -which supports the WGL_EXT_create_context_es2_profile extension. Vendors known -to ship said extension on Windows currently include nVidia and Intel. - -The other method involves using the ANGLE library (https://code.google.com/p/angleproject/) -If an OpenGL ES 2.x context is requested and no WGL_EXT_create_context_es2_profile -extension is found, SDL will try to load the libEGL.dll library provided by -ANGLE. -To obtain the ANGLE binaries, you can either compile from source from -https://chromium.googlesource.com/angle/angle or copy the relevant binaries from -a recent Chrome/Chromium install for Windows. The files you need are: - - * libEGL.dll - * libGLESv2.dll - * d3dcompiler_46.dll (supports Windows Vista or later, better shader compiler) - or... - * d3dcompiler_43.dll (supports Windows XP or later) - -If you compile ANGLE from source, you can configure it so it does not need the -d3dcompiler_* DLL at all (for details on this, see their documentation). -However, by default SDL will try to preload the d3dcompiler_46.dll to -comply with ANGLE's requirements. If you wish SDL to preload d3dcompiler_43.dll (to -support Windows XP) or to skip this step at all, you can use the -SDL_HINT_VIDEO_WIN_D3DCOMPILER hint (see SDL_hints.h for more details). - -Known Bugs: - - * SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears - that there's a bug in the library which prevents the window contents from - refreshing if this is set to anything other than the default value. - diff --git a/Engine/lib/sdl/README.txt b/Engine/lib/sdl/README.txt index b9f80ee737..f76a633ba5 100644 --- a/Engine/lib/sdl/README.txt +++ b/Engine/lib/sdl/README.txt @@ -14,29 +14,8 @@ hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popular games including Valve's award winning catalog and many Humble Bundle games. -SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. -Support for other platforms may be found in the source code. - -SDL is written in C, works natively with C++, and there are bindings -available for several other languages, including C# and Python. - -This library is distributed under the zlib license, which can be found -in the file "COPYING.txt". - -The best way to learn how to use SDL is to check out the header files in -the "include" subdirectory and the programs in the "test" subdirectory. -The header files and test programs are well commented and always up to date. -More documentation and FAQs are available online at: - http://wiki.libsdl.org/ - -If you need help with the library, or just want to discuss SDL related -issues, you can join the developers mailing list: - http://www.libsdl.org/mailing-list.php - -If you want to report bugs or contribute patches, please submit them to -bugzilla: - http://bugzilla.libsdl.org/ +More extensive documentation is available in the docs directory, starting +with README.md Enjoy! Sam Lantinga (slouken@libsdl.org) - diff --git a/Engine/lib/sdl/SDL2.spec b/Engine/lib/sdl/SDL2.spec index e8220c170f..0fe57540f1 100644 --- a/Engine/lib/sdl/SDL2.spec +++ b/Engine/lib/sdl/SDL2.spec @@ -1,7 +1,7 @@ Summary: Simple DirectMedia Layer Name: SDL2 -Version: 2.0.3 -Release: 1 +Version: 2.0.4 +Release: 2 Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz URL: http://www.libsdl.org/ License: zlib @@ -63,12 +63,12 @@ rm -rf $RPM_BUILD_ROOT %files %{__defattr} -%doc README-SDL.txt COPYING.txt CREDITS.txt BUGS.txt +%doc README*.txt COPYING.txt CREDITS.txt BUGS.txt %{_libdir}/lib*.%{__soext}.* %files devel %{__defattr} -%doc README README-SDL.txt COPYING CREDITS BUGS WhatsNew +%doc docs/README*.md %{_bindir}/*-config %{_libdir}/lib*.a %{_libdir}/lib*.la @@ -78,13 +78,19 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/* %changelog +* Thu Jun 04 2015 Ryan C. Gordon +- Fixed README paths. + +* Sun Dec 07 2014 Simone Contini +- Fixed changelog date issue and docs filenames + * Sun Jan 22 2012 Sam Lantinga - Updated for SDL 2.0 * Tue May 16 2006 Sam Lantinga - Removed support for Darwin, due to build problems on ps2linux -* Mon Jan 03 2004 Anders Bjorklund +* Sat Jan 03 2004 Anders Bjorklund - Added support for Darwin, updated spec file * Wed Jan 19 2000 Sam Lantinga diff --git a/Engine/lib/sdl/SDL2.spec.in b/Engine/lib/sdl/SDL2.spec.in index 2a5c479242..dba240037f 100644 --- a/Engine/lib/sdl/SDL2.spec.in +++ b/Engine/lib/sdl/SDL2.spec.in @@ -1,7 +1,7 @@ Summary: Simple DirectMedia Layer Name: SDL2 Version: @SDL_VERSION@ -Release: 1 +Release: 2 Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz URL: http://www.libsdl.org/ License: zlib @@ -63,12 +63,12 @@ rm -rf $RPM_BUILD_ROOT %files %{__defattr} -%doc README-SDL.txt COPYING.txt CREDITS.txt BUGS.txt +%doc README*.txt COPYING.txt CREDITS.txt BUGS.txt %{_libdir}/lib*.%{__soext}.* %files devel %{__defattr} -%doc README README-SDL.txt COPYING CREDITS BUGS WhatsNew +%doc docs/README*.md %{_bindir}/*-config %{_libdir}/lib*.a %{_libdir}/lib*.la @@ -78,13 +78,19 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/* %changelog +* Thu Jun 04 2015 Ryan C. Gordon +- Fixed README paths. + +* Sun Dec 07 2014 Simone Contini +- Fixed changelog date issue and docs filenames + * Sun Jan 22 2012 Sam Lantinga - Updated for SDL 2.0 * Tue May 16 2006 Sam Lantinga - Removed support for Darwin, due to build problems on ps2linux -* Mon Jan 03 2004 Anders Bjorklund +* Sat Jan 03 2004 Anders Bjorklund - Added support for Darwin, updated spec file * Wed Jan 19 2000 Sam Lantinga diff --git a/Engine/lib/sdl/VisualC.html b/Engine/lib/sdl/VisualC.html index a25907bd93..89035d6776 100644 --- a/Engine/lib/sdl/VisualC.html +++ b/Engine/lib/sdl/VisualC.html @@ -22,8 +22,7 @@

There are different solution files for the various versions of the IDE. Please use the appropiate version - 2008, 2010 or 2012; the 2010EE and 2012EE files - should be used with the "Express Edition" releases. + 2008, 2010, 2012 or 2013.

Build the .dll and .lib files. @@ -111,8 +110,8 @@

Now create the basic body of your project. The body of your program should take - the following form: -

+			the following form:
+			

 #include "SDL.h"
 
 int main( int argc, char* argv[] )
@@ -120,8 +119,7 @@ 

// Body of the program goes here. return 0; } -

- +

That's it! diff --git a/Engine/lib/sdl/VisualC/clean.sh b/Engine/lib/sdl/VisualC/clean.sh index f90a11e970..fd16f9a127 100644 --- a/Engine/lib/sdl/VisualC/clean.sh +++ b/Engine/lib/sdl/VisualC/clean.sh @@ -1,5 +1,4 @@ -find . -type d -name 'Debug' -exec rm -rv {} \; -find . -type d -name 'Release' -exec rm -rv {} \; -find . -type f -name '*.user' -exec rm -v {} \; -find . -type f -name '*.ncb' -exec rm -v {} \; -find . -type f -name '*.suo' -exec rm -v {} \; +#!/bin/sh +find . -type f \( -name '*.user' -o -name '*.sdf' -o -name '*.ncb' -o -name '*.suo' \) -print -delete +find . -type f \( -name '*.bmp' -o -name '*.wav' -o -name '*.dat' \) -print -delete +find . -depth -type d \( -name Win32 -o -name x64 \) -exec rm -rv {} \; diff --git a/Engine/lib/sdl/WhatsNew.txt b/Engine/lib/sdl/WhatsNew.txt index d0e5f6d38e..9b7139f5d8 100644 --- a/Engine/lib/sdl/WhatsNew.txt +++ b/Engine/lib/sdl/WhatsNew.txt @@ -1,6 +1,97 @@ This is a list of major changes in SDL's version history. +--------------------------------------------------------------------------- +2.0.4: +--------------------------------------------------------------------------- + +General: +* Added support for web applications using Emscripten, see docs/README-emscripten.md for more information +* Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information +* Added an API to queue audio instead of using the audio callback: + SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio() +* Added events for audio device hot plug support: + SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED +* Added SDL_PointInRect() +* Added SDL_HasAVX2() to detect CPUs with AVX2 support +* Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas) +* Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any +* Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer +* Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window +* Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space +* Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window +* Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not +* Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension) +* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms +* Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers +* Added a Vivante video driver that is used on various SoC platforms +* Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated +* Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling +* Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads +* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines +* Improved support for WAV and BMP files with unusual chunks in them +* Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState +* Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden +* Added SDL_GetDisplayDPI() to get the DPI information for a display +* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick +* Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to. +* Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to. + +Windows: +* Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform) +* Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint +* SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds +* Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage() +* Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop +* You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field +* SDL_SysWMinfo now contains the window HDC +* Added support for Unicode command line options +* Prevent beeping when Alt-key combos are pressed +* SDL_SetTextInputRect() re-positions the OS-rendered IME +* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed +* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated) + +Mac OS X: +* Implemented drag-and-drop support +* Improved joystick hot-plug detection +* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations +* Fixed relative mouse mode when the application loses/regains focus +* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode +* Fixed the refresh rate of display modes +* SDL_SysWMInfo is now ARC-compatible +* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process + +Linux: +* Enabled building with Mir and Wayland support by default. +* Added IBus IME support +* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events +* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow() +* Added support for multiple audio devices when using Pulseaudio +* Fixed duplicate mouse events when using relative mouse motion + +iOS: +* Added support for iOS 8 +* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels +* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior) +* Added native resolution support for the iPhone 6 Plus +* Added support for MFi game controllers +* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK +* Added sRGB OpenGL ES context support on iOS 7+ +* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER +* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view +* Fixed various rotation and orientation issues +* Fixed memory leaks + +Android: +* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events +* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION +* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER +* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox() + +Raspberry Pi: +* Added support for the Raspberry Pi 2 + + --------------------------------------------------------------------------- 2.0.3: --------------------------------------------------------------------------- diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Default.png b/Engine/lib/sdl/Xcode-iOS/Demos/Default.png deleted file mode 100644 index f91282875a..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/Default.png and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Demos.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode-iOS/Demos/Demos.xcodeproj/project.pbxproj deleted file mode 100644 index e3eaecdaed..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/Demos.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1019 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 1D3623EC0D0F72F000981E51 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FD15FD690E086911003BDF25 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FD15FD6A0E086911003BDF25 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FD15FD6B0E086911003BDF25 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FD15FD6C0E086911003BDF25 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FD15FD6D0E086911003BDF25 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FD1B48DD0E313255007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD1B49980E313261007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD1B499C0E313269007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD1B499E0E31326C007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD1B49A00E313270007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD1B49A20E313273007AB34E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FD5F9CE80E0E0741008E885B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FD5F9CE90E0E0741008E885B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FD5F9CEA0E0E0741008E885B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FD5F9CEB0E0E0741008E885B /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FD5F9CEC0E0E0741008E885B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FD77A00E0E26BC0500F39101 /* happy.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0080E26BC0500F39101 /* happy.c */; }; - FD77A0130E26BC0500F39101 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FD77A0160E26BC0500F39101 /* rectangles.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A00A0E26BC0500F39101 /* rectangles.c */; }; - FD77A0190E26BC0500F39101 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FD77A01F0E26BC0500F39101 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FD77A0230E26BC0500F39101 /* touch.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A00B0E26BC0500F39101 /* touch.c */; }; - FD77A0250E26BC0500F39101 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FD77A0270E26BC0500F39101 /* mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0090E26BC0500F39101 /* mixer.c */; }; - FD77A02A0E26BC2700F39101 /* accelerometer.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0050E26BC0500F39101 /* accelerometer.c */; }; - FD787AA10E22A5CC003E8E36 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FD787AA20E22A5CC003E8E36 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FD787AA30E22A5CC003E8E36 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FD787AA40E22A5CC003E8E36 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FD787AA50E22A5CC003E8E36 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FD925B190E0F276600E92347 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FD925B1A0E0F276600E92347 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FD925B1B0E0F276600E92347 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FDB651D00E43D1AD00F688B5 /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CC0E43D19800F688B5 /* icon.bmp */; }; - FDB651D10E43D1B300F688B5 /* ship.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CD0E43D19800F688B5 /* ship.bmp */; }; - FDB651D20E43D1B500F688B5 /* space.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CE0E43D19800F688B5 /* space.bmp */; }; - FDB651D30E43D1BA00F688B5 /* stroke.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CF0E43D19800F688B5 /* stroke.bmp */; }; - FDB651D40E43D1C500F688B5 /* ds_brush_snare.wav in Resources */ = {isa = PBXBuildFile; fileRef = FDB651C80E43D19800F688B5 /* ds_brush_snare.wav */; }; - FDB651D50E43D1C500F688B5 /* ds_china.wav in Resources */ = {isa = PBXBuildFile; fileRef = FDB651C90E43D19800F688B5 /* ds_china.wav */; }; - FDB651D60E43D1C500F688B5 /* ds_kick_big_amb.wav in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CA0E43D19800F688B5 /* ds_kick_big_amb.wav */; }; - FDB651D70E43D1C500F688B5 /* ds_loose_skin_mute.wav in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CB0E43D19800F688B5 /* ds_loose_skin_mute.wav */; }; - FDB651D80E43D1D800F688B5 /* stroke.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CF0E43D19800F688B5 /* stroke.bmp */; }; - FDB651F90E43D1F300F688B5 /* stroke.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB651CF0E43D19800F688B5 /* stroke.bmp */; }; - FDB651FA0E43D1F300F688B5 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FDB651FB0E43D1F300F688B5 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FDB651FD0E43D1F300F688B5 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FDB652000E43D1F300F688B5 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B489E0E313154007AB34E /* libSDL2.a */; }; - FDB652020E43D1F300F688B5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FDB652030E43D1F300F688B5 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FDB652040E43D1F300F688B5 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FDB652050E43D1F300F688B5 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FDB652060E43D1F300F688B5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FDB652070E43D1F300F688B5 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDB652080E43D1F300F688B5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDB652120E43D21A00F688B5 /* keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = FDB652110E43D21A00F688B5 /* keyboard.c */; }; - FDB652C70E43E25900F688B5 /* kromasky_16x16.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDB652C60E43E25900F688B5 /* kromasky_16x16.bmp */; }; - FDB96ED40DEFC9C700FAF19F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FDB96EE00DEFC9DC00FAF19F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FDC202E10E107B1200ABAC90 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FDC202E60E107B1200ABAC90 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FDC202E70E107B1200ABAC90 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FDC202E80E107B1200ABAC90 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FDC202E90E107B1200ABAC90 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FDC202EA0E107B1200ABAC90 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FDC214870E26D78A00DDED23 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FDC52EC80E2843D6008D768C /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FDC52EC90E2843D6008D768C /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD787AA00E22A5CC003E8E36 /* Default.png */; }; - FDC52ECF0E2843D6008D768C /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A0060E26BC0500F39101 /* common.c */; }; - FDC52ED40E2843D6008D768C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FDC52ED50E2843D6008D768C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FDC52ED60E2843D6008D768C /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FDC52ED70E2843D6008D768C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FDC52ED80E2843D6008D768C /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FDC52ED90E2843D6008D768C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDC52EDA0E2843D6008D768C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDC52EE50E284410008D768C /* fireworks.c in Sources */ = {isa = PBXBuildFile; fileRef = FDC52EE40E284410008D768C /* fireworks.c */; }; - FDF0D6960E12D05400247964 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD925B180E0F276600E92347 /* Icon.png */; }; - FDF0D69C0E12D05400247964 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - FDF0D69D0E12D05400247964 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - FDF0D69E0E12D05400247964 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */; }; - FDF0D69F0E12D05400247964 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */; }; - FDF0D6A00E12D05400247964 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */; }; - FDF0D71E0E12D2AB00247964 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDF0D7230E12D31800247964 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDF0D7950E12D52900247964 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDF0D7960E12D52900247964 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDF0D7A70E12D53200247964 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDF0D7A80E12D53200247964 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDF0D7A90E12D53500247964 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDF0D7AA0E12D53500247964 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; - FDF0D7AB0E12D53800247964 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */; }; - FDF0D7AC0E12D53800247964 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDF0D7220E12D31800247964 /* AudioToolbox.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 049F3694130CD86800FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F3696130CD87600FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F3698130CD87F00FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F369A130CD88800FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F369C130CD89000FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F369E130CD89800FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - 049F36A0130CD8A000FF080F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = FD6526620DE8FCCB002AD96B; - remoteInfo = libSDL; - }; - FD1B489D0E313154007AB34E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = FD6526630DE8FCCB002AD96B; - remoteInfo = StaticLib; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 1D6058910D05DD3D006BFB54 /* Rectangles.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Rectangles.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FD15FCB20E086866003BDF25 /* Happy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Happy.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FD1B48920E313154007AB34E /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; }; - FD5F9BE40E0DEBEA008E885B /* Accel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Accel.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FD77A0050E26BC0500F39101 /* accelerometer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = accelerometer.c; sourceTree = ""; }; - FD77A0060E26BC0500F39101 /* common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = common.c; sourceTree = ""; }; - FD77A0070E26BC0500F39101 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; - FD77A0080E26BC0500F39101 /* happy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = happy.c; sourceTree = ""; }; - FD77A0090E26BC0500F39101 /* mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mixer.c; sourceTree = ""; }; - FD77A00A0E26BC0500F39101 /* rectangles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rectangles.c; sourceTree = ""; }; - FD77A00B0E26BC0500F39101 /* touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = touch.c; sourceTree = ""; }; - FD787AA00E22A5CC003E8E36 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - FD925B180E0F276600E92347 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; - FDB651C60E43D19800F688B5 /* license.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = license.txt; sourceTree = ""; }; - FDB651C80E43D19800F688B5 /* ds_brush_snare.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = ds_brush_snare.wav; sourceTree = ""; }; - FDB651C90E43D19800F688B5 /* ds_china.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = ds_china.wav; sourceTree = ""; }; - FDB651CA0E43D19800F688B5 /* ds_kick_big_amb.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = ds_kick_big_amb.wav; sourceTree = ""; }; - FDB651CB0E43D19800F688B5 /* ds_loose_skin_mute.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = ds_loose_skin_mute.wav; sourceTree = ""; }; - FDB651CC0E43D19800F688B5 /* icon.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = icon.bmp; sourceTree = ""; }; - FDB651CD0E43D19800F688B5 /* ship.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = ship.bmp; sourceTree = ""; }; - FDB651CE0E43D19800F688B5 /* space.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = space.bmp; sourceTree = ""; }; - FDB651CF0E43D19800F688B5 /* stroke.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = stroke.bmp; sourceTree = ""; }; - FDB6520C0E43D1F300F688B5 /* Keyboard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Keyboard.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDB652110E43D21A00F688B5 /* keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = keyboard.c; sourceTree = ""; }; - FDB652C60E43E25900F688B5 /* kromasky_16x16.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = kromasky_16x16.bmp; sourceTree = ""; }; - FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - FDC202EE0E107B1200ABAC90 /* Touch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Touch.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDC52EDE0E2843D6008D768C /* Fireworks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Fireworks.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDC52EE40E284410008D768C /* fireworks.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fireworks.c; sourceTree = ""; }; - FDF0D6A40E12D05400247964 /* Mixer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Mixer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - FDF0D7220E12D31800247964 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B48DD0E313255007AB34E /* libSDL2.a in Frameworks */, - FDF0D7AB0E12D53800247964 /* CoreAudio.framework in Frameworks */, - FDF0D7AC0E12D53800247964 /* AudioToolbox.framework in Frameworks */, - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, - 1D3623EC0D0F72F000981E51 /* CoreGraphics.framework in Frameworks */, - FDB96ED40DEFC9C700FAF19F /* OpenGLES.framework in Frameworks */, - FDB96EE00DEFC9DC00FAF19F /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD15FCB00E086866003BDF25 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B49980E313261007AB34E /* libSDL2.a in Frameworks */, - FDF0D7A90E12D53500247964 /* CoreAudio.framework in Frameworks */, - FDF0D7AA0E12D53500247964 /* AudioToolbox.framework in Frameworks */, - FD15FD690E086911003BDF25 /* Foundation.framework in Frameworks */, - FD15FD6A0E086911003BDF25 /* UIKit.framework in Frameworks */, - FD15FD6B0E086911003BDF25 /* CoreGraphics.framework in Frameworks */, - FD15FD6C0E086911003BDF25 /* OpenGLES.framework in Frameworks */, - FD15FD6D0E086911003BDF25 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD5F9BE20E0DEBEA008E885B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B499C0E313269007AB34E /* libSDL2.a in Frameworks */, - FDF0D7A70E12D53200247964 /* CoreAudio.framework in Frameworks */, - FDF0D7A80E12D53200247964 /* AudioToolbox.framework in Frameworks */, - FD5F9CEB0E0E0741008E885B /* OpenGLES.framework in Frameworks */, - FD5F9CEC0E0E0741008E885B /* QuartzCore.framework in Frameworks */, - FD5F9CE80E0E0741008E885B /* Foundation.framework in Frameworks */, - FD5F9CE90E0E0741008E885B /* UIKit.framework in Frameworks */, - FD5F9CEA0E0E0741008E885B /* CoreGraphics.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDB651FF0E43D1F300F688B5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB652000E43D1F300F688B5 /* libSDL2.a in Frameworks */, - FDB652020E43D1F300F688B5 /* Foundation.framework in Frameworks */, - FDB652030E43D1F300F688B5 /* UIKit.framework in Frameworks */, - FDB652040E43D1F300F688B5 /* CoreGraphics.framework in Frameworks */, - FDB652050E43D1F300F688B5 /* OpenGLES.framework in Frameworks */, - FDB652060E43D1F300F688B5 /* QuartzCore.framework in Frameworks */, - FDB652070E43D1F300F688B5 /* CoreAudio.framework in Frameworks */, - FDB652080E43D1F300F688B5 /* AudioToolbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC202E40E107B1200ABAC90 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B499E0E31326C007AB34E /* libSDL2.a in Frameworks */, - FDF0D7950E12D52900247964 /* CoreAudio.framework in Frameworks */, - FDF0D7960E12D52900247964 /* AudioToolbox.framework in Frameworks */, - FDC202E60E107B1200ABAC90 /* Foundation.framework in Frameworks */, - FDC202E70E107B1200ABAC90 /* UIKit.framework in Frameworks */, - FDC202E80E107B1200ABAC90 /* CoreGraphics.framework in Frameworks */, - FDC202E90E107B1200ABAC90 /* OpenGLES.framework in Frameworks */, - FDC202EA0E107B1200ABAC90 /* QuartzCore.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC52ED10E2843D6008D768C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B49A20E313273007AB34E /* libSDL2.a in Frameworks */, - FDC52ED40E2843D6008D768C /* Foundation.framework in Frameworks */, - FDC52ED50E2843D6008D768C /* UIKit.framework in Frameworks */, - FDC52ED60E2843D6008D768C /* CoreGraphics.framework in Frameworks */, - FDC52ED70E2843D6008D768C /* OpenGLES.framework in Frameworks */, - FDC52ED80E2843D6008D768C /* QuartzCore.framework in Frameworks */, - FDC52ED90E2843D6008D768C /* CoreAudio.framework in Frameworks */, - FDC52EDA0E2843D6008D768C /* AudioToolbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDF0D69A0E12D05400247964 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FD1B49A00E313270007AB34E /* libSDL2.a in Frameworks */, - FDF0D69C0E12D05400247964 /* Foundation.framework in Frameworks */, - FDF0D69D0E12D05400247964 /* UIKit.framework in Frameworks */, - FDF0D69E0E12D05400247964 /* CoreGraphics.framework in Frameworks */, - FDF0D69F0E12D05400247964 /* OpenGLES.framework in Frameworks */, - FDF0D6A00E12D05400247964 /* QuartzCore.framework in Frameworks */, - FDF0D71E0E12D2AB00247964 /* CoreAudio.framework in Frameworks */, - FDF0D7230E12D31800247964 /* AudioToolbox.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 1D6058910D05DD3D006BFB54 /* Rectangles.app */, - FD15FCB20E086866003BDF25 /* Happy.app */, - FD5F9BE40E0DEBEA008E885B /* Accel.app */, - FDC202EE0E107B1200ABAC90 /* Touch.app */, - FDF0D6A40E12D05400247964 /* Mixer.app */, - FDC52EDE0E2843D6008D768C /* Fireworks.app */, - FDB6520C0E43D1F300F688B5 /* Keyboard.app */, - ); - name = Products; - sourceTree = ""; - }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { - isa = PBXGroup; - children = ( - FD1B48920E313154007AB34E /* SDL.xcodeproj */, - FD77A0040E26BC0500F39101 /* src */, - 29B97317FDCFA39411CA2CEA /* Resources */, - 29B97323FDCFA39411CA2CEA /* Frameworks */, - 19C28FACFE9D520D11CA2CBB /* Products */, - ); - name = CustomTemplate; - sourceTree = ""; - }; - 29B97317FDCFA39411CA2CEA /* Resources */ = { - isa = PBXGroup; - children = ( - FDB651C30E43D19800F688B5 /* data */, - FD787AA00E22A5CC003E8E36 /* Default.png */, - FD925B180E0F276600E92347 /* Icon.png */, - 8D1107310486CEB800E47090 /* Info.plist */, - ); - name = Resources; - sourceTree = ""; - }; - 29B97323FDCFA39411CA2CEA /* Frameworks */ = { - isa = PBXGroup; - children = ( - FDF0D7220E12D31800247964 /* AudioToolbox.framework */, - FDB96EDF0DEFC9DC00FAF19F /* QuartzCore.framework */, - FDB96ED30DEFC9C700FAF19F /* OpenGLES.framework */, - 1D3623EB0D0F72F000981E51 /* CoreGraphics.framework */, - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, - 1D30AB110D05D00D00671497 /* Foundation.framework */, - FDF0D71D0E12D2AB00247964 /* CoreAudio.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - FD1B48930E313154007AB34E /* Products */ = { - isa = PBXGroup; - children = ( - FD1B489E0E313154007AB34E /* libSDL2.a */, - ); - name = Products; - sourceTree = ""; - }; - FD77A0040E26BC0500F39101 /* src */ = { - isa = PBXGroup; - children = ( - FD77A0060E26BC0500F39101 /* common.c */, - FD77A0070E26BC0500F39101 /* common.h */, - FD77A00A0E26BC0500F39101 /* rectangles.c */, - FD77A0080E26BC0500F39101 /* happy.c */, - FD77A0050E26BC0500F39101 /* accelerometer.c */, - FD77A00B0E26BC0500F39101 /* touch.c */, - FD77A0090E26BC0500F39101 /* mixer.c */, - FDB652110E43D21A00F688B5 /* keyboard.c */, - FDC52EE40E284410008D768C /* fireworks.c */, - ); - path = src; - sourceTree = ""; - }; - FDB651C30E43D19800F688B5 /* data */ = { - isa = PBXGroup; - children = ( - FDB651C40E43D19800F688B5 /* bitmapfont */, - FDB651C70E43D19800F688B5 /* drums */, - FDB651CC0E43D19800F688B5 /* icon.bmp */, - FDB651CD0E43D19800F688B5 /* ship.bmp */, - FDB651CE0E43D19800F688B5 /* space.bmp */, - FDB651CF0E43D19800F688B5 /* stroke.bmp */, - ); - path = data; - sourceTree = ""; - }; - FDB651C40E43D19800F688B5 /* bitmapfont */ = { - isa = PBXGroup; - children = ( - FDB652C60E43E25900F688B5 /* kromasky_16x16.bmp */, - FDB651C60E43D19800F688B5 /* license.txt */, - ); - path = bitmapfont; - sourceTree = ""; - }; - FDB651C70E43D19800F688B5 /* drums */ = { - isa = PBXGroup; - children = ( - FDB651C80E43D19800F688B5 /* ds_brush_snare.wav */, - FDB651C90E43D19800F688B5 /* ds_china.wav */, - FDB651CA0E43D19800F688B5 /* ds_kick_big_amb.wav */, - FDB651CB0E43D19800F688B5 /* ds_loose_skin_mute.wav */, - ); - path = drums; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1D6058900D05DD3D006BFB54 /* Rectangles */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Rectangles" */; - buildPhases = ( - 1D60588D0D05DD3D006BFB54 /* Resources */, - 1D60588E0D05DD3D006BFB54 /* Sources */, - 1D60588F0D05DD3D006BFB54 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F3695130CD86800FF080F /* PBXTargetDependency */, - ); - name = Rectangles; - productName = SDLiPodTest; - productReference = 1D6058910D05DD3D006BFB54 /* Rectangles.app */; - productType = "com.apple.product-type.application"; - }; - FD15FCB10E086866003BDF25 /* Happy */ = { - isa = PBXNativeTarget; - buildConfigurationList = FD15FCB70E086867003BDF25 /* Build configuration list for PBXNativeTarget "Happy" */; - buildPhases = ( - FD15FCAE0E086866003BDF25 /* Resources */, - FD15FCAF0E086866003BDF25 /* Sources */, - FD15FCB00E086866003BDF25 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F3697130CD87600FF080F /* PBXTargetDependency */, - ); - name = Happy; - productName = BMPTest; - productReference = FD15FCB20E086866003BDF25 /* Happy.app */; - productType = "com.apple.product-type.application"; - }; - FD5F9BE30E0DEBEA008E885B /* Accel */ = { - isa = PBXNativeTarget; - buildConfigurationList = FD5F9BE90E0DEBEB008E885B /* Build configuration list for PBXNativeTarget "Accel" */; - buildPhases = ( - FD5F9BE00E0DEBEA008E885B /* Resources */, - FD5F9BE10E0DEBEA008E885B /* Sources */, - FD5F9BE20E0DEBEA008E885B /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F3699130CD87F00FF080F /* PBXTargetDependency */, - ); - name = Accel; - productName = Accelerometer; - productReference = FD5F9BE40E0DEBEA008E885B /* Accel.app */; - productType = "com.apple.product-type.application"; - }; - FDB651F70E43D1F300F688B5 /* Keyboard */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDB652090E43D1F300F688B5 /* Build configuration list for PBXNativeTarget "Keyboard" */; - buildPhases = ( - FDB651F80E43D1F300F688B5 /* Resources */, - FDB651FC0E43D1F300F688B5 /* Sources */, - FDB651FF0E43D1F300F688B5 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F36A1130CD8A000FF080F /* PBXTargetDependency */, - ); - name = Keyboard; - productName = Accelerometer; - productReference = FDB6520C0E43D1F300F688B5 /* Keyboard.app */; - productType = "com.apple.product-type.application"; - }; - FDC202DD0E107B1200ABAC90 /* Touch */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDC202EB0E107B1200ABAC90 /* Build configuration list for PBXNativeTarget "Touch" */; - buildPhases = ( - FDC202DE0E107B1200ABAC90 /* Resources */, - FDC202E20E107B1200ABAC90 /* Sources */, - FDC202E40E107B1200ABAC90 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F369B130CD88800FF080F /* PBXTargetDependency */, - ); - name = Touch; - productName = Accelerometer; - productReference = FDC202EE0E107B1200ABAC90 /* Touch.app */; - productType = "com.apple.product-type.application"; - }; - FDC52EC60E2843D6008D768C /* Fireworks */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDC52EDB0E2843D6008D768C /* Build configuration list for PBXNativeTarget "Fireworks" */; - buildPhases = ( - FDC52EC70E2843D6008D768C /* Resources */, - FDC52ECE0E2843D6008D768C /* Sources */, - FDC52ED10E2843D6008D768C /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F369F130CD89800FF080F /* PBXTargetDependency */, - ); - name = Fireworks; - productName = Accelerometer; - productReference = FDC52EDE0E2843D6008D768C /* Fireworks.app */; - productType = "com.apple.product-type.application"; - }; - FDF0D6920E12D05400247964 /* Mixer */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDF0D6A10E12D05400247964 /* Build configuration list for PBXNativeTarget "Mixer" */; - buildPhases = ( - FDF0D6930E12D05400247964 /* Resources */, - FDF0D6980E12D05400247964 /* Sources */, - FDF0D69A0E12D05400247964 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 049F369D130CD89000FF080F /* PBXTargetDependency */, - ); - name = Mixer; - productName = Accelerometer; - productReference = FDF0D6A40E12D05400247964 /* Mixer.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - }; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Demos" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = FD1B48930E313154007AB34E /* Products */; - ProjectRef = FD1B48920E313154007AB34E /* SDL.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 1D6058900D05DD3D006BFB54 /* Rectangles */, - FD15FCB10E086866003BDF25 /* Happy */, - FD5F9BE30E0DEBEA008E885B /* Accel */, - FDC202DD0E107B1200ABAC90 /* Touch */, - FDF0D6920E12D05400247964 /* Mixer */, - FDC52EC60E2843D6008D768C /* Fireworks */, - FDB651F70E43D1F300F688B5 /* Keyboard */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - FD1B489E0E313154007AB34E /* libSDL2.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libSDL2.a; - remoteRef = FD1B489D0E313154007AB34E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 1D60588D0D05DD3D006BFB54 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD925B1B0E0F276600E92347 /* Icon.png in Resources */, - FD787AA20E22A5CC003E8E36 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD15FCAE0E086866003BDF25 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651D00E43D1AD00F688B5 /* icon.bmp in Resources */, - FD925B1A0E0F276600E92347 /* Icon.png in Resources */, - FD787AA10E22A5CC003E8E36 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD5F9BE00E0DEBEA008E885B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651D20E43D1B500F688B5 /* space.bmp in Resources */, - FDB651D10E43D1B300F688B5 /* ship.bmp in Resources */, - FD925B190E0F276600E92347 /* Icon.png in Resources */, - FD787AA30E22A5CC003E8E36 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDB651F80E43D1F300F688B5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651F90E43D1F300F688B5 /* stroke.bmp in Resources */, - FDB651FA0E43D1F300F688B5 /* Icon.png in Resources */, - FDB651FB0E43D1F300F688B5 /* Default.png in Resources */, - FDB652C70E43E25900F688B5 /* kromasky_16x16.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC202DE0E107B1200ABAC90 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651D30E43D1BA00F688B5 /* stroke.bmp in Resources */, - FDC202E10E107B1200ABAC90 /* Icon.png in Resources */, - FD787AA40E22A5CC003E8E36 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC52EC70E2843D6008D768C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651D80E43D1D800F688B5 /* stroke.bmp in Resources */, - FDC52EC80E2843D6008D768C /* Icon.png in Resources */, - FDC52EC90E2843D6008D768C /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDF0D6930E12D05400247964 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651D40E43D1C500F688B5 /* ds_brush_snare.wav in Resources */, - FDB651D50E43D1C500F688B5 /* ds_china.wav in Resources */, - FDB651D60E43D1C500F688B5 /* ds_kick_big_amb.wav in Resources */, - FDB651D70E43D1C500F688B5 /* ds_loose_skin_mute.wav in Resources */, - FDF0D6960E12D05400247964 /* Icon.png in Resources */, - FD787AA50E22A5CC003E8E36 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1D60588E0D05DD3D006BFB54 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A0130E26BC0500F39101 /* common.c in Sources */, - FD77A0160E26BC0500F39101 /* rectangles.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD15FCAF0E086866003BDF25 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDC214870E26D78A00DDED23 /* common.c in Sources */, - FD77A00E0E26BC0500F39101 /* happy.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FD5F9BE10E0DEBEA008E885B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A0190E26BC0500F39101 /* common.c in Sources */, - FD77A02A0E26BC2700F39101 /* accelerometer.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDB651FC0E43D1F300F688B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDB651FD0E43D1F300F688B5 /* common.c in Sources */, - FDB652120E43D21A00F688B5 /* keyboard.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC202E20E107B1200ABAC90 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A01F0E26BC0500F39101 /* common.c in Sources */, - FD77A0230E26BC0500F39101 /* touch.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC52ECE0E2843D6008D768C /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDC52ECF0E2843D6008D768C /* common.c in Sources */, - FDC52EE50E284410008D768C /* fireworks.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDF0D6980E12D05400247964 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A0250E26BC0500F39101 /* common.c in Sources */, - FD77A0270E26BC0500F39101 /* mixer.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 049F3695130CD86800FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F3694130CD86800FF080F /* PBXContainerItemProxy */; - }; - 049F3697130CD87600FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F3696130CD87600FF080F /* PBXContainerItemProxy */; - }; - 049F3699130CD87F00FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F3698130CD87F00FF080F /* PBXContainerItemProxy */; - }; - 049F369B130CD88800FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F369A130CD88800FF080F /* PBXContainerItemProxy */; - }; - 049F369D130CD89000FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F369C130CD89000FF080F /* PBXContainerItemProxy */; - }; - 049F369F130CD89800FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F369E130CD89800FF080F /* PBXContainerItemProxy */; - }; - 049F36A1130CD8A000FF080F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libSDL; - targetProxy = 049F36A0130CD8A000FF080F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1D6058940D05DD3E006BFB54 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Rectangles; - }; - name = Debug; - }; - 1D6058950D05DD3E006BFB54 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Rectangles; - }; - name = Release; - }; - C01FCF4F08A954540054247B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - armv6, - armv7, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ../../include; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - PRELINK_LIBS = ""; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C01FCF5008A954540054247B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - armv6, - armv7, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - HEADER_SEARCH_PATHS = ../../include; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - PRELINK_LIBS = ""; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - FD15FCB50E086866003BDF25 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Happy; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FD15FCB60E086866003BDF25 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Happy; - SDKROOT = iphoneos; - }; - name = Release; - }; - FD5F9BE70E0DEBEB008E885B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Accel; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FD5F9BE80E0DEBEB008E885B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Accel; - SDKROOT = iphoneos; - }; - name = Release; - }; - FDB6520A0E43D1F300F688B5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Keyboard; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FDB6520B0E43D1F300F688B5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Keyboard; - SDKROOT = iphoneos; - }; - name = Release; - }; - FDC202EC0E107B1200ABAC90 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Touch; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FDC202ED0E107B1200ABAC90 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Touch; - SDKROOT = iphoneos; - }; - name = Release; - }; - FDC52EDC0E2843D6008D768C /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Fireworks; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FDC52EDD0E2843D6008D768C /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Fireworks; - SDKROOT = iphoneos; - }; - name = Release; - }; - FDF0D6A20E12D05400247964 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Mixer; - SDKROOT = iphoneos; - }; - name = Debug; - }; - FDF0D6A30E12D05400247964 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = Mixer; - SDKROOT = iphoneos; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Rectangles" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D6058940D05DD3E006BFB54 /* Debug */, - 1D6058950D05DD3E006BFB54 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Demos" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C01FCF4F08A954540054247B /* Debug */, - C01FCF5008A954540054247B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FD15FCB70E086867003BDF25 /* Build configuration list for PBXNativeTarget "Happy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FD15FCB50E086866003BDF25 /* Debug */, - FD15FCB60E086866003BDF25 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FD5F9BE90E0DEBEB008E885B /* Build configuration list for PBXNativeTarget "Accel" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FD5F9BE70E0DEBEB008E885B /* Debug */, - FD5F9BE80E0DEBEB008E885B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDB652090E43D1F300F688B5 /* Build configuration list for PBXNativeTarget "Keyboard" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDB6520A0E43D1F300F688B5 /* Debug */, - FDB6520B0E43D1F300F688B5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDC202EB0E107B1200ABAC90 /* Build configuration list for PBXNativeTarget "Touch" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDC202EC0E107B1200ABAC90 /* Debug */, - FDC202ED0E107B1200ABAC90 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDC52EDB0E2843D6008D768C /* Build configuration list for PBXNativeTarget "Fireworks" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDC52EDC0E2843D6008D768C /* Debug */, - FDC52EDD0E2843D6008D768C /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDF0D6A10E12D05400247964 /* Build configuration list for PBXNativeTarget "Mixer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDF0D6A20E12D05400247964 /* Debug */, - FDF0D6A30E12D05400247964 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Icon.png b/Engine/lib/sdl/Xcode-iOS/Demos/Icon.png deleted file mode 100644 index 83f4d10a21..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/Icon.png and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist b/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist deleted file mode 100644 index 0398f008b8..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NSMainNibFile - - UISupportedInterfaceOrientations - - - diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/README b/Engine/lib/sdl/Xcode-iOS/Demos/README deleted file mode 100644 index 55f8066d66..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/README +++ /dev/null @@ -1,43 +0,0 @@ -============================================================================== -About the iPhone OS Demo Applications -============================================================================== - -Demos.xcodeproj contains several targets for iPhone oriented SDL demos. These demos are written strictly using SDL 1.3 calls. All the demos except for Fireworks (which requires OpenGL ES) should work on platforms other than iPhone OS, though you'll need to write your own compile script. To run them on your favorite platform, you may wish to set the macros SCREEN_WIDTH and SCREEN_HEIGHT, located in common.h. - -Common files: - - common.c and common.h contain code common to all demo applications. This includes macros about the screen dimensions (in pixels), simple error handling, and functions for generating random numbers. - -Rectangles (rectangles.c): - - Draws randomly sized and colored rectangles all over the screen by using SDL_RenderFill. This is the simplest of all the demos. - -Happy (happy.c): - - Loads the classic happy-face bitmap and draws a large number of happy faces bouncing around the screen. Shows how you can load a bitmap into an SDL_Texture. - -Accelerometer (accelerometer.c): - - Uses the iPhone's accelerometer as a joystick device to move a spaceship around the screen. Note the use of the macro SDL_IPHONE_MAX_GFORCE (normally defined in SDL_config_iphoneos.h) which converts between the Sint16 number returned by SDL_JoystickGetAxis, and the floating point units of g-force reported natively by the iPhone. - -Touch (touch.c): - - Acts as a finger-paint type program. Demonstrates how you can use SDL mouse input to accept touch input from the iPhone. If SDL for iPhone is compiled with multitouch as multiple mouse emulation (SDL_IPHONE_MULTIPLE_MICE in SDL_config_iphoneos.h) then the program will accept multiple finger inputs simultaneously. - -Mixer (mixer.c): - - Displays several rectangular buttons which can be used as a virtual drumkit. Demonstrates how you can play .wav sounds in SDL and how you can use SDL_MixAudioFormat to build a software mixer that can play multiple sounds at once. - -Keyboard (keyboard.c): - - Loads a bitmap font and let's the user type words, numbers, and symbols using the iPhone's virtual keyboard. The iPhone's onscreen keyboard visibility is toggled when the user taps the screen. If the user types ':)' a happy face is displayed. Demonstrates how to use functions added to the iPhone implementation of SDL to toggle keyboard onscreen visibility. - -Fireworks (fireworks.c): - - Displays a fireworks show. When you tap the iPhone's screen, fireworks fly from the bottom of the screen and explode at the point that you tapped. Demonstrates how you can use SDL on iPhone to build an OpenGL ES based application. Shows you how you can use SDL_LoadBMP to load a bmp image and convert it to an OpenGL ES texture. Of lesser importance, shows how you can use OpenGL ES point sprites to build an efficient particle system. - -============================================================================== -Building and Running the demos -============================================================================== - -Before building the demos you must first build SDL as a static library for BOTH the iPhone Simulator and the iPhone itself. See the iPhone SDL main README file for directions on how to do this. Once this is done, simply launch XCode, select the target you'd like to build, select the active SDK (simulator or device), and then build and go. diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp b/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp deleted file mode 100644 index c0b6fb964f..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt b/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt deleted file mode 100644 index 6949ec444b..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt +++ /dev/null @@ -1,258 +0,0 @@ - __ _ _ - / _| | | | | -| |_ ___ _ __ | |_ _ __ __ _ ___| | __ -| _/ _ \| '_ \| __| '_ \ / _` |/ __| |/ / -| || (_) | | | | |_| |_) | (_| | (__| < -|_| \___/|_| |_|\__| .__/ \__,_|\___|_|\_\ - | | - |_| ----------------------------------------------------------------------- -Product : font-pack.zip -Website : http://www.spicypixel.net -Author : Marc Russell -Released: 16th January 2008 ----------------------------------------------------------------------- - -What is this? -------------- -font-pack is a package of free art assets to be used under the terms of this document. It is available to game developers and hobbyists alike. - -Contents --------- -The contents of the font-pack ZIP file include 20 bitmap fonts - -Usage License & Restrictions ----------------------------- -font-pack is distributed under the "Common Public License Version 1.0." -The terms of which are given below. If you do not understand the terms of the license please refer to a solicitor. It should however, be relatively clear how this package can be used. - -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON -PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF -THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial code and - documentation distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - - i) changes to the Program, and - - ii) additions to the Program; - - where such changes and/or additions to the Program originate from - and are distributed by that particular Contributor. A Contribution - 'originates' from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's - behalf. Contributions do not include additions to the Program which: - (i) are separate modules of software distributed in conjunction with - the Program under their own license agreement, and (ii) are not - derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents " mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare derivative works of, publicly display, - publicly perform, distribute and sublicense the Contribution of such - Contributor, if any, and such derivative works, in source code and - object code form. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in source code and object code form. This patent license - shall apply to the combination of the Contribution and the Program - if, at the time the Contribution is added by the Contributor, such - addition of the Contribution causes such combination to be covered - by the Licensed Patents. The patent license shall not apply to any - other combinations which include the Contribution. No hardware per - se is licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby assumes - sole responsibility to secure any other intellectual property rights - needed, if any. For example, if a third party patent license is - required to allow Recipient to distribute the Program, it is - Recipient's responsibility to acquire that license before - distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form -under its own license agreement, provided that: - - a) it complies with the terms and conditions of this Agreement; and - - b) its license agreement: - - i) effectively disclaims on behalf of all Contributors all - warranties and conditions, express and implied, including warranties - or conditions of title and non-infringement, and implied warranties - or conditions of merchantability and fitness for a particular - purpose; - - ii) effectively excludes on behalf of all Contributors all liability - for damages, including direct, indirect, special, incidental and - consequential damages, such as lost profits; - - iii) states that any provisions which differ from this Agreement are - offered by that Contributor alone and not by any other party; and - - iv) states that source code for the Program is available from such - Contributor, and informs licensees how to obtain it in a reasonable - manner on or through a medium customarily used for software - exchange. - -When the Program is made available in source code form: - - a) it must be made available under this Agreement; and - - b) a copy of this Agreement must be included with each copy of the - Program. - -Contributors may not remove or alter any copyright notices contained -within the Program. - -Each Contributor must identify itself as the originator of its -Contribution, if any, in a manner that reasonably allows subsequent -Recipients to identify the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, the -Contributor who includes the Program in a commercial product offering -should do so in a manner which does not create potential liability for -other Contributors. Therefore, if a Contributor includes the Program in -a commercial product offering, such Contributor ("Commercial -Contributor") hereby agrees to defend and indemnify every other -Contributor ("Indemnified Contributor") against any losses, damages and -costs (collectively "Losses") arising from claims, lawsuits and other -legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the -Program in a commercial product offering. The obligations in this -section do not apply to any claims or Losses relating to any actual or -alleged intellectual property infringement. In order to qualify, an -Indemnified Contributor must: a) promptly notify the Commercial -Contributor in writing of such claim, and b) allow the Commercial -Contributor to control, and cooperate with the Commercial Contributor -in, the defense and any related settlement negotiations. The Indemnified -Contributor may participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those -performance claims and warranties, and if a court requires any other -Contributor to pay any damages as a result, the Commercial Contributor -must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED -ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES -OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR -A PARTICULAR PURPOSE. Each Recipient is solely responsible for -determining the appropriateness of using and distributing the Program -and assumes all risks associated with its exercise of rights under this -Agreement, including but not limited to the risks and costs of program -errors, compliance with applicable laws, damage to or loss of data, -programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR -ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING -WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR -DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED -HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further action -by the parties hereto, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against a Contributor with -respect to a patent applicable to software (including a cross-claim or -counterclaim in a lawsuit), then any patent licenses granted by that -Contributor to such Recipient under this Agreement shall terminate as of -the date such litigation is filed. In addition, if Recipient institutes -patent litigation against any entity (including a cross-claim or -counterclaim in a lawsuit) alleging that the Program itself (excluding -combinations of the Program with other software or hardware) infringes -such Recipient's patent(s), then such Recipient's rights granted under -Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails -to comply with any of the material terms or conditions of this Agreement -and does not cure such failure in a reasonable period of time after -becoming aware of such noncompliance. If all Recipient's rights under -this Agreement terminate, Recipient agrees to cease use and distribution -of the Program as soon as reasonably practicable. However, Recipient's -obligations under this Agreement and any licenses granted by Recipient -relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and may -only be modified in the following manner. The Agreement Steward reserves -the right to publish new versions (including revisions) of this -Agreement from time to time. No one other than the Agreement Steward has -the right to modify this Agreement. IBM is the initial Agreement -Steward. IBM may assign the responsibility to serve as the Agreement -Steward to a suitable separate entity. Each new version of the Agreement -will be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the -Agreement under which it was received. In addition, after a new version -of the Agreement is published, Contributor may elect to distribute the -Program (including its Contributions) under the new version. Except as -expressly stated in Sections 2(a) and 2(b) above, Recipient receives no -rights or licenses to the intellectual property of any Contributor under -this Agreement, whether expressly, by implication, estoppel or -otherwise. All rights in the Program not expressly granted under this -Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to -this Agreement will bring a legal action under this Agreement more than -one year after the cause of action arose. Each party waives its rights -to a jury trial in any resulting litigation. - diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav b/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav deleted file mode 100644 index fa752637a0..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_china.wav b/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_china.wav deleted file mode 100644 index 21a71a1b1e..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_china.wav and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_kick_big_amb.wav b/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_kick_big_amb.wav deleted file mode 100644 index 404115a18d..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_kick_big_amb.wav and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_loose_skin_mute.wav b/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_loose_skin_mute.wav deleted file mode 100644 index 3db05222b5..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_loose_skin_mute.wav and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/ship.bmp b/Engine/lib/sdl/Xcode-iOS/Demos/data/ship.bmp deleted file mode 100644 index b682dc49d3..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/ship.bmp and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/space.bmp b/Engine/lib/sdl/Xcode-iOS/Demos/data/space.bmp deleted file mode 100644 index 5bcf273a83..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/space.bmp and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/stroke.bmp b/Engine/lib/sdl/Xcode-iOS/Demos/data/stroke.bmp deleted file mode 100644 index d59fed4590..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Demos/data/stroke.bmp and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/accelerometer.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/accelerometer.c deleted file mode 100644 index 3b7985faa0..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/accelerometer.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * accelerometer.c - * written by Holmes Futrell - * use however you want - */ - -#include "SDL.h" -#include "math.h" -#include "common.h" - -#define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ -#define DAMPING 0.5f; /* after bouncing off a wall, damping coefficient determines final speed */ -#define FRICTION 0.0008f /* coefficient of acceleration that opposes direction of motion */ -#define GRAVITY_CONSTANT 0.004f /* how sensitive the ship is to the accelerometer */ - -/* If we aren't on an iPhone, then this definition ought to yield reasonable behavior */ -#ifndef SDL_IPHONE_MAX_GFORCE -#define SDL_IPHONE_MAX_GFORCE 5.0f -#endif - -static SDL_Joystick *accelerometer; /* used for controlling the ship */ - -static struct -{ - float x, y; /* position of ship */ - float vx, vy; /* velocity of ship (in pixels per millesecond) */ - SDL_Rect rect; /* (drawn) position and size of ship */ -} shipData; - -static SDL_Texture *ship = 0; /* texture for spaceship */ -static SDL_Texture *space = 0; /* texture for space (background */ - -void -render(SDL_Renderer *renderer, int w, int h) -{ - - - /* get joystick (accelerometer) axis values and normalize them */ - float ax = SDL_JoystickGetAxis(accelerometer, 0); - float ay = SDL_JoystickGetAxis(accelerometer, 1); - - /* ship screen constraints */ - Uint32 minx = 0.0f; - Uint32 maxx = w - shipData.rect.w; - Uint32 miny = 0.0f; - Uint32 maxy = h - shipData.rect.h; - -#define SINT16_MAX ((float)(0x7FFF)) - - /* update velocity from accelerometer - the factor SDL_IPHONE_MAX_G_FORCE / SINT16_MAX converts between - SDL's units reported from the joytick, and units of g-force, as reported by the accelerometer - */ - shipData.vx += - ax * SDL_IPHONE_MAX_GFORCE / SINT16_MAX * GRAVITY_CONSTANT * - MILLESECONDS_PER_FRAME; - shipData.vy += - ay * SDL_IPHONE_MAX_GFORCE / SINT16_MAX * GRAVITY_CONSTANT * - MILLESECONDS_PER_FRAME; - - float speed = sqrt(shipData.vx * shipData.vx + shipData.vy * shipData.vy); - - if (speed > 0) { - /* compensate for friction */ - float dirx = shipData.vx / speed; /* normalized x velocity */ - float diry = shipData.vy / speed; /* normalized y velocity */ - - /* update velocity due to friction */ - if (speed - FRICTION * MILLESECONDS_PER_FRAME > 0) { - /* apply friction */ - shipData.vx -= dirx * FRICTION * MILLESECONDS_PER_FRAME; - shipData.vy -= diry * FRICTION * MILLESECONDS_PER_FRAME; - } else { - /* applying friction would MORE than stop the ship, so just stop the ship */ - shipData.vx = 0.0f; - shipData.vy = 0.0f; - } - } - - /* update ship location */ - shipData.x += shipData.vx * MILLESECONDS_PER_FRAME; - shipData.y += shipData.vy * MILLESECONDS_PER_FRAME; - - if (shipData.x > maxx) { - shipData.x = maxx; - shipData.vx = -shipData.vx * DAMPING; - } else if (shipData.x < minx) { - shipData.x = minx; - shipData.vx = -shipData.vx * DAMPING; - } - if (shipData.y > maxy) { - shipData.y = maxy; - shipData.vy = -shipData.vy * DAMPING; - } else if (shipData.y < miny) { - shipData.y = miny; - shipData.vy = -shipData.vy * DAMPING; - } - - /* draw the background */ - SDL_RenderCopy(renderer, space, NULL, NULL); - - /* draw the ship */ - shipData.rect.x = shipData.x; - shipData.rect.y = shipData.y; - - SDL_RenderCopy(renderer, ship, NULL, &shipData.rect); - - /* update screen */ - SDL_RenderPresent(renderer); - -} - -void -initializeTextures(SDL_Renderer *renderer) -{ - - SDL_Surface *bmp_surface; - - /* load the ship */ - bmp_surface = SDL_LoadBMP("ship.bmp"); - if (bmp_surface == NULL) { - fatalError("could not ship.bmp"); - } - /* set blue to transparent on the ship */ - SDL_SetColorKey(bmp_surface, 1, - SDL_MapRGB(bmp_surface->format, 0, 0, 255)); - - /* create ship texture from surface */ - ship = SDL_CreateTextureFromSurface(renderer, bmp_surface); - if (ship == 0) { - fatalError("could not create ship texture"); - } - SDL_SetTextureBlendMode(ship, SDL_BLENDMODE_BLEND); - - /* set the width and height of the ship from the surface dimensions */ - shipData.rect.w = bmp_surface->w; - shipData.rect.h = bmp_surface->h; - - SDL_FreeSurface(bmp_surface); - - /* load the space background */ - bmp_surface = SDL_LoadBMP("space.bmp"); - if (bmp_surface == NULL) { - fatalError("could not load space.bmp"); - } - /* create space texture from surface */ - space = SDL_CreateTextureFromSurface(renderer, bmp_surface); - if (space == 0) { - fatalError("could not create space texture"); - } - SDL_FreeSurface(bmp_surface); - -} - - - -int -main(int argc, char *argv[]) -{ - - SDL_Window *window; /* main window */ - SDL_Renderer *renderer; - Uint32 startFrame; /* time frame began to process */ - Uint32 endFrame; /* time frame ended processing */ - Sint32 delay; /* time to pause waiting to draw next frame */ - int done; /* should we clean up and exit? */ - int w, h; - - /* initialize SDL */ - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { - fatalError("Could not initialize SDL"); - } - - /* create main window and renderer */ - window = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL | - SDL_WINDOW_FULLSCREEN); - renderer = SDL_CreateRenderer(window, 0, 0); - - SDL_GetWindowSize(window, &w, &h); - - /* print out some info about joysticks and try to open accelerometer for use */ - printf("There are %d joysticks available\n", SDL_NumJoysticks()); - printf("Default joystick (index 0) is %s\n", SDL_JoystickName(0)); - accelerometer = SDL_JoystickOpen(0); - if (accelerometer == NULL) { - fatalError("Could not open joystick (accelerometer)"); - } - printf("joystick number of axis = %d\n", - SDL_JoystickNumAxes(accelerometer)); - printf("joystick number of hats = %d\n", - SDL_JoystickNumHats(accelerometer)); - printf("joystick number of balls = %d\n", - SDL_JoystickNumBalls(accelerometer)); - printf("joystick number of buttons = %d\n", - SDL_JoystickNumButtons(accelerometer)); - - /* load graphics */ - initializeTextures(renderer); - - /* setup ship */ - shipData.x = (w - shipData.rect.w) / 2; - shipData.y = (h - shipData.rect.h) / 2; - shipData.vx = 0.0f; - shipData.vy = 0.0f; - - done = 0; - /* enter main loop */ - while (!done) { - startFrame = SDL_GetTicks(); - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - done = 1; - } - } - render(renderer, w, h); - endFrame = SDL_GetTicks(); - - /* figure out how much time we have left, and then sleep */ - delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); - if (delay < 0) { - delay = 0; - } else if (delay > MILLESECONDS_PER_FRAME) { - delay = MILLESECONDS_PER_FRAME; - } - SDL_Delay(delay); - } - - /* delete textures */ - SDL_DestroyTexture(ship); - SDL_DestroyTexture(space); - - /* shutdown SDL */ - SDL_Quit(); - - return 0; - -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/common.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/common.c deleted file mode 100644 index b2d9634566..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/common.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * common.c - * written by Holmes Futrell - * use however you want - */ - -#include "common.h" -#include "SDL.h" -#include - -/* - Produces a random int x, min <= x <= max - following a uniform distribution -*/ -int -randomInt(int min, int max) -{ - return min + rand() % (max - min + 1); -} - -/* - Produces a random float x, min <= x <= max - following a uniform distribution - */ -float -randomFloat(float min, float max) -{ - return rand() / (float) RAND_MAX *(max - min) + min; -} - -void -fatalError(const char *string) -{ - printf("%s: %s\n", string, SDL_GetError()); - exit(1); -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/common.h b/Engine/lib/sdl/Xcode-iOS/Demos/src/common.h deleted file mode 100644 index 3e0d94ecf2..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/common.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * common.h - * written by Holmes Futrell - * use however you want - */ - -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 480 - -extern int randomInt(int min, int max); -extern float randomFloat(float min, float max); -extern void fatalError(const char *string); diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/fireworks.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/fireworks.c deleted file mode 100644 index 6c60dd1259..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/fireworks.c +++ /dev/null @@ -1,475 +0,0 @@ -/* - * fireworks.c - * written by Holmes Futrell - * use however you want - */ - -#include "SDL.h" -#include "SDL_opengles.h" -#include "common.h" -#include -#include - -#define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ -#define ACCEL 0.0001f /* acceleration due to gravity, units in pixels per millesecond squared */ -#define WIND_RESISTANCE 0.00005f /* acceleration per unit velocity due to wind resistance */ -#define MAX_PARTICLES 2000 /* maximum number of particles displayed at once */ - -static GLuint particleTextureID; /* OpenGL particle texture id */ -static SDL_bool pointSizeExtensionSupported; /* is GL_OES_point_size_array supported ? */ -/* - used to describe what type of particle a given struct particle is. - emitter - this particle flies up, shooting off trail particles, then finally explodes into dust particles. - trail - shoots off, following emitter particle - dust - radiates outwards from emitter explosion -*/ -enum particleType -{ - emitter = 0, - trail, - dust -}; -/* - struct particle is used to describe each particle displayed on screen -*/ -struct particle -{ - GLfloat x; /* x position of particle */ - GLfloat y; /* y position of particle */ - GLubyte color[4]; /* rgba color of particle */ - GLfloat size; /* size of particle in pixels */ - GLfloat xvel; /* x velocity of particle in pixels per milesecond */ - GLfloat yvel; /* y velocity of particle in pixels per millescond */ - int isActive; /* if not active, then particle is overwritten */ - enum particleType type; /* see enum particleType */ -} particles[MAX_PARTICLES]; /* this array holds all our particles */ - -static int num_active_particles; /* how many members of the particle array are actually being drawn / animated? */ -static int screen_w, screen_h; - -/* function declarations */ -void spawnTrailFromEmitter(struct particle *emitter); -void spawnEmitterParticle(GLfloat x, GLfloat y); -void explodeEmitter(struct particle *emitter); -void initializeParticles(void); -void initializeTexture(); -int nextPowerOfTwo(int x); -void drawParticles(); -void stepParticles(void); - -/* helper function (used in texture loading) - returns next power of two greater than or equal to x -*/ -int -nextPowerOfTwo(int x) -{ - int val = 1; - while (val < x) { - val *= 2; - } - return val; -} - -/* - steps each active particle by timestep MILLESECONDS_PER_FRAME -*/ -void -stepParticles(void) -{ - int i; - struct particle *slot = particles; - struct particle *curr = particles; - for (i = 0; i < num_active_particles; i++) { - /* is the particle actually active, or is it marked for deletion? */ - if (curr->isActive) { - /* is the particle off the screen? */ - if (curr->y > screen_h) - curr->isActive = 0; - else if (curr->y < 0) - curr->isActive = 0; - if (curr->x > screen_w) - curr->isActive = 0; - else if (curr->x < 0) - curr->isActive = 0; - - /* step velocity, then step position */ - curr->yvel += ACCEL * MILLESECONDS_PER_FRAME; - curr->xvel += 0.0f; - curr->y += curr->yvel * MILLESECONDS_PER_FRAME; - curr->x += curr->xvel * MILLESECONDS_PER_FRAME; - - /* particle behavior */ - if (curr->type == emitter) { - /* if we're an emitter, spawn a trail */ - spawnTrailFromEmitter(curr); - /* if we've reached our peak, explode */ - if (curr->yvel > 0.0) { - explodeEmitter(curr); - } - } else { - float speed = - sqrt(curr->xvel * curr->xvel + curr->yvel * curr->yvel); - /* if wind resistance is not powerful enough to stop us completely, - then apply winde resistance, otherwise just stop us completely */ - if (WIND_RESISTANCE * MILLESECONDS_PER_FRAME < speed) { - float normx = curr->xvel / speed; - float normy = curr->yvel / speed; - curr->xvel -= - normx * WIND_RESISTANCE * MILLESECONDS_PER_FRAME; - curr->yvel -= - normy * WIND_RESISTANCE * MILLESECONDS_PER_FRAME; - } else { - curr->xvel = curr->yvel = 0; /* stop particle */ - } - - if (curr->color[3] <= MILLESECONDS_PER_FRAME * 0.1275f) { - /* if this next step will cause us to fade out completely - then just mark for deletion */ - curr->isActive = 0; - } else { - /* otherwise, let's fade a bit more */ - curr->color[3] -= MILLESECONDS_PER_FRAME * 0.1275f; - } - - /* if we're a dust particle, shrink our size */ - if (curr->type == dust) - curr->size -= MILLESECONDS_PER_FRAME * 0.010f; - - } - - /* if we're still active, pack ourselves in the array next - to the last active guy (pack the array tightly) */ - if (curr->isActive) - *(slot++) = *curr; - } /* endif (curr->isActive) */ - curr++; - } - /* the number of active particles is computed as the difference between - old number of active particles, where slot points, and the - new size of the array, where particles points */ - num_active_particles = slot - particles; -} - -/* - This draws all the particles shown on screen -*/ -void -drawParticles() -{ - - /* draw the background */ - glClear(GL_COLOR_BUFFER_BIT); - - /* set up the position and color pointers */ - glVertexPointer(2, GL_FLOAT, sizeof(struct particle), particles); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(struct particle), - particles[0].color); - - if (pointSizeExtensionSupported) { - /* pass in our array of point sizes */ - glPointSizePointerOES(GL_FLOAT, sizeof(struct particle), - &(particles[0].size)); - } - - /* draw our particles! */ - glDrawArrays(GL_POINTS, 0, num_active_particles); - -} - -/* - This causes an emitter to explode in a circular bloom of dust particles -*/ -void -explodeEmitter(struct particle *emitter) -{ - /* first off, we're done with this particle, so turn active off */ - emitter->isActive = 0; - int i; - for (i = 0; i < 200; i++) { - - if (num_active_particles >= MAX_PARTICLES) - return; - - /* come up with a random angle and speed for new particle */ - float theta = randomFloat(0, 2.0f * 3.141592); - float exponent = 3.0f; - float speed = randomFloat(0.00, powf(0.17, exponent)); - speed = powf(speed, 1.0f / exponent); - - /* select the particle at the end of our array */ - struct particle *p = &particles[num_active_particles]; - - /* set the particles properties */ - p->xvel = speed * cos(theta); - p->yvel = speed * sin(theta); - p->x = emitter->x + emitter->xvel; - p->y = emitter->y + emitter->yvel; - p->isActive = 1; - p->type = dust; - p->size = 15; - /* inherit emitter's color */ - p->color[0] = emitter->color[0]; - p->color[1] = emitter->color[1]; - p->color[2] = emitter->color[2]; - p->color[3] = 255; - /* our array has expanded at the end */ - num_active_particles++; - } - -} - -/* - This spawns a trail particle from an emitter -*/ -void -spawnTrailFromEmitter(struct particle *emitter) -{ - - if (num_active_particles >= MAX_PARTICLES) - return; - - /* select the particle at the slot at the end of our array */ - struct particle *p = &particles[num_active_particles]; - - /* set position and velocity to roughly that of the emitter */ - p->x = emitter->x + randomFloat(-3.0, 3.0); - p->y = emitter->y + emitter->size / 2.0f; - p->xvel = emitter->xvel + randomFloat(-0.005, 0.005); - p->yvel = emitter->yvel + 0.1; - - /* set the color to a random-ish orangy type color */ - p->color[0] = (0.8f + randomFloat(-0.1, 0.0)) * 255; - p->color[1] = (0.4f + randomFloat(-0.1, 0.1)) * 255; - p->color[2] = (0.0f + randomFloat(0.0, 0.2)) * 255; - p->color[3] = (0.7f) * 255; - - /* set other attributes */ - p->size = 10; - p->type = trail; - p->isActive = 1; - - /* our array has expanded at the end */ - num_active_particles++; - -} - -/* - spawns a new emitter particle at the bottom of the screen - destined for the point (x,y). -*/ -void -spawnEmitterParticle(GLfloat x, GLfloat y) -{ - - if (num_active_particles >= MAX_PARTICLES) - return; - - /* find particle at endpoint of array */ - struct particle *p = &particles[num_active_particles]; - - /* set the color randomly */ - switch (rand() % 4) { - case 0: - p->color[0] = 255; - p->color[1] = 100; - p->color[2] = 100; - break; - case 1: - p->color[0] = 100; - p->color[1] = 255; - p->color[2] = 100; - break; - case 2: - p->color[0] = 100; - p->color[1] = 100; - p->color[2] = 255; - break; - case 3: - p->color[0] = 255; - p->color[1] = 150; - p->color[2] = 50; - break; - } - p->color[3] = 255; - /* set position to (x, screen_h) */ - p->x = x; - p->y = screen_h; - /* set velocity so that terminal point is (x,y) */ - p->xvel = 0; - p->yvel = -sqrt(2 * ACCEL * (screen_h - y)); - /* set other attributes */ - p->size = 10; - p->type = emitter; - p->isActive = 1; - /* our array has expanded at the end */ - num_active_particles++; -} - -/* just sets the endpoint of the particle array to element zero */ -void -initializeParticles(void) -{ - num_active_particles = 0; -} - -/* - loads the particle texture - */ -void -initializeTexture() -{ - - int bpp; /* texture bits per pixel */ - Uint32 Rmask, Gmask, Bmask, Amask; /* masks for pixel format passed into OpenGL */ - SDL_Surface *bmp_surface; /* the bmp is loaded here */ - SDL_Surface *bmp_surface_rgba8888; /* this serves as a destination to convert the BMP - to format passed into OpenGL */ - - bmp_surface = SDL_LoadBMP("stroke.bmp"); - if (bmp_surface == NULL) { - fatalError("could not load stroke.bmp"); - } - - /* Grab info about format that will be passed into OpenGL */ - SDL_PixelFormatEnumToMasks(SDL_PIXELFORMAT_ABGR8888, &bpp, &Rmask, &Gmask, - &Bmask, &Amask); - /* Create surface that will hold pixels passed into OpenGL */ - bmp_surface_rgba8888 = - SDL_CreateRGBSurface(0, bmp_surface->w, bmp_surface->h, bpp, Rmask, - Gmask, Bmask, Amask); - /* Blit to this surface, effectively converting the format */ - SDL_BlitSurface(bmp_surface, NULL, bmp_surface_rgba8888, NULL); - - glGenTextures(1, &particleTextureID); - glBindTexture(GL_TEXTURE_2D, particleTextureID); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, - nextPowerOfTwo(bmp_surface->w), - nextPowerOfTwo(bmp_surface->h), - 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - /* this is where we actually pass in the pixel data */ - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bmp_surface->w, bmp_surface->h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, bmp_surface_rgba8888->pixels); - - /* free bmp surface and converted bmp surface */ - SDL_FreeSurface(bmp_surface); - SDL_FreeSurface(bmp_surface_rgba8888); - -} - -int -main(int argc, char *argv[]) -{ - SDL_Window *window; /* main window */ - SDL_GLContext context; - int w, h; - Uint32 startFrame; /* time frame began to process */ - Uint32 endFrame; /* time frame ended processing */ - Uint32 delay; /* time to pause waiting to draw next frame */ - int done; /* should we clean up and exit? */ - - /* initialize SDL */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - fatalError("Could not initialize SDL"); - } - /* seed the random number generator */ - srand(time(NULL)); - /* - request some OpenGL parameters - that may speed drawing - */ - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 6); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5); - SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); - SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, 0); - SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); - - /* create main window and renderer */ - window = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL | - SDL_WINDOW_BORDERLESS); - context = SDL_GL_CreateContext(window); - - /* load the particle texture */ - initializeTexture(); - - /* check if GL_POINT_SIZE_ARRAY_OES is supported - this is used to give each particle its own size - */ - pointSizeExtensionSupported = - SDL_GL_ExtensionSupported("GL_OES_point_size_array"); - - /* set up some OpenGL state */ - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - - SDL_GetWindowSize(window, &screen_w, &screen_h); - glViewport(0, 0, screen_w, screen_h); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrthof((GLfloat) 0, - (GLfloat) screen_w, - (GLfloat) screen_h, - (GLfloat) 0, 0.0, 1.0); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE); - glEnableClientState(GL_VERTEX_ARRAY); - glEnableClientState(GL_COLOR_ARRAY); - - glEnable(GL_POINT_SPRITE_OES); - glTexEnvi(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, 1); - - if (pointSizeExtensionSupported) { - /* we use this to set the sizes of all the particles */ - glEnableClientState(GL_POINT_SIZE_ARRAY_OES); - } else { - /* if extension not available then all particles have size 10 */ - glPointSize(10); - } - - done = 0; - /* enter main loop */ - while (!done) { - startFrame = SDL_GetTicks(); - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - done = 1; - } - if (event.type == SDL_MOUSEBUTTONDOWN) { - int x, y; - SDL_GetMouseState(&x, &y); - spawnEmitterParticle(x, y); - } - } - stepParticles(); - drawParticles(); - SDL_GL_SwapWindow(window); - endFrame = SDL_GetTicks(); - - /* figure out how much time we have left, and then sleep */ - delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); - if (delay > MILLESECONDS_PER_FRAME) { - delay = MILLESECONDS_PER_FRAME; - } - if (delay > 0) { - SDL_Delay(delay); - } - } - - /* delete textures */ - glDeleteTextures(1, &particleTextureID); - /* shutdown SDL */ - SDL_Quit(); - - return 0; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/happy.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/happy.c deleted file mode 100644 index ce661d9587..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/happy.c +++ /dev/null @@ -1,177 +0,0 @@ -/* - * happy.c - * written by Holmes Futrell - * use however you want - */ - -#include "SDL.h" -#include "common.h" - -#define NUM_HAPPY_FACES 100 /* number of faces to draw */ -#define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ -#define HAPPY_FACE_SIZE 32 /* width and height of happyface (pixels) */ - -static SDL_Texture *texture = 0; /* reference to texture holding happyface */ - -static struct -{ - float x, y; /* position of happyface */ - float xvel, yvel; /* velocity of happyface */ -} faces[NUM_HAPPY_FACES]; - -/* - Sets initial positions and velocities of happyfaces - units of velocity are pixels per millesecond -*/ -void -initializeHappyFaces() -{ - int i; - for (i = 0; i < NUM_HAPPY_FACES; i++) { - faces[i].x = randomFloat(0.0f, SCREEN_WIDTH - HAPPY_FACE_SIZE); - faces[i].y = randomFloat(0.0f, SCREEN_HEIGHT - HAPPY_FACE_SIZE); - faces[i].xvel = randomFloat(-0.1f, 0.1f); - faces[i].yvel = randomFloat(-0.1f, 0.1f); - } -} - -void -render(SDL_Renderer *renderer) -{ - - int i; - SDL_Rect srcRect; - SDL_Rect dstRect; - - /* setup boundaries for happyface bouncing */ - Uint16 maxx = SCREEN_WIDTH - HAPPY_FACE_SIZE; - Uint16 maxy = SCREEN_HEIGHT - HAPPY_FACE_SIZE; - Uint16 minx = 0; - Uint16 miny = 0; - - /* setup rects for drawing */ - srcRect.x = 0; - srcRect.y = 0; - srcRect.w = HAPPY_FACE_SIZE; - srcRect.h = HAPPY_FACE_SIZE; - dstRect.w = HAPPY_FACE_SIZE; - dstRect.h = HAPPY_FACE_SIZE; - - /* fill background in with black */ - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderClear(renderer); - - /* - loop through all the happy faces: - - update position - - update velocity (if boundary is hit) - - draw - */ - for (i = 0; i < NUM_HAPPY_FACES; i++) { - faces[i].x += faces[i].xvel * MILLESECONDS_PER_FRAME; - faces[i].y += faces[i].yvel * MILLESECONDS_PER_FRAME; - if (faces[i].x > maxx) { - faces[i].x = maxx; - faces[i].xvel = -faces[i].xvel; - } else if (faces[i].y > maxy) { - faces[i].y = maxy; - faces[i].yvel = -faces[i].yvel; - } - if (faces[i].x < minx) { - faces[i].x = minx; - faces[i].xvel = -faces[i].xvel; - } else if (faces[i].y < miny) { - faces[i].y = miny; - faces[i].yvel = -faces[i].yvel; - } - dstRect.x = faces[i].x; - dstRect.y = faces[i].y; - SDL_RenderCopy(renderer, texture, &srcRect, &dstRect); - } - /* update screen */ - SDL_RenderPresent(renderer); - -} - -/* - loads the happyface graphic into a texture -*/ -void -initializeTexture(SDL_Renderer *renderer) -{ - SDL_Surface *bmp_surface; - /* load the bmp */ - bmp_surface = SDL_LoadBMP("icon.bmp"); - if (bmp_surface == NULL) { - fatalError("could not load bmp"); - } - /* set white to transparent on the happyface */ - SDL_SetColorKey(bmp_surface, 1, - SDL_MapRGB(bmp_surface->format, 255, 255, 255)); - - /* convert RGBA surface to texture */ - texture = SDL_CreateTextureFromSurface(renderer, bmp_surface); - if (texture == 0) { - fatalError("could not create texture"); - } - SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); - - /* free up allocated memory */ - SDL_FreeSurface(bmp_surface); -} - -int -main(int argc, char *argv[]) -{ - - SDL_Window *window; - SDL_Renderer *renderer; - Uint32 startFrame; - Uint32 endFrame; - Uint32 delay; - int done; - - /* initialize SDL */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - fatalError("Could not initialize SDL"); - } - window = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL | - SDL_WINDOW_BORDERLESS); - - renderer = SDL_CreateRenderer(window, -1, 0); - - initializeTexture(renderer); - initializeHappyFaces(); - - /* main loop */ - done = 0; - while (!done) { - startFrame = SDL_GetTicks(); - SDL_Event event; - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - done = 1; - } - } - render(renderer); - endFrame = SDL_GetTicks(); - - /* figure out how much time we have left, and then sleep */ - delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); - if (delay < 0) { - delay = 0; - } else if (delay > MILLESECONDS_PER_FRAME) { - delay = MILLESECONDS_PER_FRAME; - } - SDL_Delay(delay); - } - - /* cleanup */ - SDL_DestroyTexture(texture); - /* shutdown SDL */ - SDL_Quit(); - - return 0; - -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/keyboard.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/keyboard.c deleted file mode 100644 index 4fb45b94ae..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/keyboard.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * keyboard.c - * written by Holmes Futrell - * use however you want - */ - -#import "SDL.h" -#import "common.h" - -#define GLYPH_SIZE_IMAGE 16 /* size of glyphs (characters) in the bitmap font file */ -#define GLYPH_SIZE_SCREEN 32 /* size of glyphs (characters) as shown on the screen */ - -static SDL_Texture *texture; /* texture where we'll hold our font */ - -/* function declarations */ -void cleanup(void); -void drawBlank(int x, int y); - -static SDL_Renderer *renderer; -static int numChars = 0; /* number of characters we've typed so far */ -static SDL_bool lastCharWasColon = 0; /* we use this to detect sequences such as :) */ -static SDL_Color bg_color = { 50, 50, 100, 255 }; /* color of background */ - -/* this structure maps a scancode to an index in our bitmap font. - it also contains data about under which modifiers the mapping is valid - (for example, we don't want shift + 1 to produce the character '1', - but rather the character '!') -*/ -typedef struct -{ - SDL_Scancode scancode; /* scancode of the key we want to map */ - int allow_no_mod; /* is the map valid if the key has no modifiers? */ - SDL_Keymod mod; /* what modifiers are allowed for the mapping */ - int index; /* what index in the font does the scancode map to */ -} fontMapping; - -#define TABLE_SIZE 51 /* size of our table which maps keys and modifiers to font indices */ - -/* Below is the table that defines the mapping between scancodes and modifiers to indices in the - bitmap font. As an example, then line '{ SDL_SCANCODE_A, 1, KMOD_SHIFT, 33 }' means, map - the key A (which has scancode SDL_SCANCODE_A) to index 33 in the font (which is a picture of an A), - The '1' means that the mapping is valid even if there are no modifiers, and KMOD_SHIFT means the - mapping is also valid if the user is holding shift. -*/ -fontMapping map[TABLE_SIZE] = { - - {SDL_SCANCODE_A, 1, KMOD_SHIFT, 33}, /* A */ - {SDL_SCANCODE_B, 1, KMOD_SHIFT, 34}, /* B */ - {SDL_SCANCODE_C, 1, KMOD_SHIFT, 35}, /* C */ - {SDL_SCANCODE_D, 1, KMOD_SHIFT, 36}, /* D */ - {SDL_SCANCODE_E, 1, KMOD_SHIFT, 37}, /* E */ - {SDL_SCANCODE_F, 1, KMOD_SHIFT, 38}, /* F */ - {SDL_SCANCODE_G, 1, KMOD_SHIFT, 39}, /* G */ - {SDL_SCANCODE_H, 1, KMOD_SHIFT, 40}, /* H */ - {SDL_SCANCODE_I, 1, KMOD_SHIFT, 41}, /* I */ - {SDL_SCANCODE_J, 1, KMOD_SHIFT, 42}, /* J */ - {SDL_SCANCODE_K, 1, KMOD_SHIFT, 43}, /* K */ - {SDL_SCANCODE_L, 1, KMOD_SHIFT, 44}, /* L */ - {SDL_SCANCODE_M, 1, KMOD_SHIFT, 45}, /* M */ - {SDL_SCANCODE_N, 1, KMOD_SHIFT, 46}, /* N */ - {SDL_SCANCODE_O, 1, KMOD_SHIFT, 47}, /* O */ - {SDL_SCANCODE_P, 1, KMOD_SHIFT, 48}, /* P */ - {SDL_SCANCODE_Q, 1, KMOD_SHIFT, 49}, /* Q */ - {SDL_SCANCODE_R, 1, KMOD_SHIFT, 50}, /* R */ - {SDL_SCANCODE_S, 1, KMOD_SHIFT, 51}, /* S */ - {SDL_SCANCODE_T, 1, KMOD_SHIFT, 52}, /* T */ - {SDL_SCANCODE_U, 1, KMOD_SHIFT, 53}, /* U */ - {SDL_SCANCODE_V, 1, KMOD_SHIFT, 54}, /* V */ - {SDL_SCANCODE_W, 1, KMOD_SHIFT, 55}, /* W */ - {SDL_SCANCODE_X, 1, KMOD_SHIFT, 56}, /* X */ - {SDL_SCANCODE_Y, 1, KMOD_SHIFT, 57}, /* Y */ - {SDL_SCANCODE_Z, 1, KMOD_SHIFT, 58}, /* Z */ - {SDL_SCANCODE_0, 1, 0, 16}, /* 0 */ - {SDL_SCANCODE_1, 1, 0, 17}, /* 1 */ - {SDL_SCANCODE_2, 1, 0, 18}, /* 2 */ - {SDL_SCANCODE_3, 1, 0, 19}, /* 3 */ - {SDL_SCANCODE_4, 1, 0, 20}, /* 4 */ - {SDL_SCANCODE_5, 1, 0, 21}, /* 5 */ - {SDL_SCANCODE_6, 1, 0, 22}, /* 6 */ - {SDL_SCANCODE_7, 1, 0, 23}, /* 7 */ - {SDL_SCANCODE_8, 1, 0, 24}, /* 8 */ - {SDL_SCANCODE_9, 1, 0, 25}, /* 9 */ - {SDL_SCANCODE_SPACE, 1, 0, 0}, /* ' ' */ - {SDL_SCANCODE_1, 0, KMOD_SHIFT, 1}, /* ! */ - {SDL_SCANCODE_SLASH, 0, KMOD_SHIFT, 31}, /* ? */ - {SDL_SCANCODE_SLASH, 1, 0, 15}, /* / */ - {SDL_SCANCODE_COMMA, 1, 0, 12}, /* , */ - {SDL_SCANCODE_SEMICOLON, 1, 0, 27}, /* ; */ - {SDL_SCANCODE_SEMICOLON, 0, KMOD_SHIFT, 26}, /* : */ - {SDL_SCANCODE_PERIOD, 1, 0, 14}, /* . */ - {SDL_SCANCODE_MINUS, 1, 0, 13}, /* - */ - {SDL_SCANCODE_EQUALS, 0, KMOD_SHIFT, 11}, /* = */ - {SDL_SCANCODE_APOSTROPHE, 1, 0, 7}, /* ' */ - {SDL_SCANCODE_APOSTROPHE, 0, KMOD_SHIFT, 2}, /* " */ - {SDL_SCANCODE_5, 0, KMOD_SHIFT, 5}, /* % */ - -}; - -/* - This function maps an SDL_KeySym to an index in the bitmap font. - It does so by scanning through the font mapping table one entry - at a time. - - If a match is found (scancode and allowed modifiers), the proper - index is returned. - - If there is no entry for the key, -1 is returned -*/ -int -keyToIndex(SDL_Keysym key) -{ - int i, index = -1; - for (i = 0; i < TABLE_SIZE; i++) { - fontMapping compare = map[i]; - if (key.scancode == compare.scancode) { - /* if this entry is valid with no key mod and we have no keymod, or if - the key's modifiers are allowed modifiers for that mapping */ - if ((compare.allow_no_mod && key.mod == 0) - || (key.mod & compare.mod)) { - index = compare.index; - break; - } - } - } - return index; -} - -/* - This function returns and x,y position for a given character number. - It is used for positioning each character of text -*/ -void -getPositionForCharNumber(int n, int *x, int *y) -{ - int x_padding = 16; /* padding space on left and right side of screen */ - int y_padding = 32; /* padding space at top of screen */ - /* figure out the number of characters that can fit horizontally across the screen */ - int max_x_chars = (SCREEN_WIDTH - 2 * x_padding) / GLYPH_SIZE_SCREEN; - int line_separation = 5; /* pixels between each line */ - *x = (n % max_x_chars) * GLYPH_SIZE_SCREEN + x_padding; - *y = (n / max_x_chars) * (GLYPH_SIZE_SCREEN + line_separation) + - y_padding; -} - -void -drawIndex(int index) -{ - int x, y; - getPositionForCharNumber(numChars, &x, &y); - SDL_Rect srcRect = - { GLYPH_SIZE_IMAGE * index, 0, GLYPH_SIZE_IMAGE, GLYPH_SIZE_IMAGE }; - SDL_Rect dstRect = { x, y, GLYPH_SIZE_SCREEN, GLYPH_SIZE_SCREEN }; - drawBlank(x, y); - SDL_RenderCopy(renderer, texture, &srcRect, &dstRect); -} - -/* draws the cursor icon at the current end position of the text */ -void -drawCursor(void) -{ - drawIndex(29); /* cursor is at index 29 in the bitmap font */ -} - -/* paints over a glyph sized region with the background color - in effect it erases the area -*/ -void -drawBlank(int x, int y) -{ - SDL_Rect rect = { x, y, GLYPH_SIZE_SCREEN, GLYPH_SIZE_SCREEN }; - SDL_SetRenderDrawColor(renderer, bg_color.r, bg_color.g, bg_color.b, bg_color.a); - SDL_RenderFillRect(renderer, &rect); -} - -/* moves backwards one character, erasing the last one put down */ -void -backspace(void) -{ - int x, y; - if (numChars > 0) { - getPositionForCharNumber(numChars, &x, &y); - drawBlank(x, y); - numChars--; - getPositionForCharNumber(numChars, &x, &y); - drawBlank(x, y); - drawCursor(); - } -} - -/* this function loads our font into an SDL_Texture and returns the SDL_Texture */ -SDL_Texture* -loadFont(void) -{ - - SDL_Surface *surface = SDL_LoadBMP("kromasky_16x16.bmp"); - - if (!surface) { - printf("Error loading bitmap: %s\n", SDL_GetError()); - return 0; - } else { - /* set the transparent color for the bitmap font (hot pink) */ - SDL_SetColorKey(surface, 1, SDL_MapRGB(surface->format, 238, 0, 252)); - /* now we convert the surface to our desired pixel format */ - int format = SDL_PIXELFORMAT_ABGR8888; /* desired texture format */ - Uint32 Rmask, Gmask, Bmask, Amask; /* masks for desired format */ - int bpp; /* bits per pixel for desired format */ - SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, - &Amask); - SDL_Surface *converted = - SDL_CreateRGBSurface(0, surface->w, surface->h, bpp, Rmask, Gmask, - Bmask, Amask); - SDL_BlitSurface(surface, NULL, converted, NULL); - /* create our texture */ - texture = - SDL_CreateTextureFromSurface(renderer, converted); - if (texture == 0) { - printf("texture creation failed: %s\n", SDL_GetError()); - } else { - /* set blend mode for our texture */ - SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); - } - SDL_FreeSurface(surface); - SDL_FreeSurface(converted); - return texture; - } -} - -int -main(int argc, char *argv[]) -{ - - int index; /* index of last key we pushed in the bitmap font */ - SDL_Window *window; - SDL_Event event; /* last event received */ - SDL_Keymod mod; /* key modifiers of last key we pushed */ - SDL_Scancode scancode; /* scancode of last key we pushed */ - - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - printf("Error initializing SDL: %s", SDL_GetError()); - } - /* create window */ - window = SDL_CreateWindow("iPhone keyboard test", 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0); - /* create renderer */ - renderer = SDL_CreateRenderer(window, -1, 0); - - /* load up our font */ - loadFont(); - - /* draw the background, we'll just paint over it */ - SDL_SetRenderDrawColor(renderer, bg_color.r, bg_color.g, bg_color.b, bg_color.a); - SDL_RenderFillRect(renderer, NULL); - SDL_RenderPresent(renderer); - - int done = 0; - /* loop till we get SDL_Quit */ - while (SDL_WaitEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - done = 1; - break; - case SDL_KEYDOWN: - index = keyToIndex(event.key.keysym); - scancode = event.key.keysym.scancode; - mod = event.key.keysym.mod; - if (scancode == SDL_SCANCODE_DELETE) { - /* if user hit delete, delete the last character */ - backspace(); - lastCharWasColon = 0; - } else if (lastCharWasColon && scancode == SDL_SCANCODE_0 - && (mod & KMOD_SHIFT)) { - /* if our last key was a colon and this one is a close paren, the make a hoppy face */ - backspace(); - drawIndex(32); /* index for happy face */ - numChars++; - drawCursor(); - lastCharWasColon = 0; - } else if (index != -1) { - /* if we aren't doing a happy face, then just draw the normal character */ - drawIndex(index); - numChars++; - drawCursor(); - lastCharWasColon = - (event.key.keysym.scancode == SDL_SCANCODE_SEMICOLON - && (event.key.keysym.mod & KMOD_SHIFT)); - } - /* check if the key was a colon */ - /* draw our updates to the screen */ - SDL_RenderPresent(renderer); - break; - case SDL_MOUSEBUTTONUP: - /* mouse up toggles onscreen keyboard visibility */ - if (SDL_IsTextInputActive()) { - SDL_StopTextInput(); - } else { - SDL_StartTextInput(); - } - break; - } - } - cleanup(); - return 0; -} - -/* clean up after ourselves like a good kiddy */ -void -cleanup(void) -{ - SDL_DestroyTexture(texture); - SDL_Quit(); -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/mixer.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/mixer.c deleted file mode 100644 index bd0cfb1dff..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/mixer.c +++ /dev/null @@ -1,353 +0,0 @@ -/* - * mixer.c - * written by Holmes Futrell - * use however you want - */ - -#import "SDL.h" -#import "common.h" - -#define NUM_CHANNELS 8 /* max number of sounds we can play at once */ -#define NUM_DRUMS 4 /* number of drums in our set */ -#define MILLESECONDS_PER_FRAME 16 /* about 60 frames per second */ - -static struct -{ - SDL_Rect rect; /* where the button is drawn */ - SDL_Color upColor; /* color when button is not active */ - SDL_Color downColor; /* color when button is active */ - int isPressed; /* is the button being pressed ? */ - int touchIndex; /* what mouse (touch) index pressed the button ? */ -} buttons[NUM_DRUMS]; - -struct sound -{ - Uint8 *buffer; /* audio buffer for sound file */ - Uint32 length; /* length of the buffer (in bytes) */ -}; - -/* this array holds the audio for the drum noises */ -static struct sound drums[NUM_DRUMS]; - -/* function declarations */ -void handleMouseButtonDown(SDL_Event * event); -void handleMouseButtonUp(SDL_Event * event); -int playSound(struct sound *); -void initializeButtons(); -void audioCallback(void *userdata, Uint8 * stream, int len); -void loadSound(const char *file, struct sound *s); - -struct -{ - /* channel array holds information about currently playing sounds */ - struct - { - Uint8 *position; /* what is the current position in the buffer of this sound ? */ - Uint32 remaining; /* how many bytes remaining before we're done playing the sound ? */ - Uint32 timestamp; /* when did this sound start playing ? */ - } channels[NUM_CHANNELS]; - SDL_AudioSpec outputSpec; /* what audio format are we using for output? */ - int numSoundsPlaying; /* how many sounds are currently playing */ -} mixer; - -/* sets up the buttons (color, position, state) */ -void -initializeButtons() -{ - - int i; - int spacing = 10; /* gap between drum buttons */ - SDL_Rect buttonRect; /* keeps track of where to position drum */ - SDL_Color upColor = { 86, 86, 140, 255 }; /* color of drum when not pressed */ - SDL_Color downColor = { 191, 191, 221, 255 }; /* color of drum when pressed */ - - buttonRect.x = spacing; - buttonRect.y = spacing; - buttonRect.w = SCREEN_WIDTH - 2 * spacing; - buttonRect.h = (SCREEN_HEIGHT - (NUM_DRUMS + 1) * spacing) / NUM_DRUMS; - - /* setup each button */ - for (i = 0; i < NUM_DRUMS; i++) { - - buttons[i].rect = buttonRect; - buttons[i].isPressed = 0; - buttons[i].upColor = upColor; - buttons[i].downColor = downColor; - - buttonRect.y += spacing + buttonRect.h; /* setup y coordinate for next drum */ - - } -} - -/* - loads a wav file (stored in 'file'), converts it to the mixer's output format, - and stores the resulting buffer and length in the sound structure - */ -void -loadSound(const char *file, struct sound *s) -{ - SDL_AudioSpec spec; /* the audio format of the .wav file */ - SDL_AudioCVT cvt; /* used to convert .wav to output format when formats differ */ - int result; - if (SDL_LoadWAV(file, &spec, &s->buffer, &s->length) == NULL) { - fatalError("could not load .wav"); - } - /* build the audio converter */ - result = SDL_BuildAudioCVT(&cvt, spec.format, spec.channels, spec.freq, - mixer.outputSpec.format, - mixer.outputSpec.channels, - mixer.outputSpec.freq); - if (result == -1) { - fatalError("could not build audio CVT"); - } else if (result != 0) { - /* - this happens when the .wav format differs from the output format. - we convert the .wav buffer here - */ - cvt.buf = (Uint8 *) SDL_malloc(s->length * cvt.len_mult); /* allocate conversion buffer */ - cvt.len = s->length; /* set conversion buffer length */ - SDL_memcpy(cvt.buf, s->buffer, s->length); /* copy sound to conversion buffer */ - if (SDL_ConvertAudio(&cvt) == -1) { /* convert the sound */ - fatalError("could not convert .wav"); - } - SDL_free(s->buffer); /* free the original (unconverted) buffer */ - s->buffer = cvt.buf; /* point sound buffer to converted buffer */ - s->length = cvt.len_cvt; /* set sound buffer's new length */ - } -} - -/* called from main event loop */ -void -handleMouseButtonDown(SDL_Event * event) -{ - - int x, y, mouseIndex, i, drumIndex; - - mouseIndex = 0; - drumIndex = -1; - - SDL_GetMouseState(&x, &y); - /* check if we hit any of the drum buttons */ - for (i = 0; i < NUM_DRUMS; i++) { - if (x >= buttons[i].rect.x - && x < buttons[i].rect.x + buttons[i].rect.w - && y >= buttons[i].rect.y - && y < buttons[i].rect.y + buttons[i].rect.h) { - drumIndex = i; - break; - } - } - if (drumIndex != -1) { - /* if we hit a button */ - buttons[drumIndex].touchIndex = mouseIndex; - buttons[drumIndex].isPressed = 1; - playSound(&drums[drumIndex]); - } - -} - -/* called from main event loop */ -void -handleMouseButtonUp(SDL_Event * event) -{ - int i; - int mouseIndex = 0; - /* check if this should cause any of the buttons to become unpressed */ - for (i = 0; i < NUM_DRUMS; i++) { - if (buttons[i].touchIndex == mouseIndex) { - buttons[i].isPressed = 0; - } - } -} - -/* draws buttons to screen */ -void -render(SDL_Renderer *renderer) -{ - int i; - SDL_SetRenderDrawColor(renderer, 50, 50, 50, 255); - SDL_RenderClear(renderer); /* draw background (gray) */ - /* draw the drum buttons */ - for (i = 0; i < NUM_DRUMS; i++) { - SDL_Color color = - buttons[i].isPressed ? buttons[i].downColor : buttons[i].upColor; - SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); - SDL_RenderFillRect(renderer, &buttons[i].rect); - } - /* update the screen */ - SDL_RenderPresent(renderer); -} - -/* - finds a sound channel in the mixer for a sound - and sets it up to start playing -*/ -int -playSound(struct sound *s) -{ - /* - find an empty channel to play on. - if no channel is available, use oldest channel - */ - int i; - int selected_channel = -1; - int oldest_channel = 0; - - if (mixer.numSoundsPlaying == 0) { - /* we're playing a sound now, so start audio callback back up */ - SDL_PauseAudio(0); - } - - /* find a sound channel to play the sound on */ - for (i = 0; i < NUM_CHANNELS; i++) { - if (mixer.channels[i].position == NULL) { - /* if no sound on this channel, select it */ - selected_channel = i; - break; - } - /* if this channel's sound is older than the oldest so far, set it to oldest */ - if (mixer.channels[i].timestamp < - mixer.channels[oldest_channel].timestamp) - oldest_channel = i; - } - - /* no empty channels, take the oldest one */ - if (selected_channel == -1) - selected_channel = oldest_channel; - else - mixer.numSoundsPlaying++; - - /* point channel data to wav data */ - mixer.channels[selected_channel].position = s->buffer; - mixer.channels[selected_channel].remaining = s->length; - mixer.channels[selected_channel].timestamp = SDL_GetTicks(); - - return selected_channel; -} - -/* - Called from SDL's audio system. Supplies sound input with data by mixing together all - currently playing sound effects. -*/ -void -audioCallback(void *userdata, Uint8 * stream, int len) -{ - int i; - int copy_amt; - SDL_memset(stream, mixer.outputSpec.silence, len); /* initialize buffer to silence */ - /* for each channel, mix in whatever is playing on that channel */ - for (i = 0; i < NUM_CHANNELS; i++) { - if (mixer.channels[i].position == NULL) { - /* if no sound is playing on this channel */ - continue; /* nothing to do for this channel */ - } - - /* copy len bytes to the buffer, unless we have fewer than len bytes remaining */ - copy_amt = - mixer.channels[i].remaining < - len ? mixer.channels[i].remaining : len; - - /* mix this sound effect with the output */ - SDL_MixAudioFormat(stream, mixer.channels[i].position, - mixer.outputSpec.format, copy_amt, 150); - - /* update buffer position in sound effect and the number of bytes left */ - mixer.channels[i].position += copy_amt; - mixer.channels[i].remaining -= copy_amt; - - /* did we finish playing the sound effect ? */ - if (mixer.channels[i].remaining == 0) { - mixer.channels[i].position = NULL; /* indicates no sound playing on channel anymore */ - mixer.numSoundsPlaying--; - if (mixer.numSoundsPlaying == 0) { - /* if no sounds left playing, pause audio callback */ - SDL_PauseAudio(1); - } - } - } -} - -int -main(int argc, char *argv[]) -{ - - int done; /* has user tried to quit ? */ - SDL_Window *window; /* main window */ - SDL_Renderer *renderer; - SDL_Event event; - Uint32 startFrame; /* holds when frame started processing */ - Uint32 endFrame; /* holds when frame ended processing */ - Uint32 delay; /* calculated delay, how long should we wait before next frame? */ - - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { - fatalError("could not initialize SDL"); - } - window = - SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); - renderer = SDL_CreateRenderer(window, 0, 0); - - /* initialize the mixer */ - SDL_memset(&mixer, 0, sizeof(mixer)); - /* setup output format */ - mixer.outputSpec.freq = 44100; - mixer.outputSpec.format = AUDIO_S16LSB; - mixer.outputSpec.channels = 2; - mixer.outputSpec.samples = 256; - mixer.outputSpec.callback = audioCallback; - mixer.outputSpec.userdata = NULL; - - /* open audio for output */ - if (SDL_OpenAudio(&mixer.outputSpec, NULL) != 0) { - fatalError("Opening audio failed"); - } - - /* load our drum noises */ - loadSound("ds_kick_big_amb.wav", &drums[3]); - loadSound("ds_brush_snare.wav", &drums[2]); - loadSound("ds_loose_skin_mute.wav", &drums[1]); - loadSound("ds_china.wav", &drums[0]); - - /* setup positions, colors, and state of buttons */ - initializeButtons(); - - /* enter main loop */ - done = 0; - while (!done) { - startFrame = SDL_GetTicks(); - while (SDL_PollEvent(&event)) { - switch (event.type) { - case SDL_MOUSEBUTTONDOWN: - handleMouseButtonDown(&event); - break; - case SDL_MOUSEBUTTONUP: - handleMouseButtonUp(&event); - break; - case SDL_QUIT: - done = 1; - break; - } - } - render(renderer); /* draw buttons */ - endFrame = SDL_GetTicks(); - - /* figure out how much time we have left, and then sleep */ - delay = MILLESECONDS_PER_FRAME - (endFrame - startFrame); - if (delay < 0) { - delay = 0; - } else if (delay > MILLESECONDS_PER_FRAME) { - delay = MILLESECONDS_PER_FRAME; - } - SDL_Delay(delay); - } - - /* cleanup code, let's free up those sound buffers */ - int i; - for (i = 0; i < NUM_DRUMS; i++) { - SDL_free(drums[i].buffer); - } - /* let SDL do its exit code */ - SDL_Quit(); - - return 0; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/rectangles.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/rectangles.c deleted file mode 100644 index 86fce49fe6..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/rectangles.c +++ /dev/null @@ -1,81 +0,0 @@ -/* - * rectangles.c - * written by Holmes Futrell - * use however you want -*/ - -#include "SDL.h" -#include -#include "common.h" - -void -render(SDL_Renderer *renderer) -{ - - Uint8 r, g, b; - /* Come up with a random rectangle */ - SDL_Rect rect; - rect.w = randomInt(64, 128); - rect.h = randomInt(64, 128); - rect.x = randomInt(0, SCREEN_WIDTH); - rect.y = randomInt(0, SCREEN_HEIGHT); - - /* Come up with a random color */ - r = randomInt(50, 255); - g = randomInt(50, 255); - b = randomInt(50, 255); - - /* Fill the rectangle in the color */ - SDL_SetRenderDrawColor(renderer, r, g, b, 255); - SDL_RenderFillRect(renderer, &rect); - - /* update screen */ - SDL_RenderPresent(renderer); - -} - -int -main(int argc, char *argv[]) -{ - if (SDL_Init(SDL_INIT_VIDEO/* | SDL_INIT_AUDIO */) < 0) - { - printf("Unable to initialize SDL"); - } - - SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - - int landscape = 1; - int modes = SDL_GetNumDisplayModes(0); - int sx = 0, sy = 0; - for (int i = 0; i < modes; i++) - { - SDL_DisplayMode mode; - SDL_GetDisplayMode(0, i, &mode); - if (landscape ? mode.w > sx : mode.h > sy) - { - sx = mode.w; - sy = mode.h; - } - } - - printf("picked: %d %d\n", sx, sy); - - SDL_Window *_sdl_window = NULL; - SDL_GLContext _sdl_context = NULL; - - _sdl_window = SDL_CreateWindow("fred", - 0, 0, - sx, sy, - SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); - - SDL_SetHint("SDL_HINT_ORIENTATIONS", "LandscapeLeft LandscapeRight"); - - int ax = 0, ay = 0; - SDL_GetWindowSize(_sdl_window, &ax, &ay); - - printf("given: %d %d\n", ax, ay); - - return 0; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/src/touch.c b/Engine/lib/sdl/Xcode-iOS/Demos/src/touch.c deleted file mode 100644 index c81dcbc223..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/src/touch.c +++ /dev/null @@ -1,125 +0,0 @@ -/* - * touch.c - * written by Holmes Futrell - * use however you want - */ - -#include "SDL.h" -#include "math.h" -#include "common.h" - -#define BRUSH_SIZE 32 /* width and height of the brush */ -#define PIXELS_PER_ITERATION 5 /* number of pixels between brush blots when forming a line */ - -static SDL_Texture *brush = 0; /* texture for the brush */ - -/* - draws a line from (startx, starty) to (startx + dx, starty + dy) - this is accomplished by drawing several blots spaced PIXELS_PER_ITERATION apart -*/ -void -drawLine(SDL_Renderer *renderer, float startx, float starty, float dx, float dy) -{ - - float distance = sqrt(dx * dx + dy * dy); /* length of line segment (pythagoras) */ - int iterations = distance / PIXELS_PER_ITERATION + 1; /* number of brush sprites to draw for the line */ - float dx_prime = dx / iterations; /* x-shift per iteration */ - float dy_prime = dy / iterations; /* y-shift per iteration */ - SDL_Rect dstRect; /* rect to draw brush sprite into */ - - dstRect.w = BRUSH_SIZE; - dstRect.h = BRUSH_SIZE; - - /* setup x and y for the location of the first sprite */ - float x = startx - BRUSH_SIZE / 2.0f; - float y = starty - BRUSH_SIZE / 2.0f; - - int i; - /* draw a series of blots to form the line */ - for (i = 0; i < iterations; i++) { - dstRect.x = x; - dstRect.y = y; - /* shift x and y for next sprite location */ - x += dx_prime; - y += dy_prime; - /* draw brush blot */ - SDL_RenderCopy(renderer, brush, NULL, &dstRect); - } -} - -/* - loads the brush texture -*/ -void -initializeTexture(SDL_Renderer *renderer) -{ - SDL_Surface *bmp_surface; - bmp_surface = SDL_LoadBMP("stroke.bmp"); - if (bmp_surface == NULL) { - fatalError("could not load stroke.bmp"); - } - brush = - SDL_CreateTextureFromSurface(renderer, bmp_surface); - SDL_FreeSurface(bmp_surface); - if (brush == 0) { - fatalError("could not create brush texture"); - } - /* additive blending -- laying strokes on top of eachother makes them brighter */ - SDL_SetTextureBlendMode(brush, SDL_BLENDMODE_ADD); - /* set brush color (red) */ - SDL_SetTextureColorMod(brush, 255, 100, 100); -} - -int -main(int argc, char *argv[]) -{ - - int x, y, dx, dy; /* mouse location */ - Uint8 state; /* mouse (touch) state */ - SDL_Event event; - SDL_Window *window; /* main window */ - SDL_Renderer *renderer; - int done; /* does user want to quit? */ - - /* initialize SDL */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - fatalError("Could not initialize SDL"); - } - - /* create main window and renderer */ - window = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL | - SDL_WINDOW_BORDERLESS); - renderer = SDL_CreateRenderer(window, 0, 0); - - /* load brush texture */ - initializeTexture(renderer); - - /* fill canvass initially with all black */ - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderClear(renderer); - SDL_RenderPresent(renderer); - - done = 0; - while (!done && SDL_WaitEvent(&event)) { - switch (event.type) { - case SDL_QUIT: - done = 1; - break; - case SDL_MOUSEMOTION: - state = SDL_GetMouseState(&x, &y); /* get its location */ - SDL_GetRelativeMouseState(&dx, &dy); /* find how much the mouse moved */ - if (state & SDL_BUTTON_LMASK) { /* is the mouse (touch) down? */ - drawLine(renderer, x - dx, y - dy, dx, dy); /* draw line segment */ - SDL_RenderPresent(renderer); - } - break; - } - } - - /* cleanup */ - SDL_DestroyTexture(brush); - SDL_Quit(); - - return 0; -} diff --git a/Engine/lib/sdl/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj deleted file mode 100644 index c4b95a36c1..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj +++ /dev/null @@ -1,1335 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXAggregateTarget section */ - 00B4F48B12F6A69C0084EC00 /* PrepareXcodeProjectTemplate */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 00B4F48E12F6A6BA0084EC00 /* Build configuration list for PBXAggregateTarget "PrepareXcodeProjectTemplate" */; - buildPhases = ( - 00B4F48A12F6A69C0084EC00 /* ShellScript */, - ); - dependencies = ( - ); - name = PrepareXcodeProjectTemplate; - productName = PrepareXcodeProjectTemplate; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 006E9888119552DD001DE610 /* SDL_rwopsbundlesupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 006E9886119552DD001DE610 /* SDL_rwopsbundlesupport.h */; }; - 006E9889119552DD001DE610 /* SDL_rwopsbundlesupport.m in Sources */ = {isa = PBXBuildFile; fileRef = 006E9887119552DD001DE610 /* SDL_rwopsbundlesupport.m */; }; - 0402A85812FE70C600CECEE3 /* SDL_render_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 0402A85512FE70C600CECEE3 /* SDL_render_gles2.c */; }; - 0402A85912FE70C600CECEE3 /* SDL_shaders_gles2.c in Sources */ = {isa = PBXBuildFile; fileRef = 0402A85612FE70C600CECEE3 /* SDL_shaders_gles2.c */; }; - 0402A85A12FE70C600CECEE3 /* SDL_shaders_gles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 0402A85712FE70C600CECEE3 /* SDL_shaders_gles2.h */; }; - 041B2CF112FA0F680087D585 /* SDL_render.c in Sources */ = {isa = PBXBuildFile; fileRef = 041B2CEA12FA0F680087D585 /* SDL_render.c */; }; - 041B2CF212FA0F680087D585 /* SDL_sysrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 041B2CEB12FA0F680087D585 /* SDL_sysrender.h */; }; - 0420497011E6F03D007E7EC9 /* SDL_clipboardevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0420496E11E6F03D007E7EC9 /* SDL_clipboardevents_c.h */; }; - 0420497111E6F03D007E7EC9 /* SDL_clipboardevents.c in Sources */ = {isa = PBXBuildFile; fileRef = 0420496F11E6F03D007E7EC9 /* SDL_clipboardevents.c */; }; - 04409BA612FA989600FB9AA8 /* mmx.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409BA212FA989600FB9AA8 /* mmx.h */; }; - 04409BA712FA989600FB9AA8 /* SDL_yuv_mmx.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409BA312FA989600FB9AA8 /* SDL_yuv_mmx.c */; }; - 04409BA812FA989600FB9AA8 /* SDL_yuv_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04409BA412FA989600FB9AA8 /* SDL_yuv_sw_c.h */; }; - 04409BA912FA989600FB9AA8 /* SDL_yuv_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 04409BA512FA989600FB9AA8 /* SDL_yuv_sw.c */; }; - 0442EC5012FE1C1E004C9285 /* SDL_render_sw_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 0442EC4E12FE1C1E004C9285 /* SDL_render_sw_c.h */; }; - 0442EC5112FE1C1E004C9285 /* SDL_render_sw.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC4F12FE1C1E004C9285 /* SDL_render_sw.c */; }; - 0442EC5312FE1C28004C9285 /* SDL_render_gles.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5212FE1C28004C9285 /* SDL_render_gles.c */; }; - 0442EC5512FE1C3F004C9285 /* SDL_hints.c in Sources */ = {isa = PBXBuildFile; fileRef = 0442EC5412FE1C3F004C9285 /* SDL_hints.c */; }; - 044E5FB811E606EB0076F181 /* SDL_clipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 044E5FB711E606EB0076F181 /* SDL_clipboard.c */; }; - 046387420F0B5B7D0041FD65 /* SDL_blit_slow.h in Headers */ = {isa = PBXBuildFile; fileRef = 0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */; }; - 046387460F0B5B7D0041FD65 /* SDL_fillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */; }; - 047677BB0EA76A31008ABAF1 /* SDL_syshaptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 047677B80EA76A31008ABAF1 /* SDL_syshaptic.c */; }; - 047677BC0EA76A31008ABAF1 /* SDL_haptic.c in Sources */ = {isa = PBXBuildFile; fileRef = 047677B90EA76A31008ABAF1 /* SDL_haptic.c */; }; - 047677BD0EA76A31008ABAF1 /* SDL_syshaptic.h in Headers */ = {isa = PBXBuildFile; fileRef = 047677BA0EA76A31008ABAF1 /* SDL_syshaptic.h */; }; - 047AF1B30EA98D6C00811173 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = 047AF1B20EA98D6C00811173 /* SDL_sysloadso.c */; }; - 04BA9D6311EF474A00B60E01 /* SDL_gesture_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BA9D5F11EF474A00B60E01 /* SDL_gesture_c.h */; }; - 04BA9D6411EF474A00B60E01 /* SDL_gesture.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BA9D6011EF474A00B60E01 /* SDL_gesture.c */; }; - 04BA9D6511EF474A00B60E01 /* SDL_touch_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BA9D6111EF474A00B60E01 /* SDL_touch_c.h */; }; - 04BA9D6611EF474A00B60E01 /* SDL_touch.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BA9D6211EF474A00B60E01 /* SDL_touch.c */; }; - 04BAC09C1300C1290055DE28 /* SDL_assert_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BAC09A1300C1290055DE28 /* SDL_assert_c.h */; }; - 04BAC09D1300C1290055DE28 /* SDL_log.c in Sources */ = {isa = PBXBuildFile; fileRef = 04BAC09B1300C1290055DE28 /* SDL_log.c */; }; - 04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */; }; - 04F7807612FB751400FC43C0 /* SDL_blendfillrect.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */; }; - 04F7807712FB751400FC43C0 /* SDL_blendfillrect.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */; }; - 04F7807812FB751400FC43C0 /* SDL_blendline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806C12FB751400FC43C0 /* SDL_blendline.c */; }; - 04F7807912FB751400FC43C0 /* SDL_blendline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806D12FB751400FC43C0 /* SDL_blendline.h */; }; - 04F7807A12FB751400FC43C0 /* SDL_blendpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */; }; - 04F7807B12FB751400FC43C0 /* SDL_blendpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */; }; - 04F7807C12FB751400FC43C0 /* SDL_draw.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807012FB751400FC43C0 /* SDL_draw.h */; }; - 04F7807D12FB751400FC43C0 /* SDL_drawline.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7807112FB751400FC43C0 /* SDL_drawline.c */; }; - 04F7807E12FB751400FC43C0 /* SDL_drawline.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807212FB751400FC43C0 /* SDL_drawline.h */; }; - 04F7807F12FB751400FC43C0 /* SDL_drawpoint.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */; }; - 04F7808012FB751400FC43C0 /* SDL_drawpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */; }; - 04F7808412FB753F00FC43C0 /* SDL_nullframebuffer_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */; }; - 04F7808512FB753F00FC43C0 /* SDL_nullframebuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */; }; - 04FFAB8B12E23B8D00BA343D /* SDL_atomic.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */; }; - 04FFAB8C12E23B8D00BA343D /* SDL_spinlock.c in Sources */ = {isa = PBXBuildFile; fileRef = 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */; }; - 56A6702E18565E450007D20F /* SDL_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6702D18565E450007D20F /* SDL_internal.h */; }; - 56A6703518565E760007D20F /* SDL_dynapi_overrides.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */; }; - 56A6703618565E760007D20F /* SDL_dynapi_procs.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703218565E760007D20F /* SDL_dynapi_procs.h */; }; - 56A6703718565E760007D20F /* SDL_dynapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 56A6703318565E760007D20F /* SDL_dynapi.c */; }; - 56A6703818565E760007D20F /* SDL_dynapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 56A6703418565E760007D20F /* SDL_dynapi.h */; }; - 56C181DF17C44D5E00406AE3 /* SDL_filesystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 56C181DE17C44D5E00406AE3 /* SDL_filesystem.h */; }; - 56C181E217C44D7A00406AE3 /* SDL_sysfilesystem.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C181E117C44D7A00406AE3 /* SDL_sysfilesystem.m */; }; - 56EA86FB13E9EC2B002E47EB /* SDL_coreaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.c */; }; - 56EA86FC13E9EC2B002E47EB /* SDL_coreaudio.h in Headers */ = {isa = PBXBuildFile; fileRef = 56EA86FA13E9EC2B002E47EB /* SDL_coreaudio.h */; }; - 56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E0118A8EE200A56AA6 /* SDL_power.c */; }; - 56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */ = {isa = PBXBuildFile; fileRef = 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */; }; - 93CB792313FC5E5200BD3E05 /* SDL_uikitviewcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = 93CB792213FC5E5200BD3E05 /* SDL_uikitviewcontroller.h */; }; - 93CB792613FC5F5300BD3E05 /* SDL_uikitviewcontroller.m in Sources */ = {isa = PBXBuildFile; fileRef = 93CB792513FC5F5300BD3E05 /* SDL_uikitviewcontroller.m */; }; - AA0AD06216647BBB00CE5896 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */; }; - AA0AD06516647BD400CE5896 /* SDL_gamecontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0AD06416647BD400CE5896 /* SDL_gamecontroller.h */; }; - AA0F8495178D5F1A00823F9D /* SDL_systls.c in Sources */ = {isa = PBXBuildFile; fileRef = AA0F8494178D5F1A00823F9D /* SDL_systls.c */; }; - AA126AD41617C5E7005ABC8F /* SDL_uikitmodes.h in Headers */ = {isa = PBXBuildFile; fileRef = AA126AD21617C5E6005ABC8F /* SDL_uikitmodes.h */; }; - AA126AD51617C5E7005ABC8F /* SDL_uikitmodes.m in Sources */ = {isa = PBXBuildFile; fileRef = AA126AD31617C5E6005ABC8F /* SDL_uikitmodes.m */; }; - AA628ADB159369E3005138DD /* SDL_rotate.c in Sources */ = {isa = PBXBuildFile; fileRef = AA628AD9159369E3005138DD /* SDL_rotate.c */; }; - AA628ADC159369E3005138DD /* SDL_rotate.h in Headers */ = {isa = PBXBuildFile; fileRef = AA628ADA159369E3005138DD /* SDL_rotate.h */; }; - AA704DD6162AA90A0076D1C1 /* SDL_dropevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = AA704DD4162AA90A0076D1C1 /* SDL_dropevents_c.h */; }; - AA704DD7162AA90A0076D1C1 /* SDL_dropevents.c in Sources */ = {isa = PBXBuildFile; fileRef = AA704DD5162AA90A0076D1C1 /* SDL_dropevents.c */; }; - AA7558981595D55500BBD41B /* begin_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558651595D55500BBD41B /* begin_code.h */; }; - AA7558991595D55500BBD41B /* close_code.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558661595D55500BBD41B /* close_code.h */; }; - AA75589A1595D55500BBD41B /* SDL_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558671595D55500BBD41B /* SDL_assert.h */; }; - AA75589B1595D55500BBD41B /* SDL_atomic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558681595D55500BBD41B /* SDL_atomic.h */; }; - AA75589C1595D55500BBD41B /* SDL_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558691595D55500BBD41B /* SDL_audio.h */; }; - AA75589D1595D55500BBD41B /* SDL_blendmode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586A1595D55500BBD41B /* SDL_blendmode.h */; }; - AA75589E1595D55500BBD41B /* SDL_clipboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586B1595D55500BBD41B /* SDL_clipboard.h */; }; - AA75589F1595D55500BBD41B /* SDL_config_iphoneos.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586C1595D55500BBD41B /* SDL_config_iphoneos.h */; }; - AA7558A01595D55500BBD41B /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586D1595D55500BBD41B /* SDL_config.h */; }; - AA7558A11595D55500BBD41B /* SDL_copying.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586E1595D55500BBD41B /* SDL_copying.h */; }; - AA7558A21595D55500BBD41B /* SDL_cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75586F1595D55500BBD41B /* SDL_cpuinfo.h */; }; - AA7558A31595D55500BBD41B /* SDL_endian.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558701595D55500BBD41B /* SDL_endian.h */; }; - AA7558A41595D55500BBD41B /* SDL_error.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558711595D55500BBD41B /* SDL_error.h */; }; - AA7558A51595D55500BBD41B /* SDL_events.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558721595D55500BBD41B /* SDL_events.h */; }; - AA7558A61595D55500BBD41B /* SDL_gesture.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558731595D55500BBD41B /* SDL_gesture.h */; }; - AA7558A71595D55500BBD41B /* SDL_haptic.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558741595D55500BBD41B /* SDL_haptic.h */; }; - AA7558A81595D55500BBD41B /* SDL_hints.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558751595D55500BBD41B /* SDL_hints.h */; }; - AA7558AA1595D55500BBD41B /* SDL_joystick.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558771595D55500BBD41B /* SDL_joystick.h */; }; - AA7558AB1595D55500BBD41B /* SDL_keyboard.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558781595D55500BBD41B /* SDL_keyboard.h */; }; - AA7558AC1595D55500BBD41B /* SDL_keycode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558791595D55500BBD41B /* SDL_keycode.h */; }; - AA7558AD1595D55500BBD41B /* SDL_loadso.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587A1595D55500BBD41B /* SDL_loadso.h */; }; - AA7558AE1595D55500BBD41B /* SDL_log.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587B1595D55500BBD41B /* SDL_log.h */; }; - AA7558AF1595D55500BBD41B /* SDL_main.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587C1595D55500BBD41B /* SDL_main.h */; }; - AA7558B01595D55500BBD41B /* SDL_mouse.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587D1595D55500BBD41B /* SDL_mouse.h */; }; - AA7558B11595D55500BBD41B /* SDL_mutex.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587E1595D55500BBD41B /* SDL_mutex.h */; }; - AA7558B21595D55500BBD41B /* SDL_name.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75587F1595D55500BBD41B /* SDL_name.h */; }; - AA7558B31595D55500BBD41B /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558801595D55500BBD41B /* SDL_opengl.h */; }; - AA7558B41595D55500BBD41B /* SDL_opengles.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558811595D55500BBD41B /* SDL_opengles.h */; }; - AA7558B51595D55500BBD41B /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558821595D55500BBD41B /* SDL_opengles2.h */; }; - AA7558B61595D55500BBD41B /* SDL_pixels.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558831595D55500BBD41B /* SDL_pixels.h */; }; - AA7558B71595D55500BBD41B /* SDL_platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558841595D55500BBD41B /* SDL_platform.h */; }; - AA7558B81595D55500BBD41B /* SDL_power.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558851595D55500BBD41B /* SDL_power.h */; }; - AA7558B91595D55500BBD41B /* SDL_quit.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558861595D55500BBD41B /* SDL_quit.h */; }; - AA7558BA1595D55500BBD41B /* SDL_rect.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558871595D55500BBD41B /* SDL_rect.h */; }; - AA7558BB1595D55500BBD41B /* SDL_render.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558881595D55500BBD41B /* SDL_render.h */; }; - AA7558BC1595D55500BBD41B /* SDL_revision.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558891595D55500BBD41B /* SDL_revision.h */; }; - AA7558BD1595D55500BBD41B /* SDL_rwops.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588A1595D55500BBD41B /* SDL_rwops.h */; }; - AA7558BE1595D55500BBD41B /* SDL_scancode.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588B1595D55500BBD41B /* SDL_scancode.h */; }; - AA7558BF1595D55500BBD41B /* SDL_shape.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588C1595D55500BBD41B /* SDL_shape.h */; }; - AA7558C01595D55500BBD41B /* SDL_stdinc.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588D1595D55500BBD41B /* SDL_stdinc.h */; }; - AA7558C11595D55500BBD41B /* SDL_surface.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588E1595D55500BBD41B /* SDL_surface.h */; }; - AA7558C21595D55500BBD41B /* SDL_system.h in Headers */ = {isa = PBXBuildFile; fileRef = AA75588F1595D55500BBD41B /* SDL_system.h */; }; - AA7558C31595D55500BBD41B /* SDL_syswm.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558901595D55500BBD41B /* SDL_syswm.h */; }; - AA7558C41595D55500BBD41B /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558911595D55500BBD41B /* SDL_thread.h */; }; - AA7558C51595D55500BBD41B /* SDL_timer.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558921595D55500BBD41B /* SDL_timer.h */; }; - AA7558C61595D55500BBD41B /* SDL_touch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558931595D55500BBD41B /* SDL_touch.h */; }; - AA7558C71595D55500BBD41B /* SDL_types.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558941595D55500BBD41B /* SDL_types.h */; }; - AA7558C81595D55500BBD41B /* SDL_version.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558951595D55500BBD41B /* SDL_version.h */; }; - AA7558C91595D55500BBD41B /* SDL_video.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558961595D55500BBD41B /* SDL_video.h */; }; - AA7558CA1595D55500BBD41B /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = AA7558971595D55500BBD41B /* SDL.h */; }; - AA9FF9511637C6E5000DF050 /* SDL_messagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FF9501637C6E5000DF050 /* SDL_messagebox.h */; }; - AABCC3941640643D00AB8930 /* SDL_uikitmessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AABCC3921640643D00AB8930 /* SDL_uikitmessagebox.h */; }; - AABCC3951640643D00AB8930 /* SDL_uikitmessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC3931640643D00AB8930 /* SDL_uikitmessagebox.m */; }; - AADA5B8F16CCAB7C00107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8E16CCAB7C00107CF7 /* SDL_bits.h */; }; - FD3F4A760DEA620800C5B771 /* SDL_getenv.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A700DEA620800C5B771 /* SDL_getenv.c */; }; - FD3F4A770DEA620800C5B771 /* SDL_iconv.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A710DEA620800C5B771 /* SDL_iconv.c */; }; - FD3F4A780DEA620800C5B771 /* SDL_malloc.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A720DEA620800C5B771 /* SDL_malloc.c */; }; - FD3F4A790DEA620800C5B771 /* SDL_qsort.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A730DEA620800C5B771 /* SDL_qsort.c */; }; - FD3F4A7A0DEA620800C5B771 /* SDL_stdlib.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A740DEA620800C5B771 /* SDL_stdlib.c */; }; - FD3F4A7B0DEA620800C5B771 /* SDL_string.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3F4A750DEA620800C5B771 /* SDL_string.c */; }; - FD5F9D2F0E0E08B3008E885B /* SDL_joystick.c in Sources */ = {isa = PBXBuildFile; fileRef = FD5F9D1E0E0E08B3008E885B /* SDL_joystick.c */; }; - FD5F9D300E0E08B3008E885B /* SDL_joystick_c.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5F9D1F0E0E08B3008E885B /* SDL_joystick_c.h */; }; - FD5F9D310E0E08B3008E885B /* SDL_sysjoystick.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5F9D200E0E08B3008E885B /* SDL_sysjoystick.h */; }; - FD6526660DE8FCDD002AD96B /* SDL_dummyaudio.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B91D0DD52EDC00FB1D6B /* SDL_dummyaudio.c */; }; - FD6526670DE8FCDD002AD96B /* SDL_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9440DD52EDC00FB1D6B /* SDL_audio.c */; }; - FD6526680DE8FCDD002AD96B /* SDL_audiocvt.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9460DD52EDC00FB1D6B /* SDL_audiocvt.c */; }; - FD65266A0DE8FCDD002AD96B /* SDL_audiotypecvt.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B94A0DD52EDC00FB1D6B /* SDL_audiotypecvt.c */; }; - FD65266B0DE8FCDD002AD96B /* SDL_mixer.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B94B0DD52EDC00FB1D6B /* SDL_mixer.c */; }; - FD65266F0DE8FCDD002AD96B /* SDL_wave.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9530DD52EDC00FB1D6B /* SDL_wave.c */; }; - FD6526700DE8FCDD002AD96B /* SDL_cpuinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B98B0DD52EDC00FB1D6B /* SDL_cpuinfo.c */; }; - FD6526710DE8FCDD002AD96B /* SDL_events.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9930DD52EDC00FB1D6B /* SDL_events.c */; }; - FD6526720DE8FCDD002AD96B /* SDL_keyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9950DD52EDC00FB1D6B /* SDL_keyboard.c */; }; - FD6526730DE8FCDD002AD96B /* SDL_mouse.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9970DD52EDC00FB1D6B /* SDL_mouse.c */; }; - FD6526740DE8FCDD002AD96B /* SDL_quit.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9990DD52EDC00FB1D6B /* SDL_quit.c */; }; - FD6526750DE8FCDD002AD96B /* SDL_windowevents.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B99B0DD52EDC00FB1D6B /* SDL_windowevents.c */; }; - FD6526760DE8FCDD002AD96B /* SDL_rwops.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B99E0DD52EDC00FB1D6B /* SDL_rwops.c */; }; - FD6526780DE8FCDD002AD96B /* SDL_error.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9D50DD52EDC00FB1D6B /* SDL_error.c */; }; - FD65267A0DE8FCDD002AD96B /* SDL.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99B9D80DD52EDC00FB1D6B /* SDL.c */; }; - FD65267B0DE8FCDD002AD96B /* SDL_syscond.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA070DD52EDC00FB1D6B /* SDL_syscond.c */; }; - FD65267C0DE8FCDD002AD96B /* SDL_sysmutex.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA080DD52EDC00FB1D6B /* SDL_sysmutex.c */; }; - FD65267D0DE8FCDD002AD96B /* SDL_syssem.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA0A0DD52EDC00FB1D6B /* SDL_syssem.c */; }; - FD65267E0DE8FCDD002AD96B /* SDL_systhread.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA0B0DD52EDC00FB1D6B /* SDL_systhread.c */; }; - FD65267F0DE8FCDD002AD96B /* SDL_thread.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA150DD52EDC00FB1D6B /* SDL_thread.c */; }; - FD6526800DE8FCDD002AD96B /* SDL_timer.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA2E0DD52EDC00FB1D6B /* SDL_timer.c */; }; - FD6526810DE8FCDD002AD96B /* SDL_systimer.c in Sources */ = {isa = PBXBuildFile; fileRef = FD99BA310DD52EDC00FB1D6B /* SDL_systimer.c */; }; - FD689F030E26E5B600F90B21 /* SDL_sysjoystick.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F000E26E5B600F90B21 /* SDL_sysjoystick.m */; }; - FD689F040E26E5B600F90B21 /* SDLUIAccelerationDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F010E26E5B600F90B21 /* SDLUIAccelerationDelegate.h */; }; - FD689F050E26E5B600F90B21 /* SDLUIAccelerationDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F020E26E5B600F90B21 /* SDLUIAccelerationDelegate.m */; }; - FD689F1C0E26E5D900F90B21 /* SDL_uikitevents.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F0C0E26E5D900F90B21 /* SDL_uikitevents.h */; }; - FD689F1D0E26E5D900F90B21 /* SDL_uikitevents.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F0D0E26E5D900F90B21 /* SDL_uikitevents.m */; }; - FD689F1E0E26E5D900F90B21 /* SDL_uikitopengles.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F0E0E26E5D900F90B21 /* SDL_uikitopengles.h */; }; - FD689F1F0E26E5D900F90B21 /* SDL_uikitopengles.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F0F0E26E5D900F90B21 /* SDL_uikitopengles.m */; }; - FD689F200E26E5D900F90B21 /* SDL_uikitvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F100E26E5D900F90B21 /* SDL_uikitvideo.h */; }; - FD689F210E26E5D900F90B21 /* SDL_uikitvideo.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F110E26E5D900F90B21 /* SDL_uikitvideo.m */; }; - FD689F230E26E5D900F90B21 /* SDL_uikitview.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F130E26E5D900F90B21 /* SDL_uikitview.m */; }; - FD689F240E26E5D900F90B21 /* SDL_uikitwindow.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F140E26E5D900F90B21 /* SDL_uikitwindow.h */; }; - FD689F250E26E5D900F90B21 /* SDL_uikitwindow.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F150E26E5D900F90B21 /* SDL_uikitwindow.m */; }; - FD689F260E26E5D900F90B21 /* SDL_uikitopenglview.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689F160E26E5D900F90B21 /* SDL_uikitopenglview.h */; }; - FD689F270E26E5D900F90B21 /* SDL_uikitopenglview.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689F170E26E5D900F90B21 /* SDL_uikitopenglview.m */; }; - FD689FCE0E26E9D400F90B21 /* SDL_uikitappdelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = FD689FCC0E26E9D400F90B21 /* SDL_uikitappdelegate.m */; }; - FD689FCF0E26E9D400F90B21 /* SDL_uikitappdelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = FD689FCD0E26E9D400F90B21 /* SDL_uikitappdelegate.h */; }; - FD8BD8250E27E25900B52CD5 /* SDL_sysloadso.c in Sources */ = {isa = PBXBuildFile; fileRef = FD8BD8190E27E25900B52CD5 /* SDL_sysloadso.c */; }; - FDA6844D0DF2374E00F98A1A /* SDL_blit.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683000DF2374E00F98A1A /* SDL_blit.c */; }; - FDA6844E0DF2374E00F98A1A /* SDL_blit.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA683010DF2374E00F98A1A /* SDL_blit.h */; }; - FDA6844F0DF2374E00F98A1A /* SDL_blit_0.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683020DF2374E00F98A1A /* SDL_blit_0.c */; }; - FDA684500DF2374E00F98A1A /* SDL_blit_1.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683030DF2374E00F98A1A /* SDL_blit_1.c */; }; - FDA684510DF2374E00F98A1A /* SDL_blit_A.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683040DF2374E00F98A1A /* SDL_blit_A.c */; }; - FDA684520DF2374E00F98A1A /* SDL_blit_auto.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683050DF2374E00F98A1A /* SDL_blit_auto.c */; }; - FDA684530DF2374E00F98A1A /* SDL_blit_auto.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA683060DF2374E00F98A1A /* SDL_blit_auto.h */; }; - FDA684540DF2374E00F98A1A /* SDL_blit_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683070DF2374E00F98A1A /* SDL_blit_copy.c */; }; - FDA684550DF2374E00F98A1A /* SDL_blit_copy.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA683080DF2374E00F98A1A /* SDL_blit_copy.h */; }; - FDA684560DF2374E00F98A1A /* SDL_blit_N.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683090DF2374E00F98A1A /* SDL_blit_N.c */; }; - FDA684570DF2374E00F98A1A /* SDL_blit_slow.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA6830A0DF2374E00F98A1A /* SDL_blit_slow.c */; }; - FDA684580DF2374E00F98A1A /* SDL_bmp.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA6830B0DF2374E00F98A1A /* SDL_bmp.c */; }; - FDA6845C0DF2374E00F98A1A /* SDL_pixels.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA6830F0DF2374E00F98A1A /* SDL_pixels.c */; }; - FDA6845D0DF2374E00F98A1A /* SDL_pixels_c.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA683100DF2374E00F98A1A /* SDL_pixels_c.h */; }; - FDA6845E0DF2374E00F98A1A /* SDL_rect.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683110DF2374E00F98A1A /* SDL_rect.c */; }; - FDA684620DF2374E00F98A1A /* SDL_RLEaccel.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683150DF2374E00F98A1A /* SDL_RLEaccel.c */; }; - FDA684630DF2374E00F98A1A /* SDL_RLEaccel_c.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA683160DF2374E00F98A1A /* SDL_RLEaccel_c.h */; }; - FDA684640DF2374E00F98A1A /* SDL_stretch.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683170DF2374E00F98A1A /* SDL_stretch.c */; }; - FDA684660DF2374E00F98A1A /* SDL_surface.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA683190DF2374E00F98A1A /* SDL_surface.c */; }; - FDA684670DF2374E00F98A1A /* SDL_sysvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA6831A0DF2374E00F98A1A /* SDL_sysvideo.h */; }; - FDA684680DF2374E00F98A1A /* SDL_video.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA6831B0DF2374E00F98A1A /* SDL_video.c */; }; - FDA685FB0DF244C800F98A1A /* SDL_nullevents.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA685F50DF244C800F98A1A /* SDL_nullevents.c */; }; - FDA685FC0DF244C800F98A1A /* SDL_nullevents_c.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA685F60DF244C800F98A1A /* SDL_nullevents_c.h */; }; - FDA685FF0DF244C800F98A1A /* SDL_nullvideo.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA685F90DF244C800F98A1A /* SDL_nullvideo.c */; }; - FDA686000DF244C800F98A1A /* SDL_nullvideo.h in Headers */ = {isa = PBXBuildFile; fileRef = FDA685FA0DF244C800F98A1A /* SDL_nullvideo.h */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 006E9886119552DD001DE610 /* SDL_rwopsbundlesupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwopsbundlesupport.h; sourceTree = ""; }; - 006E9887119552DD001DE610 /* SDL_rwopsbundlesupport.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_rwopsbundlesupport.m; sourceTree = ""; }; - 0402A85512FE70C600CECEE3 /* SDL_render_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles2.c; sourceTree = ""; }; - 0402A85612FE70C600CECEE3 /* SDL_shaders_gles2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_shaders_gles2.c; sourceTree = ""; }; - 0402A85712FE70C600CECEE3 /* SDL_shaders_gles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shaders_gles2.h; sourceTree = ""; }; - 041B2CEA12FA0F680087D585 /* SDL_render.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render.c; sourceTree = ""; }; - 041B2CEB12FA0F680087D585 /* SDL_sysrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysrender.h; sourceTree = ""; }; - 0420496E11E6F03D007E7EC9 /* SDL_clipboardevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboardevents_c.h; sourceTree = ""; }; - 0420496F11E6F03D007E7EC9 /* SDL_clipboardevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboardevents.c; sourceTree = ""; }; - 04409BA212FA989600FB9AA8 /* mmx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mmx.h; sourceTree = ""; }; - 04409BA312FA989600FB9AA8 /* SDL_yuv_mmx.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_mmx.c; sourceTree = ""; }; - 04409BA412FA989600FB9AA8 /* SDL_yuv_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_yuv_sw_c.h; sourceTree = ""; }; - 04409BA512FA989600FB9AA8 /* SDL_yuv_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_yuv_sw.c; sourceTree = ""; }; - 0442EC4E12FE1C1E004C9285 /* SDL_render_sw_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_render_sw_c.h; sourceTree = ""; }; - 0442EC4F12FE1C1E004C9285 /* SDL_render_sw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_sw.c; sourceTree = ""; }; - 0442EC5212FE1C28004C9285 /* SDL_render_gles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_render_gles.c; sourceTree = ""; }; - 0442EC5412FE1C3F004C9285 /* SDL_hints.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_hints.c; path = ../../src/SDL_hints.c; sourceTree = SOURCE_ROOT; }; - 044E5FB711E606EB0076F181 /* SDL_clipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_clipboard.c; sourceTree = ""; }; - 0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_slow.h; sourceTree = ""; }; - 0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_fillrect.c; sourceTree = ""; }; - 047677B80EA76A31008ABAF1 /* SDL_syshaptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syshaptic.c; sourceTree = ""; }; - 047677B90EA76A31008ABAF1 /* SDL_haptic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_haptic.c; path = ../../src/haptic/SDL_haptic.c; sourceTree = SOURCE_ROOT; }; - 047677BA0EA76A31008ABAF1 /* SDL_syshaptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_syshaptic.h; path = ../../src/haptic/SDL_syshaptic.h; sourceTree = SOURCE_ROOT; }; - 047AF1B20EA98D6C00811173 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = ""; }; - 04BA9D5F11EF474A00B60E01 /* SDL_gesture_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gesture_c.h; sourceTree = ""; }; - 04BA9D6011EF474A00B60E01 /* SDL_gesture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gesture.c; sourceTree = ""; }; - 04BA9D6111EF474A00B60E01 /* SDL_touch_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch_c.h; sourceTree = ""; }; - 04BA9D6211EF474A00B60E01 /* SDL_touch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_touch.c; sourceTree = ""; }; - 04BAC09A1300C1290055DE28 /* SDL_assert_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_assert_c.h; path = ../../src/SDL_assert_c.h; sourceTree = SOURCE_ROOT; }; - 04BAC09B1300C1290055DE28 /* SDL_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_log.c; path = ../../src/SDL_log.c; sourceTree = SOURCE_ROOT; }; - 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_assert.c; path = ../../src/SDL_assert.c; sourceTree = SOURCE_ROOT; }; - 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendfillrect.c; sourceTree = ""; }; - 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendfillrect.h; sourceTree = ""; }; - 04F7806C12FB751400FC43C0 /* SDL_blendline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendline.c; sourceTree = ""; }; - 04F7806D12FB751400FC43C0 /* SDL_blendline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendline.h; sourceTree = ""; }; - 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blendpoint.c; sourceTree = ""; }; - 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendpoint.h; sourceTree = ""; }; - 04F7807012FB751400FC43C0 /* SDL_draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_draw.h; sourceTree = ""; }; - 04F7807112FB751400FC43C0 /* SDL_drawline.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawline.c; sourceTree = ""; }; - 04F7807212FB751400FC43C0 /* SDL_drawline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawline.h; sourceTree = ""; }; - 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_drawpoint.c; sourceTree = ""; }; - 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_drawpoint.h; sourceTree = ""; }; - 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullframebuffer_c.h; sourceTree = ""; }; - 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullframebuffer.c; sourceTree = ""; }; - 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_atomic.c; sourceTree = ""; }; - 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_spinlock.c; sourceTree = ""; }; - 56A6702D18565E450007D20F /* SDL_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_internal.h; path = ../../src/SDL_internal.h; sourceTree = ""; }; - 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_overrides.h; path = ../../src/dynapi/SDL_dynapi_overrides.h; sourceTree = ""; }; - 56A6703218565E760007D20F /* SDL_dynapi_procs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi_procs.h; path = ../../src/dynapi/SDL_dynapi_procs.h; sourceTree = ""; }; - 56A6703318565E760007D20F /* SDL_dynapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_dynapi.c; path = ../../src/dynapi/SDL_dynapi.c; sourceTree = ""; }; - 56A6703418565E760007D20F /* SDL_dynapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_dynapi.h; path = ../../src/dynapi/SDL_dynapi.h; sourceTree = ""; }; - 56C181DE17C44D5E00406AE3 /* SDL_filesystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_filesystem.h; sourceTree = ""; }; - 56C181E117C44D7A00406AE3 /* SDL_sysfilesystem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_sysfilesystem.m; path = ../../src/filesystem/cocoa/SDL_sysfilesystem.m; sourceTree = ""; }; - 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_coreaudio.c; path = coreaudio/SDL_coreaudio.c; sourceTree = ""; }; - 56EA86FA13E9EC2B002E47EB /* SDL_coreaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_coreaudio.h; path = coreaudio/SDL_coreaudio.h; sourceTree = ""; }; - 56ED04E0118A8EE200A56AA6 /* SDL_power.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_power.c; path = ../../src/power/SDL_power.c; sourceTree = SOURCE_ROOT; }; - 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDL_syspower.m; path = ../../src/power/uikit/SDL_syspower.m; sourceTree = SOURCE_ROOT; }; - 93CB792213FC5E5200BD3E05 /* SDL_uikitviewcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitviewcontroller.h; sourceTree = ""; }; - 93CB792513FC5F5300BD3E05 /* SDL_uikitviewcontroller.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitviewcontroller.m; sourceTree = ""; }; - AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = ""; }; - AA0AD06416647BD400CE5896 /* SDL_gamecontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gamecontroller.h; sourceTree = ""; }; - AA0F8494178D5F1A00823F9D /* SDL_systls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systls.c; sourceTree = ""; }; - AA126AD21617C5E6005ABC8F /* SDL_uikitmodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmodes.h; sourceTree = ""; }; - AA126AD31617C5E6005ABC8F /* SDL_uikitmodes.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmodes.m; sourceTree = ""; }; - AA628AD9159369E3005138DD /* SDL_rotate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rotate.c; sourceTree = ""; }; - AA628ADA159369E3005138DD /* SDL_rotate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rotate.h; sourceTree = ""; }; - AA704DD4162AA90A0076D1C1 /* SDL_dropevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dropevents_c.h; sourceTree = ""; }; - AA704DD5162AA90A0076D1C1 /* SDL_dropevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dropevents.c; sourceTree = ""; }; - AA7558651595D55500BBD41B /* begin_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = begin_code.h; sourceTree = ""; }; - AA7558661595D55500BBD41B /* close_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = close_code.h; sourceTree = ""; }; - AA7558671595D55500BBD41B /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert.h; sourceTree = ""; }; - AA7558681595D55500BBD41B /* SDL_atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_atomic.h; sourceTree = ""; }; - AA7558691595D55500BBD41B /* SDL_audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio.h; sourceTree = ""; }; - AA75586A1595D55500BBD41B /* SDL_blendmode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendmode.h; sourceTree = ""; }; - AA75586B1595D55500BBD41B /* SDL_clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboard.h; sourceTree = ""; }; - AA75586C1595D55500BBD41B /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_iphoneos.h; sourceTree = ""; }; - AA75586D1595D55500BBD41B /* SDL_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config.h; sourceTree = ""; }; - AA75586E1595D55500BBD41B /* SDL_copying.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_copying.h; sourceTree = ""; }; - AA75586F1595D55500BBD41B /* SDL_cpuinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cpuinfo.h; sourceTree = ""; }; - AA7558701595D55500BBD41B /* SDL_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_endian.h; sourceTree = ""; }; - AA7558711595D55500BBD41B /* SDL_error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_error.h; sourceTree = ""; }; - AA7558721595D55500BBD41B /* SDL_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events.h; sourceTree = ""; }; - AA7558731595D55500BBD41B /* SDL_gesture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gesture.h; sourceTree = ""; }; - AA7558741595D55500BBD41B /* SDL_haptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_haptic.h; sourceTree = ""; }; - AA7558751595D55500BBD41B /* SDL_hints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_hints.h; sourceTree = ""; }; - AA7558771595D55500BBD41B /* SDL_joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick.h; sourceTree = ""; }; - AA7558781595D55500BBD41B /* SDL_keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard.h; sourceTree = ""; }; - AA7558791595D55500BBD41B /* SDL_keycode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keycode.h; sourceTree = ""; }; - AA75587A1595D55500BBD41B /* SDL_loadso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_loadso.h; sourceTree = ""; }; - AA75587B1595D55500BBD41B /* SDL_log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_log.h; sourceTree = ""; }; - AA75587C1595D55500BBD41B /* SDL_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_main.h; sourceTree = ""; }; - AA75587D1595D55500BBD41B /* SDL_mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse.h; sourceTree = ""; }; - AA75587E1595D55500BBD41B /* SDL_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mutex.h; sourceTree = ""; }; - AA75587F1595D55500BBD41B /* SDL_name.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_name.h; sourceTree = ""; }; - AA7558801595D55500BBD41B /* SDL_opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; - AA7558811595D55500BBD41B /* SDL_opengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles.h; sourceTree = ""; }; - AA7558821595D55500BBD41B /* SDL_opengles2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2.h; sourceTree = ""; }; - AA7558831595D55500BBD41B /* SDL_pixels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels.h; sourceTree = ""; }; - AA7558841595D55500BBD41B /* SDL_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_platform.h; sourceTree = ""; }; - AA7558851595D55500BBD41B /* SDL_power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_power.h; sourceTree = ""; }; - AA7558861595D55500BBD41B /* SDL_quit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_quit.h; sourceTree = ""; }; - AA7558871595D55500BBD41B /* SDL_rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rect.h; sourceTree = ""; }; - AA7558881595D55500BBD41B /* SDL_render.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_render.h; sourceTree = ""; }; - AA7558891595D55500BBD41B /* SDL_revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_revision.h; sourceTree = ""; }; - AA75588A1595D55500BBD41B /* SDL_rwops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwops.h; sourceTree = ""; }; - AA75588B1595D55500BBD41B /* SDL_scancode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_scancode.h; sourceTree = ""; }; - AA75588C1595D55500BBD41B /* SDL_shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shape.h; sourceTree = ""; }; - AA75588D1595D55500BBD41B /* SDL_stdinc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_stdinc.h; sourceTree = ""; }; - AA75588E1595D55500BBD41B /* SDL_surface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_surface.h; sourceTree = ""; }; - AA75588F1595D55500BBD41B /* SDL_system.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_system.h; sourceTree = ""; }; - AA7558901595D55500BBD41B /* SDL_syswm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syswm.h; sourceTree = ""; }; - AA7558911595D55500BBD41B /* SDL_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread.h; sourceTree = ""; }; - AA7558921595D55500BBD41B /* SDL_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer.h; sourceTree = ""; }; - AA7558931595D55500BBD41B /* SDL_touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch.h; sourceTree = ""; }; - AA7558941595D55500BBD41B /* SDL_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_types.h; sourceTree = ""; }; - AA7558951595D55500BBD41B /* SDL_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_version.h; sourceTree = ""; }; - AA7558961595D55500BBD41B /* SDL_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_video.h; sourceTree = ""; }; - AA7558971595D55500BBD41B /* SDL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; - AA9FF9501637C6E5000DF050 /* SDL_messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_messagebox.h; sourceTree = ""; }; - AABCC3921640643D00AB8930 /* SDL_uikitmessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitmessagebox.h; sourceTree = ""; }; - AABCC3931640643D00AB8930 /* SDL_uikitmessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitmessagebox.m; sourceTree = ""; }; - AADA5B8E16CCAB7C00107CF7 /* SDL_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_bits.h; sourceTree = ""; }; - FD0BBFEF0E3933DD00D833B1 /* SDL_uikitview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitview.h; sourceTree = ""; }; - FD3F4A700DEA620800C5B771 /* SDL_getenv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_getenv.c; sourceTree = ""; }; - FD3F4A710DEA620800C5B771 /* SDL_iconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_iconv.c; sourceTree = ""; }; - FD3F4A720DEA620800C5B771 /* SDL_malloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_malloc.c; sourceTree = ""; }; - FD3F4A730DEA620800C5B771 /* SDL_qsort.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_qsort.c; sourceTree = ""; }; - FD3F4A740DEA620800C5B771 /* SDL_stdlib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stdlib.c; sourceTree = ""; }; - FD3F4A750DEA620800C5B771 /* SDL_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_string.c; sourceTree = ""; }; - FD5F9D1E0E0E08B3008E885B /* SDL_joystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_joystick.c; sourceTree = ""; }; - FD5F9D1F0E0E08B3008E885B /* SDL_joystick_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick_c.h; sourceTree = ""; }; - FD5F9D200E0E08B3008E885B /* SDL_sysjoystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysjoystick.h; sourceTree = ""; }; - FD6526630DE8FCCB002AD96B /* libSDL2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FD689F000E26E5B600F90B21 /* SDL_sysjoystick.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_sysjoystick.m; sourceTree = ""; }; - FD689F010E26E5B600F90B21 /* SDLUIAccelerationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLUIAccelerationDelegate.h; sourceTree = ""; }; - FD689F020E26E5B600F90B21 /* SDLUIAccelerationDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLUIAccelerationDelegate.m; sourceTree = ""; }; - FD689F0C0E26E5D900F90B21 /* SDL_uikitevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitevents.h; sourceTree = ""; }; - FD689F0D0E26E5D900F90B21 /* SDL_uikitevents.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitevents.m; sourceTree = ""; }; - FD689F0E0E26E5D900F90B21 /* SDL_uikitopengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopengles.h; sourceTree = ""; }; - FD689F0F0E26E5D900F90B21 /* SDL_uikitopengles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopengles.m; sourceTree = ""; }; - FD689F100E26E5D900F90B21 /* SDL_uikitvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitvideo.h; sourceTree = ""; }; - FD689F110E26E5D900F90B21 /* SDL_uikitvideo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitvideo.m; sourceTree = ""; }; - FD689F130E26E5D900F90B21 /* SDL_uikitview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitview.m; sourceTree = ""; }; - FD689F140E26E5D900F90B21 /* SDL_uikitwindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitwindow.h; sourceTree = ""; }; - FD689F150E26E5D900F90B21 /* SDL_uikitwindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitwindow.m; sourceTree = ""; }; - FD689F160E26E5D900F90B21 /* SDL_uikitopenglview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitopenglview.h; sourceTree = ""; }; - FD689F170E26E5D900F90B21 /* SDL_uikitopenglview.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitopenglview.m; sourceTree = ""; }; - FD689FCC0E26E9D400F90B21 /* SDL_uikitappdelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_uikitappdelegate.m; sourceTree = ""; }; - FD689FCD0E26E9D400F90B21 /* SDL_uikitappdelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_uikitappdelegate.h; sourceTree = ""; }; - FD8BD8190E27E25900B52CD5 /* SDL_sysloadso.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysloadso.c; sourceTree = ""; }; - FD99B91D0DD52EDC00FB1D6B /* SDL_dummyaudio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_dummyaudio.c; sourceTree = ""; }; - FD99B91E0DD52EDC00FB1D6B /* SDL_dummyaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_dummyaudio.h; sourceTree = ""; }; - FD99B9440DD52EDC00FB1D6B /* SDL_audio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audio.c; sourceTree = ""; }; - FD99B9450DD52EDC00FB1D6B /* SDL_audio_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio_c.h; sourceTree = ""; }; - FD99B9460DD52EDC00FB1D6B /* SDL_audiocvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiocvt.c; sourceTree = ""; }; - FD99B9490DD52EDC00FB1D6B /* SDL_audiomem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audiomem.h; sourceTree = ""; }; - FD99B94A0DD52EDC00FB1D6B /* SDL_audiotypecvt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_audiotypecvt.c; sourceTree = ""; }; - FD99B94B0DD52EDC00FB1D6B /* SDL_mixer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mixer.c; sourceTree = ""; }; - FD99B9520DD52EDC00FB1D6B /* SDL_sysaudio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysaudio.h; sourceTree = ""; }; - FD99B9530DD52EDC00FB1D6B /* SDL_wave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_wave.c; sourceTree = ""; }; - FD99B9540DD52EDC00FB1D6B /* SDL_wave.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_wave.h; sourceTree = ""; }; - FD99B98B0DD52EDC00FB1D6B /* SDL_cpuinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_cpuinfo.c; sourceTree = ""; }; - FD99B98D0DD52EDC00FB1D6B /* blank_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blank_cursor.h; sourceTree = ""; }; - FD99B98E0DD52EDC00FB1D6B /* default_cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default_cursor.h; sourceTree = ""; }; - FD99B98F0DD52EDC00FB1D6B /* scancodes_darwin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_darwin.h; sourceTree = ""; }; - FD99B9900DD52EDC00FB1D6B /* scancodes_linux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_linux.h; sourceTree = ""; }; - FD99B9920DD52EDC00FB1D6B /* scancodes_xfree86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scancodes_xfree86.h; sourceTree = ""; }; - FD99B9930DD52EDC00FB1D6B /* SDL_events.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_events.c; sourceTree = ""; }; - FD99B9940DD52EDC00FB1D6B /* SDL_events_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events_c.h; sourceTree = ""; }; - FD99B9950DD52EDC00FB1D6B /* SDL_keyboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_keyboard.c; sourceTree = ""; }; - FD99B9960DD52EDC00FB1D6B /* SDL_keyboard_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard_c.h; sourceTree = ""; }; - FD99B9970DD52EDC00FB1D6B /* SDL_mouse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_mouse.c; sourceTree = ""; }; - FD99B9980DD52EDC00FB1D6B /* SDL_mouse_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse_c.h; sourceTree = ""; }; - FD99B9990DD52EDC00FB1D6B /* SDL_quit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_quit.c; sourceTree = ""; }; - FD99B99A0DD52EDC00FB1D6B /* SDL_sysevents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysevents.h; sourceTree = ""; }; - FD99B99B0DD52EDC00FB1D6B /* SDL_windowevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_windowevents.c; sourceTree = ""; }; - FD99B99C0DD52EDC00FB1D6B /* SDL_windowevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_windowevents_c.h; sourceTree = ""; }; - FD99B99E0DD52EDC00FB1D6B /* SDL_rwops.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rwops.c; sourceTree = ""; }; - FD99B9D40DD52EDC00FB1D6B /* SDL_error_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDL_error_c.h; path = ../../src/SDL_error_c.h; sourceTree = ""; }; - FD99B9D50DD52EDC00FB1D6B /* SDL_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_error.c; path = ../../src/SDL_error.c; sourceTree = ""; }; - FD99B9D80DD52EDC00FB1D6B /* SDL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL.c; path = ../../src/SDL.c; sourceTree = ""; }; - FD99BA070DD52EDC00FB1D6B /* SDL_syscond.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syscond.c; sourceTree = ""; }; - FD99BA080DD52EDC00FB1D6B /* SDL_sysmutex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_sysmutex.c; sourceTree = ""; }; - FD99BA090DD52EDC00FB1D6B /* SDL_sysmutex_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysmutex_c.h; sourceTree = ""; }; - FD99BA0A0DD52EDC00FB1D6B /* SDL_syssem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_syssem.c; sourceTree = ""; }; - FD99BA0B0DD52EDC00FB1D6B /* SDL_systhread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systhread.c; sourceTree = ""; }; - FD99BA0C0DD52EDC00FB1D6B /* SDL_systhread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread_c.h; sourceTree = ""; }; - FD99BA140DD52EDC00FB1D6B /* SDL_systhread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_systhread.h; sourceTree = ""; }; - FD99BA150DD52EDC00FB1D6B /* SDL_thread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_thread.c; sourceTree = ""; }; - FD99BA160DD52EDC00FB1D6B /* SDL_thread_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread_c.h; sourceTree = ""; }; - FD99BA2E0DD52EDC00FB1D6B /* SDL_timer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_timer.c; sourceTree = ""; }; - FD99BA2F0DD52EDC00FB1D6B /* SDL_timer_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer_c.h; sourceTree = ""; }; - FD99BA310DD52EDC00FB1D6B /* SDL_systimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_systimer.c; sourceTree = ""; }; - FDA683000DF2374E00F98A1A /* SDL_blit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit.c; sourceTree = ""; }; - FDA683010DF2374E00F98A1A /* SDL_blit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit.h; sourceTree = ""; }; - FDA683020DF2374E00F98A1A /* SDL_blit_0.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_0.c; sourceTree = ""; }; - FDA683030DF2374E00F98A1A /* SDL_blit_1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_1.c; sourceTree = ""; }; - FDA683040DF2374E00F98A1A /* SDL_blit_A.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_A.c; sourceTree = ""; }; - FDA683050DF2374E00F98A1A /* SDL_blit_auto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_auto.c; sourceTree = ""; }; - FDA683060DF2374E00F98A1A /* SDL_blit_auto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_auto.h; sourceTree = ""; }; - FDA683070DF2374E00F98A1A /* SDL_blit_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_copy.c; sourceTree = ""; }; - FDA683080DF2374E00F98A1A /* SDL_blit_copy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blit_copy.h; sourceTree = ""; }; - FDA683090DF2374E00F98A1A /* SDL_blit_N.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_N.c; sourceTree = ""; }; - FDA6830A0DF2374E00F98A1A /* SDL_blit_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_blit_slow.c; sourceTree = ""; }; - FDA6830B0DF2374E00F98A1A /* SDL_bmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_bmp.c; sourceTree = ""; }; - FDA6830F0DF2374E00F98A1A /* SDL_pixels.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_pixels.c; sourceTree = ""; }; - FDA683100DF2374E00F98A1A /* SDL_pixels_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels_c.h; sourceTree = ""; }; - FDA683110DF2374E00F98A1A /* SDL_rect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_rect.c; sourceTree = ""; }; - FDA683150DF2374E00F98A1A /* SDL_RLEaccel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_RLEaccel.c; sourceTree = ""; }; - FDA683160DF2374E00F98A1A /* SDL_RLEaccel_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_RLEaccel_c.h; sourceTree = ""; }; - FDA683170DF2374E00F98A1A /* SDL_stretch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_stretch.c; sourceTree = ""; }; - FDA683190DF2374E00F98A1A /* SDL_surface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_surface.c; sourceTree = ""; }; - FDA6831A0DF2374E00F98A1A /* SDL_sysvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_sysvideo.h; sourceTree = ""; }; - FDA6831B0DF2374E00F98A1A /* SDL_video.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_video.c; sourceTree = ""; }; - FDA685F50DF244C800F98A1A /* SDL_nullevents.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullevents.c; sourceTree = ""; }; - FDA685F60DF244C800F98A1A /* SDL_nullevents_c.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullevents_c.h; sourceTree = ""; }; - FDA685F90DF244C800F98A1A /* SDL_nullvideo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_nullvideo.c; sourceTree = ""; }; - FDA685FA0DF244C800F98A1A /* SDL_nullvideo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_nullvideo.h; sourceTree = ""; }; - FDC261780E3A3FC8001C4554 /* keyinfotable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keyinfotable.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXGroup section */ - 006E9885119552DD001DE610 /* cocoa */ = { - isa = PBXGroup; - children = ( - 006E9886119552DD001DE610 /* SDL_rwopsbundlesupport.h */, - 006E9887119552DD001DE610 /* SDL_rwopsbundlesupport.m */, - ); - path = cocoa; - sourceTree = ""; - }; - 0402A85412FE70C600CECEE3 /* opengles2 */ = { - isa = PBXGroup; - children = ( - 0402A85512FE70C600CECEE3 /* SDL_render_gles2.c */, - 0402A85612FE70C600CECEE3 /* SDL_shaders_gles2.c */, - 0402A85712FE70C600CECEE3 /* SDL_shaders_gles2.h */, - ); - path = opengles2; - sourceTree = ""; - }; - 041B2CE312FA0F680087D585 /* render */ = { - isa = PBXGroup; - children = ( - 041B2CE812FA0F680087D585 /* opengles */, - 0402A85412FE70C600CECEE3 /* opengles2 */, - 041B2CEC12FA0F680087D585 /* software */, - 04409BA212FA989600FB9AA8 /* mmx.h */, - 041B2CEA12FA0F680087D585 /* SDL_render.c */, - 041B2CEB12FA0F680087D585 /* SDL_sysrender.h */, - 04409BA312FA989600FB9AA8 /* SDL_yuv_mmx.c */, - 04409BA412FA989600FB9AA8 /* SDL_yuv_sw_c.h */, - 04409BA512FA989600FB9AA8 /* SDL_yuv_sw.c */, - ); - name = render; - path = ../../src/render; - sourceTree = SOURCE_ROOT; - }; - 041B2CE812FA0F680087D585 /* opengles */ = { - isa = PBXGroup; - children = ( - 0442EC5212FE1C28004C9285 /* SDL_render_gles.c */, - ); - path = opengles; - sourceTree = ""; - }; - 041B2CEC12FA0F680087D585 /* software */ = { - isa = PBXGroup; - children = ( - 04F7806A12FB751400FC43C0 /* SDL_blendfillrect.c */, - 04F7806B12FB751400FC43C0 /* SDL_blendfillrect.h */, - 04F7806C12FB751400FC43C0 /* SDL_blendline.c */, - 04F7806D12FB751400FC43C0 /* SDL_blendline.h */, - 04F7806E12FB751400FC43C0 /* SDL_blendpoint.c */, - 04F7806F12FB751400FC43C0 /* SDL_blendpoint.h */, - 04F7807012FB751400FC43C0 /* SDL_draw.h */, - 04F7807112FB751400FC43C0 /* SDL_drawline.c */, - 04F7807212FB751400FC43C0 /* SDL_drawline.h */, - 04F7807312FB751400FC43C0 /* SDL_drawpoint.c */, - 04F7807412FB751400FC43C0 /* SDL_drawpoint.h */, - 0442EC4F12FE1C1E004C9285 /* SDL_render_sw.c */, - 0442EC4E12FE1C1E004C9285 /* SDL_render_sw_c.h */, - AA628AD9159369E3005138DD /* SDL_rotate.c */, - AA628ADA159369E3005138DD /* SDL_rotate.h */, - ); - path = software; - sourceTree = ""; - }; - 047677B60EA769DF008ABAF1 /* haptic */ = { - isa = PBXGroup; - children = ( - 047677B70EA76A31008ABAF1 /* dummy */, - 047677B90EA76A31008ABAF1 /* SDL_haptic.c */, - 047677BA0EA76A31008ABAF1 /* SDL_syshaptic.h */, - ); - name = haptic; - sourceTree = ""; - }; - 047677B70EA76A31008ABAF1 /* dummy */ = { - isa = PBXGroup; - children = ( - 047677B80EA76A31008ABAF1 /* SDL_syshaptic.c */, - ); - name = dummy; - path = ../../src/haptic/dummy; - sourceTree = SOURCE_ROOT; - }; - 047AF1B10EA98D6C00811173 /* dummy */ = { - isa = PBXGroup; - children = ( - 047AF1B20EA98D6C00811173 /* SDL_sysloadso.c */, - ); - path = dummy; - sourceTree = ""; - }; - 04B2ECEF1025CEB900F9BC5F /* atomic */ = { - isa = PBXGroup; - children = ( - 04FFAB8912E23B8D00BA343D /* SDL_atomic.c */, - 04FFAB8A12E23B8D00BA343D /* SDL_spinlock.c */, - ); - name = atomic; - path = ../../src/atomic; - sourceTree = SOURCE_ROOT; - }; - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - FD6526630DE8FCCB002AD96B /* libSDL2.a */, - ); - name = Products; - sourceTree = ""; - }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { - isa = PBXGroup; - children = ( - FD99B8BC0DD52E5C00FB1D6B /* Public Headers */, - FD99B8BD0DD52E6D00FB1D6B /* Library Source */, - 19C28FACFE9D520D11CA2CBB /* Products */, - ); - name = CustomTemplate; - sourceTree = ""; - usesTabs = 0; - }; - 56A6702F18565E4F0007D20F /* dynapi */ = { - isa = PBXGroup; - children = ( - 56A6703118565E760007D20F /* SDL_dynapi_overrides.h */, - 56A6703218565E760007D20F /* SDL_dynapi_procs.h */, - 56A6703318565E760007D20F /* SDL_dynapi.c */, - 56A6703418565E760007D20F /* SDL_dynapi.h */, - ); - name = dynapi; - sourceTree = ""; - }; - 56C181E017C44D6900406AE3 /* filesystem */ = { - isa = PBXGroup; - children = ( - 56C181E117C44D7A00406AE3 /* SDL_sysfilesystem.m */, - ); - name = filesystem; - sourceTree = ""; - }; - 56EA86F813E9EBF9002E47EB /* coreaudio */ = { - isa = PBXGroup; - children = ( - 56EA86F913E9EC2B002E47EB /* SDL_coreaudio.c */, - 56EA86FA13E9EC2B002E47EB /* SDL_coreaudio.h */, - ); - name = coreaudio; - sourceTree = ""; - }; - 56ED04DE118A8E9A00A56AA6 /* power */ = { - isa = PBXGroup; - children = ( - 56ED04E0118A8EE200A56AA6 /* SDL_power.c */, - 56ED04DF118A8EB700A56AA6 /* uikit */, - ); - name = power; - sourceTree = ""; - }; - 56ED04DF118A8EB700A56AA6 /* uikit */ = { - isa = PBXGroup; - children = ( - 56ED04E2118A8EFD00A56AA6 /* SDL_syspower.m */, - ); - name = uikit; - sourceTree = ""; - }; - FD3F4A6F0DEA620800C5B771 /* stdlib */ = { - isa = PBXGroup; - children = ( - FD3F4A700DEA620800C5B771 /* SDL_getenv.c */, - FD3F4A710DEA620800C5B771 /* SDL_iconv.c */, - FD3F4A720DEA620800C5B771 /* SDL_malloc.c */, - FD3F4A730DEA620800C5B771 /* SDL_qsort.c */, - FD3F4A740DEA620800C5B771 /* SDL_stdlib.c */, - FD3F4A750DEA620800C5B771 /* SDL_string.c */, - ); - name = stdlib; - path = ../../src/stdlib; - sourceTree = SOURCE_ROOT; - }; - FD5F9D080E0E08B3008E885B /* joystick */ = { - isa = PBXGroup; - children = ( - FD689EFF0E26E5B600F90B21 /* iphoneos */, - AA0AD06116647BBB00CE5896 /* SDL_gamecontroller.c */, - FD5F9D1E0E0E08B3008E885B /* SDL_joystick.c */, - FD5F9D1F0E0E08B3008E885B /* SDL_joystick_c.h */, - FD5F9D200E0E08B3008E885B /* SDL_sysjoystick.h */, - ); - name = joystick; - path = ../../src/joystick; - sourceTree = SOURCE_ROOT; - }; - FD689EFF0E26E5B600F90B21 /* iphoneos */ = { - isa = PBXGroup; - children = ( - FD689F000E26E5B600F90B21 /* SDL_sysjoystick.m */, - FD689F010E26E5B600F90B21 /* SDLUIAccelerationDelegate.h */, - FD689F020E26E5B600F90B21 /* SDLUIAccelerationDelegate.m */, - ); - path = iphoneos; - sourceTree = ""; - }; - FD689F090E26E5D900F90B21 /* uikit */ = { - isa = PBXGroup; - children = ( - FDC261780E3A3FC8001C4554 /* keyinfotable.h */, - FD689FCD0E26E9D400F90B21 /* SDL_uikitappdelegate.h */, - FD689FCC0E26E9D400F90B21 /* SDL_uikitappdelegate.m */, - FD689F0C0E26E5D900F90B21 /* SDL_uikitevents.h */, - FD689F0D0E26E5D900F90B21 /* SDL_uikitevents.m */, - AABCC3921640643D00AB8930 /* SDL_uikitmessagebox.h */, - AABCC3931640643D00AB8930 /* SDL_uikitmessagebox.m */, - AA126AD21617C5E6005ABC8F /* SDL_uikitmodes.h */, - AA126AD31617C5E6005ABC8F /* SDL_uikitmodes.m */, - FD689F0E0E26E5D900F90B21 /* SDL_uikitopengles.h */, - FD689F0F0E26E5D900F90B21 /* SDL_uikitopengles.m */, - FD689F160E26E5D900F90B21 /* SDL_uikitopenglview.h */, - FD689F170E26E5D900F90B21 /* SDL_uikitopenglview.m */, - FD689F100E26E5D900F90B21 /* SDL_uikitvideo.h */, - FD689F110E26E5D900F90B21 /* SDL_uikitvideo.m */, - FD0BBFEF0E3933DD00D833B1 /* SDL_uikitview.h */, - FD689F130E26E5D900F90B21 /* SDL_uikitview.m */, - 93CB792213FC5E5200BD3E05 /* SDL_uikitviewcontroller.h */, - 93CB792513FC5F5300BD3E05 /* SDL_uikitviewcontroller.m */, - FD689F140E26E5D900F90B21 /* SDL_uikitwindow.h */, - FD689F150E26E5D900F90B21 /* SDL_uikitwindow.m */, - ); - path = uikit; - sourceTree = ""; - }; - FD8BD8150E27E25900B52CD5 /* loadso */ = { - isa = PBXGroup; - children = ( - 047AF1B10EA98D6C00811173 /* dummy */, - FD8BD8180E27E25900B52CD5 /* dlopen */, - ); - name = loadso; - path = ../../src/loadso; - sourceTree = SOURCE_ROOT; - }; - FD8BD8180E27E25900B52CD5 /* dlopen */ = { - isa = PBXGroup; - children = ( - FD8BD8190E27E25900B52CD5 /* SDL_sysloadso.c */, - ); - path = dlopen; - sourceTree = ""; - }; - FD99B8BC0DD52E5C00FB1D6B /* Public Headers */ = { - isa = PBXGroup; - children = ( - AA7558651595D55500BBD41B /* begin_code.h */, - AA7558661595D55500BBD41B /* close_code.h */, - AA7558971595D55500BBD41B /* SDL.h */, - AA7558671595D55500BBD41B /* SDL_assert.h */, - AA7558681595D55500BBD41B /* SDL_atomic.h */, - AA7558691595D55500BBD41B /* SDL_audio.h */, - AADA5B8E16CCAB7C00107CF7 /* SDL_bits.h */, - AA75586A1595D55500BBD41B /* SDL_blendmode.h */, - AA75586B1595D55500BBD41B /* SDL_clipboard.h */, - AA75586D1595D55500BBD41B /* SDL_config.h */, - AA75586C1595D55500BBD41B /* SDL_config_iphoneos.h */, - AA75586E1595D55500BBD41B /* SDL_copying.h */, - AA75586F1595D55500BBD41B /* SDL_cpuinfo.h */, - AA7558701595D55500BBD41B /* SDL_endian.h */, - AA7558711595D55500BBD41B /* SDL_error.h */, - AA7558721595D55500BBD41B /* SDL_events.h */, - 56C181DE17C44D5E00406AE3 /* SDL_filesystem.h */, - AA0AD06416647BD400CE5896 /* SDL_gamecontroller.h */, - AA7558731595D55500BBD41B /* SDL_gesture.h */, - AA7558741595D55500BBD41B /* SDL_haptic.h */, - AA7558751595D55500BBD41B /* SDL_hints.h */, - AA7558771595D55500BBD41B /* SDL_joystick.h */, - AA7558781595D55500BBD41B /* SDL_keyboard.h */, - AA7558791595D55500BBD41B /* SDL_keycode.h */, - AA75587A1595D55500BBD41B /* SDL_loadso.h */, - AA75587B1595D55500BBD41B /* SDL_log.h */, - AA75587C1595D55500BBD41B /* SDL_main.h */, - AA9FF9501637C6E5000DF050 /* SDL_messagebox.h */, - AA75587D1595D55500BBD41B /* SDL_mouse.h */, - AA75587E1595D55500BBD41B /* SDL_mutex.h */, - AA75587F1595D55500BBD41B /* SDL_name.h */, - AA7558801595D55500BBD41B /* SDL_opengl.h */, - AA7558811595D55500BBD41B /* SDL_opengles.h */, - AA7558821595D55500BBD41B /* SDL_opengles2.h */, - AA7558831595D55500BBD41B /* SDL_pixels.h */, - AA7558841595D55500BBD41B /* SDL_platform.h */, - AA7558851595D55500BBD41B /* SDL_power.h */, - AA7558861595D55500BBD41B /* SDL_quit.h */, - AA7558871595D55500BBD41B /* SDL_rect.h */, - AA7558881595D55500BBD41B /* SDL_render.h */, - AA7558891595D55500BBD41B /* SDL_revision.h */, - AA75588A1595D55500BBD41B /* SDL_rwops.h */, - AA75588B1595D55500BBD41B /* SDL_scancode.h */, - AA75588C1595D55500BBD41B /* SDL_shape.h */, - AA75588D1595D55500BBD41B /* SDL_stdinc.h */, - AA75588E1595D55500BBD41B /* SDL_surface.h */, - AA75588F1595D55500BBD41B /* SDL_system.h */, - AA7558901595D55500BBD41B /* SDL_syswm.h */, - AA7558911595D55500BBD41B /* SDL_thread.h */, - AA7558921595D55500BBD41B /* SDL_timer.h */, - AA7558931595D55500BBD41B /* SDL_touch.h */, - AA7558941595D55500BBD41B /* SDL_types.h */, - AA7558951595D55500BBD41B /* SDL_version.h */, - AA7558961595D55500BBD41B /* SDL_video.h */, - ); - name = "Public Headers"; - path = ../../include; - sourceTree = ""; - }; - FD99B8BD0DD52E6D00FB1D6B /* Library Source */ = { - isa = PBXGroup; - children = ( - 04B2ECEF1025CEB900F9BC5F /* atomic */, - FD99B8FB0DD52EDC00FB1D6B /* audio */, - FD99B98A0DD52EDC00FB1D6B /* cpuinfo */, - 56A6702F18565E4F0007D20F /* dynapi */, - FD99B98C0DD52EDC00FB1D6B /* events */, - FD99B99D0DD52EDC00FB1D6B /* file */, - 56C181E017C44D6900406AE3 /* filesystem */, - 047677B60EA769DF008ABAF1 /* haptic */, - FD5F9D080E0E08B3008E885B /* joystick */, - FD8BD8150E27E25900B52CD5 /* loadso */, - 56ED04DE118A8E9A00A56AA6 /* power */, - 041B2CE312FA0F680087D585 /* render */, - FD3F4A6F0DEA620800C5B771 /* stdlib */, - FD99B9E00DD52EDC00FB1D6B /* thread */, - FD99BA1E0DD52EDC00FB1D6B /* timer */, - FDA682420DF2374D00F98A1A /* video */, - 56A6702D18565E450007D20F /* SDL_internal.h */, - 04F2AF551104ABD200D6DDF7 /* SDL_assert.c */, - 04BAC09A1300C1290055DE28 /* SDL_assert_c.h */, - FD99B9D40DD52EDC00FB1D6B /* SDL_error_c.h */, - FD99B9D50DD52EDC00FB1D6B /* SDL_error.c */, - 0442EC5412FE1C3F004C9285 /* SDL_hints.c */, - 04BAC09B1300C1290055DE28 /* SDL_log.c */, - FD99B9D80DD52EDC00FB1D6B /* SDL.c */, - ); - name = "Library Source"; - sourceTree = ""; - }; - FD99B8FB0DD52EDC00FB1D6B /* audio */ = { - isa = PBXGroup; - children = ( - 56EA86F813E9EBF9002E47EB /* coreaudio */, - FD99B91C0DD52EDC00FB1D6B /* dummy */, - FD99B9440DD52EDC00FB1D6B /* SDL_audio.c */, - FD99B9450DD52EDC00FB1D6B /* SDL_audio_c.h */, - FD99B9460DD52EDC00FB1D6B /* SDL_audiocvt.c */, - FD99B9490DD52EDC00FB1D6B /* SDL_audiomem.h */, - FD99B94A0DD52EDC00FB1D6B /* SDL_audiotypecvt.c */, - FD99B94B0DD52EDC00FB1D6B /* SDL_mixer.c */, - FD99B9520DD52EDC00FB1D6B /* SDL_sysaudio.h */, - FD99B9530DD52EDC00FB1D6B /* SDL_wave.c */, - FD99B9540DD52EDC00FB1D6B /* SDL_wave.h */, - ); - name = audio; - path = ../../src/audio; - sourceTree = ""; - }; - FD99B91C0DD52EDC00FB1D6B /* dummy */ = { - isa = PBXGroup; - children = ( - FD99B91D0DD52EDC00FB1D6B /* SDL_dummyaudio.c */, - FD99B91E0DD52EDC00FB1D6B /* SDL_dummyaudio.h */, - ); - path = dummy; - sourceTree = ""; - }; - FD99B98A0DD52EDC00FB1D6B /* cpuinfo */ = { - isa = PBXGroup; - children = ( - FD99B98B0DD52EDC00FB1D6B /* SDL_cpuinfo.c */, - ); - name = cpuinfo; - path = ../../src/cpuinfo; - sourceTree = ""; - }; - FD99B98C0DD52EDC00FB1D6B /* events */ = { - isa = PBXGroup; - children = ( - FD99B98D0DD52EDC00FB1D6B /* blank_cursor.h */, - FD99B98E0DD52EDC00FB1D6B /* default_cursor.h */, - FD99B98F0DD52EDC00FB1D6B /* scancodes_darwin.h */, - FD99B9900DD52EDC00FB1D6B /* scancodes_linux.h */, - FD99B9920DD52EDC00FB1D6B /* scancodes_xfree86.h */, - 0420496F11E6F03D007E7EC9 /* SDL_clipboardevents.c */, - 0420496E11E6F03D007E7EC9 /* SDL_clipboardevents_c.h */, - AA704DD5162AA90A0076D1C1 /* SDL_dropevents.c */, - AA704DD4162AA90A0076D1C1 /* SDL_dropevents_c.h */, - FD99B9930DD52EDC00FB1D6B /* SDL_events.c */, - FD99B9940DD52EDC00FB1D6B /* SDL_events_c.h */, - 04BA9D6011EF474A00B60E01 /* SDL_gesture.c */, - 04BA9D5F11EF474A00B60E01 /* SDL_gesture_c.h */, - FD99B9950DD52EDC00FB1D6B /* SDL_keyboard.c */, - FD99B9960DD52EDC00FB1D6B /* SDL_keyboard_c.h */, - FD99B9970DD52EDC00FB1D6B /* SDL_mouse.c */, - FD99B9980DD52EDC00FB1D6B /* SDL_mouse_c.h */, - FD99B9990DD52EDC00FB1D6B /* SDL_quit.c */, - FD99B99A0DD52EDC00FB1D6B /* SDL_sysevents.h */, - 04BA9D6211EF474A00B60E01 /* SDL_touch.c */, - 04BA9D6111EF474A00B60E01 /* SDL_touch_c.h */, - FD99B99B0DD52EDC00FB1D6B /* SDL_windowevents.c */, - FD99B99C0DD52EDC00FB1D6B /* SDL_windowevents_c.h */, - ); - name = events; - path = ../../src/events; - sourceTree = ""; - }; - FD99B99D0DD52EDC00FB1D6B /* file */ = { - isa = PBXGroup; - children = ( - 006E9885119552DD001DE610 /* cocoa */, - FD99B99E0DD52EDC00FB1D6B /* SDL_rwops.c */, - ); - name = file; - path = ../../src/file; - sourceTree = ""; - }; - FD99B9E00DD52EDC00FB1D6B /* thread */ = { - isa = PBXGroup; - children = ( - FD99BA060DD52EDC00FB1D6B /* pthread */, - FD99BA140DD52EDC00FB1D6B /* SDL_systhread.h */, - FD99BA150DD52EDC00FB1D6B /* SDL_thread.c */, - FD99BA160DD52EDC00FB1D6B /* SDL_thread_c.h */, - ); - name = thread; - path = ../../src/thread; - sourceTree = ""; - }; - FD99BA060DD52EDC00FB1D6B /* pthread */ = { - isa = PBXGroup; - children = ( - FD99BA070DD52EDC00FB1D6B /* SDL_syscond.c */, - FD99BA080DD52EDC00FB1D6B /* SDL_sysmutex.c */, - FD99BA090DD52EDC00FB1D6B /* SDL_sysmutex_c.h */, - FD99BA0A0DD52EDC00FB1D6B /* SDL_syssem.c */, - FD99BA0B0DD52EDC00FB1D6B /* SDL_systhread.c */, - FD99BA0C0DD52EDC00FB1D6B /* SDL_systhread_c.h */, - AA0F8494178D5F1A00823F9D /* SDL_systls.c */, - ); - path = pthread; - sourceTree = ""; - }; - FD99BA1E0DD52EDC00FB1D6B /* timer */ = { - isa = PBXGroup; - children = ( - FD99BA300DD52EDC00FB1D6B /* unix */, - FD99BA2E0DD52EDC00FB1D6B /* SDL_timer.c */, - FD99BA2F0DD52EDC00FB1D6B /* SDL_timer_c.h */, - ); - name = timer; - path = ../../src/timer; - sourceTree = ""; - }; - FD99BA300DD52EDC00FB1D6B /* unix */ = { - isa = PBXGroup; - children = ( - FD99BA310DD52EDC00FB1D6B /* SDL_systimer.c */, - ); - path = unix; - sourceTree = ""; - }; - FDA682420DF2374D00F98A1A /* video */ = { - isa = PBXGroup; - children = ( - FD689F090E26E5D900F90B21 /* uikit */, - FDA685F40DF244C800F98A1A /* dummy */, - FDA683000DF2374E00F98A1A /* SDL_blit.c */, - FDA683010DF2374E00F98A1A /* SDL_blit.h */, - FDA683020DF2374E00F98A1A /* SDL_blit_0.c */, - FDA683030DF2374E00F98A1A /* SDL_blit_1.c */, - FDA683040DF2374E00F98A1A /* SDL_blit_A.c */, - FDA683050DF2374E00F98A1A /* SDL_blit_auto.c */, - FDA683060DF2374E00F98A1A /* SDL_blit_auto.h */, - FDA683070DF2374E00F98A1A /* SDL_blit_copy.c */, - FDA683080DF2374E00F98A1A /* SDL_blit_copy.h */, - FDA683090DF2374E00F98A1A /* SDL_blit_N.c */, - FDA6830A0DF2374E00F98A1A /* SDL_blit_slow.c */, - 0463873A0F0B5B7D0041FD65 /* SDL_blit_slow.h */, - FDA6830B0DF2374E00F98A1A /* SDL_bmp.c */, - 044E5FB711E606EB0076F181 /* SDL_clipboard.c */, - 0463873E0F0B5B7D0041FD65 /* SDL_fillrect.c */, - FDA6830F0DF2374E00F98A1A /* SDL_pixels.c */, - FDA683100DF2374E00F98A1A /* SDL_pixels_c.h */, - FDA683110DF2374E00F98A1A /* SDL_rect.c */, - FDA683150DF2374E00F98A1A /* SDL_RLEaccel.c */, - FDA683160DF2374E00F98A1A /* SDL_RLEaccel_c.h */, - FDA683170DF2374E00F98A1A /* SDL_stretch.c */, - FDA683190DF2374E00F98A1A /* SDL_surface.c */, - FDA6831A0DF2374E00F98A1A /* SDL_sysvideo.h */, - FDA6831B0DF2374E00F98A1A /* SDL_video.c */, - ); - name = video; - path = ../../src/video; - sourceTree = SOURCE_ROOT; - }; - FDA685F40DF244C800F98A1A /* dummy */ = { - isa = PBXGroup; - children = ( - FDA685F50DF244C800F98A1A /* SDL_nullevents.c */, - FDA685F60DF244C800F98A1A /* SDL_nullevents_c.h */, - 04F7808212FB753F00FC43C0 /* SDL_nullframebuffer_c.h */, - 04F7808312FB753F00FC43C0 /* SDL_nullframebuffer.c */, - FDA685F90DF244C800F98A1A /* SDL_nullvideo.c */, - FDA685FA0DF244C800F98A1A /* SDL_nullvideo.h */, - ); - path = dummy; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - FD65265F0DE8FCCB002AD96B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FDA6844E0DF2374E00F98A1A /* SDL_blit.h in Headers */, - FDA684530DF2374E00F98A1A /* SDL_blit_auto.h in Headers */, - FDA684550DF2374E00F98A1A /* SDL_blit_copy.h in Headers */, - FDA6845D0DF2374E00F98A1A /* SDL_pixels_c.h in Headers */, - 56A6703618565E760007D20F /* SDL_dynapi_procs.h in Headers */, - FDA684630DF2374E00F98A1A /* SDL_RLEaccel_c.h in Headers */, - FDA684670DF2374E00F98A1A /* SDL_sysvideo.h in Headers */, - FDA685FC0DF244C800F98A1A /* SDL_nullevents_c.h in Headers */, - FDA686000DF244C800F98A1A /* SDL_nullvideo.h in Headers */, - FD5F9D300E0E08B3008E885B /* SDL_joystick_c.h in Headers */, - FD5F9D310E0E08B3008E885B /* SDL_sysjoystick.h in Headers */, - FD689F040E26E5B600F90B21 /* SDLUIAccelerationDelegate.h in Headers */, - FD689F1C0E26E5D900F90B21 /* SDL_uikitevents.h in Headers */, - FD689F1E0E26E5D900F90B21 /* SDL_uikitopengles.h in Headers */, - FD689F200E26E5D900F90B21 /* SDL_uikitvideo.h in Headers */, - FD689F240E26E5D900F90B21 /* SDL_uikitwindow.h in Headers */, - FD689F260E26E5D900F90B21 /* SDL_uikitopenglview.h in Headers */, - 56A6703818565E760007D20F /* SDL_dynapi.h in Headers */, - FD689FCF0E26E9D400F90B21 /* SDL_uikitappdelegate.h in Headers */, - 56A6703518565E760007D20F /* SDL_dynapi_overrides.h in Headers */, - 047677BD0EA76A31008ABAF1 /* SDL_syshaptic.h in Headers */, - 046387420F0B5B7D0041FD65 /* SDL_blit_slow.h in Headers */, - 006E9888119552DD001DE610 /* SDL_rwopsbundlesupport.h in Headers */, - 0420497011E6F03D007E7EC9 /* SDL_clipboardevents_c.h in Headers */, - 04BA9D6311EF474A00B60E01 /* SDL_gesture_c.h in Headers */, - 04BA9D6511EF474A00B60E01 /* SDL_touch_c.h in Headers */, - 041B2CF212FA0F680087D585 /* SDL_sysrender.h in Headers */, - 04409BA612FA989600FB9AA8 /* mmx.h in Headers */, - 04409BA812FA989600FB9AA8 /* SDL_yuv_sw_c.h in Headers */, - 04F7807712FB751400FC43C0 /* SDL_blendfillrect.h in Headers */, - 04F7807912FB751400FC43C0 /* SDL_blendline.h in Headers */, - 04F7807B12FB751400FC43C0 /* SDL_blendpoint.h in Headers */, - 04F7807C12FB751400FC43C0 /* SDL_draw.h in Headers */, - 04F7807E12FB751400FC43C0 /* SDL_drawline.h in Headers */, - 04F7808012FB751400FC43C0 /* SDL_drawpoint.h in Headers */, - 04F7808412FB753F00FC43C0 /* SDL_nullframebuffer_c.h in Headers */, - 0442EC5012FE1C1E004C9285 /* SDL_render_sw_c.h in Headers */, - 0402A85A12FE70C600CECEE3 /* SDL_shaders_gles2.h in Headers */, - 04BAC09C1300C1290055DE28 /* SDL_assert_c.h in Headers */, - 56EA86FC13E9EC2B002E47EB /* SDL_coreaudio.h in Headers */, - 93CB792313FC5E5200BD3E05 /* SDL_uikitviewcontroller.h in Headers */, - AA628ADC159369E3005138DD /* SDL_rotate.h in Headers */, - AA7558981595D55500BBD41B /* begin_code.h in Headers */, - AA7558991595D55500BBD41B /* close_code.h in Headers */, - AA75589A1595D55500BBD41B /* SDL_assert.h in Headers */, - AA75589B1595D55500BBD41B /* SDL_atomic.h in Headers */, - AA75589C1595D55500BBD41B /* SDL_audio.h in Headers */, - AA75589D1595D55500BBD41B /* SDL_blendmode.h in Headers */, - AA75589E1595D55500BBD41B /* SDL_clipboard.h in Headers */, - AA75589F1595D55500BBD41B /* SDL_config_iphoneos.h in Headers */, - AA7558A01595D55500BBD41B /* SDL_config.h in Headers */, - AA7558A11595D55500BBD41B /* SDL_copying.h in Headers */, - AA7558A21595D55500BBD41B /* SDL_cpuinfo.h in Headers */, - AA7558A31595D55500BBD41B /* SDL_endian.h in Headers */, - AA7558A41595D55500BBD41B /* SDL_error.h in Headers */, - 56A6702E18565E450007D20F /* SDL_internal.h in Headers */, - AA7558A51595D55500BBD41B /* SDL_events.h in Headers */, - AA7558A61595D55500BBD41B /* SDL_gesture.h in Headers */, - AA7558A71595D55500BBD41B /* SDL_haptic.h in Headers */, - AA7558A81595D55500BBD41B /* SDL_hints.h in Headers */, - AA7558AA1595D55500BBD41B /* SDL_joystick.h in Headers */, - AA7558AB1595D55500BBD41B /* SDL_keyboard.h in Headers */, - AA7558AC1595D55500BBD41B /* SDL_keycode.h in Headers */, - AA7558AD1595D55500BBD41B /* SDL_loadso.h in Headers */, - AA7558AE1595D55500BBD41B /* SDL_log.h in Headers */, - AA7558AF1595D55500BBD41B /* SDL_main.h in Headers */, - AA7558B01595D55500BBD41B /* SDL_mouse.h in Headers */, - AA7558B11595D55500BBD41B /* SDL_mutex.h in Headers */, - AA7558B21595D55500BBD41B /* SDL_name.h in Headers */, - AA7558B31595D55500BBD41B /* SDL_opengl.h in Headers */, - AA7558B41595D55500BBD41B /* SDL_opengles.h in Headers */, - AA7558B51595D55500BBD41B /* SDL_opengles2.h in Headers */, - AA7558B61595D55500BBD41B /* SDL_pixels.h in Headers */, - AA7558B71595D55500BBD41B /* SDL_platform.h in Headers */, - AA7558B81595D55500BBD41B /* SDL_power.h in Headers */, - AA7558B91595D55500BBD41B /* SDL_quit.h in Headers */, - AA7558BA1595D55500BBD41B /* SDL_rect.h in Headers */, - AA7558BB1595D55500BBD41B /* SDL_render.h in Headers */, - AA7558BC1595D55500BBD41B /* SDL_revision.h in Headers */, - AA7558BD1595D55500BBD41B /* SDL_rwops.h in Headers */, - AA7558BE1595D55500BBD41B /* SDL_scancode.h in Headers */, - AA7558BF1595D55500BBD41B /* SDL_shape.h in Headers */, - AA7558C01595D55500BBD41B /* SDL_stdinc.h in Headers */, - AA7558C11595D55500BBD41B /* SDL_surface.h in Headers */, - AA7558C21595D55500BBD41B /* SDL_system.h in Headers */, - AA7558C31595D55500BBD41B /* SDL_syswm.h in Headers */, - AA7558C41595D55500BBD41B /* SDL_thread.h in Headers */, - AA7558C51595D55500BBD41B /* SDL_timer.h in Headers */, - AA7558C61595D55500BBD41B /* SDL_touch.h in Headers */, - AA7558C71595D55500BBD41B /* SDL_types.h in Headers */, - AA7558C81595D55500BBD41B /* SDL_version.h in Headers */, - AA7558C91595D55500BBD41B /* SDL_video.h in Headers */, - AA7558CA1595D55500BBD41B /* SDL.h in Headers */, - AA126AD41617C5E7005ABC8F /* SDL_uikitmodes.h in Headers */, - AA704DD6162AA90A0076D1C1 /* SDL_dropevents_c.h in Headers */, - AA9FF9511637C6E5000DF050 /* SDL_messagebox.h in Headers */, - AABCC3941640643D00AB8930 /* SDL_uikitmessagebox.h in Headers */, - AA0AD06516647BD400CE5896 /* SDL_gamecontroller.h in Headers */, - AADA5B8F16CCAB7C00107CF7 /* SDL_bits.h in Headers */, - 56C181DF17C44D5E00406AE3 /* SDL_filesystem.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - FD6526620DE8FCCB002AD96B /* libSDL */ = { - isa = PBXNativeTarget; - buildConfigurationList = FD6526990DE8FD14002AD96B /* Build configuration list for PBXNativeTarget "libSDL" */; - buildPhases = ( - FD65265F0DE8FCCB002AD96B /* Headers */, - FD6526600DE8FCCB002AD96B /* Sources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = libSDL; - productName = iPhoneSDLStaticLib; - productReference = FD6526630DE8FCCB002AD96B /* libSDL2.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - }; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDL" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; - projectDirPath = ""; - projectRoot = ../..; - targets = ( - FD6526620DE8FCCB002AD96B /* libSDL */, - 00B4F48B12F6A69C0084EC00 /* PrepareXcodeProjectTemplate */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00B4F48A12F6A69C0084EC00 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SYMROOT)/$CONFIGURATION-Universal/libSDL.a", - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# clean up the framework, remove headers, extra files\n\ntemp=$BUILD_DIR/$BUILD_STYLE-template\n# Wrong! 1. Can't assume location of Xcode directory (use xcode-select)\n# 2. Project templates should go in Application Support directories anyway.\ntemplate_dir_name=\"SDL iOS Application\"\n# dest=\"$(HOME)/Library/Application Support/Developer/Shared/Xcode/Project Templates/SDL/SDL iOS Application\"\nrsync_flags=\"--exclude *.svn --links -r\"\n\n# mkdir -p $dest\nmkdir -p $temp\nmkdir -p \"$temp/$template_dir_name/SDL/lib/\"\nmkdir -p \"$temp/$template_dir_name/SDL/include\"\n\n# copy template\nrsync $rsync_flags \"../template/$template_dir_name\" $temp/\n\n# copy Universal libSDL.a\nrsync $rsync_flags -r $SYMROOT/$CONFIGURATION-Universal/libSDL.a \"$temp/$template_dir_name/SDL/lib/\"\n\n# copy headers\nrsync $rsync_flags ../../include/ \"$temp/$template_dir_name/SDL/include\"\n\n#install (nah, don't install)\n# cp -fr \"$temp/$template_dir_name\" \"$dest\""; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - FD6526600DE8FCCB002AD96B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD6526810DE8FCDD002AD96B /* SDL_systimer.c in Sources */, - FD6526800DE8FCDD002AD96B /* SDL_timer.c in Sources */, - FD3F4A7B0DEA620800C5B771 /* SDL_string.c in Sources */, - FD6526660DE8FCDD002AD96B /* SDL_dummyaudio.c in Sources */, - FD6526670DE8FCDD002AD96B /* SDL_audio.c in Sources */, - FD6526680DE8FCDD002AD96B /* SDL_audiocvt.c in Sources */, - FD65266A0DE8FCDD002AD96B /* SDL_audiotypecvt.c in Sources */, - FD65266B0DE8FCDD002AD96B /* SDL_mixer.c in Sources */, - FD65266F0DE8FCDD002AD96B /* SDL_wave.c in Sources */, - FD6526700DE8FCDD002AD96B /* SDL_cpuinfo.c in Sources */, - FD6526710DE8FCDD002AD96B /* SDL_events.c in Sources */, - FD6526720DE8FCDD002AD96B /* SDL_keyboard.c in Sources */, - 56A6703718565E760007D20F /* SDL_dynapi.c in Sources */, - FD6526730DE8FCDD002AD96B /* SDL_mouse.c in Sources */, - FD6526740DE8FCDD002AD96B /* SDL_quit.c in Sources */, - FD6526750DE8FCDD002AD96B /* SDL_windowevents.c in Sources */, - FD6526760DE8FCDD002AD96B /* SDL_rwops.c in Sources */, - FD6526780DE8FCDD002AD96B /* SDL_error.c in Sources */, - FD65267A0DE8FCDD002AD96B /* SDL.c in Sources */, - FD65267B0DE8FCDD002AD96B /* SDL_syscond.c in Sources */, - FD65267C0DE8FCDD002AD96B /* SDL_sysmutex.c in Sources */, - FD65267D0DE8FCDD002AD96B /* SDL_syssem.c in Sources */, - FD65267E0DE8FCDD002AD96B /* SDL_systhread.c in Sources */, - FD65267F0DE8FCDD002AD96B /* SDL_thread.c in Sources */, - FD3F4A760DEA620800C5B771 /* SDL_getenv.c in Sources */, - FD3F4A770DEA620800C5B771 /* SDL_iconv.c in Sources */, - FD3F4A780DEA620800C5B771 /* SDL_malloc.c in Sources */, - FD3F4A790DEA620800C5B771 /* SDL_qsort.c in Sources */, - FD3F4A7A0DEA620800C5B771 /* SDL_stdlib.c in Sources */, - FDA6844D0DF2374E00F98A1A /* SDL_blit.c in Sources */, - FDA6844F0DF2374E00F98A1A /* SDL_blit_0.c in Sources */, - FDA684500DF2374E00F98A1A /* SDL_blit_1.c in Sources */, - FDA684510DF2374E00F98A1A /* SDL_blit_A.c in Sources */, - FDA684520DF2374E00F98A1A /* SDL_blit_auto.c in Sources */, - FDA684540DF2374E00F98A1A /* SDL_blit_copy.c in Sources */, - FDA684560DF2374E00F98A1A /* SDL_blit_N.c in Sources */, - FDA684570DF2374E00F98A1A /* SDL_blit_slow.c in Sources */, - FDA684580DF2374E00F98A1A /* SDL_bmp.c in Sources */, - FDA6845C0DF2374E00F98A1A /* SDL_pixels.c in Sources */, - FDA6845E0DF2374E00F98A1A /* SDL_rect.c in Sources */, - FDA684620DF2374E00F98A1A /* SDL_RLEaccel.c in Sources */, - FDA684640DF2374E00F98A1A /* SDL_stretch.c in Sources */, - FDA684660DF2374E00F98A1A /* SDL_surface.c in Sources */, - FDA684680DF2374E00F98A1A /* SDL_video.c in Sources */, - FDA685FB0DF244C800F98A1A /* SDL_nullevents.c in Sources */, - FDA685FF0DF244C800F98A1A /* SDL_nullvideo.c in Sources */, - FD5F9D2F0E0E08B3008E885B /* SDL_joystick.c in Sources */, - FD689F030E26E5B600F90B21 /* SDL_sysjoystick.m in Sources */, - FD689F050E26E5B600F90B21 /* SDLUIAccelerationDelegate.m in Sources */, - FD689F1D0E26E5D900F90B21 /* SDL_uikitevents.m in Sources */, - FD689F1F0E26E5D900F90B21 /* SDL_uikitopengles.m in Sources */, - FD689F210E26E5D900F90B21 /* SDL_uikitvideo.m in Sources */, - FD689F230E26E5D900F90B21 /* SDL_uikitview.m in Sources */, - FD689F250E26E5D900F90B21 /* SDL_uikitwindow.m in Sources */, - FD689F270E26E5D900F90B21 /* SDL_uikitopenglview.m in Sources */, - FD689FCE0E26E9D400F90B21 /* SDL_uikitappdelegate.m in Sources */, - FD8BD8250E27E25900B52CD5 /* SDL_sysloadso.c in Sources */, - 047677BB0EA76A31008ABAF1 /* SDL_syshaptic.c in Sources */, - 047677BC0EA76A31008ABAF1 /* SDL_haptic.c in Sources */, - 047AF1B30EA98D6C00811173 /* SDL_sysloadso.c in Sources */, - 046387460F0B5B7D0041FD65 /* SDL_fillrect.c in Sources */, - 04F2AF561104ABD200D6DDF7 /* SDL_assert.c in Sources */, - 56ED04E1118A8EE200A56AA6 /* SDL_power.c in Sources */, - 56ED04E3118A8EFD00A56AA6 /* SDL_syspower.m in Sources */, - 006E9889119552DD001DE610 /* SDL_rwopsbundlesupport.m in Sources */, - 044E5FB811E606EB0076F181 /* SDL_clipboard.c in Sources */, - 0420497111E6F03D007E7EC9 /* SDL_clipboardevents.c in Sources */, - 04BA9D6411EF474A00B60E01 /* SDL_gesture.c in Sources */, - 04BA9D6611EF474A00B60E01 /* SDL_touch.c in Sources */, - 04FFAB8B12E23B8D00BA343D /* SDL_atomic.c in Sources */, - 04FFAB8C12E23B8D00BA343D /* SDL_spinlock.c in Sources */, - 041B2CF112FA0F680087D585 /* SDL_render.c in Sources */, - 04409BA712FA989600FB9AA8 /* SDL_yuv_mmx.c in Sources */, - 04409BA912FA989600FB9AA8 /* SDL_yuv_sw.c in Sources */, - 04F7807612FB751400FC43C0 /* SDL_blendfillrect.c in Sources */, - 04F7807812FB751400FC43C0 /* SDL_blendline.c in Sources */, - 04F7807A12FB751400FC43C0 /* SDL_blendpoint.c in Sources */, - 04F7807D12FB751400FC43C0 /* SDL_drawline.c in Sources */, - 04F7807F12FB751400FC43C0 /* SDL_drawpoint.c in Sources */, - 04F7808512FB753F00FC43C0 /* SDL_nullframebuffer.c in Sources */, - 0442EC5112FE1C1E004C9285 /* SDL_render_sw.c in Sources */, - 0442EC5312FE1C28004C9285 /* SDL_render_gles.c in Sources */, - 0442EC5512FE1C3F004C9285 /* SDL_hints.c in Sources */, - 0402A85812FE70C600CECEE3 /* SDL_render_gles2.c in Sources */, - 0402A85912FE70C600CECEE3 /* SDL_shaders_gles2.c in Sources */, - 04BAC09D1300C1290055DE28 /* SDL_log.c in Sources */, - 56EA86FB13E9EC2B002E47EB /* SDL_coreaudio.c in Sources */, - 93CB792613FC5F5300BD3E05 /* SDL_uikitviewcontroller.m in Sources */, - AA628ADB159369E3005138DD /* SDL_rotate.c in Sources */, - AA126AD51617C5E7005ABC8F /* SDL_uikitmodes.m in Sources */, - AA704DD7162AA90A0076D1C1 /* SDL_dropevents.c in Sources */, - AABCC3951640643D00AB8930 /* SDL_uikitmessagebox.m in Sources */, - AA0AD06216647BBB00CE5896 /* SDL_gamecontroller.c in Sources */, - AA0F8495178D5F1A00823F9D /* SDL_systls.c in Sources */, - 56C181E217C44D7A00406AE3 /* SDL_sysfilesystem.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 00B4F48C12F6A69C0084EC00 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - PRODUCT_NAME = PrepareXcodeProjectTemplate; - }; - name = Debug; - }; - 00B4F48D12F6A69C0084EC00 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - PRODUCT_NAME = PrepareXcodeProjectTemplate; - ZERO_LINK = NO; - }; - name = Release; - }; - C01FCF4F08A954540054247B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C01FCF5008A954540054247B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_SYMBOLS_PRIVATE_EXTERN = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - FD6526640DE8FCCB002AD96B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = NO; - PRODUCT_NAME = SDL2; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - FD6526650DE8FCCB002AD96B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - COPY_PHASE_STRIP = YES; - PRODUCT_NAME = SDL2; - SKIP_INSTALL = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 00B4F48E12F6A6BA0084EC00 /* Build configuration list for PBXAggregateTarget "PrepareXcodeProjectTemplate" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 00B4F48C12F6A69C0084EC00 /* Debug */, - 00B4F48D12F6A69C0084EC00 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "SDL" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C01FCF4F08A954540054247B /* Debug */, - C01FCF5008A954540054247B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FD6526990DE8FD14002AD96B /* Build configuration list for PBXNativeTarget "libSDL" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FD6526640DE8FCCB002AD96B /* Debug */, - FD6526650DE8FCCB002AD96B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} diff --git a/Engine/lib/sdl/Xcode-iOS/SDLtest/SDL2test.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode-iOS/SDLtest/SDL2test.xcodeproj/project.pbxproj deleted file mode 100644 index 0995735e97..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/SDLtest/SDL2test.xcodeproj/project.pbxproj +++ /dev/null @@ -1,272 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - AA1EE462176059AB0029C7A5 /* SDL_test_common.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE454176059AB0029C7A5 /* SDL_test_common.c */; }; - AA1EE463176059AB0029C7A5 /* SDL_test_compare.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE455176059AB0029C7A5 /* SDL_test_compare.c */; }; - AA1EE464176059AB0029C7A5 /* SDL_test_crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE456176059AB0029C7A5 /* SDL_test_crc32.c */; }; - AA1EE465176059AB0029C7A5 /* SDL_test_font.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE457176059AB0029C7A5 /* SDL_test_font.c */; }; - AA1EE466176059AB0029C7A5 /* SDL_test_fuzzer.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE458176059AB0029C7A5 /* SDL_test_fuzzer.c */; }; - AA1EE467176059AB0029C7A5 /* SDL_test_harness.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE459176059AB0029C7A5 /* SDL_test_harness.c */; }; - AA1EE468176059AB0029C7A5 /* SDL_test_imageBlit.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45A176059AB0029C7A5 /* SDL_test_imageBlit.c */; }; - AA1EE469176059AB0029C7A5 /* SDL_test_imageBlitBlend.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45B176059AB0029C7A5 /* SDL_test_imageBlitBlend.c */; }; - AA1EE46A176059AB0029C7A5 /* SDL_test_imageFace.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45C176059AB0029C7A5 /* SDL_test_imageFace.c */; }; - AA1EE46B176059AB0029C7A5 /* SDL_test_imagePrimitives.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45D176059AB0029C7A5 /* SDL_test_imagePrimitives.c */; }; - AA1EE46C176059AB0029C7A5 /* SDL_test_imagePrimitivesBlend.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45E176059AB0029C7A5 /* SDL_test_imagePrimitivesBlend.c */; }; - AA1EE46D176059AB0029C7A5 /* SDL_test_log.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE45F176059AB0029C7A5 /* SDL_test_log.c */; }; - AA1EE46E176059AB0029C7A5 /* SDL_test_md5.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE460176059AB0029C7A5 /* SDL_test_md5.c */; }; - AA1EE46F176059AB0029C7A5 /* SDL_test_random.c in Sources */ = {isa = PBXBuildFile; fileRef = AA1EE461176059AB0029C7A5 /* SDL_test_random.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - AA1EE4461760589B0029C7A5 /* libSDL2test.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libSDL2test.a; sourceTree = BUILT_PRODUCTS_DIR; }; - AA1EE454176059AB0029C7A5 /* SDL_test_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_common.c; path = ../../src/test/SDL_test_common.c; sourceTree = ""; }; - AA1EE455176059AB0029C7A5 /* SDL_test_compare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_compare.c; path = ../../src/test/SDL_test_compare.c; sourceTree = ""; }; - AA1EE456176059AB0029C7A5 /* SDL_test_crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_crc32.c; path = ../../src/test/SDL_test_crc32.c; sourceTree = ""; }; - AA1EE457176059AB0029C7A5 /* SDL_test_font.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_font.c; path = ../../src/test/SDL_test_font.c; sourceTree = ""; }; - AA1EE458176059AB0029C7A5 /* SDL_test_fuzzer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_fuzzer.c; path = ../../src/test/SDL_test_fuzzer.c; sourceTree = ""; }; - AA1EE459176059AB0029C7A5 /* SDL_test_harness.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_harness.c; path = ../../src/test/SDL_test_harness.c; sourceTree = ""; }; - AA1EE45A176059AB0029C7A5 /* SDL_test_imageBlit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_imageBlit.c; path = ../../src/test/SDL_test_imageBlit.c; sourceTree = ""; }; - AA1EE45B176059AB0029C7A5 /* SDL_test_imageBlitBlend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_imageBlitBlend.c; path = ../../src/test/SDL_test_imageBlitBlend.c; sourceTree = ""; }; - AA1EE45C176059AB0029C7A5 /* SDL_test_imageFace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_imageFace.c; path = ../../src/test/SDL_test_imageFace.c; sourceTree = ""; }; - AA1EE45D176059AB0029C7A5 /* SDL_test_imagePrimitives.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_imagePrimitives.c; path = ../../src/test/SDL_test_imagePrimitives.c; sourceTree = ""; }; - AA1EE45E176059AB0029C7A5 /* SDL_test_imagePrimitivesBlend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_imagePrimitivesBlend.c; path = ../../src/test/SDL_test_imagePrimitivesBlend.c; sourceTree = ""; }; - AA1EE45F176059AB0029C7A5 /* SDL_test_log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_log.c; path = ../../src/test/SDL_test_log.c; sourceTree = ""; }; - AA1EE460176059AB0029C7A5 /* SDL_test_md5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_md5.c; path = ../../src/test/SDL_test_md5.c; sourceTree = ""; }; - AA1EE461176059AB0029C7A5 /* SDL_test_random.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDL_test_random.c; path = ../../src/test/SDL_test_random.c; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - AA1EE4431760589B0029C7A5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - AA1EE43D1760589B0029C7A5 = { - isa = PBXGroup; - children = ( - AA1EE453176059770029C7A5 /* Library Source */, - AA1EE4471760589B0029C7A5 /* Products */, - ); - sourceTree = ""; - }; - AA1EE4471760589B0029C7A5 /* Products */ = { - isa = PBXGroup; - children = ( - AA1EE4461760589B0029C7A5 /* libSDL2test.a */, - ); - name = Products; - sourceTree = ""; - }; - AA1EE453176059770029C7A5 /* Library Source */ = { - isa = PBXGroup; - children = ( - AA1EE454176059AB0029C7A5 /* SDL_test_common.c */, - AA1EE455176059AB0029C7A5 /* SDL_test_compare.c */, - AA1EE456176059AB0029C7A5 /* SDL_test_crc32.c */, - AA1EE457176059AB0029C7A5 /* SDL_test_font.c */, - AA1EE458176059AB0029C7A5 /* SDL_test_fuzzer.c */, - AA1EE459176059AB0029C7A5 /* SDL_test_harness.c */, - AA1EE45A176059AB0029C7A5 /* SDL_test_imageBlit.c */, - AA1EE45B176059AB0029C7A5 /* SDL_test_imageBlitBlend.c */, - AA1EE45C176059AB0029C7A5 /* SDL_test_imageFace.c */, - AA1EE45D176059AB0029C7A5 /* SDL_test_imagePrimitives.c */, - AA1EE45E176059AB0029C7A5 /* SDL_test_imagePrimitivesBlend.c */, - AA1EE45F176059AB0029C7A5 /* SDL_test_log.c */, - AA1EE460176059AB0029C7A5 /* SDL_test_md5.c */, - AA1EE461176059AB0029C7A5 /* SDL_test_random.c */, - ); - name = "Library Source"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - AA1EE4441760589B0029C7A5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - AA1EE4451760589B0029C7A5 /* SDL2test */ = { - isa = PBXNativeTarget; - buildConfigurationList = AA1EE44A1760589B0029C7A5 /* Build configuration list for PBXNativeTarget "SDL2test" */; - buildPhases = ( - AA1EE4421760589B0029C7A5 /* Sources */, - AA1EE4431760589B0029C7A5 /* Frameworks */, - AA1EE4441760589B0029C7A5 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SDL2test; - productName = SDL2test; - productReference = AA1EE4461760589B0029C7A5 /* libSDL2test.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - AA1EE43E1760589B0029C7A5 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0460; - ORGANIZATIONNAME = "Sam Lantinga"; - }; - buildConfigurationList = AA1EE4411760589B0029C7A5 /* Build configuration list for PBXProject "SDL2test" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = AA1EE43D1760589B0029C7A5; - productRefGroup = AA1EE4471760589B0029C7A5 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - AA1EE4451760589B0029C7A5 /* SDL2test */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - AA1EE4421760589B0029C7A5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE462176059AB0029C7A5 /* SDL_test_common.c in Sources */, - AA1EE463176059AB0029C7A5 /* SDL_test_compare.c in Sources */, - AA1EE464176059AB0029C7A5 /* SDL_test_crc32.c in Sources */, - AA1EE465176059AB0029C7A5 /* SDL_test_font.c in Sources */, - AA1EE466176059AB0029C7A5 /* SDL_test_fuzzer.c in Sources */, - AA1EE467176059AB0029C7A5 /* SDL_test_harness.c in Sources */, - AA1EE468176059AB0029C7A5 /* SDL_test_imageBlit.c in Sources */, - AA1EE469176059AB0029C7A5 /* SDL_test_imageBlitBlend.c in Sources */, - AA1EE46A176059AB0029C7A5 /* SDL_test_imageFace.c in Sources */, - AA1EE46B176059AB0029C7A5 /* SDL_test_imagePrimitives.c in Sources */, - AA1EE46C176059AB0029C7A5 /* SDL_test_imagePrimitivesBlend.c in Sources */, - AA1EE46D176059AB0029C7A5 /* SDL_test_log.c in Sources */, - AA1EE46E176059AB0029C7A5 /* SDL_test_md5.c in Sources */, - AA1EE46F176059AB0029C7A5 /* SDL_test_random.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - AA1EE4481760589B0029C7A5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - }; - name = Debug; - }; - AA1EE4491760589B0029C7A5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.8; - SDKROOT = iphoneos; - }; - name = Release; - }; - AA1EE44B1760589B0029C7A5 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - EXECUTABLE_PREFIX = lib; - HEADER_SEARCH_PATHS = ../../include; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - AA1EE44C1760589B0029C7A5 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - EXECUTABLE_PREFIX = lib; - HEADER_SEARCH_PATHS = ../../include; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - AA1EE4411760589B0029C7A5 /* Build configuration list for PBXProject "SDL2test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AA1EE4481760589B0029C7A5 /* Debug */, - AA1EE4491760589B0029C7A5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AA1EE44A1760589B0029C7A5 /* Build configuration list for PBXNativeTarget "SDL2test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AA1EE44B1760589B0029C7A5 /* Debug */, - AA1EE44C1760589B0029C7A5 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = AA1EE43E1760589B0029C7A5 /* Project object */; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Default.png b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Default.png deleted file mode 100644 index f91282875a..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Default.png and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Icon.png b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Icon.png deleted file mode 100644 index 83f4d10a21..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Icon.png and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Info.plist b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Info.plist deleted file mode 100644 index b8089dca2d..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - Icon - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - LSRequiresIPhoneOS - - - diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateIcon.icns b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateIcon.icns deleted file mode 100644 index 4500ce2bbd..0000000000 Binary files a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateIcon.icns and /dev/null differ diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateInfo.plist b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateInfo.plist deleted file mode 100644 index 498e37d4f7..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateInfo.plist +++ /dev/null @@ -1,10 +0,0 @@ - - - - - Description - This project builds an SDL based project for iPhone OS using C or Objective-C. It includes everything you need to get up and running with SDL on iPhone. - CFBundleIconFile - Icon.png - - diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/project.pbxproj deleted file mode 100644 index 3e0eb0c807..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/project.pbxproj +++ /dev/null @@ -1,403 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 45; - objects = { - -/* Begin PBXBuildFile section */ - 0097E2D912F70C4E00724AC5 /* libSDL.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0097E2D512F70C4D00724AC5 /* libSDL.a */; }; - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; - 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28FD14FF0DC6FC520079059D /* OpenGLES.framework */; }; - 28FD15080DC6FC5B0079059D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28FD15070DC6FC5B0079059D /* QuartzCore.framework */; }; - FD779EDE0E26BA1200F39101 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD779EDD0E26BA1200F39101 /* CoreAudio.framework */; }; - FD77A07D0E26BD8C00F39101 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = FD77A07C0E26BD8C00F39101 /* Icon.png */; }; - FD77A07F0E26BDA900F39101 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = FD77A07E0E26BDA900F39101 /* Default.png */; }; - FD77A0850E26BDB800F39101 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD77A0840E26BDB800F39101 /* AudioToolbox.framework */; }; - FD77A09D0E26BDE500F39101 /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = FD77A09C0E26BDE500F39101 /* main.c */; }; - FDB8BFC60E5A0F6A00980157 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDB8BFC50E5A0F6A00980157 /* CoreGraphics.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 0097E29A12F70C4D00724AC5 /* begin_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = begin_code.h; sourceTree = ""; }; - 0097E29B12F70C4D00724AC5 /* close_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = close_code.h; sourceTree = ""; }; - 0097E29C12F70C4D00724AC5 /* doxyfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = doxyfile; sourceTree = ""; }; - 0097E29D12F70C4D00724AC5 /* SDL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; - 0097E29E12F70C4D00724AC5 /* SDL_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_assert.h; sourceTree = ""; }; - 0097E29F12F70C4D00724AC5 /* SDL_atomic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_atomic.h; sourceTree = ""; }; - 0097E2A012F70C4D00724AC5 /* SDL_audio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_audio.h; sourceTree = ""; }; - 0097E2A112F70C4D00724AC5 /* SDL_blendmode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_blendmode.h; sourceTree = ""; }; - 0097E2A212F70C4D00724AC5 /* SDL_clipboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_clipboard.h; sourceTree = ""; }; - 0097E2A312F70C4D00724AC5 /* SDL_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_compat.h; sourceTree = ""; }; - 0097E2A412F70C4D00724AC5 /* SDL_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config.h; sourceTree = ""; }; - 0097E2A512F70C4D00724AC5 /* SDL_config.h.default */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SDL_config.h.default; sourceTree = ""; }; - 0097E2A612F70C4D00724AC5 /* SDL_config.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SDL_config.h.in; sourceTree = ""; }; - 0097E2A712F70C4D00724AC5 /* SDL_config_android.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_android.h; sourceTree = ""; }; - 0097E2A812F70C4D00724AC5 /* SDL_config_iphoneos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_iphoneos.h; sourceTree = ""; }; - 0097E2A912F70C4D00724AC5 /* SDL_config_macosx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_macosx.h; sourceTree = ""; }; - 0097E2AA12F70C4D00724AC5 /* SDL_config_minimal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_minimal.h; sourceTree = ""; }; - 0097E2AC12F70C4D00724AC5 /* SDL_config_pandora.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_pandora.h; sourceTree = ""; }; - 0097E2AD12F70C4D00724AC5 /* SDL_config_windows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_windows.h; sourceTree = ""; }; - 0097E2AE12F70C4D00724AC5 /* SDL_config_wiz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_config_wiz.h; sourceTree = ""; }; - 0097E2AF12F70C4D00724AC5 /* SDL_copying.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_copying.h; sourceTree = ""; }; - 0097E2B012F70C4D00724AC5 /* SDL_cpuinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cpuinfo.h; sourceTree = ""; }; - 0097E2B112F70C4D00724AC5 /* SDL_endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_endian.h; sourceTree = ""; }; - 0097E2B212F70C4D00724AC5 /* SDL_error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_error.h; sourceTree = ""; }; - 0097E2B312F70C4D00724AC5 /* SDL_events.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_events.h; sourceTree = ""; }; - 0097E2B412F70C4D00724AC5 /* SDL_gesture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_gesture.h; sourceTree = ""; }; - 0097E2B512F70C4D00724AC5 /* SDL_haptic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_haptic.h; sourceTree = ""; }; - 0097E2B612F70C4D00724AC5 /* SDL_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_input.h; sourceTree = ""; }; - 0097E2B712F70C4D00724AC5 /* SDL_joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_joystick.h; sourceTree = ""; }; - 0097E2B812F70C4D00724AC5 /* SDL_keyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keyboard.h; sourceTree = ""; }; - 0097E2B912F70C4D00724AC5 /* SDL_keysym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_keysym.h; sourceTree = ""; }; - 0097E2BA12F70C4D00724AC5 /* SDL_loadso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_loadso.h; sourceTree = ""; }; - 0097E2BB12F70C4D00724AC5 /* SDL_main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_main.h; sourceTree = ""; }; - 0097E2BC12F70C4D00724AC5 /* SDL_mouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mouse.h; sourceTree = ""; }; - 0097E2BD12F70C4D00724AC5 /* SDL_mutex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_mutex.h; sourceTree = ""; }; - 0097E2BE12F70C4D00724AC5 /* SDL_name.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_name.h; sourceTree = ""; }; - 0097E2BF12F70C4D00724AC5 /* SDL_opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; - 0097E2C012F70C4D00724AC5 /* SDL_opengles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles.h; sourceTree = ""; }; - 0097E2C112F70C4D00724AC5 /* SDL_pixels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_pixels.h; sourceTree = ""; }; - 0097E2C212F70C4D00724AC5 /* SDL_platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_platform.h; sourceTree = ""; }; - 0097E2C312F70C4D00724AC5 /* SDL_power.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_power.h; sourceTree = ""; }; - 0097E2C412F70C4D00724AC5 /* SDL_quit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_quit.h; sourceTree = ""; }; - 0097E2C512F70C4D00724AC5 /* SDL_rect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rect.h; sourceTree = ""; }; - 0097E2C612F70C4D00724AC5 /* SDL_revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_revision.h; sourceTree = ""; }; - 0097E2C712F70C4D00724AC5 /* SDL_rwops.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_rwops.h; sourceTree = ""; }; - 0097E2C812F70C4D00724AC5 /* SDL_scalemode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_scalemode.h; sourceTree = ""; }; - 0097E2C912F70C4D00724AC5 /* SDL_scancode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_scancode.h; sourceTree = ""; }; - 0097E2CA12F70C4D00724AC5 /* SDL_shape.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_shape.h; sourceTree = ""; }; - 0097E2CB12F70C4D00724AC5 /* SDL_stdinc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_stdinc.h; sourceTree = ""; }; - 0097E2CC12F70C4D00724AC5 /* SDL_surface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_surface.h; sourceTree = ""; }; - 0097E2CD12F70C4D00724AC5 /* SDL_syswm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_syswm.h; sourceTree = ""; }; - 0097E2CE12F70C4D00724AC5 /* SDL_thread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_thread.h; sourceTree = ""; }; - 0097E2CF12F70C4D00724AC5 /* SDL_timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_timer.h; sourceTree = ""; }; - 0097E2D012F70C4D00724AC5 /* SDL_touch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_touch.h; sourceTree = ""; }; - 0097E2D112F70C4D00724AC5 /* SDL_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_types.h; sourceTree = ""; }; - 0097E2D212F70C4D00724AC5 /* SDL_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_version.h; sourceTree = ""; }; - 0097E2D312F70C4D00724AC5 /* SDL_video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_video.h; sourceTree = ""; }; - 0097E2D512F70C4D00724AC5 /* libSDL.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSDL.a; sourceTree = ""; }; - 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 1D6058910D05DD3D006BFB54 /* ___PROJECTNAME___.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "___PROJECTNAME___.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 28FD14FF0DC6FC520079059D /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - 28FD15070DC6FC5B0079059D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FD779EDD0E26BA1200F39101 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - FD77A07C0E26BD8C00F39101 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = ""; }; - FD77A07E0E26BDA900F39101 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; - FD77A0840E26BDB800F39101 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - FD77A09C0E26BDE500F39101 /* main.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; - FDB8BFC50E5A0F6A00980157 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, - 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, - 28FD15000DC6FC520079059D /* OpenGLES.framework in Frameworks */, - 28FD15080DC6FC5B0079059D /* QuartzCore.framework in Frameworks */, - FD779EDE0E26BA1200F39101 /* CoreAudio.framework in Frameworks */, - FD77A0850E26BDB800F39101 /* AudioToolbox.framework in Frameworks */, - FDB8BFC60E5A0F6A00980157 /* CoreGraphics.framework in Frameworks */, - 0097E2D912F70C4E00724AC5 /* libSDL.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0097E29812F70C4D00724AC5 /* SDL */ = { - isa = PBXGroup; - children = ( - 0097E29912F70C4D00724AC5 /* include */, - 0097E2D412F70C4D00724AC5 /* lib */, - ); - path = SDL; - sourceTree = ""; - }; - 0097E29912F70C4D00724AC5 /* include */ = { - isa = PBXGroup; - children = ( - 0097E29A12F70C4D00724AC5 /* begin_code.h */, - 0097E29B12F70C4D00724AC5 /* close_code.h */, - 0097E29C12F70C4D00724AC5 /* doxyfile */, - 0097E29D12F70C4D00724AC5 /* SDL.h */, - 0097E29E12F70C4D00724AC5 /* SDL_assert.h */, - 0097E29F12F70C4D00724AC5 /* SDL_atomic.h */, - 0097E2A012F70C4D00724AC5 /* SDL_audio.h */, - 0097E2A112F70C4D00724AC5 /* SDL_blendmode.h */, - 0097E2A212F70C4D00724AC5 /* SDL_clipboard.h */, - 0097E2A312F70C4D00724AC5 /* SDL_compat.h */, - 0097E2A412F70C4D00724AC5 /* SDL_config.h */, - 0097E2A512F70C4D00724AC5 /* SDL_config.h.default */, - 0097E2A612F70C4D00724AC5 /* SDL_config.h.in */, - 0097E2A712F70C4D00724AC5 /* SDL_config_android.h */, - 0097E2A812F70C4D00724AC5 /* SDL_config_iphoneos.h */, - 0097E2A912F70C4D00724AC5 /* SDL_config_macosx.h */, - 0097E2AA12F70C4D00724AC5 /* SDL_config_minimal.h */, - 0097E2AC12F70C4D00724AC5 /* SDL_config_pandora.h */, - 0097E2AD12F70C4D00724AC5 /* SDL_config_windows.h */, - 0097E2AE12F70C4D00724AC5 /* SDL_config_wiz.h */, - 0097E2AF12F70C4D00724AC5 /* SDL_copying.h */, - 0097E2B012F70C4D00724AC5 /* SDL_cpuinfo.h */, - 0097E2B112F70C4D00724AC5 /* SDL_endian.h */, - 0097E2B212F70C4D00724AC5 /* SDL_error.h */, - 0097E2B312F70C4D00724AC5 /* SDL_events.h */, - 0097E2B412F70C4D00724AC5 /* SDL_gesture.h */, - 0097E2B512F70C4D00724AC5 /* SDL_haptic.h */, - 0097E2B612F70C4D00724AC5 /* SDL_input.h */, - 0097E2B712F70C4D00724AC5 /* SDL_joystick.h */, - 0097E2B812F70C4D00724AC5 /* SDL_keyboard.h */, - 0097E2B912F70C4D00724AC5 /* SDL_keysym.h */, - 0097E2BA12F70C4D00724AC5 /* SDL_loadso.h */, - 0097E2BB12F70C4D00724AC5 /* SDL_main.h */, - 0097E2BC12F70C4D00724AC5 /* SDL_mouse.h */, - 0097E2BD12F70C4D00724AC5 /* SDL_mutex.h */, - 0097E2BE12F70C4D00724AC5 /* SDL_name.h */, - 0097E2BF12F70C4D00724AC5 /* SDL_opengl.h */, - 0097E2C012F70C4D00724AC5 /* SDL_opengles.h */, - 0097E2C112F70C4D00724AC5 /* SDL_pixels.h */, - 0097E2C212F70C4D00724AC5 /* SDL_platform.h */, - 0097E2C312F70C4D00724AC5 /* SDL_power.h */, - 0097E2C412F70C4D00724AC5 /* SDL_quit.h */, - 0097E2C512F70C4D00724AC5 /* SDL_rect.h */, - 0097E2C612F70C4D00724AC5 /* SDL_revision.h */, - 0097E2C712F70C4D00724AC5 /* SDL_rwops.h */, - 0097E2C812F70C4D00724AC5 /* SDL_scalemode.h */, - 0097E2C912F70C4D00724AC5 /* SDL_scancode.h */, - 0097E2CA12F70C4D00724AC5 /* SDL_shape.h */, - 0097E2CB12F70C4D00724AC5 /* SDL_stdinc.h */, - 0097E2CC12F70C4D00724AC5 /* SDL_surface.h */, - 0097E2CD12F70C4D00724AC5 /* SDL_syswm.h */, - 0097E2CE12F70C4D00724AC5 /* SDL_thread.h */, - 0097E2CF12F70C4D00724AC5 /* SDL_timer.h */, - 0097E2D012F70C4D00724AC5 /* SDL_touch.h */, - 0097E2D112F70C4D00724AC5 /* SDL_types.h */, - 0097E2D212F70C4D00724AC5 /* SDL_version.h */, - 0097E2D312F70C4D00724AC5 /* SDL_video.h */, - ); - path = include; - sourceTree = ""; - }; - 0097E2D412F70C4D00724AC5 /* lib */ = { - isa = PBXGroup; - children = ( - 0097E2D512F70C4D00724AC5 /* libSDL.a */, - ); - path = lib; - sourceTree = ""; - }; - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 1D6058910D05DD3D006BFB54 /* ___PROJECTNAME___.app */, - ); - name = Products; - sourceTree = ""; - }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { - isa = PBXGroup; - children = ( - 29B97315FDCFA39411CA2CEA /* Sources */, - 29B97317FDCFA39411CA2CEA /* Resources */, - 0097E29812F70C4D00724AC5 /* SDL */, - 29B97323FDCFA39411CA2CEA /* Frameworks */, - 19C28FACFE9D520D11CA2CBB /* Products */, - ); - name = CustomTemplate; - sourceTree = ""; - }; - 29B97315FDCFA39411CA2CEA /* Sources */ = { - isa = PBXGroup; - children = ( - FD77A09C0E26BDE500F39101 /* main.c */, - ); - name = Sources; - sourceTree = ""; - }; - 29B97317FDCFA39411CA2CEA /* Resources */ = { - isa = PBXGroup; - children = ( - FD77A07E0E26BDA900F39101 /* Default.png */, - FD77A07C0E26BD8C00F39101 /* Icon.png */, - 8D1107310486CEB800E47090 /* Info.plist */, - ); - name = Resources; - sourceTree = ""; - }; - 29B97323FDCFA39411CA2CEA /* Frameworks */ = { - isa = PBXGroup; - children = ( - FDB8BFC50E5A0F6A00980157 /* CoreGraphics.framework */, - FD77A0840E26BDB800F39101 /* AudioToolbox.framework */, - FD779EDD0E26BA1200F39101 /* CoreAudio.framework */, - 28FD15070DC6FC5B0079059D /* QuartzCore.framework */, - 28FD14FF0DC6FC520079059D /* OpenGLES.framework */, - 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, - 1D30AB110D05D00D00671497 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 1D6058900D05DD3D006BFB54 /* ___PROJECTNAME___ */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "___PROJECTNAME___" */; - buildPhases = ( - 1D60588D0D05DD3D006BFB54 /* Resources */, - 1D60588E0D05DD3D006BFB54 /* Sources */, - 1D60588F0D05DD3D006BFB54 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "___PROJECTNAME___"; - productName = "___PROJECTNAME___"; - productReference = 1D6058910D05DD3D006BFB54 /* ___PROJECTNAME___.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "___PROJECTNAME___" */; - compatibilityVersion = "Xcode 3.1"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 1D6058900D05DD3D006BFB54 /* ___PROJECTNAME___ */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 1D60588D0D05DD3D006BFB54 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A07D0E26BD8C00F39101 /* Icon.png in Resources */, - FD77A07F0E26BDA900F39101 /* Default.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 1D60588E0D05DD3D006BFB54 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FD77A09D0E26BDE500F39101 /* main.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 1D6058940D05DD3E006BFB54 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/SDL/lib\"", - ); - PRODUCT_NAME = "___PROJECTNAME___"; - }; - name = Debug; - }; - 1D6058950D05DD3E006BFB54 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = ""; - INFOPLIST_FILE = Info.plist; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/SDL/lib\"", - ); - PRODUCT_NAME = "___PROJECTNAME___"; - }; - name = Release; - }; - C01FCF4F08A954540054247B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ""; - PREBINDING = NO; - SDKROOT = iphoneos; - }; - name = Debug; - }; - C01FCF5008A954540054247B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = c99; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - OTHER_CFLAGS = ""; - PREBINDING = NO; - SDKROOT = iphoneos; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "___PROJECTNAME___" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D6058940D05DD3E006BFB54 /* Debug */, - 1D6058950D05DD3E006BFB54 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "___PROJECTNAME___" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C01FCF4F08A954540054247B /* Debug */, - C01FCF5008A954540054247B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/main.c b/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/main.c deleted file mode 100644 index 8dc00706f3..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/main.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * rectangles.c - * written by Holmes Futrell - * use however you want - */ - -#include "SDL.h" -#include - -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 480 - -int -randomInt(int min, int max) -{ - return min + rand() % (max - min + 1); -} - -void -render(SDL_Renderer *renderer) -{ - - Uint8 r, g, b; - - /* Clear the screen */ - SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); - SDL_RenderClear(renderer); - - /* Come up with a random rectangle */ - SDL_Rect rect; - rect.w = randomInt(64, 128); - rect.h = randomInt(64, 128); - rect.x = randomInt(0, SCREEN_WIDTH); - rect.y = randomInt(0, SCREEN_HEIGHT); - - /* Come up with a random color */ - r = randomInt(50, 255); - g = randomInt(50, 255); - b = randomInt(50, 255); - SDL_SetRenderDrawColor(renderer, r, g, b, 255); - - /* Fill the rectangle in the color */ - SDL_RenderFillRect(renderer, &rect); - - /* update screen */ - SDL_RenderPresent(renderer); -} - -int -main(int argc, char *argv[]) -{ - - SDL_Window *window; - SDL_Renderer *renderer; - int done; - SDL_Event event; - - /* initialize SDL */ - if (SDL_Init(SDL_INIT_VIDEO) < 0) { - printf("Could not initialize SDL\n"); - return 1; - } - - /* seed random number generator */ - srand(time(NULL)); - - /* create window and renderer */ - window = - SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, - SDL_WINDOW_OPENGL); - if (!window) { - printf("Could not initialize Window\n"); - return 1; - } - - renderer = SDL_CreateRenderer(window, -1, 0); - if (!renderer) { - printf("Could not create renderer\n"); - return 1; - } - - /* Enter render loop, waiting for user to quit */ - done = 0; - while (!done) { - while (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) { - done = 1; - } - } - render(renderer); - SDL_Delay(1); - } - - /* shutdown SDL */ - SDL_Quit(); - - return 0; -} diff --git a/Engine/lib/sdl/Xcode-iOS/Test/Info.plist b/Engine/lib/sdl/Xcode-iOS/Test/Info.plist deleted file mode 100644 index c0f1179d35..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Test/Info.plist +++ /dev/null @@ -1,28 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NSMainNibFile - - - diff --git a/Engine/lib/sdl/Xcode-iOS/Test/README b/Engine/lib/sdl/Xcode-iOS/Test/README deleted file mode 100644 index b16ff7c0f9..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Test/README +++ /dev/null @@ -1,22 +0,0 @@ -TestiPhoneOS.xcodeproj contains targets to compile many of the SDL test programs for iPhone OS. Most of these test programs work fine, with the following exceptions: - -testalpha: - Program crashes. Problem appears to effect Mac OS X as well. - -testthread: - SIGTERM kills the process immediately without executing the 'kill' function. The posix standard says this shouldn't happen. Apple seems intent on having iPhone apps exit promptly when the user requests it, so maybe that's why(?) - -testlock: - Locks appear to work, but there doesn't appear to be a simple way to send the process SIGINT. - -testpalette: - "SDL error: blitting boat: Blit combination not supported." Happens on Mac OS X as well. - -testsprite2: - SDL_CreateTextureFromSurface requests an ARGB pixel format, but iPhone's SDL video driver only supports ABGR. - -testwin: - Behaves as it does under Mac OS X ... not sure if that is correctly or not. - -threadwin: - Works if -threaded is not on. Otherwise it doesn't work, but this is true under Mac OS X as well. diff --git a/Engine/lib/sdl/Xcode-iOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode-iOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj deleted file mode 100644 index 0b35c22cfd..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2267 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 046CEF7713254F23007AD51D /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - 046CEF7B13254F23007AD51D /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - 046CEF7C13254F23007AD51D /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - 046CEF7D13254F23007AD51D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - 046CEF7E13254F23007AD51D /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - 046CEF7F13254F23007AD51D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - 046CEF8013254F23007AD51D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - 046CEF8113254F23007AD51D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - 046CEF8213254F23007AD51D /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - 046CEF8A13254F63007AD51D /* testgesture.c in Sources */ = {isa = PBXBuildFile; fileRef = 046CEF8913254F63007AD51D /* testgesture.c */; }; - 047A63E213285C3200CD7973 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - 047A63E313285C3200CD7973 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - 047A63E413285C3200CD7973 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - 047A63E513285C3200CD7973 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - 047A63E613285C3200CD7973 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - 047A63E713285C3200CD7973 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - 047A63E813285C3200CD7973 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - 047A63E913285C3200CD7973 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - 047A63F113285CD100CD7973 /* checkkeys.c in Sources */ = {isa = PBXBuildFile; fileRef = 047A63F013285CD100CD7973 /* checkkeys.c */; }; - 56ED04FE118A8FE400A56AA6 /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - 56ED0502118A8FE400A56AA6 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - 56ED0503118A8FE400A56AA6 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - 56ED0504118A8FE400A56AA6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - 56ED0505118A8FE400A56AA6 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - 56ED0506118A8FE400A56AA6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - 56ED0507118A8FE400A56AA6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - 56ED0508118A8FE400A56AA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - 56ED0509118A8FE400A56AA6 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - 56ED0511118A904200A56AA6 /* testpower.c in Sources */ = {isa = PBXBuildFile; fileRef = 56ED0510118A904200A56AA6 /* testpower.c */; }; - AA1EE470176059D00029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47117605A7F0029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47417605B5C0029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47517605B930029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47617605B9E0029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47717605BAB0029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AA1EE47817605BF60029C7A5 /* libSDL2test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AA1EE452176059230029C7A5 /* libSDL2test.a */; }; - AAE7DEDC14CBB1E100DF1A0E /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - AAE7DEE114CBB1E100DF1A0E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - AAE7DEE214CBB1E100DF1A0E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - AAE7DEE314CBB1E100DF1A0E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - AAE7DEE414CBB1E100DF1A0E /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - AAE7DEE514CBB1E100DF1A0E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - AAE7DEE614CBB1E100DF1A0E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - AAE7DEE714CBB1E100DF1A0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - AAE7DEE814CBB1E100DF1A0E /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - AAE7DF4614CBB43900DF1A0E /* testscale.c in Sources */ = {isa = PBXBuildFile; fileRef = AAE7DF4514CBB43900DF1A0E /* testscale.c */; }; - AAE7DF4714CBB45000DF1A0E /* sample.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AADE0E2D33C100EA573E /* sample.bmp */; }; - AAE7DFA014CBB54E00DF1A0E /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - AAE7DFA114CBB54E00DF1A0E /* sample.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AADE0E2D33C100EA573E /* sample.bmp */; }; - AAE7DFA614CBB54E00DF1A0E /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - AAE7DFA714CBB54E00DF1A0E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - AAE7DFA814CBB54E00DF1A0E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - AAE7DFA914CBB54E00DF1A0E /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - AAE7DFAA14CBB54E00DF1A0E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - AAE7DFAB14CBB54E00DF1A0E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - AAE7DFAC14CBB54E00DF1A0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - AAE7DFAD14CBB54E00DF1A0E /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - AAE7DFB514CBB5F700DF1A0E /* testrendertarget.c in Sources */ = {isa = PBXBuildFile; fileRef = AAE7DFB414CBB5F700DF1A0E /* testrendertarget.c */; }; - FDA8A79C0E2D0F9300EA573E /* testwm2.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A75F0E2D0F1600EA573E /* testwm2.c */; }; - FDA8A89F0E2D111A00EA573E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDA8A8A00E2D111A00EA573E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDA8A8A10E2D111A00EA573E /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDA8A8A20E2D111A00EA573E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDA8A8A30E2D111A00EA573E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDA8A8A40E2D111A00EA573E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDA8A8A50E2D111A00EA573E /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDA8AAB10E2D330F00EA573E /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDA8AAB20E2D330F00EA573E /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDA8AAB30E2D330F00EA573E /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDA8AAB40E2D330F00EA573E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDA8AAB50E2D330F00EA573E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDA8AAB60E2D330F00EA573E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDA8AAB70E2D330F00EA573E /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDA8AABE0E2D335C00EA573E /* loopwave.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A78B0E2D0F3D00EA573E /* loopwave.c */; }; - FDA8AAE30E2D33C600EA573E /* sample.wav in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAE20E2D33C600EA573E /* sample.wav */; }; - FDAAC3C30E2D47E6001DB1D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDAAC3C40E2D47E6001DB1D8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDAAC3C50E2D47E6001DB1D8 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDAAC3C60E2D47E6001DB1D8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDAAC3C70E2D47E6001DB1D8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDAAC3C80E2D47E6001DB1D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDAAC3C90E2D47E6001DB1D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDAAC3D30E2D4800001DB1D8 /* testaudioinfo.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7410E2D0F1600EA573E /* testaudioinfo.c */; }; - FDAAC5910E2D5429001DB1D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDAAC5920E2D5429001DB1D8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDAAC5930E2D5429001DB1D8 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDAAC5940E2D5429001DB1D8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDAAC5950E2D5429001DB1D8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDAAC5960E2D5429001DB1D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDAAC5970E2D5429001DB1D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDAAC59F0E2D54B8001DB1D8 /* testerror.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7470E2D0F1600EA573E /* testerror.c */; }; - FDAAC5BF0E2D55B5001DB1D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDAAC5C00E2D55B5001DB1D8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDAAC5C10E2D55B5001DB1D8 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDAAC5C20E2D55B5001DB1D8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDAAC5C30E2D55B5001DB1D8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDAAC5C40E2D55B5001DB1D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDAAC5C50E2D55B5001DB1D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDAAC5CC0E2D55CA001DB1D8 /* testfile.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7480E2D0F1600EA573E /* testfile.c */; }; - FDAAC61C0E2D5914001DB1D8 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDAAC61D0E2D5914001DB1D8 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDAAC61E0E2D5914001DB1D8 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDAAC61F0E2D5914001DB1D8 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDAAC6200E2D5914001DB1D8 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDAAC6210E2D5914001DB1D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDAAC6220E2D5914001DB1D8 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDAAC62A0E2D5960001DB1D8 /* testgles.c in Sources */ = {isa = PBXBuildFile; fileRef = FDAAC6290E2D5960001DB1D8 /* testgles.c */; }; - FDAAC6390E2D59BE001DB1D8 /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - FDBDE57C0E313445006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5810E313465006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5850E313495006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE58C0E3134F3006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE59B0E31356A006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE59F0E31358D006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5A90E3135C0006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5AE0E3135E6006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5B60E3135FE006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5BC0E31364D006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5C20E313663006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5C60E3136F1006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5C80E313702006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5CA0E313712006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5CC0E31372B006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5CE0E31373E006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDBDE5D40E313789006BAC0B /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDC42FF40F0D866D009C87E1 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FD1B48B80E3131CA007AB34E /* libSDL2.a */; }; - FDC42FF60F0D866D009C87E1 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDC42FF70F0D866D009C87E1 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDC42FF80F0D866D009C87E1 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDC42FF90F0D866D009C87E1 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDC42FFA0F0D866D009C87E1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDC42FFB0F0D866D009C87E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDC42FFC0F0D866D009C87E1 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDC4300A0F0D86BF009C87E1 /* testdraw2.c in Sources */ = {isa = PBXBuildFile; fileRef = FDC430090F0D86BF009C87E1 /* testdraw2.c */; }; - FDD2C1000E2E4F4B00B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C1010E2E4F4B00B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C1020E2E4F4B00B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C1030E2E4F4B00B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C1040E2E4F4B00B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C1050E2E4F4B00B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C1060E2E4F4B00B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C10D0E2E4F6900B7A85F /* testthread.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A74C0E2D0F1600EA573E /* testthread.c */; }; - FDD2C1770E2E52C000B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C1780E2E52C000B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C1790E2E52C000B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C17A0E2E52C000B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C17B0E2E52C000B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C17C0E2E52C000B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C17D0E2E52C000B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C1840E2E52D900B7A85F /* testiconv.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A74D0E2D0F1600EA573E /* testiconv.c */; }; - FDD2C18B0E2E52FE00B7A85F /* utf8.txt in Resources */ = {isa = PBXBuildFile; fileRef = FDD2C18A0E2E52FE00B7A85F /* utf8.txt */; }; - FDD2C19B0E2E534F00B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C19C0E2E534F00B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C19D0E2E534F00B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C19E0E2E534F00B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C19F0E2E534F00B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C1A00E2E534F00B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C1A10E2E534F00B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C1A80E2E536400B7A85F /* testjoystick.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A74E0E2D0F1600EA573E /* testjoystick.c */; }; - FDD2C4540E2E773800B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C4550E2E773800B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C4560E2E773800B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C4570E2E773800B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C4580E2E773800B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C4590E2E773800B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C45A0E2E773800B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C4610E2E777500B7A85F /* testkeys.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A74F0E2D0F1600EA573E /* testkeys.c */; }; - FDD2C4720E2E77D700B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C4730E2E77D700B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C4740E2E77D700B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C4750E2E77D700B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C4760E2E77D700B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C4770E2E77D700B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C4780E2E77D700B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C47F0E2E77E300B7A85F /* testlock.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7510E2D0F1600EA573E /* testlock.c */; }; - FDD2C5010E2E7F4800B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C5020E2E7F4800B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C5030E2E7F4800B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C5040E2E7F4800B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C5050E2E7F4800B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C5060E2E7F4800B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C5070E2E7F4800B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C50E0E2E7F5800B7A85F /* testplatform.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7560E2D0F1600EA573E /* testplatform.c */; }; - FDD2C51F0E2E807600B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C5200E2E807600B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C5210E2E807600B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C5220E2E807600B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C5230E2E807600B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C5240E2E807600B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C5250E2E807600B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C52C0E2E808700B7A85F /* testsem.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7570E2D0F1600EA573E /* testsem.c */; }; - FDD2C5440E2E80E400B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C5450E2E80E400B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C5460E2E80E400B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C5470E2E80E400B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C5480E2E80E400B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C5490E2E80E400B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C54A0E2E80E400B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C5510E2E80F400B7A85F /* testsprite2.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7590E2D0F1600EA573E /* testsprite2.c */; }; - FDD2C5520E2E812C00B7A85F /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - FDD2C5760E2E8C7400B7A85F /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - FDD2C57D0E2E8C7400B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C57E0E2E8C7400B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C57F0E2E8C7400B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C5800E2E8C7400B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C5810E2E8C7400B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C5820E2E8C7400B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C5830E2E8C7400B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C58A0E2E8CB500B7A85F /* testtimer.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A75A0E2D0F1600EA573E /* testtimer.c */; }; - FDD2C5B50E2E8CFC00B7A85F /* icon.bmp in Resources */ = {isa = PBXBuildFile; fileRef = FDA8AAD90E2D33B000EA573E /* icon.bmp */; }; - FDD2C5BB0E2E8CFC00B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C5BC0E2E8CFC00B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C5BD0E2E8CFC00B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C5BE0E2E8CFC00B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C5BF0E2E8CFC00B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C5C00E2E8CFC00B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C5C10E2E8CFC00B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C5C80E2E8D1200B7A85F /* testver.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A75B0E2D0F1600EA573E /* testver.c */; }; - FDD2C6EA0E2E959E00B7A85F /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */; }; - FDD2C6EB0E2E959E00B7A85F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A8990E2D111A00EA573E /* QuartzCore.framework */; }; - FDD2C6EC0E2E959E00B7A85F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */; }; - FDD2C6ED0E2E959E00B7A85F /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */; }; - FDD2C6EE0E2E959E00B7A85F /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89C0E2D111A00EA573E /* UIKit.framework */; }; - FDD2C6EF0E2E959E00B7A85F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89D0E2D111A00EA573E /* Foundation.framework */; }; - FDD2C6F00E2E959E00B7A85F /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */; }; - FDD2C6F70E2E95B100B7A85F /* torturethread.c in Sources */ = {isa = PBXBuildFile; fileRef = FDA8A7610E2D0F1600EA573E /* torturethread.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 0466EE6F11E565E4000198A4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48AC0E3131CA007AB34E /* SDL.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 006E982211955059001DE610; - remoteInfo = testsdl; - }; - AA1EE451176059230029C7A5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = AA1EE44D176059220029C7A5 /* SDL2test.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = AA1EE4461760589B0029C7A5; - remoteInfo = SDL2test; - }; - FD1B48B70E3131CA007AB34E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = FD1B48AC0E3131CA007AB34E /* SDL.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = FD6526630DE8FCCB002AD96B; - remoteInfo = StaticLib; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 046CEF8613254F23007AD51D /* testgesture.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testgesture.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 046CEF8913254F63007AD51D /* testgesture.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testgesture.c; path = ../../test/testgesture.c; sourceTree = SOURCE_ROOT; }; - 047A63ED13285C3200CD7973 /* checkkeys.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = checkkeys.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 047A63F013285CD100CD7973 /* checkkeys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = checkkeys.c; path = ../../test/checkkeys.c; sourceTree = SOURCE_ROOT; }; - 1D6058910D05DD3D006BFB54 /* testwm2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testwm2.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 56ED050D118A8FE400A56AA6 /* testpower.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testpower.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 56ED0510118A904200A56AA6 /* testpower.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testpower.c; path = ../../test/testpower.c; sourceTree = SOURCE_ROOT; }; - AA1EE44D176059220029C7A5 /* SDL2test.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL2test.xcodeproj; path = ../SDLtest/SDL2test.xcodeproj; sourceTree = ""; }; - AAE7DEEC14CBB1E100DF1A0E /* testscale.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testscale.app; sourceTree = BUILT_PRODUCTS_DIR; }; - AAE7DF4514CBB43900DF1A0E /* testscale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testscale.c; path = ../../test/testscale.c; sourceTree = ""; }; - AAE7DFB114CBB54E00DF1A0E /* testrendertarget.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testrendertarget.app; sourceTree = BUILT_PRODUCTS_DIR; }; - AAE7DFB414CBB5F700DF1A0E /* testrendertarget.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testrendertarget.c; path = ../../test/testrendertarget.c; sourceTree = ""; }; - FD1B48AC0E3131CA007AB34E /* SDL.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = SDL.xcodeproj; path = ../SDL/SDL.xcodeproj; sourceTree = SOURCE_ROOT; }; - FDA8A7410E2D0F1600EA573E /* testaudioinfo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testaudioinfo.c; path = ../../test/testaudioinfo.c; sourceTree = SOURCE_ROOT; }; - FDA8A7470E2D0F1600EA573E /* testerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testerror.c; path = ../../test/testerror.c; sourceTree = SOURCE_ROOT; }; - FDA8A7480E2D0F1600EA573E /* testfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testfile.c; path = ../../test/testfile.c; sourceTree = SOURCE_ROOT; }; - FDA8A74C0E2D0F1600EA573E /* testthread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testthread.c; path = ../../test/testthread.c; sourceTree = SOURCE_ROOT; }; - FDA8A74D0E2D0F1600EA573E /* testiconv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testiconv.c; path = ../../test/testiconv.c; sourceTree = SOURCE_ROOT; }; - FDA8A74E0E2D0F1600EA573E /* testjoystick.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testjoystick.c; path = ../../test/testjoystick.c; sourceTree = SOURCE_ROOT; }; - FDA8A74F0E2D0F1600EA573E /* testkeys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testkeys.c; path = ../../test/testkeys.c; sourceTree = SOURCE_ROOT; }; - FDA8A7510E2D0F1600EA573E /* testlock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testlock.c; path = ../../test/testlock.c; sourceTree = SOURCE_ROOT; }; - FDA8A7540E2D0F1600EA573E /* testoverlay2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testoverlay2.c; path = ../../test/testoverlay2.c; sourceTree = SOURCE_ROOT; }; - FDA8A7560E2D0F1600EA573E /* testplatform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testplatform.c; path = ../../test/testplatform.c; sourceTree = SOURCE_ROOT; }; - FDA8A7570E2D0F1600EA573E /* testsem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testsem.c; path = ../../test/testsem.c; sourceTree = SOURCE_ROOT; }; - FDA8A7590E2D0F1600EA573E /* testsprite2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testsprite2.c; path = ../../test/testsprite2.c; sourceTree = SOURCE_ROOT; }; - FDA8A75A0E2D0F1600EA573E /* testtimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testtimer.c; path = ../../test/testtimer.c; sourceTree = SOURCE_ROOT; }; - FDA8A75B0E2D0F1600EA573E /* testver.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testver.c; path = ../../test/testver.c; sourceTree = SOURCE_ROOT; }; - FDA8A75F0E2D0F1600EA573E /* testwm2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testwm2.c; path = ../../test/testwm2.c; sourceTree = SOURCE_ROOT; }; - FDA8A7610E2D0F1600EA573E /* torturethread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = torturethread.c; path = ../../test/torturethread.c; sourceTree = SOURCE_ROOT; }; - FDA8A78B0E2D0F3D00EA573E /* loopwave.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = loopwave.c; path = ../../test/loopwave.c; sourceTree = SOURCE_ROOT; }; - FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - FDA8A8990E2D111A00EA573E /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - FDA8A89C0E2D111A00EA573E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - FDA8A89D0E2D111A00EA573E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - FDA8AABB0E2D330F00EA573E /* loopwav.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = loopwav.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDA8AAD90E2D33B000EA573E /* icon.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = icon.bmp; path = ../../test/icon.bmp; sourceTree = SOURCE_ROOT; }; - FDA8AADA0E2D33BA00EA573E /* moose.dat */ = {isa = PBXFileReference; lastKnownFileType = file; name = moose.dat; path = ../../test/moose.dat; sourceTree = SOURCE_ROOT; }; - FDA8AADB0E2D33BA00EA573E /* picture.xbm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = picture.xbm; path = ../../test/picture.xbm; sourceTree = SOURCE_ROOT; }; - FDA8AADE0E2D33C100EA573E /* sample.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = sample.bmp; path = ../../test/sample.bmp; sourceTree = SOURCE_ROOT; }; - FDA8AAE20E2D33C600EA573E /* sample.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = sample.wav; path = ../../test/sample.wav; sourceTree = SOURCE_ROOT; }; - FDAAC3CD0E2D47E6001DB1D8 /* testaudioinfo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testaudioinfo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDAAC59B0E2D5429001DB1D8 /* testerror.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testerror.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDAAC5C90E2D55B5001DB1D8 /* testfile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testfile.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDAAC6260E2D5914001DB1D8 /* testgles.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testgles.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDAAC6290E2D5960001DB1D8 /* testgles.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testgles.c; path = ../../test/testgles.c; sourceTree = SOURCE_ROOT; }; - FDC430000F0D866D009C87E1 /* torturethread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = torturethread.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDC430090F0D86BF009C87E1 /* testdraw2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testdraw2.c; path = ../../test/testdraw2.c; sourceTree = SOURCE_ROOT; }; - FDD2C10A0E2E4F4B00B7A85F /* testthread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testthread.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C1810E2E52C000B7A85F /* testiconv.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testiconv.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C18A0E2E52FE00B7A85F /* utf8.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = utf8.txt; path = ../../test/utf8.txt; sourceTree = SOURCE_ROOT; }; - FDD2C1A50E2E534F00B7A85F /* testjoystick.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testjoystick.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C45E0E2E773800B7A85F /* testkeys.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testkeys.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C47C0E2E77D700B7A85F /* testlock.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testlock.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C50B0E2E7F4800B7A85F /* testplatform.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testplatform.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C5290E2E807600B7A85F /* testsem.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testsem.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C54E0E2E80E400B7A85F /* testsprite2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testsprite2.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C5870E2E8C7400B7A85F /* testtimer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testtimer.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C5C50E2E8CFC00B7A85F /* testver.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testver.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FDD2C6F40E2E959E00B7A85F /* torturethread.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = torturethread.app; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 046CEF7A13254F23007AD51D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 046CEF7B13254F23007AD51D /* libSDL2.a in Frameworks */, - 046CEF7C13254F23007AD51D /* AudioToolbox.framework in Frameworks */, - 046CEF7D13254F23007AD51D /* QuartzCore.framework in Frameworks */, - 046CEF7E13254F23007AD51D /* OpenGLES.framework in Frameworks */, - 046CEF7F13254F23007AD51D /* CoreGraphics.framework in Frameworks */, - 046CEF8013254F23007AD51D /* UIKit.framework in Frameworks */, - 046CEF8113254F23007AD51D /* Foundation.framework in Frameworks */, - 046CEF8213254F23007AD51D /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 047A63E113285C3200CD7973 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE470176059D00029C7A5 /* libSDL2test.a in Frameworks */, - 047A63E213285C3200CD7973 /* libSDL2.a in Frameworks */, - 047A63E313285C3200CD7973 /* AudioToolbox.framework in Frameworks */, - 047A63E413285C3200CD7973 /* QuartzCore.framework in Frameworks */, - 047A63E513285C3200CD7973 /* OpenGLES.framework in Frameworks */, - 047A63E613285C3200CD7973 /* CoreGraphics.framework in Frameworks */, - 047A63E713285C3200CD7973 /* UIKit.framework in Frameworks */, - 047A63E813285C3200CD7973 /* Foundation.framework in Frameworks */, - 047A63E913285C3200CD7973 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47817605BF60029C7A5 /* libSDL2test.a in Frameworks */, - FDBDE5810E313465006BAC0B /* libSDL2.a in Frameworks */, - FDA8A89F0E2D111A00EA573E /* AudioToolbox.framework in Frameworks */, - FDA8A8A00E2D111A00EA573E /* QuartzCore.framework in Frameworks */, - FDA8A8A10E2D111A00EA573E /* OpenGLES.framework in Frameworks */, - FDA8A8A20E2D111A00EA573E /* CoreGraphics.framework in Frameworks */, - FDA8A8A30E2D111A00EA573E /* UIKit.framework in Frameworks */, - FDA8A8A40E2D111A00EA573E /* Foundation.framework in Frameworks */, - FDA8A8A50E2D111A00EA573E /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 56ED0501118A8FE400A56AA6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 56ED0502118A8FE400A56AA6 /* libSDL2.a in Frameworks */, - 56ED0503118A8FE400A56AA6 /* AudioToolbox.framework in Frameworks */, - 56ED0504118A8FE400A56AA6 /* QuartzCore.framework in Frameworks */, - 56ED0505118A8FE400A56AA6 /* OpenGLES.framework in Frameworks */, - 56ED0506118A8FE400A56AA6 /* CoreGraphics.framework in Frameworks */, - 56ED0507118A8FE400A56AA6 /* UIKit.framework in Frameworks */, - 56ED0508118A8FE400A56AA6 /* Foundation.framework in Frameworks */, - 56ED0509118A8FE400A56AA6 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DEE014CBB1E100DF1A0E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47617605B9E0029C7A5 /* libSDL2test.a in Frameworks */, - AAE7DEE114CBB1E100DF1A0E /* libSDL2.a in Frameworks */, - AAE7DEE214CBB1E100DF1A0E /* AudioToolbox.framework in Frameworks */, - AAE7DEE314CBB1E100DF1A0E /* QuartzCore.framework in Frameworks */, - AAE7DEE414CBB1E100DF1A0E /* OpenGLES.framework in Frameworks */, - AAE7DEE514CBB1E100DF1A0E /* CoreGraphics.framework in Frameworks */, - AAE7DEE614CBB1E100DF1A0E /* UIKit.framework in Frameworks */, - AAE7DEE714CBB1E100DF1A0E /* Foundation.framework in Frameworks */, - AAE7DEE814CBB1E100DF1A0E /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DFA514CBB54E00DF1A0E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47517605B930029C7A5 /* libSDL2test.a in Frameworks */, - AAE7DFA614CBB54E00DF1A0E /* libSDL2.a in Frameworks */, - AAE7DFA714CBB54E00DF1A0E /* AudioToolbox.framework in Frameworks */, - AAE7DFA814CBB54E00DF1A0E /* QuartzCore.framework in Frameworks */, - AAE7DFA914CBB54E00DF1A0E /* OpenGLES.framework in Frameworks */, - AAE7DFAA14CBB54E00DF1A0E /* CoreGraphics.framework in Frameworks */, - AAE7DFAB14CBB54E00DF1A0E /* UIKit.framework in Frameworks */, - AAE7DFAC14CBB54E00DF1A0E /* Foundation.framework in Frameworks */, - AAE7DFAD14CBB54E00DF1A0E /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDA8AAAE0E2D330F00EA573E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5850E313495006BAC0B /* libSDL2.a in Frameworks */, - FDA8AAB10E2D330F00EA573E /* AudioToolbox.framework in Frameworks */, - FDA8AAB20E2D330F00EA573E /* QuartzCore.framework in Frameworks */, - FDA8AAB30E2D330F00EA573E /* OpenGLES.framework in Frameworks */, - FDA8AAB40E2D330F00EA573E /* CoreGraphics.framework in Frameworks */, - FDA8AAB50E2D330F00EA573E /* UIKit.framework in Frameworks */, - FDA8AAB60E2D330F00EA573E /* Foundation.framework in Frameworks */, - FDA8AAB70E2D330F00EA573E /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC3C00E2D47E6001DB1D8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE58C0E3134F3006BAC0B /* libSDL2.a in Frameworks */, - FDAAC3C30E2D47E6001DB1D8 /* AudioToolbox.framework in Frameworks */, - FDAAC3C40E2D47E6001DB1D8 /* QuartzCore.framework in Frameworks */, - FDAAC3C50E2D47E6001DB1D8 /* OpenGLES.framework in Frameworks */, - FDAAC3C60E2D47E6001DB1D8 /* CoreGraphics.framework in Frameworks */, - FDAAC3C70E2D47E6001DB1D8 /* UIKit.framework in Frameworks */, - FDAAC3C80E2D47E6001DB1D8 /* Foundation.framework in Frameworks */, - FDAAC3C90E2D47E6001DB1D8 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC58E0E2D5429001DB1D8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE59B0E31356A006BAC0B /* libSDL2.a in Frameworks */, - FDAAC5910E2D5429001DB1D8 /* AudioToolbox.framework in Frameworks */, - FDAAC5920E2D5429001DB1D8 /* QuartzCore.framework in Frameworks */, - FDAAC5930E2D5429001DB1D8 /* OpenGLES.framework in Frameworks */, - FDAAC5940E2D5429001DB1D8 /* CoreGraphics.framework in Frameworks */, - FDAAC5950E2D5429001DB1D8 /* UIKit.framework in Frameworks */, - FDAAC5960E2D5429001DB1D8 /* Foundation.framework in Frameworks */, - FDAAC5970E2D5429001DB1D8 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC5BC0E2D55B5001DB1D8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE59F0E31358D006BAC0B /* libSDL2.a in Frameworks */, - FDAAC5BF0E2D55B5001DB1D8 /* AudioToolbox.framework in Frameworks */, - FDAAC5C00E2D55B5001DB1D8 /* QuartzCore.framework in Frameworks */, - FDAAC5C10E2D55B5001DB1D8 /* OpenGLES.framework in Frameworks */, - FDAAC5C20E2D55B5001DB1D8 /* CoreGraphics.framework in Frameworks */, - FDAAC5C30E2D55B5001DB1D8 /* UIKit.framework in Frameworks */, - FDAAC5C40E2D55B5001DB1D8 /* Foundation.framework in Frameworks */, - FDAAC5C50E2D55B5001DB1D8 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC6190E2D5914001DB1D8 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47417605B5C0029C7A5 /* libSDL2test.a in Frameworks */, - FDBDE57C0E313445006BAC0B /* libSDL2.a in Frameworks */, - FDAAC61C0E2D5914001DB1D8 /* AudioToolbox.framework in Frameworks */, - FDAAC61D0E2D5914001DB1D8 /* QuartzCore.framework in Frameworks */, - FDAAC61E0E2D5914001DB1D8 /* OpenGLES.framework in Frameworks */, - FDAAC61F0E2D5914001DB1D8 /* CoreGraphics.framework in Frameworks */, - FDAAC6200E2D5914001DB1D8 /* UIKit.framework in Frameworks */, - FDAAC6210E2D5914001DB1D8 /* Foundation.framework in Frameworks */, - FDAAC6220E2D5914001DB1D8 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC42FF30F0D866D009C87E1 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47117605A7F0029C7A5 /* libSDL2test.a in Frameworks */, - FDC42FF40F0D866D009C87E1 /* libSDL2.a in Frameworks */, - FDC42FF60F0D866D009C87E1 /* AudioToolbox.framework in Frameworks */, - FDC42FF70F0D866D009C87E1 /* QuartzCore.framework in Frameworks */, - FDC42FF80F0D866D009C87E1 /* OpenGLES.framework in Frameworks */, - FDC42FF90F0D866D009C87E1 /* CoreGraphics.framework in Frameworks */, - FDC42FFA0F0D866D009C87E1 /* UIKit.framework in Frameworks */, - FDC42FFB0F0D866D009C87E1 /* Foundation.framework in Frameworks */, - FDC42FFC0F0D866D009C87E1 /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C0FD0E2E4F4B00B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5A90E3135C0006BAC0B /* libSDL2.a in Frameworks */, - FDD2C1000E2E4F4B00B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C1010E2E4F4B00B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C1020E2E4F4B00B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C1030E2E4F4B00B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C1040E2E4F4B00B7A85F /* UIKit.framework in Frameworks */, - FDD2C1050E2E4F4B00B7A85F /* Foundation.framework in Frameworks */, - FDD2C1060E2E4F4B00B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1740E2E52C000B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5AE0E3135E6006BAC0B /* libSDL2.a in Frameworks */, - FDD2C1770E2E52C000B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C1780E2E52C000B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C1790E2E52C000B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C17A0E2E52C000B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C17B0E2E52C000B7A85F /* UIKit.framework in Frameworks */, - FDD2C17C0E2E52C000B7A85F /* Foundation.framework in Frameworks */, - FDD2C17D0E2E52C000B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1980E2E534F00B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5B60E3135FE006BAC0B /* libSDL2.a in Frameworks */, - FDD2C19B0E2E534F00B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C19C0E2E534F00B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C19D0E2E534F00B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C19E0E2E534F00B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C19F0E2E534F00B7A85F /* UIKit.framework in Frameworks */, - FDD2C1A00E2E534F00B7A85F /* Foundation.framework in Frameworks */, - FDD2C1A10E2E534F00B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C4510E2E773800B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5BC0E31364D006BAC0B /* libSDL2.a in Frameworks */, - FDD2C4540E2E773800B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C4550E2E773800B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C4560E2E773800B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C4570E2E773800B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C4580E2E773800B7A85F /* UIKit.framework in Frameworks */, - FDD2C4590E2E773800B7A85F /* Foundation.framework in Frameworks */, - FDD2C45A0E2E773800B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C46F0E2E77D700B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5C20E313663006BAC0B /* libSDL2.a in Frameworks */, - FDD2C4720E2E77D700B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C4730E2E77D700B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C4740E2E77D700B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C4750E2E77D700B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C4760E2E77D700B7A85F /* UIKit.framework in Frameworks */, - FDD2C4770E2E77D700B7A85F /* Foundation.framework in Frameworks */, - FDD2C4780E2E77D700B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C4FE0E2E7F4800B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5C60E3136F1006BAC0B /* libSDL2.a in Frameworks */, - FDD2C5010E2E7F4800B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C5020E2E7F4800B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C5030E2E7F4800B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C5040E2E7F4800B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C5050E2E7F4800B7A85F /* UIKit.framework in Frameworks */, - FDD2C5060E2E7F4800B7A85F /* Foundation.framework in Frameworks */, - FDD2C5070E2E7F4800B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C51C0E2E807600B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5C80E313702006BAC0B /* libSDL2.a in Frameworks */, - FDD2C51F0E2E807600B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C5200E2E807600B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C5210E2E807600B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C5220E2E807600B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C5230E2E807600B7A85F /* UIKit.framework in Frameworks */, - FDD2C5240E2E807600B7A85F /* Foundation.framework in Frameworks */, - FDD2C5250E2E807600B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5410E2E80E400B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AA1EE47717605BAB0029C7A5 /* libSDL2test.a in Frameworks */, - FDBDE5CA0E313712006BAC0B /* libSDL2.a in Frameworks */, - FDD2C5440E2E80E400B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C5450E2E80E400B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C5460E2E80E400B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C5470E2E80E400B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C5480E2E80E400B7A85F /* UIKit.framework in Frameworks */, - FDD2C5490E2E80E400B7A85F /* Foundation.framework in Frameworks */, - FDD2C54A0E2E80E400B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C57A0E2E8C7400B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5CC0E31372B006BAC0B /* libSDL2.a in Frameworks */, - FDD2C57D0E2E8C7400B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C57E0E2E8C7400B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C57F0E2E8C7400B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C5800E2E8C7400B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C5810E2E8C7400B7A85F /* UIKit.framework in Frameworks */, - FDD2C5820E2E8C7400B7A85F /* Foundation.framework in Frameworks */, - FDD2C5830E2E8C7400B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5B80E2E8CFC00B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5CE0E31373E006BAC0B /* libSDL2.a in Frameworks */, - FDD2C5BB0E2E8CFC00B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C5BC0E2E8CFC00B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C5BD0E2E8CFC00B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C5BE0E2E8CFC00B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C5BF0E2E8CFC00B7A85F /* UIKit.framework in Frameworks */, - FDD2C5C00E2E8CFC00B7A85F /* Foundation.framework in Frameworks */, - FDD2C5C10E2E8CFC00B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C6E70E2E959E00B7A85F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - FDBDE5D40E313789006BAC0B /* libSDL2.a in Frameworks */, - FDD2C6EA0E2E959E00B7A85F /* AudioToolbox.framework in Frameworks */, - FDD2C6EB0E2E959E00B7A85F /* QuartzCore.framework in Frameworks */, - FDD2C6EC0E2E959E00B7A85F /* OpenGLES.framework in Frameworks */, - FDD2C6ED0E2E959E00B7A85F /* CoreGraphics.framework in Frameworks */, - FDD2C6EE0E2E959E00B7A85F /* UIKit.framework in Frameworks */, - FDD2C6EF0E2E959E00B7A85F /* Foundation.framework in Frameworks */, - FDD2C6F00E2E959E00B7A85F /* CoreAudio.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 19C28FACFE9D520D11CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 1D6058910D05DD3D006BFB54 /* testwm2.app */, - FDA8AABB0E2D330F00EA573E /* loopwav.app */, - FDAAC3CD0E2D47E6001DB1D8 /* testaudioinfo.app */, - FDAAC59B0E2D5429001DB1D8 /* testerror.app */, - FDAAC5C90E2D55B5001DB1D8 /* testfile.app */, - FDAAC6260E2D5914001DB1D8 /* testgles.app */, - FDD2C10A0E2E4F4B00B7A85F /* testthread.app */, - FDD2C1810E2E52C000B7A85F /* testiconv.app */, - FDD2C1A50E2E534F00B7A85F /* testjoystick.app */, - FDD2C45E0E2E773800B7A85F /* testkeys.app */, - FDD2C47C0E2E77D700B7A85F /* testlock.app */, - FDD2C50B0E2E7F4800B7A85F /* testplatform.app */, - FDD2C5290E2E807600B7A85F /* testsem.app */, - FDD2C54E0E2E80E400B7A85F /* testsprite2.app */, - FDD2C5870E2E8C7400B7A85F /* testtimer.app */, - FDD2C5C50E2E8CFC00B7A85F /* testver.app */, - FDD2C6F40E2E959E00B7A85F /* torturethread.app */, - FDC430000F0D866D009C87E1 /* torturethread.app */, - 56ED050D118A8FE400A56AA6 /* testpower.app */, - 046CEF8613254F23007AD51D /* testgesture.app */, - 047A63ED13285C3200CD7973 /* checkkeys.app */, - AAE7DEEC14CBB1E100DF1A0E /* testscale.app */, - AAE7DFB114CBB54E00DF1A0E /* testrendertarget.app */, - ); - name = Products; - sourceTree = ""; - }; - 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { - isa = PBXGroup; - children = ( - AA1EE44D176059220029C7A5 /* SDL2test.xcodeproj */, - FD1B48AC0E3131CA007AB34E /* SDL.xcodeproj */, - FDA8AAD60E2D339A00EA573E /* Resources */, - FDA8A7C30E2D10FA00EA573E /* Linked Frameworks */, - FDA8A73B0E2D0F0400EA573E /* src */, - 19C28FACFE9D520D11CA2CBB /* Products */, - ); - name = CustomTemplate; - sourceTree = ""; - }; - AA1EE44E176059220029C7A5 /* Products */ = { - isa = PBXGroup; - children = ( - AA1EE452176059230029C7A5 /* libSDL2test.a */, - ); - name = Products; - sourceTree = ""; - }; - FD1B48AD0E3131CA007AB34E /* Products */ = { - isa = PBXGroup; - children = ( - FD1B48B80E3131CA007AB34E /* libSDL2.a */, - 0466EE7011E565E4000198A4 /* testsdl.app */, - ); - name = Products; - sourceTree = ""; - }; - FDA8A73B0E2D0F0400EA573E /* src */ = { - isa = PBXGroup; - children = ( - 047A63F013285CD100CD7973 /* checkkeys.c */, - FDA8A78B0E2D0F3D00EA573E /* loopwave.c */, - FDA8A7410E2D0F1600EA573E /* testaudioinfo.c */, - FDC430090F0D86BF009C87E1 /* testdraw2.c */, - FDA8A7470E2D0F1600EA573E /* testerror.c */, - FDA8A7480E2D0F1600EA573E /* testfile.c */, - 046CEF8913254F63007AD51D /* testgesture.c */, - FDAAC6290E2D5960001DB1D8 /* testgles.c */, - FDA8A74D0E2D0F1600EA573E /* testiconv.c */, - FDA8A74E0E2D0F1600EA573E /* testjoystick.c */, - FDA8A74F0E2D0F1600EA573E /* testkeys.c */, - FDA8A7510E2D0F1600EA573E /* testlock.c */, - FDA8A7540E2D0F1600EA573E /* testoverlay2.c */, - FDA8A7560E2D0F1600EA573E /* testplatform.c */, - 56ED0510118A904200A56AA6 /* testpower.c */, - AAE7DFB414CBB5F700DF1A0E /* testrendertarget.c */, - AAE7DF4514CBB43900DF1A0E /* testscale.c */, - FDA8A7570E2D0F1600EA573E /* testsem.c */, - FDA8A7590E2D0F1600EA573E /* testsprite2.c */, - FDA8A74C0E2D0F1600EA573E /* testthread.c */, - FDA8A75A0E2D0F1600EA573E /* testtimer.c */, - FDA8A75B0E2D0F1600EA573E /* testver.c */, - FDA8A75F0E2D0F1600EA573E /* testwm2.c */, - FDA8A7610E2D0F1600EA573E /* torturethread.c */, - ); - name = src; - sourceTree = ""; - }; - FDA8A7C30E2D10FA00EA573E /* Linked Frameworks */ = { - isa = PBXGroup; - children = ( - FDA8A8980E2D111A00EA573E /* AudioToolbox.framework */, - FDA8A8990E2D111A00EA573E /* QuartzCore.framework */, - FDA8A89A0E2D111A00EA573E /* OpenGLES.framework */, - FDA8A89B0E2D111A00EA573E /* CoreGraphics.framework */, - FDA8A89C0E2D111A00EA573E /* UIKit.framework */, - FDA8A89D0E2D111A00EA573E /* Foundation.framework */, - FDA8A89E0E2D111A00EA573E /* CoreAudio.framework */, - ); - name = "Linked Frameworks"; - sourceTree = ""; - }; - FDA8AAD60E2D339A00EA573E /* Resources */ = { - isa = PBXGroup; - children = ( - FDD2C18A0E2E52FE00B7A85F /* utf8.txt */, - FDA8AAD90E2D33B000EA573E /* icon.bmp */, - FDA8AADA0E2D33BA00EA573E /* moose.dat */, - FDA8AADB0E2D33BA00EA573E /* picture.xbm */, - FDA8AADE0E2D33C100EA573E /* sample.bmp */, - FDA8AAE20E2D33C600EA573E /* sample.wav */, - ); - name = Resources; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 046CEF7513254F23007AD51D /* testgesture */ = { - isa = PBXNativeTarget; - buildConfigurationList = 046CEF8313254F23007AD51D /* Build configuration list for PBXNativeTarget "testgesture" */; - buildPhases = ( - 046CEF7613254F23007AD51D /* Resources */, - 046CEF7813254F23007AD51D /* Sources */, - 046CEF7A13254F23007AD51D /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testgesture; - productName = Test; - productReference = 046CEF8613254F23007AD51D /* testgesture.app */; - productType = "com.apple.product-type.application"; - }; - 047A63DD13285C3200CD7973 /* checkkeys */ = { - isa = PBXNativeTarget; - buildConfigurationList = 047A63EA13285C3200CD7973 /* Build configuration list for PBXNativeTarget "checkkeys" */; - buildPhases = ( - 047A63DE13285C3200CD7973 /* Resources */, - 047A63DF13285C3200CD7973 /* Sources */, - 047A63E113285C3200CD7973 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = checkkeys; - productName = Test; - productReference = 047A63ED13285C3200CD7973 /* checkkeys.app */; - productType = "com.apple.product-type.application"; - }; - 1D6058900D05DD3D006BFB54 /* testwm2 */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "testwm2" */; - buildPhases = ( - 1D60588D0D05DD3D006BFB54 /* Resources */, - 1D60588E0D05DD3D006BFB54 /* Sources */, - 1D60588F0D05DD3D006BFB54 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testwm2; - productName = Test; - productReference = 1D6058910D05DD3D006BFB54 /* testwm2.app */; - productType = "com.apple.product-type.application"; - }; - 56ED04FC118A8FE400A56AA6 /* testpower */ = { - isa = PBXNativeTarget; - buildConfigurationList = 56ED050A118A8FE400A56AA6 /* Build configuration list for PBXNativeTarget "testpower" */; - buildPhases = ( - 56ED04FD118A8FE400A56AA6 /* Resources */, - 56ED04FF118A8FE400A56AA6 /* Sources */, - 56ED0501118A8FE400A56AA6 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testpower; - productName = Test; - productReference = 56ED050D118A8FE400A56AA6 /* testpower.app */; - productType = "com.apple.product-type.application"; - }; - AAE7DEDA14CBB1E100DF1A0E /* testscale */ = { - isa = PBXNativeTarget; - buildConfigurationList = AAE7DEE914CBB1E100DF1A0E /* Build configuration list for PBXNativeTarget "testscale" */; - buildPhases = ( - AAE7DEDB14CBB1E100DF1A0E /* Resources */, - AAE7DEDD14CBB1E100DF1A0E /* Sources */, - AAE7DEE014CBB1E100DF1A0E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testscale; - productName = Test; - productReference = AAE7DEEC14CBB1E100DF1A0E /* testscale.app */; - productType = "com.apple.product-type.application"; - }; - AAE7DF9E14CBB54E00DF1A0E /* testrendertarget */ = { - isa = PBXNativeTarget; - buildConfigurationList = AAE7DFAE14CBB54E00DF1A0E /* Build configuration list for PBXNativeTarget "testrendertarget" */; - buildPhases = ( - AAE7DF9F14CBB54E00DF1A0E /* Resources */, - AAE7DFA214CBB54E00DF1A0E /* Sources */, - AAE7DFA514CBB54E00DF1A0E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testrendertarget; - productName = Test; - productReference = AAE7DFB114CBB54E00DF1A0E /* testrendertarget.app */; - productType = "com.apple.product-type.application"; - }; - FDA8AAAA0E2D330F00EA573E /* loopwav */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDA8AAB80E2D330F00EA573E /* Build configuration list for PBXNativeTarget "loopwav" */; - buildPhases = ( - FDA8AAAB0E2D330F00EA573E /* Resources */, - FDA8AAAC0E2D330F00EA573E /* Sources */, - FDA8AAAE0E2D330F00EA573E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = loopwav; - productName = Test; - productReference = FDA8AABB0E2D330F00EA573E /* loopwav.app */; - productType = "com.apple.product-type.application"; - }; - FDAAC3BB0E2D47E6001DB1D8 /* testaudioinfo */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDAAC3CA0E2D47E6001DB1D8 /* Build configuration list for PBXNativeTarget "testaudioinfo" */; - buildPhases = ( - FDAAC3BC0E2D47E6001DB1D8 /* Resources */, - FDAAC3BE0E2D47E6001DB1D8 /* Sources */, - FDAAC3C00E2D47E6001DB1D8 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testaudioinfo; - productName = Test; - productReference = FDAAC3CD0E2D47E6001DB1D8 /* testaudioinfo.app */; - productType = "com.apple.product-type.application"; - }; - FDAAC58A0E2D5429001DB1D8 /* testerror */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDAAC5980E2D5429001DB1D8 /* Build configuration list for PBXNativeTarget "testerror" */; - buildPhases = ( - FDAAC58B0E2D5429001DB1D8 /* Resources */, - FDAAC58C0E2D5429001DB1D8 /* Sources */, - FDAAC58E0E2D5429001DB1D8 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testerror; - productName = Test; - productReference = FDAAC59B0E2D5429001DB1D8 /* testerror.app */; - productType = "com.apple.product-type.application"; - }; - FDAAC5B80E2D55B5001DB1D8 /* testfile */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDAAC5C60E2D55B5001DB1D8 /* Build configuration list for PBXNativeTarget "testfile" */; - buildPhases = ( - FDAAC5B90E2D55B5001DB1D8 /* Resources */, - FDAAC5BA0E2D55B5001DB1D8 /* Sources */, - FDAAC5BC0E2D55B5001DB1D8 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testfile; - productName = Test; - productReference = FDAAC5C90E2D55B5001DB1D8 /* testfile.app */; - productType = "com.apple.product-type.application"; - }; - FDAAC6150E2D5914001DB1D8 /* testgles */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDAAC6230E2D5914001DB1D8 /* Build configuration list for PBXNativeTarget "testgles" */; - buildPhases = ( - FDAAC6160E2D5914001DB1D8 /* Resources */, - FDAAC6170E2D5914001DB1D8 /* Sources */, - FDAAC6190E2D5914001DB1D8 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testgles; - productName = Test; - productReference = FDAAC6260E2D5914001DB1D8 /* testgles.app */; - productType = "com.apple.product-type.application"; - }; - FDC42FEF0F0D866D009C87E1 /* testdraw2 */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDC42FFD0F0D866D009C87E1 /* Build configuration list for PBXNativeTarget "testdraw2" */; - buildPhases = ( - FDC42FF00F0D866D009C87E1 /* Resources */, - FDC42FF10F0D866D009C87E1 /* Sources */, - FDC42FF30F0D866D009C87E1 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testdraw2; - productName = Test; - productReference = FDC430000F0D866D009C87E1 /* torturethread.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C0F90E2E4F4B00B7A85F /* testthread */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C1070E2E4F4B00B7A85F /* Build configuration list for PBXNativeTarget "testthread" */; - buildPhases = ( - FDD2C0FA0E2E4F4B00B7A85F /* Resources */, - FDD2C0FB0E2E4F4B00B7A85F /* Sources */, - FDD2C0FD0E2E4F4B00B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testthread; - productName = Test; - productReference = FDD2C10A0E2E4F4B00B7A85F /* testthread.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C1700E2E52C000B7A85F /* testiconv */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C17E0E2E52C000B7A85F /* Build configuration list for PBXNativeTarget "testiconv" */; - buildPhases = ( - FDD2C1710E2E52C000B7A85F /* Resources */, - FDD2C1720E2E52C000B7A85F /* Sources */, - FDD2C1740E2E52C000B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testiconv; - productName = Test; - productReference = FDD2C1810E2E52C000B7A85F /* testiconv.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C1930E2E534F00B7A85F /* testjoystick */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C1A20E2E534F00B7A85F /* Build configuration list for PBXNativeTarget "testjoystick" */; - buildPhases = ( - FDD2C1940E2E534F00B7A85F /* Resources */, - FDD2C1960E2E534F00B7A85F /* Sources */, - FDD2C1980E2E534F00B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testjoystick; - productName = Test; - productReference = FDD2C1A50E2E534F00B7A85F /* testjoystick.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C44D0E2E773800B7A85F /* testkeys */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C45B0E2E773800B7A85F /* Build configuration list for PBXNativeTarget "testkeys" */; - buildPhases = ( - FDD2C44E0E2E773800B7A85F /* Resources */, - FDD2C44F0E2E773800B7A85F /* Sources */, - FDD2C4510E2E773800B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testkeys; - productName = Test; - productReference = FDD2C45E0E2E773800B7A85F /* testkeys.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C46B0E2E77D700B7A85F /* testlock */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C4790E2E77D700B7A85F /* Build configuration list for PBXNativeTarget "testlock" */; - buildPhases = ( - FDD2C46C0E2E77D700B7A85F /* Resources */, - FDD2C46D0E2E77D700B7A85F /* Sources */, - FDD2C46F0E2E77D700B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testlock; - productName = Test; - productReference = FDD2C47C0E2E77D700B7A85F /* testlock.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C4F90E2E7F4800B7A85F /* testplatform */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C5080E2E7F4800B7A85F /* Build configuration list for PBXNativeTarget "testplatform" */; - buildPhases = ( - FDD2C4FA0E2E7F4800B7A85F /* Resources */, - FDD2C4FC0E2E7F4800B7A85F /* Sources */, - FDD2C4FE0E2E7F4800B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testplatform; - productName = Test; - productReference = FDD2C50B0E2E7F4800B7A85F /* testplatform.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C5170E2E807600B7A85F /* testsem */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C5260E2E807600B7A85F /* Build configuration list for PBXNativeTarget "testsem" */; - buildPhases = ( - FDD2C5180E2E807600B7A85F /* Resources */, - FDD2C51A0E2E807600B7A85F /* Sources */, - FDD2C51C0E2E807600B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testsem; - productName = Test; - productReference = FDD2C5290E2E807600B7A85F /* testsem.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C53D0E2E80E400B7A85F /* testsprite2 */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C54B0E2E80E400B7A85F /* Build configuration list for PBXNativeTarget "testsprite2" */; - buildPhases = ( - FDD2C53E0E2E80E400B7A85F /* Resources */, - FDD2C53F0E2E80E400B7A85F /* Sources */, - FDD2C5410E2E80E400B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testsprite2; - productName = Test; - productReference = FDD2C54E0E2E80E400B7A85F /* testsprite2.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C5740E2E8C7400B7A85F /* testtimer */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C5840E2E8C7400B7A85F /* Build configuration list for PBXNativeTarget "testtimer" */; - buildPhases = ( - FDD2C5750E2E8C7400B7A85F /* Resources */, - FDD2C5770E2E8C7400B7A85F /* Sources */, - FDD2C57A0E2E8C7400B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testtimer; - productName = Test; - productReference = FDD2C5870E2E8C7400B7A85F /* testtimer.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C5B30E2E8CFC00B7A85F /* testver */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C5C20E2E8CFC00B7A85F /* Build configuration list for PBXNativeTarget "testver" */; - buildPhases = ( - FDD2C5B40E2E8CFC00B7A85F /* Resources */, - FDD2C5B60E2E8CFC00B7A85F /* Sources */, - FDD2C5B80E2E8CFC00B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = testver; - productName = Test; - productReference = FDD2C5C50E2E8CFC00B7A85F /* testver.app */; - productType = "com.apple.product-type.application"; - }; - FDD2C6E20E2E959E00B7A85F /* torturethread */ = { - isa = PBXNativeTarget; - buildConfigurationList = FDD2C6F10E2E959E00B7A85F /* Build configuration list for PBXNativeTarget "torturethread" */; - buildPhases = ( - FDD2C6E30E2E959E00B7A85F /* Resources */, - FDD2C6E50E2E959E00B7A85F /* Sources */, - FDD2C6E70E2E959E00B7A85F /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = torturethread; - productName = Test; - productReference = FDD2C6F40E2E959E00B7A85F /* torturethread.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 29B97313FDCFA39411CA2CEA /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0420; - }; - buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TestiPhoneOS" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = FD1B48AD0E3131CA007AB34E /* Products */; - ProjectRef = FD1B48AC0E3131CA007AB34E /* SDL.xcodeproj */; - }, - { - ProductGroup = AA1EE44E176059220029C7A5 /* Products */; - ProjectRef = AA1EE44D176059220029C7A5 /* SDL2test.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 047A63DD13285C3200CD7973 /* checkkeys */, - FDA8AAAA0E2D330F00EA573E /* loopwav */, - FDAAC3BB0E2D47E6001DB1D8 /* testaudioinfo */, - FDC42FEF0F0D866D009C87E1 /* testdraw2 */, - FDAAC58A0E2D5429001DB1D8 /* testerror */, - FDAAC5B80E2D55B5001DB1D8 /* testfile */, - 046CEF7513254F23007AD51D /* testgesture */, - FDAAC6150E2D5914001DB1D8 /* testgles */, - FDD2C1700E2E52C000B7A85F /* testiconv */, - FDD2C1930E2E534F00B7A85F /* testjoystick */, - FDD2C44D0E2E773800B7A85F /* testkeys */, - FDD2C46B0E2E77D700B7A85F /* testlock */, - FDD2C4F90E2E7F4800B7A85F /* testplatform */, - 56ED04FC118A8FE400A56AA6 /* testpower */, - AAE7DF9E14CBB54E00DF1A0E /* testrendertarget */, - AAE7DEDA14CBB1E100DF1A0E /* testscale */, - FDD2C5170E2E807600B7A85F /* testsem */, - FDD2C53D0E2E80E400B7A85F /* testsprite2 */, - FDD2C0F90E2E4F4B00B7A85F /* testthread */, - FDD2C5740E2E8C7400B7A85F /* testtimer */, - FDD2C5B30E2E8CFC00B7A85F /* testver */, - 1D6058900D05DD3D006BFB54 /* testwm2 */, - FDD2C6E20E2E959E00B7A85F /* torturethread */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 0466EE7011E565E4000198A4 /* testsdl.app */ = { - isa = PBXReferenceProxy; - fileType = wrapper.application; - path = testsdl.app; - remoteRef = 0466EE6F11E565E4000198A4 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - AA1EE452176059230029C7A5 /* libSDL2test.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libSDL2test.a; - remoteRef = AA1EE451176059230029C7A5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - FD1B48B80E3131CA007AB34E /* libSDL2.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libSDL2.a; - remoteRef = FD1B48B70E3131CA007AB34E /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 046CEF7613254F23007AD51D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 046CEF7713254F23007AD51D /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 047A63DE13285C3200CD7973 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1D60588D0D05DD3D006BFB54 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 56ED04FD118A8FE400A56AA6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 56ED04FE118A8FE400A56AA6 /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DEDB14CBB1E100DF1A0E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAE7DEDC14CBB1E100DF1A0E /* icon.bmp in Resources */, - AAE7DF4714CBB45000DF1A0E /* sample.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DF9F14CBB54E00DF1A0E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAE7DFA014CBB54E00DF1A0E /* icon.bmp in Resources */, - AAE7DFA114CBB54E00DF1A0E /* sample.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDA8AAAB0E2D330F00EA573E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDA8AAE30E2D33C600EA573E /* sample.wav in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC3BC0E2D47E6001DB1D8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC58B0E2D5429001DB1D8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC5B90E2D55B5001DB1D8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC6160E2D5914001DB1D8 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDAAC6390E2D59BE001DB1D8 /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC42FF00F0D866D009C87E1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C0FA0E2E4F4B00B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1710E2E52C000B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C18B0E2E52FE00B7A85F /* utf8.txt in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1940E2E534F00B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C44E0E2E773800B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C46C0E2E77D700B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C4FA0E2E7F4800B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5180E2E807600B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C53E0E2E80E400B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C5520E2E812C00B7A85F /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5750E2E8C7400B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C5760E2E8C7400B7A85F /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5B40E2E8CFC00B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C5B50E2E8CFC00B7A85F /* icon.bmp in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C6E30E2E959E00B7A85F /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 046CEF7813254F23007AD51D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 046CEF8A13254F63007AD51D /* testgesture.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 047A63DF13285C3200CD7973 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 047A63F113285CD100CD7973 /* checkkeys.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1D60588E0D05DD3D006BFB54 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDA8A79C0E2D0F9300EA573E /* testwm2.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 56ED04FF118A8FE400A56AA6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 56ED0511118A904200A56AA6 /* testpower.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DEDD14CBB1E100DF1A0E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAE7DF4614CBB43900DF1A0E /* testscale.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AAE7DFA214CBB54E00DF1A0E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AAE7DFB514CBB5F700DF1A0E /* testrendertarget.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDA8AAAC0E2D330F00EA573E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDA8AABE0E2D335C00EA573E /* loopwave.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC3BE0E2D47E6001DB1D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDAAC3D30E2D4800001DB1D8 /* testaudioinfo.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC58C0E2D5429001DB1D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDAAC59F0E2D54B8001DB1D8 /* testerror.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC5BA0E2D55B5001DB1D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDAAC5CC0E2D55CA001DB1D8 /* testfile.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDAAC6170E2D5914001DB1D8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDAAC62A0E2D5960001DB1D8 /* testgles.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDC42FF10F0D866D009C87E1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDC4300A0F0D86BF009C87E1 /* testdraw2.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C0FB0E2E4F4B00B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C10D0E2E4F6900B7A85F /* testthread.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1720E2E52C000B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C1840E2E52D900B7A85F /* testiconv.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C1960E2E534F00B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C1A80E2E536400B7A85F /* testjoystick.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C44F0E2E773800B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C4610E2E777500B7A85F /* testkeys.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C46D0E2E77D700B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C47F0E2E77E300B7A85F /* testlock.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C4FC0E2E7F4800B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C50E0E2E7F5800B7A85F /* testplatform.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C51A0E2E807600B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C52C0E2E808700B7A85F /* testsem.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C53F0E2E80E400B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C5510E2E80F400B7A85F /* testsprite2.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5770E2E8C7400B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C58A0E2E8CB500B7A85F /* testtimer.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C5B60E2E8CFC00B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C5C80E2E8D1200B7A85F /* testver.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FDD2C6E50E2E959E00B7A85F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FDD2C6F70E2E95B100B7A85F /* torturethread.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 046CEF8413254F23007AD51D /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testgesture; - }; - name = Debug; - }; - 046CEF8513254F23007AD51D /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testgesture; - }; - name = Release; - }; - 047A63EB13285C3200CD7973 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = checkkeys; - }; - name = Debug; - }; - 047A63EC13285C3200CD7973 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = checkkeys; - }; - name = Release; - }; - 1D6058940D05DD3E006BFB54 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testwm2; - }; - name = Debug; - }; - 1D6058950D05DD3E006BFB54 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testwm2; - }; - name = Release; - }; - 56ED050B118A8FE400A56AA6 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testpower; - }; - name = Debug; - }; - 56ED050C118A8FE400A56AA6 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testpower; - }; - name = Release; - }; - AAE7DEEA14CBB1E100DF1A0E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testscale; - }; - name = Debug; - }; - AAE7DEEB14CBB1E100DF1A0E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testscale; - }; - name = Release; - }; - AAE7DFAF14CBB54E00DF1A0E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testrendertarget; - }; - name = Debug; - }; - AAE7DFB014CBB54E00DF1A0E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testrendertarget; - }; - name = Release; - }; - C01FCF4F08A954540054247B /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - armv7, - armv6, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_OPTIMIZATION_LEVEL = 0; - HEADER_SEARCH_PATHS = ../../include; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - OTHER_LDFLAGS = "-ObjC"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - C01FCF5008A954540054247B /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = ( - armv7, - armv6, - ); - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - HEADER_SEARCH_PATHS = ../../include; - IPHONEOS_DEPLOYMENT_TARGET = 3.1.3; - OTHER_LDFLAGS = "-ObjC"; - "PROVISIONING_PROFILE[sdk=iphoneos*]" = ""; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Release; - }; - FDA8AAB90E2D330F00EA573E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = loopwav; - }; - name = Debug; - }; - FDA8AABA0E2D330F00EA573E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = loopwav; - }; - name = Release; - }; - FDAAC3CB0E2D47E6001DB1D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testaudioinfo; - }; - name = Debug; - }; - FDAAC3CC0E2D47E6001DB1D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testaudioinfo; - }; - name = Release; - }; - FDAAC5990E2D5429001DB1D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testerror; - }; - name = Debug; - }; - FDAAC59A0E2D5429001DB1D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testerror; - }; - name = Release; - }; - FDAAC5C70E2D55B5001DB1D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testfile; - }; - name = Debug; - }; - FDAAC5C80E2D55B5001DB1D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testfile; - }; - name = Release; - }; - FDAAC6240E2D5914001DB1D8 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testgles; - }; - name = Debug; - }; - FDAAC6250E2D5914001DB1D8 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testgles; - }; - name = Release; - }; - FDC42FFE0F0D866D009C87E1 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = torturethread; - }; - name = Debug; - }; - FDC42FFF0F0D866D009C87E1 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = torturethread; - }; - name = Release; - }; - FDD2C1080E2E4F4B00B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testthread; - }; - name = Debug; - }; - FDD2C1090E2E4F4B00B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testthread; - }; - name = Release; - }; - FDD2C17F0E2E52C000B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testiconv; - }; - name = Debug; - }; - FDD2C1800E2E52C000B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testiconv; - }; - name = Release; - }; - FDD2C1A30E2E534F00B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testjoystick; - }; - name = Debug; - }; - FDD2C1A40E2E534F00B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testjoystick; - }; - name = Release; - }; - FDD2C45C0E2E773800B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testkeys; - }; - name = Debug; - }; - FDD2C45D0E2E773800B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testkeys; - }; - name = Release; - }; - FDD2C47A0E2E77D700B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testlock; - }; - name = Debug; - }; - FDD2C47B0E2E77D700B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testlock; - }; - name = Release; - }; - FDD2C5090E2E7F4800B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testplatform; - }; - name = Debug; - }; - FDD2C50A0E2E7F4800B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testplatform; - }; - name = Release; - }; - FDD2C5270E2E807600B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testsem; - }; - name = Debug; - }; - FDD2C5280E2E807600B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testsem; - }; - name = Release; - }; - FDD2C54C0E2E80E400B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testsprite2; - }; - name = Debug; - }; - FDD2C54D0E2E80E400B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testsprite2; - }; - name = Release; - }; - FDD2C5850E2E8C7400B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testtimer; - }; - name = Debug; - }; - FDD2C5860E2E8C7400B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testtimer; - }; - name = Release; - }; - FDD2C5C30E2E8CFC00B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testver; - }; - name = Debug; - }; - FDD2C5C40E2E8CFC00B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = testver; - }; - name = Release; - }; - FDD2C6F20E2E959E00B7A85F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = torturethread; - }; - name = Debug; - }; - FDD2C6F30E2E959E00B7A85F /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INFOPLIST_FILE = Info.plist; - PRODUCT_NAME = torturethread; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 046CEF8313254F23007AD51D /* Build configuration list for PBXNativeTarget "testgesture" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 046CEF8413254F23007AD51D /* Debug */, - 046CEF8513254F23007AD51D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 047A63EA13285C3200CD7973 /* Build configuration list for PBXNativeTarget "checkkeys" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 047A63EB13285C3200CD7973 /* Debug */, - 047A63EC13285C3200CD7973 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "testwm2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1D6058940D05DD3E006BFB54 /* Debug */, - 1D6058950D05DD3E006BFB54 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 56ED050A118A8FE400A56AA6 /* Build configuration list for PBXNativeTarget "testpower" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 56ED050B118A8FE400A56AA6 /* Debug */, - 56ED050C118A8FE400A56AA6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAE7DEE914CBB1E100DF1A0E /* Build configuration list for PBXNativeTarget "testscale" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAE7DEEA14CBB1E100DF1A0E /* Debug */, - AAE7DEEB14CBB1E100DF1A0E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - AAE7DFAE14CBB54E00DF1A0E /* Build configuration list for PBXNativeTarget "testrendertarget" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - AAE7DFAF14CBB54E00DF1A0E /* Debug */, - AAE7DFB014CBB54E00DF1A0E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C01FCF4E08A954540054247B /* Build configuration list for PBXProject "TestiPhoneOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C01FCF4F08A954540054247B /* Debug */, - C01FCF5008A954540054247B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDA8AAB80E2D330F00EA573E /* Build configuration list for PBXNativeTarget "loopwav" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDA8AAB90E2D330F00EA573E /* Debug */, - FDA8AABA0E2D330F00EA573E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDAAC3CA0E2D47E6001DB1D8 /* Build configuration list for PBXNativeTarget "testaudioinfo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDAAC3CB0E2D47E6001DB1D8 /* Debug */, - FDAAC3CC0E2D47E6001DB1D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDAAC5980E2D5429001DB1D8 /* Build configuration list for PBXNativeTarget "testerror" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDAAC5990E2D5429001DB1D8 /* Debug */, - FDAAC59A0E2D5429001DB1D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDAAC5C60E2D55B5001DB1D8 /* Build configuration list for PBXNativeTarget "testfile" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDAAC5C70E2D55B5001DB1D8 /* Debug */, - FDAAC5C80E2D55B5001DB1D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDAAC6230E2D5914001DB1D8 /* Build configuration list for PBXNativeTarget "testgles" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDAAC6240E2D5914001DB1D8 /* Debug */, - FDAAC6250E2D5914001DB1D8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDC42FFD0F0D866D009C87E1 /* Build configuration list for PBXNativeTarget "testdraw2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDC42FFE0F0D866D009C87E1 /* Debug */, - FDC42FFF0F0D866D009C87E1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C1070E2E4F4B00B7A85F /* Build configuration list for PBXNativeTarget "testthread" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C1080E2E4F4B00B7A85F /* Debug */, - FDD2C1090E2E4F4B00B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C17E0E2E52C000B7A85F /* Build configuration list for PBXNativeTarget "testiconv" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C17F0E2E52C000B7A85F /* Debug */, - FDD2C1800E2E52C000B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C1A20E2E534F00B7A85F /* Build configuration list for PBXNativeTarget "testjoystick" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C1A30E2E534F00B7A85F /* Debug */, - FDD2C1A40E2E534F00B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C45B0E2E773800B7A85F /* Build configuration list for PBXNativeTarget "testkeys" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C45C0E2E773800B7A85F /* Debug */, - FDD2C45D0E2E773800B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C4790E2E77D700B7A85F /* Build configuration list for PBXNativeTarget "testlock" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C47A0E2E77D700B7A85F /* Debug */, - FDD2C47B0E2E77D700B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C5080E2E7F4800B7A85F /* Build configuration list for PBXNativeTarget "testplatform" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C5090E2E7F4800B7A85F /* Debug */, - FDD2C50A0E2E7F4800B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C5260E2E807600B7A85F /* Build configuration list for PBXNativeTarget "testsem" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C5270E2E807600B7A85F /* Debug */, - FDD2C5280E2E807600B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C54B0E2E80E400B7A85F /* Build configuration list for PBXNativeTarget "testsprite2" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C54C0E2E80E400B7A85F /* Debug */, - FDD2C54D0E2E80E400B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C5840E2E8C7400B7A85F /* Build configuration list for PBXNativeTarget "testtimer" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C5850E2E8C7400B7A85F /* Debug */, - FDD2C5860E2E8C7400B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C5C20E2E8CFC00B7A85F /* Build configuration list for PBXNativeTarget "testver" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C5C30E2E8CFC00B7A85F /* Debug */, - FDD2C5C40E2E8CFC00B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - FDD2C6F10E2E959E00B7A85F /* Build configuration list for PBXNativeTarget "torturethread" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FDD2C6F20E2E959E00B7A85F /* Debug */, - FDD2C6F30E2E959E00B7A85F /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; -} diff --git a/Engine/lib/sdl/Xcode/SDL/Info-Framework.plist b/Engine/lib/sdl/Xcode/SDL/Info-Framework.plist index fa55492b80..bccaa8afce 100644 --- a/Engine/lib/sdl/Xcode/SDL/Info-Framework.plist +++ b/Engine/lib/sdl/Xcode/SDL/Info-Framework.plist @@ -19,10 +19,10 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.0.3 + 2.0.4 CFBundleSignature SDLX CFBundleVersion - 2.0.3 + 2.0.4 diff --git a/Engine/lib/sdl/Xcode/SDL/SDL.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode/SDL/SDL.xcodeproj/project.pbxproj index 617975242b..9fc2a50190 100644 --- a/Engine/lib/sdl/Xcode/SDL/SDL.xcodeproj/project.pbxproj +++ b/Engine/lib/sdl/Xcode/SDL/SDL.xcodeproj/project.pbxproj @@ -12,13 +12,11 @@ 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; }; 007317A50858DECD00B2BC32 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179E0858DECD00B2BC32 /* CoreAudio.framework */; }; 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; }; - 007317A70858DECD00B2BC32 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317A00858DECD00B2BC32 /* OpenGL.framework */; }; 007317A90858DECD00B2BC32 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179B0858DECD00B2BC32 /* AudioToolbox.framework */; }; 007317AA0858DECD00B2BC32 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179C0858DECD00B2BC32 /* AudioUnit.framework */; }; 007317AB0858DECD00B2BC32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; }; 007317AC0858DECD00B2BC32 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179E0858DECD00B2BC32 /* CoreAudio.framework */; }; 007317AD0858DECD00B2BC32 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; }; - 007317AE0858DECD00B2BC32 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317A00858DECD00B2BC32 /* OpenGL.framework */; }; 007317C30858E15000B2BC32 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; }; 00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; }; 00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D0D08310675DD9004B05EF /* CoreFoundation.framework */; }; @@ -530,6 +528,21 @@ AABCC38E164063D200AB8930 /* SDL_cocoamessagebox.h in Headers */ = {isa = PBXBuildFile; fileRef = AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */; }; AABCC38F164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */; }; AABCC390164063D200AB8930 /* SDL_cocoamessagebox.m in Sources */ = {isa = PBXBuildFile; fileRef = AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */; }; + AAC070F9195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FA195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FB195606770073DCDF /* SDL_opengl_glext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F4195606770073DCDF /* SDL_opengl_glext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FC195606770073DCDF /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FD195606770073DCDF /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FE195606770073DCDF /* SDL_opengles2_gl2.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC070FF195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07100195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07101195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07102195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07103195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07104195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07105195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07106195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAC07107195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */; settings = {ATTRIBUTES = (Public, ); }; }; AADA5B8716CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; }; AADA5B8816CCAB3000107CF7 /* SDL_bits.h in Headers */ = {isa = PBXBuildFile; fileRef = AADA5B8616CCAB3000107CF7 /* SDL_bits.h */; settings = {ATTRIBUTES = (Public, ); }; }; BBFC088D164C6647003E6A99 /* SDL_gamecontroller.c in Sources */ = {isa = PBXBuildFile; fileRef = BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */; }; @@ -794,10 +807,12 @@ DB31406E17554B71006C0E22 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179D0858DECD00B2BC32 /* Cocoa.framework */; }; DB31406F17554B71006C0E22 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179E0858DECD00B2BC32 /* CoreAudio.framework */; }; DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0073179F0858DECD00B2BC32 /* IOKit.framework */; }; - DB31407117554B71006C0E22 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317A00858DECD00B2BC32 /* OpenGL.framework */; }; DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 007317C10858E15000B2BC32 /* Carbon.framework */; }; DB31408B17554D37006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; }; DB31408D17554D3C006C0E22 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00CFA89C106B4BA100758660 /* ForceFeedback.framework */; }; + FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; }; + FA73671E19A54140004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; }; + FA73671F19A54144004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73671C19A540EF004122E4 /* CoreVideo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -816,10 +831,8 @@ 0073179D0858DECD00B2BC32 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 0073179E0858DECD00B2BC32 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = ""; }; 0073179F0858DECD00B2BC32 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; - 007317A00858DECD00B2BC32 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 007317C10858E15000B2BC32 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 00794D3F09D0C461003FC8A1 /* License.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = License.txt; sourceTree = ""; }; - 00AE6E1E08B958CC00255E2F /* ReadMeDevLite.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMeDevLite.txt; sourceTree = ""; }; 00CFA89C106B4BA100758660 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = /System/Library/Frameworks/ForceFeedback.framework; sourceTree = ""; }; 00D0D08310675DD9004B05EF /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 04043BBA12FEB1BE0076DB1F /* SDL_glfuncs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_glfuncs.h; sourceTree = ""; }; @@ -1074,6 +1087,11 @@ AA9FF9591637CBF9000DF050 /* SDL_messagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_messagebox.h; sourceTree = ""; }; AABCC38B164063D200AB8930 /* SDL_cocoamessagebox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_cocoamessagebox.h; sourceTree = ""; }; AABCC38C164063D200AB8930 /* SDL_cocoamessagebox.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamessagebox.m; sourceTree = ""; }; + AAC070F4195606770073DCDF /* SDL_opengl_glext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengl_glext.h; sourceTree = ""; }; + AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2.h; sourceTree = ""; }; + AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2ext.h; sourceTree = ""; }; + AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_gl2platform.h; sourceTree = ""; }; + AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2_khrplatform.h; sourceTree = ""; }; AADA5B8616CCAB3000107CF7 /* SDL_bits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDL_bits.h; sourceTree = ""; }; BBFC088A164C6514003E6A99 /* SDL_gamecontroller.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = SDL_gamecontroller.c; sourceTree = ""; }; BECDF66B0761BA81005FE872 /* Info-Framework.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Framework.plist"; sourceTree = ""; }; @@ -1084,15 +1102,10 @@ D55A1B80179F262300625D7C /* SDL_cocoamousetap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDL_cocoamousetap.m; sourceTree = ""; }; DB31407717554B71006C0E22 /* libSDL2.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libSDL2.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; DB89958518A1A5C50092407C /* SDL_syshaptic_c.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDL_syshaptic_c.h; sourceTree = ""; }; - F59C70FF00D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = ""; }; - F59C710000D5CB5801000001 /* Welcome.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = Welcome.txt; sourceTree = ""; }; F59C710300D5CB5801000001 /* ReadMe.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = ReadMe.txt; sourceTree = ""; }; - F59C710500D5CB5801000001 /* SDL-devel.info */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "SDL-devel.info"; sourceTree = ""; }; F59C710600D5CB5801000001 /* SDL.info */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = SDL.info; sourceTree = ""; }; - F59C710C00D5D15801000001 /* install.sh */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.script.sh; path = install.sh; sourceTree = ""; }; F5A2EF3900C6A39A01000001 /* BUGS.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = BUGS.txt; path = ../../BUGS.txt; sourceTree = SOURCE_ROOT; }; - F5A2EF3A00C6A3C201000001 /* README-macosx.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "README-macosx.txt"; path = "../../README-macosx.txt"; sourceTree = SOURCE_ROOT; }; - F5F81AD400D706B101000001 /* Readme SDL Developer.txt */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; name = "Readme SDL Developer.txt"; path = "pkg-support/Readme SDL Developer.txt"; sourceTree = SOURCE_ROOT; }; + FA73671C19A540EF004122E4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1100,12 +1113,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73671D19A540EF004122E4 /* CoreVideo.framework in Frameworks */, 007317A20858DECD00B2BC32 /* AudioToolbox.framework in Frameworks */, 007317A30858DECD00B2BC32 /* AudioUnit.framework in Frameworks */, 007317A40858DECD00B2BC32 /* Cocoa.framework in Frameworks */, 007317A50858DECD00B2BC32 /* CoreAudio.framework in Frameworks */, 007317A60858DECD00B2BC32 /* IOKit.framework in Frameworks */, - 007317A70858DECD00B2BC32 /* OpenGL.framework in Frameworks */, 00D0D08410675DD9004B05EF /* CoreFoundation.framework in Frameworks */, 00D0D0D810675E46004B05EF /* Carbon.framework in Frameworks */, 00CFA89D106B4BA100758660 /* ForceFeedback.framework in Frameworks */, @@ -1116,12 +1129,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73671E19A54140004122E4 /* CoreVideo.framework in Frameworks */, 007317A90858DECD00B2BC32 /* AudioToolbox.framework in Frameworks */, 007317AA0858DECD00B2BC32 /* AudioUnit.framework in Frameworks */, 007317AB0858DECD00B2BC32 /* Cocoa.framework in Frameworks */, 007317AC0858DECD00B2BC32 /* CoreAudio.framework in Frameworks */, 007317AD0858DECD00B2BC32 /* IOKit.framework in Frameworks */, - 007317AE0858DECD00B2BC32 /* OpenGL.framework in Frameworks */, 007317C30858E15000B2BC32 /* Carbon.framework in Frameworks */, DB31408B17554D37006C0E22 /* ForceFeedback.framework in Frameworks */, ); @@ -1131,12 +1144,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73671F19A54144004122E4 /* CoreVideo.framework in Frameworks */, DB31406C17554B71006C0E22 /* AudioToolbox.framework in Frameworks */, DB31406D17554B71006C0E22 /* AudioUnit.framework in Frameworks */, DB31406E17554B71006C0E22 /* Cocoa.framework in Frameworks */, DB31406F17554B71006C0E22 /* CoreAudio.framework in Frameworks */, DB31407017554B71006C0E22 /* IOKit.framework in Frameworks */, - DB31407117554B71006C0E22 /* OpenGL.framework in Frameworks */, DB31407217554B71006C0E22 /* Carbon.framework in Frameworks */, DB31408D17554D3C006C0E22 /* ForceFeedback.framework in Frameworks */, ); @@ -1180,8 +1193,13 @@ AA7557E01595D4D800BBD41B /* SDL_mutex.h */, AA7557E11595D4D800BBD41B /* SDL_name.h */, AA7557E21595D4D800BBD41B /* SDL_opengl.h */, + AAC070F4195606770073DCDF /* SDL_opengl_glext.h */, AA7557E31595D4D800BBD41B /* SDL_opengles.h */, AA7557E41595D4D800BBD41B /* SDL_opengles2.h */, + AAC070F5195606770073DCDF /* SDL_opengles2_gl2.h */, + AAC070F6195606770073DCDF /* SDL_opengles2_gl2ext.h */, + AAC070F7195606770073DCDF /* SDL_opengles2_gl2platform.h */, + AAC070F8195606770073DCDF /* SDL_opengles2_khrplatform.h */, AA7557E51595D4D800BBD41B /* SDL_pixels.h */, AA7557E61595D4D800BBD41B /* SDL_platform.h */, AA7557E71595D4D800BBD41B /* SDL_power.h */, @@ -1645,7 +1663,6 @@ isa = PBXGroup; children = ( F5A2EF3900C6A39A01000001 /* BUGS.txt */, - F5A2EF3A00C6A3C201000001 /* README-macosx.txt */, F59C70FC00D5CB5801000001 /* pkg-support */, 0153844A006D81B07F000001 /* Public Headers */, 08FB77ACFE841707C02AAC07 /* Library Source */, @@ -1720,6 +1737,7 @@ BEC562FE0761C0E800A33029 /* Linked Frameworks */ = { isa = PBXGroup; children = ( + FA73671C19A540EF004122E4 /* CoreVideo.framework */, 00D0D08310675DD9004B05EF /* CoreFoundation.framework */, 007317C10858E15000B2BC32 /* Carbon.framework */, 0073179B0858DECD00B2BC32 /* AudioToolbox.framework */, @@ -1727,7 +1745,6 @@ 0073179D0858DECD00B2BC32 /* Cocoa.framework */, 0073179E0858DECD00B2BC32 /* CoreAudio.framework */, 0073179F0858DECD00B2BC32 /* IOKit.framework */, - 007317A00858DECD00B2BC32 /* OpenGL.framework */, 00CFA89C106B4BA100758660 /* ForceFeedback.framework */, ); name = "Linked Frameworks"; @@ -1736,30 +1753,16 @@ F59C70FC00D5CB5801000001 /* pkg-support */ = { isa = PBXGroup; children = ( - F59C70FE00D5CB5801000001 /* devel-resources */, F59C710100D5CB5801000001 /* resources */, - F5F81AD400D706B101000001 /* Readme SDL Developer.txt */, - F59C710500D5CB5801000001 /* SDL-devel.info */, F59C710600D5CB5801000001 /* SDL.info */, ); path = "pkg-support"; sourceTree = SOURCE_ROOT; }; - F59C70FE00D5CB5801000001 /* devel-resources */ = { - isa = PBXGroup; - children = ( - F59C710C00D5D15801000001 /* install.sh */, - F59C70FF00D5CB5801000001 /* ReadMe.txt */, - F59C710000D5CB5801000001 /* Welcome.txt */, - ); - path = "devel-resources"; - sourceTree = ""; - }; F59C710100D5CB5801000001 /* resources */ = { isa = PBXGroup; children = ( 00794D3F09D0C461003FC8A1 /* License.txt */, - 00AE6E1E08B958CC00255E2F /* ReadMeDevLite.txt */, F59C710300D5CB5801000001 /* ReadMe.txt */, ); path = resources; @@ -1774,6 +1777,7 @@ files = ( AA7557FA1595D4D800BBD41B /* begin_code.h in Headers */, AA7557FC1595D4D800BBD41B /* close_code.h in Headers */, + AA75585E1595D4D800BBD41B /* SDL.h in Headers */, AA7557FE1595D4D800BBD41B /* SDL_assert.h in Headers */, AA7558001595D4D800BBD41B /* SDL_atomic.h in Headers */, AA7558021595D4D800BBD41B /* SDL_audio.h in Headers */, @@ -1804,8 +1808,13 @@ AA75582C1595D4D800BBD41B /* SDL_mutex.h in Headers */, AA75582E1595D4D800BBD41B /* SDL_name.h in Headers */, AA7558301595D4D800BBD41B /* SDL_opengl.h in Headers */, + AAC070F9195606770073DCDF /* SDL_opengl_glext.h in Headers */, AA7558321595D4D800BBD41B /* SDL_opengles.h in Headers */, AA7558341595D4D800BBD41B /* SDL_opengles2.h in Headers */, + AAC070FC195606770073DCDF /* SDL_opengles2_gl2.h in Headers */, + AAC070FF195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */, + AAC07102195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */, + AAC07105195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */, AA7558361595D4D800BBD41B /* SDL_pixels.h in Headers */, AA7558381595D4D800BBD41B /* SDL_platform.h in Headers */, AA75583A1595D4D800BBD41B /* SDL_power.h in Headers */, @@ -1826,7 +1835,6 @@ AA7558581595D4D800BBD41B /* SDL_types.h in Headers */, AA75585A1595D4D800BBD41B /* SDL_version.h in Headers */, AA75585C1595D4D800BBD41B /* SDL_video.h in Headers */, - AA75585E1595D4D800BBD41B /* SDL.h in Headers */, 04BD000912E6671800899322 /* SDL_diskaudio.h in Headers */, 04BD001112E6671800899322 /* SDL_dummyaudio.h in Headers */, 04BD001912E6671800899322 /* SDL_coreaudio.h in Headers */, @@ -1950,6 +1958,7 @@ AA7558251595D4D800BBD41B /* SDL_loadso.h in Headers */, AA7558271595D4D800BBD41B /* SDL_log.h in Headers */, AA7558291595D4D800BBD41B /* SDL_main.h in Headers */, + AAC07106195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */, DB0F489417C400ED008798C5 /* SDL_messagebox.h in Headers */, AA75582B1595D4D800BBD41B /* SDL_mouse.h in Headers */, AA75582D1595D4D800BBD41B /* SDL_mutex.h in Headers */, @@ -1973,6 +1982,7 @@ AA75584D1595D4D800BBD41B /* SDL_surface.h in Headers */, AA75584F1595D4D800BBD41B /* SDL_system.h in Headers */, AA7558511595D4D800BBD41B /* SDL_syswm.h in Headers */, + AAC070FA195606770073DCDF /* SDL_opengl_glext.h in Headers */, AA7558531595D4D800BBD41B /* SDL_thread.h in Headers */, AA7558551595D4D800BBD41B /* SDL_timer.h in Headers */, AA7558571595D4D800BBD41B /* SDL_touch.h in Headers */, @@ -1985,6 +1995,7 @@ 04BD023512E6671800899322 /* SDL_coreaudio.h in Headers */, 04BD024312E6671800899322 /* SDL_audio_c.h in Headers */, 04BD024612E6671800899322 /* SDL_audiodev_c.h in Headers */, + AAC070FD195606770073DCDF /* SDL_opengles2_gl2.h in Headers */, 04BD024712E6671800899322 /* SDL_audiomem.h in Headers */, 04BD025012E6671800899322 /* SDL_sysaudio.h in Headers */, 04BD025212E6671800899322 /* SDL_wave.h in Headers */, @@ -2022,6 +2033,7 @@ 04BD031512E6671800899322 /* SDL_cocoamouse.h in Headers */, 04BD031712E6671800899322 /* SDL_cocoaopengl.h in Headers */, 04BD031912E6671800899322 /* SDL_cocoashape.h in Headers */, + AAC07103195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */, 04BD031B12E6671800899322 /* SDL_cocoavideo.h in Headers */, 04BD031D12E6671800899322 /* SDL_cocoawindow.h in Headers */, 04BD033212E6671800899322 /* SDL_nullevents_c.h in Headers */, @@ -2047,6 +2059,7 @@ 04BD040B12E6671800899322 /* SDL_x11sym.h in Headers */, 04BD040D12E6671800899322 /* SDL_x11touch.h in Headers */, 04BD040F12E6671800899322 /* SDL_x11video.h in Headers */, + AAC07100195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */, 04BD041112E6671800899322 /* SDL_x11window.h in Headers */, 041B2CAC12FA0D680087D585 /* SDL_sysrender.h in Headers */, 04409B9512FA97ED00FB9AA8 /* mmx.h in Headers */, @@ -2100,6 +2113,7 @@ DB313FDC17554B71006C0E22 /* SDL_loadso.h in Headers */, DB313FDD17554B71006C0E22 /* SDL_log.h in Headers */, DB313FDE17554B71006C0E22 /* SDL_main.h in Headers */, + AAC07107195606770073DCDF /* SDL_opengles2_khrplatform.h in Headers */, DB0F489317C400E6008798C5 /* SDL_messagebox.h in Headers */, DB313FDF17554B71006C0E22 /* SDL_mouse.h in Headers */, DB313FE017554B71006C0E22 /* SDL_mutex.h in Headers */, @@ -2123,6 +2137,7 @@ DB313FF017554B71006C0E22 /* SDL_surface.h in Headers */, DB313FF117554B71006C0E22 /* SDL_system.h in Headers */, DB313FF217554B71006C0E22 /* SDL_syswm.h in Headers */, + AAC070FB195606770073DCDF /* SDL_opengl_glext.h in Headers */, DB313FF317554B71006C0E22 /* SDL_thread.h in Headers */, DB313FF417554B71006C0E22 /* SDL_timer.h in Headers */, DB313FF517554B71006C0E22 /* SDL_touch.h in Headers */, @@ -2135,6 +2150,7 @@ DB313F7617554B71006C0E22 /* SDL_coreaudio.h in Headers */, DB313F7717554B71006C0E22 /* SDL_audio_c.h in Headers */, DB313F7817554B71006C0E22 /* SDL_audiodev_c.h in Headers */, + AAC070FE195606770073DCDF /* SDL_opengles2_gl2.h in Headers */, DB313F7917554B71006C0E22 /* SDL_audiomem.h in Headers */, DB313F7A17554B71006C0E22 /* SDL_sysaudio.h in Headers */, DB313F7B17554B71006C0E22 /* SDL_wave.h in Headers */, @@ -2172,6 +2188,7 @@ DB313F9B17554B71006C0E22 /* SDL_cocoamouse.h in Headers */, DB313F9C17554B71006C0E22 /* SDL_cocoaopengl.h in Headers */, DB313F9D17554B71006C0E22 /* SDL_cocoashape.h in Headers */, + AAC07104195606770073DCDF /* SDL_opengles2_gl2platform.h in Headers */, DB313F9E17554B71006C0E22 /* SDL_cocoavideo.h in Headers */, DB313F9F17554B71006C0E22 /* SDL_cocoawindow.h in Headers */, DB313FA017554B71006C0E22 /* SDL_nullevents_c.h in Headers */, @@ -2197,6 +2214,7 @@ DB313FB417554B71006C0E22 /* SDL_x11sym.h in Headers */, DB313FB517554B71006C0E22 /* SDL_x11touch.h in Headers */, DB313FB617554B71006C0E22 /* SDL_x11video.h in Headers */, + AAC07101195606770073DCDF /* SDL_opengles2_gl2ext.h in Headers */, DB313FB717554B71006C0E22 /* SDL_x11window.h in Headers */, DB313FB817554B71006C0E22 /* SDL_sysrender.h in Headers */, DB313FB917554B71006C0E22 /* mmx.h in Headers */, @@ -2230,7 +2248,6 @@ BECDF62A0761BA81005FE872 /* Resources */, BECDF62C0761BA81005FE872 /* Sources */, BECDF6680761BA81005FE872 /* Frameworks */, - AA5C3FDC17A8C58600D6C8A1 /* Sign Frameworks */, ); buildRules = ( ); @@ -2306,7 +2323,15 @@ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0420; + LastUpgradeCheck = 0630; + TargetAttributes = { + BECDF5FE0761BA81005FE872 = { + DevelopmentTeam = EH385AYQ6F; + }; + BECDF6BB0761BA81005FE872 = { + DevelopmentTeam = EH385AYQ6F; + }; + }; }; buildConfigurationList = 0073178E0858DB0500B2BC32 /* Build configuration list for PBXProject "SDL" */; compatibilityVersion = "Xcode 3.2"; @@ -2359,20 +2384,6 @@ /* End PBXRezBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - AA5C3FDC17A8C58600D6C8A1 /* Sign Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Sign Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "if [ \"$USER\" = \"slouken\" ]; then\n CODE_SIGN_IDENTITY=\"Mac Developer: Sam Lantinga (84TP7N5TA4)\" pkg-support/codesign-frameworks.sh || exit 1\nfi"; - }; BECDF6BD0761BA81005FE872 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 12; @@ -2380,7 +2391,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# clean up the framework, remove headers, extra files\nmkdir -p build/dmg-tmp\nxcrun CpMac -r $TARGET_BUILD_DIR/SDL2.framework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL2 -srcfolder build/dmg-tmp build/SDL2.dmg\n\n# clean up\nrm -rf build/dmg-tmp"; + shellScript = "# Sign framework\nif [ \"$SDL_CODESIGN_IDENTITY\" != \"\" ]; then\n codesign --force --deep --sign \"$SDL_CODESIGN_IDENTITY\" $TARGET_BUILD_DIR/SDL2.framework/Versions/A\nfi\n\n# clean up the framework, remove headers, extra files\nmkdir -p build/dmg-tmp\nxcrun CpMac -r $TARGET_BUILD_DIR/SDL2.framework build/dmg-tmp/\n\ncp pkg-support/resources/License.txt build/dmg-tmp\ncp pkg-support/resources/ReadMe.txt build/dmg-tmp\n\n# remove the .DS_Store files if any (we may want to provide one in the future for fancy .dmgs)\nfind build/dmg-tmp -name .DS_Store -exec rm -f \"{}\" \\;\n\n# for fancy .dmg\nmkdir -p build/dmg-tmp/.logo\ncp pkg-support/resources/SDL_DS_Store build/dmg-tmp/.DS_Store\ncp pkg-support/sdl_logo.pdf build/dmg-tmp/.logo\n\n# create the dmg\nhdiutil create -ov -fs HFS+ -volname SDL2 -srcfolder build/dmg-tmp build/SDL2.dmg\n\n# clean up\nrm -rf build/dmg-tmp"; }; /* End PBXShellScriptBuildPhase section */ @@ -2756,7 +2767,6 @@ 00CFA621106A567900758660 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; DEPLOYMENT_POSTPROCESSING = YES; GCC_ALTIVEC_EXTENSIONS = YES; GCC_AUTO_VECTORIZATION = YES; @@ -2773,14 +2783,17 @@ 00CFA622106A567900758660 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_LINK_OBJC_RUNTIME = NO; + COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; - DYLIB_CURRENT_VERSION = 3.1.0; + DYLIB_CURRENT_VERSION = 5.0.0; FRAMEWORK_VERSION = A; HEADER_SEARCH_PATHS = /usr/X11R6/include; INFOPLIST_FILE = "Info-Framework.plist"; INSTALL_PATH = "@rpath"; OTHER_LDFLAGS = "-liconv"; PRODUCT_NAME = SDL2; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = framework; }; name = Release; @@ -2788,6 +2801,7 @@ 00CFA623106A567900758660 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(GCC_PREPROCESSOR_DEFINITIONS)", "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)", @@ -2806,19 +2820,20 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "Standard DMG"; + PROVISIONING_PROFILE = ""; }; name = Release; }; 00CFA627106A568900758660 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; GCC_ALTIVEC_EXTENSIONS = YES; GCC_AUTO_VECTORIZATION = YES; GCC_ENABLE_SSE3_EXTENSIONS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_SYMBOLS_PRIVATE_EXTERN = YES; MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; STRIP_INSTALLED_PRODUCT = NO; }; @@ -2827,14 +2842,17 @@ 00CFA628106A568900758660 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_LINK_OBJC_RUNTIME = NO; + COMBINE_HIDPI_IMAGES = YES; DYLIB_COMPATIBILITY_VERSION = 1.0.0; - DYLIB_CURRENT_VERSION = 3.1.0; + DYLIB_CURRENT_VERSION = 5.0.0; FRAMEWORK_VERSION = A; HEADER_SEARCH_PATHS = /usr/X11R6/include; INFOPLIST_FILE = "Info-Framework.plist"; INSTALL_PATH = "@rpath"; OTHER_LDFLAGS = "-liconv"; PRODUCT_NAME = SDL2; + PROVISIONING_PROFILE = ""; WRAPPER_EXTENSION = framework; }; name = Debug; @@ -2842,6 +2860,7 @@ 00CFA629106A568900758660 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "$(GCC_PREPROCESSOR_DEFINITIONS)", "$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_1)", @@ -2860,12 +2879,14 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "Standard DMG"; + PROVISIONING_PROFILE = ""; }; name = Debug; }; DB31407517554B71006C0E22 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; GCC_PREPROCESSOR_DEFINITIONS = ( "$(GCC_PREPROCESSOR_DEFINITIONS)", @@ -2885,6 +2906,7 @@ DB31407617554B71006C0E22 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + COMBINE_HIDPI_IMAGES = YES; EXECUTABLE_PREFIX = lib; GCC_PREPROCESSOR_DEFINITIONS = ( "$(GCC_PREPROCESSOR_DEFINITIONS)", diff --git a/Engine/lib/sdl/Xcode/SDL/pkg-support/codesign-frameworks.sh b/Engine/lib/sdl/Xcode/SDL/pkg-support/codesign-frameworks.sh deleted file mode 100644 index 16dea25195..0000000000 --- a/Engine/lib/sdl/Xcode/SDL/pkg-support/codesign-frameworks.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -# WARNING: You may have to run Clean in Xcode after changing CODE_SIGN_IDENTITY! - -# Verify that $CODE_SIGN_IDENTITY is set -if [ -z "$CODE_SIGN_IDENTITY" ] ; then - echo "CODE_SIGN_IDENTITY needs to be non-empty for codesigning frameworks!" - - if [ "$CONFIGURATION" = "Release" ] ; then - exit 1 - else - # Codesigning is optional for non-release builds. - exit 0 - fi -fi - -SAVEIFS=$IFS -IFS=$(echo -en "\n\b") - -FRAMEWORK_DIR="${TARGET_BUILD_DIR}" - -# Loop through all frameworks -FRAMEWORKS=`find "${FRAMEWORK_DIR}" -type d -name "*.framework" | sed -e "s/\(.*\)/\1\/Versions\/A\//"` -RESULT=$? -if [[ $RESULT != 0 ]] ; then - exit 1 -fi - -echo "Found:" -echo "${FRAMEWORKS}" - -for FRAMEWORK in $FRAMEWORKS; -do - echo "Signing '${FRAMEWORK}'" - `codesign -f -v -s "${CODE_SIGN_IDENTITY}" "${FRAMEWORK}"` - RESULT=$? - if [[ $RESULT != 0 ]] ; then - exit 1 - fi -done - -# restore $IFS -IFS=$SAVEIFS diff --git a/Engine/lib/sdl/Xcode/SDL/pkg-support/resources/License.txt b/Engine/lib/sdl/Xcode/SDL/pkg-support/resources/License.txt index 4b6f777e65..3c7724df19 100644 --- a/Engine/lib/sdl/Xcode/SDL/pkg-support/resources/License.txt +++ b/Engine/lib/sdl/Xcode/SDL/pkg-support/resources/License.txt @@ -1,6 +1,6 @@ Simple DirectMedia Layer -Copyright (C) 1997-2014 Sam Lantinga +Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj b/Engine/lib/sdl/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj index a9d0a47a16..59cdd631b8 100644 --- a/Engine/lib/sdl/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj +++ b/Engine/lib/sdl/Xcode/SDLTest/SDLTest.xcodeproj/project.pbxproj @@ -82,7 +82,6 @@ 0017957F10741F7900F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 0017958010741F7900F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 0017958110741F7900F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017958210741F7900F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017958310741F7900F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017958410741F7900F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017958510741F7900F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -93,7 +92,6 @@ 001795A0107421BF00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001795A1107421BF00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001795A2107421BF00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001795A3107421BF00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001795A4107421BF00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 001795A5107421BF00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 001795A6107421BF00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -104,7 +102,6 @@ 0017971410742F3200F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 0017971510742F3200F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 0017971610742F3200F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017971710742F3200F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017971810742F3200F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017971910742F3200F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017971A10742F3200F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -115,7 +112,6 @@ 0017973B107430D600F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 0017973C107430D600F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 0017973D107430D600F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017973E107430D600F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017973F107430D600F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 00179740107430D600F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 00179741107430D600F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -126,7 +122,6 @@ 00179761107431B300F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 00179762107431B300F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 00179763107431B300F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 00179764107431B300F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 00179765107431B300F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 00179766107431B300F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 00179767107431B300F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -137,7 +132,6 @@ 00179781107432AE00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 00179782107432AE00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 00179783107432AE00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 00179784107432AE00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 00179785107432AE00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 00179786107432AE00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 00179787107432AE00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -148,7 +142,6 @@ 001797A11074334C00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001797A21074334C00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001797A31074334C00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001797A41074334C00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001797A51074334C00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 001797A61074334C00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 001797A71074334C00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -159,7 +152,6 @@ 001797C3107433C600F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001797C4107433C600F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001797C5107433C600F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001797C6107433C600F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001797C7107433C600F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 001797C8107433C600F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 001797C9107433C600F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -170,7 +162,6 @@ 001798051074355200F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001798061074355200F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001798071074355200F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001798081074355200F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001798091074355200F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017980A1074355200F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017980B1074355200F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -184,7 +175,6 @@ 001798871074392D00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001798881074392D00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001798891074392D00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017988A1074392D00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017988B1074392D00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017988C1074392D00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017988D1074392D00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -194,7 +184,6 @@ 001798A8107439DF00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001798A9107439DF00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001798AA107439DF00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001798AB107439DF00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001798AC107439DF00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 001798AD107439DF00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 001798AE107439DF00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -205,7 +194,6 @@ 001798E510743BEC00F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 001798E610743BEC00F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 001798E710743BEC00F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 001798E810743BEC00F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 001798E910743BEC00F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 001798EA10743BEC00F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 001798EB10743BEC00F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -216,7 +204,6 @@ 0017990910743F1000F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 0017990A10743F1000F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 0017990B10743F1000F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017990C10743F1000F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017990D10743F1000F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017990E10743F1000F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017990F10743F1000F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -227,7 +214,6 @@ 0017992B10743FB700F5D044 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; 0017992C10743FB700F5D044 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 0017992D10743FB700F5D044 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 0017992E10743FB700F5D044 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 0017992F10743FB700F5D044 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 0017993010743FB700F5D044 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; 0017993110743FB700F5D044 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -308,21 +294,6 @@ 002A86DC10730596007319AE /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; 002A86DD10730596007319AE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; 002A86DE10730596007319AE /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - 002A86F4107305CE007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A86F8107305CE007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A86FA107305CE007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A86FF107305CE007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8702107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8703107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8705107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8706107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8707107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8709107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A870B107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A870C107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A870E107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8710107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - 002A8711107305CF007319AE /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; 002A871610730623007319AE /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 002A871A10730623007319AE /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; 002A871C10730623007319AE /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; @@ -383,7 +354,6 @@ BBFC08C3164C6862003E6A99 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; BBFC08C4164C6862003E6A99 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; BBFC08C5164C6862003E6A99 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - BBFC08C6164C6862003E6A99 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; BBFC08C7164C6862003E6A99 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; BBFC08C8164C6862003E6A99 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; BBFC08C9164C6862003E6A99 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -405,7 +375,6 @@ DB0F48E017CA51E5008798C5 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB0F48E117CA51E5008798C5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB0F48E217CA51E5008798C5 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB0F48E317CA51E5008798C5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB0F48E417CA51E5008798C5 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB0F48E517CA51E5008798C5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB0F48E617CA51E5008798C5 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -416,7 +385,6 @@ DB0F48F617CA5212008798C5 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB0F48F717CA5212008798C5 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB0F48F817CA5212008798C5 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB0F48F917CA5212008798C5 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB0F48FA17CA5212008798C5 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB0F48FB17CA5212008798C5 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB0F48FC17CA5212008798C5 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -429,7 +397,6 @@ DB166D7616A1CFB200A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; DB166D7716A1CFB200A1396C /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863C10730545007319AE /* ForceFeedback.framework */; }; DB166D7816A1CFB200A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; - DB166D7916A1CFB200A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166D7A16A1CFD500A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; DB166D9316A1D1A500A1396C /* SDL_test_assert.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8416A1D1A500A1396C /* SDL_test_assert.c */; }; DB166D9416A1D1A500A1396C /* SDL_test_common.c in Sources */ = {isa = PBXBuildFile; fileRef = DB166D8516A1D1A500A1396C /* SDL_test_common.c */; }; @@ -459,7 +426,6 @@ DB166DB416A1D2F600A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166DB516A1D2F600A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166DB616A1D2F600A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166DB716A1D2F600A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166DB816A1D2F600A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166DB916A1D2F600A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166DBA16A1D2F600A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -470,7 +436,6 @@ DB166DCB16A1D36A00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166DCC16A1D36A00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166DCD16A1D36A00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166DCE16A1D36A00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166DCF16A1D36A00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166DD016A1D36A00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166DD116A1D36A00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -482,7 +447,6 @@ DB166DE316A1D50C00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166DE416A1D50C00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166DE516A1D50C00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166DE616A1D50C00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166DE716A1D50C00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166DE816A1D50C00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166DE916A1D50C00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -494,7 +458,6 @@ DB166DFA16A1D57C00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166DFB16A1D57C00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166DFC16A1D57C00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166DFD16A1D57C00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166DFE16A1D57C00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166DFF16A1D57C00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E0016A1D57C00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -506,7 +469,6 @@ DB166E1116A1D5AD00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E1216A1D5AD00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E1316A1D5AD00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E1416A1D5AD00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E1516A1D5AD00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E1616A1D5AD00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E1716A1D5AD00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -522,7 +484,6 @@ DB166E2E16A1D64D00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E2F16A1D64D00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E3016A1D64D00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E3116A1D64D00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E3216A1D64D00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E3316A1D64D00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E3416A1D64D00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -533,7 +494,6 @@ DB166E4416A1D69000A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E4516A1D69000A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E4616A1D69000A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E4716A1D69000A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E4816A1D69000A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E4916A1D69000A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E4A16A1D69000A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -547,7 +507,6 @@ DB166E5E16A1D6F300A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E5F16A1D6F300A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E6016A1D6F300A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E6116A1D6F300A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E6216A1D6F300A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E6316A1D6F300A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E6416A1D6F300A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -558,7 +517,6 @@ DB166E7416A1D78400A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E7516A1D78400A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E7616A1D78400A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E7716A1D78400A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E7816A1D78400A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E7916A1D78400A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E7A16A1D78400A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -568,7 +526,6 @@ DB166E8716A1D78C00A1396C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB166E8816A1D78C00A1396C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB166E8916A1D78C00A1396C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB166E8A16A1D78C00A1396C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB166E8B16A1D78C00A1396C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB166E8C16A1D78C00A1396C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB166E8D16A1D78C00A1396C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; @@ -577,29 +534,86 @@ DB166E9A16A1D7F700A1396C /* moose.dat in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5E09D20839003FC8A1 /* moose.dat */; }; DB166E9C16A1D80900A1396C /* icon.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00794E5D09D20839003FC8A1 /* icon.bmp */; }; DB166ED016A1D88100A1396C /* shapes in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB166ECF16A1D87000A1396C /* shapes */; }; - DB89957118A19ABA0092407C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F33A709CA188600EBEB88 /* Cocoa.framework */; }; - DB89957218A19ABA0092407C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863B10730545007319AE /* CoreAudio.framework */; }; - DB89957318A19ABA0092407C /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863C10730545007319AE /* ForceFeedback.framework */; }; - DB89957418A19ABA0092407C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; - DB89957518A19ABA0092407C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; - DB89957618A19ABA0092407C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB89957718A19ABA0092407C /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; - DB89957818A19ABA0092407C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; - DB89957918A19ABA0092407C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; - DB89957A18A19ABA0092407C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; - DB89958418A19B130092407C /* testhotplug.c in Sources */ = {isa = PBXBuildFile; fileRef = DB89958318A19B130092407C /* testhotplug.c */; }; DB445EEA18184B7000B306B0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F33A709CA188600EBEB88 /* Cocoa.framework */; }; DB445EEB18184B7000B306B0 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863B10730545007319AE /* CoreAudio.framework */; }; DB445EEC18184B7000B306B0 /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863C10730545007319AE /* ForceFeedback.framework */; }; DB445EED18184B7000B306B0 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; DB445EEE18184B7000B306B0 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; DB445EEF18184B7000B306B0 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; - DB445EF018184B7000B306B0 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86F2107305CE007319AE /* OpenGL.framework */; }; DB445EF118184B7000B306B0 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; DB445EF218184B7000B306B0 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; DB445EF318184B7000B306B0 /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; DB445EF418184B7000B306B0 /* libSDL_test.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DB166D7F16A1D12400A1396C /* libSDL_test.a */; }; DB445EFB18184BB600B306B0 /* testdropfile.c in Sources */ = {isa = PBXBuildFile; fileRef = DB445EFA18184BB600B306B0 /* testdropfile.c */; }; + DB89957118A19ABA0092407C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F33A709CA188600EBEB88 /* Cocoa.framework */; }; + DB89957218A19ABA0092407C /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863B10730545007319AE /* CoreAudio.framework */; }; + DB89957318A19ABA0092407C /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863C10730545007319AE /* ForceFeedback.framework */; }; + DB89957418A19ABA0092407C /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; + DB89957518A19ABA0092407C /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; + DB89957618A19ABA0092407C /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; + DB89957818A19ABA0092407C /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; + DB89957918A19ABA0092407C /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; + DB89957A18A19ABA0092407C /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; + DB89958418A19B130092407C /* testhotplug.c in Sources */ = {isa = PBXBuildFile; fileRef = DB89958318A19B130092407C /* testhotplug.c */; }; + DBEC54DD1A1A81C3005B1EAB /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + DBEC54DE1A1A81C3005B1EAB /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002F33A709CA188600EBEB88 /* Cocoa.framework */; }; + DBEC54DF1A1A81C3005B1EAB /* libSDL2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 003FA645093FFD41000C53B3 /* libSDL2.a */; }; + DBEC54E01A1A81C3005B1EAB /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863B10730545007319AE /* CoreAudio.framework */; }; + DBEC54E11A1A81C3005B1EAB /* ForceFeedback.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863C10730545007319AE /* ForceFeedback.framework */; }; + DBEC54E21A1A81C3005B1EAB /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A863D10730545007319AE /* IOKit.framework */; }; + DBEC54E31A1A81C3005B1EAB /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A869F10730593007319AE /* AudioToolbox.framework */; }; + DBEC54E41A1A81C3005B1EAB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A86A010730593007319AE /* CoreFoundation.framework */; }; + DBEC54E51A1A81C3005B1EAB /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A871410730623007319AE /* AudioUnit.framework */; }; + DBEC54E61A1A81C3005B1EAB /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 002A873910730675007319AE /* Carbon.framework */; }; + DBEC54EB1A1A8205005B1EAB /* controllermap.c in Sources */ = {isa = PBXBuildFile; fileRef = DBEC54D11A1A811D005B1EAB /* controllermap.c */; }; + DBEC54ED1A1A828A005B1EAB /* axis.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBEC54D61A1A8145005B1EAB /* axis.bmp */; }; + DBEC54EE1A1A828D005B1EAB /* button.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBEC54D71A1A8145005B1EAB /* button.bmp */; }; + DBEC54EF1A1A828F005B1EAB /* controllermap.bmp in CopyFiles */ = {isa = PBXBuildFile; fileRef = DBEC54D81A1A8145005B1EAB /* controllermap.bmp */; }; + FA73672319A54A90004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672819A54AB6004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672919A54AB9004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672A19A54AC0004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672B19A54AC2004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672C19A54AC5004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672D19A54AC7004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672E19A54ACA004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73672F19A54ACC004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673019A54AD0004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673119A54AD3004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673219A54AD5004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673319A54AD8004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673419A54ADB004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673519A54ADE004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673619A54AE1004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673719A54AE3004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673819A54AE6004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673919A54AE8004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673A19A54AEB004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673B19A54AED004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673C19A54AF0004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673D19A54AF3004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673E19A54AF6004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73673F19A54AF8004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674019A54AFB004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674119A54AFE004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674219A54B01004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674319A54B04004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674419A54B06004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674519A54B09004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674619A54B0B004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674719A54B0F004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674819A54B13004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674919A54B16004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674A19A54B19004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674B19A54B1B004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674C19A54B1F004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674D19A54B22004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674E19A54B25004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73674F19A54B28004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73675019A54B2B004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73675119A54B2F004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73675219A54B32004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; + FA73675319A54B35004122E4 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA73672219A54A90004122E4 /* CoreVideo.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1056,6 +1070,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DBEC54EC1A1A827C005B1EAB /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 16; + files = ( + DBEC54ED1A1A828A005B1EAB /* axis.bmp in CopyFiles */, + DBEC54EE1A1A828D005B1EAB /* button.bmp in CopyFiles */, + DBEC54EF1A1A828F005B1EAB /* controllermap.bmp in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -1095,7 +1121,6 @@ 002A863D10730545007319AE /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 002A869F10730593007319AE /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; sourceTree = ""; }; 002A86A010730593007319AE /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; - 002A86F2107305CE007319AE /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; 002A871410730623007319AE /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; sourceTree = ""; }; 002A873910730675007319AE /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; 002F33A709CA188600EBEB88 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; @@ -1182,11 +1207,17 @@ DB166E7E16A1D78400A1396C /* testspriteminimal */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testspriteminimal; sourceTree = BUILT_PRODUCTS_DIR; }; DB166E9116A1D78C00A1396C /* teststreaming */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = teststreaming; sourceTree = BUILT_PRODUCTS_DIR; }; DB166ECF16A1D87000A1396C /* shapes */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shapes; path = ../../test/shapes; sourceTree = ""; }; - DB89957E18A19ABA0092407C /* testhotplug */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testhotplug; sourceTree = BUILT_PRODUCTS_DIR; }; - DB89958318A19B130092407C /* testhotplug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testhotplug.c; path = ../../test/testhotplug.c; sourceTree = ""; }; DB445EF818184B7000B306B0 /* testdropfile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testdropfile.app; sourceTree = BUILT_PRODUCTS_DIR; }; DB445EFA18184BB600B306B0 /* testdropfile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testdropfile.c; path = ../../test/testdropfile.c; sourceTree = ""; }; + DB89957E18A19ABA0092407C /* testhotplug */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testhotplug; sourceTree = BUILT_PRODUCTS_DIR; }; + DB89958318A19B130092407C /* testhotplug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testhotplug.c; path = ../../test/testhotplug.c; sourceTree = ""; }; DBBC552C182831D700F3CA8D /* TestDropFile-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "TestDropFile-Info.plist"; sourceTree = ""; }; + DBEC54D11A1A811D005B1EAB /* controllermap.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = controllermap.c; path = ../../test/controllermap.c; sourceTree = ""; }; + DBEC54D61A1A8145005B1EAB /* axis.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = axis.bmp; path = ../../test/axis.bmp; sourceTree = ""; }; + DBEC54D71A1A8145005B1EAB /* button.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = button.bmp; path = ../../test/button.bmp; sourceTree = ""; }; + DBEC54D81A1A8145005B1EAB /* controllermap.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; name = controllermap.bmp; path = ../../test/controllermap.bmp; sourceTree = ""; }; + DBEC54EA1A1A81C3005B1EAB /* controllermap */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = controllermap; sourceTree = BUILT_PRODUCTS_DIR; }; + FA73672219A54A90004122E4 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = /System/Library/Frameworks/CoreVideo.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1194,13 +1225,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672919A54AB9004122E4 /* CoreVideo.framework in Frameworks */, 0017957C10741F7900F5D044 /* Cocoa.framework in Frameworks */, 0017957D10741F7900F5D044 /* CoreAudio.framework in Frameworks */, 0017957E10741F7900F5D044 /* ForceFeedback.framework in Frameworks */, 0017957F10741F7900F5D044 /* IOKit.framework in Frameworks */, 0017958010741F7900F5D044 /* AudioToolbox.framework in Frameworks */, 0017958110741F7900F5D044 /* CoreFoundation.framework in Frameworks */, - 0017958210741F7900F5D044 /* OpenGL.framework in Frameworks */, 0017958310741F7900F5D044 /* AudioUnit.framework in Frameworks */, 0017958410741F7900F5D044 /* Carbon.framework in Frameworks */, 0017958510741F7900F5D044 /* libSDL2.a in Frameworks */, @@ -1211,13 +1242,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672A19A54AC0004122E4 /* CoreVideo.framework in Frameworks */, 0017959D107421BF00F5D044 /* Cocoa.framework in Frameworks */, 0017959E107421BF00F5D044 /* CoreAudio.framework in Frameworks */, 0017959F107421BF00F5D044 /* ForceFeedback.framework in Frameworks */, 001795A0107421BF00F5D044 /* IOKit.framework in Frameworks */, 001795A1107421BF00F5D044 /* AudioToolbox.framework in Frameworks */, 001795A2107421BF00F5D044 /* CoreFoundation.framework in Frameworks */, - 001795A3107421BF00F5D044 /* OpenGL.framework in Frameworks */, 001795A4107421BF00F5D044 /* AudioUnit.framework in Frameworks */, 001795A5107421BF00F5D044 /* Carbon.framework in Frameworks */, 001795A6107421BF00F5D044 /* libSDL2.a in Frameworks */, @@ -1228,13 +1259,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673319A54AD8004122E4 /* CoreVideo.framework in Frameworks */, 0017971110742F3200F5D044 /* Cocoa.framework in Frameworks */, 0017971210742F3200F5D044 /* CoreAudio.framework in Frameworks */, 0017971310742F3200F5D044 /* ForceFeedback.framework in Frameworks */, 0017971410742F3200F5D044 /* IOKit.framework in Frameworks */, 0017971510742F3200F5D044 /* AudioToolbox.framework in Frameworks */, 0017971610742F3200F5D044 /* CoreFoundation.framework in Frameworks */, - 0017971710742F3200F5D044 /* OpenGL.framework in Frameworks */, 0017971810742F3200F5D044 /* AudioUnit.framework in Frameworks */, 0017971910742F3200F5D044 /* Carbon.framework in Frameworks */, 0017971A10742F3200F5D044 /* libSDL2.a in Frameworks */, @@ -1246,13 +1277,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673419A54ADB004122E4 /* CoreVideo.framework in Frameworks */, 00179738107430D600F5D044 /* Cocoa.framework in Frameworks */, 00179739107430D600F5D044 /* CoreAudio.framework in Frameworks */, 0017973A107430D600F5D044 /* ForceFeedback.framework in Frameworks */, 0017973B107430D600F5D044 /* IOKit.framework in Frameworks */, 0017973C107430D600F5D044 /* AudioToolbox.framework in Frameworks */, 0017973D107430D600F5D044 /* CoreFoundation.framework in Frameworks */, - 0017973E107430D600F5D044 /* OpenGL.framework in Frameworks */, 0017973F107430D600F5D044 /* AudioUnit.framework in Frameworks */, 00179740107430D600F5D044 /* Carbon.framework in Frameworks */, 00179741107430D600F5D044 /* libSDL2.a in Frameworks */, @@ -1263,13 +1294,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672B19A54AC2004122E4 /* CoreVideo.framework in Frameworks */, 0017975E107431B300F5D044 /* Cocoa.framework in Frameworks */, 0017975F107431B300F5D044 /* CoreAudio.framework in Frameworks */, 00179760107431B300F5D044 /* ForceFeedback.framework in Frameworks */, 00179761107431B300F5D044 /* IOKit.framework in Frameworks */, 00179762107431B300F5D044 /* AudioToolbox.framework in Frameworks */, 00179763107431B300F5D044 /* CoreFoundation.framework in Frameworks */, - 00179764107431B300F5D044 /* OpenGL.framework in Frameworks */, 00179765107431B300F5D044 /* AudioUnit.framework in Frameworks */, 00179766107431B300F5D044 /* Carbon.framework in Frameworks */, 00179767107431B300F5D044 /* libSDL2.a in Frameworks */, @@ -1281,13 +1312,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673719A54AE3004122E4 /* CoreVideo.framework in Frameworks */, 0017977E107432AE00F5D044 /* Cocoa.framework in Frameworks */, 0017977F107432AE00F5D044 /* CoreAudio.framework in Frameworks */, 00179780107432AE00F5D044 /* ForceFeedback.framework in Frameworks */, 00179781107432AE00F5D044 /* IOKit.framework in Frameworks */, 00179782107432AE00F5D044 /* AudioToolbox.framework in Frameworks */, 00179783107432AE00F5D044 /* CoreFoundation.framework in Frameworks */, - 00179784107432AE00F5D044 /* OpenGL.framework in Frameworks */, 00179785107432AE00F5D044 /* AudioUnit.framework in Frameworks */, 00179786107432AE00F5D044 /* Carbon.framework in Frameworks */, 00179787107432AE00F5D044 /* libSDL2.a in Frameworks */, @@ -1299,13 +1330,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673819A54AE6004122E4 /* CoreVideo.framework in Frameworks */, 0017979E1074334C00F5D044 /* Cocoa.framework in Frameworks */, 0017979F1074334C00F5D044 /* CoreAudio.framework in Frameworks */, 001797A01074334C00F5D044 /* ForceFeedback.framework in Frameworks */, 001797A11074334C00F5D044 /* IOKit.framework in Frameworks */, 001797A21074334C00F5D044 /* AudioToolbox.framework in Frameworks */, 001797A31074334C00F5D044 /* CoreFoundation.framework in Frameworks */, - 001797A41074334C00F5D044 /* OpenGL.framework in Frameworks */, 001797A51074334C00F5D044 /* AudioUnit.framework in Frameworks */, 001797A61074334C00F5D044 /* Carbon.framework in Frameworks */, 001797A71074334C00F5D044 /* libSDL2.a in Frameworks */, @@ -1317,13 +1348,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673B19A54AED004122E4 /* CoreVideo.framework in Frameworks */, 001797C0107433C600F5D044 /* Cocoa.framework in Frameworks */, 001797C1107433C600F5D044 /* CoreAudio.framework in Frameworks */, 001797C2107433C600F5D044 /* ForceFeedback.framework in Frameworks */, 001797C3107433C600F5D044 /* IOKit.framework in Frameworks */, 001797C4107433C600F5D044 /* AudioToolbox.framework in Frameworks */, 001797C5107433C600F5D044 /* CoreFoundation.framework in Frameworks */, - 001797C6107433C600F5D044 /* OpenGL.framework in Frameworks */, 001797C7107433C600F5D044 /* AudioUnit.framework in Frameworks */, 001797C8107433C600F5D044 /* Carbon.framework in Frameworks */, 001797C9107433C600F5D044 /* libSDL2.a in Frameworks */, @@ -1334,13 +1365,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673E19A54AF6004122E4 /* CoreVideo.framework in Frameworks */, 001798021074355200F5D044 /* Cocoa.framework in Frameworks */, 001798031074355200F5D044 /* CoreAudio.framework in Frameworks */, 001798041074355200F5D044 /* ForceFeedback.framework in Frameworks */, 001798051074355200F5D044 /* IOKit.framework in Frameworks */, 001798061074355200F5D044 /* AudioToolbox.framework in Frameworks */, 001798071074355200F5D044 /* CoreFoundation.framework in Frameworks */, - 001798081074355200F5D044 /* OpenGL.framework in Frameworks */, 001798091074355200F5D044 /* AudioUnit.framework in Frameworks */, 0017980A1074355200F5D044 /* Carbon.framework in Frameworks */, 0017980B1074355200F5D044 /* libSDL2.a in Frameworks */, @@ -1351,13 +1382,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673F19A54AF8004122E4 /* CoreVideo.framework in Frameworks */, 001798841074392D00F5D044 /* Cocoa.framework in Frameworks */, 001798851074392D00F5D044 /* CoreAudio.framework in Frameworks */, 001798861074392D00F5D044 /* ForceFeedback.framework in Frameworks */, 001798871074392D00F5D044 /* IOKit.framework in Frameworks */, 001798881074392D00F5D044 /* AudioToolbox.framework in Frameworks */, 001798891074392D00F5D044 /* CoreFoundation.framework in Frameworks */, - 0017988A1074392D00F5D044 /* OpenGL.framework in Frameworks */, 0017988B1074392D00F5D044 /* AudioUnit.framework in Frameworks */, 0017988C1074392D00F5D044 /* Carbon.framework in Frameworks */, 0017988D1074392D00F5D044 /* libSDL2.a in Frameworks */, @@ -1368,13 +1399,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674219A54B01004122E4 /* CoreVideo.framework in Frameworks */, 001798A5107439DF00F5D044 /* Cocoa.framework in Frameworks */, 001798A6107439DF00F5D044 /* CoreAudio.framework in Frameworks */, 001798A7107439DF00F5D044 /* ForceFeedback.framework in Frameworks */, 001798A8107439DF00F5D044 /* IOKit.framework in Frameworks */, 001798A9107439DF00F5D044 /* AudioToolbox.framework in Frameworks */, 001798AA107439DF00F5D044 /* CoreFoundation.framework in Frameworks */, - 001798AB107439DF00F5D044 /* OpenGL.framework in Frameworks */, 001798AC107439DF00F5D044 /* AudioUnit.framework in Frameworks */, 001798AD107439DF00F5D044 /* Carbon.framework in Frameworks */, 001798AE107439DF00F5D044 /* libSDL2.a in Frameworks */, @@ -1385,13 +1416,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674619A54B0B004122E4 /* CoreVideo.framework in Frameworks */, 001798E210743BEC00F5D044 /* Cocoa.framework in Frameworks */, 001798E310743BEC00F5D044 /* CoreAudio.framework in Frameworks */, 001798E410743BEC00F5D044 /* ForceFeedback.framework in Frameworks */, 001798E510743BEC00F5D044 /* IOKit.framework in Frameworks */, 001798E610743BEC00F5D044 /* AudioToolbox.framework in Frameworks */, 001798E710743BEC00F5D044 /* CoreFoundation.framework in Frameworks */, - 001798E810743BEC00F5D044 /* OpenGL.framework in Frameworks */, 001798E910743BEC00F5D044 /* AudioUnit.framework in Frameworks */, 001798EA10743BEC00F5D044 /* Carbon.framework in Frameworks */, 001798EB10743BEC00F5D044 /* libSDL2.a in Frameworks */, @@ -1402,13 +1433,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674C19A54B1F004122E4 /* CoreVideo.framework in Frameworks */, 0017990610743F1000F5D044 /* Cocoa.framework in Frameworks */, 0017990710743F1000F5D044 /* CoreAudio.framework in Frameworks */, 0017990810743F1000F5D044 /* ForceFeedback.framework in Frameworks */, 0017990910743F1000F5D044 /* IOKit.framework in Frameworks */, 0017990A10743F1000F5D044 /* AudioToolbox.framework in Frameworks */, 0017990B10743F1000F5D044 /* CoreFoundation.framework in Frameworks */, - 0017990C10743F1000F5D044 /* OpenGL.framework in Frameworks */, 0017990D10743F1000F5D044 /* AudioUnit.framework in Frameworks */, 0017990E10743F1000F5D044 /* Carbon.framework in Frameworks */, 0017990F10743F1000F5D044 /* libSDL2.a in Frameworks */, @@ -1420,13 +1451,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73675219A54B32004122E4 /* CoreVideo.framework in Frameworks */, 0017992810743FB700F5D044 /* Cocoa.framework in Frameworks */, 0017992910743FB700F5D044 /* CoreAudio.framework in Frameworks */, 0017992A10743FB700F5D044 /* ForceFeedback.framework in Frameworks */, 0017992B10743FB700F5D044 /* IOKit.framework in Frameworks */, 0017992C10743FB700F5D044 /* AudioToolbox.framework in Frameworks */, 0017992D10743FB700F5D044 /* CoreFoundation.framework in Frameworks */, - 0017992E10743FB700F5D044 /* OpenGL.framework in Frameworks */, 0017992F10743FB700F5D044 /* AudioUnit.framework in Frameworks */, 0017993010743FB700F5D044 /* Carbon.framework in Frameworks */, 0017993110743FB700F5D044 /* libSDL2.a in Frameworks */, @@ -1438,13 +1469,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672F19A54ACC004122E4 /* CoreVideo.framework in Frameworks */, 002F340B09CA1BFF00EBEB88 /* Cocoa.framework in Frameworks */, 002A866B10730548007319AE /* CoreAudio.framework in Frameworks */, 002A866C10730548007319AE /* ForceFeedback.framework in Frameworks */, 002A866D10730548007319AE /* IOKit.framework in Frameworks */, 002A86BF10730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86C010730595007319AE /* CoreFoundation.framework in Frameworks */, - 002A8702107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872410730624007319AE /* AudioUnit.framework in Frameworks */, 002A874910730676007319AE /* Carbon.framework in Frameworks */, 001794D11073667B00F5D044 /* libSDL2.a in Frameworks */, @@ -1455,13 +1486,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673619A54AE1004122E4 /* CoreVideo.framework in Frameworks */, 002F342A09CA1F0300EBEB88 /* Cocoa.framework in Frameworks */, 002A866210730547007319AE /* CoreAudio.framework in Frameworks */, 002A866310730547007319AE /* ForceFeedback.framework in Frameworks */, 002A866410730547007319AE /* IOKit.framework in Frameworks */, 002A86B910730594007319AE /* AudioToolbox.framework in Frameworks */, 002A86BA10730594007319AE /* CoreFoundation.framework in Frameworks */, - 002A86FF107305CE007319AE /* OpenGL.framework in Frameworks */, 002A872110730624007319AE /* AudioUnit.framework in Frameworks */, 002A874610730676007319AE /* Carbon.framework in Frameworks */, 001794D41073668800F5D044 /* libSDL2.a in Frameworks */, @@ -1472,13 +1503,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674019A54AFB004122E4 /* CoreVideo.framework in Frameworks */, 002F344609CA1FB300EBEB88 /* Cocoa.framework in Frameworks */, 002A868010730549007319AE /* CoreAudio.framework in Frameworks */, 002A868110730549007319AE /* ForceFeedback.framework in Frameworks */, 002A868210730549007319AE /* IOKit.framework in Frameworks */, 002A86CD10730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86CE10730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A8709107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872B10730624007319AE /* AudioUnit.framework in Frameworks */, 002A875010730677007319AE /* Carbon.framework in Frameworks */, 001794D91073669E00F5D044 /* libSDL2.a in Frameworks */, @@ -1489,13 +1520,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674119A54AFE004122E4 /* CoreVideo.framework in Frameworks */, 002F346309CA204F00EBEB88 /* Cocoa.framework in Frameworks */, 002A868610730549007319AE /* CoreAudio.framework in Frameworks */, 002A868710730549007319AE /* ForceFeedback.framework in Frameworks */, 002A868810730549007319AE /* IOKit.framework in Frameworks */, 002A86D110730596007319AE /* AudioToolbox.framework in Frameworks */, 002A86D210730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A870B107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872D10730624007319AE /* AudioUnit.framework in Frameworks */, 002A875210730677007319AE /* Carbon.framework in Frameworks */, 001794DB107366A700F5D044 /* libSDL2.a in Frameworks */, @@ -1506,6 +1537,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674B19A54B1B004122E4 /* CoreVideo.framework in Frameworks */, DB166D7116A1CFB200A1396C /* AudioToolbox.framework in Frameworks */, DB166D7216A1CFB200A1396C /* AudioUnit.framework in Frameworks */, DB166D7316A1CFB200A1396C /* Carbon.framework in Frameworks */, @@ -1514,7 +1546,6 @@ DB166D7616A1CFB200A1396C /* CoreFoundation.framework in Frameworks */, DB166D7716A1CFB200A1396C /* ForceFeedback.framework in Frameworks */, DB166D7816A1CFB200A1396C /* IOKit.framework in Frameworks */, - DB166D7916A1CFB200A1396C /* OpenGL.framework in Frameworks */, DB166D7A16A1CFD500A1396C /* libSDL2.a in Frameworks */, DB166DA416A1D21700A1396C /* libSDL_test.a in Frameworks */, ); @@ -1524,13 +1555,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673119A54AD3004122E4 /* CoreVideo.framework in Frameworks */, BBFC08C0164C6862003E6A99 /* Cocoa.framework in Frameworks */, BBFC08C1164C6862003E6A99 /* CoreAudio.framework in Frameworks */, BBFC08C2164C6862003E6A99 /* ForceFeedback.framework in Frameworks */, BBFC08C3164C6862003E6A99 /* IOKit.framework in Frameworks */, BBFC08C4164C6862003E6A99 /* AudioToolbox.framework in Frameworks */, BBFC08C5164C6862003E6A99 /* CoreFoundation.framework in Frameworks */, - BBFC08C6164C6862003E6A99 /* OpenGL.framework in Frameworks */, BBFC08C7164C6862003E6A99 /* AudioUnit.framework in Frameworks */, BBFC08C8164C6862003E6A99 /* Carbon.framework in Frameworks */, BBFC08C9164C6862003E6A99 /* libSDL2.a in Frameworks */, @@ -1541,6 +1572,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672319A54A90004122E4 /* CoreVideo.framework in Frameworks */, 002F33C109CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A863010730405007319AE /* libSDL2.a in Frameworks */, 002A864D10730546007319AE /* CoreAudio.framework in Frameworks */, @@ -1548,7 +1580,6 @@ 002A864F10730546007319AE /* IOKit.framework in Frameworks */, 002A86AB10730594007319AE /* AudioToolbox.framework in Frameworks */, 002A86AC10730594007319AE /* CoreFoundation.framework in Frameworks */, - 002A86F8107305CE007319AE /* OpenGL.framework in Frameworks */, 002A871A10730623007319AE /* AudioUnit.framework in Frameworks */, 002A873F10730675007319AE /* Carbon.framework in Frameworks */, ); @@ -1558,13 +1589,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672819A54AB6004122E4 /* CoreVideo.framework in Frameworks */, 002F33BF09CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A865310730547007319AE /* CoreAudio.framework in Frameworks */, 002A865410730547007319AE /* ForceFeedback.framework in Frameworks */, 002A865510730547007319AE /* IOKit.framework in Frameworks */, 002A86AF10730594007319AE /* AudioToolbox.framework in Frameworks */, 002A86B010730594007319AE /* CoreFoundation.framework in Frameworks */, - 002A86FA107305CE007319AE /* OpenGL.framework in Frameworks */, 002A871C10730623007319AE /* AudioUnit.framework in Frameworks */, 002A874110730676007319AE /* Carbon.framework in Frameworks */, 002A875E10730745007319AE /* libSDL2.a in Frameworks */, @@ -1575,13 +1606,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672E19A54ACA004122E4 /* CoreVideo.framework in Frameworks */, 002F33BC09CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A866E10730548007319AE /* CoreAudio.framework in Frameworks */, 002A866F10730548007319AE /* ForceFeedback.framework in Frameworks */, 002A867010730548007319AE /* IOKit.framework in Frameworks */, 002A86C110730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86C210730595007319AE /* CoreFoundation.framework in Frameworks */, - 002A8703107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872510730624007319AE /* AudioUnit.framework in Frameworks */, 002A874A10730676007319AE /* Carbon.framework in Frameworks */, 001794D01073667700F5D044 /* libSDL2.a in Frameworks */, @@ -1592,13 +1623,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674F19A54B28004122E4 /* CoreVideo.framework in Frameworks */, 002F33B809CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A868F1073054A007319AE /* CoreAudio.framework in Frameworks */, 002A86901073054A007319AE /* ForceFeedback.framework in Frameworks */, 002A86911073054A007319AE /* IOKit.framework in Frameworks */, 002A86D710730596007319AE /* AudioToolbox.framework in Frameworks */, 002A86D810730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A870E107305CF007319AE /* OpenGL.framework in Frameworks */, 002A873010730625007319AE /* AudioUnit.framework in Frameworks */, 002A875510730677007319AE /* Carbon.framework in Frameworks */, 001794DE107366B900F5D044 /* libSDL2.a in Frameworks */, @@ -1609,13 +1640,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673919A54AE8004122E4 /* CoreVideo.framework in Frameworks */, 002F33B709CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A867410730548007319AE /* CoreAudio.framework in Frameworks */, 002A867510730548007319AE /* ForceFeedback.framework in Frameworks */, 002A867610730548007319AE /* IOKit.framework in Frameworks */, 002A86C510730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86C610730595007319AE /* CoreFoundation.framework in Frameworks */, - 002A8705107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872710730624007319AE /* AudioUnit.framework in Frameworks */, 002A874C10730676007319AE /* Carbon.framework in Frameworks */, 001794D51073668D00F5D044 /* libSDL2.a in Frameworks */, @@ -1626,13 +1657,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673A19A54AEB004122E4 /* CoreVideo.framework in Frameworks */, 002F33B509CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A867710730548007319AE /* CoreAudio.framework in Frameworks */, 002A867810730548007319AE /* ForceFeedback.framework in Frameworks */, 002A867910730549007319AE /* IOKit.framework in Frameworks */, 002A86C710730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86C810730595007319AE /* CoreFoundation.framework in Frameworks */, - 002A8706107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872810730624007319AE /* AudioUnit.framework in Frameworks */, 002A874D10730677007319AE /* Carbon.framework in Frameworks */, 001794D61073669200F5D044 /* libSDL2.a in Frameworks */, @@ -1643,13 +1674,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673C19A54AF0004122E4 /* CoreVideo.framework in Frameworks */, 002F33B609CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A867A10730549007319AE /* CoreAudio.framework in Frameworks */, 002A867B10730549007319AE /* ForceFeedback.framework in Frameworks */, 002A867C10730549007319AE /* IOKit.framework in Frameworks */, 002A86C910730595007319AE /* AudioToolbox.framework in Frameworks */, 002A86CA10730595007319AE /* CoreFoundation.framework in Frameworks */, - 002A8707107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872910730624007319AE /* AudioUnit.framework in Frameworks */, 002A874E10730677007319AE /* Carbon.framework in Frameworks */, 001794D71073669700F5D044 /* libSDL2.a in Frameworks */, @@ -1660,13 +1691,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674919A54B16004122E4 /* CoreVideo.framework in Frameworks */, 002F33B209CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A868910730549007319AE /* CoreAudio.framework in Frameworks */, 002A868A10730549007319AE /* ForceFeedback.framework in Frameworks */, 002A868B1073054A007319AE /* IOKit.framework in Frameworks */, 002A86D310730596007319AE /* AudioToolbox.framework in Frameworks */, 002A86D410730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A870C107305CF007319AE /* OpenGL.framework in Frameworks */, 002A872E10730624007319AE /* AudioUnit.framework in Frameworks */, 002A875310730677007319AE /* Carbon.framework in Frameworks */, 001794DC107366AC00F5D044 /* libSDL2.a in Frameworks */, @@ -1677,13 +1708,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73675019A54B2B004122E4 /* CoreVideo.framework in Frameworks */, 002F33B009CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A86981073054A007319AE /* CoreAudio.framework in Frameworks */, 002A86991073054A007319AE /* ForceFeedback.framework in Frameworks */, 002A869A1073054A007319AE /* IOKit.framework in Frameworks */, 002A86DD10730596007319AE /* AudioToolbox.framework in Frameworks */, 002A86DE10730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A8711107305CF007319AE /* OpenGL.framework in Frameworks */, 002A873310730625007319AE /* AudioUnit.framework in Frameworks */, 002A875810730678007319AE /* Carbon.framework in Frameworks */, 001794DF107366BD00F5D044 /* libSDL2.a in Frameworks */, @@ -1694,13 +1725,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73675119A54B2F004122E4 /* CoreVideo.framework in Frameworks */, 002F33AF09CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A86951073054A007319AE /* CoreAudio.framework in Frameworks */, 002A86961073054A007319AE /* ForceFeedback.framework in Frameworks */, 002A86971073054A007319AE /* IOKit.framework in Frameworks */, 002A86DB10730596007319AE /* AudioToolbox.framework in Frameworks */, 002A86DC10730596007319AE /* CoreFoundation.framework in Frameworks */, - 002A8710107305CF007319AE /* OpenGL.framework in Frameworks */, 002A873210730625007319AE /* AudioUnit.framework in Frameworks */, 002A875710730678007319AE /* Carbon.framework in Frameworks */, 001794E0107366C100F5D044 /* libSDL2.a in Frameworks */, @@ -1711,13 +1742,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73675319A54B35004122E4 /* CoreVideo.framework in Frameworks */, 002F33AA09CA188600EBEB88 /* Cocoa.framework in Frameworks */, 002A864110730546007319AE /* CoreAudio.framework in Frameworks */, 002A864210730546007319AE /* ForceFeedback.framework in Frameworks */, 002A864310730546007319AE /* IOKit.framework in Frameworks */, 002A86A310730593007319AE /* AudioToolbox.framework in Frameworks */, 002A86A410730593007319AE /* CoreFoundation.framework in Frameworks */, - 002A86F4107305CE007319AE /* OpenGL.framework in Frameworks */, 002A871610730623007319AE /* AudioUnit.framework in Frameworks */, 002A873B10730675007319AE /* Carbon.framework in Frameworks */, 001794E5107366D900F5D044 /* libSDL2.a in Frameworks */, @@ -1728,13 +1759,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73672C19A54AC5004122E4 /* CoreVideo.framework in Frameworks */, DB0F48DD17CA51E5008798C5 /* Cocoa.framework in Frameworks */, DB0F48DE17CA51E5008798C5 /* CoreAudio.framework in Frameworks */, DB0F48DF17CA51E5008798C5 /* ForceFeedback.framework in Frameworks */, DB0F48E017CA51E5008798C5 /* IOKit.framework in Frameworks */, DB0F48E117CA51E5008798C5 /* AudioToolbox.framework in Frameworks */, DB0F48E217CA51E5008798C5 /* CoreFoundation.framework in Frameworks */, - DB0F48E317CA51E5008798C5 /* OpenGL.framework in Frameworks */, DB0F48E417CA51E5008798C5 /* AudioUnit.framework in Frameworks */, DB0F48E517CA51E5008798C5 /* Carbon.framework in Frameworks */, DB0F48E617CA51E5008798C5 /* libSDL2.a in Frameworks */, @@ -1745,13 +1776,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673019A54AD0004122E4 /* CoreVideo.framework in Frameworks */, DB0F48F317CA5212008798C5 /* Cocoa.framework in Frameworks */, DB0F48F417CA5212008798C5 /* CoreAudio.framework in Frameworks */, DB0F48F517CA5212008798C5 /* ForceFeedback.framework in Frameworks */, DB0F48F617CA5212008798C5 /* IOKit.framework in Frameworks */, DB0F48F717CA5212008798C5 /* AudioToolbox.framework in Frameworks */, DB0F48F817CA5212008798C5 /* CoreFoundation.framework in Frameworks */, - DB0F48F917CA5212008798C5 /* OpenGL.framework in Frameworks */, DB0F48FA17CA5212008798C5 /* AudioUnit.framework in Frameworks */, DB0F48FB17CA5212008798C5 /* Carbon.framework in Frameworks */, DB0F48FC17CA5212008798C5 /* libSDL2.a in Frameworks */, @@ -1769,13 +1800,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673219A54AD5004122E4 /* CoreVideo.framework in Frameworks */, DB166DB116A1D2F600A1396C /* Cocoa.framework in Frameworks */, DB166DB216A1D2F600A1396C /* CoreAudio.framework in Frameworks */, DB166DB316A1D2F600A1396C /* ForceFeedback.framework in Frameworks */, DB166DB416A1D2F600A1396C /* IOKit.framework in Frameworks */, DB166DB516A1D2F600A1396C /* AudioToolbox.framework in Frameworks */, DB166DB616A1D2F600A1396C /* CoreFoundation.framework in Frameworks */, - DB166DB716A1D2F600A1396C /* OpenGL.framework in Frameworks */, DB166DB816A1D2F600A1396C /* AudioUnit.framework in Frameworks */, DB166DB916A1D2F600A1396C /* Carbon.framework in Frameworks */, DB166DBA16A1D2F600A1396C /* libSDL2.a in Frameworks */, @@ -1786,13 +1817,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673D19A54AF3004122E4 /* CoreVideo.framework in Frameworks */, DB166DC816A1D36A00A1396C /* Cocoa.framework in Frameworks */, DB166DC916A1D36A00A1396C /* CoreAudio.framework in Frameworks */, DB166DCA16A1D36A00A1396C /* ForceFeedback.framework in Frameworks */, DB166DCB16A1D36A00A1396C /* IOKit.framework in Frameworks */, DB166DCC16A1D36A00A1396C /* AudioToolbox.framework in Frameworks */, DB166DCD16A1D36A00A1396C /* CoreFoundation.framework in Frameworks */, - DB166DCE16A1D36A00A1396C /* OpenGL.framework in Frameworks */, DB166DCF16A1D36A00A1396C /* AudioUnit.framework in Frameworks */, DB166DD016A1D36A00A1396C /* Carbon.framework in Frameworks */, DB166DD116A1D36A00A1396C /* libSDL2.a in Frameworks */, @@ -1803,13 +1834,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674319A54B04004122E4 /* CoreVideo.framework in Frameworks */, DB166DE016A1D50C00A1396C /* Cocoa.framework in Frameworks */, DB166DE116A1D50C00A1396C /* CoreAudio.framework in Frameworks */, DB166DE216A1D50C00A1396C /* ForceFeedback.framework in Frameworks */, DB166DE316A1D50C00A1396C /* IOKit.framework in Frameworks */, DB166DE416A1D50C00A1396C /* AudioToolbox.framework in Frameworks */, DB166DE516A1D50C00A1396C /* CoreFoundation.framework in Frameworks */, - DB166DE616A1D50C00A1396C /* OpenGL.framework in Frameworks */, DB166DE716A1D50C00A1396C /* AudioUnit.framework in Frameworks */, DB166DE816A1D50C00A1396C /* Carbon.framework in Frameworks */, DB166DE916A1D50C00A1396C /* libSDL2.a in Frameworks */, @@ -1821,13 +1852,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674419A54B06004122E4 /* CoreVideo.framework in Frameworks */, DB166DF716A1D57C00A1396C /* Cocoa.framework in Frameworks */, DB166DF816A1D57C00A1396C /* CoreAudio.framework in Frameworks */, DB166DF916A1D57C00A1396C /* ForceFeedback.framework in Frameworks */, DB166DFA16A1D57C00A1396C /* IOKit.framework in Frameworks */, DB166DFB16A1D57C00A1396C /* AudioToolbox.framework in Frameworks */, DB166DFC16A1D57C00A1396C /* CoreFoundation.framework in Frameworks */, - DB166DFD16A1D57C00A1396C /* OpenGL.framework in Frameworks */, DB166DFE16A1D57C00A1396C /* AudioUnit.framework in Frameworks */, DB166DFF16A1D57C00A1396C /* Carbon.framework in Frameworks */, DB166E0016A1D57C00A1396C /* libSDL2.a in Frameworks */, @@ -1839,13 +1870,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674519A54B09004122E4 /* CoreVideo.framework in Frameworks */, DB166E0E16A1D5AD00A1396C /* Cocoa.framework in Frameworks */, DB166E0F16A1D5AD00A1396C /* CoreAudio.framework in Frameworks */, DB166E1016A1D5AD00A1396C /* ForceFeedback.framework in Frameworks */, DB166E1116A1D5AD00A1396C /* IOKit.framework in Frameworks */, DB166E1216A1D5AD00A1396C /* AudioToolbox.framework in Frameworks */, DB166E1316A1D5AD00A1396C /* CoreFoundation.framework in Frameworks */, - DB166E1416A1D5AD00A1396C /* OpenGL.framework in Frameworks */, DB166E1516A1D5AD00A1396C /* AudioUnit.framework in Frameworks */, DB166E1616A1D5AD00A1396C /* Carbon.framework in Frameworks */, DB166E1716A1D5AD00A1396C /* libSDL2.a in Frameworks */, @@ -1857,13 +1888,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674719A54B0F004122E4 /* CoreVideo.framework in Frameworks */, DB166E2B16A1D64D00A1396C /* Cocoa.framework in Frameworks */, DB166E2C16A1D64D00A1396C /* CoreAudio.framework in Frameworks */, DB166E2D16A1D64D00A1396C /* ForceFeedback.framework in Frameworks */, DB166E2E16A1D64D00A1396C /* IOKit.framework in Frameworks */, DB166E2F16A1D64D00A1396C /* AudioToolbox.framework in Frameworks */, DB166E3016A1D64D00A1396C /* CoreFoundation.framework in Frameworks */, - DB166E3116A1D64D00A1396C /* OpenGL.framework in Frameworks */, DB166E3216A1D64D00A1396C /* AudioUnit.framework in Frameworks */, DB166E3316A1D64D00A1396C /* Carbon.framework in Frameworks */, DB166E3416A1D64D00A1396C /* libSDL2.a in Frameworks */, @@ -1874,13 +1905,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674819A54B13004122E4 /* CoreVideo.framework in Frameworks */, DB166E4116A1D69000A1396C /* Cocoa.framework in Frameworks */, DB166E4216A1D69000A1396C /* CoreAudio.framework in Frameworks */, DB166E4316A1D69000A1396C /* ForceFeedback.framework in Frameworks */, DB166E4416A1D69000A1396C /* IOKit.framework in Frameworks */, DB166E4516A1D69000A1396C /* AudioToolbox.framework in Frameworks */, DB166E4616A1D69000A1396C /* CoreFoundation.framework in Frameworks */, - DB166E4716A1D69000A1396C /* OpenGL.framework in Frameworks */, DB166E4816A1D69000A1396C /* AudioUnit.framework in Frameworks */, DB166E4916A1D69000A1396C /* Carbon.framework in Frameworks */, DB166E4A16A1D69000A1396C /* libSDL2.a in Frameworks */, @@ -1892,13 +1923,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674A19A54B19004122E4 /* CoreVideo.framework in Frameworks */, DB166E5B16A1D6F300A1396C /* Cocoa.framework in Frameworks */, DB166E5C16A1D6F300A1396C /* CoreAudio.framework in Frameworks */, DB166E5D16A1D6F300A1396C /* ForceFeedback.framework in Frameworks */, DB166E5E16A1D6F300A1396C /* IOKit.framework in Frameworks */, DB166E5F16A1D6F300A1396C /* AudioToolbox.framework in Frameworks */, DB166E6016A1D6F300A1396C /* CoreFoundation.framework in Frameworks */, - DB166E6116A1D6F300A1396C /* OpenGL.framework in Frameworks */, DB166E6216A1D6F300A1396C /* AudioUnit.framework in Frameworks */, DB166E6316A1D6F300A1396C /* Carbon.framework in Frameworks */, DB166E6416A1D6F300A1396C /* libSDL2.a in Frameworks */, @@ -1909,13 +1940,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674D19A54B22004122E4 /* CoreVideo.framework in Frameworks */, DB166E7116A1D78400A1396C /* Cocoa.framework in Frameworks */, DB166E7216A1D78400A1396C /* CoreAudio.framework in Frameworks */, DB166E7316A1D78400A1396C /* ForceFeedback.framework in Frameworks */, DB166E7416A1D78400A1396C /* IOKit.framework in Frameworks */, DB166E7516A1D78400A1396C /* AudioToolbox.framework in Frameworks */, DB166E7616A1D78400A1396C /* CoreFoundation.framework in Frameworks */, - DB166E7716A1D78400A1396C /* OpenGL.framework in Frameworks */, DB166E7816A1D78400A1396C /* AudioUnit.framework in Frameworks */, DB166E7916A1D78400A1396C /* Carbon.framework in Frameworks */, DB166E7A16A1D78400A1396C /* libSDL2.a in Frameworks */, @@ -1926,51 +1957,68 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73674E19A54B25004122E4 /* CoreVideo.framework in Frameworks */, DB166E8416A1D78C00A1396C /* Cocoa.framework in Frameworks */, DB166E8516A1D78C00A1396C /* CoreAudio.framework in Frameworks */, DB166E8616A1D78C00A1396C /* ForceFeedback.framework in Frameworks */, DB166E8716A1D78C00A1396C /* IOKit.framework in Frameworks */, DB166E8816A1D78C00A1396C /* AudioToolbox.framework in Frameworks */, DB166E8916A1D78C00A1396C /* CoreFoundation.framework in Frameworks */, - DB166E8A16A1D78C00A1396C /* OpenGL.framework in Frameworks */, DB166E8B16A1D78C00A1396C /* AudioUnit.framework in Frameworks */, DB166E8C16A1D78C00A1396C /* Carbon.framework in Frameworks */, DB166E8D16A1D78C00A1396C /* libSDL2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; + DB445EE918184B7000B306B0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FA73672D19A54AC7004122E4 /* CoreVideo.framework in Frameworks */, + DB445EEA18184B7000B306B0 /* Cocoa.framework in Frameworks */, + DB445EEB18184B7000B306B0 /* CoreAudio.framework in Frameworks */, + DB445EEC18184B7000B306B0 /* ForceFeedback.framework in Frameworks */, + DB445EED18184B7000B306B0 /* IOKit.framework in Frameworks */, + DB445EEE18184B7000B306B0 /* AudioToolbox.framework in Frameworks */, + DB445EEF18184B7000B306B0 /* CoreFoundation.framework in Frameworks */, + DB445EF118184B7000B306B0 /* AudioUnit.framework in Frameworks */, + DB445EF218184B7000B306B0 /* Carbon.framework in Frameworks */, + DB445EF318184B7000B306B0 /* libSDL2.a in Frameworks */, + DB445EF418184B7000B306B0 /* libSDL_test.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; DB89957018A19ABA0092407C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FA73673519A54ADE004122E4 /* CoreVideo.framework in Frameworks */, DB89957118A19ABA0092407C /* Cocoa.framework in Frameworks */, DB89957218A19ABA0092407C /* CoreAudio.framework in Frameworks */, DB89957318A19ABA0092407C /* ForceFeedback.framework in Frameworks */, DB89957418A19ABA0092407C /* IOKit.framework in Frameworks */, DB89957518A19ABA0092407C /* AudioToolbox.framework in Frameworks */, DB89957618A19ABA0092407C /* CoreFoundation.framework in Frameworks */, - DB89957718A19ABA0092407C /* OpenGL.framework in Frameworks */, DB89957818A19ABA0092407C /* AudioUnit.framework in Frameworks */, DB89957918A19ABA0092407C /* Carbon.framework in Frameworks */, DB89957A18A19ABA0092407C /* libSDL2.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - DB445EE918184B7000B306B0 /* Frameworks */ = { + DBEC54DC1A1A81C3005B1EAB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DB445EEA18184B7000B306B0 /* Cocoa.framework in Frameworks */, - DB445EEB18184B7000B306B0 /* CoreAudio.framework in Frameworks */, - DB445EEC18184B7000B306B0 /* ForceFeedback.framework in Frameworks */, - DB445EED18184B7000B306B0 /* IOKit.framework in Frameworks */, - DB445EEE18184B7000B306B0 /* AudioToolbox.framework in Frameworks */, - DB445EEF18184B7000B306B0 /* CoreFoundation.framework in Frameworks */, - DB445EF018184B7000B306B0 /* OpenGL.framework in Frameworks */, - DB445EF118184B7000B306B0 /* AudioUnit.framework in Frameworks */, - DB445EF218184B7000B306B0 /* Carbon.framework in Frameworks */, - DB445EF318184B7000B306B0 /* libSDL2.a in Frameworks */, - DB445EF418184B7000B306B0 /* libSDL_test.a in Frameworks */, + DBEC54DD1A1A81C3005B1EAB /* CoreVideo.framework in Frameworks */, + DBEC54DE1A1A81C3005B1EAB /* Cocoa.framework in Frameworks */, + DBEC54DF1A1A81C3005B1EAB /* libSDL2.a in Frameworks */, + DBEC54E01A1A81C3005B1EAB /* CoreAudio.framework in Frameworks */, + DBEC54E11A1A81C3005B1EAB /* ForceFeedback.framework in Frameworks */, + DBEC54E21A1A81C3005B1EAB /* IOKit.framework in Frameworks */, + DBEC54E31A1A81C3005B1EAB /* AudioToolbox.framework in Frameworks */, + DBEC54E41A1A81C3005B1EAB /* CoreFoundation.framework in Frameworks */, + DBEC54E51A1A81C3005B1EAB /* AudioUnit.framework in Frameworks */, + DBEC54E61A1A81C3005B1EAB /* Carbon.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1980,6 +2028,7 @@ 002F33A209CA183B00EBEB88 /* Linked Frameworks */ = { isa = PBXGroup; children = ( + FA73672219A54A90004122E4 /* CoreVideo.framework */, 002A869F10730593007319AE /* AudioToolbox.framework */, 002A871410730623007319AE /* AudioUnit.framework */, 002A873910730675007319AE /* Carbon.framework */, @@ -1988,7 +2037,6 @@ 002A86A010730593007319AE /* CoreFoundation.framework */, 002A863C10730545007319AE /* ForceFeedback.framework */, 002A863D10730545007319AE /* IOKit.framework */, - 002A86F2107305CE007319AE /* OpenGL.framework */, ); name = "Linked Frameworks"; sourceTree = ""; @@ -2007,13 +2055,16 @@ 00794E4609D207B4003FC8A1 /* Resources */ = { isa = PBXGroup; children = ( - DBBC552C182831D700F3CA8D /* TestDropFile-Info.plist */, - DB166ECF16A1D87000A1396C /* shapes */, + DBEC54D61A1A8145005B1EAB /* axis.bmp */, + DBEC54D71A1A8145005B1EAB /* button.bmp */, + DBEC54D81A1A8145005B1EAB /* controllermap.bmp */, 00794E5D09D20839003FC8A1 /* icon.bmp */, 00794E5E09D20839003FC8A1 /* moose.dat */, 00794E5F09D20839003FC8A1 /* picture.xbm */, 00794E6109D20839003FC8A1 /* sample.bmp */, 00794E6209D20839003FC8A1 /* sample.wav */, + DB166ECF16A1D87000A1396C /* shapes */, + DBBC552C182831D700F3CA8D /* TestDropFile-Info.plist */, 00794E6309D20839003FC8A1 /* utf8.txt */, ); name = Resources; @@ -2037,6 +2088,7 @@ isa = PBXGroup; children = ( 092D6D10FFB30A2C7F000001 /* checkkeys.c */, + DBEC54D11A1A811D005B1EAB /* controllermap.c */, 083E4872006D84C97F000001 /* loopwave.c */, 0017958F1074216E00F5D044 /* testatomic.c */, 001795B01074222D00F5D044 /* testaudioinfo.c */, @@ -2138,6 +2190,7 @@ DB0F490117CA5212008798C5 /* testfilesystem */, DB89957E18A19ABA0092407C /* testhotplug */, DB445EF818184B7000B306B0 /* testdropfile.app */, + DBEC54EA1A1A81C3005B1EAB /* controllermap */, ); name = Products; sourceTree = ""; @@ -2894,6 +2947,22 @@ productReference = DB166E9116A1D78C00A1396C /* teststreaming */; productType = "com.apple.product-type.tool"; }; + DB445EE618184B7000B306B0 /* testdropfile */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */; + buildPhases = ( + DB445EE718184B7000B306B0 /* Sources */, + DB445EE918184B7000B306B0 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = testdropfile; + productName = testdropfile; + productReference = DB445EF818184B7000B306B0 /* testdropfile.app */; + productType = "com.apple.product-type.application"; + }; DB89956D18A19ABA0092407C /* testhotplug */ = { isa = PBXNativeTarget; buildConfigurationList = DB89957B18A19ABA0092407C /* Build configuration list for PBXNativeTarget "testhotplug" */; @@ -2910,21 +2979,22 @@ productReference = DB89957E18A19ABA0092407C /* testhotplug */; productType = "com.apple.product-type.tool"; }; - DB445EE618184B7000B306B0 /* testdropfile */ = { + DBEC54D91A1A81C3005B1EAB /* controllermap */ = { isa = PBXNativeTarget; - buildConfigurationList = DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */; + buildConfigurationList = DBEC54E71A1A81C3005B1EAB /* Build configuration list for PBXNativeTarget "controllermap" */; buildPhases = ( - DB445EE718184B7000B306B0 /* Sources */, - DB445EE918184B7000B306B0 /* Frameworks */, + DBEC54DA1A1A81C3005B1EAB /* Sources */, + DBEC54DC1A1A81C3005B1EAB /* Frameworks */, + DBEC54EC1A1A827C005B1EAB /* CopyFiles */, ); buildRules = ( ); dependencies = ( ); - name = testdropfile; - productName = testdropfile; - productReference = DB445EF818184B7000B306B0 /* testdropfile.app */; - productType = "com.apple.product-type.application"; + name = controllermap; + productName = checkkeys; + productReference = DBEC54EA1A1A81C3005B1EAB /* controllermap */; + productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ @@ -2958,6 +3028,7 @@ BEC566920761D90300A33029 /* All */, DB166D7E16A1D12400A1396C /* SDL_test */, BEC566AB0761D90300A33029 /* checkkeys */, + DBEC54D91A1A81C3005B1EAB /* controllermap */, BEC566C50761D90300A33029 /* loopwave */, 0017957410741F7900F5D044 /* testatomic */, 00179595107421BF00F5D044 /* testaudioinfo */, @@ -3406,6 +3477,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DB445EE718184B7000B306B0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB445EFB18184BB600B306B0 /* testdropfile.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; DB89956E18A19ABA0092407C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3414,11 +3493,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DB445EE718184B7000B306B0 /* Sources */ = { + DBEC54DA1A1A81C3005B1EAB /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB445EFB18184BB600B306B0 /* testdropfile.c in Sources */, + DBEC54EB1A1A8205005B1EAB /* controllermap.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4309,6 +4388,22 @@ }; name = Release; }; + DB445EF618184B7000B306B0 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = "TestDropFile-Info.plist"; + PRODUCT_NAME = testdropfile; + }; + name = Debug; + }; + DB445EF718184B7000B306B0 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + INFOPLIST_FILE = "TestDropFile-Info.plist"; + PRODUCT_NAME = testdropfile; + }; + name = Release; + }; DB89957C18A19ABA0092407C /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4323,19 +4418,17 @@ }; name = Release; }; - DB445EF618184B7000B306B0 /* Debug */ = { + DBEC54E81A1A81C3005B1EAB /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - INFOPLIST_FILE = "TestDropFile-Info.plist"; - PRODUCT_NAME = testdropfile; + PRODUCT_NAME = controllermap; }; name = Debug; }; - DB445EF718184B7000B306B0 /* Release */ = { + DBEC54E91A1A81C3005B1EAB /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - INFOPLIST_FILE = "TestDropFile-Info.plist"; - PRODUCT_NAME = testdropfile; + PRODUCT_NAME = controllermap; }; name = Release; }; @@ -4756,6 +4849,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB445EF618184B7000B306B0 /* Debug */, + DB445EF718184B7000B306B0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; DB89957B18A19ABA0092407C /* Build configuration list for PBXNativeTarget "testhotplug" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -4765,11 +4867,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; - DB445EF518184B7000B306B0 /* Build configuration list for PBXNativeTarget "testdropfile" */ = { + DBEC54E71A1A81C3005B1EAB /* Build configuration list for PBXNativeTarget "controllermap" */ = { isa = XCConfigurationList; buildConfigurations = ( - DB445EF618184B7000B306B0 /* Debug */, - DB445EF718184B7000B306B0 /* Release */, + DBEC54E81A1A81C3005B1EAB /* Debug */, + DBEC54E91A1A81C3005B1EAB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; diff --git a/Engine/lib/sdl/acinclude/libtool.m4 b/Engine/lib/sdl/acinclude/libtool.m4 index c444a5ed05..0eb07c8afe 100644 --- a/Engine/lib/sdl/acinclude/libtool.m4 +++ b/Engine/lib/sdl/acinclude/libtool.m4 @@ -2186,13 +2186,20 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2 or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi diff --git a/Engine/lib/sdl/android-project/AndroidManifest.xml b/Engine/lib/sdl/android-project/AndroidManifest.xml deleted file mode 100644 index dc8450a61e..0000000000 --- a/Engine/lib/sdl/android-project/AndroidManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Engine/lib/sdl/android-project/ant.properties b/Engine/lib/sdl/android-project/ant.properties deleted file mode 100644 index b0971e891e..0000000000 --- a/Engine/lib/sdl/android-project/ant.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked into Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/Engine/lib/sdl/android-project/build.properties b/Engine/lib/sdl/android-project/build.properties deleted file mode 100644 index edc7f23050..0000000000 --- a/Engine/lib/sdl/android-project/build.properties +++ /dev/null @@ -1,17 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked in Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. - diff --git a/Engine/lib/sdl/android-project/build.xml b/Engine/lib/sdl/android-project/build.xml deleted file mode 100644 index 9f19a077b1..0000000000 --- a/Engine/lib/sdl/android-project/build.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Engine/lib/sdl/android-project/default.properties b/Engine/lib/sdl/android-project/default.properties deleted file mode 100644 index 0cdab9561b..0000000000 --- a/Engine/lib/sdl/android-project/default.properties +++ /dev/null @@ -1,11 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system use, -# "build.properties", and override values to adapt the script to your -# project structure. - -# Project target. -target=android-12 diff --git a/Engine/lib/sdl/android-project/jni/Android.mk b/Engine/lib/sdl/android-project/jni/Android.mk deleted file mode 100644 index 5053e7d643..0000000000 --- a/Engine/lib/sdl/android-project/jni/Android.mk +++ /dev/null @@ -1 +0,0 @@ -include $(call all-subdir-makefiles) diff --git a/Engine/lib/sdl/android-project/jni/Application.mk b/Engine/lib/sdl/android-project/jni/Application.mk deleted file mode 100644 index e5b50793b9..0000000000 --- a/Engine/lib/sdl/android-project/jni/Application.mk +++ /dev/null @@ -1,6 +0,0 @@ - -# Uncomment this if you're using STL in your project -# See CPLUSPLUS-SUPPORT.html in the NDK documentation for more information -# APP_STL := stlport_static - -APP_ABI := armeabi armeabi-v7a x86 diff --git a/Engine/lib/sdl/android-project/jni/src/Android.mk b/Engine/lib/sdl/android-project/jni/src/Android.mk deleted file mode 100644 index 943a8cdbe2..0000000000 --- a/Engine/lib/sdl/android-project/jni/src/Android.mk +++ /dev/null @@ -1,19 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := main - -SDL_PATH := ../SDL - -LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include - -# Add your application source files here... -LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ - YourSourceHere.c - -LOCAL_SHARED_LIBRARIES := SDL2 - -LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog - -include $(BUILD_SHARED_LIBRARY) diff --git a/Engine/lib/sdl/android-project/jni/src/Android_static.mk b/Engine/lib/sdl/android-project/jni/src/Android_static.mk deleted file mode 100644 index faed669c0e..0000000000 --- a/Engine/lib/sdl/android-project/jni/src/Android_static.mk +++ /dev/null @@ -1,12 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := main - -LOCAL_SRC_FILES := YourSourceHere.c - -LOCAL_STATIC_LIBRARIES := SDL2_static - -include $(BUILD_SHARED_LIBRARY) -$(call import-module,SDL)LOCAL_PATH := $(call my-dir) diff --git a/Engine/lib/sdl/android-project/proguard-project.txt b/Engine/lib/sdl/android-project/proguard-project.txt deleted file mode 100644 index f2fe1559a2..0000000000 --- a/Engine/lib/sdl/android-project/proguard-project.txt +++ /dev/null @@ -1,20 +0,0 @@ -# To enable ProGuard in your project, edit project.properties -# to define the proguard.config property as described in that file. -# -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in ${sdk.dir}/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the ProGuard -# include property in project.properties. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/Engine/lib/sdl/android-project/project.properties b/Engine/lib/sdl/android-project/project.properties deleted file mode 100644 index 0f507e5300..0000000000 --- a/Engine/lib/sdl/android-project/project.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-12 diff --git a/Engine/lib/sdl/android-project/res/drawable-hdpi/ic_launcher.png b/Engine/lib/sdl/android-project/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index d50bdaae06..0000000000 Binary files a/Engine/lib/sdl/android-project/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/Engine/lib/sdl/android-project/res/drawable-mdpi/ic_launcher.png b/Engine/lib/sdl/android-project/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 0a299eb3cc..0000000000 Binary files a/Engine/lib/sdl/android-project/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/Engine/lib/sdl/android-project/res/drawable-xhdpi/ic_launcher.png b/Engine/lib/sdl/android-project/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index a336ad5c2b..0000000000 Binary files a/Engine/lib/sdl/android-project/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/Engine/lib/sdl/android-project/res/drawable-xxhdpi/ic_launcher.png b/Engine/lib/sdl/android-project/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index d423dac262..0000000000 Binary files a/Engine/lib/sdl/android-project/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/Engine/lib/sdl/android-project/res/layout/main.xml b/Engine/lib/sdl/android-project/res/layout/main.xml deleted file mode 100644 index 123c4b6eac..0000000000 --- a/Engine/lib/sdl/android-project/res/layout/main.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - diff --git a/Engine/lib/sdl/android-project/res/values/strings.xml b/Engine/lib/sdl/android-project/res/values/strings.xml deleted file mode 100644 index 9bce51cb36..0000000000 --- a/Engine/lib/sdl/android-project/res/values/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - SDL App - diff --git a/Engine/lib/sdl/android-project/src/org/libsdl/app/SDLActivity.java b/Engine/lib/sdl/android-project/src/org/libsdl/app/SDLActivity.java deleted file mode 100644 index 49a1d38f8a..0000000000 --- a/Engine/lib/sdl/android-project/src/org/libsdl/app/SDLActivity.java +++ /dev/null @@ -1,1074 +0,0 @@ -package org.libsdl.app; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import android.app.*; -import android.content.*; -import android.view.*; -import android.view.inputmethod.BaseInputConnection; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputConnection; -import android.view.inputmethod.InputMethodManager; -import android.widget.AbsoluteLayout; -import android.os.*; -import android.util.Log; -import android.graphics.*; -import android.media.*; -import android.hardware.*; - - -/** - SDL Activity -*/ -public class SDLActivity extends Activity { - private static final String TAG = "SDL"; - - // Keep track of the paused state - public static boolean mIsPaused, mIsSurfaceReady, mHasFocus; - public static boolean mExitCalledFromJava; - - // Main components - protected static SDLActivity mSingleton; - protected static SDLSurface mSurface; - protected static View mTextEdit; - protected static ViewGroup mLayout; - protected static SDLJoystickHandler mJoystickHandler; - - // This is what SDL runs in. It invokes SDL_main(), eventually - protected static Thread mSDLThread; - - // Audio - protected static AudioTrack mAudioTrack; - - // Load the .so - static { - System.loadLibrary("SDL2"); - //System.loadLibrary("SDL2_image"); - //System.loadLibrary("SDL2_mixer"); - //System.loadLibrary("SDL2_net"); - //System.loadLibrary("SDL2_ttf"); - System.loadLibrary("main"); - } - - - public static void initialize() { - // The static nature of the singleton and Android quirkyness force us to initialize everything here - // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values - mSingleton = null; - mSurface = null; - mTextEdit = null; - mLayout = null; - mJoystickHandler = null; - mSDLThread = null; - mAudioTrack = null; - mExitCalledFromJava = false; - mIsPaused = false; - mIsSurfaceReady = false; - mHasFocus = true; - } - - // Setup - @Override - protected void onCreate(Bundle savedInstanceState) { - Log.v("SDL", "onCreate():" + mSingleton); - super.onCreate(savedInstanceState); - - SDLActivity.initialize(); - // So we can call stuff from static callbacks - mSingleton = this; - - // Set up the surface - mSurface = new SDLSurface(getApplication()); - - if(Build.VERSION.SDK_INT >= 12) { - mJoystickHandler = new SDLJoystickHandler_API12(); - } - else { - mJoystickHandler = new SDLJoystickHandler(); - } - - mLayout = new AbsoluteLayout(this); - mLayout.addView(mSurface); - - setContentView(mLayout); - } - - // Events - @Override - protected void onPause() { - Log.v("SDL", "onPause()"); - super.onPause(); - SDLActivity.handlePause(); - } - - @Override - protected void onResume() { - Log.v("SDL", "onResume()"); - super.onResume(); - SDLActivity.handleResume(); - } - - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - Log.v("SDL", "onWindowFocusChanged(): " + hasFocus); - - SDLActivity.mHasFocus = hasFocus; - if (hasFocus) { - SDLActivity.handleResume(); - } - } - - @Override - public void onLowMemory() { - Log.v("SDL", "onLowMemory()"); - super.onLowMemory(); - SDLActivity.nativeLowMemory(); - } - - @Override - protected void onDestroy() { - Log.v("SDL", "onDestroy()"); - // Send a quit message to the application - SDLActivity.mExitCalledFromJava = true; - SDLActivity.nativeQuit(); - - // Now wait for the SDL thread to quit - if (SDLActivity.mSDLThread != null) { - try { - SDLActivity.mSDLThread.join(); - } catch(Exception e) { - Log.v("SDL", "Problem stopping thread: " + e); - } - SDLActivity.mSDLThread = null; - - //Log.v("SDL", "Finished waiting for SDL thread"); - } - - super.onDestroy(); - // Reset everything in case the user re opens the app - SDLActivity.initialize(); - } - - @Override - public boolean dispatchKeyEvent(KeyEvent event) { - int keyCode = event.getKeyCode(); - // Ignore certain special keys so they're handled by Android - if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || - keyCode == KeyEvent.KEYCODE_VOLUME_UP || - keyCode == KeyEvent.KEYCODE_CAMERA || - keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */ - keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */ - ) { - return false; - } - return super.dispatchKeyEvent(event); - } - - /** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed - * is the first to be called, mIsSurfaceReady should still be set - * to 'true' during the call to onPause (in a usual scenario). - */ - public static void handlePause() { - if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) { - SDLActivity.mIsPaused = true; - SDLActivity.nativePause(); - mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false); - } - } - - /** Called by onResume or surfaceCreated. An actual resume should be done only when the surface is ready. - * Note: Some Android variants may send multiple surfaceChanged events, so we don't need to resume - * every time we get one of those events, only if it comes after surfaceDestroyed - */ - public static void handleResume() { - if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) { - SDLActivity.mIsPaused = false; - SDLActivity.nativeResume(); - mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); - } - } - - /* The native thread has finished */ - public static void handleNativeExit() { - SDLActivity.mSDLThread = null; - mSingleton.finish(); - } - - - // Messages from the SDLMain thread - static final int COMMAND_CHANGE_TITLE = 1; - static final int COMMAND_UNUSED = 2; - static final int COMMAND_TEXTEDIT_HIDE = 3; - - protected static final int COMMAND_USER = 0x8000; - - /** - * This method is called by SDL if SDL did not handle a message itself. - * This happens if a received message contains an unsupported command. - * Method can be overwritten to handle Messages in a different class. - * @param command the command of the message. - * @param param the parameter of the message. May be null. - * @return if the message was handled in overridden method. - */ - protected boolean onUnhandledMessage(int command, Object param) { - return false; - } - - /** - * A Handler class for Messages from native SDL applications. - * It uses current Activities as target (e.g. for the title). - * static to prevent implicit references to enclosing object. - */ - protected static class SDLCommandHandler extends Handler { - @Override - public void handleMessage(Message msg) { - Context context = getContext(); - if (context == null) { - Log.e(TAG, "error handling message, getContext() returned null"); - return; - } - switch (msg.arg1) { - case COMMAND_CHANGE_TITLE: - if (context instanceof Activity) { - ((Activity) context).setTitle((String)msg.obj); - } else { - Log.e(TAG, "error handling message, getContext() returned no Activity"); - } - break; - case COMMAND_TEXTEDIT_HIDE: - if (mTextEdit != null) { - mTextEdit.setVisibility(View.GONE); - - InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); - } - break; - - default: - if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { - Log.e(TAG, "error handling message, command is " + msg.arg1); - } - } - } - } - - // Handler for the messages - Handler commandHandler = new SDLCommandHandler(); - - // Send a message from the SDLMain thread - boolean sendCommand(int command, Object data) { - Message msg = commandHandler.obtainMessage(); - msg.arg1 = command; - msg.obj = data; - return commandHandler.sendMessage(msg); - } - - // C functions we call - public static native void nativeInit(); - public static native void nativeLowMemory(); - public static native void nativeQuit(); - public static native void nativePause(); - public static native void nativeResume(); - public static native void onNativeResize(int x, int y, int format); - public static native int onNativePadDown(int device_id, int keycode); - public static native int onNativePadUp(int device_id, int keycode); - public static native void onNativeJoy(int device_id, int axis, - float value); - public static native void onNativeHat(int device_id, int hat_id, - int x, int y); - public static native void onNativeKeyDown(int keycode); - public static native void onNativeKeyUp(int keycode); - public static native void onNativeKeyboardFocusLost(); - public static native void onNativeTouch(int touchDevId, int pointerFingerId, - int action, float x, - float y, float p); - public static native void onNativeAccel(float x, float y, float z); - public static native void onNativeSurfaceChanged(); - public static native void onNativeSurfaceDestroyed(); - public static native void nativeFlipBuffers(); - public static native int nativeAddJoystick(int device_id, String name, - int is_accelerometer, int nbuttons, - int naxes, int nhats, int nballs); - public static native int nativeRemoveJoystick(int device_id); - - public static void flipBuffers() { - SDLActivity.nativeFlipBuffers(); - } - - public static boolean setActivityTitle(String title) { - // Called from SDLMain() thread and can't directly affect the view - return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); - } - - public static boolean sendMessage(int command, int param) { - return mSingleton.sendCommand(command, Integer.valueOf(param)); - } - - public static Context getContext() { - return mSingleton; - } - - /** - * @return result of getSystemService(name) but executed on UI thread. - */ - public Object getSystemServiceFromUiThread(final String name) { - final Object lock = new Object(); - final Object[] results = new Object[2]; // array for writable variables - synchronized (lock) { - runOnUiThread(new Runnable() { - @Override - public void run() { - synchronized (lock) { - results[0] = getSystemService(name); - results[1] = Boolean.TRUE; - lock.notify(); - } - } - }); - if (results[1] == null) { - try { - lock.wait(); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - } - } - return results[0]; - } - - static class ShowTextInputTask implements Runnable { - /* - * This is used to regulate the pan&scan method to have some offset from - * the bottom edge of the input region and the top edge of an input - * method (soft keyboard) - */ - static final int HEIGHT_PADDING = 15; - - public int x, y, w, h; - - public ShowTextInputTask(int x, int y, int w, int h) { - this.x = x; - this.y = y; - this.w = w; - this.h = h; - } - - @Override - public void run() { - AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams( - w, h + HEIGHT_PADDING, x, y); - - if (mTextEdit == null) { - mTextEdit = new DummyEdit(getContext()); - - mLayout.addView(mTextEdit, params); - } else { - mTextEdit.setLayoutParams(params); - } - - mTextEdit.setVisibility(View.VISIBLE); - mTextEdit.requestFocus(); - - InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); - imm.showSoftInput(mTextEdit, 0); - } - } - - public static boolean showTextInput(int x, int y, int w, int h) { - // Transfer the task to the main thread as a Runnable - return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); - } - - public static Surface getNativeSurface() { - return SDLActivity.mSurface.getNativeSurface(); - } - - // Audio - public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) { - int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO; - int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; - int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1); - - Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); - - // Let the user pick a larger buffer if they really want -- but ye - // gods they probably shouldn't, the minimums are horrifyingly high - // latency already - desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize); - - if (mAudioTrack == null) { - mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, - channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM); - - // Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid - // Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java - // Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState() - - if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) { - Log.e("SDL", "Failed during initialization of Audio Track"); - mAudioTrack = null; - return -1; - } - - mAudioTrack.play(); - } - - Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer"); - - return 0; - } - - public static void audioWriteShortBuffer(short[] buffer) { - for (int i = 0; i < buffer.length; ) { - int result = mAudioTrack.write(buffer, i, buffer.length - i); - if (result > 0) { - i += result; - } else if (result == 0) { - try { - Thread.sleep(1); - } catch(InterruptedException e) { - // Nom nom - } - } else { - Log.w("SDL", "SDL audio: error return from write(short)"); - return; - } - } - } - - public static void audioWriteByteBuffer(byte[] buffer) { - for (int i = 0; i < buffer.length; ) { - int result = mAudioTrack.write(buffer, i, buffer.length - i); - if (result > 0) { - i += result; - } else if (result == 0) { - try { - Thread.sleep(1); - } catch(InterruptedException e) { - // Nom nom - } - } else { - Log.w("SDL", "SDL audio: error return from write(byte)"); - return; - } - } - } - - public static void audioQuit() { - if (mAudioTrack != null) { - mAudioTrack.stop(); - mAudioTrack = null; - } - } - - // Input - - /** - * @return an array which may be empty but is never null. - */ - public static int[] inputGetInputDeviceIds(int sources) { - int[] ids = InputDevice.getDeviceIds(); - int[] filtered = new int[ids.length]; - int used = 0; - for (int i = 0; i < ids.length; ++i) { - InputDevice device = InputDevice.getDevice(ids[i]); - if ((device != null) && ((device.getSources() & sources) != 0)) { - filtered[used++] = device.getId(); - } - } - return Arrays.copyOf(filtered, used); - } - - // Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance - public static boolean handleJoystickMotionEvent(MotionEvent event) { - return mJoystickHandler.handleMotionEvent(event); - } - - public static void pollInputDevices() { - if (SDLActivity.mSDLThread != null) { - mJoystickHandler.pollInputDevices(); - } - } - -} - -/** - Simple nativeInit() runnable -*/ -class SDLMain implements Runnable { - @Override - public void run() { - // Runs SDL_main() - SDLActivity.nativeInit(); - - //Log.v("SDL", "SDL thread terminated"); - } -} - - -/** - SDLSurface. This is what we draw on, so we need to know when it's created - in order to do anything useful. - - Because of this, that's where we set up the SDL thread -*/ -class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, - View.OnKeyListener, View.OnTouchListener, SensorEventListener { - - // Sensors - protected static SensorManager mSensorManager; - protected static Display mDisplay; - - // Keep track of the surface size to normalize touch events - protected static float mWidth, mHeight; - - // Startup - public SDLSurface(Context context) { - super(context); - getHolder().addCallback(this); - - setFocusable(true); - setFocusableInTouchMode(true); - requestFocus(); - setOnKeyListener(this); - setOnTouchListener(this); - - mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); - mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); - - if(Build.VERSION.SDK_INT >= 12) { - setOnGenericMotionListener(new SDLGenericMotionListener_API12()); - } - - // Some arbitrary defaults to avoid a potential division by zero - mWidth = 1.0f; - mHeight = 1.0f; - } - - public Surface getNativeSurface() { - return getHolder().getSurface(); - } - - // Called when we have a valid drawing surface - @Override - public void surfaceCreated(SurfaceHolder holder) { - Log.v("SDL", "surfaceCreated()"); - holder.setType(SurfaceHolder.SURFACE_TYPE_GPU); - } - - // Called when we lose the surface - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - Log.v("SDL", "surfaceDestroyed()"); - // Call this *before* setting mIsSurfaceReady to 'false' - SDLActivity.handlePause(); - SDLActivity.mIsSurfaceReady = false; - SDLActivity.onNativeSurfaceDestroyed(); - } - - // Called when the surface is resized - @Override - public void surfaceChanged(SurfaceHolder holder, - int format, int width, int height) { - Log.v("SDL", "surfaceChanged()"); - - int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default - switch (format) { - case PixelFormat.A_8: - Log.v("SDL", "pixel format A_8"); - break; - case PixelFormat.LA_88: - Log.v("SDL", "pixel format LA_88"); - break; - case PixelFormat.L_8: - Log.v("SDL", "pixel format L_8"); - break; - case PixelFormat.RGBA_4444: - Log.v("SDL", "pixel format RGBA_4444"); - sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444 - break; - case PixelFormat.RGBA_5551: - Log.v("SDL", "pixel format RGBA_5551"); - sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551 - break; - case PixelFormat.RGBA_8888: - Log.v("SDL", "pixel format RGBA_8888"); - sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888 - break; - case PixelFormat.RGBX_8888: - Log.v("SDL", "pixel format RGBX_8888"); - sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888 - break; - case PixelFormat.RGB_332: - Log.v("SDL", "pixel format RGB_332"); - sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332 - break; - case PixelFormat.RGB_565: - Log.v("SDL", "pixel format RGB_565"); - sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 - break; - case PixelFormat.RGB_888: - Log.v("SDL", "pixel format RGB_888"); - // Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead? - sdlFormat = 0x16161804; // SDL_PIXELFORMAT_RGB888 - break; - default: - Log.v("SDL", "pixel format unknown " + format); - break; - } - - mWidth = width; - mHeight = height; - SDLActivity.onNativeResize(width, height, sdlFormat); - Log.v("SDL", "Window size:" + width + "x"+height); - - // Set mIsSurfaceReady to 'true' *before* making a call to handleResume - SDLActivity.mIsSurfaceReady = true; - SDLActivity.onNativeSurfaceChanged(); - - - if (SDLActivity.mSDLThread == null) { - // This is the entry point to the C app. - // Start up the C app thread and enable sensor input for the first time - - SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread"); - enableSensor(Sensor.TYPE_ACCELEROMETER, true); - SDLActivity.mSDLThread.start(); - - // Set up a listener thread to catch when the native thread ends - new Thread(new Runnable(){ - @Override - public void run(){ - try { - SDLActivity.mSDLThread.join(); - } - catch(Exception e){} - finally{ - // Native thread has finished - if (! SDLActivity.mExitCalledFromJava) { - SDLActivity.handleNativeExit(); - } - } - } - }).start(); - } - } - - // unused - @Override - public void onDraw(Canvas canvas) {} - - - // Key events - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - // Dispatch the different events depending on where they come from - // Some SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD - // So, we try to process them as DPAD or GAMEPAD events first, if that fails we try them as KEYBOARD - - if ( (event.getSource() & 0x00000401) != 0 || /* API 12: SOURCE_GAMEPAD */ - (event.getSource() & InputDevice.SOURCE_DPAD) != 0 ) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - if (SDLActivity.onNativePadDown(event.getDeviceId(), keyCode) == 0) { - return true; - } - } else if (event.getAction() == KeyEvent.ACTION_UP) { - if (SDLActivity.onNativePadUp(event.getDeviceId(), keyCode) == 0) { - return true; - } - } - } - - if( (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - //Log.v("SDL", "key down: " + keyCode); - SDLActivity.onNativeKeyDown(keyCode); - return true; - } - else if (event.getAction() == KeyEvent.ACTION_UP) { - //Log.v("SDL", "key up: " + keyCode); - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - } - - return false; - } - - // Touch events - @Override - public boolean onTouch(View v, MotionEvent event) { - /* Ref: http://developer.android.com/training/gestures/multi.html */ - final int touchDevId = event.getDeviceId(); - final int pointerCount = event.getPointerCount(); - int action = event.getActionMasked(); - int pointerFingerId; - int i = -1; - float x,y,p; - - switch(action) { - case MotionEvent.ACTION_MOVE: - for (i = 0; i < pointerCount; i++) { - pointerFingerId = event.getPointerId(i); - x = event.getX(i) / mWidth; - y = event.getY(i) / mHeight; - p = event.getPressure(i); - SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); - } - break; - - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_DOWN: - // Primary pointer up/down, the index is always zero - i = 0; - case MotionEvent.ACTION_POINTER_UP: - case MotionEvent.ACTION_POINTER_DOWN: - // Non primary pointer up/down - if (i == -1) { - i = event.getActionIndex(); - } - - pointerFingerId = event.getPointerId(i); - x = event.getX(i) / mWidth; - y = event.getY(i) / mHeight; - p = event.getPressure(i); - SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); - break; - - default: - break; - } - - return true; - } - - // Sensor events - public void enableSensor(int sensortype, boolean enabled) { - // TODO: This uses getDefaultSensor - what if we have >1 accels? - if (enabled) { - mSensorManager.registerListener(this, - mSensorManager.getDefaultSensor(sensortype), - SensorManager.SENSOR_DELAY_GAME, null); - } else { - mSensorManager.unregisterListener(this, - mSensorManager.getDefaultSensor(sensortype)); - } - } - - @Override - public void onAccuracyChanged(Sensor sensor, int accuracy) { - // TODO - } - - @Override - public void onSensorChanged(SensorEvent event) { - if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { - float x, y; - switch (mDisplay.getRotation()) { - case Surface.ROTATION_90: - x = -event.values[1]; - y = event.values[0]; - break; - case Surface.ROTATION_270: - x = event.values[1]; - y = -event.values[0]; - break; - case Surface.ROTATION_180: - x = -event.values[1]; - y = -event.values[0]; - break; - default: - x = event.values[0]; - y = event.values[1]; - break; - } - SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH, - y / SensorManager.GRAVITY_EARTH, - event.values[2] / SensorManager.GRAVITY_EARTH - 1); - } - } -} - -/* This is a fake invisible editor view that receives the input and defines the - * pan&scan region - */ -class DummyEdit extends View implements View.OnKeyListener { - InputConnection ic; - - public DummyEdit(Context context) { - super(context); - setFocusableInTouchMode(true); - setFocusable(true); - setOnKeyListener(this); - } - - @Override - public boolean onCheckIsTextEditor() { - return true; - } - - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - - // This handles the hardware keyboard input - if (event.isPrintingKey()) { - if (event.getAction() == KeyEvent.ACTION_DOWN) { - ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1); - } - return true; - } - - if (event.getAction() == KeyEvent.ACTION_DOWN) { - SDLActivity.onNativeKeyDown(keyCode); - return true; - } else if (event.getAction() == KeyEvent.ACTION_UP) { - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - - return false; - } - - // - @Override - public boolean onKeyPreIme (int keyCode, KeyEvent event) { - // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event - // FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639 - // FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not - // FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear - // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android - // FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :) - if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { - if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) { - SDLActivity.onNativeKeyboardFocusLost(); - } - } - return super.onKeyPreIme(keyCode, event); - } - - @Override - public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - ic = new SDLInputConnection(this, true); - - outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI - | 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */; - - return ic; - } -} - -class SDLInputConnection extends BaseInputConnection { - - public SDLInputConnection(View targetView, boolean fullEditor) { - super(targetView, fullEditor); - - } - - @Override - public boolean sendKeyEvent(KeyEvent event) { - - /* - * This handles the keycodes from soft keyboard (and IME-translated - * input from hardkeyboard) - */ - int keyCode = event.getKeyCode(); - if (event.getAction() == KeyEvent.ACTION_DOWN) { - if (event.isPrintingKey()) { - commitText(String.valueOf((char) event.getUnicodeChar()), 1); - } - SDLActivity.onNativeKeyDown(keyCode); - return true; - } else if (event.getAction() == KeyEvent.ACTION_UP) { - - SDLActivity.onNativeKeyUp(keyCode); - return true; - } - return super.sendKeyEvent(event); - } - - @Override - public boolean commitText(CharSequence text, int newCursorPosition) { - - nativeCommitText(text.toString(), newCursorPosition); - - return super.commitText(text, newCursorPosition); - } - - @Override - public boolean setComposingText(CharSequence text, int newCursorPosition) { - - nativeSetComposingText(text.toString(), newCursorPosition); - - return super.setComposingText(text, newCursorPosition); - } - - public native void nativeCommitText(String text, int newCursorPosition); - - public native void nativeSetComposingText(String text, int newCursorPosition); - - @Override - public boolean deleteSurroundingText(int beforeLength, int afterLength) { - // Workaround to capture backspace key. Ref: http://stackoverflow.com/questions/14560344/android-backspace-in-webview-baseinputconnection - if (beforeLength == 1 && afterLength == 0) { - // backspace - return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) - && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)); - } - - return super.deleteSurroundingText(beforeLength, afterLength); - } -} - -/* A null joystick handler for API level < 12 devices (the accelerometer is handled separately) */ -class SDLJoystickHandler { - - public boolean handleMotionEvent(MotionEvent event) { - return false; - } - - public void pollInputDevices() { - } -} - -/* Actual joystick functionality available for API >= 12 devices */ -class SDLJoystickHandler_API12 extends SDLJoystickHandler { - - class SDLJoystick { - public int device_id; - public String name; - public ArrayList axes; - public ArrayList hats; - } - class RangeComparator implements Comparator - { - @Override - public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) { - return arg0.getAxis() - arg1.getAxis(); - } - } - - private ArrayList mJoysticks; - - public SDLJoystickHandler_API12() { - - mJoysticks = new ArrayList(); - } - - @Override - public void pollInputDevices() { - int[] deviceIds = InputDevice.getDeviceIds(); - // It helps processing the device ids in reverse order - // For example, in the case of the XBox 360 wireless dongle, - // so the first controller seen by SDL matches what the receiver - // considers to be the first controller - - for(int i=deviceIds.length-1; i>-1; i--) { - SDLJoystick joystick = getJoystick(deviceIds[i]); - if (joystick == null) { - joystick = new SDLJoystick(); - InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]); - if( (joystickDevice.getSources() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { - joystick.device_id = deviceIds[i]; - joystick.name = joystickDevice.getName(); - joystick.axes = new ArrayList(); - joystick.hats = new ArrayList(); - - List ranges = joystickDevice.getMotionRanges(); - Collections.sort(ranges, new RangeComparator()); - for (InputDevice.MotionRange range : ranges ) { - if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ) { - if (range.getAxis() == MotionEvent.AXIS_HAT_X || - range.getAxis() == MotionEvent.AXIS_HAT_Y) { - joystick.hats.add(range); - } - else { - joystick.axes.add(range); - } - } - } - - mJoysticks.add(joystick); - SDLActivity.nativeAddJoystick(joystick.device_id, joystick.name, 0, -1, - joystick.axes.size(), joystick.hats.size()/2, 0); - } - } - } - - /* Check removed devices */ - ArrayList removedDevices = new ArrayList(); - for(int i=0; i < mJoysticks.size(); i++) { - int device_id = mJoysticks.get(i).device_id; - int j; - for (j=0; j < deviceIds.length; j++) { - if (device_id == deviceIds[j]) break; - } - if (j == deviceIds.length) { - removedDevices.add(device_id); - } - } - - for(int i=0; i < removedDevices.size(); i++) { - int device_id = removedDevices.get(i); - SDLActivity.nativeRemoveJoystick(device_id); - for (int j=0; j < mJoysticks.size(); j++) { - if (mJoysticks.get(j).device_id == device_id) { - mJoysticks.remove(j); - break; - } - } - } - } - - protected SDLJoystick getJoystick(int device_id) { - for(int i=0; i < mJoysticks.size(); i++) { - if (mJoysticks.get(i).device_id == device_id) { - return mJoysticks.get(i); - } - } - return null; - } - - @Override - public boolean handleMotionEvent(MotionEvent event) { - if ( (event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) { - int actionPointerIndex = event.getActionIndex(); - int action = event.getActionMasked(); - switch(action) { - case MotionEvent.ACTION_MOVE: - SDLJoystick joystick = getJoystick(event.getDeviceId()); - if ( joystick != null ) { - for (int i = 0; i < joystick.axes.size(); i++) { - InputDevice.MotionRange range = joystick.axes.get(i); - /* Normalize the value to -1...1 */ - float value = ( event.getAxisValue( range.getAxis(), actionPointerIndex) - range.getMin() ) / range.getRange() * 2.0f - 1.0f; - SDLActivity.onNativeJoy(joystick.device_id, i, value ); - } - for (int i = 0; i < joystick.hats.size(); i+=2) { - int hatX = Math.round(event.getAxisValue( joystick.hats.get(i).getAxis(), actionPointerIndex ) ); - int hatY = Math.round(event.getAxisValue( joystick.hats.get(i+1).getAxis(), actionPointerIndex ) ); - SDLActivity.onNativeHat(joystick.device_id, i/2, hatX, hatY ); - } - } - break; - default: - break; - } - } - return true; - } -} - -class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener { - // Generic Motion (mouse hover, joystick...) events go here - // We only have joysticks yet - @Override - public boolean onGenericMotion(View v, MotionEvent event) { - return SDLActivity.handleJoystickMotionEvent(event); - } -} diff --git a/Engine/lib/sdl/build-scripts/androidbuild.sh b/Engine/lib/sdl/build-scripts/androidbuild.sh index ea6e6b1bc5..8ca3c916da 100644 --- a/Engine/lib/sdl/build-scripts/androidbuild.sh +++ b/Engine/lib/sdl/build-scripts/androidbuild.sh @@ -115,7 +115,7 @@ echo "public class $ACTIVITY extends SDLActivity {}" >> "$ACTIVITY.java" # Update project and build cd $BUILDPATH -android update project --path $BUILDPATH +$ANDROID update project --path $BUILDPATH $NDKBUILD -j $NCPUS $NDKARGS $ANT debug diff --git a/Engine/lib/sdl/build-scripts/checker-buildbot.sh b/Engine/lib/sdl/build-scripts/checker-buildbot.sh new file mode 100644 index 0000000000..682e7fbbb8 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/checker-buildbot.sh @@ -0,0 +1,93 @@ +#!/bin/bash + +# This is a script used by some Buildbot buildslaves to push the project +# through Clang's static analyzer and prepare the output to be uploaded +# back to the buildmaster. You might find it useful too. + +# Install Clang (you already have it on Mac OS X, apt-get install clang +# on Ubuntu, etc), +# or download checker at http://clang-analyzer.llvm.org/ and unpack it in +# /usr/local ... update CHECKERDIR as appropriate. + +FINALDIR="$1" + +CHECKERDIR="/usr/local/checker-276" +if [ ! -d "$CHECKERDIR" ]; then + echo "$CHECKERDIR not found. Trying /usr/share/clang ..." 1>&2 + CHECKERDIR="/usr/share/clang/scan-build" +fi + +if [ ! -d "$CHECKERDIR" ]; then + echo "$CHECKERDIR not found. Giving up." 1>&2 + exit 1 +fi + +if [ -z "$MAKE" ]; then + OSTYPE=`uname -s` + if [ "$OSTYPE" == "Linux" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + elif [ "$OSTYPE" = "Darwin" ]; then + NCPU=`sysctl -n hw.ncpu` + elif [ "$OSTYPE" = "SunOS" ]; then + NCPU=`/usr/sbin/psrinfo |wc -l |sed -e 's/^ *//g;s/ *$//g'` + else + NCPU=1 + fi + + if [ -z "$NCPU" ]; then + NCPU=1 + elif [ "$NCPU" = "0" ]; then + NCPU=1 + fi + + MAKE="make -j$NCPU" +fi + +echo "\$MAKE is '$MAKE'" + +set -x +set -e + +cd `dirname "$0"` +cd .. + +rm -rf checker-buildbot analysis +if [ ! -z "$FINALDIR" ]; then + rm -rf "$FINALDIR" +fi + +mkdir checker-buildbot +cd checker-buildbot + +# You might want to do this for CMake-backed builds instead... +PATH="$CHECKERDIR:$PATH" scan-build -o analysis cmake -DCMAKE_BUILD_TYPE=Debug .. + +# ...or run configure without the scan-build wrapper... +#CC="$CHECKERDIR/libexec/ccc-analyzer" CFLAGS="-O0" ../configure + +# ...but this works for our buildbots just fine (EXCEPT ON LATEST MAC OS X). +#CFLAGS="-O0" PATH="$CHECKERDIR:$PATH" scan-build -o analysis ../configure + +rm -rf analysis +PATH="$CHECKERDIR:$PATH" scan-build -o analysis $MAKE +mv analysis/* ../analysis +rmdir analysis # Make sure this is empty. +cd .. +chmod -R a+r analysis +chmod -R go-w analysis +find analysis -type d -exec chmod a+x {} \; +if [ -x /usr/bin/xattr ]; then find analysis -exec /usr/bin/xattr -d com.apple.quarantine {} \; 2>/dev/null ; fi + +if [ ! -z "$FINALDIR" ]; then + mv analysis "$FINALDIR" +else + FINALDIR=analysis +fi + +rm -rf checker-buildbot + +echo "Done. Final output is in '$FINALDIR' ..." + +# end of checker-buildbot.sh ... + diff --git a/Engine/lib/sdl/build-scripts/config.guess b/Engine/lib/sdl/build-scripts/config.guess index ddb36220a6..68c1be32a4 100644 --- a/Engine/lib/sdl/build-scripts/config.guess +++ b/Engine/lib/sdl/build-scripts/config.guess @@ -898,6 +898,7 @@ EOF else case `sed -n '/^Hardware/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in BCM2708) MANUFACTURER=raspberry;; + BCM2709) MANUFACTURER=raspberry;; *) MANUFACTURER=unknown;; esac if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ diff --git a/Engine/lib/sdl/build-scripts/config.sub b/Engine/lib/sdl/build-scripts/config.sub index bdda9e4a32..53273f2bbf 100644 --- a/Engine/lib/sdl/build-scripts/config.sub +++ b/Engine/lib/sdl/build-scripts/config.sub @@ -359,6 +359,19 @@ case $basic_machine in i*86 | x86_64) basic_machine=$basic_machine-pc ;; + nacl64*) + basic_machine=x86_64-pc + os=-nacl + ;; + nacl*) + basic_machine=i686-pc + os=-nacl + ;; + pnacl*) + # le32-unknown-pnacl comes from http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + basic_machine=le32-unknown + os=-pnacl + ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 @@ -843,6 +856,10 @@ case $basic_machine in basic_machine=le32-unknown os=-nacl ;; + pnacl) + basic_machine=le32-unknown + os=-pnacl + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -1384,6 +1401,12 @@ case $os in ;; esac ;; + -nacl*) + os=-nacl + ;; + -pnacl*) + os=-pnacl + ;; -nto-qnx*) ;; -nto*) @@ -1506,6 +1529,12 @@ case $os in os=-dicos ;; -nacl*) + os=-nacl + ;; + -pnacl*) + os=-pnacl + ;; + -emscripten*) ;; -none) ;; diff --git a/Engine/lib/sdl/build-scripts/emscripten-buildbot.sh b/Engine/lib/sdl/build-scripts/emscripten-buildbot.sh new file mode 100644 index 0000000000..db5fb81840 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/emscripten-buildbot.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +SDKDIR="/emsdk_portable" +ENVSCRIPT="$SDKDIR/emsdk_env.sh" +if [ ! -f "$ENVSCRIPT" ]; then + echo "ERROR: This script expects the Emscripten SDK to be in '$SDKDIR'." 1>&2 + exit 1 +fi + +TARBALL="$1" +if [ -z $1 ]; then + TARBALL=sdl-emscripten.tar.xz +fi + +cd `dirname "$0"` +cd .. +SDLBASE=`pwd` + +if [ -z "$MAKE" ]; then + OSTYPE=`uname -s` + if [ "$OSTYPE" == "Linux" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + elif [ "$OSTYPE" = "Darwin" ]; then + NCPU=`sysctl -n hw.ncpu` + elif [ "$OSTYPE" = "SunOS" ]; then + NCPU=`/usr/sbin/psrinfo |wc -l |sed -e 's/^ *//g;s/ *$//g'` + else + NCPU=1 + fi + + if [ -z "$NCPU" ]; then + NCPU=1 + elif [ "$NCPU" = "0" ]; then + NCPU=1 + fi + + MAKE="make -j$NCPU" +fi + +echo "\$MAKE is '$MAKE'" + +echo "Setting up Emscripten SDK environment..." +source "$ENVSCRIPT" + +echo "Setting up..." +set -x +cd "$SDLBASE" +rm -rf buildbot +mkdir buildbot +pushd buildbot + +echo "Configuring..." +emconfigure ../configure --host=asmjs-unknown-emscripten --disable-assembly --disable-threads --enable-cpuinfo=false CFLAGS="-O2 -Wno-warn-absolute-paths -Wdeclaration-after-statement -Werror=declaration-after-statement" --prefix="$PWD/emscripten-sdl2-installed" + +echo "Building..." +emmake $MAKE + +echo "Moving things around..." +emmake $MAKE install +# Fix up a few things to a real install path +perl -w -pi -e "s#$PWD/emscripten-sdl2-installed#/usr/local#g;" ./emscripten-sdl2-installed/lib/libSDL2.la ./emscripten-sdl2-installed/lib/pkgconfig/sdl2.pc ./emscripten-sdl2-installed/bin/sdl2-config +mkdir -p ./usr +mv ./emscripten-sdl2-installed ./usr/local +popd +tar -cJvvf $TARBALL -C buildbot usr +rm -rf buildbot + +exit 0 + +# end of emscripten-buildbot.sh ... + diff --git a/Engine/lib/sdl/build-scripts/g++-fat.sh b/Engine/lib/sdl/build-scripts/g++-fat.sh index 6e4f53e7ca..29b04302fa 100644 --- a/Engine/lib/sdl/build-scripts/g++-fat.sh +++ b/Engine/lib/sdl/build-scripts/g++-fat.sh @@ -6,7 +6,7 @@ DEVELOPER="`xcode-select -print-path`/Platforms/MacOSX.platform/Developer" -# Intel 32-bit compiler flags (10.6 runtime compatibility) +# Intel 32-bit compiler flags (10.5 runtime compatibility) GCC_COMPILE_X86="g++ -arch i386 -mmacosx-version-min=10.5 \ -I/usr/local/include" @@ -34,7 +34,7 @@ while test x$1 != x; do compile=no; link=no;; -c) link=no;; -o) output=$2;; - *.c|*.cc|*.cpp|*.S) source=$1;; + *.c|*.cc|*.cpp|*.S|*.m|*.mm) source=$1;; esac shift done diff --git a/Engine/lib/sdl/build-scripts/gcc-fat.sh b/Engine/lib/sdl/build-scripts/gcc-fat.sh index edabb0d87b..e556c1dd13 100644 --- a/Engine/lib/sdl/build-scripts/gcc-fat.sh +++ b/Engine/lib/sdl/build-scripts/gcc-fat.sh @@ -35,7 +35,7 @@ while test x$1 != x; do compile=no; link=no;; -c) link=no;; -o) output=$2;; - *.c|*.cc|*.cpp|*.S) source=$1;; + *.c|*.cc|*.cpp|*.S|*.m|*.mm) source=$1;; esac shift done diff --git a/Engine/lib/sdl/build-scripts/nacl-buildbot.sh b/Engine/lib/sdl/build-scripts/nacl-buildbot.sh new file mode 100644 index 0000000000..a72333bb78 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/nacl-buildbot.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +# This is the script buildbot.libsdl.org uses to cross-compile SDL2 from +# amd64 Linux to NaCl. + +export NACL_SDK_ROOT="/nacl_sdk/pepper_35" + +TARBALL="$1" +if [ -z $1 ]; then + TARBALL=sdl-nacl.tar.xz +fi + +OSTYPE=`uname -s` +if [ "$OSTYPE" != "Linux" ]; then + # !!! FIXME + echo "This only works on x86 or x64-64 Linux at the moment." 1>&2 + exit 1 +fi + +if [ "x$MAKE" == "x" ]; then + NCPU=`cat /proc/cpuinfo |grep vendor_id |wc -l` + let NCPU=$NCPU+1 + MAKE="make -j$NCPU" +fi + +BUILDBOTDIR="nacl-buildbot" +PARENTDIR="$PWD" + +set -e +set -x +rm -f $TARBALL +rm -rf $BUILDBOTDIR +mkdir -p $BUILDBOTDIR +pushd $BUILDBOTDIR + +# !!! FIXME: ccache? +export CC="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-clang" +export CFLAGS="$CFLAGS -I$NACL_SDK_ROOT/include -I$NACL_SDK_ROOT/include/pnacl" +export AR="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ar" +export LD="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ar" +export RANLIB="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ranlib" + +../configure --host=pnacl --prefix=$PWD/nacl-sdl2-installed +$MAKE +$MAKE install +# Fix up a few things to a real install path +perl -w -pi -e "s#$PWD/nacl-sdl2-installed#/usr/local#g;" ./nacl-sdl2-installed/lib/libSDL2.la ./nacl-sdl2-installed/lib/pkgconfig/sdl2.pc ./nacl-sdl2-installed/bin/sdl2-config +mkdir -p ./usr +mv ./nacl-sdl2-installed ./usr/local + +popd +tar -cJvvf $TARBALL -C $BUILDBOTDIR usr +rm -rf $BUILDBOTDIR + +set +x +echo "All done. Final installable is in $TARBALL ..."; + diff --git a/Engine/lib/sdl/build-scripts/naclbuild.sh b/Engine/lib/sdl/build-scripts/naclbuild.sh new file mode 100644 index 0000000000..db745f9e31 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/naclbuild.sh @@ -0,0 +1,105 @@ +#!/bin/bash +if [ -z "$1" ] && [ -z "$NACL_SDK_ROOT" ]; then + echo "Usage: ./naclbuild ~/nacl/pepper_35" + echo "This will build SDL for Native Client, and testgles2.c as a demo" + echo "You can set env vars CC, AR, LD and RANLIB to override the default PNaCl toolchain used" + echo "You can set env var SOURCES to select a different source file than testgles2.c" + exit 1 +fi + +if [ -n "$1" ]; then + NACL_SDK_ROOT="$1" +fi + +CC="" + +if [ -n "$2" ]; then + CC="$2" +fi + +echo "Using SDK at $NACL_SDK_ROOT" + +export NACL_SDK_ROOT="$NACL_SDK_ROOT" +export CFLAGS="$CFLAGS -I$NACL_SDK_ROOT/include -I$NACL_SDK_ROOT/include/pnacl" + +NCPUS="1" +case "$OSTYPE" in + darwin*) + NCPU=`sysctl -n hw.ncpu` + ;; + linux*) + if [ -n `which nproc` ]; then + NCPUS=`nproc` + fi + ;; + *);; +esac + +CURDIR=`pwd -P` +SDLPATH="$( cd "$(dirname "$0")/.." ; pwd -P )" +BUILDPATH="$SDLPATH/build/nacl" +TESTBUILDPATH="$BUILDPATH/test" +SDL2_STATIC="$BUILDPATH/build/.libs/libSDL2.a" +mkdir -p $BUILDPATH +mkdir -p $TESTBUILDPATH + +if [ -z "$CC" ]; then + export CC="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-clang" +fi +if [ -z "$AR" ]; then + export AR="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ar" +fi +if [ -z "$LD" ]; then + export LD="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ar" +fi +if [ -z "$RANLIB" ]; then + export RANLIB="$NACL_SDK_ROOT/toolchain/linux_pnacl/bin/pnacl-ranlib" +fi + +if [ -z "$SOURCES" ]; then + export SOURCES="$SDLPATH/test/testgles2.c" +fi + +if [ ! -f "$CC" ]; then + echo "Could not find compiler at $CC" + exit 1 +fi + + + + +cd $BUILDPATH +$SDLPATH/configure --host=pnacl --prefix $TESTBUILDPATH +make -j$NCPUS CFLAGS="$CFLAGS -I./include" +make install + +if [ ! -f "$SDL2_STATIC" ]; then + echo "Build failed! $SDL2_STATIC" + exit 1 +fi + +echo "Building test" +cp -f $SDLPATH/test/nacl/* $TESTBUILDPATH +# Some tests need these resource files +cp -f $SDLPATH/test/*.bmp $TESTBUILDPATH +cp -f $SDLPATH/test/*.wav $TESTBUILDPATH +cp -f $SDL2_STATIC $TESTBUILDPATH + +# Copy user sources +_SOURCES=($SOURCES) +for src in "${_SOURCES[@]}" +do + cp $src $TESTBUILDPATH +done +export SOURCES="$SOURCES" + +cd $TESTBUILDPATH +make -j$NCPUS CONFIG="Release" CFLAGS="$CFLAGS -I$TESTBUILDPATH/include/SDL2 -I$SDLPATH/include" +make -j$NCPUS CONFIG="Debug" CFLAGS="$CFLAGS -I$TESTBUILDPATH/include/SDL2 -I$SDLPATH/include" + +echo +echo "Run the test with: " +echo "cd $TESTBUILDPATH;python -m SimpleHTTPServer" +echo "Then visit http://localhost:8000 with Chrome" + +cd $CURDIR diff --git a/Engine/lib/sdl/build-scripts/raspberrypi-buildbot.sh b/Engine/lib/sdl/build-scripts/raspberrypi-buildbot.sh index db258347a5..e81fbb56dc 100644 --- a/Engine/lib/sdl/build-scripts/raspberrypi-buildbot.sh +++ b/Engine/lib/sdl/build-scripts/raspberrypi-buildbot.sh @@ -12,7 +12,7 @@ TARBALL="$1" if [ -z $1 ]; then - TARBALL=sdl-raspberrypi.tar.bz2 + TARBALL=sdl-raspberrypi.tar.xz fi OSTYPE=`uname -s` @@ -42,7 +42,7 @@ SYSROOT="/opt/rpi-sysroot" export CC="ccache /opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux -L$SYSROOT/opt/vc/lib" # -L$SYSROOT/usr/lib/arm-linux-gnueabihf" # !!! FIXME: shouldn't have to --disable-* things here. -../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd --disable-video-mir +../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd --disable-video-mir --disable-video-wayland $MAKE $MAKE install # Fix up a few things to a real install path on a real Raspberry Pi... @@ -51,7 +51,7 @@ mkdir -p ./usr mv ./rpi-sdl2-installed ./usr/local popd -tar -cjvvf $TARBALL -C $BUILDBOTDIR usr +tar -cJvvf $TARBALL -C $BUILDBOTDIR usr rm -rf $BUILDBOTDIR set +x diff --git a/Engine/lib/sdl/build-scripts/update-copyright.sh b/Engine/lib/sdl/build-scripts/update-copyright.sh new file mode 100644 index 0000000000..34864bc91c --- /dev/null +++ b/Engine/lib/sdl/build-scripts/update-copyright.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +find . -type f -exec grep -Il "Copyright" {} \; \ +| grep -v \.hg \ +| while read i; \ +do \ + LC_ALL=C sed -ie "s/\(.*Copyright.*\)[0-9]\{4\}\( *Sam Lantinga\)/\1`date +%Y`\2/" "$i"; \ + rm "${i}e"; \ +done diff --git a/Engine/lib/sdl/build-scripts/windows-buildbot-zipper.bat b/Engine/lib/sdl/build-scripts/windows-buildbot-zipper.bat new file mode 100644 index 0000000000..7548cdd832 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/windows-buildbot-zipper.bat @@ -0,0 +1,31 @@ +@echo off +rem just a helper batch file for collecting up files and zipping them. +rem usage: windows-buildbot-zipper.bat +rem must be run from root of SDL source tree. + +IF EXIST VisualC\Win32\Release GOTO okaydir +echo Please run from root of source tree after doing a Release build. +GOTO done + +:okaydir +erase /q /f /s zipper +IF EXIST zipper GOTO zippermade +mkdir zipper +:zippermade +cd zipper +mkdir SDL +cd SDL +mkdir include +mkdir lib +mkdir lib\win32 +copy ..\..\include\*.h include\ +copy ..\..\VisualC\Win32\Release\SDL2.dll lib\win32\ +copy ..\..\VisualC\Win32\Release\SDL2.lib lib\win32\ +copy ..\..\VisualC\Win32\Release\SDL2main.lib lib\win32\ +cd .. +zip -9r ..\%1 SDL +cd .. +erase /q /f /s zipper + +:done + diff --git a/Engine/lib/sdl/build-scripts/winrtbuild.bat b/Engine/lib/sdl/build-scripts/winrtbuild.bat new file mode 100644 index 0000000000..fb8df481e3 --- /dev/null +++ b/Engine/lib/sdl/build-scripts/winrtbuild.bat @@ -0,0 +1,8 @@ +@ECHO OFF +REM +REM winrtbuild.bat: a batch file to help launch the winrtbuild.ps1 +REM Powershell script, either from Windows Explorer, or through Buildbot. +REM +SET ThisScriptsDirectory=%~dp0 +SET PowerShellScriptPath=%ThisScriptsDirectory%winrtbuild.ps1 +PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"; \ No newline at end of file diff --git a/Engine/lib/sdl/build-scripts/winrtbuild.ps1 b/Engine/lib/sdl/build-scripts/winrtbuild.ps1 new file mode 100644 index 0000000000..1bfa4da81d --- /dev/null +++ b/Engine/lib/sdl/build-scripts/winrtbuild.ps1 @@ -0,0 +1,294 @@ +# +# winrtbuild.ps1 -- A Powershell script to build all SDL/WinRT variants, +# across all WinRT platforms, in all of their supported, CPU architectures. +# +# Initial version written by David Ludwig +# +# This script can be launched from Windows Explorer by double-clicking +# on winrtbuild.bat +# +# Output will be placed in the following subdirectories of the SDL source +# tree: +# * VisualC-WinRT\lib\ -- final .dll, .lib, and .pdb files +# * VisualC-WinRT\obj\ -- intermediate build files +# +# Recommended Dependencies: +# * Windows 8.1 or higher +# * Powershell 4.0 or higher (included as part of Windows 8.1) +# * Visual C++ 2012, for building Windows 8.0 and Windows Phone 8.0 binaries. +# * Visual C++ 2013, for building Windows 8.1 and Windows Phone 8.1 binaries +# * SDKs for Windows 8.0, Windows 8.1, Windows Phone 8.0, and +# Windows Phone 8.1, as needed +# +# Commom parameters/variables may include, but aren't strictly limited to: +# * PlatformToolset: the name of one of Visual Studio's build platforms. +# Different PlatformToolsets output different binaries. One +# PlatformToolset exists for each WinRT platform. Possible values +# may include: +# - "v110": Visual Studio 2012 build tools, plus the Windows 8.0 SDK +# - "v110_wp80": Visual Studio 2012 build tools, plus the Windows Phone 8.0 SDK +# - "v120": Visual Studio 2013 build tools, plus the Windows 8.1 SDK +# - "v120_wp81": Visual Studio 2013 build tools, plus the Windows Phone 8.1 SDK +# * VSProjectPath: the full path to a Visual Studio or Visual C++ project file +# * VSProjectName: the internal name of a Visual Studio or Visual C++ project +# file. Some of Visual Studio's own build tools use this name when +# calculating paths for build-output. +# * Platform: a Visual Studio platform name, which often maps to a CPU +# CPU architecture. Possible values may include: "Win32" (for 32-bit x86), +# "ARM", or "x64" (for 64-bit x86). +# + +# Base version of SDL, used for packaging purposes +$SDLVersion = "2.0.4" + +# Gets the .bat file that sets up an MSBuild environment, given one of +# Visual Studio's, "PlatformToolset"s. +function Get-MSBuild-Env-Launcher +{ + param( + [Parameter(Mandatory=$true,Position=1)][string]$PlatformToolset + ) + + if ($PlatformToolset -eq "v110") { # Windows 8.0 (not Windows Phone), via VS 2012 + return "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" + } + if ($PlatformToolset -eq "v110_wp80") { # Windows Phone 8.0, via VS 2012 + return "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\WPSDK\WP80\vcvarsphoneall.bat" + } + if ($PlatformToolset -eq "v120") { # Windows 8.1 (not Windows Phone), via VS 2013 + return "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" + } + if ($PlatformToolset -eq "v120_wp81") { # Windows Phone 8.1, via VS 2013 + return "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" + } + if ($PlatformToolset -eq "v140") { # Windows 10, via VS 2015 + return "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" + } + return "" +} + +# Gets a string that identifies the build-variant of SDL/WinRT that is specific +# to a particular Visual Studio PlatformToolset. +function Get-SDL-WinRT-Variant-Name +{ + param( + [Parameter(Mandatory=$true,Position=1)][string]$PlatformToolset, + + # If true, append a string to this function's output, identifying the + # build-variant's minimum-supported version of Visual Studio. + [switch]$IncludeVSSuffix = $false + ) + + if ($PlatformToolset -eq "v110") { # Windows 8.0 (not Windows Phone), via VS 2012 project files + if ($IncludeVSSuffix) { + return "WinRT80_VS2012" + } else { + return "WinRT80" + } + } + if ($PlatformToolset -eq "v110_wp80") { # Windows Phone 8.0, via VS 2012 project files + if ($IncludeVSSuffix) { + return "WinPhone80_VS2012" + } else { + return "WinPhone80" + } + } + if ($PlatformToolset -eq "v120") { # Windows 8.1 (not Windows Phone), via VS 2013 project files + if ($IncludeVSSuffix) { + return "WinRT81_VS2013" + } else { + return "WinRT81" + } + } + if ($PlatformToolset -eq "v120_wp81") { # Windows Phone 8.1, via VS 2013 project files + if ($IncludeVSSuffix) { + return "WinPhone81_VS2013" + } else { + return "WinPhone81" + } + } + if ($PlatformToolset -eq "v140") { # Windows 10, via VS 2015 project files + if ($IncludeVSSuffix) { + return "UWP_VS2015" + } else { + return "UWP" + } + } + return "" +} + +# Returns the internal name of a Visual Studio Project. +# +# The internal name of a VS Project is encoded inside the project file +# itself, inside a set of XML tags. +function Get-VS-ProjectName +{ + param( + [Parameter(Mandatory=$true,Position=1)]$VSProjectPath + ) + + # For now, just do a regex for the project name: + $matches = (Get-Content $VSProjectPath | Select-String -Pattern ".*([^<]+)<.*").Matches + foreach ($match in $matches) { + if ($match.Groups.Count -ge 1) { + return $match.Groups[1].Value + } + } + return $null +} + +# Build a specific variant of SDL/WinRT +function Build-SDL-WinRT-Variant +{ + # + # Read in arguments: + # + param ( + # name of an SDL project file, minus extensions and + # platform-identifying suffixes + [Parameter(Mandatory=$true,Position=1)][string]$SDLProjectName, + + [Parameter(Mandatory=$true,Position=2)][string]$PlatformToolset, + + [Parameter(Mandatory=$true,Position=3)][string]$Platform + ) + + # + # Derive other properties from read-in arguments: + # + + # The .bat file to setup a platform-appropriate MSBuild environment: + $BatchFileForMSBuildEnv = Get-MSBuild-Env-Launcher $PlatformToolset + + # The full path to the VS Project that'll be built: + $VSProjectPath = "$PSScriptRoot\..\VisualC-WinRT\$(Get-SDL-WinRT-Variant-Name $PlatformToolset -IncludeVSSuffix)\$SDLProjectName-$(Get-SDL-WinRT-Variant-Name $PlatformToolset).vcxproj" + + # The internal name of the VS Project, used in some post-build steps: + $VSProjectName = Get-VS-ProjectName $VSProjectPath + + # Where to place output binaries (.dll, .lib, and .pdb files): + $OutDir = "$PSScriptRoot\..\VisualC-WinRT\lib\$(Get-SDL-WinRT-Variant-Name $PlatformToolset)\$Platform" + + # Where to place intermediate build files: + $IntermediateDir = "$PSScriptRoot\..\VisualC-WinRT\obj\$SDLProjectName-$(Get-SDL-WinRT-Variant-Name $PlatformToolset)\$Platform" + + # + # Build the VS Project: + # + cmd.exe /c " ""$BatchFileForMSBuildEnv"" x86 & msbuild ""$VSProjectPath"" /p:Configuration=Release /p:Platform=$Platform /p:OutDir=""$OutDir\\"" /p:IntDir=""$IntermediateDir\\""" | Out-Host + $BuildResult = $? + + # + # Move .dll files into place. This fixes a problem whereby MSBuild may + # put output files into a sub-directory of $OutDir, rather than $OutDir + # itself. + # + if (Test-Path "$OutDir\$VSProjectName\") { + Move-Item -Force "$OutDir\$VSProjectName\*" "$OutDir" + } + + # + # Clean up unneeded files in $OutDir: + # + if (Test-Path "$OutDir\$VSProjectName\") { + Remove-Item -Recurse "$OutDir\$VSProjectName" + } + Remove-Item "$OutDir\*.exp" + Remove-Item "$OutDir\*.ilk" + Remove-Item "$OutDir\*.pri" + + # + # All done. Indicate success, or failure, to the caller: + # + #echo "RESULT: $BuildResult" | Out-Host + return $BuildResult +} + + +# +# Build each variant, with corresponding .dll, .lib, and .pdb files: +# +$DidAnyDLLBuildFail = $false +$DidAnyNugetBuildFail = $false + +# Build for Windows Phone 8.0, via VC++ 2012: +if ( ! (Build-SDL-WinRT-Variant "SDL" "v110_wp80" "ARM")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v110_wp80" "Win32")) { $DidAnyDLLBuildFail = $true } + +# Build for Windows Phone 8.1, via VC++ 2013: +if ( ! (Build-SDL-WinRT-Variant "SDL" "v120_wp81" "ARM")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v120_wp81" "Win32")) { $DidAnyDLLBuildFail = $true } + +# Build for Windows 8.0 and Windows RT 8.0, via VC++ 2012: +if ( ! (Build-SDL-WinRT-Variant "SDL" "v110" "ARM")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v110" "Win32")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v110" "x64")) { $DidAnyDLLBuildFail = $true } + +# Build for Windows 8.1 and Windows RT 8.1, via VC++ 2013: +if ( ! (Build-SDL-WinRT-Variant "SDL" "v120" "ARM")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v120" "Win32")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v120" "x64")) { $DidAnyDLLBuildFail = $true } + +# Build for Windows 10, via VC++ 2015 +if ( ! (Build-SDL-WinRT-Variant "SDL" "v140" "ARM")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v140" "Win32")) { $DidAnyDLLBuildFail = $true } +if ( ! (Build-SDL-WinRT-Variant "SDL" "v140" "x64")) { $DidAnyDLLBuildFail = $true } + +# Build NuGet packages, if possible +if ($DidAnyDLLBuildFail -eq $true) { + Write-Warning -Message "Unable to build all variants. NuGet packages will not be built." + $DidAnyNugetBuildFail = $true +} else { + $NugetPath = (Get-Command -CommandType Application nuget.exe | %{$_.Path}) 2> $null + if ("$NugetPath" -eq "") { + Write-Warning -Message "Unable to find nuget.exe. NuGet packages will not be built." + $DidAnyNugetBuildFail = $true + } else { + Write-Host -ForegroundColor Cyan "Building SDL2 NuGet packages..." + Write-Host -ForegroundColor Cyan "... via NuGet install: $NugetPath" + $NugetOutputDir = "$PSScriptRoot\..\VisualC-WinRT\lib\nuget" + Write-Host -ForegroundColor Cyan "... output directory: $NugetOutputDir" + $SDLHGRevision = $($(hg log -l 1 --repository "$PSScriptRoot\.." | select-string "changeset") -Replace "changeset:\W*(\d+).*",'$1') 2>$null + Write-Host -ForegroundColor Cyan "... HG Revision: $SDLHGRevision" + + # Base options to nuget.exe + $NugetOptions = @("pack", "PACKAGE_NAME_WILL_GO_HERE", "-Output", "$NugetOutputDir") + + # Try attaching hg revision to NuGet package: + $NugetOptions += "-Version" + if ("$SDLHGRevision" -eq "") { + Write-Warning -Message "Unable to find the Mercurial revision (maybe hg.exe can't be found?). NuGet packages will not have this attached to their name." + $NugetOptions += "$SDLVersion-Unofficial" + } else { + $NugetOptions += "$SDLVersion.$SDLHGRevision-Unofficial" + } + + # Create NuGet output dir, if not yet created: + if ($(Test-Path "$NugetOutputDir") -eq $false) { + New-Item "$NugetOutputDir" -type directory + } + + # Package SDL2: + $NugetOptions[1] = "$PSScriptRoot\..\VisualC-WinRT\SDL2-WinRT.nuspec" + &"$NugetPath" $NugetOptions -Symbols + if ( ! $? ) { $DidAnyNugetBuildFail = $true } + + # Package SDL2main: + $NugetOptions[1] = "$PSScriptRoot\..\VisualC-WinRT\SDL2main-WinRT-NonXAML.nuspec" + &"$NugetPath" $NugetOptions + if ( ! $? ) { $DidAnyNugetBuildFail = $true } + } +} + + +# Let the script's caller know whether or not any errors occurred. +# Exit codes compatible with Buildbot are used (1 for error, 0 for success). +if ($DidAnyDLLBuildFail -eq $true) { + Write-Error -Message "Unable to build all known variants of SDL2 for WinRT" + exit 1 +} elseif ($DidAnyNugetBuildFail -eq $true) { + Write-Warning -Message "Unable to build NuGet packages" + exit 0 # Should NuGet package build failure lead to a non-failing result code instead? +} else { + exit 0 +} diff --git a/Engine/lib/sdl/cmake/macros.cmake b/Engine/lib/sdl/cmake/macros.cmake index c234a566c0..96a7ce8b14 100644 --- a/Engine/lib/sdl/cmake/macros.cmake +++ b/Engine/lib/sdl/cmake/macros.cmake @@ -66,7 +66,7 @@ endmacro() macro(CHECK_OBJC_SOURCE_COMPILES SOURCE VAR) set(PREV_REQUIRED_DEFS "${CMAKE_REQUIRED_DEFINITIONS}") - set(CMAKE_REQUIRED_DEFINITIONS "-ObjC ${PREV_REQUIRED_DEFS}") + set(CMAKE_REQUIRED_DEFINITIONS "-x objective-c ${PREV_REQUIRED_DEFS}") CHECK_C_SOURCE_COMPILES(${SOURCE} ${VAR}) set(CMAKE_REQUIRED_DEFINITIONS "${PREV_REQUIRED_DEFS}") endmacro() diff --git a/Engine/lib/sdl/cmake/sdlchecks.cmake b/Engine/lib/sdl/cmake/sdlchecks.cmake index 2cd09e6fff..7ff0985fdb 100644 --- a/Engine/lib/sdl/cmake/sdlchecks.cmake +++ b/Engine/lib/sdl/cmake/sdlchecks.cmake @@ -39,7 +39,7 @@ macro(CheckDLOPEN) set(_DLLIB ${_LIBNAME}) set(HAVE_DLOPEN TRUE) break() - endif(DLOPEN_LIB) + endif() endforeach() endif() @@ -63,7 +63,7 @@ macro(CheckDLOPEN) set(SOURCE_FILES ${SOURCE_FILES} ${DLOPEN_SOURCES}) set(HAVE_SDL_LOADSO TRUE) endif() -endmacro(CheckDLOPEN) +endmacro() # Requires: # - n/a @@ -78,23 +78,23 @@ macro(CheckOSS) check_c_source_compiles(" #include int main() { int arg = SNDCTL_DSP_SETFRAGMENT; }" OSS_FOUND) - endif(NOT OSS_FOUND) + endif() if(OSS_FOUND) set(HAVE_OSS TRUE) file(GLOB OSS_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dsp/*.c) if(OSS_HEADER_FILE STREQUAL "soundcard.h") set(SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H 1) - endif(OSS_HEADER_FILE STREQUAL "soundcard.h") + endif() set(SDL_AUDIO_DRIVER_OSS 1) set(SOURCE_FILES ${SOURCE_FILES} ${OSS_SOURCES}) if(NETBSD OR OPENBSD) list(APPEND EXTRA_LIBS ossaudio) - endif(NETBSD OR OPENBSD) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(OSS_FOUND) - endif(OSS) -endmacro(CheckOSS) + endif() + endif() +endmacro() # Requires: # - n/a @@ -117,14 +117,14 @@ macro(CheckALSA) FindLibraryAndSONAME("asound") set(SDL_AUDIO_DRIVER_ALSA_DYNAMIC "\"${ASOUND_LIB_SONAME}\"") set(HAVE_ALSA_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(ALSA_SHARED) + endif() + else() list(APPEND EXTRA_LIBS asound) - endif(ALSA_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(HAVE_ASOUNDLIB_H) - endif(ALSA) -endmacro(CheckALSA) + endif() + endif() +endmacro() # Requires: # - PkgCheckModules @@ -147,14 +147,14 @@ macro(CheckPulseAudio) FindLibraryAndSONAME("pulse-simple") set(SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "\"${PULSE_SIMPLE_LIB_SONAME}\"") set(HAVE_PULSEAUDIO_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(PULSEAUDIO_SHARED) + endif() + else() list(APPEND EXTRA_LDFLAGS ${PKG_PULSEAUDIO_LDFLAGS}) - endif(PULSEAUDIO_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(PKG_PULSEAUDIO_FOUND) - endif(PULSEAUDIO) -endmacro(CheckPulseAudio) + endif() + endif() +endmacro() # Requires: # - PkgCheckModules @@ -177,14 +177,14 @@ macro(CheckESD) FindLibraryAndSONAME(esd) set(SDL_AUDIO_DRIVER_ESD_DYNAMIC "\"${ESD_LIB_SONAME}\"") set(HAVE_ESD_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(ESD_SHARED) + endif() + else() list(APPEND EXTRA_LDFLAGS ${PKG_ESD_LDFLAGS}) - endif(ESD_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(PKG_ESD_FOUND) - endif(ESD) -endmacro(CheckESD) + endif() + endif() +endmacro() # Requires: # - n/a @@ -212,14 +212,14 @@ macro(CheckARTS) FindLibraryAndSONAME(artsc) set(SDL_AUDIO_DRIVER_ARTS_DYNAMIC "\"${ARTSC_LIB_SONAME}\"") set(HAVE_ARTS_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(ARTS_SHARED) + endif() + else() list(APPEND EXTRA_LDFLAGS ${ARTS_LIBS}) - endif(ARTS_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(ARTS_CONFIG) - endif(ARTS) -endmacro(CheckARTS) + endif() + endif() +endmacro() # Requires: # - n/a @@ -243,14 +243,14 @@ macro(CheckNAS) FindLibraryAndSONAME("audio") set(SDL_AUDIO_DRIVER_NAS_DYNAMIC "\"${AUDIO_LIB_SONAME}\"") set(HAVE_NAS_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(NAS_SHARED) + endif() + else() list(APPEND EXTRA_LIBS ${D_NAS_LIB}) - endif(NAS_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(HAVE_NAS_H AND D_NAS_LIB) - endif(NAS) -endmacro(CheckNAS) + endif() + endif() +endmacro() # Requires: # - n/a @@ -274,14 +274,14 @@ macro(CheckSNDIO) FindLibraryAndSONAME("sndio") set(SDL_AUDIO_DRIVER_SNDIO_DYNAMIC "\"${SNDIO_LIB_SONAME}\"") set(HAVE_SNDIO_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(SNDIO_SHARED) + endif() + else() list(APPEND EXTRA_LIBS ${D_SNDIO_LIB}) - endif(SNDIO_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(HAVE_SNDIO_H AND D_SNDIO_LIB) - endif(SNDIO) -endmacro(CheckSNDIO) + endif() + endif() +endmacro() # Requires: # - PkgCheckModules @@ -304,14 +304,14 @@ macro(CheckFusionSound) FindLibraryAndSONAME("fusionsound") set(SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC "\"${FUSIONSOUND_LIB_SONAME}\"") set(HAVE_FUSIONSOUND_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(FUSIONSOUND_SHARED) + endif() + else() list(APPEND EXTRA_LDFLAGS ${PKG_FUSIONSOUND_LDFLAGS}) - endif(FUSIONSOUND_SHARED) + endif() set(HAVE_SDL_AUDIO TRUE) - endif(PKG_FUSIONSOUND_FOUND) - endif(FUSIONSOUND) -endmacro(CheckFusionSound) + endif() + endif() +endmacro() # Requires: # - n/a @@ -353,34 +353,34 @@ macro(CheckX11) if(APPLE) set(X11_SHARED OFF) - endif(APPLE) + endif() check_function_exists("shmat" HAVE_SHMAT) if(NOT HAVE_SHMAT) check_library_exists(ipc shmat "" HAVE_SHMAT) if(HAVE_SHMAT) list(APPEND EXTRA_LIBS ipc) - endif(HAVE_SHMAT) + endif() if(NOT HAVE_SHMAT) add_definitions(-DNO_SHARED_MEMORY) set(X_CFLAGS "${X_CFLAGS} -DNO_SHARED_MEMORY") - endif(NOT HAVE_SHMAT) - endif(NOT HAVE_SHMAT) + endif() + endif() if(X11_SHARED) if(NOT HAVE_DLOPEN) message_warn("You must have SDL_LoadObject() support for dynamic X11 loading") set(HAVE_X11_SHARED FALSE) - else(NOT HAVE_DLOPEN) + else() set(HAVE_X11_SHARED TRUE) endif() if(HAVE_X11_SHARED) set(SDL_VIDEO_DRIVER_X11_DYNAMIC "\"${X11_LIB_SONAME}\"") set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "\"${XEXT_LIB_SONAME}\"") - else(HAVE_X11_SHARED) + else() list(APPEND EXTRA_LIBS ${X11_LIB} ${XEXT_LIB}) - endif(HAVE_X11_SHARED) - endif(X11_SHARED) + endif() + endif() set(SDL_CFLAGS "${SDL_CFLAGS} ${X_CFLAGS}") @@ -394,7 +394,7 @@ macro(CheckX11) int main(int argc, char **argv) {}" HAVE_CONST_XEXT_ADDDISPLAY) if(HAVE_CONST_XEXT_ADDDISPLAY) set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1) - endif(HAVE_CONST_XEXT_ADDDISPLAY) + endif() check_c_source_compiles(" #include @@ -407,15 +407,7 @@ macro(CheckX11) XFreeEventData(display, cookie); }" HAVE_XGENERICEVENT) if(HAVE_XGENERICEVENT) set(SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1) - endif(HAVE_XGENERICEVENT) - - check_c_source_compiles(" - #include - extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len); - int main(int argc, char **argv) {}" HAVE_CONST_XDATA32) - if(HAVE_CONST_XDATA32) - set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 1) - endif(HAVE_CONST_XDATA32) + endif() check_function_exists(XkbKeycodeToKeysym SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM) @@ -423,29 +415,29 @@ macro(CheckX11) set(HAVE_VIDEO_X11_XCURSOR TRUE) if(HAVE_X11_SHARED AND XCURSOR_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XCURSOR_LIB) + else() list(APPEND EXTRA_LIBS ${XCURSOR_LIB}) - endif(HAVE_X11_SHARED AND XCURSOR_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XCURSOR 1) - endif(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H) + endif() if(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H) set(HAVE_VIDEO_X11_XINERAMA TRUE) if(HAVE_X11_SHARED AND XINERAMA_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XINERAMA_LIB) + else() list(APPEND EXTRA_LIBS ${XINERAMA_LIB}) - endif(HAVE_X11_SHARED AND XINERAMA_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XINERAMA 1) - endif(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H) + endif() if(VIDEO_X11_XINPUT AND HAVE_XINPUT_H) set(HAVE_VIDEO_X11_XINPUT TRUE) if(HAVE_X11_SHARED AND XI_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XI_LIB) + else() list(APPEND EXTRA_LIBS ${XI_LIB}) - endif(HAVE_X11_SHARED AND XI_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XINPUT2 1) # Check for multitouch @@ -462,51 +454,56 @@ macro(CheckX11) int main(int argc, char **argv) {}" HAVE_XINPUT2_MULTITOUCH) if(HAVE_XINPUT2_MULTITOUCH) set(SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1) - endif(HAVE_XINPUT2_MULTITOUCH) - endif(VIDEO_X11_XINPUT AND HAVE_XINPUT_H) + endif() + endif() if(VIDEO_X11_XRANDR AND HAVE_XRANDR_H) if(HAVE_X11_SHARED AND XRANDR_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XRANDR_LIB) + else() list(APPEND EXTRA_LIBS ${XRANDR_LIB}) - endif(HAVE_X11_SHARED AND XRANDR_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XRANDR 1) set(HAVE_VIDEO_X11_XRANDR TRUE) - endif(VIDEO_X11_XRANDR AND HAVE_XRANDR_H) + endif() if(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H) if(HAVE_X11_SHARED AND XSS_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XSS_LIB) + else() list(APPEND EXTRA_LIBS ${XSS_LIB}) - endif(HAVE_X11_SHARED AND XSS_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1) set(HAVE_VIDEO_X11_XSCRNSAVER TRUE) - endif(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H) + endif() if(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H) set(SDL_VIDEO_DRIVER_X11_XSHAPE 1) set(HAVE_VIDEO_X11_XSHAPE TRUE) - endif(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H) + endif() if(VIDEO_X11_XVM AND HAVE_XF86VM_H) if(HAVE_X11_SHARED AND XXF86VM_LIB) set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XXF86VM_LIB_SONAME}\"") - else(HAVE_X11_SHARED AND XXF86VM_LIB) + else() list(APPEND EXTRA_LIBS ${XXF86VM_LIB}) - endif(HAVE_X11_SHARED AND XXF86VM_LIB) + endif() set(SDL_VIDEO_DRIVER_X11_XVIDMODE 1) set(HAVE_VIDEO_X11_XVM TRUE) - endif(VIDEO_X11_XVM AND HAVE_XF86VM_H) + endif() set(CMAKE_REQUIRED_LIBRARIES) - endif(X11_LIB) - endif(VIDEO_X11) -endmacro(CheckX11) + endif() + endif() +endmacro() +# Requires: +# - EGL +# - PkgCheckModules +# Optional: +# - MIR_SHARED opt +# - HAVE_DLOPEN opt macro(CheckMir) -# !!! FIXME: hook up dynamic loading here. if(VIDEO_MIR) find_library(MIR_LIB mirclient mircommon egl) pkg_check_modules(MIR_TOOLKIT mirclient mircommon) @@ -522,15 +519,31 @@ macro(CheckMir) set(SDL_VIDEO_DRIVER_MIR 1) list(APPEND EXTRA_CFLAGS ${MIR_TOOLKIT_CFLAGS} ${EGL_CLFAGS} ${XKB_CLFLAGS}) - list(APPEND EXTRA_LDFLAGS ${MIR_TOOLKIT_LDFLAGS} ${EGL_LDLAGS} ${XKB_LDLAGS}) - endif (MIR_LIB AND MIR_TOOLKIT_FOUND AND EGL_FOUND AND XKB_FOUND) - endif(VIDEO_MIR) -endmacro(CheckMir) + + if(MIR_SHARED) + if(NOT HAVE_DLOPEN) + message_warn("You must have SDL_LoadObject() support for dynamic Mir loading") + else() + FindLibraryAndSONAME(mirclient) + FindLibraryAndSONAME(xkbcommon) + set(SDL_VIDEO_DRIVER_MIR_DYNAMIC "\"${MIRCLIENT_LIB_SONAME}\"") + set(SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON "\"${XKBCOMMON_LIB_SONAME}\"") + set(HAVE_MIR_SHARED TRUE) + endif() + else() + set(EXTRA_LIBS ${MIR_TOOLKIT_LIBRARIES} ${EXTRA_LIBS}) + endif() + endif() + endif() +endmacro() # Requires: # - EGL +# - PkgCheckModules +# Optional: +# - WAYLAND_SHARED opt +# - HAVE_DLOPEN opt macro(CheckWayland) -# !!! FIXME: hook up dynamic loading here. if(VIDEO_WAYLAND) pkg_check_modules(WAYLAND wayland-client wayland-cursor wayland-egl egl xkbcommon) if(WAYLAND_FOUND) @@ -540,16 +553,38 @@ macro(CheckWayland) include_directories( ${WAYLAND_INCLUDE_DIRS} ) - set(EXTRA_LIBS ${WAYLAND_LIBRARIES} ${EXTRA_LIBS}) set(HAVE_VIDEO_WAYLAND TRUE) set(HAVE_SDL_VIDEO TRUE) file(GLOB WAYLAND_SOURCES ${SDL2_SOURCE_DIR}/src/video/wayland/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${WAYLAND_SOURCES}) + + if(VIDEO_WAYLAND_QT_TOUCH) + set(SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH 1) + endif() + + if(WAYLAND_SHARED) + if(NOT HAVE_DLOPEN) + message_warn("You must have SDL_LoadObject() support for dynamic Wayland loading") + else() + FindLibraryAndSONAME(wayland-client) + FindLibraryAndSONAME(wayland-egl) + FindLibraryAndSONAME(wayland-cursor) + FindLibraryAndSONAME(xkbcommon) + set(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC "\"${WAYLAND_CLIENT_LIB_SONAME}\"") + set(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL "\"${WAYLAND_EGL_LIB_SONAME}\"") + set(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR "\"${WAYLAND_CURSOR_LIB_SONAME}\"") + set(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON "\"${XKBCOMMON_LIB_SONAME}\"") + set(HAVE_WAYLAND_SHARED TRUE) + endif() + else() + set(EXTRA_LIBS ${WAYLAND_LIBRARIES} ${EXTRA_LIBS}) + endif() + set(SDL_VIDEO_DRIVER_WAYLAND 1) - endif(WAYLAND_FOUND) - endif(VIDEO_WAYLAND) -endmacro(CheckWayland) + endif() + endif() +endmacro() # Requires: # - n/a @@ -558,16 +593,16 @@ macro(CheckCOCOA) if(VIDEO_COCOA) if(APPLE) # Apple always has Cocoa. set(HAVE_VIDEO_COCOA TRUE) - endif(APPLE) + endif() if(HAVE_VIDEO_COCOA) file(GLOB COCOA_SOURCES ${SDL2_SOURCE_DIR}/src/video/cocoa/*.m) set_source_files_properties(${COCOA_SOURCES} PROPERTIES LANGUAGE C) set(SOURCE_FILES ${SOURCE_FILES} ${COCOA_SOURCES}) set(SDL_VIDEO_DRIVER_COCOA 1) set(HAVE_SDL_VIDEO TRUE) - endif(HAVE_VIDEO_COCOA) - endif(VIDEO_COCOA) -endmacro(CheckCOCOA) + endif() + endif() +endmacro() # Requires: # - PkgCheckModules @@ -591,14 +626,44 @@ macro(CheckDirectFB) FindLibraryAndSONAME("directfb") set(SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC "\"${DIRECTFB_LIB_SONAME}\"") set(HAVE_DIRECTFB_SHARED TRUE) - endif(NOT HAVE_DLOPEN) - else(DIRECTFB_SHARED) + endif() + else() list(APPEND EXTRA_LDFLAGS ${PKG_DIRECTFB_LDFLAGS}) - endif(DIRECTFB_SHARED) + endif() + set(HAVE_SDL_VIDEO TRUE) + endif() + endif() +endmacro() + +# Requires: +# - n/a +macro(CheckVivante) + if(VIDEO_VIVANTE) + check_c_source_compiles(" + #include + int main(int argc, char** argv) {}" HAVE_VIDEO_VIVANTE_VDK) + check_c_source_compiles(" + #define LINUX + #define EGL_API_FB + #include + int main(int argc, char** argv) {}" HAVE_VIDEO_VIVANTE_EGL_FB) + if(HAVE_VIDEO_VIVANTE_VDK OR HAVE_VIDEO_VIVANTE_EGL_FB) + set(HAVE_VIDEO_VIVANTE TRUE) set(HAVE_SDL_VIDEO TRUE) - endif(PKG_DIRECTFB_FOUND) - endif(VIDEO_DIRECTFB) -endmacro(CheckDirectFB) + + file(GLOB VIVANTE_SOURCES ${SDL2_SOURCE_DIR}/src/video/vivante/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIVANTE_SOURCES}) + set(SDL_VIDEO_DRIVER_VIVANTE 1) + if(HAVE_VIDEO_VIVANTE_VDK) + set(SDL_VIDEO_DRIVER_VIVANTE_VDK 1) + list(APPEND EXTRA_LIBS VDK VIVANTE) + else() + set(SDL_CFLAGS "${SDL_CFLAGS} -DLINUX -DEGL_API_FB") + list(APPEND EXTRA_LIBS EGL) + endif(HAVE_VIDEO_VIVANTE_VDK) + endif(HAVE_VIDEO_VIVANTE_VDK OR HAVE_VIDEO_VIVANTE_EGL_FB) + endif(VIDEO_VIVANTE) +endmacro(CheckVivante) # Requires: # - nada @@ -615,20 +680,21 @@ macro(CheckOpenGLX11) set(SDL_VIDEO_OPENGL_GLX 1) set(SDL_VIDEO_RENDER_OGL 1) list(APPEND EXTRA_LIBS GL) - endif(HAVE_VIDEO_OPENGL) - endif(VIDEO_OPENGL) -endmacro(CheckOpenGLX11) + endif() + endif() +endmacro() # Requires: # - nada macro(CheckOpenGLESX11) if(VIDEO_OPENGLES) check_c_source_compiles(" + #define EGL_API_FB #include int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGL_EGL) if(HAVE_VIDEO_OPENGL_EGL) set(SDL_VIDEO_OPENGL_EGL 1) - endif(HAVE_VIDEO_OPENGL_EGL) + endif() check_c_source_compiles(" #include #include @@ -637,7 +703,7 @@ macro(CheckOpenGLESX11) set(HAVE_VIDEO_OPENGLES TRUE) set(SDL_VIDEO_OPENGL_ES 1) set(SDL_VIDEO_RENDER_OGL_ES 1) - endif(HAVE_VIDEO_OPENGLES_V1) + endif() check_c_source_compiles(" #include #include @@ -646,12 +712,12 @@ macro(CheckOpenGLESX11) set(HAVE_VIDEO_OPENGLES TRUE) set(SDL_VIDEO_OPENGL_ES2 1) set(SDL_VIDEO_RENDER_OGL_ES2 1) - endif(HAVE_VIDEO_OPENGLES_V2) + endif() - endif(VIDEO_OPENGLES) -endmacro(CheckOpenGLESX11) + endif() +endmacro() -# Rquires: +# Requires: # - nada # Optional: # - THREADS opt @@ -698,17 +764,21 @@ macro(CheckPTHREAD) else() set(PTHREAD_CFLAGS "-D_REENTRANT") set(PTHREAD_LDFLAGS "-lpthread") - endif(LINUX) + endif() # Run some tests set(CMAKE_REQUIRED_FLAGS "${PTHREAD_CFLAGS} ${PTHREAD_LDFLAGS}") - check_c_source_runs(" + if(CMAKE_CROSSCOMPILING) + set(HAVE_PTHREADS 1) + else() + check_c_source_runs(" #include int main(int argc, char** argv) { pthread_attr_t type; pthread_attr_init(&type); return 0; }" HAVE_PTHREADS) + endif() if(HAVE_PTHREADS) set(SDL_THREAD_PTHREAD 1) list(APPEND EXTRA_CFLAGS ${PTHREAD_CFLAGS}) @@ -725,7 +795,7 @@ macro(CheckPTHREAD) }" HAVE_RECURSIVE_MUTEXES) if(HAVE_RECURSIVE_MUTEXES) set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1) - else(HAVE_RECURSIVE_MUTEXES) + else() check_c_source_compiles(" #include int main(int argc, char **argv) { @@ -735,8 +805,8 @@ macro(CheckPTHREAD) }" HAVE_RECURSIVE_MUTEXES_NP) if(HAVE_RECURSIVE_MUTEXES_NP) set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1) - endif(HAVE_RECURSIVE_MUTEXES_NP) - endif(HAVE_RECURSIVE_MUTEXES) + endif() + endif() if(PTHREADS_SEM) check_c_source_compiles("#include @@ -750,22 +820,15 @@ macro(CheckPTHREAD) sem_timedwait(NULL, NULL); return 0; }" HAVE_SEM_TIMEDWAIT) - endif(HAVE_PTHREADS_SEM) - endif(PTHREADS_SEM) - - check_c_source_compiles(" - #include - int main(int argc, char** argv) { - pthread_spin_trylock(NULL); - return 0; - }" HAVE_PTHREAD_SPINLOCK) + endif() + endif() check_c_source_compiles(" #include #include int main(int argc, char** argv) { return 0; }" HAVE_PTHREAD_NP_H) - check_function_exists(pthread_setname_np HAVE_PTHREAD_setNAME_NP) - check_function_exists(pthread_set_name_np HAVE_PTHREAD_set_NAME_NP) + check_function_exists(pthread_setname_np HAVE_PTHREAD_SETNAME_NP) + check_function_exists(pthread_set_name_np HAVE_PTHREAD_SET_NAME_NP) set(CMAKE_REQUIRED_FLAGS) set(SOURCE_FILES ${SOURCE_FILES} @@ -777,14 +840,14 @@ macro(CheckPTHREAD) if(HAVE_PTHREADS_SEM) set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_syssem.c) - else(HAVE_PTHREADS_SEM) + else() set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syssem.c) - endif(HAVE_PTHREADS_SEM) + endif() set(HAVE_SDL_THREADS TRUE) - endif(HAVE_PTHREADS) - endif(PTHREADS) -endmacro(CheckPTHREAD) + endif() + endif() +endmacro() # Requires # - nada @@ -798,27 +861,27 @@ macro(CheckUSBHID) check_include_file(usbhid.h HAVE_USBHID_H) if(HAVE_USBHID_H) set(USB_CFLAGS "-DHAVE_USBHID_H") - endif(HAVE_USBHID_H) + endif() check_include_file(libusbhid.h HAVE_LIBUSBHID_H) if(HAVE_LIBUSBHID_H) set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSBHID_H") - endif(HAVE_LIBUSBHID_H) + endif() set(USB_LIBS ${USB_LIBS} usbhid) - else(LIBUSBHID) + else() check_include_file(usb.h HAVE_USB_H) if(HAVE_USB_H) set(USB_CFLAGS "-DHAVE_USB_H") - endif(HAVE_USB_H) + endif() check_include_file(libusb.h HAVE_LIBUSB_H) if(HAVE_LIBUSB_H) set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSB_H") - endif(HAVE_LIBUSB_H) + endif() check_library_exists(usb hid_init "" LIBUSB) if(LIBUSB) set(USB_LIBS ${USB_LIBS} usb) - endif(LIBUSB) - endif(LIBUSBHID) + endif() + endif() set(CMAKE_REQUIRED_FLAGS "${USB_CFLAGS}") set(CMAKE_REQUIRED_LIBRARIES "${USB_LIBS}") @@ -874,7 +937,7 @@ macro(CheckUSBHID) }" HAVE_USBHID_UCR_DATA) if(HAVE_USBHID_UCR_DATA) set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_UCR_DATA") - endif(HAVE_USBHID_UCR_DATA) + endif() check_c_source_compiles(" #include @@ -902,7 +965,7 @@ macro(CheckUSBHID) }" HAVE_USBHID_NEW) if(HAVE_USBHID_NEW) set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_NEW") - endif(HAVE_USBHID_NEW) + endif() check_c_source_compiles(" #include @@ -912,7 +975,7 @@ macro(CheckUSBHID) }" HAVE_MACHINE_JOYSTICK) if(HAVE_MACHINE_JOYSTICK) set(SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H 1) - endif(HAVE_MACHINE_JOYSTICK) + endif() set(SDL_JOYSTICK_USBHID 1) file(GLOB BSD_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/bsd/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${BSD_JOYSTICK_SOURCES}) @@ -922,5 +985,34 @@ macro(CheckUSBHID) set(CMAKE_REQUIRED_LIBRARIES) set(CMAKE_REQUIRED_FLAGS) - endif(HAVE_USBHID) -endmacro(CheckUSBHID) + endif() +endmacro() + +# Requires: +# - n/a +macro(CheckRPI) + if(VIDEO_RPI) + set(VIDEO_RPI_INCLUDE_DIRS "/opt/vc/include" "/opt/vc/include/interface/vcos/pthreads" "/opt/vc/include/interface/vmcs_host/linux/" ) + set(VIDEO_RPI_LIBRARY_DIRS "/opt/vc/lib" ) + set(VIDEO_RPI_LIBS bcm_host ) + listtostr(VIDEO_RPI_INCLUDE_DIRS VIDEO_RPI_INCLUDE_FLAGS "-I") + listtostr(VIDEO_RPI_LIBRARY_DIRS VIDEO_RPI_LIBRARY_FLAGS "-L") + + set(CMAKE_REQUIRED_FLAGS "${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") + set(CMAKE_REQUIRED_LIBRARIES "${VIDEO_RPI_LIBS}") + check_c_source_compiles(" + #include + int main(int argc, char **argv) {}" HAVE_VIDEO_RPI) + set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_LIBRARIES) + + if(SDL_VIDEO AND HAVE_VIDEO_RPI) + set(HAVE_SDL_VIDEO TRUE) + set(SDL_VIDEO_DRIVER_RPI 1) + file(GLOB VIDEO_RPI_SOURCES ${SDL2_SOURCE_DIR}/src/video/raspberry/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_RPI_SOURCES}) + list(APPEND EXTRA_LIBS ${VIDEO_RPI_LIBS}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${VIDEO_RPI_INCLUDE_FLAGS} ${VIDEO_RPI_LIBRARY_FLAGS}") + endif(SDL_VIDEO AND HAVE_VIDEO_RPI) + endif(VIDEO_RPI) +endmacro(CheckRPI) diff --git a/Engine/lib/sdl/cmake_uninstall.cmake.in b/Engine/lib/sdl/cmake_uninstall.cmake.in new file mode 100644 index 0000000000..e3a5a4be9f --- /dev/null +++ b/Engine/lib/sdl/cmake_uninstall.cmake.in @@ -0,0 +1,18 @@ +if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + +file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach (file ${files}) + message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + execute_process( + COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}" + OUTPUT_VARIABLE rm_out + RESULT_VARIABLE rm_retval + ) + if(NOT ${rm_retval} EQUAL 0) + message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") + endif (NOT ${rm_retval} EQUAL 0) +endforeach(file) + diff --git a/Engine/lib/sdl/configure b/Engine/lib/sdl/configure index 1999cf9a24..a41f025954 100644 --- a/Engine/lib/sdl/configure +++ b/Engine/lib/sdl/configure @@ -826,12 +826,14 @@ enable_video_x11 with_x enable_x11_shared enable_video_x11_xcursor +enable_video_x11_xdbe enable_video_x11_xinerama enable_video_x11_xinput enable_video_x11_xrandr enable_video_x11_scrnsaver enable_video_x11_xshape enable_video_x11_vm +enable_video_vivante enable_video_cocoa enable_video_directfb enable_directfb_shared @@ -840,8 +842,11 @@ enable_fusionsound_shared enable_video_dummy enable_video_opengl enable_video_opengles +enable_video_opengles1 +enable_video_opengles2 enable_libudev enable_dbus +enable_ibus enable_input_tslib enable_pthreads enable_pthread_sem @@ -1547,6 +1552,7 @@ Optional Features: --enable-x11-shared dynamically load X11 support [[default=maybe]] --enable-video-x11-xcursor enable X11 Xcursor support [[default=yes]] + --enable-video-x11-xdbe enable X11 Xdbe support [[default=yes]] --enable-video-x11-xinerama enable X11 Xinerama support [[default=yes]] --enable-video-x11-xinput @@ -1560,6 +1566,7 @@ Optional Features: --enable-video-x11-xshape enable X11 XShape support [[default=yes]] --enable-video-x11-vm use X11 VM extension for fullscreen [[default=yes]] + --enable-video-vivante use Vivante EGL video driver [[default=yes]] --enable-video-cocoa use Cocoa video driver [[default=yes]] --enable-video-directfb use DirectFB video driver [[default=no]] --enable-directfb-shared @@ -1571,8 +1578,13 @@ Optional Features: --enable-video-dummy use dummy video driver [[default=yes]] --enable-video-opengl include OpenGL support [[default=yes]] --enable-video-opengles include OpenGL ES support [[default=yes]] + --enable-video-opengles1 + include OpenGL ES 1.1 support [[default=yes]] + --enable-video-opengles2 + include OpenGL ES 2.0 support [[default=yes]] --enable-libudev enable libudev support [[default=yes]] --enable-dbus enable D-Bus support [[default=yes]] + --enable-ibus enable IBus support [[default=yes]] --enable-input-tslib use the Touchscreen library for input [[default=yes]] --enable-pthreads use POSIX threads for multi-threading @@ -2671,9 +2683,9 @@ orig_CFLAGS="$CFLAGS" # SDL_MAJOR_VERSION=2 SDL_MINOR_VERSION=0 -SDL_MICRO_VERSION=3 -SDL_INTERFACE_AGE=1 -SDL_BINARY_AGE=3 +SDL_MICRO_VERSION=4 +SDL_INTERFACE_AGE=0 +SDL_BINARY_AGE=4 SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION @@ -9902,13 +9914,20 @@ if test "$GCC" = yes; then ;; esac # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. + # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2 or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi @@ -15718,7 +15737,7 @@ find_lib() else host_lib_path="/usr/$base_libdir /usr/local/$base_libdir" fi - for path in $gcc_bin_path $gcc_lib_path $env_lib_path $host_lib_path; do + for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do lib=`ls -- $path/$1 2>/dev/null | sed -e '/\.so\..*\./d' -e 's,.*/,,' | sort | tail -1` if test x$lib != x; then echo $lib @@ -16639,7 +16658,7 @@ if test "x$ac_cv_lib_m_pow" = xyes; then : LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm" fi - for ac_func in atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt + for ac_func in atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -18688,9 +18707,9 @@ CheckWayland() if test "${enable_video_wayland+set}" = set; then : enableval=$enable_video_wayland; else - enable_video_wayland=no + enable_video_wayland=yes fi - #yes) + # Check whether --enable-video-wayland-qt-touch was given. if test "${enable_video_wayland_qt_touch+set}" = set; then : @@ -18745,7 +18764,9 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Wayland support" >&5 $as_echo_n "checking for Wayland support... " >&6; } video_wayland=no - if test x$PKG_CONFIG != xno; then + if test x$PKG_CONFIG != xno && \ + test x$video_opengl_egl = xyes && \ + test x$video_opengles_v2 = xyes; then if $PKG_CONFIG --exists wayland-client wayland-egl wayland-cursor egl xkbcommon ; then WAYLAND_CFLAGS=`$PKG_CONFIG --cflags wayland-client wayland-egl wayland-cursor xkbcommon` WAYLAND_LIBS=`$PKG_CONFIG --libs wayland-client wayland-egl wayland-cursor xkbcommon` @@ -18842,9 +18863,9 @@ CheckMir() if test "${enable_video_mir+set}" = set; then : enableval=$enable_video_mir; else - enable_video_mir=no + enable_video_mir=yes fi - #yes) + if test x$enable_video = xyes -a x$enable_video_mir = xyes; then # Extract the first word of "pkg-config", so it can be a program name with args. @@ -18895,7 +18916,31 @@ $as_echo_n "checking for Mir support... " >&6; } if $PKG_CONFIG --exists mirclient egl xkbcommon ; then MIR_CFLAGS=`$PKG_CONFIG --cflags mirclient egl xkbcommon` MIR_LIBS=`$PKG_CONFIG --libs mirclient egl xkbcommon` + save_CFLAGS="$CFLAGS" + CFLAGS="$save_CFLAGS $MIR_CFLAGS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + MirMotionToolType tool = mir_motion_tool_type_mouse; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + video_mir=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_mir" >&5 @@ -18958,6 +19003,55 @@ _ACEOF fi } +CheckNativeClient() +{ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if !defined(__native_client__) + #error "NO NACL" + #endif + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + $as_echo "#define SDL_VIDEO_DRIVER_NACL 1" >>confdefs.h + + $as_echo "#define SDL_AUDIO_DRIVER_NACL 1" >>confdefs.h + + +$as_echo "#define HAVE_POW 1" >>confdefs.h + + +$as_echo "#define HAVE_OPENGLES2 1" >>confdefs.h + + +$as_echo "#define SDL_VIDEO_OPENGL_ES2 1" >>confdefs.h + + +$as_echo "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h + + + SDL_LIBS="-lppapi_simple -lppapi_gles2 $SDL_LIBS" + + SDLMAIN_SOURCES="$srcdir/src/main/nacl/*.c" + SOURCES="$SOURCES $srcdir/src/audio/nacl/*.c" + SUMMARY_audio="${SUMMARY_audio} nacl" + SOURCES="$SOURCES $srcdir/src/video/nacl/*.c" + SUMMARY_video="${SUMMARY_video} nacl opengles2" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +} + CheckX11() { @@ -19806,35 +19900,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_const_param_XextAddDisplay" >&5 $as_echo "$have_const_param_XextAddDisplay" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for const parameter to _XData32" >&5 -$as_echo_n "checking for const parameter to _XData32... " >&6; } - have_const_param_xdata32=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len); - -int -main () -{ - - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - have_const_param_xdata32=yes - $as_echo "#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 1" >>confdefs.h - - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_const_param_xdata32" >&5 -$as_echo "$have_const_param_xdata32" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XGenericEvent" >&5 $as_echo_n "checking for XGenericEvent... " >&6; } have_XGenericEvent=no @@ -19994,6 +20059,31 @@ $as_echo "#define SDL_VIDEO_DRIVER_X11_XCURSOR 1" >>confdefs.h SUMMARY_video_x11="${SUMMARY_video_x11} xcursor" fi + # Check whether --enable-video-x11-xdbe was given. +if test "${enable_video_x11_xdbe+set}" = set; then : + enableval=$enable_video_x11_xdbe; +else + enable_video_x11_xdbe=yes +fi + + if test x$enable_video_x11_xdbe = xyes; then + ac_fn_c_check_header_compile "$LINENO" "X11/extensions/Xdbe.h" "ac_cv_header_X11_extensions_Xdbe_h" "#include + +" +if test "x$ac_cv_header_X11_extensions_Xdbe_h" = xyes; then : + have_dbe_h_hdr=yes +else + have_dbe_h_hdr=no +fi + + + if test x$have_dbe_h_hdr = xyes; then + +$as_echo "#define SDL_VIDEO_DRIVER_X11_XDBE 1" >>confdefs.h + + SUMMARY_video_x11="${SUMMARY_video_x11} xdbe" + fi + fi # Check whether --enable-video-x11-xinerama was given. if test "${enable_video_x11_xinerama+set}" = set; then : enableval=$enable_video_x11_xinerama; @@ -20477,6 +20567,90 @@ $as_echo "#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1" >>confdefs.h fi } +CheckVivanteVideo() +{ + # Check whether --enable-video-vivante was given. +if test "${enable_video_vivante+set}" = set; then : + enableval=$enable_video_vivante; +else + enable_video_vivante=yes +fi + + if test x$enable_video = xyes -a x$enable_video_vivante = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Vivante VDK API" >&5 +$as_echo_n "checking for Vivante VDK API... " >&6; } + have_vivante_vdk=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define LINUX + #define EGL_API_FB + #include + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + have_vivante_vdk=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_vivante_vdk" >&5 +$as_echo "$have_vivante_vdk" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Vivante FB API" >&5 +$as_echo_n "checking for Vivante FB API... " >&6; } + have_vivante_egl=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #define LINUX + #define EGL_API_FB + #include + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + have_vivante_egl=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_vivante_egl" >&5 +$as_echo "$have_vivante_egl" >&6; } + + if test x$have_vivante_vdk = xyes -o x$have_vivante_egl = xyes; then + +$as_echo "#define SDL_VIDEO_DRIVER_VIVANTE 1" >>confdefs.h + + EXTRA_CFLAGS="$EXTRA_CFLAGS -DLINUX -DEGL_API_FB" + if test x$have_vivante_vdk = xyes; then + +$as_echo "#define SDL_VIDEO_DRIVER_VIVANTE_VDK 1" >>confdefs.h + + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lVDK" + fi + SOURCES="$SOURCES $srcdir/src/video/vivante/*.c" + SUMMARY_video="${SUMMARY_video} vivante" + have_video=yes + fi + fi +} + CheckHaikuVideo() { if test x$enable_video = xyes; then @@ -20726,6 +20900,7 @@ _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $directfb_shared" >&5 $as_echo "$directfb_shared" >&6; } + SDL_CFLAGS="$SDL_CFLAGS $DIRECTFB_CFLAGS" have_video=yes fi fi @@ -20919,6 +21094,20 @@ else enable_video_opengles=yes fi +# Check whether --enable-video-opengles1 was given. +if test "${enable_video_opengles1+set}" = set; then : + enableval=$enable_video_opengles1; +else + enable_video_opengles1=yes +fi + +# Check whether --enable-video-opengles2 was given. +if test "${enable_video_opengles2+set}" = set; then : + enableval=$enable_video_opengles2; +else + enable_video_opengles2=yes +fi + CheckOpenGLESX11() { @@ -20929,7 +21118,10 @@ $as_echo_n "checking for EGL support... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include + #define LINUX + #define EGL_API_FB + #include + #include int main () @@ -20954,14 +21146,15 @@ $as_echo "#define SDL_VIDEO_OPENGL_EGL 1" >>confdefs.h fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v1 headers" >&5 + if test x$enable_video_opengles1 = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v1 headers" >&5 $as_echo_n "checking for OpenGL ES v1 headers... " >&6; } - video_opengles_v1=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + video_opengles_v1=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include + #include + #include int main () @@ -20974,30 +21167,32 @@ main () _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - video_opengles_v1=yes + video_opengles_v1=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v1" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v1" >&5 $as_echo "$video_opengles_v1" >&6; } - if test x$video_opengles_v1 = xyes; then + if test x$video_opengles_v1 = xyes; then $as_echo "#define SDL_VIDEO_OPENGL_ES 1" >>confdefs.h $as_echo "#define SDL_VIDEO_RENDER_OGL_ES 1" >>confdefs.h - SUMMARY_video="${SUMMARY_video} opengl_es1" + SUMMARY_video="${SUMMARY_video} opengl_es1" + fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v2 headers" >&5 + if test x$enable_video_opengles2 = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v2 headers" >&5 $as_echo_n "checking for OpenGL ES v2 headers... " >&6; } - video_opengles_v2=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + video_opengles_v2=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #include + #include + #include int main () @@ -21010,20 +21205,21 @@ main () _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - video_opengles_v2=yes + video_opengles_v2=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v2" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v2" >&5 $as_echo "$video_opengles_v2" >&6; } - if test x$video_opengles_v2 = xyes; then + if test x$video_opengles_v2 = xyes; then $as_echo "#define SDL_VIDEO_OPENGL_ES2 1" >>confdefs.h $as_echo "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h - SUMMARY_video="${SUMMARY_video} opengl_es2" + SUMMARY_video="${SUMMARY_video} opengl_es2" + fi fi fi } @@ -21154,12 +21350,78 @@ $as_echo "#define SDL_VIDEO_OPENGL_CGL 1" >>confdefs.h $as_echo "#define SDL_VIDEO_RENDER_OGL 1" >>confdefs.h SUMMARY_video="${SUMMARY_video} opengl" - case "$host" in - *-*-darwin*) - if test x$enable_video_cocoa = xyes; then - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,OpenGL" - fi - esac + fi +} + +CheckEmscriptenGLES() +{ + if test x$enable_video = xyes -a x$enable_video_opengles = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGL support" >&5 +$as_echo_n "checking for EGL support... " >&6; } + video_opengl_egl=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + video_opengl_egl=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengl_egl" >&5 +$as_echo "$video_opengl_egl" >&6; } + if test x$video_opengl_egl = xyes; then + +$as_echo "#define SDL_VIDEO_OPENGL_EGL 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES v2 headers" >&5 +$as_echo_n "checking for OpenGL ES v2 headers... " >&6; } + video_opengles_v2=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + video_opengles_v2=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $video_opengles_v2" >&5 +$as_echo "$video_opengles_v2" >&6; } + if test x$video_opengles_v2 = xyes; then + +$as_echo "#define SDL_VIDEO_OPENGL_ES2 1" >>confdefs.h + + +$as_echo "#define SDL_VIDEO_RENDER_OGL_ES2 1" >>confdefs.h + + SUMMARY_video="${SUMMARY_video} opengl_es2" + fi fi } @@ -21336,6 +21598,100 @@ fi $as_echo "#define HAVE_DBUS_DBUS_H 1" >>confdefs.h EXTRA_CFLAGS="$EXTRA_CFLAGS $DBUS_CFLAGS" + SOURCES="$SOURCES $srcdir/src/core/linux/SDL_dbus.c" + fi + fi + fi +} + +CheckIBus() +{ + # Check whether --enable-ibus was given. +if test "${enable_ibus+set}" = set; then : + enableval=$enable_ibus; +else + enable_ibus=yes +fi + + if test x$enable_ibus = xyes; then + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test x$PKG_CONFIG != xno; then + IBUS_CFLAGS=`$PKG_CONFIG --cflags ibus-1.0` + save_CFLAGS="$CFLAGS" + CFLAGS="$save_CFLAGS $IBUS_CFLAGS" + ac_fn_c_check_header_mongrel "$LINENO" "ibus-1.0/ibus.h" "ac_cv_header_ibus_1_0_ibus_h" "$ac_includes_default" +if test "x$ac_cv_header_ibus_1_0_ibus_h" = xyes; then : + have_ibus_ibus_h_hdr=yes +else + have_ibus_ibus_h_hdr=no +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_inotify_h" = xyes; then : + have_inotify_inotify_h_hdr=yes +else + have_inotify_inotify_h_hdr=no +fi + + + CFLAGS="$save_CFLAGS" + if test x$have_ibus_ibus_h_hdr = xyes; then + if test x$enable_dbus != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: DBus support is required for IBus." >&5 +$as_echo "$as_me: WARNING: DBus support is required for IBus." >&2;} + have_ibus_ibus_h_hdr=no + elif test x$have_inotify_inotify_h_hdr != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: INotify support is required for IBus." >&5 +$as_echo "$as_me: WARNING: INotify support is required for IBus." >&2;} + have_ibus_ibus_h_hdr=no + else + +$as_echo "#define HAVE_IBUS_IBUS_H 1" >>confdefs.h + + EXTRA_CFLAGS="$EXTRA_CFLAGS $IBUS_CFLAGS" + SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ibus.c" + fi fi fi fi @@ -21403,6 +21759,10 @@ else fi case "$host" in + *-*-androideabi*) + pthread_cflags="-D_REENTRANT -D_THREAD_SAFE" + pthread_lib="" + ;; *-*-linux*|*-*-uclinux*) pthread_cflags="-D_REENTRANT" pthread_lib="-lpthread" @@ -21509,7 +21869,6 @@ $as_echo "#define SDL_THREAD_PTHREAD 1" >>confdefs.h EXTRA_CFLAGS="$EXTRA_CFLAGS $pthread_cflags" EXTRA_LDFLAGS="$EXTRA_LDFLAGS $pthread_lib" SDL_CFLAGS="$SDL_CFLAGS $pthread_cflags" - SDL_LIBS="$SDL_LIBS $pthread_lib" # Save the original compiler flags and libraries ac_save_cflags="$CFLAGS"; ac_save_libs="$LIBS" @@ -21524,6 +21883,7 @@ $as_echo_n "checking for recursive mutexes... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #define _GNU_SOURCE 1 #include int @@ -21537,7 +21897,7 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : has_recursive_mutexes=yes @@ -21545,12 +21905,14 @@ $as_echo "#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi if test x$has_recursive_mutexes = xno; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + #define _GNU_SOURCE 1 #include int @@ -21564,7 +21926,7 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_link "$LINENO"; then : has_recursive_mutexes=yes @@ -21572,7 +21934,8 @@ $as_echo "#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_recursive_mutexes" >&5 $as_echo "$has_recursive_mutexes" >&6; } @@ -21639,43 +22002,6 @@ rm -f core conftest.err conftest.$ac_objext \ $as_echo "$have_sem_timedwait" >&6; } fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_spin_trylock" >&5 -$as_echo_n "checking for pthread_spin_trylock... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_spin_trylock (); -int -main () -{ -return pthread_spin_trylock (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - has_pthread_spin_trylock=yes - -$as_echo "#define HAVE_PTHREAD_SPINLOCK 1" >>confdefs.h - - -else - - has_pthread_spin_trylock=no - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_pthread_spin_trylock" >&5 -$as_echo "$has_pthread_spin_trylock" >&6; } - ac_fn_c_check_header_compile "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" " #include " if test "x$ac_cv_header_pthread_np_h" = xyes; then : @@ -21904,12 +22230,50 @@ if test "x$ac_cv_header_dinput_h" = xyes; then : fi + ac_fn_c_check_header_mongrel "$LINENO" "dxgi.h" "ac_cv_header_dxgi_h" "$ac_includes_default" +if test "x$ac_cv_header_dxgi_h" = xyes; then : + have_dxgi=yes +fi + + ac_fn_c_check_header_mongrel "$LINENO" "xaudio2.h" "ac_cv_header_xaudio2_h" "$ac_includes_default" if test "x$ac_cv_header_xaudio2_h" = xyes; then : have_xaudio2=yes fi + ac_fn_c_check_header_mongrel "$LINENO" "xinput.h" "ac_cv_header_xinput_h" "$ac_includes_default" +if test "x$ac_cv_header_xinput_h" = xyes; then : + have_xinput=yes +fi + + + + if test x$have_ddraw = xyes; then + +$as_echo "#define HAVE_DDRAW_H 1" >>confdefs.h + + fi + if test x$have_dinput = xyes; then + +$as_echo "#define HAVE_DINPUT_H 1" >>confdefs.h + + fi + if test x$have_dsound = xyes; then + +$as_echo "#define HAVE_DSOUND_H 1" >>confdefs.h + + fi + if test x$have_dxgi = xyes; then + +$as_echo "#define HAVE_DXGI_H 1" >>confdefs.h + + fi + if test x$have_xinput = xyes; then + +$as_echo "#define HAVE_XINPUT_H 1" >>confdefs.h + + fi SUMMARY_video="${SUMMARY_video} directx" SUMMARY_audio="${SUMMARY_audio} directx" @@ -22544,7 +22908,25 @@ case "$host" in if test x$enable_video = xyes; then SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" + # FIXME: confdefs? Not AC_DEFINE? $as_echo "#define SDL_VIDEO_DRIVER_RPI 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} rpi" + fi + ;; + *-*-androideabi*) + # Android + ARCH=android + ANDROID_CFLAGS="-DGL_GLEXT_PROTOTYPES" + CFLAGS="$CFLAGS $ANDROID_CFLAGS" + SDL_CFLAGS="$SDL_CFLAGS $ANDROID_CFLAGS" + EXTRA_CFLAGS="$EXTRA_CFLAGS $ANDROID_CFLAGS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldl -lGLESv1_CM -lGLESv2 -llog -landroid" + + if test x$enable_video = xyes; then + SOURCES="$SOURCES $srcdir/src/core/android/*.c $srcdir/src/video/android/*.c" + # FIXME: confdefs? Not AC_DEFINE? + $as_echo "#define SDL_VIDEO_DRIVER_ANDROID 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} android" fi ;; *-*-linux*) ARCH=linux ;; @@ -22556,6 +22938,21 @@ case "$host" in *-*-bsdi*) ARCH=bsdi ;; *-*-freebsd*) ARCH=freebsd ;; *-*-dragonfly*) ARCH=freebsd ;; + *-raspberry-netbsd*) + # Raspberry Pi + ARCH=netbsd + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + CFLAGS="$CFLAGS $RPI_CFLAGS" + SDL_CFLAGS="$SDL_CFLAGS $RPI_CFLAGS" + EXTRA_CFLAGS="$EXTRA_CFLAGS $RPI_CFLAGS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host -ldl" + + if test x$enable_video = xyes; then + SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" + $as_echo "#define SDL_VIDEO_DRIVER_RPI 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} raspberry" + fi + ;; *-*-netbsd*) ARCH=netbsd ;; *-*-openbsd*) ARCH=openbsd ;; *-*-sysv5*) ARCH=sysv5 ;; @@ -22577,22 +22974,28 @@ case "$host" in CheckNAS CheckSNDIO CheckX11 - CheckWayland - CheckMir CheckDirectFB CheckFusionSound CheckOpenGLX11 CheckOpenGLESX11 + CheckMir + CheckWayland CheckLibUDev CheckDBus - CheckInputEvents - CheckInputKD + CheckIBus + case $ARCH in + linux) + CheckInputEvents + CheckInputKD + ;; + esac CheckTslib CheckUSBHID CheckPTHREAD CheckClockGettime CheckLinuxVersion CheckRPATH + CheckVivanteVideo # Set up files for the audio library if test x$enable_audio = xyes; then case $ARCH in @@ -22617,6 +23020,14 @@ $as_echo "#define SDL_AUDIO_DRIVER_PAUDIO 1" >>confdefs.h SOURCES="$SOURCES $srcdir/src/audio/paudio/*.c" have_audio=yes ;; + android) + +$as_echo "#define SDL_AUDIO_DRIVER_ANDROID 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/audio/android/*.c" + SUMMARY_audio="${SUMMARY_audio} android" + have_audio=yes + ;; esac fi # Set up files for the joystick library @@ -22629,6 +23040,13 @@ $as_echo "#define SDL_JOYSTICK_LINUX 1" >>confdefs.h SOURCES="$SOURCES $srcdir/src/joystick/linux/*.c" have_joystick=yes ;; + android) + +$as_echo "#define SDL_JOYSTICK_ANDROID 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/joystick/android/*.c" + have_joystick=yes + ;; esac fi # Set up files for the haptic library @@ -22655,15 +23073,33 @@ $as_echo "#define SDL_POWER_LINUX 1" >>confdefs.h SOURCES="$SOURCES $srcdir/src/power/linux/*.c" have_power=yes ;; + android) + +$as_echo "#define SDL_POWER_ANDROID 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/power/android/*.c" + have_power=yes + ;; esac fi # Set up files for the filesystem library if test x$enable_filesystem = xyes; then + case $ARCH in + android) + +$as_echo "#define SDL_FILESYSTEM_ANDROID 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/filesystem/android/*.c" + have_filesystem=yes + ;; + *) $as_echo "#define SDL_FILESYSTEM_UNIX 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/filesystem/unix/*.c" - have_filesystem=yes + SOURCES="$SOURCES $srcdir/src/filesystem/unix/*.c" + have_filesystem=yes + ;; + esac fi # Set up files for the timer library if test x$enable_timers = xyes; then @@ -22751,26 +23187,39 @@ $as_echo "#define SDL_AUDIO_DRIVER_XAUDIO2 1" >>confdefs.h fi # Set up files for the joystick library if test x$enable_joystick = xyes; then - if test x$have_dinput = xyes; then + if test x$have_dinput = xyes -o x$have_xinput = xyes; then + if test x$have_xinput = xyes; then + +$as_echo "#define SDL_JOYSTICK_XINPUT 1" >>confdefs.h + + fi + if test x$have_dinput = xyes; then $as_echo "#define SDL_JOYSTICK_DINPUT 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/joystick/windows/SDL_dxjoystick.c" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldinput8 -ldxguid -ldxerr8" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldinput8 -ldxguid -ldxerr8" + fi else $as_echo "#define SDL_JOYSTICK_WINMM 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/joystick/windows/SDL_mmjoystick.c" fi + SOURCES="$SOURCES $srcdir/src/joystick/windows/*.c" have_joystick=yes fi if test x$enable_haptic = xyes; then - if test x$have_dinput = xyes; then + if test x$have_dinput = xyes -o x$have_xinput = xyes; then + if test x$have_xinput = xyes; then + +$as_echo "#define SDL_HAPTIC_XINPUT 1" >>confdefs.h + + fi + if test x$have_dinput = xyes; then $as_echo "#define SDL_HAPTIC_DINPUT 1" >>confdefs.h - SOURCES="$SOURCES $srcdir/src/haptic/windows/SDL_syshaptic.c" + fi + SOURCES="$SOURCES $srcdir/src/haptic/windows/*.c" have_haptic=yes fi fi @@ -22819,7 +23268,7 @@ $as_echo "#define SDL_LOADSO_WINDOWS 1" >>confdefs.h else LIBUUID=-luuid fi - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion $LIBUUID -XCClinker -static-libgcc" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion $LIBUUID -static-libgcc" # The Windows platform requires special setup VERSION_SOURCES="$srcdir/src/main/windows/*.rc" SDLMAIN_SOURCES="$srcdir/src/main/windows/*.c" @@ -22954,6 +23403,7 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h # Set up files for the audio library if test x$enable_audio = xyes; then SOURCES="$SOURCES $srcdir/src/audio/coreaudio/*.c" + SUMMARY_audio="${SUMMARY_audio} coreaudio" have_audio=yes fi # Set up files for the joystick library @@ -22997,6 +23447,8 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreAudio" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,AudioToolbox" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreGraphics" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreMotion" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,GameController" ;; *-*-darwin* ) # This could be either full "Mac OS X", or plain "Darwin" which is @@ -23025,6 +23477,7 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h $as_echo "#define SDL_AUDIO_DRIVER_COREAUDIO 1" >>confdefs.h SOURCES="$SOURCES $srcdir/src/audio/coreaudio/*.c" + SUMMARY_audio="${SUMMARY_audio} coreaudio" have_audio=yes fi # Set up files for the joystick library @@ -23075,6 +23528,7 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h # The Mac OS X platform requires special setup. EXTRA_CFLAGS="$EXTRA_CFLAGS -fpascal-strings" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lobjc" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreVideo" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Cocoa" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit" @@ -23083,6 +23537,92 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit" fi ;; + *-nacl|*-pnacl) + ARCH=nacl + CheckNativeClient + CheckDummyAudio + CheckDummyVideo + CheckInputEvents + CheckPTHREAD + + # Set up files for the timer library + if test x$enable_timers = xyes; then + $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/timer/unix/*.c" + have_timers=yes + fi + + if test x$enable_filesystem = xyes; then + +$as_echo "#define SDL_FILESYSTEM_NACL 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/filesystem/nacl/*.c" + have_filesystem=yes + fi + ;; + *-*-emscripten* ) + if test x$enable_video = xyes; then + +$as_echo "#define SDL_VIDEO_DRIVER_EMSCRIPTEN 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/video/emscripten/*.c" + have_video=yes + SUMMARY_video="${SUMMARY_video} emscripten" + fi + + if test x$enable_audio = xyes; then + +$as_echo "#define SDL_AUDIO_DRIVER_EMSCRIPTEN 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/audio/emscripten/*.c" + have_audio=yes + SUMMARY_audio="${SUMMARY_audio} emscripten" + fi + + CheckVisibilityHidden + CheckDummyVideo + CheckDiskAudio + CheckDummyAudio + CheckDLOPEN + CheckClockGettime + CheckEmscriptenGLES + + # Set up files for the power library + if test x$enable_power = xyes; then + +$as_echo "#define SDL_POWER_EMSCRIPTEN 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/power/emscripten/*.c" + have_power=yes + fi + + # Set up files for the power library + if test x$enable_joystick = xyes; then + +$as_echo "#define SDL_JOYSTICK_EMSCRIPTEN 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/joystick/emscripten/*.c" + have_joystick=yes + fi + + # Set up files for the filesystem library + if test x$enable_filesystem = xyes; then + +$as_echo "#define SDL_FILESYSTEM_EMSCRIPTEN 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/filesystem/emscripten/*.c" + have_filesystem=yes + fi + # Set up files for the timer library + if test x$enable_timers = xyes; then + +$as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h + + SOURCES="$SOURCES $srcdir/src/timer/unix/*.c" + have_timers=yes + fi + ;; *) as_fn_error $? " *** Unsupported host: Please add to configure.in @@ -23153,7 +23693,7 @@ for EXT in asm cc m c S; do OBJECTS=`echo "$OBJECTS" | sed 's,[^ ]*/\([^ ]*\)\.'$EXT',$(objects)/\1.lo,g'` DEPENDS=`echo "$DEPENDS" | sed "s,^\\([^ ]*\\)/\\([^ ]*\\)\\.$EXT\\$,\\\\ \\$(objects)/\\2.lo: \\1/\\2.$EXT\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` done VERSION_OBJECTS=`echo $VERSION_SOURCES` @@ -23168,14 +23708,14 @@ SDLMAIN_DEPENDS=`echo $SDLMAIN_SOURCES` SDLMAIN_OBJECTS=`echo "$SDLMAIN_OBJECTS" | sed 's,[^ ]*/\([^ ]*\)\.c,$(objects)/\1.o,g'` SDLMAIN_DEPENDS=`echo "$SDLMAIN_DEPENDS" | sed "s,\\([^ ]*\\)/\\([^ ]*\\)\\.c,\\\\ \\$(objects)/\\2.o: \\1/\\2.c\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` SDLTEST_OBJECTS=`echo $SDLTEST_SOURCES` SDLTEST_DEPENDS=`echo $SDLTEST_SOURCES` SDLTEST_OBJECTS=`echo "$SDLTEST_OBJECTS" | sed 's,[^ ]*/\([^ ]*\)\.c,$(objects)/\1.o,g'` SDLTEST_DEPENDS=`echo "$SDLTEST_DEPENDS" | sed "s,\\([^ ]*\\)/\\([^ ]*\\)\\.c,\\\\ \\$(objects)/\\2.o: \\1/\\2.c\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` # Set runtime shared library paths as needed @@ -23240,7 +23780,7 @@ $SDLMAIN_DEPENDS $SDLTEST_DEPENDS __EOF__ -ac_config_files="$ac_config_files Makefile:Makefile.in:Makefile.rules sdl2-config SDL2.spec sdl2.pc" +ac_config_files="$ac_config_files Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake SDL2.spec sdl2.pc" ac_config_commands="$ac_config_commands sdl2_config" @@ -23270,6 +23810,11 @@ if test x$have_dbus_dbus_h_hdr = xyes; then else SUMMARY="${SUMMARY}Using dbus : NO\n" fi +if test x$have_ibus_ibus_h_hdr = xyes; then + SUMMARY="${SUMMARY}Using ibus : YES\n" +else + SUMMARY="${SUMMARY}Using ibus : NO\n" +fi ac_config_commands="$ac_config_commands summary" @@ -24354,6 +24899,7 @@ do "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in:Makefile.rules" ;; "sdl2-config") CONFIG_FILES="$CONFIG_FILES sdl2-config" ;; + "sdl2-config.cmake") CONFIG_FILES="$CONFIG_FILES sdl2-config.cmake" ;; "SDL2.spec") CONFIG_FILES="$CONFIG_FILES SDL2.spec" ;; "sdl2.pc") CONFIG_FILES="$CONFIG_FILES sdl2.pc" ;; "sdl2_config") CONFIG_COMMANDS="$CONFIG_COMMANDS sdl2_config" ;; diff --git a/Engine/lib/sdl/configure.in b/Engine/lib/sdl/configure.in index 3d8a2de23f..f585d01af4 100644 --- a/Engine/lib/sdl/configure.in +++ b/Engine/lib/sdl/configure.in @@ -20,9 +20,9 @@ dnl Set various version strings - taken gratefully from the GTk sources # SDL_MAJOR_VERSION=2 SDL_MINOR_VERSION=0 -SDL_MICRO_VERSION=3 -SDL_INTERFACE_AGE=1 -SDL_BINARY_AGE=3 +SDL_MICRO_VERSION=4 +SDL_INTERFACE_AGE=0 +SDL_BINARY_AGE=4 SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION AC_SUBST(SDL_MAJOR_VERSION) @@ -142,7 +142,7 @@ find_lib() else host_lib_path="/usr/$base_libdir /usr/local/$base_libdir" fi - for path in $gcc_bin_path $gcc_lib_path $env_lib_path $host_lib_path; do + for path in $env_lib_path $gcc_bin_path $gcc_lib_path $host_lib_path; do lib=[`ls -- $path/$1 2>/dev/null | sed -e '/\.so\..*\./d' -e 's,.*/,,' | sort | tail -1`] if test x$lib != x; then echo $lib @@ -271,7 +271,7 @@ if test x$enable_libc = xyes; then AC_CHECK_FUNCS(malloc calloc realloc free getenv setenv putenv unsetenv qsort abs bcopy memset memcpy memmove strlen strlcpy strlcat strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp vsscanf vsnprintf fseeko fseeko64 sigaction setjmp nanosleep sysconf sysctlbyname) AC_CHECK_LIB(m, pow, [LIBS="$LIBS -lm"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lm"]) - AC_CHECK_FUNCS(atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt) + AC_CHECK_FUNCS(atan atan2 acos asin ceil copysign cos cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf) AC_CHECK_LIB(iconv, iconv_open, [LIBS="$LIBS -liconv"; EXTRA_LDFLAGS="$EXTRA_LDFLAGS -liconv"]) AC_CHECK_FUNCS(iconv) @@ -1164,7 +1164,7 @@ CheckWayland() { AC_ARG_ENABLE(video-wayland, AC_HELP_STRING([--enable-video-wayland], [use Wayland video driver [[default=yes]]]), - ,enable_video_wayland=no) #yes) + ,enable_video_wayland=yes) AC_ARG_ENABLE(video-wayland-qt-touch, AC_HELP_STRING([--enable-video-wayland-qt-touch], [QtWayland server support for Wayland video driver [[default=yes]]]), @@ -1174,7 +1174,9 @@ AC_HELP_STRING([--enable-video-wayland-qt-touch], [QtWayland server support for AC_PATH_PROG(PKG_CONFIG, pkg-config, no) AC_MSG_CHECKING(for Wayland support) video_wayland=no - if test x$PKG_CONFIG != xno; then + if test x$PKG_CONFIG != xno && \ + test x$video_opengl_egl = xyes && \ + test x$video_opengles_v2 = xyes; then if $PKG_CONFIG --exists wayland-client wayland-egl wayland-cursor egl xkbcommon ; then WAYLAND_CFLAGS=`$PKG_CONFIG --cflags wayland-client wayland-egl wayland-cursor xkbcommon` WAYLAND_LIBS=`$PKG_CONFIG --libs wayland-client wayland-egl wayland-cursor xkbcommon` @@ -1246,7 +1248,7 @@ CheckMir() { AC_ARG_ENABLE(video-mir, AC_HELP_STRING([--enable-video-mir], [use Mir video driver [[default=yes]]]), - ,enable_video_mir=no) #yes) + ,enable_video_mir=yes) if test x$enable_video = xyes -a x$enable_video_mir = xyes; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) @@ -1256,7 +1258,18 @@ AC_HELP_STRING([--enable-video-mir], [use Mir video driver [[default=yes]]]), if $PKG_CONFIG --exists mirclient egl xkbcommon ; then MIR_CFLAGS=`$PKG_CONFIG --cflags mirclient egl xkbcommon` MIR_LIBS=`$PKG_CONFIG --libs mirclient egl xkbcommon` + save_CFLAGS="$CFLAGS" + CFLAGS="$save_CFLAGS $MIR_CFLAGS" + + dnl This will disable Mir on Ubuntu < 14.04 + AC_TRY_COMPILE([ + #include + ],[ + MirMotionToolType tool = mir_motion_tool_type_mouse; + ],[ video_mir=yes + ]) + CFLAGS="$save_CFLAGS" fi fi AC_MSG_RESULT($video_mir) @@ -1304,6 +1317,32 @@ AC_HELP_STRING([--enable-mir-shared], [dynamically load Mir support [[default=ma fi } +dnl Check for Native Client stuff +CheckNativeClient() +{ + AC_TRY_COMPILE([ + #if !defined(__native_client__) + #error "NO NACL" + #endif + ],[ + ],[ + AC_DEFINE(SDL_VIDEO_DRIVER_NACL) + AC_DEFINE(SDL_AUDIO_DRIVER_NACL) + AC_DEFINE(HAVE_POW, 1, [ ]) + AC_DEFINE(HAVE_OPENGLES2, 1, [ ]) + AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ]) + AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ]) + + SDL_LIBS="-lppapi_simple -lppapi_gles2 $SDL_LIBS" + + SDLMAIN_SOURCES="$srcdir/src/main/nacl/*.c" + SOURCES="$SOURCES $srcdir/src/audio/nacl/*.c" + SUMMARY_audio="${SUMMARY_audio} nacl" + SOURCES="$SOURCES $srcdir/src/video/nacl/*.c" + SUMMARY_video="${SUMMARY_video} nacl opengles2" + ]) +} + dnl Find the X11 include and library directories CheckX11() @@ -1431,18 +1470,6 @@ AC_HELP_STRING([--enable-x11-shared], [dynamically load X11 support [[default=ma ]) AC_MSG_RESULT($have_const_param_XextAddDisplay) - AC_MSG_CHECKING(for const parameter to _XData32) - have_const_param_xdata32=no - AC_TRY_COMPILE([ - #include - extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len); - ],[ - ],[ - have_const_param_xdata32=yes - AC_DEFINE(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32) - ]) - AC_MSG_RESULT($have_const_param_xdata32) - dnl AC_CHECK_LIB(X11, XGetEventData, AC_DEFINE(SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS, 1, [Have XGenericEvent])) AC_MSG_CHECKING([for XGenericEvent]) have_XGenericEvent=no @@ -1491,6 +1518,20 @@ AC_HELP_STRING([--enable-video-x11-xcursor], [enable X11 Xcursor support [[defau AC_DEFINE(SDL_VIDEO_DRIVER_X11_XCURSOR, 1, [ ]) SUMMARY_video_x11="${SUMMARY_video_x11} xcursor" fi + AC_ARG_ENABLE(video-x11-xdbe, +AC_HELP_STRING([--enable-video-x11-xdbe], [enable X11 Xdbe support [[default=yes]]]), + , enable_video_x11_xdbe=yes) + if test x$enable_video_x11_xdbe = xyes; then + AC_CHECK_HEADER(X11/extensions/Xdbe.h, + have_dbe_h_hdr=yes, + have_dbe_h_hdr=no, + [#include + ]) + if test x$have_dbe_h_hdr = xyes; then + AC_DEFINE(SDL_VIDEO_DRIVER_X11_XDBE, 1, [ ]) + SUMMARY_video_x11="${SUMMARY_video_x11} xdbe" + fi + fi AC_ARG_ENABLE(video-x11-xinerama, AC_HELP_STRING([--enable-video-x11-xinerama], [enable X11 Xinerama support [[default=yes]]]), , enable_video_x11_xinerama=yes) @@ -1668,6 +1709,51 @@ AC_HELP_STRING([--enable-video-x11-vm], [use X11 VM extension for fullscreen [[d fi } +dnl Set up the Vivante video driver if enabled +CheckVivanteVideo() +{ + AC_ARG_ENABLE(video-vivante, +AC_HELP_STRING([--enable-video-vivante], [use Vivante EGL video driver [[default=yes]]]), + , enable_video_vivante=yes) + if test x$enable_video = xyes -a x$enable_video_vivante = xyes; then + AC_MSG_CHECKING(for Vivante VDK API) + have_vivante_vdk=no + AC_TRY_COMPILE([ + #define LINUX + #define EGL_API_FB + #include + ],[ + ],[ + have_vivante_vdk=yes + ]) + AC_MSG_RESULT($have_vivante_vdk) + + AC_MSG_CHECKING(for Vivante FB API) + have_vivante_egl=no + AC_TRY_COMPILE([ + #define LINUX + #define EGL_API_FB + #include + ],[ + ],[ + have_vivante_egl=yes + ]) + AC_MSG_RESULT($have_vivante_egl) + + if test x$have_vivante_vdk = xyes -o x$have_vivante_egl = xyes; then + AC_DEFINE(SDL_VIDEO_DRIVER_VIVANTE, 1, [ ]) + EXTRA_CFLAGS="$EXTRA_CFLAGS -DLINUX -DEGL_API_FB" + if test x$have_vivante_vdk = xyes; then + AC_DEFINE(SDL_VIDEO_DRIVER_VIVANTE_VDK, 1, [ ]) + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lVDK" + fi + SOURCES="$SOURCES $srcdir/src/video/vivante/*.c" + SUMMARY_video="${SUMMARY_video} vivante" + have_video=yes + fi + fi +} + dnl Set up the Haiku video driver if enabled CheckHaikuVideo() { @@ -1782,6 +1868,7 @@ AC_MSG_WARN("directfb $directfb_lib") SUMMARY_video="${SUMMARY_video} directfb" fi AC_MSG_RESULT($directfb_shared) + SDL_CFLAGS="$SDL_CFLAGS $DIRECTFB_CFLAGS" have_video=yes fi fi @@ -1885,6 +1972,12 @@ dnl Check to see if OpenGL ES support is desired AC_ARG_ENABLE(video-opengles, AC_HELP_STRING([--enable-video-opengles], [include OpenGL ES support [[default=yes]]]), , enable_video_opengles=yes) +AC_ARG_ENABLE(video-opengles1, +AC_HELP_STRING([--enable-video-opengles1], [include OpenGL ES 1.1 support [[default=yes]]]), + , enable_video_opengles1=yes) +AC_ARG_ENABLE(video-opengles2, +AC_HELP_STRING([--enable-video-opengles2], [include OpenGL ES 2.0 support [[default=yes]]]), + , enable_video_opengles2=yes) dnl Find OpenGL ES CheckOpenGLESX11() @@ -1893,7 +1986,10 @@ CheckOpenGLESX11() AC_MSG_CHECKING(for EGL support) video_opengl_egl=no AC_TRY_COMPILE([ - #include + #define LINUX + #define EGL_API_FB + #include + #include ],[ ],[ video_opengl_egl=yes @@ -1903,36 +1999,40 @@ CheckOpenGLESX11() AC_DEFINE(SDL_VIDEO_OPENGL_EGL, 1, [ ]) fi - AC_MSG_CHECKING(for OpenGL ES v1 headers) - video_opengles_v1=no - AC_TRY_COMPILE([ - #include - #include - ],[ - ],[ - video_opengles_v1=yes - ]) - AC_MSG_RESULT($video_opengles_v1) - if test x$video_opengles_v1 = xyes; then - AC_DEFINE(SDL_VIDEO_OPENGL_ES, 1, [ ]) - AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES, 1, [ ]) - SUMMARY_video="${SUMMARY_video} opengl_es1" + if test x$enable_video_opengles1 = xyes; then + AC_MSG_CHECKING(for OpenGL ES v1 headers) + video_opengles_v1=no + AC_TRY_COMPILE([ + #include + #include + ],[ + ],[ + video_opengles_v1=yes + ]) + AC_MSG_RESULT($video_opengles_v1) + if test x$video_opengles_v1 = xyes; then + AC_DEFINE(SDL_VIDEO_OPENGL_ES, 1, [ ]) + AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES, 1, [ ]) + SUMMARY_video="${SUMMARY_video} opengl_es1" + fi fi - AC_MSG_CHECKING(for OpenGL ES v2 headers) - video_opengles_v2=no - AC_TRY_COMPILE([ - #include - #include - ],[ - ],[ - video_opengles_v2=yes - ]) - AC_MSG_RESULT($video_opengles_v2) - if test x$video_opengles_v2 = xyes; then - AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ]) - AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ]) - SUMMARY_video="${SUMMARY_video} opengl_es2" + if test x$enable_video_opengles2 = xyes; then + AC_MSG_CHECKING(for OpenGL ES v2 headers) + video_opengles_v2=no + AC_TRY_COMPILE([ + #include + #include + ],[ + ],[ + video_opengles_v2=yes + ]) + AC_MSG_RESULT($video_opengles_v2) + if test x$video_opengles_v2 = xyes; then + AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ]) + AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ]) + SUMMARY_video="${SUMMARY_video} opengl_es2" + fi fi fi } @@ -2007,12 +2107,40 @@ CheckMacGL() AC_DEFINE(SDL_VIDEO_OPENGL_CGL, 1, [ ]) AC_DEFINE(SDL_VIDEO_RENDER_OGL, 1, [ ]) SUMMARY_video="${SUMMARY_video} opengl" - case "$host" in - *-*-darwin*) - if test x$enable_video_cocoa = xyes; then - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,OpenGL" - fi - esac + fi +} + +CheckEmscriptenGLES() +{ + if test x$enable_video = xyes -a x$enable_video_opengles = xyes; then + AC_MSG_CHECKING(for EGL support) + video_opengl_egl=no + AC_TRY_COMPILE([ + #include + ],[ + ],[ + video_opengl_egl=yes + ]) + AC_MSG_RESULT($video_opengl_egl) + if test x$video_opengl_egl = xyes; then + AC_DEFINE(SDL_VIDEO_OPENGL_EGL, 1, [ ]) + fi + + AC_MSG_CHECKING(for OpenGL ES v2 headers) + video_opengles_v2=no + AC_TRY_COMPILE([ + #include + #include + ],[ + ],[ + video_opengles_v2=yes + ]) + AC_MSG_RESULT($video_opengles_v2) + if test x$video_opengles_v2 = xyes; then + AC_DEFINE(SDL_VIDEO_OPENGL_ES2, 1, [ ]) + AC_DEFINE(SDL_VIDEO_RENDER_OGL_ES2, 1, [ ]) + SUMMARY_video="${SUMMARY_video} opengl_es2" + fi fi } @@ -2096,6 +2224,43 @@ AC_HELP_STRING([--enable-dbus], [enable D-Bus support [[default=yes]]]), if test x$have_dbus_dbus_h_hdr = xyes; then AC_DEFINE(HAVE_DBUS_DBUS_H, 1, [ ]) EXTRA_CFLAGS="$EXTRA_CFLAGS $DBUS_CFLAGS" + SOURCES="$SOURCES $srcdir/src/core/linux/SDL_dbus.c" + fi + fi + fi +} + +dnl See if the platform has libibus IME support. +CheckIBus() +{ + AC_ARG_ENABLE(ibus, +AC_HELP_STRING([--enable-ibus], [enable IBus support [[default=yes]]]), + , enable_ibus=yes) + if test x$enable_ibus = xyes; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + if test x$PKG_CONFIG != xno; then + IBUS_CFLAGS=`$PKG_CONFIG --cflags ibus-1.0` + save_CFLAGS="$CFLAGS" + CFLAGS="$save_CFLAGS $IBUS_CFLAGS" + AC_CHECK_HEADER(ibus-1.0/ibus.h, + have_ibus_ibus_h_hdr=yes, + have_ibus_ibus_h_hdr=no) + AC_CHECK_HEADER(sys/inotify.h, + have_inotify_inotify_h_hdr=yes, + have_inotify_inotify_h_hdr=no) + CFLAGS="$save_CFLAGS" + if test x$have_ibus_ibus_h_hdr = xyes; then + if test x$enable_dbus != xyes; then + AC_MSG_WARN([DBus support is required for IBus.]) + have_ibus_ibus_h_hdr=no + elif test x$have_inotify_inotify_h_hdr != xyes; then + AC_MSG_WARN([INotify support is required for IBus.]) + have_ibus_ibus_h_hdr=no + else + AC_DEFINE(HAVE_IBUS_IBUS_H, 1, [ ]) + EXTRA_CFLAGS="$EXTRA_CFLAGS $IBUS_CFLAGS" + SOURCES="$SOURCES $srcdir/src/core/linux/SDL_ibus.c" + fi fi fi fi @@ -2137,6 +2302,10 @@ AC_HELP_STRING([--enable-pthreads], [use POSIX threads for multi-threading [[def AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]), , enable_pthread_sem=yes) case "$host" in + *-*-androideabi*) + pthread_cflags="-D_REENTRANT -D_THREAD_SAFE" + pthread_lib="" + ;; *-*-linux*|*-*-uclinux*) pthread_cflags="-D_REENTRANT" pthread_lib="-lpthread" @@ -2224,7 +2393,6 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) EXTRA_CFLAGS="$EXTRA_CFLAGS $pthread_cflags" EXTRA_LDFLAGS="$EXTRA_LDFLAGS $pthread_lib" SDL_CFLAGS="$SDL_CFLAGS $pthread_cflags" - SDL_LIBS="$SDL_LIBS $pthread_lib" # Save the original compiler flags and libraries ac_save_cflags="$CFLAGS"; ac_save_libs="$LIBS" @@ -2235,7 +2403,8 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) AC_MSG_CHECKING(for recursive mutexes) has_recursive_mutexes=no if test x$has_recursive_mutexes = xno; then - AC_TRY_COMPILE([ + AC_TRY_LINK([ + #define _GNU_SOURCE 1 #include ],[ pthread_mutexattr_t attr; @@ -2246,7 +2415,8 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) ]) fi if test x$has_recursive_mutexes = xno; then - AC_TRY_COMPILE([ + AC_TRY_LINK([ + #define _GNU_SOURCE 1 #include ],[ pthread_mutexattr_t attr; @@ -2286,15 +2456,6 @@ AC_HELP_STRING([--enable-pthread-sem], [use pthread semaphores [[default=yes]]]) AC_MSG_RESULT($have_sem_timedwait) fi - AC_MSG_CHECKING(for pthread_spin_trylock) - AC_TRY_LINK_FUNC(pthread_spin_trylock, [ - has_pthread_spin_trylock=yes - AC_DEFINE(HAVE_PTHREAD_SPINLOCK, 1, [ ]) - ],[ - has_pthread_spin_trylock=no - ]) - AC_MSG_RESULT($has_pthread_spin_trylock) - AC_CHECK_HEADER(pthread_np.h, have_pthread_np_h=yes, have_pthread_np_h=no, [ #include ]) if test x$have_pthread_np_h = xyes; then AC_DEFINE(HAVE_PTHREAD_NP_H, 1, [ ]) @@ -2398,7 +2559,25 @@ AC_HELP_STRING([--enable-directx], [use DirectX for Windows audio/video [[defaul AC_CHECK_HEADER(ddraw.h, have_ddraw=yes) AC_CHECK_HEADER(dsound.h, have_dsound=yes) AC_CHECK_HEADER(dinput.h, have_dinput=yes) + AC_CHECK_HEADER(dxgi.h, have_dxgi=yes) AC_CHECK_HEADER(xaudio2.h, have_xaudio2=yes) + AC_CHECK_HEADER(xinput.h, have_xinput=yes) + + if test x$have_ddraw = xyes; then + AC_DEFINE(HAVE_DDRAW_H, 1, [ ]) + fi + if test x$have_dinput = xyes; then + AC_DEFINE(HAVE_DINPUT_H, 1, [ ]) + fi + if test x$have_dsound = xyes; then + AC_DEFINE(HAVE_DSOUND_H, 1, [ ]) + fi + if test x$have_dxgi = xyes; then + AC_DEFINE(HAVE_DXGI_H, 1, [ ]) + fi + if test x$have_xinput = xyes; then + AC_DEFINE(HAVE_XINPUT_H, 1, [ ]) + fi SUMMARY_video="${SUMMARY_video} directx" SUMMARY_audio="${SUMMARY_audio} directx" @@ -2637,7 +2816,25 @@ case "$host" in if test x$enable_video = xyes; then SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" + # FIXME: confdefs? Not AC_DEFINE? $as_echo "#define SDL_VIDEO_DRIVER_RPI 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} rpi" + fi + ;; + *-*-androideabi*) + # Android + ARCH=android + ANDROID_CFLAGS="-DGL_GLEXT_PROTOTYPES" + CFLAGS="$CFLAGS $ANDROID_CFLAGS" + SDL_CFLAGS="$SDL_CFLAGS $ANDROID_CFLAGS" + EXTRA_CFLAGS="$EXTRA_CFLAGS $ANDROID_CFLAGS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldl -lGLESv1_CM -lGLESv2 -llog -landroid" + + if test x$enable_video = xyes; then + SOURCES="$SOURCES $srcdir/src/core/android/*.c $srcdir/src/video/android/*.c" + # FIXME: confdefs? Not AC_DEFINE? + $as_echo "#define SDL_VIDEO_DRIVER_ANDROID 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} android" fi ;; *-*-linux*) ARCH=linux ;; @@ -2649,6 +2846,21 @@ case "$host" in *-*-bsdi*) ARCH=bsdi ;; *-*-freebsd*) ARCH=freebsd ;; *-*-dragonfly*) ARCH=freebsd ;; + *-raspberry-netbsd*) + # Raspberry Pi + ARCH=netbsd + RPI_CFLAGS="-I/usr/pkg/include -I/usr/pkg/include/interface/vcos/pthreads -I/usr/pkg/include/interface/vmcs_host/linux" + CFLAGS="$CFLAGS $RPI_CFLAGS" + SDL_CFLAGS="$SDL_CFLAGS $RPI_CFLAGS" + EXTRA_CFLAGS="$EXTRA_CFLAGS $RPI_CFLAGS" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lbcm_host -ldl" + + if test x$enable_video = xyes; then + SOURCES="$SOURCES $srcdir/src/video/raspberry/*.c" + $as_echo "#define SDL_VIDEO_DRIVER_RPI 1" >>confdefs.h + SUMMARY_video="${SUMMARY_video} raspberry" + fi + ;; *-*-netbsd*) ARCH=netbsd ;; *-*-openbsd*) ARCH=openbsd ;; *-*-sysv5*) ARCH=sysv5 ;; @@ -2670,22 +2882,28 @@ case "$host" in CheckNAS CheckSNDIO CheckX11 - CheckWayland - CheckMir CheckDirectFB CheckFusionSound CheckOpenGLX11 CheckOpenGLESX11 + CheckMir + CheckWayland CheckLibUDev CheckDBus - CheckInputEvents - CheckInputKD + CheckIBus + case $ARCH in + linux) + CheckInputEvents + CheckInputKD + ;; + esac CheckTslib CheckUSBHID CheckPTHREAD CheckClockGettime CheckLinuxVersion CheckRPATH + CheckVivanteVideo # Set up files for the audio library if test x$enable_audio = xyes; then case $ARCH in @@ -2704,6 +2922,12 @@ case "$host" in SOURCES="$SOURCES $srcdir/src/audio/paudio/*.c" have_audio=yes ;; + android) + AC_DEFINE(SDL_AUDIO_DRIVER_ANDROID, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/audio/android/*.c" + SUMMARY_audio="${SUMMARY_audio} android" + have_audio=yes + ;; esac fi # Set up files for the joystick library @@ -2714,6 +2938,11 @@ case "$host" in SOURCES="$SOURCES $srcdir/src/joystick/linux/*.c" have_joystick=yes ;; + android) + AC_DEFINE(SDL_JOYSTICK_ANDROID, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/joystick/android/*.c" + have_joystick=yes + ;; esac fi # Set up files for the haptic library @@ -2736,13 +2965,27 @@ case "$host" in SOURCES="$SOURCES $srcdir/src/power/linux/*.c" have_power=yes ;; + android) + AC_DEFINE(SDL_POWER_ANDROID, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/power/android/*.c" + have_power=yes + ;; esac fi # Set up files for the filesystem library if test x$enable_filesystem = xyes; then - AC_DEFINE(SDL_FILESYSTEM_UNIX, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/filesystem/unix/*.c" - have_filesystem=yes + case $ARCH in + android) + AC_DEFINE(SDL_FILESYSTEM_ANDROID, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/filesystem/android/*.c" + have_filesystem=yes + ;; + *) + AC_DEFINE(SDL_FILESYSTEM_UNIX, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/filesystem/unix/*.c" + have_filesystem=yes + ;; + esac fi # Set up files for the timer library if test x$enable_timers = xyes; then @@ -2812,20 +3055,29 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau fi # Set up files for the joystick library if test x$enable_joystick = xyes; then - if test x$have_dinput = xyes; then - AC_DEFINE(SDL_JOYSTICK_DINPUT, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/joystick/windows/SDL_dxjoystick.c" - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldinput8 -ldxguid -ldxerr8" + if test x$have_dinput = xyes -o x$have_xinput = xyes; then + if test x$have_xinput = xyes; then + AC_DEFINE(SDL_JOYSTICK_XINPUT, 1, [ ]) + fi + if test x$have_dinput = xyes; then + AC_DEFINE(SDL_JOYSTICK_DINPUT, 1, [ ]) + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -ldinput8 -ldxguid -ldxerr8" + fi else AC_DEFINE(SDL_JOYSTICK_WINMM, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/joystick/windows/SDL_mmjoystick.c" fi + SOURCES="$SOURCES $srcdir/src/joystick/windows/*.c" have_joystick=yes fi if test x$enable_haptic = xyes; then - if test x$have_dinput = xyes; then - AC_DEFINE(SDL_HAPTIC_DINPUT, 1, [ ]) - SOURCES="$SOURCES $srcdir/src/haptic/windows/SDL_syshaptic.c" + if test x$have_dinput = xyes -o x$have_xinput = xyes; then + if test x$have_xinput = xyes; then + AC_DEFINE(SDL_HAPTIC_XINPUT, 1, [ ]) + fi + if test x$have_dinput = xyes; then + AC_DEFINE(SDL_HAPTIC_DINPUT, 1, [ ]) + fi + SOURCES="$SOURCES $srcdir/src/haptic/windows/*.c" have_haptic=yes fi fi @@ -2864,7 +3116,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau else LIBUUID=-luuid fi - EXTRA_LDFLAGS="$EXTRA_LDFLAGS -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion $LIBUUID -XCClinker -static-libgcc" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion $LIBUUID -static-libgcc" # The Windows platform requires special setup VERSION_SOURCES="$srcdir/src/main/windows/*.rc" SDLMAIN_SOURCES="$srcdir/src/main/windows/*.c" @@ -2955,6 +3207,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau # Set up files for the audio library if test x$enable_audio = xyes; then SOURCES="$SOURCES $srcdir/src/audio/coreaudio/*.c" + SUMMARY_audio="${SUMMARY_audio} coreaudio" have_audio=yes fi # Set up files for the joystick library @@ -2998,6 +3251,8 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreAudio" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,AudioToolbox" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreGraphics" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreMotion" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,GameController" ;; *-*-darwin* ) # This could be either full "Mac OS X", or plain "Darwin" which is @@ -3024,6 +3279,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau if test x$enable_audio = xyes; then AC_DEFINE(SDL_AUDIO_DRIVER_COREAUDIO, 1, [ ]) SOURCES="$SOURCES $srcdir/src/audio/coreaudio/*.c" + SUMMARY_audio="${SUMMARY_audio} coreaudio" have_audio=yes fi # Set up files for the joystick library @@ -3064,6 +3320,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau # The Mac OS X platform requires special setup. EXTRA_CFLAGS="$EXTRA_CFLAGS -fpascal-strings" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -lobjc" + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreVideo" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Cocoa" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,Carbon" EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,IOKit" @@ -3072,6 +3329,77 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit" fi ;; + *-nacl|*-pnacl) + ARCH=nacl + CheckNativeClient + CheckDummyAudio + CheckDummyVideo + CheckInputEvents + CheckPTHREAD + + # Set up files for the timer library + if test x$enable_timers = xyes; then + AC_DEFINE(SDL_TIMER_UNIX) + SOURCES="$SOURCES $srcdir/src/timer/unix/*.c" + have_timers=yes + fi + + if test x$enable_filesystem = xyes; then + AC_DEFINE(SDL_FILESYSTEM_NACL, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/filesystem/nacl/*.c" + have_filesystem=yes + fi + ;; + *-*-emscripten* ) + if test x$enable_video = xyes; then + AC_DEFINE(SDL_VIDEO_DRIVER_EMSCRIPTEN, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/video/emscripten/*.c" + have_video=yes + SUMMARY_video="${SUMMARY_video} emscripten" + fi + + if test x$enable_audio = xyes; then + AC_DEFINE(SDL_AUDIO_DRIVER_EMSCRIPTEN, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/audio/emscripten/*.c" + have_audio=yes + SUMMARY_audio="${SUMMARY_audio} emscripten" + fi + + CheckVisibilityHidden + CheckDummyVideo + CheckDiskAudio + CheckDummyAudio + CheckDLOPEN + CheckClockGettime + CheckEmscriptenGLES + + # Set up files for the power library + if test x$enable_power = xyes; then + AC_DEFINE(SDL_POWER_EMSCRIPTEN, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/power/emscripten/*.c" + have_power=yes + fi + + # Set up files for the power library + if test x$enable_joystick = xyes; then + AC_DEFINE(SDL_JOYSTICK_EMSCRIPTEN, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/joystick/emscripten/*.c" + have_joystick=yes + fi + + # Set up files for the filesystem library + if test x$enable_filesystem = xyes; then + AC_DEFINE(SDL_FILESYSTEM_EMSCRIPTEN, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/filesystem/emscripten/*.c" + have_filesystem=yes + fi + # Set up files for the timer library + if test x$enable_timers = xyes; then + AC_DEFINE(SDL_TIMER_UNIX, 1, [ ]) + SOURCES="$SOURCES $srcdir/src/timer/unix/*.c" + have_timers=yes + fi + ;; *) AC_MSG_ERROR([ *** Unsupported host: Please add to configure.in @@ -3131,7 +3459,7 @@ for EXT in asm cc m c S; do OBJECTS=`echo "$OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.'$EXT',$(objects)/\1.lo,g'` DEPENDS=`echo "$DEPENDS" | sed "s,^\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.$EXT\\$,\\\\ \\$(objects)/\\2.lo: \\1/\\2.$EXT\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` done VERSION_OBJECTS=`echo $VERSION_SOURCES` @@ -3146,14 +3474,14 @@ SDLMAIN_DEPENDS=`echo $SDLMAIN_SOURCES` SDLMAIN_OBJECTS=`echo "$SDLMAIN_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.c,$(objects)/\1.o,g'` SDLMAIN_DEPENDS=`echo "$SDLMAIN_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.c,\\\\ \\$(objects)/\\2.o: \\1/\\2.c\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` SDLTEST_OBJECTS=`echo $SDLTEST_SOURCES` SDLTEST_DEPENDS=`echo $SDLTEST_SOURCES` SDLTEST_OBJECTS=`echo "$SDLTEST_OBJECTS" | sed 's,[[^ ]]*/\([[^ ]]*\)\.c,$(objects)/\1.o,g'` SDLTEST_DEPENDS=`echo "$SDLTEST_DEPENDS" | sed "s,\\([[^ ]]*\\)/\\([[^ ]]*\\)\\.c,\\\\ \\$(objects)/\\2.o: \\1/\\2.c\\\\ - \\$(LIBTOOL) --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` + \\$(RUN_CMD_CC)\\$(LIBTOOL) --tag=CC --mode=compile \\$(CC) \\$(CFLAGS) \\$(EXTRA_CFLAGS) $DEPENDENCY_TRACKING_OPTIONS -c \\$< -o \\$@,g"` # Set runtime shared library paths as needed @@ -3221,7 +3549,7 @@ $SDLTEST_DEPENDS __EOF__ AC_CONFIG_FILES([ - Makefile:Makefile.in:Makefile.rules sdl2-config SDL2.spec sdl2.pc + Makefile:Makefile.in:Makefile.rules sdl2-config sdl2-config.cmake SDL2.spec sdl2.pc ]) AC_CONFIG_COMMANDS([sdl2_config],[chmod a+x sdl2-config]) @@ -3250,6 +3578,11 @@ if test x$have_dbus_dbus_h_hdr = xyes; then else SUMMARY="${SUMMARY}Using dbus : NO\n" fi +if test x$have_ibus_ibus_h_hdr = xyes; then + SUMMARY="${SUMMARY}Using ibus : YES\n" +else + SUMMARY="${SUMMARY}Using ibus : NO\n" +fi AC_CONFIG_COMMANDS([summary], [echo -en "$SUMMARY"], [SUMMARY="$SUMMARY"]) AC_OUTPUT diff --git a/Engine/lib/sdl/debian/control b/Engine/lib/sdl/debian/control index e116e9b34c..e61995df42 100644 --- a/Engine/lib/sdl/debian/control +++ b/Engine/lib/sdl/debian/control @@ -16,6 +16,7 @@ Build-Depends: debhelper (>= 9), libpulse-dev, libudev-dev [linux-any], libdbus-1-dev [linux-any], + libibus-1.0-dev[linux-any], libusb2-dev [kfreebsd-any], libusbhid-dev [kfreebsd-any], libx11-dev, diff --git a/Engine/lib/sdl/debian/copyright b/Engine/lib/sdl/debian/copyright index 53254644b2..8ce26d1c58 100644 --- a/Engine/lib/sdl/debian/copyright +++ b/Engine/lib/sdl/debian/copyright @@ -4,7 +4,7 @@ Upstream-Contact: Sam Lantinga Source: http://www.libsdl.org/ Files: * -Copyright: 1997-2014 Sam Lantinga +Copyright: 1997-2016 Sam Lantinga License: zlib/libpng Files: src/libm/* @@ -12,7 +12,7 @@ Copyright: 1993 by Sun Microsystems, Inc. All rights reserved. License: SunPro Files: src/main/windows/SDL_windows_main.c -Copyright: 1998 Sam Lantinga +Copyright: 2016 Sam Lantinga License: PublicDomain_Sam_Lantinga Comment: SDL_main.c, placed in the public domain by Sam Lantinga 4/13/98 @@ -36,7 +36,7 @@ Copyright: 1998 Gareth McCaughan License: Gareth_McCaughan Files: src/test/SDL_test_md5.c -Copyright: 1997-2014 Sam Lantinga +Copyright: 1997-2016 Sam Lantinga 1990 RSA Data Security, Inc. License: zlib/libpng and RSA_Data_Security @@ -50,12 +50,12 @@ Copyright: 1994-2003 The XFree86 Project, Inc. License: MIT/X11 Files: test/testhaptic.c -Copyright: 1997-2014 Sam Lantinga +Copyright: 1997-2016 Sam Lantinga 2008 Edgar Simo Serra License: BSD_3_clause Files: test/testrumble.c -Copyright: 1997-2014 Sam Lantinga +Copyright: 1997-2016 Sam Lantinga 2011 Edgar Simo Serra License: BSD_3_clause @@ -173,7 +173,7 @@ License: BSD_3_clause (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Comment: - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga . This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL.h b/Engine/lib/sdl/include/SDL.h index a9077095fe..7647b5111e 100644 --- a/Engine/lib/sdl/include/SDL.h +++ b/Engine/lib/sdl/include/SDL.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,41 +25,6 @@ * Main include header for the SDL library */ -/** - * \mainpage Simple DirectMedia Layer (SDL) - * - * http://www.libsdl.org/ - * - * \section intro_sec Introduction - * - * Simple DirectMedia Layer is a cross-platform development library designed - * to provide low level access to audio, keyboard, mouse, joystick, and - * graphics hardware via OpenGL and Direct3D. It is used by video playback - * software, emulators, and popular games including Valve's award winning - * catalog and many Humble Bundle games. - * - * SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. - * Support for other platforms may be found in the source code. - * - * SDL is written in C, works natively with C++, and there are bindings - * available for several other languages, including C# and Python. - * - * This library is distributed under the zlib license, which can be found - * in the file "COPYING.txt". - * - * The best way to learn how to use SDL is to check out the header files in - * the "include" subdirectory and the programs in the "test" subdirectory. - * The header files and test programs are well commented and always up to date. - * More documentation and FAQs are available online at: - * http://wiki.libsdl.org/ - * - * If you need help with the library, or just want to discuss SDL related - * issues, you can join the developers mailing list: - * http://www.libsdl.org/mailing-list.php - * - * Enjoy! - * Sam Lantinga (slouken@libsdl.org) - */ #ifndef _SDL_H #define _SDL_H @@ -114,7 +79,7 @@ extern "C" { #define SDL_INIT_HAPTIC 0x00001000 #define SDL_INIT_GAMECONTROLLER 0x00002000 /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ #define SDL_INIT_EVENTS 0x00004000 -#define SDL_INIT_NOPARACHUTE 0x00100000 /**< Don't catch fatal signals */ +#define SDL_INIT_NOPARACHUTE 0x00100000 /**< compatibility; this flag is ignored. */ #define SDL_INIT_EVERYTHING ( \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ @@ -123,13 +88,17 @@ extern "C" { /** * This function initializes the subsystems specified by \c flags - * Unless the ::SDL_INIT_NOPARACHUTE flag is set, it will install cleanup - * signal handlers for some commonly ignored fatal signals (like SIGSEGV). */ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); /** * This function initializes specific SDL subsystems + * + * Subsystem initialization is ref-counted, you must call + * SDL_QuitSubSystem for each SDL_InitSubSystem to correctly + * shutdown a subsystem manually (or call SDL_Quit to force shutdown). + * If a subsystem is already loaded then this call will + * increase the ref-count and return. */ extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); diff --git a/Engine/lib/sdl/include/SDL_assert.h b/Engine/lib/sdl/include/SDL_assert.h index 42348f7d13..402981f967 100644 --- a/Engine/lib/sdl/include/SDL_assert.h +++ b/Engine/lib/sdl/include/SDL_assert.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,7 +51,7 @@ assert can have unique static variables associated with it. /* Don't include intrin.h here because it contains C++ code */ extern void __cdecl __debugbreak(void); #define SDL_TriggerBreakpoint() __debugbreak() -#elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) +#elif (!defined(__NACL__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #elif defined(HAVE_SIGNAL_H) #include @@ -86,8 +86,10 @@ This also solves the problem of... disable assertions. */ +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ #ifdef _MSC_VER /* stupid /W4 warnings. */ -#define SDL_NULL_WHILE_LOOP_CONDITION (-1 == __LINE__) +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) #else #define SDL_NULL_WHILE_LOOP_CONDITION (0) #endif @@ -102,9 +104,9 @@ typedef enum SDL_ASSERTION_ABORT, /**< Terminate the program. */ SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ -} SDL_assert_state; +} SDL_AssertState; -typedef struct SDL_assert_data +typedef struct SDL_AssertData { int always_ignore; unsigned int trigger_count; @@ -112,13 +114,13 @@ typedef struct SDL_assert_data const char *filename; int linenum; const char *function; - const struct SDL_assert_data *next; -} SDL_assert_data; + const struct SDL_AssertData *next; +} SDL_AssertData; #if (SDL_ASSERT_LEVEL > 0) /* Never call this directly. Use the SDL_assert* macros. */ -extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, const char *, const char *, int) #if defined(__clang__) @@ -141,16 +143,13 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, #define SDL_enabled_assert(condition) \ do { \ while ( !(condition) ) { \ - static struct SDL_assert_data assert_data = { \ + static struct SDL_AssertData sdl_assert_data = { \ 0, 0, #condition, 0, 0, 0, 0 \ }; \ - const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \ - SDL_FUNCTION, \ - SDL_FILE, \ - SDL_LINE); \ - if (state == SDL_ASSERTION_RETRY) { \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ continue; /* go again. */ \ - } else if (state == SDL_ASSERTION_BREAK) { \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ SDL_TriggerBreakpoint(); \ } \ break; /* not retrying. */ \ @@ -184,8 +183,8 @@ extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, #define SDL_assert_always(condition) SDL_enabled_assert(condition) -typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( - const SDL_assert_data* data, void* userdata); +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); /** * \brief Set an application-defined assertion handler. @@ -202,7 +201,7 @@ typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( * * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! * - * \return SDL_assert_state value of how to handle the assertion failure. + * \return SDL_AssertState value of how to handle the assertion failure. * * \param handler Callback function, called when an assertion fails. * \param userdata A pointer passed to the callback as-is. @@ -249,7 +248,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse * The proper way to examine this data looks something like this: * * - * const SDL_assert_data *item = SDL_GetAssertionReport(); + * const SDL_AssertData *item = SDL_GetAssertionReport(); * while (item) { * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", * item->condition, item->function, item->filename, @@ -262,7 +261,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse * \return List of all assertions. * \sa SDL_ResetAssertionReport */ -extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); /** * \brief Reset the list of all assertion failures. @@ -273,6 +272,12 @@ extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); */ extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/Engine/lib/sdl/include/SDL_atomic.h b/Engine/lib/sdl/include/SDL_atomic.h index bb3a9b657d..56aa81df98 100644 --- a/Engine/lib/sdl/include/SDL_atomic.h +++ b/Engine/lib/sdl/include/SDL_atomic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -122,7 +122,8 @@ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); void _ReadWriteBarrier(void); #pragma intrinsic(_ReadWriteBarrier) #define SDL_CompilerBarrier() _ReadWriteBarrier() -#elif defined(__GNUC__) +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") #else #define SDL_CompilerBarrier() \ @@ -169,10 +170,17 @@ extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire(); #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") #endif /* __GNUC__ && __arm__ */ #else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else /* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ #define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() #define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() #endif +#endif /** * \brief A type representing an atomic integer value. It is a struct diff --git a/Engine/lib/sdl/include/SDL_audio.h b/Engine/lib/sdl/include/SDL_audio.h index 4c987d5110..4f65521468 100644 --- a/Engine/lib/sdl/include/SDL_audio.h +++ b/Engine/lib/sdl/include/SDL_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -155,6 +155,9 @@ typedef Uint16 SDL_AudioFormat; * * Once the callback returns, the buffer will no longer be valid. * Stereo samples are stored in a LRLRLR ordering. + * + * You can choose to avoid callbacks and use SDL_QueueAudio() instead, if + * you like. Just open your audio device with a NULL callback. */ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, int len); @@ -171,8 +174,8 @@ typedef struct SDL_AudioSpec Uint16 samples; /**< Audio buffer size in samples (power of 2) */ Uint16 padding; /**< Necessary for some compile environments */ Uint32 size; /**< Audio buffer size in bytes (calculated) */ - SDL_AudioCallback callback; - void *userdata; + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ } SDL_AudioSpec; @@ -273,9 +276,11 @@ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); * to the audio buffer, and the length in bytes of the audio buffer. * This function usually runs in a separate thread, and so you should * protect data structures that it accesses by calling SDL_LockAudio() - * and SDL_UnlockAudio() in your code. + * and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played. * - \c desired->userdata is passed as the first parameter to your callback - * function. + * function. If you passed a NULL callback, this value is ignored. * * The audio device starts out playing silence when it's opened, and should * be enabled for playing by calling \c SDL_PauseAudio(0) when you are ready @@ -474,6 +479,100 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, SDL_AudioFormat format, Uint32 len, int volume); +/** + * Queue more audio on non-callback devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio + * (pull method), or you can supply no callback, and then SDL will expect + * you to supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs + * audio but there is not enough queued, it will play silence to make up + * the difference. This means you will have skips in your audio playback + * if you aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when + * the function returns. This function is thread-safe, but queueing to the + * same device from two threads at once does not promise which buffer will + * be queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback + * or queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * \param dev The device ID to which we will queue audio. + * \param data The data to queue to the device for later playback. + * \param len The number of bytes (not samples!) to which (data) points. + * \return zero on success, -1 on error. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_ClearQueuedAudio + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * This is the number of bytes that have been queued for playback with + * SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device always returns 0. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev The device ID of which we will query queued audio size. + * \return Number of bytes (not samples!) of queued audio. + * + * \sa SDL_QueueAudio + * \sa SDL_ClearQueuedAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and + * the hardware will start playing silence if more audio isn't queued. + * + * This will not prevent playback of queued audio that's already been sent + * to the hardware, as we can not undo that, so expect there to be some + * fraction of a second of audio that might still be heard. This can be + * useful if you want to, say, drop any pending music during a level change + * in your game. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device is always a no-op. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev The device ID of which to clear the audio queue. + * + * \sa SDL_QueueAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + /** * \name Audio lock functions * diff --git a/Engine/lib/sdl/include/SDL_bits.h b/Engine/lib/sdl/include/SDL_bits.h index 341524fd9f..528da2eac6 100644 --- a/Engine/lib/sdl/include/SDL_bits.h +++ b/Engine/lib/sdl/include/SDL_bits.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_blendmode.h b/Engine/lib/sdl/include/SDL_blendmode.h index 8c257be9c0..56d8ad66ef 100644 --- a/Engine/lib/sdl/include/SDL_blendmode.h +++ b/Engine/lib/sdl/include/SDL_blendmode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -58,6 +58,6 @@ typedef enum #endif #include "close_code.h" -#endif /* _SDL_video_h */ +#endif /* _SDL_blendmode_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/include/SDL_clipboard.h b/Engine/lib/sdl/include/SDL_clipboard.h index 74e2b32fe7..a5556f21c4 100644 --- a/Engine/lib/sdl/include/SDL_clipboard.h +++ b/Engine/lib/sdl/include/SDL_clipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_config.h b/Engine/lib/sdl/include/SDL_config.h index 9a2e51c55a..4270c78bf5 100644 --- a/Engine/lib/sdl/include/SDL_config.h +++ b/Engine/lib/sdl/include/SDL_config.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_config.h.cmake b/Engine/lib/sdl/include/SDL_config.h.cmake index b6fb53aa23..44173a0533 100644 --- a/Engine/lib/sdl/include/SDL_config.h.cmake +++ b/Engine/lib/sdl/include/SDL_config.h.cmake @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -46,7 +46,15 @@ #cmakedefine HAVE_GCC_ATOMICS @HAVE_GCC_ATOMICS@ #cmakedefine HAVE_GCC_SYNC_LOCK_TEST_AND_SET @HAVE_GCC_SYNC_LOCK_TEST_AND_SET@ -#cmakedefine HAVE_PTHREAD_SPINLOCK @HAVE_PTHREAD_SPINLOCK@ + +#cmakedefine HAVE_D3D_H @HAVE_D3D_H@ +#cmakedefine HAVE_D3D11_H @HAVE_D3D11_H@ +#cmakedefine HAVE_DDRAW_H @HAVE_DDRAW_H@ +#cmakedefine HAVE_DSOUND_H @HAVE_DSOUND_H@ +#cmakedefine HAVE_DINPUT_H @HAVE_DINPUT_H@ +#cmakedefine HAVE_XAUDIO2_H @HAVE_XAUDIO2_H@ +#cmakedefine HAVE_XINPUT_H @HAVE_XINPUT_H@ +#cmakedefine HAVE_DXGI_H @HAVE_DXGI_H@ /* Comment this if you want to build without any C library requirements */ #cmakedefine HAVE_LIBC 1 @@ -143,6 +151,9 @@ #cmakedefine HAVE_SIN 1 #cmakedefine HAVE_SINF 1 #cmakedefine HAVE_SQRT 1 +#cmakedefine HAVE_SQRTF 1 +#cmakedefine HAVE_TAN 1 +#cmakedefine HAVE_TANF 1 #cmakedefine HAVE_FSEEKO 1 #cmakedefine HAVE_FSEEKO64 1 #cmakedefine HAVE_SIGACTION 1 @@ -186,6 +197,7 @@ #cmakedefine SDL_FILESYSTEM_DISABLED @SDL_FILESYSTEM_DISABLED@ /* Enable various audio drivers */ +#cmakedefine SDL_AUDIO_DRIVER_ANDROID @SDL_AUDIO_DRIVER_ANDROID@ #cmakedefine SDL_AUDIO_DRIVER_ALSA @SDL_AUDIO_DRIVER_ALSA@ #cmakedefine SDL_AUDIO_DRIVER_ALSA_DYNAMIC @SDL_AUDIO_DRIVER_ALSA_DYNAMIC@ #cmakedefine SDL_AUDIO_DRIVER_ARTS @SDL_AUDIO_DRIVER_ARTS@ @@ -213,23 +225,29 @@ #cmakedefine SDL_AUDIO_DRIVER_WINMM @SDL_AUDIO_DRIVER_WINMM@ #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND @SDL_AUDIO_DRIVER_FUSIONSOUND@ #cmakedefine SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC @SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC@ +#cmakedefine SDL_AUDIO_DRIVER_EMSCRIPTEN @SDL_AUDIO_DRIVER_EMSCRIPTEN@ /* Enable various input drivers */ #cmakedefine SDL_INPUT_LINUXEV @SDL_INPUT_LINUXEV@ #cmakedefine SDL_INPUT_LINUXKD @SDL_INPUT_LINUXKD@ #cmakedefine SDL_INPUT_TSLIB @SDL_INPUT_TSLIB@ +#cmakedefine SDL_JOYSTICK_ANDROID @SDL_JOYSTICK_ANDROID@ #cmakedefine SDL_JOYSTICK_HAIKU @SDL_JOYSTICK_HAIKU@ #cmakedefine SDL_JOYSTICK_DINPUT @SDL_JOYSTICK_DINPUT@ +#cmakedefine SDL_JOYSTICK_XINPUT @SDL_JOYSTICK_XINPUT@ #cmakedefine SDL_JOYSTICK_DUMMY @SDL_JOYSTICK_DUMMY@ #cmakedefine SDL_JOYSTICK_IOKIT @SDL_JOYSTICK_IOKIT@ +#cmakedefine SDL_JOYSTICK_MFI @SDL_JOYSTICK_MFI@ #cmakedefine SDL_JOYSTICK_LINUX @SDL_JOYSTICK_LINUX@ #cmakedefine SDL_JOYSTICK_WINMM @SDL_JOYSTICK_WINMM@ #cmakedefine SDL_JOYSTICK_USBHID @SDL_JOYSTICK_USBHID@ #cmakedefine SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H @SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H@ +#cmakedefine SDL_JOYSTICK_EMSCRIPTEN @SDL_JOYSTICK_EMSCRIPTEN@ #cmakedefine SDL_HAPTIC_DUMMY @SDL_HAPTIC_DUMMY@ #cmakedefine SDL_HAPTIC_LINUX @SDL_HAPTIC_LINUX@ #cmakedefine SDL_HAPTIC_IOKIT @SDL_HAPTIC_IOKIT@ #cmakedefine SDL_HAPTIC_DINPUT @SDL_HAPTIC_DINPUT@ +#cmakedefine SDL_HAPTIC_XINPUT @SDL_HAPTIC_XINPUT@ /* Enable various shared object loading systems */ #cmakedefine SDL_LOADSO_HAIKU @SDL_LOADSO_HAIKU@ @@ -252,6 +270,7 @@ #cmakedefine SDL_TIMER_WINCE @SDL_TIMER_WINCE@ /* Enable various video drivers */ +#cmakedefine SDL_VIDEO_DRIVER_ANDROID @SDL_VIDEO_DRIVER_ANDROID@ #cmakedefine SDL_VIDEO_DRIVER_HAIKU @SDL_VIDEO_DRIVER_HAIKU@ #cmakedefine SDL_VIDEO_DRIVER_COCOA @SDL_VIDEO_DRIVER_COCOA@ #cmakedefine SDL_VIDEO_DRIVER_DIRECTFB @SDL_VIDEO_DRIVER_DIRECTFB@ @@ -259,19 +278,20 @@ #cmakedefine SDL_VIDEO_DRIVER_DUMMY @SDL_VIDEO_DRIVER_DUMMY@ #cmakedefine SDL_VIDEO_DRIVER_WINDOWS @SDL_VIDEO_DRIVER_WINDOWS@ #cmakedefine SDL_VIDEO_DRIVER_WAYLAND @SDL_VIDEO_DRIVER_WAYLAND@ +#cmakedefine SDL_VIDEO_DRIVER_RPI @SDL_VIDEO_DRIVER_RPI@ +#cmakedefine SDL_VIDEO_DRIVER_VIVANTE @SDL_VIDEO_DRIVER_VIVANTE@ +#cmakedefine SDL_VIDEO_DRIVER_VIVANTE_VDK @SDL_VIDEO_DRIVER_VIVANTE_VDK@ -#if 0 -/* !!! FIXME: in configure script version, missing here: */ -#undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR -#undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON -#endif +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH @SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR@ +#cmakedefine SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON@ #cmakedefine SDL_VIDEO_DRIVER_MIR @SDL_VIDEO_DRIVER_MIR@ #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC @SDL_VIDEO_DRIVER_MIR_DYNAMIC@ #cmakedefine SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON @SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON@ +#cmakedefine SDL_VIDEO_DRIVER_EMSCRIPTEN @SDL_VIDEO_DRIVER_EMSCRIPTEN@ #cmakedefine SDL_VIDEO_DRIVER_X11 @SDL_VIDEO_DRIVER_X11@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC @SDL_VIDEO_DRIVER_X11_DYNAMIC@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT @SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT@ @@ -282,6 +302,7 @@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS @SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS@ #cmakedefine SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE @SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XCURSOR @SDL_VIDEO_DRIVER_X11_XCURSOR@ +#cmakedefine SDL_VIDEO_DRIVER_X11_XDBE @SDL_VIDEO_DRIVER_X11_XDBE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINERAMA @SDL_VIDEO_DRIVER_X11_XINERAMA@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2 @SDL_VIDEO_DRIVER_X11_XINPUT2@ #cmakedefine SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH@ @@ -290,7 +311,6 @@ #cmakedefine SDL_VIDEO_DRIVER_X11_XSHAPE @SDL_VIDEO_DRIVER_X11_XSHAPE@ #cmakedefine SDL_VIDEO_DRIVER_X11_XVIDMODE @SDL_VIDEO_DRIVER_X11_XVIDMODE@ #cmakedefine SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS @SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS@ -#cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32@ #cmakedefine SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY @SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY@ #cmakedefine SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM @SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM@ @@ -314,18 +334,22 @@ #cmakedefine SDL_VIDEO_OPENGL_OSMESA_DYNAMIC @SDL_VIDEO_OPENGL_OSMESA_DYNAMIC@ /* Enable system power support */ +#cmakedefine SDL_POWER_ANDROID @SDL_POWER_ANDROID@ #cmakedefine SDL_POWER_LINUX @SDL_POWER_LINUX@ #cmakedefine SDL_POWER_WINDOWS @SDL_POWER_WINDOWS@ #cmakedefine SDL_POWER_MACOSX @SDL_POWER_MACOSX@ #cmakedefine SDL_POWER_HAIKU @SDL_POWER_HAIKU@ +#cmakedefine SDL_POWER_EMSCRIPTEN @SDL_POWER_EMSCRIPTEN@ #cmakedefine SDL_POWER_HARDWIRED @SDL_POWER_HARDWIRED@ /* Enable system filesystem support */ +#cmakedefine SDL_FILESYSTEM_ANDROID @SDL_FILESYSTEM_ANDROID@ #cmakedefine SDL_FILESYSTEM_HAIKU @SDL_FILESYSTEM_HAIKU@ #cmakedefine SDL_FILESYSTEM_COCOA @SDL_FILESYSTEM_COCOA@ #cmakedefine SDL_FILESYSTEM_DUMMY @SDL_FILESYSTEM_DUMMY@ #cmakedefine SDL_FILESYSTEM_UNIX @SDL_FILESYSTEM_UNIX@ #cmakedefine SDL_FILESYSTEM_WINDOWS @SDL_FILESYSTEM_WINDOWS@ +#cmakedefine SDL_FILESYSTEM_EMSCRIPTEN @SDL_FILESYSTEM_EMSCRIPTEN@ /* Enable assembly routines */ #cmakedefine SDL_ASSEMBLY_ROUTINES @SDL_ASSEMBLY_ROUTINES@ diff --git a/Engine/lib/sdl/include/SDL_config.h.in b/Engine/lib/sdl/include/SDL_config.h.in index 689dcf8395..2071be4e50 100644 --- a/Engine/lib/sdl/include/SDL_config.h.in +++ b/Engine/lib/sdl/include/SDL_config.h.in @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -49,7 +49,12 @@ #endif #undef HAVE_GCC_ATOMICS #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET -#undef HAVE_PTHREAD_SPINLOCK + +#undef HAVE_DDRAW_H +#undef HAVE_DINPUT_H +#undef HAVE_DSOUND_H +#undef HAVE_DXGI_H +#undef HAVE_XINPUT_H /* Comment this if you want to build without any C library requirements */ #undef HAVE_LIBC @@ -76,6 +81,7 @@ #undef HAVE_PTHREAD_NP_H #undef HAVE_LIBUDEV_H #undef HAVE_DBUS_DBUS_H +#undef HAVE_IBUS_IBUS_H /* C library functions */ #undef HAVE_MALLOC @@ -148,6 +154,9 @@ #undef HAVE_SIN #undef HAVE_SINF #undef HAVE_SQRT +#undef HAVE_SQRTF +#undef HAVE_TAN +#undef HAVE_TANF #undef HAVE_FSEEKO #undef HAVE_FSEEKO64 #undef HAVE_SIGACTION @@ -201,10 +210,12 @@ #undef SDL_AUDIO_DRIVER_COREAUDIO #undef SDL_AUDIO_DRIVER_DISK #undef SDL_AUDIO_DRIVER_DUMMY +#undef SDL_AUDIO_DRIVER_ANDROID #undef SDL_AUDIO_DRIVER_XAUDIO2 #undef SDL_AUDIO_DRIVER_DSOUND #undef SDL_AUDIO_DRIVER_ESD #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC +#undef SDL_AUDIO_DRIVER_NACL #undef SDL_AUDIO_DRIVER_NAS #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC #undef SDL_AUDIO_DRIVER_SNDIO @@ -217,6 +228,7 @@ #undef SDL_AUDIO_DRIVER_WINMM #undef SDL_AUDIO_DRIVER_FUSIONSOUND #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC +#undef SDL_AUDIO_DRIVER_EMSCRIPTEN /* Enable various input drivers */ #undef SDL_INPUT_LINUXEV @@ -224,16 +236,20 @@ #undef SDL_INPUT_TSLIB #undef SDL_JOYSTICK_HAIKU #undef SDL_JOYSTICK_DINPUT +#undef SDL_JOYSTICK_XINPUT #undef SDL_JOYSTICK_DUMMY #undef SDL_JOYSTICK_IOKIT #undef SDL_JOYSTICK_LINUX +#undef SDL_JOYSTICK_ANDROID #undef SDL_JOYSTICK_WINMM #undef SDL_JOYSTICK_USBHID #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H +#undef SDL_JOYSTICK_EMSCRIPTEN #undef SDL_HAPTIC_DUMMY #undef SDL_HAPTIC_LINUX #undef SDL_HAPTIC_IOKIT #undef SDL_HAPTIC_DINPUT +#undef SDL_HAPTIC_XINPUT /* Enable various shared object loading systems */ #undef SDL_LOADSO_HAIKU @@ -272,6 +288,8 @@ #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON #undef SDL_VIDEO_DRIVER_X11 #undef SDL_VIDEO_DRIVER_RPI +#undef SDL_VIDEO_DRIVER_ANDROID +#undef SDL_VIDEO_DRIVER_EMSCRIPTEN #undef SDL_VIDEO_DRIVER_X11_DYNAMIC #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR @@ -281,6 +299,7 @@ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE #undef SDL_VIDEO_DRIVER_X11_XCURSOR +#undef SDL_VIDEO_DRIVER_X11_XDBE #undef SDL_VIDEO_DRIVER_X11_XINERAMA #undef SDL_VIDEO_DRIVER_X11_XINPUT2 #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH @@ -289,9 +308,11 @@ #undef SDL_VIDEO_DRIVER_X11_XSHAPE #undef SDL_VIDEO_DRIVER_X11_XVIDMODE #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS -#undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM +#undef SDL_VIDEO_DRIVER_NACL +#undef SDL_VIDEO_DRIVER_VIVANTE +#undef SDL_VIDEO_DRIVER_VIVANTE_VDK #undef SDL_VIDEO_RENDER_D3D #undef SDL_VIDEO_RENDER_D3D11 @@ -317,6 +338,8 @@ #undef SDL_POWER_WINDOWS #undef SDL_POWER_MACOSX #undef SDL_POWER_HAIKU +#undef SDL_POWER_ANDROID +#undef SDL_POWER_EMSCRIPTEN #undef SDL_POWER_HARDWIRED /* Enable system filesystem support */ @@ -325,6 +348,9 @@ #undef SDL_FILESYSTEM_DUMMY #undef SDL_FILESYSTEM_UNIX #undef SDL_FILESYSTEM_WINDOWS +#undef SDL_FILESYSTEM_NACL +#undef SDL_FILESYSTEM_ANDROID +#undef SDL_FILESYSTEM_EMSCRIPTEN /* Enable assembly routines */ #undef SDL_ASSEMBLY_ROUTINES diff --git a/Engine/lib/sdl/include/SDL_config_android.h b/Engine/lib/sdl/include/SDL_config_android.h index 738dd94cca..a388ba8de0 100644 --- a/Engine/lib/sdl/include/SDL_config_android.h +++ b/Engine/lib/sdl/include/SDL_config_android.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,7 +43,6 @@ #define HAVE_STDINT_H 1 #define HAVE_CTYPE_H 1 #define HAVE_MATH_H 1 -#define HAVE_SIGNAL_H 1 /* C library functions */ #define HAVE_MALLOC 1 @@ -76,7 +75,6 @@ #define HAVE_STRTOULL 1 #define HAVE_STRTOD 1 #define HAVE_ATOI 1 -#define HAVE_ATOF 1 #define HAVE_STRCMP 1 #define HAVE_STRNCMP 1 #define HAVE_STRCASECMP 1 @@ -100,10 +98,13 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 -#define HAVE_SIGACTION 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_SYSCONF 1 +#define HAVE_CLOCK_GETTIME 1 #define SIZEOF_VOIDP 4 @@ -138,7 +139,7 @@ /* Enable system power support */ #define SDL_POWER_ANDROID 1 -/* !!! FIXME: what does Android do for filesystem stuff? */ -#define SDL_FILESYSTEM_DUMMY 1 +/* Enable the filesystem driver */ +#define SDL_FILESYSTEM_ANDROID 1 #endif /* _SDL_config_android_h */ diff --git a/Engine/lib/sdl/include/SDL_config_iphoneos.h b/Engine/lib/sdl/include/SDL_config_iphoneos.h index a0f55b6a7e..304c89201d 100644 --- a/Engine/lib/sdl/include/SDL_config_iphoneos.h +++ b/Engine/lib/sdl/include/SDL_config_iphoneos.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -98,6 +98,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 @@ -110,10 +113,13 @@ #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable the stub haptic driver (src/haptic/dummy/\*.c) */ -#define SDL_HAPTIC_DISABLED 1 +#define SDL_HAPTIC_DUMMY 1 + +/* Enable MFi joystick support */ +#define SDL_JOYSTICK_MFI 1 /* Enable Unix style SO loading */ -/* Technically this works, but it violates the iPhone developer agreement */ +/* Technically this works, but violates the iOS dev agreement prior to iOS 8 */ /* #define SDL_LOADSO_DLOPEN 1 */ /* Enable the stub shared object loader (src/loadso/dummy/\*.c) */ @@ -131,6 +137,7 @@ #define SDL_VIDEO_DRIVER_DUMMY 1 /* enable OpenGL ES */ +#define SDL_VIDEO_OPENGL_ES2 1 #define SDL_VIDEO_OPENGL_ES 1 #define SDL_VIDEO_RENDER_OGL_ES 1 #define SDL_VIDEO_RENDER_OGL_ES2 1 @@ -141,11 +148,11 @@ /* enable iPhone keyboard support */ #define SDL_IPHONE_KEYBOARD 1 -/* enable joystick subsystem */ -#define SDL_JOYSTICK_DISABLED 0 +/* enable iOS extended launch screen */ +#define SDL_IPHONE_LAUNCHSCREEN 1 /* Set max recognized G-force from accelerometer - See src/joystick/uikit/SDLUIAccelerationDelegate.m for notes on why this is needed + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed */ #define SDL_IPHONE_MAX_GFORCE 5.0 diff --git a/Engine/lib/sdl/include/SDL_config_macosx.h b/Engine/lib/sdl/include/SDL_config_macosx.h index e627aef268..5c8b7e0335 100644 --- a/Engine/lib/sdl/include/SDL_config_macosx.h +++ b/Engine/lib/sdl/include/SDL_config_macosx.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -96,6 +96,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 @@ -136,6 +139,7 @@ #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/usr/X11R6/lib/libXss.1.dylib" #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "/usr/X11R6/lib/libXxf86vm.1.dylib" +#define SDL_VIDEO_DRIVER_X11_XDBE 1 #define SDL_VIDEO_DRIVER_X11_XINERAMA 1 #define SDL_VIDEO_DRIVER_X11_XRANDR 1 #define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1 diff --git a/Engine/lib/sdl/include/SDL_config_minimal.h b/Engine/lib/sdl/include/SDL_config_minimal.h index 1bddafea76..3c9d09afcf 100644 --- a/Engine/lib/sdl/include/SDL_config_minimal.h +++ b/Engine/lib/sdl/include/SDL_config_minimal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_config_pandora.h b/Engine/lib/sdl/include/SDL_config_pandora.h index ac8b08508c..7b51e571fa 100644 --- a/Engine/lib/sdl/include/SDL_config_pandora.h +++ b/Engine/lib/sdl/include/SDL_config_pandora.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -95,6 +95,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 diff --git a/Engine/lib/sdl/include/SDL_config_psp.h b/Engine/lib/sdl/include/SDL_config_psp.h index 2f9d023c5e..a6e49609a5 100644 --- a/Engine/lib/sdl/include/SDL_config_psp.h +++ b/Engine/lib/sdl/include/SDL_config_psp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -98,6 +98,9 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 /* #define HAVE_SYSCONF 1 */ diff --git a/Engine/lib/sdl/include/SDL_config_windows.h b/Engine/lib/sdl/include/SDL_config_windows.h index 35eda4653e..890986cc4e 100644 --- a/Engine/lib/sdl/include/SDL_config_windows.h +++ b/Engine/lib/sdl/include/SDL_config_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -76,6 +76,12 @@ typedef unsigned int uintptr_t; # define SIZEOF_VOIDP 4 #endif +#define HAVE_DDRAW_H 1 +#define HAVE_DINPUT_H 1 +#define HAVE_DSOUND_H 1 +#define HAVE_DXGI_H 1 +#define HAVE_XINPUT_H 1 + /* This is disabled by default to avoid C runtime dependencies and manifest requirements */ #ifdef HAVE_LIBC /* Useful headers */ @@ -130,6 +136,9 @@ typedef unsigned int uintptr_t; #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #if _MSC_VER >= 1800 #define HAVE_STRTOLL 1 #define HAVE_VSSCANF 1 @@ -153,7 +162,9 @@ typedef unsigned int uintptr_t; /* Enable various input drivers */ #define SDL_JOYSTICK_DINPUT 1 +#define SDL_JOYSTICK_XINPUT 1 #define SDL_HAPTIC_DINPUT 1 +#define SDL_HAPTIC_XINPUT 1 /* Enable various shared object loading systems */ #define SDL_LOADSO_WINDOWS 1 diff --git a/Engine/lib/sdl/include/SDL_config_winrt.h b/Engine/lib/sdl/include/SDL_config_winrt.h index 78b43ab649..e392f773e9 100644 --- a/Engine/lib/sdl/include/SDL_config_winrt.h +++ b/Engine/lib/sdl/include/SDL_config_winrt.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2012 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,11 +19,26 @@ 3. This notice may not be removed or altered from any source distribution. */ -#ifndef _SDL_config_windows_h -#define _SDL_config_windows_h +#ifndef _SDL_config_winrt_h +#define _SDL_config_winrt_h #include "SDL_platform.h" +/* Make sure the Windows SDK's NTDDI_VERSION macro gets defined. This is used + by SDL to determine which version of the Windows SDK is being used. +*/ +#include + +/* Define possibly-undefined NTDDI values (used when compiling SDL against + older versions of the Windows SDK. +*/ +#ifndef NTDDI_WINBLUE +#define NTDDI_WINBLUE 0x06030000 +#endif +#ifndef NTDDI_WIN10 +#define NTDDI_WIN10 0x0A000000 +#endif + /* This is a set of defines to configure the SDL features */ #if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H) @@ -77,6 +92,10 @@ typedef unsigned int uintptr_t; #endif /* Useful headers */ +#define HAVE_DXGI_H 1 +#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP +#define HAVE_XINPUT_H 1 +#endif #define HAVE_LIBC 1 #define HAVE_STDIO_H 1 #define STDC_HEADERS 1 @@ -136,6 +155,9 @@ typedef unsigned int uintptr_t; #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE__FSEEKI64 1 /* Enable various audio drivers */ @@ -144,20 +166,24 @@ typedef unsigned int uintptr_t; #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */ -// TODO, WinRT: Get haptic support working -#define SDL_HAPTIC_DISABLED 1 - #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP #define SDL_JOYSTICK_DISABLED 1 +#define SDL_HAPTIC_DISABLED 1 #else #define SDL_JOYSTICK_XINPUT 1 +#define SDL_HAPTIC_XINPUT 1 #endif /* Enable various shared object loading systems */ #define SDL_LOADSO_WINDOWS 1 /* Enable various threading systems */ +#if (NTDDI_VERSION >= NTDDI_WINBLUE) +#define SDL_THREAD_WINDOWS 1 +#else +/* WinRT on Windows 8.0 and Windows Phone 8.0 don't support CreateThread() */ #define SDL_THREAD_STDCPP 1 +#endif /* Enable various timer systems */ #define SDL_TIMER_WINDOWS 1 @@ -167,10 +193,8 @@ typedef unsigned int uintptr_t; #define SDL_VIDEO_DRIVER_DUMMY 1 /* Enable OpenGL ES 2.0 (via a modified ANGLE library) */ -#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP /* TODO, WinRT: try adding OpenGL ES 2 support for Windows Phone 8 */ #define SDL_VIDEO_OPENGL_ES2 1 #define SDL_VIDEO_OPENGL_EGL 1 -#endif /* Enable appropriate renderer(s) */ #define SDL_VIDEO_RENDER_D3D11 1 @@ -187,4 +211,4 @@ typedef unsigned int uintptr_t; #define SDL_ASSEMBLY_ROUTINES 1 #endif -#endif /* _SDL_config_windows_h */ +#endif /* _SDL_config_winrt_h */ diff --git a/Engine/lib/sdl/include/SDL_config_wiz.h b/Engine/lib/sdl/include/SDL_config_wiz.h index 7efc20bc96..e090a1a907 100644 --- a/Engine/lib/sdl/include/SDL_config_wiz.h +++ b/Engine/lib/sdl/include/SDL_config_wiz.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -89,12 +89,14 @@ #define HAVE_SIN 1 #define HAVE_SINF 1 #define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 #define HAVE_SIGACTION 1 #define HAVE_SETJMP 1 #define HAVE_NANOSLEEP 1 #define HAVE_POW 1 -#define SDL_CDROM_DISABLED 1 #define SDL_AUDIO_DRIVER_DUMMY 1 #define SDL_AUDIO_DRIVER_OSS 1 diff --git a/Engine/lib/sdl/include/SDL_copying.h b/Engine/lib/sdl/include/SDL_copying.h index 0964da84f4..212da0ee0e 100644 --- a/Engine/lib/sdl/include/SDL_copying.h +++ b/Engine/lib/sdl/include/SDL_copying.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_cpuinfo.h b/Engine/lib/sdl/include/SDL_cpuinfo.h index 1f6efd384a..d0ba47bf7f 100644 --- a/Engine/lib/sdl/include/SDL_cpuinfo.h +++ b/Engine/lib/sdl/include/SDL_cpuinfo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -139,6 +139,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); */ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); +/** + * This function returns true if the CPU has AVX2 features. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + /** * This function returns the amount of RAM configured in the system, in MB. */ diff --git a/Engine/lib/sdl/include/SDL_egl.h b/Engine/lib/sdl/include/SDL_egl.h index d312f0425d..bea2a6c0ec 100644 --- a/Engine/lib/sdl/include/SDL_egl.h +++ b/Engine/lib/sdl/include/SDL_egl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,13 +20,14 @@ */ /** - * \file SDL_opengles.h + * \file SDL_egl.h * - * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + * This is a simple file to encapsulate the EGL API headers. */ #ifndef _MSC_VER #include +#include #else /* _MSC_VER */ @@ -394,8 +395,8 @@ typedef enum { #if __WINRT__ #include typedef IUnknown * EGLNativeWindowType; -typedef int EGLNativeDisplayType; -typedef HBITMAP EGLNativePixmapType; +typedef IUnknown * EGLNativePixmapType; +typedef IUnknown * EGLNativeDisplayType; #else typedef HDC EGLNativeDisplayType; typedef HBITMAP EGLNativePixmapType; @@ -420,7 +421,7 @@ typedef struct gbm_device *EGLNativeDisplayType; typedef struct gbm_bo *EGLNativePixmapType; typedef void *EGLNativeWindowType; -#elif defined(ANDROID) /* Android */ +#elif defined(__ANDROID__) /* Android */ struct ANativeWindow; struct egl_native_pixmap_t; @@ -477,14 +478,15 @@ typedef khronos_int32_t EGLint; #endif /* __eglplatform_h */ -/* -*- mode: c; tab-width: 8; -*- */ -/* vi: set sw=4 ts=8: */ -/* Reference version of egl.h for EGL 1.4. -* $Revision: 9356 $ on $Date: 2009-10-21 02:52:25 -0700 (Wed, 21 Oct 2009) $ -*/ +#ifndef __egl_h_ +#define __egl_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif /* -** Copyright (c) 2007-2009 The Khronos Group Inc. +** Copyright (c) 2013-2015 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the @@ -505,301 +507,272 @@ typedef khronos_int32_t EGLint; ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ - -#ifndef __egl_h_ -#define __egl_h_ - -/* All platform-dependent types and macro boilerplate (such as EGLAPI -* and EGLAPIENTRY) should go in eglplatform.h. +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $ */ -/*#include */ - -#ifdef __cplusplus -extern "C" { -#endif - - /* EGL Types */ - /* EGLint is defined in eglplatform.h */ - typedef unsigned int EGLBoolean; - typedef unsigned int EGLenum; - typedef void *EGLConfig; - typedef void *EGLContext; - typedef void *EGLDisplay; - typedef void *EGLSurface; - typedef void *EGLClientBuffer; - - /* EGL Versioning */ -#define EGL_VERSION_1_0 1 -#define EGL_VERSION_1_1 1 -#define EGL_VERSION_1_2 1 -#define EGL_VERSION_1_3 1 -#define EGL_VERSION_1_4 1 - - /* EGL Enumerants. Bitmasks and other exceptional cases aside, most - * enums are assigned unique values starting at 0x3000. - */ - - /* EGL aliases */ -#define EGL_FALSE 0 -#define EGL_TRUE 1 - - /* Out-of-band handle values */ -#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) -#define EGL_NO_CONTEXT ((EGLContext)0) -#define EGL_NO_DISPLAY ((EGLDisplay)0) -#define EGL_NO_SURFACE ((EGLSurface)0) - - /* Out-of-band attribute value */ -#define EGL_DONT_CARE ((EGLint)-1) - - /* Errors / GetError return values */ -#define EGL_SUCCESS 0x3000 -#define EGL_NOT_INITIALIZED 0x3001 -#define EGL_BAD_ACCESS 0x3002 -#define EGL_BAD_ALLOC 0x3003 -#define EGL_BAD_ATTRIBUTE 0x3004 -#define EGL_BAD_CONFIG 0x3005 -#define EGL_BAD_CONTEXT 0x3006 -#define EGL_BAD_CURRENT_SURFACE 0x3007 -#define EGL_BAD_DISPLAY 0x3008 -#define EGL_BAD_MATCH 0x3009 -#define EGL_BAD_NATIVE_PIXMAP 0x300A -#define EGL_BAD_NATIVE_WINDOW 0x300B -#define EGL_BAD_PARAMETER 0x300C -#define EGL_BAD_SURFACE 0x300D -#define EGL_CONTEXT_LOST 0x300E /* EGL 1.1 - IMG_power_management */ - - /* Reserved 0x300F-0x301F for additional errors */ - - /* Config attributes */ -#define EGL_BUFFER_SIZE 0x3020 -#define EGL_ALPHA_SIZE 0x3021 -#define EGL_BLUE_SIZE 0x3022 -#define EGL_GREEN_SIZE 0x3023 -#define EGL_RED_SIZE 0x3024 -#define EGL_DEPTH_SIZE 0x3025 -#define EGL_STENCIL_SIZE 0x3026 -#define EGL_CONFIG_CAVEAT 0x3027 -#define EGL_CONFIG_ID 0x3028 -#define EGL_LEVEL 0x3029 -#define EGL_MAX_PBUFFER_HEIGHT 0x302A -#define EGL_MAX_PBUFFER_PIXELS 0x302B -#define EGL_MAX_PBUFFER_WIDTH 0x302C -#define EGL_NATIVE_RENDERABLE 0x302D -#define EGL_NATIVE_VISUAL_ID 0x302E -#define EGL_NATIVE_VISUAL_TYPE 0x302F -#define EGL_SAMPLES 0x3031 -#define EGL_SAMPLE_BUFFERS 0x3032 -#define EGL_SURFACE_TYPE 0x3033 -#define EGL_TRANSPARENT_TYPE 0x3034 -#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 -#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 -#define EGL_TRANSPARENT_RED_VALUE 0x3037 -#define EGL_NONE 0x3038 /* Attrib list terminator */ -#define EGL_BIND_TO_TEXTURE_RGB 0x3039 -#define EGL_BIND_TO_TEXTURE_RGBA 0x303A -#define EGL_MIN_SWAP_INTERVAL 0x303B -#define EGL_MAX_SWAP_INTERVAL 0x303C -#define EGL_LUMINANCE_SIZE 0x303D -#define EGL_ALPHA_MASK_SIZE 0x303E -#define EGL_COLOR_BUFFER_TYPE 0x303F -#define EGL_RENDERABLE_TYPE 0x3040 -#define EGL_MATCH_NATIVE_PIXMAP 0x3041 /* Pseudo-attribute (not queryable) */ -#define EGL_CONFORMANT 0x3042 - - /* Reserved 0x3041-0x304F for additional config attributes */ - - /* Config attribute values */ -#define EGL_SLOW_CONFIG 0x3050 /* EGL_CONFIG_CAVEAT value */ -#define EGL_NON_CONFORMANT_CONFIG 0x3051 /* EGL_CONFIG_CAVEAT value */ -#define EGL_TRANSPARENT_RGB 0x3052 /* EGL_TRANSPARENT_TYPE value */ -#define EGL_RGB_BUFFER 0x308E /* EGL_COLOR_BUFFER_TYPE value */ -#define EGL_LUMINANCE_BUFFER 0x308F /* EGL_COLOR_BUFFER_TYPE value */ - - /* More config attribute values, for EGL_TEXTURE_FORMAT */ -#define EGL_NO_TEXTURE 0x305C -#define EGL_TEXTURE_RGB 0x305D -#define EGL_TEXTURE_RGBA 0x305E -#define EGL_TEXTURE_2D 0x305F - - /* Config attribute mask bits */ -#define EGL_PBUFFER_BIT 0x0001 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_PIXMAP_BIT 0x0002 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_WINDOW_BIT 0x0004 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 /* EGL_SURFACE_TYPE mask bits */ -#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 /* EGL_SURFACE_TYPE mask bits */ - -#define EGL_OPENGL_ES_BIT 0x0001 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENVG_BIT 0x0002 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENGL_ES2_BIT 0x0004 /* EGL_RENDERABLE_TYPE mask bits */ -#define EGL_OPENGL_BIT 0x0008 /* EGL_RENDERABLE_TYPE mask bits */ - - /* QueryString targets */ -#define EGL_VENDOR 0x3053 -#define EGL_VERSION 0x3054 -#define EGL_EXTENSIONS 0x3055 -#define EGL_CLIENT_APIS 0x308D - - /* QuerySurface / SurfaceAttrib / CreatePbufferSurface targets */ -#define EGL_HEIGHT 0x3056 -#define EGL_WIDTH 0x3057 -#define EGL_LARGEST_PBUFFER 0x3058 -#define EGL_TEXTURE_FORMAT 0x3080 -#define EGL_TEXTURE_TARGET 0x3081 -#define EGL_MIPMAP_TEXTURE 0x3082 -#define EGL_MIPMAP_LEVEL 0x3083 -#define EGL_RENDER_BUFFER 0x3086 -#define EGL_VG_COLORSPACE 0x3087 -#define EGL_VG_ALPHA_FORMAT 0x3088 -#define EGL_HORIZONTAL_RESOLUTION 0x3090 -#define EGL_VERTICAL_RESOLUTION 0x3091 -#define EGL_PIXEL_ASPECT_RATIO 0x3092 -#define EGL_SWAP_BEHAVIOR 0x3093 -#define EGL_MULTISAMPLE_RESOLVE 0x3099 - - /* EGL_RENDER_BUFFER values / BindTexImage / ReleaseTexImage buffer targets */ -#define EGL_BACK_BUFFER 0x3084 -#define EGL_SINGLE_BUFFER 0x3085 - - /* OpenVG color spaces */ -#define EGL_VG_COLORSPACE_sRGB 0x3089 /* EGL_VG_COLORSPACE value */ -#define EGL_VG_COLORSPACE_LINEAR 0x308A /* EGL_VG_COLORSPACE value */ - - /* OpenVG alpha formats */ -#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B /* EGL_ALPHA_FORMAT value */ -#define EGL_VG_ALPHA_FORMAT_PRE 0x308C /* EGL_ALPHA_FORMAT value */ - - /* Constant scale factor by which fractional display resolutions & - * aspect ratio are scaled when queried as integer values. - */ -#define EGL_DISPLAY_SCALING 10000 - - /* Unknown display resolution/aspect ratio */ -#define EGL_UNKNOWN ((EGLint)-1) - - /* Back buffer swap behaviors */ -#define EGL_BUFFER_PRESERVED 0x3094 /* EGL_SWAP_BEHAVIOR value */ -#define EGL_BUFFER_DESTROYED 0x3095 /* EGL_SWAP_BEHAVIOR value */ - - /* CreatePbufferFromClientBuffer buffer types */ -#define EGL_OPENVG_IMAGE 0x3096 - - /* QueryContext targets */ -#define EGL_CONTEXT_CLIENT_TYPE 0x3097 - - /* CreateContext attributes */ -#define EGL_CONTEXT_CLIENT_VERSION 0x3098 - - /* Multisample resolution behaviors */ -#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A /* EGL_MULTISAMPLE_RESOLVE value */ -#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B /* EGL_MULTISAMPLE_RESOLVE value */ - - /* BindAPI/QueryAPI targets */ -#define EGL_OPENGL_ES_API 0x30A0 -#define EGL_OPENVG_API 0x30A1 -#define EGL_OPENGL_API 0x30A2 - - /* GetCurrentSurface targets */ -#define EGL_DRAW 0x3059 -#define EGL_READ 0x305A - - /* WaitNative engines */ -#define EGL_CORE_NATIVE_ENGINE 0x305B - - /* EGL 1.2 tokens renamed for consistency in EGL 1.3 */ -#define EGL_COLORSPACE EGL_VG_COLORSPACE -#define EGL_ALPHA_FORMAT EGL_VG_ALPHA_FORMAT -#define EGL_COLORSPACE_sRGB EGL_VG_COLORSPACE_sRGB -#define EGL_COLORSPACE_LINEAR EGL_VG_COLORSPACE_LINEAR -#define EGL_ALPHA_FORMAT_NONPRE EGL_VG_ALPHA_FORMAT_NONPRE -#define EGL_ALPHA_FORMAT_PRE EGL_VG_ALPHA_FORMAT_PRE - - /* EGL extensions must request enum blocks from the Khronos - * API Registrar, who maintains the enumerant registry. Submit - * a bug in Khronos Bugzilla against task "Registry". - */ - - - - /* EGL Functions */ - - EGLAPI EGLint EGLAPIENTRY eglGetError(void); - - EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay(EGLNativeDisplayType display_id); - EGLAPI EGLBoolean EGLAPIENTRY eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor); - EGLAPI EGLBoolean EGLAPIENTRY eglTerminate(EGLDisplay dpy); - - EGLAPI const char * EGLAPIENTRY eglQueryString(EGLDisplay dpy, EGLint name); - - EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, - EGLint config_size, EGLint *num_config); - EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, - EGLConfig *configs, EGLint config_size, - EGLint *num_config); - EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, - EGLint attribute, EGLint *value); - - EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, - EGLNativeWindowType win, - const EGLint *attrib_list); - EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, - const EGLint *attrib_list); - EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface(EGLDisplay dpy, EGLConfig config, - EGLNativePixmapType pixmap, - const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface(EGLDisplay dpy, EGLSurface surface); - EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface(EGLDisplay dpy, EGLSurface surface, - EGLint attribute, EGLint *value); - - EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI(EGLenum api); - EGLAPI EGLenum EGLAPIENTRY eglQueryAPI(void); - EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient(void); - - EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread(void); - - EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer( - EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, - EGLConfig config, const EGLint *attrib_list); - - EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, - EGLint attribute, EGLint value); - EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); - EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage(EGLDisplay dpy, EGLSurface surface, EGLint buffer); - - - EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval(EGLDisplay dpy, EGLint interval); - - - EGLAPI EGLContext EGLAPIENTRY eglCreateContext(EGLDisplay dpy, EGLConfig config, - EGLContext share_context, - const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext(EGLDisplay dpy, EGLContext ctx); - EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, - EGLSurface read, EGLContext ctx); - - EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext(void); - EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface(EGLint readdraw); - EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay(void); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext(EGLDisplay dpy, EGLContext ctx, - EGLint attribute, EGLint *value); +/*#include */ - EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL(void); - EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative(EGLint engine); - EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers(EGLDisplay dpy, EGLSurface surface); - EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers(EGLDisplay dpy, EGLSurface surface, - EGLNativePixmapType target); +/* Generated on date 20150623 */ - /* This is a generic function pointer type, whose name indicates it must - * be cast to the proper type *and calling convention* before use. - */ - typedef void(*__eglMustCastToProperFunctionPointerType)(void); +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: .* + * Default extensions included: None + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ - /* Now, define eglGetProcAddress using the generic function ptr. type */ - EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY - eglGetProcAddress(const char *procname); +#ifndef EGL_VERSION_1_0 +#define EGL_VERSION_1_0 1 +typedef unsigned int EGLBoolean; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); +#define EGL_ALPHA_SIZE 0x3021 +#define EGL_BAD_ACCESS 0x3002 +#define EGL_BAD_ALLOC 0x3003 +#define EGL_BAD_ATTRIBUTE 0x3004 +#define EGL_BAD_CONFIG 0x3005 +#define EGL_BAD_CONTEXT 0x3006 +#define EGL_BAD_CURRENT_SURFACE 0x3007 +#define EGL_BAD_DISPLAY 0x3008 +#define EGL_BAD_MATCH 0x3009 +#define EGL_BAD_NATIVE_PIXMAP 0x300A +#define EGL_BAD_NATIVE_WINDOW 0x300B +#define EGL_BAD_PARAMETER 0x300C +#define EGL_BAD_SURFACE 0x300D +#define EGL_BLUE_SIZE 0x3022 +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_CORE_NATIVE_ENGINE 0x305B +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_DONT_CARE ((EGLint)-1) +#define EGL_DRAW 0x3059 +#define EGL_EXTENSIONS 0x3055 +#define EGL_FALSE 0 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_HEIGHT 0x3056 +#define EGL_LARGEST_PBUFFER 0x3058 +#define EGL_LEVEL 0x3029 +#define EGL_MAX_PBUFFER_HEIGHT 0x302A +#define EGL_MAX_PBUFFER_PIXELS 0x302B +#define EGL_MAX_PBUFFER_WIDTH 0x302C +#define EGL_NATIVE_RENDERABLE 0x302D +#define EGL_NATIVE_VISUAL_ID 0x302E +#define EGL_NATIVE_VISUAL_TYPE 0x302F +#define EGL_NONE 0x3038 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_PBUFFER_BIT 0x0001 +#define EGL_PIXMAP_BIT 0x0002 +#define EGL_READ 0x305A +#define EGL_RED_SIZE 0x3024 +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_SUCCESS 0x3000 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 +#define EGL_TRANSPARENT_RGB 0x3052 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRUE 1 +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_WIDTH 0x3057 +#define EGL_WINDOW_BIT 0x0004 +EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); +EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); +EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); +EGLAPI EGLint EGLAPIENTRY eglGetError (void); +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); +EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); +EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); +EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); +#endif /* EGL_VERSION_1_0 */ + +#ifndef EGL_VERSION_1_1 +#define EGL_VERSION_1_1 1 +#define EGL_BACK_BUFFER 0x3084 +#define EGL_BIND_TO_TEXTURE_RGB 0x3039 +#define EGL_BIND_TO_TEXTURE_RGBA 0x303A +#define EGL_CONTEXT_LOST 0x300E +#define EGL_MIN_SWAP_INTERVAL 0x303B +#define EGL_MAX_SWAP_INTERVAL 0x303C +#define EGL_MIPMAP_TEXTURE 0x3082 +#define EGL_MIPMAP_LEVEL 0x3083 +#define EGL_NO_TEXTURE 0x305C +#define EGL_TEXTURE_2D 0x305F +#define EGL_TEXTURE_FORMAT 0x3080 +#define EGL_TEXTURE_RGB 0x305D +#define EGL_TEXTURE_RGBA 0x305E +#define EGL_TEXTURE_TARGET 0x3081 +EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); +#endif /* EGL_VERSION_1_1 */ + +#ifndef EGL_VERSION_1_2 +#define EGL_VERSION_1_2 1 +typedef unsigned int EGLenum; +typedef void *EGLClientBuffer; +#define EGL_ALPHA_FORMAT 0x3088 +#define EGL_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_ALPHA_FORMAT_PRE 0x308C +#define EGL_ALPHA_MASK_SIZE 0x303E +#define EGL_BUFFER_PRESERVED 0x3094 +#define EGL_BUFFER_DESTROYED 0x3095 +#define EGL_CLIENT_APIS 0x308D +#define EGL_COLORSPACE 0x3087 +#define EGL_COLORSPACE_sRGB 0x3089 +#define EGL_COLORSPACE_LINEAR 0x308A +#define EGL_COLOR_BUFFER_TYPE 0x303F +#define EGL_CONTEXT_CLIENT_TYPE 0x3097 +#define EGL_DISPLAY_SCALING 10000 +#define EGL_HORIZONTAL_RESOLUTION 0x3090 +#define EGL_LUMINANCE_BUFFER 0x308F +#define EGL_LUMINANCE_SIZE 0x303D +#define EGL_OPENGL_ES_BIT 0x0001 +#define EGL_OPENVG_BIT 0x0002 +#define EGL_OPENGL_ES_API 0x30A0 +#define EGL_OPENVG_API 0x30A1 +#define EGL_OPENVG_IMAGE 0x3096 +#define EGL_PIXEL_ASPECT_RATIO 0x3092 +#define EGL_RENDERABLE_TYPE 0x3040 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_RGB_BUFFER 0x308E +#define EGL_SINGLE_BUFFER 0x3085 +#define EGL_SWAP_BEHAVIOR 0x3093 +#define EGL_UNKNOWN ((EGLint)-1) +#define EGL_VERTICAL_RESOLUTION 0x3091 +EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); +EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); +#endif /* EGL_VERSION_1_2 */ + +#ifndef EGL_VERSION_1_3 +#define EGL_VERSION_1_3 1 +#define EGL_CONFORMANT 0x3042 +#define EGL_CONTEXT_CLIENT_VERSION 0x3098 +#define EGL_MATCH_NATIVE_PIXMAP 0x3041 +#define EGL_OPENGL_ES2_BIT 0x0004 +#define EGL_VG_ALPHA_FORMAT 0x3088 +#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_VG_ALPHA_FORMAT_PRE 0x308C +#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 +#define EGL_VG_COLORSPACE 0x3087 +#define EGL_VG_COLORSPACE_sRGB 0x3089 +#define EGL_VG_COLORSPACE_LINEAR 0x308A +#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 +#endif /* EGL_VERSION_1_3 */ + +#ifndef EGL_VERSION_1_4 +#define EGL_VERSION_1_4 1 +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) +#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 +#define EGL_MULTISAMPLE_RESOLVE 0x3099 +#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A +#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B +#define EGL_OPENGL_API 0x30A2 +#define EGL_OPENGL_BIT 0x0008 +#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 +EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); +#endif /* EGL_VERSION_1_4 */ + +#ifndef EGL_VERSION_1_5 +#define EGL_VERSION_1_5 1 +typedef void *EGLSync; +typedef intptr_t EGLAttrib; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef void *EGLImage; +#define EGL_CONTEXT_MAJOR_VERSION 0x3098 +#define EGL_CONTEXT_MINOR_VERSION 0x30FB +#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD +#define EGL_NO_RESET_NOTIFICATION 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 +#define EGL_OPENGL_ES3_BIT 0x00000040 +#define EGL_CL_EVENT_HANDLE 0x309C +#define EGL_SYNC_CL_EVENT 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 +#define EGL_SYNC_TYPE 0x30F7 +#define EGL_SYNC_STATUS 0x30F1 +#define EGL_SYNC_CONDITION 0x30F8 +#define EGL_SIGNALED 0x30F2 +#define EGL_UNSIGNALED 0x30F3 +#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 +#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull +#define EGL_TIMEOUT_EXPIRED 0x30F5 +#define EGL_CONDITION_SATISFIED 0x30F6 +#define EGL_NO_SYNC ((EGLSync)0) +#define EGL_SYNC_FENCE 0x30F9 +#define EGL_GL_COLORSPACE 0x309D +#define EGL_GL_COLORSPACE_SRGB 0x3089 +#define EGL_GL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_RENDERBUFFER 0x30B9 +#define EGL_GL_TEXTURE_2D 0x30B1 +#define EGL_GL_TEXTURE_LEVEL 0x30BC +#define EGL_GL_TEXTURE_3D 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET 0x30BD +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 +#define EGL_IMAGE_PRESERVED 0x30D2 +#define EGL_NO_IMAGE ((EGLImage)0) +EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); +EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); +#endif /* EGL_VERSION_1_5 */ #ifdef __cplusplus } @@ -809,581 +782,886 @@ extern "C" { - #ifndef __eglext_h_ -#define __eglext_h_ +#define __eglext_h_ 1 #ifdef __cplusplus extern "C" { #endif - /* - ** Copyright (c) 2007-2013 The Khronos Group Inc. - ** - ** Permission is hereby granted, free of charge, to any person obtaining a - ** copy of this software and/or associated documentation files (the - ** "Materials"), to deal in the Materials without restriction, including - ** without limitation the rights to use, copy, modify, merge, publish, - ** distribute, sublicense, and/or sell copies of the Materials, and to - ** permit persons to whom the Materials are 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 Materials. - ** - ** THE MATERIALS ARE 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 - ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. - */ - -/* #include */ - - /*************************************************************/ - - /* Header file version number */ - /* Current version at http://www.khronos.org/registry/egl/ */ - /* $Revision: 21254 $ on $Date: 2013-04-25 03:11:55 -0700 (Thu, 25 Apr 2013) $ */ -#define EGL_EGLEXT_VERSION 16 +/* +** Copyright (c) 2013-2015 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 31566 $ on $Date: 2015-06-23 08:48:48 -0700 (Tue, 23 Jun 2015) $ +*/ + +/*#include */ + +#define EGL_EGLEXT_VERSION 20150623 + +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: _nomatch_^ + * Default extensions included: egl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef EGL_KHR_cl_event +#define EGL_KHR_cl_event 1 +#define EGL_CL_EVENT_HANDLE_KHR 0x309C +#define EGL_SYNC_CL_EVENT_KHR 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF +#endif /* EGL_KHR_cl_event */ + +#ifndef EGL_KHR_cl_event2 +#define EGL_KHR_cl_event2 1 +typedef void *EGLSyncKHR; +typedef intptr_t EGLAttribKHR; +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#endif +#endif /* EGL_KHR_cl_event2 */ + +#ifndef EGL_KHR_client_get_all_proc_addresses +#define EGL_KHR_client_get_all_proc_addresses 1 +#endif /* EGL_KHR_client_get_all_proc_addresses */ #ifndef EGL_KHR_config_attribs #define EGL_KHR_config_attribs 1 -#define EGL_CONFORMANT_KHR 0x3042 /* EGLConfig attribute */ -#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 /* EGL_SURFACE_TYPE bitfield */ -#endif +#define EGL_CONFORMANT_KHR 0x3042 +#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 +#endif /* EGL_KHR_config_attribs */ -#ifndef EGL_KHR_lock_surface -#define EGL_KHR_lock_surface 1 -#define EGL_READ_SURFACE_BIT_KHR 0x0001 /* EGL_LOCK_USAGE_HINT_KHR bitfield */ -#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 /* EGL_LOCK_USAGE_HINT_KHR bitfield */ -#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 /* EGL_SURFACE_TYPE bitfield */ -#define EGL_MATCH_FORMAT_KHR 0x3043 /* EGLConfig attribute */ -#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGB_565_KHR 0x30C1 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 /* EGL_MATCH_FORMAT_KHR value */ -#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 /* eglLockSurfaceKHR attribute */ -#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 /* eglLockSurfaceKHR attribute */ -#define EGL_BITMAP_POINTER_KHR 0x30C6 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PITCH_KHR 0x30C7 /* eglQuerySurface attribute */ -#define EGL_BITMAP_ORIGIN_KHR 0x30C8 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC /* eglQuerySurface attribute */ -#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD /* eglQuerySurface attribute */ -#define EGL_LOWER_LEFT_KHR 0x30CE /* EGL_BITMAP_ORIGIN_KHR value */ -#define EGL_UPPER_LEFT_KHR 0x30CF /* EGL_BITMAP_ORIGIN_KHR value */ -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay display, EGLSurface surface); -#endif +#ifndef EGL_KHR_create_context +#define EGL_KHR_create_context 1 +#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 +#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB +#define EGL_CONTEXT_FLAGS_KHR 0x30FC +#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD +#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF +#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#endif /* EGL_KHR_create_context */ + +#ifndef EGL_KHR_create_context_no_error +#define EGL_KHR_create_context_no_error 1 +#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 +#endif /* EGL_KHR_create_context_no_error */ -#ifndef EGL_KHR_image -#define EGL_KHR_image 1 -#define EGL_NATIVE_PIXMAP_KHR 0x30B0 /* eglCreateImageKHR target */ - typedef void *EGLImageKHR; -#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) +#ifndef EGL_KHR_fence_sync +#define EGL_KHR_fence_sync 1 +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 +#define EGL_SYNC_CONDITION_KHR 0x30F8 +#define EGL_SYNC_FENCE_KHR 0x30F9 +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR image); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLImageKHR(EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); #endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_fence_sync */ -#ifndef EGL_KHR_vg_parent_image -#define EGL_KHR_vg_parent_image 1 -#define EGL_VG_PARENT_IMAGE_KHR 0x30BA /* eglCreateImageKHR target */ -#endif +#ifndef EGL_KHR_get_all_proc_addresses +#define EGL_KHR_get_all_proc_addresses 1 +#endif /* EGL_KHR_get_all_proc_addresses */ + +#ifndef EGL_KHR_gl_colorspace +#define EGL_KHR_gl_colorspace 1 +#define EGL_GL_COLORSPACE_KHR 0x309D +#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 +#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A +#endif /* EGL_KHR_gl_colorspace */ + +#ifndef EGL_KHR_gl_renderbuffer_image +#define EGL_KHR_gl_renderbuffer_image 1 +#define EGL_GL_RENDERBUFFER_KHR 0x30B9 +#endif /* EGL_KHR_gl_renderbuffer_image */ #ifndef EGL_KHR_gl_texture_2D_image #define EGL_KHR_gl_texture_2D_image 1 -#define EGL_GL_TEXTURE_2D_KHR 0x30B1 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC /* eglCreateImageKHR attribute */ -#endif - -#ifndef EGL_KHR_gl_texture_cubemap_image -#define EGL_KHR_gl_texture_cubemap_image 1 -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 /* eglCreateImageKHR target */ -#endif +#define EGL_GL_TEXTURE_2D_KHR 0x30B1 +#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC +#endif /* EGL_KHR_gl_texture_2D_image */ #ifndef EGL_KHR_gl_texture_3D_image #define EGL_KHR_gl_texture_3D_image 1 -#define EGL_GL_TEXTURE_3D_KHR 0x30B2 /* eglCreateImageKHR target */ -#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD /* eglCreateImageKHR attribute */ -#endif +#define EGL_GL_TEXTURE_3D_KHR 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD +#endif /* EGL_KHR_gl_texture_3D_image */ -#ifndef EGL_KHR_gl_renderbuffer_image -#define EGL_KHR_gl_renderbuffer_image 1 -#define EGL_GL_RENDERBUFFER_KHR 0x30B9 /* eglCreateImageKHR target */ -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLTimeKHR requires 64-bit uint support */ -#ifndef EGL_KHR_reusable_sync -#define EGL_KHR_reusable_sync 1 +#ifndef EGL_KHR_gl_texture_cubemap_image +#define EGL_KHR_gl_texture_cubemap_image 1 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 +#endif /* EGL_KHR_gl_texture_cubemap_image */ - typedef void* EGLSyncKHR; - typedef khronos_utime_nanoseconds_t EGLTimeKHR; - -#define EGL_SYNC_STATUS_KHR 0x30F1 -#define EGL_SIGNALED_KHR 0x30F2 -#define EGL_UNSIGNALED_KHR 0x30F3 -#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 -#define EGL_CONDITION_SATISFIED_KHR 0x30F6 -#define EGL_SYNC_TYPE_KHR 0x30F7 -#define EGL_SYNC_REUSABLE_KHR 0x30FA -#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 /* eglClientWaitSyncKHR bitfield */ -#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull -#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) +#ifndef EGL_KHR_image +#define EGL_KHR_image 1 +typedef void *EGLImageKHR; +#define EGL_NATIVE_PIXMAP_KHR 0x30B0 +#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR(EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync); - EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); - EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); - EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSyncKHR(EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); - typedef EGLint(EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); -#endif +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); #endif +#endif /* EGL_KHR_image */ #ifndef EGL_KHR_image_base #define EGL_KHR_image_base 1 - /* Most interfaces defined by EGL_KHR_image_pixmap above */ -#define EGL_IMAGE_PRESERVED_KHR 0x30D2 /* eglCreateImageKHR attribute */ -#endif +#define EGL_IMAGE_PRESERVED_KHR 0x30D2 +#endif /* EGL_KHR_image_base */ #ifndef EGL_KHR_image_pixmap #define EGL_KHR_image_pixmap 1 - /* Interfaces defined by EGL_KHR_image above */ -#endif +#endif /* EGL_KHR_image_pixmap */ -#ifndef EGL_IMG_context_priority -#define EGL_IMG_context_priority 1 -#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 -#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 -#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 -#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 +#ifndef EGL_KHR_lock_surface +#define EGL_KHR_lock_surface 1 +#define EGL_READ_SURFACE_BIT_KHR 0x0001 +#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 +#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 +#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 +#define EGL_MATCH_FORMAT_KHR 0x3043 +#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 +#define EGL_FORMAT_RGB_565_KHR 0x30C1 +#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 +#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 +#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 +#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 +#define EGL_BITMAP_POINTER_KHR 0x30C6 +#define EGL_BITMAP_PITCH_KHR 0x30C7 +#define EGL_BITMAP_ORIGIN_KHR 0x30C8 +#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 +#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA +#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB +#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC +#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD +#define EGL_LOWER_LEFT_KHR 0x30CE +#define EGL_UPPER_LEFT_KHR 0x30CF +typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); #endif +#endif /* EGL_KHR_lock_surface */ #ifndef EGL_KHR_lock_surface2 #define EGL_KHR_lock_surface2 1 -#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 -#endif +#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 +#endif /* EGL_KHR_lock_surface2 */ -#ifndef EGL_NV_coverage_sample -#define EGL_NV_coverage_sample 1 -#define EGL_COVERAGE_BUFFERS_NV 0x30E0 -#define EGL_COVERAGE_SAMPLES_NV 0x30E1 -#endif - -#ifndef EGL_NV_depth_nonlinear -#define EGL_NV_depth_nonlinear 1 -#define EGL_DEPTH_ENCODING_NV 0x30E2 -#define EGL_DEPTH_ENCODING_NONE_NV 0 -#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 -#endif - -#if KHRONOS_SUPPORT_INT64 /* EGLTimeNV requires 64-bit uint support */ -#ifndef EGL_NV_sync -#define EGL_NV_sync 1 -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 -#define EGL_SYNC_STATUS_NV 0x30E7 -#define EGL_SIGNALED_NV 0x30E8 -#define EGL_UNSIGNALED_NV 0x30E9 -#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 -#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull -#define EGL_ALREADY_SIGNALED_NV 0x30EA -#define EGL_TIMEOUT_EXPIRED_NV 0x30EB -#define EGL_CONDITION_SATISFIED_NV 0x30EC -#define EGL_SYNC_TYPE_NV 0x30ED -#define EGL_SYNC_CONDITION_NV 0x30EE -#define EGL_SYNC_FENCE_NV 0x30EF -#define EGL_NO_SYNC_NV ((EGLSyncNV)0) - typedef void* EGLSyncNV; - typedef khronos_utime_nanoseconds_t EGLTimeNV; +#ifndef EGL_KHR_lock_surface3 +#define EGL_KHR_lock_surface3 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV(EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV(EGLSyncNV sync); - EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV(EGLSyncNV sync); - EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); - EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV(EGLSyncNV sync, EGLenum mode); - EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV(EGLSyncNV sync, EGLint attribute, EGLint *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSyncNV(EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); - typedef EGLint(EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); #endif -#endif - -#if KHRONOS_SUPPORT_INT64 /* Dependent on EGL_KHR_reusable_sync which requires 64-bit uint support */ -#ifndef EGL_KHR_fence_sync -#define EGL_KHR_fence_sync 1 - /* Reuses most tokens and entry points from EGL_KHR_reusable_sync */ -#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 -#define EGL_SYNC_CONDITION_KHR 0x30F8 -#define EGL_SYNC_FENCE_KHR 0x30F9 -#endif -#endif - -#ifndef EGL_HI_clientpixmap -#define EGL_HI_clientpixmap 1 - - /* Surface Attribute */ -#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 - /* - * Structure representing a client pixmap - * (pixmap's data is in client-space memory). - */ - struct EGLClientPixmapHI - { - void* pData; - EGLint iWidth; - EGLint iHeight; - EGLint iStride; - }; -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI* pixmap); -#endif /* EGL_HI_clientpixmap */ - -#ifndef EGL_HI_colorformats -#define EGL_HI_colorformats 1 - /* Config Attribute */ -#define EGL_COLOR_FORMAT_HI 0x8F70 - /* Color Formats */ -#define EGL_COLOR_RGB_HI 0x8F71 -#define EGL_COLOR_RGBA_HI 0x8F72 -#define EGL_COLOR_ARGB_HI 0x8F73 -#endif /* EGL_HI_colorformats */ +#endif /* EGL_KHR_lock_surface3 */ -#ifndef EGL_MESA_drm_image -#define EGL_MESA_drm_image 1 -#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 /* CreateDRMImageMESA attribute */ -#define EGL_DRM_BUFFER_USE_MESA 0x31D1 /* CreateDRMImageMESA attribute */ -#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 /* EGL_IMAGE_FORMAT_MESA attribute value */ -#define EGL_DRM_BUFFER_MESA 0x31D3 /* eglCreateImageKHR target */ -#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 -#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 /* EGL_DRM_BUFFER_USE_MESA bits */ -#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 /* EGL_DRM_BUFFER_USE_MESA bits */ +#ifndef EGL_KHR_partial_update +#define EGL_KHR_partial_update 1 +#define EGL_BUFFER_AGE_KHR 0x313D +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA(EGLDisplay dpy, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA(EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLImageKHR(EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif +#endif /* EGL_KHR_partial_update */ -#ifndef EGL_NV_post_sub_buffer -#define EGL_NV_post_sub_buffer 1 -#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); -#endif +#ifndef EGL_KHR_platform_android +#define EGL_KHR_platform_android 1 +#define EGL_PLATFORM_ANDROID_KHR 0x3141 +#endif /* EGL_KHR_platform_android */ -#ifndef EGL_ANGLE_query_surface_pointer -#define EGL_ANGLE_query_surface_pointer 1 -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); -#endif +#ifndef EGL_KHR_platform_gbm +#define EGL_KHR_platform_gbm 1 +#define EGL_PLATFORM_GBM_KHR 0x31D7 +#endif /* EGL_KHR_platform_gbm */ -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#endif +#ifndef EGL_KHR_platform_wayland +#define EGL_KHR_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#endif /* EGL_KHR_platform_wayland */ -#ifndef EGL_NV_coverage_sample_resolve -#define EGL_NV_coverage_sample_resolve 1 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 -#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 -#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 -#endif +#ifndef EGL_KHR_platform_x11 +#define EGL_KHR_platform_x11 1 +#define EGL_PLATFORM_X11_KHR 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 +#endif /* EGL_KHR_platform_x11 */ -#if KHRONOS_SUPPORT_INT64 /* EGLuint64NV requires 64-bit uint support */ -#ifndef EGL_NV_system_time -#define EGL_NV_system_time 1 - typedef khronos_utime_nanoseconds_t EGLuint64NV; +#ifndef EGL_KHR_reusable_sync +#define EGL_KHR_reusable_sync 1 +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_STATUS_KHR 0x30F1 +#define EGL_SIGNALED_KHR 0x30F2 +#define EGL_UNSIGNALED_KHR 0x30F3 +#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 +#define EGL_CONDITION_SATISFIED_KHR 0x30F6 +#define EGL_SYNC_TYPE_KHR 0x30F7 +#define EGL_SYNC_REUSABLE_KHR 0x30FA +#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 +#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull +#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV(void); - EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV(void); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); - typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); -#endif +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); #endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_reusable_sync */ -#if KHRONOS_SUPPORT_INT64 /* EGLuint64KHR requires 64-bit uint support */ #ifndef EGL_KHR_stream #define EGL_KHR_stream 1 - typedef void* EGLStreamKHR; - typedef khronos_uint64_t EGLuint64KHR; -#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) -#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 -#define EGL_PRODUCER_FRAME_KHR 0x3212 -#define EGL_CONSUMER_FRAME_KHR 0x3213 -#define EGL_STREAM_STATE_KHR 0x3214 -#define EGL_STREAM_STATE_CREATED_KHR 0x3215 -#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 -#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 -#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 -#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 -#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A -#define EGL_BAD_STREAM_KHR 0x321B -#define EGL_BAD_STATE_KHR 0x321C +typedef void *EGLStreamKHR; +typedef khronos_uint64_t EGLuint64KHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) +#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 +#define EGL_PRODUCER_FRAME_KHR 0x3212 +#define EGL_CONSUMER_FRAME_KHR 0x3213 +#define EGL_STREAM_STATE_KHR 0x3214 +#define EGL_STREAM_STATE_CREATED_KHR 0x3215 +#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 +#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 +#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 +#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 +#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A +#define EGL_BAD_STREAM_KHR 0x321B +#define EGL_BAD_STATE_KHR 0x321C +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR(EGLDisplay dpy, const EGLint *attrib_list); - EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLStreamKHR(EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint *attrib_list); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); -#endif +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); #endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_stream */ -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ #ifndef EGL_KHR_stream_consumer_gltexture #define EGL_KHR_stream_consumer_gltexture 1 -#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +#ifdef EGL_KHR_stream +#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR(EGLDisplay dpy, EGLStreamKHR stream); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); -#endif +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); #endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_consumer_gltexture */ -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_producer_eglsurface -#define EGL_KHR_stream_producer_eglsurface 1 -#define EGL_STREAM_BIT_KHR 0x0800 +#ifndef EGL_KHR_stream_cross_process_fd +#define EGL_KHR_stream_cross_process_fd 1 +typedef int EGLNativeFileDescriptorKHR; +#ifdef EGL_KHR_stream +#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLSurface(EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); -#endif -#endif - -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_producer_aldatalocator -#define EGL_KHR_stream_producer_aldatalocator 1 -#endif +EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); #endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_cross_process_fd */ -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ #ifndef EGL_KHR_stream_fifo #define EGL_KHR_stream_fifo 1 - /* reuse EGLTimeKHR */ -#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC -#define EGL_STREAM_TIME_NOW_KHR 0x31FD -#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE -#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF +#ifdef EGL_KHR_stream +#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC +#define EGL_STREAM_TIME_NOW_KHR 0x31FD +#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE +#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); -#endif -#endif - -#ifndef EGL_EXT_create_context_robustness -#define EGL_EXT_create_context_robustness 1 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 -#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); #endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_fifo */ -#ifndef EGL_ANGLE_d3d_share_handle_client_buffer -#define EGL_ANGLE_d3d_share_handle_client_buffer 1 - /* reuse EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE */ -#endif +#ifndef EGL_KHR_stream_producer_aldatalocator +#define EGL_KHR_stream_producer_aldatalocator 1 +#ifdef EGL_KHR_stream +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_aldatalocator */ -#ifndef EGL_KHR_create_context -#define EGL_KHR_create_context 1 -#define EGL_CONTEXT_MAJOR_VERSION_KHR EGL_CONTEXT_CLIENT_VERSION -#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB -#define EGL_CONTEXT_FLAGS_KHR 0x30FC -#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD -#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD -#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE -#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF -#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 -#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 -#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 -#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 -#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#ifndef EGL_KHR_stream_producer_eglsurface +#define EGL_KHR_stream_producer_eglsurface 1 +#ifdef EGL_KHR_stream +#define EGL_STREAM_BIT_KHR 0x0800 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); #endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_eglsurface */ #ifndef EGL_KHR_surfaceless_context #define EGL_KHR_surfaceless_context 1 - /* No tokens/entry points, just relaxes an error condition */ -#endif +#endif /* EGL_KHR_surfaceless_context */ -#ifdef EGL_KHR_stream /* Requires KHR_stream extension */ -#ifndef EGL_KHR_stream_cross_process_fd -#define EGL_KHR_stream_cross_process_fd 1 - typedef int EGLNativeFileDescriptorKHR; -#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +#ifndef EGL_KHR_swap_buffers_with_damage +#define EGL_KHR_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR(EGLDisplay dpy, EGLStreamKHR stream); - EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLNativeFileDescriptorKHR(EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); - typedef EGLStreamKHR(EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); -#endif +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); #endif +#endif /* EGL_KHR_swap_buffers_with_damage */ -#ifndef EGL_EXT_multiview_window -#define EGL_EXT_multiview_window 1 -#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 -#endif +#ifndef EGL_KHR_vg_parent_image +#define EGL_KHR_vg_parent_image 1 +#define EGL_VG_PARENT_IMAGE_KHR 0x30BA +#endif /* EGL_KHR_vg_parent_image */ #ifndef EGL_KHR_wait_sync #define EGL_KHR_wait_sync 1 +typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLint(EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); -#endif - -#ifndef EGL_NV_post_convert_rounding -#define EGL_NV_post_convert_rounding 1 - /* No tokens or entry points, just relaxes behavior of SwapBuffers */ +EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); #endif +#endif /* EGL_KHR_wait_sync */ -#ifndef EGL_NV_native_query -#define EGL_NV_native_query 1 +#ifndef EGL_ANDROID_blob_cache +#define EGL_ANDROID_blob_cache 1 +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV(EGLDisplay dpy, EGLNativeDisplayType* display_id); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType* window); - EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType* pixmap); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC)(EGLDisplay dpy, EGLNativeDisplayType *display_id); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); - typedef EGLBoolean(EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); -#endif - -#ifndef EGL_NV_3dvision_surface -#define EGL_NV_3dvision_surface 1 -#define EGL_AUTO_STEREO_NV 0x3136 +EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); #endif +#endif /* EGL_ANDROID_blob_cache */ #ifndef EGL_ANDROID_framebuffer_target #define EGL_ANDROID_framebuffer_target 1 -#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 -#endif - -#ifndef EGL_ANDROID_blob_cache -#define EGL_ANDROID_blob_cache 1 - typedef khronos_ssize_t EGLsizeiANDROID; - typedef void(*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); - typedef EGLsizeiANDROID(*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); -#ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); -#endif +#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +#endif /* EGL_ANDROID_framebuffer_target */ #ifndef EGL_ANDROID_image_native_buffer #define EGL_ANDROID_image_native_buffer 1 -#define EGL_NATIVE_BUFFER_ANDROID 0x3140 -#endif +#define EGL_NATIVE_BUFFER_ANDROID 0x3140 +#endif /* EGL_ANDROID_image_native_buffer */ #ifndef EGL_ANDROID_native_fence_sync #define EGL_ANDROID_native_fence_sync 1 -#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 -#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 -#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 -#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 +#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 +#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 +#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSyncKHR); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLint(EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy, EGLSyncKHR); +EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); #endif +#endif /* EGL_ANDROID_native_fence_sync */ #ifndef EGL_ANDROID_recordable #define EGL_ANDROID_recordable 1 -#define EGL_RECORDABLE_ANDROID 0x3142 +#define EGL_RECORDABLE_ANDROID 0x3142 +#endif /* EGL_ANDROID_recordable */ + +#ifndef EGL_ANGLE_d3d_share_handle_client_buffer +#define EGL_ANGLE_d3d_share_handle_client_buffer 1 +#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 +#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ + +#ifndef EGL_ANGLE_device_d3d +#define EGL_ANGLE_device_d3d 1 +#define EGL_D3D9_DEVICE_ANGLE 0x33A0 +#define EGL_D3D11_DEVICE_ANGLE 0x33A1 +#endif /* EGL_ANGLE_device_d3d */ + +#ifndef EGL_ANGLE_query_surface_pointer +#define EGL_ANGLE_query_surface_pointer 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); #endif +#endif /* EGL_ANGLE_query_surface_pointer */ + +#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle +#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 +#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ + +#ifndef EGL_ANGLE_window_fixed_size +#define EGL_ANGLE_window_fixed_size 1 +#define EGL_FIXED_SIZE_ANGLE 0x3201 +#endif /* EGL_ANGLE_window_fixed_size */ + +#ifndef EGL_ARM_pixmap_multisample_discard +#define EGL_ARM_pixmap_multisample_discard 1 +#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#endif /* EGL_ARM_pixmap_multisample_discard */ #ifndef EGL_EXT_buffer_age #define EGL_EXT_buffer_age 1 -#define EGL_BUFFER_AGE_EXT 0x313D +#define EGL_BUFFER_AGE_EXT 0x313D +#endif /* EGL_EXT_buffer_age */ + +#ifndef EGL_EXT_client_extensions +#define EGL_EXT_client_extensions 1 +#endif /* EGL_EXT_client_extensions */ + +#ifndef EGL_EXT_create_context_robustness +#define EGL_EXT_create_context_robustness 1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 +#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +#endif /* EGL_EXT_create_context_robustness */ + +#ifndef EGL_EXT_device_base +#define EGL_EXT_device_base 1 +typedef void *EGLDeviceEXT; +#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) +#define EGL_BAD_DEVICE_EXT 0x322B +#define EGL_DEVICE_EXT 0x322C +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); #endif +#endif /* EGL_EXT_device_base */ + +#ifndef EGL_EXT_device_drm +#define EGL_EXT_device_drm 1 +#define EGL_DRM_DEVICE_FILE_EXT 0x3233 +#endif /* EGL_EXT_device_drm */ + +#ifndef EGL_EXT_device_enumeration +#define EGL_EXT_device_enumeration 1 +#endif /* EGL_EXT_device_enumeration */ + +#ifndef EGL_EXT_device_openwf +#define EGL_EXT_device_openwf 1 +#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 +#endif /* EGL_EXT_device_openwf */ + +#ifndef EGL_EXT_device_query +#define EGL_EXT_device_query 1 +#endif /* EGL_EXT_device_query */ #ifndef EGL_EXT_image_dma_buf_import #define EGL_EXT_image_dma_buf_import 1 -#define EGL_LINUX_DMA_BUF_EXT 0x3270 -#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 -#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 -#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 -#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 -#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 -#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 -#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 -#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 -#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 -#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A -#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B -#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C +#define EGL_LINUX_DMA_BUF_EXT 0x3270 +#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 +#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 +#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 +#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 +#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 +#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 +#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 +#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 +#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 +#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A +#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B +#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C #define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D #define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E -#define EGL_ITU_REC601_EXT 0x327F -#define EGL_ITU_REC709_EXT 0x3280 -#define EGL_ITU_REC2020_EXT 0x3281 -#define EGL_YUV_FULL_RANGE_EXT 0x3282 -#define EGL_YUV_NARROW_RANGE_EXT 0x3283 -#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 -#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 -#endif +#define EGL_ITU_REC601_EXT 0x327F +#define EGL_ITU_REC709_EXT 0x3280 +#define EGL_ITU_REC2020_EXT 0x3281 +#define EGL_YUV_FULL_RANGE_EXT 0x3282 +#define EGL_YUV_NARROW_RANGE_EXT 0x3283 +#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 +#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 +#endif /* EGL_EXT_image_dma_buf_import */ -#ifndef EGL_ARM_pixmap_multisample_discard -#define EGL_ARM_pixmap_multisample_discard 1 -#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#ifndef EGL_EXT_multiview_window +#define EGL_EXT_multiview_window 1 +#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 +#endif /* EGL_EXT_multiview_window */ + +#ifndef EGL_EXT_output_base +#define EGL_EXT_output_base 1 +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0) +#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0) +#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D +#define EGL_BAD_OUTPUT_PORT_EXT 0x322E +#define EGL_SWAP_INTERVAL_EXT 0x322F +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#endif +#endif /* EGL_EXT_output_base */ + +#ifndef EGL_EXT_output_drm +#define EGL_EXT_output_drm 1 +#define EGL_DRM_CRTC_EXT 0x3234 +#define EGL_DRM_PLANE_EXT 0x3235 +#define EGL_DRM_CONNECTOR_EXT 0x3236 +#endif /* EGL_EXT_output_drm */ + +#ifndef EGL_EXT_output_openwf +#define EGL_EXT_output_openwf 1 +#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 +#define EGL_OPENWF_PORT_ID_EXT 0x3239 +#endif /* EGL_EXT_output_openwf */ + +#ifndef EGL_EXT_platform_base +#define EGL_EXT_platform_base 1 +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#endif +#endif /* EGL_EXT_platform_base */ + +#ifndef EGL_EXT_platform_device +#define EGL_EXT_platform_device 1 +#define EGL_PLATFORM_DEVICE_EXT 0x313F +#endif /* EGL_EXT_platform_device */ + +#ifndef EGL_EXT_platform_wayland +#define EGL_EXT_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 +#endif /* EGL_EXT_platform_wayland */ + +#ifndef EGL_EXT_platform_x11 +#define EGL_EXT_platform_x11 1 +#define EGL_PLATFORM_X11_EXT 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 +#endif /* EGL_EXT_platform_x11 */ + +#ifndef EGL_EXT_protected_surface +#define EGL_EXT_protected_surface 1 +#define EGL_PROTECTED_CONTENT_EXT 0x32C0 +#endif /* EGL_EXT_protected_surface */ + +#ifndef EGL_EXT_stream_consumer_egloutput +#define EGL_EXT_stream_consumer_egloutput 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); #endif +#endif /* EGL_EXT_stream_consumer_egloutput */ #ifndef EGL_EXT_swap_buffers_with_damage #define EGL_EXT_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#endif +#endif /* EGL_EXT_swap_buffers_with_damage */ + +#ifndef EGL_EXT_yuv_surface +#define EGL_EXT_yuv_surface 1 +#define EGL_YUV_ORDER_EXT 0x3301 +#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 +#define EGL_YUV_SUBSAMPLE_EXT 0x3312 +#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 +#define EGL_YUV_CSC_STANDARD_EXT 0x330A +#define EGL_YUV_PLANE_BPP_EXT 0x331A +#define EGL_YUV_BUFFER_EXT 0x3300 +#define EGL_YUV_ORDER_YUV_EXT 0x3302 +#define EGL_YUV_ORDER_YVU_EXT 0x3303 +#define EGL_YUV_ORDER_YUYV_EXT 0x3304 +#define EGL_YUV_ORDER_UYVY_EXT 0x3305 +#define EGL_YUV_ORDER_YVYU_EXT 0x3306 +#define EGL_YUV_ORDER_VYUY_EXT 0x3307 +#define EGL_YUV_ORDER_AYUV_EXT 0x3308 +#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 +#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 +#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 +#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 +#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 +#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B +#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C +#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D +#define EGL_YUV_PLANE_BPP_0_EXT 0x331B +#define EGL_YUV_PLANE_BPP_8_EXT 0x331C +#define EGL_YUV_PLANE_BPP_10_EXT 0x331D +#endif /* EGL_EXT_yuv_surface */ + +#ifndef EGL_HI_clientpixmap +#define EGL_HI_clientpixmap 1 +struct EGLClientPixmapHI { + void *pData; + EGLint iWidth; + EGLint iHeight; + EGLint iStride; +}; +#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #ifdef EGL_EGLEXT_PROTOTYPES - EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); -#endif /* EGL_EGLEXT_PROTOTYPES */ - typedef EGLBoolean(EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); #endif +#endif /* EGL_HI_clientpixmap */ + +#ifndef EGL_HI_colorformats +#define EGL_HI_colorformats 1 +#define EGL_COLOR_FORMAT_HI 0x8F70 +#define EGL_COLOR_RGB_HI 0x8F71 +#define EGL_COLOR_RGBA_HI 0x8F72 +#define EGL_COLOR_ARGB_HI 0x8F73 +#endif /* EGL_HI_colorformats */ -/* #include */ +#ifndef EGL_IMG_context_priority +#define EGL_IMG_context_priority 1 +#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 +#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 +#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 +#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 +#endif /* EGL_IMG_context_priority */ + +#ifndef EGL_MESA_drm_image +#define EGL_MESA_drm_image 1 +#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 +#define EGL_DRM_BUFFER_USE_MESA 0x31D1 +#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 +#define EGL_DRM_BUFFER_MESA 0x31D3 +#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 +#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 +#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#endif +#endif /* EGL_MESA_drm_image */ + +#ifndef EGL_MESA_image_dma_buf_export +#define EGL_MESA_image_dma_buf_export 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#endif +#endif /* EGL_MESA_image_dma_buf_export */ + +#ifndef EGL_MESA_platform_gbm +#define EGL_MESA_platform_gbm 1 +#define EGL_PLATFORM_GBM_MESA 0x31D7 +#endif /* EGL_MESA_platform_gbm */ + +#ifndef EGL_NOK_swap_region +#define EGL_NOK_swap_region 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region */ + +#ifndef EGL_NOK_swap_region2 +#define EGL_NOK_swap_region2 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region2 */ + +#ifndef EGL_NOK_texture_from_pixmap +#define EGL_NOK_texture_from_pixmap 1 +#define EGL_Y_INVERTED_NOK 0x307F +#endif /* EGL_NOK_texture_from_pixmap */ + +#ifndef EGL_NV_3dvision_surface +#define EGL_NV_3dvision_surface 1 +#define EGL_AUTO_STEREO_NV 0x3136 +#endif /* EGL_NV_3dvision_surface */ + +#ifndef EGL_NV_coverage_sample +#define EGL_NV_coverage_sample 1 +#define EGL_COVERAGE_BUFFERS_NV 0x30E0 +#define EGL_COVERAGE_SAMPLES_NV 0x30E1 +#endif /* EGL_NV_coverage_sample */ + +#ifndef EGL_NV_coverage_sample_resolve +#define EGL_NV_coverage_sample_resolve 1 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 +#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 +#endif /* EGL_NV_coverage_sample_resolve */ + +#ifndef EGL_NV_cuda_event +#define EGL_NV_cuda_event 1 +#define EGL_CUDA_EVENT_HANDLE_NV 0x323B +#define EGL_SYNC_CUDA_EVENT_NV 0x323C +#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D +#endif /* EGL_NV_cuda_event */ + +#ifndef EGL_NV_depth_nonlinear +#define EGL_NV_depth_nonlinear 1 +#define EGL_DEPTH_ENCODING_NV 0x30E2 +#define EGL_DEPTH_ENCODING_NONE_NV 0 +#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 +#endif /* EGL_NV_depth_nonlinear */ + +#ifndef EGL_NV_device_cuda +#define EGL_NV_device_cuda 1 +#define EGL_CUDA_DEVICE_NV 0x323A +#endif /* EGL_NV_device_cuda */ + +#ifndef EGL_NV_native_query +#define EGL_NV_native_query 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#endif +#endif /* EGL_NV_native_query */ + +#ifndef EGL_NV_post_convert_rounding +#define EGL_NV_post_convert_rounding 1 +#endif /* EGL_NV_post_convert_rounding */ + +#ifndef EGL_NV_post_sub_buffer +#define EGL_NV_post_sub_buffer 1 +#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE +typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#endif +#endif /* EGL_NV_post_sub_buffer */ + +#ifndef EGL_NV_stream_sync +#define EGL_NV_stream_sync 1 +#define EGL_SYNC_NEW_FRAME_NV 0x321F +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#endif +#endif /* EGL_NV_stream_sync */ + +#ifndef EGL_NV_sync +#define EGL_NV_sync 1 +typedef void *EGLSyncNV; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 +#define EGL_SYNC_STATUS_NV 0x30E7 +#define EGL_SIGNALED_NV 0x30E8 +#define EGL_UNSIGNALED_NV 0x30E9 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 +#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull +#define EGL_ALREADY_SIGNALED_NV 0x30EA +#define EGL_TIMEOUT_EXPIRED_NV 0x30EB +#define EGL_CONDITION_SATISFIED_NV 0x30EC +#define EGL_SYNC_TYPE_NV 0x30ED +#define EGL_SYNC_CONDITION_NV 0x30EE +#define EGL_SYNC_FENCE_NV 0x30EF +#define EGL_NO_SYNC_NV ((EGLSyncNV)0) +typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); +EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_sync */ + +#ifndef EGL_NV_system_time +#define EGL_NV_system_time 1 +typedef khronos_utime_nanoseconds_t EGLuint64NV; +#ifdef KHRONOS_SUPPORT_INT64 +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_system_time */ + +#ifndef EGL_TIZEN_image_native_buffer +#define EGL_TIZEN_image_native_buffer 1 +#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 +#endif /* EGL_TIZEN_image_native_buffer */ + +#ifndef EGL_TIZEN_image_native_surface +#define EGL_TIZEN_image_native_surface 1 +#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 +#endif /* EGL_TIZEN_image_native_surface */ #ifdef __cplusplus } @@ -1392,5 +1670,4 @@ extern "C" { #endif /* __eglext_h_ */ - #endif /* _MSC_VER */ diff --git a/Engine/lib/sdl/include/SDL_endian.h b/Engine/lib/sdl/include/SDL_endian.h index 161c418de9..9100b103db 100644 --- a/Engine/lib/sdl/include/SDL_endian.h +++ b/Engine/lib/sdl/include/SDL_endian.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -42,7 +42,7 @@ #ifdef __linux__ #include #define SDL_BYTEORDER __BYTE_ORDER -#else /* __linux __ */ +#else /* __linux__ */ #if defined(__hppa__) || \ defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ (defined(__MIPS__) && defined(__MISPEB__)) || \ @@ -52,7 +52,7 @@ #else #define SDL_BYTEORDER SDL_LIL_ENDIAN #endif -#endif /* __linux __ */ +#endif /* __linux__ */ #endif /* !SDL_BYTEORDER */ diff --git a/Engine/lib/sdl/include/SDL_error.h b/Engine/lib/sdl/include/SDL_error.h index 5776cfa260..2f3b4b5008 100644 --- a/Engine/lib/sdl/include/SDL_error.h +++ b/Engine/lib/sdl/include/SDL_error.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -38,7 +38,7 @@ extern "C" { /* Public functions */ /* SDL_SetError() unconditionally returns -1. */ -extern DECLSPEC int SDLCALL SDL_SetError(const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); extern DECLSPEC const char *SDLCALL SDL_GetError(void); extern DECLSPEC void SDLCALL SDL_ClearError(void); diff --git a/Engine/lib/sdl/include/SDL_events.h b/Engine/lib/sdl/include/SDL_events.h index fc5a145e75..1437f4c705 100644 --- a/Engine/lib/sdl/include/SDL_events.h +++ b/Engine/lib/sdl/include/SDL_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -59,7 +59,7 @@ typedef enum /* Application events */ SDL_QUIT = 0x100, /**< User-requested quit */ - /* These application events have special meaning on iOS, see README-ios.txt for details */ + /* These application events have special meaning on iOS, see README-ios.md for details */ SDL_APP_TERMINATING, /**< The application is being terminated by the OS Called on iOS in applicationWillTerminate() Called on Android in onDestroy() @@ -94,6 +94,9 @@ typedef enum SDL_KEYUP, /**< Key released */ SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ /* Mouse events */ SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ @@ -134,8 +137,13 @@ typedef enum /* Drag and drop events */ SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + /* Render events */ - SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ /** Events ::SDL_USEREVENT through ::SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() @@ -259,6 +267,7 @@ typedef struct SDL_MouseWheelEvent Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ } SDL_MouseWheelEvent; /** @@ -380,6 +389,20 @@ typedef struct SDL_ControllerDeviceEvent Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ } SDL_ControllerDeviceEvent; +/** + * \brief Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + /** * \brief Touch finger event structure (event.tfinger.*) @@ -392,8 +415,8 @@ typedef struct SDL_TouchFingerEvent SDL_FingerID fingerId; float x; /**< Normalized in the range 0...1 */ float y; /**< Normalized in the range 0...1 */ - float dx; /**< Normalized in the range 0...1 */ - float dy; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ float pressure; /**< Normalized in the range 0...1 */ } SDL_TouchFingerEvent; @@ -420,7 +443,7 @@ typedef struct SDL_MultiGestureEvent */ typedef struct SDL_DollarGestureEvent { - Uint32 type; /**< ::SDL_DOLLARGESTURE */ + Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ Uint32 timestamp; SDL_TouchID touchId; /**< The touch device id */ SDL_GestureID gestureId; @@ -433,8 +456,8 @@ typedef struct SDL_DollarGestureEvent /** * \brief An event used to request a file open by the system (event.drop.*) - * This event is disabled by default, you can enable it with SDL_EventState() - * \note If you enable this event, you must free the filename in the event. + * This event is enabled by default, you can disable it with SDL_EventState(). + * \note If this event is enabled, you must free the filename in the event. */ typedef struct SDL_DropEvent { @@ -514,6 +537,7 @@ typedef union SDL_Event SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ SDL_QuitEvent quit; /**< Quit request event data */ SDL_UserEvent user; /**< Custom event data */ SDL_SysWMEvent syswm; /**< System dependent window event data */ @@ -583,6 +607,9 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); /** * This function clears events from the event queue + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. */ extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); diff --git a/Engine/lib/sdl/include/SDL_filesystem.h b/Engine/lib/sdl/include/SDL_filesystem.h index de3e227d42..02999ed270 100644 --- a/Engine/lib/sdl/include/SDL_filesystem.h +++ b/Engine/lib/sdl/include/SDL_filesystem.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -131,6 +131,6 @@ extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); #endif #include "close_code.h" -#endif /* _SDL_system_h */ +#endif /* _SDL_filesystem_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/include/SDL_gamecontroller.h b/Engine/lib/sdl/include/SDL_gamecontroller.h index b00ad713d1..42087eea16 100644 --- a/Engine/lib/sdl/include/SDL_gamecontroller.h +++ b/Engine/lib/sdl/include/SDL_gamecontroller.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,7 +43,7 @@ extern "C" { * \file SDL_gamecontroller.h * * In order to use these functions, SDL_Init() must have been called - * with the ::SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * with the ::SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system * for game controllers, and load appropriate drivers. * * If you would like to receive controller updates while the application @@ -163,13 +163,19 @@ extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_ /** * Open a game controller for use. * The index passed as an argument refers to the N'th game controller on the system. - * This index is the value which will identify this controller in future controller - * events. + * This index is not the value which will identify this controller in future + * controller events. The joystick's instance id (::SDL_JoystickID) will be + * used there instead. * * \return A controller identifier, or NULL if an error occurred. */ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); +/** + * Return the SDL_GameController associated with an instance id. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + /** * Return the name for this currently opened controller */ @@ -241,7 +247,8 @@ SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, /** * Get the current state of an axis control on a game controller. * - * The state is a value ranging from -32768 to 32767. + * The state is a value ranging from -32768 to 32767 (except for the triggers, + * which range from 0 to 32767). * * The axis indices start at index 0. */ diff --git a/Engine/lib/sdl/include/SDL_gesture.h b/Engine/lib/sdl/include/SDL_gesture.h index dbc1692423..3c29ca7ac8 100644 --- a/Engine/lib/sdl/include/SDL_gesture.h +++ b/Engine/lib/sdl/include/SDL_gesture.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_haptic.h b/Engine/lib/sdl/include/SDL_haptic.h index 234975abe3..b36d78b127 100644 --- a/Engine/lib/sdl/include/SDL_haptic.h +++ b/Engine/lib/sdl/include/SDL_haptic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -102,11 +102,6 @@ * return 0; // Success * } * \endcode - * - * You can also find out more information on my blog: - * http://bobbens.dyndns.org/journal/2010/sdl_haptic/ - * - * \author Edgar Simo Serra */ #ifndef _SDL_haptic_h @@ -347,6 +342,9 @@ typedef struct _SDL_Haptic SDL_Haptic; /** * \brief Structure that represents a haptic direction. * + * This is the direction where the force comes from, + * instead of the direction in which the force is exerted. + * * Directions can be specified by: * - ::SDL_HAPTIC_POLAR : Specified by polar coordinates. * - ::SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. @@ -370,7 +368,7 @@ typedef struct _SDL_Haptic SDL_Haptic; ^ | | - (1,0) West <----[ HAPTIC ]----> East (-1,0) + (-1,0) West <----[ HAPTIC ]----> East (1,0) | | v @@ -395,9 +393,9 @@ typedef struct _SDL_Haptic SDL_Haptic; * (X axis, Y axis and Z axis (with 3 axes)). ::SDL_HAPTIC_CARTESIAN uses * the first three \c dir parameters. The cardinal directions would be: * - North: 0,-1, 0 - * - East: -1, 0, 0 + * - East: 1, 0, 0 * - South: 0, 1, 0 - * - West: 1, 0, 0 + * - West: -1, 0, 0 * * The Z axis represents the height of the effect if supported, otherwise * it's unused. In cartesian encoding (1, 2) would be the same as (2, 4), you @@ -492,7 +490,7 @@ typedef struct SDL_HapticConstant * over time. The type determines the shape of the wave and the parameters * determine the dimensions of the wave. * - * Phase is given by hundredth of a cycle meaning that giving the phase a value + * Phase is given by hundredth of a degree meaning that giving the phase a value * of 9000 will displace it 25% of its period. Here are sample values: * - 0: No phase displacement. * - 9000: Displaced 25% of its period. @@ -553,9 +551,9 @@ typedef struct SDL_HapticPeriodic /* Periodic */ Uint16 period; /**< Period of the wave. */ - Sint16 magnitude; /**< Peak value. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ Sint16 offset; /**< Mean value of the wave. */ - Uint16 phase; /**< Horizontal shift given by hundredth of a cycle. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ /* Envelope */ Uint16 attack_length; /**< Duration of the attack. */ @@ -604,11 +602,11 @@ typedef struct SDL_HapticCondition Uint16 interval; /**< How soon it can be triggered again after button. */ /* Condition */ - Uint16 right_sat[3]; /**< Level when joystick is to the positive side. */ - Uint16 left_sat[3]; /**< Level when joystick is to the negative side. */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ - Uint16 deadband[3]; /**< Size of the dead zone. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ Sint16 center[3]; /**< Position of the dead zone. */ } SDL_HapticCondition; @@ -897,7 +895,7 @@ extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); /** * \brief Opens a Haptic device for usage from a Joystick device. * - * You must still close the haptic device seperately. It will not be closed + * You must still close the haptic device separately. It will not be closed * with the joystick. * * When opening from a joystick you should first close the haptic device before @@ -954,7 +952,7 @@ extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); /** - * \brief Gets the haptic devices supported features in bitwise matter. + * \brief Gets the haptic device's supported features in bitwise manner. * * Example: * \code @@ -1148,7 +1146,7 @@ extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); * * Call to unpause after SDL_HapticPause(). * - * \param haptic Haptic device to pause. + * \param haptic Haptic device to unpause. * \return 0 on success or -1 on error. * * \sa SDL_HapticPause diff --git a/Engine/lib/sdl/include/SDL_hints.h b/Engine/lib/sdl/include/SDL_hints.h index b98ce6834c..3bd5435fb0 100644 --- a/Engine/lib/sdl/include/SDL_hints.h +++ b/Engine/lib/sdl/include/SDL_hints.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -116,7 +116,7 @@ extern "C" { * * By default, SDL does not use Direct3D Debug Layer. */ -#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_HINT_RENDER_DIRECT3D11_DEBUG" +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" /** * \brief A variable controlling the scaling quality @@ -185,6 +185,42 @@ extern "C" { */ #define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" +/** + * \brief A variable controlling whether the X11 _NET_WM_PING protocol should be supported. + * + * This variable can be set to the following values: + * "0" - Disable _NET_WM_PING + * "1" - Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they can + * turn it off to avoid the window manager thinking the app is hung. + * The hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * \brief A variable controlling whether the window frame and title bar are interactive when the cursor is hidden + * + * This variable can be set to the following values: + * "0" - The window frame is not interactive when the cursor is hidden (no move, resize, etc) + * "1" - The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** + * \brief A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * "0" - The window message loop is not run + * "1" - The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + /** * \brief A variable controlling whether grabbing input grabs the keyboard * @@ -221,6 +257,9 @@ extern "C" { * this is problematic. This functionality can be disabled by setting this * hint. * + * As of SDL 2.0.4, SDL_EnableScreenSaver and SDL_DisableScreenSaver accomplish + * the same thing on iOS. They should be preferred over this hint. + * * This variable can be set to the following values: * "0" - Enable idle timer * "1" - Disable idle timer @@ -239,8 +278,9 @@ extern "C" { #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** - * \brief A variable controlling whether an Android built-in accelerometer should be - * listed as a joystick device, rather than listing actual joysticks only. + * \brief A variable controlling whether the Android / iOS built-in + * accelerometer should be listed as a joystick device, rather than listing + * actual joysticks only. * * This variable can be set to the following values: * "0" - List only real joysticks and accept input from them @@ -259,6 +299,16 @@ extern "C" { #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" +/** + * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + + /** * \brief A variable that lets you manually hint extra gamecontroller db entries * @@ -285,7 +335,7 @@ extern "C" { /** - * \brief If set to 0 then never set the top most bit on a SDL Window, even if the video mode expects it. + * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. * This is a debugging aid for developers and not expected to be used by end users. The default is "1" * * This variable can be set to the following values: @@ -312,14 +362,25 @@ extern "C" { #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + +/** +* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size +* +* Use this hint in case you need to set SDL's threads stack size to other than the default. +* This is specially useful if you build SDL against a non glibc libc library (such as musl) which +* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). +* Support for this hint is currently available only in the pthread backend. +*/ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + /** - * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac) + * \brief If set to 1, then do not allow high-DPI windows. ("Retina" on Mac and iOS) */ #define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" /** * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac - * + * * If present, holding ctrl while left clicking will generate a right click * event when on Mac. */ @@ -360,7 +421,7 @@ extern "C" { */ #define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" -/* +/** * \brief A URL to a WinRT app's privacy policy * * All network-enabled WinRT apps must make a privacy policy available to its @@ -384,13 +445,13 @@ extern "C" { * will not get used on that platform. Network-enabled phone apps should display * their privacy policy through some other, in-app means. */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_HINT_WINRT_PRIVACY_POLICY_URL" +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" /** \brief Label text for a WinRT app's privacy policy link * * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, * Microsoft mandates that this policy be available via the Windows Settings charm. - * SDL provides code to add a link there, with it's label text being set via the + * SDL provides code to add a link there, with its label text being set via the * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. * * Please note that a privacy policy's contents are not set via this hint. A separate @@ -405,16 +466,59 @@ extern "C" { * For additional information on linking to a privacy policy, see the documentation for * SDL_HINT_WINRT_PRIVACY_POLICY_URL. */ -#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_HINT_WINRT_PRIVACY_POLICY_LABEL" - -/** \brief If set to 1, back button press events on Windows Phone 8+ will be marked as handled. - * - * TODO, WinRT: document SDL_HINT_WINRT_HANDLE_BACK_BUTTON need and use - * For now, more details on why this is needed can be found at the - * beginning of the following web page: +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" + +/** \brief Allows back-button-press events on Windows Phone to be marked as handled + * + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx */ -#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_HINT_WINRT_HANDLE_BACK_BUTTON" +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" /** * \brief A variable that dictates policy for fullscreen Spaces on Mac OS X. @@ -427,7 +531,7 @@ extern "C" { * button on their titlebars). * "1" - Enable Spaces support (FULLSCREEN_DESKTOP will use them and * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" - * button on their titlebars. + * button on their titlebars). * * The default value is "1". Spaces are disabled regardless of this hint if * the OS isn't at least Mac OS X Lion (10.7). This hint must be set before @@ -435,6 +539,96 @@ extern "C" { */ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" +/** +* \brief When set don't force the SDL app to become a foreground process +* +* This hint only applies to Mac OS X. +* +*/ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * \brief Android APK expansion main file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * \brief Android APK expansion patch file version. Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * + * By default this hint is not set and the APK expansion files are not searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * \brief A variable to control whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * "0" - SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and + * differentiate it somehow from committed text. (default) + * "1" - If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + + /** + * \brief A variable to control whether mouse and touch events are to be treated together or separately + * + * The variable can be set to the following values: + * "0" - Mouse events will be handled as touch events, and touch will raise fake mouse + * events. This is the behaviour of SDL <= 2.0.3. (default) + * "1" - Mouse events will be handled separately from pure touch events. + * + * The value of this hint is used at runtime, so it can be changed at any time. + */ +#define SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH "SDL_ANDROID_SEPARATE_MOUSE_AND_TOUCH" + +/** + * \brief override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform + * + * The variable can be one of + * "#window" - The javascript window object (this is the default) + * "#document" - The javascript document object + * "#screen" - the javascript window.screen object + * "#canvas" - the WebGL canvas element + * any other string without a leading # sign applies to the element on the page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * \brief Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms. + * + * The variable can be set to the following values: + * "0" - SDL will install a SIGINT and SIGTERM handler, and when it + * catches a signal, convert it into an SDL_QUIT event. + * "1" - SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * \brief Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will generate a window-close event when it sees Alt+F4. + * "1" - SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" /** * \brief An enumeration of hint priorities diff --git a/Engine/lib/sdl/include/SDL_joystick.h b/Engine/lib/sdl/include/SDL_joystick.h index b0b1c6673f..266f3b3871 100644 --- a/Engine/lib/sdl/include/SDL_joystick.h +++ b/Engine/lib/sdl/include/SDL_joystick.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -71,6 +71,16 @@ typedef struct { typedef Sint32 SDL_JoystickID; +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, + SDL_JOYSTICK_POWER_LOW, + SDL_JOYSTICK_POWER_MEDIUM, + SDL_JOYSTICK_POWER_FULL, + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; /* Function prototypes */ /** @@ -87,14 +97,20 @@ extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); /** * Open a joystick for use. - * The index passed as an argument refers tothe N'th joystick on the system. - * This index is the value which will identify this joystick in future joystick - * events. + * The index passed as an argument refers to the N'th joystick on the system. + * This index is not the value which will identify this joystick in future + * joystick events. The joystick's instance id (::SDL_JoystickID) will be used + * there instead. * * \return A joystick identifier, or NULL if an error occurred. */ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); +/** + * Return the SDL_Joystick associated with an instance id. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID joyid); + /** * Return the name for this currently opened joystick. * If no name can be found, this function returns NULL. @@ -189,7 +205,7 @@ extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, */ /* @{ */ #define SDL_HAT_CENTERED 0x00 -#define SDL_HAT_UP 0x01 +#define SDL_HAT_UP 0x01 #define SDL_HAT_RIGHT 0x02 #define SDL_HAT_DOWN 0x04 #define SDL_HAT_LEFT 0x08 @@ -241,6 +257,10 @@ extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick * joystick, */ extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick * joystick); +/** + * Return the battery level of this joystick + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick * joystick); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/Engine/lib/sdl/include/SDL_keyboard.h b/Engine/lib/sdl/include/SDL_keyboard.h index 586a26cff2..bbba0f07bc 100644 --- a/Engine/lib/sdl/include/SDL_keyboard.h +++ b/Engine/lib/sdl/include/SDL_keyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_keycode.h b/Engine/lib/sdl/include/SDL_keycode.h index d5f5dd0aef..7be9635710 100644 --- a/Engine/lib/sdl/include/SDL_keycode.h +++ b/Engine/lib/sdl/include/SDL_keycode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_loadso.h b/Engine/lib/sdl/include/SDL_loadso.h index 0359eae17d..3d540bd7dd 100644 --- a/Engine/lib/sdl/include/SDL_loadso.h +++ b/Engine/lib/sdl/include/SDL_loadso.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_log.h b/Engine/lib/sdl/include/SDL_log.h index 5c2bca5932..09be1104de 100644 --- a/Engine/lib/sdl/include/SDL_log.h +++ b/Engine/lib/sdl/include/SDL_log.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -137,44 +137,44 @@ extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); /** * \brief Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO */ -extern DECLSPEC void SDLCALL SDL_Log(const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Log a message with SDL_LOG_PRIORITY_VERBOSE */ -extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_DEBUG */ -extern DECLSPEC void SDLCALL SDL_LogDebug(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_INFO */ -extern DECLSPEC void SDLCALL SDL_LogInfo(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_WARN */ -extern DECLSPEC void SDLCALL SDL_LogWarn(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_ERROR */ -extern DECLSPEC void SDLCALL SDL_LogError(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with SDL_LOG_PRIORITY_CRITICAL */ -extern DECLSPEC void SDLCALL SDL_LogCritical(int category, const char *fmt, ...); +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Log a message with the specified category and priority. */ extern DECLSPEC void SDLCALL SDL_LogMessage(int category, SDL_LogPriority priority, - const char *fmt, ...); + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); /** * \brief Log a message with the specified category and priority. diff --git a/Engine/lib/sdl/include/SDL_main.h b/Engine/lib/sdl/include/SDL_main.h index 2e8fae95ea..9ce3754e93 100644 --- a/Engine/lib/sdl/include/SDL_main.h +++ b/Engine/lib/sdl/include/SDL_main.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -67,6 +67,15 @@ */ #define SDL_MAIN_NEEDED +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + #endif #endif /* SDL_MAIN_HANDLED */ @@ -133,14 +142,11 @@ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); * \brief Initializes and launches an SDL/WinRT application. * * \param mainFunction The SDL app's C-style main(). - * \param xamlBackgroundPanel An optional, XAML-based, background panel. - * For Non-XAML apps, this value must be set to NULL. For XAML apps, - * pass in a pointer to a SwapChainBackgroundPanel, casted to an - * IInspectable (via reinterpret_cast). - * \ret 0 on success, -1 on failure. On failure, use SDL_GetError to retrieve more + * \param reserved Reserved for future use; should be NULL + * \return 0 on success, -1 on failure. On failure, use SDL_GetError to retrieve more * information on the failure. */ -extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * xamlBackgroundPanel); +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), void * reserved); #endif /* __WINRT__ */ diff --git a/Engine/lib/sdl/include/SDL_messagebox.h b/Engine/lib/sdl/include/SDL_messagebox.h index 6004da0f5f..ec370dbbe0 100644 --- a/Engine/lib/sdl/include/SDL_messagebox.h +++ b/Engine/lib/sdl/include/SDL_messagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_mouse.h b/Engine/lib/sdl/include/SDL_mouse.h index ebfd18fa74..ea9622f0f7 100644 --- a/Engine/lib/sdl/include/SDL_mouse.h +++ b/Engine/lib/sdl/include/SDL_mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -60,6 +60,15 @@ typedef enum SDL_NUM_SYSTEM_CURSORS } SDL_SystemCursor; +/** + * \brief Scroll direction types for the Scroll event + */ +typedef enum +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + /* Function prototypes */ /** @@ -77,6 +86,31 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); */ extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); +/** + * \brief Get the current state of the mouse, in relation to the desktop + * + * This works just like SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if + * you need to track the mouse outside of a specific window and + * SDL_CaptureMouse() doesn't fit your needs. For example, it could be + * useful if you need to track the mouse while dragging a window, where + * coordinates relative to a window might not be in sync at all times. + * + * \note SDL_GetMouseState() returns the mouse position as SDL understands + * it from the last pump of the event queue. This function, however, + * queries the OS for the current mouse position, and as such, might + * be a slightly less efficient function. Unless you know what you're + * doing and have a good reason to use this function, you probably want + * SDL_GetMouseState() instead. + * + * \param x Returns the current X coord, relative to the desktop. Can be NULL. + * \param y Returns the current Y coord, relative to the desktop. Can be NULL. + * \return The current button state as a bitmask, which can be tested using the SDL_BUTTON(X) macros. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + /** * \brief Retrieve the relative state of the mouse. * @@ -98,6 +132,17 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, int x, int y); +/** + * \brief Moves the mouse to the given position in global screen space. + * + * \param x The x coordinate + * \param y The y coordinate + * \return 0 on success, -1 on error (usually: unsupported by a platform). + * + * \note This function generates a mouse motion event + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + /** * \brief Set relative mouse mode. * @@ -116,6 +161,37 @@ extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, */ extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); +/** + * \brief Capture the mouse, to track input outside an SDL window. + * + * \param enabled Whether or not to enable capturing + * + * Capturing enables your app to obtain mouse events globally, instead of + * just within your window. Not all video targets support this function. + * When capturing is enabled, the current window will get all mouse events, + * but unlike relative mode, no change is made to the cursor and it is + * not restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this + * function sparingly, and in small bursts. For example, you might want to + * track the mouse while the user is dragging something, until the user + * releases a mouse button. It is not recommended that you capture the mouse + * for long periods of time, such as the entire time your app is running. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only + * allowed for the foreground window. If the window loses focus while + * capturing, the capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * SDL_WINDOW_MOUSE_CAPTURE flag set. + * + * \return 0 on success, or -1 if not supported. + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + /** * \brief Query whether relative mouse mode is enabled. * diff --git a/Engine/lib/sdl/include/SDL_mutex.h b/Engine/lib/sdl/include/SDL_mutex.h index 3e8b4dbed9..b7e39734e9 100644 --- a/Engine/lib/sdl/include/SDL_mutex.h +++ b/Engine/lib/sdl/include/SDL_mutex.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_name.h b/Engine/lib/sdl/include/SDL_name.h index 719666ff1e..06cd4a5e25 100644 --- a/Engine/lib/sdl/include/SDL_name.h +++ b/Engine/lib/sdl/include/SDL_name.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_opengl.h b/Engine/lib/sdl/include/SDL_opengl.h index b48ea7abe9..780919bc48 100644 --- a/Engine/lib/sdl/include/SDL_opengl.h +++ b/Engine/lib/sdl/include/SDL_opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,11099 +25,2149 @@ * This is a simple file to encapsulate the OpenGL API headers. */ +/** + * \def NO_SDL_GLEXT + * + * Define this if you have your own version of glext.h and want to disable the + * version included in SDL_opengl.h. + */ + #ifndef _SDL_opengl_h #define _SDL_opengl_h #include "SDL_config.h" -#ifndef __IPHONEOS__ - -#ifdef __WIN32__ -#define WIN32_LEAN_AND_MEAN -#ifndef NOMINMAX -#define NOMINMAX /* Don't defined min() and max() */ -#endif -#include -#endif - -#ifdef __glext_h_ -/* Someone has already included glext.h */ -#define NO_SDL_GLEXT -#endif -#ifndef NO_SDL_GLEXT -#define __glext_h_ /* Don't let gl.h include glext.h */ -#endif -#if defined(__MACOSX__) -#include /* Header File For The OpenGL Library */ -#define __X_GL_H -#else -#include /* Header File For The OpenGL Library */ -#endif -#ifndef NO_SDL_GLEXT -#undef __glext_h_ -#endif +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ -/** - * \file SDL_opengl.h +/* + * Mesa 3-D graphics library * - * This file is included because glext.h is not available on some systems. - * If you don't want this version included, simply define ::NO_SDL_GLEXT. + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. * - * The latest version is available from: - * http://www.opengl.org/registry/ - */ - -/** - * \def NO_SDL_GLEXT + * 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: * - * Define this if you have your own version of glext.h and want to disable the - * version included in SDL_opengl.h. + * 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. */ -#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) -#ifndef __glext_h_ -#define __glext_h_ -#ifdef __cplusplus -extern "C" { +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include "gl_mangle.h" #endif -/* -** Copyright (c) 2007-2010 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ -/* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated $Date: 2010-08-03 01:30:25 -0700 (Tue, 03 Aug 2010) $ */ -/* Current version at http://www.opengl.org/registry/ */ -#define GL_GLEXT_VERSION 64 -/* Function declaration macros - to move into glplatform.h */ +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 -#include #endif - -#ifndef APIENTRY -#define APIENTRY +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX #endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * +#include #endif + #ifndef GLAPI #define GLAPI extern #endif -/*************************************************************/ - -#ifndef GL_VERSION_1_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#ifndef GLAPIENTRY +#define GLAPIENTRY #endif -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY #endif -#ifndef GL_ARB_imaging -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * #endif -#ifndef GL_ARB_imaging_DEPRECATED -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_CONSTANT_BORDER 0x8151 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * #endif -#ifndef GL_VERSION_1_3 -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on #endif -#ifndef GL_VERSION_1_3_DEPRECATED -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#endif +/* + * End system-specific stuff. + **********************************************************************/ -#ifndef GL_VERSION_1_4 -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#endif -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif -#ifndef GL_VERSION_1_5 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 +#ifdef __cplusplus +extern "C" { #endif -#ifndef GL_VERSION_1_5_DEPRECATED -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC1_ALPHA 0x8589 -#define GL_SRC2_ALPHA 0x858A -#endif -#ifndef GL_VERSION_2_0 -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif -#ifndef GL_VERSION_2_0_DEPRECATED -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -#endif +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 -#ifndef GL_VERSION_2_1 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#endif -#ifndef GL_VERSION_2_1_DEPRECATED -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ -#ifndef GL_VERSION_3_0 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_DEPTH_BUFFER 0x8223 -#define GL_STENCIL_BUFFER 0x8224 -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -/* Reuse tokens from ARB_depth_buffer_float */ -/* reuse GL_DEPTH_COMPONENT32F */ -/* reuse GL_DEPTH32F_STENCIL8 */ -/* reuse GL_FLOAT_32_UNSIGNED_INT_24_8_REV */ -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_INVALID_FRAMEBUFFER_OPERATION */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_DEFAULT */ -/* reuse GL_FRAMEBUFFER_UNDEFINED */ -/* reuse GL_DEPTH_STENCIL_ATTACHMENT */ -/* reuse GL_INDEX */ -/* reuse GL_MAX_RENDERBUFFER_SIZE */ -/* reuse GL_DEPTH_STENCIL */ -/* reuse GL_UNSIGNED_INT_24_8 */ -/* reuse GL_DEPTH24_STENCIL8 */ -/* reuse GL_TEXTURE_STENCIL_SIZE */ -/* reuse GL_TEXTURE_RED_TYPE */ -/* reuse GL_TEXTURE_GREEN_TYPE */ -/* reuse GL_TEXTURE_BLUE_TYPE */ -/* reuse GL_TEXTURE_ALPHA_TYPE */ -/* reuse GL_TEXTURE_DEPTH_TYPE */ -/* reuse GL_UNSIGNED_NORMALIZED */ -/* reuse GL_FRAMEBUFFER_BINDING */ -/* reuse GL_DRAW_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_BINDING */ -/* reuse GL_READ_FRAMEBUFFER */ -/* reuse GL_DRAW_FRAMEBUFFER */ -/* reuse GL_READ_FRAMEBUFFER_BINDING */ -/* reuse GL_RENDERBUFFER_SAMPLES */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* reuse GL_FRAMEBUFFER_COMPLETE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER */ -/* reuse GL_FRAMEBUFFER_UNSUPPORTED */ -/* reuse GL_MAX_COLOR_ATTACHMENTS */ -/* reuse GL_COLOR_ATTACHMENT0 */ -/* reuse GL_COLOR_ATTACHMENT1 */ -/* reuse GL_COLOR_ATTACHMENT2 */ -/* reuse GL_COLOR_ATTACHMENT3 */ -/* reuse GL_COLOR_ATTACHMENT4 */ -/* reuse GL_COLOR_ATTACHMENT5 */ -/* reuse GL_COLOR_ATTACHMENT6 */ -/* reuse GL_COLOR_ATTACHMENT7 */ -/* reuse GL_COLOR_ATTACHMENT8 */ -/* reuse GL_COLOR_ATTACHMENT9 */ -/* reuse GL_COLOR_ATTACHMENT10 */ -/* reuse GL_COLOR_ATTACHMENT11 */ -/* reuse GL_COLOR_ATTACHMENT12 */ -/* reuse GL_COLOR_ATTACHMENT13 */ -/* reuse GL_COLOR_ATTACHMENT14 */ -/* reuse GL_COLOR_ATTACHMENT15 */ -/* reuse GL_DEPTH_ATTACHMENT */ -/* reuse GL_STENCIL_ATTACHMENT */ -/* reuse GL_FRAMEBUFFER */ -/* reuse GL_RENDERBUFFER */ -/* reuse GL_RENDERBUFFER_WIDTH */ -/* reuse GL_RENDERBUFFER_HEIGHT */ -/* reuse GL_RENDERBUFFER_INTERNAL_FORMAT */ -/* reuse GL_STENCIL_INDEX1 */ -/* reuse GL_STENCIL_INDEX4 */ -/* reuse GL_STENCIL_INDEX8 */ -/* reuse GL_STENCIL_INDEX16 */ -/* reuse GL_RENDERBUFFER_RED_SIZE */ -/* reuse GL_RENDERBUFFER_GREEN_SIZE */ -/* reuse GL_RENDERBUFFER_BLUE_SIZE */ -/* reuse GL_RENDERBUFFER_ALPHA_SIZE */ -/* reuse GL_RENDERBUFFER_DEPTH_SIZE */ -/* reuse GL_RENDERBUFFER_STENCIL_SIZE */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE */ -/* reuse GL_MAX_SAMPLES */ -/* Reuse tokens from ARB_framebuffer_sRGB */ -/* reuse GL_FRAMEBUFFER_SRGB */ -/* Reuse tokens from ARB_half_float_vertex */ -/* reuse GL_HALF_FLOAT */ -/* Reuse tokens from ARB_map_buffer_range */ -/* reuse GL_MAP_READ_BIT */ -/* reuse GL_MAP_WRITE_BIT */ -/* reuse GL_MAP_INVALIDATE_RANGE_BIT */ -/* reuse GL_MAP_INVALIDATE_BUFFER_BIT */ -/* reuse GL_MAP_FLUSH_EXPLICIT_BIT */ -/* reuse GL_MAP_UNSYNCHRONIZED_BIT */ -/* Reuse tokens from ARB_texture_compression_rgtc */ -/* reuse GL_COMPRESSED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_SIGNED_RED_RGTC1 */ -/* reuse GL_COMPRESSED_RG_RGTC2 */ -/* reuse GL_COMPRESSED_SIGNED_RG_RGTC2 */ -/* Reuse tokens from ARB_texture_rg */ -/* reuse GL_RG */ -/* reuse GL_RG_INTEGER */ -/* reuse GL_R8 */ -/* reuse GL_R16 */ -/* reuse GL_RG8 */ -/* reuse GL_RG16 */ -/* reuse GL_R16F */ -/* reuse GL_R32F */ -/* reuse GL_RG16F */ -/* reuse GL_RG32F */ -/* reuse GL_R8I */ -/* reuse GL_R8UI */ -/* reuse GL_R16I */ -/* reuse GL_R16UI */ -/* reuse GL_R32I */ -/* reuse GL_R32UI */ -/* reuse GL_RG8I */ -/* reuse GL_RG8UI */ -/* reuse GL_RG16I */ -/* reuse GL_RG16UI */ -/* reuse GL_RG32I */ -/* reuse GL_RG32UI */ -/* Reuse tokens from ARB_vertex_array_object */ -/* reuse GL_VERTEX_ARRAY_BINDING */ -#endif -#ifndef GL_VERSION_3_0_DEPRECATED -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -/* Reuse tokens from ARB_framebuffer_object */ -/* reuse GL_TEXTURE_LUMINANCE_TYPE */ -/* reuse GL_TEXTURE_INTENSITY_TYPE */ -#endif -#ifndef GL_VERSION_3_1 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -/* Reuse tokens from ARB_copy_buffer */ -/* reuse GL_COPY_READ_BUFFER */ -/* reuse GL_COPY_WRITE_BUFFER */ -/* Reuse tokens from ARB_draw_instanced (none) */ -/* Reuse tokens from ARB_uniform_buffer_object */ -/* reuse GL_UNIFORM_BUFFER */ -/* reuse GL_UNIFORM_BUFFER_BINDING */ -/* reuse GL_UNIFORM_BUFFER_START */ -/* reuse GL_UNIFORM_BUFFER_SIZE */ -/* reuse GL_MAX_VERTEX_UNIFORM_BLOCKS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_BLOCKS */ -/* reuse GL_MAX_COMBINED_UNIFORM_BLOCKS */ -/* reuse GL_MAX_UNIFORM_BUFFER_BINDINGS */ -/* reuse GL_MAX_UNIFORM_BLOCK_SIZE */ -/* reuse GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT */ -/* reuse GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */ -/* reuse GL_ACTIVE_UNIFORM_BLOCKS */ -/* reuse GL_UNIFORM_TYPE */ -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_INDEX */ -/* reuse GL_UNIFORM_OFFSET */ -/* reuse GL_UNIFORM_ARRAY_STRIDE */ -/* reuse GL_UNIFORM_MATRIX_STRIDE */ -/* reuse GL_UNIFORM_IS_ROW_MAJOR */ -/* reuse GL_UNIFORM_BLOCK_BINDING */ -/* reuse GL_UNIFORM_BLOCK_DATA_SIZE */ -/* reuse GL_UNIFORM_BLOCK_NAME_LENGTH */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS */ -/* reuse GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER */ -/* reuse GL_INVALID_INDEX */ -#endif +/* + * Constants + */ -#ifndef GL_VERSION_3_2 -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -/* Reuse tokens from ARB_depth_clamp */ -/* reuse GL_DEPTH_CLAMP */ -/* Reuse tokens from ARB_draw_elements_base_vertex (none) */ -/* Reuse tokens from ARB_fragment_coord_conventions (none) */ -/* Reuse tokens from ARB_provoking_vertex */ -/* reuse GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION */ -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -/* Reuse tokens from ARB_seamless_cube_map */ -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS */ -/* Reuse tokens from ARB_sync */ -/* reuse GL_MAX_SERVER_WAIT_TIMEOUT */ -/* reuse GL_OBJECT_TYPE */ -/* reuse GL_SYNC_CONDITION */ -/* reuse GL_SYNC_STATUS */ -/* reuse GL_SYNC_FLAGS */ -/* reuse GL_SYNC_FENCE */ -/* reuse GL_SYNC_GPU_COMMANDS_COMPLETE */ -/* reuse GL_UNSIGNALED */ -/* reuse GL_SIGNALED */ -/* reuse GL_ALREADY_SIGNALED */ -/* reuse GL_TIMEOUT_EXPIRED */ -/* reuse GL_CONDITION_SATISFIED */ -/* reuse GL_WAIT_FAILED */ -/* reuse GL_TIMEOUT_IGNORED */ -/* reuse GL_SYNC_FLUSH_COMMANDS_BIT */ -/* reuse GL_TIMEOUT_IGNORED */ -/* Reuse tokens from ARB_texture_multisample */ -/* reuse GL_SAMPLE_POSITION */ -/* reuse GL_SAMPLE_MASK */ -/* reuse GL_SAMPLE_MASK_VALUE */ -/* reuse GL_MAX_SAMPLE_MASK_WORDS */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE */ -/* reuse GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_TEXTURE_SAMPLES */ -/* reuse GL_TEXTURE_FIXED_SAMPLE_LOCATIONS */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE */ -/* reuse GL_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY */ -/* reuse GL_MAX_COLOR_TEXTURE_SAMPLES */ -/* reuse GL_MAX_DEPTH_TEXTURE_SAMPLES */ -/* reuse GL_MAX_INTEGER_SAMPLES */ -/* Don't need to reuse tokens from ARB_vertex_array_bgra since they're already in 1.2 core */ -#endif +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +/* Vertex Arrays */ +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +/* Accumulation buffer */ +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000FFFFF + + +/* OpenGL 1.1 */ +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF -#ifndef GL_VERSION_3_3 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -/* Reuse tokens from ARB_blend_func_extended */ -/* reuse GL_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_COLOR */ -/* reuse GL_ONE_MINUS_SRC1_ALPHA */ -/* reuse GL_MAX_DUAL_SOURCE_DRAW_BUFFERS */ -/* Reuse tokens from ARB_explicit_attrib_location (none) */ -/* Reuse tokens from ARB_occlusion_query2 */ -/* reuse GL_ANY_SAMPLES_PASSED */ -/* Reuse tokens from ARB_sampler_objects */ -/* reuse GL_SAMPLER_BINDING */ -/* Reuse tokens from ARB_shader_bit_encoding (none) */ -/* Reuse tokens from ARB_texture_rgb10_a2ui */ -/* reuse GL_RGB10_A2UI */ -/* Reuse tokens from ARB_texture_swizzle */ -/* reuse GL_TEXTURE_SWIZZLE_R */ -/* reuse GL_TEXTURE_SWIZZLE_G */ -/* reuse GL_TEXTURE_SWIZZLE_B */ -/* reuse GL_TEXTURE_SWIZZLE_A */ -/* reuse GL_TEXTURE_SWIZZLE_RGBA */ -/* Reuse tokens from ARB_timer_query */ -/* reuse GL_TIME_ELAPSED */ -/* reuse GL_TIMESTAMP */ -/* Reuse tokens from ARB_vertex_type_2_10_10_10_rev */ -/* reuse GL_INT_2_10_10_10_REV */ -#endif -#ifndef GL_VERSION_4_0 -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F -/* Reuse tokens from ARB_texture_query_lod (none) */ -/* Reuse tokens from ARB_draw_buffers_blend (none) */ -/* Reuse tokens from ARB_draw_indirect */ -/* reuse GL_DRAW_INDIRECT_BUFFER */ -/* reuse GL_DRAW_INDIRECT_BUFFER_BINDING */ -/* Reuse tokens from ARB_gpu_shader5 */ -/* reuse GL_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MAX_GEOMETRY_SHADER_INVOCATIONS */ -/* reuse GL_MIN_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_MAX_FRAGMENT_INTERPOLATION_OFFSET */ -/* reuse GL_FRAGMENT_INTERPOLATION_OFFSET_BITS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -/* Reuse tokens from ARB_gpu_shader_fp64 */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -/* Reuse tokens from ARB_shader_subroutine */ -/* reuse GL_ACTIVE_SUBROUTINES */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORMS */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_ACTIVE_SUBROUTINE_MAX_LENGTH */ -/* reuse GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH */ -/* reuse GL_MAX_SUBROUTINES */ -/* reuse GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS */ -/* reuse GL_NUM_COMPATIBLE_SUBROUTINES */ -/* reuse GL_COMPATIBLE_SUBROUTINES */ -/* Reuse tokens from ARB_tessellation_shader */ -/* reuse GL_PATCHES */ -/* reuse GL_PATCH_VERTICES */ -/* reuse GL_PATCH_DEFAULT_INNER_LEVEL */ -/* reuse GL_PATCH_DEFAULT_OUTER_LEVEL */ -/* reuse GL_TESS_CONTROL_OUTPUT_VERTICES */ -/* reuse GL_TESS_GEN_MODE */ -/* reuse GL_TESS_GEN_SPACING */ -/* reuse GL_TESS_GEN_VERTEX_ORDER */ -/* reuse GL_TESS_GEN_POINT_MODE */ -/* reuse GL_ISOLINES */ -/* reuse GL_FRACTIONAL_ODD */ -/* reuse GL_FRACTIONAL_EVEN */ -/* reuse GL_MAX_PATCH_VERTICES */ -/* reuse GL_MAX_TESS_GEN_LEVEL */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS */ -/* reuse GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_PATCH_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS */ -/* reuse GL_MAX_TESS_CONTROL_INPUT_COMPONENTS */ -/* reuse GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS */ -/* reuse GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER */ -/* reuse GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_EVALUATION_SHADER */ -/* reuse GL_TESS_CONTROL_SHADER */ -/* Reuse tokens from ARB_texture_buffer_object_rgb32 (none) */ -/* Reuse tokens from ARB_transform_feedback2 */ -/* reuse GL_TRANSFORM_FEEDBACK */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED */ -/* reuse GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE */ -/* reuse GL_TRANSFORM_FEEDBACK_BINDING */ -/* Reuse tokens from ARB_transform_feedback3 */ -/* reuse GL_MAX_TRANSFORM_FEEDBACK_BUFFERS */ -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif -#ifndef GL_VERSION_4_1 -/* Reuse tokens from ARB_ES2_compatibility */ -/* reuse GL_FIXED */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_TYPE */ -/* reuse GL_IMPLEMENTATION_COLOR_READ_FORMAT */ -/* reuse GL_LOW_FLOAT */ -/* reuse GL_MEDIUM_FLOAT */ -/* reuse GL_HIGH_FLOAT */ -/* reuse GL_LOW_INT */ -/* reuse GL_MEDIUM_INT */ -/* reuse GL_HIGH_INT */ -/* reuse GL_SHADER_COMPILER */ -/* reuse GL_NUM_SHADER_BINARY_FORMATS */ -/* reuse GL_MAX_VERTEX_UNIFORM_VECTORS */ -/* reuse GL_MAX_VARYING_VECTORS */ -/* reuse GL_MAX_FRAGMENT_UNIFORM_VECTORS */ -/* Reuse tokens from ARB_get_program_binary */ -/* reuse GL_PROGRAM_BINARY_RETRIEVABLE_HINT */ -/* reuse GL_PROGRAM_BINARY_LENGTH */ -/* reuse GL_NUM_PROGRAM_BINARY_FORMATS */ -/* reuse GL_PROGRAM_BINARY_FORMATS */ -/* Reuse tokens from ARB_separate_shader_objects */ -/* reuse GL_VERTEX_SHADER_BIT */ -/* reuse GL_FRAGMENT_SHADER_BIT */ -/* reuse GL_GEOMETRY_SHADER_BIT */ -/* reuse GL_TESS_CONTROL_SHADER_BIT */ -/* reuse GL_TESS_EVALUATION_SHADER_BIT */ -/* reuse GL_ALL_SHADER_BITS */ -/* reuse GL_PROGRAM_SEPARABLE */ -/* reuse GL_ACTIVE_PROGRAM */ -/* reuse GL_PROGRAM_PIPELINE_BINDING */ -/* Reuse tokens from ARB_shader_precision (none) */ -/* Reuse tokens from ARB_vertex_attrib_64bit - all are in GL 3.0 and 4.0 already */ -/* Reuse tokens from ARB_viewport_array - some are in GL 1.1 and ARB_provoking_vertex already */ -/* reuse GL_MAX_VIEWPORTS */ -/* reuse GL_VIEWPORT_SUBPIXEL_BITS */ -/* reuse GL_VIEWPORT_BOUNDS_RANGE */ -/* reuse GL_LAYER_PROVOKING_VERTEX */ -/* reuse GL_VIEWPORT_INDEX_PROVOKING_VERTEX */ -/* reuse GL_UNDEFINED_VERTEX */ -#endif +/* + * Miscellaneous + */ -#ifndef GL_ARB_multitexture -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); -#ifndef GL_ARB_transpose_matrix -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); -#ifndef GL_ARB_multisample -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); -#ifndef GL_ARB_texture_env_add -#endif +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); -#ifndef GL_ARB_texture_cube_map -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); -#ifndef GL_ARB_texture_compression -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#endif +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); -#ifndef GL_ARB_texture_border_clamp -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); -#ifndef GL_ARB_point_parameters -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); -#ifndef GL_ARB_vertex_blend -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F -#endif +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); -#ifndef GL_ARB_matrix_palette -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#endif +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); -#ifndef GL_ARB_texture_env_combine -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#endif +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); -#ifndef GL_ARB_texture_env_crossbar -#endif +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); -#ifndef GL_ARB_texture_env_dot3 -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF -#endif +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif +GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); -#ifndef GL_ARB_depth_texture -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif +GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); -#ifndef GL_ARB_shadow -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E -#endif +GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); -#ifndef GL_ARB_shadow_ambient -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif +GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); -#ifndef GL_ARB_window_pos -#endif +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); -#ifndef GL_ARB_vertex_program -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#endif +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); -#ifndef GL_ARB_fragment_program -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#endif +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); -#ifndef GL_ARB_vertex_buffer_object -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#endif +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); -#ifndef GL_ARB_occlusion_query -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 -#endif +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); -#ifndef GL_ARB_shader_objects -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#endif +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); -#ifndef GL_ARB_vertex_shader -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#endif +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); -#ifndef GL_ARB_fragment_shader -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif +GLAPI void GLAPIENTRY glEnable( GLenum cap ); -#ifndef GL_ARB_shading_language_100 -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif +GLAPI void GLAPIENTRY glDisable( GLenum cap ); -#ifndef GL_ARB_texture_non_power_of_two -#endif +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); -#ifndef GL_ARB_point_sprite -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 -#endif -#ifndef GL_ARB_fragment_program_shadow -#endif +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ -#ifndef GL_ARB_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ -#ifndef GL_ARB_texture_rectangle -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif -#ifndef GL_ARB_color_buffer_float -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D -#endif +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); -#ifndef GL_ARB_half_float_pixel -#define GL_HALF_FLOAT_ARB 0x140B -#endif +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); -#ifndef GL_ARB_texture_float -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); -#ifndef GL_ARB_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); -#ifndef GL_ARB_depth_buffer_float -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#endif -#ifndef GL_ARB_draw_instanced -#endif +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); -#ifndef GL_ARB_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#endif +GLAPI void GLAPIENTRY glPopAttrib( void ); -#ifndef GL_ARB_framebuffer_object_DEPRECATED -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#endif -#ifndef GL_ARB_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#endif +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ -#ifndef GL_ARB_geometry_shader4 -#define GL_LINES_ADJACENCY_ARB 0x000A -#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B -#define GL_TRIANGLES_ADJACENCY_ARB 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 -/* reuse GL_MAX_VARYING_COMPONENTS */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER */ -#endif +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ -#ifndef GL_ARB_half_float_vertex -#define GL_HALF_FLOAT 0x140B -#endif -#ifndef GL_ARB_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE -#endif +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); -#ifndef GL_ARB_map_buffer_range -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#endif +GLAPI GLenum GLAPIENTRY glGetError( void ); -#ifndef GL_ARB_texture_buffer_object -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E -#endif +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); -#ifndef GL_ARB_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#endif +GLAPI void GLAPIENTRY glFinish( void ); -#ifndef GL_ARB_texture_rg -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#endif +GLAPI void GLAPIENTRY glFlush( void ); -#ifndef GL_ARB_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#endif +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); -#ifndef GL_ARB_uniform_buffer_object -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFFu -#endif -#ifndef GL_ARB_compatibility -/* ARB_compatibility just defines tokens from core 3.0 */ -#endif +/* + * Depth Buffer + */ -#ifndef GL_ARB_copy_buffer -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#endif +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); -#ifndef GL_ARB_shader_texture_lod -#endif +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); -#ifndef GL_ARB_depth_clamp -#define GL_DEPTH_CLAMP 0x864F -#endif +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); -#ifndef GL_ARB_draw_elements_base_vertex -#endif +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); -#ifndef GL_ARB_fragment_coord_conventions -#endif -#ifndef GL_ARB_provoking_vertex -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#endif +/* + * Accumulation Buffer + */ -#ifndef GL_ARB_seamless_cube_map -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#endif +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); -#ifndef GL_ARB_sync -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull -#endif +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); -#ifndef GL_ARB_texture_multisample -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#endif -#ifndef GL_ARB_vertex_array_bgra -/* reuse GL_BGRA */ -#endif +/* + * Transformation + */ -#ifndef GL_ARB_draw_buffers_blend -#endif +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); -#ifndef GL_ARB_sample_shading -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 -#endif +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); -#ifndef GL_ARB_texture_cube_map_array -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F -#endif +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); -#ifndef GL_ARB_texture_gather -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#endif +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); -#ifndef GL_ARB_texture_query_lod -#endif +GLAPI void GLAPIENTRY glPushMatrix( void ); -#ifndef GL_ARB_shading_language_include -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA -#endif +GLAPI void GLAPIENTRY glPopMatrix( void ); -#ifndef GL_ARB_texture_compression_bptc -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F -#endif +GLAPI void GLAPIENTRY glLoadIdentity( void ); -#ifndef GL_ARB_blend_func_extended -#define GL_SRC1_COLOR 0x88F9 -/* reuse GL_SRC1_ALPHA */ -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#endif +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); -#ifndef GL_ARB_explicit_attrib_location -#endif +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); -#ifndef GL_ARB_occlusion_query2 -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#endif +GLAPI void GLAPIENTRY glRotated( GLdouble angle, + GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRotatef( GLfloat angle, + GLfloat x, GLfloat y, GLfloat z ); -#ifndef GL_ARB_sampler_objects -#define GL_SAMPLER_BINDING 0x8919 -#endif +GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); -#ifndef GL_ARB_shader_bit_encoding -#endif +GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_RGB10_A2UI 0x906F -#endif -#ifndef GL_ARB_texture_swizzle -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#endif +/* + * Display Lists + */ -#ifndef GL_ARB_timer_query -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#endif +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -/* reuse GL_UNSIGNED_INT_2_10_10_10_REV */ -#define GL_INT_2_10_10_10_REV 0x8D9F -#endif +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); -#ifndef GL_ARB_draw_indirect -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 -#endif +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); -#ifndef GL_ARB_gpu_shader5 -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -/* reuse GL_MAX_VERTEX_STREAMS */ -#endif +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); -#ifndef GL_ARB_gpu_shader_fp64 -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#endif +GLAPI void GLAPIENTRY glEndList( void ); -#ifndef GL_ARB_shader_subroutine -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B -/* reuse GL_UNIFORM_SIZE */ -/* reuse GL_UNIFORM_NAME_LENGTH */ -#endif +GLAPI void GLAPIENTRY glCallList( GLuint list ); -#ifndef GL_ARB_tessellation_shader -#define GL_PATCHES 0x000E -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -/* reuse GL_TRIANGLES */ -/* reuse GL_QUADS */ -#define GL_ISOLINES 0x8E7A -/* reuse GL_EQUAL */ -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -/* reuse GL_CCW */ -/* reuse GL_CW */ -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#endif +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); -#ifndef GL_ARB_texture_buffer_object_rgb32 -/* reuse GL_RGB32F */ -/* reuse GL_RGB32UI */ -/* reuse GL_RGB32I */ -#endif +GLAPI void GLAPIENTRY glListBase( GLuint base ); -#ifndef GL_ARB_transform_feedback2 -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 -#endif -#ifndef GL_ARB_transform_feedback3 -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 -#endif +/* + * Drawing Functions + */ -#ifndef GL_ARB_ES2_compatibility -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#endif +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); -#ifndef GL_ARB_get_program_binary -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF -#endif -#ifndef GL_ARB_separate_shader_objects -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_ALL_SHADER_BITS 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#endif +/* + * Vertex Arrays (1.1) + */ -#ifndef GL_ARB_shader_precision -#endif +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); -#ifndef GL_ARB_vertex_attrib_64bit -/* reuse GL_RGB32I */ -/* reuse GL_DOUBLE_VEC2 */ -/* reuse GL_DOUBLE_VEC3 */ -/* reuse GL_DOUBLE_VEC4 */ -/* reuse GL_DOUBLE_MAT2 */ -/* reuse GL_DOUBLE_MAT3 */ -/* reuse GL_DOUBLE_MAT4 */ -/* reuse GL_DOUBLE_MAT2x3 */ -/* reuse GL_DOUBLE_MAT2x4 */ -/* reuse GL_DOUBLE_MAT3x2 */ -/* reuse GL_DOUBLE_MAT3x4 */ -/* reuse GL_DOUBLE_MAT4x2 */ -/* reuse GL_DOUBLE_MAT4x3 */ -#endif +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); -#ifndef GL_ARB_viewport_array -/* reuse GL_SCISSOR_BOX */ -/* reuse GL_VIEWPORT */ -/* reuse GL_DEPTH_RANGE */ -/* reuse GL_SCISSOR_TEST */ -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -/* reuse GL_FIRST_VERTEX_CONVENTION */ -/* reuse GL_LAST_VERTEX_CONVENTION */ -/* reuse GL_PROVOKING_VERTEX */ -#endif +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); -#ifndef GL_ARB_cl_event -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 -#endif +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); -#ifndef GL_ARB_debug_output -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -#endif +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); -#ifndef GL_ARB_robustness -/* reuse GL_NO_ERROR */ -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 -#endif +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); -#ifndef GL_ARB_shader_stencil_export -#endif +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); -#ifndef GL_EXT_abgr -#define GL_ABGR_EXT 0x8000 -#endif +GLAPI void GLAPIENTRY glArrayElement( GLint i ); -#ifndef GL_EXT_blend_color -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#endif +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); -#ifndef GL_EXT_polygon_offset -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); -#ifndef GL_EXT_texture -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); -#ifndef GL_EXT_texture3D -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif +/* + * Lighting + */ -#ifndef GL_SGIS_texture_filter4 -#define GL_FILTER4_SGIS 0x8146 -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); -#ifndef GL_EXT_subtexture -#endif +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const GLint *params ); -#ifndef GL_EXT_copy_texture -#endif +GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, + GLfloat *params ); +GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, + GLint *params ); -#ifndef GL_EXT_histogram -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif +GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); -#ifndef GL_EXT_convolution -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); -#ifndef GL_SGI_color_matrix -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); -#ifndef GL_SGI_color_table -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); -#ifndef GL_SGIS_pixel_texture -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif -#ifndef GL_SGIX_pixel_texture -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif +/* + * Raster functions + */ -#ifndef GL_SGIS_texture4D -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#define GL_TEXTURE_4D_SGIS 0x8134 -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); -#ifndef GL_SGI_texture_color_table -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif +GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); -#ifndef GL_EXT_cmyka -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif +GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); -#ifndef GL_EXT_texture_object -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif +GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, + const GLfloat *values ); +GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, + const GLuint *values ); +GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, + const GLushort *values ); -#ifndef GL_SGIS_detail_texture -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif +GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); -#ifndef GL_SGIS_sharpen_texture -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); -#ifndef GL_EXT_packed_pixels -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); -#ifndef GL_SGIS_texture_lod -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); -#ifndef GL_SGIS_multisample -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); -#ifndef GL_EXT_rescale_normal -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif +/* + * Stenciling + */ -#ifndef GL_EXT_vertex_array -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif +GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); -#ifndef GL_EXT_misc_attribute -#endif +GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); -#ifndef GL_SGIS_generate_mipmap -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif +GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); -#ifndef GL_SGIX_clipmap -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif +GLAPI void GLAPIENTRY glClearStencil( GLint s ); -#ifndef GL_SGIX_shadow -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif -#ifndef GL_SGIS_texture_edge_clamp -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif -#ifndef GL_SGIS_texture_border_clamp -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif +/* + * Texture mapping + */ -#ifndef GL_EXT_blend_minmax -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); -#ifndef GL_EXT_blend_subtract -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); -#ifndef GL_EXT_blend_logic_op -#endif +GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); +GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); -#ifndef GL_SGIX_interlace -#define GL_INTERLACE_SGIX 0x8094 -#endif -#ifndef GL_SGIX_pixel_tiles -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif +GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); -#ifndef GL_SGIS_texture_select -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#define GL_QUAD_ALPHA4_SGIS 0x811E -#define GL_QUAD_ALPHA8_SGIS 0x811F -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); -#ifndef GL_SGIX_sprite -#define GL_SPRITE_SGIX 0x8148 -#define GL_SPRITE_MODE_SGIX 0x8149 -#define GL_SPRITE_AXIS_SGIX 0x814A -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#define GL_SPRITE_AXIAL_SGIX 0x814C -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); -#ifndef GL_SGIX_texture_multi_buffer -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif -#ifndef GL_EXT_point_parameters -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); -#ifndef GL_SGIS_point_parameters -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const GLint *params ); -#ifndef GL_SGIX_instruments -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif +GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, + GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, + GLenum pname, GLint *params ); -#ifndef GL_SGIX_texture_scale_bias -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif +GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, GLint *params ); -#ifndef GL_SGIX_framezoom -#define GL_FRAMEZOOM_SGIX 0x818B -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif -#ifndef GL_SGIX_tag_sample_buffer -#endif +GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); -#ifndef GL_FfdMaskSGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif +GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ); -#ifndef GL_SGIX_polynomial_ffd -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif +GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); -#ifndef GL_SGIX_reference_plane -#define GL_REFERENCE_PLANE_SGIX 0x817D -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif -#ifndef GL_SGIX_flush_raster -#endif +/* 1.1 functions */ -#ifndef GL_SGIX_depth_texture -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); -#ifndef GL_SGIS_fog_function -#define GL_FOG_FUNC_SGIS 0x812A -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); -#ifndef GL_SGIX_fog_offset -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); -#ifndef GL_HP_image_transform -#define GL_IMAGE_SCALE_X_HP 0x8155 -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#define GL_CUBIC_HP 0x815F -#define GL_AVERAGE_HP 0x8160 -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); -#ifndef GL_HP_convolution_border_modes -#define GL_IGNORE_BORDER_HP 0x8150 -#define GL_CONSTANT_BORDER_HP 0x8151 -#define GL_REPLICATE_BORDER_HP 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); -#ifndef GL_INGR_palette_buffer -#endif +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); -#ifndef GL_SGIX_texture_add_env -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif -#ifndef GL_EXT_color_subtable -#endif +GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, + GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const GLvoid *pixels ); -#ifndef GL_PGI_vertex_hints -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif -#ifndef GL_PGI_misc_hints -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif +GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); -#ifndef GL_EXT_paletted_texture -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif -#ifndef GL_EXT_clip_volume_hint -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif +GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLint border ); -#ifndef GL_SGIX_list_priority -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif -#ifndef GL_SGIX_ir_instrument1 -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif +GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLint border ); -#ifndef GL_SGIX_calligraphic_fragment -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif -#ifndef GL_SGIX_texture_lod_bias -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif +GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width ); -#ifndef GL_SGIX_shadow_ambient -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif -#ifndef GL_EXT_index_texture -#endif +GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, + GLsizei width, GLsizei height ); -#ifndef GL_EXT_index_material -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif -#ifndef GL_EXT_index_func -#define GL_INDEX_TEST_EXT 0x81B5 -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif +/* + * Evaluators + */ -#ifndef GL_EXT_index_array_formats -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_YCRCB_422_SGIX 0x81BB -#define GL_YCRCB_444_SGIX 0x81BC -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif - -#ifndef GL_WIN_phong_shading -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB -#endif - -#ifndef GL_WIN_specular_fog -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif - -#ifndef GL_EXT_light_texture -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -/* reuse GL_FRAGMENT_DEPTH_EXT */ -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif - -#ifndef GL_SGIX_impact_pixel_texture -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif - -#ifndef GL_EXT_bgra -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 -#endif - -#ifndef GL_SGIX_async -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif - -#ifndef GL_INTEL_texture_scissor -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif - -#ifndef GL_HP_occlusion_test -#define GL_OCCLUSION_TEST_HP 0x8165 -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif - -#ifndef GL_EXT_secondary_color -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif +GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, + GLint stride, + GLint order, const GLdouble *points ); +GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, + GLint stride, + GLint order, const GLfloat *points ); -#ifndef GL_EXT_multi_draw_arrays -#endif +GLAPI void GLAPIENTRY glMap2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ); +GLAPI void GLAPIENTRY glMap2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points ); -#ifndef GL_EXT_fog_coord -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif +GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); +GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); +GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); -#ifndef GL_REND_screen_coordinates -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif +GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); -#ifndef GL_EXT_coordinate_frame -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); -#ifndef GL_EXT_texture_env_combine -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); -#ifndef GL_APPLE_specular_vector -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); -#ifndef GL_APPLE_transform_hint -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif +GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); +GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); -#ifndef GL_SGIX_fog_scale -#define GL_FOG_SCALE_SGIX 0x81FC -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif +GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ); +GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ); -#ifndef GL_SUNX_constant_data -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif +GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); -#ifndef GL_SUN_global_alpha -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); -#ifndef GL_SUN_triangle_list -#define GL_RESTART_SUN 0x0001 -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#define GL_REPLACE_OLDEST_SUN 0x0003 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); -#ifndef GL_SUN_vertex -#endif +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); -#ifndef GL_EXT_blend_func_separate -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif -#ifndef GL_INGR_color_clamp -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif +/* + * Fog + */ -#ifndef GL_INGR_interlace_read -#define GL_INTERLACE_READ_INGR 0x8568 -#endif +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); -#ifndef GL_EXT_stencil_wrap -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 -#endif +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); -#ifndef GL_EXT_422_pixels -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); -#ifndef GL_NV_texgen_reflection -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 -#endif +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); -#ifndef GL_EXT_texture_cube_map -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif -#ifndef GL_SUN_convolution_border_modes -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif +/* + * Selection and Feedback + */ -#ifndef GL_EXT_texture_env_add -#endif +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); -#ifndef GL_EXT_texture_lod_bias -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); -#ifndef GL_EXT_vertex_weighting -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif +GLAPI void GLAPIENTRY glInitNames( void ); -#ifndef GL_NV_light_max_exponent -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif +GLAPI void GLAPIENTRY glLoadName( GLuint name ); -#ifndef GL_NV_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif +GLAPI void GLAPIENTRY glPushName( GLuint name ); -#ifndef GL_NV_register_combiners -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 -/* reuse GL_TEXTURE0_ARB */ -/* reuse GL_TEXTURE1_ARB */ -/* reuse GL_ZERO */ -/* reuse GL_NONE */ -/* reuse GL_FOG */ -#endif +GLAPI void GLAPIENTRY glPopName( void ); -#ifndef GL_NV_fog_distance -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -/* reuse GL_EYE_PLANE */ -#endif -#ifndef GL_NV_texgen_emboss -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F -#endif -#ifndef GL_NV_blend_square -#endif +/* + * OpenGL 1.2 + */ -#ifndef GL_NV_texture_env_combine4 -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); -#ifndef GL_MESA_resize_buffers -#endif +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#ifndef GL_MESA_window_pos -#endif -#ifndef GL_EXT_texture_compression_s3tc -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif +/* + * GL_ARB_imaging + */ -#ifndef GL_IBM_cull_vertex -#define GL_CULL_VERTEX_IBM 103050 -#endif +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); -#ifndef GL_IBM_multimode_draw_arrays -#endif +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); -#ifndef GL_IBM_vertex_array_lists -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); -#ifndef GL_SGIX_subsample -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); -#ifndef GL_SGIX_ycrcb_subsample -#endif +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); -#ifndef GL_SGIX_ycrcba -#define GL_YCRCB_SGIX 0x8318 -#define GL_YCRCBA_SGIX 0x8319 -#endif +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); -#ifndef GL_SGI_depth_pass_instrument -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); -#ifndef GL_3DFX_multisample -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); -#ifndef GL_3DFX_tbuffer -#endif +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); -#ifndef GL_EXT_multisample -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#endif +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); -#ifndef GL_SGIX_vertex_preclip -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); -#ifndef GL_SGIX_convolution_accuracy -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); -#ifndef GL_SGIX_resample -#define GL_PACK_RESAMPLE_SGIX 0x842C -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); -#ifndef GL_SGIS_point_line_texgen -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); -#ifndef GL_SGIS_texture_color_mask -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); -#ifndef GL_EXT_texture_env_dot3 -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 -#endif +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); -#ifndef GL_ATI_texture_mirror_once -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif -#ifndef GL_NV_evaluators -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#endif -#ifndef GL_NV_packed_depth_stencil -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif +/* + * OpenGL 1.3 + */ -#ifndef GL_NV_register_combiners2 -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif +/* multitexture */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +/* texture_cube_map */ +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* texture_compression */ +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D -#ifndef GL_NV_texture_compression_vtc -#endif +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); -#ifndef GL_NV_texture_rectangle -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); -#ifndef GL_NV_texture_shader -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_NV_texture_shader2 -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_NV_vertex_array_range2 -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_NV_vertex_program -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#endif +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_SGIX_scalebias_hint -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); -#ifndef GL_OML_interlace -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 -#endif +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); -#ifndef GL_OML_subsample -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); -#ifndef GL_OML_resample -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); -#ifndef GL_NV_copy_depth_to_color -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); -#ifndef GL_ATI_envmap_bumpmap -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); -#ifndef GL_ATI_fragment_shader -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); -#ifndef GL_ATI_pn_triangles -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); -#ifndef GL_ATI_vertex_array_object -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); -#ifndef GL_EXT_vertex_shader -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#endif +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); -#ifndef GL_ATI_vertex_streams -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_STREAM0_ATI 0x876C -#define GL_VERTEX_STREAM1_ATI 0x876D -#define GL_VERTEX_STREAM2_ATI 0x876E -#define GL_VERTEX_STREAM3_ATI 0x876F -#define GL_VERTEX_STREAM4_ATI 0x8770 -#define GL_VERTEX_STREAM5_ATI 0x8771 -#define GL_VERTEX_STREAM6_ATI 0x8772 -#define GL_VERTEX_STREAM7_ATI 0x8773 -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); -#ifndef GL_ATI_element_array -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); -#ifndef GL_SUN_mesh_array -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); -#ifndef GL_SUN_slice_accum -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); -#ifndef GL_NV_multisample_filter_hint -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); -#ifndef GL_NV_depth_clamp -#define GL_DEPTH_CLAMP_NV 0x864F -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); -#ifndef GL_NV_occlusion_query -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); -#ifndef GL_NV_point_sprite -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); -#ifndef GL_NV_texture_shader3 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); -#ifndef GL_NV_vertex_program1_1 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); -#ifndef GL_EXT_shadow_funcs -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); -#ifndef GL_EXT_stencil_two_side -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); -#ifndef GL_ATI_text_fragment_shader -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); -#ifndef GL_APPLE_client_storage -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); -#ifndef GL_APPLE_element_array -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); -#ifndef GL_APPLE_fence -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B -#endif +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); -#ifndef GL_APPLE_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); -#ifndef GL_APPLE_vertex_array_range -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); -#ifndef GL_APPLE_ycbcr_422 -#define GL_YCBCR_422_APPLE 0x85B9 -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); -#ifndef GL_S3_s3tc -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); -#ifndef GL_ATI_draw_buffers -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); -#ifndef GL_ATI_pixel_format_float -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); -#ifndef GL_ATI_texture_env_combine3 -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); -#ifndef GL_ATI_texture_float -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); -#ifndef GL_NV_float_buffer -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif -#ifndef GL_NV_fragment_program -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#endif +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); -#ifndef GL_NV_half_float -#define GL_HALF_FLOAT_NV 0x140B -#endif +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); -#ifndef GL_NV_pixel_data_range -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#endif +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); -#ifndef GL_NV_primitive_restart -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); -#ifndef GL_NV_texture_expand_normal -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); -#ifndef GL_NV_vertex_program2 -#endif -#ifndef GL_ATI_map_object_buffer -#endif +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#ifndef GL_ATI_separate_stencil -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif -#ifndef GL_ATI_vertex_attrib_array_object -#endif -#ifndef GL_OES_read_format -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 -#ifndef GL_EXT_depth_bounds_test -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); -#ifndef GL_EXT_texture_mirror_clamp -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#ifndef GL_EXT_blend_equation_separate -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif +#endif /* GL_ARB_multitexture */ -#ifndef GL_MESA_pack_invert -#define GL_PACK_INVERT_MESA 0x8758 -#endif -#ifndef GL_MESA_ycbcr_texture -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 -#endif -#ifndef GL_EXT_pixel_buffer_object -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. + */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include "SDL_opengl_glext.h" +#endif /* GL_GLEXT_LEGACY */ -#ifndef GL_NV_fragment_program_option -#endif -#ifndef GL_NV_fragment_program2 -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif -#ifndef GL_NV_vertex_program2_option -/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ -/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ -#endif +/* + * ???. GL_MESA_packed_depth_stencil + * XXX obsolete + */ +#ifndef GL_MESA_packed_depth_stencil +#define GL_MESA_packed_depth_stencil 1 -#ifndef GL_NV_vertex_program3 -/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ -#endif +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 -#ifndef GL_EXT_framebuffer_object -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif +#endif /* GL_MESA_packed_depth_stencil */ -#ifndef GL_GREMEDY_string_marker -#endif -#ifndef GL_EXT_packed_depth_stencil -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif +#ifndef GL_ATI_blend_equation_separate +#define GL_ATI_blend_equation_separate 1 -#ifndef GL_EXT_stencil_clear_tag -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif +#define GL_ALPHA_BLEND_EQUATION_ATI 0x883D -#ifndef GL_EXT_texture_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif +GLAPI void GLAPIENTRY glBlendEquationSeparateATI( GLenum modeRGB, GLenum modeA ); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEATIPROC) (GLenum modeRGB, GLenum modeA); -#ifndef GL_EXT_framebuffer_blit -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif +#endif /* GL_ATI_blend_equation_separate */ -#ifndef GL_EXT_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif -#ifndef GL_MESAX_texture_stack -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; #endif -#ifndef GL_EXT_timer_query -#define GL_TIME_ELAPSED_EXT 0x88BF +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GLAPI void APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); #endif - -#ifndef GL_EXT_gpu_program_parameters +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); #endif -#ifndef GL_APPLE_flush_buffer_range -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif -#ifndef GL_NV_gpu_program4 -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 -#endif +/** + ** NOTE!!!!! If you add new functions to this file, or update + ** glext.h be sure to regenerate the gl_mangle.h file. See comments + ** in that file for details. + **/ -#ifndef GL_NV_geometry_program4 -#define GL_LINES_ADJACENCY_EXT 0x000A -#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B -#define GL_TRIANGLES_ADJACENCY_EXT 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#endif -#ifndef GL_EXT_geometry_shader4 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -/* reuse GL_GEOMETRY_VERTICES_OUT_EXT */ -/* reuse GL_GEOMETRY_INPUT_TYPE_EXT */ -/* reuse GL_GEOMETRY_OUTPUT_TYPE_EXT */ -/* reuse GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT */ -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 -/* reuse GL_LINES_ADJACENCY_EXT */ -/* reuse GL_LINE_STRIP_ADJACENCY_EXT */ -/* reuse GL_TRIANGLES_ADJACENCY_EXT */ -/* reuse GL_TRIANGLE_STRIP_ADJACENCY_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT */ -/* reuse GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT */ -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -/* reuse GL_PROGRAM_POINT_SIZE_EXT */ -#endif -#ifndef GL_NV_vertex_program4 -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off #endif -#ifndef GL_EXT_gpu_shader4 -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 -#endif +/* + * End system-specific stuff + **********************************************************************/ -#ifndef GL_EXT_draw_instanced -#endif -#ifndef GL_EXT_packed_float -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#ifdef __cplusplus +} #endif -#ifndef GL_EXT_texture_array -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -/* reuse GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT */ -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF -#endif - -#ifndef GL_NV_fragment_program4 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#endif - -#ifndef GL_NV_geometry_shader4 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 -#endif - -#ifndef GL_EXT_draw_buffers2 -#endif - -#ifndef GL_NV_transform_feedback -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F -#define GL_LAYER_NV 0x8DAA -#define GL_NEXT_BUFFER_NV -2 -#define GL_SKIP_COMPONENTS4_NV -3 -#define GL_SKIP_COMPONENTS3_NV -4 -#define GL_SKIP_COMPONENTS2_NV -5 -#define GL_SKIP_COMPONENTS1_NV -6 -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF -#endif - -#ifndef GL_EXT_texture_integer -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E -#endif - -#ifndef GL_GREMEDY_frame_terminator -#endif - -#ifndef GL_NV_conditional_render -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 -#endif - -#ifndef GL_NV_present_video -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F -#endif - -#ifndef GL_EXT_vertex_array_bgra -/* reuse GL_BGRA */ -#endif - -#ifndef GL_EXT_texture_swizzle -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#endif - -#ifndef GL_NV_explicit_multisample -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 -#endif - -#ifndef GL_NV_transform_feedback2 -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 -#endif - -#ifndef GL_ATI_meminfo -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD -#endif - -#ifndef GL_AMD_performance_monitor -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#endif - -#ifndef GL_AMD_texture_texture4 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 -#endif - -#ifndef GL_EXT_provoking_vertex -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F -#endif - -#ifndef GL_EXT_texture_snorm -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B -/* reuse GL_RED_SNORM */ -/* reuse GL_RG_SNORM */ -/* reuse GL_RGB_SNORM */ -/* reuse GL_RGBA_SNORM */ -/* reuse GL_R8_SNORM */ -/* reuse GL_RG8_SNORM */ -/* reuse GL_RGB8_SNORM */ -/* reuse GL_RGBA8_SNORM */ -/* reuse GL_R16_SNORM */ -/* reuse GL_RG16_SNORM */ -/* reuse GL_RGB16_SNORM */ -/* reuse GL_RGBA16_SNORM */ -/* reuse GL_SIGNED_NORMALIZED */ -#endif - -#ifndef GL_AMD_draw_buffers_blend -#endif - -#ifndef GL_APPLE_texture_range -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -/* reuse GL_STORAGE_CACHED_APPLE */ -/* reuse GL_STORAGE_SHARED_APPLE */ -#endif - -#ifndef GL_APPLE_float_pixels -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 -#endif - -#ifndef GL_APPLE_object_purgeable -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -/* reuse GL_UNSIGNED_SHORT_8_8_APPLE */ -/* reuse GL_UNSIGNED_SHORT_8_8_REV_APPLE */ -#endif - -#ifndef GL_NV_video_capture -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C -#endif - -#ifndef GL_NV_copy_image -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 -#endif - -#ifndef GL_NV_texture_barrier -#endif - -#ifndef GL_AMD_shader_stencil_export -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -/* reuse GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB */ -#endif - -#ifndef GL_AMD_conservative_depth -#endif - -#ifndef GL_EXT_shader_image_load_store -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -/* reuse GL_DOUBLE */ -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -#endif - -#ifndef GL_NV_gpu_program5 -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 -#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 -#endif - -#ifndef GL_NV_gpu_shader5 -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB -/* reuse GL_PATCHES */ -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 -/* reuse GL_READ_WRITE */ -/* reuse GL_WRITE_ONLY */ -#endif - -#ifndef GL_NV_tessellation_program5 -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -/* reuse GL_INT64_NV */ -/* reuse GL_UNSIGNED_INT64_NV */ -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_COVERAGE_SAMPLES_NV 0x80A9 -#define GL_COLOR_SAMPLES_NV 0x8E20 -#endif - -#ifndef GL_AMD_name_gen_delete -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 -#endif - -#ifndef GL_AMD_debug_output -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#endif - - -/*************************************************************/ - -#include -#ifndef GL_VERSION_2_0 -/* GL type for program/shader text */ -typedef char GLchar; -#endif - -#ifndef GL_VERSION_1_5 -/* GL types for handling large vertex buffer objects */ -#if defined(__APPLE__) -typedef long GLintptr; -typedef long GLsizeiptr; -#else -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif -#endif - -#ifndef GL_ARB_vertex_buffer_object -/* GL types for handling large vertex buffer objects */ -#if defined(__APPLE__) -typedef long GLintptrARB; -typedef long GLsizeiptrARB; -#else -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif -#endif - -#ifndef GL_ARB_shader_objects -/* GL types for program/shader text and shader object handles */ -typedef char GLcharARB; -#if defined(__APPLE__) -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -#endif - -/* GL type for "half" precision (s10e5) float data in host memory */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif - -#ifndef GL_EXT_timer_query -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif - -#ifndef GL_ARB_sync -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#ifndef GL_ARB_cl_event -/* These incomplete types let us declare types compatible with OpenCL's cl_context and cl_event */ -struct _cl_context; -struct _cl_event; -#endif - -#ifndef GL_ARB_debug_output -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_AMD_debug_output -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#endif - -#ifndef GL_NV_vdpau_interop -typedef GLintptr GLvdpauSurfaceNV; -#endif - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void APIENTRY glBlendEquation (GLenum mode); -GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_VERSION_1_2_DEPRECATED -#define GL_VERSION_1_2_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogram (GLenum target); -GLAPI void APIENTRY glResetMinmax (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); -#endif - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTexture (GLenum texture); -GLAPI void APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_VERSION_1_3_DEPRECATED -#define GL_VERSION_1_3_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientActiveTexture (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); -GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); -#endif - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_VERSION_1_4_DEPRECATED -#define GL_VERSION_1_4_DEPRECATED 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordf (GLfloat coord); -GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); -GLAPI void APIENTRY glFogCoordd (GLdouble coord); -GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2iv (const GLint *v); -GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); -GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3iv (const GLint *v); -GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); -#endif - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQuery (GLuint id); -GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQuery (GLenum target); -GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); -GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); -GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBuffer (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); -GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); -GLAPI void APIENTRY glCompileShader (GLuint shader); -GLAPI GLuint APIENTRY glCreateProgram (void); -GLAPI GLuint APIENTRY glCreateShader (GLenum type); -GLAPI void APIENTRY glDeleteProgram (GLuint program); -GLAPI void APIENTRY glDeleteShader (GLuint shader); -GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); -GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); -GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgram (GLuint program); -GLAPI GLboolean APIENTRY glIsShader (GLuint shader); -GLAPI void APIENTRY glLinkProgram (GLuint program); -GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -GLAPI void APIENTRY glUseProgram (GLuint program); -GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glValidateProgram (GLuint program); -GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); -typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -#endif - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -/* OpenGL 3.0 also reuses entry points from these extensions: */ -/* ARB_framebuffer_object */ -/* ARB_map_buffer_range */ -/* ARB_vertex_array_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); -GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); -GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedback (void); -GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); -GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRender (void); -GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); -GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); -GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI const GLubyte * APIENTRY glGetStringi (GLenum name, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); -#endif - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -/* OpenGL 3.1 also reuses entry points from these extensions: */ -/* ARB_copy_buffer */ -/* ARB_uniform_buffer_object */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); -#endif - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -/* OpenGL 3.2 also reuses entry points from these extensions: */ -/* ARB_draw_elements_base_vertex */ -/* ARB_provoking_vertex */ -/* ARB_sync */ -/* ARB_texture_multisample */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); -GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -#endif - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -/* OpenGL 3.3 also reuses entry points from these extensions: */ -/* ARB_blend_func_extended */ -/* ARB_sampler_objects */ -/* ARB_explicit_attrib_location, but it has none */ -/* ARB_occlusion_query2 (no entry points) */ -/* ARB_shader_bit_encoding (no entry points) */ -/* ARB_texture_rgb10_a2ui (no entry points) */ -/* ARB_texture_swizzle (no entry points) */ -/* ARB_timer_query */ -/* ARB_vertex_type_2_10_10_10_rev */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 -/* OpenGL 4.0 also reuses entry points from these extensions: */ -/* ARB_texture_query_lod (no entry points) */ -/* ARB_draw_indirect */ -/* ARB_gpu_shader5 (no entry points) */ -/* ARB_gpu_shader_fp64 */ -/* ARB_shader_subroutine */ -/* ARB_tessellation_shader */ -/* ARB_texture_buffer_object_rgb32 (no entry points) */ -/* ARB_texture_cube_map_array (no entry points) */ -/* ARB_texture_gather (no entry points) */ -/* ARB_transform_feedback2 */ -/* ARB_transform_feedback3 */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShading (GLclampf value); -GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLclampf value); -typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 -/* OpenGL 4.1 also reuses entry points from these extensions: */ -/* ARB_ES2_compatibility */ -/* ARB_get_program_binary */ -/* ARB_separate_shader_objects */ -/* ARB_shader_precision (no entry points) */ -/* ARB_vertex_attrib_64bit */ -/* ARB_viewport_array */ -#endif - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); -GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); -GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); -GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); -GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); -GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); -GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); -GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); -GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); -GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); -GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); -GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); -GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); -GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); -GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); -#endif - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); -GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); -GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); -#endif - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleCoverageARB (GLclampf value, GLboolean invert); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); -#endif - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 -#endif - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 -#endif - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, GLvoid *img); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img); -#endif - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 -#endif - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); -GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); -GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); -GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); -GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); -GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); -GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); -GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); -GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexBlendARB (GLint count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); -typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); -typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); -typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); -typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); -typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); -typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); -typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); -#endif - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); -GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); -GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); -GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); -GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); -typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 -#endif - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 -#endif - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 -#endif - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 -#endif - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -#endif - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 -#endif - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 -#endif - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); -GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); -#endif - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); -GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); -GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); -#endif - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */ -#endif - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); -GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); -GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); -GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); -GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -GLAPI GLvoid* APIENTRY glMapBufferARB (GLenum target, GLenum access); -GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); -GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); -GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); -GLAPI void APIENTRY glEndQueryARB (GLenum target); -GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); -GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); -GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); -GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); -GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); -GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); -GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); -GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); -GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); -GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); -GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); -GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); -GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); -GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length); -typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); -typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); -typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); -typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); -#endif - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); -GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); -#endif - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -#endif - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 -#endif - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -#endif - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 -#endif - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 -#endif - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 -#endif - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); -#endif - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 -#endif - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -#endif - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 -#endif - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -#endif - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmap (GLenum target); -GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -#endif - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -#endif - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); -GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 -#endif - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); -#endif - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 -#endif - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -#endif - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArray (GLuint array); -GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); -#endif - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); -GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar* *uniformNames, GLuint *uniformIndices); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -#endif - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -#endif - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -#endif - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 -#endif - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -#endif - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, const GLint *basevertex); -#endif - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 -#endif - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertex (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); -#endif - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 -#endif - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); -GLAPI GLboolean APIENTRY glIsSync (GLsync sync); -GLAPI void APIENTRY glDeleteSync (GLsync sync); -GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); -typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaski (GLuint index, GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -#endif - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 -#endif - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -#endif - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMinSampleShadingARB (GLclampf value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); -#endif - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 -#endif - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 -#endif - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 -#endif - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); -GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); -typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* *path, const GLint *length); -typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 -#endif - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); -#endif - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -#endif - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 -#endif - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); -GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); -GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); -GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); -GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); -GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); -GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); -GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); -GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); -#endif - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 -#endif - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -#endif - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); -GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); -GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); -#endif - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); -GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); -GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); -GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); -GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); -GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); -GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); -GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); -GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); -GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); -typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -#endif - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const GLvoid *indirect); -GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); -#endif - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 -#endif - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); -GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); -GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); -GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); -typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); -#endif - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); -GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); -typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); -#endif - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 -#endif - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedback (void); -GLAPI void APIENTRY glResumeTransformFeedback (void); -GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); -GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); -GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); -GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReleaseShaderCompiler (void); -GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -GLAPI void APIENTRY glDepthRangef (GLclampf n, GLclampf f); -GLAPI void APIENTRY glClearDepthf (GLclampf d); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLclampf d); -#endif - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); -GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar* *strings); -GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); -GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); -GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); -GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); -GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); -GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); -GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar* *strings); -typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); -typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); -#endif - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); -GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); -GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd *v); -GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f); -GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd *v); -typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); -typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); -#endif - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context * context, struct _cl_event * event, GLbitfield flags); -#endif - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -#endif - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); -GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); -GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); -GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); -GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); -GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); -GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); -typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); -typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); -typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); -typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); -typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); -typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *table); -typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, GLvoid *image); -typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, GLvoid *row, GLsizei columnBufSize, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, GLvoid *values); -typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); -typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, GLvoid *img); -typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); -typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); -#endif - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 -#endif - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -#endif - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); -#endif - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); -GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); -typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); -#endif - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); -GLAPI void APIENTRY glResetHistogramEXT (GLenum target); -GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); -#endif - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); -GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); -GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image); -GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); -typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); -#endif - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table); -GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); -#endif - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); -#endif - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); -GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels); -#endif - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); -GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); -GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); -GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); -GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); -typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); -typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); -#endif - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); -#endif - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); -#endif - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glArrayElementEXT (GLint i); -GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); -GLAPI void APIENTRY glGetPointervEXT (GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 -#endif - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif - -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif - -#ifndef GL_SGIX_texture_select -#define GL_SGIX_texture_select 1 -#endif - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); -GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); -GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); -GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); -GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); -GLAPI void APIENTRY glStartInstrumentsSGIX (void); -GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); -typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); -typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); -typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); -typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); -#endif - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); -#endif - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTagSampleBufferSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); -GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); -typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); -typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); -#endif - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); -#endif - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushRasterSGIX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); -#endif - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); -GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); -typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); -#endif - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 -#endif - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -#endif - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 -#endif - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); -#endif - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data); -GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 -#endif - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); -GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); -GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); -GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); -#endif - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif - -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 -#endif - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); -#endif - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -#endif - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); -GLAPI void APIENTRY glUnlockArraysEXT (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); -#endif - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); -GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); -#endif - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif - -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); -GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); -GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); -GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); -GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); -GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 -#endif - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 -#endif - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -#endif - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 -#endif - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 -#endif - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); -GLAPI void APIENTRY glTextureLightEXT (GLenum pname); -GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); -#endif - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 -#endif - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); -GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); -GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); -GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); -GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); -GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); -typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); -typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -#endif - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer); -#endif - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 -#endif - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); -#endif - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 -#endif - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 -#endif - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); -GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); -GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); -GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); -GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); -GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); -GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); -GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); -GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); -GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); -GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); -GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); -GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); -GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); -typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 -#endif - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); -GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); -GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); -GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); -GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); -GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); -GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); -GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); -GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); -GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); -GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); -GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); -GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); -GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); -GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); -GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); -GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); -GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); -typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); -typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); -typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); -typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); -typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); -typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); -typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); -typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); -typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); -typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); -typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 -#endif - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 -#endif - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 -#endif - -#ifndef GL_SGIX_fog_scale -#define GL_SGIX_fog_scale 1 -#endif - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFinishTextureSUNX (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); -#endif - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); -GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); -GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); -GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); -GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); -GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); -GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); -typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -#endif - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); -GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); -GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); -GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); -GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); -GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); -GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer); -#endif - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -#endif - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_blend_func_separate -#define GL_INGR_blend_func_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -#endif - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 -#endif - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 -#endif - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 -#endif - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 -#endif - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 -#endif - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 -#endif - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 -#endif - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 -#endif - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); -GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); -GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer); -#endif - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 -#endif - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); -GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const GLvoid *pointer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer); -#endif - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); -GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); -GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); -#endif - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 -#endif - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 -#endif - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 -#endif - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 -#endif - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glResizeBuffersMESA (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); -#endif - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); -GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); -GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); -GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); -GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); -GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); -GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); -GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); -GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); -GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); -typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); -#endif - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 -#endif - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride); -#endif - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean* *pointer, GLint ptrstride); -GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride); -#endif - -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif - -#ifndef GL_SGIX_ycrcba -#define GL_SGIX_ycrcba 1 -#endif - -#ifndef GL_SGIX_ycrcb_subsample -#define GL_SGIX_ycrcb_subsample 1 -#endif - -#ifndef GL_SGIX_depth_pass_instrument -#define GL_SGIX_depth_pass_instrument 1 -#endif - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 -#endif - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 -#endif - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); -#endif - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); -GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); -#endif - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif - -#ifndef GL_SGIS_texture_color_mask -#define GL_SGIS_texture_color_mask 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -#endif - -#ifndef GL_SGIX_igloo_interface -#define GL_SGIX_igloo_interface 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const GLvoid *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params); -#endif - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 -#endif - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 -#endif - -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); -GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); -GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); -GLAPI void APIENTRY glFinishFenceNV (GLuint fence); -GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -#endif - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 -#endif - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); -#endif - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 -#endif - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 -#endif - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 -#endif - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 -#endif - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 -#endif - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); -GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); -GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); -GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); -GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid* *pointer); -GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); -GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); -GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); -GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLuint count, const GLdouble *v); -GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLuint count, const GLfloat *v); -GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); -GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); -GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); -GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); -GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); -GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); -GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); -GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); -typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); -typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); -typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); -typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v); -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v); -typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); -typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); -#endif - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif - -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 -#endif - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 -#endif - -#ifndef GL_OML_resample -#define GL_OML_resample 1 -#endif - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 -#endif - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); -GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); -GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); -GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); -typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -#endif - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); -GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); -GLAPI void APIENTRY glBeginFragmentShaderATI (void); -GLAPI void APIENTRY glEndFragmentShaderATI (void); -GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); -GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); -GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); -#endif - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); -GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage); -GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); -GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); -#endif - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVertexShaderEXT (void); -GLAPI void APIENTRY glEndVertexShaderEXT (void); -GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); -GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); -GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); -GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); -GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); -GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const GLvoid *addr); -GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); -GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); -GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); -GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); -GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); -GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); -GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); -GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); -GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); -GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); -GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); -GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); -GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); -GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); -GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); -GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); -GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid* *data); -GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); -GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); -GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr); -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr); -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data); -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -#endif - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); -GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); -GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); -GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); -GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); -GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); -GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); -GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); -GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); -GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); -GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); -GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); -GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); -GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); -GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); -GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); -GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); -typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -#endif - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerATI (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -#endif - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); -#endif - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 -#endif - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 -#endif - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 -#endif - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); -GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); -GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); -GLAPI void APIENTRY glEndOcclusionQueryNV (void); -GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); -typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); -GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); -#endif - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 -#endif - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 -#endif - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 -#endif - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); -#endif - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 -#endif - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 -#endif - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const GLvoid *pointer); -GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); -GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); -typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); -#endif - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); -GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); -GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); -GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); -GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); -GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); -typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); -typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); -typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -#endif - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); -GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); -GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); -GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); -#endif - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -#endif - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 -#endif - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 -#endif - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); -#endif - -#ifndef GL_ATI_pixel_format_float -#define GL_ATI_pixel_format_float 1 -/* This is really a WGL extension, but defines some associated GL enums. - * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. - */ -#endif - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 -#endif - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 -#endif - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 -#endif - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 -/* Some NV_fragment_program entry points are shared with ARB_vertex_program. */ -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); -typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); -typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); -#endif - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); -GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); -GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); -GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); -GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); -GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); -GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); -GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); -GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); -GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); -GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); -GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); -typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); -typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); -typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); -typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); -typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); -typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); -typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); -typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); -typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); -typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); -typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); -typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); -typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); -#endif - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer); -GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); -typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -#endif - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPrimitiveRestartNV (void); -GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -#endif - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 -#endif - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 -#endif - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLvoid* APIENTRY glMapObjectBufferATI (GLuint buffer); -GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); -#endif - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -#endif - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); -#endif - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 -#endif - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); -#endif - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 -#endif - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 -#endif - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 -#endif - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 -#endif - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 -#endif - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 -#endif - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 -#endif - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 -#endif - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); -GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); -GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); -GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); -GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); -GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); -GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); -GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); -GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -#endif - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const GLvoid *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); -#endif - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 -#endif - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); -#endif - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -#endif - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 -#endif - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); -#endif - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); -#endif - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); -#endif - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); -GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -#endif - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -#endif - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); -GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); -GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); -GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); -GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); -GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); -GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); -GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); -GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); -GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); -GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); -GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -#endif - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); -GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); -GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); -GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); -GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -#endif - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -#endif - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 -#endif - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 -#endif - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); -#endif - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 -#endif - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 -#endif - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 -#endif - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); -GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -#endif - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 -#endif - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -#endif - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 -#endif - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -#endif - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); -GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); -GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); -GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); -GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); -typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); -typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); -#endif - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackNV (void); -GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); -GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); -GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); -GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); -GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); -typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); -#endif - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); -GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); -GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); -typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -#endif - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -#endif - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); -#endif - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); -GLAPI void APIENTRY glEndConditionalRenderNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); -#endif - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); -GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); -typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); -#endif - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); -GLAPI void APIENTRY glEndTransformFeedbackEXT (void); -GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); -GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar* *varyings, GLenum bufferMode); -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -#endif - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); -GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); -GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); -GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); -GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); -GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); -GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); -GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); -GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); -GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); -GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); -GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid* *data); -GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); -GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); -GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string); -GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); -GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); -GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); -GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); -GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); -GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); -GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); -GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); -GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); -GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); -GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -GLAPI GLvoid* APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); -GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); -GLAPI GLvoid* APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); -GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, GLvoid* *params); -GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); -GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); -GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); -GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); -GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); -GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); -GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); -GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); -GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); -GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); -typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); -typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); -typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); -typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); -typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid* *data); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *bits); -typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, GLvoid *img); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); -typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); -typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef GLvoid* (APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, GLvoid* *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); -typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); -typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); -#endif - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 -#endif - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -#endif - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); -GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); -GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); -typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); -#endif - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); -GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); -GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); -GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); -GLAPI void APIENTRY glPauseTransformFeedbackNV (void); -GLAPI void APIENTRY glResumeTransformFeedbackNV (void); -GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); -typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); -typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); -typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -#endif - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 -#endif - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); -typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 -#endif - -#ifndef GL_AMD_vertex_shader_tesselator -#define GL_AMD_vertex_shader_tesselator 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); -GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); -#endif - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 -#endif - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); -GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); -GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -#endif - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const GLvoid *pointer); -GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid* *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid* *params); -#endif - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 -#endif - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); -GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); -GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -#endif - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 -#endif - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); -GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); -#endif - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 -#endif - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); -GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); -typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); -typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); -typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); -#endif - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); -#endif - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); -GLAPI void APIENTRY glActiveProgramEXT (GLuint program); -GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); -typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); -#endif - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 -#endif - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); -GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); -GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); -GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); -GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); -GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); -GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); -GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); -GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); -GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); -GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); -typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); -GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); -GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); -#endif - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glTextureBarrierNV (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); -#endif - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 -#endif - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 -#endif - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 -#endif - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); -#endif - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); -GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); -GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); -GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); -GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); -typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -#endif - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); -GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); -typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); -#endif - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); -GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); -GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); -GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); -GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); -GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); -#endif - -#ifndef GL_NV_shader_buffer_store -#define GL_NV_shader_buffer_store 1 -#endif - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 -#endif - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); -GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); -GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); -GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); -GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); -GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); -GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); -GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); -GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -#endif - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 -#endif - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); -GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); -GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); -typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); -typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); -#endif - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam); -GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); -#endif - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 -#ifdef GL_GLEXT_PROTOTYPES -GLAPI void APIENTRY glVDPAUInitNV (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -GLAPI void APIENTRY glVDPAUFiniNV (void); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -GLAPI void APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); -GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); -GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const GLvoid *vdpDevice, const GLvoid *getProcAddress); -typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (GLvoid *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef void (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); -typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); -#endif - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 -#endif - - -#ifdef __cplusplus -} -#endif - -#endif -#endif /* NO_SDL_GLEXT */ +#endif /* __gl_h_ */ #endif /* !__IPHONEOS__ */ diff --git a/Engine/lib/sdl/include/SDL_opengl_glext.h b/Engine/lib/sdl/include/SDL_opengl_glext.h new file mode 100644 index 0000000000..cd3869fe7f --- /dev/null +++ b/Engine/lib/sdl/include/SDL_opengl_glext.h @@ -0,0 +1,11177 @@ +#ifndef __glext_h_ +#define __glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright (c) 2013-2014 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ +/* +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.opengl.org/registry/ +** +** Khronos $Revision: 26745 $ on $Date: 2014-05-21 03:12:26 -0700 (Wed, 21 May 2014) $ +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20140521 + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +#include +#ifdef __MACOSX__ +typedef long GLsizeiptr; +typedef long GLintptr; +#else +typedef ptrdiff_t GLsizeiptr; +typedef ptrdiff_t GLintptr; +#endif +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef unsigned short GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +#ifndef GLEXT_64_TYPES_DEFINED +/* This code block is duplicated in glxext.h, so must be protected */ +#define GLEXT_64_TYPES_DEFINED +/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ +/* (as used in the GL_EXT_timer_query extension). */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(__sun__) || defined(__digital__) +#include +#if defined(__STDC__) +#if defined(__arch64__) || defined(_LP64) +typedef long int int64_t; +typedef unsigned long int uint64_t; +#else +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#endif /* __arch64__ */ +#endif /* __STDC__ */ +#elif defined( __VMS ) || defined(__sgi) +#include +#elif defined(__SCO__) || defined(__USLC__) +#include +#elif defined(__UNIXOS2__) || defined(__SOL64__) +typedef long int int32_t; +typedef long long int int64_t; +typedef unsigned long long int uint64_t; +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int32 int32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif +#endif +typedef uint64_t GLuint64; +typedef int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryformat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei bufSize, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_KHR_context_flush_control +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef unsigned short GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_MIN_SPARSE_LEVEL_ARB 0x919B +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +#ifdef __MACOSX__ /* The OS X headers haven't caught up with Khronos yet */ +typedef long GLsizeiptrARB; +typedef long GLintptrARB; +#else +typedef ptrdiff_t GLsizeiptrARB; +typedef ptrdiff_t GLintptrARB; +#endif +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef GLint GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEOESPROC) (GLfixed value, GLboolean invert); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glSampleCoverageOES (GLfixed value, GLboolean invert); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean resident); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842C +#define GL_UNPACK_RESAMPLE_SGIX 0x842D +#define GL_RESAMPLE_REPLICATE_SGIX 0x842E +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Engine/lib/sdl/include/SDL_opengles.h b/Engine/lib/sdl/include/SDL_opengles.h index d88e1573f9..bcc127779d 100644 --- a/Engine/lib/sdl/include/SDL_opengles.h +++ b/Engine/lib/sdl/include/SDL_opengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_opengles2.h b/Engine/lib/sdl/include/SDL_opengles2.h index 2c05479231..edcd1a24ae 100644 --- a/Engine/lib/sdl/include/SDL_opengles2.h +++ b/Engine/lib/sdl/include/SDL_opengles2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,15 +20,17 @@ */ /** - * \file SDL_opengles.h + * \file SDL_opengles2.h * * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. */ #ifndef _MSC_VER + #ifdef __IPHONEOS__ #include #include #else +#include #include #include #endif @@ -36,2752 +38,10 @@ #else /* _MSC_VER */ /* OpenGL ES2 headers for Visual Studio */ - -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2009 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. -* -* $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ -* -* Adopters may modify this file to suit their platform. Adopters are -* encouraged to submit platform specific modifications to the Khronos -* group so that they can be included in future versions of this file. -* Please submit changes by sending them to the public Khronos Bugzilla -* (http://khronos.org/bugzilla) by filing a bug against product -* "Khronos (general)" component "Registry". -* -* A predefined template which fills in some of the bug fields can be -* reached using http://tinyurl.com/khrplatform-h-bugreport, but you -* must create a Bugzilla login first. -* -* -* See the Implementer's Guidelines for information about where this file -* should be located on your system and for more details of its use: -* http://www.khronos.org/registry/implementers_guide.pdf -* -* This file should be included as -* #include -* by Khronos client API header files that use its types and defines. -* -* The types in khrplatform.h should only be used to define API-specific types. -* -* Types defined in khrplatform.h: -* khronos_int8_t signed 8 bit -* khronos_uint8_t unsigned 8 bit -* khronos_int16_t signed 16 bit -* khronos_uint16_t unsigned 16 bit -* khronos_int32_t signed 32 bit -* khronos_uint32_t unsigned 32 bit -* khronos_int64_t signed 64 bit -* khronos_uint64_t unsigned 64 bit -* khronos_intptr_t signed same number of bits as a pointer -* khronos_uintptr_t unsigned same number of bits as a pointer -* khronos_ssize_t signed size -* khronos_usize_t unsigned size -* khronos_float_t signed 32 bit floating point -* khronos_time_ns_t unsigned 64 bit time in nanoseconds -* khronos_utime_nanoseconds_t unsigned time interval or absolute time in -* nanoseconds -* khronos_stime_nanoseconds_t signed time interval in nanoseconds -* khronos_boolean_enum_t enumerated boolean type. This should -* only be used as a base type when a client API's boolean type is -* an enum. Client APIs which use an integer or other type for -* booleans cannot use this as the base type for their boolean. -* -* Tokens defined in khrplatform.h: -* -* KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. -* -* KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. -* KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. -* -* Calling convention macros defined in this file: -* KHRONOS_APICALL -* KHRONOS_APIENTRY -* KHRONOS_APIATTRIBUTES -* -* These may be used in function prototypes as: -* -* KHRONOS_APICALL void KHRONOS_APIENTRY funcname( -* int arg1, -* int arg2) KHRONOS_APIATTRIBUTES; -*/ - -/*------------------------------------------------------------------------- -* Definition of KHRONOS_APICALL -*------------------------------------------------------------------------- -* This precedes the return type of the function in the function prototype. -*/ -#if defined(_WIN32) && !defined(__SCITECH_SNAP__) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- -* Definition of KHRONOS_APIENTRY -*------------------------------------------------------------------------- -* This follows the return type of the function and precedes the function -* name in the function prototype. -*/ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) -/* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- -* Definition of KHRONOS_APIATTRIBUTES -*------------------------------------------------------------------------- -* This follows the closing parenthesis of the function prototype arguments. -*/ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- -* basic type definitions -*-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* -* Using -*/ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__VMS ) || defined(__sgi) - -/* -* Using -*/ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* -* Win32 -*/ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* -* Sun or Digital -*/ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* -* Hypothetical platform with no float or int64 support -*/ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* -* Generic fallback -*/ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* -* Types that are (so far) the same on all platforms -*/ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* -* Types that differ between LLP64 and LP64 architectures - in LLP64, -* pointers are 64 bits, but 'long' is still 32 bits. Win64 appears -* to be the only LLP64 architecture in current use. -*/ -#ifdef _WIN64 -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* -* Float type -*/ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types -* -* These types can be used to represent a time interval in nanoseconds or -* an absolute Unadjusted System Time. Unadjusted System Time is the number -* of nanoseconds since some arbitrary system event (e.g. since the last -* time the system booted). The Unadjusted System Time is an unsigned -* 64 bit value that wraps back to 0 every 584 years. Time intervals -* may be either signed or unsigned. -*/ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* -* Dummy value used to pad enum types to 32 bits. -*/ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* -* Enumerated boolean type -* -* Values other than zero should be considered to be true. Therefore -* comparisons should not be made against KHRONOS_TRUE. -*/ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ - - -#ifndef __gl2platform_h_ -#define __gl2platform_h_ - -/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h - * - * Adopters may modify khrplatform.h and this file to suit their platform. - * You are encouraged to submit all modifications to the Khronos group so that - * they can be included in future versions of this file. Please submit changes - * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) - * by filing a bug against product "OpenGL-ES" component "Registry". - */ - -/*#include */ - -#ifndef GL_APICALL -#define GL_APICALL KHRONOS_APICALL -#endif - -#ifndef GL_APIENTRY -#define GL_APIENTRY KHRONOS_APIENTRY -#endif - -#endif /* __gl2platform_h_ */ - -#ifndef __gl2_h_ -#define __gl2_h_ - -/* $Revision: 16803 $ on $Date:: 2012-02-02 09:49:18 -0800 #$ */ - -/*#include */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -/*------------------------------------------------------------------------- - * Data type definitions - *-----------------------------------------------------------------------*/ - -typedef void GLvoid; -typedef char GLchar; -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef khronos_int8_t GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLsizei; -typedef khronos_uint8_t GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef khronos_int32_t GLfixed; - -/* GL types for handling large vertex buffer objects */ -typedef khronos_intptr_t GLintptr; -typedef khronos_ssize_t GLsizeiptr; - -/* OpenGL ES core versions */ -#define GL_ES_VERSION_2_0 1 - -/* ClearBufferMask */ -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 - -/* Boolean */ -#define GL_FALSE 0 -#define GL_TRUE 1 - -/* BeginMode */ -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 - -/* AlphaFunction (not supported in ES20) */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* BlendingFactorDest */ -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 - -/* BlendingFactorSrc */ -/* GL_ZERO */ -/* GL_ONE */ -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -/* GL_SRC_ALPHA */ -/* GL_ONE_MINUS_SRC_ALPHA */ -/* GL_DST_ALPHA */ -/* GL_ONE_MINUS_DST_ALPHA */ - -/* BlendEquationSeparate */ -#define GL_FUNC_ADD 0x8006 -#define GL_BLEND_EQUATION 0x8009 -#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ -#define GL_BLEND_EQUATION_ALPHA 0x883D - -/* BlendSubtract */ -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B - -/* Separate Blend Functions */ -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 - -/* Buffer Objects */ -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - -#define GL_STREAM_DRAW 0x88E0 -#define GL_STATIC_DRAW 0x88E4 -#define GL_DYNAMIC_DRAW 0x88E8 - -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 - -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 - -/* CullFaceMode */ -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_FRONT_AND_BACK 0x0408 - -/* DepthFunction */ -/* GL_NEVER */ -/* GL_LESS */ -/* GL_EQUAL */ -/* GL_LEQUAL */ -/* GL_GREATER */ -/* GL_NOTEQUAL */ -/* GL_GEQUAL */ -/* GL_ALWAYS */ - -/* EnableCap */ -#define GL_TEXTURE_2D 0x0DE1 -#define GL_CULL_FACE 0x0B44 -#define GL_BLEND 0x0BE2 -#define GL_DITHER 0x0BD0 -#define GL_STENCIL_TEST 0x0B90 -#define GL_DEPTH_TEST 0x0B71 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_COVERAGE 0x80A0 - -/* ErrorCode */ -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 - -/* FrontFaceDirection */ -#define GL_CW 0x0900 -#define GL_CCW 0x0901 - -/* GetPName */ -#define GL_LINE_WIDTH 0x0B21 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -/* GL_SCISSOR_TEST */ -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -/* GL_POLYGON_OFFSET_FILL */ -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB - -/* GetTextureParameter */ -/* GL_TEXTURE_MAG_FILTER */ -/* GL_TEXTURE_MIN_FILTER */ -/* GL_TEXTURE_WRAP_S */ -/* GL_TEXTURE_WRAP_T */ - -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - -/* HintMode */ -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 - -/* HintTarget */ -#define GL_GENERATE_MIPMAP_HINT 0x8192 - -/* DataType */ -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_FIXED 0x140C - -/* PixelFormat */ -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A - -/* PixelType */ -/* GL_UNSIGNED_BYTE */ -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 - -/* Shaders */ -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_SHADER_TYPE 0x8B4F -#define GL_DELETE_STATUS 0x8B80 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D - -/* StencilFunction */ -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 - -/* StencilOp */ -/* GL_ZERO */ -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_INVERT 0x150A -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 - -/* StringName */ -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 - -/* TextureMagFilter */ -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 - -/* TextureMinFilter */ -/* GL_NEAREST */ -/* GL_LINEAR */ -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 - -/* TextureParameterName */ -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 - -/* TextureTarget */ -/* GL_TEXTURE_2D */ -#define GL_TEXTURE 0x1702 - -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - -/* TextureUnit */ -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 - -/* TextureWrapMode */ -#define GL_REPEAT 0x2901 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_MIRRORED_REPEAT 0x8370 - -/* Uniform Types */ -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_CUBE 0x8B60 - -/* Vertex Arrays */ -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - -/* Read Format */ -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - -/* Shader Source */ -#define GL_COMPILE_STATUS 0x8B81 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_SHADER_COMPILER 0x8DFA - -/* Shader Binary */ -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - -/* Shader Precision-Specified Types */ -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 - -/* Framebuffer Object. */ -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 - -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGB565 0x8D62 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 - -#define GL_NONE 0 - -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - -/*------------------------------------------------------------------------- - * GL core functions. - *-----------------------------------------------------------------------*/ - -GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); -GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); -GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); -GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); -GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); -GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); -GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); -GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); -GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); -GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); -GL_APICALL void GL_APIENTRY glClearStencil (GLint s); -GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); -GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); -GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); -GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); -GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); -GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); -GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); -GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); -GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); -GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); -GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); -GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); -GL_APICALL void GL_APIENTRY glDisable (GLenum cap); -GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); -GL_APICALL void GL_APIENTRY glEnable (GLenum cap); -GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); -GL_APICALL void GL_APIENTRY glFinish (void); -GL_APICALL void GL_APIENTRY glFlush (void); -GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); -GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); -GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); -GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); -GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); -GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); -GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); -GL_APICALL int GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); -GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL GLenum GL_APIENTRY glGetError (void); -GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); -GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); -GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); -GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); -GL_APICALL int GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); -GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); -GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); -GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); -GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); -GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); -GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); -GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); -GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); -GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); -GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); -GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); -GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); -GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); -GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); -GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); -GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); -GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); -GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); -GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); -GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); -GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); -GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); -GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); -GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); -GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); -GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); -GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); -GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); -GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); -GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2_h_ */ - - -#ifndef __gl2ext_h_ -#define __gl2ext_h_ - -/* $Revision: 19436 $ on $Date:: 2012-10-10 10:37:04 -0700 #$ */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * This document is licensed under the SGI Free Software B License Version - * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . - */ - -#ifndef GL_APIENTRYP -# define GL_APIENTRYP GL_APIENTRY* -#endif - -/*------------------------------------------------------------------------* - * OES extension tokens - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_ETC1_RGB8_OES 0x8D64 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_DEPTH_COMPONENT24_OES 0x81A6 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_DEPTH_COMPONENT32_OES 0x81A7 -#endif - -/* GL_OES_depth_texture */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -typedef void* GLeglImageOES; -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -/* GLeglImageOES defined in GL_OES_EGL_image already. */ -#define GL_TEXTURE_EXTERNAL_OES 0x8D65 -#define GL_SAMPLER_EXTERNAL_OES 0x8D66 -#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 -#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_UNSIGNED_INT 0x1405 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE -#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_WRITE_ONLY_OES 0x88B9 -#define GL_BUFFER_ACCESS_OES 0x88BB -#define GL_BUFFER_MAPPED_OES 0x88BC -#define GL_BUFFER_MAP_POINTER_OES 0x88BD -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_DEPTH_STENCIL_OES 0x84F9 -#define GL_UNSIGNED_INT_24_8_OES 0x84FA -#define GL_DEPTH24_STENCIL8_OES 0x88F0 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_ALPHA8_OES 0x803C -#define GL_DEPTH_COMPONENT16_OES 0x81A5 -/* reuse GL_DEPTH_COMPONENT24_OES */ -/* reuse GL_DEPTH24_STENCIL8_OES */ -/* reuse GL_DEPTH_COMPONENT32_OES */ -#define GL_LUMINANCE4_ALPHA4_OES 0x8043 -#define GL_LUMINANCE8_ALPHA8_OES 0x8045 -#define GL_LUMINANCE8_OES 0x8040 -#define GL_RGBA4_OES 0x8056 -#define GL_RGB5_A1_OES 0x8057 -#define GL_RGB565_OES 0x8D62 -/* reuse GL_RGB8_OES */ -/* reuse GL_RGBA8_OES */ -/* reuse GL_RGB10_EXT */ -/* reuse GL_RGB10_A2_EXT */ -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_RGB8_OES 0x8051 -#define GL_RGBA8_OES 0x8058 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_STENCIL_INDEX1_OES 0x8D46 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_STENCIL_INDEX4_OES 0x8D47 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_TEXTURE_BINDING_3D_OES 0x806A -#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 -#endif - -/* GL_OES_texture_float */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_HALF_FLOAT_OES 0x8D61 -#endif - -/* GL_OES_texture_half_float_linear */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_texture_npot */ -/* No new tokens introduced by this extension. */ - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 -#endif - -/* GL_OES_vertex_half_float */ -/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_INT_10_10_10_2_OES 0x8DF7 -#endif - -/*------------------------------------------------------------------------* - * KHR extension tokens - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -typedef void (GL_APIENTRYP GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam); -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -/* PROGRAM_PIPELINE only in GL */ -#define GL_SAMPLER 0x82E6 -/* DISPLAY_LIST only in GL */ -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD -#endif - -/*------------------------------------------------------------------------* - * AMD extension tokens - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_3DC_X_AMD 0x87F9 -#define GL_3DC_XY_AMD 0x87FA -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_ATC_RGB_AMD 0x8C92 -#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 -#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE -#endif - -/* GL_AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_Z400_BINARY_AMD 0x8740 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 -#endif - -/* GL_ANGLE_instanced_arrays */ -#ifndef GL_ANGLE_instanced_arrays -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 -#endif - -/* GL_ANGLE_translated_shader_source */ -#ifndef GL_ANGLE_translated_shader_source -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 -#endif - -/*------------------------------------------------------------------------* - * APPLE extension tokens - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -/* No new tokens introduced by this extension. */ - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 -#define GL_MAX_SAMPLES_APPLE 0x8D57 -#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_RGB_422_APPLE 0x8A1F -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync - -#ifndef __gl3_h_ -/* These types are defined with reference to - * in the Apple extension spec, but here we use the Khronos - * portable types in khrplatform.h, and assume those types - * are always defined. - * If any other extensions using these types are defined, - * the typedefs must move out of this block and be shared. - */ -typedef khronos_int64_t GLint64; -typedef khronos_uint64_t GLuint64; -typedef struct __GLsync *GLsync; -#endif - -#define GL_SYNC_OBJECT_APPLE 0x8A53 -#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 -#define GL_OBJECT_TYPE_APPLE 0x9112 -#define GL_SYNC_CONDITION_APPLE 0x9113 -#define GL_SYNC_STATUS_APPLE 0x9114 -#define GL_SYNC_FLAGS_APPLE 0x9115 -#define GL_SYNC_FENCE_APPLE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 -#define GL_UNSIGNALED_APPLE 0x9118 -#define GL_SIGNALED_APPLE 0x9119 -#define GL_ALREADY_SIGNALED_APPLE 0x911A -#define GL_TIMEOUT_EXPIRED_APPLE 0x911B -#define GL_CONDITION_SATISFIED_APPLE 0x911C -#define GL_WAIT_FAILED_APPLE 0x911D -#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 -#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D -#endif - -/*------------------------------------------------------------------------* - * ARM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_MALI_SHADER_BINARY_ARM 0x8F60 -#endif - -/* GL_ARM_rgba8 */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * EXT extension tokens - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_RGBA16F_EXT 0x881A -#define GL_RGB16F_EXT 0x881B -#define GL_RG16F_EXT 0x822F -#define GL_R16F_EXT 0x822D -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 -#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F -#define GL_PROGRAM_OBJECT_EXT 0x8B40 -#define GL_SHADER_OBJECT_EXT 0x8B48 -#define GL_BUFFER_OBJECT_EXT 0x9151 -#define GL_QUERY_OBJECT_EXT 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 -#endif - -/* GL_EXT_debug_marker */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_COLOR_EXT 0x1800 -#define GL_DEPTH_EXT 0x1801 -#define GL_STENCIL_EXT 0x1802 -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_MAP_READ_BIT_EXT 0x0001 -#define GL_MAP_WRITE_BIT_EXT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C -/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_COLOR_ATTACHMENT_EXT 0x90F0 -#define GL_MULTIVIEW_EXT 0x90F1 -#define GL_DRAW_BUFFER_EXT 0x0C01 -#define GL_READ_BUFFER_EXT 0x0C02 -#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 -#endif - -/* GL_EXT_multi_draw_arrays */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A -#define GL_CURRENT_QUERY_EXT 0x8865 -#define GL_QUERY_RESULT_EXT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_BGRA_EXT 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -/* reuse GL_NO_ERROR */ -#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 -#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 -#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 -#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 -#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 -#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF -#define GL_PROGRAM_SEPARABLE_EXT 0x8258 -#define GL_ACTIVE_PROGRAM_EXT 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 -#endif - -/* GL_EXT_shader_texture_lod */ -/* No new tokens introduced by this extension. */ - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C -#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D -#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E -#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_BGRA_EXT 0x80E1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_RED_EXT 0x1903 -#define GL_RG_EXT 0x8227 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F -#define GL_ALPHA8_EXT 0x803C -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_RGBA32F_EXT 0x8814 -#define GL_RGB32F_EXT 0x8815 -#define GL_ALPHA32F_EXT 0x8816 -#define GL_LUMINANCE32F_EXT 0x8818 -#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 -/* reuse GL_RGBA16F_EXT */ -/* reuse GL_RGB16F_EXT */ -#define GL_ALPHA16F_EXT 0x881C -#define GL_LUMINANCE16F_EXT 0x881E -#define GL_LUMINANCE_ALPHA16F_EXT 0x881F -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGB10_EXT 0x8052 -#define GL_BGRA8_EXT 0x93A1 -#define GL_R8_EXT 0x8229 -#define GL_RG8_EXT 0x822B -#define GL_R32F_EXT 0x822E -#define GL_RG32F_EXT 0x8230 -#define GL_R16F_EXT 0x822D -#define GL_RG16F_EXT 0x822F -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#endif - -/*------------------------------------------------------------------------* - * DMP extension tokens - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_SHADER_BINARY_DMP 0x9250 -#endif - -/*------------------------------------------------------------------------* - * FJ extension tokens - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GCCSO_SHADER_BINARY_FJ 0x9260 -#endif - -/*------------------------------------------------------------------------* - * IMG extension tokens - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_BGRA_IMG 0x80E1 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_SGX_BINARY_IMG 0x8C0A -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 -#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 -#define GL_MAX_SAMPLES_IMG 0x9135 -#define GL_TEXTURE_SAMPLES_IMG 0x9136 -#endif - -/*------------------------------------------------------------------------* - * NV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_COVERAGE_COMPONENT_NV 0x8ED0 -#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 -#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 -#define GL_COVERAGE_BUFFERS_NV 0x8ED3 -#define GL_COVERAGE_SAMPLES_NV 0x8ED4 -#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 -#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 -#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 -#define GL_COVERAGE_BUFFER_BIT_NV 0x8000 -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_MAX_DRAW_BUFFERS_NV 0x8824 -#define GL_DRAW_BUFFER0_NV 0x8825 -#define GL_DRAW_BUFFER1_NV 0x8826 -#define GL_DRAW_BUFFER2_NV 0x8827 -#define GL_DRAW_BUFFER3_NV 0x8828 -#define GL_DRAW_BUFFER4_NV 0x8829 -#define GL_DRAW_BUFFER5_NV 0x882A -#define GL_DRAW_BUFFER6_NV 0x882B -#define GL_DRAW_BUFFER7_NV 0x882C -#define GL_DRAW_BUFFER8_NV 0x882D -#define GL_DRAW_BUFFER9_NV 0x882E -#define GL_DRAW_BUFFER10_NV 0x882F -#define GL_DRAW_BUFFER11_NV 0x8830 -#define GL_DRAW_BUFFER12_NV 0x8831 -#define GL_DRAW_BUFFER13_NV 0x8832 -#define GL_DRAW_BUFFER14_NV 0x8833 -#define GL_DRAW_BUFFER15_NV 0x8834 -#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 -#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 -#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 -#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 -#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 -#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 -#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 -#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 -#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 -#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 -#define GL_COLOR_ATTACHMENT10_NV 0x8CEA -#define GL_COLOR_ATTACHMENT11_NV 0x8CEB -#define GL_COLOR_ATTACHMENT12_NV 0x8CEC -#define GL_COLOR_ATTACHMENT13_NV 0x8CED -#define GL_COLOR_ATTACHMENT14_NV 0x8CEE -#define GL_COLOR_ATTACHMENT15_NV 0x8CEF -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF -/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_READ_BUFFER_NV 0x0C02 -#endif - -/* GL_NV_read_buffer_front */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_depth_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_read_stencil */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_compression_s3tc_update */ -/* No new tokens introduced by this extension. */ - -/* GL_NV_texture_npot_2D_mipmap */ -/* No new tokens introduced by this extension. */ - -/*------------------------------------------------------------------------* - * QCOM extension tokens - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_ALPHA_TEST_QCOM 0x0BC0 -#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 -#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 -#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 -#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 -#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 -#endif - -/* GL_QCOM_driver_control */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 -#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 -#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 -#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 -#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 -#define GL_TEXTURE_TYPE_QCOM 0x8BD7 -#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 -#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 -#define GL_TEXTURE_TARGET_QCOM 0x8BDA -#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB -#define GL_STATE_RESTORE 0x8BDC -#endif - -/* GL_QCOM_extended_get2 */ -/* No new tokens introduced by this extension. */ - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_WRITEONLY_RENDERING_QCOM 0x8823 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 -#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 -#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 -#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 -#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 -#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 -#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 -#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 -#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 -#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 -#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 -#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 -#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 -#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 -#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 -#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 -#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 -#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 -#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 -#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 -#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 -#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 -#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 -#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 -#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 -#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 -#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 -#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 -#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 -#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 -#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 -#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_SHADER_BINARY_VIV 0x8FC4 -#endif - -/*------------------------------------------------------------------------* - * End of extension tokens, start of corresponding extension functions - *------------------------------------------------------------------------*/ - -/*------------------------------------------------------------------------* - * OES extension functions - *------------------------------------------------------------------------*/ - -/* GL_OES_compressed_ETC1_RGB8_texture */ -#ifndef GL_OES_compressed_ETC1_RGB8_texture -#define GL_OES_compressed_ETC1_RGB8_texture 1 -#endif - -/* GL_OES_compressed_paletted_texture */ -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 -#endif - -/* GL_OES_depth24 */ -#ifndef GL_OES_depth24 -#define GL_OES_depth24 1 -#endif - -/* GL_OES_depth32 */ -#ifndef GL_OES_depth32 -#define GL_OES_depth32 1 -#endif - -/* GL_OES_depth_texture */ -#ifndef GL_OES_depth_texture -#define GL_OES_depth_texture 1 -#endif - -/* GL_OES_EGL_image */ -#ifndef GL_OES_EGL_image -#define GL_OES_EGL_image 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); -GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); -#endif -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); -typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); -#endif - -/* GL_OES_EGL_image_external */ -#ifndef GL_OES_EGL_image_external -#define GL_OES_EGL_image_external 1 -/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ -#endif - -/* GL_OES_element_index_uint */ -#ifndef GL_OES_element_index_uint -#define GL_OES_element_index_uint 1 -#endif - -/* GL_OES_fbo_render_mipmap */ -#ifndef GL_OES_fbo_render_mipmap -#define GL_OES_fbo_render_mipmap 1 -#endif - -/* GL_OES_fragment_precision_high */ -#ifndef GL_OES_fragment_precision_high -#define GL_OES_fragment_precision_high 1 -#endif - -/* GL_OES_get_program_binary */ -#ifndef GL_OES_get_program_binary -#define GL_OES_get_program_binary 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif -typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); -typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); -#endif - -/* GL_OES_mapbuffer */ -#ifndef GL_OES_mapbuffer -#define GL_OES_mapbuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); -GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); -GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid** params); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); -typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid** params); -#endif - -/* GL_OES_packed_depth_stencil */ -#ifndef GL_OES_packed_depth_stencil -#define GL_OES_packed_depth_stencil 1 -#endif - -/* GL_OES_required_internalformat */ -#ifndef GL_OES_required_internalformat -#define GL_OES_required_internalformat 1 -#endif - -/* GL_OES_rgb8_rgba8 */ -#ifndef GL_OES_rgb8_rgba8 -#define GL_OES_rgb8_rgba8 1 -#endif - -/* GL_OES_standard_derivatives */ -#ifndef GL_OES_standard_derivatives -#define GL_OES_standard_derivatives 1 -#endif - -/* GL_OES_stencil1 */ -#ifndef GL_OES_stencil1 -#define GL_OES_stencil1 1 -#endif - -/* GL_OES_stencil4 */ -#ifndef GL_OES_stencil4 -#define GL_OES_stencil4 1 -#endif - -#ifndef GL_OES_surfaceless_context -#define GL_OES_surfaceless_context 1 -#endif - -/* GL_OES_texture_3D */ -#ifndef GL_OES_texture_3D -#define GL_OES_texture_3D 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif -typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); -typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOES) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -#endif - -/* GL_OES_texture_float */ -#ifndef GL_OES_texture_float -#define GL_OES_texture_float 1 -#endif - -/* GL_OES_texture_float_linear */ -#ifndef GL_OES_texture_float_linear -#define GL_OES_texture_float_linear 1 -#endif - -/* GL_OES_texture_half_float */ -#ifndef GL_OES_texture_half_float -#define GL_OES_texture_half_float 1 -#endif - -/* GL_OES_texture_half_float_linear */ -#ifndef GL_OES_texture_half_float_linear -#define GL_OES_texture_half_float_linear 1 -#endif - -/* GL_OES_texture_npot */ -#ifndef GL_OES_texture_npot -#define GL_OES_texture_npot 1 -#endif - -/* GL_OES_vertex_array_object */ -#ifndef GL_OES_vertex_array_object -#define GL_OES_vertex_array_object 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); -GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); -GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); -GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); -#endif -typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); -typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); -typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); -typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); -#endif - -/* GL_OES_vertex_half_float */ -#ifndef GL_OES_vertex_half_float -#define GL_OES_vertex_half_float 1 -#endif - -/* GL_OES_vertex_type_10_10_10_2 */ -#ifndef GL_OES_vertex_type_10_10_10_2 -#define GL_OES_vertex_type_10_10_10_2 1 -#endif - -/*------------------------------------------------------------------------* - * KHR extension functions - *------------------------------------------------------------------------*/ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -GL_APICALL void GL_APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -GL_APICALL void GL_APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); -GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -GL_APICALL void GL_APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); -GL_APICALL void GL_APIENTRY glPopDebugGroup (void); -GL_APICALL void GL_APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -GL_APICALL void GL_APIENTRY glGetPointerv (GLenum pname, void **params); -#endif -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); -typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); -typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); -typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); -typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); -#endif - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 -#endif - - -/*------------------------------------------------------------------------* - * AMD extension functions - *------------------------------------------------------------------------*/ - -/* GL_AMD_compressed_3DC_texture */ -#ifndef GL_AMD_compressed_3DC_texture -#define GL_AMD_compressed_3DC_texture 1 -#endif - -/* GL_AMD_compressed_ATC_texture */ -#ifndef GL_AMD_compressed_ATC_texture -#define GL_AMD_compressed_ATC_texture 1 -#endif - -/* AMD_performance_monitor */ -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); -GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); -GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); -typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); -typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); -#endif - -/* GL_AMD_program_binary_Z400 */ -#ifndef GL_AMD_program_binary_Z400 -#define GL_AMD_program_binary_Z400 1 -#endif - -/*------------------------------------------------------------------------* - * ANGLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_ANGLE_framebuffer_blit */ -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif -typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -#endif - -/* GL_ANGLE_framebuffer_multisample */ -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -#endif - -#ifndef GL_ANGLE_instanced_arrays -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); -#endif -typedef void (GL_APIENTRYP PFLGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GL_APIENTRYP PFLGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); -typedef void (GL_APIENTRYP PFLGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); -#endif - -/* GL_ANGLE_pack_reverse_row_order */ -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 -#endif - -/* GL_ANGLE_texture_compression_dxt3 */ -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 -#endif - -/* GL_ANGLE_texture_compression_dxt5 */ -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 -#endif - -/* GL_ANGLE_texture_usage */ -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 -#endif - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif -typedef void (GL_APIENTRYP PFLGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); -#endif - -/*------------------------------------------------------------------------* - * APPLE extension functions - *------------------------------------------------------------------------*/ - -/* GL_APPLE_copy_texture_levels */ -#ifndef GL_APPLE_copy_texture_levels -#define GL_APPLE_copy_texture_levels 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif -typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); -#endif - -/* GL_APPLE_framebuffer_multisample */ -#ifndef GL_APPLE_framebuffer_multisample -#define GL_APPLE_framebuffer_multisample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); -#endif - -/* GL_APPLE_rgb_422 */ -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 -#endif - -/* GL_APPLE_sync */ -#ifndef GL_APPLE_sync -#define GL_APPLE_sync 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); -GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); -GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); -GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); -GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); -GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif -typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); -typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); -typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); -typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); -typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); -typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); -#endif - -/* GL_APPLE_texture_format_BGRA8888 */ -#ifndef GL_APPLE_texture_format_BGRA8888 -#define GL_APPLE_texture_format_BGRA8888 1 -#endif - -/* GL_APPLE_texture_max_level */ -#ifndef GL_APPLE_texture_max_level -#define GL_APPLE_texture_max_level 1 -#endif - -/*------------------------------------------------------------------------* - * ARM extension functions - *------------------------------------------------------------------------*/ - -/* GL_ARM_mali_program_binary */ -#ifndef GL_ARM_mali_program_binary -#define GL_ARM_mali_program_binary 1 -#endif - -/* GL_ARM_mali_shader_binary */ -#ifndef GL_ARM_mali_shader_binary -#define GL_ARM_mali_shader_binary 1 -#endif - -/* GL_ARM_rgba8 */ -#ifndef GL_ARM_rgba8 -#define GL_ARM_rgba8 1 -#endif - -/*------------------------------------------------------------------------* - * EXT extension functions - *------------------------------------------------------------------------*/ - -/* GL_EXT_blend_minmax */ -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#endif - -/* GL_EXT_color_buffer_half_float */ -#ifndef GL_EXT_color_buffer_half_float -#define GL_EXT_color_buffer_half_float 1 -#endif - -/* GL_EXT_debug_label */ -#ifndef GL_EXT_debug_label -#define GL_EXT_debug_label 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); -GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif -typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); -typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); -#endif - -/* GL_EXT_debug_marker */ -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); -GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); -#endif -typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); -typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); -#endif - -/* GL_EXT_discard_framebuffer */ -#ifndef GL_EXT_discard_framebuffer -#define GL_EXT_discard_framebuffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif -typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); -#endif - -/* GL_EXT_map_buffer_range */ -#ifndef GL_EXT_map_buffer_range -#define GL_EXT_map_buffer_range 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); -#endif -typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -#endif - -/* GL_EXT_multisampled_render_to_texture */ -#ifndef GL_EXT_multisampled_render_to_texture -#define GL_EXT_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/* GL_EXT_multiview_draw_buffers */ -#ifndef GL_EXT_multiview_draw_buffers -#define GL_EXT_multiview_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); -GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); -GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); -typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); -#endif - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei); -GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei); -#endif /* GL_GLEXT_PROTOTYPES */ -typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount); -typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount); -#endif - -/* GL_EXT_occlusion_query_boolean */ -#ifndef GL_EXT_occlusion_query_boolean -#define GL_EXT_occlusion_query_boolean 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); -GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); -GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); -GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); -GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); -GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); -#endif -typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); -typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); -typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); -typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); -typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); -typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); -#endif - -/* GL_EXT_read_format_bgra */ -#ifndef GL_EXT_read_format_bgra -#define GL_EXT_read_format_bgra 1 -#endif - -/* GL_EXT_robustness */ -#ifndef GL_EXT_robustness -#define GL_EXT_robustness 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); -GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, float *params); -GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif -typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); -typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, float *params); -typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); -#endif - -/* GL_EXT_separate_shader_objects */ -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); -GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); -GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); -GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); -GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); -GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); -GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); -GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); -GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); -GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); -GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); -GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); -GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); -GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif -typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); -typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); -typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); -typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); -typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); -typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -#endif - -/* GL_EXT_shader_framebuffer_fetch */ -#ifndef GL_EXT_shader_framebuffer_fetch -#define GL_EXT_shader_framebuffer_fetch 1 -#endif - -/* GL_EXT_shader_texture_lod */ -#ifndef GL_EXT_shader_texture_lod -#define GL_EXT_shader_texture_lod 1 -#endif - -/* GL_EXT_shadow_samplers */ -#ifndef GL_EXT_shadow_samplers -#define GL_EXT_shadow_samplers 1 -#endif - -/* GL_EXT_sRGB */ -#ifndef GL_EXT_sRGB -#define GL_EXT_sRGB 1 -#endif - -/* GL_EXT_texture_compression_dxt1 */ -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 -#endif - -/* GL_EXT_texture_filter_anisotropic */ -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 -#endif - -/* GL_EXT_texture_format_BGRA8888 */ -#ifndef GL_EXT_texture_format_BGRA8888 -#define GL_EXT_texture_format_BGRA8888 1 -#endif - -/* GL_EXT_texture_rg */ -#ifndef GL_EXT_texture_rg -#define GL_EXT_texture_rg 1 -#endif - -/* GL_EXT_texture_storage */ -#ifndef GL_EXT_texture_storage -#define GL_EXT_texture_storage 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -#endif - -/* GL_EXT_texture_type_2_10_10_10_REV */ -#ifndef GL_EXT_texture_type_2_10_10_10_REV -#define GL_EXT_texture_type_2_10_10_10_REV 1 -#endif - -/* GL_EXT_unpack_subimage */ -#ifndef GL_EXT_unpack_subimage -#define GL_EXT_unpack_subimage 1 -#endif - -/*------------------------------------------------------------------------* - * DMP extension functions - *------------------------------------------------------------------------*/ - -/* GL_DMP_shader_binary */ -#ifndef GL_DMP_shader_binary -#define GL_DMP_shader_binary 1 -#endif - -/*------------------------------------------------------------------------* - * FJ extension functions - *------------------------------------------------------------------------*/ - -/* GL_FJ_shader_binary_GCCSO */ -#ifndef GL_FJ_shader_binary_GCCSO -#define GL_FJ_shader_binary_GCCSO 1 -#endif - -/*------------------------------------------------------------------------* - * IMG extension functions - *------------------------------------------------------------------------*/ - -/* GL_IMG_program_binary */ -#ifndef GL_IMG_program_binary -#define GL_IMG_program_binary 1 -#endif - -/* GL_IMG_read_format */ -#ifndef GL_IMG_read_format -#define GL_IMG_read_format 1 -#endif - -/* GL_IMG_shader_binary */ -#ifndef GL_IMG_shader_binary -#define GL_IMG_shader_binary 1 -#endif - -/* GL_IMG_texture_compression_pvrtc */ -#ifndef GL_IMG_texture_compression_pvrtc -#define GL_IMG_texture_compression_pvrtc 1 -#endif - -/* GL_IMG_multisampled_render_to_texture */ -#ifndef GL_IMG_multisampled_render_to_texture -#define GL_IMG_multisampled_render_to_texture 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum, GLsizei, GLenum, GLsizei, GLsizei); -GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum, GLenum, GLenum, GLuint, GLint, GLsizei); -#endif -typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); -#endif - -/*------------------------------------------------------------------------* - * NV extension functions - *------------------------------------------------------------------------*/ - -/* GL_NV_coverage_sample */ -#ifndef GL_NV_coverage_sample -#define GL_NV_coverage_sample 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); -GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); -#endif -typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); -typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); -#endif - -/* GL_NV_depth_nonlinear */ -#ifndef GL_NV_depth_nonlinear -#define GL_NV_depth_nonlinear 1 -#endif - -/* GL_NV_draw_buffers */ -#ifndef GL_NV_draw_buffers -#define GL_NV_draw_buffers 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); -#endif -typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); -#endif - -/* GL_NV_fbo_color_attachments */ -#ifndef GL_NV_fbo_color_attachments -#define GL_NV_fbo_color_attachments 1 -#endif - -/* GL_NV_fence */ -#ifndef GL_NV_fence -#define GL_NV_fence 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei, const GLuint *); -GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei, GLuint *); -GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint); -GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *); -GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint); -GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint, GLenum); -#endif -typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); -typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); -typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); -typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -#endif - -/* GL_NV_read_buffer */ -#ifndef GL_NV_read_buffer -#define GL_NV_read_buffer 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); -#endif -typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); -#endif - -/* GL_NV_read_buffer_front */ -#ifndef GL_NV_read_buffer_front -#define GL_NV_read_buffer_front 1 -#endif - -/* GL_NV_read_depth */ -#ifndef GL_NV_read_depth -#define GL_NV_read_depth 1 -#endif - -/* GL_NV_read_depth_stencil */ -#ifndef GL_NV_read_depth_stencil -#define GL_NV_read_depth_stencil 1 -#endif - -/* GL_NV_read_stencil */ -#ifndef GL_NV_read_stencil -#define GL_NV_read_stencil 1 -#endif - -/* GL_NV_texture_compression_s3tc_update */ -#ifndef GL_NV_texture_compression_s3tc_update -#define GL_NV_texture_compression_s3tc_update 1 -#endif - -/* GL_NV_texture_npot_2D_mipmap */ -#ifndef GL_NV_texture_npot_2D_mipmap -#define GL_NV_texture_npot_2D_mipmap 1 -#endif - -/*------------------------------------------------------------------------* - * QCOM extension functions - *------------------------------------------------------------------------*/ - -/* GL_QCOM_alpha_test */ -#ifndef GL_QCOM_alpha_test -#define GL_QCOM_alpha_test 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); -#endif -typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); -#endif - -/* GL_QCOM_binning_control */ -#ifndef GL_QCOM_binning_control -#define GL_QCOM_binning_control 1 -#endif - -/* GL_QCOM_driver_control */ -#ifndef GL_QCOM_driver_control -#define GL_QCOM_driver_control 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); -GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); -GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); -#endif -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); -typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); -typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); -#endif - -/* GL_QCOM_extended_get */ -#ifndef GL_QCOM_extended_get -#define GL_QCOM_extended_get 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); -GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); -GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); -typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); -typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); -#endif - -/* GL_QCOM_extended_get2 */ -#ifndef GL_QCOM_extended_get2 -#define GL_QCOM_extended_get2 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); -GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); -GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif -typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); -typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); -typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); -#endif - -/* GL_QCOM_perfmon_global_mode */ -#ifndef GL_QCOM_perfmon_global_mode -#define GL_QCOM_perfmon_global_mode 1 -#endif - -/* GL_QCOM_writeonly_rendering */ -#ifndef GL_QCOM_writeonly_rendering -#define GL_QCOM_writeonly_rendering 1 -#endif - -/* GL_QCOM_tiled_rendering */ -#ifndef GL_QCOM_tiled_rendering -#define GL_QCOM_tiled_rendering 1 -#ifdef GL_GLEXT_PROTOTYPES -GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); -#endif -typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); -typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); -#endif - -/*------------------------------------------------------------------------* - * VIV extension tokens - *------------------------------------------------------------------------*/ - -/* GL_VIV_shader_binary */ -#ifndef GL_VIV_shader_binary -#define GL_VIV_shader_binary 1 -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* __gl2ext_h_ */ +#include "SDL_opengles2_khrplatform.h" +#include "SDL_opengles2_gl2platform.h" +#include "SDL_opengles2_gl2.h" +#include "SDL_opengles2_gl2ext.h" #endif /* _MSC_VER */ diff --git a/Engine/lib/sdl/include/SDL_opengles2_gl2.h b/Engine/lib/sdl/include/SDL_opengles2_gl2.h new file mode 100644 index 0000000000..c62fb0a547 --- /dev/null +++ b/Engine/lib/sdl/include/SDL_opengles2_gl2.h @@ -0,0 +1,621 @@ +#ifndef __gl2_h_ +#define __gl2_h_ + +/* $Revision: 20555 $ on $Date:: 2013-02-12 14:32:47 -0800 #$ */ + +/*#include */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/*------------------------------------------------------------------------- + * Data type definitions + *-----------------------------------------------------------------------*/ + +typedef void GLvoid; +typedef char GLchar; +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef khronos_int8_t GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef khronos_float_t GLfloat; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; + +/* GL types for handling large vertex buffer objects */ +typedef khronos_intptr_t GLintptr; +typedef khronos_ssize_t GLsizeiptr; + +/* OpenGL ES core versions */ +#define GL_ES_VERSION_2_0 1 + +/* ClearBufferMask */ +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 + +/* Boolean */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* BeginMode */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 + +/* AlphaFunction (not supported in ES20) */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* BlendingFactorDest */ +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 + +/* BlendingFactorSrc */ +/* GL_ZERO */ +/* GL_ONE */ +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +/* GL_SRC_ALPHA */ +/* GL_ONE_MINUS_SRC_ALPHA */ +/* GL_DST_ALPHA */ +/* GL_ONE_MINUS_DST_ALPHA */ + +/* BlendEquationSeparate */ +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 /* same as BLEND_EQUATION */ +#define GL_BLEND_EQUATION_ALPHA 0x883D + +/* BlendSubtract */ +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B + +/* Separate Blend Functions */ +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 + +/* Buffer Objects */ +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 + +#define GL_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 + +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 + +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 + +/* CullFaceMode */ +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 + +/* DepthFunction */ +/* GL_NEVER */ +/* GL_LESS */ +/* GL_EQUAL */ +/* GL_LEQUAL */ +/* GL_GREATER */ +/* GL_NOTEQUAL */ +/* GL_GEQUAL */ +/* GL_ALWAYS */ + +/* EnableCap */ +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 + +/* ErrorCode */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 + +/* FrontFaceDirection */ +#define GL_CW 0x0900 +#define GL_CCW 0x0901 + +/* GetPName */ +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +/* GL_SCISSOR_TEST */ +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +/* GL_POLYGON_OFFSET_FILL */ +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB + +/* GetTextureParameter */ +/* GL_TEXTURE_MAG_FILTER */ +/* GL_TEXTURE_MIN_FILTER */ +/* GL_TEXTURE_WRAP_S */ +/* GL_TEXTURE_WRAP_T */ + +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 + +/* HintMode */ +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* HintTarget */ +#define GL_GENERATE_MIPMAP_HINT 0x8192 + +/* DataType */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C + +/* PixelFormat */ +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A + +/* PixelType */ +/* GL_UNSIGNED_BYTE */ +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 + +/* Shaders */ +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D + +/* StencilFunction */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 + +/* StencilOp */ +/* GL_ZERO */ +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 + +/* StringName */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* TextureMagFilter */ +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 + +/* TextureMinFilter */ +/* GL_NEAREST */ +/* GL_LINEAR */ +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 + +/* TextureParameterName */ +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 + +/* TextureTarget */ +/* GL_TEXTURE_2D */ +#define GL_TEXTURE 0x1702 + +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C + +/* TextureUnit */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 + +/* TextureWrapMode */ +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 + +/* Uniform Types */ +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 + +/* Vertex Arrays */ +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F + +/* Read Format */ +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B + +/* Shader Source */ +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA + +/* Shader Binary */ +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 + +/* Shader Precision-Specified Types */ +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 + +/* Framebuffer Object. */ +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 + +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 + +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 + +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 + +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 + +#define GL_NONE 0 + +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD + +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 + +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 + +/*------------------------------------------------------------------------- + * GL core functions. + *-----------------------------------------------------------------------*/ + +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar* name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glBlendEquation ( GLenum mode ); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLclampf depth); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint* buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint* textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLclampf zNear, GLclampf zFar); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint* buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint* framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint* renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint* textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean* params); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); +GL_APICALL const GLubyte* GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint* params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar* name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint* params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, GLvoid** pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLclampf value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei n, const GLuint* shaders, GLenum binaryformat, const GLvoid* binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar* const* string, const GLint* length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat* params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint* params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint x); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint indx, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint indx, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint indx, const GLfloat* values); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* ptr); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2_h_ */ + diff --git a/Engine/lib/sdl/include/SDL_opengles2_gl2ext.h b/Engine/lib/sdl/include/SDL_opengles2_gl2ext.h new file mode 100644 index 0000000000..e8ca8b13f1 --- /dev/null +++ b/Engine/lib/sdl/include/SDL_opengles2_gl2ext.h @@ -0,0 +1,2050 @@ +#ifndef __gl2ext_h_ +#define __gl2ext_h_ + +/* $Revision: 22801 $ on $Date:: 2013-08-21 03:20:48 -0700 #$ */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +#ifndef GL_APIENTRYP +# define GL_APIENTRYP GL_APIENTRY* +#endif + +/* New types shared by several extensions */ + +#ifndef __gl3_h_ +/* These are defined with respect to in the + * Apple extension spec, but they are also used by non-APPLE + * extensions, and in the Khronos header we use the Khronos + * portable types in khrplatform.h, which must be defined. + */ +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef struct __GLsync *GLsync; +#endif + + +/*------------------------------------------------------------------------* + * OES extension tokens + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_ETC1_RGB8_OES 0x8D64 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif + +/* GL_OES_depth_texture */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +typedef void* GLeglImageOES; +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +/* GLeglImageOES defined in GL_OES_EGL_image already. */ +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_UNSIGNED_INT 0x1405 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +/* reuse GL_DEPTH_COMPONENT24_OES */ +/* reuse GL_DEPTH24_STENCIL8_OES */ +/* reuse GL_DEPTH_COMPONENT32_OES */ +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +/* reuse GL_RGB8_OES */ +/* reuse GL_RGBA8_OES */ +/* reuse GL_RGB10_EXT */ +/* reuse GL_RGB10_A2_EXT */ +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#endif + +/* GL_OES_texture_float */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_HALF_FLOAT_OES 0x8D61 +#endif + +/* GL_OES_texture_half_float_linear */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_texture_npot */ +/* No new tokens introduced by this extension. */ + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#endif + +/* GL_OES_vertex_half_float */ +/* GL_HALF_FLOAT_OES defined in GL_OES_texture_half_float already. */ + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif + +/*------------------------------------------------------------------------* + * KHR extension tokens + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +typedef void (GL_APIENTRYP GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY_KHR 0x82E3 +/* PROGRAM_PIPELINE only in GL */ +#define GL_SAMPLER_KHR 0x82E6 +/* DISPLAY_LIST only in GL */ +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif + +/*------------------------------------------------------------------------* + * AMD extension tokens + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif + +/* GL_AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_Z400_BINARY_AMD 0x8740 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_UNSIGNED_INT 0x1405 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#endif + +/* GL_ANGLE_instanced_arrays */ +#ifndef GL_ANGLE_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif + +/* GL_ANGLE_translated_shader_source */ +#ifndef GL_ANGLE_translated_shader_source +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#endif + +/*------------------------------------------------------------------------* + * APPLE extension tokens + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +/* No new tokens introduced by this extension. */ + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync + +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif + +/*------------------------------------------------------------------------* + * ARM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif + +/* GL_ARM_rgba8 */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * EXT extension tokens + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#endif + +/* GL_EXT_debug_marker */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#endif + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#endif + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +/* reuse values from GL_EXT_framebuffer_multisample (desktop extension) */ +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#endif + +/* GL_EXT_multi_draw_arrays */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_BGRA_EXT 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +/* reuse GL_NO_ERROR */ +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif + +/* GL_EXT_shader_texture_lod */ +/* No new tokens introduced by this extension. */ + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif + +/* GL_EXT_sRGB_write_control */ +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_BGRA_EXT 0x80E1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif + +/* GL_EXT_texture_sRGB_decode */ +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +/* reuse GL_RGBA16F_EXT */ +/* reuse GL_RGB16F_EXT */ +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGB10_EXT 0x8052 +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif + +/*------------------------------------------------------------------------* + * DMP extension tokens + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_SHADER_BINARY_DMP 0x9250 +#endif + +/*------------------------------------------------------------------------* + * FJ extension tokens + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif + +/*------------------------------------------------------------------------* + * IMG extension tokens + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_SGX_BINARY_IMG 0x8C0A +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#endif + +/*------------------------------------------------------------------------* + * NV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#endif + +/* GL_NV_draw_instanced */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +/* GL_COLOR_ATTACHMENT{0-15}_NV defined in GL_NV_draw_buffers already. */ +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +#endif + +/* GL_NV_generate_mipmap_sRGB */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_READ_BUFFER_NV 0x0C02 +#endif + +/* GL_NV_read_buffer_front */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_depth_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_read_stencil */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif + +/* GL_NV_texture_compression_s3tc_update */ +/* No new tokens introduced by this extension. */ + +/* GL_NV_texture_npot_2D_mipmap */ +/* No new tokens introduced by this extension. */ + +/*------------------------------------------------------------------------* + * QCOM extension tokens + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#endif + +/* GL_QCOM_driver_control */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#endif + +/* GL_QCOM_extended_get2 */ +/* No new tokens introduced by this extension. */ + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif + +/*------------------------------------------------------------------------* + * End of extension tokens, start of corresponding extension functions + *------------------------------------------------------------------------*/ + +/*------------------------------------------------------------------------* + * OES extension functions + *------------------------------------------------------------------------*/ + +/* GL_OES_compressed_ETC1_RGB8_texture */ +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#endif + +/* GL_OES_compressed_paletted_texture */ +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#endif + +/* GL_OES_depth24 */ +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#endif + +/* GL_OES_depth32 */ +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#endif + +/* GL_OES_depth_texture */ +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif + +/* GL_OES_EGL_image */ +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#endif + +/* GL_OES_EGL_image_external */ +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +/* glEGLImageTargetTexture2DOES defined in GL_OES_EGL_image already. */ +#endif + +/* GL_OES_element_index_uint */ +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif + +/* GL_OES_fbo_render_mipmap */ +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif + +/* GL_OES_fragment_precision_high */ +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif + +/* GL_OES_get_program_binary */ +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, GLvoid *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLint length); +#endif + +/* GL_OES_mapbuffer */ +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, GLvoid **params); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, GLvoid **params); +#endif + +/* GL_OES_packed_depth_stencil */ +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#endif + +/* GL_OES_required_internalformat */ +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#endif + +/* GL_OES_rgb8_rgba8 */ +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif + +/* GL_OES_standard_derivatives */ +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#endif + +/* GL_OES_stencil1 */ +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#endif + +/* GL_OES_stencil4 */ +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#endif + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#endif + +/* GL_OES_texture_3D */ +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif + +/* GL_OES_texture_float */ +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif + +/* GL_OES_texture_float_linear */ +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif + +/* GL_OES_texture_half_float */ +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#endif + +/* GL_OES_texture_half_float_linear */ +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif + +/* GL_OES_texture_npot */ +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif + +/* GL_OES_vertex_array_object */ +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#endif + +/* GL_OES_vertex_half_float */ +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif + +/* GL_OES_vertex_type_10_10_10_2 */ +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#endif + +/*------------------------------------------------------------------------* + * KHR extension functions + *------------------------------------------------------------------------*/ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufsize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, GLvoid **params); +#endif + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif + + +/*------------------------------------------------------------------------* + * AMD extension functions + *------------------------------------------------------------------------*/ + +/* GL_AMD_compressed_3DC_texture */ +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#endif + +/* GL_AMD_compressed_ATC_texture */ +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#endif + +/* AMD_performance_monitor */ +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *countersList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif + +/* GL_AMD_program_binary_Z400 */ +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#endif + +/*------------------------------------------------------------------------* + * ANGLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_ANGLE_depth_texture */ +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif + +/* GL_ANGLE_framebuffer_blit */ +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_ANGLE_framebuffer_multisample */ +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_ANGLE_pack_reverse_row_order */ +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#endif + +/* GL_ANGLE_program_binary */ +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#endif + +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#endif + +/* GL_ANGLE_texture_usage */ +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#endif + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei *length, GLchar *source); +#endif + +/*------------------------------------------------------------------------* + * APPLE extension functions + *------------------------------------------------------------------------*/ + +/* GL_APPLE_copy_texture_levels */ +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif + +/* GL_APPLE_framebuffer_multisample */ +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#endif + +/* GL_APPLE_rgb_422 */ +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#endif + +/* GL_APPLE_sync */ +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); +#endif + +/* GL_APPLE_texture_format_BGRA8888 */ +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#endif + +/* GL_APPLE_texture_max_level */ +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#endif + +/*------------------------------------------------------------------------* + * ARM extension functions + *------------------------------------------------------------------------*/ + +/* GL_ARM_mali_program_binary */ +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#endif + +/* GL_ARM_mali_shader_binary */ +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#endif + +/* GL_ARM_rgba8 */ +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif + +/*------------------------------------------------------------------------* + * EXT extension functions + *------------------------------------------------------------------------*/ + +/* GL_EXT_blend_minmax */ +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#endif + +/* GL_EXT_color_buffer_half_float */ +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#endif + +/* GL_EXT_debug_label */ +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif + +/* GL_EXT_debug_marker */ +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#endif + +/* GL_EXT_discard_framebuffer */ +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#endif /* GL_EXT_draw_buffers */ + +/* GL_EXT_map_buffer_range */ +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void* GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +typedef void* (GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#endif + +/* GL_EXT_multisampled_render_to_texture */ +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/* GL_EXT_multiview_draw_buffers */ +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#endif + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei primcount); +#endif + +/* GL_EXT_occlusion_query_boolean */ +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +/* All entry points also exist in GL_EXT_disjoint_timer_query */ +#endif + +/* GL_EXT_read_format_bgra */ +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#endif + +/* GL_EXT_robustness */ +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, GLvoid *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif + +/* GL_EXT_separate_shader_objects */ +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint x); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint x, GLint y); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat x); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint x, GLint y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +#endif + +/* GL_EXT_shader_framebuffer_fetch */ +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#endif + +/* GL_EXT_shader_texture_lod */ +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif + +/* GL_EXT_shadow_samplers */ +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#endif + +/* GL_EXT_sRGB */ +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#endif + +/* GL_EXT_texture_compression_dxt1 */ +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#endif + +/* GL_EXT_texture_filter_anisotropic */ +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#endif + +/* GL_EXT_texture_format_BGRA8888 */ +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif + +/* GL_EXT_texture_rg */ +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#endif + +/* GL_EXT_texture_storage */ +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif + +/* GL_EXT_texture_type_2_10_10_10_REV */ +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#endif + +/* GL_EXT_unpack_subimage */ +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#endif + +/*------------------------------------------------------------------------* + * DMP extension functions + *------------------------------------------------------------------------*/ + +/* GL_DMP_shader_binary */ +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#endif + +/*------------------------------------------------------------------------* + * FJ extension functions + *------------------------------------------------------------------------*/ + +/* GL_FJ_shader_binary_GCCSO */ +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#endif + +/*------------------------------------------------------------------------* + * IMG extension functions + *------------------------------------------------------------------------*/ + +/* GL_IMG_program_binary */ +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#endif + +/* GL_IMG_read_format */ +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#endif + +/* GL_IMG_shader_binary */ +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#endif + +/* GL_IMG_texture_compression_pvrtc */ +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#endif + +/* GL_IMG_texture_compression_pvrtc2 */ +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#endif + +/* GL_IMG_multisampled_render_to_texture */ +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif + +/*------------------------------------------------------------------------* + * NV extension functions + *------------------------------------------------------------------------*/ + +/* GL_NV_coverage_sample */ +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#endif + +/* GL_NV_depth_nonlinear */ +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#endif + +/* GL_NV_draw_buffers */ +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#endif + +/* GL_NV_draw_instanced */ +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); +#endif + +/* GL_NV_fbo_color_attachments */ +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#endif + +/* GL_NV_fence */ +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#endif + +/* GL_NV_framebuffer_blit */ +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif + +/* GL_NV_framebuffer_multisample */ +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) ( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif + +/* GL_NV_generate_mipmap_sRGB */ +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif + +/* GL_NV_instanced_arrays */ +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#endif + +/* GL_NV_read_buffer */ +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#endif + +/* GL_NV_read_buffer_front */ +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif + +/* GL_NV_read_depth */ +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif + +/* GL_NV_read_depth_stencil */ +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif + +/* GL_NV_read_stencil */ +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif + +/* GL_NV_shadow_samplers_array */ +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#endif + +/* GL_NV_shadow_samplers_cube */ +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#endif + +/* GL_NV_sRGB_formats */ +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#endif + +/* GL_NV_texture_border_clamp */ +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#endif + +/* GL_NV_texture_compression_s3tc_update */ +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif + +/* GL_NV_texture_npot_2D_mipmap */ +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif + +/*------------------------------------------------------------------------* + * QCOM extension functions + *------------------------------------------------------------------------*/ + +/* GL_QCOM_alpha_test */ +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#endif + +/* GL_QCOM_binning_control */ +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#endif + +/* GL_QCOM_driver_control */ +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#endif + +/* GL_QCOM_extended_get */ +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, GLvoid **params); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLvoid *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, GLvoid **params); +#endif + +/* GL_QCOM_extended_get2 */ +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif + +/* GL_QCOM_perfmon_global_mode */ +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#endif + +/* GL_QCOM_writeonly_rendering */ +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#endif + +/* GL_QCOM_tiled_rendering */ +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#endif + +/*------------------------------------------------------------------------* + * VIV extension tokens + *------------------------------------------------------------------------*/ + +/* GL_VIV_shader_binary */ +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __gl2ext_h_ */ diff --git a/Engine/lib/sdl/include/SDL_opengles2_gl2platform.h b/Engine/lib/sdl/include/SDL_opengles2_gl2platform.h new file mode 100644 index 0000000000..c325686f01 --- /dev/null +++ b/Engine/lib/sdl/include/SDL_opengles2_gl2platform.h @@ -0,0 +1,30 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* $Revision: 10602 $ on $Date:: 2010-03-04 22:35:34 -0800 #$ */ + +/* + * This document is licensed under the SGI Free Software B License Version + * 2.0. For details, see http://oss.sgi.com/projects/FreeB/ . + */ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all modifications to the Khronos group so that + * they can be included in future versions of this file. Please submit changes + * by sending them to the public Khronos Bugzilla (http://khronos.org/bugzilla) + * by filing a bug against product "OpenGL-ES" component "Registry". + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/Engine/lib/sdl/include/SDL_opengles2_khrplatform.h b/Engine/lib/sdl/include/SDL_opengles2_khrplatform.h new file mode 100644 index 0000000000..c9e6f17d34 --- /dev/null +++ b/Engine/lib/sdl/include/SDL_opengles2_khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/Engine/lib/sdl/include/SDL_pixels.h b/Engine/lib/sdl/include/SDL_pixels.h index 3131af7b74..8499c32896 100644 --- a/Engine/lib/sdl/include/SDL_pixels.h +++ b/Engine/lib/sdl/include/SDL_pixels.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -86,6 +86,8 @@ enum }; /** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ enum { SDL_ARRAYORDER_NONE, @@ -134,12 +136,31 @@ enum (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) -#define SDL_ISPIXELFORMAT_ALPHA(format) \ +#define SDL_ISPIXELFORMAT_PACKED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ - (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) /* The flag is set to 1 because 0x1? is not in the printable ASCII range */ #define SDL_ISPIXELFORMAT_FOURCC(format) \ @@ -248,7 +269,11 @@ enum SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ - SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U') + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1') }; typedef struct SDL_Color diff --git a/Engine/lib/sdl/include/SDL_platform.h b/Engine/lib/sdl/include/SDL_platform.h index c43f4b54a0..c6c21398b2 100644 --- a/Engine/lib/sdl/include/SDL_platform.h +++ b/Engine/lib/sdl/include/SDL_platform.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,7 +56,7 @@ #undef __IRIX__ #define __IRIX__ 1 #endif -#if defined(linux) || defined(__linux) || defined(__linux__) +#if (defined(linux) || defined(__linux) || defined(__linux__)) #undef __LINUX__ #define __LINUX__ 1 #endif @@ -109,15 +109,15 @@ #undef __RISCOS__ #define __RISCOS__ 1 #endif -#if defined(__SVR4) +#if defined(__sun) && defined(__SVR4) #undef __SOLARIS__ #define __SOLARIS__ 1 #endif -#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) /* Try to find out if we're compiling for WinRT or non-WinRT */ /* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */ -#if defined(__MINGW32__) || (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ +#if (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ #include #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #undef __WINDOWS__ @@ -142,6 +142,23 @@ #define __PSP__ 1 #endif +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + + #include "begin_code.h" /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus diff --git a/Engine/lib/sdl/include/SDL_power.h b/Engine/lib/sdl/include/SDL_power.h index cf71c98249..24c0501149 100644 --- a/Engine/lib/sdl/include/SDL_power.h +++ b/Engine/lib/sdl/include/SDL_power.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_quit.h b/Engine/lib/sdl/include/SDL_quit.h index 8a786445d1..cc06f28d89 100644 --- a/Engine/lib/sdl/include/SDL_quit.h +++ b/Engine/lib/sdl/include/SDL_quit.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_rect.h b/Engine/lib/sdl/include/SDL_rect.h index 0a95a33449..bbcb9a3b8a 100644 --- a/Engine/lib/sdl/include/SDL_rect.h +++ b/Engine/lib/sdl/include/SDL_rect.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,6 +43,7 @@ extern "C" { * \brief The structure that defines a point * * \sa SDL_EnclosePoints + * \sa SDL_PointInRect */ typedef struct SDL_Point { @@ -66,6 +67,15 @@ typedef struct SDL_Rect int w, h; } SDL_Rect; +/** + * \brief Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + /** * \brief Returns true if the rectangle has no area. */ diff --git a/Engine/lib/sdl/include/SDL_render.h b/Engine/lib/sdl/include/SDL_render.h index 77f706a9b2..e4ed2af693 100644 --- a/Engine/lib/sdl/include/SDL_render.h +++ b/Engine/lib/sdl/include/SDL_render.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -81,8 +81,8 @@ typedef struct SDL_RendererInfo Uint32 flags; /**< Supported ::SDL_RendererFlags */ Uint32 num_texture_formats; /**< The number of available texture formats */ Uint32 texture_formats[16]; /**< The available texture formats */ - int max_texture_width; /**< The maximimum texture width */ - int max_texture_height; /**< The maximimum texture height */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ } SDL_RendererInfo; /** @@ -215,7 +215,7 @@ extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, SDL_RendererInfo * info); /** - * \brief Get the output size of a rendering context. + * \brief Get the output size in pixels of a rendering context. */ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h); @@ -229,7 +229,7 @@ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, * \param w The width of the texture in pixels. * \param h The height of the texture in pixels. * - * \return The created texture is returned, or 0 if no rendering context was + * \return The created texture is returned, or NULL if no rendering context was * active, the format was unsupported, or the width or height were out * of range. * @@ -248,7 +248,7 @@ extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, * \param renderer The renderer. * \param surface The surface containing pixel data used to fill the texture. * - * \return The created texture is returned, or 0 on error. + * \return The created texture is returned, or NULL on error. * * \note The surface is not modified or freed by this function. * @@ -371,7 +371,7 @@ extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, * \param rect A pointer to the rectangle of pixels to update, or NULL to * update the entire texture. * \param pixels The raw pixel data. - * \param pitch The number of bytes between rows of pixel data. + * \param pitch The number of bytes in a row of pixel data, including padding between lines. * * \return 0 on success, or -1 if the texture is not valid. * @@ -551,6 +551,16 @@ extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect); +/** + * \brief Get whether clipping is enabled on the given renderer. + * + * \param renderer The renderer from which clip state should be queried. + * + * \sa SDL_RenderGetClipRect() + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + /** * \brief Set the drawing scale for rendering on the current target. * @@ -782,7 +792,7 @@ extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, * \param dstrect A pointer to the destination rectangle, or NULL for the * entire rendering target. * \param angle An angle in degrees that indicates the rotation that will be applied to dstrect - * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2) + * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2). * \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture * * \return 0 on success, or -1 on error diff --git a/Engine/lib/sdl/include/SDL_revision.h b/Engine/lib/sdl/include/SDL_revision.h index a75dc33097..6d7163d4d4 100644 --- a/Engine/lib/sdl/include/SDL_revision.h +++ b/Engine/lib/sdl/include/SDL_revision.h @@ -1,2 +1,2 @@ -#define SDL_REVISION "hg-8628:b558f99d48f0" -#define SDL_REVISION_NUMBER 8628 +#define SDL_REVISION "hg-10001:e12c38730512" +#define SDL_REVISION_NUMBER 10001 diff --git a/Engine/lib/sdl/include/SDL_rwops.h b/Engine/lib/sdl/include/SDL_rwops.h index 4bdd7876a3..f460ae7d40 100644 --- a/Engine/lib/sdl/include/SDL_rwops.h +++ b/Engine/lib/sdl/include/SDL_rwops.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,7 +93,7 @@ typedef struct SDL_RWops Uint32 type; union { -#if defined(ANDROID) +#if defined(__ANDROID__) struct { void *fileNameRef; @@ -220,7 +220,6 @@ extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); /* @} *//* Write endian functions */ - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/Engine/lib/sdl/include/SDL_scancode.h b/Engine/lib/sdl/include/SDL_scancode.h index 4b3be28fb4..0af1dd59f8 100644 --- a/Engine/lib/sdl/include/SDL_scancode.h +++ b/Engine/lib/sdl/include/SDL_scancode.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_shape.h b/Engine/lib/sdl/include/SDL_shape.h index 53029306e3..db10a8f010 100644 --- a/Engine/lib/sdl/include/SDL_shape.h +++ b/Engine/lib/sdl/include/SDL_shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_stdinc.h b/Engine/lib/sdl/include/SDL_stdinc.h index 31b343d303..887bcd2d46 100644 --- a/Engine/lib/sdl/include/SDL_stdinc.h +++ b/Engine/lib/sdl/include/SDL_stdinc.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -165,6 +165,97 @@ typedef uint64_t Uint64; /* @} *//* Basic data types */ +/* Make sure we have macros for printing 64 bit values. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#ifdef PRIs64 +#define SDL_PRIs64 PRIs64 +#elif defined(__WIN32__) +#define SDL_PRIs64 "I64d" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#ifdef PRIu64 +#define SDL_PRIu64 PRIu64 +#elif defined(__WIN32__) +#define SDL_PRIu64 "I64u" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#ifdef PRIx64 +#define SDL_PRIx64 PRIx64 +#elif defined(__WIN32__) +#define SDL_PRIx64 "I64x" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#ifdef PRIX64 +#define SDL_PRIX64 PRIX64 +#elif defined(__WIN32__) +#define SDL_PRIX64 "I64X" +#elif defined(__LINUX__) && defined(__LP64__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ #define SDL_COMPILE_TIME_ASSERT(name, x) \ typedef int SDL_dummy_ ## name[(x) * 2 - 1] @@ -259,7 +350,7 @@ extern DECLSPEC int SDLCALL SDL_isspace(int x); extern DECLSPEC int SDLCALL SDL_toupper(int x); extern DECLSPEC int SDLCALL SDL_tolower(int x); -extern DECLSPEC void *SDLCALL SDL_memset(void *dst, int c, size_t len); +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); #define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) #define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) @@ -294,24 +385,19 @@ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) } -extern DECLSPEC void *SDLCALL SDL_memcpy(void *dst, const void *src, size_t len); - -SDL_FORCE_INLINE void *SDL_memcpy4(void *dst, const void *src, size_t dwords) -{ - return SDL_memcpy(dst, src, dwords * 4); -} +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); -extern DECLSPEC void *SDLCALL SDL_memmove(void *dst, const void *src, size_t len); +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); -extern DECLSPEC size_t SDLCALL SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); -extern DECLSPEC size_t SDLCALL SDL_strlcpy(char *dst, const char *src, size_t maxlen); -extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes); -extern DECLSPEC size_t SDLCALL SDL_strlcat(char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); extern DECLSPEC char *SDLCALL SDL_strrev(char *str); extern DECLSPEC char *SDLCALL SDL_strupr(char *str); @@ -340,10 +426,10 @@ extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); -extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, const char *fmt, ...); +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, const char *fmt, va_list ap); -extern DECLSPEC int SDLCALL SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...); -extern DECLSPEC int SDLCALL SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap); #ifndef HAVE_M_PI #ifndef M_PI @@ -367,6 +453,9 @@ extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); extern DECLSPEC double SDLCALL SDL_sin(double x); extern DECLSPEC float SDLCALL SDL_sinf(float x); extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); /* The SDL implementation of iconv() returns these error codes */ #define SDL_ICONV_ERROR (size_t)-1 @@ -394,6 +483,39 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4-INTERNAL", "UTF-8", S, SDL_strlen(S)+1) +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlen strlen +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strdup strdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_strcmp strcmp +#define SDL_strncmp strncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/Engine/lib/sdl/include/SDL_surface.h b/Engine/lib/sdl/include/SDL_surface.h index aa8d821741..e63ca89038 100644 --- a/Engine/lib/sdl/include/SDL_surface.h +++ b/Engine/lib/sdl/include/SDL_surface.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_system.h b/Engine/lib/sdl/include/SDL_system.h index fd929f7f98..5da9adb459 100644 --- a/Engine/lib/sdl/include/SDL_system.h +++ b/Engine/lib/sdl/include/SDL_system.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -42,24 +42,36 @@ extern "C" { /* Platform specific functions for Windows */ #ifdef __WIN32__ + +/** + \brief Set a function that is called for every windows message, before TranslateMessage() +*/ +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +/** + \brief Returns the D3D9 adapter index that matches the specified display index. -/* Returns the D3D9 adapter index that matches the specified display index. This adapter index can be passed to IDirect3D9::CreateDevice and controls on which monitor a full screen application will appear. */ extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); -/* Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. +typedef struct IDirect3DDevice9 IDirect3DDevice9; +/** + \brief Returns the D3D device associated with a renderer, or NULL if it's not a D3D renderer. + Once you are done using the device, you should release it to avoid a resource leak. */ -typedef struct IDirect3DDevice9 IDirect3DDevice9; extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); -/* Returns the DXGI Adapter and Output indices for the specified display index. +/** + \brief Returns the DXGI Adapter and Output indices for the specified display index. + These can be passed to EnumAdapters and EnumOutputs respectively to get the objects required to create a DX10 or DX11 device and swap chain. */ -extern DECLSPEC void SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); #endif /* __WIN32__ */ @@ -67,7 +79,10 @@ extern DECLSPEC void SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapt /* Platform specific functions for iOS */ #if defined(__IPHONEOS__) && __IPHONEOS__ +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); #endif /* __IPHONEOS__ */ @@ -76,12 +91,16 @@ extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); /* Platform specific functions for Android */ #if defined(__ANDROID__) && __ANDROID__ -/* Get the JNI environment for the current thread +/** + \brief Get the JNI environment for the current thread + This returns JNIEnv*, but the prototype is void* so we don't need jni.h */ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); -/* Get the SDL Activity object for the application +/** + \brief Get the SDL Activity object for the application + This returns jobject, but the prototype is void* so we don't need jni.h The jobject returned by SDL_AndroidGetActivity is a local reference. It is the caller's responsibility to properly release it @@ -89,26 +108,33 @@ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); */ extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); -/* See the official Android developer guide for more information: +/** + See the official Android developer guide for more information: http://developer.android.com/guide/topics/data/data-storage.html */ #define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 #define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 -/* Get the path used for internal storage for this application. +/** + \brief Get the path used for internal storage for this application. + This path is unique to your application and cannot be written to by other applications. */ extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); -/* Get the current state of external storage, a bitmask of these values: +/** + \brief Get the current state of external storage, a bitmask of these values: SDL_ANDROID_EXTERNAL_STORAGE_READ SDL_ANDROID_EXTERNAL_STORAGE_WRITE + If external storage is currently unavailable, this will return 0. */ extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); -/* Get the path used for external storage for this application. +/** + \brief Get the path used for external storage for this application. + This path is unique to your application, but is public and can be written to by other applications. */ @@ -151,7 +177,7 @@ typedef enum * http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType The type of path to retrieve. - * \ret A UCS-2 string (16-bit, wide-char) containing the path, or NULL + * \return A UCS-2 string (16-bit, wide-char) containing the path, or NULL * if the path is not available for any reason. Not all paths are * available on all versions of Windows. This is especially true on * Windows Phone. Check the documentation for the given @@ -168,7 +194,7 @@ extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path * http://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx * * \param pathType The type of path to retrieve. - * \ret A UTF-8 string (8-bit, multi-byte) containing the path, or NULL + * \return A UTF-8 string (8-bit, multi-byte) containing the path, or NULL * if the path is not available for any reason. Not all paths are * available on all versions of Windows. This is especially true on * Windows Phone. Check the documentation for the given @@ -179,7 +205,6 @@ extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathT #endif /* __WINRT__ */ - /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/Engine/lib/sdl/include/SDL_syswm.h b/Engine/lib/sdl/include/SDL_syswm.h index a3fe73861c..1056e526bc 100644 --- a/Engine/lib/sdl/include/SDL_syswm.h +++ b/Engine/lib/sdl/include/SDL_syswm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -52,7 +52,9 @@ struct SDL_SysWMinfo; #else #if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN +#endif #include #endif @@ -83,7 +85,7 @@ struct SDL_SysWMinfo; #if defined(SDL_VIDEO_DRIVER_COCOA) #ifdef __OBJC__ -#include +@class NSWindow; #else typedef struct _NSWindow NSWindow; #endif @@ -96,13 +98,14 @@ typedef struct _NSWindow NSWindow; typedef struct _UIWindow UIWindow; typedef struct _UIViewController UIViewController; #endif +typedef Uint32 GLuint; #endif -#if defined(SDL_VIDEO_DRIVER_MIR) -#include +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; #endif - /** * These are the various supported windowing subsystems */ @@ -117,6 +120,7 @@ typedef enum SDL_SYSWM_WAYLAND, SDL_SYSWM_MIR, SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID } SDL_SYSWM_TYPE; /** @@ -149,12 +153,17 @@ struct SDL_SysWMmsg #if defined(SDL_VIDEO_DRIVER_COCOA) struct { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; /* No Cocoa window events yet */ } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { + int dummy; /* No UIKit window events yet */ } uikit; #endif @@ -179,6 +188,7 @@ struct SDL_SysWMinfo struct { HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ } win; #endif #if defined(SDL_VIDEO_DRIVER_WINRT) @@ -205,13 +215,24 @@ struct SDL_SysWMinfo #if defined(SDL_VIDEO_DRIVER_COCOA) struct { - NSWindow *window; /* The Cocoa window */ +#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /* The Cocoa window */ +#else + NSWindow *window; /* The Cocoa window */ +#endif } cocoa; #endif #if defined(SDL_VIDEO_DRIVER_UIKIT) struct { - UIWindow *window; /* The UIKit window */ +#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /* The UIKit window */ +#else + UIWindow *window; /* The UIKit window */ +#endif + GLuint framebuffer; /* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ } uikit; #endif #if defined(SDL_VIDEO_DRIVER_WAYLAND) @@ -225,11 +246,19 @@ struct SDL_SysWMinfo #if defined(SDL_VIDEO_DRIVER_MIR) struct { - MirConnection *connection; /**< Mir display server connection */ - MirSurface *surface; /**< Mir surface */ + struct MirConnection *connection; /**< Mir display server connection */ + struct MirSurface *surface; /**< Mir surface */ } mir; #endif +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + /* Can't have an empty union */ int dummy; } info; diff --git a/Engine/lib/sdl/include/SDL_test.h b/Engine/lib/sdl/include/SDL_test.h index ae649a420f..217847bfc9 100644 --- a/Engine/lib/sdl/include/SDL_test.h +++ b/Engine/lib/sdl/include/SDL_test.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -52,7 +52,7 @@ extern "C" { /* Global definitions */ /* - * Note: Maximum size of SDLTest log message is less than SDLs limit + * Note: Maximum size of SDLTest log message is less than SDL's limit * to ensure we can fit additional information such as the timestamp. */ #define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 diff --git a/Engine/lib/sdl/include/SDL_test_assert.h b/Engine/lib/sdl/include/SDL_test_assert.h index 79c84d6064..29277e1221 100644 --- a/Engine/lib/sdl/include/SDL_test_assert.h +++ b/Engine/lib/sdl/include/SDL_test_assert.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -58,7 +58,7 @@ extern "C" { * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). * \param assertDescription Message to log with the assert describing it. */ -void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); +void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. @@ -68,14 +68,14 @@ void SDLTest_Assert(int assertCondition, const char *assertDescription, ...); * * \returns Returns the assertCondition so it can be used to externally to break execution flow if desired. */ -int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...); +int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); /** - * \brief Explicitely pass without checking an assertion condition. Updates assertion counter. + * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. * * \param assertDescription Message to log with the assert describing it. */ -void SDLTest_AssertPass(const char *assertDescription, ...); +void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Resets the assert summary counters to zero. diff --git a/Engine/lib/sdl/include/SDL_test_common.h b/Engine/lib/sdl/include/SDL_test_common.h index 45c9edafd2..0ebf31cb67 100644 --- a/Engine/lib/sdl/include/SDL_test_common.h +++ b/Engine/lib/sdl/include/SDL_test_common.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_test_compare.h b/Engine/lib/sdl/include/SDL_test_compare.h index f1353a8d25..772cf9fbd7 100644 --- a/Engine/lib/sdl/include/SDL_test_compare.h +++ b/Engine/lib/sdl/include/SDL_test_compare.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,9 +51,9 @@ extern "C" { * * \param surface Surface used in comparison * \param referenceSurface Test Surface used in comparison - * \param allowable_error Allowable difference (squared) in blending accuracy. + * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. * - * \returns 0 if comparison succeeded, >0 (=number of pixels where comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. + * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. */ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); diff --git a/Engine/lib/sdl/include/SDL_test_crc32.h b/Engine/lib/sdl/include/SDL_test_crc32.h index a180fe3bbc..572a3d9551 100644 --- a/Engine/lib/sdl/include/SDL_test_crc32.h +++ b/Engine/lib/sdl/include/SDL_test_crc32.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -70,27 +70,27 @@ extern "C" { /* ---------- Function Prototypes ------------- */ /** - * /brief Initialize the CRC context + * \brief Initialize the CRC context * * Note: The function initializes the crc table required for all crc calculations. * - * /param crcContext pointer to context variable + * \param crcContext pointer to context variable * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); /** - * /brief calculate a crc32 from a data block + * \brief calculate a crc32 from a data block * - * /param crcContext pointer to context variable - * /param inBuf input buffer to checksum - * /param inLen length of input buffer - * /param crc32 pointer to Uint32 to store the final CRC into + * \param crcContext pointer to context variable + * \param inBuf input buffer to checksum + * \param inLen length of input buffer + * \param crc32 pointer to Uint32 to store the final CRC into * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); @@ -102,11 +102,11 @@ int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, /** - * /brief clean up CRC context + * \brief clean up CRC context * - * /param crcContext pointer to context variable + * \param crcContext pointer to context variable * - * /returns 0 for OK, -1 on error + * \returns 0 for OK, -1 on error * */ diff --git a/Engine/lib/sdl/include/SDL_test_font.h b/Engine/lib/sdl/include/SDL_test_font.h index 8d51d4a9b5..3378ea85b2 100644 --- a/Engine/lib/sdl/include/SDL_test_font.h +++ b/Engine/lib/sdl/include/SDL_test_font.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_test_fuzzer.h b/Engine/lib/sdl/include/SDL_test_fuzzer.h index 640180397c..9603652b28 100644 --- a/Engine/lib/sdl/include/SDL_test_fuzzer.h +++ b/Engine/lib/sdl/include/SDL_test_fuzzer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -57,7 +57,7 @@ extern "C" { /** * Initializes the fuzzer for a test * - * /param execKey Execution "Key" that initializes the random number generator uniquely for the test. + * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. * */ void SDLTest_FuzzerInit(Uint64 execKey); @@ -318,7 +318,7 @@ Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL /** * Returns integer in range [min, max] (inclusive). * Min and max values can be negative values. - * If Max in smaller tham min, then the values are swapped. + * If Max in smaller than min, then the values are swapped. * Min and max are the same value, that value will be returned. * * \param min Minimum inclusive value of returned random number diff --git a/Engine/lib/sdl/include/SDL_test_harness.h b/Engine/lib/sdl/include/SDL_test_harness.h index 2c1e2ade84..74c0950cda 100644 --- a/Engine/lib/sdl/include/SDL_test_harness.h +++ b/Engine/lib/sdl/include/SDL_test_harness.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_test_images.h b/Engine/lib/sdl/include/SDL_test_images.h index 0562799618..8c64b4feb4 100644 --- a/Engine/lib/sdl/include/SDL_test_images.h +++ b/Engine/lib/sdl/include/SDL_test_images.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_test_log.h b/Engine/lib/sdl/include/SDL_test_log.h index 76ce105835..73a5c016fb 100644 --- a/Engine/lib/sdl/include/SDL_test_log.h +++ b/Engine/lib/sdl/include/SDL_test_log.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -47,14 +47,14 @@ extern "C" { * * \param fmt Message to be logged */ -void SDLTest_Log(const char *fmt, ...); +void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /** * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. * * \param fmt Message to be logged */ -void SDLTest_LogError(const char *fmt, ...); +void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/Engine/lib/sdl/include/SDL_test_md5.h b/Engine/lib/sdl/include/SDL_test_md5.h index 029e164bf8..f2d9a7d7e3 100644 --- a/Engine/lib/sdl/include/SDL_test_md5.h +++ b/Engine/lib/sdl/include/SDL_test_md5.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -78,9 +78,9 @@ extern "C" { /* ---------- Function Prototypes ------------- */ /** - * /brief initialize the context + * \brief initialize the context * - * /param mdContext pointer to context variable + * \param mdContext pointer to context variable * * Note: The function initializes the message-digest context * mdContext. Call before each new use of the context - @@ -90,11 +90,11 @@ extern "C" { /** - * /brief update digest from variable length data + * \brief update digest from variable length data * - * /param mdContext pointer to context variable - * /param inBuf pointer to data array/string - * /param inLen length of data array/string + * \param mdContext pointer to context variable + * \param inBuf pointer to data array/string + * \param inLen length of data array/string * * Note: The function updates the message-digest context to account * for the presence of each of the characters inBuf[0..inLen-1] @@ -105,10 +105,10 @@ extern "C" { unsigned int inLen); -/* - * /brief complete digest computation +/** + * \brief complete digest computation * - * /param mdContext pointer to context variable + * \param mdContext pointer to context variable * * Note: The function terminates the message-digest computation and * ends with the desired message digest in mdContext.digest[0..15]. diff --git a/Engine/lib/sdl/include/SDL_test_random.h b/Engine/lib/sdl/include/SDL_test_random.h index 6c5660d80d..91c36526cb 100644 --- a/Engine/lib/sdl/include/SDL_test_random.h +++ b/Engine/lib/sdl/include/SDL_test_random.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_thread.h b/Engine/lib/sdl/include/SDL_thread.h index 4e48cc34c1..377e6c73d1 100644 --- a/Engine/lib/sdl/include/SDL_thread.h +++ b/Engine/lib/sdl/include/SDL_thread.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -233,9 +233,9 @@ extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); * if (!thread_local_storage) { * thread_local_storage = SDL_TLSCreate(); * } - * SDL_AtomicUnLock(&tls_lock); + * SDL_AtomicUnlock(&tls_lock); * } - * SDL_TLSSet(thread_local_storage, value); + * SDL_TLSSet(thread_local_storage, value, 0); * } * * void *GetMyThreadData(void) diff --git a/Engine/lib/sdl/include/SDL_timer.h b/Engine/lib/sdl/include/SDL_timer.h index a48e0466e1..e0d3785ee8 100644 --- a/Engine/lib/sdl/include/SDL_timer.h +++ b/Engine/lib/sdl/include/SDL_timer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -88,7 +88,7 @@ typedef int SDL_TimerID; /** * \brief Add a new timer to the pool of timers already running. * - * \return A timer ID, or NULL when an error occurs. + * \return A timer ID, or 0 when an error occurs. */ extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, SDL_TimerCallback callback, diff --git a/Engine/lib/sdl/include/SDL_touch.h b/Engine/lib/sdl/include/SDL_touch.h index 017deb28b8..2643e36796 100644 --- a/Engine/lib/sdl/include/SDL_touch.h +++ b/Engine/lib/sdl/include/SDL_touch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_types.h b/Engine/lib/sdl/include/SDL_types.h index cd3ba33cd3..5118af2191 100644 --- a/Engine/lib/sdl/include/SDL_types.h +++ b/Engine/lib/sdl/include/SDL_types.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/SDL_version.h b/Engine/lib/sdl/include/SDL_version.h index d02898bbba..de1f160565 100644 --- a/Engine/lib/sdl/include/SDL_version.h +++ b/Engine/lib/sdl/include/SDL_version.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -59,7 +59,7 @@ typedef struct SDL_version */ #define SDL_MAJOR_VERSION 2 #define SDL_MINOR_VERSION 0 -#define SDL_PATCHLEVEL 3 +#define SDL_PATCHLEVEL 4 /** * \brief Macro to determine SDL version program was compiled against. diff --git a/Engine/lib/sdl/include/SDL_video.h b/Engine/lib/sdl/include/SDL_video.h index 49ea37ad00..52dbbc765d 100644 --- a/Engine/lib/sdl/include/SDL_video.h +++ b/Engine/lib/sdl/include/SDL_video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,8 +53,8 @@ extern "C" { typedef struct { Uint32 format; /**< pixel format */ - int w; /**< width */ - int h; /**< height */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ int refresh_rate; /**< refresh rate (or zero for unspecified) */ void *driverdata; /**< driver-specific data, initialize to 0 */ } SDL_DisplayMode; @@ -108,7 +108,8 @@ typedef enum SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ - SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000 /**< window should be created in high-DPI mode if supported */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000 /**< window has mouse captured (unrelated to INPUT_GRABBED) */ } SDL_WindowFlags; /** @@ -142,7 +143,9 @@ typedef enum SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 */ SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ - SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as a result of an API call or through the system or user changing the window size. */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size @@ -188,7 +191,8 @@ typedef enum SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_SHARE_WITH_CURRENT_CONTEXT, - SDL_GL_FRAMEBUFFER_SRGB_CAPABLE + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR } SDL_GLattr; typedef enum @@ -206,6 +210,12 @@ typedef enum SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 } SDL_GLcontextFlag; +typedef enum +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + /* Function prototypes */ @@ -288,6 +298,18 @@ extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); */ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); +/** + * \brief Get the dots/pixels-per-inch for a display + * + * \note Diagonal, horizontal and vertical DPI can all be optionally + * returned if the parameter is non-NULL. + * + * \return 0 on success, or -1 if no DPI information is available or the index is out of range. + * + * \sa SDL_GetNumVideoDisplays() + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + /** * \brief Returns the number of available display modes. * @@ -392,8 +414,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * ::SDL_WINDOWPOS_UNDEFINED. * \param y The y position of the window, ::SDL_WINDOWPOS_CENTERED, or * ::SDL_WINDOWPOS_UNDEFINED. - * \param w The width of the window. - * \param h The height of the window. + * \param w The width of the window, in screen coordinates. + * \param h The height of the window, in screen coordinates. * \param flags The flags for the window, a mask of any of the following: * ::SDL_WINDOW_FULLSCREEN, ::SDL_WINDOW_OPENGL, * ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS, @@ -403,6 +425,12 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); * * \return The id of the window created, or zero if window creation failed. * + * If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query + * the client area's size in screen coordinates, and SDL_GL_GetDrawableSize() + * or SDL_GetRendererOutputSize() to query the drawable size in pixels. + * * \sa SDL_DestroyWindow() */ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, @@ -493,10 +521,10 @@ extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, * \brief Set the position of a window. * * \param window The window to reposition. - * \param x The x coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or - ::SDL_WINDOWPOS_UNDEFINED. - * \param y The y coordinate of the window, ::SDL_WINDOWPOS_CENTERED, or - ::SDL_WINDOWPOS_UNDEFINED. + * \param x The x coordinate of the window in screen coordinates, or + * ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED. + * \param y The y coordinate of the window in screen coordinates, or + * ::SDL_WINDOWPOS_CENTERED or ::SDL_WINDOWPOS_UNDEFINED. * * \note The window coordinate origin is the upper left of the display. * @@ -509,8 +537,10 @@ extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, * \brief Get the position of a window. * * \param window The window to query. - * \param x Pointer to variable for storing the x position, may be NULL - * \param y Pointer to variable for storing the y position, may be NULL + * \param x Pointer to variable for storing the x position, in screen + * coordinates. May be NULL. + * \param y Pointer to variable for storing the y position, in screen + * coordinates. May be NULL. * * \sa SDL_SetWindowPosition() */ @@ -521,12 +551,17 @@ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, * \brief Set the size of a window's client area. * * \param window The window to resize. - * \param w The width of the window, must be >0 - * \param h The height of the window, must be >0 + * \param w The width of the window, in screen coordinates. Must be >0. + * \param h The height of the window, in screen coordinates. Must be >0. * * \note You can't change the size of a fullscreen window, it automatically * matches the size of the display mode. * + * The window size in screen coordinates may differ from the size in pixels, if + * the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with + * high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * * \sa SDL_GetWindowSize() */ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, @@ -536,8 +571,15 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, * \brief Get the size of a window's client area. * * \param window The window to query. - * \param w Pointer to variable for storing the width, may be NULL - * \param h Pointer to variable for storing the height, may be NULL + * \param w Pointer to variable for storing the width, in screen + * coordinates. May be NULL. + * \param h Pointer to variable for storing the height, in screen + * coordinates. May be NULL. + * + * The window size in screen coordinates may differ from the size in pixels, if + * the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with + * high-dpi support (e.g. iOS or OS X). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. * * \sa SDL_SetWindowSize() */ @@ -714,6 +756,9 @@ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, * \param window The window for which the input grab mode should be set. * \param grabbed This is SDL_TRUE to grab input, and SDL_FALSE to release input. * + * If the caller enables a grab while another window is currently grabbed, + * the other window loses its grab in favor of the caller's window. + * * \sa SDL_GetWindowGrab() */ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, @@ -728,6 +773,15 @@ extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, */ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); +/** + * \brief Get the window that currently has an input grab enabled. + * + * \return This returns the window if input is grabbed, and NULL otherwise. + * + * \sa SDL_SetWindowGrab() + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + /** * \brief Set the brightness (gamma correction) for a window. * @@ -790,6 +844,75 @@ extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, Uint16 * green, Uint16 * blue); +/** + * \brief Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * \brief Callback used for hit-testing. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * \brief Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable + * from any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of + * a given window as special. This callback is run during event processing + * if we need to tell the OS to treat a region of the window specially; the + * use of this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within + * a special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire + * when the OS is deciding whether to drag your window, but it fires for lots + * of other reasons, too, some unrelated to anything you probably care about + * _and when the mouse isn't actually at the location it is testing_). + * Since this can fire at any time, you should try to keep your callback + * efficient, devoid of allocations, etc. + * + * \param window The window to set hit-testing on. + * \param callback The callback to call when doing a hit-test. + * \param callback_data An app-defined void pointer passed to the callback. + * \return 0 on success, -1 on error (including unsupported). + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + /** * \brief Destroy a window. */ @@ -908,13 +1031,14 @@ extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); /** - * \brief Get the size of a window's underlying drawable (for use with glViewport). + * \brief Get the size of a window's underlying drawable in pixels (for use + * with glViewport). * * \param window Window from which the drawable size should be queried - * \param w Pointer to variable for storing the width, may be NULL - * \param h Pointer to variable for storing the height, may be NULL + * \param w Pointer to variable for storing the width in pixels, may be NULL + * \param h Pointer to variable for storing the height in pixels, may be NULL * - * This may differ from SDL_GetWindowSize if we're rendering to a high-DPI + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI * drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a * platform with high-DPI support (Apple calls this "Retina"), and not disabled * by the SDL_HINT_VIDEO_HIGHDPI_DISABLED hint. diff --git a/Engine/lib/sdl/include/begin_code.h b/Engine/lib/sdl/include/begin_code.h index f37ee3696e..04e78c64d4 100644 --- a/Engine/lib/sdl/include/begin_code.h +++ b/Engine/lib/sdl/include/begin_code.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,6 +41,14 @@ # endif #endif +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + /* Some compilers use a special export keyword */ #ifndef DECLSPEC # if defined(__WIN32__) || defined(__WINRT__) @@ -56,8 +64,6 @@ # else # if defined(__GNUC__) && __GNUC__ >= 4 # define DECLSPEC __attribute__ ((visibility("default"))) -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define DECLSPEC __declspec(dllexport) # else # define DECLSPEC # endif diff --git a/Engine/lib/sdl/include/close_code.h b/Engine/lib/sdl/include/close_code.h index 9826f14786..d908b00eb6 100644 --- a/Engine/lib/sdl/include/close_code.h +++ b/Engine/lib/sdl/include/close_code.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/include/doxyfile b/Engine/lib/sdl/include/doxyfile deleted file mode 100644 index 495dbc19bc..0000000000 --- a/Engine/lib/sdl/include/doxyfile +++ /dev/null @@ -1,1555 +0,0 @@ -# Doxyfile 1.5.9 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = SDL - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 2.0.0 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = YES - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = "defined=\"\def\"" \ - "discussion=\"\par Discussion:\n\"" - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it parses. -# With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this tag. -# The format is ext=language, where ext is a file extension, and language is one of -# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, -# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat -# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), -# use: inc=Fortran f=C. Note that for custom extensions you also need to set -# FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = YES - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = YES - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will rougly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = YES - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by -# doxygen. The layout file controls the global structure of the generated output files -# in an output format independent way. The create the layout file that represents -# doxygen's defaults, run doxygen with the -l option. You can optionally specify a -# file name after the option, if omitted DoxygenLayout.xml will be used as the name -# of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = YES - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = ./doxygen_warn.txt - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = . - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.vhd \ - *.vhdl \ - *.h.in \ - *.h.default - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = ../doxy \ - ../test \ - ../Xcode \ - ../VisualC \ - ../VisualCE \ - ../Xcode-iOS - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = YES - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = YES - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = NO - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = SDL_ \ - SDL - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = YES - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "SDL 2.0 Doxygen" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.libsdl.sdl20 - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = ./sdl20.chm - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = YES - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER -# are set, an additional index file will be generated that can be used as input for -# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated -# HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. -# For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's -# filter section matches. -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 1 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to FRAME, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. Other possible values -# for this tag are: HIERARCHIES, which will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list; -# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which -# disables this behavior completely. For backwards compatibility with previous -# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE -# respectively. - -GENERATE_TREEVIEW = ALL - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = YES - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN_SHOULD_IGNORE_THIS=1 \ - DECLSPEC= \ - SDLCALL= \ - _WIN32=1 - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = ./SDL.tag - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = c:\Perl\bin\perl.exe - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# By default doxygen will write a font called FreeSans.ttf to the output -# directory and reference it in all dot files that doxygen generates. This -# font does not include all possible unicode characters however, so when you need -# these (or just want a differently looking font) you can specify the font name -# using DOT_FONTNAME. You need need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = FreeSans - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 2 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Options related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/Engine/lib/sdl/sdl2-config.cmake.in b/Engine/lib/sdl/sdl2-config.cmake.in new file mode 100644 index 0000000000..e5a036adfa --- /dev/null +++ b/Engine/lib/sdl/sdl2-config.cmake.in @@ -0,0 +1,10 @@ +# sdl2 cmake project-config input for ./configure scripts + +set(prefix "@prefix@") +set(exec_prefix "@exec_prefix@") +set(libdir "@libdir@") +set(SDL2_PREFIX "@prefix@") +set(SDL2_EXEC_PREFIX "@prefix@") +set(SDL2_LIBDIR "@libdir@") +set(SDL2_INCLUDE_DIRS "@includedir@/SDL2") +set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} @SDL_RLD_FLAGS@ @SDL_LIBS@") diff --git a/Engine/lib/sdl/src/SDL.c b/Engine/lib/sdl/src/SDL.c index dacd0f7a45..5d310021a5 100644 --- a/Engine/lib/sdl/src/SDL.c +++ b/Engine/lib/sdl/src/SDL.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -405,6 +405,8 @@ SDL_GetPlatform() return "BSDI"; #elif __DREAMCAST__ return "Dreamcast"; +#elif __EMSCRIPTEN__ + return "Emscripten"; #elif __FREEBSD__ return "FreeBSD"; #elif __HAIKU__ @@ -421,6 +423,8 @@ SDL_GetPlatform() return "MacOS Classic"; #elif __MACOSX__ return "Mac OS X"; +#elif __NACL__ + return "NaCl"; #elif __NETBSD__ return "NetBSD"; #elif __OPENBSD__ @@ -437,6 +441,8 @@ SDL_GetPlatform() return "Solaris"; #elif __WIN32__ return "Windows"; +#elif __WINRT__ + return "WinRT"; #elif __IPHONEOS__ return "iOS"; #elif __PSP__ diff --git a/Engine/lib/sdl/src/SDL_assert.c b/Engine/lib/sdl/src/SDL_assert.c index 98e7584471..a21f70b68c 100644 --- a/Engine/lib/sdl/src/SDL_assert.c +++ b/Engine/lib/sdl/src/SDL_assert.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/SDL_assert_c.h b/Engine/lib/sdl/src/SDL_assert_c.h index f94b24c29f..bc3b631e07 100644 --- a/Engine/lib/sdl/src/SDL_assert_c.h +++ b/Engine/lib/sdl/src/SDL_assert_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/SDL_error.c b/Engine/lib/sdl/src/SDL_error.c index ecbf4507b1..ace5cc3972 100644 --- a/Engine/lib/sdl/src/SDL_error.c +++ b/Engine/lib/sdl/src/SDL_error.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,7 +50,7 @@ SDL_LookupString(const char *key) /* Public functions */ int -SDL_SetError(const char *fmt, ...) +SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; SDL_error *error; @@ -111,7 +111,7 @@ SDL_SetError(const char *fmt, ...) va_end(ap); /* If we are in debug mode, print out an error message */ - SDL_LogError(SDL_LOG_CATEGORY_ERROR, "%s", SDL_GetError()); + SDL_LogDebug(SDL_LOG_CATEGORY_ERROR, "%s", SDL_GetError()); return -1; } @@ -120,7 +120,7 @@ SDL_SetError(const char *fmt, ...) so that it supports internationalization and thread-safe errors. */ static char * -SDL_GetErrorMsg(char *errstr, unsigned int maxlen) +SDL_GetErrorMsg(char *errstr, int maxlen) { SDL_error *error; @@ -163,37 +163,55 @@ SDL_GetErrorMsg(char *errstr, unsigned int maxlen) len = SDL_snprintf(msg, maxlen, tmp, error->args[argi++].value_i); - msg += len; - maxlen -= len; + if (len > 0) { + msg += len; + maxlen -= len; + } break; + case 'f': len = SDL_snprintf(msg, maxlen, tmp, error->args[argi++].value_f); - msg += len; - maxlen -= len; + if (len > 0) { + msg += len; + maxlen -= len; + } break; + case 'p': len = SDL_snprintf(msg, maxlen, tmp, error->args[argi++].value_ptr); - msg += len; - maxlen -= len; + if (len > 0) { + msg += len; + maxlen -= len; + } break; + case 's': len = SDL_snprintf(msg, maxlen, tmp, SDL_LookupString(error->args[argi++]. buf)); - msg += len; - maxlen -= len; + if (len > 0) { + msg += len; + maxlen -= len; + } break; + } } else { *msg++ = *fmt++; maxlen -= 1; } } + + /* slide back if we've overshot the end of our buffer. */ + if (maxlen < 0) { + msg -= (-maxlen) + 1; + } + *msg = 0; /* NULL terminate the string */ } return (errstr); diff --git a/Engine/lib/sdl/src/SDL_error_c.h b/Engine/lib/sdl/src/SDL_error_c.h index 98c20c4922..76ccf2b945 100644 --- a/Engine/lib/sdl/src/SDL_error_c.h +++ b/Engine/lib/sdl/src/SDL_error_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/SDL_hints.c b/Engine/lib/sdl/src/SDL_hints.c index 365459ec76..04523327ad 100644 --- a/Engine/lib/sdl/src/SDL_hints.c +++ b/Engine/lib/sdl/src/SDL_hints.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -137,6 +137,10 @@ SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) SDL_DelHintCallback(name, callback, userdata); entry = (SDL_HintWatch *)SDL_malloc(sizeof(*entry)); + if (!entry) { + SDL_OutOfMemory(); + return; + } entry->callback = callback; entry->userdata = userdata; @@ -149,6 +153,8 @@ SDL_AddHintCallback(const char *name, SDL_HintCallback callback, void *userdata) /* Need to add a hint entry for this watcher */ hint = (SDL_Hint *)SDL_malloc(sizeof(*hint)); if (!hint) { + SDL_OutOfMemory(); + SDL_free(entry); return; } hint->name = SDL_strdup(name); diff --git a/Engine/lib/sdl/src/SDL_internal.h b/Engine/lib/sdl/src/SDL_internal.h index cb66abd8ee..7e928501a9 100644 --- a/Engine/lib/sdl/src/SDL_internal.h +++ b/Engine/lib/sdl/src/SDL_internal.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/SDL_log.c b/Engine/lib/sdl/src/SDL_log.c index 39aa3e4bf6..60bac9f652 100644 --- a/Engine/lib/sdl/src/SDL_log.c +++ b/Engine/lib/sdl/src/SDL_log.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,7 @@ /* Simple log messages in SDL */ +#include "SDL_error.h" #include "SDL_log.h" #if HAVE_STDIO_H @@ -41,9 +42,6 @@ #define DEFAULT_APPLICATION_PRIORITY SDL_LOG_PRIORITY_INFO #define DEFAULT_TEST_PRIORITY SDL_LOG_PRIORITY_VERBOSE -/* Forward definition of error function */ -extern int SDL_SetError(const char *fmt, ...); - typedef struct SDL_LogLevel { int category; @@ -172,7 +170,7 @@ SDL_LogResetPriorities(void) } void -SDL_Log(const char *fmt, ...) +SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -182,7 +180,7 @@ SDL_Log(const char *fmt, ...) } void -SDL_LogVerbose(int category, const char *fmt, ...) +SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -192,7 +190,7 @@ SDL_LogVerbose(int category, const char *fmt, ...) } void -SDL_LogDebug(int category, const char *fmt, ...) +SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -202,7 +200,7 @@ SDL_LogDebug(int category, const char *fmt, ...) } void -SDL_LogInfo(int category, const char *fmt, ...) +SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -212,7 +210,7 @@ SDL_LogInfo(int category, const char *fmt, ...) } void -SDL_LogWarn(int category, const char *fmt, ...) +SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -222,7 +220,7 @@ SDL_LogWarn(int category, const char *fmt, ...) } void -SDL_LogError(int category, const char *fmt, ...) +SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -232,7 +230,7 @@ SDL_LogError(int category, const char *fmt, ...) } void -SDL_LogCritical(int category, const char *fmt, ...) +SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -242,7 +240,7 @@ SDL_LogCritical(int category, const char *fmt, ...) } void -SDL_LogMessage(int category, SDL_LogPriority priority, const char *fmt, ...) +SDL_LogMessage(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; @@ -373,9 +371,9 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, if (consoleAttached == 1) { if (!WriteConsole(stderrHandle, tstr, lstrlen(tstr), &charsWritten, NULL)) { OutputDebugString(TEXT("Error calling WriteConsole\r\n")); - } - if (charsWritten == ERROR_NOT_ENOUGH_MEMORY) { - OutputDebugString(TEXT("Insufficient heap memory to write message\r\n")); + if (GetLastError() == ERROR_NOT_ENOUGH_MEMORY) { + OutputDebugString(TEXT("Insufficient heap memory to write message\r\n")); + } } } #endif /* ifndef __WINRT__ */ @@ -415,6 +413,9 @@ SDL_LogOutput(void *userdata, int category, SDL_LogPriority priority, #endif #if HAVE_STDIO_H fprintf(stderr, "%s: %s\n", SDL_priority_prefixes[priority], message); +#if __NACL__ + fflush(stderr); +#endif #endif } diff --git a/Engine/lib/sdl/src/atomic/SDL_atomic.c b/Engine/lib/sdl/src/atomic/SDL_atomic.c index be3f4002bb..db86d6eda8 100644 --- a/Engine/lib/sdl/src/atomic/SDL_atomic.c +++ b/Engine/lib/sdl/src/atomic/SDL_atomic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,6 +31,10 @@ #include #endif +#if !defined(HAVE_GCC_ATOMICS) && defined(__SOLARIS__) +#include +#endif + /* If any of the operations are not provided then we must emulate some of them. That means we need a nice implementation of spin locks @@ -54,7 +58,7 @@ Contributed by Bob Pendleton, bob@pendleton.com */ -#if !defined(HAVE_MSC_ATOMICS) && !defined(HAVE_GCC_ATOMICS) && !defined(__MACOSX__) +#if !defined(HAVE_MSC_ATOMICS) && !defined(HAVE_GCC_ATOMICS) && !defined(__MACOSX__) && !defined(__SOLARIS__) #define EMULATE_CAS 1 #endif @@ -88,6 +92,10 @@ SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval) return (SDL_bool) OSAtomicCompareAndSwap32Barrier(oldval, newval, &a->value); #elif defined(HAVE_GCC_ATOMICS) return (SDL_bool) __sync_bool_compare_and_swap(&a->value, oldval, newval); +#elif defined(__SOLARIS__) && defined(_LP64) + return (SDL_bool) ((int) atomic_cas_64((volatile uint64_t*)&a->value, (uint64_t)oldval, (uint64_t)newval) == oldval); +#elif defined(__SOLARIS__) && !defined(_LP64) + return (SDL_bool) ((int) atomic_cas_32((volatile uint32_t*)&a->value, (uint32_t)oldval, (uint32_t)newval) == oldval); #elif EMULATE_CAS SDL_bool retval = SDL_FALSE; @@ -117,6 +125,8 @@ SDL_AtomicCASPtr(void **a, void *oldval, void *newval) return (SDL_bool) OSAtomicCompareAndSwap32Barrier((int32_t)oldval, (int32_t)newval, (int32_t*) a); #elif defined(HAVE_GCC_ATOMICS) return __sync_bool_compare_and_swap(a, oldval, newval); +#elif defined(__SOLARIS__) + return (SDL_bool) (atomic_cas_ptr(a, oldval, newval) == oldval); #elif EMULATE_CAS SDL_bool retval = SDL_FALSE; @@ -140,6 +150,10 @@ SDL_AtomicSet(SDL_atomic_t *a, int v) return _InterlockedExchange((long*)&a->value, v); #elif defined(HAVE_GCC_ATOMICS) return __sync_lock_test_and_set(&a->value, v); +#elif defined(__SOLARIS__) && defined(_LP64) + return (int) atomic_swap_64((volatile uint64_t*)&a->value, (uint64_t)v); +#elif defined(__SOLARIS__) && !defined(_LP64) + return (int) atomic_swap_32((volatile uint32_t*)&a->value, (uint32_t)v); #else int value; do { @@ -158,6 +172,8 @@ SDL_AtomicSetPtr(void **a, void *v) return _InterlockedExchangePointer(a, v); #elif defined(HAVE_GCC_ATOMICS) return __sync_lock_test_and_set(a, v); +#elif defined(__SOLARIS__) + return atomic_swap_ptr(a, v); #else void *value; do { @@ -174,6 +190,15 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v) return _InterlockedExchangeAdd((long*)&a->value, v); #elif defined(HAVE_GCC_ATOMICS) return __sync_fetch_and_add(&a->value, v); +#elif defined(__SOLARIS__) + int pv = a->value; + membar_consumer(); +#if defined(_LP64) + atomic_add_64((volatile uint64_t*)&a->value, v); +#elif !defined(_LP64) + atomic_add_32((volatile uint32_t*)&a->value, v); +#endif + return pv; #else int value; do { diff --git a/Engine/lib/sdl/src/atomic/SDL_spinlock.c b/Engine/lib/sdl/src/atomic/SDL_spinlock.c index 2d8446dc58..f582afb4e2 100644 --- a/Engine/lib/sdl/src/atomic/SDL_spinlock.c +++ b/Engine/lib/sdl/src/atomic/SDL_spinlock.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,6 +28,9 @@ #include "SDL_mutex.h" #include "SDL_timer.h" +#if !defined(HAVE_GCC_ATOMICS) && defined(__SOLARIS__) +#include +#endif /* This function is where all the magic happens... */ SDL_bool @@ -86,9 +89,13 @@ SDL_AtomicTryLock(SDL_SpinLock *lock) /* Maybe used for PowerPC, but the Intel asm or gcc atomics are favored. */ return OSAtomicCompareAndSwap32Barrier(0, 1, lock); -#elif HAVE_PTHREAD_SPINLOCK - /* pthread instructions */ - return (pthread_spin_trylock(lock) == 0); +#elif defined(__SOLARIS__) && defined(_LP64) + /* Used for Solaris with non-gcc compilers. */ + return (SDL_bool) ((int) atomic_cas_64((volatile uint64_t*)lock, 0, 1) == 0); + +#elif defined(__SOLARIS__) && !defined(_LP64) + /* Used for Solaris with non-gcc compilers. */ + return (SDL_bool) ((int) atomic_cas_32((volatile uint32_t*)lock, 0, 1) == 0); #else #error Please implement for your platform. @@ -115,8 +122,10 @@ SDL_AtomicUnlock(SDL_SpinLock *lock) #elif HAVE_GCC_ATOMICS || HAVE_GCC_SYNC_LOCK_TEST_AND_SET __sync_lock_release(lock); -#elif HAVE_PTHREAD_SPINLOCK - pthread_spin_unlock(lock); +#elif defined(__SOLARIS__) + /* Used for Solaris when not using gcc. */ + *lock = 0; + membar_producer(); #else *lock = 0; diff --git a/Engine/lib/sdl/src/audio/SDL_audio.c b/Engine/lib/sdl/src/audio/SDL_audio.c index 40cb539232..2ffd216c0a 100644 --- a/Engine/lib/sdl/src/audio/SDL_audio.c +++ b/Engine/lib/sdl/src/audio/SDL_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,6 +51,7 @@ extern AudioBootStrap QSAAUDIO_bootstrap; extern AudioBootStrap SUNAUDIO_bootstrap; extern AudioBootStrap ARTS_bootstrap; extern AudioBootStrap ESD_bootstrap; +extern AudioBootStrap NACLAUD_bootstrap; extern AudioBootStrap NAS_bootstrap; extern AudioBootStrap XAUDIO2_bootstrap; extern AudioBootStrap DSOUND_bootstrap; @@ -68,6 +69,8 @@ extern AudioBootStrap FUSIONSOUND_bootstrap; extern AudioBootStrap ANDROIDAUD_bootstrap; extern AudioBootStrap PSPAUD_bootstrap; extern AudioBootStrap SNDIO_bootstrap; +extern AudioBootStrap EmscriptenAudio_bootstrap; + /* Available audio drivers */ static const AudioBootStrap *const bootstrap[] = { @@ -98,6 +101,9 @@ static const AudioBootStrap *const bootstrap[] = { #if SDL_AUDIO_DRIVER_ESD &ESD_bootstrap, #endif +#if SDL_AUDIO_DRIVER_NACL + &NACLAUD_bootstrap, +#endif #if SDL_AUDIO_DRIVER_NAS &NAS_bootstrap, #endif @@ -133,6 +139,9 @@ static const AudioBootStrap *const bootstrap[] = { #endif #if SDL_AUDIO_DRIVER_PSP &PSPAUD_bootstrap, +#endif +#if SDL_AUDIO_DRIVER_EMSCRIPTEN + &EmscriptenAudio_bootstrap, #endif NULL }; @@ -152,8 +161,16 @@ get_audio_device(SDL_AudioDeviceID id) /* stubs for audio drivers that don't need a specific entry point... */ static void -SDL_AudioDetectDevices_Default(int iscapture, SDL_AddAudioDevice addfn) -{ /* no-op. */ +SDL_AudioDetectDevices_Default(void) +{ + /* you have to write your own implementation if these assertions fail. */ + SDL_assert(current_audio.impl.OnlyHasDefaultOutputDevice); + SDL_assert(current_audio.impl.OnlyHasDefaultInputDevice || !current_audio.impl.HasCaptureSupport); + + SDL_AddAudioDevice(SDL_FALSE, DEFAULT_OUTPUT_DEVNAME, (void *) ((size_t) 0x1)); + if (current_audio.impl.HasCaptureSupport) { + SDL_AddAudioDevice(SDL_TRUE, DEFAULT_INPUT_DEVNAME, (void *) ((size_t) 0x2)); + } } static void @@ -171,6 +188,12 @@ SDL_AudioPlayDevice_Default(_THIS) { /* no-op. */ } +static int +SDL_AudioGetPendingBytes_Default(_THIS) +{ + return 0; +} + static Uint8 * SDL_AudioGetDeviceBuf_Default(_THIS) { @@ -192,28 +215,46 @@ SDL_AudioDeinitialize_Default(void) { /* no-op. */ } +static void +SDL_AudioFreeDeviceHandle_Default(void *handle) +{ /* no-op. */ +} + + static int -SDL_AudioOpenDevice_Default(_THIS, const char *devname, int iscapture) +SDL_AudioOpenDevice_Default(_THIS, void *handle, const char *devname, int iscapture) { - return -1; + return SDL_Unsupported(); +} + +static SDL_INLINE SDL_bool +is_in_audio_device_thread(SDL_AudioDevice * device) +{ + /* The device thread locks the same mutex, but not through the public API. + This check is in case the application, in the audio callback, + tries to lock the thread that we've already locked from the + device thread...just in case we only have non-recursive mutexes. */ + if (device->thread && (SDL_ThreadID() == device->threadid)) { + return SDL_TRUE; + } + + return SDL_FALSE; } static void SDL_AudioLockDevice_Default(SDL_AudioDevice * device) { - if (device->thread && (SDL_ThreadID() == device->threadid)) { - return; + if (!is_in_audio_device_thread(device)) { + SDL_LockMutex(device->mixer_lock); } - SDL_LockMutex(device->mixer_lock); } static void SDL_AudioUnlockDevice_Default(SDL_AudioDevice * device) { - if (device->thread && (SDL_ThreadID() == device->threadid)) { - return; + if (!is_in_audio_device_thread(device)) { + SDL_UnlockMutex(device->mixer_lock); } - SDL_UnlockMutex(device->mixer_lock); } @@ -234,286 +275,394 @@ finalize_audio_entry_points(void) FILL_STUB(ThreadInit); FILL_STUB(WaitDevice); FILL_STUB(PlayDevice); + FILL_STUB(GetPendingBytes); FILL_STUB(GetDeviceBuf); FILL_STUB(WaitDone); FILL_STUB(CloseDevice); FILL_STUB(LockDevice); FILL_STUB(UnlockDevice); + FILL_STUB(FreeDeviceHandle); FILL_STUB(Deinitialize); #undef FILL_STUB } -/* Streaming functions (for when the input and output buffer sizes are different) */ -/* Write [length] bytes from buf into the streamer */ -static void -SDL_StreamWrite(SDL_AudioStreamer * stream, Uint8 * buf, int length) -{ - int i; - for (i = 0; i < length; ++i) { - stream->buffer[stream->write_pos] = buf[i]; - ++stream->write_pos; +/* device hotplug support... */ + +static int +add_audio_device(const char *name, void *handle, SDL_AudioDeviceItem **devices, int *devCount) +{ + int retval = -1; + const size_t size = sizeof (SDL_AudioDeviceItem) + SDL_strlen(name) + 1; + SDL_AudioDeviceItem *item = (SDL_AudioDeviceItem *) SDL_malloc(size); + if (item == NULL) { + return -1; } + + SDL_assert(handle != NULL); /* we reserve NULL, audio backends can't use it. */ + + item->handle = handle; + SDL_strlcpy(item->name, name, size - sizeof (SDL_AudioDeviceItem)); + + SDL_LockMutex(current_audio.detectionLock); + item->next = *devices; + *devices = item; + retval = (*devCount)++; + SDL_UnlockMutex(current_audio.detectionLock); + + return retval; } -/* Read [length] bytes out of the streamer into buf */ -static void -SDL_StreamRead(SDL_AudioStreamer * stream, Uint8 * buf, int length) +static SDL_INLINE int +add_capture_device(const char *name, void *handle) { - int i; + /* !!! FIXME: add this later. SDL_assert(current_audio.impl.HasCaptureSupport);*/ + return add_audio_device(name, handle, ¤t_audio.inputDevices, ¤t_audio.inputDeviceCount); +} - for (i = 0; i < length; ++i) { - buf[i] = stream->buffer[stream->read_pos]; - ++stream->read_pos; - } +static SDL_INLINE int +add_output_device(const char *name, void *handle) +{ + return add_audio_device(name, handle, ¤t_audio.outputDevices, ¤t_audio.outputDeviceCount); } -static int -SDL_StreamLength(SDL_AudioStreamer * stream) +static void +free_device_list(SDL_AudioDeviceItem **devices, int *devCount) { - return (stream->write_pos - stream->read_pos) % stream->max_len; + SDL_AudioDeviceItem *item, *next; + for (item = *devices; item != NULL; item = next) { + next = item->next; + if (item->handle != NULL) { + current_audio.impl.FreeDeviceHandle(item->handle); + } + SDL_free(item); + } + *devices = NULL; + *devCount = 0; } -/* Initialize the stream by allocating the buffer and setting the read/write heads to the beginning */ -#if 0 -static int -SDL_StreamInit(SDL_AudioStreamer * stream, int max_len, Uint8 silence) + +/* The audio backends call this when a new device is plugged in. */ +void +SDL_AddAudioDevice(const int iscapture, const char *name, void *handle) { - /* First try to allocate the buffer */ - stream->buffer = (Uint8 *) SDL_malloc(max_len); - if (stream->buffer == NULL) { - return -1; + const int device_index = iscapture ? add_capture_device(name, handle) : add_output_device(name, handle); + if (device_index != -1) { + /* Post the event, if desired */ + if (SDL_GetEventState(SDL_AUDIODEVICEADDED) == SDL_ENABLE) { + SDL_Event event; + SDL_zero(event); + event.adevice.type = SDL_AUDIODEVICEADDED; + event.adevice.which = device_index; + event.adevice.iscapture = iscapture; + SDL_PushEvent(&event); + } } +} - stream->max_len = max_len; - stream->read_pos = 0; - stream->write_pos = 0; +/* The audio backends call this when a currently-opened device is lost. */ +void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device) +{ + SDL_assert(get_audio_device(device->id) == device); - /* Zero out the buffer */ - SDL_memset(stream->buffer, silence, max_len); + if (!device->enabled) { + return; + } - return 0; + /* Ends the audio callback and mark the device as STOPPED, but the + app still needs to close the device to free resources. */ + current_audio.impl.LockDevice(device); + device->enabled = 0; + current_audio.impl.UnlockDevice(device); + + /* Post the event, if desired */ + if (SDL_GetEventState(SDL_AUDIODEVICEREMOVED) == SDL_ENABLE) { + SDL_Event event; + SDL_zero(event); + event.adevice.type = SDL_AUDIODEVICEREMOVED; + event.adevice.which = device->id; + event.adevice.iscapture = device->iscapture ? 1 : 0; + SDL_PushEvent(&event); + } } -#endif -/* Deinitialize the stream simply by freeing the buffer */ static void -SDL_StreamDeinit(SDL_AudioStreamer * stream) +mark_device_removed(void *handle, SDL_AudioDeviceItem *devices, SDL_bool *removedFlag) { - SDL_free(stream->buffer); + SDL_AudioDeviceItem *item; + SDL_assert(handle != NULL); + for (item = devices; item != NULL; item = item->next) { + if (item->handle == handle) { + item->handle = NULL; + *removedFlag = SDL_TRUE; + return; + } + } } -#if defined(ANDROID) -#include -#endif - -/* The general mixing thread function */ -int SDLCALL -SDL_RunAudio(void *devicep) +/* The audio backends call this when a device is removed from the system. */ +void +SDL_RemoveAudioDevice(const int iscapture, void *handle) { - SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; - Uint8 *stream; - int stream_len; - void *udata; - void (SDLCALL * fill) (void *userdata, Uint8 * stream, int len); - Uint32 delay; - /* For streaming when the buffer sizes don't match up */ - Uint8 *istream; - int istream_len = 0; + SDL_LockMutex(current_audio.detectionLock); + if (iscapture) { + mark_device_removed(handle, current_audio.inputDevices, ¤t_audio.captureDevicesRemoved); + } else { + mark_device_removed(handle, current_audio.outputDevices, ¤t_audio.outputDevicesRemoved); + } + SDL_UnlockMutex(current_audio.detectionLock); + current_audio.impl.FreeDeviceHandle(handle); +} - /* The audio mixing is always a high priority thread */ - SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH); - /* Perform any thread setup */ - device->threadid = SDL_ThreadID(); - current_audio.impl.ThreadInit(device); - /* Set up the mixing function */ - fill = device->spec.callback; - udata = device->spec.userdata; +/* buffer queueing support... */ - /* By default do not stream */ - device->use_streamer = 0; +/* this expects that you managed thread safety elsewhere. */ +static void +free_audio_queue(SDL_AudioBufferQueue *buffer) +{ + while (buffer) { + SDL_AudioBufferQueue *next = buffer->next; + SDL_free(buffer); + buffer = next; + } +} - if (device->convert.needed) { -#if 0 /* !!! FIXME: I took len_div out of the structure. Use rate_incr instead? */ - /* If the result of the conversion alters the length, i.e. resampling is being used, use the streamer */ - if (device->convert.len_mult != 1 || device->convert.len_div != 1) { - /* The streamer's maximum length should be twice whichever is larger: spec.size or len_cvt */ - stream_max_len = 2 * device->spec.size; - if (device->convert.len_mult > device->convert.len_div) { - stream_max_len *= device->convert.len_mult; - stream_max_len /= device->convert.len_div; - } - if (SDL_StreamInit(&device->streamer, stream_max_len, silence) < - 0) - return -1; - device->use_streamer = 1; - - /* istream_len should be the length of what we grab from the callback and feed to conversion, - so that we get close to spec_size. I.e. we want device.spec_size = istream_len * u / d - */ - istream_len = - device->spec.size * device->convert.len_div / - device->convert.len_mult; +static void SDLCALL +SDL_BufferQueueDrainCallback(void *userdata, Uint8 *stream, int _len) +{ + /* this function always holds the mixer lock before being called. */ + Uint32 len = (Uint32) _len; + SDL_AudioDevice *device = (SDL_AudioDevice *) userdata; + SDL_AudioBufferQueue *buffer; + + SDL_assert(device != NULL); /* this shouldn't ever happen, right?! */ + SDL_assert(_len >= 0); /* this shouldn't ever happen, right?! */ + + while ((len > 0) && ((buffer = device->buffer_queue_head) != NULL)) { + const Uint32 avail = buffer->datalen - buffer->startpos; + const Uint32 cpy = SDL_min(len, avail); + SDL_assert(device->queued_bytes >= avail); + + SDL_memcpy(stream, buffer->data + buffer->startpos, cpy); + buffer->startpos += cpy; + stream += cpy; + device->queued_bytes -= cpy; + len -= cpy; + + if (buffer->startpos == buffer->datalen) { /* packet is done, put it in the pool. */ + device->buffer_queue_head = buffer->next; + SDL_assert((buffer->next != NULL) || (buffer == device->buffer_queue_tail)); + buffer->next = device->buffer_queue_pool; + device->buffer_queue_pool = buffer; } -#endif - stream_len = device->convert.len; - } else { - stream_len = device->spec.size; } - /* Calculate the delay while paused */ - delay = ((device->spec.samples * 1000) / device->spec.freq); - - /* Determine if the streamer is necessary here */ - if (device->use_streamer == 1) { - /* This code is almost the same as the old code. The difference is, instead of reading - directly from the callback into "stream", then converting and sending the audio off, - we go: callback -> "istream" -> (conversion) -> streamer -> stream -> device. - However, reading and writing with streamer are done separately: - - We only call the callback and write to the streamer when the streamer does not - contain enough samples to output to the device. - - We only read from the streamer and tell the device to play when the streamer - does have enough samples to output. - This allows us to perform resampling in the conversion step, where the output of the - resampling process can be any number. We will have to see what a good size for the - stream's maximum length is, but I suspect 2*max(len_cvt, stream_len) is a good figure. - */ - while (device->enabled) { - - if (device->paused) { - SDL_Delay(delay); - continue; - } + SDL_assert((device->buffer_queue_head != NULL) == (device->queued_bytes != 0)); - /* Only read in audio if the streamer doesn't have enough already (if it does not have enough samples to output) */ - if (SDL_StreamLength(&device->streamer) < stream_len) { - /* Set up istream */ - if (device->convert.needed) { - if (device->convert.buf) { - istream = device->convert.buf; - } else { - continue; - } - } else { -/* FIXME: Ryan, this is probably wrong. I imagine we don't want to get - * a device buffer both here and below in the stream output. - */ - istream = current_audio.impl.GetDeviceBuf(device); - if (istream == NULL) { - istream = device->fake_stream; - } - } + if (len > 0) { /* fill any remaining space in the stream with silence. */ + SDL_assert(device->buffer_queue_head == NULL); + SDL_memset(stream, device->spec.silence, len); + } - /* Read from the callback into the _input_ stream */ - SDL_LockMutex(device->mixer_lock); - (*fill) (udata, istream, istream_len); - SDL_UnlockMutex(device->mixer_lock); + if (device->buffer_queue_head == NULL) { + device->buffer_queue_tail = NULL; /* in case we drained the queue entirely. */ + } +} - /* Convert the audio if necessary and write to the streamer */ - if (device->convert.needed) { - SDL_ConvertAudio(&device->convert); - if (istream == NULL) { - istream = device->fake_stream; - } - /* SDL_memcpy(istream, device->convert.buf, device->convert.len_cvt); */ - SDL_StreamWrite(&device->streamer, device->convert.buf, - device->convert.len_cvt); - } else { - SDL_StreamWrite(&device->streamer, istream, istream_len); - } - } +int +SDL_QueueAudio(SDL_AudioDeviceID devid, const void *_data, Uint32 len) +{ + SDL_AudioDevice *device = get_audio_device(devid); + const Uint8 *data = (const Uint8 *) _data; + SDL_AudioBufferQueue *orighead; + SDL_AudioBufferQueue *origtail; + Uint32 origlen; + Uint32 datalen; + + if (!device) { + return -1; /* get_audio_device() will have set the error state */ + } + + if (device->spec.callback != SDL_BufferQueueDrainCallback) { + return SDL_SetError("Audio device has a callback, queueing not allowed"); + } + + current_audio.impl.LockDevice(device); + + orighead = device->buffer_queue_head; + origtail = device->buffer_queue_tail; + origlen = origtail ? origtail->datalen : 0; - /* Only output audio if the streamer has enough to output */ - if (SDL_StreamLength(&device->streamer) >= stream_len) { - /* Set up the output stream */ - if (device->convert.needed) { - if (device->convert.buf) { - stream = device->convert.buf; + while (len > 0) { + SDL_AudioBufferQueue *packet = device->buffer_queue_tail; + SDL_assert(!packet || (packet->datalen <= SDL_AUDIOBUFFERQUEUE_PACKETLEN)); + if (!packet || (packet->datalen >= SDL_AUDIOBUFFERQUEUE_PACKETLEN)) { + /* tail packet missing or completely full; we need a new packet. */ + packet = device->buffer_queue_pool; + if (packet != NULL) { + /* we have one available in the pool. */ + device->buffer_queue_pool = packet->next; + } else { + /* Have to allocate a new one! */ + packet = (SDL_AudioBufferQueue *) SDL_malloc(sizeof (SDL_AudioBufferQueue)); + if (packet == NULL) { + /* uhoh, reset so we've queued nothing new, free what we can. */ + if (!origtail) { + packet = device->buffer_queue_head; /* whole queue. */ } else { - continue; - } - } else { - stream = current_audio.impl.GetDeviceBuf(device); - if (stream == NULL) { - stream = device->fake_stream; + packet = origtail->next; /* what we added to existing queue. */ + origtail->next = NULL; + origtail->datalen = origlen; } - } + device->buffer_queue_head = orighead; + device->buffer_queue_tail = origtail; + device->buffer_queue_pool = NULL; + + current_audio.impl.UnlockDevice(device); - /* Now read from the streamer */ - SDL_StreamRead(&device->streamer, stream, stream_len); + free_audio_queue(packet); /* give back what we can. */ - /* Ready current buffer for play and change current buffer */ - if (stream != device->fake_stream) { - current_audio.impl.PlayDevice(device); - /* Wait for an audio buffer to become available */ - current_audio.impl.WaitDevice(device); - } else { - SDL_Delay(delay); + return SDL_OutOfMemory(); } } + packet->datalen = 0; + packet->startpos = 0; + packet->next = NULL; - } - } else { - /* Otherwise, do not use the streamer. This is the old code. */ - const int silence = (int) device->spec.silence; - - /* Loop, filling the audio buffers */ - while (device->enabled) { - - /* Fill the current buffer with sound */ - if (device->convert.needed) { - if (device->convert.buf) { - stream = device->convert.buf; - } else { - continue; - } + SDL_assert((device->buffer_queue_head != NULL) == (device->queued_bytes != 0)); + if (device->buffer_queue_tail == NULL) { + device->buffer_queue_head = packet; } else { - stream = current_audio.impl.GetDeviceBuf(device); - if (stream == NULL) { - stream = device->fake_stream; - } + device->buffer_queue_tail->next = packet; } + device->buffer_queue_tail = packet; + } + + datalen = SDL_min(len, SDL_AUDIOBUFFERQUEUE_PACKETLEN - packet->datalen); + SDL_memcpy(packet->data + packet->datalen, data, datalen); + data += datalen; + len -= datalen; + packet->datalen += datalen; + device->queued_bytes += datalen; + } + + current_audio.impl.UnlockDevice(device); + + return 0; +} + +Uint32 +SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid) +{ + Uint32 retval = 0; + SDL_AudioDevice *device = get_audio_device(devid); + + /* Nothing to do unless we're set up for queueing. */ + if (device && (device->spec.callback == SDL_BufferQueueDrainCallback)) { + current_audio.impl.LockDevice(device); + retval = device->queued_bytes + current_audio.impl.GetPendingBytes(device); + current_audio.impl.UnlockDevice(device); + } + + return retval; +} - SDL_LockMutex(device->mixer_lock); - if (device->paused) { - SDL_memset(stream, silence, stream_len); +void +SDL_ClearQueuedAudio(SDL_AudioDeviceID devid) +{ + SDL_AudioDevice *device = get_audio_device(devid); + SDL_AudioBufferQueue *buffer = NULL; + if (!device) { + return; /* nothing to do. */ + } + + /* Blank out the device and release the mutex. Free it afterwards. */ + current_audio.impl.LockDevice(device); + buffer = device->buffer_queue_head; + device->buffer_queue_tail = NULL; + device->buffer_queue_head = NULL; + device->queued_bytes = 0; + current_audio.impl.UnlockDevice(device); + + free_audio_queue(buffer); +} + + +/* The general mixing thread function */ +int SDLCALL +SDL_RunAudio(void *devicep) +{ + SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; + const int silence = (int) device->spec.silence; + const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); + const int stream_len = (device->convert.needed) ? device->convert.len : device->spec.size; + Uint8 *stream; + void *udata = device->spec.userdata; + void (SDLCALL *fill) (void *, Uint8 *, int) = device->spec.callback; + + /* The audio mixing is always a high priority thread */ + SDL_SetThreadPriority(SDL_THREAD_PRIORITY_HIGH); + + /* Perform any thread setup */ + device->threadid = SDL_ThreadID(); + current_audio.impl.ThreadInit(device); + + /* Loop, filling the audio buffers */ + while (!device->shutdown) { + /* Fill the current buffer with sound */ + if (device->convert.needed) { + stream = device->convert.buf; + } else if (device->enabled) { + stream = current_audio.impl.GetDeviceBuf(device); + } else { + /* if the device isn't enabled, we still write to the + fake_stream, so the app's callback will fire with + a regular frequency, in case they depend on that + for timing or progress. They can use hotplug + now to know if the device failed. */ + stream = NULL; + } + + if (stream == NULL) { + stream = device->fake_stream; + } + + /* !!! FIXME: this should be LockDevice. */ + SDL_LockMutex(device->mixer_lock); + if (device->paused) { + SDL_memset(stream, silence, stream_len); + } else { + (*fill) (udata, stream, stream_len); + } + SDL_UnlockMutex(device->mixer_lock); + + /* Convert the audio if necessary */ + if (device->enabled && device->convert.needed) { + SDL_ConvertAudio(&device->convert); + stream = current_audio.impl.GetDeviceBuf(device); + if (stream == NULL) { + stream = device->fake_stream; } else { - (*fill) (udata, stream, stream_len); - } - SDL_UnlockMutex(device->mixer_lock); - - /* Convert the audio if necessary */ - if (device->convert.needed) { - SDL_ConvertAudio(&device->convert); - stream = current_audio.impl.GetDeviceBuf(device); - if (stream == NULL) { - stream = device->fake_stream; - } SDL_memcpy(stream, device->convert.buf, device->convert.len_cvt); } + } - /* Ready current buffer for play and change current buffer */ - if (stream != device->fake_stream) { - current_audio.impl.PlayDevice(device); - /* Wait for an audio buffer to become available */ - current_audio.impl.WaitDevice(device); - } else { - SDL_Delay(delay); - } + /* Ready current buffer for play and change current buffer */ + if (stream == device->fake_stream) { + SDL_Delay(delay); + } else { + current_audio.impl.PlayDevice(device); + current_audio.impl.WaitDevice(device); } } - /* Wait for the audio to drain.. */ + /* Wait for the audio to drain. */ current_audio.impl.WaitDone(device); - /* If necessary, deinit the streamer */ - if (device->use_streamer == 1) - SDL_StreamDeinit(&device->streamer); - - return (0); + return 0; } @@ -546,16 +695,16 @@ SDL_ParseAudioFormat(const char *string) int SDL_GetNumAudioDrivers(void) { - return (SDL_arraysize(bootstrap) - 1); + return SDL_arraysize(bootstrap) - 1; } const char * SDL_GetAudioDriver(int index) { if (index >= 0 && index < SDL_GetNumAudioDrivers()) { - return (bootstrap[index]->name); + return bootstrap[index]->name; } - return (NULL); + return NULL; } int @@ -569,8 +718,8 @@ SDL_AudioInit(const char *driver_name) SDL_AudioQuit(); /* shutdown driver if already running. */ } - SDL_memset(¤t_audio, '\0', sizeof(current_audio)); - SDL_memset(open_devices, '\0', sizeof(open_devices)); + SDL_zero(current_audio); + SDL_zero(open_devices); /* Select the proper audio driver */ if (driver_name == NULL) { @@ -586,7 +735,7 @@ SDL_AudioInit(const char *driver_name) } tried_to_init = 1; - SDL_memset(¤t_audio, 0, sizeof(current_audio)); + SDL_zero(current_audio); current_audio.name = backend->name; current_audio.desc = backend->desc; initialized = backend->init(¤t_audio.impl); @@ -602,13 +751,18 @@ SDL_AudioInit(const char *driver_name) } } - SDL_memset(¤t_audio, 0, sizeof(current_audio)); - return (-1); /* No driver was available, so fail. */ + SDL_zero(current_audio); + return -1; /* No driver was available, so fail. */ } + current_audio.detectionLock = SDL_CreateMutex(); + finalize_audio_entry_points(); - return (0); + /* Make sure we have a list of devices available at startup. */ + current_audio.impl.DetectDevices(); + + return 0; } /* @@ -620,50 +774,32 @@ SDL_GetCurrentAudioDriver() return current_audio.name; } +/* Clean out devices that we've removed but had to keep around for stability. */ static void -free_device_list(char ***devices, int *devCount) +clean_out_device_list(SDL_AudioDeviceItem **devices, int *devCount, SDL_bool *removedFlag) { - int i = *devCount; - if ((i > 0) && (*devices != NULL)) { - while (i--) { - SDL_free((*devices)[i]); + SDL_AudioDeviceItem *item = *devices; + SDL_AudioDeviceItem *prev = NULL; + int total = 0; + + while (item) { + SDL_AudioDeviceItem *next = item->next; + if (item->handle != NULL) { + total++; + prev = item; + } else { + if (prev) { + prev->next = next; + } else { + *devices = next; + } + SDL_free(item); } + item = next; } - SDL_free(*devices); - - *devices = NULL; - *devCount = 0; -} - -static -void SDL_AddCaptureAudioDevice(const char *_name) -{ - char *name = NULL; - void *ptr = SDL_realloc(current_audio.inputDevices, - (current_audio.inputDeviceCount+1) * sizeof(char*)); - if (ptr == NULL) { - return; /* oh well. */ - } - - current_audio.inputDevices = (char **) ptr; - name = SDL_strdup(_name); /* if this returns NULL, that's okay. */ - current_audio.inputDevices[current_audio.inputDeviceCount++] = name; -} - -static -void SDL_AddOutputAudioDevice(const char *_name) -{ - char *name = NULL; - void *ptr = SDL_realloc(current_audio.outputDevices, - (current_audio.outputDeviceCount+1) * sizeof(char*)); - if (ptr == NULL) { - return; /* oh well. */ - } - - current_audio.outputDevices = (char **) ptr; - name = SDL_strdup(_name); /* if this returns NULL, that's okay. */ - current_audio.outputDevices[current_audio.outputDeviceCount++] = name; + *devCount = total; + *removedFlag = SDL_FALSE; } @@ -676,29 +812,18 @@ SDL_GetNumAudioDevices(int iscapture) return -1; } - if ((iscapture) && (!current_audio.impl.HasCaptureSupport)) { - return 0; - } - - if ((iscapture) && (current_audio.impl.OnlyHasDefaultInputDevice)) { - return 1; + SDL_LockMutex(current_audio.detectionLock); + if (iscapture && current_audio.captureDevicesRemoved) { + clean_out_device_list(¤t_audio.inputDevices, ¤t_audio.inputDeviceCount, ¤t_audio.captureDevicesRemoved); } - if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { - return 1; + if (!iscapture && current_audio.outputDevicesRemoved) { + clean_out_device_list(¤t_audio.outputDevices, ¤t_audio.outputDeviceCount, ¤t_audio.outputDevicesRemoved); + current_audio.outputDevicesRemoved = SDL_FALSE; } - if (iscapture) { - free_device_list(¤t_audio.inputDevices, - ¤t_audio.inputDeviceCount); - current_audio.impl.DetectDevices(iscapture, SDL_AddCaptureAudioDevice); - retval = current_audio.inputDeviceCount; - } else { - free_device_list(¤t_audio.outputDevices, - ¤t_audio.outputDeviceCount); - current_audio.impl.DetectDevices(iscapture, SDL_AddOutputAudioDevice); - retval = current_audio.outputDeviceCount; - } + retval = iscapture ? current_audio.inputDeviceCount : current_audio.outputDeviceCount; + SDL_UnlockMutex(current_audio.detectionLock); return retval; } @@ -707,6 +832,8 @@ SDL_GetNumAudioDevices(int iscapture) const char * SDL_GetAudioDeviceName(int index, int iscapture) { + const char *retval = NULL; + if (!SDL_WasInit(SDL_INIT_AUDIO)) { SDL_SetError("Audio subsystem is not initialized"); return NULL; @@ -717,39 +844,28 @@ SDL_GetAudioDeviceName(int index, int iscapture) return NULL; } - if (index < 0) { - goto no_such_device; - } + if (index >= 0) { + SDL_AudioDeviceItem *item; + int i; - if ((iscapture) && (current_audio.impl.OnlyHasDefaultInputDevice)) { - if (index > 0) { - goto no_such_device; + SDL_LockMutex(current_audio.detectionLock); + item = iscapture ? current_audio.inputDevices : current_audio.outputDevices; + i = iscapture ? current_audio.inputDeviceCount : current_audio.outputDeviceCount; + if (index < i) { + for (i--; i > index; i--, item = item->next) { + SDL_assert(item != NULL); + } + SDL_assert(item != NULL); + retval = item->name; } - return DEFAULT_INPUT_DEVNAME; + SDL_UnlockMutex(current_audio.detectionLock); } - if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { - if (index > 0) { - goto no_such_device; - } - return DEFAULT_OUTPUT_DEVNAME; + if (retval == NULL) { + SDL_SetError("No such device"); } - if (iscapture) { - if (index >= current_audio.inputDeviceCount) { - goto no_such_device; - } - return current_audio.inputDevices[index]; - } else { - if (index >= current_audio.outputDeviceCount) { - goto no_such_device; - } - return current_audio.outputDevices[index]; - } - -no_such_device: - SDL_SetError("No such device"); - return NULL; + return retval; } @@ -757,6 +873,7 @@ static void close_audio_device(SDL_AudioDevice * device) { device->enabled = 0; + device->shutdown = 1; if (device->thread != NULL) { SDL_WaitThread(device->thread, NULL); } @@ -771,6 +888,10 @@ close_audio_device(SDL_AudioDevice * device) current_audio.impl.CloseDevice(device); device->opened = 0; } + + free_audio_queue(device->buffer_queue_head); + free_audio_queue(device->buffer_queue_pool); + SDL_FreeAudioMem(device); } @@ -785,11 +906,6 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) { SDL_memcpy(prepared, orig, sizeof(SDL_AudioSpec)); - if (orig->callback == NULL) { - SDL_SetError("SDL_OpenAudio() passed a NULL callback"); - return 0; - } - if (orig->freq == 0) { const char *env = SDL_getenv("SDL_AUDIO_FREQUENCY"); if ((!env) || ((prepared->freq = SDL_atoi(env)) == 0)) { @@ -842,7 +958,6 @@ prepare_audiospec(const SDL_AudioSpec * orig, SDL_AudioSpec * prepared) return 1; } - static SDL_AudioDeviceID open_audio_device(const char *devname, int iscapture, const SDL_AudioSpec * desired, SDL_AudioSpec * obtained, @@ -852,6 +967,8 @@ open_audio_device(const char *devname, int iscapture, SDL_AudioSpec _obtained; SDL_AudioDevice *device; SDL_bool build_cvt; + void *handle = NULL; + Uint32 stream_len; int i = 0; if (!SDL_WasInit(SDL_INIT_AUDIO)) { @@ -864,6 +981,18 @@ open_audio_device(const char *devname, int iscapture, return 0; } + /* Find an available device ID... */ + for (id = min_id - 1; id < SDL_arraysize(open_devices); id++) { + if (open_devices[id] == NULL) { + break; + } + } + + if (id == SDL_arraysize(open_devices)) { + SDL_SetError("Too many open audio devices"); + return 0; + } + if (!obtained) { obtained = &_obtained; } @@ -899,9 +1028,7 @@ open_audio_device(const char *devname, int iscapture, return 0; } } - } - - if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { + } else if ((!iscapture) && (current_audio.impl.OnlyHasDefaultOutputDevice)) { if ((devname) && (SDL_strcmp(devname, DEFAULT_OUTPUT_DEVNAME) != 0)) { SDL_SetError("No such device"); return 0; @@ -914,6 +1041,30 @@ open_audio_device(const char *devname, int iscapture, return 0; } } + } else if (devname != NULL) { + /* if the app specifies an exact string, we can pass the backend + an actual device handle thingey, which saves them the effort of + figuring out what device this was (such as, reenumerating + everything again to find the matching human-readable name). + It might still need to open a device based on the string for, + say, a network audio server, but this optimizes some cases. */ + SDL_AudioDeviceItem *item; + SDL_LockMutex(current_audio.detectionLock); + for (item = iscapture ? current_audio.inputDevices : current_audio.outputDevices; item; item = item->next) { + if ((item->handle != NULL) && (SDL_strcmp(item->name, devname) == 0)) { + handle = item->handle; + break; + } + } + SDL_UnlockMutex(current_audio.detectionLock); + } + + if (!current_audio.impl.AllowsArbitraryDeviceNames) { + /* has to be in our device list, or the default device. */ + if ((handle == NULL) && (devname != NULL)) { + SDL_SetError("No such device."); + return 0; + } } device = (SDL_AudioDevice *) SDL_AllocAudioMem(sizeof(SDL_AudioDevice)); @@ -921,13 +1072,14 @@ open_audio_device(const char *devname, int iscapture, SDL_OutOfMemory(); return 0; } - SDL_memset(device, '\0', sizeof(SDL_AudioDevice)); + SDL_zerop(device); + device->id = id + 1; device->spec = *obtained; device->enabled = 1; device->paused = 1; device->iscapture = iscapture; - /* Create a semaphore for locking the sound buffers */ + /* Create a mutex for locking the sound buffers */ if (!current_audio.impl.SkipMixerLock) { device->mixer_lock = SDL_CreateMutex(); if (device->mixer_lock == NULL) { @@ -937,25 +1089,12 @@ open_audio_device(const char *devname, int iscapture, } } - /* force a device detection if we haven't done one yet. */ - if ( ((iscapture) && (current_audio.inputDevices == NULL)) || - ((!iscapture) && (current_audio.outputDevices == NULL)) ) - SDL_GetNumAudioDevices(iscapture); - - if (current_audio.impl.OpenDevice(device, devname, iscapture) < 0) { + if (current_audio.impl.OpenDevice(device, handle, devname, iscapture) < 0) { close_audio_device(device); return 0; } device->opened = 1; - /* Allocate a fake audio memory buffer */ - device->fake_stream = (Uint8 *)SDL_AllocAudioMem(device->spec.size); - if (device->fake_stream == NULL) { - close_audio_device(device); - SDL_OutOfMemory(); - return 0; - } - /* See if we need to do any conversion */ build_cvt = SDL_FALSE; if (obtained->freq != device->spec.freq) { @@ -1014,25 +1153,46 @@ open_audio_device(const char *devname, int iscapture, } } - /* Find an available device ID and store the structure... */ - for (id = min_id - 1; id < SDL_arraysize(open_devices); id++) { - if (open_devices[id] == NULL) { - open_devices[id] = device; - break; - } + /* Allocate a fake audio memory buffer */ + stream_len = (device->convert.needed) ? device->convert.len_cvt : 0; + if (device->spec.size > stream_len) { + stream_len = device->spec.size; } - - if (id == SDL_arraysize(open_devices)) { - SDL_SetError("Too many open audio devices"); + SDL_assert(stream_len > 0); + device->fake_stream = (Uint8 *)SDL_AllocAudioMem(stream_len); + if (device->fake_stream == NULL) { close_audio_device(device); + SDL_OutOfMemory(); return 0; } + if (device->spec.callback == NULL) { /* use buffer queueing? */ + /* pool a few packets to start. Enough for two callbacks. */ + const int packetlen = SDL_AUDIOBUFFERQUEUE_PACKETLEN; + const int wantbytes = ((device->convert.needed) ? device->convert.len : device->spec.size) * 2; + const int wantpackets = (wantbytes / packetlen) + ((wantbytes % packetlen) ? packetlen : 0); + for (i = 0; i < wantpackets; i++) { + SDL_AudioBufferQueue *packet = (SDL_AudioBufferQueue *) SDL_malloc(sizeof (SDL_AudioBufferQueue)); + if (packet) { /* don't care if this fails, we'll deal later. */ + packet->datalen = 0; + packet->startpos = 0; + packet->next = device->buffer_queue_pool; + device->buffer_queue_pool = packet; + } + } + + device->spec.callback = SDL_BufferQueueDrainCallback; + device->spec.userdata = device; + } + + /* add it to our list of open devices. */ + open_devices[id] = device; + /* Start the audio thread if necessary */ if (!current_audio.impl.ProvidesOwnCallbackThread) { /* Start the audio thread */ char name[64]; - SDL_snprintf(name, sizeof (name), "SDLAudioDev%d", (int) (id + 1)); + SDL_snprintf(name, sizeof (name), "SDLAudioDev%d", (int) device->id); /* !!! FIXME: this is nasty. */ #if defined(__WIN32__) && !defined(HAVE_LIBC) #undef SDL_CreateThread @@ -1045,13 +1205,13 @@ open_audio_device(const char *devname, int iscapture, device->thread = SDL_CreateThread(SDL_RunAudio, name, device); #endif if (device->thread == NULL) { - SDL_CloseAudioDevice(id + 1); + SDL_CloseAudioDevice(device->id); SDL_SetError("Couldn't create audio thread"); return 0; } } - return id + 1; + return device->id; } @@ -1063,25 +1223,25 @@ SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained) /* Start up the audio driver, if necessary. This is legacy behaviour! */ if (!SDL_WasInit(SDL_INIT_AUDIO)) { if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { - return (-1); + return -1; } } /* SDL_OpenAudio() is legacy and can only act on Device ID #1. */ if (open_devices[0] != NULL) { SDL_SetError("Audio device is already opened"); - return (-1); + return -1; } if (obtained) { id = open_audio_device(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE, 1); } else { - id = open_audio_device(NULL, 0, desired, desired, 0, 1); + id = open_audio_device(NULL, 0, desired, NULL, 0, 1); } SDL_assert((id == 0) || (id == 1)); - return ((id == 0) ? -1 : 0); + return (id == 0) ? -1 : 0; } SDL_AudioDeviceID @@ -1105,7 +1265,7 @@ SDL_GetAudioDeviceStatus(SDL_AudioDeviceID devid) status = SDL_AUDIO_PLAYING; } } - return (status); + return status; } @@ -1196,14 +1356,16 @@ SDL_AudioQuit(void) } } + free_device_list(¤t_audio.outputDevices, ¤t_audio.outputDeviceCount); + free_device_list(¤t_audio.inputDevices, ¤t_audio.inputDeviceCount); + /* Free the driver data */ current_audio.impl.Deinitialize(); - free_device_list(¤t_audio.outputDevices, - ¤t_audio.outputDeviceCount); - free_device_list(¤t_audio.inputDevices, - ¤t_audio.inputDeviceCount); - SDL_memset(¤t_audio, '\0', sizeof(current_audio)); - SDL_memset(open_devices, '\0', sizeof(open_devices)); + + SDL_DestroyMutex(current_audio.detectionLock); + + SDL_zero(current_audio); + SDL_zero(open_devices); } #define NUM_FORMATS 10 @@ -1241,16 +1403,16 @@ SDL_FirstAudioFormat(SDL_AudioFormat format) } } format_idx_sub = 0; - return (SDL_NextAudioFormat()); + return SDL_NextAudioFormat(); } SDL_AudioFormat SDL_NextAudioFormat(void) { if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) { - return (0); + return 0; } - return (format_list[format_idx][format_idx_sub++]); + return format_list[format_idx][format_idx_sub++]; } void diff --git a/Engine/lib/sdl/src/audio/SDL_audio_c.h b/Engine/lib/sdl/src/audio/SDL_audio_c.h index 2ea4e148cf..b03a9156f6 100644 --- a/Engine/lib/sdl/src/audio/SDL_audio_c.h +++ b/Engine/lib/sdl/src/audio/SDL_audio_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/SDL_audiocvt.c b/Engine/lib/sdl/src/audio/SDL_audiocvt.c index 518735bfcc..3b47c4cbcc 100644 --- a/Engine/lib/sdl/src/audio/SDL_audiocvt.c +++ b/Engine/lib/sdl/src/audio/SDL_audiocvt.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/SDL_audiodev.c b/Engine/lib/sdl/src/audio/SDL_audiodev.c index e9af621195..5c392cfb72 100644 --- a/Engine/lib/sdl/src/audio/SDL_audiodev.c +++ b/Engine/lib/sdl/src/audio/SDL_audiodev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -46,18 +46,21 @@ #define _PATH_DEV_AUDIO "/dev/audio" #endif -static SDL_INLINE void -test_device(const char *fname, int flags, int (*test) (int fd), - SDL_AddAudioDevice addfn) +static void +test_device(const int iscapture, const char *fname, int flags, int (*test) (int fd)) { struct stat sb; if ((stat(fname, &sb) == 0) && (S_ISCHR(sb.st_mode))) { const int audio_fd = open(fname, flags, 0); if (audio_fd >= 0) { - if (test(audio_fd)) { - addfn(fname); - } + const int okay = test(audio_fd); close(audio_fd); + if (okay) { + static size_t dummyhandle = 0; + dummyhandle++; + SDL_assert(dummyhandle != 0); + SDL_AddAudioDevice(iscapture, fname, (void *) dummyhandle); + } } } } @@ -68,11 +71,10 @@ test_stub(int fd) return 1; } -void -SDL_EnumUnixAudioDevices(int iscapture, int classic, int (*test)(int fd), - SDL_AddAudioDevice addfn) +static void +SDL_EnumUnixAudioDevices_Internal(const int iscapture, const int classic, int (*test)(int)) { - const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); + const int flags = iscapture ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT; const char *audiodev; char audiopath[1024]; @@ -97,17 +99,25 @@ SDL_EnumUnixAudioDevices(int iscapture, int classic, int (*test)(int fd), } } } - test_device(audiodev, flags, test, addfn); + test_device(iscapture, audiodev, flags, test); if (SDL_strlen(audiodev) < (sizeof(audiopath) - 3)) { int instance = 0; while (instance++ <= 64) { SDL_snprintf(audiopath, SDL_arraysize(audiopath), "%s%d", audiodev, instance); - test_device(audiopath, flags, test, addfn); + test_device(iscapture, audiopath, flags, test); } } } +void +SDL_EnumUnixAudioDevices(const int classic, int (*test)(int)) +{ + SDL_EnumUnixAudioDevices_Internal(SDL_TRUE, classic, test); + SDL_EnumUnixAudioDevices_Internal(SDL_FALSE, classic, test); +} + #endif /* Audio driver selection */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/SDL_audiodev_c.h b/Engine/lib/sdl/src/audio/SDL_audiodev_c.h index 1ad0dc1015..fa60bcdb17 100644 --- a/Engine/lib/sdl/src/audio/SDL_audiodev_c.h +++ b/Engine/lib/sdl/src/audio/SDL_audiodev_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,7 +33,6 @@ #define OPEN_FLAGS_INPUT (O_RDONLY|O_NONBLOCK) #endif -void SDL_EnumUnixAudioDevices(int iscapture, int classic, - int (*test) (int fd), SDL_AddAudioDevice addfn); +extern void SDL_EnumUnixAudioDevices(const int classic, int (*test)(int)); /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/SDL_audiomem.h b/Engine/lib/sdl/src/audio/SDL_audiomem.h index 3711ac9450..091d15c298 100644 --- a/Engine/lib/sdl/src/audio/SDL_audiomem.h +++ b/Engine/lib/sdl/src/audio/SDL_audiomem.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/SDL_audiotypecvt.c b/Engine/lib/sdl/src/audio/SDL_audiotypecvt.c index 18e2277364..be3b7430aa 100644 --- a/Engine/lib/sdl/src/audio/SDL_audiotypecvt.c +++ b/Engine/lib/sdl/src/audio/SDL_audiotypecvt.c @@ -1,7 +1,7 @@ /* DO NOT EDIT! This file is generated by sdlgenaudiocvt.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -2300,7 +2300,7 @@ SDL_Upsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 16; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1; register int eps = 0; Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 1; const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -2332,7 +2332,7 @@ SDL_Downsample_U8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 16; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1; register int eps = 0; Uint8 *dst = (Uint8 *) cvt->buf; const Uint8 *src = (Uint8 *) cvt->buf; @@ -2364,7 +2364,7 @@ SDL_Upsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 2; const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -2401,7 +2401,7 @@ SDL_Downsample_U8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint8 *dst = (Uint8 *) cvt->buf; const Uint8 *src = (Uint8 *) cvt->buf; @@ -2438,7 +2438,7 @@ SDL_Upsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 4; const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -2485,7 +2485,7 @@ SDL_Downsample_U8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint8 *dst = (Uint8 *) cvt->buf; const Uint8 *src = (Uint8 *) cvt->buf; @@ -2532,7 +2532,7 @@ SDL_Upsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 96; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6; register int eps = 0; Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 6; const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -2589,7 +2589,7 @@ SDL_Downsample_U8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 96; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6; register int eps = 0; Uint8 *dst = (Uint8 *) cvt->buf; const Uint8 *src = (Uint8 *) cvt->buf; @@ -2646,7 +2646,7 @@ SDL_Upsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint8 *dst = ((Uint8 *) (cvt->buf + dstsize)) - 8; const Uint8 *src = ((Uint8 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -2713,7 +2713,7 @@ SDL_Downsample_U8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint8 *dst = (Uint8 *) cvt->buf; const Uint8 *src = (Uint8 *) cvt->buf; @@ -2780,7 +2780,7 @@ SDL_Upsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 16; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1; register int eps = 0; Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 1; const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -2812,7 +2812,7 @@ SDL_Downsample_S8_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 16; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/1)) * cvt->rate_incr) * 1; register int eps = 0; Sint8 *dst = (Sint8 *) cvt->buf; const Sint8 *src = (Sint8 *) cvt->buf; @@ -2844,7 +2844,7 @@ SDL_Upsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 2; const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -2881,7 +2881,7 @@ SDL_Downsample_S8_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint8 *dst = (Sint8 *) cvt->buf; const Sint8 *src = (Sint8 *) cvt->buf; @@ -2918,7 +2918,7 @@ SDL_Upsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 4; const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -2965,7 +2965,7 @@ SDL_Downsample_S8_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint8 *dst = (Sint8 *) cvt->buf; const Sint8 *src = (Sint8 *) cvt->buf; @@ -3012,7 +3012,7 @@ SDL_Upsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 96; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6; register int eps = 0; Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 6; const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -3069,7 +3069,7 @@ SDL_Downsample_S8_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 96; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/6)) * cvt->rate_incr) * 6; register int eps = 0; Sint8 *dst = (Sint8 *) cvt->buf; const Sint8 *src = (Sint8 *) cvt->buf; @@ -3126,7 +3126,7 @@ SDL_Upsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint8 *dst = ((Sint8 *) (cvt->buf + dstsize)) - 8; const Sint8 *src = ((Sint8 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -3193,7 +3193,7 @@ SDL_Downsample_S8_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint8 *dst = (Sint8 *) cvt->buf; const Sint8 *src = (Sint8 *) cvt->buf; @@ -3260,7 +3260,7 @@ SDL_Upsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -3292,7 +3292,7 @@ SDL_Downsample_U16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -3324,7 +3324,7 @@ SDL_Upsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -3361,7 +3361,7 @@ SDL_Downsample_U16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -3398,7 +3398,7 @@ SDL_Upsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -3445,7 +3445,7 @@ SDL_Downsample_U16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -3492,7 +3492,7 @@ SDL_Upsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -3549,7 +3549,7 @@ SDL_Downsample_U16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -3606,7 +3606,7 @@ SDL_Upsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -3673,7 +3673,7 @@ SDL_Downsample_U16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -3740,7 +3740,7 @@ SDL_Upsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -3772,7 +3772,7 @@ SDL_Downsample_S16LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -3804,7 +3804,7 @@ SDL_Upsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -3841,7 +3841,7 @@ SDL_Downsample_S16LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -3878,7 +3878,7 @@ SDL_Upsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -3925,7 +3925,7 @@ SDL_Downsample_S16LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -3972,7 +3972,7 @@ SDL_Upsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -4029,7 +4029,7 @@ SDL_Downsample_S16LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -4086,7 +4086,7 @@ SDL_Upsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -4153,7 +4153,7 @@ SDL_Downsample_S16LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -4220,7 +4220,7 @@ SDL_Upsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 1; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -4252,7 +4252,7 @@ SDL_Downsample_U16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -4284,7 +4284,7 @@ SDL_Upsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 2; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -4321,7 +4321,7 @@ SDL_Downsample_U16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -4358,7 +4358,7 @@ SDL_Upsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 4; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -4405,7 +4405,7 @@ SDL_Downsample_U16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -4452,7 +4452,7 @@ SDL_Upsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 6; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -4509,7 +4509,7 @@ SDL_Downsample_U16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -4566,7 +4566,7 @@ SDL_Upsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Uint16 *dst = ((Uint16 *) (cvt->buf + dstsize)) - 8; const Uint16 *src = ((Uint16 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -4633,7 +4633,7 @@ SDL_Downsample_U16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Uint16 *dst = (Uint16 *) cvt->buf; const Uint16 *src = (Uint16 *) cvt->buf; @@ -4700,7 +4700,7 @@ SDL_Upsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 1; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -4732,7 +4732,7 @@ SDL_Downsample_S16MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 32; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/2)) * cvt->rate_incr) * 2; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -4764,7 +4764,7 @@ SDL_Upsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 2; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -4801,7 +4801,7 @@ SDL_Downsample_S16MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -4838,7 +4838,7 @@ SDL_Upsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 4; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -4885,7 +4885,7 @@ SDL_Downsample_S16MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -4932,7 +4932,7 @@ SDL_Upsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 6; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -4989,7 +4989,7 @@ SDL_Downsample_S16MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 192; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/12)) * cvt->rate_incr) * 12; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -5046,7 +5046,7 @@ SDL_Upsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint16 *dst = ((Sint16 *) (cvt->buf + dstsize)) - 8; const Sint16 *src = ((Sint16 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -5113,7 +5113,7 @@ SDL_Downsample_S16MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint16 *dst = (Sint16 *) cvt->buf; const Sint16 *src = (Sint16 *) cvt->buf; @@ -5180,7 +5180,7 @@ SDL_Upsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -5212,7 +5212,7 @@ SDL_Downsample_S32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5244,7 +5244,7 @@ SDL_Upsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -5281,7 +5281,7 @@ SDL_Downsample_S32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5318,7 +5318,7 @@ SDL_Upsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -5365,7 +5365,7 @@ SDL_Downsample_S32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5412,7 +5412,7 @@ SDL_Upsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -5469,7 +5469,7 @@ SDL_Downsample_S32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5526,7 +5526,7 @@ SDL_Upsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -5593,7 +5593,7 @@ SDL_Downsample_S32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5660,7 +5660,7 @@ SDL_Upsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 1; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 1; @@ -5692,7 +5692,7 @@ SDL_Downsample_S32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5724,7 +5724,7 @@ SDL_Upsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 2; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 2; @@ -5761,7 +5761,7 @@ SDL_Downsample_S32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5798,7 +5798,7 @@ SDL_Upsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 4; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 4; @@ -5845,7 +5845,7 @@ SDL_Downsample_S32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -5892,7 +5892,7 @@ SDL_Upsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 6; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 6; @@ -5949,7 +5949,7 @@ SDL_Downsample_S32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -6006,7 +6006,7 @@ SDL_Upsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; Sint32 *dst = ((Sint32 *) (cvt->buf + dstsize)) - 8; const Sint32 *src = ((Sint32 *) (cvt->buf + cvt->len_cvt)) - 8; @@ -6073,7 +6073,7 @@ SDL_Downsample_S32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; Sint32 *dst = (Sint32 *) cvt->buf; const Sint32 *src = (Sint32 *) cvt->buf; @@ -6140,7 +6140,7 @@ SDL_Upsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 1; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1; @@ -6172,7 +6172,7 @@ SDL_Downsample_F32LSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6204,7 +6204,7 @@ SDL_Upsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 2; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2; @@ -6241,7 +6241,7 @@ SDL_Downsample_F32LSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6278,7 +6278,7 @@ SDL_Upsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 4; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4; @@ -6325,7 +6325,7 @@ SDL_Downsample_F32LSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6372,7 +6372,7 @@ SDL_Upsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 6; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6; @@ -6429,7 +6429,7 @@ SDL_Downsample_F32LSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6486,7 +6486,7 @@ SDL_Upsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 8; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8; @@ -6553,7 +6553,7 @@ SDL_Downsample_F32LSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6620,7 +6620,7 @@ SDL_Upsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 1; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 1; @@ -6652,7 +6652,7 @@ SDL_Downsample_F32MSB_1c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 64; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/4)) * cvt->rate_incr) * 4; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6684,7 +6684,7 @@ SDL_Upsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 2; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 2; @@ -6721,7 +6721,7 @@ SDL_Downsample_F32MSB_2c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 128; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/8)) * cvt->rate_incr) * 8; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6758,7 +6758,7 @@ SDL_Upsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 4; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 4; @@ -6805,7 +6805,7 @@ SDL_Downsample_F32MSB_4c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 256; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/16)) * cvt->rate_incr) * 16; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6852,7 +6852,7 @@ SDL_Upsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 6; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 6; @@ -6909,7 +6909,7 @@ SDL_Downsample_F32MSB_6c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 384; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/24)) * cvt->rate_incr) * 24; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; @@ -6966,7 +6966,7 @@ SDL_Upsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; float *dst = ((float *) (cvt->buf + dstsize)) - 8; const float *src = ((float *) (cvt->buf + cvt->len_cvt)) - 8; @@ -7033,7 +7033,7 @@ SDL_Downsample_F32MSB_8c(SDL_AudioCVT * cvt, SDL_AudioFormat format) #endif const int srcsize = cvt->len_cvt - 512; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/32)) * cvt->rate_incr) * 32; register int eps = 0; float *dst = (float *) cvt->buf; const float *src = (float *) cvt->buf; diff --git a/Engine/lib/sdl/src/audio/SDL_mixer.c b/Engine/lib/sdl/src/audio/SDL_mixer.c index 42a1c6873d..b49c73daba 100644 --- a/Engine/lib/sdl/src/audio/SDL_mixer.c +++ b/Engine/lib/sdl/src/audio/SDL_mixer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/SDL_sysaudio.h b/Engine/lib/sdl/src/audio/SDL_sysaudio.h index 9fe31c807e..426a190f18 100644 --- a/Engine/lib/sdl/src/audio/SDL_sysaudio.h +++ b/Engine/lib/sdl/src/audio/SDL_sysaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,34 +30,83 @@ typedef struct SDL_AudioDevice SDL_AudioDevice; #define _THIS SDL_AudioDevice *_this -/* Used by audio targets during DetectDevices() */ -typedef void (*SDL_AddAudioDevice)(const char *name); +/* Audio targets should call this as devices are added to the system (such as + a USB headset being plugged in), and should also be called for + for every device found during DetectDevices(). */ +extern void SDL_AddAudioDevice(const int iscapture, const char *name, void *handle); + +/* Audio targets should call this as devices are removed, so SDL can update + its list of available devices. */ +extern void SDL_RemoveAudioDevice(const int iscapture, void *handle); + +/* Audio targets should call this if an opened audio device is lost while + being used. This can happen due to i/o errors, or a device being unplugged, + etc. If the device is totally gone, please also call SDL_RemoveAudioDevice() + as appropriate so SDL's list of devices is accurate. */ +extern void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device); + + +/* This is the size of a packet when using SDL_QueueAudio(). We allocate + these as necessary and pool them, under the assumption that we'll + eventually end up with a handful that keep recycling, meeting whatever + the app needs. We keep packing data tightly as more arrives to avoid + wasting space, and if we get a giant block of data, we'll split them + into multiple packets behind the scenes. My expectation is that most + apps will have 2-3 of these in the pool. 8k should cover most needs, but + if this is crippling for some embedded system, we can #ifdef this. + The system preallocates enough packets for 2 callbacks' worth of data. */ +#define SDL_AUDIOBUFFERQUEUE_PACKETLEN (8 * 1024) + +/* Used by apps that queue audio instead of using the callback. */ +typedef struct SDL_AudioBufferQueue +{ + Uint8 data[SDL_AUDIOBUFFERQUEUE_PACKETLEN]; /* packet data. */ + Uint32 datalen; /* bytes currently in use in this packet. */ + Uint32 startpos; /* bytes currently consumed in this packet. */ + struct SDL_AudioBufferQueue *next; /* next item in linked list. */ +} SDL_AudioBufferQueue; typedef struct SDL_AudioDriverImpl { - void (*DetectDevices) (int iscapture, SDL_AddAudioDevice addfn); - int (*OpenDevice) (_THIS, const char *devname, int iscapture); + void (*DetectDevices) (void); + int (*OpenDevice) (_THIS, void *handle, const char *devname, int iscapture); void (*ThreadInit) (_THIS); /* Called by audio thread at start */ void (*WaitDevice) (_THIS); void (*PlayDevice) (_THIS); + int (*GetPendingBytes) (_THIS); Uint8 *(*GetDeviceBuf) (_THIS); void (*WaitDone) (_THIS); void (*CloseDevice) (_THIS); void (*LockDevice) (_THIS); void (*UnlockDevice) (_THIS); + void (*FreeDeviceHandle) (void *handle); /**< SDL is done with handle from SDL_AddAudioDevice() */ void (*Deinitialize) (void); /* !!! FIXME: add pause(), so we can optimize instead of mixing silence. */ /* Some flags to push duplicate code into the core and reduce #ifdefs. */ + /* !!! FIXME: these should be SDL_bool */ int ProvidesOwnCallbackThread; int SkipMixerLock; /* !!! FIXME: do we need this anymore? */ int HasCaptureSupport; int OnlyHasDefaultOutputDevice; int OnlyHasDefaultInputDevice; + int AllowsArbitraryDeviceNames; } SDL_AudioDriverImpl; +typedef struct SDL_AudioDeviceItem +{ + void *handle; + struct SDL_AudioDeviceItem *next; + #if (defined(__GNUC__) && (__GNUC__ <= 2)) + char name[1]; /* actually variable length. */ + #else + char name[]; + #endif +} SDL_AudioDeviceItem; + + typedef struct SDL_AudioDriver { /* * * */ @@ -70,11 +119,14 @@ typedef struct SDL_AudioDriver SDL_AudioDriverImpl impl; - char **outputDevices; + /* A mutex for device detection */ + SDL_mutex *detectionLock; + SDL_bool captureDevicesRemoved; + SDL_bool outputDevicesRemoved; int outputDeviceCount; - - char **inputDevices; int inputDeviceCount; + SDL_AudioDeviceItem *outputDevices; + SDL_AudioDeviceItem *inputDevices; } SDL_AudioDriver; @@ -92,6 +144,7 @@ struct SDL_AudioDevice { /* * * */ /* Data common to all devices */ + SDL_AudioDeviceID id; /* The current audio specification (shared with audio thread) */ SDL_AudioSpec spec; @@ -104,21 +157,29 @@ struct SDL_AudioDevice SDL_AudioStreamer streamer; /* Current state flags */ + /* !!! FIXME: should be SDL_bool */ int iscapture; - int enabled; + int enabled; /* true if device is functioning and connected. */ + int shutdown; /* true if we are signaling the play thread to end. */ int paused; int opened; /* Fake audio buffer for when the audio hardware is busy */ Uint8 *fake_stream; - /* A semaphore for locking the mixing buffers */ + /* A mutex for locking the mixing buffers */ SDL_mutex *mixer_lock; /* A thread to feed the audio device */ SDL_Thread *thread; SDL_threadID threadid; + /* Queued buffers (if app not using callback). */ + SDL_AudioBufferQueue *buffer_queue_head; /* device fed from here. */ + SDL_AudioBufferQueue *buffer_queue_tail; /* queue fills to here. */ + SDL_AudioBufferQueue *buffer_queue_pool; /* these are unused packets. */ + Uint32 queued_bytes; /* number of bytes of audio data in the queue. */ + /* * * */ /* Data private to this driver */ struct SDL_PrivateAudioData *hidden; diff --git a/Engine/lib/sdl/src/audio/SDL_wave.c b/Engine/lib/sdl/src/audio/SDL_wave.c index 903264ca9c..99daac64ba 100644 --- a/Engine/lib/sdl/src/audio/SDL_wave.c +++ b/Engine/lib/sdl/src/audio/SDL_wave.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -121,7 +121,8 @@ MS_ADPCM_decode(Uint8 ** audio_buf, Uint32 * audio_len) struct MS_ADPCM_decodestate *state[2]; Uint8 *freeable, *encoded, *decoded; Sint32 encoded_len, samplesleft; - Sint8 nybble, stereo; + Sint8 nybble; + Uint8 stereo; Sint16 *coeff[2]; Sint32 new_sample; @@ -278,7 +279,8 @@ IMA_ADPCM_nibble(struct IMA_ADPCM_decodestate *state, Uint8 nybble) } else if (state->index < 0) { state->index = 0; } - step = step_table[state->index]; + /* explicit cast to avoid gcc warning about using 'char' as array index */ + step = step_table[(int)state->index]; delta = step >> 3; if (nybble & 0x04) delta += step; @@ -343,8 +345,8 @@ IMA_ADPCM_decode(Uint8 ** audio_buf, Uint32 * audio_len) /* Check to make sure we have enough variables in the state array */ channels = IMA_ADPCM_state.wavefmt.channels; if (channels > SDL_arraysize(IMA_ADPCM_state.state)) { - SDL_SetError("IMA ADPCM decoder can only handle %d channels", - SDL_arraysize(IMA_ADPCM_state.state)); + SDL_SetError("IMA ADPCM decoder can only handle %u channels", + (unsigned int)SDL_arraysize(IMA_ADPCM_state.state)); return (-1); } state = IMA_ADPCM_state.state; @@ -458,7 +460,7 @@ SDL_LoadWAV_RW(SDL_RWops * src, int freesrc, } /* 2 Uint32's for chunk header+len, plus the lenread */ headerDiff += lenread + 2 * sizeof(Uint32); - } while ((chunk.magic == FACT) || (chunk.magic == LIST)); + } while ((chunk.magic == FACT) || (chunk.magic == LIST) || (chunk.magic == BEXT) || (chunk.magic == JUNK)); /* Decode the audio data format */ format = (WaveFMT *) chunk.data; @@ -493,8 +495,7 @@ SDL_LoadWAV_RW(SDL_RWops * src, int freesrc, IMA_ADPCM_encoded = 1; break; case MP3_CODE: - SDL_SetError("MPEG Layer 3 data not supported", - SDL_SwapLE16(format->encoding)); + SDL_SetError("MPEG Layer 3 data not supported"); was_error = 1; goto done; default: diff --git a/Engine/lib/sdl/src/audio/SDL_wave.h b/Engine/lib/sdl/src/audio/SDL_wave.h index c53ad590ab..f2f93986ee 100644 --- a/Engine/lib/sdl/src/audio/SDL_wave.h +++ b/Engine/lib/sdl/src/audio/SDL_wave.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,8 @@ #define WAVE 0x45564157 /* "WAVE" */ #define FACT 0x74636166 /* "fact" */ #define LIST 0x5453494c /* "LIST" */ +#define BEXT 0x74786562 /* "bext" */ +#define JUNK 0x4B4E554A /* "JUNK" */ #define FMT 0x20746D66 /* "fmt " */ #define DATA 0x61746164 /* "data" */ #define PCM_CODE 0x0001 diff --git a/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.c b/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.c index 1f3def3f60..af952371b4 100644 --- a/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.c +++ b/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -320,7 +320,7 @@ ALSA_PlayDevice(_THIS) /* Hmm, not much we can do - abort */ fprintf(stderr, "ALSA write failed (unrecoverable): %s\n", ALSA_snd_strerror(status)); - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); return; } continue; @@ -465,7 +465,7 @@ ALSA_set_buffer_size(_THIS, snd_pcm_hw_params_t *params, int override) } static int -ALSA_OpenDevice(_THIS, const char *devname, int iscapture) +ALSA_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { int status = 0; snd_pcm_t *pcm_handle = NULL; diff --git a/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.h b/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.h index 45353883db..3080aea230 100644 --- a/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.h +++ b/Engine/lib/sdl/src/audio/alsa/SDL_alsa_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/android/SDL_androidaudio.c b/Engine/lib/sdl/src/audio/android/SDL_androidaudio.c index 0c85b83cbf..4a4faadcfb 100644 --- a/Engine/lib/sdl/src/audio/android/SDL_androidaudio.c +++ b/Engine/lib/sdl/src/audio/android/SDL_androidaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,10 +32,10 @@ #include -static void * audioDevice; +static SDL_AudioDevice* audioDevice = NULL; static int -AndroidAUD_OpenDevice(_THIS, const char *devname, int iscapture) +AndroidAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format; @@ -49,6 +49,11 @@ AndroidAUD_OpenDevice(_THIS, const char *devname, int iscapture) } audioDevice = this; + + this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden)); + if (this->hidden == NULL) { + return SDL_OutOfMemory(); + } test_format = SDL_FirstAudioFormat(this->spec.format); while (test_format != 0) { /* no "UNKNOWN" constant */ @@ -110,6 +115,10 @@ AndroidAUD_CloseDevice(_THIS) Android_JNI_CloseAudioDevice(); if (audioDevice == this) { + if (audioDevice->hidden != NULL) { + SDL_free(this->hidden); + this->hidden = NULL; + } audioDevice = NULL; } } @@ -135,6 +144,41 @@ AudioBootStrap ANDROIDAUD_bootstrap = { "android", "SDL Android audio driver", AndroidAUD_Init, 0 }; +/* Pause (block) all non already paused audio devices by taking their mixer lock */ +void AndroidAUD_PauseDevices(void) +{ + /* TODO: Handle multiple devices? */ + struct SDL_PrivateAudioData *private; + if(audioDevice != NULL && audioDevice->hidden != NULL) { + private = (struct SDL_PrivateAudioData *) audioDevice->hidden; + if (audioDevice->paused) { + /* The device is already paused, leave it alone */ + private->resume = SDL_FALSE; + } + else { + SDL_LockMutex(audioDevice->mixer_lock); + audioDevice->paused = SDL_TRUE; + private->resume = SDL_TRUE; + } + } +} + +/* Resume (unblock) all non already paused audio devices by releasing their mixer lock */ +void AndroidAUD_ResumeDevices(void) +{ + /* TODO: Handle multiple devices? */ + struct SDL_PrivateAudioData *private; + if(audioDevice != NULL && audioDevice->hidden != NULL) { + private = (struct SDL_PrivateAudioData *) audioDevice->hidden; + if (private->resume) { + audioDevice->paused = SDL_FALSE; + private->resume = SDL_FALSE; + SDL_UnlockMutex(audioDevice->mixer_lock); + } + } +} + + #endif /* SDL_AUDIO_DRIVER_ANDROID */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/android/SDL_androidaudio.h b/Engine/lib/sdl/src/audio/android/SDL_androidaudio.h index ab49f000f9..639be9c087 100644 --- a/Engine/lib/sdl/src/audio/android/SDL_androidaudio.h +++ b/Engine/lib/sdl/src/audio/android/SDL_androidaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,6 +30,8 @@ struct SDL_PrivateAudioData { + /* Resume device if it was paused automatically */ + int resume; }; static void AndroidAUD_CloseDevice(_THIS); diff --git a/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.c b/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.c index 72fba70cc9..5d40cd14e8 100644 --- a/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.c +++ b/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -151,7 +151,7 @@ ARTS_WaitDevice(_THIS) /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } } } @@ -179,7 +179,7 @@ ARTS_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (written < 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", written); @@ -229,7 +229,7 @@ ARTS_Suspend(void) } static int -ARTS_OpenDevice(_THIS, const char *devname, int iscapture) +ARTS_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { int rc = 0; int bits = 0, frag_spec = 0; diff --git a/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.h b/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.h index fb7706fcf1..6b9bf3037b 100644 --- a/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.h +++ b/Engine/lib/sdl/src/audio/arts/SDL_artsaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.c b/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.c index f415fe040b..eeb257371f 100644 --- a/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.c +++ b/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,9 +51,9 @@ static void -BSDAUDIO_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +BSDAUDIO_DetectDevices(void) { - SDL_EnumUnixAudioDevices(iscapture, 0, NULL, addfn); + SDL_EnumUnixAudioDevices(0, NULL); } @@ -150,7 +150,7 @@ BSDAUDIO_WaitDevice(_THIS) the user know what happened. */ fprintf(stderr, "SDL: %s\n", message); - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); /* Don't try to close - may hang */ this->hidden->audio_fd = -1; #ifdef DEBUG_AUDIO @@ -195,7 +195,7 @@ BSDAUDIO_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (written < 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", written); @@ -224,7 +224,7 @@ BSDAUDIO_CloseDevice(_THIS) } static int -BSDAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +BSDAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); SDL_AudioFormat format = 0; @@ -348,6 +348,8 @@ BSDAUDIO_Init(SDL_AudioDriverImpl * impl) impl->GetDeviceBuf = BSDAUDIO_GetDeviceBuf; impl->CloseDevice = BSDAUDIO_CloseDevice; + impl->AllowsArbitraryDeviceNames = 1; + return 1; /* this audio target is available. */ } diff --git a/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.h b/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.h index 625bdb549e..7fe141b14e 100644 --- a/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.h +++ b/Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.c b/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.c index 9501102894..46b617dc06 100644 --- a/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.c +++ b/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,6 +19,9 @@ 3. This notice may not be removed or altered from any source distribution. */ #include "../../SDL_internal.h" + +#if SDL_AUDIO_DRIVER_COREAUDIO + #include "SDL_audio.h" #include "../SDL_audio_c.h" #include "../SDL_sysaudio.h" @@ -37,31 +40,48 @@ static void COREAUDIO_CloseDevice(_THIS); } #if MACOSX_COREAUDIO -typedef void (*addDevFn)(const char *name, AudioDeviceID devId, void *data); +static const AudioObjectPropertyAddress devlist_address = { + kAudioHardwarePropertyDevices, + kAudioObjectPropertyScopeGlobal, + kAudioObjectPropertyElementMaster +}; -static void -addToDevList(const char *name, AudioDeviceID devId, void *data) +typedef void (*addDevFn)(const char *name, const int iscapture, AudioDeviceID devId, void *data); + +typedef struct AudioDeviceList { - SDL_AddAudioDevice addfn = (SDL_AddAudioDevice) data; - addfn(name); -} + AudioDeviceID devid; + SDL_bool alive; + struct AudioDeviceList *next; +} AudioDeviceList; + +static AudioDeviceList *output_devs = NULL; +static AudioDeviceList *capture_devs = NULL; -typedef struct +static SDL_bool +add_to_internal_dev_list(const int iscapture, AudioDeviceID devId) { - const char *findname; - AudioDeviceID devId; - int found; -} FindDevIdData; + AudioDeviceList *item = (AudioDeviceList *) SDL_malloc(sizeof (AudioDeviceList)); + if (item == NULL) { + return SDL_FALSE; + } + item->devid = devId; + item->alive = SDL_TRUE; + item->next = iscapture ? capture_devs : output_devs; + if (iscapture) { + capture_devs = item; + } else { + output_devs = item; + } + + return SDL_TRUE; +} static void -findDevId(const char *name, AudioDeviceID devId, void *_data) +addToDevList(const char *name, const int iscapture, AudioDeviceID devId, void *data) { - FindDevIdData *data = (FindDevIdData *) _data; - if (!data->found) { - if (SDL_strcmp(name, data->findname) == 0) { - data->found = 1; - data->devId = devId; - } + if (add_to_internal_dev_list(iscapture, devId)) { + SDL_AddAudioDevice(iscapture, name, (void *) ((size_t) devId)); } } @@ -74,14 +94,8 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) UInt32 i = 0; UInt32 max = 0; - AudioObjectPropertyAddress addr = { - kAudioHardwarePropertyDevices, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster - }; - - result = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, &addr, - 0, NULL, &size); + result = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, + &devlist_address, 0, NULL, &size); if (result != kAudioHardwareNoError) return; @@ -89,8 +103,8 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) if (devs == NULL) return; - result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, - 0, NULL, &size, devs); + result = AudioObjectGetPropertyData(kAudioObjectSystemObject, + &devlist_address, 0, NULL, &size, devs); if (result != kAudioHardwareNoError) return; @@ -102,10 +116,17 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) AudioBufferList *buflist = NULL; int usable = 0; CFIndex len = 0; - - addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : - kAudioDevicePropertyScopeOutput; - addr.mSelector = kAudioDevicePropertyStreamConfiguration; + const AudioObjectPropertyAddress addr = { + kAudioDevicePropertyStreamConfiguration, + iscapture ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput, + kAudioObjectPropertyElementMaster + }; + + const AudioObjectPropertyAddress nameaddr = { + kAudioObjectPropertyName, + iscapture ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput, + kAudioObjectPropertyElementMaster + }; result = AudioObjectGetPropertyDataSize(dev, &addr, 0, NULL, &size); if (result != noErr) @@ -133,9 +154,9 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) if (!usable) continue; - addr.mSelector = kAudioObjectPropertyName; + size = sizeof (CFStringRef); - result = AudioObjectGetPropertyData(dev, &addr, 0, NULL, &size, &cfstr); + result = AudioObjectGetPropertyData(dev, &nameaddr, 0, NULL, &size, &cfstr); if (result != kAudioHardwareNoError) continue; @@ -166,79 +187,84 @@ build_device_list(int iscapture, addDevFn addfn, void *addfndata) ((iscapture) ? "capture" : "output"), (int) *devCount, ptr, (int) dev); #endif - addfn(ptr, dev, addfndata); + addfn(ptr, iscapture, dev, addfndata); } SDL_free(ptr); /* addfn() would have copied the string. */ } } static void -COREAUDIO_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +free_audio_device_list(AudioDeviceList **list) { - build_device_list(iscapture, addToDevList, addfn); + AudioDeviceList *item = *list; + while (item) { + AudioDeviceList *next = item->next; + SDL_free(item); + item = next; + } + *list = NULL; } -static int -find_device_by_name(_THIS, const char *devname, int iscapture) +static void +COREAUDIO_DetectDevices(void) { - AudioDeviceID devid = 0; - OSStatus result = noErr; - UInt32 size = 0; - UInt32 alive = 0; - pid_t pid = 0; - - AudioObjectPropertyAddress addr = { - 0, - kAudioObjectPropertyScopeGlobal, - kAudioObjectPropertyElementMaster - }; + build_device_list(SDL_TRUE, addToDevList, NULL); + build_device_list(SDL_FALSE, addToDevList, NULL); +} - if (devname == NULL) { - size = sizeof (AudioDeviceID); - addr.mSelector = - ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : - kAudioHardwarePropertyDefaultOutputDevice); - result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, - 0, NULL, &size, &devid); - CHECK_RESULT("AudioHardwareGetProperty (default device)"); - } else { - FindDevIdData data; - SDL_zero(data); - data.findname = devname; - build_device_list(iscapture, findDevId, &data); - if (!data.found) { - SDL_SetError("CoreAudio: No such audio device."); - return 0; +static void +build_device_change_list(const char *name, const int iscapture, AudioDeviceID devId, void *data) +{ + AudioDeviceList **list = (AudioDeviceList **) data; + AudioDeviceList *item; + for (item = *list; item != NULL; item = item->next) { + if (item->devid == devId) { + item->alive = SDL_TRUE; + return; } - devid = data.devId; } - addr.mSelector = kAudioDevicePropertyDeviceIsAlive; - addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : - kAudioDevicePropertyScopeOutput; - - size = sizeof (alive); - result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &alive); - CHECK_RESULT - ("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)"); + add_to_internal_dev_list(iscapture, devId); /* new device, add it. */ + SDL_AddAudioDevice(iscapture, name, (void *) ((size_t) devId)); +} - if (!alive) { - SDL_SetError("CoreAudio: requested device exists, but isn't alive."); - return 0; +static void +reprocess_device_list(const int iscapture, AudioDeviceList **list) +{ + AudioDeviceList *item; + AudioDeviceList *prev = NULL; + for (item = *list; item != NULL; item = item->next) { + item->alive = SDL_FALSE; } - addr.mSelector = kAudioDevicePropertyHogMode; - size = sizeof (pid); - result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &pid); - - /* some devices don't support this property, so errors are fine here. */ - if ((result == noErr) && (pid != -1)) { - SDL_SetError("CoreAudio: requested device is being hogged."); - return 0; + build_device_list(iscapture, build_device_change_list, list); + + /* free items in the list that aren't still alive. */ + item = *list; + while (item != NULL) { + AudioDeviceList *next = item->next; + if (item->alive) { + prev = item; + } else { + SDL_RemoveAudioDevice(iscapture, (void *) ((size_t) item->devid)); + if (prev) { + prev->next = item->next; + } else { + *list = item->next; + } + SDL_free(item); + } + item = next; } +} - this->hidden->deviceID = devid; - return 1; +/* this is called when the system's list of available audio devices changes. */ +static OSStatus +device_list_changed(AudioObjectID systemObj, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data) +{ + reprocess_device_list(SDL_TRUE, &capture_devs); + reprocess_device_list(SDL_FALSE, &output_devs); + return 0; } #endif @@ -314,12 +340,54 @@ inputCallback(void *inRefCon, } +#if MACOSX_COREAUDIO +static const AudioObjectPropertyAddress alive_address = +{ + kAudioDevicePropertyDeviceIsAlive, + kAudioObjectPropertyScopeGlobal, + kAudioObjectPropertyElementMaster +}; + +static OSStatus +device_unplugged(AudioObjectID devid, UInt32 num_addr, const AudioObjectPropertyAddress *addrs, void *data) +{ + SDL_AudioDevice *this = (SDL_AudioDevice *) data; + SDL_bool dead = SDL_FALSE; + UInt32 isAlive = 1; + UInt32 size = sizeof (isAlive); + OSStatus error; + + if (!this->enabled) { + return 0; /* already known to be dead. */ + } + + error = AudioObjectGetPropertyData(this->hidden->deviceID, &alive_address, + 0, NULL, &size, &isAlive); + + if (error == kAudioHardwareBadDeviceError) { + dead = SDL_TRUE; /* device was unplugged. */ + } else if ((error == kAudioHardwareNoError) && (!isAlive)) { + dead = SDL_TRUE; /* device died in some other way. */ + } + + if (dead) { + SDL_OpenedAudioDeviceDisconnected(this); + } + + return 0; +} +#endif + static void COREAUDIO_CloseDevice(_THIS) { if (this->hidden != NULL) { if (this->hidden->audioUnitOpened) { - OSStatus result = noErr; + #if MACOSX_COREAUDIO + /* Unregister our disconnect callback. */ + AudioObjectRemovePropertyListener(this->hidden->deviceID, &alive_address, device_unplugged, this); + #endif + AURenderCallbackStruct callback; const AudioUnitElement output_bus = 0; const AudioUnitElement input_bus = 1; @@ -331,14 +399,13 @@ COREAUDIO_CloseDevice(_THIS) kAudioUnitScope_Input); /* stop processing the audio unit */ - result = AudioOutputUnitStop(this->hidden->audioUnit); + AudioOutputUnitStop(this->hidden->audioUnit); /* Remove the input callback */ SDL_memset(&callback, 0, sizeof(AURenderCallbackStruct)); - result = AudioUnitSetProperty(this->hidden->audioUnit, - kAudioUnitProperty_SetRenderCallback, - scope, bus, &callback, - sizeof(callback)); + AudioUnitSetProperty(this->hidden->audioUnit, + kAudioUnitProperty_SetRenderCallback, + scope, bus, &callback, sizeof(callback)); #if MACOSX_COREAUDIO CloseComponent(this->hidden->audioUnit); @@ -354,9 +421,63 @@ COREAUDIO_CloseDevice(_THIS) } } +#if MACOSX_COREAUDIO +static int +prepare_device(_THIS, void *handle, int iscapture) +{ + AudioDeviceID devid = (AudioDeviceID) ((size_t) handle); + OSStatus result = noErr; + UInt32 size = 0; + UInt32 alive = 0; + pid_t pid = 0; + + AudioObjectPropertyAddress addr = { + 0, + kAudioObjectPropertyScopeGlobal, + kAudioObjectPropertyElementMaster + }; + + if (handle == NULL) { + size = sizeof (AudioDeviceID); + addr.mSelector = + ((iscapture) ? kAudioHardwarePropertyDefaultInputDevice : + kAudioHardwarePropertyDefaultOutputDevice); + result = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, + 0, NULL, &size, &devid); + CHECK_RESULT("AudioHardwareGetProperty (default device)"); + } + + addr.mSelector = kAudioDevicePropertyDeviceIsAlive; + addr.mScope = iscapture ? kAudioDevicePropertyScopeInput : + kAudioDevicePropertyScopeOutput; + + size = sizeof (alive); + result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &alive); + CHECK_RESULT + ("AudioDeviceGetProperty (kAudioDevicePropertyDeviceIsAlive)"); + + if (!alive) { + SDL_SetError("CoreAudio: requested device exists, but isn't alive."); + return 0; + } + + addr.mSelector = kAudioDevicePropertyHogMode; + size = sizeof (pid); + result = AudioObjectGetPropertyData(devid, &addr, 0, NULL, &size, &pid); + + /* some devices don't support this property, so errors are fine here. */ + if ((result == noErr) && (pid != -1)) { + SDL_SetError("CoreAudio: requested device is being hogged."); + return 0; + } + + this->hidden->deviceID = devid; + return 1; +} +#endif static int -prepare_audiounit(_THIS, const char *devname, int iscapture, +prepare_audiounit(_THIS, void *handle, int iscapture, const AudioStreamBasicDescription * strdesc) { OSStatus result = noErr; @@ -375,8 +496,7 @@ prepare_audiounit(_THIS, const char *devname, int iscapture, kAudioUnitScope_Input); #if MACOSX_COREAUDIO - if (!find_device_by_name(this, devname, iscapture)) { - SDL_SetError("Couldn't find requested CoreAudio device"); + if (!prepare_device(this, handle, iscapture)) { return 0; } #endif @@ -453,13 +573,18 @@ prepare_audiounit(_THIS, const char *devname, int iscapture, result = AudioOutputUnitStart(this->hidden->audioUnit); CHECK_RESULT("AudioOutputUnitStart"); +#if MACOSX_COREAUDIO + /* Fire a callback if the device stops being "alive" (disconnected, etc). */ + AudioObjectAddPropertyListener(this->hidden->deviceID, &alive_address, device_unplugged, this); +#endif + /* We're running! */ return 1; } static int -COREAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +COREAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { AudioStreamBasicDescription strdesc; SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); @@ -518,7 +643,7 @@ COREAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) strdesc.mBytesPerPacket = strdesc.mBytesPerFrame * strdesc.mFramesPerPacket; - if (!prepare_audiounit(this, devname, iscapture, &strdesc)) { + if (!prepare_audiounit(this, handle, iscapture, &strdesc)) { COREAUDIO_CloseDevice(this); return -1; /* prepare_audiounit() will call SDL_SetError()... */ } @@ -526,15 +651,27 @@ COREAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) return 0; /* good to go. */ } +static void +COREAUDIO_Deinitialize(void) +{ +#if MACOSX_COREAUDIO + AudioObjectRemovePropertyListener(kAudioObjectSystemObject, &devlist_address, device_list_changed, NULL); + free_audio_device_list(&capture_devs); + free_audio_device_list(&output_devs); +#endif +} + static int COREAUDIO_Init(SDL_AudioDriverImpl * impl) { /* Set the function pointers */ impl->OpenDevice = COREAUDIO_OpenDevice; impl->CloseDevice = COREAUDIO_CloseDevice; + impl->Deinitialize = COREAUDIO_Deinitialize; #if MACOSX_COREAUDIO impl->DetectDevices = COREAUDIO_DetectDevices; + AudioObjectAddPropertyListener(kAudioObjectSystemObject, &devlist_address, device_list_changed, NULL); #else impl->OnlyHasDefaultOutputDevice = 1; @@ -556,4 +693,6 @@ AudioBootStrap COREAUDIO_bootstrap = { "coreaudio", "CoreAudio", COREAUDIO_Init, 0 }; +#endif /* SDL_AUDIO_DRIVER_COREAUDIO */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.h b/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.h index 41e8cea2b0..577f9fb320 100644 --- a/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.h +++ b/Engine/lib/sdl/src/audio/coreaudio/SDL_coreaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/directsound/SDL_directsound.c b/Engine/lib/sdl/src/audio/directsound/SDL_directsound.c index 067683cccb..065e163a67 100644 --- a/Engine/lib/sdl/src/audio/directsound/SDL_directsound.c +++ b/Engine/lib/sdl/src/audio/directsound/SDL_directsound.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -144,15 +144,22 @@ SetDSerror(const char *function, int code) return SDL_SetError("%s", errbuf); } +static void +DSOUND_FreeDeviceHandle(void *handle) +{ + SDL_free(handle); +} static BOOL CALLBACK FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data) { - SDL_AddAudioDevice addfn = (SDL_AddAudioDevice) data; + const int iscapture = (int) ((size_t) data); if (guid != NULL) { /* skip default device */ char *str = WIN_StringToUTF8(desc); if (str != NULL) { - addfn(str); + LPGUID cpyguid = (LPGUID) SDL_malloc(sizeof (GUID)); + SDL_memcpy(cpyguid, guid, sizeof (GUID)); + SDL_AddAudioDevice(iscapture, str, cpyguid); SDL_free(str); /* addfn() makes a copy of this string. */ } } @@ -160,13 +167,10 @@ FindAllDevs(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID data) } static void -DSOUND_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +DSOUND_DetectDevices(void) { - if (iscapture) { - pDirectSoundCaptureEnumerateW(FindAllDevs, addfn); - } else { - pDirectSoundEnumerateW(FindAllDevs, addfn); - } + pDirectSoundCaptureEnumerateW(FindAllDevs, (void *) ((size_t) 1)); + pDirectSoundEnumerateW(FindAllDevs, (void *) ((size_t) 0)); } @@ -419,53 +423,14 @@ CreateSecondary(_THIS, HWND focus) return (numchunks); } -typedef struct FindDevGUIDData -{ - const char *devname; - GUID guid; - int found; -} FindDevGUIDData; - -static BOOL CALLBACK -FindDevGUID(LPGUID guid, LPCWSTR desc, LPCWSTR module, LPVOID _data) -{ - if (guid != NULL) { /* skip the default device. */ - FindDevGUIDData *data = (FindDevGUIDData *) _data; - char *str = WIN_StringToUTF8(desc); - const int match = (SDL_strcmp(str, data->devname) == 0); - SDL_free(str); - if (match) { - data->found = 1; - SDL_memcpy(&data->guid, guid, sizeof (data->guid)); - return FALSE; /* found it! stop enumerating. */ - } - } - return TRUE; /* keep enumerating. */ -} - static int -DSOUND_OpenDevice(_THIS, const char *devname, int iscapture) +DSOUND_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { HRESULT result; SDL_bool valid_format = SDL_FALSE; SDL_bool tried_format = SDL_FALSE; SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); - FindDevGUIDData devguid; - LPGUID guid = NULL; - - if (devname != NULL) { - devguid.found = 0; - devguid.devname = devname; - if (iscapture) - pDirectSoundCaptureEnumerateW(FindDevGUID, &devguid); - else - pDirectSoundEnumerateW(FindDevGUID, &devguid); - - if (!devguid.found) { - return SDL_SetError("DirectSound: Requested device not found"); - } - guid = &devguid.guid; - } + LPGUID guid = (LPGUID) handle; /* Initialize all variables that we clean on shutdown */ this->hidden = (struct SDL_PrivateAudioData *) @@ -536,6 +501,8 @@ DSOUND_Init(SDL_AudioDriverImpl * impl) impl->WaitDone = DSOUND_WaitDone; impl->GetDeviceBuf = DSOUND_GetDeviceBuf; impl->CloseDevice = DSOUND_CloseDevice; + impl->FreeDeviceHandle = DSOUND_FreeDeviceHandle; + impl->Deinitialize = DSOUND_Deinitialize; return 1; /* this audio target is available. */ diff --git a/Engine/lib/sdl/src/audio/directsound/SDL_directsound.h b/Engine/lib/sdl/src/audio/directsound/SDL_directsound.h index b873391fb7..0d5f6bd76c 100644 --- a/Engine/lib/sdl/src/audio/directsound/SDL_directsound.h +++ b/Engine/lib/sdl/src/audio/directsound/SDL_directsound.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,7 +23,7 @@ #ifndef _SDL_directsound_h #define _SDL_directsound_h -#include "directx.h" +#include "../../core/windows/SDL_directx.h" #include "../SDL_sysaudio.h" diff --git a/Engine/lib/sdl/src/audio/directsound/directx.h b/Engine/lib/sdl/src/audio/directsound/directx.h deleted file mode 100644 index 472a0ee0ed..0000000000 --- a/Engine/lib/sdl/src/audio/directsound/directx.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef _directx_h -#define _directx_h - -/* Include all of the DirectX 8.0 headers and adds any necessary tweaks */ - -#include "../../core/windows/SDL_windows.h" -#include -#ifndef WIN32 -#define WIN32 -#endif -#undef WINNT - -/* Far pointers don't exist in 32-bit code */ -#ifndef FAR -#define FAR -#endif - -/* Error codes not yet included in Win32 API header files */ -#ifndef MAKE_HRESULT -#define MAKE_HRESULT(sev,fac,code) \ - ((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code)))) -#endif - -#ifndef S_OK -#define S_OK (HRESULT)0x00000000L -#endif - -#ifndef SUCCEEDED -#define SUCCEEDED(x) ((HRESULT)(x) >= 0) -#endif -#ifndef FAILED -#define FAILED(x) ((HRESULT)(x)<0) -#endif - -#ifndef E_FAIL -#define E_FAIL (HRESULT)0x80000008L -#endif -#ifndef E_NOINTERFACE -#define E_NOINTERFACE (HRESULT)0x80004002L -#endif -#ifndef E_OUTOFMEMORY -#define E_OUTOFMEMORY (HRESULT)0x8007000EL -#endif -#ifndef E_INVALIDARG -#define E_INVALIDARG (HRESULT)0x80070057L -#endif -#ifndef E_NOTIMPL -#define E_NOTIMPL (HRESULT)0x80004001L -#endif -#ifndef REGDB_E_CLASSNOTREG -#define REGDB_E_CLASSNOTREG (HRESULT)0x80040154L -#endif - -/* Severity codes */ -#ifndef SEVERITY_ERROR -#define SEVERITY_ERROR 1 -#endif - -/* Error facility codes */ -#ifndef FACILITY_WIN32 -#define FACILITY_WIN32 7 -#endif - -#ifndef FIELD_OFFSET -#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field)) -#endif - -/* DirectX headers (if it isn't included, I haven't tested it yet) - */ -/* We need these defines to mark what version of DirectX API we use */ -#define DIRECTDRAW_VERSION 0x0700 -#define DIRECTSOUND_VERSION 0x0800 -#define DIRECTINPUT_VERSION 0x0500 - -#include -#include -#include - -#endif /* _directx_h */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.c b/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.c index cc4e3efc67..28745f9d04 100644 --- a/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.c +++ b/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -71,7 +71,7 @@ DISKAUD_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (written != this->hidden->mixlen) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", written); @@ -100,10 +100,11 @@ DISKAUD_CloseDevice(_THIS) } static int -DISKAUD_OpenDevice(_THIS, const char *devname, int iscapture) +DISKAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { + /* handle != NULL means "user specified the placeholder name on the fake detected device list" */ + const char *fname = DISKAUD_GetOutputFilename(handle ? NULL : devname); const char *envr = SDL_getenv(DISKENVR_WRITEDELAY); - const char *fname = DISKAUD_GetOutputFilename(devname); this->hidden = (struct SDL_PrivateAudioData *) SDL_malloc(sizeof(*this->hidden)); @@ -141,6 +142,13 @@ DISKAUD_OpenDevice(_THIS, const char *devname, int iscapture) return 0; } +static void +DISKAUD_DetectDevices(void) +{ + /* !!! FIXME: stole this literal string from DEFAULT_OUTPUT_DEVNAME in SDL_audio.c */ + SDL_AddAudioDevice(SDL_FALSE, "System audio output device", (void *) 0x1); +} + static int DISKAUD_Init(SDL_AudioDriverImpl * impl) { @@ -150,6 +158,9 @@ DISKAUD_Init(SDL_AudioDriverImpl * impl) impl->PlayDevice = DISKAUD_PlayDevice; impl->GetDeviceBuf = DISKAUD_GetDeviceBuf; impl->CloseDevice = DISKAUD_CloseDevice; + impl->DetectDevices = DISKAUD_DetectDevices; + + impl->AllowsArbitraryDeviceNames = 1; return 1; /* this audio target is available. */ } diff --git a/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.h b/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.h index 9c5a7afaf9..b5666f7fcb 100644 --- a/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.h +++ b/Engine/lib/sdl/src/audio/disk/SDL_diskaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.c b/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.c index eea5a5f862..17e029e1d5 100644 --- a/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.c +++ b/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,9 +51,9 @@ static void -DSP_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +DSP_DetectDevices(void) { - SDL_EnumUnixAudioDevices(iscapture, 0, NULL, addfn); + SDL_EnumUnixAudioDevices(0, NULL); } @@ -74,7 +74,7 @@ DSP_CloseDevice(_THIS) static int -DSP_OpenDevice(_THIS, const char *devname, int iscapture) +DSP_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); int format; @@ -270,7 +270,7 @@ DSP_PlayDevice(_THIS) const int mixlen = this->hidden->mixlen; if (write(this->hidden->audio_fd, mixbuf, mixlen) == -1) { perror("Audio write"); - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", mixlen); @@ -293,6 +293,8 @@ DSP_Init(SDL_AudioDriverImpl * impl) impl->GetDeviceBuf = DSP_GetDeviceBuf; impl->CloseDevice = DSP_CloseDevice; + impl->AllowsArbitraryDeviceNames = 1; + return 1; /* this audio target is available. */ } diff --git a/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.h b/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.h index 5cbb563b91..0e4acfcaba 100644 --- a/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.h +++ b/Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.c b/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.c index 671e222cff..107f0b073f 100644 --- a/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.c +++ b/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -27,7 +27,7 @@ #include "SDL_dummyaudio.h" static int -DUMMYAUD_OpenDevice(_THIS, const char *devname, int iscapture) +DUMMYAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { return 0; /* always succeeds. */ } diff --git a/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.h b/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.h index 185401113b..b1f88b1cb3 100644 --- a/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.h +++ b/Engine/lib/sdl/src/audio/dummy/SDL_dummyaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.c b/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.c new file mode 100644 index 0000000000..8378233ca2 --- /dev/null +++ b/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.c @@ -0,0 +1,279 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_AUDIO_DRIVER_EMSCRIPTEN + +#include "SDL_audio.h" +#include "SDL_log.h" +#include "../SDL_audio_c.h" +#include "SDL_emscriptenaudio.h" + +#include + +static int +copyData(_THIS) +{ + int byte_len; + + if (this->hidden->write_off + this->convert.len_cvt > this->hidden->mixlen) { + if (this->hidden->write_off > this->hidden->read_off) { + SDL_memmove(this->hidden->mixbuf, + this->hidden->mixbuf + this->hidden->read_off, + this->hidden->mixlen - this->hidden->read_off); + this->hidden->write_off = this->hidden->write_off - this->hidden->read_off; + } else { + this->hidden->write_off = 0; + } + this->hidden->read_off = 0; + } + + SDL_memcpy(this->hidden->mixbuf + this->hidden->write_off, + this->convert.buf, + this->convert.len_cvt); + this->hidden->write_off += this->convert.len_cvt; + byte_len = this->hidden->write_off - this->hidden->read_off; + + return byte_len; +} + +static void +HandleAudioProcess(_THIS) +{ + Uint8 *buf = NULL; + int byte_len = 0; + int bytes = SDL_AUDIO_BITSIZE(this->spec.format) / 8; + int bytes_in = SDL_AUDIO_BITSIZE(this->convert.src_format) / 8; + + /* Only do soemthing if audio is enabled */ + if (!this->enabled) + return; + + if (this->paused) + return; + + if (this->convert.needed) { + if (this->hidden->conv_in_len != 0) { + this->convert.len = this->hidden->conv_in_len * bytes_in * this->spec.channels; + } + + (*this->spec.callback) (this->spec.userdata, + this->convert.buf, + this->convert.len); + SDL_ConvertAudio(&this->convert); + buf = this->convert.buf; + byte_len = this->convert.len_cvt; + + /* size mismatch*/ + if (byte_len != this->spec.size) { + if (!this->hidden->mixbuf) { + this->hidden->mixlen = this->spec.size > byte_len ? this->spec.size * 2 : byte_len * 2; + this->hidden->mixbuf = SDL_malloc(this->hidden->mixlen); + } + + /* copy existing data */ + byte_len = copyData(this); + + /* read more data*/ + while (byte_len < this->spec.size) { + (*this->spec.callback) (this->spec.userdata, + this->convert.buf, + this->convert.len); + SDL_ConvertAudio(&this->convert); + byte_len = copyData(this); + } + + byte_len = this->spec.size; + buf = this->hidden->mixbuf + this->hidden->read_off; + this->hidden->read_off += byte_len; + } + + } else { + if (!this->hidden->mixbuf) { + this->hidden->mixlen = this->spec.size; + this->hidden->mixbuf = SDL_malloc(this->hidden->mixlen); + } + (*this->spec.callback) (this->spec.userdata, + this->hidden->mixbuf, + this->hidden->mixlen); + buf = this->hidden->mixbuf; + byte_len = this->hidden->mixlen; + } + + if (buf) { + EM_ASM_ARGS({ + var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels']; + for (var c = 0; c < numChannels; ++c) { + var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c); + if (channelData.length != $1) { + throw 'Web Audio output buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!'; + } + + for (var j = 0; j < $1; ++j) { + channelData[j] = getValue($0 + (j*numChannels + c)*4, 'float'); + } + } + }, buf, byte_len / bytes / this->spec.channels); + } +} + +static void +Emscripten_CloseDevice(_THIS) +{ + if (this->hidden != NULL) { + if (this->hidden->mixbuf != NULL) { + /* Clean up the audio buffer */ + SDL_free(this->hidden->mixbuf); + this->hidden->mixbuf = NULL; + } + + SDL_free(this->hidden); + this->hidden = NULL; + } +} + +static int +Emscripten_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) +{ + SDL_bool valid_format = SDL_FALSE; + SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); + int i; + float f; + int result; + + while ((!valid_format) && (test_format)) { + switch (test_format) { + case AUDIO_F32: /* web audio only supports floats */ + this->spec.format = test_format; + + valid_format = SDL_TRUE; + break; + } + test_format = SDL_NextAudioFormat(); + } + + if (!valid_format) { + /* Didn't find a compatible format :( */ + return SDL_SetError("No compatible audio format!"); + } + + /* Initialize all variables that we clean on shutdown */ + this->hidden = (struct SDL_PrivateAudioData *) + SDL_malloc((sizeof *this->hidden)); + if (this->hidden == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(this->hidden, 0, (sizeof *this->hidden)); + + /* based on parts of library_sdl.js */ + + /* create context (TODO: this puts stuff in the global namespace...)*/ + result = EM_ASM_INT_V({ + if(typeof(SDL2) === 'undefined') + SDL2 = {}; + + if(typeof(SDL2.audio) === 'undefined') + SDL2.audio = {}; + + if (!SDL2.audioContext) { + if (typeof(AudioContext) !== 'undefined') { + SDL2.audioContext = new AudioContext(); + } else if (typeof(webkitAudioContext) !== 'undefined') { + SDL2.audioContext = new webkitAudioContext(); + } else { + return -1; + } + } + return 0; + }); + if (result < 0) { + return SDL_SetError("Web Audio API is not available!"); + } + + /* limit to native freq */ + int sampleRate = EM_ASM_INT_V({ + return SDL2.audioContext['sampleRate']; + }); + + if(this->spec.freq != sampleRate) { + for (i = this->spec.samples; i > 0; i--) { + f = (float)i / (float)sampleRate * (float)this->spec.freq; + if (SDL_floor(f) == f) { + this->hidden->conv_in_len = SDL_floor(f); + break; + } + } + + this->spec.freq = sampleRate; + } + + SDL_CalculateAudioSpec(&this->spec); + + /* setup a ScriptProcessorNode */ + EM_ASM_ARGS({ + SDL2.audio.scriptProcessorNode = SDL2.audioContext['createScriptProcessor']($1, 0, $0); + SDL2.audio.scriptProcessorNode['onaudioprocess'] = function (e) { + SDL2.audio.currentOutputBuffer = e['outputBuffer']; + Runtime.dynCall('vi', $2, [$3]); + }; + SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']); + }, this->spec.channels, this->spec.samples, HandleAudioProcess, this); + return 0; +} + +static int +Emscripten_Init(SDL_AudioDriverImpl * impl) +{ + /* Set the function pointers */ + impl->OpenDevice = Emscripten_OpenDevice; + impl->CloseDevice = Emscripten_CloseDevice; + + /* only one output */ + impl->OnlyHasDefaultOutputDevice = 1; + + /* no threads here */ + impl->SkipMixerLock = 1; + impl->ProvidesOwnCallbackThread = 1; + + /* check availability */ + int available = EM_ASM_INT_V({ + if (typeof(AudioContext) !== 'undefined') { + return 1; + } else if (typeof(webkitAudioContext) !== 'undefined') { + return 1; + } + return 0; + }); + + if (!available) { + SDL_SetError("No audio context available"); + } + + return available; +} + +AudioBootStrap EmscriptenAudio_bootstrap = { + "emscripten", "SDL emscripten audio driver", Emscripten_Init, 0 +}; + +#endif /* SDL_AUDIO_DRIVER_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.h b/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.h new file mode 100644 index 0000000000..cd5377d86c --- /dev/null +++ b/Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.h @@ -0,0 +1,42 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_emscriptenaudio_h +#define _SDL_emscriptenaudio_h + +#include "../SDL_sysaudio.h" + +/* Hidden "this" pointer for the audio functions */ +#define _THIS SDL_AudioDevice *this + +struct SDL_PrivateAudioData +{ + Uint8 *mixbuf; + Uint32 mixlen; + + Uint32 conv_in_len; + + Uint32 write_off, read_off; +}; + +#endif /* _SDL_emscriptenaudio_h */ +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.c b/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.c index e675272dca..6a7882dcbd 100644 --- a/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.c +++ b/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -129,7 +129,7 @@ ESD_WaitDevice(_THIS) /* Check every 10 loops */ if (this->hidden->parent && (((++cnt) % 10) == 0)) { if (kill(this->hidden->parent, 0) < 0 && errno == ESRCH) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } } } @@ -161,7 +161,7 @@ ESD_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (written < 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } } @@ -215,7 +215,7 @@ get_progname(void) static int -ESD_OpenDevice(_THIS, const char *devname, int iscapture) +ESD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { esd_format_t format = (ESD_STREAM | ESD_PLAY); SDL_AudioFormat test_format = 0; diff --git a/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.h b/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.h index e0d5d4cdf3..d362b16ce0 100644 --- a/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.h +++ b/Engine/lib/sdl/src/audio/esd/SDL_esdaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.c b/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.c index b8367715fa..b22a3e9a33 100644 --- a/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.c +++ b/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -143,7 +143,7 @@ SDL_FS_PlayDevice(_THIS) this->hidden->mixsamples); /* If we couldn't write, assume fatal error for now */ if (ret) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", this->hidden->mixlen); @@ -186,7 +186,7 @@ SDL_FS_CloseDevice(_THIS) static int -SDL_FS_OpenDevice(_THIS, const char *devname, int iscapture) +SDL_FS_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { int bytes; SDL_AudioFormat test_format = 0, format = 0; diff --git a/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.h b/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.h index 1f9d6bd273..5cf8a2009b 100644 --- a/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.h +++ b/Engine/lib/sdl/src/audio/fusionsound/SDL_fsaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.cc b/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.cc index dddb779221..38f3b96218 100644 --- a/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.cc +++ b/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -111,7 +111,7 @@ UnmaskSignals(sigset_t * omask) static int -HAIKUAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +HAIKUAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { int valid_datatype = 0; media_raw_audio_format format; diff --git a/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.h b/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.h index c6c019e9c1..23e5a7655d 100644 --- a/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.h +++ b/Engine/lib/sdl/src/audio/haiku/SDL_haikuaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.c b/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.c new file mode 100644 index 0000000000..2d1ee73e9d --- /dev/null +++ b/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.c @@ -0,0 +1,152 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#if SDL_AUDIO_DRIVER_NACL + +#include "SDL_naclaudio.h" + +#include "SDL_audio.h" +#include "SDL_mutex.h" +#include "../SDL_audiomem.h" +#include "../SDL_audio_c.h" +#include "../SDL_audiodev_c.h" + +#include "ppapi/c/pp_errors.h" +#include "ppapi/c/pp_instance.h" +#include "ppapi_simple/ps.h" +#include "ppapi_simple/ps_interface.h" +#include "ppapi_simple/ps_event.h" + +/* The tag name used by NACL audio */ +#define NACLAUD_DRIVER_NAME "nacl" + +#define SAMPLE_FRAME_COUNT 4096 + +/* Audio driver functions */ +static int NACLAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture); +static void NACLAUD_CloseDevice(_THIS); +static void nacl_audio_callback(void* samples, uint32_t buffer_size, PP_TimeDelta latency, void* data); + +/* FIXME: Make use of latency if needed */ +static void nacl_audio_callback(void* samples, uint32_t buffer_size, PP_TimeDelta latency, void* data) { + SDL_AudioDevice* _this = (SDL_AudioDevice*) data; + + SDL_LockMutex(private->mutex); + + if (_this->enabled && !_this->paused) { + if (_this->convert.needed) { + SDL_LockMutex(_this->mixer_lock); + (*_this->spec.callback) (_this->spec.userdata, + (Uint8 *) _this->convert.buf, + _this->convert.len); + SDL_UnlockMutex(_this->mixer_lock); + SDL_ConvertAudio(&_this->convert); + SDL_memcpy(samples, _this->convert.buf, _this->convert.len_cvt); + } else { + SDL_LockMutex(_this->mixer_lock); + (*_this->spec.callback) (_this->spec.userdata, (Uint8 *) samples, buffer_size); + SDL_UnlockMutex(_this->mixer_lock); + } + } else { + SDL_memset(samples, 0, buffer_size); + } + + return; +} + +static void NACLAUD_CloseDevice(SDL_AudioDevice *device) { + const PPB_Core *core = PSInterfaceCore(); + const PPB_Audio *ppb_audio = PSInterfaceAudio(); + SDL_PrivateAudioData *hidden = (SDL_PrivateAudioData *) device->hidden; + + ppb_audio->StopPlayback(hidden->audio); + SDL_DestroyMutex(hidden->mutex); + core->ReleaseResource(hidden->audio); +} + +static int +NACLAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { + PP_Instance instance = PSGetInstanceId(); + const PPB_Audio *ppb_audio = PSInterfaceAudio(); + const PPB_AudioConfig *ppb_audiocfg = PSInterfaceAudioConfig(); + + private = (SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *private)); + if (private == NULL) { + SDL_OutOfMemory(); + return 0; + } + + private->mutex = SDL_CreateMutex(); + _this->spec.freq = 44100; + _this->spec.format = AUDIO_S16LSB; + _this->spec.channels = 2; + _this->spec.samples = ppb_audiocfg->RecommendSampleFrameCount( + instance, + PP_AUDIOSAMPLERATE_44100, + SAMPLE_FRAME_COUNT); + + /* Calculate the final parameters for this audio specification */ + SDL_CalculateAudioSpec(&_this->spec); + + private->audio = ppb_audio->Create( + instance, + ppb_audiocfg->CreateStereo16Bit(instance, PP_AUDIOSAMPLERATE_44100, _this->spec.samples), + nacl_audio_callback, + _this); + + /* Start audio playback while we are still on the main thread. */ + ppb_audio->StartPlayback(private->audio); + + return 1; +} + +static int +NACLAUD_Init(SDL_AudioDriverImpl * impl) +{ + if (PSGetInstanceId() == 0) { + return 0; + } + + /* Set the function pointers */ + impl->OpenDevice = NACLAUD_OpenDevice; + impl->CloseDevice = NACLAUD_CloseDevice; + impl->OnlyHasDefaultOutputDevice = 1; + impl->ProvidesOwnCallbackThread = 1; + /* + * impl->WaitDevice = NACLAUD_WaitDevice; + * impl->GetDeviceBuf = NACLAUD_GetDeviceBuf; + * impl->PlayDevice = NACLAUD_PlayDevice; + * impl->Deinitialize = NACLAUD_Deinitialize; + */ + + return 1; +} + +AudioBootStrap NACLAUD_bootstrap = { + NACLAUD_DRIVER_NAME, "SDL NaCl Audio Driver", + NACLAUD_Init, 0 +}; + +#endif /* SDL_AUDIO_DRIVER_NACL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.h b/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.h new file mode 100644 index 0000000000..90ff5448e1 --- /dev/null +++ b/Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.h @@ -0,0 +1,41 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#ifndef _SDL_naclaudio_h +#define _SDL_naclaudio_h + +#include "SDL_audio.h" +#include "../SDL_sysaudio.h" +#include "SDL_mutex.h" + +#include "ppapi/c/ppb_audio.h" + +#define _THIS SDL_AudioDevice *_this +#define private _this->hidden + +typedef struct SDL_PrivateAudioData { + SDL_mutex* mutex; + PP_Resource audio; +} SDL_PrivateAudioData; + +#endif /* _SDL_naclaudio_h */ diff --git a/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.c b/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.c index a41a480f2c..9de5ff8b42 100644 --- a/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.c +++ b/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -276,7 +276,7 @@ find_device(_THIS, int nch) } static int -NAS_OpenDevice(_THIS, const char *devname, int iscapture) +NAS_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { AuElement elms[3]; int buffer_size; diff --git a/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.h b/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.h index e1ee6a521c..2f46b0b601 100644 --- a/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.h +++ b/Engine/lib/sdl/src/audio/nas/SDL_nasaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/paudio/SDL_paudio.c b/Engine/lib/sdl/src/audio/paudio/SDL_paudio.c index 032d8d2cd8..14c9701f46 100644 --- a/Engine/lib/sdl/src/audio/paudio/SDL_paudio.c +++ b/Engine/lib/sdl/src/audio/paudio/SDL_paudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -111,7 +111,7 @@ OpenAudioPath(char *path, int maxlen, int flags, int classic) if (stat(audiopath, &sb) == 0) { fd = open(audiopath, flags, 0); - if (fd > 0) { + if (fd >= 0) { if (path != NULL) { SDL_strlcpy(path, audiopath, maxlen); } @@ -176,7 +176,7 @@ PAUDIO_WaitDevice(_THIS) * the user know what happened. */ fprintf(stderr, "SDL: %s - %s\n", strerror(errno), message); - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); /* Don't try to close - may hang */ this->hidden->audio_fd = -1; #ifdef DEBUG_AUDIO @@ -212,7 +212,7 @@ PAUDIO_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (written < 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", written); @@ -241,7 +241,7 @@ PAUDIO_CloseDevice(_THIS) } static int -PAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +PAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { const char *workaround = SDL_getenv("SDL_DSP_NOSELECT"); char audiodev[1024]; diff --git a/Engine/lib/sdl/src/audio/paudio/SDL_paudio.h b/Engine/lib/sdl/src/audio/paudio/SDL_paudio.h index 5a1a648843..ebc8bb5b1b 100644 --- a/Engine/lib/sdl/src/audio/paudio/SDL_paudio.h +++ b/Engine/lib/sdl/src/audio/paudio/SDL_paudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.c b/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.c index 5b17059261..18d2947e43 100644 --- a/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.c +++ b/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#if SDL_AUDIO_DRIVER_PSP #include #include @@ -40,7 +43,7 @@ #define PSPAUD_DRIVER_NAME "psp" static int -PSPAUD_OpenDevice(_THIS, const char *devname, int iscapture) +PSPAUD_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { int format, mixlen, i; this->hidden = (struct SDL_PrivateAudioData *) @@ -191,5 +194,6 @@ AudioBootStrap PSPAUD_bootstrap = { /* SDL_AUDI */ +#endif /* SDL_AUDIO_DRIVER_PSP */ - +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.h b/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.h index 8e420f3135..6b266bd0cc 100644 --- a/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.h +++ b/Engine/lib/sdl/src/audio/psp/SDL_pspaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,7 +24,7 @@ #include "../SDL_sysaudio.h" -/* Hidden "this" pointer for the video functions */ +/* Hidden "this" pointer for the audio functions */ #define _THIS SDL_AudioDevice *this #define NUM_BUFFERS 2 diff --git a/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.c b/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.c index c3e1238b47..6b11e066ff 100644 --- a/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.c +++ b/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,7 @@ Stéphan Kochen: stephan .a.t. kochen.nl */ #include "../../SDL_internal.h" +#include "SDL_assert.h" #if SDL_AUDIO_DRIVER_PULSEAUDIO @@ -38,7 +39,6 @@ #include #include #include -#include #include "SDL_timer.h" #include "SDL_audio.h" @@ -66,16 +66,14 @@ static SDL_INLINE int PA_STREAM_IS_GOOD(pa_stream_state_t x) { static const char *(*PULSEAUDIO_pa_get_library_version) (void); -static pa_simple *(*PULSEAUDIO_pa_simple_new) (const char *, const char *, - pa_stream_direction_t, const char *, const char *, const pa_sample_spec *, - const pa_channel_map *, const pa_buffer_attr *, int *); -static void (*PULSEAUDIO_pa_simple_free) (pa_simple *); static pa_channel_map *(*PULSEAUDIO_pa_channel_map_init_auto) ( pa_channel_map *, unsigned, pa_channel_map_def_t); static const char * (*PULSEAUDIO_pa_strerror) (int); static pa_mainloop * (*PULSEAUDIO_pa_mainloop_new) (void); static pa_mainloop_api * (*PULSEAUDIO_pa_mainloop_get_api) (pa_mainloop *); static int (*PULSEAUDIO_pa_mainloop_iterate) (pa_mainloop *, int, int *); +static int (*PULSEAUDIO_pa_mainloop_run) (pa_mainloop *, int *); +static void (*PULSEAUDIO_pa_mainloop_quit) (pa_mainloop *, int); static void (*PULSEAUDIO_pa_mainloop_free) (pa_mainloop *); static pa_operation_state_t (*PULSEAUDIO_pa_operation_get_state) ( @@ -87,7 +85,13 @@ static pa_context * (*PULSEAUDIO_pa_context_new) (pa_mainloop_api *, const char *); static int (*PULSEAUDIO_pa_context_connect) (pa_context *, const char *, pa_context_flags_t, const pa_spawn_api *); +static pa_operation * (*PULSEAUDIO_pa_context_get_sink_info_list) (pa_context *, pa_sink_info_cb_t, void *); +static pa_operation * (*PULSEAUDIO_pa_context_get_source_info_list) (pa_context *, pa_source_info_cb_t, void *); +static pa_operation * (*PULSEAUDIO_pa_context_get_sink_info_by_index) (pa_context *, uint32_t, pa_sink_info_cb_t, void *); +static pa_operation * (*PULSEAUDIO_pa_context_get_source_info_by_index) (pa_context *, uint32_t, pa_source_info_cb_t, void *); static pa_context_state_t (*PULSEAUDIO_pa_context_get_state) (pa_context *); +static pa_operation * (*PULSEAUDIO_pa_context_subscribe) (pa_context *, pa_subscription_mask_t, pa_context_success_cb_t, void *); +static void (*PULSEAUDIO_pa_context_set_subscribe_callback) (pa_context *, pa_context_subscribe_cb_t, void *); static void (*PULSEAUDIO_pa_context_disconnect) (pa_context *); static void (*PULSEAUDIO_pa_context_unref) (pa_context *); @@ -179,18 +183,24 @@ static int load_pulseaudio_syms(void) { SDL_PULSEAUDIO_SYM(pa_get_library_version); - SDL_PULSEAUDIO_SYM(pa_simple_new); - SDL_PULSEAUDIO_SYM(pa_simple_free); SDL_PULSEAUDIO_SYM(pa_mainloop_new); SDL_PULSEAUDIO_SYM(pa_mainloop_get_api); SDL_PULSEAUDIO_SYM(pa_mainloop_iterate); + SDL_PULSEAUDIO_SYM(pa_mainloop_run); + SDL_PULSEAUDIO_SYM(pa_mainloop_quit); SDL_PULSEAUDIO_SYM(pa_mainloop_free); SDL_PULSEAUDIO_SYM(pa_operation_get_state); SDL_PULSEAUDIO_SYM(pa_operation_cancel); SDL_PULSEAUDIO_SYM(pa_operation_unref); SDL_PULSEAUDIO_SYM(pa_context_new); SDL_PULSEAUDIO_SYM(pa_context_connect); + SDL_PULSEAUDIO_SYM(pa_context_get_sink_info_list); + SDL_PULSEAUDIO_SYM(pa_context_get_source_info_list); + SDL_PULSEAUDIO_SYM(pa_context_get_sink_info_by_index); + SDL_PULSEAUDIO_SYM(pa_context_get_source_info_by_index); SDL_PULSEAUDIO_SYM(pa_context_get_state); + SDL_PULSEAUDIO_SYM(pa_context_subscribe); + SDL_PULSEAUDIO_SYM(pa_context_set_subscribe_callback); SDL_PULSEAUDIO_SYM(pa_context_disconnect); SDL_PULSEAUDIO_SYM(pa_context_unref); SDL_PULSEAUDIO_SYM(pa_stream_new); @@ -206,39 +216,120 @@ load_pulseaudio_syms(void) return 0; } +static SDL_INLINE int +squashVersion(const int major, const int minor, const int patch) +{ + return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF); +} -/* Check to see if we can connect to PulseAudio */ -static SDL_bool -CheckPulseAudioAvailable() +/* Workaround for older pulse: pa_context_new() must have non-NULL appname */ +static const char * +getAppName(void) { - pa_simple *s; - pa_sample_spec ss; + const char *verstr = PULSEAUDIO_pa_get_library_version(); + if (verstr != NULL) { + int maj, min, patch; + if (SDL_sscanf(verstr, "%d.%d.%d", &maj, &min, &patch) == 3) { + if (squashVersion(maj, min, patch) >= squashVersion(0, 9, 15)) { + return NULL; /* 0.9.15+ handles NULL correctly. */ + } + } + } + return "SDL Application"; /* oh well. */ +} - ss.format = PA_SAMPLE_S16NE; - ss.channels = 1; - ss.rate = 22050; +static void +WaitForPulseOperation(pa_mainloop *mainloop, pa_operation *o) +{ + /* This checks for NO errors currently. Either fix that, check results elsewhere, or do things you don't care about. */ + if (mainloop && o) { + SDL_bool okay = SDL_TRUE; + while (okay && (PULSEAUDIO_pa_operation_get_state(o) == PA_OPERATION_RUNNING)) { + okay = (PULSEAUDIO_pa_mainloop_iterate(mainloop, 1, NULL) >= 0); + } + PULSEAUDIO_pa_operation_unref(o); + } +} - s = PULSEAUDIO_pa_simple_new(NULL, "SDL", PA_STREAM_PLAYBACK, NULL, - "Test", &ss, NULL, NULL, NULL); - if (s) { - PULSEAUDIO_pa_simple_free(s); - return SDL_TRUE; - } else { - return SDL_FALSE; +static void +DisconnectFromPulseServer(pa_mainloop *mainloop, pa_context *context) +{ + if (context) { + PULSEAUDIO_pa_context_disconnect(context); + PULSEAUDIO_pa_context_unref(context); + } + if (mainloop != NULL) { + PULSEAUDIO_pa_mainloop_free(mainloop); } } +static int +ConnectToPulseServer_Internal(pa_mainloop **_mainloop, pa_context **_context) +{ + pa_mainloop *mainloop = NULL; + pa_context *context = NULL; + pa_mainloop_api *mainloop_api = NULL; + int state = 0; + + *_mainloop = NULL; + *_context = NULL; + + /* Set up a new main loop */ + if (!(mainloop = PULSEAUDIO_pa_mainloop_new())) { + return SDL_SetError("pa_mainloop_new() failed"); + } + + *_mainloop = mainloop; + + mainloop_api = PULSEAUDIO_pa_mainloop_get_api(mainloop); + SDL_assert(mainloop_api); /* this never fails, right? */ + + context = PULSEAUDIO_pa_context_new(mainloop_api, getAppName()); + if (!context) { + return SDL_SetError("pa_context_new() failed"); + } + *_context = context; + + /* Connect to the PulseAudio server */ + if (PULSEAUDIO_pa_context_connect(context, NULL, 0, NULL) < 0) { + return SDL_SetError("Could not setup connection to PulseAudio"); + } + + do { + if (PULSEAUDIO_pa_mainloop_iterate(mainloop, 1, NULL) < 0) { + return SDL_SetError("pa_mainloop_iterate() failed"); + } + state = PULSEAUDIO_pa_context_get_state(context); + if (!PA_CONTEXT_IS_GOOD(state)) { + return SDL_SetError("Could not connect to PulseAudio"); + } + } while (state != PA_CONTEXT_READY); + + return 0; /* connected and ready! */ +} + +static int +ConnectToPulseServer(pa_mainloop **_mainloop, pa_context **_context) +{ + const int retval = ConnectToPulseServer_Internal(_mainloop, _context); + if (retval < 0) { + DisconnectFromPulseServer(*_mainloop, *_context); + } + return retval; +} + + /* This function waits until it is possible to write a full sound buffer */ static void PULSEAUDIO_WaitDevice(_THIS) { struct SDL_PrivateAudioData *h = this->hidden; - while(1) { + while (this->enabled) { if (PULSEAUDIO_pa_context_get_state(h->context) != PA_CONTEXT_READY || PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY || PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); return; } if (PULSEAUDIO_pa_stream_writable_size(h->stream) >= h->mixlen) { @@ -252,9 +343,10 @@ PULSEAUDIO_PlayDevice(_THIS) { /* Write the audio data */ struct SDL_PrivateAudioData *h = this->hidden; - if (PULSEAUDIO_pa_stream_write(h->stream, h->mixbuf, h->mixlen, NULL, 0LL, - PA_SEEK_RELATIVE) < 0) { - this->enabled = 0; + if (this->enabled) { + if (PULSEAUDIO_pa_stream_write(h->stream, h->mixbuf, h->mixlen, NULL, 0LL, PA_SEEK_RELATIVE) < 0) { + SDL_OpenedAudioDeviceDisconnected(this); + } } } @@ -267,24 +359,21 @@ stream_drain_complete(pa_stream *s, int success, void *userdata) static void PULSEAUDIO_WaitDone(_THIS) { - struct SDL_PrivateAudioData *h = this->hidden; - pa_operation *o; - - o = PULSEAUDIO_pa_stream_drain(h->stream, stream_drain_complete, NULL); - if (!o) { - return; - } - - while (PULSEAUDIO_pa_operation_get_state(o) != PA_OPERATION_DONE) { - if (PULSEAUDIO_pa_context_get_state(h->context) != PA_CONTEXT_READY || - PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY || - PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { - PULSEAUDIO_pa_operation_cancel(o); - break; + if (this->enabled) { + struct SDL_PrivateAudioData *h = this->hidden; + pa_operation *o = PULSEAUDIO_pa_stream_drain(h->stream, stream_drain_complete, NULL); + if (o) { + while (PULSEAUDIO_pa_operation_get_state(o) != PA_OPERATION_DONE) { + if (PULSEAUDIO_pa_context_get_state(h->context) != PA_CONTEXT_READY || + PULSEAUDIO_pa_stream_get_state(h->stream) != PA_STREAM_READY || + PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { + PULSEAUDIO_pa_operation_cancel(o); + break; + } + } + PULSEAUDIO_pa_operation_unref(o); } } - - PULSEAUDIO_pa_operation_unref(o); } @@ -301,51 +390,41 @@ PULSEAUDIO_CloseDevice(_THIS) { if (this->hidden != NULL) { SDL_FreeAudioMem(this->hidden->mixbuf); - this->hidden->mixbuf = NULL; + SDL_free(this->hidden->device_name); if (this->hidden->stream) { PULSEAUDIO_pa_stream_disconnect(this->hidden->stream); PULSEAUDIO_pa_stream_unref(this->hidden->stream); - this->hidden->stream = NULL; - } - if (this->hidden->context != NULL) { - PULSEAUDIO_pa_context_disconnect(this->hidden->context); - PULSEAUDIO_pa_context_unref(this->hidden->context); - this->hidden->context = NULL; - } - if (this->hidden->mainloop != NULL) { - PULSEAUDIO_pa_mainloop_free(this->hidden->mainloop); - this->hidden->mainloop = NULL; } + DisconnectFromPulseServer(this->hidden->mainloop, this->hidden->context); SDL_free(this->hidden); this->hidden = NULL; } } - -static SDL_INLINE int -squashVersion(const int major, const int minor, const int patch) +static void +DeviceNameCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) { - return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF); + if (i) { + char **devname = (char **) data; + *devname = SDL_strdup(i->name); + } } -/* Workaround for older pulse: pa_context_new() must have non-NULL appname */ -static const char * -getAppName(void) +static SDL_bool +FindDeviceName(struct SDL_PrivateAudioData *h, void *handle) { - const char *verstr = PULSEAUDIO_pa_get_library_version(); - if (verstr != NULL) { - int maj, min, patch; - if (SDL_sscanf(verstr, "%d.%d.%d", &maj, &min, &patch) == 3) { - if (squashVersion(maj, min, patch) >= squashVersion(0, 9, 15)) { - return NULL; /* 0.9.15+ handles NULL correctly. */ - } - } + const uint32_t idx = ((uint32_t) ((size_t) handle)) - 1; + + if (handle == NULL) { /* NULL == default device. */ + return SDL_TRUE; } - return "SDL Application"; /* oh well. */ + + WaitForPulseOperation(h->mainloop, PULSEAUDIO_pa_context_get_sink_info_by_index(h->context, idx, DeviceNameCallback, &h->device_name)); + return (h->device_name != NULL); } static int -PULSEAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +PULSEAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { struct SDL_PrivateAudioData *h = NULL; Uint16 test_format = 0; @@ -442,41 +521,20 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) paattr.minreq = h->mixlen; #endif - /* The SDL ALSA output hints us that we use Windows' channel mapping */ - /* http://bugzilla.libsdl.org/show_bug.cgi?id=110 */ - PULSEAUDIO_pa_channel_map_init_auto(&pacmap, this->spec.channels, - PA_CHANNEL_MAP_WAVEEX); - - /* Set up a new main loop */ - if (!(h->mainloop = PULSEAUDIO_pa_mainloop_new())) { - PULSEAUDIO_CloseDevice(this); - return SDL_SetError("pa_mainloop_new() failed"); - } - - h->mainloop_api = PULSEAUDIO_pa_mainloop_get_api(h->mainloop); - h->context = PULSEAUDIO_pa_context_new(h->mainloop_api, getAppName()); - if (!h->context) { + if (ConnectToPulseServer(&h->mainloop, &h->context) < 0) { PULSEAUDIO_CloseDevice(this); - return SDL_SetError("pa_context_new() failed"); + return SDL_SetError("Could not connect to PulseAudio server"); } - /* Connect to the PulseAudio server */ - if (PULSEAUDIO_pa_context_connect(h->context, NULL, 0, NULL) < 0) { + if (!FindDeviceName(h, handle)) { PULSEAUDIO_CloseDevice(this); - return SDL_SetError("Could not setup connection to PulseAudio"); + return SDL_SetError("Requested PulseAudio sink missing?"); } - do { - if (PULSEAUDIO_pa_mainloop_iterate(h->mainloop, 1, NULL) < 0) { - PULSEAUDIO_CloseDevice(this); - return SDL_SetError("pa_mainloop_iterate() failed"); - } - state = PULSEAUDIO_pa_context_get_state(h->context); - if (!PA_CONTEXT_IS_GOOD(state)) { - PULSEAUDIO_CloseDevice(this); - return SDL_SetError("Could not connect to PulseAudio"); - } - } while (state != PA_CONTEXT_READY); + /* The SDL ALSA output hints us that we use Windows' channel mapping */ + /* http://bugzilla.libsdl.org/show_bug.cgi?id=110 */ + PULSEAUDIO_pa_channel_map_init_auto(&pacmap, this->spec.channels, + PA_CHANNEL_MAP_WAVEEX); h->stream = PULSEAUDIO_pa_stream_new( h->context, @@ -490,7 +548,13 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) return SDL_SetError("Could not set up PulseAudio stream"); } - if (PULSEAUDIO_pa_stream_connect_playback(h->stream, NULL, &paattr, flags, + /* now that we have multi-device support, don't move a stream from + a device that was unplugged to something else, unless we're default. */ + if (h->device_name != NULL) { + flags |= PA_STREAM_DONT_MOVE; + } + + if (PULSEAUDIO_pa_stream_connect_playback(h->stream, h->device_name, &paattr, flags, NULL, NULL) < 0) { PULSEAUDIO_CloseDevice(this); return SDL_SetError("Could not connect PulseAudio stream"); @@ -504,7 +568,7 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) state = PULSEAUDIO_pa_stream_get_state(h->stream); if (!PA_STREAM_IS_GOOD(state)) { PULSEAUDIO_CloseDevice(this); - return SDL_SetError("Could not create to PulseAudio stream"); + return SDL_SetError("Could not connect PulseAudio stream"); } } while (state != PA_STREAM_READY); @@ -512,10 +576,92 @@ PULSEAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) return 0; } +static pa_mainloop *hotplug_mainloop = NULL; +static pa_context *hotplug_context = NULL; +static SDL_Thread *hotplug_thread = NULL; + +/* device handles are device index + 1, cast to void*, so we never pass a NULL. */ + +/* This is called when PulseAudio adds an output ("sink") device. */ +static void +SinkInfoCallback(pa_context *c, const pa_sink_info *i, int is_last, void *data) +{ + if (i) { + SDL_AddAudioDevice(SDL_FALSE, i->description, (void *) ((size_t) i->index+1)); + } +} + +/* This is called when PulseAudio adds a capture ("source") device. */ +static void +SourceInfoCallback(pa_context *c, const pa_source_info *i, int is_last, void *data) +{ + if (i) { + /* Skip "monitor" sources. These are just output from other sinks. */ + if (i->monitor_of_sink == PA_INVALID_INDEX) { + SDL_AddAudioDevice(SDL_TRUE, i->description, (void *) ((size_t) i->index+1)); + } + } +} + +/* This is called when PulseAudio has a device connected/removed/changed. */ +static void +HotplugCallback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *data) +{ + const SDL_bool added = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW); + const SDL_bool removed = ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE); + + if (added || removed) { /* we only care about add/remove events. */ + const SDL_bool sink = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SINK); + const SDL_bool source = ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_SOURCE); + + /* adds need sink details from the PulseAudio server. Another callback... */ + if (added && sink) { + PULSEAUDIO_pa_context_get_sink_info_by_index(hotplug_context, idx, SinkInfoCallback, NULL); + } else if (added && source) { + PULSEAUDIO_pa_context_get_source_info_by_index(hotplug_context, idx, SourceInfoCallback, NULL); + } else if (removed && (sink || source)) { + /* removes we can handle just with the device index. */ + SDL_RemoveAudioDevice(source != 0, (void *) ((size_t) idx+1)); + } + } +} + +/* this runs as a thread while the Pulse target is initialized to catch hotplug events. */ +static int SDLCALL +HotplugThread(void *data) +{ + pa_operation *o; + SDL_SetThreadPriority(SDL_THREAD_PRIORITY_LOW); + PULSEAUDIO_pa_context_set_subscribe_callback(hotplug_context, HotplugCallback, NULL); + o = PULSEAUDIO_pa_context_subscribe(hotplug_context, PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE, NULL, NULL); + PULSEAUDIO_pa_operation_unref(o); /* don't wait for it, just do our thing. */ + PULSEAUDIO_pa_mainloop_run(hotplug_mainloop, NULL); + return 0; +} + +static void +PULSEAUDIO_DetectDevices() +{ + WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_sink_info_list(hotplug_context, SinkInfoCallback, NULL)); + WaitForPulseOperation(hotplug_mainloop, PULSEAUDIO_pa_context_get_source_info_list(hotplug_context, SourceInfoCallback, NULL)); + + /* ok, we have a sane list, let's set up hotplug notifications now... */ + hotplug_thread = SDL_CreateThread(HotplugThread, "PulseHotplug", NULL); +} static void PULSEAUDIO_Deinitialize(void) { + if (hotplug_thread) { + PULSEAUDIO_pa_mainloop_quit(hotplug_mainloop, 0); + SDL_WaitThread(hotplug_thread, NULL); + hotplug_thread = NULL; + } + + DisconnectFromPulseServer(hotplug_mainloop, hotplug_context); + hotplug_mainloop = NULL; + hotplug_context = NULL; + UnloadPulseAudioLibrary(); } @@ -526,12 +672,13 @@ PULSEAUDIO_Init(SDL_AudioDriverImpl * impl) return 0; } - if (!CheckPulseAudioAvailable()) { + if (ConnectToPulseServer(&hotplug_mainloop, &hotplug_context) < 0) { UnloadPulseAudioLibrary(); return 0; } /* Set the function pointers */ + impl->DetectDevices = PULSEAUDIO_DetectDevices; impl->OpenDevice = PULSEAUDIO_OpenDevice; impl->PlayDevice = PULSEAUDIO_PlayDevice; impl->WaitDevice = PULSEAUDIO_WaitDevice; @@ -539,12 +686,10 @@ PULSEAUDIO_Init(SDL_AudioDriverImpl * impl) impl->CloseDevice = PULSEAUDIO_CloseDevice; impl->WaitDone = PULSEAUDIO_WaitDone; impl->Deinitialize = PULSEAUDIO_Deinitialize; - impl->OnlyHasDefaultOutputDevice = 1; return 1; /* this audio target is available. */ } - AudioBootStrap PULSEAUDIO_bootstrap = { "pulseaudio", "PulseAudio", PULSEAUDIO_Init, 0 }; diff --git a/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.h b/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.h index a75409bc0a..c57ab71329 100644 --- a/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.h +++ b/Engine/lib/sdl/src/audio/pulseaudio/SDL_pulseaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,9 +32,10 @@ struct SDL_PrivateAudioData { + char *device_name; + /* pulseaudio structures */ pa_mainloop *mainloop; - pa_mainloop_api *mainloop_api; pa_context *context; pa_stream *stream; diff --git a/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.c b/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.c index d6b8a68004..1899ca6d94 100644 --- a/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.c +++ b/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,6 +19,15 @@ 3. This notice may not be removed or altered from any source distribution. */ +/* + * !!! FIXME: streamline this a little by removing all the + * !!! FIXME: if (capture) {} else {} sections that are identical + * !!! FIXME: except for one flag. + */ + +/* !!! FIXME: can this target support hotplugging? */ +/* !!! FIXME: ...does SDL2 even support QNX? */ + #include "../../SDL_internal.h" #if SDL_AUDIO_DRIVER_QSA @@ -300,7 +309,7 @@ QSA_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if (towrite != 0) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } } @@ -337,8 +346,9 @@ QSA_CloseDevice(_THIS) } static int -QSA_OpenDevice(_THIS, const char *devname, int iscapture) +QSA_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { + const QSA_Device *device = (const QSA_Device *) handle; int status = 0; int format = 0; SDL_AudioFormat test_format = 0; @@ -363,80 +373,19 @@ QSA_OpenDevice(_THIS, const char *devname, int iscapture) /* Initialize channel direction: capture or playback */ this->hidden->iscapture = iscapture; - /* Find deviceid and cardid by device name for playback */ - if ((!this->hidden->iscapture) && (devname != NULL)) { - uint32_t device; - int32_t status; - - /* Search in the playback devices */ - device = 0; - do { - status = SDL_strcmp(qsa_playback_device[device].name, devname); - if (status == 0) { - /* Found requested device */ - this->hidden->deviceno = qsa_playback_device[device].deviceno; - this->hidden->cardno = qsa_playback_device[device].cardno; - break; - } - device++; - if (device >= qsa_playback_devices) { - QSA_CloseDevice(this); - return SDL_SetError("No such playback device"); - } - } while (1); - } - - /* Find deviceid and cardid by device name for capture */ - if ((this->hidden->iscapture) && (devname != NULL)) { - /* Search in the capture devices */ - uint32_t device; - int32_t status; - - /* Searching in the playback devices */ - device = 0; - do { - status = SDL_strcmp(qsa_capture_device[device].name, devname); - if (status == 0) { - /* Found requested device */ - this->hidden->deviceno = qsa_capture_device[device].deviceno; - this->hidden->cardno = qsa_capture_device[device].cardno; - break; - } - device++; - if (device >= qsa_capture_devices) { - QSA_CloseDevice(this); - return SDL_SetError("No such capture device"); - } - } while (1); - } - - /* Check if SDL requested default audio device */ - if (devname == NULL) { - /* Open system default audio device */ - if (!this->hidden->iscapture) { - status = snd_pcm_open_preferred(&this->hidden->audio_handle, - &this->hidden->cardno, - &this->hidden->deviceno, - SND_PCM_OPEN_PLAYBACK); - } else { - status = snd_pcm_open_preferred(&this->hidden->audio_handle, - &this->hidden->cardno, - &this->hidden->deviceno, - SND_PCM_OPEN_CAPTURE); - } - } else { + if (device != NULL) { /* Open requested audio device */ - if (!this->hidden->iscapture) { - status = - snd_pcm_open(&this->hidden->audio_handle, - this->hidden->cardno, this->hidden->deviceno, - SND_PCM_OPEN_PLAYBACK); - } else { - status = - snd_pcm_open(&this->hidden->audio_handle, - this->hidden->cardno, this->hidden->deviceno, - SND_PCM_OPEN_CAPTURE); - } + this->hidden->deviceno = device->deviceno; + this->hidden->cardno = device->cardno; + status = snd_pcm_open(&this->hidden->audio_handle, + device->cardno, device->deviceno, + iscapture ? SND_PCM_OPEN_PLAYBACK : SND_PCM_OPEN_CAPTURE); + } else { + /* Open system default audio device */ + status = snd_pcm_open_preferred(&this->hidden->audio_handle, + &this->hidden->cardno, + &this->hidden->deviceno, + iscapture ? SND_PCM_OPEN_PLAYBACK : SND_PCM_OPEN_CAPTURE); } /* Check if requested device is opened */ @@ -638,7 +587,7 @@ QSA_OpenDevice(_THIS, const char *devname, int iscapture) } static void -QSA_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +QSA_DetectDevices(void) { uint32_t it; uint32_t cards; @@ -656,8 +605,9 @@ QSA_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) return; } + /* !!! FIXME: code duplication */ /* Find requested devices by type */ - if (!iscapture) { + { /* output devices */ /* Playback devices enumeration requested */ for (it = 0; it < cards; it++) { devices = 0; @@ -688,7 +638,7 @@ QSA_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) devices; status = snd_pcm_close(handle); if (status == EOK) { - addfn(qsa_playback_device[qsa_playback_devices].name); + SDL_AddAudioDevice(SDL_FALSE, qsa_playback_device[qsa_playback_devices].name, &qsa_playback_device[qsa_playback_devices]); qsa_playback_devices++; } } else { @@ -713,7 +663,9 @@ QSA_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) break; } } - } else { + } + + { /* capture devices */ /* Capture devices enumeration requested */ for (it = 0; it < cards; it++) { devices = 0; @@ -744,7 +696,7 @@ QSA_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) devices; status = snd_pcm_close(handle); if (status == EOK) { - addfn(qsa_capture_device[qsa_capture_devices].name); + SDL_AddAudioDevice(SDL_TRUE, qsa_capture_device[qsa_capture_devices].name, &qsa_capture_device[qsa_capture_devices]); qsa_capture_devices++; } } else { diff --git a/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.h b/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.h index 66650d2a35..53d37e96fd 100644 --- a/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.h +++ b/Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/sdlgenaudiocvt.pl b/Engine/lib/sdl/src/audio/sdlgenaudiocvt.pl index 73c021aa4b..c53f1c3559 100644 --- a/Engine/lib/sdl/src/audio/sdlgenaudiocvt.pl +++ b/Engine/lib/sdl/src/audio/sdlgenaudiocvt.pl @@ -38,7 +38,7 @@ sub outputHeader { /* DO NOT EDIT! This file is generated by sdlgenaudiocvt.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -383,6 +383,7 @@ sub buildArbitraryResampleFunc { my $eps_adjust = ($upsample) ? 'dstsize' : 'srcsize'; my $incr = ''; my $incr2 = ''; + my $block_align = $channels * $fsize/8; # !!! FIXME: DEBUG_CONVERT should report frequencies. @@ -395,7 +396,7 @@ sub buildArbitraryResampleFunc { #endif const int srcsize = cvt->len_cvt - $fudge; - const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); + const int dstsize = (int) (((double)(cvt->len_cvt/${block_align})) * cvt->rate_incr) * ${block_align}; register int eps = 0; EOF diff --git a/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.c b/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.c index a0e578303f..64565ae886 100644 --- a/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.c +++ b/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -158,7 +158,7 @@ SNDIO_PlayDevice(_THIS) /* If we couldn't write, assume fatal error for now */ if ( written == 0 ) { - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } #ifdef DEBUG_AUDIO fprintf(stderr, "Wrote %d bytes of audio data\n", written); @@ -193,7 +193,7 @@ SNDIO_CloseDevice(_THIS) } static int -SNDIO_OpenDevice(_THIS, const char *devname, int iscapture) +SNDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); struct sio_par par; @@ -209,7 +209,7 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture) this->hidden->mixlen = this->spec.size; /* !!! FIXME: SIO_DEVANY can be a specific device... */ - if ((this->hidden->dev = SNDIO_sio_open(NULL, SIO_PLAY, 0)) == NULL) { + if ((this->hidden->dev = SNDIO_sio_open(SIO_DEVANY, SIO_PLAY, 0)) == NULL) { SNDIO_CloseDevice(this); return SDL_SetError("sio_open() failed"); } @@ -229,7 +229,17 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture) par.sig = SDL_AUDIO_ISSIGNED(test_format) ? 1 : 0; par.bits = SDL_AUDIO_BITSIZE(test_format); - if (SNDIO_sio_setpar(this->hidden->dev, &par) == 1) { + if (SNDIO_sio_setpar(this->hidden->dev, &par) == 0) { + continue; + } + if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) { + SNDIO_CloseDevice(this); + return SDL_SetError("sio_getpar() failed"); + } + if (par.bps != SIO_BPS(par.bits)) { + continue; + } + if ((par.bits == 8 * par.bps) || (par.msb)) { status = 0; break; } @@ -242,26 +252,21 @@ SNDIO_OpenDevice(_THIS, const char *devname, int iscapture) return SDL_SetError("sndio: Couldn't find any hardware audio formats"); } - if (SNDIO_sio_getpar(this->hidden->dev, &par) == 0) { - SNDIO_CloseDevice(this); - return SDL_SetError("sio_getpar() failed"); - } - - if ((par.bits == 32) && (par.sig) && (par.le)) + if ((par.bps == 4) && (par.sig) && (par.le)) this->spec.format = AUDIO_S32LSB; - else if ((par.bits == 32) && (par.sig) && (!par.le)) + else if ((par.bps == 4) && (par.sig) && (!par.le)) this->spec.format = AUDIO_S32MSB; - else if ((par.bits == 16) && (par.sig) && (par.le)) + else if ((par.bps == 2) && (par.sig) && (par.le)) this->spec.format = AUDIO_S16LSB; - else if ((par.bits == 16) && (par.sig) && (!par.le)) + else if ((par.bps == 2) && (par.sig) && (!par.le)) this->spec.format = AUDIO_S16MSB; - else if ((par.bits == 16) && (!par.sig) && (par.le)) + else if ((par.bps == 2) && (!par.sig) && (par.le)) this->spec.format = AUDIO_U16LSB; - else if ((par.bits == 16) && (!par.sig) && (!par.le)) + else if ((par.bps == 2) && (!par.sig) && (!par.le)) this->spec.format = AUDIO_U16MSB; - else if ((par.bits == 8) && (par.sig)) + else if ((par.bps == 1) && (par.sig)) this->spec.format = AUDIO_S8; - else if ((par.bits == 8) && (!par.sig)) + else if ((par.bps == 1) && (!par.sig)) this->spec.format = AUDIO_U8; else { SNDIO_CloseDevice(this); diff --git a/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.h b/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.h index b8dadb7db5..1e748ac93f 100644 --- a/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.h +++ b/Engine/lib/sdl/src/audio/sndio/SDL_sndioaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.c b/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.c index 7efe30ecec..71029d21fe 100644 --- a/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.c +++ b/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,9 +56,9 @@ static Uint8 snd2au(int sample); /* Audio driver bootstrap functions */ static void -SUNAUDIO_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +SUNAUDIO_DetectDevices(void) { - SDL_EnumUnixAudioDevices(iscapture, 1, (int (*)(int fd)) NULL, addfn); + SDL_EnumUnixAudioDevices(1, (int (*)(int)) NULL); } #ifdef DEBUG_AUDIO @@ -158,7 +158,7 @@ SUNAUDIO_PlayDevice(_THIS) if (write(this->hidden->audio_fd, this->hidden->ulaw_buf, this->hidden->fragsize) < 0) { /* Assume fatal error, for now */ - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } this->hidden->written += this->hidden->fragsize; } else { @@ -168,7 +168,7 @@ SUNAUDIO_PlayDevice(_THIS) if (write(this->hidden->audio_fd, this->hidden->mixbuf, this->spec.size) < 0) { /* Assume fatal error, for now */ - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } this->hidden->written += this->hidden->fragsize; } @@ -198,7 +198,7 @@ SUNAUDIO_CloseDevice(_THIS) } static int -SUNAUDIO_OpenDevice(_THIS, const char *devname, int iscapture) +SUNAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { const int flags = ((iscapture) ? OPEN_FLAGS_INPUT : OPEN_FLAGS_OUTPUT); SDL_AudioFormat format = 0; @@ -414,6 +414,8 @@ SUNAUDIO_Init(SDL_AudioDriverImpl * impl) impl->GetDeviceBuf = SUNAUDIO_GetDeviceBuf; impl->CloseDevice = SUNAUDIO_CloseDevice; + impl->AllowsArbitraryDeviceNames = 1; + return 1; /* this audio target is available. */ } diff --git a/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.h b/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.h index df05e6fcaf..ecced0f510 100644 --- a/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.h +++ b/Engine/lib/sdl/src/audio/sun/SDL_sunaudio.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/winmm/SDL_winmm.c b/Engine/lib/sdl/src/audio/winmm/SDL_winmm.c index 88a8154ec4..6d05a65ef5 100644 --- a/Engine/lib/sdl/src/audio/winmm/SDL_winmm.c +++ b/Engine/lib/sdl/src/audio/winmm/SDL_winmm.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -36,8 +36,9 @@ #define WAVE_FORMAT_IEEE_FLOAT 0x0003 #endif -#define DETECT_DEV_IMPL(typ, capstyp) \ -static void DetectWave##typ##Devs(SDL_AddAudioDevice addfn) { \ +#define DETECT_DEV_IMPL(iscap, typ, capstyp) \ +static void DetectWave##typ##Devs(void) { \ + const UINT iscapture = iscap ? 1 : 0; \ const UINT devcount = wave##typ##GetNumDevs(); \ capstyp caps; \ UINT i; \ @@ -45,24 +46,21 @@ static void DetectWave##typ##Devs(SDL_AddAudioDevice addfn) { \ if (wave##typ##GetDevCaps(i,&caps,sizeof(caps))==MMSYSERR_NOERROR) { \ char *name = WIN_StringToUTF8(caps.szPname); \ if (name != NULL) { \ - addfn(name); \ + SDL_AddAudioDevice((int) iscapture, name, (void *) ((size_t) i+1)); \ SDL_free(name); \ } \ } \ } \ } -DETECT_DEV_IMPL(Out, WAVEOUTCAPS) -DETECT_DEV_IMPL(In, WAVEINCAPS) +DETECT_DEV_IMPL(SDL_FALSE, Out, WAVEOUTCAPS) +DETECT_DEV_IMPL(SDL_TRUE, In, WAVEINCAPS) static void -WINMM_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +WINMM_DetectDevices(void) { - if (iscapture) { - DetectWaveInDevs(addfn); - } else { - DetectWaveOutDevs(addfn); - } + DetectWaveInDevs(); + DetectWaveOutDevs(); } static void CALLBACK @@ -220,48 +218,19 @@ PrepWaveFormat(_THIS, UINT devId, WAVEFORMATEX *pfmt, const int iscapture) } static int -WINMM_OpenDevice(_THIS, const char *devname, int iscapture) +WINMM_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); int valid_datatype = 0; MMRESULT result; WAVEFORMATEX waveformat; UINT devId = WAVE_MAPPER; /* WAVE_MAPPER == choose system's default */ - char *utf8 = NULL; UINT i; - if (devname != NULL) { /* specific device requested? */ - if (iscapture) { - const UINT devcount = waveInGetNumDevs(); - WAVEINCAPS caps; - for (i = 0; (i < devcount) && (devId == WAVE_MAPPER); i++) { - result = waveInGetDevCaps(i, &caps, sizeof (caps)); - if (result != MMSYSERR_NOERROR) - continue; - else if ((utf8 = WIN_StringToUTF8(caps.szPname)) == NULL) - continue; - else if (SDL_strcmp(devname, utf8) == 0) - devId = i; - SDL_free(utf8); - } - } else { - const UINT devcount = waveOutGetNumDevs(); - WAVEOUTCAPS caps; - for (i = 0; (i < devcount) && (devId == WAVE_MAPPER); i++) { - result = waveOutGetDevCaps(i, &caps, sizeof (caps)); - if (result != MMSYSERR_NOERROR) - continue; - else if ((utf8 = WIN_StringToUTF8(caps.szPname)) == NULL) - continue; - else if (SDL_strcmp(devname, utf8) == 0) - devId = i; - SDL_free(utf8); - } - } - - if (devId == WAVE_MAPPER) { - return SDL_SetError("Requested device not found"); - } + if (handle != NULL) { /* specific device requested? */ + /* -1 because we increment the original value to avoid NULL. */ + const size_t val = ((size_t) handle) - 1; + devId = (UINT) val; } /* Initialize all variables that we clean on shutdown */ @@ -279,10 +248,6 @@ WINMM_OpenDevice(_THIS, const char *devname, int iscapture) if (this->spec.channels > 2) this->spec.channels = 2; /* !!! FIXME: is this right? */ - /* Check the buffer size -- minimum of 1/4 second (word aligned) */ - if (this->spec.samples < (this->spec.freq / 4)) - this->spec.samples = ((this->spec.freq / 4) + 3) & ~3; - while ((!valid_datatype) && (test_format)) { switch (test_format) { case AUDIO_U8: diff --git a/Engine/lib/sdl/src/audio/winmm/SDL_winmm.h b/Engine/lib/sdl/src/audio/winmm/SDL_winmm.h index 47996c1aa0..401db398b6 100644 --- a/Engine/lib/sdl/src/audio/winmm/SDL_winmm.h +++ b/Engine/lib/sdl/src/audio/winmm/SDL_winmm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.c b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.c index a1a18df6db..dff234b401 100644 --- a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.c +++ b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -58,13 +58,20 @@ /* The configure script already did any necessary checking */ # define SDL_XAUDIO2_HAS_SDK 1 #elif defined(__WINRT__) -/* WinRT always has access to the .the XAudio 2 SDK */ +/* WinRT always has access to the XAudio 2 SDK (albeit with a header file + that doesn't compile as C code). +*/ # define SDL_XAUDIO2_HAS_SDK +#include "SDL_xaudio2.h" /* ... compiles as C code, in contrast to XAudio2 headers + in the Windows SDK, v.10.0.10240.0 (Win 10's initial SDK) + */ #else -/* XAudio2 exists as of the March 2008 DirectX SDK - The XAudio2 implementation available in the Windows 8 SDK targets Windows 8 and newer. - If you want to build SDL with XAudio2 support you should install the DirectX SDK. +/* XAudio2 exists in the last DirectX SDK as well as the latest Windows SDK. + To enable XAudio2 support, you will need to add the location of your DirectX SDK headers to + the SDL projects additional include directories and then set SDL_XAUDIO2_HAS_SDK=1 as a + preprocessor define */ +#if 0 /* See comment above */ #include #if (!defined(_DXSDK_BUILD_MAJOR) || (_DXSDK_BUILD_MAJOR < 1284)) # pragma message("Your DirectX SDK is too old. Disabling XAudio2 support.") @@ -72,6 +79,7 @@ # define SDL_XAUDIO2_HAS_SDK 1 #endif #endif +#endif /* 0 */ #ifdef SDL_XAUDIO2_HAS_SDK @@ -82,17 +90,10 @@ #endif #endif -/* The XAudio header file, when #include'd on WinRT, will only compile in C++ - files, but not C. A few preprocessor-based hacks are defined below in order - to get xaudio2.h to compile in the C/non-C++ file, SDL_xaudio2.c. - */ -#ifdef __WINRT__ -#define uuid(x) -#define DX_BUILD -#endif - +#if !defined(_SDL_XAUDIO2_H) #define INITGUID 1 #include +#endif /* Hidden "this" pointer for the audio functions */ #define _THIS SDL_AudioDevice *this @@ -126,16 +127,13 @@ struct SDL_PrivateAudioData static void -XAUDIO2_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) +XAUDIO2_DetectDevices(void) { IXAudio2 *ixa2 = NULL; UINT32 devcount = 0; UINT32 i = 0; - if (iscapture) { - SDL_SetError("XAudio2: capture devices unsupported."); - return; - } else if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) { + if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) { SDL_SetError("XAudio2: XAudio2Create() failed at detection."); return; } else if (IXAudio2_GetDeviceCount(ixa2, &devcount) != S_OK) { @@ -149,8 +147,8 @@ XAUDIO2_DetectDevices(int iscapture, SDL_AddAudioDevice addfn) if (IXAudio2_GetDeviceDetails(ixa2, i, &details) == S_OK) { char *str = WIN_StringToUTF8(details.DisplayName); if (str != NULL) { - addfn(str); - SDL_free(str); /* addfn() made a copy of the string. */ + SDL_AddAudioDevice(SDL_FALSE, str, (void *) ((size_t) i+1)); + SDL_free(str); /* SDL_AddAudioDevice made a copy of the string. */ } } } @@ -169,8 +167,8 @@ VoiceCBOnBufferEnd(THIS_ void *data) static void STDMETHODCALLTYPE VoiceCBOnVoiceError(THIS_ void *data, HRESULT Error) { - /* !!! FIXME: attempt to recover, or mark device disconnected. */ - SDL_assert(0 && "write me!"); + SDL_AudioDevice *this = (SDL_AudioDevice *) data; + SDL_OpenedAudioDeviceDisconnected(this); } /* no-op callbacks... */ @@ -221,7 +219,7 @@ XAUDIO2_PlayDevice(_THIS) if (result != S_OK) { /* uhoh, panic! */ IXAudio2SourceVoice_FlushSourceBuffers(source); - this->enabled = 0; + SDL_OpenedAudioDeviceDisconnected(this); } } @@ -241,14 +239,14 @@ XAUDIO2_WaitDone(_THIS) SDL_assert(!this->enabled); /* flag that stops playing. */ IXAudio2SourceVoice_Discontinuity(source); #if SDL_XAUDIO2_WIN8 - IXAudio2SourceVoice_GetState(source, &state, 0); + IXAudio2SourceVoice_GetState(source, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED); #else IXAudio2SourceVoice_GetState(source, &state); #endif while (state.BuffersQueued > 0) { SDL_SemWait(this->hidden->semaphore); #if SDL_XAUDIO2_WIN8 - IXAudio2SourceVoice_GetState(source, &state, 0); + IXAudio2SourceVoice_GetState(source, &state, XAUDIO2_VOICE_NOSAMPLESPLAYED); #else IXAudio2SourceVoice_GetState(source, &state); #endif @@ -289,7 +287,7 @@ XAUDIO2_CloseDevice(_THIS) } static int -XAUDIO2_OpenDevice(_THIS, const char *devname, int iscapture) +XAUDIO2_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { HRESULT result = S_OK; WAVEFORMATEX waveformat; @@ -315,9 +313,17 @@ XAUDIO2_OpenDevice(_THIS, const char *devname, int iscapture) static IXAudio2VoiceCallback callbacks = { &callbacks_vtable }; - if (iscapture) { - return SDL_SetError("XAudio2: capture devices unsupported."); - } else if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) { +#if defined(SDL_XAUDIO2_WIN8) + /* !!! FIXME: hook up hotplugging. */ +#else + if (handle != NULL) { /* specific device requested? */ + /* -1 because we increment the original value to avoid NULL. */ + const size_t val = ((size_t) handle) - 1; + devId = (UINT32) val; + } +#endif + + if (XAudio2Create(&ixa2, 0, XAUDIO2_DEFAULT_PROCESSOR) != S_OK) { return SDL_SetError("XAudio2: XAudio2Create() failed at open."); } @@ -332,37 +338,6 @@ XAUDIO2_OpenDevice(_THIS, const char *devname, int iscapture) ixa2->SetDebugConfiguration(&debugConfig); */ -#if ! defined(__WINRT__) - if (devname != NULL) { - UINT32 devcount = 0; - UINT32 i = 0; - - if (IXAudio2_GetDeviceCount(ixa2, &devcount) != S_OK) { - IXAudio2_Release(ixa2); - return SDL_SetError("XAudio2: IXAudio2_GetDeviceCount() failed."); - } - for (i = 0; i < devcount; i++) { - XAUDIO2_DEVICE_DETAILS details; - if (IXAudio2_GetDeviceDetails(ixa2, i, &details) == S_OK) { - char *str = WIN_StringToUTF8(details.DisplayName); - if (str != NULL) { - const int match = (SDL_strcmp(str, devname) == 0); - SDL_free(str); - if (match) { - devId = i; - break; - } - } - } - } - - if (i == devcount) { - IXAudio2_Release(ixa2); - return SDL_SetError("XAudio2: Requested device not found."); - } - } -#endif - /* Initialize all variables that we clean on shutdown */ this->hidden = (struct SDL_PrivateAudioData *) SDL_malloc((sizeof *this->hidden)); @@ -529,6 +504,16 @@ XAUDIO2_Init(SDL_AudioDriverImpl * impl) impl->CloseDevice = XAUDIO2_CloseDevice; impl->Deinitialize = XAUDIO2_Deinitialize; + /* !!! FIXME: We can apparently use a C++ interface on Windows 8 + * !!! FIXME: (Windows::Devices::Enumeration::DeviceInformation) for device + * !!! FIXME: detection, but it's not implemented here yet. + * !!! FIXME: see http://blogs.msdn.com/b/chuckw/archive/2012/04/02/xaudio2-and-windows-8-consumer-preview.aspx + * !!! FIXME: for now, force the default device. + */ +#if defined(SDL_XAUDIO2_WIN8) || defined(__WINRT__) + impl->OnlyHasDefaultOutputDevice = 1; +#endif + return 1; /* this audio target is available. */ #endif } diff --git a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.h b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.h new file mode 100644 index 0000000000..864eba451d --- /dev/null +++ b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.h @@ -0,0 +1,386 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_XAUDIO2_H +#define _SDL_XAUDIO2_H + +#include +#include +#include + +/* XAudio2 packs its structure members together as tightly as possible. + This pragma is needed to ensure compatibility with XAudio2 on 64-bit + platforms. +*/ +#pragma pack(push, 1) + +typedef interface IXAudio2 IXAudio2; +typedef interface IXAudio2SourceVoice IXAudio2SourceVoice; +typedef interface IXAudio2MasteringVoice IXAudio2MasteringVoice; +typedef interface IXAudio2EngineCallback IXAudio2EngineCallback; +typedef interface IXAudio2VoiceCallback IXAudio2VoiceCallback; +typedef interface IXAudio2Voice IXAudio2Voice; +typedef interface IXAudio2SubmixVoice IXAudio2SubmixVoice; + +typedef enum _AUDIO_STREAM_CATEGORY { + AudioCategory_Other = 0, + AudioCategory_ForegroundOnlyMedia, + AudioCategory_BackgroundCapableMedia, + AudioCategory_Communications, + AudioCategory_Alerts, + AudioCategory_SoundEffects, + AudioCategory_GameEffects, + AudioCategory_GameMedia, + AudioCategory_GameChat, + AudioCategory_Movie, + AudioCategory_Media +} AUDIO_STREAM_CATEGORY; + +typedef struct XAUDIO2_BUFFER { + UINT32 Flags; + UINT32 AudioBytes; + const BYTE *pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void *pContext; +} XAUDIO2_BUFFER; + +typedef struct XAUDIO2_BUFFER_WMA { + const UINT32 *pDecodedPacketCumulativeBytes; + UINT32 PacketCount; +} XAUDIO2_BUFFER_WMA; + +typedef struct XAUDIO2_SEND_DESCRIPTOR { + UINT32 Flags; + IXAudio2Voice *pOutputVoice; +} XAUDIO2_SEND_DESCRIPTOR; + +typedef struct XAUDIO2_VOICE_SENDS { + UINT32 SendCount; + XAUDIO2_SEND_DESCRIPTOR *pSends; +} XAUDIO2_VOICE_SENDS; + +typedef struct XAUDIO2_EFFECT_DESCRIPTOR { + IUnknown *pEffect; + BOOL InitialState; + UINT32 OutputChannels; +} XAUDIO2_EFFECT_DESCRIPTOR; + +typedef struct XAUDIO2_EFFECT_CHAIN { + UINT32 EffectCount; + XAUDIO2_EFFECT_DESCRIPTOR *pEffectDescriptors; +} XAUDIO2_EFFECT_CHAIN; + +typedef struct XAUDIO2_PERFORMANCE_DATA { + UINT64 AudioCyclesSinceLastQuery; + UINT64 TotalCyclesSinceLastQuery; + UINT32 MinimumCyclesPerQuantum; + UINT32 MaximumCyclesPerQuantum; + UINT32 MemoryUsageInBytes; + UINT32 CurrentLatencyInSamples; + UINT32 GlitchesSinceEngineStarted; + UINT32 ActiveSourceVoiceCount; + UINT32 TotalSourceVoiceCount; + UINT32 ActiveSubmixVoiceCount; + UINT32 ActiveResamplerCount; + UINT32 ActiveMatrixMixCount; + UINT32 ActiveXmaSourceVoices; + UINT32 ActiveXmaStreams; +} XAUDIO2_PERFORMANCE_DATA; + +typedef struct XAUDIO2_DEBUG_CONFIGURATION { + UINT32 TraceMask; + UINT32 BreakMask; + BOOL LogThreadID; + BOOL LogFileline; + BOOL LogFunctionName; + BOOL LogTiming; +} XAUDIO2_DEBUG_CONFIGURATION; + +typedef struct XAUDIO2_VOICE_DETAILS { + UINT32 CreationFlags; + UINT32 ActiveFlags; + UINT32 InputChannels; + UINT32 InputSampleRate; +} XAUDIO2_VOICE_DETAILS; + +typedef enum XAUDIO2_FILTER_TYPE { + LowPassFilter = 0, + BandPassFilter = 1, + HighPassFilter = 2, + NotchFilter = 3, + LowPassOnePoleFilter = 4, + HighPassOnePoleFilter = 5 +} XAUDIO2_FILTER_TYPE; + +typedef struct XAUDIO2_FILTER_PARAMETERS { + XAUDIO2_FILTER_TYPE Type; + float Frequency; + float OneOverQ; +} XAUDIO2_FILTER_PARAMETERS; + +typedef struct XAUDIO2_VOICE_STATE { + void *pCurrentBufferContext; + UINT32 BuffersQueued; + UINT64 SamplesPlayed; +} XAUDIO2_VOICE_STATE; + + +typedef UINT32 XAUDIO2_PROCESSOR; +#define Processor1 0x00000001 +#define XAUDIO2_DEFAULT_PROCESSOR Processor1 + +#define XAUDIO2_E_DEVICE_INVALIDATED 0x88960004 +#define XAUDIO2_COMMIT_NOW 0 +#define XAUDIO2_VOICE_NOSAMPLESPLAYED 0x0100 +#define XAUDIO2_DEFAULT_CHANNELS 0 + +extern HRESULT __stdcall XAudio2Create( + _Out_ IXAudio2 **ppXAudio2, + _In_ UINT32 Flags, + _In_ XAUDIO2_PROCESSOR XAudio2Processor + ); + +#undef INTERFACE +#define INTERFACE IXAudio2 +typedef interface IXAudio2 { + const struct IXAudio2Vtbl FAR* lpVtbl; +} IXAudio2; +typedef const struct IXAudio2Vtbl IXAudio2Vtbl; +const struct IXAudio2Vtbl +{ + /* IUnknown */ + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + /* IXAudio2 */ + STDMETHOD_(HRESULT, RegisterForCallbacks)(THIS, IXAudio2EngineCallback *pCallback) PURE; + STDMETHOD_(VOID, UnregisterForCallbacks)(THIS, IXAudio2EngineCallback *pCallback) PURE; + STDMETHOD_(HRESULT, CreateSourceVoice)(THIS, IXAudio2SourceVoice **ppSourceVoice, + const WAVEFORMATEX *pSourceFormat, + UINT32 Flags, + float MaxFrequencyRatio, + IXAudio2VoiceCallback *pCallback, + const XAUDIO2_VOICE_SENDS *pSendList, + const XAUDIO2_EFFECT_CHAIN *pEffectChain) PURE; + STDMETHOD_(HRESULT, CreateSubmixVoice)(THIS, IXAudio2SubmixVoice **ppSubmixVoice, + UINT32 InputChannels, + UINT32 InputSampleRate, + UINT32 Flags, + UINT32 ProcessingStage, + const XAUDIO2_VOICE_SENDS *pSendList, + const XAUDIO2_EFFECT_CHAIN *pEffectChain) PURE; + STDMETHOD_(HRESULT, CreateMasteringVoice)(THIS, IXAudio2MasteringVoice **ppMasteringVoice, + UINT32 InputChannels, + UINT32 InputSampleRate, + UINT32 Flags, + LPCWSTR szDeviceId, + const XAUDIO2_EFFECT_CHAIN *pEffectChain, + AUDIO_STREAM_CATEGORY StreamCategory) PURE; + STDMETHOD_(HRESULT, StartEngine)(THIS) PURE; + STDMETHOD_(VOID, StopEngine)(THIS) PURE; + STDMETHOD_(HRESULT, CommitChanges)(THIS, UINT32 OperationSet) PURE; + STDMETHOD_(HRESULT, GetPerformanceData)(THIS, XAUDIO2_PERFORMANCE_DATA *pPerfData) PURE; + STDMETHOD_(HRESULT, SetDebugConfiguration)(THIS, XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration, + VOID *pReserved) PURE; +}; + +#define IXAudio2_Release(A) ((A)->lpVtbl->Release(A)) +#define IXAudio2_CreateSourceVoice(A,B,C,D,E,F,G,H) ((A)->lpVtbl->CreateSourceVoice(A,B,C,D,E,F,G,H)) +#define IXAudio2_CreateMasteringVoice(A,B,C,D,E,F,G,H) ((A)->lpVtbl->CreateMasteringVoice(A,B,C,D,E,F,G,H)) +#define IXAudio2_StartEngine(A) ((A)->lpVtbl->StartEngine(A)) +#define IXAudio2_StopEngine(A) ((A)->lpVtbl->StopEngine(A)) + + +#undef INTERFACE +#define INTERFACE IXAudio2SourceVoice +typedef interface IXAudio2SourceVoice { + const struct IXAudio2SourceVoiceVtbl FAR* lpVtbl; +} IXAudio2SourceVoice; +typedef const struct IXAudio2SourceVoiceVtbl IXAudio2SourceVoiceVtbl; +const struct IXAudio2SourceVoiceVtbl +{ + /* MSDN says that IXAudio2Voice inherits from IXAudio2, but MSVC's debugger + * says otherwise, and that IXAudio2Voice doesn't inherit from any other + * interface! + */ + + /* IXAudio2Voice */ + STDMETHOD_(VOID, GetVoiceDetails)(THIS, XAUDIO2_VOICE_DETAILS *pVoiceDetails) PURE; + STDMETHOD_(HRESULT, SetOutputVoices)(THIS, const XAUDIO2_VOICE_SENDS *pSendList) PURE; + STDMETHOD_(HRESULT, SetEffectChain)(THIS, const XAUDIO2_EFFECT_CHAIN *pEffectChain) PURE; + STDMETHOD_(HRESULT, EnableEffect)(THIS, UINT32 EffectIndex, UINT32 OperationSet) PURE; + STDMETHOD_(HRESULT, DisableEffect)(THIS, UINT32 EffectIndex, UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetEffectState)(THIS, UINT32 EffectIndex, BOOL *pEnabled) PURE; + STDMETHOD_(HRESULT, SetEffectParameters)(THIS, UINT32 EffectIndex, + const void *pParameters, + UINT32 ParametersByteSize, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetEffectParameters)(THIS, UINT32 EffectIndex, + void *pParameters, + UINT32 ParametersByteSize) PURE; + STDMETHOD_(HRESULT, SetFilterParameters)(THIS, const XAUDIO2_FILTER_PARAMETERS *pParameters, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetFilterParameters)(THIS, XAUDIO2_FILTER_PARAMETERS *pParameters) PURE; + STDMETHOD_(HRESULT, SetOutputFilterParameters)(THIS, IXAudio2Voice *pDestinationVoice, + XAUDIO2_FILTER_PARAMETERS *pParameters, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetOutputFilterParameters)(THIS, IXAudio2Voice *pDestinationVoice, + XAUDIO2_FILTER_PARAMETERS *pParameters) PURE; + STDMETHOD_(HRESULT, SetVolume)(THIS, float Volume, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetVolume)(THIS, float *pVolume) PURE; + STDMETHOD_(HRESULT, SetChannelVolumes)(THIS, UINT32 Channels, + const float *pVolumes, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetChannelVolumes)(THIS, UINT32 Channels, + float *pVolumes) PURE; + STDMETHOD_(HRESULT, SetOutputMatrix)(THIS, IXAudio2Voice *pDestinationVoice, + UINT32 SourceChannels, + UINT32 DestinationChannels, + const float *pLevelMatrix, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetOutputMatrix)(THIS, IXAudio2Voice *pDestinationVoice, + UINT32 SourceChannels, + UINT32 DestinationChannels, + float *pLevelMatrix) PURE; + STDMETHOD_(VOID, DestroyVoice)(THIS) PURE; + + /* IXAudio2SourceVoice */ + STDMETHOD_(HRESULT, Start)(THIS, UINT32 Flags, + UINT32 OperationSet) PURE; + STDMETHOD_(HRESULT, Stop)(THIS, UINT32 Flags, + UINT32 OperationSet) PURE; + STDMETHOD_(HRESULT, SubmitSourceBuffer)(THIS, const XAUDIO2_BUFFER *pBuffer, + const XAUDIO2_BUFFER_WMA *pBufferWMA) PURE; + STDMETHOD_(HRESULT, FlushSourceBuffers)(THIS) PURE; + STDMETHOD_(HRESULT, Discontinuity)(THIS) PURE; + STDMETHOD_(HRESULT, ExitLoop)(THIS, UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetState)(THIS, XAUDIO2_VOICE_STATE *pVoiceState, + UINT32 Flags) PURE; + STDMETHOD_(HRESULT, SetFrequencyRatio)(THIS, float Ratio, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetFrequencyRatio)(THIS, float *pRatio) PURE; + STDMETHOD_(HRESULT, SetSourceSampleRate)(THIS, UINT32 NewSourceSampleRate) PURE; +}; + +#define IXAudio2SourceVoice_DestroyVoice(A) ((A)->lpVtbl->DestroyVoice(A)) +#define IXAudio2SourceVoice_Start(A,B,C) ((A)->lpVtbl->Start(A,B,C)) +#define IXAudio2SourceVoice_Stop(A,B,C) ((A)->lpVtbl->Stop(A,B,C)) +#define IXAudio2SourceVoice_SubmitSourceBuffer(A,B,C) ((A)->lpVtbl->SubmitSourceBuffer(A,B,C)) +#define IXAudio2SourceVoice_FlushSourceBuffers(A) ((A)->lpVtbl->FlushSourceBuffers(A)) +#define IXAudio2SourceVoice_Discontinuity(A) ((A)->lpVtbl->Discontinuity(A)) +#define IXAudio2SourceVoice_GetState(A,B,C) ((A)->lpVtbl->GetState(A,B,C)) + + +#undef INTERFACE +#define INTERFACE IXAudio2MasteringVoice +typedef interface IXAudio2MasteringVoice { + const struct IXAudio2MasteringVoiceVtbl FAR* lpVtbl; +} IXAudio2MasteringVoice; +typedef const struct IXAudio2MasteringVoiceVtbl IXAudio2MasteringVoiceVtbl; +const struct IXAudio2MasteringVoiceVtbl +{ + /* MSDN says that IXAudio2Voice inherits from IXAudio2, but MSVC's debugger + * says otherwise, and that IXAudio2Voice doesn't inherit from any other + * interface! + */ + + /* IXAudio2Voice */ + STDMETHOD_(VOID, GetVoiceDetails)(THIS, XAUDIO2_VOICE_DETAILS *pVoiceDetails) PURE; + STDMETHOD_(HRESULT, SetOutputVoices)(THIS, const XAUDIO2_VOICE_SENDS *pSendList) PURE; + STDMETHOD_(HRESULT, SetEffectChain)(THIS, const XAUDIO2_EFFECT_CHAIN *pEffectChain) PURE; + STDMETHOD_(HRESULT, EnableEffect)(THIS, UINT32 EffectIndex, UINT32 OperationSet) PURE; + STDMETHOD_(HRESULT, DisableEffect)(THIS, UINT32 EffectIndex, UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetEffectState)(THIS, UINT32 EffectIndex, BOOL *pEnabled) PURE; + STDMETHOD_(HRESULT, SetEffectParameters)(THIS, UINT32 EffectIndex, + const void *pParameters, + UINT32 ParametersByteSize, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetEffectParameters)(THIS, UINT32 EffectIndex, + void *pParameters, + UINT32 ParametersByteSize) PURE; + STDMETHOD_(HRESULT, SetFilterParameters)(THIS, const XAUDIO2_FILTER_PARAMETERS *pParameters, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetFilterParameters)(THIS, XAUDIO2_FILTER_PARAMETERS *pParameters) PURE; + STDMETHOD_(HRESULT, SetOutputFilterParameters)(THIS, IXAudio2Voice *pDestinationVoice, + XAUDIO2_FILTER_PARAMETERS *pParameters, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetOutputFilterParameters)(THIS, IXAudio2Voice *pDestinationVoice, + XAUDIO2_FILTER_PARAMETERS *pParameters) PURE; + STDMETHOD_(HRESULT, SetVolume)(THIS, float Volume, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetVolume)(THIS, float *pVolume) PURE; + STDMETHOD_(HRESULT, SetChannelVolumes)(THIS, UINT32 Channels, + const float *pVolumes, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetChannelVolumes)(THIS, UINT32 Channels, + float *pVolumes) PURE; + STDMETHOD_(HRESULT, SetOutputMatrix)(THIS, IXAudio2Voice *pDestinationVoice, + UINT32 SourceChannels, + UINT32 DestinationChannels, + const float *pLevelMatrix, + UINT32 OperationSet) PURE; + STDMETHOD_(VOID, GetOutputMatrix)(THIS, IXAudio2Voice *pDestinationVoice, + UINT32 SourceChannels, + UINT32 DestinationChannels, + float *pLevelMatrix) PURE; + STDMETHOD_(VOID, DestroyVoice)(THIS) PURE; + + /* IXAudio2SourceVoice */ + STDMETHOD_(VOID, GetChannelMask)(THIS, DWORD *pChannelMask) PURE; +}; + +#define IXAudio2MasteringVoice_DestroyVoice(A) ((A)->lpVtbl->DestroyVoice(A)) + + +#undef INTERFACE +#define INTERFACE IXAudio2VoiceCallback +typedef interface IXAudio2VoiceCallback { + const struct IXAudio2VoiceCallbackVtbl FAR* lpVtbl; +} IXAudio2VoiceCallback; +typedef const struct IXAudio2VoiceCallbackVtbl IXAudio2VoiceCallbackVtbl; +const struct IXAudio2VoiceCallbackVtbl +{ + /* MSDN says that IXAudio2VoiceCallback inherits from IXAudio2, but SDL's + * own code says otherwise, and that IXAudio2VoiceCallback doesn't inherit + * from any other interface! + */ + + /* IXAudio2VoiceCallback */ + STDMETHOD_(VOID, OnVoiceProcessingPassStart)(THIS, UINT32 BytesRequired) PURE; + STDMETHOD_(VOID, OnVoiceProcessingPassEnd)(THIS) PURE; + STDMETHOD_(VOID, OnStreamEnd)(THIS) PURE; + STDMETHOD_(VOID, OnBufferStart)(THIS, void *pBufferContext) PURE; + STDMETHOD_(VOID, OnBufferEnd)(THIS, void *pBufferContext) PURE; + STDMETHOD_(VOID, OnLoopEnd)(THIS, void *pBufferContext) PURE; + STDMETHOD_(VOID, OnVoiceError)(THIS, void *pBufferContext, HRESULT Error) PURE; +}; + +#pragma pack(pop) /* Undo pragma push */ + +#endif /* _SDL_XAUDIO2_H */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.cpp b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.cpp index 69eb5ad124..b2d67c7fb0 100644 --- a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.cpp +++ b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.h b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.h index 3db04cf96c..aa6486f91c 100644 --- a/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.h +++ b/Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2_winrthelpers.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/core/android/SDL_android.c b/Engine/lib/sdl/src/core/android/SDL_android.c index d806208e75..f6e0a833c6 100644 --- a/Engine/lib/sdl/src/core/android/SDL_android.c +++ b/Engine/lib/sdl/src/core/android/SDL_android.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,6 +21,7 @@ #include "../../SDL_internal.h" #include "SDL_stdinc.h" #include "SDL_assert.h" +#include "SDL_hints.h" #include "SDL_log.h" #ifdef __ANDROID__ @@ -31,6 +32,7 @@ #include "../../events/SDL_events_c.h" #include "../../video/android/SDL_androidkeyboard.h" +#include "../../video/android/SDL_androidmouse.h" #include "../../video/android/SDL_androidtouch.h" #include "../../video/android/SDL_androidvideo.h" #include "../../video/android/SDL_androidwindow.h" @@ -43,8 +45,8 @@ #define LOG_TAG "SDL_android" /* #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__) */ /* #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__) */ -#define LOGI(...) do {} while (false) -#define LOGE(...) do {} while (false) +#define LOGI(...) do {} while (0) +#define LOGE(...) do {} while (0) /* Uncomment this to log messages entering and exiting methods in this file */ /* #define DEBUG_JNI */ @@ -56,7 +58,6 @@ static void Android_JNI_ThreadDestroyed(void*); *******************************************************************************/ #include #include -#include /******************************************************************************* @@ -70,7 +71,6 @@ static jclass mActivityClass; /* method signatures */ static jmethodID midGetNativeSurface; -static jmethodID midFlipBuffers; static jmethodID midAudioInit; static jmethodID midAudioWriteShortBuffer; static jmethodID midAudioWriteByteBuffer; @@ -79,14 +79,14 @@ static jmethodID midPollInputDevices; /* Accelerometer data storage */ static float fLastAccelerometer[3]; -static bool bHasNewData; +static SDL_bool bHasNewData; /******************************************************************************* Functions called by JNI *******************************************************************************/ /* Library init */ -jint JNI_OnLoad(JavaVM* vm, void* reserved) +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { JNIEnv *env; mJavaVM = vm; @@ -108,7 +108,7 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) } /* Called before SDL_main() to initialize JNI bindings */ -void SDL_Android_Init(JNIEnv* mEnv, jclass cls) +JNIEXPORT void JNICALL SDL_Android_Init(JNIEnv* mEnv, jclass cls) { __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init()"); @@ -118,8 +118,6 @@ void SDL_Android_Init(JNIEnv* mEnv, jclass cls) midGetNativeSurface = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "getNativeSurface","()Landroid/view/Surface;"); - midFlipBuffers = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, - "flipBuffers","()V"); midAudioInit = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "audioInit", "(IZZI)I"); midAudioWriteShortBuffer = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, @@ -131,33 +129,43 @@ void SDL_Android_Init(JNIEnv* mEnv, jclass cls) midPollInputDevices = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "pollInputDevices", "()V"); - bHasNewData = false; + bHasNewData = SDL_FALSE; - if(!midGetNativeSurface || !midFlipBuffers || !midAudioInit || + if (!midGetNativeSurface || !midAudioInit || !midAudioWriteShortBuffer || !midAudioWriteByteBuffer || !midAudioQuit || !midPollInputDevices) { __android_log_print(ANDROID_LOG_WARN, "SDL", "SDL: Couldn't locate Java callbacks, check that they're named and typed correctly"); } __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL_Android_Init() finished!"); } +/* Drop file */ +void Java_org_libsdl_app_SDLActivity_onNativeDropFile( + JNIEnv* env, jclass jcls, + jstring filename) +{ + const char *path = (*env)->GetStringUTFChars(env, filename, NULL); + SDL_SendDropFile(path); + (*env)->ReleaseStringUTFChars(env, filename, path); +} + /* Resize */ -void Java_org_libsdl_app_SDLActivity_onNativeResize( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeResize( JNIEnv* env, jclass jcls, - jint width, jint height, jint format) + jint width, jint height, jint format, jfloat rate) { - Android_SetScreenResolution(width, height, format); + Android_SetScreenResolution(width, height, format, rate); } -// Paddown -int Java_org_libsdl_app_SDLActivity_onNativePadDown( +/* Paddown */ +JNIEXPORT jint JNICALL Java_org_libsdl_app_SDLActivity_onNativePadDown( JNIEnv* env, jclass jcls, jint device_id, jint keycode) { return Android_OnPadDown(device_id, keycode); } -// Padup -int Java_org_libsdl_app_SDLActivity_onNativePadUp( +/* Padup */ +JNIEXPORT jint JNICALL Java_org_libsdl_app_SDLActivity_onNativePadUp( JNIEnv* env, jclass jcls, jint device_id, jint keycode) { @@ -165,7 +173,7 @@ int Java_org_libsdl_app_SDLActivity_onNativePadUp( } /* Joy */ -void Java_org_libsdl_app_SDLActivity_onNativeJoy( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeJoy( JNIEnv* env, jclass jcls, jint device_id, jint axis, jfloat value) { @@ -173,7 +181,7 @@ void Java_org_libsdl_app_SDLActivity_onNativeJoy( } /* POV Hat */ -void Java_org_libsdl_app_SDLActivity_onNativeHat( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeHat( JNIEnv* env, jclass jcls, jint device_id, jint hat_id, jint x, jint y) { @@ -181,7 +189,7 @@ void Java_org_libsdl_app_SDLActivity_onNativeHat( } -int Java_org_libsdl_app_SDLActivity_nativeAddJoystick( +JNIEXPORT jint JNICALL Java_org_libsdl_app_SDLActivity_nativeAddJoystick( JNIEnv* env, jclass jcls, jint device_id, jstring device_name, jint is_accelerometer, jint nbuttons, jint naxes, jint nhats, jint nballs) @@ -196,7 +204,7 @@ int Java_org_libsdl_app_SDLActivity_nativeAddJoystick( return retval; } -int Java_org_libsdl_app_SDLActivity_nativeRemoveJoystick( +JNIEXPORT jint JNICALL Java_org_libsdl_app_SDLActivity_nativeRemoveJoystick( JNIEnv* env, jclass jcls, jint device_id) { return Android_RemoveJoystick(device_id); @@ -204,7 +212,7 @@ int Java_org_libsdl_app_SDLActivity_nativeRemoveJoystick( /* Surface Created */ -void Java_org_libsdl_app_SDLActivity_onNativeSurfaceChanged(JNIEnv* env, jclass jcls) +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeSurfaceChanged(JNIEnv* env, jclass jcls) { SDL_WindowData *data; SDL_VideoDevice *_this; @@ -230,7 +238,7 @@ void Java_org_libsdl_app_SDLActivity_onNativeSurfaceChanged(JNIEnv* env, jclass } /* Surface Destroyed */ -void Java_org_libsdl_app_SDLActivity_onNativeSurfaceDestroyed(JNIEnv* env, jclass jcls) +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeSurfaceDestroyed(JNIEnv* env, jclass jcls) { /* We have to clear the current context and destroy the egl surface here * Otherwise there's BAD_NATIVE_WINDOW errors coming from eglCreateWindowSurface on resume @@ -256,27 +264,22 @@ void Java_org_libsdl_app_SDLActivity_onNativeSurfaceDestroyed(JNIEnv* env, jclas } -void Java_org_libsdl_app_SDLActivity_nativeFlipBuffers(JNIEnv* env, jclass jcls) -{ - SDL_GL_SwapWindow(Android_Window); -} - /* Keydown */ -void Java_org_libsdl_app_SDLActivity_onNativeKeyDown( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyDown( JNIEnv* env, jclass jcls, jint keycode) { Android_OnKeyDown(keycode); } /* Keyup */ -void Java_org_libsdl_app_SDLActivity_onNativeKeyUp( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyUp( JNIEnv* env, jclass jcls, jint keycode) { Android_OnKeyUp(keycode); } /* Keyboard Focus Lost */ -void Java_org_libsdl_app_SDLActivity_onNativeKeyboardFocusLost( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeKeyboardFocusLost( JNIEnv* env, jclass jcls) { /* Calling SDL_StopTextInput will take care of hiding the keyboard and cleaning up the DummyText widget */ @@ -285,7 +288,7 @@ void Java_org_libsdl_app_SDLActivity_onNativeKeyboardFocusLost( /* Touch */ -void Java_org_libsdl_app_SDLActivity_onNativeTouch( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeTouch( JNIEnv* env, jclass jcls, jint touch_device_id_in, jint pointer_finger_id_in, jint action, jfloat x, jfloat y, jfloat p) @@ -293,26 +296,34 @@ void Java_org_libsdl_app_SDLActivity_onNativeTouch( Android_OnTouch(touch_device_id_in, pointer_finger_id_in, action, x, y, p); } +/* Mouse */ +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeMouse( + JNIEnv* env, jclass jcls, + jint button, jint action, jfloat x, jfloat y) +{ + Android_OnMouse(button, action, x, y); +} + /* Accelerometer */ -void Java_org_libsdl_app_SDLActivity_onNativeAccel( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_onNativeAccel( JNIEnv* env, jclass jcls, jfloat x, jfloat y, jfloat z) { fLastAccelerometer[0] = x; fLastAccelerometer[1] = y; fLastAccelerometer[2] = z; - bHasNewData = true; + bHasNewData = SDL_TRUE; } /* Low memory */ -void Java_org_libsdl_app_SDLActivity_nativeLowMemory( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeLowMemory( JNIEnv* env, jclass cls) { SDL_SendAppEvent(SDL_APP_LOWMEMORY); } /* Quit */ -void Java_org_libsdl_app_SDLActivity_nativeQuit( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeQuit( JNIEnv* env, jclass cls) { /* Discard previous events. The user should have handled state storage @@ -328,7 +339,7 @@ void Java_org_libsdl_app_SDLActivity_nativeQuit( } /* Pause */ -void Java_org_libsdl_app_SDLActivity_nativePause( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativePause( JNIEnv* env, jclass cls) { __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()"); @@ -345,7 +356,7 @@ void Java_org_libsdl_app_SDLActivity_nativePause( } /* Resume */ -void Java_org_libsdl_app_SDLActivity_nativeResume( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLActivity_nativeResume( JNIEnv* env, jclass cls) { __android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativeResume()"); @@ -363,7 +374,7 @@ void Java_org_libsdl_app_SDLActivity_nativeResume( } } -void Java_org_libsdl_app_SDLInputConnection_nativeCommitText( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLInputConnection_nativeCommitText( JNIEnv* env, jclass cls, jstring text, jint newCursorPosition) { @@ -374,7 +385,7 @@ void Java_org_libsdl_app_SDLInputConnection_nativeCommitText( (*env)->ReleaseStringUTFChars(env, text, utftext); } -void Java_org_libsdl_app_SDLInputConnection_nativeSetComposingText( +JNIEXPORT void JNICALL Java_org_libsdl_app_SDLInputConnection_nativeSetComposingText( JNIEnv* env, jclass cls, jstring text, jint newCursorPosition) { @@ -385,7 +396,15 @@ void Java_org_libsdl_app_SDLInputConnection_nativeSetComposingText( (*env)->ReleaseStringUTFChars(env, text, utftext); } +JNIEXPORT jstring JNICALL Java_org_libsdl_app_SDLActivity_nativeGetHint(JNIEnv* env, jclass cls, jstring name) { + const char *utfname = (*env)->GetStringUTFChars(env, name, NULL); + const char *hint = SDL_GetHint(utfname); + jstring result = (*env)->NewStringUTF(env, hint); + (*env)->ReleaseStringUTFChars(env, name, utfname); + + return result; +} /******************************************************************************* Functions called by SDL into Java @@ -433,9 +452,9 @@ static void LocalReferenceHolder_Cleanup(struct LocalReferenceHolder *refholder) } } -static SDL_bool LocalReferenceHolder_IsActive() +static SDL_bool LocalReferenceHolder_IsActive(void) { - return s_active > 0; + return s_active > 0; } ANativeWindow* Android_JNI_GetNativeWindow(void) @@ -451,12 +470,6 @@ ANativeWindow* Android_JNI_GetNativeWindow(void) return anw; } -void Android_JNI_SwapWindow() -{ - JNIEnv *mEnv = Android_JNI_GetEnv(); - (*mEnv)->CallStaticVoidMethod(mEnv, mActivityClass, midFlipBuffers); -} - void Android_JNI_SetActivityTitle(const char *title) { jmethodID mid; @@ -478,7 +491,7 @@ SDL_bool Android_JNI_GetAccelerometerValues(float values[3]) for (i = 0; i < 3; ++i) { values[i] = fLastAccelerometer[i]; } - bHasNewData = false; + bHasNewData = SDL_FALSE; retval = SDL_TRUE; } @@ -540,12 +553,12 @@ int Android_JNI_SetupThread(void) * Audio support */ static jboolean audioBuffer16Bit = JNI_FALSE; -static jboolean audioBufferStereo = JNI_FALSE; static jobject audioBuffer = NULL; static void* audioBufferPinned = NULL; int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames) { + jboolean audioBufferStereo; int audioBufferFrames; JNIEnv *env = Android_JNI_GetEnv(); @@ -603,12 +616,12 @@ int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, i return audioBufferFrames; } -void * Android_JNI_GetAudioBuffer() +void * Android_JNI_GetAudioBuffer(void) { return audioBufferPinned; } -void Android_JNI_WriteAudioBuffer() +void Android_JNI_WriteAudioBuffer(void) { JNIEnv *mAudioEnv = Android_JNI_GetEnv(); @@ -623,7 +636,7 @@ void Android_JNI_WriteAudioBuffer() /* JNI_COMMIT means the changes are committed to the VM but the buffer remains pinned */ } -void Android_JNI_CloseAudioDevice() +void Android_JNI_CloseAudioDevice(void) { JNIEnv *env = Android_JNI_GetEnv(); @@ -638,7 +651,7 @@ void Android_JNI_CloseAudioDevice() /* Test for an exception and call SDL_SetError with its detail if one occurs */ /* If the parameter silent is truthy then SDL_SetError() will not be called. */ -static bool Android_JNI_ExceptionOccurred(bool silent) +static SDL_bool Android_JNI_ExceptionOccurred(SDL_bool silent) { SDL_assert(LocalReferenceHolder_IsActive()); JNIEnv *mEnv = Android_JNI_GetEnv(); @@ -672,10 +685,10 @@ static bool Android_JNI_ExceptionOccurred(bool silent) (*mEnv)->ReleaseStringUTFChars(mEnv, exceptionName, exceptionNameUTF8); } - return true; + return SDL_TRUE; } - return false; + return SDL_FALSE; } static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) @@ -719,19 +732,19 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) */ mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, assetManager), "openFd", "(Ljava/lang/String;)Landroid/content/res/AssetFileDescriptor;"); inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString); - if (Android_JNI_ExceptionOccurred(true)) { + if (Android_JNI_ExceptionOccurred(SDL_TRUE)) { goto fallback; } mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "getStartOffset", "()J"); ctx->hidden.androidio.offset = (*mEnv)->CallLongMethod(mEnv, inputStream, mid); - if (Android_JNI_ExceptionOccurred(true)) { + if (Android_JNI_ExceptionOccurred(SDL_TRUE)) { goto fallback; } mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "getDeclaredLength", "()J"); ctx->hidden.androidio.size = (*mEnv)->CallLongMethod(mEnv, inputStream, mid); - if (Android_JNI_ExceptionOccurred(true)) { + if (Android_JNI_ExceptionOccurred(SDL_TRUE)) { goto fallback; } @@ -745,7 +758,7 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) /* Seek to the correct offset in the file. */ lseek(ctx->hidden.androidio.fd, (off_t)ctx->hidden.androidio.offset, SEEK_SET); - if (false) { + if (0) { fallback: /* Disabled log message because of spam on the Nexus 7 */ /* __android_log_print(ANDROID_LOG_DEBUG, "SDL", "Falling back to legacy InputStream method for opening file"); */ @@ -757,8 +770,22 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, assetManager), "open", "(Ljava/lang/String;I)Ljava/io/InputStream;"); inputStream = (*mEnv)->CallObjectMethod(mEnv, assetManager, mid, fileNameJString, 1 /* ACCESS_RANDOM */); - if (Android_JNI_ExceptionOccurred(false)) { - goto failure; + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { + /* Try fallback to APK expansion files */ + mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, context), + "openAPKExpansionInputStream", "(Ljava/lang/String;)Ljava/io/InputStream;"); + if (!mid) { + SDL_SetError("No openAPKExpansionInputStream() in Java class"); + goto failure; /* Java class is missing the required method */ + } + inputStream = (*mEnv)->CallObjectMethod(mEnv, context, mid, fileNameJString); + + /* Exception is checked first because it always needs to be cleared. + * If no exception occurred then the last SDL error message is kept. + */ + if (Android_JNI_ExceptionOccurred(SDL_FALSE) || !inputStream) { + goto failure; + } } ctx->hidden.androidio.inputStreamRef = (*mEnv)->NewGlobalRef(mEnv, inputStream); @@ -774,7 +801,7 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) mid = (*mEnv)->GetMethodID(mEnv, (*mEnv)->GetObjectClass(mEnv, inputStream), "available", "()I"); ctx->hidden.androidio.size = (long)(*mEnv)->CallIntMethod(mEnv, inputStream, mid); - if (Android_JNI_ExceptionOccurred(false)) { + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { goto failure; } @@ -785,7 +812,7 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) "(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;"); readableByteChannel = (*mEnv)->CallStaticObjectMethod( mEnv, channels, mid, inputStream); - if (Android_JNI_ExceptionOccurred(false)) { + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { goto failure; } @@ -798,7 +825,7 @@ static int Internal_Android_JNI_FileOpen(SDL_RWops* ctx) ctx->hidden.androidio.readMethod = mid; } - if (false) { + if (0) { failure: result = -1; @@ -891,7 +918,7 @@ size_t Android_JNI_FileRead(SDL_RWops* ctx, void* buffer, /* result = readableByteChannel.read(...); */ int result = (*mEnv)->CallIntMethod(mEnv, readableByteChannel, readMethod, byteBuffer); - if (Android_JNI_ExceptionOccurred(false)) { + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { LocalReferenceHolder_Cleanup(&refs); return 0; } @@ -916,7 +943,7 @@ size_t Android_JNI_FileWrite(SDL_RWops* ctx, const void* buffer, return 0; } -static int Internal_Android_JNI_FileClose(SDL_RWops* ctx, bool release) +static int Internal_Android_JNI_FileClose(SDL_RWops* ctx, SDL_bool release) { struct LocalReferenceHolder refs = LocalReferenceHolder_Setup(__FUNCTION__); @@ -939,7 +966,7 @@ static int Internal_Android_JNI_FileClose(SDL_RWops* ctx, bool release) "close", "()V"); (*mEnv)->CallVoidMethod(mEnv, inputStream, mid); (*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.assetFileDescriptorRef); - if (Android_JNI_ExceptionOccurred(false)) { + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { result = -1; } } @@ -952,7 +979,7 @@ static int Internal_Android_JNI_FileClose(SDL_RWops* ctx, bool release) (*mEnv)->CallVoidMethod(mEnv, inputStream, mid); (*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.inputStreamRef); (*mEnv)->DeleteGlobalRef(mEnv, (jobject)ctx->hidden.androidio.readableByteChannelRef); - if (Android_JNI_ExceptionOccurred(false)) { + if (Android_JNI_ExceptionOccurred(SDL_FALSE)) { result = -1; } } @@ -1043,7 +1070,7 @@ Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence) } else if (movement < 0) { /* We can't seek backwards so we have to reopen the file and seek */ /* forwards which obviously isn't very efficient */ - Internal_Android_JNI_FileClose(ctx, false); + Internal_Android_JNI_FileClose(ctx, SDL_FALSE); Internal_Android_JNI_FileOpen(ctx); Android_JNI_FileSeek(ctx, newPosition, RW_SEEK_SET); } @@ -1055,7 +1082,7 @@ Sint64 Android_JNI_FileSeek(SDL_RWops* ctx, Sint64 offset, int whence) int Android_JNI_FileClose(SDL_RWops* ctx) { - return Internal_Android_JNI_FileClose(ctx, true); + return Internal_Android_JNI_FileClose(ctx, SDL_TRUE); } /* returns a new global reference which needs to be released later */ @@ -1118,7 +1145,7 @@ int Android_JNI_SetClipboardText(const char* text) return 0; } -char* Android_JNI_GetClipboardText() +char* Android_JNI_GetClipboardText(void) { SETUP_CLIPBOARD(SDL_strdup("")) @@ -1144,7 +1171,7 @@ char* Android_JNI_GetClipboardText() return SDL_strdup(""); } -SDL_bool Android_JNI_HasClipboardText() +SDL_bool Android_JNI_HasClipboardText(void) { SETUP_CLIPBOARD(SDL_FALSE) @@ -1280,12 +1307,15 @@ int Android_JNI_GetTouchDeviceIds(int **ids) { return number; } -void Android_JNI_PollInputDevices() +void Android_JNI_PollInputDevices(void) { JNIEnv *env = Android_JNI_GetEnv(); (*env)->CallStaticVoidMethod(env, mActivityClass, midPollInputDevices); } +/* See SDLActivity.java for constants. */ +#define COMMAND_SET_KEEP_SCREEN_ON 5 + /* sends message to be handled on the UI event dispatch thread */ int Android_JNI_SendMessage(int command, int param) { @@ -1301,6 +1331,11 @@ int Android_JNI_SendMessage(int command, int param) return success ? 0 : -1; } +void Android_JNI_SuspendScreenSaver(SDL_bool suspend) +{ + Android_JNI_SendMessage(COMMAND_SET_KEEP_SCREEN_ON, (suspend == SDL_FALSE) ? 0 : 1); +} + void Android_JNI_ShowTextInput(SDL_Rect *inputRect) { JNIEnv *env = Android_JNI_GetEnv(); @@ -1319,13 +1354,101 @@ void Android_JNI_ShowTextInput(SDL_Rect *inputRect) inputRect->h ); } -void Android_JNI_HideTextInput() +void Android_JNI_HideTextInput(void) { /* has to match Activity constant */ const int COMMAND_TEXTEDIT_HIDE = 3; Android_JNI_SendMessage(COMMAND_TEXTEDIT_HIDE, 0); } +int Android_JNI_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ + JNIEnv *env; + jclass clazz; + jmethodID mid; + jobject context; + jstring title; + jstring message; + jintArray button_flags; + jintArray button_ids; + jobjectArray button_texts; + jintArray colors; + jobject text; + jint temp; + int i; + + env = Android_JNI_GetEnv(); + + /* convert parameters */ + + clazz = (*env)->FindClass(env, "java/lang/String"); + + title = (*env)->NewStringUTF(env, messageboxdata->title); + message = (*env)->NewStringUTF(env, messageboxdata->message); + + button_flags = (*env)->NewIntArray(env, messageboxdata->numbuttons); + button_ids = (*env)->NewIntArray(env, messageboxdata->numbuttons); + button_texts = (*env)->NewObjectArray(env, messageboxdata->numbuttons, + clazz, NULL); + for (i = 0; i < messageboxdata->numbuttons; ++i) { + temp = messageboxdata->buttons[i].flags; + (*env)->SetIntArrayRegion(env, button_flags, i, 1, &temp); + temp = messageboxdata->buttons[i].buttonid; + (*env)->SetIntArrayRegion(env, button_ids, i, 1, &temp); + text = (*env)->NewStringUTF(env, messageboxdata->buttons[i].text); + (*env)->SetObjectArrayElement(env, button_texts, i, text); + (*env)->DeleteLocalRef(env, text); + } + + if (messageboxdata->colorScheme) { + colors = (*env)->NewIntArray(env, SDL_MESSAGEBOX_COLOR_MAX); + for (i = 0; i < SDL_MESSAGEBOX_COLOR_MAX; ++i) { + temp = (0xFF << 24) | + (messageboxdata->colorScheme->colors[i].r << 16) | + (messageboxdata->colorScheme->colors[i].g << 8) | + (messageboxdata->colorScheme->colors[i].b << 0); + (*env)->SetIntArrayRegion(env, colors, i, 1, &temp); + } + } else { + colors = NULL; + } + + (*env)->DeleteLocalRef(env, clazz); + + /* call function */ + + mid = (*env)->GetStaticMethodID(env, mActivityClass, "getContext","()Landroid/content/Context;"); + + context = (*env)->CallStaticObjectMethod(env, mActivityClass, mid); + + clazz = (*env)->GetObjectClass(env, context); + + mid = (*env)->GetMethodID(env, clazz, + "messageboxShowMessageBox", "(ILjava/lang/String;Ljava/lang/String;[I[I[Ljava/lang/String;[I)I"); + *buttonid = (*env)->CallIntMethod(env, context, mid, + messageboxdata->flags, + title, + message, + button_flags, + button_ids, + button_texts, + colors); + + (*env)->DeleteLocalRef(env, context); + (*env)->DeleteLocalRef(env, clazz); + + /* delete parameters */ + + (*env)->DeleteLocalRef(env, title); + (*env)->DeleteLocalRef(env, message); + (*env)->DeleteLocalRef(env, button_flags); + (*env)->DeleteLocalRef(env, button_ids); + (*env)->DeleteLocalRef(env, button_texts); + (*env)->DeleteLocalRef(env, colors); + + return 0; +} + /* ////////////////////////////////////////////////////////////////////////////// // @@ -1490,6 +1613,11 @@ const char * SDL_AndroidGetExternalStoragePath() return s_AndroidExternalFilesPath; } +jclass Android_JNI_GetActivityClass(void) +{ + return mActivityClass; +} + #endif /* __ANDROID__ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/android/SDL_android.h b/Engine/lib/sdl/src/core/android/SDL_android.h index 1294cd9ce0..8e2ab93c3e 100644 --- a/Engine/lib/sdl/src/core/android/SDL_android.h +++ b/Engine/lib/sdl/src/core/android/SDL_android.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,20 +33,17 @@ extern "C" { #include "SDL_rect.h" /* Interface from the SDL library into the Android Java activity */ -/* extern SDL_bool Android_JNI_CreateContext(int majorVersion, int minorVersion, int red, int green, int blue, int alpha, int buffer, int depth, int stencil, int buffers, int samples); -extern SDL_bool Android_JNI_DeleteContext(void); */ -extern void Android_JNI_SwapWindow(); extern void Android_JNI_SetActivityTitle(const char *title); extern SDL_bool Android_JNI_GetAccelerometerValues(float values[3]); extern void Android_JNI_ShowTextInput(SDL_Rect *inputRect); -extern void Android_JNI_HideTextInput(); +extern void Android_JNI_HideTextInput(void); extern ANativeWindow* Android_JNI_GetNativeWindow(void); /* Audio support */ extern int Android_JNI_OpenAudioDevice(int sampleRate, int is16Bit, int channelCount, int desiredBufferFrames); -extern void* Android_JNI_GetAudioBuffer(); -extern void Android_JNI_WriteAudioBuffer(); -extern void Android_JNI_CloseAudioDevice(); +extern void* Android_JNI_GetAudioBuffer(void); +extern void Android_JNI_WriteAudioBuffer(void); +extern void Android_JNI_CloseAudioDevice(void); #include "SDL_rwops.h" @@ -59,15 +56,17 @@ int Android_JNI_FileClose(SDL_RWops* ctx); /* Clipboard support */ int Android_JNI_SetClipboardText(const char* text); -char* Android_JNI_GetClipboardText(); -SDL_bool Android_JNI_HasClipboardText(); +char* Android_JNI_GetClipboardText(void); +SDL_bool Android_JNI_HasClipboardText(void); /* Power support */ int Android_JNI_GetPowerInfo(int* plugged, int* charged, int* battery, int* seconds, int* percent); - + /* Joystick support */ -void Android_JNI_PollInputDevices(); +void Android_JNI_PollInputDevices(void); +/* Video */ +void Android_JNI_SuspendScreenSaver(SDL_bool suspend); /* Touch support */ int Android_JNI_GetTouchDeviceIds(int **ids); @@ -76,6 +75,7 @@ int Android_JNI_GetTouchDeviceIds(int **ids); #include JNIEnv *Android_JNI_GetEnv(void); int Android_JNI_SetupThread(void); +jclass Android_JNI_GetActivityClass(void); /* Generic messages */ int Android_JNI_SendMessage(int command, int param); diff --git a/Engine/lib/sdl/src/core/linux/SDL_dbus.c b/Engine/lib/sdl/src/core/linux/SDL_dbus.c new file mode 100644 index 0000000000..5d0df050c8 --- /dev/null +++ b/Engine/lib/sdl/src/core/linux/SDL_dbus.c @@ -0,0 +1,239 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" +#include "SDL_dbus.h" + +#if SDL_USE_LIBDBUS +/* we never link directly to libdbus. */ +#include "SDL_loadso.h" +static const char *dbus_library = "libdbus-1.so.3"; +static void *dbus_handle = NULL; +static unsigned int screensaver_cookie = 0; +static SDL_DBusContext dbus = {0}; + +static int +LoadDBUSSyms(void) +{ + #define SDL_DBUS_SYM2(x, y) \ + if (!(dbus.x = SDL_LoadFunction(dbus_handle, #y))) return -1 + + #define SDL_DBUS_SYM(x) \ + SDL_DBUS_SYM2(x, dbus_##x) + + SDL_DBUS_SYM(bus_get_private); + SDL_DBUS_SYM(bus_register); + SDL_DBUS_SYM(bus_add_match); + SDL_DBUS_SYM(connection_open_private); + SDL_DBUS_SYM(connection_set_exit_on_disconnect); + SDL_DBUS_SYM(connection_get_is_connected); + SDL_DBUS_SYM(connection_add_filter); + SDL_DBUS_SYM(connection_try_register_object_path); + SDL_DBUS_SYM(connection_send); + SDL_DBUS_SYM(connection_send_with_reply_and_block); + SDL_DBUS_SYM(connection_close); + SDL_DBUS_SYM(connection_unref); + SDL_DBUS_SYM(connection_flush); + SDL_DBUS_SYM(connection_read_write); + SDL_DBUS_SYM(connection_dispatch); + SDL_DBUS_SYM(message_is_signal); + SDL_DBUS_SYM(message_new_method_call); + SDL_DBUS_SYM(message_append_args); + SDL_DBUS_SYM(message_get_args); + SDL_DBUS_SYM(message_iter_init); + SDL_DBUS_SYM(message_iter_next); + SDL_DBUS_SYM(message_iter_get_basic); + SDL_DBUS_SYM(message_iter_get_arg_type); + SDL_DBUS_SYM(message_iter_recurse); + SDL_DBUS_SYM(message_unref); + SDL_DBUS_SYM(error_init); + SDL_DBUS_SYM(error_is_set); + SDL_DBUS_SYM(error_free); + SDL_DBUS_SYM(get_local_machine_id); + SDL_DBUS_SYM(free); + SDL_DBUS_SYM(shutdown); + + #undef SDL_DBUS_SYM + #undef SDL_DBUS_SYM2 + + return 0; +} + +static void +UnloadDBUSLibrary(void) +{ + if (dbus_handle != NULL) { + SDL_UnloadObject(dbus_handle); + dbus_handle = NULL; + } +} + +static int +LoadDBUSLibrary(void) +{ + int retval = 0; + if (dbus_handle == NULL) { + dbus_handle = SDL_LoadObject(dbus_library); + if (dbus_handle == NULL) { + retval = -1; + /* Don't call SDL_SetError(): SDL_LoadObject already did. */ + } else { + retval = LoadDBUSSyms(); + if (retval < 0) { + UnloadDBUSLibrary(); + } + } + } + + return retval; +} + +void +SDL_DBus_Init(void) +{ + if (!dbus.session_conn && LoadDBUSLibrary() != -1) { + DBusError err; + dbus.error_init(&err); + dbus.session_conn = dbus.bus_get_private(DBUS_BUS_SESSION, &err); + if (dbus.error_is_set(&err)) { + dbus.error_free(&err); + if (dbus.session_conn) { + dbus.connection_unref(dbus.session_conn); + dbus.session_conn = NULL; + } + return; /* oh well */ + } + dbus.connection_set_exit_on_disconnect(dbus.session_conn, 0); + } +} + +void +SDL_DBus_Quit(void) +{ + if (dbus.session_conn) { + dbus.connection_close(dbus.session_conn); + dbus.connection_unref(dbus.session_conn); + dbus.shutdown(); + SDL_memset(&dbus, 0, sizeof(dbus)); + } + UnloadDBUSLibrary(); +} + +SDL_DBusContext * +SDL_DBus_GetContext(void) +{ + if(!dbus_handle || !dbus.session_conn){ + SDL_DBus_Init(); + } + + if(dbus_handle && dbus.session_conn){ + return &dbus; + } else { + return NULL; + } +} + +void +SDL_DBus_ScreensaverTickle(void) +{ + DBusConnection *conn = dbus.session_conn; + if (conn != NULL) { + DBusMessage *msg = dbus.message_new_method_call("org.gnome.ScreenSaver", + "/org/gnome/ScreenSaver", + "org.gnome.ScreenSaver", + "SimulateUserActivity"); + if (msg != NULL) { + if (dbus.connection_send(conn, msg, NULL)) { + dbus.connection_flush(conn); + } + dbus.message_unref(msg); + } + } +} + +SDL_bool +SDL_DBus_ScreensaverInhibit(SDL_bool inhibit) +{ + DBusConnection *conn = dbus.session_conn; + + if (conn == NULL) + return SDL_FALSE; + + if (inhibit && + screensaver_cookie != 0) + return SDL_TRUE; + if (!inhibit && + screensaver_cookie == 0) + return SDL_TRUE; + + if (inhibit) { + const char *app = "My SDL application"; + const char *reason = "Playing a game"; + + DBusMessage *msg = dbus.message_new_method_call("org.freedesktop.ScreenSaver", + "/org/freedesktop/ScreenSaver", + "org.freedesktop.ScreenSaver", + "Inhibit"); + if (msg != NULL) { + dbus.message_append_args (msg, + DBUS_TYPE_STRING, &app, + DBUS_TYPE_STRING, &reason, + DBUS_TYPE_INVALID); + } + + if (msg != NULL) { + DBusMessage *reply; + + reply = dbus.connection_send_with_reply_and_block(conn, msg, 300, NULL); + if (reply) { + if (!dbus.message_get_args(reply, NULL, + DBUS_TYPE_UINT32, &screensaver_cookie, + DBUS_TYPE_INVALID)) + screensaver_cookie = 0; + dbus.message_unref(reply); + } + + dbus.message_unref(msg); + } + + if (screensaver_cookie == 0) { + return SDL_FALSE; + } + return SDL_TRUE; + } else { + DBusMessage *msg = dbus.message_new_method_call("org.freedesktop.ScreenSaver", + "/org/freedesktop/ScreenSaver", + "org.freedesktop.ScreenSaver", + "UnInhibit"); + dbus.message_append_args (msg, + DBUS_TYPE_UINT32, &screensaver_cookie, + DBUS_TYPE_INVALID); + if (msg != NULL) { + if (dbus.connection_send(conn, msg, NULL)) { + dbus.connection_flush(conn); + } + dbus.message_unref(msg); + } + + screensaver_cookie = 0; + return SDL_TRUE; + } +} +#endif diff --git a/Engine/lib/sdl/src/core/linux/SDL_dbus.h b/Engine/lib/sdl/src/core/linux/SDL_dbus.h new file mode 100644 index 0000000000..c064381a0c --- /dev/null +++ b/Engine/lib/sdl/src/core/linux/SDL_dbus.h @@ -0,0 +1,82 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#ifndef _SDL_dbus_h +#define _SDL_dbus_h + +#ifdef HAVE_DBUS_DBUS_H +#define SDL_USE_LIBDBUS 1 +#include "SDL_stdinc.h" +#include + + +typedef struct SDL_DBusContext { + DBusConnection *session_conn; + + DBusConnection *(*bus_get_private)(DBusBusType, DBusError *); + dbus_bool_t (*bus_register)(DBusConnection *, DBusError *); + void (*bus_add_match)(DBusConnection *, const char *, DBusError *); + DBusConnection * (*connection_open_private)(const char *, DBusError *); + void (*connection_set_exit_on_disconnect)(DBusConnection *, dbus_bool_t); + dbus_bool_t (*connection_get_is_connected)(DBusConnection *); + dbus_bool_t (*connection_add_filter)(DBusConnection *, DBusHandleMessageFunction, + void *, DBusFreeFunction); + dbus_bool_t (*connection_try_register_object_path)(DBusConnection *, const char *, + const DBusObjectPathVTable *, void *, DBusError *); + dbus_bool_t (*connection_send)(DBusConnection *, DBusMessage *, dbus_uint32_t *); + DBusMessage *(*connection_send_with_reply_and_block)(DBusConnection *, DBusMessage *, int, DBusError *); + void (*connection_close)(DBusConnection *); + void (*connection_unref)(DBusConnection *); + void (*connection_flush)(DBusConnection *); + dbus_bool_t (*connection_read_write)(DBusConnection *, int); + DBusDispatchStatus (*connection_dispatch)(DBusConnection *); + dbus_bool_t (*message_is_signal)(DBusMessage *, const char *, const char *); + DBusMessage *(*message_new_method_call)(const char *, const char *, const char *, const char *); + dbus_bool_t (*message_append_args)(DBusMessage *, int, ...); + dbus_bool_t (*message_get_args)(DBusMessage *, DBusError *, int, ...); + dbus_bool_t (*message_iter_init)(DBusMessage *, DBusMessageIter *); + dbus_bool_t (*message_iter_next)(DBusMessageIter *); + void (*message_iter_get_basic)(DBusMessageIter *, void *); + int (*message_iter_get_arg_type)(DBusMessageIter *); + void (*message_iter_recurse)(DBusMessageIter *, DBusMessageIter *); + void (*message_unref)(DBusMessage *); + void (*error_init)(DBusError *); + dbus_bool_t (*error_is_set)(const DBusError *); + void (*error_free)(DBusError *); + char *(*get_local_machine_id)(void); + void (*free)(void *); + void (*shutdown)(void); + +} SDL_DBusContext; + +extern void SDL_DBus_Init(void); +extern void SDL_DBus_Quit(void); +extern SDL_DBusContext * SDL_DBus_GetContext(void); +extern void SDL_DBus_ScreensaverTickle(void); +extern SDL_bool SDL_DBus_ScreensaverInhibit(SDL_bool inhibit); + +#endif /* HAVE_DBUS_DBUS_H */ + +#endif /* _SDL_dbus_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/linux/SDL_evdev.c b/Engine/lib/sdl/src/core/linux/SDL_evdev.c index 19333f2576..a8f2b138e5 100644 --- a/Engine/lib/sdl/src/core/linux/SDL_evdev.c +++ b/Engine/lib/sdl/src/core/linux/SDL_evdev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -341,7 +341,7 @@ static Uint8 EVDEV_MouseButtons[] = { SDL_BUTTON_X2 + 3 /* BTN_TASK 0x117 */ }; -static char* EVDEV_consoles[] = { +static const char* EVDEV_consoles[] = { "/proc/self/fd/0", "/dev/tty", "/dev/tty0", @@ -364,7 +364,7 @@ static int SDL_EVDEV_get_console_fd(void) /* Try a few consoles to see which one we have read access to */ - for( i = 0; i < SDL_arraysize(EVDEV_consoles); i++) { + for(i = 0; i < SDL_arraysize(EVDEV_consoles); i++) { fd = open(EVDEV_consoles[i], O_RDONLY); if (fd >= 0) { if (IS_CONSOLE(fd)) return fd; @@ -374,7 +374,7 @@ static int SDL_EVDEV_get_console_fd(void) /* Try stdin, stdout, stderr */ - for( fd = 0; fd < 3; fd++) { + for(fd = 0; fd < 3; fd++) { if (IS_CONSOLE(fd)) return fd; } @@ -468,7 +468,7 @@ SDL_EVDEV_Init(void) } /* Set up the udev callback */ - if ( SDL_UDEV_AddCallback(SDL_EVDEV_udev_callback) < 0) { + if (SDL_UDEV_AddCallback(SDL_EVDEV_udev_callback) < 0) { SDL_EVDEV_Quit(); return -1; } @@ -547,12 +547,11 @@ void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, con return; } - if (!(udev_class & (SDL_UDEV_DEVICE_MOUSE|SDL_UDEV_DEVICE_KEYBOARD))) { - return; - } - - switch( udev_type ) { + switch(udev_type) { case SDL_UDEV_DEVICEADDED: + if (!(udev_class & (SDL_UDEV_DEVICE_MOUSE|SDL_UDEV_DEVICE_KEYBOARD))) { + return; + } SDL_EVDEV_device_added(devpath); break; @@ -584,6 +583,10 @@ SDL_EVDEV_Poll(void) Uint32 kval; #endif + if (!_this) { + return; + } + #if SDL_USE_LIBUDEV SDL_UDEV_Poll(); #endif @@ -611,7 +614,7 @@ SDL_EVDEV_Poll(void) if (scan_code != SDL_SCANCODE_UNKNOWN) { if (events[i].value == 0) { SDL_SendKeyboardKey(SDL_RELEASED, scan_code); - } else if (events[i].value == 1 || events[i].value == 2 /* Key repeated */ ) { + } else if (events[i].value == 1 || events[i].value == 2 /* Key repeated */) { SDL_SendKeyboardKey(SDL_PRESSED, scan_code); #ifdef SDL_INPUT_LINUXKD if (_this->console_fd >= 0) { @@ -622,12 +625,12 @@ SDL_EVDEV_Poll(void) kbe.kb_table = 0; /* Ref: http://graphics.stanford.edu/~seander/bithacks.html#ConditionalSetOrClearBitsWithoutBranching */ - kbe.kb_table |= -( (modstate & KMOD_LCTRL) != 0) & (1 << KG_CTRLL | 1 << KG_CTRL); - kbe.kb_table |= -( (modstate & KMOD_RCTRL) != 0) & (1 << KG_CTRLR | 1 << KG_CTRL); - kbe.kb_table |= -( (modstate & KMOD_LSHIFT) != 0) & (1 << KG_SHIFTL | 1 << KG_SHIFT); - kbe.kb_table |= -( (modstate & KMOD_RSHIFT) != 0) & (1 << KG_SHIFTR | 1 << KG_SHIFT); - kbe.kb_table |= -( (modstate & KMOD_LALT) != 0) & (1 << KG_ALT); - kbe.kb_table |= -( (modstate & KMOD_RALT) != 0) & (1 << KG_ALTGR); + kbe.kb_table |= -((modstate & KMOD_LCTRL) != 0) & (1 << KG_CTRLL | 1 << KG_CTRL); + kbe.kb_table |= -((modstate & KMOD_RCTRL) != 0) & (1 << KG_CTRLR | 1 << KG_CTRL); + kbe.kb_table |= -((modstate & KMOD_LSHIFT) != 0) & (1 << KG_SHIFTL | 1 << KG_SHIFT); + kbe.kb_table |= -((modstate & KMOD_RSHIFT) != 0) & (1 << KG_SHIFTR | 1 << KG_SHIFT); + kbe.kb_table |= -((modstate & KMOD_LALT) != 0) & (1 << KG_ALT); + kbe.kb_table |= -((modstate & KMOD_RALT) != 0) & (1 << KG_ALTGR); if (ioctl(_this->console_fd, KDGKBENT, (unsigned long)&kbe) == 0 && ((KTYP(kbe.kb_value) == KT_LATIN) || (KTYP(kbe.kb_value) == KT_ASCII) || (KTYP(kbe.kb_value) == KT_LETTER))) @@ -638,8 +641,8 @@ SDL_EVDEV_Poll(void) * because 1 << KG_CAPSSHIFT overflows the 8 bits of kb_table * So, we do the CAPS LOCK logic here. Note that isalpha depends on the locale! */ - if ( modstate & KMOD_CAPS && isalpha(kval) ) { - if ( isupper(kval) ) { + if (modstate & KMOD_CAPS && isalpha(kval)) { + if (isupper(kval)) { kval = tolower(kval); } else { kval = toupper(kval); @@ -647,7 +650,7 @@ SDL_EVDEV_Poll(void) } /* Convert to UTF-8 and send */ - end = SDL_UCS4ToUTF8( kval, keysym); + end = SDL_UCS4ToUTF8(kval, keysym); *end = '\0'; SDL_SendKeyboardText(keysym); } @@ -677,10 +680,10 @@ SDL_EVDEV_Poll(void) SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_TRUE, 0, events[i].value); break; case REL_WHEEL: - SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, events[i].value); + SDL_SendMouseWheel(mouse->focus, mouse->mouseID, 0, events[i].value, SDL_MOUSEWHEEL_NORMAL); break; case REL_HWHEEL: - SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0); + SDL_SendMouseWheel(mouse->focus, mouse->mouseID, events[i].value, 0, SDL_MOUSEWHEEL_NORMAL); break; default: break; @@ -729,7 +732,7 @@ SDL_EVDEV_device_added(const char *devpath) /* Check to make sure it's not already in list. */ for (item = _this->first; item != NULL; item = item->next) { - if (strcmp(devpath, item->path) == 0) { + if (SDL_strcmp(devpath, item->path) == 0) { return -1; /* already have this one */ } } @@ -776,7 +779,7 @@ SDL_EVDEV_device_removed(const char *devpath) for (item = _this->first; item != NULL; item = item->next) { /* found it, remove it. */ - if ( strcmp(devpath, item->path) ==0 ) { + if (SDL_strcmp(devpath, item->path) == 0) { if (prev != NULL) { prev->next = item->next; } else { diff --git a/Engine/lib/sdl/src/core/linux/SDL_evdev.h b/Engine/lib/sdl/src/core/linux/SDL_evdev.h index f6398ea583..989ced8581 100644 --- a/Engine/lib/sdl/src/core/linux/SDL_evdev.h +++ b/Engine/lib/sdl/src/core/linux/SDL_evdev.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/core/linux/SDL_ibus.c b/Engine/lib/sdl/src/core/linux/SDL_ibus.c new file mode 100644 index 0000000000..c9804c90af --- /dev/null +++ b/Engine/lib/sdl/src/core/linux/SDL_ibus.c @@ -0,0 +1,680 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifdef HAVE_IBUS_IBUS_H +#include "SDL.h" +#include "SDL_syswm.h" +#include "SDL_ibus.h" +#include "SDL_dbus.h" +#include "../../video/SDL_sysvideo.h" +#include "../../events/SDL_keyboard_c.h" + +#if SDL_VIDEO_DRIVER_X11 + #include "../../video/x11/SDL_x11video.h" +#endif + +#include +#include +#include + +static const char IBUS_SERVICE[] = "org.freedesktop.IBus"; +static const char IBUS_PATH[] = "/org/freedesktop/IBus"; +static const char IBUS_INTERFACE[] = "org.freedesktop.IBus"; +static const char IBUS_INPUT_INTERFACE[] = "org.freedesktop.IBus.InputContext"; + +static char *input_ctx_path = NULL; +static SDL_Rect ibus_cursor_rect = {0}; +static DBusConnection *ibus_conn = NULL; +static char *ibus_addr_file = NULL; +int inotify_fd = -1, inotify_wd = -1; + +static Uint32 +IBus_ModState(void) +{ + Uint32 ibus_mods = 0; + SDL_Keymod sdl_mods = SDL_GetModState(); + + /* Not sure about MOD3, MOD4 and HYPER mappings */ + if (sdl_mods & KMOD_LSHIFT) ibus_mods |= IBUS_SHIFT_MASK; + if (sdl_mods & KMOD_CAPS) ibus_mods |= IBUS_LOCK_MASK; + if (sdl_mods & KMOD_LCTRL) ibus_mods |= IBUS_CONTROL_MASK; + if (sdl_mods & KMOD_LALT) ibus_mods |= IBUS_MOD1_MASK; + if (sdl_mods & KMOD_NUM) ibus_mods |= IBUS_MOD2_MASK; + if (sdl_mods & KMOD_MODE) ibus_mods |= IBUS_MOD5_MASK; + if (sdl_mods & KMOD_LGUI) ibus_mods |= IBUS_SUPER_MASK; + if (sdl_mods & KMOD_RGUI) ibus_mods |= IBUS_META_MASK; + + return ibus_mods; +} + +static const char * +IBus_GetVariantText(DBusConnection *conn, DBusMessageIter *iter, SDL_DBusContext *dbus) +{ + /* The text we need is nested weirdly, use dbus-monitor to see the structure better */ + const char *text = NULL; + const char *struct_id = NULL; + DBusMessageIter sub1, sub2; + + if (dbus->message_iter_get_arg_type(iter) != DBUS_TYPE_VARIANT) { + return NULL; + } + + dbus->message_iter_recurse(iter, &sub1); + + if (dbus->message_iter_get_arg_type(&sub1) != DBUS_TYPE_STRUCT) { + return NULL; + } + + dbus->message_iter_recurse(&sub1, &sub2); + + if (dbus->message_iter_get_arg_type(&sub2) != DBUS_TYPE_STRING) { + return NULL; + } + + dbus->message_iter_get_basic(&sub2, &struct_id); + if (!struct_id || SDL_strncmp(struct_id, "IBusText", sizeof("IBusText")) != 0) { + return NULL; + } + + dbus->message_iter_next(&sub2); + dbus->message_iter_next(&sub2); + + if (dbus->message_iter_get_arg_type(&sub2) != DBUS_TYPE_STRING) { + return NULL; + } + + dbus->message_iter_get_basic(&sub2, &text); + + return text; +} + +static size_t +IBus_utf8_strlen(const char *str) +{ + size_t utf8_len = 0; + const char *p; + + for (p = str; *p; ++p) { + if (!((*p & 0x80) && !(*p & 0x40))) { + ++utf8_len; + } + } + + return utf8_len; +} + +static DBusHandlerResult +IBus_MessageHandler(DBusConnection *conn, DBusMessage *msg, void *user_data) +{ + SDL_DBusContext *dbus = (SDL_DBusContext *)user_data; + + if (dbus->message_is_signal(msg, IBUS_INPUT_INTERFACE, "CommitText")) { + DBusMessageIter iter; + const char *text; + + dbus->message_iter_init(msg, &iter); + + text = IBus_GetVariantText(conn, &iter, dbus); + if (text && *text) { + char buf[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; + size_t text_bytes = SDL_strlen(text), i = 0; + + while (i < text_bytes) { + size_t sz = SDL_utf8strlcpy(buf, text+i, sizeof(buf)); + SDL_SendKeyboardText(buf); + + i += sz; + } + } + + return DBUS_HANDLER_RESULT_HANDLED; + } + + if (dbus->message_is_signal(msg, IBUS_INPUT_INTERFACE, "UpdatePreeditText")) { + DBusMessageIter iter; + const char *text; + + dbus->message_iter_init(msg, &iter); + text = IBus_GetVariantText(conn, &iter, dbus); + + if (text) { + char buf[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; + size_t text_bytes = SDL_strlen(text), i = 0; + size_t cursor = 0; + + do { + size_t sz = SDL_utf8strlcpy(buf, text+i, sizeof(buf)); + size_t chars = IBus_utf8_strlen(buf); + + SDL_SendEditingText(buf, cursor, chars); + + i += sz; + cursor += chars; + } while (i < text_bytes); + } + + SDL_IBus_UpdateTextRect(NULL); + + return DBUS_HANDLER_RESULT_HANDLED; + } + + if (dbus->message_is_signal(msg, IBUS_INPUT_INTERFACE, "HidePreeditText")) { + SDL_SendEditingText("", 0, 0); + return DBUS_HANDLER_RESULT_HANDLED; + } + + return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; +} + +static char * +IBus_ReadAddressFromFile(const char *file_path) +{ + char addr_buf[1024]; + SDL_bool success = SDL_FALSE; + FILE *addr_file; + + addr_file = fopen(file_path, "r"); + if (!addr_file) { + return NULL; + } + + while (fgets(addr_buf, sizeof(addr_buf), addr_file)) { + if (SDL_strncmp(addr_buf, "IBUS_ADDRESS=", sizeof("IBUS_ADDRESS=")-1) == 0) { + size_t sz = SDL_strlen(addr_buf); + if (addr_buf[sz-1] == '\n') addr_buf[sz-1] = 0; + if (addr_buf[sz-2] == '\r') addr_buf[sz-2] = 0; + success = SDL_TRUE; + break; + } + } + + fclose(addr_file); + + if (success) { + return SDL_strdup(addr_buf + (sizeof("IBUS_ADDRESS=") - 1)); + } else { + return NULL; + } +} + +static char * +IBus_GetDBusAddressFilename(void) +{ + SDL_DBusContext *dbus; + const char *disp_env; + char config_dir[PATH_MAX]; + char *display = NULL; + const char *addr; + const char *conf_env; + char *key; + char file_path[PATH_MAX]; + const char *host; + char *disp_num, *screen_num; + + if (ibus_addr_file) { + return SDL_strdup(ibus_addr_file); + } + + dbus = SDL_DBus_GetContext(); + if (!dbus) { + return NULL; + } + + /* Use this environment variable if it exists. */ + addr = SDL_getenv("IBUS_ADDRESS"); + if (addr && *addr) { + return SDL_strdup(addr); + } + + /* Otherwise, we have to get the hostname, display, machine id, config dir + and look up the address from a filepath using all those bits, eek. */ + disp_env = SDL_getenv("DISPLAY"); + + if (!disp_env || !*disp_env) { + display = SDL_strdup(":0.0"); + } else { + display = SDL_strdup(disp_env); + } + + host = display; + disp_num = SDL_strrchr(display, ':'); + screen_num = SDL_strrchr(display, '.'); + + if (!disp_num) { + SDL_free(display); + return NULL; + } + + *disp_num = 0; + disp_num++; + + if (screen_num) { + *screen_num = 0; + } + + if (!*host) { + host = "unix"; + } + + SDL_memset(config_dir, 0, sizeof(config_dir)); + + conf_env = SDL_getenv("XDG_CONFIG_HOME"); + if (conf_env && *conf_env) { + SDL_strlcpy(config_dir, conf_env, sizeof(config_dir)); + } else { + const char *home_env = SDL_getenv("HOME"); + if (!home_env || !*home_env) { + SDL_free(display); + return NULL; + } + SDL_snprintf(config_dir, sizeof(config_dir), "%s/.config", home_env); + } + + key = dbus->get_local_machine_id(); + + SDL_memset(file_path, 0, sizeof(file_path)); + SDL_snprintf(file_path, sizeof(file_path), "%s/ibus/bus/%s-%s-%s", + config_dir, key, host, disp_num); + dbus->free(key); + SDL_free(display); + + return SDL_strdup(file_path); +} + +static SDL_bool IBus_CheckConnection(SDL_DBusContext *dbus); + +static void +IBus_SetCapabilities(void *data, const char *name, const char *old_val, + const char *internal_editing) +{ + SDL_DBusContext *dbus = SDL_DBus_GetContext(); + + if (IBus_CheckConnection(dbus)) { + + DBusMessage *msg = dbus->message_new_method_call(IBUS_SERVICE, + input_ctx_path, + IBUS_INPUT_INTERFACE, + "SetCapabilities"); + if (msg) { + Uint32 caps = IBUS_CAP_FOCUS; + if (!(internal_editing && *internal_editing == '1')) { + caps |= IBUS_CAP_PREEDIT_TEXT; + } + + dbus->message_append_args(msg, + DBUS_TYPE_UINT32, &caps, + DBUS_TYPE_INVALID); + } + + if (msg) { + if (dbus->connection_send(ibus_conn, msg, NULL)) { + dbus->connection_flush(ibus_conn); + } + dbus->message_unref(msg); + } + } +} + + +static SDL_bool +IBus_SetupConnection(SDL_DBusContext *dbus, const char* addr) +{ + const char *path = NULL; + SDL_bool result = SDL_FALSE; + DBusMessage *msg; + DBusObjectPathVTable ibus_vtable = {0}; + ibus_vtable.message_function = &IBus_MessageHandler; + + ibus_conn = dbus->connection_open_private(addr, NULL); + + if (!ibus_conn) { + return SDL_FALSE; + } + + dbus->connection_flush(ibus_conn); + + if (!dbus->bus_register(ibus_conn, NULL)) { + ibus_conn = NULL; + return SDL_FALSE; + } + + dbus->connection_flush(ibus_conn); + + msg = dbus->message_new_method_call(IBUS_SERVICE, IBUS_PATH, IBUS_INTERFACE, "CreateInputContext"); + if (msg) { + const char *client_name = "SDL2_Application"; + dbus->message_append_args(msg, + DBUS_TYPE_STRING, &client_name, + DBUS_TYPE_INVALID); + } + + if (msg) { + DBusMessage *reply; + + reply = dbus->connection_send_with_reply_and_block(ibus_conn, msg, 1000, NULL); + if (reply) { + if (dbus->message_get_args(reply, NULL, + DBUS_TYPE_OBJECT_PATH, &path, + DBUS_TYPE_INVALID)) { + if (input_ctx_path) { + SDL_free(input_ctx_path); + } + input_ctx_path = SDL_strdup(path); + result = SDL_TRUE; + } + dbus->message_unref(reply); + } + dbus->message_unref(msg); + } + + if (result) { + SDL_AddHintCallback(SDL_HINT_IME_INTERNAL_EDITING, &IBus_SetCapabilities, NULL); + + dbus->bus_add_match(ibus_conn, "type='signal',interface='org.freedesktop.IBus.InputContext'", NULL); + dbus->connection_try_register_object_path(ibus_conn, input_ctx_path, &ibus_vtable, dbus, NULL); + dbus->connection_flush(ibus_conn); + } + + SDL_IBus_SetFocus(SDL_GetKeyboardFocus() != NULL); + SDL_IBus_UpdateTextRect(NULL); + + return result; +} + +static SDL_bool +IBus_CheckConnection(SDL_DBusContext *dbus) +{ + if (!dbus) return SDL_FALSE; + + if (ibus_conn && dbus->connection_get_is_connected(ibus_conn)) { + return SDL_TRUE; + } + + if (inotify_fd > 0 && inotify_wd > 0) { + char buf[1024]; + ssize_t readsize = read(inotify_fd, buf, sizeof(buf)); + if (readsize > 0) { + + char *p; + SDL_bool file_updated = SDL_FALSE; + + for (p = buf; p < buf + readsize; /**/) { + struct inotify_event *event = (struct inotify_event*) p; + if (event->len > 0) { + char *addr_file_no_path = SDL_strrchr(ibus_addr_file, '/'); + if (!addr_file_no_path) return SDL_FALSE; + + if (SDL_strcmp(addr_file_no_path + 1, event->name) == 0) { + file_updated = SDL_TRUE; + break; + } + } + + p += sizeof(struct inotify_event) + event->len; + } + + if (file_updated) { + char *addr = IBus_ReadAddressFromFile(ibus_addr_file); + if (addr) { + SDL_bool result = IBus_SetupConnection(dbus, addr); + SDL_free(addr); + return result; + } + } + } + } + + return SDL_FALSE; +} + +SDL_bool +SDL_IBus_Init(void) +{ + SDL_bool result = SDL_FALSE; + SDL_DBusContext *dbus = SDL_DBus_GetContext(); + + if (dbus) { + char *addr_file = IBus_GetDBusAddressFilename(); + char *addr; + char *addr_file_dir; + + if (!addr_file) { + return SDL_FALSE; + } + + /* !!! FIXME: if ibus_addr_file != NULL, this will overwrite it and leak (twice!) */ + ibus_addr_file = SDL_strdup(addr_file); + + addr = IBus_ReadAddressFromFile(addr_file); + if (!addr) { + SDL_free(addr_file); + return SDL_FALSE; + } + + if (inotify_fd < 0) { + inotify_fd = inotify_init(); + fcntl(inotify_fd, F_SETFL, O_NONBLOCK); + } + + addr_file_dir = SDL_strrchr(addr_file, '/'); + if (addr_file_dir) { + *addr_file_dir = 0; + } + + inotify_wd = inotify_add_watch(inotify_fd, addr_file, IN_CREATE | IN_MODIFY); + SDL_free(addr_file); + + if (addr) { + result = IBus_SetupConnection(dbus, addr); + SDL_free(addr); + } + } + + return result; +} + +void +SDL_IBus_Quit(void) +{ + SDL_DBusContext *dbus; + + if (input_ctx_path) { + SDL_free(input_ctx_path); + input_ctx_path = NULL; + } + + if (ibus_addr_file) { + SDL_free(ibus_addr_file); + ibus_addr_file = NULL; + } + + dbus = SDL_DBus_GetContext(); + + if (dbus && ibus_conn) { + dbus->connection_close(ibus_conn); + dbus->connection_unref(ibus_conn); + } + + if (inotify_fd > 0 && inotify_wd > 0) { + inotify_rm_watch(inotify_fd, inotify_wd); + inotify_wd = -1; + } + + SDL_DelHintCallback(SDL_HINT_IME_INTERNAL_EDITING, &IBus_SetCapabilities, NULL); + + SDL_memset(&ibus_cursor_rect, 0, sizeof(ibus_cursor_rect)); +} + +static void +IBus_SimpleMessage(const char *method) +{ + SDL_DBusContext *dbus = SDL_DBus_GetContext(); + + if (IBus_CheckConnection(dbus)) { + DBusMessage *msg = dbus->message_new_method_call(IBUS_SERVICE, + input_ctx_path, + IBUS_INPUT_INTERFACE, + method); + if (msg) { + if (dbus->connection_send(ibus_conn, msg, NULL)) { + dbus->connection_flush(ibus_conn); + } + dbus->message_unref(msg); + } + } +} + +void +SDL_IBus_SetFocus(SDL_bool focused) +{ + const char *method = focused ? "FocusIn" : "FocusOut"; + IBus_SimpleMessage(method); +} + +void +SDL_IBus_Reset(void) +{ + IBus_SimpleMessage("Reset"); +} + +SDL_bool +SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode) +{ + SDL_bool result = SDL_FALSE; + SDL_DBusContext *dbus = SDL_DBus_GetContext(); + + if (IBus_CheckConnection(dbus)) { + DBusMessage *msg = dbus->message_new_method_call(IBUS_SERVICE, + input_ctx_path, + IBUS_INPUT_INTERFACE, + "ProcessKeyEvent"); + if (msg) { + Uint32 mods = IBus_ModState(); + dbus->message_append_args(msg, + DBUS_TYPE_UINT32, &keysym, + DBUS_TYPE_UINT32, &keycode, + DBUS_TYPE_UINT32, &mods, + DBUS_TYPE_INVALID); + } + + if (msg) { + DBusMessage *reply; + + reply = dbus->connection_send_with_reply_and_block(ibus_conn, msg, 300, NULL); + if (reply) { + if (!dbus->message_get_args(reply, NULL, + DBUS_TYPE_BOOLEAN, &result, + DBUS_TYPE_INVALID)) { + result = SDL_FALSE; + } + dbus->message_unref(reply); + } + dbus->message_unref(msg); + } + + } + + SDL_IBus_UpdateTextRect(NULL); + + return result; +} + +void +SDL_IBus_UpdateTextRect(SDL_Rect *rect) +{ + SDL_Window *focused_win; + SDL_SysWMinfo info; + int x = 0, y = 0; + SDL_DBusContext *dbus; + + if (rect) { + SDL_memcpy(&ibus_cursor_rect, rect, sizeof(ibus_cursor_rect)); + } + + focused_win = SDL_GetKeyboardFocus(); + if (!focused_win) { + return; + } + + SDL_VERSION(&info.version); + if (!SDL_GetWindowWMInfo(focused_win, &info)) { + return; + } + + SDL_GetWindowPosition(focused_win, &x, &y); + +#if SDL_VIDEO_DRIVER_X11 + if (info.subsystem == SDL_SYSWM_X11) { + SDL_DisplayData *displaydata = (SDL_DisplayData *) SDL_GetDisplayForWindow(focused_win)->driverdata; + + Display *x_disp = info.info.x11.display; + Window x_win = info.info.x11.window; + int x_screen = displaydata->screen; + Window unused; + + X11_XTranslateCoordinates(x_disp, x_win, RootWindow(x_disp, x_screen), 0, 0, &x, &y, &unused); + } +#endif + + x += ibus_cursor_rect.x; + y += ibus_cursor_rect.y; + + dbus = SDL_DBus_GetContext(); + + if (IBus_CheckConnection(dbus)) { + DBusMessage *msg = dbus->message_new_method_call(IBUS_SERVICE, + input_ctx_path, + IBUS_INPUT_INTERFACE, + "SetCursorLocation"); + if (msg) { + dbus->message_append_args(msg, + DBUS_TYPE_INT32, &x, + DBUS_TYPE_INT32, &y, + DBUS_TYPE_INT32, &ibus_cursor_rect.w, + DBUS_TYPE_INT32, &ibus_cursor_rect.h, + DBUS_TYPE_INVALID); + } + + if (msg) { + if (dbus->connection_send(ibus_conn, msg, NULL)) { + dbus->connection_flush(ibus_conn); + } + dbus->message_unref(msg); + } + } +} + +void +SDL_IBus_PumpEvents(void) +{ + SDL_DBusContext *dbus = SDL_DBus_GetContext(); + + if (IBus_CheckConnection(dbus)) { + dbus->connection_read_write(ibus_conn, 0); + + while (dbus->connection_dispatch(ibus_conn) == DBUS_DISPATCH_DATA_REMAINS) { + /* Do nothing, actual work happens in IBus_MessageHandler */ + } + } +} + +#endif diff --git a/Engine/lib/sdl/src/core/linux/SDL_ibus.h b/Engine/lib/sdl/src/core/linux/SDL_ibus.h new file mode 100644 index 0000000000..5ee7a8e407 --- /dev/null +++ b/Engine/lib/sdl/src/core/linux/SDL_ibus.h @@ -0,0 +1,58 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#ifndef _SDL_ibus_h +#define _SDL_ibus_h + +#ifdef HAVE_IBUS_IBUS_H +#define SDL_USE_IBUS 1 +#include "SDL_stdinc.h" +#include + +extern SDL_bool SDL_IBus_Init(void); +extern void SDL_IBus_Quit(void); + +/* Lets the IBus server know about changes in window focus */ +extern void SDL_IBus_SetFocus(SDL_bool focused); + +/* Closes the candidate list and resets any text currently being edited */ +extern void SDL_IBus_Reset(void); + +/* Sends a keypress event to IBus, returns SDL_TRUE if IBus used this event to + update its candidate list or change input methods. PumpEvents should be + called some time after this, to recieve the TextInput / TextEditing event back. */ +extern SDL_bool SDL_IBus_ProcessKeyEvent(Uint32 keysym, Uint32 keycode); + +/* Update the position of IBus' candidate list. If rect is NULL then this will + just reposition it relative to the focused window's new position. */ +extern void SDL_IBus_UpdateTextRect(SDL_Rect *window_relative_rect); + +/* Checks DBus for new IBus events, and calls SDL_SendKeyboardText / + SDL_SendEditingText for each event it finds */ +extern void SDL_IBus_PumpEvents(); + +#endif /* HAVE_IBUS_IBUS_H */ + +#endif /* _SDL_ibus_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/linux/SDL_udev.c b/Engine/lib/sdl/src/core/linux/SDL_udev.c index da03b7332a..099cc435e2 100644 --- a/Engine/lib/sdl/src/core/linux/SDL_udev.c +++ b/Engine/lib/sdl/src/core/linux/SDL_udev.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,18 +25,19 @@ * udevadm info --query=all -n input/event3 (for a keyboard, mouse, etc) * udevadm info --query=property -n input/event2 */ - #include "SDL_udev.h" #ifdef SDL_USE_LIBUDEV -static char* SDL_UDEV_LIBS[] = { "libudev.so.1", "libudev.so.0" }; +#include + +#include "SDL.h" + +static const char* SDL_UDEV_LIBS[] = { "libudev.so.1", "libudev.so.0" }; #define _THIS SDL_UDEV_PrivateData *_this static _THIS = NULL; -#include "SDL.h" - static SDL_bool SDL_UDEV_load_sym(const char *fn, void **addr); static int SDL_UDEV_load_syms(void); static SDL_bool SDL_UDEV_hotplug_update_available(void); @@ -64,7 +65,9 @@ SDL_UDEV_load_syms(void) SDL_UDEV_SYM(udev_device_get_action); SDL_UDEV_SYM(udev_device_get_devnode); SDL_UDEV_SYM(udev_device_get_subsystem); + SDL_UDEV_SYM(udev_device_get_parent_with_subsystem_devtype); SDL_UDEV_SYM(udev_device_get_property_value); + SDL_UDEV_SYM(udev_device_get_sysattr_value); SDL_UDEV_SYM(udev_device_new_from_syspath); SDL_UDEV_SYM(udev_device_unref); SDL_UDEV_SYM(udev_enumerate_add_match_property); @@ -274,6 +277,111 @@ SDL_UDEV_LoadLibrary(void) return retval; } +#define BITS_PER_LONG (sizeof(unsigned long) * 8) +#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1) +#define OFF(x) ((x)%BITS_PER_LONG) +#define BIT(x) (1UL<> OFF(bit)) & 1) + +static void get_caps(struct udev_device *dev, struct udev_device *pdev, const char *attr, unsigned long *bitmask, size_t bitmask_len) +{ + const char *value; + char text[4096]; + char *word; + int i; + unsigned long v; + + SDL_memset(bitmask, 0, bitmask_len*sizeof(*bitmask)); + value = _this->udev_device_get_sysattr_value(pdev, attr); + if (!value) { + return; + } + + SDL_strlcpy(text, value, sizeof(text)); + i = 0; + while ((word = SDL_strrchr(text, ' ')) != NULL) { + v = SDL_strtoul(word+1, NULL, 16); + if (i < bitmask_len) { + bitmask[i] = v; + } + ++i; + *word = '\0'; + } + v = SDL_strtoul(text, NULL, 16); + if (i < bitmask_len) { + bitmask[i] = v; + } +} + +static int +guess_device_class(struct udev_device *dev) +{ + int devclass = 0; + struct udev_device *pdev; + unsigned long bitmask_ev[NBITS(EV_MAX)]; + unsigned long bitmask_abs[NBITS(ABS_MAX)]; + unsigned long bitmask_key[NBITS(KEY_MAX)]; + unsigned long bitmask_rel[NBITS(REL_MAX)]; + unsigned long keyboard_mask; + + /* walk up the parental chain until we find the real input device; the + * argument is very likely a subdevice of this, like eventN */ + pdev = dev; + while (pdev && !_this->udev_device_get_sysattr_value(pdev, "capabilities/ev")) { + pdev = _this->udev_device_get_parent_with_subsystem_devtype(pdev, "input", NULL); + } + if (!pdev) { + return 0; + } + + get_caps(dev, pdev, "capabilities/ev", bitmask_ev, SDL_arraysize(bitmask_ev)); + get_caps(dev, pdev, "capabilities/abs", bitmask_abs, SDL_arraysize(bitmask_abs)); + get_caps(dev, pdev, "capabilities/rel", bitmask_rel, SDL_arraysize(bitmask_rel)); + get_caps(dev, pdev, "capabilities/key", bitmask_key, SDL_arraysize(bitmask_key)); + + if (test_bit(EV_ABS, bitmask_ev) && + test_bit(ABS_X, bitmask_abs) && test_bit(ABS_Y, bitmask_abs)) { + if (test_bit(BTN_STYLUS, bitmask_key) || test_bit(BTN_TOOL_PEN, bitmask_key)) { + ; /* ID_INPUT_TABLET */ + } else if (test_bit(BTN_TOOL_FINGER, bitmask_key) && !test_bit(BTN_TOOL_PEN, bitmask_key)) { + ; /* ID_INPUT_TOUCHPAD */ + } else if (test_bit(BTN_MOUSE, bitmask_key)) { + devclass |= SDL_UDEV_DEVICE_MOUSE; /* ID_INPUT_MOUSE */ + } else if (test_bit(BTN_TOUCH, bitmask_key)) { + ; /* ID_INPUT_TOUCHSCREEN */ + } + + if (test_bit(BTN_TRIGGER, bitmask_key) || + test_bit(BTN_A, bitmask_key) || + test_bit(BTN_1, bitmask_key) || + test_bit(ABS_RX, bitmask_abs) || + test_bit(ABS_RY, bitmask_abs) || + test_bit(ABS_RZ, bitmask_abs) || + test_bit(ABS_THROTTLE, bitmask_abs) || + test_bit(ABS_RUDDER, bitmask_abs) || + test_bit(ABS_WHEEL, bitmask_abs) || + test_bit(ABS_GAS, bitmask_abs) || + test_bit(ABS_BRAKE, bitmask_abs)) { + devclass |= SDL_UDEV_DEVICE_JOYSTICK; /* ID_INPUT_JOYSTICK */ + } + } + + if (test_bit(EV_REL, bitmask_ev) && + test_bit(REL_X, bitmask_rel) && test_bit(REL_Y, bitmask_rel) && + test_bit(BTN_MOUSE, bitmask_key)) { + devclass |= SDL_UDEV_DEVICE_MOUSE; /* ID_INPUT_MOUSE */ + } + + /* the first 32 bits are ESC, numbers, and Q to D; if we have any of + * those, consider it a keyboard device; do not test KEY_RESERVED, though */ + keyboard_mask = 0xFFFFFFFE; + if ((bitmask_key[0] & keyboard_mask) != 0) + devclass |= SDL_UDEV_DEVICE_KEYBOARD; /* ID_INPUT_KEYBOARD */ + + return devclass; +} + static void device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) { @@ -292,6 +400,8 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) if (SDL_strcmp(subsystem, "sound") == 0) { devclass = SDL_UDEV_DEVICE_SOUND; } else if (SDL_strcmp(subsystem, "input") == 0) { + /* udev rules reference: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c */ + val = _this->udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK"); if (val != NULL && SDL_strcmp(val, "1") == 0 ) { devclass |= SDL_UDEV_DEVICE_JOYSTICK; @@ -302,13 +412,34 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) devclass |= SDL_UDEV_DEVICE_MOUSE; } - val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"); + /* The undocumented rule is: + - All devices with keys get ID_INPUT_KEY + - From this subset, if they have ESC, numbers, and Q to D, it also gets ID_INPUT_KEYBOARD + + Ref: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c#n183 + */ + val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEY"); if (val != NULL && SDL_strcmp(val, "1") == 0 ) { devclass |= SDL_UDEV_DEVICE_KEYBOARD; } if (devclass == 0) { - return; + /* Fall back to old style input classes */ + val = _this->udev_device_get_property_value(dev, "ID_CLASS"); + if (val != NULL) { + if (SDL_strcmp(val, "joystick") == 0) { + devclass = SDL_UDEV_DEVICE_JOYSTICK; + } else if (SDL_strcmp(val, "mouse") == 0) { + devclass = SDL_UDEV_DEVICE_MOUSE; + } else if (SDL_strcmp(val, "kbd") == 0) { + devclass = SDL_UDEV_DEVICE_KEYBOARD; + } else { + return; + } + } else { + /* We could be linked with libudev on a system that doesn't have udev running */ + devclass = guess_device_class(dev); + } } } else { return; @@ -338,6 +469,9 @@ SDL_UDEV_Poll(void) action = _this->udev_device_get_action(dev); if (SDL_strcmp(action, "add") == 0) { + /* Wait for the device to finish initialization */ + SDL_Delay(100); + device_event(SDL_UDEV_DEVICEADDED, dev); } else if (SDL_strcmp(action, "remove") == 0) { device_event(SDL_UDEV_DEVICEREMOVED, dev); diff --git a/Engine/lib/sdl/src/core/linux/SDL_udev.h b/Engine/lib/sdl/src/core/linux/SDL_udev.h index 9a8782a76c..2e4434e627 100644 --- a/Engine/lib/sdl/src/core/linux/SDL_udev.h +++ b/Engine/lib/sdl/src/core/linux/SDL_udev.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -75,7 +75,9 @@ typedef struct SDL_UDEV_PrivateData const char *(*udev_device_get_action)(struct udev_device *); const char *(*udev_device_get_devnode)(struct udev_device *); const char *(*udev_device_get_subsystem)(struct udev_device *); + struct udev_device *(*udev_device_get_parent_with_subsystem_devtype)(struct udev_device *udev_device, const char *subsystem, const char *devtype); const char *(*udev_device_get_property_value)(struct udev_device *, const char *); + const char *(*udev_device_get_sysattr_value)(struct udev_device *udev_device, const char *sysattr); struct udev_device *(*udev_device_new_from_syspath)(struct udev *, const char *); void (*udev_device_unref)(struct udev_device *); int (*udev_enumerate_add_match_property)(struct udev_enumerate *, const char *, const char *); diff --git a/Engine/lib/sdl/src/core/windows/SDL_directx.h b/Engine/lib/sdl/src/core/windows/SDL_directx.h new file mode 100644 index 0000000000..0533f61eda --- /dev/null +++ b/Engine/lib/sdl/src/core/windows/SDL_directx.h @@ -0,0 +1,111 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_directx_h +#define _SDL_directx_h + +/* Include all of the DirectX 8.0 headers and adds any necessary tweaks */ + +#include "SDL_windows.h" +#include +#ifndef WIN32 +#define WIN32 +#endif +#undef WINNT + +/* Far pointers don't exist in 32-bit code */ +#ifndef FAR +#define FAR +#endif + +/* Error codes not yet included in Win32 API header files */ +#ifndef MAKE_HRESULT +#define MAKE_HRESULT(sev,fac,code) \ + ((HRESULT)(((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code)))) +#endif + +#ifndef S_OK +#define S_OK (HRESULT)0x00000000L +#endif + +#ifndef SUCCEEDED +#define SUCCEEDED(x) ((HRESULT)(x) >= 0) +#endif +#ifndef FAILED +#define FAILED(x) ((HRESULT)(x)<0) +#endif + +#ifndef E_FAIL +#define E_FAIL (HRESULT)0x80000008L +#endif +#ifndef E_NOINTERFACE +#define E_NOINTERFACE (HRESULT)0x80004002L +#endif +#ifndef E_OUTOFMEMORY +#define E_OUTOFMEMORY (HRESULT)0x8007000EL +#endif +#ifndef E_INVALIDARG +#define E_INVALIDARG (HRESULT)0x80070057L +#endif +#ifndef E_NOTIMPL +#define E_NOTIMPL (HRESULT)0x80004001L +#endif +#ifndef REGDB_E_CLASSNOTREG +#define REGDB_E_CLASSNOTREG (HRESULT)0x80040154L +#endif + +/* Severity codes */ +#ifndef SEVERITY_ERROR +#define SEVERITY_ERROR 1 +#endif + +/* Error facility codes */ +#ifndef FACILITY_WIN32 +#define FACILITY_WIN32 7 +#endif + +#ifndef FIELD_OFFSET +#define FIELD_OFFSET(type, field) ((LONG)&(((type *)0)->field)) +#endif + +/* DirectX headers (if it isn't included, I haven't tested it yet) + */ +/* We need these defines to mark what version of DirectX API we use */ +#define DIRECTDRAW_VERSION 0x0700 +#define DIRECTSOUND_VERSION 0x0800 +#define DIRECTINPUT_VERSION 0x0800 /* Need version 7 for force feedback. Need version 8 so IDirectInput8_EnumDevices doesn't leak like a sieve... */ + +#ifdef HAVE_DDRAW_H +#include +#endif +#ifdef HAVE_DSOUND_H +#include +#endif +#ifdef HAVE_DINPUT_H +#include +#else +typedef struct { int unused; } DIDEVICEINSTANCE; +#endif + +#endif /* _SDL_directx_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/windows/SDL_windows.c b/Engine/lib/sdl/src/core/windows/SDL_windows.c index 16934d5e10..bc4afe0aa6 100644 --- a/Engine/lib/sdl/src/core/windows/SDL_windows.c +++ b/Engine/lib/sdl/src/core/windows/SDL_windows.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,6 +28,11 @@ #include /* for CoInitialize/CoUninitialize (Win32 only) */ +#ifndef _WIN32_WINNT_VISTA +#define _WIN32_WINNT_VISTA 0x0600 +#endif + + /* Sets an error message based on GetLastError() */ int WIN_SetErrorFromHRESULT(const char *prefix, HRESULT hr) @@ -88,6 +93,37 @@ WIN_CoUninitialize(void) #endif } -#endif /* __WIN32__ */ +#ifndef __WINRT__ +static BOOL +IsWindowsVersionOrGreater(WORD wMajorVersion, WORD wMinorVersion, WORD wServicePackMajor) +{ + OSVERSIONINFOEXW osvi; + DWORDLONG const dwlConditionMask = VerSetConditionMask( + VerSetConditionMask( + VerSetConditionMask( + 0, VER_MAJORVERSION, VER_GREATER_EQUAL ), + VER_MINORVERSION, VER_GREATER_EQUAL ), + VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL ); + + SDL_zero(osvi); + osvi.dwOSVersionInfoSize = sizeof(osvi); + osvi.dwMajorVersion = wMajorVersion; + osvi.dwMinorVersion = wMinorVersion; + osvi.wServicePackMajor = wServicePackMajor; + + return VerifyVersionInfoW(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR, dwlConditionMask) != FALSE; +} +#endif + +BOOL WIN_IsWindowsVistaOrGreater() +{ +#ifdef __WINRT__ + return TRUE; +#else + return IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_VISTA), LOBYTE(_WIN32_WINNT_VISTA), 0); +#endif +} + +#endif /* __WIN32__ || __WINRT__ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/windows/SDL_windows.h b/Engine/lib/sdl/src/core/windows/SDL_windows.h index 45c9d73479..0c99b03d42 100644 --- a/Engine/lib/sdl/src/core/windows/SDL_windows.h +++ b/Engine/lib/sdl/src/core/windows/SDL_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,6 +56,9 @@ extern int WIN_SetError(const char *prefix); extern HRESULT WIN_CoInitialize(void); extern void WIN_CoUninitialize(void); +/* Returns SDL_TRUE if we're running on Windows Vista and newer */ +extern BOOL WIN_IsWindowsVistaOrGreater(); + #endif /* _INCLUDED_WINDOWS_H */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/windows/SDL_xinput.c b/Engine/lib/sdl/src/core/windows/SDL_xinput.c new file mode 100644 index 0000000000..355cd83436 --- /dev/null +++ b/Engine/lib/sdl/src/core/windows/SDL_xinput.c @@ -0,0 +1,139 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_assert.h" +#include "SDL_xinput.h" + + +#ifdef HAVE_XINPUT_H + +XInputGetState_t SDL_XInputGetState = NULL; +XInputSetState_t SDL_XInputSetState = NULL; +XInputGetCapabilities_t SDL_XInputGetCapabilities = NULL; +XInputGetBatteryInformation_t SDL_XInputGetBatteryInformation = NULL; +DWORD SDL_XInputVersion = 0; + +static HANDLE s_pXInputDLL = 0; +static int s_XInputDLLRefCount = 0; + + +#ifdef __WINRT__ + +int +WIN_LoadXInputDLL(void) +{ + /* Getting handles to system dlls (via LoadLibrary and its variants) is not + * supported on WinRT, thus, pointers to XInput's functions can't be + * retrieved via GetProcAddress. + * + * When on WinRT, assume that XInput is already loaded, and directly map + * its XInput.h-declared functions to the SDL_XInput* set of function + * pointers. + * + * Side-note: XInputGetStateEx is not available for use in WinRT. + * This seems to mean that support for the guide button is not available + * in WinRT, unfortunately. + */ + SDL_XInputGetState = (XInputGetState_t)XInputGetState; + SDL_XInputSetState = (XInputSetState_t)XInputSetState; + SDL_XInputGetCapabilities = (XInputGetCapabilities_t)XInputGetCapabilities; + SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)XInputGetBatteryInformation; + + /* XInput 1.4 ships with Windows 8 and 8.1: */ + SDL_XInputVersion = (1 << 16) | 4; + + return 0; +} + +void +WIN_UnloadXInputDLL(void) +{ +} + +#else /* !__WINRT__ */ + +int +WIN_LoadXInputDLL(void) +{ + DWORD version = 0; + + if (s_pXInputDLL) { + SDL_assert(s_XInputDLLRefCount > 0); + s_XInputDLLRefCount++; + return 0; /* already loaded */ + } + + version = (1 << 16) | 4; + s_pXInputDLL = LoadLibrary(L"XInput1_4.dll"); /* 1.4 Ships with Windows 8. */ + if (!s_pXInputDLL) { + version = (1 << 16) | 3; + s_pXInputDLL = LoadLibrary(L"XInput1_3.dll"); /* 1.3 can be installed as a redistributable component. */ + } + if (!s_pXInputDLL) { + s_pXInputDLL = LoadLibrary(L"bin\\XInput1_3.dll"); + } + if (!s_pXInputDLL) { + /* "9.1.0" Ships with Vista and Win7, and is more limited than 1.3+ (e.g. XInputGetStateEx is not available.) */ + s_pXInputDLL = LoadLibrary(L"XInput9_1_0.dll"); + } + if (!s_pXInputDLL) { + return -1; + } + + SDL_assert(s_XInputDLLRefCount == 0); + SDL_XInputVersion = version; + s_XInputDLLRefCount = 1; + + /* 100 is the ordinal for _XInputGetStateEx, which returns the same struct as XinputGetState, but with extra data in wButtons for the guide button, we think... */ + SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL, (LPCSTR)100); + if (!SDL_XInputGetState) { + SDL_XInputGetState = (XInputGetState_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputGetState"); + } + SDL_XInputSetState = (XInputSetState_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputSetState"); + SDL_XInputGetCapabilities = (XInputGetCapabilities_t)GetProcAddress((HMODULE)s_pXInputDLL, "XInputGetCapabilities"); + SDL_XInputGetBatteryInformation = (XInputGetBatteryInformation_t)GetProcAddress( (HMODULE)s_pXInputDLL, "XInputGetBatteryInformation" ); + if (!SDL_XInputGetState || !SDL_XInputSetState || !SDL_XInputGetCapabilities) { + WIN_UnloadXInputDLL(); + return -1; + } + + return 0; +} + +void +WIN_UnloadXInputDLL(void) +{ + if (s_pXInputDLL) { + SDL_assert(s_XInputDLLRefCount > 0); + if (--s_XInputDLLRefCount == 0) { + FreeLibrary(s_pXInputDLL); + s_pXInputDLL = NULL; + } + } else { + SDL_assert(s_XInputDLLRefCount == 0); + } +} + +#endif /* __WINRT__ */ +#endif /* HAVE_XINPUT_H */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/windows/SDL_xinput.h b/Engine/lib/sdl/src/core/windows/SDL_xinput.h new file mode 100644 index 0000000000..67f8fdc1f8 --- /dev/null +++ b/Engine/lib/sdl/src/core/windows/SDL_xinput.h @@ -0,0 +1,172 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_xinput_h +#define _SDL_xinput_h + +#ifdef HAVE_XINPUT_H + +#include "SDL_windows.h" +#include + +#ifndef XUSER_MAX_COUNT +#define XUSER_MAX_COUNT 4 +#endif +#ifndef XUSER_INDEX_ANY +#define XUSER_INDEX_ANY 0x000000FF +#endif +#ifndef XINPUT_CAPS_FFB_SUPPORTED +#define XINPUT_CAPS_FFB_SUPPORTED 0x0001 +#endif + +#ifndef XINPUT_DEVSUBTYPE_UNKNOWN +#define XINPUT_DEVSUBTYPE_UNKNOWN 0x00 +#endif +#ifndef XINPUT_DEVSUBTYPE_GAMEPAD +#define XINPUT_DEVSUBTYPE_GAMEPAD 0x01 +#endif +#ifndef XINPUT_DEVSUBTYPE_WHEEL +#define XINPUT_DEVSUBTYPE_WHEEL 0x02 +#endif +#ifndef XINPUT_DEVSUBTYPE_ARCADE_STICK +#define XINPUT_DEVSUBTYPE_ARCADE_STICK 0x03 +#endif +#ifndef XINPUT_DEVSUBTYPE_FLIGHT_STICK +#define XINPUT_DEVSUBTYPE_FLIGHT_STICK 0x04 +#endif +#ifndef XINPUT_DEVSUBTYPE_DANCE_PAD +#define XINPUT_DEVSUBTYPE_DANCE_PAD 0x05 +#endif +#ifndef XINPUT_DEVSUBTYPE_GUITAR +#define XINPUT_DEVSUBTYPE_GUITAR 0x06 +#endif +#ifndef XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE +#define XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE 0x07 +#endif +#ifndef XINPUT_DEVSUBTYPE_DRUM_KIT +#define XINPUT_DEVSUBTYPE_DRUM_KIT 0x08 +#endif +#ifndef XINPUT_DEVSUBTYPE_GUITAR_BASS +#define XINPUT_DEVSUBTYPE_GUITAR_BASS 0x0B +#endif +#ifndef XINPUT_DEVSUBTYPE_ARCADE_PAD +#define XINPUT_DEVSUBTYPE_ARCADE_PAD 0x13 +#endif + +#ifndef XINPUT_GAMEPAD_GUIDE +#define XINPUT_GAMEPAD_GUIDE 0x0400 +#endif + +#ifndef BATTERY_DEVTYPE_GAMEPAD +#define BATTERY_DEVTYPE_GAMEPAD 0x00 +#endif +#ifndef BATTERY_TYPE_WIRED +#define BATTERY_TYPE_WIRED 0x01 +#endif + +#ifndef BATTERY_TYPE_UNKNOWN +#define BATTERY_TYPE_UNKNOWN 0xFF +#endif +#ifndef BATTERY_LEVEL_EMPTY +#define BATTERY_LEVEL_EMPTY 0x00 +#endif +#ifndef BATTERY_LEVEL_LOW +#define BATTERY_LEVEL_LOW 0x01 +#endif +#ifndef BATTERY_LEVEL_MEDIUM +#define BATTERY_LEVEL_MEDIUM 0x02 +#endif +#ifndef BATTERY_LEVEL_FULL +#define BATTERY_LEVEL_FULL 0x03 +#endif + +/* typedef's for XInput structs we use */ +typedef struct +{ + WORD wButtons; + BYTE bLeftTrigger; + BYTE bRightTrigger; + SHORT sThumbLX; + SHORT sThumbLY; + SHORT sThumbRX; + SHORT sThumbRY; + DWORD dwPaddingReserved; +} XINPUT_GAMEPAD_EX; + +typedef struct +{ + DWORD dwPacketNumber; + XINPUT_GAMEPAD_EX Gamepad; +} XINPUT_STATE_EX; + +typedef struct +{ + BYTE BatteryType; + BYTE BatteryLevel; +} XINPUT_BATTERY_INFORMATION_EX; + +/* Forward decl's for XInput API's we load dynamically and use if available */ +typedef DWORD (WINAPI *XInputGetState_t) + ( + DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ + XINPUT_STATE_EX* pState /* [out] Receives the current state */ + ); + +typedef DWORD (WINAPI *XInputSetState_t) + ( + DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ + XINPUT_VIBRATION* pVibration /* [in, out] The vibration information to send to the controller */ + ); + +typedef DWORD (WINAPI *XInputGetCapabilities_t) + ( + DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ + DWORD dwFlags, /* [in] Input flags that identify the device type */ + XINPUT_CAPABILITIES* pCapabilities /* [out] Receives the capabilities */ + ); + +typedef DWORD (WINAPI *XInputGetBatteryInformation_t) + ( + DWORD dwUserIndex, + BYTE devType, + XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation + ); + +extern int WIN_LoadXInputDLL(void); +extern void WIN_UnloadXInputDLL(void); + +extern XInputGetState_t SDL_XInputGetState; +extern XInputSetState_t SDL_XInputSetState; +extern XInputGetCapabilities_t SDL_XInputGetCapabilities; +extern XInputGetBatteryInformation_t SDL_XInputGetBatteryInformation; +extern DWORD SDL_XInputVersion; /* ((major << 16) & 0xFF00) | (minor & 0xFF) */ + +#define XINPUTGETSTATE SDL_XInputGetState +#define XINPUTSETSTATE SDL_XInputSetState +#define XINPUTGETCAPABILITIES SDL_XInputGetCapabilities +#define XINPUTGETBATTERYINFORMATION SDL_XInputGetBatteryInformation + +#endif /* HAVE_XINPUT_H */ + +#endif /* _SDL_xinput_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.cpp b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.cpp index 0758ad922e..265aa942e0 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.cpp +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.h b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.h index e49e615e87..e87a0b6b63 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.h +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_common.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.cpp b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.cpp index 2fd20a89d2..5ab2ef9a2e 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.cpp +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -70,6 +70,13 @@ extern "C" { #include "SDL_winrtapp_common.h" #include "SDL_winrtapp_direct3d.h" +#if SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED +/* Calling IDXGIDevice3::Trim on the active Direct3D 11.x device is necessary + * when Windows 8.1 apps are about to get suspended. + */ +extern "C" void D3D11_Trim(SDL_Renderer *); +#endif + // Compile-time debugging options: // To enable, uncomment; to disable, comment them out. @@ -119,6 +126,16 @@ static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *n { SDL_assert(SDL_strcmp(name, SDL_HINT_ORIENTATIONS) == 0); + /* HACK: prevent SDL from altering an app's .appxmanifest-set orientation + * from being changed on startup, by detecting when SDL_HINT_ORIENTATIONS + * is getting registered. + * + * TODO, WinRT: consider reading in an app's .appxmanifest file, and apply its orientation when 'newValue == NULL'. + */ + if ((oldValue == NULL) && (newValue == NULL)) { + return; + } + // Start with no orientation flags, then add each in as they're parsed // from newValue. unsigned int orientationFlags = 0; @@ -163,108 +180,58 @@ static void WINRT_SetDisplayOrientationsPreference(void *userdata, const char *n // for details. Microsoft's "Display orientation sample" also gives an // outline of how Windows treats device rotation // (http://code.msdn.microsoft.com/Display-Orientation-Sample-19a58e93). -#if NTDDI_VERSION > NTDDI_WIN8 - DisplayInformation::AutoRotationPreferences = (DisplayOrientations) orientationFlags; -#else - DisplayProperties::AutoRotationPreferences = (DisplayOrientations) orientationFlags; -#endif + WINRT_DISPLAY_PROPERTY(AutoRotationPreferences) = (DisplayOrientations) orientationFlags; } static void -WINRT_ProcessWindowSizeChange() -{ - // Make the new window size be the one true fullscreen mode. - // This change was initially done, in part, to allow the Direct3D 11.1 - // renderer to receive window-resize events as a device rotates. - // Before, rotating a device from landscape, to portrait, and then - // back to landscape would cause the Direct3D 11.1 swap buffer to - // not get resized appropriately. SDL would, on the rotation from - // landscape to portrait, re-resize the SDL window to it's initial - // size (landscape). On the subsequent rotation, SDL would drop the - // window-resize event as it appeared the SDL window didn't change - // size, and the Direct3D 11.1 renderer wouldn't resize its swap - // chain. - SDL_DisplayMode newDisplayMode; - if (WINRT_CalcDisplayModeUsingNativeWindow(&newDisplayMode) != 0) { - return; - } - - // Make note of the old display mode, and it's old driverdata. - SDL_DisplayMode oldDisplayMode; - SDL_zero(oldDisplayMode); - if (WINRT_GlobalSDLVideoDevice) { - oldDisplayMode = WINRT_GlobalSDLVideoDevice->displays[0].desktop_mode; - } - - // Setup the new display mode in the appropriate spots. - if (WINRT_GlobalSDLVideoDevice) { - // Make a full copy of the display mode for display_modes[0], - // one with with a separately malloced 'driverdata' field. - // SDL_VideoQuit(), if called, will attempt to free the driverdata - // fields in 'desktop_mode' and each entry in the 'display_modes' - // array. - if (WINRT_GlobalSDLVideoDevice->displays[0].display_modes[0].driverdata) { - // Free the previous mode's memory - SDL_free(WINRT_GlobalSDLVideoDevice->displays[0].display_modes[0].driverdata); - WINRT_GlobalSDLVideoDevice->displays[0].display_modes[0].driverdata = NULL; - } - if (WINRT_DuplicateDisplayMode(&(WINRT_GlobalSDLVideoDevice->displays[0].display_modes[0]), &newDisplayMode) != 0) { - // Uh oh, something went wrong. A malloc call probably failed. - SDL_free(newDisplayMode.driverdata); - return; - } +WINRT_ProcessWindowSizeChange() // TODO: Pass an SDL_Window-identifying thing into WINRT_ProcessWindowSizeChange() +{ + CoreWindow ^ coreWindow = CoreWindow::GetForCurrentThread(); + if (coreWindow) { + if (WINRT_GlobalSDLWindow) { + SDL_Window * window = WINRT_GlobalSDLWindow; + SDL_WindowData * data = (SDL_WindowData *) window->driverdata; + + int x = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Left); + int y = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Top); + int w = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Width); + int h = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Height); + +#if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) && (NTDDI_VERSION == NTDDI_WIN8) + /* WinPhone 8.0 always keeps its native window size in portrait, + regardless of orientation. This changes in WinPhone 8.1, + in which the native window's size changes along with + orientation. + + Attempt to emulate WinPhone 8.1's behavior on WinPhone 8.0, with + regards to window size. This fixes a rendering bug that occurs + when a WinPhone 8.0 app is rotated to either 90 or 270 degrees. + */ + const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation); + switch (currentOrientation) { + case DisplayOrientations::Landscape: + case DisplayOrientations::LandscapeFlipped: { + int tmp = w; + w = h; + h = tmp; + } break; + } +#endif - // Install 'newDisplayMode' into 'current_mode' and 'desktop_mode'. - WINRT_GlobalSDLVideoDevice->displays[0].current_mode = newDisplayMode; - WINRT_GlobalSDLVideoDevice->displays[0].desktop_mode = newDisplayMode; - } + const Uint32 latestFlags = WINRT_DetectWindowFlags(window); + if (latestFlags & SDL_WINDOW_MAXIMIZED) { + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); + } else { + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0); + } - if (WINRT_GlobalSDLWindow) { - // Send a window-resize event to the rest of SDL, and to apps: - SDL_SendWindowEvent( - WINRT_GlobalSDLWindow, - SDL_WINDOWEVENT_RESIZED, - newDisplayMode.w, - newDisplayMode.h); + WINRT_UpdateWindowFlags(window, SDL_WINDOW_FULLSCREEN_DESKTOP); -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP - // HACK: On Windows Phone, make sure that orientation changes from - // Landscape to LandscapeFlipped, Portrait to PortraitFlipped, - // or vice-versa on either of those two, lead to the Direct3D renderer - // getting updated. - const DisplayOrientations oldOrientation = ((SDL_DisplayModeData *)oldDisplayMode.driverdata)->currentOrientation; - const DisplayOrientations newOrientation = ((SDL_DisplayModeData *)newDisplayMode.driverdata)->currentOrientation; - - if ((oldOrientation == DisplayOrientations::Landscape && newOrientation == DisplayOrientations::LandscapeFlipped) || - (oldOrientation == DisplayOrientations::LandscapeFlipped && newOrientation == DisplayOrientations::Landscape) || - (oldOrientation == DisplayOrientations::Portrait && newOrientation == DisplayOrientations::PortraitFlipped) || - (oldOrientation == DisplayOrientations::PortraitFlipped && newOrientation == DisplayOrientations::Portrait)) - { - // One of the reasons this event is getting sent out is because SDL - // will ignore requests to send out SDL_WINDOWEVENT_RESIZED events - // if and when the event size doesn't change (and the Direct3D 11.1 - // renderer doesn't get the memo). - // - // Make sure that the display/window size really didn't change. If - // it did, then a SDL_WINDOWEVENT_SIZE_CHANGED event got sent, and - // the Direct3D 11.1 renderer picked it up, presumably. - if (oldDisplayMode.w == newDisplayMode.w && - oldDisplayMode.h == newDisplayMode.h) - { - SDL_SendWindowEvent( - WINRT_GlobalSDLWindow, - SDL_WINDOWEVENT_SIZE_CHANGED, - newDisplayMode.w, - newDisplayMode.h); - } + /* The window can move during a resize event, such as when maximizing + or resizing from a corner */ + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MOVED, x, y); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, w, h); } -#endif - } - - // Finally, free the 'driverdata' field of the old 'desktop_mode'. - if (oldDisplayMode.driverdata) { - SDL_free(oldDisplayMode.driverdata); - oldDisplayMode.driverdata = NULL; } } @@ -277,7 +244,7 @@ SDL_WinRTApp::SDL_WinRTApp() : void SDL_WinRTApp::Initialize(CoreApplicationView^ applicationView) { applicationView->Activated += - ref new TypedEventHandler(this, &SDL_WinRTApp::OnActivated); + ref new TypedEventHandler(this, &SDL_WinRTApp::OnAppActivated); CoreApplication::Suspending += ref new EventHandler(this, &SDL_WinRTApp::OnSuspending); @@ -296,40 +263,61 @@ void SDL_WinRTApp::OnOrientationChanged(Object^ sender) #endif { #if LOG_ORIENTATION_EVENTS==1 - CoreWindow^ window = CoreWindow::GetForCurrentThread(); - if (window) { - SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, CoreWindow Size={%f,%f}\n", - __FUNCTION__, - (int)DisplayProperties::CurrentOrientation, - (int)DisplayProperties::NativeOrientation, - (int)DisplayProperties::AutoRotationPreferences, - window->Bounds.Width, - window->Bounds.Height); - } else { - SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d\n", - __FUNCTION__, - (int)DisplayProperties::CurrentOrientation, - (int)DisplayProperties::NativeOrientation, - (int)DisplayProperties::AutoRotationPreferences); + { + CoreWindow^ window = CoreWindow::GetForCurrentThread(); + if (window) { + SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, CoreWindow Bounds={%f,%f,%f,%f}\n", + __FUNCTION__, + WINRT_DISPLAY_PROPERTY(CurrentOrientation), + WINRT_DISPLAY_PROPERTY(NativeOrientation), + WINRT_DISPLAY_PROPERTY(AutoRotationPreferences), + window->Bounds.X, + window->Bounds.Y, + window->Bounds.Width, + window->Bounds.Height); + } else { + SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d\n", + __FUNCTION__, + WINRT_DISPLAY_PROPERTY(CurrentOrientation), + WINRT_DISPLAY_PROPERTY(NativeOrientation), + WINRT_DISPLAY_PROPERTY(AutoRotationPreferences)); + } } #endif -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP - // On Windows Phone, treat an orientation change as a change in window size. - // The native window's size doesn't seem to change, however SDL will simulate - // a window size change. WINRT_ProcessWindowSizeChange(); + +#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP + // HACK: Make sure that orientation changes + // lead to the Direct3D renderer's viewport getting updated: + // + // For some reason, this doesn't seem to need to be done on Windows 8.x, + // even when going from Landscape to LandscapeFlipped. It only seems to + // be needed on Windows Phone, at least when I tested on my devices. + // I'm not currently sure why this is, but it seems to work fine. -- David L. + // + // TODO, WinRT: do more extensive research into why orientation changes on Win 8.x don't need D3D changes, or if they might, in some cases + SDL_Window * window = WINRT_GlobalSDLWindow; + if (window) { + SDL_WindowData * data = (SDL_WindowData *)window->driverdata; + int w = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Width); + int h = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Height); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_SIZE_CHANGED, w, h); + } #endif + } void SDL_WinRTApp::SetWindow(CoreWindow^ window) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, window Size={%f,%f}\n", + SDL_Log("%s, current orientation=%d, native orientation=%d, auto rot. pref=%d, window bounds={%f, %f, %f,%f}\n", __FUNCTION__, - (int)DisplayProperties::CurrentOrientation, - (int)DisplayProperties::NativeOrientation, - (int)DisplayProperties::AutoRotationPreferences, + WINRT_DISPLAY_PROPERTY(CurrentOrientation), + WINRT_DISPLAY_PROPERTY(NativeOrientation), + WINRT_DISPLAY_PROPERTY(AutoRotationPreferences), + window->Bounds.X, + window->Bounds.Y, window->Bounds.Width, window->Bounds.Height); #endif @@ -340,6 +328,9 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window) window->VisibilityChanged += ref new TypedEventHandler(this, &SDL_WinRTApp::OnVisibilityChanged); + window->Activated += + ref new TypedEventHandler(this, &SDL_WinRTApp::OnWindowActivated); + window->Closed += ref new TypedEventHandler(this, &SDL_WinRTApp::OnWindowClosed); @@ -356,6 +347,12 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window) window->PointerReleased += ref new TypedEventHandler(this, &SDL_WinRTApp::OnPointerReleased); + window->PointerEntered += + ref new TypedEventHandler(this, &SDL_WinRTApp::OnPointerEntered); + + window->PointerExited += + ref new TypedEventHandler(this, &SDL_WinRTApp::OnPointerExited); + window->PointerWheelChanged += ref new TypedEventHandler(this, &SDL_WinRTApp::OnPointerWheelChanged); @@ -371,7 +368,13 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window) window->KeyUp += ref new TypedEventHandler(this, &SDL_WinRTApp::OnKeyUp); -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP + window->CharacterReceived += + ref new TypedEventHandler(this, &SDL_WinRTApp::OnCharacterReceived); + +#if NTDDI_VERSION >= NTDDI_WIN10 + Windows::UI::Core::SystemNavigationManager::GetForCurrentView()->BackRequested += + ref new EventHandler(this, &SDL_WinRTApp::OnBackButtonPressed); +#elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP HardwareButtons::BackPressed += ref new EventHandler(this, &SDL_WinRTApp::OnBackButtonPressed); #endif @@ -388,7 +391,7 @@ void SDL_WinRTApp::SetWindow(CoreWindow^ window) // TODO, WinRT: see if an app's default orientation can be found out via WinRT API(s), then set the initial value of SDL_HINT_ORIENTATIONS accordingly. SDL_AddHintCallback(SDL_HINT_ORIENTATIONS, WINRT_SetDisplayOrientationsPreference, NULL); -#if WINAPI_FAMILY == WINAPI_FAMILY_APP // for Windows 8/8.1/RT apps... (and not Phone apps) +#if (WINAPI_FAMILY == WINAPI_FAMILY_APP) && (NTDDI_VERSION < NTDDI_WIN10) // for Windows 8/8.1/RT apps... (and not Phone apps) // Make sure we know when a user has opened the app's settings pane. // This is needed in order to display a privacy policy, which needs // to be done for network-enabled apps, as per Windows Store requirements. @@ -416,16 +419,62 @@ void SDL_WinRTApp::Run() } } +static bool IsSDLWindowEventPending(SDL_WindowEventID windowEventID) +{ + SDL_Event events[128]; + const int count = SDL_PeepEvents(events, sizeof(events)/sizeof(SDL_Event), SDL_PEEKEVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT); + for (int i = 0; i < count; ++i) { + if (events[i].window.event == windowEventID) { + return true; + } + } + return false; +} + +bool SDL_WinRTApp::ShouldWaitForAppResumeEvents() +{ + /* Don't wait if the app is visible: */ + if (m_windowVisible) { + return false; + } + + /* Don't wait until the window-hide events finish processing. + * Do note that if an app-suspend event is sent (as indicated + * by SDL_APP_WILLENTERBACKGROUND and SDL_APP_DIDENTERBACKGROUND + * events), then this code may be a moot point, as WinRT's + * own event pump (aka ProcessEvents()) will pause regardless + * of what we do here. This happens on Windows Phone 8, to note. + * Windows 8.x apps, on the other hand, may get a chance to run + * these. + */ + if (IsSDLWindowEventPending(SDL_WINDOWEVENT_HIDDEN)) { + return false; + } else if (IsSDLWindowEventPending(SDL_WINDOWEVENT_FOCUS_LOST)) { + return false; + } else if (IsSDLWindowEventPending(SDL_WINDOWEVENT_MINIMIZED)) { + return false; + } + + return true; +} + void SDL_WinRTApp::PumpEvents() { - if (!m_windowClosed) - { - if (m_windowVisible) - { + if (!m_windowClosed) { + if (!ShouldWaitForAppResumeEvents()) { + /* This is the normal way in which events should be pumped. + * 'ProcessAllIfPresent' will make ProcessEvents() process anywhere + * from zero to N events, and will then return. + */ CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); - } - else - { + } else { + /* This style of event-pumping, with 'ProcessOneAndAllPending', + * will cause anywhere from one to N events to be processed. If + * at least one event is processed, the call will return. If + * no events are pending, then the call will wait until one is + * available, and will not return (to the caller) until this + * happens! This should only occur when the app is hidden. + */ CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending); } } @@ -435,7 +484,7 @@ void SDL_WinRTApp::Uninitialize() { } -#if WINAPI_FAMILY == WINAPI_FAMILY_APP +#if (WINAPI_FAMILY == WINAPI_FAMILY_APP) && (NTDDI_VERSION < NTDDI_WIN10) void SDL_WinRTApp::OnSettingsPaneCommandsRequested( Windows::UI::ApplicationSettings::SettingsPane ^p, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs ^args) @@ -477,17 +526,18 @@ void SDL_WinRTApp::OnSettingsPaneCommandsRequested( args->Request->ApplicationCommands->Append(cmd); } } -#endif // if WINAPI_FAMILY == WINAPI_FAMILY_APP +#endif // if (WINAPI_FAMILY == WINAPI_FAMILY_APP) && (NTDDI_VERSION < NTDDI_WIN10) void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, size={%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, WINRT_GlobalSDLWindow?=%s\n", + SDL_Log("%s, size={%f,%f}, bounds={%f,%f,%f,%f}, current orientation=%d, native orientation=%d, auto rot. pref=%d, WINRT_GlobalSDLWindow?=%s\n", __FUNCTION__, args->Size.Width, args->Size.Height, - (int)DisplayProperties::CurrentOrientation, - (int)DisplayProperties::NativeOrientation, - (int)DisplayProperties::AutoRotationPreferences, + sender->Bounds.X, sender->Bounds.Y, sender->Bounds.Width, sender->Bounds.Height, + WINRT_DISPLAY_PROPERTY(CurrentOrientation), + WINRT_DISPLAY_PROPERTY(NativeOrientation), + WINRT_DISPLAY_PROPERTY(AutoRotationPreferences), (WINRT_GlobalSDLWindow ? "yes" : "no")); #endif @@ -497,20 +547,30 @@ void SDL_WinRTApp::OnWindowSizeChanged(CoreWindow^ sender, WindowSizeChangedEven void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 - SDL_Log("%s, visible?=%s, WINRT_GlobalSDLWindow?=%s\n", + SDL_Log("%s, visible?=%s, bounds={%f,%f,%f,%f}, WINRT_GlobalSDLWindow?=%s\n", __FUNCTION__, (args->Visible ? "yes" : "no"), + sender->Bounds.X, sender->Bounds.Y, + sender->Bounds.Width, sender->Bounds.Height, (WINRT_GlobalSDLWindow ? "yes" : "no")); #endif m_windowVisible = args->Visible; if (WINRT_GlobalSDLWindow) { SDL_bool wasSDLWindowSurfaceValid = WINRT_GlobalSDLWindow->surface_valid; - + Uint32 latestWindowFlags = WINRT_DetectWindowFlags(WINRT_GlobalSDLWindow); if (args->Visible) { SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_SHOWN, 0, 0); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0); + if (latestWindowFlags & SDL_WINDOW_MAXIMIZED) { + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); + } else { + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_RESTORED, 0, 0); + } } else { SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_HIDDEN, 0, 0); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0); + SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_MINIMIZED, 0, 0); } // HACK: Prevent SDL's window-hide handling code, which currently @@ -523,6 +583,68 @@ void SDL_WinRTApp::OnVisibilityChanged(CoreWindow^ sender, VisibilityChangedEven } } +void SDL_WinRTApp::OnWindowActivated(CoreWindow^ sender, WindowActivatedEventArgs^ args) +{ +#if LOG_WINDOW_EVENTS==1 + SDL_Log("%s, WINRT_GlobalSDLWindow?=%s\n\n", + __FUNCTION__, + (WINRT_GlobalSDLWindow ? "yes" : "no")); +#endif + + /* There's no property in Win 8.x to tell whether a window is active or + not. [De]activation events are, however, sent to the app. We'll just + record those, in case the CoreWindow gets wrapped by an SDL_Window at + some future time. + */ + sender->CustomProperties->Insert("SDLHelperWindowActivationState", args->WindowActivationState); + + SDL_Window * window = WINRT_GlobalSDLWindow; + if (window) { + if (args->WindowActivationState != CoreWindowActivationState::Deactivated) { + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_SHOWN, 0, 0); + if (SDL_GetKeyboardFocus() != window) { + SDL_SetKeyboardFocus(window); + } + + /* Send a mouse-motion event as appropriate. + This doesn't work when called from OnPointerEntered, at least + not in WinRT CoreWindow apps (as OnPointerEntered doesn't + appear to be called after window-reactivation, at least not + in Windows 10, Build 10586.3 (November 2015 update, non-beta). + + Don't do it on WinPhone 8.0 though, as CoreWindow's 'PointerPosition' + property isn't available. + */ +#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION >= NTDDI_WINBLUE) + Point cursorPos = WINRT_TransformCursorPosition(window, sender->PointerPosition, TransformToSDLWindowSize); + SDL_SendMouseMotion(window, 0, 0, (int)cursorPos.X, (int)cursorPos.Y); +#endif + + /* TODO, WinRT: see if the Win32 bugfix from https://hg.libsdl.org/SDL/rev/d278747da408 needs to be applied (on window activation) */ + //WIN_CheckAsyncMouseRelease(data); + + /* TODO, WinRT: implement clipboard support, if possible */ + ///* + // * FIXME: Update keyboard state + // */ + //WIN_CheckClipboardUpdate(data->videodata); + + // HACK: Resetting the mouse-cursor here seems to fix + // https://bugzilla.libsdl.org/show_bug.cgi?id=3217, whereby a + // WinRT app's mouse cursor may switch to Windows' 'wait' cursor, + // after a user alt-tabs back into a full-screened SDL app. + // This bug does not appear to reproduce 100% of the time. + // It may be a bug in Windows itself (v.10.0.586.36, as tested, + // and the most-recent as of this writing). + SDL_SetCursor(NULL); + } else { + if (SDL_GetKeyboardFocus() == window) { + SDL_SetKeyboardFocus(NULL); + } + } + } +} + void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) { #if LOG_WINDOW_EVENTS==1 @@ -531,85 +653,62 @@ void SDL_WinRTApp::OnWindowClosed(CoreWindow^ sender, CoreWindowEventArgs^ args) m_windowClosed = true; } -void SDL_WinRTApp::OnActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args) +void SDL_WinRTApp::OnAppActivated(CoreApplicationView^ applicationView, IActivatedEventArgs^ args) { CoreWindow::GetForCurrentThread()->Activate(); } -static int SDLCALL RemoveAppSuspendAndResumeEvents(void * userdata, SDL_Event * event) -{ - if (event->type == SDL_WINDOWEVENT) - { - switch (event->window.event) - { - case SDL_WINDOWEVENT_MINIMIZED: - case SDL_WINDOWEVENT_RESTORED: - // Return 0 to indicate that the event should be removed from the - // event queue: - return 0; - default: - break; - } - } - - // Return 1 to indicate that the event should stay in the event queue: - return 1; -} - void SDL_WinRTApp::OnSuspending(Platform::Object^ sender, SuspendingEventArgs^ args) { // Save app state asynchronously after requesting a deferral. Holding a deferral // indicates that the application is busy performing suspending operations. Be // aware that a deferral may not be held indefinitely. After about five seconds, // the app will be forced to exit. + + // ... but first, let the app know it's about to go to the background. + // The separation of events may be important, given that the deferral + // runs in a separate thread. This'll make SDL_APP_WILLENTERBACKGROUND + // the only event among the two that runs in the main thread. Given + // that a few WinRT operations can only be done from the main thread + // (things that access the WinRT CoreWindow are one example of this), + // this could be important. + SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); + SuspendingDeferral^ deferral = args->SuspendingOperation->GetDeferral(); create_task([this, deferral]() { - // Send a window-minimized event immediately to observers. + // Send an app did-enter-background event immediately to observers. // CoreDispatcher::ProcessEvents, which is the backbone on which // SDL_WinRTApp::PumpEvents is built, will not return to its caller // once it sends out a suspend event. Any events posted to SDL's // event queue won't get received until the WinRT app is resumed. // SDL_AddEventWatch() may be used to receive app-suspend events on // WinRT. - // - // In order to prevent app-suspend events from being received twice: - // first via a callback passed to SDL_AddEventWatch, and second via - // SDL's event queue, the event will be sent to SDL, then immediately - // removed from the queue. - if (WINRT_GlobalSDLWindow) - { - SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_MINIMIZED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) - SDL_FilterEvents(RemoveAppSuspendAndResumeEvents, 0); - } - - SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); + // Let the Direct3D 11 renderer prepare for the app to be backgrounded. + // This is necessary for Windows 8.1, possibly elsewhere in the future. + // More details at: http://msdn.microsoft.com/en-us/library/windows/apps/Hh994929.aspx +#if SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED + if (WINRT_GlobalSDLWindow) { + SDL_Renderer * renderer = SDL_GetRenderer(WINRT_GlobalSDLWindow); + if (renderer && (SDL_strcmp(renderer->info.name, "direct3d11") == 0)) { + D3D11_Trim(renderer); + } + } +#endif + deferral->Complete(); }); } void SDL_WinRTApp::OnResuming(Platform::Object^ sender, Platform::Object^ args) { + // Restore any data or state that was unloaded on suspend. By default, data + // and state are persisted when resuming from suspend. Note that these events + // do not occur if the app was previously terminated. SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND); SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND); - - // Restore any data or state that was unloaded on suspend. By default, data - // and state are persisted when resuming from suspend. Note that this event - // does not occur if the app was previously terminated. - if (WINRT_GlobalSDLWindow) - { - SDL_SendWindowEvent(WINRT_GlobalSDLWindow, SDL_WINDOWEVENT_RESTORED, 0, 0); // TODO: see if SDL_WINDOWEVENT_SIZE_CHANGED should be getting triggered here (it is, currently) - - // Remove the app-resume event from the queue, as is done with the - // app-suspend event. - // - // TODO, WinRT: consider posting this event to the queue even though - // its counterpart, the app-suspend event, effectively has to be - // processed immediately. - SDL_FilterEvents(RemoveAppSuspendAndResumeEvents, 0); - } } void SDL_WinRTApp::OnExiting(Platform::Object^ sender, Platform::Object^ args) @@ -654,10 +753,28 @@ void SDL_WinRTApp::OnPointerReleased(CoreWindow^ sender, PointerEventArgs^ args) #if LOG_POINTER_EVENTS WINRT_LogPointerEvent("pointer released", args, WINRT_TransformCursorPosition(WINRT_GlobalSDLWindow, args->CurrentPoint->Position, TransformToSDLWindowSize)); #endif - + WINRT_ProcessPointerReleasedEvent(WINRT_GlobalSDLWindow, args->CurrentPoint); } +void SDL_WinRTApp::OnPointerEntered(CoreWindow^ sender, PointerEventArgs^ args) +{ +#if LOG_POINTER_EVENTS + WINRT_LogPointerEvent("pointer entered", args, WINRT_TransformCursorPosition(WINRT_GlobalSDLWindow, args->CurrentPoint->Position, TransformToSDLWindowSize)); +#endif + + WINRT_ProcessPointerEnteredEvent(WINRT_GlobalSDLWindow, args->CurrentPoint); +} + +void SDL_WinRTApp::OnPointerExited(CoreWindow^ sender, PointerEventArgs^ args) +{ +#if LOG_POINTER_EVENTS + WINRT_LogPointerEvent("pointer exited", args, WINRT_TransformCursorPosition(WINRT_GlobalSDLWindow, args->CurrentPoint->Position, TransformToSDLWindowSize)); +#endif + + WINRT_ProcessPointerExitedEvent(WINRT_GlobalSDLWindow, args->CurrentPoint); +} + void SDL_WinRTApp::OnPointerWheelChanged(CoreWindow^ sender, PointerEventArgs^ args) { #if LOG_POINTER_EVENTS @@ -682,8 +799,13 @@ void SDL_WinRTApp::OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::C WINRT_ProcessKeyUpEvent(args); } -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP -void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args) +void SDL_WinRTApp::OnCharacterReceived(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args) +{ + WINRT_ProcessCharacterReceivedEvent(args); +} + +template +static void WINRT_OnBackButtonPressed(BackButtonEventArgs ^ args) { SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_AC_BACK); SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_AC_BACK); @@ -695,5 +817,18 @@ void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::Phone: } } } + +#if NTDDI_VERSION == NTDDI_WIN10 +void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::UI::Core::BackRequestedEventArgs^ args) + +{ + WINRT_OnBackButtonPressed(args); +} +#elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP +void SDL_WinRTApp::OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args) + +{ + WINRT_OnBackButtonPressed(args); +} #endif diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.h b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.h index 6dc9a6c85f..0b69c2bb98 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.h +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_direct3d.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -39,13 +39,15 @@ ref class SDL_WinRTApp sealed : public Windows::ApplicationModel::Core::IFramewo void PumpEvents(); protected: + bool ShouldWaitForAppResumeEvents(); + // Event Handlers. -#if WINAPI_FAMILY == WINAPI_FAMILY_APP // for Windows 8/8.1/RT apps... (and not Phone apps) +#if (WINAPI_FAMILY == WINAPI_FAMILY_APP) && (NTDDI_VERSION < NTDDI_WIN10) // for Windows 8/8.1/RT apps... (and not Phone apps) void OnSettingsPaneCommandsRequested( Windows::UI::ApplicationSettings::SettingsPane ^p, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs ^args); -#endif // if WINAPI_FAMILY == WINAPI_FAMILY_APP +#endif // if (WINAPI_FAMILY == WINAPI_FAMILY_APP) && (NTDDI_VERSION < NTDDI_WIN10) #if NTDDI_VERSION > NTDDI_WIN8 void OnOrientationChanged(Windows::Graphics::Display::DisplayInformation^ sender, Platform::Object^ args); @@ -54,21 +56,27 @@ ref class SDL_WinRTApp sealed : public Windows::ApplicationModel::Core::IFramewo #endif void OnWindowSizeChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowSizeChangedEventArgs^ args); void OnLogicalDpiChanged(Platform::Object^ sender); - void OnActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args); + void OnAppActivated(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView, Windows::ApplicationModel::Activation::IActivatedEventArgs^ args); void OnSuspending(Platform::Object^ sender, Windows::ApplicationModel::SuspendingEventArgs^ args); void OnResuming(Platform::Object^ sender, Platform::Object^ args); void OnExiting(Platform::Object^ sender, Platform::Object^ args); + void OnWindowActivated(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::WindowActivatedEventArgs^ args); void OnWindowClosed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CoreWindowEventArgs^ args); void OnVisibilityChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::VisibilityChangedEventArgs^ args); void OnPointerPressed(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnPointerReleased(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnPointerWheelChanged(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnPointerMoved(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); + void OnPointerEntered(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); + void OnPointerExited(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::PointerEventArgs^ args); void OnMouseMoved(Windows::Devices::Input::MouseDevice^ mouseDevice, Windows::Devices::Input::MouseEventArgs^ args); void OnKeyDown(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); void OnKeyUp(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); + void OnCharacterReceived(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args); -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP +#if NTDDI_VERSION >= NTDDI_WIN10 + void OnBackButtonPressed(Platform::Object^ sender, Windows::UI::Core::BackRequestedEventArgs^ args); +#elif WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP void OnBackButtonPressed(Platform::Object^ sender, Windows::Phone::UI::Input::BackPressedEventArgs^ args); #endif diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.cpp b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.cpp index 38694e11e0..201e3b6c2a 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.cpp +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.h b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.h index 2296475b00..a08b67c40b 100644 --- a/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.h +++ b/Engine/lib/sdl/src/core/winrt/SDL_winrtapp_xaml.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,7 +23,7 @@ #ifndef _SDL_winrtapp_xaml_h #define _SDL_winrtapp_xaml_h -#include "SDL_types.h" +#include "SDL_stdinc.h" #ifdef __cplusplus extern SDL_bool WINRT_XAMLWasEnabled; diff --git a/Engine/lib/sdl/src/cpuinfo/SDL_cpuinfo.c b/Engine/lib/sdl/src/cpuinfo/SDL_cpuinfo.c index 6a529ae01c..c4c55be399 100644 --- a/Engine/lib/sdl/src/cpuinfo/SDL_cpuinfo.c +++ b/Engine/lib/sdl/src/cpuinfo/SDL_cpuinfo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -60,6 +60,7 @@ #define CPU_HAS_SSE41 0x00000100 #define CPU_HAS_SSE42 0x00000200 #define CPU_HAS_AVX 0x00000400 +#define CPU_HAS_AVX2 0x00000800 #if SDL_ALTIVEC_BLITTERS && HAVE_SETJMP && !__MACOSX__ && !__OpenBSD__ /* This is the brute force way of detecting instruction sets... @@ -73,11 +74,12 @@ illegal_instruction(int sig) } #endif /* HAVE_SETJMP */ -static SDL_INLINE int +static int CPU_haveCPUID(void) { int has_CPUID = 0; /* *INDENT-OFF* */ +#ifndef SDL_CPUINFO_DISABLED #if defined(__GNUC__) && defined(i386) __asm__ ( " pushfl # Get original EFLAGS \n" @@ -164,6 +166,7 @@ CPU_haveCPUID(void) "1: \n" ); #endif +#endif /* *INDENT-ON* */ return has_CPUID; } @@ -172,6 +175,7 @@ CPU_haveCPUID(void) #define cpuid(func, a, b, c, d) \ __asm__ __volatile__ ( \ " pushl %%ebx \n" \ +" xorl %%ecx,%%ecx \n" \ " cpuid \n" \ " movl %%ebx, %%esi \n" \ " popl %%ebx \n" : \ @@ -180,6 +184,7 @@ CPU_haveCPUID(void) #define cpuid(func, a, b, c, d) \ __asm__ __volatile__ ( \ " pushq %%rbx \n" \ +" xorq %%rcx,%%rcx \n" \ " cpuid \n" \ " movq %%rbx, %%rsi \n" \ " popq %%rbx \n" : \ @@ -188,6 +193,7 @@ CPU_haveCPUID(void) #define cpuid(func, a, b, c, d) \ __asm { \ __asm mov eax, func \ + __asm xor ecx, ecx \ __asm cpuid \ __asm mov a, eax \ __asm mov b, ebx \ @@ -209,7 +215,7 @@ CPU_haveCPUID(void) a = b = c = d = 0 #endif -static SDL_INLINE int +static int CPU_getCPUIDFeatures(void) { int features = 0; @@ -223,7 +229,39 @@ CPU_getCPUIDFeatures(void) return features; } -static SDL_INLINE int +static SDL_bool +CPU_OSSavesYMM(void) +{ + int a, b, c, d; + + /* Check to make sure we can call xgetbv */ + cpuid(0, a, b, c, d); + if (a < 1) { + return SDL_FALSE; + } + cpuid(1, a, b, c, d); + if (!(c & 0x08000000)) { + return SDL_FALSE; + } + + /* Call xgetbv to see if YMM register state is saved */ + a = 0; +#if defined(__GNUC__) && (defined(i386) || defined(__x86_64__)) + asm(".byte 0x0f, 0x01, 0xd0" : "=a" (a) : "c" (0) : "%edx"); +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) && (_MSC_FULL_VER >= 160040219) /* VS2010 SP1 */ + a = (int)_xgetbv(0); +#elif (defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__) + __asm + { + xor ecx, ecx + _asm _emit 0x0f _asm _emit 0x01 _asm _emit 0xd0 + mov a, eax + } +#endif + return ((a & 6) == 6) ? SDL_TRUE : SDL_FALSE; +} + +static int CPU_haveRDTSC(void) { if (CPU_haveCPUID()) { @@ -232,10 +270,11 @@ CPU_haveRDTSC(void) return 0; } -static SDL_INLINE int +static int CPU_haveAltiVec(void) { volatile int altivec = 0; +#ifndef SDL_CPUINFO_DISABLED #if (defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__))) || (defined(__OpenBSD__) && defined(__powerpc__)) #ifdef __OpenBSD__ int selectors[2] = { CTL_MACHDEP, CPU_ALTIVEC }; @@ -255,11 +294,12 @@ CPU_haveAltiVec(void) altivec = 1; } signal(SIGILL, handler); +#endif #endif return altivec; } -static SDL_INLINE int +static int CPU_haveMMX(void) { if (CPU_haveCPUID()) { @@ -268,7 +308,7 @@ CPU_haveMMX(void) return 0; } -static SDL_INLINE int +static int CPU_have3DNow(void) { if (CPU_haveCPUID()) { @@ -283,7 +323,7 @@ CPU_have3DNow(void) return 0; } -static SDL_INLINE int +static int CPU_haveSSE(void) { if (CPU_haveCPUID()) { @@ -292,7 +332,7 @@ CPU_haveSSE(void) return 0; } -static SDL_INLINE int +static int CPU_haveSSE2(void) { if (CPU_haveCPUID()) { @@ -301,7 +341,7 @@ CPU_haveSSE2(void) return 0; } -static SDL_INLINE int +static int CPU_haveSSE3(void) { if (CPU_haveCPUID()) { @@ -316,13 +356,13 @@ CPU_haveSSE3(void) return 0; } -static SDL_INLINE int +static int CPU_haveSSE41(void) { if (CPU_haveCPUID()) { int a, b, c, d; - cpuid(1, a, b, c, d); + cpuid(0, a, b, c, d); if (a >= 1) { cpuid(1, a, b, c, d); return (c & 0x00080000); @@ -331,13 +371,13 @@ CPU_haveSSE41(void) return 0; } -static SDL_INLINE int +static int CPU_haveSSE42(void) { if (CPU_haveCPUID()) { int a, b, c, d; - cpuid(1, a, b, c, d); + cpuid(0, a, b, c, d); if (a >= 1) { cpuid(1, a, b, c, d); return (c & 0x00100000); @@ -346,13 +386,13 @@ CPU_haveSSE42(void) return 0; } -static SDL_INLINE int +static int CPU_haveAVX(void) { - if (CPU_haveCPUID()) { + if (CPU_haveCPUID() && CPU_OSSavesYMM()) { int a, b, c, d; - cpuid(1, a, b, c, d); + cpuid(0, a, b, c, d); if (a >= 1) { cpuid(1, a, b, c, d); return (c & 0x10000000); @@ -361,12 +401,28 @@ CPU_haveAVX(void) return 0; } +static int +CPU_haveAVX2(void) +{ + if (CPU_haveCPUID() && CPU_OSSavesYMM()) { + int a, b, c, d; + + cpuid(0, a, b, c, d); + if (a >= 7) { + cpuid(7, a, b, c, d); + return (b & 0x00000020); + } + } + return 0; +} + static int SDL_CPUCount = 0; int SDL_GetCPUCount(void) { if (!SDL_CPUCount) { +#ifndef SDL_CPUINFO_DISABLED #if defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_ONLN) if (SDL_CPUCount <= 0) { SDL_CPUCount = (int)sysconf(_SC_NPROCESSORS_ONLN); @@ -384,6 +440,7 @@ SDL_GetCPUCount(void) GetSystemInfo(&info); SDL_CPUCount = info.dwNumberOfProcessors; } +#endif #endif /* There has to be at least 1, right? :) */ if (SDL_CPUCount <= 0) { @@ -401,22 +458,25 @@ SDL_GetCPUType(void) if (!SDL_CPUType[0]) { int i = 0; - int a, b, c, d; if (CPU_haveCPUID()) { + int a, b, c, d; cpuid(0x00000000, a, b, c, d); + (void) a; SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; - SDL_CPUType[i++] = (char)(b & 0xff); b >>= 8; - SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; + SDL_CPUType[i++] = (char)(b & 0xff); + SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; SDL_CPUType[i++] = (char)(d & 0xff); d >>= 8; + SDL_CPUType[i++] = (char)(d & 0xff); + SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; - SDL_CPUType[i++] = (char)(c & 0xff); c >>= 8; + SDL_CPUType[i++] = (char)(c & 0xff); } if (!SDL_CPUType[0]) { SDL_strlcpy(SDL_CPUType, "Unknown", sizeof(SDL_CPUType)); @@ -504,15 +564,12 @@ int SDL_GetCPUCacheLineSize(void) { const char *cpuType = SDL_GetCPUType(); - + int a, b, c, d; + (void) a; (void) b; (void) c; (void) d; if (SDL_strcmp(cpuType, "GenuineIntel") == 0) { - int a, b, c, d; - cpuid(0x00000001, a, b, c, d); return (((b >> 8) & 0xff) * 8); } else if (SDL_strcmp(cpuType, "AuthenticAMD") == 0) { - int a, b, c, d; - cpuid(0x80000005, a, b, c, d); return (c & 0xff); } else { @@ -558,6 +615,9 @@ SDL_GetCPUFeatures(void) if (CPU_haveAVX()) { SDL_CPUFeatures |= CPU_HAS_AVX; } + if (CPU_haveAVX2()) { + SDL_CPUFeatures |= CPU_HAS_AVX2; + } } return SDL_CPUFeatures; } @@ -652,12 +712,22 @@ SDL_HasAVX(void) return SDL_FALSE; } +SDL_bool +SDL_HasAVX2(void) +{ + if (SDL_GetCPUFeatures() & CPU_HAS_AVX2) { + return SDL_TRUE; + } + return SDL_FALSE; +} + static int SDL_SystemRAM = 0; int SDL_GetSystemRAM(void) { if (!SDL_SystemRAM) { +#ifndef SDL_CPUINFO_DISABLED #if defined(HAVE_SYSCONF) && defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) if (SDL_SystemRAM <= 0) { SDL_SystemRAM = (int)((Sint64)sysconf(_SC_PHYS_PAGES) * sysconf(_SC_PAGESIZE) / (1024*1024)); @@ -665,7 +735,7 @@ SDL_GetSystemRAM(void) #endif #ifdef HAVE_SYSCTLBYNAME if (SDL_SystemRAM <= 0) { -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) #ifdef HW_REALMEM int mib[2] = {CTL_HW, HW_REALMEM}; #else @@ -691,6 +761,7 @@ SDL_GetSystemRAM(void) SDL_SystemRAM = (int)(stat.ullTotalPhys / (1024 * 1024)); } } +#endif #endif } return SDL_SystemRAM; @@ -718,6 +789,7 @@ main() printf("SSE4.1: %d\n", SDL_HasSSE41()); printf("SSE4.2: %d\n", SDL_HasSSE42()); printf("AVX: %d\n", SDL_HasAVX()); + printf("AVX2: %d\n", SDL_HasAVX2()); printf("RAM: %d MB\n", SDL_GetSystemRAM()); return 0; } diff --git a/Engine/lib/sdl/src/dynapi/SDL_dynapi.c b/Engine/lib/sdl/src/dynapi/SDL_dynapi.c index 220ec9ba2c..1411f8c93b 100644 --- a/Engine/lib/sdl/src/dynapi/SDL_dynapi.c +++ b/Engine/lib/sdl/src/dynapi/SDL_dynapi.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,38 +56,38 @@ static void SDL_InitDynamicAPI(void); #if DISABLE_JUMP_MAGIC /* Can't use the macro for varargs nonsense. This is atrocious. */ #define SDL_DYNAPI_VARARGS_LOGFN(_static, name, initcall, logname, prio) \ - _static void SDL_Log##logname##name(int category, const char *fmt, ...) { \ + _static void SDL_Log##logname##name(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ va_list ap; initcall; va_start(ap, fmt); \ jump_table.SDL_LogMessageV(category, SDL_LOG_PRIORITY_##prio, fmt, ap); \ va_end(ap); \ } #define SDL_DYNAPI_VARARGS(_static, name, initcall) \ - _static int SDL_SetError##name(const char *fmt, ...) { \ + _static int SDL_SetError##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ char buf[512]; /* !!! FIXME: dynamic allocation */ \ va_list ap; initcall; va_start(ap, fmt); \ jump_table.SDL_vsnprintf(buf, sizeof (buf), fmt, ap); \ va_end(ap); \ return jump_table.SDL_SetError("%s", buf); \ } \ - _static int SDL_sscanf##name(const char *buf, const char *fmt, ...) { \ + _static int SDL_sscanf##name(const char *buf, SDL_SCANF_FORMAT_STRING const char *fmt, ...) { \ int retval; va_list ap; initcall; va_start(ap, fmt); \ retval = jump_table.SDL_vsscanf(buf, fmt, ap); \ va_end(ap); \ return retval; \ } \ - _static int SDL_snprintf##name(char *buf, size_t buflen, const char *fmt, ...) { \ + _static int SDL_snprintf##name(SDL_OUT_Z_CAP(maxlen) char *buf, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ int retval; va_list ap; initcall; va_start(ap, fmt); \ - retval = jump_table.SDL_vsnprintf(buf, buflen, fmt, ap); \ + retval = jump_table.SDL_vsnprintf(buf, maxlen, fmt, ap); \ va_end(ap); \ return retval; \ } \ - _static void SDL_Log##name(const char *fmt, ...) { \ + _static void SDL_Log##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ va_list ap; initcall; va_start(ap, fmt); \ jump_table.SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, fmt, ap); \ va_end(ap); \ } \ - _static void SDL_LogMessage##name(int category, SDL_LogPriority priority, const char *fmt, ...) { \ + _static void SDL_LogMessage##name(int category, SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { \ va_list ap; initcall; va_start(ap, fmt); \ jump_table.SDL_LogMessageV(category, priority, fmt, ap); \ va_end(ap); \ @@ -206,7 +206,14 @@ SDL_DYNAPI_entry(Uint32 apiver, void *table, Uint32 tablesize) static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) { HANDLE lib = LoadLibraryA(fname); - return lib ? GetProcAddress(lib, sym) : NULL; + void *retval = NULL; + if (lib) { + retval = GetProcAddress(lib, sym); + if (retval == NULL) { + FreeLibrary(lib); + } + } + return retval; } #elif defined(__HAIKU__) @@ -215,8 +222,11 @@ static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) { image_id lib = load_add_on(fname); void *retval = NULL; - if ((lib < 0) || (get_image_symbol(lib, sym, B_SYMBOL_TYPE_TEXT, &retval) != B_NO_ERROR)) { - retval = NULL; + if (lib >= 0) { + if (get_image_symbol(lib, sym, B_SYMBOL_TYPE_TEXT, &retval) != B_NO_ERROR) { + unload_add_on(lib); + retval = NULL; + } } return retval; } @@ -225,7 +235,14 @@ static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) static SDL_INLINE void *get_sdlapi_entry(const char *fname, const char *sym) { void *lib = dlopen(fname, RTLD_NOW | RTLD_LOCAL); - return lib ? dlsym(lib, sym) : NULL; + void *retval = NULL; + if (lib != NULL) { + retval = dlsym(lib, sym); + if (retval == NULL) { + dlclose(lib); + } + } + return retval; } #else #error Please define your platform. diff --git a/Engine/lib/sdl/src/dynapi/SDL_dynapi.h b/Engine/lib/sdl/src/dynapi/SDL_dynapi.h index d318552f01..5faac2194e 100644 --- a/Engine/lib/sdl/src/dynapi/SDL_dynapi.h +++ b/Engine/lib/sdl/src/dynapi/SDL_dynapi.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,11 +43,16 @@ #include "TargetConditionals.h" #endif -#if TARGET_OS_IPHONE /* probably not useful on iOS. */ +#if TARGET_OS_IPHONE || __native_client__ || __EMSCRIPTEN__ /* probably not useful on iOS, NACL or Emscripten. */ #define SDL_DYNAMIC_API 0 #elif SDL_BUILDING_WINRT /* probaly not useful on WinRT, given current .dll loading restrictions */ #define SDL_DYNAMIC_API 0 -#else /* everyone else. */ +#elif defined(__clang_analyzer__) +#define SDL_DYNAMIC_API 0 /* Turn off for static analysis, so reports are more clear. */ +#endif + +/* everyone else. This is where we turn on the API if nothing forced it off. */ +#ifndef SDL_DYNAMIC_API #define SDL_DYNAMIC_API 1 #endif diff --git a/Engine/lib/sdl/src/dynapi/SDL_dynapi_overrides.h b/Engine/lib/sdl/src/dynapi/SDL_dynapi_overrides.h index 5ae7927f2d..c9ebfffe22 100644 --- a/Engine/lib/sdl/src/dynapi/SDL_dynapi_overrides.h +++ b/Engine/lib/sdl/src/dynapi/SDL_dynapi_overrides.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -505,6 +505,7 @@ #define SDL_GetNumVideoDisplays SDL_GetNumVideoDisplays_REAL #define SDL_GetDisplayName SDL_GetDisplayName_REAL #define SDL_GetDisplayBounds SDL_GetDisplayBounds_REAL +#define SDL_GetDisplayDPI SDL_GetDisplayDPI_REAL #define SDL_GetNumDisplayModes SDL_GetNumDisplayModes_REAL #define SDL_GetDisplayMode SDL_GetDisplayMode_REAL #define SDL_GetDesktopDisplayMode SDL_GetDesktopDisplayMode_REAL @@ -575,3 +576,24 @@ #define SDL_GetDefaultAssertionHandler SDL_GetDefaultAssertionHandler_REAL #define SDL_GetAssertionHandler SDL_GetAssertionHandler_REAL #define SDL_DXGIGetOutputInfo SDL_DXGIGetOutputInfo_REAL +#define SDL_RenderIsClipEnabled SDL_RenderIsClipEnabled_REAL +#define SDL_WinRTRunApp SDL_WinRTRunApp_REAL +#define SDL_WarpMouseGlobal SDL_WarpMouseGlobal_REAL +#define SDL_WinRTGetFSPathUNICODE SDL_WinRTGetFSPathUNICODE_REAL +#define SDL_WinRTGetFSPathUTF8 SDL_WinRTGetFSPathUTF8_REAL +#define SDL_WinRTRunApp SDL_WinRTRunApp_REAL +#define SDL_sqrtf SDL_sqrtf_REAL +#define SDL_tan SDL_tan_REAL +#define SDL_tanf SDL_tanf_REAL +#define SDL_CaptureMouse SDL_CaptureMouse_REAL +#define SDL_SetWindowHitTest SDL_SetWindowHitTest_REAL +#define SDL_GetGlobalMouseState SDL_GetGlobalMouseState_REAL +#define SDL_HasAVX2 SDL_HasAVX2_REAL +#define SDL_QueueAudio SDL_QueueAudio_REAL +#define SDL_GetQueuedAudioSize SDL_GetQueuedAudioSize_REAL +#define SDL_ClearQueuedAudio SDL_ClearQueuedAudio_REAL +#define SDL_GetGrabbedWindow SDL_GetGrabbedWindow_REAL +#define SDL_SetWindowsMessageHook SDL_SetWindowsMessageHook_REAL +#define SDL_JoystickCurrentPowerLevel SDL_JoystickCurrentPowerLevel_REAL +#define SDL_GameControllerFromInstanceID SDL_GameControllerFromInstanceID_REAL +#define SDL_JoystickFromInstanceID SDL_JoystickFromInstanceID_REAL diff --git a/Engine/lib/sdl/src/dynapi/SDL_dynapi_procs.h b/Engine/lib/sdl/src/dynapi/SDL_dynapi_procs.h index 301aff38a6..3f11a25f97 100644 --- a/Engine/lib/sdl/src/dynapi/SDL_dynapi_procs.h +++ b/Engine/lib/sdl/src/dynapi/SDL_dynapi_procs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,17 +31,17 @@ /* direct jump magic can use these, the rest needs special code. */ #if !SDL_DYNAPI_PROC_NO_VARARGS -SDL_DYNAPI_PROC(int,SDL_SetError,(const char *a, ...),(a),return) -SDL_DYNAPI_PROC(void,SDL_Log,(const char *a, ...),(a),) -SDL_DYNAPI_PROC(void,SDL_LogVerbose,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogDebug,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogInfo,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogWarn,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogError,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogCritical,(int a, const char *b, ...),(a,b),) -SDL_DYNAPI_PROC(void,SDL_LogMessage,(int a, SDL_LogPriority b, const char *c, ...),(a,b,c),) -SDL_DYNAPI_PROC(int,SDL_sscanf,(const char *a, const char *b, ...),(a,b),return) -SDL_DYNAPI_PROC(int,SDL_snprintf,(char *a, size_t b, const char *c, ...),(a,b,c),return) +SDL_DYNAPI_PROC(int,SDL_SetError,(SDL_PRINTF_FORMAT_STRING const char *a, ...),(a),return) +SDL_DYNAPI_PROC(void,SDL_Log,(SDL_PRINTF_FORMAT_STRING const char *a, ...),(a),) +SDL_DYNAPI_PROC(void,SDL_LogVerbose,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogDebug,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogInfo,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogWarn,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogError,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogCritical,(int a, SDL_PRINTF_FORMAT_STRING const char *b, ...),(a,b),) +SDL_DYNAPI_PROC(void,SDL_LogMessage,(int a, SDL_LogPriority b, SDL_PRINTF_FORMAT_STRING const char *c, ...),(a,b,c),) +SDL_DYNAPI_PROC(int,SDL_sscanf,(const char *a, SDL_SCANF_FORMAT_STRING const char *b, ...),(a,b),return) +SDL_DYNAPI_PROC(int,SDL_snprintf,(SDL_OUT_Z_CAP(b) char *a, size_t b, SDL_PRINTF_FORMAT_STRING const char *c, ...),(a,b,c),return) #endif #ifdef SDL_CreateThread @@ -418,17 +418,17 @@ SDL_DYNAPI_PROC(int,SDL_isdigit,(int a),(a),return) SDL_DYNAPI_PROC(int,SDL_isspace,(int a),(a),return) SDL_DYNAPI_PROC(int,SDL_toupper,(int a),(a),return) SDL_DYNAPI_PROC(int,SDL_tolower,(int a),(a),return) -SDL_DYNAPI_PROC(void*,SDL_memset,(void *a, int b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(void*,SDL_memcpy,(void *a, const void *b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(void*,SDL_memmove,(void *a, const void *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(void*,SDL_memset,(SDL_OUT_BYTECAP(c) void *a, int b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(void*,SDL_memcpy,(SDL_OUT_BYTECAP(c) void *a, SDL_IN_BYTECAP(c) const void *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(void*,SDL_memmove,(SDL_OUT_BYTECAP(c) void *a, SDL_IN_BYTECAP(c) const void *b, size_t c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_memcmp,(const void *a, const void *b, size_t c),(a,b,c),return) SDL_DYNAPI_PROC(size_t,SDL_wcslen,(const wchar_t *a),(a),return) -SDL_DYNAPI_PROC(size_t,SDL_wcslcpy,(wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(size_t,SDL_wcslcat,(wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_wcslcpy,(SDL_OUT_Z_CAP(c) wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_wcslcat,(SDL_INOUT_Z_CAP(c) wchar_t *a, const wchar_t *b, size_t c),(a,b,c),return) SDL_DYNAPI_PROC(size_t,SDL_strlen,(const char *a),(a),return) -SDL_DYNAPI_PROC(size_t,SDL_strlcpy,(char *a, const char *b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(size_t,SDL_utf8strlcpy,(char *a, const char *b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(size_t,SDL_strlcat,(char *a, const char *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_strlcpy,(SDL_OUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_utf8strlcpy,(SDL_OUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return) +SDL_DYNAPI_PROC(size_t,SDL_strlcat,(SDL_INOUT_Z_CAP(c) char *a, const char *b, size_t c),(a,b,c),return) SDL_DYNAPI_PROC(char*,SDL_strdup,(const char *a),(a),return) SDL_DYNAPI_PROC(char*,SDL_strrev,(char *a),(a),return) SDL_DYNAPI_PROC(char*,SDL_strupr,(char *a),(a),return) @@ -453,7 +453,7 @@ SDL_DYNAPI_PROC(int,SDL_strcmp,(const char *a, const char *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_strncmp,(const char *a, const char *b, size_t c),(a,b,c),return) SDL_DYNAPI_PROC(int,SDL_strcasecmp,(const char *a, const char *b),(a,b),return) SDL_DYNAPI_PROC(int,SDL_strncasecmp,(const char *a, const char *b, size_t c),(a,b,c),return) -SDL_DYNAPI_PROC(int,SDL_vsnprintf,(char *a, size_t b, const char *c, va_list d),(a,b,c,d),return) +SDL_DYNAPI_PROC(int,SDL_vsnprintf,(SDL_OUT_Z_CAP(b) char *a, size_t b, const char *c, va_list d),(a,b,c,d),return) SDL_DYNAPI_PROC(double,SDL_acos,(double a),(a),return) SDL_DYNAPI_PROC(double,SDL_asin,(double a),(a),return) SDL_DYNAPI_PROC(double,SDL_atan,(double a),(a),return) @@ -604,5 +604,30 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX,(void),(),return) SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetDefaultAssertionHandler,(void),(),return) SDL_DYNAPI_PROC(SDL_AssertionHandler,SDL_GetAssertionHandler,(void **a),(a),return) #ifdef __WIN32__ -SDL_DYNAPI_PROC(void,SDL_DXGIGetOutputInfo,(int a,int *b, int *c),(a,b,c),) +SDL_DYNAPI_PROC(SDL_bool,SDL_DXGIGetOutputInfo,(int a,int *b, int *c),(a,b,c),return) #endif +SDL_DYNAPI_PROC(SDL_bool,SDL_RenderIsClipEnabled,(SDL_Renderer *a),(a),return) +#ifdef __WINRT__ +SDL_DYNAPI_PROC(int,SDL_WinRTRunApp,(int a, char **b, void *c),(a,b,c),return) +SDL_DYNAPI_PROC(const wchar_t*,SDL_WinRTGetFSPathUNICODE,(SDL_WinRT_Path a),(a),return) +SDL_DYNAPI_PROC(const char*,SDL_WinRTGetFSPathUTF8,(SDL_WinRT_Path a),(a),return) +#endif +SDL_DYNAPI_PROC(int,SDL_WarpMouseGlobal,(int a, int b),(a,b),return) +SDL_DYNAPI_PROC(float,SDL_sqrtf,(float a),(a),return) +SDL_DYNAPI_PROC(double,SDL_tan,(double a),(a),return) +SDL_DYNAPI_PROC(float,SDL_tanf,(float a),(a),return) +SDL_DYNAPI_PROC(int,SDL_CaptureMouse,(SDL_bool a),(a),return) +SDL_DYNAPI_PROC(int,SDL_SetWindowHitTest,(SDL_Window *a, SDL_HitTest b, void *c),(a,b,c),return) +SDL_DYNAPI_PROC(Uint32,SDL_GetGlobalMouseState,(int *a, int *b),(a,b),return) +SDL_DYNAPI_PROC(SDL_bool,SDL_HasAVX2,(void),(),return) +SDL_DYNAPI_PROC(int,SDL_QueueAudio,(SDL_AudioDeviceID a, const void *b, Uint32 c),(a,b,c),return) +SDL_DYNAPI_PROC(Uint32,SDL_GetQueuedAudioSize,(SDL_AudioDeviceID a),(a),return) +SDL_DYNAPI_PROC(void,SDL_ClearQueuedAudio,(SDL_AudioDeviceID a),(a),) +SDL_DYNAPI_PROC(SDL_Window*,SDL_GetGrabbedWindow,(void),(),return) +#ifdef __WIN32__ +SDL_DYNAPI_PROC(void,SDL_SetWindowsMessageHook,(SDL_WindowsMessageHook a, void *b),(a,b),) +#endif +SDL_DYNAPI_PROC(int,SDL_GetDisplayDPI,(int a, float *b, float *c, float *d),(a,b,c,d),return) +SDL_DYNAPI_PROC(SDL_JoystickPowerLevel,SDL_JoystickCurrentPowerLevel,(SDL_Joystick *a),(a),return) +SDL_DYNAPI_PROC(SDL_GameController*,SDL_GameControllerFromInstanceID,(SDL_JoystickID a),(a),return) +SDL_DYNAPI_PROC(SDL_Joystick*,SDL_JoystickFromInstanceID,(SDL_JoystickID a),(a),return) diff --git a/Engine/lib/sdl/src/dynapi/gendynapi.pl b/Engine/lib/sdl/src/dynapi/gendynapi.pl index 091a08c7a3..5c3d79608d 100644 --- a/Engine/lib/sdl/src/dynapi/gendynapi.pl +++ b/Engine/lib/sdl/src/dynapi/gendynapi.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w # Simple DirectMedia Layer -# Copyright (C) 1997-2014 Sam Lantinga +# Copyright (C) 1997-2016 Sam Lantinga # # This software is provided 'as-is', without any express or implied # warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_clipboardevents.c b/Engine/lib/sdl/src/events/SDL_clipboardevents.c index 3ef7bed264..9b2209bdfe 100644 --- a/Engine/lib/sdl/src/events/SDL_clipboardevents.c +++ b/Engine/lib/sdl/src/events/SDL_clipboardevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_clipboardevents_c.h b/Engine/lib/sdl/src/events/SDL_clipboardevents_c.h index c71da2a47d..98e6a38bd4 100644 --- a/Engine/lib/sdl/src/events/SDL_clipboardevents_c.h +++ b/Engine/lib/sdl/src/events/SDL_clipboardevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_dropevents.c b/Engine/lib/sdl/src/events/SDL_dropevents.c index 4830d14f8b..8f4405efa4 100644 --- a/Engine/lib/sdl/src/events/SDL_dropevents.c +++ b/Engine/lib/sdl/src/events/SDL_dropevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_dropevents_c.h b/Engine/lib/sdl/src/events/SDL_dropevents_c.h index cb5e1dc57b..a60e089f35 100644 --- a/Engine/lib/sdl/src/events/SDL_dropevents_c.h +++ b/Engine/lib/sdl/src/events/SDL_dropevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_events.c b/Engine/lib/sdl/src/events/SDL_events.c index 7a98c30218..ffd1038249 100644 --- a/Engine/lib/sdl/src/events/SDL_events.c +++ b/Engine/lib/sdl/src/events/SDL_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -75,32 +75,21 @@ static struct SDL_mutex *lock; volatile SDL_bool active; volatile int count; + volatile int max_events_seen; SDL_EventEntry *head; SDL_EventEntry *tail; SDL_EventEntry *free; SDL_SysWMEntry *wmmsg_used; SDL_SysWMEntry *wmmsg_free; -} SDL_EventQ = { NULL, SDL_TRUE }; +} SDL_EventQ = { NULL, SDL_TRUE, 0, 0, NULL, NULL, NULL, NULL, NULL }; -static SDL_INLINE SDL_bool -SDL_ShouldPollJoystick() -{ -#if !SDL_JOYSTICK_DISABLED - if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || - SDL_JoystickEventState(SDL_QUERY)) && - SDL_PrivateJoystickNeedsPolling()) { - return SDL_TRUE; - } -#endif - return SDL_FALSE; -} - /* Public functions */ void SDL_StopEventLoop(void) { + const char *report = SDL_GetHint("SDL_EVENT_QUEUE_STATISTICS"); int i; SDL_EventEntry *entry; SDL_SysWMEntry *wmmsg; @@ -111,6 +100,11 @@ SDL_StopEventLoop(void) SDL_EventQ.active = SDL_FALSE; + if (report && SDL_atoi(report)) { + SDL_Log("SDL EVENT QUEUE: Maximum events in-flight: %d\n", + SDL_EventQ.max_events_seen); + } + /* Clean out EventQ */ for (entry = SDL_EventQ.head; entry; ) { SDL_EventEntry *next = entry->next; @@ -132,7 +126,9 @@ SDL_StopEventLoop(void) SDL_free(wmmsg); wmmsg = next; } + SDL_EventQ.count = 0; + SDL_EventQ.max_events_seen = 0; SDL_EventQ.head = NULL; SDL_EventQ.tail = NULL; SDL_EventQ.free = NULL; @@ -231,6 +227,10 @@ SDL_AddEvent(SDL_Event * event) } ++SDL_EventQ.count; + if (SDL_EventQ.count > SDL_EventQ.max_events_seen) { + SDL_EventQ.max_events_seen = SDL_EventQ.count; + } + return 1; } @@ -315,7 +315,6 @@ SDL_PeepEvents(SDL_Event * events, int numevents, SDL_eventaction action, For now we'll guarantee it's valid at least until the next call to SDL_PeepEvents() */ - SDL_SysWMEntry *wmmsg; if (SDL_EventQ.wmmsg_free) { wmmsg = SDL_EventQ.wmmsg_free; SDL_EventQ.wmmsg_free = wmmsg->next; @@ -403,10 +402,12 @@ SDL_PumpEvents(void) } #if !SDL_JOYSTICK_DISABLED /* Check for joystick state change */ - if (SDL_ShouldPollJoystick()) { + if ((!SDL_disabled_events[SDL_JOYAXISMOTION >> 8] || SDL_JoystickEventState(SDL_QUERY))) { SDL_JoystickUpdate(); } #endif + + SDL_SendPendingQuit(); /* in case we had a signal handler fire, etc. */ } /* Public functions */ @@ -550,7 +551,7 @@ SDL_DelEventWatch(SDL_EventFilter filter, void *userdata) void SDL_FilterEvents(SDL_EventFilter filter, void *userdata) { - if (SDL_LockMutex(SDL_EventQ.lock) == 0) { + if (SDL_EventQ.lock && SDL_LockMutex(SDL_EventQ.lock) == 0) { SDL_EventEntry *entry, *next; for (entry = SDL_EventQ.head; entry; entry = next) { next = entry->next; @@ -648,4 +649,10 @@ SDL_SendSysWMEvent(SDL_SysWMmsg * message) return (posted); } +int +SDL_SendKeymapChangedEvent(void) +{ + return SDL_SendAppEvent(SDL_KEYMAPCHANGED); +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/events/SDL_events_c.h b/Engine/lib/sdl/src/events/SDL_events_c.h index 11d6e304d4..2e33190479 100644 --- a/Engine/lib/sdl/src/events/SDL_events_c.h +++ b/Engine/lib/sdl/src/events/SDL_events_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -38,11 +38,14 @@ extern void SDL_QuitInterrupt(void); extern int SDL_SendAppEvent(SDL_EventType eventType); extern int SDL_SendSysWMEvent(SDL_SysWMmsg * message); +extern int SDL_SendKeymapChangedEvent(void); extern int SDL_QuitInit(void); extern int SDL_SendQuit(void); extern void SDL_QuitQuit(void); +extern void SDL_SendPendingQuit(void); + /* The event filter function */ extern SDL_EventFilter SDL_EventOK; extern void *SDL_EventOKParam; diff --git a/Engine/lib/sdl/src/events/SDL_gesture.c b/Engine/lib/sdl/src/events/SDL_gesture.c index a47ab7d131..66def44294 100644 --- a/Engine/lib/sdl/src/events/SDL_gesture.c +++ b/Engine/lib/sdl/src/events/SDL_gesture.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,16 +24,13 @@ /* General mouse handling code for SDL */ #include "SDL_events.h" +#include "SDL_endian.h" #include "SDL_events_c.h" #include "SDL_gesture_c.h" -#if !defined(__PSP__) -#include -#endif - -#include +/* #include -#include +*/ /* TODO: Replace with malloc */ @@ -118,14 +115,34 @@ static unsigned long SDL_HashDollar(SDL_FloatPoint* points) static int SaveTemplate(SDL_DollarTemplate *templ, SDL_RWops *dst) { - if (dst == NULL) return 0; + if (dst == NULL) { + return 0; + } /* No Longer storing the Hash, rehash on load */ /* if (SDL_RWops.write(dst, &(templ->hash), sizeof(templ->hash), 1) != 1) return 0; */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN if (SDL_RWwrite(dst, templ->path, - sizeof(templ->path[0]),DOLLARNPOINTS) != DOLLARNPOINTS) + sizeof(templ->path[0]),DOLLARNPOINTS) != DOLLARNPOINTS) { return 0; + } +#else + { + SDL_DollarTemplate copy = *templ; + SDL_FloatPoint *p = copy.path; + int i; + for (i = 0; i < DOLLARNPOINTS; i++, p++) { + p->x = SDL_SwapFloatLE(p->x); + p->y = SDL_SwapFloatLE(p->y); + } + + if (SDL_RWwrite(dst, copy.path, + sizeof(copy.path[0]),DOLLARNPOINTS) != DOLLARNPOINTS) { + return 0; + } + } +#endif return 1; } @@ -137,7 +154,7 @@ int SDL_SaveAllDollarTemplates(SDL_RWops *dst) for (i = 0; i < SDL_numGestureTouches; i++) { SDL_GestureTouch* touch = &SDL_gestureTouch[i]; for (j = 0; j < touch->numDollarTemplates; j++) { - rtrn += SaveTemplate(&touch->dollarTemplate[i], dst); + rtrn += SaveTemplate(&touch->dollarTemplate[j], dst); } } return rtrn; @@ -149,8 +166,8 @@ int SDL_SaveDollarTemplate(SDL_GestureID gestureId, SDL_RWops *dst) for (i = 0; i < SDL_numGestureTouches; i++) { SDL_GestureTouch* touch = &SDL_gestureTouch[i]; for (j = 0; j < touch->numDollarTemplates; j++) { - if (touch->dollarTemplate[i].hash == gestureId) { - return SaveTemplate(&touch->dollarTemplate[i], dst); + if (touch->dollarTemplate[j].hash == gestureId) { + return SaveTemplate(&touch->dollarTemplate[j], dst); } } } @@ -188,7 +205,7 @@ static int SDL_AddDollarGesture(SDL_GestureTouch* inTouch, SDL_FloatPoint* path) int index = -1; int i = 0; if (inTouch == NULL) { - if (SDL_numGestureTouches == 0) return -1; + if (SDL_numGestureTouches == 0) return SDL_SetError("no gesture touch devices registered"); for (i = 0; i < SDL_numGestureTouches; i++) { inTouch = &SDL_gestureTouch[i]; index = SDL_AddDollarGesture_one(inTouch, path); @@ -207,17 +224,33 @@ int SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src) SDL_GestureTouch *touch = NULL; if (src == NULL) return 0; if (touchId >= 0) { - for (i = 0; i < SDL_numGestureTouches; i++) - if (SDL_gestureTouch[i].id == touchId) + for (i = 0; i < SDL_numGestureTouches; i++) { + if (SDL_gestureTouch[i].id == touchId) { touch = &SDL_gestureTouch[i]; - if (touch == NULL) return -1; + } + } + if (touch == NULL) { + return SDL_SetError("given touch id not found"); + } } while (1) { SDL_DollarTemplate templ; - if (SDL_RWread(src,templ.path,sizeof(templ.path[0]),DOLLARNPOINTS) < - DOLLARNPOINTS) break; + if (SDL_RWread(src,templ.path,sizeof(templ.path[0]),DOLLARNPOINTS) < DOLLARNPOINTS) { + if (loaded == 0) { + return SDL_SetError("could not read any dollar gesture from rwops"); + } + break; + } + +#if SDL_BYTEORDER != SDL_LIL_ENDIAN + for (i = 0; i < DOLLARNPOINTS; i++) { + SDL_FloatPoint *p = &templ.path[i]; + p->x = SDL_SwapFloatLE(p->x); + p->y = SDL_SwapFloatLE(p->y); + } +#endif if (touchId >= 0) { /* printf("Adding loaded gesture to 1 touch\n"); */ @@ -454,8 +487,8 @@ static int SDL_SendGestureDollar(SDL_GestureTouch* touch, SDL_Event event; event.dgesture.type = SDL_DOLLARGESTURE; event.dgesture.touchId = touch->id; - event.mgesture.x = touch->centroid.x; - event.mgesture.y = touch->centroid.y; + event.dgesture.x = touch->centroid.x; + event.dgesture.y = touch->centroid.y; event.dgesture.gestureId = gestureId; event.dgesture.error = error; /* A finger came up to trigger this event. */ @@ -477,7 +510,6 @@ static int SDL_SendDollarRecord(SDL_GestureTouch* touch,SDL_GestureID gestureId) void SDL_GestureProcessEvent(SDL_Event* event) { float x,y; - SDL_FloatPoint path[DOLLARNPOINTS]; int index; int i; float pathDx, pathDy; @@ -501,6 +533,8 @@ void SDL_GestureProcessEvent(SDL_Event* event) /* Finger Up */ if (event->type == SDL_FINGERUP) { + SDL_FloatPoint path[DOLLARNPOINTS]; + inTouch->numDownFingers--; #ifdef ENABLE_DOLLAR @@ -615,8 +649,7 @@ void SDL_GestureProcessEvent(SDL_Event* event) break; pressure? */ } - - if (event->type == SDL_FINGERDOWN) { + else if (event->type == SDL_FINGERDOWN) { inTouch->numDownFingers++; inTouch->centroid.x = (inTouch->centroid.x*(inTouch->numDownFingers - 1)+ diff --git a/Engine/lib/sdl/src/events/SDL_gesture_c.h b/Engine/lib/sdl/src/events/SDL_gesture_c.h index 3f1ed9b158..3ff542cbb2 100644 --- a/Engine/lib/sdl/src/events/SDL_gesture_c.h +++ b/Engine/lib/sdl/src/events/SDL_gesture_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_keyboard.c b/Engine/lib/sdl/src/events/SDL_keyboard.c index d5443893b2..15726545c6 100644 --- a/Engine/lib/sdl/src/events/SDL_keyboard.c +++ b/Engine/lib/sdl/src/events/SDL_keyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,6 +25,7 @@ #include "SDL_timer.h" #include "SDL_events.h" #include "SDL_events_c.h" +#include "SDL_assert.h" #include "../video/SDL_sysvideo.h" @@ -619,6 +620,16 @@ SDL_SetKeyboardFocus(SDL_Window * window) /* See if the current window has lost focus */ if (keyboard->focus && keyboard->focus != window) { + + /* new window shouldn't think it has mouse captured. */ + SDL_assert(!window || !(window->flags & SDL_WINDOW_MOUSE_CAPTURE)); + + /* old window must lose an existing mouse capture. */ + if (keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE) { + SDL_CaptureMouse(SDL_FALSE); /* drop the capture. */ + SDL_assert(!(keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE)); + } + SDL_SendWindowEvent(keyboard->focus, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0); @@ -651,6 +662,8 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode) { SDL_Keyboard *keyboard = &SDL_keyboard; int posted; + SDL_Keymod modifier; + SDL_Keycode keycode; Uint16 modstate; Uint32 type; Uint8 repeat; @@ -662,82 +675,6 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode) printf("The '%s' key has been %s\n", SDL_GetScancodeName(scancode), state == SDL_PRESSED ? "pressed" : "released"); #endif - if (state == SDL_PRESSED) { - modstate = keyboard->modstate; - switch (scancode) { - case SDL_SCANCODE_NUMLOCKCLEAR: - keyboard->modstate ^= KMOD_NUM; - break; - case SDL_SCANCODE_CAPSLOCK: - keyboard->modstate ^= KMOD_CAPS; - break; - case SDL_SCANCODE_LCTRL: - keyboard->modstate |= KMOD_LCTRL; - break; - case SDL_SCANCODE_RCTRL: - keyboard->modstate |= KMOD_RCTRL; - break; - case SDL_SCANCODE_LSHIFT: - keyboard->modstate |= KMOD_LSHIFT; - break; - case SDL_SCANCODE_RSHIFT: - keyboard->modstate |= KMOD_RSHIFT; - break; - case SDL_SCANCODE_LALT: - keyboard->modstate |= KMOD_LALT; - break; - case SDL_SCANCODE_RALT: - keyboard->modstate |= KMOD_RALT; - break; - case SDL_SCANCODE_LGUI: - keyboard->modstate |= KMOD_LGUI; - break; - case SDL_SCANCODE_RGUI: - keyboard->modstate |= KMOD_RGUI; - break; - case SDL_SCANCODE_MODE: - keyboard->modstate |= KMOD_MODE; - break; - default: - break; - } - } else { - switch (scancode) { - case SDL_SCANCODE_NUMLOCKCLEAR: - case SDL_SCANCODE_CAPSLOCK: - break; - case SDL_SCANCODE_LCTRL: - keyboard->modstate &= ~KMOD_LCTRL; - break; - case SDL_SCANCODE_RCTRL: - keyboard->modstate &= ~KMOD_RCTRL; - break; - case SDL_SCANCODE_LSHIFT: - keyboard->modstate &= ~KMOD_LSHIFT; - break; - case SDL_SCANCODE_RSHIFT: - keyboard->modstate &= ~KMOD_RSHIFT; - break; - case SDL_SCANCODE_LALT: - keyboard->modstate &= ~KMOD_LALT; - break; - case SDL_SCANCODE_RALT: - keyboard->modstate &= ~KMOD_RALT; - break; - case SDL_SCANCODE_LGUI: - keyboard->modstate &= ~KMOD_LGUI; - break; - case SDL_SCANCODE_RGUI: - keyboard->modstate &= ~KMOD_RGUI; - break; - case SDL_SCANCODE_MODE: - keyboard->modstate &= ~KMOD_MODE; - break; - default: - break; - } - modstate = keyboard->modstate; - } /* Figure out what type of event this is */ switch (state) { @@ -764,6 +701,59 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode) /* Update internal keyboard state */ keyboard->keystate[scancode] = state; + keycode = keyboard->keymap[scancode]; + + /* Update modifiers state if applicable */ + switch (keycode) { + case SDLK_LCTRL: + modifier = KMOD_LCTRL; + break; + case SDLK_RCTRL: + modifier = KMOD_RCTRL; + break; + case SDLK_LSHIFT: + modifier = KMOD_LSHIFT; + break; + case SDLK_RSHIFT: + modifier = KMOD_RSHIFT; + break; + case SDLK_LALT: + modifier = KMOD_LALT; + break; + case SDLK_RALT: + modifier = KMOD_RALT; + break; + case SDLK_LGUI: + modifier = KMOD_LGUI; + break; + case SDLK_RGUI: + modifier = KMOD_RGUI; + break; + case SDLK_MODE: + modifier = KMOD_MODE; + break; + default: + modifier = KMOD_NONE; + break; + } + if (SDL_KEYDOWN == type) { + modstate = keyboard->modstate; + switch (keycode) { + case SDLK_NUMLOCKCLEAR: + keyboard->modstate ^= KMOD_NUM; + break; + case SDLK_CAPSLOCK: + keyboard->modstate ^= KMOD_CAPS; + break; + default: + keyboard->modstate |= modifier; + break; + } + } else { + keyboard->modstate &= ~modifier; + modstate = keyboard->modstate; + } + /* Post the event, if desired */ posted = 0; if (SDL_GetEventState(type) == SDL_ENABLE) { @@ -772,7 +762,7 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode) event.key.state = state; event.key.repeat = repeat; event.key.keysym.scancode = scancode; - event.key.keysym.sym = keyboard->keymap[scancode]; + event.key.keysym.sym = keycode; event.key.keysym.mod = modstate; event.key.windowID = keyboard->focus ? keyboard->focus->id : 0; posted = (SDL_PushEvent(&event) > 0); @@ -855,6 +845,19 @@ SDL_SetModState(SDL_Keymod modstate) keyboard->modstate = modstate; } +/* Note that SDL_ToggleModState() is not a public API. SDL_SetModState() is. */ +void +SDL_ToggleModState(const SDL_Keymod modstate, const SDL_bool toggle) +{ + SDL_Keyboard *keyboard = &SDL_keyboard; + if (toggle) { + keyboard->modstate |= modstate; + } else { + keyboard->modstate &= ~modstate; + } +} + + SDL_Keycode SDL_GetKeyFromScancode(SDL_Scancode scancode) { diff --git a/Engine/lib/sdl/src/events/SDL_keyboard_c.h b/Engine/lib/sdl/src/events/SDL_keyboard_c.h index 05b5253823..b4d1c0739b 100644 --- a/Engine/lib/sdl/src/events/SDL_keyboard_c.h +++ b/Engine/lib/sdl/src/events/SDL_keyboard_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -62,6 +62,9 @@ extern void SDL_KeyboardQuit(void); /* Convert to UTF-8 */ extern char *SDL_UCS4ToUTF8(Uint32 ch, char *dst); +/* Toggle on or off pieces of the keyboard mod state. */ +extern void SDL_ToggleModState(const SDL_Keymod modstate, const SDL_bool toggle); + #endif /* _SDL_keyboard_c_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/events/SDL_mouse.c b/Engine/lib/sdl/src/events/SDL_mouse.c index 236b8c540c..7793de870b 100644 --- a/Engine/lib/sdl/src/events/SDL_mouse.c +++ b/Engine/lib/sdl/src/events/SDL_mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -140,14 +140,14 @@ static SDL_bool SDL_UpdateMouseFocus(SDL_Window * window, int x, int y, Uint32 buttonstate) { SDL_Mouse *mouse = SDL_GetMouse(); - int w, h; - SDL_bool inWindow; + SDL_bool inWindow = SDL_TRUE; - SDL_GetWindowSize(window, &w, &h); - if (x < 0 || y < 0 || x >= w || y >= h) { - inWindow = SDL_FALSE; - } else { - inWindow = SDL_TRUE; + if (window && ((window->flags & SDL_WINDOW_MOUSE_CAPTURE) == 0)) { + int w, h; + SDL_GetWindowSize(window, &w, &h); + if (x < 0 || y < 0 || x >= w || y >= h) { + inWindow = SDL_FALSE; + } } /* Linux doesn't give you mouse events outside your window unless you grab @@ -204,7 +204,6 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ int posted; int xrel; int yrel; - int x_max = 0, y_max = 0; if (mouse->relative_mode_warp) { int center_x = 0, center_y = 0; @@ -246,23 +245,29 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ mouse->y += yrel; } - SDL_GetWindowSize(mouse->focus, &x_max, &y_max); - --x_max; - --y_max; + /* make sure that the pointers find themselves inside the windows, + unless we have the mouse captured. */ + if (window && ((window->flags & SDL_WINDOW_MOUSE_CAPTURE) == 0)) { + int x_max = 0, y_max = 0; - /* make sure that the pointers find themselves inside the windows */ - if (mouse->x > x_max) { - mouse->x = x_max; - } - if (mouse->x < 0) { - mouse->x = 0; - } + // !!! FIXME: shouldn't this be (window) instead of (mouse->focus)? + SDL_GetWindowSize(mouse->focus, &x_max, &y_max); + --x_max; + --y_max; - if (mouse->y > y_max) { - mouse->y = y_max; - } - if (mouse->y < 0) { - mouse->y = 0; + if (mouse->x > x_max) { + mouse->x = x_max; + } + if (mouse->x < 0) { + mouse->x = 0; + } + + if (mouse->y > y_max) { + mouse->y = y_max; + } + if (mouse->y < 0) { + mouse->y = 0; + } } mouse->xdelta += xrel; @@ -288,9 +293,14 @@ SDL_PrivateSendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int relativ event.motion.yrel = yrel; posted = (SDL_PushEvent(&event) > 0); } - /* Use unclamped values if we're getting events outside the window */ - mouse->last_x = x; - mouse->last_y = y; + if (relative) { + mouse->last_x = mouse->x; + mouse->last_y = mouse->y; + } else { + /* Use unclamped values if we're getting events outside the window */ + mouse->last_x = x; + mouse->last_y = y; + } return posted; } @@ -298,10 +308,11 @@ static SDL_MouseClickState *GetMouseClickState(SDL_Mouse *mouse, Uint8 button) { if (button >= mouse->num_clickstates) { int i, count = button + 1; - mouse->clickstate = (SDL_MouseClickState *)SDL_realloc(mouse->clickstate, count * sizeof(*mouse->clickstate)); - if (!mouse->clickstate) { + SDL_MouseClickState *clickstate = (SDL_MouseClickState *)SDL_realloc(mouse->clickstate, count * sizeof(*mouse->clickstate)); + if (!clickstate) { return NULL; } + mouse->clickstate = clickstate; for (i = mouse->num_clickstates; i < count; ++i) { SDL_zero(mouse->clickstate[i]); @@ -392,7 +403,7 @@ SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 } int -SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y) +SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y, SDL_MouseWheelDirection direction) { SDL_Mouse *mouse = SDL_GetMouse(); int posted; @@ -414,6 +425,7 @@ SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y) event.wheel.which = mouseID; event.wheel.x = x; event.wheel.y = y; + event.wheel.direction = (Uint32)direction; posted = (SDL_PushEvent(&event) > 0); } return posted; @@ -425,6 +437,9 @@ SDL_MouseQuit(void) SDL_Cursor *cursor, *next; SDL_Mouse *mouse = SDL_GetMouse(); + if (mouse->CaptureMouse) { + SDL_CaptureMouse(SDL_FALSE); + } SDL_SetRelativeMouseMode(SDL_FALSE); SDL_ShowCursor(1); @@ -476,16 +491,42 @@ SDL_GetRelativeMouseState(int *x, int *y) return mouse->buttonstate; } +Uint32 +SDL_GetGlobalMouseState(int *x, int *y) +{ + SDL_Mouse *mouse = SDL_GetMouse(); + int tmpx, tmpy; + + /* make sure these are never NULL for the backend implementations... */ + if (!x) { + x = &tmpx; + } + if (!y) { + y = &tmpy; + } + + *x = *y = 0; + + if (!mouse->GetGlobalMouseState) { + SDL_assert(0 && "This should really be implemented for every target."); + return 0; + } + + return mouse->GetGlobalMouseState(x, y); +} + void SDL_WarpMouseInWindow(SDL_Window * window, int x, int y) { SDL_Mouse *mouse = SDL_GetMouse(); - if ( window == NULL ) + if (window == NULL) { window = mouse->focus; + } - if ( window == NULL ) + if (window == NULL) { return; + } if (mouse->WarpMouse) { mouse->WarpMouse(window, x, y); @@ -494,6 +535,18 @@ SDL_WarpMouseInWindow(SDL_Window * window, int x, int y) } } +int +SDL_WarpMouseGlobal(int x, int y) +{ + SDL_Mouse *mouse = SDL_GetMouse(); + + if (mouse->WarpMouseGlobal) { + return mouse->WarpMouseGlobal(x, y); + } + + return SDL_Unsupported(); +} + static SDL_bool ShouldUseRelativeModeWarp(SDL_Mouse *mouse) { @@ -539,7 +592,7 @@ SDL_SetRelativeMouseMode(SDL_bool enabled) mouse->relative_mode_warp = SDL_TRUE; } else if (mouse->SetRelativeMouseMode(enabled) < 0) { if (enabled) { - // Fall back to warp mode if native relative mode failed + /* Fall back to warp mode if native relative mode failed */ mouse->relative_mode_warp = SDL_TRUE; } } @@ -571,6 +624,41 @@ SDL_GetRelativeMouseMode() return mouse->relative_mode; } +int +SDL_CaptureMouse(SDL_bool enabled) +{ + SDL_Mouse *mouse = SDL_GetMouse(); + SDL_Window *focusWindow; + SDL_bool isCaptured; + + if (!mouse->CaptureMouse) { + return SDL_Unsupported(); + } + + focusWindow = SDL_GetKeyboardFocus(); + + isCaptured = focusWindow && (focusWindow->flags & SDL_WINDOW_MOUSE_CAPTURE); + if (isCaptured == enabled) { + return 0; /* already done! */ + } + + if (enabled) { + if (!focusWindow) { + return SDL_SetError("No window has focus"); + } else if (mouse->CaptureMouse(focusWindow) == -1) { + return -1; /* CaptureMouse() should call SetError */ + } + focusWindow->flags |= SDL_WINDOW_MOUSE_CAPTURE; + } else { + if (mouse->CaptureMouse(NULL) == -1) { + return -1; /* CaptureMouse() should call SetError */ + } + focusWindow->flags &= ~SDL_WINDOW_MOUSE_CAPTURE; + } + + return 0; +} + SDL_Cursor * SDL_CreateCursor(const Uint8 * data, const Uint8 * mask, int w, int h, int hot_x, int hot_y) diff --git a/Engine/lib/sdl/src/events/SDL_mouse_c.h b/Engine/lib/sdl/src/events/SDL_mouse_c.h index e0d917cbc4..03aca0a5c7 100644 --- a/Engine/lib/sdl/src/events/SDL_mouse_c.h +++ b/Engine/lib/sdl/src/events/SDL_mouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -57,12 +57,21 @@ typedef struct /* Free a window manager cursor */ void (*FreeCursor) (SDL_Cursor * cursor); - /* Warp the mouse to (x,y) */ + /* Warp the mouse to (x,y) within a window */ void (*WarpMouse) (SDL_Window * window, int x, int y); + /* Warp the mouse to (x,y) in screen space */ + int (*WarpMouseGlobal) (int x, int y); + /* Set relative mode */ int (*SetRelativeMouseMode) (SDL_bool enabled); + /* Set mouse capture */ + int (*CaptureMouse) (SDL_Window * window); + + /* Get absolute mouse coordinates. (x) and (y) are never NULL and set to zero before call. */ + Uint32 (*GetGlobalMouseState) (int *x, int *y); + /* Data common to all mice */ SDL_MouseID mouseID; SDL_Window *focus; @@ -111,7 +120,7 @@ extern int SDL_SendMouseMotion(SDL_Window * window, SDL_MouseID mouseID, int rel extern int SDL_SendMouseButton(SDL_Window * window, SDL_MouseID mouseID, Uint8 state, Uint8 button); /* Send a mouse wheel event */ -extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y); +extern int SDL_SendMouseWheel(SDL_Window * window, SDL_MouseID mouseID, int x, int y, SDL_MouseWheelDirection direction); /* Shutdown the mouse subsystem */ extern void SDL_MouseQuit(void); diff --git a/Engine/lib/sdl/src/events/SDL_quit.c b/Engine/lib/sdl/src/events/SDL_quit.c index db7af98fab..5b7105ef8b 100644 --- a/Engine/lib/sdl/src/events/SDL_quit.c +++ b/Engine/lib/sdl/src/events/SDL_quit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,6 +19,8 @@ 3. This notice may not be removed or altered from any source distribution. */ #include "../SDL_internal.h" +#include "SDL_hints.h" +#include "SDL_assert.h" /* General quit handling code for SDL */ @@ -29,6 +31,8 @@ #include "SDL_events.h" #include "SDL_events_c.h" +static SDL_bool disable_signals = SDL_FALSE; +static SDL_bool send_quit_pending = SDL_FALSE; #ifdef HAVE_SIGNAL_H static void @@ -37,14 +41,15 @@ SDL_HandleSIG(int sig) /* Reset the signal handler */ signal(sig, SDL_HandleSIG); - /* Signal a quit interrupt */ - SDL_SendQuit(); + /* Send a quit event next time the event loop pumps. */ + /* We can't send it in signal handler; malloc() might be interrupted! */ + send_quit_pending = SDL_TRUE; } #endif /* HAVE_SIGNAL_H */ /* Public functions */ -int -SDL_QuitInit(void) +static int +SDL_QuitInit_Internal(void) { #ifdef HAVE_SIGACTION struct sigaction action; @@ -80,11 +85,22 @@ SDL_QuitInit(void) #endif /* HAVE_SIGNAL_H */ /* That's it! */ - return (0); + return 0; } -void -SDL_QuitQuit(void) +int +SDL_QuitInit(void) +{ + const char *hint = SDL_GetHint(SDL_HINT_NO_SIGNAL_HANDLERS); + disable_signals = hint && (SDL_atoi(hint) == 1); + if (!disable_signals) { + return SDL_QuitInit_Internal(); + } + return 0; +} + +static void +SDL_QuitQuit_Internal(void) { #ifdef HAVE_SIGACTION struct sigaction action; @@ -110,11 +126,29 @@ SDL_QuitQuit(void) #endif /* HAVE_SIGNAL_H */ } +void +SDL_QuitQuit(void) +{ + if (!disable_signals) { + SDL_QuitQuit_Internal(); + } +} + /* This function returns 1 if it's okay to close the application window */ int SDL_SendQuit(void) { + send_quit_pending = SDL_FALSE; return SDL_SendAppEvent(SDL_QUIT); } +void +SDL_SendPendingQuit(void) +{ + if (send_quit_pending) { + SDL_SendQuit(); + SDL_assert(!send_quit_pending); + } +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/events/SDL_sysevents.h b/Engine/lib/sdl/src/events/SDL_sysevents.h index a5be7bc31f..c4ce087643 100644 --- a/Engine/lib/sdl/src/events/SDL_sysevents.h +++ b/Engine/lib/sdl/src/events/SDL_sysevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_touch.c b/Engine/lib/sdl/src/events/SDL_touch.c index 14a337a9ae..c73827c964 100644 --- a/Engine/lib/sdl/src/events/SDL_touch.c +++ b/Engine/lib/sdl/src/events/SDL_touch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -145,13 +145,16 @@ SDL_AddTouch(SDL_TouchID touchID, const char *name) } SDL_touchDevices = touchDevices; - index = SDL_num_touch++; + index = SDL_num_touch; SDL_touchDevices[index] = (SDL_Touch *) SDL_malloc(sizeof(*SDL_touchDevices[index])); if (!SDL_touchDevices[index]) { return SDL_OutOfMemory(); } + /* Added touch to list */ + ++SDL_num_touch; + /* we're setting the touch properties */ SDL_touchDevices[index]->id = touchID; SDL_touchDevices[index]->num_fingers = 0; diff --git a/Engine/lib/sdl/src/events/SDL_touch_c.h b/Engine/lib/sdl/src/events/SDL_touch_c.h index f9781789ca..d025df6e84 100644 --- a/Engine/lib/sdl/src/events/SDL_touch_c.h +++ b/Engine/lib/sdl/src/events/SDL_touch_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/SDL_windowevents.c b/Engine/lib/sdl/src/events/SDL_windowevents.c index 146cbc5407..785ea4e0cb 100644 --- a/Engine/lib/sdl/src/events/SDL_windowevents.c +++ b/Engine/lib/sdl/src/events/SDL_windowevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -127,6 +127,7 @@ SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1, if (window->flags & SDL_WINDOW_MINIMIZED) { return 0; } + window->flags &= ~SDL_WINDOW_MAXIMIZED; window->flags |= SDL_WINDOW_MINIMIZED; SDL_OnWindowMinimized(window); break; @@ -134,6 +135,7 @@ SDL_SendWindowEvent(SDL_Window * window, Uint8 windowevent, int data1, if (window->flags & SDL_WINDOW_MAXIMIZED) { return 0; } + window->flags &= ~SDL_WINDOW_MINIMIZED; window->flags |= SDL_WINDOW_MAXIMIZED; break; case SDL_WINDOWEVENT_RESTORED: diff --git a/Engine/lib/sdl/src/events/SDL_windowevents_c.h b/Engine/lib/sdl/src/events/SDL_windowevents_c.h index 9ad34a3422..2a6a4c0518 100644 --- a/Engine/lib/sdl/src/events/SDL_windowevents_c.h +++ b/Engine/lib/sdl/src/events/SDL_windowevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/blank_cursor.h b/Engine/lib/sdl/src/events/blank_cursor.h index 423fa13863..5e15852cbf 100644 --- a/Engine/lib/sdl/src/events/blank_cursor.h +++ b/Engine/lib/sdl/src/events/blank_cursor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/default_cursor.h b/Engine/lib/sdl/src/events/default_cursor.h index 6e09380ef8..297dd2dc11 100644 --- a/Engine/lib/sdl/src/events/default_cursor.h +++ b/Engine/lib/sdl/src/events/default_cursor.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -110,5 +110,5 @@ static const unsigned char default_cmask[] = { 0x03, 0x00 }; -#endif /* TRUE_MACINTOSH_CURSOR */ +#endif /* USE_MACOS_CURSOR */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/events/scancodes_darwin.h b/Engine/lib/sdl/src/events/scancodes_darwin.h index 42fcbdfa27..2692253095 100644 --- a/Engine/lib/sdl/src/events/scancodes_darwin.h +++ b/Engine/lib/sdl/src/events/scancodes_darwin.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/scancodes_linux.h b/Engine/lib/sdl/src/events/scancodes_linux.h index dbf7a7a5b7..8db37df5b9 100644 --- a/Engine/lib/sdl/src/events/scancodes_linux.h +++ b/Engine/lib/sdl/src/events/scancodes_linux.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/events/scancodes_windows.h b/Engine/lib/sdl/src/events/scancodes_windows.h index fa894e4813..b23a261ea8 100644 --- a/Engine/lib/sdl/src/events/scancodes_windows.h +++ b/Engine/lib/sdl/src/events/scancodes_windows.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -49,7 +49,7 @@ static const SDL_Scancode windows_scancode_table[] = SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_F13, SDL_SCANCODE_F14, SDL_SCANCODE_F15, SDL_SCANCODE_F16, /* 6 */ SDL_SCANCODE_F17, SDL_SCANCODE_F18, SDL_SCANCODE_F19, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, /* 6 */ - SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, /* 7 */ - SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN /* 7 */ + SDL_SCANCODE_INTERNATIONAL2, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL1, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, /* 7 */ + SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL4, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL5, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_INTERNATIONAL3, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN /* 7 */ }; /* *INDENT-ON* */ diff --git a/Engine/lib/sdl/src/events/scancodes_xfree86.h b/Engine/lib/sdl/src/events/scancodes_xfree86.h index 8b10c3d90f..29d9ef9449 100644 --- a/Engine/lib/sdl/src/events/scancodes_xfree86.h +++ b/Engine/lib/sdl/src/events/scancodes_xfree86.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -141,15 +141,15 @@ static const SDL_Scancode xfree86_scancode_table[] = { /* 112 */ SDL_SCANCODE_F15, /* 113 */ SDL_SCANCODE_F16, /* 114 */ SDL_SCANCODE_F17, - /* 115 */ SDL_SCANCODE_UNKNOWN, + /* 115 */ SDL_SCANCODE_INTERNATIONAL1, /* \_ */ /* 116 */ SDL_SCANCODE_UNKNOWN, /* is translated to XK_ISO_Level3_Shift by my X server, but I have no keyboard that generates this code, so I don't know what the correct SDL_SCANCODE_* for it is */ /* 117 */ SDL_SCANCODE_UNKNOWN, /* 118 */ SDL_SCANCODE_KP_EQUALS, /* 119 */ SDL_SCANCODE_UNKNOWN, /* 120 */ SDL_SCANCODE_UNKNOWN, - /* 121 */ SDL_SCANCODE_UNKNOWN, + /* 121 */ SDL_SCANCODE_INTERNATIONAL4, /* Henkan_Mode */ /* 122 */ SDL_SCANCODE_UNKNOWN, - /* 123 */ SDL_SCANCODE_UNKNOWN, + /* 123 */ SDL_SCANCODE_INTERNATIONAL5, /* Muhenkan */ /* 124 */ SDL_SCANCODE_UNKNOWN, /* 125 */ SDL_SCANCODE_INTERNATIONAL3, /* Yen */ /* 126 */ SDL_SCANCODE_UNKNOWN, @@ -266,12 +266,12 @@ static const SDL_Scancode xfree86_scancode_table2[] = { /* 86 */ SDL_SCANCODE_NONUSBACKSLASH, /* 87 */ SDL_SCANCODE_F11, /* 88 */ SDL_SCANCODE_F12, - /* 89 */ SDL_SCANCODE_UNKNOWN, + /* 89 */ SDL_SCANCODE_INTERNATIONAL1, /* \_ */ /* 90 */ SDL_SCANCODE_UNKNOWN, /* Katakana */ /* 91 */ SDL_SCANCODE_UNKNOWN, /* Hiragana */ - /* 92 */ SDL_SCANCODE_UNKNOWN, /* Henkan_Mode */ - /* 93 */ SDL_SCANCODE_UNKNOWN, /* Hiragana_Katakana */ - /* 94 */ SDL_SCANCODE_UNKNOWN, /* Muhenkan */ + /* 92 */ SDL_SCANCODE_INTERNATIONAL4, /* Henkan_Mode */ + /* 93 */ SDL_SCANCODE_INTERNATIONAL2, /* Hiragana_Katakana */ + /* 94 */ SDL_SCANCODE_INTERNATIONAL5, /* Muhenkan */ /* 95 */ SDL_SCANCODE_UNKNOWN, /* 96 */ SDL_SCANCODE_KP_ENTER, /* 97 */ SDL_SCANCODE_RCTRL, @@ -301,7 +301,7 @@ static const SDL_Scancode xfree86_scancode_table2[] = { /* 121 */ SDL_SCANCODE_UNKNOWN, /* KP_Decimal */ /* 122 */ SDL_SCANCODE_UNKNOWN, /* Hangul */ /* 123 */ SDL_SCANCODE_UNKNOWN, /* Hangul_Hanja */ - /* 124 */ SDL_SCANCODE_UNKNOWN, + /* 124 */ SDL_SCANCODE_INTERNATIONAL3, /* Yen */ /* 125 */ SDL_SCANCODE_LGUI, /* 126 */ SDL_SCANCODE_RGUI, /* 127 */ SDL_SCANCODE_APPLICATION, diff --git a/Engine/lib/sdl/src/file/SDL_rwops.c b/Engine/lib/sdl/src/file/SDL_rwops.c index afa35d062f..38beb62850 100644 --- a/Engine/lib/sdl/src/file/SDL_rwops.c +++ b/Engine/lib/sdl/src/file/SDL_rwops.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -38,11 +38,15 @@ #include "cocoa/SDL_rwopsbundlesupport.h" #endif /* __APPLE__ */ -#ifdef ANDROID +#ifdef __ANDROID__ #include "../core/android/SDL_android.h" #include "SDL_system.h" #endif +#if __NACL__ +#include "nacl_io/nacl_io.h" +#endif + #ifdef __WIN32__ /* Functions to read/write Win32 API file pointers */ @@ -466,7 +470,7 @@ SDL_RWFromFile(const char *file, const char *mode) SDL_SetError("SDL_RWFromFile(): No file or no mode specified"); return NULL; } -#if defined(ANDROID) +#if defined(__ANDROID__) #ifdef HAVE_STDIO_H /* Try to open the file on the filesystem first */ if (*file == '/') { diff --git a/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.h b/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.h index 9a8a9662cd..2c63f1dab3 100644 --- a/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.h +++ b/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.m b/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.m index 682bd74a9b..3385d3aa5e 100644 --- a/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.m +++ b/Engine/lib/sdl/src/file/cocoa/SDL_rwopsbundlesupport.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,38 +33,30 @@ Also, note the bundle layouts are different for iPhone and Mac. */ FILE* SDL_OpenFPFromBundleOrFallback(const char *file, const char *mode) +{ @autoreleasepool { FILE* fp = NULL; /* If the file mode is writable, skip all the bundle stuff because generally the bundle is read-only. */ - if(strcmp("r", mode) && strcmp("rb", mode)) - { + if(strcmp("r", mode) && strcmp("rb", mode)) { return fopen(file, mode); } - NSAutoreleasePool* autorelease_pool = [[NSAutoreleasePool alloc] init]; - - NSFileManager* file_manager = [NSFileManager defaultManager]; NSString* resource_path = [[NSBundle mainBundle] resourcePath]; NSString* ns_string_file_component = [file_manager stringWithFileSystemRepresentation:file length:strlen(file)]; NSString* full_path_with_file_to_try = [resource_path stringByAppendingPathComponent:ns_string_file_component]; - if([file_manager fileExistsAtPath:full_path_with_file_to_try]) - { + if([file_manager fileExistsAtPath:full_path_with_file_to_try]) { fp = fopen([full_path_with_file_to_try fileSystemRepresentation], mode); - } - else - { + } else { fp = fopen(file, mode); } - [autorelease_pool drain]; - return fp; -} +}} -#endif /* __MACOSX__ */ +#endif /* __APPLE__ */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/filesystem/android/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/android/SDL_sysfilesystem.c new file mode 100644 index 0000000000..3bdf9966d7 --- /dev/null +++ b/Engine/lib/sdl/src/filesystem/android/SDL_sysfilesystem.c @@ -0,0 +1,62 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifdef SDL_FILESYSTEM_ANDROID + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* System dependent filesystem routines */ + +#include +#include + +#include "SDL_error.h" +#include "SDL_filesystem.h" +#include "SDL_system.h" + + +char * +SDL_GetBasePath(void) +{ + /* The current working directory is / on Android */ + return NULL; +} + +char * +SDL_GetPrefPath(const char *org, const char *app) +{ + const char *path = SDL_AndroidGetInternalStoragePath(); + if (path) { + size_t pathlen = SDL_strlen(path)+2; + char *fullpath = (char *)SDL_malloc(pathlen); + if (!fullpath) { + SDL_OutOfMemory(); + return NULL; + } + SDL_snprintf(fullpath, pathlen, "%s/", path); + return fullpath; + } + return NULL; +} + +#endif /* SDL_FILESYSTEM_ANDROID */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/filesystem/cocoa/SDL_sysfilesystem.m b/Engine/lib/sdl/src/filesystem/cocoa/SDL_sysfilesystem.m index adcebd68b7..6dee580524 100644 --- a/Engine/lib/sdl/src/filesystem/cocoa/SDL_sysfilesystem.m +++ b/Engine/lib/sdl/src/filesystem/cocoa/SDL_sysfilesystem.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,12 +35,13 @@ char * SDL_GetBasePath(void) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSBundle *bundle = [NSBundle mainBundle]; const char* baseType = [[[bundle infoDictionary] objectForKey:@"SDL_FILESYSTEM_BASE_DIR_TYPE"] UTF8String]; const char *base = NULL; char *retval = NULL; + if (baseType == NULL) { baseType = "resource"; } @@ -52,6 +53,7 @@ /* this returns the exedir for non-bundled and the resourceDir for bundled apps */ base = [[bundle resourcePath] fileSystemRepresentation]; } + if (base) { const size_t len = SDL_strlen(base) + 2; retval = (char *) SDL_malloc(len); @@ -62,17 +64,17 @@ } } - [pool release]; return retval; -} +}} char * SDL_GetPrefPath(const char *org, const char *app) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSArray *array = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); char *retval = NULL; + NSArray *array = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); + if ([array count] > 0) { /* we only want the first item in the list. */ NSString *str = [array objectAtIndex:0]; const char *base = [str fileSystemRepresentation]; @@ -96,9 +98,8 @@ } } - [pool release]; return retval; -} +}} #endif /* SDL_FILESYSTEM_COCOA */ diff --git a/Engine/lib/sdl/src/filesystem/dummy/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/dummy/SDL_sysfilesystem.c index 7e860939a9..45273f24ac 100644 --- a/Engine/lib/sdl/src/filesystem/dummy/SDL_sysfilesystem.c +++ b/Engine/lib/sdl/src/filesystem/dummy/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/filesystem/emscripten/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/emscripten/SDL_sysfilesystem.c new file mode 100644 index 0000000000..ca49df1b98 --- /dev/null +++ b/Engine/lib/sdl/src/filesystem/emscripten/SDL_sysfilesystem.c @@ -0,0 +1,69 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifdef SDL_FILESYSTEM_EMSCRIPTEN + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ +/* System dependent filesystem routines */ +#include +#include + +#include "SDL_error.h" +#include "SDL_filesystem.h" + +#include + +char * +SDL_GetBasePath(void) +{ + char *retval = "/"; + return SDL_strdup(retval); +} + +char * +SDL_GetPrefPath(const char *org, const char *app) +{ + const char *append = "/libsdl/"; + char *retval; + size_t len = 0; + + len = SDL_strlen(append) + SDL_strlen(org) + SDL_strlen(app) + 3; + retval = (char *) SDL_malloc(len); + if (!retval) { + SDL_OutOfMemory(); + return NULL; + } + + SDL_snprintf(retval, len, "%s%s/%s/", append, org, app); + + if (mkdir(retval, 0700) != 0 && errno != EEXIST) { + SDL_SetError("Couldn't create directory '%s': '%s'", retval, strerror(errno)); + SDL_free(retval); + return NULL; + } + + return retval; +} + +#endif /* SDL_FILESYSTEM_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/filesystem/haiku/SDL_sysfilesystem.cc b/Engine/lib/sdl/src/filesystem/haiku/SDL_sysfilesystem.cc index b83d4d0a1a..03489168e8 100644 --- a/Engine/lib/sdl/src/filesystem/haiku/SDL_sysfilesystem.cc +++ b/Engine/lib/sdl/src/filesystem/haiku/SDL_sysfilesystem.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/filesystem/nacl/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/nacl/SDL_sysfilesystem.c new file mode 100644 index 0000000000..ac8fef1e32 --- /dev/null +++ b/Engine/lib/sdl/src/filesystem/nacl/SDL_sysfilesystem.c @@ -0,0 +1,42 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" +#include "SDL_error.h" +#include "SDL_filesystem.h" + +#ifdef SDL_FILESYSTEM_NACL + +char * +SDL_GetBasePath(void) +{ + SDL_Unsupported(); + return NULL; +} + +char * +SDL_GetPrefPath(const char *org, const char *app) +{ + SDL_Unsupported(); + return NULL; +} + +#endif /* SDL_FILESYSTEM_NACL */ + diff --git a/Engine/lib/sdl/src/filesystem/unix/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/unix/SDL_sysfilesystem.c index 0349476eb8..fa034a4565 100644 --- a/Engine/lib/sdl/src/filesystem/unix/SDL_sysfilesystem.c +++ b/Engine/lib/sdl/src/filesystem/unix/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -197,7 +197,7 @@ SDL_GetPrefPath(const char *org, const char *app) } if (mkdir(retval, 0700) != 0 && errno != EEXIST) { error: - SDL_SetError("Couldn't create directory '%s': ", retval, strerror(errno)); + SDL_SetError("Couldn't create directory '%s': '%s'", retval, strerror(errno)); SDL_free(retval); return NULL; } diff --git a/Engine/lib/sdl/src/filesystem/windows/SDL_sysfilesystem.c b/Engine/lib/sdl/src/filesystem/windows/SDL_sysfilesystem.c index 2791fb39ae..fd942d75fa 100644 --- a/Engine/lib/sdl/src/filesystem/windows/SDL_sysfilesystem.c +++ b/Engine/lib/sdl/src/filesystem/windows/SDL_sysfilesystem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -36,13 +36,51 @@ char * SDL_GetBasePath(void) { - TCHAR path[MAX_PATH]; - const DWORD len = GetModuleFileName(NULL, path, SDL_arraysize(path)); - size_t i; + typedef DWORD (WINAPI *GetModuleFileNameExW_t)(HANDLE, HMODULE, LPWSTR, DWORD); + GetModuleFileNameExW_t pGetModuleFileNameExW; + DWORD buflen = 128; + WCHAR *path = NULL; + HANDLE psapi = LoadLibrary(L"psapi.dll"); + char *retval = NULL; + DWORD len = 0; + int i; + + if (!psapi) { + WIN_SetError("Couldn't load psapi.dll"); + return NULL; + } + + pGetModuleFileNameExW = (GetModuleFileNameExW_t)GetProcAddress(psapi, "GetModuleFileNameExW"); + if (!pGetModuleFileNameExW) { + WIN_SetError("Couldn't find GetModuleFileNameExW"); + FreeLibrary(psapi); + return NULL; + } + + while (SDL_TRUE) { + void *ptr = SDL_realloc(path, buflen * sizeof (WCHAR)); + if (!ptr) { + SDL_free(path); + FreeLibrary(psapi); + SDL_OutOfMemory(); + return NULL; + } - SDL_assert(len < SDL_arraysize(path)); + path = (WCHAR *) ptr; + + len = pGetModuleFileNameExW(GetCurrentProcess(), NULL, path, buflen); + if (len != buflen) { + break; + } + + /* buffer too small? Try again. */ + buflen *= 2; + } + + FreeLibrary(psapi); if (len == 0) { + SDL_free(path); WIN_SetError("Couldn't locate our .exe"); return NULL; } @@ -55,7 +93,11 @@ SDL_GetBasePath(void) SDL_assert(i > 0); /* Should have been an absolute path. */ path[i+1] = '\0'; /* chop off filename. */ - return WIN_StringToUTF8(path); + + retval = WIN_StringToUTF8(path); + SDL_free(path); + + return retval; } char * diff --git a/Engine/lib/sdl/src/filesystem/winrt/SDL_sysfilesystem.cpp b/Engine/lib/sdl/src/filesystem/winrt/SDL_sysfilesystem.cpp index 48c21e10b5..b4caf90377 100644 --- a/Engine/lib/sdl/src/filesystem/winrt/SDL_sysfilesystem.cpp +++ b/Engine/lib/sdl/src/filesystem/winrt/SDL_sysfilesystem.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,8 +20,7 @@ */ #include "../../SDL_internal.h" -/* TODO, WinRT: include copyright info in SDL_winrtpaths.cpp - TODO, WinRT: remove the need to compile this with C++/CX (/ZW) extensions, and if possible, without C++ at all +/* TODO, WinRT: remove the need to compile this with C++/CX (/ZW) extensions, and if possible, without C++ at all */ #ifdef __WINRT__ @@ -29,6 +28,7 @@ extern "C" { #include "SDL_filesystem.h" #include "SDL_error.h" +#include "SDL_hints.h" #include "SDL_stdinc.h" #include "SDL_system.h" #include "../../core/windows/SDL_windows.h" @@ -62,7 +62,7 @@ SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType) return path.c_str(); } -#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP +#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION > NTDDI_WIN8) case SDL_WINRT_PATH_ROAMING_FOLDER: { static wstring path; @@ -144,31 +144,78 @@ SDL_GetPrefPath(const char *org, const char *app) * without violating Microsoft's app-store requirements. */ -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP - /* A 'Roaming' folder is not available in Windows Phone 8, however a 'Local' folder is. */ - const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_LOCAL_FOLDER); -#else - /* A 'Roaming' folder is available on Windows 8 and 8.1. Use that. */ - const char * srcPath = SDL_WinRTGetFSPathUTF8(SDL_WINRT_PATH_ROAMING_FOLDER); -#endif + const WCHAR * srcPath = NULL; + WCHAR path[MAX_PATH]; + char *retval = NULL; + WCHAR* worg = NULL; + WCHAR* wapp = NULL; + size_t new_wpath_len = 0; + BOOL api_result = FALSE; + + srcPath = SDL_WinRTGetFSPathUNICODE(SDL_WINRT_PATH_LOCAL_FOLDER); + if ( ! srcPath) { + SDL_SetError("Unable to find a source path"); + return NULL; + } - size_t destPathLen; - char * destPath = NULL; + if (SDL_wcslen(srcPath) >= MAX_PATH) { + SDL_SetError("Path too long."); + return NULL; + } + SDL_wcslcpy(path, srcPath, SDL_arraysize(path)); - if (!srcPath) { - SDL_SetError("Couldn't locate our basepath: %s", SDL_GetError()); + worg = WIN_UTF8ToString(org); + if (worg == NULL) { + SDL_OutOfMemory(); return NULL; } - destPathLen = SDL_strlen(srcPath) + SDL_strlen(org) + SDL_strlen(app) + 4; - destPath = (char *) SDL_malloc(destPathLen); - if (!destPath) { + wapp = WIN_UTF8ToString(app); + if (wapp == NULL) { + SDL_free(worg); SDL_OutOfMemory(); return NULL; } - SDL_snprintf(destPath, destPathLen, "%s\\%s\\%s\\", srcPath, org, app); - return destPath; + new_wpath_len = SDL_wcslen(worg) + SDL_wcslen(wapp) + SDL_wcslen(path) + 3; + + if ((new_wpath_len + 1) > MAX_PATH) { + SDL_free(worg); + SDL_free(wapp); + SDL_SetError("Path too long."); + return NULL; + } + + SDL_wcslcat(path, L"\\", new_wpath_len + 1); + SDL_wcslcat(path, worg, new_wpath_len + 1); + SDL_free(worg); + + api_result = CreateDirectoryW(path, NULL); + if (api_result == FALSE) { + if (GetLastError() != ERROR_ALREADY_EXISTS) { + SDL_free(wapp); + WIN_SetError("Couldn't create a prefpath."); + return NULL; + } + } + + SDL_wcslcat(path, L"\\", new_wpath_len + 1); + SDL_wcslcat(path, wapp, new_wpath_len + 1); + SDL_free(wapp); + + api_result = CreateDirectoryW(path, NULL); + if (api_result == FALSE) { + if (GetLastError() != ERROR_ALREADY_EXISTS) { + WIN_SetError("Couldn't create a prefpath."); + return NULL; + } + } + + SDL_wcslcat(path, L"\\", new_wpath_len + 1); + + retval = WIN_StringToUTF8(path); + + return retval; } #endif /* __WINRT__ */ diff --git a/Engine/lib/sdl/src/haptic/SDL_haptic.c b/Engine/lib/sdl/src/haptic/SDL_haptic.c index fbfe14f3bb..ddce908d6b 100644 --- a/Engine/lib/sdl/src/haptic/SDL_haptic.c +++ b/Engine/lib/sdl/src/haptic/SDL_haptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -343,7 +343,7 @@ SDL_HapticClose(SDL_Haptic * haptic) } /* Check if it's still in use */ - if (--haptic->ref_count < 0) { + if (--haptic->ref_count > 0) { return; } @@ -845,3 +845,4 @@ SDL_HapticRumbleStop(SDL_Haptic * haptic) return SDL_HapticStopEffect(haptic, haptic->rumble_id); } +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/SDL_haptic_c.h b/Engine/lib/sdl/src/haptic/SDL_haptic_c.h index b318fff11b..5b9372b5c6 100644 --- a/Engine/lib/sdl/src/haptic/SDL_haptic_c.h +++ b/Engine/lib/sdl/src/haptic/SDL_haptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/haptic/SDL_syshaptic.h b/Engine/lib/sdl/src/haptic/SDL_syshaptic.h index b2918beb94..372cefacfe 100644 --- a/Engine/lib/sdl/src/haptic/SDL_syshaptic.h +++ b/Engine/lib/sdl/src/haptic/SDL_syshaptic.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,13 +21,10 @@ #include "../SDL_internal.h" -#include "SDL_haptic.h" - +#ifndef _SDL_syshaptic_h +#define _SDL_syshaptic_h -/* - * Number of haptic devices on the system. - */ -extern Uint8 SDL_numhaptics; +#include "SDL_haptic.h" struct haptic_effect @@ -206,5 +203,6 @@ extern int SDL_SYS_HapticUnpause(SDL_Haptic * haptic); */ extern int SDL_SYS_HapticStopAll(SDL_Haptic * haptic); -/* vi: set ts=4 sw=4 expandtab: */ +#endif /* _SDL_syshaptic_h */ +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic.c b/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic.c index 14beb6c860..d662012c38 100644 --- a/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic.c +++ b/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,6 +23,7 @@ #ifdef SDL_HAPTIC_IOKIT #include "SDL_assert.h" +#include "SDL_stdinc.h" #include "SDL_haptic.h" #include "../SDL_syshaptic.h" #include "SDL_joystick.h" @@ -91,14 +92,14 @@ static int numhaptics = -1; * Like strerror but for force feedback errors. */ static const char * -FFStrError(HRESULT err) +FFStrError(unsigned int err) { switch (err) { case FFERR_DEVICEFULL: return "device full"; - /* This should be valid, but for some reason isn't defined... */ - /* case FFERR_DEVICENOTREG: - return "device not registered"; */ + /* This should be valid, but for some reason isn't defined... */ + /* case FFERR_DEVICENOTREG: + return "device not registered"; */ case FFERR_DEVICEPAUSED: return "device paused"; case FFERR_DEVICERELEASED: @@ -257,21 +258,18 @@ MacHaptic_MaybeAddDevice( io_object_t device ) kCFAllocatorDefault, kNilOptions); if ((result == KERN_SUCCESS) && hidProperties) { - refCF = - CFDictionaryGetValue(hidProperties, - CFSTR(kIOHIDPrimaryUsagePageKey)); + refCF = CFDictionaryGetValue(hidProperties, + CFSTR(kIOHIDPrimaryUsagePageKey)); if (refCF) { - if (!CFNumberGetValue(refCF, kCFNumberLongType, - &item->usagePage)) - SDL_SetError - ("Haptic: Recieving device's usage page."); - refCF = - CFDictionaryGetValue(hidProperties, - CFSTR(kIOHIDPrimaryUsageKey)); + if (!CFNumberGetValue(refCF, kCFNumberLongType, &item->usagePage)) { + SDL_SetError("Haptic: Receiving device's usage page."); + } + refCF = CFDictionaryGetValue(hidProperties, + CFSTR(kIOHIDPrimaryUsageKey)); if (refCF) { - if (!CFNumberGetValue(refCF, kCFNumberLongType, - &item->usage)) - SDL_SetError("Haptic: Recieving device's usage."); + if (!CFNumberGetValue(refCF, kCFNumberLongType, &item->usage)) { + SDL_SetError("Haptic: Receiving device's usage."); + } } } CFRelease(hidProperties); @@ -377,24 +375,21 @@ HIDGetDeviceProduct(io_service_t dev, char *name) /* Get product name */ - refCF = - CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDProductKey)); - if (!refCF) - refCF = - CFDictionaryGetValue(usbProperties, - CFSTR("USB Product Name")); + refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDProductKey)); + if (!refCF) { + refCF = CFDictionaryGetValue(usbProperties, + CFSTR("USB Product Name")); + } if (refCF) { if (!CFStringGetCString(refCF, name, 256, CFStringGetSystemEncoding())) { - return SDL_SetError - ("Haptic: CFStringGetCString error retrieving pDevice->product."); + return SDL_SetError("Haptic: CFStringGetCString error retrieving pDevice->product."); } } CFRelease(usbProperties); } else { - return SDL_SetError - ("Haptic: IORegistryEntryCreateCFProperties failed to create usbProperties."); + return SDL_SetError("Haptic: IORegistryEntryCreateCFProperties failed to create usbProperties."); } /* Release stuff. */ @@ -457,9 +452,9 @@ GetSupportedFeatures(SDL_Haptic * haptic) /* Check if supports gain. */ ret = FFDeviceGetForceFeedbackProperty(device, FFPROP_FFGAIN, &val, sizeof(val)); - if (ret == FF_OK) + if (ret == FF_OK) { supported |= SDL_HAPTIC_GAIN; - else if (ret != FFERR_UNSUPPORTED) { + } else if (ret != FFERR_UNSUPPORTED) { return SDL_SetError("Haptic: Unable to get if device supports gain: %s.", FFStrError(ret)); } @@ -467,9 +462,9 @@ GetSupportedFeatures(SDL_Haptic * haptic) /* Checks if supports autocenter. */ ret = FFDeviceGetForceFeedbackProperty(device, FFPROP_AUTOCENTER, &val, sizeof(val)); - if (ret == FF_OK) + if (ret == FF_OK) { supported |= SDL_HAPTIC_AUTOCENTER; - else if (ret != FFERR_UNSUPPORTED) { + } else if (ret != FFERR_UNSUPPORTED) { return SDL_SetError ("Haptic: Unable to get if device supports autocenter: %s.", FFStrError(ret)); @@ -485,7 +480,7 @@ GetSupportedFeatures(SDL_Haptic * haptic) supported |= SDL_HAPTIC_STATUS | SDL_HAPTIC_PAUSE; haptic->supported = supported; - return 0;; + return 0; } @@ -556,7 +551,7 @@ SDL_SYS_HapticOpenFromService(SDL_Haptic * haptic, io_service_t service) FFReleaseDevice(haptic->hwdata->device); creat_err: if (haptic->hwdata != NULL) { - free(haptic->hwdata); + SDL_free(haptic->hwdata); haptic->hwdata = NULL; } return -1; @@ -604,8 +599,9 @@ SDL_SYS_HapticMouse(void) int SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick) { - if (joystick->hwdata->ffservice != 0) + if (joystick->hwdata->ffservice != 0) { return SDL_TRUE; + } return SDL_FALSE; } @@ -617,8 +613,9 @@ int SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) { if (IOObjectIsEqualTo((io_object_t) ((size_t)haptic->hwdata->device), - joystick->hwdata->ffservice)) + joystick->hwdata->ffservice)) { return 1; + } return 0; } @@ -686,7 +683,10 @@ SDL_SYS_HapticQuit(void) IOObjectRelease(item->dev); SDL_free(item); } + numhaptics = -1; + SDL_hapticlist = NULL; + SDL_hapticlist_tail = NULL; } @@ -739,18 +739,22 @@ SDL_SYS_SetDirection(FFEFFECT * effect, SDL_HapticDirection * dir, int naxes) case SDL_HAPTIC_CARTESIAN: effect->dwFlags |= FFEFF_CARTESIAN; rglDir[0] = dir->dir[0]; - if (naxes > 1) + if (naxes > 1) { rglDir[1] = dir->dir[1]; - if (naxes > 2) + } + if (naxes > 2) { rglDir[2] = dir->dir[2]; + } return 0; case SDL_HAPTIC_SPHERICAL: effect->dwFlags |= FFEFF_SPHERICAL; rglDir[0] = dir->dir[0]; - if (naxes > 1) + if (naxes > 1) { rglDir[1] = dir->dir[1]; - if (naxes > 2) + } + if (naxes > 2) { rglDir[2] = dir->dir[2]; + } return 0; default: @@ -767,22 +771,21 @@ SDL_SYS_SetDirection(FFEFFECT * effect, SDL_HapticDirection * dir, int naxes) * Creates the FFEFFECT from a SDL_HapticEffect. */ static int -SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, - SDL_HapticEffect * src) +SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_HapticEffect * src) { int i; - FFCONSTANTFORCE *constant; - FFPERIODIC *periodic; - FFCONDITION *condition; /* Actually an array of conditions - one per axis. */ - FFRAMPFORCE *ramp; - FFCUSTOMFORCE *custom; - FFENVELOPE *envelope; - SDL_HapticConstant *hap_constant; - SDL_HapticPeriodic *hap_periodic; - SDL_HapticCondition *hap_condition; - SDL_HapticRamp *hap_ramp; - SDL_HapticCustom *hap_custom; - DWORD *axes; + FFCONSTANTFORCE *constant = NULL; + FFPERIODIC *periodic = NULL; + FFCONDITION *condition = NULL; /* Actually an array of conditions - one per axis. */ + FFRAMPFORCE *ramp = NULL; + FFCUSTOMFORCE *custom = NULL; + FFENVELOPE *envelope = NULL; + SDL_HapticConstant *hap_constant = NULL; + SDL_HapticPeriodic *hap_periodic = NULL; + SDL_HapticCondition *hap_condition = NULL; + SDL_HapticRamp *hap_ramp = NULL; + SDL_HapticCustom *hap_custom = NULL; + DWORD *axes = NULL; /* Set global stuff. */ SDL_memset(dest, 0, sizeof(FFEFFECT)); @@ -873,9 +876,10 @@ SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, SDL_memset(periodic, 0, sizeof(FFPERIODIC)); /* Specifics */ - periodic->dwMagnitude = CONVERT(hap_periodic->magnitude); + periodic->dwMagnitude = CONVERT(SDL_abs(hap_periodic->magnitude)); periodic->lOffset = CONVERT(hap_periodic->offset); - periodic->dwPhase = hap_periodic->phase; + periodic->dwPhase = + (hap_periodic->phase + (hap_periodic->magnitude < 0 ? 18000 : 0)) % 36000; periodic->dwPeriod = hap_periodic->period * 1000; dest->cbTypeSpecificParams = sizeof(FFPERIODIC); dest->lpvTypeSpecificParams = periodic; @@ -911,25 +915,28 @@ SDL_SYS_ToFFEFFECT(SDL_Haptic * haptic, FFEFFECT * dest, case SDL_HAPTIC_INERTIA: case SDL_HAPTIC_FRICTION: hap_condition = &src->condition; - condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes); - if (condition == NULL) { - return SDL_OutOfMemory(); + if (dest->cAxes > 0) { + condition = SDL_malloc(sizeof(FFCONDITION) * dest->cAxes); + if (condition == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(condition, 0, sizeof(FFCONDITION)); + + /* Specifics */ + for (i = 0; i < dest->cAxes; i++) { + condition[i].lOffset = CONVERT(hap_condition->center[i]); + condition[i].lPositiveCoefficient = + CONVERT(hap_condition->right_coeff[i]); + condition[i].lNegativeCoefficient = + CONVERT(hap_condition->left_coeff[i]); + condition[i].dwPositiveSaturation = + CCONVERT(hap_condition->right_sat[i] / 2); + condition[i].dwNegativeSaturation = + CCONVERT(hap_condition->left_sat[i] / 2); + condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2); + } } - SDL_memset(condition, 0, sizeof(FFCONDITION)); - /* Specifics */ - for (i = 0; i < dest->cAxes; i++) { - condition[i].lOffset = CONVERT(hap_condition->center[i]); - condition[i].lPositiveCoefficient = - CONVERT(hap_condition->right_coeff[i]); - condition[i].lNegativeCoefficient = - CONVERT(hap_condition->left_coeff[i]); - condition[i].dwPositiveSaturation = - CCONVERT(hap_condition->right_sat[i]); - condition[i].dwNegativeSaturation = - CCONVERT(hap_condition->left_sat[i]); - condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i]); - } dest->cbTypeSpecificParams = sizeof(FFCONDITION) * dest->cAxes; dest->lpvTypeSpecificParams = condition; @@ -1269,8 +1276,7 @@ SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) { HRESULT ret; - ret = - FFDeviceReleaseEffect(haptic->hwdata->device, effect->hweffect->ref); + ret = FFDeviceReleaseEffect(haptic->hwdata->device, effect->hweffect->ref); if (ret != FF_OK) { SDL_SetError("Haptic: Error removing the effect from the device: %s.", FFStrError(ret)); @@ -1299,8 +1305,9 @@ SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, return -1; } - if (status == 0) + if (status == 0) { return SDL_FALSE; + } return SDL_TRUE; /* Assume it's playing or emulated. */ } @@ -1315,9 +1322,8 @@ SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain) Uint32 val; val = gain * 100; /* Mac OS X uses 0 to 10,000 */ - ret = - FFDeviceSetForceFeedbackProperty(haptic->hwdata->device, - FFPROP_FFGAIN, &val); + ret = FFDeviceSetForceFeedbackProperty(haptic->hwdata->device, + FFPROP_FFGAIN, &val); if (ret != FF_OK) { return SDL_SetError("Haptic: Error setting gain: %s.", FFStrError(ret)); } @@ -1336,10 +1342,11 @@ SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) Uint32 val; /* Mac OS X only has 0 (off) and 1 (on) */ - if (autocenter == 0) + if (autocenter == 0) { val = 0; - else + } else { val = 1; + } ret = FFDeviceSetForceFeedbackProperty(haptic->hwdata->device, FFPROP_AUTOCENTER, &val); @@ -1405,5 +1412,6 @@ SDL_SYS_HapticStopAll(SDL_Haptic * haptic) return 0; } - #endif /* SDL_HAPTIC_IOKIT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic_c.h b/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic_c.h index f807207173..2b72aab3db 100644 --- a/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic_c.h +++ b/Engine/lib/sdl/src/haptic/darwin/SDL_syshaptic_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/haptic/dummy/SDL_syshaptic.c b/Engine/lib/sdl/src/haptic/dummy/SDL_syshaptic.c index 09839c6de4..727e7ecacc 100644 --- a/Engine/lib/sdl/src/haptic/dummy/SDL_syshaptic.c +++ b/Engine/lib/sdl/src/haptic/dummy/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -182,3 +182,5 @@ SDL_SYS_HapticStopAll(SDL_Haptic * haptic) } #endif /* SDL_HAPTIC_DUMMY || SDL_HAPTIC_DISABLED */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/linux/SDL_syshaptic.c b/Engine/lib/sdl/src/haptic/linux/SDL_syshaptic.c index 281a9316b1..e8d7855354 100644 --- a/Engine/lib/sdl/src/haptic/linux/SDL_syshaptic.c +++ b/Engine/lib/sdl/src/haptic/linux/SDL_syshaptic.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -59,6 +59,7 @@ typedef struct SDL_hapticlist_item { char *fname; /* Dev path name (like /dev/input/event1) */ SDL_Haptic *haptic; /* Associated haptic. */ + dev_t dev_num; struct SDL_hapticlist_item *next; } SDL_hapticlist_item; @@ -236,15 +237,11 @@ void haptic_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, const static int MaybeAddDevice(const char *path) { - dev_t dev_nums[MAX_HAPTICS]; struct stat sb; int fd; - int k; - int duplicate; int success; SDL_hapticlist_item *item; - if (path == NULL) { return -1; } @@ -255,15 +252,11 @@ MaybeAddDevice(const char *path) } /* check for duplicates */ - duplicate = 0; - for (k = 0; (k < numhaptics) && !duplicate; ++k) { - if (sb.st_rdev == dev_nums[k]) { - duplicate = 1; + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (item->dev_num == sb.st_rdev) { + return -1; /* duplicate. */ } } - if (duplicate) { - return -1; - } /* try to open */ fd = open(path, O_RDWR, 0); @@ -288,12 +281,13 @@ MaybeAddDevice(const char *path) } item->fname = SDL_strdup(path); - if ( (item->fname == NULL) ) { - SDL_free(item->fname); + if (item->fname == NULL) { SDL_free(item); return -1; } + item->dev_num = sb.st_rdev; + /* TODO: should we add instance IDs? */ if (SDL_hapticlist_tail == NULL) { SDL_hapticlist = SDL_hapticlist_tail = item; @@ -302,8 +296,6 @@ MaybeAddDevice(const char *path) SDL_hapticlist_tail = item; } - dev_nums[numhaptics] = sb.st_rdev; - ++numhaptics; /* !!! TODO: Send a haptic add event? */ @@ -391,8 +383,8 @@ SDL_SYS_HapticName(int index) /* No name found, return device character device */ name = item->fname; } + close(fd); } - close(fd); return name; } @@ -441,7 +433,7 @@ SDL_SYS_HapticOpenFromFD(SDL_Haptic * haptic, int fd) open_err: close(fd); if (haptic->hwdata != NULL) { - free(haptic->hwdata); + SDL_free(haptic->hwdata); haptic->hwdata = NULL; } return -1; @@ -473,7 +465,7 @@ SDL_SYS_HapticOpen(SDL_Haptic * haptic) } /* Set the fname. */ - haptic->hwdata->fname = item->fname; + haptic->hwdata->fname = SDL_strdup( item->fname ); return 0; } @@ -547,15 +539,15 @@ SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) int ret; SDL_hapticlist_item *item; - /* Find the joystick in the haptic list. */ for (item = SDL_hapticlist; item; item = item->next) { if (SDL_strcmp(item->fname, joystick->hwdata->fname) == 0) { - haptic->index = device_index; break; } ++device_index; } + haptic->index = device_index; + if (device_index >= MAX_HAPTICS) { return SDL_SetError("Haptic: Joystick doesn't have Haptic capabilities"); } @@ -570,7 +562,8 @@ SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) return -1; } - haptic->hwdata->fname = item->fname; + haptic->hwdata->fname = SDL_strdup( joystick->hwdata->fname ); + return 0; } @@ -592,6 +585,7 @@ SDL_SYS_HapticClose(SDL_Haptic * haptic) close(haptic->hwdata->fd); /* Free */ + SDL_free(haptic->hwdata->fname); SDL_free(haptic->hwdata); haptic->hwdata = NULL; } @@ -624,6 +618,8 @@ SDL_SYS_HapticQuit(void) #endif /* SDL_USE_LIBUDEV */ numhaptics = 0; + SDL_hapticlist = NULL; + SDL_hapticlist_tail = NULL; } @@ -650,15 +646,14 @@ SDL_SYS_ToButton(Uint16 button) /* - * Returns the ff_effect usable direction from a SDL_HapticDirection. + * Initializes the ff_effect usable direction from a SDL_HapticDirection. */ -static Uint16 -SDL_SYS_ToDirection(SDL_HapticDirection * dir) +static int +SDL_SYS_ToDirection(Uint16 *dest, SDL_HapticDirection * src) { Uint32 tmp; - float f; /* Ideally we'd use fixed point math instead of floats... */ - switch (dir->type) { + switch (src->type) { case SDL_HAPTIC_POLAR: /* Linux directions start from south. (and range from 0 to 0xFFFF) @@ -668,25 +663,34 @@ SDL_SYS_ToDirection(SDL_HapticDirection * dir) 90 deg -> 0x4000 (left) 180 deg -> 0x8000 (up) 270 deg -> 0xC000 (right) + The force pulls into the direction specified by Linux directions, + i.e. the opposite convention of SDL directions. */ - tmp = (((18000 + dir->dir[0]) % 36000) * 0xFFFF) / 36000; /* convert to range [0,0xFFFF] */ - return (Uint16) tmp; + tmp = ((src->dir[0] % 36000) * 0x8000) / 18000; /* convert to range [0,0xFFFF] */ + *dest = (Uint16) tmp; + break; - case SDL_HAPTIC_SPHERICAL: + case SDL_HAPTIC_SPHERICAL: /* We convert to polar, because that's the only supported direction on Linux. The first value of a spherical direction is practically the same as a Polar direction, except that we have to add 90 degrees. It is the angle from EAST {1,0} towards SOUTH {0,1}. --> add 9000 - --> finally add 18000 and convert to [0,0xFFFF] as in case SDL_HAPTIC_POLAR. + --> finally convert to [0,0xFFFF] as in case SDL_HAPTIC_POLAR. */ - tmp = ((dir->dir[0]) + 9000) % 36000; /* Convert to polars */ - tmp = (((18000 + tmp) % 36000) * 0xFFFF) / 36000; /* convert to range [0,0xFFFF] */ - return (Uint16) tmp; + tmp = ((src->dir[0]) + 9000) % 36000; /* Convert to polars */ + tmp = (tmp * 0x8000) / 18000; /* convert to range [0,0xFFFF] */ + *dest = (Uint16) tmp; + break; case SDL_HAPTIC_CARTESIAN: - f = atan2(dir->dir[1], dir->dir[0]); + if (!src->dir[1]) + *dest = (src->dir[0] >= 0 ? 0x4000 : 0xC000); + else if (!src->dir[0]) + *dest = (src->dir[1] >= 0 ? 0x8000 : 0); + else { + float f = atan2(src->dir[1], src->dir[0]); /* Ideally we'd use fixed point math instead of floats... */ /* atan2 takes the parameters: Y-axis-value and X-axis-value (in that order) - Y-axis-value is the second coordinate (from center to SOUTH) @@ -695,14 +699,16 @@ SDL_SYS_ToDirection(SDL_HapticDirection * dir) have the first spherical value. Therefore we proceed as in case SDL_HAPTIC_SPHERICAL and add another 9000 to get the polar value. --> add 45000 in total - --> finally add 18000 and convert to [0,0xFFFF] as in case SDL_HAPTIC_POLAR. + --> finally convert to [0,0xFFFF] as in case SDL_HAPTIC_POLAR. */ - tmp = (((int) (f * 18000. / M_PI)) + 45000) % 36000; - tmp = (((18000 + tmp) % 36000) * 0xFFFF) / 36000; /* convert to range [0,0xFFFF] */ - return (Uint16) tmp; + tmp = (((Sint32) (f * 18000. / M_PI)) + 45000) % 36000; + tmp = (tmp * 0x8000) / 18000; /* convert to range [0,0xFFFF] */ + *dest = (Uint16) tmp; + } + break; default: - return (Uint16) SDL_SetError("Haptic: Unsupported direction type."); + return SDL_SetError("Haptic: Unsupported direction type."); } return 0; @@ -717,7 +723,6 @@ SDL_SYS_ToDirection(SDL_HapticDirection * dir) static int SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) { - Uint32 tmp; SDL_HapticConstant *constant; SDL_HapticPeriodic *periodic; SDL_HapticCondition *condition; @@ -733,8 +738,7 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) /* Header */ dest->type = FF_CONSTANT; - dest->direction = SDL_SYS_ToDirection(&constant->direction); - if (dest->direction == (Uint16) - 1) + if (SDL_SYS_ToDirection(&dest->direction, &constant->direction) == -1) return -1; /* Replay */ @@ -769,8 +773,7 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) /* Header */ dest->type = FF_PERIODIC; - dest->direction = SDL_SYS_ToDirection(&periodic->direction); - if (dest->direction == (Uint16) - 1) + if (SDL_SYS_ToDirection(&dest->direction, &periodic->direction) == -1) return -1; /* Replay */ @@ -797,9 +800,8 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) dest->u.periodic.period = CLAMP(periodic->period); dest->u.periodic.magnitude = periodic->magnitude; dest->u.periodic.offset = periodic->offset; - /* Phase is calculated based of offset from period and then clamped. */ - tmp = ((periodic->phase % 36000) * dest->u.periodic.period) / 36000; - dest->u.periodic.phase = CLAMP(tmp); + /* Linux phase is defined in interval "[0x0000, 0x10000[", corresponds with "[0deg, 360deg[" phase shift. */ + dest->u.periodic.phase = ((Uint32)periodic->phase * 0x10000U) / 36000; /* Envelope */ dest->u.periodic.envelope.attack_length = @@ -839,20 +841,18 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) /* Condition */ /* X axis */ - dest->u.condition[0].right_saturation = - CLAMP(condition->right_sat[0]); - dest->u.condition[0].left_saturation = CLAMP(condition->left_sat[0]); + dest->u.condition[0].right_saturation = condition->right_sat[0]; + dest->u.condition[0].left_saturation = condition->left_sat[0]; dest->u.condition[0].right_coeff = condition->right_coeff[0]; dest->u.condition[0].left_coeff = condition->left_coeff[0]; - dest->u.condition[0].deadband = CLAMP(condition->deadband[0]); + dest->u.condition[0].deadband = condition->deadband[0]; dest->u.condition[0].center = condition->center[0]; /* Y axis */ - dest->u.condition[1].right_saturation = - CLAMP(condition->right_sat[1]); - dest->u.condition[1].left_saturation = CLAMP(condition->left_sat[1]); + dest->u.condition[1].right_saturation = condition->right_sat[1]; + dest->u.condition[1].left_saturation = condition->left_sat[1]; dest->u.condition[1].right_coeff = condition->right_coeff[1]; dest->u.condition[1].left_coeff = condition->left_coeff[1]; - dest->u.condition[1].deadband = CLAMP(condition->deadband[1]); + dest->u.condition[1].deadband = condition->deadband[1]; dest->u.condition[1].center = condition->center[1]; /* @@ -866,8 +866,7 @@ SDL_SYS_ToFFEffect(struct ff_effect *dest, SDL_HapticEffect * src) /* Header */ dest->type = FF_RAMP; - dest->direction = SDL_SYS_ToDirection(&ramp->direction); - if (dest->direction == (Uint16) - 1) + if (SDL_SYS_ToDirection(&dest->direction, &ramp->direction) == -1) return -1; /* Replay */ @@ -954,7 +953,7 @@ SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, return 0; new_effect_err: - free(effect->hweffect); + SDL_free(effect->hweffect); effect->hweffect = NULL; return -1; } @@ -1158,5 +1157,6 @@ SDL_SYS_HapticStopAll(SDL_Haptic * haptic) return 0; } - #endif /* SDL_HAPTIC_LINUX */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic.c b/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic.c new file mode 100644 index 0000000000..c51470dd5a --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic.c @@ -0,0 +1,1300 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_error.h" +#include "SDL_haptic.h" +#include "../SDL_syshaptic.h" + +#if SDL_HAPTIC_DINPUT + +#include "SDL_stdinc.h" +#include "SDL_timer.h" +#include "SDL_windowshaptic_c.h" +#include "SDL_dinputhaptic_c.h" +#include "../../joystick/windows/SDL_windowsjoystick_c.h" + +/* + * External stuff. + */ +extern HWND SDL_HelperWindow; + + +/* + * Internal stuff. + */ +static SDL_bool coinitialized = SDL_FALSE; +static LPDIRECTINPUT8 dinput = NULL; + + +/* + * Like SDL_SetError but for DX error codes. + */ +static int +DI_SetError(const char *str, HRESULT err) +{ + /* + SDL_SetError("Haptic: %s - %s: %s", str, + DXGetErrorString8A(err), DXGetErrorDescription8A(err)); + */ + return SDL_SetError("Haptic error %s", str); +} + +/* + * Checks to see if two GUID are the same. + */ +static int +DI_GUIDIsSame(const GUID * a, const GUID * b) +{ + return (SDL_memcmp(a, b, sizeof (GUID)) == 0); +} + +/* + * Callback to find the haptic devices. + */ +static BOOL CALLBACK +EnumHapticsCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) +{ + (void) pContext; + SDL_DINPUT_MaybeAddDevice(pdidInstance); + return DIENUM_CONTINUE; /* continue enumerating */ +} + +int +SDL_DINPUT_HapticInit(void) +{ + HRESULT ret; + HINSTANCE instance; + + if (dinput != NULL) { /* Already open. */ + return SDL_SetError("Haptic: SubSystem already open."); + } + + ret = WIN_CoInitialize(); + if (FAILED(ret)) { + return DI_SetError("Coinitialize", ret); + } + + coinitialized = SDL_TRUE; + + ret = CoCreateInstance(&CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectInput8, (LPVOID)& dinput); + if (FAILED(ret)) { + SDL_SYS_HapticQuit(); + return DI_SetError("CoCreateInstance", ret); + } + + /* Because we used CoCreateInstance, we need to Initialize it, first. */ + instance = GetModuleHandle(NULL); + if (instance == NULL) { + SDL_SYS_HapticQuit(); + return SDL_SetError("GetModuleHandle() failed with error code %lu.", + GetLastError()); + } + ret = IDirectInput8_Initialize(dinput, instance, DIRECTINPUT_VERSION); + if (FAILED(ret)) { + SDL_SYS_HapticQuit(); + return DI_SetError("Initializing DirectInput device", ret); + } + + /* Look for haptic devices. */ + ret = IDirectInput8_EnumDevices(dinput, + 0, + EnumHapticsCallback, + NULL, + DIEDFL_FORCEFEEDBACK | + DIEDFL_ATTACHEDONLY); + if (FAILED(ret)) { + SDL_SYS_HapticQuit(); + return DI_SetError("Enumerating DirectInput devices", ret); + } + return 0; +} + +int +SDL_DINPUT_MaybeAddDevice(const DIDEVICEINSTANCE * pdidInstance) +{ + HRESULT ret; + LPDIRECTINPUTDEVICE8 device; + const DWORD needflags = DIDC_ATTACHED | DIDC_FORCEFEEDBACK; + DIDEVCAPS capabilities; + SDL_hapticlist_item *item = NULL; + + if (dinput == NULL) { + return -1; /* not initialized. We'll pick these up on enumeration if we init later. */ + } + + /* Make sure we don't already have it */ + for (item = SDL_hapticlist; item; item = item->next) { + if ((!item->bXInputHaptic) && (SDL_memcmp(&item->instance, pdidInstance, sizeof(*pdidInstance)) == 0)) { + return -1; /* Already added */ + } + } + + /* Open the device */ + ret = IDirectInput8_CreateDevice(dinput, &pdidInstance->guidInstance, &device, NULL); + if (FAILED(ret)) { + /* DI_SetError("Creating DirectInput device",ret); */ + return -1; + } + + /* Get capabilities. */ + SDL_zero(capabilities); + capabilities.dwSize = sizeof(DIDEVCAPS); + ret = IDirectInputDevice8_GetCapabilities(device, &capabilities); + IDirectInputDevice8_Release(device); + if (FAILED(ret)) { + /* DI_SetError("Getting device capabilities",ret); */ + return -1; + } + + if ((capabilities.dwFlags & needflags) != needflags) { + return -1; /* not a device we can use. */ + } + + item = (SDL_hapticlist_item *)SDL_calloc(1, sizeof(SDL_hapticlist_item)); + if (item == NULL) { + return SDL_OutOfMemory(); + } + + item->name = WIN_StringToUTF8(pdidInstance->tszProductName); + if (!item->name) { + SDL_free(item); + return -1; + } + + /* Copy the instance over, useful for creating devices. */ + SDL_memcpy(&item->instance, pdidInstance, sizeof(DIDEVICEINSTANCE)); + SDL_memcpy(&item->capabilities, &capabilities, sizeof(capabilities)); + + return SDL_SYS_AddHapticDevice(item); +} + +int +SDL_DINPUT_MaybeRemoveDevice(const DIDEVICEINSTANCE * pdidInstance) +{ + SDL_hapticlist_item *item; + SDL_hapticlist_item *prev = NULL; + + if (dinput == NULL) { + return -1; /* not initialized, ignore this. */ + } + + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (!item->bXInputHaptic && SDL_memcmp(&item->instance, pdidInstance, sizeof(*pdidInstance)) == 0) { + /* found it, remove it. */ + return SDL_SYS_RemoveHapticDevice(prev, item); + } + prev = item; + } + return -1; +} + +/* + * Callback to get supported axes. + */ +static BOOL CALLBACK +DI_DeviceObjectCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) +{ + SDL_Haptic *haptic = (SDL_Haptic *) pvRef; + + if ((dev->dwType & DIDFT_AXIS) && (dev->dwFlags & DIDOI_FFACTUATOR)) { + const GUID *guid = &dev->guidType; + DWORD offset = 0; + if (DI_GUIDIsSame(guid, &GUID_XAxis)) { + offset = DIJOFS_X; + } else if (DI_GUIDIsSame(guid, &GUID_YAxis)) { + offset = DIJOFS_Y; + } else if (DI_GUIDIsSame(guid, &GUID_ZAxis)) { + offset = DIJOFS_Z; + } else if (DI_GUIDIsSame(guid, &GUID_RxAxis)) { + offset = DIJOFS_RX; + } else if (DI_GUIDIsSame(guid, &GUID_RyAxis)) { + offset = DIJOFS_RY; + } else if (DI_GUIDIsSame(guid, &GUID_RzAxis)) { + offset = DIJOFS_RZ; + } else { + return DIENUM_CONTINUE; /* can't use this, go on. */ + } + + haptic->hwdata->axes[haptic->naxes] = offset; + haptic->naxes++; + + /* Currently using the artificial limit of 3 axes. */ + if (haptic->naxes >= 3) { + return DIENUM_STOP; + } + } + + return DIENUM_CONTINUE; +} + +/* + * Callback to get all supported effects. + */ +#define EFFECT_TEST(e,s) \ +if (DI_GUIDIsSame(&pei->guid, &(e))) \ + haptic->supported |= (s) +static BOOL CALLBACK +DI_EffectCallback(LPCDIEFFECTINFO pei, LPVOID pv) +{ + /* Prepare the haptic device. */ + SDL_Haptic *haptic = (SDL_Haptic *) pv; + + /* Get supported. */ + EFFECT_TEST(GUID_Spring, SDL_HAPTIC_SPRING); + EFFECT_TEST(GUID_Damper, SDL_HAPTIC_DAMPER); + EFFECT_TEST(GUID_Inertia, SDL_HAPTIC_INERTIA); + EFFECT_TEST(GUID_Friction, SDL_HAPTIC_FRICTION); + EFFECT_TEST(GUID_ConstantForce, SDL_HAPTIC_CONSTANT); + EFFECT_TEST(GUID_CustomForce, SDL_HAPTIC_CUSTOM); + EFFECT_TEST(GUID_Sine, SDL_HAPTIC_SINE); + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* EFFECT_TEST(GUID_Square, SDL_HAPTIC_SQUARE); */ + EFFECT_TEST(GUID_Triangle, SDL_HAPTIC_TRIANGLE); + EFFECT_TEST(GUID_SawtoothUp, SDL_HAPTIC_SAWTOOTHUP); + EFFECT_TEST(GUID_SawtoothDown, SDL_HAPTIC_SAWTOOTHDOWN); + EFFECT_TEST(GUID_RampForce, SDL_HAPTIC_RAMP); + + /* Check for more. */ + return DIENUM_CONTINUE; +} + +/* + * Opens the haptic device. + * + * Steps: + * - Set cooperative level. + * - Set data format. + * - Acquire exclusiveness. + * - Reset actuators. + * - Get supported features. + */ +static int +SDL_DINPUT_HapticOpenFromDevice(SDL_Haptic * haptic, LPDIRECTINPUTDEVICE8 device8, SDL_bool is_joystick) +{ + HRESULT ret; + DIPROPDWORD dipdw; + + /* Allocate the hwdata */ + haptic->hwdata = (struct haptic_hwdata *)SDL_malloc(sizeof(*haptic->hwdata)); + if (haptic->hwdata == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); + + /* We'll use the device8 from now on. */ + haptic->hwdata->device = device8; + haptic->hwdata->is_joystick = is_joystick; + + /* !!! FIXME: opening a haptic device here first will make an attempt to + !!! FIXME: SDL_JoystickOpen() that same device fail later, since we + !!! FIXME: have it open in exclusive mode. But this will allow + !!! FIXME: SDL_JoystickOpen() followed by SDL_HapticOpenFromJoystick() + !!! FIXME: to work, and that's probably the common case. Still, + !!! FIXME: ideally, We need to unify the opening code. */ + + if (!is_joystick) { /* if is_joystick, we already set this up elsewhere. */ + /* Grab it exclusively to use force feedback stuff. */ + ret = IDirectInputDevice8_SetCooperativeLevel(haptic->hwdata->device, + SDL_HelperWindow, + DISCL_EXCLUSIVE | + DISCL_BACKGROUND); + if (FAILED(ret)) { + DI_SetError("Setting cooperative level to exclusive", ret); + goto acquire_err; + } + + /* Set data format. */ + ret = IDirectInputDevice8_SetDataFormat(haptic->hwdata->device, + &c_dfDIJoystick2); + if (FAILED(ret)) { + DI_SetError("Setting data format", ret); + goto acquire_err; + } + + /* Get number of axes. */ + ret = IDirectInputDevice8_EnumObjects(haptic->hwdata->device, + DI_DeviceObjectCallback, + haptic, DIDFT_AXIS); + if (FAILED(ret)) { + DI_SetError("Getting device axes", ret); + goto acquire_err; + } + + /* Acquire the device. */ + ret = IDirectInputDevice8_Acquire(haptic->hwdata->device); + if (FAILED(ret)) { + DI_SetError("Acquiring DirectInput device", ret); + goto acquire_err; + } + } + + /* Reset all actuators - just in case. */ + ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, + DISFFC_RESET); + if (FAILED(ret)) { + DI_SetError("Resetting device", ret); + goto acquire_err; + } + + /* Enabling actuators. */ + ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, + DISFFC_SETACTUATORSON); + if (FAILED(ret)) { + DI_SetError("Enabling actuators", ret); + goto acquire_err; + } + + /* Get supported effects. */ + ret = IDirectInputDevice8_EnumEffects(haptic->hwdata->device, + DI_EffectCallback, haptic, + DIEFT_ALL); + if (FAILED(ret)) { + DI_SetError("Enumerating supported effects", ret); + goto acquire_err; + } + if (haptic->supported == 0) { /* Error since device supports nothing. */ + SDL_SetError("Haptic: Internal error on finding supported effects."); + goto acquire_err; + } + + /* Check autogain and autocenter. */ + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = 10000; + ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, + DIPROP_FFGAIN, &dipdw.diph); + if (!FAILED(ret)) { /* Gain is supported. */ + haptic->supported |= SDL_HAPTIC_GAIN; + } + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = DIPROPAUTOCENTER_OFF; + ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, + DIPROP_AUTOCENTER, &dipdw.diph); + if (!FAILED(ret)) { /* Autocenter is supported. */ + haptic->supported |= SDL_HAPTIC_AUTOCENTER; + } + + /* Status is always supported. */ + haptic->supported |= SDL_HAPTIC_STATUS | SDL_HAPTIC_PAUSE; + + /* Check maximum effects. */ + haptic->neffects = 128; /* This is not actually supported as thus under windows, + there is no way to tell the number of EFFECTS that a + device can hold, so we'll just use a "random" number + instead and put warnings in SDL_haptic.h */ + haptic->nplaying = 128; /* Even more impossible to get this then neffects. */ + + /* Prepare effects memory. */ + haptic->effects = (struct haptic_effect *) + SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects); + if (haptic->effects == NULL) { + SDL_OutOfMemory(); + goto acquire_err; + } + /* Clear the memory */ + SDL_memset(haptic->effects, 0, + sizeof(struct haptic_effect) * haptic->neffects); + + return 0; + + /* Error handling */ + acquire_err: + IDirectInputDevice8_Unacquire(haptic->hwdata->device); + return -1; +} + +int +SDL_DINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item) +{ + HRESULT ret; + LPDIRECTINPUTDEVICE8 device; + LPDIRECTINPUTDEVICE8 device8; + + /* Open the device */ + ret = IDirectInput8_CreateDevice(dinput, &item->instance.guidInstance, + &device, NULL); + if (FAILED(ret)) { + DI_SetError("Creating DirectInput device", ret); + return -1; + } + + /* Now get the IDirectInputDevice8 interface, instead. */ + ret = IDirectInputDevice8_QueryInterface(device, + &IID_IDirectInputDevice8, + (LPVOID *)&device8); + /* Done with the temporary one now. */ + IDirectInputDevice8_Release(device); + if (FAILED(ret)) { + DI_SetError("Querying DirectInput interface", ret); + return -1; + } + + if (SDL_DINPUT_HapticOpenFromDevice(haptic, device8, SDL_FALSE) < 0) { + IDirectInputDevice8_Release(device8); + return -1; + } + return 0; +} + +int +SDL_DINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + HRESULT ret; + DIDEVICEINSTANCE hap_instance, joy_instance; + + hap_instance.dwSize = sizeof(DIDEVICEINSTANCE); + joy_instance.dwSize = sizeof(DIDEVICEINSTANCE); + + /* Get the device instances. */ + ret = IDirectInputDevice8_GetDeviceInfo(haptic->hwdata->device, + &hap_instance); + if (FAILED(ret)) { + return 0; + } + ret = IDirectInputDevice8_GetDeviceInfo(joystick->hwdata->InputDevice, + &joy_instance); + if (FAILED(ret)) { + return 0; + } + + return DI_GUIDIsSame(&hap_instance.guidInstance, &joy_instance.guidInstance); +} + +int +SDL_DINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + SDL_hapticlist_item *item; + int index = 0; + HRESULT ret; + DIDEVICEINSTANCE joy_instance; + + joy_instance.dwSize = sizeof(DIDEVICEINSTANCE); + ret = IDirectInputDevice8_GetDeviceInfo(joystick->hwdata->InputDevice, &joy_instance); + if (FAILED(ret)) { + return -1; + } + + /* Since it comes from a joystick we have to try to match it with a haptic device on our haptic list. */ + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (!item->bXInputHaptic && DI_GUIDIsSame(&item->instance.guidInstance, &joy_instance.guidInstance)) { + haptic->index = index; + return SDL_DINPUT_HapticOpenFromDevice(haptic, joystick->hwdata->InputDevice, SDL_TRUE); + } + ++index; + } + + SDL_SetError("Couldn't find joystick in haptic device list"); + return -1; +} + +void +SDL_DINPUT_HapticClose(SDL_Haptic * haptic) +{ + IDirectInputDevice8_Unacquire(haptic->hwdata->device); + + /* Only release if isn't grabbed by a joystick. */ + if (haptic->hwdata->is_joystick == 0) { + IDirectInputDevice8_Release(haptic->hwdata->device); + } +} + +void +SDL_DINPUT_HapticQuit(void) +{ + if (dinput != NULL) { + IDirectInput8_Release(dinput); + dinput = NULL; + } + + if (coinitialized) { + WIN_CoUninitialize(); + coinitialized = SDL_FALSE; + } +} + +/* + * Converts an SDL trigger button to an DIEFFECT trigger button. + */ +static DWORD +DIGetTriggerButton(Uint16 button) +{ + DWORD dwTriggerButton; + + dwTriggerButton = DIEB_NOTRIGGER; + + if (button != 0) { + dwTriggerButton = DIJOFS_BUTTON(button - 1); + } + + return dwTriggerButton; +} + + +/* + * Sets the direction. + */ +static int +SDL_SYS_SetDirection(DIEFFECT * effect, SDL_HapticDirection * dir, int naxes) +{ + LONG *rglDir; + + /* Handle no axes a part. */ + if (naxes == 0) { + effect->dwFlags |= DIEFF_SPHERICAL; /* Set as default. */ + effect->rglDirection = NULL; + return 0; + } + + /* Has axes. */ + rglDir = SDL_malloc(sizeof(LONG) * naxes); + if (rglDir == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(rglDir, 0, sizeof(LONG) * naxes); + effect->rglDirection = rglDir; + + switch (dir->type) { + case SDL_HAPTIC_POLAR: + effect->dwFlags |= DIEFF_POLAR; + rglDir[0] = dir->dir[0]; + return 0; + case SDL_HAPTIC_CARTESIAN: + effect->dwFlags |= DIEFF_CARTESIAN; + rglDir[0] = dir->dir[0]; + if (naxes > 1) + rglDir[1] = dir->dir[1]; + if (naxes > 2) + rglDir[2] = dir->dir[2]; + return 0; + case SDL_HAPTIC_SPHERICAL: + effect->dwFlags |= DIEFF_SPHERICAL; + rglDir[0] = dir->dir[0]; + if (naxes > 1) + rglDir[1] = dir->dir[1]; + if (naxes > 2) + rglDir[2] = dir->dir[2]; + return 0; + + default: + return SDL_SetError("Haptic: Unknown direction type."); + } +} + +/* Clamps and converts. */ +#define CCONVERT(x) (((x) > 0x7FFF) ? 10000 : ((x)*10000) / 0x7FFF) +/* Just converts. */ +#define CONVERT(x) (((x)*10000) / 0x7FFF) +/* + * Creates the DIEFFECT from a SDL_HapticEffect. + */ +static int +SDL_SYS_ToDIEFFECT(SDL_Haptic * haptic, DIEFFECT * dest, + SDL_HapticEffect * src) +{ + int i; + DICONSTANTFORCE *constant; + DIPERIODIC *periodic; + DICONDITION *condition; /* Actually an array of conditions - one per axis. */ + DIRAMPFORCE *ramp; + DICUSTOMFORCE *custom; + DIENVELOPE *envelope; + SDL_HapticConstant *hap_constant; + SDL_HapticPeriodic *hap_periodic; + SDL_HapticCondition *hap_condition; + SDL_HapticRamp *hap_ramp; + SDL_HapticCustom *hap_custom; + DWORD *axes; + + /* Set global stuff. */ + SDL_memset(dest, 0, sizeof(DIEFFECT)); + dest->dwSize = sizeof(DIEFFECT); /* Set the structure size. */ + dest->dwSamplePeriod = 0; /* Not used by us. */ + dest->dwGain = 10000; /* Gain is set globally, not locally. */ + dest->dwFlags = DIEFF_OBJECTOFFSETS; /* Seems obligatory. */ + + /* Envelope. */ + envelope = SDL_malloc(sizeof(DIENVELOPE)); + if (envelope == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(envelope, 0, sizeof(DIENVELOPE)); + dest->lpEnvelope = envelope; + envelope->dwSize = sizeof(DIENVELOPE); /* Always should be this. */ + + /* Axes. */ + dest->cAxes = haptic->naxes; + if (dest->cAxes > 0) { + axes = SDL_malloc(sizeof(DWORD) * dest->cAxes); + if (axes == NULL) { + return SDL_OutOfMemory(); + } + axes[0] = haptic->hwdata->axes[0]; /* Always at least one axis. */ + if (dest->cAxes > 1) { + axes[1] = haptic->hwdata->axes[1]; + } + if (dest->cAxes > 2) { + axes[2] = haptic->hwdata->axes[2]; + } + dest->rgdwAxes = axes; + } + + /* The big type handling switch, even bigger than Linux's version. */ + switch (src->type) { + case SDL_HAPTIC_CONSTANT: + hap_constant = &src->constant; + constant = SDL_malloc(sizeof(DICONSTANTFORCE)); + if (constant == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(constant, 0, sizeof(DICONSTANTFORCE)); + + /* Specifics */ + constant->lMagnitude = CONVERT(hap_constant->level); + dest->cbTypeSpecificParams = sizeof(DICONSTANTFORCE); + dest->lpvTypeSpecificParams = constant; + + /* Generics */ + dest->dwDuration = hap_constant->length * 1000; /* In microseconds. */ + dest->dwTriggerButton = DIGetTriggerButton(hap_constant->button); + dest->dwTriggerRepeatInterval = hap_constant->interval; + dest->dwStartDelay = hap_constant->delay * 1000; /* In microseconds. */ + + /* Direction. */ + if (SDL_SYS_SetDirection(dest, &hap_constant->direction, dest->cAxes) < 0) { + return -1; + } + + /* Envelope */ + if ((hap_constant->attack_length == 0) + && (hap_constant->fade_length == 0)) { + SDL_free(dest->lpEnvelope); + dest->lpEnvelope = NULL; + } else { + envelope->dwAttackLevel = CCONVERT(hap_constant->attack_level); + envelope->dwAttackTime = hap_constant->attack_length * 1000; + envelope->dwFadeLevel = CCONVERT(hap_constant->fade_level); + envelope->dwFadeTime = hap_constant->fade_length * 1000; + } + + break; + + case SDL_HAPTIC_SINE: + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* case SDL_HAPTIC_SQUARE: */ + case SDL_HAPTIC_TRIANGLE: + case SDL_HAPTIC_SAWTOOTHUP: + case SDL_HAPTIC_SAWTOOTHDOWN: + hap_periodic = &src->periodic; + periodic = SDL_malloc(sizeof(DIPERIODIC)); + if (periodic == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(periodic, 0, sizeof(DIPERIODIC)); + + /* Specifics */ + periodic->dwMagnitude = CONVERT(SDL_abs(hap_periodic->magnitude)); + periodic->lOffset = CONVERT(hap_periodic->offset); + periodic->dwPhase = + (hap_periodic->phase + (hap_periodic->magnitude < 0 ? 18000 : 0)) % 36000; + periodic->dwPeriod = hap_periodic->period * 1000; + dest->cbTypeSpecificParams = sizeof(DIPERIODIC); + dest->lpvTypeSpecificParams = periodic; + + /* Generics */ + dest->dwDuration = hap_periodic->length * 1000; /* In microseconds. */ + dest->dwTriggerButton = DIGetTriggerButton(hap_periodic->button); + dest->dwTriggerRepeatInterval = hap_periodic->interval; + dest->dwStartDelay = hap_periodic->delay * 1000; /* In microseconds. */ + + /* Direction. */ + if (SDL_SYS_SetDirection(dest, &hap_periodic->direction, dest->cAxes) + < 0) { + return -1; + } + + /* Envelope */ + if ((hap_periodic->attack_length == 0) + && (hap_periodic->fade_length == 0)) { + SDL_free(dest->lpEnvelope); + dest->lpEnvelope = NULL; + } else { + envelope->dwAttackLevel = CCONVERT(hap_periodic->attack_level); + envelope->dwAttackTime = hap_periodic->attack_length * 1000; + envelope->dwFadeLevel = CCONVERT(hap_periodic->fade_level); + envelope->dwFadeTime = hap_periodic->fade_length * 1000; + } + + break; + + case SDL_HAPTIC_SPRING: + case SDL_HAPTIC_DAMPER: + case SDL_HAPTIC_INERTIA: + case SDL_HAPTIC_FRICTION: + hap_condition = &src->condition; + condition = SDL_malloc(sizeof(DICONDITION) * dest->cAxes); + if (condition == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(condition, 0, sizeof(DICONDITION)); + + /* Specifics */ + for (i = 0; i < (int) dest->cAxes; i++) { + condition[i].lOffset = CONVERT(hap_condition->center[i]); + condition[i].lPositiveCoefficient = + CONVERT(hap_condition->right_coeff[i]); + condition[i].lNegativeCoefficient = + CONVERT(hap_condition->left_coeff[i]); + condition[i].dwPositiveSaturation = + CCONVERT(hap_condition->right_sat[i] / 2); + condition[i].dwNegativeSaturation = + CCONVERT(hap_condition->left_sat[i] / 2); + condition[i].lDeadBand = CCONVERT(hap_condition->deadband[i] / 2); + } + dest->cbTypeSpecificParams = sizeof(DICONDITION) * dest->cAxes; + dest->lpvTypeSpecificParams = condition; + + /* Generics */ + dest->dwDuration = hap_condition->length * 1000; /* In microseconds. */ + dest->dwTriggerButton = DIGetTriggerButton(hap_condition->button); + dest->dwTriggerRepeatInterval = hap_condition->interval; + dest->dwStartDelay = hap_condition->delay * 1000; /* In microseconds. */ + + /* Direction. */ + if (SDL_SYS_SetDirection(dest, &hap_condition->direction, dest->cAxes) + < 0) { + return -1; + } + + /* Envelope - Not actually supported by most CONDITION implementations. */ + SDL_free(dest->lpEnvelope); + dest->lpEnvelope = NULL; + + break; + + case SDL_HAPTIC_RAMP: + hap_ramp = &src->ramp; + ramp = SDL_malloc(sizeof(DIRAMPFORCE)); + if (ramp == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(ramp, 0, sizeof(DIRAMPFORCE)); + + /* Specifics */ + ramp->lStart = CONVERT(hap_ramp->start); + ramp->lEnd = CONVERT(hap_ramp->end); + dest->cbTypeSpecificParams = sizeof(DIRAMPFORCE); + dest->lpvTypeSpecificParams = ramp; + + /* Generics */ + dest->dwDuration = hap_ramp->length * 1000; /* In microseconds. */ + dest->dwTriggerButton = DIGetTriggerButton(hap_ramp->button); + dest->dwTriggerRepeatInterval = hap_ramp->interval; + dest->dwStartDelay = hap_ramp->delay * 1000; /* In microseconds. */ + + /* Direction. */ + if (SDL_SYS_SetDirection(dest, &hap_ramp->direction, dest->cAxes) < 0) { + return -1; + } + + /* Envelope */ + if ((hap_ramp->attack_length == 0) && (hap_ramp->fade_length == 0)) { + SDL_free(dest->lpEnvelope); + dest->lpEnvelope = NULL; + } else { + envelope->dwAttackLevel = CCONVERT(hap_ramp->attack_level); + envelope->dwAttackTime = hap_ramp->attack_length * 1000; + envelope->dwFadeLevel = CCONVERT(hap_ramp->fade_level); + envelope->dwFadeTime = hap_ramp->fade_length * 1000; + } + + break; + + case SDL_HAPTIC_CUSTOM: + hap_custom = &src->custom; + custom = SDL_malloc(sizeof(DICUSTOMFORCE)); + if (custom == NULL) { + return SDL_OutOfMemory(); + } + SDL_memset(custom, 0, sizeof(DICUSTOMFORCE)); + + /* Specifics */ + custom->cChannels = hap_custom->channels; + custom->dwSamplePeriod = hap_custom->period * 1000; + custom->cSamples = hap_custom->samples; + custom->rglForceData = + SDL_malloc(sizeof(LONG) * custom->cSamples * custom->cChannels); + for (i = 0; i < hap_custom->samples * hap_custom->channels; i++) { /* Copy data. */ + custom->rglForceData[i] = CCONVERT(hap_custom->data[i]); + } + dest->cbTypeSpecificParams = sizeof(DICUSTOMFORCE); + dest->lpvTypeSpecificParams = custom; + + /* Generics */ + dest->dwDuration = hap_custom->length * 1000; /* In microseconds. */ + dest->dwTriggerButton = DIGetTriggerButton(hap_custom->button); + dest->dwTriggerRepeatInterval = hap_custom->interval; + dest->dwStartDelay = hap_custom->delay * 1000; /* In microseconds. */ + + /* Direction. */ + if (SDL_SYS_SetDirection(dest, &hap_custom->direction, dest->cAxes) < 0) { + return -1; + } + + /* Envelope */ + if ((hap_custom->attack_length == 0) + && (hap_custom->fade_length == 0)) { + SDL_free(dest->lpEnvelope); + dest->lpEnvelope = NULL; + } else { + envelope->dwAttackLevel = CCONVERT(hap_custom->attack_level); + envelope->dwAttackTime = hap_custom->attack_length * 1000; + envelope->dwFadeLevel = CCONVERT(hap_custom->fade_level); + envelope->dwFadeTime = hap_custom->fade_length * 1000; + } + + break; + + default: + return SDL_SetError("Haptic: Unknown effect type."); + } + + return 0; +} + + +/* + * Frees an DIEFFECT allocated by SDL_SYS_ToDIEFFECT. + */ +static void +SDL_SYS_HapticFreeDIEFFECT(DIEFFECT * effect, int type) +{ + DICUSTOMFORCE *custom; + + SDL_free(effect->lpEnvelope); + effect->lpEnvelope = NULL; + SDL_free(effect->rgdwAxes); + effect->rgdwAxes = NULL; + if (effect->lpvTypeSpecificParams != NULL) { + if (type == SDL_HAPTIC_CUSTOM) { /* Must free the custom data. */ + custom = (DICUSTOMFORCE *) effect->lpvTypeSpecificParams; + SDL_free(custom->rglForceData); + custom->rglForceData = NULL; + } + SDL_free(effect->lpvTypeSpecificParams); + effect->lpvTypeSpecificParams = NULL; + } + SDL_free(effect->rglDirection); + effect->rglDirection = NULL; +} + +/* + * Gets the effect type from the generic SDL haptic effect wrapper. + */ +static REFGUID +SDL_SYS_HapticEffectType(SDL_HapticEffect * effect) +{ + switch (effect->type) { + case SDL_HAPTIC_CONSTANT: + return &GUID_ConstantForce; + + case SDL_HAPTIC_RAMP: + return &GUID_RampForce; + + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* case SDL_HAPTIC_SQUARE: + return &GUID_Square; */ + + case SDL_HAPTIC_SINE: + return &GUID_Sine; + + case SDL_HAPTIC_TRIANGLE: + return &GUID_Triangle; + + case SDL_HAPTIC_SAWTOOTHUP: + return &GUID_SawtoothUp; + + case SDL_HAPTIC_SAWTOOTHDOWN: + return &GUID_SawtoothDown; + + case SDL_HAPTIC_SPRING: + return &GUID_Spring; + + case SDL_HAPTIC_DAMPER: + return &GUID_Damper; + + case SDL_HAPTIC_INERTIA: + return &GUID_Inertia; + + case SDL_HAPTIC_FRICTION: + return &GUID_Friction; + + case SDL_HAPTIC_CUSTOM: + return &GUID_CustomForce; + + default: + return NULL; + } +} +int +SDL_DINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base) +{ + HRESULT ret; + REFGUID type = SDL_SYS_HapticEffectType(base); + + if (type == NULL) { + SDL_SetError("Haptic: Unknown effect type."); + return -1; + } + + /* Get the effect. */ + if (SDL_SYS_ToDIEFFECT(haptic, &effect->hweffect->effect, base) < 0) { + goto err_effectdone; + } + + /* Create the actual effect. */ + ret = IDirectInputDevice8_CreateEffect(haptic->hwdata->device, type, + &effect->hweffect->effect, + &effect->hweffect->ref, NULL); + if (FAILED(ret)) { + DI_SetError("Unable to create effect", ret); + goto err_effectdone; + } + + return 0; + +err_effectdone: + SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, base->type); + return -1; +} + +int +SDL_DINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data) +{ + HRESULT ret; + DWORD flags; + DIEFFECT temp; + + /* Get the effect. */ + SDL_memset(&temp, 0, sizeof(DIEFFECT)); + if (SDL_SYS_ToDIEFFECT(haptic, &temp, data) < 0) { + goto err_update; + } + + /* Set the flags. Might be worthwhile to diff temp with loaded effect and + * only change those parameters. */ + flags = DIEP_DIRECTION | + DIEP_DURATION | + DIEP_ENVELOPE | + DIEP_STARTDELAY | + DIEP_TRIGGERBUTTON | + DIEP_TRIGGERREPEATINTERVAL | DIEP_TYPESPECIFICPARAMS; + + /* Create the actual effect. */ + ret = + IDirectInputEffect_SetParameters(effect->hweffect->ref, &temp, flags); + if (FAILED(ret)) { + DI_SetError("Unable to update effect", ret); + goto err_update; + } + + /* Copy it over. */ + SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, data->type); + SDL_memcpy(&effect->hweffect->effect, &temp, sizeof(DIEFFECT)); + + return 0; + +err_update: + SDL_SYS_HapticFreeDIEFFECT(&temp, data->type); + return -1; +} + +int +SDL_DINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations) +{ + HRESULT ret; + DWORD iter; + + /* Check if it's infinite. */ + if (iterations == SDL_HAPTIC_INFINITY) { + iter = INFINITE; + } else { + iter = iterations; + } + + /* Run the effect. */ + ret = IDirectInputEffect_Start(effect->hweffect->ref, iter, 0); + if (FAILED(ret)) { + return DI_SetError("Running the effect", ret); + } + return 0; +} + +int +SDL_DINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + HRESULT ret; + + ret = IDirectInputEffect_Stop(effect->hweffect->ref); + if (FAILED(ret)) { + return DI_SetError("Unable to stop effect", ret); + } + return 0; +} + +void +SDL_DINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + HRESULT ret; + + ret = IDirectInputEffect_Unload(effect->hweffect->ref); + if (FAILED(ret)) { + DI_SetError("Removing effect from the device", ret); + } + SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, effect->effect.type); +} + +int +SDL_DINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + HRESULT ret; + DWORD status; + + ret = IDirectInputEffect_GetEffectStatus(effect->hweffect->ref, &status); + if (FAILED(ret)) { + return DI_SetError("Getting effect status", ret); + } + + if (status == 0) + return SDL_FALSE; + return SDL_TRUE; +} + +int +SDL_DINPUT_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + HRESULT ret; + DIPROPDWORD dipdw; + + /* Create the weird structure thingy. */ + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = gain * 100; /* 0 to 10,000 */ + + /* Try to set the autocenter. */ + ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, + DIPROP_FFGAIN, &dipdw.diph); + if (FAILED(ret)) { + return DI_SetError("Setting gain", ret); + } + return 0; +} + +int +SDL_DINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) +{ + HRESULT ret; + DIPROPDWORD dipdw; + + /* Create the weird structure thingy. */ + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = (autocenter == 0) ? DIPROPAUTOCENTER_OFF : + DIPROPAUTOCENTER_ON; + + /* Try to set the autocenter. */ + ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, + DIPROP_AUTOCENTER, &dipdw.diph); + if (FAILED(ret)) { + return DI_SetError("Setting autocenter", ret); + } + return 0; +} + +int +SDL_DINPUT_HapticPause(SDL_Haptic * haptic) +{ + HRESULT ret; + + /* Pause the device. */ + ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, + DISFFC_PAUSE); + if (FAILED(ret)) { + return DI_SetError("Pausing the device", ret); + } + return 0; +} + +int +SDL_DINPUT_HapticUnpause(SDL_Haptic * haptic) +{ + HRESULT ret; + + /* Unpause the device. */ + ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, + DISFFC_CONTINUE); + if (FAILED(ret)) { + return DI_SetError("Pausing the device", ret); + } + return 0; +} + +int +SDL_DINPUT_HapticStopAll(SDL_Haptic * haptic) +{ + HRESULT ret; + + /* Try to stop the effects. */ + ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, + DISFFC_STOPALL); + if (FAILED(ret)) { + return DI_SetError("Stopping the device", ret); + } + return 0; +} + +#else /* !SDL_HAPTIC_DINPUT */ + +typedef struct DIDEVICEINSTANCE DIDEVICEINSTANCE; +typedef struct SDL_hapticlist_item SDL_hapticlist_item; + +int +SDL_DINPUT_HapticInit(void) +{ + return 0; +} + +int +SDL_DINPUT_MaybeAddDevice(const DIDEVICEINSTANCE * pdidInstance) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_MaybeRemoveDevice(const DIDEVICEINSTANCE * pdidInstance) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + return SDL_Unsupported(); +} + +void +SDL_DINPUT_HapticClose(SDL_Haptic * haptic) +{ +} + +void +SDL_DINPUT_HapticQuit(void) +{ +} + +int +SDL_DINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + return SDL_Unsupported(); +} + +void +SDL_DINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ +} + +int +SDL_DINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticPause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticUnpause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_DINPUT_HapticStopAll(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +#endif /* SDL_HAPTIC_DINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic_c.h b/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic_c.h new file mode 100644 index 0000000000..3dc0f13039 --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic_c.h @@ -0,0 +1,47 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_haptic.h" +#include "SDL_windowshaptic_c.h" + + +extern int SDL_DINPUT_HapticInit(void); +extern int SDL_DINPUT_MaybeAddDevice(const DIDEVICEINSTANCE *pdidInstance); +extern int SDL_DINPUT_MaybeRemoveDevice(const DIDEVICEINSTANCE *pdidInstance); +extern int SDL_DINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item); +extern int SDL_DINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick); +extern int SDL_DINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick); +extern void SDL_DINPUT_HapticClose(SDL_Haptic * haptic); +extern void SDL_DINPUT_HapticQuit(void); +extern int SDL_DINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base); +extern int SDL_DINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data); +extern int SDL_DINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations); +extern int SDL_DINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect); +extern void SDL_DINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect); +extern int SDL_DINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect); +extern int SDL_DINPUT_HapticSetGain(SDL_Haptic * haptic, int gain); +extern int SDL_DINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter); +extern int SDL_DINPUT_HapticPause(SDL_Haptic * haptic); +extern int SDL_DINPUT_HapticUnpause(SDL_Haptic * haptic); +extern int SDL_DINPUT_HapticStopAll(SDL_Haptic * haptic); + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic.c b/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic.c deleted file mode 100644 index a4b5e42644..0000000000 --- a/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic.c +++ /dev/null @@ -1,1792 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_HAPTIC_DINPUT - -#include "SDL_assert.h" -#include "SDL_thread.h" -#include "SDL_mutex.h" -#include "SDL_timer.h" -#include "SDL_hints.h" -#include "SDL_haptic.h" -#include "../SDL_syshaptic.h" -#include "SDL_joystick.h" -#include "../../joystick/SDL_sysjoystick.h" /* For the real SDL_Joystick */ -#include "../../joystick/windows/SDL_dxjoystick_c.h" /* For joystick hwdata */ - -#include "SDL_syshaptic_c.h" - -/* - * List of available haptic devices. - */ -typedef struct SDL_hapticlist_item -{ - DIDEVICEINSTANCE instance; - char *name; - SDL_Haptic *haptic; - DIDEVCAPS capabilities; - Uint8 bXInputHaptic; /* Supports force feedback via XInput. */ - Uint8 userid; /* XInput userid index for this joystick */ - struct SDL_hapticlist_item *next; -} SDL_hapticlist_item; - - -/* - * Haptic system hardware data. - */ -struct haptic_hwdata -{ - LPDIRECTINPUTDEVICE8 device; - DWORD axes[3]; /* Axes to use. */ - SDL_bool is_joystick; /* Device is loaded as joystick. */ - Uint8 bXInputHaptic; /* Supports force feedback via XInput. */ - Uint8 userid; /* XInput userid index for this joystick */ - SDL_Thread *thread; - SDL_mutex *mutex; - volatile Uint32 stopTicks; - volatile int stopThread; -}; - - -/* - * Haptic system effect data. - */ -struct haptic_hweffect -{ - DIEFFECT effect; - LPDIRECTINPUTEFFECT ref; - XINPUT_VIBRATION vibration; -}; - - -/* - * Internal stuff. - */ -static SDL_bool coinitialized = SDL_FALSE; -static LPDIRECTINPUT8 dinput = NULL; -static SDL_bool loaded_xinput = SDL_FALSE; -static SDL_hapticlist_item *SDL_hapticlist = NULL; -static SDL_hapticlist_item *SDL_hapticlist_tail = NULL; -static int numhaptics = 0; - -/* - * External stuff. - */ -extern HWND SDL_HelperWindow; - - -/* - * Prototypes. - */ -static int DI_SetError(const char *str, HRESULT err); -static int DI_GUIDIsSame(const GUID * a, const GUID * b); -static int SDL_SYS_HapticOpenFromInstance(SDL_Haptic * haptic, - DIDEVICEINSTANCE instance); -static int SDL_SYS_HapticOpenFromDevice8(SDL_Haptic * haptic, - LPDIRECTINPUTDEVICE8 device8, - SDL_bool is_joystick); -static int SDL_SYS_HapticOpenFromXInput(SDL_Haptic * haptic, const Uint8 userid); -static DWORD DIGetTriggerButton(Uint16 button); -static int SDL_SYS_SetDirection(DIEFFECT * effect, SDL_HapticDirection * dir, - int naxes); -static int SDL_SYS_ToDIEFFECT(SDL_Haptic * haptic, DIEFFECT * dest, - SDL_HapticEffect * src); -static void SDL_SYS_HapticFreeDIEFFECT(DIEFFECT * effect, int type); -static REFGUID SDL_SYS_HapticEffectType(SDL_HapticEffect * effect); -static int SDLCALL SDL_RunXInputHaptic(void *arg); - -/* Callbacks. */ -static BOOL CALLBACK EnumHapticsCallback(const DIDEVICEINSTANCE * - pdidInstance, VOID * pContext); -static BOOL CALLBACK DI_EffectCallback(LPCDIEFFECTINFO pei, LPVOID pv); - - -/* - * Like SDL_SetError but for DX error codes. - */ -static int -DI_SetError(const char *str, HRESULT err) -{ - /* - SDL_SetError("Haptic: %s - %s: %s", str, - DXGetErrorString8A(err), DXGetErrorDescription8A(err)); - */ - return SDL_SetError("Haptic error %s", str); -} - - -/* - * Checks to see if two GUID are the same. - */ -static int -DI_GUIDIsSame(const GUID * a, const GUID * b) -{ - return (SDL_memcmp(a, b, sizeof (GUID)) == 0); -} - - -/* - * Initializes the haptic subsystem. - */ -int -SDL_SYS_HapticInit(void) -{ - const char *env = SDL_GetHint(SDL_HINT_XINPUT_ENABLED); - HRESULT ret; - HINSTANCE instance; - - if (dinput != NULL) { /* Already open. */ - return SDL_SetError("Haptic: SubSystem already open."); - } - - ret = WIN_CoInitialize(); - if (FAILED(ret)) { - return DI_SetError("Coinitialize", ret); - } - - coinitialized = SDL_TRUE; - - ret = CoCreateInstance(&CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, - &IID_IDirectInput8, (LPVOID) & dinput); - if (FAILED(ret)) { - SDL_SYS_HapticQuit(); - return DI_SetError("CoCreateInstance", ret); - } - - /* Because we used CoCreateInstance, we need to Initialize it, first. */ - instance = GetModuleHandle(NULL); - if (instance == NULL) { - SDL_SYS_HapticQuit(); - return SDL_SetError("GetModuleHandle() failed with error code %d.", - GetLastError()); - } - ret = IDirectInput8_Initialize(dinput, instance, DIRECTINPUT_VERSION); - if (FAILED(ret)) { - SDL_SYS_HapticQuit(); - return DI_SetError("Initializing DirectInput device", ret); - } - - /* Look for haptic devices. */ - ret = IDirectInput8_EnumDevices(dinput, - 0, - EnumHapticsCallback, - NULL, - DIEDFL_FORCEFEEDBACK | - DIEDFL_ATTACHEDONLY); - if (FAILED(ret)) { - SDL_SYS_HapticQuit(); - return DI_SetError("Enumerating DirectInput devices", ret); - } - - if (!env || SDL_atoi(env)) { - loaded_xinput = (WIN_LoadXInputDLL() == 0); - } - - if (loaded_xinput) { - DWORD i; - for (i = 0; i < SDL_XINPUT_MAX_DEVICES; i++) { - XInputHaptic_MaybeAddDevice(i); - } - } - - return numhaptics; -} - - -int -DirectInputHaptic_MaybeAddDevice(const DIDEVICEINSTANCE * pdidInstance) -{ - HRESULT ret; - LPDIRECTINPUTDEVICE8 device; - const DWORD needflags = DIDC_ATTACHED | DIDC_FORCEFEEDBACK; - DIDEVCAPS capabilities; - SDL_hapticlist_item *item = NULL; - - if (dinput == NULL) { - return -1; /* not initialized. We'll pick these up on enumeration if we init later. */ - } - - /* Make sure we don't already have it */ - for (item = SDL_hapticlist; item; item = item->next) { - if ( (!item->bXInputHaptic) && (SDL_memcmp(&item->instance, pdidInstance, sizeof (*pdidInstance)) == 0) ) { - return -1; /* Already added */ - } - } - - /* Open the device */ - ret = IDirectInput8_CreateDevice(dinput, &pdidInstance->guidInstance, &device, NULL); - if (FAILED(ret)) { - /* DI_SetError("Creating DirectInput device",ret); */ - return -1; - } - - /* Get capabilities. */ - SDL_zero(capabilities); - capabilities.dwSize = sizeof (DIDEVCAPS); - ret = IDirectInputDevice8_GetCapabilities(device, &capabilities); - IDirectInputDevice8_Release(device); - if (FAILED(ret)) { - /* DI_SetError("Getting device capabilities",ret); */ - return -1; - } - - if ((capabilities.dwFlags & needflags) != needflags) { - return -1; /* not a device we can use. */ - } - - item = (SDL_hapticlist_item *)SDL_calloc(1, sizeof(SDL_hapticlist_item)); - if (item == NULL) { - return SDL_OutOfMemory(); - } - - item->name = WIN_StringToUTF8(pdidInstance->tszProductName); - if (!item->name) { - SDL_free(item); - return -1; - } - - /* Copy the instance over, useful for creating devices. */ - SDL_memcpy(&item->instance, pdidInstance, sizeof (DIDEVICEINSTANCE)); - SDL_memcpy(&item->capabilities, &capabilities, sizeof (capabilities)); - - if (SDL_hapticlist_tail == NULL) { - SDL_hapticlist = SDL_hapticlist_tail = item; - } else { - SDL_hapticlist_tail->next = item; - SDL_hapticlist_tail = item; - } - - /* Device has been added. */ - ++numhaptics; - - return numhaptics; -} - - -int -DirectInputHaptic_MaybeRemoveDevice(const DIDEVICEINSTANCE * pdidInstance) -{ - SDL_hapticlist_item *item; - SDL_hapticlist_item *prev = NULL; - - if (dinput == NULL) { - return -1; /* not initialized, ignore this. */ - } - - for (item = SDL_hapticlist; item != NULL; item = item->next) { - if ( (!item->bXInputHaptic) && (SDL_memcmp(&item->instance, pdidInstance, sizeof (*pdidInstance)) == 0) ) { - /* found it, remove it. */ - const int retval = item->haptic ? item->haptic->index : -1; - if (prev != NULL) { - prev->next = item->next; - } else { - SDL_assert(SDL_hapticlist == item); - SDL_hapticlist = item->next; - } - if (item == SDL_hapticlist_tail) { - SDL_hapticlist_tail = prev; - } - --numhaptics; - /* !!! TODO: Send a haptic remove event? */ - SDL_free(item); - return retval; - } - prev = item; - } - - return -1; -} - - -int -XInputHaptic_MaybeAddDevice(const DWORD dwUserid) -{ - const Uint8 userid = (Uint8) dwUserid; - XINPUT_CAPABILITIES caps; - const SDL_bool bIs14OrLater = (SDL_XInputVersion >= ((1<<16)|4)); - SDL_hapticlist_item *item; - - if ((!loaded_xinput) || (dwUserid >= SDL_XINPUT_MAX_DEVICES)) { - return -1; - } - - /* Make sure we don't already have it */ - for (item = SDL_hapticlist; item; item = item->next) { - if ((item->bXInputHaptic) && (item->userid == userid)) { - return -1; /* Already added */ - } - } - - if (XINPUTGETCAPABILITIES(dwUserid, XINPUT_FLAG_GAMEPAD, &caps) != ERROR_SUCCESS) { - return -1; /* maybe controller isn't plugged in. */ - } - - /* XInput < 1.4 is probably only for original XBox360 controllers, - which don't offer the flag, and always have force feedback */ - if ( (bIs14OrLater) && ((caps.Flags & XINPUT_CAPS_FFB_SUPPORTED) == 0) ) { - return -1; /* no force feedback on this device. */ - } - - item = (SDL_hapticlist_item *)SDL_malloc( sizeof(SDL_hapticlist_item)); - if (item == NULL) { - return SDL_OutOfMemory(); - } - - SDL_zerop(item); - - /* !!! FIXME: I'm not bothering to query for a real name right now (can we even?) */ - { - char buf[64]; - SDL_snprintf(buf, sizeof (buf), "XInput Controller #%u", (unsigned int) (userid+1)); - item->name = SDL_strdup(buf); - } - - if (!item->name) { - SDL_free(item); - return -1; - } - - /* Copy the instance over, useful for creating devices. */ - item->bXInputHaptic = 1; - item->userid = userid; - - if (SDL_hapticlist_tail == NULL) { - SDL_hapticlist = SDL_hapticlist_tail = item; - } else { - SDL_hapticlist_tail->next = item; - SDL_hapticlist_tail = item; - } - - /* Device has been added. */ - ++numhaptics; - - return numhaptics; -} - - -int -XInputHaptic_MaybeRemoveDevice(const DWORD dwUserid) -{ - const Uint8 userid = (Uint8) dwUserid; - SDL_hapticlist_item *item; - SDL_hapticlist_item *prev = NULL; - - if ((!loaded_xinput) || (dwUserid >= SDL_XINPUT_MAX_DEVICES)) { - return -1; - } - - for (item = SDL_hapticlist; item != NULL; item = item->next) { - if ((item->bXInputHaptic) && (item->userid == userid)) { - /* found it, remove it. */ - const int retval = item->haptic ? item->haptic->index : -1; - if (prev != NULL) { - prev->next = item->next; - } else { - SDL_assert(SDL_hapticlist == item); - SDL_hapticlist = item->next; - } - if (item == SDL_hapticlist_tail) { - SDL_hapticlist_tail = prev; - } - --numhaptics; - /* !!! TODO: Send a haptic remove event? */ - SDL_free(item); - return retval; - } - prev = item; - } - - return -1; -} - - -/* - * Callback to find the haptic devices. - */ -static BOOL CALLBACK -EnumHapticsCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) -{ - (void) pContext; - DirectInputHaptic_MaybeAddDevice(pdidInstance); - return DIENUM_CONTINUE; /* continue enumerating */ -} - - -int -SDL_SYS_NumHaptics() -{ - return numhaptics; -} - -static SDL_hapticlist_item * -HapticByDevIndex(int device_index) -{ - SDL_hapticlist_item *item = SDL_hapticlist; - - if ((device_index < 0) || (device_index >= numhaptics)) { - return NULL; - } - - while (device_index > 0) { - SDL_assert(item != NULL); - --device_index; - item = item->next; - } - - return item; -} - -/* - * Return the name of a haptic device, does not need to be opened. - */ -const char * -SDL_SYS_HapticName(int index) -{ - SDL_hapticlist_item *item = HapticByDevIndex(index); - return item->name; -} - - -/* - * Callback to get all supported effects. - */ -#define EFFECT_TEST(e,s) \ -if (DI_GUIDIsSame(&pei->guid, &(e))) \ - haptic->supported |= (s) -static BOOL CALLBACK -DI_EffectCallback(LPCDIEFFECTINFO pei, LPVOID pv) -{ - /* Prepare the haptic device. */ - SDL_Haptic *haptic = (SDL_Haptic *) pv; - - /* Get supported. */ - EFFECT_TEST(GUID_Spring, SDL_HAPTIC_SPRING); - EFFECT_TEST(GUID_Damper, SDL_HAPTIC_DAMPER); - EFFECT_TEST(GUID_Inertia, SDL_HAPTIC_INERTIA); - EFFECT_TEST(GUID_Friction, SDL_HAPTIC_FRICTION); - EFFECT_TEST(GUID_ConstantForce, SDL_HAPTIC_CONSTANT); - EFFECT_TEST(GUID_CustomForce, SDL_HAPTIC_CUSTOM); - EFFECT_TEST(GUID_Sine, SDL_HAPTIC_SINE); - /* !!! FIXME: put this back when we have more bits in 2.1 */ - /* EFFECT_TEST(GUID_Square, SDL_HAPTIC_SQUARE); */ - EFFECT_TEST(GUID_Triangle, SDL_HAPTIC_TRIANGLE); - EFFECT_TEST(GUID_SawtoothUp, SDL_HAPTIC_SAWTOOTHUP); - EFFECT_TEST(GUID_SawtoothDown, SDL_HAPTIC_SAWTOOTHDOWN); - EFFECT_TEST(GUID_RampForce, SDL_HAPTIC_RAMP); - - /* Check for more. */ - return DIENUM_CONTINUE; -} - - -/* - * Callback to get supported axes. - */ -static BOOL CALLBACK -DI_DeviceObjectCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) -{ - SDL_Haptic *haptic = (SDL_Haptic *) pvRef; - - if ((dev->dwType & DIDFT_AXIS) && (dev->dwFlags & DIDOI_FFACTUATOR)) { - - haptic->hwdata->axes[haptic->naxes] = dev->dwOfs; - haptic->naxes++; - - /* Currently using the artificial limit of 3 axes. */ - if (haptic->naxes >= 3) { - return DIENUM_STOP; - } - } - - return DIENUM_CONTINUE; -} - - -/* - * Opens the haptic device from the file descriptor. - * - * Steps: - * - Open temporary DirectInputDevice interface. - * - Create DirectInputDevice8 interface. - * - Release DirectInputDevice interface. - * - Call SDL_SYS_HapticOpenFromDevice8 - */ -static int -SDL_SYS_HapticOpenFromInstance(SDL_Haptic * haptic, DIDEVICEINSTANCE instance) -{ - HRESULT ret; - int ret2; - LPDIRECTINPUTDEVICE8 device; - LPDIRECTINPUTDEVICE8 device8; - - /* Open the device */ - ret = IDirectInput8_CreateDevice(dinput, &instance.guidInstance, - &device, NULL); - if (FAILED(ret)) { - DI_SetError("Creating DirectInput device", ret); - return -1; - } - - /* Now get the IDirectInputDevice8 interface, instead. */ - ret = IDirectInputDevice8_QueryInterface(device, - &IID_IDirectInputDevice8, - (LPVOID *) &device8); - /* Done with the temporary one now. */ - IDirectInputDevice8_Release(device); - if (FAILED(ret)) { - DI_SetError("Querying DirectInput interface", ret); - return -1; - } - - ret2 = SDL_SYS_HapticOpenFromDevice8(haptic, device8, SDL_FALSE); - if (ret2 < 0) { - IDirectInputDevice8_Release(device8); - return -1; - } - - return 0; -} - -static int -SDL_SYS_HapticOpenFromXInput(SDL_Haptic *haptic, const Uint8 userid) -{ - char threadName[32]; - XINPUT_VIBRATION vibration = { 0, 0 }; /* stop any current vibration */ - XINPUTSETSTATE(userid, &vibration); - - haptic->supported = SDL_HAPTIC_LEFTRIGHT; - - haptic->neffects = 1; - haptic->nplaying = 1; - - /* Prepare effects memory. */ - haptic->effects = (struct haptic_effect *) - SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects); - if (haptic->effects == NULL) { - return SDL_OutOfMemory(); - } - /* Clear the memory */ - SDL_memset(haptic->effects, 0, - sizeof(struct haptic_effect) * haptic->neffects); - - haptic->hwdata = (struct haptic_hwdata *) SDL_malloc(sizeof(*haptic->hwdata)); - if (haptic->hwdata == NULL) { - SDL_free(haptic->effects); - haptic->effects = NULL; - return SDL_OutOfMemory(); - } - SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); - - haptic->hwdata->bXInputHaptic = 1; - haptic->hwdata->userid = userid; - - haptic->hwdata->mutex = SDL_CreateMutex(); - if (haptic->hwdata->mutex == NULL) { - SDL_free(haptic->effects); - SDL_free(haptic->hwdata); - haptic->effects = NULL; - return SDL_SetError("Couldn't create XInput haptic mutex"); - } - - SDL_snprintf(threadName, sizeof (threadName), "SDLXInputDev%d", (int) userid); - -#if defined(__WIN32__) && !defined(HAVE_LIBC) /* !!! FIXME: this is nasty. */ - #undef SDL_CreateThread - #if SDL_DYNAMIC_API - haptic->hwdata->thread = SDL_CreateThread_REAL(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); - #else - haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); - #endif -#else - haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata); -#endif - if (haptic->hwdata->thread == NULL) { - SDL_DestroyMutex(haptic->hwdata->mutex); - SDL_free(haptic->effects); - SDL_free(haptic->hwdata); - haptic->effects = NULL; - return SDL_SetError("Couldn't create XInput haptic thread"); - } - - return 0; - } - -/* - * Opens the haptic device from the file descriptor. - * - * Steps: - * - Set cooperative level. - * - Set data format. - * - Acquire exclusiveness. - * - Reset actuators. - * - Get supported features. - */ -static int -SDL_SYS_HapticOpenFromDevice8(SDL_Haptic * haptic, - LPDIRECTINPUTDEVICE8 device8, SDL_bool is_joystick) -{ - HRESULT ret; - DIPROPDWORD dipdw; - - /* Allocate the hwdata */ - haptic->hwdata = (struct haptic_hwdata *)SDL_malloc(sizeof(*haptic->hwdata)); - if (haptic->hwdata == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); - - /* We'll use the device8 from now on. */ - haptic->hwdata->device = device8; - haptic->hwdata->is_joystick = is_joystick; - - /* Grab it exclusively to use force feedback stuff. */ - ret = IDirectInputDevice8_SetCooperativeLevel(haptic->hwdata->device, - SDL_HelperWindow, - DISCL_EXCLUSIVE | - DISCL_BACKGROUND); - if (FAILED(ret)) { - DI_SetError("Setting cooperative level to exclusive", ret); - goto acquire_err; - } - - /* Set data format. */ - ret = IDirectInputDevice8_SetDataFormat(haptic->hwdata->device, - &c_dfDIJoystick2); - if (FAILED(ret)) { - DI_SetError("Setting data format", ret); - goto acquire_err; - } - - /* Get number of axes. */ - ret = IDirectInputDevice8_EnumObjects(haptic->hwdata->device, - DI_DeviceObjectCallback, - haptic, DIDFT_AXIS); - if (FAILED(ret)) { - DI_SetError("Getting device axes", ret); - goto acquire_err; - } - - /* Acquire the device. */ - ret = IDirectInputDevice8_Acquire(haptic->hwdata->device); - if (FAILED(ret)) { - DI_SetError("Acquiring DirectInput device", ret); - goto acquire_err; - } - - /* Reset all actuators - just in case. */ - ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, - DISFFC_RESET); - if (FAILED(ret)) { - DI_SetError("Resetting device", ret); - goto acquire_err; - } - - /* Enabling actuators. */ - ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, - DISFFC_SETACTUATORSON); - if (FAILED(ret)) { - DI_SetError("Enabling actuators", ret); - goto acquire_err; - } - - /* Get supported effects. */ - ret = IDirectInputDevice8_EnumEffects(haptic->hwdata->device, - DI_EffectCallback, haptic, - DIEFT_ALL); - if (FAILED(ret)) { - DI_SetError("Enumerating supported effects", ret); - goto acquire_err; - } - if (haptic->supported == 0) { /* Error since device supports nothing. */ - SDL_SetError("Haptic: Internal error on finding supported effects."); - goto acquire_err; - } - - /* Check autogain and autocenter. */ - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = 10000; - ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, - DIPROP_FFGAIN, &dipdw.diph); - if (!FAILED(ret)) { /* Gain is supported. */ - haptic->supported |= SDL_HAPTIC_GAIN; - } - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = DIPROPAUTOCENTER_OFF; - ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, - DIPROP_AUTOCENTER, &dipdw.diph); - if (!FAILED(ret)) { /* Autocenter is supported. */ - haptic->supported |= SDL_HAPTIC_AUTOCENTER; - } - - /* Status is always supported. */ - haptic->supported |= SDL_HAPTIC_STATUS | SDL_HAPTIC_PAUSE; - - /* Check maximum effects. */ - haptic->neffects = 128; /* This is not actually supported as thus under windows, - there is no way to tell the number of EFFECTS that a - device can hold, so we'll just use a "random" number - instead and put warnings in SDL_haptic.h */ - haptic->nplaying = 128; /* Even more impossible to get this then neffects. */ - - /* Prepare effects memory. */ - haptic->effects = (struct haptic_effect *) - SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects); - if (haptic->effects == NULL) { - SDL_OutOfMemory(); - goto acquire_err; - } - /* Clear the memory */ - SDL_memset(haptic->effects, 0, - sizeof(struct haptic_effect) * haptic->neffects); - - return 0; - - /* Error handling */ - acquire_err: - IDirectInputDevice8_Unacquire(haptic->hwdata->device); - return -1; - -} - - -/* - * Opens a haptic device for usage. - */ -int -SDL_SYS_HapticOpen(SDL_Haptic * haptic) -{ - SDL_hapticlist_item *item = HapticByDevIndex(haptic->index); - return (item->bXInputHaptic) ? SDL_SYS_HapticOpenFromXInput(haptic, item->userid) : SDL_SYS_HapticOpenFromInstance(haptic, item->instance); -} - - -/* - * Opens a haptic device from first mouse it finds for usage. - */ -int -SDL_SYS_HapticMouse(void) -{ - SDL_hapticlist_item *item; - int index = 0; - - /* Grab the first mouse haptic device we find. */ - for (item = SDL_hapticlist; item != NULL; item = item->next) { - SDL_assert(index >= 0); - if (item->capabilities.dwDevType == DI8DEVCLASS_POINTER ) { - return index; - } - ++index; - } - - return -1; -} - - -/* - * Checks to see if a joystick has haptic features. - */ -int -SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick) -{ - const struct joystick_hwdata *hwdata = joystick->hwdata; - return ( (hwdata->bXInputHaptic) || - ((hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) != 0) ); -} - - -/* - * Checks to see if the haptic device and joystick are in reality the same. - */ -int -SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) -{ - if (joystick->hwdata->bXInputHaptic != haptic->hwdata->bXInputHaptic) { - return 0; /* one is XInput, one is not; not the same device. */ - } else if (joystick->hwdata->bXInputHaptic) { /* XInput */ - return (haptic->hwdata->userid == joystick->hwdata->userid); - } else { /* DirectInput */ - HRESULT ret; - DIDEVICEINSTANCE hap_instance, joy_instance; - - hap_instance.dwSize = sizeof(DIDEVICEINSTANCE); - joy_instance.dwSize = sizeof(DIDEVICEINSTANCE); - - /* Get the device instances. */ - ret = IDirectInputDevice8_GetDeviceInfo(haptic->hwdata->device, - &hap_instance); - if (FAILED(ret)) { - return 0; - } - ret = IDirectInputDevice8_GetDeviceInfo(joystick->hwdata->InputDevice, - &joy_instance); - if (FAILED(ret)) { - return 0; - } - - if (DI_GUIDIsSame(&hap_instance.guidInstance, &joy_instance.guidInstance)) - return 1; - } - - return 0; -} - - -/* - * Opens a SDL_Haptic from a SDL_Joystick. - */ -int -SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) -{ - SDL_hapticlist_item *item; - int index = 0; - - /* Since it comes from a joystick we have to try to match it with a haptic device on our haptic list. */ - if (joystick->hwdata->bXInputDevice) { - const Uint8 userid = joystick->hwdata->userid; - for (item = SDL_hapticlist; item != NULL; item = item->next) { - if ((item->bXInputHaptic) && (item->userid == userid)) { - SDL_assert(joystick->hwdata->bXInputHaptic); - haptic->index = index; - return SDL_SYS_HapticOpenFromXInput(haptic, userid); - } - ++index; - } - } else { - HRESULT idret; - DIDEVICEINSTANCE joy_instance; - - joy_instance.dwSize = sizeof(DIDEVICEINSTANCE); - idret = IDirectInputDevice8_GetDeviceInfo(joystick->hwdata->InputDevice, &joy_instance); - if (FAILED(idret)) { - return -1; - } - - for (item = SDL_hapticlist; item != NULL; item = item->next) { - if (DI_GUIDIsSame(&item->instance.guidInstance, &joy_instance.guidInstance)) { - haptic->index = index; - return SDL_SYS_HapticOpenFromDevice8(haptic, joystick->hwdata->InputDevice, SDL_TRUE); - } - ++index; - } - } - - /* No match to our haptic list */ - return -1; -} - - -/* - * Closes the haptic device. - */ -void -SDL_SYS_HapticClose(SDL_Haptic * haptic) -{ - if (haptic->hwdata) { - - /* Free effects. */ - SDL_free(haptic->effects); - haptic->effects = NULL; - haptic->neffects = 0; - - /* Clean up */ - if (haptic->hwdata->bXInputHaptic) { - haptic->hwdata->stopThread = 1; - SDL_WaitThread(haptic->hwdata->thread, NULL); - SDL_DestroyMutex(haptic->hwdata->mutex); - } else { - IDirectInputDevice8_Unacquire(haptic->hwdata->device); - /* Only release if isn't grabbed by a joystick. */ - if (haptic->hwdata->is_joystick == 0) { - IDirectInputDevice8_Release(haptic->hwdata->device); - } - } - - /* Free */ - SDL_free(haptic->hwdata); - haptic->hwdata = NULL; - } -} - - -/* - * Clean up after system specific haptic stuff - */ -void -SDL_SYS_HapticQuit(void) -{ - SDL_hapticlist_item *item; - SDL_hapticlist_item *next = NULL; - SDL_Haptic *hapticitem = NULL; - - extern SDL_Haptic *SDL_haptics; - for (hapticitem = SDL_haptics; hapticitem; hapticitem = hapticitem->next) { - if ((hapticitem->hwdata->bXInputHaptic) && (hapticitem->hwdata->thread)) { - /* we _have_ to stop the thread before we free the XInput DLL! */ - hapticitem->hwdata->stopThread = 1; - SDL_WaitThread(hapticitem->hwdata->thread, NULL); - hapticitem->hwdata->thread = NULL; - } - } - - for (item = SDL_hapticlist; item; item = next) { - /* Opened and not closed haptics are leaked, this is on purpose. - * Close your haptic devices after usage. */ - /* !!! FIXME: (...is leaking on purpose a good idea?) */ - next = item->next; - SDL_free(item->name); - SDL_free(item); - } - - if (loaded_xinput) { - WIN_UnloadXInputDLL(); - loaded_xinput = SDL_FALSE; - } - - if (dinput != NULL) { - IDirectInput8_Release(dinput); - dinput = NULL; - } - - if (coinitialized) { - WIN_CoUninitialize(); - coinitialized = SDL_FALSE; - } -} - - -/* - * Converts an SDL trigger button to an DIEFFECT trigger button. - */ -static DWORD -DIGetTriggerButton(Uint16 button) -{ - DWORD dwTriggerButton; - - dwTriggerButton = DIEB_NOTRIGGER; - - if (button != 0) { - dwTriggerButton = DIJOFS_BUTTON(button - 1); - } - - return dwTriggerButton; -} - - -/* - * Sets the direction. - */ -static int -SDL_SYS_SetDirection(DIEFFECT * effect, SDL_HapticDirection * dir, int naxes) -{ - LONG *rglDir; - - /* Handle no axes a part. */ - if (naxes == 0) { - effect->dwFlags |= DIEFF_SPHERICAL; /* Set as default. */ - effect->rglDirection = NULL; - return 0; - } - - /* Has axes. */ - rglDir = SDL_malloc(sizeof(LONG) * naxes); - if (rglDir == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(rglDir, 0, sizeof(LONG) * naxes); - effect->rglDirection = rglDir; - - switch (dir->type) { - case SDL_HAPTIC_POLAR: - effect->dwFlags |= DIEFF_POLAR; - rglDir[0] = dir->dir[0]; - return 0; - case SDL_HAPTIC_CARTESIAN: - effect->dwFlags |= DIEFF_CARTESIAN; - rglDir[0] = dir->dir[0]; - if (naxes > 1) - rglDir[1] = dir->dir[1]; - if (naxes > 2) - rglDir[2] = dir->dir[2]; - return 0; - case SDL_HAPTIC_SPHERICAL: - effect->dwFlags |= DIEFF_SPHERICAL; - rglDir[0] = dir->dir[0]; - if (naxes > 1) - rglDir[1] = dir->dir[1]; - if (naxes > 2) - rglDir[2] = dir->dir[2]; - return 0; - - default: - return SDL_SetError("Haptic: Unknown direction type."); - } -} - -#define CONVERT(x) (((x) > 0x7FFF) ? 10000 : ((x)*10000) / 0x7FFF) -/* - * Creates the DIEFFECT from a SDL_HapticEffect. - */ -static int -SDL_SYS_ToDIEFFECT(SDL_Haptic * haptic, DIEFFECT * dest, - SDL_HapticEffect * src) -{ - int i; - DICONSTANTFORCE *constant; - DIPERIODIC *periodic; - DICONDITION *condition; /* Actually an array of conditions - one per axis. */ - DIRAMPFORCE *ramp; - DICUSTOMFORCE *custom; - DIENVELOPE *envelope; - SDL_HapticConstant *hap_constant; - SDL_HapticPeriodic *hap_periodic; - SDL_HapticCondition *hap_condition; - SDL_HapticRamp *hap_ramp; - SDL_HapticCustom *hap_custom; - DWORD *axes; - - /* Set global stuff. */ - SDL_memset(dest, 0, sizeof(DIEFFECT)); - dest->dwSize = sizeof(DIEFFECT); /* Set the structure size. */ - dest->dwSamplePeriod = 0; /* Not used by us. */ - dest->dwGain = 10000; /* Gain is set globally, not locally. */ - dest->dwFlags = DIEFF_OBJECTOFFSETS; /* Seems obligatory. */ - - /* Envelope. */ - envelope = SDL_malloc(sizeof(DIENVELOPE)); - if (envelope == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(envelope, 0, sizeof(DIENVELOPE)); - dest->lpEnvelope = envelope; - envelope->dwSize = sizeof(DIENVELOPE); /* Always should be this. */ - - /* Axes. */ - dest->cAxes = haptic->naxes; - if (dest->cAxes > 0) { - axes = SDL_malloc(sizeof(DWORD) * dest->cAxes); - if (axes == NULL) { - return SDL_OutOfMemory(); - } - axes[0] = haptic->hwdata->axes[0]; /* Always at least one axis. */ - if (dest->cAxes > 1) { - axes[1] = haptic->hwdata->axes[1]; - } - if (dest->cAxes > 2) { - axes[2] = haptic->hwdata->axes[2]; - } - dest->rgdwAxes = axes; - } - - - /* The big type handling switch, even bigger then Linux's version. */ - switch (src->type) { - case SDL_HAPTIC_CONSTANT: - hap_constant = &src->constant; - constant = SDL_malloc(sizeof(DICONSTANTFORCE)); - if (constant == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(constant, 0, sizeof(DICONSTANTFORCE)); - - /* Specifics */ - constant->lMagnitude = CONVERT(hap_constant->level); - dest->cbTypeSpecificParams = sizeof(DICONSTANTFORCE); - dest->lpvTypeSpecificParams = constant; - - /* Generics */ - dest->dwDuration = hap_constant->length * 1000; /* In microseconds. */ - dest->dwTriggerButton = DIGetTriggerButton(hap_constant->button); - dest->dwTriggerRepeatInterval = hap_constant->interval; - dest->dwStartDelay = hap_constant->delay * 1000; /* In microseconds. */ - - /* Direction. */ - if (SDL_SYS_SetDirection(dest, &hap_constant->direction, dest->cAxes) - < 0) { - return -1; - } - - /* Envelope */ - if ((hap_constant->attack_length == 0) - && (hap_constant->fade_length == 0)) { - SDL_free(dest->lpEnvelope); - dest->lpEnvelope = NULL; - } else { - envelope->dwAttackLevel = CONVERT(hap_constant->attack_level); - envelope->dwAttackTime = hap_constant->attack_length * 1000; - envelope->dwFadeLevel = CONVERT(hap_constant->fade_level); - envelope->dwFadeTime = hap_constant->fade_length * 1000; - } - - break; - - case SDL_HAPTIC_SINE: - /* !!! FIXME: put this back when we have more bits in 2.1 */ - /* case SDL_HAPTIC_SQUARE: */ - case SDL_HAPTIC_TRIANGLE: - case SDL_HAPTIC_SAWTOOTHUP: - case SDL_HAPTIC_SAWTOOTHDOWN: - hap_periodic = &src->periodic; - periodic = SDL_malloc(sizeof(DIPERIODIC)); - if (periodic == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(periodic, 0, sizeof(DIPERIODIC)); - - /* Specifics */ - periodic->dwMagnitude = CONVERT(hap_periodic->magnitude); - periodic->lOffset = CONVERT(hap_periodic->offset); - periodic->dwPhase = hap_periodic->phase; - periodic->dwPeriod = hap_periodic->period * 1000; - dest->cbTypeSpecificParams = sizeof(DIPERIODIC); - dest->lpvTypeSpecificParams = periodic; - - /* Generics */ - dest->dwDuration = hap_periodic->length * 1000; /* In microseconds. */ - dest->dwTriggerButton = DIGetTriggerButton(hap_periodic->button); - dest->dwTriggerRepeatInterval = hap_periodic->interval; - dest->dwStartDelay = hap_periodic->delay * 1000; /* In microseconds. */ - - /* Direction. */ - if (SDL_SYS_SetDirection(dest, &hap_periodic->direction, dest->cAxes) - < 0) { - return -1; - } - - /* Envelope */ - if ((hap_periodic->attack_length == 0) - && (hap_periodic->fade_length == 0)) { - SDL_free(dest->lpEnvelope); - dest->lpEnvelope = NULL; - } else { - envelope->dwAttackLevel = CONVERT(hap_periodic->attack_level); - envelope->dwAttackTime = hap_periodic->attack_length * 1000; - envelope->dwFadeLevel = CONVERT(hap_periodic->fade_level); - envelope->dwFadeTime = hap_periodic->fade_length * 1000; - } - - break; - - case SDL_HAPTIC_SPRING: - case SDL_HAPTIC_DAMPER: - case SDL_HAPTIC_INERTIA: - case SDL_HAPTIC_FRICTION: - hap_condition = &src->condition; - condition = SDL_malloc(sizeof(DICONDITION) * dest->cAxes); - if (condition == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(condition, 0, sizeof(DICONDITION)); - - /* Specifics */ - for (i = 0; i < (int) dest->cAxes; i++) { - condition[i].lOffset = CONVERT(hap_condition->center[i]); - condition[i].lPositiveCoefficient = - CONVERT(hap_condition->right_coeff[i]); - condition[i].lNegativeCoefficient = - CONVERT(hap_condition->left_coeff[i]); - condition[i].dwPositiveSaturation = - CONVERT(hap_condition->right_sat[i]); - condition[i].dwNegativeSaturation = - CONVERT(hap_condition->left_sat[i]); - condition[i].lDeadBand = CONVERT(hap_condition->deadband[i]); - } - dest->cbTypeSpecificParams = sizeof(DICONDITION) * dest->cAxes; - dest->lpvTypeSpecificParams = condition; - - /* Generics */ - dest->dwDuration = hap_condition->length * 1000; /* In microseconds. */ - dest->dwTriggerButton = DIGetTriggerButton(hap_condition->button); - dest->dwTriggerRepeatInterval = hap_condition->interval; - dest->dwStartDelay = hap_condition->delay * 1000; /* In microseconds. */ - - /* Direction. */ - if (SDL_SYS_SetDirection(dest, &hap_condition->direction, dest->cAxes) - < 0) { - return -1; - } - - /* Envelope - Not actually supported by most CONDITION implementations. */ - SDL_free(dest->lpEnvelope); - dest->lpEnvelope = NULL; - - break; - - case SDL_HAPTIC_RAMP: - hap_ramp = &src->ramp; - ramp = SDL_malloc(sizeof(DIRAMPFORCE)); - if (ramp == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(ramp, 0, sizeof(DIRAMPFORCE)); - - /* Specifics */ - ramp->lStart = CONVERT(hap_ramp->start); - ramp->lEnd = CONVERT(hap_ramp->end); - dest->cbTypeSpecificParams = sizeof(DIRAMPFORCE); - dest->lpvTypeSpecificParams = ramp; - - /* Generics */ - dest->dwDuration = hap_ramp->length * 1000; /* In microseconds. */ - dest->dwTriggerButton = DIGetTriggerButton(hap_ramp->button); - dest->dwTriggerRepeatInterval = hap_ramp->interval; - dest->dwStartDelay = hap_ramp->delay * 1000; /* In microseconds. */ - - /* Direction. */ - if (SDL_SYS_SetDirection(dest, &hap_ramp->direction, dest->cAxes) < 0) { - return -1; - } - - /* Envelope */ - if ((hap_ramp->attack_length == 0) && (hap_ramp->fade_length == 0)) { - SDL_free(dest->lpEnvelope); - dest->lpEnvelope = NULL; - } else { - envelope->dwAttackLevel = CONVERT(hap_ramp->attack_level); - envelope->dwAttackTime = hap_ramp->attack_length * 1000; - envelope->dwFadeLevel = CONVERT(hap_ramp->fade_level); - envelope->dwFadeTime = hap_ramp->fade_length * 1000; - } - - break; - - case SDL_HAPTIC_CUSTOM: - hap_custom = &src->custom; - custom = SDL_malloc(sizeof(DICUSTOMFORCE)); - if (custom == NULL) { - return SDL_OutOfMemory(); - } - SDL_memset(custom, 0, sizeof(DICUSTOMFORCE)); - - /* Specifics */ - custom->cChannels = hap_custom->channels; - custom->dwSamplePeriod = hap_custom->period * 1000; - custom->cSamples = hap_custom->samples; - custom->rglForceData = - SDL_malloc(sizeof(LONG) * custom->cSamples * custom->cChannels); - for (i = 0; i < hap_custom->samples * hap_custom->channels; i++) { /* Copy data. */ - custom->rglForceData[i] = CONVERT(hap_custom->data[i]); - } - dest->cbTypeSpecificParams = sizeof(DICUSTOMFORCE); - dest->lpvTypeSpecificParams = custom; - - /* Generics */ - dest->dwDuration = hap_custom->length * 1000; /* In microseconds. */ - dest->dwTriggerButton = DIGetTriggerButton(hap_custom->button); - dest->dwTriggerRepeatInterval = hap_custom->interval; - dest->dwStartDelay = hap_custom->delay * 1000; /* In microseconds. */ - - /* Direction. */ - if (SDL_SYS_SetDirection(dest, &hap_custom->direction, dest->cAxes) < - 0) { - return -1; - } - - /* Envelope */ - if ((hap_custom->attack_length == 0) - && (hap_custom->fade_length == 0)) { - SDL_free(dest->lpEnvelope); - dest->lpEnvelope = NULL; - } else { - envelope->dwAttackLevel = CONVERT(hap_custom->attack_level); - envelope->dwAttackTime = hap_custom->attack_length * 1000; - envelope->dwFadeLevel = CONVERT(hap_custom->fade_level); - envelope->dwFadeTime = hap_custom->fade_length * 1000; - } - - break; - - - default: - return SDL_SetError("Haptic: Unknown effect type."); - } - - return 0; -} - - -/* - * Frees an DIEFFECT allocated by SDL_SYS_ToDIEFFECT. - */ -static void -SDL_SYS_HapticFreeDIEFFECT(DIEFFECT * effect, int type) -{ - DICUSTOMFORCE *custom; - - SDL_free(effect->lpEnvelope); - effect->lpEnvelope = NULL; - SDL_free(effect->rgdwAxes); - effect->rgdwAxes = NULL; - if (effect->lpvTypeSpecificParams != NULL) { - if (type == SDL_HAPTIC_CUSTOM) { /* Must free the custom data. */ - custom = (DICUSTOMFORCE *) effect->lpvTypeSpecificParams; - SDL_free(custom->rglForceData); - custom->rglForceData = NULL; - } - SDL_free(effect->lpvTypeSpecificParams); - effect->lpvTypeSpecificParams = NULL; - } - SDL_free(effect->rglDirection); - effect->rglDirection = NULL; -} - - -/* - * Gets the effect type from the generic SDL haptic effect wrapper. - */ -static REFGUID -SDL_SYS_HapticEffectType(SDL_HapticEffect * effect) -{ - switch (effect->type) { - case SDL_HAPTIC_CONSTANT: - return &GUID_ConstantForce; - - case SDL_HAPTIC_RAMP: - return &GUID_RampForce; - - /* !!! FIXME: put this back when we have more bits in 2.1 */ - /* case SDL_HAPTIC_SQUARE: - return &GUID_Square; */ - - case SDL_HAPTIC_SINE: - return &GUID_Sine; - - case SDL_HAPTIC_TRIANGLE: - return &GUID_Triangle; - - case SDL_HAPTIC_SAWTOOTHUP: - return &GUID_SawtoothUp; - - case SDL_HAPTIC_SAWTOOTHDOWN: - return &GUID_SawtoothDown; - - case SDL_HAPTIC_SPRING: - return &GUID_Spring; - - case SDL_HAPTIC_DAMPER: - return &GUID_Damper; - - case SDL_HAPTIC_INERTIA: - return &GUID_Inertia; - - case SDL_HAPTIC_FRICTION: - return &GUID_Friction; - - case SDL_HAPTIC_CUSTOM: - return &GUID_CustomForce; - - default: - return NULL; - } -} - - -/* - * Creates a new haptic effect. - */ -int -SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, - SDL_HapticEffect * base) -{ - HRESULT ret; - REFGUID type = SDL_SYS_HapticEffectType(base); - - if ((type == NULL) && (!haptic->hwdata->bXInputHaptic)) { - SDL_SetError("Haptic: Unknown effect type."); - goto err_hweffect; - } - - /* Alloc the effect. */ - effect->hweffect = (struct haptic_hweffect *) - SDL_malloc(sizeof(struct haptic_hweffect)); - if (effect->hweffect == NULL) { - SDL_OutOfMemory(); - goto err_hweffect; - } - - SDL_zerop(effect->hweffect); - - if (haptic->hwdata->bXInputHaptic) { - SDL_assert(base->type == SDL_HAPTIC_LEFTRIGHT); /* should catch this at higher level */ - return SDL_SYS_HapticUpdateEffect(haptic, effect, base); - } - - /* Get the effect. */ - if (SDL_SYS_ToDIEFFECT(haptic, &effect->hweffect->effect, base) < 0) { - goto err_effectdone; - } - - /* Create the actual effect. */ - ret = IDirectInputDevice8_CreateEffect(haptic->hwdata->device, type, - &effect->hweffect->effect, - &effect->hweffect->ref, NULL); - if (FAILED(ret)) { - DI_SetError("Unable to create effect", ret); - goto err_effectdone; - } - - return 0; - - err_effectdone: - SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, base->type); - err_hweffect: - SDL_free(effect->hweffect); - effect->hweffect = NULL; - return -1; -} - - -/* - * Updates an effect. - */ -int -SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic, - struct haptic_effect *effect, - SDL_HapticEffect * data) -{ - HRESULT ret; - DWORD flags; - DIEFFECT temp; - - if (haptic->hwdata->bXInputHaptic) { - XINPUT_VIBRATION *vib = &effect->hweffect->vibration; - SDL_assert(data->type == SDL_HAPTIC_LEFTRIGHT); - vib->wLeftMotorSpeed = data->leftright.large_magnitude; - vib->wRightMotorSpeed = data->leftright.small_magnitude; - SDL_LockMutex(haptic->hwdata->mutex); - if (haptic->hwdata->stopTicks) { /* running right now? Update it. */ - XINPUTSETSTATE(haptic->hwdata->userid, vib); - } - SDL_UnlockMutex(haptic->hwdata->mutex); - return 0; - } - - /* Get the effect. */ - SDL_memset(&temp, 0, sizeof(DIEFFECT)); - if (SDL_SYS_ToDIEFFECT(haptic, &temp, data) < 0) { - goto err_update; - } - - /* Set the flags. Might be worthwhile to diff temp with loaded effect and - * only change those parameters. */ - flags = DIEP_DIRECTION | - DIEP_DURATION | - DIEP_ENVELOPE | - DIEP_STARTDELAY | - DIEP_TRIGGERBUTTON | - DIEP_TRIGGERREPEATINTERVAL | DIEP_TYPESPECIFICPARAMS; - - /* Create the actual effect. */ - ret = - IDirectInputEffect_SetParameters(effect->hweffect->ref, &temp, flags); - if (FAILED(ret)) { - DI_SetError("Unable to update effect", ret); - goto err_update; - } - - /* Copy it over. */ - SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, data->type); - SDL_memcpy(&effect->hweffect->effect, &temp, sizeof(DIEFFECT)); - - return 0; - - err_update: - SDL_SYS_HapticFreeDIEFFECT(&temp, data->type); - return -1; -} - - -/* - * Runs an effect. - */ -int -SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, - Uint32 iterations) -{ - HRESULT ret; - DWORD iter; - - if (haptic->hwdata->bXInputHaptic) { - XINPUT_VIBRATION *vib = &effect->hweffect->vibration; - SDL_assert(effect->effect.type == SDL_HAPTIC_LEFTRIGHT); /* should catch this at higher level */ - SDL_LockMutex(haptic->hwdata->mutex); - if(effect->effect.leftright.length == SDL_HAPTIC_INFINITY || iterations == SDL_HAPTIC_INFINITY) { - haptic->hwdata->stopTicks = SDL_HAPTIC_INFINITY; - } else if ((!effect->effect.leftright.length) || (!iterations)) { - /* do nothing. Effect runs for zero milliseconds. */ - } else { - haptic->hwdata->stopTicks = SDL_GetTicks() + (effect->effect.leftright.length * iterations); - if ((haptic->hwdata->stopTicks == SDL_HAPTIC_INFINITY) || (haptic->hwdata->stopTicks == 0)) { - haptic->hwdata->stopTicks = 1; /* fix edge cases. */ - } - } - SDL_UnlockMutex(haptic->hwdata->mutex); - return (XINPUTSETSTATE(haptic->hwdata->userid, vib) == ERROR_SUCCESS) ? 0 : -1; - } - - /* Check if it's infinite. */ - if (iterations == SDL_HAPTIC_INFINITY) { - iter = INFINITE; - } else - iter = iterations; - - /* Run the effect. */ - ret = IDirectInputEffect_Start(effect->hweffect->ref, iter, 0); - if (FAILED(ret)) { - return DI_SetError("Running the effect", ret); - } - - return 0; -} - - -/* - * Stops an effect. - */ -int -SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) -{ - HRESULT ret; - - if (haptic->hwdata->bXInputHaptic) { - XINPUT_VIBRATION vibration = { 0, 0 }; - SDL_LockMutex(haptic->hwdata->mutex); - haptic->hwdata->stopTicks = 0; - SDL_UnlockMutex(haptic->hwdata->mutex); - return (XINPUTSETSTATE(haptic->hwdata->userid, &vibration) == ERROR_SUCCESS) ? 0 : -1; - } - - ret = IDirectInputEffect_Stop(effect->hweffect->ref); - if (FAILED(ret)) { - return DI_SetError("Unable to stop effect", ret); - } - - return 0; -} - - -/* - * Frees the effect. - */ -void -SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) -{ - HRESULT ret; - - if (haptic->hwdata->bXInputHaptic) { - SDL_SYS_HapticStopEffect(haptic, effect); - } else { - ret = IDirectInputEffect_Unload(effect->hweffect->ref); - if (FAILED(ret)) { - DI_SetError("Removing effect from the device", ret); - } - SDL_SYS_HapticFreeDIEFFECT(&effect->hweffect->effect, - effect->effect.type); - } - SDL_free(effect->hweffect); - effect->hweffect = NULL; -} - - -/* - * Gets the status of a haptic effect. - */ -int -SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, - struct haptic_effect *effect) -{ - HRESULT ret; - DWORD status; - - ret = IDirectInputEffect_GetEffectStatus(effect->hweffect->ref, &status); - if (FAILED(ret)) { - return DI_SetError("Getting effect status", ret); - } - - if (status == 0) - return SDL_FALSE; - return SDL_TRUE; -} - - -/* - * Sets the gain. - */ -int -SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain) -{ - HRESULT ret; - DIPROPDWORD dipdw; - - /* Create the weird structure thingy. */ - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = gain * 100; /* 0 to 10,000 */ - - /* Try to set the autocenter. */ - ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, - DIPROP_FFGAIN, &dipdw.diph); - if (FAILED(ret)) { - return DI_SetError("Setting gain", ret); - } - - return 0; -} - - -/* - * Sets the autocentering. - */ -int -SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) -{ - HRESULT ret; - DIPROPDWORD dipdw; - - /* Create the weird structure thingy. */ - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = (autocenter == 0) ? DIPROPAUTOCENTER_OFF : - DIPROPAUTOCENTER_ON; - - /* Try to set the autocenter. */ - ret = IDirectInputDevice8_SetProperty(haptic->hwdata->device, - DIPROP_AUTOCENTER, &dipdw.diph); - if (FAILED(ret)) { - return DI_SetError("Setting autocenter", ret); - } - - return 0; -} - - -/* - * Pauses the device. - */ -int -SDL_SYS_HapticPause(SDL_Haptic * haptic) -{ - HRESULT ret; - - /* Pause the device. */ - ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, - DISFFC_PAUSE); - if (FAILED(ret)) { - return DI_SetError("Pausing the device", ret); - } - - return 0; -} - - -/* - * Pauses the device. - */ -int -SDL_SYS_HapticUnpause(SDL_Haptic * haptic) -{ - HRESULT ret; - - /* Unpause the device. */ - ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, - DISFFC_CONTINUE); - if (FAILED(ret)) { - return DI_SetError("Pausing the device", ret); - } - - return 0; -} - - -/* - * Stops all the playing effects on the device. - */ -int -SDL_SYS_HapticStopAll(SDL_Haptic * haptic) -{ - HRESULT ret; - - if (haptic->hwdata->bXInputHaptic) { - XINPUT_VIBRATION vibration = { 0, 0 }; - SDL_LockMutex(haptic->hwdata->mutex); - haptic->hwdata->stopTicks = 0; - SDL_UnlockMutex(haptic->hwdata->mutex); - return (XINPUTSETSTATE(haptic->hwdata->userid, &vibration) == ERROR_SUCCESS) ? 0 : -1; - } - - /* Try to stop the effects. */ - ret = IDirectInputDevice8_SendForceFeedbackCommand(haptic->hwdata->device, - DISFFC_STOPALL); - if (FAILED(ret)) { - return DI_SetError("Stopping the device", ret); - } - - return 0; -} - - -/* !!! FIXME: this is a hack, remove this later. */ -/* Since XInput doesn't offer a way to vibrate for X time, we hook into - * SDL_PumpEvents() to check if it's time to stop vibrating with some - * frequency. - * In practice, this works for 99% of use cases. But in an ideal world, - * we do this in a separate thread so that: - * - we aren't bound to when the app chooses to pump the event queue. - * - we aren't adding more polling to the event queue - * - we can emulate all the haptic effects correctly (start on a delay, - * mix multiple effects, etc). - * - * Mostly, this is here to get rumbling to work, and all the other features - * are absent in the XInput path for now. :( - */ -static int SDLCALL -SDL_RunXInputHaptic(void *arg) -{ - struct haptic_hwdata *hwdata = (struct haptic_hwdata *) arg; - - while (!hwdata->stopThread) { - SDL_Delay(50); - SDL_LockMutex(hwdata->mutex); - /* If we're currently running and need to stop... */ - if (hwdata->stopTicks) { - if ((hwdata->stopTicks != SDL_HAPTIC_INFINITY) && SDL_TICKS_PASSED(SDL_GetTicks(), hwdata->stopTicks)) { - XINPUT_VIBRATION vibration = { 0, 0 }; - hwdata->stopTicks = 0; - XINPUTSETSTATE(hwdata->userid, &vibration); - } - } - SDL_UnlockMutex(hwdata->mutex); - } - - return 0; -} - -#endif /* SDL_HAPTIC_DINPUT */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic_c.h b/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic_c.h deleted file mode 100644 index 1e0fa190d7..0000000000 --- a/Engine/lib/sdl/src/haptic/windows/SDL_syshaptic_c.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -extern int DirectInputHaptic_MaybeAddDevice(const DIDEVICEINSTANCE *pdidInstance); -extern int DirectInputHaptic_MaybeRemoveDevice(const DIDEVICEINSTANCE *pdidInstance); -extern int XInputHaptic_MaybeAddDevice(const DWORD dwUserid); -extern int XInputHaptic_MaybeRemoveDevice(const DWORD dwUserid); - -/* vi: set ts=4 sw=4 expandtab: */ - diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic.c b/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic.c new file mode 100644 index 0000000000..0c038fb1b9 --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic.c @@ -0,0 +1,449 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_HAPTIC_DINPUT || SDL_HAPTIC_XINPUT + +#include "SDL_assert.h" +#include "SDL_thread.h" +#include "SDL_mutex.h" +#include "SDL_timer.h" +#include "SDL_hints.h" +#include "SDL_haptic.h" +#include "../SDL_syshaptic.h" +#include "SDL_joystick.h" +#include "../../joystick/SDL_sysjoystick.h" /* For the real SDL_Joystick */ +#include "../../joystick/windows/SDL_windowsjoystick_c.h" /* For joystick hwdata */ +#include "../../joystick/windows/SDL_xinputjoystick_c.h" /* For xinput rumble */ + +#include "SDL_windowshaptic_c.h" +#include "SDL_dinputhaptic_c.h" +#include "SDL_xinputhaptic_c.h" + + +/* + * Internal stuff. + */ +SDL_hapticlist_item *SDL_hapticlist = NULL; +static SDL_hapticlist_item *SDL_hapticlist_tail = NULL; +static int numhaptics = 0; + + +/* + * Initializes the haptic subsystem. + */ +int +SDL_SYS_HapticInit(void) +{ + if (SDL_DINPUT_HapticInit() < 0) { + return -1; + } + if (SDL_XINPUT_HapticInit() < 0) { + return -1; + } + return numhaptics; +} + +int +SDL_SYS_AddHapticDevice(SDL_hapticlist_item *item) +{ + if (SDL_hapticlist_tail == NULL) { + SDL_hapticlist = SDL_hapticlist_tail = item; + } else { + SDL_hapticlist_tail->next = item; + SDL_hapticlist_tail = item; + } + + /* Device has been added. */ + ++numhaptics; + + return numhaptics; +} + +int +SDL_SYS_RemoveHapticDevice(SDL_hapticlist_item *prev, SDL_hapticlist_item *item) +{ + const int retval = item->haptic ? item->haptic->index : -1; + if (prev != NULL) { + prev->next = item->next; + } else { + SDL_assert(SDL_hapticlist == item); + SDL_hapticlist = item->next; + } + if (item == SDL_hapticlist_tail) { + SDL_hapticlist_tail = prev; + } + --numhaptics; + /* !!! TODO: Send a haptic remove event? */ + SDL_free(item); + return retval; +} + +int +SDL_SYS_NumHaptics() +{ + return numhaptics; +} + +static SDL_hapticlist_item * +HapticByDevIndex(int device_index) +{ + SDL_hapticlist_item *item = SDL_hapticlist; + + if ((device_index < 0) || (device_index >= numhaptics)) { + return NULL; + } + + while (device_index > 0) { + SDL_assert(item != NULL); + --device_index; + item = item->next; + } + return item; +} + +/* + * Return the name of a haptic device, does not need to be opened. + */ +const char * +SDL_SYS_HapticName(int index) +{ + SDL_hapticlist_item *item = HapticByDevIndex(index); + return item->name; +} + +/* + * Opens a haptic device for usage. + */ +int +SDL_SYS_HapticOpen(SDL_Haptic * haptic) +{ + SDL_hapticlist_item *item = HapticByDevIndex(haptic->index); + if (item->bXInputHaptic) { + return SDL_XINPUT_HapticOpen(haptic, item); + } else { + return SDL_DINPUT_HapticOpen(haptic, item); + } +} + + +/* + * Opens a haptic device from first mouse it finds for usage. + */ +int +SDL_SYS_HapticMouse(void) +{ +#if SDL_HAPTIC_DINPUT + SDL_hapticlist_item *item; + int index = 0; + + /* Grab the first mouse haptic device we find. */ + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (item->capabilities.dwDevType == DI8DEVCLASS_POINTER ) { + return index; + } + ++index; + } +#endif /* SDL_HAPTIC_DINPUT */ + return -1; +} + + +/* + * Checks to see if a joystick has haptic features. + */ +int +SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick) +{ + const struct joystick_hwdata *hwdata = joystick->hwdata; +#if SDL_HAPTIC_XINPUT + if (hwdata->bXInputHaptic) { + return 1; + } +#endif +#if SDL_HAPTIC_DINPUT + if (hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) { + return 1; + } +#endif + return 0; +} + +/* + * Checks to see if the haptic device and joystick are in reality the same. + */ +int +SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + if (joystick->hwdata->bXInputHaptic != haptic->hwdata->bXInputHaptic) { + return 0; /* one is XInput, one is not; not the same device. */ + } else if (joystick->hwdata->bXInputHaptic) { + return SDL_XINPUT_JoystickSameHaptic(haptic, joystick); + } else { + return SDL_DINPUT_JoystickSameHaptic(haptic, joystick); + } +} + +/* + * Opens a SDL_Haptic from a SDL_Joystick. + */ +int +SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + if (joystick->hwdata->bXInputDevice) { + return SDL_XINPUT_HapticOpenFromJoystick(haptic, joystick); + } else { + return SDL_DINPUT_HapticOpenFromJoystick(haptic, joystick); + } +} + +/* + * Closes the haptic device. + */ +void +SDL_SYS_HapticClose(SDL_Haptic * haptic) +{ + if (haptic->hwdata) { + + /* Free effects. */ + SDL_free(haptic->effects); + haptic->effects = NULL; + haptic->neffects = 0; + + /* Clean up */ + if (haptic->hwdata->bXInputHaptic) { + SDL_XINPUT_HapticClose(haptic); + } else { + SDL_DINPUT_HapticClose(haptic); + } + + /* Free */ + SDL_free(haptic->hwdata); + haptic->hwdata = NULL; + } +} + +/* + * Clean up after system specific haptic stuff + */ +void +SDL_SYS_HapticQuit(void) +{ + SDL_hapticlist_item *item; + SDL_hapticlist_item *next = NULL; + SDL_Haptic *hapticitem = NULL; + + extern SDL_Haptic *SDL_haptics; + for (hapticitem = SDL_haptics; hapticitem; hapticitem = hapticitem->next) { + if ((hapticitem->hwdata->bXInputHaptic) && (hapticitem->hwdata->thread)) { + /* we _have_ to stop the thread before we free the XInput DLL! */ + hapticitem->hwdata->stopThread = 1; + SDL_WaitThread(hapticitem->hwdata->thread, NULL); + hapticitem->hwdata->thread = NULL; + } + } + + for (item = SDL_hapticlist; item; item = next) { + /* Opened and not closed haptics are leaked, this is on purpose. + * Close your haptic devices after usage. */ + /* !!! FIXME: (...is leaking on purpose a good idea?) - No, of course not. */ + next = item->next; + SDL_free(item->name); + SDL_free(item); + } + + SDL_XINPUT_HapticQuit(); + SDL_DINPUT_HapticQuit(); + + numhaptics = 0; + SDL_hapticlist = NULL; + SDL_hapticlist_tail = NULL; +} + +/* + * Creates a new haptic effect. + */ +int +SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, + SDL_HapticEffect * base) +{ + int result; + + /* Alloc the effect. */ + effect->hweffect = (struct haptic_hweffect *) + SDL_malloc(sizeof(struct haptic_hweffect)); + if (effect->hweffect == NULL) { + SDL_OutOfMemory(); + return -1; + } + SDL_zerop(effect->hweffect); + + if (haptic->hwdata->bXInputHaptic) { + result = SDL_XINPUT_HapticNewEffect(haptic, effect, base); + } else { + result = SDL_DINPUT_HapticNewEffect(haptic, effect, base); + } + if (result < 0) { + SDL_free(effect->hweffect); + effect->hweffect = NULL; + } + return result; +} + +/* + * Updates an effect. + */ +int +SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic, + struct haptic_effect *effect, + SDL_HapticEffect * data) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticUpdateEffect(haptic, effect, data); + } else { + return SDL_DINPUT_HapticUpdateEffect(haptic, effect, data); + } +} + +/* + * Runs an effect. + */ +int +SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, + Uint32 iterations) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticRunEffect(haptic, effect, iterations); + } else { + return SDL_DINPUT_HapticRunEffect(haptic, effect, iterations); + } +} + +/* + * Stops an effect. + */ +int +SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticStopEffect(haptic, effect); + } else { + return SDL_DINPUT_HapticStopEffect(haptic, effect); + } +} + +/* + * Frees the effect. + */ +void +SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + if (haptic->hwdata->bXInputHaptic) { + SDL_XINPUT_HapticDestroyEffect(haptic, effect); + } else { + SDL_DINPUT_HapticDestroyEffect(haptic, effect); + } + SDL_free(effect->hweffect); + effect->hweffect = NULL; +} + +/* + * Gets the status of a haptic effect. + */ +int +SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, + struct haptic_effect *effect) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticGetEffectStatus(haptic, effect); + } else { + return SDL_DINPUT_HapticGetEffectStatus(haptic, effect); + } +} + +/* + * Sets the gain. + */ +int +SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticSetGain(haptic, gain); + } else { + return SDL_DINPUT_HapticSetGain(haptic, gain); + } +} + +/* + * Sets the autocentering. + */ +int +SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticSetAutocenter(haptic, autocenter); + } else { + return SDL_DINPUT_HapticSetAutocenter(haptic, autocenter); + } +} + +/* + * Pauses the device. + */ +int +SDL_SYS_HapticPause(SDL_Haptic * haptic) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticPause(haptic); + } else { + return SDL_DINPUT_HapticPause(haptic); + } +} + +/* + * Pauses the device. + */ +int +SDL_SYS_HapticUnpause(SDL_Haptic * haptic) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticUnpause(haptic); + } else { + return SDL_DINPUT_HapticUnpause(haptic); + } +} + +/* + * Stops all the playing effects on the device. + */ +int +SDL_SYS_HapticStopAll(SDL_Haptic * haptic) +{ + if (haptic->hwdata->bXInputHaptic) { + return SDL_XINPUT_HapticStopAll(haptic); + } else { + return SDL_DINPUT_HapticStopAll(haptic); + } +} + +#endif /* SDL_HAPTIC_DINPUT || SDL_HAPTIC_XINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic_c.h b/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic_c.h new file mode 100644 index 0000000000..89fdd2cb9c --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic_c.h @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_windowshaptic_c_h +#define _SDL_windowshaptic_c_h + +#include "SDL_thread.h" +#include "../SDL_syshaptic.h" +#include "../../core/windows/SDL_directx.h" +#include "../../core/windows/SDL_xinput.h" + +/* + * Haptic system hardware data. + */ +struct haptic_hwdata +{ +#if SDL_HAPTIC_DINPUT + LPDIRECTINPUTDEVICE8 device; +#endif + DWORD axes[3]; /* Axes to use. */ + SDL_bool is_joystick; /* Device is loaded as joystick. */ + Uint8 bXInputHaptic; /* Supports force feedback via XInput. */ + Uint8 userid; /* XInput userid index for this joystick */ + SDL_Thread *thread; + SDL_mutex *mutex; + volatile Uint32 stopTicks; + volatile int stopThread; +}; + + +/* + * Haptic system effect data. + */ +struct haptic_hweffect +{ +#if SDL_HAPTIC_DINPUT + DIEFFECT effect; + LPDIRECTINPUTEFFECT ref; +#endif +#if SDL_HAPTIC_XINPUT + XINPUT_VIBRATION vibration; +#endif +}; + +/* +* List of available haptic devices. +*/ +typedef struct SDL_hapticlist_item +{ + char *name; + SDL_Haptic *haptic; +#if SDL_HAPTIC_DINPUT + DIDEVICEINSTANCE instance; + DIDEVCAPS capabilities; +#endif + SDL_bool bXInputHaptic; /* Supports force feedback via XInput. */ + Uint8 userid; /* XInput userid index for this joystick */ + struct SDL_hapticlist_item *next; +} SDL_hapticlist_item; + +extern SDL_hapticlist_item *SDL_hapticlist; + +extern int SDL_SYS_AddHapticDevice(SDL_hapticlist_item *item); +extern int SDL_SYS_RemoveHapticDevice(SDL_hapticlist_item *prev, SDL_hapticlist_item *item); + +#endif /* _SDL_windowshaptic_c_h */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic.c b/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic.c new file mode 100644 index 0000000000..a46ae5f97d --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic.c @@ -0,0 +1,495 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_error.h" +#include "SDL_haptic.h" +#include "../SDL_syshaptic.h" + +#if SDL_HAPTIC_XINPUT + +#include "SDL_assert.h" +#include "SDL_hints.h" +#include "SDL_timer.h" +#include "SDL_windowshaptic_c.h" +#include "SDL_xinputhaptic_c.h" +#include "../../core/windows/SDL_xinput.h" +#include "../../joystick/windows/SDL_windowsjoystick_c.h" + +/* + * Internal stuff. + */ +static SDL_bool loaded_xinput = SDL_FALSE; + + +int +SDL_XINPUT_HapticInit(void) +{ + const char *env = SDL_GetHint(SDL_HINT_XINPUT_ENABLED); + if (!env || SDL_atoi(env)) { + loaded_xinput = (WIN_LoadXInputDLL() == 0); + } + + if (loaded_xinput) { + DWORD i; + for (i = 0; i < XUSER_MAX_COUNT; i++) { + SDL_XINPUT_MaybeAddDevice(i); + } + } + return 0; +} + +int +SDL_XINPUT_MaybeAddDevice(const DWORD dwUserid) +{ + const Uint8 userid = (Uint8)dwUserid; + SDL_hapticlist_item *item; + XINPUT_VIBRATION state; + + if ((!loaded_xinput) || (dwUserid >= XUSER_MAX_COUNT)) { + return -1; + } + + /* Make sure we don't already have it */ + for (item = SDL_hapticlist; item; item = item->next) { + if (item->bXInputHaptic && item->userid == userid) { + return -1; /* Already added */ + } + } + + SDL_zero(state); + if (XINPUTSETSTATE(dwUserid, &state) != ERROR_SUCCESS) { + return -1; /* no force feedback on this device. */ + } + + item = (SDL_hapticlist_item *)SDL_malloc(sizeof(SDL_hapticlist_item)); + if (item == NULL) { + return SDL_OutOfMemory(); + } + + SDL_zerop(item); + + /* !!! FIXME: I'm not bothering to query for a real name right now (can we even?) */ + { + char buf[64]; + SDL_snprintf(buf, sizeof(buf), "XInput Controller #%u", (unsigned int)(userid + 1)); + item->name = SDL_strdup(buf); + } + + if (!item->name) { + SDL_free(item); + return -1; + } + + /* Copy the instance over, useful for creating devices. */ + item->bXInputHaptic = SDL_TRUE; + item->userid = userid; + + return SDL_SYS_AddHapticDevice(item); +} + +int +SDL_XINPUT_MaybeRemoveDevice(const DWORD dwUserid) +{ + const Uint8 userid = (Uint8)dwUserid; + SDL_hapticlist_item *item; + SDL_hapticlist_item *prev = NULL; + + if ((!loaded_xinput) || (dwUserid >= XUSER_MAX_COUNT)) { + return -1; + } + + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (item->bXInputHaptic && item->userid == userid) { + /* found it, remove it. */ + return SDL_SYS_RemoveHapticDevice(prev, item); + } + prev = item; + } + return -1; +} + +/* !!! FIXME: this is a hack, remove this later. */ +/* Since XInput doesn't offer a way to vibrate for X time, we hook into + * SDL_PumpEvents() to check if it's time to stop vibrating with some + * frequency. + * In practice, this works for 99% of use cases. But in an ideal world, + * we do this in a separate thread so that: + * - we aren't bound to when the app chooses to pump the event queue. + * - we aren't adding more polling to the event queue + * - we can emulate all the haptic effects correctly (start on a delay, + * mix multiple effects, etc). + * + * Mostly, this is here to get rumbling to work, and all the other features + * are absent in the XInput path for now. :( + */ +static int SDLCALL +SDL_RunXInputHaptic(void *arg) +{ + struct haptic_hwdata *hwdata = (struct haptic_hwdata *) arg; + + while (!hwdata->stopThread) { + SDL_Delay(50); + SDL_LockMutex(hwdata->mutex); + /* If we're currently running and need to stop... */ + if (hwdata->stopTicks) { + if ((hwdata->stopTicks != SDL_HAPTIC_INFINITY) && SDL_TICKS_PASSED(SDL_GetTicks(), hwdata->stopTicks)) { + XINPUT_VIBRATION vibration = { 0, 0 }; + hwdata->stopTicks = 0; + XINPUTSETSTATE(hwdata->userid, &vibration); + } + } + SDL_UnlockMutex(hwdata->mutex); + } + + return 0; +} + +static int +SDL_XINPUT_HapticOpenFromUserIndex(SDL_Haptic *haptic, const Uint8 userid) +{ + char threadName[32]; + XINPUT_VIBRATION vibration = { 0, 0 }; /* stop any current vibration */ + XINPUTSETSTATE(userid, &vibration); + + haptic->supported = SDL_HAPTIC_LEFTRIGHT; + + haptic->neffects = 1; + haptic->nplaying = 1; + + /* Prepare effects memory. */ + haptic->effects = (struct haptic_effect *) + SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects); + if (haptic->effects == NULL) { + return SDL_OutOfMemory(); + } + /* Clear the memory */ + SDL_memset(haptic->effects, 0, + sizeof(struct haptic_effect) * haptic->neffects); + + haptic->hwdata = (struct haptic_hwdata *) SDL_malloc(sizeof(*haptic->hwdata)); + if (haptic->hwdata == NULL) { + SDL_free(haptic->effects); + haptic->effects = NULL; + return SDL_OutOfMemory(); + } + SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); + + haptic->hwdata->bXInputHaptic = 1; + haptic->hwdata->userid = userid; + + haptic->hwdata->mutex = SDL_CreateMutex(); + if (haptic->hwdata->mutex == NULL) { + SDL_free(haptic->effects); + SDL_free(haptic->hwdata); + haptic->effects = NULL; + return SDL_SetError("Couldn't create XInput haptic mutex"); + } + + SDL_snprintf(threadName, sizeof(threadName), "SDLXInputDev%d", (int)userid); + +#if defined(__WIN32__) && !defined(HAVE_LIBC) /* !!! FIXME: this is nasty. */ +#undef SDL_CreateThread +#if SDL_DYNAMIC_API + haptic->hwdata->thread = SDL_CreateThread_REAL(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); +#else + haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata, NULL, NULL); +#endif +#else + haptic->hwdata->thread = SDL_CreateThread(SDL_RunXInputHaptic, threadName, haptic->hwdata); +#endif + if (haptic->hwdata->thread == NULL) { + SDL_DestroyMutex(haptic->hwdata->mutex); + SDL_free(haptic->effects); + SDL_free(haptic->hwdata); + haptic->effects = NULL; + return SDL_SetError("Couldn't create XInput haptic thread"); + } + + return 0; +} + +int +SDL_XINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item) +{ + return SDL_XINPUT_HapticOpenFromUserIndex(haptic, item->userid); +} + +int +SDL_XINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + return (haptic->hwdata->userid == joystick->hwdata->userid); +} + +int +SDL_XINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + SDL_hapticlist_item *item; + int index = 0; + + /* Since it comes from a joystick we have to try to match it with a haptic device on our haptic list. */ + for (item = SDL_hapticlist; item != NULL; item = item->next) { + if (item->bXInputHaptic && item->userid == joystick->hwdata->userid) { + haptic->index = index; + return SDL_XINPUT_HapticOpenFromUserIndex(haptic, joystick->hwdata->userid); + } + ++index; + } + + SDL_SetError("Couldn't find joystick in haptic device list"); + return -1; +} + +void +SDL_XINPUT_HapticClose(SDL_Haptic * haptic) +{ + haptic->hwdata->stopThread = 1; + SDL_WaitThread(haptic->hwdata->thread, NULL); + SDL_DestroyMutex(haptic->hwdata->mutex); +} + +void +SDL_XINPUT_HapticQuit(void) +{ + if (loaded_xinput) { + WIN_UnloadXInputDLL(); + loaded_xinput = SDL_FALSE; + } +} + +int +SDL_XINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base) +{ + SDL_assert(base->type == SDL_HAPTIC_LEFTRIGHT); /* should catch this at higher level */ + return SDL_XINPUT_HapticUpdateEffect(haptic, effect, base); +} + +int +SDL_XINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data) +{ + XINPUT_VIBRATION *vib = &effect->hweffect->vibration; + SDL_assert(data->type == SDL_HAPTIC_LEFTRIGHT); + vib->wLeftMotorSpeed = data->leftright.large_magnitude; + vib->wRightMotorSpeed = data->leftright.small_magnitude; + SDL_LockMutex(haptic->hwdata->mutex); + if (haptic->hwdata->stopTicks) { /* running right now? Update it. */ + XINPUTSETSTATE(haptic->hwdata->userid, vib); + } + SDL_UnlockMutex(haptic->hwdata->mutex); + return 0; +} + +int +SDL_XINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations) +{ + XINPUT_VIBRATION *vib = &effect->hweffect->vibration; + SDL_assert(effect->effect.type == SDL_HAPTIC_LEFTRIGHT); /* should catch this at higher level */ + SDL_LockMutex(haptic->hwdata->mutex); + if (effect->effect.leftright.length == SDL_HAPTIC_INFINITY || iterations == SDL_HAPTIC_INFINITY) { + haptic->hwdata->stopTicks = SDL_HAPTIC_INFINITY; + } else if ((!effect->effect.leftright.length) || (!iterations)) { + /* do nothing. Effect runs for zero milliseconds. */ + } else { + haptic->hwdata->stopTicks = SDL_GetTicks() + (effect->effect.leftright.length * iterations); + if ((haptic->hwdata->stopTicks == SDL_HAPTIC_INFINITY) || (haptic->hwdata->stopTicks == 0)) { + haptic->hwdata->stopTicks = 1; /* fix edge cases. */ + } + } + SDL_UnlockMutex(haptic->hwdata->mutex); + return (XINPUTSETSTATE(haptic->hwdata->userid, vib) == ERROR_SUCCESS) ? 0 : -1; +} + +int +SDL_XINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + XINPUT_VIBRATION vibration = { 0, 0 }; + SDL_LockMutex(haptic->hwdata->mutex); + haptic->hwdata->stopTicks = 0; + SDL_UnlockMutex(haptic->hwdata->mutex); + return (XINPUTSETSTATE(haptic->hwdata->userid, &vibration) == ERROR_SUCCESS) ? 0 : -1; +} + +void +SDL_XINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + SDL_XINPUT_HapticStopEffect(haptic, effect); +} + +int +SDL_XINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticPause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticUnpause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticStopAll(SDL_Haptic * haptic) +{ + XINPUT_VIBRATION vibration = { 0, 0 }; + SDL_LockMutex(haptic->hwdata->mutex); + haptic->hwdata->stopTicks = 0; + SDL_UnlockMutex(haptic->hwdata->mutex); + return (XINPUTSETSTATE(haptic->hwdata->userid, &vibration) == ERROR_SUCCESS) ? 0 : -1; +} + +#else /* !SDL_HAPTIC_XINPUT */ + +#include "../../core/windows/SDL_windows.h" + +typedef struct SDL_hapticlist_item SDL_hapticlist_item; + +int +SDL_XINPUT_HapticInit(void) +{ + return 0; +} + +int +SDL_XINPUT_MaybeAddDevice(const DWORD dwUserid) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_MaybeRemoveDevice(const DWORD dwUserid) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) +{ + return SDL_Unsupported(); +} + +void +SDL_XINPUT_HapticClose(SDL_Haptic * haptic) +{ +} + +void +SDL_XINPUT_HapticQuit(void) +{ +} + +int +SDL_XINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + return SDL_Unsupported(); +} + +void +SDL_XINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect) +{ +} + +int +SDL_XINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticSetGain(SDL_Haptic * haptic, int gain) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticPause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticUnpause(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +int +SDL_XINPUT_HapticStopAll(SDL_Haptic * haptic) +{ + return SDL_Unsupported(); +} + +#endif /* SDL_HAPTIC_XINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic_c.h b/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic_c.h new file mode 100644 index 0000000000..f9a0c85b24 --- /dev/null +++ b/Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic_c.h @@ -0,0 +1,47 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_haptic.h" +#include "SDL_windowshaptic_c.h" + + +extern int SDL_XINPUT_HapticInit(void); +extern int SDL_XINPUT_MaybeAddDevice(const DWORD dwUserid); +extern int SDL_XINPUT_MaybeRemoveDevice(const DWORD dwUserid); +extern int SDL_XINPUT_HapticOpen(SDL_Haptic * haptic, SDL_hapticlist_item *item); +extern int SDL_XINPUT_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick); +extern int SDL_XINPUT_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick); +extern void SDL_XINPUT_HapticClose(SDL_Haptic * haptic); +extern void SDL_XINPUT_HapticQuit(void); +extern int SDL_XINPUT_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * base); +extern int SDL_XINPUT_HapticUpdateEffect(SDL_Haptic * haptic, struct haptic_effect *effect, SDL_HapticEffect * data); +extern int SDL_XINPUT_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect *effect, Uint32 iterations); +extern int SDL_XINPUT_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect *effect); +extern void SDL_XINPUT_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect *effect); +extern int SDL_XINPUT_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect *effect); +extern int SDL_XINPUT_HapticSetGain(SDL_Haptic * haptic, int gain); +extern int SDL_XINPUT_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter); +extern int SDL_XINPUT_HapticPause(SDL_Haptic * haptic); +extern int SDL_XINPUT_HapticUnpause(SDL_Haptic * haptic); +extern int SDL_XINPUT_HapticStopAll(SDL_Haptic * haptic); + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/SDL_gamecontroller.c b/Engine/lib/sdl/src/joystick/SDL_gamecontroller.c index 8361b29fbf..0fd1ef4a7a 100644 --- a/Engine/lib/sdl/src/joystick/SDL_gamecontroller.c +++ b/Engine/lib/sdl/src/joystick/SDL_gamecontroller.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -88,9 +88,8 @@ typedef struct _ControllerMapping_t } ControllerMapping_t; static ControllerMapping_t *s_pSupportedControllers = NULL; -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) static ControllerMapping_t *s_pXInputMapping = NULL; -#endif +static ControllerMapping_t *s_pEmscriptenMapping = NULL; /* The SDL game controller structure */ struct _SDL_GameController @@ -111,25 +110,20 @@ int SDL_PrivateGameControllerButton(SDL_GameController * gamecontroller, SDL_Gam */ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) { - switch( event->type ) - { + switch(event->type) { case SDL_JOYAXISMOTION: { SDL_GameController *controllerlist; - if ( event->jaxis.axis >= k_nMaxReverseEntries ) break; + if (event->jaxis.axis >= k_nMaxReverseEntries) break; controllerlist = SDL_gamecontrollers; - while ( controllerlist ) - { - if ( controllerlist->joystick->instance_id == event->jaxis.which ) - { - if ( controllerlist->mapping.raxes[event->jaxis.axis] >= 0 ) /* simple axis to axis, send it through */ - { + while (controllerlist) { + if (controllerlist->joystick->instance_id == event->jaxis.which) { + if (controllerlist->mapping.raxes[event->jaxis.axis] >= 0) /* simple axis to axis, send it through */ { SDL_GameControllerAxis axis = controllerlist->mapping.raxes[event->jaxis.axis]; Sint16 value = event->jaxis.value; - switch (axis) - { + switch (axis) { case SDL_CONTROLLER_AXIS_TRIGGERLEFT: case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: /* Shift it to be 0 - 32767. */ @@ -137,11 +131,9 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) default: break; } - SDL_PrivateGameControllerAxis( controllerlist, axis, value ); - } - else if ( controllerlist->mapping.raxesasbutton[event->jaxis.axis] >= 0 ) /* simulate an axis as a button */ - { - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.raxesasbutton[event->jaxis.axis], ABS(event->jaxis.value) > 32768/2 ? SDL_PRESSED : SDL_RELEASED ); + SDL_PrivateGameControllerAxis(controllerlist, axis, value); + } else if (controllerlist->mapping.raxesasbutton[event->jaxis.axis] >= 0) { /* simulate an axis as a button */ + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.raxesasbutton[event->jaxis.axis], ABS(event->jaxis.value) > 32768/2 ? SDL_PRESSED : SDL_RELEASED); } break; } @@ -154,20 +146,15 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) { SDL_GameController *controllerlist; - if ( event->jbutton.button >= k_nMaxReverseEntries ) break; + if (event->jbutton.button >= k_nMaxReverseEntries) break; controllerlist = SDL_gamecontrollers; - while ( controllerlist ) - { - if ( controllerlist->joystick->instance_id == event->jbutton.which ) - { - if ( controllerlist->mapping.rbuttons[event->jbutton.button] >= 0 ) /* simple button as button */ - { - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rbuttons[event->jbutton.button], event->jbutton.state ); - } - else if ( controllerlist->mapping.rbuttonasaxis[event->jbutton.button] >= 0 ) /* an button pretending to be an axis */ - { - SDL_PrivateGameControllerAxis( controllerlist, controllerlist->mapping.rbuttonasaxis[event->jbutton.button], event->jbutton.state > 0 ? 32767 : 0 ); + while (controllerlist) { + if (controllerlist->joystick->instance_id == event->jbutton.which) { + if (controllerlist->mapping.rbuttons[event->jbutton.button] >= 0) { /* simple button as button */ + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rbuttons[event->jbutton.button], event->jbutton.state); + } else if (controllerlist->mapping.rbuttonasaxis[event->jbutton.button] >= 0) { /* an button pretending to be an axis */ + SDL_PrivateGameControllerAxis(controllerlist, controllerlist->mapping.rbuttonasaxis[event->jbutton.button], event->jbutton.state > 0 ? 32767 : 0); } break; } @@ -179,39 +166,37 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) { SDL_GameController *controllerlist; - if ( event->jhat.hat >= 4 ) break; + if (event->jhat.hat >= 4) break; controllerlist = SDL_gamecontrollers; - while ( controllerlist ) - { - if ( controllerlist->joystick->instance_id == event->jhat.which ) - { + while (controllerlist) { + if (controllerlist->joystick->instance_id == event->jhat.which) { Uint8 bSame = controllerlist->hatState[event->jhat.hat] & event->jhat.value; /* Get list of removed bits (button release) */ Uint8 bChanged = controllerlist->hatState[event->jhat.hat] ^ bSame; /* the hat idx in the high nibble */ int bHighHat = event->jhat.hat << 4; - if ( bChanged & SDL_HAT_DOWN ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_RELEASED ); - if ( bChanged & SDL_HAT_UP ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_RELEASED ); - if ( bChanged & SDL_HAT_LEFT ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_RELEASED ); - if ( bChanged & SDL_HAT_RIGHT ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_RELEASED ); + if (bChanged & SDL_HAT_DOWN) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_RELEASED); + if (bChanged & SDL_HAT_UP) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_RELEASED); + if (bChanged & SDL_HAT_LEFT) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_RELEASED); + if (bChanged & SDL_HAT_RIGHT) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_RELEASED); /* Get list of added bits (button press) */ bChanged = event->jhat.value ^ bSame; - if ( bChanged & SDL_HAT_DOWN ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_PRESSED ); - if ( bChanged & SDL_HAT_UP ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_PRESSED ); - if ( bChanged & SDL_HAT_LEFT ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_PRESSED ); - if ( bChanged & SDL_HAT_RIGHT ) - SDL_PrivateGameControllerButton( controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_PRESSED ); + if (bChanged & SDL_HAT_DOWN) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_DOWN], SDL_PRESSED); + if (bChanged & SDL_HAT_UP) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_UP], SDL_PRESSED); + if (bChanged & SDL_HAT_LEFT) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_LEFT], SDL_PRESSED); + if (bChanged & SDL_HAT_RIGHT) + SDL_PrivateGameControllerButton(controllerlist, controllerlist->mapping.rhatasbutton[bHighHat | SDL_HAT_RIGHT], SDL_PRESSED); /* update our state cache */ controllerlist->hatState[event->jhat.hat] = event->jhat.value; @@ -224,8 +209,7 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) break; case SDL_JOYDEVICEADDED: { - if ( SDL_IsGameController(event->jdevice.which ) ) - { + if (SDL_IsGameController(event->jdevice.which)) { SDL_Event deviceevent; deviceevent.type = SDL_CONTROLLERDEVICEADDED; deviceevent.cdevice.which = event->jdevice.which; @@ -236,10 +220,8 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) case SDL_JOYDEVICEREMOVED: { SDL_GameController *controllerlist = SDL_gamecontrollers; - while ( controllerlist ) - { - if ( controllerlist->joystick->instance_id == event->jdevice.which ) - { + while (controllerlist) { + if (controllerlist->joystick->instance_id == event->jdevice.which) { SDL_Event deviceevent; deviceevent.type = SDL_CONTROLLERDEVICEREMOVED; deviceevent.cdevice.which = event->jdevice.which; @@ -263,10 +245,8 @@ int SDL_GameControllerEventWatcher(void *userdata, SDL_Event * event) ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *guid) { ControllerMapping_t *pSupportedController = s_pSupportedControllers; - while ( pSupportedController ) - { - if ( !SDL_memcmp( guid, &pSupportedController->guid, sizeof(*guid) ) ) - { + while (pSupportedController) { + if (SDL_memcmp(guid, &pSupportedController->guid, sizeof(*guid)) == 0) { return pSupportedController; } pSupportedController = pSupportedController->next; @@ -274,24 +254,6 @@ ControllerMapping_t *SDL_PrivateGetControllerMappingForGUID(SDL_JoystickGUID *gu return NULL; } -/* - * Helper function to determine pre-calculated offset to certain joystick mappings - */ -ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index) -{ -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) - if ( SDL_SYS_IsXInputDeviceIndex(device_index) && s_pXInputMapping ) - { - return s_pXInputMapping; - } - else -#endif - { - SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID( device_index ); - return SDL_PrivateGetControllerMappingForGUID(&jGUID); - } -} - static const char* map_StringForControllerAxis[] = { "leftx", "lefty", @@ -305,15 +267,14 @@ static const char* map_StringForControllerAxis[] = { /* * convert a string to its enum equivalent */ -SDL_GameControllerAxis SDL_GameControllerGetAxisFromString( const char *pchString ) +SDL_GameControllerAxis SDL_GameControllerGetAxisFromString(const char *pchString) { int entry; - if ( !pchString || !pchString[0] ) + if (!pchString || !pchString[0]) return SDL_CONTROLLER_AXIS_INVALID; - for ( entry = 0; map_StringForControllerAxis[entry]; ++entry) - { - if ( !SDL_strcasecmp( pchString, map_StringForControllerAxis[entry] ) ) + for (entry = 0; map_StringForControllerAxis[entry]; ++entry) { + if (!SDL_strcasecmp(pchString, map_StringForControllerAxis[entry])) return entry; } return SDL_CONTROLLER_AXIS_INVALID; @@ -322,10 +283,9 @@ SDL_GameControllerAxis SDL_GameControllerGetAxisFromString( const char *pchStrin /* * convert an enum to its string equivalent */ -const char* SDL_GameControllerGetStringForAxis( SDL_GameControllerAxis axis ) +const char* SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis) { - if (axis > SDL_CONTROLLER_AXIS_INVALID && axis < SDL_CONTROLLER_AXIS_MAX) - { + if (axis > SDL_CONTROLLER_AXIS_INVALID && axis < SDL_CONTROLLER_AXIS_MAX) { return map_StringForControllerAxis[axis]; } return NULL; @@ -353,16 +313,15 @@ static const char* map_StringForControllerButton[] = { /* * convert a string to its enum equivalent */ -SDL_GameControllerButton SDL_GameControllerGetButtonFromString( const char *pchString ) +SDL_GameControllerButton SDL_GameControllerGetButtonFromString(const char *pchString) { int entry; - if ( !pchString || !pchString[0] ) + if (!pchString || !pchString[0]) return SDL_CONTROLLER_BUTTON_INVALID; - for ( entry = 0; map_StringForControllerButton[entry]; ++entry) - { - if ( !SDL_strcasecmp( pchString, map_StringForControllerButton[entry] ) ) - return entry; + for (entry = 0; map_StringForControllerButton[entry]; ++entry) { + if (SDL_strcasecmp(pchString, map_StringForControllerButton[entry]) == 0) + return entry; } return SDL_CONTROLLER_BUTTON_INVALID; } @@ -370,10 +329,9 @@ SDL_GameControllerButton SDL_GameControllerGetButtonFromString( const char *pchS /* * convert an enum to its string equivalent */ -const char* SDL_GameControllerGetStringForButton( SDL_GameControllerButton axis ) +const char* SDL_GameControllerGetStringForButton(SDL_GameControllerButton axis) { - if (axis > SDL_CONTROLLER_BUTTON_INVALID && axis < SDL_CONTROLLER_BUTTON_MAX) - { + if (axis > SDL_CONTROLLER_BUTTON_INVALID && axis < SDL_CONTROLLER_BUTTON_MAX) { return map_StringForControllerButton[axis]; } return NULL; @@ -382,83 +340,61 @@ const char* SDL_GameControllerGetStringForButton( SDL_GameControllerButton axis /* * given a controller button name and a joystick name update our mapping structure with it */ -void SDL_PrivateGameControllerParseButton( const char *szGameButton, const char *szJoystickButton, struct _SDL_ControllerMapping *pMapping ) +void SDL_PrivateGameControllerParseButton(const char *szGameButton, const char *szJoystickButton, struct _SDL_ControllerMapping *pMapping) { int iSDLButton = 0; SDL_GameControllerButton button; SDL_GameControllerAxis axis; - button = SDL_GameControllerGetButtonFromString( szGameButton ); - axis = SDL_GameControllerGetAxisFromString( szGameButton ); - iSDLButton = SDL_atoi( &szJoystickButton[1] ); + button = SDL_GameControllerGetButtonFromString(szGameButton); + axis = SDL_GameControllerGetAxisFromString(szGameButton); + iSDLButton = SDL_atoi(&szJoystickButton[1]); - if ( szJoystickButton[0] == 'a' ) - { - if ( iSDLButton >= k_nMaxReverseEntries ) - { - SDL_SetError("Axis index too large: %d", iSDLButton ); + if (szJoystickButton[0] == 'a') { + if (iSDLButton >= k_nMaxReverseEntries) { + SDL_SetError("Axis index too large: %d", iSDLButton); return; } - if ( axis != SDL_CONTROLLER_AXIS_INVALID ) - { + if (axis != SDL_CONTROLLER_AXIS_INVALID) { pMapping->axes[ axis ] = iSDLButton; pMapping->raxes[ iSDLButton ] = axis; - } - else if ( button != SDL_CONTROLLER_BUTTON_INVALID ) - { + } else if (button != SDL_CONTROLLER_BUTTON_INVALID) { pMapping->axesasbutton[ button ] = iSDLButton; pMapping->raxesasbutton[ iSDLButton ] = button; - } - else - { - SDL_assert( !"How did we get here?" ); + } else { + SDL_assert(!"How did we get here?"); } - } - else if ( szJoystickButton[0] == 'b' ) - { - if ( iSDLButton >= k_nMaxReverseEntries ) - { - SDL_SetError("Button index too large: %d", iSDLButton ); + } else if (szJoystickButton[0] == 'b') { + if (iSDLButton >= k_nMaxReverseEntries) { + SDL_SetError("Button index too large: %d", iSDLButton); return; } - if ( button != SDL_CONTROLLER_BUTTON_INVALID ) - { + if (button != SDL_CONTROLLER_BUTTON_INVALID) { pMapping->buttons[ button ] = iSDLButton; pMapping->rbuttons[ iSDLButton ] = button; - } - else if ( axis != SDL_CONTROLLER_AXIS_INVALID ) - { + } else if (axis != SDL_CONTROLLER_AXIS_INVALID) { pMapping->buttonasaxis[ axis ] = iSDLButton; pMapping->rbuttonasaxis[ iSDLButton ] = axis; + } else { + SDL_assert(!"How did we get here?"); } - else - { - SDL_assert( !"How did we get here?" ); - } - } - else if ( szJoystickButton[0] == 'h' ) - { - int hat = SDL_atoi( &szJoystickButton[1] ); - int mask = SDL_atoi( &szJoystickButton[3] ); + } else if (szJoystickButton[0] == 'h') { + int hat = SDL_atoi(&szJoystickButton[1]); + int mask = SDL_atoi(&szJoystickButton[3]); if (hat >= 4) { - SDL_SetError("Hat index too large: %d", iSDLButton ); + SDL_SetError("Hat index too large: %d", iSDLButton); } - if ( button != SDL_CONTROLLER_BUTTON_INVALID ) - { + if (button != SDL_CONTROLLER_BUTTON_INVALID) { int ridx; pMapping->hatasbutton[ button ].hat = hat; pMapping->hatasbutton[ button ].mask = mask; ridx = (hat << 4) | mask; pMapping->rhatasbutton[ ridx ] = button; - } - else if ( axis != SDL_CONTROLLER_AXIS_INVALID ) - { - SDL_assert( !"Support hat as axis" ); - } - else - { - SDL_assert( !"How did we get here?" ); + } else if (axis != SDL_CONTROLLER_AXIS_INVALID) { + SDL_assert(!"Support hat as axis"); + } else { + SDL_assert(!"How did we get here?"); } } } @@ -468,7 +404,7 @@ void SDL_PrivateGameControllerParseButton( const char *szGameButton, const char * given a controller mapping string update our mapping object */ static void -SDL_PrivateGameControllerParseControllerConfigString( struct _SDL_ControllerMapping *pMapping, const char *pchString ) +SDL_PrivateGameControllerParseControllerConfigString(struct _SDL_ControllerMapping *pMapping, const char *pchString) { char szGameButton[20]; char szJoystickButton[20]; @@ -476,44 +412,32 @@ SDL_PrivateGameControllerParseControllerConfigString( struct _SDL_ControllerMapp int i = 0; const char *pchPos = pchString; - SDL_memset( szGameButton, 0x0, sizeof(szGameButton) ); - SDL_memset( szJoystickButton, 0x0, sizeof(szJoystickButton) ); + SDL_memset(szGameButton, 0x0, sizeof(szGameButton)); + SDL_memset(szJoystickButton, 0x0, sizeof(szJoystickButton)); - while ( pchPos && *pchPos ) - { - if ( *pchPos == ':' ) - { + while (pchPos && *pchPos) { + if (*pchPos == ':') { i = 0; bGameButton = SDL_FALSE; - } - else if ( *pchPos == ' ' ) - { + } else if (*pchPos == ' ') { - } - else if ( *pchPos == ',' ) - { + } else if (*pchPos == ',') { i = 0; bGameButton = SDL_TRUE; - SDL_PrivateGameControllerParseButton( szGameButton, szJoystickButton, pMapping ); - SDL_memset( szGameButton, 0x0, sizeof(szGameButton) ); - SDL_memset( szJoystickButton, 0x0, sizeof(szJoystickButton) ); + SDL_PrivateGameControllerParseButton(szGameButton, szJoystickButton, pMapping); + SDL_memset(szGameButton, 0x0, sizeof(szGameButton)); + SDL_memset(szJoystickButton, 0x0, sizeof(szJoystickButton)); - } - else if ( bGameButton ) - { - if ( i >= sizeof(szGameButton)) - { - SDL_SetError( "Button name too large: %s", szGameButton ); + } else if (bGameButton) { + if (i >= sizeof(szGameButton)) { + SDL_SetError("Button name too large: %s", szGameButton); return; } szGameButton[i] = *pchPos; i++; - } - else - { - if ( i >= sizeof(szJoystickButton)) - { - SDL_SetError( "Joystick button name too large: %s", szJoystickButton ); + } else { + if (i >= sizeof(szJoystickButton)) { + SDL_SetError("Joystick button name too large: %s", szJoystickButton); return; } szJoystickButton[i] = *pchPos; @@ -522,14 +446,14 @@ SDL_PrivateGameControllerParseControllerConfigString( struct _SDL_ControllerMapp pchPos++; } - SDL_PrivateGameControllerParseButton( szGameButton, szJoystickButton, pMapping ); + SDL_PrivateGameControllerParseButton(szGameButton, szJoystickButton, pMapping); } /* * Make a new button mapping struct */ -void SDL_PrivateLoadButtonMapping( struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping ) +void SDL_PrivateLoadButtonMapping(struct _SDL_ControllerMapping *pMapping, SDL_JoystickGUID guid, const char *pchName, const char *pchMapping) { int j; @@ -537,50 +461,44 @@ void SDL_PrivateLoadButtonMapping( struct _SDL_ControllerMapping *pMapping, SDL_ pMapping->name = pchName; /* set all the button mappings to non defaults */ - for ( j = 0; j < SDL_CONTROLLER_AXIS_MAX; j++ ) - { + for (j = 0; j < SDL_CONTROLLER_AXIS_MAX; j++) { pMapping->axes[j] = -1; pMapping->buttonasaxis[j] = -1; } - for ( j = 0; j < SDL_CONTROLLER_BUTTON_MAX; j++ ) - { + for (j = 0; j < SDL_CONTROLLER_BUTTON_MAX; j++) { pMapping->buttons[j] = -1; pMapping->axesasbutton[j] = -1; pMapping->hatasbutton[j].hat = -1; } - for ( j = 0; j < k_nMaxReverseEntries; j++ ) - { + for (j = 0; j < k_nMaxReverseEntries; j++) { pMapping->raxes[j] = SDL_CONTROLLER_AXIS_INVALID; pMapping->rbuttonasaxis[j] = SDL_CONTROLLER_AXIS_INVALID; pMapping->rbuttons[j] = SDL_CONTROLLER_BUTTON_INVALID; pMapping->raxesasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID; } - for (j = 0; j < k_nMaxHatEntries; j++) - { + for (j = 0; j < k_nMaxHatEntries; j++) { pMapping->rhatasbutton[j] = SDL_CONTROLLER_BUTTON_INVALID; } - SDL_PrivateGameControllerParseControllerConfigString( pMapping, pchMapping ); + SDL_PrivateGameControllerParseControllerConfigString(pMapping, pchMapping); } /* * grab the guid string from a mapping string */ -char *SDL_PrivateGetControllerGUIDFromMappingString( const char *pMapping ) +char *SDL_PrivateGetControllerGUIDFromMappingString(const char *pMapping) { - const char *pFirstComma = SDL_strchr( pMapping, ',' ); - if ( pFirstComma ) - { - char *pchGUID = SDL_malloc( pFirstComma - pMapping + 1 ); - if ( !pchGUID ) - { + const char *pFirstComma = SDL_strchr(pMapping, ','); + if (pFirstComma) { + char *pchGUID = SDL_malloc(pFirstComma - pMapping + 1); + if (!pchGUID) { SDL_OutOfMemory(); return NULL; } - SDL_memcpy( pchGUID, pMapping, pFirstComma - pMapping ); + SDL_memcpy(pchGUID, pMapping, pFirstComma - pMapping); pchGUID[ pFirstComma - pMapping ] = 0; return pchGUID; } @@ -591,26 +509,25 @@ char *SDL_PrivateGetControllerGUIDFromMappingString( const char *pMapping ) /* * grab the name string from a mapping string */ -char *SDL_PrivateGetControllerNameFromMappingString( const char *pMapping ) +char *SDL_PrivateGetControllerNameFromMappingString(const char *pMapping) { const char *pFirstComma, *pSecondComma; char *pchName; - pFirstComma = SDL_strchr( pMapping, ',' ); - if ( !pFirstComma ) + pFirstComma = SDL_strchr(pMapping, ','); + if (!pFirstComma) return NULL; - pSecondComma = SDL_strchr( pFirstComma + 1, ',' ); - if ( !pSecondComma ) + pSecondComma = SDL_strchr(pFirstComma + 1, ','); + if (!pSecondComma) return NULL; - pchName = SDL_malloc( pSecondComma - pFirstComma ); - if ( !pchName ) - { + pchName = SDL_malloc(pSecondComma - pFirstComma); + if (!pchName) { SDL_OutOfMemory(); return NULL; } - SDL_memcpy( pchName, pFirstComma + 1, pSecondComma - pFirstComma ); + SDL_memcpy(pchName, pFirstComma + 1, pSecondComma - pFirstComma); pchName[ pSecondComma - pFirstComma - 1 ] = 0; return pchName; } @@ -619,28 +536,29 @@ char *SDL_PrivateGetControllerNameFromMappingString( const char *pMapping ) /* * grab the button mapping string from a mapping string */ -char *SDL_PrivateGetControllerMappingFromMappingString( const char *pMapping ) +char *SDL_PrivateGetControllerMappingFromMappingString(const char *pMapping) { const char *pFirstComma, *pSecondComma; - pFirstComma = SDL_strchr( pMapping, ',' ); - if ( !pFirstComma ) + pFirstComma = SDL_strchr(pMapping, ','); + if (!pFirstComma) return NULL; - pSecondComma = SDL_strchr( pFirstComma + 1, ',' ); - if ( !pSecondComma ) + pSecondComma = SDL_strchr(pFirstComma + 1, ','); + if (!pSecondComma) return NULL; return SDL_strdup(pSecondComma + 1); /* mapping is everything after the 3rd comma */ } -void SDL_PrivateGameControllerRefreshMapping( ControllerMapping_t *pControllerMapping ) +/* + * Helper function to refresh a mapping + */ +void SDL_PrivateGameControllerRefreshMapping(ControllerMapping_t *pControllerMapping) { SDL_GameController *gamecontrollerlist = SDL_gamecontrollers; - while ( gamecontrollerlist ) - { - if ( !SDL_memcmp( &gamecontrollerlist->mapping.guid, &pControllerMapping->guid, sizeof(pControllerMapping->guid) ) ) - { + while (gamecontrollerlist) { + if (!SDL_memcmp(&gamecontrollerlist->mapping.guid, &pControllerMapping->guid, sizeof(pControllerMapping->guid))) { SDL_Event event; event.type = SDL_CONTROLLERDEVICEREMAPPED; event.cdevice.which = gamecontrollerlist->joystick->instance_id; @@ -654,11 +572,107 @@ void SDL_PrivateGameControllerRefreshMapping( ControllerMapping_t *pControllerMa } } +/* + * Helper function to add a mapping for a guid + */ +static ControllerMapping_t * +SDL_PrivateAddMappingForGUID(SDL_JoystickGUID jGUID, const char *mappingString, SDL_bool *existing) +{ + char *pchName; + char *pchMapping; + ControllerMapping_t *pControllerMapping; + + pchName = SDL_PrivateGetControllerNameFromMappingString(mappingString); + if (!pchName) { + SDL_SetError("Couldn't parse name from %s", mappingString); + return NULL; + } + + pchMapping = SDL_PrivateGetControllerMappingFromMappingString(mappingString); + if (!pchMapping) { + SDL_free(pchName); + SDL_SetError("Couldn't parse %s", mappingString); + return NULL; + } + + pControllerMapping = SDL_PrivateGetControllerMappingForGUID(&jGUID); + if (pControllerMapping) { + /* Update existing mapping */ + SDL_free(pControllerMapping->name); + pControllerMapping->name = pchName; + SDL_free(pControllerMapping->mapping); + pControllerMapping->mapping = pchMapping; + /* refresh open controllers */ + SDL_PrivateGameControllerRefreshMapping(pControllerMapping); + *existing = SDL_TRUE; + } else { + pControllerMapping = SDL_malloc(sizeof(*pControllerMapping)); + if (!pControllerMapping) { + SDL_free(pchName); + SDL_free(pchMapping); + SDL_OutOfMemory(); + return NULL; + } + pControllerMapping->guid = jGUID; + pControllerMapping->name = pchName; + pControllerMapping->mapping = pchMapping; + pControllerMapping->next = s_pSupportedControllers; + s_pSupportedControllers = pControllerMapping; + *existing = SDL_FALSE; + } + return pControllerMapping; +} + +/* + * Helper function to determine pre-calculated offset to certain joystick mappings + */ +ControllerMapping_t *SDL_PrivateGetControllerMapping(int device_index) +{ + SDL_JoystickGUID jGUID = SDL_JoystickGetDeviceGUID(device_index); + ControllerMapping_t *mapping; + + mapping = SDL_PrivateGetControllerMappingForGUID(&jGUID); +#if SDL_JOYSTICK_XINPUT + if (!mapping && SDL_SYS_IsXInputGamepad_DeviceIndex(device_index)) { + mapping = s_pXInputMapping; + } +#endif +#if defined(SDL_JOYSTICK_EMSCRIPTEN) + if (!mapping && s_pEmscriptenMapping) { + mapping = s_pEmscriptenMapping; + } +#endif +#ifdef __LINUX__ + if (!mapping) { + const char *name = SDL_JoystickNameForIndex(device_index); + if (name) { + if (SDL_strstr(name, "Xbox 360 Wireless Receiver")) { + /* The Linux driver xpad.c maps the wireless dpad to buttons */ + SDL_bool existing; + mapping = SDL_PrivateAddMappingForGUID(jGUID, +"none,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", + &existing); + } + } + } +#endif /* __LINUX__ */ + + if (!mapping) { + const char *name = SDL_JoystickNameForIndex(device_index); + if (name) { + if (SDL_strstr(name, "Xbox") || SDL_strstr(name, "X-Box")) { + mapping = s_pXInputMapping; + } + } + } + return mapping; +} + /* * Add or update an entry into the Mappings Database */ int -SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ) +SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw) { const char *platform = SDL_GetPlatform(); int controllers = 0; @@ -675,7 +689,7 @@ SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ) if (freerw) { SDL_RWclose(rw); } - return SDL_SetError("Could allocate space to not read DB into memory"); + return SDL_SetError("Could not allocate space to read DB into memory"); } if (SDL_RWread(rw, buf, db_size, 1) != 1) { @@ -694,25 +708,24 @@ SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ) line = buf; while (line < buf + db_size) { - line_end = SDL_strchr( line, '\n' ); + line_end = SDL_strchr(line, '\n'); if (line_end != NULL) { *line_end = '\0'; - } - else { + } else { line_end = buf + db_size; } /* Extract and verify the platform */ tmp = SDL_strstr(line, SDL_CONTROLLER_PLATFORM_FIELD); - if ( tmp != NULL ) { + if (tmp != NULL) { tmp += SDL_strlen(SDL_CONTROLLER_PLATFORM_FIELD); comma = SDL_strchr(tmp, ','); if (comma != NULL) { platform_len = comma - tmp + 1; if (platform_len + 1 < SDL_arraysize(line_platform)) { SDL_strlcpy(line_platform, tmp, platform_len); - if(SDL_strncasecmp(line_platform, platform, platform_len) == 0 - && SDL_GameControllerAddMapping(line) > 0) { + if (SDL_strncasecmp(line_platform, platform, platform_len) == 0 && + SDL_GameControllerAddMapping(line) > 0) { controllers++; } } @@ -730,69 +743,46 @@ SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ) * Add or update an entry into the Mappings Database */ int -SDL_GameControllerAddMapping( const char *mappingString ) +SDL_GameControllerAddMapping(const char *mappingString) { char *pchGUID; - char *pchName; - char *pchMapping; SDL_JoystickGUID jGUID; - ControllerMapping_t *pControllerMapping; -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) SDL_bool is_xinput_mapping = SDL_FALSE; -#endif + SDL_bool is_emscripten_mapping = SDL_FALSE; + SDL_bool existing = SDL_FALSE; + ControllerMapping_t *pControllerMapping; + + if (!mappingString) { + return SDL_InvalidParamError("mappingString"); + } - pchGUID = SDL_PrivateGetControllerGUIDFromMappingString( mappingString ); + pchGUID = SDL_PrivateGetControllerGUIDFromMappingString(mappingString); if (!pchGUID) { return SDL_SetError("Couldn't parse GUID from %s", mappingString); } -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) - if ( !SDL_strcasecmp( pchGUID, "xinput" ) ) { + if (!SDL_strcasecmp(pchGUID, "xinput")) { is_xinput_mapping = SDL_TRUE; } -#endif + if (!SDL_strcasecmp(pchGUID, "emscripten")) { + is_emscripten_mapping = SDL_TRUE; + } jGUID = SDL_JoystickGetGUIDFromString(pchGUID); SDL_free(pchGUID); - pchName = SDL_PrivateGetControllerNameFromMappingString( mappingString ); - if (!pchName) { - return SDL_SetError("Couldn't parse name from %s", mappingString); - } - - pchMapping = SDL_PrivateGetControllerMappingFromMappingString( mappingString ); - if (!pchMapping) { - SDL_free( pchName ); - return SDL_SetError("Couldn't parse %s", mappingString); + pControllerMapping = SDL_PrivateAddMappingForGUID(jGUID, mappingString, &existing); + if (!pControllerMapping) { + return -1; } - pControllerMapping = SDL_PrivateGetControllerMappingForGUID(&jGUID); - - if (pControllerMapping) { - /* Update existing mapping */ - SDL_free( pControllerMapping->name ); - pControllerMapping->name = pchName; - SDL_free( pControllerMapping->mapping ); - pControllerMapping->mapping = pchMapping; - /* refresh open controllers */ - SDL_PrivateGameControllerRefreshMapping( pControllerMapping ); + if (existing) { return 0; } else { - pControllerMapping = SDL_malloc( sizeof(*pControllerMapping) ); - if (!pControllerMapping) { - SDL_free( pchName ); - SDL_free( pchMapping ); - return SDL_OutOfMemory(); - } -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) - if ( is_xinput_mapping ) - { + if (is_xinput_mapping) { s_pXInputMapping = pControllerMapping; } -#endif - pControllerMapping->guid = jGUID; - pControllerMapping->name = pchName; - pControllerMapping->mapping = pchMapping; - pControllerMapping->next = s_pSupportedControllers; - s_pSupportedControllers = pControllerMapping; + if (is_emscripten_mapping) { + s_pEmscriptenMapping = pControllerMapping; + } return 1; } } @@ -801,7 +791,7 @@ SDL_GameControllerAddMapping( const char *mappingString ) * Get the mapping string for this GUID */ char * -SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ) +SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid) { char *pMappingString = NULL; ControllerMapping_t *mapping = SDL_PrivateGetControllerMappingForGUID(&guid); @@ -811,8 +801,12 @@ SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ) SDL_JoystickGetGUIDString(guid, pchGUID, sizeof(pchGUID)); /* allocate enough memory for GUID + ',' + name + ',' + mapping + \0 */ needed = SDL_strlen(pchGUID) + 1 + SDL_strlen(mapping->name) + 1 + SDL_strlen(mapping->mapping) + 1; - pMappingString = SDL_malloc( needed ); - SDL_snprintf( pMappingString, needed, "%s,%s,%s", pchGUID, mapping->name, mapping->mapping ); + pMappingString = SDL_malloc(needed); + if (!pMappingString) { + SDL_OutOfMemory(); + return NULL; + } + SDL_snprintf(pMappingString, needed, "%s,%s,%s", pchGUID, mapping->name, mapping->mapping); } return pMappingString; } @@ -821,34 +815,39 @@ SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ) * Get the mapping string for this device */ char * -SDL_GameControllerMapping( SDL_GameController * gamecontroller ) +SDL_GameControllerMapping(SDL_GameController * gamecontroller) { - return SDL_GameControllerMappingForGUID( gamecontroller->mapping.guid ); + if (!gamecontroller) { + return NULL; + } + + return SDL_GameControllerMappingForGUID(gamecontroller->mapping.guid); } static void SDL_GameControllerLoadHints() { const char *hint = SDL_GetHint(SDL_HINT_GAMECONTROLLERCONFIG); - if ( hint && hint[0] ) { - size_t nchHints = SDL_strlen( hint ); - char *pUserMappings = SDL_malloc( nchHints + 1 ); + if (hint && hint[0]) { + size_t nchHints = SDL_strlen(hint); + char *pUserMappings = SDL_malloc(nchHints + 1); char *pTempMappings = pUserMappings; - SDL_memcpy( pUserMappings, hint, nchHints ); + SDL_memcpy(pUserMappings, hint, nchHints); pUserMappings[nchHints] = '\0'; - while ( pUserMappings ) { + while (pUserMappings) { char *pchNewLine = NULL; - pchNewLine = SDL_strchr( pUserMappings, '\n' ); - if ( pchNewLine ) + pchNewLine = SDL_strchr(pUserMappings, '\n'); + if (pchNewLine) *pchNewLine = '\0'; - SDL_GameControllerAddMapping( pUserMappings ); + SDL_GameControllerAddMapping(pUserMappings); - if ( pchNewLine ) + if (pchNewLine) { pUserMappings = pchNewLine + 1; - else + } else { pUserMappings = NULL; + } } SDL_free(pTempMappings); } @@ -864,8 +863,8 @@ SDL_GameControllerInit(void) const char *pMappingString = NULL; s_pSupportedControllers = NULL; pMappingString = s_ControllerMappings[i]; - while ( pMappingString ) { - SDL_GameControllerAddMapping( pMappingString ); + while (pMappingString) { + SDL_GameControllerAddMapping(pMappingString); i++; pMappingString = s_ControllerMappings[i]; @@ -875,7 +874,7 @@ SDL_GameControllerInit(void) SDL_GameControllerLoadHints(); /* watch for joy events and fire controller ones if needed */ - SDL_AddEventWatch( SDL_GameControllerEventWatcher, NULL ); + SDL_AddEventWatch(SDL_GameControllerEventWatcher, NULL); /* Send added events for controllers currently attached */ for (i = 0; i < SDL_NumJoysticks(); ++i) { @@ -898,8 +897,7 @@ const char * SDL_GameControllerNameForIndex(int device_index) { ControllerMapping_t *pSupportedController = SDL_PrivateGetControllerMapping(device_index); - if ( pSupportedController ) - { + if (pSupportedController) { return pSupportedController->name; } return NULL; @@ -913,8 +911,7 @@ SDL_bool SDL_IsGameController(int device_index) { ControllerMapping_t *pSupportedController = SDL_PrivateGetControllerMapping(device_index); - if ( pSupportedController ) - { + if (pSupportedController) { return SDL_TRUE; } @@ -942,9 +939,8 @@ SDL_GameControllerOpen(int device_index) gamecontrollerlist = SDL_gamecontrollers; /* If the controller is already open, return it */ - while ( gamecontrollerlist ) - { - if ( SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == gamecontrollerlist->joystick->instance_id ) { + while (gamecontrollerlist) { + if (SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == gamecontrollerlist->joystick->instance_id) { gamecontroller = gamecontrollerlist; ++gamecontroller->ref_count; return (gamecontroller); @@ -954,8 +950,8 @@ SDL_GameControllerOpen(int device_index) /* Find a controller mapping */ pSupportedController = SDL_PrivateGetControllerMapping(device_index); - if ( !pSupportedController ) { - SDL_SetError("Couldn't find mapping for device (%d)", device_index ); + if (!pSupportedController) { + SDL_SetError("Couldn't find mapping for device (%d)", device_index); return (NULL); } @@ -968,12 +964,12 @@ SDL_GameControllerOpen(int device_index) SDL_memset(gamecontroller, 0, (sizeof *gamecontroller)); gamecontroller->joystick = SDL_JoystickOpen(device_index); - if ( !gamecontroller->joystick ) { + if (!gamecontroller->joystick) { SDL_free(gamecontroller); return NULL; } - SDL_PrivateLoadButtonMapping( &gamecontroller->mapping, pSupportedController->guid, pSupportedController->name, pSupportedController->mapping ); + SDL_PrivateLoadButtonMapping(&gamecontroller->mapping, pSupportedController->guid, pSupportedController->name, pSupportedController->mapping); /* Add joystick to list */ ++gamecontroller->ref_count; @@ -981,7 +977,7 @@ SDL_GameControllerOpen(int device_index) gamecontroller->next = SDL_gamecontrollers; SDL_gamecontrollers = gamecontroller; - SDL_SYS_JoystickUpdate( gamecontroller->joystick ); + SDL_SYS_JoystickUpdate(gamecontroller->joystick); return (gamecontroller); } @@ -1003,14 +999,12 @@ SDL_GameControllerUpdate(void) Sint16 SDL_GameControllerGetAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis) { - if ( !gamecontroller ) + if (!gamecontroller) return 0; - if (gamecontroller->mapping.axes[axis] >= 0 ) - { - Sint16 value = ( SDL_JoystickGetAxis( gamecontroller->joystick, gamecontroller->mapping.axes[axis]) ); - switch (axis) - { + if (gamecontroller->mapping.axes[axis] >= 0) { + Sint16 value = (SDL_JoystickGetAxis(gamecontroller->joystick, gamecontroller->mapping.axes[axis])); + switch (axis) { case SDL_CONTROLLER_AXIS_TRIGGERLEFT: case SDL_CONTROLLER_AXIS_TRIGGERRIGHT: /* Shift it to be 0 - 32767. */ @@ -1019,12 +1013,10 @@ SDL_GameControllerGetAxis(SDL_GameController * gamecontroller, SDL_GameControlle break; } return value; - } - else if (gamecontroller->mapping.buttonasaxis[axis] >= 0 ) - { + } else if (gamecontroller->mapping.buttonasaxis[axis] >= 0) { Uint8 value; - value = SDL_JoystickGetButton( gamecontroller->joystick, gamecontroller->mapping.buttonasaxis[axis] ); - if ( value > 0 ) + value = SDL_JoystickGetButton(gamecontroller->joystick, gamecontroller->mapping.buttonasaxis[axis]); + if (value > 0) return 32767; return 0; } @@ -1038,27 +1030,22 @@ SDL_GameControllerGetAxis(SDL_GameController * gamecontroller, SDL_GameControlle Uint8 SDL_GameControllerGetButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button) { - if ( !gamecontroller ) + if (!gamecontroller) return 0; - if ( gamecontroller->mapping.buttons[button] >= 0 ) - { - return ( SDL_JoystickGetButton( gamecontroller->joystick, gamecontroller->mapping.buttons[button] ) ); - } - else if ( gamecontroller->mapping.axesasbutton[button] >= 0 ) - { + if (gamecontroller->mapping.buttons[button] >= 0) { + return (SDL_JoystickGetButton(gamecontroller->joystick, gamecontroller->mapping.buttons[button])); + } else if (gamecontroller->mapping.axesasbutton[button] >= 0) { Sint16 value; - value = SDL_JoystickGetAxis( gamecontroller->joystick, gamecontroller->mapping.axesasbutton[button] ); - if ( ABS(value) > 32768/2 ) + value = SDL_JoystickGetAxis(gamecontroller->joystick, gamecontroller->mapping.axesasbutton[button]); + if (ABS(value) > 32768/2) return 1; return 0; - } - else if ( gamecontroller->mapping.hatasbutton[button].hat >= 0 ) - { + } else if (gamecontroller->mapping.hatasbutton[button].hat >= 0) { Uint8 value; - value = SDL_JoystickGetHat( gamecontroller->joystick, gamecontroller->mapping.hatasbutton[button].hat ); + value = SDL_JoystickGetHat(gamecontroller->joystick, gamecontroller->mapping.hatasbutton[button].hat); - if ( value & gamecontroller->mapping.hatasbutton[button].mask ) + if (value & gamecontroller->mapping.hatasbutton[button].mask) return 1; return 0; } @@ -1071,22 +1058,19 @@ SDL_GameControllerGetButton(SDL_GameController * gamecontroller, SDL_GameControl * \return 0 if not plugged in, 1 if still present. */ SDL_bool -SDL_GameControllerGetAttached( SDL_GameController * gamecontroller ) +SDL_GameControllerGetAttached(SDL_GameController * gamecontroller) { - if ( !gamecontroller ) + if (!gamecontroller) return SDL_FALSE; return SDL_JoystickGetAttached(gamecontroller->joystick); } -/* - * Get the number of multi-dimensional axis controls on a joystick - */ const char * SDL_GameControllerName(SDL_GameController * gamecontroller) { - if ( !gamecontroller ) + if (!gamecontroller) return NULL; return (gamecontroller->mapping.name); @@ -1098,30 +1082,46 @@ SDL_GameControllerName(SDL_GameController * gamecontroller) */ SDL_Joystick *SDL_GameControllerGetJoystick(SDL_GameController * gamecontroller) { - if ( !gamecontroller ) + if (!gamecontroller) return NULL; return gamecontroller->joystick; } + +/* + * Find the SDL_GameController that owns this instance id + */ +SDL_GameController * +SDL_GameControllerFromInstanceID(SDL_JoystickID joyid) +{ + SDL_GameController *gamecontroller = SDL_gamecontrollers; + while (gamecontroller) { + if (gamecontroller->joystick->instance_id == joyid) { + return gamecontroller; + } + gamecontroller = gamecontroller->next; + } + + return NULL; +} + + /** * Get the SDL joystick layer binding for this controller axis mapping */ SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController * gamecontroller, SDL_GameControllerAxis axis) { SDL_GameControllerButtonBind bind; - SDL_memset( &bind, 0x0, sizeof(bind) ); + SDL_memset(&bind, 0x0, sizeof(bind)); - if ( !gamecontroller || axis == SDL_CONTROLLER_AXIS_INVALID ) + if (!gamecontroller || axis == SDL_CONTROLLER_AXIS_INVALID) return bind; - if (gamecontroller->mapping.axes[axis] >= 0 ) - { + if (gamecontroller->mapping.axes[axis] >= 0) { bind.bindType = SDL_CONTROLLER_BINDTYPE_AXIS; bind.value.button = gamecontroller->mapping.axes[axis]; - } - else if (gamecontroller->mapping.buttonasaxis[axis] >= 0 ) - { + } else if (gamecontroller->mapping.buttonasaxis[axis] >= 0) { bind.bindType = SDL_CONTROLLER_BINDTYPE_BUTTON; bind.value.button = gamecontroller->mapping.buttonasaxis[axis]; } @@ -1136,23 +1136,18 @@ SDL_GameControllerButtonBind SDL_GameControllerGetBindForAxis(SDL_GameController SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameController * gamecontroller, SDL_GameControllerButton button) { SDL_GameControllerButtonBind bind; - SDL_memset( &bind, 0x0, sizeof(bind) ); + SDL_memset(&bind, 0x0, sizeof(bind)); - if ( !gamecontroller || button == SDL_CONTROLLER_BUTTON_INVALID ) + if (!gamecontroller || button == SDL_CONTROLLER_BUTTON_INVALID) return bind; - if ( gamecontroller->mapping.buttons[button] >= 0 ) - { + if (gamecontroller->mapping.buttons[button] >= 0) { bind.bindType = SDL_CONTROLLER_BINDTYPE_BUTTON; bind.value.button = gamecontroller->mapping.buttons[button]; - } - else if ( gamecontroller->mapping.axesasbutton[button] >= 0 ) - { + } else if (gamecontroller->mapping.axesasbutton[button] >= 0) { bind.bindType = SDL_CONTROLLER_BINDTYPE_AXIS; bind.value.axis = gamecontroller->mapping.axesasbutton[button]; - } - else if ( gamecontroller->mapping.hatasbutton[button].hat >= 0 ) - { + } else if (gamecontroller->mapping.hatasbutton[button].hat >= 0) { bind.bindType = SDL_CONTROLLER_BINDTYPE_HAT; bind.value.hat.hat = gamecontroller->mapping.hatasbutton[button].hat; bind.value.hat.hat_mask = gamecontroller->mapping.hatasbutton[button].mask; @@ -1162,15 +1157,12 @@ SDL_GameControllerButtonBind SDL_GameControllerGetBindForButton(SDL_GameControll } -/* - * Close a joystick previously opened with SDL_JoystickOpen() - */ void SDL_GameControllerClose(SDL_GameController * gamecontroller) { SDL_GameController *gamecontrollerlist, *gamecontrollerlistprev; - if ( !gamecontroller ) + if (!gamecontroller) return; /* First decrement ref count */ @@ -1178,21 +1170,16 @@ SDL_GameControllerClose(SDL_GameController * gamecontroller) return; } - SDL_JoystickClose( gamecontroller->joystick ); + SDL_JoystickClose(gamecontroller->joystick); gamecontrollerlist = SDL_gamecontrollers; gamecontrollerlistprev = NULL; - while ( gamecontrollerlist ) - { - if (gamecontroller == gamecontrollerlist) - { - if ( gamecontrollerlistprev ) - { + while (gamecontrollerlist) { + if (gamecontroller == gamecontrollerlist) { + if (gamecontrollerlistprev) { /* unlink this entry */ gamecontrollerlistprev->next = gamecontrollerlist->next; - } - else - { + } else { SDL_gamecontrollers = gamecontroller->next; } @@ -1213,22 +1200,20 @@ void SDL_GameControllerQuit(void) { ControllerMapping_t *pControllerMap; - while ( SDL_gamecontrollers ) - { + while (SDL_gamecontrollers) { SDL_gamecontrollers->ref_count = 1; SDL_GameControllerClose(SDL_gamecontrollers); } - while ( s_pSupportedControllers ) - { + while (s_pSupportedControllers) { pControllerMap = s_pSupportedControllers; s_pSupportedControllers = s_pSupportedControllers->next; - SDL_free( pControllerMap->name ); - SDL_free( pControllerMap->mapping ); - SDL_free( pControllerMap ); + SDL_free(pControllerMap->name); + SDL_free(pControllerMap->mapping); + SDL_free(pControllerMap); } - SDL_DelEventWatch( SDL_GameControllerEventWatcher, NULL ); + SDL_DelEventWatch(SDL_GameControllerEventWatcher, NULL); } @@ -1266,7 +1251,7 @@ SDL_PrivateGameControllerButton(SDL_GameController * gamecontroller, SDL_GameCon #if !SDL_EVENTS_DISABLED SDL_Event event; - if ( button == SDL_CONTROLLER_BUTTON_INVALID ) + if (button == SDL_CONTROLLER_BUTTON_INVALID) return (0); switch (state) { diff --git a/Engine/lib/sdl/src/joystick/SDL_gamecontrollerdb.h b/Engine/lib/sdl/src/joystick/SDL_gamecontrollerdb.h index 34630ca6b0..211d00d01e 100644 --- a/Engine/lib/sdl/src/joystick/SDL_gamecontrollerdb.h +++ b/Engine/lib/sdl/src/joystick/SDL_gamecontrollerdb.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,20 +31,24 @@ */ static const char *s_ControllerMappings [] = { -#ifdef SDL_JOYSTICK_DINPUT +#if SDL_JOYSTICK_XINPUT + "xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b10,leftshoulder:b4,leftstick:b8,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", +#endif +#if SDL_JOYSTICK_DINPUT "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", + "e8206058000000000000504944564944,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", "ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", + "6d0418c2000000000000504944564944,Logitech F510 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */ "4d6963726f736f66742050432d6a6f79,OUYA Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:b12,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:b13,rightx:a5,righty:a4,x:b1,y:b2,", "88880803000000000000504944564944,PS3 Controller,a:b2,b:b1,back:b8,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b9,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:b7,rightx:a3,righty:a4,start:b11,x:b0,y:b3,", "4c056802000000000000504944564944,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,", "25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,", - "4c05c405000000000000504944564944,PS4 Controller,a:a3,a:b1,b:b2,back:b8,dpdown:h0.0,dpdown:h0.4,dpleft:h0.8,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,guide:b12,leftshoulder:b4,leftshoulder:h0.0,leftstick:b10,leftstick:b7,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightshoulder:b6,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:a4,x:b0,y:b3,", - "xinput,X360 Controller,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,", -#elif defined(SDL_JOYSTICK_XINPUT) - "xinput,X360 Controller,a:b10,b:b11,back:b5,dpdown:b1,dpleft:b2,dpright:b3,dpup:b0,guide:b14,leftshoulder:b8,leftstick:b6,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b9,rightstick:b7,righttrigger:a5,rightx:a2,righty:a3,start:b4,x:b12,y:b13,", -#elif defined(__MACOSX__) + "4c05c405000000000000504944564944,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", +#endif +#if defined(__MACOSX__) + "830500000000000031b0000000000000,Cideko AK08b,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", "6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */ "6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", @@ -52,23 +56,45 @@ static const char *s_ControllerMappings [] = "6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* This includes F710 in DInput mode and the "Logitech Cordless RumblePad 2", at the very least. */ "4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,", "4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", + "11010000000000002014000000000000,SteelSeries Nimbus,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,", + "11010000000000001714000000000000,SteelSeries Stratus XL,a:b0,b:b1,dpdown:b9,dpleft:b11,dpright:b10,dpup:b8,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a2,righty:a3,start:b12,x:b2,y:b3,", "5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,", -#elif defined(__LINUX__) +#endif +#if defined(__LINUX__) + "03000000e82000006058000001010000,Cideko AK08b,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b3,y:b0,", "0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", + "030000006f0e00000104000000010000,Gamestop Logic3 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,", "030000006d04000019c2000010010000,Logitech Cordless RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "030000006d0400001dc2000014400000,Logitech F310 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "030000006d04000019c2000011010000,Logitech F710 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */ "030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", -"050000003620000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,platform:Linux,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,", + "030000006d04000018c2000010010000,Logitech RumblePad 2,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", + "03000000550900001072000011010000,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,", + "050000007e0500003003000001000000,Nintendo Wii Remote Pro Controller,a:b1,b:b0,back:b8,dpdown:b14,dpleft:b15,dpright:b16,dpup:b13,guide:b10,leftshoulder:b4,leftstick:b11,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b12,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", + "050000003620000100000002010000,OUYA Game Controller,a:b0,b:b3,dpdown:b9,dpleft:b10,dpright:b11,dpup:b8,guide:b14,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,x:b1,y:b2,", "030000004c0500006802000011010000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,", + "03000000341a00003608000011010000,PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", "030000004c050000c405000011010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", + "050000004c050000c405000000010000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,", + "03000000c6240000045d000025010000,Razer Sabertooth,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", + "03000000321500000009000011010000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,", + "050000003215000000090000163a0000,Razer Serval,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a5,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a4,rightx:a2,righty:a3,start:b7,x:b2,y:b3,", + "03000000de280000fc11000001000000,Steam Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", "03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", - "030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", - "030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", - "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", - "030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", + "xinput,XInput Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", + "030000005e040000d102000001010000,Xbox One Wireless Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,", +#endif +#if defined(__ANDROID__) + "4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", +#endif +#if defined(SDL_JOYSTICK_MFI) + "4d466947616d65706164010000000000,MFi Extended Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:a5,rightx:a3,righty:a4,start:b6,x:b2,y:b3,", + "4d466947616d65706164020000000000,MFi Gamepad,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,rightshoulder:b5,start:b6,x:b2,y:b3,", +#endif +#if defined(SDL_JOYSTICK_EMSCRIPTEN) + "emscripten,Standard Gamepad,a:b0,b:b1,back:b8,dpdown:b13,dpleft:b14,dpright:b15,dpup:b12,guide:b16,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,", #endif NULL }; diff --git a/Engine/lib/sdl/src/joystick/SDL_joystick.c b/Engine/lib/sdl/src/joystick/SDL_joystick.c index 062ece3335..dc910a82b1 100644 --- a/Engine/lib/sdl/src/joystick/SDL_joystick.c +++ b/Engine/lib/sdl/src/joystick/SDL_joystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -113,9 +113,8 @@ SDL_JoystickOpen(int device_index) /* If the joystick is already open, return it * it is important that we have a single joystick * for each instance id */ - while ( joysticklist ) - { - if ( SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == joysticklist->instance_id ) { + while (joysticklist) { + if (SDL_SYS_GetInstanceIdOfDeviceIndex(device_index) == joysticklist->instance_id) { joystick = joysticklist; ++joystick->ref_count; return (joystick); @@ -136,9 +135,9 @@ SDL_JoystickOpen(int device_index) return NULL; } - joystickname = SDL_SYS_JoystickNameForDeviceIndex( device_index ); - if ( joystickname ) - joystick->name = SDL_strdup( joystickname ); + joystickname = SDL_SYS_JoystickNameForDeviceIndex(device_index); + if (joystickname) + joystick->name = SDL_strdup(joystickname); else joystick->name = NULL; @@ -179,6 +178,7 @@ SDL_JoystickOpen(int device_index) if (joystick->buttons) { SDL_memset(joystick->buttons, 0, joystick->nbuttons * sizeof(Uint8)); } + joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN; /* Add joystick to list */ ++joystick->ref_count; @@ -186,7 +186,7 @@ SDL_JoystickOpen(int device_index) joystick->next = SDL_joysticks; SDL_joysticks = joystick; - SDL_SYS_JoystickUpdate( joystick ); + SDL_SYS_JoystickUpdate(joystick); return (joystick); } @@ -200,18 +200,13 @@ SDL_PrivateJoystickValid(SDL_Joystick * joystick) { int valid; - if ( joystick == NULL ) { + if (joystick == NULL) { SDL_SetError("Joystick hasn't been opened yet"); valid = 0; } else { valid = 1; } - if ( joystick && joystick->closed ) - { - valid = 0; - } - return valid; } @@ -378,6 +373,23 @@ SDL_JoystickInstanceID(SDL_Joystick * joystick) return (joystick->instance_id); } +/* + * Find the SDL_Joystick that owns this instance id + */ +SDL_Joystick * +SDL_JoystickFromInstanceID(SDL_JoystickID joyid) +{ + SDL_Joystick *joystick = SDL_joysticks; + while (joystick) { + if (joystick->instance_id == joyid) { + return joystick; + } + joystick = joystick->next; + } + + return NULL; +} + /* * Get the friendly name of this joystick */ @@ -414,23 +426,18 @@ SDL_JoystickClose(SDL_Joystick * joystick) } SDL_SYS_JoystickClose(joystick); + joystick->hwdata = NULL; joysticklist = SDL_joysticks; joysticklistprev = NULL; - while ( joysticklist ) - { - if (joystick == joysticklist) - { - if ( joysticklistprev ) - { + while (joysticklist) { + if (joystick == joysticklist) { + if (joysticklistprev) { /* unlink this entry */ joysticklistprev->next = joysticklist->next; - } - else - { + } else { SDL_joysticks = joystick->next; } - break; } joysticklistprev = joysticklist; @@ -454,8 +461,7 @@ SDL_JoystickQuit(void) SDL_assert(!SDL_updating_joystick); /* Stop the event polling */ - while ( SDL_joysticks ) - { + while (SDL_joysticks) { SDL_joysticks->ref_count = 1; SDL_JoystickClose(SDL_joysticks); } @@ -472,8 +478,7 @@ SDL_JoystickQuit(void) static SDL_bool SDL_PrivateJoystickShouldIgnoreEvent() { - if (SDL_joystick_allows_background_events) - { + if (SDL_joystick_allows_background_events) { return SDL_FALSE; } @@ -497,26 +502,27 @@ SDL_PrivateJoystickAxis(SDL_Joystick * joystick, Uint8 axis, Sint16 value) { int posted; - /* Make sure we're not getting garbage events */ + /* Make sure we're not getting garbage or duplicate events */ if (axis >= joystick->naxes) { return 0; } - - /* Update internal joystick state */ if (value == joystick->axes[axis]) { return 0; } - joystick->axes[axis] = value; /* We ignore events if we don't have keyboard focus, except for centering * events. */ if (SDL_PrivateJoystickShouldIgnoreEvent()) { - if (!(joystick->closed && joystick->uncentered)) { + if ((value > 0 && value >= joystick->axes[axis]) || + (value < 0 && value <= joystick->axes[axis])) { return 0; } } + /* Update internal joystick state */ + joystick->axes[axis] = value; + /* Post the event, if desired */ posted = 0; #if !SDL_EVENTS_DISABLED @@ -537,23 +543,25 @@ SDL_PrivateJoystickHat(SDL_Joystick * joystick, Uint8 hat, Uint8 value) { int posted; - /* Make sure we're not getting garbage events */ + /* Make sure we're not getting garbage or duplicate events */ if (hat >= joystick->nhats) { return 0; } - - /* Update internal joystick state */ - joystick->hats[hat] = value; + if (value == joystick->hats[hat]) { + return 0; + } /* We ignore events if we don't have keyboard focus, except for centering * events. */ if (SDL_PrivateJoystickShouldIgnoreEvent()) { - if (!(joystick->closed && joystick->uncentered)) { + if (value != SDL_HAT_CENTERED) { return 0; } } + /* Update internal joystick state */ + joystick->hats[hat] = value; /* Post the event, if desired */ posted = 0; @@ -626,15 +634,20 @@ SDL_PrivateJoystickButton(SDL_Joystick * joystick, Uint8 button, Uint8 state) } #endif /* !SDL_EVENTS_DISABLED */ - /* Make sure we're not getting garbage events */ + /* Make sure we're not getting garbage or duplicate events */ if (button >= joystick->nbuttons) { return 0; } + if (state == joystick->buttons[button]) { + return 0; + } /* We ignore events if we don't have keyboard focus, except for button * release. */ - if (state == SDL_PRESSED && SDL_PrivateJoystickShouldIgnoreEvent()) { - return 0; + if (SDL_PrivateJoystickShouldIgnoreEvent()) { + if (state == SDL_PRESSED) { + return 0; + } } /* Update internal joystick state */ @@ -659,8 +672,7 @@ SDL_JoystickUpdate(void) SDL_Joystick *joystick; joystick = SDL_joysticks; - while ( joystick ) - { + while (joystick) { SDL_Joystick *joysticknext; /* save off the next pointer, the Update call may cause a joystick removed event * and cause our joystick pointer to be freed @@ -669,29 +681,31 @@ SDL_JoystickUpdate(void) SDL_updating_joystick = joystick; - SDL_SYS_JoystickUpdate( joystick ); + SDL_SYS_JoystickUpdate(joystick); - if ( joystick->closed && joystick->uncentered ) - { + if (joystick->force_recentering) { int i; /* Tell the app that everything is centered/unpressed... */ - for (i = 0; i < joystick->naxes; i++) + for (i = 0; i < joystick->naxes; i++) { SDL_PrivateJoystickAxis(joystick, i, 0); + } - for (i = 0; i < joystick->nbuttons; i++) + for (i = 0; i < joystick->nbuttons; i++) { SDL_PrivateJoystickButton(joystick, i, 0); + } - for (i = 0; i < joystick->nhats; i++) + for (i = 0; i < joystick->nhats; i++) { SDL_PrivateJoystickHat(joystick, i, SDL_HAT_CENTERED); + } - joystick->uncentered = 0; + joystick->force_recentering = SDL_FALSE; } SDL_updating_joystick = NULL; /* If the joystick was closed while updating, free it here */ - if ( joystick->ref_count <= 0 ) { + if (joystick->ref_count <= 0) { SDL_JoystickClose(joystick); } @@ -736,28 +750,16 @@ SDL_JoystickEventState(int state) #endif /* SDL_EVENTS_DISABLED */ } -/* return 1 if you want to run the joystick update loop this frame, used by hotplug support */ -SDL_bool -SDL_PrivateJoystickNeedsPolling() -{ - if (SDL_joysticks != NULL) { - return SDL_TRUE; - } else { - return SDL_SYS_JoystickNeedsPolling(); - } -} - - /* return the guid for this index */ SDL_JoystickGUID SDL_JoystickGetDeviceGUID(int device_index) { if ((device_index < 0) || (device_index >= SDL_NumJoysticks())) { SDL_JoystickGUID emptyGUID; SDL_SetError("There are %d joysticks available", SDL_NumJoysticks()); - SDL_zero( emptyGUID ); + SDL_zero(emptyGUID); return emptyGUID; } - return SDL_SYS_JoystickGetDeviceGUID( device_index ); + return SDL_SYS_JoystickGetDeviceGUID(device_index); } /* return the guid for this opened device */ @@ -765,14 +767,14 @@ SDL_JoystickGUID SDL_JoystickGetGUID(SDL_Joystick * joystick) { if (!SDL_PrivateJoystickValid(joystick)) { SDL_JoystickGUID emptyGUID; - SDL_zero( emptyGUID ); + SDL_zero(emptyGUID); return emptyGUID; } - return SDL_SYS_JoystickGetGUID( joystick ); + return SDL_SYS_JoystickGetGUID(joystick); } /* convert the guid to a printable string */ -void SDL_JoystickGetGUIDString( SDL_JoystickGUID guid, char *pszGUID, int cbGUID ) +void SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID) { static const char k_rgchHexToASCII[] = "0123456789abcdef"; int i; @@ -781,14 +783,13 @@ void SDL_JoystickGetGUIDString( SDL_JoystickGUID guid, char *pszGUID, int cbGUID return; } - for ( i = 0; i < sizeof(guid.data) && i < (cbGUID-1)/2; i++ ) - { + for (i = 0; i < sizeof(guid.data) && i < (cbGUID-1)/2; i++) { /* each input byte writes 2 ascii chars, and might write a null byte. */ /* If we don't have room for next input byte, stop */ unsigned char c = guid.data[i]; - *pszGUID++ = k_rgchHexToASCII[ c >> 4 ]; - *pszGUID++ = k_rgchHexToASCII[ c & 0x0F ]; + *pszGUID++ = k_rgchHexToASCII[c >> 4]; + *pszGUID++ = k_rgchHexToASCII[c & 0x0F]; } *pszGUID = '\0'; } @@ -799,28 +800,22 @@ void SDL_JoystickGetGUIDString( SDL_JoystickGUID guid, char *pszGUID, int cbGUID * Input : c - * Output : unsigned char *-----------------------------------------------------------------------------*/ -static unsigned char nibble( char c ) +static unsigned char nibble(char c) { - if ( ( c >= '0' ) && - ( c <= '9' ) ) - { + if ((c >= '0') && (c <= '9')) { return (unsigned char)(c - '0'); } - if ( ( c >= 'A' ) && - ( c <= 'F' ) ) - { + if ((c >= 'A') && (c <= 'F')) { return (unsigned char)(c - 'A' + 0x0a); } - if ( ( c >= 'a' ) && - ( c <= 'f' ) ) - { + if ((c >= 'a') && (c <= 'f')) { return (unsigned char)(c - 'a' + 0x0a); } /* received an invalid character, and no real way to return an error */ - /* AssertMsg1( false, "Q_nibble invalid hex character '%c' ", c ); */ + /* AssertMsg1(false, "Q_nibble invalid hex character '%c' ", c); */ return 0; } @@ -830,25 +825,39 @@ SDL_JoystickGUID SDL_JoystickGetGUIDFromString(const char *pchGUID) { SDL_JoystickGUID guid; int maxoutputbytes= sizeof(guid); - size_t len = SDL_strlen( pchGUID ); + size_t len = SDL_strlen(pchGUID); Uint8 *p; size_t i; /* Make sure it's even */ - len = ( len ) & ~0x1; + len = (len) & ~0x1; - SDL_memset( &guid, 0x00, sizeof(guid) ); + SDL_memset(&guid, 0x00, sizeof(guid)); p = (Uint8 *)&guid; - for ( i = 0; - ( i < len ) && ( ( p - (Uint8 *)&guid ) < maxoutputbytes ); - i+=2, p++ ) - { - *p = ( nibble( pchGUID[i] ) << 4 ) | nibble( pchGUID[i+1] ); + for (i = 0; (i < len) && ((p - (Uint8 *)&guid) < maxoutputbytes); i+=2, p++) { + *p = (nibble(pchGUID[i]) << 4) | nibble(pchGUID[i+1]); } return guid; } +/* update the power level for this joystick */ +void SDL_PrivateJoystickBatteryLevel(SDL_Joystick * joystick, SDL_JoystickPowerLevel ePowerLevel) +{ + joystick->epowerlevel = ePowerLevel; +} + + +/* return its power level */ +SDL_JoystickPowerLevel SDL_JoystickCurrentPowerLevel(SDL_Joystick * joystick) +{ + if (!SDL_PrivateJoystickValid(joystick)) { + return (SDL_JOYSTICK_POWER_UNKNOWN); + } + return joystick->epowerlevel; +} + + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/SDL_joystick_c.h b/Engine/lib/sdl/src/joystick/SDL_joystick_c.h index bb0c0205ae..4a076f6d66 100644 --- a/Engine/lib/sdl/src/joystick/SDL_joystick_c.h +++ b/Engine/lib/sdl/src/joystick/SDL_joystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,9 +41,8 @@ extern int SDL_PrivateJoystickHat(SDL_Joystick * joystick, Uint8 hat, Uint8 value); extern int SDL_PrivateJoystickButton(SDL_Joystick * joystick, Uint8 button, Uint8 state); - -/* Helper function to let lower sys layer tell the event system if the joystick code needs to think */ -extern SDL_bool SDL_PrivateJoystickNeedsPolling(); +extern void SDL_PrivateJoystickBatteryLevel( SDL_Joystick * joystick, + SDL_JoystickPowerLevel ePowerLevel ); /* Internal sanity checking functions */ extern int SDL_PrivateJoystickValid(SDL_Joystick * joystick); diff --git a/Engine/lib/sdl/src/joystick/SDL_sysjoystick.h b/Engine/lib/sdl/src/joystick/SDL_sysjoystick.h index 818509d678..1015840aff 100644 --- a/Engine/lib/sdl/src/joystick/SDL_sysjoystick.h +++ b/Engine/lib/sdl/src/joystick/SDL_sysjoystick.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,6 +20,9 @@ */ #include "../SDL_internal.h" +#ifndef _SDL_sysjoystick_h +#define _SDL_sysjoystick_h + /* This is the system specific header for the SDL joystick API */ #include "SDL_joystick.h" @@ -50,8 +53,8 @@ struct _SDL_Joystick int ref_count; /* Reference count for multiple opens */ - Uint8 closed; /* 1 if this device is no longer valid */ - Uint8 uncentered; /* 1 if this device needs to have its state reset to 0 */ + SDL_bool force_recentering; /* SDL_TRUE if this device needs to have its state reset to 0 */ + SDL_JoystickPowerLevel epowerlevel; /* power level of this joystick, SDL_JOYSTICK_POWER_UNKNOWN if not supported */ struct _SDL_Joystick *next; /* pointer to next joystick we have allocated */ }; @@ -68,9 +71,6 @@ extern int SDL_SYS_NumJoysticks(); /* Function to cause any queued joystick insertions to be processed */ extern void SDL_SYS_JoystickDetect(); -/* Function to determine if the joystick loop needs to run right now */ -extern SDL_bool SDL_SYS_JoystickNeedsPolling(); - /* Function to get the device-dependent name of a joystick */ extern const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index); @@ -78,14 +78,14 @@ extern const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index); extern SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index); /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ extern int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index); /* Function to query if the joystick is currently attached - * It returns 1 if attached, 0 otherwise. + * It returns SDL_TRUE if attached, SDL_FALSE otherwise. */ extern SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick * joystick); @@ -108,10 +108,11 @@ extern SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID(int device_index); /* Function to return the stable GUID for a opened joystick */ extern SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick); -#if defined(SDL_JOYSTICK_DINPUT) || defined(SDL_JOYSTICK_XINPUT) -/* Function to get the current instance id of the joystick located at device_index */ -extern SDL_bool SDL_SYS_IsXInputDeviceIndex( int device_index ); -extern SDL_bool SDL_SYS_IsXInputJoystick(SDL_Joystick * joystick); +#if SDL_JOYSTICK_XINPUT +/* Function returns SDL_TRUE if this device is an XInput gamepad */ +extern SDL_bool SDL_SYS_IsXInputGamepad_DeviceIndex(int device_index); #endif +#endif /* _SDL_sysjoystick_h */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick.c index 422c5f5f4d..8656a5322d 100644 --- a/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -191,8 +191,8 @@ Android_OnPadDown(int device_id, int keycode) item = JoystickByDeviceId(device_id); if (item && item->joystick) { SDL_PrivateJoystickButton(item->joystick, button , SDL_PRESSED); + return 0; } - return 0; } return -1; @@ -207,8 +207,8 @@ Android_OnPadUp(int device_id, int keycode) item = JoystickByDeviceId(device_id); if (item && item->joystick) { SDL_PrivateJoystickButton(item->joystick, button, SDL_RELEASED); + return 0; } - return 0; } return -1; @@ -311,7 +311,9 @@ Android_AddJoystick(int device_id, const char *name, SDL_bool is_accelerometer, } #endif /* !SDL_EVENTS_DISABLED */ +#ifdef DEBUG_JOYSTICK SDL_Log("Added joystick %s with device_id %d", name, device_id); +#endif return numjoysticks; } @@ -368,7 +370,9 @@ Android_RemoveJoystick(int device_id) } #endif /* !SDL_EVENTS_DISABLED */ +#ifdef DEBUG_JOYSTICK SDL_Log("Removed joystick with device_id %d", device_id); +#endif SDL_free(item->name); SDL_free(item); @@ -410,11 +414,6 @@ void SDL_SYS_JoystickDetect() } } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_TRUE; -} - static SDL_joylist_item * JoystickByDevIndex(int device_index) { @@ -472,7 +471,7 @@ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -500,10 +499,10 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) return (0); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { - return !joystick->closed && (joystick->hwdata != NULL); + return joystick->hwdata != NULL; } void @@ -519,6 +518,12 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) if (item->joystick) { if (Android_JNI_GetAccelerometerValues(values)) { for ( i = 0; i < 3; i++ ) { + if (values[i] > 1.0f) { + values[i] = 1.0f; + } else if (values[i] < -1.0f) { + values[i] = -1.0f; + } + value = (Sint16)(values[i] * 32767.0f); SDL_PrivateJoystickAxis(item->joystick, i, value); } @@ -534,11 +539,6 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) void SDL_SYS_JoystickClose(SDL_Joystick * joystick) { - if (joystick->hwdata) { - ((SDL_joylist_item*)joystick->hwdata)->joystick = NULL; - joystick->hwdata = NULL; - } - joystick->closed = 1; } /* Function to perform any system-specific joystick related cleanup */ diff --git a/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick_c.h b/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick_c.h index 3d56b0b995..49b494c547 100644 --- a/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick_c.h +++ b/Engine/lib/sdl/src/joystick/android/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,7 @@ 3. This notice may not be removed or altered from any source distribution. */ -#include "SDL_config.h" +#include "../../SDL_internal.h" #ifdef SDL_JOYSTICK_ANDROID #include "../SDL_sysjoystick.h" diff --git a/Engine/lib/sdl/src/joystick/bsd/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/bsd/SDL_sysjoystick.c index 2a09f923d3..509d43f755 100644 --- a/Engine/lib/sdl/src/joystick/bsd/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/bsd/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -76,7 +76,7 @@ #include "../SDL_sysjoystick.h" #include "../SDL_joystick_c.h" -#define MAX_UHID_JOYS 16 +#define MAX_UHID_JOYS 64 #define MAX_JOY_JOYS 2 #define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS) @@ -213,11 +213,6 @@ void SDL_SYS_JoystickDetect() { } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_FALSE; -} - const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) { @@ -291,7 +286,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy, int device_index) struct joystick_hwdata *hw; struct hid_item hitem; struct hid_data *hdata; - struct report *rep; + struct report *rep = NULL; int fd; int i; @@ -342,6 +337,38 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy, int device_index) #endif rep->rid = -1; /* XXX */ } +#if defined(__NetBSD__) + usb_device_descriptor_t udd; + struct usb_string_desc usd; + if (ioctl(fd, USB_GET_DEVICE_DESC, &udd) == -1) + goto desc_failed; + + /* Get default language */ + usd.usd_string_index = USB_LANGUAGE_TABLE; + usd.usd_language_id = 0; + if (ioctl(fd, USB_GET_STRING_DESC, &usd) == -1 || usd.usd_desc.bLength < 4) { + usd.usd_language_id = 0; + } else { + usd.usd_language_id = UGETW(usd.usd_desc.bString[0]); + } + + usd.usd_string_index = udd.iProduct; + if (ioctl(fd, USB_GET_STRING_DESC, &usd) == 0) { + char str[128]; + char *new_name = NULL; + int i; + for (i = 0; i < (usd.usd_desc.bLength >> 1) - 1 && i < sizeof(str) - 1; i++) { + str[i] = UGETW(usd.usd_desc.bString[i]); + } + str[i] = '\0'; + asprintf(&new_name, "%s @ %s", str, path); + if (new_name != NULL) { + free(joydevnames[SDL_SYS_numjoysticks]); + joydevnames[SDL_SYS_numjoysticks] = new_name; + } + } +desc_failed: +#endif if (report_alloc(rep, hw->repdesc, REPORT_INPUT) < 0) { goto usberr; } @@ -414,9 +441,21 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy, int device_index) if (hw->axis_map[i] > 0) hw->axis_map[i] = joy->naxes++; + if (joy->naxes == 0 && joy->nbuttons == 0 && joy->nhats == 0 && joy->nballs == 0) { + SDL_SetError("%s: Not a joystick, ignoring", hw->path); + goto usberr; + } + usbend: /* The poll blocks the event thread. */ fcntl(fd, F_SETFL, O_NONBLOCK); +#ifdef __NetBSD__ + /* Flush pending events */ + if (rep) { + while (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) == rep->size) + ; + } +#endif return (0); usberr: @@ -426,7 +465,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joy, int device_index) return (-1); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { return SDL_TRUE; @@ -563,8 +602,6 @@ SDL_SYS_JoystickClose(SDL_Joystick * joy) close(joy->hwdata->fd); SDL_free(joy->hwdata->path); SDL_free(joy->hwdata); - - return; } void diff --git a/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick.c index bdface7779..6dd306aa8e 100644 --- a/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -38,19 +38,31 @@ #include "../../events/SDL_events_c.h" #endif +#define SDL_JOYSTICK_RUNLOOP_MODE CFSTR("SDLJoystick") + /* The base object of the HID Manager API */ static IOHIDManagerRef hidman = NULL; /* Linked list of all available devices */ static recDevice *gpDeviceList = NULL; -/* if SDL_TRUE then a device was added since the last update call */ -static SDL_bool s_bDeviceAdded = SDL_FALSE; -static SDL_bool s_bDeviceRemoved = SDL_FALSE; - /* static incrementing counter for new joystick devices seen on the system. Devices should start with index 0 */ static int s_joystick_instance_id = -1; +static recDevice *GetDeviceForIndex(int device_index) +{ + recDevice *device = gpDeviceList; + while (device) { + if (!device->removed) { + if (device_index == 0) + break; + + --device_index; + } + device = device->pNext; + } + return device; +} static void FreeElementList(recElement *pElement) @@ -67,6 +79,11 @@ FreeDevice(recDevice *removeDevice) { recDevice *pDeviceNext = NULL; if (removeDevice) { + if (removeDevice->deviceRef) { + IOHIDDeviceUnscheduleFromRunLoop(removeDevice->deviceRef, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE); + removeDevice->deviceRef = NULL; + } + /* save next device prior to disposing of this device */ pDeviceNext = removeDevice->pNext; @@ -131,11 +148,27 @@ static void JoystickDeviceWasRemovedCallback(void *ctx, IOReturn result, void *sender) { recDevice *device = (recDevice *) ctx; - device->removed = 1; + device->removed = SDL_TRUE; + device->deviceRef = NULL; // deviceRef was invalidated due to the remove #if SDL_HAPTIC_IOKIT MacHaptic_MaybeRemoveDevice(device->ffservice); #endif - s_bDeviceRemoved = SDL_TRUE; + +/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceRemoved()? */ +#if !SDL_EVENTS_DISABLED + { + SDL_Event event; + event.type = SDL_JOYDEVICEREMOVED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = device->instance_id; + if ((SDL_EventOK == NULL) + || (*SDL_EventOK) (SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } + } +#endif /* !SDL_EVENTS_DISABLED */ } @@ -210,6 +243,20 @@ AddHIDElement(const void *value, void *parameter) } } break; + case kHIDUsage_GD_DPadUp: + case kHIDUsage_GD_DPadDown: + case kHIDUsage_GD_DPadRight: + case kHIDUsage_GD_DPadLeft: + case kHIDUsage_GD_Start: + case kHIDUsage_GD_Select: + if (!ElementAlreadyAdded(cookie, pDevice->firstButton)) { + element = (recElement *) SDL_calloc(1, sizeof (recElement)); + if (element) { + pDevice->buttons++; + headElement = &(pDevice->firstButton); + } + } + break; } break; @@ -232,6 +279,7 @@ AddHIDElement(const void *value, void *parameter) break; case kHIDPage_Button: + case kHIDPage_Consumer: /* e.g. 'pause' button on Steelseries MFi gamepads. */ if (!ElementAlreadyAdded(cookie, pDevice->firstButton)) { element = (recElement *) SDL_calloc(1, sizeof (recElement)); if (element) { @@ -356,15 +404,34 @@ GetDeviceInfo(IOHIDDeviceRef hidDevice, recDevice *pDevice) return SDL_TRUE; } +static SDL_bool +JoystickAlreadyKnown(IOHIDDeviceRef ioHIDDeviceObject) +{ + recDevice *i; + for (i = gpDeviceList; i != NULL; i = i->pNext) { + if (i->deviceRef == ioHIDDeviceObject) { + return SDL_TRUE; + } + } + return SDL_FALSE; +} + static void JoystickDeviceWasAddedCallback(void *ctx, IOReturn res, void *sender, IOHIDDeviceRef ioHIDDeviceObject) { + recDevice *device; + int device_index = 0; + if (res != kIOReturnSuccess) { return; } - recDevice *device = (recDevice *) SDL_calloc(1, sizeof(recDevice)); + if (JoystickAlreadyKnown(ioHIDDeviceObject)) { + return; /* IOKit sent us a duplicate. */ + } + + device = (recDevice *) SDL_calloc(1, sizeof(recDevice)); if (!device) { SDL_OutOfMemory(); @@ -378,41 +445,59 @@ JoystickDeviceWasAddedCallback(void *ctx, IOReturn res, void *sender, IOHIDDevic /* Get notified when this device is disconnected. */ IOHIDDeviceRegisterRemovalCallback(ioHIDDeviceObject, JoystickDeviceWasRemovedCallback, device); - IOHIDDeviceScheduleWithRunLoop(ioHIDDeviceObject, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); + IOHIDDeviceScheduleWithRunLoop(ioHIDDeviceObject, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE); /* Allocate an instance ID for this device */ device->instance_id = ++s_joystick_instance_id; /* We have to do some storage of the io_service_t for SDL_HapticOpenFromJoystick */ + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 if (IOHIDDeviceGetService != NULL) { /* weak reference: available in 10.6 and later. */ +#endif + const io_service_t ioservice = IOHIDDeviceGetService(ioHIDDeviceObject); +#if SDL_HAPTIC_IOKIT if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK)) { device->ffservice = ioservice; -#if SDL_HAPTIC_IOKIT MacHaptic_MaybeAddDevice(ioservice); -#endif } - } +#endif - device->send_open_event = 1; - s_bDeviceAdded = SDL_TRUE; +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + } +#endif /* Add device to the end of the list */ - if ( !gpDeviceList ) - { + if ( !gpDeviceList ) { gpDeviceList = device; - } - else - { + } else { recDevice *curdevice; curdevice = gpDeviceList; - while ( curdevice->pNext ) - { + while ( curdevice->pNext ) { + ++device_index; curdevice = curdevice->pNext; } curdevice->pNext = device; + ++device_index; /* bump by one since we counted by pNext. */ + } + +/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceAdded()? */ +#if !SDL_EVENTS_DISABLED + { + SDL_Event event; + event.type = SDL_JOYDEVICEADDED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = device_index; + if ((SDL_EventOK == NULL) + || (*SDL_EventOK) (SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } } +#endif /* !SDL_EVENTS_DISABLED */ } static SDL_bool @@ -420,25 +505,19 @@ ConfigHIDManager(CFArrayRef matchingArray) { CFRunLoopRef runloop = CFRunLoopGetCurrent(); - /* Run in a custom RunLoop mode just while initializing, - so we can detect sticks without messing with everything else. */ - CFStringRef tempRunLoopMode = CFSTR("SDLJoystickInit"); - if (IOHIDManagerOpen(hidman, kIOHIDOptionsTypeNone) != kIOReturnSuccess) { return SDL_FALSE; } - IOHIDManagerRegisterDeviceMatchingCallback(hidman, JoystickDeviceWasAddedCallback, NULL); - IOHIDManagerScheduleWithRunLoop(hidman, runloop, tempRunLoopMode); IOHIDManagerSetDeviceMatchingMultiple(hidman, matchingArray); + IOHIDManagerRegisterDeviceMatchingCallback(hidman, JoystickDeviceWasAddedCallback, NULL); + IOHIDManagerScheduleWithRunLoop(hidman, runloop, SDL_JOYSTICK_RUNLOOP_MODE); - while (CFRunLoopRunInMode(tempRunLoopMode,0,TRUE)==kCFRunLoopRunHandledSource) { + while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { /* no-op. Callback fires once per existing device. */ } - /* Put this in the normal RunLoop mode now, for future hotplug events. */ - IOHIDManagerUnscheduleFromRunLoop(hidman, runloop, tempRunLoopMode); - IOHIDManagerScheduleWithRunLoop(hidman, runloop, kCFRunLoopDefaultMode); + /* future hotplug events will come through SDL_JOYSTICK_RUNLOOP_MODE now. */ return SDL_TRUE; /* good to go. */ } @@ -544,74 +623,28 @@ SDL_SYS_NumJoysticks() void SDL_SYS_JoystickDetect() { - if (s_bDeviceAdded || s_bDeviceRemoved) { - recDevice *device = gpDeviceList; - s_bDeviceAdded = SDL_FALSE; - s_bDeviceRemoved = SDL_FALSE; - int device_index = 0; - /* send notifications */ - while (device) { - if (device->send_open_event) { - device->send_open_event = 0; -/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceAdded()? */ -#if !SDL_EVENTS_DISABLED - SDL_Event event; - event.type = SDL_JOYDEVICEADDED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = device_index; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } -#endif /* !SDL_EVENTS_DISABLED */ - - } - - if (device->removed) { - const int instance_id = device->instance_id; - device = FreeDevice(device); - -/* !!! FIXME: why isn't there an SDL_PrivateJoyDeviceRemoved()? */ -#if !SDL_EVENTS_DISABLED - SDL_Event event; - event.type = SDL_JOYDEVICEREMOVED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = instance_id; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } -#endif /* !SDL_EVENTS_DISABLED */ - - } else { - device = device->pNext; - device_index++; - } + recDevice *device = gpDeviceList; + while (device) { + if (device->removed) { + device = FreeDevice(device); + } else { + device = device->pNext; } } -} -SDL_bool -SDL_SYS_JoystickNeedsPolling() -{ - return s_bDeviceAdded || s_bDeviceRemoved; + // run this after the checks above so we don't set device->removed and delete the device before + // SDL_SYS_JoystickUpdate can run to clean up the SDL_Joystick object that owns this device + while (CFRunLoopRunInMode(SDL_JOYSTICK_RUNLOOP_MODE,0,TRUE) == kCFRunLoopRunHandledSource) { + /* no-op. Pending callbacks will fire in CFRunLoopRunInMode(). */ + } } /* Function to get the device-dependent name of a joystick */ const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) { - recDevice *device = gpDeviceList; - - while (device_index-- > 0) { - device = device->pNext; - } - - return device->product; + recDevice *device = GetDeviceForIndex(device_index); + return device ? device->product : "UNKNOWN"; } /* Function to return the instance id of the joystick at device_index @@ -619,30 +652,19 @@ SDL_SYS_JoystickNameForDeviceIndex(int device_index) SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) { - recDevice *device = gpDeviceList; - int index; - - for (index = device_index; index > 0; index--) { - device = device->pNext; - } - - return device->instance_id; + recDevice *device = GetDeviceForIndex(device_index); + return device ? device->instance_id : 0; } /* Function to open a joystick for use. - * The joystick to open is specified by the index field of the joystick. + * The joystick to open is specified by the device index. * This should fill the nbuttons and naxes fields of the joystick structure. * It returns 0, or -1 if there is an error. */ int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) { - recDevice *device = gpDeviceList; - int index; - - for (index = device_index; index > 0; index--) { - device = device->pNext; - } + recDevice *device = GetDeviceForIndex(device_index); joystick->instance_id = device->instance_id; joystick->hwdata = device; @@ -656,21 +678,12 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) } /* Function to query if the joystick is currently attached - * It returns 1 if attached, 0 otherwise. + * It returns SDL_TRUE if attached, SDL_FALSE otherwise. */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick * joystick) { - recDevice *device = gpDeviceList; - - while (device) { - if (joystick->instance_id == device->instance_id) { - return SDL_TRUE; - } - device = device->pNext; - } - - return SDL_FALSE; + return joystick->hwdata != NULL; } /* Function to update the state of a joystick - called as a device poll. @@ -691,9 +704,10 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) } if (device->removed) { /* device was unplugged; ignore it. */ - joystick->closed = 1; - joystick->uncentered = 1; - joystick->hwdata = NULL; + if (joystick->hwdata) { + joystick->force_recentering = SDL_TRUE; + joystick->hwdata = NULL; + } return; } @@ -781,7 +795,6 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) void SDL_SYS_JoystickClose(SDL_Joystick * joystick) { - joystick->closed = 1; } /* Function to perform any system-specific joystick related cleanup */ @@ -793,25 +806,24 @@ SDL_SYS_JoystickQuit(void) } if (hidman) { + IOHIDManagerUnscheduleFromRunLoop(hidman, CFRunLoopGetCurrent(), SDL_JOYSTICK_RUNLOOP_MODE); IOHIDManagerClose(hidman, kIOHIDOptionsTypeNone); CFRelease(hidman); hidman = NULL; } - - s_bDeviceAdded = s_bDeviceRemoved = SDL_FALSE; } SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index ) { - recDevice *device = gpDeviceList; - int index; - - for (index = device_index; index > 0; index--) { - device = device->pNext; - } - - return device->guid; + recDevice *device = GetDeviceForIndex(device_index); + SDL_JoystickGUID guid; + if (device) { + guid = device->guid; + } else { + SDL_zero(guid); + } + return guid; } SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick *joystick) diff --git a/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick_c.h b/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick_c.h index 0a15ba18d6..1c317eca7a 100644 --- a/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick_c.h +++ b/Engine/lib/sdl/src/joystick/darwin/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,6 +21,7 @@ #include "../../SDL_internal.h" #ifndef SDL_JOYSTICK_IOKIT_H +#define SDL_JOYSTICK_IOKIT_H #include @@ -58,12 +59,10 @@ struct joystick_hwdata recElement *firstButton; recElement *firstHat; - int removed; - int uncentered; + SDL_bool removed; int instance_id; SDL_JoystickGUID guid; - Uint8 send_open_event; /* 1 if we need to send an Added event for this device */ struct joystick_hwdata *pNext; /* next device */ }; diff --git a/Engine/lib/sdl/src/joystick/dummy/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/dummy/SDL_sysjoystick.c index 0d45b6ce29..10fda10da2 100644 --- a/Engine/lib/sdl/src/joystick/dummy/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/dummy/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,7 +34,7 @@ int SDL_SYS_JoystickInit(void) { - return (0); + return 0; } int SDL_SYS_NumJoysticks() @@ -46,11 +46,6 @@ void SDL_SYS_JoystickDetect() { } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_FALSE; -} - /* Function to get the device-dependent name of a joystick */ const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) @@ -66,7 +61,7 @@ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -76,7 +71,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) return SDL_SetError("Logic error: No joysticks available"); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { return SDL_TRUE; @@ -90,21 +85,18 @@ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) void SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) { - return; } /* Function to close a joystick after use */ void SDL_SYS_JoystickClose(SDL_Joystick * joystick) { - return; } /* Function to perform any system-specific joystick related cleanup */ void SDL_SYS_JoystickQuit(void) { - return; } SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index ) diff --git a/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick.c new file mode 100644 index 0000000000..e0c5833bfe --- /dev/null +++ b/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick.c @@ -0,0 +1,427 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#ifdef SDL_JOYSTICK_EMSCRIPTEN + +#include /* For the definition of NULL */ +#include "SDL_error.h" +#include "SDL_events.h" + +#if !SDL_EVENTS_DISABLED +#include "../../events/SDL_events_c.h" +#endif + +#include "SDL_joystick.h" +#include "SDL_hints.h" +#include "SDL_assert.h" +#include "SDL_timer.h" +#include "SDL_log.h" +#include "SDL_sysjoystick_c.h" +#include "../SDL_joystick_c.h" + +static SDL_joylist_item * JoystickByIndex(int index); + +static SDL_joylist_item *SDL_joylist = NULL; +static SDL_joylist_item *SDL_joylist_tail = NULL; +static int numjoysticks = 0; +static int instance_counter = 0; + +EM_BOOL +Emscripten_JoyStickConnected(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData) +{ + int i; + + SDL_joylist_item *item; + + if (JoystickByIndex(gamepadEvent->index) != NULL) { + return 1; + } + +#if !SDL_EVENTS_DISABLED + SDL_Event event; +#endif + + item = (SDL_joylist_item *) SDL_malloc(sizeof (SDL_joylist_item)); + if (item == NULL) { + return 1; + } + + SDL_zerop(item); + item->index = gamepadEvent->index; + + item->name = SDL_strdup(gamepadEvent->id); + if ( item->name == NULL ) { + SDL_free(item); + return 1; + } + + item->mapping = SDL_strdup(gamepadEvent->mapping); + if ( item->mapping == NULL ) { + SDL_free(item->name); + SDL_free(item); + return 1; + } + + item->naxes = gamepadEvent->numAxes; + item->nbuttons = gamepadEvent->numButtons; + item->device_instance = instance_counter++; + + item->timestamp = gamepadEvent->timestamp; + + for( i = 0; i < item->naxes; i++) { + item->axis[i] = gamepadEvent->axis[i]; + } + + for( i = 0; i < item->nbuttons; i++) { + item->analogButton[i] = gamepadEvent->analogButton[i]; + item->digitalButton[i] = gamepadEvent->digitalButton[i]; + } + + if (SDL_joylist_tail == NULL) { + SDL_joylist = SDL_joylist_tail = item; + } else { + SDL_joylist_tail->next = item; + SDL_joylist_tail = item; + } + + ++numjoysticks; +#ifdef DEBUG_JOYSTICK + SDL_Log("Number of joysticks is %d", numjoysticks); +#endif +#if !SDL_EVENTS_DISABLED + event.type = SDL_JOYDEVICEADDED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = numjoysticks - 1; + if ( (SDL_EventOK == NULL) || + (*SDL_EventOK) (SDL_EventOKParam, &event) ) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ + +#ifdef DEBUG_JOYSTICK + SDL_Log("Added joystick with index %d", item->index); +#endif + + return 1; +} + +EM_BOOL +Emscripten_JoyStickDisconnected(int eventType, const EmscriptenGamepadEvent *gamepadEvent, void *userData) +{ + SDL_joylist_item *item = SDL_joylist; + SDL_joylist_item *prev = NULL; +#if !SDL_EVENTS_DISABLED + SDL_Event event; +#endif + + while (item != NULL) { + if (item->index == gamepadEvent->index) { + break; + } + prev = item; + item = item->next; + } + + if (item == NULL) { + return 1; + } + + if (item->joystick) { + item->joystick->hwdata = NULL; + } + + if (prev != NULL) { + prev->next = item->next; + } else { + SDL_assert(SDL_joylist == item); + SDL_joylist = item->next; + } + if (item == SDL_joylist_tail) { + SDL_joylist_tail = prev; + } + + /* Need to decrement the joystick count before we post the event */ + --numjoysticks; + +#if !SDL_EVENTS_DISABLED + event.type = SDL_JOYDEVICEREMOVED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = item->device_instance; + if ( (SDL_EventOK == NULL) || + (*SDL_EventOK) (SDL_EventOKParam, &event) ) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ + +#ifdef DEBUG_JOYSTICK + SDL_Log("Removed joystick with id %d", item->device_instance); +#endif + SDL_free(item->name); + SDL_free(item->mapping); + SDL_free(item); + return 1; +} + +/* Function to scan the system for joysticks. + * It should return 0, or -1 on an unrecoverable fatal error. + */ +int +SDL_SYS_JoystickInit(void) +{ + int retval, i, numjs; + EmscriptenGamepadEvent gamepadState; + + numjoysticks = 0; + numjs = emscripten_get_num_gamepads(); + + /* Check if gamepad is supported by browser */ + if (numjs == EMSCRIPTEN_RESULT_NOT_SUPPORTED) { + return SDL_SetError("Gamepads not supported"); + } + + /* handle already connected gamepads */ + if (numjs > 0) { + for(i = 0; i < numjs; i++) { + retval = emscripten_get_gamepad_status(i, &gamepadState); + if (retval == EMSCRIPTEN_RESULT_SUCCESS) { + Emscripten_JoyStickConnected(EMSCRIPTEN_EVENT_GAMEPADCONNECTED, + &gamepadState, + NULL); + } + } + } + + retval = emscripten_set_gamepadconnected_callback(NULL, + 0, + Emscripten_JoyStickConnected); + + if(retval != EMSCRIPTEN_RESULT_SUCCESS) { + SDL_SYS_JoystickQuit(); + return SDL_SetError("Could not set gamepad connect callback"); + } + + retval = emscripten_set_gamepaddisconnected_callback(NULL, + 0, + Emscripten_JoyStickDisconnected); + if(retval != EMSCRIPTEN_RESULT_SUCCESS) { + SDL_SYS_JoystickQuit(); + return SDL_SetError("Could not set gamepad disconnect callback"); + } + + return 0; +} + +/* Returns item matching given SDL device index. */ +static SDL_joylist_item * +JoystickByDeviceIndex(int device_index) +{ + SDL_joylist_item *item = SDL_joylist; + + while (0 < device_index) { + --device_index; + item = item->next; + } + + return item; +} + +/* Returns item matching given HTML gamepad index. */ +static SDL_joylist_item * +JoystickByIndex(int index) +{ + SDL_joylist_item *item = SDL_joylist; + + if (index < 0) { + return NULL; + } + + while (item != NULL) { + if (item->index == index) { + break; + } + item = item->next; + } + + return item; +} + +int SDL_SYS_NumJoysticks() +{ + return numjoysticks; +} + +void SDL_SYS_JoystickDetect() +{ +} + +/* Function to get the device-dependent name of a joystick */ +const char * +SDL_SYS_JoystickNameForDeviceIndex(int device_index) +{ + return JoystickByDeviceIndex(device_index)->name; +} + +/* Function to perform the mapping from device index to the instance id for this index */ +SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) +{ + return JoystickByDeviceIndex(device_index)->device_instance; +} + +/* Function to open a joystick for use. + The joystick to open is specified by the device index. + This should fill the nbuttons and naxes fields of the joystick structure. + It returns 0, or -1 if there is an error. + */ +int +SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) +{ + SDL_joylist_item *item = JoystickByDeviceIndex(device_index); + + if (item == NULL ) { + return SDL_SetError("No such device"); + } + + if (item->joystick != NULL) { + return SDL_SetError("Joystick already opened"); + } + + joystick->instance_id = item->device_instance; + joystick->hwdata = (struct joystick_hwdata *) item; + item->joystick = joystick; + + /* HTML5 Gamepad API doesn't say anything about these */ + joystick->nhats = 0; + joystick->nballs = 0; + + joystick->nbuttons = item->nbuttons; + joystick->naxes = item->naxes; + + return (0); +} + +/* Function to determine if this joystick is attached to the system right now */ +SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) +{ + return joystick->hwdata != NULL; +} + +/* Function to update the state of a joystick - called as a device poll. + * This function shouldn't update the joystick structure directly, + * but instead should call SDL_PrivateJoystick*() to deliver events + * and update joystick device state. + */ +void +SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) +{ + EmscriptenGamepadEvent gamepadState; + SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata; + int i, result, buttonState; + + if (item) { + result = emscripten_get_gamepad_status(item->index, &gamepadState); + if( result == EMSCRIPTEN_RESULT_SUCCESS) { + if(gamepadState.timestamp == 0 || gamepadState.timestamp != item->timestamp) { + for(i = 0; i < item->nbuttons; i++) { + if(item->digitalButton[i] != gamepadState.digitalButton[i]) { + buttonState = gamepadState.digitalButton[i]? SDL_PRESSED: SDL_RELEASED; + SDL_PrivateJoystickButton(item->joystick, i, buttonState); + } + + /* store values to compare them in the next update */ + item->analogButton[i] = gamepadState.analogButton[i]; + item->digitalButton[i] = gamepadState.digitalButton[i]; + } + + for(i = 0; i < item->naxes; i++) { + if(item->axis[i] != gamepadState.axis[i]) { + // do we need to do conversion? + SDL_PrivateJoystickAxis(item->joystick, i, + (Sint16) (32767.*gamepadState.axis[i])); + } + + /* store to compare in next update */ + item->axis[i] = gamepadState.axis[i]; + } + + item->timestamp = gamepadState.timestamp; + } + } + } +} + +/* Function to close a joystick after use */ +void +SDL_SYS_JoystickClose(SDL_Joystick * joystick) +{ +} + +/* Function to perform any system-specific joystick related cleanup */ +void +SDL_SYS_JoystickQuit(void) +{ + SDL_joylist_item *item = NULL; + SDL_joylist_item *next = NULL; + + for (item = SDL_joylist; item; item = next) { + next = item->next; + SDL_free(item->mapping); + SDL_free(item->name); + SDL_free(item); + } + + SDL_joylist = SDL_joylist_tail = NULL; + + numjoysticks = 0; + instance_counter = 0; + + emscripten_set_gamepadconnected_callback(NULL, 0, NULL); + emscripten_set_gamepaddisconnected_callback(NULL, 0, NULL); +} + +SDL_JoystickGUID +SDL_SYS_JoystickGetDeviceGUID(int device_index) +{ + SDL_JoystickGUID guid; + /* the GUID is just the first 16 chars of the name for now */ + const char *name = SDL_SYS_JoystickNameForDeviceIndex(device_index); + SDL_zero(guid); + SDL_memcpy(&guid, name, SDL_min(sizeof(guid), SDL_strlen(name))); + return guid; +} + +SDL_JoystickGUID +SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) +{ + SDL_JoystickGUID guid; + /* the GUID is just the first 16 chars of the name for now */ + const char *name = joystick->name; + SDL_zero(guid); + SDL_memcpy(&guid, name, SDL_min(sizeof(guid), SDL_strlen(name))); + return guid; +} + +#endif /* SDL_JOYSTICK_EMSCRIPTEN */ diff --git a/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick_c.h b/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick_c.h new file mode 100644 index 0000000000..c7103c56af --- /dev/null +++ b/Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick_c.h @@ -0,0 +1,52 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + */ + +#include "../../SDL_internal.h" + +#ifdef SDL_JOYSTICK_EMSCRIPTEN +#include "../SDL_sysjoystick.h" + + +#include + +/* A linked list of available joysticks */ +typedef struct SDL_joylist_item +{ + int index; + char *name; + char *mapping; + SDL_JoystickID device_instance; + SDL_Joystick *joystick; + int nbuttons; + int naxes; + double timestamp; + double axis[64]; + double analogButton[64]; + EM_BOOL digitalButton[64]; + + struct SDL_joylist_item *next; +} SDL_joylist_item; + +typedef SDL_joylist_item joystick_hwdata; + +#endif /* SDL_JOYSTICK_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/haiku/SDL_haikujoystick.cc b/Engine/lib/sdl/src/joystick/haiku/SDL_haikujoystick.cc index 95757bc1df..3ec9ae1078 100644 --- a/Engine/lib/sdl/src/joystick/haiku/SDL_haikujoystick.cc +++ b/Engine/lib/sdl/src/joystick/haiku/SDL_haikujoystick.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,8 +53,7 @@ extern "C" static int SDL_SYS_numjoysticks = 0; /* Function to scan the system for joysticks. - * This function should set SDL_numjoysticks to the number of available - * joysticks. Joystick 0 should be the system default joystick. + * Joystick 0 should be the system default joystick. * It should return 0, or -1 on an unrecoverable fatal error. */ int SDL_SYS_JoystickInit(void) @@ -94,11 +93,6 @@ extern "C" { } - SDL_bool SDL_SYS_JoystickNeedsPolling() - { - return SDL_FALSE; - } - /* Function to get the device-dependent name of a joystick */ const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index) { @@ -112,7 +106,7 @@ extern "C" } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -158,7 +152,7 @@ extern "C" return (0); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { return SDL_TRUE; @@ -234,7 +228,6 @@ extern "C" SDL_free(joystick->hwdata->new_hats); SDL_free(joystick->hwdata->new_axes); SDL_free(joystick->hwdata); - joystick->hwdata = NULL; } } diff --git a/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.h b/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.h deleted file mode 100644 index bb3e0d61f9..0000000000 --- a/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#import -#import - -/* *INDENT-OFF* */ -@interface SDLUIAccelerationDelegate: NSObject { - - UIAccelerationValue x, y, z; - BOOL isRunning; - BOOL hasNewData; - -} - -+(SDLUIAccelerationDelegate *)sharedDelegate; --(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration; --(void)getLastOrientation:(Sint16 *)data; --(void)startup; --(void)shutdown; --(BOOL)isRunning; --(BOOL)hasNewData; --(void)setHasNewData:(BOOL)value; - -@end -/* *INDENT-ON* */ diff --git a/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.m b/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.m deleted file mode 100644 index a099fcf381..0000000000 --- a/Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.m +++ /dev/null @@ -1,141 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -#import "SDLUIAccelerationDelegate.h" -/* needed for SDL_IPHONE_MAX_GFORCE macro */ -#import "../../../include/SDL_config_iphoneos.h" - -static SDLUIAccelerationDelegate *sharedDelegate=nil; - -@implementation SDLUIAccelerationDelegate - -/* - Returns a shared instance of the SDLUIAccelerationDelegate, creating the shared delegate if it doesn't exist yet. -*/ -+(SDLUIAccelerationDelegate *)sharedDelegate { - if (sharedDelegate == nil) { - sharedDelegate = [[SDLUIAccelerationDelegate alloc] init]; - } - return sharedDelegate; -} -/* - UIAccelerometerDelegate delegate method. Invoked by the UIAccelerometer instance when it has new data for us. - We just take the data and mark that we have new data available so that the joystick system will pump it to the - events system when SDL_SYS_JoystickUpdate is called. -*/ --(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { - - x = acceleration.x; - y = acceleration.y; - z = acceleration.z; - - hasNewData = YES; -} -/* - getLastOrientation -- put last obtained accelerometer data into Sint16 array - - Called from the joystick system when it needs the accelerometer data. - Function grabs the last data sent to the accelerometer and converts it - from floating point to Sint16, which is what the joystick system expects. - - To do the conversion, the data is first clamped onto the interval - [-SDL_IPHONE_MAX_G_FORCE, SDL_IPHONE_MAX_G_FORCE], then the data is multiplied - by MAX_SINT16 so that it is mapped to the full range of an Sint16. - - You can customize the clamped range of this function by modifying the - SDL_IPHONE_MAX_GFORCE macro in SDL_config_iphoneos.h. - - Once converted to Sint16, the accelerometer data no longer has coherent units. - You can convert the data back to units of g-force by multiplying it - in your application's code by SDL_IPHONE_MAX_GFORCE / 0x7FFF. - */ --(void)getLastOrientation:(Sint16 *)data { - - #define MAX_SINT16 0x7FFF - - /* clamp the data */ - if (x > SDL_IPHONE_MAX_GFORCE) x = SDL_IPHONE_MAX_GFORCE; - else if (x < -SDL_IPHONE_MAX_GFORCE) x = -SDL_IPHONE_MAX_GFORCE; - if (y > SDL_IPHONE_MAX_GFORCE) y = SDL_IPHONE_MAX_GFORCE; - else if (y < -SDL_IPHONE_MAX_GFORCE) y = -SDL_IPHONE_MAX_GFORCE; - if (z > SDL_IPHONE_MAX_GFORCE) z = SDL_IPHONE_MAX_GFORCE; - else if (z < -SDL_IPHONE_MAX_GFORCE) z = -SDL_IPHONE_MAX_GFORCE; - - /* pass in data mapped to range of SInt16 */ - data[0] = (x / SDL_IPHONE_MAX_GFORCE) * MAX_SINT16; - data[1] = (y / SDL_IPHONE_MAX_GFORCE) * MAX_SINT16; - data[2] = (z / SDL_IPHONE_MAX_GFORCE) * MAX_SINT16; - -} - -/* - Initialize SDLUIAccelerationDelegate. Since we don't have any data yet, - just set our last received data to zero, and indicate we don't have any; -*/ --(id)init { - self = [super init]; - x = y = z = 0.0; - hasNewData = NO; - return self; -} - --(void)dealloc { - sharedDelegate = nil; - [self shutdown]; - [super dealloc]; -} - -/* - Lets our delegate start receiving accelerometer updates. -*/ --(void)startup { - [UIAccelerometer sharedAccelerometer].delegate = self; - isRunning = YES; -} -/* - Stops our delegate from receiving accelerometer updates. -*/ --(void)shutdown { - if ([UIAccelerometer sharedAccelerometer].delegate == self) { - [UIAccelerometer sharedAccelerometer].delegate = nil; - } - isRunning = NO; -} -/* - Our we currently receiving accelerometer updates? -*/ --(BOOL)isRunning { - return isRunning; -} -/* - Do we have any data that hasn't been pumped into SDL's event system? -*/ --(BOOL)hasNewData { - return hasNewData; -} -/* - When the joystick system grabs the new data, it sets this to NO. -*/ --(void)setHasNewData:(BOOL)value { - hasNewData = value; -} - -@end diff --git a/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick.m b/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick.m index b89bd78ed7..c8a42af05c 100644 --- a/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick.m +++ b/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,72 +21,543 @@ #include "../../SDL_internal.h" /* This is the iOS implementation of the SDL joystick API */ +#include "SDL_sysjoystick_c.h" + +/* needed for SDL_IPHONE_MAX_GFORCE macro */ +#include "SDL_config_iphoneos.h" #include "SDL_joystick.h" +#include "SDL_hints.h" +#include "SDL_stdinc.h" #include "../SDL_sysjoystick.h" #include "../SDL_joystick_c.h" -#import "SDLUIAccelerationDelegate.h" -const char *accelerometerName = "iPhone accelerometer"; +#if !SDL_EVENTS_DISABLED +#include "../../events/SDL_events_c.h" +#endif + +#import + +#ifdef SDL_JOYSTICK_MFI +#import + +static id connectObserver = nil; +static id disconnectObserver = nil; +#endif /* SDL_JOYSTICK_MFI */ + +static const char *accelerometerName = "iOS Accelerometer"; +static CMMotionManager *motionManager = nil; + +static SDL_JoystickDeviceItem *deviceList = NULL; + +static int numjoysticks = 0; +static SDL_JoystickID instancecounter = 0; + +static SDL_JoystickDeviceItem * +GetDeviceForIndex(int device_index) +{ + SDL_JoystickDeviceItem *device = deviceList; + int i = 0; + + while (i < device_index) { + if (device == NULL) { + return NULL; + } + device = device->next; + i++; + } + + return device; +} + +static void +SDL_SYS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controller) +{ +#ifdef SDL_JOYSTICK_MFI + const char *name = NULL; + /* Explicitly retain the controller because SDL_JoystickDeviceItem is a + * struct, and ARC doesn't work with structs. */ + device->controller = (__bridge GCController *) CFBridgingRetain(controller); + + if (controller.vendorName) { + name = controller.vendorName.UTF8String; + } + + if (!name) { + name = "MFi Gamepad"; + } + + device->name = SDL_strdup(name); + + device->guid.data[0] = 'M'; + device->guid.data[1] = 'F'; + device->guid.data[2] = 'i'; + device->guid.data[3] = 'G'; + device->guid.data[4] = 'a'; + device->guid.data[5] = 'm'; + device->guid.data[6] = 'e'; + device->guid.data[7] = 'p'; + device->guid.data[8] = 'a'; + device->guid.data[9] = 'd'; + + if (controller.extendedGamepad) { + device->guid.data[10] = 1; + } else if (controller.gamepad) { + device->guid.data[10] = 2; + } + + if (controller.extendedGamepad) { + device->naxes = 6; /* 2 thumbsticks and 2 triggers */ + device->nhats = 1; /* d-pad */ + device->nbuttons = 7; /* ABXY, shoulder buttons, pause button */ + } else if (controller.gamepad) { + device->naxes = 0; /* no traditional analog inputs */ + device->nhats = 1; /* d-pad */ + device->nbuttons = 7; /* ABXY, shoulder buttons, pause button */ + } + /* TODO: Handle micro profiles on tvOS. */ + + /* This will be set when the first button press of the controller is + * detected. */ + controller.playerIndex = -1; +#endif +} + +static void +SDL_SYS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer) +{ + SDL_JoystickDeviceItem *device = deviceList; +#if !SDL_EVENTS_DISABLED + SDL_Event event; +#endif + + while (device != NULL) { + if (device->controller == controller) { + return; + } + device = device->next; + } + + device = (SDL_JoystickDeviceItem *) SDL_malloc(sizeof(SDL_JoystickDeviceItem)); + if (device == NULL) { + return; + } + + SDL_zerop(device); + + device->accelerometer = accelerometer; + device->instance_id = instancecounter++; + + if (accelerometer) { + device->name = SDL_strdup(accelerometerName); + device->naxes = 3; /* Device acceleration in the x, y, and z axes. */ + device->nhats = 0; + device->nbuttons = 0; + + /* Use the accelerometer name as a GUID. */ + SDL_memcpy(&device->guid.data, device->name, SDL_min(sizeof(SDL_JoystickGUID), SDL_strlen(device->name))); + } else if (controller) { + SDL_SYS_AddMFIJoystickDevice(device, controller); + } + + if (deviceList == NULL) { + deviceList = device; + } else { + SDL_JoystickDeviceItem *lastdevice = deviceList; + while (lastdevice->next != NULL) { + lastdevice = lastdevice->next; + } + lastdevice->next = device; + } + + ++numjoysticks; + +#if !SDL_EVENTS_DISABLED + event.type = SDL_JOYDEVICEADDED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = numjoysticks - 1; + if ((SDL_EventOK == NULL) || + (*SDL_EventOK)(SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ +} + +static SDL_JoystickDeviceItem * +SDL_SYS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device) +{ + SDL_JoystickDeviceItem *prev = NULL; + SDL_JoystickDeviceItem *next = NULL; + SDL_JoystickDeviceItem *item = deviceList; +#if !SDL_EVENTS_DISABLED + SDL_Event event; +#endif + + if (device == NULL) { + return NULL; + } + + next = device->next; + + while (item != NULL) { + if (item == device) { + break; + } + prev = item; + item = item->next; + } + + /* Unlink the device item from the device list. */ + if (prev) { + prev->next = device->next; + } else if (device == deviceList) { + deviceList = device->next; + } + + if (device->joystick) { + device->joystick->hwdata = NULL; + } + +#ifdef SDL_JOYSTICK_MFI + @autoreleasepool { + if (device->controller) { + /* The controller was explicitly retained in the struct, so it + * should be explicitly released before freeing the struct. */ + GCController *controller = CFBridgingRelease((__bridge CFTypeRef)(device->controller)); + controller.controllerPausedHandler = nil; + device->controller = nil; + } + } +#endif /* SDL_JOYSTICK_MFI */ + + --numjoysticks; + +#if !SDL_EVENTS_DISABLED + event.type = SDL_JOYDEVICEREMOVED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = device->instance_id; + if ((SDL_EventOK == NULL) || + (*SDL_EventOK)(SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ + + SDL_free(device->name); + SDL_free(device); + + return next; +} /* Function to scan the system for joysticks. - * This function should set SDL_numjoysticks to the number of available - * joysticks. Joystick 0 should be the system default joystick. + * Joystick 0 should be the system default joystick. * It should return 0, or -1 on an unrecoverable fatal error. */ int SDL_SYS_JoystickInit(void) { - return (1); + @autoreleasepool { + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + const char *hint = SDL_GetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK); + + if (!hint || SDL_atoi(hint)) { + /* Default behavior, accelerometer as joystick */ + SDL_SYS_AddJoystickDevice(nil, SDL_TRUE); + } + +#ifdef SDL_JOYSTICK_MFI + /* GameController.framework was added in iOS 7. */ + if (![GCController class]) { + return numjoysticks; + } + + for (GCController *controller in [GCController controllers]) { + SDL_SYS_AddJoystickDevice(controller, SDL_FALSE); + } + + connectObserver = [center addObserverForName:GCControllerDidConnectNotification + object:nil + queue:nil + usingBlock:^(NSNotification *note) { + GCController *controller = note.object; + SDL_SYS_AddJoystickDevice(controller, SDL_FALSE); + }]; + + disconnectObserver = [center addObserverForName:GCControllerDidDisconnectNotification + object:nil + queue:nil + usingBlock:^(NSNotification *note) { + GCController *controller = note.object; + SDL_JoystickDeviceItem *device = deviceList; + while (device != NULL) { + if (device->controller == controller) { + SDL_SYS_RemoveJoystickDevice(device); + break; + } + device = device->next; + } + }]; +#endif /* SDL_JOYSTICK_MFI */ + } + + return numjoysticks; } int SDL_SYS_NumJoysticks() { - return 1; + return numjoysticks; } void SDL_SYS_JoystickDetect() { } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_FALSE; -} - /* Function to get the device-dependent name of a joystick */ const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) { - return accelerometerName; + SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index); + return device ? device->name : "Unknown"; } /* Function to perform the mapping from device index to the instance id for this index */ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) { - return device_index; + SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index); + return device ? device->instance_id : 0; } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) { - joystick->naxes = 3; - joystick->nhats = 0; + SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index); + if (device == NULL) { + return SDL_SetError("Could not open Joystick: no hardware device for the specified index"); + } + + joystick->hwdata = device; + joystick->instance_id = device->instance_id; + + joystick->naxes = device->naxes; + joystick->nhats = device->nhats; + joystick->nbuttons = device->nbuttons; joystick->nballs = 0; - joystick->nbuttons = 0; - [[SDLUIAccelerationDelegate sharedDelegate] startup]; + + device->joystick = joystick; + + @autoreleasepool { + if (device->accelerometer) { + if (motionManager == nil) { + motionManager = [[CMMotionManager alloc] init]; + } + + /* Shorter times between updates can significantly increase CPU usage. */ + motionManager.accelerometerUpdateInterval = 0.1; + [motionManager startAccelerometerUpdates]; + } else { +#ifdef SDL_JOYSTICK_MFI + GCController *controller = device->controller; + controller.controllerPausedHandler = ^(GCController *c) { + if (joystick->hwdata) { + ++joystick->hwdata->num_pause_presses; + } + }; +#endif /* SDL_JOYSTICK_MFI */ + } + } + return 0; } -/* Function to determine is this joystick is attached to the system right now */ -SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) +/* Function to determine if this joystick is attached to the system right now */ +SDL_bool +SDL_SYS_JoystickAttached(SDL_Joystick *joystick) +{ + return joystick->hwdata != NULL; +} + +static void +SDL_SYS_AccelerometerUpdate(SDL_Joystick * joystick) +{ + const float maxgforce = SDL_IPHONE_MAX_GFORCE; + const SInt16 maxsint16 = 0x7FFF; + CMAcceleration accel; + + @autoreleasepool { + if (!motionManager.isAccelerometerActive) { + return; + } + + accel = motionManager.accelerometerData.acceleration; + } + + /* + Convert accelerometer data from floating point to Sint16, which is what + the joystick system expects. + + To do the conversion, the data is first clamped onto the interval + [-SDL_IPHONE_MAX_G_FORCE, SDL_IPHONE_MAX_G_FORCE], then the data is multiplied + by MAX_SINT16 so that it is mapped to the full range of an Sint16. + + You can customize the clamped range of this function by modifying the + SDL_IPHONE_MAX_GFORCE macro in SDL_config_iphoneos.h. + + Once converted to Sint16, the accelerometer data no longer has coherent + units. You can convert the data back to units of g-force by multiplying + it in your application's code by SDL_IPHONE_MAX_GFORCE / 0x7FFF. + */ + + /* clamp the data */ + accel.x = SDL_min(SDL_max(accel.x, -maxgforce), maxgforce); + accel.y = SDL_min(SDL_max(accel.y, -maxgforce), maxgforce); + accel.z = SDL_min(SDL_max(accel.z, -maxgforce), maxgforce); + + /* pass in data mapped to range of SInt16 */ + SDL_PrivateJoystickAxis(joystick, 0, (accel.x / maxgforce) * maxsint16); + SDL_PrivateJoystickAxis(joystick, 1, -(accel.y / maxgforce) * maxsint16); + SDL_PrivateJoystickAxis(joystick, 2, (accel.z / maxgforce) * maxsint16); +} + +#ifdef SDL_JOYSTICK_MFI +static Uint8 +SDL_SYS_MFIJoystickHatStateForDPad(GCControllerDirectionPad *dpad) { - return SDL_TRUE; + Uint8 hat = 0; + + if (dpad.up.isPressed) { + hat |= SDL_HAT_UP; + } else if (dpad.down.isPressed) { + hat |= SDL_HAT_DOWN; + } + + if (dpad.left.isPressed) { + hat |= SDL_HAT_LEFT; + } else if (dpad.right.isPressed) { + hat |= SDL_HAT_RIGHT; + } + + if (hat == 0) { + return SDL_HAT_CENTERED; + } + + return hat; +} +#endif + +static void +SDL_SYS_MFIJoystickUpdate(SDL_Joystick * joystick) +{ +#ifdef SDL_JOYSTICK_MFI + @autoreleasepool { + GCController *controller = joystick->hwdata->controller; + Uint8 hatstate = SDL_HAT_CENTERED; + int i; + int updateplayerindex = 0; + + if (controller.extendedGamepad) { + GCExtendedGamepad *gamepad = controller.extendedGamepad; + + /* Axis order matches the XInput Windows mappings. */ + Sint16 axes[] = { + (Sint16) (gamepad.leftThumbstick.xAxis.value * 32767), + (Sint16) (gamepad.leftThumbstick.yAxis.value * -32767), + (Sint16) ((gamepad.leftTrigger.value * 65535) - 32768), + (Sint16) (gamepad.rightThumbstick.xAxis.value * 32767), + (Sint16) (gamepad.rightThumbstick.yAxis.value * -32767), + (Sint16) ((gamepad.rightTrigger.value * 65535) - 32768), + }; + + /* Button order matches the XInput Windows mappings. */ + Uint8 buttons[] = { + gamepad.buttonA.isPressed, gamepad.buttonB.isPressed, + gamepad.buttonX.isPressed, gamepad.buttonY.isPressed, + gamepad.leftShoulder.isPressed, + gamepad.rightShoulder.isPressed, + }; + + hatstate = SDL_SYS_MFIJoystickHatStateForDPad(gamepad.dpad); + + for (i = 0; i < SDL_arraysize(axes); i++) { + /* The triggers (axes 2 and 5) are resting at -32768 but SDL + * initializes its values to 0. We only want to make sure the + * player index is up to date if the user actually moves an axis. */ + if ((i != 2 && i != 5) || axes[i] != -32768) { + updateplayerindex |= (joystick->axes[i] != axes[i]); + } + SDL_PrivateJoystickAxis(joystick, i, axes[i]); + } + + for (i = 0; i < SDL_arraysize(buttons); i++) { + updateplayerindex |= (joystick->buttons[i] != buttons[i]); + SDL_PrivateJoystickButton(joystick, i, buttons[i]); + } + } else if (controller.gamepad) { + GCGamepad *gamepad = controller.gamepad; + + /* Button order matches the XInput Windows mappings. */ + Uint8 buttons[] = { + gamepad.buttonA.isPressed, gamepad.buttonB.isPressed, + gamepad.buttonX.isPressed, gamepad.buttonY.isPressed, + gamepad.leftShoulder.isPressed, + gamepad.rightShoulder.isPressed, + }; + + hatstate = SDL_SYS_MFIJoystickHatStateForDPad(gamepad.dpad); + + for (i = 0; i < SDL_arraysize(buttons); i++) { + updateplayerindex |= (joystick->buttons[i] != buttons[i]); + SDL_PrivateJoystickButton(joystick, i, buttons[i]); + } + } + /* TODO: Handle micro profiles on tvOS. */ + + if (joystick->nhats > 0) { + updateplayerindex |= (joystick->hats[0] != hatstate); + SDL_PrivateJoystickHat(joystick, 0, hatstate); + } + + for (i = 0; i < joystick->hwdata->num_pause_presses; i++) { + /* The pause button is always last. */ + Uint8 pausebutton = joystick->nbuttons - 1; + + SDL_PrivateJoystickButton(joystick, pausebutton, SDL_PRESSED); + SDL_PrivateJoystickButton(joystick, pausebutton, SDL_RELEASED); + + updateplayerindex = YES; + } + + joystick->hwdata->num_pause_presses = 0; + + if (updateplayerindex && controller.playerIndex == -1) { + BOOL usedPlayerIndexSlots[4] = {NO, NO, NO, NO}; + + /* Find the player index of all other connected controllers. */ + for (GCController *c in [GCController controllers]) { + if (c != controller && c.playerIndex >= 0) { + usedPlayerIndexSlots[c.playerIndex] = YES; + } + } + + /* Set this controller's player index to the first unused index. + * FIXME: This logic isn't great... but SDL doesn't expose this + * concept in its external API, so we don't have much to go on. */ + for (i = 0; i < SDL_arraysize(usedPlayerIndexSlots); i++) { + if (!usedPlayerIndexSlots[i]) { + controller.playerIndex = i; + break; + } + } + } + } +#endif } /* Function to update the state of a joystick - called as a device poll. @@ -97,56 +568,95 @@ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) void SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) { + SDL_JoystickDeviceItem *device = joystick->hwdata; - Sint16 orientation[3]; - - if ([[SDLUIAccelerationDelegate sharedDelegate] hasNewData]) { - - [[SDLUIAccelerationDelegate sharedDelegate] getLastOrientation: orientation]; - [[SDLUIAccelerationDelegate sharedDelegate] setHasNewData: NO]; - - SDL_PrivateJoystickAxis(joystick, 0, orientation[0]); - SDL_PrivateJoystickAxis(joystick, 1, -orientation[1]); - SDL_PrivateJoystickAxis(joystick, 2, orientation[2]); - + if (device == NULL) { + return; } - return; + if (device->accelerometer) { + SDL_SYS_AccelerometerUpdate(joystick); + } else if (device->controller) { + SDL_SYS_MFIJoystickUpdate(joystick); + } } /* Function to close a joystick after use */ void SDL_SYS_JoystickClose(SDL_Joystick * joystick) { - if ([[SDLUIAccelerationDelegate sharedDelegate] isRunning]) { - [[SDLUIAccelerationDelegate sharedDelegate] shutdown]; + SDL_JoystickDeviceItem *device = joystick->hwdata; + + if (device == NULL) { + return; + } + + device->joystick = NULL; + + @autoreleasepool { + if (device->accelerometer) { + [motionManager stopAccelerometerUpdates]; + } else if (device->controller) { +#ifdef SDL_JOYSTICK_MFI + GCController *controller = device->controller; + controller.controllerPausedHandler = nil; + controller.playerIndex = -1; +#endif + } } - SDL_SetError("No joystick open with that index"); } /* Function to perform any system-specific joystick related cleanup */ void SDL_SYS_JoystickQuit(void) { + @autoreleasepool { +#ifdef SDL_JOYSTICK_MFI + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + + if (connectObserver) { + [center removeObserver:connectObserver name:GCControllerDidConnectNotification object:nil]; + connectObserver = nil; + } + + if (disconnectObserver) { + [center removeObserver:disconnectObserver name:GCControllerDidDisconnectNotification object:nil]; + disconnectObserver = nil; + } +#endif /* SDL_JOYSTICK_MFI */ + + while (deviceList != NULL) { + SDL_SYS_RemoveJoystickDevice(deviceList); + } + + motionManager = nil; + } + + numjoysticks = 0; } -SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index ) +SDL_JoystickGUID +SDL_SYS_JoystickGetDeviceGUID( int device_index ) { + SDL_JoystickDeviceItem *device = GetDeviceForIndex(device_index); SDL_JoystickGUID guid; - /* the GUID is just the first 16 chars of the name for now */ - const char *name = SDL_SYS_JoystickNameForDeviceIndex( device_index ); - SDL_zero( guid ); - SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) ); + if (device) { + guid = device->guid; + } else { + SDL_zero(guid); + } return guid; } -SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) +SDL_JoystickGUID +SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) { SDL_JoystickGUID guid; - /* the GUID is just the first 16 chars of the name for now */ - const char *name = joystick->name; - SDL_zero( guid ); - SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) ); + if (joystick->hwdata) { + guid = joystick->hwdata->guid; + } else { + SDL_zero(guid); + } return guid; } diff --git a/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick_c.h b/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick_c.h new file mode 100644 index 0000000000..be0ddf068a --- /dev/null +++ b/Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick_c.h @@ -0,0 +1,55 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef SDL_JOYSTICK_IOS_H +#define SDL_JOYSTICK_IOS_H + +#include "SDL_stdinc.h" +#include "../SDL_sysjoystick.h" + +@class GCController; + +typedef struct joystick_hwdata +{ + SDL_bool accelerometer; + + GCController __unsafe_unretained *controller; + int num_pause_presses; + + char *name; + SDL_Joystick *joystick; + SDL_JoystickID instance_id; + SDL_JoystickGUID guid; + + int naxes; + int nbuttons; + int nhats; + + struct joystick_hwdata *next; +} joystick_hwdata; + +typedef joystick_hwdata SDL_JoystickDeviceItem; + +#endif /* SDL_JOYSTICK_IOS_H */ + + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick.c index c37a22d58c..8c73859ea8 100644 --- a/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -142,13 +142,15 @@ IsJoystick(int fd, char *namebuf, const size_t namebuflen, SDL_JoystickGUID *gui #if SDL_USE_LIBUDEV void joystick_udev_callback(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath) { - if (devpath == NULL || !(udev_class & SDL_UDEV_DEVICE_JOYSTICK)) { + if (devpath == NULL) { return; } - - switch( udev_type ) - { + + switch (udev_type) { case SDL_UDEV_DEVICEADDED: + if (!(udev_class & SDL_UDEV_DEVICE_JOYSTICK)) { + return; + } MaybeAddDevice(devpath); break; @@ -335,13 +337,12 @@ JoystickInitWithoutUdev(void) static int JoystickInitWithUdev(void) { - if (SDL_UDEV_Init() < 0) { return SDL_SetError("Could not initialize UDEV"); } /* Set up the udev callback */ - if ( SDL_UDEV_AddCallback(joystick_udev_callback) < 0) { + if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) { SDL_UDEV_Quit(); return SDL_SetError("Could not set up joystick <-> udev callback"); } @@ -392,15 +393,6 @@ void SDL_SYS_JoystickDetect() } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ -#if SDL_USE_LIBUDEV - return SDL_TRUE; -#endif - - return SDL_FALSE; -} - static SDL_joylist_item * JoystickByDevIndex(int device_index) { @@ -500,7 +492,7 @@ ConfigJoystick(SDL_Joystick * joystick, int fd) ++joystick->nbuttons; } } - for (i = 0; i < ABS_MISC; ++i) { + for (i = 0; i < ABS_MAX; ++i) { /* Skip hats */ if (i == ABS_HAT0X) { i = ABS_HAT3Y; @@ -574,7 +566,7 @@ ConfigJoystick(SDL_Joystick * joystick, int fd) /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -629,10 +621,10 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) return (0); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { - return !joystick->closed && (joystick->hwdata->item != NULL); + return joystick->hwdata->item != NULL; } static SDL_INLINE void @@ -761,10 +753,6 @@ HandleInputEvents(SDL_Joystick * joystick) } break; case EV_ABS: - if (code >= ABS_MISC) { - break; - } - switch (code) { case ABS_HAT0X: case ABS_HAT0Y: @@ -849,9 +837,7 @@ SDL_SYS_JoystickClose(SDL_Joystick * joystick) SDL_free(joystick->hwdata->balls); SDL_free(joystick->hwdata->fname); SDL_free(joystick->hwdata); - joystick->hwdata = NULL; } - joystick->closed = 1; } /* Function to perform any system-specific joystick related cleanup */ diff --git a/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick_c.h b/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick_c.h index 16d16e26bb..ee77178399 100644 --- a/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick_c.h +++ b/Engine/lib/sdl/src/joystick/linux/SDL_sysjoystick_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/joystick/psp/SDL_sysjoystick.c b/Engine/lib/sdl/src/joystick/psp/SDL_sysjoystick.c index d01489bb8c..e5247254f0 100644 --- a/Engine/lib/sdl/src/joystick/psp/SDL_sysjoystick.c +++ b/Engine/lib/sdl/src/joystick/psp/SDL_sysjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#if SDL_JOYSTICK_PSP /* This is the PSP implementation of the SDL joystick API */ #include @@ -97,16 +100,13 @@ int JoystickUpdate(void *data) /* Function to scan the system for joysticks. - * This function should set SDL_numjoysticks to the number of available - * joysticks. Joystick 0 should be the system default joystick. + * Joystick 0 should be the system default joystick. * It should return number of joysticks, or -1 on an unrecoverable fatal error. */ int SDL_SYS_JoystickInit(void) { int i; -/* SDL_numjoysticks = 1; */ - /* Setup input */ sceCtrlSetSamplingCycle(0); sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); @@ -141,11 +141,6 @@ void SDL_SYS_JoystickDetect() { } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_FALSE; -} - /* Function to get the device-dependent name of a joystick */ const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) { @@ -169,7 +164,7 @@ const char *SDL_SYS_JoystickName(int index) } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -182,17 +177,17 @@ int SDL_SYS_JoystickOpen(SDL_Joystick *joystick, int device_index) return 0; } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { return SDL_TRUE; } + /* Function to update the state of a joystick - called as a device poll. * This function shouldn't update the joystick structure directly, * but instead should call SDL_PrivateJoystick*() to deliver events * and update joystick device state. */ - void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) { int i; @@ -238,7 +233,6 @@ void SDL_SYS_JoystickUpdate(SDL_Joystick *joystick) /* Function to close a joystick after use */ void SDL_SYS_JoystickClose(SDL_Joystick *joystick) { - /* Do nothing. */ } /* Function to perform any system-specific joystick related cleanup */ @@ -270,5 +264,7 @@ SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) return guid; } +#endif /* SDL_JOYSTICK_PSP */ + /* vim: ts=4 sw=4 */ diff --git a/Engine/lib/sdl/src/joystick/sort_controllers.py b/Engine/lib/sdl/src/joystick/sort_controllers.py index 03b857a022..af95d65134 100644 --- a/Engine/lib/sdl/src/joystick/sort_controllers.py +++ b/Engine/lib/sdl/src/joystick/sort_controllers.py @@ -30,9 +30,9 @@ def write_controllers(): for entry in sorted(controllers, key=lambda entry: entry[2]): line = "".join(entry) + "\n" if not line.endswith(",\n") and not line.endswith("*/\n"): - print "Warning: '%s' is missing a comma at the end of the line" % (line) + print("Warning: '%s' is missing a comma at the end of the line" % (line)) if (entry[1] in controller_guids): - print "Warning: entry '%s' is duplicate of entry '%s'" % (entry[2], controller_guids[entry[1]][2]) + print("Warning: entry '%s' is duplicate of entry '%s'" % (entry[2], controller_guids[entry[1]][2])) controller_guids[entry[1]] = entry output.write(line) @@ -40,15 +40,17 @@ def write_controllers(): controller_guids = {} for line in input: - if ( parsing_controllers ): + if (parsing_controllers): if (line.startswith("{")): output.write(line) - elif (line.startswith("#endif")): + elif (line.startswith(" NULL")): parsing_controllers = False write_controllers() output.write(line) - elif (line.startswith("#")): - print "Parsing " + line.strip() + elif (line.startswith("#if")): + print("Parsing " + line.strip()) + output.write(line) + elif (line.startswith("#endif")): write_controllers() output.write(line) else: @@ -60,4 +62,4 @@ def write_controllers(): output.write(line) output.close() -print "Finished writing %s.new" % filename +print("Finished writing %s.new" % filename) diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick.c b/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick.c new file mode 100644 index 0000000000..f6b0cc88d4 --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick.c @@ -0,0 +1,906 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "../SDL_sysjoystick.h" + +#if SDL_JOYSTICK_DINPUT + +#include "SDL_windowsjoystick_c.h" +#include "SDL_dinputjoystick_c.h" +#include "SDL_xinputjoystick_c.h" + +#ifndef DIDFT_OPTIONAL +#define DIDFT_OPTIONAL 0x80000000 +#endif + +#define INPUT_QSIZE 32 /* Buffer up to 32 input messages */ +#define AXIS_MIN -32768 /* minimum value for axis coordinate */ +#define AXIS_MAX 32767 /* maximum value for axis coordinate */ +#define JOY_AXIS_THRESHOLD (((AXIS_MAX)-(AXIS_MIN))/100) /* 1% motion */ + +/* external variables referenced. */ +extern HWND SDL_HelperWindow; + +/* local variables */ +static SDL_bool coinitialized = SDL_FALSE; +static LPDIRECTINPUT8 dinput = NULL; +static PRAWINPUTDEVICELIST SDL_RawDevList = NULL; +static UINT SDL_RawDevListCount = 0; + +/* Taken from Wine - Thanks! */ +static DIOBJECTDATAFORMAT dfDIJoystick2[] = { + { &GUID_XAxis, DIJOFS_X, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_YAxis, DIJOFS_Y, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_ZAxis, DIJOFS_Z, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RxAxis, DIJOFS_RX, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RyAxis, DIJOFS_RY, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RzAxis, DIJOFS_RZ, DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, DIJOFS_SLIDER(0), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, DIJOFS_SLIDER(1), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_POV, DIJOFS_POV(0), DIDFT_OPTIONAL | DIDFT_POV | DIDFT_ANYINSTANCE, 0 }, + { &GUID_POV, DIJOFS_POV(1), DIDFT_OPTIONAL | DIDFT_POV | DIDFT_ANYINSTANCE, 0 }, + { &GUID_POV, DIJOFS_POV(2), DIDFT_OPTIONAL | DIDFT_POV | DIDFT_ANYINSTANCE, 0 }, + { &GUID_POV, DIJOFS_POV(3), DIDFT_OPTIONAL | DIDFT_POV | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(0), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(1), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(2), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(3), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(4), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(5), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(6), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(7), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(8), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(9), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(10), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(11), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(12), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(13), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(14), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(15), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(16), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(17), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(18), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(19), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(20), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(21), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(22), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(23), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(24), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(25), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(26), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(27), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(28), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(29), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(30), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(31), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(32), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(33), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(34), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(35), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(36), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(37), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(38), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(39), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(40), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(41), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(42), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(43), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(44), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(45), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(46), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(47), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(48), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(49), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(50), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(51), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(52), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(53), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(54), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(55), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(56), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(57), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(58), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(59), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(60), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(61), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(62), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(63), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(64), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(65), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(66), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(67), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(68), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(69), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(70), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(71), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(72), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(73), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(74), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(75), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(76), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(77), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(78), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(79), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(80), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(81), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(82), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(83), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(84), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(85), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(86), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(87), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(88), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(89), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(90), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(91), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(92), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(93), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(94), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(95), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(96), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(97), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(98), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(99), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(100), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(101), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(102), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(103), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(104), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(105), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(106), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(107), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(108), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(109), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(110), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(111), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(112), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(113), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(114), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(115), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(116), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(117), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(118), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(119), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(120), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(121), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(122), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(123), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(124), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(125), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(126), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { NULL, DIJOFS_BUTTON(127), DIDFT_OPTIONAL | DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0 }, + { &GUID_XAxis, FIELD_OFFSET(DIJOYSTATE2, lVX), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_YAxis, FIELD_OFFSET(DIJOYSTATE2, lVY), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_ZAxis, FIELD_OFFSET(DIJOYSTATE2, lVZ), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RxAxis, FIELD_OFFSET(DIJOYSTATE2, lVRx), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RyAxis, FIELD_OFFSET(DIJOYSTATE2, lVRy), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RzAxis, FIELD_OFFSET(DIJOYSTATE2, lVRz), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglVSlider[0]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglVSlider[1]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_XAxis, FIELD_OFFSET(DIJOYSTATE2, lAX), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_YAxis, FIELD_OFFSET(DIJOYSTATE2, lAY), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_ZAxis, FIELD_OFFSET(DIJOYSTATE2, lAZ), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RxAxis, FIELD_OFFSET(DIJOYSTATE2, lARx), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RyAxis, FIELD_OFFSET(DIJOYSTATE2, lARy), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RzAxis, FIELD_OFFSET(DIJOYSTATE2, lARz), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglASlider[0]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglASlider[1]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_XAxis, FIELD_OFFSET(DIJOYSTATE2, lFX), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_YAxis, FIELD_OFFSET(DIJOYSTATE2, lFY), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_ZAxis, FIELD_OFFSET(DIJOYSTATE2, lFZ), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RxAxis, FIELD_OFFSET(DIJOYSTATE2, lFRx), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RyAxis, FIELD_OFFSET(DIJOYSTATE2, lFRy), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_RzAxis, FIELD_OFFSET(DIJOYSTATE2, lFRz), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglFSlider[0]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, + { &GUID_Slider, FIELD_OFFSET(DIJOYSTATE2, rglFSlider[1]), DIDFT_OPTIONAL | DIDFT_AXIS | DIDFT_ANYINSTANCE, 0 }, +}; + +const DIDATAFORMAT c_dfDIJoystick2 = { + sizeof(DIDATAFORMAT), + sizeof(DIOBJECTDATAFORMAT), + DIDF_ABSAXIS, + sizeof(DIJOYSTATE2), + SDL_arraysize(dfDIJoystick2), + dfDIJoystick2 +}; + +/* Convert a DirectInput return code to a text message */ +static int +SetDIerror(const char *function, HRESULT code) +{ + /* + return SDL_SetError("%s() [%s]: %s", function, + DXGetErrorString9A(code), DXGetErrorDescription9A(code)); + */ + return SDL_SetError("%s() DirectX error 0x%8.8lx", function, code); +} + +static SDL_bool +SDL_IsXInputDevice(const GUID* pGuidProductFromDirectInput) +{ + static GUID IID_ValveStreamingGamepad = { MAKELONG(0x28DE, 0x11FF), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } }; + static GUID IID_X360WiredGamepad = { MAKELONG(0x045E, 0x02A1), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } }; + static GUID IID_X360WirelessGamepad = { MAKELONG(0x045E, 0x028E), 0x0000, 0x0000, { 0x00, 0x00, 0x50, 0x49, 0x44, 0x56, 0x49, 0x44 } }; + + static const GUID *s_XInputProductGUID[] = { + &IID_ValveStreamingGamepad, + &IID_X360WiredGamepad, /* Microsoft's wired X360 controller for Windows. */ + &IID_X360WirelessGamepad /* Microsoft's wireless X360 controller for Windows. */ + }; + + size_t iDevice; + UINT i; + + if (!SDL_XINPUT_Enabled()) { + return SDL_FALSE; + } + + /* Check for well known XInput device GUIDs */ + /* This lets us skip RAWINPUT for popular devices. Also, we need to do this for the Valve Streaming Gamepad because it's virtualized and doesn't show up in the device list. */ + for (iDevice = 0; iDevice < SDL_arraysize(s_XInputProductGUID); ++iDevice) { + if (SDL_memcmp(pGuidProductFromDirectInput, s_XInputProductGUID[iDevice], sizeof(GUID)) == 0) { + return SDL_TRUE; + } + } + + /* Go through RAWINPUT (WinXP and later) to find HID devices. */ + /* Cache this if we end up using it. */ + if (SDL_RawDevList == NULL) { + if ((GetRawInputDeviceList(NULL, &SDL_RawDevListCount, sizeof(RAWINPUTDEVICELIST)) == -1) || (!SDL_RawDevListCount)) { + return SDL_FALSE; /* oh well. */ + } + + SDL_RawDevList = (PRAWINPUTDEVICELIST)SDL_malloc(sizeof(RAWINPUTDEVICELIST) * SDL_RawDevListCount); + if (SDL_RawDevList == NULL) { + SDL_OutOfMemory(); + return SDL_FALSE; + } + + if (GetRawInputDeviceList(SDL_RawDevList, &SDL_RawDevListCount, sizeof(RAWINPUTDEVICELIST)) == -1) { + SDL_free(SDL_RawDevList); + SDL_RawDevList = NULL; + return SDL_FALSE; /* oh well. */ + } + } + + for (i = 0; i < SDL_RawDevListCount; i++) { + RID_DEVICE_INFO rdi; + char devName[128]; + UINT rdiSize = sizeof(rdi); + UINT nameSize = SDL_arraysize(devName); + + rdi.cbSize = sizeof(rdi); + if ((SDL_RawDevList[i].dwType == RIM_TYPEHID) && + (GetRawInputDeviceInfoA(SDL_RawDevList[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != ((UINT)-1)) && + (MAKELONG(rdi.hid.dwVendorId, rdi.hid.dwProductId) == ((LONG)pGuidProductFromDirectInput->Data1)) && + (GetRawInputDeviceInfoA(SDL_RawDevList[i].hDevice, RIDI_DEVICENAME, devName, &nameSize) != ((UINT)-1)) && + (SDL_strstr(devName, "IG_") != NULL)) { + return SDL_TRUE; + } + } + + return SDL_FALSE; +} + +int +SDL_DINPUT_JoystickInit(void) +{ + HRESULT result; + HINSTANCE instance; + + result = WIN_CoInitialize(); + if (FAILED(result)) { + return SetDIerror("CoInitialize", result); + } + + coinitialized = SDL_TRUE; + + result = CoCreateInstance(&CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, + &IID_IDirectInput8, (LPVOID)&dinput); + + if (FAILED(result)) { + return SetDIerror("CoCreateInstance", result); + } + + /* Because we used CoCreateInstance, we need to Initialize it, first. */ + instance = GetModuleHandle(NULL); + if (instance == NULL) { + return SDL_SetError("GetModuleHandle() failed with error code %lu.", GetLastError()); + } + result = IDirectInput8_Initialize(dinput, instance, DIRECTINPUT_VERSION); + + if (FAILED(result)) { + return SetDIerror("IDirectInput::Initialize", result); + } + return 0; +} + +/* helper function for direct input, gets called for each connected joystick */ +static BOOL CALLBACK +EnumJoysticksCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) +{ + JoyStick_DeviceData *pNewJoystick; + JoyStick_DeviceData *pPrevJoystick = NULL; + const DWORD devtype = (pdidInstance->dwDevType & 0xFF); + + if (devtype == DI8DEVTYPE_SUPPLEMENTAL) { + return DIENUM_CONTINUE; /* Ignore touchpads, etc. */ + } + + if (SDL_IsXInputDevice(&pdidInstance->guidProduct)) { + return DIENUM_CONTINUE; /* ignore XInput devices here, keep going. */ + } + + pNewJoystick = *(JoyStick_DeviceData **)pContext; + while (pNewJoystick) { + if (!SDL_memcmp(&pNewJoystick->dxdevice.guidInstance, &pdidInstance->guidInstance, sizeof(pNewJoystick->dxdevice.guidInstance))) { + /* if we are replacing the front of the list then update it */ + if (pNewJoystick == *(JoyStick_DeviceData **)pContext) { + *(JoyStick_DeviceData **)pContext = pNewJoystick->pNext; + } else if (pPrevJoystick) { + pPrevJoystick->pNext = pNewJoystick->pNext; + } + + pNewJoystick->pNext = SYS_Joystick; + SYS_Joystick = pNewJoystick; + + return DIENUM_CONTINUE; /* already have this joystick loaded, just keep going */ + } + + pPrevJoystick = pNewJoystick; + pNewJoystick = pNewJoystick->pNext; + } + + pNewJoystick = (JoyStick_DeviceData *)SDL_malloc(sizeof(JoyStick_DeviceData)); + if (!pNewJoystick) { + return DIENUM_CONTINUE; /* better luck next time? */ + } + + SDL_zerop(pNewJoystick); + pNewJoystick->joystickname = WIN_StringToUTF8(pdidInstance->tszProductName); + if (!pNewJoystick->joystickname) { + SDL_free(pNewJoystick); + return DIENUM_CONTINUE; /* better luck next time? */ + } + + SDL_memcpy(&(pNewJoystick->dxdevice), pdidInstance, + sizeof(DIDEVICEINSTANCE)); + + SDL_memcpy(&pNewJoystick->guid, &pdidInstance->guidProduct, sizeof(pNewJoystick->guid)); + SDL_SYS_AddJoystickDevice(pNewJoystick); + + return DIENUM_CONTINUE; /* get next device, please */ +} + +void +SDL_DINPUT_JoystickDetect(JoyStick_DeviceData **pContext) +{ + IDirectInput8_EnumDevices(dinput, DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, pContext, DIEDFL_ATTACHEDONLY); + + if (SDL_RawDevList) { + SDL_free(SDL_RawDevList); /* in case we used this in DirectInput detection */ + SDL_RawDevList = NULL; + } + SDL_RawDevListCount = 0; +} + +static BOOL CALLBACK +EnumDevObjectsCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) +{ + SDL_Joystick *joystick = (SDL_Joystick *)pvRef; + HRESULT result; + input_t *in = &joystick->hwdata->Inputs[joystick->hwdata->NumInputs]; + + if (dev->dwType & DIDFT_BUTTON) { + in->type = BUTTON; + in->num = joystick->nbuttons; + in->ofs = DIJOFS_BUTTON(in->num); + joystick->nbuttons++; + } else if (dev->dwType & DIDFT_POV) { + in->type = HAT; + in->num = joystick->nhats; + in->ofs = DIJOFS_POV(in->num); + joystick->nhats++; + } else if (dev->dwType & DIDFT_AXIS) { + DIPROPRANGE diprg; + DIPROPDWORD dilong; + + in->type = AXIS; + in->num = joystick->naxes; + if (!SDL_memcmp(&dev->guidType, &GUID_XAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_X; + else if (!SDL_memcmp(&dev->guidType, &GUID_YAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_Y; + else if (!SDL_memcmp(&dev->guidType, &GUID_ZAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_Z; + else if (!SDL_memcmp(&dev->guidType, &GUID_RxAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_RX; + else if (!SDL_memcmp(&dev->guidType, &GUID_RyAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_RY; + else if (!SDL_memcmp(&dev->guidType, &GUID_RzAxis, sizeof(dev->guidType))) + in->ofs = DIJOFS_RZ; + else if (!SDL_memcmp(&dev->guidType, &GUID_Slider, sizeof(dev->guidType))) { + in->ofs = DIJOFS_SLIDER(joystick->hwdata->NumSliders); + ++joystick->hwdata->NumSliders; + } else { + return DIENUM_CONTINUE; /* not an axis we can grok */ + } + + diprg.diph.dwSize = sizeof(diprg); + diprg.diph.dwHeaderSize = sizeof(diprg.diph); + diprg.diph.dwObj = dev->dwType; + diprg.diph.dwHow = DIPH_BYID; + diprg.lMin = AXIS_MIN; + diprg.lMax = AXIS_MAX; + + result = + IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, + DIPROP_RANGE, &diprg.diph); + if (FAILED(result)) { + return DIENUM_CONTINUE; /* don't use this axis */ + } + + /* Set dead zone to 0. */ + dilong.diph.dwSize = sizeof(dilong); + dilong.diph.dwHeaderSize = sizeof(dilong.diph); + dilong.diph.dwObj = dev->dwType; + dilong.diph.dwHow = DIPH_BYID; + dilong.dwData = 0; + result = + IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, + DIPROP_DEADZONE, &dilong.diph); + if (FAILED(result)) { + return DIENUM_CONTINUE; /* don't use this axis */ + } + + joystick->naxes++; + } else { + /* not supported at this time */ + return DIENUM_CONTINUE; + } + + joystick->hwdata->NumInputs++; + + if (joystick->hwdata->NumInputs == MAX_INPUTS) { + return DIENUM_STOP; /* too many */ + } + + return DIENUM_CONTINUE; +} + +/* Sort using the data offset into the DInput struct. + * This gives a reasonable ordering for the inputs. + */ +static int +SortDevFunc(const void *a, const void *b) +{ + const input_t *inputA = (const input_t*)a; + const input_t *inputB = (const input_t*)b; + + if (inputA->ofs < inputB->ofs) + return -1; + if (inputA->ofs > inputB->ofs) + return 1; + return 0; +} + +/* Sort the input objects and recalculate the indices for each input. */ +static void +SortDevObjects(SDL_Joystick *joystick) +{ + input_t *inputs = joystick->hwdata->Inputs; + int nButtons = 0; + int nHats = 0; + int nAxis = 0; + int n; + + SDL_qsort(inputs, joystick->hwdata->NumInputs, sizeof(input_t), SortDevFunc); + + for (n = 0; n < joystick->hwdata->NumInputs; n++) { + switch (inputs[n].type) { + case BUTTON: + inputs[n].num = nButtons; + nButtons++; + break; + + case HAT: + inputs[n].num = nHats; + nHats++; + break; + + case AXIS: + inputs[n].num = nAxis; + nAxis++; + break; + } + } +} + +int +SDL_DINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice) +{ + HRESULT result; + LPDIRECTINPUTDEVICE8 device; + DIPROPDWORD dipdw; + + joystick->hwdata->buffered = SDL_TRUE; + joystick->hwdata->Capabilities.dwSize = sizeof(DIDEVCAPS); + + SDL_zero(dipdw); + dipdw.diph.dwSize = sizeof(DIPROPDWORD); + dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); + + result = + IDirectInput8_CreateDevice(dinput, + &(joystickdevice->dxdevice.guidInstance), &device, NULL); + if (FAILED(result)) { + return SetDIerror("IDirectInput::CreateDevice", result); + } + + /* Now get the IDirectInputDevice8 interface, instead. */ + result = IDirectInputDevice8_QueryInterface(device, + &IID_IDirectInputDevice8, + (LPVOID *)& joystick-> + hwdata->InputDevice); + /* We are done with this object. Use the stored one from now on. */ + IDirectInputDevice8_Release(device); + + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::QueryInterface", result); + } + + /* Acquire shared access. Exclusive access is required for forces, + * though. */ + result = + IDirectInputDevice8_SetCooperativeLevel(joystick->hwdata-> + InputDevice, SDL_HelperWindow, + DISCL_EXCLUSIVE | + DISCL_BACKGROUND); + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::SetCooperativeLevel", result); + } + + /* Use the extended data structure: DIJOYSTATE2. */ + result = + IDirectInputDevice8_SetDataFormat(joystick->hwdata->InputDevice, + &c_dfDIJoystick2); + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::SetDataFormat", result); + } + + /* Get device capabilities */ + result = + IDirectInputDevice8_GetCapabilities(joystick->hwdata->InputDevice, + &joystick->hwdata->Capabilities); + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::GetCapabilities", result); + } + + /* Force capable? */ + if (joystick->hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) { + + result = IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::Acquire", result); + } + + /* reset all actuators. */ + result = + IDirectInputDevice8_SendForceFeedbackCommand(joystick->hwdata-> + InputDevice, + DISFFC_RESET); + + /* Not necessarily supported, ignore if not supported. + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::SendForceFeedbackCommand", result); + } + */ + + result = IDirectInputDevice8_Unacquire(joystick->hwdata->InputDevice); + + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::Unacquire", result); + } + + /* Turn on auto-centering for a ForceFeedback device (until told + * otherwise). */ + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = DIPROPAUTOCENTER_ON; + + result = + IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, + DIPROP_AUTOCENTER, &dipdw.diph); + + /* Not necessarily supported, ignore if not supported. + if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::SetProperty", result); + } + */ + } + + /* What buttons and axes does it have? */ + IDirectInputDevice8_EnumObjects(joystick->hwdata->InputDevice, + EnumDevObjectsCallback, joystick, + DIDFT_BUTTON | DIDFT_AXIS | DIDFT_POV); + + /* Reorder the input objects. Some devices do not report the X axis as + * the first axis, for example. */ + SortDevObjects(joystick); + + dipdw.diph.dwObj = 0; + dipdw.diph.dwHow = DIPH_DEVICE; + dipdw.dwData = INPUT_QSIZE; + + /* Set the buffer size */ + result = + IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, + DIPROP_BUFFERSIZE, &dipdw.diph); + + if (result == DI_POLLEDDEVICE) { + /* This device doesn't support buffering, so we're forced + * to use less reliable polling. */ + joystick->hwdata->buffered = SDL_FALSE; + } else if (FAILED(result)) { + return SetDIerror("IDirectInputDevice8::SetProperty", result); + } + return 0; +} + +static Uint8 +TranslatePOV(DWORD value) +{ + const int HAT_VALS[] = { + SDL_HAT_UP, + SDL_HAT_UP | SDL_HAT_RIGHT, + SDL_HAT_RIGHT, + SDL_HAT_DOWN | SDL_HAT_RIGHT, + SDL_HAT_DOWN, + SDL_HAT_DOWN | SDL_HAT_LEFT, + SDL_HAT_LEFT, + SDL_HAT_UP | SDL_HAT_LEFT + }; + + if (LOWORD(value) == 0xFFFF) + return SDL_HAT_CENTERED; + + /* Round the value up: */ + value += 4500 / 2; + value %= 36000; + value /= 4500; + + if (value >= 8) + return SDL_HAT_CENTERED; /* shouldn't happen */ + + return HAT_VALS[value]; +} + +static void +UpdateDINPUTJoystickState_Buffered(SDL_Joystick * joystick) +{ + int i; + HRESULT result; + DWORD numevents; + DIDEVICEOBJECTDATA evtbuf[INPUT_QSIZE]; + + numevents = INPUT_QSIZE; + result = + IDirectInputDevice8_GetDeviceData(joystick->hwdata->InputDevice, + sizeof(DIDEVICEOBJECTDATA), evtbuf, + &numevents, 0); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); + result = + IDirectInputDevice8_GetDeviceData(joystick->hwdata->InputDevice, + sizeof(DIDEVICEOBJECTDATA), + evtbuf, &numevents, 0); + } + + /* Handle the events or punt */ + if (FAILED(result)) { + joystick->hwdata->send_remove_event = SDL_TRUE; + joystick->hwdata->removed = SDL_TRUE; + return; + } + + for (i = 0; i < (int)numevents; ++i) { + int j; + + for (j = 0; j < joystick->hwdata->NumInputs; ++j) { + const input_t *in = &joystick->hwdata->Inputs[j]; + + if (evtbuf[i].dwOfs != in->ofs) + continue; + + switch (in->type) { + case AXIS: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)evtbuf[i].dwData); + break; + case BUTTON: + SDL_PrivateJoystickButton(joystick, in->num, + (Uint8)(evtbuf[i].dwData ? SDL_PRESSED : SDL_RELEASED)); + break; + case HAT: + { + Uint8 pos = TranslatePOV(evtbuf[i].dwData); + SDL_PrivateJoystickHat(joystick, in->num, pos); + } + break; + } + } + } +} + +/* Function to update the state of a joystick - called as a device poll. + * This function shouldn't update the joystick structure directly, + * but instead should call SDL_PrivateJoystick*() to deliver events + * and update joystick device state. + */ +static void +UpdateDINPUTJoystickState_Polled(SDL_Joystick * joystick) +{ + DIJOYSTATE2 state; + HRESULT result; + int i; + + result = + IDirectInputDevice8_GetDeviceState(joystick->hwdata->InputDevice, + sizeof(DIJOYSTATE2), &state); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); + result = + IDirectInputDevice8_GetDeviceState(joystick->hwdata->InputDevice, + sizeof(DIJOYSTATE2), &state); + } + + if (result != DI_OK) { + joystick->hwdata->send_remove_event = SDL_TRUE; + joystick->hwdata->removed = SDL_TRUE; + return; + } + + /* Set each known axis, button and POV. */ + for (i = 0; i < joystick->hwdata->NumInputs; ++i) { + const input_t *in = &joystick->hwdata->Inputs[i]; + + switch (in->type) { + case AXIS: + switch (in->ofs) { + case DIJOFS_X: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lX); + break; + case DIJOFS_Y: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lY); + break; + case DIJOFS_Z: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lZ); + break; + case DIJOFS_RX: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lRx); + break; + case DIJOFS_RY: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lRy); + break; + case DIJOFS_RZ: + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.lRz); + break; + case DIJOFS_SLIDER(0): + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.rglSlider[0]); + break; + case DIJOFS_SLIDER(1): + SDL_PrivateJoystickAxis(joystick, in->num, (Sint16)state.rglSlider[1]); + break; + } + break; + + case BUTTON: + SDL_PrivateJoystickButton(joystick, in->num, + (Uint8)(state.rgbButtons[in->ofs - DIJOFS_BUTTON0] ? SDL_PRESSED : SDL_RELEASED)); + break; + case HAT: + { + Uint8 pos = TranslatePOV(state.rgdwPOV[in->ofs - DIJOFS_POV(0)]); + SDL_PrivateJoystickHat(joystick, in->num, pos); + break; + } + } + } +} + +void +SDL_DINPUT_JoystickUpdate(SDL_Joystick * joystick) +{ + HRESULT result; + + result = IDirectInputDevice8_Poll(joystick->hwdata->InputDevice); + if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { + IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); + IDirectInputDevice8_Poll(joystick->hwdata->InputDevice); + } + + if (joystick->hwdata->buffered) { + UpdateDINPUTJoystickState_Buffered(joystick); + } else { + UpdateDINPUTJoystickState_Polled(joystick); + } +} + +void +SDL_DINPUT_JoystickClose(SDL_Joystick * joystick) +{ + IDirectInputDevice8_Unacquire(joystick->hwdata->InputDevice); + IDirectInputDevice8_Release(joystick->hwdata->InputDevice); +} + +void +SDL_DINPUT_JoystickQuit(void) +{ + if (dinput != NULL) { + IDirectInput8_Release(dinput); + dinput = NULL; + } + + if (coinitialized) { + WIN_CoUninitialize(); + coinitialized = SDL_FALSE; + } +} + +#else /* !SDL_JOYSTICK_DINPUT */ + +typedef struct JoyStick_DeviceData JoyStick_DeviceData; + +int +SDL_DINPUT_JoystickInit(void) +{ + return 0; +} + +void +SDL_DINPUT_JoystickDetect(JoyStick_DeviceData **pContext) +{ +} + +int +SDL_DINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice) +{ + return SDL_Unsupported(); +} + +void +SDL_DINPUT_JoystickUpdate(SDL_Joystick * joystick) +{ +} + +void +SDL_DINPUT_JoystickClose(SDL_Joystick * joystick) +{ +} + +void +SDL_DINPUT_JoystickQuit(void) +{ +} + +#endif /* SDL_JOYSTICK_DINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick_c.h b/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick_c.h new file mode 100644 index 0000000000..7e4ff3e194 --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick_c.h @@ -0,0 +1,30 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +extern int SDL_DINPUT_JoystickInit(void); +extern void SDL_DINPUT_JoystickDetect(JoyStick_DeviceData **pContext); +extern int SDL_DINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice); +extern void SDL_DINPUT_JoystickUpdate(SDL_Joystick * joystick); +extern void SDL_DINPUT_JoystickClose(SDL_Joystick * joystick); +extern void SDL_DINPUT_JoystickQuit(void); + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick.c b/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick.c deleted file mode 100644 index 3c009746b6..0000000000 --- a/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick.c +++ /dev/null @@ -1,1683 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifdef SDL_JOYSTICK_DINPUT - -/* DirectInput joystick driver; written by Glenn Maynard, based on Andrei de - * A. Formiga's WINMM driver. - * - * Hats and sliders are completely untested; the app I'm writing this for mostly - * doesn't use them and I don't own any joysticks with them. - * - * We don't bother to use event notification here. It doesn't seem to work - * with polled devices, and it's fine to call IDirectInputDevice8_GetDeviceData and - * let it return 0 events. */ - -#include "SDL_error.h" -#include "SDL_assert.h" -#include "SDL_events.h" -#include "SDL_thread.h" -#include "SDL_timer.h" -#include "SDL_mutex.h" -#include "SDL_events.h" -#include "SDL_hints.h" -#include "SDL_joystick.h" -#include "../SDL_sysjoystick.h" -#if !SDL_EVENTS_DISABLED -#include "../../events/SDL_events_c.h" -#endif - -#define INITGUID /* Only set here, if set twice will cause mingw32 to break. */ -#include "SDL_dxjoystick_c.h" - -#if SDL_HAPTIC_DINPUT -#include "../../haptic/windows/SDL_syshaptic_c.h" /* For haptic hot plugging */ -#endif - -#ifndef DIDFT_OPTIONAL -#define DIDFT_OPTIONAL 0x80000000 -#endif - -DEFINE_GUID(GUID_DEVINTERFACE_HID, 0x4D1E55B2L, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30); - - -#define INPUT_QSIZE 32 /* Buffer up to 32 input messages */ -#define AXIS_MIN -32768 /* minimum value for axis coordinate */ -#define AXIS_MAX 32767 /* maximum value for axis coordinate */ -#define JOY_AXIS_THRESHOLD (((AXIS_MAX)-(AXIS_MIN))/100) /* 1% motion */ - -/* external variables referenced. */ -extern HWND SDL_HelperWindow; - - -/* local variables */ -static SDL_bool coinitialized = SDL_FALSE; -static LPDIRECTINPUT8 dinput = NULL; -static SDL_bool s_bDeviceAdded = SDL_FALSE; -static SDL_bool s_bDeviceRemoved = SDL_FALSE; -static SDL_JoystickID s_nInstanceID = -1; -static SDL_cond *s_condJoystickThread = NULL; -static SDL_mutex *s_mutexJoyStickEnum = NULL; -static SDL_Thread *s_threadJoystick = NULL; -static SDL_bool s_bJoystickThreadQuit = SDL_FALSE; -static SDL_bool s_bXInputEnabled = SDL_TRUE; - -XInputGetState_t SDL_XInputGetState = NULL; -XInputSetState_t SDL_XInputSetState = NULL; -XInputGetCapabilities_t SDL_XInputGetCapabilities = NULL; -DWORD SDL_XInputVersion = 0; - -static HANDLE s_pXInputDLL = 0; -static int s_XInputDLLRefCount = 0; - -int -WIN_LoadXInputDLL(void) -{ - DWORD version = 0; - - if (s_pXInputDLL) { - SDL_assert(s_XInputDLLRefCount > 0); - s_XInputDLLRefCount++; - return 0; /* already loaded */ - } - - version = (1 << 16) | 4; - s_pXInputDLL = LoadLibrary( L"XInput1_4.dll" ); /* 1.4 Ships with Windows 8. */ - if (!s_pXInputDLL) { - version = (1 << 16) | 3; - s_pXInputDLL = LoadLibrary( L"XInput1_3.dll" ); /* 1.3 Ships with Vista and Win7, can be installed as a redistributable component. */ - } - if (!s_pXInputDLL) { - s_pXInputDLL = LoadLibrary( L"bin\\XInput1_3.dll" ); - } - if (!s_pXInputDLL) { - return -1; - } - - SDL_assert(s_XInputDLLRefCount == 0); - SDL_XInputVersion = version; - s_XInputDLLRefCount = 1; - - /* 100 is the ordinal for _XInputGetStateEx, which returns the same struct as XinputGetState, but with extra data in wButtons for the guide button, we think... */ - SDL_XInputGetState = (XInputGetState_t)GetProcAddress( (HMODULE)s_pXInputDLL, (LPCSTR)100 ); - SDL_XInputSetState = (XInputSetState_t)GetProcAddress( (HMODULE)s_pXInputDLL, "XInputSetState" ); - SDL_XInputGetCapabilities = (XInputGetCapabilities_t)GetProcAddress( (HMODULE)s_pXInputDLL, "XInputGetCapabilities" ); - if ( !SDL_XInputGetState || !SDL_XInputSetState || !SDL_XInputGetCapabilities ) { - WIN_UnloadXInputDLL(); - return -1; - } - - return 0; -} - -void -WIN_UnloadXInputDLL(void) -{ - if ( s_pXInputDLL ) { - SDL_assert(s_XInputDLLRefCount > 0); - if (--s_XInputDLLRefCount == 0) { - FreeLibrary( s_pXInputDLL ); - s_pXInputDLL = NULL; - } - } else { - SDL_assert(s_XInputDLLRefCount == 0); - } -} - - -extern HRESULT(WINAPI * DInputCreate) (HINSTANCE hinst, DWORD dwVersion, - LPDIRECTINPUT * ppDI, - LPUNKNOWN punkOuter); -struct JoyStick_DeviceData_ -{ - SDL_JoystickGUID guid; - DIDEVICEINSTANCE dxdevice; - char *joystickname; - Uint8 send_add_event; - SDL_JoystickID nInstanceID; - SDL_bool bXInputDevice; - Uint8 XInputUserId; - struct JoyStick_DeviceData_ *pNext; -}; - -typedef struct JoyStick_DeviceData_ JoyStick_DeviceData; - -static JoyStick_DeviceData *SYS_Joystick; /* array to hold joystick ID values */ - -/* local prototypes */ -static int SetDIerror(const char *function, HRESULT code); -static BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE * - pdidInstance, VOID * pContext); -static BOOL CALLBACK EnumDevObjectsCallback(LPCDIDEVICEOBJECTINSTANCE dev, - LPVOID pvRef); -static void SortDevObjects(SDL_Joystick *joystick); -static Uint8 TranslatePOV(DWORD value); -static int SDL_PrivateJoystickAxis_Int(SDL_Joystick * joystick, Uint8 axis, - Sint16 value); -static int SDL_PrivateJoystickHat_Int(SDL_Joystick * joystick, Uint8 hat, - Uint8 value); -static int SDL_PrivateJoystickButton_Int(SDL_Joystick * joystick, - Uint8 button, Uint8 state); - -/* Taken from Wine - Thanks! */ -DIOBJECTDATAFORMAT dfDIJoystick2[] = { - { &GUID_XAxis,DIJOFS_X,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_YAxis,DIJOFS_Y,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_ZAxis,DIJOFS_Z,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RxAxis,DIJOFS_RX,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RyAxis,DIJOFS_RY,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RzAxis,DIJOFS_RZ,DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,DIJOFS_SLIDER(0),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,DIJOFS_SLIDER(1),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_POV,DIJOFS_POV(0),DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0}, - { &GUID_POV,DIJOFS_POV(1),DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0}, - { &GUID_POV,DIJOFS_POV(2),DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0}, - { &GUID_POV,DIJOFS_POV(3),DIDFT_OPTIONAL|DIDFT_POV|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(0),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(1),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(2),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(3),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(4),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(5),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(6),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(7),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(8),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(9),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(10),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(11),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(12),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(13),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(14),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(15),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(16),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(17),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(18),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(19),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(20),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(21),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(22),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(23),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(24),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(25),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(26),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(27),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(28),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(29),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(30),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(31),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(32),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(33),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(34),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(35),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(36),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(37),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(38),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(39),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(40),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(41),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(42),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(43),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(44),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(45),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(46),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(47),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(48),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(49),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(50),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(51),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(52),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(53),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(54),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(55),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(56),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(57),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(58),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(59),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(60),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(61),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(62),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(63),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(64),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(65),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(66),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(67),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(68),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(69),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(70),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(71),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(72),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(73),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(74),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(75),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(76),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(77),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(78),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(79),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(80),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(81),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(82),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(83),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(84),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(85),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(86),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(87),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(88),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(89),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(90),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(91),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(92),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(93),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(94),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(95),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(96),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(97),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(98),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(99),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(100),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(101),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(102),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(103),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(104),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(105),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(106),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(107),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(108),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(109),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(110),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(111),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(112),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(113),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(114),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(115),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(116),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(117),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(118),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(119),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(120),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(121),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(122),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(123),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(124),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(125),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(126),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { NULL,DIJOFS_BUTTON(127),DIDFT_OPTIONAL|DIDFT_BUTTON|DIDFT_ANYINSTANCE,0}, - { &GUID_XAxis,FIELD_OFFSET(DIJOYSTATE2,lVX),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_YAxis,FIELD_OFFSET(DIJOYSTATE2,lVY),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_ZAxis,FIELD_OFFSET(DIJOYSTATE2,lVZ),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RxAxis,FIELD_OFFSET(DIJOYSTATE2,lVRx),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RyAxis,FIELD_OFFSET(DIJOYSTATE2,lVRy),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RzAxis,FIELD_OFFSET(DIJOYSTATE2,lVRz),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglVSlider[0]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglVSlider[1]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_XAxis,FIELD_OFFSET(DIJOYSTATE2,lAX),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_YAxis,FIELD_OFFSET(DIJOYSTATE2,lAY),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_ZAxis,FIELD_OFFSET(DIJOYSTATE2,lAZ),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RxAxis,FIELD_OFFSET(DIJOYSTATE2,lARx),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RyAxis,FIELD_OFFSET(DIJOYSTATE2,lARy),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RzAxis,FIELD_OFFSET(DIJOYSTATE2,lARz),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglASlider[0]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglASlider[1]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_XAxis,FIELD_OFFSET(DIJOYSTATE2,lFX),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_YAxis,FIELD_OFFSET(DIJOYSTATE2,lFY),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_ZAxis,FIELD_OFFSET(DIJOYSTATE2,lFZ),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RxAxis,FIELD_OFFSET(DIJOYSTATE2,lFRx),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RyAxis,FIELD_OFFSET(DIJOYSTATE2,lFRy),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_RzAxis,FIELD_OFFSET(DIJOYSTATE2,lFRz),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglFSlider[0]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, - { &GUID_Slider,FIELD_OFFSET(DIJOYSTATE2,rglFSlider[1]),DIDFT_OPTIONAL|DIDFT_AXIS|DIDFT_ANYINSTANCE,0}, -}; - -const DIDATAFORMAT c_dfDIJoystick2 = { - sizeof(DIDATAFORMAT), - sizeof(DIOBJECTDATAFORMAT), - DIDF_ABSAXIS, - sizeof(DIJOYSTATE2), - SDL_arraysize(dfDIJoystick2), - dfDIJoystick2 -}; - - -/* Convert a DirectInput return code to a text message */ -static int -SetDIerror(const char *function, HRESULT code) -{ - /* - return SDL_SetError("%s() [%s]: %s", function, - DXGetErrorString9A(code), DXGetErrorDescription9A(code)); - */ - return SDL_SetError("%s() DirectX error %d", function, code); -} - - -#define SAFE_RELEASE(p) \ -{ \ - if (p) { \ - (p)->lpVtbl->Release((p)); \ - (p) = 0; \ - } \ -} - -DEFINE_GUID(IID_ValveStreamingGamepad, MAKELONG( 0x28DE, 0x11FF ),0x0000,0x0000,0x00,0x00,0x50,0x49,0x44,0x56,0x49,0x44); -DEFINE_GUID(IID_X360WiredGamepad, MAKELONG( 0x045E, 0x02A1 ),0x0000,0x0000,0x00,0x00,0x50,0x49,0x44,0x56,0x49,0x44); -DEFINE_GUID(IID_X360WirelessGamepad, MAKELONG( 0x045E, 0x028E ),0x0000,0x0000,0x00,0x00,0x50,0x49,0x44,0x56,0x49,0x44); - -static PRAWINPUTDEVICELIST SDL_RawDevList = NULL; -static UINT SDL_RawDevListCount = 0; - -static SDL_bool -SDL_IsXInputDevice( const GUID* pGuidProductFromDirectInput ) -{ - static const GUID *s_XInputProductGUID[] = { - &IID_ValveStreamingGamepad, - &IID_X360WiredGamepad, /* Microsoft's wired X360 controller for Windows. */ - &IID_X360WirelessGamepad /* Microsoft's wireless X360 controller for Windows. */ - }; - - size_t iDevice; - UINT i; - - if (!s_bXInputEnabled) { - return SDL_FALSE; - } - - /* Check for well known XInput device GUIDs */ - /* This lets us skip RAWINPUT for popular devices. Also, we need to do this for the Valve Streaming Gamepad because it's virtualized and doesn't show up in the device list. */ - for ( iDevice = 0; iDevice < SDL_arraysize(s_XInputProductGUID); ++iDevice ) { - if (SDL_memcmp(pGuidProductFromDirectInput, s_XInputProductGUID[iDevice], sizeof(GUID)) == 0) { - return SDL_TRUE; - } - } - - /* Go through RAWINPUT (WinXP and later) to find HID devices. */ - /* Cache this if we end up using it. */ - if (SDL_RawDevList == NULL) { - if ((GetRawInputDeviceList(NULL, &SDL_RawDevListCount, sizeof (RAWINPUTDEVICELIST)) == -1) || (!SDL_RawDevListCount)) { - return SDL_FALSE; /* oh well. */ - } - - SDL_RawDevList = (PRAWINPUTDEVICELIST) SDL_malloc(sizeof (RAWINPUTDEVICELIST) * SDL_RawDevListCount); - if (SDL_RawDevList == NULL) { - SDL_OutOfMemory(); - return SDL_FALSE; - } - - if (GetRawInputDeviceList(SDL_RawDevList, &SDL_RawDevListCount, sizeof (RAWINPUTDEVICELIST)) == -1) { - SDL_free(SDL_RawDevList); - SDL_RawDevList = NULL; - return SDL_FALSE; /* oh well. */ - } - } - - for (i = 0; i < SDL_RawDevListCount; i++) { - RID_DEVICE_INFO rdi; - char devName[128]; - UINT rdiSize = sizeof (rdi); - UINT nameSize = SDL_arraysize(devName); - - rdi.cbSize = sizeof (rdi); - if ( (SDL_RawDevList[i].dwType == RIM_TYPEHID) && - (GetRawInputDeviceInfoA(SDL_RawDevList[i].hDevice, RIDI_DEVICEINFO, &rdi, &rdiSize) != ((UINT)-1)) && - (MAKELONG(rdi.hid.dwVendorId, rdi.hid.dwProductId) == ((LONG)pGuidProductFromDirectInput->Data1)) && - (GetRawInputDeviceInfoA(SDL_RawDevList[i].hDevice, RIDI_DEVICENAME, devName, &nameSize) != ((UINT)-1)) && - (SDL_strstr(devName, "IG_") != NULL) ) { - return SDL_TRUE; - } - } - - return SDL_FALSE; -} - - -static SDL_bool s_bWindowsDeviceChanged = SDL_FALSE; - -/* windowproc for our joystick detect thread message only window, to detect any USB device addition/removal - */ -LRESULT CALLBACK SDL_PrivateJoystickDetectProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { - switch (message) { - case WM_DEVICECHANGE: - switch (wParam) { - case DBT_DEVICEARRIVAL: - if (((DEV_BROADCAST_HDR*)lParam)->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { - s_bWindowsDeviceChanged = SDL_TRUE; - } - break; - case DBT_DEVICEREMOVECOMPLETE: - if (((DEV_BROADCAST_HDR*)lParam)->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { - s_bWindowsDeviceChanged = SDL_TRUE; - } - break; - } - return 0; - } - - return DefWindowProc (hwnd, message, wParam, lParam); -} - - -DEFINE_GUID(GUID_DEVINTERFACE_USB_DEVICE, 0xA5DCBF10L, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, \ - 0xC0, 0x4F, 0xB9, 0x51, 0xED); - -/* Function/thread to scan the system for joysticks. - */ -static int -SDL_JoystickThread(void *_data) -{ - HWND messageWindow = 0; - HDEVNOTIFY hNotify = 0; - DEV_BROADCAST_DEVICEINTERFACE dbh; - SDL_bool bOpenedXInputDevices[SDL_XINPUT_MAX_DEVICES]; - WNDCLASSEX wincl; - - SDL_zero(bOpenedXInputDevices); - - WIN_CoInitialize(); - - SDL_memset( &wincl, 0x0, sizeof(wincl) ); - wincl.hInstance = GetModuleHandle( NULL ); - wincl.lpszClassName = L"Message"; - wincl.lpfnWndProc = SDL_PrivateJoystickDetectProc; /* This function is called by windows */ - wincl.cbSize = sizeof (WNDCLASSEX); - - if (!RegisterClassEx (&wincl)) - { - return SDL_SetError("Failed to create register class for joystick autodetect.", GetLastError()); - } - - messageWindow = (HWND)CreateWindowEx( 0, L"Message", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL ); - if ( !messageWindow ) - { - return SDL_SetError("Failed to create message window for joystick autodetect.", GetLastError()); - } - - SDL_zero(dbh); - - dbh.dbcc_size = sizeof(dbh); - dbh.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; - dbh.dbcc_classguid = GUID_DEVINTERFACE_HID; - - hNotify = RegisterDeviceNotification( messageWindow, &dbh, DEVICE_NOTIFY_WINDOW_HANDLE ); - if ( !hNotify ) - { - return SDL_SetError("Failed to create notify device for joystick autodetect.", GetLastError()); - } - - SDL_LockMutex( s_mutexJoyStickEnum ); - while ( s_bJoystickThreadQuit == SDL_FALSE ) - { - MSG messages; - SDL_bool bXInputChanged = SDL_FALSE; - - SDL_CondWaitTimeout( s_condJoystickThread, s_mutexJoyStickEnum, 300 ); - - while ( s_bJoystickThreadQuit == SDL_FALSE && PeekMessage(&messages, messageWindow, 0, 0, PM_NOREMOVE) ) - { - if ( GetMessage(&messages, messageWindow, 0, 0) != 0 ) { - TranslateMessage(&messages); - DispatchMessage(&messages); - } - } - - if ( s_bXInputEnabled && XINPUTGETCAPABILITIES ) { - /* scan for any change in XInput devices */ - Uint8 userId; - for (userId = 0; userId < SDL_XINPUT_MAX_DEVICES; userId++) { - XINPUT_CAPABILITIES capabilities; - const DWORD result = XINPUTGETCAPABILITIES( userId, XINPUT_FLAG_GAMEPAD, &capabilities ); - const SDL_bool available = (result == ERROR_SUCCESS); - if (bOpenedXInputDevices[userId] != available) { - bXInputChanged = SDL_TRUE; - bOpenedXInputDevices[userId] = available; - } - } - } - - if (s_bWindowsDeviceChanged || bXInputChanged) { - SDL_UnlockMutex( s_mutexJoyStickEnum ); /* let main thread go while we SDL_Delay(). */ - SDL_Delay( 300 ); /* wait for direct input to find out about this device */ - SDL_LockMutex( s_mutexJoyStickEnum ); - - s_bDeviceRemoved = SDL_TRUE; - s_bDeviceAdded = SDL_TRUE; - s_bWindowsDeviceChanged = SDL_FALSE; - } - } - SDL_UnlockMutex( s_mutexJoyStickEnum ); - - if ( hNotify ) - UnregisterDeviceNotification( hNotify ); - - if ( messageWindow ) - DestroyWindow( messageWindow ); - - UnregisterClass( wincl.lpszClassName, wincl.hInstance ); - messageWindow = 0; - WIN_CoUninitialize(); - return 1; -} - - -/* Function to scan the system for joysticks. - * This function should set SDL_numjoysticks to the number of available - * joysticks. Joystick 0 should be the system default joystick. - * It should return 0, or -1 on an unrecoverable fatal error. - */ -int -SDL_SYS_JoystickInit(void) -{ - HRESULT result; - HINSTANCE instance; - const char *env = SDL_GetHint(SDL_HINT_XINPUT_ENABLED); - if (env && !SDL_atoi(env)) { - s_bXInputEnabled = SDL_FALSE; - } - - result = WIN_CoInitialize(); - if (FAILED(result)) { - return SetDIerror("CoInitialize", result); - } - - coinitialized = SDL_TRUE; - - result = CoCreateInstance(&CLSID_DirectInput8, NULL, CLSCTX_INPROC_SERVER, - &IID_IDirectInput8, (LPVOID)&dinput); - - if (FAILED(result)) { - SDL_SYS_JoystickQuit(); - return SetDIerror("CoCreateInstance", result); - } - - /* Because we used CoCreateInstance, we need to Initialize it, first. */ - instance = GetModuleHandle(NULL); - if (instance == NULL) { - SDL_SYS_JoystickQuit(); - return SDL_SetError("GetModuleHandle() failed with error code %d.", GetLastError()); - } - result = IDirectInput8_Initialize(dinput, instance, DIRECTINPUT_VERSION); - - if (FAILED(result)) { - SDL_SYS_JoystickQuit(); - return SetDIerror("IDirectInput::Initialize", result); - } - - if ((s_bXInputEnabled) && (WIN_LoadXInputDLL() == -1)) { - s_bXInputEnabled = SDL_FALSE; /* oh well. */ - } - - s_mutexJoyStickEnum = SDL_CreateMutex(); - s_condJoystickThread = SDL_CreateCond(); - s_bDeviceAdded = SDL_TRUE; /* force a scan of the system for joysticks this first time */ - - SDL_SYS_JoystickDetect(); - - if ( !s_threadJoystick ) - { - s_bJoystickThreadQuit = SDL_FALSE; - /* spin up the thread to detect hotplug of devices */ -#if defined(__WIN32__) && !defined(HAVE_LIBC) -#undef SDL_CreateThread -#if SDL_DYNAMIC_API - s_threadJoystick= SDL_CreateThread_REAL( SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL ); -#else - s_threadJoystick= SDL_CreateThread( SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL ); -#endif -#else - s_threadJoystick = SDL_CreateThread( SDL_JoystickThread, "SDL_joystick", NULL ); -#endif - } - return SDL_SYS_NumJoysticks(); -} - -/* return the number of joysticks that are connected right now */ -int SDL_SYS_NumJoysticks() -{ - int nJoysticks = 0; - JoyStick_DeviceData *device = SYS_Joystick; - while ( device ) - { - nJoysticks++; - device = device->pNext; - } - - return nJoysticks; -} - -/* helper function for direct input, gets called for each connected joystick */ -static BOOL CALLBACK - EnumJoysticksCallback(const DIDEVICEINSTANCE * pdidInstance, VOID * pContext) -{ - JoyStick_DeviceData *pNewJoystick; - JoyStick_DeviceData *pPrevJoystick = NULL; - - if (SDL_IsXInputDevice( &pdidInstance->guidProduct )) { - return DIENUM_CONTINUE; /* ignore XInput devices here, keep going. */ - } - - pNewJoystick = *(JoyStick_DeviceData **)pContext; - while ( pNewJoystick ) - { - if ( !SDL_memcmp( &pNewJoystick->dxdevice.guidInstance, &pdidInstance->guidInstance, sizeof(pNewJoystick->dxdevice.guidInstance) ) ) - { - /* if we are replacing the front of the list then update it */ - if ( pNewJoystick == *(JoyStick_DeviceData **)pContext ) - { - *(JoyStick_DeviceData **)pContext = pNewJoystick->pNext; - } - else if ( pPrevJoystick ) - { - pPrevJoystick->pNext = pNewJoystick->pNext; - } - - pNewJoystick->pNext = SYS_Joystick; - SYS_Joystick = pNewJoystick; - - return DIENUM_CONTINUE; /* already have this joystick loaded, just keep going */ - } - - pPrevJoystick = pNewJoystick; - pNewJoystick = pNewJoystick->pNext; - } - - pNewJoystick = (JoyStick_DeviceData *)SDL_malloc( sizeof(JoyStick_DeviceData) ); - if (!pNewJoystick) { - return DIENUM_CONTINUE; /* better luck next time? */ - } - - SDL_zerop(pNewJoystick); - pNewJoystick->joystickname = WIN_StringToUTF8(pdidInstance->tszProductName); - if (!pNewJoystick->joystickname) { - SDL_free(pNewJoystick); - return DIENUM_CONTINUE; /* better luck next time? */ - } - - SDL_memcpy(&(pNewJoystick->dxdevice), pdidInstance, - sizeof(DIDEVICEINSTANCE)); - - pNewJoystick->XInputUserId = INVALID_XINPUT_USERID; - pNewJoystick->send_add_event = 1; - pNewJoystick->nInstanceID = ++s_nInstanceID; - SDL_memcpy( &pNewJoystick->guid, &pdidInstance->guidProduct, sizeof(pNewJoystick->guid) ); - pNewJoystick->pNext = SYS_Joystick; - SYS_Joystick = pNewJoystick; - - s_bDeviceAdded = SDL_TRUE; - - return DIENUM_CONTINUE; /* get next device, please */ -} - -static void -AddXInputDevice(const Uint8 userid, JoyStick_DeviceData **pContext) -{ - char name[32]; - JoyStick_DeviceData *pPrevJoystick = NULL; - JoyStick_DeviceData *pNewJoystick = *pContext; - - while (pNewJoystick) { - if ((pNewJoystick->bXInputDevice) && (pNewJoystick->XInputUserId == userid)) { - /* if we are replacing the front of the list then update it */ - if (pNewJoystick == *pContext) { - *pContext = pNewJoystick->pNext; - } else if (pPrevJoystick) { - pPrevJoystick->pNext = pNewJoystick->pNext; - } - - pNewJoystick->pNext = SYS_Joystick; - SYS_Joystick = pNewJoystick; - return; /* already in the list. */ - } - - pPrevJoystick = pNewJoystick; - pNewJoystick = pNewJoystick->pNext; - } - - pNewJoystick = (JoyStick_DeviceData *) SDL_malloc(sizeof (JoyStick_DeviceData)); - if (!pNewJoystick) { - return; /* better luck next time? */ - } - SDL_zerop(pNewJoystick); - - SDL_snprintf(name, sizeof (name), "XInput Controller #%u", ((unsigned int) userid) + 1); - pNewJoystick->joystickname = SDL_strdup(name); - if (!pNewJoystick->joystickname) { - SDL_free(pNewJoystick); - return; /* better luck next time? */ - } - - pNewJoystick->bXInputDevice = SDL_TRUE; - pNewJoystick->XInputUserId = userid; - pNewJoystick->send_add_event = 1; - pNewJoystick->nInstanceID = ++s_nInstanceID; - pNewJoystick->pNext = SYS_Joystick; - SYS_Joystick = pNewJoystick; - - s_bDeviceAdded = SDL_TRUE; -} - -static void -EnumXInputDevices(JoyStick_DeviceData **pContext) -{ - if (s_bXInputEnabled) { - int iuserid; - /* iterate in reverse, so these are in the final list in ascending numeric order. */ - for (iuserid = SDL_XINPUT_MAX_DEVICES-1; iuserid >= 0; iuserid--) { - const Uint8 userid = (Uint8) iuserid; - XINPUT_CAPABILITIES capabilities; - if (XINPUTGETCAPABILITIES(userid, XINPUT_FLAG_GAMEPAD, &capabilities) == ERROR_SUCCESS) { - /* Current version of XInput mistakenly returns 0 as the Type. Ignore it and ensure the subtype is a gamepad. */ - /* !!! FIXME: we might want to support steering wheels or guitars or whatever later. */ - if (capabilities.SubType == XINPUT_DEVSUBTYPE_GAMEPAD) { - AddXInputDevice(userid, pContext); - } - } - } - } -} - - -/* detect any new joysticks being inserted into the system */ -void SDL_SYS_JoystickDetect() -{ - JoyStick_DeviceData *pCurList = NULL; - /* only enum the devices if the joystick thread told us something changed */ - if ( s_bDeviceAdded || s_bDeviceRemoved ) - { - SDL_LockMutex( s_mutexJoyStickEnum ); - - s_bDeviceAdded = SDL_FALSE; - s_bDeviceRemoved = SDL_FALSE; - - pCurList = SYS_Joystick; - SYS_Joystick = NULL; - - /* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */ - IDirectInput8_EnumDevices(dinput, - DI8DEVCLASS_GAMECTRL, - EnumJoysticksCallback, - &pCurList, DIEDFL_ATTACHEDONLY); - - SDL_free(SDL_RawDevList); /* in case we used this in DirectInput enumerator. */ - SDL_RawDevList = NULL; - SDL_RawDevListCount = 0; - - /* Look for XInput devices. Do this last, so they're first in the final list. */ - EnumXInputDevices(&pCurList); - - SDL_UnlockMutex( s_mutexJoyStickEnum ); - } - - if ( pCurList ) - { - while ( pCurList ) - { - JoyStick_DeviceData *pListNext = NULL; - -#if SDL_HAPTIC_DINPUT - if (pCurList->bXInputDevice) { - XInputHaptic_MaybeRemoveDevice(pCurList->XInputUserId); - } else { - DirectInputHaptic_MaybeRemoveDevice(&pCurList->dxdevice); - } -#endif - -#if !SDL_EVENTS_DISABLED - { - SDL_Event event; - event.type = SDL_JOYDEVICEREMOVED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = pCurList->nInstanceID; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } - } -#endif /* !SDL_EVENTS_DISABLED */ - - pListNext = pCurList->pNext; - SDL_free(pCurList->joystickname); - SDL_free(pCurList); - pCurList = pListNext; - } - - } - - if ( s_bDeviceAdded ) - { - JoyStick_DeviceData *pNewJoystick; - int device_index = 0; - s_bDeviceAdded = SDL_FALSE; - pNewJoystick = SYS_Joystick; - while ( pNewJoystick ) - { - if ( pNewJoystick->send_add_event ) - { -#if SDL_HAPTIC_DINPUT - if (pNewJoystick->bXInputDevice) { - XInputHaptic_MaybeAddDevice(pNewJoystick->XInputUserId); - } else { - DirectInputHaptic_MaybeAddDevice(&pNewJoystick->dxdevice); - } -#endif - -#if !SDL_EVENTS_DISABLED - { - SDL_Event event; - event.type = SDL_JOYDEVICEADDED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = device_index; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } - } -#endif /* !SDL_EVENTS_DISABLED */ - pNewJoystick->send_add_event = 0; - } - device_index++; - pNewJoystick = pNewJoystick->pNext; - } - } -} - -/* we need to poll if we have pending hotplug device changes or connected devices */ -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - /* we have a new device or one was pulled, we need to think this frame please */ - if ( s_bDeviceAdded || s_bDeviceRemoved ) - return SDL_TRUE; - - return SDL_FALSE; -} - -/* Function to get the device-dependent name of a joystick */ -const char * -SDL_SYS_JoystickNameForDeviceIndex(int device_index) -{ - JoyStick_DeviceData *device = SYS_Joystick; - - for (; device_index > 0; device_index--) - device = device->pNext; - - return device->joystickname; -} - -/* Function to perform the mapping between current device instance and this joysticks instance id */ -SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) -{ - JoyStick_DeviceData *device = SYS_Joystick; - int index; - - for (index = device_index; index > 0; index--) - device = device->pNext; - - return device->nInstanceID; -} - -/* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. - This should fill the nbuttons and naxes fields of the joystick structure. - It returns 0, or -1 if there is an error. - */ -int -SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) -{ - HRESULT result; - JoyStick_DeviceData *joystickdevice = SYS_Joystick; - - for (; device_index > 0; device_index--) - joystickdevice = joystickdevice->pNext; - - /* allocate memory for system specific hardware data */ - joystick->instance_id = joystickdevice->nInstanceID; - joystick->closed = 0; - joystick->hwdata = - (struct joystick_hwdata *) SDL_malloc(sizeof(struct joystick_hwdata)); - if (joystick->hwdata == NULL) { - return SDL_OutOfMemory(); - } - SDL_zerop(joystick->hwdata); - - if (joystickdevice->bXInputDevice) { - const SDL_bool bIs14OrLater = (SDL_XInputVersion >= ((1<<16)|4)); - const Uint8 userId = joystickdevice->XInputUserId; - XINPUT_CAPABILITIES capabilities; - - SDL_assert(s_bXInputEnabled); - SDL_assert(XINPUTGETCAPABILITIES); - SDL_assert(userId >= 0); - SDL_assert(userId < SDL_XINPUT_MAX_DEVICES); - - joystick->hwdata->bXInputDevice = SDL_TRUE; - - if (XINPUTGETCAPABILITIES(userId, XINPUT_FLAG_GAMEPAD, &capabilities) != ERROR_SUCCESS) { - SDL_free(joystick->hwdata); - joystick->hwdata = NULL; - return SDL_SetError("Failed to obtain XInput device capabilities. Device disconnected?"); - } else { - /* Current version of XInput mistakenly returns 0 as the Type. Ignore it and ensure the subtype is a gamepad. */ - SDL_assert(capabilities.SubType == XINPUT_DEVSUBTYPE_GAMEPAD); - if ((!bIs14OrLater) || (capabilities.Flags & XINPUT_CAPS_FFB_SUPPORTED)) { - joystick->hwdata->bXInputHaptic = SDL_TRUE; - } - joystick->hwdata->userid = userId; - - /* The XInput API has a hard coded button/axis mapping, so we just match it */ - joystick->naxes = 6; - joystick->nbuttons = 15; - joystick->nballs = 0; - joystick->nhats = 0; - } - } else { /* use DirectInput, not XInput. */ - LPDIRECTINPUTDEVICE8 device; - DIPROPDWORD dipdw; - - joystick->hwdata->buffered = 1; - joystick->hwdata->removed = 0; - joystick->hwdata->Capabilities.dwSize = sizeof(DIDEVCAPS); - joystick->hwdata->guid = joystickdevice->guid; - - SDL_zero(dipdw); - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - - result = - IDirectInput8_CreateDevice(dinput, - &(joystickdevice->dxdevice.guidInstance), &device, NULL); - if (FAILED(result)) { - return SetDIerror("IDirectInput::CreateDevice", result); - } - - /* Now get the IDirectInputDevice8 interface, instead. */ - result = IDirectInputDevice8_QueryInterface(device, - &IID_IDirectInputDevice8, - (LPVOID *) & joystick-> - hwdata->InputDevice); - /* We are done with this object. Use the stored one from now on. */ - IDirectInputDevice8_Release(device); - - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::QueryInterface", result); - } - - /* Acquire shared access. Exclusive access is required for forces, - * though. */ - result = - IDirectInputDevice8_SetCooperativeLevel(joystick->hwdata-> - InputDevice, SDL_HelperWindow, - DISCL_NONEXCLUSIVE | - DISCL_BACKGROUND); - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::SetCooperativeLevel", result); - } - - /* Use the extended data structure: DIJOYSTATE2. */ - result = - IDirectInputDevice8_SetDataFormat(joystick->hwdata->InputDevice, - &c_dfDIJoystick2); - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::SetDataFormat", result); - } - - /* Get device capabilities */ - result = - IDirectInputDevice8_GetCapabilities(joystick->hwdata->InputDevice, - &joystick->hwdata->Capabilities); - - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::GetCapabilities", result); - } - - /* Force capable? */ - if (joystick->hwdata->Capabilities.dwFlags & DIDC_FORCEFEEDBACK) { - - result = IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); - - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::Acquire", result); - } - - /* reset all accuators. */ - result = - IDirectInputDevice8_SendForceFeedbackCommand(joystick->hwdata-> - InputDevice, - DISFFC_RESET); - - /* Not necessarily supported, ignore if not supported. - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::SendForceFeedbackCommand", result); - } - */ - - result = IDirectInputDevice8_Unacquire(joystick->hwdata->InputDevice); - - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::Unacquire", result); - } - - /* Turn on auto-centering for a ForceFeedback device (until told - * otherwise). */ - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = DIPROPAUTOCENTER_ON; - - result = - IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, - DIPROP_AUTOCENTER, &dipdw.diph); - - /* Not necessarily supported, ignore if not supported. - if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::SetProperty", result); - } - */ - } - - /* What buttons and axes does it have? */ - IDirectInputDevice8_EnumObjects(joystick->hwdata->InputDevice, - EnumDevObjectsCallback, joystick, - DIDFT_BUTTON | DIDFT_AXIS | DIDFT_POV); - - /* Reorder the input objects. Some devices do not report the X axis as - * the first axis, for example. */ - SortDevObjects(joystick); - - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = INPUT_QSIZE; - - /* Set the buffer size */ - result = - IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, - DIPROP_BUFFERSIZE, &dipdw.diph); - - if (result == DI_POLLEDDEVICE) { - /* This device doesn't support buffering, so we're forced - * to use less reliable polling. */ - joystick->hwdata->buffered = 0; - } else if (FAILED(result)) { - return SetDIerror("IDirectInputDevice8::SetProperty", result); - } - } - return (0); -} - -/* return true if this joystick is plugged in right now */ -SDL_bool SDL_SYS_JoystickAttached( SDL_Joystick * joystick ) -{ - return joystick->closed == 0 && joystick->hwdata->removed == 0; -} - - -/* Sort using the data offset into the DInput struct. - * This gives a reasonable ordering for the inputs. */ -static int -SortDevFunc(const void *a, const void *b) -{ - const input_t *inputA = (const input_t*)a; - const input_t *inputB = (const input_t*)b; - - if (inputA->ofs < inputB->ofs) - return -1; - if (inputA->ofs > inputB->ofs) - return 1; - return 0; -} - -/* Sort the input objects and recalculate the indices for each input. */ -static void -SortDevObjects(SDL_Joystick *joystick) -{ - input_t *inputs = joystick->hwdata->Inputs; - int nButtons = 0; - int nHats = 0; - int nAxis = 0; - int n; - - SDL_qsort(inputs, joystick->hwdata->NumInputs, sizeof(input_t), SortDevFunc); - - for (n = 0; n < joystick->hwdata->NumInputs; n++) - { - switch (inputs[n].type) - { - case BUTTON: - inputs[n].num = nButtons; - nButtons++; - break; - - case HAT: - inputs[n].num = nHats; - nHats++; - break; - - case AXIS: - inputs[n].num = nAxis; - nAxis++; - break; - } - } -} - -static BOOL CALLBACK -EnumDevObjectsCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID pvRef) -{ - SDL_Joystick *joystick = (SDL_Joystick *) pvRef; - HRESULT result; - input_t *in = &joystick->hwdata->Inputs[joystick->hwdata->NumInputs]; - - if (dev->dwType & DIDFT_BUTTON) { - in->type = BUTTON; - in->num = joystick->nbuttons; - in->ofs = DIJOFS_BUTTON( in->num ); - joystick->nbuttons++; - } else if (dev->dwType & DIDFT_POV) { - in->type = HAT; - in->num = joystick->nhats; - in->ofs = DIJOFS_POV( in->num ); - joystick->nhats++; - } else if (dev->dwType & DIDFT_AXIS) { - DIPROPRANGE diprg; - DIPROPDWORD dilong; - - in->type = AXIS; - in->num = joystick->naxes; - /* work our the axis this guy maps too, thanks for the code icculus! */ - if ( !SDL_memcmp( &dev->guidType, &GUID_XAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_X; - else if ( !SDL_memcmp( &dev->guidType, &GUID_YAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_Y; - else if ( !SDL_memcmp( &dev->guidType, &GUID_ZAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_Z; - else if ( !SDL_memcmp( &dev->guidType, &GUID_RxAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_RX; - else if ( !SDL_memcmp( &dev->guidType, &GUID_RyAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_RY; - else if ( !SDL_memcmp( &dev->guidType, &GUID_RzAxis, sizeof(dev->guidType) ) ) - in->ofs = DIJOFS_RZ; - else if ( !SDL_memcmp( &dev->guidType, &GUID_Slider, sizeof(dev->guidType) ) ) - { - in->ofs = DIJOFS_SLIDER( joystick->hwdata->NumSliders ); - ++joystick->hwdata->NumSliders; - } - else - { - return DIENUM_CONTINUE; /* not an axis we can grok */ - } - - diprg.diph.dwSize = sizeof(diprg); - diprg.diph.dwHeaderSize = sizeof(diprg.diph); - diprg.diph.dwObj = dev->dwType; - diprg.diph.dwHow = DIPH_BYID; - diprg.lMin = AXIS_MIN; - diprg.lMax = AXIS_MAX; - - result = - IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, - DIPROP_RANGE, &diprg.diph); - if (FAILED(result)) { - return DIENUM_CONTINUE; /* don't use this axis */ - } - - /* Set dead zone to 0. */ - dilong.diph.dwSize = sizeof(dilong); - dilong.diph.dwHeaderSize = sizeof(dilong.diph); - dilong.diph.dwObj = dev->dwType; - dilong.diph.dwHow = DIPH_BYID; - dilong.dwData = 0; - result = - IDirectInputDevice8_SetProperty(joystick->hwdata->InputDevice, - DIPROP_DEADZONE, &dilong.diph); - if (FAILED(result)) { - return DIENUM_CONTINUE; /* don't use this axis */ - } - - joystick->naxes++; - } else { - /* not supported at this time */ - return DIENUM_CONTINUE; - } - - joystick->hwdata->NumInputs++; - - if (joystick->hwdata->NumInputs == MAX_INPUTS) { - return DIENUM_STOP; /* too many */ - } - - return DIENUM_CONTINUE; -} - -/* Function to update the state of a joystick - called as a device poll. - * This function shouldn't update the joystick structure directly, - * but instead should call SDL_PrivateJoystick*() to deliver events - * and update joystick device state. - */ -void -SDL_SYS_JoystickUpdate_Polled(SDL_Joystick * joystick) -{ - DIJOYSTATE2 state; - HRESULT result; - int i; - - result = - IDirectInputDevice8_GetDeviceState(joystick->hwdata->InputDevice, - sizeof(DIJOYSTATE2), &state); - if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { - IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); - result = - IDirectInputDevice8_GetDeviceState(joystick->hwdata->InputDevice, - sizeof(DIJOYSTATE2), &state); - } - - if ( result != DI_OK ) - { - joystick->hwdata->send_remove_event = 1; - joystick->hwdata->removed = 1; - return; - } - - /* Set each known axis, button and POV. */ - for (i = 0; i < joystick->hwdata->NumInputs; ++i) { - const input_t *in = &joystick->hwdata->Inputs[i]; - - switch (in->type) { - case AXIS: - switch (in->ofs) { - case DIJOFS_X: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lX); - break; - case DIJOFS_Y: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lY); - break; - case DIJOFS_Z: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lZ); - break; - case DIJOFS_RX: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lRx); - break; - case DIJOFS_RY: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lRy); - break; - case DIJOFS_RZ: - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.lRz); - break; - case DIJOFS_SLIDER(0): - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.rglSlider[0]); - break; - case DIJOFS_SLIDER(1): - SDL_PrivateJoystickAxis_Int(joystick, in->num, - (Sint16) state.rglSlider[1]); - break; - } - - break; - - case BUTTON: - SDL_PrivateJoystickButton_Int(joystick, in->num, - (Uint8) (state. - rgbButtons[in->ofs - - DIJOFS_BUTTON0] - ? SDL_PRESSED : - SDL_RELEASED)); - break; - case HAT: - { - Uint8 pos = TranslatePOV(state.rgdwPOV[in->ofs - - DIJOFS_POV(0)]); - SDL_PrivateJoystickHat_Int(joystick, in->num, pos); - break; - } - } - } -} - -void -SDL_SYS_JoystickUpdate_Buffered(SDL_Joystick * joystick) -{ - int i; - HRESULT result; - DWORD numevents; - DIDEVICEOBJECTDATA evtbuf[INPUT_QSIZE]; - - numevents = INPUT_QSIZE; - result = - IDirectInputDevice8_GetDeviceData(joystick->hwdata->InputDevice, - sizeof(DIDEVICEOBJECTDATA), evtbuf, - &numevents, 0); - if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { - IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); - result = - IDirectInputDevice8_GetDeviceData(joystick->hwdata->InputDevice, - sizeof(DIDEVICEOBJECTDATA), - evtbuf, &numevents, 0); - } - - /* Handle the events or punt */ - if (FAILED(result)) - { - joystick->hwdata->send_remove_event = 1; - joystick->hwdata->removed = 1; - return; - } - - for (i = 0; i < (int) numevents; ++i) { - int j; - - for (j = 0; j < joystick->hwdata->NumInputs; ++j) { - const input_t *in = &joystick->hwdata->Inputs[j]; - - if (evtbuf[i].dwOfs != in->ofs) - continue; - - switch (in->type) { - case AXIS: - SDL_PrivateJoystickAxis(joystick, in->num, - (Sint16) evtbuf[i].dwData); - break; - case BUTTON: - SDL_PrivateJoystickButton(joystick, in->num, - (Uint8) (evtbuf[i]. - dwData ? SDL_PRESSED : - SDL_RELEASED)); - break; - case HAT: - { - Uint8 pos = TranslatePOV(evtbuf[i].dwData); - SDL_PrivateJoystickHat(joystick, in->num, pos); - } - } - } - } -} - - -/* Function to return > 0 if a bit array of buttons differs after applying a mask -*/ -int ButtonChanged( int ButtonsNow, int ButtonsPrev, int ButtonMask ) -{ - return ( ButtonsNow & ButtonMask ) != ( ButtonsPrev & ButtonMask ); -} - -/* Function to update the state of a XInput style joystick. -*/ -void -SDL_SYS_JoystickUpdate_XInput(SDL_Joystick * joystick) -{ - HRESULT result; - - if ( !XINPUTGETSTATE ) - return; - - result = XINPUTGETSTATE( joystick->hwdata->userid, &joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot] ); - if ( result == ERROR_DEVICE_NOT_CONNECTED ) - { - joystick->hwdata->send_remove_event = 1; - joystick->hwdata->removed = 1; - return; - } - - /* only fire events if the data changed from last time */ - if ( joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot].dwPacketNumber != 0 - && joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot].dwPacketNumber != joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot^1].dwPacketNumber ) - { - XINPUT_STATE_EX *pXInputState = &joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot]; - XINPUT_STATE_EX *pXInputStatePrev = &joystick->hwdata->XInputState[joystick->hwdata->currentXInputSlot ^ 1]; - - /* !!! FIXME: why isn't this just using SDL_PrivateJoystickAxis_Int()? */ - SDL_PrivateJoystickAxis( joystick, 0, (Sint16)pXInputState->Gamepad.sThumbLX ); - SDL_PrivateJoystickAxis( joystick, 1, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbLY)) ); - SDL_PrivateJoystickAxis( joystick, 2, (Sint16)pXInputState->Gamepad.sThumbRX ); - SDL_PrivateJoystickAxis( joystick, 3, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbRY)) ); - SDL_PrivateJoystickAxis( joystick, 4, (Sint16)(((int)pXInputState->Gamepad.bLeftTrigger*65535/255) - 32768)); - SDL_PrivateJoystickAxis( joystick, 5, (Sint16)(((int)pXInputState->Gamepad.bRightTrigger*65535/255) - 32768)); - - /* !!! FIXME: why isn't this just using SDL_PrivateJoystickButton_Int(), instead of keeping these two alternating state buffers? */ - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_UP ) ) - SDL_PrivateJoystickButton(joystick, 0, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_DOWN ) ) - SDL_PrivateJoystickButton(joystick, 1, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_LEFT ) ) - SDL_PrivateJoystickButton(joystick, 2, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_RIGHT ) ) - SDL_PrivateJoystickButton(joystick, 3, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_START ) ) - SDL_PrivateJoystickButton(joystick, 4, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_START ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_BACK ) ) - SDL_PrivateJoystickButton(joystick, 5, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_BACK ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_LEFT_THUMB ) ) - SDL_PrivateJoystickButton(joystick, 6, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_RIGHT_THUMB ) ) - SDL_PrivateJoystickButton(joystick, 7, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_LEFT_SHOULDER ) ) - SDL_PrivateJoystickButton(joystick, 8, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_RIGHT_SHOULDER ) ) - SDL_PrivateJoystickButton(joystick, 9, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_A ) ) - SDL_PrivateJoystickButton(joystick, 10, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_A ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_B ) ) - SDL_PrivateJoystickButton(joystick, 11, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_B ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_X ) ) - SDL_PrivateJoystickButton(joystick, 12, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_X ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_Y ) ) - SDL_PrivateJoystickButton(joystick, 13, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_Y ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, 0x400 ) ) - SDL_PrivateJoystickButton(joystick, 14, pXInputState->Gamepad.wButtons & 0x400 ? SDL_PRESSED : SDL_RELEASED ); /* 0x400 is the undocumented code for the guide button */ - - joystick->hwdata->currentXInputSlot ^= 1; - - } -} - - -static Uint8 -TranslatePOV(DWORD value) -{ - const int HAT_VALS[] = { - SDL_HAT_UP, - SDL_HAT_UP | SDL_HAT_RIGHT, - SDL_HAT_RIGHT, - SDL_HAT_DOWN | SDL_HAT_RIGHT, - SDL_HAT_DOWN, - SDL_HAT_DOWN | SDL_HAT_LEFT, - SDL_HAT_LEFT, - SDL_HAT_UP | SDL_HAT_LEFT - }; - - if (LOWORD(value) == 0xFFFF) - return SDL_HAT_CENTERED; - - /* Round the value up: */ - value += 4500 / 2; - value %= 36000; - value /= 4500; - - if (value >= 8) - return SDL_HAT_CENTERED; /* shouldn't happen */ - - return HAT_VALS[value]; -} - -/* SDL_PrivateJoystick* doesn't discard duplicate events, so we need to - * do it. */ -/* !!! FIXME: SDL_PrivateJoystickAxis _does_ discard duplicate events now. Ditch this code. */ -static int -SDL_PrivateJoystickAxis_Int(SDL_Joystick * joystick, Uint8 axis, Sint16 value) -{ - if (joystick->axes[axis] != value) - return SDL_PrivateJoystickAxis(joystick, axis, value); - return 0; -} - -static int -SDL_PrivateJoystickHat_Int(SDL_Joystick * joystick, Uint8 hat, Uint8 value) -{ - if (joystick->hats[hat] != value) - return SDL_PrivateJoystickHat(joystick, hat, value); - return 0; -} - -static int -SDL_PrivateJoystickButton_Int(SDL_Joystick * joystick, Uint8 button, - Uint8 state) -{ - if (joystick->buttons[button] != state) - return SDL_PrivateJoystickButton(joystick, button, state); - return 0; -} - -void -SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) -{ - HRESULT result; - - if ( joystick->closed || !joystick->hwdata ) - return; - - if (joystick->hwdata->bXInputDevice) - { - SDL_SYS_JoystickUpdate_XInput(joystick); - } - else - { - result = IDirectInputDevice8_Poll(joystick->hwdata->InputDevice); - if (result == DIERR_INPUTLOST || result == DIERR_NOTACQUIRED) { - IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice); - IDirectInputDevice8_Poll(joystick->hwdata->InputDevice); - } - - if (joystick->hwdata->buffered) - SDL_SYS_JoystickUpdate_Buffered(joystick); - else - SDL_SYS_JoystickUpdate_Polled(joystick); - } - - if ( joystick->hwdata->removed ) - { - joystick->closed = 1; - joystick->uncentered = 1; - } -} - -/* Function to close a joystick after use */ -void -SDL_SYS_JoystickClose(SDL_Joystick * joystick) -{ - if (!joystick->hwdata->bXInputDevice) { - IDirectInputDevice8_Unacquire(joystick->hwdata->InputDevice); - IDirectInputDevice8_Release(joystick->hwdata->InputDevice); - } - - /* free system specific hardware data */ - SDL_free(joystick->hwdata); - - joystick->closed = 1; -} - -/* Function to perform any system-specific joystick related cleanup */ -void -SDL_SYS_JoystickQuit(void) -{ - JoyStick_DeviceData *device = SYS_Joystick; - - while ( device ) - { - JoyStick_DeviceData *device_next = device->pNext; - SDL_free(device->joystickname); - SDL_free(device); - device = device_next; - } - SYS_Joystick = NULL; - - if ( s_threadJoystick ) - { - SDL_LockMutex( s_mutexJoyStickEnum ); - s_bJoystickThreadQuit = SDL_TRUE; - SDL_CondBroadcast( s_condJoystickThread ); /* signal the joystick thread to quit */ - SDL_UnlockMutex( s_mutexJoyStickEnum ); - SDL_WaitThread( s_threadJoystick, NULL ); /* wait for it to bugger off */ - - SDL_DestroyMutex( s_mutexJoyStickEnum ); - SDL_DestroyCond( s_condJoystickThread ); - s_condJoystickThread= NULL; - s_mutexJoyStickEnum = NULL; - s_threadJoystick = NULL; - } - - if (dinput != NULL) { - IDirectInput8_Release(dinput); - dinput = NULL; - } - - if (coinitialized) { - WIN_CoUninitialize(); - coinitialized = SDL_FALSE; - } - - if (s_bXInputEnabled) { - WIN_UnloadXInputDLL(); - } -} - -/* return the stable device guid for this device index */ -SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index ) -{ - JoyStick_DeviceData *device = SYS_Joystick; - int index; - - for (index = device_index; index > 0; index--) - device = device->pNext; - - return device->guid; -} - -SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) -{ - return joystick->hwdata->guid; -} - -/* return SDL_TRUE if this device is using XInput */ -SDL_bool SDL_SYS_IsXInputDeviceIndex(int device_index) -{ - JoyStick_DeviceData *device = SYS_Joystick; - int index; - - for (index = device_index; index > 0; index--) - device = device->pNext; - - return device->bXInputDevice; -} - -/* return SDL_TRUE if this device was opened with XInput */ -SDL_bool SDL_SYS_IsXInputJoystick(SDL_Joystick * joystick) -{ - return joystick->hwdata->bXInputDevice; -} - -#endif /* SDL_JOYSTICK_DINPUT */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick_c.h b/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick_c.h deleted file mode 100644 index 2808fed560..0000000000 --- a/Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick_c.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#ifndef SDL_JOYSTICK_DINPUT_H - -/* DirectInput joystick driver; written by Glenn Maynard, based on Andrei de - * A. Formiga's WINMM driver. - * - * Hats and sliders are completely untested; the app I'm writing this for mostly - * doesn't use them and I don't own any joysticks with them. - * - * We don't bother to use event notification here. It doesn't seem to work - * with polled devices, and it's fine to call IDirectInputDevice2_GetDeviceData and - * let it return 0 events. */ - -#include "../../core/windows/SDL_windows.h" - -#define DIRECTINPUT_VERSION 0x0800 /* Need version 7 for force feedback. Need version 8 so IDirectInput8_EnumDevices doesn't leak like a sieve... */ -#include -#define COBJMACROS -#include -#include -#include -#include -#include - - -#ifndef XUSER_MAX_COUNT -#define XUSER_MAX_COUNT 4 -#endif -#ifndef XUSER_INDEX_ANY -#define XUSER_INDEX_ANY 0x000000FF -#endif -#ifndef XINPUT_CAPS_FFB_SUPPORTED -#define XINPUT_CAPS_FFB_SUPPORTED 0x0001 -#endif - - -/* typedef's for XInput structs we use */ -typedef struct -{ - WORD wButtons; - BYTE bLeftTrigger; - BYTE bRightTrigger; - SHORT sThumbLX; - SHORT sThumbLY; - SHORT sThumbRX; - SHORT sThumbRY; - DWORD dwPaddingReserved; -} XINPUT_GAMEPAD_EX; - -typedef struct -{ - DWORD dwPacketNumber; - XINPUT_GAMEPAD_EX Gamepad; -} XINPUT_STATE_EX; - -/* Forward decl's for XInput API's we load dynamically and use if available */ -typedef DWORD (WINAPI *XInputGetState_t) - ( - DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ - XINPUT_STATE_EX* pState /* [out] Receives the current state */ - ); - -typedef DWORD (WINAPI *XInputSetState_t) - ( - DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ - XINPUT_VIBRATION* pVibration /* [in, out] The vibration information to send to the controller */ - ); - -typedef DWORD (WINAPI *XInputGetCapabilities_t) - ( - DWORD dwUserIndex, /* [in] Index of the gamer associated with the device */ - DWORD dwFlags, /* [in] Input flags that identify the device type */ - XINPUT_CAPABILITIES* pCapabilities /* [out] Receives the capabilities */ - ); - -extern int WIN_LoadXInputDLL(void); -extern void WIN_UnloadXInputDLL(void); - -extern XInputGetState_t SDL_XInputGetState; -extern XInputSetState_t SDL_XInputSetState; -extern XInputGetCapabilities_t SDL_XInputGetCapabilities; -extern DWORD SDL_XInputVersion; /* ((major << 16) & 0xFF00) | (minor & 0xFF) */ - -#define XINPUTGETSTATE SDL_XInputGetState -#define XINPUTSETSTATE SDL_XInputSetState -#define XINPUTGETCAPABILITIES SDL_XInputGetCapabilities -#define INVALID_XINPUT_USERID XUSER_INDEX_ANY -#define SDL_XINPUT_MAX_DEVICES XUSER_MAX_COUNT - -#define MAX_INPUTS 256 /* each joystick can have up to 256 inputs */ - - -/* local types */ -typedef enum Type -{ BUTTON, AXIS, HAT } Type; - -typedef struct input_t -{ - /* DirectInput offset for this input type: */ - DWORD ofs; - - /* Button, axis or hat: */ - Type type; - - /* SDL input offset: */ - Uint8 num; -} input_t; - -/* The private structure used to keep track of a joystick */ -struct joystick_hwdata -{ - LPDIRECTINPUTDEVICE8 InputDevice; - DIDEVCAPS Capabilities; - int buffered; - SDL_JoystickGUID guid; - - input_t Inputs[MAX_INPUTS]; - int NumInputs; - int NumSliders; - Uint8 removed; - Uint8 send_remove_event; - Uint8 bXInputDevice; /* 1 if this device supports using the xinput API rather than DirectInput */ - Uint8 bXInputHaptic; /* Supports force feedback via XInput. */ - Uint8 userid; /* XInput userid index for this joystick */ - Uint8 currentXInputSlot; /* the current position to write to in XInputState below, used so we can compare old and new values */ - XINPUT_STATE_EX XInputState[2]; -}; - -#endif /* SDL_JOYSTICK_DINPUT_H */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_mmjoystick.c b/Engine/lib/sdl/src/joystick/windows/SDL_mmjoystick.c index c28ed91b52..3746181811 100644 --- a/Engine/lib/sdl/src/joystick/windows/SDL_mmjoystick.c +++ b/Engine/lib/sdl/src/joystick/windows/SDL_mmjoystick.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -143,8 +143,7 @@ GetJoystickName(int index, const char *szRegKey) static int SDL_SYS_numjoysticks = 0; /* Function to scan the system for joysticks. - * This function should set SDL_numjoysticks to the number of available - * joysticks. Joystick 0 should be the system default joystick. + * Joystick 0 should be the system default joystick. * It should return 0, or -1 on an unrecoverable fatal error. */ int @@ -193,11 +192,6 @@ void SDL_SYS_JoystickDetect() { } -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - return SDL_FALSE; -} - /* Function to get the device-dependent name of a joystick */ const char * SDL_SYS_JoystickNameForDeviceIndex(int device_index) @@ -216,7 +210,7 @@ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) } /* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. + The joystick to open is specified by the device index. This should fill the nbuttons and naxes fields of the joystick structure. It returns 0, or -1 if there is an error. */ @@ -277,7 +271,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) return (0); } -/* Function to determine is this joystick is attached to the system right now */ +/* Function to determine if this joystick is attached to the system right now */ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) { return SDL_TRUE; @@ -389,9 +383,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) void SDL_SYS_JoystickClose(SDL_Joystick * joystick) { - /* free system specific hardware data */ SDL_free(joystick->hwdata); - joystick->hwdata = NULL; } /* Function to perform any system-specific joystick related cleanup */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick.c b/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick.c new file mode 100644 index 0000000000..7123c6151b --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick.c @@ -0,0 +1,569 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_JOYSTICK_DINPUT || SDL_JOYSTICK_XINPUT + +/* DirectInput joystick driver; written by Glenn Maynard, based on Andrei de + * A. Formiga's WINMM driver. + * + * Hats and sliders are completely untested; the app I'm writing this for mostly + * doesn't use them and I don't own any joysticks with them. + * + * We don't bother to use event notification here. It doesn't seem to work + * with polled devices, and it's fine to call IDirectInputDevice8_GetDeviceData and + * let it return 0 events. */ + +#include "SDL_error.h" +#include "SDL_assert.h" +#include "SDL_events.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_mutex.h" +#include "SDL_events.h" +#include "SDL_hints.h" +#include "SDL_joystick.h" +#include "../SDL_sysjoystick.h" +#if !SDL_EVENTS_DISABLED +#include "../../events/SDL_events_c.h" +#endif +#include "../../core/windows/SDL_windows.h" +#if !defined(__WINRT__) +#include +#endif + +#define INITGUID /* Only set here, if set twice will cause mingw32 to break. */ +#include "SDL_windowsjoystick_c.h" +#include "SDL_dinputjoystick_c.h" +#include "SDL_xinputjoystick_c.h" + +#include "../../haptic/windows/SDL_dinputhaptic_c.h" /* For haptic hot plugging */ +#include "../../haptic/windows/SDL_xinputhaptic_c.h" /* For haptic hot plugging */ + + +#ifndef DEVICE_NOTIFY_WINDOW_HANDLE +#define DEVICE_NOTIFY_WINDOW_HANDLE 0x00000000 +#endif + +/* local variables */ +static SDL_bool s_bDeviceAdded = SDL_FALSE; +static SDL_bool s_bDeviceRemoved = SDL_FALSE; +static SDL_JoystickID s_nInstanceID = -1; +static SDL_cond *s_condJoystickThread = NULL; +static SDL_mutex *s_mutexJoyStickEnum = NULL; +static SDL_Thread *s_threadJoystick = NULL; +static SDL_bool s_bJoystickThreadQuit = SDL_FALSE; + +JoyStick_DeviceData *SYS_Joystick; /* array to hold joystick ID values */ + +static SDL_bool s_bWindowsDeviceChanged = SDL_FALSE; + +#ifdef __WINRT__ + +typedef struct +{ + int unused; +} SDL_DeviceNotificationData; + +static void +SDL_CleanupDeviceNotification(SDL_DeviceNotificationData *data) +{ +} + +static int +SDL_CreateDeviceNotification(SDL_DeviceNotificationData *data) +{ + return 0; +} + +static void +SDL_CheckDeviceNotification(SDL_DeviceNotificationData *data) +{ +} + +#else /* !__WINRT__ */ + +typedef struct +{ + HRESULT coinitialized; + WNDCLASSEX wincl; + HWND messageWindow; + HDEVNOTIFY hNotify; +} SDL_DeviceNotificationData; + + +/* windowproc for our joystick detect thread message only window, to detect any USB device addition/removal */ +static LRESULT CALLBACK +SDL_PrivateJoystickDetectProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) { + case WM_DEVICECHANGE: + switch (wParam) { + case DBT_DEVICEARRIVAL: + if (((DEV_BROADCAST_HDR*)lParam)->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { + s_bWindowsDeviceChanged = SDL_TRUE; + } + break; + case DBT_DEVICEREMOVECOMPLETE: + if (((DEV_BROADCAST_HDR*)lParam)->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { + s_bWindowsDeviceChanged = SDL_TRUE; + } + break; + } + return 0; + } + + return DefWindowProc (hwnd, message, wParam, lParam); +} + +static void +SDL_CleanupDeviceNotification(SDL_DeviceNotificationData *data) +{ + if (data->hNotify) + UnregisterDeviceNotification(data->hNotify); + + if (data->messageWindow) + DestroyWindow(data->messageWindow); + + UnregisterClass(data->wincl.lpszClassName, data->wincl.hInstance); + + if (data->coinitialized == S_OK) { + WIN_CoUninitialize(); + } +} + +static int +SDL_CreateDeviceNotification(SDL_DeviceNotificationData *data) +{ + DEV_BROADCAST_DEVICEINTERFACE dbh; + GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; + + SDL_zerop(data); + + data->coinitialized = WIN_CoInitialize(); + + data->wincl.hInstance = GetModuleHandle(NULL); + data->wincl.lpszClassName = L"Message"; + data->wincl.lpfnWndProc = SDL_PrivateJoystickDetectProc; /* This function is called by windows */ + data->wincl.cbSize = sizeof (WNDCLASSEX); + + if (!RegisterClassEx(&data->wincl)) { + WIN_SetError("Failed to create register class for joystick autodetect"); + SDL_CleanupDeviceNotification(data); + return -1; + } + + data->messageWindow = (HWND)CreateWindowEx(0, L"Message", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, NULL, NULL, NULL); + if (!data->messageWindow) { + WIN_SetError("Failed to create message window for joystick autodetect"); + SDL_CleanupDeviceNotification(data); + return -1; + } + + SDL_zero(dbh); + dbh.dbcc_size = sizeof(dbh); + dbh.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; + dbh.dbcc_classguid = GUID_DEVINTERFACE_HID; + + data->hNotify = RegisterDeviceNotification(data->messageWindow, &dbh, DEVICE_NOTIFY_WINDOW_HANDLE); + if (!data->hNotify) { + WIN_SetError("Failed to create notify device for joystick autodetect"); + SDL_CleanupDeviceNotification(data); + return -1; + } + return 0; +} + +static void +SDL_CheckDeviceNotification(SDL_DeviceNotificationData *data) +{ + MSG msg; + + if (!data->messageWindow) { + return; + } + + while (PeekMessage(&msg, data->messageWindow, 0, 0, PM_NOREMOVE)) { + if (GetMessage(&msg, data->messageWindow, 0, 0) != 0) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } +} + +#endif /* __WINRT__ */ + +/* Function/thread to scan the system for joysticks. */ +static int +SDL_JoystickThread(void *_data) +{ + SDL_DeviceNotificationData notification_data; + +#if SDL_JOYSTICK_XINPUT + SDL_bool bOpenedXInputDevices[XUSER_MAX_COUNT]; + SDL_zero(bOpenedXInputDevices); +#endif + + if (SDL_CreateDeviceNotification(¬ification_data) < 0) { + return -1; + } + + SDL_LockMutex(s_mutexJoyStickEnum); + while (s_bJoystickThreadQuit == SDL_FALSE) { + SDL_bool bXInputChanged = SDL_FALSE; + + SDL_CondWaitTimeout(s_condJoystickThread, s_mutexJoyStickEnum, 300); + + SDL_CheckDeviceNotification(¬ification_data); + +#if SDL_JOYSTICK_XINPUT + if (SDL_XINPUT_Enabled() && XINPUTGETCAPABILITIES) { + /* scan for any change in XInput devices */ + Uint8 userId; + for (userId = 0; userId < XUSER_MAX_COUNT; userId++) { + XINPUT_CAPABILITIES capabilities; + const DWORD result = XINPUTGETCAPABILITIES(userId, XINPUT_FLAG_GAMEPAD, &capabilities); + const SDL_bool available = (result == ERROR_SUCCESS); + if (bOpenedXInputDevices[userId] != available) { + bXInputChanged = SDL_TRUE; + bOpenedXInputDevices[userId] = available; + } + } + } +#endif /* SDL_JOYSTICK_XINPUT */ + + if (s_bWindowsDeviceChanged || bXInputChanged) { + SDL_UnlockMutex(s_mutexJoyStickEnum); /* let main thread go while we SDL_Delay(). */ + SDL_Delay(300); /* wait for direct input to find out about this device */ + SDL_LockMutex(s_mutexJoyStickEnum); + + s_bDeviceRemoved = SDL_TRUE; + s_bDeviceAdded = SDL_TRUE; + s_bWindowsDeviceChanged = SDL_FALSE; + } + } + SDL_UnlockMutex(s_mutexJoyStickEnum); + + SDL_CleanupDeviceNotification(¬ification_data); + + return 1; +} + +void SDL_SYS_AddJoystickDevice(JoyStick_DeviceData *device) +{ + device->send_add_event = SDL_TRUE; + device->nInstanceID = ++s_nInstanceID; + device->pNext = SYS_Joystick; + SYS_Joystick = device; + + s_bDeviceAdded = SDL_TRUE; +} + +/* Function to scan the system for joysticks. + * Joystick 0 should be the system default joystick. + * It should return 0, or -1 on an unrecoverable fatal error. + */ +int +SDL_SYS_JoystickInit(void) +{ + if (SDL_DINPUT_JoystickInit() < 0) { + SDL_SYS_JoystickQuit(); + return -1; + } + + if (SDL_XINPUT_JoystickInit() < 0) { + SDL_SYS_JoystickQuit(); + return -1; + } + + s_mutexJoyStickEnum = SDL_CreateMutex(); + s_condJoystickThread = SDL_CreateCond(); + s_bDeviceAdded = SDL_TRUE; /* force a scan of the system for joysticks this first time */ + + SDL_SYS_JoystickDetect(); + + if (!s_threadJoystick) { + s_bJoystickThreadQuit = SDL_FALSE; + /* spin up the thread to detect hotplug of devices */ +#if defined(__WIN32__) && !defined(HAVE_LIBC) +#undef SDL_CreateThread +#if SDL_DYNAMIC_API + s_threadJoystick= SDL_CreateThread_REAL(SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL); +#else + s_threadJoystick= SDL_CreateThread(SDL_JoystickThread, "SDL_joystick", NULL, NULL, NULL); +#endif +#else + s_threadJoystick = SDL_CreateThread(SDL_JoystickThread, "SDL_joystick", NULL); +#endif + } + return SDL_SYS_NumJoysticks(); +} + +/* return the number of joysticks that are connected right now */ +int +SDL_SYS_NumJoysticks() +{ + int nJoysticks = 0; + JoyStick_DeviceData *device = SYS_Joystick; + while (device) { + nJoysticks++; + device = device->pNext; + } + + return nJoysticks; +} + +/* detect any new joysticks being inserted into the system */ +void +SDL_SYS_JoystickDetect() +{ + JoyStick_DeviceData *pCurList = NULL; +#if !SDL_EVENTS_DISABLED + SDL_Event event; +#endif + + /* only enum the devices if the joystick thread told us something changed */ + if (!s_bDeviceAdded && !s_bDeviceRemoved) { + return; /* thread hasn't signaled, nothing to do right now. */ + } + + SDL_LockMutex(s_mutexJoyStickEnum); + + s_bDeviceAdded = SDL_FALSE; + s_bDeviceRemoved = SDL_FALSE; + + pCurList = SYS_Joystick; + SYS_Joystick = NULL; + + /* Look for DirectInput joysticks, wheels, head trackers, gamepads, etc.. */ + SDL_DINPUT_JoystickDetect(&pCurList); + + /* Look for XInput devices. Do this last, so they're first in the final list. */ + SDL_XINPUT_JoystickDetect(&pCurList); + + SDL_UnlockMutex(s_mutexJoyStickEnum); + + while (pCurList) { + JoyStick_DeviceData *pListNext = NULL; + + if (pCurList->bXInputDevice) { + SDL_XINPUT_MaybeRemoveDevice(pCurList->XInputUserId); + } else { + SDL_DINPUT_MaybeRemoveDevice(&pCurList->dxdevice); + } + +#if !SDL_EVENTS_DISABLED + SDL_zero(event); + event.type = SDL_JOYDEVICEREMOVED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = pCurList->nInstanceID; + if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ + + pListNext = pCurList->pNext; + SDL_free(pCurList->joystickname); + SDL_free(pCurList); + pCurList = pListNext; + } + + if (s_bDeviceAdded) { + JoyStick_DeviceData *pNewJoystick; + int device_index = 0; + s_bDeviceAdded = SDL_FALSE; + pNewJoystick = SYS_Joystick; + while (pNewJoystick) { + if (pNewJoystick->send_add_event) { + if (pNewJoystick->bXInputDevice) { + SDL_XINPUT_MaybeAddDevice(pNewJoystick->XInputUserId); + } else { + SDL_DINPUT_MaybeAddDevice(&pNewJoystick->dxdevice); + } + +#if !SDL_EVENTS_DISABLED + SDL_zero(event); + event.type = SDL_JOYDEVICEADDED; + + if (SDL_GetEventState(event.type) == SDL_ENABLE) { + event.jdevice.which = device_index; + if ((!SDL_EventOK) || (*SDL_EventOK) (SDL_EventOKParam, &event)) { + SDL_PushEvent(&event); + } + } +#endif /* !SDL_EVENTS_DISABLED */ + pNewJoystick->send_add_event = SDL_FALSE; + } + device_index++; + pNewJoystick = pNewJoystick->pNext; + } + } +} + +/* Function to get the device-dependent name of a joystick */ +const char * +SDL_SYS_JoystickNameForDeviceIndex(int device_index) +{ + JoyStick_DeviceData *device = SYS_Joystick; + + for (; device_index > 0; device_index--) + device = device->pNext; + + return device->joystickname; +} + +/* Function to perform the mapping between current device instance and this joysticks instance id */ +SDL_JoystickID +SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) +{ + JoyStick_DeviceData *device = SYS_Joystick; + int index; + + for (index = device_index; index > 0; index--) + device = device->pNext; + + return device->nInstanceID; +} + +/* Function to open a joystick for use. + The joystick to open is specified by the device index. + This should fill the nbuttons and naxes fields of the joystick structure. + It returns 0, or -1 if there is an error. + */ +int +SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) +{ + JoyStick_DeviceData *joystickdevice = SYS_Joystick; + + for (; device_index > 0; device_index--) + joystickdevice = joystickdevice->pNext; + + /* allocate memory for system specific hardware data */ + joystick->instance_id = joystickdevice->nInstanceID; + joystick->hwdata = + (struct joystick_hwdata *) SDL_malloc(sizeof(struct joystick_hwdata)); + if (joystick->hwdata == NULL) { + return SDL_OutOfMemory(); + } + SDL_zerop(joystick->hwdata); + joystick->hwdata->guid = joystickdevice->guid; + + if (joystickdevice->bXInputDevice) { + return SDL_XINPUT_JoystickOpen(joystick, joystickdevice); + } else { + return SDL_DINPUT_JoystickOpen(joystick, joystickdevice); + } +} + +/* return true if this joystick is plugged in right now */ +SDL_bool +SDL_SYS_JoystickAttached(SDL_Joystick * joystick) +{ + return joystick->hwdata && !joystick->hwdata->removed; +} + +void +SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) +{ + if (!joystick->hwdata || joystick->hwdata->removed) { + return; + } + + if (joystick->hwdata->bXInputDevice) { + SDL_XINPUT_JoystickUpdate(joystick); + } else { + SDL_DINPUT_JoystickUpdate(joystick); + } + + if (joystick->hwdata->removed) { + joystick->force_recentering = SDL_TRUE; + } +} + +/* Function to close a joystick after use */ +void +SDL_SYS_JoystickClose(SDL_Joystick * joystick) +{ + if (joystick->hwdata->bXInputDevice) { + SDL_XINPUT_JoystickClose(joystick); + } else { + SDL_DINPUT_JoystickClose(joystick); + } + + SDL_free(joystick->hwdata); +} + +/* Function to perform any system-specific joystick related cleanup */ +void +SDL_SYS_JoystickQuit(void) +{ + JoyStick_DeviceData *device = SYS_Joystick; + + while (device) { + JoyStick_DeviceData *device_next = device->pNext; + SDL_free(device->joystickname); + SDL_free(device); + device = device_next; + } + SYS_Joystick = NULL; + + if (s_threadJoystick) { + SDL_LockMutex(s_mutexJoyStickEnum); + s_bJoystickThreadQuit = SDL_TRUE; + SDL_CondBroadcast(s_condJoystickThread); /* signal the joystick thread to quit */ + SDL_UnlockMutex(s_mutexJoyStickEnum); + SDL_WaitThread(s_threadJoystick, NULL); /* wait for it to bugger off */ + + SDL_DestroyMutex(s_mutexJoyStickEnum); + SDL_DestroyCond(s_condJoystickThread); + s_condJoystickThread= NULL; + s_mutexJoyStickEnum = NULL; + s_threadJoystick = NULL; + } + + SDL_DINPUT_JoystickQuit(); + SDL_XINPUT_JoystickQuit(); +} + +/* return the stable device guid for this device index */ +SDL_JoystickGUID +SDL_SYS_JoystickGetDeviceGUID(int device_index) +{ + JoyStick_DeviceData *device = SYS_Joystick; + int index; + + for (index = device_index; index > 0; index--) + device = device->pNext; + + return device->guid; +} + +SDL_JoystickGUID +SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) +{ + return joystick->hwdata->guid; +} + +#endif /* SDL_JOYSTICK_DINPUT || SDL_JOYSTICK_XINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick_c.h b/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick_c.h new file mode 100644 index 0000000000..ab946b4f7e --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick_c.h @@ -0,0 +1,88 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "SDL_events.h" +#include "../SDL_sysjoystick.h" +#include "../../core/windows/SDL_windows.h" +#include "../../core/windows/SDL_directx.h" + +#define MAX_INPUTS 256 /* each joystick can have up to 256 inputs */ + +typedef struct JoyStick_DeviceData +{ + SDL_JoystickGUID guid; + char *joystickname; + Uint8 send_add_event; + SDL_JoystickID nInstanceID; + SDL_bool bXInputDevice; + BYTE SubType; + Uint8 XInputUserId; + DIDEVICEINSTANCE dxdevice; + struct JoyStick_DeviceData *pNext; +} JoyStick_DeviceData; + +extern JoyStick_DeviceData *SYS_Joystick; /* array to hold joystick ID values */ + +typedef enum Type +{ + BUTTON, + AXIS, + HAT +} Type; + +typedef struct input_t +{ + /* DirectInput offset for this input type: */ + DWORD ofs; + + /* Button, axis or hat: */ + Type type; + + /* SDL input offset: */ + Uint8 num; +} input_t; + +/* The private structure used to keep track of a joystick */ +struct joystick_hwdata +{ + SDL_JoystickGUID guid; + SDL_bool removed; + SDL_bool send_remove_event; + +#if SDL_JOYSTICK_DINPUT + LPDIRECTINPUTDEVICE8 InputDevice; + DIDEVCAPS Capabilities; + SDL_bool buffered; + input_t Inputs[MAX_INPUTS]; + int NumInputs; + int NumSliders; +#endif + + SDL_bool bXInputDevice; /* SDL_TRUE if this device supports using the xinput API rather than DirectInput */ + SDL_bool bXInputHaptic; /* Supports force feedback via XInput. */ + Uint8 userid; /* XInput userid index for this joystick */ + DWORD dwPacketNumber; +}; + +extern void SDL_SYS_AddJoystickDevice(JoyStick_DeviceData *device); + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick.c b/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick.c new file mode 100644 index 0000000000..2f27c47dc2 --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick.c @@ -0,0 +1,425 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "../SDL_sysjoystick.h" + +#if SDL_JOYSTICK_XINPUT + +#include "SDL_assert.h" +#include "SDL_hints.h" +#include "SDL_windowsjoystick_c.h" +#include "SDL_xinputjoystick_c.h" + +/* + * Internal stuff. + */ +static SDL_bool s_bXInputEnabled = SDL_TRUE; + + +static SDL_bool +SDL_XInputUseOldJoystickMapping() +{ + static int s_XInputUseOldJoystickMapping = -1; + if (s_XInputUseOldJoystickMapping < 0) { + const char *hint = SDL_GetHint(SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING); + s_XInputUseOldJoystickMapping = (hint && *hint == '1') ? 1 : 0; + } + return (s_XInputUseOldJoystickMapping > 0); +} + +SDL_bool SDL_XINPUT_Enabled(void) +{ + return s_bXInputEnabled; +} + +int +SDL_XINPUT_JoystickInit(void) +{ + const char *env = SDL_GetHint(SDL_HINT_XINPUT_ENABLED); + if (env && !SDL_atoi(env)) { + s_bXInputEnabled = SDL_FALSE; + } + + if (s_bXInputEnabled && WIN_LoadXInputDLL() < 0) { + s_bXInputEnabled = SDL_FALSE; /* oh well. */ + } + return 0; +} + +static char * +GetXInputName(const Uint8 userid, BYTE SubType) +{ + char name[32]; + + if (SDL_XInputUseOldJoystickMapping()) { + SDL_snprintf(name, sizeof(name), "X360 Controller #%u", 1 + userid); + } else { + switch (SubType) { + case XINPUT_DEVSUBTYPE_GAMEPAD: + SDL_snprintf(name, sizeof(name), "XInput Controller #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_WHEEL: + SDL_snprintf(name, sizeof(name), "XInput Wheel #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_ARCADE_STICK: + SDL_snprintf(name, sizeof(name), "XInput ArcadeStick #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_FLIGHT_STICK: + SDL_snprintf(name, sizeof(name), "XInput FlightStick #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_DANCE_PAD: + SDL_snprintf(name, sizeof(name), "XInput DancePad #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_GUITAR: + case XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE: + case XINPUT_DEVSUBTYPE_GUITAR_BASS: + SDL_snprintf(name, sizeof(name), "XInput Guitar #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_DRUM_KIT: + SDL_snprintf(name, sizeof(name), "XInput DrumKit #%u", 1 + userid); + break; + case XINPUT_DEVSUBTYPE_ARCADE_PAD: + SDL_snprintf(name, sizeof(name), "XInput ArcadePad #%u", 1 + userid); + break; + default: + SDL_snprintf(name, sizeof(name), "XInput Device #%u", 1 + userid); + break; + } + } + return SDL_strdup(name); +} + +static void +AddXInputDevice(const Uint8 userid, BYTE SubType, JoyStick_DeviceData **pContext) +{ + JoyStick_DeviceData *pPrevJoystick = NULL; + JoyStick_DeviceData *pNewJoystick = *pContext; + + if (SDL_XInputUseOldJoystickMapping() && SubType != XINPUT_DEVSUBTYPE_GAMEPAD) + return; + + if (SubType == XINPUT_DEVSUBTYPE_UNKNOWN) + return; + + while (pNewJoystick) { + if (pNewJoystick->bXInputDevice && (pNewJoystick->XInputUserId == userid) && (pNewJoystick->SubType == SubType)) { + /* if we are replacing the front of the list then update it */ + if (pNewJoystick == *pContext) { + *pContext = pNewJoystick->pNext; + } else if (pPrevJoystick) { + pPrevJoystick->pNext = pNewJoystick->pNext; + } + + pNewJoystick->pNext = SYS_Joystick; + SYS_Joystick = pNewJoystick; + return; /* already in the list. */ + } + + pPrevJoystick = pNewJoystick; + pNewJoystick = pNewJoystick->pNext; + } + + pNewJoystick = (JoyStick_DeviceData *)SDL_malloc(sizeof(JoyStick_DeviceData)); + if (!pNewJoystick) { + return; /* better luck next time? */ + } + SDL_zerop(pNewJoystick); + + pNewJoystick->joystickname = GetXInputName(userid, SubType); + if (!pNewJoystick->joystickname) { + SDL_free(pNewJoystick); + return; /* better luck next time? */ + } + + pNewJoystick->bXInputDevice = SDL_TRUE; + if (SDL_XInputUseOldJoystickMapping()) { + SDL_zero(pNewJoystick->guid); + } else { + pNewJoystick->guid.data[0] = 'x'; + pNewJoystick->guid.data[1] = 'i'; + pNewJoystick->guid.data[2] = 'n'; + pNewJoystick->guid.data[3] = 'p'; + pNewJoystick->guid.data[4] = 'u'; + pNewJoystick->guid.data[5] = 't'; + pNewJoystick->guid.data[6] = SubType; + } + pNewJoystick->SubType = SubType; + pNewJoystick->XInputUserId = userid; + SDL_SYS_AddJoystickDevice(pNewJoystick); +} + +void +SDL_XINPUT_JoystickDetect(JoyStick_DeviceData **pContext) +{ + int iuserid; + + if (!s_bXInputEnabled) { + return; + } + + /* iterate in reverse, so these are in the final list in ascending numeric order. */ + for (iuserid = XUSER_MAX_COUNT - 1; iuserid >= 0; iuserid--) { + const Uint8 userid = (Uint8)iuserid; + XINPUT_CAPABILITIES capabilities; + if (XINPUTGETCAPABILITIES(userid, XINPUT_FLAG_GAMEPAD, &capabilities) == ERROR_SUCCESS) { + AddXInputDevice(userid, capabilities.SubType, pContext); + } + } +} + +int +SDL_XINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice) +{ + const Uint8 userId = joystickdevice->XInputUserId; + XINPUT_CAPABILITIES capabilities; + XINPUT_VIBRATION state; + + SDL_assert(s_bXInputEnabled); + SDL_assert(XINPUTGETCAPABILITIES); + SDL_assert(XINPUTSETSTATE); + SDL_assert(userId < XUSER_MAX_COUNT); + + joystick->hwdata->bXInputDevice = SDL_TRUE; + + if (XINPUTGETCAPABILITIES(userId, XINPUT_FLAG_GAMEPAD, &capabilities) != ERROR_SUCCESS) { + SDL_free(joystick->hwdata); + joystick->hwdata = NULL; + return SDL_SetError("Failed to obtain XInput device capabilities. Device disconnected?"); + } + SDL_zero(state); + joystick->hwdata->bXInputHaptic = (XINPUTSETSTATE(userId, &state) == ERROR_SUCCESS); + joystick->hwdata->userid = userId; + + /* The XInput API has a hard coded button/axis mapping, so we just match it */ + if (SDL_XInputUseOldJoystickMapping()) { + joystick->naxes = 6; + joystick->nbuttons = 15; + } else { + joystick->naxes = 6; + joystick->nbuttons = 11; + joystick->nhats = 1; + } + return 0; +} + +static void +UpdateXInputJoystickBatteryInformation(SDL_Joystick * joystick, XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation) +{ + if ( pBatteryInformation->BatteryType != BATTERY_TYPE_UNKNOWN ) + { + SDL_JoystickPowerLevel ePowerLevel = SDL_JOYSTICK_POWER_UNKNOWN; + if (pBatteryInformation->BatteryType == BATTERY_TYPE_WIRED) { + ePowerLevel = SDL_JOYSTICK_POWER_WIRED; + } else { + switch ( pBatteryInformation->BatteryLevel ) + { + case BATTERY_LEVEL_EMPTY: + ePowerLevel = SDL_JOYSTICK_POWER_EMPTY; + break; + case BATTERY_LEVEL_LOW: + ePowerLevel = SDL_JOYSTICK_POWER_LOW; + break; + case BATTERY_LEVEL_MEDIUM: + ePowerLevel = SDL_JOYSTICK_POWER_MEDIUM; + break; + default: + case BATTERY_LEVEL_FULL: + ePowerLevel = SDL_JOYSTICK_POWER_FULL; + break; + } + } + + SDL_PrivateJoystickBatteryLevel( joystick, ePowerLevel ); + } +} + +static void +UpdateXInputJoystickState_OLD(SDL_Joystick * joystick, XINPUT_STATE_EX *pXInputState, XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation) +{ + static WORD s_XInputButtons[] = { + XINPUT_GAMEPAD_DPAD_UP, XINPUT_GAMEPAD_DPAD_DOWN, XINPUT_GAMEPAD_DPAD_LEFT, XINPUT_GAMEPAD_DPAD_RIGHT, + XINPUT_GAMEPAD_START, XINPUT_GAMEPAD_BACK, XINPUT_GAMEPAD_LEFT_THUMB, XINPUT_GAMEPAD_RIGHT_THUMB, + XINPUT_GAMEPAD_LEFT_SHOULDER, XINPUT_GAMEPAD_RIGHT_SHOULDER, + XINPUT_GAMEPAD_A, XINPUT_GAMEPAD_B, XINPUT_GAMEPAD_X, XINPUT_GAMEPAD_Y, + XINPUT_GAMEPAD_GUIDE + }; + WORD wButtons = pXInputState->Gamepad.wButtons; + Uint8 button; + + SDL_PrivateJoystickAxis(joystick, 0, (Sint16)pXInputState->Gamepad.sThumbLX); + SDL_PrivateJoystickAxis(joystick, 1, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbLY))); + SDL_PrivateJoystickAxis(joystick, 2, (Sint16)pXInputState->Gamepad.sThumbRX); + SDL_PrivateJoystickAxis(joystick, 3, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbRY))); + SDL_PrivateJoystickAxis(joystick, 4, (Sint16)(((int)pXInputState->Gamepad.bLeftTrigger * 65535 / 255) - 32768)); + SDL_PrivateJoystickAxis(joystick, 5, (Sint16)(((int)pXInputState->Gamepad.bRightTrigger * 65535 / 255) - 32768)); + + for (button = 0; button < SDL_arraysize(s_XInputButtons); ++button) { + SDL_PrivateJoystickButton(joystick, button, (wButtons & s_XInputButtons[button]) ? SDL_PRESSED : SDL_RELEASED); + } + + UpdateXInputJoystickBatteryInformation( joystick, pBatteryInformation ); +} + +static void +UpdateXInputJoystickState(SDL_Joystick * joystick, XINPUT_STATE_EX *pXInputState, XINPUT_BATTERY_INFORMATION_EX *pBatteryInformation) +{ + static WORD s_XInputButtons[] = { + XINPUT_GAMEPAD_A, XINPUT_GAMEPAD_B, XINPUT_GAMEPAD_X, XINPUT_GAMEPAD_Y, + XINPUT_GAMEPAD_LEFT_SHOULDER, XINPUT_GAMEPAD_RIGHT_SHOULDER, XINPUT_GAMEPAD_BACK, XINPUT_GAMEPAD_START, + XINPUT_GAMEPAD_LEFT_THUMB, XINPUT_GAMEPAD_RIGHT_THUMB, + XINPUT_GAMEPAD_GUIDE + }; + WORD wButtons = pXInputState->Gamepad.wButtons; + Uint8 button; + Uint8 hat = SDL_HAT_CENTERED; + + SDL_PrivateJoystickAxis(joystick, 0, (Sint16)pXInputState->Gamepad.sThumbLX); + SDL_PrivateJoystickAxis(joystick, 1, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbLY))); + SDL_PrivateJoystickAxis(joystick, 2, (Sint16)(((int)pXInputState->Gamepad.bLeftTrigger * 65535 / 255) - 32768)); + SDL_PrivateJoystickAxis(joystick, 3, (Sint16)pXInputState->Gamepad.sThumbRX); + SDL_PrivateJoystickAxis(joystick, 4, (Sint16)(-SDL_max(-32767, pXInputState->Gamepad.sThumbRY))); + SDL_PrivateJoystickAxis(joystick, 5, (Sint16)(((int)pXInputState->Gamepad.bRightTrigger * 65535 / 255) - 32768)); + + for (button = 0; button < SDL_arraysize(s_XInputButtons); ++button) { + SDL_PrivateJoystickButton(joystick, button, (wButtons & s_XInputButtons[button]) ? SDL_PRESSED : SDL_RELEASED); + } + + if (wButtons & XINPUT_GAMEPAD_DPAD_UP) { + hat |= SDL_HAT_UP; + } + if (wButtons & XINPUT_GAMEPAD_DPAD_DOWN) { + hat |= SDL_HAT_DOWN; + } + if (wButtons & XINPUT_GAMEPAD_DPAD_LEFT) { + hat |= SDL_HAT_LEFT; + } + if (wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) { + hat |= SDL_HAT_RIGHT; + } + SDL_PrivateJoystickHat(joystick, 0, hat); + + UpdateXInputJoystickBatteryInformation( joystick, pBatteryInformation ); +} + +void +SDL_XINPUT_JoystickUpdate(SDL_Joystick * joystick) +{ + HRESULT result; + XINPUT_STATE_EX XInputState; + XINPUT_BATTERY_INFORMATION_EX XBatteryInformation; + + if (!XINPUTGETSTATE) + return; + + result = XINPUTGETSTATE(joystick->hwdata->userid, &XInputState); + if (result == ERROR_DEVICE_NOT_CONNECTED) { + joystick->hwdata->send_remove_event = SDL_TRUE; + joystick->hwdata->removed = SDL_TRUE; + return; + } + + SDL_zero( XBatteryInformation ); + if ( XINPUTGETBATTERYINFORMATION ) + { + result = XINPUTGETBATTERYINFORMATION( joystick->hwdata->userid, BATTERY_DEVTYPE_GAMEPAD, &XBatteryInformation ); + } + + /* only fire events if the data changed from last time */ + if (XInputState.dwPacketNumber && XInputState.dwPacketNumber != joystick->hwdata->dwPacketNumber) { + if (SDL_XInputUseOldJoystickMapping()) { + UpdateXInputJoystickState_OLD(joystick, &XInputState, &XBatteryInformation); + } else { + UpdateXInputJoystickState(joystick, &XInputState, &XBatteryInformation); + } + joystick->hwdata->dwPacketNumber = XInputState.dwPacketNumber; + } +} + +void +SDL_XINPUT_JoystickClose(SDL_Joystick * joystick) +{ +} + +void +SDL_XINPUT_JoystickQuit(void) +{ + if (s_bXInputEnabled) { + WIN_UnloadXInputDLL(); + } +} + +SDL_bool +SDL_SYS_IsXInputGamepad_DeviceIndex(int device_index) +{ + JoyStick_DeviceData *device = SYS_Joystick; + int index; + + for (index = device_index; index > 0; index--) + device = device->pNext; + + return (device->SubType == XINPUT_DEVSUBTYPE_GAMEPAD); +} + +#else /* !SDL_JOYSTICK_XINPUT */ + +typedef struct JoyStick_DeviceData JoyStick_DeviceData; + +SDL_bool SDL_XINPUT_Enabled(void) +{ + return SDL_FALSE; +} + +int +SDL_XINPUT_JoystickInit(void) +{ + return 0; +} + +void +SDL_XINPUT_JoystickDetect(JoyStick_DeviceData **pContext) +{ +} + +int +SDL_XINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice) +{ + return SDL_Unsupported(); +} + +void +SDL_XINPUT_JoystickUpdate(SDL_Joystick * joystick) +{ +} + +void +SDL_XINPUT_JoystickClose(SDL_Joystick * joystick) +{ +} + +void +SDL_XINPUT_JoystickQuit(void) +{ +} + +#endif /* SDL_JOYSTICK_XINPUT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick_c.h b/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick_c.h new file mode 100644 index 0000000000..b3ba8c02e5 --- /dev/null +++ b/Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick_c.h @@ -0,0 +1,33 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#include "../../core/windows/SDL_xinput.h" + +extern SDL_bool SDL_XINPUT_Enabled(void); +extern int SDL_XINPUT_JoystickInit(void); +extern void SDL_XINPUT_JoystickDetect(JoyStick_DeviceData **pContext); +extern int SDL_XINPUT_JoystickOpen(SDL_Joystick * joystick, JoyStick_DeviceData *joystickdevice); +extern void SDL_XINPUT_JoystickUpdate(SDL_Joystick * joystick); +extern void SDL_XINPUT_JoystickClose(SDL_Joystick * joystick); +extern void SDL_XINPUT_JoystickQuit(void); + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/joystick/winrt/SDL_xinputjoystick.c b/Engine/lib/sdl/src/joystick/winrt/SDL_xinputjoystick.c deleted file mode 100644 index 00005080f3..0000000000 --- a/Engine/lib/sdl/src/joystick/winrt/SDL_xinputjoystick.c +++ /dev/null @@ -1,537 +0,0 @@ -/* - Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ -#include "../../SDL_internal.h" - -#if SDL_JOYSTICK_XINPUT - -/* SDL_xinputjoystick.c implements an XInput-only joystick and game controller - backend that is suitable for use on WinRT. SDL's DirectInput backend, also - XInput-capable, was not used as DirectInput is not available on WinRT (or, - at least, it isn't a public API). Some portions of this XInput backend - may copy parts of the XInput-using code from the DirectInput backend. - Refactoring the common parts into one location may be good to-do at some - point. - - TODO, WinRT: add hotplug support for XInput based game controllers -*/ - -#include "SDL_joystick.h" -#include "../SDL_sysjoystick.h" -#include "../SDL_joystick_c.h" -#include "SDL_events.h" -#include "../../events/SDL_events_c.h" -#include "SDL_timer.h" - -#include -#include - -struct joystick_hwdata { - //Uint8 bXInputHaptic; // Supports force feedback via XInput. - DWORD userIndex; // The XInput device index, in the range [0, XUSER_MAX_COUNT-1] (probably [0,3]). - XINPUT_STATE XInputState; // the last-read in XInputState, kept around to compare old and new values - SDL_bool isDeviceConnected; // was the device connected (on the last detection-polling, or during backend-initialization)? - SDL_bool isDeviceConnectionEventPending; // was a device added, and is the associated add-event pending? - SDL_bool isDeviceRemovalEventPending; // was the device removed, and is the associated remove-event pending? -}; - -/* Keep track of data on all XInput devices, regardless of whether or not - they've been opened (via SDL_JoystickOpen). - */ -static struct joystick_hwdata g_XInputData[XUSER_MAX_COUNT]; - -/* Device detection can be extremely costly performance-wise, in some cases. - In particular, if no devices are connected, calls to detect a single device, - via either XInputGetState() or XInputGetCapabilities(), can take upwards of - 20 ms on a 1st generation Surface RT, more if devices are detected across - all of of XInput's four device slots. WinRT and XInput do not appear to - have callback-based APIs to notify an app when a device is connected, at - least as of Windows 8.1. The synchronous XInput calls must be used. - - Once a device is connected, calling XInputGetState() is a much less costly - operation, with individual calls costing well under 1 ms, and often under - 0.1 ms [on a 1st gen Surface RT]. - - With XInput's performance limitations in mind, a separate device-detection - thread will be utilized (by SDL) to try to move costly XInput calls off the - main thread. Polling of active devices still, however, occurs on the main - thread. - */ -static SDL_Thread * g_DeviceDetectionThread = NULL; -static SDL_mutex * g_DeviceInfoLock = NULL; -static SDL_bool g_DeviceDetectionQuit = SDL_FALSE; - -/* Main function for the device-detection thread. - */ -static int -DeviceDetectionThreadMain(void * _data) -{ - DWORD result; - XINPUT_CAPABILITIES tempXInputCaps; - int i; - - while (1) { - /* See if the device-detection thread is being asked to shutdown. - */ - SDL_LockMutex(g_DeviceInfoLock); - if (g_DeviceDetectionQuit) { - SDL_UnlockMutex(g_DeviceInfoLock); - break; - } - SDL_UnlockMutex(g_DeviceInfoLock); - - /* Add a short delay to prevent the device-detection thread from eating - up too much CPU time: - */ - SDL_Delay(300); - - /* TODO, WinRT: try making the device-detection thread wakeup sooner from its CPU-preserving SDL_Delay, if the thread was asked to quit. - */ - - /* See if any new devices are connected. */ - SDL_LockMutex(g_DeviceInfoLock); - for (i = 0; i < XUSER_MAX_COUNT; ++i) { - if (!g_XInputData[i].isDeviceConnected && - !g_XInputData[i].isDeviceConnectionEventPending && - !g_XInputData[i].isDeviceRemovalEventPending) - { - SDL_UnlockMutex(g_DeviceInfoLock); - result = XInputGetCapabilities(i, 0, &tempXInputCaps); - SDL_LockMutex(g_DeviceInfoLock); - if (result == ERROR_SUCCESS) { - /* Yes, a device is connected. Mark it as such. - Others will be told about this (via an - SDL_JOYDEVICEADDED event) in the next call to - SDL_SYS_JoystickDetect. - */ - g_XInputData[i].isDeviceConnected = SDL_TRUE; - g_XInputData[i].isDeviceConnectionEventPending = SDL_TRUE; - } - } - } - SDL_UnlockMutex(g_DeviceInfoLock); - } - - return 0; -} - -/* Function to scan the system for joysticks. - * It should return 0, or -1 on an unrecoverable fatal error. - */ -int -SDL_SYS_JoystickInit(void) -{ - HRESULT result = S_OK; - XINPUT_STATE tempXInputState; - int i; - - SDL_zero(g_XInputData); - - /* Make initial notes on whether or not devices are connected (or not). - */ - for (i = 0; i < XUSER_MAX_COUNT; ++i) { - result = XInputGetState(i, &tempXInputState); - if (result == ERROR_SUCCESS) { - g_XInputData[i].isDeviceConnected = SDL_TRUE; - } - } - - /* Start up the device-detection thread. - */ - g_DeviceDetectionQuit = SDL_FALSE; - g_DeviceInfoLock = SDL_CreateMutex(); - g_DeviceDetectionThread = SDL_CreateThread(DeviceDetectionThreadMain, "SDL_joystick", NULL); - - return (0); -} - -int SDL_SYS_NumJoysticks() -{ - int joystickCount = 0; - DWORD i; - - /* Iterate through each possible XInput device and see if something - was connected (at joystick init, or during the last polling). - */ - SDL_LockMutex(g_DeviceInfoLock); - for (i = 0; i < XUSER_MAX_COUNT; ++i) { - if (g_XInputData[i].isDeviceConnected) { - ++joystickCount; - } - } - SDL_UnlockMutex(g_DeviceInfoLock); - - return joystickCount; -} - -void SDL_SYS_JoystickDetect() -{ - DWORD i; - SDL_Event event; - - /* Iterate through each possible XInput device, seeing if any devices - have been connected, or if they were removed. - */ - SDL_LockMutex(g_DeviceInfoLock); - for (i = 0; i < XUSER_MAX_COUNT; ++i) { - /* See if any new devices are connected. */ - if (g_XInputData[i].isDeviceConnectionEventPending) { -#if !SDL_EVENTS_DISABLED - SDL_zero(event); - event.type = SDL_JOYDEVICEADDED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = i; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } -#endif - g_XInputData[i].isDeviceConnectionEventPending = SDL_FALSE; - } else if (g_XInputData[i].isDeviceRemovalEventPending) { - /* A device was previously marked as removed (by - SDL_SYS_JoystickUpdate). Tell others about the device removal. - */ - - g_XInputData[i].isDeviceRemovalEventPending = SDL_FALSE; - -#if !SDL_EVENTS_DISABLED - SDL_zero(event); - event.type = SDL_JOYDEVICEREMOVED; - - if (SDL_GetEventState(event.type) == SDL_ENABLE) { - event.jdevice.which = i; //joystick->hwdata->userIndex; - if ((SDL_EventOK == NULL) - || (*SDL_EventOK) (SDL_EventOKParam, &event)) { - SDL_PushEvent(&event); - } - } -#endif - } - } - SDL_UnlockMutex(g_DeviceInfoLock); -} - -SDL_bool SDL_SYS_JoystickNeedsPolling() -{ - /* Since XInput, or WinRT, provides any events to indicate when a game - controller gets connected, and instead indicates device availability - solely through polling, we'll poll (for new devices). - */ - return SDL_TRUE; -} - -/* Internal function to retreive device capabilities. - This function will return an SDL-standard value of 0 on success - (a device is connected, and data on it was retrieved), or -1 - on failure (no device was connected, or some other error - occurred. SDL_SetError() will be invoked to set an appropriate - error message. - */ -static int -SDL_XInput_GetDeviceCapabilities(int device_index, XINPUT_CAPABILITIES * pDeviceCaps) -{ - HRESULT dwResult; - - /* Make sure that the device index is a valid one. If not, return to the - caller with an error. - */ - if (device_index < 0 || device_index >= XUSER_MAX_COUNT) { - return SDL_SetError("invalid/unavailable device index"); - } - - /* See if a device exists, and if so, what its capabilities are. If a - device is not available, return to the caller with an error. - */ - switch ((dwResult = XInputGetCapabilities(device_index, 0, pDeviceCaps))) { - case ERROR_SUCCESS: - /* A device is available, and its capabilities were retrieved! */ - return 0; - case ERROR_DEVICE_NOT_CONNECTED: - return SDL_SetError("no device is connected at joystick index, %d", device_index); - default: - return SDL_SetError("an unknown error occurred when retrieving info on a device at joystick index, %d", device_index); - } -} - -/* Function to get the device-dependent name of a joystick */ -const char * -SDL_SYS_JoystickNameForDeviceIndex(int device_index) -{ - XINPUT_CAPABILITIES deviceCaps; - - if (SDL_XInput_GetDeviceCapabilities(device_index, &deviceCaps) != 0) { - /* Uh oh. Device capabilities couldn't be retrieved. Return to the - caller. SDL_SetError() has already been invoked (with relevant - information). - */ - return NULL; - } - - switch (deviceCaps.SubType) { - default: - if (deviceCaps.Type == XINPUT_DEVTYPE_GAMEPAD) { - return "Undefined game controller"; - } else { - return "Undefined controller"; - } - case XINPUT_DEVSUBTYPE_UNKNOWN: - if (deviceCaps.Type == XINPUT_DEVTYPE_GAMEPAD) { - return "Unknown game controller"; - } else { - return "Unknown controller"; - } - case XINPUT_DEVSUBTYPE_GAMEPAD: - return "Gamepad controller"; - case XINPUT_DEVSUBTYPE_WHEEL: - return "Racing wheel controller"; - case XINPUT_DEVSUBTYPE_ARCADE_STICK: - return "Arcade stick controller"; - case XINPUT_DEVSUBTYPE_FLIGHT_STICK: - return "Flight stick controller"; - case XINPUT_DEVSUBTYPE_DANCE_PAD: - return "Dance pad controller"; - case XINPUT_DEVSUBTYPE_GUITAR: - return "Guitar controller"; - case XINPUT_DEVSUBTYPE_GUITAR_ALTERNATE: - return "Guitar controller, Alternate"; - case XINPUT_DEVSUBTYPE_GUITAR_BASS: - return "Guitar controller, Bass"; - case XINPUT_DEVSUBTYPE_DRUM_KIT: - return "Drum controller"; - case XINPUT_DEVSUBTYPE_ARCADE_PAD: - return "Arcade pad controller"; - } -} - -/* Function to perform the mapping from device index to the instance id for this index */ -SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index) -{ - return device_index; -} - -/* Function to open a joystick for use. - The joystick to open is specified by the index field of the joystick. - This should fill the nbuttons and naxes fields of the joystick structure. - It returns 0, or -1 if there is an error. - */ -int -SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index) -{ - XINPUT_CAPABILITIES deviceCaps; - - if (SDL_XInput_GetDeviceCapabilities(device_index, &deviceCaps) != 0) { - /* Uh oh. Device capabilities couldn't be retrieved. Return to the - caller. SDL_SetError() has already been invoked (with relevant - information). - */ - return -1; - } - - /* For now, only game pads are supported. If the device is something other - than that, return an error to the caller. - */ - if (deviceCaps.Type != XINPUT_DEVTYPE_GAMEPAD) { - return SDL_SetError("a device is connected (at joystick index, %d), but it is of an unknown device type (deviceCaps.Flags=%ul)", - device_index, (unsigned int)deviceCaps.Flags); - } - - /* Create the joystick data structure */ - joystick->instance_id = device_index; - joystick->hwdata = &g_XInputData[device_index]; - - // The XInput API has a hard coded button/axis mapping, so we just match it - joystick->naxes = 6; - joystick->nbuttons = 15; - joystick->nballs = 0; - joystick->nhats = 0; - - /* We're done! */ - return (0); -} - -/* Function to determine is this joystick is attached to the system right now */ -SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) -{ - SDL_bool isDeviceConnected; - SDL_LockMutex(g_DeviceInfoLock); - isDeviceConnected = joystick->hwdata->isDeviceConnected; - SDL_UnlockMutex(g_DeviceInfoLock); - return isDeviceConnected; -} - -/* Function to return > 0 if a bit array of buttons differs after applying a mask -*/ -static int ButtonChanged( int ButtonsNow, int ButtonsPrev, int ButtonMask ) -{ - return ( ButtonsNow & ButtonMask ) != ( ButtonsPrev & ButtonMask ); -} - -/* Function to update the state of a joystick - called as a device poll. - * This function shouldn't update the joystick structure directly, - * but instead should call SDL_PrivateJoystick*() to deliver events - * and update joystick device state. - */ -void -SDL_SYS_JoystickUpdate(SDL_Joystick * joystick) -{ - HRESULT result; - XINPUT_STATE prevXInputState; - - SDL_LockMutex(g_DeviceInfoLock); - - /* Before polling for new data, make note of the old data */ - prevXInputState = joystick->hwdata->XInputState; - - /* Poll for new data */ - result = XInputGetState(joystick->hwdata->userIndex, &joystick->hwdata->XInputState); - if (result == ERROR_DEVICE_NOT_CONNECTED) { - if (joystick->hwdata->isDeviceConnected) { - joystick->hwdata->isDeviceConnected = SDL_FALSE; - joystick->hwdata->isDeviceRemovalEventPending = SDL_TRUE; - /* TODO, WinRT: make sure isDeviceRemovalEventPending gets cleared as appropriate, and that quick re-plugs don't cause trouble */ - } - SDL_UnlockMutex(g_DeviceInfoLock); - return; - } - - /* Make sure the device is marked as connected */ - joystick->hwdata->isDeviceConnected = SDL_TRUE; - - // only fire events if the data changed from last time - if ( joystick->hwdata->XInputState.dwPacketNumber != 0 - && joystick->hwdata->XInputState.dwPacketNumber != prevXInputState.dwPacketNumber ) - { - XINPUT_STATE *pXInputState = &joystick->hwdata->XInputState; - XINPUT_STATE *pXInputStatePrev = &prevXInputState; - - SDL_PrivateJoystickAxis(joystick, 0, (Sint16)pXInputState->Gamepad.sThumbLX ); - SDL_PrivateJoystickAxis(joystick, 1, (Sint16)(-1*pXInputState->Gamepad.sThumbLY-1) ); - SDL_PrivateJoystickAxis(joystick, 2, (Sint16)pXInputState->Gamepad.sThumbRX ); - SDL_PrivateJoystickAxis(joystick, 3, (Sint16)(-1*pXInputState->Gamepad.sThumbRY-1) ); - SDL_PrivateJoystickAxis(joystick, 4, (Sint16)((int)pXInputState->Gamepad.bLeftTrigger*32767/255) ); - SDL_PrivateJoystickAxis(joystick, 5, (Sint16)((int)pXInputState->Gamepad.bRightTrigger*32767/255) ); - - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_UP ) ) - SDL_PrivateJoystickButton(joystick, 0, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_DOWN ) ) - SDL_PrivateJoystickButton(joystick, 1, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_LEFT ) ) - SDL_PrivateJoystickButton(joystick, 2, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_DPAD_RIGHT ) ) - SDL_PrivateJoystickButton(joystick, 3, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_START ) ) - SDL_PrivateJoystickButton(joystick, 4, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_START ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_BACK ) ) - SDL_PrivateJoystickButton(joystick, 5, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_BACK ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_LEFT_THUMB ) ) - SDL_PrivateJoystickButton(joystick, 6, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_RIGHT_THUMB ) ) - SDL_PrivateJoystickButton(joystick, 7, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_LEFT_SHOULDER ) ) - SDL_PrivateJoystickButton(joystick, 8, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_RIGHT_SHOULDER ) ) - SDL_PrivateJoystickButton(joystick, 9, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_A ) ) - SDL_PrivateJoystickButton(joystick, 10, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_A ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_B ) ) - SDL_PrivateJoystickButton(joystick, 11, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_B ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_X ) ) - SDL_PrivateJoystickButton(joystick, 12, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_X ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, XINPUT_GAMEPAD_Y ) ) - SDL_PrivateJoystickButton(joystick, 13, pXInputState->Gamepad.wButtons & XINPUT_GAMEPAD_Y ? SDL_PRESSED : SDL_RELEASED ); - if ( ButtonChanged( pXInputState->Gamepad.wButtons, pXInputStatePrev->Gamepad.wButtons, 0x400 ) ) - SDL_PrivateJoystickButton(joystick, 14, pXInputState->Gamepad.wButtons & 0x400 ? SDL_PRESSED : SDL_RELEASED ); // 0x400 is the undocumented code for the guide button - } - - SDL_UnlockMutex(g_DeviceInfoLock); -} - -/* Function to close a joystick after use */ -void -SDL_SYS_JoystickClose(SDL_Joystick * joystick) -{ - /* Clear cached button data on the joystick */ - SDL_LockMutex(g_DeviceInfoLock); - SDL_zero(joystick->hwdata->XInputState); - SDL_UnlockMutex(g_DeviceInfoLock); - - /* There's need to free 'hwdata', as it's a pointer to a global array. - The field will be cleared anyways, just to indicate that it's not - currently needed. - */ - joystick->hwdata = NULL; -} - -/* Function to perform any system-specific joystick related cleanup */ -void -SDL_SYS_JoystickQuit(void) -{ - /* Tell the joystick detection thread to stop, then wait for it to finish */ - SDL_LockMutex(g_DeviceInfoLock); - g_DeviceDetectionQuit = SDL_TRUE; - SDL_UnlockMutex(g_DeviceInfoLock); - SDL_WaitThread(g_DeviceDetectionThread, NULL); - - /* Clean up device-detection stuff */ - SDL_DestroyMutex(g_DeviceInfoLock); - g_DeviceInfoLock = NULL; - g_DeviceDetectionThread = NULL; - g_DeviceDetectionQuit = SDL_FALSE; - - return; -} - -SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index ) -{ - SDL_JoystickGUID guid; - // the GUID is just the first 16 chars of the name for now - const char *name = SDL_SYS_JoystickNameForDeviceIndex( device_index ); - SDL_zero( guid ); - SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) ); - return guid; -} - - -SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick) -{ - SDL_JoystickGUID guid; - // the GUID is just the first 16 chars of the name for now - const char *name = joystick->name; - SDL_zero( guid ); - SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) ); - return guid; -} - -SDL_bool SDL_SYS_IsXInputDeviceIndex(int device_index) -{ - /* The XInput-capable DirectInput joystick backend implements the same - function (SDL_SYS_IsXInputDeviceIndex), however in that case, not all - joystick devices are XInput devices. In this case, with the - WinRT-enabled XInput-only backend, all "joystick" devices are XInput - devices. - */ - return SDL_TRUE; -} - -#endif /* SDL_JOYSTICK_XINPUT */ - -/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/libm/k_rem_pio2.c b/Engine/lib/sdl/src/libm/k_rem_pio2.c index f881d35d6a..23c2b61dd9 100644 --- a/Engine/lib/sdl/src/libm/k_rem_pio2.c +++ b/Engine/lib/sdl/src/libm/k_rem_pio2.c @@ -134,6 +134,8 @@ static const char rcsid[] = #include "math_libm.h" #include "math_private.h" +#include "SDL_assert.h" + libm_hidden_proto(scalbn) libm_hidden_proto(floor) #ifdef __STDC__ @@ -181,10 +183,13 @@ __kernel_rem_pio2(x, y, e0, nx, prec, ipio2) double z, fw, f[20], fq[20], q[20]; /* initialize jk */ + SDL_assert((prec >= 0) && (prec < SDL_arraysize(init_jk))); jk = init_jk[prec]; + SDL_assert((jk >= 2) && (jk <= 6)); jp = jk; /* determine jx,jv,q0, note that 3>q0 */ + SDL_assert(nx > 0); jx = nx - 1; jv = (e0 - 3) / 24; if (jv < 0) diff --git a/Engine/lib/sdl/src/libm/k_tan.c b/Engine/lib/sdl/src/libm/k_tan.c new file mode 100644 index 0000000000..27e6639b0c --- /dev/null +++ b/Engine/lib/sdl/src/libm/k_tan.c @@ -0,0 +1,118 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* __kernel_tan( x, y, k ) + * kernel tan function on [-pi/4, pi/4], pi/4 ~ 0.7854 + * Input x is assumed to be bounded by ~pi/4 in magnitude. + * Input y is the tail of x. + * Input k indicates whether tan (if k=1) or + * -1/tan (if k= -1) is returned. + * + * Algorithm + * 1. Since tan(-x) = -tan(x), we need only to consider positive x. + * 2. if x < 2^-28 (hx<0x3e300000 0), return x with inexact if x!=0. + * 3. tan(x) is approximated by a odd polynomial of degree 27 on + * [0,0.67434] + * 3 27 + * tan(x) ~ x + T1*x + ... + T13*x + * where + * + * |tan(x) 2 4 26 | -59.2 + * |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2 + * | x | + * + * Note: tan(x+y) = tan(x) + tan'(x)*y + * ~ tan(x) + (1+x*x)*y + * Therefore, for better accuracy in computing tan(x+y), let + * 3 2 2 2 2 + * r = x *(T2+x *(T3+x *(...+x *(T12+x *T13)))) + * then + * 3 2 + * tan(x+y) = x + (T1*x + (x *(r+y)+y)) + * + * 4. For x in [0.67434,pi/4], let y = pi/4 - x, then + * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) + * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) + */ + +#include "math_libm.h" +#include "math_private.h" + +static const double +one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ +pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */ +pio4lo= 3.06161699786838301793e-17, /* 0x3C81A626, 0x33145C07 */ +T[] = { + 3.33333333333334091986e-01, /* 0x3FD55555, 0x55555563 */ + 1.33333333333201242699e-01, /* 0x3FC11111, 0x1110FE7A */ + 5.39682539762260521377e-02, /* 0x3FABA1BA, 0x1BB341FE */ + 2.18694882948595424599e-02, /* 0x3F9664F4, 0x8406D637 */ + 8.86323982359930005737e-03, /* 0x3F8226E3, 0xE96E8493 */ + 3.59207910759131235356e-03, /* 0x3F6D6D22, 0xC9560328 */ + 1.45620945432529025516e-03, /* 0x3F57DBC8, 0xFEE08315 */ + 5.88041240820264096874e-04, /* 0x3F4344D8, 0xF2F26501 */ + 2.46463134818469906812e-04, /* 0x3F3026F7, 0x1A8D1068 */ + 7.81794442939557092300e-05, /* 0x3F147E88, 0xA03792A6 */ + 7.14072491382608190305e-05, /* 0x3F12B80F, 0x32F0A7E9 */ + -1.85586374855275456654e-05, /* 0xBEF375CB, 0xDB605373 */ + 2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */ +}; + +double __kernel_tan(double x, double y, int iy) +{ + double z,r,v,w,s; + int32_t ix,hx; + GET_HIGH_WORD(hx,x); + ix = hx&0x7fffffff; /* high word of |x| */ + if(ix<0x3e300000) /* x < 2**-28 */ + {if((int)x==0) { /* generate inexact */ + u_int32_t low; + GET_LOW_WORD(low,x); + if(((ix|low)|(iy+1))==0) return one/fabs(x); + else return (iy==1)? x: -one/x; + } + } + if(ix>=0x3FE59428) { /* |x|>=0.6744 */ + if(hx<0) {x = -x; y = -y;} + z = pio4-x; + w = pio4lo-y; + x = z+w; y = 0.0; + } + z = x*x; + w = z*z; + /* Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11])))); + v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12]))))); + s = z*x; + r = y + z*(s*(r+v)+y); + r += T[0]*s; + w = x+r; + if(ix>=0x3FE59428) { + v = (double)iy; + return (double)(1-((hx>>30)&2))*(v-2.0*(x-(w*w/(w+v)-r))); + } + if(iy==1) return w; + else { /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ + /* compute -1.0/(x+r) accurately */ + double a,t; + z = w; + SET_LOW_WORD(z,0); + v = r-(z - x); /* z+v = r+x */ + t = a = -1.0/w; /* a = -1.0/w */ + SET_LOW_WORD(t,0); + s = 1.0+t*z; + return t+a*(s+t*v); + } +} diff --git a/Engine/lib/sdl/src/libm/math_libm.h b/Engine/lib/sdl/src/libm/math_libm.h index 20432bd285..3fe1727a3b 100644 --- a/Engine/lib/sdl/src/libm/math_libm.h +++ b/Engine/lib/sdl/src/libm/math_libm.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,5 +33,6 @@ double SDL_uclibc_pow(double x, double y); double SDL_uclibc_scalbn(double x, int n); double SDL_uclibc_sin(double x); double SDL_uclibc_sqrt(double x); +double SDL_uclibc_tan(double x); /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/libm/math_private.h b/Engine/lib/sdl/src/libm/math_private.h index 6ab0f35fda..74c8b3d45f 100644 --- a/Engine/lib/sdl/src/libm/math_private.h +++ b/Engine/lib/sdl/src/libm/math_private.h @@ -40,6 +40,7 @@ typedef unsigned int u_int32_t; #define scalbn SDL_uclibc_scalbn #define sin SDL_uclibc_sin #define __ieee754_sqrt SDL_uclibc_sqrt +#define tan SDL_uclibc_tan /* The original fdlibm code used statements like: n0 = ((*(int*)&one)>>29)^1; * index of high word * diff --git a/Engine/lib/sdl/src/libm/s_tan.c b/Engine/lib/sdl/src/libm/s_tan.c new file mode 100644 index 0000000000..18c8f5b060 --- /dev/null +++ b/Engine/lib/sdl/src/libm/s_tan.c @@ -0,0 +1,67 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* tan(x) + * Return tangent function of x. + * + * kernel function: + * __kernel_tan ... tangent function on [-pi/4,pi/4] + * __ieee754_rem_pio2 ... argument reduction routine + * + * Method. + * Let S,C and T denote the sin, cos and tan respectively on + * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 + * in [-pi/4 , +pi/4], and let n = k mod 4. + * We have + * + * n sin(x) cos(x) tan(x) + * ---------------------------------------------------------- + * 0 S C T + * 1 C -S -1/T + * 2 -S -C T + * 3 -C S -1/T + * ---------------------------------------------------------- + * + * Special cases: + * Let trig be any of sin, cos, or tan. + * trig(+-INF) is NaN, with signals; + * trig(NaN) is that NaN; + * + * Accuracy: + * TRIG(x) returns trig(x) nearly rounded + */ + +#include "math_libm.h" +#include "math_private.h" + +double tan(double x) +{ + double y[2],z=0.0; + int32_t n, ix; + + /* High word of x. */ + GET_HIGH_WORD(ix,x); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + if(ix <= 0x3fe921fb) return __kernel_tan(x,z,1); + + /* tan(Inf or NaN) is NaN */ + else if (ix>=0x7ff00000) return x-x; /* NaN */ + + /* argument reduction needed */ + else { + n = __ieee754_rem_pio2(x,y); + return __kernel_tan(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even + -1 -- n odd */ + } +} +libm_hidden_def(tan) diff --git a/Engine/lib/sdl/src/loadso/dlopen/SDL_sysloadso.c b/Engine/lib/sdl/src/loadso/dlopen/SDL_sysloadso.c index db8422221e..03ffae1299 100644 --- a/Engine/lib/sdl/src/loadso/dlopen/SDL_sysloadso.c +++ b/Engine/lib/sdl/src/loadso/dlopen/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/loadso/dummy/SDL_sysloadso.c b/Engine/lib/sdl/src/loadso/dummy/SDL_sysloadso.c index 0dfb90b0c2..4f132f9f50 100644 --- a/Engine/lib/sdl/src/loadso/dummy/SDL_sysloadso.c +++ b/Engine/lib/sdl/src/loadso/dummy/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/loadso/haiku/SDL_sysloadso.c b/Engine/lib/sdl/src/loadso/haiku/SDL_sysloadso.c index c8bba670fc..1336d9e18a 100644 --- a/Engine/lib/sdl/src/loadso/haiku/SDL_sysloadso.c +++ b/Engine/lib/sdl/src/loadso/haiku/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/loadso/windows/SDL_sysloadso.c b/Engine/lib/sdl/src/loadso/windows/SDL_sysloadso.c index 4d32b09858..bdb2b9874f 100644 --- a/Engine/lib/sdl/src/loadso/windows/SDL_sysloadso.c +++ b/Engine/lib/sdl/src/loadso/windows/SDL_sysloadso.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/main/android/SDL_android_main.c b/Engine/lib/sdl/src/main/android/SDL_android_main.c index f932f317e0..4173bcb1d1 100644 --- a/Engine/lib/sdl/src/main/android/SDL_android_main.c +++ b/Engine/lib/sdl/src/main/android/SDL_android_main.c @@ -17,22 +17,60 @@ extern void SDL_Android_Init(JNIEnv* env, jclass cls); /* Start up the SDL app */ -void Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject obj) +JNIEXPORT int JNICALL Java_org_libsdl_app_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject array) { - /* This interface could expand with ABI negotiation, calbacks, etc. */ + int i; + int argc; + int status; + + /* This interface could expand with ABI negotiation, callbacks, etc. */ SDL_Android_Init(env, cls); SDL_SetMainReady(); - /* Run the application code! */ - int status; - char *argv[2]; - argv[0] = SDL_strdup("SDL_app"); - argv[1] = NULL; - status = SDL_main(1, argv); + /* Prepare the arguments. */ + + int len = (*env)->GetArrayLength(env, array); + char* argv[1 + len + 1]; + argc = 0; + /* Use the name "app_process" so PHYSFS_platformCalcBaseDir() works. + https://bitbucket.org/MartinFelis/love-android-sdl2/issue/23/release-build-crash-on-start + */ + argv[argc++] = SDL_strdup("app_process"); + for (i = 0; i < len; ++i) { + const char* utf; + char* arg = NULL; + jstring string = (*env)->GetObjectArrayElement(env, array, i); + if (string) { + utf = (*env)->GetStringUTFChars(env, string, 0); + if (utf) { + arg = SDL_strdup(utf); + (*env)->ReleaseStringUTFChars(env, string, utf); + } + (*env)->DeleteLocalRef(env, string); + } + if (!arg) { + arg = SDL_strdup(""); + } + argv[argc++] = arg; + } + argv[argc] = NULL; + + + /* Run the application. */ + + status = SDL_main(argc, argv); + + /* Release the arguments. */ + + for (i = 0; i < argc; ++i) { + SDL_free(argv[i]); + } /* Do not issue an exit or the whole application will terminate instead of just the SDL thread */ /* exit(status); */ + + return status; } #endif /* __ANDROID__ */ diff --git a/Engine/lib/sdl/src/main/haiku/SDL_BApp.h b/Engine/lib/sdl/src/main/haiku/SDL_BApp.h index 1e4a0f5501..157c236352 100644 --- a/Engine/lib/sdl/src/main/haiku/SDL_BApp.h +++ b/Engine/lib/sdl/src/main/haiku/SDL_BApp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -254,7 +254,7 @@ class SDL_BApp : public BApplication { return; } win = GetSDLWindow(winID); - SDL_SendMouseWheel(win, 0, xTicks, yTicks); + SDL_SendMouseWheel(win, 0, xTicks, yTicks, SDL_MOUSEWHEEL_NORMAL); } void _HandleKey(BMessage *msg) { diff --git a/Engine/lib/sdl/src/main/haiku/SDL_BeApp.cc b/Engine/lib/sdl/src/main/haiku/SDL_BeApp.cc index d471887fa5..36c2a1ab8b 100644 --- a/Engine/lib/sdl/src/main/haiku/SDL_BeApp.cc +++ b/Engine/lib/sdl/src/main/haiku/SDL_BeApp.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/main/haiku/SDL_BeApp.h b/Engine/lib/sdl/src/main/haiku/SDL_BeApp.h index f4399c8193..6700a3be9d 100644 --- a/Engine/lib/sdl/src/main/haiku/SDL_BeApp.h +++ b/Engine/lib/sdl/src/main/haiku/SDL_BeApp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/main/nacl/SDL_nacl_main.c b/Engine/lib/sdl/src/main/nacl/SDL_nacl_main.c new file mode 100644 index 0000000000..4c01d0fba8 --- /dev/null +++ b/Engine/lib/sdl/src/main/nacl/SDL_nacl_main.c @@ -0,0 +1,93 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL + +/* Include the SDL main definition header */ +#include "SDL_main.h" + +#include "ppapi_simple/ps_main.h" +#include "ppapi_simple/ps_event.h" +#include "ppapi_simple/ps_interface.h" +#include "nacl_io/nacl_io.h" +#include "sys/mount.h" + +extern void NACL_SetScreenResolution(int width, int height, Uint32 format); + +int +nacl_main(int argc, char *argv[]) +{ + int status; + PSEvent* ps_event; + PP_Resource event; + struct PP_Rect rect; + int ready = 0; + const PPB_View *ppb_view = PSInterfaceView(); + + /* This is started in a worker thread by ppapi_simple! */ + + /* Wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before starting the app */ + + PSEventSetFilter(PSE_INSTANCE_DIDCHANGEVIEW); + while (!ready) { + /* Process all waiting events without blocking */ + while (!ready && (ps_event = PSEventWaitAcquire()) != NULL) { + event = ps_event->as_resource; + switch(ps_event->type) { + /* From DidChangeView, contains a view resource */ + case PSE_INSTANCE_DIDCHANGEVIEW: + ppb_view->GetRect(event, &rect); + NACL_SetScreenResolution(rect.size.width, rect.size.height, 0); + ready = 1; + break; + default: + break; + } + PSEventRelease(ps_event); + } + } + + /* Do a default httpfs mount on /, + * apps can override this by unmounting / + * and remounting with the desired configuration + */ + nacl_io_init_ppapi(PSGetInstanceId(), PSGetInterface); + + umount("/"); + mount( + "", /* source */ + "/", /* target */ + "httpfs", /* filesystemtype */ + 0, /* mountflags */ + ""); /* data specific to the html5fs type */ + + /* Everything is ready, start the user main function */ + SDL_SetMainReady(); + status = SDL_main(argc, argv); + + return 0; +} + +/* ppapi_simple will start nacl_main in a worker thread */ +PPAPI_SIMPLE_REGISTER_MAIN(nacl_main); + +#endif /* SDL_VIDEO_DRIVER_NACL */ diff --git a/Engine/lib/sdl/src/main/psp/SDL_psp_main.c b/Engine/lib/sdl/src/main/psp/SDL_psp_main.c index d79135dbc4..2ca8e446b4 100644 --- a/Engine/lib/sdl/src/main/psp/SDL_psp_main.c +++ b/Engine/lib/sdl/src/main/psp/SDL_psp_main.c @@ -1,6 +1,9 @@ /* SDL_psp_main.c, placed in the public domain by Sam Lantinga 3/13/14 */ +#include "SDL_config.h" + +#ifdef __PSP__ #include "SDL_main.h" #include @@ -61,3 +64,7 @@ int main(int argc, char *argv[]) (void)SDL_main(argc, argv); return 0; } + +#endif /* __PSP__ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/main/windows/SDL_windows_main.c b/Engine/lib/sdl/src/main/windows/SDL_windows_main.c index 8c8ccab6b9..e6378081f9 100644 --- a/Engine/lib/sdl/src/main/windows/SDL_windows_main.c +++ b/Engine/lib/sdl/src/main/windows/SDL_windows_main.c @@ -10,9 +10,6 @@ /* Include this so we define UNICODE properly */ #include "../../core/windows/SDL_windows.h" -#include -#include - /* Include the SDL main definition header */ #include "SDL.h" #include "SDL_main.h" @@ -103,48 +100,62 @@ ParseCommandLine(char *cmdline, char **argv) return (argc); } -/* Show an error message */ -static void -ShowError(const char *title, const char *message) -{ -/* If USE_MESSAGEBOX is defined, you need to link with user32.lib */ -#ifdef USE_MESSAGEBOX - MessageBox(NULL, message, title, MB_ICONEXCLAMATION | MB_OK); -#else - fprintf(stderr, "%s: %s\n", title, message); -#endif -} - /* Pop up an out of memory message, returns to Windows */ static BOOL OutOfMemory(void) { - ShowError("Fatal Error", "Out of memory - aborting"); + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Fatal Error", "Out of memory - aborting", NULL); return FALSE; } #if defined(_MSC_VER) -/* The VC++ compiler needs main defined */ -#define console_main main +/* The VC++ compiler needs main/wmain defined */ +# define console_ansi_main main +# if UNICODE +# define console_wmain wmain +# endif #endif -/* This is where execution begins [console apps] */ -int -console_main(int argc, char *argv[]) +/* WinMain, main, and wmain eventually call into here. */ +static int +main_utf8(int argc, char *argv[]) { - int status; - SDL_SetMainReady(); /* Run the application main() code */ - status = SDL_main(argc, argv); + return SDL_main(argc, argv); +} - /* Exit cleanly, calling atexit() functions */ - exit(status); +/* This is where execution begins [console apps, ansi] */ +int +console_ansi_main(int argc, char *argv[]) +{ + /* !!! FIXME: are these in the system codepage? We need to convert to UTF-8. */ + return main_utf8(argc, argv); +} - /* Hush little compiler, don't you cry... */ - return 0; + +#if UNICODE +/* This is where execution begins [console apps, unicode] */ +int +console_wmain(int argc, wchar_t *wargv[], wchar_t *wenvp) +{ + int retval = 0; + char **argv = SDL_stack_alloc(char*, argc); + int i; + + for (i = 0; i < argc; ++i) { + argv[i] = WIN_StringToUTF8(wargv[i]); + } + + retval = main_utf8(argc, argv); + + /* !!! FIXME: we are leaking all the elements of argv we allocated. */ + SDL_stack_free(argv); + + return retval; } +#endif /* This is where execution begins [windowed apps] */ int WINAPI @@ -157,8 +168,9 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) /* Grab the command line */ TCHAR *text = GetCommandLine(); #if UNICODE - cmdline = SDL_iconv_string("UTF-8", "UCS-2-INTERNAL", (char *)(text), (SDL_wcslen(text)+1)*sizeof(WCHAR)); + cmdline = WIN_StringToUTF8(text); #else + /* !!! FIXME: are these in the system codepage? We need to convert to UTF-8. */ cmdline = SDL_strdup(text); #endif if (cmdline == NULL) { @@ -174,7 +186,7 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw) ParseCommandLine(cmdline, argv); /* Run the main program */ - console_main(argc, argv); + main_utf8(argc, argv); SDL_stack_free(argv); diff --git a/Engine/lib/sdl/src/main/windows/version.rc b/Engine/lib/sdl/src/main/windows/version.rc index 1292210292..8597154aac 100644 --- a/Engine/lib/sdl/src/main/windows/version.rc +++ b/Engine/lib/sdl/src/main/windows/version.rc @@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,0,3,0 - PRODUCTVERSION 2,0,3,0 + FILEVERSION 2,0,4,0 + PRODUCTVERSION 2,0,4,0 FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L @@ -23,12 +23,12 @@ BEGIN BEGIN VALUE "CompanyName", "\0" VALUE "FileDescription", "SDL\0" - VALUE "FileVersion", "2, 0, 3, 0\0" + VALUE "FileVersion", "2, 0, 4, 0\0" VALUE "InternalName", "SDL\0" - VALUE "LegalCopyright", "Copyright 2014 Sam Lantinga\0" + VALUE "LegalCopyright", "Copyright 2016 Sam Lantinga\0" VALUE "OriginalFilename", "SDL2.dll\0" VALUE "ProductName", "Simple DirectMedia Layer\0" - VALUE "ProductVersion", "2, 0, 3, 0\0" + VALUE "ProductVersion", "2, 0, 4, 0\0" END END BLOCK "VarFileInfo" diff --git a/Engine/lib/sdl/src/power/SDL_power.c b/Engine/lib/sdl/src/power/SDL_power.c index 10f8355f47..016013b97c 100644 --- a/Engine/lib/sdl/src/power/SDL_power.c +++ b/Engine/lib/sdl/src/power/SDL_power.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,7 @@ typedef SDL_bool (*SDL_GetPowerInfo_Impl) (SDL_PowerState * state, int *seconds, int *percent); +SDL_bool SDL_GetPowerInfo_Linux_sys_class_power_supply(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_Linux_proc_acpi(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_Windows(SDL_PowerState *, int *, int *); @@ -38,6 +39,7 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_Android(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_PSP(SDL_PowerState *, int *, int *); SDL_bool SDL_GetPowerInfo_WinRT(SDL_PowerState *, int *, int *); +SDL_bool SDL_GetPowerInfo_Emscripten(SDL_PowerState *, int *, int *); #ifndef SDL_POWER_DISABLED #ifdef SDL_POWER_HARDWIRED @@ -57,6 +59,7 @@ SDL_GetPowerInfo_Hardwired(SDL_PowerState * state, int *seconds, int *percent) static SDL_GetPowerInfo_Impl implementations[] = { #ifndef SDL_POWER_DISABLED #ifdef SDL_POWER_LINUX /* in order of preference. More than could work. */ + SDL_GetPowerInfo_Linux_sys_class_power_supply, SDL_GetPowerInfo_Linux_proc_acpi, SDL_GetPowerInfo_Linux_proc_apm, #endif @@ -81,6 +84,9 @@ static SDL_GetPowerInfo_Impl implementations[] = { #ifdef SDL_POWER_WINRT /* handles WinRT */ SDL_GetPowerInfo_WinRT, #endif +#ifdef SDL_POWER_EMSCRIPTEN /* handles Emscripten */ + SDL_GetPowerInfo_Emscripten, +#endif #ifdef SDL_POWER_HARDWIRED SDL_GetPowerInfo_Hardwired, @@ -93,7 +99,7 @@ SDL_GetPowerInfo(int *seconds, int *percent) { const int total = sizeof(implementations) / sizeof(implementations[0]); int _seconds, _percent; - SDL_PowerState retval; + SDL_PowerState retval = SDL_POWERSTATE_UNKNOWN; int i; /* Make these never NULL for platform-specific implementations. */ @@ -106,7 +112,7 @@ SDL_GetPowerInfo(int *seconds, int *percent) } for (i = 0; i < total; i++) { - if (implementations[i] (&retval, seconds, percent)) { + if (implementations[i](&retval, seconds, percent)) { return retval; } } diff --git a/Engine/lib/sdl/src/power/android/SDL_syspower.c b/Engine/lib/sdl/src/power/android/SDL_syspower.c index e363731d37..5a4b0fc144 100644 --- a/Engine/lib/sdl/src/power/android/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/android/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/power/emscripten/SDL_syspower.c b/Engine/lib/sdl/src/power/emscripten/SDL_syspower.c new file mode 100644 index 0000000000..307f79742b --- /dev/null +++ b/Engine/lib/sdl/src/power/emscripten/SDL_syspower.c @@ -0,0 +1,62 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef SDL_POWER_DISABLED +#if SDL_POWER_EMSCRIPTEN + +#include + +#include "SDL_power.h" + +SDL_bool +SDL_GetPowerInfo_Emscripten(SDL_PowerState *state, int *seconds, int *percent) +{ + EmscriptenBatteryEvent batteryState; + int haveBattery = 0; + + if (emscripten_get_battery_status(&batteryState) == EMSCRIPTEN_RESULT_NOT_SUPPORTED) + return SDL_FALSE; + + haveBattery = batteryState.level != 1.0 || !batteryState.charging || batteryState.chargingTime != 0.0; + + if (!haveBattery) { + *state = SDL_POWERSTATE_NO_BATTERY; + *seconds = -1; + *percent = -1; + return SDL_TRUE; + } + + if (batteryState.charging) + *state = batteryState.chargingTime == 0.0 ? SDL_POWERSTATE_CHARGED : SDL_POWERSTATE_CHARGING; + else + *state = SDL_POWERSTATE_ON_BATTERY; + + *seconds = batteryState.dischargingTime; + *percent = batteryState.level * 100; + + return SDL_TRUE; +} + +#endif /* SDL_POWER_EMSCRIPTEN */ +#endif /* SDL_POWER_DISABLED */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/power/haiku/SDL_syspower.c b/Engine/lib/sdl/src/power/haiku/SDL_syspower.c index aaf61e8b71..cfda8c9622 100644 --- a/Engine/lib/sdl/src/power/haiku/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/haiku/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/power/linux/SDL_syspower.c b/Engine/lib/sdl/src/power/linux/SDL_syspower.c index 05eb200b48..793e266695 100644 --- a/Engine/lib/sdl/src/power/linux/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/linux/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -36,8 +36,10 @@ static const char *proc_apm_path = "/proc/apm"; static const char *proc_acpi_battery_path = "/proc/acpi/battery"; static const char *proc_acpi_ac_adapter_path = "/proc/acpi/ac_adapter"; +static const char *sys_class_power_supply_path = "/sys/class/power_supply"; -static int open_acpi_file(const char *base, const char *node, const char *key) +static int +open_power_file(const char *base, const char *node, const char *key) { const size_t pathlen = strlen(base) + strlen(node) + strlen(key) + 3; char *path = (char *) alloca(pathlen); @@ -51,11 +53,11 @@ static int open_acpi_file(const char *base, const char *node, const char *key) static SDL_bool -load_acpi_file(const char *base, const char *node, const char *key, - char *buf, size_t buflen) +read_power_file(const char *base, const char *node, const char *key, + char *buf, size_t buflen) { ssize_t br = 0; - const int fd = open_acpi_file(base, node, key); + const int fd = open_power_file(base, node, key); if (fd == -1) { return SDL_FALSE; } @@ -133,9 +135,9 @@ check_proc_acpi_battery(const char * node, SDL_bool * have_battery, int secs = -1; int pct = -1; - if (!load_acpi_file(base, node, "state", state, sizeof (state))) { + if (!read_power_file(base, node, "state", state, sizeof (state))) { return; - } else if (!load_acpi_file(base, node, "info", info, sizeof (info))) { + } else if (!read_power_file(base, node, "info", info, sizeof (info))) { return; } @@ -214,7 +216,7 @@ check_proc_acpi_ac_adapter(const char * node, SDL_bool * have_ac) char *key = NULL; char *val = NULL; - if (!load_acpi_file(base, node, "state", state, sizeof (state))) { + if (!read_power_file(base, node, "state", state, sizeof (state))) { return; } @@ -423,6 +425,94 @@ SDL_GetPowerInfo_Linux_proc_apm(SDL_PowerState * state, return SDL_TRUE; } +/* !!! FIXME: implement d-bus queries to org.freedesktop.UPower. */ + +SDL_bool +SDL_GetPowerInfo_Linux_sys_class_power_supply(SDL_PowerState *state, int *seconds, int *percent) +{ + const char *base = sys_class_power_supply_path; + struct dirent *dent; + DIR *dirp; + + dirp = opendir(base); + if (!dirp) { + return SDL_FALSE; + } + + *state = SDL_POWERSTATE_NO_BATTERY; /* assume we're just plugged in. */ + *seconds = -1; + *percent = -1; + + while ((dent = readdir(dirp)) != NULL) { + const char *name = dent->d_name; + SDL_bool choose = SDL_FALSE; + char str[64]; + SDL_PowerState st; + int secs; + int pct; + + if ((SDL_strcmp(name, ".") == 0) || (SDL_strcmp(name, "..") == 0)) { + continue; /* skip these, of course. */ + } else if (!read_power_file(base, name, "type", str, sizeof (str))) { + continue; /* Don't know _what_ we're looking at. Give up on it. */ + } else if (SDL_strcmp(str, "Battery\n") != 0) { + continue; /* we don't care about UPS and such. */ + } + + /* some drivers don't offer this, so if it's not explicitly reported assume it's present. */ + if (read_power_file(base, name, "present", str, sizeof (str)) && (SDL_strcmp(str, "0\n") == 0)) { + st = SDL_POWERSTATE_NO_BATTERY; + } else if (!read_power_file(base, name, "status", str, sizeof (str))) { + st = SDL_POWERSTATE_UNKNOWN; /* uh oh */ + } else if (SDL_strcmp(str, "Charging\n") == 0) { + st = SDL_POWERSTATE_CHARGING; + } else if (SDL_strcmp(str, "Discharging\n") == 0) { + st = SDL_POWERSTATE_ON_BATTERY; + } else if ((SDL_strcmp(str, "Full\n") == 0) || (SDL_strcmp(str, "Not charging\n") == 0)) { + st = SDL_POWERSTATE_CHARGED; + } else { + st = SDL_POWERSTATE_UNKNOWN; /* uh oh */ + } + + if (!read_power_file(base, name, "capacity", str, sizeof (str))) { + pct = -1; + } else { + pct = SDL_atoi(str); + pct = (pct > 100) ? 100 : pct; /* clamp between 0%, 100% */ + } + + if (!read_power_file(base, name, "time_to_empty_now", str, sizeof (str))) { + secs = -1; + } else { + secs = SDL_atoi(str); + secs = (secs <= 0) ? -1 : secs; /* 0 == unknown */ + } + + /* + * We pick the battery that claims to have the most minutes left. + * (failing a report of minutes, we'll take the highest percent.) + */ + if ((secs < 0) && (*seconds < 0)) { + if ((pct < 0) && (*percent < 0)) { + choose = SDL_TRUE; /* at least we know there's a battery. */ + } else if (pct > *percent) { + choose = SDL_TRUE; + } + } else if (secs > *seconds) { + choose = SDL_TRUE; + } + + if (choose) { + *seconds = secs; + *percent = pct; + *state = st; + } + } + + closedir(dirp); + return SDL_TRUE; /* don't look any further. */ +} + #endif /* SDL_POWER_LINUX */ #endif /* SDL_POWER_DISABLED */ diff --git a/Engine/lib/sdl/src/power/macosx/SDL_syspower.c b/Engine/lib/sdl/src/power/macosx/SDL_syspower.c index 9bcacafde8..f865d59ef6 100644 --- a/Engine/lib/sdl/src/power/macosx/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/macosx/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,13 +23,13 @@ #ifndef SDL_POWER_DISABLED #if SDL_POWER_MACOSX -#include +#include #include #include #include "SDL_power.h" -/* Carbon is so verbose... */ +/* CoreFoundation is so verbose... */ #define STRMATCH(a,b) (CFStringCompare(a, b, 0) == kCFCompareEqualTo) #define GETVAL(k,v) \ CFDictionaryGetValueIfPresent(dict, CFSTR(k), (const void **) v) diff --git a/Engine/lib/sdl/src/power/psp/SDL_syspower.c b/Engine/lib/sdl/src/power/psp/SDL_syspower.c index b28a68cfca..76c21b9477 100644 --- a/Engine/lib/sdl/src/power/psp/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/psp/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/power/uikit/SDL_syspower.h b/Engine/lib/sdl/src/power/uikit/SDL_syspower.h index 581c358df7..4cfa5c974a 100644 --- a/Engine/lib/sdl/src/power/uikit/SDL_syspower.h +++ b/Engine/lib/sdl/src/power/uikit/SDL_syspower.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/power/uikit/SDL_syspower.m b/Engine/lib/sdl/src/power/uikit/SDL_syspower.m index 60c42745a6..14ce3576a9 100644 --- a/Engine/lib/sdl/src/power/uikit/SDL_syspower.m +++ b/Engine/lib/sdl/src/power/uikit/SDL_syspower.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,24 +50,24 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState * state, int *seconds, int *percent) { - UIDevice *uidev = [UIDevice currentDevice]; + @autoreleasepool { + UIDevice *uidev = [UIDevice currentDevice]; - if (!SDL_UIKitLastPowerInfoQuery) { - SDL_assert([uidev isBatteryMonitoringEnabled] == NO); - [uidev setBatteryMonitoringEnabled:YES]; - } + if (!SDL_UIKitLastPowerInfoQuery) { + SDL_assert(uidev.isBatteryMonitoringEnabled == NO); + uidev.batteryMonitoringEnabled = YES; + } - /* UIKit_GL_SwapWindow() (etc) will check this and disable the battery - * monitoring if the app hasn't queried it in the last X seconds. - * Apparently monitoring the battery burns battery life. :) - * Apple's docs say not to monitor the battery unless you need it. - */ - SDL_UIKitLastPowerInfoQuery = SDL_GetTicks(); + /* UIKit_GL_SwapWindow() (etc) will check this and disable the battery + * monitoring if the app hasn't queried it in the last X seconds. + * Apparently monitoring the battery burns battery life. :) + * Apple's docs say not to monitor the battery unless you need it. + */ + SDL_UIKitLastPowerInfoQuery = SDL_GetTicks(); - *seconds = -1; /* no API to estimate this in UIKit. */ + *seconds = -1; /* no API to estimate this in UIKit. */ - switch ([uidev batteryState]) - { + switch (uidev.batteryState) { case UIDeviceBatteryStateCharging: *state = SDL_POWERSTATE_CHARGING; break; @@ -84,11 +84,12 @@ default: *state = SDL_POWERSTATE_UNKNOWN; break; - } + } - const float level = [uidev batteryLevel]; - *percent = ( (level < 0.0f) ? -1 : ((int) ((level * 100) + 0.5f)) ); - return SDL_TRUE; /* always the definitive answer on iOS. */ + const float level = uidev.batteryLevel; + *percent = ( (level < 0.0f) ? -1 : ((int) ((level * 100) + 0.5f)) ); + return SDL_TRUE; /* always the definitive answer on iOS. */ + } } #endif /* SDL_POWER_UIKIT */ diff --git a/Engine/lib/sdl/src/power/windows/SDL_syspower.c b/Engine/lib/sdl/src/power/windows/SDL_syspower.c index 0a247ba026..ff3784ccf6 100644 --- a/Engine/lib/sdl/src/power/windows/SDL_syspower.c +++ b/Engine/lib/sdl/src/power/windows/SDL_syspower.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/power/winrt/SDL_syspower.cpp b/Engine/lib/sdl/src/power/winrt/SDL_syspower.cpp index 8804aec773..94e5a28536 100644 --- a/Engine/lib/sdl/src/power/winrt/SDL_syspower.cpp +++ b/Engine/lib/sdl/src/power/winrt/SDL_syspower.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/SDL_d3dmath.c b/Engine/lib/sdl/src/render/SDL_d3dmath.c index df1dc0ba90..83d67bfa70 100644 --- a/Engine/lib/sdl/src/render/SDL_d3dmath.c +++ b/Engine/lib/sdl/src/render/SDL_d3dmath.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,6 +19,8 @@ 3. This notice may not be removed or altered from any source distribution. */ #include "../SDL_internal.h" + +#if (SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11) && !SDL_RENDER_DISABLED #include "SDL_stdinc.h" #include "SDL_d3dmath.h" @@ -126,6 +128,9 @@ Float4X4 MatrixRotationZ(float r) m._33 = 1.0f; m._44 = 1.0f; return m; + } +#endif /* (SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11) && !SDL_RENDER_DISABLED */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/render/SDL_d3dmath.h b/Engine/lib/sdl/src/render/SDL_d3dmath.h index 206c4350cc..87c44c7a33 100644 --- a/Engine/lib/sdl/src/render/SDL_d3dmath.h +++ b/Engine/lib/sdl/src/render/SDL_d3dmath.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,6 +20,7 @@ */ #include "../SDL_internal.h" +#if (SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11) && !SDL_RENDER_DISABLED /* Direct3D matrix math functions */ @@ -66,4 +67,6 @@ Float4X4 MatrixRotationX(float r); Float4X4 MatrixRotationY(float r); Float4X4 MatrixRotationZ(float r); +#endif /* (SDL_VIDEO_RENDER_D3D || SDL_VIDEO_RENDER_D3D11) && !SDL_RENDER_DISABLED */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/render/SDL_render.c b/Engine/lib/sdl/src/render/SDL_render.c index 1547668f39..923973ec78 100644 --- a/Engine/lib/sdl/src/render/SDL_render.c +++ b/Engine/lib/sdl/src/render/SDL_render.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -115,6 +115,12 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event) } if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) { + /* Make sure we're operating on the default render target */ + SDL_Texture *saved_target = SDL_GetRenderTarget(renderer); + if (saved_target) { + SDL_SetRenderTarget(renderer, NULL); + } + if (renderer->logical_w) { UpdateLogicalSize(renderer); } else { @@ -140,6 +146,10 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event) renderer->UpdateViewport(renderer); } } + + if (saved_target) { + SDL_SetRenderTarget(renderer, saved_target); + } } else if (event->window.event == SDL_WINDOWEVENT_HIDDEN) { renderer->hidden = SDL_TRUE; } else if (event->window.event == SDL_WINDOWEVENT_SHOWN) { @@ -148,14 +158,16 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event) } } else if (event->window.event == SDL_WINDOWEVENT_MINIMIZED) { renderer->hidden = SDL_TRUE; - } else if (event->window.event == SDL_WINDOWEVENT_RESTORED) { + } else if (event->window.event == SDL_WINDOWEVENT_RESTORED || + event->window.event == SDL_WINDOWEVENT_MAXIMIZED) { if (!(SDL_GetWindowFlags(window) & SDL_WINDOW_HIDDEN)) { renderer->hidden = SDL_FALSE; } } } } else if (event->type == SDL_MOUSEMOTION) { - if (renderer->logical_w) { + SDL_Window *window = SDL_GetWindowFromID(event->motion.windowID); + if (renderer->logical_w && window == renderer->window) { event->motion.x -= renderer->viewport.x; event->motion.y -= renderer->viewport.y; event->motion.x = (int)(event->motion.x / renderer->scale.x); @@ -173,7 +185,8 @@ SDL_RendererEventWatch(void *userdata, SDL_Event *event) } } else if (event->type == SDL_MOUSEBUTTONDOWN || event->type == SDL_MOUSEBUTTONUP) { - if (renderer->logical_w) { + SDL_Window *window = SDL_GetWindowFromID(event->button.windowID); + if (renderer->logical_w && window == renderer->window) { event->button.x -= renderer->viewport.x; event->button.y -= renderer->viewport.y; event->button.x = (int)(event->button.x / renderer->scale.x); @@ -350,7 +363,7 @@ SDL_GetRendererOutputSize(SDL_Renderer * renderer, int *w, int *h) SDL_GetWindowSize(renderer->window, w, h); return 0; } else { - /* This should never happen */ + SDL_assert(0 && "This should never happen"); return SDL_SetError("Renderer doesn't support querying output size"); } } @@ -404,6 +417,10 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int if (!format) { format = renderer->info.texture_formats[0]; } + if (SDL_BYTESPERPIXEL(format) == 0) { + SDL_SetError("Invalid texture format"); + return NULL; + } if (SDL_ISPIXELFORMAT_INDEXED(format)) { SDL_SetError("Palettized textures are not supported"); return NULL; @@ -441,7 +458,7 @@ SDL_CreateTexture(SDL_Renderer * renderer, Uint32 format, int access, int w, int if (IsSupportedFormat(renderer, format)) { if (renderer->CreateTexture(renderer, texture) < 0) { SDL_DestroyTexture(texture); - return 0; + return NULL; } } else { texture->native = SDL_CreateTexture(renderer, @@ -536,6 +553,10 @@ SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface) /* Set up a destination surface for the texture update */ dst_fmt = SDL_AllocFormat(format); + if (!dst_fmt) { + SDL_DestroyTexture(texture); + return NULL; + } temp = SDL_ConvertSurface(surface, dst_fmt, 0); SDL_FreeFormat(dst_fmt); if (temp) { @@ -802,7 +823,9 @@ SDL_UpdateTexture(SDL_Texture * texture, const SDL_Rect * rect, rect = &full_rect; } - if (texture->yuv) { + if ((rect->w == 0) || (rect->h == 0)) { + return 0; /* nothing to do. */ + } else if (texture->yuv) { return SDL_UpdateTextureYUV(texture, rect, pixels, pitch); } else if (texture->native) { return SDL_UpdateTextureNative(texture, rect, pixels, pitch); @@ -908,12 +931,12 @@ int SDL_UpdateYUVTexture(SDL_Texture * texture, const SDL_Rect * rect, SDL_assert(!texture->native); renderer = texture->renderer; SDL_assert(renderer->UpdateTextureYUV); - if (renderer->UpdateTextureYUV) { - return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch); - } else { - return SDL_Unsupported(); - } - } + if (renderer->UpdateTextureYUV) { + return renderer->UpdateTextureYUV(renderer, texture, rect, Yplane, Ypitch, Uplane, Upitch, Vplane, Vpitch); + } else { + return SDL_Unsupported(); + } + } } static int @@ -970,8 +993,8 @@ static void SDL_UnlockTextureYUV(SDL_Texture * texture) { SDL_Texture *native = texture->native; - void *native_pixels; - int native_pitch; + void *native_pixels = NULL; + int native_pitch = 0; SDL_Rect rect; rect.x = 0; @@ -991,8 +1014,8 @@ static void SDL_UnlockTextureNative(SDL_Texture * texture) { SDL_Texture *native = texture->native; - void *native_pixels; - int native_pitch; + void *native_pixels = NULL; + int native_pitch = 0; const SDL_Rect *rect = &texture->locked_rect; const void* pixels = (void *) ((Uint8 *) texture->pixels + rect->y * texture->pitch + @@ -1067,6 +1090,7 @@ SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) /* Make a backup of the viewport */ renderer->viewport_backup = renderer->viewport; renderer->clip_rect_backup = renderer->clip_rect; + renderer->clipping_enabled_backup = renderer->clipping_enabled; renderer->scale_backup = renderer->scale; renderer->logical_w_backup = renderer->logical_w; renderer->logical_h_backup = renderer->logical_h; @@ -1089,6 +1113,7 @@ SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) } else { renderer->viewport = renderer->viewport_backup; renderer->clip_rect = renderer->clip_rect_backup; + renderer->clipping_enabled = renderer->clipping_enabled_backup; renderer->scale = renderer->scale_backup; renderer->logical_w = renderer->logical_w_backup; renderer->logical_h = renderer->logical_h_backup; @@ -1113,7 +1138,7 @@ SDL_GetRenderTarget(SDL_Renderer *renderer) static int UpdateLogicalSize(SDL_Renderer *renderer) { - int w, h; + int w = 1, h = 1; float want_aspect; float real_aspect; float scale; @@ -1229,11 +1254,13 @@ SDL_RenderSetClipRect(SDL_Renderer * renderer, const SDL_Rect * rect) CHECK_RENDERER_MAGIC(renderer, -1) if (rect) { + renderer->clipping_enabled = SDL_TRUE; renderer->clip_rect.x = (int)SDL_floor(rect->x * renderer->scale.x); renderer->clip_rect.y = (int)SDL_floor(rect->y * renderer->scale.y); renderer->clip_rect.w = (int)SDL_ceil(rect->w * renderer->scale.x); renderer->clip_rect.h = (int)SDL_ceil(rect->h * renderer->scale.y); } else { + renderer->clipping_enabled = SDL_FALSE; SDL_zero(renderer->clip_rect); } return renderer->UpdateClipRect(renderer); @@ -1252,6 +1279,13 @@ SDL_RenderGetClipRect(SDL_Renderer * renderer, SDL_Rect * rect) } } +SDL_bool +SDL_RenderIsClipEnabled(SDL_Renderer * renderer) +{ + CHECK_RENDERER_MAGIC(renderer, SDL_FALSE) + return renderer->clipping_enabled; +} + int SDL_RenderSetScale(SDL_Renderer * renderer, float scaleX, float scaleY) { @@ -1701,6 +1735,10 @@ SDL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, SDL_FRect frect; SDL_FPoint fcenter; + if (flip == SDL_FLIP_NONE && angle == 0) { /* fast path when we don't need rotation or flipping */ + return SDL_RenderCopy(renderer, texture, srcrect, dstrect); + } + CHECK_RENDERER_MAGIC(renderer, -1); CHECK_TEXTURE_MAGIC(texture, -1); diff --git a/Engine/lib/sdl/src/render/SDL_sysrender.h b/Engine/lib/sdl/src/render/SDL_sysrender.h index 5098d34faf..19dfe8e641 100644 --- a/Engine/lib/sdl/src/render/SDL_sysrender.h +++ b/Engine/lib/sdl/src/render/SDL_sysrender.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -143,6 +143,10 @@ struct SDL_Renderer SDL_Rect clip_rect; SDL_Rect clip_rect_backup; + /* Wether or not the clipping rectangle is used. */ + SDL_bool clipping_enabled; + SDL_bool clipping_enabled_backup; + /* The render output coordinate scale */ SDL_FPoint scale; SDL_FPoint scale_backup; diff --git a/Engine/lib/sdl/src/render/SDL_yuv_mmx.c b/Engine/lib/sdl/src/render/SDL_yuv_mmx.c index e4ae4acbdc..0de776a36e 100644 --- a/Engine/lib/sdl/src/render/SDL_yuv_mmx.c +++ b/Engine/lib/sdl/src/render/SDL_yuv_mmx.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/SDL_yuv_sw.c b/Engine/lib/sdl/src/render/SDL_yuv_sw.c index af685b9d4b..7fc6b88654 100644 --- a/Engine/lib/sdl/src/render/SDL_yuv_sw.c +++ b/Engine/lib/sdl/src/render/SDL_yuv_sw.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -1274,11 +1274,16 @@ SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture * swdata, const SDL_Rect * srcrect, Uint32 target_format, int w, int h, void *pixels, int pitch) { + const int targetbpp = SDL_BYTESPERPIXEL(target_format); int stretch; int scale_2x; Uint8 *lum, *Cr, *Cb; int mod; + if (targetbpp == 0) { + return SDL_SetError("Invalid target pixel format"); + } + /* Make sure we're set up to display in the desired format */ if (target_format != swdata->target_format) { if (SDL_SW_SetupYUVDisplay(swdata, target_format) < 0) { @@ -1366,7 +1371,7 @@ SDL_SW_CopyYUVToRGB(SDL_SW_YUVTexture * swdata, const SDL_Rect * srcrect, default: return SDL_SetError("Unsupported YUV format in copy"); } - mod = (pitch / SDL_BYTESPERPIXEL(target_format)); + mod = (pitch / targetbpp); if (scale_2x) { mod -= (swdata->w * 2); diff --git a/Engine/lib/sdl/src/render/SDL_yuv_sw_c.h b/Engine/lib/sdl/src/render/SDL_yuv_sw_c.h index 6b4044b6d3..2752096f45 100644 --- a/Engine/lib/sdl/src/render/SDL_yuv_sw_c.h +++ b/Engine/lib/sdl/src/render/SDL_yuv_sw_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/direct3d/SDL_render_d3d.c b/Engine/lib/sdl/src/render/direct3d/SDL_render_d3d.c index 24482818de..9d7564224e 100644 --- a/Engine/lib/sdl/src/render/direct3d/SDL_render_d3d.c +++ b/Engine/lib/sdl/src/render/direct3d/SDL_render_d3d.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,6 +41,8 @@ #ifdef ASSEMBLE_SHADER +#pragma comment(lib, "d3dx9.lib") + /************************************************************************** * ID3DXBuffer: * ------------ @@ -124,6 +126,7 @@ static SDL_Renderer *D3D_CreateRenderer(SDL_Window * window, Uint32 flags); static void D3D_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event); static int D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); +static int D3D_RecreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); static int D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, int pitch); @@ -189,13 +192,23 @@ typedef struct typedef struct { + SDL_bool dirty; + int w, h; + DWORD usage; + Uint32 format; IDirect3DTexture9 *texture; + IDirect3DTexture9 *staging; +} D3D_TextureRep; + +typedef struct +{ + D3D_TextureRep texture; D3DTEXTUREFILTERTYPE scaleMode; /* YV12 texture support */ SDL_bool yuv; - IDirect3DTexture9 *utexture; - IDirect3DTexture9 *vtexture; + D3D_TextureRep utexture; + D3D_TextureRep vtexture; Uint8 *pixels; int pitch; SDL_Rect locked_rect; @@ -408,6 +421,8 @@ D3D_Reset(SDL_Renderer * renderer) for (texture = renderer->textures; texture; texture = texture->next) { if (texture->access == SDL_TEXTUREACCESS_TARGET) { D3D_DestroyTexture(renderer, texture); + } else { + D3D_RecreateTexture(renderer, texture); } } @@ -452,15 +467,21 @@ D3D_ActivateRenderer(SDL_Renderer * renderer) if (data->updateSize) { SDL_Window *window = renderer->window; int w, h; + Uint32 window_flags = SDL_GetWindowFlags(window); SDL_GetWindowSize(window, &w, &h); data->pparams.BackBufferWidth = w; data->pparams.BackBufferHeight = h; - if (SDL_GetWindowFlags(window) & SDL_WINDOW_FULLSCREEN) { - data->pparams.BackBufferFormat = - PixelFormatToD3DFMT(SDL_GetWindowPixelFormat(window)); + if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + SDL_DisplayMode fullscreen_mode; + SDL_GetWindowDisplayMode(window, &fullscreen_mode); + data->pparams.Windowed = FALSE; + data->pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode.format); + data->pparams.FullScreen_RefreshRateInHz = fullscreen_mode.refresh_rate; } else { + data->pparams.Windowed = TRUE; data->pparams.BackBufferFormat = D3DFMT_UNKNOWN; + data->pparams.FullScreen_RefreshRateInHz = 0; } if (D3D_Reset(renderer) < 0) { return -1; @@ -555,25 +576,16 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) pparams.hDeviceWindow = windowinfo.info.win.window; pparams.BackBufferWidth = w; pparams.BackBufferHeight = h; - if (window_flags & SDL_WINDOW_FULLSCREEN) { - pparams.BackBufferFormat = - PixelFormatToD3DFMT(fullscreen_mode.format); - } else { - pparams.BackBufferFormat = D3DFMT_UNKNOWN; - } pparams.BackBufferCount = 1; pparams.SwapEffect = D3DSWAPEFFECT_DISCARD; - if (window_flags & SDL_WINDOW_FULLSCREEN) { - if ((window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { - pparams.Windowed = TRUE; - pparams.FullScreen_RefreshRateInHz = 0; - } else { - pparams.Windowed = FALSE; - pparams.FullScreen_RefreshRateInHz = fullscreen_mode.refresh_rate; - } + if (window_flags & SDL_WINDOW_FULLSCREEN && (window_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + pparams.Windowed = FALSE; + pparams.BackBufferFormat = PixelFormatToD3DFMT(fullscreen_mode.format); + pparams.FullScreen_RefreshRateInHz = fullscreen_mode.refresh_rate; } else { pparams.Windowed = TRUE; + pparams.BackBufferFormat = D3DFMT_UNKNOWN; pparams.FullScreen_RefreshRateInHz = 0; } if (flags & SDL_RENDERER_PRESENTVSYNC) { @@ -643,7 +655,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) } /* Store the default render target */ - IDirect3DDevice9_GetRenderTarget(data->device, 0, &data->defaultRenderTarget ); + IDirect3DDevice9_GetRenderTarget(data->device, 0, &data->defaultRenderTarget); data->currentRenderTarget = NULL; /* Set up parameters for rendering */ @@ -682,7 +694,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) PS_OUTPUT YUV420( VS_OUTPUT In ) { - const float3 offset = {-0.0625, -0.5, -0.5}; + const float3 offset = {-0.0627451017, -0.501960814, -0.501960814}; const float3 Rcoeff = {1.164, 0.000, 1.596}; const float3 Gcoeff = {1.164, -0.391, -0.813}; const float3 Bcoeff = {1.164, 2.018, 0.000}; @@ -714,7 +726,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) */ const char *shader_text = "ps_2_0\n" - "def c0, -0.0625, -0.5, -0.5, 1\n" + "def c0, -0.0627451017, -0.501960814, -0.501960814, 1\n" "def c1, 1.16400003, 0, 1.59599996, 0\n" "def c2, 1.16400003, -0.391000003, -0.813000023, 0\n" "def c3, 1.16400003, 2.01799989, 0, 0\n" @@ -751,7 +763,7 @@ D3D_CreateRenderer(SDL_Window * window, Uint32 flags) } #else const DWORD shader_data[] = { - 0xffff0200, 0x05000051, 0xa00f0000, 0xbd800000, 0xbf000000, 0xbf000000, + 0xffff0200, 0x05000051, 0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001, 0x3f94fdf4, 0x00000000, 0x3fcc49ba, 0x00000000, 0x05000051, 0xa00f0002, 0x3f94fdf4, 0xbec83127, 0xbf5020c5, 0x00000000, 0x05000051, 0xa00f0003, 0x3f94fdf4, 0x400126e9, 0x00000000, @@ -805,74 +817,85 @@ GetScaleQuality(void) } static int -D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) +D3D_CreateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, DWORD usage, Uint32 format, int w, int h) { - D3D_RenderData *renderdata = (D3D_RenderData *) renderer->driverdata; - D3D_TextureData *data; - D3DPOOL pool; - DWORD usage; HRESULT result; - data = (D3D_TextureData *) SDL_calloc(1, sizeof(*data)); - if (!data) { - return SDL_OutOfMemory(); + texture->dirty = SDL_FALSE; + texture->w = w; + texture->h = h; + texture->usage = usage; + texture->format = format; + + result = IDirect3DDevice9_CreateTexture(device, w, h, 1, usage, + PixelFormatToD3DFMT(format), + D3DPOOL_DEFAULT, &texture->texture, NULL); + if (FAILED(result)) { + return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); } - data->scaleMode = GetScaleQuality(); + return 0; +} - texture->driverdata = data; -#ifdef USE_DYNAMIC_TEXTURE - if (texture->access == SDL_TEXTUREACCESS_STREAMING) { - pool = D3DPOOL_DEFAULT; - usage = D3DUSAGE_DYNAMIC; - } else -#endif - if (texture->access == SDL_TEXTUREACCESS_TARGET) { - /* D3DPOOL_MANAGED does not work with D3DUSAGE_RENDERTARGET */ - pool = D3DPOOL_DEFAULT; - usage = D3DUSAGE_RENDERTARGET; - } else { - pool = D3DPOOL_MANAGED; - usage = 0; - } +static int +D3D_CreateStagingTexture(IDirect3DDevice9 *device, D3D_TextureRep *texture) +{ + HRESULT result; - result = - IDirect3DDevice9_CreateTexture(renderdata->device, texture->w, - texture->h, 1, usage, - PixelFormatToD3DFMT(texture->format), - pool, &data->texture, NULL); - if (FAILED(result)) { - return D3D_SetError("CreateTexture()", result); + if (texture->staging == NULL) { + result = IDirect3DDevice9_CreateTexture(device, texture->w, texture->h, 1, 0, + PixelFormatToD3DFMT(texture->format), + D3DPOOL_SYSTEMMEM, &texture->staging, NULL); + if (FAILED(result)) { + return D3D_SetError("CreateTexture(D3DPOOL_SYSTEMMEM)", result); + } } + return 0; +} - if (texture->format == SDL_PIXELFORMAT_YV12 || - texture->format == SDL_PIXELFORMAT_IYUV) { - data->yuv = SDL_TRUE; +static int +D3D_BindTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, DWORD sampler) +{ + HRESULT result; - result = - IDirect3DDevice9_CreateTexture(renderdata->device, texture->w / 2, - texture->h / 2, 1, usage, - PixelFormatToD3DFMT(texture->format), - pool, &data->utexture, NULL); - if (FAILED(result)) { - return D3D_SetError("CreateTexture()", result); + if (texture->dirty && texture->staging) { + if (!texture->texture) { + result = IDirect3DDevice9_CreateTexture(device, texture->w, texture->h, 1, texture->usage, + PixelFormatToD3DFMT(texture->format), D3DPOOL_DEFAULT, &texture->texture, NULL); + if (FAILED(result)) { + return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); + } } - result = - IDirect3DDevice9_CreateTexture(renderdata->device, texture->w / 2, - texture->h / 2, 1, usage, - PixelFormatToD3DFMT(texture->format), - pool, &data->vtexture, NULL); + result = IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)texture->staging, (IDirect3DBaseTexture9 *)texture->texture); if (FAILED(result)) { - return D3D_SetError("CreateTexture()", result); + return D3D_SetError("UpdateTexture()", result); } + texture->dirty = SDL_FALSE; } + result = IDirect3DDevice9_SetTexture(device, sampler, (IDirect3DBaseTexture9 *)texture->texture); + if (FAILED(result)) { + return D3D_SetError("SetTexture()", result); + } + return 0; +} +static int +D3D_RecreateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, Uint32 format, int w, int h) +{ + if (texture->texture) { + IDirect3DTexture9_Release(texture->texture); + texture->texture = NULL; + } + if (texture->staging) { + IDirect3DTexture9_AddDirtyRect(texture->staging, NULL); + texture->dirty = SDL_TRUE; + } return 0; } static int -D3D_UpdateTextureInternal(IDirect3DTexture9 *texture, Uint32 format, SDL_bool full_texture, int x, int y, int w, int h, const void *pixels, int pitch) +D3D_UpdateTextureRep(IDirect3DDevice9 *device, D3D_TextureRep *texture, Uint32 format, int x, int y, int w, int h, const void *pixels, int pitch) { RECT d3drect; D3DLOCKED_RECT locked; @@ -881,16 +904,16 @@ D3D_UpdateTextureInternal(IDirect3DTexture9 *texture, Uint32 format, SDL_bool fu int row, length; HRESULT result; - if (full_texture) { - result = IDirect3DTexture9_LockRect(texture, 0, &locked, NULL, D3DLOCK_DISCARD); - } else { - d3drect.left = x; - d3drect.right = x + w; - d3drect.top = y; - d3drect.bottom = y + h; - result = IDirect3DTexture9_LockRect(texture, 0, &locked, &d3drect, 0); + if (D3D_CreateStagingTexture(device, texture) < 0) { + return -1; } + d3drect.left = x; + d3drect.right = x + w; + d3drect.top = y; + d3drect.bottom = y + h; + + result = IDirect3DTexture9_LockRect(texture->staging, 0, &locked, &d3drect, 0); if (FAILED(result)) { return D3D_SetError("LockRect()", result); } @@ -913,46 +936,117 @@ D3D_UpdateTextureInternal(IDirect3DTexture9 *texture, Uint32 format, SDL_bool fu dst += locked.Pitch; } } - IDirect3DTexture9_UnlockRect(texture, 0); + result = IDirect3DTexture9_UnlockRect(texture->staging, 0); + if (FAILED(result)) { + return D3D_SetError("UnlockRect()", result); + } + texture->dirty = SDL_TRUE; return 0; } +static void +D3D_DestroyTextureRep(D3D_TextureRep *texture) +{ + if (texture->texture) { + IDirect3DTexture9_Release(texture->texture); + texture->texture = NULL; + } + if (texture->staging) { + IDirect3DTexture9_Release(texture->staging); + texture->staging = NULL; + } +} + static int -D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, - const SDL_Rect * rect, const void *pixels, int pitch) +D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) { - D3D_TextureData *data = (D3D_TextureData *) texture->driverdata; - SDL_bool full_texture = SDL_FALSE; + D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata; + D3D_TextureData *texturedata; + DWORD usage; -#ifdef USE_DYNAMIC_TEXTURE - if (texture->access == SDL_TEXTUREACCESS_STREAMING && - rect->x == 0 && rect->y == 0 && - rect->w == texture->w && rect->h == texture->h) { - full_texture = SDL_TRUE; + texturedata = (D3D_TextureData *) SDL_calloc(1, sizeof(*texturedata)); + if (!texturedata) { + return SDL_OutOfMemory(); } -#endif + texturedata->scaleMode = GetScaleQuality(); - if (!data) { + texture->driverdata = texturedata; + + if (texture->access == SDL_TEXTUREACCESS_TARGET) { + usage = D3DUSAGE_RENDERTARGET; + } else { + usage = 0; + } + + if (D3D_CreateTextureRep(data->device, &texturedata->texture, usage, texture->format, texture->w, texture->h) < 0) { + return -1; + } + + if (texture->format == SDL_PIXELFORMAT_YV12 || + texture->format == SDL_PIXELFORMAT_IYUV) { + texturedata->yuv = SDL_TRUE; + + if (D3D_CreateTextureRep(data->device, &texturedata->utexture, usage, texture->format, texture->w / 2, texture->h / 2) < 0) { + return -1; + } + + if (D3D_CreateTextureRep(data->device, &texturedata->vtexture, usage, texture->format, texture->w / 2, texture->h / 2) < 0) { + return -1; + } + } + return 0; +} + +static int +D3D_RecreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) +{ + D3D_RenderData *data = (D3D_RenderData *)renderer->driverdata; + D3D_TextureData *texturedata = (D3D_TextureData *)texture->driverdata; + + if (D3D_RecreateTextureRep(data->device, &texturedata->texture, texture->format, texture->w, texture->h) < 0) { + return -1; + } + + if (texturedata->yuv) { + if (D3D_RecreateTextureRep(data->device, &texturedata->utexture, texture->format, texture->w / 2, texture->h / 2) < 0) { + return -1; + } + + if (D3D_RecreateTextureRep(data->device, &texturedata->vtexture, texture->format, texture->w / 2, texture->h / 2) < 0) { + return -1; + } + } + return 0; +} + +static int +D3D_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, + const SDL_Rect * rect, const void *pixels, int pitch) +{ + D3D_RenderData *data = (D3D_RenderData *)renderer->driverdata; + D3D_TextureData *texturedata = (D3D_TextureData *) texture->driverdata; + + if (!texturedata) { SDL_SetError("Texture is not currently available"); return -1; } - if (D3D_UpdateTextureInternal(data->texture, texture->format, full_texture, rect->x, rect->y, rect->w, rect->h, pixels, pitch) < 0) { + if (D3D_UpdateTextureRep(data->device, &texturedata->texture, texture->format, rect->x, rect->y, rect->w, rect->h, pixels, pitch) < 0) { return -1; } - if (data->yuv) { + if (texturedata->yuv) { /* Skip to the correct offset into the next texture */ pixels = (const void*)((const Uint8*)pixels + rect->h * pitch); - if (D3D_UpdateTextureInternal(texture->format == SDL_PIXELFORMAT_YV12 ? data->vtexture : data->utexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, pixels, pitch / 2) < 0) { + if (D3D_UpdateTextureRep(data->device, texture->format == SDL_PIXELFORMAT_YV12 ? &texturedata->vtexture : &texturedata->utexture, texture->format, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, pixels, pitch / 2) < 0) { return -1; } /* Skip to the correct offset into the next texture */ pixels = (const void*)((const Uint8*)pixels + (rect->h * pitch)/4); - if (D3D_UpdateTextureInternal(texture->format == SDL_PIXELFORMAT_YV12 ? data->utexture : data->vtexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, pixels, pitch / 2) < 0) { + if (D3D_UpdateTextureRep(data->device, texture->format == SDL_PIXELFORMAT_YV12 ? &texturedata->utexture : &texturedata->vtexture, texture->format, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, pixels, pitch / 2) < 0) { return -1; } } @@ -966,29 +1060,21 @@ D3D_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture, const Uint8 *Uplane, int Upitch, const Uint8 *Vplane, int Vpitch) { - D3D_TextureData *data = (D3D_TextureData *) texture->driverdata; - SDL_bool full_texture = SDL_FALSE; - -#ifdef USE_DYNAMIC_TEXTURE - if (texture->access == SDL_TEXTUREACCESS_STREAMING && - rect->x == 0 && rect->y == 0 && - rect->w == texture->w && rect->h == texture->h) { - full_texture = SDL_TRUE; - } -#endif + D3D_RenderData *data = (D3D_RenderData *)renderer->driverdata; + D3D_TextureData *texturedata = (D3D_TextureData *) texture->driverdata; - if (!data) { + if (!texturedata) { SDL_SetError("Texture is not currently available"); return -1; } - if (D3D_UpdateTextureInternal(data->texture, texture->format, full_texture, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch) < 0) { + if (D3D_UpdateTextureRep(data->device, &texturedata->texture, texture->format, rect->x, rect->y, rect->w, rect->h, Yplane, Ypitch) < 0) { return -1; } - if (D3D_UpdateTextureInternal(data->utexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch) < 0) { + if (D3D_UpdateTextureRep(data->device, &texturedata->utexture, texture->format, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Uplane, Upitch) < 0) { return -1; } - if (D3D_UpdateTextureInternal(data->vtexture, texture->format, full_texture, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch) < 0) { + if (D3D_UpdateTextureRep(data->device, &texturedata->vtexture, texture->format, rect->x / 2, rect->y / 2, rect->w / 2, rect->h / 2, Vplane, Vpitch) < 0) { return -1; } return 0; @@ -998,37 +1084,45 @@ static int D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * rect, void **pixels, int *pitch) { - D3D_TextureData *data = (D3D_TextureData *) texture->driverdata; - RECT d3drect; - D3DLOCKED_RECT locked; - HRESULT result; + D3D_RenderData *data = (D3D_RenderData *)renderer->driverdata; + D3D_TextureData *texturedata = (D3D_TextureData *)texture->driverdata; + IDirect3DDevice9 *device = data->device; - if (!data) { + if (!texturedata) { SDL_SetError("Texture is not currently available"); return -1; } - if (data->yuv) { + texturedata->locked_rect = *rect; + + if (texturedata->yuv) { /* It's more efficient to upload directly... */ - if (!data->pixels) { - data->pitch = texture->w; - data->pixels = (Uint8 *)SDL_malloc((texture->h * data->pitch * 3) / 2); - if (!data->pixels) { + if (!texturedata->pixels) { + texturedata->pitch = texture->w; + texturedata->pixels = (Uint8 *)SDL_malloc((texture->h * texturedata->pitch * 3) / 2); + if (!texturedata->pixels) { return SDL_OutOfMemory(); } } - data->locked_rect = *rect; *pixels = - (void *) ((Uint8 *) data->pixels + rect->y * data->pitch + + (void *) ((Uint8 *) texturedata->pixels + rect->y * texturedata->pitch + rect->x * SDL_BYTESPERPIXEL(texture->format)); - *pitch = data->pitch; + *pitch = texturedata->pitch; } else { + RECT d3drect; + D3DLOCKED_RECT locked; + HRESULT result; + + if (D3D_CreateStagingTexture(device, &texturedata->texture) < 0) { + return -1; + } + d3drect.left = rect->x; d3drect.right = rect->x + rect->w; d3drect.top = rect->y; d3drect.bottom = rect->y + rect->h; - result = IDirect3DTexture9_LockRect(data->texture, 0, &locked, &d3drect, 0); + result = IDirect3DTexture9_LockRect(texturedata->texture.staging, 0, &locked, &d3drect, 0); if (FAILED(result)) { return D3D_SetError("LockRect()", result); } @@ -1041,21 +1135,23 @@ D3D_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture, static void D3D_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture) { - D3D_TextureData *data = (D3D_TextureData *) texture->driverdata; + /*D3D_RenderData *data = (D3D_RenderData *)renderer->driverdata;*/ + D3D_TextureData *texturedata = (D3D_TextureData *)texture->driverdata; - if (!data) { + if (!texturedata) { return; } - if (data->yuv) { - const SDL_Rect *rect = &data->locked_rect; + if (texturedata->yuv) { + const SDL_Rect *rect = &texturedata->locked_rect; void *pixels = - (void *) ((Uint8 *) data->pixels + rect->y * data->pitch + + (void *) ((Uint8 *) texturedata->pixels + rect->y * texturedata->pitch + rect->x * SDL_BYTESPERPIXEL(texture->format)); - D3D_UpdateTexture(renderer, texture, rect, pixels, data->pitch); + D3D_UpdateTexture(renderer, texture, rect, pixels, texturedata->pitch); } else { - IDirect3DTexture9_UnlockRect(data->texture, 0); - } + IDirect3DTexture9_UnlockRect(texturedata->texture.staging, 0); + texturedata->texture.dirty = SDL_TRUE; + } } static int @@ -1063,7 +1159,9 @@ D3D_SetRenderTargetInternal(SDL_Renderer * renderer, SDL_Texture * texture) { D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata; D3D_TextureData *texturedata; + D3D_TextureRep *texturerep; HRESULT result; + IDirect3DDevice9 *device = data->device; /* Release the previous render target if it wasn't the default one */ if (data->currentRenderTarget != NULL) { @@ -1082,7 +1180,25 @@ D3D_SetRenderTargetInternal(SDL_Renderer * renderer, SDL_Texture * texture) return -1; } - result = IDirect3DTexture9_GetSurfaceLevel(texturedata->texture, 0, &data->currentRenderTarget); + /* Make sure the render target is updated if it was locked and written to */ + texturerep = &texturedata->texture; + if (texturerep->dirty && texturerep->staging) { + if (!texturerep->texture) { + result = IDirect3DDevice9_CreateTexture(device, texturerep->w, texturerep->h, 1, texturerep->usage, + PixelFormatToD3DFMT(texturerep->format), D3DPOOL_DEFAULT, &texturerep->texture, NULL); + if (FAILED(result)) { + return D3D_SetError("CreateTexture(D3DPOOL_DEFAULT)", result); + } + } + + result = IDirect3DDevice9_UpdateTexture(device, (IDirect3DBaseTexture9 *)texturerep->staging, (IDirect3DBaseTexture9 *)texturerep->texture); + if (FAILED(result)) { + return D3D_SetError("UpdateTexture()", result); + } + texturerep->dirty = SDL_FALSE; + } + + result = IDirect3DTexture9_GetSurfaceLevel(texturedata->texture.texture, 0, &data->currentRenderTarget); if(FAILED(result)) { return D3D_SetError("GetSurfaceLevel()", result); } @@ -1145,17 +1261,18 @@ D3D_UpdateViewport(SDL_Renderer * renderer) static int D3D_UpdateClipRect(SDL_Renderer * renderer) { - const SDL_Rect *rect = &renderer->clip_rect; D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata; - RECT r; - HRESULT result; - if (!SDL_RectEmpty(rect)) { + if (renderer->clipping_enabled) { + const SDL_Rect *rect = &renderer->clip_rect; + RECT r; + HRESULT result; + IDirect3DDevice9_SetRenderState(data->device, D3DRS_SCISSORTESTENABLE, TRUE); - r.left = rect->x; - r.top = rect->y; - r.right = rect->x + rect->w; - r.bottom = rect->y + rect->h; + r.left = renderer->viewport.x + rect->x; + r.top = renderer->viewport.y + rect->y; + r.right = renderer->viewport.x + rect->x + rect->w; + r.bottom = renderer->viewport.y + rect->y + rect->h; result = IDirect3DDevice9_SetScissorRect(data->device, &r); if (result != D3D_OK) { @@ -1527,11 +1644,8 @@ D3D_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, D3D_UpdateTextureScaleMode(data, texturedata, 0); - result = - IDirect3DDevice9_SetTexture(data->device, 0, (IDirect3DBaseTexture9 *) - texturedata->texture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + if (D3D_BindTextureRep(data->device, &texturedata->texture, 0) < 0) { + return -1; } if (texturedata->yuv) { @@ -1540,18 +1654,11 @@ D3D_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, D3D_UpdateTextureScaleMode(data, texturedata, 1); D3D_UpdateTextureScaleMode(data, texturedata, 2); - result = - IDirect3DDevice9_SetTexture(data->device, 1, (IDirect3DBaseTexture9 *) - texturedata->utexture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + if (D3D_BindTextureRep(data->device, &texturedata->utexture, 1) < 0) { + return -1; } - - result = - IDirect3DDevice9_SetTexture(data->device, 2, (IDirect3DBaseTexture9 *) - texturedata->vtexture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + if (D3D_BindTextureRep(data->device, &texturedata->vtexture, 2) < 0) { + return -1; } } @@ -1665,16 +1772,13 @@ D3D_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, modelMatrix = MatrixMultiply( MatrixRotationZ((float)(M_PI * (float) angle / 180.0f)), MatrixTranslation(dstrect->x + center->x, dstrect->y + center->y, 0) - ); +); IDirect3DDevice9_SetTransform(data->device, D3DTS_VIEW, (D3DMATRIX*)&modelMatrix); D3D_UpdateTextureScaleMode(data, texturedata, 0); - result = - IDirect3DDevice9_SetTexture(data->device, 0, (IDirect3DBaseTexture9 *) - texturedata->texture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + if (D3D_BindTextureRep(data->device, &texturedata->texture, 0) < 0) { + return -1; } if (texturedata->yuv) { @@ -1682,19 +1786,12 @@ D3D_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, D3D_UpdateTextureScaleMode(data, texturedata, 1); D3D_UpdateTextureScaleMode(data, texturedata, 2); - - result = - IDirect3DDevice9_SetTexture(data->device, 1, (IDirect3DBaseTexture9 *) - texturedata->utexture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + + if (D3D_BindTextureRep(data->device, &texturedata->utexture, 1) < 0) { + return -1; } - - result = - IDirect3DDevice9_SetTexture(data->device, 2, (IDirect3DBaseTexture9 *) - texturedata->vtexture); - if (FAILED(result)) { - return D3D_SetError("SetTexture()", result); + if (D3D_BindTextureRep(data->device, &texturedata->vtexture, 2) < 0) { + return -1; } } @@ -1734,9 +1831,10 @@ D3D_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, D3DLOCKED_RECT locked; HRESULT result; - result = IDirect3DDevice9_GetBackBuffer(data->device, 0, 0, D3DBACKBUFFER_TYPE_MONO, &backBuffer); - if (FAILED(result)) { - return D3D_SetError("GetBackBuffer()", result); + if (data->currentRenderTarget) { + backBuffer = data->currentRenderTarget; + } else { + backBuffer = data->defaultRenderTarget; } result = IDirect3DSurface9_GetDesc(backBuffer, &desc); @@ -1777,7 +1875,6 @@ D3D_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, IDirect3DSurface9_UnlockRect(surface); IDirect3DSurface9_Release(surface); - IDirect3DSurface9_Release(backBuffer); return 0; } @@ -1815,15 +1912,9 @@ D3D_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture) if (!data) { return; } - if (data->texture) { - IDirect3DTexture9_Release(data->texture); - } - if (data->utexture) { - IDirect3DTexture9_Release(data->utexture); - } - if (data->vtexture) { - IDirect3DTexture9_Release(data->vtexture); - } + D3D_DestroyTextureRep(&data->texture); + D3D_DestroyTextureRep(&data->utexture); + D3D_DestroyTextureRep(&data->vtexture); SDL_free(data->pixels); SDL_free(data); texture->driverdata = NULL; @@ -1870,7 +1961,7 @@ SDL_RenderGetD3D9Device(SDL_Renderer * renderer) #if SDL_VIDEO_RENDER_D3D && !SDL_RENDER_DISABLED D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata; - // Make sure that this is a D3D renderer + /* Make sure that this is a D3D renderer */ if (renderer->DestroyRenderer != D3D_DestroyRenderer) { SDL_SetError("Renderer is not a D3D renderer"); return NULL; diff --git a/Engine/lib/sdl/src/render/direct3d11/SDL_render_d3d11.c b/Engine/lib/sdl/src/render/direct3d11/SDL_render_d3d11.c index dbffd50537..a48eacee73 100644 --- a/Engine/lib/sdl/src/render/direct3d11/SDL_render_d3d11.c +++ b/Engine/lib/sdl/src/render/direct3d11/SDL_render_d3d11.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,12 +29,17 @@ #include "SDL_syswm.h" #include "../SDL_sysrender.h" #include "../SDL_d3dmath.h" +/* #include "SDL_log.h" */ #include #ifdef __WINRT__ +#if NTDDI_VERSION > NTDDI_WIN8 +#include +#endif + #include "SDL_render_winrt.h" #if WINAPI_FAMILY == WINAPI_FAMILY_APP @@ -134,6 +139,7 @@ typedef struct /* Defined here so we don't have to include uuid.lib */ static const GUID IID_IDXGIFactory2 = { 0x50c83a1c, 0xe072, 0x4c48, { 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0 } }; static const GUID IID_IDXGIDevice1 = { 0x77db970f, 0x6276, 0x48ba, { 0xba, 0x28, 0x07, 0x01, 0x43, 0xb4, 0x39, 0x2c } }; +static const GUID IID_IDXGIDevice3 = { 0x6007896c, 0x3244, 0x4afd, { 0xbf, 0x18, 0xa6, 0xd3, 0xbe, 0xda, 0x50, 0x23 } }; static const GUID IID_ID3D11Texture2D = { 0x6f15aaf2, 0xd208, 0x4e89, { 0x9a, 0xb4, 0x48, 0x95, 0x35, 0xd3, 0x4f, 0x9c } }; static const GUID IID_ID3D11Device1 = { 0xa04bfb29, 0x08ef, 0x43d6, { 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86 } }; static const GUID IID_ID3D11DeviceContext1 = { 0xbb2c6faa, 0xb5fb, 0x4082, { 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1 } }; @@ -357,7 +363,7 @@ static const DWORD D3D11_PixelShader_Textures[] = { float4 main(PixelShaderInput input) : SV_TARGET { - const float3 offset = {-0.0625, -0.5, -0.5}; + const float3 offset = {-0.0627451017, -0.501960814, -0.501960814}; const float3 Rcoeff = {1.164, 0.000, 1.596}; const float3 Gcoeff = {1.164, -0.391, -0.813}; const float3 Bcoeff = {1.164, 2.018, 0.000}; @@ -381,12 +387,12 @@ static const DWORD D3D11_PixelShader_Textures[] = { */ #if defined(D3D11_USE_SHADER_MODEL_4_0_level_9_1) static const DWORD D3D11_PixelShader_YUV[] = { - 0x43425844, 0x04e69cba, 0x74ce6dd2, 0x7fcf84cb, 0x3003d677, 0x00000001, + 0x43425844, 0x2321c6c6, 0xf14df2d1, 0xc79d068d, 0x8e672abf, 0x00000001, 0x000005e8, 0x00000006, 0x00000038, 0x000001dc, 0x000003bc, 0x00000438, 0x00000540, 0x000005b4, 0x396e6f41, 0x0000019c, 0x0000019c, 0xffff0200, 0x0000016c, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003, 0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0200, 0x05000051, - 0xa00f0000, 0xbd800000, 0xbf000000, 0xbf000000, 0x3f800000, 0x05000051, + 0xa00f0000, 0xbd808081, 0xbf008081, 0xbf008081, 0x3f800000, 0x05000051, 0xa00f0001, 0x3f94fdf4, 0x3fcc49ba, 0x00000000, 0x00000000, 0x05000051, 0xa00f0002, 0x3f94fdf4, 0xbec83127, 0xbf5020c5, 0x00000000, 0x05000051, 0xa00f0003, 0x3f94fdf4, 0x400126e9, 0x00000000, 0x00000000, 0x0200001f, @@ -413,7 +419,7 @@ static const DWORD D3D11_PixelShader_YUV[] = { 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000002, 0x00106000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246, 0x00000000, 0x00004002, - 0xbd800000, 0xbf000000, 0xbf000000, 0x00000000, 0x0a00000f, 0x00100012, + 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f94fdf4, 0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f94fdf4, 0xbec83127, 0xbf5020c5, 0x00000000, @@ -447,12 +453,12 @@ static const DWORD D3D11_PixelShader_YUV[] = { }; #elif defined(D3D11_USE_SHADER_MODEL_4_0_level_9_3) static const DWORD D3D11_PixelShader_YUV[] = { - 0x43425844, 0xe6d969fc, 0x63cac33c, 0xa4926502, 0x5d788135, 0x00000001, + 0x43425844, 0x6ede7360, 0x45ff5f8a, 0x34ac92ba, 0xb865f5e0, 0x00000001, 0x000005c0, 0x00000006, 0x00000038, 0x000001b4, 0x00000394, 0x00000410, 0x00000518, 0x0000058c, 0x396e6f41, 0x00000174, 0x00000174, 0xffff0200, 0x00000144, 0x00000030, 0x00300000, 0x00300000, 0x00300000, 0x00240003, 0x00300000, 0x00000000, 0x00010001, 0x00020002, 0xffff0201, 0x05000051, - 0xa00f0000, 0xbd800000, 0xbf000000, 0x3f800000, 0x00000000, 0x05000051, + 0xa00f0000, 0xbd808081, 0xbf008081, 0x3f800000, 0x00000000, 0x05000051, 0xa00f0001, 0x3f94fdf4, 0x3fcc49ba, 0x00000000, 0x400126e9, 0x05000051, 0xa00f0002, 0x3f94fdf4, 0xbec83127, 0xbf5020c5, 0x00000000, 0x0200001f, 0x80000000, 0xb0030000, 0x0200001f, 0x80000000, 0xb00f0001, 0x0200001f, @@ -477,7 +483,7 @@ static const DWORD D3D11_PixelShader_YUV[] = { 0x09000045, 0x001000f2, 0x00000001, 0x00101046, 0x00000001, 0x00107e46, 0x00000002, 0x00106000, 0x00000000, 0x05000036, 0x00100042, 0x00000000, 0x0010000a, 0x00000001, 0x0a000000, 0x00100072, 0x00000000, 0x00100246, - 0x00000000, 0x00004002, 0xbd800000, 0xbf000000, 0xbf000000, 0x00000000, + 0x00000000, 0x00004002, 0xbd808081, 0xbf008081, 0xbf008081, 0x00000000, 0x0a00000f, 0x00100012, 0x00000001, 0x00100086, 0x00000000, 0x00004002, 0x3f94fdf4, 0x3fcc49ba, 0x00000000, 0x00000000, 0x0a000010, 0x00100022, 0x00000001, 0x00100246, 0x00000000, 0x00004002, 0x3f94fdf4, 0xbec83127, @@ -754,8 +760,8 @@ SDL_RenderDriver D3D11_RenderDriver = { }; -static Uint32 -DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) { +Uint32 +D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat) { switch (dxgiFormat) { case DXGI_FORMAT_B8G8R8A8_UNORM: return SDL_PIXELFORMAT_ARGB8888; @@ -823,9 +829,24 @@ D3D11_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE); renderer->driverdata = data; +#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP + /* VSync is required in Windows Phone, at least for Win Phone 8.0 and 8.1. + * Failure to use it seems to either result in: + * + * - with the D3D11 debug runtime turned OFF, vsync seemingly gets turned + * off (framerate doesn't get capped), but nothing appears on-screen + * + * - with the D3D11 debug runtime turned ON, vsync gets automatically + * turned back on, and the following gets output to the debug console: + * + * DXGI ERROR: IDXGISwapChain::Present: Interval 0 is not supported, changed to Interval 1. [ UNKNOWN ERROR #1024: ] + */ + renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; +#else if ((flags & SDL_RENDERER_PRESENTVSYNC)) { renderer->info.flags |= SDL_RENDERER_PRESENTVSYNC; } +#endif /* HACK: make sure the SDL_Renderer references the SDL_Window data now, in * order to give init functions access to the underlying window handle: @@ -846,10 +867,17 @@ D3D11_CreateRenderer(SDL_Window * window, Uint32 flags) } static void -D3D11_DestroyRenderer(SDL_Renderer * renderer) +D3D11_ReleaseAll(SDL_Renderer * renderer) { D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; + SDL_Texture *texture = NULL; + + /* Release all textures */ + for (texture = renderer->textures; texture; texture = texture->next) { + D3D11_DestroyTexture(renderer, texture); + } + /* Release/reset everything else */ if (data) { SAFE_RELEASE(data->dxgiFactory); SAFE_RELEASE(data->dxgiAdapter); @@ -873,12 +901,35 @@ D3D11_DestroyRenderer(SDL_Renderer * renderer) SAFE_RELEASE(data->clippedRasterizer); SAFE_RELEASE(data->vertexShaderConstants); + data->swapEffect = (DXGI_SWAP_EFFECT) 0; + data->rotation = DXGI_MODE_ROTATION_UNSPECIFIED; + data->currentRenderTargetView = NULL; + data->currentRasterizerState = NULL; + data->currentBlendState = NULL; + data->currentShader = NULL; + data->currentShaderResource = NULL; + data->currentSampler = NULL; + + /* Unload the D3D libraries. This should be done last, in order + * to prevent IUnknown::Release() calls from crashing. + */ if (data->hD3D11Mod) { SDL_UnloadObject(data->hD3D11Mod); + data->hD3D11Mod = NULL; } if (data->hDXGIMod) { SDL_UnloadObject(data->hDXGIMod); + data->hDXGIMod = NULL; } + } +} + +static void +D3D11_DestroyRenderer(SDL_Renderer * renderer) +{ + D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; + D3D11_ReleaseAll(renderer); + if (data) { SDL_free(data); } SDL_free(renderer); @@ -1294,15 +1345,33 @@ D3D11_IsDisplayRotated90Degrees(DXGI_MODE_ROTATION rotation) } static int -D3D11_GetViewportAlignedD3DRect(SDL_Renderer * renderer, const SDL_Rect * sdlRect, D3D11_RECT * outRect) +D3D11_GetRotationForCurrentRenderTarget(SDL_Renderer * renderer) +{ + D3D11_RenderData *data = (D3D11_RenderData *)renderer->driverdata; + if (data->currentOffscreenRenderTargetView) { + return DXGI_MODE_ROTATION_IDENTITY; + } else { + return data->rotation; + } +} + +static int +D3D11_GetViewportAlignedD3DRect(SDL_Renderer * renderer, const SDL_Rect * sdlRect, D3D11_RECT * outRect, BOOL includeViewportOffset) { D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; - switch (data->rotation) { + const int rotation = D3D11_GetRotationForCurrentRenderTarget(renderer); + switch (rotation) { case DXGI_MODE_ROTATION_IDENTITY: outRect->left = sdlRect->x; outRect->right = sdlRect->x + sdlRect->w; outRect->top = sdlRect->y; outRect->bottom = sdlRect->y + sdlRect->h; + if (includeViewportOffset) { + outRect->left += renderer->viewport.x; + outRect->right += renderer->viewport.x; + outRect->top += renderer->viewport.y; + outRect->bottom += renderer->viewport.y; + } break; case DXGI_MODE_ROTATION_ROTATE270: outRect->left = sdlRect->y; @@ -1355,6 +1424,7 @@ D3D11_CreateSwapChain(SDL_Renderer * renderer, int w, int h) #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP swapChainDesc.Scaling = DXGI_SCALING_STRETCH; /* On phone, only stretch and aspect-ratio stretch scaling are allowed. */ swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; /* On phone, no swap effects are supported. */ + /* TODO, WinRT: see if Win 8.x DXGI_SWAP_CHAIN_DESC1 settings are available on Windows Phone 8.1, and if there's any advantage to having them on */ #else if (usingXAML) { swapChainDesc.Scaling = DXGI_SCALING_STRETCH; @@ -1417,6 +1487,8 @@ D3D11_CreateSwapChain(SDL_Renderer * renderer, int w, int h) WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIFactory2::CreateSwapChainForHwnd", result); goto done; } + + IDXGIFactory_MakeWindowAssociation(data->dxgiFactory, windowinfo.info.win.window, DXGI_MWA_NO_WINDOW_CHANGES); #else SDL_SetError(__FUNCTION__", Unable to find something to attach a swap chain to"); goto done; @@ -1447,6 +1519,7 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer) */ SDL_GetWindowSize(renderer->window, &w, &h); data->rotation = D3D11_GetCurrentRotation(); + /* SDL_Log("%s: windowSize={%d,%d}, orientation=%d\n", __FUNCTION__, w, h, (int)data->rotation); */ if (D3D11_IsDisplayRotated90Degrees(data->rotation)) { int tmp = w; w = h; @@ -1463,7 +1536,15 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer) DXGI_FORMAT_UNKNOWN, 0 ); - if (FAILED(result)) { + if (result == DXGI_ERROR_DEVICE_REMOVED) { + /* If the device was removed for any reason, a new device and swap chain will need to be created. */ + D3D11_HandleDeviceLost(renderer); + + /* Everything is set up now. Do not continue execution of this method. HandleDeviceLost will reenter this method + * and correctly set up the new device. + */ + goto done; + } else if (FAILED(result)) { WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGISwapChain::ResizeBuffers", result); goto done; } @@ -1476,11 +1557,21 @@ D3D11_CreateWindowSizeDependentResources(SDL_Renderer * renderer) } #if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP - /* Set the proper rotation for the swap chain, and generate the - * 3D matrix transformation for rendering to the rotated swap chain. + /* Set the proper rotation for the swap chain. * * To note, the call for this, IDXGISwapChain1::SetRotation, is not necessary - * on Windows Phone, nor is it supported there. It's only needed in Windows 8/RT. + * on Windows Phone 8.0, nor is it supported there. + * + * IDXGISwapChain1::SetRotation does seem to be available on Windows Phone 8.1, + * however I've yet to find a way to make it work. It might have something to + * do with IDXGISwapChain::ResizeBuffers appearing to not being available on + * Windows Phone 8.1 (it wasn't on Windows Phone 8.0), but I'm not 100% sure of this. + * The call doesn't appear to be entirely necessary though, and is a performance-related + * call, at least according to the following page on MSDN: + * http://code.msdn.microsoft.com/windowsapps/DXGI-swap-chain-rotation-21d13d71 + * -- David L. + * + * TODO, WinRT: reexamine the docs for IDXGISwapChain1::SetRotation, see if might be available, usable, and prudent-to-call on WinPhone 8.1 */ if (data->swapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL) { result = IDXGISwapChain1_SetRotation(data->swapChain, data->rotation); @@ -1537,7 +1628,7 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer) D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; HRESULT result = S_OK; - /* FIXME: Need to release all resources - all textures are invalid! */ + D3D11_ReleaseAll(renderer); result = D3D11_CreateDeviceResources(renderer); if (FAILED(result)) { @@ -1551,9 +1642,37 @@ D3D11_HandleDeviceLost(SDL_Renderer * renderer) return result; } + /* Let the application know that the device has been reset */ + { + SDL_Event event; + event.type = SDL_RENDER_DEVICE_RESET; + SDL_PushEvent(&event); + } + return S_OK; } +void +D3D11_Trim(SDL_Renderer * renderer) +{ +#ifdef __WINRT__ +#if NTDDI_VERSION > NTDDI_WIN8 + D3D11_RenderData *data = (D3D11_RenderData *)renderer->driverdata; + HRESULT result = S_OK; + IDXGIDevice3 *dxgiDevice = NULL; + + result = ID3D11Device_QueryInterface(data->d3dDevice, &IID_IDXGIDevice3, &dxgiDevice); + if (FAILED(result)) { + //WIN_SetErrorFromHRESULT(__FUNCTION__ ", ID3D11Device to IDXGIDevice3", result); + return; + } + + IDXGIDevice3_Trim(dxgiDevice); + SAFE_RELEASE(dxgiDevice); +#endif +#endif +} + static void D3D11_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) { @@ -2065,12 +2184,14 @@ D3D11_UpdateViewport(SDL_Renderer * renderer) SDL_FRect orientationAlignedViewport; BOOL swapDimensions; D3D11_VIEWPORT viewport; + const int rotation = D3D11_GetRotationForCurrentRenderTarget(renderer); if (renderer->viewport.w == 0 || renderer->viewport.h == 0) { /* If the viewport is empty, assume that it is because * SDL_CreateRenderer is calling it, and will call it again later * with a non-empty viewport. */ + /* SDL_Log("%s, no viewport was set!\n", __FUNCTION__); */ return 0; } @@ -2079,7 +2200,7 @@ D3D11_UpdateViewport(SDL_Renderer * renderer) * default coordinate system) so rotations will be done in the opposite * direction of the DXGI_MODE_ROTATION enumeration. */ - switch (data->rotation) { + switch (rotation) { case DXGI_MODE_ROTATION_IDENTITY: projection = MatrixIdentity(); break; @@ -2130,7 +2251,7 @@ D3D11_UpdateViewport(SDL_Renderer * renderer) * a landscape mode, for all Windows 8/RT devices, or a portrait mode, * for Windows Phone devices. */ - swapDimensions = D3D11_IsDisplayRotated90Degrees(data->rotation); + swapDimensions = D3D11_IsDisplayRotated90Degrees(rotation); if (swapDimensions) { orientationAlignedViewport.x = (float) renderer->viewport.y; orientationAlignedViewport.y = (float) renderer->viewport.x; @@ -2150,6 +2271,7 @@ D3D11_UpdateViewport(SDL_Renderer * renderer) viewport.Height = orientationAlignedViewport.h; viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; + /* SDL_Log("%s: D3D viewport = {%f,%f,%f,%f}\n", __FUNCTION__, viewport.TopLeftX, viewport.TopLeftY, viewport.Width, viewport.Height); */ ID3D11DeviceContext_RSSetViewports(data->d3dContext, 1, &viewport); return 0; @@ -2159,13 +2281,12 @@ static int D3D11_UpdateClipRect(SDL_Renderer * renderer) { D3D11_RenderData *data = (D3D11_RenderData *) renderer->driverdata; - const SDL_Rect *rect = &renderer->clip_rect; - if (SDL_RectEmpty(rect)) { + if (!renderer->clipping_enabled) { ID3D11DeviceContext_RSSetScissorRects(data->d3dContext, 0, NULL); } else { D3D11_RECT scissorRect; - if (D3D11_GetViewportAlignedD3DRect(renderer, rect, &scissorRect) != 0) { + if (D3D11_GetViewportAlignedD3DRect(renderer, &renderer->clip_rect, &scissorRect, TRUE) != 0) { /* D3D11_GetViewportAlignedD3DRect will have set the SDL error */ return -1; } @@ -2246,7 +2367,7 @@ D3D11_UpdateVertexBuffer(SDL_Renderer *renderer, } else { SAFE_RELEASE(rendererData->vertexBuffer); - vertexBufferDesc.ByteWidth = dataSizeInBytes; + vertexBufferDesc.ByteWidth = (UINT) dataSizeInBytes; vertexBufferDesc.Usage = D3D11_USAGE_DYNAMIC; vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER; vertexBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; @@ -2293,7 +2414,7 @@ D3D11_RenderStartDrawOp(SDL_Renderer * renderer) rendererData->currentRenderTargetView = renderTargetView; } - if (SDL_RectEmpty(&renderer->clip_rect)) { + if (!renderer->clipping_enabled) { rasterizerState = rendererData->mainRasterizer; } else { rasterizerState = rendererData->clippedRasterizer; @@ -2383,7 +2504,7 @@ D3D11_RenderDrawPoints(SDL_Renderer * renderer, a = (float)(renderer->a / 255.0f); vertices = SDL_stack_alloc(VertexPositionColor, count); - for (i = 0; i < min(count, 128); ++i) { + for (i = 0; i < count; ++i) { const VertexPositionColor v = { { points[i].x, points[i].y, 0.0f }, { 0.0f, 0.0f }, { r, g, b, a } }; vertices[i] = v; } @@ -2754,7 +2875,7 @@ D3D11_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, } /* Copy the desired portion of the back buffer to the staging texture: */ - if (D3D11_GetViewportAlignedD3DRect(renderer, rect, &srcRect) != 0) { + if (D3D11_GetViewportAlignedD3DRect(renderer, rect, &srcRect, FALSE) != 0) { /* D3D11_GetViewportAlignedD3DRect will have set the SDL error */ goto done; } @@ -2790,7 +2911,7 @@ D3D11_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, */ if (SDL_ConvertPixels( rect->w, rect->h, - DXGIFormatToSDLPixelFormat(stagingTextureDesc.Format), + D3D11_DXGIFormatToSDLPixelFormat(stagingTextureDesc.Format), textureMemory.pData, textureMemory.RowPitch, format, @@ -2801,7 +2922,7 @@ D3D11_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, */ char errorMessage[1024]; SDL_snprintf(errorMessage, sizeof(errorMessage), __FUNCTION__ ", Convert Pixels failed: %s", SDL_GetError()); - SDL_SetError(errorMessage); + SDL_SetError("%s", errorMessage); goto done; } @@ -2827,6 +2948,8 @@ D3D11_RenderPresent(SDL_Renderer * renderer) HRESULT result; DXGI_PRESENT_PARAMETERS parameters; + SDL_zero(parameters); + #if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP syncInterval = 1; presentFlags = 0; @@ -2844,7 +2967,6 @@ D3D11_RenderPresent(SDL_Renderer * renderer) * rects to improve efficiency in certain scenarios. * This option is not available on Windows Phone 8, to note. */ - SDL_zero(parameters); result = IDXGISwapChain1_Present1(data->swapChain, syncInterval, presentFlags, ¶meters); #endif diff --git a/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.cpp b/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.cpp index 9ed67fd295..99f2b4ea42 100644 --- a/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.cpp +++ b/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,6 +23,7 @@ #if SDL_VIDEO_RENDER_D3D11 && !SDL_RENDER_DISABLED #include "SDL_syswm.h" +#include "../../video/winrt/SDL_winrtvideo_cpp.h" extern "C" { #include "../SDL_sysrender.h" } @@ -79,11 +80,7 @@ D3D11_GetCoreWindowFromSDLRenderer(SDL_Renderer * renderer) extern "C" DXGI_MODE_ROTATION D3D11_GetCurrentRotation() { -#if NTDDI_VERSION > NTDDI_WIN8 - const DisplayOrientations currentOrientation = DisplayInformation::GetForCurrentView()->CurrentOrientation; -#else - const DisplayOrientations currentOrientation = DisplayProperties::CurrentOrientation; -#endif + const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation); switch (currentOrientation) { diff --git a/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.h b/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.h index 66a3220d8f..734ebf41aa 100644 --- a/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.h +++ b/Engine/lib/sdl/src/render/direct3d11/SDL_render_winrt.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/opengl/SDL_glfuncs.h b/Engine/lib/sdl/src/render/opengl/SDL_glfuncs.h index fefbdd2686..c8eba583cb 100644 --- a/Engine/lib/sdl/src/render/opengl/SDL_glfuncs.h +++ b/Engine/lib/sdl/src/render/opengl/SDL_glfuncs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/opengl/SDL_render_gl.c b/Engine/lib/sdl/src/render/opengl/SDL_render_gl.c index 8a0e377b33..6a4fa3ecf2 100644 --- a/Engine/lib/sdl/src/render/opengl/SDL_render_gl.c +++ b/Engine/lib/sdl/src/render/opengl/SDL_render_gl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,6 +24,7 @@ #include "SDL_hints.h" #include "SDL_log.h" +#include "SDL_assert.h" #include "SDL_opengl.h" #include "../SDL_sysrender.h" #include "SDL_shaders_gl.h" @@ -120,6 +121,7 @@ typedef struct GLDEBUGPROCARB next_error_callback; GLvoid *next_error_userparam; + SDL_bool GL_ARB_texture_non_power_of_two_supported; SDL_bool GL_ARB_texture_rectangle_supported; struct { GL_Shader shader; @@ -163,8 +165,9 @@ typedef struct int pitch; SDL_Rect locked_rect; - /* YV12 texture support */ + /* YUV texture support */ SDL_bool yuv; + SDL_bool nv12; GLuint utexture; GLuint vtexture; @@ -289,7 +292,8 @@ GL_ActivateRenderer(SDL_Renderer * renderer) { GL_RenderData *data = (GL_RenderData *) renderer->driverdata; - if (SDL_CurrentContext != data->context) { + if (SDL_CurrentContext != data->context || + SDL_GL_GetCurrentContext() != data->context) { if (SDL_GL_MakeCurrent(renderer->window, data->context) < 0) { return -1; } @@ -309,7 +313,7 @@ GL_ResetState(SDL_Renderer *renderer) { GL_RenderData *data = (GL_RenderData *) renderer->driverdata; - if (SDL_CurrentContext == data->context) { + if (SDL_GL_GetCurrentContext() == data->context) { GL_UpdateViewport(renderer); } else { GL_ActivateRenderer(renderer); @@ -331,16 +335,18 @@ GL_ResetState(SDL_Renderer *renderer) } static void APIENTRY -GL_HandleDebugMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, void *userParam) +GL_HandleDebugMessage(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char *message, const void *userParam) { SDL_Renderer *renderer = (SDL_Renderer *) userParam; GL_RenderData *data = (GL_RenderData *) renderer->driverdata; if (type == GL_DEBUG_TYPE_ERROR_ARB) { /* Record this error */ - ++data->errors; - data->error_messages = SDL_realloc(data->error_messages, data->errors * sizeof(*data->error_messages)); - if (data->error_messages) { + int errors = data->errors + 1; + char **error_messages = SDL_realloc(data->error_messages, errors * sizeof(*data->error_messages)); + if (error_messages) { + data->errors = errors; + data->error_messages = error_messages; data->error_messages[data->errors-1] = SDL_strdup(message); } } @@ -387,7 +393,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) const char *hint; GLint value; Uint32 window_flags; - int profile_mask, major, minor; + int profile_mask = 0, major = 0, minor = 0; + SDL_bool changed_window = SDL_FALSE; SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); @@ -396,32 +403,28 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) window_flags = SDL_GetWindowFlags(window); if (!(window_flags & SDL_WINDOW_OPENGL) || profile_mask == SDL_GL_CONTEXT_PROFILE_ES || major != RENDERER_CONTEXT_MAJOR || minor != RENDERER_CONTEXT_MINOR) { - + + changed_window = SDL_TRUE; SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, 0); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, RENDERER_CONTEXT_MAJOR); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, RENDERER_CONTEXT_MINOR); if (SDL_RecreateWindow(window, window_flags | SDL_WINDOW_OPENGL) < 0) { - /* Uh oh, better try to put it back... */ - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); - SDL_RecreateWindow(window, window_flags); - return NULL; + goto error; } } renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); if (!renderer) { SDL_OutOfMemory(); - return NULL; + goto error; } data = (GL_RenderData *) SDL_calloc(1, sizeof(*data)); if (!data) { GL_DestroyRenderer(renderer); SDL_OutOfMemory(); - return NULL; + goto error; } renderer->WindowEvent = GL_WindowEvent; @@ -454,16 +457,16 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) data->context = SDL_GL_CreateContext(window); if (!data->context) { GL_DestroyRenderer(renderer); - return NULL; + goto error; } if (SDL_GL_MakeCurrent(window, data->context) < 0) { GL_DestroyRenderer(renderer); - return NULL; + goto error; } if (GL_LoadFunctions(data) < 0) { GL_DestroyRenderer(renderer); - return NULL; + goto error; } #ifdef __MACOSX__ @@ -499,9 +502,13 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) data->glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); } - if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") - || SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { + if (SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two")) { + data->GL_ARB_texture_non_power_of_two_supported = SDL_TRUE; + } else if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") || + SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { data->GL_ARB_texture_rectangle_supported = SDL_TRUE; + } + if (data->GL_ARB_texture_rectangle_supported) { data->glGetIntegerv(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB, &value); renderer->info.max_texture_width = value; renderer->info.max_texture_height = value; @@ -532,6 +539,8 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) if (data->shaders && data->num_texture_units >= 3) { renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_YV12; renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_IYUV; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_NV12; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_NV21; } #ifdef __MACOSX__ @@ -558,6 +567,16 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags) GL_ResetState(renderer); return renderer; + +error: + if (changed_window) { + /* Uh oh, better try to put it back... */ + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); + SDL_RecreateWindow(window, window_flags); + } + return NULL; } static void @@ -602,16 +621,18 @@ convert_format(GL_RenderData *renderdata, Uint32 pixel_format, break; case SDL_PIXELFORMAT_YV12: case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_NV12: + case SDL_PIXELFORMAT_NV21: *internalFormat = GL_LUMINANCE; *format = GL_LUMINANCE; *type = GL_UNSIGNED_BYTE; break; #ifdef __MACOSX__ case SDL_PIXELFORMAT_UYVY: - *internalFormat = GL_RGB8; - *format = GL_YCBCR_422_APPLE; - *type = GL_UNSIGNED_SHORT_8_8_APPLE; - break; + *internalFormat = GL_RGB8; + *format = GL_YCBCR_422_APPLE; + *type = GL_UNSIGNED_SHORT_8_8_APPLE; + break; #endif default: return SDL_FALSE; @@ -663,6 +684,11 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) /* Need to add size for the U and V planes */ size += (2 * (texture->h * data->pitch) / 4); } + if (texture->format == SDL_PIXELFORMAT_NV12 || + texture->format == SDL_PIXELFORMAT_NV21) { + /* Need to add size for the U/V plane */ + size += ((texture->h * data->pitch) / 2); + } data->pixels = SDL_calloc(1, size); if (!data->pixels) { SDL_free(data); @@ -678,14 +704,22 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) GL_CheckError("", renderer); renderdata->glGenTextures(1, &data->texture); - if (GL_CheckError("glGenTexures()", renderer) < 0) { + if (GL_CheckError("glGenTextures()", renderer) < 0) { + if (data->pixels) { + SDL_free(data->pixels); + } SDL_free(data); return -1; } texture->driverdata = data; - if ((renderdata->GL_ARB_texture_rectangle_supported) - /* && texture->access != SDL_TEXTUREACCESS_TARGET */){ + if (renderdata->GL_ARB_texture_non_power_of_two_supported) { + data->type = GL_TEXTURE_2D; + texture_w = texture->w; + texture_h = texture->h; + data->texw = 1.0f; + data->texh = 1.0f; + } else if (renderdata->GL_ARB_texture_rectangle_supported) { data->type = GL_TEXTURE_RECTANGLE_ARB; texture_w = texture->w; texture_h = texture->h; @@ -789,6 +823,27 @@ GL_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) renderdata->glDisable(data->type); } + if (texture->format == SDL_PIXELFORMAT_NV12 || + texture->format == SDL_PIXELFORMAT_NV21) { + data->nv12 = SDL_TRUE; + + renderdata->glGenTextures(1, &data->utexture); + renderdata->glEnable(data->type); + + renderdata->glBindTexture(data->type, data->utexture); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MIN_FILTER, + scaleMode); + renderdata->glTexParameteri(data->type, GL_TEXTURE_MAG_FILTER, + scaleMode); + renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + renderdata->glTexParameteri(data->type, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); + renderdata->glTexImage2D(data->type, 0, GL_LUMINANCE_ALPHA, texture_w/2, + texture_h/2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL); + renderdata->glDisable(data->type); + } + return GL_CheckError("", renderer); } @@ -798,14 +853,16 @@ GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, { GL_RenderData *renderdata = (GL_RenderData *) renderer->driverdata; GL_TextureData *data = (GL_TextureData *) texture->driverdata; + const int texturebpp = SDL_BYTESPERPIXEL(texture->format); + + SDL_assert(texturebpp != 0); /* otherwise, division by zero later. */ GL_ActivateRenderer(renderer); renderdata->glEnable(data->type); renderdata->glBindTexture(data->type, data->texture); renderdata->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, - (pitch / SDL_BYTESPERPIXEL(texture->format))); + renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, (pitch / texturebpp)); renderdata->glTexSubImage2D(data->type, 0, rect->x, rect->y, rect->w, rect->h, data->format, data->formattype, pixels); @@ -834,6 +891,17 @@ GL_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, rect->w/2, rect->h/2, data->format, data->formattype, pixels); } + + if (data->nv12) { + renderdata->glPixelStorei(GL_UNPACK_ROW_LENGTH, (pitch / 2)); + + /* Skip to the correct offset into the next texture */ + pixels = (const void*)((const Uint8*)pixels + rect->h * pitch); + renderdata->glBindTexture(data->type, data->utexture); + renderdata->glTexSubImage2D(data->type, 0, rect->x/2, rect->y/2, + rect->w/2, rect->h/2, + GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pixels); + } renderdata->glDisable(data->type); return GL_CheckError("glTexSubImage2D()", renderer); @@ -973,12 +1041,19 @@ GL_UpdateViewport(SDL_Renderer * renderer) static int GL_UpdateClipRect(SDL_Renderer * renderer) { - const SDL_Rect *rect = &renderer->clip_rect; GL_RenderData *data = (GL_RenderData *) renderer->driverdata; - if (!SDL_RectEmpty(rect)) { + if (renderer->clipping_enabled) { + const SDL_Rect *rect = &renderer->clip_rect; data->glEnable(GL_SCISSOR_TEST); - data->glScissor(rect->x, renderer->viewport.h - rect->y - rect->h, rect->w, rect->h); + if (renderer->target) { + data->glScissor(renderer->viewport.x + rect->x, renderer->viewport.y + rect->y, rect->w, rect->h); + } else { + int w, h; + + SDL_GetRendererOutputSize(renderer, &w, &h); + data->glScissor(renderer->viewport.x + rect->x, h - renderer->viewport.y - rect->y - rect->h, rect->w, rect->h); + } } else { data->glDisable(GL_SCISSOR_TEST); } @@ -1170,15 +1245,10 @@ GL_RenderFillRects(SDL_Renderer * renderer, const SDL_FRect * rects, int count) } static int -GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, - const SDL_Rect * srcrect, const SDL_FRect * dstrect) +GL_SetupCopy(SDL_Renderer * renderer, SDL_Texture * texture) { GL_RenderData *data = (GL_RenderData *) renderer->driverdata; GL_TextureData *texturedata = (GL_TextureData *) texture->driverdata; - GLfloat minx, miny, maxx, maxy; - GLfloat minu, maxu, minv, maxv; - - GL_ActivateRenderer(renderer); data->glEnable(texturedata->type); if (texturedata->yuv) { @@ -1190,6 +1260,12 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, data->glActiveTextureARB(GL_TEXTURE0_ARB); } + if (texturedata->nv12) { + data->glActiveTextureARB(GL_TEXTURE1_ARB); + data->glBindTexture(texturedata->type, texturedata->utexture); + + data->glActiveTextureARB(GL_TEXTURE0_ARB); + } data->glBindTexture(texturedata->type, texturedata->texture); if (texture->modMode) { @@ -1201,10 +1277,33 @@ GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, GL_SetBlendMode(data, texture->blendMode); if (texturedata->yuv) { - GL_SetShader(data, SHADER_YV12); + GL_SetShader(data, SHADER_YUV); + } else if (texturedata->nv12) { + if (texture->format == SDL_PIXELFORMAT_NV12) { + GL_SetShader(data, SHADER_NV12); + } else { + GL_SetShader(data, SHADER_NV21); + } } else { GL_SetShader(data, SHADER_RGB); } + return 0; +} + +static int +GL_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, + const SDL_Rect * srcrect, const SDL_FRect * dstrect) +{ + GL_RenderData *data = (GL_RenderData *) renderer->driverdata; + GL_TextureData *texturedata = (GL_TextureData *) texture->driverdata; + GLfloat minx, miny, maxx, maxy; + GLfloat minu, maxu, minv, maxv; + + GL_ActivateRenderer(renderer); + + if (GL_SetupCopy(renderer, texture) < 0) { + return -1; + } minx = dstrect->x; miny = dstrect->y; @@ -1249,30 +1348,8 @@ GL_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, GL_ActivateRenderer(renderer); - data->glEnable(texturedata->type); - if (texturedata->yuv) { - data->glActiveTextureARB(GL_TEXTURE2_ARB); - data->glBindTexture(texturedata->type, texturedata->vtexture); - - data->glActiveTextureARB(GL_TEXTURE1_ARB); - data->glBindTexture(texturedata->type, texturedata->utexture); - - data->glActiveTextureARB(GL_TEXTURE0_ARB); - } - data->glBindTexture(texturedata->type, texturedata->texture); - - if (texture->modMode) { - GL_SetColor(data, texture->r, texture->g, texture->b, texture->a); - } else { - GL_SetColor(data, 255, 255, 255, 255); - } - - GL_SetBlendMode(data, texture->blendMode); - - if (texturedata->yuv) { - GL_SetShader(data, SHADER_YV12); - } else { - GL_SetShader(data, SHADER_RGB); + if (GL_SetupCopy(renderer, texture) < 0) { + return -1; } centerx = center->x; @@ -1361,6 +1438,7 @@ GL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, format, type, temp_pixels); if (GL_CheckError("glReadPixels()", renderer) < 0) { + SDL_free(temp_pixels); return -1; } diff --git a/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.c b/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.c index 8b15298f0b..bcf7b43150 100644 --- a/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.c +++ b/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -113,7 +113,7 @@ static const char *shader_source[NUM_SHADERS][2] = "}" }, - /* SHADER_YV12 */ + /* SHADER_YUV */ { /* vertex shader */ "varying vec4 v_color;\n" @@ -133,7 +133,7 @@ static const char *shader_source[NUM_SHADERS][2] = "uniform sampler2D tex2; // V \n" "\n" "// YUV offset \n" -"const vec3 offset = vec3(-0.0625, -0.5, -0.5);\n" +"const vec3 offset = vec3(-0.0627451017, -0.501960814, -0.501960814);\n" "\n" "// RGB coefficients \n" "const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n" @@ -150,7 +150,7 @@ static const char *shader_source[NUM_SHADERS][2] = " yuv.x = texture2D(tex0, tcoord).r;\n" "\n" " // Get the U and V values \n" -" tcoord *= 0.5;\n" +" tcoord *= UVCoordScale;\n" " yuv.y = texture2D(tex1, tcoord).r;\n" " yuv.z = texture2D(tex2, tcoord).r;\n" "\n" @@ -162,6 +162,106 @@ static const char *shader_source[NUM_SHADERS][2] = "\n" " // That was easy. :) \n" " gl_FragColor = vec4(rgb, 1.0) * v_color;\n" +"}" + }, + + /* SHADER_NV12 */ + { + /* vertex shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"uniform sampler2D tex0; // Y \n" +"uniform sampler2D tex1; // U/V \n" +"\n" +"// YUV offset \n" +"const vec3 offset = vec3(-0.0627451017, -0.501960814, -0.501960814);\n" +"\n" +"// RGB coefficients \n" +"const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n" +"const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);\n" +"const vec3 Bcoeff = vec3(1.164, 2.018, 0.000);\n" +"\n" +"void main()\n" +"{\n" +" vec2 tcoord;\n" +" vec3 yuv, rgb;\n" +"\n" +" // Get the Y value \n" +" tcoord = v_texCoord;\n" +" yuv.x = texture2D(tex0, tcoord).r;\n" +"\n" +" // Get the U and V values \n" +" tcoord *= UVCoordScale;\n" +" yuv.yz = texture2D(tex1, tcoord).ra;\n" +"\n" +" // Do the color transform \n" +" yuv += offset;\n" +" rgb.r = dot(yuv, Rcoeff);\n" +" rgb.g = dot(yuv, Gcoeff);\n" +" rgb.b = dot(yuv, Bcoeff);\n" +"\n" +" // That was easy. :) \n" +" gl_FragColor = vec4(rgb, 1.0) * v_color;\n" +"}" + }, + + /* SHADER_NV21 */ + { + /* vertex shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"uniform sampler2D tex0; // Y \n" +"uniform sampler2D tex1; // U/V \n" +"\n" +"// YUV offset \n" +"const vec3 offset = vec3(-0.0627451017, -0.501960814, -0.501960814);\n" +"\n" +"// RGB coefficients \n" +"const vec3 Rcoeff = vec3(1.164, 0.000, 1.596);\n" +"const vec3 Gcoeff = vec3(1.164, -0.391, -0.813);\n" +"const vec3 Bcoeff = vec3(1.164, 2.018, 0.000);\n" +"\n" +"void main()\n" +"{\n" +" vec2 tcoord;\n" +" vec3 yuv, rgb;\n" +"\n" +" // Get the Y value \n" +" tcoord = v_texCoord;\n" +" yuv.x = texture2D(tex0, tcoord).r;\n" +"\n" +" // Get the U and V values \n" +" tcoord *= UVCoordScale;\n" +" yuv.yz = texture2D(tex1, tcoord).ar;\n" +"\n" +" // Do the color transform \n" +" yuv += offset;\n" +" rgb.r = dot(yuv, Rcoeff);\n" +" rgb.g = dot(yuv, Gcoeff);\n" +" rgb.b = dot(yuv, Bcoeff);\n" +"\n" +" // That was easy. :) \n" +" gl_FragColor = vec4(rgb, 1.0) * v_color;\n" "}" }, }; @@ -218,7 +318,11 @@ CompileShaderProgram(GL_ShaderContext *ctx, int index, GL_ShaderData *data) if (ctx->GL_ARB_texture_rectangle_supported) { frag_defines = "#define sampler2D sampler2DRect\n" -"#define texture2D texture2DRect\n"; +"#define texture2D texture2DRect\n" +"#define UVCoordScale 0.5\n"; + } else { + frag_defines = +"#define UVCoordScale 1.0\n"; } /* Create one program object to rule them all */ @@ -276,8 +380,9 @@ GL_CreateShaderContext() return NULL; } - if (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") - || SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle")) { + if (!SDL_GL_ExtensionSupported("GL_ARB_texture_non_power_of_two") && + (SDL_GL_ExtensionSupported("GL_ARB_texture_rectangle") || + SDL_GL_ExtensionSupported("GL_EXT_texture_rectangle"))) { ctx->GL_ARB_texture_rectangle_supported = SDL_TRUE; } diff --git a/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.h b/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.h index fdd4db7fc0..261627cc79 100644 --- a/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.h +++ b/Engine/lib/sdl/src/render/opengl/SDL_shaders_gl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,7 +26,9 @@ typedef enum { SHADER_NONE, SHADER_SOLID, SHADER_RGB, - SHADER_YV12, + SHADER_YUV, + SHADER_NV12, + SHADER_NV21, NUM_SHADERS } GL_Shader; diff --git a/Engine/lib/sdl/src/render/opengles/SDL_glesfuncs.h b/Engine/lib/sdl/src/render/opengles/SDL_glesfuncs.h index 6dc197a639..a15d76d496 100644 --- a/Engine/lib/sdl/src/render/opengles/SDL_glesfuncs.h +++ b/Engine/lib/sdl/src/render/opengles/SDL_glesfuncs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/opengles/SDL_render_gles.c b/Engine/lib/sdl/src/render/opengles/SDL_render_gles.c index 43a07a4b14..0d59da3605 100644 --- a/Engine/lib/sdl/src/render/opengles/SDL_render_gles.c +++ b/Engine/lib/sdl/src/render/opengles/SDL_render_gles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,7 +43,7 @@ glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height) return; } -#endif /* PANDORA */ +#endif /* SDL_VIDEO_DRIVER_PANDORA */ /* OpenGL ES 1.1 renderer implementation, based on the OpenGL renderer */ @@ -55,6 +55,7 @@ static const float inv255f = 1.0f / 255.0f; static SDL_Renderer *GLES_CreateRenderer(SDL_Window * window, Uint32 flags); static void GLES_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event); +static int GLES_GetOutputSize(SDL_Renderer * renderer, int *w, int *h); static int GLES_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); static int GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * rect, const void *pixels, @@ -205,7 +206,7 @@ static int GLES_LoadFunctions(GLES_RenderData * data) do { \ data->func = SDL_GL_GetProcAddress(#func); \ } while ( 0 ); -#endif /* _SDL_NOGETPROCADDR_ */ +#endif /* __SDL_NOGETPROCADDR__ */ #include "SDL_glesfuncs.h" #undef SDL_PROC @@ -219,12 +220,10 @@ GLES_FBOList * GLES_GetFBO(GLES_RenderData *data, Uint32 w, Uint32 h) { GLES_FBOList *result = data->framebuffers; - while ((result) && ((result->w != w) || (result->h != h)) ) - { + while ((result) && ((result->w != w) || (result->h != h)) ) { result = result->next; } - if (result == NULL) - { + if (result == NULL) { result = SDL_malloc(sizeof(GLES_FBOList)); result->w = w; result->h = h; @@ -285,45 +284,43 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) SDL_Renderer *renderer; GLES_RenderData *data; GLint value; - Uint32 windowFlags; - int profile_mask, major, minor; + Uint32 window_flags; + int profile_mask = 0, major = 0, minor = 0; + SDL_bool changed_window = SDL_FALSE; SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor); - windowFlags = SDL_GetWindowFlags(window); - if (!(windowFlags & SDL_WINDOW_OPENGL) || + window_flags = SDL_GetWindowFlags(window); + if (!(window_flags & SDL_WINDOW_OPENGL) || profile_mask != SDL_GL_CONTEXT_PROFILE_ES || major != RENDERER_CONTEXT_MAJOR || minor != RENDERER_CONTEXT_MINOR) { + changed_window = SDL_TRUE; SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, RENDERER_CONTEXT_MAJOR); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, RENDERER_CONTEXT_MINOR); - if (SDL_RecreateWindow(window, windowFlags | SDL_WINDOW_OPENGL) < 0) { - /* Uh oh, better try to put it back... */ - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); - SDL_RecreateWindow(window, windowFlags); - return NULL; + if (SDL_RecreateWindow(window, window_flags | SDL_WINDOW_OPENGL) < 0) { + goto error; } } renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer)); if (!renderer) { SDL_OutOfMemory(); - return NULL; + goto error; } data = (GLES_RenderData *) SDL_calloc(1, sizeof(*data)); if (!data) { GLES_DestroyRenderer(renderer); SDL_OutOfMemory(); - return NULL; + goto error; } renderer->WindowEvent = GLES_WindowEvent; + renderer->GetOutputSize = GLES_GetOutputSize; renderer->CreateTexture = GLES_CreateTexture; renderer->UpdateTexture = GLES_UpdateTexture; renderer->LockTexture = GLES_LockTexture; @@ -351,16 +348,16 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) data->context = SDL_GL_CreateContext(window); if (!data->context) { GLES_DestroyRenderer(renderer); - return NULL; + goto error; } if (SDL_GL_MakeCurrent(window, data->context) < 0) { GLES_DestroyRenderer(renderer); - return NULL; + goto error; } if (GLES_LoadFunctions(data) < 0) { GLES_DestroyRenderer(renderer); - return NULL; + goto error; } if (flags & SDL_RENDERER_PRESENTVSYNC) { @@ -411,6 +408,16 @@ GLES_CreateRenderer(SDL_Window * window, Uint32 flags) GLES_ResetState(renderer); return renderer; + +error: + if (changed_window) { + /* Uh oh, better try to put it back... */ + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); + SDL_RecreateWindow(window, window_flags); + } + return NULL; } static void @@ -431,6 +438,13 @@ GLES_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) } } +static int +GLES_GetOutputSize(SDL_Renderer * renderer, int *w, int *h) +{ + SDL_GL_GetDrawableSize(renderer->window, w, h); + return 0; +} + static SDL_INLINE int power_of_2(int input) { @@ -556,8 +570,9 @@ GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, GLES_ActivateRenderer(renderer); /* Bail out if we're supposed to update an empty rectangle */ - if (rect->w <= 0 || rect->h <= 0) + if (rect->w <= 0 || rect->h <= 0) { return 0; + } /* Reformat the texture data into a tightly packed array */ srcPitch = rect->w * SDL_BYTESPERPIXEL(texture->format); @@ -592,8 +607,7 @@ GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, src); SDL_free(blob); - if (renderdata->glGetError() != GL_NO_ERROR) - { + if (renderdata->glGetError() != GL_NO_ERROR) { return SDL_SetError("Failed to update texture"); } return 0; @@ -634,7 +648,7 @@ GLES_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture) GLenum status; GLES_ActivateRenderer(renderer); - + if (!data->GL_OES_framebuffer_object_supported) { return SDL_SetError("Can't enable render target support in this renderer"); } @@ -666,8 +680,16 @@ GLES_UpdateViewport(SDL_Renderer * renderer) return 0; } - data->glViewport(renderer->viewport.x, renderer->viewport.y, - renderer->viewport.w, renderer->viewport.h); + if (renderer->target) { + data->glViewport(renderer->viewport.x, renderer->viewport.y, + renderer->viewport.w, renderer->viewport.h); + } else { + int w, h; + + SDL_GetRendererOutputSize(renderer, &w, &h); + data->glViewport(renderer->viewport.x, (h - renderer->viewport.y - renderer->viewport.h), + renderer->viewport.w, renderer->viewport.h); + } if (renderer->viewport.w && renderer->viewport.h) { data->glMatrixMode(GL_PROJECTION); @@ -684,16 +706,23 @@ static int GLES_UpdateClipRect(SDL_Renderer * renderer) { GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; - const SDL_Rect *rect = &renderer->clip_rect; if (SDL_CurrentContext != data->context) { /* We'll update the clip rect after we rebind the context */ return 0; } - if (!SDL_RectEmpty(rect)) { + if (renderer->clipping_enabled) { + const SDL_Rect *rect = &renderer->clip_rect; data->glEnable(GL_SCISSOR_TEST); - data->glScissor(rect->x, renderer->viewport.h - rect->y - rect->h, rect->w, rect->h); + if (renderer->target) { + data->glScissor(renderer->viewport.x + rect->x, renderer->viewport.y + rect->y, rect->w, rect->h); + } else { + int w, h; + + SDL_GetRendererOutputSize(renderer, &w, &h); + data->glScissor(renderer->viewport.x + rect->x, h - renderer->viewport.y - rect->y - rect->h, rect->w, rect->h); + } } else { data->glDisable(GL_SCISSOR_TEST); } @@ -807,12 +836,24 @@ GLES_RenderDrawPoints(SDL_Renderer * renderer, const SDL_FPoint * points, int count) { GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; + GLfloat *vertices; + int idx; GLES_SetDrawingState(renderer); - data->glVertexPointer(2, GL_FLOAT, 0, points); - data->glDrawArrays(GL_POINTS, 0, count); + /* Emit the specified vertices as points */ + vertices = SDL_stack_alloc(GLfloat, count * 2); + for (idx = 0; idx < count; ++idx) { + GLfloat x = points[idx].x + 0.5f; + GLfloat y = points[idx].y + 0.5f; + + vertices[idx * 2] = x; + vertices[(idx * 2) + 1] = y; + } + data->glVertexPointer(2, GL_FLOAT, 0, vertices); + data->glDrawArrays(GL_POINTS, 0, count); + SDL_stack_free(vertices); return 0; } @@ -821,10 +862,22 @@ GLES_RenderDrawLines(SDL_Renderer * renderer, const SDL_FPoint * points, int count) { GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata; + GLfloat *vertices; + int idx; GLES_SetDrawingState(renderer); - data->glVertexPointer(2, GL_FLOAT, 0, points); + /* Emit a line strip including the specified vertices */ + vertices = SDL_stack_alloc(GLfloat, count * 2); + for (idx = 0; idx < count; ++idx) { + GLfloat x = points[idx].x + 0.5f; + GLfloat y = points[idx].y + 0.5f; + + vertices[idx * 2] = x; + vertices[(idx * 2) + 1] = y; + } + + data->glVertexPointer(2, GL_FLOAT, 0, vertices); if (count > 2 && points[0].x == points[count-1].x && points[0].y == points[count-1].y) { /* GL_LINE_LOOP takes care of the final segment */ @@ -835,6 +888,7 @@ GLES_RenderDrawLines(SDL_Renderer * renderer, const SDL_FPoint * points, /* We need to close the endpoint of the line */ data->glDrawArrays(GL_POINTS, count-1, 1); } + SDL_stack_free(vertices); return 0; } @@ -1165,8 +1219,12 @@ static int GLES_BindTexture (SDL_Renderer * renderer, SDL_Texture *texture, floa data->glEnable(GL_TEXTURE_2D); data->glBindTexture(texturedata->type, texturedata->texture); - if(texw) *texw = (float)texturedata->texw; - if(texh) *texh = (float)texturedata->texh; + if (texw) { + *texw = (float)texturedata->texw; + } + if (texh) { + *texh = (float)texturedata->texh; + } return 0; } diff --git a/Engine/lib/sdl/src/render/opengles2/SDL_gles2funcs.h b/Engine/lib/sdl/src/render/opengles2/SDL_gles2funcs.h index c2a20f7db5..0ecfa7f94e 100644 --- a/Engine/lib/sdl/src/render/opengles2/SDL_gles2funcs.h +++ b/Engine/lib/sdl/src/render/opengles2/SDL_gles2funcs.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,7 +53,7 @@ SDL_PROC(void, glPixelStorei, (GLenum, GLint)) SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*)) SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei)) SDL_PROC(void, glShaderBinary, (GLsizei, const GLuint *, GLenum, const void *, GLsizei)) -SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const char **, const GLint *)) +SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const GLchar* const*, const GLint *)) SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *)) SDL_PROC(void, glTexParameteri, (GLenum, GLenum, GLint)) SDL_PROC(void, glTexSubImage2D, (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *)) @@ -68,4 +68,8 @@ SDL_PROC(void, glFramebufferTexture2D, (GLenum, GLenum, GLenum, GLuint, GLint)) SDL_PROC(GLenum, glCheckFramebufferStatus, (GLenum)) SDL_PROC(void, glDeleteFramebuffers, (GLsizei, const GLuint *)) SDL_PROC(GLint, glGetAttribLocation, (GLuint, const GLchar *)) - +SDL_PROC(void, glGetProgramInfoLog, (GLuint, GLsizei, GLsizei*, GLchar*)) +SDL_PROC(void, glGenBuffers, (GLsizei, GLuint *)) +SDL_PROC(void, glBindBuffer, (GLenum, GLuint)) +SDL_PROC(void, glBufferData, (GLenum, GLsizeiptr, const GLvoid *, GLenum)) +SDL_PROC(void, glBufferSubData, (GLenum, GLintptr, GLsizeiptr, const GLvoid *)) diff --git a/Engine/lib/sdl/src/render/opengles2/SDL_render_gles2.c b/Engine/lib/sdl/src/render/opengles2/SDL_render_gles2.c index 44484783f7..e41ab62316 100644 --- a/Engine/lib/sdl/src/render/opengles2/SDL_render_gles2.c +++ b/Engine/lib/sdl/src/render/opengles2/SDL_render_gles2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,7 +28,20 @@ #include "../../video/SDL_blit.h" #include "SDL_shaders_gles2.h" -/* To prevent unnecessary window recreation, +/* !!! FIXME: Emscripten makes these into WebGL calls, and WebGL doesn't offer + !!! FIXME: client-side arrays (without an Emscripten compatibility hack, + !!! FIXME: at least), but the current VBO code here is dramatically + !!! FIXME: slower on actual iOS devices, even though the iOS Simulator + !!! FIXME: is okay. Some time after 2.0.4 ships, we should revisit this, + !!! FIXME: fix the performance bottleneck, and make everything use VBOs. +*/ +#ifdef __EMSCRIPTEN__ +#define SDL_GLES2_USE_VBOS 1 +#else +#define SDL_GLES2_USE_VBOS 0 +#endif + +/* To prevent unnecessary window recreation, * these should match the defaults selected in SDL_GL_ResetAttributes */ #define RENDERER_CONTEXT_MAJOR 2 @@ -49,10 +62,12 @@ SDL_RenderDriver GLES2_RenderDriver = { "opengles2", (SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE), 4, - {SDL_PIXELFORMAT_ABGR8888, + { SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_RGB888, - SDL_PIXELFORMAT_BGR888}, + SDL_PIXELFORMAT_BGR888 + }, 0, 0 } @@ -78,7 +93,12 @@ typedef struct GLES2_TextureData GLenum pixel_format; GLenum pixel_type; void *pixel_data; - size_t pitch; + int pitch; + /* YUV texture support */ + SDL_bool yuv; + SDL_bool nv12; + GLenum texture_v; + GLenum texture_u; GLES2_FBOList *fbo; } GLES2_TextureData; @@ -133,7 +153,9 @@ typedef enum GLES2_UNIFORM_PROJECTION, GLES2_UNIFORM_TEXTURE, GLES2_UNIFORM_MODULATION, - GLES2_UNIFORM_COLOR + GLES2_UNIFORM_COLOR, + GLES2_UNIFORM_TEXTURE_U, + GLES2_UNIFORM_TEXTURE_V } GLES2_Uniform; typedef enum @@ -142,7 +164,10 @@ typedef enum GLES2_IMAGESOURCE_TEXTURE_ABGR, GLES2_IMAGESOURCE_TEXTURE_ARGB, GLES2_IMAGESOURCE_TEXTURE_RGB, - GLES2_IMAGESOURCE_TEXTURE_BGR + GLES2_IMAGESOURCE_TEXTURE_BGR, + GLES2_IMAGESOURCE_TEXTURE_YUV, + GLES2_IMAGESOURCE_TEXTURE_NV12, + GLES2_IMAGESOURCE_TEXTURE_NV21 } GLES2_ImageSource; typedef struct GLES2_DriverContext @@ -168,6 +193,11 @@ typedef struct GLES2_DriverContext GLES2_ProgramCache program_cache; GLES2_ProgramCacheEntry *current_program; Uint8 clear_r, clear_g, clear_b, clear_a; + +#if SDL_GLES2_USE_VBOS + GLuint vertex_buffers[4]; + GLsizeiptr vertex_buffer_size[4]; +#endif } GLES2_DriverContext; #define GLES2_MAX_CACHED_PROGRAMS 8 @@ -194,8 +224,7 @@ GL_ClearErrors(SDL_Renderer *renderer) { GLES2_DriverContext *data = (GLES2_DriverContext *) renderer->driverdata; - if (!data->debug_enabled) - { + if (!data->debug_enabled) { return; } while (data->glGetError() != GL_NO_ERROR) { @@ -209,8 +238,7 @@ GL_CheckAllErrors (const char *prefix, SDL_Renderer *renderer, const char *file, GLES2_DriverContext *data = (GLES2_DriverContext *) renderer->driverdata; int ret = 0; - if (!data->debug_enabled) - { + if (!data->debug_enabled) { return 0; } /* check gl errors (can return multiple errors) */ @@ -272,7 +300,7 @@ static int GLES2_LoadFunctions(GLES2_DriverContext * data) return SDL_SetError("Couldn't load GLES2 function %s: %s\n", #func, SDL_GetError()); \ } \ } while ( 0 ); -#endif /* _SDL_NOGETPROCADDR_ */ +#endif /* __SDL_NOGETPROCADDR__ */ #include "SDL_gles2funcs.h" #undef SDL_PROC @@ -283,12 +311,10 @@ GLES2_FBOList * GLES2_GetFBO(GLES2_DriverContext *data, Uint32 w, Uint32 h) { GLES2_FBOList *result = data->framebuffers; - while ((result) && ((result->w != w) || (result->h != h)) ) - { + while ((result) && ((result->w != w) || (result->h != h)) ) { result = result->next; } - if (result == NULL) - { + if (result == NULL) { result = SDL_malloc(sizeof(GLES2_FBOList)); result->w = w; result->h = h; @@ -339,6 +365,13 @@ GLES2_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) } } +static int +GLES2_GetOutputSize(SDL_Renderer * renderer, int *w, int *h) +{ + SDL_GL_GetDrawableSize(renderer->window, w, h); + return 0; +} + static int GLES2_UpdateViewport(SDL_Renderer * renderer) { @@ -349,8 +382,16 @@ GLES2_UpdateViewport(SDL_Renderer * renderer) return 0; } - data->glViewport(renderer->viewport.x, renderer->viewport.y, - renderer->viewport.w, renderer->viewport.h); + if (renderer->target) { + data->glViewport(renderer->viewport.x, renderer->viewport.y, + renderer->viewport.w, renderer->viewport.h); + } else { + int w, h; + + SDL_GetRendererOutputSize(renderer, &w, &h); + data->glViewport(renderer->viewport.x, (h - renderer->viewport.y - renderer->viewport.h), + renderer->viewport.w, renderer->viewport.h); + } if (data->current_program) { GLES2_SetOrthographicProjection(renderer); @@ -362,16 +403,23 @@ static int GLES2_UpdateClipRect(SDL_Renderer * renderer) { GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; - const SDL_Rect *rect = &renderer->clip_rect; if (SDL_CurrentContext != data->context) { /* We'll update the clip rect after we rebind the context */ return 0; } - if (!SDL_RectEmpty(rect)) { + if (renderer->clipping_enabled) { + const SDL_Rect *rect = &renderer->clip_rect; data->glEnable(GL_SCISSOR_TEST); - data->glScissor(rect->x, renderer->viewport.h - rect->y - rect->h, rect->w, rect->h); + if (renderer->target) { + data->glScissor(renderer->viewport.x + rect->x, renderer->viewport.y + rect->y, rect->w, rect->h); + } else { + int w, h; + + SDL_GetRendererOutputSize(renderer, &w, &h); + data->glScissor(renderer->viewport.x + rect->x, h - renderer->viewport.y - rect->y - rect->h, rect->w, rect->h); + } } else { data->glDisable(GL_SCISSOR_TEST); } @@ -391,8 +439,7 @@ GLES2_DestroyRenderer(SDL_Renderer *renderer) GLES2_ShaderCacheEntry *entry; GLES2_ShaderCacheEntry *next; entry = data->shader_cache.head; - while (entry) - { + while (entry) { data->glDeleteShader(entry->id); next = entry->next; SDL_free(entry); @@ -433,6 +480,11 @@ GLES2_DestroyRenderer(SDL_Renderer *renderer) static int GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture); static int GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch); +static int GLES2_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); static int GLES2_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch); static void GLES2_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture); @@ -465,13 +517,20 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) /* Determine the corresponding GLES texture format params */ switch (texture->format) { - case SDL_PIXELFORMAT_ABGR8888: case SDL_PIXELFORMAT_ARGB8888: - case SDL_PIXELFORMAT_BGR888: + case SDL_PIXELFORMAT_ABGR8888: case SDL_PIXELFORMAT_RGB888: + case SDL_PIXELFORMAT_BGR888: format = GL_RGBA; type = GL_UNSIGNED_BYTE; break; + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_YV12: + case SDL_PIXELFORMAT_NV12: + case SDL_PIXELFORMAT_NV21: + format = GL_LUMINANCE; + type = GL_UNSIGNED_BYTE; + break; default: return SDL_SetError("Texture format not supported"); } @@ -485,12 +544,26 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) data->texture_type = GL_TEXTURE_2D; data->pixel_format = format; data->pixel_type = type; + data->yuv = ((texture->format == SDL_PIXELFORMAT_IYUV) || (texture->format == SDL_PIXELFORMAT_YV12)); + data->nv12 = ((texture->format == SDL_PIXELFORMAT_NV12) || (texture->format == SDL_PIXELFORMAT_NV21)); + data->texture_u = 0; + data->texture_v = 0; scaleMode = GetScaleQuality(); /* Allocate a blob for image renderdata */ if (texture->access == SDL_TEXTUREACCESS_STREAMING) { + size_t size; data->pitch = texture->w * SDL_BYTESPERPIXEL(texture->format); - data->pixel_data = SDL_calloc(1, data->pitch * texture->h); + size = texture->h * data->pitch; + if (data->yuv) { + /* Need to add size for the U and V planes */ + size += (2 * (texture->h * data->pitch) / 4); + } + if (data->nv12) { + /* Need to add size for the U/V plane */ + size += ((texture->h * data->pitch) / 2); + } + data->pixel_data = SDL_calloc(1, size); if (!data->pixel_data) { SDL_free(data); return SDL_OutOfMemory(); @@ -499,11 +572,59 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) /* Allocate the texture */ GL_CheckError("", renderer); + + if (data->yuv) { + renderdata->glGenTextures(1, &data->texture_v); + if (GL_CheckError("glGenTexures()", renderer) < 0) { + return -1; + } + renderdata->glActiveTexture(GL_TEXTURE2); + renderdata->glBindTexture(data->texture_type, data->texture_v); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + renderdata->glTexImage2D(data->texture_type, 0, format, texture->w / 2, texture->h / 2, 0, format, type, NULL); + + renderdata->glGenTextures(1, &data->texture_u); + if (GL_CheckError("glGenTexures()", renderer) < 0) { + return -1; + } + renderdata->glActiveTexture(GL_TEXTURE1); + renderdata->glBindTexture(data->texture_type, data->texture_u); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + renderdata->glTexImage2D(data->texture_type, 0, format, texture->w / 2, texture->h / 2, 0, format, type, NULL); + if (GL_CheckError("glTexImage2D()", renderer) < 0) { + return -1; + } + } + + if (data->nv12) { + renderdata->glGenTextures(1, &data->texture_u); + if (GL_CheckError("glGenTexures()", renderer) < 0) { + return -1; + } + renderdata->glActiveTexture(GL_TEXTURE1); + renderdata->glBindTexture(data->texture_type, data->texture_u); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + renderdata->glTexImage2D(data->texture_type, 0, GL_LUMINANCE_ALPHA, texture->w / 2, texture->h / 2, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, NULL); + if (GL_CheckError("glTexImage2D()", renderer) < 0) { + return -1; + } + } + renderdata->glGenTextures(1, &data->texture); if (GL_CheckError("glGenTexures()", renderer) < 0) { return -1; } texture->driverdata = data; + renderdata->glActiveTexture(GL_TEXTURE0); renderdata->glBindTexture(data->texture_type, data->texture); renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MIN_FILTER, scaleMode); renderdata->glTexParameteri(data->texture_type, GL_TEXTURE_MAG_FILTER, scaleMode); @@ -524,52 +645,160 @@ GLES2_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture) } static int -GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, - const void *pixels, int pitch) +GLES2_TexSubImage2D(GLES2_DriverContext *data, GLenum target, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels, GLint pitch, GLint bpp) { - GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; - GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; Uint8 *blob = NULL; Uint8 *src; - int srcPitch; + int src_pitch; int y; - GLES2_ActivateRenderer(renderer); - - /* Bail out if we're supposed to update an empty rectangle */ - if (rect->w <= 0 || rect->h <= 0) - return 0; - /* Reformat the texture data into a tightly packed array */ - srcPitch = rect->w * SDL_BYTESPERPIXEL(texture->format); + src_pitch = width * bpp; src = (Uint8 *)pixels; - if (pitch != srcPitch) { - blob = (Uint8 *)SDL_malloc(srcPitch * rect->h); + if (pitch != src_pitch) { + blob = (Uint8 *)SDL_malloc(src_pitch * height); if (!blob) { return SDL_OutOfMemory(); } src = blob; - for (y = 0; y < rect->h; ++y) + for (y = 0; y < height; ++y) { - SDL_memcpy(src, pixels, srcPitch); - src += srcPitch; + SDL_memcpy(src, pixels, src_pitch); + src += src_pitch; pixels = (Uint8 *)pixels + pitch; } src = blob; } + data->glTexSubImage2D(target, 0, xoffset, yoffset, width, height, format, type, src); + if (blob) { + SDL_free(blob); + } + return 0; +} + +static int +GLES2_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, + const void *pixels, int pitch) +{ + GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; + GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; + + GLES2_ActivateRenderer(renderer); + + /* Bail out if we're supposed to update an empty rectangle */ + if (rect->w <= 0 || rect->h <= 0) { + return 0; + } + /* Create a texture subimage with the supplied data */ data->glBindTexture(tdata->texture_type, tdata->texture); - data->glTexSubImage2D(tdata->texture_type, - 0, + GLES2_TexSubImage2D(data, tdata->texture_type, rect->x, rect->y, rect->w, rect->h, tdata->pixel_format, tdata->pixel_type, - src); - SDL_free(blob); + pixels, pitch, SDL_BYTESPERPIXEL(texture->format)); + + if (tdata->yuv) { + /* Skip to the correct offset into the next texture */ + pixels = (const void*)((const Uint8*)pixels + rect->h * pitch); + if (texture->format == SDL_PIXELFORMAT_YV12) { + data->glBindTexture(tdata->texture_type, tdata->texture_v); + } else { + data->glBindTexture(tdata->texture_type, tdata->texture_u); + } + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x / 2, + rect->y / 2, + rect->w / 2, + rect->h / 2, + tdata->pixel_format, + tdata->pixel_type, + pixels, pitch / 2, 1); + + /* Skip to the correct offset into the next texture */ + pixels = (const void*)((const Uint8*)pixels + (rect->h * pitch)/4); + if (texture->format == SDL_PIXELFORMAT_YV12) { + data->glBindTexture(tdata->texture_type, tdata->texture_u); + } else { + data->glBindTexture(tdata->texture_type, tdata->texture_v); + } + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x / 2, + rect->y / 2, + rect->w / 2, + rect->h / 2, + tdata->pixel_format, + tdata->pixel_type, + pixels, pitch / 2, 1); + } + + if (tdata->nv12) { + /* Skip to the correct offset into the next texture */ + pixels = (const void*)((const Uint8*)pixels + rect->h * pitch); + data->glBindTexture(tdata->texture_type, tdata->texture_u); + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x / 2, + rect->y / 2, + rect->w / 2, + rect->h / 2, + GL_LUMINANCE_ALPHA, + GL_UNSIGNED_BYTE, + pixels, pitch, 2); + } + + return GL_CheckError("glTexSubImage2D()", renderer); +} + +static int +GLES2_UpdateTextureYUV(SDL_Renderer * renderer, SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch) +{ + GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; + GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; + + GLES2_ActivateRenderer(renderer); + + /* Bail out if we're supposed to update an empty rectangle */ + if (rect->w <= 0 || rect->h <= 0) { + return 0; + } + + data->glBindTexture(tdata->texture_type, tdata->texture_v); + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x / 2, + rect->y / 2, + rect->w / 2, + rect->h / 2, + tdata->pixel_format, + tdata->pixel_type, + Vplane, Vpitch, 1); + + data->glBindTexture(tdata->texture_type, tdata->texture_u); + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x / 2, + rect->y / 2, + rect->w / 2, + rect->h / 2, + tdata->pixel_format, + tdata->pixel_type, + Uplane, Upitch, 1); + + data->glBindTexture(tdata->texture_type, tdata->texture); + GLES2_TexSubImage2D(data, tdata->texture_type, + rect->x, + rect->y, + rect->w, + rect->h, + tdata->pixel_format, + tdata->pixel_type, + Yplane, Ypitch, 1); return GL_CheckError("glTexSubImage2D()", renderer); } @@ -635,9 +864,14 @@ GLES2_DestroyTexture(SDL_Renderer *renderer, SDL_Texture *texture) GLES2_ActivateRenderer(renderer); /* Destroy the texture */ - if (tdata) - { + if (tdata) { data->glDeleteTextures(1, &tdata->texture); + if (tdata->texture_v) { + data->glDeleteTextures(1, &tdata->texture_v); + } + if (tdata->texture_u) { + data->glDeleteTextures(1, &tdata->texture_u); + } SDL_free(tdata->pixel_data); SDL_free(tdata); texture->driverdata = NULL; @@ -669,20 +903,20 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, /* Check if we've already cached this program */ entry = data->program_cache.head; - while (entry) - { - if (entry->vertex_shader == vertex && entry->fragment_shader == fragment) + while (entry) { + if (entry->vertex_shader == vertex && entry->fragment_shader == fragment) { break; + } entry = entry->next; } - if (entry) - { - if (data->program_cache.head != entry) - { - if (entry->next) + if (entry) { + if (data->program_cache.head != entry) { + if (entry->next) { entry->next->prev = entry->prev; - if (entry->prev) + } + if (entry->prev) { entry->prev->next = entry->next; + } entry->prev = NULL; entry->next = data->program_cache.head; data->program_cache.head->prev = entry; @@ -693,8 +927,7 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, /* Create a program cache entry */ entry = (GLES2_ProgramCacheEntry *)SDL_calloc(1, sizeof(GLES2_ProgramCacheEntry)); - if (!entry) - { + if (!entry) { SDL_OutOfMemory(); return NULL; } @@ -712,8 +945,7 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, data->glBindAttribLocation(entry->id, GLES2_ATTRIBUTE_CENTER, "a_center"); data->glLinkProgram(entry->id); data->glGetProgramiv(entry->id, GL_LINK_STATUS, &linkSuccessful); - if (!linkSuccessful) - { + if (!linkSuccessful) { data->glDeleteProgram(entry->id); SDL_free(entry); SDL_SetError("Failed to link shader program"); @@ -723,6 +955,10 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, /* Predetermine locations of uniform variables */ entry->uniform_locations[GLES2_UNIFORM_PROJECTION] = data->glGetUniformLocation(entry->id, "u_projection"); + entry->uniform_locations[GLES2_UNIFORM_TEXTURE_V] = + data->glGetUniformLocation(entry->id, "u_texture_v"); + entry->uniform_locations[GLES2_UNIFORM_TEXTURE_U] = + data->glGetUniformLocation(entry->id, "u_texture_u"); entry->uniform_locations[GLES2_UNIFORM_TEXTURE] = data->glGetUniformLocation(entry->id, "u_texture"); entry->uniform_locations[GLES2_UNIFORM_MODULATION] = @@ -734,19 +970,18 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, entry->color_r = entry->color_g = entry->color_b = entry->color_a = 255; data->glUseProgram(entry->id); - data->glUniformMatrix4fv(entry->uniform_locations[GLES2_UNIFORM_PROJECTION], 1, GL_FALSE, (GLfloat *)entry->projection); + data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE_V], 2); /* always texture unit 2. */ + data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE_U], 1); /* always texture unit 1. */ data->glUniform1i(entry->uniform_locations[GLES2_UNIFORM_TEXTURE], 0); /* always texture unit 0. */ + data->glUniformMatrix4fv(entry->uniform_locations[GLES2_UNIFORM_PROJECTION], 1, GL_FALSE, (GLfloat *)entry->projection); data->glUniform4f(entry->uniform_locations[GLES2_UNIFORM_MODULATION], 1.0f, 1.0f, 1.0f, 1.0f); data->glUniform4f(entry->uniform_locations[GLES2_UNIFORM_COLOR], 1.0f, 1.0f, 1.0f, 1.0f); /* Cache the linked program */ - if (data->program_cache.head) - { + if (data->program_cache.head) { entry->next = data->program_cache.head; data->program_cache.head->prev = entry; - } - else - { + } else { data->program_cache.tail = entry; } data->program_cache.head = entry; @@ -757,14 +992,15 @@ GLES2_CacheProgram(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *vertex, ++fragment->references; /* Evict the last entry from the cache if we exceed the limit */ - if (data->program_cache.count > GLES2_MAX_CACHED_PROGRAMS) - { + if (data->program_cache.count > GLES2_MAX_CACHED_PROGRAMS) { shaderEntry = data->program_cache.tail->vertex_shader; - if (--shaderEntry->references <= 0) + if (--shaderEntry->references <= 0) { GLES2_EvictShader(renderer, shaderEntry); + } shaderEntry = data->program_cache.tail->fragment_shader; - if (--shaderEntry->references <= 0) + if (--shaderEntry->references <= 0) { GLES2_EvictShader(renderer, shaderEntry); + } data->glDeleteProgram(data->program_cache.tail->id); data->program_cache.tail = data->program_cache.tail->prev; SDL_free(data->program_cache.tail->next); @@ -786,47 +1022,43 @@ GLES2_CacheShader(SDL_Renderer *renderer, GLES2_ShaderType type, SDL_BlendMode b /* Find the corresponding shader */ shader = GLES2_GetShader(type, blendMode); - if (!shader) - { + if (!shader) { SDL_SetError("No shader matching the requested characteristics was found"); return NULL; } /* Find a matching shader instance that's supported on this hardware */ - for (i = 0; i < shader->instance_count && !instance; ++i) - { - for (j = 0; j < data->shader_format_count && !instance; ++j) - { - if (!shader->instances) - continue; - if (!shader->instances[i]) + for (i = 0; i < shader->instance_count && !instance; ++i) { + for (j = 0; j < data->shader_format_count && !instance; ++j) { + if (!shader->instances[i]) { continue; - if (shader->instances[i]->format != data->shader_formats[j]) + } + if (shader->instances[i]->format != data->shader_formats[j]) { continue; + } instance = shader->instances[i]; } } - if (!instance) - { + if (!instance) { SDL_SetError("The specified shader cannot be loaded on the current platform"); return NULL; } /* Check if we've already cached this shader */ entry = data->shader_cache.head; - while (entry) - { - if (entry->instance == instance) + while (entry) { + if (entry->instance == instance) { break; + } entry = entry->next; } - if (entry) + if (entry) { return entry; + } /* Create a shader cache entry */ entry = (GLES2_ShaderCacheEntry *)SDL_calloc(1, sizeof(GLES2_ShaderCacheEntry)); - if (!entry) - { + if (!entry) { SDL_OutOfMemory(); return NULL; } @@ -835,19 +1067,15 @@ GLES2_CacheShader(SDL_Renderer *renderer, GLES2_ShaderType type, SDL_BlendMode b /* Compile or load the selected shader instance */ entry->id = data->glCreateShader(instance->type); - if (instance->format == (GLenum)-1) - { + if (instance->format == (GLenum)-1) { data->glShaderSource(entry->id, 1, (const char **)&instance->data, NULL); data->glCompileShader(entry->id); data->glGetShaderiv(entry->id, GL_COMPILE_STATUS, &compileSuccessful); - } - else - { + } else { data->glShaderBinary(1, &entry->id, instance->format, instance->data, instance->length); compileSuccessful = GL_TRUE; } - if (!compileSuccessful) - { + if (!compileSuccessful) { char *info = NULL; int length = 0; @@ -870,8 +1098,7 @@ GLES2_CacheShader(SDL_Renderer *renderer, GLES2_ShaderType type, SDL_BlendMode b } /* Link the shader entry in at the front of the cache */ - if (data->shader_cache.head) - { + if (data->shader_cache.head) { entry->next = data->shader_cache.head; data->shader_cache.head->prev = entry; } @@ -886,12 +1113,15 @@ GLES2_EvictShader(SDL_Renderer *renderer, GLES2_ShaderCacheEntry *entry) GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; /* Unlink the shader from the cache */ - if (entry->next) + if (entry->next) { entry->next->prev = entry->prev; - if (entry->prev) + } + if (entry->prev) { entry->prev->next = entry->next; - if (data->shader_cache.head == entry) + } + if (data->shader_cache.head == entry) { data->shader_cache.head = entry->next; + } --data->shader_cache.count; /* Deallocate the shader */ @@ -910,8 +1140,7 @@ GLES2_SelectProgram(SDL_Renderer *renderer, GLES2_ImageSource source, SDL_BlendM /* Select an appropriate shader pair for the specified modes */ vtype = GLES2_SHADER_VERTEX_DEFAULT; - switch (source) - { + switch (source) { case GLES2_IMAGESOURCE_SOLID: ftype = GLES2_SHADER_FRAGMENT_SOLID_SRC; break; @@ -927,28 +1156,41 @@ GLES2_SelectProgram(SDL_Renderer *renderer, GLES2_ImageSource source, SDL_BlendM case GLES2_IMAGESOURCE_TEXTURE_BGR: ftype = GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC; break; + case GLES2_IMAGESOURCE_TEXTURE_YUV: + ftype = GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC; + break; + case GLES2_IMAGESOURCE_TEXTURE_NV12: + ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC; + break; + case GLES2_IMAGESOURCE_TEXTURE_NV21: + ftype = GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC; + break; default: goto fault; } /* Load the requested shaders */ vertex = GLES2_CacheShader(renderer, vtype, blendMode); - if (!vertex) + if (!vertex) { goto fault; + } fragment = GLES2_CacheShader(renderer, ftype, blendMode); - if (!fragment) + if (!fragment) { goto fault; + } /* Check if we need to change programs at all */ if (data->current_program && data->current_program->vertex_shader == vertex && - data->current_program->fragment_shader == fragment) + data->current_program->fragment_shader == fragment) { return 0; + } /* Generate a matching program */ program = GLES2_CacheProgram(renderer, vertex, fragment, blendMode); - if (!program) + if (!program) { goto fault; + } /* Select that program in OpenGL */ data->glUseProgram(program->id); @@ -957,16 +1199,19 @@ GLES2_SelectProgram(SDL_Renderer *renderer, GLES2_ImageSource source, SDL_BlendM data->current_program = program; /* Activate an orthographic projection */ - if (GLES2_SetOrthographicProjection(renderer) < 0) + if (GLES2_SetOrthographicProjection(renderer) < 0) { goto fault; + } /* Clean up and return */ return 0; fault: - if (vertex && vertex->references <= 0) + if (vertex && vertex->references <= 0) { GLES2_EvictShader(renderer, vertex); - if (fragment && fragment->references <= 0) + } + if (fragment && fragment->references <= 0) { GLES2_EvictShader(renderer, fragment); + } data->current_program = NULL; return -1; } @@ -1172,6 +1417,34 @@ GLES2_SetDrawingState(SDL_Renderer * renderer) return 0; } +static int +GLES2_UpdateVertexBuffer(SDL_Renderer *renderer, GLES2_Attribute attr, + const void *vertexData, size_t dataSizeInBytes) +{ + GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; + +#if !SDL_GLES2_USE_VBOS + data->glVertexAttribPointer(attr, attr == GLES2_ATTRIBUTE_ANGLE ? 1 : 2, GL_FLOAT, GL_FALSE, 0, vertexData); +#else + if (!data->vertex_buffers[attr]) { + data->glGenBuffers(1, &data->vertex_buffers[attr]); + } + + data->glBindBuffer(GL_ARRAY_BUFFER, data->vertex_buffers[attr]); + + if (data->vertex_buffer_size[attr] < dataSizeInBytes) { + data->glBufferData(GL_ARRAY_BUFFER, dataSizeInBytes, vertexData, GL_STREAM_DRAW); + data->vertex_buffer_size[attr] = dataSizeInBytes; + } else { + data->glBufferSubData(GL_ARRAY_BUFFER, 0, dataSizeInBytes, vertexData); + } + + data->glVertexAttribPointer(attr, attr == GLES2_ATTRIBUTE_ANGLE ? 1 : 2, GL_FLOAT, GL_FALSE, 0, 0); +#endif + + return 0; +} + static int GLES2_RenderDrawPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int count) { @@ -1192,7 +1465,8 @@ GLES2_RenderDrawPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int cou vertices[idx * 2] = x; vertices[(idx * 2) + 1] = y; } - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, count * 2 * sizeof(GLfloat)); data->glDrawArrays(GL_POINTS, 0, count); SDL_stack_free(vertices); return 0; @@ -1218,7 +1492,8 @@ GLES2_RenderDrawLines(SDL_Renderer *renderer, const SDL_FPoint *points, int coun vertices[idx * 2] = x; vertices[(idx * 2) + 1] = y; } - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, count * 2 * sizeof(GLfloat)); data->glDrawArrays(GL_LINE_STRIP, 0, count); /* We need to close the endpoint of the line */ @@ -1259,107 +1534,119 @@ GLES2_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count) vertices[5] = yMax; vertices[6] = xMax; vertices[7] = yMax; - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, 8 * sizeof(GLfloat)); data->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } return GL_CheckError("", renderer); } static int -GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, - const SDL_FRect *dstrect) +GLES2_SetupCopy(SDL_Renderer *renderer, SDL_Texture *texture) { GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; SDL_BlendMode blendMode; - GLfloat vertices[8]; - GLfloat texCoords[8]; GLES2_ProgramCacheEntry *program; Uint8 r, g, b, a; - GLES2_ActivateRenderer(renderer); - /* Activate an appropriate shader and set the projection matrix */ blendMode = texture->blendMode; if (renderer->target) { /* Check if we need to do color mapping between the source and render target textures */ if (renderer->target->format != texture->format) { - switch (texture->format) - { + switch (texture->format) { + case SDL_PIXELFORMAT_ARGB8888: + switch (renderer->target->format) { + case SDL_PIXELFORMAT_ABGR8888: + case SDL_PIXELFORMAT_BGR888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; + case SDL_PIXELFORMAT_RGB888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; + break; + } + break; case SDL_PIXELFORMAT_ABGR8888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ARGB8888: - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - break; + switch (renderer->target->format) { + case SDL_PIXELFORMAT_ARGB8888: + case SDL_PIXELFORMAT_RGB888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; + case SDL_PIXELFORMAT_BGR888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; + break; } break; - case SDL_PIXELFORMAT_ARGB8888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - break; + case SDL_PIXELFORMAT_RGB888: + switch (renderer->target->format) { + case SDL_PIXELFORMAT_ABGR8888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; + case SDL_PIXELFORMAT_ARGB8888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; + break; + case SDL_PIXELFORMAT_BGR888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; } break; case SDL_PIXELFORMAT_BGR888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; - break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; - break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; + switch (renderer->target->format) { + case SDL_PIXELFORMAT_ABGR8888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; + break; + case SDL_PIXELFORMAT_ARGB8888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; + break; + case SDL_PIXELFORMAT_RGB888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; } break; - case SDL_PIXELFORMAT_RGB888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; - break; - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - } + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_YV12: + sourceType = GLES2_IMAGESOURCE_TEXTURE_YUV; break; + case SDL_PIXELFORMAT_NV12: + sourceType = GLES2_IMAGESOURCE_TEXTURE_NV12; + break; + case SDL_PIXELFORMAT_NV21: + sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21; + break; + default: + return SDL_SetError("Unsupported texture format"); } + } else { + sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; /* Texture formats match, use the non color mapping shader (even if the formats are not ABGR) */ } - else sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; /* Texture formats match, use the non color mapping shader (even if the formats are not ABGR) */ - } - else { - switch (texture->format) - { + } else { + switch (texture->format) { + case SDL_PIXELFORMAT_ARGB8888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + break; case SDL_PIXELFORMAT_ABGR8888: sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; + case SDL_PIXELFORMAT_RGB888: + sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; break; case SDL_PIXELFORMAT_BGR888: sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_YV12: + sourceType = GLES2_IMAGESOURCE_TEXTURE_YUV; + break; + case SDL_PIXELFORMAT_NV12: + sourceType = GLES2_IMAGESOURCE_TEXTURE_NV12; + break; + case SDL_PIXELFORMAT_NV21: + sourceType = GLES2_IMAGESOURCE_TEXTURE_NV21; break; default: - return -1; + return SDL_SetError("Unsupported texture format"); } } @@ -1368,6 +1655,21 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s } /* Select the target texture */ + if (tdata->yuv) { + data->glActiveTexture(GL_TEXTURE2); + data->glBindTexture(tdata->texture_type, tdata->texture_v); + + data->glActiveTexture(GL_TEXTURE1); + data->glBindTexture(tdata->texture_type, tdata->texture_u); + + data->glActiveTexture(GL_TEXTURE0); + } + if (tdata->nv12) { + data->glActiveTexture(GL_TEXTURE1); + data->glBindTexture(tdata->texture_type, tdata->texture_u); + + data->glActiveTexture(GL_TEXTURE0); + } data->glBindTexture(tdata->texture_type, tdata->texture); /* Configure color modulation */ @@ -1398,6 +1700,22 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s GLES2_SetBlendMode(data, blendMode); GLES2_SetTexCoords(data, SDL_TRUE); + return 0; +} + +static int +GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *srcrect, + const SDL_FRect *dstrect) +{ + GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; + GLfloat vertices[8]; + GLfloat texCoords[8]; + + GLES2_ActivateRenderer(renderer); + + if (GLES2_SetupCopy(renderer, texture) < 0) { + return -1; + } /* Emit the textured quad */ vertices[0] = dstrect->x; @@ -1408,7 +1726,8 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s vertices[5] = (dstrect->y + dstrect->h); vertices[6] = (dstrect->x + dstrect->w); vertices[7] = (dstrect->y + dstrect->h); - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, 8 * sizeof(GLfloat)); texCoords[0] = srcrect->x / (GLfloat)texture->w; texCoords[1] = srcrect->y / (GLfloat)texture->h; texCoords[2] = (srcrect->x + srcrect->w) / (GLfloat)texture->w; @@ -1417,7 +1736,8 @@ GLES2_RenderCopy(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *s texCoords[5] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; texCoords[6] = (srcrect->x + srcrect->w) / (GLfloat)texture->w; texCoords[7] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; - data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_TEXCOORD, texCoords, 8 * sizeof(GLfloat)); data->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); return GL_CheckError("", renderer); @@ -1428,11 +1748,6 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect const SDL_FRect *dstrect, const double angle, const SDL_FPoint *center, const SDL_RendererFlip flip) { GLES2_DriverContext *data = (GLES2_DriverContext *)renderer->driverdata; - GLES2_TextureData *tdata = (GLES2_TextureData *)texture->driverdata; - GLES2_ImageSource sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - GLES2_ProgramCacheEntry *program; - Uint8 r, g, b, a; - SDL_BlendMode blendMode; GLfloat vertices[8]; GLfloat texCoords[8]; GLfloat translate[8]; @@ -1441,6 +1756,10 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect GLES2_ActivateRenderer(renderer); + if (GLES2_SetupCopy(renderer, texture) < 0) { + return -1; + } + data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_CENTER); data->glEnableVertexAttribArray(GLES2_ATTRIBUTE_ANGLE); fAngle[0] = fAngle[1] = fAngle[2] = fAngle[3] = (GLfloat)(360.0f - angle); @@ -1448,124 +1767,6 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect translate[0] = translate[2] = translate[4] = translate[6] = (center->x + dstrect->x); translate[1] = translate[3] = translate[5] = translate[7] = (center->y + dstrect->y); - /* Activate an appropriate shader and set the projection matrix */ - blendMode = texture->blendMode; - if (renderer->target) { - /* Check if we need to do color mapping between the source and render target textures */ - if (renderer->target->format != texture->format) { - switch (texture->format) - { - case SDL_PIXELFORMAT_ABGR8888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ARGB8888: - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - break; - } - break; - case SDL_PIXELFORMAT_ARGB8888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - break; - } - break; - case SDL_PIXELFORMAT_BGR888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; - break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; - break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - } - break; - case SDL_PIXELFORMAT_RGB888: - switch (renderer->target->format) - { - case SDL_PIXELFORMAT_ABGR8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; - break; - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - } - break; - } - } - else sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; /* Texture formats match, use the non color mapping shader (even if the formats are not ABGR) */ - } - else { - switch (texture->format) - { - case SDL_PIXELFORMAT_ABGR8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ABGR; - break; - case SDL_PIXELFORMAT_ARGB8888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_ARGB; - break; - case SDL_PIXELFORMAT_BGR888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_BGR; - break; - case SDL_PIXELFORMAT_RGB888: - sourceType = GLES2_IMAGESOURCE_TEXTURE_RGB; - break; - default: - return -1; - } - } - if (GLES2_SelectProgram(renderer, sourceType, blendMode) < 0) - return -1; - - /* Select the target texture */ - data->glBindTexture(tdata->texture_type, tdata->texture); - - /* Configure color modulation */ - /* !!! FIXME: grep for glUniform4f(), move that stuff to a subroutine, it's a lot of copy/paste. */ - g = texture->g; - a = texture->a; - - if (renderer->target && - (renderer->target->format == SDL_PIXELFORMAT_ARGB8888 || - renderer->target->format == SDL_PIXELFORMAT_RGB888)) { - r = texture->b; - b = texture->r; - } else { - r = texture->r; - b = texture->b; - } - - program = data->current_program; - - if (!CompareColors(program->modulation_r, program->modulation_g, program->modulation_b, program->modulation_a, r, g, b, a)) { - data->glUniform4f(program->uniform_locations[GLES2_UNIFORM_MODULATION], r * inv255f, g * inv255f, b * inv255f, a * inv255f); - program->modulation_r = r; - program->modulation_g = g; - program->modulation_b = b; - program->modulation_a = a; - } - - /* Configure texture blending */ - GLES2_SetBlendMode(data, blendMode); - - GLES2_SetTexCoords(data, SDL_TRUE); - /* Emit the textured quad */ vertices[0] = dstrect->x; vertices[1] = dstrect->y; @@ -1586,9 +1787,13 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect vertices[5] = vertices[7] = tmp; } - data->glVertexAttribPointer(GLES2_ATTRIBUTE_ANGLE, 1, GL_FLOAT, GL_FALSE, 0, &fAngle); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_ANGLE, 1, GL_FLOAT, GL_FALSE, 0, &fAngle); data->glVertexAttribPointer(GLES2_ATTRIBUTE_CENTER, 2, GL_FLOAT, GL_FALSE, 0, translate); - data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices); + data->glVertexAttribPointer(GLES2_ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);*/ + + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_ANGLE, fAngle, 4 * sizeof(GLfloat)); + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_CENTER, translate, 8 * sizeof(GLfloat)); + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_POSITION, vertices, 8 * sizeof(GLfloat)); texCoords[0] = srcrect->x / (GLfloat)texture->w; texCoords[1] = srcrect->y / (GLfloat)texture->h; @@ -1598,7 +1803,8 @@ GLES2_RenderCopyEx(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect texCoords[5] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; texCoords[6] = (srcrect->x + srcrect->w) / (GLfloat)texture->w; texCoords[7] = (srcrect->y + srcrect->h) / (GLfloat)texture->h; - data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords); + /*data->glVertexAttribPointer(GLES2_ATTRIBUTE_TEXCOORD, 2, GL_FLOAT, GL_FALSE, 0, texCoords);*/ + GLES2_UpdateVertexBuffer(renderer, GLES2_ATTRIBUTE_TEXCOORD, texCoords, 8 * sizeof(GLfloat)); data->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); data->glDisableVertexAttribArray(GLES2_ATTRIBUTE_CENTER); data->glDisableVertexAttribArray(GLES2_ATTRIBUTE_ANGLE); @@ -1681,8 +1887,12 @@ static int GLES2_BindTexture (SDL_Renderer * renderer, SDL_Texture *texture, flo data->glBindTexture(texturedata->texture_type, texturedata->texture); - if(texw) *texw = 1.0; - if(texh) *texh = 1.0; + if (texw) { + *texw = 1.0; + } + if (texh) { + *texh = 1.0; + } return 0; } @@ -1743,30 +1953,27 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) #ifndef ZUNE_HD GLboolean hasCompiler; #endif - Uint32 windowFlags; + Uint32 window_flags; GLint window_framebuffer; GLint value; - int profile_mask, major, minor; + int profile_mask = 0, major = 0, minor = 0; + SDL_bool changed_window = SDL_FALSE; SDL_GL_GetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, &profile_mask); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, &major); SDL_GL_GetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, &minor); - windowFlags = SDL_GetWindowFlags(window); - if (!(windowFlags & SDL_WINDOW_OPENGL) || + window_flags = SDL_GetWindowFlags(window); + if (!(window_flags & SDL_WINDOW_OPENGL) || profile_mask != SDL_GL_CONTEXT_PROFILE_ES || major != RENDERER_CONTEXT_MAJOR || minor != RENDERER_CONTEXT_MINOR) { - + + changed_window = SDL_TRUE; SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, RENDERER_CONTEXT_MAJOR); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, RENDERER_CONTEXT_MINOR); - if (SDL_RecreateWindow(window, windowFlags | SDL_WINDOW_OPENGL) < 0) { - /* Uh oh, better try to put it back... */ - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); - SDL_RecreateWindow(window, windowFlags); - return NULL; + if (SDL_RecreateWindow(window, window_flags | SDL_WINDOW_OPENGL) < 0) { + goto error; } } @@ -1774,14 +1981,14 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) renderer = (SDL_Renderer *)SDL_calloc(1, sizeof(SDL_Renderer)); if (!renderer) { SDL_OutOfMemory(); - return NULL; + goto error; } data = (GLES2_DriverContext *)SDL_calloc(1, sizeof(GLES2_DriverContext)); if (!data) { GLES2_DestroyRenderer(renderer); SDL_OutOfMemory(); - return NULL; + goto error; } renderer->info = GLES2_RenderDriver.info; renderer->info.flags = (SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE); @@ -1790,19 +1997,18 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) /* Create an OpenGL ES 2.0 context */ data->context = SDL_GL_CreateContext(window); - if (!data->context) - { + if (!data->context) { GLES2_DestroyRenderer(renderer); - return NULL; + goto error; } if (SDL_GL_MakeCurrent(window, data->context) < 0) { GLES2_DestroyRenderer(renderer); - return NULL; + goto error; } if (GLES2_LoadFunctions(data) < 0) { GLES2_DestroyRenderer(renderer); - return NULL; + goto error; } #if __WINRT__ @@ -1842,23 +2048,24 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) #else /* !ZUNE_HD */ data->glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &nFormats); data->glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler); - if (hasCompiler) + if (hasCompiler) { ++nFormats; + } #endif /* ZUNE_HD */ data->shader_formats = (GLenum *)SDL_calloc(nFormats, sizeof(GLenum)); - if (!data->shader_formats) - { + if (!data->shader_formats) { GLES2_DestroyRenderer(renderer); SDL_OutOfMemory(); - return NULL; + goto error; } data->shader_format_count = nFormats; #ifdef ZUNE_HD data->shader_formats[0] = GL_NVIDIA_PLATFORM_BINARY_NV; #else /* !ZUNE_HD */ data->glGetIntegerv(GL_SHADER_BINARY_FORMATS, (GLint *)data->shader_formats); - if (hasCompiler) + if (hasCompiler) { data->shader_formats[nFormats - 1] = (GLenum)-1; + } #endif /* ZUNE_HD */ data->framebuffers = NULL; @@ -1867,8 +2074,10 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) /* Populate the function pointers for the module */ renderer->WindowEvent = &GLES2_WindowEvent; + renderer->GetOutputSize = &GLES2_GetOutputSize; renderer->CreateTexture = &GLES2_CreateTexture; renderer->UpdateTexture = &GLES2_UpdateTexture; + renderer->UpdateTextureYUV = &GLES2_UpdateTextureYUV; renderer->LockTexture = &GLES2_LockTexture; renderer->UnlockTexture = &GLES2_UnlockTexture; renderer->SetRenderTarget = &GLES2_SetRenderTarget; @@ -1887,9 +2096,24 @@ GLES2_CreateRenderer(SDL_Window *window, Uint32 flags) renderer->GL_BindTexture = &GLES2_BindTexture; renderer->GL_UnbindTexture = &GLES2_UnbindTexture; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_YV12; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_IYUV; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_NV12; + renderer->info.texture_formats[renderer->info.num_texture_formats++] = SDL_PIXELFORMAT_NV21; + GLES2_ResetState(renderer); return renderer; + +error: + if (changed_window) { + /* Uh oh, better try to put it back... */ + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, profile_mask); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, major); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minor); + SDL_RecreateWindow(window, window_flags); + } + return NULL; } #endif /* SDL_VIDEO_RENDER_OGL_ES2 && !SDL_RENDER_DISABLED */ diff --git a/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.c b/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.c index 3b16cc3dfa..0c01a8c64e 100644 --- a/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.c +++ b/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -126,6 +126,74 @@ static const Uint8 GLES2_FragmentSrc_TextureBGRSrc_[] = " \ } \ "; +/* YUV to ABGR conversion */ +static const Uint8 GLES2_FragmentSrc_TextureYUVSrc_[] = " \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform sampler2D u_texture_u; \ + uniform sampler2D u_texture_v; \ + uniform vec4 u_modulation; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + mediump vec3 yuv; \ + lowp vec3 rgb; \ + yuv.x = texture2D(u_texture, v_texCoord).r; \ + yuv.y = texture2D(u_texture_u, v_texCoord).r - 0.5; \ + yuv.z = texture2D(u_texture_v, v_texCoord).r - 0.5; \ + rgb = mat3( 1, 1, 1, \ + 0, -0.39465, 2.03211, \ + 1.13983, -0.58060, 0) * yuv; \ + gl_FragColor = vec4(rgb, 1); \ + gl_FragColor *= u_modulation; \ + } \ +"; + +/* NV12 to ABGR conversion */ +static const Uint8 GLES2_FragmentSrc_TextureNV12Src_[] = " \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform sampler2D u_texture_u; \ + uniform vec4 u_modulation; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + mediump vec3 yuv; \ + lowp vec3 rgb; \ + yuv.x = texture2D(u_texture, v_texCoord).r; \ + yuv.yz = texture2D(u_texture_u, v_texCoord).ra - 0.5; \ + rgb = mat3( 1, 1, 1, \ + 0, -0.39465, 2.03211, \ + 1.13983, -0.58060, 0) * yuv; \ + gl_FragColor = vec4(rgb, 1); \ + gl_FragColor *= u_modulation; \ + } \ +"; + +/* NV21 to ABGR conversion */ +static const Uint8 GLES2_FragmentSrc_TextureNV21Src_[] = " \ + precision mediump float; \ + uniform sampler2D u_texture; \ + uniform sampler2D u_texture_u; \ + uniform vec4 u_modulation; \ + varying vec2 v_texCoord; \ + \ + void main() \ + { \ + mediump vec3 yuv; \ + lowp vec3 rgb; \ + yuv.x = texture2D(u_texture, v_texCoord).r; \ + yuv.yz = texture2D(u_texture_u, v_texCoord).ar - 0.5; \ + rgb = mat3( 1, 1, 1, \ + 0, -0.39465, 2.03211, \ + 1.13983, -0.58060, 0) * yuv; \ + gl_FragColor = vec4(rgb, 1); \ + gl_FragColor *= u_modulation; \ + } \ +"; + static const GLES2_ShaderInstance GLES2_VertexSrc_Default = { GL_VERTEX_SHADER, GLES2_SOURCE_SHADER, @@ -168,6 +236,28 @@ static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureBGRSrc = { GLES2_FragmentSrc_TextureBGRSrc_ }; +static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureYUVSrc = { + GL_FRAGMENT_SHADER, + GLES2_SOURCE_SHADER, + sizeof(GLES2_FragmentSrc_TextureYUVSrc_), + GLES2_FragmentSrc_TextureYUVSrc_ +}; + +static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV12Src = { + GL_FRAGMENT_SHADER, + GLES2_SOURCE_SHADER, + sizeof(GLES2_FragmentSrc_TextureNV12Src_), + GLES2_FragmentSrc_TextureNV12Src_ +}; + +static const GLES2_ShaderInstance GLES2_FragmentSrc_TextureNV21Src = { + GL_FRAGMENT_SHADER, + GLES2_SOURCE_SHADER, + sizeof(GLES2_FragmentSrc_TextureNV21Src_), + GLES2_FragmentSrc_TextureNV21Src_ +}; + + /************************************************************************************************* * Vertex/fragment shader binaries (NVIDIA Tegra 1/2) * *************************************************************************************************/ @@ -692,19 +782,39 @@ static GLES2_Shader GLES2_FragmentShader_Modulated_TextureBGRSrc = { } }; +static GLES2_Shader GLES2_FragmentShader_TextureYUVSrc = { + 1, + { + &GLES2_FragmentSrc_TextureYUVSrc + } +}; + +static GLES2_Shader GLES2_FragmentShader_TextureNV12Src = { + 1, + { + &GLES2_FragmentSrc_TextureNV12Src + } +}; + +static GLES2_Shader GLES2_FragmentShader_TextureNV21Src = { + 1, + { + &GLES2_FragmentSrc_TextureNV21Src + } +}; + + /************************************************************************************************* * Shader selector * *************************************************************************************************/ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMode) { - switch (type) - { + switch (type) { case GLES2_SHADER_VERTEX_DEFAULT: return &GLES2_VertexShader_Default; case GLES2_SHADER_FRAGMENT_SOLID_SRC: - switch (blendMode) - { + switch (blendMode) { case SDL_BLENDMODE_NONE: return &GLES2_FragmentShader_None_SolidSrc; case SDL_BLENDMODE_BLEND: @@ -717,8 +827,7 @@ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMo return NULL; } case GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC: - switch (blendMode) - { + switch (blendMode) { case SDL_BLENDMODE_NONE: return &GLES2_FragmentShader_None_TextureABGRSrc; case SDL_BLENDMODE_BLEND: @@ -731,8 +840,7 @@ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMo return NULL; } case GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC: - switch (blendMode) - { + switch (blendMode) { case SDL_BLENDMODE_NONE: return &GLES2_FragmentShader_None_TextureARGBSrc; case SDL_BLENDMODE_BLEND: @@ -746,8 +854,7 @@ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMo } case GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC: - switch (blendMode) - { + switch (blendMode) { case SDL_BLENDMODE_NONE: return &GLES2_FragmentShader_None_TextureRGBSrc; case SDL_BLENDMODE_BLEND: @@ -761,8 +868,7 @@ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMo } case GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC: - switch (blendMode) - { + switch (blendMode) { case SDL_BLENDMODE_NONE: return &GLES2_FragmentShader_None_TextureBGRSrc; case SDL_BLENDMODE_BLEND: @@ -774,6 +880,21 @@ const GLES2_Shader *GLES2_GetShader(GLES2_ShaderType type, SDL_BlendMode blendMo default: return NULL; } + + case GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC: + { + return &GLES2_FragmentShader_TextureYUVSrc; + } + + case GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC: + { + return &GLES2_FragmentShader_TextureNV12Src; + } + + case GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC: + { + return &GLES2_FragmentShader_TextureNV21Src; + } default: return NULL; diff --git a/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.h b/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.h index 77c75c9f17..3958ae00d1 100644 --- a/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.h +++ b/Engine/lib/sdl/src/render/opengles2/SDL_shaders_gles2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -46,7 +46,10 @@ typedef enum GLES2_SHADER_FRAGMENT_TEXTURE_ABGR_SRC, GLES2_SHADER_FRAGMENT_TEXTURE_ARGB_SRC, GLES2_SHADER_FRAGMENT_TEXTURE_BGR_SRC, - GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC + GLES2_SHADER_FRAGMENT_TEXTURE_RGB_SRC, + GLES2_SHADER_FRAGMENT_TEXTURE_YUV_SRC, + GLES2_SHADER_FRAGMENT_TEXTURE_NV12_SRC, + GLES2_SHADER_FRAGMENT_TEXTURE_NV21_SRC } GLES2_ShaderType; #define GLES2_SOURCE_SHADER (GLenum)-1 diff --git a/Engine/lib/sdl/src/render/psp/SDL_render_psp.c b/Engine/lib/sdl/src/render/psp/SDL_render_psp.c index cdd13e822f..8e8c873535 100644 --- a/Engine/lib/sdl/src/render/psp/SDL_render_psp.c +++ b/Engine/lib/sdl/src/render/psp/SDL_render_psp.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -459,7 +459,7 @@ static int PSP_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) { /* PSP_RenderData *renderdata = (PSP_RenderData *) renderer->driverdata; */ - PSP_TextureData* psp_texture = (PSP_TextureData*) SDL_calloc(1, sizeof(*psp_texture));; + PSP_TextureData* psp_texture = (PSP_TextureData*) SDL_calloc(1, sizeof(*psp_texture)); if(!psp_texture) return -1; diff --git a/Engine/lib/sdl/src/render/software/SDL_blendfillrect.c b/Engine/lib/sdl/src/render/software/SDL_blendfillrect.c index cb184d6342..7cfb274aef 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendfillrect.c +++ b/Engine/lib/sdl/src/render/software/SDL_blendfillrect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_blendfillrect.h b/Engine/lib/sdl/src/render/software/SDL_blendfillrect.h index 297c839e1a..88bb2e2c46 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendfillrect.h +++ b/Engine/lib/sdl/src/render/software/SDL_blendfillrect.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_blendline.c b/Engine/lib/sdl/src/render/software/SDL_blendline.c index 02d748d5fc..ef0d585316 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendline.c +++ b/Engine/lib/sdl/src/render/software/SDL_blendline.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_blendline.h b/Engine/lib/sdl/src/render/software/SDL_blendline.h index 14a7c18a54..c0b545f345 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendline.h +++ b/Engine/lib/sdl/src/render/software/SDL_blendline.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_blendpoint.c b/Engine/lib/sdl/src/render/software/SDL_blendpoint.c index dab135600c..fc42dfe767 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendpoint.c +++ b/Engine/lib/sdl/src/render/software/SDL_blendpoint.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_blendpoint.h b/Engine/lib/sdl/src/render/software/SDL_blendpoint.h index 72eaf7b870..58ddec7ee4 100644 --- a/Engine/lib/sdl/src/render/software/SDL_blendpoint.h +++ b/Engine/lib/sdl/src/render/software/SDL_blendpoint.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_draw.h b/Engine/lib/sdl/src/render/software/SDL_draw.h index ba2ec311cd..3a5e7cf113 100644 --- a/Engine/lib/sdl/src/render/software/SDL_draw.h +++ b/Engine/lib/sdl/src/render/software/SDL_draw.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -51,11 +51,12 @@ do { \ #define DRAW_SETPIXEL_BLEND(getpixel, setpixel) \ do { \ - unsigned sr, sg, sb, sa; (void) sa; \ + unsigned sr, sg, sb, sa = 0xFF; \ getpixel; \ sr = DRAW_MUL(inva, sr) + r; \ sg = DRAW_MUL(inva, sg) + g; \ sb = DRAW_MUL(inva, sb) + b; \ + sa = DRAW_MUL(inva, sa) + a; \ setpixel; \ } while (0) diff --git a/Engine/lib/sdl/src/render/software/SDL_drawline.c b/Engine/lib/sdl/src/render/software/SDL_drawline.c index 1ff84a46d9..fd50ea748b 100644 --- a/Engine/lib/sdl/src/render/software/SDL_drawline.c +++ b/Engine/lib/sdl/src/render/software/SDL_drawline.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_drawline.h b/Engine/lib/sdl/src/render/software/SDL_drawline.h index e3378ae8f5..40721c3fce 100644 --- a/Engine/lib/sdl/src/render/software/SDL_drawline.h +++ b/Engine/lib/sdl/src/render/software/SDL_drawline.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_drawpoint.c b/Engine/lib/sdl/src/render/software/SDL_drawpoint.c index 3f2de86c17..98f0d83c00 100644 --- a/Engine/lib/sdl/src/render/software/SDL_drawpoint.c +++ b/Engine/lib/sdl/src/render/software/SDL_drawpoint.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_drawpoint.h b/Engine/lib/sdl/src/render/software/SDL_drawpoint.h index 96933d616b..e77857ac91 100644 --- a/Engine/lib/sdl/src/render/software/SDL_drawpoint.h +++ b/Engine/lib/sdl/src/render/software/SDL_drawpoint.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_render_sw.c b/Engine/lib/sdl/src/render/software/SDL_render_sw.c index f0eb768f5f..dadd2442f9 100644 --- a/Engine/lib/sdl/src/render/software/SDL_render_sw.c +++ b/Engine/lib/sdl/src/render/software/SDL_render_sw.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -82,14 +82,14 @@ SDL_RenderDriver SW_RenderDriver = { SDL_RENDERER_SOFTWARE | SDL_RENDERER_TARGETTEXTURE, 8, { - SDL_PIXELFORMAT_RGB555, - SDL_PIXELFORMAT_RGB565, - SDL_PIXELFORMAT_RGB888, - SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_ARGB8888, - SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_ABGR8888, - SDL_PIXELFORMAT_BGRA8888 + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_RGB888, + SDL_PIXELFORMAT_BGR888, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_RGB555 }, 0, 0} @@ -146,6 +146,7 @@ SW_CreateRendererForSurface(SDL_Surface * surface) return NULL; } data->surface = surface; + data->window = surface; renderer->WindowEvent = SW_WindowEvent; renderer->GetOutputSize = SW_GetOutputSize; @@ -252,6 +253,12 @@ static int SW_SetTextureColorMod(SDL_Renderer * renderer, SDL_Texture * texture) { SDL_Surface *surface = (SDL_Surface *) texture->driverdata; + /* If the color mod is ever enabled (non-white), permanently disable RLE (which doesn't support + * color mod) to avoid potentially frequent RLE encoding/decoding. + */ + if ((texture->r & texture->g & texture->b) != 255) { + SDL_SetSurfaceRLE(surface, 0); + } return SDL_SetSurfaceColorMod(surface, texture->r, texture->g, texture->b); } @@ -260,6 +267,12 @@ static int SW_SetTextureAlphaMod(SDL_Renderer * renderer, SDL_Texture * texture) { SDL_Surface *surface = (SDL_Surface *) texture->driverdata; + /* If the texture ever has multiple alpha values (surface alpha plus alpha channel), permanently + * disable RLE (which doesn't support this) to avoid potentially frequent RLE encoding/decoding. + */ + if (texture->a != 255 && surface->format->Amask) { + SDL_SetSurfaceRLE(surface, 0); + } return SDL_SetSurfaceAlphaMod(surface, texture->a); } @@ -267,6 +280,12 @@ static int SW_SetTextureBlendMode(SDL_Renderer * renderer, SDL_Texture * texture) { SDL_Surface *surface = (SDL_Surface *) texture->driverdata; + /* If add or mod blending are ever enabled, permanently disable RLE (which doesn't support + * them) to avoid potentially frequent RLE encoding/decoding. + */ + if ((texture->blendMode == SDL_BLENDMODE_ADD || texture->blendMode == SDL_BLENDMODE_MOD)) { + SDL_SetSurfaceRLE(surface, 0); + } return SDL_SetSurfaceBlendMode(surface, texture->blendMode); } @@ -347,11 +366,9 @@ SW_UpdateClipRect(SDL_Renderer * renderer) { SW_RenderData *data = (SW_RenderData *) renderer->driverdata; SDL_Surface *surface = data->surface; - const SDL_Rect *rect = &renderer->clip_rect; - if (surface) { - if (!SDL_RectEmpty(rect)) { - SDL_SetClipRect(surface, rect); + if (renderer->clipping_enabled) { + SDL_SetClipRect(surface, &renderer->clip_rect); } else { SDL_SetClipRect(surface, NULL); } @@ -554,6 +571,10 @@ SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, if ( srcrect->w == final_rect.w && srcrect->h == final_rect.h ) { return SDL_BlitSurface(src, srcrect, surface, &final_rect); } else { + /* If scaling is ever done, permanently disable RLE (which doesn't support scaling) + * to avoid potentially frequent RLE encoding/decoding. + */ + SDL_SetSurfaceRLE(surface, 0); return SDL_BlitScaled(src, srcrect, surface, &final_rect); } } @@ -579,7 +600,6 @@ SW_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, SDL_Surface *src = (SDL_Surface *) texture->driverdata; SDL_Rect final_rect, tmp_rect; SDL_Surface *surface_rotated, *surface_scaled; - Uint32 colorkey; int retval, dstwidth, dstheight, abscenterx, abscentery; double cangle, sangle, px, py, p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y; @@ -597,66 +617,113 @@ SW_RenderCopyEx(SDL_Renderer * renderer, SDL_Texture * texture, final_rect.w = (int)dstrect->w; final_rect.h = (int)dstrect->h; - surface_scaled = SDL_CreateRGBSurface(SDL_SWSURFACE, final_rect.w, final_rect.h, src->format->BitsPerPixel, - src->format->Rmask, src->format->Gmask, - src->format->Bmask, src->format->Amask ); - if (surface_scaled) { - SDL_GetColorKey(src, &colorkey); - SDL_SetColorKey(surface_scaled, SDL_TRUE, colorkey); - tmp_rect = final_rect; - tmp_rect.x = 0; - tmp_rect.y = 0; - - retval = SDL_BlitScaled(src, srcrect, surface_scaled, &tmp_rect); - if (!retval) { - SDLgfx_rotozoomSurfaceSizeTrig(tmp_rect.w, tmp_rect.h, -angle, &dstwidth, &dstheight, &cangle, &sangle); - surface_rotated = SDLgfx_rotateSurface(surface_scaled, -angle, dstwidth/2, dstheight/2, GetScaleQuality(), flip & SDL_FLIP_HORIZONTAL, flip & SDL_FLIP_VERTICAL, dstwidth, dstheight, cangle, sangle); - if(surface_rotated) { - /* Find out where the new origin is by rotating the four final_rect points around the center and then taking the extremes */ - abscenterx = final_rect.x + (int)center->x; - abscentery = final_rect.y + (int)center->y; - /* Compensate the angle inversion to match the behaviour of the other backends */ - sangle = -sangle; - - /* Top Left */ - px = final_rect.x - abscenterx; - py = final_rect.y - abscentery; - p1x = px * cangle - py * sangle + abscenterx; - p1y = px * sangle + py * cangle + abscentery; - - /* Top Right */ - px = final_rect.x + final_rect.w - abscenterx; - py = final_rect.y - abscentery; - p2x = px * cangle - py * sangle + abscenterx; - p2y = px * sangle + py * cangle + abscentery; - - /* Bottom Left */ - px = final_rect.x - abscenterx; - py = final_rect.y + final_rect.h - abscentery; - p3x = px * cangle - py * sangle + abscenterx; - p3y = px * sangle + py * cangle + abscentery; - - /* Bottom Right */ - px = final_rect.x + final_rect.w - abscenterx; - py = final_rect.y + final_rect.h - abscentery; - p4x = px * cangle - py * sangle + abscenterx; - p4y = px * sangle + py * cangle + abscentery; - - tmp_rect.x = (int)MIN(MIN(p1x, p2x), MIN(p3x, p4x)); - tmp_rect.y = (int)MIN(MIN(p1y, p2y), MIN(p3y, p4y)); - tmp_rect.w = dstwidth; - tmp_rect.h = dstheight; - - retval = SDL_BlitSurface(surface_rotated, NULL, surface, &tmp_rect); + /* SDLgfx_rotateSurface doesn't accept a source rectangle, so crop and scale if we need to */ + tmp_rect = final_rect; + tmp_rect.x = 0; + tmp_rect.y = 0; + if (srcrect->w == final_rect.w && srcrect->h == final_rect.h && srcrect->x == 0 && srcrect->y == 0) { + surface_scaled = src; /* but if we don't need to, just use the original */ + retval = 0; + } else { + SDL_Surface *blit_src = src; + Uint32 colorkey; + SDL_BlendMode blendMode; + Uint8 alphaMod, r, g, b; + SDL_bool cloneSource = SDL_FALSE; + + surface_scaled = SDL_CreateRGBSurface(SDL_SWSURFACE, final_rect.w, final_rect.h, src->format->BitsPerPixel, + src->format->Rmask, src->format->Gmask, + src->format->Bmask, src->format->Amask ); + if (!surface_scaled) { + return -1; + } + + /* copy the color key, alpha mod, blend mode, and color mod so the scaled surface behaves like the source */ + if (SDL_GetColorKey(src, &colorkey) == 0) { + SDL_SetColorKey(surface_scaled, SDL_TRUE, colorkey); + cloneSource = SDL_TRUE; + } + SDL_GetSurfaceAlphaMod(src, &alphaMod); /* these will be copied to surface_scaled below if necessary */ + SDL_GetSurfaceBlendMode(src, &blendMode); + SDL_GetSurfaceColorMod(src, &r, &g, &b); + + /* now we need to blit the src into surface_scaled. since we want to copy the colors from the source to + * surface_scaled rather than blend them, etc. we'll need to disable the blend mode, alpha mod, etc. + * but we don't want to modify src (in case it's being used on other threads), so we'll need to clone it + * before changing the blend options + */ + cloneSource |= blendMode != SDL_BLENDMODE_NONE || (alphaMod & r & g & b) != 255; + if (cloneSource) { + blit_src = SDL_ConvertSurface(src, src->format, src->flags); /* clone src */ + if (!blit_src) { SDL_FreeSurface(surface_scaled); - SDL_FreeSurface(surface_rotated); - return retval; + return -1; } + SDL_SetSurfaceAlphaMod(blit_src, 255); /* disable all blending options in blit_src */ + SDL_SetSurfaceBlendMode(blit_src, SDL_BLENDMODE_NONE); + SDL_SetColorKey(blit_src, 0, 0); + SDL_SetSurfaceColorMod(blit_src, 255, 255, 255); + SDL_SetSurfaceRLE(blit_src, 0); /* don't RLE encode a surface we'll only use once */ + + SDL_SetSurfaceAlphaMod(surface_scaled, alphaMod); /* copy blending options to surface_scaled */ + SDL_SetSurfaceBlendMode(surface_scaled, blendMode); + SDL_SetSurfaceColorMod(surface_scaled, r, g, b); + } + + retval = SDL_BlitScaled(blit_src, srcrect, surface_scaled, &tmp_rect); + if (blit_src != src) { + SDL_FreeSurface(blit_src); } - return retval; } - return -1; + if (!retval) { + SDLgfx_rotozoomSurfaceSizeTrig(tmp_rect.w, tmp_rect.h, -angle, &dstwidth, &dstheight, &cangle, &sangle); + surface_rotated = SDLgfx_rotateSurface(surface_scaled, -angle, dstwidth/2, dstheight/2, GetScaleQuality(), flip & SDL_FLIP_HORIZONTAL, flip & SDL_FLIP_VERTICAL, dstwidth, dstheight, cangle, sangle); + if(surface_rotated) { + /* Find out where the new origin is by rotating the four final_rect points around the center and then taking the extremes */ + abscenterx = final_rect.x + (int)center->x; + abscentery = final_rect.y + (int)center->y; + /* Compensate the angle inversion to match the behaviour of the other backends */ + sangle = -sangle; + + /* Top Left */ + px = final_rect.x - abscenterx; + py = final_rect.y - abscentery; + p1x = px * cangle - py * sangle + abscenterx; + p1y = px * sangle + py * cangle + abscentery; + + /* Top Right */ + px = final_rect.x + final_rect.w - abscenterx; + py = final_rect.y - abscentery; + p2x = px * cangle - py * sangle + abscenterx; + p2y = px * sangle + py * cangle + abscentery; + + /* Bottom Left */ + px = final_rect.x - abscenterx; + py = final_rect.y + final_rect.h - abscentery; + p3x = px * cangle - py * sangle + abscenterx; + p3y = px * sangle + py * cangle + abscentery; + + /* Bottom Right */ + px = final_rect.x + final_rect.w - abscenterx; + py = final_rect.y + final_rect.h - abscentery; + p4x = px * cangle - py * sangle + abscenterx; + p4y = px * sangle + py * cangle + abscentery; + + tmp_rect.x = (int)MIN(MIN(p1x, p2x), MIN(p3x, p4x)); + tmp_rect.y = (int)MIN(MIN(p1y, p2y), MIN(p3y, p4y)); + tmp_rect.w = dstwidth; + tmp_rect.h = dstheight; + + retval = SDL_BlitSurface(surface_rotated, NULL, surface, &tmp_rect); + SDL_FreeSurface(surface_rotated); + } + } + + if (surface_scaled != src) { + SDL_FreeSurface(surface_scaled); + } + return retval; } static int diff --git a/Engine/lib/sdl/src/render/software/SDL_render_sw_c.h b/Engine/lib/sdl/src/render/software/SDL_render_sw_c.h index 81cb656c97..89b4e8acc4 100644 --- a/Engine/lib/sdl/src/render/software/SDL_render_sw_c.h +++ b/Engine/lib/sdl/src/render/software/SDL_render_sw_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/render/software/SDL_rotate.c b/Engine/lib/sdl/src/render/software/SDL_rotate.c index f29d70d4f1..8d92758f87 100644 --- a/Engine/lib/sdl/src/render/software/SDL_rotate.c +++ b/Engine/lib/sdl/src/render/software/SDL_rotate.c @@ -188,10 +188,8 @@ _transformSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int dy = (sdy >> 16); if (flipx) dx = sw - dx; if (flipy) dy = sh - dy; - if ((dx > -1) && (dy > -1) && (dx < (src->w-1)) && (dy < (src->h-1))) { - sp = (tColorRGBA *)src->pixels;; - sp += ((src->pitch/4) * dy); - sp += dx; + if ((unsigned)dx < (unsigned)sw && (unsigned)dy < (unsigned)sh) { + sp = (tColorRGBA *) ((Uint8 *) src->pixels + src->pitch * dy) + dx; c00 = *sp; sp += 1; c01 = *sp; @@ -237,14 +235,12 @@ _transformSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int sdx = (ax + (isin * dy)) + xd; sdy = (ay - (icos * dy)) + yd; for (x = 0; x < dst->w; x++) { - dx = (short) (sdx >> 16); - dy = (short) (sdy >> 16); - if (flipx) dx = (src->w-1)-dx; - if (flipy) dy = (src->h-1)-dy; - if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { - sp = (tColorRGBA *) ((Uint8 *) src->pixels + src->pitch * dy); - sp += dx; - *pc = *sp; + dx = (sdx >> 16); + dy = (sdy >> 16); + if ((unsigned)dx < (unsigned)src->w && (unsigned)dy < (unsigned)src->h) { + if(flipx) dx = sw - dx; + if(flipy) dy = sh - dy; + *pc = *((tColorRGBA *)((Uint8 *)src->pixels + src->pitch * dy) + dx); } sdx += icos; sdy += isin; @@ -277,7 +273,7 @@ static void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos, int flipx, int flipy) { int x, y, dx, dy, xd, yd, sdx, sdy, ax, ay; - tColorY *pc, *sp; + tColorY *pc; int gap; /* @@ -301,14 +297,12 @@ transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin sdx = (ax + (isin * dy)) + xd; sdy = (ay - (icos * dy)) + yd; for (x = 0; x < dst->w; x++) { - dx = (short) (sdx >> 16); - dy = (short) (sdy >> 16); - if (flipx) dx = (src->w-1)-dx; - if (flipy) dy = (src->h-1)-dy; - if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { - sp = (tColorY *) (src->pixels); - sp += (src->pitch * dy + dx); - *pc = *sp; + dx = (sdx >> 16); + dy = (sdy >> 16); + if ((unsigned)dx < (unsigned)src->w && (unsigned)dy < (unsigned)src->h) { + if (flipx) dx = (src->w-1)-dx; + if (flipy) dy = (src->h-1)-dy; + *pc = *((tColorY *)src->pixels + src->pitch * dy + dx); } sdx += icos; sdy += isin; @@ -348,7 +342,7 @@ SDLgfx_rotateSurface(SDL_Surface * src, double angle, int centerx, int centery, SDL_Surface *rz_src; SDL_Surface *rz_dst; int is32bit; - int i, src_converted; + int i; Uint8 r,g,b; Uint32 colorkey = 0; int colorKeyAvailable = 0; @@ -375,27 +369,15 @@ SDLgfx_rotateSurface(SDL_Surface * src, double angle, int centerx, int centery, * Use source surface 'as is' */ rz_src = src; - src_converted = 0; } else { - /* - * New source surface is 32bit with a defined RGBA ordering - */ - rz_src = - SDL_CreateRGBSurface(SDL_SWSURFACE, src->w, src->h, 32, + Uint32 format = SDL_MasksToPixelFormatEnum(32, #if SDL_BYTEORDER == SDL_LIL_ENDIAN 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 #else 0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff #endif - ); - if(colorKeyAvailable) - SDL_SetColorKey(src, 0, 0); - - SDL_BlitSurface(src, NULL, rz_src, NULL); - - if(colorKeyAvailable) - SDL_SetColorKey(src, SDL_TRUE /* SDL_SRCCOLORKEY */, colorkey); - src_converted = 1; + ); + rz_src = SDL_ConvertSurfaceFormat(src, format, src->flags); is32bit = 1; } @@ -480,6 +462,19 @@ SDLgfx_rotateSurface(SDL_Surface * src, double angle, int centerx, int centery, flipx, flipy); SDL_SetColorKey(rz_dst, /* SDL_SRCCOLORKEY */ SDL_TRUE | SDL_RLEACCEL, _colorkey(rz_src)); } + + /* copy alpha mod, color mod, and blend mode */ + { + SDL_BlendMode blendMode; + Uint8 alphaMod, cr, cg, cb; + SDL_GetSurfaceAlphaMod(src, &alphaMod); + SDL_GetSurfaceBlendMode(src, &blendMode); + SDL_GetSurfaceColorMod(src, &cr, &cg, &cb); + SDL_SetSurfaceAlphaMod(rz_dst, alphaMod); + SDL_SetSurfaceBlendMode(rz_dst, blendMode); + SDL_SetSurfaceColorMod(rz_dst, cr, cg, cb); + } + /* * Unlock source surface */ @@ -490,7 +485,7 @@ SDLgfx_rotateSurface(SDL_Surface * src, double angle, int centerx, int centery, /* * Cleanup temp surface */ - if (src_converted) { + if (rz_src != src) { SDL_FreeSurface(rz_src); } diff --git a/Engine/lib/sdl/src/render/software/SDL_rotate.h b/Engine/lib/sdl/src/render/software/SDL_rotate.h index e92c3b77fb..338109fc05 100644 --- a/Engine/lib/sdl/src/render/software/SDL_rotate.h +++ b/Engine/lib/sdl/src/render/software/SDL_rotate.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/stdlib/SDL_getenv.c b/Engine/lib/sdl/src/stdlib/SDL_getenv.c index 4492110646..3fc4119fd2 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_getenv.c +++ b/Engine/lib/sdl/src/stdlib/SDL_getenv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,11 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + #include "../SDL_internal.h" #if defined(__WIN32__) @@ -33,16 +38,27 @@ static size_t SDL_envmemlen = 0; #endif /* Put a variable into the environment */ +/* Note: Name may not contain a '=' character. (Reference: http://www.unix.com/man-page/Linux/3/setenv/) */ #if defined(HAVE_SETENV) int SDL_setenv(const char *name, const char *value, int overwrite) { + /* Input validation */ + if (!name || SDL_strlen(name) == 0 || SDL_strchr(name, '=') != NULL || !value) { + return (-1); + } + return setenv(name, value, overwrite); } #elif defined(__WIN32__) int SDL_setenv(const char *name, const char *value, int overwrite) { + /* Input validation */ + if (!name || SDL_strlen(name) == 0 || SDL_strchr(name, '=') != NULL || !value) { + return (-1); + } + if (!overwrite) { char ch = 0; const size_t len = GetEnvironmentVariableA(name, &ch, sizeof (ch)); @@ -63,6 +79,11 @@ SDL_setenv(const char *name, const char *value, int overwrite) size_t len; char *new_variable; + /* Input validation */ + if (!name || SDL_strlen(name) == 0 || SDL_strchr(name, '=') != NULL || !value) { + return (-1); + } + if (getenv(name) != NULL) { if (overwrite) { unsetenv(name); @@ -91,8 +112,8 @@ SDL_setenv(const char *name, const char *value, int overwrite) char **new_env; char *new_variable; - /* A little error checking */ - if (!name || !value) { + /* Input validation */ + if (!name || SDL_strlen(name) == 0 || SDL_strchr(name, '=') != NULL || !value) { return (-1); } @@ -152,6 +173,11 @@ SDL_setenv(const char *name, const char *value, int overwrite) char * SDL_getenv(const char *name) { + /* Input validation */ + if (!name || SDL_strlen(name)==0) { + return NULL; + } + return getenv(name); } #elif defined(__WIN32__) @@ -160,6 +186,11 @@ SDL_getenv(const char *name) { size_t bufferlen; + /* Input validation */ + if (!name || SDL_strlen(name)==0) { + return NULL; + } + bufferlen = GetEnvironmentVariableA(name, SDL_envmem, (DWORD) SDL_envmemlen); if (bufferlen == 0) { @@ -183,6 +214,11 @@ SDL_getenv(const char *name) int len, i; char *value; + /* Input validation */ + if (!name || SDL_strlen(name)==0) { + return NULL; + } + value = (char *) 0; if (SDL_env) { len = SDL_strlen(name); diff --git a/Engine/lib/sdl/src/stdlib/SDL_iconv.c b/Engine/lib/sdl/src/stdlib/SDL_iconv.c index c314bf6821..8f04037340 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_iconv.c +++ b/Engine/lib/sdl/src/stdlib/SDL_iconv.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,11 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + #include "../SDL_internal.h" /* This file contains portable iconv functions for SDL */ @@ -32,7 +37,8 @@ If we get this wrong, it's just a warning, so no big deal. */ #if defined(_XGP6) || defined(__APPLE__) || \ - (defined(__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))) + (defined(__GLIBC__) && ((__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) || \ + (defined(_NEWLIB_VERSION))) #define ICONV_INBUF_NONCONST #endif diff --git a/Engine/lib/sdl/src/stdlib/SDL_malloc.c b/Engine/lib/sdl/src/stdlib/SDL_malloc.c index 74105f5880..d640c8fade 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_malloc.c +++ b/Engine/lib/sdl/src/stdlib/SDL_malloc.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,11 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + #include "../SDL_internal.h" /* This file contains portable memory management functions for SDL */ @@ -54,6 +59,7 @@ void SDL_free(void *ptr) #define LACKS_STRING_H #define LACKS_STDLIB_H #define ABORT +#define USE_LOCKS 1 /* This is a version (aka dlmalloc) of malloc/free/realloc written by diff --git a/Engine/lib/sdl/src/stdlib/SDL_qsort.c b/Engine/lib/sdl/src/stdlib/SDL_qsort.c index 8329a35e36..0d1978424d 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_qsort.c +++ b/Engine/lib/sdl/src/stdlib/SDL_qsort.c @@ -41,6 +41,11 @@ * * Gareth McCaughan Peterhouse Cambridge 1998 */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + #include "../SDL_internal.h" /* diff --git a/Engine/lib/sdl/src/stdlib/SDL_stdlib.c b/Engine/lib/sdl/src/stdlib/SDL_stdlib.c index 11f778a37c..6723d4e2c8 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_stdlib.c +++ b/Engine/lib/sdl/src/stdlib/SDL_stdlib.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,11 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + #include "../SDL_internal.h" /* This file contains portable stdlib functions for SDL */ @@ -211,6 +216,36 @@ SDL_sqrt(double x) #endif } +float +SDL_sqrtf(float x) +{ +#if defined(HAVE_SQRTF) + return sqrtf(x); +#else + return (float)SDL_sqrt((double)x); +#endif +} + +double +SDL_tan(double x) +{ +#if defined(HAVE_TAN) + return tan(x); +#else + return SDL_uclibc_tan(x); +#endif +} + +float +SDL_tanf(float x) +{ +#if defined(HAVE_TANF) + return tanf(x); +#else + return (float)SDL_tan((double)x); +#endif +} + int SDL_abs(int x) { #ifdef HAVE_ABS @@ -243,8 +278,8 @@ int SDL_tolower(int x) { return ((x) >= 'A') && ((x) <= 'Z') ? ('a'+((x)-'A')) : __declspec(selectany) int _fltused = 1; #endif -/* The optimizer on Visual Studio 2010/2012 generates memcpy() calls */ -#if _MSC_VER >= 1600 && defined(_WIN64) && !defined(_DEBUG) +/* The optimizer on Visual Studio 2005 and later generates memcpy() calls */ +#if (_MSC_VER >= 1400) && defined(_WIN64) && !defined(_DEBUG) #include #pragma function(memcpy) @@ -347,34 +382,25 @@ _allmul() { /* *INDENT-OFF* */ __asm { - push ebp - mov ebp,esp - push edi - push esi + mov eax, dword ptr[esp+8] + mov ecx, dword ptr[esp+10h] + or ecx, eax + mov ecx, dword ptr[esp+0Ch] + jne hard + mov eax, dword ptr[esp+4] + mul ecx + ret 10h +hard: push ebx - sub esp,0Ch - mov eax,dword ptr [ebp+10h] - mov edi,dword ptr [ebp+8] - mov ebx,eax - mov esi,eax - sar esi,1Fh - mov eax,dword ptr [ebp+8] - mul ebx - imul edi,esi - mov ecx,edx - mov dword ptr [ebp-18h],eax - mov edx,dword ptr [ebp+0Ch] - add ecx,edi - imul ebx,edx - mov eax,dword ptr [ebp-18h] - lea ebx,[ebx+ecx] - mov dword ptr [ebp-14h],ebx - mov edx,dword ptr [ebp-14h] - add esp,0Ch + mul ecx + mov ebx, eax + mov eax, dword ptr[esp+8] + mul dword ptr[esp+14h] + add ebx, eax + mov eax, dword ptr[esp+8] + mul ecx + add edx, ebx pop ebx - pop esi - pop edi - pop ebp ret 10h } /* *INDENT-ON* */ diff --git a/Engine/lib/sdl/src/stdlib/SDL_string.c b/Engine/lib/sdl/src/stdlib/SDL_string.c index fb50687cce..5debb22850 100644 --- a/Engine/lib/sdl/src/stdlib/SDL_string.c +++ b/Engine/lib/sdl/src/stdlib/SDL_string.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,15 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ + +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) +#define SDL_DISABLE_ANALYZE_MACROS 1 +#endif + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE 1 +#endif + #include "../SDL_internal.h" /* This file contains portable string manipulation functions for SDL */ @@ -258,18 +267,30 @@ SDL_ScanFloat(const char *text, double *valuep) #endif void * -SDL_memset(void *dst, int c, size_t len) +SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len) { #if defined(HAVE_MEMSET) return memset(dst, c, len); #else - size_t left = (len % 4); + size_t left; Uint32 *dstp4; - Uint8 *dstp1; + Uint8 *dstp1 = (Uint8 *) dst; Uint32 value4 = (c | (c << 8) | (c << 16) | (c << 24)); Uint8 value1 = (Uint8) c; - dstp4 = (Uint32 *) dst; + /* The destination pointer needs to be aligned on a 4-byte boundary to + * execute a 32-bit set. Set first bytes manually if needed until it is + * aligned. */ + while ((intptr_t)dstp1 & 0x3) { + if (len--) { + *dstp1++ = value1; + } else { + return dst; + } + } + + dstp4 = (Uint32 *) dstp1; + left = (len % 4); len /= 4; while (len--) { *dstp4++ = value4; @@ -290,7 +311,7 @@ SDL_memset(void *dst, int c, size_t len) } void * -SDL_memcpy(void *dst, const void *src, size_t len) +SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len) { #ifdef __GNUC__ /* Presumably this is well tuned for speed. @@ -343,7 +364,7 @@ SDL_memcpy(void *dst, const void *src, size_t len) } void * -SDL_memmove(void *dst, const void *src, size_t len) +SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len) { #if defined(HAVE_MEMMOVE) return memmove(dst, src, len); @@ -414,7 +435,7 @@ SDL_wcslen(const wchar_t * string) } size_t -SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen) +SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen) { #if defined(HAVE_WCSLCPY) return wcslcpy(dst, src, maxlen); @@ -430,7 +451,7 @@ SDL_wcslcpy(wchar_t *dst, const wchar_t *src, size_t maxlen) } size_t -SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen) +SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen) { #if defined(HAVE_WCSLCAT) return wcslcat(dst, src, maxlen); @@ -445,7 +466,7 @@ SDL_wcslcat(wchar_t *dst, const wchar_t *src, size_t maxlen) } size_t -SDL_strlcpy(char *dst, const char *src, size_t maxlen) +SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen) { #if defined(HAVE_STRLCPY) return strlcpy(dst, src, maxlen); @@ -460,7 +481,7 @@ SDL_strlcpy(char *dst, const char *src, size_t maxlen) #endif /* HAVE_STRLCPY */ } -size_t SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes) +size_t SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes) { size_t src_bytes = SDL_strlen(src); size_t bytes = SDL_min(src_bytes, dst_bytes - 1); @@ -493,7 +514,7 @@ size_t SDL_utf8strlcpy(char *dst, const char *src, size_t dst_bytes) } size_t -SDL_strlcat(char *dst, const char *src, size_t maxlen) +SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen) { #if defined(HAVE_STRLCAT) return strlcat(dst, src, maxlen); @@ -968,7 +989,7 @@ SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen) } int -SDL_sscanf(const char *text, const char *fmt, ...) +SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) { int rc; va_list ap; @@ -1249,7 +1270,7 @@ SDL_vsscanf(const char *text, const char *fmt, va_list ap) #endif /* HAVE_VSSCANF */ int -SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...) +SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list ap; int retval; @@ -1262,8 +1283,11 @@ SDL_snprintf(char *text, size_t maxlen, const char *fmt, ...) } #ifdef HAVE_VSNPRINTF -int SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap) +int SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap) { + if (!fmt) { + fmt = ""; + } return vsnprintf(text, maxlen, fmt, ap); } #else @@ -1451,11 +1475,14 @@ SDL_PrintFloat(char *text, size_t maxlen, SDL_FormatInfo *info, double arg) } int -SDL_vsnprintf(char *text, size_t maxlen, const char *fmt, va_list ap) +SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, const char *fmt, va_list ap) { size_t left = maxlen; char *textstart = text; + if (!fmt) { + fmt = ""; + } while (*fmt) { if (*fmt == '%') { SDL_bool done = SDL_FALSE; diff --git a/Engine/lib/sdl/src/test/SDL_test_assert.c b/Engine/lib/sdl/src/test/SDL_test_assert.c index 0a594932bf..98a84d386d 100644 --- a/Engine/lib/sdl/src/test/SDL_test_assert.c +++ b/Engine/lib/sdl/src/test/SDL_test_assert.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -44,9 +44,9 @@ static Uint32 SDLTest_AssertsPassed = 0; /* * Assert that logs and break execution flow on failures (i.e. for harness errors). */ -void SDLTest_Assert(int assertCondition, const char *assertDescription, ...) +void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) { - va_list list; + va_list list; char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH]; /* Print assert description into a buffer */ @@ -56,13 +56,13 @@ void SDLTest_Assert(int assertCondition, const char *assertDescription, ...) va_end(list); /* Log, then assert and break on failure */ - SDL_assert((SDLTest_AssertCheck(assertCondition, logMessage))); + SDL_assert((SDLTest_AssertCheck(assertCondition, "%s", logMessage))); } /* * Assert that logs but does not break execution flow on failures (i.e. for test cases). */ -int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...) +int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) { va_list list; char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH]; @@ -91,7 +91,7 @@ int SDLTest_AssertCheck(int assertCondition, const char *assertDescription, ...) /* * Explicitly passing Assert that logs (i.e. for test cases). */ -void SDLTest_AssertPass(const char *assertDescription, ...) +void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) { va_list list; char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH]; diff --git a/Engine/lib/sdl/src/test/SDL_test_common.c b/Engine/lib/sdl/src/test/SDL_test_common.c index 9d41a194e8..fee249cb9b 100644 --- a/Engine/lib/sdl/src/test/SDL_test_common.c +++ b/Engine/lib/sdl/src/test/SDL_test_common.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -572,6 +572,12 @@ SDLTest_PrintPixelFormat(Uint32 format) case SDL_PIXELFORMAT_YVYU: fprintf(stderr, "YVYU"); break; + case SDL_PIXELFORMAT_NV12: + fprintf(stderr, "NV12"); + break; + case SDL_PIXELFORMAT_NV21: + fprintf(stderr, "NV21"); + break; default: fprintf(stderr, "0x%8.8x", format); break; @@ -886,7 +892,7 @@ SDLTest_CommonInit(SDLTest_CommonState * state) break; } } - if (m == n) { + if (m == -1) { fprintf(stderr, "Couldn't find render driver named %s", state->renderdriver); @@ -1099,8 +1105,8 @@ SDLTest_PrintEvent(SDL_Event * event) event->button.windowID); break; case SDL_MOUSEWHEEL: - SDL_Log("SDL EVENT: Mouse: wheel scrolled %d in x and %d in y in window %d", - event->wheel.x, event->wheel.y, event->wheel.windowID); + SDL_Log("SDL EVENT: Mouse: wheel scrolled %d in x and %d in y (reversed: %d) in window %d", + event->wheel.x, event->wheel.y, event->wheel.direction, event->wheel.windowID); break; case SDL_JOYDEVICEADDED: SDL_Log("SDL EVENT: Joystick index %d attached", @@ -1197,6 +1203,22 @@ SDLTest_PrintEvent(SDL_Event * event) event->tfinger.x, event->tfinger.y, event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure); break; + case SDL_DOLLARGESTURE: + SDL_Log("SDL_EVENT: Dollar gesture detect: %"SDL_PRIs64, (Sint64) event->dgesture.gestureId); + break; + case SDL_DOLLARRECORD: + SDL_Log("SDL_EVENT: Dollar gesture record: %"SDL_PRIs64, (Sint64) event->dgesture.gestureId); + break; + case SDL_MULTIGESTURE: + SDL_Log("SDL_EVENT: Multi gesture fingers: %d", event->mgesture.numFingers); + break; + + case SDL_RENDER_DEVICE_RESET: + SDL_Log("SDL EVENT: render device reset"); + break; + case SDL_RENDER_TARGETS_RESET: + SDL_Log("SDL EVENT: render targets reset"); + break; case SDL_QUIT: SDL_Log("SDL EVENT: Quit requested"); @@ -1205,7 +1227,7 @@ SDLTest_PrintEvent(SDL_Event * event) SDL_Log("SDL EVENT: User event %d", event->user.code); break; default: - SDL_Log("Unknown event %d", event->type); + SDL_Log("Unknown event %04x", event->type); break; } } @@ -1372,6 +1394,14 @@ SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done) } } } + if (withShift) { + SDL_Window *current_win = SDL_GetKeyboardFocus(); + if (current_win) { + const SDL_bool shouldCapture = (SDL_GetWindowFlags(current_win) & SDL_WINDOW_MOUSE_CAPTURE) == 0; + const int rc = SDL_CaptureMouse(shouldCapture); + SDL_Log("%sapturing mouse %s!\n", shouldCapture ? "C" : "Unc", (rc == 0) ? "succeeded" : "failed"); + } + } break; case SDLK_v: if (withControl) { @@ -1471,6 +1501,19 @@ SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done) } } break; + case SDLK_a: + if (withControl) { + /* Ctrl-A reports absolute mouse position. */ + int x, y; + const Uint32 mask = SDL_GetGlobalMouseState(&x, &y); + SDL_Log("ABSOLUTE MOUSE: (%d, %d)%s%s%s%s%s\n", x, y, + (mask & SDL_BUTTON_LMASK) ? " [LBUTTON]" : "", + (mask & SDL_BUTTON_MMASK) ? " [MBUTTON]" : "", + (mask & SDL_BUTTON_RMASK) ? " [RBUTTON]" : "", + (mask & SDL_BUTTON_X1MASK) ? " [X2BUTTON]" : "", + (mask & SDL_BUTTON_X2MASK) ? " [X2BUTTON]" : ""); + } + break; case SDLK_0: if (withControl) { SDL_Window *window = SDL_GetWindowFromID(event->key.windowID); diff --git a/Engine/lib/sdl/src/test/SDL_test_compare.c b/Engine/lib/sdl/src/test/SDL_test_compare.c index de7041662a..45eb3c6898 100644 --- a/Engine/lib/sdl/src/test/SDL_test_compare.c +++ b/Engine/lib/sdl/src/test/SDL_test_compare.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,6 +43,7 @@ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int bpp, bpp_reference; Uint8 *p, *p_reference; int dist; + int sampleErrorX, sampleErrorY, sampleDist; Uint8 R, G, B, A; Uint8 Rd, Gd, Bd, Ad; char imageFilename[128]; @@ -86,6 +87,11 @@ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, /* Allow some difference in blending accuracy */ if (dist > allowable_error) { ret++; + if (ret == 1) { + sampleErrorX = i; + sampleErrorY = j; + sampleDist = dist; + } } } } @@ -96,6 +102,8 @@ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, /* Save test image and reference for analysis on failures */ _CompareSurfaceCount++; if (ret != 0) { + SDLTest_LogError("Comparison of pixels with allowable error of %i failed %i times.", allowable_error, ret); + SDLTest_LogError("First detected occurrence at position %i,%i with a squared RGB-difference of %i.", sampleErrorX, sampleErrorY, sampleDist); SDL_snprintf(imageFilename, 127, "CompareSurfaces%04d_TestOutput.bmp", _CompareSurfaceCount); SDL_SaveBMP(surface, imageFilename); SDL_snprintf(referenceFilename, 127, "CompareSurfaces%04d_Reference.bmp", _CompareSurfaceCount); diff --git a/Engine/lib/sdl/src/test/SDL_test_crc32.c b/Engine/lib/sdl/src/test/SDL_test_crc32.c index dafe72296b..6e1220881d 100644 --- a/Engine/lib/sdl/src/test/SDL_test_crc32.c +++ b/Engine/lib/sdl/src/test/SDL_test_crc32.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_font.c b/Engine/lib/sdl/src/test/SDL_test_font.c index a6bc40cefd..afd35c6c2a 100644 --- a/Engine/lib/sdl/src/test/SDL_test_font.c +++ b/Engine/lib/sdl/src/test/SDL_test_font.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_fuzzer.c b/Engine/lib/sdl/src/test/SDL_test_fuzzer.c index 963fc10b87..1bd8dfa188 100644 --- a/Engine/lib/sdl/src/test/SDL_test_fuzzer.c +++ b/Engine/lib/sdl/src/test/SDL_test_fuzzer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,7 @@ #define UINT32_MAX ~(Uint32)0 #define UINT64_MAX ~(Uint64)0 #else +#define _GNU_SOURCE #include #endif #include diff --git a/Engine/lib/sdl/src/test/SDL_test_harness.c b/Engine/lib/sdl/src/test/SDL_test_harness.c index 93f8dd7036..fec34164c9 100644 --- a/Engine/lib/sdl/src/test/SDL_test_harness.c +++ b/Engine/lib/sdl/src/test/SDL_test_harness.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -219,11 +219,12 @@ void * \param testSuite Suite containing the test case. * \param testCase Case to execute. * \param execKey Execution key for the fuzzer. +* \param forceTestRun Force test to run even if test was disabled in suite. * * \returns Test case result. */ int -SDLTest_RunTest(SDLTest_TestSuiteReference *testSuite, SDLTest_TestCaseReference *testCase, Uint64 execKey) +SDLTest_RunTest(SDLTest_TestSuiteReference *testSuite, SDLTest_TestCaseReference *testCase, Uint64 execKey, SDL_bool forceTestRun) { SDL_TimerID timer = 0; int testCaseResult = 0; @@ -236,13 +237,12 @@ SDLTest_RunTest(SDLTest_TestSuiteReference *testSuite, SDLTest_TestCaseReference return TEST_RESULT_SETUP_FAILURE; } - if (!testCase->enabled) + if (!testCase->enabled && forceTestRun == SDL_FALSE) { SDLTest_Log((char *)SDLTest_FinalResultFormat, "Test", testCase->name, "Skipped (Disabled)"); return TEST_RESULT_SKIPPED; } - /* Initialize fuzzer */ SDLTest_FuzzerInit(execKey); @@ -386,6 +386,7 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user char *suiteFilterName = NULL; int testFilter = 0; char *testFilterName = NULL; + SDL_bool forceTestRun = SDL_FALSE; int testResult = 0; int runResult = 0; Uint32 totalTestFailedCount = 0; @@ -483,6 +484,7 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user if (suiteFilter == 0 && testFilter == 0) { SDLTest_LogError("Filter '%s' did not match any test suite/case.", filter); SDLTest_Log("Exit code: 2"); + SDL_free(failedTests); return 2; } } @@ -536,7 +538,7 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user /* Override 'disabled' flag if we specified a test filter (i.e. force run for debugging) */ if (testFilter == 1 && !testCase->enabled) { SDLTest_Log("Force run of disabled test since test filter was set"); - testCase->enabled = 1; + forceTestRun = SDL_TRUE; } /* Take time - test start */ @@ -564,8 +566,8 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user execKey = SDLTest_GenerateExecKey((char *)runSeed, testSuite->name, testCase->name, iterationCounter); } - SDLTest_Log("Test Iteration %i: execKey %llu", iterationCounter, execKey); - testResult = SDLTest_RunTest(testSuite, testCase, execKey); + SDLTest_Log("Test Iteration %i: execKey %" SDL_PRIu64, iterationCounter, execKey); + testResult = SDLTest_RunTest(testSuite, testCase, execKey, forceTestRun); if (testResult == TEST_RESULT_PASSED) { testPassedCount++; diff --git a/Engine/lib/sdl/src/test/SDL_test_imageBlit.c b/Engine/lib/sdl/src/test/SDL_test_imageBlit.c index d4c74fb42a..5896ca0991 100644 --- a/Engine/lib/sdl/src/test/SDL_test_imageBlit.c +++ b/Engine/lib/sdl/src/test/SDL_test_imageBlit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_imageBlitBlend.c b/Engine/lib/sdl/src/test/SDL_test_imageBlitBlend.c index f849d730d7..6e8c2f1b41 100644 --- a/Engine/lib/sdl/src/test/SDL_test_imageBlitBlend.c +++ b/Engine/lib/sdl/src/test/SDL_test_imageBlitBlend.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_imageFace.c b/Engine/lib/sdl/src/test/SDL_test_imageFace.c index 74fa8341d5..84f5037f4f 100644 --- a/Engine/lib/sdl/src/test/SDL_test_imageFace.c +++ b/Engine/lib/sdl/src/test/SDL_test_imageFace.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_imagePrimitives.c b/Engine/lib/sdl/src/test/SDL_test_imagePrimitives.c index d2aafcbe34..4ab48d2de3 100644 --- a/Engine/lib/sdl/src/test/SDL_test_imagePrimitives.c +++ b/Engine/lib/sdl/src/test/SDL_test_imagePrimitives.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_imagePrimitivesBlend.c b/Engine/lib/sdl/src/test/SDL_test_imagePrimitivesBlend.c index cfe189a05f..5e538628e2 100644 --- a/Engine/lib/sdl/src/test/SDL_test_imagePrimitivesBlend.c +++ b/Engine/lib/sdl/src/test/SDL_test_imagePrimitivesBlend.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_log.c b/Engine/lib/sdl/src/test/SDL_test_log.c index 9a083074cc..097372e7a6 100644 --- a/Engine/lib/sdl/src/test/SDL_test_log.c +++ b/Engine/lib/sdl/src/test/SDL_test_log.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -68,7 +68,7 @@ char *SDLTest_TimestampToString(const time_t timestamp) /* * Prints given message with a timestamp in the TEST category and INFO priority. */ -void SDLTest_Log(const char *fmt, ...) +void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list list; char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH]; @@ -86,7 +86,7 @@ void SDLTest_Log(const char *fmt, ...) /* * Prints given message with a timestamp in the TEST category and the ERROR priority. */ -void SDLTest_LogError(const char *fmt, ...) +void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) { va_list list; char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH]; diff --git a/Engine/lib/sdl/src/test/SDL_test_md5.c b/Engine/lib/sdl/src/test/SDL_test_md5.c index 8467ccbc47..7cc3567579 100644 --- a/Engine/lib/sdl/src/test/SDL_test_md5.c +++ b/Engine/lib/sdl/src/test/SDL_test_md5.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/test/SDL_test_random.c b/Engine/lib/sdl/src/test/SDL_test_random.c index bc434183c8..c5baaa640f 100644 --- a/Engine/lib/sdl/src/test/SDL_test_random.c +++ b/Engine/lib/sdl/src/test/SDL_test_random.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/SDL_systhread.h b/Engine/lib/sdl/src/thread/SDL_systhread.h index 9c9409a5bc..f13f3e2039 100644 --- a/Engine/lib/sdl/src/thread/SDL_systhread.h +++ b/Engine/lib/sdl/src/thread/SDL_systhread.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/SDL_thread.c b/Engine/lib/sdl/src/thread/SDL_thread.c index 6cd933311f..e66c5819cd 100644 --- a/Engine/lib/sdl/src/thread/SDL_thread.c +++ b/Engine/lib/sdl/src/thread/SDL_thread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -442,10 +442,10 @@ SDL_DetachThread(SDL_Thread * thread) SDL_SYS_DetachThread(thread); } else { /* all other states are pretty final, see where we landed. */ - const int state = SDL_AtomicGet(&thread->state); - if ((state == SDL_THREAD_STATE_DETACHED) || (state == SDL_THREAD_STATE_CLEANED)) { + const int thread_state = SDL_AtomicGet(&thread->state); + if ((thread_state == SDL_THREAD_STATE_DETACHED) || (thread_state == SDL_THREAD_STATE_CLEANED)) { return; /* already detached (you shouldn't call this twice!) */ - } else if (state == SDL_THREAD_STATE_ZOMBIE) { + } else if (thread_state == SDL_THREAD_STATE_ZOMBIE) { SDL_WaitThread(thread, NULL); /* already done, clean it up. */ } else { SDL_assert(0 && "Unexpected thread state"); diff --git a/Engine/lib/sdl/src/thread/SDL_thread_c.h b/Engine/lib/sdl/src/thread/SDL_thread_c.h index 85ef5cce27..a283a0e2ca 100644 --- a/Engine/lib/sdl/src/thread/SDL_thread_c.h +++ b/Engine/lib/sdl/src/thread/SDL_thread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_syscond.c b/Engine/lib/sdl/src/thread/generic/SDL_syscond.c index 64cc634006..e2ccd88ef1 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_syscond.c +++ b/Engine/lib/sdl/src/thread/generic/SDL_syscond.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_sysmutex.c b/Engine/lib/sdl/src/thread/generic/SDL_sysmutex.c index ddcc8cdf45..f2f6689700 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_sysmutex.c +++ b/Engine/lib/sdl/src/thread/generic/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_sysmutex_c.h b/Engine/lib/sdl/src/thread/generic/SDL_sysmutex_c.h index f868fade80..9dba5e16c5 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_sysmutex_c.h +++ b/Engine/lib/sdl/src/thread/generic/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_syssem.c b/Engine/lib/sdl/src/thread/generic/SDL_syssem.c index c7220a2a47..92afcb0c07 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_syssem.c +++ b/Engine/lib/sdl/src/thread/generic/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_systhread.c b/Engine/lib/sdl/src/thread/generic/SDL_systhread.c index 6cd29f76e3..7a81a6201f 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_systhread.c +++ b/Engine/lib/sdl/src/thread/generic/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_systhread_c.h b/Engine/lib/sdl/src/thread/generic/SDL_systhread_c.h index 38e8b208e1..ea9b714603 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_systhread_c.h +++ b/Engine/lib/sdl/src/thread/generic/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/generic/SDL_systls.c b/Engine/lib/sdl/src/thread/generic/SDL_systls.c index b73d901fad..e29c198182 100644 --- a/Engine/lib/sdl/src/thread/generic/SDL_systls.c +++ b/Engine/lib/sdl/src/thread/generic/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/psp/SDL_syscond.c b/Engine/lib/sdl/src/thread/psp/SDL_syscond.c index 1abd9a3d9a..a84b206c8a 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_syscond.c +++ b/Engine/lib/sdl/src/thread/psp/SDL_syscond.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,6 +20,8 @@ */ #include "../../SDL_internal.h" +#if SDL_THREAD_PSP + /* An implementation of condition variables using semaphores and mutexes */ /* This implementation borrows heavily from the BeOS condition variable @@ -217,4 +219,6 @@ SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex) return SDL_CondWaitTimeout(cond, mutex, SDL_MUTEX_MAXWAIT); } +#endif /* SDL_THREAD_PSP */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/thread/psp/SDL_sysmutex.c b/Engine/lib/sdl/src/thread/psp/SDL_sysmutex.c index 478575b32b..78129fa69a 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_sysmutex.c +++ b/Engine/lib/sdl/src/thread/psp/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,6 +20,8 @@ */ #include "../../SDL_internal.h" +#if SDL_THREAD_PSP + /* An implementation of mutexes using semaphores */ #include "SDL_thread.h" @@ -129,4 +131,6 @@ SDL_mutexV(SDL_mutex * mutex) #endif /* SDL_THREADS_DISABLED */ } +#endif /* SDL_THREAD_PSP */ + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/thread/psp/SDL_sysmutex_c.h b/Engine/lib/sdl/src/thread/psp/SDL_sysmutex_c.h index f868fade80..9dba5e16c5 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_sysmutex_c.h +++ b/Engine/lib/sdl/src/thread/psp/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/psp/SDL_syssem.c b/Engine/lib/sdl/src/thread/psp/SDL_syssem.c index 27d3251a2b..643406c46e 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_syssem.c +++ b/Engine/lib/sdl/src/thread/psp/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#if SDL_THREAD_PSP /* Semaphore functions for the PSP. */ @@ -76,7 +79,7 @@ void SDL_DestroySemaphore(SDL_sem *sem) int SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout) { Uint32 *pTimeout; - unsigned int res; + int res; if (sem == NULL) { SDL_SetError("Passed a NULL sem"); @@ -152,5 +155,7 @@ int SDL_SemPost(SDL_sem *sem) return 0; } +#endif /* SDL_THREAD_PSP */ + /* vim: ts=4 sw=4 */ diff --git a/Engine/lib/sdl/src/thread/psp/SDL_systhread.c b/Engine/lib/sdl/src/thread/psp/SDL_systhread.c index d2fbeeb2f3..ab8aff3766 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_systhread.c +++ b/Engine/lib/sdl/src/thread/psp/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,7 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" +#if SDL_THREAD_PSP /* PSP thread management routines for SDL */ @@ -104,5 +106,7 @@ int SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) } +#endif /* SDL_THREAD_PSP */ + /* vim: ts=4 sw=4 */ diff --git a/Engine/lib/sdl/src/thread/psp/SDL_systhread_c.h b/Engine/lib/sdl/src/thread/psp/SDL_systhread_c.h index 4f9dac2498..4f74df06aa 100644 --- a/Engine/lib/sdl/src/thread/psp/SDL_systhread_c.h +++ b/Engine/lib/sdl/src/thread/psp/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_syscond.c b/Engine/lib/sdl/src/thread/pthread/SDL_syscond.c index c15df86327..998ac55b3f 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_syscond.c +++ b/Engine/lib/sdl/src/thread/pthread/SDL_syscond.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,6 +21,7 @@ #include "../../SDL_internal.h" #include +#include #include #include #include @@ -98,17 +99,26 @@ int SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms) { int retval; +#ifndef HAVE_CLOCK_GETTIME struct timeval delta; +#endif struct timespec abstime; if (!cond) { return SDL_SetError("Passed a NULL condition variable"); } +#ifdef HAVE_CLOCK_GETTIME + clock_gettime(CLOCK_REALTIME, &abstime); + + abstime.tv_nsec += (ms % 1000) * 1000000; + abstime.tv_sec += ms / 1000; +#else gettimeofday(&delta, NULL); abstime.tv_sec = delta.tv_sec + (ms / 1000); abstime.tv_nsec = (delta.tv_usec + (ms % 1000) * 1000) * 1000; +#endif if (abstime.tv_nsec > 1000000000) { abstime.tv_sec += 1; abstime.tv_nsec -= 1000000000; diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex.c b/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex.c index 36bf394cb7..f24cfdab01 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex.c +++ b/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,9 +20,11 @@ */ #include "../../SDL_internal.h" +#ifndef _GNU_SOURCE #define _GNU_SOURCE -#include +#endif #include +#include #include "SDL_thread.h" diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex_c.h b/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex_c.h index bf69bcd160..ee60ca0411 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex_c.h +++ b/Engine/lib/sdl/src/thread/pthread/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_syssem.c b/Engine/lib/sdl/src/thread/pthread/SDL_syssem.c index 358baff28a..b7547e699c 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_syssem.c +++ b/Engine/lib/sdl/src/thread/pthread/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,10 +20,14 @@ */ #include "../../SDL_internal.h" +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif #include #include #include #include +#include #include "SDL_thread.h" #include "SDL_timer.h" @@ -102,7 +106,9 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) { int retval; #ifdef HAVE_SEM_TIMEDWAIT +#ifndef HAVE_CLOCK_GETTIME struct timeval now; +#endif struct timespec ts_timeout; #else Uint32 end; @@ -125,22 +131,26 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) * a lapse of time, but until we reach a certain time. * This time is now plus the timeout. */ +#ifdef HAVE_CLOCK_GETTIME + clock_gettime(CLOCK_REALTIME, &ts_timeout); + + /* Add our timeout to current time */ + ts_timeout.tv_nsec += (timeout % 1000) * 1000000; + ts_timeout.tv_sec += timeout / 1000; +#else gettimeofday(&now, NULL); /* Add our timeout to current time */ - now.tv_usec += (timeout % 1000) * 1000; - now.tv_sec += timeout / 1000; + ts_timeout.tv_sec = now.tv_sec + (timeout / 1000); + ts_timeout.tv_nsec = (now.tv_usec + (timeout % 1000) * 1000) * 1000; +#endif /* Wrap the second if needed */ - if ( now.tv_usec >= 1000000 ) { - now.tv_usec -= 1000000; - now.tv_sec ++; + if (ts_timeout.tv_nsec > 1000000000) { + ts_timeout.tv_sec += 1; + ts_timeout.tv_nsec -= 1000000000; } - /* Convert to timespec */ - ts_timeout.tv_sec = now.tv_sec; - ts_timeout.tv_nsec = now.tv_usec * 1000; - /* Wait. */ do { retval = sem_timedwait(&sem->sem, &ts_timeout); @@ -150,7 +160,7 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) if (errno == ETIMEDOUT) { retval = SDL_MUTEX_TIMEDOUT; } else { - SDL_SetError(strerror(errno)); + SDL_SetError("sem_timedwait returned an error: %s", strerror(errno)); } } #else diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_systhread.c b/Engine/lib/sdl/src/thread/pthread/SDL_systhread.c index b570b2abd7..22f7bd57b4 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_systhread.c +++ b/Engine/lib/sdl/src/thread/pthread/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -45,6 +45,7 @@ #include "SDL_platform.h" #include "SDL_thread.h" +#include "SDL_hints.h" #include "../SDL_thread_c.h" #include "../SDL_systhread.h" #ifdef __ANDROID__ @@ -57,11 +58,13 @@ #include "SDL_assert.h" +#ifndef __NACL__ /* List of signals to mask in the subthreads */ static const int sig_list[] = { SIGHUP, SIGINT, SIGQUIT, SIGPIPE, SIGALRM, SIGTERM, SIGCHLD, SIGWINCH, SIGVTALRM, SIGPROF, 0 }; +#endif static void * RunThread(void *data) @@ -84,6 +87,7 @@ int SDL_SYS_CreateThread(SDL_Thread * thread, void *args) { pthread_attr_t type; + const char *hint = SDL_GetHint(SDL_HINT_THREAD_STACK_SIZE); /* do this here before any threads exist, so there's no race condition. */ #if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__) @@ -103,6 +107,14 @@ SDL_SYS_CreateThread(SDL_Thread * thread, void *args) return SDL_SetError("Couldn't initialize pthread attributes"); } pthread_attr_setdetachstate(&type, PTHREAD_CREATE_JOINABLE); + + /* If the SDL_HINT_THREAD_STACK_SIZE exists and it seems to be a positive number, use it */ + if (hint && hint[0] >= '0' && hint[0] <= '9') { + const size_t stacksize = (size_t) SDL_atoi(hint); + if (stacksize > 0) { + pthread_attr_setstacksize(&type, stacksize); + } + } /* Create the thread and go! */ if (pthread_create(&thread->handle, &type, RunThread, args) != 0) { @@ -115,8 +127,10 @@ SDL_SYS_CreateThread(SDL_Thread * thread, void *args) void SDL_SYS_SetupThread(const char *name) { +#if !defined(__ANDROID__) && !defined(__NACL__) int i; sigset_t mask; +#endif /* !__ANDROID__ && !__NACL__ */ if (name != NULL) { #if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__LINUX__) @@ -129,7 +143,11 @@ SDL_SYS_SetupThread(const char *name) #endif } #elif HAVE_PTHREAD_SETNAME_NP + #if defined(__NETBSD__) + pthread_setname_np(pthread_self(), "%s", name); + #else pthread_setname_np(pthread_self(), name); + #endif #elif HAVE_PTHREAD_SET_NAME_NP pthread_set_name_np(pthread_self(), name); #elif defined(__HAIKU__) @@ -141,12 +159,16 @@ SDL_SYS_SetupThread(const char *name) #endif } + /* NativeClient does not yet support signals.*/ +#if !defined(__ANDROID__) && !defined(__NACL__) /* Mask asynchronous signals for this thread */ sigemptyset(&mask); for (i = 0; sig_list[i]; ++i) { sigaddset(&mask, sig_list[i]); } pthread_sigmask(SIG_BLOCK, &mask, 0); +#endif /* !__ANDROID__ && !__NACL__ */ + #ifdef PTHREAD_CANCEL_ASYNCHRONOUS /* Allow ourselves to be asynchronously cancelled */ @@ -166,7 +188,10 @@ SDL_ThreadID(void) int SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) { -#ifdef __LINUX__ +#if __NACL__ + /* FIXME: Setting thread priority does not seem to be supported in NACL */ + return 0; +#elif __LINUX__ int value; if (priority == SDL_THREAD_PRIORITY_LOW) { diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_systhread_c.h b/Engine/lib/sdl/src/thread/pthread/SDL_systhread_c.h index eedb7d1f52..4ad1884437 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_systhread_c.h +++ b/Engine/lib/sdl/src/thread/pthread/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/pthread/SDL_systls.c b/Engine/lib/sdl/src/thread/pthread/SDL_systls.c index 09a2790403..622ad02975 100644 --- a/Engine/lib/sdl/src/thread/pthread/SDL_systls.c +++ b/Engine/lib/sdl/src/thread/pthread/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/stdcpp/SDL_syscond.cpp b/Engine/lib/sdl/src/thread/stdcpp/SDL_syscond.cpp index e9da82a3be..976bff4879 100644 --- a/Engine/lib/sdl/src/thread/stdcpp/SDL_syscond.cpp +++ b/Engine/lib/sdl/src/thread/stdcpp/SDL_syscond.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -128,7 +128,7 @@ SDL_CondWaitTimeout(SDL_cond * cond, SDL_mutex * mutex, Uint32 ms) } try { - std::unique_lock cpp_lock(mutex->cpp_mutex, std::defer_lock_t()); + std::unique_lock cpp_lock(mutex->cpp_mutex, std::adopt_lock_t()); if (ms == SDL_MUTEX_MAXWAIT) { cond->cpp_cond.wait( cpp_lock diff --git a/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex.cpp b/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex.cpp index 4b60fb1dc4..04028627d0 100644 --- a/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex.cpp +++ b/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex_c.h b/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex_c.h index 6bbd9dcd88..ab0f2dd839 100644 --- a/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex_c.h +++ b/Engine/lib/sdl/src/thread/stdcpp/SDL_sysmutex_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread.cpp b/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread.cpp index 5de700ab67..219c67e931 100644 --- a/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread.cpp +++ b/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread_c.h b/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread_c.h index a0a338f5ca..c3cc507c3a 100644 --- a/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread_c.h +++ b/Engine/lib/sdl/src/thread/stdcpp/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/windows/SDL_sysmutex.c b/Engine/lib/sdl/src/thread/windows/SDL_sysmutex.c index 8333e11b48..413cb67037 100644 --- a/Engine/lib/sdl/src/thread/windows/SDL_sysmutex.c +++ b/Engine/lib/sdl/src/thread/windows/SDL_sysmutex.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -45,7 +45,11 @@ SDL_CreateMutex(void) if (mutex) { /* Initialize */ /* On SMP systems, a non-zero spin count generally helps performance */ +#if __WINRT__ + InitializeCriticalSectionEx(&mutex->cs, 2000, 0); +#else InitializeCriticalSectionAndSpinCount(&mutex->cs, 2000); +#endif } else { SDL_OutOfMemory(); } diff --git a/Engine/lib/sdl/src/thread/windows/SDL_syssem.c b/Engine/lib/sdl/src/thread/windows/SDL_syssem.c index a4f75f5cf0..86b58882de 100644 --- a/Engine/lib/sdl/src/thread/windows/SDL_syssem.c +++ b/Engine/lib/sdl/src/thread/windows/SDL_syssem.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -45,7 +45,11 @@ SDL_CreateSemaphore(Uint32 initial_value) sem = (SDL_sem *) SDL_malloc(sizeof(*sem)); if (sem) { /* Create the semaphore, with max value 32K */ +#if __WINRT__ + sem->id = CreateSemaphoreEx(NULL, initial_value, 32 * 1024, NULL, 0, SEMAPHORE_ALL_ACCESS); +#else sem->id = CreateSemaphore(NULL, initial_value, 32 * 1024, NULL); +#endif sem->count = initial_value; if (!sem->id) { SDL_SetError("Couldn't create semaphore"); @@ -86,7 +90,11 @@ SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) } else { dwMilliseconds = (DWORD) timeout; } +#if __WINRT__ + switch (WaitForSingleObjectEx(sem->id, dwMilliseconds, FALSE)) { +#else switch (WaitForSingleObject(sem->id, dwMilliseconds)) { +#endif case WAIT_OBJECT_0: InterlockedDecrement(&sem->count); retval = 0; diff --git a/Engine/lib/sdl/src/thread/windows/SDL_systhread.c b/Engine/lib/sdl/src/thread/windows/SDL_systhread.c index 79c40b161a..308145e30b 100644 --- a/Engine/lib/sdl/src/thread/windows/SDL_systhread.c +++ b/Engine/lib/sdl/src/thread/windows/SDL_systhread.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -106,7 +106,7 @@ SDL_SYS_CreateThread(SDL_Thread * thread, void *args, pfnSDL_CurrentBeginThread pfnBeginThread, pfnSDL_CurrentEndThread pfnEndThread) { -#elif defined(__CYGWIN__) +#elif defined(__CYGWIN__) || defined(__WINRT__) int SDL_SYS_CreateThread(SDL_Thread * thread, void *args) { @@ -230,7 +230,11 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) void SDL_SYS_WaitThread(SDL_Thread * thread) { +#if __WINRT__ + WaitForSingleObjectEx(thread->handle, INFINITE, FALSE); +#else WaitForSingleObject(thread->handle, INFINITE); +#endif CloseHandle(thread->handle); } diff --git a/Engine/lib/sdl/src/thread/windows/SDL_systhread_c.h b/Engine/lib/sdl/src/thread/windows/SDL_systhread_c.h index f3c78e99a4..90866a7bbd 100644 --- a/Engine/lib/sdl/src/thread/windows/SDL_systhread_c.h +++ b/Engine/lib/sdl/src/thread/windows/SDL_systhread_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/thread/windows/SDL_systls.c b/Engine/lib/sdl/src/thread/windows/SDL_systls.c index 6ceadaa122..7ec630e8fd 100644 --- a/Engine/lib/sdl/src/thread/windows/SDL_systls.c +++ b/Engine/lib/sdl/src/thread/windows/SDL_systls.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/timer/SDL_timer.c b/Engine/lib/sdl/src/timer/SDL_timer.c index 3ec1291b56..6189ab8b50 100644 --- a/Engine/lib/sdl/src/timer/SDL_timer.c +++ b/Engine/lib/sdl/src/timer/SDL_timer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/timer/SDL_timer_c.h b/Engine/lib/sdl/src/timer/SDL_timer_c.h index 8d563cff87..6ae8170585 100644 --- a/Engine/lib/sdl/src/timer/SDL_timer_c.h +++ b/Engine/lib/sdl/src/timer/SDL_timer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/timer/dummy/SDL_systimer.c b/Engine/lib/sdl/src/timer/dummy/SDL_systimer.c index 57899ae952..1174d22417 100644 --- a/Engine/lib/sdl/src/timer/dummy/SDL_systimer.c +++ b/Engine/lib/sdl/src/timer/dummy/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/timer/haiku/SDL_systimer.c b/Engine/lib/sdl/src/timer/haiku/SDL_systimer.c index 685f72a820..f45aa64d7c 100644 --- a/Engine/lib/sdl/src/timer/haiku/SDL_systimer.c +++ b/Engine/lib/sdl/src/timer/haiku/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/timer/psp/SDL_systimer.c b/Engine/lib/sdl/src/timer/psp/SDL_systimer.c index b706f44951..1e8802cf19 100644 --- a/Engine/lib/sdl/src/timer/psp/SDL_systimer.c +++ b/Engine/lib/sdl/src/timer/psp/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#ifdef SDL_TIMERS_PSP #include "SDL_thread.h" #include "SDL_timer.h" @@ -82,5 +85,7 @@ void SDL_Delay(Uint32 ms) sceKernelDelayThreadCB(ms * 1000); } +#endif /* SDL_TIMERS_PSP */ + /* vim: ts=4 sw=4 */ diff --git a/Engine/lib/sdl/src/timer/unix/SDL_systimer.c b/Engine/lib/sdl/src/timer/unix/SDL_systimer.c index 0f4c7571e1..217fe327fa 100644 --- a/Engine/lib/sdl/src/timer/unix/SDL_systimer.c +++ b/Engine/lib/sdl/src/timer/unix/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,6 +28,7 @@ #include #include "SDL_timer.h" +#include "SDL_assert.h" /* The clock_gettime provides monotonous time, so we should use it if it's available. The clock_gettime function is behind ifdef @@ -47,6 +48,15 @@ #include #endif +/* Use CLOCK_MONOTONIC_RAW, if available, which is not subject to adjustment by NTP */ +#if HAVE_CLOCK_GETTIME +#ifdef CLOCK_MONOTONIC_RAW +#define SDL_MONOTONIC_CLOCK CLOCK_MONOTONIC_RAW +#else +#define SDL_MONOTONIC_CLOCK CLOCK_MONOTONIC +#endif +#endif + /* The first ticks value of the application */ #if HAVE_CLOCK_GETTIME static struct timespec start_ts; @@ -68,7 +78,7 @@ SDL_TicksInit(void) /* Set first ticks value */ #if HAVE_CLOCK_GETTIME - if (clock_gettime(CLOCK_MONOTONIC, &start_ts) == 0) { + if (clock_gettime(SDL_MONOTONIC_CLOCK, &start_ts) == 0) { has_monotonic_time = SDL_TRUE; } else #elif defined(__APPLE__) @@ -100,20 +110,21 @@ SDL_GetTicks(void) if (has_monotonic_time) { #if HAVE_CLOCK_GETTIME struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + clock_gettime(SDL_MONOTONIC_CLOCK, &now); ticks = (now.tv_sec - start_ts.tv_sec) * 1000 + (now.tv_nsec - start_ts.tv_nsec) / 1000000; #elif defined(__APPLE__) uint64_t now = mach_absolute_time(); - ticks = (((now - start_mach) * mach_base_info.numer) / mach_base_info.denom) / 1000000; + ticks = (Uint32)((((now - start_mach) * mach_base_info.numer) / mach_base_info.denom) / 1000000); +#else + SDL_assert(SDL_FALSE); + ticks = 0; #endif } else { struct timeval now; gettimeofday(&now, NULL); - ticks = - (now.tv_sec - start_tv.tv_sec) * 1000 + (now.tv_usec - - start_tv.tv_usec) / 1000; + ticks = (Uint32)((now.tv_sec - start_tv.tv_sec) * 1000 + (now.tv_usec - start_tv.tv_usec) / 1000); } return (ticks); } @@ -130,12 +141,15 @@ SDL_GetPerformanceCounter(void) #if HAVE_CLOCK_GETTIME struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + clock_gettime(SDL_MONOTONIC_CLOCK, &now); ticks = now.tv_sec; ticks *= 1000000000; ticks += now.tv_nsec; #elif defined(__APPLE__) ticks = mach_absolute_time(); +#else + SDL_assert(SDL_FALSE); + ticks = 0; #endif } else { struct timeval now; diff --git a/Engine/lib/sdl/src/timer/windows/SDL_systimer.c b/Engine/lib/sdl/src/timer/windows/SDL_systimer.c index 07561636aa..abfbcb99ac 100644 --- a/Engine/lib/sdl/src/timer/windows/SDL_systimer.c +++ b/Engine/lib/sdl/src/timer/windows/SDL_systimer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,10 +30,9 @@ /* The first (low-resolution) ticks value of the application */ -static DWORD start; +static DWORD start = 0; static BOOL ticks_started = FALSE; -#ifndef USE_GETTICKCOUNT /* Store if a high-resolution performance counter exists on the system */ static BOOL hires_timer_available; /* The first high-resolution ticks value of the application */ @@ -41,10 +40,10 @@ static LARGE_INTEGER hires_start_ticks; /* The number of ticks per second of the high-resolution performance counter */ static LARGE_INTEGER hires_ticks_per_second; -#ifndef __WINRT__ static void -timeSetPeriod(UINT uPeriod) +SDL_SetSystemTimerResolution(const UINT uPeriod) { +#ifndef __WINRT__ static UINT timer_period = 0; if (uPeriod != timer_period) { @@ -58,6 +57,7 @@ timeSetPeriod(UINT uPeriod) timeBeginPeriod(timer_period); } } +#endif } static void @@ -72,12 +72,9 @@ SDL_TimerResolutionChanged(void *userdata, const char *name, const char *oldValu uPeriod = 1; } if (uPeriod || oldValue != hint) { - timeSetPeriod(uPeriod); + SDL_SetSystemTimerResolution(uPeriod); } } -#endif /* ifndef __WINRT__ */ - -#endif /* !USE_GETTICKCOUNT */ void SDL_TicksInit(void) @@ -87,10 +84,12 @@ SDL_TicksInit(void) } ticks_started = SDL_TRUE; + /* if we didn't set a precision, set it high. This affects lots of things + on Windows besides the SDL timers, like audio callbacks, etc. */ + SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION, + SDL_TimerResolutionChanged, NULL); + /* Set first ticks value */ -#ifdef USE_GETTICKCOUNT - start = GetTickCount(); -#else /* QueryPerformanceCounter has had problems in the past, but lots of games use it, so we'll rely on it here. */ @@ -99,51 +98,36 @@ SDL_TicksInit(void) QueryPerformanceCounter(&hires_start_ticks); } else { hires_timer_available = FALSE; -#ifdef __WINRT__ - start = 0; /* the timer failed to start! */ -#else - timeSetPeriod(1); /* use 1 ms timer precision */ +#ifndef __WINRT__ start = timeGetTime(); - - SDL_AddHintCallback(SDL_HINT_TIMER_RESOLUTION, - SDL_TimerResolutionChanged, NULL); #endif /* __WINRT__ */ } -#endif /* USE_GETTICKCOUNT */ } void SDL_TicksQuit(void) { -#ifndef USE_GETTICKCOUNT if (!hires_timer_available) { -#ifndef __WINRT__ SDL_DelHintCallback(SDL_HINT_TIMER_RESOLUTION, SDL_TimerResolutionChanged, NULL); - - timeSetPeriod(0); -#endif /* __WINRT__ */ } -#endif /* USE_GETTICKCOUNT */ + SDL_SetSystemTimerResolution(0); /* always release our timer resolution request. */ + + start = 0; ticks_started = SDL_FALSE; } Uint32 SDL_GetTicks(void) { - DWORD now; -#ifndef USE_GETTICKCOUNT + DWORD now = 0; LARGE_INTEGER hires_now; -#endif if (!ticks_started) { SDL_TicksInit(); } -#ifdef USE_GETTICKCOUNT - now = GetTickCount(); -#else if (hires_timer_available) { QueryPerformanceCounter(&hires_now); @@ -153,13 +137,10 @@ SDL_GetTicks(void) return (DWORD) hires_now.QuadPart; } else { -#ifdef __WINRT__ - now = 0; -#else +#ifndef __WINRT__ now = timeGetTime(); #endif /* __WINRT__ */ } -#endif return (now - start); } @@ -186,23 +167,30 @@ SDL_GetPerformanceFrequency(void) return frequency.QuadPart; } -#ifdef __WINRT__ -static void -Sleep(DWORD timeout) +void +SDL_Delay(Uint32 ms) { + /* Sleep() is not publicly available to apps in early versions of WinRT. + * + * Visual C++ 2013 Update 4 re-introduced Sleep() for Windows 8.1 and + * Windows Phone 8.1. + * + * Use the compiler version to determine availability. + * + * NOTE #1: _MSC_FULL_VER == 180030723 for Visual C++ 2013 Update 3. + * NOTE #2: Visual C++ 2013, when compiling for Windows 8.0 and + * Windows Phone 8.0, uses the Visual C++ 2012 compiler to build + * apps and libraries. + */ +#if defined(__WINRT__) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER <= 180030723) static HANDLE mutex = 0; - if ( ! mutex ) - { + if (!mutex) { mutex = CreateEventEx(0, 0, 0, EVENT_ALL_ACCESS); } - WaitForSingleObjectEx(mutex, timeout, FALSE); -} -#endif - -void -SDL_Delay(Uint32 ms) -{ + WaitForSingleObjectEx(mutex, ms, FALSE); +#else Sleep(ms); +#endif } #endif /* SDL_TIMER_WINDOWS */ diff --git a/Engine/lib/sdl/src/video/SDL_RLEaccel.c b/Engine/lib/sdl/src/video/SDL_RLEaccel.c index a464dec393..67baaf664e 100644 --- a/Engine/lib/sdl/src/video/SDL_RLEaccel.c +++ b/Engine/lib/sdl/src/video/SDL_RLEaccel.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -115,22 +115,22 @@ * This can be used for any RGB permutation of course. */ #define ALPHA_BLIT32_888(to, from, length, bpp, alpha) \ - do { \ - int i; \ - Uint32 *src = (Uint32 *)(from); \ - Uint32 *dst = (Uint32 *)(to); \ - for(i = 0; i < (int)(length); i++) { \ - Uint32 s = *src++; \ - Uint32 d = *dst; \ - Uint32 s1 = s & 0xff00ff; \ - Uint32 d1 = d & 0xff00ff; \ - d1 = (d1 + ((s1 - d1) * alpha >> 8)) & 0xff00ff; \ - s &= 0xff00; \ - d &= 0xff00; \ - d = (d + ((s - d) * alpha >> 8)) & 0xff00; \ - *dst++ = d1 | d; \ - } \ - } while(0) + do { \ + int i; \ + Uint32 *src = (Uint32 *)(from); \ + Uint32 *dst = (Uint32 *)(to); \ + for (i = 0; i < (int)(length); i++) { \ + Uint32 s = *src++; \ + Uint32 d = *dst; \ + Uint32 s1 = s & 0xff00ff; \ + Uint32 d1 = d & 0xff00ff; \ + d1 = (d1 + ((s1 - d1) * alpha >> 8)) & 0xff00ff; \ + s &= 0xff00; \ + d &= 0xff00; \ + d = (d + ((s - d) * alpha >> 8)) & 0xff00; \ + *dst++ = d1 | d; \ + } \ + } while (0) /* * For 16bpp pixels we can go a step further: put the middle component @@ -139,97 +139,97 @@ * 5 bits, we have to scale alpha down to 5 bits as well. */ #define ALPHA_BLIT16_565(to, from, length, bpp, alpha) \ - do { \ - int i; \ - Uint16 *src = (Uint16 *)(from); \ - Uint16 *dst = (Uint16 *)(to); \ - Uint32 ALPHA = alpha >> 3; \ - for(i = 0; i < (int)(length); i++) { \ - Uint32 s = *src++; \ - Uint32 d = *dst; \ - s = (s | s << 16) & 0x07e0f81f; \ - d = (d | d << 16) & 0x07e0f81f; \ - d += (s - d) * ALPHA >> 5; \ - d &= 0x07e0f81f; \ - *dst++ = (Uint16)(d | d >> 16); \ - } \ + do { \ + int i; \ + Uint16 *src = (Uint16 *)(from); \ + Uint16 *dst = (Uint16 *)(to); \ + Uint32 ALPHA = alpha >> 3; \ + for(i = 0; i < (int)(length); i++) { \ + Uint32 s = *src++; \ + Uint32 d = *dst; \ + s = (s | s << 16) & 0x07e0f81f; \ + d = (d | d << 16) & 0x07e0f81f; \ + d += (s - d) * ALPHA >> 5; \ + d &= 0x07e0f81f; \ + *dst++ = (Uint16)(d | d >> 16); \ + } \ } while(0) #define ALPHA_BLIT16_555(to, from, length, bpp, alpha) \ - do { \ - int i; \ - Uint16 *src = (Uint16 *)(from); \ - Uint16 *dst = (Uint16 *)(to); \ - Uint32 ALPHA = alpha >> 3; \ - for(i = 0; i < (int)(length); i++) { \ - Uint32 s = *src++; \ - Uint32 d = *dst; \ - s = (s | s << 16) & 0x03e07c1f; \ - d = (d | d << 16) & 0x03e07c1f; \ - d += (s - d) * ALPHA >> 5; \ - d &= 0x03e07c1f; \ - *dst++ = (Uint16)(d | d >> 16); \ - } \ + do { \ + int i; \ + Uint16 *src = (Uint16 *)(from); \ + Uint16 *dst = (Uint16 *)(to); \ + Uint32 ALPHA = alpha >> 3; \ + for(i = 0; i < (int)(length); i++) { \ + Uint32 s = *src++; \ + Uint32 d = *dst; \ + s = (s | s << 16) & 0x03e07c1f; \ + d = (d | d << 16) & 0x03e07c1f; \ + d += (s - d) * ALPHA >> 5; \ + d &= 0x03e07c1f; \ + *dst++ = (Uint16)(d | d >> 16); \ + } \ } while(0) /* * The general slow catch-all function, for remaining depths and formats */ #define ALPHA_BLIT_ANY(to, from, length, bpp, alpha) \ - do { \ - int i; \ - Uint8 *src = from; \ - Uint8 *dst = to; \ - for(i = 0; i < (int)(length); i++) { \ - Uint32 s, d; \ - unsigned rs, gs, bs, rd, gd, bd; \ - switch(bpp) { \ - case 2: \ - s = *(Uint16 *)src; \ - d = *(Uint16 *)dst; \ - break; \ - case 3: \ - if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { \ - s = (src[0] << 16) | (src[1] << 8) | src[2]; \ - d = (dst[0] << 16) | (dst[1] << 8) | dst[2]; \ - } else { \ - s = (src[2] << 16) | (src[1] << 8) | src[0]; \ - d = (dst[2] << 16) | (dst[1] << 8) | dst[0]; \ - } \ - break; \ - case 4: \ - s = *(Uint32 *)src; \ - d = *(Uint32 *)dst; \ - break; \ - } \ - RGB_FROM_PIXEL(s, fmt, rs, gs, bs); \ - RGB_FROM_PIXEL(d, fmt, rd, gd, bd); \ - rd += (rs - rd) * alpha >> 8; \ - gd += (gs - gd) * alpha >> 8; \ - bd += (bs - bd) * alpha >> 8; \ - PIXEL_FROM_RGB(d, fmt, rd, gd, bd); \ - switch(bpp) { \ - case 2: \ - *(Uint16 *)dst = (Uint16)d; \ - break; \ - case 3: \ - if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { \ - dst[0] = (Uint8)(d >> 16); \ - dst[1] = (Uint8)(d >> 8); \ - dst[2] = (Uint8)(d); \ - } else { \ - dst[0] = (Uint8)d; \ - dst[1] = (Uint8)(d >> 8); \ - dst[2] = (Uint8)(d >> 16); \ - } \ - break; \ - case 4: \ - *(Uint32 *)dst = d; \ - break; \ - } \ - src += bpp; \ - dst += bpp; \ - } \ + do { \ + int i; \ + Uint8 *src = from; \ + Uint8 *dst = to; \ + for (i = 0; i < (int)(length); i++) { \ + Uint32 s, d; \ + unsigned rs, gs, bs, rd, gd, bd; \ + switch (bpp) { \ + case 2: \ + s = *(Uint16 *)src; \ + d = *(Uint16 *)dst; \ + break; \ + case 3: \ + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { \ + s = (src[0] << 16) | (src[1] << 8) | src[2]; \ + d = (dst[0] << 16) | (dst[1] << 8) | dst[2]; \ + } else { \ + s = (src[2] << 16) | (src[1] << 8) | src[0]; \ + d = (dst[2] << 16) | (dst[1] << 8) | dst[0]; \ + } \ + break; \ + case 4: \ + s = *(Uint32 *)src; \ + d = *(Uint32 *)dst; \ + break; \ + } \ + RGB_FROM_PIXEL(s, fmt, rs, gs, bs); \ + RGB_FROM_PIXEL(d, fmt, rd, gd, bd); \ + rd += (rs - rd) * alpha >> 8; \ + gd += (gs - gd) * alpha >> 8; \ + bd += (bs - bd) * alpha >> 8; \ + PIXEL_FROM_RGB(d, fmt, rd, gd, bd); \ + switch (bpp) { \ + case 2: \ + *(Uint16 *)dst = (Uint16)d; \ + break; \ + case 3: \ + if (SDL_BYTEORDER == SDL_BIG_ENDIAN) { \ + dst[0] = (Uint8)(d >> 16); \ + dst[1] = (Uint8)(d >> 8); \ + dst[2] = (Uint8)(d); \ + } else { \ + dst[0] = (Uint8)d; \ + dst[1] = (Uint8)(d >> 8); \ + dst[2] = (Uint8)(d >> 16); \ + } \ + break; \ + case 4: \ + *(Uint32 *)dst = d; \ + break; \ + } \ + src += bpp; \ + dst += bpp; \ + } \ } while(0) /* @@ -241,16 +241,16 @@ * add them. Then shift right and add the sum of the lowest bits. */ #define ALPHA_BLIT32_888_50(to, from, length, bpp, alpha) \ - do { \ - int i; \ - Uint32 *src = (Uint32 *)(from); \ - Uint32 *dst = (Uint32 *)(to); \ - for(i = 0; i < (int)(length); i++) { \ - Uint32 s = *src++; \ - Uint32 d = *dst; \ - *dst++ = (((s & 0x00fefefe) + (d & 0x00fefefe)) >> 1) \ - + (s & d & 0x00010101); \ - } \ + do { \ + int i; \ + Uint32 *src = (Uint32 *)(from); \ + Uint32 *dst = (Uint32 *)(to); \ + for(i = 0; i < (int)(length); i++) { \ + Uint32 s = *src++; \ + Uint32 d = *dst; \ + *dst++ = (((s & 0x00fefefe) + (d & 0x00fefefe)) >> 1) \ + + (s & d & 0x00010101); \ + } \ } while(0) /* @@ -259,170 +259,185 @@ */ /* helper: blend a single 16 bit pixel at 50% */ -#define BLEND16_50(dst, src, mask) \ - do { \ - Uint32 s = *src++; \ - Uint32 d = *dst; \ - *dst++ = (Uint16)((((s & mask) + (d & mask)) >> 1) + \ - (s & d & (~mask & 0xffff))); \ +#define BLEND16_50(dst, src, mask) \ + do { \ + Uint32 s = *src++; \ + Uint32 d = *dst; \ + *dst++ = (Uint16)((((s & mask) + (d & mask)) >> 1) + \ + (s & d & (~mask & 0xffff))); \ } while(0) /* basic 16bpp blender. mask is the pixels to keep when adding. */ #define ALPHA_BLIT16_50(to, from, length, bpp, alpha, mask) \ - do { \ - unsigned n = (length); \ - Uint16 *src = (Uint16 *)(from); \ - Uint16 *dst = (Uint16 *)(to); \ - if(((uintptr_t)src ^ (uintptr_t)dst) & 3) { \ - /* source and destination not in phase, blit one by one */ \ - while(n--) \ - BLEND16_50(dst, src, mask); \ - } else { \ - if((uintptr_t)src & 3) { \ - /* first odd pixel */ \ - BLEND16_50(dst, src, mask); \ - n--; \ - } \ - for(; n > 1; n -= 2) { \ - Uint32 s = *(Uint32 *)src; \ - Uint32 d = *(Uint32 *)dst; \ - *(Uint32 *)dst = ((s & (mask | mask << 16)) >> 1) \ - + ((d & (mask | mask << 16)) >> 1) \ - + (s & d & (~(mask | mask << 16))); \ - src += 2; \ - dst += 2; \ - } \ - if(n) \ - BLEND16_50(dst, src, mask); /* last odd pixel */ \ - } \ + do { \ + unsigned n = (length); \ + Uint16 *src = (Uint16 *)(from); \ + Uint16 *dst = (Uint16 *)(to); \ + if (((uintptr_t)src ^ (uintptr_t)dst) & 3) { \ + /* source and destination not in phase, blit one by one */ \ + while (n--) \ + BLEND16_50(dst, src, mask); \ + } else { \ + if ((uintptr_t)src & 3) { \ + /* first odd pixel */ \ + BLEND16_50(dst, src, mask); \ + n--; \ + } \ + for (; n > 1; n -= 2) { \ + Uint32 s = *(Uint32 *)src; \ + Uint32 d = *(Uint32 *)dst; \ + *(Uint32 *)dst = ((s & (mask | mask << 16)) >> 1) \ + + ((d & (mask | mask << 16)) >> 1) \ + + (s & d & (~(mask | mask << 16))); \ + src += 2; \ + dst += 2; \ + } \ + if (n) \ + BLEND16_50(dst, src, mask); /* last odd pixel */ \ + } \ } while(0) -#define ALPHA_BLIT16_565_50(to, from, length, bpp, alpha) \ +#define ALPHA_BLIT16_565_50(to, from, length, bpp, alpha) \ ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xf7de) -#define ALPHA_BLIT16_555_50(to, from, length, bpp, alpha) \ +#define ALPHA_BLIT16_555_50(to, from, length, bpp, alpha) \ ALPHA_BLIT16_50(to, from, length, bpp, alpha, 0xfbde) -#define CHOOSE_BLIT(blitter, alpha, fmt) \ - do { \ - if(alpha == 255) { \ - switch(fmt->BytesPerPixel) { \ - case 1: blitter(1, Uint8, OPAQUE_BLIT); break; \ - case 2: blitter(2, Uint8, OPAQUE_BLIT); break; \ - case 3: blitter(3, Uint8, OPAQUE_BLIT); break; \ - case 4: blitter(4, Uint16, OPAQUE_BLIT); break; \ - } \ - } else { \ - switch(fmt->BytesPerPixel) { \ - case 1: \ - /* No 8bpp alpha blitting */ \ - break; \ - \ - case 2: \ - switch(fmt->Rmask | fmt->Gmask | fmt->Bmask) { \ - case 0xffff: \ - if(fmt->Gmask == 0x07e0 \ - || fmt->Rmask == 0x07e0 \ - || fmt->Bmask == 0x07e0) { \ - if(alpha == 128) \ - blitter(2, Uint8, ALPHA_BLIT16_565_50); \ - else { \ - blitter(2, Uint8, ALPHA_BLIT16_565); \ - } \ - } else \ - goto general16; \ - break; \ - \ - case 0x7fff: \ - if(fmt->Gmask == 0x03e0 \ - || fmt->Rmask == 0x03e0 \ - || fmt->Bmask == 0x03e0) { \ - if(alpha == 128) \ - blitter(2, Uint8, ALPHA_BLIT16_555_50); \ - else { \ - blitter(2, Uint8, ALPHA_BLIT16_555); \ - } \ - break; \ - } \ - /* fallthrough */ \ - \ - default: \ - general16: \ - blitter(2, Uint8, ALPHA_BLIT_ANY); \ - } \ - break; \ - \ - case 3: \ - blitter(3, Uint8, ALPHA_BLIT_ANY); \ - break; \ - \ - case 4: \ - if((fmt->Rmask | fmt->Gmask | fmt->Bmask) == 0x00ffffff \ - && (fmt->Gmask == 0xff00 || fmt->Rmask == 0xff00 \ - || fmt->Bmask == 0xff00)) { \ - if(alpha == 128) \ - blitter(4, Uint16, ALPHA_BLIT32_888_50); \ - else \ - blitter(4, Uint16, ALPHA_BLIT32_888); \ - } else \ - blitter(4, Uint16, ALPHA_BLIT_ANY); \ - break; \ - } \ - } \ +#define CHOOSE_BLIT(blitter, alpha, fmt) \ + do { \ + if (alpha == 255) { \ + switch (fmt->BytesPerPixel) { \ + case 1: blitter(1, Uint8, OPAQUE_BLIT); break; \ + case 2: blitter(2, Uint8, OPAQUE_BLIT); break; \ + case 3: blitter(3, Uint8, OPAQUE_BLIT); break; \ + case 4: blitter(4, Uint16, OPAQUE_BLIT); break; \ + } \ + } else { \ + switch (fmt->BytesPerPixel) { \ + case 1: \ + /* No 8bpp alpha blitting */ \ + break; \ + \ + case 2: \ + switch (fmt->Rmask | fmt->Gmask | fmt->Bmask) { \ + case 0xffff: \ + if (fmt->Gmask == 0x07e0 \ + || fmt->Rmask == 0x07e0 \ + || fmt->Bmask == 0x07e0) { \ + if (alpha == 128) { \ + blitter(2, Uint8, ALPHA_BLIT16_565_50); \ + } else { \ + blitter(2, Uint8, ALPHA_BLIT16_565); \ + } \ + } else \ + goto general16; \ + break; \ + \ + case 0x7fff: \ + if (fmt->Gmask == 0x03e0 \ + || fmt->Rmask == 0x03e0 \ + || fmt->Bmask == 0x03e0) { \ + if (alpha == 128) { \ + blitter(2, Uint8, ALPHA_BLIT16_555_50); \ + } else { \ + blitter(2, Uint8, ALPHA_BLIT16_555); \ + } \ + break; \ + } else \ + goto general16; \ + break; \ + \ + default: \ + general16: \ + blitter(2, Uint8, ALPHA_BLIT_ANY); \ + } \ + break; \ + \ + case 3: \ + blitter(3, Uint8, ALPHA_BLIT_ANY); \ + break; \ + \ + case 4: \ + if ((fmt->Rmask | fmt->Gmask | fmt->Bmask) == 0x00ffffff \ + && (fmt->Gmask == 0xff00 || fmt->Rmask == 0xff00 \ + || fmt->Bmask == 0xff00)) { \ + if (alpha == 128) { \ + blitter(4, Uint16, ALPHA_BLIT32_888_50); \ + } else { \ + blitter(4, Uint16, ALPHA_BLIT32_888); \ + } \ + } else \ + blitter(4, Uint16, ALPHA_BLIT_ANY); \ + break; \ + } \ + } \ } while(0) +/* + * Set a pixel value using the given format, except that the alpha value is + * placed in the top byte. This is the format used for RLE with alpha. + */ +#define RLEPIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a) \ +{ \ + Pixel = ((r>>fmt->Rloss)<Rshift)| \ + ((g>>fmt->Gloss)<Gshift)| \ + ((b>>fmt->Bloss)<Bshift)| \ + (a<<24); \ +} + /* * This takes care of the case when the surface is clipped on the left and/or * right. Top clipping has already been taken care of. */ static void -RLEClipBlit(int w, Uint8 * srcbuf, SDL_Surface * dst, +RLEClipBlit(int w, Uint8 * srcbuf, SDL_Surface * surf_dst, Uint8 * dstbuf, SDL_Rect * srcrect, unsigned alpha) { - SDL_PixelFormat *fmt = dst->format; - -#define RLECLIPBLIT(bpp, Type, do_blit) \ - do { \ - int linecount = srcrect->h; \ - int ofs = 0; \ - int left = srcrect->x; \ - int right = left + srcrect->w; \ - dstbuf -= left * bpp; \ - for(;;) { \ - int run; \ - ofs += *(Type *)srcbuf; \ - run = ((Type *)srcbuf)[1]; \ - srcbuf += 2 * sizeof(Type); \ - if(run) { \ - /* clip to left and right borders */ \ - if(ofs < right) { \ - int start = 0; \ - int len = run; \ - int startcol; \ - if(left - ofs > 0) { \ - start = left - ofs; \ - len -= start; \ - if(len <= 0) \ - goto nocopy ## bpp ## do_blit; \ - } \ - startcol = ofs + start; \ - if(len > right - startcol) \ - len = right - startcol; \ - do_blit(dstbuf + startcol * bpp, srcbuf + start * bpp, \ - len, bpp, alpha); \ - } \ - nocopy ## bpp ## do_blit: \ - srcbuf += run * bpp; \ - ofs += run; \ - } else if(!ofs) \ - break; \ - if(ofs == w) { \ - ofs = 0; \ - dstbuf += dst->pitch; \ - if(!--linecount) \ - break; \ - } \ - } \ + SDL_PixelFormat *fmt = surf_dst->format; + +#define RLECLIPBLIT(bpp, Type, do_blit) \ + do { \ + int linecount = srcrect->h; \ + int ofs = 0; \ + int left = srcrect->x; \ + int right = left + srcrect->w; \ + dstbuf -= left * bpp; \ + for (;;) { \ + int run; \ + ofs += *(Type *)srcbuf; \ + run = ((Type *)srcbuf)[1]; \ + srcbuf += 2 * sizeof(Type); \ + if (run) { \ + /* clip to left and right borders */ \ + if (ofs < right) { \ + int start = 0; \ + int len = run; \ + int startcol; \ + if (left - ofs > 0) { \ + start = left - ofs; \ + len -= start; \ + if (len <= 0) \ + goto nocopy ## bpp ## do_blit; \ + } \ + startcol = ofs + start; \ + if (len > right - startcol) \ + len = right - startcol; \ + do_blit(dstbuf + startcol * bpp, srcbuf + start * bpp, \ + len, bpp, alpha); \ + } \ + nocopy ## bpp ## do_blit: \ + srcbuf += run * bpp; \ + ofs += run; \ + } else if (!ofs) \ + break; \ + \ + if (ofs == w) { \ + ofs = 0; \ + dstbuf += surf_dst->pitch; \ + if (!--linecount) \ + break; \ + } \ + } \ } while(0) CHOOSE_BLIT(RLECLIPBLIT, alpha, fmt); @@ -434,18 +449,18 @@ RLEClipBlit(int w, Uint8 * srcbuf, SDL_Surface * dst, /* blit a colorkeyed RLE surface */ int -SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect) +SDL_RLEBlit(SDL_Surface * surf_src, SDL_Rect * srcrect, + SDL_Surface * surf_dst, SDL_Rect * dstrect) { Uint8 *dstbuf; Uint8 *srcbuf; int x, y; - int w = src->w; + int w = surf_src->w; unsigned alpha; /* Lock the destination if necessary */ - if (SDL_MUSTLOCK(dst)) { - if (SDL_LockSurface(dst) < 0) { + if (SDL_MUSTLOCK(surf_dst)) { + if (SDL_LockSurface(surf_dst) < 0) { return (-1); } } @@ -453,9 +468,9 @@ SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, /* Set up the source and destination pointers */ x = dstrect->x; y = dstrect->y; - dstbuf = (Uint8 *) dst->pixels - + y * dst->pitch + x * src->format->BytesPerPixel; - srcbuf = (Uint8 *) src->map->data; + dstbuf = (Uint8 *) surf_dst->pixels + + y * surf_dst->pitch + x * surf_src->format->BytesPerPixel; + srcbuf = (Uint8 *) surf_src->map->data; { /* skip lines at the top if necessary */ @@ -481,7 +496,7 @@ SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, } \ } - switch (src->format->BytesPerPixel) { + switch (surf_src->format->BytesPerPixel) { case 1: RLESKIP(1, Uint8); break; @@ -501,12 +516,12 @@ SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, } } - alpha = src->map->info.a; + alpha = surf_src->map->info.a; /* if left or right edge clipping needed, call clip blit */ - if (srcrect->x || srcrect->w != src->w) { - RLEClipBlit(w, srcbuf, dst, dstbuf, srcrect, alpha); + if (srcrect->x || srcrect->w != surf_src->w) { + RLEClipBlit(w, srcbuf, surf_dst, dstbuf, srcrect, alpha); } else { - SDL_PixelFormat *fmt = src->format; + SDL_PixelFormat *fmt = surf_src->format; #define RLEBLIT(bpp, Type, do_blit) \ do { \ @@ -525,7 +540,7 @@ SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, break; \ if(ofs == w) { \ ofs = 0; \ - dstbuf += dst->pitch; \ + dstbuf += surf_dst->pitch; \ if(!--linecount) \ break; \ } \ @@ -539,8 +554,8 @@ SDL_RLEBlit(SDL_Surface * src, SDL_Rect * srcrect, done: /* Unlock the destination if necessary */ - if (SDL_MUSTLOCK(dst)) { - SDL_UnlockSurface(dst); + if (SDL_MUSTLOCK(surf_dst)) { + SDL_UnlockSurface(surf_dst); } return (0); } @@ -620,10 +635,10 @@ typedef struct /* blit a pixel-alpha RLE surface clipped at the right and/or left edges */ static void -RLEAlphaClipBlit(int w, Uint8 * srcbuf, SDL_Surface * dst, +RLEAlphaClipBlit(int w, Uint8 * srcbuf, SDL_Surface * surf_dst, Uint8 * dstbuf, SDL_Rect * srcrect) { - SDL_PixelFormat *df = dst->format; + SDL_PixelFormat *df = surf_dst->format; /* * clipped blitter: Ptype is the destination pixel type, * Ctype the translucent count type, and do_blend the macro @@ -693,7 +708,7 @@ RLEAlphaClipBlit(int w, Uint8 * srcbuf, SDL_Surface * dst, ofs += run; \ } \ } while(ofs < w); \ - dstbuf += dst->pitch; \ + dstbuf += surf_dst->pitch; \ } while(--linecount); \ } while(0) @@ -712,25 +727,25 @@ RLEAlphaClipBlit(int w, Uint8 * srcbuf, SDL_Surface * dst, /* blit a pixel-alpha RLE surface */ int -SDL_RLEAlphaBlit(SDL_Surface * src, SDL_Rect * srcrect, - SDL_Surface * dst, SDL_Rect * dstrect) +SDL_RLEAlphaBlit(SDL_Surface * surf_src, SDL_Rect * srcrect, + SDL_Surface * surf_dst, SDL_Rect * dstrect) { int x, y; - int w = src->w; + int w = surf_src->w; Uint8 *srcbuf, *dstbuf; - SDL_PixelFormat *df = dst->format; + SDL_PixelFormat *df = surf_dst->format; /* Lock the destination if necessary */ - if (SDL_MUSTLOCK(dst)) { - if (SDL_LockSurface(dst) < 0) { + if (SDL_MUSTLOCK(surf_dst)) { + if (SDL_LockSurface(surf_dst) < 0) { return -1; } } x = dstrect->x; y = dstrect->y; - dstbuf = (Uint8 *) dst->pixels + y * dst->pitch + x * df->BytesPerPixel; - srcbuf = (Uint8 *) src->map->data + sizeof(RLEDestFormat); + dstbuf = (Uint8 *) surf_dst->pixels + y * surf_dst->pitch + x * df->BytesPerPixel; + srcbuf = (Uint8 *) surf_src->map->data + sizeof(RLEDestFormat); { /* skip lines at the top if necessary */ @@ -789,8 +804,8 @@ SDL_RLEAlphaBlit(SDL_Surface * src, SDL_Rect * srcrect, } /* if left or right edge clipping needed, call clip blit */ - if (srcrect->x || srcrect->w != src->w) { - RLEAlphaClipBlit(w, srcbuf, dst, dstbuf, srcrect); + if (srcrect->x || srcrect->w != surf_src->w) { + RLEAlphaClipBlit(w, srcbuf, surf_dst, dstbuf, srcrect); } else { /* @@ -839,7 +854,7 @@ SDL_RLEAlphaBlit(SDL_Surface * src, SDL_Rect * srcrect, ofs += run; \ } \ } while(ofs < w); \ - dstbuf += dst->pitch; \ + dstbuf += surf_dst->pitch; \ } while(--linecount); \ } while(0) @@ -859,8 +874,8 @@ SDL_RLEAlphaBlit(SDL_Surface * src, SDL_Rect * srcrect, done: /* Unlock the destination if necessary */ - if (SDL_MUSTLOCK(dst)) { - SDL_UnlockSurface(dst); + if (SDL_MUSTLOCK(surf_dst)) { + SDL_UnlockSurface(surf_dst); } return 0; } @@ -979,7 +994,7 @@ copy_32(void *dst, Uint32 * src, int n, for (i = 0; i < n; i++) { unsigned r, g, b, a; RGBA_FROM_8888(*src, sfmt, r, g, b, a); - PIXEL_FROM_RGBA(*d, dfmt, r, g, b, a); + RLEPIXEL_FROM_RGBA(*d, dfmt, r, g, b, a); d++; src++; } diff --git a/Engine/lib/sdl/src/video/SDL_RLEaccel_c.h b/Engine/lib/sdl/src/video/SDL_RLEaccel_c.h index 271faa0b74..c04fc1527f 100644 --- a/Engine/lib/sdl/src/video/SDL_RLEaccel_c.h +++ b/Engine/lib/sdl/src/video/SDL_RLEaccel_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit.c b/Engine/lib/sdl/src/video/SDL_blit.c index fe30923bc7..90aa878984 100644 --- a/Engine/lib/sdl/src/video/SDL_blit.c +++ b/Engine/lib/sdl/src/video/SDL_blit.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit.h b/Engine/lib/sdl/src/video/SDL_blit.h index caf6c00f3c..e30f8afecb 100644 --- a/Engine/lib/sdl/src/video/SDL_blit.h +++ b/Engine/lib/sdl/src/video/SDL_blit.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -402,18 +402,18 @@ do { \ { \ switch (bpp) { \ case 1: { \ - Uint8 Pixel; \ + Uint8 _pixel; \ \ - PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a); \ - *((Uint8 *)(buf)) = Pixel; \ + PIXEL_FROM_RGBA(_pixel, fmt, r, g, b, a); \ + *((Uint8 *)(buf)) = _pixel; \ } \ break; \ \ case 2: { \ - Uint16 Pixel; \ + Uint16 _pixel; \ \ - PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a); \ - *((Uint16 *)(buf)) = Pixel; \ + PIXEL_FROM_RGBA(_pixel, fmt, r, g, b, a); \ + *((Uint16 *)(buf)) = _pixel; \ } \ break; \ \ @@ -431,10 +431,10 @@ do { \ break; \ \ case 4: { \ - Uint32 Pixel; \ + Uint32 _pixel; \ \ - PIXEL_FROM_RGBA(Pixel, fmt, r, g, b, a); \ - *((Uint32 *)(buf)) = Pixel; \ + PIXEL_FROM_RGBA(_pixel, fmt, r, g, b, a); \ + *((Uint32 *)(buf)) = _pixel; \ } \ break; \ } \ diff --git a/Engine/lib/sdl/src/video/SDL_blit_0.c b/Engine/lib/sdl/src/video/SDL_blit_0.c index a820fb379d..fe7330d78d 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_0.c +++ b/Engine/lib/sdl/src/video/SDL_blit_0.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_1.c b/Engine/lib/sdl/src/video/SDL_blit_1.c index 4dfcabda68..69c15d08df 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_1.c +++ b/Engine/lib/sdl/src/video/SDL_blit_1.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_A.c b/Engine/lib/sdl/src/video/SDL_blit_A.c index 31bd0401e0..0190ffddda 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_A.c +++ b/Engine/lib/sdl/src/video/SDL_blit_A.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -343,7 +343,7 @@ BlitRGBtoRGBPixelAlphaMMX(SDL_BlitInfo * info) mm_zero = _mm_setzero_si64(); /* 0 -> mm_zero */ multmask = 0x00FF; multmask <<= (ashift * 2); - multmask2 = 0x00FF00FF00FF00FF; + multmask2 = 0x00FF00FF00FF00FFULL; while (height--) { /* *INDENT-OFF* */ @@ -530,7 +530,7 @@ BlitRGBtoRGBPixelAlphaMMX3DNOW(SDL_BlitInfo * info) mm_zero = _mm_setzero_si64(); /* 0 -> mm_zero */ multmask = 0x00FF; multmask <<= (ashift * 2); - multmask2 = 0x00FF00FF00FF00FF; + multmask2 = 0x00FF00FF00FF00FFULL; while (height--) { /* *INDENT-OFF* */ @@ -580,7 +580,7 @@ BlitRGBtoRGBPixelAlphaMMX3DNOW(SDL_BlitInfo * info) _mm_empty(); } -#endif /* __MMX__ */ +#endif /* __3dNOW__ */ /* 16bpp special case for per-surface alpha=50%: blend 2 pixels in parallel */ diff --git a/Engine/lib/sdl/src/video/SDL_blit_N.c b/Engine/lib/sdl/src/video/SDL_blit_N.c index 41615be575..94894a78ca 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_N.c +++ b/Engine/lib/sdl/src/video/SDL_blit_N.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -2114,6 +2114,33 @@ Blit4to4MaskAlpha(SDL_BlitInfo * info) } } +/* blits 32 bit RGBA<->RGBA with both surfaces having the same R,G,B,A fields */ +static void +Blit4to4CopyAlpha(SDL_BlitInfo * info) +{ + int width = info->dst_w; + int height = info->dst_h; + Uint32 *src = (Uint32 *) info->src; + int srcskip = info->src_skip; + Uint32 *dst = (Uint32 *) info->dst; + int dstskip = info->dst_skip; + + /* RGBA->RGBA, COPY_ALPHA */ + while (height--) { + /* *INDENT-OFF* */ + DUFFS_LOOP( + { + *dst = *src; + ++dst; + ++src; + }, + width); + /* *INDENT-ON* */ + src = (Uint32 *) ((Uint8 *) src + srcskip); + dst = (Uint32 *) ((Uint8 *) dst + dstskip); + } +} + static void BlitNtoN(SDL_BlitInfo * info) { @@ -2562,8 +2589,17 @@ SDL_CalculateBlitN(SDL_Surface * surface) srcfmt->Rmask == dstfmt->Rmask && srcfmt->Gmask == dstfmt->Gmask && srcfmt->Bmask == dstfmt->Bmask) { - /* Fastpath C fallback: 32bit RGB<->RGBA blit with matching RGB */ - blitfun = Blit4to4MaskAlpha; + if (a_need == COPY_ALPHA) { + if (srcfmt->Amask == dstfmt->Amask) { + /* Fastpath C fallback: 32bit RGBA<->RGBA blit with matching RGBA */ + blitfun = Blit4to4CopyAlpha; + } else { + blitfun = BlitNtoNCopyAlpha; + } + } else { + /* Fastpath C fallback: 32bit RGB<->RGBA blit with matching RGB */ + blitfun = Blit4to4MaskAlpha; + } } else if (a_need == COPY_ALPHA) { blitfun = BlitNtoNCopyAlpha; } diff --git a/Engine/lib/sdl/src/video/SDL_blit_auto.c b/Engine/lib/sdl/src/video/SDL_blit_auto.c index 310839ca0f..f122819133 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_auto.c +++ b/Engine/lib/sdl/src/video/SDL_blit_auto.c @@ -1,7 +1,7 @@ /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -71,7 +71,7 @@ static void SDL_Blit_RGB888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -81,7 +81,7 @@ static void SDL_Blit_RGB888_RGB888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -95,7 +95,6 @@ static void SDL_Blit_RGB888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -124,7 +123,7 @@ static void SDL_Blit_RGB888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -155,7 +154,7 @@ static void SDL_Blit_RGB888_RGB888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -169,7 +168,6 @@ static void SDL_Blit_RGB888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -198,9 +196,8 @@ static void SDL_Blit_RGB888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -208,15 +205,12 @@ static void SDL_Blit_RGB888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -233,9 +227,8 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -264,15 +257,12 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -293,7 +283,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -303,7 +293,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -325,7 +315,6 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -358,7 +347,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -389,7 +378,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -411,7 +400,6 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -437,7 +425,7 @@ static void SDL_Blit_RGB888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_RGB888_BGR888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -466,7 +454,7 @@ static void SDL_Blit_RGB888_BGR888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -483,7 +471,7 @@ static void SDL_Blit_RGB888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -493,7 +481,7 @@ static void SDL_Blit_RGB888_BGR888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -507,7 +495,6 @@ static void SDL_Blit_RGB888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -536,7 +523,7 @@ static void SDL_Blit_RGB888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -567,7 +554,7 @@ static void SDL_Blit_RGB888_BGR888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -581,7 +568,6 @@ static void SDL_Blit_RGB888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -610,9 +596,8 @@ static void SDL_Blit_RGB888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -620,15 +605,12 @@ static void SDL_Blit_RGB888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -645,9 +627,8 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -676,15 +657,12 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = 0xFF; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -705,7 +683,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -715,7 +693,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -737,7 +715,6 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -770,7 +747,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -801,7 +778,7 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -823,7 +800,6 @@ static void SDL_Blit_RGB888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -905,7 +881,7 @@ static void SDL_Blit_RGB888_ARGB8888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -979,7 +955,7 @@ static void SDL_Blit_RGB888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -1127,7 +1103,7 @@ static void SDL_Blit_RGB888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -1213,7 +1189,7 @@ static void SDL_Blit_RGB888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -1261,7 +1237,7 @@ static void SDL_Blit_RGB888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_BGR888_RGB888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -1290,7 +1266,7 @@ static void SDL_Blit_BGR888_RGB888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -1307,7 +1283,7 @@ static void SDL_Blit_BGR888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1317,7 +1293,7 @@ static void SDL_Blit_BGR888_RGB888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -1331,7 +1307,6 @@ static void SDL_Blit_BGR888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1360,7 +1335,7 @@ static void SDL_Blit_BGR888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -1391,7 +1366,7 @@ static void SDL_Blit_BGR888_RGB888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -1405,7 +1380,6 @@ static void SDL_Blit_BGR888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1434,9 +1408,8 @@ static void SDL_Blit_BGR888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1444,15 +1417,12 @@ static void SDL_Blit_BGR888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -1469,9 +1439,8 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -1500,15 +1469,12 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -1529,7 +1495,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1539,7 +1505,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -1561,7 +1527,6 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1594,7 +1559,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -1625,7 +1590,7 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -1647,7 +1612,6 @@ static void SDL_Blit_BGR888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1714,7 +1678,7 @@ static void SDL_Blit_BGR888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1724,7 +1688,7 @@ static void SDL_Blit_BGR888_BGR888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -1738,7 +1702,6 @@ static void SDL_Blit_BGR888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1767,7 +1730,7 @@ static void SDL_Blit_BGR888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -1798,7 +1761,7 @@ static void SDL_Blit_BGR888_BGR888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -1812,7 +1775,6 @@ static void SDL_Blit_BGR888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -1841,9 +1803,8 @@ static void SDL_Blit_BGR888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1851,15 +1812,12 @@ static void SDL_Blit_BGR888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -1876,9 +1834,8 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -1907,15 +1864,12 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = 0xFF; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -1936,7 +1890,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -1946,7 +1900,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -1968,7 +1922,6 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2001,7 +1954,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -2032,7 +1985,7 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -2054,7 +2007,6 @@ static void SDL_Blit_BGR888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2136,7 +2088,7 @@ static void SDL_Blit_BGR888_ARGB8888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -2210,7 +2162,7 @@ static void SDL_Blit_BGR888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -2358,7 +2310,7 @@ static void SDL_Blit_BGR888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -2444,7 +2396,7 @@ static void SDL_Blit_BGR888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = 0xFF; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -2492,7 +2444,7 @@ static void SDL_Blit_BGR888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_ARGB8888_RGB888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -2521,7 +2473,7 @@ static void SDL_Blit_ARGB8888_RGB888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -2538,7 +2490,7 @@ static void SDL_Blit_ARGB8888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -2546,9 +2498,9 @@ static void SDL_Blit_ARGB8888_RGB888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -2562,7 +2514,6 @@ static void SDL_Blit_ARGB8888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2591,7 +2542,7 @@ static void SDL_Blit_ARGB8888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -2620,9 +2571,9 @@ static void SDL_Blit_ARGB8888_RGB888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -2636,7 +2587,6 @@ static void SDL_Blit_ARGB8888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2665,9 +2615,8 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -2675,15 +2624,12 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -2700,9 +2646,8 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -2731,15 +2676,12 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -2760,7 +2702,7 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -2768,9 +2710,9 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -2792,7 +2734,6 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2825,7 +2766,7 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -2854,9 +2795,9 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -2878,7 +2819,6 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -2904,7 +2844,7 @@ static void SDL_Blit_ARGB8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_ARGB8888_BGR888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -2933,7 +2873,7 @@ static void SDL_Blit_ARGB8888_BGR888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -2950,7 +2890,7 @@ static void SDL_Blit_ARGB8888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -2958,9 +2898,9 @@ static void SDL_Blit_ARGB8888_BGR888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -2974,7 +2914,6 @@ static void SDL_Blit_ARGB8888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3003,7 +2942,7 @@ static void SDL_Blit_ARGB8888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -3032,9 +2971,9 @@ static void SDL_Blit_ARGB8888_BGR888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -3048,7 +2987,6 @@ static void SDL_Blit_ARGB8888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3077,9 +3015,8 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -3087,15 +3024,12 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -3112,9 +3046,8 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -3143,15 +3076,12 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -3172,7 +3102,7 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -3180,9 +3110,9 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -3204,7 +3134,6 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3237,7 +3166,7 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -3266,9 +3195,9 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -3290,7 +3219,6 @@ static void SDL_Blit_ARGB8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3365,9 +3293,9 @@ static void SDL_Blit_ARGB8888_ARGB8888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -3439,9 +3367,9 @@ static void SDL_Blit_ARGB8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -3494,7 +3422,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = (Uint8)(pixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; @@ -3550,7 +3478,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; + R = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); B = (Uint8)pixel; A = (Uint8)(pixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; @@ -3587,9 +3515,9 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -3673,9 +3601,9 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; + srcR = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcB = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -3723,7 +3651,7 @@ static void SDL_Blit_ARGB8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_RGBA8888_RGB888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -3752,7 +3680,7 @@ static void SDL_Blit_RGBA8888_RGB888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -3769,7 +3697,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -3779,7 +3707,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -3793,7 +3721,6 @@ static void SDL_Blit_RGBA8888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3822,7 +3749,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -3853,7 +3780,7 @@ static void SDL_Blit_RGBA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -3867,7 +3794,6 @@ static void SDL_Blit_RGBA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -3896,9 +3822,8 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -3906,15 +3831,12 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -3931,9 +3853,8 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -3962,15 +3883,12 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -3991,7 +3909,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -4001,7 +3919,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4023,7 +3941,6 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4056,7 +3973,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -4087,7 +4004,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4109,7 +4026,6 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4135,7 +4051,7 @@ static void SDL_Blit_RGBA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_RGBA8888_BGR888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -4164,7 +4080,7 @@ static void SDL_Blit_RGBA8888_BGR888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -4181,7 +4097,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -4191,7 +4107,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -4205,7 +4121,6 @@ static void SDL_Blit_RGBA8888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4234,7 +4149,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -4265,7 +4180,7 @@ static void SDL_Blit_RGBA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -4279,7 +4194,6 @@ static void SDL_Blit_RGBA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4308,9 +4222,8 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -4318,15 +4231,12 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -4343,9 +4253,8 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -4374,15 +4283,12 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); A = (Uint8)pixel; + R = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); B = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -4403,7 +4309,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -4413,7 +4319,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4435,7 +4341,6 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4468,7 +4373,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -4499,7 +4404,7 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4521,7 +4426,6 @@ static void SDL_Blit_RGBA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -4603,7 +4507,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -4677,7 +4581,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -4825,7 +4729,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4911,7 +4815,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcR = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcB = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -4959,7 +4863,7 @@ static void SDL_Blit_RGBA8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_ABGR8888_RGB888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -4988,7 +4892,7 @@ static void SDL_Blit_ABGR8888_RGB888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -5005,7 +4909,7 @@ static void SDL_Blit_ABGR8888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5013,9 +4917,9 @@ static void SDL_Blit_ABGR8888_RGB888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5029,7 +4933,6 @@ static void SDL_Blit_ABGR8888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5058,7 +4961,7 @@ static void SDL_Blit_ABGR8888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -5087,9 +4990,9 @@ static void SDL_Blit_ABGR8888_RGB888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5103,7 +5006,6 @@ static void SDL_Blit_ABGR8888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5132,9 +5034,8 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5142,15 +5043,12 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -5167,9 +5065,8 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -5198,15 +5095,12 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -5227,7 +5121,7 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5235,9 +5129,9 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -5259,7 +5153,6 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5292,7 +5185,7 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -5321,9 +5214,9 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -5345,7 +5238,6 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5371,7 +5263,7 @@ static void SDL_Blit_ABGR8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_ABGR8888_BGR888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -5400,7 +5292,7 @@ static void SDL_Blit_ABGR8888_BGR888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -5417,7 +5309,7 @@ static void SDL_Blit_ABGR8888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5425,9 +5317,9 @@ static void SDL_Blit_ABGR8888_BGR888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5441,7 +5333,6 @@ static void SDL_Blit_ABGR8888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5470,7 +5361,7 @@ static void SDL_Blit_ABGR8888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -5499,9 +5390,9 @@ static void SDL_Blit_ABGR8888_BGR888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5515,7 +5406,6 @@ static void SDL_Blit_ABGR8888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5544,9 +5434,8 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5554,15 +5443,12 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -5579,9 +5465,8 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -5610,15 +5495,12 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -5639,7 +5521,7 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -5647,9 +5529,9 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -5671,7 +5553,6 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5704,7 +5585,7 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -5733,9 +5614,9 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -5757,7 +5638,6 @@ static void SDL_Blit_ABGR8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -5812,7 +5692,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = (Uint8)(pixel >> 24); pixel = ((Uint32)A << 24) | ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -5837,9 +5717,9 @@ static void SDL_Blit_ABGR8888_ARGB8888_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5911,9 +5791,9 @@ static void SDL_Blit_ABGR8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -5966,7 +5846,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = (Uint8)(pixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; @@ -6022,7 +5902,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - A = (Uint8)(pixel >> 24); B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; + B = (Uint8)(pixel >> 16); G = (Uint8)(pixel >> 8); R = (Uint8)pixel; A = (Uint8)(pixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; @@ -6059,9 +5939,9 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6145,9 +6025,9 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } srcpixel = *src; - srcA = (Uint8)(srcpixel >> 24); srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; + srcB = (Uint8)(srcpixel >> 16); srcG = (Uint8)(srcpixel >> 8); srcR = (Uint8)srcpixel; srcA = (Uint8)(srcpixel >> 24); dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6195,7 +6075,7 @@ static void SDL_Blit_ABGR8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_BGRA8888_RGB888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -6224,7 +6104,7 @@ static void SDL_Blit_BGRA8888_RGB888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -6241,7 +6121,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6251,7 +6131,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -6265,7 +6145,6 @@ static void SDL_Blit_BGRA8888_RGB888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6294,7 +6173,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -6325,7 +6204,7 @@ static void SDL_Blit_BGRA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -6339,7 +6218,6 @@ static void SDL_Blit_BGRA8888_RGB888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6368,9 +6246,8 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6378,15 +6255,12 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; ++src; @@ -6403,9 +6277,8 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -6434,15 +6307,12 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)R << 16) | ((Uint32)G << 8) | B; *dst = pixel; posx += incx; @@ -6463,7 +6333,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6473,7 +6343,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6495,7 +6365,6 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6528,7 +6397,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -6559,7 +6428,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = 0xFF; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6581,7 +6450,6 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6607,7 +6475,7 @@ static void SDL_Blit_BGRA8888_RGB888_Modulate_Blend_Scale(SDL_BlitInfo *info) static void SDL_Blit_BGRA8888_BGR888_Scale(SDL_BlitInfo *info) { Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -6636,7 +6504,7 @@ static void SDL_Blit_BGRA8888_BGR888_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -6653,7 +6521,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6663,7 +6531,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -6677,7 +6545,6 @@ static void SDL_Blit_BGRA8888_BGR888_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6706,7 +6573,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -6737,7 +6604,7 @@ static void SDL_Blit_BGRA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -6751,7 +6618,6 @@ static void SDL_Blit_BGRA8888_BGR888_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6780,9 +6646,8 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6790,15 +6655,12 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate(SDL_BlitInfo *info) int n = info->dst_w; while (n--) { pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; ++src; @@ -6815,9 +6677,8 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; - const Uint32 modulateA = info->a; Uint32 pixel; - Uint32 R, G, B, A; + Uint32 R, G, B; int srcy, srcx; int posy, posx; int incy, incx; @@ -6846,15 +6707,12 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Scale(SDL_BlitInfo *info) src = (Uint32 *)(info->src + (srcy * info->src_pitch) + (srcx * 4)); } pixel = *src; - B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); A = (Uint8)pixel; + B = (Uint8)(pixel >> 24); G = (Uint8)(pixel >> 16); R = (Uint8)(pixel >> 8); if (flags & SDL_COPY_MODULATE_COLOR) { R = (R * modulateR) / 255; G = (G * modulateG) / 255; B = (B * modulateB) / 255; } - if (flags & SDL_COPY_MODULATE_ALPHA) { - A = (A * modulateA) / 255; - } pixel = ((Uint32)B << 16) | ((Uint32)G << 8) | R; *dst = pixel; posx += incx; @@ -6875,7 +6733,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; while (info->dst_h--) { Uint32 *src = (Uint32 *)info->src; @@ -6885,7 +6743,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6907,7 +6765,6 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -6940,7 +6797,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; - Uint32 dstR, dstG, dstB, dstA; + Uint32 dstR, dstG, dstB; int srcy, srcx; int posy, posx; int incy, incx; @@ -6971,7 +6828,7 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; dstA = 0xFF; + dstB = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstR = (Uint8)dstpixel; if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -6993,7 +6850,6 @@ static void SDL_Blit_BGRA8888_BGR888_Modulate_Blend_Scale(SDL_BlitInfo *info) dstR = srcR + ((255 - srcA) * dstR) / 255; dstG = srcG + ((255 - srcA) * dstG) / 255; dstB = srcB + ((255 - srcA) * dstB) / 255; - dstA = srcA + ((255 - srcA) * dstA) / 255; break; case SDL_COPY_ADD: dstR = srcR + dstR; if (dstR > 255) dstR = 255; @@ -7075,7 +6931,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -7149,7 +7005,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) { /* This goes away if we ever use premultiplied alpha */ if (srcA < 255) { @@ -7297,7 +7153,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; @@ -7383,7 +7239,7 @@ static void SDL_Blit_BGRA8888_ARGB8888_Modulate_Blend_Scale(SDL_BlitInfo *info) srcpixel = *src; srcB = (Uint8)(srcpixel >> 24); srcG = (Uint8)(srcpixel >> 16); srcR = (Uint8)(srcpixel >> 8); srcA = (Uint8)srcpixel; dstpixel = *dst; - dstA = (Uint8)(dstpixel >> 24); dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; + dstR = (Uint8)(dstpixel >> 16); dstG = (Uint8)(dstpixel >> 8); dstB = (Uint8)dstpixel; dstA = (Uint8)(dstpixel >> 24); if (flags & SDL_COPY_MODULATE_COLOR) { srcR = (srcR * modulateR) / 255; srcG = (srcG * modulateG) / 255; diff --git a/Engine/lib/sdl/src/video/SDL_blit_auto.h b/Engine/lib/sdl/src/video/SDL_blit_auto.h index 369e12fc9a..58a532db04 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_auto.h +++ b/Engine/lib/sdl/src/video/SDL_blit_auto.h @@ -1,7 +1,7 @@ /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_copy.c b/Engine/lib/sdl/src/video/SDL_blit_copy.c index 5c62d633d6..7b9a91ffdf 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_copy.c +++ b/Engine/lib/sdl/src/video/SDL_blit_copy.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_copy.h b/Engine/lib/sdl/src/video/SDL_blit_copy.h index 8b6950ced8..060026d8a7 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_copy.h +++ b/Engine/lib/sdl/src/video/SDL_blit_copy.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_slow.c b/Engine/lib/sdl/src/video/SDL_blit_slow.c index ca644adcf9..3a462f6e27 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_slow.c +++ b/Engine/lib/sdl/src/video/SDL_blit_slow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_blit_slow.h b/Engine/lib/sdl/src/video/SDL_blit_slow.h index c1786e0b5e..75005fc531 100644 --- a/Engine/lib/sdl/src/video/SDL_blit_slow.h +++ b/Engine/lib/sdl/src/video/SDL_blit_slow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_bmp.c b/Engine/lib/sdl/src/video/SDL_bmp.c index 6d24aa25d0..f80f936962 100644 --- a/Engine/lib/sdl/src/video/SDL_bmp.c +++ b/Engine/lib/sdl/src/video/SDL_bmp.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -33,6 +33,7 @@ */ #include "SDL_video.h" +#include "SDL_assert.h" #include "SDL_endian.h" #include "SDL_pixels_c.h" @@ -84,15 +85,17 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc) int bmpPitch; int i, pad; SDL_Surface *surface; - Uint32 Rmask; - Uint32 Gmask; - Uint32 Bmask; - Uint32 Amask; + Uint32 Rmask = 0; + Uint32 Gmask = 0; + Uint32 Bmask = 0; + Uint32 Amask = 0; SDL_Palette *palette; Uint8 *bits; Uint8 *top, *end; SDL_bool topDown; int ExpandBMP; + SDL_bool haveRGBMasks = SDL_FALSE; + SDL_bool haveAlphaMask = SDL_FALSE; SDL_bool correctAlpha = SDL_FALSE; /* The Win32 BMP file header (14 bytes) */ @@ -143,15 +146,14 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc) /* Read the Win32 BITMAPINFOHEADER */ biSize = SDL_ReadLE32(src); - if (biSize == 12) { + if (biSize == 12) { /* really old BITMAPCOREHEADER */ biWidth = (Uint32) SDL_ReadLE16(src); biHeight = (Uint32) SDL_ReadLE16(src); /* biPlanes = */ SDL_ReadLE16(src); biBitCount = SDL_ReadLE16(src); biCompression = BI_RGB; - } else { - const unsigned int headerSize = 40; - + } else if (biSize >= 40) { /* some version of BITMAPINFOHEADER */ + Uint32 headerSize; biWidth = SDL_ReadLE32(src); biHeight = SDL_ReadLE32(src); /* biPlanes = */ SDL_ReadLE16(src); @@ -163,6 +165,54 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc) biClrUsed = SDL_ReadLE32(src); /* biClrImportant = */ SDL_ReadLE32(src); + /* 64 == BITMAPCOREHEADER2, an incompatible OS/2 2.x extension. Skip this stuff for now. */ + if (biSize == 64) { + /* ignore these extra fields. */ + if (biCompression == BI_BITFIELDS) { + /* this value is actually huffman compression in this variant. */ + SDL_SetError("Compressed BMP files not supported"); + was_error = SDL_TRUE; + goto done; + } + } else { + /* This is complicated. If compression is BI_BITFIELDS, then + we have 3 DWORDS that specify the RGB masks. This is either + stored here in an BITMAPV2INFOHEADER (which only differs in + that it adds these RGB masks) and biSize >= 52, or we've got + these masks stored in the exact same place, but strictly + speaking, this is the bmiColors field in BITMAPINFO immediately + following the legacy v1 info header, just past biSize. */ + if (biCompression == BI_BITFIELDS) { + haveRGBMasks = SDL_TRUE; + Rmask = SDL_ReadLE32(src); + Gmask = SDL_ReadLE32(src); + Bmask = SDL_ReadLE32(src); + + /* ...v3 adds an alpha mask. */ + if (biSize >= 56) { /* BITMAPV3INFOHEADER; adds alpha mask */ + haveAlphaMask = SDL_TRUE; + Amask = SDL_ReadLE32(src); + } + } else { + /* the mask fields are ignored for v2+ headers if not BI_BITFIELD. */ + if (biSize >= 52) { /* BITMAPV2INFOHEADER; adds RGB masks */ + /*Rmask = */ SDL_ReadLE32(src); + /*Gmask = */ SDL_ReadLE32(src); + /*Bmask = */ SDL_ReadLE32(src); + } + if (biSize >= 56) { /* BITMAPV3INFOHEADER; adds alpha mask */ + /*Amask = */ SDL_ReadLE32(src); + } + } + + /* Insert other fields here; Wikipedia and MSDN say we're up to + v5 of this header, but we ignore those for now (they add gamma, + color spaces, etc). Ignoring the weird OS/2 2.x format, we + currently parse up to v3 correctly (hopefully!). */ + } + + /* skip any header bytes we didn't handle... */ + headerSize = (Uint32) (SDL_RWtell(src) - (fp_offset + 14)); if (biSize > headerSize) { SDL_RWseek(src, (biSize - headerSize), RW_SEEK_CUR); } @@ -193,63 +243,46 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc) } /* We don't support any BMP compression right now */ - Rmask = Gmask = Bmask = Amask = 0; switch (biCompression) { case BI_RGB: /* If there are no masks, use the defaults */ - if (bfOffBits == (14 + biSize)) { - /* Default values for the BMP format */ - switch (biBitCount) { - case 15: - case 16: - Rmask = 0x7C00; - Gmask = 0x03E0; - Bmask = 0x001F; - break; - case 24: -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - Rmask = 0x000000FF; - Gmask = 0x0000FF00; - Bmask = 0x00FF0000; -#else - Rmask = 0x00FF0000; - Gmask = 0x0000FF00; - Bmask = 0x000000FF; -#endif - break; - case 32: - /* We don't know if this has alpha channel or not */ - correctAlpha = SDL_TRUE; - Amask = 0xFF000000; - Rmask = 0x00FF0000; - Gmask = 0x0000FF00; - Bmask = 0x000000FF; - break; - default: - break; - } - break; - } - /* Fall through -- read the RGB masks */ - - case BI_BITFIELDS: + SDL_assert(!haveRGBMasks); + SDL_assert(!haveAlphaMask); + /* Default values for the BMP format */ switch (biBitCount) { case 15: case 16: - Rmask = SDL_ReadLE32(src); - Gmask = SDL_ReadLE32(src); - Bmask = SDL_ReadLE32(src); + Rmask = 0x7C00; + Gmask = 0x03E0; + Bmask = 0x001F; + break; + case 24: +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + Rmask = 0x000000FF; + Gmask = 0x0000FF00; + Bmask = 0x00FF0000; +#else + Rmask = 0x00FF0000; + Gmask = 0x0000FF00; + Bmask = 0x000000FF; +#endif break; case 32: - Rmask = SDL_ReadLE32(src); - Gmask = SDL_ReadLE32(src); - Bmask = SDL_ReadLE32(src); - Amask = SDL_ReadLE32(src); + /* We don't know if this has alpha channel or not */ + correctAlpha = SDL_TRUE; + Amask = 0xFF000000; + Rmask = 0x00FF0000; + Gmask = 0x0000FF00; + Bmask = 0x000000FF; break; default: break; } break; + + case BI_BITFIELDS: + break; /* we handled this in the info header. */ + default: SDL_SetError("Compressed BMP files not supported"); was_error = SDL_TRUE; @@ -268,20 +301,24 @@ SDL_LoadBMP_RW(SDL_RWops * src, int freesrc) /* Load the palette, if any */ palette = (surface->format)->palette; if (palette) { + SDL_assert(biBitCount <= 8); if (biClrUsed == 0) { biClrUsed = 1 << biBitCount; } if ((int) biClrUsed > palette->ncolors) { - palette->ncolors = biClrUsed; - palette->colors = + SDL_Color *colors; + int ncolors = biClrUsed; + colors = (SDL_Color *) SDL_realloc(palette->colors, - palette->ncolors * + ncolors * sizeof(*palette->colors)); - if (!palette->colors) { + if (!colors) { SDL_OutOfMemory(); was_error = SDL_TRUE; goto done; } + palette->ncolors = ncolors; + palette->colors = colors; } else if ((int) biClrUsed < palette->ncolors) { palette->ncolors = biClrUsed; } @@ -494,6 +531,10 @@ SDL_SaveBMP_RW(SDL_Surface * saveme, SDL_RWops * dst, int freedst) format.BitsPerPixel); } } + } else { + /* Set no error here because it may overwrite a more useful message from + SDL_RWFromFile() if SDL_SaveBMP_RW() is called from SDL_SaveBMP(). */ + return -1; } if (surface && (SDL_LockSurface(surface) == 0)) { diff --git a/Engine/lib/sdl/src/video/SDL_clipboard.c b/Engine/lib/sdl/src/video/SDL_clipboard.c index a3b38e0455..91d1eeea04 100644 --- a/Engine/lib/sdl/src/video/SDL_clipboard.c +++ b/Engine/lib/sdl/src/video/SDL_clipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,10 @@ SDL_SetClipboardText(const char *text) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); + if (!_this) { + return SDL_SetError("Video subsystem must be initialized to set clipboard text"); + } + if (!text) { text = ""; } @@ -46,6 +50,11 @@ SDL_GetClipboardText(void) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); + if (!_this) { + SDL_SetError("Video subsystem must be initialized to get clipboard text"); + return SDL_strdup(""); + } + if (_this->GetClipboardText) { return _this->GetClipboardText(_this); } else { @@ -62,6 +71,11 @@ SDL_HasClipboardText(void) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); + if (!_this) { + SDL_SetError("Video subsystem must be initialized to check clipboard text"); + return SDL_FALSE; + } + if (_this->HasClipboardText) { return _this->HasClipboardText(_this); } else { diff --git a/Engine/lib/sdl/src/video/SDL_egl.c b/Engine/lib/sdl/src/video/SDL_egl.c index cfba200710..bfd4affb9c 100644 --- a/Engine/lib/sdl/src/video/SDL_egl.c +++ b/Engine/lib/sdl/src/video/SDL_egl.c @@ -1,6 +1,6 @@ /* * Simple DirectMedia Layer - * Copyright (C) 1997-2014 Sam Lantinga + * Copyright (C) 1997-2016 Sam Lantinga * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages @@ -22,11 +22,22 @@ #if SDL_VIDEO_OPENGL_EGL +#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT +#include "../core/windows/SDL_windows.h" +#endif + #include "SDL_sysvideo.h" #include "SDL_egl_c.h" #include "SDL_loadso.h" #include "SDL_hints.h" +#ifdef EGL_KHR_create_context +/* EGL_OPENGL_ES3_BIT_KHR was added in version 13 of the extension. */ +#ifndef EGL_OPENGL_ES3_BIT_KHR +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#endif +#endif /* EGL_KHR_create_context */ + #if SDL_VIDEO_DRIVER_RPI /* Raspbian places the OpenGL ES/EGL binaries in a non standard path */ #define DEFAULT_EGL "/opt/vc/lib/libEGL.so" @@ -34,7 +45,7 @@ #define DEFAULT_OGL_ES_PVR "/opt/vc/lib/libGLES_CM.so" #define DEFAULT_OGL_ES "/opt/vc/lib/libGLESv1_CM.so" -#elif SDL_VIDEO_DRIVER_ANDROID +#elif SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_VIVANTE /* Android */ #define DEFAULT_EGL "libEGL.so" #define DEFAULT_OGL_ES2 "libGLESv2.so" @@ -58,13 +69,45 @@ #endif /* SDL_VIDEO_DRIVER_RPI */ #define LOAD_FUNC(NAME) \ -*((void**)&_this->egl_data->NAME) = SDL_LoadFunction(_this->egl_data->dll_handle, #NAME); \ +_this->egl_data->NAME = SDL_LoadFunction(_this->egl_data->dll_handle, #NAME); \ if (!_this->egl_data->NAME) \ { \ return SDL_SetError("Could not retrieve EGL function " #NAME); \ } /* EGL implementation of SDL OpenGL ES support */ +#ifdef EGL_KHR_create_context +static int SDL_EGL_HasExtension(_THIS, const char *ext) +{ + int i; + int len = 0; + size_t ext_len; + const char *exts; + const char *ext_word; + + ext_len = SDL_strlen(ext); + exts = _this->egl_data->eglQueryString(_this->egl_data->egl_display, EGL_EXTENSIONS); + + if (exts) { + ext_word = exts; + + for (i = 0; exts[i] != 0; i++) { + if (exts[i] == ' ') { + if (ext_len == len && !SDL_strncmp(ext_word, ext, len)) { + return 1; + } + + len = 0; + ext_word = &exts[i + 1]; + } else { + len++; + } + } + } + + return 0; +} +#endif /* EGL_KHR_create_context */ void * SDL_EGL_GetProcAddress(_THIS, const char *proc) @@ -73,7 +116,7 @@ SDL_EGL_GetProcAddress(_THIS, const char *proc) void *retval; /* eglGetProcAddress is busted on Android http://code.google.com/p/android/issues/detail?id=7681 */ -#if !defined(SDL_VIDEO_DRIVER_ANDROID) +#if !defined(SDL_VIDEO_DRIVER_ANDROID) && !defined(SDL_VIDEO_DRIVER_MIR) if (_this->egl_data->eglGetProcAddress) { retval = _this->egl_data->eglGetProcAddress(proc); if (retval) { @@ -135,8 +178,11 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa #if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_WINRT d3dcompiler = SDL_GetHint(SDL_HINT_VIDEO_WIN_D3DCOMPILER); if (!d3dcompiler) { - /* By default we load the Vista+ compatible compiler */ - d3dcompiler = "d3dcompiler_46.dll"; + if (WIN_IsWindowsVistaOrGreater()) { + d3dcompiler = "d3dcompiler_46.dll"; + } else { + d3dcompiler = "d3dcompiler_43.dll"; + } } if (SDL_strcasecmp(d3dcompiler, "none") != 0) { SDL_LoadObject(d3dcompiler); @@ -150,12 +196,11 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa } if (egl_dll_handle == NULL) { - if(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { + if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { if (_this->gl_config.major_version > 1) { path = DEFAULT_OGL_ES2; egl_dll_handle = SDL_LoadObject(path); - } - else { + } else { path = DEFAULT_OGL_ES; egl_dll_handle = SDL_LoadObject(path); if (egl_dll_handle == NULL) { @@ -182,7 +227,7 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa dll_handle = SDL_LoadObject(egl_path); } /* Try loading a EGL symbol, if it does not work try the default library paths */ - if (SDL_LoadFunction(dll_handle, "eglChooseConfig") == NULL) { + if (dll_handle == NULL || SDL_LoadFunction(dll_handle, "eglChooseConfig") == NULL) { if (dll_handle != NULL) { SDL_UnloadObject(dll_handle); } @@ -191,9 +236,13 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa path = DEFAULT_EGL; } dll_handle = SDL_LoadObject(path); - if (dll_handle == NULL) { + if (dll_handle == NULL || SDL_LoadFunction(dll_handle, "eglChooseConfig") == NULL) { + if (dll_handle != NULL) { + SDL_UnloadObject(dll_handle); + } return SDL_SetError("Could not load EGL library"); } + SDL_ClearError(); } _this->egl_data->dll_handle = dll_handle; @@ -215,7 +264,9 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa LOAD_FUNC(eglWaitNative); LOAD_FUNC(eglWaitGL); LOAD_FUNC(eglBindAPI); + LOAD_FUNC(eglQueryString); +#if !defined(__WINRT__) _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(native_display); if (!_this->egl_data->egl_display) { return SDL_SetError("Could not get EGL display"); @@ -224,9 +275,8 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { return SDL_SetError("Could not initialize EGL"); } +#endif - _this->egl_data->dll_handle = dll_handle; - _this->egl_data->egl_dll_handle = egl_dll_handle; _this->gl_config.driver_loaded = 1; if (path) { @@ -289,23 +339,40 @@ SDL_EGL_ChooseConfig(_THIS) attribs[i++] = EGL_SAMPLES; attribs[i++] = _this->gl_config.multisamplesamples; } - + + if (_this->gl_config.framebuffer_srgb_capable) { +#ifdef EGL_KHR_gl_colorspace + if (SDL_EGL_HasExtension(_this, "EGL_KHR_gl_colorspace")) { + attribs[i++] = EGL_GL_COLORSPACE_KHR; + attribs[i++] = EGL_GL_COLORSPACE_SRGB_KHR; + } else +#endif + { + return SDL_SetError("EGL implementation does not support sRGB system framebuffers"); + } + } + attribs[i++] = EGL_RENDERABLE_TYPE; - if(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { - if (_this->gl_config.major_version == 2) { + if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { +#ifdef EGL_KHR_create_context + if (_this->gl_config.major_version >= 3 && + SDL_EGL_HasExtension(_this, "EGL_KHR_create_context")) { + attribs[i++] = EGL_OPENGL_ES3_BIT_KHR; + } else +#endif + if (_this->gl_config.major_version >= 2) { attribs[i++] = EGL_OPENGL_ES2_BIT; } else { attribs[i++] = EGL_OPENGL_ES_BIT; } _this->egl_data->eglBindAPI(EGL_OPENGL_ES_API); - } - else { + } else { attribs[i++] = EGL_OPENGL_BIT; _this->egl_data->eglBindAPI(EGL_OPENGL_API); } - + attribs[i++] = EGL_NONE; - + if (_this->egl_data->eglChooseConfig(_this->egl_data->egl_display, attribs, configs, SDL_arraysize(configs), @@ -313,11 +380,11 @@ SDL_EGL_ChooseConfig(_THIS) found_configs == 0) { return SDL_SetError("Couldn't find matching EGL config"); } - + /* eglChooseConfig returns a number of configurations that match or exceed the requested attribs. */ /* From those, we select the one that matches our requirements more closely via a makeshift algorithm */ - for ( i=0; igl_config.profile_mask; + EGLint major_version = _this->gl_config.major_version; + EGLint minor_version = _this->gl_config.minor_version; + SDL_bool profile_es = (profile_mask == SDL_GL_CONTEXT_PROFILE_ES); + if (!_this->egl_data) { /* The EGL library wasn't loaded, SDL_GetError() should have info */ return NULL; } - + if (_this->gl_config.share_with_current_context) { share_context = (EGLContext)SDL_GL_GetCurrentContext(); } - - /* Bind the API */ - if(_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_ES) { - _this->egl_data->eglBindAPI(EGL_OPENGL_ES_API); - if (_this->gl_config.major_version) { - context_attrib_list[1] = _this->gl_config.major_version; + + /* Set the context version and other attributes. */ + if ((major_version < 3 || (minor_version == 0 && profile_es)) && + _this->gl_config.flags == 0 && + (profile_mask == 0 || profile_es)) { + /* Create a context without using EGL_KHR_create_context attribs. + * When creating a GLES context without EGL_KHR_create_context we can + * only specify the major version. When creating a desktop GL context + * we can't specify any version, so we only try in that case when the + * version is less than 3.0 (matches SDL's GLX/WGL behavior.) + */ + if (profile_es) { + attribs[attr++] = EGL_CONTEXT_CLIENT_VERSION; + attribs[attr++] = SDL_max(major_version, 1); } + } else { +#ifdef EGL_KHR_create_context + /* The Major/minor version, context profiles, and context flags can + * only be specified when this extension is available. + */ + if (SDL_EGL_HasExtension(_this, "EGL_KHR_create_context")) { + attribs[attr++] = EGL_CONTEXT_MAJOR_VERSION_KHR; + attribs[attr++] = major_version; + attribs[attr++] = EGL_CONTEXT_MINOR_VERSION_KHR; + attribs[attr++] = minor_version; + + /* SDL profile bits match EGL profile bits. */ + if (profile_mask != 0 && profile_mask != SDL_GL_CONTEXT_PROFILE_ES) { + attribs[attr++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR; + attribs[attr++] = profile_mask; + } - egl_context = _this->egl_data->eglCreateContext(_this->egl_data->egl_display, - _this->egl_data->egl_config, - share_context, context_attrib_list); + /* SDL flags match EGL flags. */ + if (_this->gl_config.flags != 0) { + attribs[attr++] = EGL_CONTEXT_FLAGS_KHR; + attribs[attr++] = _this->gl_config.flags; + } + } else +#endif /* EGL_KHR_create_context */ + { + SDL_SetError("Could not create EGL context (context attributes are not supported)"); + return NULL; + } } - else { + + attribs[attr++] = EGL_NONE; + + /* Bind the API */ + if (profile_es) { + _this->egl_data->eglBindAPI(EGL_OPENGL_ES_API); + } else { _this->egl_data->eglBindAPI(EGL_OPENGL_API); - egl_context = _this->egl_data->eglCreateContext(_this->egl_data->egl_display, - _this->egl_data->egl_config, - share_context, NULL); } - + + egl_context = _this->egl_data->eglCreateContext(_this->egl_data->egl_display, + _this->egl_data->egl_config, + share_context, attribs); + if (egl_context == EGL_NO_CONTEXT) { SDL_SetError("Could not create EGL context"); return NULL; } - + _this->egl_data->egl_swapinterval = 0; - + if (SDL_EGL_MakeCurrent(_this, egl_surface, egl_context) < 0) { SDL_EGL_DeleteContext(_this, egl_context); SDL_SetError("Could not make EGL context current"); return NULL; } - + return (SDL_GLContext) egl_context; } @@ -416,8 +526,7 @@ SDL_EGL_MakeCurrent(_THIS, EGLSurface egl_surface, SDL_GLContext context) */ if (!egl_context || !egl_surface) { _this->egl_data->eglMakeCurrent(_this->egl_data->egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - } - else { + } else { if (!_this->egl_data->eglMakeCurrent(_this->egl_data->egl_display, egl_surface, egl_surface, egl_context)) { return SDL_SetError("Unable to make EGL context current"); @@ -485,6 +594,20 @@ SDL_EGL_CreateSurface(_THIS, NativeWindowType nw) return EGL_NO_SURFACE; } +#if __ANDROID__ + { + /* Android docs recommend doing this! + * Ref: http://developer.android.com/reference/android/app/NativeActivity.html + */ + EGLint format; + _this->egl_data->eglGetConfigAttrib(_this->egl_data->egl_display, + _this->egl_data->egl_config, + EGL_NATIVE_VISUAL_ID, &format); + + ANativeWindow_setBuffersGeometry(nw, 0, 0, format); + } +#endif + return _this->egl_data->eglCreateWindowSurface( _this->egl_data->egl_display, _this->egl_data->egl_config, diff --git a/Engine/lib/sdl/src/video/SDL_egl_c.h b/Engine/lib/sdl/src/video/SDL_egl_c.h index ef58b18e04..c683dffa77 100644 --- a/Engine/lib/sdl/src/video/SDL_egl_c.h +++ b/Engine/lib/sdl/src/video/SDL_egl_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_fillrect.c b/Engine/lib/sdl/src/video/SDL_fillrect.c index 2bf8a29185..e34a43c442 100644 --- a/Engine/lib/sdl/src/video/SDL_fillrect.c +++ b/Engine/lib/sdl/src/video/SDL_fillrect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -99,12 +99,11 @@ static void SDL_FillRect1SSE(Uint8 *pixels, int pitch, Uint32 color, int w, int h) { int i, n; - Uint8 *p = NULL; - + SSE_BEGIN; while (h--) { + Uint8 *p = pixels; n = w; - p = pixels; if (n > 63) { int adjust = 16 - ((uintptr_t)p & 15); @@ -118,7 +117,6 @@ SDL_FillRect1SSE(Uint8 *pixels, int pitch, Uint32 color, int w, int h) if (n & 63) { int remainder = (n & 63); SDL_memset(p, color, remainder); - p += remainder; } pixels += pitch; } @@ -198,9 +196,15 @@ SDL_FillRect2(Uint8 * pixels, int pitch, Uint32 color, int w, int h) static void SDL_FillRect3(Uint8 * pixels, int pitch, Uint32 color, int w, int h) { - Uint8 r = (Uint8) ((color >> 16) & 0xFF); - Uint8 g = (Uint8) ((color >> 8) & 0xFF); - Uint8 b = (Uint8) (color & 0xFF); +#if SDL_BYTEORDER == SDL_LIL_ENDIAN + Uint8 b1 = (Uint8) (color & 0xFF); + Uint8 b2 = (Uint8) ((color >> 8) & 0xFF); + Uint8 b3 = (Uint8) ((color >> 16) & 0xFF); +#elif SDL_BYTEORDER == SDL_BIG_ENDIAN + Uint8 b1 = (Uint8) ((color >> 16) & 0xFF); + Uint8 b2 = (Uint8) ((color >> 8) & 0xFF); + Uint8 b3 = (Uint8) (color & 0xFF); +#endif int n; Uint8 *p = NULL; @@ -209,9 +213,9 @@ SDL_FillRect3(Uint8 * pixels, int pitch, Uint32 color, int w, int h) p = pixels; while (n--) { - *p++ = r; - *p++ = g; - *p++ = b; + *p++ = b1; + *p++ = b2; + *p++ = b3; } pixels += pitch; } @@ -253,6 +257,10 @@ SDL_FillRect(SDL_Surface * dst, const SDL_Rect * rect, Uint32 color) rect = &clipped; } else { rect = &dst->clip_rect; + /* Don't attempt to fill if the surface's clip_rect is empty */ + if (SDL_RectEmpty(rect)) { + return 0; + } } /* Perform software fill */ diff --git a/Engine/lib/sdl/src/video/SDL_pixels.c b/Engine/lib/sdl/src/video/SDL_pixels.c index 9eb507e139..d905656cad 100644 --- a/Engine/lib/sdl/src/video/SDL_pixels.c +++ b/Engine/lib/sdl/src/video/SDL_pixels.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -122,6 +122,8 @@ SDL_GetPixelFormatName(Uint32 format) CASE(SDL_PIXELFORMAT_YUY2) CASE(SDL_PIXELFORMAT_UYVY) CASE(SDL_PIXELFORMAT_YVYU) + CASE(SDL_PIXELFORMAT_NV12) + CASE(SDL_PIXELFORMAT_NV21) #undef CASE default: return "SDL_PIXELFORMAT_UNKNOWN"; @@ -1099,9 +1101,7 @@ SDL_CalculateGammaRamp(float gamma, Uint16 * ramp) /* 0.0 gamma is all black */ if (gamma == 0.0f) { - for (i = 0; i < 256; ++i) { - ramp[i] = 0; - } + SDL_memset(ramp, 0, 256 * sizeof(Uint16)); return; } else if (gamma == 1.0f) { /* 1.0 gamma is identity */ diff --git a/Engine/lib/sdl/src/video/SDL_pixels_c.h b/Engine/lib/sdl/src/video/SDL_pixels_c.h index de2916ffa5..4ee91b8a30 100644 --- a/Engine/lib/sdl/src/video/SDL_pixels_c.h +++ b/Engine/lib/sdl/src/video/SDL_pixels_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_rect.c b/Engine/lib/sdl/src/video/SDL_rect.c index a0456bd691..2b29451c79 100644 --- a/Engine/lib/sdl/src/video/SDL_rect.c +++ b/Engine/lib/sdl/src/video/SDL_rect.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_rect_c.h b/Engine/lib/sdl/src/video/SDL_rect_c.h index e6be32926d..aa5fbde791 100644 --- a/Engine/lib/sdl/src/video/SDL_rect_c.h +++ b/Engine/lib/sdl/src/video/SDL_rect_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_shape.c b/Engine/lib/sdl/src/video/SDL_shape.c index 97248bbc80..4a2e5465b6 100644 --- a/Engine/lib/sdl/src/video/SDL_shape.c +++ b/Engine/lib/sdl/src/video/SDL_shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -128,6 +128,7 @@ RecursivelyCalculateShapeTree(SDL_WindowShapeMode mode,SDL_Surface* mask,SDL_Rec SDL_Color key; SDL_ShapeTree* result = (SDL_ShapeTree*)SDL_malloc(sizeof(SDL_ShapeTree)); SDL_Rect next = {0,0,0,0}; + for(y=dimensions.y;ykind = QuadShape; - /* These will stay the same. */ - next.w = dimensions.w / 2; - next.h = dimensions.h / 2; - /* These will change from recursion to recursion. */ + next.x = dimensions.x; next.y = dimensions.y; + next.w = halfwidth; + next.h = halfheight; result->data.children.upleft = (struct SDL_ShapeTree *)RecursivelyCalculateShapeTree(mode,mask,next); - next.x += next.w; - /* Unneeded: next.y = dimensions.y; */ + + next.x = dimensions.x + halfwidth; + next.w = dimensions.w - halfwidth; result->data.children.upright = (struct SDL_ShapeTree *)RecursivelyCalculateShapeTree(mode,mask,next); + next.x = dimensions.x; - next.y += next.h; + next.w = halfwidth; + next.y = dimensions.y + halfheight; + next.h = dimensions.h - halfheight; result->data.children.downleft = (struct SDL_ShapeTree *)RecursivelyCalculateShapeTree(mode,mask,next); - next.x += next.w; - /* Unneeded: next.y = dimensions.y + dimensions.h /2; */ + + next.x = dimensions.x + halfwidth; + next.w = dimensions.w - halfwidth; result->data.children.downright = (struct SDL_ShapeTree *)RecursivelyCalculateShapeTree(mode,mask,next); + return result; } } } + + /* If we never recursed, all the pixels in this quadrant have the same "value". */ result->kind = (last_opaque == SDL_TRUE ? OpaqueShape : TransparentShape); result->data.shape = dimensions; diff --git a/Engine/lib/sdl/src/video/SDL_shape_internals.h b/Engine/lib/sdl/src/video/SDL_shape_internals.h index b5413e1eaf..bdb0ee91be 100644 --- a/Engine/lib/sdl/src/video/SDL_shape_internals.h +++ b/Engine/lib/sdl/src/video/SDL_shape_internals.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_stretch.c b/Engine/lib/sdl/src/video/SDL_stretch.c index a4faacaf40..bb34dffb76 100644 --- a/Engine/lib/sdl/src/video/SDL_stretch.c +++ b/Engine/lib/sdl/src/video/SDL_stretch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/SDL_surface.c b/Engine/lib/sdl/src/video/SDL_surface.c index 7caf0fc51b..dae07f2851 100644 --- a/Engine/lib/sdl/src/video/SDL_surface.c +++ b/Engine/lib/sdl/src/video/SDL_surface.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,7 +26,6 @@ #include "SDL_RLEaccel_c.h" #include "SDL_pixels_c.h" - /* Public routines */ /* * Create an empty RGB surface of the appropriate depth @@ -145,7 +144,12 @@ SDL_SetSurfacePalette(SDL_Surface * surface, SDL_Palette * palette) if (!surface) { return SDL_SetError("SDL_SetSurfacePalette() passed a NULL surface"); } - return SDL_SetPixelFormatPalette(surface->format, palette); + if (SDL_SetPixelFormatPalette(surface->format, palette) < 0) { + return -1; + } + SDL_InvalidateMap(surface->map); + + return 0; } int @@ -618,7 +622,12 @@ int SDL_UpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect) { - SDL_Rect final_src, final_dst, fulldst; + double src_x0, src_y0, src_x1, src_y1; + double dst_x0, dst_y0, dst_x1, dst_y1; + SDL_Rect final_src, final_dst; + double scaling_w, scaling_h; + int src_w, src_h; + int dst_w, dst_h; /* Make sure the surfaces aren't locked */ if (!src || !dst) { @@ -628,78 +637,135 @@ SDL_UpperBlitScaled(SDL_Surface * src, const SDL_Rect * srcrect, return SDL_SetError("Surfaces must not be locked during blit"); } - /* If the destination rectangle is NULL, use the entire dest surface */ - if (dstrect == NULL) { - fulldst.x = fulldst.y = 0; - fulldst.w = dst->w; - fulldst.h = dst->h; - dstrect = &fulldst; + if (NULL == srcrect) { + src_w = src->w; + src_h = src->h; + } else { + src_w = srcrect->w; + src_h = srcrect->h; } - /* clip the source rectangle to the source surface */ - if (srcrect) { - int maxw, maxh; + if (NULL == dstrect) { + dst_w = dst->w; + dst_h = dst->h; + } else { + dst_w = dstrect->w; + dst_h = dstrect->h; + } - final_src.x = srcrect->x; - final_src.w = srcrect->w; - if (final_src.x < 0) { - final_src.w += final_src.x; - final_src.x = 0; - } - maxw = src->w - final_src.x; - if (maxw < final_src.w) - final_src.w = maxw; - - final_src.y = srcrect->y; - final_src.h = srcrect->h; - if (final_src.y < 0) { - final_src.h += final_src.y; - final_src.y = 0; - } - maxh = src->h - final_src.y; - if (maxh < final_src.h) - final_src.h = maxh; + if (dst_w == src_w && dst_h == src_h) { + /* No scaling, defer to regular blit */ + return SDL_BlitSurface(src, srcrect, dst, dstrect); + } + + scaling_w = (double)dst_w / src_w; + scaling_h = (double)dst_h / src_h; + if (NULL == dstrect) { + dst_x0 = 0; + dst_y0 = 0; + dst_x1 = dst_w - 1; + dst_y1 = dst_h - 1; } else { - final_src.x = final_src.y = 0; - final_src.w = src->w; - final_src.h = src->h; + dst_x0 = dstrect->x; + dst_y0 = dstrect->y; + dst_x1 = dst_x0 + dst_w - 1; + dst_y1 = dst_y0 + dst_h - 1; } - /* clip the destination rectangle against the clip rectangle */ - if (dstrect) { - int maxw, maxh; + if (NULL == srcrect) { + src_x0 = 0; + src_y0 = 0; + src_x1 = src_w - 1; + src_y1 = src_h - 1; + } else { + src_x0 = srcrect->x; + src_y0 = srcrect->y; + src_x1 = src_x0 + src_w - 1; + src_y1 = src_y0 + src_h - 1; + + /* Clip source rectangle to the source surface */ - final_dst.x = dstrect->x; - final_dst.w = dstrect->w; - if (final_dst.x < 0) { - final_dst.w += final_dst.x; - final_dst.x = 0; + if (src_x0 < 0) { + dst_x0 -= src_x0 * scaling_w; + src_x0 = 0; } - maxw = dst->w - final_dst.x; - if (maxw < final_dst.w) - final_dst.w = maxw; - - final_dst.y = dstrect->y; - final_dst.h = dstrect->h; - if (final_dst.y < 0) { - final_dst.h += final_dst.y; - final_dst.y = 0; + + if (src_x1 >= src->w) { + dst_x1 -= (src_x1 - src->w + 1) * scaling_w; + src_x1 = src->w - 1; + } + + if (src_y0 < 0) { + dst_y0 -= src_y0 * scaling_h; + src_y0 = 0; + } + + if (src_y1 >= src->h) { + dst_y1 -= (src_y1 - src->h + 1) * scaling_h; + src_y1 = src->h - 1; } - maxh = dst->h - final_dst.y; - if (maxh < final_dst.h) - final_dst.h = maxh; - } else { - final_dst.x = final_dst.y = 0; - final_dst.w = dst->w; - final_dst.h = dst->h; } - if (final_dst.w > 0 && final_dst.h > 0) { - return SDL_LowerBlitScaled(src, &final_src, dst, &final_dst); + /* Clip destination rectangle to the clip rectangle */ + + /* Translate to clip space for easier calculations */ + dst_x0 -= dst->clip_rect.x; + dst_x1 -= dst->clip_rect.x; + dst_y0 -= dst->clip_rect.y; + dst_y1 -= dst->clip_rect.y; + + if (dst_x0 < 0) { + src_x0 -= dst_x0 / scaling_w; + dst_x0 = 0; } - return 0; + if (dst_x1 >= dst->clip_rect.w) { + src_x1 -= (dst_x1 - dst->clip_rect.w + 1) / scaling_w; + dst_x1 = dst->clip_rect.w - 1; + } + + if (dst_y0 < 0) { + src_y0 -= dst_y0 / scaling_h; + dst_y0 = 0; + } + + if (dst_y1 >= dst->clip_rect.h) { + src_y1 -= (dst_y1 - dst->clip_rect.h + 1) / scaling_h; + dst_y1 = dst->clip_rect.h - 1; + } + + /* Translate back to surface coordinates */ + dst_x0 += dst->clip_rect.x; + dst_x1 += dst->clip_rect.x; + dst_y0 += dst->clip_rect.y; + dst_y1 += dst->clip_rect.y; + + final_src.x = (int)SDL_floor(src_x0 + 0.5); + final_src.y = (int)SDL_floor(src_y0 + 0.5); + final_src.w = (int)SDL_floor(src_x1 - src_x0 + 1.5); + final_src.h = (int)SDL_floor(src_y1 - src_y0 + 1.5); + + final_dst.x = (int)SDL_floor(dst_x0 + 0.5); + final_dst.y = (int)SDL_floor(dst_y0 + 0.5); + final_dst.w = (int)SDL_floor(dst_x1 - dst_x0 + 1.5); + final_dst.h = (int)SDL_floor(dst_y1 - dst_y0 + 1.5); + + if (final_dst.w < 0) + final_dst.w = 0; + if (final_dst.h < 0) + final_dst.h = 0; + + if (dstrect) + *dstrect = final_dst; + + if (final_dst.w == 0 || final_dst.h == 0 || + final_src.w <= 0 || final_src.h <= 0) { + /* No-op. */ + return 0; + } + + return SDL_LowerBlitScaled(src, &final_src, dst, &final_dst); } /** @@ -716,43 +782,6 @@ SDL_LowerBlitScaled(SDL_Surface * src, SDL_Rect * srcrect, SDL_COPY_COLORKEY ); - /* Save off the original dst width, height */ - int dstW = dstrect->w; - int dstH = dstrect->h; - SDL_Rect full_rect; - SDL_Rect final_dst = *dstrect; - SDL_Rect final_src = *srcrect; - - /* Clip the dst surface to the dstrect */ - full_rect.x = 0; - full_rect.y = 0; - full_rect.w = dst->w; - full_rect.h = dst->h; - if (!SDL_IntersectRect(&final_dst, &full_rect, &final_dst)) { - return 0; - } - - /* Did the dst width change? */ - if ( dstW != final_dst.w ) { - /* scale the src width appropriately */ - final_src.w = final_src.w * dst->clip_rect.w / dstW; - } - - /* Did the dst height change? */ - if ( dstH != final_dst.h ) { - /* scale the src width appropriately */ - final_src.h = final_src.h * dst->clip_rect.h / dstH; - } - - /* Clip the src surface to the srcrect */ - full_rect.x = 0; - full_rect.y = 0; - full_rect.w = src->w; - full_rect.h = src->h; - if (!SDL_IntersectRect(&final_src, &full_rect, &final_src)) { - return 0; - } - if (!(src->map->info.flags & SDL_COPY_NEAREST)) { src->map->info.flags |= SDL_COPY_NEAREST; SDL_InvalidateMap(src->map); @@ -761,9 +790,9 @@ SDL_LowerBlitScaled(SDL_Surface * src, SDL_Rect * srcrect, if ( !(src->map->info.flags & complex_copy_flags) && src->format->format == dst->format->format && !SDL_ISPIXELFORMAT_INDEXED(src->format->format) ) { - return SDL_SoftStretch( src, &final_src, dst, &final_dst ); + return SDL_SoftStretch( src, srcrect, dst, dstrect ); } else { - return SDL_LowerBlit( src, &final_src, dst, &final_dst ); + return SDL_LowerBlit( src, srcrect, dst, dstrect ); } } @@ -1000,7 +1029,7 @@ int SDL_ConvertPixels(int width, int height, SDL_Rect rect; void *nonconst_src = (void *) src; - /* Check to make sure we are bliting somewhere, so we don't crash */ + /* Check to make sure we are blitting somewhere, so we don't crash */ if (!dst) { return SDL_InvalidParamError("dst"); } @@ -1010,17 +1039,21 @@ int SDL_ConvertPixels(int width, int height, /* Fast path for same format copy */ if (src_format == dst_format) { - int bpp; + int bpp, i; if (SDL_ISPIXELFORMAT_FOURCC(src_format)) { switch (src_format) { - case SDL_PIXELFORMAT_YV12: - case SDL_PIXELFORMAT_IYUV: case SDL_PIXELFORMAT_YUY2: case SDL_PIXELFORMAT_UYVY: case SDL_PIXELFORMAT_YVYU: bpp = 2; break; + case SDL_PIXELFORMAT_YV12: + case SDL_PIXELFORMAT_IYUV: + case SDL_PIXELFORMAT_NV12: + case SDL_PIXELFORMAT_NV21: + bpp = 1; + break; default: return SDL_SetError("Unknown FOURCC pixel format"); } @@ -1029,11 +1062,32 @@ int SDL_ConvertPixels(int width, int height, } width *= bpp; - while (height-- > 0) { + for (i = height; i--;) { SDL_memcpy(dst, src, width); src = (Uint8*)src + src_pitch; dst = (Uint8*)dst + dst_pitch; } + + if (src_format == SDL_PIXELFORMAT_YV12 || src_format == SDL_PIXELFORMAT_IYUV) { + /* U and V planes are a quarter the size of the Y plane */ + width /= 2; + height /= 2; + src_pitch /= 2; + dst_pitch /= 2; + for (i = height * 2; i--;) { + SDL_memcpy(dst, src, width); + src = (Uint8*)src + src_pitch; + dst = (Uint8*)dst + dst_pitch; + } + } else if (src_format == SDL_PIXELFORMAT_NV12 || src_format == SDL_PIXELFORMAT_NV21) { + /* U/V plane is half the height of the Y plane */ + height /= 2; + for (i = height; i--;) { + SDL_memcpy(dst, src, width); + src = (Uint8*)src + src_pitch; + dst = (Uint8*)dst + dst_pitch; + } + } return 0; } diff --git a/Engine/lib/sdl/src/video/SDL_sysvideo.h b/Engine/lib/sdl/src/video/SDL_sysvideo.h index 32b5d77a23..77426c3eb4 100644 --- a/Engine/lib/sdl/src/video/SDL_sysvideo.h +++ b/Engine/lib/sdl/src/video/SDL_sysvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -93,10 +93,14 @@ struct SDL_Window SDL_Surface *surface; SDL_bool surface_valid; + SDL_bool is_hiding; SDL_bool is_destroying; SDL_WindowShaper *shaper; + SDL_HitTest hit_test; + void *hit_test_data; + SDL_WindowUserData *data; void *driverdata; @@ -166,6 +170,11 @@ struct SDL_VideoDevice */ int (*GetDisplayBounds) (_THIS, SDL_VideoDisplay * display, SDL_Rect * rect); + /* + * Get the dots/pixels-per-inch of a display + */ + int (*GetDisplayDPI) (_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi); + /* * Get a list of the available display modes for a display. */ @@ -215,8 +224,8 @@ struct SDL_VideoDevice SDL_ShapeDriver shape_driver; /* Get some platform dependent window information */ - SDL_bool(*GetWindowWMInfo) (_THIS, SDL_Window * window, - struct SDL_SysWMinfo * info); + SDL_bool(*GetWindowWMInfo) (_THIS, SDL_Window * window, + struct SDL_SysWMinfo * info); /* * * */ /* @@ -261,12 +270,16 @@ struct SDL_VideoDevice /* MessageBox */ int (*ShowMessageBox) (_THIS, const SDL_MessageBoxData *messageboxdata, int *buttonid); + /* Hit-testing */ + int (*SetWindowHitTest)(SDL_Window * window, SDL_bool enabled); + /* * * */ /* Data common to all drivers */ SDL_bool suspend_screensaver; int num_displays; SDL_VideoDisplay *displays; SDL_Window *windows; + SDL_Window *grabbed_window; Uint8 window_magic; Uint32 next_object_id; char * clipboard_text; @@ -296,6 +309,7 @@ struct SDL_VideoDevice int flags; int profile_mask; int share_with_current_context; + int release_behavior; int framebuffer_srgb_capable; int retained_backing; int driver_loaded; @@ -381,6 +395,15 @@ extern VideoBootStrap DUMMY_bootstrap; #if SDL_VIDEO_DRIVER_WAYLAND extern VideoBootStrap Wayland_bootstrap; #endif +#if SDL_VIDEO_DRIVER_NACL +extern VideoBootStrap NACL_bootstrap; +#endif +#if SDL_VIDEO_DRIVER_VIVANTE +extern VideoBootStrap VIVANTE_bootstrap; +#endif +#if SDL_VIDEO_DRIVER_EMSCRIPTEN +extern VideoBootStrap Emscripten_bootstrap; +#endif extern SDL_VideoDevice *SDL_GetVideoDevice(void); extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode); @@ -405,6 +428,8 @@ extern SDL_Window * SDL_GetFocusWindow(void); extern SDL_bool SDL_ShouldAllowTopmost(void); +extern float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches); + #endif /* _SDL_sysvideo_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/SDL_video.c b/Engine/lib/sdl/src/video/SDL_video.c index a97051a8f1..511b4c087d 100644 --- a/Engine/lib/sdl/src/video/SDL_video.c +++ b/Engine/lib/sdl/src/video/SDL_video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -46,6 +46,10 @@ #include "SDL_opengles2.h" #endif /* SDL_VIDEO_OPENGL_ES2 && !SDL_VIDEO_OPENGL */ +#ifndef GL_CONTEXT_RELEASE_BEHAVIOR_KHR +#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB +#endif + /* On Windows, windows.h defines CreateWindow */ #ifdef CreateWindow #undef CreateWindow @@ -62,6 +66,12 @@ static VideoBootStrap *bootstrap[] = { #if SDL_VIDEO_DRIVER_MIR &MIR_bootstrap, #endif +#if SDL_VIDEO_DRIVER_WAYLAND + &Wayland_bootstrap, +#endif +#if SDL_VIDEO_DRIVER_VIVANTE + &VIVANTE_bootstrap, +#endif #if SDL_VIDEO_DRIVER_DIRECTFB &DirectFB_bootstrap, #endif @@ -89,8 +99,11 @@ static VideoBootStrap *bootstrap[] = { #if SDL_VIDEO_DRIVER_RPI &RPI_bootstrap, #endif -#if SDL_VIDEO_DRIVER_WAYLAND - &Wayland_bootstrap, +#if SDL_VIDEO_DRIVER_NACL + &NACL_bootstrap, +#endif +#if SDL_VIDEO_DRIVER_EMSCRIPTEN + &Emscripten_bootstrap, #endif #if SDL_VIDEO_DRIVER_DUMMY &DUMMY_bootstrap, @@ -115,13 +128,14 @@ static SDL_VideoDevice *_this = NULL; SDL_UninitializedVideo(); \ return retval; \ } \ + SDL_assert(_this->displays != NULL); \ if (displayIndex < 0 || displayIndex >= _this->num_displays) { \ SDL_SetError("displayIndex must be in the range 0 - %d", \ _this->num_displays - 1); \ return retval; \ } -#define FULLSCREEN_MASK ( SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN ) +#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) #ifdef __MACOSX__ /* Support for Mac OS X fullscreen spaces */ @@ -228,16 +242,13 @@ ShouldUseTextureFramebuffer() } static int -SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch) +SDL_CreateWindowTexture(SDL_VideoDevice *unused, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch) { SDL_WindowTextureData *data; - SDL_RendererInfo info; - Uint32 i; data = SDL_GetWindowData(window, SDL_WINDOWTEXTUREDATA); if (!data) { SDL_Renderer *renderer = NULL; - SDL_RendererInfo info; int i; const char *hint = SDL_GetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION); @@ -245,6 +256,7 @@ SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pix if (hint && *hint != '0' && *hint != '1' && SDL_strcasecmp(hint, "software") != 0) { for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) { + SDL_RendererInfo info; SDL_GetRenderDriverInfo(i, &info); if (SDL_strcasecmp(info.name, hint) == 0) { renderer = SDL_CreateRenderer(window, i, 0); @@ -252,9 +264,10 @@ SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pix } } } - + if (!renderer) { for (i = 0; i < SDL_GetNumRenderDrivers(); ++i) { + SDL_RendererInfo info; SDL_GetRenderDriverInfo(i, &info); if (SDL_strcmp(info.name, "software") != 0) { renderer = SDL_CreateRenderer(window, i, 0); @@ -287,17 +300,23 @@ SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pix SDL_free(data->pixels); data->pixels = NULL; - if (SDL_GetRendererInfo(data->renderer, &info) < 0) { - return -1; - } + { + SDL_RendererInfo info; + Uint32 i; - /* Find the first format without an alpha channel */ - *format = info.texture_formats[0]; - for (i = 0; i < info.num_texture_formats; ++i) { - if (!SDL_ISPIXELFORMAT_FOURCC(info.texture_formats[i]) && - !SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) { - *format = info.texture_formats[i]; - break; + if (SDL_GetRendererInfo(data->renderer, &info) < 0) { + return -1; + } + + /* Find the first format without an alpha channel */ + *format = info.texture_formats[0]; + + for (i = 0; i < info.num_texture_formats; ++i) { + if (!SDL_ISPIXELFORMAT_FOURCC(info.texture_formats[i]) && + !SDL_ISPIXELFORMAT_ALPHA(info.texture_formats[i])) { + *format = info.texture_formats[i]; + break; + } } } @@ -326,7 +345,7 @@ SDL_CreateWindowTexture(_THIS, SDL_Window * window, Uint32 * format, void ** pix } static int -SDL_UpdateWindowTexture(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects) +SDL_UpdateWindowTexture(SDL_VideoDevice *unused, SDL_Window * window, const SDL_Rect * rects, int numrects) { SDL_WindowTextureData *data; SDL_Rect rect; @@ -356,7 +375,7 @@ SDL_UpdateWindowTexture(_THIS, SDL_Window * window, const SDL_Rect * rects, int } static void -SDL_DestroyWindowTexture(_THIS, SDL_Window * window) +SDL_DestroyWindowTexture(SDL_VideoDevice *unused, SDL_Window * window) { SDL_WindowTextureData *data; @@ -625,9 +644,9 @@ SDL_GetIndexOfDisplay(SDL_VideoDisplay *display) } void * -SDL_GetDisplayDriverData( int displayIndex ) +SDL_GetDisplayDriverData(int displayIndex) { - CHECK_DISPLAY_INDEX( displayIndex, NULL ); + CHECK_DISPLAY_INDEX(displayIndex, NULL); return _this->displays[displayIndex].driverdata; } @@ -668,6 +687,24 @@ SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect) return 0; } +int +SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi) +{ + SDL_VideoDisplay *display; + + CHECK_DISPLAY_INDEX(displayIndex, -1); + + display = &_this->displays[displayIndex]; + + if (_this->GetDisplayDPI) { + if (_this->GetDisplayDPI(_this, display, ddpi, hdpi, vdpi) == 0) { + return 0; + } + } + + return -1; +} + SDL_bool SDL_AddDisplayMode(SDL_VideoDisplay * display, const SDL_DisplayMode * mode) { @@ -1019,6 +1056,13 @@ SDL_SetWindowDisplayMode(SDL_Window * window, const SDL_DisplayMode * mode) } else { SDL_zero(window->fullscreen_mode); } + + if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + SDL_DisplayMode fullscreen_mode; + if (SDL_GetWindowDisplayMode(window, &fullscreen_mode) == 0) { + SDL_SetDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode); + } + } return 0; } @@ -1028,28 +1072,26 @@ SDL_GetWindowDisplayMode(SDL_Window * window, SDL_DisplayMode * mode) SDL_DisplayMode fullscreen_mode; SDL_VideoDisplay *display; + CHECK_WINDOW_MAGIC(window, -1); + if (!mode) { - return SDL_InvalidParamError("mode"); + return SDL_InvalidParamError("mode"); } - CHECK_WINDOW_MAGIC(window, -1); - fullscreen_mode = window->fullscreen_mode; if (!fullscreen_mode.w) { - fullscreen_mode.w = window->w; + fullscreen_mode.w = window->windowed.w; } if (!fullscreen_mode.h) { - fullscreen_mode.h = window->h; + fullscreen_mode.h = window->windowed.h; } display = SDL_GetDisplayForWindow(window); /* if in desktop size mode, just return the size of the desktop */ - if ( ( window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP ) == SDL_WINDOW_FULLSCREEN_DESKTOP ) - { + if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP) { fullscreen_mode = display->desktop_mode; - } - else if (!SDL_GetClosestDisplayModeForDisplay(SDL_GetDisplayForWindow(window), + } else if (!SDL_GetClosestDisplayModeForDisplay(SDL_GetDisplayForWindow(window), &fullscreen_mode, &fullscreen_mode)) { return SDL_SetError("Couldn't find display mode match"); @@ -1083,16 +1125,72 @@ SDL_RestoreMousePosition(SDL_Window *window) } } -static void +#if __WINRT__ +extern Uint32 WINRT_DetectWindowFlags(SDL_Window * window); +#endif + +static int SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) { SDL_VideoDisplay *display; SDL_Window *other; + CHECK_WINDOW_MAGIC(window,-1); + + /* if we are in the process of hiding don't go back to fullscreen */ + if ( window->is_hiding && fullscreen ) + return 0; + #ifdef __MACOSX__ + /* if the window is going away and no resolution change is necessary, + do nothing, or else we may trigger an ugly double-transition + */ + if (window->is_destroying && (window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP) + return 0; + + /* If we're switching between a fullscreen Space and "normal" fullscreen, we need to get back to normal first. */ + if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN)) { + if (!Cocoa_SetWindowFullscreenSpace(window, SDL_FALSE)) { + return -1; + } + } else if (fullscreen && ((window->last_fullscreen_flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN) && ((window->flags & FULLSCREEN_MASK) == SDL_WINDOW_FULLSCREEN_DESKTOP)) { + display = SDL_GetDisplayForWindow(window); + SDL_SetDisplayModeForDisplay(display, NULL); + if (_this->SetWindowFullscreen) { + _this->SetWindowFullscreen(_this, window, display, SDL_FALSE); + } + } + if (Cocoa_SetWindowFullscreenSpace(window, fullscreen)) { + if (Cocoa_IsWindowInFullscreenSpace(window) != fullscreen) { + return -1; + } window->last_fullscreen_flags = window->flags; - return; + return 0; + } +#elif __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10) + /* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen + or not. The user can choose this, via OS-provided UI, but this can't + be set programmatically. + + Just look at what SDL's WinRT video backend code detected with regards + to fullscreen (being active, or not), and figure out a return/error code + from that. + */ + if (fullscreen == !(WINRT_DetectWindowFlags(window) & FULLSCREEN_MASK)) { + /* Uh oh, either: + 1. fullscreen was requested, and we're already windowed + 2. windowed-mode was requested, and we're already fullscreen + + WinRT 8.x can't resolve either programmatically, so we're + giving up. + */ + return -1; + } else { + /* Whatever was requested, fullscreen or windowed mode, is already + in-place. + */ + return 0; } #endif @@ -1109,7 +1207,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) /* See if anything needs to be done now */ if ((display->fullscreen_window == window) == fullscreen) { if ((window->last_fullscreen_flags & FULLSCREEN_MASK) == (window->flags & FULLSCREEN_MASK)) { - return; + return 0; } } @@ -1127,6 +1225,8 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) if (setDisplayMode) { SDL_DisplayMode fullscreen_mode; + SDL_zero(fullscreen_mode); + if (SDL_GetWindowDisplayMode(other, &fullscreen_mode) == 0) { SDL_bool resized = SDL_TRUE; @@ -1136,9 +1236,13 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) /* only do the mode change if we want exclusive fullscreen */ if ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { - SDL_SetDisplayModeForDisplay(display, &fullscreen_mode); + if (SDL_SetDisplayModeForDisplay(display, &fullscreen_mode) < 0) { + return -1; + } } else { - SDL_SetDisplayModeForDisplay(display, NULL); + if (SDL_SetDisplayModeForDisplay(display, NULL) < 0) { + return -1; + } } if (_this->SetWindowFullscreen) { @@ -1157,7 +1261,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) SDL_RestoreMousePosition(other); window->last_fullscreen_flags = window->flags; - return; + return 0; } } } @@ -1177,6 +1281,7 @@ SDL_UpdateFullscreenMode(SDL_Window * window, SDL_bool fullscreen) SDL_RestoreMousePosition(window); window->last_fullscreen_flags = window->flags; + return 0; } #define CREATE_FLAGS \ @@ -1228,8 +1333,14 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags) h = 1; } + /* Some platforms blow up if the windows are too large. Raise it later? */ + if ((w > 16384) || (h > 16384)) { + SDL_SetError("Window is too large."); + return NULL; + } + /* Some platforms have OpenGL enabled by default */ -#if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ +#if (SDL_VIDEO_OPENGL && __MACOSX__) || __IPHONEOS__ || __ANDROID__ || __NACL__ flags |= SDL_WINDOW_OPENGL; #endif if (flags & SDL_WINDOW_OPENGL) { @@ -1294,6 +1405,18 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags) return NULL; } +#if __WINRT__ && (NTDDI_VERSION < NTDDI_WIN10) + /* HACK: WinRT 8.x apps can't choose whether or not they are fullscreen + or not. The user can choose this, via OS-provided UI, but this can't + be set programmatically. + + Just look at what SDL's WinRT video backend code detected with regards + to fullscreen (being active, or not), and figure out a return/error code + from that. + */ + flags = window->flags; +#endif + if (title) { SDL_SetWindowTitle(window, title); } @@ -1314,6 +1437,10 @@ SDL_CreateWindowFrom(const void *data) SDL_UninitializedVideo(); return NULL; } + if (!_this->CreateWindowFrom) { + SDL_Unsupported(); + return NULL; + } window = (SDL_Window *)SDL_calloc(1, sizeof(*window)); if (!window) { SDL_OutOfMemory(); @@ -1331,8 +1458,7 @@ SDL_CreateWindowFrom(const void *data) } _this->windows = window; - if (!_this->CreateWindowFrom || - _this->CreateWindowFrom(_this, window, data) < 0) { + if (_this->CreateWindowFrom(_this, window, data) < 0) { SDL_DestroyWindow(window); return NULL; } @@ -1342,8 +1468,7 @@ SDL_CreateWindowFrom(const void *data) int SDL_RecreateWindow(SDL_Window * window, Uint32 flags) { - char *title = window->title; - SDL_Surface *icon = window->icon; + SDL_bool loaded_opengl = SDL_FALSE; if ((flags & SDL_WINDOW_OPENGL) && !_this->GL_CreateContext) { return SDL_SetError("No OpenGL support in video driver"); @@ -1363,6 +1488,7 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags) if (window->surface) { window->surface->flags &= ~SDL_DONTFREE; SDL_FreeSurface(window->surface); + window->surface = NULL; } if (_this->DestroyWindowFramebuffer) { _this->DestroyWindowFramebuffer(_this, window); @@ -1376,34 +1502,42 @@ SDL_RecreateWindow(SDL_Window * window, Uint32 flags) if (SDL_GL_LoadLibrary(NULL) < 0) { return -1; } + loaded_opengl = SDL_TRUE; } else { SDL_GL_UnloadLibrary(); } } - window->title = NULL; - window->icon = NULL; window->flags = ((flags & CREATE_FLAGS) | SDL_WINDOW_HIDDEN); window->last_fullscreen_flags = window->flags; window->is_destroying = SDL_FALSE; if (_this->CreateWindow && !(flags & SDL_WINDOW_FOREIGN)) { if (_this->CreateWindow(_this, window) < 0) { - if (flags & SDL_WINDOW_OPENGL) { + if (loaded_opengl) { SDL_GL_UnloadLibrary(); + window->flags &= ~SDL_WINDOW_OPENGL; } return -1; } } - if (title) { - SDL_SetWindowTitle(window, title); - SDL_free(title); + if (flags & SDL_WINDOW_FOREIGN) { + window->flags |= SDL_WINDOW_FOREIGN; + } + + if (_this->SetWindowTitle && window->title) { + _this->SetWindowTitle(_this, window); + } + + if (_this->SetWindowIcon && window->icon) { + _this->SetWindowIcon(_this, window, window->icon); } - if (icon) { - SDL_SetWindowIcon(window, icon); - SDL_FreeSurface(icon); + + if (window->hit_test) { + _this->SetWindowHitTest(window, SDL_TRUE); } + SDL_FinishWindowCreation(window, flags); return 0; @@ -1444,17 +1578,14 @@ SDL_GetWindowFlags(SDL_Window * window) void SDL_SetWindowTitle(SDL_Window * window, const char *title) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (title == window->title) { return; } SDL_free(window->title); - if (title && *title) { - window->title = SDL_strdup(title); - } else { - window->title = NULL; - } + + window->title = SDL_strdup(title ? title : ""); if (_this->SetWindowTitle) { _this->SetWindowTitle(_this, window); @@ -1472,7 +1603,7 @@ SDL_GetWindowTitle(SDL_Window * window) void SDL_SetWindowIcon(SDL_Window * window, SDL_Surface * icon) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!icon) { return; @@ -1562,14 +1693,17 @@ SDL_GetWindowData(SDL_Window * window, const char *name) void SDL_SetWindowPosition(SDL_Window * window, int x, int y) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (SDL_WINDOWPOS_ISCENTERED(x) || SDL_WINDOWPOS_ISCENTERED(y)) { - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - int displayIndex; + int displayIndex = (x & 0xFFFF); SDL_Rect bounds; + if (displayIndex > _this->num_displays) { + displayIndex = 0; + } + + SDL_zero(bounds); - displayIndex = SDL_GetIndexOfDisplay(display); SDL_GetDisplayBounds(displayIndex, &bounds); if (SDL_WINDOWPOS_ISCENTERED(x)) { x = bounds.x + (bounds.w - window->w) / 2; @@ -1604,16 +1738,35 @@ SDL_SetWindowPosition(SDL_Window * window, int x, int y) void SDL_GetWindowPosition(SDL_Window * window, int *x, int *y) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); /* Fullscreen windows are always at their display's origin */ if (window->flags & SDL_WINDOW_FULLSCREEN) { + int displayIndex; + if (x) { *x = 0; } if (y) { *y = 0; } + + /* Find the window's monitor and update to the + monitor offset. */ + displayIndex = SDL_GetWindowDisplayIndex(window); + if (displayIndex >= 0) { + SDL_Rect bounds; + + SDL_zero(bounds); + + SDL_GetDisplayBounds(displayIndex, &bounds); + if (x) { + *x = bounds.x; + } + if (y) { + *y = bounds.y; + } + } } else { if (x) { *x = window->x; @@ -1627,7 +1780,7 @@ SDL_GetWindowPosition(SDL_Window * window, int *x, int *y) void SDL_SetWindowBordered(SDL_Window * window, SDL_bool bordered) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!(window->flags & SDL_WINDOW_FULLSCREEN)) { const int want = (bordered != SDL_FALSE); /* normalize the flag. */ const int have = ((window->flags & SDL_WINDOW_BORDERLESS) == 0); @@ -1645,7 +1798,7 @@ SDL_SetWindowBordered(SDL_Window * window, SDL_bool bordered) void SDL_SetWindowSize(SDL_Window * window, int w, int h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (w <= 0) { SDL_InvalidParamError("w"); return; @@ -1673,10 +1826,14 @@ SDL_SetWindowSize(SDL_Window * window, int w, int h) h = window->max_h; } - /* FIXME: Should this change fullscreen modes? */ + window->windowed.w = w; + window->windowed.h = h; + if (window->flags & SDL_WINDOW_FULLSCREEN) { - window->windowed.w = w; - window->windowed.h = h; + if (FULLSCREEN_VISIBLE(window) && (window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP) { + window->last_fullscreen_flags = 0; + SDL_UpdateFullscreenMode(window, SDL_TRUE); + } } else { window->w = w; window->h = h; @@ -1693,7 +1850,7 @@ SDL_SetWindowSize(SDL_Window * window, int w, int h) void SDL_GetWindowSize(SDL_Window * window, int *w, int *h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (w) { *w = window->w; } @@ -1705,7 +1862,7 @@ SDL_GetWindowSize(SDL_Window * window, int *w, int *h) void SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (min_w <= 0) { SDL_InvalidParamError("min_w"); return; @@ -1729,7 +1886,7 @@ SDL_SetWindowMinimumSize(SDL_Window * window, int min_w, int min_h) void SDL_GetWindowMinimumSize(SDL_Window * window, int *min_w, int *min_h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (min_w) { *min_w = window->min_w; } @@ -1741,7 +1898,7 @@ SDL_GetWindowMinimumSize(SDL_Window * window, int *min_w, int *min_h) void SDL_SetWindowMaximumSize(SDL_Window * window, int max_w, int max_h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (max_w <= 0) { SDL_InvalidParamError("max_w"); return; @@ -1765,7 +1922,7 @@ SDL_SetWindowMaximumSize(SDL_Window * window, int max_w, int max_h) void SDL_GetWindowMaximumSize(SDL_Window * window, int *max_w, int *max_h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (max_w) { *max_w = window->max_w; } @@ -1777,7 +1934,7 @@ SDL_GetWindowMaximumSize(SDL_Window * window, int *max_w, int *max_h) void SDL_ShowWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (window->flags & SDL_WINDOW_SHOWN) { return; @@ -1792,24 +1949,26 @@ SDL_ShowWindow(SDL_Window * window) void SDL_HideWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!(window->flags & SDL_WINDOW_SHOWN)) { return; } + window->is_hiding = SDL_TRUE; SDL_UpdateFullscreenMode(window, SDL_FALSE); if (_this->HideWindow) { _this->HideWindow(_this, window); } + window->is_hiding = SDL_FALSE; SDL_SendWindowEvent(window, SDL_WINDOWEVENT_HIDDEN, 0, 0); } void SDL_RaiseWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!(window->flags & SDL_WINDOW_SHOWN)) { return; @@ -1822,7 +1981,7 @@ SDL_RaiseWindow(SDL_Window * window) void SDL_MaximizeWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (window->flags & SDL_WINDOW_MAXIMIZED) { return; @@ -1838,7 +1997,7 @@ SDL_MaximizeWindow(SDL_Window * window) void SDL_MinimizeWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (window->flags & SDL_WINDOW_MINIMIZED) { return; @@ -1854,7 +2013,7 @@ SDL_MinimizeWindow(SDL_Window * window) void SDL_RestoreWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!(window->flags & (SDL_WINDOW_MAXIMIZED | SDL_WINDOW_MINIMIZED))) { return; @@ -1868,21 +2027,27 @@ SDL_RestoreWindow(SDL_Window * window) int SDL_SetWindowFullscreen(SDL_Window * window, Uint32 flags) { + Uint32 oldflags; CHECK_WINDOW_MAGIC(window, -1); flags &= FULLSCREEN_MASK; - if ( flags == (window->flags & FULLSCREEN_MASK) ) { + if (flags == (window->flags & FULLSCREEN_MASK)) { return 0; } /* clear the previous flags and OR in the new ones */ + oldflags = window->flags & FULLSCREEN_MASK; window->flags &= ~FULLSCREEN_MASK; window->flags |= flags; - SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)); - - return 0; + if (SDL_UpdateFullscreenMode(window, FULLSCREEN_VISIBLE(window)) == 0) { + return 0; + } + + window->flags &= ~FULLSCREEN_MASK; + window->flags |= oldflags; + return -1; } static SDL_Surface * @@ -1994,6 +2159,7 @@ SDL_SetWindowGammaRamp(SDL_Window * window, const Uint16 * red, if (SDL_GetWindowGammaRamp(window, NULL, NULL, NULL) < 0) { return -1; } + SDL_assert(window->gamma != NULL); } if (red) { @@ -2060,14 +2226,30 @@ SDL_GetWindowGammaRamp(SDL_Window * window, Uint16 * red, void SDL_UpdateWindowGrab(SDL_Window * window) { - if (_this->SetWindowGrab) { - SDL_bool grabbed; - if ((SDL_GetMouse()->relative_mode || (window->flags & SDL_WINDOW_INPUT_GRABBED)) && - (window->flags & SDL_WINDOW_INPUT_FOCUS)) { - grabbed = SDL_TRUE; - } else { - grabbed = SDL_FALSE; + SDL_Window *grabbed_window; + SDL_bool grabbed; + if ((SDL_GetMouse()->relative_mode || (window->flags & SDL_WINDOW_INPUT_GRABBED)) && + (window->flags & SDL_WINDOW_INPUT_FOCUS)) { + grabbed = SDL_TRUE; + } else { + grabbed = SDL_FALSE; + } + + grabbed_window = _this->grabbed_window; + if (grabbed) { + if (grabbed_window && (grabbed_window != window)) { + /* stealing a grab from another window! */ + grabbed_window->flags &= ~SDL_WINDOW_INPUT_GRABBED; + if (_this->SetWindowGrab) { + _this->SetWindowGrab(_this, grabbed_window, SDL_FALSE); + } } + _this->grabbed_window = window; + } else if (grabbed_window == window) { + _this->grabbed_window = NULL; /* ungrabbing. */ + } + + if (_this->SetWindowGrab) { _this->SetWindowGrab(_this, window, grabbed); } } @@ -2075,7 +2257,7 @@ SDL_UpdateWindowGrab(SDL_Window * window) void SDL_SetWindowGrab(SDL_Window * window, SDL_bool grabbed) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!!grabbed == !!(window->flags & SDL_WINDOW_INPUT_GRABBED)) { return; @@ -2092,8 +2274,15 @@ SDL_bool SDL_GetWindowGrab(SDL_Window * window) { CHECK_WINDOW_MAGIC(window, SDL_FALSE); + SDL_assert(!_this->grabbed_window || ((_this->grabbed_window->flags & SDL_WINDOW_INPUT_GRABBED) != 0)); + return window == _this->grabbed_window; +} - return ((window->flags & SDL_WINDOW_INPUT_GRABBED) != 0); +SDL_Window * +SDL_GetGrabbedWindow(void) +{ + SDL_assert(!_this->grabbed_window || ((_this->grabbed_window->flags & SDL_WINDOW_INPUT_GRABBED) != 0)); + return _this->grabbed_window; } void @@ -2124,7 +2313,13 @@ SDL_OnWindowMinimized(SDL_Window * window) void SDL_OnWindowRestored(SDL_Window * window) { - SDL_RaiseWindow(window); + /* + * FIXME: Is this fine to just remove this, or should it be preserved just + * for the fullscreen case? In principle it seems like just hiding/showing + * windows shouldn't affect the stacking order; maybe the right fix is to + * re-decouple OnWindowShown and OnWindowRestored. + */ + /*SDL_RaiseWindow(window);*/ if (FULLSCREEN_VISIBLE(window)) { SDL_UpdateFullscreenMode(window, SDL_TRUE); @@ -2202,6 +2397,8 @@ SDL_OnWindowFocusLost(SDL_Window * window) } } +/* !!! FIXME: is this different than SDL_GetKeyboardFocus()? + !!! FIXME: Also, SDL_GetKeyboardFocus() is O(1), this isn't. */ SDL_Window * SDL_GetFocusWindow(void) { @@ -2223,7 +2420,7 @@ SDL_DestroyWindow(SDL_Window * window) { SDL_VideoDisplay *display; - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); window->is_destroying = SDL_TRUE; @@ -2452,7 +2649,7 @@ SDL_GL_UnloadLibrary(void) static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr) { - return ( verstr && (SDL_atoi(verstr) >= 3) ); + return (verstr && (SDL_atoi(verstr) >= 3)); } SDL_bool @@ -2578,6 +2775,7 @@ SDL_GL_ResetAttributes() #endif _this->gl_config.flags = 0; _this->gl_config.framebuffer_srgb_capable = 0; + _this->gl_config.release_behavior = SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH; _this->gl_config.share_with_current_context = 0; } @@ -2659,23 +2857,23 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value) }; break; case SDL_GL_CONTEXT_FLAGS: - if( value & ~(SDL_GL_CONTEXT_DEBUG_FLAG | - SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG | - SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG | - SDL_GL_CONTEXT_RESET_ISOLATION_FLAG) ) { - retval = SDL_SetError("Unknown OpenGL context flag %d", value); - break; - } + if (value & ~(SDL_GL_CONTEXT_DEBUG_FLAG | + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG | + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG | + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG)) { + retval = SDL_SetError("Unknown OpenGL context flag %d", value); + break; + } _this->gl_config.flags = value; break; case SDL_GL_CONTEXT_PROFILE_MASK: - if( value != 0 && - value != SDL_GL_CONTEXT_PROFILE_CORE && - value != SDL_GL_CONTEXT_PROFILE_COMPATIBILITY && - value != SDL_GL_CONTEXT_PROFILE_ES ) { - retval = SDL_SetError("Unknown OpenGL context profile %d", value); - break; - } + if (value != 0 && + value != SDL_GL_CONTEXT_PROFILE_CORE && + value != SDL_GL_CONTEXT_PROFILE_COMPATIBILITY && + value != SDL_GL_CONTEXT_PROFILE_ES) { + retval = SDL_SetError("Unknown OpenGL context profile %d", value); + break; + } _this->gl_config.profile_mask = value; break; case SDL_GL_SHARE_WITH_CURRENT_CONTEXT: @@ -2684,6 +2882,9 @@ SDL_GL_SetAttribute(SDL_GLattr attr, int value) case SDL_GL_FRAMEBUFFER_SRGB_CAPABLE: _this->gl_config.framebuffer_srgb_capable = value; break; + case SDL_GL_CONTEXT_RELEASE_BEHAVIOR: + _this->gl_config.release_behavior = value; + break; default: retval = SDL_SetError("Unknown OpenGL attribute"); break; @@ -2698,35 +2899,49 @@ int SDL_GL_GetAttribute(SDL_GLattr attr, int *value) { #if SDL_VIDEO_OPENGL || SDL_VIDEO_OPENGL_ES || SDL_VIDEO_OPENGL_ES2 - void (APIENTRY * glGetIntegervFunc) (GLenum pname, GLint * params); - GLenum(APIENTRY * glGetErrorFunc) (void); + GLenum (APIENTRY *glGetErrorFunc) (void); GLenum attrib = 0; GLenum error = 0; - glGetIntegervFunc = SDL_GL_GetProcAddress("glGetIntegerv"); - if (!glGetIntegervFunc) { - return -1; - } - - glGetErrorFunc = SDL_GL_GetProcAddress("glGetError"); - if (!glGetErrorFunc) { - return -1; - } + /* + * Some queries in Core Profile desktop OpenGL 3+ contexts require + * glGetFramebufferAttachmentParameteriv instead of glGetIntegerv. Note that + * the enums we use for the former function don't exist in OpenGL ES 2, and + * the function itself doesn't exist prior to OpenGL 3 and OpenGL ES 2. + */ +#if SDL_VIDEO_OPENGL + const GLubyte *(APIENTRY *glGetStringFunc) (GLenum name); + void (APIENTRY *glGetFramebufferAttachmentParameterivFunc) (GLenum target, GLenum attachment, GLenum pname, GLint* params); + GLenum attachment = GL_BACK_LEFT; + GLenum attachmentattrib = 0; +#endif /* Clear value in any case */ *value = 0; switch (attr) { case SDL_GL_RED_SIZE: +#if SDL_VIDEO_OPENGL + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE; +#endif attrib = GL_RED_BITS; break; case SDL_GL_BLUE_SIZE: +#if SDL_VIDEO_OPENGL + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE; +#endif attrib = GL_BLUE_BITS; break; case SDL_GL_GREEN_SIZE: +#if SDL_VIDEO_OPENGL + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE; +#endif attrib = GL_GREEN_BITS; break; case SDL_GL_ALPHA_SIZE: +#if SDL_VIDEO_OPENGL + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE; +#endif attrib = GL_ALPHA_BITS; break; case SDL_GL_DOUBLEBUFFER: @@ -2741,9 +2956,17 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value) return 0; #endif case SDL_GL_DEPTH_SIZE: +#if SDL_VIDEO_OPENGL + attachment = GL_DEPTH; + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE; +#endif attrib = GL_DEPTH_BITS; break; case SDL_GL_STENCIL_SIZE: +#if SDL_VIDEO_OPENGL + attachment = GL_STENCIL; + attachmentattrib = GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE; +#endif attrib = GL_STENCIL_BITS; break; #if SDL_VIDEO_OPENGL @@ -2773,38 +2996,37 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value) return 0; #endif case SDL_GL_MULTISAMPLEBUFFERS: -#if SDL_VIDEO_OPENGL - attrib = GL_SAMPLE_BUFFERS_ARB; -#else attrib = GL_SAMPLE_BUFFERS; -#endif break; case SDL_GL_MULTISAMPLESAMPLES: + attrib = GL_SAMPLES; + break; + case SDL_GL_CONTEXT_RELEASE_BEHAVIOR: #if SDL_VIDEO_OPENGL - attrib = GL_SAMPLES_ARB; + attrib = GL_CONTEXT_RELEASE_BEHAVIOR; #else - attrib = GL_SAMPLES; + attrib = GL_CONTEXT_RELEASE_BEHAVIOR_KHR; #endif break; case SDL_GL_BUFFER_SIZE: { - GLint bits = 0; - GLint component; - - /* - * there doesn't seem to be a single flag in OpenGL - * for this! - */ - glGetIntegervFunc(GL_RED_BITS, &component); - bits += component; - glGetIntegervFunc(GL_GREEN_BITS, &component); - bits += component; - glGetIntegervFunc(GL_BLUE_BITS, &component); - bits += component; - glGetIntegervFunc(GL_ALPHA_BITS, &component); - bits += component; - - *value = bits; + int rsize = 0, gsize = 0, bsize = 0, asize = 0; + + /* There doesn't seem to be a single flag in OpenGL for this! */ + if (SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &rsize) < 0) { + return -1; + } + if (SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &gsize) < 0) { + return -1; + } + if (SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &bsize) < 0) { + return -1; + } + if (SDL_GL_GetAttribute(SDL_GL_ALPHA_SIZE, &asize) < 0) { + return -1; + } + + *value = rsize + gsize + bsize + asize; return 0; } case SDL_GL_ACCELERATED_VISUAL: @@ -2863,7 +3085,37 @@ SDL_GL_GetAttribute(SDL_GLattr attr, int *value) return SDL_SetError("Unknown OpenGL attribute"); } - glGetIntegervFunc(attrib, (GLint *) value); +#if SDL_VIDEO_OPENGL + glGetStringFunc = SDL_GL_GetProcAddress("glGetString"); + if (!glGetStringFunc) { + return SDL_SetError("Failed getting OpenGL glGetString entry point"); + } + + if (attachmentattrib && isAtLeastGL3((const char *) glGetStringFunc(GL_VERSION))) { + glGetFramebufferAttachmentParameterivFunc = SDL_GL_GetProcAddress("glGetFramebufferAttachmentParameteriv"); + + if (glGetFramebufferAttachmentParameterivFunc) { + glGetFramebufferAttachmentParameterivFunc(GL_FRAMEBUFFER, attachment, attachmentattrib, (GLint *) value); + } else { + return SDL_SetError("Failed getting OpenGL glGetFramebufferAttachmentParameteriv entry point"); + } + } else +#endif + { + void (APIENTRY *glGetIntegervFunc) (GLenum pname, GLint * params); + glGetIntegervFunc = SDL_GL_GetProcAddress("glGetIntegerv"); + if (glGetIntegervFunc) { + glGetIntegervFunc(attrib, (GLint *) value); + } else { + return SDL_SetError("Failed getting OpenGL glGetIntegerv entry point"); + } + } + + glGetErrorFunc = SDL_GL_GetProcAddress("glGetError"); + if (!glGetErrorFunc) { + return SDL_SetError("Failed getting OpenGL glGetError entry point"); + } + error = glGetErrorFunc(); if (error != GL_NO_ERROR) { if (error == GL_INVALID_ENUM) { @@ -2955,7 +3207,7 @@ SDL_GL_GetCurrentContext(void) void SDL_GL_GetDrawableSize(SDL_Window * window, int *w, int *h) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (_this->GL_GetDrawableSize) { _this->GL_GetDrawableSize(_this, window, w, h); @@ -2995,7 +3247,7 @@ SDL_GL_GetSwapInterval(void) void SDL_GL_SwapWindow(SDL_Window * window) { - CHECK_WINDOW_MAGIC(window, ); + CHECK_WINDOW_MAGIC(window,); if (!(window->flags & SDL_WINDOW_OPENGL)) { SDL_SetError("The specified window isn't an OpenGL window"); @@ -3129,11 +3381,13 @@ SDL_GetWindowWMInfo(SDL_Window * window, struct SDL_SysWMinfo *info) CHECK_WINDOW_MAGIC(window, SDL_FALSE); if (!info) { + SDL_InvalidParamError("info"); return SDL_FALSE; } info->subsystem = SDL_SYSWM_UNKNOWN; if (!_this->GetWindowWMInfo) { + SDL_Unsupported(); return SDL_FALSE; } return (_this->GetWindowWMInfo(_this, window, info)); @@ -3213,9 +3467,15 @@ SDL_IsScreenKeyboardShown(SDL_Window *window) return SDL_FALSE; } +#if SDL_VIDEO_DRIVER_ANDROID +#include "android/SDL_androidmessagebox.h" +#endif #if SDL_VIDEO_DRIVER_WINDOWS #include "windows/SDL_windowsmessagebox.h" #endif +#if SDL_VIDEO_DRIVER_WINRT +#include "winrt/SDL_winrtmessagebox.h" +#endif #if SDL_VIDEO_DRIVER_COCOA #include "cocoa/SDL_cocoamessagebox.h" #endif @@ -3226,7 +3486,8 @@ SDL_IsScreenKeyboardShown(SDL_Window *window) #include "x11/SDL_x11messagebox.h" #endif -static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype) +// This function will be unused if none of the above video drivers are present. +SDL_UNUSED static SDL_bool SDL_MessageboxValidForDriver(const SDL_MessageBoxData *messageboxdata, SDL_SYSWM_TYPE drivertype) { SDL_SysWMinfo info; SDL_Window *window = messageboxdata->window; @@ -3250,14 +3511,20 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) int retval = -1; SDL_bool relative_mode; int show_cursor_prev; + SDL_bool mouse_captured; + SDL_Window *current_window; if (!messageboxdata) { return SDL_InvalidParamError("messageboxdata"); } + current_window = SDL_GetKeyboardFocus(); + mouse_captured = current_window && ((SDL_GetWindowFlags(current_window) & SDL_WINDOW_MOUSE_CAPTURE) != 0); relative_mode = SDL_GetRelativeMouseMode(); + SDL_CaptureMouse(SDL_FALSE); SDL_SetRelativeMouseMode(SDL_FALSE); show_cursor_prev = SDL_ShowCursor(1); + SDL_ResetKeyboard(); if (!buttonid) { buttonid = &dummybutton; @@ -3268,6 +3535,12 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) } /* It's completely fine to call this function before video is initialized */ +#if SDL_VIDEO_DRIVER_ANDROID + if (retval == -1 && + Android_ShowMessageBox(messageboxdata, buttonid) == 0) { + retval = 0; + } +#endif #if SDL_VIDEO_DRIVER_WINDOWS if (retval == -1 && SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_WINDOWS) && @@ -3275,6 +3548,13 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) retval = 0; } #endif +#if SDL_VIDEO_DRIVER_WINRT + if (retval == -1 && + SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_WINRT) && + WINRT_ShowMessageBox(messageboxdata, buttonid) == 0) { + retval = 0; + } +#endif #if SDL_VIDEO_DRIVER_COCOA if (retval == -1 && SDL_MessageboxValidForDriver(messageboxdata, SDL_SYSWM_COCOA) && @@ -3300,6 +3580,13 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) SDL_SetError("No message system available"); } + if (current_window) { + SDL_RaiseWindow(current_window); + if (mouse_captured) { + SDL_CaptureMouse(SDL_TRUE); + } + } + SDL_ShowCursor(show_cursor_prev); SDL_SetRelativeMouseMode(relative_mode); @@ -3342,4 +3629,32 @@ SDL_ShouldAllowTopmost(void) return SDL_TRUE; } +int +SDL_SetWindowHitTest(SDL_Window * window, SDL_HitTest callback, void *userdata) +{ + CHECK_WINDOW_MAGIC(window, -1); + + if (!_this->SetWindowHitTest) { + return SDL_Unsupported(); + } else if (_this->SetWindowHitTest(window, callback != NULL) == -1) { + return -1; + } + + window->hit_test = callback; + window->hit_test_data = userdata; + + return 0; +} + +float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches) +{ + float den2 = hinches * hinches + vinches * vinches; + if ( den2 <= 0.0f ) { + return 0.0f; + } + + return (float)(SDL_sqrt((double)hpix * (double)hpix + (double)vpix * (double)vpix) / + SDL_sqrt((double)den2)); +} + /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidclipboard.c b/Engine/lib/sdl/src/video/android/SDL_androidclipboard.c index dcac2e701f..b996e7a409 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidclipboard.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidclipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/android/SDL_androidclipboard.h b/Engine/lib/sdl/src/video/android/SDL_androidclipboard.h index c1ab140cfa..a61045ae8f 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidclipboard.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/android/SDL_androidevents.c b/Engine/lib/sdl/src/video/android/SDL_androidevents.c index 164126cf70..326361af07 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidevents.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,18 +29,29 @@ #include "SDL_events.h" #include "SDL_androidwindow.h" + void android_egl_context_backup(); void android_egl_context_restore(); +#if SDL_AUDIO_DRIVER_ANDROID +void AndroidAUD_ResumeDevices(void); +void AndroidAUD_PauseDevices(void); +#else +static void AndroidAUD_ResumeDevices(void) {} +static void AndroidAUD_PauseDevices(void) {} +#endif + void android_egl_context_restore() { + SDL_Event event; SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata; if (SDL_GL_MakeCurrent(Android_Window, (SDL_GLContext) data->egl_context) < 0) { /* The context is no longer valid, create a new one */ - /* FIXME: Notify the user that the context changed and textures need to be re created */ data->egl_context = (EGLContext) SDL_GL_CreateContext(Android_Window); SDL_GL_MakeCurrent(Android_Window, (SDL_GLContext) data->egl_context); + event.type = SDL_RENDER_DEVICE_RESET; + SDL_PushEvent(&event); } } @@ -72,13 +83,14 @@ Android_PumpEvents(_THIS) if (isPaused && !isPausing) { /* Make sure this is the last thing we do before pausing */ android_egl_context_backup(); + AndroidAUD_PauseDevices(); if(SDL_SemWait(Android_ResumeSem) == 0) { #else if (isPaused) { if(SDL_SemTryWait(Android_ResumeSem) == 0) { #endif isPaused = 0; - + AndroidAUD_ResumeDevices(); /* Restore the GL Context from here, as this operation is thread dependent */ if (!SDL_HasEvent(SDL_QUIT)) { android_egl_context_restore(); @@ -101,6 +113,7 @@ Android_PumpEvents(_THIS) #else if(SDL_SemTryWait(Android_PauseSem) == 0) { android_egl_context_backup(); + AndroidAUD_PauseDevices(); isPaused = 1; } #endif diff --git a/Engine/lib/sdl/src/video/android/SDL_androidevents.h b/Engine/lib/sdl/src/video/android/SDL_androidevents.h index 547338d769..4a2230e205 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidevents.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/android/SDL_androidgl.c b/Engine/lib/sdl/src/video/android/SDL_androidgl.c index 1f933ce307..4cfe86357c 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidgl.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidgl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -41,9 +41,13 @@ SDL_EGL_MakeCurrent_impl(Android) void Android_GLES_SwapWindow(_THIS, SDL_Window * window) { - /* FIXME: These two functions were in the Java code, do we really need them? */ - _this->egl_data->eglWaitNative(EGL_CORE_NATIVE_ENGINE); - _this->egl_data->eglWaitGL(); + /* The following two calls existed in the original Java code + * If you happen to have a device that's affected by their removal, + * please report to Bugzilla. -- Gabriel + */ + + /*_this->egl_data->eglWaitNative(EGL_CORE_NATIVE_ENGINE); + _this->egl_data->eglWaitGL();*/ SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface); } diff --git a/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.c b/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.c index 5008cfde6c..dc8951ff99 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -253,8 +253,8 @@ static SDL_Scancode Android_Keycodes[] = { SDL_SCANCODE_CALCULATOR, /* AKEYCODE_CALCULATOR */ SDL_SCANCODE_LANG5, /* AKEYCODE_ZENKAKU_HANKAKU */ SDL_SCANCODE_UNKNOWN, /* AKEYCODE_EISU */ - SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MUHENKAN */ - SDL_SCANCODE_UNKNOWN, /* AKEYCODE_HENKAN */ + SDL_SCANCODE_INTERNATIONAL5, /* AKEYCODE_MUHENKAN */ + SDL_SCANCODE_INTERNATIONAL4, /* AKEYCODE_HENKAN */ SDL_SCANCODE_LANG3, /* AKEYCODE_KATAKANA_HIRAGANA */ SDL_SCANCODE_INTERNATIONAL3, /* AKEYCODE_YEN */ SDL_SCANCODE_UNKNOWN, /* AKEYCODE_RO */ @@ -263,6 +263,59 @@ static SDL_Scancode Android_Keycodes[] = { SDL_SCANCODE_BRIGHTNESSDOWN, /* AKEYCODE_BRIGHTNESS_DOWN */ SDL_SCANCODE_BRIGHTNESSUP, /* AKEYCODE_BRIGHTNESS_UP */ SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_AUDIO_TRACK */ + SDL_SCANCODE_SLEEP, /* AKEYCODE_SLEEP */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_WAKEUP */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_PAIRING */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_TOP_MENU */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_11 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_12 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_LAST_CHANNEL */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_DATA_SERVICE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_VOICE_ASSIST */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_RADIO_SERVICE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TELETEXT */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NUMBER_ENTRY */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_ANALOG */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TERRESTRIAL_DIGITAL */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_BS */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_CS */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_SATELLITE_SERVICE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_NETWORK */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ANTENNA_CABLE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_1 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_2 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_3 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_HDMI_4 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_1 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPOSITE_2 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_1 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_COMPONENT_2 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_INPUT_VGA_1 */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_UP */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_AUDIO_DESCRIPTION_MIX_DOWN */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_ZOOM_MODE */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_CONTENTS_MENU */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_MEDIA_CONTEXT_MENU */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_TV_TIMER_PROGRAMMING */ + SDL_SCANCODE_HELP, /* AKEYCODE_HELP */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_PREVIOUS */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_NEXT */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_IN */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_NAVIGATE_OUT */ + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_SKIP_FORWARD */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_SKIP_BACKWARD */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_STEP_FORWARD */ + SDL_SCANCODE_UNKNOWN, /* AKEYCODE_MEDIA_STEP_BACKWARD */ }; static SDL_Scancode diff --git a/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.h b/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.h index 041987aca5..ced9bc24e9 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidkeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.c b/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.c new file mode 100644 index 0000000000..61f67636a1 --- /dev/null +++ b/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.c @@ -0,0 +1,37 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_ANDROID + +#include "SDL_messagebox.h" + +int +Android_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ + int Android_JNI_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + + return Android_JNI_ShowMessageBox(messageboxdata, buttonid); +} + +#endif /* SDL_VIDEO_DRIVER_ANDROID */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.h b/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.h new file mode 100644 index 0000000000..3c680c62ff --- /dev/null +++ b/Engine/lib/sdl/src/video/android/SDL_androidmessagebox.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_ANDROID + +extern int Android_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +#endif /* SDL_VIDEO_DRIVER_ANDROID */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidmouse.c b/Engine/lib/sdl/src/video/android/SDL_androidmouse.c new file mode 100644 index 0000000000..3e9c0aff57 --- /dev/null +++ b/Engine/lib/sdl/src/video/android/SDL_androidmouse.c @@ -0,0 +1,84 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_ANDROID + +#include "SDL_androidmouse.h" + +#include "SDL_events.h" +#include "../../events/SDL_mouse_c.h" + +#include "../../core/android/SDL_android.h" + +#define ACTION_DOWN 0 +#define ACTION_UP 1 +#define ACTION_HOVER_MOVE 7 +#define ACTION_SCROLL 8 +#define BUTTON_PRIMARY 1 +#define BUTTON_SECONDARY 2 +#define BUTTON_TERTIARY 4 + +void Android_OnMouse( int androidButton, int action, float x, float y) { + static Uint8 SDLButton; + + if (!Android_Window) { + return; + } + + switch(action) { + case ACTION_DOWN: + // Determine which button originated the event, and store it for ACTION_UP + SDLButton = SDL_BUTTON_LEFT; + if (androidButton == BUTTON_SECONDARY) { + SDLButton = SDL_BUTTON_RIGHT; + } else if (androidButton == BUTTON_TERTIARY) { + SDLButton = SDL_BUTTON_MIDDLE; + } + SDL_SendMouseMotion(Android_Window, 0, 0, x, y); + SDL_SendMouseButton(Android_Window, 0, SDL_PRESSED, SDLButton); + break; + + case ACTION_UP: + // Android won't give us the button that originated the ACTION_DOWN event, so we'll + // assume it's the one we stored + SDL_SendMouseMotion(Android_Window, 0, 0, x, y); + SDL_SendMouseButton(Android_Window, 0, SDL_RELEASED, SDLButton); + break; + + case ACTION_HOVER_MOVE: + SDL_SendMouseMotion(Android_Window, 0, 0, x, y); + break; + + case ACTION_SCROLL: + SDL_SendMouseWheel(Android_Window, 0, x, y, SDL_MOUSEWHEEL_NORMAL); + break; + + default: + break; + } +} + +#endif /* SDL_VIDEO_DRIVER_ANDROID */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/android/SDL_androidmouse.h b/Engine/lib/sdl/src/video/android/SDL_androidmouse.h new file mode 100644 index 0000000000..9b68eed57c --- /dev/null +++ b/Engine/lib/sdl/src/video/android/SDL_androidmouse.h @@ -0,0 +1,31 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_androidmouse_h +#define _SDL_androidmouse_h + +#include "SDL_androidvideo.h" + +extern void Android_OnMouse( int button, int action, float x, float y); + +#endif /* _SDL_androidmouse_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidtouch.c b/Engine/lib/sdl/src/video/android/SDL_androidtouch.c index 7f11f437d0..a6e0b896a7 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidtouch.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidtouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,13 +24,12 @@ #include +#include "SDL_hints.h" #include "SDL_events.h" -#include "../../events/SDL_mouse_c.h" -#include "../../events/SDL_touch_c.h" #include "SDL_log.h" - #include "SDL_androidtouch.h" - +#include "../../events/SDL_mouse_c.h" +#include "../../events/SDL_touch_c.h" #include "../../core/android/SDL_android.h" #define ACTION_DOWN 0 @@ -51,11 +50,29 @@ static void Android_GetWindowCoordinates(float x, float y, *window_y = (int)(y * window_h); } +static volatile SDL_bool separate_mouse_and_touch = SDL_FALSE; + +static void +SeparateEventsHintWatcher(void *userdata, const char *name, + const char *oldValue, const char *newValue) +{ + jclass mActivityClass = Android_JNI_GetActivityClass(); + JNIEnv *env = Android_JNI_GetEnv(); + jfieldID fid = (*env)->GetStaticFieldID(env, mActivityClass, "mSeparateMouseAndTouch", "Z"); + + separate_mouse_and_touch = (newValue && (SDL_strcmp(newValue, "1") == 0)); + (*env)->SetStaticBooleanField(env, mActivityClass, fid, separate_mouse_and_touch ? JNI_TRUE : JNI_FALSE); +} + void Android_InitTouch(void) { int i; int* ids; - int number = Android_JNI_GetTouchDeviceIds(&ids); + const int number = Android_JNI_GetTouchDeviceIds(&ids); + + SDL_AddHintCallback(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, + SeparateEventsHintWatcher, NULL); + if (0 < number) { for (i = 0; i < number; ++i) { SDL_AddTouch((SDL_TouchID) ids[i], ""); /* no error handling */ @@ -64,6 +81,13 @@ void Android_InitTouch(void) } } +void Android_QuitTouch(void) +{ + SDL_DelHintCallback(SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH, + SeparateEventsHintWatcher, NULL); + separate_mouse_and_touch = SDL_FALSE; +} + void Android_OnTouch(int touch_device_id_in, int pointer_finger_id_in, int action, float x, float y, float p) { SDL_TouchID touchDeviceId = 0; @@ -84,37 +108,42 @@ void Android_OnTouch(int touch_device_id_in, int pointer_finger_id_in, int actio switch (action) { case ACTION_DOWN: /* Primary pointer down */ - Android_GetWindowCoordinates(x, y, &window_x, &window_y); - /* send moved event */ - SDL_SendMouseMotion(NULL, SDL_TOUCH_MOUSEID, 0, window_x, window_y); - /* send mouse down event */ - SDL_SendMouseButton(NULL, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); + if (!separate_mouse_and_touch) { + Android_GetWindowCoordinates(x, y, &window_x, &window_y); + /* send moved event */ + SDL_SendMouseMotion(Android_Window, SDL_TOUCH_MOUSEID, 0, window_x, window_y); + /* send mouse down event */ + SDL_SendMouseButton(Android_Window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); + } pointerFingerID = fingerId; case ACTION_POINTER_DOWN: /* Non primary pointer down */ SDL_SendTouch(touchDeviceId, fingerId, SDL_TRUE, x, y, p); break; - + case ACTION_MOVE: if (!pointerFingerID) { - Android_GetWindowCoordinates(x, y, &window_x, &window_y); - - /* send moved event */ - SDL_SendMouseMotion(NULL, SDL_TOUCH_MOUSEID, 0, window_x, window_y); + if (!separate_mouse_and_touch) { + Android_GetWindowCoordinates(x, y, &window_x, &window_y); + /* send moved event */ + SDL_SendMouseMotion(Android_Window, SDL_TOUCH_MOUSEID, 0, window_x, window_y); + } } SDL_SendTouchMotion(touchDeviceId, fingerId, x, y, p); break; - + case ACTION_UP: /* Primary pointer up */ - /* send mouse up */ + if (!separate_mouse_and_touch) { + /* send mouse up */ + SDL_SendMouseButton(Android_Window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); + } pointerFingerID = (SDL_FingerID) 0; - SDL_SendMouseButton(NULL, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); case ACTION_POINTER_UP: /* Non primary pointer up */ SDL_SendTouch(touchDeviceId, fingerId, SDL_FALSE, x, y, p); break; - + default: break; } diff --git a/Engine/lib/sdl/src/video/android/SDL_androidtouch.h b/Engine/lib/sdl/src/video/android/SDL_androidtouch.h index 81a0cb50e9..2ad096ce80 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidtouch.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidtouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,6 +23,7 @@ #include "SDL_androidvideo.h" extern void Android_InitTouch(void); +extern void Android_QuitTouch(void); extern void Android_OnTouch( int touch_device_id_in, int pointer_finger_id_in, int action, float x, float y, float p); /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidvideo.c b/Engine/lib/sdl/src/video/android/SDL_androidvideo.c index f1cf18552e..e14b96641c 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidvideo.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -64,6 +64,8 @@ extern int Android_GLES_LoadLibrary(_THIS, const char *path); int Android_ScreenWidth = 0; int Android_ScreenHeight = 0; Uint32 Android_ScreenFormat = SDL_PIXELFORMAT_UNKNOWN; +int Android_ScreenRate = 0; + SDL_sem *Android_PauseSem = NULL, *Android_ResumeSem = NULL; /* Currently only one window */ @@ -75,9 +77,16 @@ Android_Available(void) return 1; } +static void +Android_SuspendScreenSaver(_THIS) +{ + Android_JNI_SuspendScreenSaver(_this->suspend_screensaver); +} + static void Android_DeleteDevice(SDL_VideoDevice * device) { + SDL_free(device->driverdata); SDL_free(device); } @@ -111,6 +120,7 @@ Android_CreateDevice(int devindex) device->CreateWindow = Android_CreateWindow; device->SetWindowTitle = Android_SetWindowTitle; device->DestroyWindow = Android_DestroyWindow; + device->GetWindowWMInfo = Android_GetWindowWMInfo; device->free = Android_DeleteDevice; @@ -125,6 +135,9 @@ Android_CreateDevice(int devindex) device->GL_SwapWindow = Android_GLES_SwapWindow; device->GL_DeleteContext = Android_GLES_DeleteContext; + /* Screensaver */ + device->SuspendScreenSaver = Android_SuspendScreenSaver; + /* Text input */ device->StartTextInput = Android_StartTextInput; device->StopTextInput = Android_StopTextInput; @@ -156,7 +169,7 @@ Android_VideoInit(_THIS) mode.format = Android_ScreenFormat; mode.w = Android_ScreenWidth; mode.h = Android_ScreenHeight; - mode.refresh_rate = 0; + mode.refresh_rate = Android_ScreenRate; mode.driverdata = NULL; if (SDL_AddBasicVideoDisplay(&mode) < 0) { return -1; @@ -175,15 +188,17 @@ Android_VideoInit(_THIS) void Android_VideoQuit(_THIS) { + Android_QuitTouch(); } /* This function gets called before VideoInit() */ void -Android_SetScreenResolution(int width, int height, Uint32 format) +Android_SetScreenResolution(int width, int height, Uint32 format, float rate) { Android_ScreenWidth = width; Android_ScreenHeight = height; Android_ScreenFormat = format; + Android_ScreenRate = rate; if (Android_Window) { SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_RESIZED, width, height); diff --git a/Engine/lib/sdl/src/video/android/SDL_androidvideo.h b/Engine/lib/sdl/src/video/android/SDL_androidvideo.h index ccd5d7a16c..0f76a91b17 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidvideo.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,7 +28,7 @@ #include "../SDL_sysvideo.h" /* Called by the JNI layer when the screen changes size or format */ -extern void Android_SetScreenResolution(int width, int height, Uint32 format); +extern void Android_SetScreenResolution(int width, int height, Uint32 format, float rate); /* Private display data */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidwindow.c b/Engine/lib/sdl/src/video/android/SDL_androidwindow.c index acbb58206d..37a928faf0 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidwindow.c +++ b/Engine/lib/sdl/src/video/android/SDL_androidwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,6 +22,7 @@ #if SDL_VIDEO_DRIVER_ANDROID +#include "SDL_syswm.h" #include "../SDL_sysvideo.h" #include "../../events/SDL_keyboard_c.h" #include "../../events/SDL_mouse_c.h" @@ -106,7 +107,7 @@ Android_DestroyWindow(_THIS, SDL_Window * window) if (data->egl_surface != EGL_NO_SURFACE) { SDL_EGL_DestroySurface(_this, data->egl_surface); } - if(data->native_window) { + if (data->native_window) { ANativeWindow_release(data->native_window); } SDL_free(window->driverdata); @@ -115,6 +116,24 @@ Android_DestroyWindow(_THIS, SDL_Window * window) } } +SDL_bool +Android_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) +{ + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + + if (info->version.major == SDL_MAJOR_VERSION && + info->version.minor == SDL_MINOR_VERSION) { + info->subsystem = SDL_SYSWM_ANDROID; + info->info.android.window = data->native_window; + info->info.android.surface = data->egl_surface; + return SDL_TRUE; + } else { + SDL_SetError("Application not compiled with SDL %d.%d\n", + SDL_MAJOR_VERSION, SDL_MINOR_VERSION); + return SDL_FALSE; + } +} + #endif /* SDL_VIDEO_DRIVER_ANDROID */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/android/SDL_androidwindow.h b/Engine/lib/sdl/src/video/android/SDL_androidwindow.h index 8de223aa0d..3ac99f42be 100644 --- a/Engine/lib/sdl/src/video/android/SDL_androidwindow.h +++ b/Engine/lib/sdl/src/video/android/SDL_androidwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,7 @@ extern int Android_CreateWindow(_THIS, SDL_Window * window); extern void Android_SetWindowTitle(_THIS, SDL_Window * window); extern void Android_DestroyWindow(_THIS, SDL_Window * window); +extern SDL_bool Android_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo * info); typedef struct { diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.h index 0a5e0dc0db..871b394f53 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.m index 495c934c05..015d771065 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaclipboard.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,9 +28,7 @@ static NSString * GetTextFormat(_THIS) { - SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - - if (data->osversion >= 0x1060) { + if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5) { return NSPasteboardTypeString; } else { return NSStringPboardType; @@ -39,34 +37,28 @@ int Cocoa_SetClipboardText(_THIS, const char *text) +{ @autoreleasepool { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); - pool = [[NSAutoreleasePool alloc] init]; - pasteboard = [NSPasteboard generalPasteboard]; data->clipboard_count = [pasteboard declareTypes:[NSArray arrayWithObject:format] owner:nil]; [pasteboard setString:[NSString stringWithUTF8String:text] forType:format]; - [pool release]; - return 0; -} +}} char * Cocoa_GetClipboardText(_THIS) +{ @autoreleasepool { - NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSString *format = GetTextFormat(_this); NSString *available; char *text; - pool = [[NSAutoreleasePool alloc] init]; - pasteboard = [NSPasteboard generalPasteboard]; available = [pasteboard availableTypeFromArray: [NSArray arrayWithObject:format]]; if ([available isEqualToString:format]) { @@ -84,10 +76,8 @@ text = SDL_strdup(""); } - [pool release]; - return text; -} +}} SDL_bool Cocoa_HasClipboardText(_THIS) @@ -96,20 +86,18 @@ char *text = Cocoa_GetClipboardText(_this); if (text) { result = text[0] != '\0' ? SDL_TRUE : SDL_FALSE; - SDL_free(text); + SDL_free(text); } return result; } void Cocoa_CheckClipboardUpdate(struct SDL_VideoData * data) +{ @autoreleasepool { - NSAutoreleasePool *pool; NSPasteboard *pasteboard; NSInteger count; - pool = [[NSAutoreleasePool alloc] init]; - pasteboard = [NSPasteboard generalPasteboard]; count = [pasteboard changeCount]; if (count != data->clipboard_count) { @@ -118,9 +106,7 @@ } data->clipboard_count = count; } - - [pool release]; -} +}} #endif /* SDL_VIDEO_DRIVER_COCOA */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.h index 687cf647ec..ea40e53170 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,6 +25,7 @@ extern void Cocoa_RegisterApp(void); extern void Cocoa_PumpEvents(_THIS); +extern void Cocoa_SuspendScreenSaver(_THIS); #endif /* _SDL_cocoaevents_h */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.m index 438385c37d..e0da11fd4e 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaevents.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,15 +25,12 @@ #include "SDL_cocoavideo.h" #include "../../events/SDL_events_c.h" +#include "SDL_assert.h" +#include "SDL_hints.h" -#if !defined(UsrActivity) && defined(__LP64__) && !defined(__POWER__) -/* - * Workaround for a bug in the 10.5 SDK: By accident, OSService.h does - * not include Power.h at all when compiling in 64bit mode. This has - * been fixed in 10.6, but for 10.5, we manually define UsrActivity - * to ensure compilation works. - */ -#define UsrActivity 1 +/* This define was added in the 10.9 SDK. */ +#ifndef kIOPMAssertPreventUserIdleDisplaySleep +#define kIOPMAssertPreventUserIdleDisplaySleep kIOPMAssertionTypePreventUserIdleDisplaySleep #endif @interface SDLApplication : NSApplication @@ -57,7 +54,7 @@ @interface NSApplication(NSAppleMenu) - (void)setAppleMenu:(NSMenu *)menu; @end -@interface SDLAppDelegate : NSObject { +@interface SDLAppDelegate : NSObject { @public BOOL seenFirstActivate; } @@ -69,13 +66,20 @@ @implementation SDLAppDelegate : NSObject - (id)init { self = [super init]; - if (self) { + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + seenFirstActivate = NO; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(focusSomeWindow:) - name:NSApplicationDidBecomeActiveNotification - object:nil]; + + [center addObserver:self + selector:@selector(windowWillClose:) + name:NSWindowWillCloseNotification + object:nil]; + + [center addObserver:self + selector:@selector(focusSomeWindow:) + name:NSApplicationDidBecomeActiveNotification + object:nil]; } return self; @@ -83,16 +87,65 @@ - (id)init - (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + + [center removeObserver:self name:NSWindowWillCloseNotification object:nil]; + [center removeObserver:self name:NSApplicationDidBecomeActiveNotification object:nil]; + [super dealloc]; } +- (void)windowWillClose:(NSNotification *)notification; +{ + NSWindow *win = (NSWindow*)[notification object]; + + if (![win isKeyWindow]) { + return; + } + + /* HACK: Make the next window in the z-order key when the key window is + * closed. The custom event loop and/or windowing code we have seems to + * prevent the normal behavior: https://bugzilla.libsdl.org/show_bug.cgi?id=1825 + */ + + /* +[NSApp orderedWindows] never includes the 'About' window, but we still + * want to try its list first since the behavior in other apps is to only + * make the 'About' window key if no other windows are on-screen. + */ + for (NSWindow *window in [NSApp orderedWindows]) { + if (window != win && [window canBecomeKeyWindow]) { + if ([window respondsToSelector:@selector(isOnActiveSpace)]) { + if (![window isOnActiveSpace]) { + continue; + } + } + [window makeKeyAndOrderFront:self]; + return; + } + } + + /* If a window wasn't found above, iterate through all visible windows + * (including the 'About' window, if it's shown) and make the first one key. + * Note that +[NSWindow windowNumbersWithOptions:] was added in 10.6. + */ + if ([NSWindow respondsToSelector:@selector(windowNumbersWithOptions:)]) { + /* Get all visible windows in the active Space, in z-order. */ + for (NSNumber *num in [NSWindow windowNumbersWithOptions:0]) { + NSWindow *window = [NSApp windowWithWindowNumber:[num integerValue]]; + if (window && window != win && [window canBecomeKeyWindow]) { + [window makeKeyAndOrderFront:self]; + return; + } + } + } +} + - (void)focusSomeWindow:(NSNotification *)aNotification { /* HACK: Ignore the first call. The application gets a * applicationDidBecomeActive: a little bit after the first window is * created, and if we don't ignore it, a window that has been created with - * SDL_WINDOW_MINIZED will ~immediately be restored. + * SDL_WINDOW_MINIMIZED will ~immediately be restored. */ if (!seenFirstActivate) { seenFirstActivate = YES; @@ -100,15 +153,12 @@ - (void)focusSomeWindow:(NSNotification *)aNotification } SDL_VideoDevice *device = SDL_GetVideoDevice(); - if (device && device->windows) - { + if (device && device->windows) { SDL_Window *window = device->windows; int i; - for (i = 0; i < device->num_displays; ++i) - { + for (i = 0; i < device->num_displays; ++i) { SDL_Window *fullscreen_window = device->displays[i].fullscreen_window; - if (fullscreen_window) - { + if (fullscreen_window) { if (fullscreen_window->flags & SDL_WINDOW_MINIMIZED) { SDL_RestoreWindow(fullscreen_window); } @@ -139,11 +189,13 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam /* Determine the application name */ appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]; - if (!appName) + if (!appName) { appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; + } - if (![appName length]) + if (![appName length]) { appName = [[NSProcessInfo processInfo] processName]; + } return appName; } @@ -158,13 +210,19 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam NSMenu *windowMenu; NSMenu *viewMenu; NSMenuItem *menuItem; + NSMenu *mainMenu; if (NSApp == nil) { return; } - + + mainMenu = [[NSMenu alloc] init]; + /* Create the main menu bar */ - [NSApp setMainMenu:[[NSMenu alloc] init]]; + [NSApp setMainMenu:mainMenu]; + + [mainMenu release]; /* we're done with it, let NSApp own it. */ + mainMenu = nil; /* Create the application menu */ appName = GetApplicationName(); @@ -253,20 +311,29 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam void Cocoa_RegisterApp(void) +{ @autoreleasepool { /* This can get called more than once! Be careful what you initialize! */ - ProcessSerialNumber psn; - NSAutoreleasePool *pool; - - if (!GetCurrentProcess(&psn)) { - TransformProcessType(&psn, kProcessTransformToForegroundApplication); - SetFrontProcess(&psn); - } - pool = [[NSAutoreleasePool alloc] init]; if (NSApp == nil) { [SDLApplication sharedApplication]; + SDL_assert(NSApp != nil); + const char *hint = SDL_GetHint(SDL_HINT_MAC_BACKGROUND_APP); + if (!hint || *hint == '0') { +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 + if ([NSApp respondsToSelector:@selector(setActivationPolicy:)]) { +#endif + [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; +#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6 + } else { + ProcessSerialNumber psn = {0, kCurrentProcess}; + TransformProcessType(&psn, kProcessTransformToForegroundApplication); + } +#endif + [NSApp activateIgnoringOtherApps:YES]; + } + if ([NSApp mainMenu] == nil) { CreateApplicationMenus(); } @@ -274,9 +341,10 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam NSDictionary *appDefaults = [[NSDictionary alloc] initWithObjectsAndKeys: [NSNumber numberWithBool:NO], @"AppleMomentumScrollSupported", [NSNumber numberWithBool:NO], @"ApplePressAndHoldEnabled", + [NSNumber numberWithBool:YES], @"ApplePersistenceIgnoreState", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults]; - + [appDefaults release]; } if (NSApp && !appDelegate) { appDelegate = [[SDLAppDelegate alloc] init]; @@ -285,22 +353,20 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam * termination into SDL_Quit, and we can't handle application:openFile: */ if (![NSApp delegate]) { - [NSApp setDelegate:appDelegate]; + [(NSApplication *)NSApp setDelegate:appDelegate]; } else { appDelegate->seenFirstActivate = YES; } } - [pool release]; -} +}} void Cocoa_PumpEvents(_THIS) +{ @autoreleasepool { - NSAutoreleasePool *pool; - /* Update activity every 30 seconds to prevent screensaver */ - if (_this->suspend_screensaver) { - SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; + SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; + if (_this->suspend_screensaver && !data->screensaver_use_iopm) { Uint32 now = SDL_GetTicks(); if (!data->screensaver_activity || SDL_TICKS_PASSED(now, data->screensaver_activity + 30000)) { @@ -309,7 +375,6 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam } } - pool = [[NSAutoreleasePool alloc] init]; for ( ; ; ) { NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES ]; if ( event == nil ) { @@ -341,8 +406,36 @@ - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filenam /* Pass through to NSApp to make sure everything stays in sync */ [NSApp sendEvent:event]; } - [pool release]; -} +}} + +void +Cocoa_SuspendScreenSaver(_THIS) +{ @autoreleasepool +{ + SDL_VideoData *data = (SDL_VideoData *)_this->driverdata; + + if (!data->screensaver_use_iopm) { + return; + } + + if (data->screensaver_assertion) { + IOPMAssertionRelease(data->screensaver_assertion); + data->screensaver_assertion = 0; + } + + if (_this->suspend_screensaver) { + /* FIXME: this should ideally describe the real reason why the game + * called SDL_DisableScreenSaver. Note that the name is only meant to be + * seen by OS X power users. there's an additional optional human-readable + * (localized) reason parameter which we don't set. + */ + NSString *name = [GetApplicationName() stringByAppendingString:@" using SDL_DisableScreenSaver"]; + IOPMAssertionCreateWithDescription(kIOPMAssertPreventUserIdleDisplaySleep, + (CFStringRef) name, + NULL, NULL, NULL, 0, NULL, + &data->screensaver_assertion); + } +}} #endif /* SDL_VIDEO_DRIVER_COCOA */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.h index a85f9b7b08..4f9da0185c 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.m index 85bf9a0677..7f1d2308f3 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoakeyboard.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,6 +24,7 @@ #include "SDL_cocoavideo.h" +#include "../../events/SDL_events_c.h" #include "../../events/SDL_keyboard_c.h" #include "../../events/scancodes_darwin.h" @@ -32,66 +33,51 @@ /*#define DEBUG_IME NSLog */ #define DEBUG_IME(...) -#ifndef NX_DEVICERCTLKEYMASK - #define NX_DEVICELCTLKEYMASK 0x00000001 -#endif -#ifndef NX_DEVICELSHIFTKEYMASK - #define NX_DEVICELSHIFTKEYMASK 0x00000002 -#endif -#ifndef NX_DEVICERSHIFTKEYMASK - #define NX_DEVICERSHIFTKEYMASK 0x00000004 -#endif -#ifndef NX_DEVICELCMDKEYMASK - #define NX_DEVICELCMDKEYMASK 0x00000008 -#endif -#ifndef NX_DEVICERCMDKEYMASK - #define NX_DEVICERCMDKEYMASK 0x00000010 -#endif -#ifndef NX_DEVICELALTKEYMASK - #define NX_DEVICELALTKEYMASK 0x00000020 -#endif -#ifndef NX_DEVICERALTKEYMASK - #define NX_DEVICERALTKEYMASK 0x00000040 -#endif -#ifndef NX_DEVICERCTLKEYMASK - #define NX_DEVICERCTLKEYMASK 0x00002000 -#endif - -@interface SDLTranslatorResponder : NSView -{ +@interface SDLTranslatorResponder : NSView { NSString *_markedText; NSRange _markedRange; NSRange _selectedRange; SDL_Rect _inputRect; } -- (void) doCommandBySelector:(SEL)myselector; -- (void) setInputRect:(SDL_Rect *) rect; +- (void)doCommandBySelector:(SEL)myselector; +- (void)setInputRect:(SDL_Rect *)rect; @end @implementation SDLTranslatorResponder -- (void) setInputRect:(SDL_Rect *) rect +- (void)setInputRect:(SDL_Rect *)rect { _inputRect = *rect; } -- (void) insertText:(id) aString +- (void)insertText:(id)aString replacementRange:(NSRange)replacementRange { + /* TODO: Make use of replacementRange? */ + const char *str; DEBUG_IME(@"insertText: %@", aString); /* Could be NSString or NSAttributedString, so we have * to test and convert it before return as SDL event */ - if ([aString isKindOfClass: [NSAttributedString class]]) + if ([aString isKindOfClass: [NSAttributedString class]]) { str = [[aString string] UTF8String]; - else + } else { str = [aString UTF8String]; + } SDL_SendKeyboardText(str); } -- (void) doCommandBySelector:(SEL) myselector +- (void)insertText:(id)insertString +{ + /* This method is part of NSTextInput and not NSTextInputClient, but + * apparently it still might be called in OS X 10.5 and can cause beeps if + * the implementation is missing: http://crbug.com/47890 */ + [self insertText:insertString replacementRange:NSMakeRange(0, 0)]; +} + +- (void)doCommandBySelector:(SEL)myselector { /* No need to do anything since we are not using Cocoa selectors to handle special keys, instead we use SDL @@ -99,50 +85,48 @@ - (void) doCommandBySelector:(SEL) myselector */ } -- (BOOL) hasMarkedText +- (BOOL)hasMarkedText { return _markedText != nil; } -- (NSRange) markedRange +- (NSRange)markedRange { return _markedRange; } -- (NSRange) selectedRange +- (NSRange)selectedRange { return _selectedRange; } -- (void) setMarkedText:(id) aString - selectedRange:(NSRange) selRange +- (void)setMarkedText:(id)aString selectedRange:(NSRange)selectedRange replacementRange:(NSRange)replacementRange; { - if ([aString isKindOfClass: [NSAttributedString class]]) + if ([aString isKindOfClass: [NSAttributedString class]]) { aString = [aString string]; + } - if ([aString length] == 0) - { + if ([aString length] == 0) { [self unmarkText]; return; } - if (_markedText != aString) - { + if (_markedText != aString) { [_markedText release]; _markedText = [aString retain]; } - _selectedRange = selRange; + _selectedRange = selectedRange; _markedRange = NSMakeRange(0, [aString length]); SDL_SendEditingText([aString UTF8String], - selRange.location, selRange.length); + selectedRange.location, selectedRange.length); DEBUG_IME(@"setMarkedText: %@, (%d, %d)", _markedText, selRange.location, selRange.length); } -- (void) unmarkText +- (void)unmarkText { [_markedText release]; _markedText = nil; @@ -150,29 +134,38 @@ - (void) unmarkText SDL_SendEditingText("", 0, 0); } -- (NSRect) firstRectForCharacterRange: (NSRange) theRange +- (NSRect)firstRectForCharacterRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange; { NSWindow *window = [self window]; - NSRect contentRect = [window contentRectForFrameRect: [window frame]]; + NSRect contentRect = [window contentRectForFrameRect:[window frame]]; float windowHeight = contentRect.size.height; NSRect rect = NSMakeRect(_inputRect.x, windowHeight - _inputRect.y - _inputRect.h, _inputRect.w, _inputRect.h); + if (actualRange) { + *actualRange = aRange; + } + DEBUG_IME(@"firstRectForCharacterRange: (%d, %d): windowHeight = %g, rect = %@", - theRange.location, theRange.length, windowHeight, + aRange.location, aRange.length, windowHeight, NSStringFromRect(rect)); - rect.origin = [[self window] convertBaseToScreen: rect.origin]; + + if ([[self window] respondsToSelector:@selector(convertRectToScreen:)]) { + rect = [[self window] convertRectToScreen:rect]; + } else { + rect.origin = [[self window] convertBaseToScreen:rect.origin]; + } return rect; } -- (NSAttributedString *) attributedSubstringFromRange: (NSRange) theRange +- (NSAttributedString *)attributedSubstringForProposedRange:(NSRange)aRange actualRange:(NSRangePointer)actualRange; { - DEBUG_IME(@"attributedSubstringFromRange: (%d, %d)", theRange.location, theRange.length); + DEBUG_IME(@"attributedSubstringFromRange: (%d, %d)", aRange.location, aRange.length); return nil; } -- (NSInteger) conversationIdentifier +- (NSInteger)conversationIdentifier { return (NSInteger) self; } @@ -180,7 +173,7 @@ - (NSInteger) conversationIdentifier /* This method returns the index for character that is * nearest to thePoint. thPoint is in screen coordinate system. */ -- (NSUInteger) characterIndexForPoint:(NSPoint) thePoint +- (NSUInteger)characterIndexForPoint:(NSPoint)thePoint { DEBUG_IME(@"characterIndexForPoint: (%g, %g)", thePoint.x, thePoint.y); return 0; @@ -191,7 +184,7 @@ - (NSUInteger) characterIndexForPoint:(NSPoint) thePoint * NSInputServer examines the return value of this * method & constructs appropriate attributed string. */ -- (NSArray *) validAttributesForMarkedText +- (NSArray *)validAttributesForMarkedText { return [NSArray array]; } @@ -424,7 +417,7 @@ - (NSArray *) validAttributesForMarkedText } static void -UpdateKeymap(SDL_VideoData *data) +UpdateKeymap(SDL_VideoData *data, SDL_bool send_event) { TISInputSourceRef key_layout; const void *chr_data; @@ -443,10 +436,11 @@ - (NSArray *) validAttributesForMarkedText /* Try Unicode data first */ CFDataRef uchrDataRef = TISGetInputSourceProperty(key_layout, kTISPropertyUnicodeKeyLayoutData); - if (uchrDataRef) + if (uchrDataRef) { chr_data = CFDataGetBytePtr(uchrDataRef); - else + } else { goto cleanup; + } if (chr_data) { UInt32 keyboard_type = LMGetKbdType(); @@ -470,14 +464,18 @@ - (NSArray *) validAttributesForMarkedText 0, keyboard_type, kUCKeyTranslateNoDeadKeysMask, &dead_key_state, 8, &len, s); - if (err != noErr) + if (err != noErr) { continue; + } if (len > 0 && s[0] != 0x10) { keymap[scancode] = s[0]; } } SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES); + if (send_event) { + SDL_SendKeymapChangedEvent(); + } return; } @@ -490,7 +488,7 @@ - (NSArray *) validAttributesForMarkedText { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - UpdateKeymap(data); + UpdateKeymap(data, SDL_FALSE); /* Set our own names for the platform-dependent but layout-independent keys */ /* This key is NumLock on the MacBook keyboard. :) */ @@ -499,17 +497,24 @@ - (NSArray *) validAttributesForMarkedText SDL_SetScancodeName(SDL_SCANCODE_LGUI, "Left Command"); SDL_SetScancodeName(SDL_SCANCODE_RALT, "Right Option"); SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Command"); + + /* On pre-10.6, you might have the initial capslock key state wrong. */ + if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_6) { + data->modifierFlags = [NSEvent modifierFlags]; + SDL_ToggleModState(KMOD_CAPS, (data->modifierFlags & NSAlphaShiftKeyMask) != 0); + } } void Cocoa_StartTextInput(_THIS) +{ @autoreleasepool { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_Window *window = SDL_GetKeyboardFocus(); NSWindow *nswindow = nil; - if (window) + if (window) { nswindow = ((SDL_WindowData*)window->driverdata)->nswindow; + } NSView *parentView = [nswindow contentView]; @@ -523,30 +528,26 @@ - (NSArray *) validAttributesForMarkedText [[SDLTranslatorResponder alloc] initWithFrame: NSMakeRect(0.0, 0.0, 0.0, 0.0)]; } - if (![[data->fieldEdit superview] isEqual: parentView]) - { + if (![[data->fieldEdit superview] isEqual:parentView]) { /* DEBUG_IME(@"add fieldEdit to window contentView"); */ [data->fieldEdit removeFromSuperview]; [parentView addSubview: data->fieldEdit]; [nswindow makeFirstResponder: data->fieldEdit]; } - - [pool release]; -} +}} void Cocoa_StopTextInput(_THIS) +{ @autoreleasepool { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; if (data && data->fieldEdit) { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; [data->fieldEdit removeFromSuperview]; [data->fieldEdit release]; data->fieldEdit = nil; - [pool release]; } -} +}} void Cocoa_SetTextInputRect(_THIS, SDL_Rect *rect) @@ -554,17 +555,21 @@ - (NSArray *) validAttributesForMarkedText SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; if (!rect) { - SDL_InvalidParamError("rect"); - return; + SDL_InvalidParamError("rect"); + return; } - [data->fieldEdit setInputRect: rect]; + [data->fieldEdit setInputRect:rect]; } void Cocoa_HandleKeyEvent(_THIS, NSEvent *event) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + if (!data) { + return; /* can happen when returning from fullscreen Space on shutdown */ + } + unsigned short scancode = [event keyCode]; SDL_Scancode code; #if 0 @@ -575,10 +580,10 @@ - (NSArray *) validAttributesForMarkedText /* see comments in SDL_cocoakeys.h */ scancode = 60 - scancode; } + if (scancode < SDL_arraysize(darwin_scancode_table)) { code = darwin_scancode_table[scancode]; - } - else { + } else { /* Hmm, does this ever happen? If so, need to extend the keymap... */ code = SDL_SCANCODE_UNKNOWN; } @@ -587,7 +592,7 @@ - (NSArray *) validAttributesForMarkedText case NSKeyDown: if (![event isARepeat]) { /* See if we need to rebuild the keyboard layout */ - UpdateKeymap(data); + UpdateKeymap(data, SDL_TRUE); } SDL_SendKeyboardKey(SDL_PRESSED, code); diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.h index ff468a881d..d1ca7882e7 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.m index 730d952eed..ed59e728c6 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamessagebox.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,13 +22,6 @@ #if SDL_VIDEO_DRIVER_COCOA -#if defined(__APPLE__) && defined(__POWERPC__) && !defined(__APPLE_ALTIVEC__) -#include -#undef bool -#undef vector -#undef pixel -#endif - #include "SDL_events.h" #include "SDL_timer.h" #include "SDL_messagebox.h" @@ -86,11 +79,10 @@ - (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextIn /* Display a Cocoa message box */ int Cocoa_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ @autoreleasepool { Cocoa_RegisterApp(); - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSAlert* alert = [[[NSAlert alloc] init] autorelease]; if (messageboxdata->flags & SDL_MESSAGEBOX_ERROR) { @@ -125,20 +117,15 @@ - (void) alertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode contextIn int returnValue = 0; NSInteger clicked = presenter->clicked; - if (clicked >= NSAlertFirstButtonReturn) - { + if (clicked >= NSAlertFirstButtonReturn) { clicked -= NSAlertFirstButtonReturn; *buttonid = buttons[clicked].buttonid; + } else { + returnValue = SDL_SetError("Did not get a valid `clicked button' id: %ld", (long)clicked); } - else - { - returnValue = SDL_SetError("Did not get a valid `clicked button' id: %d", clicked); - } - - [pool release]; return returnValue; -} +}} #endif /* SDL_VIDEO_DRIVER_COCOA */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.h index 4f8e863247..a0a29f5010 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.m index f41c349378..7d98264a72 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamodes.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -27,6 +27,10 @@ /* We need this for IODisplayCreateInfoDictionary and kIODisplayOnlyPreferredName */ #include +/* We need this for CVDisplayLinkGetNominalOutputVideoRefreshPeriod */ +#include +#include + /* we need this for ShowMenuBar() and HideMenuBar(). */ #include @@ -43,10 +47,11 @@ * we can just simply do without it on newer OSes... */ #if (MAC_OS_X_VERSION_MIN_REQUIRED < 1070) && !defined(__LP64__) - if (show) + if (show) { ShowMenuBar(); - else + } else { HideMenuBar(); + } #endif } @@ -60,12 +65,12 @@ #endif static BOOL -IS_SNOW_LEOPARD_OR_LATER(_THIS) +IS_SNOW_LEOPARD_OR_LATER() { #if FORCE_OLD_API return NO; #else - return ((((SDL_VideoData *) _this->driverdata))->osversion >= 0x1060); + return floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_5; #endif } @@ -113,7 +118,7 @@ } static SDL_bool -GetDisplayMode(_THIS, const void *moderef, SDL_DisplayMode *mode) +GetDisplayMode(_THIS, const void *moderef, CVDisplayLinkRef link, SDL_DisplayMode *mode) { SDL_DisplayModeData *data; long width = 0; @@ -127,12 +132,12 @@ } data->moderef = moderef; - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { CGDisplayModeRef vidmode = (CGDisplayModeRef) moderef; CFStringRef fmt = CGDisplayModeCopyPixelEncoding(vidmode); width = (long) CGDisplayModeGetWidth(vidmode); height = (long) CGDisplayModeGetHeight(vidmode); - refreshRate = (long) CGDisplayModeGetRefreshRate(vidmode); + refreshRate = (long) (CGDisplayModeGetRefreshRate(vidmode) + 0.5); if (CFStringCompare(fmt, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { @@ -140,6 +145,9 @@ } else if (CFStringCompare(fmt, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) { bpp = 16; + } else if (CFStringCompare(fmt, CFSTR(kIO30BitDirectPixels), + kCFCompareCaseInsensitive) == kCFCompareEqualTo) { + bpp = 30; } else { bpp = 0; /* ignore 8-bit and such for now. */ } @@ -148,8 +156,9 @@ } #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - if (!IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (!IS_SNOW_LEOPARD_OR_LATER()) { CFNumberRef number; + double refresh; CFDictionaryRef vidmode = (CFDictionaryRef) moderef; number = CFDictionaryGetValue(vidmode, kCGDisplayWidth); CFNumberGetValue(number, kCFNumberLongType, &width); @@ -158,20 +167,33 @@ number = CFDictionaryGetValue(vidmode, kCGDisplayBitsPerPixel); CFNumberGetValue(number, kCFNumberLongType, &bpp); number = CFDictionaryGetValue(vidmode, kCGDisplayRefreshRate); - CFNumberGetValue(number, kCFNumberLongType, &refreshRate); + CFNumberGetValue(number, kCFNumberDoubleType, &refresh); + refreshRate = (long) (refresh + 0.5); } #endif + /* CGDisplayModeGetRefreshRate returns 0 for many non-CRT displays. */ + if (refreshRate == 0 && link != NULL) { + CVTime time = CVDisplayLinkGetNominalOutputVideoRefreshPeriod(link); + if ((time.flags & kCVTimeIsIndefinite) == 0 && time.timeValue != 0) { + refreshRate = (long) ((time.timeScale / (double) time.timeValue) + 0.5); + } + } + mode->format = SDL_PIXELFORMAT_UNKNOWN; switch (bpp) { case 16: mode->format = SDL_PIXELFORMAT_ARGB1555; break; + case 30: + mode->format = SDL_PIXELFORMAT_ARGB2101010; + break; case 32: mode->format = SDL_PIXELFORMAT_ARGB8888; break; case 8: /* We don't support palettized modes now */ default: /* Totally unrecognizable bit depth. */ + SDL_free(data); return SDL_FALSE; } mode->w = width; @@ -184,7 +206,7 @@ static void Cocoa_ReleaseDisplayMode(_THIS, const void *moderef) { - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { CGDisplayModeRelease((CGDisplayModeRef) moderef); /* NULL is ok */ } } @@ -192,7 +214,7 @@ static void Cocoa_ReleaseDisplayModeList(_THIS, CFArrayRef modelist) { - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { CFRelease(modelist); /* NULL is ok */ } } @@ -200,21 +222,21 @@ static const char * Cocoa_GetDisplayName(CGDirectDisplayID displayID) { - NSDictionary *deviceInfo = (NSDictionary *)IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName); - NSDictionary *localizedNames = [deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]]; + CFDictionaryRef deviceInfo = IODisplayCreateInfoDictionary(CGDisplayIOServicePort(displayID), kIODisplayOnlyPreferredName); + NSDictionary *localizedNames = [(NSDictionary *)deviceInfo objectForKey:[NSString stringWithUTF8String:kDisplayProductName]]; const char* displayName = NULL; if ([localizedNames count] > 0) { displayName = SDL_strdup([[localizedNames objectForKey:[[localizedNames allKeys] objectAtIndex:0]] UTF8String]); } - [deviceInfo release]; + CFRelease(deviceInfo); return displayName; } void Cocoa_InitModes(_THIS) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; CGDisplayErr result; CGDirectDisplayID *displays; CGDisplayCount numDisplays; @@ -223,7 +245,6 @@ result = CGGetOnlineDisplayList(0, NULL, &numDisplays); if (result != kCGErrorSuccess) { CG_SetError("CGGetOnlineDisplayList()", result); - [pool release]; return; } displays = SDL_stack_alloc(CGDirectDisplayID, numDisplays); @@ -231,7 +252,6 @@ if (result != kCGErrorSuccess) { CG_SetError("CGGetOnlineDisplayList()", result); SDL_stack_free(displays); - [pool release]; return; } @@ -242,6 +262,7 @@ SDL_DisplayData *displaydata; SDL_DisplayMode mode; const void *moderef = NULL; + CVDisplayLinkRef link = NULL; if (pass == 0) { if (!CGDisplayIsMain(displays[i])) { @@ -257,12 +278,12 @@ continue; } - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { moderef = CGDisplayCopyDisplayMode(displays[i]); } #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - if (!IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (!IS_SNOW_LEOPARD_OR_LATER()) { moderef = CGDisplayCurrentMode(displays[i]); } #endif @@ -278,16 +299,21 @@ } displaydata->display = displays[i]; + CVDisplayLinkCreateWithCGDisplay(displays[i], &link); + SDL_zero(display); /* this returns a stddup'ed string */ display.name = (char *)Cocoa_GetDisplayName(displays[i]); - if (!GetDisplayMode (_this, moderef, &mode)) { + if (!GetDisplayMode(_this, moderef, link, &mode)) { + CVDisplayLinkRelease(link); Cocoa_ReleaseDisplayMode(_this, moderef); SDL_free(display.name); SDL_free(displaydata); continue; } + CVDisplayLinkRelease(link); + display.desktop_mode = mode; display.current_mode = mode; display.driverdata = displaydata; @@ -296,8 +322,7 @@ } } SDL_stack_free(displays); - [pool release]; -} +}} int Cocoa_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect) @@ -319,31 +344,35 @@ SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; CFArrayRef modes = NULL; - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { modes = CGDisplayCopyAllDisplayModes(data->display, NULL); } #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - if (!IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (!IS_SNOW_LEOPARD_OR_LATER()) { modes = CGDisplayAvailableModes(data->display); } #endif if (modes) { + CVDisplayLinkRef link = NULL; const CFIndex count = CFArrayGetCount(modes); CFIndex i; + CVDisplayLinkCreateWithCGDisplay(data->display, &link); + for (i = 0; i < count; i++) { const void *moderef = CFArrayGetValueAtIndex(modes, i); SDL_DisplayMode mode; - if (GetDisplayMode(_this, moderef, &mode)) { - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (GetDisplayMode(_this, moderef, link, &mode)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { CGDisplayModeRetain((CGDisplayModeRef) moderef); } SDL_AddDisplayMode(display, &mode); } } + CVDisplayLinkRelease(link); Cocoa_ReleaseDisplayModeList(_this, modes); } } @@ -351,12 +380,12 @@ static CGError Cocoa_SwitchMode(_THIS, CGDirectDisplayID display, const void *mode) { - if (IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (IS_SNOW_LEOPARD_OR_LATER()) { return CGDisplaySetDisplayMode(display, (CGDisplayModeRef) mode, NULL); } #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 - if (!IS_SNOW_LEOPARD_OR_LATER(_this)) { + if (!IS_SNOW_LEOPARD_OR_LATER()) { return CGDisplaySwitchToMode(display, (CFDictionaryRef) mode); } #endif diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.h index 336b840442..4f60c8372b 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.m index f5b54ed38b..c768331233 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamouse.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -66,8 +66,8 @@ + (NSCursor *)invisibleCursor static SDL_Cursor * Cocoa_CreateDefaultCursor() +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSCursor *nscursor; SDL_Cursor *cursor = NULL; @@ -81,15 +81,13 @@ + (NSCursor *)invisibleCursor } } - [pool release]; - return cursor; -} +}} static SDL_Cursor * Cocoa_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSImage *nsimage; NSCursor *nscursor = NULL; SDL_Cursor *cursor = NULL; @@ -108,20 +106,17 @@ + (NSCursor *)invisibleCursor } } - [pool release]; - return cursor; -} +}} static SDL_Cursor * Cocoa_CreateSystemCursor(SDL_SystemCursor id) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSCursor *nscursor = NULL; SDL_Cursor *cursor = NULL; - switch(id) - { + switch(id) { case SDL_SYSTEM_CURSOR_ARROW: nscursor = [NSCursor arrowCursor]; break; @@ -170,28 +165,23 @@ + (NSCursor *)invisibleCursor } } - [pool release]; - return cursor; -} +}} static void Cocoa_FreeCursor(SDL_Cursor * cursor) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSCursor *nscursor = (NSCursor *)cursor->driverdata; [nscursor release]; SDL_free(cursor); - - [pool release]; -} +}} static int Cocoa_ShowCursor(SDL_Cursor * cursor) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - SDL_VideoDevice *device = SDL_GetVideoDevice(); SDL_Window *window = (device ? device->windows : NULL); for (; window != NULL; window = window->next) { @@ -202,26 +192,37 @@ + (NSCursor *)invisibleCursor waitUntilDone:NO]; } } - - [pool release]; - return 0; -} +}} -static void -Cocoa_WarpMouse(SDL_Window * window, int x, int y) +static SDL_Window * +SDL_FindWindowAtPoint(const int x, const int y) { - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - if ([data->listener isMoving]) - { - DLog("Postponing warp, window being moved."); - [data->listener setPendingMoveX:x - Y:y]; - return; + const SDL_Point pt = { x, y }; + SDL_Window *i; + for (i = SDL_GetVideoDevice()->windows; i; i = i->next) { + const SDL_Rect r = { i->x, i->y, i->w, i->h }; + if (SDL_PointInRect(&pt, &r)) { + return i; + } } + return NULL; +} + +static int +Cocoa_WarpMouseGlobal(int x, int y) +{ SDL_Mouse *mouse = SDL_GetMouse(); - CGPoint point = CGPointMake(x + (float)window->x, y + (float)window->y); + if (mouse->focus) { + SDL_WindowData *data = (SDL_WindowData *) mouse->focus->driverdata; + if ([data->listener isMoving]) { + DLog("Postponing warp, window being moved."); + [data->listener setPendingMoveX:x Y:y]; + return 0; + } + } + const CGPoint point = CGPointMake((float)x, (float)y); Cocoa_HandleMouseWarp(point.x, point.y); @@ -233,12 +234,25 @@ + (NSCursor *)invisibleCursor CGWarpMouseCursorPosition(point); CGSetLocalEventsSuppressionInterval(0.25); + /* CGWarpMouseCursorPosition doesn't generate a window event, unlike our + * other implementations' APIs. Send what's appropriate. + */ if (!mouse->relative_mode) { - /* CGWarpMouseCursorPosition doesn't generate a window event, unlike our - * other implementations' APIs. - */ - SDL_SendMouseMotion(mouse->focus, mouse->mouseID, 0, x, y); + SDL_Window *win = SDL_FindWindowAtPoint(x, y); + SDL_SetMouseFocus(win); + if (win) { + SDL_assert(win == mouse->focus); + SDL_SendMouseMotion(win, mouse->mouseID, 0, x - win->x, y - win->y); + } } + + return 0; +} + +static void +Cocoa_WarpMouse(SDL_Window * window, int x, int y) +{ + Cocoa_WarpMouseGlobal(x + window->x, y + window->y); } static int @@ -271,9 +285,51 @@ + (NSCursor *)invisibleCursor if (result != kCGErrorSuccess) { return SDL_SetError("CGAssociateMouseAndMouseCursorPosition() failed"); } + + /* The hide/unhide calls are redundant most of the time, but they fix + * https://bugzilla.libsdl.org/show_bug.cgi?id=2550 + */ + if (enabled) { + [NSCursor hide]; + } else { + [NSCursor unhide]; + } + return 0; +} + +static int +Cocoa_CaptureMouse(SDL_Window *window) +{ + /* our Cocoa event code already tracks the mouse outside the window, + so all we have to do here is say "okay" and do what we always do. */ return 0; } +static Uint32 +Cocoa_GetGlobalMouseState(int *x, int *y) +{ + const NSUInteger cocoaButtons = [NSEvent pressedMouseButtons]; + const NSPoint cocoaLocation = [NSEvent mouseLocation]; + Uint32 retval = 0; + + for (NSScreen *screen in [NSScreen screens]) { + NSRect frame = [screen frame]; + if (NSPointInRect(cocoaLocation, frame)) { + *x = (int) cocoaLocation.x; + *y = (int) ((frame.origin.y + frame.size.height) - cocoaLocation.y); + break; + } + } + + retval |= (cocoaButtons & (1 << 0)) ? SDL_BUTTON_LMASK : 0; + retval |= (cocoaButtons & (1 << 1)) ? SDL_BUTTON_RMASK : 0; + retval |= (cocoaButtons & (1 << 2)) ? SDL_BUTTON_MMASK : 0; + retval |= (cocoaButtons & (1 << 3)) ? SDL_BUTTON_X1MASK : 0; + retval |= (cocoaButtons & (1 << 4)) ? SDL_BUTTON_X2MASK : 0; + + return retval; +} + void Cocoa_InitMouse(_THIS) { @@ -286,7 +342,10 @@ + (NSCursor *)invisibleCursor mouse->ShowCursor = Cocoa_ShowCursor; mouse->FreeCursor = Cocoa_FreeCursor; mouse->WarpMouse = Cocoa_WarpMouse; + mouse->WarpMouseGlobal = Cocoa_WarpMouseGlobal; mouse->SetRelativeMouseMode = Cocoa_SetRelativeMouseMode; + mouse->CaptureMouse = Cocoa_CaptureMouse; + mouse->GetGlobalMouseState = Cocoa_GetGlobalMouseState; SDL_SetDefaultCursor(Cocoa_CreateDefaultCursor()); @@ -301,8 +360,7 @@ + (NSCursor *)invisibleCursor void Cocoa_HandleMouseEvent(_THIS, NSEvent *event) { - switch ([event type]) - { + switch ([event type]) { case NSMouseMoved: case NSLeftMouseDragged: case NSRightMouseDragged: @@ -315,8 +373,11 @@ + (NSCursor *)invisibleCursor } SDL_Mouse *mouse = SDL_GetMouse(); - SDL_MouseData *driverdata = (SDL_MouseData*)mouse->driverdata; + if (!driverdata) { + return; /* can happen when returning from fullscreen Space on shutdown */ + } + const SDL_bool seenWarp = driverdata->seenWarp; driverdata->seenWarp = NO; @@ -343,8 +404,7 @@ + (NSCursor *)invisibleCursor float deltaX = [event deltaX]; float deltaY = [event deltaY]; - if (seenWarp) - { + if (seenWarp) { deltaX += (lastMoveX - driverdata->lastWarpX); deltaY += ((CGDisplayPixelsHigh(kCGDirectMainDisplay) - lastMoveY) - driverdata->lastWarpY); @@ -361,6 +421,13 @@ + (NSCursor *)invisibleCursor float x = -[event deltaX]; float y = [event deltaY]; + SDL_MouseWheelDirection direction = SDL_MOUSEWHEEL_NORMAL; + + if ([event respondsToSelector:@selector(isDirectionInvertedFromDevice)]) { + if ([event isDirectionInvertedFromDevice] == YES) { + direction = SDL_MOUSEWHEEL_FLIPPED; + } + } if (x > 0) { x += 0.9f; @@ -372,7 +439,7 @@ + (NSCursor *)invisibleCursor } else if (y < 0) { y -= 0.9f; } - SDL_SendMouseWheel(window, mouse->mouseID, (int)x, (int)y); + SDL_SendMouseWheel(window, mouse->mouseID, (int)x, (int)y, direction); } void diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.h index bf3e738389..af92314b64 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.m index 9cf531cb5e..ed70f3ca34 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoamousetap.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -67,8 +67,7 @@ NSRect windowRect; CGPoint eventLocation; - switch (type) - { + switch (type) { case kCGEventTapDisabledByTimeout: case kCGEventTapDisabledByUserInput: { diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.h index 14fd3ab4ac..1f7bd57f05 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.m index d9fb244092..aa36099844 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoaopengl.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,16 +35,6 @@ #define DEFAULT_OPENGL "/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib" -#ifndef NSOpenGLPFAOpenGLProfile -#define NSOpenGLPFAOpenGLProfile 99 -#endif -#ifndef NSOpenGLProfileVersionLegacy -#define NSOpenGLProfileVersionLegacy 0x1000 -#endif -#ifndef NSOpenGLProfileVersion3_2Core -#define NSOpenGLProfileVersion3_2Core 0x3200 -#endif - @implementation SDLOpenGLContext : NSOpenGLContext - (id)initWithFormat:(NSOpenGLPixelFormat *)format @@ -160,11 +150,11 @@ - (void)setWindow:(SDL_Window *)newWindow SDL_GLContext Cocoa_GL_CreateContext(_THIS, SDL_Window * window) +{ @autoreleasepool { - SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - NSAutoreleasePool *pool; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); SDL_DisplayData *displaydata = (SDL_DisplayData *)display->driverdata; + SDL_bool lion_or_later = floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6; NSOpenGLPixelFormatAttribute attr[32]; NSOpenGLPixelFormat *fmt; SDLOpenGLContext *context; @@ -178,15 +168,13 @@ - (void)setWindow:(SDL_Window *)newWindow SDL_SetError ("OpenGL ES is not supported on this platform"); return NULL; } - if ((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_CORE) && (data->osversion < 0x1070)) { + if ((_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_CORE) && !lion_or_later) { SDL_SetError ("OpenGL Core Profile is not supported on this platform version"); return NULL; } - pool = [[NSAutoreleasePool alloc] init]; - /* specify a profile if we're on Lion (10.7) or later. */ - if (data->osversion >= 0x1070) { + if (lion_or_later) { NSOpenGLPixelFormatAttribute profile = NSOpenGLProfileVersionLegacy; if (_this->gl_config.profile_mask == SDL_GL_CONTEXT_PROFILE_CORE) { profile = NSOpenGLProfileVersion3_2Core; @@ -249,7 +237,6 @@ - (void)setWindow:(SDL_Window *)newWindow fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attr]; if (fmt == nil) { SDL_SetError("Failed creating OpenGL pixel format"); - [pool release]; return NULL; } @@ -263,12 +250,9 @@ - (void)setWindow:(SDL_Window *)newWindow if (context == nil) { SDL_SetError("Failed creating OpenGL context"); - [pool release]; return NULL; } - [pool release]; - if ( Cocoa_GL_MakeCurrent(_this, window, context) < 0 ) { Cocoa_GL_DeleteContext(_this, context); SDL_SetError("Failed making OpenGL context current"); @@ -316,15 +300,12 @@ - (void)setWindow:(SDL_Window *)newWindow /*_this->gl_config.minor_version = glversion_minor;*/ } return context; -} +}} int Cocoa_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) +{ @autoreleasepool { - NSAutoreleasePool *pool; - - pool = [[NSAutoreleasePool alloc] init]; - if (context) { SDLOpenGLContext *nscontext = (SDLOpenGLContext *)context; [nscontext setWindow:window]; @@ -334,9 +315,8 @@ - (void)setWindow:(SDL_Window *)newWindow [NSOpenGLContext clearCurrentContext]; } - [pool release]; return 0; -} +}} void Cocoa_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h) @@ -362,8 +342,8 @@ - (void)setWindow:(SDL_Window *)newWindow int Cocoa_GL_SetSwapInterval(_THIS, int interval) +{ @autoreleasepool { - NSAutoreleasePool *pool; NSOpenGLContext *nscontext; GLint value; int status; @@ -372,8 +352,6 @@ - (void)setWindow:(SDL_Window *)newWindow return SDL_SetError("Late swap tearing currently unsupported"); } - pool = [[NSAutoreleasePool alloc] init]; - nscontext = (NSOpenGLContext*)SDL_GL_GetCurrentContext(); if (nscontext != nil) { value = interval; @@ -383,57 +361,44 @@ - (void)setWindow:(SDL_Window *)newWindow status = SDL_SetError("No current OpenGL context"); } - [pool release]; return status; -} +}} int Cocoa_GL_GetSwapInterval(_THIS) +{ @autoreleasepool { - NSAutoreleasePool *pool; NSOpenGLContext *nscontext; GLint value; int status = 0; - pool = [[NSAutoreleasePool alloc] init]; - nscontext = (NSOpenGLContext*)SDL_GL_GetCurrentContext(); if (nscontext != nil) { [nscontext getValues:&value forParameter:NSOpenGLCPSwapInterval]; status = (int)value; } - [pool release]; return status; -} +}} void Cocoa_GL_SwapWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool; - - pool = [[NSAutoreleasePool alloc] init]; - SDLOpenGLContext* nscontext = (SDLOpenGLContext*)SDL_GL_GetCurrentContext(); [nscontext flushBuffer]; [nscontext updateIfNeeded]; - - [pool release]; -} +}} void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context) +{ @autoreleasepool { - NSAutoreleasePool *pool; SDLOpenGLContext *nscontext = (SDLOpenGLContext *)context; - pool = [[NSAutoreleasePool alloc] init]; - [nscontext setWindow:NULL]; [nscontext release]; - - [pool release]; -} +}} #endif /* SDL_VIDEO_OPENGL_CGL */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.h index 0ab9980e33..f64b59178b 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.m index b3843ccb09..cd5d97b70e 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoashape.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,7 +30,8 @@ #include "SDL_assert.h" SDL_WindowShaper* -Cocoa_CreateShaper(SDL_Window* window) { +Cocoa_CreateShaper(SDL_Window* window) +{ SDL_WindowData* windata = (SDL_WindowData*)window->driverdata; [windata->nswindow setOpaque:NO]; @@ -63,7 +64,8 @@ } SDL_CocoaClosure; void -ConvertRects(SDL_ShapeTree* tree,void* closure) { +ConvertRects(SDL_ShapeTree* tree, void* closure) +{ SDL_CocoaClosure* data = (SDL_CocoaClosure*)closure; if(tree->kind == OpaqueShape) { NSRect rect = NSMakeRect(tree->data.shape.x,data->window->h - tree->data.shape.y,tree->data.shape.w,tree->data.shape.h); @@ -72,11 +74,12 @@ } int -Cocoa_SetWindowShape(SDL_WindowShaper *shaper,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode) { +Cocoa_SetWindowShape(SDL_WindowShaper *shaper, SDL_Surface *shape, SDL_WindowShapeMode *shape_mode) +{ @autoreleasepool +{ SDL_ShapeData* data = (SDL_ShapeData*)shaper->driverdata; SDL_WindowData* windata = (SDL_WindowData*)shaper->window->driverdata; SDL_CocoaClosure closure; - NSAutoreleasePool *pool = NULL; if(data->saved == SDL_TRUE) { [data->context restoreGraphicsState]; data->saved = SDL_FALSE; @@ -90,19 +93,18 @@ NSRectFill([[windata->nswindow contentView] frame]); data->shape = SDL_CalculateShapeTree(*shape_mode,shape); - pool = [[NSAutoreleasePool alloc] init]; closure.view = [windata->nswindow contentView]; - closure.path = [[NSBezierPath bezierPath] init]; + closure.path = [NSBezierPath bezierPath]; closure.window = shaper->window; SDL_TraverseShapeTree(data->shape,&ConvertRects,&closure); [closure.path addClip]; - [pool release]; return 0; -} +}} int -Cocoa_ResizeWindowShape(SDL_Window *window) { +Cocoa_ResizeWindowShape(SDL_Window *window) +{ SDL_ShapeData* data = window->shaper->driverdata; SDL_assert(data != NULL); return 0; diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.h index f194e1f722..498ce6ccaa 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,7 @@ #include "SDL_opengl.h" #include +#include #include #include "SDL_keycode.h" @@ -45,13 +46,15 @@ typedef struct SDL_VideoData { - SInt32 osversion; int allow_spaces; unsigned int modifierFlags; void *key_layout; SDLTranslatorResponder *fieldEdit; NSInteger clipboard_count; Uint32 screensaver_activity; + BOOL screensaver_use_iopm; + IOPMAssertionID screensaver_assertion; + } SDL_VideoData; /* Utility functions */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.m index 6766b71bb6..b8f775ddb2 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoavideo.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,13 +22,6 @@ #if SDL_VIDEO_DRIVER_COCOA -#if defined(__APPLE__) && defined(__POWERPC__) && !defined(__APPLE_ALTIVEC__) -#include -#undef bool -#undef vector -#undef pixel -#endif - #include "SDL.h" #include "SDL_endian.h" #include "SDL_cocoavideo.h" @@ -76,9 +69,6 @@ } device->driverdata = data; - /* Find out what version of Mac OS X we're running */ - Gestalt(gestaltSystemVersion, &data->osversion); - /* Set the function pointers */ device->VideoInit = Cocoa_VideoInit; device->VideoQuit = Cocoa_VideoQuit; @@ -86,6 +76,7 @@ device->GetDisplayModes = Cocoa_GetDisplayModes; device->SetDisplayMode = Cocoa_SetDisplayMode; device->PumpEvents = Cocoa_PumpEvents; + device->SuspendScreenSaver = Cocoa_SuspendScreenSaver; device->CreateWindow = Cocoa_CreateWindow; device->CreateWindowFrom = Cocoa_CreateWindowFrom; @@ -108,6 +99,7 @@ device->SetWindowGrab = Cocoa_SetWindowGrab; device->DestroyWindow = Cocoa_DestroyWindow; device->GetWindowWMInfo = Cocoa_GetWindowWMInfo; + device->SetWindowHitTest = Cocoa_SetWindowHitTest; device->shape_driver.CreateShaper = Cocoa_CreateShaper; device->shape_driver.SetWindowShape = Cocoa_SetWindowShape; @@ -155,7 +147,10 @@ Cocoa_InitMouse(_this); const char *hint = SDL_GetHint(SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES); - data->allow_spaces = ( (data->osversion >= 0x1070) && (!hint || (*hint != '0')) ); + data->allow_spaces = ( (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6) && (!hint || (*hint != '0')) ); + + /* The IOPM assertion API can disable the screensaver as of 10.7. */ + data->screensaver_use_iopm = floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6; return 0; } diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.h b/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.h index a4ec07d72f..1037badfc5 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.h +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -45,6 +45,7 @@ typedef enum PendingWindowOperation pendingWindowOperation; BOOL isMoving; int pendingWindowWarpX, pendingWindowWarpY; + BOOL isDragAreaRunning; } -(void) listen:(SDL_WindowData *) data; @@ -69,12 +70,16 @@ typedef enum -(void) windowDidDeminiaturize:(NSNotification *) aNotification; -(void) windowDidBecomeKey:(NSNotification *) aNotification; -(void) windowDidResignKey:(NSNotification *) aNotification; +-(void) windowDidChangeBackingProperties:(NSNotification *) aNotification; -(void) windowWillEnterFullScreen:(NSNotification *) aNotification; -(void) windowDidEnterFullScreen:(NSNotification *) aNotification; -(void) windowWillExitFullScreen:(NSNotification *) aNotification; -(void) windowDidExitFullScreen:(NSNotification *) aNotification; -(NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions; +/* See if event is in a drag area, toggle on window dragging. */ +-(BOOL) processHitTest:(NSEvent *)theEvent; + /* Window event handling */ -(void) mouseDown:(NSEvent *) theEvent; -(void) rightMouseDown:(NSEvent *) theEvent; @@ -93,13 +98,7 @@ typedef enum -(void) touchesCancelledWithEvent:(NSEvent *) theEvent; /* Touch event handling */ -typedef enum { - COCOA_TOUCH_DOWN, - COCOA_TOUCH_UP, - COCOA_TOUCH_MOVE, - COCOA_TOUCH_CANCELLED -} cocoaTouchType; --(void) handleTouches:(cocoaTouchType)type withEvent:(NSEvent*) event; +-(void) handleTouches:(NSTouchPhase) phase withEvent:(NSEvent*) theEvent; @end /* *INDENT-ON* */ @@ -138,8 +137,8 @@ extern int Cocoa_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * r extern int Cocoa_GetWindowGammaRamp(_THIS, SDL_Window * window, Uint16 * ramp); extern void Cocoa_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed); extern void Cocoa_DestroyWindow(_THIS, SDL_Window * window); -extern SDL_bool Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, - struct SDL_SysWMinfo *info); +extern SDL_bool Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info); +extern int Cocoa_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); #endif /* _SDL_cocoawindow_h */ diff --git a/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.m b/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.m index a55ab49673..a4da6cb2de 100644 --- a/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.m +++ b/Engine/lib/sdl/src/video/cocoa/SDL_cocoawindow.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,7 @@ #include "../../events/SDL_mouse_c.h" #include "../../events/SDL_touch_c.h" #include "../../events/SDL_windowevents_c.h" +#include "../../events/SDL_dropevents_c.h" #include "SDL_cocoavideo.h" #include "SDL_cocoashape.h" #include "SDL_cocoamouse.h" @@ -49,14 +50,24 @@ #endif -@interface SDLWindow : NSWindow +#define FULLSCREEN_MASK (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN) + + +@interface SDLWindow : NSWindow /* These are needed for borderless/fullscreen windows */ - (BOOL)canBecomeKeyWindow; - (BOOL)canBecomeMainWindow; - (void)sendEvent:(NSEvent *)event; +- (void)doCommandBySelector:(SEL)aSelector; + +/* Handle drag-and-drop of files onto the SDL window. */ +- (NSDragOperation)draggingEntered:(id )sender; +- (BOOL)performDragOperation:(id )sender; +- (BOOL)wantsPeriodicDraggingUpdates; @end @implementation SDLWindow + - (BOOL)canBecomeKeyWindow { return YES; @@ -84,12 +95,87 @@ - (void)sendEvent:(NSEvent *)event [delegate windowDidFinishMoving]; } } + +/* We'll respond to selectors by doing nothing so we don't beep. + * The escape key gets converted to a "cancel" selector, etc. + */ +- (void)doCommandBySelector:(SEL)aSelector +{ + /*NSLog(@"doCommandBySelector: %@\n", NSStringFromSelector(aSelector));*/ +} + +- (NSDragOperation)draggingEntered:(id )sender +{ + if (([sender draggingSourceOperationMask] & NSDragOperationGeneric) == NSDragOperationGeneric) { + return NSDragOperationGeneric; + } + + return NSDragOperationNone; /* no idea what to do with this, reject it. */ +} + +- (BOOL)performDragOperation:(id )sender +{ @autoreleasepool +{ + NSPasteboard *pasteboard = [sender draggingPasteboard]; + NSArray *types = [NSArray arrayWithObject:NSFilenamesPboardType]; + NSString *desiredType = [pasteboard availableTypeFromArray:types]; + if (desiredType == nil) { + return NO; /* can't accept anything that's being dropped here. */ + } + + NSData *data = [pasteboard dataForType:desiredType]; + if (data == nil) { + return NO; + } + + SDL_assert([desiredType isEqualToString:NSFilenamesPboardType]); + NSArray *array = [pasteboard propertyListForType:@"NSFilenamesPboardType"]; + + for (NSString *path in array) { + NSURL *fileURL = [[NSURL fileURLWithPath:path] autorelease]; + NSNumber *isAlias = nil; + + /* Functionality for resolving URL aliases was added with OS X 10.6. */ + if ([fileURL respondsToSelector:@selector(getResourceValue:forKey:error:)]) { + [fileURL getResourceValue:&isAlias forKey:NSURLIsAliasFileKey error:nil]; + } + + /* If the URL is an alias, resolve it. */ + if ([isAlias boolValue]) { + NSURLBookmarkResolutionOptions opts = NSURLBookmarkResolutionWithoutMounting | NSURLBookmarkResolutionWithoutUI; + NSData *bookmark = [NSURL bookmarkDataWithContentsOfURL:fileURL error:nil]; + if (bookmark != nil) { + NSURL *resolvedURL = [NSURL URLByResolvingBookmarkData:bookmark + options:opts + relativeToURL:nil + bookmarkDataIsStale:nil + error:nil]; + + if (resolvedURL != nil) { + fileURL = resolvedURL; + } + } + } + + if (!SDL_SendDropFile([[fileURL path] UTF8String])) { + return NO; + } + } + + return YES; +}} + +- (BOOL)wantsPeriodicDraggingUpdates +{ + return NO; +} + @end static Uint32 s_moveHack; -static void ConvertNSRect(NSRect *r) +static void ConvertNSRect(NSScreen *screen, BOOL fullscreen, NSRect *r) { r->origin.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - r->origin.y - r->size.height; } @@ -179,6 +265,7 @@ - (void)listen:(SDL_WindowData *)data inFullscreenTransition = NO; pendingWindowOperation = PENDING_OPERATION_NONE; isMoving = NO; + isDragAreaRunning = NO; center = [NSNotificationCenter defaultCenter]; @@ -190,10 +277,13 @@ - (void)listen:(SDL_WindowData *)data [center addObserver:self selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification object:window]; [center addObserver:self selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification object:window]; [center addObserver:self selector:@selector(windowDidResignKey:) name:NSWindowDidResignKeyNotification object:window]; + [center addObserver:self selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification object:window]; [center addObserver:self selector:@selector(windowWillEnterFullScreen:) name:NSWindowWillEnterFullScreenNotification object:window]; [center addObserver:self selector:@selector(windowDidEnterFullScreen:) name:NSWindowDidEnterFullScreenNotification object:window]; [center addObserver:self selector:@selector(windowWillExitFullScreen:) name:NSWindowWillExitFullScreenNotification object:window]; [center addObserver:self selector:@selector(windowDidExitFullScreen:) name:NSWindowDidExitFullScreenNotification object:window]; + [center addObserver:self selector:@selector(windowDidFailToEnterFullScreen:) name:@"NSWindowDidFailToEnterFullScreenNotification" object:window]; + [center addObserver:self selector:@selector(windowDidFailToExitFullScreen:) name:@"NSWindowDidFailToExitFullScreenNotification" object:window]; } else { [window setDelegate:self]; } @@ -267,6 +357,8 @@ -(BOOL) setFullscreenSpace:(BOOL) state return NO; /* Spaces are forcibly disabled. */ } else if (state && ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP)) { return NO; /* we only allow you to make a Space on FULLSCREEN_DESKTOP windows. */ + } else if (!state && ((window->last_fullscreen_flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != SDL_WINDOW_FULLSCREEN_DESKTOP)) { + return NO; /* we only handle leaving the Space on windows that were previously FULLSCREEN_DESKTOP. */ } else if (state == isFullscreenSpace) { return YES; /* already there. */ } @@ -307,7 +399,6 @@ - (void)close NSNotificationCenter *center; NSWindow *window = _data->nswindow; NSView *view = [window contentView]; - NSArray *windows = nil; center = [NSNotificationCenter defaultCenter]; @@ -319,10 +410,13 @@ - (void)close [center removeObserver:self name:NSWindowDidDeminiaturizeNotification object:window]; [center removeObserver:self name:NSWindowDidBecomeKeyNotification object:window]; [center removeObserver:self name:NSWindowDidResignKeyNotification object:window]; + [center removeObserver:self name:NSWindowDidChangeBackingPropertiesNotification object:window]; [center removeObserver:self name:NSWindowWillEnterFullScreenNotification object:window]; [center removeObserver:self name:NSWindowDidEnterFullScreenNotification object:window]; [center removeObserver:self name:NSWindowWillExitFullScreenNotification object:window]; [center removeObserver:self name:NSWindowDidExitFullScreenNotification object:window]; + [center removeObserver:self name:@"NSWindowDidFailToEnterFullScreenNotification" object:window]; + [center removeObserver:self name:@"NSWindowDidFailToExitFullScreenNotification" object:window]; } else { [window setDelegate:nil]; } @@ -335,26 +429,6 @@ - (void)close if ([view nextResponder] == self) { [view setNextResponder:nil]; } - - /* Make the next window in the z-order Key. If we weren't the foreground - when closed, this is a no-op. - !!! FIXME: Note that this is a hack, and there are corner cases where - !!! FIXME: this fails (such as the About box). The typical nib+RunLoop - !!! FIXME: handles this for Cocoa apps, but we bypass all that in SDL. - !!! FIXME: We should remove this code when we find a better way to - !!! FIXME: have the system do this for us. See discussion in - !!! FIXME: http://bugzilla.libsdl.org/show_bug.cgi?id=1825 - */ - windows = [NSApp orderedWindows]; - for (NSWindow *win in windows) - { - if (win == window) { - continue; - } - - [win makeKeyAndOrderFront:self]; - break; - } } - (BOOL)isMoving @@ -370,16 +444,15 @@ -(void) setPendingMoveX:(int)x Y:(int)y - (void)windowDidFinishMoving { - if ([self isMoving]) - { + if ([self isMoving]) { isMoving = NO; SDL_Mouse *mouse = SDL_GetMouse(); - if (pendingWindowWarpX >= 0 && pendingWindowWarpY >= 0) { - mouse->WarpMouse(_data->window, pendingWindowWarpX, pendingWindowWarpY); - pendingWindowWarpX = pendingWindowWarpY = -1; + if (pendingWindowWarpX != INT_MAX && pendingWindowWarpY != INT_MAX) { + mouse->WarpMouseGlobal(pendingWindowWarpX, pendingWindowWarpY); + pendingWindowWarpX = pendingWindowWarpY = INT_MAX; } - if (mouse->relative_mode && SDL_GetMouseFocus() == _data->window) { + if (mouse->relative_mode && !mouse->relative_mode_warp && mouse->focus == _data->window) { mouse->SetRelativeMouseMode(SDL_TRUE); } } @@ -399,7 +472,7 @@ - (void)windowDidExpose:(NSNotification *)aNotification - (void)windowWillMove:(NSNotification *)aNotification { if ([_data->nswindow isKindOfClass:[SDLWindow class]]) { - pendingWindowWarpX = pendingWindowWarpY = -1; + pendingWindowWarpX = pendingWindowWarpY = INT_MAX; isMoving = YES; } } @@ -409,8 +482,9 @@ - (void)windowDidMove:(NSNotification *)aNotification int x, y; SDL_Window *window = _data->window; NSWindow *nswindow = _data->nswindow; + BOOL fullscreen = window->flags & FULLSCREEN_MASK; NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], fullscreen, &rect); if (s_moveHack) { SDL_bool blockMove = ((SDL_GetTicks() - s_moveHack) < 500); @@ -421,7 +495,7 @@ - (void)windowDidMove:(NSNotification *)aNotification /* Cocoa is adjusting the window in response to a mode change */ rect.origin.x = window->x; rect.origin.y = window->y; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], fullscreen, &rect); [nswindow setFrameOrigin:rect.origin]; return; } @@ -446,7 +520,7 @@ - (void)windowDidResize:(NSNotification *)aNotification NSWindow *nswindow = _data->nswindow; int x, y, w, h; NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); x = (int)rect.origin.x; y = (int)rect.origin.y; w = (int)rect.size.width; @@ -485,13 +559,15 @@ - (void)windowDidBecomeKey:(NSNotification *)aNotification { SDL_Window *window = _data->window; SDL_Mouse *mouse = SDL_GetMouse(); - if (mouse->relative_mode && ![self isMoving]) { - mouse->SetRelativeMouseMode(SDL_TRUE); - } /* We're going to get keyboard events, since we're key. */ + /* This needs to be done before restoring the relative mouse mode. */ SDL_SetKeyboardFocus(window); + if (mouse->relative_mode && !mouse->relative_mode_warp && ![self isMoving]) { + mouse->SetRelativeMouseMode(SDL_TRUE); + } + /* If we just gained focus we need the updated mouse position */ if (!mouse->relative_mode) { NSPoint point; @@ -512,12 +588,19 @@ - (void)windowDidBecomeKey:(NSNotification *)aNotification if ((isFullscreenSpace) && ((window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP)) { [NSMenu setMenuBarVisible:NO]; } + + /* On pre-10.6, you might have the capslock key state wrong now because we can't check here. */ + if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_6) { + const unsigned int newflags = [NSEvent modifierFlags] & NSAlphaShiftKeyMask; + _data->videodata->modifierFlags = (_data->videodata->modifierFlags & ~NSAlphaShiftKeyMask) | newflags; + SDL_ToggleModState(KMOD_CAPS, newflags != 0); + } } - (void)windowDidResignKey:(NSNotification *)aNotification { SDL_Mouse *mouse = SDL_GetMouse(); - if (mouse->relative_mode) { + if (mouse->relative_mode && !mouse->relative_mode_warp) { mouse->SetRelativeMouseMode(SDL_FALSE); } @@ -536,6 +619,22 @@ - (void)windowDidResignKey:(NSNotification *)aNotification } } +- (void)windowDidChangeBackingProperties:(NSNotification *)aNotification +{ + NSNumber *oldscale = [[aNotification userInfo] objectForKey:NSBackingPropertyOldScaleFactorKey]; + + if (inFullscreenTransition) { + return; + } + + if ([oldscale doubleValue] != [_data->nswindow backingScaleFactor]) { + /* Force a resize event when the backing scale factor changes. */ + _data->window->w = 0; + _data->window->h = 0; + [self windowDidResize:aNotification]; + } +} + - (void)windowWillEnterFullScreen:(NSNotification *)aNotification { SDL_Window *window = _data->window; @@ -546,6 +645,22 @@ - (void)windowWillEnterFullScreen:(NSNotification *)aNotification inFullscreenTransition = YES; } +- (void)windowDidFailToEnterFullScreen:(NSNotification *)aNotification +{ + SDL_Window *window = _data->window; + + if (window->is_destroying) { + return; + } + + SetWindowStyle(window, GetWindowStyle(window)); + + isFullscreenSpace = NO; + inFullscreenTransition = NO; + + [self windowDidExitFullScreen:nil]; +} + - (void)windowDidEnterFullScreen:(NSNotification *)aNotification { SDL_Window *window = _data->window; @@ -574,12 +689,31 @@ - (void)windowWillExitFullScreen:(NSNotification *)aNotification { SDL_Window *window = _data->window; - SetWindowStyle(window, GetWindowStyle(window)); + /* As of OS X 10.11, the window seems to need to be resizable when exiting + a Space, in order for it to resize back to its windowed-mode size. + */ + SetWindowStyle(window, GetWindowStyle(window) | NSResizableWindowMask); isFullscreenSpace = NO; inFullscreenTransition = YES; } +- (void)windowDidFailToExitFullScreen:(NSNotification *)aNotification +{ + SDL_Window *window = _data->window; + + if (window->is_destroying) { + return; + } + + SetWindowStyle(window, (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask)); + + isFullscreenSpace = YES; + inFullscreenTransition = NO; + + [self windowDidEnterFullScreen:nil]; +} + - (void)windowDidExitFullScreen:(NSNotification *)aNotification { SDL_Window *window = _data->window; @@ -587,6 +721,8 @@ - (void)windowDidExitFullScreen:(NSNotification *)aNotification inFullscreenTransition = NO; + SetWindowStyle(window, GetWindowStyle(window)); + [nswindow setLevel:kCGNormalWindowLevel]; if (pendingWindowOperation == PENDING_OPERATION_ENTER_FULLSCREEN) { @@ -655,10 +791,55 @@ - (void)doCommandBySelector:(SEL)aSelector /*NSLog(@"doCommandBySelector: %@\n", NSStringFromSelector(aSelector));*/ } +- (BOOL)processHitTest:(NSEvent *)theEvent +{ + SDL_assert(isDragAreaRunning == [_data->nswindow isMovableByWindowBackground]); + + if (_data->window->hit_test) { /* if no hit-test, skip this. */ + const NSPoint location = [theEvent locationInWindow]; + const SDL_Point point = { (int) location.x, _data->window->h - (((int) location.y)-1) }; + const SDL_HitTestResult rc = _data->window->hit_test(_data->window, &point, _data->window->hit_test_data); + if (rc == SDL_HITTEST_DRAGGABLE) { + if (!isDragAreaRunning) { + isDragAreaRunning = YES; + [_data->nswindow setMovableByWindowBackground:YES]; + } + return YES; /* dragging! */ + } + } + + if (isDragAreaRunning) { + isDragAreaRunning = NO; + [_data->nswindow setMovableByWindowBackground:NO]; + return YES; /* was dragging, drop event. */ + } + + return NO; /* not a special area, carry on. */ +} + - (void)mouseDown:(NSEvent *)theEvent { int button; + /* Ignore events that aren't inside the client area (i.e. title bar.) */ + if ([theEvent window]) { + NSRect windowRect = [[[theEvent window] contentView] frame]; + + /* add one to size, since NSPointInRect is exclusive of the bottom + edges, which mean it misses the top of the window by one pixel + (as the origin is the bottom left). */ + windowRect.size.width += 1; + windowRect.size.height += 1; + + if (!NSPointInRect([theEvent locationInWindow], windowRect)) { + return; + } + } + + if ([self processHitTest:theEvent]) { + return; /* dragging, drop event. */ + } + switch ([theEvent buttonNumber]) { case 0: if (([theEvent modifierFlags] & NSControlKeyMask) && @@ -697,6 +878,10 @@ - (void)mouseUp:(NSEvent *)theEvent { int button; + if ([self processHitTest:theEvent]) { + return; /* stopped dragging, drop event. */ + } + switch ([theEvent buttonNumber]) { case 0: if (wasCtrlLeft) { @@ -736,6 +921,10 @@ - (void)mouseMoved:(NSEvent *)theEvent NSPoint point; int x, y; + if ([self processHitTest:theEvent]) { + return; /* dragging, drop event. */ + } + if (mouse->relative_mode) { return; } @@ -744,8 +933,8 @@ - (void)mouseMoved:(NSEvent *)theEvent x = (int)point.x; y = (int)(window->h - point.y); - if (x < 0 || x >= window->w || y < 0 || y >= window->h) { - if (window->flags & SDL_WINDOW_INPUT_GRABBED) { + if (window->flags & SDL_WINDOW_INPUT_GRABBED) { + if (x < 0 || x >= window->w || y < 0 || y >= window->h) { if (x < 0) { x = 0; } else if (x >= window->w) { @@ -804,53 +993,51 @@ - (void)scrollWheel:(NSEvent *)theEvent - (void)touchesBeganWithEvent:(NSEvent *) theEvent { - [self handleTouches:COCOA_TOUCH_DOWN withEvent:theEvent]; + NSSet *touches = [theEvent touchesMatchingPhase:NSTouchPhaseAny inView:nil]; + int existingTouchCount = 0; + + for (NSTouch* touch in touches) { + if ([touch phase] != NSTouchPhaseBegan) { + existingTouchCount++; + } + } + if (existingTouchCount == 0) { + SDL_TouchID touchID = (SDL_TouchID)(intptr_t)[[touches anyObject] device]; + int numFingers = SDL_GetNumTouchFingers(touchID); + DLog("Reset Lost Fingers: %d", numFingers); + for (--numFingers; numFingers >= 0; --numFingers) { + SDL_Finger* finger = SDL_GetTouchFinger(touchID, numFingers); + SDL_SendTouch(touchID, finger->id, SDL_FALSE, 0, 0, 0); + } + } + + DLog("Began Fingers: %lu .. existing: %d", (unsigned long)[touches count], existingTouchCount); + [self handleTouches:NSTouchPhaseBegan withEvent:theEvent]; } - (void)touchesMovedWithEvent:(NSEvent *) theEvent { - [self handleTouches:COCOA_TOUCH_MOVE withEvent:theEvent]; + [self handleTouches:NSTouchPhaseMoved withEvent:theEvent]; } - (void)touchesEndedWithEvent:(NSEvent *) theEvent { - [self handleTouches:COCOA_TOUCH_UP withEvent:theEvent]; + [self handleTouches:NSTouchPhaseEnded withEvent:theEvent]; } - (void)touchesCancelledWithEvent:(NSEvent *) theEvent { - [self handleTouches:COCOA_TOUCH_CANCELLED withEvent:theEvent]; + [self handleTouches:NSTouchPhaseCancelled withEvent:theEvent]; } -- (void)handleTouches:(cocoaTouchType)type withEvent:(NSEvent *)event +- (void)handleTouches:(NSTouchPhase) phase withEvent:(NSEvent *) theEvent { - NSSet *touches = 0; - NSEnumerator *enumerator; - NSTouch *touch; - - switch (type) { - case COCOA_TOUCH_DOWN: - touches = [event touchesMatchingPhase:NSTouchPhaseBegan inView:nil]; - break; - case COCOA_TOUCH_UP: - touches = [event touchesMatchingPhase:NSTouchPhaseEnded inView:nil]; - break; - case COCOA_TOUCH_CANCELLED: - touches = [event touchesMatchingPhase:NSTouchPhaseCancelled inView:nil]; - break; - case COCOA_TOUCH_MOVE: - touches = [event touchesMatchingPhase:NSTouchPhaseMoved inView:nil]; - break; - } + NSSet *touches = [theEvent touchesMatchingPhase:phase inView:nil]; - enumerator = [touches objectEnumerator]; - touch = (NSTouch*)[enumerator nextObject]; - while (touch) { + for (NSTouch *touch in touches) { const SDL_TouchID touchId = (SDL_TouchID)(intptr_t)[touch device]; - if (!SDL_GetTouch(touchId)) { - if (SDL_AddTouch(touchId, "") < 0) { - return; - } + if (SDL_AddTouch(touchId, "") < 0) { + return; } const SDL_FingerID fingerId = (SDL_FingerID)(intptr_t)[touch identity]; @@ -859,37 +1046,61 @@ - (void)handleTouches:(cocoaTouchType)type withEvent:(NSEvent *)event /* Make the origin the upper left instead of the lower left */ y = 1.0f - y; - switch (type) { - case COCOA_TOUCH_DOWN: + switch (phase) { + case NSTouchPhaseBegan: SDL_SendTouch(touchId, fingerId, SDL_TRUE, x, y, 1.0f); break; - case COCOA_TOUCH_UP: - case COCOA_TOUCH_CANCELLED: + case NSTouchPhaseEnded: + case NSTouchPhaseCancelled: SDL_SendTouch(touchId, fingerId, SDL_FALSE, x, y, 1.0f); break; - case COCOA_TOUCH_MOVE: + case NSTouchPhaseMoved: SDL_SendTouchMotion(touchId, fingerId, x, y, 1.0f); break; + default: + break; } - - touch = (NSTouch*)[enumerator nextObject]; } } @end -@interface SDLView : NSView +@interface SDLView : NSView { + SDL_Window *_sdlWindow; +} + +- (void)setSDLWindow:(SDL_Window*)window; /* The default implementation doesn't pass rightMouseDown to responder chain */ - (void)rightMouseDown:(NSEvent *)theEvent; +- (BOOL)mouseDownCanMoveWindow; +- (void)drawRect:(NSRect)dirtyRect; @end @implementation SDLView +- (void)setSDLWindow:(SDL_Window*)window +{ + _sdlWindow = window; +} + +- (void)drawRect:(NSRect)dirtyRect +{ + SDL_SendWindowEvent(_sdlWindow, SDL_WINDOWEVENT_EXPOSED, 0, 0); +} + - (void)rightMouseDown:(NSEvent *)theEvent { [[self nextResponder] rightMouseDown:theEvent]; } +- (BOOL)mouseDownCanMoveWindow +{ + /* Always say YES, but this doesn't do anything until we call + -[NSWindow setMovableByWindowBackground:YES], which we ninja-toggle + during mouse events when we're using a drag area. */ + return YES; +} + - (void)resetCursorRects { [super resetCursorRects]; @@ -907,13 +1118,13 @@ - (void)resetCursorRects static int SetupWindowData(_THIS, SDL_Window * window, NSWindow *nswindow, SDL_bool created) +{ @autoreleasepool { - NSAutoreleasePool *pool; SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; SDL_WindowData *data; /* Allocate the window data */ - data = (SDL_WindowData *) SDL_calloc(1, sizeof(*data)); + window->driverdata = data = (SDL_WindowData *) SDL_calloc(1, sizeof(*data)); if (!data) { return SDL_OutOfMemory(); } @@ -923,15 +1134,13 @@ - (void)resetCursorRects data->videodata = videodata; data->nscontexts = [[NSMutableArray alloc] init]; - pool = [[NSAutoreleasePool alloc] init]; - /* Create an event listener for the window */ data->listener = [[Cocoa_WindowListener alloc] init]; /* Fill in the SDL window with the window data */ { NSRect rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); window->x = (int)rect.origin.x; window->y = (int)rect.origin.y; window->w = (int)rect.size.width; @@ -986,38 +1195,34 @@ - (void)resetCursorRects [nswindow setOneShot:NO]; /* All done! */ - [pool release]; window->driverdata = data; return 0; -} +}} int Cocoa_CreateWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { SDL_VideoData *videodata = (SDL_VideoData *) _this->driverdata; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *nswindow; SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); NSRect rect; SDL_Rect bounds; unsigned int style; + NSArray *screens = [NSScreen screens]; Cocoa_GetDisplayBounds(_this, display, &bounds); rect.origin.x = window->x; rect.origin.y = window->y; rect.size.width = window->w; rect.size.height = window->h; - ConvertNSRect(&rect); + ConvertNSRect([screens objectAtIndex:0], (window->flags & FULLSCREEN_MASK), &rect); style = GetWindowStyle(window); /* Figure out which screen to place this window */ - NSArray *screens = [NSScreen screens]; NSScreen *screen = nil; - NSScreen *candidate; - int i, count = [screens count]; - for (i = 0; i < count; ++i) { - candidate = [screens objectAtIndex:i]; + for (NSScreen *candidate in screens) { NSRect screenRect = [candidate frame]; if (rect.origin.x >= screenRect.origin.x && rect.origin.x < screenRect.origin.x + screenRect.size.width && @@ -1033,14 +1238,12 @@ - (void)resetCursorRects nswindow = [[SDLWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:NO screen:screen]; } @catch (NSException *e) { - SDL_SetError("%s", [[e reason] UTF8String]); - [pool release]; - return -1; + return SDL_SetError("%s", [[e reason] UTF8String]); } [nswindow setBackgroundColor:[NSColor blackColor]]; if (videodata->allow_spaces) { - SDL_assert(videodata->osversion >= 0x1070); + SDL_assert(floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_6); SDL_assert([nswindow respondsToSelector:@selector(toggleFullScreen:)]); /* we put FULLSCREEN_DESKTOP windows in their own Space, without a toggle button or menubar, later */ if (window->flags & SDL_WINDOW_RESIZABLE) { @@ -1051,7 +1254,8 @@ - (void)resetCursorRects /* Create a default view for this window */ rect = [nswindow contentRectForFrameRect:[nswindow frame]]; - NSView *contentView = [[SDLView alloc] initWithFrame:rect]; + SDLView *contentView = [[SDLView alloc] initWithFrame:rect]; + [contentView setSDLWindow:window]; if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { if ([contentView respondsToSelector:@selector(setWantsBestResolutionOpenGLSurface:)]) { @@ -1062,70 +1266,58 @@ - (void)resetCursorRects [nswindow setContentView: contentView]; [contentView release]; - [pool release]; + /* Allow files and folders to be dragged onto the window by users */ + [nswindow registerForDraggedTypes:[NSArray arrayWithObject:(NSString *)kUTTypeFileURL]]; if (SetupWindowData(_this, window, nswindow, SDL_TRUE) < 0) { [nswindow release]; return -1; } return 0; -} +}} int Cocoa_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) +{ @autoreleasepool { - NSAutoreleasePool *pool; NSWindow *nswindow = (NSWindow *) data; NSString *title; - pool = [[NSAutoreleasePool alloc] init]; - /* Query the title from the existing window */ title = [nswindow title]; if (title) { window->title = SDL_strdup([title UTF8String]); } - [pool release]; - return SetupWindowData(_this, window, nswindow, SDL_FALSE); -} +}} void Cocoa_SetWindowTitle(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + const char *title = window->title ? window->title : ""; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; - NSString *string; - - if(window->title) { - string = [[NSString alloc] initWithUTF8String:window->title]; - } else { - string = [[NSString alloc] init]; - } + NSString *string = [[NSString alloc] initWithUTF8String:title]; [nswindow setTitle:string]; [string release]; - - [pool release]; -} +}} void Cocoa_SetWindowIcon(_THIS, SDL_Window * window, SDL_Surface * icon) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSImage *nsimage = Cocoa_CreateImage(icon); if (nsimage) { [NSApp setApplicationIconImage:nsimage]; } - - [pool release]; -} +}} void Cocoa_SetWindowPosition(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = windata->nswindow; NSRect rect; @@ -1135,7 +1327,7 @@ - (void)resetCursorRects rect.origin.y = window->y; rect.size.width = window->w; rect.size.height = window->h; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); moveHack = s_moveHack; s_moveHack = 0; @@ -1143,31 +1335,39 @@ - (void)resetCursorRects s_moveHack = moveHack; ScheduleContextUpdates(windata); - - [pool release]; -} +}} void Cocoa_SetWindowSize(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = windata->nswindow; - NSSize size; + NSRect rect; + Uint32 moveHack; - size.width = window->w; - size.height = window->h; - [nswindow setContentSize:size]; + /* Cocoa will resize the window from the bottom-left rather than the + * top-left when -[nswindow setContentSize:] is used, so we must set the + * entire frame based on the new size, in order to preserve the position. + */ + rect.origin.x = window->x; + rect.origin.y = window->y; + rect.size.width = window->w; + rect.size.height = window->h; + ConvertNSRect([nswindow screen], (window->flags & FULLSCREEN_MASK), &rect); - ScheduleContextUpdates(windata); + moveHack = s_moveHack; + s_moveHack = 0; + [nswindow setFrame:[nswindow frameRectForContentRect:rect] display:YES]; + s_moveHack = moveHack; - [pool release]; -} + ScheduleContextUpdates(windata); +}} void Cocoa_SetWindowMinimumSize(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSSize minSize; @@ -1175,14 +1375,12 @@ - (void)resetCursorRects minSize.height = window->min_h; [windata->nswindow setContentMinSize:minSize]; - - [pool release]; -} +}} void Cocoa_SetWindowMaximumSize(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSSize maxSize; @@ -1190,14 +1388,12 @@ - (void)resetCursorRects maxSize.height = window->max_h; [windata->nswindow setContentMaxSize:maxSize]; - - [pool release]; -} +}} void Cocoa_ShowWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windowData = ((SDL_WindowData *) window->driverdata); NSWindow *nswindow = windowData->nswindow; @@ -1206,23 +1402,21 @@ - (void)resetCursorRects [nswindow makeKeyAndOrderFront:nil]; [windowData->listener resumeVisibleObservation]; } - [pool release]; -} +}} void Cocoa_HideWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; [nswindow orderOut:nil]; - [pool release]; -} +}} void Cocoa_RaiseWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windowData = ((SDL_WindowData *) window->driverdata); NSWindow *nswindow = windowData->nswindow; @@ -1231,31 +1425,28 @@ - (void)resetCursorRects */ [windowData->listener pauseVisibleObservation]; if (![nswindow isMiniaturized] && [nswindow isVisible]) { + [NSApp activateIgnoringOtherApps:YES]; [nswindow makeKeyAndOrderFront:nil]; } [windowData->listener resumeVisibleObservation]; - - [pool release]; -} +}} void Cocoa_MaximizeWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *windata = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = windata->nswindow; [nswindow zoom:nil]; ScheduleContextUpdates(windata); - - [pool release]; -} +}} void Cocoa_MinimizeWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = data->nswindow; @@ -1264,13 +1455,12 @@ - (void)resetCursorRects } else { [nswindow miniaturize:nil]; } - [pool release]; -} +}} void Cocoa_RestoreWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSWindow *nswindow = ((SDL_WindowData *) window->driverdata)->nswindow; if ([nswindow isMiniaturized]) { @@ -1278,8 +1468,7 @@ - (void)resetCursorRects } else if ((window->flags & SDL_WINDOW_RESIZABLE) && [nswindow isZoomed]) { [nswindow zoom:nil]; } - [pool release]; -} +}} static NSWindow * Cocoa_RebuildWindow(SDL_WindowData * data, NSWindow * nswindow, unsigned style) @@ -1292,6 +1481,7 @@ - (void)resetCursorRects [data->listener close]; data->nswindow = [[SDLWindow alloc] initWithContentRect:[[nswindow contentView] frame] styleMask:style backing:NSBackingStoreBuffered defer:NO screen:[nswindow screen]]; [data->nswindow setContentView:[nswindow contentView]]; + [data->nswindow registerForDraggedTypes:[NSArray arrayWithObject:(NSString *)kUTTypeFileURL]]; /* See comment in SetupWindowData. */ [data->nswindow setOneShot:NO]; [data->listener listen:data]; @@ -1303,21 +1493,20 @@ - (void)resetCursorRects void Cocoa_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; if (SetWindowStyle(window, GetWindowStyle(window))) { if (bordered) { Cocoa_SetWindowTitle(_this, window); /* this got blanked out. */ } } - [pool release]; -} +}} void Cocoa_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; NSWindow *nswindow = data->nswindow; NSRect rect; @@ -1335,7 +1524,7 @@ - (void)resetCursorRects rect.origin.y = bounds.y; rect.size.width = bounds.w; rect.size.height = bounds.h; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], fullscreen, &rect); /* Hack to fix origin on Mac OS X 10.4 */ NSRect screenRect = [[nswindow screen] frame]; @@ -1353,10 +1542,15 @@ - (void)resetCursorRects rect.origin.y = window->windowed.y; rect.size.width = window->windowed.w; rect.size.height = window->windowed.h; - ConvertNSRect(&rect); + ConvertNSRect([nswindow screen], fullscreen, &rect); if ([nswindow respondsToSelector: @selector(setStyleMask:)]) { [nswindow performSelector: @selector(setStyleMask:) withObject: (id)(uintptr_t)GetWindowStyle(window)]; + + /* Hack to restore window decorations on Mac OS X 10.10 */ + NSRect frameRect = [nswindow frame]; + [nswindow setFrame:NSMakeRect(frameRect.origin.x, frameRect.origin.y, frameRect.size.width + 1, frameRect.size.height) display:NO]; + [nswindow setFrame:frameRect display:NO]; } else { nswindow = Cocoa_RebuildWindow(data, nswindow, GetWindowStyle(window)); } @@ -1391,9 +1585,7 @@ - (void)resetCursorRects } ScheduleContextUpdates(data); - - [pool release]; -} +}} int Cocoa_SetWindowGammaRamp(_THIS, SDL_Window * window, const Uint16 * ramp) @@ -1464,11 +1656,11 @@ - (void)resetCursorRects CGDisplayMoveCursorToPoint(kCGDirectMainDisplay, cgpoint); } - if ( window->flags & SDL_WINDOW_FULLSCREEN ) { - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - - if (SDL_ShouldAllowTopmost() && (window->flags & SDL_WINDOW_INPUT_FOCUS)) { + if ( data && (window->flags & SDL_WINDOW_FULLSCREEN) ) { + if (SDL_ShouldAllowTopmost() && (window->flags & SDL_WINDOW_INPUT_FOCUS) + && ![data->listener isInFullscreenSpace]) { /* OpenGL is rendering to the window, so make it visible! */ + /* Doing this in 10.11 while in a Space breaks things (bug #3152) */ [data->nswindow setLevel:CGShieldingWindowLevel()]; } else { [data->nswindow setLevel:kCGNormalWindowLevel]; @@ -1478,11 +1670,14 @@ - (void)resetCursorRects void Cocoa_DestroyWindow(_THIS, SDL_Window * window) +{ @autoreleasepool { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; if (data) { + if ([data->listener isInFullscreenSpace]) { + [NSMenu setMenuBarVisible:YES]; + } [data->listener close]; [data->listener release]; if (data->created) { @@ -1498,8 +1693,8 @@ - (void)resetCursorRects SDL_free(data); } - [pool release]; -} + window->driverdata = NULL; +}} SDL_bool Cocoa_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) @@ -1531,18 +1726,45 @@ - (void)resetCursorRects SDL_bool Cocoa_SetWindowFullscreenSpace(SDL_Window * window, SDL_bool state) +{ @autoreleasepool { SDL_bool succeeded = SDL_FALSE; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; SDL_WindowData *data = (SDL_WindowData *) window->driverdata; if ([data->listener setFullscreenSpace:(state ? YES : NO)]) { + const int maxattempts = 3; + int attempt = 0; + while (++attempt <= maxattempts) { + /* Wait for the transition to complete, so application changes + take effect properly (e.g. setting the window size, etc.) + */ + const int limit = 10000; + int count = 0; + while ([data->listener isInFullscreenSpaceTransition]) { + if ( ++count == limit ) { + /* Uh oh, transition isn't completing. Should we assert? */ + break; + } + SDL_Delay(1); + SDL_PumpEvents(); + } + if ([data->listener isInFullscreenSpace] == (state ? YES : NO)) + break; + /* Try again, the last attempt was interrupted by user gestures */ + if (![data->listener setFullscreenSpace:(state ? YES : NO)]) + break; /* ??? */ + } + /* Return TRUE to prevent non-space fullscreen logic from running */ succeeded = SDL_TRUE; } - [pool release]; - return succeeded; +}} + +int +Cocoa_SetWindowHitTest(SDL_Window * window, SDL_bool enabled) +{ + return 0; /* just succeed, the real work is done elsewhere. */ } #endif /* SDL_VIDEO_DRIVER_COCOA */ diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.c index b48a106983..4b979f36c8 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -161,7 +161,7 @@ DirectFB_WM_RedrawLayout(_THIS, SDL_Window * window) y, w - 2 * d); /* Caption */ - if (window->title) { + if (*window->title) { s->SetColor(s, COLOR_EXPAND(t->font_color)); DrawCraption(_this, s, (x - w) / 2, t->top_size + d, window->title); } diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.h index 0bfe07e0d9..f5f9a46fda 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_WM.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.c index 49c737b042..52a4b53670 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.h index ba57f45336..bd99a3faf3 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_dyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.c index 9c6c79407c..0bf9fdba58 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.h index db5c7f0fdf..2931ad2a1c 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.c index 73de1fc015..9d0abf5601 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.h index 7999f606c4..9911eff568 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_modes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.c index 93798f8e3b..0657d2f06a 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.h index 7ac4868208..4e2f27a92e 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.c index 1a378792d3..065854a08f 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.h index ecd5bbafbd..6391ee4f3d 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.c index 61f9b00c51..4a1bf46b8e 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -52,7 +52,7 @@ #define SDL_DFB_RENDERERDATA(rend) DirectFB_RenderData *renddata = ((rend) ? (DirectFB_RenderData *) (rend)->driverdata : NULL) -/* GDI renderer implementation */ +/* DirectFB renderer implementation */ static SDL_Renderer *DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags); diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.h index 5405a5e5f9..be016b0844 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_render.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.c index 64e91f61f1..3239e30214 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.h index 99bff80049..46be39fbf7 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.c index 55e9ece3c8..5579759eb0 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -156,7 +156,7 @@ DirectFB_CreateDevice(int devindex) return device; error: if (device) - free(device); + SDL_free(device); return (0); } @@ -238,7 +238,7 @@ DirectFB_VideoInit(_THIS) if (!devdata->use_linux_input) { - SDL_DFB_LOG("Disabling linxu input\n"); + SDL_DFB_LOG("Disabling linux input\n"); DirectFBSetOption("disable-module", "linux_input"); } diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.h index 82250b63d2..b36ace0dd6 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.c b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.c index be49696130..3b8b45d442 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.c +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -90,7 +90,7 @@ DirectFB_CreateWindow(_THIS, SDL_Window * window) desc.height = windata->size.h; desc.pixelformat = dispdata->pixelformat; desc.surface_caps = DSCAPS_PREMULTIPLIED; -#if DIRECTFB_MAJOR_VERSION == 1 && DIRECTFB_MINOR_VERSION >= 4 +#if DIRECTFB_MAJOR_VERSION == 1 && DIRECTFB_MINOR_VERSION >= 6 if (window->flags & SDL_WINDOW_OPENGL) { desc.surface_caps |= DSCAPS_GL; } diff --git a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.h b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.h index a16d160952..658cc8749a 100644 --- a/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.h +++ b/Engine/lib/sdl/src/video/directfb/SDL_DirectFB_window.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullevents.c b/Engine/lib/sdl/src/video/dummy/SDL_nullevents.c index 22a34bbaa0..a5a9443045 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullevents.c +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullevents_c.h b/Engine/lib/sdl/src/video/dummy/SDL_nullevents_c.h index 41e28caa4e..d2f78698d5 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullevents_c.h +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer.c b/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer.c index 2f1bcab7aa..01c8a5abb2 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer.c +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer_c.h b/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer_c.h index 4c582d7d40..37d198f90e 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer_c.h +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullframebuffer_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.c b/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.c index 28147bd181..96f47813ad 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.c +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -82,7 +82,6 @@ DUMMY_CreateDevice(int devindex) device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { SDL_OutOfMemory(); - SDL_free(device); return (0); } diff --git a/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.h b/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.h index b0a76c064d..0126ba1837 100644 --- a/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.h +++ b/Engine/lib/sdl/src/video/dummy/SDL_nullvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.c b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.c new file mode 100644 index 0000000000..0f915c6f37 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.c @@ -0,0 +1,644 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN + +#include + +#include "../../events/SDL_events_c.h" +#include "../../events/SDL_keyboard_c.h" +#include "../../events/SDL_touch_c.h" + +#include "SDL_emscriptenevents.h" +#include "SDL_emscriptenvideo.h" + +#include "SDL_hints.h" + +#define FULLSCREEN_MASK ( SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN ) + +/* +.keyCode to scancode +https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent +https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode +*/ +static const SDL_Scancode emscripten_scancode_table[] = { + /* 0 */ SDL_SCANCODE_UNKNOWN, + /* 1 */ SDL_SCANCODE_UNKNOWN, + /* 2 */ SDL_SCANCODE_UNKNOWN, + /* 3 */ SDL_SCANCODE_CANCEL, + /* 4 */ SDL_SCANCODE_UNKNOWN, + /* 5 */ SDL_SCANCODE_UNKNOWN, + /* 6 */ SDL_SCANCODE_HELP, + /* 7 */ SDL_SCANCODE_UNKNOWN, + /* 8 */ SDL_SCANCODE_BACKSPACE, + /* 9 */ SDL_SCANCODE_TAB, + /* 10 */ SDL_SCANCODE_UNKNOWN, + /* 11 */ SDL_SCANCODE_UNKNOWN, + /* 12 */ SDL_SCANCODE_UNKNOWN, + /* 13 */ SDL_SCANCODE_RETURN, + /* 14 */ SDL_SCANCODE_UNKNOWN, + /* 15 */ SDL_SCANCODE_UNKNOWN, + /* 16 */ SDL_SCANCODE_LSHIFT, + /* 17 */ SDL_SCANCODE_LCTRL, + /* 18 */ SDL_SCANCODE_LALT, + /* 19 */ SDL_SCANCODE_PAUSE, + /* 20 */ SDL_SCANCODE_CAPSLOCK, + /* 21 */ SDL_SCANCODE_UNKNOWN, + /* 22 */ SDL_SCANCODE_UNKNOWN, + /* 23 */ SDL_SCANCODE_UNKNOWN, + /* 24 */ SDL_SCANCODE_UNKNOWN, + /* 25 */ SDL_SCANCODE_UNKNOWN, + /* 26 */ SDL_SCANCODE_UNKNOWN, + /* 27 */ SDL_SCANCODE_ESCAPE, + /* 28 */ SDL_SCANCODE_UNKNOWN, + /* 29 */ SDL_SCANCODE_UNKNOWN, + /* 30 */ SDL_SCANCODE_UNKNOWN, + /* 31 */ SDL_SCANCODE_UNKNOWN, + /* 32 */ SDL_SCANCODE_SPACE, + /* 33 */ SDL_SCANCODE_PAGEUP, + /* 34 */ SDL_SCANCODE_PAGEDOWN, + /* 35 */ SDL_SCANCODE_END, + /* 36 */ SDL_SCANCODE_HOME, + /* 37 */ SDL_SCANCODE_LEFT, + /* 38 */ SDL_SCANCODE_UP, + /* 39 */ SDL_SCANCODE_RIGHT, + /* 40 */ SDL_SCANCODE_DOWN, + /* 41 */ SDL_SCANCODE_UNKNOWN, + /* 42 */ SDL_SCANCODE_UNKNOWN, + /* 43 */ SDL_SCANCODE_UNKNOWN, + /* 44 */ SDL_SCANCODE_UNKNOWN, + /* 45 */ SDL_SCANCODE_INSERT, + /* 46 */ SDL_SCANCODE_DELETE, + /* 47 */ SDL_SCANCODE_UNKNOWN, + /* 48 */ SDL_SCANCODE_0, + /* 49 */ SDL_SCANCODE_1, + /* 50 */ SDL_SCANCODE_2, + /* 51 */ SDL_SCANCODE_3, + /* 52 */ SDL_SCANCODE_4, + /* 53 */ SDL_SCANCODE_5, + /* 54 */ SDL_SCANCODE_6, + /* 55 */ SDL_SCANCODE_7, + /* 56 */ SDL_SCANCODE_8, + /* 57 */ SDL_SCANCODE_9, + /* 58 */ SDL_SCANCODE_UNKNOWN, + /* 59 */ SDL_SCANCODE_SEMICOLON, + /* 60 */ SDL_SCANCODE_UNKNOWN, + /* 61 */ SDL_SCANCODE_EQUALS, + /* 62 */ SDL_SCANCODE_UNKNOWN, + /* 63 */ SDL_SCANCODE_UNKNOWN, + /* 64 */ SDL_SCANCODE_UNKNOWN, + /* 65 */ SDL_SCANCODE_A, + /* 66 */ SDL_SCANCODE_B, + /* 67 */ SDL_SCANCODE_C, + /* 68 */ SDL_SCANCODE_D, + /* 69 */ SDL_SCANCODE_E, + /* 70 */ SDL_SCANCODE_F, + /* 71 */ SDL_SCANCODE_G, + /* 72 */ SDL_SCANCODE_H, + /* 73 */ SDL_SCANCODE_I, + /* 74 */ SDL_SCANCODE_J, + /* 75 */ SDL_SCANCODE_K, + /* 76 */ SDL_SCANCODE_L, + /* 77 */ SDL_SCANCODE_M, + /* 78 */ SDL_SCANCODE_N, + /* 79 */ SDL_SCANCODE_O, + /* 80 */ SDL_SCANCODE_P, + /* 81 */ SDL_SCANCODE_Q, + /* 82 */ SDL_SCANCODE_R, + /* 83 */ SDL_SCANCODE_S, + /* 84 */ SDL_SCANCODE_T, + /* 85 */ SDL_SCANCODE_U, + /* 86 */ SDL_SCANCODE_V, + /* 87 */ SDL_SCANCODE_W, + /* 88 */ SDL_SCANCODE_X, + /* 89 */ SDL_SCANCODE_Y, + /* 90 */ SDL_SCANCODE_Z, + /* 91 */ SDL_SCANCODE_LGUI, + /* 92 */ SDL_SCANCODE_UNKNOWN, + /* 93 */ SDL_SCANCODE_APPLICATION, + /* 94 */ SDL_SCANCODE_UNKNOWN, + /* 95 */ SDL_SCANCODE_UNKNOWN, + /* 96 */ SDL_SCANCODE_KP_0, + /* 97 */ SDL_SCANCODE_KP_1, + /* 98 */ SDL_SCANCODE_KP_2, + /* 99 */ SDL_SCANCODE_KP_3, + /* 100 */ SDL_SCANCODE_KP_4, + /* 101 */ SDL_SCANCODE_KP_5, + /* 102 */ SDL_SCANCODE_KP_6, + /* 103 */ SDL_SCANCODE_KP_7, + /* 104 */ SDL_SCANCODE_KP_8, + /* 105 */ SDL_SCANCODE_KP_9, + /* 106 */ SDL_SCANCODE_KP_MULTIPLY, + /* 107 */ SDL_SCANCODE_KP_PLUS, + /* 108 */ SDL_SCANCODE_UNKNOWN, + /* 109 */ SDL_SCANCODE_KP_MINUS, + /* 110 */ SDL_SCANCODE_KP_PERIOD, + /* 111 */ SDL_SCANCODE_KP_DIVIDE, + /* 112 */ SDL_SCANCODE_F1, + /* 113 */ SDL_SCANCODE_F2, + /* 114 */ SDL_SCANCODE_F3, + /* 115 */ SDL_SCANCODE_F4, + /* 116 */ SDL_SCANCODE_F5, + /* 117 */ SDL_SCANCODE_F6, + /* 118 */ SDL_SCANCODE_F7, + /* 119 */ SDL_SCANCODE_F8, + /* 120 */ SDL_SCANCODE_F9, + /* 121 */ SDL_SCANCODE_F10, + /* 122 */ SDL_SCANCODE_F11, + /* 123 */ SDL_SCANCODE_F12, + /* 124 */ SDL_SCANCODE_F13, + /* 125 */ SDL_SCANCODE_F14, + /* 126 */ SDL_SCANCODE_F15, + /* 127 */ SDL_SCANCODE_F16, + /* 128 */ SDL_SCANCODE_F17, + /* 129 */ SDL_SCANCODE_F18, + /* 130 */ SDL_SCANCODE_F19, + /* 131 */ SDL_SCANCODE_F20, + /* 132 */ SDL_SCANCODE_F21, + /* 133 */ SDL_SCANCODE_F22, + /* 134 */ SDL_SCANCODE_F23, + /* 135 */ SDL_SCANCODE_F24, + /* 136 */ SDL_SCANCODE_UNKNOWN, + /* 137 */ SDL_SCANCODE_UNKNOWN, + /* 138 */ SDL_SCANCODE_UNKNOWN, + /* 139 */ SDL_SCANCODE_UNKNOWN, + /* 140 */ SDL_SCANCODE_UNKNOWN, + /* 141 */ SDL_SCANCODE_UNKNOWN, + /* 142 */ SDL_SCANCODE_UNKNOWN, + /* 143 */ SDL_SCANCODE_UNKNOWN, + /* 144 */ SDL_SCANCODE_NUMLOCKCLEAR, + /* 145 */ SDL_SCANCODE_SCROLLLOCK, + /* 146 */ SDL_SCANCODE_UNKNOWN, + /* 147 */ SDL_SCANCODE_UNKNOWN, + /* 148 */ SDL_SCANCODE_UNKNOWN, + /* 149 */ SDL_SCANCODE_UNKNOWN, + /* 150 */ SDL_SCANCODE_UNKNOWN, + /* 151 */ SDL_SCANCODE_UNKNOWN, + /* 152 */ SDL_SCANCODE_UNKNOWN, + /* 153 */ SDL_SCANCODE_UNKNOWN, + /* 154 */ SDL_SCANCODE_UNKNOWN, + /* 155 */ SDL_SCANCODE_UNKNOWN, + /* 156 */ SDL_SCANCODE_UNKNOWN, + /* 157 */ SDL_SCANCODE_UNKNOWN, + /* 158 */ SDL_SCANCODE_UNKNOWN, + /* 159 */ SDL_SCANCODE_UNKNOWN, + /* 160 */ SDL_SCANCODE_UNKNOWN, + /* 161 */ SDL_SCANCODE_UNKNOWN, + /* 162 */ SDL_SCANCODE_UNKNOWN, + /* 163 */ SDL_SCANCODE_UNKNOWN, + /* 164 */ SDL_SCANCODE_UNKNOWN, + /* 165 */ SDL_SCANCODE_UNKNOWN, + /* 166 */ SDL_SCANCODE_UNKNOWN, + /* 167 */ SDL_SCANCODE_UNKNOWN, + /* 168 */ SDL_SCANCODE_UNKNOWN, + /* 169 */ SDL_SCANCODE_UNKNOWN, + /* 170 */ SDL_SCANCODE_UNKNOWN, + /* 171 */ SDL_SCANCODE_UNKNOWN, + /* 172 */ SDL_SCANCODE_UNKNOWN, + /* 173 */ SDL_SCANCODE_MINUS, /*FX*/ + /* 174 */ SDL_SCANCODE_UNKNOWN, + /* 175 */ SDL_SCANCODE_UNKNOWN, + /* 176 */ SDL_SCANCODE_UNKNOWN, + /* 177 */ SDL_SCANCODE_UNKNOWN, + /* 178 */ SDL_SCANCODE_UNKNOWN, + /* 179 */ SDL_SCANCODE_UNKNOWN, + /* 180 */ SDL_SCANCODE_UNKNOWN, + /* 181 */ SDL_SCANCODE_UNKNOWN, + /* 182 */ SDL_SCANCODE_UNKNOWN, + /* 183 */ SDL_SCANCODE_UNKNOWN, + /* 184 */ SDL_SCANCODE_UNKNOWN, + /* 185 */ SDL_SCANCODE_UNKNOWN, + /* 186 */ SDL_SCANCODE_SEMICOLON, /*IE, Chrome, D3E legacy*/ + /* 187 */ SDL_SCANCODE_EQUALS, /*IE, Chrome, D3E legacy*/ + /* 188 */ SDL_SCANCODE_COMMA, + /* 189 */ SDL_SCANCODE_MINUS, /*IE, Chrome, D3E legacy*/ + /* 190 */ SDL_SCANCODE_PERIOD, + /* 191 */ SDL_SCANCODE_SLASH, + /* 192 */ SDL_SCANCODE_GRAVE, /*FX, D3E legacy (SDL_SCANCODE_APOSTROPHE in IE/Chrome)*/ + /* 193 */ SDL_SCANCODE_UNKNOWN, + /* 194 */ SDL_SCANCODE_UNKNOWN, + /* 195 */ SDL_SCANCODE_UNKNOWN, + /* 196 */ SDL_SCANCODE_UNKNOWN, + /* 197 */ SDL_SCANCODE_UNKNOWN, + /* 198 */ SDL_SCANCODE_UNKNOWN, + /* 199 */ SDL_SCANCODE_UNKNOWN, + /* 200 */ SDL_SCANCODE_UNKNOWN, + /* 201 */ SDL_SCANCODE_UNKNOWN, + /* 202 */ SDL_SCANCODE_UNKNOWN, + /* 203 */ SDL_SCANCODE_UNKNOWN, + /* 204 */ SDL_SCANCODE_UNKNOWN, + /* 205 */ SDL_SCANCODE_UNKNOWN, + /* 206 */ SDL_SCANCODE_UNKNOWN, + /* 207 */ SDL_SCANCODE_UNKNOWN, + /* 208 */ SDL_SCANCODE_UNKNOWN, + /* 209 */ SDL_SCANCODE_UNKNOWN, + /* 210 */ SDL_SCANCODE_UNKNOWN, + /* 211 */ SDL_SCANCODE_UNKNOWN, + /* 212 */ SDL_SCANCODE_UNKNOWN, + /* 213 */ SDL_SCANCODE_UNKNOWN, + /* 214 */ SDL_SCANCODE_UNKNOWN, + /* 215 */ SDL_SCANCODE_UNKNOWN, + /* 216 */ SDL_SCANCODE_UNKNOWN, + /* 217 */ SDL_SCANCODE_UNKNOWN, + /* 218 */ SDL_SCANCODE_UNKNOWN, + /* 219 */ SDL_SCANCODE_LEFTBRACKET, + /* 220 */ SDL_SCANCODE_BACKSLASH, + /* 221 */ SDL_SCANCODE_RIGHTBRACKET, + /* 222 */ SDL_SCANCODE_APOSTROPHE, /*FX, D3E legacy*/ +}; + + +/* "borrowed" from SDL_windowsevents.c */ +int +Emscripten_ConvertUTF32toUTF8(Uint32 codepoint, char * text) +{ + if (codepoint <= 0x7F) { + text[0] = (char) codepoint; + text[1] = '\0'; + } else if (codepoint <= 0x7FF) { + text[0] = 0xC0 | (char) ((codepoint >> 6) & 0x1F); + text[1] = 0x80 | (char) (codepoint & 0x3F); + text[2] = '\0'; + } else if (codepoint <= 0xFFFF) { + text[0] = 0xE0 | (char) ((codepoint >> 12) & 0x0F); + text[1] = 0x80 | (char) ((codepoint >> 6) & 0x3F); + text[2] = 0x80 | (char) (codepoint & 0x3F); + text[3] = '\0'; + } else if (codepoint <= 0x10FFFF) { + text[0] = 0xF0 | (char) ((codepoint >> 18) & 0x0F); + text[1] = 0x80 | (char) ((codepoint >> 12) & 0x3F); + text[2] = 0x80 | (char) ((codepoint >> 6) & 0x3F); + text[3] = 0x80 | (char) (codepoint & 0x3F); + text[4] = '\0'; + } else { + return SDL_FALSE; + } + return SDL_TRUE; +} + +EM_BOOL +Emscripten_HandleMouseMove(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + int mx = mouseEvent->canvasX, my = mouseEvent->canvasY; + EmscriptenPointerlockChangeEvent pointerlock_status; + + /* check for pointer lock */ + emscripten_get_pointerlock_status(&pointerlock_status); + + if (pointerlock_status.isActive) { + mx = mouseEvent->movementX; + my = mouseEvent->movementY; + } + + /* rescale (in case canvas is being scaled)*/ + double client_w, client_h; + emscripten_get_element_css_size(NULL, &client_w, &client_h); + + mx = mx * (window_data->window->w / (client_w * window_data->pixel_ratio)); + my = my * (window_data->window->h / (client_h * window_data->pixel_ratio)); + + SDL_SendMouseMotion(window_data->window, 0, pointerlock_status.isActive, mx, my); + return 0; +} + +EM_BOOL +Emscripten_HandleMouseButton(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + uint32_t sdl_button; + switch (mouseEvent->button) { + case 0: + sdl_button = SDL_BUTTON_LEFT; + break; + case 1: + sdl_button = SDL_BUTTON_MIDDLE; + break; + case 2: + sdl_button = SDL_BUTTON_RIGHT; + break; + default: + return 0; + } + SDL_SendMouseButton(window_data->window, 0, eventType == EMSCRIPTEN_EVENT_MOUSEDOWN ? SDL_PRESSED : SDL_RELEASED, sdl_button); + return 1; +} + +EM_BOOL +Emscripten_HandleMouseFocus(int eventType, const EmscriptenMouseEvent *mouseEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + SDL_SendWindowEvent(window_data->window, eventType == EMSCRIPTEN_EVENT_MOUSEENTER ? SDL_WINDOWEVENT_ENTER : SDL_WINDOWEVENT_LEAVE, 0, 0); + return 1; +} + +EM_BOOL +Emscripten_HandleWheel(int eventType, const EmscriptenWheelEvent *wheelEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + SDL_SendMouseWheel(window_data->window, 0, wheelEvent->deltaX, -wheelEvent->deltaY, SDL_MOUSEWHEEL_NORMAL); + return 1; +} + +EM_BOOL +Emscripten_HandleFocus(int eventType, const EmscriptenFocusEvent *wheelEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + SDL_SendWindowEvent(window_data->window, eventType == EMSCRIPTEN_EVENT_FOCUS ? SDL_WINDOWEVENT_FOCUS_GAINED : SDL_WINDOWEVENT_FOCUS_LOST, 0, 0); + return 1; +} + +EM_BOOL +Emscripten_HandleTouch(int eventType, const EmscriptenTouchEvent *touchEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + int i; + + SDL_TouchID deviceId = 1; + if (SDL_AddTouch(deviceId, "") < 0) { + return 0; + } + + for (i = 0; i < touchEvent->numTouches; i++) { + SDL_FingerID id; + float x, y; + + if (!touchEvent->touches[i].isChanged) + continue; + + id = touchEvent->touches[i].identifier; + x = touchEvent->touches[i].canvasX / (float)window_data->windowed_width; + y = touchEvent->touches[i].canvasY / (float)window_data->windowed_height; + + if (eventType == EMSCRIPTEN_EVENT_TOUCHMOVE) { + SDL_SendTouchMotion(deviceId, id, x, y, 1.0f); + } else if (eventType == EMSCRIPTEN_EVENT_TOUCHSTART) { + SDL_SendTouch(deviceId, id, SDL_TRUE, x, y, 1.0f); + } else { + SDL_SendTouch(deviceId, id, SDL_FALSE, x, y, 1.0f); + } + } + + + return 1; +} + +EM_BOOL +Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) +{ + Uint32 scancode; + + /* .keyCode is deprecated, but still the most reliable way to get keys */ + if (keyEvent->keyCode < SDL_arraysize(emscripten_scancode_table)) { + scancode = emscripten_scancode_table[keyEvent->keyCode]; + + if (scancode != SDL_SCANCODE_UNKNOWN) { + + if (keyEvent->location == DOM_KEY_LOCATION_RIGHT) { + switch (scancode) { + case SDL_SCANCODE_LSHIFT: + scancode = SDL_SCANCODE_RSHIFT; + break; + case SDL_SCANCODE_LCTRL: + scancode = SDL_SCANCODE_RCTRL; + break; + case SDL_SCANCODE_LALT: + scancode = SDL_SCANCODE_RALT; + break; + case SDL_SCANCODE_LGUI: + scancode = SDL_SCANCODE_RGUI; + break; + } + } + SDL_SendKeyboardKey(eventType == EMSCRIPTEN_EVENT_KEYDOWN ? + SDL_PRESSED : SDL_RELEASED, scancode); + } + } + + /* if we prevent keydown, we won't get keypress + * also we need to ALWAYS prevent backspace and tab otherwise chrome takes action and does bad navigation UX + */ + return SDL_GetEventState(SDL_TEXTINPUT) != SDL_ENABLE || eventType != EMSCRIPTEN_EVENT_KEYDOWN + || keyEvent->keyCode == 8 /* backspace */ || keyEvent->keyCode == 9 /* tab */; +} + +EM_BOOL +Emscripten_HandleKeyPress(int eventType, const EmscriptenKeyboardEvent *keyEvent, void *userData) +{ + char text[5]; + if (Emscripten_ConvertUTF32toUTF8(keyEvent->charCode, text)) { + SDL_SendKeyboardText(text); + } + return 1; +} + +EM_BOOL +Emscripten_HandleFullscreenChange(int eventType, const EmscriptenFullscreenChangeEvent *fullscreenChangeEvent, void *userData) +{ + /*make sure this is actually our element going fullscreen*/ + if(SDL_strcmp(fullscreenChangeEvent->id, "SDLFullscreenElement") != 0) + return 0; + + SDL_WindowData *window_data = userData; + if(fullscreenChangeEvent->isFullscreen) + { + SDL_bool is_desktop_fullscreen; + window_data->window->flags |= window_data->requested_fullscreen_mode; + + if(!window_data->requested_fullscreen_mode) + window_data->window->flags |= SDL_WINDOW_FULLSCREEN_DESKTOP; /*we didn't reqest fullscreen*/ + + window_data->requested_fullscreen_mode = 0; + + is_desktop_fullscreen = (window_data->window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP; + + /*update size*/ + if(window_data->window->flags & SDL_WINDOW_RESIZABLE || is_desktop_fullscreen) + { + emscripten_set_canvas_size(fullscreenChangeEvent->screenWidth, fullscreenChangeEvent->screenHeight); + SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, fullscreenChangeEvent->screenWidth, fullscreenChangeEvent->screenHeight); + } + else + { + /*preserve ratio*/ + double w = window_data->window->w; + double h = window_data->window->h; + double factor = SDL_min(fullscreenChangeEvent->screenWidth / w, fullscreenChangeEvent->screenHeight / h); + emscripten_set_element_css_size(NULL, w * factor, h * factor); + } + } + else + { + EM_ASM({ + //un-reparent canvas (similar to Module.requestFullscreen) + var canvas = Module['canvas']; + if(canvas.parentNode.id == "SDLFullscreenElement") { + var canvasContainer = canvas.parentNode; + canvasContainer.parentNode.insertBefore(canvas, canvasContainer); + canvasContainer.parentNode.removeChild(canvasContainer); + } + }); + double unscaled_w = window_data->windowed_width / window_data->pixel_ratio; + double unscaled_h = window_data->windowed_height / window_data->pixel_ratio; + emscripten_set_canvas_size(window_data->windowed_width, window_data->windowed_height); + + if (!window_data->external_size && window_data->pixel_ratio != 1.0f) { + emscripten_set_element_css_size(NULL, unscaled_w, unscaled_h); + } + + SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, unscaled_w, unscaled_h); + + window_data->window->flags &= ~FULLSCREEN_MASK; + } + + return 0; +} + +EM_BOOL +Emscripten_HandleResize(int eventType, const EmscriptenUiEvent *uiEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + if(window_data->window->flags & FULLSCREEN_MASK) + { + SDL_bool is_desktop_fullscreen = (window_data->window->flags & SDL_WINDOW_FULLSCREEN_DESKTOP) == SDL_WINDOW_FULLSCREEN_DESKTOP; + + if(window_data->window->flags & SDL_WINDOW_RESIZABLE || is_desktop_fullscreen) + { + emscripten_set_canvas_size(uiEvent->windowInnerWidth * window_data->pixel_ratio, uiEvent->windowInnerHeight * window_data->pixel_ratio); + SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, uiEvent->windowInnerWidth, uiEvent->windowInnerHeight); + } + } + else + { + /* this will only work if the canvas size is set through css */ + if(window_data->window->flags & SDL_WINDOW_RESIZABLE) + { + double w = window_data->window->w; + double h = window_data->window->h; + + if(window_data->external_size) { + emscripten_get_element_css_size(NULL, &w, &h); + } + + emscripten_set_canvas_size(w * window_data->pixel_ratio, h * window_data->pixel_ratio); + + /* set_canvas_size unsets this */ + if (!window_data->external_size && window_data->pixel_ratio != 1.0f) { + emscripten_set_element_css_size(NULL, w, h); + } + + SDL_SendWindowEvent(window_data->window, SDL_WINDOWEVENT_RESIZED, w, h); + } + } + + return 0; +} + +EM_BOOL +Emscripten_HandleVisibilityChange(int eventType, const EmscriptenVisibilityChangeEvent *visEvent, void *userData) +{ + SDL_WindowData *window_data = userData; + SDL_SendWindowEvent(window_data->window, visEvent->hidden ? SDL_WINDOWEVENT_HIDDEN : SDL_WINDOWEVENT_SHOWN, 0, 0); + return 0; +} + +void +Emscripten_RegisterEventHandlers(SDL_WindowData *data) +{ + /* There is only one window and that window is the canvas */ + emscripten_set_mousemove_callback("#canvas", data, 0, Emscripten_HandleMouseMove); + + emscripten_set_mousedown_callback("#canvas", data, 0, Emscripten_HandleMouseButton); + emscripten_set_mouseup_callback("#canvas", data, 0, Emscripten_HandleMouseButton); + + emscripten_set_mouseenter_callback("#canvas", data, 0, Emscripten_HandleMouseFocus); + emscripten_set_mouseleave_callback("#canvas", data, 0, Emscripten_HandleMouseFocus); + + emscripten_set_wheel_callback("#canvas", data, 0, Emscripten_HandleWheel); + + emscripten_set_focus_callback("#canvas", data, 0, Emscripten_HandleFocus); + emscripten_set_blur_callback("#canvas", data, 0, Emscripten_HandleFocus); + + emscripten_set_touchstart_callback("#canvas", data, 0, Emscripten_HandleTouch); + emscripten_set_touchend_callback("#canvas", data, 0, Emscripten_HandleTouch); + emscripten_set_touchmove_callback("#canvas", data, 0, Emscripten_HandleTouch); + emscripten_set_touchcancel_callback("#canvas", data, 0, Emscripten_HandleTouch); + + /* Keyboard events are awkward */ + const char *keyElement = SDL_GetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT); + if (!keyElement) keyElement = "#window"; + + emscripten_set_keydown_callback(keyElement, data, 0, Emscripten_HandleKey); + emscripten_set_keyup_callback(keyElement, data, 0, Emscripten_HandleKey); + emscripten_set_keypress_callback(keyElement, data, 0, Emscripten_HandleKeyPress); + + emscripten_set_fullscreenchange_callback("#document", data, 0, Emscripten_HandleFullscreenChange); + + emscripten_set_resize_callback("#window", data, 0, Emscripten_HandleResize); + + emscripten_set_visibilitychange_callback(data, 0, Emscripten_HandleVisibilityChange); +} + +void +Emscripten_UnregisterEventHandlers(SDL_WindowData *data) +{ + /* only works due to having one window */ + emscripten_set_mousemove_callback("#canvas", NULL, 0, NULL); + + emscripten_set_mousedown_callback("#canvas", NULL, 0, NULL); + emscripten_set_mouseup_callback("#canvas", NULL, 0, NULL); + + emscripten_set_mouseenter_callback("#canvas", NULL, 0, NULL); + emscripten_set_mouseleave_callback("#canvas", NULL, 0, NULL); + + emscripten_set_wheel_callback("#canvas", NULL, 0, NULL); + + emscripten_set_focus_callback("#canvas", NULL, 0, NULL); + emscripten_set_blur_callback("#canvas", NULL, 0, NULL); + + emscripten_set_touchstart_callback("#canvas", NULL, 0, NULL); + emscripten_set_touchend_callback("#canvas", NULL, 0, NULL); + emscripten_set_touchmove_callback("#canvas", NULL, 0, NULL); + emscripten_set_touchcancel_callback("#canvas", NULL, 0, NULL); + + const char *target = SDL_GetHint(SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT); + if (!target) { + target = "#window"; + } + + emscripten_set_keydown_callback(target, NULL, 0, NULL); + emscripten_set_keyup_callback(target, NULL, 0, NULL); + + emscripten_set_keypress_callback(target, NULL, 0, NULL); + + emscripten_set_fullscreenchange_callback("#document", NULL, 0, NULL); + + emscripten_set_resize_callback("#window", NULL, 0, NULL); + + emscripten_set_visibilitychange_callback(NULL, 0, NULL); +} + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.h b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.h new file mode 100644 index 0000000000..d5b65f8545 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.h @@ -0,0 +1,36 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +#ifndef _SDL_emscriptenevents_h +#define _SDL_emscriptenevents_h + +#include "SDL_emscriptenvideo.h" + +extern void +Emscripten_RegisterEventHandlers(SDL_WindowData *data); + +extern void +Emscripten_UnregisterEventHandlers(SDL_WindowData *data); +#endif /* _SDL_emscriptenevents_h */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.c b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.c new file mode 100644 index 0000000000..a26e23ae65 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.c @@ -0,0 +1,136 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN + +#include "SDL_emscriptenvideo.h" +#include "SDL_emscriptenframebuffer.h" + + +int Emscripten_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch) +{ + SDL_Surface *surface; + const Uint32 surface_format = SDL_PIXELFORMAT_BGR888; + int w, h; + int bpp; + Uint32 Rmask, Gmask, Bmask, Amask; + + /* Free the old framebuffer surface */ + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + surface = data->surface; + SDL_FreeSurface(surface); + + /* Create a new one */ + SDL_PixelFormatEnumToMasks(surface_format, &bpp, &Rmask, &Gmask, &Bmask, &Amask); + SDL_GetWindowSize(window, &w, &h); + + surface = SDL_CreateRGBSurface(0, w, h, bpp, Rmask, Gmask, Bmask, Amask); + if (!surface) { + return -1; + } + + /* Save the info and return! */ + data->surface = surface; + *format = surface_format; + *pixels = surface->pixels; + *pitch = surface->pitch; + return 0; +} + +int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects) +{ + SDL_Surface *surface; + + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + surface = data->surface; + if (!surface) { + return SDL_SetError("Couldn't find framebuffer surface for window"); + } + + /* Send the data to the display */ + + EM_ASM_INT({ + //TODO: don't create context every update + var ctx = Module['canvas'].getContext('2d'); + + //library_sdl.js SDL_UnlockSurface + var image = ctx.createImageData($0, $1); + var data = image.data; + var src = $2 >> 2; + var dst = 0; + var isScreen = true; + var num; + if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { + // IE10/IE11: ImageData objects are backed by the deprecated CanvasPixelArray, + // not UInt8ClampedArray. These don't have buffers, so we need to revert + // to copying a byte at a time. We do the undefined check because modern + // browsers do not define CanvasPixelArray anymore. + num = data.length; + while (dst < num) { + var val = HEAP32[src]; // This is optimized. Instead, we could do {{{ makeGetValue('buffer', 'dst', 'i32') }}}; + data[dst ] = val & 0xff; + data[dst+1] = (val >> 8) & 0xff; + data[dst+2] = (val >> 16) & 0xff; + data[dst+3] = isScreen ? 0xff : ((val >> 24) & 0xff); + src++; + dst += 4; + } + } else { + var data32 = new Uint32Array(data.buffer); + num = data32.length; + if (isScreen) { + while (dst < num) { + // HEAP32[src++] is an optimization. Instead, we could do {{{ makeGetValue('buffer', 'dst', 'i32') }}}; + data32[dst++] = HEAP32[src++] | 0xff000000; + } + } else { + while (dst < num) { + data32[dst++] = HEAP32[src++]; + } + } + } + + ctx.putImageData(image, 0, 0); + return 0; + }, surface->w, surface->h, surface->pixels); + + /*if (SDL_getenv("SDL_VIDEO_Emscripten_SAVE_FRAMES")) { + static int frame_number = 0; + char file[128]; + SDL_snprintf(file, sizeof(file), "SDL_window%d-%8.8d.bmp", + SDL_GetWindowID(window), ++frame_number); + SDL_SaveBMP(surface, file); + }*/ + return 0; +} + +void Emscripten_DestroyWindowFramebuffer(_THIS, SDL_Window * window) +{ + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + + SDL_FreeSurface(data->surface); + data->surface = NULL; +} + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.h b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.h new file mode 100644 index 0000000000..b2a6d3b370 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.h @@ -0,0 +1,32 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_emscriptenframebuffer_h +#define _SDL_emscriptenframebuffer_h + +extern int Emscripten_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch); +extern int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rect * rects, int numrects); +extern void Emscripten_DestroyWindowFramebuffer(_THIS, SDL_Window * window); + +#endif /* _SDL_emscriptenframebuffer_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.c b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.c new file mode 100644 index 0000000000..2a68dd95c8 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.c @@ -0,0 +1,232 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN + +#include +#include + +#include "SDL_emscriptenmouse.h" + +#include "../../events/SDL_mouse_c.h" +#include "SDL_assert.h" + + +static SDL_Cursor* +Emscripten_CreateDefaultCursor() +{ + SDL_Cursor* cursor; + Emscripten_CursorData *curdata; + + cursor = SDL_calloc(1, sizeof(SDL_Cursor)); + if (cursor) { + curdata = (Emscripten_CursorData *) SDL_calloc(1, sizeof(*curdata)); + if (!curdata) { + SDL_OutOfMemory(); + SDL_free(cursor); + return NULL; + } + + curdata->system_cursor = "default"; + cursor->driverdata = curdata; + } + else { + SDL_OutOfMemory(); + } + + return cursor; +} + +static SDL_Cursor* +Emscripten_CreateCursor(SDL_Surface* sruface, int hot_x, int hot_y) +{ + return Emscripten_CreateDefaultCursor(); +} + +static SDL_Cursor* +Emscripten_CreateSystemCursor(SDL_SystemCursor id) +{ + SDL_Cursor *cursor; + Emscripten_CursorData *curdata; + const char *cursor_name = NULL; + + switch(id) { + case SDL_SYSTEM_CURSOR_ARROW: + cursor_name = "default"; + break; + case SDL_SYSTEM_CURSOR_IBEAM: + cursor_name = "text"; + break; + case SDL_SYSTEM_CURSOR_WAIT: + cursor_name = "wait"; + break; + case SDL_SYSTEM_CURSOR_CROSSHAIR: + cursor_name = "crosshair"; + break; + case SDL_SYSTEM_CURSOR_WAITARROW: + cursor_name = "progress"; + break; + case SDL_SYSTEM_CURSOR_SIZENWSE: + cursor_name = "nwse-resize"; + break; + case SDL_SYSTEM_CURSOR_SIZENESW: + cursor_name = "nesw-resize"; + break; + case SDL_SYSTEM_CURSOR_SIZEWE: + cursor_name = "ew-resize"; + break; + case SDL_SYSTEM_CURSOR_SIZENS: + cursor_name = "ns-resize"; + break; + case SDL_SYSTEM_CURSOR_SIZEALL: + break; + case SDL_SYSTEM_CURSOR_NO: + cursor_name = "not-allowed"; + break; + case SDL_SYSTEM_CURSOR_HAND: + cursor_name = "pointer"; + break; + default: + SDL_assert(0); + return NULL; + } + + cursor = (SDL_Cursor *) SDL_calloc(1, sizeof(*cursor)); + if (!cursor) { + SDL_OutOfMemory(); + return NULL; + } + curdata = (Emscripten_CursorData *) SDL_calloc(1, sizeof(*curdata)); + if (!curdata) { + SDL_OutOfMemory(); + SDL_free(cursor); + return NULL; + } + + curdata->system_cursor = cursor_name; + cursor->driverdata = curdata; + + return cursor; +} + +static void +Emscripten_FreeCursor(SDL_Cursor* cursor) +{ + Emscripten_CursorData *curdata; + if (cursor) { + curdata = (Emscripten_CursorData *) cursor->driverdata; + + if (curdata != NULL) { + SDL_free(cursor->driverdata); + } + + SDL_free(cursor); + } +} + +static int +Emscripten_ShowCursor(SDL_Cursor* cursor) +{ + Emscripten_CursorData *curdata; + if (SDL_GetMouseFocus() != NULL) { + if(cursor && cursor->driverdata) { + curdata = (Emscripten_CursorData *) cursor->driverdata; + + if(curdata->system_cursor) { + EM_ASM_INT({ + if (Module['canvas']) { + Module['canvas'].style['cursor'] = Module['Pointer_stringify']($0); + } + return 0; + }, curdata->system_cursor); + } + } + else { + EM_ASM( + if (Module['canvas']) { + Module['canvas'].style['cursor'] = 'none'; + } + ); + } + } + return 0; +} + +static void +Emscripten_WarpMouse(SDL_Window* window, int x, int y) +{ + SDL_Unsupported(); +} + +static int +Emscripten_SetRelativeMouseMode(SDL_bool enabled) +{ + /* TODO: pointer lock isn't actually enabled yet */ + if(enabled) { + if(emscripten_request_pointerlock(NULL, 1) >= EMSCRIPTEN_RESULT_SUCCESS) { + return 0; + } + } else { + if(emscripten_exit_pointerlock() >= EMSCRIPTEN_RESULT_SUCCESS) { + return 0; + } + } + return -1; +} + +void +Emscripten_InitMouse() +{ + SDL_Mouse* mouse = SDL_GetMouse(); + + mouse->CreateCursor = Emscripten_CreateCursor; + mouse->ShowCursor = Emscripten_ShowCursor; + mouse->FreeCursor = Emscripten_FreeCursor; + mouse->WarpMouse = Emscripten_WarpMouse; + mouse->CreateSystemCursor = Emscripten_CreateSystemCursor; + mouse->SetRelativeMouseMode = Emscripten_SetRelativeMouseMode; + + SDL_SetDefaultCursor(Emscripten_CreateDefaultCursor()); +} + +void +Emscripten_FiniMouse() +{ + SDL_Mouse* mouse = SDL_GetMouse(); + + Emscripten_FreeCursor(mouse->def_cursor); + mouse->def_cursor = NULL; + + mouse->CreateCursor = NULL; + mouse->ShowCursor = NULL; + mouse->FreeCursor = NULL; + mouse->WarpMouse = NULL; + mouse->CreateSystemCursor = NULL; + mouse->SetRelativeMouseMode = NULL; +} + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.h b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.h new file mode 100644 index 0000000000..76ea849ede --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.h @@ -0,0 +1,39 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + + +#ifndef _SDL_emscriptenmouse_h +#define _SDL_emscriptenmouse_h + +typedef struct _Emscripten_CursorData +{ + const char *system_cursor; +} Emscripten_CursorData; + +extern void +Emscripten_InitMouse(); + +extern void +Emscripten_FiniMouse(); + +#endif /* _SDL_emscriptenmouse_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.c b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.c new file mode 100644 index 0000000000..12a37c6048 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.c @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL + +#include +#include + +#include "SDL_emscriptenvideo.h" +#include "SDL_emscriptenopengles.h" + +#define LOAD_FUNC(NAME) _this->egl_data->NAME = NAME; + +/* EGL implementation of SDL OpenGL support */ + +int +Emscripten_GLES_LoadLibrary(_THIS, const char *path) { + /*we can't load EGL dynamically*/ + _this->egl_data = (struct SDL_EGL_VideoData *) SDL_calloc(1, sizeof(SDL_EGL_VideoData)); + if (!_this->egl_data) { + return SDL_OutOfMemory(); + } + + LOAD_FUNC(eglGetDisplay); + LOAD_FUNC(eglInitialize); + LOAD_FUNC(eglTerminate); + LOAD_FUNC(eglGetProcAddress); + LOAD_FUNC(eglChooseConfig); + LOAD_FUNC(eglGetConfigAttrib); + LOAD_FUNC(eglCreateContext); + LOAD_FUNC(eglDestroyContext); + LOAD_FUNC(eglCreateWindowSurface); + LOAD_FUNC(eglDestroySurface); + LOAD_FUNC(eglMakeCurrent); + LOAD_FUNC(eglSwapBuffers); + LOAD_FUNC(eglSwapInterval); + LOAD_FUNC(eglWaitNative); + LOAD_FUNC(eglWaitGL); + LOAD_FUNC(eglBindAPI); + + _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (!_this->egl_data->egl_display) { + return SDL_SetError("Could not get EGL display"); + } + + if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { + return SDL_SetError("Could not initialize EGL"); + } + + _this->gl_config.driver_loaded = 1; + + if (path) { + SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1); + } else { + *_this->gl_config.driver_path = '\0'; + } + + return 0; +} + +void +Emscripten_GLES_DeleteContext(_THIS, SDL_GLContext context) +{ + /* + WebGL contexts can't actually be deleted, so we need to reset it. + ES2 renderer resets state on init anyway, clearing the canvas should be enough + */ + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + + SDL_EGL_DeleteContext(_this, context); +} + +SDL_EGL_CreateContext_impl(Emscripten) +SDL_EGL_SwapWindow_impl(Emscripten) +SDL_EGL_MakeCurrent_impl(Emscripten) + +void +Emscripten_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h) +{ + SDL_WindowData *data; + if (window->driverdata) { + data = (SDL_WindowData *) window->driverdata; + + if (w) { + *w = window->w * data->pixel_ratio; + } + + if (h) { + *h = window->h * data->pixel_ratio; + } + } +} + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.h b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.h new file mode 100644 index 0000000000..edafed8220 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.h @@ -0,0 +1,49 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_emscriptenopengles_h +#define _SDL_emscriptenopengles_h + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL + +#include "../SDL_sysvideo.h" +#include "../SDL_egl_c.h" + +/* OpenGLES functions */ +#define Emscripten_GLES_GetAttribute SDL_EGL_GetAttribute +#define Emscripten_GLES_GetProcAddress SDL_EGL_GetProcAddress +#define Emscripten_GLES_UnloadLibrary SDL_EGL_UnloadLibrary +#define Emscripten_GLES_SetSwapInterval SDL_EGL_SetSwapInterval +#define Emscripten_GLES_GetSwapInterval SDL_EGL_GetSwapInterval + +extern int Emscripten_GLES_LoadLibrary(_THIS, const char *path); +extern void Emscripten_GLES_DeleteContext(_THIS, SDL_GLContext context); +extern SDL_GLContext Emscripten_GLES_CreateContext(_THIS, SDL_Window * window); +extern void Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window); +extern int Emscripten_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); +extern void Emscripten_GLES_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h); + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN && SDL_VIDEO_OPENGL_EGL */ + +#endif /* _SDL_emscriptenopengles_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.c b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.c new file mode 100644 index 0000000000..302ca87930 --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.c @@ -0,0 +1,319 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_EMSCRIPTEN + +#include "SDL_video.h" +#include "SDL_mouse.h" +#include "../SDL_sysvideo.h" +#include "../SDL_pixels_c.h" +#include "../SDL_egl_c.h" +#include "../../events/SDL_events_c.h" + +#include "SDL_emscriptenvideo.h" +#include "SDL_emscriptenopengles.h" +#include "SDL_emscriptenframebuffer.h" +#include "SDL_emscriptenevents.h" +#include "SDL_emscriptenmouse.h" + +#define EMSCRIPTENVID_DRIVER_NAME "emscripten" + +/* Initialization/Query functions */ +static int Emscripten_VideoInit(_THIS); +static int Emscripten_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode); +static void Emscripten_VideoQuit(_THIS); + +static int Emscripten_CreateWindow(_THIS, SDL_Window * window); +static void Emscripten_SetWindowSize(_THIS, SDL_Window * window); +static void Emscripten_DestroyWindow(_THIS, SDL_Window * window); +static void Emscripten_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen); +static void Emscripten_PumpEvents(_THIS); + + +/* Emscripten driver bootstrap functions */ + +static int +Emscripten_Available(void) +{ + return (1); +} + +static void +Emscripten_DeleteDevice(SDL_VideoDevice * device) +{ + SDL_free(device); +} + +static SDL_VideoDevice * +Emscripten_CreateDevice(int devindex) +{ + SDL_VideoDevice *device; + + /* Initialize all variables that we clean on shutdown */ + device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); + if (!device) { + SDL_OutOfMemory(); + return (0); + } + + /* Set the function pointers */ + device->VideoInit = Emscripten_VideoInit; + device->VideoQuit = Emscripten_VideoQuit; + device->SetDisplayMode = Emscripten_SetDisplayMode; + + + device->PumpEvents = Emscripten_PumpEvents; + + device->CreateWindow = Emscripten_CreateWindow; + /*device->CreateWindowFrom = Emscripten_CreateWindowFrom; + device->SetWindowTitle = Emscripten_SetWindowTitle; + device->SetWindowIcon = Emscripten_SetWindowIcon; + device->SetWindowPosition = Emscripten_SetWindowPosition;*/ + device->SetWindowSize = Emscripten_SetWindowSize; + /*device->ShowWindow = Emscripten_ShowWindow; + device->HideWindow = Emscripten_HideWindow; + device->RaiseWindow = Emscripten_RaiseWindow; + device->MaximizeWindow = Emscripten_MaximizeWindow; + device->MinimizeWindow = Emscripten_MinimizeWindow; + device->RestoreWindow = Emscripten_RestoreWindow; + device->SetWindowGrab = Emscripten_SetWindowGrab;*/ + device->DestroyWindow = Emscripten_DestroyWindow; + device->SetWindowFullscreen = Emscripten_SetWindowFullscreen; + + device->CreateWindowFramebuffer = Emscripten_CreateWindowFramebuffer; + device->UpdateWindowFramebuffer = Emscripten_UpdateWindowFramebuffer; + device->DestroyWindowFramebuffer = Emscripten_DestroyWindowFramebuffer; + + device->GL_LoadLibrary = Emscripten_GLES_LoadLibrary; + device->GL_GetProcAddress = Emscripten_GLES_GetProcAddress; + device->GL_UnloadLibrary = Emscripten_GLES_UnloadLibrary; + device->GL_CreateContext = Emscripten_GLES_CreateContext; + device->GL_MakeCurrent = Emscripten_GLES_MakeCurrent; + device->GL_SetSwapInterval = Emscripten_GLES_SetSwapInterval; + device->GL_GetSwapInterval = Emscripten_GLES_GetSwapInterval; + device->GL_SwapWindow = Emscripten_GLES_SwapWindow; + device->GL_DeleteContext = Emscripten_GLES_DeleteContext; + device->GL_GetDrawableSize = Emscripten_GLES_GetDrawableSize; + + device->free = Emscripten_DeleteDevice; + + return device; +} + +VideoBootStrap Emscripten_bootstrap = { + EMSCRIPTENVID_DRIVER_NAME, "SDL emscripten video driver", + Emscripten_Available, Emscripten_CreateDevice +}; + + +int +Emscripten_VideoInit(_THIS) +{ + SDL_DisplayMode mode; + double css_w, css_h; + + /* Use a fake 32-bpp desktop mode */ + mode.format = SDL_PIXELFORMAT_RGB888; + + emscripten_get_element_css_size(NULL, &css_w, &css_h); + + mode.w = css_w; + mode.h = css_h; + + mode.refresh_rate = 0; + mode.driverdata = NULL; + if (SDL_AddBasicVideoDisplay(&mode) < 0) { + return -1; + } + + SDL_zero(mode); + SDL_AddDisplayMode(&_this->displays[0], &mode); + + Emscripten_InitMouse(); + + /* We're done! */ + return 0; +} + +static int +Emscripten_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) +{ + /* can't do this */ + return 0; +} + +static void +Emscripten_VideoQuit(_THIS) +{ + Emscripten_FiniMouse(); +} + +static void +Emscripten_PumpEvents(_THIS) +{ + /* do nothing. */ +} + +static int +Emscripten_CreateWindow(_THIS, SDL_Window * window) +{ + SDL_WindowData *wdata; + double scaled_w, scaled_h; + double css_w, css_h; + + /* Allocate window internal data */ + wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); + if (wdata == NULL) { + return SDL_OutOfMemory(); + } + + if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { + wdata->pixel_ratio = emscripten_get_device_pixel_ratio(); + } else { + wdata->pixel_ratio = 1.0f; + } + + scaled_w = SDL_floor(window->w * wdata->pixel_ratio); + scaled_h = SDL_floor(window->h * wdata->pixel_ratio); + + emscripten_set_canvas_size(scaled_w, scaled_h); + + emscripten_get_element_css_size(NULL, &css_w, &css_h); + + wdata->external_size = css_w != scaled_w || css_h != scaled_h; + + if ((window->flags & SDL_WINDOW_RESIZABLE) && wdata->external_size) { + /* external css has resized us */ + scaled_w = css_w * wdata->pixel_ratio; + scaled_h = css_h * wdata->pixel_ratio; + + emscripten_set_canvas_size(scaled_w, scaled_h); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, css_w, css_h); + } + + /* if the size is not being controlled by css, we need to scale down for hidpi */ + if (!wdata->external_size) { + if (wdata->pixel_ratio != 1.0f) { + /*scale canvas down*/ + emscripten_set_element_css_size(NULL, window->w, window->h); + } + } + + wdata->windowed_width = scaled_w; + wdata->windowed_height = scaled_h; + + if (window->flags & SDL_WINDOW_OPENGL) { + if (!_this->egl_data) { + if (SDL_GL_LoadLibrary(NULL) < 0) { + return -1; + } + } + wdata->egl_surface = SDL_EGL_CreateSurface(_this, 0); + + if (wdata->egl_surface == EGL_NO_SURFACE) { + return SDL_SetError("Could not create GLES window surface"); + } + } + + wdata->window = window; + + /* Setup driver data for this window */ + window->driverdata = wdata; + + /* One window, it always has focus */ + SDL_SetMouseFocus(window); + SDL_SetKeyboardFocus(window); + + Emscripten_RegisterEventHandlers(wdata); + + /* Window has been successfully created */ + return 0; +} + +static void Emscripten_SetWindowSize(_THIS, SDL_Window * window) +{ + SDL_WindowData *data; + + if (window->driverdata) { + data = (SDL_WindowData *) window->driverdata; + emscripten_set_canvas_size(window->w * data->pixel_ratio, window->h * data->pixel_ratio); + + /*scale canvas down*/ + if (!data->external_size && data->pixel_ratio != 1.0f) { + emscripten_set_element_css_size(NULL, window->w, window->h); + } + } +} + +static void +Emscripten_DestroyWindow(_THIS, SDL_Window * window) +{ + SDL_WindowData *data; + + if(window->driverdata) { + data = (SDL_WindowData *) window->driverdata; + + Emscripten_UnregisterEventHandlers(data); + if (data->egl_surface != EGL_NO_SURFACE) { + SDL_EGL_DestroySurface(_this, data->egl_surface); + data->egl_surface = EGL_NO_SURFACE; + } + SDL_free(window->driverdata); + window->driverdata = NULL; + } +} + +static void +Emscripten_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) +{ + SDL_WindowData *data; + if(window->driverdata) { + data = (SDL_WindowData *) window->driverdata; + + if(fullscreen) { + data->requested_fullscreen_mode = window->flags & (SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN); + /*unset the fullscreen flags as we're not actually fullscreen yet*/ + window->flags &= ~(SDL_WINDOW_FULLSCREEN_DESKTOP | SDL_WINDOW_FULLSCREEN); + + EM_ASM({ + //reparent canvas (similar to Module.requestFullscreen) + var canvas = Module['canvas']; + if(canvas.parentNode.id != "SDLFullscreenElement") { + var canvasContainer = document.createElement("div"); + canvasContainer.id = "SDLFullscreenElement"; + canvas.parentNode.insertBefore(canvasContainer, canvas); + canvasContainer.appendChild(canvas); + } + }); + + int is_fullscreen; + emscripten_get_canvas_size(&data->windowed_width, &data->windowed_height, &is_fullscreen); + emscripten_request_fullscreen("SDLFullscreenElement", 1); + } + else + emscripten_exit_fullscreen(); + } +} + +#endif /* SDL_VIDEO_DRIVER_EMSCRIPTEN */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.h b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.h new file mode 100644 index 0000000000..e824de34fb --- /dev/null +++ b/Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.h @@ -0,0 +1,52 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_emscriptenvideo_h +#define _SDL_emscriptenvideo_h + +#include "../SDL_sysvideo.h" +#include +#include + +#include + +typedef struct SDL_WindowData +{ +#if SDL_VIDEO_OPENGL_EGL + EGLSurface egl_surface; +#endif + SDL_Window *window; + SDL_Surface *surface; + + int windowed_width; + int windowed_height; + + float pixel_ratio; + + SDL_bool external_size; + + int requested_fullscreen_mode; +} SDL_WindowData; + +#endif /* _SDL_emscriptenvideo_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/haiku/SDL_BWin.h b/Engine/lib/sdl/src/video/haiku/SDL_BWin.h index e6de5b0d01..dade664c3b 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_BWin.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_BWin.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.cc b/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.cc index 9760d0fbaa..fcd1caa269 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.h b/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.h index 418ba90b92..dd31f19a55 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bevents.cc b/Engine/lib/sdl/src/video/haiku/SDL_bevents.cc index 2ffc471386..36513a3b24 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bevents.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bevents.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bevents.h b/Engine/lib/sdl/src/video/haiku/SDL_bevents.h index 9b53f39aa1..cb756c9677 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bevents.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.cc b/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.cc index 0c56396065..5e6a300e8e 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.h b/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.h index b0b73d3ca8..d6be21f4d0 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.cc b/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.cc index 97f34b23be..0ae3d3fc10 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.h b/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.h index 0acb42c945..6327994214 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bkeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bmodes.cc b/Engine/lib/sdl/src/video/haiku/SDL_bmodes.cc index b56442b096..84aeb1f07b 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bmodes.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bmodes.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bmodes.h b/Engine/lib/sdl/src/video/haiku/SDL_bmodes.h index 3df862d301..c3882ba580 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bmodes.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bopengl.cc b/Engine/lib/sdl/src/video/haiku/SDL_bopengl.cc index 245cec12ec..15454f1007 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bopengl.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bopengl.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bopengl.h b/Engine/lib/sdl/src/video/haiku/SDL_bopengl.h index b046de4e4e..e7d475dfb7 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bopengl.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bvideo.cc b/Engine/lib/sdl/src/video/haiku/SDL_bvideo.cc index a526893f8d..8c243b7a04 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bvideo.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bvideo.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bvideo.h b/Engine/lib/sdl/src/video/haiku/SDL_bvideo.h index 925c8b5b2c..ef5c740320 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bvideo.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bwindow.cc b/Engine/lib/sdl/src/video/haiku/SDL_bwindow.cc index c0a3cee01a..287eac9653 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bwindow.cc +++ b/Engine/lib/sdl/src/video/haiku/SDL_bwindow.cc @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/haiku/SDL_bwindow.h b/Engine/lib/sdl/src/video/haiku/SDL_bwindow.h index 5a39349787..f64530ab7b 100644 --- a/Engine/lib/sdl/src/video/haiku/SDL_bwindow.h +++ b/Engine/lib/sdl/src/video/haiku/SDL_bwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirdyn.c b/Engine/lib/sdl/src/video/mir/SDL_mirdyn.c index f544d06ec5..f9dfc03955 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirdyn.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirdyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirdyn.h b/Engine/lib/sdl/src/video/mir/SDL_mirdyn.h index 3bd62e14e9..48bf489c63 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirdyn.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirdyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirevents.c b/Engine/lib/sdl/src/video/mir/SDL_mirevents.c index f2d3ef3823..708f8ffdec 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirevents.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -117,27 +117,27 @@ HandleMouseButton(SDL_Window* sdl_window, Uint8 state, MirMotionButton button_st } static void -HandleTouchPress(int device_id, int source_id, SDL_bool down, float x, float y, float pressure) +HandleMouseMotion(SDL_Window* sdl_window, int x, int y) { - SDL_SendTouch(device_id, source_id, down, x, y, pressure); + SDL_SendMouseMotion(sdl_window, 0, 0, x, y); } static void -HandleTouchMotion(int device_id, int source_id, float x, float y, float pressure) +HandleTouchPress(int device_id, int source_id, SDL_bool down, float x, float y, float pressure) { - SDL_SendTouchMotion(device_id, source_id, x, y, pressure); + SDL_SendTouch(device_id, source_id, down, x, y, pressure); } static void -HandleMouseMotion(SDL_Window* sdl_window, int x, int y) +HandleTouchMotion(int device_id, int source_id, float x, float y, float pressure) { - SDL_SendMouseMotion(sdl_window, 0, 0, x, y); + SDL_SendTouchMotion(device_id, source_id, x, y, pressure); } static void HandleMouseScroll(SDL_Window* sdl_window, int hscroll, int vscroll) { - SDL_SendMouseWheel(sdl_window, 0, hscroll, vscroll); + SDL_SendMouseWheel(sdl_window, 0, hscroll, vscroll, SDL_MOUSEWHEEL_NORMAL); } static void @@ -205,13 +205,11 @@ HandleMouseEvent(MirMotionEvent const motion, int cord_index, SDL_Window* sdl_wi case mir_motion_action_outside: SDL_SetMouseFocus(NULL); break; -#if 0 /* !!! FIXME: needs a newer set of dev headers than Ubuntu 13.10 is shipping atm. */ case mir_motion_action_scroll: HandleMouseScroll(sdl_window, motion.pointer_coordinates[cord_index].hscroll, motion.pointer_coordinates[cord_index].vscroll); break; -#endif case mir_motion_action_cancel: case mir_motion_action_hover_enter: case mir_motion_action_hover_exit: @@ -226,16 +224,12 @@ HandleMotionEvent(MirMotionEvent const motion, SDL_Window* sdl_window) { int cord_index; for (cord_index = 0; cord_index < motion.pointer_count; cord_index++) { -#if 0 /* !!! FIXME: needs a newer set of dev headers than Ubuntu 13.10 is shipping atm. */ - if (motion.pointer_coordinates[cord_index].tool_type == mir_motion_tool_type_mouse) { - HandleMouseEvent(motion, cord_index, sdl_window); - } - else if (motion.pointer_coordinates[cord_index].tool_type == mir_motion_tool_type_finger) { + if (motion.pointer_coordinates[cord_index].tool_type == mir_motion_tool_type_finger) { HandleTouchEvent(motion, cord_index, sdl_window); } -#else - HandleMouseEvent(motion, cord_index, sdl_window); -#endif + else { + HandleMouseEvent(motion, cord_index, sdl_window); + } } } diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirevents.h b/Engine/lib/sdl/src/video/mir/SDL_mirevents.h index 9219eed157..3e0d96625f 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirevents.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.c b/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.c index f8b46649a9..53e6056ff7 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -56,6 +56,8 @@ MIR_CreateWindowFramebuffer(_THIS, SDL_Window* window, Uint32* format, MIR_Window* mir_window; MirSurfaceParameters surfaceparm; + mir_data->software = SDL_TRUE; + if (MIR_CreateWindow(_this, window) < 0) return SDL_SetError("Failed to created a mir window."); diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.h b/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.h index b4860fe1f3..22a579c03c 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirmouse.c b/Engine/lib/sdl/src/video/mir/SDL_mirmouse.c index def9dbd06d..bb8dc6c4e2 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirmouse.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -110,6 +110,12 @@ MIR_WarpMouse(SDL_Window* window, int x, int y) SDL_Unsupported(); } +static int +MIR_WarpMouseGlobal(int x, int y) +{ + return SDL_Unsupported(); +} + static int MIR_SetRelativeMouseMode(SDL_bool enabled) { @@ -126,6 +132,7 @@ MIR_InitMouse() mouse->ShowCursor = MIR_ShowCursor; mouse->FreeCursor = MIR_FreeCursor; mouse->WarpMouse = MIR_WarpMouse; + mouse->WarpMouseGlobal = MIR_WarpMouseGlobal; mouse->CreateSystemCursor = MIR_CreateSystemCursor; mouse->SetRelativeMouseMode = MIR_SetRelativeMouseMode; diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirmouse.h b/Engine/lib/sdl/src/video/mir/SDL_mirmouse.h index fd4e47626c..94dd085615 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirmouse.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_miropengl.c b/Engine/lib/sdl/src/video/mir/SDL_miropengl.c index 976b77272c..23fabb2672 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_miropengl.c +++ b/Engine/lib/sdl/src/video/mir/SDL_miropengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_miropengl.h b/Engine/lib/sdl/src/video/mir/SDL_miropengl.h index 0f4c973182..96bb40a6d8 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_miropengl.h +++ b/Engine/lib/sdl/src/video/mir/SDL_miropengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirsym.h b/Engine/lib/sdl/src/video/mir/SDL_mirsym.h index fe495e3e55..d0aaf70a32 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirsym.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirsym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,7 +26,7 @@ SDL_MIR_SYM(MirDisplayConfiguration*,mir_connection_create_display_config,(MirCo SDL_MIR_SYM(MirSurface *,mir_connection_create_surface_sync,(MirConnection *connection, MirSurfaceParameters const *params)) SDL_MIR_SYM(void,mir_connection_get_available_surface_formats,(MirConnection* connection, MirPixelFormat* formats, unsigned const int format_size, unsigned int *num_valid_formats)) SDL_MIR_SYM(MirEGLNativeDisplayType,mir_connection_get_egl_native_display,(MirConnection *connection)) -SDL_MIR_SYM(int,mir_connection_is_valid,(MirConnection *connection)) +SDL_MIR_SYM(MirBool,mir_connection_is_valid,(MirConnection *connection)) SDL_MIR_SYM(void,mir_connection_release,(MirConnection *connection)) SDL_MIR_SYM(MirConnection *,mir_connect_sync,(char const *server, char const *app_name)) SDL_MIR_SYM(void,mir_display_config_destroy,(MirDisplayConfiguration* display_configuration)) @@ -34,10 +34,11 @@ SDL_MIR_SYM(MirEGLNativeWindowType,mir_surface_get_egl_native_window,(MirSurface SDL_MIR_SYM(char const *,mir_surface_get_error_message,(MirSurface *surface)) SDL_MIR_SYM(void,mir_surface_get_graphics_region,(MirSurface *surface, MirGraphicsRegion *graphics_region)) SDL_MIR_SYM(void,mir_surface_get_parameters,(MirSurface *surface, MirSurfaceParameters *parameters)) -SDL_MIR_SYM(int,mir_surface_is_valid,(MirSurface *surface)) +SDL_MIR_SYM(MirBool,mir_surface_is_valid,(MirSurface *surface)) SDL_MIR_SYM(void,mir_surface_release_sync,(MirSurface *surface)) SDL_MIR_SYM(void,mir_surface_set_event_handler,(MirSurface *surface, MirEventDelegate const *event_handler)) SDL_MIR_SYM(MirWaitHandle*,mir_surface_set_type,(MirSurface *surface, MirSurfaceType type)) +SDL_MIR_SYM(MirWaitHandle*,mir_surface_set_state,(MirSurface *surface, MirSurfaceState state)) SDL_MIR_SYM(void,mir_surface_swap_buffers_sync,(MirSurface *surface)) SDL_MIR_MODULE(XKBCOMMON) diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirvideo.c b/Engine/lib/sdl/src/video/mir/SDL_mirvideo.c index ad6de151bf..b6160fd923 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirvideo.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -82,7 +82,6 @@ MIR_Available() /* !!! FIXME: try to make a MirConnection here. */ available = 1; SDL_MIR_UnloadSymbols(); - } return available; @@ -274,6 +273,7 @@ MIR_VideoInit(_THIS) MIR_Data* mir_data = _this->driverdata; mir_data->connection = MIR_mir_connect_sync(NULL, __PRETTY_FUNCTION__); + mir_data->software = SDL_FALSE; if (!MIR_mir_connection_is_valid(mir_data->connection)) return SDL_SetError("Failed to connect to the Mir Server"); diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirvideo.h b/Engine/lib/sdl/src/video/mir/SDL_mirvideo.h index edeca01a4b..c5ef4758db 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirvideo.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -32,6 +32,8 @@ typedef struct { MirConnection* connection; + SDL_bool software; + } MIR_Data; #endif /* _SDL_mirvideo_h_ */ diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirwindow.c b/Engine/lib/sdl/src/video/mir/SDL_mirwindow.c index d233db47ff..0eb54be014 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirwindow.c +++ b/Engine/lib/sdl/src/video/mir/SDL_mirwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -84,7 +84,8 @@ MIR_CreateWindow(_THIS, SDL_Window* window) .width = window->w, .height = window->h, .pixel_format = mir_pixel_format_invalid, - .buffer_usage = mir_buffer_usage_hardware + .buffer_usage = mir_buffer_usage_hardware, + .output_id = mir_display_output_id_invalid }; MirEventDelegate delegate = { @@ -99,6 +100,9 @@ MIR_CreateWindow(_THIS, SDL_Window* window) mir_data = _this->driverdata; window->driverdata = mir_window; + if (mir_data->software) + surfaceparm.buffer_usage = mir_buffer_usage_software; + if (window->x == SDL_WINDOWPOS_UNDEFINED) window->x = 0; @@ -145,14 +149,13 @@ MIR_DestroyWindow(_THIS, SDL_Window* window) MIR_Data* mir_data = _this->driverdata; MIR_Window* mir_window = window->driverdata; - window->driverdata = NULL; - if (mir_data) { SDL_EGL_DestroySurface(_this, mir_window->egl_surface); MIR_mir_surface_release_sync(mir_window->surface); SDL_free(mir_window); } + window->driverdata = NULL; } SDL_bool @@ -183,9 +186,9 @@ MIR_SetWindowFullscreen(_THIS, SDL_Window* window, return; if (fullscreen) { - MIR_mir_surface_set_type(mir_window->surface, mir_surface_state_fullscreen); + MIR_mir_surface_set_state(mir_window->surface, mir_surface_state_fullscreen); } else { - MIR_mir_surface_set_type(mir_window->surface, mir_surface_state_restored); + MIR_mir_surface_set_state(mir_window->surface, mir_surface_state_restored); } } @@ -197,7 +200,7 @@ MIR_MaximizeWindow(_THIS, SDL_Window* window) if (IsSurfaceValid(mir_window) < 0) return; - MIR_mir_surface_set_type(mir_window->surface, mir_surface_state_maximized); + MIR_mir_surface_set_state(mir_window->surface, mir_surface_state_maximized); } void @@ -208,7 +211,7 @@ MIR_MinimizeWindow(_THIS, SDL_Window* window) if (IsSurfaceValid(mir_window) < 0) return; - MIR_mir_surface_set_type(mir_window->surface, mir_surface_state_minimized); + MIR_mir_surface_set_state(mir_window->surface, mir_surface_state_minimized); } void @@ -219,7 +222,7 @@ MIR_RestoreWindow(_THIS, SDL_Window * window) if (IsSurfaceValid(mir_window) < 0) return; - MIR_mir_surface_set_type(mir_window->surface, mir_surface_state_restored); + MIR_mir_surface_set_state(mir_window->surface, mir_surface_state_restored); } #endif /* SDL_VIDEO_DRIVER_MIR */ diff --git a/Engine/lib/sdl/src/video/mir/SDL_mirwindow.h b/Engine/lib/sdl/src/video/mir/SDL_mirwindow.h index 411c1485f5..c21fc92921 100644 --- a/Engine/lib/sdl/src/video/mir/SDL_mirwindow.h +++ b/Engine/lib/sdl/src/video/mir/SDL_mirwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -63,7 +63,7 @@ MIR_RestoreWindow(_THIS, SDL_Window* window); extern SDL_bool MIR_GetWindowWMInfo(_THIS, SDL_Window* window, SDL_SysWMinfo* info); -#endif /* _SDL_mirwindow */ +#endif /* _SDL_mirwindow_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclevents.c b/Engine/lib/sdl/src/video/nacl/SDL_naclevents.c new file mode 100644 index 0000000000..d6ebbdf870 --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclevents.c @@ -0,0 +1,438 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL + +#include "SDL.h" +#include "../../events/SDL_sysevents.h" +#include "../../events/SDL_events_c.h" +#include "SDL_naclevents_c.h" +#include "SDL_naclvideo.h" +#include "ppapi_simple/ps_event.h" + +/* Ref: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent */ + +static SDL_Scancode NACL_Keycodes[] = { + SDL_SCANCODE_UNKNOWN, /* 0 */ + SDL_SCANCODE_UNKNOWN, /* 1 */ + SDL_SCANCODE_UNKNOWN, /* 2 */ + SDL_SCANCODE_CANCEL, /* DOM_VK_CANCEL 3 */ + SDL_SCANCODE_UNKNOWN, /* 4 */ + SDL_SCANCODE_UNKNOWN, /* 5 */ + SDL_SCANCODE_HELP, /* DOM_VK_HELP 6 */ + SDL_SCANCODE_UNKNOWN, /* 7 */ + SDL_SCANCODE_BACKSPACE, /* DOM_VK_BACK_SPACE 8 */ + SDL_SCANCODE_TAB, /* DOM_VK_TAB 9 */ + SDL_SCANCODE_UNKNOWN, /* 10 */ + SDL_SCANCODE_UNKNOWN, /* 11 */ + SDL_SCANCODE_CLEAR, /* DOM_VK_CLEAR 12 */ + SDL_SCANCODE_RETURN, /* DOM_VK_RETURN 13 */ + SDL_SCANCODE_RETURN, /* DOM_VK_ENTER 14 */ + SDL_SCANCODE_UNKNOWN, /* 15 */ + SDL_SCANCODE_LSHIFT, /* DOM_VK_SHIFT 16 */ + SDL_SCANCODE_LCTRL, /* DOM_VK_CONTROL 17 */ + SDL_SCANCODE_LALT, /* DOM_VK_ALT 18 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_PAUSE 19 */ + SDL_SCANCODE_CAPSLOCK, /* DOM_VK_CAPS_LOCK 20 */ + SDL_SCANCODE_LANG1, /* DOM_VK_KANA DOM_VK_HANGUL 21 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_EISU 22 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_JUNJA 23 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_FINAL 24 */ + SDL_SCANCODE_LANG2, /* DOM_VK_HANJA DOM_VK_KANJI 25 */ + SDL_SCANCODE_UNKNOWN, /* 26 */ + SDL_SCANCODE_ESCAPE, /* DOM_VK_ESCAPE 27 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_CONVERT 28 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_NONCONVERT 29 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_ACCEPT 30 */ + SDL_SCANCODE_MODE, /* DOM_VK_MODECHANGE 31 */ + SDL_SCANCODE_SPACE, /* DOM_VK_SPACE 32 */ + SDL_SCANCODE_PAGEUP, /* DOM_VK_PAGE_UP 33 */ + SDL_SCANCODE_PAGEDOWN, /* DOM_VK_PAGE_DOWN 34 */ + SDL_SCANCODE_END, /* DOM_VK_END 35 */ + SDL_SCANCODE_HOME, /* DOM_VK_HOME 36 */ + SDL_SCANCODE_LEFT, /* DOM_VK_LEFT 37 */ + SDL_SCANCODE_UP, /* DOM_VK_UP 38 */ + SDL_SCANCODE_RIGHT, /* DOM_VK_RIGHT 39 */ + SDL_SCANCODE_DOWN, /* DOM_VK_DOWN 40 */ + SDL_SCANCODE_SELECT, /* DOM_VK_SELECT 41 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_PRINT 42 */ + SDL_SCANCODE_EXECUTE, /* DOM_VK_EXECUTE 43 */ + SDL_SCANCODE_PRINTSCREEN, /* DOM_VK_PRINTSCREEN 44 */ + SDL_SCANCODE_INSERT, /* DOM_VK_INSERT 45 */ + SDL_SCANCODE_DELETE, /* DOM_VK_DELETE 46 */ + SDL_SCANCODE_UNKNOWN, /* 47 */ + SDL_SCANCODE_0, /* DOM_VK_0 48 */ + SDL_SCANCODE_1, /* DOM_VK_1 49 */ + SDL_SCANCODE_2, /* DOM_VK_2 50 */ + SDL_SCANCODE_3, /* DOM_VK_3 51 */ + SDL_SCANCODE_4, /* DOM_VK_4 52 */ + SDL_SCANCODE_5, /* DOM_VK_5 53 */ + SDL_SCANCODE_6, /* DOM_VK_6 54 */ + SDL_SCANCODE_7, /* DOM_VK_7 55 */ + SDL_SCANCODE_8, /* DOM_VK_8 56 */ + SDL_SCANCODE_9, /* DOM_VK_9 57 */ + SDL_SCANCODE_KP_COLON, /* DOM_VK_COLON 58 */ + SDL_SCANCODE_SEMICOLON, /* DOM_VK_SEMICOLON 59 */ + SDL_SCANCODE_KP_LESS, /* DOM_VK_LESS_THAN 60 */ + SDL_SCANCODE_EQUALS, /* DOM_VK_EQUALS 61 */ + SDL_SCANCODE_KP_GREATER, /* DOM_VK_GREATER_THAN 62 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_QUESTION_MARK 63 */ + SDL_SCANCODE_KP_AT, /* DOM_VK_AT 64 */ + SDL_SCANCODE_A, /* DOM_VK_A 65 */ + SDL_SCANCODE_B, /* DOM_VK_B 66 */ + SDL_SCANCODE_C, /* DOM_VK_C 67 */ + SDL_SCANCODE_D, /* DOM_VK_D 68 */ + SDL_SCANCODE_E, /* DOM_VK_E 69 */ + SDL_SCANCODE_F, /* DOM_VK_F 70 */ + SDL_SCANCODE_G, /* DOM_VK_G 71 */ + SDL_SCANCODE_H, /* DOM_VK_H 72 */ + SDL_SCANCODE_I, /* DOM_VK_I 73 */ + SDL_SCANCODE_J, /* DOM_VK_J 74 */ + SDL_SCANCODE_K, /* DOM_VK_K 75 */ + SDL_SCANCODE_L, /* DOM_VK_L 76 */ + SDL_SCANCODE_M, /* DOM_VK_M 77 */ + SDL_SCANCODE_N, /* DOM_VK_N 78 */ + SDL_SCANCODE_O, /* DOM_VK_O 79 */ + SDL_SCANCODE_P, /* DOM_VK_P 80 */ + SDL_SCANCODE_Q, /* DOM_VK_Q 81 */ + SDL_SCANCODE_R, /* DOM_VK_R 82 */ + SDL_SCANCODE_S, /* DOM_VK_S 83 */ + SDL_SCANCODE_T, /* DOM_VK_T 84 */ + SDL_SCANCODE_U, /* DOM_VK_U 85 */ + SDL_SCANCODE_V, /* DOM_VK_V 86 */ + SDL_SCANCODE_W, /* DOM_VK_W 87 */ + SDL_SCANCODE_X, /* DOM_VK_X 88 */ + SDL_SCANCODE_Y, /* DOM_VK_Y 89 */ + SDL_SCANCODE_Z, /* DOM_VK_Z 90 */ + SDL_SCANCODE_LGUI, /* DOM_VK_WIN 91 */ + SDL_SCANCODE_UNKNOWN, /* 92 */ + SDL_SCANCODE_APPLICATION, /* DOM_VK_CONTEXT_MENU 93 */ + SDL_SCANCODE_UNKNOWN, /* 94 */ + SDL_SCANCODE_SLEEP, /* DOM_VK_SLEEP 95 */ + SDL_SCANCODE_KP_0, /* DOM_VK_NUMPAD0 96 */ + SDL_SCANCODE_KP_1, /* DOM_VK_NUMPAD1 97 */ + SDL_SCANCODE_KP_2, /* DOM_VK_NUMPAD2 98 */ + SDL_SCANCODE_KP_3, /* DOM_VK_NUMPAD3 99 */ + SDL_SCANCODE_KP_4, /* DOM_VK_NUMPAD4 100 */ + SDL_SCANCODE_KP_5, /* DOM_VK_NUMPAD5 101 */ + SDL_SCANCODE_KP_6, /* DOM_VK_NUMPAD6 102 */ + SDL_SCANCODE_KP_7, /* DOM_VK_NUMPAD7 103 */ + SDL_SCANCODE_KP_8, /* DOM_VK_NUMPAD8 104 */ + SDL_SCANCODE_KP_9, /* DOM_VK_NUMPAD9 105 */ + SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_MULTIPLY 106 */ + SDL_SCANCODE_KP_PLUS, /* DOM_VK_ADD 107 */ + SDL_SCANCODE_KP_COMMA, /* DOM_VK_SEPARATOR 108 */ + SDL_SCANCODE_KP_MINUS, /* DOM_VK_SUBTRACT 109 */ + SDL_SCANCODE_KP_PERIOD, /* DOM_VK_DECIMAL 110 */ + SDL_SCANCODE_KP_DIVIDE, /* DOM_VK_DIVIDE 111 */ + SDL_SCANCODE_F1, /* DOM_VK_F1 112 */ + SDL_SCANCODE_F2, /* DOM_VK_F2 113 */ + SDL_SCANCODE_F3, /* DOM_VK_F3 114 */ + SDL_SCANCODE_F4, /* DOM_VK_F4 115 */ + SDL_SCANCODE_F5, /* DOM_VK_F5 116 */ + SDL_SCANCODE_F6, /* DOM_VK_F6 117 */ + SDL_SCANCODE_F7, /* DOM_VK_F7 118 */ + SDL_SCANCODE_F8, /* DOM_VK_F8 119 */ + SDL_SCANCODE_F9, /* DOM_VK_F9 120 */ + SDL_SCANCODE_F10, /* DOM_VK_F10 121 */ + SDL_SCANCODE_F11, /* DOM_VK_F11 122 */ + SDL_SCANCODE_F12, /* DOM_VK_F12 123 */ + SDL_SCANCODE_F13, /* DOM_VK_F13 124 */ + SDL_SCANCODE_F14, /* DOM_VK_F14 125 */ + SDL_SCANCODE_F15, /* DOM_VK_F15 126 */ + SDL_SCANCODE_F16, /* DOM_VK_F16 127 */ + SDL_SCANCODE_F17, /* DOM_VK_F17 128 */ + SDL_SCANCODE_F18, /* DOM_VK_F18 129 */ + SDL_SCANCODE_F19, /* DOM_VK_F19 130 */ + SDL_SCANCODE_F20, /* DOM_VK_F20 131 */ + SDL_SCANCODE_F21, /* DOM_VK_F21 132 */ + SDL_SCANCODE_F22, /* DOM_VK_F22 133 */ + SDL_SCANCODE_F23, /* DOM_VK_F23 134 */ + SDL_SCANCODE_F24, /* DOM_VK_F24 135 */ + SDL_SCANCODE_UNKNOWN, /* 136 */ + SDL_SCANCODE_UNKNOWN, /* 137 */ + SDL_SCANCODE_UNKNOWN, /* 138 */ + SDL_SCANCODE_UNKNOWN, /* 139 */ + SDL_SCANCODE_UNKNOWN, /* 140 */ + SDL_SCANCODE_UNKNOWN, /* 141 */ + SDL_SCANCODE_UNKNOWN, /* 142 */ + SDL_SCANCODE_UNKNOWN, /* 143 */ + SDL_SCANCODE_NUMLOCKCLEAR, /* DOM_VK_NUM_LOCK 144 */ + SDL_SCANCODE_SCROLLLOCK, /* DOM_VK_SCROLL_LOCK 145 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_JISHO 146 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_MASSHOU 147 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_TOUROKU 148 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_LOYA 149 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FJ_ROYA 150 */ + SDL_SCANCODE_UNKNOWN, /* 151 */ + SDL_SCANCODE_UNKNOWN, /* 152 */ + SDL_SCANCODE_UNKNOWN, /* 153 */ + SDL_SCANCODE_UNKNOWN, /* 154 */ + SDL_SCANCODE_UNKNOWN, /* 155 */ + SDL_SCANCODE_UNKNOWN, /* 156 */ + SDL_SCANCODE_UNKNOWN, /* 157 */ + SDL_SCANCODE_UNKNOWN, /* 158 */ + SDL_SCANCODE_UNKNOWN, /* 159 */ + SDL_SCANCODE_GRAVE, /* DOM_VK_CIRCUMFLEX 160 */ + SDL_SCANCODE_KP_EXCLAM, /* DOM_VK_EXCLAMATION 161 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_DOUBLE_QUOTE 162 */ + SDL_SCANCODE_KP_HASH, /* DOM_VK_HASH 163 */ + SDL_SCANCODE_CURRENCYUNIT, /* DOM_VK_DOLLAR 164 */ + SDL_SCANCODE_KP_PERCENT, /* DOM_VK_PERCENT 165 */ + SDL_SCANCODE_KP_AMPERSAND, /* DOM_VK_AMPERSAND 166 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_UNDERSCORE 167 */ + SDL_SCANCODE_KP_LEFTPAREN, /* DOM_VK_OPEN_PAREN 168 */ + SDL_SCANCODE_KP_RIGHTPAREN, /* DOM_VK_CLOSE_PAREN 169 */ + SDL_SCANCODE_KP_MULTIPLY, /* DOM_VK_ASTERISK 170 */ + SDL_SCANCODE_KP_PLUS, /* DOM_VK_PLUS 171 */ + SDL_SCANCODE_KP_PLUS, /* DOM_VK_PIPE 172 */ + SDL_SCANCODE_MINUS, /* DOM_VK_HYPHEN_MINUS 173 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_OPEN_CURLY_BRACKET 174 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_CLOSE_CURLY_BRACKET 175 */ + SDL_SCANCODE_NONUSBACKSLASH, /* DOM_VK_TILDE 176 */ + SDL_SCANCODE_UNKNOWN, /* 177 */ + SDL_SCANCODE_UNKNOWN, /* 178 */ + SDL_SCANCODE_UNKNOWN, /* 179 */ + SDL_SCANCODE_UNKNOWN, /* 180 */ + SDL_SCANCODE_MUTE, /* DOM_VK_VOLUME_MUTE 181 */ + SDL_SCANCODE_VOLUMEDOWN, /* DOM_VK_VOLUME_DOWN 182 */ + SDL_SCANCODE_VOLUMEUP, /* DOM_VK_VOLUME_UP 183 */ + SDL_SCANCODE_UNKNOWN, /* 184 */ + SDL_SCANCODE_UNKNOWN, /* 185 */ + SDL_SCANCODE_UNKNOWN, /* 186 */ + SDL_SCANCODE_UNKNOWN, /* 187 */ + SDL_SCANCODE_COMMA, /* DOM_VK_COMMA 188 */ + SDL_SCANCODE_UNKNOWN, /* 189 */ + SDL_SCANCODE_PERIOD, /* DOM_VK_PERIOD 190 */ + SDL_SCANCODE_SLASH, /* DOM_VK_SLASH 191 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_BACK_QUOTE 192 */ + SDL_SCANCODE_UNKNOWN, /* 193 */ + SDL_SCANCODE_UNKNOWN, /* 194 */ + SDL_SCANCODE_UNKNOWN, /* 195 */ + SDL_SCANCODE_UNKNOWN, /* 196 */ + SDL_SCANCODE_UNKNOWN, /* 197 */ + SDL_SCANCODE_UNKNOWN, /* 198 */ + SDL_SCANCODE_UNKNOWN, /* 199 */ + SDL_SCANCODE_UNKNOWN, /* 200 */ + SDL_SCANCODE_UNKNOWN, /* 201 */ + SDL_SCANCODE_UNKNOWN, /* 202 */ + SDL_SCANCODE_UNKNOWN, /* 203 */ + SDL_SCANCODE_UNKNOWN, /* 204 */ + SDL_SCANCODE_UNKNOWN, /* 205 */ + SDL_SCANCODE_UNKNOWN, /* 206 */ + SDL_SCANCODE_UNKNOWN, /* 207 */ + SDL_SCANCODE_UNKNOWN, /* 208 */ + SDL_SCANCODE_UNKNOWN, /* 209 */ + SDL_SCANCODE_UNKNOWN, /* 210 */ + SDL_SCANCODE_UNKNOWN, /* 211 */ + SDL_SCANCODE_UNKNOWN, /* 212 */ + SDL_SCANCODE_UNKNOWN, /* 213 */ + SDL_SCANCODE_UNKNOWN, /* 214 */ + SDL_SCANCODE_UNKNOWN, /* 215 */ + SDL_SCANCODE_UNKNOWN, /* 216 */ + SDL_SCANCODE_UNKNOWN, /* 217 */ + SDL_SCANCODE_UNKNOWN, /* 218 */ + SDL_SCANCODE_LEFTBRACKET, /* DOM_VK_OPEN_BRACKET 219 */ + SDL_SCANCODE_BACKSLASH, /* DOM_VK_BACK_SLASH 220 */ + SDL_SCANCODE_RIGHTBRACKET, /* DOM_VK_CLOSE_BRACKET 221 */ + SDL_SCANCODE_APOSTROPHE, /* DOM_VK_QUOTE 222 */ + SDL_SCANCODE_UNKNOWN, /* 223 */ + SDL_SCANCODE_RGUI, /* DOM_VK_META 224 */ + SDL_SCANCODE_RALT, /* DOM_VK_ALTGR 225 */ + SDL_SCANCODE_UNKNOWN, /* 226 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_HELP 227 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_00 228 */ + SDL_SCANCODE_UNKNOWN, /* 229 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_ICO_CLEAR 230 */ + SDL_SCANCODE_UNKNOWN, /* 231 */ + SDL_SCANCODE_UNKNOWN, /* 232 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_RESET 233 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_JUMP 234 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA1 235 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA2 236 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_PA3 237 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_WSCTRL 238 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CUSEL 239 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ATTN 240 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_FINISH 241 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_COPY 242 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_AUTO 243 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_ENLW 244 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_BACKTAB 245 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_ATTN 246 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_CRSEL 247 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_EXSEL 248 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_EREOF 249 */ + SDL_SCANCODE_AUDIOPLAY, /* DOM_VK_PLAY 250 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_ZOOM 251 */ + SDL_SCANCODE_UNKNOWN, /* 252 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_PA1 253 */ + SDL_SCANCODE_UNKNOWN, /* DOM_VK_WIN_OEM_CLEAR 254 */ + SDL_SCANCODE_UNKNOWN, /* 255 */ +}; + +static Uint8 SDL_NACL_translate_mouse_button(int32_t button) { + switch (button) { + case PP_INPUTEVENT_MOUSEBUTTON_LEFT: + return SDL_BUTTON_LEFT; + case PP_INPUTEVENT_MOUSEBUTTON_MIDDLE: + return SDL_BUTTON_MIDDLE; + case PP_INPUTEVENT_MOUSEBUTTON_RIGHT: + return SDL_BUTTON_RIGHT; + + case PP_INPUTEVENT_MOUSEBUTTON_NONE: + default: + return 0; + } +} + +static SDL_Scancode +SDL_NACL_translate_keycode(int keycode) +{ + SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; + + if (keycode < SDL_arraysize(NACL_Keycodes)) { + scancode = NACL_Keycodes[keycode]; + } + if (scancode == SDL_SCANCODE_UNKNOWN) { + SDL_Log("The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL mailing list NACL KeyCode %d \n", keycode); + } + return scancode; +} + +void NACL_PumpEvents(_THIS) { + PSEvent* ps_event; + PP_Resource event; + PP_InputEvent_Type type; + PP_InputEvent_Modifier modifiers; + struct PP_Rect rect; + struct PP_FloatPoint fp; + struct PP_Point location; + struct PP_Var var; + const char *str; + char text[64]; + Uint32 str_len; + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + SDL_Mouse *mouse = SDL_GetMouse(); + + if (driverdata->window) { + while ((ps_event = PSEventTryAcquire()) != NULL) { + event = ps_event->as_resource; + switch(ps_event->type) { + /* From DidChangeView, contains a view resource */ + case PSE_INSTANCE_DIDCHANGEVIEW: + driverdata->ppb_view->GetRect(event, &rect); + NACL_SetScreenResolution(rect.size.width, rect.size.height, SDL_PIXELFORMAT_UNKNOWN); + // FIXME: Rebuild context? See life.c UpdateContext + break; + + /* From HandleInputEvent, contains an input resource. */ + case PSE_INSTANCE_HANDLEINPUT: + type = driverdata->ppb_input_event->GetType(event); + modifiers = driverdata->ppb_input_event->GetModifiers(event); + switch(type) { + case PP_INPUTEVENT_TYPE_MOUSEDOWN: + SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_PRESSED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event))); + break; + case PP_INPUTEVENT_TYPE_MOUSEUP: + SDL_SendMouseButton(mouse->focus, mouse->mouseID, SDL_RELEASED, SDL_NACL_translate_mouse_button(driverdata->ppb_mouse_input_event->GetButton(event))); + break; + case PP_INPUTEVENT_TYPE_WHEEL: + /* FIXME: GetTicks provides high resolution scroll events */ + fp = driverdata->ppb_wheel_input_event->GetDelta(event); + SDL_SendMouseWheel(mouse->focus, mouse->mouseID, (int) fp.x, (int) fp.y, SDL_MOUSEWHEEL_NORMAL); + break; + + case PP_INPUTEVENT_TYPE_MOUSEENTER: + case PP_INPUTEVENT_TYPE_MOUSELEAVE: + /* FIXME: Mouse Focus */ + break; + + + case PP_INPUTEVENT_TYPE_MOUSEMOVE: + location = driverdata->ppb_mouse_input_event->GetPosition(event); + SDL_SendMouseMotion(mouse->focus, mouse->mouseID, SDL_FALSE, location.x, location.y); + break; + + case PP_INPUTEVENT_TYPE_TOUCHSTART: + case PP_INPUTEVENT_TYPE_TOUCHMOVE: + case PP_INPUTEVENT_TYPE_TOUCHEND: + case PP_INPUTEVENT_TYPE_TOUCHCANCEL: + /* FIXME: Touch events */ + break; + + case PP_INPUTEVENT_TYPE_KEYDOWN: + SDL_SendKeyboardKey(SDL_PRESSED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event))); + break; + + case PP_INPUTEVENT_TYPE_KEYUP: + SDL_SendKeyboardKey(SDL_RELEASED, SDL_NACL_translate_keycode(driverdata->ppb_keyboard_input_event->GetKeyCode(event))); + break; + + case PP_INPUTEVENT_TYPE_CHAR: + var = driverdata->ppb_keyboard_input_event->GetCharacterText(event); + str = driverdata->ppb_var->VarToUtf8(var, &str_len); + /* str is not null terminated! */ + if ( str_len >= SDL_arraysize(text) ) { + str_len = SDL_arraysize(text) - 1; + } + SDL_strlcpy(text, str, str_len ); + text[str_len] = '\0'; + + SDL_SendKeyboardText(text); + /* FIXME: Do we have to handle ref counting? driverdata->ppb_var->Release(var);*/ + break; + + default: + break; + } + break; + + + /* From HandleMessage, contains a PP_Var. */ + case PSE_INSTANCE_HANDLEMESSAGE: + break; + + /* From DidChangeFocus, contains a PP_Bool with the current focus state. */ + case PSE_INSTANCE_DIDCHANGEFOCUS: + break; + + /* When the 3D context is lost, no resource. */ + case PSE_GRAPHICS3D_GRAPHICS3DCONTEXTLOST: + break; + + /* When the mouse lock is lost. */ + case PSE_MOUSELOCK_MOUSELOCKLOST: + break; + + default: + break; + } + + PSEventRelease(ps_event); + } + } +} + +#endif /* SDL_VIDEO_DRIVER_NACL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclevents_c.h b/Engine/lib/sdl/src/video/nacl/SDL_naclevents_c.h new file mode 100644 index 0000000000..3255578c32 --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclevents_c.h @@ -0,0 +1,30 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_naclevents_c_h +#define _SDL_naclevents_c_h + +#include "SDL_naclvideo.h" + +extern void NACL_PumpEvents(_THIS); + +#endif /* _SDL_naclevents_c_h */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclglue.c b/Engine/lib/sdl/src/video/nacl/SDL_naclglue.c new file mode 100644 index 0000000000..79f5b0f90b --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclglue.c @@ -0,0 +1,24 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL +#endif /* SDL_VIDEO_DRIVER_NACL */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.c b/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.c new file mode 100644 index 0000000000..e11245135c --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.c @@ -0,0 +1,171 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL + +/* NaCl SDL video GLES 2 driver implementation */ + +#include "SDL_video.h" +#include "SDL_naclvideo.h" + +#if SDL_LOADSO_DLOPEN +#include "dlfcn.h" +#endif + +#include "ppapi/gles2/gl2ext_ppapi.h" +#include "ppapi_simple/ps.h" + +/* GL functions */ +int +NACL_GLES_LoadLibrary(_THIS, const char *path) +{ + /* FIXME: Support dynamic linking when PNACL supports it */ + return glInitializePPAPI(PSGetInterface) == 0; +} + +void * +NACL_GLES_GetProcAddress(_THIS, const char *proc) +{ +#if SDL_LOADSO_DLOPEN + return dlsym( 0 /* RTLD_DEFAULT */, proc); +#else + return NULL; +#endif +} + +void +NACL_GLES_UnloadLibrary(_THIS) +{ + /* FIXME: Support dynamic linking when PNACL supports it */ + glTerminatePPAPI(); +} + +int +NACL_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext sdl_context) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + /* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */ + driverdata->ppb_instance->BindGraphics(driverdata->instance, (PP_Resource) sdl_context); + glSetCurrentContextPPAPI((PP_Resource) sdl_context); + return 0; +} + +SDL_GLContext +NACL_GLES_CreateContext(_THIS, SDL_Window * window) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + PP_Resource context, share_context = 0; + /* 64 seems nice. */ + Sint32 attribs[64]; + int i = 0; + + if (_this->gl_config.share_with_current_context) { + share_context = (PP_Resource) SDL_GL_GetCurrentContext(); + } + + /* FIXME: Some ATTRIBS from PP_Graphics3DAttrib are not set here */ + + attribs[i++] = PP_GRAPHICS3DATTRIB_WIDTH; + attribs[i++] = window->w; + attribs[i++] = PP_GRAPHICS3DATTRIB_HEIGHT; + attribs[i++] = window->h; + attribs[i++] = PP_GRAPHICS3DATTRIB_RED_SIZE; + attribs[i++] = _this->gl_config.red_size; + attribs[i++] = PP_GRAPHICS3DATTRIB_GREEN_SIZE; + attribs[i++] = _this->gl_config.green_size; + attribs[i++] = PP_GRAPHICS3DATTRIB_BLUE_SIZE; + attribs[i++] = _this->gl_config.blue_size; + + if (_this->gl_config.alpha_size) { + attribs[i++] = PP_GRAPHICS3DATTRIB_ALPHA_SIZE; + attribs[i++] = _this->gl_config.alpha_size; + } + + /*if (_this->gl_config.buffer_size) { + attribs[i++] = EGL_BUFFER_SIZE; + attribs[i++] = _this->gl_config.buffer_size; + }*/ + + attribs[i++] = PP_GRAPHICS3DATTRIB_DEPTH_SIZE; + attribs[i++] = _this->gl_config.depth_size; + + if (_this->gl_config.stencil_size) { + attribs[i++] = PP_GRAPHICS3DATTRIB_STENCIL_SIZE; + attribs[i++] = _this->gl_config.stencil_size; + } + + if (_this->gl_config.multisamplebuffers) { + attribs[i++] = PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS; + attribs[i++] = _this->gl_config.multisamplebuffers; + } + + if (_this->gl_config.multisamplesamples) { + attribs[i++] = PP_GRAPHICS3DATTRIB_SAMPLES; + attribs[i++] = _this->gl_config.multisamplesamples; + } + + attribs[i++] = PP_GRAPHICS3DATTRIB_NONE; + + context = driverdata->ppb_graphics->Create(driverdata->instance, share_context, attribs); + + if (context) { + /* We need to make the context current, otherwise nothing works */ + SDL_GL_MakeCurrent(window, (SDL_GLContext) context); + } + + return (SDL_GLContext) context; +} + + + +int +NACL_GLES_SetSwapInterval(_THIS, int interval) +{ + /* STUB */ + return 0; +} + +int +NACL_GLES_GetSwapInterval(_THIS) +{ + /* STUB */ + return 0; +} + +void +NACL_GLES_SwapWindow(_THIS, SDL_Window * window) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + struct PP_CompletionCallback callback = { NULL, 0, PP_COMPLETIONCALLBACK_FLAG_NONE }; + driverdata->ppb_graphics->SwapBuffers((PP_Resource) SDL_GL_GetCurrentContext(), callback ); +} + +void +NACL_GLES_DeleteContext(_THIS, SDL_GLContext context) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + driverdata->ppb_core->ReleaseResource((PP_Resource) context); +} + +#endif /* SDL_VIDEO_DRIVER_NACL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.h b/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.h new file mode 100644 index 0000000000..1845e81915 --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclopengles.h @@ -0,0 +1,38 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_naclgl_h +#define _SDL_naclgl_h + +extern int NACL_GLES_LoadLibrary(_THIS, const char *path); +extern void *NACL_GLES_GetProcAddress(_THIS, const char *proc); +extern void NACL_GLES_UnloadLibrary(_THIS); +extern SDL_GLContext NACL_GLES_CreateContext(_THIS, SDL_Window * window); +extern int NACL_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); +extern int NACL_GLES_SetSwapInterval(_THIS, int interval); +extern int NACL_GLES_GetSwapInterval(_THIS); +extern void NACL_GLES_SwapWindow(_THIS, SDL_Window * window); +extern void NACL_GLES_DeleteContext(_THIS, SDL_GLContext context); + +#endif /* _SDL_naclgl_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.c b/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.c new file mode 100644 index 0000000000..467155c67a --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.c @@ -0,0 +1,183 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL + +#include "ppapi/c/pp_errors.h" +#include "ppapi/c/pp_instance.h" +#include "ppapi_simple/ps.h" +#include "ppapi_simple/ps_interface.h" +#include "ppapi_simple/ps_event.h" +#include "nacl_io/nacl_io.h" + +#include "SDL_naclvideo.h" +#include "SDL_naclwindow.h" +#include "SDL_naclevents_c.h" +#include "SDL_naclopengles.h" +#include "SDL_video.h" +#include "../SDL_sysvideo.h" +#include "../../events/SDL_events_c.h" + +#define NACLVID_DRIVER_NAME "nacl" + +/* Static init required because NACL_SetScreenResolution + * may appear even before SDL starts and we want to remember + * the window width and height + */ +static SDL_VideoData nacl = {0}; + +void +NACL_SetScreenResolution(int width, int height, Uint32 format) +{ + PP_Resource context; + + nacl.w = width; + nacl.h = height; + nacl.format = format; + + if (nacl.window) { + nacl.window->w = width; + nacl.window->h = height; + SDL_SendWindowEvent(nacl.window, SDL_WINDOWEVENT_RESIZED, width, height); + } + + /* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */ + context = (PP_Resource) SDL_GL_GetCurrentContext(); + if (context) { + PSInterfaceGraphics3D()->ResizeBuffers(context, width, height); + } + +} + + + +/* Initialization/Query functions */ +static int NACL_VideoInit(_THIS); +static void NACL_VideoQuit(_THIS); + +static int NACL_Available(void) { + return PSGetInstanceId() != 0; +} + +static void NACL_DeleteDevice(SDL_VideoDevice *device) { + SDL_VideoData *driverdata = (SDL_VideoData*) device->driverdata; + driverdata->ppb_core->ReleaseResource((PP_Resource) driverdata->ppb_message_loop); + SDL_free(device->driverdata); + SDL_free(device); +} + +static int +NACL_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) +{ + return 0; +} + +static SDL_VideoDevice *NACL_CreateDevice(int devindex) { + SDL_VideoDevice *device; + + /* Initialize all variables that we clean on shutdown */ + device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); + if (!device) { + SDL_OutOfMemory(); + return NULL; + } + device->driverdata = &nacl; + + /* Set the function pointers */ + device->VideoInit = NACL_VideoInit; + device->VideoQuit = NACL_VideoQuit; + device->PumpEvents = NACL_PumpEvents; + + device->CreateWindow = NACL_CreateWindow; + device->SetWindowTitle = NACL_SetWindowTitle; + device->DestroyWindow = NACL_DestroyWindow; + + device->SetDisplayMode = NACL_SetDisplayMode; + + device->free = NACL_DeleteDevice; + + /* GL pointers */ + device->GL_LoadLibrary = NACL_GLES_LoadLibrary; + device->GL_GetProcAddress = NACL_GLES_GetProcAddress; + device->GL_UnloadLibrary = NACL_GLES_UnloadLibrary; + device->GL_CreateContext = NACL_GLES_CreateContext; + device->GL_MakeCurrent = NACL_GLES_MakeCurrent; + device->GL_SetSwapInterval = NACL_GLES_SetSwapInterval; + device->GL_GetSwapInterval = NACL_GLES_GetSwapInterval; + device->GL_SwapWindow = NACL_GLES_SwapWindow; + device->GL_DeleteContext = NACL_GLES_DeleteContext; + + + return device; +} + +VideoBootStrap NACL_bootstrap = { + NACLVID_DRIVER_NAME, "SDL Native Client Video Driver", + NACL_Available, NACL_CreateDevice +}; + +int NACL_VideoInit(_THIS) { + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + SDL_DisplayMode mode; + + SDL_zero(mode); + mode.format = driverdata->format; + mode.w = driverdata->w; + mode.h = driverdata->h; + mode.refresh_rate = 0; + mode.driverdata = NULL; + if (SDL_AddBasicVideoDisplay(&mode) < 0) { + return -1; + } + + SDL_AddDisplayMode(&_this->displays[0], &mode); + + PSInterfaceInit(); + driverdata->instance = PSGetInstanceId(); + driverdata->ppb_graphics = PSInterfaceGraphics3D(); + driverdata->ppb_message_loop = PSInterfaceMessageLoop(); + driverdata->ppb_core = PSInterfaceCore(); + driverdata->ppb_fullscreen = PSInterfaceFullscreen(); + driverdata->ppb_instance = PSInterfaceInstance(); + driverdata->ppb_image_data = PSInterfaceImageData(); + driverdata->ppb_view = PSInterfaceView(); + driverdata->ppb_var = PSInterfaceVar(); + driverdata->ppb_input_event = (PPB_InputEvent*) PSGetInterface(PPB_INPUT_EVENT_INTERFACE); + driverdata->ppb_keyboard_input_event = (PPB_KeyboardInputEvent*) PSGetInterface(PPB_KEYBOARD_INPUT_EVENT_INTERFACE); + driverdata->ppb_mouse_input_event = (PPB_MouseInputEvent*) PSGetInterface(PPB_MOUSE_INPUT_EVENT_INTERFACE); + driverdata->ppb_wheel_input_event = (PPB_WheelInputEvent*) PSGetInterface(PPB_WHEEL_INPUT_EVENT_INTERFACE); + driverdata->ppb_touch_input_event = (PPB_TouchInputEvent*) PSGetInterface(PPB_TOUCH_INPUT_EVENT_INTERFACE); + + + driverdata->message_loop = driverdata->ppb_message_loop->Create(driverdata->instance); + + PSEventSetFilter(PSE_ALL); + + /* We're done! */ + return 0; +} + +void NACL_VideoQuit(_THIS) { +} + +#endif /* SDL_VIDEO_DRIVER_NACL */ +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.h b/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.h new file mode 100644 index 0000000000..174a6e77ce --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclvideo.h @@ -0,0 +1,67 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_naclvideo_h +#define _SDL_naclvideo_h + +#include "../SDL_sysvideo.h" +#include "ppapi_simple/ps_interface.h" +#include "ppapi/c/pp_input_event.h" + + +/* Hidden "this" pointer for the video functions */ +#define _THIS SDL_VideoDevice *_this + + +/* Private display data */ + +typedef struct SDL_VideoData { + Uint32 format; + int w, h; + SDL_Window *window; + + const PPB_Graphics3D *ppb_graphics; + const PPB_MessageLoop *ppb_message_loop; + const PPB_Core *ppb_core; + const PPB_Fullscreen *ppb_fullscreen; + const PPB_Instance *ppb_instance; + const PPB_ImageData *ppb_image_data; + const PPB_View *ppb_view; + const PPB_Var *ppb_var; + const PPB_InputEvent *ppb_input_event; + const PPB_KeyboardInputEvent *ppb_keyboard_input_event; + const PPB_MouseInputEvent *ppb_mouse_input_event; + const PPB_WheelInputEvent *ppb_wheel_input_event; + const PPB_TouchInputEvent *ppb_touch_input_event; + + PP_Resource message_loop; + PP_Instance instance; + + /* FIXME: Check threading issues...otherwise use a hardcoded _this->context across all threads */ + /* PP_Resource context; */ + +} SDL_VideoData; + +extern void NACL_SetScreenResolution(int width, int height, Uint32 format); + + +#endif /* _SDL_naclvideo_h */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.c b/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.c new file mode 100644 index 0000000000..32d1e6d7e8 --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.c @@ -0,0 +1,79 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_NACL + +#include "../SDL_sysvideo.h" + +#include "../../events/SDL_mouse_c.h" +#include "../../events/SDL_keyboard_c.h" +#include "SDL_naclvideo.h" +#include "SDL_naclwindow.h" + +int +NACL_CreateWindow(_THIS, SDL_Window * window) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + + if (driverdata->window) { + SDL_SetError("NaCl only supports one window"); + return -1; + } + driverdata->window = window; + + /* Adjust the window data to match the screen */ + window->x = 0; + window->y = 0; + window->w = driverdata->w; + window->h = driverdata->h; + + window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ + window->flags |= SDL_WINDOW_FULLSCREEN; /* window is always fullscreen */ + window->flags &= ~SDL_WINDOW_HIDDEN; + window->flags |= SDL_WINDOW_SHOWN; /* only one window on NaCl */ + window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ + window->flags |= SDL_WINDOW_OPENGL; + + SDL_SetMouseFocus(window); + SDL_SetKeyboardFocus(window); + + return 0; +} + +void +NACL_SetWindowTitle(_THIS, SDL_Window * window) +{ + /* TODO */ +} + +void +NACL_DestroyWindow(_THIS, SDL_Window * window) +{ + SDL_VideoData *driverdata = (SDL_VideoData *) _this->driverdata; + if (window == driverdata->window) { + driverdata->window = NULL; + } +} + +#endif /* SDL_VIDEO_DRIVER_NACL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.h b/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.h new file mode 100644 index 0000000000..617bfc3abb --- /dev/null +++ b/Engine/lib/sdl/src/video/nacl/SDL_naclwindow.h @@ -0,0 +1,32 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_naclwindow_h +#define _SDL_naclwindow_h + +extern int NACL_CreateWindow(_THIS, SDL_Window * window); +extern void NACL_SetWindowTitle(_THIS, SDL_Window * window); +extern void NACL_DestroyWindow(_THIS, SDL_Window * window); + +#endif /* _SDL_naclwindow_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/pandora/SDL_pandora.c b/Engine/lib/sdl/src/video/pandora/SDL_pandora.c index 10ca382410..d1c35a7056 100644 --- a/Engine/lib/sdl/src/video/pandora/SDL_pandora.c +++ b/Engine/lib/sdl/src/video/pandora/SDL_pandora.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/pandora/SDL_pandora.h b/Engine/lib/sdl/src/video/pandora/SDL_pandora.h index 802365eed4..b95cd10b16 100644 --- a/Engine/lib/sdl/src/video/pandora/SDL_pandora.h +++ b/Engine/lib/sdl/src/video/pandora/SDL_pandora.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.c b/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.c index eedbc29347..d22d0c759b 100644 --- a/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.c +++ b/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.h b/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.h index e628d14a99..e9f8d7cfa4 100644 --- a/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.h +++ b/Engine/lib/sdl/src/video/pandora/SDL_pandora_events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspevents.c b/Engine/lib/sdl/src/video/psp/SDL_pspevents.c index d096c0616c..c1a095dbb6 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspevents.c +++ b/Engine/lib/sdl/src/video/psp/SDL_pspevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_PSP /* Being a null driver, there's no event stream. We just define stubs for most of the API. */ @@ -39,7 +42,7 @@ #define IRKBD_CONFIG_FILE NULL /* this will take ms0:/seplugins/pspirkeyb.ini */ static int irkbd_ready = 0; -static SDLKey keymap[256]; +static SDL_Keycode keymap[256]; #endif static enum PspHprmKeys hprm = 0; @@ -121,7 +124,7 @@ void PSP_PumpEvents(_THIS) /* not tested */ /* SDL_PrivateKeyboard(pressed?SDL_PRESSED:SDL_RELEASED, &sym); */ SDL_SendKeyboardKey((keys & keymap_psp[i].id) ? - SDL_PRESSED : SDL_RELEASED, SDL_GetScancodeFromKey(keymap[raw]); + SDL_PRESSED : SDL_RELEASED, SDL_GetScancodeFromKey(keymap[raw])); } } @@ -282,3 +285,6 @@ void PSP_EventQuit(_THIS) /* end of SDL_pspevents.c ... */ +#endif /* SDL_VIDEO_DRIVER_PSP */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspevents_c.h b/Engine/lib/sdl/src/video/psp/SDL_pspevents_c.h index af45c4d16d..e1929d2374 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspevents_c.h +++ b/Engine/lib/sdl/src/video/psp/SDL_pspevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspgl.c b/Engine/lib/sdl/src/video/psp/SDL_pspgl.c index d24e722928..e4f81e9ee4 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspgl.c +++ b/Engine/lib/sdl/src/video/psp/SDL_pspgl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,6 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_PSP #include #include @@ -203,3 +206,6 @@ PSP_GL_DeleteContext(_THIS, SDL_GLContext context) return; } +#endif /* SDL_VIDEO_DRIVER_PSP */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspgl_c.h b/Engine/lib/sdl/src/video/psp/SDL_pspgl_c.h index c0c15d9551..308b027290 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspgl_c.h +++ b/Engine/lib/sdl/src/video/psp/SDL_pspgl_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspmouse.c b/Engine/lib/sdl/src/video/psp/SDL_pspmouse.c index 8df3d614ea..b7c3d2b998 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspmouse.c +++ b/Engine/lib/sdl/src/video/psp/SDL_pspmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,7 +18,9 @@ misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ +#include "../../SDL_internal.h" +#if SDL_VIDEO_DRIVER_PSP #include @@ -33,3 +35,7 @@ struct WMcursor { int unused; }; + +#endif /* SDL_VIDEO_DRIVER_PSP */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspmouse_c.h b/Engine/lib/sdl/src/video/psp/SDL_pspmouse_c.h index d14b84b9ad..2a3df68efb 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspmouse_c.h +++ b/Engine/lib/sdl/src/video/psp/SDL_pspmouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspvideo.c b/Engine/lib/sdl/src/video/psp/SDL_pspvideo.c index b3787239cc..955666877e 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspvideo.c +++ b/Engine/lib/sdl/src/video/psp/SDL_pspvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -66,7 +66,7 @@ PSP_Create() SDL_GLDriverData *gldata; int status; - /* Check if pandora could be initialized */ + /* Check if PSP could be initialized */ status = PSP_Available(); if (status == 0) { /* PSP could not be used */ @@ -80,7 +80,7 @@ PSP_Create() return NULL; } - /* Initialize internal Pandora specific data */ + /* Initialize internal PSP specific data */ phdata = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData)); if (phdata == NULL) { SDL_OutOfMemory(); diff --git a/Engine/lib/sdl/src/video/psp/SDL_pspvideo.h b/Engine/lib/sdl/src/video/psp/SDL_pspvideo.h index 2e1bb241b2..f5705a9446 100644 --- a/Engine/lib/sdl/src/video/psp/SDL_pspvideo.h +++ b/Engine/lib/sdl/src/video/psp/SDL_pspvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,8 +19,8 @@ 3. This notice may not be removed or altered from any source distribution. */ -#ifndef __SDL_PANDORA_H__ -#define __SDL_PANDORA_H__ +#ifndef _SDL_pspvideo_h +#define _SDL_pspvideo_h #include @@ -97,6 +97,6 @@ void PSP_ShowScreenKeyboard(_THIS, SDL_Window *window); void PSP_HideScreenKeyboard(_THIS, SDL_Window *window); SDL_bool PSP_IsScreenKeyboardShown(_THIS, SDL_Window *window); -#endif /* __SDL_PANDORA_H__ */ +#endif /* _SDL_pspvideo_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpievents.c b/Engine/lib/sdl/src/video/raspberry/SDL_rpievents.c index cdfc746a7f..4104568ccf 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpievents.c +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpievents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpievents_c.h b/Engine/lib/sdl/src/video/raspberry/SDL_rpievents_c.h index e69c5917f9..54fc196e42 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpievents_c.h +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpievents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.c b/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.c index 718fef81b9..0d1482c044 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.c +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -48,6 +48,7 @@ static int RPI_ShowCursor(SDL_Cursor * cursor); static void RPI_MoveCursor(SDL_Cursor * cursor); static void RPI_FreeCursor(SDL_Cursor * cursor); static void RPI_WarpMouse(SDL_Window * window, int x, int y); +static int RPI_WarpMouseGlobal(int x, int y); static SDL_Cursor * RPI_CreateDefaultCursor(void) @@ -210,16 +211,23 @@ RPI_FreeCursor(SDL_Cursor * cursor) /* Warp the mouse to (x,y) */ static void RPI_WarpMouse(SDL_Window * window, int x, int y) +{ + RPI_WarpMouseGlobal(x, y); +} + +/* Warp the mouse to (x,y) */ +static int +RPI_WarpMouseGlobal(int x, int y) { RPI_CursorData *curdata; DISPMANX_UPDATE_HANDLE_T update; - int ret; VC_RECT_T dst_rect; SDL_Mouse *mouse = SDL_GetMouse(); if (mouse != NULL && mouse->cur_cursor != NULL && mouse->cur_cursor->driverdata != NULL) { curdata = (RPI_CursorData *) mouse->cur_cursor->driverdata; if (curdata->element != DISPMANX_NO_HANDLE) { + int ret; update = vc_dispmanx_update_start( 10 ); SDL_assert( update ); vc_dispmanx_rect_set( &dst_rect, x, y, curdata->w, curdata->h); @@ -237,8 +245,11 @@ RPI_WarpMouse(SDL_Window * window, int x, int y) /* Submit asynchronously, otherwise the peformance suffers a lot */ ret = vc_dispmanx_update_submit( update, 0, NULL ); SDL_assert( ret == DISPMANX_SUCCESS ); + return (ret == DISPMANX_SUCCESS) ? 0 : -1; } } + + return -1; /* !!! FIXME: this should SDL_SetError() somewhere. */ } void @@ -254,6 +265,7 @@ RPI_InitMouse(_THIS) mouse->MoveCursor = RPI_MoveCursor; mouse->FreeCursor = RPI_FreeCursor; mouse->WarpMouse = RPI_WarpMouse; + mouse->WarpMouseGlobal = RPI_WarpMouseGlobal; SDL_SetDefaultCursor(RPI_CreateDefaultCursor()); } diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.h b/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.h index a39e6549d5..6a4e70511f 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.h +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpimouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.c b/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.c index c6f462b2a0..0881dbde88 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.c +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.h b/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.h index 5ef8f8fffe..83c8000674 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.h +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpiopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.c b/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.c index 8391c762a2..539c88c9bb 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.c +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -284,15 +284,14 @@ RPI_CreateWindow(_THIS, SDL_Window * window) void RPI_DestroyWindow(_THIS, SDL_Window * window) { - SDL_WindowData *data; - - if(window->driverdata) { - data = (SDL_WindowData *) window->driverdata; + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + if(data) { +#if SDL_VIDEO_OPENGL_EGL if (data->egl_surface != EGL_NO_SURFACE) { SDL_EGL_DestroySurface(_this, data->egl_surface); - data->egl_surface = EGL_NO_SURFACE; } - SDL_free(window->driverdata); +#endif + SDL_free(data); window->driverdata = NULL; } } diff --git a/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.h b/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.h index 4de8983c3a..74dcf94146 100644 --- a/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.h +++ b/Engine/lib/sdl/src/video/raspberry/SDL_rpivideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/sdlgenblit.pl b/Engine/lib/sdl/src/video/sdlgenblit.pl index 091d5663ca..9ebffafc49 100644 --- a/Engine/lib/sdl/src/video/sdlgenblit.pl +++ b/Engine/lib/sdl/src/video/sdlgenblit.pl @@ -58,12 +58,22 @@ "BGRA8888" => "Uint32", ); +my %get_rgba_string_ignore_alpha = ( + "RGB888" => "_R = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _B = (Uint8)_pixel;", + "BGR888" => "_B = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _R = (Uint8)_pixel;", + "ARGB8888" => "_R = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _B = (Uint8)_pixel;", + "RGBA8888" => "_R = (Uint8)(_pixel >> 24); _G = (Uint8)(_pixel >> 16); _B = (Uint8)(_pixel >> 8);", + "ABGR8888" => "_B = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _R = (Uint8)_pixel;", + "BGRA8888" => "_B = (Uint8)(_pixel >> 24); _G = (Uint8)(_pixel >> 16); _R = (Uint8)(_pixel >> 8);", +); + my %get_rgba_string = ( - "RGB888" => "_R = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _B = (Uint8)_pixel; _A = 0xFF;", - "BGR888" => "_B = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _R = (Uint8)_pixel; _A = 0xFF;", "ARGB8888" => "_A = (Uint8)(_pixel >> 24); _R = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _B = (Uint8)_pixel;", - "RGBA8888" => "_R = (Uint8)(_pixel >> 24); _G = (Uint8)(_pixel >> 16); _B = (Uint8)(_pixel >> 8); _A = (Uint8)_pixel;", - "ABGR8888" => "_A = (Uint8)(_pixel >> 24); _B = (Uint8)(_pixel >> 16); _G = (Uint8)(_pixel >> 8); _R = (Uint8)_pixel;", - "BGRA8888" => "_B = (Uint8)(_pixel >> 24); _G = (Uint8)(_pixel >> 16); _R = (Uint8)(_pixel >> 8); _A = (Uint8)_pixel;", + "RGB888" => $get_rgba_string_ignore_alpha{"RGB888"} . " _A = 0xFF;", + "BGR888" => $get_rgba_string_ignore_alpha{"BGR888"} . " _A = 0xFF;", + "ARGB8888" => $get_rgba_string_ignore_alpha{"ARGB8888"} . " _A = (Uint8)(_pixel >> 24);", + "RGBA8888" => $get_rgba_string_ignore_alpha{"RGBA8888"} . " _A = (Uint8)_pixel;", + "ABGR8888" => $get_rgba_string_ignore_alpha{"ABGR8888"} . " _A = (Uint8)(_pixel >> 24);", + "BGRA8888" => $get_rgba_string_ignore_alpha{"BGRA8888"} . " _A = (Uint8)_pixel;", ); my %set_rgba_string = ( @@ -82,7 +92,7 @@ sub open_file { /* DO NOT EDIT! This file is generated by sdlgenblit.pl */ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -160,7 +170,15 @@ sub get_rgba { my $prefix = shift; my $format = shift; - my $string = $get_rgba_string{$format}; + my $ignore_alpha = shift; + + my $string; + if ($ignore_alpha) { + $string = $get_rgba_string_ignore_alpha{$format}; + } else { + $string = $get_rgba_string{$format}; + } + $string =~ s/_/$prefix/g; if ( $prefix ne "" ) { print FILE <<__EOF__; @@ -205,13 +223,16 @@ sub output_copycore return; } + my $dst_has_alpha = ($dst =~ /A/) ? 1 : 0; + my $ignore_dst_alpha = !$dst_has_alpha && !$blend; + if ( $blend ) { - get_rgba("src", $src); - get_rgba("dst", $dst); + get_rgba("src", $src, $ignore_dst_alpha); + get_rgba("dst", $dst, !$dst_has_alpha); $s = "src"; $d = "dst"; } else { - get_rgba("", $src); + get_rgba("", $src, $ignore_dst_alpha); } if ( $modulate ) { @@ -221,10 +242,14 @@ sub output_copycore ${s}G = (${s}G * modulateG) / 255; ${s}B = (${s}B * modulateB) / 255; } +__EOF__ + if (not $ignore_dst_alpha) { + print FILE <<__EOF__; if (flags & SDL_COPY_MODULATE_ALPHA) { ${s}A = (${s}A * modulateA) / 255; } __EOF__ + } } if ( $blend ) { print FILE <<__EOF__; @@ -241,7 +266,15 @@ sub output_copycore ${d}R = ${s}R + ((255 - ${s}A) * ${d}R) / 255; ${d}G = ${s}G + ((255 - ${s}A) * ${d}G) / 255; ${d}B = ${s}B + ((255 - ${s}A) * ${d}B) / 255; +__EOF__ + + if ( $dst_has_alpha ) { + print FILE <<__EOF__; ${d}A = ${s}A + ((255 - ${s}A) * ${d}A) / 255; +__EOF__ + } + + print FILE <<__EOF__; break; case SDL_COPY_ADD: ${d}R = ${s}R + ${d}R; if (${d}R > 255) ${d}R = 255; @@ -271,6 +304,9 @@ sub output_copyfunc my $blend = shift; my $scale = shift; + my $dst_has_alpha = ($dst =~ /A/) ? 1 : 0; + my $ignore_dst_alpha = !$dst_has_alpha && !$blend; + output_copyfuncname("static void", $src, $dst, $modulate, $blend, $scale, 1, "\n"); print FILE <<__EOF__; { @@ -285,27 +321,50 @@ sub output_copyfunc const Uint32 modulateR = info->r; const Uint32 modulateG = info->g; const Uint32 modulateB = info->b; +__EOF__ + if (!$ignore_dst_alpha) { + print FILE <<__EOF__; const Uint32 modulateA = info->a; __EOF__ + } } if ( $blend ) { print FILE <<__EOF__; Uint32 srcpixel; Uint32 srcR, srcG, srcB, srcA; Uint32 dstpixel; +__EOF__ + if ($dst_has_alpha) { + print FILE <<__EOF__; Uint32 dstR, dstG, dstB, dstA; __EOF__ + } else { + print FILE <<__EOF__; + Uint32 dstR, dstG, dstB; +__EOF__ + } } elsif ( $modulate || $src ne $dst ) { print FILE <<__EOF__; Uint32 pixel; +__EOF__ + if (!$ignore_dst_alpha) { + print FILE <<__EOF__; Uint32 R, G, B, A; __EOF__ + } else { + print FILE <<__EOF__; + Uint32 R, G, B; +__EOF__ + } } if ( $scale ) { print FILE <<__EOF__; int srcy, srcx; int posy, posx; int incy, incx; +__EOF__ + + print FILE <<__EOF__; srcy = 0; posy = 0; diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.h index d5430beb1b..1879f0b3ad 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,12 +21,21 @@ #import -@interface SDLUIKitDelegate : NSObject { -} +@interface SDLLaunchScreenController : UIViewController -+ (id) sharedAppDelegate; +- (instancetype)init; +- (void)loadView; +- (NSUInteger)supportedInterfaceOrientations; + +@end + +@interface SDLUIKitDelegate : NSObject + ++ (id)sharedAppDelegate; + (NSString *)getAppDelegateClassName; +- (void)hideLaunchScreen; + @end /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.m index a9924fbcaf..971b438b01 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitappdelegate.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,8 +28,10 @@ #include "SDL_system.h" #include "SDL_main.h" -#include "SDL_uikitappdelegate.h" -#include "SDL_uikitmodes.h" +#import "SDL_uikitappdelegate.h" +#import "SDL_uikitmodes.h" +#import "SDL_uikitwindow.h" + #include "../../events/SDL_events_c.h" #ifdef main @@ -39,12 +41,10 @@ static int forward_argc; static char **forward_argv; static int exit_status; -static UIWindow *launch_window; int main(int argc, char **argv) { int i; - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; /* store arguments */ forward_argc = argc; @@ -56,7 +56,9 @@ int main(int argc, char **argv) forward_argv[i] = NULL; /* Give over control to run loop, SDLUIKitDelegate will handle most things from here */ - UIApplicationMain(argc, argv, NULL, [SDLUIKitDelegate getAppDelegateClassName]); + @autoreleasepool { + UIApplicationMain(argc, argv, nil, [SDLUIKitDelegate getAppDelegateClassName]); + } /* free the memory we used to hold copies of argc and argv */ for (i = 0; i < forward_argc; i++) { @@ -64,7 +66,6 @@ int main(int argc, char **argv) } free(forward_argv); - [pool release]; return exit_status; } @@ -75,145 +76,291 @@ int main(int argc, char **argv) [UIApplication sharedApplication].idleTimerDisabled = disable; } -@interface SDL_splashviewcontroller : UIViewController { - UIImageView *splash; - UIImage *splashPortrait; - UIImage *splashLandscape; -} +/* Load a launch image using the old UILaunchImageFile-era naming rules. */ +static UIImage * +SDL_LoadLaunchImageNamed(NSString *name, int screenh) +{ + UIInterfaceOrientation curorient = [UIApplication sharedApplication].statusBarOrientation; + UIUserInterfaceIdiom idiom = [UIDevice currentDevice].userInterfaceIdiom; + UIImage *image = nil; + + if (idiom == UIUserInterfaceIdiomPhone && screenh == 568) { + /* The image name for the iPhone 5 uses its height as a suffix. */ + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-568h", name]]; + } else if (idiom == UIUserInterfaceIdiomPad) { + /* iPad apps can launch in any orientation. */ + if (UIInterfaceOrientationIsLandscape(curorient)) { + if (curorient == UIInterfaceOrientationLandscapeLeft) { + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-LandscapeLeft", name]]; + } else { + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-LandscapeRight", name]]; + } + if (!image) { + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-Landscape", name]]; + } + } else { + if (curorient == UIInterfaceOrientationPortraitUpsideDown) { + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-PortraitUpsideDown", name]]; + } + if (!image) { + image = [UIImage imageNamed:[NSString stringWithFormat:@"%@-Portrait", name]]; + } + } + } -- (void)updateSplashImage:(UIInterfaceOrientation)interfaceOrientation; -@end + if (!image) { + image = [UIImage imageNamed:name]; + } + + return image; +} -@implementation SDL_splashviewcontroller +@implementation SDLLaunchScreenController -- (id)init +- (instancetype)init { - self = [super init]; - if (self == nil) { + if (!(self = [super initWithNibName:nil bundle:nil])) { return nil; } - self->splash = [[UIImageView alloc] init]; - [self setView:self->splash]; + NSBundle *bundle = [NSBundle mainBundle]; + NSString *screenname = [bundle objectForInfoDictionaryKey:@"UILaunchStoryboardName"]; + BOOL atleastiOS8 = UIKit_IsSystemVersionAtLeast(8.0); - CGSize size = [UIScreen mainScreen].bounds.size; - float height = SDL_max(size.width, size.height); - self->splashPortrait = [UIImage imageNamed:[NSString stringWithFormat:@"Default-%dh.png", (int)height]]; - if (!self->splashPortrait) { - self->splashPortrait = [UIImage imageNamed:@"Default.png"]; - } - self->splashLandscape = [UIImage imageNamed:@"Default-Landscape.png"]; - if (!self->splashLandscape && self->splashPortrait) { - self->splashLandscape = [[UIImage alloc] initWithCGImage: self->splashPortrait.CGImage - scale: 1.0 - orientation: UIImageOrientationRight]; - } - if (self->splashPortrait) { - [self->splashPortrait retain]; - } - if (self->splashLandscape) { - [self->splashLandscape retain]; + /* Launch screens were added in iOS 8. Otherwise we use launch images. */ + if (screenname && atleastiOS8) { + @try { + self.view = [bundle loadNibNamed:screenname owner:self options:nil][0]; + } + @catch (NSException *exception) { + /* If a launch screen name is specified but it fails to load, iOS + * displays a blank screen rather than falling back to an image. */ + return nil; + } } - [self updateSplashImage:[[UIApplication sharedApplication] statusBarOrientation]]; + if (!self.view) { + NSArray *launchimages = [bundle objectForInfoDictionaryKey:@"UILaunchImages"]; + UIInterfaceOrientation curorient = [UIApplication sharedApplication].statusBarOrientation; + NSString *imagename = nil; + UIImage *image = nil; - return self; -} + int screenw = (int)([UIScreen mainScreen].bounds.size.width + 0.5); + int screenh = (int)([UIScreen mainScreen].bounds.size.height + 0.5); -- (NSUInteger)supportedInterfaceOrientations -{ - NSUInteger orientationMask = UIInterfaceOrientationMaskAll; + /* We always want portrait-oriented size, to match UILaunchImageSize. */ + if (screenw > screenh) { + int width = screenw; + screenw = screenh; + screenh = width; + } + + /* Xcode 5 introduced a dictionary of launch images in Info.plist. */ + if (launchimages) { + for (NSDictionary *dict in launchimages) { + UIInterfaceOrientationMask orientmask = UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown; + NSString *minversion = dict[@"UILaunchImageMinimumOSVersion"]; + NSString *sizestring = dict[@"UILaunchImageSize"]; + NSString *orientstring = dict[@"UILaunchImageOrientation"]; + + /* Ignore this image if the current version is too low. */ + if (minversion && !UIKit_IsSystemVersionAtLeast(minversion.doubleValue)) { + continue; + } + + /* Ignore this image if the size doesn't match. */ + if (sizestring) { + CGSize size = CGSizeFromString(sizestring); + if ((int)(size.width + 0.5) != screenw || (int)(size.height + 0.5) != screenh) { + continue; + } + } + + if (orientstring) { + if ([orientstring isEqualToString:@"PortraitUpsideDown"]) { + orientmask = UIInterfaceOrientationMaskPortraitUpsideDown; + } else if ([orientstring isEqualToString:@"Landscape"]) { + orientmask = UIInterfaceOrientationMaskLandscape; + } else if ([orientstring isEqualToString:@"LandscapeLeft"]) { + orientmask = UIInterfaceOrientationMaskLandscapeLeft; + } else if ([orientstring isEqualToString:@"LandscapeRight"]) { + orientmask = UIInterfaceOrientationMaskLandscapeRight; + } + } + + /* Ignore this image if the orientation doesn't match. */ + if ((orientmask & (1 << curorient)) == 0) { + continue; + } + + imagename = dict[@"UILaunchImageName"]; + } + + if (imagename) { + image = [UIImage imageNamed:imagename]; + } + } else { + imagename = [bundle objectForInfoDictionaryKey:@"UILaunchImageFile"]; + + if (imagename) { + image = SDL_LoadLaunchImageNamed(imagename, screenh); + } + + if (!image) { + image = SDL_LoadLaunchImageNamed(@"Default", screenh); + } + } - /* Don't allow upside-down orientation on the phone, so answering calls is in the natural orientation */ - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { - orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown; + if (image) { + UIImageView *view = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIImageOrientation imageorient = UIImageOrientationUp; + + /* Bugs observed / workaround tested in iOS 8.3, 7.1, and 6.1. */ + if (UIInterfaceOrientationIsLandscape(curorient)) { + if (atleastiOS8 && image.size.width < image.size.height) { + /* On iOS 8, portrait launch images displayed in forced- + * landscape mode (e.g. a standard Default.png on an iPhone + * when Info.plist only supports landscape orientations) need + * to be rotated to display in the expected orientation. */ + if (curorient == UIInterfaceOrientationLandscapeLeft) { + imageorient = UIImageOrientationRight; + } else if (curorient == UIInterfaceOrientationLandscapeRight) { + imageorient = UIImageOrientationLeft; + } + } else if (!atleastiOS8 && image.size.width > image.size.height) { + /* On iOS 7 and below, landscape launch images displayed in + * landscape mode (e.g. landscape iPad launch images) need + * to be rotated to display in the expected orientation. */ + if (curorient == UIInterfaceOrientationLandscapeLeft) { + imageorient = UIImageOrientationLeft; + } else if (curorient == UIInterfaceOrientationLandscapeRight) { + imageorient = UIImageOrientationRight; + } + } + } + + /* Create the properly oriented image. */ + view.image = [[UIImage alloc] initWithCGImage:image.CGImage scale:image.scale orientation:imageorient]; + + self.view = view; + } } - return orientationMask; + + return self; } -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient +- (void)loadView { - NSUInteger orientationMask = [self supportedInterfaceOrientations]; - return (orientationMask & (1 << orient)); + /* Do nothing. */ } -- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration +- (BOOL)shouldAutorotate { - [self updateSplashImage:interfaceOrientation]; + /* If YES, the launch image will be incorrectly rotated in some cases. */ + return NO; } -- (void)updateSplashImage:(UIInterfaceOrientation)interfaceOrientation +- (NSUInteger)supportedInterfaceOrientations { - UIImage *image; - - if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) { - image = self->splashLandscape; - } else { - image = self->splashPortrait; - } - if (image) - { - splash.image = image; - } + /* We keep the supported orientations unrestricted to avoid the case where + * there are no common orientations between the ones set in Info.plist and + * the ones set here (it will cause an exception in that case.) */ + return UIInterfaceOrientationMaskAll; } @end - -@implementation SDLUIKitDelegate +@implementation SDLUIKitDelegate { + UIWindow *launchWindow; +} /* convenience method */ -+ (id) sharedAppDelegate ++ (id)sharedAppDelegate { - /* the delegate is set in UIApplicationMain(), which is garaunteed to be called before this method */ - return [[UIApplication sharedApplication] delegate]; + /* the delegate is set in UIApplicationMain(), which is guaranteed to be + * called before this method */ + return [UIApplication sharedApplication].delegate; } + (NSString *)getAppDelegateClassName { - /* subclassing notice: when you subclass this appdelegate, make sure to add a category to override - this method and return the actual name of the delegate */ + /* subclassing notice: when you subclass this appdelegate, make sure to add + * a category to override this method and return the actual name of the + * delegate */ return @"SDLUIKitDelegate"; } -- (id)init +- (void)hideLaunchScreen { - self = [super init]; - return self; + UIWindow *window = launchWindow; + + if (!window || window.hidden) { + return; + } + + launchWindow = nil; + + /* Do a nice animated fade-out (roughly matches the real launch behavior.) */ + [UIView animateWithDuration:0.2 animations:^{ + window.alpha = 0.0; + } completion:^(BOOL finished) { + window.hidden = YES; + }]; } - (void)postFinishLaunch { + /* Hide the launch screen the next time the run loop is run. SDL apps will + * have a chance to load resources while the launch screen is still up. */ + [self performSelector:@selector(hideLaunchScreen) withObject:nil afterDelay:0.0]; + /* run the user's application, passing argc and argv */ SDL_iPhoneSetEventPump(SDL_TRUE); exit_status = SDL_main(forward_argc, forward_argv); SDL_iPhoneSetEventPump(SDL_FALSE); - /* If we showed a splash image, clean it up */ - if (launch_window) { - [launch_window release]; - launch_window = NULL; + if (launchWindow) { + launchWindow.hidden = YES; + launchWindow = nil; } /* exit, passing the return status from the user's application */ - /* We don't actually exit to support applications that do setup in - * their main function and then allow the Cocoa event loop to run. - */ + /* We don't actually exit to support applications that do setup in their + * main function and then allow the Cocoa event loop to run. */ /* exit(exit_status); */ } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - /* Keep the launch image up until we set a video mode */ - launch_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - - UIViewController *splashViewController = [[SDL_splashviewcontroller alloc] init]; - launch_window.rootViewController = splashViewController; - [launch_window addSubview:splashViewController.view]; - [launch_window makeKeyAndVisible]; + NSBundle *bundle = [NSBundle mainBundle]; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + +#if SDL_IPHONE_LAUNCHSCREEN + /* The normal launch screen is displayed until didFinishLaunching returns, + * but SDL_main is called after that happens and there may be a noticeable + * delay between the start of SDL_main and when the first real frame is + * displayed (e.g. if resources are loaded before SDL_GL_SwapWindow is + * called), so we show the launch screen programmatically until the first + * time events are pumped. */ + UIViewController *viewcontroller = [[SDLLaunchScreenController alloc] init]; + + if (viewcontroller.view) { + launchWindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + + /* We don't want the launch window immediately hidden when a real SDL + * window is shown - we fade it out ourselves when we're ready. */ + launchWindow.windowLevel = UIWindowLevelNormal + 1.0; + + /* Show the window but don't make it key. Events should always go to + * other windows when possible. */ + launchWindow.hidden = NO; + + launchWindow.rootViewController = viewcontroller; + } +#endif /* Set working directory to resource path */ - [[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]]; + [[NSFileManager defaultManager] changeCurrentDirectoryPath:[bundle resourcePath]]; /* register a callback for the idletimer hint */ SDL_AddHintCallback(SDL_HINT_IDLE_TIMER_DISABLED, @@ -235,7 +382,35 @@ - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application SDL_SendAppEvent(SDL_APP_LOWMEMORY); } -- (void) applicationWillResignActive:(UIApplication*)application +- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation +{ + BOOL isLandscape = UIInterfaceOrientationIsLandscape(application.statusBarOrientation); + SDL_VideoDevice *_this = SDL_GetVideoDevice(); + + if (_this && _this->num_displays > 0) { + SDL_DisplayMode *desktopmode = &_this->displays[0].desktop_mode; + SDL_DisplayMode *currentmode = &_this->displays[0].current_mode; + + /* The desktop display mode should be kept in sync with the screen + * orientation so that updating a window's fullscreen state to + * SDL_WINDOW_FULLSCREEN_DESKTOP keeps the window dimensions in the + * correct orientation. */ + if (isLandscape != (desktopmode->w > desktopmode->h)) { + int height = desktopmode->w; + desktopmode->w = desktopmode->h; + desktopmode->h = height; + } + + /* Same deal with the current mode + SDL_GetCurrentDisplayMode. */ + if (isLandscape != (currentmode->w > currentmode->h)) { + int height = currentmode->w; + currentmode->w = currentmode->h; + currentmode->h = height; + } + } +} + +- (void)applicationWillResignActive:(UIApplication*)application { SDL_VideoDevice *_this = SDL_GetVideoDevice(); if (_this) { @@ -248,17 +423,17 @@ - (void) applicationWillResignActive:(UIApplication*)application SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND); } -- (void) applicationDidEnterBackground:(UIApplication*)application +- (void)applicationDidEnterBackground:(UIApplication*)application { SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); } -- (void) applicationWillEnterForeground:(UIApplication*)application +- (void)applicationWillEnterForeground:(UIApplication*)application { SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND); } -- (void) applicationDidBecomeActive:(UIApplication*)application +- (void)applicationDidBecomeActive:(UIApplication*)application { SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND); @@ -274,11 +449,11 @@ - (void) applicationDidBecomeActive:(UIApplication*)application - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { - NSURL *fileURL = [url filePathURL]; + NSURL *fileURL = url.filePathURL; if (fileURL != nil) { - SDL_SendDropFile([[fileURL path] UTF8String]); + SDL_SendDropFile([fileURL.path UTF8String]); } else { - SDL_SendDropFile([[url absoluteString] UTF8String]); + SDL_SendDropFile([url.absoluteString UTF8String]); } return YES; } diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.h index d9fb4ab36a..9b1d60c59d 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.m index 94fba878be..1d7044d880 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitevents.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -40,8 +40,9 @@ void UIKit_PumpEvents(_THIS) { - if (!UIKit_EventPumpEnabled) + if (!UIKit_EventPumpEnabled) { return; + } /* Let the run loop run for a short amount of time: long enough for touch events to get processed (which is important to get certain diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.h index 86af87b5cf..5280724135 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.m index 8fa8bc97b3..5778032a06 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitmessagebox.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,87 +24,167 @@ #include "SDL.h" #include "SDL_uikitvideo.h" - +#include "SDL_uikitwindow.h" /* Display a UIKit message box */ static SDL_bool s_showingMessageBox = SDL_FALSE; -@interface UIKit_UIAlertViewDelegate : NSObject { -@private - int *clickedButtonIndex; +SDL_bool +UIKit_ShowingMessageBox() +{ + return s_showingMessageBox; } -- (id)initWithButtonIndex:(int *)_buttonIndex; -- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; +static void +UIKit_WaitUntilMessageBoxClosed(const SDL_MessageBoxData *messageboxdata, int *clickedindex) +{ + *clickedindex = messageboxdata->numbuttons; + + @autoreleasepool { + /* Run the main event loop until the alert has finished */ + /* Note that this needs to be done on the main thread */ + s_showingMessageBox = SDL_TRUE; + while ((*clickedindex) == messageboxdata->numbuttons) { + [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; + } + s_showingMessageBox = SDL_FALSE; + } +} -@end +static BOOL +UIKit_ShowMessageBoxAlertController(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ +#ifdef __IPHONE_8_0 + int i; + int __block clickedindex = messageboxdata->numbuttons; + const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons; + UIWindow *window = nil; + UIWindow *alertwindow = nil; -@implementation UIKit_UIAlertViewDelegate + if (![UIAlertController class]) { + return NO; + } -- (id)initWithButtonIndex:(int *)buttonIndex -{ - self = [self init]; - if (self == nil) { - return nil; + UIAlertController *alert; + alert = [UIAlertController alertControllerWithTitle:@(messageboxdata->title) + message:@(messageboxdata->message) + preferredStyle:UIAlertControllerStyleAlert]; + + for (i = 0; i < messageboxdata->numbuttons; i++) { + UIAlertAction *action; + UIAlertActionStyle style = UIAlertActionStyleDefault; + + if (buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) { + style = UIAlertActionStyleCancel; + } + + action = [UIAlertAction actionWithTitle:@(buttons[i].text) + style:style + handler:^(UIAlertAction *action) { + clickedindex = i; + }]; + [alert addAction:action]; } - self->clickedButtonIndex = buttonIndex; - return self; -} + if (messageboxdata->window) { + SDL_WindowData *data = (__bridge SDL_WindowData *) messageboxdata->window->driverdata; + window = data.uiwindow; + } -- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex; -{ - *clickedButtonIndex = buttonIndex; -} + if (window == nil || window.rootViewController == nil) { + alertwindow = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + alertwindow.rootViewController = [UIViewController new]; + alertwindow.windowLevel = UIWindowLevelAlert; + + window = alertwindow; -@end /* UIKit_UIAlertViewDelegate */ + [alertwindow makeKeyAndVisible]; + } + [window.rootViewController presentViewController:alert animated:YES completion:nil]; + UIKit_WaitUntilMessageBoxClosed(messageboxdata, &clickedindex); -SDL_bool -UIKit_ShowingMessageBox() -{ - return s_showingMessageBox; + if (alertwindow) { + alertwindow.hidden = YES; + } + + *buttonid = messageboxdata->buttons[clickedindex].buttonid; + return YES; +#else + return NO; +#endif /* __IPHONE_8_0 */ } -int -UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) -{ - int clicked; +/* UIAlertView is deprecated in iOS 8+ in favor of UIAlertController. */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 +@interface SDLAlertViewDelegate : NSObject - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; +@property (nonatomic, assign) int *clickedIndex; - UIAlertView* alert = [[UIAlertView alloc] init]; +@end - alert.title = [NSString stringWithUTF8String:messageboxdata->title]; - alert.message = [NSString stringWithUTF8String:messageboxdata->message]; - alert.delegate = [[UIKit_UIAlertViewDelegate alloc] initWithButtonIndex:&clicked]; +@implementation SDLAlertViewDelegate - const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons; +- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex +{ + if (_clickedIndex != NULL) { + *_clickedIndex = (int) buttonIndex; + } +} + +@end +#endif /* __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 */ + +static BOOL +UIKit_ShowMessageBoxAlertView(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ + /* UIAlertView is deprecated in iOS 8+ in favor of UIAlertController. */ +#if __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 int i; - for (i = 0; i < messageboxdata->numbuttons; ++i) { - [alert addButtonWithTitle:[[NSString alloc] initWithUTF8String:buttons[i].text]]; + int clickedindex = messageboxdata->numbuttons; + const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons; + UIAlertView *alert = [[UIAlertView alloc] init]; + SDLAlertViewDelegate *delegate = [[SDLAlertViewDelegate alloc] init]; + + alert.delegate = delegate; + alert.title = @(messageboxdata->title); + alert.message = @(messageboxdata->message); + + for (i = 0; i < messageboxdata->numbuttons; i++) { + [alert addButtonWithTitle:@(buttons[i].text)]; } - /* Set up for showing the alert */ - clicked = messageboxdata->numbuttons; + delegate.clickedIndex = &clickedindex; [alert show]; - /* Run the main event loop until the alert has finished */ - /* Note that this needs to be done on the main thread */ - s_showingMessageBox = SDL_TRUE; - while (clicked == messageboxdata->numbuttons) { - [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; - } - s_showingMessageBox = SDL_FALSE; + UIKit_WaitUntilMessageBoxClosed(messageboxdata, &clickedindex); + + alert.delegate = nil; + + *buttonid = messageboxdata->buttons[clickedindex].buttonid; + return YES; +#else + return NO; +#endif /* __IPHONE_OS_VERSION_MIN_REQUIRED < 80000 */ +} - *buttonid = messageboxdata->buttons[clicked].buttonid; +int +UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ + BOOL success = NO; - [alert.delegate release]; - [alert release]; + @autoreleasepool { + success = UIKit_ShowMessageBoxAlertController(messageboxdata, buttonid); + if (!success) { + success = UIKit_ShowMessageBoxAlertView(messageboxdata, buttonid); + } + } - [pool release]; + if (!success) { + return SDL_SetError("Could not show message box."); + } return 0; } diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.h index ae9ced6597..027cf7aa03 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,19 +25,17 @@ #include "SDL_uikitvideo.h" -typedef struct -{ - UIScreen *uiscreen; - CGFloat scale; -} SDL_DisplayData; +@interface SDL_DisplayData : NSObject -typedef struct -{ - UIScreenMode *uiscreenmode; - CGFloat scale; -} SDL_DisplayModeData; +@property (nonatomic, strong) UIScreen *uiscreen; -extern BOOL SDL_UIKit_supports_multiple_displays; +@end + +@interface SDL_DisplayModeData : NSObject + +@property (nonatomic, strong) UIScreenMode *uiscreenmode; + +@end extern SDL_bool UIKit_IsDisplayLandscape(UIScreen *uiscreen); diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.m index dddb2f1454..98d0314848 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitmodes.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,30 +25,36 @@ #include "SDL_assert.h" #include "SDL_uikitmodes.h" +@implementation SDL_DisplayData -BOOL SDL_UIKit_supports_multiple_displays = NO; +@synthesize uiscreen; + +@end + +@implementation SDL_DisplayModeData + +@synthesize uiscreenmode; + +@end static int UIKit_AllocateDisplayModeData(SDL_DisplayMode * mode, - UIScreenMode * uiscreenmode, CGFloat scale) + UIScreenMode * uiscreenmode) { - SDL_DisplayModeData *data = NULL; + SDL_DisplayModeData *data = nil; if (uiscreenmode != nil) { /* Allocate the display mode data */ - data = (SDL_DisplayModeData *) SDL_malloc(sizeof(*data)); + data = [[SDL_DisplayModeData alloc] init]; if (!data) { return SDL_OutOfMemory(); } - data->uiscreenmode = uiscreenmode; - [data->uiscreenmode retain]; - - data->scale = scale; + data.uiscreenmode = uiscreenmode; } - mode->driverdata = data; + mode->driverdata = (void *) CFBridgingRetain(data); return 0; } @@ -56,27 +62,22 @@ static void UIKit_FreeDisplayModeData(SDL_DisplayMode * mode) { - if (!SDL_UIKit_supports_multiple_displays) { - /* Not on at least iPhoneOS 3.2 (versions prior to iPad). */ - SDL_assert(mode->driverdata == NULL); - } else if (mode->driverdata != NULL) { - SDL_DisplayModeData *data = (SDL_DisplayModeData *)mode->driverdata; - [data->uiscreenmode release]; - SDL_free(data); + if (mode->driverdata != NULL) { + CFRelease(mode->driverdata); mode->driverdata = NULL; } } static int UIKit_AddSingleDisplayMode(SDL_VideoDisplay * display, int w, int h, - UIScreenMode * uiscreenmode, CGFloat scale) + UIScreenMode * uiscreenmode) { SDL_DisplayMode mode; SDL_zero(mode); mode.format = SDL_PIXELFORMAT_ABGR8888; mode.refresh_rate = 0; - if (UIKit_AllocateDisplayModeData(&mode, uiscreenmode, scale) < 0) { + if (UIKit_AllocateDisplayModeData(&mode, uiscreenmode) < 0) { return -1; } @@ -91,16 +92,16 @@ } static int -UIKit_AddDisplayMode(SDL_VideoDisplay * display, int w, int h, CGFloat scale, +UIKit_AddDisplayMode(SDL_VideoDisplay * display, int w, int h, UIScreenMode * uiscreenmode, SDL_bool addRotation) { - if (UIKit_AddSingleDisplayMode(display, w, h, uiscreenmode, scale) < 0) { + if (UIKit_AddSingleDisplayMode(display, w, h, uiscreenmode) < 0) { return -1; } if (addRotation) { /* Add the rotated version */ - if (UIKit_AddSingleDisplayMode(display, h, w, uiscreenmode, scale) < 0) { + if (UIKit_AddSingleDisplayMode(display, h, w, uiscreenmode) < 0) { return -1; } } @@ -111,7 +112,7 @@ static int UIKit_AddDisplay(UIScreen *uiscreen) { - CGSize size = [uiscreen bounds].size; + CGSize size = uiscreen.bounds.size; /* Make sure the width/height are oriented correctly */ if (UIKit_IsDisplayLandscape(uiscreen) != (size.width > size.height)) { @@ -120,37 +121,16 @@ size.height = height; } - /* When dealing with UIKit all coordinates are specified in terms of - * what Apple refers to as points. On earlier devices without the - * so called "Retina" display, there is a one to one mapping between - * points and pixels. In other cases [UIScreen scale] indicates the - * relationship between points and pixels. Since SDL has no notion - * of points, we must compensate in all cases where dealing with such - * units. - */ - CGFloat scale; - if ([UIScreen instancesRespondToSelector:@selector(scale)]) { - scale = [uiscreen scale]; /* iOS >= 4.0 */ - } else { - scale = 1.0f; /* iOS < 4.0 */ - } - SDL_VideoDisplay display; SDL_DisplayMode mode; SDL_zero(mode); mode.format = SDL_PIXELFORMAT_ABGR8888; - mode.w = (int)(size.width * scale); - mode.h = (int)(size.height * scale); - - UIScreenMode * uiscreenmode = nil; - /* UIScreenMode showed up in 3.2 (the iPad and later). We're - * misusing this supports_multiple_displays flag here for that. - */ - if (SDL_UIKit_supports_multiple_displays) { - uiscreenmode = [uiscreen currentMode]; - } + mode.w = (int) size.width; + mode.h = (int) size.height; + + UIScreenMode *uiscreenmode = uiscreen.currentMode; - if (UIKit_AllocateDisplayModeData(&mode, uiscreenmode, scale) < 0) { + if (UIKit_AllocateDisplayModeData(&mode, uiscreenmode) < 0) { return -1; } @@ -159,17 +139,15 @@ display.current_mode = mode; /* Allocate the display data */ - SDL_DisplayData *data = (SDL_DisplayData *) SDL_malloc(sizeof(*data)); + SDL_DisplayData *data = [[SDL_DisplayData alloc] init]; if (!data) { UIKit_FreeDisplayModeData(&display.desktop_mode); return SDL_OutOfMemory(); } - [uiscreen retain]; - data->uiscreen = uiscreen; - data->scale = scale; + data.uiscreen = uiscreen; - display.driverdata = data; + display.driverdata = (void *) CFBridgingRetain(data); SDL_AddVideoDisplay(&display); return 0; @@ -179,9 +157,9 @@ UIKit_IsDisplayLandscape(UIScreen *uiscreen) { if (uiscreen == [UIScreen mainScreen]) { - return UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]); + return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); } else { - CGSize size = [uiscreen bounds].size; + CGSize size = uiscreen.bounds.size; return (size.width > size.height); } } @@ -189,49 +167,40 @@ int UIKit_InitModes(_THIS) { - /* this tells us whether we are running on ios >= 3.2 */ - SDL_UIKit_supports_multiple_displays = [UIScreen instancesRespondToSelector:@selector(currentMode)]; - - /* Add the main screen. */ - if (UIKit_AddDisplay([UIScreen mainScreen]) < 0) { - return -1; - } - - /* If this is iPhoneOS < 3.2, all devices are one screen, 320x480 pixels. */ - /* The iPad added both a larger main screen and the ability to use - * external displays. So, add the other displays (screens in UI speak). - */ - if (SDL_UIKit_supports_multiple_displays) { + @autoreleasepool { for (UIScreen *uiscreen in [UIScreen screens]) { - /* Only add the other screens */ - if (uiscreen != [UIScreen mainScreen]) { - if (UIKit_AddDisplay(uiscreen) < 0) { - return -1; - } + if (UIKit_AddDisplay(uiscreen) < 0) { + return -1; } } } - /* We're done! */ return 0; } void UIKit_GetDisplayModes(_THIS, SDL_VideoDisplay * display) { - SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; - - SDL_bool isLandscape = UIKit_IsDisplayLandscape(data->uiscreen); - SDL_bool addRotation = (data->uiscreen == [UIScreen mainScreen]); + @autoreleasepool { + SDL_DisplayData *data = (__bridge SDL_DisplayData *) display->driverdata; + + SDL_bool isLandscape = UIKit_IsDisplayLandscape(data.uiscreen); + SDL_bool addRotation = (data.uiscreen == [UIScreen mainScreen]); + CGFloat scale = data.uiscreen.scale; + +#ifdef __IPHONE_8_0 + /* The UIScreenMode of an iPhone 6 Plus should be 1080x1920 rather than + * 1242x2208 (414x736@3x), so we should use the native scale. */ + if ([data.uiscreen respondsToSelector:@selector(nativeScale)]) { + scale = data.uiscreen.nativeScale; + } +#endif - if (SDL_UIKit_supports_multiple_displays) { - /* availableModes showed up in 3.2 (the iPad and later). We should only - * land here for at least that version of the OS. - */ - for (UIScreenMode *uimode in [data->uiscreen availableModes]) { - CGSize size = [uimode size]; - int w = (int)size.width; - int h = (int)size.height; + for (UIScreenMode *uimode in data.uiscreen.availableModes) { + /* The size of a UIScreenMode is in pixels, but we deal exclusively + * in points (except in SDL_GL_GetDrawableSize.) */ + int w = (int)(uimode.size.width / scale); + int h = (int)(uimode.size.height / scale); /* Make sure the width/height are oriented correctly */ if (isLandscape != (w > h)) { @@ -240,59 +209,36 @@ h = tmp; } - /* Add the native screen resolution. */ - UIKit_AddDisplayMode(display, w, h, data->scale, uimode, addRotation); - - if (data->scale != 1.0f) { - /* Add the native screen resolution divided by its scale. - * This is so devices capable of e.g. 640x960 also advertise 320x480. - */ - UIKit_AddDisplayMode(display, - (int)(size.width / data->scale), - (int)(size.height / data->scale), - 1.0f, uimode, addRotation); - } - } - } else { - const CGSize size = [data->uiscreen bounds].size; - int w = (int)size.width; - int h = (int)size.height; - - /* Make sure the width/height are oriented correctly */ - if (isLandscape != (w > h)) { - int tmp = w; - w = h; - h = tmp; + UIKit_AddDisplayMode(display, w, h, uimode, addRotation); } - - UIKit_AddDisplayMode(display, w, h, 1.0f, nil, addRotation); } } int UIKit_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) { - SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; + @autoreleasepool { + SDL_DisplayData *data = (__bridge SDL_DisplayData *) display->driverdata; + SDL_DisplayModeData *modedata = (__bridge SDL_DisplayModeData *)mode->driverdata; - if (!SDL_UIKit_supports_multiple_displays) { - /* Not on at least iPhoneOS 3.2 (versions prior to iPad). */ - SDL_assert(mode->driverdata == NULL); - } else { - SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)mode->driverdata; - [data->uiscreen setCurrentMode:modedata->uiscreenmode]; + [data.uiscreen setCurrentMode:modedata.uiscreenmode]; - if (data->uiscreen == [UIScreen mainScreen]) { + if (data.uiscreen == [UIScreen mainScreen]) { + /* [UIApplication setStatusBarOrientation:] no longer works reliably + * in recent iOS versions, so we can't rotate the screen when setting + * the display mode. */ if (mode->w > mode->h) { - if (!UIKit_IsDisplayLandscape(data->uiscreen)) { - [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; + if (!UIKit_IsDisplayLandscape(data.uiscreen)) { + return SDL_SetError("Screen orientation does not match display mode size"); } } else if (mode->w < mode->h) { - if (UIKit_IsDisplayLandscape(data->uiscreen)) { - [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; + if (UIKit_IsDisplayLandscape(data.uiscreen)) { + return SDL_SetError("Screen orientation does not match display mode size"); } } } } + return 0; } @@ -301,19 +247,21 @@ { /* Release Objective-C objects, so higher level doesn't free() them. */ int i, j; - for (i = 0; i < _this->num_displays; i++) { - SDL_VideoDisplay *display = &_this->displays[i]; + @autoreleasepool { + for (i = 0; i < _this->num_displays; i++) { + SDL_VideoDisplay *display = &_this->displays[i]; + + UIKit_FreeDisplayModeData(&display->desktop_mode); + for (j = 0; j < display->num_display_modes; j++) { + SDL_DisplayMode *mode = &display->display_modes[j]; + UIKit_FreeDisplayModeData(mode); + } - UIKit_FreeDisplayModeData(&display->desktop_mode); - for (j = 0; j < display->num_display_modes; j++) { - SDL_DisplayMode *mode = &display->display_modes[j]; - UIKit_FreeDisplayModeData(mode); + if (display->driverdata != NULL) { + CFRelease(display->driverdata); + display->driverdata = NULL; + } } - - SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; - [data->uiscreen release]; - SDL_free(data); - display->driverdata = NULL; } } diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.h index 947678cae8..10697610db 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,6 +25,8 @@ extern int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); +extern void UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window, + int * w, int * h); extern void UIKit_GL_SwapWindow(_THIS, SDL_Window * window); extern SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window); extern void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context); diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.m index 42303e3cb8..a2ea4ab679 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitopengles.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,10 +23,10 @@ #if SDL_VIDEO_DRIVER_UIKIT #include "SDL_uikitopengles.h" -#include "SDL_uikitopenglview.h" -#include "SDL_uikitappdelegate.h" +#import "SDL_uikitopenglview.h" #include "SDL_uikitmodes.h" #include "SDL_uikitwindow.h" +#include "SDL_uikitevents.h" #include "../SDL_sysvideo.h" #include "../../events/SDL_keyboard_c.h" #include "../../events/SDL_mouse_c.h" @@ -34,146 +34,187 @@ #include "SDL_loadso.h" #include -static int UIKit_GL_Initialize(_THIS); +@interface SDLEAGLContext : EAGLContext + +/* The OpenGL ES context owns a view / drawable. */ +@property (nonatomic, strong) SDL_uikitopenglview *sdlView; + +@end + +@implementation SDLEAGLContext + +- (void)dealloc +{ + /* When the context is deallocated, its view should be removed from any + * SDL window that it's attached to. */ + [self.sdlView setSDLWindow:NULL]; +} + +@end void * UIKit_GL_GetProcAddress(_THIS, const char *proc) { /* Look through all SO's for the proc symbol. Here's why: - -Looking for the path to the OpenGL Library seems not to work in the iPhone Simulator. - -We don't know that the path won't change in the future. - */ + * -Looking for the path to the OpenGL Library seems not to work in the iOS Simulator. + * -We don't know that the path won't change in the future. */ return dlsym(RTLD_DEFAULT, proc); } /* - note that SDL_GL_Delete context makes it current without passing the window + note that SDL_GL_DeleteContext makes it current without passing the window */ -int UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) +int +UIKit_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) { - if (context) { - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - [data->view setCurrentContext]; - } - else { - [EAGLContext setCurrentContext: nil]; + @autoreleasepool { + SDLEAGLContext *eaglcontext = (__bridge SDLEAGLContext *) context; + + if (![EAGLContext setCurrentContext:eaglcontext]) { + return SDL_SetError("Could not make EAGL context current"); + } + + if (eaglcontext) { + [eaglcontext.sdlView setSDLWindow:window]; + } } return 0; } +void +UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h) +{ + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata; + UIView *view = data.viewcontroller.view; + if ([view isKindOfClass:[SDL_uikitopenglview class]]) { + SDL_uikitopenglview *glview = (SDL_uikitopenglview *) view; + if (w) { + *w = glview.backingWidth; + } + if (h) { + *h = glview.backingHeight; + } + } + } +} + int UIKit_GL_LoadLibrary(_THIS, const char *path) { - /* - shouldn't be passing a path into this function - why? Because we've already loaded the library - and because the SDK forbids loading an external SO - */ + /* We shouldn't pass a path to this function, since we've already loaded the + * library. */ if (path != NULL) { - return SDL_SetError("iPhone GL Load Library just here for compatibility"); + return SDL_SetError("iOS GL Load Library just here for compatibility"); } return 0; } void UIKit_GL_SwapWindow(_THIS, SDL_Window * window) { + @autoreleasepool { + SDLEAGLContext *context = (__bridge SDLEAGLContext *) SDL_GL_GetCurrentContext(); + #if SDL_POWER_UIKIT - /* Check once a frame to see if we should turn off the battery monitor. */ - SDL_UIKit_UpdateBatteryMonitoring(); + /* Check once a frame to see if we should turn off the battery monitor. */ + SDL_UIKit_UpdateBatteryMonitoring(); #endif - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + [context.sdlView swapBuffers]; - if (nil == data->view) { - return; + /* You need to pump events in order for the OS to make changes visible. + * We don't pump events here because we don't want iOS application events + * (low memory, terminate, etc.) to happen inside low level rendering. */ } - [data->view swapBuffers]; - - /* You need to pump events in order for the OS to make changes visible. - We don't pump events here because we don't want iOS application events - (low memory, terminate, etc.) to happen inside low level rendering. - */ } -SDL_GLContext UIKit_GL_CreateContext(_THIS, SDL_Window * window) +SDL_GLContext +UIKit_GL_CreateContext(_THIS, SDL_Window * window) { - SDL_uikitopenglview *view; - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_DisplayData *displaydata = display->driverdata; - SDL_DisplayModeData *displaymodedata = display->current_mode.driverdata; - UIWindow *uiwindow = data->uiwindow; - EAGLSharegroup *share_group = nil; - - if (_this->gl_config.share_with_current_context) { - SDL_uikitopenglview *view = (SDL_uikitopenglview *) SDL_GL_GetCurrentContext(); - share_group = [view.context sharegroup]; - } + @autoreleasepool { + SDLEAGLContext *context = nil; + SDL_uikitopenglview *view; + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + CGRect frame = UIKit_ComputeViewFrame(window, data.uiwindow.screen); + EAGLSharegroup *sharegroup = nil; + CGFloat scale = 1.0; + int samples = 0; + + /* The EAGLRenderingAPI enum values currently map 1:1 to major GLES + * versions. */ + EAGLRenderingAPI api = _this->gl_config.major_version; + + if (_this->gl_config.multisamplebuffers > 0) { + samples = _this->gl_config.multisamplesamples; + } - /* construct our view, passing in SDL's OpenGL configuration data */ - CGRect frame; - if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) { - frame = [displaydata->uiscreen bounds]; - } else { - frame = [displaydata->uiscreen applicationFrame]; - } - view = [[SDL_uikitopenglview alloc] initWithFrame: frame - scale: displaymodedata->scale - retainBacking: _this->gl_config.retained_backing - rBits: _this->gl_config.red_size - gBits: _this->gl_config.green_size - bBits: _this->gl_config.blue_size - aBits: _this->gl_config.alpha_size - depthBits: _this->gl_config.depth_size - stencilBits: _this->gl_config.stencil_size - majorVersion: _this->gl_config.major_version - shareGroup: share_group]; - if (!view) { - return NULL; - } + if (_this->gl_config.share_with_current_context) { + EAGLContext *context = (__bridge EAGLContext *) SDL_GL_GetCurrentContext(); + sharegroup = context.sharegroup; + } - data->view = view; - view->viewcontroller = data->viewcontroller; - if (view->viewcontroller != nil) { - [view->viewcontroller setView:view]; - [view->viewcontroller retain]; - } - [uiwindow addSubview: view]; + if (window->flags & SDL_WINDOW_ALLOW_HIGHDPI) { + /* Set the scale to the natural scale factor of the screen - the + * backing dimensions of the OpenGL view will match the pixel + * dimensions of the screen rather than the dimensions in points. */ +#ifdef __IPHONE_8_0 + if ([data.uiwindow.screen respondsToSelector:@selector(nativeScale)]) { + scale = data.uiwindow.screen.nativeScale; + } else +#endif + { + scale = data.uiwindow.screen.scale; + } + } - /* The view controller needs to be the root in order to control rotation on iOS 6.0 */ - if (uiwindow.rootViewController == nil) { - uiwindow.rootViewController = view->viewcontroller; - } + context = [[SDLEAGLContext alloc] initWithAPI:api sharegroup:sharegroup]; + if (!context) { + SDL_SetError("OpenGL ES %d context could not be created", _this->gl_config.major_version); + return NULL; + } - if (UIKit_GL_MakeCurrent(_this, window, view) < 0) { - UIKit_GL_DeleteContext(_this, view); - return NULL; - } + /* construct our view, passing in SDL's OpenGL configuration data */ + view = [[SDL_uikitopenglview alloc] initWithFrame:frame + scale:scale + retainBacking:_this->gl_config.retained_backing + rBits:_this->gl_config.red_size + gBits:_this->gl_config.green_size + bBits:_this->gl_config.blue_size + aBits:_this->gl_config.alpha_size + depthBits:_this->gl_config.depth_size + stencilBits:_this->gl_config.stencil_size + sRGB:_this->gl_config.framebuffer_srgb_capable + multisamples:samples + context:context]; + + if (!view) { + return NULL; + } - /* Make this window the current mouse focus for touch input */ - if (displaydata->uiscreen == [UIScreen mainScreen]) { - SDL_SetMouseFocus(window); - SDL_SetKeyboardFocus(window); - } + /* The context owns the view / drawable. */ + context.sdlView = view; - return view; + if (UIKit_GL_MakeCurrent(_this, window, (__bridge SDL_GLContext) context) < 0) { + UIKit_GL_DeleteContext(_this, (SDL_GLContext) CFBridgingRetain(context)); + return NULL; + } + + /* We return a +1'd context. The window's driverdata owns the view (via + * MakeCurrent.) */ + return (SDL_GLContext) CFBridgingRetain(context); + } } -void UIKit_GL_DeleteContext(_THIS, SDL_GLContext context) +void +UIKit_GL_DeleteContext(_THIS, SDL_GLContext context) { - /* the delegate has retained the view, this will release him */ - SDL_uikitopenglview *view = (SDL_uikitopenglview *)context; - if (view->viewcontroller) { - UIWindow *uiwindow = (UIWindow *)view.superview; - if (uiwindow.rootViewController == view->viewcontroller) { - uiwindow.rootViewController = nil; - } - [view->viewcontroller setView:nil]; - [view->viewcontroller release]; + @autoreleasepool { + /* The context was retained in SDL_GL_CreateContext, so we release it + * here. The context's view will be detached from its window when the + * context is deallocated. */ + CFRelease(context); } - [view removeFromSuperview]; - [view release]; } #endif /* SDL_VIDEO_DRIVER_UIKIT */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.h index f04b5b0bbd..86fb5e12e3 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,66 +21,40 @@ #import #import -#import -#import -#import "SDL_uikitview.h" -/* - This class wraps the CAEAGLLayer from CoreAnimation into a convenient UIView subclass. - The view content is basically an EAGL surface you render your OpenGL scene into. - Note that setting the view non-opaque will only work if the EAGL surface has an alpha channel. - */ -@interface SDL_uikitopenglview : SDL_uikitview { +#import -@private - /* The pixel dimensions of the backbuffer */ - GLint backingWidth; - GLint backingHeight; - - EAGLContext *context; +#import "SDL_uikitview.h" +#include "SDL_uikitvideo.h" - /* OpenGL names for the renderbuffer and framebuffers used to render to this view */ - GLuint viewRenderbuffer, viewFramebuffer; +@interface SDL_uikitopenglview : SDL_uikitview - /* OpenGL name for the depth buffer that is attached to viewFramebuffer, if it exists (0 if it does not exist) */ - GLuint depthRenderbuffer; +- (instancetype)initWithFrame:(CGRect)frame + scale:(CGFloat)scale + retainBacking:(BOOL)retained + rBits:(int)rBits + gBits:(int)gBits + bBits:(int)bBits + aBits:(int)aBits + depthBits:(int)depthBits + stencilBits:(int)stencilBits + sRGB:(BOOL)sRGB + multisamples:(int)multisamples + context:(EAGLContext *)glcontext; - /* format of depthRenderbuffer */ - GLenum depthBufferFormat; +@property (nonatomic, readonly, weak) EAGLContext *context; - id displayLink; - int animationInterval; - void (*animationCallback)(void*); - void *animationCallbackParam; -} +/* The width and height of the drawable in pixels (as opposed to points.) */ +@property (nonatomic, readonly) int backingWidth; +@property (nonatomic, readonly) int backingHeight; -@property (nonatomic, retain, readonly) EAGLContext *context; +@property (nonatomic, readonly) GLuint drawableRenderbuffer; +@property (nonatomic, readonly) GLuint drawableFramebuffer; +@property (nonatomic, readonly) GLuint msaaResolveFramebuffer; - (void)swapBuffers; -- (void)setCurrentContext; - -- (id)initWithFrame:(CGRect)frame - scale:(CGFloat)scale - retainBacking:(BOOL)retained - rBits:(int)rBits - gBits:(int)gBits - bBits:(int)bBits - aBits:(int)aBits - depthBits:(int)depthBits - stencilBits:(int)stencilBits - majorVersion:(int)majorVersion - shareGroup:(EAGLSharegroup*)shareGroup; - (void)updateFrame; -- (void)setAnimationCallback:(int)interval - callback:(void (*)(void*))callback - callbackParam:(void*)callbackParam; - -- (void)startAnimation; -- (void)stopAnimation; - -- (void)doLoop:(id)sender; - @end /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.m index 5c163c9a09..60c247e6ad 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitopenglview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,221 +22,359 @@ #if SDL_VIDEO_DRIVER_UIKIT -#include #include -#include "SDL_uikitopenglview.h" -#include "SDL_uikitmessagebox.h" +#include +#import "SDL_uikitopenglview.h" +#include "SDL_uikitwindow.h" +@implementation SDL_uikitopenglview { + /* The renderbuffer and framebuffer used to render to this layer. */ + GLuint viewRenderbuffer, viewFramebuffer; -@implementation SDL_uikitopenglview + /* The depth buffer that is attached to viewFramebuffer, if it exists. */ + GLuint depthRenderbuffer; + + GLenum colorBufferFormat; + + /* format of depthRenderbuffer */ + GLenum depthBufferFormat; + + /* The framebuffer and renderbuffer used for rendering with MSAA. */ + GLuint msaaFramebuffer, msaaRenderbuffer; + + /* The number of MSAA samples. */ + int samples; + + BOOL retainedBacking; +} @synthesize context; +@synthesize backingWidth; +@synthesize backingHeight; + (Class)layerClass { return [CAEAGLLayer class]; } -- (id)initWithFrame:(CGRect)frame - scale:(CGFloat)scale - retainBacking:(BOOL)retained - rBits:(int)rBits - gBits:(int)gBits - bBits:(int)bBits - aBits:(int)aBits - depthBits:(int)depthBits - stencilBits:(int)stencilBits - majorVersion:(int)majorVersion - shareGroup:(EAGLSharegroup*)shareGroup +- (instancetype)initWithFrame:(CGRect)frame + scale:(CGFloat)scale + retainBacking:(BOOL)retained + rBits:(int)rBits + gBits:(int)gBits + bBits:(int)bBits + aBits:(int)aBits + depthBits:(int)depthBits + stencilBits:(int)stencilBits + sRGB:(BOOL)sRGB + multisamples:(int)multisamples + context:(EAGLContext *)glcontext { - depthBufferFormat = 0; - if ((self = [super initWithFrame:frame])) { const BOOL useStencilBuffer = (stencilBits != 0); const BOOL useDepthBuffer = (depthBits != 0); NSString *colorFormat = nil; - /* The EAGLRenderingAPI enum values currently map 1:1 to major GLES - versions, and this allows us to handle future OpenGL ES versions. - */ - EAGLRenderingAPI api = majorVersion; + context = glcontext; + samples = multisamples; + retainedBacking = retained; + + if (!context || ![EAGLContext setCurrentContext:context]) { + SDL_SetError("Could not create OpenGL ES drawable (could not make context current)"); + return nil; + } + + if (samples > 0) { + GLint maxsamples = 0; + glGetIntegerv(GL_MAX_SAMPLES, &maxsamples); - if (rBits == 8 && gBits == 8 && bBits == 8) { + /* Clamp the samples to the max supported count. */ + samples = MIN(samples, maxsamples); + } + + if (sRGB) { + /* sRGB EAGL drawable support was added in iOS 7. */ + if (UIKit_IsSystemVersionAtLeast(7.0)) { + colorFormat = kEAGLColorFormatSRGBA8; + colorBufferFormat = GL_SRGB8_ALPHA8; + } else { + SDL_SetError("sRGB drawables are not supported."); + return nil; + } + } else if (rBits >= 8 || gBits >= 8 || bBits >= 8) { /* if user specifically requests rbg888 or some color format higher than 16bpp */ colorFormat = kEAGLColorFormatRGBA8; + colorBufferFormat = GL_RGBA8; } else { - /* default case (faster) */ + /* default case (potentially faster) */ colorFormat = kEAGLColorFormatRGB565; + colorBufferFormat = GL_RGB565; } - /* Get the layer */ CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer; eaglLayer.opaque = YES; - eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool: retained], kEAGLDrawablePropertyRetainedBacking, colorFormat, kEAGLDrawablePropertyColorFormat, nil]; + eaglLayer.drawableProperties = @{ + kEAGLDrawablePropertyRetainedBacking:@(retained), + kEAGLDrawablePropertyColorFormat:colorFormat + }; - context = [[EAGLContext alloc] initWithAPI:api sharegroup:shareGroup]; - if (!context || ![EAGLContext setCurrentContext:context]) { - [self release]; - SDL_SetError("OpenGL ES %d not supported", majorVersion); + /* Set the appropriate scale (for retina display support) */ + self.contentScaleFactor = scale; + + /* Create the color Renderbuffer Object */ + glGenRenderbuffers(1, &viewRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); + + if (![context renderbufferStorage:GL_RENDERBUFFER fromDrawable:eaglLayer]) { + SDL_SetError("Failed to create OpenGL ES drawable"); return nil; } - /* Set the appropriate scale (for retina display support) */ - if ([self respondsToSelector:@selector(contentScaleFactor)]) - self.contentScaleFactor = scale; + /* Create the Framebuffer Object */ + glGenFramebuffers(1, &viewFramebuffer); + glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer); + + /* attach the color renderbuffer to the FBO */ + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer); + + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); + + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + SDL_SetError("Failed creating OpenGL ES framebuffer"); + return nil; + } + + /* When MSAA is used we'll use a separate framebuffer for rendering to, + * since we'll need to do an explicit MSAA resolve before presenting. */ + if (samples > 0) { + glGenFramebuffers(1, &msaaFramebuffer); + glBindFramebuffer(GL_FRAMEBUFFER, msaaFramebuffer); - /* create the buffers */ - glGenFramebuffersOES(1, &viewFramebuffer); - glGenRenderbuffersOES(1, &viewRenderbuffer); + glGenRenderbuffers(1, &msaaRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, msaaRenderbuffer); - glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); + glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, colorBufferFormat, backingWidth, backingHeight); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, msaaRenderbuffer); + } - if ((useDepthBuffer) || (useStencilBuffer)) { + if (useDepthBuffer || useStencilBuffer) { if (useStencilBuffer) { /* Apparently you need to pack stencil and depth into one buffer. */ depthBufferFormat = GL_DEPTH24_STENCIL8_OES; } else if (useDepthBuffer) { - /* iOS only has 24-bit depth buffers, even with GL_DEPTH_COMPONENT16_OES */ + /* iOS only uses 32-bit float (exposed as fixed point 24-bit) + * depth buffers. */ depthBufferFormat = GL_DEPTH_COMPONENT24_OES; } - glGenRenderbuffersOES(1, &depthRenderbuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); - glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depthBufferFormat, backingWidth, backingHeight); + glGenRenderbuffers(1, &depthRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); + + if (samples > 0) { + glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, depthBufferFormat, backingWidth, backingHeight); + } else { + glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight); + } + if (useDepthBuffer) { - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); } if (useStencilBuffer) { - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_STENCIL_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); } } - if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) { - return NO; + if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { + SDL_SetError("Failed creating OpenGL ES framebuffer"); + return nil; } - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - /* end create buffers */ + glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); - self.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - self.autoresizesSubviews = YES; + [self setDebugLabels]; } + return self; } +- (GLuint)drawableRenderbuffer +{ + return viewRenderbuffer; +} + +- (GLuint)drawableFramebuffer +{ + /* When MSAA is used, the MSAA draw framebuffer is used for drawing. */ + if (msaaFramebuffer) { + return msaaFramebuffer; + } else { + return viewFramebuffer; + } +} + +- (GLuint)msaaResolveFramebuffer +{ + /* When MSAA is used, the MSAA draw framebuffer is used for drawing and the + * view framebuffer is used as a MSAA resolve framebuffer. */ + if (msaaFramebuffer) { + return viewFramebuffer; + } else { + return 0; + } +} + - (void)updateFrame { - glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, 0); - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, 0); - glDeleteRenderbuffersOES(1, &viewRenderbuffer); + GLint prevRenderbuffer = 0; + glGetIntegerv(GL_RENDERBUFFER_BINDING, &prevRenderbuffer); - glGenRenderbuffersOES(1, &viewRenderbuffer); - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); - [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer]; - glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer); + [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer]; - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); - glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &backingWidth); + glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &backingHeight); + + if (msaaRenderbuffer != 0) { + glBindRenderbuffer(GL_RENDERBUFFER, msaaRenderbuffer); + glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_RGBA8, backingWidth, backingHeight); + } if (depthRenderbuffer != 0) { - glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); - glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depthBufferFormat, backingWidth, backingHeight); + glBindRenderbuffer(GL_RENDERBUFFER, depthRenderbuffer); + + if (samples > 0) { + glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, depthBufferFormat, backingWidth, backingHeight); + } else { + glRenderbufferStorage(GL_RENDERBUFFER, depthBufferFormat, backingWidth, backingHeight); + } } - glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); + glBindRenderbuffer(GL_RENDERBUFFER, prevRenderbuffer); } -- (void)setAnimationCallback:(int)interval - callback:(void (*)(void*))callback - callbackParam:(void*)callbackParam +- (void)setDebugLabels { - [self stopAnimation]; - - animationInterval = interval; - animationCallback = callback; - animationCallbackParam = callbackParam; + if (viewFramebuffer != 0) { + glLabelObjectEXT(GL_FRAMEBUFFER, viewFramebuffer, 0, "context FBO"); + } - if (animationCallback) - [self startAnimation]; -} + if (viewRenderbuffer != 0) { + glLabelObjectEXT(GL_RENDERBUFFER, viewRenderbuffer, 0, "context color buffer"); + } -- (void)startAnimation -{ - /* CADisplayLink is API new to iPhone SDK 3.1. - * Compiling against earlier versions will result in a warning, but can be dismissed - * if the system version runtime check for CADisplayLink exists in -initWithCoder:. - */ - displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doLoop:)]; - [displayLink setFrameInterval:animationInterval]; - [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; -} + if (depthRenderbuffer != 0) { + if (depthBufferFormat == GL_DEPTH24_STENCIL8_OES) { + glLabelObjectEXT(GL_RENDERBUFFER, depthRenderbuffer, 0, "context depth-stencil buffer"); + } else { + glLabelObjectEXT(GL_RENDERBUFFER, depthRenderbuffer, 0, "context depth buffer"); + } + } -- (void)stopAnimation -{ - [displayLink invalidate]; - displayLink = nil; -} + if (msaaFramebuffer != 0) { + glLabelObjectEXT(GL_FRAMEBUFFER, msaaFramebuffer, 0, "context MSAA FBO"); + } -- (void)doLoop:(id)sender -{ - /* Don't run the game loop while a messagebox is up */ - if (!UIKit_ShowingMessageBox()) { - animationCallback(animationCallbackParam); + if (msaaRenderbuffer != 0) { + glLabelObjectEXT(GL_RENDERBUFFER, msaaRenderbuffer, 0, "context MSAA renderbuffer"); } } -- (void)setCurrentContext +- (void)swapBuffers { - [EAGLContext setCurrentContext:context]; -} + if (msaaFramebuffer) { + const GLenum attachments[] = {GL_COLOR_ATTACHMENT0}; + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, viewFramebuffer); + + /* OpenGL ES 3+ provides explicit MSAA resolves via glBlitFramebuffer. + * In OpenGL ES 1 and 2, MSAA resolves must be done via an extension. */ + if (context.API >= kEAGLRenderingAPIOpenGLES3) { + int w = backingWidth; + int h = backingHeight; + glBlitFramebuffer(0, 0, w, h, 0, 0, w, h, GL_COLOR_BUFFER_BIT, GL_NEAREST); + + if (!retainedBacking) { + /* Discard the contents of the MSAA drawable color buffer. */ + glInvalidateFramebuffer(GL_READ_FRAMEBUFFER, 1, attachments); + } + } else { + glResolveMultisampleFramebufferAPPLE(); + + if (!retainedBacking) { + glDiscardFramebufferEXT(GL_READ_FRAMEBUFFER, 1, attachments); + } + } + + /* We assume the "drawable framebuffer" (MSAA draw framebuffer) was + * previously bound... */ + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, msaaFramebuffer); + } -- (void)swapBuffers -{ /* viewRenderbuffer should always be bound here. Code that binds something - else is responsible for rebinding viewRenderbuffer, to reduce - duplicate state changes. */ - [context presentRenderbuffer:GL_RENDERBUFFER_OES]; + * else is responsible for rebinding viewRenderbuffer, to reduce duplicate + * state changes. */ + [context presentRenderbuffer:GL_RENDERBUFFER]; } - - (void)layoutSubviews { - [EAGLContext setCurrentContext:context]; - [self updateFrame]; + [super layoutSubviews]; + + int width = (int) (self.bounds.size.width * self.contentScaleFactor); + int height = (int) (self.bounds.size.height * self.contentScaleFactor); + + /* Update the color and depth buffer storage if the layer size has changed. */ + if (width != backingWidth || height != backingHeight) { + EAGLContext *prevContext = [EAGLContext currentContext]; + if (prevContext != context) { + [EAGLContext setCurrentContext:context]; + } + + [self updateFrame]; + + if (prevContext != context) { + [EAGLContext setCurrentContext:prevContext]; + } + } } - (void)destroyFramebuffer { - glDeleteFramebuffersOES(1, &viewFramebuffer); - viewFramebuffer = 0; - glDeleteRenderbuffersOES(1, &viewRenderbuffer); - viewRenderbuffer = 0; + if (viewFramebuffer != 0) { + glDeleteFramebuffers(1, &viewFramebuffer); + viewFramebuffer = 0; + } - if (depthRenderbuffer) { - glDeleteRenderbuffersOES(1, &depthRenderbuffer); + if (viewRenderbuffer != 0) { + glDeleteRenderbuffers(1, &viewRenderbuffer); + viewRenderbuffer = 0; + } + + if (depthRenderbuffer != 0) { + glDeleteRenderbuffers(1, &depthRenderbuffer); depthRenderbuffer = 0; } -} + if (msaaFramebuffer != 0) { + glDeleteFramebuffers(1, &msaaFramebuffer); + msaaFramebuffer = 0; + } + + if (msaaRenderbuffer != 0) { + glDeleteRenderbuffers(1, &msaaRenderbuffer); + msaaRenderbuffer = 0; + } +} - (void)dealloc { - [self destroyFramebuffer]; - if ([EAGLContext currentContext] == context) { + if (context && context == [EAGLContext currentContext]) { + [self destroyFramebuffer]; [EAGLContext setCurrentContext:nil]; } - [context release]; - [super dealloc]; } @end diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.h index ef62982570..3fbaf92f1f 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,20 +25,10 @@ #include "../SDL_sysvideo.h" -#ifndef __IPHONE_6_0 -/* This enum isn't available in older SDKs, but we use it for our own purposes on iOS 5.1 and for the system on iOS 6.0 */ -enum UIInterfaceOrientationMask -{ - UIInterfaceOrientationMaskPortrait = (1 << UIInterfaceOrientationPortrait), - UIInterfaceOrientationMaskLandscapeLeft = (1 << UIInterfaceOrientationLandscapeLeft), - UIInterfaceOrientationMaskLandscapeRight = (1 << UIInterfaceOrientationLandscapeRight), - UIInterfaceOrientationMaskPortraitUpsideDown = (1 << UIInterfaceOrientationPortraitUpsideDown), - UIInterfaceOrientationMaskLandscape = (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight), - UIInterfaceOrientationMaskAll = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight | UIInterfaceOrientationMaskPortraitUpsideDown), - UIInterfaceOrientationMaskAllButUpsideDown = (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight), -}; -#endif /* !__IPHONE_6_0 */ +void UIKit_SuspendScreenSaver(_THIS); +BOOL UIKit_IsSystemVersionAtLeast(double version); +CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen); #endif /* _SDL_uikitvideo_h */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.m index 4893bc1633..4f3c7dc432 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitvideo.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,7 @@ #include "SDL_video.h" #include "SDL_mouse.h" +#include "SDL_hints.h" #include "../SDL_sysvideo.h" #include "../SDL_pixels_c.h" #include "../../events/SDL_events_c.h" @@ -74,16 +75,17 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) device->GetDisplayModes = UIKit_GetDisplayModes; device->SetDisplayMode = UIKit_SetDisplayMode; device->PumpEvents = UIKit_PumpEvents; + device->SuspendScreenSaver = UIKit_SuspendScreenSaver; device->CreateWindow = UIKit_CreateWindow; + device->SetWindowTitle = UIKit_SetWindowTitle; device->ShowWindow = UIKit_ShowWindow; device->HideWindow = UIKit_HideWindow; device->RaiseWindow = UIKit_RaiseWindow; + device->SetWindowBordered = UIKit_SetWindowBordered; device->SetWindowFullscreen = UIKit_SetWindowFullscreen; device->DestroyWindow = UIKit_DestroyWindow; device->GetWindowWMInfo = UIKit_GetWindowWMInfo; - /* !!! FIXME: implement SetWindowBordered */ - #if SDL_IPHONE_KEYBOARD device->HasScreenKeyboardSupport = UIKit_HasScreenKeyboardSupport; device->ShowScreenKeyboard = UIKit_ShowScreenKeyboard; @@ -93,12 +95,13 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) #endif /* OpenGL (ES) functions */ - device->GL_MakeCurrent = UIKit_GL_MakeCurrent; - device->GL_SwapWindow = UIKit_GL_SwapWindow; + device->GL_MakeCurrent = UIKit_GL_MakeCurrent; + device->GL_GetDrawableSize = UIKit_GL_GetDrawableSize; + device->GL_SwapWindow = UIKit_GL_SwapWindow; device->GL_CreateContext = UIKit_GL_CreateContext; device->GL_DeleteContext = UIKit_GL_DeleteContext; device->GL_GetProcAddress = UIKit_GL_GetProcAddress; - device->GL_LoadLibrary = UIKit_GL_LoadLibrary; + device->GL_LoadLibrary = UIKit_GL_LoadLibrary; device->free = UIKit_DeleteDevice; device->gl_config.accelerated = 1; @@ -129,6 +132,40 @@ static void UIKit_DeleteDevice(SDL_VideoDevice * device) UIKit_QuitModes(_this); } +void +UIKit_SuspendScreenSaver(_THIS) +{ + @autoreleasepool { + /* Ignore ScreenSaver API calls if the idle timer hint has been set. */ + /* FIXME: The idle timer hint should be deprecated for SDL 2.1. */ + if (SDL_GetHint(SDL_HINT_IDLE_TIMER_DISABLED) == NULL) { + UIApplication *app = [UIApplication sharedApplication]; + + /* Prevent the display from dimming and going to sleep. */ + app.idleTimerDisabled = (_this->suspend_screensaver != SDL_FALSE); + } + } +} + +BOOL +UIKit_IsSystemVersionAtLeast(double version) +{ + return [[UIDevice currentDevice].systemVersion doubleValue] >= version; +} + +CGRect +UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen) +{ + BOOL hasiOS7 = UIKit_IsSystemVersionAtLeast(7.0); + + if (hasiOS7 || (window->flags & (SDL_WINDOW_BORDERLESS|SDL_WINDOW_FULLSCREEN))) { + /* The view should always show behind the status bar in iOS 7+. */ + return screen.bounds; + } else { + return screen.applicationFrame; + } +} + /* * iOS log support. * diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitview.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitview.h index ce616c07eb..18fa78f363 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitview.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitview.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,59 +20,22 @@ */ #import -#import "SDL_uikitviewcontroller.h" -#include "SDL_touch.h" - -#define IPHONE_TOUCH_EFFICIENT_DANGEROUS +#include "../SDL_sysvideo.h" -#ifndef IPHONE_TOUCH_EFFICIENT_DANGEROUS -#define MAX_SIMULTANEOUS_TOUCHES 5 -#endif +#include "SDL_touch.h" -#if SDL_IPHONE_KEYBOARD -@interface SDL_uikitview : UIView { -#else -@interface SDL_uikitview : UIView { -#endif +@interface SDL_uikitview : UIView - SDL_TouchID touchId; - UITouch *leftFingerDown; -#ifndef IPHONE_TOUCH_EFFICIENT_DANGEROUS - UITouch *finger[MAX_SIMULTANEOUS_TOUCHES]; -#endif +- (instancetype)initWithFrame:(CGRect)frame; -#if SDL_IPHONE_KEYBOARD - UITextField *textField; - BOOL keyboardVisible; - SDL_Rect textInputRect; - int keyboardHeight; -#endif +- (void)setSDLWindow:(SDL_Window *)window; -@public - SDL_uikitviewcontroller *viewcontroller; -} - (CGPoint)touchLocation:(UITouch *)touch shouldNormalize:(BOOL)normalize; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; -#if SDL_IPHONE_KEYBOARD -- (void)showKeyboard; -- (void)hideKeyboard; -- (void)initializeKeyboard; -@property (readonly) BOOL keyboardVisible; -@property (nonatomic,assign) SDL_Rect textInputRect; -@property (nonatomic,assign) int keyboardHeight; - -SDL_bool UIKit_HasScreenKeyboardSupport(_THIS); -void UIKit_ShowScreenKeyboard(_THIS, SDL_Window *window); -void UIKit_HideScreenKeyboard(_THIS, SDL_Window *window); -SDL_bool UIKit_IsScreenKeyboardShown(_THIS, SDL_Window *window); -void UIKit_SetTextInputRect(_THIS, SDL_Rect *rect); - -#endif - @end /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitview.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitview.m index f890b7a8e8..1ccda98ffc 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitview.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitview.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,440 +24,181 @@ #include "SDL_uikitview.h" -#include "../../events/SDL_keyboard_c.h" #include "../../events/SDL_mouse_c.h" #include "../../events/SDL_touch_c.h" +#include "../../events/SDL_events_c.h" -#if SDL_IPHONE_KEYBOARD -#include "keyinfotable.h" -#endif -#include "SDL_uikitappdelegate.h" -#include "SDL_uikitmodes.h" -#include "SDL_uikitwindow.h" +#import "SDL_uikitappdelegate.h" +#import "SDL_uikitmodes.h" +#import "SDL_uikitwindow.h" -void _uikit_keyboard_init() ; +@implementation SDL_uikitview { + SDL_Window *sdlwindow; -@implementation SDL_uikitview + SDL_TouchID touchId; + UITouch * __weak firstFingerDown; +} -- (void)dealloc +- (instancetype)initWithFrame:(CGRect)frame { - [super dealloc]; + if ((self = [super initWithFrame:frame])) { + self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + self.autoresizesSubviews = YES; + + self.multipleTouchEnabled = YES; + + touchId = 1; + SDL_AddTouch(touchId, ""); + } + + return self; } -- (id)initWithFrame:(CGRect)frame +- (void)setSDLWindow:(SDL_Window *)window { - self = [super initWithFrame: frame]; + SDL_WindowData *data = nil; -#if SDL_IPHONE_KEYBOARD - [self initializeKeyboard]; -#endif + if (window == sdlwindow) { + return; + } - self.multipleTouchEnabled = YES; + /* Remove ourself from the old window. */ + if (sdlwindow) { + SDL_uikitview *view = nil; + data = (__bridge SDL_WindowData *) sdlwindow->driverdata; - touchId = 1; - SDL_AddTouch(touchId, ""); + [data.views removeObject:self]; - return self; + [self removeFromSuperview]; + + /* Restore the next-oldest view in the old window. */ + view = data.views.lastObject; + + data.viewcontroller.view = view; + + data.uiwindow.rootViewController = nil; + data.uiwindow.rootViewController = data.viewcontroller; + [data.uiwindow layoutIfNeeded]; + } + + /* Add ourself to the new window. */ + if (window) { + data = (__bridge SDL_WindowData *) window->driverdata; + + /* Make sure the SDL window has a strong reference to this view. */ + [data.views addObject:self]; + + /* Replace the view controller's old view with this one. */ + [data.viewcontroller.view removeFromSuperview]; + data.viewcontroller.view = self; + + /* The root view controller handles rotation and the status bar. + * Assigning it also adds the controller's view to the window. We + * explicitly re-set it to make sure the view is properly attached to + * the window. Just adding the sub-view if the root view controller is + * already correct causes orientation issues on iOS 7 and below. */ + data.uiwindow.rootViewController = nil; + data.uiwindow.rootViewController = data.viewcontroller; + + /* The view's bounds may not be correct until the next event cycle. That + * might happen after the current dimensions are queried, so we force a + * layout now to immediately update the bounds. */ + [data.uiwindow layoutIfNeeded]; + } + + sdlwindow = window; } - (CGPoint)touchLocation:(UITouch *)touch shouldNormalize:(BOOL)normalize { - CGPoint point = [touch locationInView: self]; - - /* Get the display scale and apply that to the input coordinates */ - SDL_Window *window = self->viewcontroller.window; - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_DisplayModeData *displaymodedata = (SDL_DisplayModeData *) display->current_mode.driverdata; + CGPoint point = [touch locationInView:self]; if (normalize) { - CGRect bounds = [self bounds]; + CGRect bounds = self.bounds; point.x /= bounds.size.width; point.y /= bounds.size.height; - } else { - point.x *= displaymodedata->scale; - point.y *= displaymodedata->scale; } + return point; } +- (float)pressureForTouch:(UITouch *)touch +{ +#ifdef __IPHONE_9_0 + if ([touch respondsToSelector:@selector(force)]) { + return (float) touch.force; + } +#endif + + return 1.0f; +} + - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; + for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; - while (touch) { - if (!leftFingerDown) { + if (!firstFingerDown) { CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; - /* send moved event */ - SDL_SendMouseMotion(NULL, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y); + /* send mouse moved event */ + SDL_SendMouseMotion(sdlwindow, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y); /* send mouse down event */ - SDL_SendMouseButton(NULL, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); + SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT); - leftFingerDown = touch; + firstFingerDown = touch; } CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; -#ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - /* FIXME: TODO: Using touch as the fingerId is potentially dangerous - * It is also much more efficient than storing the UITouch pointer - * and comparing it to the incoming event. - */ SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), - SDL_TRUE, locationInView.x, locationInView.y, 1.0f); -#else - int i; - for(i = 0; i < MAX_SIMULTANEOUS_TOUCHES; i++) { - if (finger[i] == NULL) { - finger[i] = touch; - SDL_SendTouch(touchId, i, - SDL_TRUE, locationInView.x, locationInView.y, 1.0f); - break; - } - } -#endif - touch = (UITouch*)[enumerator nextObject]; + SDL_TRUE, locationInView.x, locationInView.y, pressure); } } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; + for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; - while(touch) { - if (touch == leftFingerDown) { + if (touch == firstFingerDown) { /* send mouse up */ - SDL_SendMouseButton(NULL, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); - leftFingerDown = nil; + SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT); + firstFingerDown = nil; } CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; -#ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - SDL_SendTouch(touchId, (long)touch, - SDL_FALSE, locationInView.x, locationInView.y, 1.0f); -#else - int i; - for (i = 0; i < MAX_SIMULTANEOUS_TOUCHES; i++) { - if (finger[i] == touch) { - SDL_SendTouch(touchId, i, - SDL_FALSE, locationInView.x, locationInView.y, 1.0f); - finger[i] = NULL; - break; - } - } -#endif - touch = (UITouch*)[enumerator nextObject]; + SDL_SendTouch(touchId, (SDL_FingerID)((size_t)touch), + SDL_FALSE, locationInView.x, locationInView.y, pressure); } } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { - /* - this can happen if the user puts more than 5 touches on the screen - at once, or perhaps in other circumstances. Usually (it seems) - all active touches are canceled. - */ - [self touchesEnded: touches withEvent: event]; + [self touchesEnded:touches withEvent:event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { - NSEnumerator *enumerator = [touches objectEnumerator]; - UITouch *touch = (UITouch*)[enumerator nextObject]; + for (UITouch *touch in touches) { + float pressure = [self pressureForTouch:touch]; - while (touch) { - if (touch == leftFingerDown) { + if (touch == firstFingerDown) { CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO]; /* send moved event */ - SDL_SendMouseMotion(NULL, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y); + SDL_SendMouseMotion(sdlwindow, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y); } CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES]; -#ifdef IPHONE_TOUCH_EFFICIENT_DANGEROUS - SDL_SendTouchMotion(touchId, (long)touch, - locationInView.x, locationInView.y, 1.0f); -#else - int i; - for (i = 0; i < MAX_SIMULTANEOUS_TOUCHES; i++) { - if (finger[i] == touch) { - SDL_SendTouchMotion(touchId, i, - locationInView.x, locationInView.y, 1.0f); - break; - } - } -#endif - touch = (UITouch*)[enumerator nextObject]; - } -} - -/* - ---- Keyboard related functionality below this line ---- -*/ -#if SDL_IPHONE_KEYBOARD - -@synthesize textInputRect = textInputRect; -@synthesize keyboardHeight = keyboardHeight; - -/* Is the iPhone virtual keyboard visible onscreen? */ -- (BOOL)keyboardVisible -{ - return keyboardVisible; -} - -/* Set ourselves up as a UITextFieldDelegate */ -- (void)initializeKeyboard -{ - textField = [[UITextField alloc] initWithFrame: CGRectZero]; - textField.delegate = self; - /* placeholder so there is something to delete! */ - textField.text = @" "; - - /* set UITextInputTrait properties, mostly to defaults */ - textField.autocapitalizationType = UITextAutocapitalizationTypeNone; - textField.autocorrectionType = UITextAutocorrectionTypeNo; - textField.enablesReturnKeyAutomatically = NO; - textField.keyboardAppearance = UIKeyboardAppearanceDefault; - textField.keyboardType = UIKeyboardTypeDefault; - textField.returnKeyType = UIReturnKeyDefault; - textField.secureTextEntry = NO; - - textField.hidden = YES; - keyboardVisible = NO; - /* add the UITextField (hidden) to our view */ - [self addSubview: textField]; - [textField release]; - - _uikit_keyboard_init(); -} - -/* reveal onscreen virtual keyboard */ -- (void)showKeyboard -{ - keyboardVisible = YES; - [textField becomeFirstResponder]; -} - -/* hide onscreen virtual keyboard */ -- (void)hideKeyboard -{ - keyboardVisible = NO; - [textField resignFirstResponder]; -} - -/* UITextFieldDelegate method. Invoked when user types something. */ -- (BOOL)textField:(UITextField *)_textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string -{ - if ([string length] == 0) { - /* it wants to replace text with nothing, ie a delete */ - SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_BACKSPACE); - SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_BACKSPACE); - } - else { - /* go through all the characters in the string we've been sent - and convert them to key presses */ - int i; - for (i = 0; i < [string length]; i++) { - - unichar c = [string characterAtIndex: i]; - - Uint16 mod = 0; - SDL_Scancode code; - - if (c < 127) { - /* figure out the SDL_Scancode and SDL_keymod for this unichar */ - code = unicharToUIKeyInfoTable[c].code; - mod = unicharToUIKeyInfoTable[c].mod; - } - else { - /* we only deal with ASCII right now */ - code = SDL_SCANCODE_UNKNOWN; - mod = 0; - } - - if (mod & KMOD_SHIFT) { - /* If character uses shift, press shift down */ - SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT); - } - /* send a keydown and keyup even for the character */ - SDL_SendKeyboardKey(SDL_PRESSED, code); - SDL_SendKeyboardKey(SDL_RELEASED, code); - if (mod & KMOD_SHIFT) { - /* If character uses shift, press shift back up */ - SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT); - } - } - SDL_SendKeyboardText([string UTF8String]); + SDL_SendTouchMotion(touchId, (SDL_FingerID)((size_t)touch), + locationInView.x, locationInView.y, pressure); } - return NO; /* don't allow the edit! (keep placeholder text there) */ } -/* Terminates the editing session */ -- (BOOL)textFieldShouldReturn:(UITextField*)_textField -{ - SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RETURN); - SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RETURN); - SDL_StopTextInput(); - return YES; -} - -#endif - @end -/* iPhone keyboard addition functions */ -#if SDL_IPHONE_KEYBOARD - -static SDL_uikitview * getWindowView(SDL_Window * window) -{ - if (window == NULL) { - SDL_SetError("Window does not exist"); - return nil; - } - - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - SDL_uikitview *view = data != NULL ? data->view : nil; - - if (view == nil) { - SDL_SetError("Window has no view"); - } - - return view; -} - -SDL_bool UIKit_HasScreenKeyboardSupport(_THIS) -{ - return SDL_TRUE; -} - -void UIKit_ShowScreenKeyboard(_THIS, SDL_Window *window) -{ - SDL_uikitview *view = getWindowView(window); - if (view != nil) { - [view showKeyboard]; - } -} - -void UIKit_HideScreenKeyboard(_THIS, SDL_Window *window) -{ - SDL_uikitview *view = getWindowView(window); - if (view != nil) { - [view hideKeyboard]; - } -} - -SDL_bool UIKit_IsScreenKeyboardShown(_THIS, SDL_Window *window) -{ - SDL_uikitview *view = getWindowView(window); - if (view == nil) { - return 0; - } - - return view.keyboardVisible; -} - - -void _uikit_keyboard_update() { - SDL_Window *window = SDL_GetFocusWindow(); - if (!window) { return; } - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - if (!data) { return; } - SDL_uikitview *view = data->view; - if (!view) { return; } - - SDL_Rect r = view.textInputRect; - int height = view.keyboardHeight; - int offsetx = 0; - int offsety = 0; - if (height) { - int sw,sh; - SDL_GetWindowSize(window,&sw,&sh); - int bottom = (r.y + r.h); - int kbottom = sh - height; - if (kbottom < bottom) { - offsety = kbottom-bottom; - } - } - UIInterfaceOrientation ui_orient = [[UIApplication sharedApplication] statusBarOrientation]; - if (ui_orient == UIInterfaceOrientationLandscapeLeft) { - int tmp = offsetx; offsetx = offsety; offsety = tmp; - } - if (ui_orient == UIInterfaceOrientationLandscapeRight) { - offsety = -offsety; - int tmp = offsetx; offsetx = offsety; offsety = tmp; - } - if (ui_orient == UIInterfaceOrientationPortraitUpsideDown) { - offsety = -offsety; - } - if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)]) { - float scale = [UIScreen mainScreen].scale; - offsetx /= scale; - offsety /= scale; - } - view.frame = CGRectMake(offsetx,offsety,view.frame.size.width,view.frame.size.height); -} - -void _uikit_keyboard_set_height(int height) { - SDL_uikitview *view = getWindowView(SDL_GetFocusWindow()); - if (view == nil) { - return ; - } - - view.keyboardHeight = height; - _uikit_keyboard_update(); -} - -void _uikit_keyboard_init() { - NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; - NSOperationQueue *queue = [NSOperationQueue mainQueue]; - [center addObserverForName:UIKeyboardWillShowNotification - object:nil - queue:queue - usingBlock:^(NSNotification *notification) { - int height = 0; - CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; - height = keyboardSize.height; - UIInterfaceOrientation ui_orient = [[UIApplication sharedApplication] statusBarOrientation]; - if (ui_orient == UIInterfaceOrientationLandscapeRight || ui_orient == UIInterfaceOrientationLandscapeLeft) { - height = keyboardSize.width; - } - if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)]) { - height *= [UIScreen mainScreen].scale; - } - _uikit_keyboard_set_height(height); - } - ]; - [center addObserverForName:UIKeyboardDidHideNotification - object:nil - queue:queue - usingBlock:^(NSNotification *notification) { - _uikit_keyboard_set_height(0); - } - ]; -} - -void -UIKit_SetTextInputRect(_THIS, SDL_Rect *rect) -{ - if (!rect) { - SDL_InvalidParamError("rect"); - return; - } - - SDL_uikitview *view = getWindowView(SDL_GetFocusWindow()); - if (view == nil) { - return ; - } - - view.textInputRect = *rect; -} - - -#endif /* SDL_IPHONE_KEYBOARD */ - #endif /* SDL_VIDEO_DRIVER_UIKIT */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.h index e8d595d9b5..c78396802e 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,18 +23,54 @@ #include "../SDL_sysvideo.h" -@interface SDL_uikitviewcontroller : UIViewController { -@private - SDL_Window *window; -} +#include "SDL_touch.h" -@property (readwrite) SDL_Window *window; +#if SDL_IPHONE_KEYBOARD +@interface SDL_uikitviewcontroller : UIViewController +#else +@interface SDL_uikitviewcontroller : UIViewController +#endif + +@property (nonatomic, assign) SDL_Window *window; + +- (instancetype)initWithSDLWindow:(SDL_Window *)_window; + +- (void)setAnimationCallback:(int)interval + callback:(void (*)(void*))callback + callbackParam:(void*)callbackParam; + +- (void)startAnimation; +- (void)stopAnimation; + +- (void)doLoop:(CADisplayLink*)sender; -- (id)initWithSDLWindow:(SDL_Window *)_window; - (void)loadView; - (void)viewDidLayoutSubviews; - (NSUInteger)supportedInterfaceOrientations; -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient; - (BOOL)prefersStatusBarHidden; +#if SDL_IPHONE_KEYBOARD +- (void)showKeyboard; +- (void)hideKeyboard; +- (void)initKeyboard; +- (void)deinitKeyboard; + +- (void)keyboardWillShow:(NSNotification *)notification; +- (void)keyboardWillHide:(NSNotification *)notification; + +- (void)updateKeyboard; + +@property (nonatomic, assign, getter=isKeyboardVisible) BOOL keyboardVisible; +@property (nonatomic, assign) SDL_Rect textInputRect; +@property (nonatomic, assign) int keyboardHeight; +#endif + @end + +#if SDL_IPHONE_KEYBOARD +SDL_bool UIKit_HasScreenKeyboardSupport(_THIS); +void UIKit_ShowScreenKeyboard(_THIS, SDL_Window *window); +void UIKit_HideScreenKeyboard(_THIS, SDL_Window *window); +SDL_bool UIKit_IsScreenKeyboardShown(_THIS, SDL_Window *window); +void UIKit_SetTextInputRect(_THIS, SDL_Rect *rect); +#endif diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.m index 447b80b80d..58cdf1ac54 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitviewcontroller.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,107 +28,367 @@ #include "../SDL_sysvideo.h" #include "../../events/SDL_events_c.h" -#include "SDL_uikitviewcontroller.h" +#import "SDL_uikitviewcontroller.h" +#import "SDL_uikitmessagebox.h" #include "SDL_uikitvideo.h" #include "SDL_uikitmodes.h" #include "SDL_uikitwindow.h" +#if SDL_IPHONE_KEYBOARD +#include "keyinfotable.h" +#endif -@implementation SDL_uikitviewcontroller +@implementation SDL_uikitviewcontroller { + CADisplayLink *displayLink; + int animationInterval; + void (*animationCallback)(void*); + void *animationCallbackParam; + +#if SDL_IPHONE_KEYBOARD + UITextField *textField; +#endif +} @synthesize window; -- (id)initWithSDLWindow:(SDL_Window *)_window +- (instancetype)initWithSDLWindow:(SDL_Window *)_window { - self = [self init]; - if (self == nil) { - return nil; - } - self.window = _window; + if (self = [super initWithNibName:nil bundle:nil]) { + self.window = _window; +#if SDL_IPHONE_KEYBOARD + [self initKeyboard]; +#endif + } return self; } +- (void)dealloc +{ +#if SDL_IPHONE_KEYBOARD + [self deinitKeyboard]; +#endif +} + +- (void)setAnimationCallback:(int)interval + callback:(void (*)(void*))callback + callbackParam:(void*)callbackParam +{ + [self stopAnimation]; + + animationInterval = interval; + animationCallback = callback; + animationCallbackParam = callbackParam; + + if (animationCallback) { + [self startAnimation]; + } +} + +- (void)startAnimation +{ + displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(doLoop:)]; + [displayLink setFrameInterval:animationInterval]; + [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; +} + +- (void)stopAnimation +{ + [displayLink invalidate]; + displayLink = nil; +} + +- (void)doLoop:(CADisplayLink*)sender +{ + /* Don't run the game loop while a messagebox is up */ + if (!UIKit_ShowingMessageBox()) { + animationCallback(animationCallbackParam); + } +} + - (void)loadView { - /* do nothing. */ + /* Do nothing. */ } - (void)viewDidLayoutSubviews { - if (self->window->flags & SDL_WINDOW_RESIZABLE) { - SDL_WindowData *data = self->window->driverdata; - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(self->window); - SDL_DisplayModeData *displaymodedata = (SDL_DisplayModeData *) display->current_mode.driverdata; - const CGSize size = data->view.bounds.size; - int w, h; + const CGSize size = self.view.bounds.size; + int w = (int) size.width; + int h = (int) size.height; - w = (int)(size.width * displaymodedata->scale); - h = (int)(size.height * displaymodedata->scale); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, w, h); +} - SDL_SendWindowEvent(self->window, SDL_WINDOWEVENT_RESIZED, w, h); +- (NSUInteger)supportedInterfaceOrientations +{ + return UIKit_GetSupportedOrientations(window); +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient +{ + return ([self supportedInterfaceOrientations] & (1 << orient)) != 0; +} + +- (BOOL)prefersStatusBarHidden +{ + return (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) != 0; +} + +/* + ---- Keyboard related functionality below this line ---- + */ +#if SDL_IPHONE_KEYBOARD + +@synthesize textInputRect; +@synthesize keyboardHeight; +@synthesize keyboardVisible; + +/* Set ourselves up as a UITextFieldDelegate */ +- (void)initKeyboard +{ + textField = [[UITextField alloc] initWithFrame:CGRectZero]; + textField.delegate = self; + /* placeholder so there is something to delete! */ + textField.text = @" "; + + /* set UITextInputTrait properties, mostly to defaults */ + textField.autocapitalizationType = UITextAutocapitalizationTypeNone; + textField.autocorrectionType = UITextAutocorrectionTypeNo; + textField.enablesReturnKeyAutomatically = NO; + textField.keyboardAppearance = UIKeyboardAppearanceDefault; + textField.keyboardType = UIKeyboardTypeDefault; + textField.returnKeyType = UIReturnKeyDefault; + textField.secureTextEntry = NO; + + textField.hidden = YES; + keyboardVisible = NO; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [center addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; +} + +- (void)setView:(UIView *)view +{ + [super setView:view]; + + [view addSubview:textField]; + + if (keyboardVisible) { + [self showKeyboard]; } } -- (NSUInteger)supportedInterfaceOrientations +- (void)deinitKeyboard { - NSUInteger orientationMask = 0; + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + [center removeObserver:self name:UIKeyboardWillShowNotification object:nil]; + [center removeObserver:self name:UIKeyboardWillHideNotification object:nil]; +} - const char *orientationsCString; - if ((orientationsCString = SDL_GetHint(SDL_HINT_ORIENTATIONS)) != NULL) { - BOOL rotate = NO; - NSString *orientationsNSString = [NSString stringWithCString:orientationsCString - encoding:NSUTF8StringEncoding]; - NSArray *orientations = [orientationsNSString componentsSeparatedByCharactersInSet: - [NSCharacterSet characterSetWithCharactersInString:@" "]]; +/* reveal onscreen virtual keyboard */ +- (void)showKeyboard +{ + keyboardVisible = YES; + if (textField.window) { + [textField becomeFirstResponder]; + } +} - if ([orientations containsObject:@"LandscapeLeft"]) { - orientationMask |= UIInterfaceOrientationMaskLandscapeLeft; - } - if ([orientations containsObject:@"LandscapeRight"]) { - orientationMask |= UIInterfaceOrientationMaskLandscapeRight; - } - if ([orientations containsObject:@"Portrait"]) { - orientationMask |= UIInterfaceOrientationMaskPortrait; - } - if ([orientations containsObject:@"PortraitUpsideDown"]) { - orientationMask |= UIInterfaceOrientationMaskPortraitUpsideDown; +/* hide onscreen virtual keyboard */ +- (void)hideKeyboard +{ + keyboardVisible = NO; + [textField resignFirstResponder]; +} + +- (void)keyboardWillShow:(NSNotification *)notification +{ + CGRect kbrect = [[notification userInfo][UIKeyboardFrameBeginUserInfoKey] CGRectValue]; + + /* The keyboard rect is in the coordinate space of the screen/window, but we + * want its height in the coordinate space of the view. */ + kbrect = [self.view convertRect:kbrect fromView:nil]; + + [self setKeyboardHeight:(int)kbrect.size.height]; +} + +- (void)keyboardWillHide:(NSNotification *)notification +{ + [self setKeyboardHeight:0]; +} + +- (void)updateKeyboard +{ + CGAffineTransform t = self.view.transform; + CGPoint offset = CGPointMake(0.0, 0.0); + CGRect frame = UIKit_ComputeViewFrame(window, self.view.window.screen); + + if (self.keyboardHeight) { + int rectbottom = self.textInputRect.y + self.textInputRect.h; + int keybottom = self.view.bounds.size.height - self.keyboardHeight; + if (keybottom < rectbottom) { + offset.y = keybottom - rectbottom; } + } + + /* Apply this view's transform (except any translation) to the offset, in + * order to orient it correctly relative to the frame's coordinate space. */ + t.tx = 0.0; + t.ty = 0.0; + offset = CGPointApplyAffineTransform(offset, t); + + /* Apply the updated offset to the view's frame. */ + frame.origin.x += offset.x; + frame.origin.y += offset.y; + + self.view.frame = frame; +} + +- (void)setKeyboardHeight:(int)height +{ + keyboardVisible = height > 0; + keyboardHeight = height; + [self updateKeyboard]; +} + +/* UITextFieldDelegate method. Invoked when user types something. */ +- (BOOL)textField:(UITextField *)_textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + NSUInteger len = string.length; - } else if (self->window->flags & SDL_WINDOW_RESIZABLE) { - orientationMask = UIInterfaceOrientationMaskAll; /* any orientation is okay. */ + if (len == 0) { + /* it wants to replace text with nothing, ie a delete */ + SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_BACKSPACE); + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_BACKSPACE); } else { - if (self->window->w >= self->window->h) { - orientationMask |= UIInterfaceOrientationMaskLandscape; - } - if (self->window->h >= self->window->w) { - orientationMask |= (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); + /* go through all the characters in the string we've been sent and + * convert them to key presses */ + int i; + for (i = 0; i < len; i++) { + unichar c = [string characterAtIndex:i]; + Uint16 mod = 0; + SDL_Scancode code; + + if (c < 127) { + /* figure out the SDL_Scancode and SDL_keymod for this unichar */ + code = unicharToUIKeyInfoTable[c].code; + mod = unicharToUIKeyInfoTable[c].mod; + } else { + /* we only deal with ASCII right now */ + code = SDL_SCANCODE_UNKNOWN; + mod = 0; + } + + if (mod & KMOD_SHIFT) { + /* If character uses shift, press shift down */ + SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_LSHIFT); + } + + /* send a keydown and keyup even for the character */ + SDL_SendKeyboardKey(SDL_PRESSED, code); + SDL_SendKeyboardKey(SDL_RELEASED, code); + + if (mod & KMOD_SHIFT) { + /* If character uses shift, press shift back up */ + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_LSHIFT); + } } + + SDL_SendKeyboardText([string UTF8String]); + } + + return NO; /* don't allow the edit! (keep placeholder text there) */ +} + +/* Terminates the editing session */ +- (BOOL)textFieldShouldReturn:(UITextField*)_textField +{ + SDL_SendKeyboardKey(SDL_PRESSED, SDL_SCANCODE_RETURN); + SDL_SendKeyboardKey(SDL_RELEASED, SDL_SCANCODE_RETURN); + SDL_StopTextInput(); + return YES; +} + +#endif + +@end + +/* iPhone keyboard addition functions */ +#if SDL_IPHONE_KEYBOARD + +static SDL_uikitviewcontroller * +GetWindowViewController(SDL_Window * window) +{ + if (!window || !window->driverdata) { + SDL_SetError("Invalid window"); + return nil; + } + + SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata; + + return data.viewcontroller; +} + +SDL_bool +UIKit_HasScreenKeyboardSupport(_THIS) +{ + return SDL_TRUE; +} + +void +UIKit_ShowScreenKeyboard(_THIS, SDL_Window *window) +{ + @autoreleasepool { + SDL_uikitviewcontroller *vc = GetWindowViewController(window); + [vc showKeyboard]; } +} - /* Don't allow upside-down orientation on the phone, so answering calls is in the natural orientation */ - if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { - orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown; +void +UIKit_HideScreenKeyboard(_THIS, SDL_Window *window) +{ + @autoreleasepool { + SDL_uikitviewcontroller *vc = GetWindowViewController(window); + [vc hideKeyboard]; } - return orientationMask; } -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient +SDL_bool +UIKit_IsScreenKeyboardShown(_THIS, SDL_Window *window) { - NSUInteger orientationMask = [self supportedInterfaceOrientations]; - return (orientationMask & (1 << orient)); + @autoreleasepool { + SDL_uikitviewcontroller *vc = GetWindowViewController(window); + if (vc != nil) { + return vc.isKeyboardVisible; + } + return SDL_FALSE; + } } -- (BOOL)prefersStatusBarHidden +void +UIKit_SetTextInputRect(_THIS, SDL_Rect *rect) { - if (self->window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) { - return YES; - } else { - return NO; + if (!rect) { + SDL_InvalidParamError("rect"); + return; + } + + @autoreleasepool { + SDL_uikitviewcontroller *vc = GetWindowViewController(SDL_GetFocusWindow()); + if (vc != nil) { + vc.textInputRect = *rect; + + if (vc.keyboardVisible) { + [vc updateKeyboard]; + } + } } } -@end + +#endif /* SDL_IPHONE_KEYBOARD */ #endif /* SDL_VIDEO_DRIVER_UIKIT */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.h b/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.h index 494b028f38..ed08c55d42 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.h +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -23,28 +23,33 @@ #include "../SDL_sysvideo.h" #import "SDL_uikitvideo.h" -#import "SDL_uikitopenglview.h" +#import "SDL_uikitview.h" #import "SDL_uikitviewcontroller.h" -typedef struct SDL_WindowData SDL_WindowData; - extern int UIKit_CreateWindow(_THIS, SDL_Window * window); +extern void UIKit_SetWindowTitle(_THIS, SDL_Window * window); extern void UIKit_ShowWindow(_THIS, SDL_Window * window); extern void UIKit_HideWindow(_THIS, SDL_Window * window); extern void UIKit_RaiseWindow(_THIS, SDL_Window * window); +extern void UIKit_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered); extern void UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen); extern void UIKit_DestroyWindow(_THIS, SDL_Window * window); extern SDL_bool UIKit_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo * info); +extern NSUInteger UIKit_GetSupportedOrientations(SDL_Window * window); + @class UIWindow; -struct SDL_WindowData -{ - UIWindow *uiwindow; - SDL_uikitopenglview *view; - SDL_uikitviewcontroller *viewcontroller; -}; +@interface SDL_WindowData : NSObject + +@property (nonatomic, strong) UIWindow *uiwindow; +@property (nonatomic, strong) SDL_uikitviewcontroller *viewcontroller; + +/* Array of SDL_uikitviews owned by this window. */ +@property (nonatomic, copy) NSMutableArray *views; + +@end #endif /* _SDL_uikitwindow_h */ diff --git a/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.m b/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.m index a1dd1a9e20..c5f385b8c1 100644 --- a/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.m +++ b/Engine/lib/sdl/src/video/uikit/SDL_uikitwindow.m @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,89 +37,111 @@ #include "SDL_uikitwindow.h" #import "SDL_uikitappdelegate.h" +#import "SDL_uikitview.h" #import "SDL_uikitopenglview.h" #include +@implementation SDL_WindowData +@synthesize uiwindow; +@synthesize viewcontroller; +@synthesize views; + +- (instancetype)init +{ + if ((self = [super init])) { + views = [NSMutableArray new]; + } + + return self; +} + +@end + +@interface SDL_uikitwindow : UIWindow + +- (void)layoutSubviews; + +@end + +@implementation SDL_uikitwindow + +- (void)layoutSubviews +{ + /* Workaround to fix window orientation issues in iOS 8+. */ + self.frame = self.screen.bounds; + [super layoutSubviews]; +} + +@end static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bool created) { SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_DisplayModeData *displaymodedata = (SDL_DisplayModeData *) display->current_mode.driverdata; - SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata; - SDL_WindowData *data; + SDL_DisplayData *displaydata = (__bridge SDL_DisplayData *) display->driverdata; + SDL_uikitview *view; + + CGRect frame = UIKit_ComputeViewFrame(window, displaydata.uiscreen); + int width = (int) frame.size.width; + int height = (int) frame.size.height; - /* Allocate the window data */ - data = (SDL_WindowData *)SDL_malloc(sizeof(*data)); + SDL_WindowData *data = [[SDL_WindowData alloc] init]; if (!data) { return SDL_OutOfMemory(); } - data->uiwindow = uiwindow; - data->viewcontroller = nil; - data->view = nil; - - /* Fill in the SDL window with the window data */ - { - window->x = 0; - window->y = 0; - - CGRect bounds; - if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) { - bounds = [displaydata->uiscreen bounds]; - } else { - bounds = [displaydata->uiscreen applicationFrame]; - } - /* Get frame dimensions in pixels */ - int width = (int)(bounds.size.width * displaymodedata->scale); - int height = (int)(bounds.size.height * displaymodedata->scale); + window->driverdata = (void *) CFBridgingRetain(data); + + data.uiwindow = uiwindow; + + /* only one window on iOS, always shown */ + window->flags &= ~SDL_WINDOW_HIDDEN; + + if (displaydata.uiscreen == [UIScreen mainScreen]) { + window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ + } else { + window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizable */ + window->flags &= ~SDL_WINDOW_INPUT_FOCUS; /* never has input focus */ + window->flags |= SDL_WINDOW_BORDERLESS; /* never has a status bar. */ + } + + if (displaydata.uiscreen == [UIScreen mainScreen]) { + NSUInteger orients = UIKit_GetSupportedOrientations(window); + BOOL supportsLandscape = (orients & UIInterfaceOrientationMaskLandscape) != 0; + BOOL supportsPortrait = (orients & (UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskPortraitUpsideDown)) != 0; /* Make sure the width/height are oriented correctly */ - if (UIKit_IsDisplayLandscape(displaydata->uiscreen) != (width > height)) { + if ((width > height && !supportsLandscape) || (height > width && !supportsPortrait)) { int temp = width; width = height; height = temp; } - - window->w = width; - window->h = height; } - window->driverdata = data; + window->x = 0; + window->y = 0; + window->w = width; + window->h = height; - /* only one window on iOS, always shown */ - window->flags &= ~SDL_WINDOW_HIDDEN; + /* The View Controller will handle rotating the view when the device + * orientation changes. This will trigger resize events, if appropriate. */ + data.viewcontroller = [[SDL_uikitviewcontroller alloc] initWithSDLWindow:window]; - /* SDL_WINDOW_BORDERLESS controls whether status bar is hidden. - * This is only set if the window is on the main screen. Other screens - * just force the window to have the borderless flag. - */ - if (displaydata->uiscreen == [UIScreen mainScreen]) { - window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ + /* The window will initially contain a generic view so resizes, touch events, + * etc. can be handled without an active OpenGL view/context. */ + view = [[SDL_uikitview alloc] initWithFrame:frame]; - /* This was setup earlier for our window, and in iOS 7 is controlled by the view, not the application - if ([UIApplication sharedApplication].statusBarHidden) { - window->flags |= SDL_WINDOW_BORDERLESS; - } else { - window->flags &= ~SDL_WINDOW_BORDERLESS; - } - */ - } else { - window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ - window->flags &= ~SDL_WINDOW_INPUT_FOCUS; /* never has input focus */ - window->flags |= SDL_WINDOW_BORDERLESS; /* never has a status bar. */ - } + /* Sets this view as the controller's view, and adds the view to the window + * heirarchy. */ + [view setSDLWindow:window]; - /* The View Controller will handle rotating the view when the - * device orientation changes. This will trigger resize events, if - * appropriate. - */ - SDL_uikitviewcontroller *controller; - controller = [SDL_uikitviewcontroller alloc]; - data->viewcontroller = [controller initWithSDLWindow:window]; - [data->viewcontroller setTitle:@"SDL App"]; /* !!! FIXME: hook up SDL_SetWindowTitle() */ + /* Make this window the current mouse focus for touch input */ + if (displaydata.uiscreen == [UIScreen mainScreen]) { + SDL_SetMouseFocus(window); + SDL_SetKeyboardFocus(window); + } return 0; } @@ -127,24 +149,22 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo int UIKit_CreateWindow(_THIS, SDL_Window *window) { - SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); - SDL_DisplayData *data = (SDL_DisplayData *) display->driverdata; - const BOOL external = ([UIScreen mainScreen] != data->uiscreen); + @autoreleasepool { + SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window); + SDL_DisplayData *data = (__bridge SDL_DisplayData *) display->driverdata; + const CGSize origsize = data.uiscreen.currentMode.size; - /* SDL currently puts this window at the start of display's linked list. We rely on this. */ - SDL_assert(_this->windows == window); + /* SDL currently puts this window at the start of display's linked list. We rely on this. */ + SDL_assert(_this->windows == window); - /* We currently only handle a single window per display on iOS */ - if (window->next != NULL) { - return SDL_SetError("Only one window allowed per display."); - } + /* We currently only handle a single window per display on iOS */ + if (window->next != NULL) { + return SDL_SetError("Only one window allowed per display."); + } - /* If monitor has a resolution of 0x0 (hasn't been explicitly set by the - * user, so it's in standby), try to force the display to a resolution - * that most closely matches the desired window size. - */ - if (SDL_UIKit_supports_multiple_displays) { - const CGSize origsize = [[data->uiscreen currentMode] size]; + /* If monitor has a resolution of 0x0 (hasn't been explicitly set by the + * user, so it's in standby), try to force the display to a resolution + * that most closely matches the desired window size. */ if ((origsize.width == 0.0f) && (origsize.height == 0.0f)) { if (display->num_display_modes == 0) { _this->GetDisplayModes(_this, display); @@ -154,177 +174,275 @@ static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bo const SDL_DisplayMode *bestmode = NULL; for (i = display->num_display_modes; i >= 0; i--) { const SDL_DisplayMode *mode = &display->display_modes[i]; - if ((mode->w >= window->w) && (mode->h >= window->h)) + if ((mode->w >= window->w) && (mode->h >= window->h)) { bestmode = mode; + } } if (bestmode) { - SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)bestmode->driverdata; - [data->uiscreen setCurrentMode:modedata->uiscreenmode]; + SDL_DisplayModeData *modedata = (__bridge SDL_DisplayModeData *)bestmode->driverdata; + [data.uiscreen setCurrentMode:modedata.uiscreenmode]; /* desktop_mode doesn't change here (the higher level will * use it to set all the screens back to their defaults - * upon window destruction, SDL_Quit(), etc. - */ + * upon window destruction, SDL_Quit(), etc. */ display->current_mode = *bestmode; } } - } - - if (data->uiscreen == [UIScreen mainScreen]) { - if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) { - [UIApplication sharedApplication].statusBarHidden = YES; - } else { - [UIApplication sharedApplication].statusBarHidden = NO; - } - } - if (!(window->flags & SDL_WINDOW_RESIZABLE)) { - if (window->w > window->h) { - if (!UIKit_IsDisplayLandscape(data->uiscreen)) { - [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO]; - } - } else if (window->w < window->h) { - if (UIKit_IsDisplayLandscape(data->uiscreen)) { - [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait animated:NO]; + if (data.uiscreen == [UIScreen mainScreen]) { + if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) { + [UIApplication sharedApplication].statusBarHidden = YES; + } else { + [UIApplication sharedApplication].statusBarHidden = NO; } } - } - /* ignore the size user requested, and make a fullscreen window */ - /* !!! FIXME: can we have a smaller view? */ - UIWindow *uiwindow = [UIWindow alloc]; - uiwindow = [uiwindow initWithFrame:[data->uiscreen bounds]]; - - /* put the window on an external display if appropriate. This implicitly - * does [uiwindow setframe:[uiscreen bounds]], so don't do it on the - * main display, where we land by default, as that would eat the - * status bar real estate. - */ - if (external) { - [uiwindow setScreen:data->uiscreen]; - } + /* ignore the size user requested, and make a fullscreen window */ + /* !!! FIXME: can we have a smaller view? */ + UIWindow *uiwindow = [[SDL_uikitwindow alloc] initWithFrame:data.uiscreen.bounds]; - if (SetupWindowData(_this, window, uiwindow, SDL_TRUE) < 0) { - [uiwindow release]; - return -1; + /* put the window on an external display if appropriate. */ + if (data.uiscreen != [UIScreen mainScreen]) { + [uiwindow setScreen:data.uiscreen]; + } + + if (SetupWindowData(_this, window, uiwindow, SDL_TRUE) < 0) { + return -1; + } } return 1; +} +void +UIKit_SetWindowTitle(_THIS, SDL_Window * window) +{ + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + data.viewcontroller.title = @(window->title); + } } void UIKit_ShowWindow(_THIS, SDL_Window * window) { - UIWindow *uiwindow = ((SDL_WindowData *) window->driverdata)->uiwindow; - - [uiwindow makeKeyAndVisible]; + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + [data.uiwindow makeKeyAndVisible]; + } } void UIKit_HideWindow(_THIS, SDL_Window * window) { - UIWindow *uiwindow = ((SDL_WindowData *) window->driverdata)->uiwindow; - - uiwindow.hidden = YES; + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + data.uiwindow.hidden = YES; + } } void UIKit_RaiseWindow(_THIS, SDL_Window * window) { /* We don't currently offer a concept of "raising" the SDL window, since - * we only allow one per display, in the iOS fashion. + * we only allow one per display, in the iOS fashion. * However, we use this entry point to rebind the context to the view - * during OnWindowRestored processing. - */ + * during OnWindowRestored processing. */ _this->GL_MakeCurrent(_this, _this->current_glwin, _this->current_glctx); } -void -UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) +static void +UIKit_UpdateWindowBorder(_THIS, SDL_Window * window) { - SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata; - SDL_DisplayModeData *displaymodedata = (SDL_DisplayModeData *) display->current_mode.driverdata; - UIWindow *uiwindow = ((SDL_WindowData *) window->driverdata)->uiwindow; + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + SDL_uikitviewcontroller *viewcontroller = data.viewcontroller; - if (fullscreen) { - [UIApplication sharedApplication].statusBarHidden = YES; - } else { - [UIApplication sharedApplication].statusBarHidden = NO; + if (data.uiwindow.screen == [UIScreen mainScreen]) { + if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { + [UIApplication sharedApplication].statusBarHidden = YES; + } else { + [UIApplication sharedApplication].statusBarHidden = NO; + } + + /* iOS 7+ won't update the status bar until we tell it to. */ + if ([viewcontroller respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { + [viewcontroller setNeedsStatusBarAppearanceUpdate]; + } } - CGRect bounds; - if (fullscreen) { - bounds = [displaydata->uiscreen bounds]; - } else { - bounds = [displaydata->uiscreen applicationFrame]; + /* Update the view's frame to account for the status bar change. */ + viewcontroller.view.frame = UIKit_ComputeViewFrame(window, data.uiwindow.screen); + +#ifdef SDL_IPHONE_KEYBOARD + /* Make sure the view is offset correctly when the keyboard is visible. */ + [viewcontroller updateKeyboard]; +#endif + + [viewcontroller.view setNeedsLayout]; + [viewcontroller.view layoutIfNeeded]; +} + +void +UIKit_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) +{ + @autoreleasepool { + UIKit_UpdateWindowBorder(_this, window); } +} - /* Get frame dimensions in pixels */ - int width = (int)(bounds.size.width * displaymodedata->scale); - int height = (int)(bounds.size.height * displaymodedata->scale); - - /* We can pick either width or height here and we'll rotate the - screen to match, so we pick the closest to what we wanted. - */ - if (window->w >= window->h) { - if (width > height) { - window->w = width; - window->h = height; - } else { - window->w = height; - window->h = width; - } - } else { - if (width > height) { - window->w = height; - window->h = width; - } else { - window->w = width; - window->h = height; - } +void +UIKit_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) +{ + @autoreleasepool { + UIKit_UpdateWindowBorder(_this, window); } } void UIKit_DestroyWindow(_THIS, SDL_Window * window) { - SDL_WindowData *data = (SDL_WindowData *)window->driverdata; - if (data) { - [data->viewcontroller release]; - [data->uiwindow release]; - SDL_free(data); - window->driverdata = NULL; + @autoreleasepool { + if (window->driverdata != NULL) { + SDL_WindowData *data = (SDL_WindowData *) CFBridgingRelease(window->driverdata); + NSArray *views = nil; + + [data.viewcontroller stopAnimation]; + + /* Detach all views from this window. We use a copy of the array + * because setSDLWindow will remove the object from the original + * array, which would be undesirable if we were iterating over it. */ + views = [data.views copy]; + for (SDL_uikitview *view in views) { + [view setSDLWindow:NULL]; + } + + /* iOS may still hold a reference to the window after we release it. + * We want to make sure the SDL view controller isn't accessed in + * that case, because it would contain an invalid pointer to the old + * SDL window. */ + data.uiwindow.rootViewController = nil; + data.uiwindow.hidden = YES; + } } + window->driverdata = NULL; } SDL_bool UIKit_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) { - UIWindow *uiwindow = ((SDL_WindowData *) window->driverdata)->uiwindow; + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + + if (info->version.major <= SDL_MAJOR_VERSION) { + int versionnum = SDL_VERSIONNUM(info->version.major, info->version.minor, info->version.patch); + + info->subsystem = SDL_SYSWM_UIKIT; + info->info.uikit.window = data.uiwindow; + + /* These struct members were added in SDL 2.0.4. */ + if (versionnum >= SDL_VERSIONNUM(2,0,4)) { + if ([data.viewcontroller.view isKindOfClass:[SDL_uikitopenglview class]]) { + SDL_uikitopenglview *glview = (SDL_uikitopenglview *)data.viewcontroller.view; + info->info.uikit.framebuffer = glview.drawableFramebuffer; + info->info.uikit.colorbuffer = glview.drawableRenderbuffer; + info->info.uikit.resolveFramebuffer = glview.msaaResolveFramebuffer; + } else { + info->info.uikit.framebuffer = 0; + info->info.uikit.colorbuffer = 0; + info->info.uikit.resolveFramebuffer = 0; + } + } - if (info->version.major <= SDL_MAJOR_VERSION) { - info->subsystem = SDL_SYSWM_UIKIT; - info->info.uikit.window = uiwindow; - return SDL_TRUE; - } else { - SDL_SetError("Application not compiled with SDL %d.%d\n", - SDL_MAJOR_VERSION, SDL_MINOR_VERSION); - return SDL_FALSE; + return SDL_TRUE; + } else { + SDL_SetError("Application not compiled with SDL %d.%d\n", + SDL_MAJOR_VERSION, SDL_MINOR_VERSION); + return SDL_FALSE; + } } } +NSUInteger +UIKit_GetSupportedOrientations(SDL_Window * window) +{ + const char *hint = SDL_GetHint(SDL_HINT_ORIENTATIONS); + NSUInteger validOrientations = UIInterfaceOrientationMaskAll; + NSUInteger orientationMask = 0; + + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata; + UIApplication *app = [UIApplication sharedApplication]; + + /* Get all possible valid orientations. If the app delegate doesn't tell + * us, we get the orientations from Info.plist via UIApplication. */ + if ([app.delegate respondsToSelector:@selector(application:supportedInterfaceOrientationsForWindow:)]) { + validOrientations = [app.delegate application:app supportedInterfaceOrientationsForWindow:data.uiwindow]; + } else if ([app respondsToSelector:@selector(supportedInterfaceOrientationsForWindow:)]) { + validOrientations = [app supportedInterfaceOrientationsForWindow:data.uiwindow]; + } + + if (hint != NULL) { + NSArray *orientations = [@(hint) componentsSeparatedByString:@" "]; + + if ([orientations containsObject:@"LandscapeLeft"]) { + orientationMask |= UIInterfaceOrientationMaskLandscapeLeft; + } + if ([orientations containsObject:@"LandscapeRight"]) { + orientationMask |= UIInterfaceOrientationMaskLandscapeRight; + } + if ([orientations containsObject:@"Portrait"]) { + orientationMask |= UIInterfaceOrientationMaskPortrait; + } + if ([orientations containsObject:@"PortraitUpsideDown"]) { + orientationMask |= UIInterfaceOrientationMaskPortraitUpsideDown; + } + } + + if (orientationMask == 0 && (window->flags & SDL_WINDOW_RESIZABLE)) { + /* any orientation is okay. */ + orientationMask = UIInterfaceOrientationMaskAll; + } + + if (orientationMask == 0) { + if (window->w >= window->h) { + orientationMask |= UIInterfaceOrientationMaskLandscape; + } + if (window->h >= window->w) { + orientationMask |= (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); + } + } + + /* Don't allow upside-down orientation on phones, so answering calls is in the natural orientation */ + if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { + orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown; + } + + /* If none of the specified orientations are actually supported by the + * app, we'll revert to what the app supports. An exception would be + * thrown by the system otherwise. */ + if ((validOrientations & orientationMask) == 0) { + orientationMask = validOrientations; + } + } + + return orientationMask; +} + int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam) { - SDL_WindowData *data = window ? (SDL_WindowData *)window->driverdata : NULL; + if (!window || !window->driverdata) { + return SDL_SetError("Invalid window"); + } - if (!data || !data->view) { - return SDL_SetError("Invalid window or view not set"); + @autoreleasepool { + SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata; + [data.viewcontroller setAnimationCallback:interval + callback:callback + callbackParam:callbackParam]; } - [data->view setAnimationCallback:interval callback:callback callbackParam:callbackParam]; return 0; } diff --git a/Engine/lib/sdl/src/video/uikit/keyinfotable.h b/Engine/lib/sdl/src/video/uikit/keyinfotable.h index 1d16868c8c..962dbd922f 100644 --- a/Engine/lib/sdl/src/video/uikit/keyinfotable.h +++ b/Engine/lib/sdl/src/video/uikit/keyinfotable.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -169,6 +169,6 @@ static UIKitKeyInfo unicharToUIKeyInfoTable[] = { /* 127 */{ SDL_SCANCODE_BACKSPACE, KMOD_SHIFT } }; -#endif /* UIKitKeyInfo */ +#endif /* _UIKIT_KeyInfo */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.c b/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.c new file mode 100644 index 0000000000..687cc6a730 --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.c @@ -0,0 +1,47 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_VIVANTE && SDL_VIDEO_OPENGL_EGL + +#include "SDL_vivanteopengles.h" +#include "SDL_vivantevideo.h" + +/* EGL implementation of SDL OpenGL support */ + +int +VIVANTE_GLES_LoadLibrary(_THIS, const char *path) +{ + SDL_DisplayData *displaydata; + + displaydata = SDL_GetDisplayDriverData(0); + + return SDL_EGL_LoadLibrary(_this, path, displaydata->native_display); +} + +SDL_EGL_CreateContext_impl(VIVANTE) +SDL_EGL_SwapWindow_impl(VIVANTE) +SDL_EGL_MakeCurrent_impl(VIVANTE) + +#endif /* SDL_VIDEO_DRIVER_VIVANTE && SDL_VIDEO_OPENGL_EGL */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.h b/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.h new file mode 100644 index 0000000000..f47bf7797a --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.h @@ -0,0 +1,48 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_vivanteopengles_h +#define _SDL_vivanteopengles_h + +#if SDL_VIDEO_DRIVER_VIVANTE && SDL_VIDEO_OPENGL_EGL + +#include "../SDL_sysvideo.h" +#include "../SDL_egl_c.h" + +/* OpenGLES functions */ +#define VIVANTE_GLES_GetAttribute SDL_EGL_GetAttribute +#define VIVANTE_GLES_GetProcAddress SDL_EGL_GetProcAddress +#define VIVANTE_GLES_UnloadLibrary SDL_EGL_UnloadLibrary +#define VIVANTE_GLES_SetSwapInterval SDL_EGL_SetSwapInterval +#define VIVANTE_GLES_GetSwapInterval SDL_EGL_GetSwapInterval +#define VIVANTE_GLES_DeleteContext SDL_EGL_DeleteContext + +extern int VIVANTE_GLES_LoadLibrary(_THIS, const char *path); +extern SDL_GLContext VIVANTE_GLES_CreateContext(_THIS, SDL_Window * window); +extern void VIVANTE_GLES_SwapWindow(_THIS, SDL_Window * window); +extern int VIVANTE_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); + +#endif /* SDL_VIDEO_DRIVER_VIVANTE && SDL_VIDEO_OPENGL_EGL */ + +#endif /* _SDL_vivanteopengles_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.c b/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.c new file mode 100644 index 0000000000..76233417eb --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.c @@ -0,0 +1,44 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_VIVANTE + +#include "SDL_vivanteplatform.h" + +#ifdef VIVANTE_PLATFORM_GENERIC + +int +VIVANTE_SetupPlatform(_THIS) +{ + return 0; +} + +void +VIVANTE_CleanupPlatform(_THIS) +{ +} + +#endif /* VIVANTE_PLATFORM_GENERIC */ + +#endif /* SDL_VIDEO_DRIVER_VIVANTE */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.h b/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.h new file mode 100644 index 0000000000..6e11cce624 --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.h @@ -0,0 +1,45 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#ifndef _SDL_vivanteplatform_h +#define _SDL_vivanteplatform_h + +#if SDL_VIDEO_DRIVER_VIVANTE + +#include "SDL_vivantevideo.h" + +#if defined(CAVIUM) +#define VIVANTE_PLATFORM_CAVIUM +#elif defined(MARVELL) +#define VIVANTE_PLATFORM_MARVELL +#else +#define VIVANTE_PLATFORM_GENERIC +#endif + +extern int VIVANTE_SetupPlatform(_THIS); +extern void VIVANTE_CleanupPlatform(_THIS); + +#endif /* SDL_VIDEO_DRIVER_VIVANTE */ + +#endif /* _SDL_vivanteplatform_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.c b/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.c new file mode 100644 index 0000000000..fe4ea089d8 --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.c @@ -0,0 +1,399 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_VIVANTE + +/* SDL internals */ +#include "../SDL_sysvideo.h" +#include "SDL_version.h" +#include "SDL_syswm.h" +#include "SDL_loadso.h" +#include "SDL_events.h" +#include "../../events/SDL_events_c.h" + +#ifdef SDL_INPUT_LINUXEV +#include "../../core/linux/SDL_evdev.h" +#endif + +#include "SDL_vivantevideo.h" +#include "SDL_vivanteplatform.h" +#include "SDL_vivanteopengles.h" + + +static int +VIVANTE_Available(void) +{ + return 1; +} + +static void +VIVANTE_Destroy(SDL_VideoDevice * device) +{ + if (device->driverdata != NULL) { + SDL_free(device->driverdata); + device->driverdata = NULL; + } +} + +static SDL_VideoDevice * +VIVANTE_Create() +{ + SDL_VideoDevice *device; + SDL_VideoData *data; + + /* Initialize SDL_VideoDevice structure */ + device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); + if (device == NULL) { + SDL_OutOfMemory(); + return NULL; + } + + /* Initialize internal data */ + data = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData)); + if (data == NULL) { + SDL_OutOfMemory(); + SDL_free(device); + return NULL; + } + + device->driverdata = data; + + /* Setup amount of available displays and current display */ + device->num_displays = 0; + + /* Set device free function */ + device->free = VIVANTE_Destroy; + + /* Setup all functions which we can handle */ + device->VideoInit = VIVANTE_VideoInit; + device->VideoQuit = VIVANTE_VideoQuit; + device->GetDisplayModes = VIVANTE_GetDisplayModes; + device->SetDisplayMode = VIVANTE_SetDisplayMode; + device->CreateWindow = VIVANTE_CreateWindow; + device->SetWindowTitle = VIVANTE_SetWindowTitle; + device->SetWindowPosition = VIVANTE_SetWindowPosition; + device->SetWindowSize = VIVANTE_SetWindowSize; + device->ShowWindow = VIVANTE_ShowWindow; + device->HideWindow = VIVANTE_HideWindow; + device->DestroyWindow = VIVANTE_DestroyWindow; + device->GetWindowWMInfo = VIVANTE_GetWindowWMInfo; + + device->GL_LoadLibrary = VIVANTE_GLES_LoadLibrary; + device->GL_GetProcAddress = VIVANTE_GLES_GetProcAddress; + device->GL_UnloadLibrary = VIVANTE_GLES_UnloadLibrary; + device->GL_CreateContext = VIVANTE_GLES_CreateContext; + device->GL_MakeCurrent = VIVANTE_GLES_MakeCurrent; + device->GL_SetSwapInterval = VIVANTE_GLES_SetSwapInterval; + device->GL_GetSwapInterval = VIVANTE_GLES_GetSwapInterval; + device->GL_SwapWindow = VIVANTE_GLES_SwapWindow; + device->GL_DeleteContext = VIVANTE_GLES_DeleteContext; + + device->PumpEvents = VIVANTE_PumpEvents; + + return device; +} + +VideoBootStrap VIVANTE_bootstrap = { + "vivante", + "Vivante EGL Video Driver", + VIVANTE_Available, + VIVANTE_Create +}; + +/*****************************************************************************/ +/* SDL Video and Display initialization/handling functions */ +/*****************************************************************************/ + +static int +VIVANTE_AddVideoDisplays(_THIS) +{ + SDL_VideoData *videodata = _this->driverdata; + SDL_VideoDisplay display; + SDL_DisplayMode current_mode; + SDL_DisplayData *data; + int pitch = 0, bpp = 0; + unsigned long pixels = 0; + + data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData)); + if (data == NULL) { + return SDL_OutOfMemory(); + } + + SDL_zero(current_mode); +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + data->native_display = vdkGetDisplay(videodata->vdk_private); + + vdkGetDisplayInfo(data->native_display, ¤t_mode.w, ¤t_mode.h, &pixels, &pitch, &bpp); +#else + data->native_display = videodata->fbGetDisplayByIndex(0); + + videodata->fbGetDisplayInfo(data->native_display, ¤t_mode.w, ¤t_mode.h, &pixels, &pitch, &bpp); +#endif /* SDL_VIDEO_DRIVER_VIVANTE_VDK */ + + switch (bpp) + { + default: /* Is another format used? */ + case 16: + current_mode.format = SDL_PIXELFORMAT_RGB565; + break; + } + /* FIXME: How do we query refresh rate? */ + current_mode.refresh_rate = 60; + + SDL_zero(display); + display.desktop_mode = current_mode; + display.current_mode = current_mode; + display.driverdata = data; + SDL_AddVideoDisplay(&display); + return 0; +} + +int +VIVANTE_VideoInit(_THIS) +{ + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + videodata->vdk_private = vdkInitialize(); + if (!videodata->vdk_private) { + return SDL_SetError("vdkInitialize() failed"); + } +#else + videodata->egl_handle = SDL_LoadObject("libEGL.so.1"); + if (!videodata->egl_handle) { + videodata->egl_handle = SDL_LoadObject("libEGL.so"); + if (!videodata->egl_handle) { + return -1; + } + } +#define LOAD_FUNC(NAME) \ + videodata->NAME = SDL_LoadFunction(videodata->egl_handle, #NAME); \ + if (!videodata->NAME) return -1; + + LOAD_FUNC(fbGetDisplay); + LOAD_FUNC(fbGetDisplayByIndex); + LOAD_FUNC(fbGetDisplayGeometry); + LOAD_FUNC(fbGetDisplayInfo); + LOAD_FUNC(fbDestroyDisplay); + LOAD_FUNC(fbCreateWindow); + LOAD_FUNC(fbGetWindowGeometry); + LOAD_FUNC(fbGetWindowInfo); + LOAD_FUNC(fbDestroyWindow); +#endif + + if (VIVANTE_SetupPlatform(_this) < 0) { + return -1; + } + + if (VIVANTE_AddVideoDisplays(_this) < 0) { + return -1; + } + +#ifdef SDL_INPUT_LINUXEV + if (SDL_EVDEV_Init() < 0) { + return -1; + } +#endif + + return 0; +} + +void +VIVANTE_VideoQuit(_THIS) +{ + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + +#ifdef SDL_INPUT_LINUXEV + SDL_EVDEV_Quit(); +#endif + + VIVANTE_CleanupPlatform(_this); + +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + if (videodata->vdk_private) { + vdkExit(videodata->vdk_private); + videodata->vdk_private = NULL; + } +#else + if (videodata->egl_handle) { + SDL_UnloadObject(videodata->egl_handle); + videodata->egl_handle = NULL; + } +#endif +} + +void +VIVANTE_GetDisplayModes(_THIS, SDL_VideoDisplay * display) +{ + /* Only one display mode available, the current one */ + SDL_AddDisplayMode(display, &display->current_mode); +} + +int +VIVANTE_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) +{ + return 0; +} + +int +VIVANTE_CreateWindow(_THIS, SDL_Window * window) +{ + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + SDL_DisplayData *displaydata; + SDL_WindowData *data; + + displaydata = SDL_GetDisplayDriverData(0); + + /* Allocate window internal data */ + data = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); + if (data == NULL) { + return SDL_OutOfMemory(); + } + + /* Setup driver data for this window */ + window->driverdata = data; + +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + data->native_window = vdkCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h); +#else + data->native_window = videodata->fbCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h); +#endif + if (!data->native_window) { + return SDL_SetError("VIVANTE: Can't create native window"); + } + + if (window->flags & SDL_WINDOW_OPENGL) { + data->egl_surface = SDL_EGL_CreateSurface(_this, data->native_window); + if (data->egl_surface == EGL_NO_SURFACE) { + return SDL_SetError("VIVANTE: Can't create EGL surface"); + } + } else { + data->egl_surface = EGL_NO_SURFACE; + } + + /* Window has been successfully created */ + return 0; +} + +void +VIVANTE_DestroyWindow(_THIS, SDL_Window * window) +{ + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + SDL_WindowData *data; + + data = window->driverdata; + if (data) { + if (data->egl_surface != EGL_NO_SURFACE) { + SDL_EGL_DestroySurface(_this, data->egl_surface); + } + + if (data->native_window) { +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + vdkDestroyWindow(data->native_window); +#else + videodata->fbDestroyWindow(data->native_window); +#endif + } + + SDL_free(data); + } + window->driverdata = NULL; +} + +void +VIVANTE_SetWindowTitle(_THIS, SDL_Window * window) +{ +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + SDL_WindowData *data = window->driverdata; + vdkSetWindowTitle(data->native_window, window->title); +#endif +} + +void +VIVANTE_SetWindowPosition(_THIS, SDL_Window * window) +{ + /* FIXME */ +} + +void +VIVANTE_SetWindowSize(_THIS, SDL_Window * window) +{ + /* FIXME */ +} + +void +VIVANTE_ShowWindow(_THIS, SDL_Window * window) +{ +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + SDL_WindowData *data = window->driverdata; + vdkShowWindow(data->native_window); +#endif + SDL_SetMouseFocus(window); + SDL_SetKeyboardFocus(window); +} + +void +VIVANTE_HideWindow(_THIS, SDL_Window * window) +{ +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + SDL_WindowData *data = window->driverdata; + vdkHideWindow(data->native_window); +#endif +} + +/*****************************************************************************/ +/* SDL Window Manager function */ +/*****************************************************************************/ +SDL_bool +VIVANTE_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info) +{ +/* + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + + if (info->version.major == SDL_MAJOR_VERSION && + info->version.minor == SDL_MINOR_VERSION) { + info->subsystem = SDL_SYSWM_VIVANTE; + info->info.vivante.window = data->native_window; + return SDL_TRUE; + } else { + SDL_SetError("Application not compiled with SDL %d.%d\n", + SDL_MAJOR_VERSION, SDL_MINOR_VERSION); + return SDL_FALSE; + } +*/ + SDL_Unsupported(); + return SDL_FALSE; +} + +/*****************************************************************************/ +/* SDL event functions */ +/*****************************************************************************/ +void VIVANTE_PumpEvents(_THIS) +{ +#ifdef SDL_INPUT_LINUXEV + SDL_EVDEV_Poll(); +#endif +} + +#endif /* SDL_VIDEO_DRIVER_VIVANTE */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.h b/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.h new file mode 100644 index 0000000000..b99c73375b --- /dev/null +++ b/Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.h @@ -0,0 +1,91 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef _SDL_vivantevideo_h +#define _SDL_vivantevideo_h + +#include "../../SDL_internal.h" +#include "../SDL_sysvideo.h" + +#include "SDL_egl.h" + +#if SDL_VIDEO_DRIVER_VIVANTE_VDK +#include +#else +#include +#endif + +typedef struct SDL_VideoData +{ +#if SDL_VIDEO_DRIVER_VIVANTE_VDK + vdkPrivate vdk_private; +#else + void *egl_handle; /* EGL shared library handle */ + EGLNativeDisplayType (EGLAPIENTRY *fbGetDisplay)(void *context); + EGLNativeDisplayType (EGLAPIENTRY *fbGetDisplayByIndex)(int DisplayIndex); + void (EGLAPIENTRY *fbGetDisplayGeometry)(EGLNativeDisplayType Display, int *Width, int *Height); + void (EGLAPIENTRY *fbGetDisplayInfo)(EGLNativeDisplayType Display, int *Width, int *Height, unsigned long *Physical, int *Stride, int *BitsPerPixel); + void (EGLAPIENTRY *fbDestroyDisplay)(EGLNativeDisplayType Display); + EGLNativeWindowType (EGLAPIENTRY *fbCreateWindow)(EGLNativeDisplayType Display, int X, int Y, int Width, int Height); + void (EGLAPIENTRY *fbGetWindowGeometry)(EGLNativeWindowType Window, int *X, int *Y, int *Width, int *Height); + void (EGLAPIENTRY *fbGetWindowInfo)(EGLNativeWindowType Window, int *X, int *Y, int *Width, int *Height, int *BitsPerPixel, unsigned int *Offset); + void (EGLAPIENTRY *fbDestroyWindow)(EGLNativeWindowType Window); +#endif +} SDL_VideoData; + +typedef struct SDL_DisplayData +{ + EGLNativeDisplayType native_display; +} SDL_DisplayData; + +typedef struct SDL_WindowData +{ + EGLNativeWindowType native_window; + EGLSurface egl_surface; +} SDL_WindowData; + +/****************************************************************************/ +/* SDL_VideoDevice functions declaration */ +/****************************************************************************/ + +/* Display and window functions */ +int VIVANTE_VideoInit(_THIS); +void VIVANTE_VideoQuit(_THIS); +void VIVANTE_GetDisplayModes(_THIS, SDL_VideoDisplay * display); +int VIVANTE_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode); +int VIVANTE_CreateWindow(_THIS, SDL_Window * window); +void VIVANTE_SetWindowTitle(_THIS, SDL_Window * window); +void VIVANTE_SetWindowPosition(_THIS, SDL_Window * window); +void VIVANTE_SetWindowSize(_THIS, SDL_Window * window); +void VIVANTE_ShowWindow(_THIS, SDL_Window * window); +void VIVANTE_HideWindow(_THIS, SDL_Window * window); +void VIVANTE_DestroyWindow(_THIS, SDL_Window * window); + +/* Window manager function */ +SDL_bool VIVANTE_GetWindowWMInfo(_THIS, SDL_Window * window, + struct SDL_SysWMinfo *info); + +/* Event functions */ +void VIVANTE_PumpEvents(_THIS); + +#endif /* _SDL_vivantevideo_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.c b/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.c index 1ed29db5c0..bc1d06e468 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.h b/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.h index 8d9313a2de..b3ff9d8e99 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylanddyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandevents.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandevents.c index cb729001e8..53b0ac9078 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandevents.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -52,6 +52,10 @@ struct SDL_WaylandInput { SDL_WindowData *pointer_focus; SDL_WindowData *keyboard_focus; + /* Last motion location */ + wl_fixed_t sx_w; + wl_fixed_t sy_w; + struct { struct xkb_keymap *keymap; struct xkb_state *state; @@ -119,13 +123,53 @@ pointer_handle_motion(void *data, struct wl_pointer *pointer, { struct SDL_WaylandInput *input = data; SDL_WindowData *window = input->pointer_focus; - int sx = wl_fixed_to_int(sx_w); - int sy = wl_fixed_to_int(sy_w); + input->sx_w = sx_w; + input->sy_w = sy_w; if (input->pointer_focus) { + const int sx = wl_fixed_to_int(sx_w); + const int sy = wl_fixed_to_int(sy_w); SDL_SendMouseMotion(window->sdlwindow, 0, 0, sx, sy); } } +static SDL_bool +ProcessHitTest(struct SDL_WaylandInput *input, uint32_t serial) +{ + SDL_WindowData *window_data = input->pointer_focus; + SDL_Window *window = window_data->sdlwindow; + + if (window->hit_test) { + const SDL_Point point = { wl_fixed_to_int(input->sx_w), wl_fixed_to_int(input->sy_w) }; + const SDL_HitTestResult rc = window->hit_test(window, &point, window->hit_test_data); + static const uint32_t directions[] = { + WL_SHELL_SURFACE_RESIZE_TOP_LEFT, WL_SHELL_SURFACE_RESIZE_TOP, + WL_SHELL_SURFACE_RESIZE_TOP_RIGHT, WL_SHELL_SURFACE_RESIZE_RIGHT, + WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT, WL_SHELL_SURFACE_RESIZE_BOTTOM, + WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT, WL_SHELL_SURFACE_RESIZE_LEFT + }; + switch (rc) { + case SDL_HITTEST_DRAGGABLE: + wl_shell_surface_move(window_data->shell_surface, input->seat, serial); + return SDL_TRUE; + + case SDL_HITTEST_RESIZE_TOPLEFT: + case SDL_HITTEST_RESIZE_TOP: + case SDL_HITTEST_RESIZE_TOPRIGHT: + case SDL_HITTEST_RESIZE_RIGHT: + case SDL_HITTEST_RESIZE_BOTTOMRIGHT: + case SDL_HITTEST_RESIZE_BOTTOM: + case SDL_HITTEST_RESIZE_BOTTOMLEFT: + case SDL_HITTEST_RESIZE_LEFT: + wl_shell_surface_resize(window_data->shell_surface, input->seat, serial, directions[rc - SDL_HITTEST_RESIZE_TOPLEFT]); + return SDL_TRUE; + + default: return SDL_FALSE; + } + } + + return SDL_FALSE; +} + static void pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial, uint32_t time, uint32_t button, uint32_t state_w) @@ -139,6 +183,9 @@ pointer_handle_button(void *data, struct wl_pointer *pointer, uint32_t serial, switch (button) { case BTN_LEFT: sdl_button = SDL_BUTTON_LEFT; + if (ProcessHitTest(data, serial)) { + return; /* don't pass this event on to app. */ + } break; case BTN_MIDDLE: sdl_button = SDL_BUTTON_MIDDLE; @@ -184,7 +231,7 @@ pointer_handle_axis(void *data, struct wl_pointer *pointer, return; } - SDL_SendMouseWheel(window->sdlwindow, 0, x, y); + SDL_SendMouseWheel(window->sdlwindow, 0, x, y, SDL_MOUSEWHEEL_NORMAL); } } @@ -246,7 +293,14 @@ keyboard_handle_enter(void *data, struct wl_keyboard *keyboard, struct wl_array *keys) { struct SDL_WaylandInput *input = data; - SDL_WindowData *window = wl_surface_get_user_data(surface); + SDL_WindowData *window; + + if (!surface) { + /* enter event for a window we've just destroyed */ + return; + } + + window = wl_surface_get_user_data(surface); input->keyboard_focus = window; window->keyboard_device = input; @@ -364,7 +418,8 @@ Wayland_display_add_input(SDL_VideoData *d, uint32_t id) input->display = d; input->seat = wl_registry_bind(d->registry, id, &wl_seat_interface, 1); - + input->sx_w = wl_fixed_from_int(0); + input->sy_w = wl_fixed_from_int(0); d->input = input; wl_seat_add_listener(input->seat, &seat_listener, input); diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandevents_c.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandevents_c.h index 8a6c3fcd65..62b163bf6e 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandevents_c.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.c index 0752695719..b810f77842 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -53,6 +53,7 @@ typedef struct { struct wl_surface *surface; int hot_x, hot_y; + int w, h; /* Either a preloaded cursor, or one we created ourselves */ struct wl_cursor *cursor; @@ -105,6 +106,7 @@ create_buffer_from_shm(Wayland_CursorData *d, { SDL_VideoDevice *vd = SDL_GetVideoDevice(); SDL_VideoData *data = (SDL_VideoData *) vd->driverdata; + struct wl_shm_pool *shm_pool; int stride = width * 4; int size = stride * height; @@ -124,15 +126,13 @@ create_buffer_from_shm(Wayland_CursorData *d, MAP_SHARED, shm_fd, 0); - if (data == MAP_FAILED) { + if (d->shm_data == MAP_FAILED) { d->shm_data = NULL; fprintf (stderr, "mmap () failed\n"); close (shm_fd); } - struct wl_shm_pool *shm_pool = wl_shm_create_pool(data->shm, - shm_fd, - size); + shm_pool = wl_shm_create_pool(data->shm, shm_fd, size); d->buffer = wl_shm_pool_create_buffer(shm_pool, 0, width, @@ -182,19 +182,11 @@ Wayland_CreateCursor(SDL_Surface *surface, int hot_x, int hot_y) data->surface = wl_compositor_create_surface(wd->compositor); wl_surface_set_user_data(data->surface, NULL); - wl_surface_attach(data->surface, - data->buffer, - 0, - 0); - wl_surface_damage(data->surface, - 0, - 0, - surface->w, - surface->h); - wl_surface_commit(data->surface); data->hot_x = hot_x; data->hot_y = hot_y; + data->w = surface->w; + data->h = surface->h; } return cursor; @@ -210,24 +202,13 @@ CreateCursorFromWlCursor(SDL_VideoData *d, struct wl_cursor *wlcursor) Wayland_CursorData *data = calloc (1, sizeof (Wayland_CursorData)); cursor->driverdata = (void *) data; - /* The wl_buffer here will be destroyed from wl_cursor_theme_destroy - * if we are fetching this from a wl_cursor_theme, so don't store a - * reference to it here */ - data->buffer = NULL; + data->buffer = WAYLAND_wl_cursor_image_get_buffer(wlcursor->images[0]); data->surface = wl_compositor_create_surface(d->compositor); wl_surface_set_user_data(data->surface, NULL); - wl_surface_attach(data->surface, - WAYLAND_wl_cursor_image_get_buffer(wlcursor->images[0]), - 0, - 0); - wl_surface_damage(data->surface, - 0, - 0, - wlcursor->images[0]->width, - wlcursor->images[0]->height); - wl_surface_commit(data->surface); data->hot_x = wlcursor->images[0]->hotspot_x; data->hot_y = wlcursor->images[0]->hotspot_y; + data->w = wlcursor->images[0]->width; + data->h = wlcursor->images[0]->height; data->cursor= wlcursor; } else { SDL_OutOfMemory (); @@ -267,13 +248,13 @@ Wayland_CreateSystemCursor(SDL_SystemCursor id) cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "xterm"); break; case SDL_SYSTEM_CURSOR_WAIT: - cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "wait"); + cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "watch"); break; case SDL_SYSTEM_CURSOR_CROSSHAIR: cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "hand1"); break; case SDL_SYSTEM_CURSOR_WAITARROW: - cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "wait"); + cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "watch"); break; case SDL_SYSTEM_CURSOR_SIZENWSE: cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "hand1"); @@ -298,24 +279,24 @@ Wayland_CreateSystemCursor(SDL_SystemCursor id) break; } - SDL_Cursor *sdl_cursor = CreateCursorFromWlCursor (d, cursor); - - return sdl_cursor; + return CreateCursorFromWlCursor(d, cursor); } static void Wayland_FreeCursor(SDL_Cursor *cursor) { + Wayland_CursorData *d; + if (!cursor) return; - Wayland_CursorData *d = cursor->driverdata; + d = cursor->driverdata; /* Probably not a cursor we own */ if (!d) return; - if (d->buffer) + if (d->buffer && !d->cursor) wl_buffer_destroy(d->buffer); if (d->surface) @@ -341,6 +322,9 @@ Wayland_ShowCursor(SDL_Cursor *cursor) { Wayland_CursorData *data = cursor->driverdata; + wl_surface_attach(data->surface, data->buffer, 0, 0); + wl_surface_damage(data->surface, 0, 0, data->w, data->h); + wl_surface_commit(data->surface); wl_pointer_set_cursor (pointer, 0, data->surface, data->hot_x, @@ -361,14 +345,18 @@ static void Wayland_WarpMouse(SDL_Window *window, int x, int y) { SDL_Unsupported(); - return; +} + +static int +Wayland_WarpMouseGlobal(int x, int y) +{ + return SDL_Unsupported(); } static int Wayland_SetRelativeMouseMode(SDL_bool enabled) { - SDL_Unsupported(); - return -1; + return SDL_Unsupported(); } void @@ -381,6 +369,7 @@ Wayland_InitMouse(void) mouse->ShowCursor = Wayland_ShowCursor; mouse->FreeCursor = Wayland_FreeCursor; mouse->WarpMouse = Wayland_WarpMouse; + mouse->WarpMouseGlobal = Wayland_WarpMouseGlobal; mouse->SetRelativeMouseMode = Wayland_SetRelativeMouseMode; SDL_SetDefaultCursor(Wayland_CreateDefaultCursor()); diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.h index efd29d6ce5..129990ded4 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.c index 45078043ca..6803dbe63d 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.h index 77081f81b2..6c3f1f3847 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandsym.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandsym.h index c3b4fa5089..b093d9db10 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandsym.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandsym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.c index 683c7029fc..4cae425946 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,8 +25,8 @@ #ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH -#include "SDL_waylandtouch.h" #include "SDL_log.h" +#include "SDL_waylandtouch.h" #include "../../events/SDL_touch_c.h" struct SDL_WaylandTouch { @@ -88,12 +88,10 @@ touch_handle_touch(void *data, uint32_t capabilities = flags >> 16; */ - SDL_TouchID deviceId = 0; - if (!SDL_GetTouch(deviceId)) { - if (SDL_AddTouch(deviceId, "qt_touch_extension") < 0) { - SDL_Log("error: can't add touch %s, %d", __FILE__, __LINE__); - } - } + SDL_TouchID deviceId = 1; + if (SDL_AddTouch(deviceId, "qt_touch_extension") < 0) { + SDL_Log("error: can't add touch %s, %d", __FILE__, __LINE__); + } switch (touchState) { case QtWaylandTouchPointPressed: @@ -236,13 +234,16 @@ WL_EXPORT const struct wl_interface qt_extended_surface_interface = { void Wayland_touch_create(SDL_VideoData *data, uint32_t id) { + struct SDL_WaylandTouch *touch; + if (data->touch) { Wayland_touch_destroy(data); } - data->touch = malloc(sizeof(struct SDL_WaylandTouch)); + /* !!! FIXME: check for failure, call SDL_OutOfMemory() */ + data->touch = SDL_malloc(sizeof(struct SDL_WaylandTouch)); - struct SDL_WaylandTouch *touch = data->touch; + touch = data->touch; touch->touch_extension = wl_registry_bind(data->registry, id, &qt_touch_extension_interface, 1); qt_touch_extension_add_listener(touch->touch_extension, &touch_listener, data); } @@ -256,7 +257,7 @@ Wayland_touch_destroy(SDL_VideoData *data) qt_touch_extension_destroy(touch->touch_extension); } - free(data->touch); + SDL_free(data->touch); data->touch = NULL; } } diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.h index 435fd5624a..5f2a05813b 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandtouch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.c index 43826b831f..b47ec29be0 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -43,11 +43,6 @@ #define WAYLANDVID_DRIVER_NAME "wayland" -struct wayland_mode { - SDL_DisplayMode mode; - struct wl_list link; -}; - /* Initialization/Query functions */ static int Wayland_VideoInit(_THIS); @@ -87,7 +82,7 @@ static SDL_VideoDevice * Wayland_CreateDevice(int devindex) { SDL_VideoDevice *device; - + if (!SDL_WAYLAND_LoadSymbols()) { return NULL; } @@ -124,6 +119,7 @@ Wayland_CreateDevice(int devindex) device->SetWindowFullscreen = Wayland_SetWindowFullscreen; device->SetWindowSize = Wayland_SetWindowSize; device->DestroyWindow = Wayland_DestroyWindow; + device->SetWindowHitTest = Wayland_SetWindowHitTest; device->free = Wayland_DeleteDevice; @@ -135,27 +131,6 @@ VideoBootStrap Wayland_bootstrap = { Wayland_Available, Wayland_CreateDevice }; -static void -wayland_add_mode(SDL_VideoData *d, SDL_DisplayMode m) -{ - struct wayland_mode *mode; - - /* Check for duplicate mode */ - wl_list_for_each(mode, &d->modes_list, link) - if (mode->mode.w == m.w && mode->mode.h == m.h && - mode->mode.refresh_rate == m.refresh_rate) - return; - - /* Add new mode to the list */ - mode = (struct wayland_mode *) SDL_calloc(1, sizeof *mode); - - if (!mode) - return; - - mode->mode = m; - WAYLAND_wl_list_insert(&d->modes_list, &mode->link); -} - static void display_handle_geometry(void *data, struct wl_output *output, @@ -168,54 +143,79 @@ display_handle_geometry(void *data, int transform) { - SDL_VideoData *d = data; + SDL_VideoDisplay *display = data; - d->screen_allocation.x = x; - d->screen_allocation.y = y; + display->name = strdup(model); + display->driverdata = output; } static void display_handle_mode(void *data, - struct wl_output *wl_output, + struct wl_output *output, uint32_t flags, int width, int height, int refresh) { - SDL_VideoData *d = data; + SDL_VideoDisplay *display = data; SDL_DisplayMode mode; SDL_zero(mode); mode.w = width; mode.h = height; - mode.refresh_rate = refresh / 1000; - - wayland_add_mode(d, mode); + mode.refresh_rate = refresh / 1000; // mHz to Hz + SDL_AddDisplayMode(display, &mode); if (flags & WL_OUTPUT_MODE_CURRENT) { - d->screen_allocation.width = width; - d->screen_allocation.height = height; + display->current_mode = mode; + display->desktop_mode = mode; } } +static void +display_handle_done(void *data, + struct wl_output *output) +{ + SDL_VideoDisplay *display = data; + SDL_AddVideoDisplay(display); + SDL_free(display->name); + SDL_free(display); +} + +static void +display_handle_scale(void *data, + struct wl_output *output, + int32_t factor) +{ + // TODO: do HiDPI stuff. +} + static const struct wl_output_listener output_listener = { display_handle_geometry, - display_handle_mode + display_handle_mode, + display_handle_done, + display_handle_scale }; static void -shm_handle_format(void *data, - struct wl_shm *shm, - uint32_t format) +Wayland_add_display(SDL_VideoData *d, uint32_t id) { - SDL_VideoData *d = data; + struct wl_output *output; + SDL_VideoDisplay *display = SDL_malloc(sizeof *display); + if (!display) { + SDL_OutOfMemory(); + return; + } + SDL_zero(*display); - d->shm_formats |= (1 << format); -} + output = wl_registry_bind(d->registry, id, &wl_output_interface, 2); + if (!output) { + SDL_SetError("Failed to retrieve output."); + return; + } -static const struct wl_shm_listener shm_listener = { - shm_handle_format -}; + wl_output_add_listener(output, &output_listener, display); +} #ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH static void @@ -238,15 +238,14 @@ static const struct qt_windowmanager_listener windowmanager_listener = { static void display_handle_global(void *data, struct wl_registry *registry, uint32_t id, - const char *interface, uint32_t version) + const char *interface, uint32_t version) { SDL_VideoData *d = data; - + if (strcmp(interface, "wl_compositor") == 0) { d->compositor = wl_registry_bind(d->registry, id, &wl_compositor_interface, 1); } else if (strcmp(interface, "wl_output") == 0) { - d->output = wl_registry_bind(d->registry, id, &wl_output_interface, 1); - wl_output_add_listener(d->output, &output_listener, d); + Wayland_add_display(d, id); } else if (strcmp(interface, "wl_seat") == 0) { Wayland_display_add_input(d, id); } else if (strcmp(interface, "wl_shell") == 0) { @@ -255,8 +254,7 @@ display_handle_global(void *data, struct wl_registry *registry, uint32_t id, d->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); d->cursor_theme = WAYLAND_wl_cursor_theme_load(NULL, 32, d->shm); d->default_cursor = WAYLAND_wl_cursor_theme_get_cursor(d->cursor_theme, "left_ptr"); - wl_shm_add_listener(d->shm, &shm_listener, d); - + #ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH } else if (strcmp(interface, "qt_touch_extension") == 0) { Wayland_touch_create(d, id); @@ -272,73 +270,43 @@ display_handle_global(void *data, struct wl_registry *registry, uint32_t id, } static const struct wl_registry_listener registry_listener = { - display_handle_global + display_handle_global }; int Wayland_VideoInit(_THIS) { - SDL_VideoData *data; - SDL_VideoDisplay display; - SDL_DisplayMode mode; - int i; - - data = malloc(sizeof *data); + SDL_VideoData *data = SDL_malloc(sizeof *data); if (data == NULL) - return 0; + return SDL_OutOfMemory(); memset(data, 0, sizeof *data); _this->driverdata = data; - WAYLAND_wl_list_init(&data->modes_list); - data->display = WAYLAND_wl_display_connect(NULL); if (data->display == NULL) { - SDL_SetError("Failed to connect to a Wayland display"); - return 0; + return SDL_SetError("Failed to connect to a Wayland display"); } data->registry = wl_display_get_registry(data->display); - - if ( data->registry == NULL) { - SDL_SetError("Failed to get the Wayland registry"); - return 0; + if (data->registry == NULL) { + return SDL_SetError("Failed to get the Wayland registry"); } - + wl_registry_add_listener(data->registry, ®istry_listener, data); - for (i=0; i < 100; i++) { - if (data->screen_allocation.width != 0 || WAYLAND_wl_display_get_error(data->display) != 0) { - break; - } - WAYLAND_wl_display_dispatch(data->display); - } - - if (data->screen_allocation.width == 0) { - SDL_SetError("Failed while waiting for screen allocation: %d ", WAYLAND_wl_display_get_error(data->display)); - return 0; - } + // First roundtrip to receive all registry objects. + WAYLAND_wl_display_roundtrip(data->display); + + // Second roundtrip to receive all output events. + WAYLAND_wl_display_roundtrip(data->display); data->xkb_context = WAYLAND_xkb_context_new(0); if (!data->xkb_context) { - SDL_SetError("Failed to create XKB context"); - return 0; + return SDL_SetError("Failed to create XKB context"); } - /* Use a fake 32-bpp desktop mode */ - mode.format = SDL_PIXELFORMAT_RGB888; - mode.w = data->screen_allocation.width; - mode.h = data->screen_allocation.height; - mode.refresh_rate = 0; - mode.driverdata = NULL; - wayland_add_mode(data, mode); - SDL_zero(display); - display.desktop_mode = mode; - display.current_mode = mode; - display.driverdata = NULL; - SDL_AddVideoDisplay(&display); - - Wayland_InitMouse (); + Wayland_InitMouse(); WAYLAND_wl_display_flush(data->display); @@ -348,46 +316,29 @@ Wayland_VideoInit(_THIS) static void Wayland_GetDisplayModes(_THIS, SDL_VideoDisplay *sdl_display) { - SDL_VideoData *data = _this->driverdata; - SDL_DisplayMode mode; - struct wayland_mode *m; - - Wayland_PumpEvents(_this); - - wl_list_for_each(m, &data->modes_list, link) { - m->mode.format = SDL_PIXELFORMAT_RGB888; - SDL_AddDisplayMode(sdl_display, &m->mode); - m->mode.format = SDL_PIXELFORMAT_RGBA8888; - SDL_AddDisplayMode(sdl_display, &m->mode); - } - - mode.w = data->screen_allocation.width; - mode.h = data->screen_allocation.height; - mode.refresh_rate = 0; - mode.driverdata = NULL; - - mode.format = SDL_PIXELFORMAT_RGB888; - SDL_AddDisplayMode(sdl_display, &mode); - mode.format = SDL_PIXELFORMAT_RGBA8888; - SDL_AddDisplayMode(sdl_display, &mode); + // Nothing to do here, everything was already done in the wl_output + // callbacks. } static int Wayland_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode) { - return 0; + return SDL_Unsupported(); } void Wayland_VideoQuit(_THIS) { SDL_VideoData *data = _this->driverdata; - struct wayland_mode *t, *m; + int i; Wayland_FiniMouse (); - if (data->output) - wl_output_destroy(data->output); + for (i = 0; i < _this->num_displays; ++i) { + SDL_VideoDisplay *display = &_this->displays[i]; + wl_output_destroy(display->driverdata); + display->driverdata = NULL; + } Wayland_display_destroy_input(data); @@ -417,16 +368,13 @@ Wayland_VideoQuit(_THIS) if (data->compositor) wl_compositor_destroy(data->compositor); + if (data->registry) + wl_registry_destroy(data->registry); + if (data->display) { WAYLAND_wl_display_flush(data->display); WAYLAND_wl_display_disconnect(data->display); } - - wl_list_for_each_safe(m, t, &data->modes_list, link) { - WAYLAND_wl_list_remove(&m->link); - free(m); - } - free(data); _this->driverdata = NULL; diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.h index 06bcdc48de..8111bf153d 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -40,35 +40,26 @@ typedef struct { struct wl_display *display; struct wl_registry *registry; struct wl_compositor *compositor; - struct wl_output *output; struct wl_shm *shm; struct wl_cursor_theme *cursor_theme; struct wl_cursor *default_cursor; struct wl_pointer *pointer; struct wl_shell *shell; - struct { - int32_t x, y, width, height; - } screen_allocation; - - struct wl_list modes_list; - EGLDisplay edpy; EGLContext context; EGLConfig econf; struct xkb_context *xkb_context; struct SDL_WaylandInput *input; - -#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH + +#ifdef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH struct SDL_WaylandTouch *touch; struct qt_surface_extension *surface_extension; struct qt_windowmanager *windowmanager; #endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ - - uint32_t shm_formats; } SDL_VideoData; -#endif /* _SDL_nullvideo_h */ +#endif /* _SDL_waylandvideo_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.c b/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.c index f7b339cfcb..b59759a7c0 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.c +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,7 @@ #include "SDL_waylandwindow.h" #include "SDL_waylandvideo.h" #include "SDL_waylandtouch.h" +#include "SDL_waylanddyn.h" static void handle_ping(void *data, struct wl_shell_surface *shell_surface, @@ -41,6 +42,19 @@ static void handle_configure(void *data, struct wl_shell_surface *shell_surface, uint32_t edges, int32_t width, int32_t height) { + SDL_WindowData *wind = (SDL_WindowData *)data; + SDL_Window *window = wind->sdlwindow; + struct wl_region *region; + + window->w = width; + window->h = height; + WAYLAND_wl_egl_window_resize(wind->egl_window, window->w, window->h, 0, 0); + + region = wl_compositor_create_region(wind->waylandData->compositor); + wl_region_add(region, 0, 0, window->w, window->h); + wl_surface_set_opaque_region(wind->surface, region); + wl_region_destroy(region); + SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, window->w, window->h); } static void @@ -95,6 +109,12 @@ Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) return SDL_TRUE; } +int +Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled) +{ + return 0; /* just succeed, the real work is done elsewhere. */ +} + void Wayland_ShowWindow(_THIS, SDL_Window *window) { SDL_WindowData *wind = window->driverdata; @@ -102,7 +122,7 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window) if (window->flags & SDL_WINDOW_FULLSCREEN) wl_shell_surface_set_fullscreen(wind->shell_surface, WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT, - 0, NULL); + 0, (struct wl_output *)window->fullscreen_mode.driverdata); else wl_shell_surface_set_toplevel(wind->shell_surface); @@ -118,7 +138,7 @@ Wayland_SetWindowFullscreen(_THIS, SDL_Window * window, if (fullscreen) wl_shell_surface_set_fullscreen(wind->shell_surface, WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE, - 0, NULL); + 0, (struct wl_output *)_display->driverdata); else wl_shell_surface_set_toplevel(wind->shell_surface); @@ -133,7 +153,7 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) data = calloc(1, sizeof *data); if (data == NULL) - return 0; + return SDL_OutOfMemory(); c = _this->driverdata; window->driverdata = data; @@ -164,6 +184,7 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) c->surface_extension, data->surface); } #endif /* SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */ + data->egl_window = WAYLAND_wl_egl_window_create(data->surface, window->w, window->h); @@ -171,8 +192,7 @@ int Wayland_CreateWindow(_THIS, SDL_Window *window) data->egl_surface = SDL_EGL_CreateSurface(_this, (NativeWindowType) data->egl_window); if (data->egl_surface == EGL_NO_SURFACE) { - SDL_SetError("failed to create a window surface"); - return -1; + return SDL_SetError("failed to create a window surface"); } if (data->shell_surface) { @@ -218,8 +238,6 @@ void Wayland_DestroyWindow(_THIS, SDL_Window *window) SDL_VideoData *data = _this->driverdata; SDL_WindowData *wind = window->driverdata; - window->driverdata = NULL; - if (data) { SDL_EGL_DestroySurface(_this, wind->egl_surface); WAYLAND_wl_egl_window_destroy(wind->egl_window); @@ -236,6 +254,7 @@ void Wayland_DestroyWindow(_THIS, SDL_Window *window) SDL_free(wind); WAYLAND_wl_display_flush(data->display); } + window->driverdata = NULL; } #endif /* SDL_VIDEO_DRIVER_WAYLAND && SDL_VIDEO_OPENGL_EGL */ diff --git a/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.h b/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.h index c1190d521b..053b1281fb 100644 --- a/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.h +++ b/Engine/lib/sdl/src/video/wayland/SDL_waylandwindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -55,6 +55,7 @@ extern void Wayland_DestroyWindow(_THIS, SDL_Window *window); extern SDL_bool Wayland_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info); +extern int Wayland_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); #endif /* _SDL_waylandwindow_h */ diff --git a/Engine/lib/sdl/src/video/windows/SDL_msctf.h b/Engine/lib/sdl/src/video/windows/SDL_msctf.h index 01e732cfb8..74e22f107a 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_msctf.h +++ b/Engine/lib/sdl/src/video/windows/SDL_msctf.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_vkeys.h b/Engine/lib/sdl/src/video/windows/SDL_vkeys.h index 1ed155a18d..fd65204192 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_vkeys.h +++ b/Engine/lib/sdl/src/video/windows/SDL_vkeys.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.c b/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.c index ae3a104aba..b57a66a7be 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.h b/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.h index 49c36c4eea..d86cd97ec3 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsclipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsevents.c b/Engine/lib/sdl/src/video/windows/SDL_windowsevents.c index ec3c05262e..61420894fa 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsevents.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsevents.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,12 +24,15 @@ #include "SDL_windowsvideo.h" #include "SDL_windowsshape.h" +#include "SDL_system.h" #include "SDL_syswm.h" #include "SDL_timer.h" #include "SDL_vkeys.h" #include "../../events/SDL_events_c.h" #include "../../events/SDL_touch_c.h" #include "../../events/scancodes_windows.h" +#include "SDL_assert.h" +#include "SDL_hints.h" /* Dropfile support */ #include @@ -43,6 +46,9 @@ #include "wmmsg.h" #endif +/* For processing mouse WM_*BUTTON* and WM_MOUSEMOVE message-data from GetMessageExtraInfo() */ +#define MOUSEEVENTF_FROMTOUCH 0xFF515700 + /* Masks for processing the windows KEYDOWN and KEYUP messages */ #define REPEATED_KEYMASK (1<<30) #define EXTENDED_KEYMASK (1<<24) @@ -76,17 +82,15 @@ #endif static SDL_Scancode -WindowsScanCodeToSDLScanCode( LPARAM lParam, WPARAM wParam ) +WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam) { SDL_Scancode code; char bIsExtended; - int nScanCode = ( lParam >> 16 ) & 0xFF; + int nScanCode = (lParam >> 16) & 0xFF; /* 0x45 here to work around both pause and numlock sharing the same scancode, so use the VK key to tell them apart */ - if ( nScanCode == 0 || nScanCode == 0x45 ) - { - switch( wParam ) - { + if (nScanCode == 0 || nScanCode == 0x45) { + switch(wParam) { case VK_CLEAR: return SDL_SCANCODE_CLEAR; case VK_MODECHANGE: return SDL_SCANCODE_MODE; case VK_SELECT: return SDL_SCANCODE_SELECT; @@ -141,16 +145,14 @@ WindowsScanCodeToSDLScanCode( LPARAM lParam, WPARAM wParam ) } } - if ( nScanCode > 127 ) + if (nScanCode > 127) return SDL_SCANCODE_UNKNOWN; code = windows_scancode_table[nScanCode]; - bIsExtended = ( lParam & ( 1 << 24 ) ) != 0; - if ( !bIsExtended ) - { - switch ( code ) - { + bIsExtended = (lParam & (1 << 24)) != 0; + if (!bIsExtended) { + switch (code) { case SDL_SCANCODE_HOME: return SDL_SCANCODE_KP_7; case SDL_SCANCODE_UP: @@ -176,11 +178,8 @@ WindowsScanCodeToSDLScanCode( LPARAM lParam, WPARAM wParam ) default: break; } - } - else - { - switch ( code ) - { + } else { + switch (code) { case SDL_SCANCODE_RETURN: return SDL_SCANCODE_KP_ENTER; case SDL_SCANCODE_LALT: @@ -201,15 +200,17 @@ WindowsScanCodeToSDLScanCode( LPARAM lParam, WPARAM wParam ) void -WIN_CheckWParamMouseButton( SDL_bool bwParamMousePressed, SDL_bool bSDLMousePressed, SDL_WindowData *data, Uint8 button ) +WIN_CheckWParamMouseButton(SDL_bool bwParamMousePressed, SDL_bool bSDLMousePressed, SDL_WindowData *data, Uint8 button, SDL_MouseID mouseID) { - if ( bwParamMousePressed && !bSDLMousePressed ) - { - SDL_SendMouseButton(data->window, 0, SDL_PRESSED, button); + if (data->focus_click_pending && button == SDL_BUTTON_LEFT && !bwParamMousePressed) { + data->focus_click_pending = SDL_FALSE; + WIN_UpdateClipCursor(data->window); } - else if ( !bwParamMousePressed && bSDLMousePressed ) - { - SDL_SendMouseButton(data->window, 0, SDL_RELEASED, button); + + if (bwParamMousePressed && !bSDLMousePressed) { + SDL_SendMouseButton(data->window, mouseID, SDL_PRESSED, button); + } else if (!bwParamMousePressed && bSDLMousePressed) { + SDL_SendMouseButton(data->window, mouseID, SDL_RELEASED, button); } } @@ -218,53 +219,51 @@ WIN_CheckWParamMouseButton( SDL_bool bwParamMousePressed, SDL_bool bSDLMousePres * so this funciton reconciles our view of the world with the current buttons reported by windows */ void -WIN_CheckWParamMouseButtons( WPARAM wParam, SDL_WindowData *data ) +WIN_CheckWParamMouseButtons(WPARAM wParam, SDL_WindowData *data, SDL_MouseID mouseID) { - if ( wParam != data->mouse_button_flags ) - { - Uint32 mouseFlags = SDL_GetMouseState( NULL, NULL ); - WIN_CheckWParamMouseButton( (wParam & MK_LBUTTON), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT ); - WIN_CheckWParamMouseButton( (wParam & MK_MBUTTON), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE ); - WIN_CheckWParamMouseButton( (wParam & MK_RBUTTON), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT ); - WIN_CheckWParamMouseButton( (wParam & MK_XBUTTON1), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1 ); - WIN_CheckWParamMouseButton( (wParam & MK_XBUTTON2), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2 ); + if (wParam != data->mouse_button_flags) { + Uint32 mouseFlags = SDL_GetMouseState(NULL, NULL); + WIN_CheckWParamMouseButton((wParam & MK_LBUTTON), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT, mouseID); + WIN_CheckWParamMouseButton((wParam & MK_MBUTTON), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE, mouseID); + WIN_CheckWParamMouseButton((wParam & MK_RBUTTON), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT, mouseID); + WIN_CheckWParamMouseButton((wParam & MK_XBUTTON1), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1, mouseID); + WIN_CheckWParamMouseButton((wParam & MK_XBUTTON2), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2, mouseID); data->mouse_button_flags = wParam; } } void -WIN_CheckRawMouseButtons( ULONG rawButtons, SDL_WindowData *data ) +WIN_CheckRawMouseButtons(ULONG rawButtons, SDL_WindowData *data) { - if ( rawButtons != data->mouse_button_flags ) - { - Uint32 mouseFlags = SDL_GetMouseState( NULL, NULL ); - if ( (rawButtons & RI_MOUSE_BUTTON_1_DOWN) ) - WIN_CheckWParamMouseButton( (rawButtons & RI_MOUSE_BUTTON_1_DOWN), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT ); - if ( (rawButtons & RI_MOUSE_BUTTON_1_UP) ) - WIN_CheckWParamMouseButton( !(rawButtons & RI_MOUSE_BUTTON_1_UP), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT ); - if ( (rawButtons & RI_MOUSE_BUTTON_2_DOWN) ) - WIN_CheckWParamMouseButton( (rawButtons & RI_MOUSE_BUTTON_2_DOWN), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT ); - if ( (rawButtons & RI_MOUSE_BUTTON_2_UP) ) - WIN_CheckWParamMouseButton( !(rawButtons & RI_MOUSE_BUTTON_2_UP), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT ); - if ( (rawButtons & RI_MOUSE_BUTTON_3_DOWN) ) - WIN_CheckWParamMouseButton( (rawButtons & RI_MOUSE_BUTTON_3_DOWN), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE ); - if ( (rawButtons & RI_MOUSE_BUTTON_3_UP) ) - WIN_CheckWParamMouseButton( !(rawButtons & RI_MOUSE_BUTTON_3_UP), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE ); - if ( (rawButtons & RI_MOUSE_BUTTON_4_DOWN) ) - WIN_CheckWParamMouseButton( (rawButtons & RI_MOUSE_BUTTON_4_DOWN), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1 ); - if ( (rawButtons & RI_MOUSE_BUTTON_4_UP) ) - WIN_CheckWParamMouseButton( !(rawButtons & RI_MOUSE_BUTTON_4_UP), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1 ); - if ( (rawButtons & RI_MOUSE_BUTTON_5_DOWN) ) - WIN_CheckWParamMouseButton( (rawButtons & RI_MOUSE_BUTTON_5_DOWN), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2 ); - if ( (rawButtons & RI_MOUSE_BUTTON_5_UP) ) - WIN_CheckWParamMouseButton( !(rawButtons & RI_MOUSE_BUTTON_5_UP), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2 ); + if (rawButtons != data->mouse_button_flags) { + Uint32 mouseFlags = SDL_GetMouseState(NULL, NULL); + if ((rawButtons & RI_MOUSE_BUTTON_1_DOWN)) + WIN_CheckWParamMouseButton((rawButtons & RI_MOUSE_BUTTON_1_DOWN), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT, 0); + if ((rawButtons & RI_MOUSE_BUTTON_1_UP)) + WIN_CheckWParamMouseButton(!(rawButtons & RI_MOUSE_BUTTON_1_UP), (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT, 0); + if ((rawButtons & RI_MOUSE_BUTTON_2_DOWN)) + WIN_CheckWParamMouseButton((rawButtons & RI_MOUSE_BUTTON_2_DOWN), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT, 0); + if ((rawButtons & RI_MOUSE_BUTTON_2_UP)) + WIN_CheckWParamMouseButton(!(rawButtons & RI_MOUSE_BUTTON_2_UP), (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT, 0); + if ((rawButtons & RI_MOUSE_BUTTON_3_DOWN)) + WIN_CheckWParamMouseButton((rawButtons & RI_MOUSE_BUTTON_3_DOWN), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE, 0); + if ((rawButtons & RI_MOUSE_BUTTON_3_UP)) + WIN_CheckWParamMouseButton(!(rawButtons & RI_MOUSE_BUTTON_3_UP), (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE, 0); + if ((rawButtons & RI_MOUSE_BUTTON_4_DOWN)) + WIN_CheckWParamMouseButton((rawButtons & RI_MOUSE_BUTTON_4_DOWN), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1, 0); + if ((rawButtons & RI_MOUSE_BUTTON_4_UP)) + WIN_CheckWParamMouseButton(!(rawButtons & RI_MOUSE_BUTTON_4_UP), (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1, 0); + if ((rawButtons & RI_MOUSE_BUTTON_5_DOWN)) + WIN_CheckWParamMouseButton((rawButtons & RI_MOUSE_BUTTON_5_DOWN), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2, 0); + if ((rawButtons & RI_MOUSE_BUTTON_5_UP)) + WIN_CheckWParamMouseButton(!(rawButtons & RI_MOUSE_BUTTON_5_UP), (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2, 0); data->mouse_button_flags = rawButtons; } } void -WIN_CheckAsyncMouseRelease( SDL_WindowData *data ) +WIN_CheckAsyncMouseRelease(SDL_WindowData *data) { Uint32 mouseFlags; SHORT keyState; @@ -272,22 +271,32 @@ WIN_CheckAsyncMouseRelease( SDL_WindowData *data ) /* mouse buttons may have changed state here, we need to resync them, but we will get a WM_MOUSEMOVE right away which will fix things up if in non raw mode also */ - mouseFlags = SDL_GetMouseState( NULL, NULL ); - - keyState = GetAsyncKeyState( VK_LBUTTON ); - WIN_CheckWParamMouseButton( ( keyState & 0x8000 ), ( mouseFlags & SDL_BUTTON_LMASK ), data, SDL_BUTTON_LEFT ); - keyState = GetAsyncKeyState( VK_RBUTTON ); - WIN_CheckWParamMouseButton( ( keyState & 0x8000 ), ( mouseFlags & SDL_BUTTON_RMASK ), data, SDL_BUTTON_RIGHT ); - keyState = GetAsyncKeyState( VK_MBUTTON ); - WIN_CheckWParamMouseButton( ( keyState & 0x8000 ), ( mouseFlags & SDL_BUTTON_MMASK ), data, SDL_BUTTON_MIDDLE ); - keyState = GetAsyncKeyState( VK_XBUTTON1 ); - WIN_CheckWParamMouseButton( ( keyState & 0x8000 ), ( mouseFlags & SDL_BUTTON_X1MASK ), data, SDL_BUTTON_X1 ); - keyState = GetAsyncKeyState( VK_XBUTTON2 ); - WIN_CheckWParamMouseButton( ( keyState & 0x8000 ), ( mouseFlags & SDL_BUTTON_X2MASK ), data, SDL_BUTTON_X2 ); + mouseFlags = SDL_GetMouseState(NULL, NULL); + + keyState = GetAsyncKeyState(VK_LBUTTON); + if (!(keyState & 0x8000)) { + WIN_CheckWParamMouseButton(SDL_FALSE, (mouseFlags & SDL_BUTTON_LMASK), data, SDL_BUTTON_LEFT, 0); + } + keyState = GetAsyncKeyState(VK_RBUTTON); + if (!(keyState & 0x8000)) { + WIN_CheckWParamMouseButton(SDL_FALSE, (mouseFlags & SDL_BUTTON_RMASK), data, SDL_BUTTON_RIGHT, 0); + } + keyState = GetAsyncKeyState(VK_MBUTTON); + if (!(keyState & 0x8000)) { + WIN_CheckWParamMouseButton(SDL_FALSE, (mouseFlags & SDL_BUTTON_MMASK), data, SDL_BUTTON_MIDDLE, 0); + } + keyState = GetAsyncKeyState(VK_XBUTTON1); + if (!(keyState & 0x8000)) { + WIN_CheckWParamMouseButton(SDL_FALSE, (mouseFlags & SDL_BUTTON_X1MASK), data, SDL_BUTTON_X1, 0); + } + keyState = GetAsyncKeyState(VK_XBUTTON2); + if (!(keyState & 0x8000)) { + WIN_CheckWParamMouseButton(SDL_FALSE, (mouseFlags & SDL_BUTTON_X2MASK), data, SDL_BUTTON_X2, 0); + } data->mouse_button_flags = 0; } -SDL_FORCE_INLINE BOOL +BOOL WIN_ConvertUTF32toUTF8(UINT32 codepoint, char * text) { if (codepoint <= 0x7F) { @@ -314,6 +323,22 @@ WIN_ConvertUTF32toUTF8(UINT32 codepoint, char * text) return SDL_TRUE; } +static SDL_bool +ShouldGenerateWindowCloseOnAltF4(void) +{ + const char *hint; + + hint = SDL_GetHint(SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4); + if (hint) { + if (*hint == '0') { + return SDL_TRUE; + } else { + return SDL_FALSE; + } + } + return SDL_TRUE; +} + LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -368,27 +393,41 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_ACTIVATE: { + POINT cursorPos; BOOL minimized; minimized = HIWORD(wParam); if (!minimized && (LOWORD(wParam) != WA_INACTIVE)) { + data->focus_click_pending = (GetAsyncKeyState(VK_LBUTTON) != 0); + SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_SHOWN, 0, 0); if (SDL_GetKeyboardFocus() != data->window) { SDL_SetKeyboardFocus(data->window); } - WIN_UpdateClipCursor(data->window); + + GetCursorPos(&cursorPos); + ScreenToClient(hwnd, &cursorPos); + SDL_SendMouseMotion(data->window, 0, 0, cursorPos.x, cursorPos.y); + WIN_CheckAsyncMouseRelease(data); /* * FIXME: Update keyboard state */ WIN_CheckClipboardUpdate(data->videodata); + + SDL_ToggleModState(KMOD_CAPS, (GetKeyState(VK_CAPITAL) & 0x0001) != 0); + SDL_ToggleModState(KMOD_NUM, (GetKeyState(VK_NUMLOCK) & 0x0001) != 0); } else { + data->in_window_deactivation = SDL_TRUE; + if (SDL_GetKeyboardFocus() == data->window) { SDL_SetKeyboardFocus(NULL); } ClipCursor(NULL); + + data->in_window_deactivation = SDL_FALSE; } } returnCode = 0; @@ -398,7 +437,8 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { SDL_Mouse *mouse = SDL_GetMouse(); if (!mouse->relative_mode || mouse->relative_mode_warp) { - SDL_SendMouseMotion(data->window, 0, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); + SDL_MouseID mouseID = (((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) ? SDL_TOUCH_MOUSEID : 0); + SDL_SendMouseMotion(data->window, mouseID, 0, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); } } /* don't break here, fall through to check the wParam like the button presses */ @@ -407,13 +447,18 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_MBUTTONUP: case WM_XBUTTONUP: case WM_LBUTTONDOWN: + case WM_LBUTTONDBLCLK: case WM_RBUTTONDOWN: + case WM_RBUTTONDBLCLK: case WM_MBUTTONDOWN: + case WM_MBUTTONDBLCLK: case WM_XBUTTONDOWN: + case WM_XBUTTONDBLCLK: { SDL_Mouse *mouse = SDL_GetMouse(); if (!mouse->relative_mode || mouse->relative_mode_warp) { - WIN_CheckWParamMouseButtons(wParam, data); + SDL_MouseID mouseID = (((GetMessageExtraInfo() & MOUSEEVENTF_FROMTOUCH) == MOUSEEVENTF_FROMTOUCH) ? SDL_TOUCH_MOUSEID : 0); + WIN_CheckWParamMouseButtons(wParam, data, mouseID); } } break; @@ -424,33 +469,54 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) HRAWINPUT hRawInput = (HRAWINPUT)lParam; RAWINPUT inp; UINT size = sizeof(inp); + const SDL_bool isRelative = mouse->relative_mode || mouse->relative_mode_warp; + const SDL_bool isCapture = ((data->window->flags & SDL_WINDOW_MOUSE_CAPTURE) != 0); - if (!mouse->relative_mode || mouse->relative_mode_warp || mouse->focus != data->window) { - break; + if (!isRelative || mouse->focus != data->window) { + if (!isCapture) { + break; + } } GetRawInputData(hRawInput, RID_INPUT, &inp, &size, sizeof(RAWINPUTHEADER)); /* Mouse data */ if (inp.header.dwType == RIM_TYPEMOUSE) { - RAWMOUSE* mouse = &inp.data.mouse; - - if ((mouse->usFlags & 0x01) == MOUSE_MOVE_RELATIVE) { - SDL_SendMouseMotion(data->window, 0, 1, (int)mouse->lLastX, (int)mouse->lLastY); - } else { - /* synthesize relative moves from the abs position */ - static SDL_Point initialMousePoint; - if (initialMousePoint.x == 0 && initialMousePoint.y == 0) { - initialMousePoint.x = mouse->lLastX; - initialMousePoint.y = mouse->lLastY; - } + if (isRelative) { + RAWMOUSE* rawmouse = &inp.data.mouse; + + if ((rawmouse->usFlags & 0x01) == MOUSE_MOVE_RELATIVE) { + SDL_SendMouseMotion(data->window, 0, 1, (int)rawmouse->lLastX, (int)rawmouse->lLastY); + } else { + /* synthesize relative moves from the abs position */ + static SDL_Point initialMousePoint; + if (initialMousePoint.x == 0 && initialMousePoint.y == 0) { + initialMousePoint.x = rawmouse->lLastX; + initialMousePoint.y = rawmouse->lLastY; + } - SDL_SendMouseMotion(data->window, 0, 1, (int)(mouse->lLastX-initialMousePoint.x), (int)(mouse->lLastY-initialMousePoint.y) ); + SDL_SendMouseMotion(data->window, 0, 1, (int)(rawmouse->lLastX-initialMousePoint.x), (int)(rawmouse->lLastY-initialMousePoint.y) ); - initialMousePoint.x = mouse->lLastX; - initialMousePoint.y = mouse->lLastY; + initialMousePoint.x = rawmouse->lLastX; + initialMousePoint.y = rawmouse->lLastY; + } + WIN_CheckRawMouseButtons(rawmouse->usButtonFlags, data); + } else if (isCapture) { + /* we check for where Windows thinks the system cursor lives in this case, so we don't really lose mouse accel, etc. */ + POINT pt; + GetCursorPos(&pt); + if (WindowFromPoint(pt) != hwnd) { /* if in the window, WM_MOUSEMOVE, etc, will cover it. */ + ScreenToClient(hwnd, &pt); + SDL_SendMouseMotion(data->window, 0, 0, (int) pt.x, (int) pt.y); + SDL_SendMouseButton(data->window, 0, GetAsyncKeyState(VK_LBUTTON) & 0x8000 ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_LEFT); + SDL_SendMouseButton(data->window, 0, GetAsyncKeyState(VK_RBUTTON) & 0x8000 ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_RIGHT); + SDL_SendMouseButton(data->window, 0, GetAsyncKeyState(VK_MBUTTON) & 0x8000 ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_MIDDLE); + SDL_SendMouseButton(data->window, 0, GetAsyncKeyState(VK_XBUTTON1) & 0x8000 ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_X1); + SDL_SendMouseButton(data->window, 0, GetAsyncKeyState(VK_XBUTTON2) & 0x8000 ? SDL_PRESSED : SDL_RELEASED, SDL_BUTTON_X2); + } + } else { + SDL_assert(0 && "Shouldn't happen"); } - WIN_CheckRawMouseButtons( mouse->usButtonFlags, data ); } } break; @@ -462,12 +528,12 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam); if (s_AccumulatedMotion > 0) { while (s_AccumulatedMotion >= WHEEL_DELTA) { - SDL_SendMouseWheel(data->window, 0, 0, 1); + SDL_SendMouseWheel(data->window, 0, 0, 1, SDL_MOUSEWHEEL_NORMAL); s_AccumulatedMotion -= WHEEL_DELTA; } } else { while (s_AccumulatedMotion <= -WHEEL_DELTA) { - SDL_SendMouseWheel(data->window, 0, 0, -1); + SDL_SendMouseWheel(data->window, 0, 0, -1, SDL_MOUSEWHEEL_NORMAL); s_AccumulatedMotion += WHEEL_DELTA; } } @@ -481,12 +547,12 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) s_AccumulatedMotion += GET_WHEEL_DELTA_WPARAM(wParam); if (s_AccumulatedMotion > 0) { while (s_AccumulatedMotion >= WHEEL_DELTA) { - SDL_SendMouseWheel(data->window, 0, 1, 0); + SDL_SendMouseWheel(data->window, 0, 1, 0, SDL_MOUSEWHEEL_NORMAL); s_AccumulatedMotion -= WHEEL_DELTA; } } else { while (s_AccumulatedMotion <= -WHEEL_DELTA) { - SDL_SendMouseWheel(data->window, 0, -1, 0); + SDL_SendMouseWheel(data->window, 0, -1, 0, SDL_MOUSEWHEEL_NORMAL); s_AccumulatedMotion += WHEEL_DELTA; } } @@ -495,7 +561,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) #ifdef WM_MOUSELEAVE case WM_MOUSELEAVE: - if (SDL_GetMouseFocus() == data->window && !SDL_GetMouse()->relative_mode) { + if (SDL_GetMouseFocus() == data->window && !SDL_GetMouse()->relative_mode && !(data->window->flags & SDL_WINDOW_MOUSE_CAPTURE)) { if (!IsIconic(hwnd)) { POINT cursorPos; GetCursorPos(&cursorPos); @@ -511,43 +577,32 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_KEYDOWN: case WM_SYSKEYDOWN: { - SDL_Scancode code = WindowsScanCodeToSDLScanCode( lParam, wParam ); - if ( code != SDL_SCANCODE_UNKNOWN ) { - SDL_SendKeyboardKey(SDL_PRESSED, code ); - } - } - if (msg == WM_KEYDOWN) { - BYTE keyboardState[256]; - char text[5]; - UINT32 utf32 = 0; - - GetKeyboardState(keyboardState); - if (ToUnicode(wParam, (lParam >> 16) & 0xff, keyboardState, (LPWSTR)&utf32, 1, 0) > 0) { - WORD repetition; - for (repetition = lParam & 0xffff; repetition > 0; repetition--) { - WIN_ConvertUTF32toUTF8(utf32, text); - SDL_SendKeyboardText(text); + SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam); + const Uint8 *keyboardState = SDL_GetKeyboardState(NULL); + + /* Detect relevant keyboard shortcuts */ + if (keyboardState[SDL_SCANCODE_LALT] == SDL_PRESSED || keyboardState[SDL_SCANCODE_RALT] == SDL_PRESSED) { + /* ALT+F4: Close window */ + if (code == SDL_SCANCODE_F4 && ShouldGenerateWindowCloseOnAltF4()) { + SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_CLOSE, 0, 0); } } + + if (code != SDL_SCANCODE_UNKNOWN) { + SDL_SendKeyboardKey(SDL_PRESSED, code); + } } + returnCode = 0; break; case WM_SYSKEYUP: case WM_KEYUP: { - SDL_Scancode code = WindowsScanCodeToSDLScanCode( lParam, wParam ); + SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam); const Uint8 *keyboardState = SDL_GetKeyboardState(NULL); - /* Detect relevant keyboard shortcuts */ - if (keyboardState[SDL_SCANCODE_LALT] == SDL_PRESSED || keyboardState[SDL_SCANCODE_RALT] == SDL_PRESSED ) { - /* ALT+F4: Close window */ - if (code == SDL_SCANCODE_F4) { - SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_CLOSE, 0, 0); - } - } - - if ( code != SDL_SCANCODE_UNKNOWN ) { + if (code != SDL_SCANCODE_UNKNOWN) { if (code == SDL_SCANCODE_PRINTSCREEN && keyboardState[code] == SDL_RELEASED) { SDL_SendKeyboardKey(SDL_PRESSED, code); @@ -559,8 +614,18 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_UNICHAR: + if ( wParam == UNICODE_NOCHAR ) { + returnCode = 1; + break; + } + /* otherwise fall through to below */ case WM_CHAR: - /* Ignore WM_CHAR messages that come from TranslateMessage(), since we handle WM_KEY* messages directly */ + { + char text[5]; + if ( WIN_ConvertUTF32toUTF8( (UINT32)wParam, text ) ) { + SDL_SendKeyboardText( text ); + } + } returnCode = 0; break; @@ -568,6 +633,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_INPUTLANGCHANGE: { WIN_UpdateKeymap(); + SDL_SendKeymapChangedEvent(); } returnCode = 1; break; @@ -576,32 +642,14 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_NCLBUTTONDOWN: { data->in_title_click = SDL_TRUE; - WIN_UpdateClipCursor(data->window); } break; - case WM_NCMOUSELEAVE: + case WM_CAPTURECHANGED: { data->in_title_click = SDL_FALSE; - WIN_UpdateClipCursor(data->window); - } - break; - case WM_ENTERSIZEMOVE: - case WM_ENTERMENULOOP: - { - data->in_modal_loop = SDL_TRUE; - WIN_UpdateClipCursor(data->window); - } - break; - - case WM_EXITSIZEMOVE: - case WM_EXITMENULOOP: - { - data->in_modal_loop = SDL_FALSE; - WIN_UpdateClipCursor(data->window); - - /* The mouse may have been released during the modal loop */ + /* The mouse may have been released during a modal loop */ WIN_CheckAsyncMouseRelease(data); } break; @@ -657,7 +705,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) style = GetWindowLong(hwnd, GWL_STYLE); /* DJM - according to the docs for GetMenu(), the return value is undefined if hwnd is a child window. - Aparently it's too difficult for MS to check + Apparently it's too difficult for MS to check inside their function, so I have to do it here. */ menu = (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != NULL); @@ -694,6 +742,10 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) RECT rect; int x, y; int w, h; + + if (data->initializing || data->in_border_change) { + break; + } if (!GetClientRect(hwnd, &rect) || IsRectEmpty(&rect)) { break; @@ -716,8 +768,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) case WM_SIZE: { - switch (wParam) - { + switch (wParam) { case SIZE_MAXIMIZED: SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); @@ -742,6 +793,9 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) if (hittest == HTCLIENT) { SetCursor(SDL_cursor); returnCode = TRUE; + } else if (!g_WindowFrameUsableWhileCursorHidden && !SDL_cursor) { + SetCursor(NULL); + returnCode = TRUE; } } break; @@ -765,9 +819,13 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } return (1); -#if defined(SC_SCREENSAVE) || defined(SC_MONITORPOWER) case WM_SYSCOMMAND: { + if ((wParam & 0xFFF0) == SC_KEYMENU) { + return (0); + } + +#if defined(SC_SCREENSAVE) || defined(SC_MONITORPOWER) /* Don't start the screensaver or blank the monitor in fullscreen apps */ if ((wParam & 0xFFF0) == SC_SCREENSAVE || (wParam & 0xFFF0) == SC_MONITORPOWER) { @@ -775,9 +833,9 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) return (0); } } +#endif /* System has screensaver support */ } break; -#endif /* System has screensaver support */ case WM_CLOSE: { @@ -812,10 +870,8 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) PTOUCHINPUT input = &inputs[i]; const SDL_TouchID touchId = (SDL_TouchID)((size_t)input->hSource); - if (!SDL_GetTouch(touchId)) { - if (SDL_AddTouch(touchId, "") < 0) { - continue; - } + if (SDL_AddTouch(touchId, "") < 0) { + continue; } /* Get the normalized coordinates for the window */ @@ -861,6 +917,33 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) return 0; } break; + + case WM_NCHITTEST: + { + SDL_Window *window = data->window; + if (window->hit_test) { + POINT winpoint = { (int) LOWORD(lParam), (int) HIWORD(lParam) }; + if (ScreenToClient(hwnd, &winpoint)) { + const SDL_Point point = { (int) winpoint.x, (int) winpoint.y }; + const SDL_HitTestResult rc = window->hit_test(window, &point, window->hit_test_data); + switch (rc) { + case SDL_HITTEST_DRAGGABLE: return HTCAPTION; + case SDL_HITTEST_RESIZE_TOPLEFT: return HTTOPLEFT; + case SDL_HITTEST_RESIZE_TOP: return HTTOP; + case SDL_HITTEST_RESIZE_TOPRIGHT: return HTTOPRIGHT; + case SDL_HITTEST_RESIZE_RIGHT: return HTRIGHT; + case SDL_HITTEST_RESIZE_BOTTOMRIGHT: return HTBOTTOMRIGHT; + case SDL_HITTEST_RESIZE_BOTTOM: return HTBOTTOM; + case SDL_HITTEST_RESIZE_BOTTOMLEFT: return HTBOTTOMLEFT; + case SDL_HITTEST_RESIZE_LEFT: return HTLEFT; + case SDL_HITTEST_NORMAL: return HTCLIENT; + } + } + /* If we didn't return, this will call DefWindowProc below. */ + } + } + break; + } /* If there's a window proc, assume it's going to handle messages */ @@ -873,6 +956,16 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) } } +/* A message hook called before TranslateMessage() */ +static SDL_WindowsMessageHook g_WindowsMessageHook = NULL; +static void *g_WindowsMessageHookData = NULL; + +void SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata) +{ + g_WindowsMessageHook = callback; + g_WindowsMessageHookData = userdata; +} + void WIN_PumpEvents(_THIS) { @@ -880,14 +973,20 @@ WIN_PumpEvents(_THIS) MSG msg; DWORD start_ticks = GetTickCount(); - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - /* Always translate the message in case it's a non-SDL window (e.g. with Qt integration) */ - TranslateMessage(&msg); - DispatchMessage( &msg ); + if (g_WindowsEnableMessageLoop) { + while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { + if (g_WindowsMessageHook) { + g_WindowsMessageHook(g_WindowsMessageHookData, msg.hwnd, msg.message, msg.wParam, msg.lParam); + } - /* Make sure we don't busy loop here forever if there are lots of events coming in */ - if (SDL_TICKS_PASSED(msg.time, start_ticks)) { - break; + /* Always translate the message in case it's a non-SDL window (e.g. with Qt integration) */ + TranslateMessage(&msg); + DispatchMessage(&msg); + + /* Make sure we don't busy loop here forever if there are lots of events coming in */ + if (SDL_TICKS_PASSED(msg.time, start_ticks)) { + break; + } } } diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsevents.h b/Engine/lib/sdl/src/video/windows/SDL_windowsevents.h index b9944ee759..dcd3118a48 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsevents.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsevents.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.c b/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.c index 4292db5a61..7bb07ed2ec 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -42,6 +42,9 @@ int WIN_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, voi /* Find out the format of the screen */ size = sizeof(BITMAPINFOHEADER) + 256 * sizeof (RGBQUAD); info = (LPBITMAPINFO)SDL_stack_alloc(Uint8, size); + if (!info) { + return SDL_OutOfMemory(); + } SDL_memset(info, 0, size); info->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.h b/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.h index daa42b83e0..0c825f9da0 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsframebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.c b/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.c index 0f3c9fcbfb..d3e16c8bfc 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -102,6 +102,10 @@ WIN_InitKeyboard(_THIS) SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu"); SDL_SetScancodeName(SDL_SCANCODE_LGUI, "Left Windows"); SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Windows"); + + /* Are system caps/num/scroll lock active? Set our state to match. */ + SDL_ToggleModState(KMOD_CAPS, (GetKeyState(VK_CAPITAL) & 0x0001) != 0); + SDL_ToggleModState(KMOD_NUM, (GetKeyState(VK_NUMLOCK) & 0x0001) != 0); } void @@ -122,10 +126,9 @@ WIN_UpdateKeymap() } /* If this key is one of the non-mappable keys, ignore it */ - /* Don't allow the number keys right above the qwerty row to translate or the top left key (grave/backquote) */ /* Not mapping numbers fixes the French layout, giving numeric keycodes for the number keys, which is the expected behavior */ if ((keymap[scancode] & SDLK_SCANCODE_MASK) || - scancode == SDL_SCANCODE_GRAVE || + /* scancode == SDL_SCANCODE_GRAVE || */ /* Uncomment this line to re-enable the behavior of not mapping the "`"(grave) key to the users actual keyboard layout */ (scancode >= SDL_SCANCODE_1 && scancode <= SDL_SCANCODE_0) ) { continue; } @@ -187,6 +190,7 @@ void WIN_SetTextInputRect(_THIS, SDL_Rect *rect) { SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + HIMC himc = 0; if (!rect) { SDL_InvalidParamError("rect"); @@ -194,6 +198,17 @@ WIN_SetTextInputRect(_THIS, SDL_Rect *rect) } videodata->ime_rect = *rect; + + himc = ImmGetContext(videodata->ime_hwnd_current); + if (himc) + { + COMPOSITIONFORM cf; + cf.ptCurrentPos.x = videodata->ime_rect.x; + cf.ptCurrentPos.y = videodata->ime_rect.y; + cf.dwStyle = CFS_FORCE_POSITION; + ImmSetCompositionWindow(himc, &cf); + ImmReleaseContext(videodata->ime_hwnd_current, himc); + } } #ifdef SDL_DISABLE_WINDOWS_IME @@ -211,7 +226,12 @@ void IME_Present(SDL_VideoData *videodata) #else -#ifdef __GNUC__ +#ifdef _SDL_msctf_h +#define USE_INIT_GUID +#elif defined(__GNUC__) +#define USE_INIT_GUID +#endif +#ifdef USE_INIT_GUID #undef DEFINE_GUID #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) static const GUID n = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}} DEFINE_GUID(IID_ITfInputProcessorProfileActivationSink, 0x71C6E74E,0x0F28,0x11D8,0xA8,0x2A,0x00,0x06,0x5B,0x84,0x43,0x5C); @@ -386,7 +406,8 @@ IME_GetReadingString(SDL_VideoData *videodata, HWND hwnd) INT err = 0; BOOL vertical = FALSE; UINT maxuilen = 0; - static OSVERSIONINFOA osversion = {0}; + static OSVERSIONINFOA osversion; + if (videodata->ime_uiless) return; @@ -721,7 +742,7 @@ IME_SendEditingEvent(SDL_VideoData *videodata) SDL_wcslcpy(buffer, videodata->ime_composition, size); } s = WIN_StringToUTF8(buffer); - SDL_SendEditingText(s, videodata->ime_cursor + SDL_wcslen(videodata->ime_readingstring), 0); + SDL_SendEditingText(s, videodata->ime_cursor + (int)SDL_wcslen(videodata->ime_readingstring), 0); SDL_free(s); } @@ -749,18 +770,16 @@ IME_GetCandidateList(HIMC himc, SDL_VideoData *videodata) if (cand_list) { size = ImmGetCandidateListW(himc, 0, cand_list, size); if (size) { - int i = 0; - int j = 0; - int page_start = 0; + UINT i, j; + UINT page_start = 0; videodata->ime_candsel = cand_list->dwSelection; videodata->ime_candcount = cand_list->dwCount; if (LANG() == LANG_CHS && IME_GetId(videodata, 0)) { const UINT maxcandchar = 18; - UINT i = 0; size_t cchars = 0; - for (; i < videodata->ime_candcount; ++i) { + for (i = 0; i < videodata->ime_candcount; ++i) { size_t len = SDL_wcslen((LPWSTR)((DWORD_PTR)cand_list + cand_list->dwOffset[i])) + 1; if (len + cchars > maxcandchar) { if (i > cand_list->dwSelection) @@ -774,8 +793,7 @@ IME_GetCandidateList(HIMC himc, SDL_VideoData *videodata) } } videodata->ime_candpgsize = i - page_start; - } - else { + } else { videodata->ime_candpgsize = SDL_min(cand_list->dwPageSize, MAX_CANDLIST); page_start = (cand_list->dwSelection / videodata->ime_candpgsize) * videodata->ime_candpgsize; } @@ -1389,7 +1407,7 @@ IME_RenderCandidateList(SDL_VideoData *videodata, HDC hdc) if (!*s) break; - GetTextExtentPoint32W(hdc, s, SDL_wcslen(s), &candsizes[i]); + GetTextExtentPoint32W(hdc, s, (int)SDL_wcslen(s), &candsizes[i]); maxcandsize.cx = SDL_max(maxcandsize.cx, candsizes[i].cx); maxcandsize.cy = SDL_max(maxcandsize.cy, candsizes[i].cy); @@ -1481,7 +1499,7 @@ IME_RenderCandidateList(SDL_VideoData *videodata, HDC hdc) } DrawRect(hdc, left, top, right, bottom, candborder); - ExtTextOutW(hdc, left + candborder + candpadding, top + candborder + candpadding, 0, NULL, s, SDL_wcslen(s), NULL); + ExtTextOutW(hdc, left + candborder + candpadding, top + candborder + candpadding, 0, NULL, s, (int)SDL_wcslen(s), NULL); } StopDrawToBitmap(hdc, &hbm); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.h b/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.h index 3eb0cbf6ba..d330d38712 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowskeyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.c b/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.c index 6cffc8adf1..b39df32fc6 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -297,9 +297,12 @@ static WIN_DialogData *CreateDialogData(int w, int h, const char *caption) /* Font size - convert to logical font size for dialog parameter. */ { - HDC ScreenDC = GetDC(0); - WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / GetDeviceCaps(ScreenDC, LOGPIXELSY)); - ReleaseDC(0, ScreenDC); + HDC ScreenDC = GetDC(NULL); + int LogicalPixelsY = GetDeviceCaps(ScreenDC, LOGPIXELSY); + if (!LogicalPixelsY) /* This can happen if the application runs out of GDI handles */ + LogicalPixelsY = 72; + WordToPass = (WORD)(-72 * NCM.lfMessageFont.lfHeight / LogicalPixelsY); + ReleaseDC(NULL, ScreenDC); } if (!AddDialogData(dialog, &WordToPass, 2)) { diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.h b/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.h index ea709a4aff..e9c692546e 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmessagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.c b/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.c index 1687e277ad..91ed67f871 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,9 +29,50 @@ #define CDS_FULLSCREEN 0 #endif +typedef struct _WIN_GetMonitorDPIData { + SDL_VideoData *vid_data; + SDL_DisplayMode *mode; + SDL_DisplayModeData *mode_data; +} WIN_GetMonitorDPIData; + +static BOOL CALLBACK +WIN_GetMonitorDPI(HMONITOR hMonitor, + HDC hdcMonitor, + LPRECT lprcMonitor, + LPARAM dwData) +{ + WIN_GetMonitorDPIData *data = (WIN_GetMonitorDPIData*) dwData; + UINT hdpi, vdpi; + + if (data->vid_data->GetDpiForMonitor(hMonitor, MDT_EFFECTIVE_DPI, &hdpi, &vdpi) == S_OK && + hdpi > 0 && + vdpi > 0) { + float hsize, vsize; + + data->mode_data->HorzDPI = (float)hdpi; + data->mode_data->VertDPI = (float)vdpi; + + // Figure out the monitor size and compute the diagonal DPI. + hsize = data->mode->w / data->mode_data->HorzDPI; + vsize = data->mode->h / data->mode_data->VertDPI; + + data->mode_data->DiagDPI = SDL_ComputeDiagonalDPI( data->mode->w, + data->mode->h, + hsize, + vsize ); + + // We can only handle one DPI per display mode so end the enumeration. + return FALSE; + } + + // We didn't get DPI information so keep going. + return TRUE; +} + static SDL_bool -WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) +WIN_GetDisplayMode(_THIS, LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) { + SDL_VideoData *vid_data = (SDL_VideoData *) _this->driverdata; SDL_DisplayModeData *data; DEVMODE devmode; HDC hdc; @@ -50,8 +91,11 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) data->DeviceMode.dmFields = (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS); - data->ScaleX = 1.0f; - data->ScaleY = 1.0f; + data->ScaleX = 1.0f; + data->ScaleY = 1.0f; + data->DiagDPI = 0.0f; + data->HorzDPI = 0.0f; + data->VertDPI = 0.0f; /* Fill in the mode information */ mode->format = SDL_PIXELFORMAT_UNKNOWN; @@ -65,14 +109,43 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) char bmi_data[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; LPBITMAPINFO bmi; HBITMAP hbm; - int logical_width = GetDeviceCaps( hdc, HORZRES ); - int logical_height = GetDeviceCaps( hdc, VERTRES ); - - data->ScaleX = (float)logical_width / devmode.dmPelsWidth; - data->ScaleY = (float)logical_height / devmode.dmPelsHeight; - mode->w = logical_width; - mode->h = logical_height; - + int logical_width = GetDeviceCaps( hdc, HORZRES ); + int logical_height = GetDeviceCaps( hdc, VERTRES ); + + data->ScaleX = (float)logical_width / devmode.dmPelsWidth; + data->ScaleY = (float)logical_height / devmode.dmPelsHeight; + mode->w = logical_width; + mode->h = logical_height; + + // WIN_GetMonitorDPI needs mode->w and mode->h + // so only call after those are set. + if (vid_data->GetDpiForMonitor) { + WIN_GetMonitorDPIData dpi_data; + RECT monitor_rect; + + dpi_data.vid_data = vid_data; + dpi_data.mode = mode; + dpi_data.mode_data = data; + monitor_rect.left = devmode.dmPosition.x; + monitor_rect.top = devmode.dmPosition.y; + monitor_rect.right = monitor_rect.left + 1; + monitor_rect.bottom = monitor_rect.top + 1; + EnumDisplayMonitors(NULL, &monitor_rect, WIN_GetMonitorDPI, (LPARAM)&dpi_data); + } else { + // We don't have the Windows 8.1 routine so just + // get system DPI. + data->HorzDPI = (float)GetDeviceCaps( hdc, LOGPIXELSX ); + data->VertDPI = (float)GetDeviceCaps( hdc, LOGPIXELSY ); + if (data->HorzDPI == data->VertDPI) { + data->DiagDPI = data->HorzDPI; + } else { + data->DiagDPI = SDL_ComputeDiagonalDPI( mode->w, + mode->h, + (float)GetDeviceCaps( hdc, HORZSIZE ) / 25.4f, + (float)GetDeviceCaps( hdc, VERTSIZE ) / 25.4f ); + } + } + SDL_zero(bmi_data); bmi = (LPBITMAPINFO) bmi_data; bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); @@ -102,7 +175,7 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) } else if (bmi->bmiHeader.biBitCount == 4) { mode->format = SDL_PIXELFORMAT_INDEX4LSB; } - } else { + } else { /* FIXME: Can we tell what this will be? */ if ((devmode.dmFields & DM_BITSPERPEL) == DM_BITSPERPEL) { switch (devmode.dmBitsPerPel) { @@ -131,7 +204,7 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) } static SDL_bool -WIN_AddDisplay(LPTSTR DeviceName) +WIN_AddDisplay(_THIS, LPTSTR DeviceName) { SDL_VideoDisplay display; SDL_DisplayData *displaydata; @@ -141,7 +214,7 @@ WIN_AddDisplay(LPTSTR DeviceName) #ifdef DEBUG_MODES printf("Display: %s\n", WIN_StringToUTF8(DeviceName)); #endif - if (!WIN_GetDisplayMode(DeviceName, ENUM_CURRENT_SETTINGS, &mode)) { + if (!WIN_GetDisplayMode(_this, DeviceName, ENUM_CURRENT_SETTINGS, &mode)) { return SDL_FALSE; } @@ -215,10 +288,10 @@ WIN_InitModes(_THIS) continue; } } - count += WIN_AddDisplay(device.DeviceName); + count += WIN_AddDisplay(_this, device.DeviceName); } if (count == 0) { - WIN_AddDisplay(DeviceName); + WIN_AddDisplay(_this, DeviceName); } } } @@ -241,6 +314,24 @@ WIN_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect) return 0; } +int +WIN_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi) +{ + SDL_DisplayModeData *data = (SDL_DisplayModeData *) display->current_mode.driverdata; + + if (ddpi) { + *ddpi = data->DiagDPI; + } + if (hdpi) { + *hdpi = data->HorzDPI; + } + if (vdpi) { + *vdpi = data->VertDPI; + } + + return data->DiagDPI != 0.0f ? 0 : -1; +} + void WIN_GetDisplayModes(_THIS, SDL_VideoDisplay * display) { @@ -249,7 +340,7 @@ WIN_GetDisplayModes(_THIS, SDL_VideoDisplay * display) SDL_DisplayMode mode; for (i = 0;; ++i) { - if (!WIN_GetDisplayMode(data->DeviceName, i, &mode)) { + if (!WIN_GetDisplayMode(_this, data->DeviceName, i, &mode)) { break; } if (SDL_ISPIXELFORMAT_INDEXED(mode.format)) { @@ -274,9 +365,11 @@ WIN_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode) SDL_DisplayModeData *data = (SDL_DisplayModeData *) mode->driverdata; LONG status; - status = - ChangeDisplaySettingsEx(displaydata->DeviceName, &data->DeviceMode, - NULL, CDS_FULLSCREEN, NULL); + if (mode->driverdata == display->desktop_mode.driverdata) { + status = ChangeDisplaySettingsEx(displaydata->DeviceName, NULL, NULL, 0, NULL); + } else { + status = ChangeDisplaySettingsEx(displaydata->DeviceName, &data->DeviceMode, NULL, CDS_FULLSCREEN, NULL); + } if (status != DISP_CHANGE_SUCCESSFUL) { const char *reason = "Unknown reason"; switch (status) { diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.h b/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.h index d16a5e7a82..e725848b22 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmodes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,12 +31,16 @@ typedef struct typedef struct { DEVMODE DeviceMode; - float ScaleX; - float ScaleY; + float ScaleX; + float ScaleY; + float DiagDPI; + float HorzDPI; + float VertDPI; } SDL_DisplayModeData; extern int WIN_InitModes(_THIS); extern int WIN_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect); +extern int WIN_GetDisplayDPI(_THIS, SDL_VideoDisplay * display, float * ddpi, float * hdpi, float * vdpi); extern void WIN_GetDisplayModes(_THIS, SDL_VideoDisplay * display); extern int WIN_SetDisplayMode(_THIS, SDL_VideoDisplay * display, SDL_DisplayMode * mode); extern void WIN_QuitModes(_THIS); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.c b/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.c index b49249db61..72d7892d47 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,6 +30,44 @@ HCURSOR SDL_cursor = NULL; +static int rawInputEnableCount = 0; + +static int +ToggleRawInput(SDL_bool enabled) +{ + RAWINPUTDEVICE rawMouse = { 0x01, 0x02, 0, NULL }; /* Mouse: UsagePage = 1, Usage = 2 */ + + if (enabled) { + rawInputEnableCount++; + if (rawInputEnableCount > 1) { + return 0; /* already done. */ + } + } else { + if (rawInputEnableCount == 0) { + return 0; /* already done. */ + } + rawInputEnableCount--; + if (rawInputEnableCount > 0) { + return 0; /* not time to disable yet */ + } + } + + if (!enabled) { + rawMouse.dwFlags |= RIDEV_REMOVE; + } + + /* (Un)register raw input for mice */ + if (RegisterRawInputDevices(&rawMouse, 1, sizeof(RAWINPUTDEVICE)) == FALSE) { + + /* Only return an error when registering. If we unregister and fail, + then it's probably that we unregistered twice. That's OK. */ + if (enabled) { + return SDL_Unsupported(); + } + } + return 0; +} + static SDL_Cursor * WIN_CreateDefaultCursor() @@ -188,7 +226,7 @@ WIN_WarpMouse(SDL_Window * window, int x, int y) POINT pt; /* Don't warp the mouse while we're doing a modal interaction */ - if (data->in_title_click || data->in_modal_loop) { + if (data->in_title_click || data->focus_click_pending) { return; } @@ -199,24 +237,55 @@ WIN_WarpMouse(SDL_Window * window, int x, int y) } static int -WIN_SetRelativeMouseMode(SDL_bool enabled) +WIN_WarpMouseGlobal(int x, int y) { - RAWINPUTDEVICE rawMouse = { 0x01, 0x02, 0, NULL }; /* Mouse: UsagePage = 1, Usage = 2 */ + POINT pt; - if (!enabled) { - rawMouse.dwFlags |= RIDEV_REMOVE; - } + pt.x = x; + pt.y = y; + SetCursorPos(pt.x, pt.y); + return 0; +} - /* (Un)register raw input for mice */ - if (RegisterRawInputDevices(&rawMouse, 1, sizeof(RAWINPUTDEVICE)) == FALSE) { +static int +WIN_SetRelativeMouseMode(SDL_bool enabled) +{ + return ToggleRawInput(enabled); +} - /* Only return an error when registering. If we unregister and fail, - then it's probably that we unregistered twice. That's OK. */ - if (enabled) { - return SDL_Unsupported(); +static int +WIN_CaptureMouse(SDL_Window *window) +{ + if (!window) { + SDL_Window *focusWin = SDL_GetKeyboardFocus(); + if (focusWin) { + WIN_OnWindowEnter(SDL_GetVideoDevice(), focusWin); /* make sure WM_MOUSELEAVE messages are (re)enabled. */ } } - return 0; + + /* While we were thinking of SetCapture() when designing this API in SDL, + we didn't count on the fact that SetCapture() only tracks while the + left mouse button is held down! Instead, we listen for raw mouse input + and manually query the mouse when it leaves the window. :/ */ + return ToggleRawInput(window != NULL); +} + +static Uint32 +WIN_GetGlobalMouseState(int *x, int *y) +{ + Uint32 retval = 0; + POINT pt = { 0, 0 }; + GetCursorPos(&pt); + *x = (int) pt.x; + *y = (int) pt.y; + + retval |= GetAsyncKeyState(VK_LBUTTON) & 0x8000 ? SDL_BUTTON_LMASK : 0; + retval |= GetAsyncKeyState(VK_RBUTTON) & 0x8000 ? SDL_BUTTON_RMASK : 0; + retval |= GetAsyncKeyState(VK_MBUTTON) & 0x8000 ? SDL_BUTTON_MMASK : 0; + retval |= GetAsyncKeyState(VK_XBUTTON1) & 0x8000 ? SDL_BUTTON_X1MASK : 0; + retval |= GetAsyncKeyState(VK_XBUTTON2) & 0x8000 ? SDL_BUTTON_X2MASK : 0; + + return retval; } void @@ -229,7 +298,10 @@ WIN_InitMouse(_THIS) mouse->ShowCursor = WIN_ShowCursor; mouse->FreeCursor = WIN_FreeCursor; mouse->WarpMouse = WIN_WarpMouse; + mouse->WarpMouseGlobal = WIN_WarpMouseGlobal; mouse->SetRelativeMouseMode = WIN_SetRelativeMouseMode; + mouse->CaptureMouse = WIN_CaptureMouse; + mouse->GetGlobalMouseState = WIN_GetGlobalMouseState; SDL_SetDefaultCursor(WIN_CreateDefaultCursor()); @@ -245,6 +317,11 @@ WIN_QuitMouse(_THIS) mouse->def_cursor = NULL; mouse->cur_cursor = NULL; } + + if (rawInputEnableCount) { /* force RAWINPUT off here. */ + rawInputEnableCount = 1; + ToggleRawInput(SDL_FALSE); + } } #endif /* SDL_VIDEO_DRIVER_WINDOWS */ diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.h b/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.h index 665cdc57bf..60672e6bb9 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsmouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.c b/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.c index 80ba3b45dd..d30d838fdc 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -74,6 +74,13 @@ #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 #endif +#ifndef WGL_ARB_context_flush_control +#define WGL_ARB_context_flush_control +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0x0000 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#endif + typedef HGLRC(APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, @@ -334,6 +341,10 @@ WIN_GL_InitExtensions(_THIS) HGLRC hglrc; PIXELFORMATDESCRIPTOR pfd; + if (!_this->gl_data) { + return; + } + hwnd = CreateWindow(SDL_Appname, SDL_Appname, (WS_POPUP | WS_DISABLED), 0, 0, 10, 10, NULL, NULL, SDL_Instance, NULL); @@ -401,6 +412,11 @@ WIN_GL_InitExtensions(_THIS) _this->gl_data->HAS_WGL_EXT_create_context_es2_profile = SDL_TRUE; } + /* Check for GLX_ARB_context_flush_control */ + if (HasExtension("WGL_ARB_context_flush_control", extensions)) { + _this->gl_data->HAS_WGL_ARB_context_flush_control = SDL_TRUE; + } + _this->gl_data->wglMakeCurrent(hdc, NULL); _this->gl_data->wglDeleteContext(hglrc); ReleaseDC(hwnd, hdc); @@ -644,27 +660,35 @@ WIN_GL_CreateContext(_THIS, SDL_Window * window) SDL_SetError("GL 3.x is not supported"); context = temp_context; } else { - /* max 8 attributes plus terminator */ - int attribs[9] = { + /* max 10 attributes plus terminator */ + int attribs[11] = { WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version, WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version, 0 }; - int iattr = 4; - - /* SDL profile bits match WGL profile bits */ - if( _this->gl_config.profile_mask != 0 ) { - attribs[iattr++] = WGL_CONTEXT_PROFILE_MASK_ARB; - attribs[iattr++] = _this->gl_config.profile_mask; - } - - /* SDL flags match WGL flags */ - if( _this->gl_config.flags != 0 ) { - attribs[iattr++] = WGL_CONTEXT_FLAGS_ARB; - attribs[iattr++] = _this->gl_config.flags; - } - - attribs[iattr++] = 0; + int iattr = 4; + + /* SDL profile bits match WGL profile bits */ + if (_this->gl_config.profile_mask != 0) { + attribs[iattr++] = WGL_CONTEXT_PROFILE_MASK_ARB; + attribs[iattr++] = _this->gl_config.profile_mask; + } + + /* SDL flags match WGL flags */ + if (_this->gl_config.flags != 0) { + attribs[iattr++] = WGL_CONTEXT_FLAGS_ARB; + attribs[iattr++] = _this->gl_config.flags; + } + + /* only set if wgl extension is available */ + if (_this->gl_data->HAS_WGL_ARB_context_flush_control) { + attribs[iattr++] = WGL_CONTEXT_RELEASE_BEHAVIOR_ARB; + attribs[iattr++] = _this->gl_config.release_behavior ? + WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB : + WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB; + } + + attribs[iattr++] = 0; /* Create the GL 3.x context */ context = wglCreateContextAttribsARB(hdc, share_context, attribs); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.h b/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.h index b96e0ac1e4..7b95cc8d92 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsopengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,6 +30,7 @@ struct SDL_GLDriverData SDL_bool HAS_WGL_ARB_pixel_format; SDL_bool HAS_WGL_EXT_swap_control_tear; SDL_bool HAS_WGL_EXT_create_context_es2_profile; + SDL_bool HAS_WGL_ARB_context_flush_control; void *(WINAPI * wglGetProcAddress) (const char *proc); HGLRC(WINAPI * wglCreateContext) (HDC hdc); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.c b/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.c index a921ba8aa8..f66cc088a5 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -64,6 +64,7 @@ WIN_GLES_CreateContext(_THIS, SDL_Window * window) SDL_GLContext context; SDL_WindowData *data = (SDL_WindowData *)window->driverdata; +#if SDL_VIDEO_OPENGL_WGL if (_this->gl_config.profile_mask != SDL_GL_CONTEXT_PROFILE_ES) { /* Switch to WGL based functions */ WIN_GLES_UnloadLibrary(_this); @@ -83,6 +84,7 @@ WIN_GLES_CreateContext(_THIS, SDL_Window * window) return WIN_GL_CreateContext(_this, window); } +#endif context = SDL_EGL_CreateContext(_this, data->egl_surface); return context; @@ -109,6 +111,7 @@ WIN_GLES_SetupWindow(_THIS, SDL_Window * window) if (_this->egl_data == NULL) { if (SDL_EGL_LoadLibrary(_this, NULL, EGL_DEFAULT_DISPLAY) < 0) { + SDL_EGL_UnloadLibrary(_this); return -1; } } diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.h b/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.h index 8e232177e9..dbdf5f6a17 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsshape.c b/Engine/lib/sdl/src/video/windows/SDL_windowsshape.c index 9409e2b4d4..0a50985a25 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsshape.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsshape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsshape.h b/Engine/lib/sdl/src/video/windows/SDL_windowsshape.h index 9405a501ef..ddd8f49ba8 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsshape.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsshape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.c b/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.c index 503653bd6f..37199805b8 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,6 +24,7 @@ #include "SDL_main.h" #include "SDL_video.h" +#include "SDL_hints.h" #include "SDL_mouse.h" #include "SDL_system.h" #include "../SDL_sysvideo.h" @@ -37,6 +38,28 @@ static int WIN_VideoInit(_THIS); static void WIN_VideoQuit(_THIS); +/* Hints */ +SDL_bool g_WindowsEnableMessageLoop = SDL_TRUE; +SDL_bool g_WindowFrameUsableWhileCursorHidden = SDL_TRUE; + +static void UpdateWindowsEnableMessageLoop(void *userdata, const char *name, const char *oldValue, const char *newValue) +{ + if (newValue && *newValue == '0') { + g_WindowsEnableMessageLoop = SDL_FALSE; + } else { + g_WindowsEnableMessageLoop = SDL_TRUE; + } +} + +static void UpdateWindowFrameUsableWhileCursorHidden(void *userdata, const char *name, const char *oldValue, const char *newValue) +{ + if (newValue && *newValue == '0') { + g_WindowFrameUsableWhileCursorHidden = SDL_FALSE; + } else { + g_WindowFrameUsableWhileCursorHidden = SDL_TRUE; + } +} + /* Windows driver bootstrap functions */ @@ -55,6 +78,9 @@ WIN_DeleteDevice(SDL_VideoDevice * device) if (data->userDLL) { SDL_UnloadObject(data->userDLL); } + if (data->shcoreDLL) { + SDL_UnloadObject(data->shcoreDLL); + } SDL_free(device->driverdata); SDL_free(device); @@ -84,15 +110,21 @@ WIN_CreateDevice(int devindex) data->userDLL = SDL_LoadObject("USER32.DLL"); if (data->userDLL) { - data->CloseTouchInputHandle = (BOOL (WINAPI *)( HTOUCHINPUT )) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle"); - data->GetTouchInputInfo = (BOOL (WINAPI *)( HTOUCHINPUT, UINT, PTOUCHINPUT, int )) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo"); - data->RegisterTouchWindow = (BOOL (WINAPI *)( HWND, ULONG )) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow"); + data->CloseTouchInputHandle = (BOOL (WINAPI *)(HTOUCHINPUT)) SDL_LoadFunction(data->userDLL, "CloseTouchInputHandle"); + data->GetTouchInputInfo = (BOOL (WINAPI *)(HTOUCHINPUT, UINT, PTOUCHINPUT, int)) SDL_LoadFunction(data->userDLL, "GetTouchInputInfo"); + data->RegisterTouchWindow = (BOOL (WINAPI *)(HWND, ULONG)) SDL_LoadFunction(data->userDLL, "RegisterTouchWindow"); + } + + data->shcoreDLL = SDL_LoadObject("SHCORE.DLL"); + if (data->shcoreDLL) { + data->GetDpiForMonitor = (HRESULT (WINAPI *)(HMONITOR, MONITOR_DPI_TYPE, UINT *, UINT *)) SDL_LoadFunction(data->shcoreDLL, "GetDpiForMonitor"); } /* Set the function pointers */ device->VideoInit = WIN_VideoInit; device->VideoQuit = WIN_VideoQuit; device->GetDisplayBounds = WIN_GetDisplayBounds; + device->GetDisplayDPI = WIN_GetDisplayDPI; device->GetDisplayModes = WIN_GetDisplayModes; device->SetDisplayMode = WIN_SetDisplayMode; device->PumpEvents = WIN_PumpEvents; @@ -121,6 +153,7 @@ WIN_CreateDevice(int devindex) device->UpdateWindowFramebuffer = WIN_UpdateWindowFramebuffer; device->DestroyWindowFramebuffer = WIN_DestroyWindowFramebuffer; device->OnWindowEnter = WIN_OnWindowEnter; + device->SetWindowHitTest = WIN_SetWindowHitTest; device->shape_driver.CreateShaper = Win32_CreateShaper; device->shape_driver.SetWindowShape = Win32_SetWindowShape; @@ -136,6 +169,17 @@ WIN_CreateDevice(int devindex) device->GL_GetSwapInterval = WIN_GL_GetSwapInterval; device->GL_SwapWindow = WIN_GL_SwapWindow; device->GL_DeleteContext = WIN_GL_DeleteContext; +#elif SDL_VIDEO_OPENGL_EGL + /* Use EGL based functions */ + device->GL_LoadLibrary = WIN_GLES_LoadLibrary; + device->GL_GetProcAddress = WIN_GLES_GetProcAddress; + device->GL_UnloadLibrary = WIN_GLES_UnloadLibrary; + device->GL_CreateContext = WIN_GLES_CreateContext; + device->GL_MakeCurrent = WIN_GLES_MakeCurrent; + device->GL_SetSwapInterval = WIN_GLES_SetSwapInterval; + device->GL_GetSwapInterval = WIN_GLES_GetSwapInterval; + device->GL_SwapWindow = WIN_GLES_SwapWindow; + device->GL_DeleteContext = WIN_GLES_DeleteContext; #endif device->StartTextInput = WIN_StartTextInput; device->StopTextInput = WIN_StopTextInput; @@ -150,6 +194,7 @@ WIN_CreateDevice(int devindex) return device; } + VideoBootStrap WINDOWS_bootstrap = { "windows", "SDL Windows video driver", WIN_Available, WIN_CreateDevice }; @@ -164,6 +209,9 @@ WIN_VideoInit(_THIS) WIN_InitKeyboard(_this); WIN_InitMouse(_this); + SDL_AddHintCallback(SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP, UpdateWindowsEnableMessageLoop, NULL); + SDL_AddHintCallback(SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN, UpdateWindowFrameUsableWhileCursorHidden, NULL); + return 0; } @@ -180,154 +228,195 @@ WIN_VideoQuit(_THIS) #include SDL_bool -D3D_LoadDLL( void **pD3DDLL, IDirect3D9 **pDirect3D9Interface ) +D3D_LoadDLL(void **pD3DDLL, IDirect3D9 **pDirect3D9Interface) { - *pD3DDLL = SDL_LoadObject("D3D9.DLL"); - if (*pD3DDLL) { - IDirect3D9 *(WINAPI * D3DCreate) (UINT SDKVersion); - - D3DCreate = - (IDirect3D9 * (WINAPI *) (UINT)) SDL_LoadFunction(*pD3DDLL, - "Direct3DCreate9"); - if (D3DCreate) { - *pDirect3D9Interface = D3DCreate(D3D_SDK_VERSION); - } - if (!*pDirect3D9Interface) { - SDL_UnloadObject(*pD3DDLL); - *pD3DDLL = NULL; - return SDL_FALSE; - } - - return SDL_TRUE; - } else { - *pDirect3D9Interface = NULL; - return SDL_FALSE; - } + *pD3DDLL = SDL_LoadObject("D3D9.DLL"); + if (*pD3DDLL) { + typedef IDirect3D9 *(WINAPI *Direct3DCreate9_t) (UINT SDKVersion); + Direct3DCreate9_t Direct3DCreate9Func; + +#ifdef USE_D3D9EX + typedef HRESULT (WINAPI *Direct3DCreate9Ex_t)(UINT SDKVersion, IDirect3D9Ex **ppD3D); + Direct3DCreate9Ex_t Direct3DCreate9ExFunc; + + Direct3DCreate9ExFunc = (Direct3DCreate9Ex_t)SDL_LoadFunction(*pD3DDLL, "Direct3DCreate9Ex"); + if (Direct3DCreate9ExFunc) { + IDirect3D9Ex *pDirect3D9ExInterface; + HRESULT hr = Direct3DCreate9ExFunc(D3D_SDK_VERSION, &pDirect3D9ExInterface); + if (SUCCEEDED(hr)) { + const GUID IDirect3D9_GUID = { 0x81bdcbca, 0x64d4, 0x426d, { 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c } }; + hr = IDirect3D9Ex_QueryInterface(pDirect3D9ExInterface, &IDirect3D9_GUID, (void**)pDirect3D9Interface); + IDirect3D9Ex_Release(pDirect3D9ExInterface); + if (SUCCEEDED(hr)) { + return SDL_TRUE; + } + } + } +#endif /* USE_D3D9EX */ + + Direct3DCreate9Func = (Direct3DCreate9_t)SDL_LoadFunction(*pD3DDLL, "Direct3DCreate9"); + if (Direct3DCreate9Func) { + *pDirect3D9Interface = Direct3DCreate9Func(D3D_SDK_VERSION); + if (*pDirect3D9Interface) { + return SDL_TRUE; + } + } + + SDL_UnloadObject(*pD3DDLL); + *pD3DDLL = NULL; + } + *pDirect3D9Interface = NULL; + return SDL_FALSE; } int -SDL_Direct3D9GetAdapterIndex( int displayIndex ) +SDL_Direct3D9GetAdapterIndex(int displayIndex) { - void *pD3DDLL; - IDirect3D9 *pD3D; - if (!D3D_LoadDLL(&pD3DDLL, &pD3D)) { - SDL_SetError("Unable to create Direct3D interface"); - return D3DADAPTER_DEFAULT; - } else { - SDL_DisplayData *pData = (SDL_DisplayData *)SDL_GetDisplayDriverData(displayIndex); - int adapterIndex = D3DADAPTER_DEFAULT; - - if (!pData) { - SDL_SetError("Invalid display index"); - adapterIndex = -1; /* make sure we return something invalid */ - } else { - char *displayName = WIN_StringToUTF8(pData->DeviceName); - unsigned int count = IDirect3D9_GetAdapterCount(pD3D); - unsigned int i; - for (i=0; iDeviceName); + unsigned int count = IDirect3D9_GetAdapterCount(pD3D); + unsigned int i; + for (i=0; i -SDL_bool -DXGI_LoadDLL( void **pDXGIDLL , IDXGIFactory **pDXGIFactory ) +static SDL_bool +DXGI_LoadDLL(void **pDXGIDLL, IDXGIFactory **pDXGIFactory) { - *pDXGIDLL = SDL_LoadObject("DXGI.DLL"); - if (*pDXGIDLL ) { - HRESULT (WINAPI *CreateDXGI)( REFIID riid, void **ppFactory ); - - CreateDXGI = - (HRESULT (WINAPI *) (REFIID, void**)) SDL_LoadFunction(*pDXGIDLL, - "CreateDXGIFactory"); - if (CreateDXGI) { - GUID dxgiGUID = {0x7b7166ec,0x21c7,0x44ae,{0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69}}; - if( !SUCCEEDED( CreateDXGI( &dxgiGUID, (void**)pDXGIFactory ))) { - *pDXGIFactory = NULL; - } - } - if (!*pDXGIFactory) { - SDL_UnloadObject(*pDXGIDLL); - *pDXGIDLL = NULL; - return SDL_FALSE; - } - - return SDL_TRUE; - } else { - *pDXGIFactory = NULL; - return SDL_FALSE; - } + *pDXGIDLL = SDL_LoadObject("DXGI.DLL"); + if (*pDXGIDLL) { + HRESULT (WINAPI *CreateDXGI)(REFIID riid, void **ppFactory); + + CreateDXGI = + (HRESULT (WINAPI *) (REFIID, void**)) SDL_LoadFunction(*pDXGIDLL, + "CreateDXGIFactory"); + if (CreateDXGI) { + GUID dxgiGUID = {0x7b7166ec,0x21c7,0x44ae,{0xb2,0x1a,0xc9,0xae,0x32,0x1a,0xe3,0x69}}; + if (!SUCCEEDED(CreateDXGI(&dxgiGUID, (void**)pDXGIFactory))) { + *pDXGIFactory = NULL; + } + } + if (!*pDXGIFactory) { + SDL_UnloadObject(*pDXGIDLL); + *pDXGIDLL = NULL; + return SDL_FALSE; + } + + return SDL_TRUE; + } else { + *pDXGIFactory = NULL; + return SDL_FALSE; + } } +#endif -void -SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ) +SDL_bool +SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex) { - void *pDXGIDLL; - IDXGIFactory *pDXGIFactory; - - *adapterIndex = -1; - *outputIndex = -1; - - if (!DXGI_LoadDLL(&pDXGIDLL, &pDXGIFactory)) { - SDL_SetError("Unable to create DXGI interface"); - } else { - SDL_DisplayData *pData = (SDL_DisplayData *)SDL_GetDisplayDriverData(displayIndex); - - if (!pData) { - SDL_SetError("Invalid display index"); - } else { - char *displayName = WIN_StringToUTF8(pData->DeviceName); - int nAdapter = 0, nOutput = 0; - IDXGIAdapter* pDXGIAdapter; - while ( *adapterIndex == -1 && IDXGIFactory_EnumAdapters(pDXGIFactory, nAdapter, &pDXGIAdapter) != DXGI_ERROR_NOT_FOUND ) { - IDXGIOutput* pDXGIOutput; - while ( *adapterIndex == -1 && IDXGIAdapter_EnumOutputs(pDXGIAdapter, nOutput, &pDXGIOutput) != DXGI_ERROR_NOT_FOUND ) { - DXGI_OUTPUT_DESC outputDesc; - if (SUCCEEDED(IDXGIOutput_GetDesc(pDXGIOutput, &outputDesc))) { - char *outputName = WIN_StringToUTF8(outputDesc.DeviceName); - - if(!SDL_strcmp(outputName, displayName)) { - *adapterIndex = nAdapter; - *outputIndex = nOutput; - } - - SDL_free( outputName ); - } - - IDXGIOutput_Release( pDXGIOutput ); - nOutput++; - } - - IDXGIAdapter_Release( pDXGIAdapter ); - nAdapter++; - } - SDL_free(displayName); - } - - /* free up the D3D stuff we inited */ - IDXGIFactory_AddRef( pDXGIFactory ); - SDL_UnloadObject(pDXGIDLL); - } +#if !HAVE_DXGI_H + if (adapterIndex) *adapterIndex = -1; + if (outputIndex) *outputIndex = -1; + SDL_SetError("SDL was compiled without DXGI support due to missing dxgi.h header"); + return SDL_FALSE; +#else + SDL_DisplayData *pData = (SDL_DisplayData *)SDL_GetDisplayDriverData(displayIndex); + void *pDXGIDLL; + char *displayName; + int nAdapter, nOutput; + IDXGIFactory *pDXGIFactory; + IDXGIAdapter *pDXGIAdapter; + IDXGIOutput* pDXGIOutput; + + if (!adapterIndex) { + SDL_InvalidParamError("adapterIndex"); + return SDL_FALSE; + } + + if (!outputIndex) { + SDL_InvalidParamError("outputIndex"); + return SDL_FALSE; + } + + *adapterIndex = -1; + *outputIndex = -1; + + if (!pData) { + SDL_SetError("Invalid display index"); + return SDL_FALSE; + } + + if (!DXGI_LoadDLL(&pDXGIDLL, &pDXGIFactory)) { + SDL_SetError("Unable to create DXGI interface"); + return SDL_FALSE; + } + + displayName = WIN_StringToUTF8(pData->DeviceName); + nAdapter = 0; + while (*adapterIndex == -1 && SUCCEEDED(IDXGIFactory_EnumAdapters(pDXGIFactory, nAdapter, &pDXGIAdapter))) { + nOutput = 0; + while (*adapterIndex == -1 && SUCCEEDED(IDXGIAdapter_EnumOutputs(pDXGIAdapter, nOutput, &pDXGIOutput))) { + DXGI_OUTPUT_DESC outputDesc; + if (SUCCEEDED(IDXGIOutput_GetDesc(pDXGIOutput, &outputDesc))) { + char *outputName = WIN_StringToUTF8(outputDesc.DeviceName); + if (SDL_strcmp(outputName, displayName) == 0) { + *adapterIndex = nAdapter; + *outputIndex = nOutput; + } + SDL_free(outputName); + } + IDXGIOutput_Release(pDXGIOutput); + nOutput++; + } + IDXGIAdapter_Release(pDXGIAdapter); + nAdapter++; + } + SDL_free(displayName); + + /* free up the DXGI factory */ + IDXGIFactory_Release(pDXGIFactory); + SDL_UnloadObject(pDXGIDLL); + + if (*adapterIndex == -1) { + return SDL_FALSE; + } else { + return SDL_TRUE; + } +#endif } #endif /* SDL_VIDEO_DRIVER_WINDOWS */ diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.h b/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.h index b64cbddfb4..912d8763df 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowsvideo.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -27,7 +27,7 @@ #include "../SDL_sysvideo.h" -#if defined(_MSC_VER) +#if defined(_MSC_VER) && (_MSC_VER >= 1500) #include #else #include "SDL_msctf.h" @@ -76,6 +76,17 @@ typedef struct _TOUCHINPUT { #endif /* WINVER < 0x0601 */ +#if WINVER < 0x0603 + +typedef enum MONITOR_DPI_TYPE { + MDT_EFFECTIVE_DPI = 0, + MDT_ANGULAR_DPI = 1, + MDT_RAW_DPI = 2, + MDT_DEFAULT = MDT_EFFECTIVE_DPI +} MONITOR_DPI_TYPE; + +#endif /* WINVER < 0x0603 */ + typedef BOOL (*PFNSHFullScreen)(HWND, DWORD); typedef void (*PFCoordTransform)(SDL_Window*, POINT*); @@ -124,6 +135,12 @@ typedef struct SDL_VideoData BOOL (WINAPI *GetTouchInputInfo)( HTOUCHINPUT, UINT, PTOUCHINPUT, int ); BOOL (WINAPI *RegisterTouchWindow)( HWND, ULONG ); + void* shcoreDLL; + HRESULT (WINAPI *GetDpiForMonitor)( HMONITOR hmonitor, + MONITOR_DPI_TYPE dpiType, + UINT *dpiX, + UINT *dpiY ); + SDL_bool ime_com_initialized; struct ITfThreadMgr *ime_threadmgr; SDL_bool ime_initialized; @@ -171,6 +188,8 @@ typedef struct SDL_VideoData TSFSink *ime_ippasink; } SDL_VideoData; +extern SDL_bool g_WindowsEnableMessageLoop; +extern SDL_bool g_WindowFrameUsableWhileCursorHidden; typedef struct IDirect3D9 IDirect3D9; extern SDL_bool D3D_LoadDLL( void **pD3DDLL, IDirect3D9 **pDirect3D9Interface ); diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowswindow.c b/Engine/lib/sdl/src/video/windows/SDL_windowswindow.c index 425b4da235..26683a0ed0 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowswindow.c +++ b/Engine/lib/sdl/src/video/windows/SDL_windowswindow.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -108,9 +108,9 @@ WIN_SetWindowPositionInternal(_THIS, SDL_Window * window, UINT flags) x = window->x + rect.left; y = window->y + rect.top; - data->expected_resize = TRUE; + data->expected_resize = SDL_TRUE; SetWindowPos(hwnd, top, x, y, w, h, flags); - data->expected_resize = FALSE; + data->expected_resize = SDL_FALSE; } static int @@ -130,6 +130,7 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) data->created = created; data->mouse_button_flags = 0; data->videodata = videodata; + data->initializing = SDL_TRUE; window->driverdata = data; @@ -165,7 +166,26 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) int h = rect.bottom; if ((window->w && window->w != w) || (window->h && window->h != h)) { /* We tried to create a window larger than the desktop and Windows didn't allow it. Override! */ - WIN_SetWindowPositionInternal(_this, window, SWP_NOCOPYBITS | SWP_NOZORDER | SWP_NOACTIVATE); + RECT rect; + DWORD style; + BOOL menu; + int x, y; + int w, h; + + /* Figure out what the window area will be */ + style = GetWindowLong(hwnd, GWL_STYLE); + rect.left = 0; + rect.top = 0; + rect.right = window->w; + rect.bottom = window->h; + menu = (style & WS_CHILDWINDOW) ? FALSE : (GetMenu(hwnd) != NULL); + AdjustWindowRectEx(&rect, style, menu, 0); + w = (rect.right - rect.left); + h = (rect.bottom - rect.top); + x = window->x + rect.left; + y = window->y + rect.top; + + SetWindowPos(hwnd, HWND_NOTOPMOST, x, y, w, h, SWP_NOCOPYBITS | SWP_NOZORDER | SWP_NOACTIVATE); } else { window->w = w; window->h = h; @@ -236,6 +256,8 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) /* Enable dropping files */ DragAcceptFiles(hwnd, TRUE); + data->initializing = SDL_FALSE; + /* All done! */ return 0; } @@ -343,15 +365,16 @@ WIN_CreateWindowFrom(_THIS, SDL_Window * window, const void *data) { const char *hint = SDL_GetHint(SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT); if (hint) { - // This hint is a pointer (in string form) of the address of - // the window to share a pixel format with + /* This hint is a pointer (in string form) of the address of + the window to share a pixel format with + */ SDL_Window *otherWindow = NULL; SDL_sscanf(hint, "%p", (void**)&otherWindow); - // Do some error checking on the pointer + /* Do some error checking on the pointer */ if (otherWindow != NULL && otherWindow->magic == &_this->window_magic) { - // If the otherWindow has SDL_WINDOW_OPENGL set, set it for the new window as well + /* If the otherWindow has SDL_WINDOW_OPENGL set, set it for the new window as well */ if (otherWindow->flags & SDL_WINDOW_OPENGL) { window->flags |= SDL_WINDOW_OPENGL; @@ -370,14 +393,8 @@ void WIN_SetWindowTitle(_THIS, SDL_Window * window) { HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; - LPTSTR title; - - if (window->title) { - title = WIN_UTF8ToString(window->title); - } else { - title = NULL; - } - SetWindowText(hwnd, title ? title : TEXT("")); + LPTSTR title = WIN_UTF8ToString(window->title); + SetWindowText(hwnd, title); SDL_free(title); } @@ -469,9 +486,9 @@ WIN_MaximizeWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *)window->driverdata; HWND hwnd = data->hwnd; - data->expected_resize = TRUE; + data->expected_resize = SDL_TRUE; ShowWindow(hwnd, SW_MAXIMIZE); - data->expected_resize = FALSE; + data->expected_resize = SDL_FALSE; } void @@ -484,7 +501,8 @@ WIN_MinimizeWindow(_THIS, SDL_Window * window) void WIN_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) { - HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; + SDL_WindowData *data = (SDL_WindowData *)window->driverdata; + HWND hwnd = data->hwnd; DWORD style = GetWindowLong(hwnd, GWL_STYLE); if (bordered) { @@ -495,8 +513,10 @@ WIN_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) style |= STYLE_BORDERLESS; } + data->in_border_change = SDL_TRUE; SetWindowLong(hwnd, GWL_STYLE, style); - WIN_SetWindowPositionInternal(_this, window, SWP_NOCOPYBITS | SWP_FRAMECHANGED | SWP_NOREPOSITION | SWP_NOZORDER |SWP_NOACTIVATE | SWP_NOSENDCHANGING); + WIN_SetWindowPositionInternal(_this, window, SWP_NOCOPYBITS | SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE); + data->in_border_change = SDL_FALSE; } void @@ -504,9 +524,9 @@ WIN_RestoreWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *)window->driverdata; HWND hwnd = data->hwnd; - data->expected_resize = TRUE; + data->expected_resize = SDL_TRUE; ShowWindow(hwnd, SW_RESTORE); - data->expected_resize = FALSE; + data->expected_resize = SDL_FALSE; } void @@ -539,7 +559,25 @@ WIN_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, y = bounds.y; w = bounds.w; h = bounds.h; + + /* Unset the maximized flag. This fixes + https://bugzilla.libsdl.org/show_bug.cgi?id=3215 + */ + if (style & WS_MAXIMIZE) { + data->windowed_mode_was_maximized = SDL_TRUE; + style &= ~WS_MAXIMIZE; + } } else { + /* Restore window-maximization state, as applicable. + Special care is taken to *not* do this if and when we're + alt-tab'ing away (to some other window; as indicated by + in_window_deactivation), otherwise + https://bugzilla.libsdl.org/show_bug.cgi?id=3215 can reproduce! + */ + if (data->windowed_mode_was_maximized && !data->in_window_deactivation) { + style |= WS_MAXIMIZE; + data->windowed_mode_was_maximized = SDL_FALSE; + } rect.left = 0; rect.top = 0; rect.right = window->windowed.w; @@ -552,9 +590,9 @@ WIN_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, y = window->windowed.y + rect.top; } SetWindowLong(hwnd, GWL_STYLE, style); - data->expected_resize = TRUE; + data->expected_resize = SDL_TRUE; SetWindowPos(hwnd, top, x, y, w, h, SWP_NOCOPYBITS | SWP_NOACTIVATE); - data->expected_resize = FALSE; + data->expected_resize = SDL_FALSE; } int @@ -617,6 +655,7 @@ WIN_DestroyWindow(_THIS, SDL_Window * window) if (data) { ReleaseDC(data->hwnd, data->hdc); + RemoveProp(data->hwnd, TEXT("SDL_WindowData")); if (data->created) { DestroyWindow(data->hwnd); } else { @@ -633,15 +672,17 @@ WIN_DestroyWindow(_THIS, SDL_Window * window) } SDL_free(data); } + window->driverdata = NULL; } SDL_bool WIN_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) { - HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd; + const SDL_WindowData *data = (const SDL_WindowData *) window->driverdata; if (info->version.major <= SDL_MAJOR_VERSION) { info->subsystem = SDL_SYSWM_WINDOWS; - info->info.win.window = hwnd; + info->info.win.window = data->hwnd; + info->info.win.hdc = data->hdc; return SDL_TRUE; } else { SDL_SetError("Application not compiled with SDL %d.%d\n", @@ -745,9 +786,7 @@ WIN_UpdateClipCursor(SDL_Window *window) SDL_WindowData *data = (SDL_WindowData *) window->driverdata; SDL_Mouse *mouse = SDL_GetMouse(); - /* Don't clip the cursor while we're in the modal resize or move loop */ - if (data->in_title_click || data->in_modal_loop) { - ClipCursor(NULL); + if (data->focus_click_pending) { return; } @@ -781,6 +820,12 @@ WIN_UpdateClipCursor(SDL_Window *window) } } +int +WIN_SetWindowHitTest(SDL_Window *window, SDL_bool enabled) +{ + return 0; /* just succeed, the real work is done elsewhere. */ +} + #endif /* SDL_VIDEO_DRIVER_WINDOWS */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/windows/SDL_windowswindow.h b/Engine/lib/sdl/src/video/windows/SDL_windowswindow.h index c428887449..f91aa0ed2b 100644 --- a/Engine/lib/sdl/src/video/windows/SDL_windowswindow.h +++ b/Engine/lib/sdl/src/video/windows/SDL_windowswindow.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,9 +37,13 @@ typedef struct WNDPROC wndproc; SDL_bool created; WPARAM mouse_button_flags; - BOOL expected_resize; + SDL_bool initializing; + SDL_bool expected_resize; + SDL_bool in_border_change; SDL_bool in_title_click; - SDL_bool in_modal_loop; + SDL_bool focus_click_pending; + SDL_bool windowed_mode_was_maximized; + SDL_bool in_window_deactivation; struct SDL_VideoData *videodata; #if SDL_VIDEO_OPENGL_EGL EGLSurface egl_surface; @@ -68,6 +72,7 @@ extern SDL_bool WIN_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info); extern void WIN_OnWindowEnter(_THIS, SDL_Window * window); extern void WIN_UpdateClipCursor(SDL_Window *window); +extern int WIN_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); #endif /* _SDL_windowswindow_h */ diff --git a/Engine/lib/sdl/src/video/windows/wmmsg.h b/Engine/lib/sdl/src/video/windows/wmmsg.h index ea4639630d..8c1351fe92 100644 --- a/Engine/lib/sdl/src/video/windows/wmmsg.h +++ b/Engine/lib/sdl/src/video/windows/wmmsg.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -193,11 +193,11 @@ char *wmtab[] = { "WM_NCMBUTTONUP", "WM_NCMBUTTONDBLCLK", "UNKNOWN (170)", - "UNKNOWN (171)", - "UNKNOWN (172)", - "UNKNOWN (173)", - "UNKNOWN (174)", - "UNKNOWN (175)", + "WM_NCXBUTTONDOWN", + "WM_NCXBUTTONUP", + "WM_NCXBUTTONDBLCLK", + "WM_NCUAHDRAWCAPTION", + "WM_NCUAHDRAWFRAME", "UNKNOWN (176)", "UNKNOWN (177)", "UNKNOWN (178)", diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtevents.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtevents.cpp index 7c0cf49a98..e9df726d4a 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtevents.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtevents.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtevents_c.h b/Engine/lib/sdl/src/video/winrt/SDL_winrtevents_c.h index 826cad74ed..dc94526bbb 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtevents_c.h +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtevents_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -57,12 +57,15 @@ extern Uint8 WINRT_GetSDLButtonForPointerPoint(Windows::UI::Input::PointerPoint extern void WINRT_ProcessPointerPressedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); extern void WINRT_ProcessPointerMovedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); extern void WINRT_ProcessPointerReleasedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); +extern void WINRT_ProcessPointerEnteredEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); +extern void WINRT_ProcessPointerExitedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); extern void WINRT_ProcessPointerWheelChangedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint); extern void WINRT_ProcessMouseMovedEvent(SDL_Window * window, Windows::Devices::Input::MouseEventArgs ^args); /* Keyboard */ extern void WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args); extern void WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args); +extern void WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArgs ^args); /* XAML Thread Management */ extern void WINRT_CycleXAMLThread(); diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtkeyboard.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtkeyboard.cpp index f2fa59d642..7477cdeebf 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtkeyboard.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtkeyboard.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -22,10 +22,6 @@ #if SDL_VIDEO_DRIVER_WINRT -/* Standard C++11 includes */ -#include - - /* Windows-specific includes */ #include #include @@ -42,220 +38,290 @@ extern "C" { static SDL_Scancode WinRT_Official_Keycodes[] = { - SDL_SCANCODE_UNKNOWN, // VirtualKey.None -- 0 - SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftButton -- 1 - SDL_SCANCODE_UNKNOWN, // VirtualKey.RightButton -- 2 - SDL_SCANCODE_CANCEL, // VirtualKey.Cancel -- 3 - SDL_SCANCODE_UNKNOWN, // VirtualKey.MiddleButton -- 4 - SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton1 -- 5 - SDL_SCANCODE_UNKNOWN, // VirtualKey.XButton2 -- 6 - SDL_SCANCODE_UNKNOWN, // -- 7 - SDL_SCANCODE_BACKSPACE, // VirtualKey.Back -- 8 - SDL_SCANCODE_TAB, // VirtualKey.Tab -- 9 - SDL_SCANCODE_UNKNOWN, // -- 10 - SDL_SCANCODE_UNKNOWN, // -- 11 - SDL_SCANCODE_CLEAR, // VirtualKey.Clear -- 12 - SDL_SCANCODE_RETURN, // VirtualKey.Enter -- 13 - SDL_SCANCODE_UNKNOWN, // -- 14 - SDL_SCANCODE_UNKNOWN, // -- 15 - SDL_SCANCODE_LSHIFT, // VirtualKey.Shift -- 16 - SDL_SCANCODE_LCTRL, // VirtualKey.Control -- 17 - SDL_SCANCODE_MENU, // VirtualKey.Menu -- 18 - SDL_SCANCODE_PAUSE, // VirtualKey.Pause -- 19 - SDL_SCANCODE_CAPSLOCK, // VirtualKey.CapitalLock -- 20 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Kana or VirtualKey.Hangul -- 21 - SDL_SCANCODE_UNKNOWN, // -- 22 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Junja -- 23 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Final -- 24 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Hanja or VirtualKey.Kanji -- 25 - SDL_SCANCODE_UNKNOWN, // -- 26 - SDL_SCANCODE_ESCAPE, // VirtualKey.Escape -- 27 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Convert -- 28 - SDL_SCANCODE_UNKNOWN, // VirtualKey.NonConvert -- 29 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Accept -- 30 - SDL_SCANCODE_UNKNOWN, // VirtualKey.ModeChange -- 31 (maybe SDL_SCANCODE_MODE ?) - SDL_SCANCODE_SPACE, // VirtualKey.Space -- 32 - SDL_SCANCODE_PAGEUP, // VirtualKey.PageUp -- 33 - SDL_SCANCODE_PAGEDOWN, // VirtualKey.PageDown -- 34 - SDL_SCANCODE_END, // VirtualKey.End -- 35 - SDL_SCANCODE_HOME, // VirtualKey.Home -- 36 - SDL_SCANCODE_LEFT, // VirtualKey.Left -- 37 - SDL_SCANCODE_UP, // VirtualKey.Up -- 38 - SDL_SCANCODE_RIGHT, // VirtualKey.Right -- 39 - SDL_SCANCODE_DOWN, // VirtualKey.Down -- 40 - SDL_SCANCODE_SELECT, // VirtualKey.Select -- 41 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Print -- 42 (maybe SDL_SCANCODE_PRINTSCREEN ?) - SDL_SCANCODE_EXECUTE, // VirtualKey.Execute -- 43 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Snapshot -- 44 - SDL_SCANCODE_INSERT, // VirtualKey.Insert -- 45 - SDL_SCANCODE_DELETE, // VirtualKey.Delete -- 46 - SDL_SCANCODE_HELP, // VirtualKey.Help -- 47 - SDL_SCANCODE_0, // VirtualKey.Number0 -- 48 - SDL_SCANCODE_1, // VirtualKey.Number1 -- 49 - SDL_SCANCODE_2, // VirtualKey.Number2 -- 50 - SDL_SCANCODE_3, // VirtualKey.Number3 -- 51 - SDL_SCANCODE_4, // VirtualKey.Number4 -- 52 - SDL_SCANCODE_5, // VirtualKey.Number5 -- 53 - SDL_SCANCODE_6, // VirtualKey.Number6 -- 54 - SDL_SCANCODE_7, // VirtualKey.Number7 -- 55 - SDL_SCANCODE_8, // VirtualKey.Number8 -- 56 - SDL_SCANCODE_9, // VirtualKey.Number9 -- 57 - SDL_SCANCODE_UNKNOWN, // -- 58 - SDL_SCANCODE_UNKNOWN, // -- 59 - SDL_SCANCODE_UNKNOWN, // -- 60 - SDL_SCANCODE_UNKNOWN, // -- 61 - SDL_SCANCODE_UNKNOWN, // -- 62 - SDL_SCANCODE_UNKNOWN, // -- 63 - SDL_SCANCODE_UNKNOWN, // -- 64 - SDL_SCANCODE_A, // VirtualKey.A -- 65 - SDL_SCANCODE_B, // VirtualKey.B -- 66 - SDL_SCANCODE_C, // VirtualKey.C -- 67 - SDL_SCANCODE_D, // VirtualKey.D -- 68 - SDL_SCANCODE_E, // VirtualKey.E -- 69 - SDL_SCANCODE_F, // VirtualKey.F -- 70 - SDL_SCANCODE_G, // VirtualKey.G -- 71 - SDL_SCANCODE_H, // VirtualKey.H -- 72 - SDL_SCANCODE_I, // VirtualKey.I -- 73 - SDL_SCANCODE_J, // VirtualKey.J -- 74 - SDL_SCANCODE_K, // VirtualKey.K -- 75 - SDL_SCANCODE_L, // VirtualKey.L -- 76 - SDL_SCANCODE_M, // VirtualKey.M -- 77 - SDL_SCANCODE_N, // VirtualKey.N -- 78 - SDL_SCANCODE_O, // VirtualKey.O -- 79 - SDL_SCANCODE_P, // VirtualKey.P -- 80 - SDL_SCANCODE_Q, // VirtualKey.Q -- 81 - SDL_SCANCODE_R, // VirtualKey.R -- 82 - SDL_SCANCODE_S, // VirtualKey.S -- 83 - SDL_SCANCODE_T, // VirtualKey.T -- 84 - SDL_SCANCODE_U, // VirtualKey.U -- 85 - SDL_SCANCODE_V, // VirtualKey.V -- 86 - SDL_SCANCODE_W, // VirtualKey.W -- 87 - SDL_SCANCODE_X, // VirtualKey.X -- 88 - SDL_SCANCODE_Y, // VirtualKey.Y -- 89 - SDL_SCANCODE_Z, // VirtualKey.Z -- 90 - SDL_SCANCODE_UNKNOWN, // VirtualKey.LeftWindows -- 91 (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_LGUI ?) - SDL_SCANCODE_UNKNOWN, // VirtualKey.RightWindows -- 92 (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_RGUI ?) - SDL_SCANCODE_APPLICATION, // VirtualKey.Application -- 93 - SDL_SCANCODE_UNKNOWN, // -- 94 - SDL_SCANCODE_SLEEP, // VirtualKey.Sleep -- 95 - SDL_SCANCODE_KP_0, // VirtualKey.NumberPad0 -- 96 - SDL_SCANCODE_KP_1, // VirtualKey.NumberPad1 -- 97 - SDL_SCANCODE_KP_2, // VirtualKey.NumberPad2 -- 98 - SDL_SCANCODE_KP_3, // VirtualKey.NumberPad3 -- 99 - SDL_SCANCODE_KP_4, // VirtualKey.NumberPad4 -- 100 - SDL_SCANCODE_KP_5, // VirtualKey.NumberPad5 -- 101 - SDL_SCANCODE_KP_6, // VirtualKey.NumberPad6 -- 102 - SDL_SCANCODE_KP_7, // VirtualKey.NumberPad7 -- 103 - SDL_SCANCODE_KP_8, // VirtualKey.NumberPad8 -- 104 - SDL_SCANCODE_KP_9, // VirtualKey.NumberPad9 -- 105 - SDL_SCANCODE_KP_MULTIPLY, // VirtualKey.Multiply -- 106 - SDL_SCANCODE_KP_PLUS, // VirtualKey.Add -- 107 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Separator -- 108 - SDL_SCANCODE_KP_MINUS, // VirtualKey.Subtract -- 109 - SDL_SCANCODE_UNKNOWN, // VirtualKey.Decimal -- 110 (maybe SDL_SCANCODE_DECIMALSEPARATOR, SDL_SCANCODE_KP_DECIMAL, or SDL_SCANCODE_KP_PERIOD ?) - SDL_SCANCODE_KP_DIVIDE, // VirtualKey.Divide -- 111 - SDL_SCANCODE_F1, // VirtualKey.F1 -- 112 - SDL_SCANCODE_F2, // VirtualKey.F2 -- 113 - SDL_SCANCODE_F3, // VirtualKey.F3 -- 114 - SDL_SCANCODE_F4, // VirtualKey.F4 -- 115 - SDL_SCANCODE_F5, // VirtualKey.F5 -- 116 - SDL_SCANCODE_F6, // VirtualKey.F6 -- 117 - SDL_SCANCODE_F7, // VirtualKey.F7 -- 118 - SDL_SCANCODE_F8, // VirtualKey.F8 -- 119 - SDL_SCANCODE_F9, // VirtualKey.F9 -- 120 - SDL_SCANCODE_F10, // VirtualKey.F10 -- 121 - SDL_SCANCODE_F11, // VirtualKey.F11 -- 122 - SDL_SCANCODE_F12, // VirtualKey.F12 -- 123 - SDL_SCANCODE_F13, // VirtualKey.F13 -- 124 - SDL_SCANCODE_F14, // VirtualKey.F14 -- 125 - SDL_SCANCODE_F15, // VirtualKey.F15 -- 126 - SDL_SCANCODE_F16, // VirtualKey.F16 -- 127 - SDL_SCANCODE_F17, // VirtualKey.F17 -- 128 - SDL_SCANCODE_F18, // VirtualKey.F18 -- 129 - SDL_SCANCODE_F19, // VirtualKey.F19 -- 130 - SDL_SCANCODE_F20, // VirtualKey.F20 -- 131 - SDL_SCANCODE_F21, // VirtualKey.F21 -- 132 - SDL_SCANCODE_F22, // VirtualKey.F22 -- 133 - SDL_SCANCODE_F23, // VirtualKey.F23 -- 134 - SDL_SCANCODE_F24, // VirtualKey.F24 -- 135 - SDL_SCANCODE_UNKNOWN, // -- 136 - SDL_SCANCODE_UNKNOWN, // -- 137 - SDL_SCANCODE_UNKNOWN, // -- 138 - SDL_SCANCODE_UNKNOWN, // -- 139 - SDL_SCANCODE_UNKNOWN, // -- 140 - SDL_SCANCODE_UNKNOWN, // -- 141 - SDL_SCANCODE_UNKNOWN, // -- 142 - SDL_SCANCODE_UNKNOWN, // -- 143 - SDL_SCANCODE_NUMLOCKCLEAR, // VirtualKey.NumberKeyLock -- 144 - SDL_SCANCODE_SCROLLLOCK, // VirtualKey.Scroll -- 145 - SDL_SCANCODE_UNKNOWN, // -- 146 - SDL_SCANCODE_UNKNOWN, // -- 147 - SDL_SCANCODE_UNKNOWN, // -- 148 - SDL_SCANCODE_UNKNOWN, // -- 149 - SDL_SCANCODE_UNKNOWN, // -- 150 - SDL_SCANCODE_UNKNOWN, // -- 151 - SDL_SCANCODE_UNKNOWN, // -- 152 - SDL_SCANCODE_UNKNOWN, // -- 153 - SDL_SCANCODE_UNKNOWN, // -- 154 - SDL_SCANCODE_UNKNOWN, // -- 155 - SDL_SCANCODE_UNKNOWN, // -- 156 - SDL_SCANCODE_UNKNOWN, // -- 157 - SDL_SCANCODE_UNKNOWN, // -- 158 - SDL_SCANCODE_UNKNOWN, // -- 159 - SDL_SCANCODE_LSHIFT, // VirtualKey.LeftShift -- 160 - SDL_SCANCODE_RSHIFT, // VirtualKey.RightShift -- 161 - SDL_SCANCODE_LCTRL, // VirtualKey.LeftControl -- 162 - SDL_SCANCODE_RCTRL, // VirtualKey.RightControl -- 163 - SDL_SCANCODE_MENU, // VirtualKey.LeftMenu -- 164 - SDL_SCANCODE_MENU, // VirtualKey.RightMenu -- 165 + SDL_SCANCODE_UNKNOWN, /* VirtualKey.None -- 0 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.LeftButton -- 1 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.RightButton -- 2 */ + SDL_SCANCODE_CANCEL, /* VirtualKey.Cancel -- 3 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.MiddleButton -- 4 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.XButton1 -- 5 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.XButton2 -- 6 */ + SDL_SCANCODE_UNKNOWN, /* -- 7 */ + SDL_SCANCODE_BACKSPACE, /* VirtualKey.Back -- 8 */ + SDL_SCANCODE_TAB, /* VirtualKey.Tab -- 9 */ + SDL_SCANCODE_UNKNOWN, /* -- 10 */ + SDL_SCANCODE_UNKNOWN, /* -- 11 */ + SDL_SCANCODE_CLEAR, /* VirtualKey.Clear -- 12 */ + SDL_SCANCODE_RETURN, /* VirtualKey.Enter -- 13 */ + SDL_SCANCODE_UNKNOWN, /* -- 14 */ + SDL_SCANCODE_UNKNOWN, /* -- 15 */ + SDL_SCANCODE_LSHIFT, /* VirtualKey.Shift -- 16 */ + SDL_SCANCODE_LCTRL, /* VirtualKey.Control -- 17 */ + SDL_SCANCODE_MENU, /* VirtualKey.Menu -- 18 */ + SDL_SCANCODE_PAUSE, /* VirtualKey.Pause -- 19 */ + SDL_SCANCODE_CAPSLOCK, /* VirtualKey.CapitalLock -- 20 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Kana or VirtualKey.Hangul -- 21 */ + SDL_SCANCODE_UNKNOWN, /* -- 22 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Junja -- 23 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Final -- 24 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Hanja or VirtualKey.Kanji -- 25 */ + SDL_SCANCODE_UNKNOWN, /* -- 26 */ + SDL_SCANCODE_ESCAPE, /* VirtualKey.Escape -- 27 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Convert -- 28 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.NonConvert -- 29 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Accept -- 30 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.ModeChange -- 31 (maybe SDL_SCANCODE_MODE ?) */ + SDL_SCANCODE_SPACE, /* VirtualKey.Space -- 32 */ + SDL_SCANCODE_PAGEUP, /* VirtualKey.PageUp -- 33 */ + SDL_SCANCODE_PAGEDOWN, /* VirtualKey.PageDown -- 34 */ + SDL_SCANCODE_END, /* VirtualKey.End -- 35 */ + SDL_SCANCODE_HOME, /* VirtualKey.Home -- 36 */ + SDL_SCANCODE_LEFT, /* VirtualKey.Left -- 37 */ + SDL_SCANCODE_UP, /* VirtualKey.Up -- 38 */ + SDL_SCANCODE_RIGHT, /* VirtualKey.Right -- 39 */ + SDL_SCANCODE_DOWN, /* VirtualKey.Down -- 40 */ + SDL_SCANCODE_SELECT, /* VirtualKey.Select -- 41 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Print -- 42 (maybe SDL_SCANCODE_PRINTSCREEN ?) */ + SDL_SCANCODE_EXECUTE, /* VirtualKey.Execute -- 43 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Snapshot -- 44 */ + SDL_SCANCODE_INSERT, /* VirtualKey.Insert -- 45 */ + SDL_SCANCODE_DELETE, /* VirtualKey.Delete -- 46 */ + SDL_SCANCODE_HELP, /* VirtualKey.Help -- 47 */ + SDL_SCANCODE_0, /* VirtualKey.Number0 -- 48 */ + SDL_SCANCODE_1, /* VirtualKey.Number1 -- 49 */ + SDL_SCANCODE_2, /* VirtualKey.Number2 -- 50 */ + SDL_SCANCODE_3, /* VirtualKey.Number3 -- 51 */ + SDL_SCANCODE_4, /* VirtualKey.Number4 -- 52 */ + SDL_SCANCODE_5, /* VirtualKey.Number5 -- 53 */ + SDL_SCANCODE_6, /* VirtualKey.Number6 -- 54 */ + SDL_SCANCODE_7, /* VirtualKey.Number7 -- 55 */ + SDL_SCANCODE_8, /* VirtualKey.Number8 -- 56 */ + SDL_SCANCODE_9, /* VirtualKey.Number9 -- 57 */ + SDL_SCANCODE_UNKNOWN, /* -- 58 */ + SDL_SCANCODE_UNKNOWN, /* -- 59 */ + SDL_SCANCODE_UNKNOWN, /* -- 60 */ + SDL_SCANCODE_UNKNOWN, /* -- 61 */ + SDL_SCANCODE_UNKNOWN, /* -- 62 */ + SDL_SCANCODE_UNKNOWN, /* -- 63 */ + SDL_SCANCODE_UNKNOWN, /* -- 64 */ + SDL_SCANCODE_A, /* VirtualKey.A -- 65 */ + SDL_SCANCODE_B, /* VirtualKey.B -- 66 */ + SDL_SCANCODE_C, /* VirtualKey.C -- 67 */ + SDL_SCANCODE_D, /* VirtualKey.D -- 68 */ + SDL_SCANCODE_E, /* VirtualKey.E -- 69 */ + SDL_SCANCODE_F, /* VirtualKey.F -- 70 */ + SDL_SCANCODE_G, /* VirtualKey.G -- 71 */ + SDL_SCANCODE_H, /* VirtualKey.H -- 72 */ + SDL_SCANCODE_I, /* VirtualKey.I -- 73 */ + SDL_SCANCODE_J, /* VirtualKey.J -- 74 */ + SDL_SCANCODE_K, /* VirtualKey.K -- 75 */ + SDL_SCANCODE_L, /* VirtualKey.L -- 76 */ + SDL_SCANCODE_M, /* VirtualKey.M -- 77 */ + SDL_SCANCODE_N, /* VirtualKey.N -- 78 */ + SDL_SCANCODE_O, /* VirtualKey.O -- 79 */ + SDL_SCANCODE_P, /* VirtualKey.P -- 80 */ + SDL_SCANCODE_Q, /* VirtualKey.Q -- 81 */ + SDL_SCANCODE_R, /* VirtualKey.R -- 82 */ + SDL_SCANCODE_S, /* VirtualKey.S -- 83 */ + SDL_SCANCODE_T, /* VirtualKey.T -- 84 */ + SDL_SCANCODE_U, /* VirtualKey.U -- 85 */ + SDL_SCANCODE_V, /* VirtualKey.V -- 86 */ + SDL_SCANCODE_W, /* VirtualKey.W -- 87 */ + SDL_SCANCODE_X, /* VirtualKey.X -- 88 */ + SDL_SCANCODE_Y, /* VirtualKey.Y -- 89 */ + SDL_SCANCODE_Z, /* VirtualKey.Z -- 90 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.LeftWindows -- 91 (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_LGUI ?) */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.RightWindows -- 92 (maybe SDL_SCANCODE_APPLICATION or SDL_SCANCODE_RGUI ?) */ + SDL_SCANCODE_APPLICATION, /* VirtualKey.Application -- 93 */ + SDL_SCANCODE_UNKNOWN, /* -- 94 */ + SDL_SCANCODE_SLEEP, /* VirtualKey.Sleep -- 95 */ + SDL_SCANCODE_KP_0, /* VirtualKey.NumberPad0 -- 96 */ + SDL_SCANCODE_KP_1, /* VirtualKey.NumberPad1 -- 97 */ + SDL_SCANCODE_KP_2, /* VirtualKey.NumberPad2 -- 98 */ + SDL_SCANCODE_KP_3, /* VirtualKey.NumberPad3 -- 99 */ + SDL_SCANCODE_KP_4, /* VirtualKey.NumberPad4 -- 100 */ + SDL_SCANCODE_KP_5, /* VirtualKey.NumberPad5 -- 101 */ + SDL_SCANCODE_KP_6, /* VirtualKey.NumberPad6 -- 102 */ + SDL_SCANCODE_KP_7, /* VirtualKey.NumberPad7 -- 103 */ + SDL_SCANCODE_KP_8, /* VirtualKey.NumberPad8 -- 104 */ + SDL_SCANCODE_KP_9, /* VirtualKey.NumberPad9 -- 105 */ + SDL_SCANCODE_KP_MULTIPLY, /* VirtualKey.Multiply -- 106 */ + SDL_SCANCODE_KP_PLUS, /* VirtualKey.Add -- 107 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Separator -- 108 */ + SDL_SCANCODE_KP_MINUS, /* VirtualKey.Subtract -- 109 */ + SDL_SCANCODE_UNKNOWN, /* VirtualKey.Decimal -- 110 (maybe SDL_SCANCODE_DECIMALSEPARATOR, SDL_SCANCODE_KP_DECIMAL, or SDL_SCANCODE_KP_PERIOD ?) */ + SDL_SCANCODE_KP_DIVIDE, /* VirtualKey.Divide -- 111 */ + SDL_SCANCODE_F1, /* VirtualKey.F1 -- 112 */ + SDL_SCANCODE_F2, /* VirtualKey.F2 -- 113 */ + SDL_SCANCODE_F3, /* VirtualKey.F3 -- 114 */ + SDL_SCANCODE_F4, /* VirtualKey.F4 -- 115 */ + SDL_SCANCODE_F5, /* VirtualKey.F5 -- 116 */ + SDL_SCANCODE_F6, /* VirtualKey.F6 -- 117 */ + SDL_SCANCODE_F7, /* VirtualKey.F7 -- 118 */ + SDL_SCANCODE_F8, /* VirtualKey.F8 -- 119 */ + SDL_SCANCODE_F9, /* VirtualKey.F9 -- 120 */ + SDL_SCANCODE_F10, /* VirtualKey.F10 -- 121 */ + SDL_SCANCODE_F11, /* VirtualKey.F11 -- 122 */ + SDL_SCANCODE_F12, /* VirtualKey.F12 -- 123 */ + SDL_SCANCODE_F13, /* VirtualKey.F13 -- 124 */ + SDL_SCANCODE_F14, /* VirtualKey.F14 -- 125 */ + SDL_SCANCODE_F15, /* VirtualKey.F15 -- 126 */ + SDL_SCANCODE_F16, /* VirtualKey.F16 -- 127 */ + SDL_SCANCODE_F17, /* VirtualKey.F17 -- 128 */ + SDL_SCANCODE_F18, /* VirtualKey.F18 -- 129 */ + SDL_SCANCODE_F19, /* VirtualKey.F19 -- 130 */ + SDL_SCANCODE_F20, /* VirtualKey.F20 -- 131 */ + SDL_SCANCODE_F21, /* VirtualKey.F21 -- 132 */ + SDL_SCANCODE_F22, /* VirtualKey.F22 -- 133 */ + SDL_SCANCODE_F23, /* VirtualKey.F23 -- 134 */ + SDL_SCANCODE_F24, /* VirtualKey.F24 -- 135 */ + SDL_SCANCODE_UNKNOWN, /* -- 136 */ + SDL_SCANCODE_UNKNOWN, /* -- 137 */ + SDL_SCANCODE_UNKNOWN, /* -- 138 */ + SDL_SCANCODE_UNKNOWN, /* -- 139 */ + SDL_SCANCODE_UNKNOWN, /* -- 140 */ + SDL_SCANCODE_UNKNOWN, /* -- 141 */ + SDL_SCANCODE_UNKNOWN, /* -- 142 */ + SDL_SCANCODE_UNKNOWN, /* -- 143 */ + SDL_SCANCODE_NUMLOCKCLEAR, /* VirtualKey.NumberKeyLock -- 144 */ + SDL_SCANCODE_SCROLLLOCK, /* VirtualKey.Scroll -- 145 */ + SDL_SCANCODE_UNKNOWN, /* -- 146 */ + SDL_SCANCODE_UNKNOWN, /* -- 147 */ + SDL_SCANCODE_UNKNOWN, /* -- 148 */ + SDL_SCANCODE_UNKNOWN, /* -- 149 */ + SDL_SCANCODE_UNKNOWN, /* -- 150 */ + SDL_SCANCODE_UNKNOWN, /* -- 151 */ + SDL_SCANCODE_UNKNOWN, /* -- 152 */ + SDL_SCANCODE_UNKNOWN, /* -- 153 */ + SDL_SCANCODE_UNKNOWN, /* -- 154 */ + SDL_SCANCODE_UNKNOWN, /* -- 155 */ + SDL_SCANCODE_UNKNOWN, /* -- 156 */ + SDL_SCANCODE_UNKNOWN, /* -- 157 */ + SDL_SCANCODE_UNKNOWN, /* -- 158 */ + SDL_SCANCODE_UNKNOWN, /* -- 159 */ + SDL_SCANCODE_LSHIFT, /* VirtualKey.LeftShift -- 160 */ + SDL_SCANCODE_RSHIFT, /* VirtualKey.RightShift -- 161 */ + SDL_SCANCODE_LCTRL, /* VirtualKey.LeftControl -- 162 */ + SDL_SCANCODE_RCTRL, /* VirtualKey.RightControl -- 163 */ + SDL_SCANCODE_MENU, /* VirtualKey.LeftMenu -- 164 */ + SDL_SCANCODE_MENU, /* VirtualKey.RightMenu -- 165 */ + SDL_SCANCODE_AC_BACK, /* VirtualKey.GoBack -- 166 : The go back key. */ + SDL_SCANCODE_AC_FORWARD, /* VirtualKey.GoForward -- 167 : The go forward key. */ + SDL_SCANCODE_AC_REFRESH, /* VirtualKey.Refresh -- 168 : The refresh key. */ + SDL_SCANCODE_AC_STOP, /* VirtualKey.Stop -- 169 : The stop key. */ + SDL_SCANCODE_AC_SEARCH, /* VirtualKey.Search -- 170 : The search key. */ + SDL_SCANCODE_AC_BOOKMARKS, /* VirtualKey.Favorites -- 171 : The favorites key. */ + SDL_SCANCODE_AC_HOME /* VirtualKey.GoHome -- 172 : The go home key. */ }; -static std::unordered_map WinRT_Unofficial_Keycodes; +/* Attempt to translate a keycode that isn't listed in WinRT's VirtualKey enum. + */ +static SDL_Scancode +WINRT_TranslateUnofficialKeycode(int keycode) +{ + switch (keycode) { + case 173: return SDL_SCANCODE_MUTE; /* VK_VOLUME_MUTE */ + case 174: return SDL_SCANCODE_VOLUMEDOWN; /* VK_VOLUME_DOWN */ + case 175: return SDL_SCANCODE_VOLUMEUP; /* VK_VOLUME_UP */ + case 176: return SDL_SCANCODE_AUDIONEXT; /* VK_MEDIA_NEXT_TRACK */ + case 177: return SDL_SCANCODE_AUDIOPREV; /* VK_MEDIA_PREV_TRACK */ + // case 178: return ; /* VK_MEDIA_STOP */ + case 179: return SDL_SCANCODE_AUDIOPLAY; /* VK_MEDIA_PLAY_PAUSE */ + case 180: return SDL_SCANCODE_MAIL; /* VK_LAUNCH_MAIL */ + case 181: return SDL_SCANCODE_MEDIASELECT; /* VK_LAUNCH_MEDIA_SELECT */ + // case 182: return ; /* VK_LAUNCH_APP1 */ + case 183: return SDL_SCANCODE_CALCULATOR; /* VK_LAUNCH_APP2 */ + // case 184: return ; /* ... reserved ... */ + // case 185: return ; /* ... reserved ... */ + case 186: return SDL_SCANCODE_SEMICOLON; /* VK_OEM_1, ';:' key on US standard keyboards */ + case 187: return SDL_SCANCODE_EQUALS; /* VK_OEM_PLUS */ + case 188: return SDL_SCANCODE_COMMA; /* VK_OEM_COMMA */ + case 189: return SDL_SCANCODE_MINUS; /* VK_OEM_MINUS */ + case 190: return SDL_SCANCODE_PERIOD; /* VK_OEM_PERIOD */ + case 191: return SDL_SCANCODE_SLASH; /* VK_OEM_2, '/?' key on US standard keyboards */ + case 192: return SDL_SCANCODE_GRAVE; /* VK_OEM_3, '`~' key on US standard keyboards */ + // ? + // ... reserved or unassigned ... + // ? + case 219: return SDL_SCANCODE_LEFTBRACKET; /* VK_OEM_4, '[{' key on US standard keyboards */ + case 220: return SDL_SCANCODE_BACKSLASH; /* VK_OEM_5, '\|' key on US standard keyboards */ + case 221: return SDL_SCANCODE_RIGHTBRACKET; /* VK_OEM_6, ']}' key on US standard keyboards */ + case 222: return SDL_SCANCODE_APOSTROPHE; /* VK_OEM_7, 'single/double quote' on US standard keyboards */ + default: break; + } + return SDL_SCANCODE_UNKNOWN; +} static SDL_Scancode -TranslateKeycode(int keycode) +WINRT_TranslateKeycode(int keycode, unsigned int nativeScancode) { - if (WinRT_Unofficial_Keycodes.empty()) { - /* Set up a table of undocumented (by Microsoft), WinRT-specific, - key codes: */ - // TODO, WinRT: move content declarations of WinRT_Unofficial_Keycodes into a C++11 initializer list, when possible - WinRT_Unofficial_Keycodes[220] = SDL_SCANCODE_GRAVE; - WinRT_Unofficial_Keycodes[222] = SDL_SCANCODE_BACKSLASH; + // TODO, WinRT: try filling out the WinRT keycode table as much as possible, using the Win32 table for interpretation hints + + SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; + + /* HACK ALERT: At least one VirtualKey constant (Shift) with a left/right + * designation might not get reported with its correct handedness, however + * its hardware scan code can fill in the gaps. If this is detected, + * use the hardware scan code to try telling if the left, or the right + * side's key was used. + * + * If Microsoft ever allows MapVirtualKey or MapVirtualKeyEx to be used + * in WinRT apps, or something similar to these (it doesn't appear to be, + * at least not for Windows [Phone] 8/8.1, as of Oct 24, 2014), then this + * hack might become deprecated, or obsolete. + */ + if (nativeScancode < SDL_arraysize(windows_scancode_table)) { + switch (keycode) { + case 16: // VirtualKey.Shift + switch (windows_scancode_table[nativeScancode]) { + case SDL_SCANCODE_LSHIFT: + case SDL_SCANCODE_RSHIFT: + return windows_scancode_table[nativeScancode]; + } + break; + + // Add others, as necessary. + // + // Unfortunately, this hack doesn't seem to work in determining + // handedness with Control keys. + + default: + break; + } } - /* Try to get a documented, WinRT, 'VirtualKey' first (as documented at + /* Try to get a documented, WinRT, 'VirtualKey' next (as documented at http://msdn.microsoft.com/en-us/library/windows/apps/windows.system.virtualkey.aspx ). If that fails, fall back to a Win32 virtual key. + If that fails, attempt to fall back to a scancode-derived key. */ - // TODO, WinRT: try filling out the WinRT keycode table as much as possible, using the Win32 table for interpretation hints - //SDL_Log("WinRT TranslateKeycode, keycode=%d\n", (int)keycode); - SDL_Scancode scancode = SDL_SCANCODE_UNKNOWN; if (keycode < SDL_arraysize(WinRT_Official_Keycodes)) { scancode = WinRT_Official_Keycodes[keycode]; } if (scancode == SDL_SCANCODE_UNKNOWN) { - if (WinRT_Unofficial_Keycodes.find(keycode) != WinRT_Unofficial_Keycodes.end()) { - scancode = WinRT_Unofficial_Keycodes[keycode]; - } + scancode = WINRT_TranslateUnofficialKeycode(keycode); } if (scancode == SDL_SCANCODE_UNKNOWN) { - if (keycode < SDL_arraysize(windows_scancode_table)) { - scancode = windows_scancode_table[keycode]; + if (nativeScancode < SDL_arraysize(windows_scancode_table)) { + scancode = windows_scancode_table[nativeScancode]; } } + /* if (scancode == SDL_SCANCODE_UNKNOWN) { SDL_Log("WinRT TranslateKeycode, unknown keycode=%d\n", (int)keycode); } + */ return scancode; } void WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args) { - SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey); + SDL_Scancode sdlScancode = WINRT_TranslateKeycode((int)args->VirtualKey, args->KeyStatus.ScanCode); #if 0 SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode); - SDL_Log("key down, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n", + SDL_Log("key down, handled=%s, ext?=%s, released?=%s, menu key down?=%s, " + "repeat count=%d, native scan code=0x%x, was down?=%s, vkey=%d, " + "sdl scan code=%d (%s), sdl key code=%d (%s)\n", (args->Handled ? "1" : "0"), (args->KeyStatus.IsExtendedKey ? "1" : "0"), (args->KeyStatus.IsKeyReleased ? "1" : "0"), @@ -269,7 +335,6 @@ WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args) keycode, SDL_GetKeyName(keycode)); //args->Handled = true; - //VirtualKey vkey = args->VirtualKey; #endif SDL_SendKeyboardKey(SDL_PRESSED, sdlScancode); } @@ -277,10 +342,12 @@ WINRT_ProcessKeyDownEvent(Windows::UI::Core::KeyEventArgs ^args) void WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args) { - SDL_Scancode sdlScancode = TranslateKeycode((int)args->VirtualKey); + SDL_Scancode sdlScancode = WINRT_TranslateKeycode((int)args->VirtualKey, args->KeyStatus.ScanCode); #if 0 SDL_Keycode keycode = SDL_GetKeyFromScancode(sdlScancode); - SDL_Log("key up, handled=%s, ext?=%s, released?=%s, menu key down?=%s, repeat count=%d, native scan code=%d, was down?=%s, vkey=%d, sdl scan code=%d (%s), sdl key code=%d (%s)\n", + SDL_Log("key up, handled=%s, ext?=%s, released?=%s, menu key down?=%s, " + "repeat count=%d, native scan code=0x%x, was down?=%s, vkey=%d, " + "sdl scan code=%d (%s), sdl key code=%d (%s)\n", (args->Handled ? "1" : "0"), (args->KeyStatus.IsExtendedKey ? "1" : "0"), (args->KeyStatus.IsKeyReleased ? "1" : "0"), @@ -298,4 +365,22 @@ WINRT_ProcessKeyUpEvent(Windows::UI::Core::KeyEventArgs ^args) SDL_SendKeyboardKey(SDL_RELEASED, sdlScancode); } +void +WINRT_ProcessCharacterReceivedEvent(Windows::UI::Core::CharacterReceivedEventArgs ^args) +{ + wchar_t src_ucs2[2]; + char dest_utf8[16]; + int result; + + /* Setup src */ + src_ucs2[0] = args->KeyCode; + src_ucs2[1] = L'\0'; + + /* Convert the text, then send an SDL_TEXTINPUT event. */ + result = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&src_ucs2, -1, (LPSTR)dest_utf8, sizeof(dest_utf8), NULL, NULL); + if (result > 0) { + SDL_SendKeyboardText(dest_utf8); + } +} + #endif // SDL_VIDEO_DRIVER_WINRT diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.cpp new file mode 100644 index 0000000000..ca958107c9 --- /dev/null +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.cpp @@ -0,0 +1,112 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_WINRT + +extern "C" { +#include "SDL_messagebox.h" +#include "../../core/windows/SDL_windows.h" +} + +#include "SDL_winrtevents_c.h" + +#include +using namespace Platform; +using namespace Windows::Foundation; +using namespace Windows::UI::Popups; + +static String ^ +WINRT_UTF8ToPlatformString(const char * str) +{ + wchar_t * wstr = WIN_UTF8ToString(str); + String ^ rtstr = ref new String(wstr); + SDL_free(wstr); + return rtstr; +} + +extern "C" int +WINRT_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) +{ +#if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) && (NTDDI_VERSION == NTDDI_WIN8) + /* Sadly, Windows Phone 8 doesn't include the MessageDialog class that + * Windows 8.x/RT does, even though MSDN's reference documentation for + * Windows Phone 8 mentions it. + * + * The .NET runtime on Windows Phone 8 does, however, include a + * MessageBox class. Perhaps this could be called, somehow? + */ + return SDL_SetError("SDL_messagebox support is not available for Windows Phone 8.0"); +#else + SDL_VideoDevice *_this = SDL_GetVideoDevice(); + +#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP + const int maxbuttons = 2; + const char * platform = "Windows Phone 8.1+"; +#else + const int maxbuttons = 3; + const char * platform = "Windows 8.x"; +#endif + + if (messageboxdata->numbuttons > maxbuttons) { + return SDL_SetError("WinRT's MessageDialog only supports %d buttons, at most, on %s. %d were requested.", + maxbuttons, platform, messageboxdata->numbuttons); + } + + /* Build a MessageDialog object and its buttons */ + MessageDialog ^ dialog = ref new MessageDialog(WINRT_UTF8ToPlatformString(messageboxdata->message)); + dialog->Title = WINRT_UTF8ToPlatformString(messageboxdata->title); + for (int i = 0; i < messageboxdata->numbuttons; ++i) { + UICommand ^ button = ref new UICommand(WINRT_UTF8ToPlatformString(messageboxdata->buttons[i].text)); + button->Id = safe_cast(i); + dialog->Commands->Append(button); + if (messageboxdata->buttons[i].flags & SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT) { + dialog->CancelCommandIndex = i; + } + if (messageboxdata->buttons[i].flags & SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT) { + dialog->DefaultCommandIndex = i; + } + } + + /* Display the MessageDialog, then wait for it to be closed */ + /* TODO, WinRT: Find a way to redraw MessageDialog instances if a GPU device-reset occurs during the following event-loop */ + auto operation = dialog->ShowAsync(); + while (operation->Status == Windows::Foundation::AsyncStatus::Started) { + WINRT_PumpEvents(_this); + } + + /* Retrieve results from the MessageDialog and process them accordingly */ + if (operation->Status != Windows::Foundation::AsyncStatus::Completed) { + return SDL_SetError("An unknown error occurred in displaying the WinRT MessageDialog"); + } + if (buttonid) { + IntPtr results = safe_cast(operation->GetResults()->Id); + int clicked_index = results.ToInt32(); + *buttonid = messageboxdata->buttons[clicked_index].buttonid; + } + return 0; +#endif /* if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP / else */ +} + +#endif /* SDL_VIDEO_DRIVER_WINRT */ + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.h b/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.h new file mode 100644 index 0000000000..4184aa5ee6 --- /dev/null +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.h @@ -0,0 +1,29 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ +#include "../../SDL_internal.h" + +#if SDL_VIDEO_DRIVER_WINRT + +extern int WINRT_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +#endif /* SDL_VIDEO_DRIVER_WINRT */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse.cpp index 4c04a211cb..d3140a4a4f 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse_c.h b/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse_c.h index 676669b347..464ba4d475 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse_c.h +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtmouse_c.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,6 +35,6 @@ extern SDL_bool WINRT_UsingRelativeMouseMode; } #endif -#endif /* _SDL_windowsmouse_h */ +#endif /* _SDL_winrtmouse_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.cpp index 6f3ddcedff..cca07fa1bc 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -20,8 +20,6 @@ */ #include "../../SDL_internal.h" -// TODO: WinRT, make this file compile via C code - #if SDL_VIDEO_DRIVER_WINRT && SDL_VIDEO_OPENGL_EGL /* EGL implementation of SDL OpenGL support */ @@ -29,13 +27,167 @@ #include "SDL_winrtvideo_cpp.h" extern "C" { #include "SDL_winrtopengles.h" +#include "SDL_loadso.h" } -#define EGL_D3D11_ONLY_DISPLAY_ANGLE ((NativeDisplayType) -3) +/* Windows includes */ +#include +using namespace Windows::UI::Core; + +/* ANGLE/WinRT constants */ +static const int ANGLE_D3D_FEATURE_LEVEL_ANY = 0; +#define EGL_PLATFORM_ANGLE_ANGLE 0x3202 +#define EGL_PLATFORM_ANGLE_TYPE_ANGLE 0x3203 +#define EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE 0x3204 +#define EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE 0x3205 +#define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208 +#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE 0x3209 +#define EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE 0x320B +#define EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE 0x320F + +#define EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER 0x320B + + +/* + * SDL/EGL top-level implementation + */ extern "C" int -WINRT_GLES_LoadLibrary(_THIS, const char *path) { - return SDL_EGL_LoadLibrary(_this, path, EGL_D3D11_ONLY_DISPLAY_ANGLE); +WINRT_GLES_LoadLibrary(_THIS, const char *path) +{ + SDL_VideoData *video_data = (SDL_VideoData *)_this->driverdata; + + if (SDL_EGL_LoadLibrary(_this, path, EGL_DEFAULT_DISPLAY) != 0) { + return -1; + } + + /* Load ANGLE/WinRT-specific functions */ + CreateWinrtEglWindow_Old_Function CreateWinrtEglWindow = (CreateWinrtEglWindow_Old_Function) SDL_LoadFunction(_this->egl_data->egl_dll_handle, "CreateWinrtEglWindow"); + if (CreateWinrtEglWindow) { + /* 'CreateWinrtEglWindow' was found, which means that an an older + * version of ANGLE/WinRT is being used. Continue setting up EGL, + * as appropriate to this version of ANGLE. + */ + + /* Create an ANGLE/WinRT EGL-window */ + /* TODO, WinRT: check for XAML usage before accessing the CoreWindow, as not doing so could lead to a crash */ + CoreWindow ^ native_win = CoreWindow::GetForCurrentThread(); + Microsoft::WRL::ComPtr cpp_win = reinterpret_cast(native_win); + HRESULT result = CreateWinrtEglWindow(cpp_win, ANGLE_D3D_FEATURE_LEVEL_ANY, &(video_data->winrtEglWindow)); + if (FAILED(result)) { + return -1; + } + + /* Call eglGetDisplay and eglInitialize as appropriate. On other + * platforms, this would probably get done by SDL_EGL_LoadLibrary, + * however ANGLE/WinRT's current implementation (as of Mar 22, 2014) of + * eglGetDisplay requires that a C++ object be passed into it, so the + * call will be made in this file, a C++ file, instead. + */ + Microsoft::WRL::ComPtr cpp_display = video_data->winrtEglWindow; + _this->egl_data->egl_display = ((eglGetDisplay_Old_Function)_this->egl_data->eglGetDisplay)(cpp_display); + if (!_this->egl_data->egl_display) { + return SDL_SetError("Could not get Windows 8.0 EGL display"); + } + + if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { + return SDL_SetError("Could not initialize Windows 8.0 EGL"); + } + } else { + /* Declare some ANGLE/EGL initialization property-sets, as suggested by + * MSOpenTech's ANGLE-for-WinRT template apps: + */ + const EGLint defaultDisplayAttributes[] = + { + EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, + EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, + EGL_NONE, + }; + + const EGLint fl9_3DisplayAttributes[] = + { + EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + EGL_PLATFORM_ANGLE_MAX_VERSION_MAJOR_ANGLE, 9, + EGL_PLATFORM_ANGLE_MAX_VERSION_MINOR_ANGLE, 3, + EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, + EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, + EGL_NONE, + }; + + const EGLint warpDisplayAttributes[] = + { + EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE, + EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_DEVICE_TYPE_WARP_ANGLE, + EGL_ANGLE_DISPLAY_ALLOW_RENDER_TO_BACK_BUFFER, EGL_TRUE, + EGL_PLATFORM_ANGLE_ENABLE_AUTOMATIC_TRIM_ANGLE, EGL_TRUE, + EGL_NONE, + }; + + /* 'CreateWinrtEglWindow' was NOT found, which either means that a + * newer version of ANGLE/WinRT is being used, or that we don't have + * a valid copy of ANGLE. + * + * Try loading ANGLE as if it were the newer version. + */ + eglGetPlatformDisplayEXT_Function eglGetPlatformDisplayEXT = (eglGetPlatformDisplayEXT_Function)_this->egl_data->eglGetProcAddress("eglGetPlatformDisplayEXT"); + if (!eglGetPlatformDisplayEXT) { + return SDL_SetError("Could not retrieve ANGLE/WinRT display function(s)"); + } + +#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) + /* Try initializing EGL at D3D11 Feature Level 10_0+ (which is not + * supported on WinPhone 8.x. + */ + _this->egl_data->egl_display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, defaultDisplayAttributes); + if (!_this->egl_data->egl_display) { + return SDL_SetError("Could not get 10_0+ EGL display"); + } + + if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) +#endif + { + /* Try initializing EGL at D3D11 Feature Level 9_3, in case the + * 10_0 init fails, or we're on Windows Phone (which only supports + * 9_3). + */ + _this->egl_data->egl_display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, fl9_3DisplayAttributes); + if (!_this->egl_data->egl_display) { + return SDL_SetError("Could not get 9_3 EGL display"); + } + + if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { + /* Try initializing EGL at D3D11 Feature Level 11_0 on WARP + * (a Windows-provided, software rasterizer) if all else fails. + */ + _this->egl_data->egl_display = eglGetPlatformDisplayEXT(EGL_PLATFORM_ANGLE_ANGLE, EGL_DEFAULT_DISPLAY, warpDisplayAttributes); + if (!_this->egl_data->egl_display) { + return SDL_SetError("Could not get WARP EGL display"); + } + + if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { + return SDL_SetError("Could not initialize WinRT 8.x+ EGL"); + } + } + } + } + + return 0; +} + +extern "C" void +WINRT_GLES_UnloadLibrary(_THIS) +{ + SDL_VideoData *video_data = (SDL_VideoData *)_this->driverdata; + + /* Release SDL's own COM reference to the ANGLE/WinRT IWinrtEglWindow */ + if (video_data->winrtEglWindow) { + video_data->winrtEglWindow->Release(); + video_data->winrtEglWindow = nullptr; + } + + /* Perform the bulk of the unloading */ + SDL_EGL_UnloadLibrary(_this); } extern "C" { diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.h b/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.h index f051132ebf..1da757b6cf 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.h +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtopengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,16 +31,38 @@ /* OpenGLES functions */ #define WINRT_GLES_GetAttribute SDL_EGL_GetAttribute #define WINRT_GLES_GetProcAddress SDL_EGL_GetProcAddress -#define WINRT_GLES_UnloadLibrary SDL_EGL_UnloadLibrary #define WINRT_GLES_SetSwapInterval SDL_EGL_SetSwapInterval #define WINRT_GLES_GetSwapInterval SDL_EGL_GetSwapInterval #define WINRT_GLES_DeleteContext SDL_EGL_DeleteContext extern int WINRT_GLES_LoadLibrary(_THIS, const char *path); +extern void WINRT_GLES_UnloadLibrary(_THIS); extern SDL_GLContext WINRT_GLES_CreateContext(_THIS, SDL_Window * window); extern void WINRT_GLES_SwapWindow(_THIS, SDL_Window * window); extern int WINRT_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context); + +#ifdef __cplusplus + +/* Typedefs for ANGLE/WinRT's C++-based native-display and native-window types, + * which are used when calling eglGetDisplay and eglCreateWindowSurface. + */ +typedef Microsoft::WRL::ComPtr WINRT_EGLNativeWindowType_Old; + +/* Function pointer typedefs for 'old' ANGLE/WinRT's functions, which may + * require that C++ objects be passed in: + */ +typedef EGLDisplay (EGLAPIENTRY *eglGetDisplay_Old_Function)(WINRT_EGLNativeWindowType_Old); +typedef EGLSurface (EGLAPIENTRY *eglCreateWindowSurface_Old_Function)(EGLDisplay, EGLConfig, WINRT_EGLNativeWindowType_Old, const EGLint *); +typedef HRESULT (EGLAPIENTRY *CreateWinrtEglWindow_Old_Function)(Microsoft::WRL::ComPtr, int, IUnknown ** result); + +#endif /* __cplusplus */ + +/* Function pointer typedefs for 'new' ANGLE/WinRT functions, which, unlike + * the old functions, do not require C++ support and work with plain C. + */ +typedef EGLDisplay (EGLAPIENTRY *eglGetPlatformDisplayEXT_Function)(EGLenum, void *, const EGLint *); + #endif /* SDL_VIDEO_DRIVER_WINRT && SDL_VIDEO_OPENGL_EGL */ #endif /* _SDL_winrtopengles_h */ diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtpointerinput.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtpointerinput.cpp index e3afffbaa1..1d648f966f 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtpointerinput.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtpointerinput.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -83,11 +83,11 @@ WINRT_TransformCursorPosition(SDL_Window * window, // Compute coordinates normalized from 0..1. // If the coordinates need to be sized to the SDL window, // we'll do that after. -#if WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP +#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION > NTDDI_WIN8) outputPosition.X = rawPosition.X / nativeWindow->Bounds.Width; outputPosition.Y = rawPosition.Y / nativeWindow->Bounds.Height; #else - switch (DisplayProperties::CurrentOrientation) + switch (WINRT_DISPLAY_PROPERTY(CurrentOrientation)) { case DisplayOrientations::Portrait: outputPosition.X = rawPosition.X / nativeWindow->Bounds.Width; @@ -233,8 +233,8 @@ void WINRT_ProcessPointerPressedEvent(SDL_Window *window, Windows::UI::Input::Po if (!WINRT_LeftFingerDown) { if (button) { - SDL_SendMouseMotion(window, 0, 0, (int)windowPoint.X, (int)windowPoint.Y); - SDL_SendMouseButton(window, 0, SDL_PRESSED, button); + SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, (int)windowPoint.X, (int)windowPoint.Y); + SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_PRESSED, button); } WINRT_LeftFingerDown = pointerPoint->PointerId; @@ -262,9 +262,9 @@ WINRT_ProcessPointerMovedEvent(SDL_Window *window, Windows::UI::Input::PointerPo if ( ! WINRT_IsTouchEvent(pointerPoint)) { SDL_SendMouseMotion(window, 0, 0, (int)windowPoint.X, (int)windowPoint.Y); - } else if (pointerPoint->PointerId == WINRT_LeftFingerDown) { + } else { if (pointerPoint->PointerId == WINRT_LeftFingerDown) { - SDL_SendMouseMotion(window, 0, 0, (int)windowPoint.X, (int)windowPoint.Y); + SDL_SendMouseMotion(window, SDL_TOUCH_MOUSEID, 0, (int)windowPoint.X, (int)windowPoint.Y); } SDL_SendTouchMotion( @@ -291,7 +291,7 @@ void WINRT_ProcessPointerReleasedEvent(SDL_Window *window, Windows::UI::Input::P if (WINRT_LeftFingerDown == pointerPoint->PointerId) { if (button) { - SDL_SendMouseButton(window, 0, SDL_RELEASED, button); + SDL_SendMouseButton(window, SDL_TOUCH_MOUSEID, SDL_RELEASED, button); } WINRT_LeftFingerDown = 0; } @@ -306,6 +306,28 @@ void WINRT_ProcessPointerReleasedEvent(SDL_Window *window, Windows::UI::Input::P } } +void WINRT_ProcessPointerEnteredEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint) +{ + if (!window) { + return; + } + + if (!WINRT_IsTouchEvent(pointerPoint)) { + SDL_SetMouseFocus(window); + } +} + +void WINRT_ProcessPointerExitedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint) +{ + if (!window) { + return; + } + + if (!WINRT_IsTouchEvent(pointerPoint)) { + SDL_SetMouseFocus(NULL); + } +} + void WINRT_ProcessPointerWheelChangedEvent(SDL_Window *window, Windows::UI::Input::PointerPoint ^pointerPoint) { @@ -315,7 +337,7 @@ WINRT_ProcessPointerWheelChangedEvent(SDL_Window *window, Windows::UI::Input::Po // FIXME: This may need to accumulate deltas up to WHEEL_DELTA short motion = pointerPoint->Properties->MouseWheelDelta / WHEEL_DELTA; - SDL_SendMouseWheel(window, 0, 0, motion); + SDL_SendMouseWheel(window, 0, 0, motion, SDL_MOUSEWHEEL_NORMAL); } void diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo.cpp b/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo.cpp index 4a5301f22a..9d7c1ccee3 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo.cpp +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo.cpp @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -30,7 +30,18 @@ /* Windows includes */ #include +#include +#include +#include +using namespace Windows::ApplicationModel::Core; +using namespace Windows::Foundation; +using namespace Windows::Graphics::Display; using namespace Windows::UI::Core; +using namespace Windows::UI::ViewManagement; + + +/* [re]declare Windows GUIDs locally, to limit the amount of external lib(s) SDL has to link to */ +static const GUID IID_IDXGIFactory2 = { 0x50c83a1c, 0xe072, 0x4c48,{ 0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0 } }; /* SDL includes */ @@ -43,6 +54,7 @@ extern "C" { #include "../../render/SDL_sysrender.h" #include "SDL_syswm.h" #include "SDL_winrtopengles.h" +#include "../../core/windows/SDL_windows.h" } #include "../../core/winrt/SDL_winrtapp_direct3d.h" @@ -52,6 +64,7 @@ extern "C" { #include "SDL_winrtmouse_c.h" #include "SDL_main.h" #include "SDL_system.h" +//#include "SDL_log.h" /* Initialization/Query functions */ @@ -63,13 +76,14 @@ static void WINRT_VideoQuit(_THIS); /* Window functions */ static int WINRT_CreateWindow(_THIS, SDL_Window * window); +static void WINRT_SetWindowSize(_THIS, SDL_Window * window); +static void WINRT_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen); static void WINRT_DestroyWindow(_THIS, SDL_Window * window); static SDL_bool WINRT_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info); /* SDL-internal globals: */ SDL_Window * WINRT_GlobalSDLWindow = NULL; -SDL_VideoDevice * WINRT_GlobalSDLVideoDevice = NULL; /* WinRT driver bootstrap functions */ @@ -83,9 +97,14 @@ WINRT_Available(void) static void WINRT_DeleteDevice(SDL_VideoDevice * device) { - if (device == WINRT_GlobalSDLVideoDevice) { - WINRT_GlobalSDLVideoDevice = NULL; + if (device->driverdata) { + SDL_VideoData * video_data = (SDL_VideoData *)device->driverdata; + if (video_data->winrtEglWindow) { + video_data->winrtEglWindow->Release(); + } + SDL_free(video_data); } + SDL_free(device); } @@ -93,6 +112,7 @@ static SDL_VideoDevice * WINRT_CreateDevice(int devindex) { SDL_VideoDevice *device; + SDL_VideoData *data; /* Initialize all variables that we clean on shutdown */ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); @@ -104,10 +124,20 @@ WINRT_CreateDevice(int devindex) return (0); } + data = (SDL_VideoData *) SDL_calloc(1, sizeof(SDL_VideoData)); + if (!data) { + SDL_OutOfMemory(); + return (0); + } + SDL_zerop(data); + device->driverdata = data; + /* Set the function pointers */ device->VideoInit = WINRT_VideoInit; device->VideoQuit = WINRT_VideoQuit; device->CreateWindow = WINRT_CreateWindow; + device->SetWindowSize = WINRT_SetWindowSize; + device->SetWindowFullscreen = WINRT_SetWindowFullscreen; device->DestroyWindow = WINRT_DestroyWindow; device->SetDisplayMode = WINRT_SetDisplayMode; device->PumpEvents = WINRT_PumpEvents; @@ -124,7 +154,6 @@ WINRT_CreateDevice(int devindex) device->GL_DeleteContext = WINRT_GLES_DeleteContext; #endif device->free = WINRT_DeleteDevice; - WINRT_GlobalSDLVideoDevice = device; return device; } @@ -147,110 +176,232 @@ WINRT_VideoInit(_THIS) return 0; } -int -WINRT_CalcDisplayModeUsingNativeWindow(SDL_DisplayMode * mode) -{ - SDL_DisplayModeData * driverdata; +extern "C" +Uint32 D3D11_DXGIFormatToSDLPixelFormat(DXGI_FORMAT dxgiFormat); - using namespace Windows::Graphics::Display; +static void +WINRT_DXGIModeToSDLDisplayMode(const DXGI_MODE_DESC * dxgiMode, SDL_DisplayMode * sdlMode) +{ + SDL_zerop(sdlMode); + sdlMode->w = dxgiMode->Width; + sdlMode->h = dxgiMode->Height; + sdlMode->refresh_rate = dxgiMode->RefreshRate.Numerator / dxgiMode->RefreshRate.Denominator; + sdlMode->format = D3D11_DXGIFormatToSDLPixelFormat(dxgiMode->Format); +} - // Go no further if a native window cannot be accessed. This can happen, - // for example, if this function is called from certain threads, such as - // the SDL/XAML thread. - if (!CoreWindow::GetForCurrentThread()) { - return SDL_SetError("SDL/WinRT display modes cannot be calculated outside of the main thread, such as in SDL's XAML thread"); +static int +WINRT_AddDisplaysForOutput (_THIS, IDXGIAdapter1 * dxgiAdapter1, int outputIndex) +{ + HRESULT hr; + IDXGIOutput * dxgiOutput = NULL; + DXGI_OUTPUT_DESC dxgiOutputDesc; + SDL_VideoDisplay display; + char * displayName = NULL; + UINT numModes; + DXGI_MODE_DESC * dxgiModes = NULL; + int functionResult = -1; /* -1 for failure, 0 for success */ + DXGI_MODE_DESC modeToMatch, closestMatch; + + SDL_zero(display); + + hr = dxgiAdapter1->EnumOutputs(outputIndex, &dxgiOutput); + if (FAILED(hr)) { + if (hr != DXGI_ERROR_NOT_FOUND) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIAdapter1::EnumOutputs failed", hr); + } + goto done; } - // Calculate the display size given the window size, taking into account - // the current display's DPI: -#if NTDDI_VERSION > NTDDI_WIN8 - const float currentDPI = DisplayInformation::GetForCurrentView()->LogicalDpi; -#else - const float currentDPI = Windows::Graphics::Display::DisplayProperties::LogicalDpi; -#endif - const float dipsPerInch = 96.0f; - const int w = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Width * currentDPI) / dipsPerInch); - const int h = (int) ((CoreWindow::GetForCurrentThread()->Bounds.Height * currentDPI) / dipsPerInch); - if (w == 0 || w == h) { - return SDL_SetError("Unable to calculate the WinRT window/display's size"); + hr = dxgiOutput->GetDesc(&dxgiOutputDesc); + if (FAILED(hr)) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIOutput::GetDesc failed", hr); + goto done; } - // Create a driverdata field: - driverdata = (SDL_DisplayModeData *) SDL_malloc(sizeof(*driverdata)); - if (!driverdata) { - return SDL_OutOfMemory(); - } - SDL_zerop(driverdata); - - // Fill in most fields: - SDL_zerop(mode); - mode->format = SDL_PIXELFORMAT_RGB888; - mode->refresh_rate = 0; // TODO, WinRT: see if refresh rate data is available, or relevant (for WinRT apps) - mode->w = w; - mode->h = h; - mode->driverdata = driverdata; -#if NTDDI_VERSION > NTDDI_WIN8 - driverdata->currentOrientation = DisplayInformation::GetForCurrentView()->CurrentOrientation; -#else - driverdata->currentOrientation = DisplayProperties::CurrentOrientation; -#endif + SDL_zero(modeToMatch); + modeToMatch.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + modeToMatch.Width = (dxgiOutputDesc.DesktopCoordinates.right - dxgiOutputDesc.DesktopCoordinates.left); + modeToMatch.Height = (dxgiOutputDesc.DesktopCoordinates.bottom - dxgiOutputDesc.DesktopCoordinates.top); + hr = dxgiOutput->FindClosestMatchingMode(&modeToMatch, &closestMatch, NULL); + if (hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE) { + /* DXGI_ERROR_NOT_CURRENTLY_AVAILABLE gets returned by IDXGIOutput::FindClosestMatchingMode + when running under the Windows Simulator, which uses Remote Desktop (formerly known as Terminal + Services) under the hood. According to the MSDN docs for the similar function, + IDXGIOutput::GetDisplayModeList, DXGI_ERROR_NOT_CURRENTLY_AVAILABLE is returned if and + when an app is run under a Terminal Services session, hence the assumption. + + In this case, just add an SDL display mode, with approximated values. + */ + SDL_DisplayMode mode; + SDL_zero(mode); + display.name = "Windows Simulator / Terminal Services Display"; + mode.w = (dxgiOutputDesc.DesktopCoordinates.right - dxgiOutputDesc.DesktopCoordinates.left); + mode.h = (dxgiOutputDesc.DesktopCoordinates.bottom - dxgiOutputDesc.DesktopCoordinates.top); + mode.format = DXGI_FORMAT_B8G8R8A8_UNORM; + mode.refresh_rate = 0; /* Display mode is unknown, so just fill in zero, as specified by SDL's header files */ + display.desktop_mode = mode; + display.current_mode = mode; + if ( ! SDL_AddDisplayMode(&display, &mode)) { + goto done; + } + } else if (FAILED(hr)) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIOutput::FindClosestMatchingMode failed", hr); + goto done; + } else { + displayName = WIN_StringToUTF8(dxgiOutputDesc.DeviceName); + display.name = displayName; + WINRT_DXGIModeToSDLDisplayMode(&closestMatch, &display.desktop_mode); + display.current_mode = display.desktop_mode; + + hr = dxgiOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, 0, &numModes, NULL); + if (FAILED(hr)) { + if (hr == DXGI_ERROR_NOT_CURRENTLY_AVAILABLE) { + // TODO, WinRT: make sure display mode(s) are added when using Terminal Services / Windows Simulator + } + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIOutput::GetDisplayModeList [get mode list size] failed", hr); + goto done; + } -#if WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP - // On Windows Phone, the native window's size is always in portrait, - // regardless of the device's orientation. This is in contrast to - // Windows 8/RT, which will resize the native window as the device's - // orientation changes. In order to compensate for this behavior, - // on Windows Phone, the mode's width and height will be swapped when - // the device is in a landscape (non-portrait) mode. - switch (DisplayProperties::CurrentOrientation) { - case DisplayOrientations::Landscape: - case DisplayOrientations::LandscapeFlipped: - { - const int tmp = mode->h; - mode->h = mode->w; - mode->w = tmp; - break; + dxgiModes = (DXGI_MODE_DESC *)SDL_calloc(numModes, sizeof(DXGI_MODE_DESC)); + if ( ! dxgiModes) { + SDL_OutOfMemory(); + goto done; } - default: - break; + hr = dxgiOutput->GetDisplayModeList(DXGI_FORMAT_B8G8R8A8_UNORM, 0, &numModes, dxgiModes); + if (FAILED(hr)) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIOutput::GetDisplayModeList [get mode contents] failed", hr); + goto done; + } + + for (UINT i = 0; i < numModes; ++i) { + SDL_DisplayMode sdlMode; + WINRT_DXGIModeToSDLDisplayMode(&dxgiModes[i], &sdlMode); + SDL_AddDisplayMode(&display, &sdlMode); + } } -#endif - return 0; + if (SDL_AddVideoDisplay(&display) < 0) { + goto done; + } + + functionResult = 0; /* 0 for Success! */ +done: + if (dxgiModes) { + SDL_free(dxgiModes); + } + if (dxgiOutput) { + dxgiOutput->Release(); + } + if (displayName) { + SDL_free(displayName); + } + return functionResult; } -int -WINRT_DuplicateDisplayMode(SDL_DisplayMode * dest, const SDL_DisplayMode * src) +static int +WINRT_AddDisplaysForAdapter (_THIS, IDXGIFactory2 * dxgiFactory2, int adapterIndex) { - SDL_DisplayModeData * driverdata; - driverdata = (SDL_DisplayModeData *) SDL_malloc(sizeof(*driverdata)); - if (!driverdata) { - return SDL_OutOfMemory(); + HRESULT hr; + IDXGIAdapter1 * dxgiAdapter1; + + hr = dxgiFactory2->EnumAdapters1(adapterIndex, &dxgiAdapter1); + if (FAILED(hr)) { + if (hr != DXGI_ERROR_NOT_FOUND) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", IDXGIFactory1::EnumAdapters1() failed", hr); + } + return -1; + } + + for (int outputIndex = 0; ; ++outputIndex) { + if (WINRT_AddDisplaysForOutput(_this, dxgiAdapter1, outputIndex) < 0) { + /* HACK: The Windows App Certification Kit 10.0 can fail, when + running the Store Apps' test, "Direct3D Feature Test". The + certification kit's error is: + + "Application App was not running at the end of the test. It likely crashed or was terminated for having become unresponsive." + + This was caused by SDL/WinRT's DXGI failing to report any + outputs. Attempts to get the 1st display-output from the + 1st display-adapter can fail, with IDXGIAdapter::EnumOutputs + returning DXGI_ERROR_NOT_FOUND. This could be a bug in Windows, + the Windows App Certification Kit, or possibly in SDL/WinRT's + display detection code. Either way, try to detect when this + happens, and use a hackish means to create a reasonable-as-possible + 'display mode'. -- DavidL + */ + if (adapterIndex == 0 && outputIndex == 0) { + SDL_VideoDisplay display; + SDL_DisplayMode mode; +#if SDL_WINRT_USE_APPLICATIONVIEW + ApplicationView ^ appView = ApplicationView::GetForCurrentView(); +#endif + CoreWindow ^ coreWin = CoreWindow::GetForCurrentThread(); + SDL_zero(display); + SDL_zero(mode); + display.name = "DXGI Display-detection Workaround"; + + /* HACK: ApplicationView's VisibleBounds property, appeared, via testing, to + give a better approximation of display-size, than did CoreWindow's + Bounds property, insofar that ApplicationView::VisibleBounds seems like + it will, at least some of the time, give the full display size (during the + failing test), whereas CoreWindow might not. -- DavidL + */ + +#if (NTDDI_VERSION >= NTDDI_WIN10) || (SDL_WINRT_USE_APPLICATIONVIEW && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) + mode.w = WINRT_DIPS_TO_PHYSICAL_PIXELS(appView->VisibleBounds.Width); + mode.h = WINRT_DIPS_TO_PHYSICAL_PIXELS(appView->VisibleBounds.Height); +#else + /* On platform(s) that do not support VisibleBounds, such as Windows 8.1, + fall back to CoreWindow's Bounds property. + */ + mode.w = WINRT_DIPS_TO_PHYSICAL_PIXELS(coreWin->Bounds.Width); + mode.h = WINRT_DIPS_TO_PHYSICAL_PIXELS(coreWin->Bounds.Height); +#endif + + mode.format = DXGI_FORMAT_B8G8R8A8_UNORM; + mode.refresh_rate = 0; /* Display mode is unknown, so just fill in zero, as specified by SDL's header files */ + display.desktop_mode = mode; + display.current_mode = mode; + if ((SDL_AddDisplayMode(&display, &mode) < 0) || + (SDL_AddVideoDisplay(&display) < 0)) + { + return SDL_SetError("Failed to apply DXGI Display-detection workaround"); + } + } + + break; + } } - SDL_memcpy(driverdata, src->driverdata, sizeof(SDL_DisplayModeData)); - SDL_memcpy(dest, src, sizeof(SDL_DisplayMode)); - dest->driverdata = driverdata; + + dxgiAdapter1->Release(); return 0; } int WINRT_InitModes(_THIS) { - // Retrieve the display mode: - SDL_DisplayMode mode, desktop_mode; - if (WINRT_CalcDisplayModeUsingNativeWindow(&mode) != 0) { - return -1; // If WINRT_CalcDisplayModeUsingNativeWindow fails, it'll already have set the SDL error - } + /* HACK: Initialize a single display, for whatever screen the app's + CoreApplicationView is on. + TODO, WinRT: Try initializing multiple displays, one for each monitor. + Appropriate WinRT APIs for this seem elusive, though. -- DavidL + */ - if (WINRT_DuplicateDisplayMode(&desktop_mode, &mode) != 0) { + HRESULT hr; + IDXGIFactory2 * dxgiFactory2 = NULL; + + hr = CreateDXGIFactory1(IID_IDXGIFactory2, (void **)&dxgiFactory2); + if (FAILED(hr)) { + WIN_SetErrorFromHRESULT(__FUNCTION__ ", CreateDXGIFactory1() failed", hr); return -1; } - if (SDL_AddBasicVideoDisplay(&desktop_mode) < 0) { - return -1; + + for (int adapterIndex = 0; ; ++adapterIndex) { + if (WINRT_AddDisplaysForAdapter(_this, dxgiFactory2, adapterIndex) < 0) { + break; + } } - SDL_AddDisplayMode(&_this->displays[0], &mode); return 0; } @@ -266,6 +417,121 @@ WINRT_VideoQuit(_THIS) WINRT_QuitMouse(_this); } +static const Uint32 WINRT_DetectableFlags = + SDL_WINDOW_MAXIMIZED | + SDL_WINDOW_FULLSCREEN_DESKTOP | + SDL_WINDOW_SHOWN | + SDL_WINDOW_HIDDEN | + SDL_WINDOW_MOUSE_FOCUS; + +extern "C" Uint32 +WINRT_DetectWindowFlags(SDL_Window * window) +{ + Uint32 latestFlags = 0; + SDL_WindowData * data = (SDL_WindowData *) window->driverdata; + bool is_fullscreen = false; + +#if SDL_WINRT_USE_APPLICATIONVIEW + if (data->appView) { + is_fullscreen = data->appView->IsFullScreen; + } +#elif (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION == NTDDI_WIN8) + is_fullscreen = true; +#endif + + if (data->coreWindow.Get()) { + if (is_fullscreen) { + SDL_VideoDisplay * display = SDL_GetDisplayForWindow(window); + int w = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Width); + int h = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Height); + +#if (WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP) || (NTDDI_VERSION > NTDDI_WIN8) + // On all WinRT platforms, except for WinPhone 8.0, rotate the + // window size. This is needed to properly calculate + // fullscreen vs. maximized. + const DisplayOrientations currentOrientation = WINRT_DISPLAY_PROPERTY(CurrentOrientation); + switch (currentOrientation) { +#if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) + case DisplayOrientations::Landscape: + case DisplayOrientations::LandscapeFlipped: +#else + case DisplayOrientations::Portrait: + case DisplayOrientations::PortraitFlipped: +#endif + { + int tmp = w; + w = h; + h = tmp; + } break; + } +#endif + + if (display->desktop_mode.w != w || display->desktop_mode.h != h) { + latestFlags |= SDL_WINDOW_MAXIMIZED; + } else { + latestFlags |= SDL_WINDOW_FULLSCREEN_DESKTOP; + } + } + + if (data->coreWindow->Visible) { + latestFlags |= SDL_WINDOW_SHOWN; + } else { + latestFlags |= SDL_WINDOW_HIDDEN; + } + +#if (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) && (NTDDI_VERSION < NTDDI_WINBLUE) + // data->coreWindow->PointerPosition is not supported on WinPhone 8.0 + latestFlags |= SDL_WINDOW_MOUSE_FOCUS; +#else + if (data->coreWindow->Bounds.Contains(data->coreWindow->PointerPosition)) { + latestFlags |= SDL_WINDOW_MOUSE_FOCUS; + } +#endif + } + + return latestFlags; +} + +// TODO, WinRT: consider removing WINRT_UpdateWindowFlags, and just calling WINRT_DetectWindowFlags as-appropriate (with appropriate calls to SDL_SendWindowEvent) +void +WINRT_UpdateWindowFlags(SDL_Window * window, Uint32 mask) +{ + mask &= WINRT_DetectableFlags; + if (window) { + Uint32 apply = WINRT_DetectWindowFlags(window); + if ((apply & mask) & SDL_WINDOW_FULLSCREEN) { + window->last_fullscreen_flags = window->flags; // seems necessary to programmatically un-fullscreen, via SDL APIs + } + window->flags = (window->flags & ~mask) | (apply & mask); + } +} + +static bool +WINRT_IsCoreWindowActive(CoreWindow ^ coreWindow) +{ + /* WinRT does not appear to offer API(s) to determine window-activation state, + at least not that I am aware of in Win8 - Win10. As such, SDL tracks this + itself, via window-activation events. + + If there *is* an API to track this, it should probably get used instead + of the following hack (that uses "SDLHelperWindowActivationState"). + -- DavidL. + */ + if (coreWindow->CustomProperties->HasKey("SDLHelperWindowActivationState")) { + CoreWindowActivationState activationState = \ + safe_cast(coreWindow->CustomProperties->Lookup("SDLHelperWindowActivationState")); + return (activationState != CoreWindowActivationState::Deactivated); + } + + /* Assume that non-SDL tracked windows are active, although this should + probably be avoided, if possible. + + This might not even be possible, in normal SDL use, at least as of + this writing (Dec 22, 2015; via latest hg.libsdl.org/SDL clone) -- DavidL + */ + return true; +} + int WINRT_CreateWindow(_THIS, SDL_Window * window) { @@ -276,7 +542,7 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) return -1; } - SDL_WindowData *data = new SDL_WindowData; + SDL_WindowData *data = new SDL_WindowData; /* use 'new' here as SDL_WindowData may use WinRT/C++ types */ if (!data) { SDL_OutOfMemory(); return -1; @@ -292,8 +558,14 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) */ if (!WINRT_XAMLWasEnabled) { data->coreWindow = CoreWindow::GetForCurrentThread(); +#if SDL_WINRT_USE_APPLICATIONVIEW + data->appView = ApplicationView::GetForCurrentView(); +#endif } + /* Make note of the requested window flags, before they start getting changed. */ + const Uint32 requestedFlags = window->flags; + #if SDL_VIDEO_OPENGL_EGL /* Setup the EGL surface, but only if OpenGL ES 2 was requested. */ if (!(window->flags & SDL_WINDOW_OPENGL)) { @@ -301,45 +573,54 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) data->egl_surface = EGL_NO_SURFACE; } else { /* OpenGL ES 2 was reuqested. Set up an EGL surface. */ + SDL_VideoData * video_data = (SDL_VideoData *)_this->driverdata; - /* HACK: ANGLE/WinRT currently uses non-pointer, C++ objects to represent - native windows. The object only contains a single pointer to a COM - interface pointer, which on x86 appears to be castable to the object - without apparant problems. On other platforms, notable ARM and x64, - doing so will cause a crash. To avoid this crash, we'll bypass - SDL's normal call to eglCreateWindowSurface, which is invoked from C - code, and call it here, where an appropriate C++ object may be - passed in. + /* Call SDL_EGL_ChooseConfig and eglCreateWindowSurface directly, + * rather than via SDL_EGL_CreateSurface, as older versions of + * ANGLE/WinRT may require that a C++ object, ComPtr, + * be passed into eglCreateWindowSurface. */ - typedef EGLSurface (*eglCreateWindowSurfaceFunction)(EGLDisplay dpy, EGLConfig config, - Microsoft::WRL::ComPtr win, - const EGLint *attrib_list); - eglCreateWindowSurfaceFunction WINRT_eglCreateWindowSurface = - (eglCreateWindowSurfaceFunction) _this->egl_data->eglCreateWindowSurface; - - Microsoft::WRL::ComPtr nativeWindow = reinterpret_cast(data->coreWindow.Get()); - data->egl_surface = WINRT_eglCreateWindowSurface( - _this->egl_data->egl_display, - _this->egl_data->egl_config, - nativeWindow, NULL); - if (data->egl_surface == NULL) { - // TODO, WinRT: see if eglCreateWindowSurface, or its callee(s), sets an error message. If so, attach it to the SDL error. - return SDL_SetError("eglCreateWindowSurface failed"); + if (SDL_EGL_ChooseConfig(_this) != 0) { + char buf[512]; + SDL_snprintf(buf, sizeof(buf), "SDL_EGL_ChooseConfig failed: %s", SDL_GetError()); + return SDL_SetError("%s", buf); + } + + if (video_data->winrtEglWindow) { /* ... is the 'old' version of ANGLE/WinRT being used? */ + /* Attempt to create a window surface using older versions of + * ANGLE/WinRT: + */ + Microsoft::WRL::ComPtr cpp_winrtEglWindow = video_data->winrtEglWindow; + data->egl_surface = ((eglCreateWindowSurface_Old_Function)_this->egl_data->eglCreateWindowSurface)( + _this->egl_data->egl_display, + _this->egl_data->egl_config, + cpp_winrtEglWindow, NULL); + if (data->egl_surface == NULL) { + return SDL_SetError("eglCreateWindowSurface failed"); + } + } else if (data->coreWindow.Get() != nullptr) { + /* Attempt to create a window surface using newer versions of + * ANGLE/WinRT: + */ + IInspectable * coreWindowAsIInspectable = reinterpret_cast(data->coreWindow.Get()); + data->egl_surface = _this->egl_data->eglCreateWindowSurface( + _this->egl_data->egl_display, + _this->egl_data->egl_config, + coreWindowAsIInspectable, + NULL); + if (data->egl_surface == NULL) { + return SDL_SetError("eglCreateWindowSurface failed"); + } + } else { + return SDL_SetError("No supported means to create an EGL window surface are available"); } } #endif - /* Make sure the window is considered to be positioned at {0,0}, - and is considered fullscreen, shown, and the like. - */ - window->x = 0; - window->y = 0; + /* Determine as many flags dynamically, as possible. */ window->flags = - SDL_WINDOW_FULLSCREEN | - SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS | - SDL_WINDOW_MAXIMIZED | - SDL_WINDOW_INPUT_GRABBED; + SDL_WINDOW_RESIZABLE; #if SDL_VIDEO_OPENGL_EGL if (data->egl_surface) { @@ -347,20 +628,55 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) } #endif - /* WinRT does not, as of this writing, appear to support app-adjustable - window sizes. Set the window size to whatever the native WinRT - CoreWindow is set at. + if (WINRT_XAMLWasEnabled) { + /* TODO, WinRT: set SDL_Window size, maybe position too, from XAML control */ + window->x = 0; + window->y = 0; + window->flags |= SDL_WINDOW_SHOWN; + SDL_SetMouseFocus(NULL); // TODO: detect this + SDL_SetKeyboardFocus(NULL); // TODO: detect this + } else { + /* WinRT 8.x apps seem to live in an environment where the OS controls the + app's window size, with some apps being fullscreen, depending on + user choice of various things. For now, just adapt the SDL_Window to + whatever Windows set-up as the native-window's geometry. + */ + window->x = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Left); + window->y = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Top); +#if NTDDI_VERSION < NTDDI_WIN10 + /* On WinRT 8.x / pre-Win10, just use the size we were given. */ + window->w = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Width); + window->h = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Height); +#else + /* On Windows 10, we occasionally get control over window size. For windowed + mode apps, try this. + */ + bool didSetSize = false; + if (!(requestedFlags & SDL_WINDOW_FULLSCREEN)) { + const Windows::Foundation::Size size(WINRT_PHYSICAL_PIXELS_TO_DIPS(window->w), + WINRT_PHYSICAL_PIXELS_TO_DIPS(window->h)); + didSetSize = data->appView->TryResizeView(size); + } + if (!didSetSize) { + /* We either weren't able to set the window size, or a request for + fullscreen was made. Get window-size info from the OS. + */ + window->w = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Width); + window->h = WINRT_DIPS_TO_PHYSICAL_PIXELS(data->coreWindow->Bounds.Height); + } +#endif - TODO, WinRT: if and when non-fullscreen XAML control support is added to SDL, consider making those resizable via SDL_Window's interfaces. - */ - window->w = _this->displays[0].current_mode.w; - window->h = _this->displays[0].current_mode.h; - - /* For now, treat WinRT apps as if they always have focus. - TODO, WinRT: try tracking keyboard and mouse focus state with respect to snapped apps - */ - SDL_SetMouseFocus(window); - SDL_SetKeyboardFocus(window); + WINRT_UpdateWindowFlags( + window, + 0xffffffff /* Update any window flag(s) that WINRT_UpdateWindow can handle */ + ); + + /* Try detecting if the window is active */ + bool isWindowActive = WINRT_IsCoreWindowActive(data->coreWindow.Get()); + if (isWindowActive) { + SDL_SetKeyboardFocus(window); + } + } /* Make sure the WinRT app's IFramworkView can post events on behalf of SDL: @@ -371,6 +687,38 @@ WINRT_CreateWindow(_THIS, SDL_Window * window) return 0; } +void +WINRT_SetWindowSize(_THIS, SDL_Window * window) +{ +#if NTDDI_VERSION >= NTDDI_WIN10 + SDL_WindowData * data = (SDL_WindowData *)window->driverdata; + const Windows::Foundation::Size size(WINRT_PHYSICAL_PIXELS_TO_DIPS(window->w), + WINRT_PHYSICAL_PIXELS_TO_DIPS(window->h)); + data->appView->TryResizeView(size); // TODO, WinRT: return failure (to caller?) from TryResizeView() +#endif +} + +void +WINRT_SetWindowFullscreen(_THIS, SDL_Window * window, SDL_VideoDisplay * display, SDL_bool fullscreen) +{ +#if NTDDI_VERSION >= NTDDI_WIN10 + SDL_WindowData * data = (SDL_WindowData *)window->driverdata; + bool isWindowActive = WINRT_IsCoreWindowActive(data->coreWindow.Get()); + if (isWindowActive) { + if (fullscreen) { + if (!data->appView->IsFullScreenMode) { + data->appView->TryEnterFullScreenMode(); // TODO, WinRT: return failure (to caller?) from TryEnterFullScreenMode() + } + } else { + if (data->appView->IsFullScreenMode) { + data->appView->ExitFullScreenMode(); + } + } + } +#endif +} + + void WINRT_DestroyWindow(_THIS, SDL_Window * window) { @@ -384,6 +732,7 @@ WINRT_DestroyWindow(_THIS, SDL_Window * window) // Delete the internal window data: delete data; data = NULL; + window->driverdata = NULL; } } diff --git a/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo_cpp.h b/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo_cpp.h index b5f44510d5..26eb008d4d 100644 --- a/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo_cpp.h +++ b/Engine/lib/sdl/src/video/winrt/SDL_winrtvideo_cpp.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,11 +29,24 @@ #include "SDL_video.h" #include "SDL_events.h" +#if NTDDI_VERSION >= NTDDI_WINBLUE /* ApplicationView's functionality only becomes + useful for SDL in Win[Phone] 8.1 and up. + Plus, it is not available at all in WinPhone 8.0. */ +#define SDL_WINRT_USE_APPLICATIONVIEW 1 +#endif + extern "C" { #include "../SDL_sysvideo.h" #include "../SDL_egl_c.h" } +/* Private display data */ +typedef struct SDL_VideoData { + /* An object created by ANGLE/WinRT (OpenGL ES 2 for WinRT) that gets + * passed to eglGetDisplay and eglCreateWindowSurface: + */ + IUnknown *winrtEglWindow; +} SDL_VideoData; /* The global, WinRT, SDL Window. For now, SDL/WinRT only supports one window (due to platform limitations of @@ -41,31 +54,31 @@ extern "C" { */ extern SDL_Window * WINRT_GlobalSDLWindow; -/* The global, WinRT, video device. */ -extern SDL_VideoDevice * WINRT_GlobalSDLVideoDevice; - -/* Creates a display mode for Plain Direct3D (non-XAML) apps, using the lone, native window's settings. - - Pass in an allocated SDL_DisplayMode field to store the data in. - - This function will return 0 on success, -1 on failure. - - If this function succeeds, be sure to call SDL_free on the - SDL_DisplayMode's driverdata field. +/* Updates one or more SDL_Window flags, by querying the OS' native windowing APIs. + SDL_Window flags that can be updated should be specified in 'mask'. */ -extern int WINRT_CalcDisplayModeUsingNativeWindow(SDL_DisplayMode * mode); - -/* Duplicates a display mode, copying over driverdata as necessary */ -extern int WINRT_DuplicateDisplayMode(SDL_DisplayMode * dest, const SDL_DisplayMode * src); +extern void WINRT_UpdateWindowFlags(SDL_Window * window, Uint32 mask); +extern "C" Uint32 WINRT_DetectWindowFlags(SDL_Window * window); /* detects flags w/o applying them */ /* Display mode internals */ -typedef struct -{ - Windows::Graphics::Display::DisplayOrientations currentOrientation; -} SDL_DisplayModeData; +//typedef struct +//{ +// Windows::Graphics::Display::DisplayOrientations currentOrientation; +//} SDL_DisplayModeData; #ifdef __cplusplus_winrt +/* A convenience macro to get a WinRT display property */ +#if NTDDI_VERSION > NTDDI_WIN8 +#define WINRT_DISPLAY_PROPERTY(NAME) (Windows::Graphics::Display::DisplayInformation::GetForCurrentView()->NAME) +#else +#define WINRT_DISPLAY_PROPERTY(NAME) (Windows::Graphics::Display::DisplayProperties::NAME) +#endif + +/* Converts DIPS to/from physical pixels */ +#define WINRT_DIPS_TO_PHYSICAL_PIXELS(DIPS) ((int)(0.5f + (((float)(DIPS) * (float)WINRT_DISPLAY_PROPERTY(LogicalDpi)) / 96.f))) +#define WINRT_PHYSICAL_PIXELS_TO_DIPS(PHYSPIX) (((float)(PHYSPIX) * 96.f)/WINRT_DISPLAY_PROPERTY(LogicalDpi)) + /* Internal window data */ struct SDL_WindowData { @@ -74,6 +87,9 @@ struct SDL_WindowData #ifdef SDL_VIDEO_OPENGL_EGL EGLSurface egl_surface; #endif +#if SDL_WINRT_USE_APPLICATIONVIEW + Windows::UI::ViewManagement::ApplicationView ^ appView; +#endif }; #endif // ifdef __cplusplus_winrt diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.c b/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.c index 2999d9837e..34c0a71c69 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -49,6 +49,14 @@ GetWindow(_THIS) return None; } +/* We use our own cut-buffer for intermediate storage instead of + XA_CUT_BUFFER0 because their use isn't really defined for holding UTF8. */ +Atom +X11_GetSDLCutBufferClipboardType(Display *display) +{ + return X11_XInternAtom(display, "SDL_CUTBUFFER", False); +} + int X11_SetClipboardText(_THIS, const char *text) { @@ -66,7 +74,7 @@ X11_SetClipboardText(_THIS, const char *text) /* Save the selection on the root window */ format = TEXT_FORMAT; X11_XChangeProperty(display, DefaultRootWindow(display), - XA_CUT_BUFFER0, format, 8, PropModeReplace, + X11_GetSDLCutBufferClipboardType(display), format, 8, PropModeReplace, (const unsigned char *)text, SDL_strlen(text)); if (XA_CLIPBOARD != None && @@ -109,9 +117,14 @@ X11_GetClipboardText(_THIS) window = GetWindow(_this); format = TEXT_FORMAT; owner = X11_XGetSelectionOwner(display, XA_CLIPBOARD); - if ((owner == None) || (owner == window)) { + if (owner == None) { + /* Fall back to ancient X10 cut-buffers which do not support UTF8 strings*/ owner = DefaultRootWindow(display); selection = XA_CUT_BUFFER0; + format = XA_STRING; + } else if (owner == window) { + owner = DefaultRootWindow(display); + selection = X11_GetSDLCutBufferClipboardType(display); } else { /* Request that the selection owner copy the data to our window */ owner = window; diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.h b/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.h index 46291cf608..15dae7dfdc 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11clipboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,7 @@ extern int X11_SetClipboardText(_THIS, const char *text); extern char *X11_GetClipboardText(_THIS); extern SDL_bool X11_HasClipboardText(_THIS); +extern Atom X11_GetSDLCutBufferClipboardType(Display *display); #endif /* _SDL_x11clipboard_h */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11dyn.c b/Engine/lib/sdl/src/video/x11/SDL_x11dyn.c index 97760ba322..7cbfa3e97d 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11dyn.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11dyn.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -207,7 +207,7 @@ SDL_X11_LoadSymbols(void) #else /* no dynamic X11 */ #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1; /* default yes */ -#define SDL_X11_SYM(a,fn,x,y,z) X11_##fn = fn; +#define SDL_X11_SYM(a,fn,x,y,z) X11_##fn = (SDL_DYNX11FN_##fn) fn; #include "SDL_x11sym.h" #undef SDL_X11_MODULE #undef SDL_X11_SYM diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11dyn.h b/Engine/lib/sdl/src/video/x11/SDL_x11dyn.h index 7d2e077c6a..136609b857 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11dyn.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11dyn.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -50,6 +50,9 @@ #if SDL_VIDEO_DRIVER_X11_XCURSOR #include #endif +#if SDL_VIDEO_DRIVER_X11_XDBE +#include +#endif #if SDL_VIDEO_DRIVER_X11_XINERAMA #include #endif diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11events.c b/Engine/lib/sdl/src/video/x11/SDL_x11events.c index ad3c59d6a7..208009607f 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11events.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11events.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -40,6 +40,44 @@ #include +/*#define DEBUG_XEVENTS*/ + +#ifndef _NET_WM_MOVERESIZE_SIZE_TOPLEFT +#define _NET_WM_MOVERESIZE_SIZE_TOPLEFT 0 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_TOP +#define _NET_WM_MOVERESIZE_SIZE_TOP 1 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_TOPRIGHT +#define _NET_WM_MOVERESIZE_SIZE_TOPRIGHT 2 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_RIGHT +#define _NET_WM_MOVERESIZE_SIZE_RIGHT 3 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT +#define _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT 4 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_BOTTOM +#define _NET_WM_MOVERESIZE_SIZE_BOTTOM 5 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT +#define _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT 6 +#endif + +#ifndef _NET_WM_MOVERESIZE_SIZE_LEFT +#define _NET_WM_MOVERESIZE_SIZE_LEFT 7 +#endif + +#ifndef _NET_WM_MOVERESIZE_MOVE +#define _NET_WM_MOVERESIZE_MOVE 8 +#endif + typedef struct { unsigned char *data; int format, count; @@ -96,7 +134,6 @@ static Atom X11_PickTargetFromAtoms(Display *disp, Atom a0, Atom a1, Atom a2) if (a2 != None) atom[count++] = a2; return X11_PickTarget(disp, atom, count); } -/* #define DEBUG_XEVENTS */ struct KeyRepeatCheckData { @@ -130,48 +167,95 @@ static SDL_bool X11_KeyRepeat(Display *display, XEvent *event) return d.found; } -static Bool X11_IsWheelCheckIfEvent(Display *display, XEvent *chkev, - XPointer arg) +static SDL_bool +X11_IsWheelEvent(Display * display,XEvent * event,int * xticks,int * yticks) { - XEvent *event = (XEvent *) arg; - /* we only handle buttons 4 and 5 - false positive avoidance */ - if (chkev->type == ButtonRelease && - (event->xbutton.button == Button4 || event->xbutton.button == Button5) && - chkev->xbutton.button == event->xbutton.button && - chkev->xbutton.time == event->xbutton.time) - return True; - return False; + /* according to the xlib docs, no specific mouse wheel events exist. + However, the defacto standard is that the vertical wheel is X buttons + 4 (up) and 5 (down) and a horizontal wheel is 6 (left) and 7 (right). */ + + /* Xlib defines "Button1" through 5, so we just use literals here. */ + switch (event->xbutton.button) { + case 4: *yticks = 1; return SDL_TRUE; + case 5: *yticks = -1; return SDL_TRUE; + case 6: *xticks = 1; return SDL_TRUE; + case 7: *xticks = -1; return SDL_TRUE; + default: break; + } + return SDL_FALSE; } -static SDL_bool X11_IsWheelEvent(Display * display,XEvent * event,int * ticks) -{ - XEvent relevent; - if (X11_XPending(display)) { - /* according to the xlib docs, no specific mouse wheel events exist. - however, mouse wheel events trigger a button press and a button release - immediately. thus, checking if the same button was released at the same - time as it was pressed, should be an adequate hack to derive a mouse - wheel event. - However, there is broken and unusual hardware out there... - - False positive: a button for which a release event is - generated (or synthesised) immediately. - - False negative: a wheel which, when rolled, doesn't have - a release event generated immediately. */ - if (X11_XCheckIfEvent(display, &relevent, X11_IsWheelCheckIfEvent, - (XPointer) event)) { - - /* by default, X11 only knows 5 buttons. on most 3 button + wheel mouse, - Button4 maps to wheel up, Button5 maps to wheel down. */ - if (event->xbutton.button == Button4) { - *ticks = 1; +/* Decodes URI escape sequences in string buf of len bytes + (excluding the terminating NULL byte) in-place. Since + URI-encoded characters take three times the space of + normal characters, this should not be an issue. + + Returns the number of decoded bytes that wound up in + the buffer, excluding the terminating NULL byte. + + The buffer is guaranteed to be NULL-terminated but + may contain embedded NULL bytes. + + On error, -1 is returned. + */ +int X11_URIDecode(char *buf, int len) { + int ri, wi, di; + char decode = '\0'; + if (buf == NULL || len < 0) { + errno = EINVAL; + return -1; + } + if (len == 0) { + len = SDL_strlen(buf); + } + for (ri = 0, wi = 0, di = 0; ri < len && wi < len; ri += 1) { + if (di == 0) { + /* start decoding */ + if (buf[ri] == '%') { + decode = '\0'; + di += 1; + continue; + } + /* normal write */ + buf[wi] = buf[ri]; + wi += 1; + continue; + } else if (di == 1 || di == 2) { + char off = '\0'; + char isa = buf[ri] >= 'a' && buf[ri] <= 'f'; + char isA = buf[ri] >= 'A' && buf[ri] <= 'F'; + char isn = buf[ri] >= '0' && buf[ri] <= '9'; + if (!(isa || isA || isn)) { + /* not a hexadecimal */ + int sri; + for (sri = ri - di; sri <= ri; sri += 1) { + buf[wi] = buf[sri]; + wi += 1; + } + di = 0; + continue; + } + /* itsy bitsy magicsy */ + if (isn) { + off = 0 - '0'; + } else if (isa) { + off = 10 - 'a'; + } else if (isA) { + off = 10 - 'A'; } - else if (event->xbutton.button == Button5) { - *ticks = -1; + decode |= (buf[ri] + off) << (2 - di) * 4; + if (di == 2) { + buf[wi] = decode; + wi += 1; + di = 0; + } else { + di += 1; } - return SDL_TRUE; + continue; } } - return SDL_FALSE; + buf[wi] = '\0'; + return wi; } /* Convert URI to local filename @@ -184,25 +268,27 @@ static char* X11_URIToLocal(char* uri) { if (memcmp(uri,"file:/",6) == 0) uri += 6; /* local file? */ else if (strstr(uri,":/") != NULL) return file; /* wrong scheme */ - local = uri[0] != '/' || ( uri[0] != '\0' && uri[1] == '/' ); + local = uri[0] != '/' || (uri[0] != '\0' && uri[1] == '/'); /* got a hostname? */ - if ( !local && uri[0] == '/' && uri[2] != '/' ) { - char* hostname_end = strchr( uri+1, '/' ); - if ( hostname_end != NULL ) { + if (!local && uri[0] == '/' && uri[2] != '/') { + char* hostname_end = strchr(uri+1, '/'); + if (hostname_end != NULL) { char hostname[ 257 ]; - if ( gethostname( hostname, 255 ) == 0 ) { + if (gethostname(hostname, 255) == 0) { hostname[ 256 ] = '\0'; - if ( memcmp( uri+1, hostname, hostname_end - ( uri+1 )) == 0 ) { + if (memcmp(uri+1, hostname, hostname_end - (uri+1)) == 0) { uri = hostname_end + 1; local = SDL_TRUE; } } } } - if ( local ) { + if (local) { file = uri; - if ( uri[1] == '/' ) { + /* Convert URI escape sequences to real characters */ + X11_URIDecode(file, 0); + if (uri[1] == '/') { file++; } else { file--; @@ -223,23 +309,81 @@ static void X11_HandleGenericEvent(SDL_VideoData *videodata,XEvent event) } #endif /* SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS */ +static unsigned +X11_GetNumLockModifierMask(_THIS) +{ + SDL_VideoData *viddata = (SDL_VideoData *) _this->driverdata; + Display *display = viddata->display; + unsigned num_mask = 0; + int i, j; + XModifierKeymap *xmods; + unsigned n; + + xmods = X11_XGetModifierMapping(display); + n = xmods->max_keypermod; + for(i = 3; i < 8; i++) { + for(j = 0; j < n; j++) { + KeyCode kc = xmods->modifiermap[i * n + j]; + if (viddata->key_layout[kc] == SDL_SCANCODE_NUMLOCKCLEAR) { + num_mask = 1 << i; + break; + } + } + } + X11_XFreeModifiermap(xmods); + + return num_mask; +} + +static void +X11_ReconcileKeyboardState(_THIS) +{ + SDL_VideoData *viddata = (SDL_VideoData *) _this->driverdata; + Display *display = viddata->display; + char keys[32]; + int keycode; + Window junk_window; + int x, y; + unsigned int mask; + + X11_XQueryKeymap(display, keys); + + /* Sync up the keyboard modifier state */ + if (X11_XQueryPointer(display, DefaultRootWindow(display), &junk_window, &junk_window, &x, &y, &x, &y, &mask)) { + SDL_ToggleModState(KMOD_CAPS, (mask & LockMask) != 0); + SDL_ToggleModState(KMOD_NUM, (mask & X11_GetNumLockModifierMask(_this)) != 0); + } + + for (keycode = 0; keycode < 256; ++keycode) { + if (keys[keycode / 8] & (1 << (keycode % 8))) { + SDL_SendKeyboardKey(SDL_PRESSED, viddata->key_layout[keycode]); + } else { + SDL_SendKeyboardKey(SDL_RELEASED, viddata->key_layout[keycode]); + } + } +} + static void -X11_DispatchFocusIn(SDL_WindowData *data) +X11_DispatchFocusIn(_THIS, SDL_WindowData *data) { #ifdef DEBUG_XEVENTS printf("window %p: Dispatching FocusIn\n", data); #endif SDL_SetKeyboardFocus(data->window); + X11_ReconcileKeyboardState(_this); #ifdef X_HAVE_UTF8_STRING if (data->ic) { X11_XSetICFocus(data->ic); } #endif +#ifdef SDL_USE_IBUS + SDL_IBus_SetFocus(SDL_TRUE); +#endif } static void -X11_DispatchFocusOut(SDL_WindowData *data) +X11_DispatchFocusOut(_THIS, SDL_WindowData *data) { #ifdef DEBUG_XEVENTS printf("window %p: Dispatching FocusOut\n", data); @@ -256,6 +400,9 @@ X11_DispatchFocusOut(SDL_WindowData *data) X11_XUnsetICFocus(data->ic); } #endif +#ifdef SDL_USE_IBUS + SDL_IBus_SetFocus(SDL_FALSE); +#endif } static void @@ -272,6 +419,99 @@ X11_DispatchUnmapNotify(SDL_WindowData *data) SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MINIMIZED, 0, 0); } +static void +InitiateWindowMove(_THIS, const SDL_WindowData *data, const SDL_Point *point) +{ + SDL_VideoData *viddata = (SDL_VideoData *) _this->driverdata; + SDL_Window* window = data->window; + Display *display = viddata->display; + XEvent evt; + + /* !!! FIXME: we need to regrab this if necessary when the drag is done. */ + X11_XUngrabPointer(display, 0L); + X11_XFlush(display); + + evt.xclient.type = ClientMessage; + evt.xclient.window = data->xwindow; + evt.xclient.message_type = X11_XInternAtom(display, "_NET_WM_MOVERESIZE", True); + evt.xclient.format = 32; + evt.xclient.data.l[0] = window->x + point->x; + evt.xclient.data.l[1] = window->y + point->y; + evt.xclient.data.l[2] = _NET_WM_MOVERESIZE_MOVE; + evt.xclient.data.l[3] = Button1; + evt.xclient.data.l[4] = 0; + X11_XSendEvent(display, DefaultRootWindow(display), False, SubstructureRedirectMask | SubstructureNotifyMask, &evt); + + X11_XSync(display, 0); +} + +static void +InitiateWindowResize(_THIS, const SDL_WindowData *data, const SDL_Point *point, int direction) +{ + SDL_VideoData *viddata = (SDL_VideoData *) _this->driverdata; + SDL_Window* window = data->window; + Display *display = viddata->display; + XEvent evt; + + if (direction < _NET_WM_MOVERESIZE_SIZE_TOPLEFT || direction > _NET_WM_MOVERESIZE_SIZE_LEFT) + return; + + /* !!! FIXME: we need to regrab this if necessary when the drag is done. */ + X11_XUngrabPointer(display, 0L); + X11_XFlush(display); + + evt.xclient.type = ClientMessage; + evt.xclient.window = data->xwindow; + evt.xclient.message_type = X11_XInternAtom(display, "_NET_WM_MOVERESIZE", True); + evt.xclient.format = 32; + evt.xclient.data.l[0] = window->x + point->x; + evt.xclient.data.l[1] = window->y + point->y; + evt.xclient.data.l[2] = direction; + evt.xclient.data.l[3] = Button1; + evt.xclient.data.l[4] = 0; + X11_XSendEvent(display, DefaultRootWindow(display), False, SubstructureRedirectMask | SubstructureNotifyMask, &evt); + + X11_XSync(display, 0); +} + +static SDL_bool +ProcessHitTest(_THIS, const SDL_WindowData *data, const XEvent *xev) +{ + SDL_Window *window = data->window; + + if (window->hit_test) { + const SDL_Point point = { xev->xbutton.x, xev->xbutton.y }; + const SDL_HitTestResult rc = window->hit_test(window, &point, window->hit_test_data); + static const int directions[] = { + _NET_WM_MOVERESIZE_SIZE_TOPLEFT, _NET_WM_MOVERESIZE_SIZE_TOP, + _NET_WM_MOVERESIZE_SIZE_TOPRIGHT, _NET_WM_MOVERESIZE_SIZE_RIGHT, + _NET_WM_MOVERESIZE_SIZE_BOTTOMRIGHT, _NET_WM_MOVERESIZE_SIZE_BOTTOM, + _NET_WM_MOVERESIZE_SIZE_BOTTOMLEFT, _NET_WM_MOVERESIZE_SIZE_LEFT + }; + + switch (rc) { + case SDL_HITTEST_DRAGGABLE: + InitiateWindowMove(_this, data, &point); + return SDL_TRUE; + + case SDL_HITTEST_RESIZE_TOPLEFT: + case SDL_HITTEST_RESIZE_TOP: + case SDL_HITTEST_RESIZE_TOPRIGHT: + case SDL_HITTEST_RESIZE_RIGHT: + case SDL_HITTEST_RESIZE_BOTTOMRIGHT: + case SDL_HITTEST_RESIZE_BOTTOM: + case SDL_HITTEST_RESIZE_BOTTOMLEFT: + case SDL_HITTEST_RESIZE_LEFT: + InitiateWindowResize(_this, data, &point, directions[rc - SDL_HITTEST_RESIZE_TOPLEFT]); + return SDL_TRUE; + + default: return SDL_FALSE; + } + } + + return SDL_FALSE; +} + static void X11_DispatchEvent(_THIS) { @@ -305,12 +545,15 @@ X11_DispatchEvent(_THIS) #endif if (orig_keycode) { /* Make sure dead key press/release events are sent */ + /* Actually, don't do this because it causes double-delivery + of some keys on Ubuntu 14.04 (bug 2526) SDL_Scancode scancode = videodata->key_layout[orig_keycode]; if (orig_event_type == KeyPress) { SDL_SendKeyboardKey(SDL_PRESSED, scancode); } else { SDL_SendKeyboardKey(SDL_RELEASED, scancode); } + */ } return; } @@ -348,6 +591,25 @@ X11_DispatchEvent(_THIS) } } if (!data) { + /* The window for KeymapNotify, etc events is 0 */ + if (xevent.type == KeymapNotify) { + if (SDL_GetKeyboardFocus() != NULL) { + X11_ReconcileKeyboardState(_this); + } + } else if (xevent.type == MappingNotify) { + /* Has the keyboard layout changed? */ + const int request = xevent.xmapping.request; + +#ifdef DEBUG_XEVENTS + printf("window %p: MappingNotify!\n", data); +#endif + if ((request == MappingKeyboard) || (request == MappingModifier)) { + X11_XRefreshKeyboardMapping(&xevent.xmapping); + } + + X11_UpdateKeymap(_this); + SDL_SendKeymapChangedEvent(); + } return; } @@ -415,21 +677,17 @@ X11_DispatchEvent(_THIS) #ifdef DEBUG_XEVENTS printf("window %p: FocusIn!\n", data); #endif - if (data->pending_focus == PENDING_FOCUS_OUT && - data->window == SDL_GetKeyboardFocus()) { - /* We want to reset the keyboard here, because we may have - missed keyboard messages after our previous FocusOut. - */ - /* Actually, if we do this we clear the ALT key on Unity - because it briefly takes focus for their dashboard. - - I think it's better to think the ALT key is held down - when it's not, then always lose the ALT modifier on Unity. - */ - /* SDL_ResetKeyboard(); */ + if (!videodata->last_mode_change_deadline) /* no recent mode changes */ + { + data->pending_focus = PENDING_FOCUS_NONE; + data->pending_focus_time = 0; + X11_DispatchFocusIn(_this, data); + } + else + { + data->pending_focus = PENDING_FOCUS_IN; + data->pending_focus_time = SDL_GetTicks() + PENDING_FOCUS_TIME; } - data->pending_focus = PENDING_FOCUS_IN; - data->pending_focus_time = SDL_GetTicks() + PENDING_FOCUS_IN_TIME; } break; @@ -452,28 +710,17 @@ X11_DispatchEvent(_THIS) #ifdef DEBUG_XEVENTS printf("window %p: FocusOut!\n", data); #endif - data->pending_focus = PENDING_FOCUS_OUT; - data->pending_focus_time = SDL_GetTicks() + PENDING_FOCUS_OUT_TIME; - } - break; - - /* Generated upon EnterWindow and FocusIn */ - case KeymapNotify:{ -#ifdef DEBUG_XEVENTS - printf("window %p: KeymapNotify!\n", data); -#endif - /* FIXME: - X11_SetKeyboardState(SDL_Display, xevent.xkeymap.key_vector); - */ - } - break; - - /* Has the keyboard layout changed? */ - case MappingNotify:{ -#ifdef DEBUG_XEVENTS - printf("window %p: MappingNotify!\n", data); -#endif - X11_UpdateKeymap(_this); + if (!videodata->last_mode_change_deadline) /* no recent mode changes */ + { + data->pending_focus = PENDING_FOCUS_NONE; + data->pending_focus_time = 0; + X11_DispatchFocusOut(_this, data); + } + else + { + data->pending_focus = PENDING_FOCUS_OUT; + data->pending_focus_time = SDL_GetTicks() + PENDING_FOCUS_TIME; + } } break; @@ -483,11 +730,11 @@ X11_DispatchEvent(_THIS) KeySym keysym = NoSymbol; char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; Status status = 0; + SDL_bool handled_by_ime = SDL_FALSE; #ifdef DEBUG_XEVENTS printf("window %p: KeyPress (X11 keycode = 0x%X)\n", data, xevent.xkey.keycode); #endif - SDL_SendKeyboardKey(SDL_PRESSED, videodata->key_layout[keycode]); #if 1 if (videodata->key_layout[keycode] == SDL_SCANCODE_UNKNOWN && keycode) { int min_keycode, max_keycode; @@ -495,7 +742,7 @@ X11_DispatchEvent(_THIS) #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM keysym = X11_XkbKeycodeToKeysym(display, keycode, 0, 0); #else - keysym = XKeycodeToKeysym(display, keycode, 0); + keysym = X11_XKeycodeToKeysym(display, keycode, 0); #endif fprintf(stderr, "The key you just pressed is not recognized by SDL. To help get this fixed, please report this to the SDL mailing list X11 KeyCode %d (%d), X11 KeySym 0x%lX (%s).\n", @@ -511,11 +758,21 @@ X11_DispatchEvent(_THIS) &keysym, &status); } #else - XLookupString(&xevent.xkey, text, sizeof(text), &keysym, NULL); + X11_XLookupString(&xevent.xkey, text, sizeof(text), &keysym, NULL); #endif - if (*text) { - SDL_SendKeyboardText(text); + +#ifdef SDL_USE_IBUS + if(SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE){ + handled_by_ime = SDL_IBus_ProcessKeyEvent(keysym, keycode); } +#endif + if (!handled_by_ime) { + SDL_SendKeyboardKey(SDL_PRESSED, videodata->key_layout[keycode]); + if(*text) { + SDL_SendKeyboardText(text); + } + } + } break; @@ -560,26 +817,23 @@ X11_DispatchEvent(_THIS) xevent.xconfigure.width, xevent.xconfigure.height); #endif long border_left = 0; - long border_right = 0; long border_top = 0; - long border_bottom = 0; if (data->xwindow) { Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0); - Atom type = None; + Atom type; int format; - unsigned long nitems = 0, bytes_after; + unsigned long nitems, bytes_after; unsigned char *property; - X11_XGetWindowProperty(display, data->xwindow, - _net_frame_extents, 0, 16, 0, - XA_CARDINAL, &type, &format, - &nitems, &bytes_after, &property); - - if (type != None && nitems == 4) - { - border_left = ((long*)property)[0]; - border_right = ((long*)property)[1]; - border_top = ((long*)property)[2]; - border_bottom = ((long*)property)[3]; + if (X11_XGetWindowProperty(display, data->xwindow, + _net_frame_extents, 0, 16, 0, + XA_CARDINAL, &type, &format, + &nitems, &bytes_after, &property) == Success) { + if (type != None && nitems == 4) + { + border_left = ((long*)property)[0]; + border_top = ((long*)property)[2]; + } + X11_XFree(property); } } @@ -588,6 +842,12 @@ X11_DispatchEvent(_THIS) SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MOVED, xevent.xconfigure.x - border_left, xevent.xconfigure.y - border_top); +#ifdef SDL_USE_IBUS + if(SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE){ + /* Update IBus candidate list position */ + SDL_IBus_UpdateTextRect(NULL); + } +#endif } if (xevent.xconfigure.width != data->last_xconfigure.width || xevent.xconfigure.height != data->last_xconfigure.height) { @@ -602,12 +862,19 @@ X11_DispatchEvent(_THIS) /* Have we been requested to quit (or another client message?) */ case ClientMessage:{ - int xdnd_version=0; + static int xdnd_version=0; if (xevent.xclient.message_type == videodata->XdndEnter) { + SDL_bool use_list = xevent.xclient.data.l[1] & 1; data->xdnd_source = xevent.xclient.data.l[0]; - xdnd_version = ( xevent.xclient.data.l[1] >> 24); + xdnd_version = (xevent.xclient.data.l[1] >> 24); +#ifdef DEBUG_XEVENTS + printf("XID of source window : %ld\n", data->xdnd_source); + printf("Protocol version to use : %d\n", xdnd_version); + printf("More then 3 data types : %d\n", (int) use_list); +#endif + if (use_list) { /* fetch conversion targets */ SDL_x11Prop p; @@ -621,6 +888,15 @@ X11_DispatchEvent(_THIS) } } else if (xevent.xclient.message_type == videodata->XdndPosition) { + +#ifdef DEBUG_XEVENTS + Atom act= videodata->XdndActionCopy; + if(xdnd_version >= 2) { + act = xevent.xclient.data.l[4]; + } + printf("Action requested by user is : %s\n", X11_XGetAtomName(display , act)); +#endif + /* reply with status */ memset(&m, 0, sizeof(XClientMessageEvent)); @@ -708,17 +984,37 @@ X11_DispatchEvent(_THIS) break; case ButtonPress:{ - int ticks = 0; - if (X11_IsWheelEvent(display,&xevent,&ticks)) { - SDL_SendMouseWheel(data->window, 0, 0, ticks); + int xticks = 0, yticks = 0; + if (X11_IsWheelEvent(display,&xevent,&xticks, &yticks)) { + SDL_SendMouseWheel(data->window, 0, xticks, yticks, SDL_MOUSEWHEEL_NORMAL); } else { - SDL_SendMouseButton(data->window, 0, SDL_PRESSED, xevent.xbutton.button); + int button = xevent.xbutton.button; + if(button == Button1) { + if (ProcessHitTest(_this, data, &xevent)) { + break; /* don't pass this event on to app. */ + } + } + else if(button > 7) { + /* X button values 4-7 are used for scrolling, so X1 is 8, X2 is 9, ... + => subtract (8-SDL_BUTTON_X1) to get value SDL expects */ + button -= (8-SDL_BUTTON_X1); + } + SDL_SendMouseButton(data->window, 0, SDL_PRESSED, button); } } break; case ButtonRelease:{ - SDL_SendMouseButton(data->window, 0, SDL_RELEASED, xevent.xbutton.button); + int button = xevent.xbutton.button; + /* The X server sends a Release event for each Press for wheels. Ignore them. */ + int xticks = 0, yticks = 0; + if (!X11_IsWheelEvent(display,&xevent,&xticks, &yticks)) { + if (button > 7) { + /* see explanation at case ButtonPress */ + button -= (8-SDL_BUTTON_X1); + } + SDL_SendMouseButton(data->window, 0, SDL_RELEASED, button); + } } break; @@ -727,7 +1023,7 @@ X11_DispatchEvent(_THIS) unsigned char *propdata; int status, real_format; Atom real_type; - unsigned long items_read, items_left, i; + unsigned long items_read, items_left; char *name = X11_XGetAtomName(display, xevent.xproperty.atom); if (name) { @@ -779,18 +1075,18 @@ X11_DispatchEvent(_THIS) printf("{"); for (i = 0; i < items_read; i++) { - char *name = X11_XGetAtomName(display, atoms[i]); - if (name) { - printf(" %s", name); - X11_XFree(name); + char *atomname = X11_XGetAtomName(display, atoms[i]); + if (atomname) { + printf(" %s", atomname); + X11_XFree(atomname); } } printf(" }\n"); } else { - char *name = X11_XGetAtomName(display, real_type); - printf("Unknown type: %ld (%s)\n", real_type, name ? name : "UNKNOWN"); - if (name) { - X11_XFree(name); + char *atomname = X11_XGetAtomName(display, real_type); + printf("Unknown type: %ld (%s)\n", real_type, atomname ? atomname : "UNKNOWN"); + if (atomname) { + X11_XFree(atomname); } } } @@ -805,19 +1101,38 @@ X11_DispatchEvent(_THIS) without ever mapping / unmapping them, so we handle that here, because they use the NETWM protocol to notify us of changes. */ - Uint32 flags = X11_GetNetWMState(_this, xevent.xproperty.window); - if ((flags^data->window->flags) & SDL_WINDOW_HIDDEN) { - if (flags & SDL_WINDOW_HIDDEN) { - X11_DispatchUnmapNotify(data); + const Uint32 flags = X11_GetNetWMState(_this, xevent.xproperty.window); + const Uint32 changed = flags ^ data->window->flags; + + if ((changed & SDL_WINDOW_HIDDEN) || (changed & SDL_WINDOW_FULLSCREEN)) { + if (flags & SDL_WINDOW_HIDDEN) { + X11_DispatchUnmapNotify(data); + } else { + X11_DispatchMapNotify(data); + } + } + + if (changed & SDL_WINDOW_MAXIMIZED) { + if (flags & SDL_WINDOW_MAXIMIZED) { + SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_MAXIMIZED, 0, 0); } else { - X11_DispatchMapNotify(data); + SDL_SendWindowEvent(data->window, SDL_WINDOWEVENT_RESTORED, 0, 0); } } + } else if (xevent.xproperty.atom == videodata->XKLAVIER_STATE) { + /* Hack for Ubuntu 12.04 (etc) that doesn't send MappingNotify + events when the keyboard layout changes (for example, + changing from English to French on the menubar's keyboard + icon). Since it changes the XKLAVIER_STATE property, we + notice and reinit our keymap here. This might not be the + right approach, but it seems to work. */ + X11_UpdateKeymap(_this); + SDL_SendKeymapChangedEvent(); } } break; - /* Copy the selection from XA_CUT_BUFFER0 to the requested property */ + /* Copy the selection from our own CUTBUFFER to the requested property */ case SelectionRequest: { XSelectionRequestEvent *req; XEvent sevent; @@ -839,8 +1154,9 @@ X11_DispatchEvent(_THIS) sevent.xselection.property = None; sevent.xselection.requestor = req->requestor; sevent.xselection.time = req->time; + if (X11_XGetWindowProperty(display, DefaultRootWindow(display), - XA_CUT_BUFFER0, 0, INT_MAX/4, False, req->target, + X11_GetSDLCutBufferClipboardType(display), 0, INT_MAX/4, False, req->target, &sevent.xselection.target, &seln_format, &nbytes, &overflow, &seln_data) == Success) { Atom XA_TARGETS = X11_XInternAtom(display, "TARGETS", 0); @@ -850,12 +1166,13 @@ X11_DispatchEvent(_THIS) seln_data, nbytes); sevent.xselection.property = req->property; } else if (XA_TARGETS == req->target) { - Atom SupportedFormats[] = { sevent.xselection.target, XA_TARGETS }; + Atom SupportedFormats[] = { XA_TARGETS, sevent.xselection.target }; X11_XChangeProperty(display, req->requestor, req->property, XA_ATOM, 32, PropModeReplace, (unsigned char*)SupportedFormats, - sizeof(SupportedFormats)/sizeof(*SupportedFormats)); + SDL_arraysize(SupportedFormats)); sevent.xselection.property = req->property; + sevent.xselection.target = XA_TARGETS; } X11_XFree(seln_data); } @@ -932,6 +1249,16 @@ X11_DispatchEvent(_THIS) } break; + case SelectionClear: { + Atom XA_CLIPBOARD = X11_XInternAtom(display, "CLIPBOARD", 0); + + if (xevent.xselectionclear.selection == XA_PRIMARY || + (XA_CLIPBOARD != None && xevent.xselectionclear.selection == XA_CLIPBOARD)) { + SDL_SendClipboardUpdate(); + } + } + break; + default:{ #ifdef DEBUG_XEVENTS printf("window %p: Unhandled event %d\n", data, xevent.type); @@ -953,10 +1280,10 @@ X11_HandleFocusChanges(_THIS) if (data && data->pending_focus != PENDING_FOCUS_NONE) { Uint32 now = SDL_GetTicks(); if (SDL_TICKS_PASSED(now, data->pending_focus_time)) { - if ( data->pending_focus == PENDING_FOCUS_IN ) { - X11_DispatchFocusIn(data); + if (data->pending_focus == PENDING_FOCUS_IN) { + X11_DispatchFocusIn(_this, data); } else { - X11_DispatchFocusOut(data); + X11_DispatchFocusOut(_this, data); } data->pending_focus = PENDING_FOCUS_NONE; } @@ -997,16 +1324,22 @@ X11_PumpEvents(_THIS) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + if (data->last_mode_change_deadline) { + if (SDL_TICKS_PASSED(SDL_GetTicks(), data->last_mode_change_deadline)) { + data->last_mode_change_deadline = 0; /* assume we're done. */ + } + } + /* Update activity every 30 seconds to prevent screensaver */ if (_this->suspend_screensaver) { - Uint32 now = SDL_GetTicks(); + const Uint32 now = SDL_GetTicks(); if (!data->screensaver_activity || SDL_TICKS_PASSED(now, data->screensaver_activity + 30000)) { X11_XResetScreenSaver(data->display); - #if SDL_USE_LIBDBUS - SDL_dbus_screensaver_tickle(_this); - #endif +#if SDL_USE_LIBDBUS + SDL_DBus_ScreensaverTickle(); +#endif data->screensaver_activity = now; } @@ -1017,6 +1350,12 @@ X11_PumpEvents(_THIS) X11_DispatchEvent(_this); } +#ifdef SDL_USE_IBUS + if(SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE){ + SDL_IBus_PumpEvents(); + } +#endif + /* FIXME: Only need to do this when there are pending focus changes */ X11_HandleFocusChanges(_this); } @@ -1032,12 +1371,12 @@ X11_SuspendScreenSaver(_THIS) #endif /* SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ #if SDL_USE_LIBDBUS - if (SDL_dbus_screensaver_inhibit(_this)) { + if (SDL_DBus_ScreensaverInhibit(_this->suspend_screensaver)) { return; } if (_this->suspend_screensaver) { - SDL_dbus_screensaver_tickle(_this); + SDL_DBus_ScreensaverTickle(); } #endif diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11events.h b/Engine/lib/sdl/src/video/x11/SDL_x11events.h index e27d53ac56..024fca3f45 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11events.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11events.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.c b/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.c index 19d9d0ba0c..a4886169fd 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.h b/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.h index c73c7487da..7326e7da96 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11framebuffer.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.c b/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.c index 36034606e8..2c3acdadd0 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,6 +29,7 @@ #include "../../events/scancodes_xfree86.h" #include +#include #include "imKStoUCS.h" @@ -154,7 +155,7 @@ X11_KeyCodeToSDLScancode(Display *display, KeyCode keycode) #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM keysym = X11_XkbKeycodeToKeysym(display, keycode, 0, 0); #else - keysym = XKeycodeToKeysym(display, keycode, 0); + keysym = X11_XKeycodeToKeysym(display, keycode, 0); #endif if (keysym == NoSymbol) { return SDL_SCANCODE_UNKNOWN; @@ -177,14 +178,14 @@ X11_KeyCodeToSDLScancode(Display *display, KeyCode keycode) } static Uint32 -X11_KeyCodeToUcs4(Display *display, KeyCode keycode) +X11_KeyCodeToUcs4(Display *display, KeyCode keycode, unsigned char group) { KeySym keysym; #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM - keysym = X11_XkbKeycodeToKeysym(display, keycode, 0, 0); + keysym = X11_XkbKeycodeToKeysym(display, keycode, group, 0); #else - keysym = XKeycodeToKeysym(display, keycode, 0); + keysym = X11_XKeycodeToKeysym(display, keycode, 0); #endif if (keysym == NoSymbol) { return 0; @@ -207,14 +208,20 @@ X11_InitKeyboard(_THIS) } fingerprint[] = { { SDL_SCANCODE_HOME, XK_Home, 0 }, { SDL_SCANCODE_PAGEUP, XK_Prior, 0 }, - { SDL_SCANCODE_PAGEDOWN, XK_Next, 0 }, + { SDL_SCANCODE_UP, XK_Up, 0 }, + { SDL_SCANCODE_LEFT, XK_Left, 0 }, + { SDL_SCANCODE_DELETE, XK_Delete, 0 }, + { SDL_SCANCODE_KP_ENTER, XK_KP_Enter, 0 }, }; - SDL_bool fingerprint_detected; + int best_distance; + int best_index; + int distance; X11_XAutoRepeatOn(data->display); /* Try to determine which scancodes are being used based on fingerprint */ - fingerprint_detected = SDL_FALSE; + best_distance = SDL_arraysize(fingerprint) + 1; + best_index = -1; X11_XDisplayKeycodes(data->display, &min_keycode, &max_keycode); for (i = 0; i < SDL_arraysize(fingerprint); ++i) { fingerprint[i].value = @@ -226,28 +233,27 @@ X11_InitKeyboard(_THIS) if ((max_keycode - min_keycode + 1) <= scancode_set[i].table_size) { continue; } + distance = 0; for (j = 0; j < SDL_arraysize(fingerprint); ++j) { if (fingerprint[j].value < 0 || fingerprint[j].value >= scancode_set[i].table_size) { - break; - } - if (scancode_set[i].table[fingerprint[j].value] != - fingerprint[j].scancode) { - break; + distance += 1; + } else if (scancode_set[i].table[fingerprint[j].value] != fingerprint[j].scancode) { + distance += 1; } } - if (j == SDL_arraysize(fingerprint)) { -#ifdef DEBUG_KEYBOARD - printf("Using scancode set %d, min_keycode = %d, max_keycode = %d, table_size = %d\n", i, min_keycode, max_keycode, scancode_set[i].table_size); -#endif - SDL_memcpy(&data->key_layout[min_keycode], scancode_set[i].table, - sizeof(SDL_Scancode) * scancode_set[i].table_size); - fingerprint_detected = SDL_TRUE; - break; + if (distance < best_distance) { + best_distance = distance; + best_index = i; } } - - if (!fingerprint_detected) { + if (best_index >= 0 && best_distance <= 2) { +#ifdef DEBUG_KEYBOARD + printf("Using scancode set %d, min_keycode = %d, max_keycode = %d, table_size = %d\n", best_index, min_keycode, max_keycode, scancode_set[best_index].table_size); +#endif + SDL_memcpy(&data->key_layout[min_keycode], scancode_set[best_index].table, + sizeof(SDL_Scancode) * scancode_set[best_index].table_size); + } else { SDL_Keycode keymap[SDL_NUM_SCANCODES]; printf @@ -260,7 +266,7 @@ X11_InitKeyboard(_THIS) #if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM sym = X11_XkbKeycodeToKeysym(data->display, i, 0, 0); #else - sym = XKeycodeToKeysym(data->display, i, 0); + sym = X11_XKeycodeToKeysym(data->display, i, 0); #endif if (sym != NoSymbol) { SDL_Scancode scancode; @@ -281,6 +287,10 @@ X11_InitKeyboard(_THIS) SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu"); +#ifdef SDL_USE_IBUS + SDL_IBus_Init(); +#endif + return 0; } @@ -291,8 +301,20 @@ X11_UpdateKeymap(_THIS) int i; SDL_Scancode scancode; SDL_Keycode keymap[SDL_NUM_SCANCODES]; + unsigned char group = 0; SDL_GetDefaultKeymap(keymap); + +#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM + { + XkbStateRec state; + if (X11_XkbGetState(data->display, XkbUseCoreKbd, &state) == Success) { + group = state.group; + } + } +#endif + + for (i = 0; i < SDL_arraysize(data->key_layout); i++) { Uint32 key; @@ -303,9 +325,32 @@ X11_UpdateKeymap(_THIS) } /* See if there is a UCS keycode for this scancode */ - key = X11_KeyCodeToUcs4(data->display, (KeyCode)i); + key = X11_KeyCodeToUcs4(data->display, (KeyCode)i, group); if (key) { keymap[scancode] = key; + } else { + SDL_Scancode keyScancode = X11_KeyCodeToSDLScancode(data->display, (KeyCode)i); + + switch (keyScancode) { + case SDL_SCANCODE_RETURN: + keymap[scancode] = SDLK_RETURN; + break; + case SDL_SCANCODE_ESCAPE: + keymap[scancode] = SDLK_ESCAPE; + break; + case SDL_SCANCODE_BACKSPACE: + keymap[scancode] = SDLK_BACKSPACE; + break; + case SDL_SCANCODE_TAB: + keymap[scancode] = SDLK_TAB; + break; + case SDL_SCANCODE_DELETE: + keymap[scancode] = SDLK_DELETE; + break; + default: + keymap[scancode] = SDL_SCANCODE_TO_KEYCODE(keyScancode); + break; + } } } SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES); @@ -314,6 +359,36 @@ X11_UpdateKeymap(_THIS) void X11_QuitKeyboard(_THIS) { +#ifdef SDL_USE_IBUS + SDL_IBus_Quit(); +#endif +} + +void +X11_StartTextInput(_THIS) +{ + +} + +void +X11_StopTextInput(_THIS) +{ +#ifdef SDL_USE_IBUS + SDL_IBus_Reset(); +#endif +} + +void +X11_SetTextInputRect(_THIS, SDL_Rect *rect) +{ + if (!rect) { + SDL_InvalidParamError("rect"); + return; + } + +#ifdef SDL_USE_IBUS + SDL_IBus_UpdateTextRect(rect); +#endif } #endif /* SDL_VIDEO_DRIVER_X11 */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.h b/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.h index 3d1631fe54..a1102ed757 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11keyboard.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -26,6 +26,9 @@ extern int X11_InitKeyboard(_THIS); extern void X11_UpdateKeymap(_THIS); extern void X11_QuitKeyboard(_THIS); +extern void X11_StartTextInput(_THIS); +extern void X11_StopTextInput(_THIS); +extern void X11_SetTextInputRect(_THIS, SDL_Rect *rect); #endif /* _SDL_x11keyboard_h */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.c b/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.c index 2a98e3c3e3..fc8b1b26b5 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -28,11 +28,12 @@ #include "SDL_x11dyn.h" #include "SDL_assert.h" +#include #include -#define SDL_FORK_MESSAGEBOX 0 -#define SDL_SET_LOCALE 0 +#define SDL_FORK_MESSAGEBOX 1 +#define SDL_SET_LOCALE 1 #if SDL_FORK_MESSAGEBOX #include @@ -83,6 +84,10 @@ typedef struct SDL_MessageBoxDataX11 Display *display; int screen; Window window; +#if SDL_VIDEO_DRIVER_X11_XDBE + XdbeBackBuffer buf; + SDL_bool xdbe; /* Whether Xdbe is present or not */ +#endif long event_mask; Atom wm_protocols; Atom wm_delete_message; @@ -347,6 +352,12 @@ X11_MessageBoxShutdown( SDL_MessageBoxDataX11 *data ) data->font_struct = NULL; } +#if SDL_VIDEO_DRIVER_X11_XDBE + if ( SDL_X11_HAVE_XDBE && data->xdbe ) { + X11_XdbeDeallocateBackBufferName(data->display, data->buf); + } +#endif + if ( data->display ) { if ( data->window != None ) { X11_XWithdrawWindow( data->display, data->window, data->screen ); @@ -366,6 +377,7 @@ X11_MessageBoxCreateWindow( SDL_MessageBoxDataX11 *data ) int x, y; XSizeHints *sizehints; XSetWindowAttributes wnd_attr; + Atom _NET_WM_WINDOW_TYPE, _NET_WM_WINDOW_TYPE_DIALOG, _NET_WM_NAME, UTF8_STRING; Display *display = data->display; SDL_WindowData *windowdata = NULL; const SDL_MessageBoxData *messageboxdata = data->messageboxdata; @@ -400,6 +412,18 @@ X11_MessageBoxCreateWindow( SDL_MessageBoxDataX11 *data ) } X11_XStoreName( display, data->window, messageboxdata->title ); + _NET_WM_NAME = X11_XInternAtom(display, "_NET_WM_NAME", False); + UTF8_STRING = X11_XInternAtom(display, "UTF8_STRING", False); + X11_XChangeProperty(display, data->window, _NET_WM_NAME, UTF8_STRING, 8, + PropModeReplace, (unsigned char *) messageboxdata->title, + strlen(messageboxdata->title) + 1 ); + + /* Let the window manager know this is a dialog box */ + _NET_WM_WINDOW_TYPE = X11_XInternAtom(display, "_NET_WM_WINDOW_TYPE", False); + _NET_WM_WINDOW_TYPE_DIALOG = X11_XInternAtom(display, "_NET_WM_WINDOW_TYPE_DIALOG", False); + X11_XChangeProperty(display, data->window, _NET_WM_WINDOW_TYPE, XA_ATOM, 32, + PropModeReplace, + (unsigned char *)&_NET_WM_WINDOW_TYPE_DIALOG, 1); /* Allow the window to be deleted by the window manager */ data->wm_protocols = X11_XInternAtom( display, "WM_PROTOCOLS", False ); @@ -415,8 +439,16 @@ X11_MessageBoxCreateWindow( SDL_MessageBoxDataX11 *data ) y = attrib.y + ( attrib.height - data->dialog_height ) / 3 ; X11_XTranslateCoordinates(display, windowdata->xwindow, RootWindow(display, data->screen), x, y, &x, &y, &dummy); } else { - x = ( DisplayWidth( display, data->screen ) - data->dialog_width ) / 2; - y = ( DisplayHeight( display, data->screen ) - data->dialog_height ) / 3 ; + const SDL_VideoDevice *dev = SDL_GetVideoDevice(); + if ((dev) && (dev->displays) && (dev->num_displays > 0)) { + const SDL_VideoDisplay *dpy = &dev->displays[0]; + const SDL_DisplayData *dpydata = (SDL_DisplayData *) dpy->driverdata; + x = dpydata->x + (( dpy->current_mode.w - data->dialog_width ) / 2); + y = dpydata->y + (( dpy->current_mode.h - data->dialog_height ) / 3); + } else { /* oh well. This will misposition on a multi-head setup. Init first next time. */ + x = ( DisplayWidth( display, data->screen ) - data->dialog_width ) / 2; + y = ( DisplayHeight( display, data->screen ) - data->dialog_height ) / 3 ; + } } X11_XMoveWindow( display, data->window, x, y ); @@ -437,6 +469,20 @@ X11_MessageBoxCreateWindow( SDL_MessageBoxDataX11 *data ) } X11_XMapRaised( display, data->window ); + +#if SDL_VIDEO_DRIVER_X11_XDBE + /* Initialise a back buffer for double buffering */ + if (SDL_X11_HAVE_XDBE) { + int xdbe_major, xdbe_minor; + if (X11_XdbeQueryExtension(display, &xdbe_major, &xdbe_minor) != 0) { + data->xdbe = SDL_TRUE; + data->buf = X11_XdbeAllocateBackBufferName(display, data->window, XdbeUndefined); + } else { + data->xdbe = SDL_FALSE; + } + } +#endif + return 0; } @@ -445,9 +491,16 @@ static void X11_MessageBoxDraw( SDL_MessageBoxDataX11 *data, GC ctx ) { int i; - Window window = data->window; + Drawable window = data->window; Display *display = data->display; +#if SDL_VIDEO_DRIVER_X11_XDBE + if (SDL_X11_HAVE_XDBE && data->xdbe) { + window = data->buf; + X11_XdbeBeginIdiom(data->display); + } +#endif + X11_XSetForeground( display, ctx, data->color[ SDL_MESSAGEBOX_COLOR_BACKGROUND ] ); X11_XFillRectangle( display, window, ctx, 0, 0, data->dialog_width, data->dialog_height ); @@ -497,6 +550,23 @@ X11_MessageBoxDraw( SDL_MessageBoxDataX11 *data, GC ctx ) buttondata->text, buttondatax11->length ); } } + +#if SDL_VIDEO_DRIVER_X11_XDBE + if (SDL_X11_HAVE_XDBE && data->xdbe) { + XdbeSwapInfo swap_info; + swap_info.swap_window = data->window; + swap_info.swap_action = XdbeUndefined; + X11_XdbeSwapBuffers(data->display, &swap_info, 1); + X11_XdbeEndIdiom(data->display); + } +#endif +} + +static Bool +X11_MessageBoxEventTest(Display *display, XEvent *event, XPointer arg) +{ + const SDL_MessageBoxDataX11 *data = (const SDL_MessageBoxDataX11 *) arg; + return ((event->xany.display == data->display) && (event->xany.window == data->window)) ? True : False; } /* Loop and handle message box event messages until something kills it. */ @@ -531,7 +601,9 @@ X11_MessageBoxLoop( SDL_MessageBoxDataX11 *data ) XEvent e; SDL_bool draw = SDL_TRUE; - X11_XWindowEvent( data->display, data->window, data->event_mask, &e ); + /* can't use XWindowEvent() because it can't handle ClientMessage events. */ + /* can't use XNextEvent() because we only want events for this window. */ + X11_XIfEvent( data->display, &e, X11_MessageBoxEventTest, (XPointer) data ); /* If X11_XFilterEvent returns True, then some input method has filtered the event, and the client should discard the event. */ @@ -560,7 +632,7 @@ X11_MessageBoxLoop( SDL_MessageBoxDataX11 *data ) case MotionNotify: if ( has_focus ) { /* Mouse moved... */ - int previndex = data->mouse_over_index; + const int previndex = data->mouse_over_index; data->mouse_over_index = GetHitButtonIndex( data, e.xbutton.x, e.xbutton.y ); if (data->mouse_over_index == previndex) { draw = SDL_FALSE; @@ -710,9 +782,6 @@ X11_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid) int fds[2]; int status = 0; - /* Need to flush here in case someone has turned grab off and it hasn't gone through yet, etc. */ - X11_XFlush(data->display); - if (pipe(fds) == -1) { return X11_ShowMessageBoxImpl(messageboxdata, buttonid); /* oh well. */ } diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.h b/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.h index d2d171288e..c77c57fb18 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11messagebox.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11modes.c b/Engine/lib/sdl/src/video/x11/SDL_x11modes.c index 6336f0cab3..446da2b64c 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11modes.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11modes.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -24,6 +24,7 @@ #include "SDL_hints.h" #include "SDL_x11video.h" +#include "SDL_timer.h" #include "edid.h" /* #define X11MODES_DEBUG */ @@ -191,6 +192,21 @@ CheckXinerama(Display * display, int *major, int *minor) #endif return SDL_TRUE; } + +/* !!! FIXME: remove this later. */ +/* we have a weird bug where XineramaQueryScreens() throws an X error, so this + is here to help track it down (and not crash, too!). */ +static SDL_bool xinerama_triggered_error = SDL_FALSE; +static int +X11_XineramaFailed(Display * d, XErrorEvent * e) +{ + xinerama_triggered_error = SDL_TRUE; + fprintf(stderr, "XINERAMA X ERROR: type=%d serial=%lu err=%u req=%u minor=%u\n", + e->type, e->serial, (unsigned int) e->error_code, + (unsigned int) e->request_code, (unsigned int) e->minor_code); + fflush(stderr); + return 0; +} #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ #if SDL_VIDEO_DRIVER_X11_XRANDR @@ -228,10 +244,12 @@ CheckXRandR(Display * display, int *major, int *minor) } /* Query the extension version */ + *major = 1; *minor = 3; /* we want 1.3 */ if (!X11_XRRQueryVersion(display, major, minor)) { #ifdef X11MODES_DEBUG printf("XRandR not active on the display\n"); #endif + *major = *minor = 0; return SDL_FALSE; } #ifdef X11MODES_DEBUG @@ -251,20 +269,20 @@ CalculateXRandRRefreshRate(const XRRModeInfo *info) } static SDL_bool -SetXRandRModeInfo(Display *display, XRRScreenResources *res, XRROutputInfo *output_info, +SetXRandRModeInfo(Display *display, XRRScreenResources *res, RRCrtc crtc, RRMode modeID, SDL_DisplayMode *mode) { int i; for (i = 0; i < res->nmode; ++i) { - if (res->modes[i].id == modeID) { - XRRCrtcInfo *crtc; + const XRRModeInfo *info = &res->modes[i]; + if (info->id == modeID) { + XRRCrtcInfo *crtcinfo; Rotation rotation = 0; - const XRRModeInfo *info = &res->modes[i]; - crtc = X11_XRRGetCrtcInfo(display, res, output_info->crtc); - if (crtc) { - rotation = crtc->rotation; - X11_XRRFreeCrtcInfo(crtc); + crtcinfo = X11_XRRGetCrtcInfo(display, res, crtc); + if (crtcinfo) { + rotation = crtcinfo->rotation; + X11_XRRFreeCrtcInfo(crtcinfo); } if (rotation & (XRANDR_ROTATION_LEFT|XRANDR_ROTATION_RIGHT)) { @@ -284,6 +302,205 @@ SetXRandRModeInfo(Display *display, XRRScreenResources *res, XRROutputInfo *outp } return SDL_FALSE; } + +static void +SetXRandRDisplayName(Display *dpy, Atom EDID, char *name, const size_t namelen, RROutput output, const unsigned long widthmm, const unsigned long heightmm) +{ + /* See if we can get the EDID data for the real monitor name */ + int inches; + int nprop; + Atom *props = X11_XRRListOutputProperties(dpy, output, &nprop); + int i; + + for (i = 0; i < nprop; ++i) { + unsigned char *prop; + int actual_format; + unsigned long nitems, bytes_after; + Atom actual_type; + + if (props[i] == EDID) { + if (X11_XRRGetOutputProperty(dpy, output, props[i], 0, 100, False, + False, AnyPropertyType, &actual_type, + &actual_format, &nitems, &bytes_after, + &prop) == Success) { + MonitorInfo *info = decode_edid(prop); + if (info) { +#ifdef X11MODES_DEBUG + printf("Found EDID data for %s\n", name); + dump_monitor_info(info); +#endif + SDL_strlcpy(name, info->dsc_product_name, namelen); + free(info); + } + X11_XFree(prop); + } + break; + } + } + + if (props) { + X11_XFree(props); + } + + inches = (int)((SDL_sqrt(widthmm * widthmm + heightmm * heightmm) / 25.4f) + 0.5f); + if (*name && inches) { + const size_t len = SDL_strlen(name); + SDL_snprintf(&name[len], namelen-len, " %d\"", inches); + } + +#ifdef X11MODES_DEBUG + printf("Display name: %s\n", name); +#endif +} + + +int +X11_InitModes_XRandR(_THIS) +{ + SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; + Display *dpy = data->display; + const int screencount = ScreenCount(dpy); + const int default_screen = DefaultScreen(dpy); + RROutput primary = X11_XRRGetOutputPrimary(dpy, RootWindow(dpy, default_screen)); + Atom EDID = X11_XInternAtom(dpy, "EDID", False); + XRRScreenResources *res = NULL; + Uint32 pixelformat; + XVisualInfo vinfo; + XPixmapFormatValues *pixmapformats; + int looking_for_primary; + int scanline_pad; + int output; + int screen, i, n; + + for (looking_for_primary = 1; looking_for_primary >= 0; looking_for_primary--) { + for (screen = 0; screen < screencount; screen++) { + + /* we want the primary output first, and then skipped later. */ + if (looking_for_primary && (screen != default_screen)) { + continue; + } + + if (get_visualinfo(dpy, screen, &vinfo) < 0) { + continue; /* uh, skip this screen? */ + } + + pixelformat = X11_GetPixelFormatFromVisualInfo(dpy, &vinfo); + if (SDL_ISPIXELFORMAT_INDEXED(pixelformat)) { + continue; /* Palettized video modes are no longer supported */ + } + + scanline_pad = SDL_BYTESPERPIXEL(pixelformat) * 8; + pixmapformats = X11_XListPixmapFormats(dpy, &n); + if (pixmapformats) { + for (i = 0; i < n; ++i) { + if (pixmapformats[i].depth == vinfo.depth) { + scanline_pad = pixmapformats[i].scanline_pad; + break; + } + } + X11_XFree(pixmapformats); + } + + res = X11_XRRGetScreenResources(dpy, RootWindow(dpy, screen)); + if (!res) { + continue; + } + + for (output = 0; output < res->noutput; output++) { + XRROutputInfo *output_info; + int display_x, display_y; + unsigned long display_mm_width, display_mm_height; + SDL_DisplayData *displaydata; + char display_name[128]; + SDL_DisplayMode mode; + SDL_DisplayModeData *modedata; + SDL_VideoDisplay display; + RRMode modeID; + RRCrtc output_crtc; + XRRCrtcInfo *crtc; + + /* The primary output _should_ always be sorted first, but just in case... */ + if ((looking_for_primary && (res->outputs[output] != primary)) || + (!looking_for_primary && (screen == default_screen) && (res->outputs[output] == primary))) { + continue; + } + + output_info = X11_XRRGetOutputInfo(dpy, res, res->outputs[output]); + if (!output_info || !output_info->crtc || output_info->connection == RR_Disconnected) { + X11_XRRFreeOutputInfo(output_info); + continue; + } + + SDL_strlcpy(display_name, output_info->name, sizeof(display_name)); + display_mm_width = output_info->mm_width; + display_mm_height = output_info->mm_height; + output_crtc = output_info->crtc; + X11_XRRFreeOutputInfo(output_info); + + crtc = X11_XRRGetCrtcInfo(dpy, res, output_crtc); + if (!crtc) { + continue; + } + + SDL_zero(mode); + modeID = crtc->mode; + mode.w = crtc->width; + mode.h = crtc->height; + mode.format = pixelformat; + + display_x = crtc->x; + display_y = crtc->y; + + X11_XRRFreeCrtcInfo(crtc); + + displaydata = (SDL_DisplayData *) SDL_calloc(1, sizeof(*displaydata)); + if (!displaydata) { + return SDL_OutOfMemory(); + } + + modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); + if (!modedata) { + SDL_free(displaydata); + return SDL_OutOfMemory(); + } + modedata->xrandr_mode = modeID; + mode.driverdata = modedata; + + displaydata->screen = screen; + displaydata->visual = vinfo.visual; + displaydata->depth = vinfo.depth; + displaydata->hdpi = ((float) mode.w) * 25.4f / display_mm_width; + displaydata->vdpi = ((float) mode.h) * 25.4f / display_mm_height; + displaydata->ddpi = SDL_ComputeDiagonalDPI(mode.w, mode.h, ((float) display_mm_width) / 25.4f,((float) display_mm_height) / 25.4f); + displaydata->scanline_pad = scanline_pad; + displaydata->x = display_x; + displaydata->y = display_y; + displaydata->use_xrandr = 1; + displaydata->xrandr_output = res->outputs[output]; + + SetXRandRModeInfo(dpy, res, output_crtc, modeID, &mode); + SetXRandRDisplayName(dpy, EDID, display_name, sizeof (display_name), res->outputs[output], display_mm_width, display_mm_height); + + SDL_zero(display); + if (*display_name) { + display.name = display_name; + } + display.desktop_mode = mode; + display.current_mode = mode; + display.driverdata = displaydata; + SDL_AddVideoDisplay(&display); + } + + X11_XRRFreeScreenResources(res); + } + } + + if (_this->num_displays == 0) { + return SDL_SetError("No available displays"); + } + + return 0; +} #endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ #if SDL_VIDEO_DRIVER_X11_XVIDMODE @@ -375,7 +592,7 @@ int X11_InitModes(_THIS) { SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - int screen, screencount; + int snum, screen, screencount; #if SDL_VIDEO_DRIVER_X11_XINERAMA int xinerama_major, xinerama_minor; int use_xinerama = 0; @@ -383,21 +600,39 @@ X11_InitModes(_THIS) #endif #if SDL_VIDEO_DRIVER_X11_XRANDR int xrandr_major, xrandr_minor; - int use_xrandr = 0; - XRRScreenResources *res = NULL; #endif #if SDL_VIDEO_DRIVER_X11_XVIDMODE int vm_major, vm_minor; int use_vidmode = 0; #endif +/* XRandR is the One True Modern Way to do this on X11. If it's enabled and + available, don't even look at other ways of doing things. */ +#if SDL_VIDEO_DRIVER_X11_XRANDR + /* require at least XRandR v1.3 */ + if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) && + (xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 3))) { + return X11_InitModes_XRandR(_this); + } +#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ + +/* !!! FIXME: eventually remove support for Xinerama and XVidMode (everything below here). */ + #if SDL_VIDEO_DRIVER_X11_XINERAMA /* Query Xinerama extention * NOTE: This works with Nvidia Twinview correctly, but you need version 302.17 (released on June 2012) * or newer of the Nvidia binary drivers */ if (CheckXinerama(data->display, &xinerama_major, &xinerama_minor)) { + int (*handler) (Display *, XErrorEvent *); + X11_XSync(data->display, False); + handler = X11_XSetErrorHandler(X11_XineramaFailed); xinerama = X11_XineramaQueryScreens(data->display, &screencount); + X11_XSync(data->display, False); + X11_XSetErrorHandler(handler); + if (xinerama_triggered_error) { + xinerama = 0; + } if (xinerama) { use_xinerama = xinerama_major * 100 + xinerama_minor; } @@ -409,21 +644,13 @@ X11_InitModes(_THIS) screencount = ScreenCount(data->display); #endif /* SDL_VIDEO_DRIVER_X11_XINERAMA */ -#if SDL_VIDEO_DRIVER_X11_XRANDR - /* require at least XRandR v1.2 */ - if (CheckXRandR(data->display, &xrandr_major, &xrandr_minor) && - (xrandr_major >= 2 || (xrandr_major == 1 && xrandr_minor >= 2))) { - use_xrandr = xrandr_major * 100 + xrandr_minor; - } -#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ - #if SDL_VIDEO_DRIVER_X11_XVIDMODE if (CheckVidMode(data->display, &vm_major, &vm_minor)) { use_vidmode = vm_major * 100 + vm_minor; } #endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ - for (screen = 0; screen < screencount; ++screen) { + for (snum = 0; snum < screencount; ++snum) { XVisualInfo vinfo; SDL_VideoDisplay display; SDL_DisplayData *displaydata; @@ -433,6 +660,15 @@ X11_InitModes(_THIS) char display_name[128]; int i, n; + /* Re-order screens to always put default screen first */ + if (snum == 0) { + screen = DefaultScreen(data->display); + } else if (snum == DefaultScreen(data->display)) { + screen = 0; + } else { + screen = snum; + } + #if SDL_VIDEO_DRIVER_X11_XINERAMA if (xinerama) { if (get_visualinfo(data->display, 0, &vinfo) < 0) { @@ -500,6 +736,18 @@ X11_InitModes(_THIS) displaydata->visual = vinfo.visual; displaydata->depth = vinfo.depth; + // We use the displaydata screen index here so that this works + // for both the Xinerama case, where we get the overall DPI, + // and the regular X11 screen info case. + displaydata->hdpi = (float)DisplayWidth(data->display, displaydata->screen) * 25.4f / + DisplayWidthMM(data->display, displaydata->screen); + displaydata->vdpi = (float)DisplayHeight(data->display, displaydata->screen) * 25.4f / + DisplayHeightMM(data->display, displaydata->screen); + displaydata->ddpi = SDL_ComputeDiagonalDPI(DisplayWidth(data->display, displaydata->screen), + DisplayHeight(data->display, displaydata->screen), + (float)DisplayWidthMM(data->display, displaydata->screen) / 25.4f, + (float)DisplayHeightMM(data->display, displaydata->screen) / 25.4f); + displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8; pixmapFormats = X11_XListPixmapFormats(data->display, &n); if (pixmapFormats) { @@ -524,106 +772,6 @@ X11_InitModes(_THIS) displaydata->y = 0; } -#if SDL_VIDEO_DRIVER_X11_XRANDR - if (use_xrandr) { - res = X11_XRRGetScreenResources(data->display, RootWindow(data->display, displaydata->screen)); - } - if (res) { - XRROutputInfo *output_info; - XRRCrtcInfo *crtc; - int output; - Atom EDID = X11_XInternAtom(data->display, "EDID", False); - Atom *props; - int nprop; - unsigned long width_mm; - unsigned long height_mm; - int inches = 0; - - for (output = 0; output < res->noutput; output++) { - output_info = X11_XRRGetOutputInfo(data->display, res, res->outputs[output]); - if (!output_info || !output_info->crtc || - output_info->connection == RR_Disconnected) { - X11_XRRFreeOutputInfo(output_info); - continue; - } - - /* Is this the output that corresponds to the current screen? - We're checking the crtc position, but that may not be a valid test - in all cases. Anybody want to give this some love? - */ - crtc = X11_XRRGetCrtcInfo(data->display, res, output_info->crtc); - if (!crtc || crtc->x != displaydata->x || crtc->y != displaydata->y || - crtc->width != mode.w || crtc->height != mode.h) { - X11_XRRFreeOutputInfo(output_info); - X11_XRRFreeCrtcInfo(crtc); - continue; - } - - displaydata->use_xrandr = use_xrandr; - displaydata->xrandr_output = res->outputs[output]; - SetXRandRModeInfo(data->display, res, output_info, crtc->mode, &mode); - - /* Get the name of this display */ - width_mm = output_info->mm_width; - height_mm = output_info->mm_height; - inches = (int)((sqrt(width_mm * width_mm + - height_mm * height_mm) / 25.4f) + 0.5f); - SDL_strlcpy(display_name, output_info->name, sizeof(display_name)); - - /* See if we can get the EDID data for the real monitor name */ - props = X11_XRRListOutputProperties(data->display, res->outputs[output], &nprop); - for (i = 0; i < nprop; ++i) { - unsigned char *prop; - int actual_format; - unsigned long nitems, bytes_after; - Atom actual_type; - - if (props[i] == EDID) { - if (X11_XRRGetOutputProperty(data->display, - res->outputs[output], props[i], - 0, 100, False, False, - AnyPropertyType, - &actual_type, &actual_format, - &nitems, &bytes_after, &prop) == Success ) { - MonitorInfo *info = decode_edid(prop); - if (info) { - #ifdef X11MODES_DEBUG - printf("Found EDID data for %s\n", output_info->name); - dump_monitor_info(info); - #endif - SDL_strlcpy(display_name, info->dsc_product_name, sizeof(display_name)); - free(info); - } - X11_XFree(prop); - } - break; - } - } - if (props) { - X11_XFree(props); - } - - if (*display_name && inches) { - size_t len = SDL_strlen(display_name); - SDL_snprintf(&display_name[len], sizeof(display_name)-len, " %d\"", inches); - } -#ifdef X11MODES_DEBUG - printf("Display name: %s\n", display_name); -#endif - - X11_XRRFreeOutputInfo(output_info); - X11_XRRFreeCrtcInfo(crtc); - break; - } -#ifdef X11MODES_DEBUG - if (output == res->noutput) { - printf("Couldn't find XRandR CRTC at %d,%d\n", displaydata->x, displaydata->y); - } -#endif - X11_XRRFreeScreenResources(res); - } -#endif /* SDL_VIDEO_DRIVER_X11_XRANDR */ - #if SDL_VIDEO_DRIVER_X11_XVIDMODE if (!displaydata->use_xrandr && #if SDL_VIDEO_DRIVER_X11_XINERAMA @@ -674,7 +822,6 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) int screen_w; int screen_h; SDL_DisplayMode mode; - SDL_DisplayModeData *modedata; /* Unfortunately X11 requires the window to be created with the correct * visual and depth ahead of time, but the SDL API allows you to create @@ -692,6 +839,7 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) if (data->use_xinerama) { if (data->use_vidmode && !data->xinerama_info.x_org && !data->xinerama_info.y_org && (screen_w > data->xinerama_info.width || screen_h > data->xinerama_info.height)) { + SDL_DisplayModeData *modedata; /* Add the full (both screens combined) xinerama mode only on the display that starts at 0,0 * if we're using vidmode. */ @@ -703,10 +851,13 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) *modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; } mode.driverdata = modedata; - SDL_AddDisplayMode(sdl_display, &mode); + if (!SDL_AddDisplayMode(sdl_display, &mode)) { + SDL_free(modedata); + } } else if (!data->use_xrandr) { + SDL_DisplayModeData *modedata; /* Add the current mode of each monitor otherwise if we can't get them from xrandr */ mode.w = data->xinerama_info.width; mode.h = data->xinerama_info.height; @@ -716,7 +867,9 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) *modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; } mode.driverdata = modedata; - SDL_AddDisplayMode(sdl_display, &mode); + if (!SDL_AddDisplayMode(sdl_display, &mode)) { + SDL_free(modedata); + } } } @@ -741,9 +894,8 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) } mode.driverdata = modedata; - if (SetXRandRModeInfo(display, res, output_info, output_info->modes[i], &mode)) { - SDL_AddDisplayMode(sdl_display, &mode); - } else { + if (!SetXRandRModeInfo(display, res, output_info->crtc, output_info->modes[i], &mode) || + !SDL_AddDisplayMode(sdl_display, &mode)) { SDL_free(modedata); } } @@ -759,6 +911,7 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) if (data->use_vidmode && X11_XF86VidModeGetAllModeLines(display, data->vidmode_screen, &nmodes, &modes)) { int i; + SDL_DisplayModeData *modedata; #ifdef X11MODES_DEBUG printf("VidMode modes: (unsorted)\n"); @@ -775,9 +928,7 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) } mode.driverdata = modedata; - if (SetXVidModeModeInfo(modes[i], &mode)) { - SDL_AddDisplayMode(sdl_display, &mode); - } else { + if (!SetXVidModeModeInfo(modes[i], &mode) || !SDL_AddDisplayMode(sdl_display, &mode)) { SDL_free(modedata); } } @@ -787,6 +938,7 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) #endif /* SDL_VIDEO_DRIVER_X11_XVIDMODE */ if (!data->use_xrandr && !data->use_vidmode) { + SDL_DisplayModeData *modedata; /* Add the desktop mode */ mode = sdl_display->desktop_mode; modedata = (SDL_DisplayModeData *) SDL_calloc(1, sizeof(SDL_DisplayModeData)); @@ -794,17 +946,22 @@ X11_GetDisplayModes(_THIS, SDL_VideoDisplay * sdl_display) *modedata = *(SDL_DisplayModeData *)sdl_display->desktop_mode.driverdata; } mode.driverdata = modedata; - SDL_AddDisplayMode(sdl_display, &mode); + if (!SDL_AddDisplayMode(sdl_display, &mode)) { + SDL_free(modedata); + } } } int X11_SetDisplayMode(_THIS, SDL_VideoDisplay * sdl_display, SDL_DisplayMode * mode) { - Display *display = ((SDL_VideoData *) _this->driverdata)->display; + SDL_VideoData *viddata = (SDL_VideoData *) _this->driverdata; + Display *display = viddata->display; SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; SDL_DisplayModeData *modedata = (SDL_DisplayModeData *)mode->driverdata; + viddata->last_mode_change_deadline = SDL_GetTicks() + (PENDING_FOCUS_TIME * 2); + #if SDL_VIDEO_DRIVER_X11_XRANDR if (data->use_xrandr) { XRRScreenResources *res; @@ -884,6 +1041,24 @@ X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect) return 0; } +int +X11_GetDisplayDPI(_THIS, SDL_VideoDisplay * sdl_display, float * ddpi, float * hdpi, float * vdpi) +{ + SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata; + + if (ddpi) { + *ddpi = data->ddpi; + } + if (hdpi) { + *hdpi = data->hdpi; + } + if (vdpi) { + *vdpi = data->vdpi; + } + + return data->ddpi != 0.0f ? 0 : -1; +} + #endif /* SDL_VIDEO_DRIVER_X11 */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11modes.h b/Engine/lib/sdl/src/video/x11/SDL_x11modes.h index 82af1d2d8b..a68286ab19 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11modes.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11modes.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -31,6 +31,9 @@ typedef struct int scanline_pad; int x; int y; + float ddpi; + float hdpi; + float vdpi; int use_xinerama; int use_xrandr; @@ -74,6 +77,7 @@ extern int X11_GetVisualInfoFromVisual(Display * display, Visual * visual, extern Uint32 X11_GetPixelFormatFromVisualInfo(Display * display, XVisualInfo * vinfo); extern int X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect); +extern int X11_GetDisplayDPI(_THIS, SDL_VideoDisplay * sdl_display, float * ddpi, float * hdpi, float * vdpi); #endif /* _SDL_x11modes_h */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11mouse.c b/Engine/lib/sdl/src/video/x11/SDL_x11mouse.c index 38bb86656d..245b116ea6 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11mouse.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11mouse.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -318,6 +318,16 @@ X11_WarpMouse(SDL_Window * window, int x, int y) X11_XSync(display, False); } +static int +X11_WarpMouseGlobal(int x, int y) +{ + Display *display = GetDisplay(); + + X11_XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, x, y); + X11_XSync(display, False); + return 0; +} + static int X11_SetRelativeMouseMode(SDL_bool enabled) { @@ -330,6 +340,68 @@ X11_SetRelativeMouseMode(SDL_bool enabled) return -1; } +static int +X11_CaptureMouse(SDL_Window *window) +{ + Display *display = GetDisplay(); + + if (window) { + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + const unsigned int mask = ButtonPressMask | ButtonReleaseMask | PointerMotionMask | FocusChangeMask; + const int rc = X11_XGrabPointer(display, data->xwindow, False, + mask, GrabModeAsync, GrabModeAsync, + None, None, CurrentTime); + if (rc != GrabSuccess) { + return SDL_SetError("X server refused mouse capture"); + } + } else { + X11_XUngrabPointer(display, CurrentTime); + } + + X11_XSync(display, False); + + return 0; +} + +static Uint32 +X11_GetGlobalMouseState(int *x, int *y) +{ + Display *display = GetDisplay(); + const int num_screens = SDL_GetNumVideoDisplays(); + int i; + + /* !!! FIXME: should we XSync() here first? */ + + for (i = 0; i < num_screens; i++) { + SDL_DisplayData *data = (SDL_DisplayData *) SDL_GetDisplayDriverData(i); + if (data != NULL) { + Window root, child; + int rootx, rooty, winx, winy; + unsigned int mask; + if (X11_XQueryPointer(display, RootWindow(display, data->screen), &root, &child, &rootx, &rooty, &winx, &winy, &mask)) { + XWindowAttributes root_attrs; + Uint32 retval = 0; + retval |= (mask & Button1Mask) ? SDL_BUTTON_LMASK : 0; + retval |= (mask & Button2Mask) ? SDL_BUTTON_MMASK : 0; + retval |= (mask & Button3Mask) ? SDL_BUTTON_RMASK : 0; + /* SDL_DisplayData->x,y point to screen origin, and adding them to mouse coordinates relative to root window doesn't do the right thing + * (observed on dual monitor setup with primary display being the rightmost one - mouse was offset to the right). + * + * Adding root position to root-relative coordinates seems to be a better way to get absolute position. */ + X11_XGetWindowAttributes(display, root, &root_attrs); + *x = root_attrs.x + rootx; + *y = root_attrs.y + rooty; + return retval; + } + } + } + + SDL_assert(0 && "The pointer wasn't on any X11 screen?!"); + + return 0; +} + + void X11_InitMouse(_THIS) { @@ -340,7 +412,10 @@ X11_InitMouse(_THIS) mouse->ShowCursor = X11_ShowCursor; mouse->FreeCursor = X11_FreeCursor; mouse->WarpMouse = X11_WarpMouse; + mouse->WarpMouseGlobal = X11_WarpMouseGlobal; mouse->SetRelativeMouseMode = X11_SetRelativeMouseMode; + mouse->CaptureMouse = X11_CaptureMouse; + mouse->GetGlobalMouseState = X11_GetGlobalMouseState; SDL_SetDefaultCursor(X11_CreateDefaultCursor()); } diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11mouse.h b/Engine/lib/sdl/src/video/x11/SDL_x11mouse.h index 8a2dac0ea2..d31d6b7220 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11mouse.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11mouse.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11opengl.c b/Engine/lib/sdl/src/video/x11/SDL_x11opengl.c index 1d2603e0b8..8b634be3d4 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11opengl.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11opengl.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -122,6 +122,13 @@ typedef GLXContext(*PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display * dpy, #define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 #endif +#ifndef GLX_ARB_context_flush_control +#define GLX_ARB_context_flush_control +#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0x0000 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#endif + #define OPENGL_REQUIRES_DLOPEN #if defined(OPENGL_REQUIRES_DLOPEN) && defined(SDL_LOADSO_DLOPEN) #include @@ -279,14 +286,14 @@ HasExtension(const char *extension, const char *extensions) const char *start; const char *where, *terminator; + if (!extensions) + return SDL_FALSE; + /* Extension names should not have spaces. */ where = SDL_strchr(extension, ' '); if (where || *extension == '\0') return SDL_FALSE; - if (!extensions) - return SDL_FALSE; - /* It takes a bit of care to be fool-proof about parsing the * OpenGL extensions string. Don't be fooled by sub-strings, * etc. */ @@ -312,32 +319,10 @@ static void X11_GL_InitExtensions(_THIS) { Display *display = ((SDL_VideoData *) _this->driverdata)->display; - int screen = DefaultScreen(display); - XVisualInfo *vinfo; - XSetWindowAttributes xattr; - Window w; - GLXContext context; + const int screen = DefaultScreen(display); const char *(*glXQueryExtensionsStringFunc) (Display *, int); const char *extensions; - vinfo = X11_GL_GetVisual(_this, display, screen); - if (!vinfo) { - return; - } - xattr.background_pixel = 0; - xattr.border_pixel = 0; - xattr.colormap = - X11_XCreateColormap(display, RootWindow(display, screen), vinfo->visual, - AllocNone); - w = X11_XCreateWindow(display, RootWindow(display, screen), 0, 0, 32, 32, 0, - vinfo->depth, InputOutput, vinfo->visual, - (CWBackPixel | CWBorderPixel | CWColormap), &xattr); - context = _this->gl_data->glXCreateContext(display, vinfo, NULL, True); - if (context) { - _this->gl_data->glXMakeCurrent(display, w, context); - } - X11_XFree(vinfo); - glXQueryExtensionsStringFunc = (const char *(*)(Display *, int)) X11_GL_GetProcAddress(_this, "glXQueryExtensionsString"); @@ -373,6 +358,16 @@ X11_GL_InitExtensions(_THIS) (int (*)(int)) X11_GL_GetProcAddress(_this, "glXSwapIntervalSGI"); } + /* Check for GLX_ARB_create_context */ + if (HasExtension("GLX_ARB_create_context", extensions)) { + _this->gl_data->glXCreateContextAttribsARB = + (GLXContext (*)(Display*,GLXFBConfig,GLXContext,Bool,const int *)) + X11_GL_GetProcAddress(_this, "glXCreateContextAttribsARB"); + _this->gl_data->glXChooseFBConfig = + (GLXFBConfig *(*)(Display *, int, const int *, int *)) + X11_GL_GetProcAddress(_this, "glXChooseFBConfig"); + } + /* Check for GLX_EXT_visual_rating */ if (HasExtension("GLX_EXT_visual_rating", extensions)) { _this->gl_data->HAS_GLX_EXT_visual_rating = SDL_TRUE; @@ -388,18 +383,16 @@ X11_GL_InitExtensions(_THIS) _this->gl_data->HAS_GLX_EXT_create_context_es2_profile = SDL_TRUE; } - if (context) { - _this->gl_data->glXMakeCurrent(display, None, NULL); - _this->gl_data->glXDestroyContext(display, context); + /* Check for GLX_ARB_context_flush_control */ + if (HasExtension("GLX_ARB_context_flush_control", extensions)) { + _this->gl_data->HAS_GLX_ARB_context_flush_control = SDL_TRUE; } - X11_XDestroyWindow(display, w); - X11_PumpEvents(_this); } /* glXChooseVisual and glXChooseFBConfig have some small differences in * the attribute encoding, it can be chosen with the for_FBConfig parameter. */ -int +static int X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int size, Bool for_FBConfig) { int i = 0; @@ -481,9 +474,7 @@ X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int si if (_this->gl_config.framebuffer_srgb_capable) { attribs[i++] = GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB; - if( for_FBConfig ) { - attribs[i++] = True; - } + attribs[i++] = True; /* always needed, for_FBConfig or not! */ } if (_this->gl_config.accelerated >= 0 && @@ -511,17 +502,16 @@ X11_GL_GetAttributes(_THIS, Display * display, int screen, int * attribs, int si XVisualInfo * X11_GL_GetVisual(_THIS, Display * display, int screen) { - XVisualInfo *vinfo; - /* 64 seems nice. */ int attribs[64]; - X11_GL_GetAttributes(_this,display,screen,attribs,64,SDL_FALSE); + XVisualInfo *vinfo; if (!_this->gl_data) { /* The OpenGL library wasn't loaded, SDL_GetError() should have info */ return NULL; } + X11_GL_GetAttributes(_this, display, screen, attribs, 64, SDL_FALSE); vinfo = _this->gl_data->glXChooseVisual(display, screen, attribs); if (!vinfo) { SDL_SetError("Couldn't find matching GLX visual"); @@ -539,25 +529,32 @@ X11_GL_GetVisual(_THIS, Display * display, int screen) #define GLXBadProfileARB 13 #endif static int (*handler) (Display *, XErrorEvent *) = NULL; +static const char *errorHandlerOperation = NULL; static int errorBase = 0; +static int errorCode = 0; static int -X11_GL_CreateContextErrorHandler(Display * d, XErrorEvent * e) +X11_GL_ErrorHandler(Display * d, XErrorEvent * e) { - switch (e->error_code) { - case BadRequest: - case BadMatch: - case BadValue: - case BadAlloc: - return (0); - default: - if (errorBase && - (e->error_code == errorBase + GLXBadContext || - e->error_code == errorBase + GLXBadFBConfig || - e->error_code == errorBase + GLXBadProfileARB)) { - return (0); - } - return (handler(d, e)); + char *x11_error = NULL; + char x11_error_locale[256]; + + errorCode = e->error_code; + if (X11_XGetErrorText(d, errorCode, x11_error_locale, sizeof(x11_error_locale)) == Success) + { + x11_error = SDL_iconv_string("UTF-8", "", x11_error_locale, SDL_strlen(x11_error_locale)+1); + } + + if (x11_error) + { + SDL_SetError("Could not %s: %s", errorHandlerOperation, x11_error); + SDL_free(x11_error); + } + else + { + SDL_SetError("Could not %s: %i (Base %i)\n", errorHandlerOperation, errorCode, errorBase); } + + return (0); } SDL_GLContext @@ -571,7 +568,6 @@ X11_GL_CreateContext(_THIS, SDL_Window * window) XVisualInfo v, *vinfo; int n; GLXContext context = NULL, share_context; - PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribs = NULL; if (_this->gl_config.share_with_current_context) { share_context = (GLXContext)SDL_GL_GetCurrentContext(); @@ -581,8 +577,10 @@ X11_GL_CreateContext(_THIS, SDL_Window * window) /* We do this to create a clean separation between X and GLX errors. */ X11_XSync(display, False); + errorHandlerOperation = "create GL context"; errorBase = _this->gl_data->errorBase; - handler = X11_XSetErrorHandler(X11_GL_CreateContextErrorHandler); + errorCode = Success; + handler = X11_XSetErrorHandler(X11_GL_ErrorHandler); X11_XGetWindowAttributes(display, data->xwindow, &xattr); v.screen = screen; v.visualid = X11_XVisualIDFromVisual(xattr.visual); @@ -595,78 +593,61 @@ X11_GL_CreateContext(_THIS, SDL_Window * window) context = _this->gl_data->glXCreateContext(display, vinfo, share_context, True); } else { - /* If we want a GL 3.0 context or later we need to get a temporary - context to grab the new context creation function */ - GLXContext temp_context = - _this->gl_data->glXCreateContext(display, vinfo, NULL, True); - if (temp_context) { - /* max 8 attributes plus terminator */ - int attribs[9] = { - GLX_CONTEXT_MAJOR_VERSION_ARB, - _this->gl_config.major_version, - GLX_CONTEXT_MINOR_VERSION_ARB, - _this->gl_config.minor_version, - 0 - }; - int iattr = 4; - - /* SDL profile bits match GLX profile bits */ - if( _this->gl_config.profile_mask != 0 ) { - attribs[iattr++] = GLX_CONTEXT_PROFILE_MASK_ARB; - attribs[iattr++] = _this->gl_config.profile_mask; - } + /* max 10 attributes plus terminator */ + int attribs[11] = { + GLX_CONTEXT_MAJOR_VERSION_ARB, + _this->gl_config.major_version, + GLX_CONTEXT_MINOR_VERSION_ARB, + _this->gl_config.minor_version, + 0 + }; + int iattr = 4; + + /* SDL profile bits match GLX profile bits */ + if( _this->gl_config.profile_mask != 0 ) { + attribs[iattr++] = GLX_CONTEXT_PROFILE_MASK_ARB; + attribs[iattr++] = _this->gl_config.profile_mask; + } - /* SDL flags match GLX flags */ - if( _this->gl_config.flags != 0 ) { - attribs[iattr++] = GLX_CONTEXT_FLAGS_ARB; - attribs[iattr++] = _this->gl_config.flags; - } + /* SDL flags match GLX flags */ + if( _this->gl_config.flags != 0 ) { + attribs[iattr++] = GLX_CONTEXT_FLAGS_ARB; + attribs[iattr++] = _this->gl_config.flags; + } - attribs[iattr++] = 0; + /* only set if glx extension is available */ + if( _this->gl_data->HAS_GLX_ARB_context_flush_control ) { + attribs[iattr++] = GLX_CONTEXT_RELEASE_BEHAVIOR_ARB; + attribs[iattr++] = + _this->gl_config.release_behavior ? + GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB : + GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB; + } + + attribs[iattr++] = 0; + + /* Get a pointer to the context creation function for GL 3.0 */ + if (!_this->gl_data->glXCreateContextAttribsARB) { + SDL_SetError("OpenGL 3.0 and later are not supported by this system"); + } else { + int glxAttribs[64]; - /* Get a pointer to the context creation function for GL 3.0 */ - glXCreateContextAttribs = - (PFNGLXCREATECONTEXTATTRIBSARBPROC) _this->gl_data-> - glXGetProcAddress((GLubyte *) - "glXCreateContextAttribsARB"); - if (!glXCreateContextAttribs) { - SDL_SetError("GL 3.x is not supported"); - context = temp_context; + /* Create a GL 3.x context */ + GLXFBConfig *framebuffer_config = NULL; + int fbcount = 0; + + X11_GL_GetAttributes(_this,display,screen,glxAttribs,64,SDL_TRUE); + + if (!_this->gl_data->glXChooseFBConfig + || !(framebuffer_config = + _this->gl_data->glXChooseFBConfig(display, + DefaultScreen(display), glxAttribs, + &fbcount))) { + SDL_SetError("No good framebuffers found. OpenGL 3.0 and later unavailable"); } else { - int glxAttribs[64]; - - /* Create a GL 3.x context */ - GLXFBConfig *framebuffer_config = NULL; - int fbcount = 0; - GLXFBConfig *(*glXChooseFBConfig) (Display * disp, - int screen, - const int *attrib_list, - int *nelements); - - glXChooseFBConfig = - (GLXFBConfig * - (*)(Display *, int, const int *, - int *)) _this->gl_data-> - glXGetProcAddress((GLubyte *) "glXChooseFBConfig"); - - X11_GL_GetAttributes(_this,display,screen,glxAttribs,64,SDL_TRUE); - - if (!glXChooseFBConfig - || !(framebuffer_config = - glXChooseFBConfig(display, - DefaultScreen(display), glxAttribs, - &fbcount))) { - SDL_SetError - ("No good framebuffers found. GL 3.x disabled"); - context = temp_context; - } else { - context = - glXCreateContextAttribs(display, + context = _this->gl_data->glXCreateContextAttribsARB(display, framebuffer_config[0], share_context, True, attribs); - _this->gl_data->glXDestroyContext(display, - temp_context); - } } } } @@ -676,7 +657,9 @@ X11_GL_CreateContext(_THIS, SDL_Window * window) X11_XSetErrorHandler(handler); if (!context) { - SDL_SetError("Could not create GL context"); + if (errorCode == Success) { + SDL_SetError("Could not create GL context"); + } return NULL; } @@ -695,12 +678,24 @@ X11_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context) Window drawable = (context ? ((SDL_WindowData *) window->driverdata)->xwindow : None); GLXContext glx_context = (GLXContext) context; + int rc; if (!_this->gl_data) { return SDL_SetError("OpenGL not initialized"); } - if (!_this->gl_data->glXMakeCurrent(display, drawable, glx_context)) { + /* We do this to create a clean separation between X and GLX errors. */ + X11_XSync(display, False); + errorHandlerOperation = "make GL context current"; + errorBase = _this->gl_data->errorBase; + errorCode = Success; + handler = X11_XSetErrorHandler(X11_GL_ErrorHandler); + rc = _this->gl_data->glXMakeCurrent(display, drawable, glx_context); + X11_XSetErrorHandler(handler); + + if (errorCode != Success) { /* uhoh, an X error was thrown! */ + return -1; /* the error handler called SDL_SetError() already. */ + } else if (!rc) { /* glxMakeCurrent() failed without throwing an X error */ return SDL_SetError("Unable to make GL context current"); } diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11opengl.h b/Engine/lib/sdl/src/video/x11/SDL_x11opengl.h index ed7f292d45..86e77d7da1 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11opengl.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11opengl.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -35,11 +35,14 @@ struct SDL_GLDriverData SDL_bool HAS_GLX_EXT_visual_info; SDL_bool HAS_GLX_EXT_swap_control_tear; SDL_bool HAS_GLX_EXT_create_context_es2_profile; + SDL_bool HAS_GLX_ARB_context_flush_control; Bool (*glXQueryExtension) (Display*,int*,int*); void *(*glXGetProcAddress) (const GLubyte*); XVisualInfo *(*glXChooseVisual) (Display*,int,int*); GLXContext (*glXCreateContext) (Display*,XVisualInfo*,GLXContext,Bool); + GLXContext (*glXCreateContextAttribsARB) (Display*,GLXFBConfig,GLXContext,Bool,const int *); + GLXFBConfig *(*glXChooseFBConfig) (Display*,int,const int *,int *); void (*glXDestroyContext) (Display*, GLXContext); Bool(*glXMakeCurrent) (Display*,GLXDrawable,GLXContext); void (*glXSwapBuffers) (Display*, GLXDrawable); diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11opengles.c b/Engine/lib/sdl/src/video/x11/SDL_x11opengles.c index bce59b1085..5311722008 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11opengles.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11opengles.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -29,8 +29,8 @@ /* EGL implementation of SDL OpenGL support */ int -X11_GLES_LoadLibrary(_THIS, const char *path) { - +X11_GLES_LoadLibrary(_THIS, const char *path) +{ SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; /* If the profile requested is not GL ES, switch over to X11_GL functions */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11opengles.h b/Engine/lib/sdl/src/video/x11/SDL_x11opengles.h index f6ea71eb74..716e6e6882 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11opengles.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11opengles.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11shape.c b/Engine/lib/sdl/src/video/x11/SDL_x11shape.c index 5152094649..4f78ae8997 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11shape.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11shape.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11shape.h b/Engine/lib/sdl/src/video/x11/SDL_x11shape.h index 68118cfeb1..cd88ab70f5 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11shape.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11shape.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11sym.h b/Engine/lib/sdl/src/video/x11/SDL_x11sym.h index 9678bac541..3683ac0a52 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11sym.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11sym.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -152,6 +152,7 @@ SDL_X11_SYM(unsigned long,_XSetLastRequestRead,(Display* a,xGenericReply* b),(a, SDL_X11_SYM(SDL_X11_XSynchronizeRetType,XSynchronize,(Display* a,Bool b),(a,b),return) SDL_X11_SYM(SDL_X11_XESetWireToEventRetType,XESetWireToEvent,(Display* a,int b,SDL_X11_XESetWireToEventRetType c),(a,b,c),return) SDL_X11_SYM(SDL_X11_XESetEventToWireRetType,XESetEventToWire,(Display* a,int b,SDL_X11_XESetEventToWireRetType c),(a,b,c),return) +SDL_X11_SYM(void,XRefreshKeyboardMapping,(XMappingEvent *a),(a),) #if SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS SDL_X11_SYM(Bool,XGetEventData,(Display* a,XGenericEventCookie* b),(a,b),return) @@ -164,6 +165,7 @@ SDL_X11_SYM(KeySym,XkbKeycodeToKeysym,(Display* a,unsigned int b,int c,int d),(a #else SDL_X11_SYM(KeySym,XkbKeycodeToKeysym,(Display* a,KeyCode b,int c,int d),(a,b,c,d),return) #endif +SDL_X11_SYM(Status,XkbGetState,(Display* a,unsigned int b,XkbStatePtr c),(a,b,c),return) #endif #if NeedWidePrototypes @@ -203,11 +205,7 @@ SDL_X11_SYM(Bool,XShmQueryExtension,(Display* a),(a),return) */ #ifdef LONG64 SDL_X11_MODULE(IO_32BIT) -#if SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return) -#else -SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return) -#endif SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),) #endif @@ -230,6 +228,20 @@ SDL_X11_SYM(void,XcursorImageDestroy,(XcursorImage *a),(a),) SDL_X11_SYM(Cursor,XcursorImageLoadCursor,(Display *a,const XcursorImage *b),(a,b),return) #endif +/* Xdbe support */ +#if SDL_VIDEO_DRIVER_X11_XDBE +SDL_X11_MODULE(XDBE) +SDL_X11_SYM(Status,XdbeQueryExtension,(Display *dpy,int *major_version_return,int *minor_version_return),(dpy,major_version_return,minor_version_return),return) +SDL_X11_SYM(XdbeBackBuffer,XdbeAllocateBackBufferName,(Display *dpy,Window window,XdbeSwapAction swap_action),(dpy,window,swap_action),return) +SDL_X11_SYM(Status,XdbeDeallocateBackBufferName,(Display *dpy,XdbeBackBuffer buffer),(dpy,buffer),return) +SDL_X11_SYM(Status,XdbeSwapBuffers,(Display *dpy,XdbeSwapInfo *swap_info,int num_windows),(dpy,swap_info,num_windows),return) +SDL_X11_SYM(Status,XdbeBeginIdiom,(Display *dpy),(dpy),return) +SDL_X11_SYM(Status,XdbeEndIdiom,(Display *dpy),(dpy),return) +SDL_X11_SYM(XdbeScreenVisualInfo*,XdbeGetVisualInfo,(Display *dpy,Drawable *screen_specifiers,int *num_screens),(dpy,screen_specifiers,num_screens),return) +SDL_X11_SYM(void,XdbeFreeVisualInfo,(XdbeScreenVisualInfo *visual_info),(visual_info),) +SDL_X11_SYM(XdbeBackBufferAttributes*,XdbeGetBackBufferAttributes,(Display *dpy,XdbeBackBuffer buffer),(dpy,buffer),return) +#endif + /* Xinerama support */ #if SDL_VIDEO_DRIVER_X11_XINERAMA SDL_X11_MODULE(XINERAMA) @@ -272,6 +284,7 @@ SDL_X11_SYM(Status,XRRSetCrtcConfig,(Display *dpy, XRRScreenResources *resources SDL_X11_SYM(Atom*,XRRListOutputProperties,(Display *dpy, RROutput output, int *nprop),(dpy,output,nprop),return) SDL_X11_SYM(XRRPropertyInfo*,XRRQueryOutputProperty,(Display *dpy,RROutput output, Atom property),(dpy,output,property),return) SDL_X11_SYM(int,XRRGetOutputProperty,(Display *dpy,RROutput output, Atom property, long offset, long length, Bool _delete, Bool pending, Atom req_type, Atom *actual_type, int *actual_format, unsigned long *nitems, unsigned long *bytes_after, unsigned char **prop),(dpy,output,property,offset,length, _delete, pending, req_type, actual_type, actual_format, nitems, bytes_after, prop),return) +SDL_X11_SYM(RROutput,XRRGetOutputPrimary,(Display *dpy,Window window),(dpy,window),return) #endif /* MIT-SCREEN-SAVER support */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11touch.c b/Engine/lib/sdl/src/video/x11/SDL_x11touch.c index a6da04633b..c19e80a673 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11touch.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11touch.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11touch.h b/Engine/lib/sdl/src/video/x11/SDL_x11touch.h index 84de8d63dd..7f8d18e1c4 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11touch.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11touch.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11video.c b/Engine/lib/sdl/src/video/x11/SDL_x11video.c index ca9faee31e..01f8ae60f8 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11video.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11video.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -39,220 +39,6 @@ #include "SDL_x11opengles.h" #endif -/* !!! FIXME: move dbus stuff to somewhere under src/core/linux ... */ -#if SDL_USE_LIBDBUS -/* we never link directly to libdbus. */ -#include "SDL_loadso.h" -static const char *dbus_library = "libdbus-1.so.3"; -static void *dbus_handle = NULL; -static unsigned int screensaver_cookie = 0; - -/* !!! FIXME: this is kinda ugly. */ -static SDL_bool -load_dbus_sym(const char *fn, void **addr) -{ - *addr = SDL_LoadFunction(dbus_handle, fn); - if (*addr == NULL) { - /* Don't call SDL_SetError(): SDL_LoadFunction already did. */ - return SDL_FALSE; - } - - return SDL_TRUE; -} - -/* libdbus entry points... */ -static DBusConnection *(*DBUS_dbus_bus_get_private)(DBusBusType, DBusError *) = NULL; -static void (*DBUS_dbus_connection_set_exit_on_disconnect)(DBusConnection *, dbus_bool_t) = NULL; -static dbus_bool_t (*DBUS_dbus_connection_send)(DBusConnection *, DBusMessage *, dbus_uint32_t *) = NULL; -static DBusMessage *(*DBUS_dbus_connection_send_with_reply_and_block)(DBusConnection *, DBusMessage *, int, DBusError *) = NULL; -static void (*DBUS_dbus_connection_close)(DBusConnection *) = NULL; -static void (*DBUS_dbus_connection_unref)(DBusConnection *) = NULL; -static void (*DBUS_dbus_connection_flush)(DBusConnection *) = NULL; -static DBusMessage *(*DBUS_dbus_message_new_method_call)(const char *, const char *, const char *, const char *) = NULL; -static dbus_bool_t (*DBUS_dbus_message_append_args)(DBusMessage *, int, ...) = NULL; -static dbus_bool_t (*DBUS_dbus_message_get_args)(DBusMessage *, DBusError *, int, ...) = NULL; -static void (*DBUS_dbus_message_unref)(DBusMessage *) = NULL; -static void (*DBUS_dbus_error_init)(DBusError *) = NULL; -static dbus_bool_t (*DBUS_dbus_error_is_set)(const DBusError *) = NULL; -static void (*DBUS_dbus_error_free)(DBusError *) = NULL; - -static int -load_dbus_syms(void) -{ - /* cast funcs to char* first, to please GCC's strict aliasing rules. */ - #define SDL_DBUS_SYM(x) \ - if (!load_dbus_sym(#x, (void **) (char *) &DBUS_##x)) return -1 - - SDL_DBUS_SYM(dbus_bus_get_private); - SDL_DBUS_SYM(dbus_connection_set_exit_on_disconnect); - SDL_DBUS_SYM(dbus_connection_send); - SDL_DBUS_SYM(dbus_connection_send_with_reply_and_block); - SDL_DBUS_SYM(dbus_connection_close); - SDL_DBUS_SYM(dbus_connection_unref); - SDL_DBUS_SYM(dbus_connection_flush); - SDL_DBUS_SYM(dbus_message_append_args); - SDL_DBUS_SYM(dbus_message_get_args); - SDL_DBUS_SYM(dbus_message_new_method_call); - SDL_DBUS_SYM(dbus_message_unref); - SDL_DBUS_SYM(dbus_error_init); - SDL_DBUS_SYM(dbus_error_is_set); - SDL_DBUS_SYM(dbus_error_free); - - #undef SDL_DBUS_SYM - - return 0; -} - -static void -UnloadDBUSLibrary(void) -{ - if (dbus_handle != NULL) { - SDL_UnloadObject(dbus_handle); - dbus_handle = NULL; - } -} - -static int -LoadDBUSLibrary(void) -{ - int retval = 0; - if (dbus_handle == NULL) { - dbus_handle = SDL_LoadObject(dbus_library); - if (dbus_handle == NULL) { - retval = -1; - /* Don't call SDL_SetError(): SDL_LoadObject already did. */ - } else { - retval = load_dbus_syms(); - if (retval < 0) { - UnloadDBUSLibrary(); - } - } - } - - return retval; -} - -static void -X11_InitDBus(_THIS) -{ - if (LoadDBUSLibrary() != -1) { - SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - DBusError err; - DBUS_dbus_error_init(&err); - data->dbus = DBUS_dbus_bus_get_private(DBUS_BUS_SESSION, &err); - if (DBUS_dbus_error_is_set(&err)) { - DBUS_dbus_error_free(&err); - if (data->dbus) { - DBUS_dbus_connection_unref(data->dbus); - data->dbus = NULL; - } - return; /* oh well */ - } - DBUS_dbus_connection_set_exit_on_disconnect(data->dbus, 0); - } -} - -static void -X11_QuitDBus(_THIS) -{ - SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - if (data->dbus) { - DBUS_dbus_connection_close(data->dbus); - DBUS_dbus_connection_unref(data->dbus); - data->dbus = NULL; - } -} - -void -SDL_dbus_screensaver_tickle(_THIS) -{ - const SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - DBusConnection *conn = data->dbus; - if (conn != NULL) { - DBusMessage *msg = DBUS_dbus_message_new_method_call("org.gnome.ScreenSaver", - "/org/gnome/ScreenSaver", - "org.gnome.ScreenSaver", - "SimulateUserActivity"); - if (msg != NULL) { - if (DBUS_dbus_connection_send(conn, msg, NULL)) { - DBUS_dbus_connection_flush(conn); - } - DBUS_dbus_message_unref(msg); - } - } -} - -SDL_bool -SDL_dbus_screensaver_inhibit(_THIS) -{ - const SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; - DBusConnection *conn = data->dbus; - - if (conn == NULL) - return SDL_FALSE; - - if (_this->suspend_screensaver && - screensaver_cookie != 0) - return SDL_TRUE; - if (!_this->suspend_screensaver && - screensaver_cookie == 0) - return SDL_TRUE; - - if (_this->suspend_screensaver) { - const char *app = "My SDL application"; - const char *reason = "Playing a game"; - - DBusMessage *msg = DBUS_dbus_message_new_method_call("org.freedesktop.ScreenSaver", - "/org/freedesktop/ScreenSaver", - "org.freedesktop.ScreenSaver", - "Inhibit"); - if (msg != NULL) { - DBUS_dbus_message_append_args (msg, - DBUS_TYPE_STRING, &app, - DBUS_TYPE_STRING, &reason, - DBUS_TYPE_INVALID); - } - - if (msg != NULL) { - DBusMessage *reply; - - reply = DBUS_dbus_connection_send_with_reply_and_block(conn, msg, 300, NULL); - if (reply) { - if (!DBUS_dbus_message_get_args(reply, NULL, - DBUS_TYPE_UINT32, &screensaver_cookie, - DBUS_TYPE_INVALID)) - screensaver_cookie = 0; - DBUS_dbus_message_unref(reply); - } - - DBUS_dbus_message_unref(msg); - } - - if (screensaver_cookie == 0) { - return SDL_FALSE; - } - return SDL_TRUE; - } else { - DBusMessage *msg = DBUS_dbus_message_new_method_call("org.freedesktop.ScreenSaver", - "/org/freedesktop/ScreenSaver", - "org.freedesktop.ScreenSaver", - "UnInhibit"); - DBUS_dbus_message_append_args (msg, - DBUS_TYPE_UINT32, &screensaver_cookie, - DBUS_TYPE_INVALID); - if (msg != NULL) { - if (DBUS_dbus_connection_send(conn, msg, NULL)) { - DBUS_dbus_connection_flush(conn); - } - DBUS_dbus_message_unref(msg); - } - - screensaver_cookie = 0; - return SDL_TRUE; - } -} -#endif - /* Initialization/Query functions */ static int X11_VideoInit(_THIS); static void X11_VideoQuit(_THIS); @@ -430,6 +216,7 @@ X11_CreateDevice(int devindex) device->VideoQuit = X11_VideoQuit; device->GetDisplayModes = X11_GetDisplayModes; device->GetDisplayBounds = X11_GetDisplayBounds; + device->GetDisplayDPI = X11_GetDisplayDPI; device->SetDisplayMode = X11_SetDisplayMode; device->SuspendScreenSaver = X11_SuspendScreenSaver; device->PumpEvents = X11_PumpEvents; @@ -457,6 +244,7 @@ X11_CreateDevice(int devindex) device->UpdateWindowFramebuffer = X11_UpdateWindowFramebuffer; device->DestroyWindowFramebuffer = X11_DestroyWindowFramebuffer; device->GetWindowWMInfo = X11_GetWindowWMInfo; + device->SetWindowHitTest = X11_SetWindowHitTest; device->shape_driver.CreateShaper = X11_CreateShaper; device->shape_driver.SetWindowShape = X11_SetWindowShape; @@ -487,7 +275,10 @@ X11_CreateDevice(int devindex) device->SetClipboardText = X11_SetClipboardText; device->GetClipboardText = X11_GetClipboardText; device->HasClipboardText = X11_HasClipboardText; - + device->StartTextInput = X11_StartTextInput; + device->StopTextInput = X11_StopTextInput; + device->SetTextInputRect = X11_SetTextInputRect; + device->free = X11_DeleteDevice; return device; @@ -617,6 +408,7 @@ X11_VideoInit(_THIS) GET_ATOM(XdndDrop); GET_ATOM(XdndFinished); GET_ATOM(XdndSelection); + GET_ATOM(XKLAVIER_STATE); /* Detect the window manager */ X11_CheckWindowManager(_this); @@ -635,7 +427,7 @@ X11_VideoInit(_THIS) X11_InitTouch(_this); #if SDL_USE_LIBDBUS - X11_InitDBus(_this); + SDL_DBus_Init(); #endif return 0; @@ -659,7 +451,7 @@ X11_VideoQuit(_THIS) X11_QuitTouch(_this); #if SDL_USE_LIBDBUS - X11_QuitDBus(_this); + SDL_DBus_Quit(); #endif } diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11video.h b/Engine/lib/sdl/src/video/x11/SDL_x11video.h index 8ab88f728b..2083defd2f 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11video.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11video.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -34,6 +34,9 @@ #if SDL_VIDEO_DRIVER_X11_XCURSOR #include #endif +#if SDL_VIDEO_DRIVER_X11_XDBE +#include +#endif #if SDL_VIDEO_DRIVER_X11_XINERAMA #include #endif @@ -53,10 +56,8 @@ #include #endif -#ifdef HAVE_DBUS_DBUS_H -#define SDL_USE_LIBDBUS 1 -#include -#endif +#include "../../core/linux/SDL_dbus.h" +#include "../../core/linux/SDL_ibus.h" #include "SDL_x11dyn.h" @@ -110,20 +111,16 @@ typedef struct SDL_VideoData Atom XdndDrop; Atom XdndFinished; Atom XdndSelection; + Atom XKLAVIER_STATE; SDL_Scancode key_layout[256]; SDL_bool selection_waiting; -#if SDL_USE_LIBDBUS - DBusConnection *dbus; -#endif + Uint32 last_mode_change_deadline; } SDL_VideoData; extern SDL_bool X11_UseDirectColorVisuals(void); -SDL_bool SDL_dbus_screensaver_inhibit(_THIS); -void SDL_dbus_screensaver_tickle(_THIS); - #endif /* _SDL_x11video_h */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11window.c b/Engine/lib/sdl/src/video/x11/SDL_x11window.c index f5ae655bc3..afc802198e 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11window.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11window.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -54,12 +54,12 @@ static Bool isUnmapNotify(Display *dpy, XEvent *ev, XPointer win) { return ev->type == UnmapNotify && ev->xunmap.window == *((Window*)win); } + +/* static Bool isConfigureNotify(Display *dpy, XEvent *ev, XPointer win) { return ev->type == ConfigureNotify && ev->xconfigure.window == *((Window*)win); } - -/* static Bool X11_XIfEventTimeout(Display *display, XEvent *event_return, Bool (*predicate)(), XPointer arg, int timeoutMS) { @@ -239,8 +239,7 @@ SetupWindowData(_THIS, SDL_Window * window, Window w, BOOL created) data->ic = X11_XCreateIC(videodata->im, XNClientWindow, w, XNFocusWindow, w, XNInputStyle, XIMPreeditNothing | XIMStatusNothing, - XNResourceName, videodata->classname, XNResourceClass, - videodata->classname, NULL); + NULL); } #endif data->created = created; @@ -334,7 +333,7 @@ SetWindowBordered(Display *display, int screen, Window window, SDL_bool border) X11_XChangeProperty(display, window, WM_HINTS, WM_HINTS, 32, PropModeReplace, (unsigned char *) &MWMHints, - sizeof(MWMHints) / 4); + sizeof(MWMHints) / sizeof(long)); } else { /* set the transient hints instead, if necessary */ X11_XSetTransientForHint(display, window, RootWindow(display, screen)); } @@ -362,7 +361,7 @@ X11_CreateWindow(_THIS, SDL_Window * window) Atom _NET_WM_WINDOW_TYPE_NORMAL; Atom _NET_WM_PID; Atom XdndAware, xdnd_version = 5; - Uint32 fevent = 0; + long fevent = 0; #if SDL_VIDEO_OPENGL_GLX || SDL_VIDEO_OPENGL_EGL if ((window->flags & SDL_WINDOW_OPENGL) && @@ -374,7 +373,7 @@ X11_CreateWindow(_THIS, SDL_Window * window) #if SDL_VIDEO_OPENGL_GLX && ( !_this->gl_data || ! _this->gl_data->HAS_GLX_EXT_create_context_es2_profile ) #endif - ){ + ) { vinfo = X11_GLES_GetVisual(_this, display, screen); } else #endif @@ -543,11 +542,23 @@ X11_CreateWindow(_THIS, SDL_Window * window) (unsigned char *)&_NET_WM_BYPASS_COMPOSITOR_HINT_ON, 1); { - Atom protocols[] = { - data->WM_DELETE_WINDOW, /* Allow window to be deleted by the WM */ - data->_NET_WM_PING, /* Respond so WM knows we're alive */ - }; - X11_XSetWMProtocols(display, w, protocols, sizeof (protocols) / sizeof (protocols[0])); + Atom protocols[2]; + int proto_count = 0; + const char *ping_hint; + + protocols[proto_count] = data->WM_DELETE_WINDOW; /* Allow window to be deleted by the WM */ + proto_count++; + + ping_hint = SDL_GetHint(SDL_HINT_VIDEO_X11_NET_WM_PING); + /* Default to using ping if there is no hint */ + if (!ping_hint || SDL_atoi(ping_hint)) { + protocols[proto_count] = data->_NET_WM_PING; /* Respond so WM knows we're alive */ + proto_count++; + } + + SDL_assert(proto_count <= sizeof(protocols) / sizeof(protocols[0])); + + X11_XSetWMProtocols(display, w, protocols, proto_count); } if (SetupWindowData(_this, window, w, SDL_TRUE) < 0) { @@ -644,6 +655,7 @@ X11_GetWindowTitle(_THIS, Window xwindow) &items_read, &items_left, &propdata); if (status == Success && propdata) { title = SDL_iconv_string("UTF-8", "", SDL_static_cast(char*, propdata), items_read+1); + X11_XFree(propdata); } else { title = SDL_strdup(""); } @@ -656,67 +668,39 @@ X11_SetWindowTitle(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *) window->driverdata; Display *display = data->videodata->display; - XTextProperty titleprop, iconprop; + XTextProperty titleprop; Status status; - const char *title = window->title; - const char *icon = NULL; + const char *title = window->title ? window->title : ""; + char *title_locale = NULL; #ifdef X_HAVE_UTF8_STRING Atom _NET_WM_NAME = data->videodata->_NET_WM_NAME; - Atom _NET_WM_ICON_NAME = data->videodata->_NET_WM_ICON_NAME; #endif - if (title != NULL) { - char *title_locale = SDL_iconv_utf8_locale(title); - if (!title_locale) { - SDL_OutOfMemory(); - return; - } - status = X11_XStringListToTextProperty(&title_locale, 1, &titleprop); - SDL_free(title_locale); - if (status) { - X11_XSetTextProperty(display, data->xwindow, &titleprop, XA_WM_NAME); - X11_XFree(titleprop.value); - } + title_locale = SDL_iconv_utf8_locale(title); + if (!title_locale) { + SDL_OutOfMemory(); + return; + } + + status = X11_XStringListToTextProperty(&title_locale, 1, &titleprop); + SDL_free(title_locale); + if (status) { + X11_XSetTextProperty(display, data->xwindow, &titleprop, XA_WM_NAME); + X11_XFree(titleprop.value); + } #ifdef X_HAVE_UTF8_STRING - if (SDL_X11_HAVE_UTF8) { - status = - X11_Xutf8TextListToTextProperty(display, (char **) &title, 1, + if (SDL_X11_HAVE_UTF8) { + status = X11_Xutf8TextListToTextProperty(display, (char **) &title, 1, XUTF8StringStyle, &titleprop); - if (status == Success) { - X11_XSetTextProperty(display, data->xwindow, &titleprop, + if (status == Success) { + X11_XSetTextProperty(display, data->xwindow, &titleprop, _NET_WM_NAME); - X11_XFree(titleprop.value); - } + X11_XFree(titleprop.value); } -#endif } - if (icon != NULL) { - char *icon_locale = SDL_iconv_utf8_locale(icon); - if (!icon_locale) { - SDL_OutOfMemory(); - return; - } - status = X11_XStringListToTextProperty(&icon_locale, 1, &iconprop); - SDL_free(icon_locale); - if (status) { - X11_XSetTextProperty(display, data->xwindow, &iconprop, - XA_WM_ICON_NAME); - X11_XFree(iconprop.value); - } -#ifdef X_HAVE_UTF8_STRING - if (SDL_X11_HAVE_UTF8) { - status = - X11_Xutf8TextListToTextProperty(display, (char **) &icon, 1, - XUTF8StringStyle, &iconprop); - if (status == Success) { - X11_XSetTextProperty(display, data->xwindow, &iconprop, - _NET_WM_ICON_NAME); - X11_XFree(iconprop.value); - } - } #endif - } + X11_XFlush(display); } @@ -892,7 +876,6 @@ X11_SetWindowBordered(_THIS, SDL_Window * window, SDL_bool bordered) SetWindowBordered(display, displaydata->screen, data->xwindow, bordered); X11_XFlush(display); - X11_XIfEvent(display, &event, &isConfigureNotify, (XPointer)&data->xwindow); if (visible) { XWindowAttributes attr; @@ -927,6 +910,12 @@ X11_ShowWindow(_THIS, SDL_Window * window) X11_XIfEvent(display, &event, &isMapNotify, (XPointer)&data->xwindow); X11_XFlush(display); } + + if (!data->videodata->net_wm) { + /* no WM means no FocusIn event, which confuses us. Force it. */ + X11_XSetInputFocus(display, data->xwindow, RevertToNone, CurrentTime); + X11_XFlush(display); + } } void @@ -1394,7 +1383,6 @@ void X11_DestroyWindow(_THIS, SDL_Window * window) { SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - window->driverdata = NULL; if (data) { SDL_VideoData *videodata = (SDL_VideoData *) data->videodata; @@ -1424,6 +1412,7 @@ X11_DestroyWindow(_THIS, SDL_Window * window) } SDL_free(data); } + window->driverdata = NULL; } SDL_bool @@ -1445,6 +1434,12 @@ X11_GetWindowWMInfo(_THIS, SDL_Window * window, SDL_SysWMinfo * info) } } +int +X11_SetWindowHitTest(SDL_Window *window, SDL_bool enabled) +{ + return 0; /* just succeed, the real work is done elsewhere. */ +} + #endif /* SDL_VIDEO_DRIVER_X11 */ /* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11window.h b/Engine/lib/sdl/src/video/x11/SDL_x11window.h index cf0d7f799c..efe7ec0f08 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11window.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11window.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -27,8 +27,7 @@ video mode changes and we can respond to them by triggering more mode changes. */ -#define PENDING_FOCUS_IN_TIME 200 -#define PENDING_FOCUS_OUT_TIME 200 +#define PENDING_FOCUS_TIME 200 #if SDL_VIDEO_OPENGL_EGL #include @@ -93,6 +92,7 @@ extern void X11_SetWindowGrab(_THIS, SDL_Window * window, SDL_bool grabbed); extern void X11_DestroyWindow(_THIS, SDL_Window * window); extern SDL_bool X11_GetWindowWMInfo(_THIS, SDL_Window * window, struct SDL_SysWMinfo *info); +extern int X11_SetWindowHitTest(SDL_Window *window, SDL_bool enabled); #endif /* _SDL_x11window_h */ diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.c b/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.c index 7c149922f6..57132fe9e0 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.c +++ b/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.c @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -136,15 +136,25 @@ X11_HandleXinput2Event(SDL_VideoData *videodata,XGenericEventCookie *cookie) case XI_RawMotion: { const XIRawEvent *rawev = (const XIRawEvent*)cookie->data; SDL_Mouse *mouse = SDL_GetMouse(); - double relative_cords[2]; + double relative_coords[2]; + static Time prev_time = 0; + static double prev_rel_coords[2]; if (!mouse->relative_mode || mouse->relative_mode_warp) { return 0; } parse_valuators(rawev->raw_values,rawev->valuators.mask, - rawev->valuators.mask_len,relative_cords,2); - SDL_SendMouseMotion(mouse->focus,mouse->mouseID,1,(int)relative_cords[0],(int)relative_cords[1]); + rawev->valuators.mask_len,relative_coords,2); + + if ((rawev->time == prev_time) && (relative_coords[0] == prev_rel_coords[0]) && (relative_coords[1] == prev_rel_coords[1])) { + return 0; /* duplicate event, drop it. */ + } + + SDL_SendMouseMotion(mouse->focus,mouse->mouseID,1,(int)relative_coords[0],(int)relative_coords[1]); + prev_rel_coords[0] = relative_coords[0]; + prev_rel_coords[1] = relative_coords[1]; + prev_time = rawev->time; return 1; } break; @@ -183,7 +193,7 @@ X11_InitXinput2Multitouch(_THIS) SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; XIDeviceInfo *info; int ndevices,i,j; - info = X11_XIQueryDevice(data->display, XIAllMasterDevices, &ndevices); + info = X11_XIQueryDevice(data->display, XIAllDevices, &ndevices); for (i = 0; i < ndevices; i++) { XIDeviceInfo *dev = &info[i]; @@ -197,9 +207,7 @@ X11_InitXinput2Multitouch(_THIS) continue; touchId = t->sourceid; - if (!SDL_GetTouch(touchId)) { - SDL_AddTouch(touchId, dev->name); - } + SDL_AddTouch(touchId, dev->name); } } X11_XIFreeDeviceInfo(info); diff --git a/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.h b/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.h index 3e7178cb91..ed8dd1a4a0 100644 --- a/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.h +++ b/Engine/lib/sdl/src/video/x11/SDL_x11xinput2.h @@ -1,6 +1,6 @@ /* Simple DirectMedia Layer - Copyright (C) 1997-2014 Sam Lantinga + Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/src/video/x11/edid-parse.c b/Engine/lib/sdl/src/video/x11/edid-parse.c index 8608bf2543..2c145e23c4 100644 --- a/Engine/lib/sdl/src/video/x11/edid-parse.c +++ b/Engine/lib/sdl/src/video/x11/edid-parse.c @@ -548,7 +548,6 @@ yesno (int v) void dump_monitor_info (MonitorInfo *info) { - char *s; int i; printf ("Checksum: %d (%s)\n", @@ -601,6 +600,7 @@ dump_monitor_info (MonitorInfo *info) } else { + const char *s; printf ("Video Signal Level: %f\n", info->analog.video_signal_level); printf ("Sync Signal Level: %f\n", info->analog.sync_signal_level); printf ("Total Signal Level: %f\n", info->analog.total_signal_level); diff --git a/Engine/lib/sdl/test/COPYING b/Engine/lib/sdl/test/COPYING new file mode 100644 index 0000000000..c4c27e0968 --- /dev/null +++ b/Engine/lib/sdl/test/COPYING @@ -0,0 +1,8 @@ + +The test programs in this directory tree are for demonstrating and +testing the functionality of the SDL library, and are placed in the +public domain. + +October 28, 1997 +-- + Sam Lantinga (slouken@libsdl.org) diff --git a/Engine/lib/sdl/test/Makefile.in b/Engine/lib/sdl/test/Makefile.in new file mode 100644 index 0000000000..9a1df774e0 --- /dev/null +++ b/Engine/lib/sdl/test/Makefile.in @@ -0,0 +1,283 @@ +# Makefile to build the SDL tests + +srcdir = @srcdir@ + +CC = @CC@ +EXE = @EXE@ +CFLAGS = @CFLAGS@ -g +LIBS = @LIBS@ + +TARGETS = \ + checkkeys$(EXE) \ + loopwave$(EXE) \ + loopwavequeue$(EXE) \ + testatomic$(EXE) \ + testaudioinfo$(EXE) \ + testautomation$(EXE) \ + testdraw2$(EXE) \ + testdrawchessboard$(EXE) \ + testdropfile$(EXE) \ + testerror$(EXE) \ + testfile$(EXE) \ + testgamecontroller$(EXE) \ + testgesture$(EXE) \ + testgl2$(EXE) \ + testgles$(EXE) \ + testgles2$(EXE) \ + testhaptic$(EXE) \ + testhittesting$(EXE) \ + testrumble$(EXE) \ + testhotplug$(EXE) \ + testthread$(EXE) \ + testiconv$(EXE) \ + testime$(EXE) \ + testintersections$(EXE) \ + testrelative$(EXE) \ + testjoystick$(EXE) \ + testkeys$(EXE) \ + testloadso$(EXE) \ + testlock$(EXE) \ + testmultiaudio$(EXE) \ + testaudiohotplug$(EXE) \ + testnative$(EXE) \ + testoverlay2$(EXE) \ + testplatform$(EXE) \ + testpower$(EXE) \ + testfilesystem$(EXE) \ + testrendertarget$(EXE) \ + testresample$(EXE) \ + testscale$(EXE) \ + testsem$(EXE) \ + testshader$(EXE) \ + testshape$(EXE) \ + testsprite2$(EXE) \ + testspriteminimal$(EXE) \ + teststreaming$(EXE) \ + testtimer$(EXE) \ + testver$(EXE) \ + testviewport$(EXE) \ + testwm2$(EXE) \ + torturethread$(EXE) \ + testrendercopyex$(EXE) \ + testmessage$(EXE) \ + testdisplayinfo$(EXE) \ + controllermap$(EXE) \ + +all: Makefile $(TARGETS) + +Makefile: $(srcdir)/Makefile.in + $(SHELL) config.status $@ + +checkkeys$(EXE): $(srcdir)/checkkeys.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +loopwave$(EXE): $(srcdir)/loopwave.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +loopwavequeue$(EXE): $(srcdir)/loopwavequeue.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testresample$(EXE): $(srcdir)/testresample.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testaudioinfo$(EXE): $(srcdir)/testaudioinfo.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testautomation$(EXE): $(srcdir)/testautomation.c \ + $(srcdir)/testautomation_audio.c \ + $(srcdir)/testautomation_clipboard.c \ + $(srcdir)/testautomation_events.c \ + $(srcdir)/testautomation_keyboard.c \ + $(srcdir)/testautomation_main.c \ + $(srcdir)/testautomation_mouse.c \ + $(srcdir)/testautomation_pixels.c \ + $(srcdir)/testautomation_platform.c \ + $(srcdir)/testautomation_rect.c \ + $(srcdir)/testautomation_render.c \ + $(srcdir)/testautomation_rwops.c \ + $(srcdir)/testautomation_sdltest.c \ + $(srcdir)/testautomation_stdlib.c \ + $(srcdir)/testautomation_surface.c \ + $(srcdir)/testautomation_syswm.c \ + $(srcdir)/testautomation_timer.c \ + $(srcdir)/testautomation_video.c \ + $(srcdir)/testautomation_hints.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testmultiaudio$(EXE): $(srcdir)/testmultiaudio.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testaudiohotplug$(EXE): $(srcdir)/testaudiohotplug.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testatomic$(EXE): $(srcdir)/testatomic.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testintersections$(EXE): $(srcdir)/testintersections.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testrelative$(EXE): $(srcdir)/testrelative.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testhittesting$(EXE): $(srcdir)/testhittesting.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testdraw2$(EXE): $(srcdir)/testdraw2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testdrawchessboard$(EXE): $(srcdir)/testdrawchessboard.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testdropfile$(EXE): $(srcdir)/testdropfile.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testerror$(EXE): $(srcdir)/testerror.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testfile$(EXE): $(srcdir)/testfile.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testgamecontroller$(EXE): $(srcdir)/testgamecontroller.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testgesture$(EXE): $(srcdir)/testgesture.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +testgl2$(EXE): $(srcdir)/testgl2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +testgles$(EXE): $(srcdir)/testgles.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @GLESLIB@ @MATHLIB@ + +testgles2$(EXE): $(srcdir)/testgles2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +testhaptic$(EXE): $(srcdir)/testhaptic.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testhotplug$(EXE): $(srcdir)/testhotplug.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testrumble$(EXE): $(srcdir)/testrumble.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testthread$(EXE): $(srcdir)/testthread.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testiconv$(EXE): $(srcdir)/testiconv.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testime$(EXE): $(srcdir)/testime.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @SDL_TTF_LIB@ + +testjoystick$(EXE): $(srcdir)/testjoystick.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testkeys$(EXE): $(srcdir)/testkeys.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testloadso$(EXE): $(srcdir)/testloadso.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testlock$(EXE): $(srcdir)/testlock.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +ifeq (@ISMACOSX@,true) +testnative$(EXE): $(srcdir)/testnative.c \ + $(srcdir)/testnativecocoa.m \ + $(srcdir)/testnativex11.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) -framework Cocoa @XLIB@ +endif + +ifeq (@ISWINDOWS@,true) +testnative$(EXE): $(srcdir)/testnative.c \ + $(srcdir)/testnativew32.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) +endif + +ifeq (@ISUNIX@,true) +testnative$(EXE): $(srcdir)/testnative.c \ + $(srcdir)/testnativex11.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @XLIB@ +endif + +#there's probably a better way of doing this +ifeq (@ISMACOSX@,false) +ifeq (@ISWINDOWS@,false) +ifeq (@ISUNIX@,false) +testnative$(EXE): ; +endif +endif +endif + +testoverlay2$(EXE): $(srcdir)/testoverlay2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testplatform$(EXE): $(srcdir)/testplatform.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testpower$(EXE): $(srcdir)/testpower.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testfilesystem$(EXE): $(srcdir)/testfilesystem.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testrendertarget$(EXE): $(srcdir)/testrendertarget.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testscale$(EXE): $(srcdir)/testscale.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testsem$(EXE): $(srcdir)/testsem.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testshader$(EXE): $(srcdir)/testshader.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@ + +testshape$(EXE): $(srcdir)/testshape.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testsprite2$(EXE): $(srcdir)/testsprite2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testspriteminimal$(EXE): $(srcdir)/testspriteminimal.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +teststreaming$(EXE): $(srcdir)/teststreaming.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +testtimer$(EXE): $(srcdir)/testtimer.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testver$(EXE): $(srcdir)/testver.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testviewport$(EXE): $(srcdir)/testviewport.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testwm2$(EXE): $(srcdir)/testwm2.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +torturethread$(EXE): $(srcdir)/torturethread.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testrendercopyex$(EXE): $(srcdir)/testrendercopyex.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@ + +testmessage$(EXE): $(srcdir)/testmessage.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +testdisplayinfo$(EXE): $(srcdir)/testdisplayinfo.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + +controllermap$(EXE): $(srcdir)/controllermap.c + $(CC) -o $@ $^ $(CFLAGS) $(LIBS) + + +clean: + rm -f $(TARGETS) + +distclean: clean + rm -f Makefile + rm -f config.status config.cache config.log + rm -rf $(srcdir)/autom4te* diff --git a/Engine/lib/sdl/test/README b/Engine/lib/sdl/test/README index b820a88d7a..f6282be34d 100644 --- a/Engine/lib/sdl/test/README +++ b/Engine/lib/sdl/test/README @@ -3,12 +3,11 @@ These are test programs for the SDL library: checkkeys Watch the key events to check the keyboard loopwave Audio test -- loop playing a WAV file + loopwavequeue Audio test -- loop playing a WAV file with SDL_QueueAudio testaudioinfo Lists audio device capabilities - testcdrom Sample audio CD control program testerror Tests multi-threaded error handling testfile Tests RWops layer testgl2 A very simple example of using OpenGL with SDL - testhread Hacked up test of multi-threading testiconv Tests international string conversion testjoystick List joysticks and watch joystick events testkeys List the available keyboard keys @@ -16,11 +15,11 @@ These are test programs for the SDL library: testlock Hacked up test of multi-threading and locking testmultiaudio Tests using several audio devices testoverlay2 Tests the overlay flickering/scaling during playback. - testpalette Tests palette color cycling testplatform Tests types, endianness and cpu capabilities testsem Tests SDL's semaphore implementation testshape Tests shaped windows testsprite2 Example of fast sprite movement on the screen + testthread Hacked up test of multi-threading testtimer Test the timer facilities testver Check the version and dynamic loading and endianness testwm2 Test window manager -- title, icon, events @@ -28,3 +27,21 @@ These are test programs for the SDL library: controllermap Useful to generate Game Controller API compatible maps + +This directory contains sample.wav, which is a sample from Will Provost's +song, The Living Proof: + + From the album The Living Proof + Publisher: 5 Guys Named Will + Copyright 1996 Will Provost + +You can get a copy of the full song (and album!) from iTunes... + + https://itunes.apple.com/us/album/the-living-proof/id4153978 + +or Amazon... + + http://www.amazon.com/The-Living-Proof-Will-Provost/dp/B00004R8RH + +Thanks to Will for permitting us to distribute this sample with SDL! + diff --git a/Engine/lib/sdl/test/acinclude.m4 b/Engine/lib/sdl/test/acinclude.m4 new file mode 100644 index 0000000000..ead69e5149 --- /dev/null +++ b/Engine/lib/sdl/test/acinclude.m4 @@ -0,0 +1,359 @@ +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +# serial 1 + +dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN([AM_PATH_SDL2], +[dnl +dnl Get the cflags and libraries from the sdl2-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + min_sdl_version=ifelse([$1], ,0.9.0,$1) + + if test "x$sdl_prefix$sdl_exec_prefix" = x ; then + PKG_CHECK_MODULES([SDL], [sdl2 >= $min_sdl_version], + [sdl_pc=yes], + [sdl_pc=no]) + else + sdl_pc=no + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl2-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl2-config + fi + fi + fi + + if test "x$sdl_pc" = xyes ; then + no_sdl="" + SDL_CONFIG="pkg-config sdl2" + else + as_save_PATH="$PATH" + if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + AC_PATH_PROG(SDL_CONFIG, sdl2-config, no, [$PATH]) + PATH="$as_save_PATH" + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl2-config to some extent +dnl + rm -f conf.sdltest + AC_TRY_RUN([ +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl2-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl2-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + fi + if test "x$no_sdl" = x ; then + ifelse([$2], , :, [$2]) + else + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl2-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl2-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_TRY_LINK([ +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl2-config script: $SDL_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/Engine/lib/sdl/test/aclocal.m4 b/Engine/lib/sdl/test/aclocal.m4 new file mode 100644 index 0000000000..ead69e5149 --- /dev/null +++ b/Engine/lib/sdl/test/aclocal.m4 @@ -0,0 +1,359 @@ +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +# serial 1 + +dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN([AM_PATH_SDL2], +[dnl +dnl Get the cflags and libraries from the sdl2-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + min_sdl_version=ifelse([$1], ,0.9.0,$1) + + if test "x$sdl_prefix$sdl_exec_prefix" = x ; then + PKG_CHECK_MODULES([SDL], [sdl2 >= $min_sdl_version], + [sdl_pc=yes], + [sdl_pc=no]) + else + sdl_pc=no + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl2-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl2-config + fi + fi + fi + + if test "x$sdl_pc" = xyes ; then + no_sdl="" + SDL_CONFIG="pkg-config sdl2" + else + as_save_PATH="$PATH" + if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + AC_PATH_PROG(SDL_CONFIG, sdl2-config, no, [$PATH]) + PATH="$as_save_PATH" + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl2-config to some extent +dnl + rm -f conf.sdltest + AC_TRY_RUN([ +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl2-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl2-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + fi + if test "x$no_sdl" = x ; then + ifelse([$2], , :, [$2]) + else + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl2-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl2-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_TRY_LINK([ +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl2-config script: $SDL_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/Engine/lib/sdl/test/autogen.sh b/Engine/lib/sdl/test/autogen.sh new file mode 100644 index 0000000000..939f34c0f3 --- /dev/null +++ b/Engine/lib/sdl/test/autogen.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# +# Regenerate configuration files +cp acinclude.m4 aclocal.m4 +found=false +for autoconf in autoconf autoconf259 autoconf-2.59 +do if which $autoconf >/dev/null 2>&1; then $autoconf && found=true; break; fi +done +if test x$found = xfalse; then + echo "Couldn't find autoconf, aborting" + exit 1 +fi diff --git a/Engine/lib/sdl/test/axis.bmp b/Engine/lib/sdl/test/axis.bmp new file mode 100644 index 0000000000..c7addd3ed9 Binary files /dev/null and b/Engine/lib/sdl/test/axis.bmp differ diff --git a/Engine/lib/sdl/test/button.bmp b/Engine/lib/sdl/test/button.bmp new file mode 100644 index 0000000000..1593ccea49 Binary files /dev/null and b/Engine/lib/sdl/test/button.bmp differ diff --git a/Engine/lib/sdl/test/checkkeys.c b/Engine/lib/sdl/test/checkkeys.c new file mode 100644 index 0000000000..771369fa3f --- /dev/null +++ b/Engine/lib/sdl/test/checkkeys.c @@ -0,0 +1,236 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: Loop, watching keystrokes + Note that you need to call SDL_PollEvent() or SDL_WaitEvent() to + pump the event loop and catch keystrokes. +*/ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +static void +print_string(char **text, size_t *maxlen, const char *fmt, ...) +{ + int len; + va_list ap; + + va_start(ap, fmt); + len = SDL_vsnprintf(*text, *maxlen, fmt, ap); + if (len > 0) { + *text += len; + if ( ((size_t) len) < *maxlen ) { + *maxlen -= (size_t) len; + } else { + *maxlen = 0; + } + } + va_end(ap); +} + +static void +print_modifiers(char **text, size_t *maxlen) +{ + int mod; + print_string(text, maxlen, " modifiers:"); + mod = SDL_GetModState(); + if (!mod) { + print_string(text, maxlen, " (none)"); + return; + } + if (mod & KMOD_LSHIFT) + print_string(text, maxlen, " LSHIFT"); + if (mod & KMOD_RSHIFT) + print_string(text, maxlen, " RSHIFT"); + if (mod & KMOD_LCTRL) + print_string(text, maxlen, " LCTRL"); + if (mod & KMOD_RCTRL) + print_string(text, maxlen, " RCTRL"); + if (mod & KMOD_LALT) + print_string(text, maxlen, " LALT"); + if (mod & KMOD_RALT) + print_string(text, maxlen, " RALT"); + if (mod & KMOD_LGUI) + print_string(text, maxlen, " LGUI"); + if (mod & KMOD_RGUI) + print_string(text, maxlen, " RGUI"); + if (mod & KMOD_NUM) + print_string(text, maxlen, " NUM"); + if (mod & KMOD_CAPS) + print_string(text, maxlen, " CAPS"); + if (mod & KMOD_MODE) + print_string(text, maxlen, " MODE"); +} + +static void +PrintModifierState() +{ + char message[512]; + char *spot; + size_t left; + + spot = message; + left = sizeof(message); + + print_modifiers(&spot, &left); + SDL_Log("Initial state:%s\n", message); +} + +static void +PrintKey(SDL_Keysym * sym, SDL_bool pressed, SDL_bool repeat) +{ + char message[512]; + char *spot; + size_t left; + + spot = message; + left = sizeof(message); + + /* Print the keycode, name and state */ + if (sym->sym) { + print_string(&spot, &left, + "Key %s: scancode %d = %s, keycode 0x%08X = %s ", + pressed ? "pressed " : "released", + sym->scancode, + SDL_GetScancodeName(sym->scancode), + sym->sym, SDL_GetKeyName(sym->sym)); + } else { + print_string(&spot, &left, + "Unknown Key (scancode %d = %s) %s ", + sym->scancode, + SDL_GetScancodeName(sym->scancode), + pressed ? "pressed " : "released"); + } + print_modifiers(&spot, &left); + if (repeat) { + print_string(&spot, &left, " (repeat)"); + } + SDL_Log("%s\n", message); +} + +static void +PrintText(char *eventtype, char *text) +{ + char *spot, expanded[1024]; + + expanded[0] = '\0'; + for ( spot = text; *spot; ++spot ) + { + size_t length = SDL_strlen(expanded); + SDL_snprintf(expanded + length, sizeof(expanded) - length, "\\x%.2x", (unsigned char)*spot); + } + SDL_Log("%s Text (%s): \"%s%s\"\n", eventtype, expanded, *text == '"' ? "\\" : "", text); +} + +void +loop() +{ + SDL_Event event; + /* Check for events */ + /*SDL_WaitEvent(&event); emscripten does not like waiting*/ + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + case SDL_KEYUP: + PrintKey(&event.key.keysym, (event.key.state == SDL_PRESSED) ? SDL_TRUE : SDL_FALSE, (event.key.repeat) ? SDL_TRUE : SDL_FALSE); + break; + case SDL_TEXTEDITING: + PrintText("EDIT", event.text.text); + break; + case SDL_TEXTINPUT: + PrintText("INPUT", event.text.text); + break; + case SDL_MOUSEBUTTONDOWN: + /* Any button press quits the app... */ + case SDL_QUIT: + done = 1; + break; + default: + break; + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + SDL_Window *window; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Set 640x480 video mode */ + window = SDL_CreateWindow("CheckKeys Test", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + 640, 480, 0); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create 640x480 window: %s\n", + SDL_GetError()); + quit(2); + } + +#if __IPHONEOS__ + /* Creating the context creates the view, which we need to show keyboard */ + SDL_GL_CreateContext(window); +#endif + + SDL_StartTextInput(); + + /* Print initial modifier state */ + SDL_PumpEvents(); + PrintModifierState(); + + /* Watch keystrokes */ + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/configure b/Engine/lib/sdl/test/configure new file mode 100644 index 0000000000..61c32fba1b --- /dev/null +++ b/Engine/lib/sdl/test/configure @@ -0,0 +1,5124 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="README" +ac_subst_vars='LTLIBOBJS +LIBOBJS +SDL_TTF_LIB +XLIB +GLES2LIB +GLESLIB +GLLIB +CPP +XMKMF +SDL_CONFIG +SDL_LIBS +SDL_CFLAGS +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +ISUNIX +ISWINDOWS +ISMACOSX +MATHLIB +EXE +OSMESA_CONFIG +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_sdl_prefix +with_sdl_exec_prefix +enable_sdltest +with_x +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +SDL_CFLAGS +SDL_LIBS +XMKMF +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-sdltest Do not try to compile and run a test SDL program + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-sdl-prefix=PFX Prefix where SDL is installed (optional) + --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) + --with-x use the X Window System + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + SDL_CFLAGS C compiler flags for SDL, overriding pkg-config + SDL_LIBS linker flags for SDL, overriding pkg-config + XMKMF Path to xmkmf, Makefile generator for X Window System + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in $srcdir/../build-scripts; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in $srcdir/../build-scripts" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + +#ifndef __cplusplus + /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; + const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this sort of thing. */ + char tx; + char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; } bx; + struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + + +ISUNIX="false" +ISWINDOWS="false" +ISMACOSX="false" + +case "$host" in + *-*-cygwin* | *-*-mingw32*) + ISWINDOWS="true" + EXE=".exe" + MATHLIB="" + SYS_GL_LIBS="-lopengl32" + ;; + *-*-haiku*) + EXE="" + MATHLIB="" + SYS_GL_LIBS="-lGL" + ;; + *-*-darwin* ) + ISMACOSX="true" + EXE="" + MATHLIB="" + SYS_GL_LIBS="-Wl,-framework,OpenGL" + ;; + *-*-aix*) + ISUNIX="true" + EXE="" + if test x$ac_cv_c_compiler_gnu = xyes; then + CFLAGS="-mthreads" + fi + SYS_GL_LIBS="" + ;; + *-*-mint*) + EXE="" + MATHLIB="" + # Extract the first word of "osmesa-config", so it can be a program name with args. +set dummy osmesa-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OSMESA_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $OSMESA_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_OSMESA_CONFIG="$OSMESA_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_OSMESA_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_OSMESA_CONFIG" && ac_cv_path_OSMESA_CONFIG="no" + ;; +esac +fi +OSMESA_CONFIG=$ac_cv_path_OSMESA_CONFIG +if test -n "$OSMESA_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OSMESA_CONFIG" >&5 +$as_echo "$OSMESA_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$OSMESA_CONFIG" = "xyes"; then + OSMESA_CFLAGS=`$OSMESA_CONFIG --cflags` + OSMESA_LIBS=`$OSMESA_CONFIG --libs` + CFLAGS="$CFLAGS $OSMESA_CFLAGS" + SYS_GL_LIBS="$OSMESA_LIBS" + else + SYS_GL_LIBS="-lOSMesa" + fi + ;; + *-*-qnx*) + EXE="" + MATHLIB="" + SYS_GL_LIBS="-lGLES_CM" + ;; + *-*-emscripten* ) + EXE=".bc" + MATHLIB="" + SYS_GL_LIBS="" + ;; + *) + ISUNIX="true" + EXE="" + MATHLIB="-lm" + SYS_GL_LIBS="-lGL" + ;; +esac + + + + + + +SDL_VERSION=2.0.0 + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi + +# Check whether --with-sdl-prefix was given. +if test "${with_sdl_prefix+set}" = set; then : + withval=$with_sdl_prefix; sdl_prefix="$withval" +else + sdl_prefix="" +fi + + +# Check whether --with-sdl-exec-prefix was given. +if test "${with_sdl_exec_prefix+set}" = set; then : + withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" +else + sdl_exec_prefix="" +fi + +# Check whether --enable-sdltest was given. +if test "${enable_sdltest+set}" = set; then : + enableval=$enable_sdltest; +else + enable_sdltest=yes +fi + + + min_sdl_version=$SDL_VERSION + + if test "x$sdl_prefix$sdl_exec_prefix" = x ; then + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL" >&5 +$as_echo_n "checking for SDL... " >&6; } + +if test -n "$SDL_CFLAGS"; then + pkg_cv_SDL_CFLAGS="$SDL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2 >= \$min_sdl_version\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl2 >= $min_sdl_version") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL_CFLAGS=`$PKG_CONFIG --cflags "sdl2 >= $min_sdl_version" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$SDL_LIBS"; then + pkg_cv_SDL_LIBS="$SDL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2 >= \$min_sdl_version\""; } >&5 + ($PKG_CONFIG --exists --print-errors "sdl2 >= $min_sdl_version") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_SDL_LIBS=`$PKG_CONFIG --libs "sdl2 >= $min_sdl_version" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + SDL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "sdl2 >= $min_sdl_version" 2>&1` + else + SDL_PKG_ERRORS=`$PKG_CONFIG --print-errors "sdl2 >= $min_sdl_version" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$SDL_PKG_ERRORS" >&5 + + sdl_pc=no +elif test $pkg_failed = untried; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + sdl_pc=no +else + SDL_CFLAGS=$pkg_cv_SDL_CFLAGS + SDL_LIBS=$pkg_cv_SDL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + sdl_pc=yes +fi + else + sdl_pc=no + if test x$sdl_exec_prefix != x ; then + sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl2-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl2-config + fi + fi + fi + + if test "x$sdl_pc" = xyes ; then + no_sdl="" + SDL_CONFIG="pkg-config sdl2" + else + as_save_PATH="$PATH" + if test "x$prefix" != xNONE && test "$cross_compiling" != yes; then + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + fi + # Extract the first word of "sdl2-config", so it can be a program name with args. +set dummy sdl2-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SDL_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SDL_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" + ;; +esac +fi +SDL_CONFIG=$ac_cv_path_SDL_CONFIG +if test -n "$SDL_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 +$as_echo "$SDL_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + PATH="$as_save_PATH" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 +$as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } + no_sdl="" + + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_CXXFLAGS="$CXXFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + rm -f conf.sdltest + if test "$cross_compiling" = yes; then : + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl2-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl2-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl2-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl2-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + no_sdl=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + fi + if test "x$no_sdl" = x ; then + : + else + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl2-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl2-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl2-config script: $SDL_CONFIG" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + CXXFLAGS="$ac_save_CXXFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + as_fn_error $? "*** SDL version $SDL_VERSION not found!" "$LINENO" 5 + + fi + + + rm -f conf.sdltest + +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS -lSDL2_test $SDL_LIBS" + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +fi + +if test x$have_x = xyes; then + if test x$ac_x_includes = xno || test "x$ac_x_includes" = xNone || test "x$ac_x_includes" = x; then + : + else + CFLAGS="$CFLAGS -I$ac_x_includes" + fi + if test x$ac_x_libraries = xno || test "x$ac_x_libraries" = xNone; then + : + else + if test "x$ac_x_libraries" = x; then + XPATH="" + XLIB="-lX11" + else + XPATH="-L$ac_x_libraries" + XLIB="-L$ac_x_libraries -lX11" + fi + fi +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL support" >&5 +$as_echo_n "checking for OpenGL support... " >&6; } +have_opengl=no +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include "SDL_opengl.h" + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +have_opengl=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_opengl" >&5 +$as_echo "$have_opengl" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES support" >&5 +$as_echo_n "checking for OpenGL ES support... " >&6; } +have_opengles=no +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined (__IPHONEOS__) + #include + #else + #include + #endif /* __QNXNTO__ */ + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +have_opengles=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_opengles" >&5 +$as_echo "$have_opengles" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL ES2 support" >&5 +$as_echo_n "checking for OpenGL ES2 support... " >&6; } +have_opengles2=no +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if defined (__IPHONEOS__) + #include + #include + #else + #include + #include + #endif + +int +main () +{ + + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +have_opengles2=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_opengles2" >&5 +$as_echo "$have_opengles2" >&6; } + +GLLIB="" +GLESLIB="" +GLES2LIB="" +if test x$have_opengles = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGLES" + GLESLIB="$XPATH -lGLESv1_CM" +fi +if test x$have_opengles2 = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGLES2" + #GLES2LIB="$XPATH -lGLESv2" +fi +if test x$have_opengl = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGL" + GLLIB="$XPATH $SYS_GL_LIBS" +fi + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for TTF_Init in -lSDL2_ttf" >&5 +$as_echo_n "checking for TTF_Init in -lSDL2_ttf... " >&6; } +if ${ac_cv_lib_SDL2_ttf_TTF_Init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lSDL2_ttf $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char TTF_Init (); +int +main () +{ +return TTF_Init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_SDL2_ttf_TTF_Init=yes +else + ac_cv_lib_SDL2_ttf_TTF_Init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SDL2_ttf_TTF_Init" >&5 +$as_echo "$ac_cv_lib_SDL2_ttf_TTF_Init" >&6; } +if test "x$ac_cv_lib_SDL2_ttf_TTF_Init" = xyes; then : + have_SDL_ttf=yes +fi + +if test x$have_SDL_ttf = xyes; then + CFLAGS="$CFLAGS -DHAVE_SDL_TTF" + SDL_TTF_LIB="-lSDL2_ttf" +fi + + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + + +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/Engine/lib/sdl/test/configure.in b/Engine/lib/sdl/test/configure.in new file mode 100644 index 0000000000..fd3f3022bc --- /dev/null +++ b/Engine/lib/sdl/test/configure.in @@ -0,0 +1,191 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(README) + +dnl Detect the canonical build and host environments +AC_CONFIG_AUX_DIRS($srcdir/../build-scripts) +AC_CANONICAL_HOST + +dnl Check for tools + +AC_PROG_CC + +dnl Check for compiler environment + +AC_C_CONST + +dnl We only care about this for building testnative at the moment, so these +dnl values shouldn't be considered absolute truth. +dnl (Haiku, for example, sets none of these.) +ISUNIX="false" +ISWINDOWS="false" +ISMACOSX="false" + +dnl Figure out which math library to use +case "$host" in + *-*-cygwin* | *-*-mingw32*) + ISWINDOWS="true" + EXE=".exe" + MATHLIB="" + SYS_GL_LIBS="-lopengl32" + ;; + *-*-haiku*) + EXE="" + MATHLIB="" + SYS_GL_LIBS="-lGL" + ;; + *-*-darwin* ) + ISMACOSX="true" + EXE="" + MATHLIB="" + SYS_GL_LIBS="-Wl,-framework,OpenGL" + ;; + *-*-aix*) + ISUNIX="true" + EXE="" + if test x$ac_cv_prog_gcc = xyes; then + CFLAGS="-mthreads" + fi + SYS_GL_LIBS="" + ;; + *-*-mint*) + EXE="" + MATHLIB="" + AC_PATH_PROG(OSMESA_CONFIG, osmesa-config, no) + if test "x$OSMESA_CONFIG" = "xyes"; then + OSMESA_CFLAGS=`$OSMESA_CONFIG --cflags` + OSMESA_LIBS=`$OSMESA_CONFIG --libs` + CFLAGS="$CFLAGS $OSMESA_CFLAGS" + SYS_GL_LIBS="$OSMESA_LIBS" + else + SYS_GL_LIBS="-lOSMesa" + fi + ;; + *-*-qnx*) + EXE="" + MATHLIB="" + SYS_GL_LIBS="-lGLES_CM" + ;; + *-*-emscripten* ) + dnl This should really be .js, but we need to specify extra flags when compiling to js + EXE=".bc" + MATHLIB="" + SYS_GL_LIBS="" + ;; + *) + dnl Oh well, call it Unix... + ISUNIX="true" + EXE="" + MATHLIB="-lm" + SYS_GL_LIBS="-lGL" + ;; +esac +AC_SUBST(EXE) +AC_SUBST(MATHLIB) +AC_SUBST(ISMACOSX) +AC_SUBST(ISWINDOWS) +AC_SUBST(ISUNIX) + +dnl Check for SDL +SDL_VERSION=2.0.0 +AM_PATH_SDL2($SDL_VERSION, + :, + AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!]) +) +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS -lSDL2_test $SDL_LIBS" + +dnl Check for X11 path, needed for OpenGL on some systems +AC_PATH_X +if test x$have_x = xyes; then + if test x$ac_x_includes = xno || test "x$ac_x_includes" = xNone || test "x$ac_x_includes" = x; then + : + else + CFLAGS="$CFLAGS -I$ac_x_includes" + fi + if test x$ac_x_libraries = xno || test "x$ac_x_libraries" = xNone; then + : + else + if test "x$ac_x_libraries" = x; then + XPATH="" + XLIB="-lX11" + else + XPATH="-L$ac_x_libraries" + XLIB="-L$ac_x_libraries -lX11" + fi + fi +fi + +dnl Check for OpenGL +AC_MSG_CHECKING(for OpenGL support) +have_opengl=no +AC_TRY_COMPILE([ + #include "SDL_opengl.h" +],[ +],[ +have_opengl=yes +]) +AC_MSG_RESULT($have_opengl) + +dnl Check for OpenGL ES +AC_MSG_CHECKING(for OpenGL ES support) +have_opengles=no +AC_TRY_COMPILE([ + #if defined (__IPHONEOS__) + #include + #else + #include + #endif /* __QNXNTO__ */ +],[ +],[ +have_opengles=yes +]) +AC_MSG_RESULT($have_opengles) + +dnl Check for OpenGL ES2 +AC_MSG_CHECKING(for OpenGL ES2 support) +have_opengles2=no +AC_TRY_COMPILE([ + #if defined (__IPHONEOS__) + #include + #include + #else + #include + #include + #endif +],[ +],[ +have_opengles2=yes +]) +AC_MSG_RESULT($have_opengles2) + +GLLIB="" +GLESLIB="" +GLES2LIB="" +if test x$have_opengles = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGLES" + GLESLIB="$XPATH -lGLESv1_CM" +fi +if test x$have_opengles2 = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGLES2" + #GLES2LIB="$XPATH -lGLESv2" +fi +if test x$have_opengl = xyes; then + CFLAGS="$CFLAGS -DHAVE_OPENGL" + GLLIB="$XPATH $SYS_GL_LIBS" +fi + +AC_SUBST(GLLIB) +AC_SUBST(GLESLIB) +AC_SUBST(GLES2LIB) +AC_SUBST(XLIB) + +dnl Check for SDL_ttf +AC_CHECK_LIB(SDL2_ttf, TTF_Init, have_SDL_ttf=yes) +if test x$have_SDL_ttf = xyes; then + CFLAGS="$CFLAGS -DHAVE_SDL_TTF" + SDL_TTF_LIB="-lSDL2_ttf" +fi +AC_SUBST(SDL_TTF_LIB) + +dnl Finally create all the generated files +AC_OUTPUT([Makefile]) diff --git a/Engine/lib/sdl/test/controllermap.bmp b/Engine/lib/sdl/test/controllermap.bmp new file mode 100644 index 0000000000..df167f6778 Binary files /dev/null and b/Engine/lib/sdl/test/controllermap.bmp differ diff --git a/Engine/lib/sdl/test/controllermap.c b/Engine/lib/sdl/test/controllermap.c new file mode 100644 index 0000000000..3fb30d68a3 --- /dev/null +++ b/Engine/lib/sdl/test/controllermap.c @@ -0,0 +1,440 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Game controller mapping generator */ +/* Gabriel Jacobo */ + +#include +#include +#include + +#include "SDL.h" + +#ifndef SDL_JOYSTICK_DISABLED + +#ifdef __IPHONEOS__ +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 480 +#else +#define SCREEN_WIDTH 512 +#define SCREEN_HEIGHT 317 +#endif + +#define MAP_WIDTH 512 +#define MAP_HEIGHT 317 + +#define MARKER_BUTTON 1 +#define MARKER_AXIS 2 + +typedef struct MappingStep +{ + int x, y; + double angle; + int marker; + char *field; + int axis, button, hat, hat_value; + char mapping[4096]; +}MappingStep; + + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +static SDL_bool +WatchJoystick(SDL_Joystick * joystick) +{ + SDL_Window *window = NULL; + SDL_Renderer *screen = NULL; + SDL_Texture *background, *button, *axis, *marker; + const char *name = NULL; + SDL_bool retval = SDL_FALSE; + SDL_bool done = SDL_FALSE, next=SDL_FALSE; + SDL_Event event; + SDL_Rect dst; + int s, _s; + Uint8 alpha=200, alpha_step = -1; + Uint32 alpha_ticks = 0; + char mapping[4096], temp[4096]; + MappingStep *step, *prev_step; + MappingStep steps[] = { + {342, 132, 0.0, MARKER_BUTTON, "x", -1, -1, -1, -1, ""}, + {387, 167, 0.0, MARKER_BUTTON, "a", -1, -1, -1, -1, ""}, + {431, 132, 0.0, MARKER_BUTTON, "b", -1, -1, -1, -1, ""}, + {389, 101, 0.0, MARKER_BUTTON, "y", -1, -1, -1, -1, ""}, + {174, 132, 0.0, MARKER_BUTTON, "back", -1, -1, -1, -1, ""}, + {233, 132, 0.0, MARKER_BUTTON, "guide", -1, -1, -1, -1, ""}, + {289, 132, 0.0, MARKER_BUTTON, "start", -1, -1, -1, -1, ""}, + {116, 217, 0.0, MARKER_BUTTON, "dpleft", -1, -1, -1, -1, ""}, + {154, 249, 0.0, MARKER_BUTTON, "dpdown", -1, -1, -1, -1, ""}, + {186, 217, 0.0, MARKER_BUTTON, "dpright", -1, -1, -1, -1, ""}, + {154, 188, 0.0, MARKER_BUTTON, "dpup", -1, -1, -1, -1, ""}, + {77, 40, 0.0, MARKER_BUTTON, "leftshoulder", -1, -1, -1, -1, ""}, + {91, 0, 0.0, MARKER_BUTTON, "lefttrigger", -1, -1, -1, -1, ""}, + {396, 36, 0.0, MARKER_BUTTON, "rightshoulder", -1, -1, -1, -1, ""}, + {375, 0, 0.0, MARKER_BUTTON, "righttrigger", -1, -1, -1, -1, ""}, + {75, 154, 0.0, MARKER_BUTTON, "leftstick", -1, -1, -1, -1, ""}, + {305, 230, 0.0, MARKER_BUTTON, "rightstick", -1, -1, -1, -1, ""}, + {75, 154, 0.0, MARKER_AXIS, "leftx", -1, -1, -1, -1, ""}, + {75, 154, 90.0, MARKER_AXIS, "lefty", -1, -1, -1, -1, ""}, + {305, 230, 0.0, MARKER_AXIS, "rightx", -1, -1, -1, -1, ""}, + {305, 230, 90.0, MARKER_AXIS, "righty", -1, -1, -1, -1, ""}, + }; + + /* Create a window to display joystick axis position */ + window = SDL_CreateWindow("Game Controller Map", SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, + SCREEN_HEIGHT, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + screen = SDL_CreateRenderer(window, -1, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + + background = LoadTexture(screen, "controllermap.bmp", SDL_FALSE); + button = LoadTexture(screen, "button.bmp", SDL_TRUE); + axis = LoadTexture(screen, "axis.bmp", SDL_TRUE); + SDL_RaiseWindow(window); + + /* scale for platforms that don't give you the window size you asked for. */ + SDL_RenderSetLogicalSize(screen, SCREEN_WIDTH, SCREEN_HEIGHT); + + /* Print info about the joystick we are watching */ + name = SDL_JoystickName(joystick); + SDL_Log("Watching joystick %d: (%s)\n", SDL_JoystickInstanceID(joystick), + name ? name : "Unknown Joystick"); + SDL_Log("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", + SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), + SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick)); + + SDL_Log("\n\n\ + ====================================================================================\n\ + Press the buttons on your controller when indicated\n\ + (Your controller may look different than the picture)\n\ + If you want to correct a mistake, press backspace or the back button on your device\n\ + To skip a button, press SPACE or click/touch the screen\n\ + To exit, press ESC\n\ + ====================================================================================\n"); + + /* Initialize mapping with GUID and name */ + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), temp, SDL_arraysize(temp)); + SDL_snprintf(mapping, SDL_arraysize(mapping), "%s,%s,platform:%s,", + temp, name ? name : "Unknown Joystick", SDL_GetPlatform()); + + /* Loop, getting joystick events! */ + for(s=0; smapping, mapping, SDL_arraysize(step->mapping)); + step->axis = -1; + step->button = -1; + step->hat = -1; + step->hat_value = -1; + + switch(step->marker) { + case MARKER_AXIS: + marker = axis; + break; + case MARKER_BUTTON: + marker = button; + break; + default: + break; + } + + dst.x = step->x; + dst.y = step->y; + SDL_QueryTexture(marker, NULL, NULL, &dst.w, &dst.h); + next=SDL_FALSE; + + SDL_SetRenderDrawColor(screen, 0xFF, 0xFF, 0xFF, SDL_ALPHA_OPAQUE); + + while (!done && !next) { + if (SDL_GetTicks() - alpha_ticks > 5) { + alpha_ticks = SDL_GetTicks(); + alpha += alpha_step; + if (alpha == 255) { + alpha_step = -1; + } + if (alpha < 128) { + alpha_step = 1; + } + } + + SDL_RenderClear(screen); + SDL_RenderCopy(screen, background, NULL, NULL); + SDL_SetTextureAlphaMod(marker, alpha); + SDL_SetTextureColorMod(marker, 10, 255, 21); + SDL_RenderCopyEx(screen, marker, NULL, &dst, step->angle, NULL, 0); + SDL_RenderPresent(screen); + + if (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_JOYAXISMOTION: + if ((event.jaxis.value > 20000 || event.jaxis.value < -20000) && event.jaxis.value != -32768) { + for (_s = 0; _s < s; _s++) { + if (steps[_s].axis == event.jaxis.axis) { + break; + } + } + if (_s == s) { + step->axis = event.jaxis.axis; + SDL_strlcat(mapping, step->field, SDL_arraysize(mapping)); + SDL_snprintf(temp, SDL_arraysize(temp), ":a%u,", event.jaxis.axis); + SDL_strlcat(mapping, temp, SDL_arraysize(mapping)); + s++; + next=SDL_TRUE; + } + } + + break; + case SDL_JOYHATMOTION: + if (event.jhat.value == SDL_HAT_CENTERED) { + break; /* ignore centering, we're probably just coming back to the center from the previous item we set. */ + } + for (_s = 0; _s < s; _s++) { + if (steps[_s].hat == event.jhat.hat && steps[_s].hat_value == event.jhat.value) { + break; + } + } + if (_s == s) { + step->hat = event.jhat.hat; + step->hat_value = event.jhat.value; + SDL_strlcat(mapping, step->field, SDL_arraysize(mapping)); + SDL_snprintf(temp, SDL_arraysize(temp), ":h%u.%u,", event.jhat.hat, event.jhat.value ); + SDL_strlcat(mapping, temp, SDL_arraysize(mapping)); + s++; + next=SDL_TRUE; + } + break; + case SDL_JOYBALLMOTION: + break; + case SDL_JOYBUTTONUP: + for (_s = 0; _s < s; _s++) { + if (steps[_s].button == event.jbutton.button) { + break; + } + } + if (_s == s) { + step->button = event.jbutton.button; + SDL_strlcat(mapping, step->field, SDL_arraysize(mapping)); + SDL_snprintf(temp, SDL_arraysize(temp), ":b%u,", event.jbutton.button); + SDL_strlcat(mapping, temp, SDL_arraysize(mapping)); + s++; + next=SDL_TRUE; + } + break; + case SDL_FINGERDOWN: + case SDL_MOUSEBUTTONDOWN: + /* Skip this step */ + s++; + next=SDL_TRUE; + break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_BACKSPACE || event.key.keysym.sym == SDLK_AC_BACK) { + /* Undo! */ + if (s > 0) { + prev_step = &steps[--s]; + SDL_strlcpy(mapping, prev_step->mapping, SDL_arraysize(prev_step->mapping)); + next = SDL_TRUE; + } + break; + } + if (event.key.keysym.sym == SDLK_SPACE) { + /* Skip this step */ + s++; + next=SDL_TRUE; + break; + } + + if ((event.key.keysym.sym != SDLK_ESCAPE)) { + break; + } + /* Fall through to signal quit */ + case SDL_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + } + + } + + if (s == SDL_arraysize(steps) ) { + SDL_Log("Mapping:\n\n%s\n\n", mapping); + /* Print to stdout as well so the user can cat the output somewhere */ + printf("%s\n", mapping); + } + + while(SDL_PollEvent(&event)) {}; + + SDL_DestroyRenderer(screen); + SDL_DestroyWindow(window); + return retval; +} + +int +main(int argc, char *argv[]) +{ + const char *name; + int i; + SDL_Joystick *joystick; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Print information about the joysticks */ + SDL_Log("There are %d joysticks attached\n", SDL_NumJoysticks()); + for (i = 0; i < SDL_NumJoysticks(); ++i) { + name = SDL_JoystickNameForIndex(i); + SDL_Log("Joystick %d: %s\n", i, name ? name : "Unknown Joystick"); + joystick = SDL_JoystickOpen(i); + if (joystick == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_JoystickOpen(%d) failed: %s\n", i, + SDL_GetError()); + } else { + char guid[64]; + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), + guid, sizeof (guid)); + SDL_Log(" axes: %d\n", SDL_JoystickNumAxes(joystick)); + SDL_Log(" balls: %d\n", SDL_JoystickNumBalls(joystick)); + SDL_Log(" hats: %d\n", SDL_JoystickNumHats(joystick)); + SDL_Log(" buttons: %d\n", SDL_JoystickNumButtons(joystick)); + SDL_Log("instance id: %d\n", SDL_JoystickInstanceID(joystick)); + SDL_Log(" guid: %s\n", guid); + SDL_JoystickClose(joystick); + } + } + +#ifdef __ANDROID__ + if (SDL_NumJoysticks() > 0) { +#else + if (argv[1]) { +#endif + SDL_bool reportederror = SDL_FALSE; + SDL_bool keepGoing = SDL_TRUE; + SDL_Event event; + int device; +#ifdef __ANDROID__ + device = 0; +#else + device = atoi(argv[1]); +#endif + joystick = SDL_JoystickOpen(device); + + while ( keepGoing ) { + if (joystick == NULL) { + if ( !reportederror ) { + SDL_Log("Couldn't open joystick %d: %s\n", device, SDL_GetError()); + keepGoing = SDL_FALSE; + reportederror = SDL_TRUE; + } + } else { + reportederror = SDL_FALSE; + keepGoing = WatchJoystick(joystick); + SDL_JoystickClose(joystick); + } + + joystick = NULL; + if (keepGoing) { + SDL_Log("Waiting for attach\n"); + } + while (keepGoing) { + SDL_WaitEvent(&event); + if ((event.type == SDL_QUIT) || (event.type == SDL_FINGERDOWN) + || (event.type == SDL_MOUSEBUTTONDOWN)) { + keepGoing = SDL_FALSE; + } else if (event.type == SDL_JOYDEVICEADDED) { + joystick = SDL_JoystickOpen(device); + break; + } + } + } + } + else { + SDL_Log("\n\nUsage: ./controllermap number\nFor example: ./controllermap 0\nOr: ./controllermap 0 >> gamecontrollerdb.txt"); + } + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); + + return 0; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/emscripten/joystick-pre.js b/Engine/lib/sdl/test/emscripten/joystick-pre.js new file mode 100644 index 0000000000..5fd789d1f7 --- /dev/null +++ b/Engine/lib/sdl/test/emscripten/joystick-pre.js @@ -0,0 +1,25 @@ +Module['arguments'] = ['0']; +//Gamepads don't appear until a button is pressed and the joystick/gamepad tests expect one to be connected +Module['preRun'].push(function() +{ + Module['print']("Waiting for gamepad..."); + Module['addRunDependency']("gamepad"); + window.addEventListener('gamepadconnected', function() + { + //OK, got one + Module['removeRunDependency']("gamepad"); + }, false); + + //chrome + if(!!navigator.webkitGetGamepads) + { + var timeout = function() + { + if(navigator.webkitGetGamepads()[0] !== undefined) + Module['removeRunDependency']("gamepad"); + else + setTimeout(timeout, 100); + } + setTimeout(timeout, 100); + } +}); diff --git a/Engine/lib/sdl/test/gcc-fat.sh b/Engine/lib/sdl/test/gcc-fat.sh new file mode 100644 index 0000000000..44d37ffdef --- /dev/null +++ b/Engine/lib/sdl/test/gcc-fat.sh @@ -0,0 +1,110 @@ +#!/bin/sh +# +# Build Universal binaries on Mac OS X, thanks Ryan! +# +# Usage: ./configure CC="sh gcc-fat.sh" && make && rm -rf ppc x86 + +# PowerPC compiler flags (10.2 runtime compatibility) +GCC_COMPILE_PPC="gcc-3.3 -arch ppc \ +-DMAC_OS_X_VERSION_MIN_REQUIRED=1020 \ +-nostdinc \ +-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ +-I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3 \ +-isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include" + +GCC_LINK_PPC="\ +-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 \ +-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks \ +-Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk" + +# Intel compiler flags (10.4 runtime compatibility) +GCC_COMPILE_X86="gcc-4.0 -arch i386 -mmacosx-version-min=10.4 \ +-DMAC_OS_X_VERSION_MIN_REQUIRED=1040 \ +-nostdinc \ +-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks \ +-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include \ +-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include" + +GCC_LINK_X86="\ +-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.0 \ +-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" + +# Output both PowerPC and Intel object files +args="$*" +compile=yes +link=yes +while test x$1 != x; do + case $1 in + --version) exec gcc $1;; + -v) exec gcc $1;; + -V) exec gcc $1;; + -print-prog-name=*) exec gcc $1;; + -print-search-dirs) exec gcc $1;; + -E) GCC_COMPILE_PPC="$GCC_COMPILE_PPC -E" + GCC_COMPILE_X86="$GCC_COMPILE_X86 -E" + compile=no; link=no;; + -c) link=no;; + -o) output=$2;; + *.c|*.cc|*.cpp|*.S) source=$1;; + esac + shift +done +if test x$link = xyes; then + GCC_COMPILE_PPC="$GCC_COMPILE_PPC $GCC_LINK_PPC" + GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86" +fi +if test x"$output" = x; then + if test x$link = xyes; then + output=a.out + elif test x$compile = xyes; then + output=`echo $source | sed -e 's|.*/||' -e 's|\(.*\)\.[^\.]*|\1|'`.o + fi +fi + +if test x"$output" != x; then + dir=ppc/`dirname $output` + if test -d $dir; then + : + else + mkdir -p $dir + fi +fi +set -- $args +while test x$1 != x; do + if test -f "ppc/$1" && test "$1" != "$output"; then + ppc_args="$ppc_args ppc/$1" + else + ppc_args="$ppc_args $1" + fi + shift +done +$GCC_COMPILE_PPC $ppc_args || exit $? +if test x"$output" != x; then + cp $output ppc/$output +fi + +if test x"$output" != x; then + dir=x86/`dirname $output` + if test -d $dir; then + : + else + mkdir -p $dir + fi +fi +set -- $args +while test x$1 != x; do + if test -f "x86/$1" && test "$1" != "$output"; then + x86_args="$x86_args x86/$1" + else + x86_args="$x86_args $1" + fi + shift +done +$GCC_COMPILE_X86 $x86_args || exit $? +if test x"$output" != x; then + cp $output x86/$output +fi + +if test x"$output" != x; then + lipo -create -o $output ppc/$output x86/$output +fi diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/icon.bmp b/Engine/lib/sdl/test/icon.bmp similarity index 100% rename from Engine/lib/sdl/Xcode-iOS/Demos/data/icon.bmp rename to Engine/lib/sdl/test/icon.bmp diff --git a/Engine/lib/sdl/test/loopwave.c b/Engine/lib/sdl/test/loopwave.c new file mode 100644 index 0000000000..ec9f528191 --- /dev/null +++ b/Engine/lib/sdl/test/loopwave.c @@ -0,0 +1,161 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to load a wave file and loop playing it using SDL audio */ + +/* loopwaves.c is much more robust in handling WAVE files -- + This is only for simple WAVEs +*/ +#include "SDL_config.h" + +#include +#include + +#if HAVE_SIGNAL_H +#include +#endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +struct +{ + SDL_AudioSpec spec; + Uint8 *sound; /* Pointer to wave data */ + Uint32 soundlen; /* Length of wave data */ + int soundpos; /* Current play position */ +} wave; + + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + + +void SDLCALL +fillerup(void *unused, Uint8 * stream, int len) +{ + Uint8 *waveptr; + int waveleft; + + /* Set up the pointers */ + waveptr = wave.sound + wave.soundpos; + waveleft = wave.soundlen - wave.soundpos; + + /* Go! */ + while (waveleft <= len) { + SDL_memcpy(stream, waveptr, waveleft); + stream += waveleft; + len -= waveleft; + waveptr = wave.sound; + waveleft = wave.soundlen; + wave.soundpos = 0; + } + SDL_memcpy(stream, waveptr, len); + wave.soundpos += len; +} + +static int done = 0; +void +poked(int sig) +{ + done = 1; +} + +#ifdef __EMSCRIPTEN__ +void +loop() +{ + if(done || (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING)) + emscripten_cancel_main_loop(); +} +#endif + +int +main(int argc, char *argv[]) +{ + int i; + char filename[4096]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + if (argc > 1) { + SDL_strlcpy(filename, argv[1], sizeof(filename)); + } else { + SDL_strlcpy(filename, "sample.wav", sizeof(filename)); + } + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + quit(1); + } + + wave.spec.callback = fillerup; +#if HAVE_SIGNAL_H + /* Set the signals */ +#ifdef SIGHUP + signal(SIGHUP, poked); +#endif + signal(SIGINT, poked); +#ifdef SIGQUIT + signal(SIGQUIT, poked); +#endif + signal(SIGTERM, poked); +#endif /* HAVE_SIGNAL_H */ + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + /* Initialize fillerup() variables */ + if (SDL_OpenAudio(&wave.spec, NULL) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError()); + SDL_FreeWAV(wave.sound); + quit(2); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + /* Let the audio run */ + SDL_PauseAudio(0); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING)) + SDL_Delay(1000); +#endif + + /* Clean up on signal */ + SDL_CloseAudio(); + SDL_FreeWAV(wave.sound); + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/loopwavequeue.c b/Engine/lib/sdl/test/loopwavequeue.c new file mode 100644 index 0000000000..85f5bd5793 --- /dev/null +++ b/Engine/lib/sdl/test/loopwavequeue.c @@ -0,0 +1,150 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to load a wave file and loop playing it using SDL sound queueing */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#if HAVE_SIGNAL_H +#include +#endif + +struct +{ + SDL_AudioSpec spec; + Uint8 *sound; /* Pointer to wave data */ + Uint32 soundlen; /* Length of wave data */ + int soundpos; /* Current play position */ +} wave; + + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +static int done = 0; +void +poked(int sig) +{ + done = 1; +} + +void +loop() +{ +#ifdef __EMSCRIPTEN__ + if (done || (SDL_GetAudioStatus() != SDL_AUDIO_PLAYING)) { + emscripten_cancel_main_loop(); + } + else +#endif + { + /* The device from SDL_OpenAudio() is always device #1. */ + const Uint32 queued = SDL_GetQueuedAudioSize(1); + SDL_Log("Device has %u bytes queued.\n", (unsigned int) queued); + if (queued <= 8192) { /* time to requeue the whole thing? */ + if (SDL_QueueAudio(1, wave.sound, wave.soundlen) == 0) { + SDL_Log("Device queued %u more bytes.\n", (unsigned int) wave.soundlen); + } else { + SDL_Log("Device FAILED to queue %u more bytes: %s\n", (unsigned int) wave.soundlen, SDL_GetError()); + } + } + } +} + +int +main(int argc, char *argv[]) +{ + char filename[4096]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + if (argc > 1) { + SDL_strlcpy(filename, argv[1], sizeof(filename)); + } else { + SDL_strlcpy(filename, "sample.wav", sizeof(filename)); + } + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &wave.spec, &wave.sound, &wave.soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + quit(1); + } + + wave.spec.callback = NULL; /* we'll push audio. */ + +#if HAVE_SIGNAL_H + /* Set the signals */ +#ifdef SIGHUP + signal(SIGHUP, poked); +#endif + signal(SIGINT, poked); +#ifdef SIGQUIT + signal(SIGQUIT, poked); +#endif + signal(SIGTERM, poked); +#endif /* HAVE_SIGNAL_H */ + + /* Initialize fillerup() variables */ + if (SDL_OpenAudio(&wave.spec, NULL) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open audio: %s\n", SDL_GetError()); + SDL_FreeWAV(wave.sound); + quit(2); + } + + /*static x[99999]; SDL_QueueAudio(1, x, sizeof (x));*/ + + /* Let the audio run */ + SDL_PauseAudio(0); + + done = 0; + + /* Note that we stuff the entire audio buffer into the queue in one + shot. Most apps would want to feed it a little at a time, as it + plays, but we're going for simplicity here. */ + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done && (SDL_GetAudioStatus() == SDL_AUDIO_PLAYING)) + { + loop(); + + SDL_Delay(100); /* let it play for awhile. */ + } +#endif + + /* Clean up on signal */ + SDL_CloseAudio(); + SDL_FreeWAV(wave.sound); + SDL_Quit(); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/moose.dat b/Engine/lib/sdl/test/moose.dat new file mode 100644 index 0000000000..10530046fd Binary files /dev/null and b/Engine/lib/sdl/test/moose.dat differ diff --git a/Engine/lib/sdl/test/nacl/Makefile b/Engine/lib/sdl/test/nacl/Makefile new file mode 100644 index 0000000000..9ca166c127 --- /dev/null +++ b/Engine/lib/sdl/test/nacl/Makefile @@ -0,0 +1,63 @@ +# Copyright (c) 2013 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# GNU Makefile based on shared rules provided by the Native Client SDK. +# See README.Makefiles for more details. + +VALID_TOOLCHAINS := pnacl + +# NACL_SDK_ROOT ?= $(abspath $(CURDIR)/../../..) +include $(NACL_SDK_ROOT)/tools/common.mk + + +TARGET = sdl_app +DEPS = ppapi_simple nacl_io +# ppapi_simple and SDL2 end up being listed twice due to dependency solving issues -- Gabriel +LIBS = SDL2_test SDL2 ppapi_simple SDL2main SDL2 $(DEPS) ppapi_gles2 ppapi_cpp ppapi pthread + +CFLAGS := -Wall +SOURCES ?= testgles2.c + +# Build rules generated by macros from common.mk: +# Overriden macro from NACL SDK to be able to customize the library search path -- Gabriel +# Specific Link Macro +# +# $1 = Target Name +# $2 = List of inputs +# $3 = List of libs +# $4 = List of deps +# $5 = List of lib dirs +# $6 = Other Linker Args +# +# For debugging, we translate the pre-finalized .bc file. +# +define LINKER_RULE +all: $(1).pexe +$(1)_x86_32.nexe : $(1).bc + $(call LOG,TRANSLATE,$$@,$(PNACL_TRANSLATE) --allow-llvm-bitcode-input -arch x86-32 $$^ -o $$@) + +$(1)_x86_64.nexe : $(1).bc + $(call LOG,TRANSLATE,$$@,$(PNACL_TRANSLATE) --allow-llvm-bitcode-input -arch x86-64 $$^ -o $$@) + +$(1)_arm.nexe : $(1).bc + $(call LOG,TRANSLATE,$$@,$(PNACL_TRANSLATE) --allow-llvm-bitcode-input -arch arm $$^ -o $$@) + +$(1).pexe: $(1).bc + $(call LOG,FINALIZE,$$@,$(PNACL_FINALIZE) -o $$@ $$^) + +$(1).bc: $(2) $(foreach dep,$(4),$(STAMPDIR)/$(dep).stamp) + $(call LOG,LINK,$$@,$(PNACL_LINK) -o $$@ $(2) $(PNACL_LDFLAGS) $(foreach path,$(5),-L$(path)/pnacl/$(CONFIG)) -L./lib $(foreach lib,$(3),-l$(lib)) $(6)) +endef + +$(foreach dep,$(DEPS),$(eval $(call DEPEND_RULE,$(dep)))) +$(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) + +ifeq ($(CONFIG),Release) +$(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) +$(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) +else +$(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) +endif + +$(eval $(call NMF_RULE,$(TARGET),)) diff --git a/Engine/lib/sdl/test/nacl/background.js b/Engine/lib/sdl/test/nacl/background.js new file mode 100644 index 0000000000..5c3b1b7c94 --- /dev/null +++ b/Engine/lib/sdl/test/nacl/background.js @@ -0,0 +1,40 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function makeURL(toolchain, config) { + return 'index.html?tc=' + toolchain + '&config=' + config; +} + +function createWindow(url) { + console.log('loading ' + url); + chrome.app.window.create(url, { + width: 1024, + height: 800, + frame: 'none' + }); +} + +function onLaunched(launchData) { + // Send and XHR to get the URL to load from a configuration file. + // Normally you won't need to do this; just call: + // + // chrome.app.window.create('', {...}); + // + // In the SDK we want to be able to load different URLs (for different + // toolchain/config combinations) from the commandline, so we to read + // this information from the file "run_package_config". + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'run_package_config', true); + xhr.onload = function() { + var toolchain_config = this.responseText.split(' '); + createWindow(makeURL.apply(null, toolchain_config)); + }; + xhr.onerror = function() { + // Can't find the config file, just load the default. + createWindow('index.html'); + }; + xhr.send(); +} + +chrome.app.runtime.onLaunched.addListener(onLaunched); diff --git a/Engine/lib/sdl/test/nacl/common.js b/Engine/lib/sdl/test/nacl/common.js new file mode 100644 index 0000000000..a108fad329 --- /dev/null +++ b/Engine/lib/sdl/test/nacl/common.js @@ -0,0 +1,469 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Set to true when the Document is loaded IFF "test=true" is in the query +// string. +var isTest = false; + +// Set to true when loading a "Release" NaCl module, false when loading a +// "Debug" NaCl module. +var isRelease = true; + +// Javascript module pattern: +// see http://en.wikipedia.org/wiki/Unobtrusive_JavaScript#Namespaces +// In essence, we define an anonymous function which is immediately called and +// returns a new object. The new object contains only the exported definitions; +// all other definitions in the anonymous function are inaccessible to external +// code. +var common = (function() { + + function isHostToolchain(tool) { + return tool == 'win' || tool == 'linux' || tool == 'mac'; + } + + /** + * Return the mime type for NaCl plugin. + * + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc. + * @return {string} The mime-type for the kind of NaCl plugin matching + * the given toolchain. + */ + function mimeTypeForTool(tool) { + // For NaCl modules use application/x-nacl. + var mimetype = 'application/x-nacl'; + if (isHostToolchain(tool)) { + // For non-NaCl PPAPI plugins use the x-ppapi-debug/release + // mime type. + if (isRelease) + mimetype = 'application/x-ppapi-release'; + else + mimetype = 'application/x-ppapi-debug'; + } else if (tool == 'pnacl' && isRelease) { + mimetype = 'application/x-pnacl'; + } + return mimetype; + } + + /** + * Check if the browser supports NaCl plugins. + * + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc. + * @return {bool} True if the browser supports the type of NaCl plugin + * produced by the given toolchain. + */ + function browserSupportsNaCl(tool) { + // Assume host toolchains always work with the given browser. + // The below mime-type checking might not work with + // --register-pepper-plugins. + if (isHostToolchain(tool)) { + return true; + } + var mimetype = mimeTypeForTool(tool); + return navigator.mimeTypes[mimetype] !== undefined; + } + + /** + * Inject a script into the DOM, and call a callback when it is loaded. + * + * @param {string} url The url of the script to load. + * @param {Function} onload The callback to call when the script is loaded. + * @param {Function} onerror The callback to call if the script fails to load. + */ + function injectScript(url, onload, onerror) { + var scriptEl = document.createElement('script'); + scriptEl.type = 'text/javascript'; + scriptEl.src = url; + scriptEl.onload = onload; + if (onerror) { + scriptEl.addEventListener('error', onerror, false); + } + document.head.appendChild(scriptEl); + } + + /** + * Run all tests for this example. + * + * @param {Object} moduleEl The module DOM element. + */ + function runTests(moduleEl) { + console.log('runTests()'); + common.tester = new Tester(); + + // All NaCl SDK examples are OK if the example exits cleanly; (i.e. the + // NaCl module returns 0 or calls exit(0)). + // + // Without this exception, the browser_tester thinks that the module + // has crashed. + common.tester.exitCleanlyIsOK(); + + common.tester.addAsyncTest('loaded', function(test) { + test.pass(); + }); + + if (typeof window.addTests !== 'undefined') { + window.addTests(); + } + + common.tester.waitFor(moduleEl); + common.tester.run(); + } + + /** + * Create the Native Client element as a child of the DOM element + * named "listener". + * + * @param {string} name The name of the example. + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc. + * @param {string} path Directory name where .nmf file can be found. + * @param {number} width The width to create the plugin. + * @param {number} height The height to create the plugin. + * @param {Object} attrs Dictionary of attributes to set on the module. + */ + function createNaClModule(name, tool, path, width, height, attrs) { + var moduleEl = document.createElement('embed'); + moduleEl.setAttribute('name', 'nacl_module'); + moduleEl.setAttribute('id', 'nacl_module'); + moduleEl.setAttribute('width', width); + moduleEl.setAttribute('height', height); + moduleEl.setAttribute('path', path); + moduleEl.setAttribute('src', path + '/' + name + '.nmf'); + + // Add any optional arguments + if (attrs) { + for (var key in attrs) { + moduleEl.setAttribute(key, attrs[key]); + } + } + + var mimetype = mimeTypeForTool(tool); + moduleEl.setAttribute('type', mimetype); + + // The element is wrapped inside a
, which has both a 'load' + // and a 'message' event listener attached. This wrapping method is used + // instead of attaching the event listeners directly to the element + // to ensure that the listeners are active before the NaCl module 'load' + // event fires. + var listenerDiv = document.getElementById('listener'); + listenerDiv.appendChild(moduleEl); + + // Host plugins don't send a moduleDidLoad message. We'll fake it here. + var isHost = isHostToolchain(tool); + if (isHost) { + window.setTimeout(function() { + moduleEl.readyState = 1; + moduleEl.dispatchEvent(new CustomEvent('loadstart')); + moduleEl.readyState = 4; + moduleEl.dispatchEvent(new CustomEvent('load')); + moduleEl.dispatchEvent(new CustomEvent('loadend')); + }, 100); // 100 ms + } + + // This is code that is only used to test the SDK. + if (isTest) { + var loadNaClTest = function() { + injectScript('nacltest.js', function() { + runTests(moduleEl); + }); + }; + + // Try to load test.js for the example. Whether or not it exists, load + // nacltest.js. + injectScript('test.js', loadNaClTest, loadNaClTest); + } + } + + /** + * Add the default "load" and "message" event listeners to the element with + * id "listener". + * + * The "load" event is sent when the module is successfully loaded. The + * "message" event is sent when the naclModule posts a message using + * PPB_Messaging.PostMessage() (in C) or pp::Instance().PostMessage() (in + * C++). + */ + function attachDefaultListeners() { + var listenerDiv = document.getElementById('listener'); + listenerDiv.addEventListener('load', moduleDidLoad, true); + listenerDiv.addEventListener('message', handleMessage, true); + listenerDiv.addEventListener('error', handleError, true); + listenerDiv.addEventListener('crash', handleCrash, true); + if (typeof window.attachListeners !== 'undefined') { + window.attachListeners(); + } + } + + /** + * Called when the NaCl module fails to load. + * + * This event listener is registered in createNaClModule above. + */ + function handleError(event) { + // We can't use common.naclModule yet because the module has not been + // loaded. + var moduleEl = document.getElementById('nacl_module'); + updateStatus('ERROR [' + moduleEl.lastError + ']'); + } + + /** + * Called when the Browser can not communicate with the Module + * + * This event listener is registered in attachDefaultListeners above. + */ + function handleCrash(event) { + if (common.naclModule.exitStatus == -1) { + updateStatus('CRASHED'); + } else { + updateStatus('EXITED [' + common.naclModule.exitStatus + ']'); + } + if (typeof window.handleCrash !== 'undefined') { + window.handleCrash(common.naclModule.lastError); + } + } + + /** + * Called when the NaCl module is loaded. + * + * This event listener is registered in attachDefaultListeners above. + */ + function moduleDidLoad() { + common.naclModule = document.getElementById('nacl_module'); + updateStatus('RUNNING'); + + if (typeof window.moduleDidLoad !== 'undefined') { + window.moduleDidLoad(); + } + } + + /** + * Hide the NaCl module's embed element. + * + * We don't want to hide by default; if we do, it is harder to determine that + * a plugin failed to load. Instead, call this function inside the example's + * "moduleDidLoad" function. + * + */ + function hideModule() { + // Setting common.naclModule.style.display = "None" doesn't work; the + // module will no longer be able to receive postMessages. + common.naclModule.style.height = '0'; + } + + /** + * Remove the NaCl module from the page. + */ + function removeModule() { + common.naclModule.parentNode.removeChild(common.naclModule); + common.naclModule = null; + } + + /** + * Return true when |s| starts with the string |prefix|. + * + * @param {string} s The string to search. + * @param {string} prefix The prefix to search for in |s|. + */ + function startsWith(s, prefix) { + // indexOf would search the entire string, lastIndexOf(p, 0) only checks at + // the first index. See: http://stackoverflow.com/a/4579228 + return s.lastIndexOf(prefix, 0) === 0; + } + + /** Maximum length of logMessageArray. */ + var kMaxLogMessageLength = 20; + + /** An array of messages to display in the element with id "log". */ + var logMessageArray = []; + + /** + * Add a message to an element with id "log". + * + * This function is used by the default "log:" message handler. + * + * @param {string} message The message to log. + */ + function logMessage(message) { + logMessageArray.push(message); + if (logMessageArray.length > kMaxLogMessageLength) + logMessageArray.shift(); + + document.getElementById('log').textContent = logMessageArray.join('\n'); + console.log(message); + } + + /** + */ + var defaultMessageTypes = { + 'alert': alert, + 'log': logMessage + }; + + /** + * Called when the NaCl module sends a message to JavaScript (via + * PPB_Messaging.PostMessage()) + * + * This event listener is registered in createNaClModule above. + * + * @param {Event} message_event A message event. message_event.data contains + * the data sent from the NaCl module. + */ + function handleMessage(message_event) { + if (typeof message_event.data === 'string') { + for (var type in defaultMessageTypes) { + if (defaultMessageTypes.hasOwnProperty(type)) { + if (startsWith(message_event.data, type + ':')) { + func = defaultMessageTypes[type]; + func(message_event.data.slice(type.length + 1)); + return; + } + } + } + } + + if (typeof window.handleMessage !== 'undefined') { + window.handleMessage(message_event); + return; + } + + logMessage('Unhandled message: ' + message_event.data); + } + + /** + * Called when the DOM content has loaded; i.e. the page's document is fully + * parsed. At this point, we can safely query any elements in the document via + * document.querySelector, document.getElementById, etc. + * + * @param {string} name The name of the example. + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc. + * @param {string} path Directory name where .nmf file can be found. + * @param {number} width The width to create the plugin. + * @param {number} height The height to create the plugin. + * @param {Object} attrs Optional dictionary of additional attributes. + */ + function domContentLoaded(name, tool, path, width, height, attrs) { + // If the page loads before the Native Client module loads, then set the + // status message indicating that the module is still loading. Otherwise, + // do not change the status message. + updateStatus('Page loaded.'); + if (!browserSupportsNaCl(tool)) { + updateStatus( + 'Browser does not support NaCl (' + tool + '), or NaCl is disabled'); + } else if (common.naclModule == null) { + updateStatus('Creating embed: ' + tool); + + // We use a non-zero sized embed to give Chrome space to place the bad + // plug-in graphic, if there is a problem. + width = typeof width !== 'undefined' ? width : 200; + height = typeof height !== 'undefined' ? height : 200; + attachDefaultListeners(); + createNaClModule(name, tool, path, width, height, attrs); + } else { + // It's possible that the Native Client module onload event fired + // before the page's onload event. In this case, the status message + // will reflect 'SUCCESS', but won't be displayed. This call will + // display the current message. + updateStatus('Waiting.'); + } + } + + /** Saved text to display in the element with id 'statusField'. */ + var statusText = 'NO-STATUSES'; + + /** + * Set the global status message. If the element with id 'statusField' + * exists, then set its HTML to the status message as well. + * + * @param {string} opt_message The message to set. If null or undefined, then + * set element 'statusField' to the message from the last call to + * updateStatus. + */ + function updateStatus(opt_message) { + if (opt_message) { + statusText = opt_message; + } + var statusField = document.getElementById('statusField'); + if (statusField) { + statusField.innerHTML = statusText; + } + } + + // The symbols to export. + return { + /** A reference to the NaCl module, once it is loaded. */ + naclModule: null, + + attachDefaultListeners: attachDefaultListeners, + domContentLoaded: domContentLoaded, + createNaClModule: createNaClModule, + hideModule: hideModule, + removeModule: removeModule, + logMessage: logMessage, + updateStatus: updateStatus + }; + +}()); + +// Listen for the DOM content to be loaded. This event is fired when parsing of +// the page's document has finished. +document.addEventListener('DOMContentLoaded', function() { + var body = document.body; + + // The data-* attributes on the body can be referenced via body.dataset. + if (body.dataset) { + var loadFunction; + if (!body.dataset.customLoad) { + loadFunction = common.domContentLoaded; + } else if (typeof window.domContentLoaded !== 'undefined') { + loadFunction = window.domContentLoaded; + } + + // From https://developer.mozilla.org/en-US/docs/DOM/window.location + var searchVars = {}; + if (window.location.search.length > 1) { + var pairs = window.location.search.substr(1).split('&'); + for (var key_ix = 0; key_ix < pairs.length; key_ix++) { + var keyValue = pairs[key_ix].split('='); + searchVars[unescape(keyValue[0])] = + keyValue.length > 1 ? unescape(keyValue[1]) : ''; + } + } + + if (loadFunction) { + var toolchains = body.dataset.tools.split(' '); + var configs = body.dataset.configs.split(' '); + + var attrs = {}; + if (body.dataset.attrs) { + var attr_list = body.dataset.attrs.split(' '); + for (var key in attr_list) { + var attr = attr_list[key].split('='); + var key = attr[0]; + var value = attr[1]; + attrs[key] = value; + } + } + + var tc = toolchains.indexOf(searchVars.tc) !== -1 ? + searchVars.tc : toolchains[0]; + + // If the config value is included in the search vars, use that. + // Otherwise default to Release if it is valid, or the first value if + // Release is not valid. + if (configs.indexOf(searchVars.config) !== -1) + var config = searchVars.config; + else if (configs.indexOf('Release') !== -1) + var config = 'Release'; + else + var config = configs[0]; + + var pathFormat = body.dataset.path; + var path = pathFormat.replace('{tc}', tc).replace('{config}', config); + + isTest = searchVars.test === 'true'; + isRelease = path.toLowerCase().indexOf('release') != -1; + + loadFunction(body.dataset.name, tc, path, body.dataset.width, + body.dataset.height, attrs); + } + } +}); diff --git a/Engine/lib/sdl/test/nacl/index.html b/Engine/lib/sdl/test/nacl/index.html new file mode 100644 index 0000000000..4695b7e9c0 --- /dev/null +++ b/Engine/lib/sdl/test/nacl/index.html @@ -0,0 +1,21 @@ + + + + + + + SDL NACL Test + + + +

SDL NACL Test

+

Status: NO-STATUS

+ +
+ + diff --git a/Engine/lib/sdl/test/nacl/manifest.json b/Engine/lib/sdl/test/nacl/manifest.json new file mode 100644 index 0000000000..df6772b4c4 --- /dev/null +++ b/Engine/lib/sdl/test/nacl/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "SDL testgles2", + "version": "33.0.1750.117", + "minimum_chrome_version": "33.0.1750.117", + "manifest_version": 2, + "description": "testgles2", + "offline_enabled": true, + "icons": { + "128": "icon128.png" + }, + "app": { + "background": { + "scripts": ["background.js"] + } + }, + "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMN716Qyu0l2EHNFqIJVqVysFcTR6urqhaGGqW4UK7slBaURz9+Sb1b4Ot5P1uQNE5c+CTU5Vu61wpqmSqMMxqHLWdPPMh8uRlyctsb2cxWwG6XoGSvpX29NsQVUFXd4v2tkJm3G9t+V0X8TYskrvWQmnyOW8OEIDvrBhUEfFxWQIDAQAB", + "oauth2": { + "client_id": "903965034255.apps.googleusercontent.com", + "scopes": ["https://www.googleapis.com/auth/drive"] + }, + "permissions": [] +} diff --git a/Engine/lib/sdl/test/picture.xbm b/Engine/lib/sdl/test/picture.xbm new file mode 100644 index 0000000000..c873a60a18 --- /dev/null +++ b/Engine/lib/sdl/test/picture.xbm @@ -0,0 +1,14 @@ +#define picture_width 32 +#define picture_height 32 +static char picture_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x18, + 0x64, 0x6f, 0xf6, 0x26, 0x0a, 0x00, 0x00, 0x50, 0xf2, 0xff, 0xff, 0x4f, + 0x14, 0x04, 0x00, 0x28, 0x14, 0x0e, 0x00, 0x28, 0x10, 0x32, 0x00, 0x08, + 0x94, 0x03, 0x00, 0x08, 0xf4, 0x04, 0x00, 0x08, 0xb0, 0x08, 0x00, 0x08, + 0x34, 0x01, 0x00, 0x28, 0x34, 0x01, 0x00, 0x28, 0x12, 0x00, 0x40, 0x48, + 0x12, 0x20, 0xa6, 0x48, 0x14, 0x50, 0x11, 0x29, 0x14, 0x50, 0x48, 0x2a, + 0x10, 0x27, 0xac, 0x0e, 0xd4, 0x71, 0xe8, 0x0a, 0x74, 0x20, 0xa8, 0x0a, + 0x14, 0x20, 0x00, 0x08, 0x10, 0x50, 0x00, 0x08, 0x14, 0x00, 0x00, 0x28, + 0x14, 0x00, 0x00, 0x28, 0xf2, 0xff, 0xff, 0x4f, 0x0a, 0x00, 0x00, 0x50, + 0x64, 0x6f, 0xf6, 0x26, 0x18, 0x80, 0x01, 0x18, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; diff --git a/Engine/lib/sdl/test/relative_mode.markdown b/Engine/lib/sdl/test/relative_mode.markdown new file mode 100644 index 0000000000..5b2ed61850 --- /dev/null +++ b/Engine/lib/sdl/test/relative_mode.markdown @@ -0,0 +1,58 @@ +Relative mode testing +===================== + +See test program at the bottom of this file. + +Initial tests: + + - When in relative mode, the mouse shouldn't be moveable outside of the window. + - When the cursor is outside the window when relative mode is enabled, mouse + clicks should not go to whatever app was under the cursor previously. + - When alt/cmd-tabbing between a relative mode app and another app, clicks when + in the relative mode app should also not go to whatever app was under the + cursor previously. + + +Code +==== + + #include + + int PollEvents() + { + SDL_Event event; + while (SDL_PollEvent(&event)) + { + switch (event.type) + { + case SDL_QUIT: + return 1; + default: + break; + } + } + + return 0; + } + + int main(int argc, char *argv[]) + { + SDL_Window *win; + + SDL_Init(SDL_INIT_VIDEO); + + win = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, 0); + SDL_SetRelativeMouseMode(SDL_TRUE); + + while (1) + { + if (PollEvents()) + break; + } + + SDL_DestroyWindow(win); + + SDL_Quit(); + + return 0; + } diff --git a/Engine/lib/sdl/test/sample.bmp b/Engine/lib/sdl/test/sample.bmp new file mode 100644 index 0000000000..aca8bbca6e Binary files /dev/null and b/Engine/lib/sdl/test/sample.bmp differ diff --git a/Engine/lib/sdl/test/sample.wav b/Engine/lib/sdl/test/sample.wav new file mode 100644 index 0000000000..002f815815 Binary files /dev/null and b/Engine/lib/sdl/test/sample.wav differ diff --git a/Engine/lib/sdl/test/shapes/p01_shape24.bmp b/Engine/lib/sdl/test/shapes/p01_shape24.bmp new file mode 100644 index 0000000000..290e93d9c7 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p01_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p01_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p01_shape32alpha.bmp new file mode 100644 index 0000000000..a1b8d95619 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p01_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p01_shape8.bmp b/Engine/lib/sdl/test/shapes/p01_shape8.bmp new file mode 100644 index 0000000000..5adca298f7 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p01_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p02_shape24.bmp b/Engine/lib/sdl/test/shapes/p02_shape24.bmp new file mode 100644 index 0000000000..61e411bb77 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p02_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p02_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p02_shape32alpha.bmp new file mode 100644 index 0000000000..6497a7b0d8 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p02_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p02_shape8.bmp b/Engine/lib/sdl/test/shapes/p02_shape8.bmp new file mode 100644 index 0000000000..8ad7c9ac8b Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p02_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p03_shape24.bmp b/Engine/lib/sdl/test/shapes/p03_shape24.bmp new file mode 100644 index 0000000000..e2378679fa Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p03_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p03_shape8.bmp b/Engine/lib/sdl/test/shapes/p03_shape8.bmp new file mode 100644 index 0000000000..28f8800f63 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p03_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p04_shape1.bmp b/Engine/lib/sdl/test/shapes/p04_shape1.bmp new file mode 100644 index 0000000000..ad288ace53 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p04_shape1.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p04_shape24.bmp b/Engine/lib/sdl/test/shapes/p04_shape24.bmp new file mode 100644 index 0000000000..8cf6129863 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p04_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p04_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p04_shape32alpha.bmp new file mode 100644 index 0000000000..771ebc0533 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p04_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p04_shape8.bmp b/Engine/lib/sdl/test/shapes/p04_shape8.bmp new file mode 100644 index 0000000000..29d5031683 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p04_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p05_shape8.bmp b/Engine/lib/sdl/test/shapes/p05_shape8.bmp new file mode 100644 index 0000000000..e2d62a53d4 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p05_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p06_shape1alpha.bmp b/Engine/lib/sdl/test/shapes/p06_shape1alpha.bmp new file mode 100644 index 0000000000..1ca14f11db Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p06_shape1alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p06_shape24.bmp b/Engine/lib/sdl/test/shapes/p06_shape24.bmp new file mode 100644 index 0000000000..4cc257688f Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p06_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p06_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p06_shape32alpha.bmp new file mode 100644 index 0000000000..04afd793cd Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p06_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p06_shape8.bmp b/Engine/lib/sdl/test/shapes/p06_shape8.bmp new file mode 100644 index 0000000000..017c1ed776 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p06_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p07_shape24.bmp b/Engine/lib/sdl/test/shapes/p07_shape24.bmp new file mode 100644 index 0000000000..fa8012cae8 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p07_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p07_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p07_shape32alpha.bmp new file mode 100644 index 0000000000..d2376666de Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p07_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p07_shape8.bmp b/Engine/lib/sdl/test/shapes/p07_shape8.bmp new file mode 100644 index 0000000000..9aeaa0810f Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p07_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p08_shape24.bmp b/Engine/lib/sdl/test/shapes/p08_shape24.bmp new file mode 100644 index 0000000000..332f863499 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p08_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p08_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p08_shape32alpha.bmp new file mode 100644 index 0000000000..4d1d25e9ff Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p08_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p08_shape8.bmp b/Engine/lib/sdl/test/shapes/p08_shape8.bmp new file mode 100644 index 0000000000..920f9070ee Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p08_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p09_shape24.bmp b/Engine/lib/sdl/test/shapes/p09_shape24.bmp new file mode 100644 index 0000000000..e5a7c0043d Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p09_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p09_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p09_shape32alpha.bmp new file mode 100644 index 0000000000..250d267d14 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p09_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p09_shape8.bmp b/Engine/lib/sdl/test/shapes/p09_shape8.bmp new file mode 100644 index 0000000000..4d1cd014ec Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p09_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p10_shape1.bmp b/Engine/lib/sdl/test/shapes/p10_shape1.bmp new file mode 100644 index 0000000000..42b5a7f347 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p10_shape1.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p10_shape24.bmp b/Engine/lib/sdl/test/shapes/p10_shape24.bmp new file mode 100644 index 0000000000..bc1faf4e7b Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p10_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p10_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p10_shape32alpha.bmp new file mode 100644 index 0000000000..4330e44548 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p10_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p10_shape8.bmp b/Engine/lib/sdl/test/shapes/p10_shape8.bmp new file mode 100644 index 0000000000..64fb5c3720 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p10_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p11_shape24.bmp b/Engine/lib/sdl/test/shapes/p11_shape24.bmp new file mode 100644 index 0000000000..6535307862 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p11_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p11_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p11_shape32alpha.bmp new file mode 100644 index 0000000000..406d20a815 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p11_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p11_shape8.bmp b/Engine/lib/sdl/test/shapes/p11_shape8.bmp new file mode 100644 index 0000000000..36f1ba2c6b Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p11_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p12_shape24.bmp b/Engine/lib/sdl/test/shapes/p12_shape24.bmp new file mode 100644 index 0000000000..582cf994e2 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p12_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p12_shape8.bmp b/Engine/lib/sdl/test/shapes/p12_shape8.bmp new file mode 100644 index 0000000000..59377200bb Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p12_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p13_shape24.bmp b/Engine/lib/sdl/test/shapes/p13_shape24.bmp new file mode 100644 index 0000000000..70215db590 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p13_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p13_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p13_shape32alpha.bmp new file mode 100644 index 0000000000..b656da8165 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p13_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p13_shape8.bmp b/Engine/lib/sdl/test/shapes/p13_shape8.bmp new file mode 100644 index 0000000000..822b896e1c Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p13_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p14_shape24.bmp b/Engine/lib/sdl/test/shapes/p14_shape24.bmp new file mode 100644 index 0000000000..ae83f5a8ce Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p14_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p14_shape8.bmp b/Engine/lib/sdl/test/shapes/p14_shape8.bmp new file mode 100644 index 0000000000..d6f981f58a Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p14_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p15_shape24.bmp b/Engine/lib/sdl/test/shapes/p15_shape24.bmp new file mode 100644 index 0000000000..33b99588e4 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p15_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p15_shape32alpha.bmp b/Engine/lib/sdl/test/shapes/p15_shape32alpha.bmp new file mode 100644 index 0000000000..6954a5d91c Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p15_shape32alpha.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p15_shape8.bmp b/Engine/lib/sdl/test/shapes/p15_shape8.bmp new file mode 100644 index 0000000000..ada5aefb83 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p15_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p16_shape1.bmp b/Engine/lib/sdl/test/shapes/p16_shape1.bmp new file mode 100644 index 0000000000..5b3f5509ba Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p16_shape1.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p16_shape24.bmp b/Engine/lib/sdl/test/shapes/p16_shape24.bmp new file mode 100644 index 0000000000..1f2a1d230c Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p16_shape24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/p16_shape8.bmp b/Engine/lib/sdl/test/shapes/p16_shape8.bmp new file mode 100644 index 0000000000..0b4d4221c5 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/p16_shape8.bmp differ diff --git a/Engine/lib/sdl/test/shapes/trollface_24.bmp b/Engine/lib/sdl/test/shapes/trollface_24.bmp new file mode 100644 index 0000000000..e18c2c2ad1 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/trollface_24.bmp differ diff --git a/Engine/lib/sdl/test/shapes/trollface_32alpha.bmp b/Engine/lib/sdl/test/shapes/trollface_32alpha.bmp new file mode 100644 index 0000000000..ee3ecf9be4 Binary files /dev/null and b/Engine/lib/sdl/test/shapes/trollface_32alpha.bmp differ diff --git a/Engine/lib/sdl/test/testatomic.c b/Engine/lib/sdl/test/testatomic.c new file mode 100644 index 0000000000..41cc9ab1b3 --- /dev/null +++ b/Engine/lib/sdl/test/testatomic.c @@ -0,0 +1,724 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include + +#include "SDL.h" + +/* + Absolutely basic tests just to see if we get the expected value + after calling each function. +*/ + +static +char * +tf(SDL_bool tf) +{ + static char *t = "TRUE"; + static char *f = "FALSE"; + + if (tf) + { + return t; + } + + return f; +} + +static +void RunBasicTest() +{ + int value; + SDL_SpinLock lock = 0; + + SDL_atomic_t v; + SDL_bool tfret = SDL_FALSE; + + SDL_Log("\nspin lock---------------------------------------\n\n"); + + SDL_AtomicLock(&lock); + SDL_Log("AtomicLock lock=%d\n", lock); + SDL_AtomicUnlock(&lock); + SDL_Log("AtomicUnlock lock=%d\n", lock); + + SDL_Log("\natomic -----------------------------------------\n\n"); + + SDL_AtomicSet(&v, 0); + tfret = SDL_AtomicSet(&v, 10) == 0 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicSet(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = SDL_AtomicAdd(&v, 10) == 10 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicAdd(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 0); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 1) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 2) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 10); + tfret = (SDL_AtomicCAS(&v, 0, 20) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + value = SDL_AtomicGet(&v); + tfret = (SDL_AtomicCAS(&v, value, 20) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); +} + +/**************************************************************************/ +/* Atomic operation test + * Adapted with permission from code by Michael Davidsaver at: + * http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c + * Original copyright 2010 Brookhaven Science Associates as operator of Brookhaven National Lab + * http://www.aps.anl.gov/epics/license/open.php + */ + +/* Tests semantics of atomic operations. Also a stress test + * to see if they are really atomic. + * + * Several threads adding to the same variable. + * at the end the value is compared with the expected + * and with a non-atomic counter. + */ + +/* Number of concurrent incrementers */ +#define NThreads 2 +#define CountInc 100 +#define VALBITS (sizeof(atomicValue)*8) + +#define atomicValue int +#define CountTo ((atomicValue)((unsigned int)(1<<(VALBITS-1))-1)) +#define NInter (CountTo/CountInc/NThreads) +#define Expect (CountTo-NInter*CountInc*NThreads) + +SDL_COMPILE_TIME_ASSERT(size, CountTo>0); /* check for rollover */ + +static SDL_atomic_t good = { 42 }; + +static atomicValue bad = 42; + +static SDL_atomic_t threadsRunning; + +static SDL_sem *threadDone; + +static +int adder(void* junk) +{ + unsigned long N=NInter; + SDL_Log("Thread subtracting %d %lu times\n",CountInc,N); + while (N--) { + SDL_AtomicAdd(&good, -CountInc); + bad-=CountInc; + } + SDL_AtomicAdd(&threadsRunning, -1); + SDL_SemPost(threadDone); + return 0; +} + +static +void runAdder(void) +{ + Uint32 start, end; + int T=NThreads; + + start = SDL_GetTicks(); + + threadDone = SDL_CreateSemaphore(0); + + SDL_AtomicSet(&threadsRunning, NThreads); + + while (T--) + SDL_CreateThread(adder, "Adder", NULL); + + while (SDL_AtomicGet(&threadsRunning) > 0) + SDL_SemWait(threadDone); + + SDL_DestroySemaphore(threadDone); + + end = SDL_GetTicks(); + + SDL_Log("Finished in %f sec\n", (end - start) / 1000.f); +} + +static +void RunEpicTest() +{ + int b; + atomicValue v; + + SDL_Log("\nepic test---------------------------------------\n\n"); + + SDL_Log("Size asserted to be >= 32-bit\n"); + SDL_assert(sizeof(atomicValue)>=4); + + SDL_Log("Check static initializer\n"); + v=SDL_AtomicGet(&good); + SDL_assert(v==42); + + SDL_assert(bad==42); + + SDL_Log("Test negative values\n"); + SDL_AtomicSet(&good, -5); + v=SDL_AtomicGet(&good); + SDL_assert(v==-5); + + SDL_Log("Verify maximum value\n"); + SDL_AtomicSet(&good, CountTo); + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); + + SDL_Log("Test compare and exchange\n"); + + b=SDL_AtomicCAS(&good, 500, 43); + SDL_assert(!b); /* no swap since CountTo!=500 */ + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); /* ensure no swap */ + + b=SDL_AtomicCAS(&good, CountTo, 44); + SDL_assert(!!b); /* will swap */ + v=SDL_AtomicGet(&good); + SDL_assert(v==44); + + SDL_Log("Test Add\n"); + + v=SDL_AtomicAdd(&good, 1); + SDL_assert(v==44); + v=SDL_AtomicGet(&good); + SDL_assert(v==45); + + v=SDL_AtomicAdd(&good, 10); + SDL_assert(v==45); + v=SDL_AtomicGet(&good); + SDL_assert(v==55); + + SDL_Log("Test Add (Negative values)\n"); + + v=SDL_AtomicAdd(&good, -20); + SDL_assert(v==55); + v=SDL_AtomicGet(&good); + SDL_assert(v==35); + + v=SDL_AtomicAdd(&good, -50); /* crossing zero down */ + SDL_assert(v==35); + v=SDL_AtomicGet(&good); + SDL_assert(v==-15); + + v=SDL_AtomicAdd(&good, 30); /* crossing zero up */ + SDL_assert(v==-15); + v=SDL_AtomicGet(&good); + SDL_assert(v==15); + + SDL_Log("Reset before count down test\n"); + SDL_AtomicSet(&good, CountTo); + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); + + bad=CountTo; + SDL_assert(bad==CountTo); + + SDL_Log("Counting down from %d, Expect %d remaining\n",CountTo,Expect); + runAdder(); + + v=SDL_AtomicGet(&good); + SDL_Log("Atomic %d Non-Atomic %d\n",v,bad); + SDL_assert(v==Expect); + SDL_assert(bad!=Expect); +} + +/* End atomic operation test */ +/**************************************************************************/ + +/**************************************************************************/ +/* Lock-free FIFO test */ + +/* This is useful to test the impact of another thread locking the queue + entirely for heavy-weight manipulation. + */ +#define TEST_SPINLOCK_FIFO + +#define NUM_READERS 4 +#define NUM_WRITERS 4 +#define EVENTS_PER_WRITER 1000000 + +/* The number of entries must be a power of 2 */ +#define MAX_ENTRIES 256 +#define WRAP_MASK (MAX_ENTRIES-1) + +typedef struct +{ + SDL_atomic_t sequence; + SDL_Event event; +} SDL_EventQueueEntry; + +typedef struct +{ + SDL_EventQueueEntry entries[MAX_ENTRIES]; + + char cache_pad1[SDL_CACHELINE_SIZE-((sizeof(SDL_EventQueueEntry)*MAX_ENTRIES)%SDL_CACHELINE_SIZE)]; + + SDL_atomic_t enqueue_pos; + + char cache_pad2[SDL_CACHELINE_SIZE-sizeof(SDL_atomic_t)]; + + SDL_atomic_t dequeue_pos; + + char cache_pad3[SDL_CACHELINE_SIZE-sizeof(SDL_atomic_t)]; + +#ifdef TEST_SPINLOCK_FIFO + SDL_SpinLock lock; + SDL_atomic_t rwcount; + SDL_atomic_t watcher; + + char cache_pad4[SDL_CACHELINE_SIZE-sizeof(SDL_SpinLock)-2*sizeof(SDL_atomic_t)]; +#endif + + volatile SDL_bool active; + + /* Only needed for the mutex test */ + SDL_mutex *mutex; + +} SDL_EventQueue; + +static void InitEventQueue(SDL_EventQueue *queue) +{ + int i; + + for (i = 0; i < MAX_ENTRIES; ++i) { + SDL_AtomicSet(&queue->entries[i].sequence, i); + } + SDL_AtomicSet(&queue->enqueue_pos, 0); + SDL_AtomicSet(&queue->dequeue_pos, 0); +#ifdef TEST_SPINLOCK_FIFO + queue->lock = 0; + SDL_AtomicSet(&queue->rwcount, 0); + SDL_AtomicSet(&queue->watcher, 0); +#endif + queue->active = SDL_TRUE; +} + +static SDL_bool EnqueueEvent_LockFree(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + for ( ; ; ) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->enqueue_pos, (int)queue_pos, (int)(queue_pos+1))) { + /* We own the object, fill it! */ + entry->event = *event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos + 1)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool DequeueEvent_LockFree(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + for ( ; ; ) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->dequeue_pos, (int)queue_pos, (int)(queue_pos+1))) { + /* We own the object, fill it! */ + *event = entry->event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos+MAX_ENTRIES)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool EnqueueEvent_Mutex(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->enqueue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + ++queue->enqueue_pos.value; + + /* We own the object, fill it! */ + entry->event = *event; + entry->sequence.value = (int)(queue_pos + 1); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +static SDL_bool DequeueEvent_Mutex(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->dequeue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + ++queue->dequeue_pos.value; + + /* We own the object, fill it! */ + *event = entry->event; + entry->sequence.value = (int)(queue_pos + MAX_ENTRIES); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +static SDL_sem *writersDone; +static SDL_sem *readersDone; +static SDL_atomic_t writersRunning; +static SDL_atomic_t readersRunning; + +typedef struct +{ + SDL_EventQueue *queue; + int index; + char padding1[SDL_CACHELINE_SIZE-(sizeof(SDL_EventQueue*)+sizeof(int))%SDL_CACHELINE_SIZE]; + int waits; + SDL_bool lock_free; + char padding2[SDL_CACHELINE_SIZE-sizeof(int)-sizeof(SDL_bool)]; +} WriterData; + +typedef struct +{ + SDL_EventQueue *queue; + int counters[NUM_WRITERS]; + int waits; + SDL_bool lock_free; + char padding[SDL_CACHELINE_SIZE-(sizeof(SDL_EventQueue*)+sizeof(int)*NUM_WRITERS+sizeof(int)+sizeof(SDL_bool))%SDL_CACHELINE_SIZE]; +} ReaderData; + +static int FIFO_Writer(void* _data) +{ + WriterData *data = (WriterData *)_data; + SDL_EventQueue *queue = data->queue; + int i; + SDL_Event event; + + event.type = SDL_USEREVENT; + event.user.windowID = 0; + event.user.code = 0; + event.user.data1 = data; + event.user.data2 = NULL; + + if (data->lock_free) { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_LockFree(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } else { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_Mutex(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } + SDL_AtomicAdd(&writersRunning, -1); + SDL_SemPost(writersDone); + return 0; +} + +static int FIFO_Reader(void* _data) +{ + ReaderData *data = (ReaderData *)_data; + SDL_EventQueue *queue = data->queue; + SDL_Event event; + + if (data->lock_free) { + for ( ; ; ) { + if (DequeueEvent_LockFree(queue, &event)) { + WriterData *writer = (WriterData*)event.user.data1; + ++data->counters[writer->index]; + } else if (queue->active) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } else { + for ( ; ; ) { + if (DequeueEvent_Mutex(queue, &event)) { + WriterData *writer = (WriterData*)event.user.data1; + ++data->counters[writer->index]; + } else if (queue->active) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } + SDL_AtomicAdd(&readersRunning, -1); + SDL_SemPost(readersDone); + return 0; +} + +#ifdef TEST_SPINLOCK_FIFO +/* This thread periodically locks the queue for no particular reason */ +static int FIFO_Watcher(void* _data) +{ + SDL_EventQueue *queue = (SDL_EventQueue *)_data; + + while (queue->active) { + SDL_AtomicLock(&queue->lock); + SDL_AtomicIncRef(&queue->watcher); + while (SDL_AtomicGet(&queue->rwcount) > 0) { + SDL_Delay(0); + } + /* Do queue manipulation here... */ + SDL_AtomicDecRef(&queue->watcher); + SDL_AtomicUnlock(&queue->lock); + + /* Wait a bit... */ + SDL_Delay(1); + } + return 0; +} +#endif /* TEST_SPINLOCK_FIFO */ + +static void RunFIFOTest(SDL_bool lock_free) +{ + SDL_EventQueue queue; + WriterData writerData[NUM_WRITERS]; + ReaderData readerData[NUM_READERS]; + Uint32 start, end; + int i, j; + int grand_total; + char textBuffer[1024]; + int len; + + SDL_Log("\nFIFO test---------------------------------------\n\n"); + SDL_Log("Mode: %s\n", lock_free ? "LockFree" : "Mutex"); + + readersDone = SDL_CreateSemaphore(0); + writersDone = SDL_CreateSemaphore(0); + + SDL_memset(&queue, 0xff, sizeof(queue)); + + InitEventQueue(&queue); + if (!lock_free) { + queue.mutex = SDL_CreateMutex(); + } + + start = SDL_GetTicks(); + +#ifdef TEST_SPINLOCK_FIFO + /* Start a monitoring thread */ + if (lock_free) { + SDL_CreateThread(FIFO_Watcher, "FIFOWatcher", &queue); + } +#endif + + /* Start the readers first */ + SDL_Log("Starting %d readers\n", NUM_READERS); + SDL_zero(readerData); + SDL_AtomicSet(&readersRunning, NUM_READERS); + for (i = 0; i < NUM_READERS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "FIFOReader%d", i); + readerData[i].queue = &queue; + readerData[i].lock_free = lock_free; + SDL_CreateThread(FIFO_Reader, name, &readerData[i]); + } + + /* Start up the writers */ + SDL_Log("Starting %d writers\n", NUM_WRITERS); + SDL_zero(writerData); + SDL_AtomicSet(&writersRunning, NUM_WRITERS); + for (i = 0; i < NUM_WRITERS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "FIFOWriter%d", i); + writerData[i].queue = &queue; + writerData[i].index = i; + writerData[i].lock_free = lock_free; + SDL_CreateThread(FIFO_Writer, name, &writerData[i]); + } + + /* Wait for the writers */ + while (SDL_AtomicGet(&writersRunning) > 0) { + SDL_SemWait(writersDone); + } + + /* Shut down the queue so readers exit */ + queue.active = SDL_FALSE; + + /* Wait for the readers */ + while (SDL_AtomicGet(&readersRunning) > 0) { + SDL_SemWait(readersDone); + } + + end = SDL_GetTicks(); + + SDL_DestroySemaphore(readersDone); + SDL_DestroySemaphore(writersDone); + + if (!lock_free) { + SDL_DestroyMutex(queue.mutex); + } + + SDL_Log("Finished in %f sec\n", (end - start) / 1000.f); + + SDL_Log("\n"); + for (i = 0; i < NUM_WRITERS; ++i) { + SDL_Log("Writer %d wrote %d events, had %d waits\n", i, EVENTS_PER_WRITER, writerData[i].waits); + } + SDL_Log("Writers wrote %d total events\n", NUM_WRITERS*EVENTS_PER_WRITER); + + /* Print a breakdown of which readers read messages from which writer */ + SDL_Log("\n"); + grand_total = 0; + for (i = 0; i < NUM_READERS; ++i) { + int total = 0; + for (j = 0; j < NUM_WRITERS; ++j) { + total += readerData[i].counters[j]; + } + grand_total += total; + SDL_Log("Reader %d read %d events, had %d waits\n", i, total, readerData[i].waits); + SDL_snprintf(textBuffer, sizeof(textBuffer), " { "); + for (j = 0; j < NUM_WRITERS; ++j) { + if (j > 0) { + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, ", "); + } + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, "%d", readerData[i].counters[j]); + } + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, " }\n"); + SDL_Log("%s", textBuffer); + } + SDL_Log("Readers read %d total events\n", grand_total); +} + +/* End FIFO test */ +/**************************************************************************/ + +int +main(int argc, char *argv[]) +{ + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + RunBasicTest(); + RunEpicTest(); +/* This test is really slow, so don't run it by default */ +#if 0 + RunFIFOTest(SDL_FALSE); +#endif + RunFIFOTest(SDL_TRUE); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testaudiohotplug.c b/Engine/lib/sdl/test/testaudiohotplug.c new file mode 100644 index 0000000000..e13868ec2e --- /dev/null +++ b/Engine/lib/sdl/test/testaudiohotplug.c @@ -0,0 +1,183 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to test hotplugging of audio devices */ + +#include "SDL_config.h" + +#include +#include + +#if HAVE_SIGNAL_H +#include +#endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +static int posindex = 0; +static Uint32 positions[64]; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +void SDLCALL +fillerup(void *_pos, Uint8 * stream, int len) +{ + Uint32 pos = *((Uint32 *) _pos); + Uint8 *waveptr; + int waveleft; + + /* Set up the pointers */ + waveptr = sound + pos; + waveleft = soundlen - pos; + + /* Go! */ + while (waveleft <= len) { + SDL_memcpy(stream, waveptr, waveleft); + stream += waveleft; + len -= waveleft; + waveptr = sound; + waveleft = soundlen; + pos = 0; + } + SDL_memcpy(stream, waveptr, len); + pos += len; + *((Uint32 *) _pos) = pos; +} + +static int done = 0; +void +poked(int sig) +{ + done = 1; +} + +static void +iteration() +{ + SDL_Event e; + SDL_AudioDeviceID dev; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + done = 1; + } else if (e.type == SDL_AUDIODEVICEADDED) { + const char *name = SDL_GetAudioDeviceName(e.adevice.which, 0); + SDL_Log("New %s audio device: %s\n", e.adevice.iscapture ? "capture" : "output", name); + if (!e.adevice.iscapture) { + positions[posindex] = 0; + spec.userdata = &positions[posindex++]; + spec.callback = fillerup; + dev = SDL_OpenAudioDevice(name, 0, &spec, NULL, 0); + if (!dev) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open '%s': %s\n", name, SDL_GetError()); + } else { + SDL_Log("Opened '%s' as %u\n", name, (unsigned int) dev); + SDL_PauseAudioDevice(dev, 0); + } + } + } else if (e.type == SDL_AUDIODEVICEREMOVED) { + dev = (SDL_AudioDeviceID) e.adevice.which; + SDL_Log("%s device %u removed.\n", e.adevice.iscapture ? "capture" : "output", (unsigned int) dev); + SDL_CloseAudioDevice(dev); + } + } +} + +#ifdef __EMSCRIPTEN__ +void +loop() +{ + if(done) + emscripten_cancel_main_loop(); + else + iteration(); +} +#endif + +int +main(int argc, char *argv[]) +{ + int i; + char filename[4096]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Some targets (Mac CoreAudio) need an event queue for audio hotplug, so make and immediately hide a window. */ + SDL_MinimizeWindow(SDL_CreateWindow("testaudiohotplug", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0)); + + if (argc > 1) { + SDL_strlcpy(filename, argv[1], sizeof(filename)); + } else { + SDL_strlcpy(filename, "sample.wav", sizeof(filename)); + } + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &spec, &sound, &soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + quit(1); + } + +#if HAVE_SIGNAL_H + /* Set the signals */ +#ifdef SIGHUP + signal(SIGHUP, poked); +#endif + signal(SIGINT, poked); +#ifdef SIGQUIT + signal(SIGQUIT, poked); +#endif + signal(SIGTERM, poked); +#endif /* HAVE_SIGNAL_H */ + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + SDL_Delay(100); + iteration(); + } +#endif + + /* Clean up on signal */ + SDL_FreeWAV(sound); + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testaudioinfo.c b/Engine/lib/sdl/test/testaudioinfo.c new file mode 100644 index 0000000000..53bf0f5e2f --- /dev/null +++ b/Engine/lib/sdl/test/testaudioinfo.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include "SDL.h" + +static void +print_devices(int iscapture) +{ + const char *typestr = ((iscapture) ? "capture" : "output"); + int n = SDL_GetNumAudioDevices(iscapture); + + SDL_Log("%s devices:\n", typestr); + + if (n == -1) + SDL_Log(" Driver can't detect specific %s devices.\n\n", typestr); + else if (n == 0) + SDL_Log(" No %s devices found.\n\n", typestr); + else { + int i; + for (i = 0; i < n; i++) { + SDL_Log(" %s\n", SDL_GetAudioDeviceName(i, iscapture)); + } + SDL_Log("\n"); + } +} + +int +main(int argc, char **argv) +{ + int n; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Print available audio drivers */ + n = SDL_GetNumAudioDrivers(); + if (n == 0) { + SDL_Log("No built-in audio drivers\n\n"); + } else { + int i; + SDL_Log("Built-in audio drivers:\n"); + for (i = 0; i < n; ++i) { + SDL_Log(" %s\n", SDL_GetAudioDriver(i)); + } + SDL_Log("\n"); + } + + SDL_Log("Using audio driver: %s\n\n", SDL_GetCurrentAudioDriver()); + + print_devices(0); + print_devices(1); + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testautomation.c b/Engine/lib/sdl/test/testautomation.c new file mode 100644 index 0000000000..eea74b3b86 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +#include "testautomation_suites.h" + +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +int +main(int argc, char *argv[]) +{ + int result; + int testIterations = 1; + Uint64 userExecKey = 0; + char *userRunSeed = NULL; + char *filter = NULL; + int i, done; + SDL_Event event; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + testIterations = SDL_atoi(argv[i + 1]); + if (testIterations < 1) testIterations = 1; + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--execKey") == 0) { + if (argv[i + 1]) { + SDL_sscanf(argv[i + 1], "%"SDL_PRIu64, (long long unsigned int *)&userExecKey); + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--seed") == 0) { + if (argv[i + 1]) { + userRunSeed = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--filter") == 0) { + if (argv[i + 1]) { + filter = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--iterations #] [--execKey #] [--seed string] [--filter suite_name|test_name]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + + i += consumed; + } + + /* Initialize common state */ + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + } + + /* Call Harness */ + result = SDLTest_RunSuites(testSuites, (const char *)userRunSeed, userExecKey, (const char *)filter, testIterations); + + /* Empty event queue */ + done = 0; + for (i=0; i<100; i++) { + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + SDL_Delay(10); + } + + /* Clean up */ + SDL_free(userRunSeed); + SDL_free(filter); + + /* Shutdown everything */ + quit(result); + return(result); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testautomation_audio.c b/Engine/lib/sdl/test/testautomation_audio.c new file mode 100644 index 0000000000..bef838dde0 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_audio.c @@ -0,0 +1,1038 @@ +/** + * Original code: automated SDL audio test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ + +/* quiet windows compiler warnings */ +#define _CRT_SECURE_NO_WARNINGS + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Fixture */ + +void +_audioSetUp(void *arg) +{ + /* Start SDL audio subsystem */ + int ret = SDL_InitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO)"); + SDLTest_AssertCheck(ret==0, "Check result from SDL_InitSubSystem(SDL_INIT_AUDIO)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +void +_audioTearDown(void *arg) +{ + /* Remove a possibly created file from SDL disk writer audio driver; ignore errors */ + remove("sdlaudio.raw"); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + + +/* Global counter for callback invocation */ +int _audio_testCallbackCounter; + +/* Global accumulator for total callback length */ +int _audio_testCallbackLength; + + +/* Test callback function */ +void _audio_testCallback(void *userdata, Uint8 *stream, int len) +{ + /* track that callback was called */ + _audio_testCallbackCounter++; + _audio_testCallbackLength += len; +} + + +/* Test case functions */ + +/** + * \brief Stop and restart audio subsystem + * + * \sa https://wiki.libsdl.org/SDL_QuitSubSystem + * \sa https://wiki.libsdl.org/SDL_InitSubSystem + */ +int audio_quitInitAudioSubSystem() +{ + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start and stop audio directly + * + * \sa https://wiki.libsdl.org/SDL_InitAudio + * \sa https://wiki.libsdl.org/SDL_QuitAudio + */ +int audio_initQuitAudio() +{ + int result; + int i, iMax; + const char* audioDriver; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + } + + /* NULL driver specification */ + audioDriver = NULL; + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit(NULL)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start, open, close and stop audio + * + * \sa https://wiki.libsdl.org/SDL_InitAudio + * \sa https://wiki.libsdl.org/SDL_OpenAudio + * \sa https://wiki.libsdl.org/SDL_CloseAudio + * \sa https://wiki.libsdl.org/SDL_QuitAudio + */ +int audio_initOpenCloseQuitAudio() +{ + int result, expectedResult; + int i, iMax, j, k; + const char* audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = 4096; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = AUDIO_F32SYS; + desired.channels = 2; + desired.samples = 2048; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + break; + } + + /* Call Open (maybe multiple times) */ + for (k=0; k <= j; k++) { + result = SDL_OpenAudio(&desired, NULL); + SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL), call %d", j, k+1); + expectedResult = (k==0) ? 0 : -1; + SDLTest_AssertCheck(result == expectedResult, "Verify return value; expected: %d, got: %d", expectedResult, result); + } + + /* Call Close (maybe multiple times) */ + for (k=0; k <= j; k++) { + SDL_CloseAudio(); + SDLTest_AssertPass("Call to SDL_CloseAudio(), call %d", k+1); + } + + /* Call Quit (maybe multiple times) */ + for (k=0; k <= j; k++) { + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit(), call %d", k+1); + } + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Pause and unpause audio + * + * \sa https://wiki.libsdl.org/SDL_PauseAudio + */ +int audio_pauseUnpauseAudio() +{ + int result; + int i, iMax, j, k, l; + int totalDelay; + int pause_on; + int originalCounter; + const char* audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = 4096; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = AUDIO_F32SYS; + desired.channels = 2; + desired.samples = 2048; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + break; + } + + /* Call Open */ + result = SDL_OpenAudio(&desired, NULL); + SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL)", j); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0 got: %d", result); + + /* Start and stop audio multiple times */ + for (l=0; l<3; l++) { + SDLTest_Log("Pause/Unpause iteration: %d", l+1); + + /* Reset callback counters */ + _audio_testCallbackCounter = 0; + _audio_testCallbackLength = 0; + + /* Un-pause audio to start playing (maybe multiple times) */ + pause_on = 0; + for (k=0; k <= j; k++) { + SDL_PauseAudio(pause_on); + SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); + } + + /* Wait for callback */ + totalDelay = 0; + do { + SDL_Delay(10); + totalDelay += 10; + } + while (_audio_testCallbackCounter == 0 && totalDelay < 1000); + SDLTest_AssertCheck(_audio_testCallbackCounter > 0, "Verify callback counter; expected: >0 got: %d", _audio_testCallbackCounter); + SDLTest_AssertCheck(_audio_testCallbackLength > 0, "Verify callback length; expected: >0 got: %d", _audio_testCallbackLength); + + /* Pause audio to stop playing (maybe multiple times) */ + for (k=0; k <= j; k++) { + pause_on = (k==0) ? 1 : SDLTest_RandomIntegerInRange(99, 9999); + SDL_PauseAudio(pause_on); + SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); + } + + /* Ensure callback is not called again */ + originalCounter = _audio_testCallbackCounter; + SDL_Delay(totalDelay + 10); + SDLTest_AssertCheck(originalCounter == _audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, _audio_testCallbackCounter); + } + + /* Call Close */ + SDL_CloseAudio(); + SDLTest_AssertPass("Call to SDL_CloseAudio()"); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Enumerate and name available audio devices (output and capture). + * + * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices + * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName + */ +int audio_enumerateAndNameAudioDevices() +{ + int t, tt; + int i, n, nn; + const char *name, *nameAgain; + + /* Iterate over types: t=0 output device, t=1 input/capture device */ + for (t=0; t<2; t++) { + + /* Get number of devices. */ + n = SDL_GetNumAudioDevices(t); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(%i)", t); + SDLTest_Log("Number of %s devices < 0, reported as %i", (t) ? "capture" : "output", n); + SDLTest_AssertCheck(n >= 0, "Validate result is >= 0, got: %i", n); + + /* Variation of non-zero type */ + if (t==1) { + tt = t + SDLTest_RandomIntegerInRange(1,10); + nn = SDL_GetNumAudioDevices(tt); + SDLTest_AssertCheck(n==nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", tt, n, nn); + nn = SDL_GetNumAudioDevices(-tt); + SDLTest_AssertCheck(n==nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", -tt, n, nn); + } + + /* List devices. */ + if (n>0) { + for (i=0; i0) && (no>nc) && (t==1)) { + i = no-1; + name = SDL_GetAudioDeviceName(i, t); + SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t); + SDLTest_AssertCheck(name == NULL, "Check SDL_GetAudioDeviceName(%i, %i) result, expected: NULL, got: %s", i, t, (name == NULL) ? "NULL" : name); + } + } + + return TEST_COMPLETED; +} + + +/** + * \brief Checks available audio driver names. + * + * \sa https://wiki.libsdl.org/SDL_GetNumAudioDrivers + * \sa https://wiki.libsdl.org/SDL_GetAudioDriver + */ +int audio_printAudioDrivers() +{ + int i, n; + const char *name; + + /* Get number of drivers */ + n = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(n>=0, "Verify number of audio drivers >= 0, got: %i", n); + + /* List drivers. */ + if (n>0) + { + for (i=0; i spec1)"); + SDLTest_AssertCheck(result == 0, "Verify result value; expected: 0, got: %i", result); + + /* Typical conversion */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(spec1 ==> spec2)"); + SDLTest_AssertCheck(result == 1, "Verify result value; expected: 1, got: %i", result); + + /* All source conversions with random conversion targets, allow 'null' conversions */ + for (i = 0; i < _numAudioFormats; i++) { + for (j = 0; j < _numAudioChannels; j++) { + for (k = 0; k < _numAudioFrequencies; k++) { + spec1.format = _audioFormats[i]; + spec1.channels = _audioChannels[j]; + spec1.freq = _audioFrequencies[k]; + ii = SDLTest_RandomIntegerInRange(0, _numAudioFormats - 1); + jj = SDLTest_RandomIntegerInRange(0, _numAudioChannels - 1); + kk = SDLTest_RandomIntegerInRange(0, _numAudioFrequencies - 1); + spec2.format = _audioFormats[ii]; + spec2.channels = _audioChannels[jj]; + spec2.freq = _audioFrequencies[kk]; + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, _audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, _audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(result == 0 || result == 1, "Verify result value; expected: 0 or 1, got: %i", result); + if (result<0) { + SDLTest_LogError("%s", SDL_GetError()); + } else { + SDLTest_AssertCheck(cvt.len_mult > 0, "Verify that cvt.len_mult value; expected: >0, got: %i", cvt.len_mult); + } + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Checkes calls with invalid input to SDL_BuildAudioCVT + * + * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT + */ +int audio_buildAudioCVTNegative() +{ + const char *expectedError = "Parameter 'cvt' is invalid"; + const char *error; + int result; + SDL_AudioCVT cvt; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int i; + char message[256]; + + /* Valid format */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* NULL input for CVT buffer */ + result = SDL_BuildAudioCVT((SDL_AudioCVT *)NULL, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(NULL,...)"); + SDLTest_AssertCheck(result == -1, "Verify result value; expected: -1, got: %i", result); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + /* Invalid conversions */ + for (i = 1; i < 64; i++) { + /* Valid format to start with */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Set various invalid format inputs */ + SDL_strlcpy(message, "Invalid: ", 256); + if (i & 1) { + SDL_strlcat(message, " spec1.format", 256); + spec1.format = 0; + } + if (i & 2) { + SDL_strlcat(message, " spec1.channels", 256); + spec1.channels = 0; + } + if (i & 4) { + SDL_strlcat(message, " spec1.freq", 256); + spec1.freq = 0; + } + if (i & 8) { + SDL_strlcat(message, " spec2.format", 256); + spec2.format = 0; + } + if (i & 16) { + SDL_strlcat(message, " spec2.channels", 256); + spec2.channels = 0; + } + if (i & 32) { + SDL_strlcat(message, " spec2.freq", 256); + spec2.freq = 0; + } + SDLTest_Log("%s", message); + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(spec1 ==> spec2)"); + SDLTest_AssertCheck(result == -1, "Verify result value; expected: -1, got: %i", result); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL && error[0] != '\0', "Validate that error message was not NULL or empty"); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Checks current audio status. + * + * \sa https://wiki.libsdl.org/SDL_GetAudioStatus + */ +int audio_getAudioStatus() +{ + SDL_AudioStatus result; + + /* Check current audio status */ + result = SDL_GetAudioStatus(); + SDLTest_AssertPass("Call to SDL_GetAudioStatus()"); + SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED, + "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i", + SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result); + + return TEST_COMPLETED; +} + + + +/** + * \brief Opens, checks current audio status, and closes a device. + * + * \sa https://wiki.libsdl.org/SDL_GetAudioStatus + */ +int audio_openCloseAndGetAudioStatus() +{ + SDL_AudioStatus result; + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >=2, got: %i", id); + if (id > 1) { + + /* Check device audio status */ + result = SDL_GetAudioDeviceStatus(id); + SDLTest_AssertPass("Call to SDL_GetAudioDeviceStatus()"); + SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED, + "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i", + SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + +/** + * \brief Locks and unlocks open audio device. + * + * \sa https://wiki.libsdl.org/SDL_LockAudioDevice + * \sa https://wiki.libsdl.org/SDL_UnlockAudioDevice + */ +int audio_lockUnlockOpenAudioDevice() +{ + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >=2, got: %i", id); + if (id > 1) { + /* Lock to protect callback */ + SDL_LockAudioDevice(id); + SDLTest_AssertPass("SDL_LockAudioDevice(%i)", id); + + /* Simulate callback processing */ + SDL_Delay(10); + SDLTest_Log("Simulate callback processing - delay"); + + /* Unlock again */ + SDL_UnlockAudioDevice(id); + SDLTest_AssertPass("SDL_UnlockAudioDevice(%i)", id); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + + +/** + * \brief Convert audio using various conversion structures + * + * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT + * \sa https://wiki.libsdl.org/SDL_ConvertAudio + */ +int audio_convertAudio() +{ + int result; + SDL_AudioCVT cvt; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int c; + char message[128]; + int i, ii, j, jj, k, kk, l, ll; + + /* Iterate over bitmask that determines which parameters are modified in the conversion */ + for (c = 1; c < 8; c++) { + SDL_strlcpy(message, "Changing:", 128); + if (c & 1) { + SDL_strlcat(message, " Format", 128); + } + if (c & 2) { + SDL_strlcat(message, " Channels", 128); + } + if (c & 4) { + SDL_strlcat(message, " Frequencies", 128); + } + SDLTest_Log("%s", message); + /* All source conversions with random conversion targets */ + for (i = 0; i < _numAudioFormats; i++) { + for (j = 0; j < _numAudioChannels; j++) { + for (k = 0; k < _numAudioFrequencies; k++) { + spec1.format = _audioFormats[i]; + spec1.channels = _audioChannels[j]; + spec1.freq = _audioFrequencies[k]; + + /* Ensure we have a different target format */ + do { + if (c & 1) { + ii = SDLTest_RandomIntegerInRange(0, _numAudioFormats - 1); + } else { + ii = 1; + } + if (c & 2) { + jj = SDLTest_RandomIntegerInRange(0, _numAudioChannels - 1); + } else { + jj= j; + } + if (c & 4) { + kk = SDLTest_RandomIntegerInRange(0, _numAudioFrequencies - 1); + } else { + kk = k; + } + } while ((i == ii) && (j == jj) && (k == kk)); + spec2.format = _audioFormats[ii]; + spec2.channels = _audioChannels[jj]; + spec2.freq = _audioFrequencies[kk]; + + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, _audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, _audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(result == 1, "Verify result value; expected: 1, got: %i", result); + if (result != 1) { + SDLTest_LogError("%s", SDL_GetError()); + } else { + SDLTest_AssertCheck(cvt.len_mult > 0, "Verify that cvt.len_mult value; expected: >0, got: %i", cvt.len_mult); + if (cvt.len_mult < 1) return TEST_ABORTED; + + /* Create some random data to convert */ + l = 64; + ll = l * cvt.len_mult; + SDLTest_Log("Creating dummy sample buffer of %i length (%i bytes)", l, ll); + cvt.len = l; + cvt.buf = (Uint8 *)SDL_malloc(ll); + SDLTest_AssertCheck(cvt.buf != NULL, "Check data buffer to convert is not NULL"); + if (cvt.buf == NULL) return TEST_ABORTED; + + /* Convert the data */ + result = SDL_ConvertAudio(&cvt); + SDLTest_AssertPass("Call to SDL_ConvertAudio()"); + SDLTest_AssertCheck(result == 0, "Verify result value; expected: 0; got: %i", result); + SDLTest_AssertCheck(cvt.buf != NULL, "Verify conversion buffer is not NULL"); + SDLTest_AssertCheck(cvt.len_ratio > 0.0, "Verify conversion length ratio; expected: >0; got: %f", cvt.len_ratio); + + /* Free converted buffer */ + SDL_free(cvt.buf); + cvt.buf = NULL; + } + } + } + } + } + + return TEST_COMPLETED; +} + + +/** + * \brief Opens, checks current connected status, and closes a device. + * + * \sa https://wiki.libsdl.org/SDL_AudioDeviceConnected + */ +int audio_openCloseAudioDeviceConnected() +{ + int result = -1; + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >1, got: %i", id); + if (id > 1) { + +/* TODO: enable test code when function is available in SDL2 */ + +#ifdef AUDIODEVICECONNECTED_DEFINED + /* Get connected status */ + result = SDL_AudioDeviceConnected(id); + SDLTest_AssertPass("Call to SDL_AudioDeviceConnected()"); +#endif + SDLTest_AssertCheck(result == 1, "Verify returned value; expected: 1; got: %i", result); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + + + +/* ================= Test Case References ================== */ + +/* Audio test cases */ +static const SDLTest_TestCaseReference audioTest1 = + { (SDLTest_TestCaseFp)audio_enumerateAndNameAudioDevices, "audio_enumerateAndNameAudioDevices", "Enumerate and name available audio devices (output and capture)", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest2 = + { (SDLTest_TestCaseFp)audio_enumerateAndNameAudioDevicesNegativeTests, "audio_enumerateAndNameAudioDevicesNegativeTests", "Negative tests around enumeration and naming of audio devices.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest3 = + { (SDLTest_TestCaseFp)audio_printAudioDrivers, "audio_printAudioDrivers", "Checks available audio driver names.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest4 = + { (SDLTest_TestCaseFp)audio_printCurrentAudioDriver, "audio_printCurrentAudioDriver", "Checks current audio driver name with initialized audio.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest5 = + { (SDLTest_TestCaseFp)audio_buildAudioCVT, "audio_buildAudioCVT", "Builds various audio conversion structures.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest6 = + { (SDLTest_TestCaseFp)audio_buildAudioCVTNegative, "audio_buildAudioCVTNegative", "Checks calls with invalid input to SDL_BuildAudioCVT", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest7 = + { (SDLTest_TestCaseFp)audio_getAudioStatus, "audio_getAudioStatus", "Checks current audio status.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest8 = + { (SDLTest_TestCaseFp)audio_openCloseAndGetAudioStatus, "audio_openCloseAndGetAudioStatus", "Opens and closes audio device and get audio status.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest9 = + { (SDLTest_TestCaseFp)audio_lockUnlockOpenAudioDevice, "audio_lockUnlockOpenAudioDevice", "Locks and unlocks an open audio device.", TEST_ENABLED }; + +/* TODO: enable test when SDL_ConvertAudio segfaults on cygwin have been fixed. */ +/* For debugging, test case can be run manually using --filter audio_convertAudio */ + +static const SDLTest_TestCaseReference audioTest10 = + { (SDLTest_TestCaseFp)audio_convertAudio, "audio_convertAudio", "Convert audio using available formats.", TEST_DISABLED }; + +/* TODO: enable test when SDL_AudioDeviceConnected has been implemented. */ + +static const SDLTest_TestCaseReference audioTest11 = + { (SDLTest_TestCaseFp)audio_openCloseAudioDeviceConnected, "audio_openCloseAudioDeviceConnected", "Opens and closes audio device and get connected status.", TEST_DISABLED }; + +static const SDLTest_TestCaseReference audioTest12 = + { (SDLTest_TestCaseFp)audio_quitInitAudioSubSystem, "audio_quitInitAudioSubSystem", "Quit and re-init audio subsystem.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest13 = + { (SDLTest_TestCaseFp)audio_initQuitAudio, "audio_initQuitAudio", "Init and quit audio drivers directly.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest14 = + { (SDLTest_TestCaseFp)audio_initOpenCloseQuitAudio, "audio_initOpenCloseQuitAudio", "Cycle through init, open, close and quit with various audio specs.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest15 = + { (SDLTest_TestCaseFp)audio_pauseUnpauseAudio, "audio_pauseUnpauseAudio", "Pause and Unpause audio for various audio specs while testing callback.", TEST_ENABLED }; + +/* Sequence of Audio test cases */ +static const SDLTest_TestCaseReference *audioTests[] = { + &audioTest1, &audioTest2, &audioTest3, &audioTest4, &audioTest5, &audioTest6, + &audioTest7, &audioTest8, &audioTest9, &audioTest10, &audioTest11, + &audioTest12, &audioTest13, &audioTest14, &audioTest15, NULL +}; + +/* Audio test suite (global) */ +SDLTest_TestSuiteReference audioTestSuite = { + "Audio", + _audioSetUp, + audioTests, + _audioTearDown +}; diff --git a/Engine/lib/sdl/test/testautomation_clipboard.c b/Engine/lib/sdl/test/testautomation_clipboard.c new file mode 100644 index 0000000000..f943ffee79 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_clipboard.c @@ -0,0 +1,184 @@ +/** + * New/updated tests: aschiffler at ferzkopp dot net + */ + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * \brief Check call to SDL_HasClipboardText + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasClipboardText + */ +int +clipboard_testHasClipboardText(void *arg) +{ + SDL_bool result; + result = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetClipboardText + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetClipboardText + */ +int +clipboard_testGetClipboardText(void *arg) +{ + char *charResult; + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + + SDL_free(charResult); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_SetClipboardText + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetClipboardText + */ +int +clipboard_testSetClipboardText(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + int result; + result = SDL_SetClipboardText((const char *)text); + SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded"); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_SetClipboardText result, expected 0, got %i", + result); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'", + textRef, text); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + + return TEST_COMPLETED; +} + +/** + * \brief End-to-end test of SDL_xyzClipboardText functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasClipboardText + * http://wiki.libsdl.org/moin.cgi/SDL_GetClipboardText + * http://wiki.libsdl.org/moin.cgi/SDL_SetClipboardText + */ +int +clipboard_testClipboardTextFunctions(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + SDL_bool boolResult; + int intResult; + char *charResult; + + /* Clear clipboard text state */ + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + if (boolResult == SDL_TRUE) { + intResult = SDL_SetClipboardText((const char *)NULL); + SDLTest_AssertPass("Call to SDL_SetClipboardText(NULL) succeeded"); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDL_free(charResult); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + SDLTest_AssertCheck( + boolResult == SDL_FALSE, + "Verify SDL_HasClipboardText returned SDL_FALSE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + } + + /* Empty clipboard */ + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDLTest_AssertCheck( + charResult != NULL, + "Verify SDL_GetClipboardText did not return NULL"); + SDLTest_AssertCheck( + charResult[0] == '\0', + "Verify SDL_GetClipboardText returned string with length 0, got length %i", + SDL_strlen(charResult)); + intResult = SDL_SetClipboardText((const char *)text); + SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded"); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'", + textRef, text); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + SDLTest_AssertCheck( + boolResult == SDL_TRUE, + "Verify SDL_HasClipboardText returned SDL_TRUE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + SDL_free(charResult); + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDLTest_AssertCheck( + SDL_strcmp(textRef, charResult) == 0, + "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'", + textRef, charResult); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + SDL_free(charResult); + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* Clipboard test cases */ +static const SDLTest_TestCaseReference clipboardTest1 = + { (SDLTest_TestCaseFp)clipboard_testHasClipboardText, "clipboard_testHasClipboardText", "Check call to SDL_HasClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest2 = + { (SDLTest_TestCaseFp)clipboard_testGetClipboardText, "clipboard_testGetClipboardText", "Check call to SDL_GetClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest3 = + { (SDLTest_TestCaseFp)clipboard_testSetClipboardText, "clipboard_testSetClipboardText", "Check call to SDL_SetClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest4 = + { (SDLTest_TestCaseFp)clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED }; + +/* Sequence of Clipboard test cases */ +static const SDLTest_TestCaseReference *clipboardTests[] = { + &clipboardTest1, &clipboardTest2, &clipboardTest3, &clipboardTest4, NULL +}; + +/* Clipboard test suite (global) */ +SDLTest_TestSuiteReference clipboardTestSuite = { + "Clipboard", + NULL, + clipboardTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_events.c b/Engine/lib/sdl/test/testautomation_events.c new file mode 100644 index 0000000000..f9eb5bb9e8 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_events.c @@ -0,0 +1,201 @@ +/** + * Events test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Flag indicating if the userdata should be checked */ +int _userdataCheck = 0; + +/* Userdata value to check */ +int _userdataValue = 0; + +/* Flag indicating that the filter was called */ +int _eventFilterCalled = 0; + +/* Userdata values for event */ +int _userdataValue1 = 1; +int _userdataValue2 = 2; + +/* Event filter that sets some flags and optionally checks userdata */ +int _events_sampleNullEventFilter(void *userdata, SDL_Event *event) +{ + _eventFilterCalled = 1; + + if (_userdataCheck != 0) { + SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL"); + if (userdata != NULL) { + SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i", _userdataValue, *(int *)userdata); + } + } + + return 0; +} + +/** + * @brief Test pumping and peeking events. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_PumpEvents + * @sa http://wiki.libsdl.org/moin.cgi/SDL_PollEvent + */ +int +events_pushPumpAndPollUserevent(void *arg) +{ + SDL_Event event1; + SDL_Event event2; + int result; + + /* Create user event */ + event1.type = SDL_USEREVENT; + event1.user.code = SDLTest_RandomSint32(); + event1.user.data1 = (void *)&_userdataValue1; + event1.user.data2 = (void *)&_userdataValue2; + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event1); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Poll for user event */ + result = SDL_PollEvent(&event2); + SDLTest_AssertPass("Call to SDL_PollEvent()"); + SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Adds and deletes an event watch function with NULL userdata + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch + * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch + * + */ +int +events_addDelEventWatch(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_USEREVENT; + event.user.code = SDLTest_RandomSint32();; + event.user.data1 = (void *)&_userdataValue1; + event.user.data2 = (void *)&_userdataValue2; + + /* Disable userdata check */ + _userdataCheck = 0; + + /* Reset event filter call tracker */ + _eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(_events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(_events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + _eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + +/** + * @brief Adds and deletes an event watch function with userdata + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch + * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch + * + */ +int +events_addDelEventWatchWithUserdata(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_USEREVENT; + event.user.code = SDLTest_RandomSint32();; + event.user.data1 = (void *)&_userdataValue1; + event.user.data2 = (void *)&_userdataValue2; + + /* Enable userdata check and set a value to check */ + _userdataCheck = 1; + _userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024); + + /* Reset event filter call tracker */ + _eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + _eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* Events test cases */ +static const SDLTest_TestCaseReference eventsTest1 = + { (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED }; + +static const SDLTest_TestCaseReference eventsTest2 = + { (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED }; + +static const SDLTest_TestCaseReference eventsTest3 = + { (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED }; + +/* Sequence of Events test cases */ +static const SDLTest_TestCaseReference *eventsTests[] = { + &eventsTest1, &eventsTest2, &eventsTest3, NULL +}; + +/* Events test suite (global) */ +SDLTest_TestSuiteReference eventsTestSuite = { + "Events", + NULL, + eventsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_hints.c b/Engine/lib/sdl/test/testautomation_hints.c new file mode 100644 index 0000000000..a6beb88d76 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_hints.c @@ -0,0 +1,168 @@ +/** + * Hints test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + + +const int _numHintsEnum = 25; +char* _HintsEnum[] = + { + SDL_HINT_ACCELEROMETER_AS_JOYSTICK, + SDL_HINT_FRAMEBUFFER_ACCELERATION, + SDL_HINT_GAMECONTROLLERCONFIG, + SDL_HINT_GRAB_KEYBOARD, + SDL_HINT_IDLE_TIMER_DISABLED, + SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK, + SDL_HINT_MOUSE_RELATIVE_MODE_WARP, + SDL_HINT_ORIENTATIONS, + SDL_HINT_RENDER_DIRECT3D_THREADSAFE, + SDL_HINT_RENDER_DRIVER, + SDL_HINT_RENDER_OPENGL_SHADERS, + SDL_HINT_RENDER_SCALE_QUALITY, + SDL_HINT_RENDER_VSYNC, + SDL_HINT_TIMER_RESOLUTION, + SDL_HINT_VIDEO_ALLOW_SCREENSAVER, + SDL_HINT_VIDEO_HIGHDPI_DISABLED, + SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, + SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, + SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, + SDL_HINT_VIDEO_WIN_D3DCOMPILER, + SDL_HINT_VIDEO_X11_XINERAMA, + SDL_HINT_VIDEO_X11_XRANDR, + SDL_HINT_VIDEO_X11_XVIDMODE, + SDL_HINT_XINPUT_ENABLED, + }; +char* _HintsVerbose[] = + { + "SDL_HINT_ACCELEROMETER_AS_JOYSTICK", + "SDL_HINT_FRAMEBUFFER_ACCELERATION", + "SDL_HINT_GAMECONTROLLERCONFIG", + "SDL_HINT_GRAB_KEYBOARD", + "SDL_HINT_IDLE_TIMER_DISABLED", + "SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS", + "SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK", + "SDL_HINT_MOUSE_RELATIVE_MODE_WARP", + "SDL_HINT_ORIENTATIONS", + "SDL_HINT_RENDER_DIRECT3D_THREADSAFE", + "SDL_HINT_RENDER_DRIVER", + "SDL_HINT_RENDER_OPENGL_SHADERS", + "SDL_HINT_RENDER_SCALE_QUALITY", + "SDL_HINT_RENDER_VSYNC", + "SDL_HINT_TIMER_RESOLUTION", + "SDL_HINT_VIDEO_ALLOW_SCREENSAVER", + "SDL_HINT_VIDEO_HIGHDPI_DISABLED", + "SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES", + "SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS", + "SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT", + "SDL_HINT_VIDEO_WIN_D3DCOMPILER", + "SDL_HINT_VIDEO_X11_XINERAMA", + "SDL_HINT_VIDEO_X11_XRANDR", + "SDL_HINT_VIDEO_X11_XVIDMODE", + "SDL_HINT_XINPUT_ENABLED" + }; + + +/* Test case functions */ + +/** + * @brief Call to SDL_GetHint + */ +int +hints_getHint(void *arg) +{ + char *result1; + char *result2; + int i; + + for (i=0; i<_numHintsEnum; i++) { + result1 = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char*)_HintsEnum[i]); + result2 = (char *)SDL_GetHint((char *)_HintsVerbose[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]); + SDLTest_AssertCheck( + (result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0), + "Verify returned values are equal; got: result1='%s' result2='%s", + (result1 == NULL) ? "null" : result1, + (result2 == NULL) ? "null" : result2); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_SetHint + */ +int +hints_setHint(void *arg) +{ + char *originalValue; + char *value; + char *testValue; + SDL_bool result; + int i, j; + + /* Create random values to set */ + value = SDLTest_RandomAsciiStringOfSize(10); + + for (i=0; i<_numHintsEnum; i++) { + /* Capture current value */ + originalValue = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s)", (char*)_HintsEnum[i]); + + /* Set value (twice) */ + for (j=1; j<=2; j++) { + result = SDL_SetHint((char*)_HintsEnum[i], value); + SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", (char*)_HintsEnum[i], value, j); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + testValue = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]); + SDLTest_AssertCheck( + (SDL_strcmp(value, testValue) == 0), + "Verify returned value equals set value; got: testValue='%s' value='%s", + (testValue == NULL) ? "null" : testValue, + value); + } + + /* Reset original value */ + result = SDL_SetHint((char*)_HintsEnum[i], originalValue); + SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", (char*)_HintsEnum[i]); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + } + + SDL_free(value); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Hints test cases */ +static const SDLTest_TestCaseReference hintsTest1 = + { (SDLTest_TestCaseFp)hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED }; + +static const SDLTest_TestCaseReference hintsTest2 = + { (SDLTest_TestCaseFp)hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED }; + +/* Sequence of Hints test cases */ +static const SDLTest_TestCaseReference *hintsTests[] = { + &hintsTest1, &hintsTest2, NULL +}; + +/* Hints test suite (global) */ +SDLTest_TestSuiteReference hintsTestSuite = { + "Hints", + NULL, + hintsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_keyboard.c b/Engine/lib/sdl/test/testautomation_keyboard.c new file mode 100644 index 0000000000..453832e256 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_keyboard.c @@ -0,0 +1,713 @@ +/** + * Keyboard test suite + */ + +#include +#include + +#include "SDL_config.h" +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * @brief Check call to SDL_GetKeyboardState with and without numkeys reference. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyboardState + */ +int +keyboard_getKeyboardState(void *arg) +{ + int numkeys; + Uint8 *state; + + /* Case where numkeys pointer is NULL */ + state = (Uint8 *)SDL_GetKeyboardState(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(NULL)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + + /* Case where numkeys pointer is not NULL */ + numkeys = -1; + state = (Uint8 *)SDL_GetKeyboardState(&numkeys); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(&numkeys)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + SDLTest_AssertCheck(numkeys >= 0, "Validate that value of numkeys is >= 0, got: %i", numkeys); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyboardFocus + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyboardFocus + */ +int +keyboard_getKeyboardFocus(void *arg) +{ + SDL_Window* window; + + /* Call, but ignore return value */ + window = SDL_GetKeyboardFocus(); + SDLTest_AssertPass("Call to SDL_GetKeyboardFocus()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyFromName for known, unknown and invalid name. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyFromName + */ +int +keyboard_getKeyFromName(void *arg) +{ + SDL_Keycode result; + + /* Case where Key is known, 1 character input */ + result = SDL_GetKeyFromName("A"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/single)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %i", SDLK_a, result); + + /* Case where Key is known, 2 character input */ + result = SDL_GetKeyFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/double)"); + SDLTest_AssertCheck(result == SDLK_F1, "Verify result from call, expected: %i, got: %i", SDLK_F1, result); + + /* Case where Key is known, 3 character input */ + result = SDL_GetKeyFromName("End"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/triple)"); + SDLTest_AssertCheck(result == SDLK_END, "Verify result from call, expected: %i, got: %i", SDLK_END, result); + + /* Case where Key is known, 4 character input */ + result = SDL_GetKeyFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/quad)"); + SDLTest_AssertCheck(result == SDLK_FIND, "Verify result from call, expected: %i, got: %i", SDLK_FIND, result); + + /* Case where Key is known, multiple character input */ + result = SDL_GetKeyFromName("AudioStop"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/multi)"); + SDLTest_AssertCheck(result == SDLK_AUDIOSTOP, "Verify result from call, expected: %i, got: %i", SDLK_AUDIOSTOP, result); + + /* Case where Key is unknown */ + result = SDL_GetKeyFromName("NotThere"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(unknown)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + /* Case where input is NULL/invalid */ + result = SDL_GetKeyFromName(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(NULL)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +void +_checkInvalidScancodeError() +{ + const char *expectedError = "Parameter 'scancode' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Check call to SDL_GetKeyFromScancode + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyFromScancode + */ +int +keyboard_getKeyFromScancode(void *arg) +{ + SDL_Keycode result; + + /* Case where input is valid */ + result = SDL_GetKeyFromScancode(SDL_SCANCODE_A); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(valid)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %i", SDLK_a, result); + + /* Case where input is zero */ + result = SDL_GetKeyFromScancode(0); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(0)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Case where input is invalid (too small) */ + result = SDL_GetKeyFromScancode(-999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(-999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + _checkInvalidScancodeError(); + + /* Case where input is invalid (too big) */ + result = SDL_GetKeyFromScancode(999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + _checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyName + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyName + */ +int +keyboard_getKeyName(void *arg) +{ + char *result; + char *expected; + + /* Case where key has a 1 character name */ + expected = "3"; + result = (char *)SDL_GetKeyName(SDLK_3); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 2 character name */ + expected = "F1"; + result = (char *)SDL_GetKeyName(SDLK_F1); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 3 character name */ + expected = "Cut"; + result = (char *)SDL_GetKeyName(SDLK_CUT); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 4 character name */ + expected = "Down"; + result = (char *)SDL_GetKeyName(SDLK_DOWN); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name */ + expected = "BrightnessUp"; + result = (char *)SDL_GetKeyName(SDLK_BRIGHTNESSUP); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name with space */ + expected = "Keypad MemStore"; + result = (char *)SDL_GetKeyName(SDLK_KP_MEMSTORE); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + return TEST_COMPLETED; +} + +/** + * @brief SDL_GetScancodeName negative cases + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeName + */ +int +keyboard_getScancodeNameNegative(void *arg) +{ + SDL_Scancode scancode; + char *result; + char *expected = ""; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Out-of-bounds scancode */ + scancode = (SDL_Scancode)SDL_NUM_SCANCODES; + result = (char *)SDL_GetScancodeName(scancode); + SDLTest_AssertPass("Call to SDL_GetScancodeName(%d/large)", scancode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + _checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * @brief SDL_GetKeyName negative cases + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyName + */ +int +keyboard_getKeyNameNegative(void *arg) +{ + SDL_Keycode keycode; + char *result; + char *expected = ""; + + /* Unknown keycode */ + keycode = SDLK_UNKNOWN; + result = (char *)SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%d/unknown)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Negative keycode */ + keycode = (SDL_Keycode)SDLTest_RandomIntegerInRange(-255, -1); + result = (char *)SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%d/negative)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + _checkInvalidScancodeError(); + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetModState and SDL_SetModState + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetModState + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetModState + */ +int +keyboard_getSetModState(void *arg) +{ + SDL_Keymod result; + SDL_Keymod currentState; + SDL_Keymod newState; + SDL_Keymod allStates = + KMOD_NONE | + KMOD_LSHIFT | + KMOD_RSHIFT | + KMOD_LCTRL | + KMOD_RCTRL | + KMOD_LALT | + KMOD_RALT | + KMOD_LGUI | + KMOD_RGUI | + KMOD_NUM | + KMOD_CAPS | + KMOD_MODE | + KMOD_RESERVED; + + /* Get state, cache for later reset */ + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result >=0 && result <= allStates, "Verify result from call is valid, expected: 0 <= result <= %i, got: %i", allStates, result); + currentState = result; + + /* Set random state */ + newState = SDLTest_RandomIntegerInRange(0, allStates); + SDL_SetModState(newState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", newState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == newState, "Verify result from call is valid, expected: %i, got: %i", newState, result); + + /* Set zero state */ + SDL_SetModState(0); + SDLTest_AssertPass("Call to SDL_SetModState(0)"); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == 0, "Verify result from call is valid, expected: 0, got: %i", result); + + /* Revert back to cached current state if needed */ + if (currentState != 0) { + SDL_SetModState(currentState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", currentState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == currentState, "Verify result from call is valid, expected: %i, got: %i", currentState, result); + } + + return TEST_COMPLETED; +} + + +/** + * @brief Check call to SDL_StartTextInput and SDL_StopTextInput + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_StartTextInput + * @sa http://wiki.libsdl.org/moin.cgi/SDL_StopTextInput + */ +int +keyboard_startStopTextInput(void *arg) +{ + /* Start-Stop */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + /* Stop-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Start-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Stop-Stop */ + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + return TEST_COMPLETED; +} + +/* Internal function to test SDL_SetTextInputRect */ +void _testSetTextInputRect(SDL_Rect refRect) +{ + SDL_Rect testRect; + + testRect = refRect; + SDL_SetTextInputRect(&testRect); + SDLTest_AssertPass("Call to SDL_SetTextInputRect with refRect(x:%i,y:%i,w:%i,h:%i)", refRect.x, refRect.y, refRect.w, refRect.h); + SDLTest_AssertCheck( + (refRect.x == testRect.x) && (refRect.y == testRect.y) && (refRect.w == testRect.w) && (refRect.h == testRect.h), + "Check that input data was not modified, expected: x:%i,y:%i,w:%i,h:%i, got: x:%i,y:%i,w:%i,h:%i", + refRect.x, refRect.y, refRect.w, refRect.h, + testRect.x, testRect.y, testRect.w, testRect.h); +} + +/** + * @brief Check call to SDL_SetTextInputRect + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetTextInputRect + */ +int +keyboard_setTextInputRect(void *arg) +{ + SDL_Rect refRect; + + /* Normal visible refRect, origin inside */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50);; + refRect.y = SDLTest_RandomIntegerInRange(1, 50);; + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + _testSetTextInputRect(refRect); + + /* Normal visible refRect, origin 0,0 */ + refRect.x = 0; + refRect.y = 0; + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + _testSetTextInputRect(refRect); + + /* 1Pixel refRect */ + refRect.x = SDLTest_RandomIntegerInRange(10, 50);; + refRect.y = SDLTest_RandomIntegerInRange(10, 50);; + refRect.w = 1; + refRect.h = 1; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 1; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 1; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 0; + refRect.y = 0; + refRect.w = 0; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* negative refRect */ + refRect.x = SDLTest_RandomIntegerInRange(-200, -100);; + refRect.y = SDLTest_RandomIntegerInRange(-200, -100);; + refRect.w = 50; + refRect.h = 50; + _testSetTextInputRect(refRect); + + /* oversized refRect */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50);; + refRect.y = SDLTest_RandomIntegerInRange(1, 50);; + refRect.w = 5000; + refRect.h = 5000; + _testSetTextInputRect(refRect); + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_SetTextInputRect with invalid data + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetTextInputRect + */ +int +keyboard_setTextInputRectNegative(void *arg) +{ + /* Some platforms set also an error message; prepare for checking it */ +#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_COCOA + const char *expectedError = "Parameter 'rect' is invalid"; + const char *error; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + /* Some platforms set also an error message; so check it */ +#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_COCOA + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetScancodeFromKey + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromKey + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromKey(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key */ + scancode = SDL_GetScancodeFromKey(SDLK_4); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_4)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromKey, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Virtual key */ + scancode = SDL_GetScancodeFromKey(SDLK_PLUS); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_PLUS)"); + SDLTest_AssertCheck(scancode == 0, "Validate return value from SDL_GetScancodeFromKey, expected: 0, got: %i", scancode); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetScancodeFromName + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromName + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromName(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key, 1 character, first name in list */ + scancode = SDL_GetScancodeFromName("A"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('A')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_A, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_A, scancode); + + /* Regular key, 1 character */ + scancode = SDL_GetScancodeFromName("4"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('4')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Regular key, 2 characters */ + scancode = SDL_GetScancodeFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('F1')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_F1, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_F1, scancode); + + /* Regular key, 3 characters */ + scancode = SDL_GetScancodeFromName("End"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('End')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_END, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_END, scancode); + + /* Regular key, 4 characters */ + scancode = SDL_GetScancodeFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Find')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_FIND, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_FIND, scancode); + + /* Regular key, several characters */ + scancode = SDL_GetScancodeFromName("Backspace"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Backspace')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_BACKSPACE, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_BACKSPACE, scancode); + + /* Regular key, several characters with space */ + scancode = SDL_GetScancodeFromName("Keypad Enter"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Keypad Enter')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_KP_ENTER, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_KP_ENTER, scancode); + + /* Regular key, last name in list */ + scancode = SDL_GetScancodeFromName("Sleep"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Sleep')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_SLEEP, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_SLEEP, scancode); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +void +_checkInvalidNameError() +{ + const char *expectedError = "Parameter 'name' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Check call to SDL_GetScancodeFromName with invalid data + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromName + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromNameNegative(void *arg) +{ + char *name; + SDL_Scancode scancode; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Random string input */ + name = SDLTest_RandomAsciiStringOfSize(32); + SDLTest_Assert(name != NULL, "Check that random name is not NULL"); + if (name == NULL) { + return TEST_ABORTED; + } + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('%s')", name); + SDL_free(name); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + /* Zero length string input */ + name = ""; + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + /* NULL input */ + name = NULL; + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + return TEST_COMPLETED; +} + + + +/* ================= Test References ================== */ + +/* Keyboard test cases */ +static const SDLTest_TestCaseReference keyboardTest1 = + { (SDLTest_TestCaseFp)keyboard_getKeyboardState, "keyboard_getKeyboardState", "Check call to SDL_GetKeyboardState with and without numkeys reference", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest2 = + { (SDLTest_TestCaseFp)keyboard_getKeyboardFocus, "keyboard_getKeyboardFocus", "Check call to SDL_GetKeyboardFocus", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest3 = + { (SDLTest_TestCaseFp)keyboard_getKeyFromName, "keyboard_getKeyFromName", "Check call to SDL_GetKeyFromName for known, unknown and invalid name", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest4 = + { (SDLTest_TestCaseFp)keyboard_getKeyFromScancode, "keyboard_getKeyFromScancode", "Check call to SDL_GetKeyFromScancode", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest5 = + { (SDLTest_TestCaseFp)keyboard_getKeyName, "keyboard_getKeyName", "Check call to SDL_GetKeyName", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest6 = + { (SDLTest_TestCaseFp)keyboard_getSetModState, "keyboard_getSetModState", "Check call to SDL_GetModState and SDL_SetModState", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest7 = + { (SDLTest_TestCaseFp)keyboard_startStopTextInput, "keyboard_startStopTextInput", "Check call to SDL_StartTextInput and SDL_StopTextInput", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest8 = + { (SDLTest_TestCaseFp)keyboard_setTextInputRect, "keyboard_setTextInputRect", "Check call to SDL_SetTextInputRect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest9 = + { (SDLTest_TestCaseFp)keyboard_setTextInputRectNegative, "keyboard_setTextInputRectNegative", "Check call to SDL_SetTextInputRect with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest10 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromKey, "keyboard_getScancodeFromKey", "Check call to SDL_GetScancodeFromKey", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest11 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromName, "keyboard_getScancodeFromName", "Check call to SDL_GetScancodeFromName", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest12 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromNameNegative, "keyboard_getScancodeFromNameNegative", "Check call to SDL_GetScancodeFromName with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest13 = + { (SDLTest_TestCaseFp)keyboard_getKeyNameNegative, "keyboard_getKeyNameNegative", "Check call to SDL_GetKeyName with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest14 = + { (SDLTest_TestCaseFp)keyboard_getScancodeNameNegative, "keyboard_getScancodeNameNegative", "Check call to SDL_GetScancodeName with invalid data", TEST_ENABLED }; + +/* Sequence of Keyboard test cases */ +static const SDLTest_TestCaseReference *keyboardTests[] = { + &keyboardTest1, &keyboardTest2, &keyboardTest3, &keyboardTest4, &keyboardTest5, &keyboardTest6, + &keyboardTest7, &keyboardTest8, &keyboardTest9, &keyboardTest10, &keyboardTest11, &keyboardTest12, + &keyboardTest13, &keyboardTest14, NULL +}; + +/* Keyboard test suite (global) */ +SDLTest_TestSuiteReference keyboardTestSuite = { + "Keyboard", + NULL, + keyboardTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_main.c b/Engine/lib/sdl/test/testautomation_main.c new file mode 100644 index 0000000000..ef8f19e9e7 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_main.c @@ -0,0 +1,157 @@ +/** + * Automated SDL subsystems management test. + * + * Written by J�rgen Tjern� "jorgenpt" + * + * Released under Public Domain. + */ + +#include "SDL.h" +#include "SDL_test.h" + + +/* ! + * \brief Tests SDL_Init() and SDL_Quit() of Joystick and Haptic subsystems + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Init + * http://wiki.libsdl.org/moin.cgi/SDL_Quit + */ +static int main_testInitQuitJoystickHaptic (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED + return TEST_SKIPPED; +#else + int enabled_subsystems; + int initialized_subsystems = SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC; + + SDLTest_AssertCheck( SDL_Init(initialized_subsystems) == 0, "SDL_Init multiple systems." ); + + enabled_subsystems = SDL_WasInit(initialized_subsystems); + SDLTest_AssertCheck( enabled_subsystems == initialized_subsystems, "SDL_WasInit(SDL_INIT_EVERYTHING) contains all systems (%i)", enabled_subsystems ); + + SDL_Quit(); + + enabled_subsystems = SDL_WasInit(initialized_subsystems); + SDLTest_AssertCheck( enabled_subsystems == 0, "SDL_Quit should shut down everything (%i)", enabled_subsystems ); + + return TEST_COMPLETED; +#endif +} + +/* ! + * \brief Tests SDL_InitSubSystem() and SDL_QuitSubSystem() + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Init + * http://wiki.libsdl.org/moin.cgi/SDL_Quit + */ +static int main_testInitQuitSubSystem (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int i; + int subsystems[] = { SDL_INIT_JOYSTICK, SDL_INIT_HAPTIC, SDL_INIT_GAMECONTROLLER }; + + for (i = 0; i < SDL_arraysize(subsystems); ++i) { + int initialized_system; + int subsystem = subsystems[i]; + + SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) before init should be false", subsystem ); + SDLTest_AssertCheck( SDL_InitSubSystem(subsystem) == 0, "SDL_InitSubSystem(%x)", subsystem ); + + initialized_system = SDL_WasInit(subsystem); + SDLTest_AssertCheck( (initialized_system & subsystem) != 0, "SDL_WasInit(%x) should be true (%x)", subsystem, initialized_system ); + + SDL_QuitSubSystem(subsystem); + + SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) after shutdown should be false", subsystem ); + } + + return TEST_COMPLETED; +#endif +} + +const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER; +static int main_testImpliedJoystickInit (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int initialized_system; + + /* First initialize the controller */ + SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); + + /* Then make sure this implicitly initialized the joystick subsystem */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system ); + + /* Then quit the controller, and make sure that implicitly also quits the */ + /* joystick subsystem */ + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == 0, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system ); + + return TEST_COMPLETED; +#endif +} + +static int main_testImpliedJoystickQuit (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int initialized_system; + + /* First initialize the controller and the joystick (explicitly) */ + SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_JOYSTICK) == 0, "SDL_InitSubSystem(SDL_INIT_JOYSTICK)" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); + + /* Then make sure they're both initialized properly */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system ); + + /* Then quit the controller, and make sure that it does NOT quit the */ + /* explicitly initialized joystick subsystem. */ + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == SDL_INIT_JOYSTICK, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system ); + + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + + return TEST_COMPLETED; +#endif +} + +static const SDLTest_TestCaseReference mainTest1 = + { (SDLTest_TestCaseFp)main_testInitQuitJoystickHaptic, "main_testInitQuitJoystickHaptic", "Tests SDL_Init/Quit of Joystick and Haptic subsystem", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest2 = + { (SDLTest_TestCaseFp)main_testInitQuitSubSystem, "main_testInitQuitSubSystem", "Tests SDL_InitSubSystem/QuitSubSystem", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest3 = + { (SDLTest_TestCaseFp)main_testImpliedJoystickInit, "main_testImpliedJoystickInit", "Tests that init for gamecontroller properly implies joystick", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest4 = + { (SDLTest_TestCaseFp)main_testImpliedJoystickQuit, "main_testImpliedJoystickQuit", "Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly", TEST_ENABLED}; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *mainTests[] = { + &mainTest1, + &mainTest2, + &mainTest3, + &mainTest4, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference mainTestSuite = { + "Main", + NULL, + mainTests, + NULL +}; + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testautomation_mouse.c b/Engine/lib/sdl/test/testautomation_mouse.c new file mode 100644 index 0000000000..57cadee2eb --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_mouse.c @@ -0,0 +1,594 @@ +/** + * Mouse test suite + */ + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Helper to evaluate state returned from SDL_GetMouseState */ +int _mouseStateCheck(Uint32 state) +{ + return (state == 0) || + (state == SDL_BUTTON(SDL_BUTTON_LEFT)) || + (state == SDL_BUTTON(SDL_BUTTON_MIDDLE)) || + (state == SDL_BUTTON(SDL_BUTTON_RIGHT)) || + (state == SDL_BUTTON(SDL_BUTTON_X1)) || + (state == SDL_BUTTON(SDL_BUTTON_X2)); +} + +/** + * @brief Check call to SDL_GetMouseState + * + */ +int +mouse_getMouseState(void *arg) +{ + int x; + int y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, NULL)"); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x pointer is not NULL */ + x = INT_MIN; + state = SDL_GetMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where y pointer is not NULL */ + y = INT_MIN; + state = SDL_GetMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x and y pointer is not NULL */ + x = INT_MIN; + y = INT_MIN; + state = SDL_GetMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, &y)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetRelativeMouseState + * + */ +int +mouse_getRelativeMouseState(void *arg) +{ + int x; + int y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetRelativeMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, NULL)"); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x pointer is not NULL */ + x = INT_MIN; + state = SDL_GetRelativeMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where y pointer is not NULL */ + y = INT_MIN; + state = SDL_GetRelativeMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x and y pointer is not NULL */ + x = INT_MIN; + y = INT_MIN; + state = SDL_GetRelativeMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, &y)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + return TEST_COMPLETED; +} + + +/* XPM definition of mouse Cursor */ +static const char *_mouseArrowData[] = { + /* pixels */ + "X ", + "XX ", + "X.X ", + "X..X ", + "X...X ", + "X....X ", + "X.....X ", + "X......X ", + "X.......X ", + "X........X ", + "X.....XXXXX ", + "X..X..X ", + "X.X X..X ", + "XX X..X ", + "X X..X ", + " X..X ", + " X..X ", + " X..X ", + " XX ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " +}; + +/* Helper that creates a new mouse cursor from an XPM */ +static SDL_Cursor *_initArrowCursor(const char *image[]) +{ + SDL_Cursor *cursor; + int i, row, col; + Uint8 data[4*32]; + Uint8 mask[4*32]; + + i = -1; + for ( row=0; row<32; ++row ) { + for ( col=0; col<32; ++col ) { + if ( col % 8 ) { + data[i] <<= 1; + mask[i] <<= 1; + } else { + ++i; + data[i] = mask[i] = 0; + } + switch (image[row][col]) { + case 'X': + data[i] |= 0x01; + mask[i] |= 0x01; + break; + case '.': + mask[i] |= 0x01; + break; + case ' ': + break; + } + } + } + + cursor = SDL_CreateCursor(data, mask, 32, 32, 0, 0); + return cursor; +} + +/** + * @brief Check call to SDL_CreateCursor and SDL_FreeCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_CreateCursor + * @sa http://wiki.libsdl.org/moin.cgi/SDL_FreeCursor + */ +int +mouse_createFreeCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = _initArrowCursor(_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_CreateColorCursor and SDL_FreeCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_CreateColorCursor + * @sa http://wiki.libsdl.org/moin.cgi/SDL_FreeCursor + */ +int +mouse_createFreeColorCursor(void *arg) +{ + SDL_Surface *face; + SDL_Cursor *cursor; + + /* Get sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Validate sample input image is not NULL"); + if (face == NULL) return TEST_ABORTED; + + /* Create a color cursor from surface */ + cursor = SDL_CreateColorCursor(face, 0, 0); + SDLTest_AssertPass("Call to SDL_CreateColorCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateColorCursor() is not NULL"); + if (cursor == NULL) { + SDL_FreeSurface(face); + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + /* Clean up */ + SDL_FreeSurface(face); + + return TEST_COMPLETED; +} + +/* Helper that changes cursor visibility */ +void _changeCursorVisibility(int state) +{ + int oldState; + int newState; + int result; + + oldState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + + result = SDL_ShowCursor(state); + SDLTest_AssertPass("Call to SDL_ShowCursor(%s)", (state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE"); + SDLTest_AssertCheck(result == oldState, "Validate result from SDL_ShowCursor(%s), expected: %i, got: %i", + (state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE", oldState, result); + + newState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + SDLTest_AssertCheck(state == newState, "Validate new state, expected: %i, got: %i", + state, newState); +} + +/** + * @brief Check call to SDL_ShowCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_ShowCursor + */ +int +mouse_showCursor(void *arg) +{ + int currentState; + + /* Get current state */ + currentState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + SDLTest_AssertCheck(currentState == SDL_DISABLE || currentState == SDL_ENABLE, + "Validate result is %i or %i, got: %i", SDL_DISABLE, SDL_ENABLE, currentState); + if (currentState == SDL_DISABLE) { + /* Show the cursor, then hide it again */ + _changeCursorVisibility(SDL_ENABLE); + _changeCursorVisibility(SDL_DISABLE); + } else if (currentState == SDL_ENABLE) { + /* Hide the cursor, then show it again */ + _changeCursorVisibility(SDL_DISABLE); + _changeCursorVisibility(SDL_ENABLE); + } else { + return TEST_ABORTED; + } + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_SetCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetCursor + */ +int +mouse_setCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = _initArrowCursor(_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Set the arrow cursor */ + SDL_SetCursor(cursor); + SDLTest_AssertPass("Call to SDL_SetCursor(cursor)"); + + /* Force redraw */ + SDL_SetCursor(NULL); + SDLTest_AssertPass("Call to SDL_SetCursor(NULL)"); + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetCursor + */ +int +mouse_getCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Get current cursor */ + cursor = SDL_GetCursor(); + SDLTest_AssertPass("Call to SDL_GetCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_GetCursor() is not NULL"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetRelativeMouseMode + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetRelativeMouseMode + */ +int +mouse_getSetRelativeMouseMode(void *arg) +{ + int result; + int i; + SDL_bool initialState; + SDL_bool currentState; + + /* Capture original state so we can revert back to it later */ + initialState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + + /* Repeat twice to check D->D transition */ + for (i=0; i<2; i++) { + /* Disable - should always be supported */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + } + + /* Repeat twice to check D->E->E transition */ + for (i=0; i<2; i++) { + /* Enable - may not be supported */ + result = SDL_SetRelativeMouseMode(SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(TRUE)"); + if (result != -1) { + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_TRUE, "Validate current state is TRUE, got: %i", currentState); + } + } + + /* Disable to check E->D transition */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + + /* Revert to original state - ignore result */ + result = SDL_SetRelativeMouseMode(initialState); + + return TEST_COMPLETED; +} + +#define MOUSE_TESTWINDOW_WIDTH 320 +#define MOUSE_TESTWINDOW_HEIGHT 200 + +/** + * Creates a test window + */ +SDL_Window *_createMouseSuiteTestWindow() +{ + int posX = 100, posY = 100, width = MOUSE_TESTWINDOW_WIDTH, height = MOUSE_TESTWINDOW_HEIGHT; + SDL_Window *window; + window = SDL_CreateWindow("mouse_createMouseSuiteTestWindow", posX, posY, width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + return window; +} + +/* + * Destroy test window + */ +void _destroyMouseSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow()"); + } +} + +/** + * @brief Check call to SDL_WarpMouseInWindow + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_WarpMouseInWindow + */ +int +mouse_warpMouseInWindow(void *arg) +{ + const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT; + int numPositions = 6; + int xPositions[] = {-1, 0, 1, w-1, w, w+1 }; + int yPositions[] = {-1, 0, 1, h-1, h, h+1 }; + int x, y, i, j; + SDL_Window *window; + + /* Create test window */ + window = _createMouseSuiteTestWindow(); + if (window == NULL) return TEST_ABORTED; + + /* Mouse to random position inside window */ + x = SDLTest_RandomIntegerInRange(1, w-1); + y = SDLTest_RandomIntegerInRange(1, h-1); + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y); + + /* Same position again */ + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y); + + /* Mouse to various boundary positions */ + for (i=0; i + +#include "SDL.h" +#include "SDL_test.h" + +/* Test case functions */ + +/* Definition of all RGB formats used to test pixel conversions */ +const int _numRGBPixelFormats = 30; +Uint32 _RGBPixelFormats[] = + { + SDL_PIXELFORMAT_INDEX1LSB, + SDL_PIXELFORMAT_INDEX1MSB, + SDL_PIXELFORMAT_INDEX4LSB, + SDL_PIXELFORMAT_INDEX4MSB, + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_RGB888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_BGR888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010 + }; +char* _RGBPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_INDEX1LSB", + "SDL_PIXELFORMAT_INDEX1MSB", + "SDL_PIXELFORMAT_INDEX4LSB", + "SDL_PIXELFORMAT_INDEX4MSB", + "SDL_PIXELFORMAT_INDEX8", + "SDL_PIXELFORMAT_RGB332", + "SDL_PIXELFORMAT_RGB444", + "SDL_PIXELFORMAT_RGB555", + "SDL_PIXELFORMAT_BGR555", + "SDL_PIXELFORMAT_ARGB4444", + "SDL_PIXELFORMAT_RGBA4444", + "SDL_PIXELFORMAT_ABGR4444", + "SDL_PIXELFORMAT_BGRA4444", + "SDL_PIXELFORMAT_ARGB1555", + "SDL_PIXELFORMAT_RGBA5551", + "SDL_PIXELFORMAT_ABGR1555", + "SDL_PIXELFORMAT_BGRA5551", + "SDL_PIXELFORMAT_RGB565", + "SDL_PIXELFORMAT_BGR565", + "SDL_PIXELFORMAT_RGB24", + "SDL_PIXELFORMAT_BGR24", + "SDL_PIXELFORMAT_RGB888", + "SDL_PIXELFORMAT_RGBX8888", + "SDL_PIXELFORMAT_BGR888", + "SDL_PIXELFORMAT_BGRX8888", + "SDL_PIXELFORMAT_ARGB8888", + "SDL_PIXELFORMAT_RGBA8888", + "SDL_PIXELFORMAT_ABGR8888", + "SDL_PIXELFORMAT_BGRA8888", + "SDL_PIXELFORMAT_ARGB2101010" + }; + +/* Definition of all Non-RGB formats used to test pixel conversions */ +const int _numNonRGBPixelFormats = 7; +Uint32 _nonRGBPixelFormats[] = + { + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU, + SDL_PIXELFORMAT_NV12, + SDL_PIXELFORMAT_NV21 + }; +char* _nonRGBPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_YV12", + "SDL_PIXELFORMAT_IYUV", + "SDL_PIXELFORMAT_YUY2", + "SDL_PIXELFORMAT_UYVY", + "SDL_PIXELFORMAT_YVYU", + "SDL_PIXELFORMAT_NV12", + "SDL_PIXELFORMAT_NV21" + }; + +/* Definition of some invalid formats for negative tests */ +const int _numInvalidPixelFormats = 2; +Uint32 _invalidPixelFormats[] = + { + 0xfffffffe, + 0xffffffff + }; +char* _invalidPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_UNKNOWN", + "SDL_PIXELFORMAT_UNKNOWN" + }; + +/* Test case functions */ + +/** + * @brief Call to SDL_AllocFormat and SDL_FreeFormat + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat + * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat + */ +int +pixels_allocFreeFormat(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *expectedError = "Parameter 'format' is invalid"; + const char *error; + int i; + Uint32 format; + Uint32 masks; + SDL_PixelFormat* result; + + /* Blank/unknown format */ + format = 0; + SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format); + + /* Allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format); + SDLTest_AssertCheck(result->BitsPerPixel == 0, "Verify value of result.BitsPerPixel; expected: 0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel == 0, "Verify value of result.BytesPerPixel; expected: 0, got %u", result->BytesPerPixel); + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %u", masks); + + /* Deallocate again */ + SDL_FreeFormat(result); + SDLTest_AssertPass("Call to SDL_FreeFormat()"); + } + + /* RGB formats */ + for (i = 0; i < _numRGBPixelFormats; i++) { + format = _RGBPixelFormats[i]; + SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format); + + /* Allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format); + SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel); + if (result->palette != NULL) { + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %u", masks); + } + + /* Deallocate again */ + SDL_FreeFormat(result); + SDLTest_AssertPass("Call to SDL_FreeFormat()"); + } + } + + /* Non-RGB formats */ + for (i = 0; i < _numNonRGBPixelFormats; i++) { + format = _nonRGBPixelFormats[i]; + SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format); + + /* Try to allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + } + + /* Negative cases */ + + /* Invalid Formats */ + for (i = 0; i < _numInvalidPixelFormats; i++) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = _invalidPixelFormats[i]; + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat(%u)", format); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_FreeFormat(NULL); + SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_GetPixelFormatName + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetPixelFormatName + */ +int +pixels_getPixelFormatName(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *error; + int i; + Uint32 format; + char* result; + + /* Blank/undefined format */ + format = 0; + SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0, + "Verify result text; expected: %s, got %s", unknownFormat, result); + } + + /* RGB formats */ + for (i = 0; i < _numRGBPixelFormats; i++) { + format = _RGBPixelFormats[i]; + SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, _RGBPixelFormatsVerbose[i]) == 0, + "Verify result text; expected: %s, got %s", _RGBPixelFormatsVerbose[i], result); + } + } + + /* Non-RGB formats */ + for (i = 0; i < _numNonRGBPixelFormats; i++) { + format = _nonRGBPixelFormats[i]; + SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, _nonRGBPixelFormatsVerbose[i]) == 0, + "Verify result text; expected: %s, got %s", _nonRGBPixelFormatsVerbose[i], result); + } + } + + /* Negative cases */ + + /* Invalid Formats */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (i = 0; i < _numInvalidPixelFormats; i++) { + format = _invalidPixelFormats[i]; + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%u)", format); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', + "Verify result is non-empty; got: %s", result); + SDLTest_AssertCheck(SDL_strcmp(result, _invalidPixelFormatsVerbose[i]) == 0, + "Validate name is UNKNOWN, expected: '%s', got: '%s'", _invalidPixelFormatsVerbose[i], result); + } + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty"); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_AllocPalette and SDL_FreePalette + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette + * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette + */ +int +pixels_allocFreePalette(void *arg) +{ + const char *expectedError1 = "Parameter 'ncolors' is invalid"; + const char *expectedError2 = "Parameter 'palette' is invalid"; + const char *error; + int variation; + int i; + int ncolors; + SDL_Palette* result; + + /* Allocate palette */ + for (variation = 1; variation <= 3; variation++) { + switch (variation) { + /* Just one color */ + case 1: + ncolors = 1; + break; + /* Two colors */ + case 2: + ncolors = 2; + break; + /* More than two colors */ + case 3: + ncolors = SDLTest_RandomIntegerInRange(8, 16); + break; + } + + result = SDL_AllocPalette(ncolors); + SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors); + if (result->ncolors > 0) { + SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL"); + if (result->colors != NULL) { + for(i = 0; i < result->ncolors; i++) { + SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r); + SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g); + SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b); + } + } + } + + /* Deallocate again */ + SDL_FreePalette(result); + SDLTest_AssertPass("Call to SDL_FreePalette()"); + } + } + + /* Negative cases */ + + /* Invalid number of colors */ + for (ncolors = 0; ncolors > -3; ncolors--) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + result = SDL_AllocPalette(ncolors); + SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError1, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_FreePalette(NULL); + SDLTest_AssertPass("Call to SDL_FreePalette(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError2, error); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_CalculateGammaRamp + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_CalculateGammaRamp + */ +int +pixels_calcGammaRamp(void *arg) +{ + const char *expectedError1 = "Parameter 'gamma' is invalid"; + const char *expectedError2 = "Parameter 'ramp' is invalid"; + const char *error; + float gamma; + Uint16 *ramp; + int variation; + int i; + int changed; + Uint16 magic = 0xbeef; + + /* Allocate temp ramp array and fill with some value */ + ramp = (Uint16 *)SDL_malloc(256 * sizeof(Uint16)); + SDLTest_AssertCheck(ramp != NULL, "Validate temp ramp array could be allocated"); + if (ramp == NULL) return TEST_ABORTED; + + /* Make call with different gamma values */ + for (variation = 0; variation < 4; variation++) { + switch (variation) { + /* gamma = 0 all black */ + case 0: + gamma = 0.0f; + break; + /* gamma = 1 identity */ + case 1: + gamma = 1.0f; + break; + /* gamma = [0.2,0.8] normal range */ + case 2: + gamma = 0.2f + 0.8f * SDLTest_RandomUnitFloat(); + break; + /* gamma = >1.1 non-standard range */ + case 3: + gamma = 1.1f + SDLTest_RandomUnitFloat(); + break; + } + + /* Make call and check that values were updated */ + for (i = 0; i < 256; i++) ramp[i] = magic; + SDL_CalculateGammaRamp(gamma, ramp); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma); + changed = 0; + for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++; + SDLTest_AssertCheck(changed > 250, "Validate that ramp was calculated; expected: >250 values changed, got: %d values changed", changed); + + /* Additional value checks for some cases */ + i = SDLTest_RandomIntegerInRange(64,192); + switch (variation) { + case 0: + SDLTest_AssertCheck(ramp[i] == 0, "Validate value at position %d; expected: 0, got: %d", i, ramp[i]); + break; + case 1: + SDLTest_AssertCheck(ramp[i] == ((i << 8) | i), "Validate value at position %d; expected: %d, got: %d", i, (i << 8) | i, ramp[i]); + break; + case 2: + case 3: + SDLTest_AssertCheck(ramp[i] > 0, "Validate value at position %d; expected: >0, got: %d", i, ramp[i]); + break; + } + } + + /* Negative cases */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + gamma = -1; + for (i=0; i<256; i++) ramp[i] = magic; + SDL_CalculateGammaRamp(gamma, ramp); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError1, error); + } + changed = 0; + for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++; + SDLTest_AssertCheck(changed ==0, "Validate that ramp unchanged; expected: 0 values changed got: %d values changed", changed); + + SDL_CalculateGammaRamp(0.5f, NULL); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(0.5,NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError2, error); + } + + /* Cleanup */ + SDL_free(ramp); + + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Pixels test cases */ +static const SDLTest_TestCaseReference pixelsTest1 = + { (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest2 = + { (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest3 = + { (SDLTest_TestCaseFp)pixels_calcGammaRamp, "pixels_calcGammaRamp", "Call to SDL_CalculateGammaRamp", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest4 = + { (SDLTest_TestCaseFp)pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED }; + +/* Sequence of Pixels test cases */ +static const SDLTest_TestCaseReference *pixelsTests[] = { + &pixelsTest1, &pixelsTest2, &pixelsTest3, &pixelsTest4, NULL +}; + +/* Pixels test suite (global) */ +SDLTest_TestSuiteReference pixelsTestSuite = { + "Pixels", + NULL, + pixelsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_platform.c b/Engine/lib/sdl/test/testautomation_platform.c new file mode 100644 index 0000000000..5211a4a70c --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_platform.c @@ -0,0 +1,584 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and updated by aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/** + * @brief Compare sizes of types. + * + * @note Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int _compareSizeOfType( size_t sizeoftype, size_t hardcodetype ) +{ + return sizeoftype != hardcodetype; +} + +/* Test case functions */ + +/** + * @brief Tests type sizes. + */ +int platform_testTypes(void *arg) +{ + int ret; + + ret = _compareSizeOfType( sizeof(Uint8), 1 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint8) = %lu, expected 1", (unsigned long)sizeof(Uint8) ); + + ret = _compareSizeOfType( sizeof(Uint16), 2 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint16) = %lu, expected 2", (unsigned long)sizeof(Uint16) ); + + ret = _compareSizeOfType( sizeof(Uint32), 4 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint32) = %lu, expected 4", (unsigned long)sizeof(Uint32) ); + + ret = _compareSizeOfType( sizeof(Uint64), 8 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint64) = %lu, expected 8", (unsigned long)sizeof(Uint64) ); + + return TEST_COMPLETED; +} + +/** + * @brief Tests platform endianness and SDL_SwapXY functions. + */ +int platform_testEndianessAndSwap(void *arg) +{ + int real_byteorder; + Uint16 value = 0x1234; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + + Uint64 value64, swapped64; + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + + if ((*((char *) &value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + + /* Test endianness. */ + SDLTest_AssertCheck( real_byteorder == SDL_BYTEORDER, + "Machine detected as %s endian, appears to be %s endian.", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" ); + + /* Test 16 swap. */ + SDLTest_AssertCheck( SDL_Swap16(value16) == swapped16, + "SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X", + value16, SDL_Swap16(value16) ); + + /* Test 32 swap. */ + SDLTest_AssertCheck( SDL_Swap32(value32) == swapped32, + "SDL_Swap32(): 32 bit swapped: 0x%X => 0x%X", + value32, SDL_Swap32(value32) ); + + /* Test 64 swap. */ + SDLTest_AssertCheck( SDL_Swap64(value64) == swapped64, + "SDL_Swap64(): 64 bit swapped: 0x%"SDL_PRIX64" => 0x%"SDL_PRIX64, + value64, SDL_Swap64(value64) ); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetXYZ() functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetPlatform + * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCount + * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCacheLineSize + * http://wiki.libsdl.org/moin.cgi/SDL_GetRevision + * http://wiki.libsdl.org/moin.cgi/SDL_GetRevisionNumber + */ +int platform_testGetFunctions (void *arg) +{ + char *platform; + char *revision; + int ret; + int len; + + platform = (char *)SDL_GetPlatform(); + SDLTest_AssertPass("SDL_GetPlatform()"); + SDLTest_AssertCheck(platform != NULL, "SDL_GetPlatform() != NULL"); + if (platform != NULL) { + len = SDL_strlen(platform); + SDLTest_AssertCheck(len > 0, + "SDL_GetPlatform(): expected non-empty platform, was platform: '%s', len: %i", + platform, + len); + } + + ret = SDL_GetCPUCount(); + SDLTest_AssertPass("SDL_GetCPUCount()"); + SDLTest_AssertCheck(ret > 0, + "SDL_GetCPUCount(): expected count > 0, was: %i", + ret); + + ret = SDL_GetCPUCacheLineSize(); + SDLTest_AssertPass("SDL_GetCPUCacheLineSize()"); + SDLTest_AssertCheck(ret >= 0, + "SDL_GetCPUCacheLineSize(): expected size >= 0, was: %i", + ret); + + revision = (char *)SDL_GetRevision(); + SDLTest_AssertPass("SDL_GetRevision()"); + SDLTest_AssertCheck(revision != NULL, "SDL_GetRevision() != NULL"); + + ret = SDL_GetRevisionNumber(); + SDLTest_AssertPass("SDL_GetRevisionNumber()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasXYZ() functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Has3DNow + * http://wiki.libsdl.org/moin.cgi/SDL_HasAltiVec + * http://wiki.libsdl.org/moin.cgi/SDL_HasMMX + * http://wiki.libsdl.org/moin.cgi/SDL_HasRDTSC + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE2 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE3 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE41 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE42 + * http://wiki.libsdl.org/moin.cgi/SDL_HasAVX + */ +int platform_testHasFunctions (void *arg) +{ + int ret; + + /* TODO: independently determine and compare values as well */ + + ret = SDL_HasRDTSC(); + SDLTest_AssertPass("SDL_HasRDTSC()"); + + ret = SDL_HasAltiVec(); + SDLTest_AssertPass("SDL_HasAltiVec()"); + + ret = SDL_HasMMX(); + SDLTest_AssertPass("SDL_HasMMX()"); + + ret = SDL_Has3DNow(); + SDLTest_AssertPass("SDL_Has3DNow()"); + + ret = SDL_HasSSE(); + SDLTest_AssertPass("SDL_HasSSE()"); + + ret = SDL_HasSSE2(); + SDLTest_AssertPass("SDL_HasSSE2()"); + + ret = SDL_HasSSE3(); + SDLTest_AssertPass("SDL_HasSSE3()"); + + ret = SDL_HasSSE41(); + SDLTest_AssertPass("SDL_HasSSE41()"); + + ret = SDL_HasSSE42(); + SDLTest_AssertPass("SDL_HasSSE42()"); + + ret = SDL_HasAVX(); + SDLTest_AssertPass("SDL_HasAVX()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetVersion + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetVersion + */ +int platform_testGetVersion(void *arg) +{ + SDL_version linked; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_GetVersion(&linked); + SDLTest_AssertCheck( linked.major >= major, + "SDL_GetVersion(): returned major %i (>= %i)", + linked.major, + major); + SDLTest_AssertCheck( linked.minor >= minor, + "SDL_GetVersion(): returned minor %i (>= %i)", + linked.minor, + minor); + + return TEST_COMPLETED; +} + + +/* ! + * \brief Tests SDL_VERSION macro + */ +int platform_testSDLVersion(void *arg) +{ + SDL_version compiled; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_VERSION(&compiled); + SDLTest_AssertCheck( compiled.major >= major, + "SDL_VERSION() returned major %i (>= %i)", + compiled.major, + major); + SDLTest_AssertCheck( compiled.minor >= minor, + "SDL_VERSION() returned minor %i (>= %i)", + compiled.minor, + minor); + + return TEST_COMPLETED; +} + + +/* ! + * \brief Tests default SDL_Init + */ +int platform_testDefaultInit(void *arg) +{ + int ret; + int subsystem; + + subsystem = SDL_WasInit(SDL_INIT_EVERYTHING); + SDLTest_AssertCheck( subsystem != 0, + "SDL_WasInit(0): returned %i, expected != 0", + subsystem); + + ret = SDL_Init(SDL_WasInit(SDL_INIT_EVERYTHING)); + SDLTest_AssertCheck( ret == 0, + "SDL_Init(0): returned %i, expected 0, error: %s", + ret, + SDL_GetError()); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_Get/Set/ClearError + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetError + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + * http://wiki.libsdl.org/moin.cgi/SDL_ClearError + */ +int platform_testGetSetClearError(void *arg) +{ + int result; + const char *testError = "Testing"; + char *lastError; + int len; + + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): no message expected, len: %i", len); + } + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(testError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message %s, was message: %s", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_SetError with empty input + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + */ +int platform_testSetErrorEmptyInput(void *arg) +{ + int result; + const char *testError = ""; + char *lastError; + int len; + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(testError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_SetError with invalid input + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + */ +int platform_testSetErrorInvalidInput(void *arg) +{ + int result; + const char *invalidError = NULL; + const char *probeError = "Testing"; + char *lastError; + int len; + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Check for no-op */ + result = SDL_SetError(invalidError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): expected message len 0, was len: %i", + len); + } + + /* Set */ + result = SDL_SetError(probeError); + SDLTest_AssertPass("SDL_SetError('%s')", probeError); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + + /* Check for no-op */ + result = SDL_SetError(invalidError); + SDLTest_AssertPass("SDL_SetError(NULL)"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): expected message len 0, was len: %i", + len); + } + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Set and check */ + result = SDL_SetError(probeError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(probeError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(probeError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, probeError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + probeError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetPowerInfo + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetPowerInfo + */ +int platform_testGetPowerInfo(void *arg) +{ + SDL_PowerState state; + SDL_PowerState stateAgain; + int secs; + int secsAgain; + int pct; + int pctAgain; + + state = SDL_GetPowerInfo(&secs, &pct); + SDLTest_AssertPass("SDL_GetPowerInfo()"); + SDLTest_AssertCheck( + state==SDL_POWERSTATE_UNKNOWN || + state==SDL_POWERSTATE_ON_BATTERY || + state==SDL_POWERSTATE_NO_BATTERY || + state==SDL_POWERSTATE_CHARGING || + state==SDL_POWERSTATE_CHARGED, + "SDL_GetPowerInfo(): state %i is one of the expected values", + (int)state); + + if (state==SDL_POWERSTATE_ON_BATTERY) + { + SDLTest_AssertCheck( + secs >= 0, + "SDL_GetPowerInfo(): on battery, secs >= 0, was: %i", + secs); + SDLTest_AssertCheck( + (pct >= 0) && (pct <= 100), + "SDL_GetPowerInfo(): on battery, pct=[0,100], was: %i", + pct); + } + + if (state==SDL_POWERSTATE_UNKNOWN || + state==SDL_POWERSTATE_NO_BATTERY) + { + SDLTest_AssertCheck( + secs == -1, + "SDL_GetPowerInfo(): no battery, secs == -1, was: %i", + secs); + SDLTest_AssertCheck( + pct == -1, + "SDL_GetPowerInfo(): no battery, pct == -1, was: %i", + pct); + } + + /* Partial return value variations */ + stateAgain = SDL_GetPowerInfo(&secsAgain, NULL); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when only 'secs' requested", + stateAgain); + SDLTest_AssertCheck( + secs==secsAgain, + "Value %i matches when only 'secs' requested", + secsAgain); + stateAgain = SDL_GetPowerInfo(NULL, &pctAgain); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when only 'pct' requested", + stateAgain); + SDLTest_AssertCheck( + pct==pctAgain, + "Value %i matches when only 'pct' requested", + pctAgain); + stateAgain = SDL_GetPowerInfo(NULL, NULL); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when no value requested", + stateAgain); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Platform test cases */ +static const SDLTest_TestCaseReference platformTest1 = + { (SDLTest_TestCaseFp)platform_testTypes, "platform_testTypes", "Tests predefined types", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest2 = + { (SDLTest_TestCaseFp)platform_testEndianessAndSwap, "platform_testEndianessAndSwap", "Tests endianess and swap functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest3 = + { (SDLTest_TestCaseFp)platform_testGetFunctions, "platform_testGetFunctions", "Tests various SDL_GetXYZ functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest4 = + { (SDLTest_TestCaseFp)platform_testHasFunctions, "platform_testHasFunctions", "Tests various SDL_HasXYZ functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest5 = + { (SDLTest_TestCaseFp)platform_testGetVersion, "platform_testGetVersion", "Tests SDL_GetVersion function", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest6 = + { (SDLTest_TestCaseFp)platform_testSDLVersion, "platform_testSDLVersion", "Tests SDL_VERSION macro", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest7 = + { (SDLTest_TestCaseFp)platform_testDefaultInit, "platform_testDefaultInit", "Tests default SDL_Init", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest8 = + { (SDLTest_TestCaseFp)platform_testGetSetClearError, "platform_testGetSetClearError", "Tests SDL_Get/Set/ClearError", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest9 = + { (SDLTest_TestCaseFp)platform_testSetErrorEmptyInput, "platform_testSetErrorEmptyInput", "Tests SDL_SetError with empty input", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest10 = + { (SDLTest_TestCaseFp)platform_testSetErrorInvalidInput, "platform_testSetErrorInvalidInput", "Tests SDL_SetError with invalid input", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest11 = + { (SDLTest_TestCaseFp)platform_testGetPowerInfo, "platform_testGetPowerInfo", "Tests SDL_GetPowerInfo function", TEST_ENABLED }; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *platformTests[] = { + &platformTest1, + &platformTest2, + &platformTest3, + &platformTest4, + &platformTest5, + &platformTest6, + &platformTest7, + &platformTest8, + &platformTest9, + &platformTest10, + &platformTest11, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference platformTestSuite = { + "Platform", + NULL, + platformTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_rect.c b/Engine/lib/sdl/test/testautomation_rect.c new file mode 100644 index 0000000000..abf19f593d --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_rect.c @@ -0,0 +1,1696 @@ +/** + * Original code: automated SDL rect test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/* ! + * \brief Private helper to check SDL_IntersectRectAndLine results + */ +void _validateIntersectRectAndLineResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rect, SDL_Rect * refRect, + int x1, int y1, int x2, int y2, + int x1Ref, int y1Ref, int x2Ref, int y2Ref) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check for correct intersection result: expected %s, got %s intersecting rect (%d,%d,%d,%d) with line (%d,%d - %d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + refRect->x, refRect->y, refRect->w, refRect->h, + x1Ref, y1Ref, x2Ref, y2Ref); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); + SDLTest_AssertCheck(x1 == x1Ref && y1 == y1Ref && x2 == x2Ref && y2 == y2Ref, + "Check if line was incorrectly clipped or modified: got (%d,%d - %d,%d) expected (%d,%d - %d,%d)", + x1, y1, x2, y2, + x1Ref, y1Ref, x2Ref, y2Ref); +} + +/* Test case functions */ + +/* ! + * \brief Tests SDL_IntersectRectAndLine() clipping cases + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLine (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 15; + x2 = xRight; + y2 = 15; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 15, 31, 15); + + x1 = 15; + y1 = yTop; + x2 = 15; + y2 = yBottom; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 15, 0, 15, 31); + + x1 = -refRect.w; + y1 = -refRect.h; + x2 = 2*refRect.w; + y2 = 2*refRect.h; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 0, 31, 31); + + x1 = 2*refRect.w; + y1 = 2*refRect.h; + x2 = -refRect.w; + y2 = -refRect.h; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 31, 0, 0); + + x1 = -1; + y1 = 32; + x2 = 32; + y2 = -1; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 31, 31, 0); + + x1 = 32; + y1 = -1; + x2 = -1; + y2 = 32; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 0, 0, 31); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() non-clipping case line inside + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineInside (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xmin = refRect.x; + int xmax = refRect.x + refRect.w - 1; + int ymin = refRect.y; + int ymax = refRect.y + refRect.h - 1; + int x1Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y1Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + int x2Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y2Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + x1 = x1Ref; + y1 = y1Ref; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, xmax, ymax); + + x1 = xmin; + y1 = ymin; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, x2Ref, y2Ref); + + x1 = xmin; + y1 = ymin; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, xmax, ymax); + + x1 = xmin; + y1 = ymax; + x2 = xmax; + y2 = ymin; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymax, xmax, ymin); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() non-clipping cases outside + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineOutside (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 0; + x2 = xLeft; + y2 = 31; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xLeft, 0, xLeft, 31); + + x1 = xRight; + y1 = 0; + x2 = xRight; + y2 = 31; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xRight, 0, xRight, 31); + + x1 = 0; + y1 = yTop; + x2 = 31; + y2 = yTop; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yTop, 31, yTop); + + x1 = 0; + y1 = yBottom; + x2 = 31; + y2 = yBottom; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yBottom, 31, yBottom); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() with empty rectangle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineEmpty (void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + int x1, y1, x1Ref, y1Ref; + int x2, y2, x2Ref, y2Ref; + SDL_bool intersected; + + refRect.x = SDLTest_RandomIntegerInRange(1, 1024); + refRect.y = SDLTest_RandomIntegerInRange(1, 1024); + refRect.w = 0; + refRect.h = 0; + x1Ref = refRect.x; + y1Ref = refRect.y; + x2Ref = SDLTest_RandomIntegerInRange(1, 1024); + y2Ref = SDLTest_RandomIntegerInRange(1, 1024); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_IntersectRectAndLine() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineParam (void *arg) +{ + SDL_Rect rect = { 0, 0, 32, 32 }; + int x1 = rect.w / 2; + int y1 = rect.h / 2; + int x2 = x1; + int y2 = 2 * rect.h; + SDL_bool intersected; + + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_TRUE, "Check that intersection result was SDL_TRUE"); + + intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, (int *)NULL, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, (int *)NULL, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 3rd parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, (int *)NULL, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 4th parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 5th parameter is NULL"); + intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Private helper to check SDL_HasIntersection results + */ +void _validateHasIntersectionResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check intersection result: expected %s, got %s intersecting A (%d,%d,%d,%d) with B (%d,%d,%d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/* ! + * \brief Private helper to check SDL_IntersectRect results + */ +void _validateIntersectRectResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + _validateHasIntersectionResults(intersection, expectedIntersection, rectA, rectB, refRectA, refRectB); + if (result && expectedResult) { + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that intersection of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); + } +} + +/* ! + * \brief Private helper to check SDL_UnionRect results + */ +void _validateUnionRectResults( + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that union of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); +} + +/* ! + * \brief Private helper to check SDL_RectEmpty results + */ +void _validateRectEmptyResults( + SDL_bool empty, SDL_bool expectedEmpty, + SDL_Rect *rect, SDL_Rect *refRect) +{ + SDLTest_AssertCheck(empty == expectedEmpty, + "Check for correct empty result: expected %s, got %s testing (%d,%d,%d,%d)", + (expectedEmpty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rect->x, rect->y, rect->w, rect->h); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); +} + +/* ! + * \brief Private helper to check SDL_RectEquals results + */ +void _validateRectEqualsResults( + SDL_bool equals, SDL_bool expectedEquals, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(equals == expectedEquals, + "Check for correct equals result: expected %s, got %s testing (%d,%d,%d,%d) and (%d,%d,%d,%d)", + (expectedEquals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (equals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/* ! + * \brief Tests SDL_IntersectRect() with B fully inside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectInside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with B fully outside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectOutside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with B partially intersecting A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectPartial (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_Rect expectedResult; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectA.w - refRectB.x; + expectedResult.h = refRectA.h - refRectB.y; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = 0; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = 0; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with 1x1 pixel sized rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectPoint (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectA); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with empty rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectEmpty (void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + SDL_bool empty; + + /* Rect A empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect A and B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_IntersectRect() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_IntersectRect(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL"); + intersection = SDL_IntersectRect(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 3st parameter is NULL"); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameters are NULL"); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 3rd parameters are NULL "); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B fully inside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionInside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B fully outside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionOutside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B partially intersecting A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionPartial (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with 1x1 pixel sized rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionPoint (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with empty rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionEmpty (void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* Rect A empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect A and B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_HasIntersection() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_HasIntersection((SDL_Rect *)NULL, &rectB); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_HasIntersection(&rectA, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL"); + intersection = SDL_HasIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Test SDL_EnclosePoints() without clipping + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_EnclosePoints + */ +int rect_testEnclosePoints(void *arg) +{ + const int numPoints = 16; + SDL_Point refPoints[16]; + SDL_Point points[16]; + SDL_Rect result; + SDL_bool anyEnclosed; + SDL_bool anyEnclosedNoResult; + SDL_bool expectedEnclosed = SDL_TRUE; + int newx, newy; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int i; + + /* Create input data, tracking result */ + for (i=0; i maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Check expected return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; i maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Check return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; i=refClip.x) && (newx<(refClip.x + refClip.w)) && + (newy>=refClip.y) && (newy<(refClip.y + refClip.h))) { + if (expectedEnclosed==SDL_FALSE) { + minx = newx; + maxx = newx; + miny = newy; + maxy = newy; + } else { + if (newx < minx) minx = newx; + if (newx > maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + expectedEnclosed = SDL_TRUE; + } + } + + /* Call function and validate - special case: no result requested */ + clip = refClip; + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Expected return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; irefRectB.x) ? refRectA.x : refRectB.x; + miny = (refRectA.yrefRectB.y) ? refRectA.y : refRectB.y; + expectedResult.x = minx; + expectedResult.y = miny; + expectedResult.w = maxx - minx + 1; + expectedResult.h = maxy - miny + 1; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + /* Union outside overlap */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 512); + refRectA.h=SDLTest_RandomIntegerInRange(256, 512); + refRectB.x=refRectA.x + 1 + dx*2; + refRectB.y=refRectA.y + 1 + dy*2; + refRectB.w=refRectA.w - 2; + refRectB.h=refRectA.h - 2; + expectedResult = refRectA; + if (dx == -1) expectedResult.x--; + if (dy == -1) expectedResult.y--; + if ((dx == 1) || (dx == -1)) expectedResult.w++; + if ((dy == 1) || (dy == -1)) expectedResult.h++; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_UnionRect() where rect A or rect B are empty + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectEmpty(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + + /* A empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=0; + refRectA.h=0; + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectB.h=SDLTest_RandomIntegerInRange(1, 1024); + expectedResult = refRectB; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* B empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=0; + refRectB.h=0; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* A and B empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=0; + refRectA.h=0; + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=0; + refRectB.h=0; + result.x=0; + result.y=0; + result.w=0; + result.h=0; + expectedResult = result; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_UnionRect() where rect B is inside rect A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectInside(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + int dx, dy; + + /* Union 1x1 with itself */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=1; + refRectA.h=1; + expectedResult = refRectA; + rectA = refRectA; + SDL_UnionRect(&rectA, &rectA, &result); + _validateUnionRectResults(&rectA, &rectA, &refRectA, &refRectA, &result, &expectedResult); + + /* Union 1x1 somewhere inside */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); + refRectB.x=refRectA.x + 1 + SDLTest_RandomIntegerInRange(1, refRectA.w - 2); + refRectB.y=refRectA.y + 1 + SDLTest_RandomIntegerInRange(1, refRectA.h - 2); + refRectB.w=1; + refRectB.h=1; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* Union inside with edges modified */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); + refRectB = refRectA; + if (dx == -1) refRectB.x++; + if ((dx == 1) || (dx == -1)) refRectB.w--; + if (dy == -1) refRectB.y++; + if ((dy == 1) || (dy == -1)) refRectB.h--; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_UnionRect() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectParam(void *arg) +{ + SDL_Rect rectA, rectB; + SDL_Rect result; + + /* invalid parameter combinations */ + SDL_UnionRect((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertPass("Check that function returns when 1st parameter is NULL"); + SDL_UnionRect(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertPass("Check that function returns when 2nd parameter is NULL"); + SDL_UnionRect(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 3rd parameter is NULL"); + SDL_UnionRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 1st and 3rd parameter are NULL"); + SDL_UnionRect(&rectA, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 2nd and 3rd parameter are NULL"); + SDL_UnionRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_RectEmpty() with various inputs + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEmpty + */ +int rect_testRectEmpty(void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + SDL_bool expectedResult; + SDL_bool result; + int w, h; + + /* Non-empty case */ + refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w=SDLTest_RandomIntegerInRange(256, 1024); + refRect.h=SDLTest_RandomIntegerInRange(256, 1024); + expectedResult = SDL_FALSE; + rect = refRect; + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); + _validateRectEmptyResults(result, expectedResult, &rect, &refRect); + + /* Empty case */ + for (w=-1; w<2; w++) { + for (h=-1; h<2; h++) { + if ((w != 1) || (h != 1)) { + refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w=w; + refRect.h=h; + expectedResult = SDL_TRUE; + rect = refRect; + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); + _validateRectEmptyResults(result, expectedResult, &rect, &refRect); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_RectEmpty() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEmpty + */ +int rect_testRectEmptyParam(void *arg) +{ + SDL_bool result; + + /* invalid parameter combinations */ + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_TRUE, "Check that function returns TRUE when 1st parameter is NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_RectEquals() with various inputs + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEquals + */ +int rect_testRectEquals(void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool expectedResult; + SDL_bool result; + + /* Equals */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); + refRectB = refRectA; + expectedResult = SDL_TRUE; + rectA = refRectA; + rectB = refRectB; + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)&rectB); + _validateRectEqualsResults(result, expectedResult, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_RectEquals() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEquals + */ +int rect_testRectEqualsParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool result; + + /* data setup */ + rectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.w=SDLTest_RandomIntegerInRange(1, 1024); + rectA.h=SDLTest_RandomIntegerInRange(1, 1024); + rectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.w=SDLTest_RandomIntegerInRange(1, 1024); + rectB.h=SDLTest_RandomIntegerInRange(1, 1024); + + /* invalid parameter combinations */ + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)&rectB); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameter are NULL"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Rect test cases */ + +/* SDL_IntersectRectAndLine */ +static const SDLTest_TestCaseReference rectTest1 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLine,"rect_testIntersectRectAndLine", "Tests SDL_IntersectRectAndLine clipping cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest2 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineInside, "rect_testIntersectRectAndLineInside", "Tests SDL_IntersectRectAndLine with line fully contained in rect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest3 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineOutside, "rect_testIntersectRectAndLineOutside", "Tests SDL_IntersectRectAndLine with line fully outside of rect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest4 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineEmpty, "rect_testIntersectRectAndLineEmpty", "Tests SDL_IntersectRectAndLine with empty rectangle ", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest5 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineParam, "rect_testIntersectRectAndLineParam", "Negative tests against SDL_IntersectRectAndLine with invalid parameters", TEST_ENABLED }; + +/* SDL_IntersectRect */ +static const SDLTest_TestCaseReference rectTest6 = + { (SDLTest_TestCaseFp)rect_testIntersectRectInside, "rect_testIntersectRectInside", "Tests SDL_IntersectRect with B fully contained in A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest7 = + { (SDLTest_TestCaseFp)rect_testIntersectRectOutside, "rect_testIntersectRectOutside", "Tests SDL_IntersectRect with B fully outside of A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest8 = + { (SDLTest_TestCaseFp)rect_testIntersectRectPartial, "rect_testIntersectRectPartial", "Tests SDL_IntersectRect with B partially intersecting A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest9 = + { (SDLTest_TestCaseFp)rect_testIntersectRectPoint, "rect_testIntersectRectPoint", "Tests SDL_IntersectRect with 1x1 sized rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest10 = + { (SDLTest_TestCaseFp)rect_testIntersectRectEmpty, "rect_testIntersectRectEmpty", "Tests SDL_IntersectRect with empty rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest11 = + { (SDLTest_TestCaseFp)rect_testIntersectRectParam, "rect_testIntersectRectParam", "Negative tests against SDL_IntersectRect with invalid parameters", TEST_ENABLED }; + +/* SDL_HasIntersection */ +static const SDLTest_TestCaseReference rectTest12 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionInside, "rect_testHasIntersectionInside", "Tests SDL_HasIntersection with B fully contained in A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest13 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionOutside, "rect_testHasIntersectionOutside", "Tests SDL_HasIntersection with B fully outside of A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest14 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionPartial,"rect_testHasIntersectionPartial", "Tests SDL_HasIntersection with B partially intersecting A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest15 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionPoint, "rect_testHasIntersectionPoint", "Tests SDL_HasIntersection with 1x1 sized rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest16 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionEmpty, "rect_testHasIntersectionEmpty", "Tests SDL_HasIntersection with empty rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest17 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionParam, "rect_testHasIntersectionParam", "Negative tests against SDL_HasIntersection with invalid parameters", TEST_ENABLED }; + +/* SDL_EnclosePoints */ +static const SDLTest_TestCaseReference rectTest18 = + { (SDLTest_TestCaseFp)rect_testEnclosePoints, "rect_testEnclosePoints", "Tests SDL_EnclosePoints without clipping", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest19 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsWithClipping, "rect_testEnclosePointsWithClipping", "Tests SDL_EnclosePoints with clipping", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest20 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsRepeatedInput, "rect_testEnclosePointsRepeatedInput", "Tests SDL_EnclosePoints with repeated input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest21 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsParam, "rect_testEnclosePointsParam", "Negative tests against SDL_EnclosePoints with invalid parameters", TEST_ENABLED }; + +/* SDL_UnionRect */ +static const SDLTest_TestCaseReference rectTest22 = + { (SDLTest_TestCaseFp)rect_testUnionRectInside, "rect_testUnionRectInside", "Tests SDL_UnionRect where rect B is inside rect A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest23 = + { (SDLTest_TestCaseFp)rect_testUnionRectOutside, "rect_testUnionRectOutside", "Tests SDL_UnionRect where rect B is outside rect A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest24 = + { (SDLTest_TestCaseFp)rect_testUnionRectEmpty, "rect_testUnionRectEmpty", "Tests SDL_UnionRect where rect A or rect B are empty", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest25 = + { (SDLTest_TestCaseFp)rect_testUnionRectParam, "rect_testUnionRectParam", "Negative tests against SDL_UnionRect with invalid parameters", TEST_ENABLED }; + +/* SDL_RectEmpty */ +static const SDLTest_TestCaseReference rectTest26 = + { (SDLTest_TestCaseFp)rect_testRectEmpty, "rect_testRectEmpty", "Tests SDL_RectEmpty with various inputs", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest27 = + { (SDLTest_TestCaseFp)rect_testRectEmptyParam, "rect_testRectEmptyParam", "Negative tests against SDL_RectEmpty with invalid parameters", TEST_ENABLED }; + +/* SDL_RectEquals */ + +static const SDLTest_TestCaseReference rectTest28 = + { (SDLTest_TestCaseFp)rect_testRectEquals, "rect_testRectEquals", "Tests SDL_RectEquals with various inputs", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest29 = + { (SDLTest_TestCaseFp)rect_testRectEqualsParam, "rect_testRectEqualsParam", "Negative tests against SDL_RectEquals with invalid parameters", TEST_ENABLED }; + + +/* ! + * \brief Sequence of Rect test cases; functions that handle simple rectangles including overlaps and merges. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/CategoryRect + */ +static const SDLTest_TestCaseReference *rectTests[] = { + &rectTest1, &rectTest2, &rectTest3, &rectTest4, &rectTest5, &rectTest6, &rectTest7, &rectTest8, &rectTest9, &rectTest10, &rectTest11, &rectTest12, &rectTest13, &rectTest14, + &rectTest15, &rectTest16, &rectTest17, &rectTest18, &rectTest19, &rectTest20, &rectTest21, &rectTest22, &rectTest23, &rectTest24, &rectTest25, &rectTest26, &rectTest27, + &rectTest28, &rectTest29, NULL +}; + + +/* Rect test suite (global) */ +SDLTest_TestSuiteReference rectTestSuite = { + "Rect", + NULL, + rectTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_render.c b/Engine/lib/sdl/test/testautomation_render.c new file mode 100644 index 0000000000..5a1bc9b8c5 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_render.c @@ -0,0 +1,1099 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and extensively updated by aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +#define TESTRENDER_SCREEN_W 80 +#define TESTRENDER_SCREEN_H 60 + +#define RENDER_COMPARE_FORMAT SDL_PIXELFORMAT_ARGB8888 +#define RENDER_COMPARE_AMASK 0xff000000 /**< Alpha bit mask. */ +#define RENDER_COMPARE_RMASK 0x00ff0000 /**< Red bit mask. */ +#define RENDER_COMPARE_GMASK 0x0000ff00 /**< Green bit mask. */ +#define RENDER_COMPARE_BMASK 0x000000ff /**< Blue bit mask. */ + +#define ALLOWABLE_ERROR_OPAQUE 0 +#define ALLOWABLE_ERROR_BLENDED 64 + +/* Test window and renderer */ +SDL_Window *window = NULL; +SDL_Renderer *renderer = NULL; + +/* Prototypes for helper functions */ + +static int _clearScreen (void); +static void _compare(SDL_Surface *reference, int allowable_error); +static int _hasTexAlpha(void); +static int _hasTexColor(void); +static SDL_Texture *_loadTestFace(void); +static int _hasBlendModes(void); +static int _hasDrawColor(void); +static int _isSupported(int code); + +/** + * Create software renderer for tests + */ +void InitCreateRenderer(void *arg) +{ + int posX = 100, posY = 100, width = 320, height = 240; + renderer = NULL; + window = SDL_CreateWindow("render_testCreateRenderer", posX, posY, width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + if (window == NULL) { + return; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + SDLTest_AssertPass("SDL_CreateRenderer()"); + SDLTest_AssertCheck(renderer != 0, "Check SDL_CreateRenderer result"); + if (renderer == NULL) { + SDL_DestroyWindow(window); + return; + } +} + +/* + * Destroy renderer for tests + */ +void CleanupDestroyRenderer(void *arg) +{ + if (renderer != NULL) { + SDL_DestroyRenderer(renderer); + renderer = NULL; + SDLTest_AssertPass("SDL_DestroyRenderer()"); + } + + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow"); + } +} + + +/** + * @brief Tests call to SDL_GetNumRenderDrivers + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetNumRenderDrivers + */ +int +render_testGetNumRenderDrivers(void *arg) +{ + int n; + n = SDL_GetNumRenderDrivers(); + SDLTest_AssertCheck(n >= 1, "Number of renderers >= 1, reported as %i", n); + return TEST_COMPLETED; +} + + +/** + * @brief Tests the SDL primitives for rendering. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetRenderDrawColor + * http://wiki.libsdl.org/moin.cgi/SDL_RenderFillRect + * http://wiki.libsdl.org/moin.cgi/SDL_RenderDrawLine + * + */ +int render_testPrimitives (void *arg) +{ + int ret; + int x, y; + SDL_Rect rect; + SDL_Surface *referenceSurface = NULL; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + _clearScreen(); + + /* Need drawcolor or just skip test. */ + SDLTest_AssertCheck(_hasDrawColor(), "_hasDrawColor"); + + /* Draw a rectangle. */ + rect.x = 40; + rect.y = 0; + rect.w = 40; + rect.h = 80; + + ret = SDL_SetRenderDrawColor(renderer, 13, 73, 200, SDL_ALPHA_OPAQUE ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + ret = SDL_RenderFillRect(renderer, &rect ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + + /* Draw a rectangle. */ + rect.x = 10; + rect.y = 10; + rect.w = 60; + rect.h = 40; + ret = SDL_SetRenderDrawColor(renderer, 200, 0, 100, SDL_ALPHA_OPAQUE ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + ret = SDL_RenderFillRect(renderer, &rect ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + + /* Draw some points like so: + * X.X.X.X.. + * .X.X.X.X. + * X.X.X.X.. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (y=0; y<3; y++) { + for (x = y % 2; x + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +const char* RWopsReadTestFilename = "rwops_read"; +const char* RWopsWriteTestFilename = "rwops_write"; +const char* RWopsAlphabetFilename = "rwops_alphabet"; + +static const char RWopsHelloWorldTestString[] = "Hello World!"; +static const char RWopsHelloWorldCompString[] = "Hello World!"; +static const char RWopsAlphabetString[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +/* Fixture */ + +void +RWopsSetUp(void *arg) +{ + int fileLen; + FILE *handle; + int writtenLen; + int result; + + /* Clean up from previous runs (if any); ignore errors */ + remove(RWopsReadTestFilename); + remove(RWopsWriteTestFilename); + remove(RWopsAlphabetFilename); + + /* Create a test file */ + handle = fopen(RWopsReadTestFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsReadTestFilename); + if (handle == NULL) return; + + /* Write some known text into it */ + fileLen = SDL_strlen(RWopsHelloWorldTestString); + writtenLen = (int)fwrite(RWopsHelloWorldTestString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", fileLen, writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + /* Create a second test file */ + handle = fopen(RWopsAlphabetFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsAlphabetFilename); + if (handle == NULL) return; + + /* Write alphabet text into it */ + fileLen = SDL_strlen(RWopsAlphabetString); + writtenLen = (int)fwrite(RWopsAlphabetString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", fileLen, writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + SDLTest_AssertPass("Creation of test file completed"); +} + +void +RWopsTearDown(void *arg) +{ + int result; + + /* Remove the created files to clean up; ignore errors for write filename */ + result = remove(RWopsReadTestFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsReadTestFilename, result); + remove(RWopsWriteTestFilename); + result = remove(RWopsAlphabetFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsAlphabetFilename, result); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + +/** + * @brief Makes sure parameters work properly. Local helper function. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWseek + * http://wiki.libsdl.org/moin.cgi/SDL_RWread + */ +void +_testGenericRWopsValidations(SDL_RWops *rw, int write) +{ + char buf[sizeof(RWopsHelloWorldTestString)]; + Sint64 i; + size_t s; + int seekPos = SDLTest_RandomIntegerInRange(4, 8); + + /* Clear buffer */ + SDL_zero(buf); + + /* Set to start. */ + i = SDL_RWseek(rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %"SDL_PRIs64, i); + + /* Test write. */ + s = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1, 1); + SDLTest_AssertPass("Call to SDL_RWwrite succeeded"); + if (write) { + SDLTest_AssertCheck(s == (size_t)1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", s); + } + else { + SDLTest_AssertCheck(s == (size_t)0, "Verify result of writing with SDL_RWwrite, expected: 0, got %i", s); + } + + /* Test seek to random position */ + i = SDL_RWseek( rw, seekPos, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)seekPos, "Verify seek to %i with SDL_RWseek (RW_SEEK_SET), expected %i, got %"SDL_PRIs64, seekPos, seekPos, i); + + /* Test seek back to start */ + i = SDL_RWseek(rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %"SDL_PRIs64, i); + + /* Test read */ + s = SDL_RWread( rw, buf, 1, sizeof(RWopsHelloWorldTestString)-1 ); + SDLTest_AssertPass("Call to SDL_RWread succeeded"); + SDLTest_AssertCheck( + s == (size_t)(sizeof(RWopsHelloWorldTestString)-1), + "Verify result from SDL_RWread, expected %i, got %i", + sizeof(RWopsHelloWorldTestString)-1, + s); + SDLTest_AssertCheck( + SDL_memcmp(buf, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1 ) == 0, + "Verify read bytes match expected string, expected '%s', got '%s'", RWopsHelloWorldTestString, buf); + + /* More seek tests. */ + i = SDL_RWseek( rw, -4, RW_SEEK_CUR ); + SDLTest_AssertPass("Call to SDL_RWseek(...,-4,RW_SEEK_CUR) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString)-5), + "Verify seek to -4 with SDL_RWseek (RW_SEEK_CUR), expected %i, got %"SDL_PRIs64, + sizeof(RWopsHelloWorldTestString)-5, + i); + + i = SDL_RWseek( rw, -1, RW_SEEK_END ); + SDLTest_AssertPass("Call to SDL_RWseek(...,-1,RW_SEEK_END) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString)-2), + "Verify seek to -1 with SDL_RWseek (RW_SEEK_END), expected %i, got %"SDL_PRIs64, + sizeof(RWopsHelloWorldTestString)-2, + i); + + /* Invalid whence seek */ + i = SDL_RWseek( rw, 0, 999 ); + SDLTest_AssertPass("Call to SDL_RWseek(...,0,invalid_whence) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(-1), + "Verify seek with SDL_RWseek (invalid_whence); expected: -1, got %"SDL_PRIs64, + i); +} + +/* ! + * Negative test for SDL_RWFromFile parameters + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * + */ +int +rwops_testParamNegative (void) +{ + SDL_RWops *rwops; + + /* These should all fail. */ + rwops = SDL_RWFromFile(NULL, NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, NULL) returns NULL"); + + rwops = SDL_RWFromFile(NULL, "ab+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"ab+\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"ab+\") returns NULL"); + + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"sldfkjsldkfj\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"sldfkjsldkfj\") returns NULL"); + + rwops = SDL_RWFromFile("something", ""); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", \"\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", \"\") returns NULL"); + + rwops = SDL_RWFromFile("something", NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", NULL) returns NULL"); + + rwops = SDL_RWFromMem((void *)NULL, 10); + SDLTest_AssertPass("Call to SDL_RWFromMem(NULL, 10) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(NULL, 10) returns NULL"); + + rwops = SDL_RWFromMem((void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(data, 0) returns NULL"); + + rwops = SDL_RWFromConstMem((const void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromConstMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromConstMem(data, 0) returns NULL"); + + return TEST_COMPLETED; +} + +/** + * @brief Tests opening from memory. + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromMem + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testMem (void) +{ + char mem[sizeof(RWopsHelloWorldTestString)]; + SDL_RWops *rw; + int result; + + /* Clear buffer */ + SDL_zero(mem); + + /* Open */ + rw = SDL_RWFromMem(mem, sizeof(RWopsHelloWorldTestString)-1); + SDLTest_AssertPass("Call to SDL_RWFromMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY, "Verify RWops type is SDL_RWOPS_MEMORY; expected: %d, got: %d", SDL_RWOPS_MEMORY, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations(rw, 1); + + /* Close */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests opening from memory. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromConstMem + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testConstMem (void) +{ + SDL_RWops *rw; + int result; + + /* Open handle */ + rw = SDL_RWFromConstMem( RWopsHelloWorldCompString, sizeof(RWopsHelloWorldCompString)-1 ); + SDLTest_AssertPass("Call to SDL_RWFromConstMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromConstMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY_RO, "Verify RWops type is SDL_RWOPS_MEMORY_RO; expected: %d, got: %d", SDL_RWOPS_MEMORY_RO, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests reading from file. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testFileRead(void) +{ + SDL_RWops *rw; + int result; + + /* Read test. */ + rw = SDL_RWFromFile(RWopsReadTestFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"r\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in read mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ +#if defined(__ANDROID__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests writing from file. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testFileWrite(void) +{ + SDL_RWops *rw; + int result; + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ +#if defined(__ANDROID__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 1 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests reading from file handle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * + */ +int +rwops_testFPRead(void) +{ + FILE *fp; + SDL_RWops *rw; + int result; + + /* Run read tests. */ + fp = fopen(RWopsReadTestFilename, "r"); + SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in read mode is not NULL", RWopsReadTestFilename); + + /* Bail out if NULL */ + if (fp == NULL) return TEST_ABORTED; + + /* Open */ + rw = SDL_RWFromFP( fp, SDL_TRUE ); + SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in read mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + fclose(fp); + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle - does fclose() */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests writing to file handle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * + */ +int +rwops_testFPWrite(void) +{ + FILE *fp; + SDL_RWops *rw; + int result; + + /* Run write tests. */ + fp = fopen(RWopsWriteTestFilename, "w+"); + SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in write mode is not NULL", RWopsWriteTestFilename); + + /* Bail out if NULL */ + if (fp == NULL) return TEST_ABORTED; + + /* Open */ + rw = SDL_RWFromFP( fp, SDL_TRUE ); + SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + fclose(fp); + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 1 ); + + /* Close handle - does fclose() */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests alloc and free RW context. + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_AllocRW + * \sa http://wiki.libsdl.org/moin.cgi/SDL_FreeRW + */ +int +rwops_testAllocFree (void) +{ + /* Allocate context */ + SDL_RWops *rw = SDL_AllocRW(); + SDLTest_AssertPass("Call to SDL_AllocRW() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_AllocRW() is not NULL"); + if (rw==NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_UNKNOWN, + "Verify RWops type is SDL_RWOPS_UNKNOWN; expected: %d, got: %d", SDL_RWOPS_UNKNOWN, rw->type); + + /* Free context again */ + SDL_FreeRW(rw); + SDLTest_AssertPass("Call to SDL_FreeRW() succeeded"); + + return TEST_COMPLETED; +} + +/** + * @brief Compare memory and file reads + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromMem + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + */ +int +rwops_testCompareRWFromMemWithRWFromFile(void) +{ + int slen = 26; + char buffer_file[27]; + char buffer_mem[27]; + size_t rv_file; + size_t rv_mem; + Uint64 sv_file; + Uint64 sv_mem; + SDL_RWops* rwops_file; + SDL_RWops* rwops_mem; + int size; + int result; + + + for (size=5; size<10; size++) + { + /* Terminate buffer */ + buffer_file[slen] = 0; + buffer_mem[slen] = 0; + + /* Read/seek from memory */ + rwops_mem = SDL_RWFromMem((void *)RWopsAlphabetString, slen); + SDLTest_AssertPass("Call to SDL_RWFromMem()"); + rv_mem = SDL_RWread(rwops_mem, buffer_mem, size, 6); + SDLTest_AssertPass("Call to SDL_RWread(mem, size=%d)", size); + sv_mem = SDL_RWseek(rwops_mem, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(mem,SEEK_END)"); + result = SDL_RWclose(rwops_mem); + SDLTest_AssertPass("Call to SDL_RWclose(mem)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Read/see from file */ + rwops_file = SDL_RWFromFile(RWopsAlphabetFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile()"); + rv_file = SDL_RWread(rwops_file, buffer_file, size, 6); + SDLTest_AssertPass("Call to SDL_RWread(file, size=%d)", size); + sv_file = SDL_RWseek(rwops_file, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(file,SEEK_END)"); + result = SDL_RWclose(rwops_file); + SDLTest_AssertPass("Call to SDL_RWclose(file)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Compare */ + SDLTest_AssertCheck(rv_mem == rv_file, "Verify returned read blocks matches for mem and file reads; got: rv_mem=%d rv_file=%d", rv_mem, rv_file); + SDLTest_AssertCheck(sv_mem == sv_file, "Verify SEEK_END position matches for mem and file seeks; got: sv_mem=%"SDL_PRIu64" sv_file=%"SDL_PRIu64, sv_mem, sv_file); + SDLTest_AssertCheck(buffer_mem[slen] == 0, "Verify mem buffer termination; expected: 0, got: %d", buffer_mem[slen]); + SDLTest_AssertCheck(buffer_file[slen] == 0, "Verify file buffer termination; expected: 0, got: %d", buffer_file[slen]); + SDLTest_AssertCheck( + SDL_strncmp(buffer_mem, RWopsAlphabetString, slen) == 0, + "Verify mem buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_mem); + SDLTest_AssertCheck( + SDL_strncmp(buffer_file, RWopsAlphabetString, slen) == 0, + "Verify file buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_file); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests writing and reading from file using endian aware functions. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * http://wiki.libsdl.org/moin.cgi/SDL_ReadBE16 + * http://wiki.libsdl.org/moin.cgi/SDL_WriteBE16 + */ +int +rwops_testFileWriteReadEndian(void) +{ + SDL_RWops *rw; + Sint64 result; + int mode; + size_t objectsWritten; + Uint16 BE16value; + Uint32 BE32value; + Uint64 BE64value; + Uint16 LE16value; + Uint32 LE32value; + Uint64 LE64value; + Uint16 BE16test; + Uint32 BE32test; + Uint64 BE64test; + Uint16 LE16test; + Uint32 LE32test; + Uint64 LE64test; + int cresult; + + for (mode = 0; mode < 3; mode++) { + + /* Create test data */ + switch (mode) { + case 0: + SDLTest_Log("All 0 values"); + BE16value = 0; + BE32value = 0; + BE64value = 0; + LE16value = 0; + LE32value = 0; + LE64value = 0; + break; + case 1: + SDLTest_Log("All 1 values"); + BE16value = 1; + BE32value = 1; + BE64value = 1; + LE16value = 1; + LE32value = 1; + LE64value = 1; + break; + case 2: + SDLTest_Log("Random values"); + BE16value = SDLTest_RandomUint16(); + BE32value = SDLTest_RandomUint32(); + BE64value = SDLTest_RandomUint64(); + LE16value = SDLTest_RandomUint16(); + LE32value = SDLTest_RandomUint32(); + LE64value = SDLTest_RandomUint64(); + break; + } + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\")"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Write test data */ + objectsWritten = SDL_WriteBE16(rw, BE16value); + SDLTest_AssertPass("Call to SDL_WriteBE16()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteBE32(rw, BE32value); + SDLTest_AssertPass("Call to SDL_WriteBE32()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteBE64(rw, BE64value); + SDLTest_AssertPass("Call to SDL_WriteBE64()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE16(rw, LE16value); + SDLTest_AssertPass("Call to SDL_WriteLE16()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE32(rw, LE32value); + SDLTest_AssertPass("Call to SDL_WriteLE32()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE64(rw, LE64value); + SDLTest_AssertPass("Call to SDL_WriteLE64()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + + /* Test seek to start */ + result = SDL_RWseek( rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result from position 0 with SDL_RWseek, expected 0, got %"SDL_PRIs64, result); + + /* Read test data */ + BE16test = SDL_ReadBE16(rw); + SDLTest_AssertPass("Call to SDL_ReadBE16()"); + SDLTest_AssertCheck(BE16test == BE16value, "Validate return value from SDL_ReadBE16, expected: %hu, got: %hu", BE16value, BE16test); + BE32test = SDL_ReadBE32(rw); + SDLTest_AssertPass("Call to SDL_ReadBE32()"); + SDLTest_AssertCheck(BE32test == BE32value, "Validate return value from SDL_ReadBE32, expected: %u, got: %u", BE32value, BE32test); + BE64test = SDL_ReadBE64(rw); + SDLTest_AssertPass("Call to SDL_ReadBE64()"); + SDLTest_AssertCheck(BE64test == BE64value, "Validate return value from SDL_ReadBE64, expected: %"SDL_PRIu64", got: %"SDL_PRIu64, BE64value, BE64test); + LE16test = SDL_ReadLE16(rw); + SDLTest_AssertPass("Call to SDL_ReadLE16()"); + SDLTest_AssertCheck(LE16test == LE16value, "Validate return value from SDL_ReadLE16, expected: %hu, got: %hu", LE16value, LE16test); + LE32test = SDL_ReadLE32(rw); + SDLTest_AssertPass("Call to SDL_ReadLE32()"); + SDLTest_AssertCheck(LE32test == LE32value, "Validate return value from SDL_ReadLE32, expected: %u, got: %u", LE32value, LE32test); + LE64test = SDL_ReadLE64(rw); + SDLTest_AssertPass("Call to SDL_ReadLE64()"); + SDLTest_AssertCheck(LE64test == LE64value, "Validate return value from SDL_ReadLE64, expected: %"SDL_PRIu64", got: %"SDL_PRIu64, LE64value, LE64test); + + /* Close handle */ + cresult = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(cresult == 0, "Verify result value is 0; got: %d", cresult); + } + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* RWops test cases */ +static const SDLTest_TestCaseReference rwopsTest1 = + { (SDLTest_TestCaseFp)rwops_testParamNegative, "rwops_testParamNegative", "Negative test for SDL_RWFromFile parameters", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest2 = + { (SDLTest_TestCaseFp)rwops_testMem, "rwops_testMem", "Tests opening from memory", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest3 = + { (SDLTest_TestCaseFp)rwops_testConstMem, "rwops_testConstMem", "Tests opening from (const) memory", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest4 = + { (SDLTest_TestCaseFp)rwops_testFileRead, "rwops_testFileRead", "Tests reading from a file", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest5 = + { (SDLTest_TestCaseFp)rwops_testFileWrite, "rwops_testFileWrite", "Test writing to a file", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest6 = + { (SDLTest_TestCaseFp)rwops_testFPRead, "rwops_testFPRead", "Test reading from file pointer", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest7 = + { (SDLTest_TestCaseFp)rwops_testFPWrite, "rwops_testFPWrite", "Test writing to file pointer", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest8 = + { (SDLTest_TestCaseFp)rwops_testAllocFree, "rwops_testAllocFree", "Test alloc and free of RW context", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest9 = + { (SDLTest_TestCaseFp)rwops_testFileWriteReadEndian, "rwops_testFileWriteReadEndian", "Test writing and reading via the Endian aware functions", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest10 = + { (SDLTest_TestCaseFp)rwops_testCompareRWFromMemWithRWFromFile, "rwops_testCompareRWFromMemWithRWFromFile", "Compare RWFromMem and RWFromFile RWops for read and seek", TEST_ENABLED }; + +/* Sequence of RWops test cases */ +static const SDLTest_TestCaseReference *rwopsTests[] = { + &rwopsTest1, &rwopsTest2, &rwopsTest3, &rwopsTest4, &rwopsTest5, &rwopsTest6, + &rwopsTest7, &rwopsTest8, &rwopsTest9, &rwopsTest10, NULL +}; + +/* RWops test suite (global) */ +SDLTest_TestSuiteReference rwopsTestSuite = { + "RWops", + RWopsSetUp, + rwopsTests, + RWopsTearDown +}; diff --git a/Engine/lib/sdl/test/testautomation_sdltest.c b/Engine/lib/sdl/test/testautomation_sdltest.c new file mode 100644 index 0000000000..ec1da8a50e --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_sdltest.c @@ -0,0 +1,1315 @@ +/** + * SDL_test test suite + */ + +/* Visual Studio 2008 doesn't have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER <= 1500 +#define UINT8_MAX ~(Uint8)0 +#define UINT16_MAX ~(Uint16)0 +#define UINT32_MAX ~(Uint32)0 +#define UINT64_MAX ~(Uint64)0 +#else +#include +#endif +#include +#include +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* Test case functions */ + +/* Forward declarations for internal harness functions */ +extern char *SDLTest_GenerateRunSeed(const int length); + +/** + * @brief Calls to SDLTest_GenerateRunSeed() + */ +int +sdltest_generateRunSeed(void *arg) +{ + char* result; + int i, l; + + for (i = 1; i <= 10; i += 3) { + result = SDLTest_GenerateRunSeed((const int)i); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result != NULL, "Verify returned value is not NULL"); + if (result != NULL) { + l = SDL_strlen(result); + SDLTest_AssertCheck(l == i, "Verify length of returned value is %d, got: %d", i, l); + SDL_free(result); + } + } + + /* Negative cases */ + for (i = -2; i <= 0; i++) { + result = SDLTest_GenerateRunSeed((const int)i); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result == NULL, "Verify returned value is not NULL"); + } + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_GetFuzzerInvocationCount() + */ +int +sdltest_getFuzzerInvocationCount(void *arg) +{ + Uint8 result; + int fuzzerCount1, fuzzerCount2; + + fuzzerCount1 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount1 >= 0, "Verify returned value, expected: >=0, got: %d", fuzzerCount1); + + result = SDLTest_RandomUint8(); + SDLTest_AssertPass("Call to SDLTest_RandomUint8(), returned %d", result); + + fuzzerCount2 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount2 > fuzzerCount1, "Verify returned value, expected: >%d, got: %d", fuzzerCount1, fuzzerCount2); + + return TEST_COMPLETED; +} + + +/** + * @brief Calls to random number generators + */ +int +sdltest_randomNumber(void *arg) +{ + Sint64 result; + Uint64 uresult; + double dresult; + Uint64 umax; + Sint64 min, max; + + result = (Sint64)SDLTest_RandomUint8(); + umax = (1 << 8) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint8"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint8(); + min = 0 - (1 << 7); + max = (1 << 7) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint8"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint16(); + umax = (1 << 16) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint16"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint16(); + min = 0 - (1 << 15); + max = (1 << 15) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint16"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint32(); + umax = ((Uint64)1 << 32) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint32"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint32(); + min = 0 - ((Sint64)1 << 31); + max = ((Sint64)1 << 31) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint32"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + uresult = SDLTest_RandomUint64(); + SDLTest_AssertPass("Call to SDLTest_RandomUint64"); + + result = SDLTest_RandomSint64(); + SDLTest_AssertPass("Call to SDLTest_RandomSint64"); + + dresult = (double)SDLTest_RandomUnitFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitFloat"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = (double)SDLTest_RandomFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomFloat"); + SDLTest_AssertCheck(dresult >= (double)(-FLT_MAX) && dresult <= (double)FLT_MAX, "Verify result value, expected: [%e,%e], got: %e", (double)(-FLT_MAX), (double)FLT_MAX, dresult); + + dresult = (double)SDLTest_RandomUnitDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitDouble"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = SDLTest_RandomDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomDouble"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint8 + */ +int +sdltest_randomBoundaryNumberUint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,255,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfe, SDL_FALSE) returns 0xff (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 254, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xff, + "Validate result value for parameters (0,254,SDL_FALSE); expected: 0xff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,255,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint16 + */ +int +sdltest_randomBoundaryNumberUint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffe, SDL_FALSE) returns 0xffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xfffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffff, + "Validate result value for parameters (0,0xfffe,SDL_FALSE); expected: 0xffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint32 + */ +int +sdltest_randomBoundaryNumberUint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffe, SDL_FALSE) returns 0xffffffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xfffffffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffffffff, + "Validate result value for parameters (0,0xfffffffe,SDL_FALSE); expected: 0xffffffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint64 + */ +int +sdltest_randomBoundaryNumberUint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffffffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(1, (Uint64)0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffffffffffe, SDL_FALSE) returns 0xffffffffffffffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, (Uint64)0xfffffffffffffffeULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == (Uint64)0xffffffffffffffffULL, + "Validate result value for parameters (0,0xfffffffffffffffe,SDL_FALSE); expected: 0xffffffffffffffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffffffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, (Uint64)0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint8 + */ +int +sdltest_randomBoundaryNumberSint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SCHAR_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters (SCHAR_MIN + 1,SCHAR_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX - 1, SDL_FALSE) returns SCHAR_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX -1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MAX, + "Validate result value for parameters (SCHAR_MIN,SCHAR_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (sets error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters(SCHAR_MIN,SCHAR_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint16 + */ +int +sdltest_randomBoundaryNumberSint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SHRT_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE) returns SHRT_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters (SHRT_MIN+1,SHRT_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE) returns SHRT_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MAX, + "Validate result value for parameters (SHRT_MIN,SHRT_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters(SHRT_MIN,SHRT_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint32 + */ +int +sdltest_randomBoundaryNumberSint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LONG_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN + 1, LONG_MAX, SDL_FALSE) returns LONG_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min + 1, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters (LONG_MIN+1,LONG_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_min, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX - 1, SDL_FALSE) returns LONG_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_max, + "Validate result value for parameters (LONG_MIN,LONG_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_max, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters(LONG_MIN,LONG_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_min, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint64 + */ +int +sdltest_randomBoundaryNumberSint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LLONG_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN + 1, LLONG_MAX, SDL_FALSE) returns LLONG_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN + 1, LLONG_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MIN, + "Validate result value for parameters (LLONG_MIN+1,LLONG_MAX,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX - 1, SDL_FALSE) returns LLONG_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, LLONG_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MAX, + "Validate result value for parameters (LLONG_MIN,LLONG_MAX - 1,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, LLONG_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MIN, + "Validate result value for parameters(LLONG_MIN,LLONG_MAX,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_RandomIntegerInRange + */ +int +sdltest_randomIntegerInRange(void *arg) +{ + Sint32 min, max; + Sint32 result; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Standard range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,max)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* One Range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + 1; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min+1)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Zero range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min)"); + SDLTest_AssertCheck(min == result, "Validated returned value; expected: %d, got: %d", min, result); + + /* Zero range at zero */ + min = 0; + max = 0; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(0,0)"); + SDLTest_AssertCheck(result == 0, "Validated returned value; expected: 0, got: %d", result); + + /* Swapped min-max */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(max, min); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(max,min)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Range with min at integer limit */ + min = long_min; + max = long_max + (Sint32)SDLTest_RandomSint16(); + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,...)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Range with max at integer limit */ + min = long_min - (Sint32)SDLTest_RandomSint16();; + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(...,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Full integer range */ + min = long_min; + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_RandomAsciiString + */ +int +sdltest_randomAsciiString(void *arg) +{ + char* result; + int len; + int nonAsciiCharacters; + int i; + + result = SDLTest_RandomAsciiString(); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiString()"); + SDLTest_AssertCheck(result != NULL, "Validate that result is not NULL"); + if (result != NULL) { + len = SDL_strlen(result); + SDLTest_AssertCheck(len >= 0 && len <= 255, "Validate that result length; expected: len=[1,255], got: %d", len); + nonAsciiCharacters = 0; + for (i=0; i= 0 && len <= targetLen, "Validate that result length; expected: len=[1,%d], got: %d", targetLen, len); + nonAsciiCharacters = 0; + for (i=0; i + +#include "SDL.h" +#include "SDL_test.h" + + +/* Test case functions */ + +/** + * @brief Call to SDL_strlcpy + */ +#undef SDL_strlcpy +int +stdlib_strlcpy(void *arg) +{ + size_t result; + char text[1024]; + const char *expected; + + result = SDL_strlcpy(text, "foo", sizeof(text)); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_strlcpy(text, "foo", 2); + expected = "f"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_snprintf + */ +#undef SDL_snprintf +int +stdlib_snprintf(void *arg) +{ + int result; + char text[1024]; + const char *expected; + + result = SDL_snprintf(text, sizeof(text), "%s", "foo"); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, 2, "%s", "foo"); + expected = "f"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(NULL, 0, "%s", "foo"); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0); + expected = "1.000000"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%.f", 1.0); + expected = "1"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%#.f", 1.0); + expected = "1."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%#.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0 + 1.0 / 3.0); + expected = "1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%+f", 1.0 + 1.0 / 3.0); + expected = "+1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%+f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%.2f", 1.0 + 1.0 / 3.0); + expected = "1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%6.2f", 1.0 + 1.0 / 3.0); + expected = " 1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%6.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, 5, "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0) with buffer size 5"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 6, "Check result value, expected: 6, got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_getenv and SDL_setenv + */ +int +stdlib_getsetenv(void *arg) +{ + const int nameLen = 16; + char name[17]; + int counter; + int result; + char * value1; + char * value2; + char * expected; + int overwrite; + char * text; + + /* Create a random name. This tests SDL_getenv, since we need to */ + /* make sure the variable is not set yet (it shouldn't). */ + do { + for(counter = 0; counter < nameLen; counter++) { + name[counter] = (char)SDLTest_RandomIntegerInRange(65, 90); + } + name[nameLen] = '\0'; + + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + if (text != NULL) { + SDLTest_Log("Expected: NULL, Got: '%s' (%i)", text, SDL_strlen(text)); + } + } while (text != NULL); + + /* Create random values to set */ + value1 = SDLTest_RandomAsciiStringOfSize(10); + value2 = SDLTest_RandomAsciiStringOfSize(10); + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 2 with overwrite */ + overwrite = 1; + expected = value2; + result = SDL_setenv(name, value2, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value2, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value2; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 1; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Negative cases */ + for (overwrite=0; overwrite <= 1; overwrite++) { + result = SDL_setenv(NULL, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv(NULL,'%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("=", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('=','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv(name, NULL, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s', NULL, %i)", name, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + } + + /* Clean up */ + SDL_free(value1); + SDL_free(value2); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Standard C routine test cases */ +static const SDLTest_TestCaseReference stdlibTest1 = + { (SDLTest_TestCaseFp)stdlib_strlcpy, "stdlib_strlcpy", "Call to SDL_strlcpy", TEST_ENABLED }; + +static const SDLTest_TestCaseReference stdlibTest2 = + { (SDLTest_TestCaseFp)stdlib_snprintf, "stdlib_snprintf", "Call to SDL_snprintf", TEST_ENABLED }; + +static const SDLTest_TestCaseReference stdlibTest3 = + { (SDLTest_TestCaseFp)stdlib_getsetenv, "stdlib_getsetenv", "Call to SDL_getenv and SDL_setenv", TEST_ENABLED }; + +/* Sequence of Standard C routine test cases */ +static const SDLTest_TestCaseReference *stdlibTests[] = { + &stdlibTest1, &stdlibTest2, &stdlibTest3, NULL +}; + +/* Timer test suite (global) */ +SDLTest_TestSuiteReference stdlibTestSuite = { + "Stdlib", + NULL, + stdlibTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_suites.h b/Engine/lib/sdl/test/testautomation_suites.h new file mode 100644 index 0000000000..b5f921e3da --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_suites.h @@ -0,0 +1,54 @@ +/** + * Reference to all test suites. + * + */ + +#ifndef _testsuites_h +#define _testsuites_h + +#include "SDL_test.h" + +/* Test collections */ +extern SDLTest_TestSuiteReference audioTestSuite; +extern SDLTest_TestSuiteReference clipboardTestSuite; +extern SDLTest_TestSuiteReference eventsTestSuite; +extern SDLTest_TestSuiteReference keyboardTestSuite; +extern SDLTest_TestSuiteReference mainTestSuite; +extern SDLTest_TestSuiteReference mouseTestSuite; +extern SDLTest_TestSuiteReference pixelsTestSuite; +extern SDLTest_TestSuiteReference platformTestSuite; +extern SDLTest_TestSuiteReference rectTestSuite; +extern SDLTest_TestSuiteReference renderTestSuite; +extern SDLTest_TestSuiteReference rwopsTestSuite; +extern SDLTest_TestSuiteReference sdltestTestSuite; +extern SDLTest_TestSuiteReference stdlibTestSuite; +extern SDLTest_TestSuiteReference surfaceTestSuite; +extern SDLTest_TestSuiteReference syswmTestSuite; +extern SDLTest_TestSuiteReference timerTestSuite; +extern SDLTest_TestSuiteReference videoTestSuite; +extern SDLTest_TestSuiteReference hintsTestSuite; + +/* All test suites */ +SDLTest_TestSuiteReference *testSuites[] = { + &audioTestSuite, + &clipboardTestSuite, + &eventsTestSuite, + &keyboardTestSuite, + &mainTestSuite, + &mouseTestSuite, + &pixelsTestSuite, + &platformTestSuite, + &rectTestSuite, + &renderTestSuite, + &rwopsTestSuite, + &sdltestTestSuite, + &stdlibTestSuite, + &surfaceTestSuite, + &syswmTestSuite, + &timerTestSuite, + &videoTestSuite, + &hintsTestSuite, + NULL +}; + +#endif diff --git a/Engine/lib/sdl/test/testautomation_surface.c b/Engine/lib/sdl/test/testautomation_surface.c new file mode 100644 index 0000000000..ca41d4a0cd --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_surface.c @@ -0,0 +1,647 @@ +/** + * Original code: automated SDL surface test written by Edgar Simo "bobbens" + * Adapted/rewritten for test lib by Andreas Schiffler + */ + +/* Supress C4996 VS compiler warnings for unlink() */ +#define _CRT_SECURE_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE + +#include +#ifndef _MSC_VER +#include +#endif +#include + +#include "SDL.h" +#include "SDL_test.h" + +#ifdef __MACOSX__ +#include /* For unlink() */ +#endif + +/* ================= Test Case Implementation ================== */ + +/* Shared test surface */ + +static SDL_Surface *referenceSurface = NULL; +static SDL_Surface *testSurface = NULL; + +/* Helper functions for the test cases */ + +#define TEST_SURFACE_WIDTH testSurface->w +#define TEST_SURFACE_HEIGHT testSurface->h + +/* Fixture */ + +/* Create a 32-bit writable surface for blitting tests */ +void +_surfaceSetUp(void *arg) +{ + int result; + SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + SDL_BlendMode currentBlendMode; + Uint32 rmask, gmask, bmask, amask; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0xff000000; + gmask = 0x00ff0000; + bmask = 0x0000ff00; + amask = 0x000000ff; +#else + rmask = 0x000000ff; + gmask = 0x0000ff00; + bmask = 0x00ff0000; + amask = 0xff000000; +#endif + + referenceSurface = SDLTest_ImageBlit(); /* For size info */ + testSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, referenceSurface->w, referenceSurface->h, 32, rmask, gmask, bmask, amask); + SDLTest_AssertCheck(testSurface != NULL, "Check that testSurface is not NULL"); + if (testSurface != NULL) { + /* Disable blend mode for target surface */ + result = SDL_SetSurfaceBlendMode(testSurface, blendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result); + result = SDL_GetSurfaceBlendMode(testSurface, ¤tBlendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i", result); + SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %i, got: %i", blendMode, currentBlendMode); + } +} + +void +_surfaceTearDown(void *arg) +{ + SDL_FreeSurface(referenceSurface); + referenceSurface = NULL; + SDL_FreeSurface(testSurface); + testSurface = NULL; +} + +/** + * Helper that clears the test surface + */ +void _clearTestSurface() +{ + int ret; + Uint32 color; + + /* Clear surface. */ + color = SDL_MapRGBA( testSurface->format, 0, 0, 0, 0); + SDLTest_AssertPass("Call to SDL_MapRGBA()"); + ret = SDL_FillRect( testSurface, NULL, color); + SDLTest_AssertPass("Call to SDL_FillRect()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_FillRect, expected: 0, got: %i", ret); +} + +/** + * Helper that blits in a specific blend mode, -1 for basic blitting, -2 for color mod, -3 for alpha mod, -4 for mixed blend modes. + */ +void _testBlitBlendMode(int mode) +{ + int ret; + int i, j, ni, nj; + SDL_Surface *face; + SDL_Rect rect; + int nmode; + SDL_BlendMode bmode; + int checkFailCount1; + int checkFailCount2; + int checkFailCount3; + int checkFailCount4; + + /* Check test surface */ + SDLTest_AssertCheck(testSurface != NULL, "Verify testSurface is not NULL"); + if (testSurface == NULL) return; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) return; + + /* Reset alpha modulation */ + ret = SDL_SetSurfaceAlphaMod(face, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceAlphaMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceAlphaMod(), expected: 0, got: %i", ret); + + /* Reset color modulation */ + ret = SDL_SetSurfaceColorMod(face, 255, 255, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorMod(), expected: 0, got: %i", ret); + + /* Reset color key */ + ret = SDL_SetColorKey(face, SDL_FALSE, 0); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey(), expected: 0, got: %i", ret); + + /* Clear the test surface */ + _clearTestSurface(); + + /* Target rect size */ + rect.w = face->w; + rect.h = face->h; + + /* Steps to take */ + ni = testSurface->w - face->w; + nj = testSurface->h - face->h; + + /* Optionally set blend mode. */ + if (mode >= 0) { + ret = SDL_SetSurfaceBlendMode( face, (SDL_BlendMode)mode ); + SDLTest_AssertPass("Call to SDL_SetSurfaceBlendMode()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceBlendMode(..., %i), expected: 0, got: %i", mode, ret); + } + + /* Test blend mode. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + checkFailCount4 = 0; + for (j=0; j <= nj; j+=4) { + for (i=0; i <= ni; i+=4) { + if (mode == -2) { + /* Set color mod. */ + ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j ); + if (ret != 0) checkFailCount2++; + } + else if (mode == -3) { + /* Set alpha mod. */ + ret = SDL_SetSurfaceAlphaMod( face, (255/ni)*i ); + if (ret != 0) checkFailCount3++; + } + else if (mode == -4) { + /* Crazy blending mode magic. */ + nmode = (i/4*j/4) % 4; + if (nmode==0) { + bmode = SDL_BLENDMODE_NONE; + } else if (nmode==1) { + bmode = SDL_BLENDMODE_BLEND; + } else if (nmode==2) { + bmode = SDL_BLENDMODE_ADD; + } else if (nmode==3) { + bmode = SDL_BLENDMODE_MOD; + } + ret = SDL_SetSurfaceBlendMode( face, bmode ); + if (ret != 0) checkFailCount4++; + } + + /* Blitting. */ + rect.x = i; + rect.y = j; + ret = SDL_BlitSurface( face, NULL, testSurface, &rect ); + if (ret != 0) checkFailCount1++; + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_BlitSurface, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetSurfaceColorMod, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_SetSurfaceAlphaMod, expected: 0, got: %i", checkFailCount3); + SDLTest_AssertCheck(checkFailCount4 == 0, "Validate results from calls to SDL_SetSurfaceBlendMode, expected: 0, got: %i", checkFailCount4); + + /* Clean up */ + SDL_FreeSurface(face); + face = NULL; +} + +/* Helper to check that a file exists */ +void +_AssertFileExist(const char *filename) +{ + struct stat st; + int ret = stat(filename, &st); + + SDLTest_AssertCheck(ret == 0, "Verify file '%s' exists", filename); +} + + +/* Test case functions */ + +/** + * @brief Tests sprite saving and loading + */ +int +surface_testSaveLoadBitmap(void *arg) +{ + int ret; + const char *sampleFilename = "testSaveLoadBitmap.bmp"; + SDL_Surface *face; + SDL_Surface *rface; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) return TEST_ABORTED; + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Save a surface */ + ret = SDL_SaveBMP(face, sampleFilename); + SDLTest_AssertPass("Call to SDL_SaveBMP()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SaveBMP, expected: 0, got: %i", ret); + _AssertFileExist(sampleFilename); + + /* Load a surface */ + rface = SDL_LoadBMP(sampleFilename); + SDLTest_AssertPass("Call to SDL_LoadBMP()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_LoadBMP is not NULL"); + if (rface != NULL) { + SDLTest_AssertCheck(face->w == rface->w, "Verify width of loaded surface, expected: %i, got: %i", face->w, rface->w); + SDLTest_AssertCheck(face->h == rface->h, "Verify height of loaded surface, expected: %i, got: %i", face->h, rface->h); + } + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Clean up */ + SDL_FreeSurface(face); + face = NULL; + SDL_FreeSurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + +/* ! + * Tests surface conversion. + */ +int +surface_testSurfaceConversion(void *arg) +{ + SDL_Surface *rface = NULL, *face = NULL; + int ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) + return TEST_ABORTED; + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey, expected: 0, got: %i", ret); + } + + /* Convert to 32 bit to compare. */ + rface = SDL_ConvertSurface( face, testSurface->format, 0 ); + SDLTest_AssertPass("Call to SDL_ConvertSurface()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_ConvertSurface is not NULL"); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces( rface, face, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(face); + face = NULL; + SDL_FreeSurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + + +/* ! + * Tests surface conversion across all pixel formats. + */ +int +surface_testCompleteSurfaceConversion(void *arg) +{ + Uint32 pixel_formats[] = { + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_RGB888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_BGR888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010, + }; + SDL_Surface *face = NULL, *cvt1, *cvt2, *final; + SDL_PixelFormat *fmt1, *fmt2; + int i, j, ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) + return TEST_ABORTED; + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey, expected: 0, got: %i", ret); + } + + for ( i = 0; i < SDL_arraysize(pixel_formats); ++i ) { + for ( j = 0; j < SDL_arraysize(pixel_formats); ++j ) { + fmt1 = SDL_AllocFormat(pixel_formats[i]); + SDL_assert(fmt1 != NULL); + cvt1 = SDL_ConvertSurface(face, fmt1, 0); + SDL_assert(cvt1 != NULL); + + fmt2 = SDL_AllocFormat(pixel_formats[j]); + SDL_assert(fmt1 != NULL); + cvt2 = SDL_ConvertSurface(cvt1, fmt2, 0); + SDL_assert(cvt2 != NULL); + + if ( fmt1->BytesPerPixel == face->format->BytesPerPixel && + fmt2->BytesPerPixel == face->format->BytesPerPixel && + (fmt1->Amask != 0) == (face->format->Amask != 0) && + (fmt2->Amask != 0) == (face->format->Amask != 0) ) { + final = SDL_ConvertSurface( cvt2, face->format, 0 ); + SDL_assert(final != NULL); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces( face, final, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + SDL_FreeSurface(final); + } + + SDL_FreeSurface(cvt1); + SDL_FreeFormat(fmt1); + SDL_FreeSurface(cvt2); + SDL_FreeFormat(fmt2); + } + } + + /* Clean up. */ + SDL_FreeSurface( face ); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests sprite loading. A failure case. + */ +int +surface_testLoadFailure(void *arg) +{ + SDL_Surface *face = SDL_LoadBMP("nonexistant.bmp"); + SDLTest_AssertCheck(face == NULL, "SDL_CreateLoadBmp"); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines. + */ +int +surface_testBlit(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + _testBlitBlendMode(-1); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlit(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines with color mod + */ +int +surface_testBlitColorMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with color mod */ + _testBlitBlendMode(-2); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitColor(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines with alpha mod + */ +int +surface_testBlitAlphaMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with alpha mod */ + _testBlitBlendMode(-3); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitAlpha(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendNone(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + _testBlitBlendMode(SDL_BLENDMODE_NONE); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendNone(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendBlend(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Blend blitting */ + _testBlitBlendMode(SDL_BLENDMODE_BLEND); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlend(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendAdd(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Add blitting */ + _testBlitBlendMode(SDL_BLENDMODE_ADD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAdd(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Mod blitting */ + _testBlitBlendMode(SDL_BLENDMODE_MOD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendMod(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines with loop + */ +int +surface_testBlitBlendLoop(void *arg) { + + int ret; + SDL_Surface *compareSurface; + + /* All blitting modes */ + _testBlitBlendMode(-4); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAll(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; + +} + +/* ================= Test References ================== */ + +/* Surface test cases */ +static const SDLTest_TestCaseReference surfaceTest1 = + { (SDLTest_TestCaseFp)surface_testSaveLoadBitmap, "surface_testSaveLoadBitmap", "Tests sprite saving and loading.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest2 = + { (SDLTest_TestCaseFp)surface_testBlit, "surface_testBlit", "Tests basic blitting.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest3 = + { (SDLTest_TestCaseFp)surface_testBlitBlendNone, "surface_testBlitBlendNone", "Tests blitting routines with none blending mode.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest4 = + { (SDLTest_TestCaseFp)surface_testLoadFailure, "surface_testLoadFailure", "Tests sprite loading. A failure case.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest5 = + { (SDLTest_TestCaseFp)surface_testSurfaceConversion, "surface_testSurfaceConversion", "Tests surface conversion.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest6 = + { (SDLTest_TestCaseFp)surface_testCompleteSurfaceConversion, "surface_testCompleteSurfaceConversion", "Tests surface conversion across all pixel formats", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest7 = + { (SDLTest_TestCaseFp)surface_testBlitColorMod, "surface_testBlitColorMod", "Tests some blitting routines with color mod.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest8 = + { (SDLTest_TestCaseFp)surface_testBlitAlphaMod, "surface_testBlitAlphaMod", "Tests some blitting routines with alpha mod.", TEST_ENABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest9 = + { (SDLTest_TestCaseFp)surface_testBlitBlendLoop, "surface_testBlitBlendLoop", "Test blitting routines with various blending modes", TEST_DISABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest10 = + { (SDLTest_TestCaseFp)surface_testBlitBlendBlend, "surface_testBlitBlendBlend", "Tests blitting routines with blend blending mode.", TEST_DISABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest11 = + { (SDLTest_TestCaseFp)surface_testBlitBlendAdd, "surface_testBlitBlendAdd", "Tests blitting routines with add blending mode.", TEST_DISABLED}; + +static const SDLTest_TestCaseReference surfaceTest12 = + { (SDLTest_TestCaseFp)surface_testBlitBlendMod, "surface_testBlitBlendMod", "Tests blitting routines with mod blending mode.", TEST_ENABLED}; + +/* Sequence of Surface test cases */ +static const SDLTest_TestCaseReference *surfaceTests[] = { + &surfaceTest1, &surfaceTest2, &surfaceTest3, &surfaceTest4, &surfaceTest5, + &surfaceTest6, &surfaceTest7, &surfaceTest8, &surfaceTest9, &surfaceTest10, + &surfaceTest11, &surfaceTest12, NULL +}; + +/* Surface test suite (global) */ +SDLTest_TestSuiteReference surfaceTestSuite = { + "Surface", + _surfaceSetUp, + surfaceTests, + _surfaceTearDown + +}; diff --git a/Engine/lib/sdl/test/testautomation_syswm.c b/Engine/lib/sdl/test/testautomation_syswm.c new file mode 100644 index 0000000000..d9fd982b37 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_syswm.c @@ -0,0 +1,61 @@ +/** + * SysWM test suite + */ + +#include + +#include "SDL.h" +#include "SDL_syswm.h" +#include "SDL_test.h" + +/* Test case functions */ + +/** + * @brief Call to SDL_GetWindowWMInfo + */ +int +syswm_getWindowWMInfo(void *arg) +{ + SDL_bool result; + SDL_Window *window; + SDL_SysWMinfo info; + + window = SDL_CreateWindow("", 0, 0, 0, 0, SDL_WINDOW_HIDDEN); + SDLTest_AssertPass("Call to SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check that value returned from SDL_CreateWindow is not NULL"); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Initialize info structure with SDL version info */ + SDL_VERSION(&info.version); + + /* Make call */ + result = SDL_GetWindowWMInfo(window, &info); + SDLTest_AssertPass("Call to SDL_GetWindowWMInfo()"); + SDLTest_Log((result == SDL_TRUE) ? "Got window information" : "Couldn't get window information"); + + SDL_DestroyWindow(window); + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* SysWM test cases */ +static const SDLTest_TestCaseReference syswmTest1 = + { (SDLTest_TestCaseFp)syswm_getWindowWMInfo, "syswm_getWindowWMInfo", "Call to SDL_GetWindowWMInfo", TEST_ENABLED }; + +/* Sequence of SysWM test cases */ +static const SDLTest_TestCaseReference *syswmTests[] = { + &syswmTest1, NULL +}; + +/* SysWM test suite (global) */ +SDLTest_TestSuiteReference syswmTestSuite = { + "SysWM", + NULL, + syswmTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_timer.c b/Engine/lib/sdl/test/testautomation_timer.c new file mode 100644 index 0000000000..6d73856ee2 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_timer.c @@ -0,0 +1,201 @@ +/** + * Timer test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* Flag indicating if the param should be checked */ +int _paramCheck = 0; + +/* Userdata value to check */ +int _paramValue = 0; + +/* Flag indicating that the callback was called */ +int _timerCallbackCalled = 0; + +/* Fixture */ + +void +_timerSetUp(void *arg) +{ + /* Start SDL timer subsystem */ + int ret = SDL_InitSubSystem( SDL_INIT_TIMER ); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_TIMER)"); + SDLTest_AssertCheck(ret==0, "Check result from SDL_InitSubSystem(SDL_INIT_TIMER)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +/* Test case functions */ + +/** + * @brief Call to SDL_GetPerformanceCounter + */ +int +timer_getPerformanceCounter(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceCounter(); + SDLTest_AssertPass("Call to SDL_GetPerformanceCounter()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %"SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_GetPerformanceFrequency + */ +int +timer_getPerformanceFrequency(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceFrequency(); + SDLTest_AssertPass("Call to SDL_GetPerformanceFrequency()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %"SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_Delay and SDL_GetTicks + */ +int +timer_delayAndGetTicks(void *arg) +{ + const Uint32 testDelay = 100; + const Uint32 marginOfError = 25; + Uint32 result; + Uint32 result2; + Uint32 difference; + + /* Zero delay */ + SDL_Delay(0); + SDLTest_AssertPass("Call to SDL_Delay(0)"); + + /* Non-zero delay */ + SDL_Delay(1); + SDLTest_AssertPass("Call to SDL_Delay(1)"); + + SDL_Delay(SDLTest_RandomIntegerInRange(5, 15)); + SDLTest_AssertPass("Call to SDL_Delay()"); + + /* Get ticks count - should be non-zero by now */ + result = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %d", result); + + /* Delay a bit longer and measure ticks and verify difference */ + SDL_Delay(testDelay); + SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay); + result2 = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %d", result2); + difference = result2 - result; + SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %d", testDelay - marginOfError, difference); + SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %d", testDelay + marginOfError, difference); + + return TEST_COMPLETED; +} + +/* Test callback */ +Uint32 _timerTestCallback(Uint32 interval, void *param) +{ + _timerCallbackCalled = 1; + + if (_paramCheck != 0) { + SDLTest_AssertCheck(param != NULL, "Check param pointer, expected: non-NULL, got: %s", (param != NULL) ? "non-NULL" : "NULL"); + if (param != NULL) { + SDLTest_AssertCheck(*(int *)param == _paramValue, "Check param value, expected: %i, got: %i", _paramValue, *(int *)param); + } + } + + return 0; +} + +/** + * @brief Call to SDL_AddTimer and SDL_RemoveTimer + */ +int +timer_addRemoveTimer(void *arg) +{ + SDL_TimerID id; + SDL_bool result; + int param; + + /* Reset state */ + _paramCheck = 0; + _timerCallbackCalled = 0; + + /* Set timer with a long delay */ + id = SDL_AddTimer(10000, _timerTestCallback, NULL); + SDLTest_AssertPass("Call to SDL_AddTimer(10000,...)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Remove timer again and check that callback was not called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Check result value, expected: %i, got: %i", SDL_TRUE, result); + SDLTest_AssertCheck(_timerCallbackCalled == 0, "Check callback WAS NOT called, expected: 0, got: %i", _timerCallbackCalled); + + /* Try to remove timer again (should be a NOOP) */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + + /* Reset state */ + param = SDLTest_RandomIntegerInRange(-1024, 1024); + _paramCheck = 1; + _paramValue = param; + _timerCallbackCalled = 0; + + /* Set timer with a short delay */ + id = SDL_AddTimer(10, _timerTestCallback, (void *)¶m); + SDLTest_AssertPass("Call to SDL_AddTimer(10, param)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Wait to let timer trigger callback */ + SDL_Delay(100); + SDLTest_AssertPass("Call to SDL_Delay(100)"); + + /* Remove timer again and check that callback was called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + SDLTest_AssertCheck(_timerCallbackCalled == 1, "Check callback WAS called, expected: 1, got: %i", _timerCallbackCalled); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Timer test cases */ +static const SDLTest_TestCaseReference timerTest1 = + { (SDLTest_TestCaseFp)timer_getPerformanceCounter, "timer_getPerformanceCounter", "Call to SDL_GetPerformanceCounter", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest2 = + { (SDLTest_TestCaseFp)timer_getPerformanceFrequency, "timer_getPerformanceFrequency", "Call to SDL_GetPerformanceFrequency", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest3 = + { (SDLTest_TestCaseFp)timer_delayAndGetTicks, "timer_delayAndGetTicks", "Call to SDL_Delay and SDL_GetTicks", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest4 = + { (SDLTest_TestCaseFp)timer_addRemoveTimer, "timer_addRemoveTimer", "Call to SDL_AddTimer and SDL_RemoveTimer", TEST_ENABLED }; + +/* Sequence of Timer test cases */ +static const SDLTest_TestCaseReference *timerTests[] = { + &timerTest1, &timerTest2, &timerTest3, &timerTest4, NULL +}; + +/* Timer test suite (global) */ +SDLTest_TestSuiteReference timerTestSuite = { + "Timer", + _timerSetUp, + timerTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_video.c b/Engine/lib/sdl/test/testautomation_video.c new file mode 100644 index 0000000000..7b86cfba90 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_video.c @@ -0,0 +1,1811 @@ +/** + * Video test suite + */ + +#include +#include + +/* Visual Studio 2008 doesn't have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER <= 1500 +#define UINT8_MAX ~(Uint8)0 +#define UINT16_MAX ~(Uint16)0 +#define UINT32_MAX ~(Uint32)0 +#define UINT64_MAX ~(Uint64)0 +#else +#include +#endif + +#include "SDL.h" +#include "SDL_test.h" + +/* Private helpers */ + +/* + * Create a test window + */ +SDL_Window *_createVideoSuiteTestWindow(const char *title) +{ + SDL_Window* window; + int x, y, w, h; + SDL_WindowFlags flags; + + /* Standard window */ + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + + window = SDL_CreateWindow(title, x, y, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + return window; +} + +/* + * Destroy test window + */ +void _destroyVideoSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + } +} + +/* Test case functions */ + +/** + * @brief Enable and disable screensaver while checking state + */ +int +video_enableDisableScreensaver(void *arg) +{ + SDL_bool initialResult; + SDL_bool result; + + /* Get current state and proceed according to current state */ + initialResult = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + if (initialResult == SDL_TRUE) { + + /* Currently enabled: disable first, then enable again */ + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + } else { + + /* Currently disabled: enable first, then disable again */ + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different positions + */ +int +video_createWindowVariousPositions(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousPositions Test Window"; + int x, y, w, h; + int xVariation, yVariation; + + for (xVariation = 0; xVariation < 6; xVariation++) { + for (yVariation = 0; yVariation < 6; yVariation++) { + switch(xVariation) { + case 0: + /* Zero X Position */ + x = 0; + break; + case 1: + /* Random X position inside screen */ + x = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + x = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random X position outside screen (negative) */ + x = SDLTest_RandomIntegerInRange(-1000, -100); + break; + case 4: + /* Centered X position */ + x = SDL_WINDOWPOS_CENTERED; + break; + case 5: + /* Undefined X position */ + x = SDL_WINDOWPOS_UNDEFINED; + break; + } + + switch(yVariation) { + case 0: + /* Zero X Position */ + y = 0; + break; + case 1: + /* Random X position inside screen */ + y = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + y = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random Y position outside screen (negative) */ + y = SDLTest_RandomIntegerInRange(-1000, -100); + break; + case 4: + /* Centered Y position */ + y = SDL_WINDOWPOS_CENTERED; + break; + case 5: + /* Undefined Y position */ + y = SDL_WINDOWPOS_UNDEFINED; + break; + } + + w = SDLTest_RandomIntegerInRange(32, 96); + h = SDLTest_RandomIntegerInRange(32, 96); + window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different sizes + */ +int +video_createWindowVariousSizes(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousSizes Test Window"; + int x, y, w, h; + int wVariation, hVariation; + + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch(wVariation) { + case 0: + /* Width of 1 */ + w = 1; + break; + case 1: + /* Random "normal" width */ + w = SDLTest_RandomIntegerInRange(320, 1920); + break; + case 2: + /* Random "large" width */ + w = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + switch(hVariation) { + case 0: + /* Height of 1 */ + h = 1; + break; + case 1: + /* Random "normal" height */ + h = SDLTest_RandomIntegerInRange(320, 1080); + break; + case 2: + /* Random "large" height */ + h = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different flags + */ +int +video_createWindowVariousFlags(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousFlags Test Window"; + int x, y, w, h; + int fVariation; + SDL_WindowFlags flags; + + /* Standard window */ + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + + for (fVariation = 0; fVariation < 13; fVariation++) { + switch(fVariation) { + case 0: + flags = SDL_WINDOW_FULLSCREEN; + /* Skip - blanks screen; comment out next line to run test */ + continue; + break; + case 1: + flags = SDL_WINDOW_FULLSCREEN_DESKTOP; + /* Skip - blanks screen; comment out next line to run test */ + continue; + break; + case 2: + flags = SDL_WINDOW_OPENGL; + break; + case 3: + flags = SDL_WINDOW_SHOWN; + break; + case 4: + flags = SDL_WINDOW_HIDDEN; + break; + case 5: + flags = SDL_WINDOW_BORDERLESS; + break; + case 6: + flags = SDL_WINDOW_RESIZABLE; + break; + case 7: + flags = SDL_WINDOW_MINIMIZED; + break; + case 8: + flags = SDL_WINDOW_MAXIMIZED; + break; + case 9: + flags = SDL_WINDOW_INPUT_GRABBED; + break; + case 10: + flags = SDL_WINDOW_INPUT_FOCUS; + break; + case 11: + flags = SDL_WINDOW_MOUSE_FOCUS; + break; + case 12: + flags = SDL_WINDOW_FOREIGN; + break; + } + + window = SDL_CreateWindow(title, x, y, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + + return TEST_COMPLETED; +} + + +/** + * @brief Tests the functionality of the SDL_GetWindowFlags function + */ +int +video_getWindowFlags(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowFlags Test Window"; + SDL_WindowFlags flags; + Uint32 actualFlags; + + /* Reliable flag set always set in test window */ + flags = SDL_WINDOW_SHOWN; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + actualFlags = SDL_GetWindowFlags(window); + SDLTest_AssertPass("Call to SDL_GetWindowFlags()"); + SDLTest_AssertCheck((flags & actualFlags) == flags, "Verify returned value has flags %d set, got: %d", flags, actualFlags); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetNumDisplayModes function + */ +int +video_getNumDisplayModes(void *arg) +{ + int result; + int displayNum; + int i; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make call for each display */ + for (i=0; i= 1, "Validate returned value from function; expected: >=1; got: %d", result); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests negative call to SDL_GetNumDisplayModes function + */ +int +video_getNumDisplayModesNegative(void *arg) +{ + int result; + int displayNum; + int displayIndex; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Invalid boundary values */ + displayIndex = SDLTest_RandomSint32BoundaryValue(0, displayNum, SDL_FALSE); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/boundary)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + /* Large (out-of-bounds) display index */ + displayIndex = SDLTest_RandomIntegerInRange(-2000, -1000); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large negative)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + displayIndex = SDLTest_RandomIntegerInRange(1000, 2000); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large positive)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetClosestDisplayMode function against current resolution + */ +int +video_getClosestDisplayModeCurrentResolution(void *arg) +{ + int result; + SDL_DisplayMode current; + SDL_DisplayMode target; + SDL_DisplayMode closest; + SDL_DisplayMode* dResult; + int displayNum; + int i; + int variation; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make calls for each display */ + for (i=0; iw, "Verify return value matches assigned value; expected: %d, got: %d", closest.w, dResult->w); + SDLTest_AssertCheck(closest.h == dResult->h, "Verify return value matches assigned value; expected: %d, got: %d", closest.h, dResult->h); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetClosestDisplayMode function against random resolution + */ +int +video_getClosestDisplayModeRandomResolution(void *arg) +{ + SDL_DisplayMode target; + SDL_DisplayMode closest; + SDL_DisplayMode* dResult; + int displayNum; + int i; + int variation; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make calls for each display */ + for (i=0; i= 0.0 && result <= 1.0, "Validate range of result value; expected: [0.0, 1.0], got: %f", result); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowBrightness with invalid input + * +* @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowBrightness + */ +int +video_getWindowBrightnessNegative(void *arg) +{ + const char *invalidWindowError = "Invalid window"; + char *lastError; + float result; + + /* Call against invalid window */ + result = SDL_GetWindowBrightness(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowBrightness(window=NULL)"); + SDLTest_AssertCheck(result == 1.0, "Validate result value; expected: 1.0, got: %f", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, invalidWindowError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + invalidWindowError, + lastError); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowDisplayMode + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowDisplayMode + */ +int +video_getWindowDisplayMode(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowDisplayMode Test Window"; + SDL_DisplayMode mode; + int result; + + /* Invalidate part of the mode content so we can check values later */ + mode.w = -1; + mode.h = -1; + mode.refresh_rate = -1; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + result = SDL_GetWindowDisplayMode(window, &mode); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode()"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + SDLTest_AssertCheck(mode.w > 0, "Validate mode.w content; expected: >0, got: %d", mode.w); + SDLTest_AssertCheck(mode.h > 0, "Validate mode.h content; expected: >0, got: %d", mode.h); + SDLTest_AssertCheck(mode.refresh_rate > 0, "Validate mode.refresh_rate content; expected: >0, got: %d", mode.refresh_rate); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid window' error */ +void _checkInvalidWindowError() +{ + const char *invalidWindowError = "Invalid window"; + char *lastError; + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, invalidWindowError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + invalidWindowError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Tests call to SDL_GetWindowDisplayMode with invalid input + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowDisplayMode + */ +int +video_getWindowDisplayModeNegative(void *arg) +{ + const char *expectedError = "Parameter 'mode' is invalid"; + char *lastError; + SDL_Window* window; + const char* title = "video_getWindowDisplayModeNegative Test Window"; + SDL_DisplayMode mode; + int result; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + result = SDL_GetWindowDisplayMode(window, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode(...,mode=NULL)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %d", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Call against invalid window */ + result = SDL_GetWindowDisplayMode(NULL, &mode); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode(window=NULL,...)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %d", result); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowGammaRamp + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGammaRamp + */ +int +video_getWindowGammaRamp(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowGammaRamp Test Window"; + Uint16 red[256]; + Uint16 green[256]; + Uint16 blue[256]; + int result; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Retrieve no channel */ + result = SDL_GetWindowGammaRamp(window, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(all NULL)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve single channel */ + result = SDL_GetWindowGammaRamp(window, red, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, green, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(g)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, NULL, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve two channels */ + result = SDL_GetWindowGammaRamp(window, red, green, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r, g)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(g,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, red, NULL, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve all channels */ + result = SDL_GetWindowGammaRamp(window, red, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r,g,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowGammaRamp with invalid input + * +* @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGammaRamp + */ +int +video_getWindowGammaRampNegative(void *arg) +{ + Uint16 red[256]; + Uint16 green[256]; + Uint16 blue[256]; + int result; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Call against invalid window */ + result = SDL_GetWindowGammaRamp(NULL, red, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(window=NULL,r,g,b)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %i", result); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper for setting and checking the window grab state */ +void +_setAndCheckWindowGrabState(SDL_Window* window, SDL_bool desiredState) +{ + SDL_bool currentState; + + /* Set state */ + SDL_SetWindowGrab(window, desiredState); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(%s)", (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Get and check state */ + currentState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); +} + +/** + * @brief Tests call to SDL_GetWindowGrab and SDL_SetWindowGrab + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGrab + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowGrab + */ +int +video_getSetWindowGrab(void *arg) +{ + const char* title = "video_getSetWindowGrab Test Window"; + SDL_Window* window; + SDL_bool originalState, dummyState, currentState, desiredState; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get state */ + originalState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + + /* F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* F --> F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* F --> T */ + _setAndCheckWindowGrabState(window, SDL_TRUE); + + /* T --> T */ + _setAndCheckWindowGrabState(window, SDL_TRUE); + + /* T --> F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* Negative tests */ + dummyState = SDL_GetWindowGrab(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGrab(window=NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_FALSE)"); + _checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_FALSE)"); + _checkInvalidWindowError(); + + /* State should still be F */ + desiredState = SDL_FALSE; + currentState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Restore state */ + _setAndCheckWindowGrabState(window, originalState); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests call to SDL_GetWindowID and SDL_GetWindowFromID + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowID + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowFromID + */ +int +video_getWindowId(void *arg) +{ + const char* title = "video_getWindowId Test Window"; + SDL_Window* window; + SDL_Window* result; + Uint32 id, randomId; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get ID */ + id = SDL_GetWindowID(window); + SDLTest_AssertPass("Call to SDL_GetWindowID()"); + + /* Get window from ID */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d)", id); + SDLTest_AssertCheck(result == window, "Verify result matches window pointer"); + + /* Get window from random large ID, no result check */ + randomId = SDLTest_RandomIntegerInRange(UINT8_MAX,UINT16_MAX); + result = SDL_GetWindowFromID(randomId); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d/random_large)", randomId); + + /* Get window from 0 and Uint32 max ID, no result check */ + result = SDL_GetWindowFromID(0); + SDLTest_AssertPass("Call to SDL_GetWindowID(0)"); + result = SDL_GetWindowFromID(UINT32_MAX); + SDLTest_AssertPass("Call to SDL_GetWindowID(UINT32_MAX)"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Get window from ID for closed window */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d/closed_window)", id); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + id = SDL_GetWindowID(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowID(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowPixelFormat + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowPixelFormat + */ +int +video_getWindowPixelFormat(void *arg) +{ + const char* title = "video_getWindowPixelFormat Test Window"; + SDL_Window* window; + Uint32 format; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get format */ + format = SDL_GetWindowPixelFormat(window); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat()"); + SDLTest_AssertCheck(format != SDL_PIXELFORMAT_UNKNOWN, "Verify that returned format is valid; expected: != %d, got: %d", SDL_PIXELFORMAT_UNKNOWN, format); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = SDL_GetWindowPixelFormat(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowPosition and SDL_SetWindowPosition + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowPosition + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowPosition + */ +int +video_getSetWindowPosition(void *arg) +{ + const char* title = "video_getSetWindowPosition Test Window"; + SDL_Window* window; + int xVariation, yVariation; + int referenceX, referenceY; + int currentX, currentY; + int desiredX, desiredY; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (xVariation = 0; xVariation < 4; xVariation++) { + for (yVariation = 0; yVariation < 4; yVariation++) { + switch(xVariation) { + case 0: + /* Zero X Position */ + desiredX = 0; + break; + case 1: + /* Random X position inside screen */ + desiredX = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredX = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random X position outside screen (negative) */ + desiredX = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + switch(yVariation) { + case 0: + /* Zero X Position */ + desiredY = 0; + break; + case 1: + /* Random X position inside screen */ + desiredY = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredY = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random Y position outside screen (negative) */ + desiredY = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + /* Set position */ + SDL_SetWindowPosition(window, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(...,%d,%d)", desiredX, desiredY); + + /* Get position */ + currentX = desiredX + 1; + currentY = desiredY + 1; + SDL_GetWindowPosition(window, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition()"); + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + + /* Get position X */ + currentX = desiredX + 1; + SDL_GetWindowPosition(window, ¤tX, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&y=NULL)"); + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + + /* Get position Y */ + currentY = desiredY + 1; + SDL_GetWindowPosition(window, NULL, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL)"); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowPosition(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL,&y=NULL)"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceX = SDLTest_RandomSint32(); + referenceY = SDLTest_RandomSint32(); + currentX = referenceX; + currentY = referenceY; + desiredX = SDLTest_RandomSint32(); + desiredY = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowPosition(NULL, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(window=NULL)"); + SDLTest_AssertCheck( + currentX == referenceX && currentY == referenceY, + "Verify that content of X and Y pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceX, referenceY, + currentX, currentY); + _checkInvalidWindowError(); + + SDL_GetWindowPosition(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowPosition(NULL, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid parameter' error */ +void _checkInvalidParameterError() +{ + const char *invalidParameterError = "Parameter"; + char *lastError; + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strncmp(lastError, invalidParameterError, SDL_strlen(invalidParameterError)) == 0, + "SDL_GetError(): expected message starts with '%s', was message: '%s'", + invalidParameterError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Tests call to SDL_GetWindowSize and SDL_SetWindowSize + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowSize + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowSize + */ +int +video_getSetWindowSize(void *arg) +{ + const char* title = "video_getSetWindowSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int maxwVariation, maxhVariation; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + +#ifdef __WIN32__ + /* Platform clips window size to screen size */ + maxwVariation = 4; + maxhVariation = 4; +#else + /* Platform allows window size >= screen size */ + maxwVariation = 5; + maxhVariation = 5; +#endif + + for (wVariation = 0; wVariation < maxwVariation; wVariation++) { + for (hVariation = 0; hVariation < maxhVariation; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Width 1 pixel smaller than screen */ + desiredW = display.w - 1; + break; + case 3: + /* Width at screen size */ + desiredW = display.w; + break; + case 4: + /* Width 1 pixel larger than screen */ + desiredW = display.w + 1; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Height 1 pixel smaller than screen */ + desiredH = display.h - 1; + break; + case 3: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize + * + */ +int +video_getSetWindowMinimumSize(void *arg) +{ + const char* title = "video_getSetWindowMinimumSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (wVariation = 0; wVariation < 5; wVariation++) { + for (hVariation = 0; hVariation < 5; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMinimumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMinimumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMinimumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowMinimumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowMinimumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize + * + */ +int +video_getSetWindowMaximumSize(void *arg) +{ + const char* title = "video_getSetWindowMaximumSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + } + + /* Set size */ + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMaximumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMaximumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMaximumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowMaximumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowMaximumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests call to SDL_SetWindowData and SDL_GetWindowData + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowData + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowData + */ +int +video_getSetWindowData(void *arg) +{ + int returnValue = TEST_COMPLETED; + const char* title = "video_setGetWindowData Test Window"; + SDL_Window* window; + const char *referenceName = "TestName"; + const char *name = "TestName"; + const char *referenceName2 = "TestName2"; + const char *name2 = "TestName2"; + int datasize; + char *referenceUserdata = NULL; + char *userdata = NULL; + char *referenceUserdata2 = NULL; + char *userdata2 = NULL; + char *result; + int iteration; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Create testdata */ + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata = SDL_strdup(referenceUserdata); + if (userdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata2 = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata2 = (char *)SDL_strdup(referenceUserdata2); + if (userdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + + /* Get non-existent data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data */ + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s)", name, userdata); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (twice) */ + for (iteration = 1; iteration <= 2; iteration++) { + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [iteration %d]", name, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + } + + /* Set data again twice */ + for (iteration = 1; iteration <= 2; iteration++) { + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [iteration %d]", name, userdata, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + } + + /* Get data again */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with new data */ + result = (char *)SDL_SetWindowData(window, name, userdata2); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with new data again */ + result = (char *)SDL_SetWindowData(window, name, userdata2); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata again]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get new data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with NULL to clear */ + result = (char *)SDL_SetWindowData(window, name, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with NULL to clear again */ + result = (char *)SDL_SetWindowData(window, name, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL) [again]", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get non-existent data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Get non-existent data new name */ + result = (char *)SDL_GetWindowData(window, name2); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name2); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName2, name2) == 0, "Validate that name2 was not changed, expected: %s, got: %s", referenceName2, name2); + + /* Set data (again) */ + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [again, after clear]", name, userdata); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (again) */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again, after clear]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Set with invalid window */ + result = (char *)SDL_SetWindowData(NULL, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(window=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidWindowError(); + + /* Set data with NULL name, valid userdata */ + result = (char *)SDL_SetWindowData(window, NULL, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with empty name, valid userdata */ + result = (char *)SDL_SetWindowData(window, "", userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='')"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with NULL name, NULL userdata */ + result = (char *)SDL_SetWindowData(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL,userdata=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with empty name, NULL userdata */ + result = (char *)SDL_SetWindowData(window, "", NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='',userdata=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Get with invalid window */ + result = (char *)SDL_GetWindowData(NULL, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(window=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidWindowError(); + + /* Get data with NULL name */ + result = (char *)SDL_GetWindowData(window, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowData(name=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Get data with empty name */ + result = (char *)SDL_GetWindowData(window, ""); + SDLTest_AssertPass("Call to SDL_GetWindowData(name='')"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + cleanup: + SDL_free(referenceUserdata); + SDL_free(referenceUserdata2); + SDL_free(userdata); + SDL_free(userdata2); + + return returnValue; +} + + +/* ================= Test References ================== */ + +/* Video test cases */ +static const SDLTest_TestCaseReference videoTest1 = + { (SDLTest_TestCaseFp)video_enableDisableScreensaver, "video_enableDisableScreensaver", "Enable and disable screenaver while checking state", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest2 = + { (SDLTest_TestCaseFp)video_createWindowVariousPositions, "video_createWindowVariousPositions", "Create windows at various locations", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest3 = + { (SDLTest_TestCaseFp)video_createWindowVariousSizes, "video_createWindowVariousSizes", "Create windows with various sizes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest4 = + { (SDLTest_TestCaseFp)video_createWindowVariousFlags, "video_createWindowVariousFlags", "Create windows using various flags", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest5 = + { (SDLTest_TestCaseFp)video_getWindowFlags, "video_getWindowFlags", "Get window flags set during SDL_CreateWindow", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest6 = + { (SDLTest_TestCaseFp)video_getNumDisplayModes, "video_getNumDisplayModes", "Use SDL_GetNumDisplayModes function to get number of display modes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest7 = + { (SDLTest_TestCaseFp)video_getNumDisplayModesNegative, "video_getNumDisplayModesNegative", "Negative tests for SDL_GetNumDisplayModes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest8 = + { (SDLTest_TestCaseFp)video_getClosestDisplayModeCurrentResolution, "video_getClosestDisplayModeCurrentResolution", "Use function to get closes match to requested display mode for current resolution", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest9 = + { (SDLTest_TestCaseFp)video_getClosestDisplayModeRandomResolution, "video_getClosestDisplayModeRandomResolution", "Use function to get closes match to requested display mode for random resolution", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest10 = + { (SDLTest_TestCaseFp)video_getWindowBrightness, "video_getWindowBrightness", "Get window brightness", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest11 = + { (SDLTest_TestCaseFp)video_getWindowBrightnessNegative, "video_getWindowBrightnessNegative", "Get window brightness with invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest12 = + { (SDLTest_TestCaseFp)video_getWindowDisplayMode, "video_getWindowDisplayMode", "Get window display mode", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest13 = + { (SDLTest_TestCaseFp)video_getWindowDisplayModeNegative, "video_getWindowDisplayModeNegative", "Get window display mode with invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest14 = + { (SDLTest_TestCaseFp)video_getWindowGammaRamp, "video_getWindowGammaRamp", "Get window gamma ramp", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest15 = + { (SDLTest_TestCaseFp)video_getWindowGammaRampNegative, "video_getWindowGammaRampNegative", "Get window gamma ramp against invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest16 = + { (SDLTest_TestCaseFp)video_getSetWindowGrab, "video_getSetWindowGrab", "Checks SDL_GetWindowGrab and SDL_SetWindowGrab positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest17 = + { (SDLTest_TestCaseFp)video_getWindowId, "video_getWindowId", "Checks SDL_GetWindowID and SDL_GetWindowFromID", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest18 = + { (SDLTest_TestCaseFp)video_getWindowPixelFormat, "video_getWindowPixelFormat", "Checks SDL_GetWindowPixelFormat", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest19 = + { (SDLTest_TestCaseFp)video_getSetWindowPosition, "video_getSetWindowPosition", "Checks SDL_GetWindowPosition and SDL_SetWindowPosition positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest20 = + { (SDLTest_TestCaseFp)video_getSetWindowSize, "video_getSetWindowSize", "Checks SDL_GetWindowSize and SDL_SetWindowSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest21 = + { (SDLTest_TestCaseFp)video_getSetWindowMinimumSize, "video_getSetWindowMinimumSize", "Checks SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest22 = + { (SDLTest_TestCaseFp)video_getSetWindowMaximumSize, "video_getSetWindowMaximumSize", "Checks SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest23 = + { (SDLTest_TestCaseFp)video_getSetWindowData, "video_getSetWindowData", "Checks SDL_SetWindowData and SDL_GetWindowData positive and negative cases", TEST_ENABLED }; + +/* Sequence of Video test cases */ +static const SDLTest_TestCaseReference *videoTests[] = { + &videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, &videoTest6, + &videoTest7, &videoTest8, &videoTest9, &videoTest10, &videoTest11, &videoTest12, + &videoTest13, &videoTest14, &videoTest15, &videoTest16, &videoTest17, + &videoTest18, &videoTest19, &videoTest20, &videoTest21, &videoTest22, + &videoTest23, NULL +}; + +/* Video test suite (global) */ +SDLTest_TestSuiteReference videoTestSuite = { + "Video", + NULL, + videoTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testdisplayinfo.c b/Engine/lib/sdl/test/testdisplayinfo.c new file mode 100644 index 0000000000..c228eb6b2d --- /dev/null +++ b/Engine/lib/sdl/test/testdisplayinfo.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to test querying of display info */ + +#include "SDL.h" + +#include +#include + +static void +print_mode(const char *prefix, const SDL_DisplayMode *mode) +{ + if (!mode) + return; + + SDL_Log("%s: fmt=%s w=%d h=%d refresh=%d\n", + prefix, SDL_GetPixelFormatName(mode->format), + mode->w, mode->h, mode->refresh_rate); +} + +int +main(int argc, char *argv[]) +{ + SDL_DisplayMode mode; + int num_displays, dpy; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_Log("Using video target '%s'.\n", SDL_GetCurrentVideoDriver()); + num_displays = SDL_GetNumVideoDisplays(); + + SDL_Log("See %d displays.\n", num_displays); + + for (dpy = 0; dpy < num_displays; dpy++) { + const int num_modes = SDL_GetNumDisplayModes(dpy); + SDL_Rect rect = { 0, 0, 0, 0 }; + int m; + + SDL_GetDisplayBounds(dpy, &rect); + SDL_Log("%d: \"%s\" (%dx%d, (%d, %d)), %d modes.\n", dpy, SDL_GetDisplayName(dpy), rect.w, rect.h, rect.x, rect.y, num_modes); + + if (SDL_GetCurrentDisplayMode(dpy, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " CURRENT: failed to query (%s)\n", SDL_GetError()); + } else { + print_mode("CURRENT", &mode); + } + + if (SDL_GetDesktopDisplayMode(dpy, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " DESKTOP: failed to query (%s)\n", SDL_GetError()); + } else { + print_mode("DESKTOP", &mode); + } + + for (m = 0; m < num_modes; m++) { + if (SDL_GetDisplayMode(dpy, m, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " MODE %d: failed to query (%s)\n", m, SDL_GetError()); + } else { + char prefix[64]; + SDL_snprintf(prefix, sizeof (prefix), " MODE %d", m); + print_mode(prefix, &mode); + } + } + + SDL_Log("\n"); + } + + SDL_Quit(); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/test/testdraw2.c b/Engine/lib/sdl/test/testdraw2.c new file mode 100644 index 0000000000..77bd8c1fe6 --- /dev/null +++ b/Engine/lib/sdl/test/testdraw2.c @@ -0,0 +1,305 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + +int done; + +void +DrawPoints(SDL_Renderer * renderer) +{ + int i; + int x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + x = rand() % viewport.w; + y = rand() % viewport.h; + SDL_RenderDrawPoint(renderer, x, y); + } +} + +void +DrawLines(SDL_Renderer * renderer) +{ + int i; + int x1, y1, x2, y2; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + if (i == 0) { + SDL_RenderDrawLine(renderer, 0, 0, viewport.w - 1, viewport.h - 1); + SDL_RenderDrawLine(renderer, 0, viewport.h - 1, viewport.w - 1, 0); + SDL_RenderDrawLine(renderer, 0, viewport.h / 2, viewport.w - 1, viewport.h / 2); + SDL_RenderDrawLine(renderer, viewport.w / 2, 0, viewport.w / 2, viewport.h - 1); + } else { + x1 = (rand() % (viewport.w*2)) - viewport.w; + x2 = (rand() % (viewport.w*2)) - viewport.w; + y1 = (rand() % (viewport.h*2)) - viewport.h; + y2 = (rand() % (viewport.h*2)) - viewport.h; + SDL_RenderDrawLine(renderer, x1, y1, x2, y2); + } + } +} + +void +DrawRects(SDL_Renderer * renderer) +{ + int i; + SDL_Rect rect; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects / 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + rect.w = rand() % (viewport.h / 2); + rect.h = rand() % (viewport.h / 2); + rect.x = (rand() % (viewport.w*2) - viewport.w) - (rect.w / 2); + rect.y = (rand() % (viewport.h*2) - viewport.h) - (rect.h / 2); + SDL_RenderFillRect(renderer, &rect); + } +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawLines(renderer); + DrawPoints(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + num_objects = NUM_OBJECTS; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_objects = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha]\n", + argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + + SDLTest_CommonQuit(state); + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testdrawchessboard.c b/Engine/lib/sdl/test/testdrawchessboard.c new file mode 100644 index 0000000000..f2a1469d47 --- /dev/null +++ b/Engine/lib/sdl/test/testdrawchessboard.c @@ -0,0 +1,135 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. + + This file is created by : Nitin Jain (nitin.j4@samsung.com) +*/ + +/* Sample program: Draw a Chess Board by using SDL_CreateSoftwareRenderer API */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +SDL_Window *window; +SDL_Renderer *renderer; +int done; + +void +DrawChessBoard(SDL_Renderer * renderer) +{ + int row = 0,column = 0,x = 0; + SDL_Rect rect, darea; + + /* Get the Size of drawing surface */ + SDL_RenderGetViewport(renderer, &darea); + + for( ; row < 8; row++) + { + column = row%2; + x = column; + for( ; column < 4+(row%2); column++) + { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF); + + rect.w = darea.w/8; + rect.h = darea.h/8; + rect.x = x * rect.w; + rect.y = row * rect.h; + x = x + 2; + SDL_RenderFillRect(renderer, &rect); + } + } +} + +void +loop() +{ + SDL_Event e; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + + if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + } + + DrawChessBoard(renderer); + + /* Got everything on rendering surface, + now Update the drawing image on window screen */ + SDL_UpdateWindowSurface(window); +} + +int +main(int argc, char *argv[]) +{ + SDL_Surface *surface; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL */ + if(SDL_Init(SDL_INIT_VIDEO) != 0) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError()); + return 1; + } + + + /* Create window and renderer for given surface */ + window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); + if(!window) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError()); + return 1; + } + surface = SDL_GetWindowSurface(window); + renderer = SDL_CreateSoftwareRenderer(surface); + if(!renderer) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError()); + return 1; + } + + /* Clear the rendering surface with the specified color */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + + + /* Draw the Image on rendering surface */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_Quit(); + return 0; +} + diff --git a/Engine/lib/sdl/test/testdropfile.c b/Engine/lib/sdl/test/testdropfile.c new file mode 100644 index 0000000000..b7f215ee81 --- /dev/null +++ b/Engine/lib/sdl/test/testdropfile.c @@ -0,0 +1,93 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include + +#include "SDL_test_common.h" + +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +int +main(int argc, char *argv[]) +{ + int i, done; + SDL_Event event; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + /* needed voodoo to allow app to launch via OS X Finder */ + if (SDL_strncmp(argv[i], "-psn", 4)==0) { + consumed = 1; + } + if (consumed == 0) { + consumed = -1; + } + if (consumed < 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + } + + SDL_EventState(SDL_DROPFILE, SDL_ENABLE); + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + if (event.type == SDL_DROPFILE) { + char *dropped_filedir = event.drop.file; + SDL_Log("File dropped on window: %s", dropped_filedir); + SDL_free(dropped_filedir); + } + } + } + + quit(0); + /* keep the compiler happy ... */ + return(0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testerror.c b/Engine/lib/sdl/test/testerror.c new file mode 100644 index 0000000000..b5fa3fbc08 --- /dev/null +++ b/Engine/lib/sdl/test/testerror.c @@ -0,0 +1,77 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code and error handling */ + +#include +#include +#include + +#include "SDL.h" + +static int alive = 0; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +ThreadFunc(void *data) +{ + /* Set the child thread error string */ + SDL_SetError("Thread %s (%lu) had a problem: %s", + (char *) data, SDL_ThreadID(), "nevermind"); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *) data); + SDL_Delay(1 * 1000); + } + SDL_Log("Child thread error string: %s\n", SDL_GetError()); + return (0); +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *thread; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Set the error value for the main thread */ + SDL_SetError("No worries"); + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, NULL, "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread error string: %s\n", SDL_GetError()); + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testfile.c b/Engine/lib/sdl/test/testfile.c new file mode 100644 index 0000000000..b45795f630 --- /dev/null +++ b/Engine/lib/sdl/test/testfile.c @@ -0,0 +1,283 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */ + +/* quiet windows compiler warnings */ +#define _CRT_NONSTDC_NO_WARNINGS + +#include + +#ifndef _MSC_VER +#include +#endif + +#include "SDL.h" + + +#include + +/* WARNING ! those 2 files will be destroyed by this test program */ + +#ifdef __IPHONEOS__ +#define FBASENAME1 "../Documents/sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "../Documents/sdldata2" /* this file should not exist before starting test */ +#else +#define FBASENAME1 "sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "sdldata2" /* this file should not exist before starting test */ +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +static void +cleanup(void) +{ + unlink(FBASENAME1); + unlink(FBASENAME2); +} + +static void +rwops_error_quit(unsigned line, SDL_RWops * rwops) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "testfile.c(%d): failed\n", line); + if (rwops) { + rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */ + } + cleanup(); + exit(1); /* quit with rwops error (test failed) */ +} + +#define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) ) + + + +int +main(int argc, char *argv[]) +{ + SDL_RWops *rwops = NULL; + char test_buf[30]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + cleanup(); + +/* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ + + rwops = SDL_RWFromFile(NULL, NULL); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL, "ab+"); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something", ""); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something", NULL); + if (rwops) + RWOP_ERR_QUIT(rwops); + SDL_Log("test1 OK\n"); + +/* test 2 : check that inexistent file is not successfully opened/created when required */ +/* modes : r, r+ imply that file MUST exist + modes : a, a+, w, w+ checks that it succeeds (file may not exists) + + */ + rwops = SDL_RWFromFile(FBASENAME2, "rb"); /* this file doesn't exist that call must fail */ + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2, "rb+"); /* this file doesn't exist that call must fail */ + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2, "wb"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "wb+"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab+"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + SDL_Log("test2 OK\n"); + +/* test 3 : creation, writing , reading, seeking, + test : w mode, r mode, w+ mode + */ + rwops = SDL_RWFromFile(FBASENAME1, "wb"); /* write only */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in write only mode */ + rwops->close(rwops); + + rwops = SDL_RWFromFile(FBASENAME1, "rb"); /* read mode, file must exists */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->write(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* readonly mode */ + rwops->close(rwops); + +/* test 3: same with w+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "wb+"); /* write + read + truncation */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test3 OK\n"); + +/* test 4: same in r+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "rb+"); /* write + read + file must exists, no truncation */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test4 OK\n"); + +/* test5 : append mode */ + rwops = SDL_RWFromFile(FBASENAME1, "ab+"); /* write + read + append */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + + if (20 + 27 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + + if (27 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (3 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "123456789012345678901234567123", 30)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test5 OK\n"); + cleanup(); + return 0; /* all ok */ +} diff --git a/Engine/lib/sdl/test/testfilesystem.c b/Engine/lib/sdl/test/testfilesystem.c new file mode 100644 index 0000000000..abd301c0e0 --- /dev/null +++ b/Engine/lib/sdl/test/testfilesystem.c @@ -0,0 +1,52 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple test of filesystem functions. */ + +#include +#include "SDL.h" + +int +main(int argc, char *argv[]) +{ + char *base_path; + char *pref_path; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(0) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + base_path = SDL_GetBasePath(); + if(base_path == NULL){ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find base path: %s\n", + SDL_GetError()); + return 0; + } + + SDL_Log("base path: '%s'\n", base_path); + SDL_free(base_path); + + pref_path = SDL_GetPrefPath("libsdl", "testfilesystem"); + if(pref_path == NULL){ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path: %s\n", + SDL_GetError()); + return 0; + } + SDL_Log("pref path: '%s'\n", pref_path); + SDL_free(pref_path); + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testgamecontroller.c b/Engine/lib/sdl/test/testgamecontroller.c new file mode 100644 index 0000000000..ec1dfd3229 --- /dev/null +++ b/Engine/lib/sdl/test/testgamecontroller.c @@ -0,0 +1,348 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL game controller routines */ + +#include +#include +#include + +#include "SDL.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#ifndef SDL_JOYSTICK_DISABLED + +#ifdef __IPHONEOS__ +#define SCREEN_WIDTH 480 +#define SCREEN_HEIGHT 320 +#else +#define SCREEN_WIDTH 512 +#define SCREEN_HEIGHT 317 +#endif + +/* This is indexed by SDL_GameControllerButton. */ +static const struct { int x; int y; } button_positions[] = { + {387, 167}, /* A */ + {431, 132}, /* B */ + {342, 132}, /* X */ + {389, 101}, /* Y */ + {174, 132}, /* BACK */ + {233, 132}, /* GUIDE */ + {289, 132}, /* START */ + {75, 154}, /* LEFTSTICK */ + {305, 230}, /* RIGHTSTICK */ + {77, 40}, /* LEFTSHOULDER */ + {396, 36}, /* RIGHTSHOULDER */ + {154, 188}, /* DPAD_UP */ + {154, 249}, /* DPAD_DOWN */ + {116, 217}, /* DPAD_LEFT */ + {186, 217}, /* DPAD_RIGHT */ +}; + +/* This is indexed by SDL_GameControllerAxis. */ +static const struct { int x; int y; double angle; } axis_positions[] = { + {75, 154, 0.0}, /* LEFTX */ + {75, 154, 90.0}, /* LEFTY */ + {305, 230, 0.0}, /* RIGHTX */ + {305, 230, 90.0}, /* RIGHTY */ + {91, 0, 90.0}, /* TRIGGERLEFT */ + {375, 0, 90.0}, /* TRIGGERRIGHT */ +}; + +SDL_Renderer *screen = NULL; +SDL_bool retval = SDL_FALSE; +SDL_bool done = SDL_FALSE; +SDL_Texture *background, *button, *axis; + +static SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp = NULL; + SDL_Texture *texture = NULL; + + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + } else { + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->BytesPerPixel == 1) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *)temp->pixels); + } else { + SDL_assert(!temp->format->palette); + SDL_assert(temp->format->BitsPerPixel == 24); + SDL_SetColorKey(temp, SDL_TRUE, (*(Uint32 *)temp->pixels) & 0x00FFFFFF); + } + } + + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + } + } + if (temp) { + SDL_FreeSurface(temp); + } + return texture; +} + +void +loop(void *arg) +{ + SDL_Event event; + int i; + SDL_GameController *gamecontroller = (SDL_GameController *)arg; + + /* blank screen, set up for drawing this frame. */ + SDL_SetRenderDrawColor(screen, 0xFF, 0xFF, 0xFF, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderCopy(screen, background, NULL, NULL); + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + if (event.key.keysym.sym != SDLK_ESCAPE) { + break; + } + /* Fall through to signal quit */ + case SDL_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + + /* Update visual controller state */ + for (i = 0; i < SDL_CONTROLLER_BUTTON_MAX; ++i) { + if (SDL_GameControllerGetButton(gamecontroller, (SDL_GameControllerButton)i) == SDL_PRESSED) { + const SDL_Rect dst = { button_positions[i].x, button_positions[i].y, 50, 50 }; + SDL_RenderCopyEx(screen, button, NULL, &dst, 0, NULL, 0); + } + } + + for (i = 0; i < SDL_CONTROLLER_AXIS_MAX; ++i) { + const Sint16 deadzone = 8000; /* !!! FIXME: real deadzone */ + const Sint16 value = SDL_GameControllerGetAxis(gamecontroller, (SDL_GameControllerAxis)(i)); + if (value < -deadzone) { + const SDL_Rect dst = { axis_positions[i].x, axis_positions[i].y, 50, 50 }; + const double angle = axis_positions[i].angle; + SDL_RenderCopyEx(screen, axis, NULL, &dst, angle, NULL, 0); + } else if (value > deadzone) { + const SDL_Rect dst = { axis_positions[i].x, axis_positions[i].y, 50, 50 }; + const double angle = axis_positions[i].angle + 180.0; + SDL_RenderCopyEx(screen, axis, NULL, &dst, angle, NULL, 0); + } + } + + SDL_RenderPresent(screen); + + if (!SDL_GameControllerGetAttached(gamecontroller)) { + done = SDL_TRUE; + retval = SDL_TRUE; /* keep going, wait for reattach. */ + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +SDL_bool +WatchGameController(SDL_GameController * gamecontroller) +{ + const char *name = SDL_GameControllerName(gamecontroller); + const char *basetitle = "Game Controller Test: "; + const size_t titlelen = SDL_strlen(basetitle) + SDL_strlen(name) + 1; + char *title = (char *)SDL_malloc(titlelen); + SDL_Window *window = NULL; + + retval = SDL_FALSE; + done = SDL_FALSE; + + if (title) { + SDL_snprintf(title, titlelen, "%s%s", basetitle, name); + } + + /* Create a window to display controller state */ + window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, + SCREEN_HEIGHT, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + screen = SDL_CreateRenderer(window, -1, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderPresent(screen); + SDL_RaiseWindow(window); + + /* scale for platforms that don't give you the window size you asked for. */ + SDL_RenderSetLogicalSize(screen, SCREEN_WIDTH, SCREEN_HEIGHT); + + background = LoadTexture(screen, "controllermap.bmp", SDL_FALSE); + button = LoadTexture(screen, "button.bmp", SDL_TRUE); + axis = LoadTexture(screen, "axis.bmp", SDL_TRUE); + + if (!background || !button || !axis) { + SDL_DestroyRenderer(screen); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + SDL_SetTextureColorMod(button, 10, 255, 21); + SDL_SetTextureColorMod(axis, 10, 255, 21); + + /* !!! FIXME: */ + /*SDL_RenderSetLogicalSize(screen, background->w, background->h);*/ + + /* Print info about the controller we are watching */ + SDL_Log("Watching controller %s\n", name ? name : "Unknown Controller"); + + /* Loop, getting controller events! */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, gamecontroller, 0, 1); +#else + while (!done) { + loop(gamecontroller); + } +#endif + + SDL_DestroyRenderer(screen); + screen = NULL; + background = NULL; + button = NULL; + axis = NULL; + SDL_DestroyWindow(window); + return retval; +} + +int +main(int argc, char *argv[]) +{ + int i; + int nController = 0; + int retcode = 0; + char guid[64]; + SDL_GameController *gamecontroller; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER ) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_GameControllerAddMappingsFromFile("gamecontrollerdb.txt"); + + /* Print information about the controller */ + for (i = 0; i < SDL_NumJoysticks(); ++i) { + const char *name; + const char *description; + + SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(i), + guid, sizeof (guid)); + + if ( SDL_IsGameController(i) ) + { + nController++; + name = SDL_GameControllerNameForIndex(i); + description = "Controller"; + } else { + name = SDL_JoystickNameForIndex(i); + description = "Joystick"; + } + SDL_Log("%s %d: %s (guid %s)\n", description, i, name ? name : "Unknown", guid); + } + SDL_Log("There are %d game controller(s) attached (%d joystick(s))\n", nController, SDL_NumJoysticks()); + + if (argv[1]) { + SDL_bool reportederror = SDL_FALSE; + SDL_bool keepGoing = SDL_TRUE; + SDL_Event event; + int device = atoi(argv[1]); + if (device >= SDL_NumJoysticks()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%i is an invalid joystick index.\n", device); + retcode = 1; + } else { + SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(device), + guid, sizeof (guid)); + SDL_Log("Attempting to open device %i, guid %s\n", device, guid); + gamecontroller = SDL_GameControllerOpen(device); + + if (gamecontroller != NULL) { + SDL_assert(SDL_GameControllerFromInstanceID(SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(gamecontroller))) == gamecontroller); + } + + while (keepGoing) { + if (gamecontroller == NULL) { + if (!reportederror) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open gamecontroller %d: %s\n", device, SDL_GetError()); + retcode = 1; + keepGoing = SDL_FALSE; + reportederror = SDL_TRUE; + } + } else { + reportederror = SDL_FALSE; + keepGoing = WatchGameController(gamecontroller); + SDL_GameControllerClose(gamecontroller); + } + + gamecontroller = NULL; + if (keepGoing) { + SDL_Log("Waiting for attach\n"); + } + while (keepGoing) { + SDL_WaitEvent(&event); + if ((event.type == SDL_QUIT) || (event.type == SDL_FINGERDOWN) + || (event.type == SDL_MOUSEBUTTONDOWN)) { + keepGoing = SDL_FALSE; + } else if (event.type == SDL_CONTROLLERDEVICEADDED) { + gamecontroller = SDL_GameControllerOpen(event.cdevice.which); + if (gamecontroller != NULL) { + SDL_assert(SDL_GameControllerFromInstanceID(SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(gamecontroller))) == gamecontroller); + } + break; + } + } + } + } + } + + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); + + return retcode; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testgesture.c b/Engine/lib/sdl/test/testgesture.c new file mode 100644 index 0000000000..a289ce133a --- /dev/null +++ b/Engine/lib/sdl/test/testgesture.c @@ -0,0 +1,310 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Usage: + * Spacebar to begin recording a gesture on all touches. + * s to save all touches into "./gestureSave" + * l to load all touches from "./gestureSave" + */ + +#include "SDL.h" +#include /* for exit() */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#define WIDTH 640 +#define HEIGHT 480 +#define BPP 4 +#define DEPTH 32 + +/* MUST BE A POWER OF 2! */ +#define EVENT_BUF_SIZE 256 + + +#define VERBOSE 0 + +static SDL_Event events[EVENT_BUF_SIZE]; +static int eventWrite; + + +static int colors[7] = {0xFF,0xFF00,0xFF0000,0xFFFF00,0x00FFFF,0xFF00FF,0xFFFFFF}; + +SDL_Surface *screen; +SDL_Window *window; +SDL_bool quitting = SDL_FALSE; + +typedef struct { + float x,y; +} Point; + +typedef struct { + float ang,r; + Point p; +} Knob; + +static Knob knob; + +void setpix(SDL_Surface *screen, float _x, float _y, unsigned int col) +{ + Uint32 *pixmem32; + Uint32 colour; + Uint8 r,g,b; + int x = (int)_x; + int y = (int)_y; + float a; + + if(x < 0 || x >= screen->w) return; + if(y < 0 || y >= screen->h) return; + + pixmem32 = (Uint32*) screen->pixels + y*screen->pitch/BPP + x; + + SDL_memcpy(&colour,pixmem32,screen->format->BytesPerPixel); + + SDL_GetRGB(colour,screen->format,&r,&g,&b); + /* r = 0;g = 0; b = 0; */ + a = (float)((col>>24)&0xFF); + if(a == 0) a = 0xFF; /* Hack, to make things easier. */ + a /= 0xFF; + r = (Uint8)(r*(1-a) + ((col>>16)&0xFF)*(a)); + g = (Uint8)(g*(1-a) + ((col>> 8)&0xFF)*(a)); + b = (Uint8)(b*(1-a) + ((col>> 0)&0xFF)*(a)); + colour = SDL_MapRGB( screen->format,r, g, b); + + + *pixmem32 = colour; +} + +void drawLine(SDL_Surface *screen,float x0,float y0,float x1,float y1,unsigned int col) { + float t; + for(t=0;t<1;t+=(float)(1.f/SDL_max(SDL_fabs(x0-x1),SDL_fabs(y0-y1)))) + setpix(screen,x1+t*(x0-x1),y1+t*(y0-y1),col); +} + +void drawCircle(SDL_Surface* screen,float x,float y,float r,unsigned int c) +{ + float tx,ty; + float xr; + for(ty = (float)-SDL_fabs(r);ty <= (float)SDL_fabs((int)r);ty++) { + xr = (float)SDL_sqrt(r*r - ty*ty); + if(r > 0) { /* r > 0 ==> filled circle */ + for(tx=-xr+.5f;tx<=xr-.5;tx++) { + setpix(screen,x+tx,y+ty,c); + } + } + else { + setpix(screen,x-xr+.5f,y+ty,c); + setpix(screen,x+xr-.5f,y+ty,c); + } + } +} + +void drawKnob(SDL_Surface* screen,Knob k) { + drawCircle(screen,k.p.x*screen->w,k.p.y*screen->h,k.r*screen->w,0xFFFFFF); + drawCircle(screen,(k.p.x+k.r/2*SDL_cosf(k.ang))*screen->w, + (k.p.y+k.r/2*SDL_sinf(k.ang))*screen->h,k.r/4*screen->w,0); +} + +void DrawScreen(SDL_Surface* screen, SDL_Window* window) +{ + int i; +#if 1 + SDL_FillRect(screen, NULL, 0); +#else + int x, y; + for(y = 0;y < screen->h;y++) + for(x = 0;x < screen->w;x++) + setpix(screen,(float)x,(float)y,((x%255)<<16) + ((y%255)<<8) + (x+y)%255); +#endif + + /* draw Touch History */ + for(i = eventWrite; i < eventWrite+EVENT_BUF_SIZE; ++i) { + const SDL_Event *event = &events[i&(EVENT_BUF_SIZE-1)]; + float age = (float)(i - eventWrite) / EVENT_BUF_SIZE; + float x, y; + unsigned int c, col; + + if(event->type == SDL_FINGERMOTION || + event->type == SDL_FINGERDOWN || + event->type == SDL_FINGERUP) { + x = event->tfinger.x; + y = event->tfinger.y; + + /* draw the touch: */ + c = colors[event->tfinger.fingerId%7]; + col = ((unsigned int)(c*(.1+.85))) | (unsigned int)(0xFF*age)<<24; + + if(event->type == SDL_FINGERMOTION) + drawCircle(screen,x*screen->w,y*screen->h,5,col); + else if(event->type == SDL_FINGERDOWN) + drawCircle(screen,x*screen->w,y*screen->h,-10,col); + } + } + + if(knob.p.x > 0) + drawKnob(screen,knob); + + SDL_UpdateWindowSurface(window); +} + +/* Returns a new SDL_Window if window is NULL or window if not. */ +SDL_Window* initWindow(SDL_Window *window, int width,int height) +{ + if (!window) { + window = SDL_CreateWindow("Gesture Test", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + width, height, SDL_WINDOW_RESIZABLE); + } + return window; +} + +void loop() +{ + SDL_Event event; + SDL_RWops *stream; + + while(SDL_PollEvent(&event)) + { + /* Record _all_ events */ + events[eventWrite & (EVENT_BUF_SIZE-1)] = event; + eventWrite++; + + switch (event.type) + { + case SDL_QUIT: + quitting = SDL_TRUE; + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) + { + case SDLK_i: + { + int i; + for (i = 0; i < SDL_GetNumTouchDevices(); ++i) { + SDL_TouchID id = SDL_GetTouchDevice(i); + SDL_Log("Fingers Down on device %"SDL_PRIs64": %d", id, SDL_GetNumTouchFingers(id)); + } + break; + } + case SDLK_SPACE: + SDL_RecordGesture(-1); + break; + case SDLK_s: + stream = SDL_RWFromFile("gestureSave", "w"); + SDL_Log("Wrote %i templates", SDL_SaveAllDollarTemplates(stream)); + SDL_RWclose(stream); + break; + case SDLK_l: + stream = SDL_RWFromFile("gestureSave", "r"); + SDL_Log("Loaded: %i", SDL_LoadDollarTemplates(-1, stream)); + SDL_RWclose(stream); + break; + case SDLK_ESCAPE: + quitting = SDL_TRUE; + break; + } + break; + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + if (!(window = initWindow(window, event.window.data1, event.window.data2)) || + !(screen = SDL_GetWindowSurface(window))) + { + SDL_Quit(); + exit(1); + } + } + break; + case SDL_FINGERMOTION: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64",x: %f, y: %f",event.tfinger.fingerId, + event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_FINGERDOWN: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64" down - x: %f, y: %f", + event.tfinger.fingerId,event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_FINGERUP: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64" up - x: %f, y: %f", + event.tfinger.fingerId,event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_MULTIGESTURE: +#if VERBOSE + SDL_Log("Multi Gesture: x = %f, y = %f, dAng = %f, dR = %f", + event.mgesture.x, + event.mgesture.y, + event.mgesture.dTheta, + event.mgesture.dDist); + SDL_Log("MG: numDownTouch = %i",event.mgesture.numFingers); +#endif + knob.p.x = event.mgesture.x; + knob.p.y = event.mgesture.y; + knob.ang += event.mgesture.dTheta; + knob.r += event.mgesture.dDist; + break; + case SDL_DOLLARGESTURE: + SDL_Log("Gesture %"SDL_PRIs64" performed, error: %f", + event.dgesture.gestureId, + event.dgesture.error); + break; + case SDL_DOLLARRECORD: + SDL_Log("Recorded gesture: %"SDL_PRIs64"",event.dgesture.gestureId); + break; + } + } + DrawScreen(screen, window); + +#ifdef __EMSCRIPTEN__ + if (quitting) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char* argv[]) +{ + window = NULL; + screen = NULL; + quitting = SDL_FALSE; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* gesture variables */ + knob.r = .1f; + knob.ang = 0; + + if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1; + + if (!(window = initWindow(window, WIDTH, HEIGHT)) || + !(screen = SDL_GetWindowSurface(window))) + { + SDL_Quit(); + return 1; + } + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while(!quitting) { + loop(); + } +#endif + + SDL_Quit(); + return 0; +} + diff --git a/Engine/lib/sdl/test/testgl2.c b/Engine/lib/sdl/test/testgl2.c new file mode 100644 index 0000000000..74147f9fb9 --- /dev/null +++ b/Engine/lib/sdl/test/testgl2.c @@ -0,0 +1,416 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#include "SDL_test_common.h" + +#ifdef __MACOS__ +#define HAVE_OPENGL +#endif + +#ifdef HAVE_OPENGL + +#include "SDL_opengl.h" + +typedef struct GL_Context +{ +#define SDL_PROC(ret,func,params) ret (APIENTRY *func) params; +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC +} GL_Context; + + +/* Undefine this if you want a flat cube instead of a rainbow cube */ +#define SHADED_CUBE + +static SDLTest_CommonState *state; +static SDL_GLContext context; +static GL_Context ctx; + +static int LoadContext(GL_Context * data) +{ +#if SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_ANDROID +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_PANDORA +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret,func,params) data->func=func; +#else +#define SDL_PROC(ret,func,params) \ + do { \ + data->func = SDL_GL_GetProcAddress(#func); \ + if ( ! data->func ) { \ + return SDL_SetError("Couldn't load GL function %s: %s\n", #func, SDL_GetError()); \ + } \ + } while ( 0 ); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC + return 0; +} + + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + if (context) { + /* SDL_GL_MakeCurrent(0, NULL); *//* doesn't do anything */ + SDL_GL_DeleteContext(context); + } + SDLTest_CommonQuit(state); + exit(rc); +} + +static void +Render() +{ + static float color[8][3] = { + {1.0, 1.0, 0.0}, + {1.0, 0.0, 0.0}, + {0.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 1.0, 1.0}, + {1.0, 1.0, 1.0}, + {1.0, 0.0, 1.0}, + {0.0, 0.0, 1.0} + }; + static float cube[8][3] = { + {0.5, 0.5, -0.5}, + {0.5, -0.5, -0.5}, + {-0.5, -0.5, -0.5}, + {-0.5, 0.5, -0.5}, + {-0.5, 0.5, 0.5}, + {0.5, 0.5, 0.5}, + {0.5, -0.5, 0.5}, + {-0.5, -0.5, 0.5} + }; + + /* Do our drawing, too. */ + ctx.glClearColor(0.0, 0.0, 0.0, 1.0); + ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + ctx.glBegin(GL_QUADS); + +#ifdef SHADED_CUBE + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); +#else /* flat cube */ + ctx.glColor3f(1.0, 0.0, 0.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3f(0.0, 1.0, 0.0); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3f(0.0, 0.0, 1.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3f(0.0, 1.0, 1.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3f(1.0, 1.0, 0.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3f(1.0, 0.0, 1.0); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[7]); +#endif /* SHADED_CUBE */ + + ctx.glEnd(); + + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + SDL_DisplayMode mode; + SDL_Event event; + Uint32 then, now, frames; + int status; + int dw, dh; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + fsaa = 0; + accel = -1; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0 && i+1 < argc) { + fsaa = atoi(argv[i+1]); + consumed = 2; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0 && i+1 < argc) { + accel = atoi(argv[i+1]); + consumed = 2; + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--fsaa n] [--accel n]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = 16; + state->gl_double_buffer = 1; + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel >= 0) { + state->gl_accelerated = accel; + } + + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create OpenGL context */ + context = SDL_GL_CreateContext(state->windows[0]); + if (!context) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GL functions\n"); + quit(2); + return 0; + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + /* try late-swap-tearing first. If not supported, try normal vsync. */ + if (SDL_GL_SetSwapInterval(-1) == -1) { + SDL_GL_SetSwapInterval(1); + } + } else { + SDL_GL_SetSwapInterval(0); /* disable vsync. */ + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen BPP : %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("Swap Interval : %d\n", SDL_GL_GetSwapInterval()); + SDL_GetWindowSize(state->windows[0], &dw, &dh); + SDL_Log("Window Size : %d,%d\n", dw, dh); + SDL_GL_GetDrawableSize(state->windows[0], &dw, &dh); + SDL_Log("Draw Size : %d,%d\n", dw, dh); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", 16, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel >= 0) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", accel, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings */ + ctx.glMatrixMode(GL_PROJECTION); + ctx.glLoadIdentity(); + ctx.glOrtho(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0); + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glLoadIdentity(); + ctx.glEnable(GL_DEPTH_TEST); + ctx.glDepthFunc(GL_LESS); + ctx.glShadeModel(GL_SMOOTH); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + int w, h; + if (state->windows[i] == NULL) + continue; + SDL_GL_MakeCurrent(state->windows[i], context); + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } + quit(0); + return 0; +} + +#else /* HAVE_OPENGL */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ diff --git a/Engine/lib/sdl/test/testgles.c b/Engine/lib/sdl/test/testgles.c new file mode 100644 index 0000000000..291661a09d --- /dev/null +++ b/Engine/lib/sdl/test/testgles.c @@ -0,0 +1,355 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#include "SDL_test_common.h" + +#if defined(__IPHONEOS__) || defined(__ANDROID__) +#define HAVE_OPENGLES +#endif + +#ifdef HAVE_OPENGLES + +#include "SDL_opengles.h" + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + exit(rc); +} + +static void +Render() +{ + static GLubyte color[8][4] = { {255, 0, 0, 0}, + {255, 0, 0, 255}, + {0, 255, 0, 255}, + {0, 255, 0, 255}, + {0, 255, 0, 255}, + {255, 255, 255, 255}, + {255, 0, 255, 255}, + {0, 0, 255, 255} + }; + static GLfloat cube[8][3] = { {0.5, 0.5, -0.5}, + {0.5f, -0.5f, -0.5f}, + {-0.5f, -0.5f, -0.5f}, + {-0.5f, 0.5f, -0.5f}, + {-0.5f, 0.5f, 0.5f}, + {0.5f, 0.5f, 0.5f}, + {0.5f, -0.5f, 0.5f}, + {-0.5f, -0.5f, 0.5f} + }; + static GLubyte indices[36] = { 0, 3, 4, + 4, 5, 0, + 0, 5, 6, + 6, 1, 0, + 6, 7, 2, + 2, 1, 6, + 7, 4, 3, + 3, 2, 7, + 5, 4, 7, + 7, 6, 5, + 2, 3, 1, + 3, 0, 1 + }; + + + /* Do our drawing, too. */ + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + /* Draw the cube */ + glColorPointer(4, GL_UNSIGNED_BYTE, 0, color); + glEnableClientState(GL_COLOR_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, cube); + glEnableClientState(GL_VERTEX_ARRAY); + glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); + + glMatrixMode(GL_MODELVIEW); + glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + SDL_DisplayMode mode; + SDL_Event event; + Uint32 then, now, frames; + int status; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + depth = SDL_atoi(argv[i]); + consumed = 1; + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--fsaa] [--accel] [--zdepth %%d]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 1; + state->gl_minor_version = 1; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + if (fsaa) { + state->gl_multisamplebuffers=1; + state->gl_multisamplesamples=fsaa; + } + if (accel) { + state->gl_accelerated=1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + context = SDL_calloc(state->num_windows, sizeof(context)); + if (context == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + float aspectAdjust; + + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + + aspectAdjust = (4.0f / 3.0f) / ((float)state->window_w / state->window_h); + glViewport(0, 0, state->window_w, state->window_h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrthof(-2.0, 2.0, -2.0 * aspectAdjust, 2.0 * aspectAdjust, -20.0, 20.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glShadeModel(GL_SMOOTH); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + glViewport(0, 0, event.window.data1, event.window.data2); + /* Update window content */ + Render(); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + break; + } + } + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } +#if !defined(__ANDROID__) + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testgles2.c b/Engine/lib/sdl/test/testgles2.c new file mode 100644 index 0000000000..af5962ba48 --- /dev/null +++ b/Engine/lib/sdl/test/testgles2.c @@ -0,0 +1,731 @@ +/* + Copyright (r) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#if defined(__IPHONEOS__) || defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__NACL__) +#define HAVE_OPENGLES2 +#endif + +#ifdef HAVE_OPENGLES2 + +#include "SDL_opengles2.h" + +typedef struct GLES2_Context +{ +#define SDL_PROC(ret,func,params) ret (APIENTRY *func) params; +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC +} GLES2_Context; + + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; +static GLES2_Context ctx; + +static int LoadContext(GLES2_Context * data) +{ +#if SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_ANDROID +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_PANDORA +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret,func,params) data->func=func; +#else +#define SDL_PROC(ret,func,params) \ + do { \ + data->func = SDL_GL_GetProcAddress(#func); \ + if ( ! data->func ) { \ + return SDL_SetError("Couldn't load GLES2 function %s: %s\n", #func, SDL_GetError()); \ + } \ + } while ( 0 ); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC + return 0; +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + exit(rc); +} + +#define GL_CHECK(x) \ + x; \ + { \ + GLenum glError = ctx.glGetError(); \ + if(glError != GL_NO_ERROR) { \ + SDL_Log("glGetError() = %i (0x%.8x) at line %i\n", glError, glError, __LINE__); \ + quit(1); \ + } \ + } + +/* + * Simulates desktop's glRotatef. The matrix is returned in column-major + * order. + */ +static void +rotate_matrix(float angle, float x, float y, float z, float *r) +{ + float radians, c, s, c1, u[3], length; + int i, j; + + radians = (float)(angle * M_PI) / 180.0f; + + c = SDL_cosf(radians); + s = SDL_sinf(radians); + + c1 = 1.0f - SDL_cosf(radians); + + length = (float)SDL_sqrt(x * x + y * y + z * z); + + u[0] = x / length; + u[1] = y / length; + u[2] = z / length; + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[15] = 1.0; + + for (i = 0; i < 3; i++) { + r[i * 4 + (i + 1) % 3] = u[(i + 2) % 3] * s; + r[i * 4 + (i + 2) % 3] = -u[(i + 1) % 3] * s; + } + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + r[i * 4 + j] += c1 * u[i] * u[j] + (i == j ? c : 0.0f); + } + } +} + +/* + * Simulates gluPerspectiveMatrix + */ +static void +perspective_matrix(float fovy, float aspect, float znear, float zfar, float *r) +{ + int i; + float f; + + f = 1.0f/SDL_tanf(fovy * 0.5f); + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[0] = f / aspect; + r[5] = f; + r[10] = (znear + zfar) / (znear - zfar); + r[11] = -1.0f; + r[14] = (2.0f * znear * zfar) / (znear - zfar); + r[15] = 0.0f; +} + +/* + * Multiplies lhs by rhs and writes out to r. All matrices are 4x4 and column + * major. In-place multiplication is supported. + */ +static void +multiply_matrix(float *lhs, float *rhs, float *r) +{ + int i, j, k; + float tmp[16]; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + tmp[j * 4 + i] = 0.0; + + for (k = 0; k < 4; k++) { + tmp[j * 4 + i] += lhs[k * 4 + i] * rhs[j * 4 + k]; + } + } + } + + for (i = 0; i < 16; i++) { + r[i] = tmp[i]; + } +} + +/* + * Create shader, load in source, compile, dump debug as necessary. + * + * shader: Pointer to return created shader ID. + * source: Passed-in shader source code. + * shader_type: Passed to GL, e.g. GL_VERTEX_SHADER. + */ +void +process_shader(GLuint *shader, const char * source, GLint shader_type) +{ + GLint status = GL_FALSE; + const char *shaders[1] = { NULL }; + char buffer[1024]; + GLsizei length; + + /* Create shader and load into GL. */ + *shader = GL_CHECK(ctx.glCreateShader(shader_type)); + + shaders[0] = source; + + GL_CHECK(ctx.glShaderSource(*shader, 1, shaders, NULL)); + + /* Clean up shader source. */ + shaders[0] = NULL; + + /* Try compiling the shader. */ + GL_CHECK(ctx.glCompileShader(*shader)); + GL_CHECK(ctx.glGetShaderiv(*shader, GL_COMPILE_STATUS, &status)); + + /* Dump debug info (source and log) if compilation failed. */ + if(status != GL_TRUE) { + ctx.glGetProgramInfoLog(*shader, sizeof(buffer), &length, &buffer[0]); + buffer[length] = '\0'; + SDL_Log("Shader compilation failed: %s", buffer);fflush(stderr); + quit(-1); + } +} + +/* 3D data. Vertex range -0.5..0.5 in all axes. +* Z -0.5 is near, 0.5 is far. */ +const float _vertices[] = +{ + /* Front face. */ + /* Bottom left */ + -0.5, 0.5, -0.5, + 0.5, -0.5, -0.5, + -0.5, -0.5, -0.5, + /* Top right */ + -0.5, 0.5, -0.5, + 0.5, 0.5, -0.5, + 0.5, -0.5, -0.5, + /* Left face */ + /* Bottom left */ + -0.5, 0.5, 0.5, + -0.5, -0.5, -0.5, + -0.5, -0.5, 0.5, + /* Top right */ + -0.5, 0.5, 0.5, + -0.5, 0.5, -0.5, + -0.5, -0.5, -0.5, + /* Top face */ + /* Bottom left */ + -0.5, 0.5, 0.5, + 0.5, 0.5, -0.5, + -0.5, 0.5, -0.5, + /* Top right */ + -0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, + 0.5, 0.5, -0.5, + /* Right face */ + /* Bottom left */ + 0.5, 0.5, -0.5, + 0.5, -0.5, 0.5, + 0.5, -0.5, -0.5, + /* Top right */ + 0.5, 0.5, -0.5, + 0.5, 0.5, 0.5, + 0.5, -0.5, 0.5, + /* Back face */ + /* Bottom left */ + 0.5, 0.5, 0.5, + -0.5, -0.5, 0.5, + 0.5, -0.5, 0.5, + /* Top right */ + 0.5, 0.5, 0.5, + -0.5, 0.5, 0.5, + -0.5, -0.5, 0.5, + /* Bottom face */ + /* Bottom left */ + -0.5, -0.5, -0.5, + 0.5, -0.5, 0.5, + -0.5, -0.5, 0.5, + /* Top right */ + -0.5, -0.5, -0.5, + 0.5, -0.5, -0.5, + 0.5, -0.5, 0.5, +}; + +const float _colors[] = +{ + /* Front face */ + /* Bottom left */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 0.0, 1.0, /* blue */ + 0.0, 1.0, 0.0, /* green */ + /* Top right */ + 1.0, 0.0, 0.0, /* red */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 1.0, /* blue */ + /* Left face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 1.0, 0.0, /* green */ + /* Top face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 0.0, /* red */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 0.0, /* yellow */ + /* Right face */ + /* Bottom left */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 0.0, 1.0, /* blue */ + /* Top right */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 0.0, 1.0, /* magenta */ + /* Back face */ + /* Bottom left */ + 0.0, 0.0, 0.0, /* black */ + 0.0, 1.0, 1.0, /* cyan */ + 1.0, 0.0, 1.0, /* magenta */ + /* Top right */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 1.0, /* cyan */ + /* Bottom face */ + /* Bottom left */ + 0.0, 1.0, 0.0, /* green */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 0.0, 1.0, /* blue */ + 1.0, 0.0, 1.0, /* magenta */ +}; + +const char* _shader_vert_src = +" attribute vec4 av4position; " +" attribute vec3 av3color; " +" uniform mat4 mvp; " +" varying vec3 vv3color; " +" void main() { " +" vv3color = av3color; " +" gl_Position = mvp * av4position; " +" } "; + +const char* _shader_frag_src = +" precision lowp float; " +" varying vec3 vv3color; " +" void main() { " +" gl_FragColor = vec4(vv3color, 1.0); " +" } "; + +typedef struct shader_data +{ + GLuint shader_program, shader_frag, shader_vert; + + GLint attr_position; + GLint attr_color, attr_mvp; + + int angle_x, angle_y, angle_z; + +} shader_data; + +static void +Render(unsigned int width, unsigned int height, shader_data* data) +{ + float matrix_rotate[16], matrix_modelview[16], matrix_perspective[16], matrix_mvp[16]; + + /* + * Do some rotation with Euler angles. It is not a fixed axis as + * quaterions would be, but the effect is cool. + */ + rotate_matrix((float)data->angle_x, 1.0f, 0.0f, 0.0f, matrix_modelview); + rotate_matrix((float)data->angle_y, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + rotate_matrix((float)data->angle_z, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + /* Pull the camera back from the cube */ + matrix_modelview[14] -= 2.5; + + perspective_matrix(45.0f, (float)width/height, 0.01f, 100.0f, matrix_perspective); + multiply_matrix(matrix_perspective, matrix_modelview, matrix_mvp); + + GL_CHECK(ctx.glUniformMatrix4fv(data->attr_mvp, 1, GL_FALSE, matrix_mvp)); + + data->angle_x += 3; + data->angle_y += 2; + data->angle_z += 1; + + if(data->angle_x >= 360) data->angle_x -= 360; + if(data->angle_x < 0) data->angle_x += 360; + if(data->angle_y >= 360) data->angle_y -= 360; + if(data->angle_y < 0) data->angle_y += 360; + if(data->angle_z >= 360) data->angle_z -= 360; + if(data->angle_z < 0) data->angle_z += 360; + + GL_CHECK(ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)); + GL_CHECK(ctx.glDrawArrays(GL_TRIANGLES, 0, 36)); +} + +int done; +Uint32 frames; +shader_data *datas; + +void loop() +{ + SDL_Event event; + int i; + int status; + + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event) && !done) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + state->window_w = event.window.data1; + state->window_h = event.window.data2; + /* Update window content */ + Render(event.window.data1, event.window.data2, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + break; + } + } + SDLTest_CommonEvent(state, &event, &done); + } + if (!done) { + for (i = 0; i < state->num_windows; ++i) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(state->window_w, state->window_h, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + } + } +#ifdef __EMSCRIPTEN__ + else { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i; + SDL_DisplayMode mode; + Uint32 then, now; + int status; + shader_data *data; + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + depth = SDL_atoi(argv[i]); + consumed = 1; + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log ("Usage: %s %s [--fsaa] [--accel] [--zdepth %%d]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 2; + state->gl_minor_version = 0; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + + if (fsaa) { + state->gl_multisamplebuffers=1; + state->gl_multisamplesamples=fsaa; + } + if (accel) { + state->gl_accelerated=1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + return 0; + } + + context = SDL_calloc(state->num_windows, sizeof(context)); + if (context == NULL) { + SDL_Log("Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_Log("SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GLES2 functions\n"); + quit(2); + return 0; + } + + + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_Log( "Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_Log( "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_Log( "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_Log( "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + datas = SDL_calloc(state->num_windows, sizeof(shader_data)); + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + + data = &datas[i]; + data->angle_x = 0; data->angle_y = 0; data->angle_z = 0; + + /* Shader Initialization */ + process_shader(&data->shader_vert, _shader_vert_src, GL_VERTEX_SHADER); + process_shader(&data->shader_frag, _shader_frag_src, GL_FRAGMENT_SHADER); + + /* Create shader_program (ready to attach shaders) */ + data->shader_program = GL_CHECK(ctx.glCreateProgram()); + + /* Attach shaders and link shader_program */ + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_vert)); + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_frag)); + GL_CHECK(ctx.glLinkProgram(data->shader_program)); + + /* Get attribute locations of non-fixed attributes like color and texture coordinates. */ + data->attr_position = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av4position")); + data->attr_color = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av3color")); + + /* Get uniform locations */ + data->attr_mvp = GL_CHECK(ctx.glGetUniformLocation(data->shader_program, "mvp")); + + GL_CHECK(ctx.glUseProgram(data->shader_program)); + + /* Enable attributes for position, color and texture coordinates etc. */ + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_position)); + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_color)); + + /* Populate attributes for position, color and texture coordinates etc. */ + GL_CHECK(ctx.glVertexAttribPointer(data->attr_position, 3, GL_FLOAT, GL_FALSE, 0, _vertices)); + GL_CHECK(ctx.glVertexAttribPointer(data->attr_color, 3, GL_FLOAT, GL_FALSE, 0, _colors)); + + GL_CHECK(ctx.glEnable(GL_CULL_FACE)); + GL_CHECK(ctx.glEnable(GL_DEPTH_TEST)); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } +#if !defined(__ANDROID__) && !defined(__NACL__) + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES2 */ + +int +main(int argc, char *argv[]) +{ + SDL_Log("No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES2 */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testhaptic.c b/Engine/lib/sdl/test/testhaptic.c new file mode 100644 index 0000000000..bffe4467de --- /dev/null +++ b/Engine/lib/sdl/test/testhaptic.c @@ -0,0 +1,369 @@ +/* +Copyright (c) 2008, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * includes + */ +#include +#include /* strstr */ +#include /* isdigit */ + +#include "SDL.h" + +#ifndef SDL_HAPTIC_DISABLED + +static SDL_Haptic *haptic; + + +/* + * prototypes + */ +static void abort_execution(void); +static void HapticPrintSupported(SDL_Haptic * haptic); + + +/** + * @brief The entry point of this force feedback demo. + * @param[in] argc Number of arguments. + * @param[in] argv Array of argc arguments. + */ +int +main(int argc, char **argv) +{ + int i; + char *name; + int index; + SDL_HapticEffect efx[9]; + int id[9]; + int nefx; + unsigned int supported; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + name = NULL; + index = -1; + if (argc > 1) { + name = argv[1]; + if ((strcmp(name, "--help") == 0) || (strcmp(name, "-h") == 0)) { + SDL_Log("USAGE: %s [device]\n" + "If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n", + argv[0]); + return 0; + } + + i = strlen(name); + if ((i < 3) && isdigit(name[0]) && ((i == 1) || isdigit(name[1]))) { + index = atoi(name); + name = NULL; + } + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics()); + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (strstr(SDL_HapticName(i), name) != NULL) + break; + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + HapticPrintSupported(haptic); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + /* Create effects. */ + memset(&efx, 0, sizeof(efx)); + nefx = 0; + supported = SDL_HapticQuery(haptic); + + SDL_Log("\nUploading effects\n"); + /* First we'll try a SINE effect. */ + if (supported & SDL_HAPTIC_SINE) { + SDL_Log(" effect %d: Sine Wave\n", nefx); + efx[nefx].type = SDL_HAPTIC_SINE; + efx[nefx].periodic.period = 1000; + efx[nefx].periodic.magnitude = -0x2000; /* Negative magnitude and ... */ + efx[nefx].periodic.phase = 18000; /* ... 180 degrees phase shift => cancel eachother */ + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* Now we'll try a SAWTOOTHUP */ + if (supported & SDL_HAPTIC_SAWTOOTHUP) { + SDL_Log(" effect %d: Sawtooth Up\n", nefx); + efx[nefx].type = SDL_HAPTIC_SAWTOOTHUP; + efx[nefx].periodic.period = 500; + efx[nefx].periodic.magnitude = 0x5000; + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now the classical constant effect. */ + if (supported & SDL_HAPTIC_CONSTANT) { + SDL_Log(" effect %d: Constant Force\n", nefx); + efx[nefx].type = SDL_HAPTIC_CONSTANT; + efx[nefx].constant.direction.type = SDL_HAPTIC_POLAR; + efx[nefx].constant.direction.dir[0] = 20000; /* Force comes from the south-west. */ + efx[nefx].constant.length = 5000; + efx[nefx].constant.level = 0x6000; + efx[nefx].constant.attack_length = 1000; + efx[nefx].constant.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* The cute spring effect. */ + if (supported & SDL_HAPTIC_SPRING) { + SDL_Log(" effect %d: Condition Spring\n", nefx); + efx[nefx].type = SDL_HAPTIC_SPRING; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.center[i] = 0x1000; /* Displace the center for it to move. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The interesting damper effect. */ + if (supported & SDL_HAPTIC_DAMPER) { + SDL_Log(" effect %d: Condition Damper\n", nefx); + efx[nefx].type = SDL_HAPTIC_DAMPER; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The pretty awesome inertia effect. */ + if (supported & SDL_HAPTIC_INERTIA) { + SDL_Log(" effect %d: Condition Inertia\n", nefx); + efx[nefx].type = SDL_HAPTIC_INERTIA; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.deadband[i] = 0x1000; /* 1/16th of axis-range around the center is 'dead'. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The hot friction effect. */ + if (supported & SDL_HAPTIC_FRICTION) { + SDL_Log(" effect %d: Condition Friction\n", nefx); + efx[nefx].type = SDL_HAPTIC_FRICTION; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now we'll try a ramp effect */ + if (supported & SDL_HAPTIC_RAMP) { + SDL_Log(" effect %d: Ramp\n", nefx); + efx[nefx].type = SDL_HAPTIC_RAMP; + efx[nefx].ramp.direction.type = SDL_HAPTIC_CARTESIAN; + efx[nefx].ramp.direction.dir[0] = 1; /* Force comes from */ + efx[nefx].ramp.direction.dir[1] = -1; /* the north-east. */ + efx[nefx].ramp.length = 5000; + efx[nefx].ramp.start = 0x4000; + efx[nefx].ramp.end = -0x4000; + efx[nefx].ramp.attack_length = 1000; + efx[nefx].ramp.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Finally we'll try a left/right effect. */ + if (supported & SDL_HAPTIC_LEFTRIGHT) { + SDL_Log(" effect %d: Left/Right\n", nefx); + efx[nefx].type = SDL_HAPTIC_LEFTRIGHT; + efx[nefx].leftright.length = 5000; + efx[nefx].leftright.large_magnitude = 0x3000; + efx[nefx].leftright.small_magnitude = 0xFFFF; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + + SDL_Log + ("\nNow playing effects for 5 seconds each with 1 second delay between\n"); + for (i = 0; i < nefx; i++) { + SDL_Log(" Playing effect %d\n", i); + SDL_HapticRunEffect(haptic, id[i], 1); + SDL_Delay(6000); /* Effects only have length 5000 */ + } + + /* Quit */ + if (haptic != NULL) + SDL_HapticClose(haptic); + SDL_Quit(); + + return 0; +} + + +/* + * Cleans up a bit. + */ +static void +abort_execution(void) +{ + SDL_Log("\nAborting program execution.\n"); + + SDL_HapticClose(haptic); + SDL_Quit(); + + exit(1); +} + + +/* + * Displays information about the haptic device. + */ +static void +HapticPrintSupported(SDL_Haptic * haptic) +{ + unsigned int supported; + + supported = SDL_HapticQuery(haptic); + SDL_Log(" Supported effects [%d effects, %d playing]:\n", + SDL_HapticNumEffects(haptic), SDL_HapticNumEffectsPlaying(haptic)); + if (supported & SDL_HAPTIC_CONSTANT) + SDL_Log(" constant\n"); + if (supported & SDL_HAPTIC_SINE) + SDL_Log(" sine\n"); + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* if (supported & SDL_HAPTIC_SQUARE) + SDL_Log(" square\n"); */ + if (supported & SDL_HAPTIC_TRIANGLE) + SDL_Log(" triangle\n"); + if (supported & SDL_HAPTIC_SAWTOOTHUP) + SDL_Log(" sawtoothup\n"); + if (supported & SDL_HAPTIC_SAWTOOTHDOWN) + SDL_Log(" sawtoothdown\n"); + if (supported & SDL_HAPTIC_RAMP) + SDL_Log(" ramp\n"); + if (supported & SDL_HAPTIC_FRICTION) + SDL_Log(" friction\n"); + if (supported & SDL_HAPTIC_SPRING) + SDL_Log(" spring\n"); + if (supported & SDL_HAPTIC_DAMPER) + SDL_Log(" damper\n"); + if (supported & SDL_HAPTIC_INERTIA) + SDL_Log(" inertia\n"); + if (supported & SDL_HAPTIC_CUSTOM) + SDL_Log(" custom\n"); + if (supported & SDL_HAPTIC_LEFTRIGHT) + SDL_Log(" left/right\n"); + SDL_Log(" Supported capabilities:\n"); + if (supported & SDL_HAPTIC_GAIN) + SDL_Log(" gain\n"); + if (supported & SDL_HAPTIC_AUTOCENTER) + SDL_Log(" autocenter\n"); + if (supported & SDL_HAPTIC_STATUS) + SDL_Log(" status\n"); +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testhittesting.c b/Engine/lib/sdl/test/testhittesting.c new file mode 100644 index 0000000000..5e32be42d0 --- /dev/null +++ b/Engine/lib/sdl/test/testhittesting.c @@ -0,0 +1,134 @@ +#include +#include "SDL.h" + +/* !!! FIXME: rewrite this to be wired in to test framework. */ + +#define RESIZE_BORDER 20 + +const SDL_Rect drag_areas[] = { + { 20, 20, 100, 100 }, + { 200, 70, 100, 100 }, + { 400, 90, 100, 100 } +}; + +static const SDL_Rect *areas = drag_areas; +static int numareas = SDL_arraysize(drag_areas); + +static SDL_HitTestResult +hitTest(SDL_Window *window, const SDL_Point *pt, void *data) +{ + int i; + int w, h; + + for (i = 0; i < numareas; i++) { + if (SDL_PointInRect(pt, &areas[i])) { + SDL_Log("HIT-TEST: DRAGGABLE\n"); + return SDL_HITTEST_DRAGGABLE; + } + } + + SDL_GetWindowSize(window, &w, &h); + + #define REPORT_RESIZE_HIT(name) { \ + SDL_Log("HIT-TEST: RESIZE_" #name "\n"); \ + return SDL_HITTEST_RESIZE_##name; \ + } + + if (pt->x < RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPLEFT); + } else if (pt->x > RESIZE_BORDER && pt->x < w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOP); + } else if (pt->x > w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPRIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > RESIZE_BORDER && pt->y < h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(RIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMRIGHT); + } else if (pt->x < w - RESIZE_BORDER && pt->x > RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOM); + } else if (pt->x < RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMLEFT); + } else if (pt->x < RESIZE_BORDER && pt->y < h - RESIZE_BORDER && pt->y > RESIZE_BORDER) { + REPORT_RESIZE_HIT(LEFT); + } + + SDL_Log("HIT-TEST: NORMAL\n"); + return SDL_HITTEST_NORMAL; +} + + +int main(int argc, char **argv) +{ + int done = 0; + SDL_Window *window; + SDL_Renderer *renderer; + + /* !!! FIXME: check for errors. */ + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("Drag the red boxes", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE); + renderer = SDL_CreateRenderer(window, -1, 0); + + if (SDL_SetWindowHitTest(window, hitTest, NULL) == -1) { + SDL_Log("Enabling hit-testing failed!\n"); + SDL_Quit(); + return 1; + } + + while (!done) + { + SDL_Event e; + int nothing_to_do = 1; + + SDL_SetRenderDrawColor(renderer, 0, 0, 127, 255); + SDL_RenderClear(renderer); + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRects(renderer, areas, SDL_arraysize(drag_areas)); + SDL_RenderPresent(renderer); + + while (SDL_PollEvent(&e)) { + nothing_to_do = 0; + + switch (e.type) + { + case SDL_MOUSEBUTTONDOWN: + SDL_Log("button down!\n"); + break; + + case SDL_MOUSEBUTTONUP: + SDL_Log("button up!\n"); + break; + + case SDL_WINDOWEVENT: + if (e.window.event == SDL_WINDOWEVENT_MOVED) { + SDL_Log("Window event moved to (%d, %d)!\n", (int) e.window.data1, (int) e.window.data2); + } + break; + + case SDL_KEYDOWN: + if (e.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } else if (e.key.keysym.sym == SDLK_x) { + if (!areas) { + areas = drag_areas; + numareas = SDL_arraysize(drag_areas); + } else { + areas = NULL; + numareas = 0; + } + } + break; + + case SDL_QUIT: + done = 1; + break; + } + } + + if (nothing_to_do) { + SDL_Delay(50); + } + } + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testhotplug.c b/Engine/lib/sdl/test/testhotplug.c new file mode 100644 index 0000000000..1fa9637548 --- /dev/null +++ b/Engine/lib/sdl/test/testhotplug.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL joystick hotplugging */ + +#include +#include +#include + +#include "SDL.h" + +#if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED + +int +main(int argc, char *argv[]) +{ + SDL_Joystick *joystick = NULL; + SDL_Haptic *haptic = NULL; + SDL_JoystickID instance = -1; + SDL_bool keepGoing = SDL_TRUE; + int i; + SDL_bool enable_haptic = SDL_TRUE; + Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK; + + for (i = 1; i < argc; ++i) { + if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) { + enable_haptic = SDL_FALSE; + } + } + + if(enable_haptic) { + init_subsystems |= SDL_INIT_HAPTIC; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(init_subsystems) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* + //SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0); + */ + + SDL_Log("There are %d joysticks at startup\n", SDL_NumJoysticks()); + if (enable_haptic) + SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics()); + + while(keepGoing) + { + SDL_Event event; + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + keepGoing = SDL_FALSE; + break; + case SDL_JOYDEVICEADDED: + if (joystick != NULL) + { + SDL_Log("Only one joystick supported by this test\n"); + } + else + { + joystick = SDL_JoystickOpen(event.jdevice.which); + instance = SDL_JoystickInstanceID(joystick); + SDL_Log("Joy Added : %d : %s\n", event.jdevice.which, SDL_JoystickName(joystick)); + if (enable_haptic) + { + if (SDL_JoystickIsHaptic(joystick)) + { + haptic = SDL_HapticOpenFromJoystick(joystick); + if (haptic) + { + SDL_Log("Joy Haptic Opened\n"); + if (SDL_HapticRumbleInit( haptic ) != 0) + { + SDL_Log("Could not init Rumble!: %s\n", SDL_GetError()); + SDL_HapticClose(haptic); + haptic = NULL; + } + } else { + SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError()); + } + } + else + { + SDL_Log("No haptic found\n"); + } + } + } + break; + case SDL_JOYDEVICEREMOVED: + if (instance == event.jdevice.which) + { + SDL_Log("Joy Removed: %d\n", event.jdevice.which); + instance = -1; + if(enable_haptic && haptic) + { + SDL_HapticClose(haptic); + haptic = NULL; + } + SDL_JoystickClose(joystick); + joystick = NULL; + } else { + SDL_Log("Unknown joystick diconnected\n"); + } + break; + case SDL_JOYAXISMOTION: +/* +// SDL_Log("Axis Move: %d\n", event.jaxis.axis); +*/ + if (enable_haptic) + SDL_HapticRumblePlay(haptic, 0.25, 250); + break; + case SDL_JOYBUTTONDOWN: + SDL_Log("Button Press: %d\n", event.jbutton.button); + if(enable_haptic && haptic) + { + SDL_HapticRumblePlay(haptic, 0.25, 250); + } + if (event.jbutton.button == 0) { + SDL_Log("Exiting due to button press of button 0\n"); + keepGoing = SDL_FALSE; + } + break; + case SDL_JOYBUTTONUP: + SDL_Log("Button Release: %d\n", event.jbutton.button); + break; + } + } + } + + SDL_Quit(); + + return 0; +} +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick and haptic support.\n"); + return 1; +} + +#endif diff --git a/Engine/lib/sdl/test/testiconv.c b/Engine/lib/sdl/test/testiconv.c new file mode 100644 index 0000000000..79efec8aaa --- /dev/null +++ b/Engine/lib/sdl/test/testiconv.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include + +#include "SDL.h" + +static size_t +widelen(char *data) +{ + size_t len = 0; + Uint32 *p = (Uint32 *) data; + while (*p++) { + ++len; + } + return len; +} + +int +main(int argc, char *argv[]) +{ + const char *formats[] = { + "UTF8", + "UTF-8", + "UTF16BE", + "UTF-16BE", + "UTF16LE", + "UTF-16LE", + "UTF32BE", + "UTF-32BE", + "UTF32LE", + "UTF-32LE", + "UCS4", + "UCS-4", + }; + char buffer[BUFSIZ]; + char *ucs4; + char *test[2]; + int i; + FILE *file; + int errors = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!argv[1]) { + argv[1] = "utf8.txt"; + } + file = fopen(argv[1], "rb"); + if (!file) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to open %s\n", argv[1]); + return (1); + } + + while (fgets(buffer, sizeof(buffer), file)) { + /* Convert to UCS-4 */ + size_t len; + ucs4 = + SDL_iconv_string("UCS-4", "UTF-8", buffer, + SDL_strlen(buffer) + 1); + len = (widelen(ucs4) + 1) * 4; + for (i = 0; i < SDL_arraysize(formats); ++i) { + test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len); + test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len); + if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s\n", formats[i]); + ++errors; + } + SDL_free(test[0]); + SDL_free(test[1]); + } + test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len); + SDL_free(ucs4); + fputs(test[0], stdout); + SDL_free(test[0]); + } + fclose(file); + return (errors ? errors + 1 : 0); +} diff --git a/Engine/lib/sdl/test/testime.c b/Engine/lib/sdl/test/testime.c new file mode 100644 index 0000000000..d6e7ea1f26 --- /dev/null +++ b/Engine/lib/sdl/test/testime.c @@ -0,0 +1,373 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* A simple program to test the Input Method support in the SDL library (2.0+) */ + +#include +#include +#include + +#include "SDL.h" +#ifdef HAVE_SDL_TTF +#include "SDL_ttf.h" +#endif + +#include "SDL_test_common.h" + +#define DEFAULT_PTSIZE 30 +#define DEFAULT_FONT "/System/Library/Fonts/华文细黑.ttf" +#define MAX_TEXT_LENGTH 256 + +static SDLTest_CommonState *state; +static SDL_Rect textRect, markedRect; +static SDL_Color lineColor = {0,0,0,0}; +static SDL_Color backColor = {255,255,255,0}; +static SDL_Color textColor = {0,0,0,0}; +static char text[MAX_TEXT_LENGTH], markedText[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; +static int cursor = 0; +#ifdef HAVE_SDL_TTF +static TTF_Font *font; +#endif + +size_t utf8_length(unsigned char c) +{ + c = (unsigned char)(0xff & c); + if (c < 0x80) + return 1; + else if ((c >> 5) ==0x6) + return 2; + else if ((c >> 4) == 0xe) + return 3; + else if ((c >> 3) == 0x1e) + return 4; + else + return 0; +} + +char *utf8_next(char *p) +{ + size_t len = utf8_length(*p); + size_t i = 0; + if (!len) + return 0; + + for (; i < len; ++i) + { + ++p; + if (!*p) + return 0; + } + return p; +} + +char *utf8_advance(char *p, size_t distance) +{ + size_t i = 0; + for (; i < distance && p; ++i) + { + p = utf8_next(p); + } + return p; +} + +void usage() +{ + SDL_Log("usage: testime [--font fontfile]\n"); + exit(0); +} + +void InitInput() +{ + + /* Prepare a rect for text input */ + textRect.x = textRect.y = 100; + textRect.w = DEFAULT_WINDOW_WIDTH - 2 * textRect.x; + textRect.h = 50; + + text[0] = 0; + markedRect = textRect; + markedText[0] = 0; + + SDL_StartTextInput(); +} + +void CleanupVideo() +{ + SDL_StopTextInput(); +#ifdef HAVE_SDL_TTF + TTF_CloseFont(font); + TTF_Quit(); +#endif +} + + +void _Redraw(SDL_Renderer * renderer) { + int w = 0, h = textRect.h; + SDL_Rect cursorRect, underlineRect; + + SDL_SetRenderDrawColor(renderer, 255,255,255,255); + SDL_RenderFillRect(renderer,&textRect); + +#ifdef HAVE_SDL_TTF + if (*text) + { + SDL_Surface *textSur = TTF_RenderUTF8_Blended(font, text, textColor); + SDL_Rect dest = {textRect.x, textRect.y, textSur->w, textSur->h }; + + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,textSur); + SDL_FreeSurface(textSur); + + SDL_RenderCopy(renderer,texture,NULL,&dest); + SDL_DestroyTexture(texture); + TTF_SizeUTF8(font, text, &w, &h); + } +#endif + + markedRect.x = textRect.x + w; + markedRect.w = textRect.w - w; + if (markedRect.w < 0) + { + /* Stop text input because we cannot hold any more characters */ + SDL_StopTextInput(); + return; + } + else + { + SDL_StartTextInput(); + } + + cursorRect = markedRect; + cursorRect.w = 2; + cursorRect.h = h; + + SDL_SetRenderDrawColor(renderer, 255,255,255,255); + SDL_RenderFillRect(renderer,&markedRect); + + if (markedText[0]) + { +#ifdef HAVE_SDL_TTF + if (cursor) + { + char *p = utf8_advance(markedText, cursor); + char c = 0; + if (!p) + p = &markedText[strlen(markedText)]; + + c = *p; + *p = 0; + TTF_SizeUTF8(font, markedText, &w, 0); + cursorRect.x += w; + *p = c; + } + SDL_Surface *textSur = TTF_RenderUTF8_Blended(font, markedText, textColor); + SDL_Rect dest = {markedRect.x, markedRect.y, textSur->w, textSur->h }; + TTF_SizeUTF8(font, markedText, &w, &h); + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,textSur); + SDL_FreeSurface(textSur); + + SDL_RenderCopy(renderer,texture,NULL,&dest); + SDL_DestroyTexture(texture); +#endif + + underlineRect = markedRect; + underlineRect.y += (h - 2); + underlineRect.h = 2; + underlineRect.w = w; + + SDL_SetRenderDrawColor(renderer, 0,0,0,0); + SDL_RenderFillRect(renderer,&markedRect); + } + + SDL_SetRenderDrawColor(renderer, 0,0,0,0); + SDL_RenderFillRect(renderer,&cursorRect); + + SDL_SetTextInputRect(&markedRect); +} + +void Redraw() { + int i; + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + + _Redraw(renderer); + + SDL_RenderPresent(renderer); + } +} + +int main(int argc, char *argv[]) { + int i, done; + SDL_Event event; + const char *fontname = DEFAULT_FONT; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;i++) { + SDLTest_CommonArg(state, i); + } + for (argc--, argv++; argc > 0; argc--, argv++) + { + if (strcmp(argv[0], "--help") == 0) { + usage(); + return 0; + } + + else if (strcmp(argv[0], "--font") == 0) + { + argc--; + argv++; + + if (argc > 0) + fontname = argv[0]; + else { + usage(); + return 0; + } + } + } + + if (!SDLTest_CommonInit(state)) { + return 2; + } + + +#ifdef HAVE_SDL_TTF + /* Initialize fonts */ + TTF_Init(); + + font = TTF_OpenFont(fontname, DEFAULT_PTSIZE); + if (! font) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to find font: %s\n", TTF_GetError()); + exit(-1); + } +#endif + + SDL_Log("Using font: %s\n", fontname); + atexit(SDL_Quit); + + InitInput(); + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + Redraw(); + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch(event.type) { + case SDL_KEYDOWN: { + switch (event.key.keysym.sym) + { + case SDLK_RETURN: + text[0]=0x00; + Redraw(); + break; + case SDLK_BACKSPACE: + { + size_t textlen = SDL_strlen(text); + + do { + if (textlen==0) + { + break; + } + if ((text[textlen-1] & 0x80) == 0x00) + { + /* One byte */ + text[textlen-1]=0x00; + break; + } + if ((text[textlen-1] & 0xC0) == 0x80) + { + /* Byte from the multibyte sequence */ + text[textlen-1]=0x00; + textlen--; + } + if ((text[textlen-1] & 0xC0) == 0xC0) + { + /* First byte of multibyte sequence */ + text[textlen-1]=0x00; + break; + } + } while(1); + + Redraw(); + } + break; + } + + if (done) + { + break; + } + + SDL_Log("Keyboard: scancode 0x%08X = %s, keycode 0x%08X = %s\n", + event.key.keysym.scancode, + SDL_GetScancodeName(event.key.keysym.scancode), + event.key.keysym.sym, SDL_GetKeyName(event.key.keysym.sym)); + break; + + case SDL_TEXTINPUT: + if (event.text.text[0] == '\0' || event.text.text[0] == '\n' || + markedRect.w < 0) + break; + + SDL_Log("Keyboard: text input \"%s\"\n", event.text.text); + + if (SDL_strlen(text) + SDL_strlen(event.text.text) < sizeof(text)) + SDL_strlcat(text, event.text.text, sizeof(text)); + + SDL_Log("text inputed: %s\n", text); + + /* After text inputed, we can clear up markedText because it */ + /* is committed */ + markedText[0] = 0; + Redraw(); + break; + + case SDL_TEXTEDITING: + SDL_Log("text editing \"%s\", selected range (%d, %d)\n", + event.edit.text, event.edit.start, event.edit.length); + + strcpy(markedText, event.edit.text); + cursor = event.edit.start; + Redraw(); + break; + } + break; + + } + } + } + CleanupVideo(); + SDLTest_CommonQuit(state); + return 0; +} + + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testintersections.c b/Engine/lib/sdl/test/testintersections.c new file mode 100644 index 0000000000..82aae63388 --- /dev/null +++ b/Engine/lib/sdl/test/testintersections.c @@ -0,0 +1,363 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define SWAP(typ,a,b) do{typ t=a;a=b;b=t;}while(0) +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + +int mouse_begin_x = -1, mouse_begin_y = -1; +int done; + +void +DrawPoints(SDL_Renderer * renderer) +{ + int i; + int x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + x = rand() % viewport.w; + y = rand() % viewport.h; + SDL_RenderDrawPoint(renderer, x, y); + } +} + +#define MAX_LINES 16 +int num_lines = 0; +SDL_Rect lines[MAX_LINES]; +static int +add_line(int x1, int y1, int x2, int y2) +{ + if (num_lines >= MAX_LINES) + return 0; + if ((x1 == x2) && (y1 == y2)) + return 0; + + SDL_Log("adding line (%d, %d), (%d, %d)\n", x1, y1, x2, y2); + lines[num_lines].x = x1; + lines[num_lines].y = y1; + lines[num_lines].w = x2; + lines[num_lines].h = y2; + + return ++num_lines; +} + + +void +DrawLines(SDL_Renderer * renderer) +{ + int i; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + + for (i = 0; i < num_lines; ++i) { + if (i == -1) { + SDL_RenderDrawLine(renderer, 0, 0, viewport.w - 1, viewport.h - 1); + SDL_RenderDrawLine(renderer, 0, viewport.h - 1, viewport.w - 1, 0); + SDL_RenderDrawLine(renderer, 0, viewport.h / 2, viewport.w - 1, viewport.h / 2); + SDL_RenderDrawLine(renderer, viewport.w / 2, 0, viewport.w / 2, viewport.h - 1); + } else { + SDL_RenderDrawLine(renderer, lines[i].x, lines[i].y, lines[i].w, lines[i].h); + } + } +} + +#define MAX_RECTS 16 +int num_rects = 0; +SDL_Rect rects[MAX_RECTS]; +static int +add_rect(int x1, int y1, int x2, int y2) +{ + if (num_rects >= MAX_RECTS) + return 0; + if ((x1 == x2) || (y1 == y2)) + return 0; + + if (x1 > x2) + SWAP(int, x1, x2); + if (y1 > y2) + SWAP(int, y1, y2); + + SDL_Log("adding rect (%d, %d), (%d, %d) [%dx%d]\n", x1, y1, x2, y2, + x2 - x1, y2 - y1); + + rects[num_rects].x = x1; + rects[num_rects].y = y1; + rects[num_rects].w = x2 - x1; + rects[num_rects].h = y2 - y1; + + return ++num_rects; +} + +static void +DrawRects(SDL_Renderer * renderer) +{ + SDL_SetRenderDrawColor(renderer, 255, 127, 0, 255); + SDL_RenderFillRects(renderer, rects, num_rects); +} + +static void +DrawRectLineIntersections(SDL_Renderer * renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 0, 255, 55, 255); + + for (i = 0; i < num_rects; i++) + for (j = 0; j < num_lines; j++) { + int x1, y1, x2, y2; + SDL_Rect r; + + r = rects[i]; + x1 = lines[j].x; + y1 = lines[j].y; + x2 = lines[j].w; + y2 = lines[j].h; + + if (SDL_IntersectRectAndLine(&r, &x1, &y1, &x2, &y2)) { + SDL_RenderDrawLine(renderer, x1, y1, x2, y2); + } + } +} + +static void +DrawRectRectIntersections(SDL_Renderer * renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 255, 200, 0, 255); + + for (i = 0; i < num_rects; i++) + for (j = i + 1; j < num_rects; j++) { + SDL_Rect r; + if (SDL_IntersectRect(&rects[i], &rects[j], &r)) { + SDL_RenderFillRect(renderer, &r); + } + } +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch (event.type) { + case SDL_MOUSEBUTTONDOWN: + mouse_begin_x = event.button.x; + mouse_begin_y = event.button.y; + break; + case SDL_MOUSEBUTTONUP: + if (event.button.button == 3) + add_line(mouse_begin_x, mouse_begin_y, event.button.x, + event.button.y); + if (event.button.button == 1) + add_rect(mouse_begin_x, mouse_begin_y, event.button.x, + event.button.y); + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case 'l': + if (event.key.keysym.mod & KMOD_SHIFT) + num_lines = 0; + else + add_line(rand() % 640, rand() % 480, rand() % 640, + rand() % 480); + break; + case 'r': + if (event.key.keysym.mod & KMOD_SHIFT) + num_rects = 0; + else + add_rect(rand() % 640, rand() % 480, rand() % 640, + rand() % 480); + break; + } + break; + default: + break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawPoints(renderer); + DrawRectRectIntersections(renderer); + DrawLines(renderer); + DrawRectLineIntersections(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + num_objects = NUM_OBJECTS; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_objects = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha]\n", + argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand(time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + SDLTest_CommonQuit(state); + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testjoystick.c b/Engine/lib/sdl/test/testjoystick.c new file mode 100644 index 0000000000..bed27212e1 --- /dev/null +++ b/Engine/lib/sdl/test/testjoystick.c @@ -0,0 +1,346 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL joystick routines */ + +#include +#include +#include + +#include "SDL.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#ifndef SDL_JOYSTICK_DISABLED + +#ifdef __IPHONEOS__ +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 480 +#else +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 +#endif + +SDL_Renderer *screen = NULL; +SDL_bool retval = SDL_FALSE; +SDL_bool done = SDL_FALSE; + +static void +DrawRect(SDL_Renderer *r, const int x, const int y, const int w, const int h) +{ + const SDL_Rect area = { x, y, w, h }; + SDL_RenderFillRect(r, &area); +} + +void +loop(void *arg) +{ + SDL_Event event; + int i; + SDL_Joystick *joystick = (SDL_Joystick *)arg; + + /* blank screen, set up for drawing this frame. */ + SDL_SetRenderDrawColor(screen, 0x0, 0x0, 0x0, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + + while (SDL_PollEvent(&event)) { + switch (event.type) { + + case SDL_JOYDEVICEREMOVED: + SDL_Log("Joystick device %d removed.\n", (int) event.jdevice.which); + SDL_Log("Our instance ID is %d\n", (int) SDL_JoystickInstanceID(joystick)); + break; + + case SDL_JOYAXISMOTION: + SDL_Log("Joystick %d axis %d value: %d\n", + event.jaxis.which, + event.jaxis.axis, event.jaxis.value); + break; + case SDL_JOYHATMOTION: + SDL_Log("Joystick %d hat %d value:", + event.jhat.which, event.jhat.hat); + if (event.jhat.value == SDL_HAT_CENTERED) + SDL_Log(" centered"); + if (event.jhat.value & SDL_HAT_UP) + SDL_Log(" up"); + if (event.jhat.value & SDL_HAT_RIGHT) + SDL_Log(" right"); + if (event.jhat.value & SDL_HAT_DOWN) + SDL_Log(" down"); + if (event.jhat.value & SDL_HAT_LEFT) + SDL_Log(" left"); + SDL_Log("\n"); + break; + case SDL_JOYBALLMOTION: + SDL_Log("Joystick %d ball %d delta: (%d,%d)\n", + event.jball.which, + event.jball.ball, event.jball.xrel, event.jball.yrel); + break; + case SDL_JOYBUTTONDOWN: + SDL_Log("Joystick %d button %d down\n", + event.jbutton.which, event.jbutton.button); + break; + case SDL_JOYBUTTONUP: + SDL_Log("Joystick %d button %d up\n", + event.jbutton.which, event.jbutton.button); + break; + case SDL_KEYDOWN: + if ((event.key.keysym.sym != SDLK_ESCAPE) && + (event.key.keysym.sym != SDLK_AC_BACK)) { + break; + } + /* Fall through to signal quit */ + case SDL_FINGERDOWN: + case SDL_MOUSEBUTTONDOWN: + case SDL_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + /* Update visual joystick state */ + SDL_SetRenderDrawColor(screen, 0x00, 0xFF, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumButtons(joystick); ++i) { + if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { + DrawRect(screen, (i%20) * 34, SCREEN_HEIGHT - 68 + (i/20) * 34, 32, 32); + } + } + + SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumAxes(joystick); ++i) { + /* Draw the X/Y axis */ + int x, y; + x = (((int) SDL_JoystickGetAxis(joystick, i)) + 32768); + x *= SCREEN_WIDTH; + x /= 65535; + if (x < 0) { + x = 0; + } else if (x > (SCREEN_WIDTH - 16)) { + x = SCREEN_WIDTH - 16; + } + ++i; + if (i < SDL_JoystickNumAxes(joystick)) { + y = (((int) SDL_JoystickGetAxis(joystick, i)) + 32768); + } else { + y = 32768; + } + y *= SCREEN_HEIGHT; + y /= 65535; + if (y < 0) { + y = 0; + } else if (y > (SCREEN_HEIGHT - 16)) { + y = SCREEN_HEIGHT - 16; + } + + DrawRect(screen, x, y, 16, 16); + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0xFF, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumHats(joystick); ++i) { + /* Derive the new position */ + int x = SCREEN_WIDTH/2; + int y = SCREEN_HEIGHT/2; + const Uint8 hat_pos = SDL_JoystickGetHat(joystick, i); + + if (hat_pos & SDL_HAT_UP) { + y = 0; + } else if (hat_pos & SDL_HAT_DOWN) { + y = SCREEN_HEIGHT-8; + } + + if (hat_pos & SDL_HAT_LEFT) { + x = 0; + } else if (hat_pos & SDL_HAT_RIGHT) { + x = SCREEN_WIDTH-8; + } + + DrawRect(screen, x, y, 8, 8); + } + + SDL_RenderPresent(screen); + + if (SDL_JoystickGetAttached( joystick ) == 0) { + done = SDL_TRUE; + retval = SDL_TRUE; /* keep going, wait for reattach. */ + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +static SDL_bool +WatchJoystick(SDL_Joystick * joystick) +{ + SDL_Window *window = NULL; + const char *name = NULL; + + retval = SDL_FALSE; + done = SDL_FALSE; + + /* Create a window to display joystick axis position */ + window = SDL_CreateWindow("Joystick Test", SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, + SCREEN_HEIGHT, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + screen = SDL_CreateRenderer(window, -1, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderPresent(screen); + SDL_RaiseWindow(window); + + /* Print info about the joystick we are watching */ + name = SDL_JoystickName(joystick); + SDL_Log("Watching joystick %d: (%s)\n", SDL_JoystickInstanceID(joystick), + name ? name : "Unknown Joystick"); + SDL_Log("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", + SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), + SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick)); + + /* Loop, getting joystick events! */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, joystick, 0, 1); +#else + while (!done) { + loop(joystick); + } +#endif + + SDL_DestroyRenderer(screen); + screen = NULL; + SDL_DestroyWindow(window); + return retval; +} + +int +main(int argc, char *argv[]) +{ + const char *name; + int i; + SDL_Joystick *joystick; + + SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0"); + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Print information about the joysticks */ + SDL_Log("There are %d joysticks attached\n", SDL_NumJoysticks()); + for (i = 0; i < SDL_NumJoysticks(); ++i) { + name = SDL_JoystickNameForIndex(i); + SDL_Log("Joystick %d: %s\n", i, name ? name : "Unknown Joystick"); + joystick = SDL_JoystickOpen(i); + if (joystick == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_JoystickOpen(%d) failed: %s\n", i, + SDL_GetError()); + } else { + char guid[64]; + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), + guid, sizeof (guid)); + SDL_Log(" axes: %d\n", SDL_JoystickNumAxes(joystick)); + SDL_Log(" balls: %d\n", SDL_JoystickNumBalls(joystick)); + SDL_Log(" hats: %d\n", SDL_JoystickNumHats(joystick)); + SDL_Log(" buttons: %d\n", SDL_JoystickNumButtons(joystick)); + SDL_Log("instance id: %d\n", SDL_JoystickInstanceID(joystick)); + SDL_Log(" guid: %s\n", guid); + SDL_JoystickClose(joystick); + } + } + +#if defined(__ANDROID__) || defined(__IPHONEOS__) + if (SDL_NumJoysticks() > 0) { +#else + if (argv[1]) { +#endif + SDL_bool reportederror = SDL_FALSE; + SDL_bool keepGoing = SDL_TRUE; + SDL_Event event; + int device; +#if defined(__ANDROID__) || defined(__IPHONEOS__) + device = 0; +#else + device = atoi(argv[1]); +#endif + joystick = SDL_JoystickOpen(device); + if (joystick != NULL) { + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + } + + while ( keepGoing ) { + if (joystick == NULL) { + if ( !reportederror ) { + SDL_Log("Couldn't open joystick %d: %s\n", device, SDL_GetError()); + keepGoing = SDL_FALSE; + reportederror = SDL_TRUE; + } + } else { + reportederror = SDL_FALSE; + keepGoing = WatchJoystick(joystick); + SDL_JoystickClose(joystick); + } + + joystick = NULL; + if (keepGoing) { + SDL_Log("Waiting for attach\n"); + } + while (keepGoing) { + SDL_WaitEvent(&event); + if ((event.type == SDL_QUIT) || (event.type == SDL_FINGERDOWN) + || (event.type == SDL_MOUSEBUTTONDOWN)) { + keepGoing = SDL_FALSE; + } else if (event.type == SDL_JOYDEVICEADDED) { + joystick = SDL_JoystickOpen(device); + if (joystick != NULL) { + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + } + break; + } + } + } + } + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); + + return 0; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testkeys.c b/Engine/lib/sdl/test/testkeys.c new file mode 100644 index 0000000000..aea496caaf --- /dev/null +++ b/Engine/lib/sdl/test/testkeys.c @@ -0,0 +1,40 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Print out all the scancodes we have, just to verify them */ + +#include +#include +#include +#include + +#include "SDL.h" + +int +main(int argc, char *argv[]) +{ + SDL_Scancode scancode; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + for (scancode = 0; scancode < SDL_NUM_SCANCODES; ++scancode) { + SDL_Log("Scancode #%d, \"%s\"\n", scancode, + SDL_GetScancodeName(scancode)); + } + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testloadso.c b/Engine/lib/sdl/test/testloadso.c new file mode 100644 index 0000000000..fb87fbed7a --- /dev/null +++ b/Engine/lib/sdl/test/testloadso.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to test dynamic loading with the loadso subsystem. +*/ + +#include +#include +#include + +#include "SDL.h" + +typedef int (*fntype) (const char *); + +int +main(int argc, char *argv[]) +{ + int retval = 0; + int hello = 0; + const char *libname = NULL; + const char *symname = NULL; + void *lib = NULL; + fntype fn = NULL; + + if (argc != 3) { + const char *app = argv[0]; + SDL_Log("USAGE: %s \n", app); + SDL_Log(" %s --hello \n", app); + return 1; + } + + /* Initialize SDL */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 2; + } + + if (strcmp(argv[1], "--hello") == 0) { + hello = 1; + libname = argv[2]; + symname = "puts"; + } else { + libname = argv[1]; + symname = argv[2]; + } + + lib = SDL_LoadObject(libname); + if (lib == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n", + libname, SDL_GetError()); + retval = 3; + } else { + fn = (fntype) SDL_LoadFunction(lib, symname); + if (fn == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n", + symname, SDL_GetError()); + retval = 4; + } else { + SDL_Log("Found %s in %s at %p\n", symname, libname, fn); + if (hello) { + SDL_Log("Calling function...\n"); + fflush(stdout); + fn(" HELLO, WORLD!\n"); + SDL_Log("...apparently, we survived. :)\n"); + SDL_Log("Unloading library...\n"); + fflush(stdout); + } + } + SDL_UnloadObject(lib); + } + SDL_Quit(); + return retval; +} diff --git a/Engine/lib/sdl/test/testlock.c b/Engine/lib/sdl/test/testlock.c new file mode 100644 index 0000000000..1106ec3bf0 --- /dev/null +++ b/Engine/lib/sdl/test/testlock.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test the thread and mutex locking functions + Also exercises the system's signal/thread interaction +*/ + +#include +#include +#include /* for atexit() */ + +#include "SDL.h" + +static SDL_mutex *mutex = NULL; +static SDL_threadID mainthread; +static SDL_Thread *threads[6]; +static volatile int doterminate = 0; + +/* + * SDL_Quit() shouldn't be used with atexit() directly because + * calling conventions may differ... + */ +static void +SDL_Quit_Wrapper(void) +{ + SDL_Quit(); +} + +void +printid(void) +{ + SDL_Log("Process %lu: exiting\n", SDL_ThreadID()); +} + +void +terminate(int sig) +{ + signal(SIGINT, terminate); + doterminate = 1; +} + +void +closemutex(int sig) +{ + SDL_threadID id = SDL_ThreadID(); + int i; + SDL_Log("Process %lu: Cleaning up...\n", id == mainthread ? 0 : id); + doterminate = 1; + for (i = 0; i < 6; ++i) + SDL_WaitThread(threads[i], NULL); + SDL_DestroyMutex(mutex); + exit(sig); +} + +int SDLCALL +Run(void *data) +{ + if (SDL_ThreadID() == mainthread) + signal(SIGTERM, closemutex); + while (!doterminate) { + SDL_Log("Process %lu ready to work\n", SDL_ThreadID()); + if (SDL_LockMutex(mutex) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't lock mutex: %s", SDL_GetError()); + exit(1); + } + SDL_Log("Process %lu, working!\n", SDL_ThreadID()); + SDL_Delay(1 * 1000); + SDL_Log("Process %lu, done!\n", SDL_ThreadID()); + if (SDL_UnlockMutex(mutex) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't unlock mutex: %s", SDL_GetError()); + exit(1); + } + /* If this sleep isn't done, then threads may starve */ + SDL_Delay(10); + } + if (SDL_ThreadID() == mainthread && doterminate) { + SDL_Log("Process %lu: raising SIGTERM\n", SDL_ThreadID()); + raise(SIGTERM); + } + return (0); +} + +int +main(int argc, char *argv[]) +{ + int i; + int maxproc = 6; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + exit(1); + } + atexit(SDL_Quit_Wrapper); + + if ((mutex = SDL_CreateMutex()) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create mutex: %s\n", SDL_GetError()); + exit(1); + } + + mainthread = SDL_ThreadID(); + SDL_Log("Main thread: %lu\n", mainthread); + atexit(printid); + for (i = 0; i < maxproc; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Worker%d", i); + if ((threads[i] = SDL_CreateThread(Run, name, NULL)) == NULL) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread!\n"); + } + signal(SIGINT, terminate); + Run(NULL); + + return (0); /* Never reached */ +} diff --git a/Engine/lib/sdl/test/testmessage.c b/Engine/lib/sdl/test/testmessage.c new file mode 100644 index 0000000000..91968c322c --- /dev/null +++ b/Engine/lib/sdl/test/testmessage.c @@ -0,0 +1,193 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL MessageBox API */ + +#include +#include +#include + +#include "SDL.h" + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +static int +button_messagebox(void *eventNumber) +{ + const SDL_MessageBoxButtonData buttons[] = { + { + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, + 0, + "OK" + },{ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, + 1, + "Cancel" + }, + }; + + SDL_MessageBoxData data = { + SDL_MESSAGEBOX_INFORMATION, + NULL, /* no parent window */ + "Custom MessageBox", + "This is a custom messagebox", + 2, + buttons, + NULL /* Default color scheme */ + }; + + int button = -1; + int success = 0; + if (eventNumber) { + data.message = "This is a custom messagebox from a background thread."; + } + + success = SDL_ShowMessageBox(&data, &button); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + if (eventNumber) { + SDL_UserEvent event; + event.type = (intptr_t)eventNumber; + SDL_PushEvent((SDL_Event*)&event); + return 1; + } else { + quit(2); + } + } + SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" : "OK"); + + if (eventNumber) { + SDL_UserEvent event; + event.type = (intptr_t)eventNumber; + SDL_PushEvent((SDL_Event*)&event); + } + + return 0; +} + +int +main(int argc, char *argv[]) +{ + int success; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple MessageBox with a newline:\r\nHello world!", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text: '牛肉西蘭花' ...", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "牛肉西蘭花", + "Unicode text in the title.", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + button_messagebox(NULL); + + /* Test showing a message box from a background thread. + + On Mac OS X, the video subsystem needs to be initialized for this + to work, since the message box events are dispatched by the Cocoa + subsystem on the main thread. + */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError()); + return (1); + } + { + int status = 0; + SDL_Event event; + intptr_t eventNumber = SDL_RegisterEvents(1); + SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber); + + while (SDL_WaitEvent(&event)) + { + if (event.type == eventNumber) { + break; + } + } + + SDL_WaitThread(thread, &status); + + SDL_Log("Message box thread return %i\n", status); + } + + /* Test showing a message box with a parent window */ + { + SDL_Event event; + SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0); + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox with a parent window", + window); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + while (SDL_WaitEvent(&event)) + { + if (event.type == SDL_QUIT || event.type == SDL_KEYUP) { + break; + } + } + } + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testmultiaudio.c b/Engine/lib/sdl/test/testmultiaudio.c new file mode 100644 index 0000000000..117ef2696c --- /dev/null +++ b/Engine/lib/sdl/test/testmultiaudio.c @@ -0,0 +1,200 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include "SDL.h" + +#include /* for fflush() and stdout */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +typedef struct +{ + SDL_AudioDeviceID dev; + int soundpos; + volatile int done; +} callback_data; + +callback_data cbd[64]; + +void SDLCALL +play_through_once(void *arg, Uint8 * stream, int len) +{ + callback_data *cbd = (callback_data *) arg; + Uint8 *waveptr = sound + cbd->soundpos; + int waveleft = soundlen - cbd->soundpos; + int cpy = len; + if (cpy > waveleft) + cpy = waveleft; + + SDL_memcpy(stream, waveptr, cpy); + len -= cpy; + cbd->soundpos += cpy; + if (len > 0) { + stream += cpy; + SDL_memset(stream, spec.silence, len); + cbd->done++; + } +} + +void +loop() +{ + if(cbd[0].done) { +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + SDL_PauseAudioDevice(cbd[0].dev, 1); + SDL_CloseAudioDevice(cbd[0].dev); + SDL_FreeWAV(sound); + SDL_Quit(); + } +} + +static void +test_multi_audio(int devcount) +{ + int keep_going = 1; + int i; + +#ifdef __ANDROID__ + SDL_Event event; + + /* Create a Window to get fully initialized event processing for testing pause on Android. */ + SDL_CreateWindow("testmultiaudio", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 320, 240, 0); +#endif + + if (devcount > 64) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Too many devices (%d), clamping to 64...\n", + devcount); + devcount = 64; + } + + spec.callback = play_through_once; + + for (i = 0; i < devcount; i++) { + const char *devname = SDL_GetAudioDeviceName(i, 0); + SDL_Log("playing on device #%d: ('%s')...", i, devname); + fflush(stdout); + + SDL_memset(&cbd[0], '\0', sizeof(callback_data)); + spec.userdata = &cbd[0]; + cbd[0].dev = SDL_OpenAudioDevice(devname, 0, &spec, NULL, 0); + if (cbd[0].dev == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Open device failed: %s\n", SDL_GetError()); + } else { + SDL_PauseAudioDevice(cbd[0].dev, 0); +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!cbd[0].done) + { + #ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)){} + #endif + SDL_Delay(100); + } + SDL_PauseAudioDevice(cbd[0].dev, 1); +#endif + SDL_Log("done.\n"); + SDL_CloseAudioDevice(cbd[0].dev); + } + } + + SDL_memset(cbd, '\0', sizeof(cbd)); + + SDL_Log("playing on all devices...\n"); + for (i = 0; i < devcount; i++) { + const char *devname = SDL_GetAudioDeviceName(i, 0); + spec.userdata = &cbd[i]; + cbd[i].dev = SDL_OpenAudioDevice(devname, 0, &spec, NULL, 0); + if (cbd[i].dev == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Open device %d failed: %s\n", i, SDL_GetError()); + } + } + + for (i = 0; i < devcount; i++) { + if (cbd[i].dev) { + SDL_PauseAudioDevice(cbd[i].dev, 0); + } + } + + while (keep_going) { + keep_going = 0; + for (i = 0; i < devcount; i++) { + if ((cbd[i].dev) && (!cbd[i].done)) { + keep_going = 1; + } + } + #ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)){} + #endif + + SDL_Delay(100); + } + +#ifndef __EMSCRIPTEN__ + for (i = 0; i < devcount; i++) { + if (cbd[i].dev) { + SDL_PauseAudioDevice(cbd[i].dev, 1); + SDL_CloseAudioDevice(cbd[i].dev); + } + } + + SDL_Log("All done!\n"); +#endif +} + + +int +main(int argc, char **argv) +{ + int devcount = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + devcount = SDL_GetNumAudioDevices(0); + if (devcount < 1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Don't see any specific audio devices!\n"); + } else { + if (argv[1] == NULL) { + argv[1] = "sample.wav"; + } + + /* Load the wave file into memory */ + if (SDL_LoadWAV(argv[1], &spec, &sound, &soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", argv[1], + SDL_GetError()); + } else { + test_multi_audio(devcount); + SDL_FreeWAV(sound); + } + } + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testnative.c b/Engine/lib/sdl/test/testnative.c new file mode 100644 index 0000000000..049c4c83e9 --- /dev/null +++ b/Engine/lib/sdl/test/testnative.c @@ -0,0 +1,237 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Create a native window and attach an SDL renderer */ + +#include +#include /* for srand() */ +#include /* for time() */ + +#include "testnative.h" + +#define WINDOW_W 640 +#define WINDOW_H 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static NativeWindowFactory *factories[] = { +#ifdef TEST_NATIVE_WINDOWS + &WindowsWindowFactory, +#endif +#ifdef TEST_NATIVE_X11 + &X11WindowFactory, +#endif +#ifdef TEST_NATIVE_COCOA + &CocoaWindowFactory, +#endif + NULL +}; +static NativeWindowFactory *factory = NULL; +static void *native_window; +static SDL_Rect *positions, *velocities; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_VideoQuit(); + if (native_window) { + factory->DestroyNativeWindow(native_window); + } + exit(rc); +} + +SDL_Texture * +LoadSprite(SDL_Renderer *renderer, char *file) +{ + SDL_Surface *temp; + SDL_Texture *sprite; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return 0; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, 1, *(Uint8 *) temp->pixels); + } + + /* Create textures from the image */ + sprite = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprite) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return 0; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return sprite; +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int sprite_w, sprite_h; + int i; + SDL_Rect viewport; + SDL_Rect *position, *velocity; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +int +main(int argc, char *argv[]) +{ + int i, done; + const char *driver; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *sprite; + int window_w, window_h; + int sprite_w, sprite_h; + SDL_Event event; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_VideoInit(NULL) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video: %s\n", + SDL_GetError()); + exit(1); + } + driver = SDL_GetCurrentVideoDriver(); + + /* Find a native window driver and create a native window */ + for (i = 0; factories[i]; ++i) { + if (SDL_strcmp(driver, factories[i]->tag) == 0) { + factory = factories[i]; + break; + } + } + if (!factory) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find native window code for %s driver\n", + driver); + quit(2); + } + SDL_Log("Creating native window for %s driver\n", driver); + native_window = factory->CreateNativeWindow(WINDOW_W, WINDOW_H); + if (!native_window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create native window\n"); + quit(3); + } + window = SDL_CreateWindowFrom(native_window); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window: %s\n", SDL_GetError()); + quit(4); + } + SDL_SetWindowTitle(window, "SDL Native Window Test"); + + /* Create the renderer */ + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + quit(5); + } + + /* Clear the window, load the sprite and go! */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + sprite = LoadSprite(renderer, "icon.bmp"); + if (!sprite) { + quit(6); + } + + /* Allocate memory for the sprite info */ + SDL_GetWindowSize(window, &window_w, &window_h); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + positions = (SDL_Rect *) SDL_malloc(NUM_SPRITES * sizeof(SDL_Rect)); + velocities = (SDL_Rect *) SDL_malloc(NUM_SPRITES * sizeof(SDL_Rect)); + if (!positions || !velocities) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + srand(time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = rand() % (window_w - sprite_w); + positions[i].y = rand() % (window_h - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + } + } + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_EXPOSED: + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + break; + } + break; + case SDL_QUIT: + done = 1; + break; + default: + break; + } + } + MoveSprites(renderer, sprite); + } + + quit(0); + + return 0; /* to prevent compiler warning */ +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testnative.h b/Engine/lib/sdl/test/testnative.h new file mode 100644 index 0000000000..ed2bf7e52c --- /dev/null +++ b/Engine/lib/sdl/test/testnative.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Definitions for platform dependent windowing functions to test SDL + integration with native windows +*/ + +#include "SDL.h" + +/* This header includes all the necessary system headers for native windows */ +#include "SDL_syswm.h" + +typedef struct +{ + const char *tag; + void *(*CreateNativeWindow) (int w, int h); + void (*DestroyNativeWindow) (void *window); +} NativeWindowFactory; + +#ifdef SDL_VIDEO_DRIVER_WINDOWS +#define TEST_NATIVE_WINDOWS +extern NativeWindowFactory WindowsWindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_X11 +#define TEST_NATIVE_X11 +extern NativeWindowFactory X11WindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_COCOA +/* Actually, we don't really do this, since it involves adding Objective C + support to the build system, which is a little tricky. You can uncomment + it manually though and link testnativecocoa.m into the test application. +*/ +#define TEST_NATIVE_COCOA +extern NativeWindowFactory CocoaWindowFactory; +#endif diff --git a/Engine/lib/sdl/test/testnativecocoa.m b/Engine/lib/sdl/test/testnativecocoa.m new file mode 100644 index 0000000000..030607d665 --- /dev/null +++ b/Engine/lib/sdl/test/testnativecocoa.m @@ -0,0 +1,51 @@ + +#include "testnative.h" + +#ifdef TEST_NATIVE_COCOA + +#include + +static void *CreateWindowCocoa(int w, int h); +static void DestroyWindowCocoa(void *window); + +NativeWindowFactory CocoaWindowFactory = { + "cocoa", + CreateWindowCocoa, + DestroyWindowCocoa +}; + +static void *CreateWindowCocoa(int w, int h) +{ + NSAutoreleasePool *pool; + NSWindow *nswindow; + NSRect rect; + unsigned int style; + + pool = [[NSAutoreleasePool alloc] init]; + + rect.origin.x = 0; + rect.origin.y = 0; + rect.size.width = w; + rect.size.height = h; + rect.origin.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - rect.origin.y - rect.size.height; + + style = (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask); + + nswindow = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE]; + [nswindow makeKeyAndOrderFront:nil]; + + [pool release]; + + return nswindow; +} + +static void DestroyWindowCocoa(void *window) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *nswindow = (NSWindow *)window; + + [nswindow close]; + [pool release]; +} + +#endif diff --git a/Engine/lib/sdl/test/testnativew32.c b/Engine/lib/sdl/test/testnativew32.c new file mode 100644 index 0000000000..aaea267d26 --- /dev/null +++ b/Engine/lib/sdl/test/testnativew32.c @@ -0,0 +1,86 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_WINDOWS + +static void *CreateWindowNative(int w, int h); +static void DestroyWindowNative(void *window); + +NativeWindowFactory WindowsWindowFactory = { + "windows", + CreateWindowNative, + DestroyWindowNative +}; + +LRESULT CALLBACK +WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_CLOSE: + DestroyWindow(hwnd); + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + return 0; +} + +static void * +CreateWindowNative(int w, int h) +{ + HWND hwnd; + WNDCLASS wc; + + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = GetModuleHandle(NULL); + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); + wc.lpszMenuName = NULL; + wc.lpszClassName = "SDL Test"; + + if (!RegisterClass(&wc)) { + MessageBox(NULL, "Window Registration Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + hwnd = + CreateWindow("SDL Test", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL), + NULL); + if (hwnd == NULL) { + MessageBox(NULL, "Window Creation Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + ShowWindow(hwnd, SW_SHOW); + + return hwnd; +} + +static void +DestroyWindowNative(void *window) +{ + DestroyWindow((HWND) window); +} + +#endif diff --git a/Engine/lib/sdl/test/testnativex11.c b/Engine/lib/sdl/test/testnativex11.c new file mode 100644 index 0000000000..69fa37bbf1 --- /dev/null +++ b/Engine/lib/sdl/test/testnativex11.c @@ -0,0 +1,53 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_X11 + +static void *CreateWindowX11(int w, int h); +static void DestroyWindowX11(void *window); + +NativeWindowFactory X11WindowFactory = { + "x11", + CreateWindowX11, + DestroyWindowX11 +}; + +static Display *dpy; + +static void * +CreateWindowX11(int w, int h) +{ + Window window = 0; + + dpy = XOpenDisplay(NULL); + if (dpy) { + window = + XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, w, h, 0, 0, + 0); + XMapRaised(dpy, window); + XSync(dpy, False); + } + return (void *) window; +} + +static void +DestroyWindowX11(void *window) +{ + if (dpy) { + XDestroyWindow(dpy, (Window) window); + XCloseDisplay(dpy); + } +} + +#endif diff --git a/Engine/lib/sdl/test/testoverlay2.c b/Engine/lib/sdl/test/testoverlay2.c new file mode 100644 index 0000000000..453f0f443a --- /dev/null +++ b/Engine/lib/sdl/test/testoverlay2.c @@ -0,0 +1,511 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/******************************************************************************** + * * + * Test of the overlay used for moved pictures, test more closed to real life. * + * Running trojan moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +SDL_Color MooseColors[84] = { + {49, 49, 49} + , {66, 24, 0} + , {66, 33, 0} + , {66, 66, 66} + , + {66, 115, 49} + , {74, 33, 0} + , {74, 41, 16} + , {82, 33, 8} + , + {82, 41, 8} + , {82, 49, 16} + , {82, 82, 82} + , {90, 41, 8} + , + {90, 41, 16} + , {90, 57, 24} + , {99, 49, 16} + , {99, 66, 24} + , + {99, 66, 33} + , {99, 74, 33} + , {107, 57, 24} + , {107, 82, 41} + , + {115, 57, 33} + , {115, 66, 33} + , {115, 66, 41} + , {115, 74, 0} + , + {115, 90, 49} + , {115, 115, 115} + , {123, 82, 0} + , {123, 99, 57} + , + {132, 66, 41} + , {132, 74, 41} + , {132, 90, 8} + , {132, 99, 33} + , + {132, 99, 66} + , {132, 107, 66} + , {140, 74, 49} + , {140, 99, 16} + , + {140, 107, 74} + , {140, 115, 74} + , {148, 107, 24} + , {148, 115, 82} + , + {148, 123, 74} + , {148, 123, 90} + , {156, 115, 33} + , {156, 115, 90} + , + {156, 123, 82} + , {156, 132, 82} + , {156, 132, 99} + , {156, 156, 156} + , + {165, 123, 49} + , {165, 123, 90} + , {165, 132, 82} + , {165, 132, 90} + , + {165, 132, 99} + , {165, 140, 90} + , {173, 132, 57} + , {173, 132, 99} + , + {173, 140, 107} + , {173, 140, 115} + , {173, 148, 99} + , {173, 173, 173} + , + {181, 140, 74} + , {181, 148, 115} + , {181, 148, 123} + , {181, 156, 107} + , + {189, 148, 123} + , {189, 156, 82} + , {189, 156, 123} + , {189, 156, 132} + , + {189, 189, 189} + , {198, 156, 123} + , {198, 165, 132} + , {206, 165, 99} + , + {206, 165, 132} + , {206, 173, 140} + , {206, 206, 206} + , {214, 173, 115} + , + {214, 173, 140} + , {222, 181, 148} + , {222, 189, 132} + , {222, 189, 156} + , + {222, 222, 222} + , {231, 198, 165} + , {231, 231, 231} + , {239, 206, 173} +}; + +Uint8 MooseFrame[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE*2]; +SDL_Texture *MooseTexture; +SDL_Rect displayrect; +int window_w; +int window_h; +SDL_Window *window; +SDL_Renderer *renderer; +int paused = 0; +int i; +SDL_bool done = SDL_FALSE; +Uint32 pixel_format = SDL_PIXELFORMAT_YV12; +int fpsdelay; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +/* All RGB2YUV conversion code and some other parts of code has been taken from testoverlay.c */ + +/* NOTE: These RGB conversion functions are not intended for speed, + only as examples. +*/ + +void +RGBtoYUV(Uint8 * rgb, int *yuv, int monochrome, int luminance) +{ + if (monochrome) { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = (int)(0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]); + yuv[1] = 128; + yuv[2] = 128; +#else + yuv[0] = (int)(0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128; + yuv[2] = 128; +#endif + } else { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = (int)(0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]); + yuv[1] = (int)((rgb[2] - yuv[0]) * 0.565 + 128); + yuv[2] = (int)((rgb[0] - yuv[0]) * 0.713 + 128); +#else + yuv[0] = (0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128 - (0.148 * rgb[0]) - (0.291 * rgb[1]) + (0.439 * rgb[2]); + yuv[2] = 128 + (0.439 * rgb[0]) - (0.368 * rgb[1]) - (0.071 * rgb[2]); +#endif + } + + if (luminance != 100) { + yuv[0] = yuv[0] * luminance / 100; + if (yuv[0] > 255) + yuv[0] = 255; + } +} + +void +ConvertRGBtoYV12(Uint8 *rgb, Uint8 *out, int w, int h, + int monochrome, int luminance) +{ + int x, y; + int yuv[3]; + Uint8 *op[3]; + + op[0] = out; + op[1] = op[0] + w*h; + op[2] = op[1] + w*h/4; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + RGBtoYUV(rgb, yuv, monochrome, luminance); + *(op[0]++) = yuv[0]; + if (x % 2 == 0 && y % 2 == 0) { + *(op[1]++) = yuv[2]; + *(op[2]++) = yuv[1]; + } + rgb += 3; + } + } +} + +void +ConvertRGBtoNV12(Uint8 *rgb, Uint8 *out, int w, int h, + int monochrome, int luminance) +{ + int x, y; + int yuv[3]; + Uint8 *op[2]; + + op[0] = out; + op[1] = op[0] + w*h; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + RGBtoYUV(rgb, yuv, monochrome, luminance); + *(op[0]++) = yuv[0]; + if (x % 2 == 0 && y % 2 == 0) { + *(op[1]++) = yuv[1]; + *(op[1]++) = yuv[2]; + } + rgb += 3; + } + } +} + +static void +PrintUsage(char *argv0) +{ + SDL_Log("Usage: %s [arg] [arg] [arg] ...\n", argv0); + SDL_Log("\n"); + SDL_Log("Where 'arg' is any of the following options:\n"); + SDL_Log("\n"); + SDL_Log(" -fps \n"); + SDL_Log(" -nodelay\n"); + SDL_Log(" -format (one of the: YV12, IYUV, YUY2, UYVY, YVYU)\n"); + SDL_Log(" -scale (initial scale of the overlay)\n"); + SDL_Log(" -help (shows this help)\n"); + SDL_Log("\n"); + SDL_Log("Press ESC to exit, or SPACE to freeze the movie while application running.\n"); + SDL_Log("\n"); +} + +void +loop() +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + SDL_RenderSetViewport(renderer, NULL); + displayrect.w = window_w = event.window.data1; + displayrect.h = window_h = event.window.data2; + } + break; + case SDL_MOUSEBUTTONDOWN: + displayrect.x = event.button.x - window_w / 2; + displayrect.y = event.button.y - window_h / 2; + break; + case SDL_MOUSEMOTION: + if (event.motion.state) { + displayrect.x = event.motion.x - window_w / 2; + displayrect.y = event.motion.y - window_h / 2; + } + break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_SPACE) { + paused = !paused; + break; + } + if (event.key.keysym.sym != SDLK_ESCAPE) { + break; + } + case SDL_QUIT: + done = SDL_TRUE; + break; + } + } + +#ifndef __EMSCRIPTEN__ + SDL_Delay(fpsdelay); +#endif + + if (!paused) { + i = (i + 1) % MOOSEFRAMES_COUNT; + + SDL_UpdateTexture(MooseTexture, NULL, MooseFrame[i], MOOSEPIC_W*SDL_BYTESPERPIXEL(pixel_format)); + } + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, MooseTexture, NULL, &displayrect); + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char **argv) +{ + Uint8 *RawMooseData; + SDL_RWops *handle; + SDL_Window *window; + int j; + int fps = 12; + int fpsdelay; + int nodelay = 0; +#ifdef TEST_NV12 + Uint32 pixel_format = SDL_PIXELFORMAT_NV12; +#else + Uint32 pixel_format = SDL_PIXELFORMAT_YV12; +#endif + int scale = 5; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 3; + } + + while (argc > 1) { + if (strcmp(argv[1], "-fps") == 0) { + if (argv[2]) { + fps = atoi(argv[2]); + if (fps == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + if ((fps < 0) || (fps > 1000)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option must be in range from 1 to 1000, default is 12.\n"); + quit(10); + } + argv += 2; + argc -= 2; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if (strcmp(argv[1], "-nodelay") == 0) { + nodelay = 1; + argv += 1; + argc -= 1; + } else if (strcmp(argv[1], "-scale") == 0) { + if (argv[2]) { + scale = atoi(argv[2]); + if (scale == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -scale option requires an argument [from 1 to 50], default is 5.\n"); + quit(10); + } + if ((scale < 0) || (scale > 50)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -scale option must be in range from 1 to 50, default is 5.\n"); + quit(10); + } + argv += 2; + argc -= 2; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if ((strcmp(argv[1], "-help") == 0) + || (strcmp(argv[1], "-h") == 0)) { + PrintUsage(argv[0]); + quit(0); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized option: %s.\n", argv[1]); + quit(10); + } + break; + } + + RawMooseData = (Uint8 *) malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + if (RawMooseData == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't allocate memory for movie !\n"); + free(RawMooseData); + quit(1); + } + + /* load the trojan moose images */ + handle = SDL_RWFromFile("moose.dat", "rb"); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + free(RawMooseData); + quit(2); + } + + SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT); + + SDL_RWclose(handle); + + /* Create the window and renderer */ + window_w = MOOSEPIC_W * scale; + window_h = MOOSEPIC_H * scale; + window = SDL_CreateWindow("Happy Moose", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + window_w, window_h, + SDL_WINDOW_RESIZABLE); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError()); + free(RawMooseData); + quit(4); + } + + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError()); + free(RawMooseData); + quit(4); + } + + MooseTexture = SDL_CreateTexture(renderer, pixel_format, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (!MooseTexture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + free(RawMooseData); + quit(5); + } + /* Uncomment this to check vertex color with a YUV texture */ + /* SDL_SetTextureColorMod(MooseTexture, 0xff, 0x80, 0x80); */ + + for (i = 0; i < MOOSEFRAMES_COUNT; i++) { + Uint8 MooseFrameRGB[MOOSEFRAME_SIZE*3]; + Uint8 *rgb; + Uint8 *frame; + + rgb = MooseFrameRGB; + frame = RawMooseData + i * MOOSEFRAME_SIZE; + for (j = 0; j < MOOSEFRAME_SIZE; ++j) { + rgb[0] = MooseColors[frame[j]].r; + rgb[1] = MooseColors[frame[j]].g; + rgb[2] = MooseColors[frame[j]].b; + rgb += 3; + } + switch (pixel_format) { + case SDL_PIXELFORMAT_YV12: + ConvertRGBtoYV12(MooseFrameRGB, MooseFrame[i], MOOSEPIC_W, MOOSEPIC_H, 0, 100); + break; + case SDL_PIXELFORMAT_NV12: + ConvertRGBtoNV12(MooseFrameRGB, MooseFrame[i], MOOSEPIC_W, MOOSEPIC_H, 0, 100); + break; + default: + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unsupported pixel format\n"); + break; + } + } + + free(RawMooseData); + + /* set the start frame */ + i = 0; + if (nodelay) { + fpsdelay = 0; + } else { + fpsdelay = 1000 / fps; + } + + displayrect.x = 0; + displayrect.y = 0; + displayrect.w = window_w; + displayrect.h = window_h; + + /* Ignore key up events, they don't even get filtered */ + SDL_EventState(SDL_KEYUP, SDL_IGNORE); + + /* Loop, waiting for QUIT or RESIZE */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, nodelay ? 0 : fps, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testplatform.c b/Engine/lib/sdl/test/testplatform.c new file mode 100644 index 0000000000..14acac4b11 --- /dev/null +++ b/Engine/lib/sdl/test/testplatform.c @@ -0,0 +1,204 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include + +#include "SDL.h" + +/* + * Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int +badsize(size_t sizeoftype, size_t hardcodetype) +{ + return sizeoftype != hardcodetype; +} + +int +TestTypes(SDL_bool verbose) +{ + int error = 0; + + if (badsize(sizeof(Uint8), 1)) { + if (verbose) + SDL_Log("sizeof(Uint8) != 1, instead = %u\n", + (unsigned int)sizeof(Uint8)); + ++error; + } + if (badsize(sizeof(Uint16), 2)) { + if (verbose) + SDL_Log("sizeof(Uint16) != 2, instead = %u\n", + (unsigned int)sizeof(Uint16)); + ++error; + } + if (badsize(sizeof(Uint32), 4)) { + if (verbose) + SDL_Log("sizeof(Uint32) != 4, instead = %u\n", + (unsigned int)sizeof(Uint32)); + ++error; + } + if (badsize(sizeof(Uint64), 8)) { + if (verbose) + SDL_Log("sizeof(Uint64) != 8, instead = %u\n", + (unsigned int)sizeof(Uint64)); + ++error; + } + if (verbose && !error) + SDL_Log("All data types are the expected size.\n"); + + return (error ? 1 : 0); +} + +int +TestEndian(SDL_bool verbose) +{ + int error = 0; + Uint16 value = 0x1234; + int real_byteorder; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + Uint64 value64, swapped64; + + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + + if (verbose) { + SDL_Log("Detected a %s endian machine.\n", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big"); + } + if ((*((char *) &value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + if (real_byteorder != SDL_BYTEORDER) { + if (verbose) { + SDL_Log("Actually a %s endian machine!\n", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 16 = 0x%X, swapped = 0x%X\n", value16, + SDL_Swap16(value16)); + } + if (SDL_Swap16(value16) != swapped16) { + if (verbose) { + SDL_Log("16 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 32 = 0x%X, swapped = 0x%X\n", value32, + SDL_Swap32(value32)); + } + if (SDL_Swap32(value32) != swapped32) { + if (verbose) { + SDL_Log("32 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 64 = 0x%"SDL_PRIX64", swapped = 0x%"SDL_PRIX64"\n", value64, + SDL_Swap64(value64)); + } + if (SDL_Swap64(value64) != swapped64) { + if (verbose) { + SDL_Log("64 bit value swapped incorrectly!\n"); + } + ++error; + } + return (error ? 1 : 0); +} + + +int +TestCPUInfo(SDL_bool verbose) +{ + if (verbose) { + SDL_Log("CPU count: %d\n", SDL_GetCPUCount()); + SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize()); + SDL_Log("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected"); + SDL_Log("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected"); + SDL_Log("MMX %s\n", SDL_HasMMX()? "detected" : "not detected"); + SDL_Log("3DNow! %s\n", SDL_Has3DNow()? "detected" : "not detected"); + SDL_Log("SSE %s\n", SDL_HasSSE()? "detected" : "not detected"); + SDL_Log("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected"); + SDL_Log("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected"); + SDL_Log("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected"); + SDL_Log("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected"); + SDL_Log("AVX %s\n", SDL_HasAVX()? "detected" : "not detected"); + SDL_Log("System RAM %d MB\n", SDL_GetSystemRAM()); + } + return (0); +} + +int +TestAssertions(SDL_bool verbose) +{ + SDL_assert(1); + SDL_assert_release(1); + SDL_assert_paranoid(1); + SDL_assert(0 || 1); + SDL_assert_release(0 || 1); + SDL_assert_paranoid(0 || 1); + +#if 0 /* enable this to test assertion failures. */ + SDL_assert_release(1 == 2); + SDL_assert_release(5 < 4); + SDL_assert_release(0 && "This is a test"); +#endif + + { + const SDL_AssertData *item = SDL_GetAssertionReport(); + while (item) { + SDL_Log("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", + item->condition, item->function, item->filename, + item->linenum, item->trigger_count, + item->always_ignore ? "yes" : "no"); + item = item->next; + } + } + return (0); +} + +int +main(int argc, char *argv[]) +{ + SDL_bool verbose = SDL_TRUE; + int status = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) { + verbose = SDL_FALSE; + } + if (verbose) { + SDL_Log("This system is running %s\n", SDL_GetPlatform()); + } + + status += TestTypes(verbose); + status += TestEndian(verbose); + status += TestCPUInfo(verbose); + status += TestAssertions(verbose); + + return status; +} diff --git a/Engine/lib/sdl/test/testpower.c b/Engine/lib/sdl/test/testpower.c new file mode 100644 index 0000000000..300d21a24d --- /dev/null +++ b/Engine/lib/sdl/test/testpower.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple test of power subsystem. */ + +#include +#include "SDL.h" + +static void +report_power(void) +{ + int seconds, percent; + const SDL_PowerState state = SDL_GetPowerInfo(&seconds, &percent); + char *statestr = NULL; + + SDL_Log("SDL-reported power info...\n"); + switch (state) { + case SDL_POWERSTATE_UNKNOWN: + statestr = "Unknown"; + break; + case SDL_POWERSTATE_ON_BATTERY: + statestr = "On battery"; + break; + case SDL_POWERSTATE_NO_BATTERY: + statestr = "No battery"; + break; + case SDL_POWERSTATE_CHARGING: + statestr = "Charging"; + break; + case SDL_POWERSTATE_CHARGED: + statestr = "Charged"; + break; + default: + statestr = "!!API ERROR!!"; + break; + } + + SDL_Log("State: %s\n", statestr); + + if (percent == -1) { + SDL_Log("Percent left: unknown\n"); + } else { + SDL_Log("Percent left: %d%%\n", percent); + } + + if (seconds == -1) { + SDL_Log("Time left: unknown\n"); + } else { + SDL_Log("Time left: %d minutes, %d seconds\n", (int) (seconds / 60), + (int) (seconds % 60)); + } +} + + +int +main(int argc, char *argv[]) +{ + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(0) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + report_power(); + + SDL_Quit(); + return 0; +} + +/* end of testpower.c ... */ diff --git a/Engine/lib/sdl/test/testrelative.c b/Engine/lib/sdl/test/testrelative.c new file mode 100644 index 0000000000..59d23f6388 --- /dev/null +++ b/Engine/lib/sdl/test/testrelative.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: Test relative mouse motion */ + +#include +#include +#include + +#include "SDL_test_common.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDLTest_CommonState *state; +int i, done; +SDL_Rect rect; +SDL_Event event; + +static void +DrawRects(SDL_Renderer * renderer, SDL_Rect * rect) +{ + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRect(renderer, rect); +} + +static void +loop(){ + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch(event.type) { + case SDL_MOUSEMOTION: + { + rect.x += event.motion.xrel; + rect.y += event.motion.yrel; + } + break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Rect viewport; + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(renderer); + + /* Wrap the cursor rectangle at the screen edges to keep it visible */ + SDL_RenderGetViewport(renderer, &viewport); + if (rect.x < viewport.x) rect.x += viewport.w; + if (rect.y < viewport.y) rect.y += viewport.h; + if (rect.x > viewport.x + viewport.w) rect.x -= viewport.w; + if (rect.y > viewport.y + viewport.h) rect.y -= viewport.h; + + DrawRects(renderer, &rect); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc; ++i) { + SDLTest_CommonArg(state, i); + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + if(SDL_SetRelativeMouseMode(SDL_TRUE) < 0) { + return 3; + }; + + rect.x = DEFAULT_WINDOW_WIDTH / 2; + rect.y = DEFAULT_WINDOW_HEIGHT / 2; + rect.w = 10; + rect.h = 10; + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDLTest_CommonQuit(state); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testrendercopyex.c b/Engine/lib/sdl/test/testrendercopyex.c new file mode 100644 index 0000000000..856abf7d0b --- /dev/null +++ b/Engine/lib/sdl/test/testrendercopyex.c @@ -0,0 +1,233 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +void +Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + SDL_Point *center=NULL; + SDL_Point origin = {0,0}; + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + center = &origin; + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopyEx(s->renderer, s->sprite, NULL, &s->sprite_rect, (double)s->sprite_rect.w, center, s->scale_direction); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + /* SDL_Delay(10); */ +} + +void loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testrendertarget.c b/Engine/lib/sdl/test/testrendertarget.c new file mode 100644 index 0000000000..c5e1dce05b --- /dev/null +++ b/Engine/lib/sdl/test/testrendertarget.c @@ -0,0 +1,335 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; +SDL_bool test_composite = SDL_FALSE; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +SDL_bool +DrawComposite(DrawState *s) +{ + SDL_Rect viewport, R; + SDL_Texture *target; + + static SDL_bool blend_tested = SDL_FALSE; + if (!blend_tested) { + SDL_Texture *A, *B; + Uint32 P; + + A = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(A, SDL_BLENDMODE_BLEND); + + B = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(B, SDL_BLENDMODE_BLEND); + + SDL_SetRenderTarget(s->renderer, A); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x80); + SDL_RenderFillRect(s->renderer, NULL); + + SDL_SetRenderTarget(s->renderer, B); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + SDL_RenderCopy(s->renderer, A, NULL, NULL); + SDL_RenderReadPixels(s->renderer, NULL, SDL_PIXELFORMAT_ARGB8888, &P, sizeof(P)); + + SDL_Log("Blended pixel: 0x%8.8X\n", P); + + SDL_DestroyTexture(A); + SDL_DestroyTexture(B); + blend_tested = SDL_TRUE; + } + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetTextureBlendMode(target, SDL_BLENDMODE_BLEND); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background. + This is solid black so when the sprite is copied to it, any per-pixel alpha will be blended through. + */ + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(s->renderer, 0xff, 0x00, 0x00, 0x80); + R.x = 0; + R.y = 0; + R.w = 100; + R.h = 100; + SDL_RenderFillRect(s->renderer, &R); + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_NONE); + + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +SDL_bool +Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + if (!target) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create render target texture: %s\n", SDL_GetError()); + return SDL_FALSE; + } + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + if (test_composite) { + if (!DrawComposite(&drawstates[i])) done = 1; + } else { + if (!Draw(&drawstates[i])) done = 1; + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--composite") == 0) { + test_composite = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--composite]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + if (test_composite) { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon-alpha.bmp", SDL_TRUE); + } else { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + } + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testresample.c b/Engine/lib/sdl/test/testresample.c new file mode 100644 index 0000000000..0e92bbe11a --- /dev/null +++ b/Engine/lib/sdl/test/testresample.c @@ -0,0 +1,118 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "SDL.h" + +int +main(int argc, char **argv) +{ + SDL_AudioSpec spec; + SDL_AudioCVT cvt; + Uint32 len = 0; + Uint8 *data = NULL; + int cvtfreq = 0; + int bitsize = 0; + int blockalign = 0; + int avgbytes = 0; + SDL_RWops *io = NULL; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc != 4) { + SDL_Log("USAGE: %s in.wav out.wav newfreq\n", argv[0]); + return 1; + } + + cvtfreq = SDL_atoi(argv[3]); + + if (SDL_Init(SDL_INIT_AUDIO) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 2; + } + + if (SDL_LoadWAV(argv[1], &spec, &data, &len) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to load %s: %s\n", argv[1], SDL_GetError()); + SDL_Quit(); + return 3; + } + + if (SDL_BuildAudioCVT(&cvt, spec.format, spec.channels, spec.freq, + spec.format, spec.channels, cvtfreq) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to build CVT: %s\n", SDL_GetError()); + SDL_FreeWAV(data); + SDL_Quit(); + return 4; + } + + cvt.len = len; + cvt.buf = (Uint8 *) SDL_malloc(len * cvt.len_mult); + if (cvt.buf == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory.\n"); + SDL_FreeWAV(data); + SDL_Quit(); + return 5; + } + SDL_memcpy(cvt.buf, data, len); + + if (SDL_ConvertAudio(&cvt) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Conversion failed: %s\n", SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 6; + } + + /* write out a WAV header... */ + io = SDL_RWFromFile(argv[2], "wb"); + if (io == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fopen('%s') failed: %s\n", argv[2], SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 7; + } + + bitsize = SDL_AUDIO_BITSIZE(spec.format); + blockalign = (bitsize / 8) * spec.channels; + avgbytes = cvtfreq * blockalign; + + SDL_WriteLE32(io, 0x46464952); /* RIFF */ + SDL_WriteLE32(io, len * cvt.len_mult + 36); + SDL_WriteLE32(io, 0x45564157); /* WAVE */ + SDL_WriteLE32(io, 0x20746D66); /* fmt */ + SDL_WriteLE32(io, 16); /* chunk size */ + SDL_WriteLE16(io, 1); /* uncompressed */ + SDL_WriteLE16(io, spec.channels); /* channels */ + SDL_WriteLE32(io, cvtfreq); /* sample rate */ + SDL_WriteLE32(io, avgbytes); /* average bytes per second */ + SDL_WriteLE16(io, blockalign); /* block align */ + SDL_WriteLE16(io, bitsize); /* significant bits per sample */ + SDL_WriteLE32(io, 0x61746164); /* data */ + SDL_WriteLE32(io, cvt.len_cvt); /* size */ + SDL_RWwrite(io, cvt.buf, cvt.len_cvt, 1); + + if (SDL_RWclose(io) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fclose('%s') failed: %s\n", argv[2], SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 8; + } /* if */ + + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 0; +} /* main */ + +/* end of testresample.c ... */ diff --git a/Engine/lib/sdl/test/testrumble.c b/Engine/lib/sdl/test/testrumble.c new file mode 100644 index 0000000000..ea7466d2da --- /dev/null +++ b/Engine/lib/sdl/test/testrumble.c @@ -0,0 +1,152 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* +Copyright (c) 2011, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * includes + */ +#include +#include /* strstr */ +#include /* isdigit */ + +#include "SDL.h" + +#ifndef SDL_HAPTIC_DISABLED + +static SDL_Haptic *haptic; + + +/** + * @brief The entry point of this force feedback demo. + * @param[in] argc Number of arguments. + * @param[in] argv Array of argc arguments. + */ +int +main(int argc, char **argv) +{ + int i; + char *name; + int index; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + name = NULL; + index = -1; + if (argc > 1) { + name = argv[1]; + if ((strcmp(name, "--help") == 0) || (strcmp(name, "-h") == 0)) { + SDL_Log("USAGE: %s [device]\n" + "If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n", + argv[0]); + return 0; + } + + i = strlen(name); + if ((i < 3) && isdigit(name[0]) && ((i == 1) || isdigit(name[1]))) { + index = atoi(name); + name = NULL; + } + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics()); + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (strstr(SDL_HapticName(i), name) != NULL) + break; + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + if (SDL_HapticRumbleSupported(haptic) == SDL_FALSE) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Rumble not supported!\n"); + return 1; + } + if (SDL_HapticRumbleInit(haptic) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to initialize rumble: %s\n", SDL_GetError()); + return 1; + } + SDL_Log("Playing 2 second rumble at 0.5 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.5, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError() ); + return 1; + } + SDL_Delay(2000); + SDL_Log("Stopping rumble.\n"); + SDL_HapticRumbleStop(haptic); + SDL_Delay(2000); + SDL_Log("Playing 2 second rumble at 0.3 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.3f, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError() ); + return 1; + } + SDL_Delay(2000); + + /* Quit */ + if (haptic != NULL) + SDL_HapticClose(haptic); + SDL_Quit(); + + return 0; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testscale.c b/Engine/lib/sdl/test/testscale.c new file mode 100644 index 0000000000..9f5fdbff10 --- /dev/null +++ b/Engine/lib/sdl/test/testscale.c @@ -0,0 +1,224 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define WINDOW_WIDTH 640 +#define WINDOW_HEIGHT 480 + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +void +Draw(DrawState *s) +{ + SDL_Rect viewport; + + SDL_RenderGetViewport(s->renderer, &viewport); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testsem.c b/Engine/lib/sdl/test/testsem.c new file mode 100644 index 0000000000..b8d3b27491 --- /dev/null +++ b/Engine/lib/sdl/test/testsem.c @@ -0,0 +1,130 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL semaphore code */ + +#include +#include +#include + +#include "SDL.h" + +#define NUM_THREADS 10 + +static SDL_sem *sem; +int alive = 1; + +int SDLCALL +ThreadFunc(void *data) +{ + int threadnum = (int) (uintptr_t) data; + while (alive) { + SDL_SemWait(sem); + SDL_Log("Thread number %d has got the semaphore (value = %d)!\n", + threadnum, SDL_SemValue(sem)); + SDL_Delay(200); + SDL_SemPost(sem); + SDL_Log("Thread number %d has released the semaphore (value = %d)!\n", + threadnum, SDL_SemValue(sem)); + SDL_Delay(1); /* For the scheduler */ + } + SDL_Log("Thread number %d exiting.\n", threadnum); + return 0; +} + +static void +killed(int sig) +{ + alive = 0; +} + +static void +TestWaitTimeout(void) +{ + Uint32 start_ticks; + Uint32 end_ticks; + Uint32 duration; + int retval; + + sem = SDL_CreateSemaphore(0); + SDL_Log("Waiting 2 seconds on semaphore\n"); + + start_ticks = SDL_GetTicks(); + retval = SDL_SemWaitTimeout(sem, 2000); + end_ticks = SDL_GetTicks(); + + duration = end_ticks - start_ticks; + + /* Accept a little offset in the effective wait */ + if (duration > 1900 && duration < 2050) + SDL_Log("Wait done.\n"); + else + SDL_Log("Wait took %d milliseconds\n", duration); + + /* Check to make sure the return value indicates timed out */ + if (retval != SDL_MUTEX_TIMEDOUT) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_SemWaitTimeout returned: %d; expected: %d\n", retval, SDL_MUTEX_TIMEDOUT); +} + +int +main(int argc, char **argv) +{ + SDL_Thread *threads[NUM_THREADS]; + uintptr_t i; + int init_sem; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc < 2) { + SDL_Log("Usage: %s init_value\n", argv[0]); + return (1); + } + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + signal(SIGTERM, killed); + signal(SIGINT, killed); + + init_sem = atoi(argv[1]); + sem = SDL_CreateSemaphore(init_sem); + + SDL_Log("Running %d threads, semaphore value = %d\n", NUM_THREADS, + init_sem); + /* Create all the threads */ + for (i = 0; i < NUM_THREADS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Thread%u", (unsigned int) i); + threads[i] = SDL_CreateThread(ThreadFunc, name, (void *) i); + } + + /* Wait 10 seconds */ + SDL_Delay(10 * 1000); + + /* Wait for all threads to finish */ + SDL_Log("Waiting for threads to finish\n"); + alive = 0; + for (i = 0; i < NUM_THREADS; ++i) { + SDL_WaitThread(threads[i], NULL); + } + SDL_Log("Finished waiting for threads\n"); + + SDL_DestroySemaphore(sem); + + TestWaitTimeout(); + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testshader.c b/Engine/lib/sdl/test/testshader.c new file mode 100644 index 0000000000..fc6da29875 --- /dev/null +++ b/Engine/lib/sdl/test/testshader.c @@ -0,0 +1,500 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* This is a simple example of using GLSL shaders with SDL */ + +#include "SDL.h" + +#ifdef HAVE_OPENGL + +#include "SDL_opengl.h" + + +static SDL_bool shaders_supported; +static int current_shader = 0; + +enum { + SHADER_COLOR, + SHADER_TEXTURE, + SHADER_TEXCOORDS, + NUM_SHADERS +}; + +typedef struct { + GLhandleARB program; + GLhandleARB vert_shader; + GLhandleARB frag_shader; + const char *vert_source; + const char *frag_source; +} ShaderData; + +static ShaderData shaders[NUM_SHADERS] = { + + /* SHADER_COLOR */ + { 0, 0, 0, + /* vertex shader */ +"varying vec4 v_color;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"\n" +"void main()\n" +"{\n" +" gl_FragColor = v_color;\n" +"}" + }, + + /* SHADER_TEXTURE */ + { 0, 0, 0, + /* vertex shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"uniform sampler2D tex0;\n" +"\n" +"void main()\n" +"{\n" +" gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" +"}" + }, + + /* SHADER_TEXCOORDS */ + { 0, 0, 0, + /* vertex shader */ +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" vec4 color;\n" +" vec2 delta;\n" +" float dist;\n" +"\n" +" delta = vec2(0.5, 0.5) - v_texCoord;\n" +" dist = dot(delta, delta);\n" +"\n" +" color.r = v_texCoord.x;\n" +" color.g = v_texCoord.x * v_texCoord.y;\n" +" color.b = v_texCoord.y;\n" +" color.a = 1.0 - (dist * 4.0);\n" +" gl_FragColor = color;\n" +"}" + }, +}; + +static PFNGLATTACHOBJECTARBPROC glAttachObjectARB; +static PFNGLCOMPILESHADERARBPROC glCompileShaderARB; +static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; +static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; +static PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; +static PFNGLGETINFOLOGARBPROC glGetInfoLogARB; +static PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; +static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; +static PFNGLLINKPROGRAMARBPROC glLinkProgramARB; +static PFNGLSHADERSOURCEARBPROC glShaderSourceARB; +static PFNGLUNIFORM1IARBPROC glUniform1iARB; +static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; + +static SDL_bool CompileShader(GLhandleARB shader, const char *source) +{ + GLint status; + + glShaderSourceARB(shader, 1, &source, NULL); + glCompileShaderARB(shader); + glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); + if (status == 0) { + GLint length; + char *info; + + glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); + info = SDL_stack_alloc(char, length+1); + glGetInfoLogARB(shader, length, NULL, info); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to compile shader:\n%s\n%s", source, info); + SDL_stack_free(info); + + return SDL_FALSE; + } else { + return SDL_TRUE; + } +} + +static SDL_bool CompileShaderProgram(ShaderData *data) +{ + const int num_tmus_bound = 4; + int i; + GLint location; + + glGetError(); + + /* Create one program object to rule them all */ + data->program = glCreateProgramObjectARB(); + + /* Create the vertex shader */ + data->vert_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + if (!CompileShader(data->vert_shader, data->vert_source)) { + return SDL_FALSE; + } + + /* Create the fragment shader */ + data->frag_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + if (!CompileShader(data->frag_shader, data->frag_source)) { + return SDL_FALSE; + } + + /* ... and in the darkness bind them */ + glAttachObjectARB(data->program, data->vert_shader); + glAttachObjectARB(data->program, data->frag_shader); + glLinkProgramARB(data->program); + + /* Set up some uniform variables */ + glUseProgramObjectARB(data->program); + for (i = 0; i < num_tmus_bound; ++i) { + char tex_name[5]; + SDL_snprintf(tex_name, SDL_arraysize(tex_name), "tex%d", i); + location = glGetUniformLocationARB(data->program, tex_name); + if (location >= 0) { + glUniform1iARB(location, i); + } + } + glUseProgramObjectARB(0); + + return (glGetError() == GL_NO_ERROR) ? SDL_TRUE : SDL_FALSE; +} + +static void DestroyShaderProgram(ShaderData *data) +{ + if (shaders_supported) { + glDeleteObjectARB(data->vert_shader); + glDeleteObjectARB(data->frag_shader); + glDeleteObjectARB(data->program); + } +} + +static SDL_bool InitShaders() +{ + int i; + + /* Check for shader support */ + shaders_supported = SDL_FALSE; + if (SDL_GL_ExtensionSupported("GL_ARB_shader_objects") && + SDL_GL_ExtensionSupported("GL_ARB_shading_language_100") && + SDL_GL_ExtensionSupported("GL_ARB_vertex_shader") && + SDL_GL_ExtensionSupported("GL_ARB_fragment_shader")) { + glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB"); + glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB"); + glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB"); + glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB"); + glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB"); + glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB"); + glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB"); + glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB"); + glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB"); + glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB"); + glUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB"); + glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB"); + if (glAttachObjectARB && + glCompileShaderARB && + glCreateProgramObjectARB && + glCreateShaderObjectARB && + glDeleteObjectARB && + glGetInfoLogARB && + glGetObjectParameterivARB && + glGetUniformLocationARB && + glLinkProgramARB && + glShaderSourceARB && + glUniform1iARB && + glUseProgramObjectARB) { + shaders_supported = SDL_TRUE; + } + } + + if (!shaders_supported) { + return SDL_FALSE; + } + + /* Compile all the shaders */ + for (i = 0; i < NUM_SHADERS; ++i) { + if (!CompileShaderProgram(&shaders[i])) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to compile shader!\n"); + return SDL_FALSE; + } + } + + /* We're done! */ + return SDL_TRUE; +} + +static void QuitShaders() +{ + int i; + + for (i = 0; i < NUM_SHADERS; ++i) { + DestroyShaderProgram(&shaders[i]); + } +} + +/* Quick utility function for texture creation */ +static int +power_of_two(int input) +{ + int value = 1; + + while (value < input) { + value <<= 1; + } + return value; +} + +GLuint +SDL_GL_LoadTexture(SDL_Surface * surface, GLfloat * texcoord) +{ + GLuint texture; + int w, h; + SDL_Surface *image; + SDL_Rect area; + SDL_BlendMode saved_mode; + + /* Use the surface width and height expanded to powers of 2 */ + w = power_of_two(surface->w); + h = power_of_two(surface->h); + texcoord[0] = 0.0f; /* Min X */ + texcoord[1] = 0.0f; /* Min Y */ + texcoord[2] = (GLfloat) surface->w / w; /* Max X */ + texcoord[3] = (GLfloat) surface->h / h; /* Max Y */ + + image = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, +#if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */ + 0x000000FF, + 0x0000FF00, 0x00FF0000, 0xFF000000 +#else + 0xFF000000, + 0x00FF0000, 0x0000FF00, 0x000000FF +#endif + ); + if (image == NULL) { + return 0; + } + + /* Save the alpha blending attributes */ + SDL_GetSurfaceBlendMode(surface, &saved_mode); + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); + + /* Copy the surface into the GL texture image */ + area.x = 0; + area.y = 0; + area.w = surface->w; + area.h = surface->h; + SDL_BlitSurface(surface, &area, image, &area); + + /* Restore the alpha blending attributes */ + SDL_SetSurfaceBlendMode(surface, saved_mode); + + /* Create an OpenGL texture for the image */ + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); + SDL_FreeSurface(image); /* No longer needed */ + + return texture; +} + +/* A general OpenGL initialization function. Sets all of the initial parameters. */ +void InitGL(int Width, int Height) /* We call this right after our OpenGL window is created. */ +{ + GLdouble aspect; + + glViewport(0, 0, Width, Height); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); /* This Will Clear The Background Color To Black */ + glClearDepth(1.0); /* Enables Clearing Of The Depth Buffer */ + glDepthFunc(GL_LESS); /* The Type Of Depth Test To Do */ + glEnable(GL_DEPTH_TEST); /* Enables Depth Testing */ + glShadeModel(GL_SMOOTH); /* Enables Smooth Color Shading */ + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); /* Reset The Projection Matrix */ + + aspect = (GLdouble)Width / Height; + glOrtho(-3.0, 3.0, -3.0 / aspect, 3.0 / aspect, 0.0, 1.0); + + glMatrixMode(GL_MODELVIEW); +} + +/* The main drawing function. */ +void DrawGLScene(SDL_Window *window, GLuint texture, GLfloat * texcoord) +{ + /* Texture coordinate lookup, to make it simple */ + enum { + MINX, + MINY, + MAXX, + MAXY + }; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Clear The Screen And The Depth Buffer */ + glLoadIdentity(); /* Reset The View */ + + glTranslatef(-1.5f,0.0f,0.0f); /* Move Left 1.5 Units */ + + /* draw a triangle (in smooth coloring mode) */ + glBegin(GL_POLYGON); /* start drawing a polygon */ + glColor3f(1.0f,0.0f,0.0f); /* Set The Color To Red */ + glVertex3f( 0.0f, 1.0f, 0.0f); /* Top */ + glColor3f(0.0f,1.0f,0.0f); /* Set The Color To Green */ + glVertex3f( 1.0f,-1.0f, 0.0f); /* Bottom Right */ + glColor3f(0.0f,0.0f,1.0f); /* Set The Color To Blue */ + glVertex3f(-1.0f,-1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* we're done with the polygon (smooth color interpolation) */ + + glTranslatef(3.0f,0.0f,0.0f); /* Move Right 3 Units */ + + /* Enable blending */ + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + /* draw a textured square (quadrilateral) */ + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, texture); + glColor3f(1.0f,1.0f,1.0f); + if (shaders_supported) { + glUseProgramObjectARB(shaders[current_shader].program); + } + + glBegin(GL_QUADS); /* start drawing a polygon (4 sided) */ + glTexCoord2f(texcoord[MINX], texcoord[MINY]); + glVertex3f(-1.0f, 1.0f, 0.0f); /* Top Left */ + glTexCoord2f(texcoord[MAXX], texcoord[MINY]); + glVertex3f( 1.0f, 1.0f, 0.0f); /* Top Right */ + glTexCoord2f(texcoord[MAXX], texcoord[MAXY]); + glVertex3f( 1.0f,-1.0f, 0.0f); /* Bottom Right */ + glTexCoord2f(texcoord[MINX], texcoord[MAXY]); + glVertex3f(-1.0f,-1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* done with the polygon */ + + if (shaders_supported) { + glUseProgramObjectARB(0); + } + glDisable(GL_TEXTURE_2D); + + /* swap buffers to display, since we're double buffered. */ + SDL_GL_SwapWindow(window); +} + +int main(int argc, char **argv) +{ + int done; + SDL_Window *window; + SDL_Surface *surface; + GLuint texture; + GLfloat texcoords[4]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL for video output */ + if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Create a 640x480 OpenGL screen */ + window = SDL_CreateWindow( "Shader Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL ); + if ( !window ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL window: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + if ( !SDL_GL_CreateContext(window)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL context: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + surface = SDL_LoadBMP("icon.bmp"); + if ( ! surface ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to load icon.bmp: %s\n", SDL_GetError()); + SDL_Quit(); + exit(3); + } + texture = SDL_GL_LoadTexture(surface, texcoords); + SDL_FreeSurface(surface); + + /* Loop, drawing and checking events */ + InitGL(640, 480); + if (InitShaders()) { + SDL_Log("Shaders supported, press SPACE to cycle them.\n"); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Shaders not supported!\n"); + } + done = 0; + while ( ! done ) { + DrawGLScene(window, texture, texcoords); + + /* This could go in a separate function */ + { SDL_Event event; + while ( SDL_PollEvent(&event) ) { + if ( event.type == SDL_QUIT ) { + done = 1; + } + if ( event.type == SDL_KEYDOWN ) { + if ( event.key.keysym.sym == SDLK_SPACE ) { + current_shader = (current_shader + 1) % NUM_SHADERS; + } + if ( event.key.keysym.sym == SDLK_ESCAPE ) { + done = 1; + } + } + } + } + } + QuitShaders(); + SDL_Quit(); + return 1; +} + +#else /* HAVE_OPENGL */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testshape.c b/Engine/lib/sdl/test/testshape.c new file mode 100644 index 0000000000..00750a9708 --- /dev/null +++ b/Engine/lib/sdl/test/testshape.c @@ -0,0 +1,201 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include "SDL.h" +#include "SDL_shape.h" + +#define SHAPED_WINDOW_X 150 +#define SHAPED_WINDOW_Y 150 +#define SHAPED_WINDOW_DIMENSION 640 + +typedef struct LoadedPicture { + SDL_Surface *surface; + SDL_Texture *texture; + SDL_WindowShapeMode mode; + const char* name; +} LoadedPicture; + +void render(SDL_Renderer *renderer,SDL_Texture *texture,SDL_Rect texture_dimensions) +{ + /* Clear render-target to blue. */ + SDL_SetRenderDrawColor(renderer,0x00,0x00,0xff,0xff); + SDL_RenderClear(renderer); + + /* Render the texture. */ + SDL_RenderCopy(renderer,texture,&texture_dimensions,&texture_dimensions); + + SDL_RenderPresent(renderer); +} + +int main(int argc,char** argv) +{ + Uint8 num_pictures; + LoadedPicture* pictures; + int i, j; + SDL_PixelFormat* format = NULL; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Color black = {0,0,0,0xff}; + SDL_Event event; + int event_pending = 0; + int should_exit = 0; + unsigned int current_picture; + int button_down; + Uint32 pixelFormat = 0; + int access = 0; + SDL_Rect texture_dimensions; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if(argc < 2) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Shape requires at least one bitmap file as argument."); + exit(-1); + } + + if(SDL_VideoInit(NULL) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not initialize SDL video."); + exit(-2); + } + + num_pictures = argc - 1; + pictures = (LoadedPicture *)SDL_malloc(sizeof(LoadedPicture)*num_pictures); + for(i=0;iformat; + if(SDL_ISPIXELFORMAT_ALPHA(format->format)) { + pictures[i].mode.mode = ShapeModeBinarizeAlpha; + pictures[i].mode.parameters.binarizationCutoff = 255; + } + else { + pictures[i].mode.mode = ShapeModeColorKey; + pictures[i].mode.parameters.colorKey = black; + } + } + + window = SDL_CreateShapedWindow("SDL_Shape test", + SHAPED_WINDOW_X, SHAPED_WINDOW_Y, + SHAPED_WINDOW_DIMENSION,SHAPED_WINDOW_DIMENSION, + 0); + SDL_SetWindowPosition(window, SHAPED_WINDOW_X, SHAPED_WINDOW_Y); + if(window == NULL) { + for(i=0;i= num_pictures) + current_picture = 0; + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Changing to shaped bmp: %s", pictures[current_picture].name); + SDL_QueryTexture(pictures[current_picture].texture,(Uint32 *)&pixelFormat,(int *)&access,&texture_dimensions.w,&texture_dimensions.h); + SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); + SDL_SetWindowShape(window,pictures[current_picture].surface,&pictures[current_picture].mode); + } + if(event.type == SDL_QUIT) + should_exit = 1; + event_pending = 0; + } + render(renderer,pictures[current_picture].texture,texture_dimensions); + SDL_Delay(10); + } + + /* Free the textures. */ + for(i=0;i + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test.h" +#include "SDL_test_common.h" + +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDLTest_CommonState *state; +static int num_sprites; +static SDL_Texture **sprites; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 0; +static int current_color = 0; +static SDL_Rect *positions; +static SDL_Rect *velocities; +static int sprite_w, sprite_h; +static SDL_BlendMode blendMode = SDL_BLENDMODE_BLEND; + +/* Number of iterations to move sprites - used for visual tests. */ +/* -1: infinite random moves (default); >=0: enables N deterministic moves */ +static int iterations = -1; + +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_free(sprites); + SDL_free(positions); + SDL_free(velocities); + SDLTest_CommonQuit(state); + exit(rc); +} + +int +LoadSprite(const char *file) +{ + int i; + SDL_Surface *temp; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return (-1); + } + sprite_w = temp->w; + sprite_h = temp->h; + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, 1, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, 1, (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, 1, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, 1, (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, 1, *(Uint32 *) temp->pixels); + break; + } + } + + /* Create textures from the image */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + sprites[i] = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprites[i]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return (-1); + } + SDL_SetTextureBlendMode(sprites[i], blendMode); + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return (0); +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int i; + SDL_Rect viewport, temp; + SDL_Rect *position, *velocity; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureColorMod(sprite, 255, (Uint8) current_color, + (Uint8) current_color); + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureAlphaMod(sprite, (Uint8) current_alpha); + } + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Test points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); + SDL_RenderDrawPoint(renderer, 0, 0); + SDL_RenderDrawPoint(renderer, viewport.w-1, 0); + SDL_RenderDrawPoint(renderer, 0, viewport.h-1); + SDL_RenderDrawPoint(renderer, viewport.w-1, viewport.h-1); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, 1, 0, viewport.w-2, 0); + SDL_RenderDrawLine(renderer, 1, viewport.h-1, viewport.w-2, viewport.h-1); + SDL_RenderDrawLine(renderer, 0, 1, 0, viewport.h-2); + SDL_RenderDrawLine(renderer, viewport.w-1, 1, viewport.w-1, viewport.h-2); + + /* Test fill and copy */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + temp.x = 1; + temp.y = 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = viewport.w-sprite_w-1; + temp.y = 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = 1; + temp.y = viewport.h-sprite_h-1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = viewport.w-sprite_w-1; + temp.y = viewport.h-sprite_h-1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, sprite_w, sprite_h, + viewport.w-sprite_w-2, viewport.h-sprite_h-2); + SDL_RenderDrawLine(renderer, viewport.w-sprite_w-2, sprite_h, + sprite_w, viewport.h-sprite_h-2); + + /* Conditionally move the sprites, bounce at the wall */ + if (iterations == -1 || iterations > 0) { + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + } + + /* Countdown sprite-move iterations and disable color changes at iteration end - used for visual tests. */ + if (iterations > 0) { + iterations--; + if (iterations == 0) { + cycle_alpha = SDL_FALSE; + cycle_color = SDL_FALSE; + } + } + } + + /* Draw sprites */ + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + MoveSprites(state->renderers[i], sprites[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + Uint64 seed; + const char *icon = "icon.bmp"; + + /* Initialize parameters */ + num_sprites = NUM_SPRITES; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + iterations = SDL_atoi(argv[i + 1]); + if (iterations < -1) iterations = -1; + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_sprites = SDL_atoi(argv[i]); + consumed = 1; + } else if (argv[i][0] != '-') { + icon = argv[i]; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha] [--iterations N] [num_sprites] [icon.bmp]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers, and load the textures */ + sprites = + (SDL_Texture **) SDL_malloc(state->num_windows * sizeof(*sprites)); + if (!sprites) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + if (LoadSprite(icon) < 0) { + quit(2); + } + + /* Allocate memory for the sprite info */ + positions = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect)); + velocities = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect)); + if (!positions || !velocities) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Position sprites and set their velocities using the fuzzer */ + if (iterations >= 0) { + /* Deterministic seed - used for visual tests */ + seed = (Uint64)iterations; + } else { + /* Pseudo-random seed generated from the time */ + seed = (Uint64)time(NULL); + } + SDLTest_FuzzerInit(seed); + for (i = 0; i < num_sprites; ++i) { + positions[i].x = SDLTest_RandomIntegerInRange(0, state->window_w - sprite_w); + positions[i].y = SDLTest_RandomIntegerInRange(0, state->window_h - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + velocities[i].y = SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + } + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testspriteminimal.c b/Engine/lib/sdl/test/testspriteminimal.c new file mode 100644 index 0000000000..05f97309c0 --- /dev/null +++ b/Engine/lib/sdl/test/testspriteminimal.c @@ -0,0 +1,194 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define WINDOW_WIDTH 640 +#define WINDOW_HEIGHT 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDL_Texture *sprite; +static SDL_Rect positions[NUM_SPRITES]; +static SDL_Rect velocities[NUM_SPRITES]; +static int sprite_w, sprite_h; + +SDL_Renderer *renderer; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + exit(rc); +} + +int +LoadSprite(char *file, SDL_Renderer *renderer) +{ + SDL_Surface *temp; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", file, SDL_GetError()); + return (-1); + } + sprite_w = temp->w; + sprite_h = temp->h; + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + + /* Create textures from the image */ + sprite = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprite) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return (-1); + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return (0); +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int i; + int window_w = WINDOW_WIDTH; + int window_h = WINDOW_HEIGHT; + SDL_Rect *position, *velocity; + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (window_w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (window_h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +void loop() +{ + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) { + done = 1; + } + } + MoveSprites(renderer, sprite); +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + SDL_Window *window; + int i; + + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) { + quit(2); + } + + if (LoadSprite("icon.bmp", renderer) < 0) { + quit(2); + } + + /* Initialize the sprite positions */ + srand(time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = rand() % (WINDOW_WIDTH - sprite_w); + positions[i].y = rand() % (WINDOW_HEIGHT - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + } + } + + /* Main render loop */ + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + quit(0); + + return 0; /* to prevent compiler warning */ +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/teststreaming.c b/Engine/lib/sdl/test/teststreaming.c new file mode 100644 index 0000000000..86cc13917b --- /dev/null +++ b/Engine/lib/sdl/test/teststreaming.c @@ -0,0 +1,190 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/******************************************************************************** + * * + * Running moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +SDL_Color MooseColors[84] = { + {49, 49, 49, 255}, {66, 24, 0, 255}, {66, 33, 0, 255}, {66, 66, 66, 255}, + {66, 115, 49, 255}, {74, 33, 0, 255}, {74, 41, 16, 255}, {82, 33, 8, 255}, + {82, 41, 8, 255}, {82, 49, 16, 255}, {82, 82, 82, 255}, {90, 41, 8, 255}, + {90, 41, 16, 255}, {90, 57, 24, 255}, {99, 49, 16, 255}, {99, 66, 24, 255}, + {99, 66, 33, 255}, {99, 74, 33, 255}, {107, 57, 24, 255}, {107, 82, 41, 255}, + {115, 57, 33, 255}, {115, 66, 33, 255}, {115, 66, 41, 255}, {115, 74, 0, 255}, + {115, 90, 49, 255}, {115, 115, 115, 255}, {123, 82, 0, 255}, {123, 99, 57, 255}, + {132, 66, 41, 255}, {132, 74, 41, 255}, {132, 90, 8, 255}, {132, 99, 33, 255}, + {132, 99, 66, 255}, {132, 107, 66, 255}, {140, 74, 49, 255}, {140, 99, 16, 255}, + {140, 107, 74, 255}, {140, 115, 74, 255}, {148, 107, 24, 255}, {148, 115, 82, 255}, + {148, 123, 74, 255}, {148, 123, 90, 255}, {156, 115, 33, 255}, {156, 115, 90, 255}, + {156, 123, 82, 255}, {156, 132, 82, 255}, {156, 132, 99, 255}, {156, 156, 156, 255}, + {165, 123, 49, 255}, {165, 123, 90, 255}, {165, 132, 82, 255}, {165, 132, 90, 255}, + {165, 132, 99, 255}, {165, 140, 90, 255}, {173, 132, 57, 255}, {173, 132, 99, 255}, + {173, 140, 107, 255}, {173, 140, 115, 255}, {173, 148, 99, 255}, {173, 173, 173, 255}, + {181, 140, 74, 255}, {181, 148, 115, 255}, {181, 148, 123, 255}, {181, 156, 107, 255}, + {189, 148, 123, 255}, {189, 156, 82, 255}, {189, 156, 123, 255}, {189, 156, 132, 255}, + {189, 189, 189, 255}, {198, 156, 123, 255}, {198, 165, 132, 255}, {206, 165, 99, 255}, + {206, 165, 132, 255}, {206, 173, 140, 255}, {206, 206, 206, 255}, {214, 173, 115, 255}, + {214, 173, 140, 255}, {222, 181, 148, 255}, {222, 189, 132, 255}, {222, 189, 156, 255}, + {222, 222, 222, 255}, {231, 198, 165, 255}, {231, 231, 231, 255}, {239, 206, 173, 255} +}; + +Uint8 MooseFrames[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE]; + +SDL_Renderer *renderer; +int frame; +SDL_Texture *MooseTexture; +SDL_bool done = SDL_FALSE; + +void quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +void UpdateTexture(SDL_Texture *texture, int frame) +{ + SDL_Color *color; + Uint8 *src; + Uint32 *dst; + int row, col; + void *pixels; + int pitch; + + if (SDL_LockTexture(texture, NULL, &pixels, &pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't lock texture: %s\n", SDL_GetError()); + quit(5); + } + src = MooseFrames[frame]; + for (row = 0; row < MOOSEPIC_H; ++row) { + dst = (Uint32*)((Uint8*)pixels + row * pitch); + for (col = 0; col < MOOSEPIC_W; ++col) { + color = &MooseColors[*src++]; + *dst++ = (0xFF000000|(color->r<<16)|(color->g<<8)|color->b); + } + } + SDL_UnlockTexture(texture); +} + +void +loop() +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_ESCAPE) { + done = SDL_TRUE; + } + break; + case SDL_QUIT: + done = SDL_TRUE; + break; + } + } + + frame = (frame + 1) % MOOSEFRAMES_COUNT; + UpdateTexture(MooseTexture, frame); + + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, MooseTexture, NULL, NULL); + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char **argv) +{ + SDL_Window *window; + SDL_RWops *handle; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* load the moose images */ + handle = SDL_RWFromFile("moose.dat", "rb"); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + quit(2); + } + SDL_RWread(handle, MooseFrames, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT); + SDL_RWclose(handle); + + + /* Create the window and renderer */ + window = SDL_CreateWindow("Happy Moose", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + MOOSEPIC_W*4, MOOSEPIC_H*4, + SDL_WINDOW_RESIZABLE); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError()); + quit(3); + } + + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError()); + quit(4); + } + + MooseTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (!MooseTexture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + quit(5); + } + + /* Loop, waiting for QUIT or the escape key */ + frame = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testthread.c b/Engine/lib/sdl/test/testthread.c new file mode 100644 index 0000000000..90e2c60c58 --- /dev/null +++ b/Engine/lib/sdl/test/testthread.c @@ -0,0 +1,98 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include +#include + +#include "SDL.h" + +static SDL_TLSID tls; +static int alive = 0; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +ThreadFunc(void *data) +{ + SDL_TLSSet(tls, "baby thread", NULL); + SDL_Log("Started thread %s: My thread id is %lu, thread data = %s\n", + (char *) data, SDL_ThreadID(), (const char *)SDL_TLSGet(tls)); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *) data); + SDL_Delay(1 * 1000); + } + SDL_Log("Thread '%s' exiting!\n", (char *) data); + return (0); +} + +static void +killed(int sig) +{ + SDL_Log("Killed with SIGTERM, waiting 5 seconds to exit\n"); + SDL_Delay(5 * 1000); + alive = 0; + quit(0); +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *thread; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + tls = SDL_TLSCreate(); + SDL_assert(tls); + SDL_TLSSet(tls, "main thread", NULL); + SDL_Log("Main thread data initially: %s\n", (const char *)SDL_TLSGet(tls)); + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, "One", "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread data finally: %s\n", (const char *)SDL_TLSGet(tls)); + + alive = 1; + signal(SIGTERM, killed); + thread = SDL_CreateThread(ThreadFunc, "Two", "#2"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + raise(SIGTERM); + + SDL_Quit(); /* Never reached */ + return (0); /* Never reached */ +} diff --git a/Engine/lib/sdl/test/testtimer.c b/Engine/lib/sdl/test/testtimer.c new file mode 100644 index 0000000000..32b7490982 --- /dev/null +++ b/Engine/lib/sdl/test/testtimer.c @@ -0,0 +1,122 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to check the resolution of the SDL timer on the current + platform +*/ + +#include +#include + +#include "SDL.h" + +#define DEFAULT_RESOLUTION 1 + +static int ticks = 0; + +static Uint32 SDLCALL +ticktock(Uint32 interval, void *param) +{ + ++ticks; + return (interval); +} + +static Uint32 SDLCALL +callback(Uint32 interval, void *param) +{ + SDL_Log("Timer %d : param = %d\n", interval, (int) (uintptr_t) param); + return interval; +} + +int +main(int argc, char *argv[]) +{ + int i, desired; + SDL_TimerID t1, t2, t3; + Uint32 start32, now32; + Uint64 start, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_TIMER) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Start the timer */ + desired = 0; + if (argv[1]) { + desired = atoi(argv[1]); + } + if (desired == 0) { + desired = DEFAULT_RESOLUTION; + } + t1 = SDL_AddTimer(desired, ticktock, NULL); + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + /* Stop the timer */ + SDL_RemoveTimer(t1); + + /* Print the results */ + if (ticks) { + SDL_Log("Timer resolution: desired = %d ms, actual = %f ms\n", + desired, (double) (10 * 1000) / ticks); + } + + /* Test multiple timers */ + SDL_Log("Testing multiple timers...\n"); + t1 = SDL_AddTimer(100, callback, (void *) 1); + if (!t1) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 1: %s\n", SDL_GetError()); + t2 = SDL_AddTimer(50, callback, (void *) 2); + if (!t2) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 2: %s\n", SDL_GetError()); + t3 = SDL_AddTimer(233, callback, (void *) 3); + if (!t3) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 3: %s\n", SDL_GetError()); + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + SDL_Log("Removing timer 1 and waiting 5 more seconds\n"); + SDL_RemoveTimer(t1); + + SDL_Delay(5 * 1000); + + SDL_RemoveTimer(t2); + SDL_RemoveTimer(t3); + + start = SDL_GetPerformanceCounter(); + for (i = 0; i < 1000000; ++i) { + ticktock(0, NULL); + } + now = SDL_GetPerformanceCounter(); + SDL_Log("1 million iterations of ticktock took %f ms\n", (double)((now - start)*1000) / SDL_GetPerformanceFrequency()); + + SDL_Log("Performance counter frequency: %"SDL_PRIu64"\n", (unsigned long long) SDL_GetPerformanceFrequency()); + start32 = SDL_GetTicks(); + start = SDL_GetPerformanceCounter(); + SDL_Delay(1000); + now = SDL_GetPerformanceCounter(); + now32 = SDL_GetTicks(); + SDL_Log("Delay 1 second = %d ms in ticks, %f ms according to performance counter\n", (now32-start32), (double)((now - start)*1000) / SDL_GetPerformanceFrequency()); + + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testver.c b/Engine/lib/sdl/test/testver.c new file mode 100644 index 0000000000..f0e3bcf3c2 --- /dev/null +++ b/Engine/lib/sdl/test/testver.c @@ -0,0 +1,47 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to compare the compile-time version of SDL with the linked + version of SDL +*/ + +#include +#include + +#include "SDL.h" +#include "SDL_revision.h" + +int +main(int argc, char *argv[]) +{ + SDL_version compiled; + SDL_version linked; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + +#if SDL_VERSION_ATLEAST(2, 0, 0) + SDL_Log("Compiled with SDL 2.0 or newer\n"); +#else + SDL_Log("Compiled with SDL older than 2.0\n"); +#endif + SDL_VERSION(&compiled); + SDL_Log("Compiled version: %d.%d.%d.%d (%s)\n", + compiled.major, compiled.minor, compiled.patch, + SDL_REVISION_NUMBER, SDL_REVISION); + SDL_GetVersion(&linked); + SDL_Log("Linked version: %d.%d.%d.%d (%s)\n", + linked.major, linked.minor, linked.patch, + SDL_GetRevisionNumber(), SDL_GetRevision()); + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testviewport.c b/Engine/lib/sdl/test/testviewport.c new file mode 100644 index 0000000000..7ed4e6ec35 --- /dev/null +++ b/Engine/lib/sdl/test/testviewport.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Check viewports */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test.h" +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +SDL_Rect viewport; +int done, j; +SDL_bool use_target = SDL_FALSE; +#ifdef __EMSCRIPTEN__ +Uint32 wait_start; +#endif + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +void +DrawOnViewport(SDL_Renderer * renderer, SDL_Rect viewport) +{ + SDL_Rect rect; + + /* Set the viewport */ + SDL_RenderSetViewport(renderer, &viewport); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF); + SDL_RenderClear(renderer); + + /* Test inside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF); + SDL_RenderDrawPoint(renderer, viewport.h/2 + 10, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 - 10, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - 10); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + 10); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, 1, 0, viewport.w-2, 0); + SDL_RenderDrawLine(renderer, 1, viewport.h-1, viewport.w-2, viewport.h-1); + SDL_RenderDrawLine(renderer, 0, 1, 0, viewport.h-2); + SDL_RenderDrawLine(renderer, viewport.w-1, 1, viewport.w-1, viewport.h-2); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF); + SDL_RenderDrawLine(renderer, 0, 0, + viewport.w-1, viewport.h-1); + SDL_RenderDrawLine(renderer, viewport.w-1, 0, + 0, viewport.h-1); + + /* Test outside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF); + SDL_RenderDrawPoint(renderer, viewport.h/2 + viewport.h, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 - viewport.h, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - viewport.w); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + viewport.w); + + /* Add a box at the top */ + rect.w = 8; + rect.h = 8; + rect.x = (viewport.w - rect.w) / 2; + rect.y = 0; + SDL_RenderFillRect(renderer, &rect); +} + +void +loop() +{ +#ifdef __EMSCRIPTEN__ + /* Avoid using delays */ + if(SDL_GetTicks() - wait_start < 1000) + return; + wait_start = SDL_GetTicks(); +#endif + SDL_Event event; + int i; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + + /* Move a viewport box in steps around the screen */ + viewport.x = j * 100; + viewport.y = viewport.x; + viewport.w = 100 + j * 50; + viewport.h = 100 + j * 50; + j = (j + 1) % 4; + SDL_Log("Current Viewport x=%i y=%i w=%i h=%i", viewport.x, viewport.y, viewport.w, viewport.h); + + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + + /* Draw using viewport */ + DrawOnViewport(state->renderers[i], viewport); + + /* Update the screen! */ + if (use_target) { + SDL_SetRenderTarget(state->renderers[i], NULL); + SDL_RenderCopy(state->renderers[i], state->targets[i], NULL, NULL); + SDL_RenderPresent(state->renderers[i]); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } else { + SDL_RenderPresent(state->renderers[i]); + } + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--target") == 0) { + use_target = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--target]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + if (use_target) { + int w, h; + + for (i = 0; i < state->num_windows; ++i) { + SDL_GetWindowSize(state->windows[i], &w, &h); + state->targets[i] = SDL_CreateTexture(state->renderers[i], SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + j = 0; + +#ifdef __EMSCRIPTEN__ + wait_start = SDL_GetTicks(); + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + SDL_Delay(1000); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testwm2.c b/Engine/lib/sdl/test/testwm2.c new file mode 100644 index 0000000000..94ba513bed --- /dev/null +++ b/Engine/lib/sdl/test/testwm2.c @@ -0,0 +1,159 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +static SDLTest_CommonState *state; +int done; + +static const char *cursorNames[] = { + "arrow", + "ibeam", + "wait", + "crosshair", + "waitarrow", + "sizeNWSE", + "sizeNESW", + "sizeWE", + "sizeNS", + "sizeALL", + "NO", + "hand", +}; +int system_cursor = -1; +SDL_Cursor *cursor = NULL; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +void +loop() +{ + SDL_Event event; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + if (event.type == SDL_WINDOWEVENT) { + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d resized to %dx%d\n", + event.window.windowID, + event.window.data1, + event.window.data2); + } + } + if (event.window.event == SDL_WINDOWEVENT_MOVED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d moved to %d,%d (display %s)\n", + event.window.windowID, + event.window.data1, + event.window.data2, + SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window))); + } + } + } + if (event.type == SDL_KEYUP) { + SDL_bool updateCursor = SDL_FALSE; + + if (event.key.keysym.sym == SDLK_LEFT) { + --system_cursor; + if (system_cursor < 0) { + system_cursor = SDL_NUM_SYSTEM_CURSORS - 1; + } + updateCursor = SDL_TRUE; + } else if (event.key.keysym.sym == SDLK_RIGHT) { + ++system_cursor; + if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) { + system_cursor = 0; + } + updateCursor = SDL_TRUE; + } + if (updateCursor) { + SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]); + SDL_FreeCursor(cursor); + cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor); + SDL_SetCursor(cursor); + } + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + state->skip_renderer = SDL_TRUE; + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + } + if (consumed < 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDL_FreeCursor(cursor); + + quit(0); + /* keep the compiler happy ... */ + return(0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/torturethread.c b/Engine/lib/sdl/test/torturethread.c new file mode 100644 index 0000000000..5719a71950 --- /dev/null +++ b/Engine/lib/sdl/test/torturethread.c @@ -0,0 +1,113 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include +#include +#include + +#include "SDL.h" + +#define NUMTHREADS 10 + +static char volatile time_for_threads_to_die[NUMTHREADS]; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +SubThreadFunc(void *data) +{ + while (!*(int volatile *) data) { + ; /* SDL_Delay(10); *//* do nothing */ + } + return 0; +} + +int SDLCALL +ThreadFunc(void *data) +{ + SDL_Thread *sub_threads[NUMTHREADS]; + int flags[NUMTHREADS]; + int i; + int tid = (int) (uintptr_t) data; + + SDL_Log("Creating Thread %d\n", tid); + + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Child%d_%d", tid, i); + flags[i] = 0; + sub_threads[i] = SDL_CreateThread(SubThreadFunc, name, &flags[i]); + } + + SDL_Log("Thread '%d' waiting for signal\n", tid); + while (time_for_threads_to_die[tid] != 1) { + ; /* do nothing */ + } + + SDL_Log("Thread '%d' sending signals to subthreads\n", tid); + for (i = 0; i < NUMTHREADS; i++) { + flags[i] = 1; + SDL_WaitThread(sub_threads[i], NULL); + } + + SDL_Log("Thread '%d' exiting!\n", tid); + + return 0; +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *threads[NUMTHREADS]; + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + signal(SIGSEGV, SIG_DFL); + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Parent%d", i); + time_for_threads_to_die[i] = 0; + threads[i] = SDL_CreateThread(ThreadFunc, name, (void*) (uintptr_t) i); + + if (threads[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + } + + for (i = 0; i < NUMTHREADS; i++) { + time_for_threads_to_die[i] = 1; + } + + for (i = 0; i < NUMTHREADS; i++) { + SDL_WaitThread(threads[i], NULL); + } + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/utf8.txt b/Engine/lib/sdl/test/utf8.txt new file mode 100644 index 0000000000..aab22f1d02 --- /dev/null +++ b/Engine/lib/sdl/test/utf8.txt @@ -0,0 +1,287 @@ +UTF-8 decoder capability and stress test +---------------------------------------- + +Markus Kuhn - 2003-02-19 + +This test file can help you examine, how your UTF-8 decoder handles +various types of correct, malformed, or otherwise interesting UTF-8 +sequences. This file is not meant to be a conformance test. It does +not prescribes any particular outcome and therefore there is no way to +"pass" or "fail" this test file, even though the texts suggests a +preferable decoder behaviour at some places. The aim is instead to +help you think about and test the behaviour of your UTF-8 on a +systematic collection of unusual inputs. Experience so far suggests +that most first-time authors of UTF-8 decoders find at least one +serious problem in their decoder by using this file. + +The test lines below cover boundary conditions, malformed UTF-8 +sequences as well as correctly encoded UTF-8 sequences of Unicode code +points that should never occur in a correct UTF-8 file. + +According to ISO 10646-1:2000, sections D.7 and 2.3c, a device +receiving UTF-8 shall interpret a "malformed sequence in the same way +that it interprets a character that is outside the adopted subset" and +"characters that are not within the adopted subset shall be indicated +to the user" by a receiving device. A quite commonly used approach in +UTF-8 decoders is to replace any malformed UTF-8 sequence by a +replacement character (U+FFFD), which looks a bit like an inverted +question mark, or a similar symbol. It might be a good idea to +visually distinguish a malformed UTF-8 sequence from a correctly +encoded Unicode character that is just not available in the current +font but otherwise fully legal, even though ISO 10646-1 doesn't +mandate this. In any case, just ignoring malformed sequences or +unavailable characters does not conform to ISO 10646, will make +debugging more difficult, and can lead to user confusion. + +Please check, whether a malformed UTF-8 sequence is (1) represented at +all, (2) represented by exactly one single replacement character (or +equivalent signal), and (3) the following quotation mark after an +illegal UTF-8 sequence is correctly displayed, i.e. proper +resynchronization takes place immageately after any malformed +sequence. This file says "THE END" in the last line, so if you don't +see that, your decoder crashed somehow before, which should always be +cause for concern. + +All lines in this file are exactly 79 characters long (plus the line +feed). In addition, all lines end with "|", except for the two test +lines 2.1.1 and 2.2.1, which contain non-printable ASCII controls +U+0000 and U+007F. If you display this file with a fixed-width font, +these "|" characters should all line up in column 79 (right margin). +This allows you to test quickly, whether your UTF-8 decoder finds the +correct number of characters in every line, that is whether each +malformed sequences is replaced by a single replacement character. + +Note that as an alternative to the notion of malformed sequence used +here, it is also a perfectly acceptable (and in some situations even +preferable) solution to represent each individual byte of a malformed +sequence by a replacement character. If you follow this strategy in +your decoder, then please ignore the "|" column. + + +Here come the tests: | + | +1 Some correct UTF-8 text | + | +(The codepoints for this test are: | + U+03BA U+1F79 U+03C3 U+03BC U+03B5 --ryan.) | + | +You should see the Greek word 'kosme': "κόσμε" | + | + | +2 Boundary condition test cases | + | +2.1 First possible sequence of a certain length | + | +(byte zero skipped...there's a null added at the end of the test. --ryan.) | + | +2.1.2 2 bytes (U-00000080): "€" | +2.1.3 3 bytes (U-00000800): "ࠀ" | +2.1.4 4 bytes (U-00010000): "𐀀" | + | +(5 and 6 byte sequences were made illegal in rfc3629. --ryan.) | +2.1.5 5 bytes (U-00200000): "" | +2.1.6 6 bytes (U-04000000): "" | + | +2.2 Last possible sequence of a certain length | + | +2.2.1 1 byte (U-0000007F): "" | +2.2.2 2 bytes (U-000007FF): "߿" | + | +(Section 5.3.2 below calls this illegal. --ryan.) | +2.2.3 3 bytes (U-0000FFFF): "￿" | + | +(5 and 6 bytes sequences, and 4 bytes sequences > 0x10FFFF were made illegal | + in rfc3629, so these next three should be replaced with a invalid | + character codepoint. --ryan.) | +2.2.4 4 bytes (U-001FFFFF): "" | +2.2.5 5 bytes (U-03FFFFFF): "" | +2.2.6 6 bytes (U-7FFFFFFF): "" | + | +2.3 Other boundary conditions | + | +2.3.1 U-0000D7FF = ed 9f bf = "퟿" | +2.3.2 U-0000E000 = ee 80 80 = "" | +2.3.3 U-0000FFFD = ef bf bd = "�" | +2.3.4 U-0010FFFF = f4 8f bf bf = "􏿿" | + | +(This one is bogus in rfc3629. --ryan.) | +2.3.5 U-00110000 = f4 90 80 80 = "" | + | +3 Malformed sequences | + | +3.1 Unexpected continuation bytes | + | +Each unexpected continuation byte should be separately signalled as a | +malformed sequence of its own. | + | +3.1.1 First continuation byte 0x80: "" | +3.1.2 Last continuation byte 0xbf: "" | + | +3.1.3 2 continuation bytes: "" | +3.1.4 3 continuation bytes: "" | +3.1.5 4 continuation bytes: "" | +3.1.6 5 continuation bytes: "" | +3.1.7 6 continuation bytes: "" | +3.1.8 7 continuation bytes: "" | + | +3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf): | + | + " | + | + | + " | + | +3.2 Lonely start characters | + | +3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf), | + each followed by a space character: | + | + " | + " | + | +3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef), | + each followed by a space character: | + | + " " | + | +3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7), | + each followed by a space character: | + | + " " | + | +3.2.4 All 4 first bytes of 5-byte sequences (0xf8-0xfb), | + each followed by a space character: | + | + " " | + | +3.2.5 All 2 first bytes of 6-byte sequences (0xfc-0xfd), | + each followed by a space character: | + | + " " | + | +3.3 Sequences with last continuation byte missing | + | +All bytes of an incomplete sequence should be signalled as a single | +malformed sequence, i.e., you should see only a single replacement | +character in each of the next 10 tests. (Characters as in section 2) | + | +3.3.1 2-byte sequence with last byte missing (U+0000): "" | +3.3.2 3-byte sequence with last byte missing (U+0000): "" | +3.3.3 4-byte sequence with last byte missing (U+0000): "" | +3.3.4 5-byte sequence with last byte missing (U+0000): "" | +3.3.5 6-byte sequence with last byte missing (U+0000): "" | +3.3.6 2-byte sequence with last byte missing (U-000007FF): "" | +3.3.7 3-byte sequence with last byte missing (U-0000FFFF): "" | +3.3.8 4-byte sequence with last byte missing (U-001FFFFF): "" | +3.3.9 5-byte sequence with last byte missing (U-03FFFFFF): "" | +3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): "" | + | +3.4 Concatenation of incomplete sequences | + | +All the 10 sequences of 3.3 concatenated, you should see 10 malformed | +sequences being signalled: | + | + "" | + | +3.5 Impossible bytes | + | +The following two bytes cannot appear in a correct UTF-8 string | + | +3.5.1 fe = "" | +3.5.2 ff = "" | +3.5.3 fe fe ff ff = "" | + | +4 Overlong sequences | + | +The following sequences are not malformed according to the letter of | +the Unicode 2.0 standard. However, they are longer then necessary and | +a correct UTF-8 encoder is not allowed to produce them. A "safe UTF-8 | +decoder" should reject them just like malformed sequences for two | +reasons: (1) It helps to debug applications if overlong sequences are | +not treated as valid representations of characters, because this helps | +to spot problems more quickly. (2) Overlong sequences provide | +alternative representations of characters, that could maliciously be | +used to bypass filters that check only for ASCII characters. For | +instance, a 2-byte encoded line feed (LF) would not be caught by a | +line counter that counts only 0x0a bytes, but it would still be | +processed as a line feed by an unsafe UTF-8 decoder later in the | +pipeline. From a security point of view, ASCII compatibility of UTF-8 | +sequences means also, that ASCII characters are *only* allowed to be | +represented by ASCII bytes in the range 0x00-0x7f. To ensure this | +aspect of ASCII compatibility, use only "safe UTF-8 decoders" that | +reject overlong UTF-8 sequences for which a shorter encoding exists. | + | +4.1 Examples of an overlong ASCII character | + | +With a safe UTF-8 decoder, all of the following five overlong | +representations of the ASCII character slash ("/") should be rejected | +like a malformed UTF-8 sequence, for instance by substituting it with | +a replacement character. If you see a slash below, you do not have a | +safe UTF-8 decoder! | + | +4.1.1 U+002F = c0 af = "" | +4.1.2 U+002F = e0 80 af = "" | +4.1.3 U+002F = f0 80 80 af = "" | +4.1.4 U+002F = f8 80 80 80 af = "" | +4.1.5 U+002F = fc 80 80 80 80 af = "" | + | +4.2 Maximum overlong sequences | + | +Below you see the highest Unicode value that is still resulting in an | +overlong sequence if represented with the given number of bytes. This | +is a boundary test for safe UTF-8 decoders. All five characters should | +be rejected like malformed UTF-8 sequences. | + | +4.2.1 U-0000007F = c1 bf = "" | +4.2.2 U-000007FF = e0 9f bf = "" | +4.2.3 U-0000FFFF = f0 8f bf bf = "" | +4.2.4 U-001FFFFF = f8 87 bf bf bf = "" | +4.2.5 U-03FFFFFF = fc 83 bf bf bf bf = "" | + | +4.3 Overlong representation of the NUL character | + | +The following five sequences should also be rejected like malformed | +UTF-8 sequences and should not be treated like the ASCII NUL | +character. | + | +4.3.1 U+0000 = c0 80 = "" | +4.3.2 U+0000 = e0 80 80 = "" | +4.3.3 U+0000 = f0 80 80 80 = "" | +4.3.4 U+0000 = f8 80 80 80 80 = "" | +4.3.5 U+0000 = fc 80 80 80 80 80 = "" | + | +5 Illegal code positions | + | +The following UTF-8 sequences should be rejected like malformed | +sequences, because they never represent valid ISO 10646 characters and | +a UTF-8 decoder that accepts them might introduce security problems | +comparable to overlong UTF-8 sequences. | + | +5.1 Single UTF-16 surrogates | + | +5.1.1 U+D800 = ed a0 80 = "" | +5.1.2 U+DB7F = ed ad bf = "" | +5.1.3 U+DB80 = ed ae 80 = "" | +5.1.4 U+DBFF = ed af bf = "" | +5.1.5 U+DC00 = ed b0 80 = "" | +5.1.6 U+DF80 = ed be 80 = "" | +5.1.7 U+DFFF = ed bf bf = "" | + | +5.2 Paired UTF-16 surrogates | + | +5.2.1 U+D800 U+DC00 = ed a0 80 ed b0 80 = "" | +5.2.2 U+D800 U+DFFF = ed a0 80 ed bf bf = "" | +5.2.3 U+DB7F U+DC00 = ed ad bf ed b0 80 = "" | +5.2.4 U+DB7F U+DFFF = ed ad bf ed bf bf = "" | +5.2.5 U+DB80 U+DC00 = ed ae 80 ed b0 80 = "" | +5.2.6 U+DB80 U+DFFF = ed ae 80 ed bf bf = "" | +5.2.7 U+DBFF U+DC00 = ed af bf ed b0 80 = "" | +5.2.8 U+DBFF U+DFFF = ed af bf ed bf bf = "" | + | +5.3 Other illegal code positions | + | +5.3.1 U+FFFE = ef bf be = "￾" | +5.3.2 U+FFFF = ef bf bf = "￿" | + | +THE END | + diff --git a/Engine/lib/tinyxml/tinyxml.h b/Engine/lib/tinyxml/tinyxml.h index a3589e5b26..33e38b5358 100644 --- a/Engine/lib/tinyxml/tinyxml.h +++ b/Engine/lib/tinyxml/tinyxml.h @@ -283,10 +283,9 @@ class TiXmlBase TIXML_ERROR_STRING_COUNT }; -protected: - static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); +protected: inline static bool IsWhiteSpace( char c ) { return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); @@ -360,6 +359,7 @@ class TiXmlBase } } +public: // Return true if the next characters in the stream are any of the endTag sequences. // Ignore case only works for english, and should only be relied on when comparing // to English words: StringEqual( p, "version", true ) is fine. @@ -368,6 +368,7 @@ class TiXmlBase bool ignoreCase, TiXmlEncoding encoding ); +protected: static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; TiXmlCursor location; @@ -375,10 +376,13 @@ class TiXmlBase /// Field containing a generic user pointer void* userData; +public: // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + +protected: inline static int ToLower( int v, TiXmlEncoding encoding ) { if ( encoding == TIXML_ENCODING_UTF8 ) @@ -750,9 +754,10 @@ class TiXmlNode : public TiXmlBase #endif // Figure out what is at *p, and parse it. Returns null if it is not an xml node. - TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); - + virtual TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); +public: TiXmlNode* parent; +protected: NodeType type; TiXmlNode* firstChild; @@ -1047,7 +1052,7 @@ class TiXmlElement : public TiXmlNode /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ - void SetAttribute( const char* name, const char * _value ); + virtual void SetAttribute( const char* name, const char * _value ); #ifdef TIXML_USE_STL const std::string* Attribute( const std::string& name ) const; @@ -1067,7 +1072,7 @@ class TiXmlElement : public TiXmlNode /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ - void SetAttribute( const char * name, int value ); + virtual void SetAttribute( const char * name, int value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. @@ -1152,7 +1157,6 @@ class TiXmlElement : public TiXmlNode */ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); -private: TiXmlAttributeSet attributeSet; }; @@ -1264,7 +1268,6 @@ protected : virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: bool cdata; // true if this should be input and output as a CDATA style text element }; @@ -1336,8 +1339,6 @@ class TiXmlDeclaration : public TiXmlNode virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: - TIXML_STRING version; TIXML_STRING encoding; TIXML_STRING standalone; @@ -1416,9 +1417,9 @@ class TiXmlDocument : public TiXmlNode /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. - bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + virtual bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given filename. Returns true if successful. - bool SaveFile( const char * filename ) const; + virtual bool SaveFile( const char * filename ) const; /** Load a file using the given FILE*. Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current @@ -1543,14 +1544,15 @@ protected : virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: void CopyTo( TiXmlDocument* target ) const; +private: bool error; int errorId; TIXML_STRING errorDesc; int tabsize; TiXmlCursor errorLocation; +protected: bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. }; @@ -1797,6 +1799,29 @@ class TiXmlPrinter : public TiXmlVisitor TIXML_STRING lineBreak; }; +class TiXmlParsingData +{ + friend class TiXmlDocument; + public: + void Stamp( const char* now, TiXmlEncoding encoding ); + + const TiXmlCursor& Cursor() const { return cursor; } + + private: + // Only used by the document! + TiXmlParsingData( const char* start, int _tabsize, int row, int col ) + { + assert( start ); + stamp = start; + tabsize = _tabsize; + cursor.row = row; + cursor.col = col; + } + + TiXmlCursor cursor; + const char* stamp; + int tabsize; +}; #ifdef _MSC_VER #pragma warning( pop ) diff --git a/Engine/lib/tinyxml/tinyxmlparser.cpp b/Engine/lib/tinyxml/tinyxmlparser.cpp index 81b7eae96b..7bf2705cb6 100644 --- a/Engine/lib/tinyxml/tinyxmlparser.cpp +++ b/Engine/lib/tinyxml/tinyxmlparser.cpp @@ -168,29 +168,6 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng } -class TiXmlParsingData -{ - friend class TiXmlDocument; - public: - void Stamp( const char* now, TiXmlEncoding encoding ); - - const TiXmlCursor& Cursor() const { return cursor; } - - private: - // Only used by the document! - TiXmlParsingData( const char* start, int _tabsize, int row, int col ) - { - assert( start ); - stamp = start; - tabsize = _tabsize; - cursor.row = row; - cursor.col = col; - } - - TiXmlCursor cursor; - const char* stamp; - int tabsize; -}; void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 8992c2c558..d8f4d9e2dc 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -145,6 +145,9 @@ void AIPlayer::initPersistFields() "to accelerate to full speed without its initial slow start being considered as stuck.\n" "@note Set to zero to have the stuck test start immediately.\n"); + addField( "AttackRadius", TypeF32, Offset( mAttackRadius, AIPlayer ), + "@brief Distance considered in firing range for callback purposes."); + endGroup( "AI" ); #ifdef TORQUE_NAVIGATION_ENABLED @@ -157,7 +160,7 @@ void AIPlayer::initPersistFields() addField("allowDrop", TypeBool, Offset(mLinkTypes.drop, AIPlayer), "Allow the character to use drop links."); addField("allowSwim", TypeBool, Offset(mLinkTypes.swim, AIPlayer), - "Allow the character tomove in water."); + "Allow the character to move in water."); addField("allowLedge", TypeBool, Offset(mLinkTypes.ledge, AIPlayer), "Allow the character to jump ledges."); addField("allowClimb", TypeBool, Offset(mLinkTypes.climb, AIPlayer), @@ -290,6 +293,30 @@ void AIPlayer::clearAim() mAimOffset = Point3F(0.0f, 0.0f, 0.0f); } +/** + * Sets the correct aim for the bot to the target + */ +void AIPlayer::getMuzzleVector(U32 imageSlot,VectorF* vec) +{ + MatrixF mat; + getMuzzleTransform(imageSlot,&mat); + + MountedImage& image = mMountedImageList[imageSlot]; + + if (image.dataBlock->correctMuzzleVector) + { + disableHeadZCalc(); + if (getCorrectedAim(mat, vec)) + { + enableHeadZCalc(); + return; + } + enableHeadZCalc(); + + } + mat.getColumn(1,vec); +} + /** * Set the state of a movement trigger. * @@ -372,6 +399,11 @@ bool AIPlayer::getAIMove(Move *movePtr) { clearPath(); mMoveState = ModeStop; + throwCallback("onTargetInRange"); + } + else if((getPosition() - mFollowData.object->getPosition()).len() < mAttackRadius) + { + throwCallback("onTargetInFiringRange"); } } } @@ -499,7 +531,7 @@ bool AIPlayer::getAIMove(Move *movePtr) { F32 speed = mMoveSpeed; F32 dist = mSqrt(xDiff*xDiff + yDiff*yDiff); - F32 maxDist = 5.0f; + F32 maxDist = mMoveTolerance*2; if (dist < maxDist) speed *= dist / maxDist; movePtr->x *= speed; @@ -539,34 +571,42 @@ bool AIPlayer::getAIMove(Move *movePtr) // Test for target location in sight if it's an object. The LOS is // run from the eye position to the center of the object's bounding, // which is not very accurate. - if (mAimObject) { - MatrixF eyeMat; - getEyeTransform(&eyeMat); - eyeMat.getColumn(3,&location); - Point3F targetLoc = mAimObject->getBoxCenter(); - - // This ray ignores non-static shapes. Cast Ray returns true - // if it hit something. - RayInfo dummy; - if (getContainer()->castRay( location, targetLoc, - StaticShapeObjectType | StaticObjectType | - TerrainObjectType, &dummy)) { - if (mTargetInLOS) { - throwCallback( "onTargetExitLOS" ); - mTargetInLOS = false; - } - } - else - if (!mTargetInLOS) { + if (mAimObject) + { + if (checkInLos(mAimObject.getPointer())) + { + if (!mTargetInLOS) + { throwCallback( "onTargetEnterLOS" ); mTargetInLOS = true; } } + else if (mTargetInLOS) + { + throwCallback( "onTargetExitLOS" ); + mTargetInLOS = false; + } + } + Pose desiredPose = mPose; + + if ( mSwimming ) + desiredPose = SwimPose; + else if ( mAiPose == 1 && canCrouch() ) + desiredPose = CrouchPose; + else if ( mAiPose == 2 && canProne() ) + desiredPose = PronePose; + else if ( mAiPose == 3 && canSprint() ) + desiredPose = SprintPose; + else if ( canStand() ) + desiredPose = StandPose; + + setPose( desiredPose ); + // Replicate the trigger state into the move so that // triggers can be controlled from scripts. for( U32 i = 0; i < MaxTriggerKeys; i++ ) - movePtr->trigger[ i ] = mMoveTriggers[ i ]; + movePtr->trigger[ i ] = getImageTriggerState( i ); #ifdef TORQUE_NAVIGATION_ENABLED if(mJump == Now) @@ -591,6 +631,26 @@ bool AIPlayer::getAIMove(Move *movePtr) return true; } +void AIPlayer::updateMove(const Move* move) +{ + if (!getControllingClient() && isGhost()) + return; + + Parent::updateMove(move); +} + +void AIPlayer::setAiPose( S32 pose ) +{ + if (!getControllingClient() && isGhost()) + return; + mAiPose = pose; +} + +S32 AIPlayer::getAiPose() +{ + return mAiPose; +} + /** * Utility function to throw callbacks. Callbacks always occure * on the datablock class. @@ -720,6 +780,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) if(!getNavMesh()) { //setMoveDestination(pos); + throwCallback("onPathFailed"); return false; } @@ -751,6 +812,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) mPathData.owned = true; // Skip node 0, which we are currently standing on. moveToNode(1); + throwCallback("onPathSuccess"); return true; } else @@ -758,7 +820,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) // Just move normally if we can't path. //setMoveDestination(pos, true); //return; - //throwCallback("onPathFailed"); + throwCallback("onPathFailed"); path->deleteObject(); return false; } @@ -846,6 +908,10 @@ DefineEngineMethod(AIPlayer, followObject, void, (SimObjectId obj, F32 radius),, "@param radius Maximum distance we let the target escape to.") { SceneObject *follow; + object->clearPath(); + object->clearCover(); + object->clearFollow(); + if(Sim::findObject(obj, follow)) object->followObject(follow, radius); } @@ -1348,3 +1414,52 @@ DefineEngineMethod( AIPlayer, clearMoveTriggers, void, ( ),, { object->clearMoveTriggers(); } + +F32 AIPlayer::getTargetDistance(GameBase* target, bool _checkEnabled) +{ + if (!isServerObject()) return false; + if (!target) + { + target = mAimObject.getPointer(); + if (!target) + return F32_MAX; + } + + if (_checkEnabled) + { + if (target->getTypeMask() & ShapeBaseObjectType) + { + ShapeBase *shapeBaseCheck = static_cast(target); + if (shapeBaseCheck) + if (shapeBaseCheck->getDamageState() != Enabled) return false; + } + else + return F32_MAX; + } + + return (getPosition() - target->getPosition()).len(); +} + +DefineEngineMethod(AIPlayer, getTargetDistance, bool, (ShapeBase* obj, bool checkEnabled), (NULL, false), + "@brief Check whether an object is within a specified veiw cone.\n" + "@obj Object to check. (If blank, it will check the current target).\n" + "@fov view angle in degrees.(Defaults to 45)\n" + "@checkEnabled check whether the object can take damage and if so is still alive.(Defaults to false)\n") +{ + return object->getTargetDistance(obj, checkEnabled); +} + +DefineEngineMethod( AIPlayer, setAiPose, void, ( S32 pose ),, + "@brief Sets the AiPose for an AI object.\n" + "@param pose StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n" + "Uses the new AiPose variable from shapebase (as defined in its PlayerData datablock).\n") +{ + object->setAiPose(pose); +} + +DefineEngineMethod( AIPlayer, getAiPose, S32, (),, + "@brief Get the object's current AiPose.\n" + "@return StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n") +{ + return object->getAiPose(); +} diff --git a/Engine/source/T3D/aiPlayer.h b/Engine/source/T3D/aiPlayer.h index d693314eb2..a8430575c0 100644 --- a/Engine/source/T3D/aiPlayer.h +++ b/Engine/source/T3D/aiPlayer.h @@ -49,6 +49,7 @@ class AIPlayer : public Player { MoveState mMoveState; F32 mMoveSpeed; F32 mMoveTolerance; // Distance from destination before we stop + F32 mAttackRadius; // Distance to trigger weaponry calcs Point3F mMoveDestination; // Destination for movement Point3F mLastLocation; // For stuck check F32 mMoveStuckTolerance; // Distance tolerance on stuck check @@ -96,8 +97,6 @@ class AIPlayer : public Player { /// Path we are currently following. PathData mPathData; - /// Clear out the current path. - void clearPath(); /// Get the current path we're following. NavPath *getPath() { return mPathData.path; } @@ -113,8 +112,6 @@ class AIPlayer : public Player { /// Current cover we're trying to get to. CoverData mCoverData; - /// Stop searching for cover. - void clearCover(); /// Information about a target we're following. struct FollowData { @@ -134,8 +131,6 @@ class AIPlayer : public Player { /// Current object we're following. FollowData mFollowData; - /// Stop following me! - void clearFollow(); /// NavMesh we pathfind on. SimObjectPtr mNavMesh; @@ -160,6 +155,13 @@ class AIPlayer : public Player { void onRemove(); virtual bool getAIMove( Move *move ); + virtual void updateMove(const Move *move); + /// Clear out the current path. + void clearPath(); + /// Stop searching for cover. + void clearCover(); + /// Stop following me! + void clearFollow(); // Targeting and aiming sets/gets void setAimObject( GameBase *targetObject ); @@ -168,8 +170,10 @@ class AIPlayer : public Player { void setAimLocation( const Point3F &location ); Point3F getAimLocation() const { return mAimLocation; } void clearAim(); + void getMuzzleVector(U32 imageSlot,VectorF* vec); bool checkInLos(GameBase* target = NULL, bool _useMuzzle = false, bool _checkEnabled = false); bool checkInFoV(GameBase* target = NULL, F32 camFov = 45.0f, bool _checkEnabled = false); + F32 getTargetDistance(GameBase* target, bool _checkEnabled); // Movement sets/gets void setMoveSpeed( const F32 speed ); @@ -179,7 +183,9 @@ class AIPlayer : public Player { void setMoveDestination( const Point3F &location, bool slowdown ); Point3F getMoveDestination() const { return mMoveDestination; } void stopMove(); - + void setAiPose( S32 pose ); + S32 getAiPose(); + // Trigger sets/gets void setMoveTrigger( U32 slot, const bool isSet = true ); bool getMoveTrigger( U32 slot ) const; diff --git a/Engine/source/T3D/assets/ComponentAsset.cpp b/Engine/source/T3D/assets/ComponentAsset.cpp new file mode 100644 index 0000000000..2f4d524acc --- /dev/null +++ b/Engine/source/T3D/assets/ComponentAsset.cpp @@ -0,0 +1,138 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COMPONENT_ASSET_H +#include "ComponentAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ComponentAsset); + +ConsoleType(ComponentAssetPtr, TypeComponentAssetPtr, ComponentAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeComponentAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeComponentAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ComponentAsset::ComponentAsset() : + mAcquireReferenceCount(0), + mpOwningAssetManager(NULL), + mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); + + mComponentName = StringTable->lookup(""); + mComponentClass = StringTable->lookup(""); + mFriendlyName = StringTable->lookup(""); + mComponentType = StringTable->lookup(""); + mDescription = StringTable->lookup(""); +} + +//----------------------------------------------------------------------------- + +ComponentAsset::~ComponentAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ComponentAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("componentName", TypeString, Offset(mComponentName, ComponentAsset), "Unique Name of the component. Defines the namespace of the scripts for the component."); + addField("componentClass", TypeString, Offset(mComponentClass, ComponentAsset), "Class of object this component uses."); + addField("friendlyName", TypeString, Offset(mFriendlyName, ComponentAsset), "The human-readble name for the component."); + addField("componentType", TypeString, Offset(mComponentType, ComponentAsset), "The category of the component for organizing in the editor."); + addField("description", TypeString, Offset(mDescription, ComponentAsset), "Simple description of the component."); +} + +//------------------------------------------------------------------------------ + +void ComponentAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ComponentAsset.h b/Engine/source/T3D/assets/ComponentAsset.h new file mode 100644 index 0000000000..1db53b8c8c --- /dev/null +++ b/Engine/source/T3D/assets/ComponentAsset.h @@ -0,0 +1,83 @@ +#pragma once +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef COMPONENT_ASSET_H +#define COMPONENT_ASSET_H + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class ComponentAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + + StringTableEntry mComponentName; + StringTableEntry mComponentClass; + StringTableEntry mFriendlyName; + StringTableEntry mComponentType; + StringTableEntry mDescription; + +public: + ComponentAsset(); + virtual ~ComponentAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(ComponentAsset); + + StringTableEntry getComponentName() { return mComponentName; } + StringTableEntry getComponentClass() { return mComponentClass; } + StringTableEntry getFriendlyName() { return mFriendlyName; } + StringTableEntry getFriendlyType() { return mComponentType; } + StringTableEntry getDescription() { return mDescription; } + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeComponentAssetPtr, ComponentAsset) + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/T3D/assets/ExampleAsset.cpp b/Engine/source/T3D/assets/ExampleAsset.cpp new file mode 100644 index 0000000000..8a0c09d1e1 --- /dev/null +++ b/Engine/source/T3D/assets/ExampleAsset.cpp @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _EXAMPLE_ASSET_H_ +#include "ExampleAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ExampleAsset); + +ConsoleType(ExampleAssetPtr, TypeExampleAssetPtr, ExampleAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeExampleAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeExampleAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ExampleAsset::ExampleAsset() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); +} + +//----------------------------------------------------------------------------- + +ExampleAsset::~ExampleAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ExampleAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + +} + +//------------------------------------------------------------------------------ + +void ExampleAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ExampleAsset.h b/Engine/source/T3D/assets/ExampleAsset.h new file mode 100644 index 0000000000..43532a6e5a --- /dev/null +++ b/Engine/source/T3D/assets/ExampleAsset.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _EXAMPLE_ASSET_H_ +#define _EXAMPLE_ASSET_H_ + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class ExampleAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +public: + ExampleAsset(); + virtual ~ExampleAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(ExampleAsset); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeExampleAssetPtr, ExampleAsset) + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/T3D/assets/GameObjectAsset.cpp b/Engine/source/T3D/assets/GameObjectAsset.cpp new file mode 100644 index 0000000000..07cbb2819e --- /dev/null +++ b/Engine/source/T3D/assets/GameObjectAsset.cpp @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GAME_OBJECT_ASSET_H +#include "GameObjectAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(GameObjectAsset); + +ConsoleType(GameObjectAssetPtr, TypeGameObjectAssetPtr, GameObjectAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeGameObjectAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeGameObjectAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +GameObjectAsset::GameObjectAsset() : + mAcquireReferenceCount(0), + mpOwningAssetManager(NULL), + mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); + + mGameObjectName = StringTable->lookup(""); + mScriptFilePath = StringTable->lookup(""); + mTAMLFilePath = StringTable->lookup(""); +} + +//----------------------------------------------------------------------------- + +GameObjectAsset::~GameObjectAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void GameObjectAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("gameObjectName", TypeString, Offset(mGameObjectName, GameObjectAsset), "Name of the game object. Defines the created object's class."); + addField("scriptFilePath", TypeString, Offset(mScriptFilePath, GameObjectAsset), "Path to the script file for the GameObject's script code."); + addField("TAMLFilePath", TypeString, Offset(mTAMLFilePath, GameObjectAsset), "Path to the taml file for the GameObject's heirarchy."); +} + +//------------------------------------------------------------------------------ + +void GameObjectAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/GameObjectAsset.h b/Engine/source/T3D/assets/GameObjectAsset.h new file mode 100644 index 0000000000..82230cd5c6 --- /dev/null +++ b/Engine/source/T3D/assets/GameObjectAsset.h @@ -0,0 +1,75 @@ +#pragma once +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef GAME_OBJECT_ASSET_H +#define GAME_OBJECT_ASSET_H + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class GameObjectAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + + StringTableEntry mGameObjectName; + StringTableEntry mScriptFilePath; + StringTableEntry mTAMLFilePath; + +public: + GameObjectAsset(); + virtual ~GameObjectAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(GameObjectAsset); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeGameObjectAssetPtr, GameObjectAsset) + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp new file mode 100644 index 0000000000..ea4882add3 --- /dev/null +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -0,0 +1,159 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _SHAPE_ASSET_H_ +#include "ShapeAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +#include "core/resourceManager.h" + +// Debug Profiling. +#include "platform/profiler.h" + +static U32 execDepth = 0; +static U32 journalDepth = 1; + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ShapeAsset); + +ConsoleType(TestAssetPtr, TypeShapeAssetPtr, ShapeAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeShapeAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeShapeAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ShapeAsset::ShapeAsset() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ +} + +//----------------------------------------------------------------------------- + +ShapeAsset::~ShapeAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ShapeAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("fileName", TypeFilename, Offset(mFileName, ShapeAsset), "Path to the script file we want to execute"); +} + +void ShapeAsset::initializeAsset() +{ + // Call parent. + Parent::initializeAsset(); + + if (dStrcmp(mFileName, "") == 0) + return; + + loadShape(); +} + +bool ShapeAsset::loadShape() +{ + mShape = ResourceManager::get().load(mFileName); + + if (!mShape) + { + Con::errorf("StaticMesh::updateShape : failed to load shape file!"); + return false; //if it failed to load, bail out + } + + return true; +} + +//------------------------------------------------------------------------------ + +void ShapeAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} + +void ShapeAsset::onAssetRefresh(void) +{ +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h new file mode 100644 index 0000000000..d727d0a1cd --- /dev/null +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -0,0 +1,88 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef SHAPE_ASSET_H +#define SHAPE_ASSET_H + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif + +//----------------------------------------------------------------------------- +class ShapeAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +protected: + StringTableEntry mFileName; + Resource mShape; + +public: + ShapeAsset(); + virtual ~ShapeAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + virtual void initializeAsset(); + + /// Declare Console Object. + DECLARE_CONOBJECT(ShapeAsset); + + bool loadShape(); + + TSShape* getShape() { return mShape; } + + Resource getShapeResource() { return mShape; } + +protected: + virtual void onAssetRefresh(void); +}; + +DefineConsoleType(TypeShapeAssetPtr, ShapeAsset) + +#endif + diff --git a/Engine/source/T3D/camera.cpp b/Engine/source/T3D/camera.cpp index 027bd308fb..59002d9bf9 100644 --- a/Engine/source/T3D/camera.cpp +++ b/Engine/source/T3D/camera.cpp @@ -495,13 +495,6 @@ void Camera::processTick(const Move* move) if ( isMounted() ) { - // Fetch Mount Transform. - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - - // Apply. - setTransform( mat ); - // Update SceneContainer. updateContainer(); return; @@ -868,16 +861,7 @@ void Camera::interpolateTick(F32 dt) Parent::interpolateTick(dt); if ( isMounted() ) - { - // Fetch Mount Transform. - MatrixF mat; - mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); - - // Apply. - setRenderTransform( mat ); - return; - } Point3F rot = mDelta.rot + mDelta.rotVec * dt; diff --git a/Engine/source/T3D/cameraSpline.cpp b/Engine/source/T3D/cameraSpline.cpp index 1444150156..1129f91f8d 100644 --- a/Engine/source/T3D/cameraSpline.cpp +++ b/Engine/source/T3D/cameraSpline.cpp @@ -29,6 +29,16 @@ //----------------------------------------------------------------------------- +CameraSpline::Knot::Knot() +{ + mPosition = Point3F::Zero; + mRotation = QuatF::Identity; + mSpeed = 0.0f; + mType = NORMAL; + mPath = SPLINE; + prev = NULL; next = NULL; +}; + CameraSpline::Knot::Knot(const Knot &k) { mPosition = k.mPosition; @@ -188,7 +198,7 @@ void CameraSpline::renderTimeMap() gBuilding = true; // Build vertex buffer - GFXVertexBufferHandle vb; + GFXVertexBufferHandle vb; vb.set(GFX, mTimeMap.size(), GFXBufferTypeVolatile); void *ptr = vb.lock(); if(!ptr) return; diff --git a/Engine/source/T3D/cameraSpline.h b/Engine/source/T3D/cameraSpline.h index 31f79f1315..6396aa425f 100644 --- a/Engine/source/T3D/cameraSpline.h +++ b/Engine/source/T3D/cameraSpline.h @@ -54,7 +54,7 @@ class CameraSpline Knot *prev; Knot *next; - Knot() {}; + Knot(); Knot(const Knot &k); Knot(const Point3F &p, const QuatF &r, F32 s, Knot::Type type = NORMAL, Knot::Path path = SPLINE); }; diff --git a/Engine/source/T3D/components/animation/animationComponent.cpp b/Engine/source/T3D/components/animation/animationComponent.cpp new file mode 100644 index 0000000000..e1a71511cd --- /dev/null +++ b/Engine/source/T3D/components/animation/animationComponent.cpp @@ -0,0 +1,717 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/animation/animationComponent.h" +#include "T3D/components/animation/animationComponent_ScriptBinding.h" +#include "T3D/components/render/meshComponent.h" + +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "sim/netConnection.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "gfx/sim/debugDraw.h" + +extern bool gEditingMission; + +////////////////////////////////////////////////////////////////////////// +// Callbacks +////////////////////////////////////////////////////////////////////////// +IMPLEMENT_CALLBACK( AnimationComponent, onAnimationStart, void, ( Component* obj, const String& animName ), ( obj, animName ), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +IMPLEMENT_CALLBACK(AnimationComponent, onAnimationEnd, void, (Component* obj, const char* animName), (obj, animName), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +IMPLEMENT_CALLBACK(AnimationComponent, onAnimationTrigger, void, (Component* obj, const String& animName, S32 triggerID), (obj, animName, triggerID), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +AnimationComponent::AnimationComponent() : Component() +{ + mNetworked = true; + mNetFlags.set(Ghostable | ScopeAlways); + + mFriendlyName = "Animation(Component)"; + mComponentType = "Render"; + + mDescription = getDescriptionText("Allows a rendered mesh to be animated"); + + mOwnerRenderInst = NULL; + + mOwnerShapeInstance = NULL; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + mAnimationThreads[i].sequence = -1; + mAnimationThreads[i].thread = 0; + mAnimationThreads[i].sound = 0; + mAnimationThreads[i].state = Thread::Stop; + mAnimationThreads[i].atEnd = false; + mAnimationThreads[i].timescale = 1.f; + mAnimationThreads[i].position = -1.f; + mAnimationThreads[i].transition = true; + } +} + +AnimationComponent::~AnimationComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(AnimationComponent); + +bool AnimationComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + //we need at least one layer + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + + if (st.sequence != -1) + { + // TG: Need to see about suppressing non-cyclic sounds + // if the sequences were activated before the object was + // ghosted. + // TG: Cyclic animations need to have a random pos if + // they were started before the object was ghosted. + + // If there was something running on the old shape, the thread + // needs to be reset. Otherwise we assume that it's been + // initialized either by the constructor or from the server. + bool reset = st.thread != 0; + st.thread = 0; + + if (st.sequence != -1) + { + setThreadSequence(i, st.sequence, reset); + } + } + + if (st.thread) + updateThread(st); + } + + return true; +} + +void AnimationComponent::onRemove() +{ + Parent::onRemove(); + + mOwnerRenderInst = NULL; +} + +void AnimationComponent::onComponentAdd() +{ + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = mOwner->getComponent(); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.notify(this, &AnimationComponent::targetShapeChanged); + targetShapeChanged(shapeInstanceInterface); + } +} + +void AnimationComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = dynamic_cast(comp); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.notify(this, &AnimationComponent::targetShapeChanged); + targetShapeChanged(shapeInstanceInterface); + } +} + +void AnimationComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = dynamic_cast(comp); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.remove(this, &AnimationComponent::targetShapeChanged); + mOwnerRenderInst = NULL; + } +} + +void AnimationComponent::targetShapeChanged(RenderComponentInterface* instanceInterface) +{ + mOwnerRenderInst = instanceInterface; + + if (!mOwnerRenderInst || !getShape()) + return; + + MeshComponent* meshComp = dynamic_cast(mOwnerRenderInst); + + mOwnerShapeInstance = meshComp->getShapeInstance(); + + if (!mOwnerShapeInstance) + return; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + + st.thread = mOwnerShapeInstance->addThread(); + } +} + +void AnimationComponent::initPersistFields() +{ + Parent::initPersistFields(); +} + +U32 AnimationComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + //early test if we lack an owner, ghost-wise + //no point in trying, just re-queue the mask and go + if (!mOwner || con->getGhostIndex(mOwner) == -1) + { + stream->writeFlag(false); + return retMask |= ThreadMask; + } + else + { + stream->writeFlag(true); + + for (int i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + if (stream->writeFlag( (st.sequence != -1 || st.state == Thread::Destroy) && (mask & (ThreadMaskN << i)) ) ) + { + stream->writeInt(st.sequence,ThreadSequenceBits); + stream->writeInt(st.state,2); + stream->write(st.timescale); + stream->write(st.position); + stream->writeFlag(st.atEnd); + stream->writeFlag(st.transition); + } + } + } + + return retMask; +} + +void AnimationComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + for (S32 i = 0; i < MaxScriptThreads; i++) + { + if (stream->readFlag()) + { + Thread& st = mAnimationThreads[i]; + U32 seq = stream->readInt(ThreadSequenceBits); + st.state = stream->readInt(2); + stream->read( &st.timescale ); + stream->read( &st.position ); + st.atEnd = stream->readFlag(); + bool transition = stream->readFlag(); + + if (!st.thread || st.sequence != seq && st.state != Thread::Destroy) + setThreadSequence(i, seq, false, transition); + else + updateThread(st); + + } + } + } +} +void AnimationComponent::processTick() +{ + Parent::processTick(); + + if (!isActive()) + return; + + if (isServerObject()) + { + // Server only... + advanceThreads(TickSec); + } +} + +void AnimationComponent::advanceTime(F32 dt) +{ + Parent::advanceTime(dt); + + // On the client, the shape threads and images are + // advanced at framerate. + advanceThreads(dt); +} +// +const char *AnimationComponent::getThreadSequenceName(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence == -1) + { + // Invalid Animation. + return ""; + } + + // Name Index + TSShape* shape = getShape(); + + if (shape) + { + const U32 nameIndex = shape->sequences[st.sequence].nameIndex; + + // Return Name. + return shape->getName(nameIndex); + } + + return ""; +} + +bool AnimationComponent::setThreadSequence(U32 slot, S32 seq, bool reset, bool transition, F32 transTime) +{ + if (!mOwnerShapeInstance) + return false; + + Thread& st = mAnimationThreads[slot]; + if (st.thread && st.sequence == seq && st.state == Thread::Play && !reset) + return true; + + // Handle a -1 sequence, as this may be set when a thread has been destroyed. + if (seq == -1) + return true; + + if (seq < MaxSequenceIndex) + { + setMaskBits(-1); + setMaskBits(ThreadMaskN << slot); + st.sequence = seq; + st.transition = transition; + + if (reset) + { + st.state = Thread::Play; + st.atEnd = false; + st.timescale = 1.f; + st.position = 0.f; + } + + if (mOwnerShapeInstance) + { + if (!st.thread) + st.thread = mOwnerShapeInstance->addThread(); + + if (transition) + { + mOwnerShapeInstance->transitionToSequence(st.thread, seq, st.position, transTime, true); + } + else + { + mOwnerShapeInstance->setSequence(st.thread, seq, 0); + stopThreadSound(st); + } + + updateThread(st); + } + return true; + } + return false; +} + +S32 AnimationComponent::getThreadSequenceID(S32 slot) +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + return mAnimationThreads[slot].sequence; + } + else + { + return -1; + } +} + +void AnimationComponent::updateThread(Thread& st) +{ + if (!mOwnerRenderInst) + return; + + switch (st.state) + { + case Thread::Stop: + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, (st.timescale > 0.f) ? 0.0f : 1.0f); + } // Drop through to pause state + + case Thread::Pause: + { + if (st.position != -1.f) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, st.position); + } + + mOwnerShapeInstance->setTimeScale(st.thread, 0.f); + stopThreadSound(st); + } break; + + case Thread::Play: + { + if (st.atEnd) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1); + mOwnerShapeInstance->setPos(st.thread, (st.timescale > 0.f) ? 1.0f : 0.0f); + mOwnerShapeInstance->setTimeScale(st.thread, 0); + stopThreadSound(st); + st.state = Thread::Stop; + } + else + { + if (st.position != -1.f) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, st.position); + } + + mOwnerShapeInstance->setTimeScale(st.thread, st.timescale); + if (!st.sound) + { + startSequenceSound(st); + } + } + } break; + + case Thread::Destroy: + { + stopThreadSound(st); + st.atEnd = true; + st.sequence = -1; + if (st.thread) + { + mOwnerShapeInstance->destroyThread(st.thread); + st.thread = 0; + } + } break; + } +} + +bool AnimationComponent::stopThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Stop) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Stop; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::destroyThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Destroy) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Destroy; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::pauseThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Pause) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Pause; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::playThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Play) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Play; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::playThread(U32 slot, const char* name, bool transition, F32 transitionTime) +{ + if (slot < AnimationComponent::MaxScriptThreads) + { + if (!dStrEqual(name, "")) + { + if (TSShape* shape = getShape()) + { + S32 seq = shape->findSequence(name); + if (seq != -1 && setThreadSequence(slot, seq, true, transition, transitionTime)) + { + return true; + } + else if (seq == -1) + { + //We tried to play a non-existaint sequence, so stop the thread just in case + destroyThread(slot); + return false; + } + } + } + else + { + if (playThread(slot)) + return true; + } + } + + return false; +} + +bool AnimationComponent::setThreadAnimation(U32 slot, const char* name) +{ + if (slot < AnimationComponent::MaxScriptThreads) + { + if (!dStrEqual(name, "")) + { + if (TSShape* shape = getShape()) + { + S32 seq = shape->findSequence(name); + if (seq != -1 && setThreadSequence(slot, seq, false, false)) + { + Thread& st = mAnimationThreads[slot]; + if (st.position == -1) + st.position = 0; + //st.state = Thread::Pause; + return true; + } + else if (seq == -1) + { + //We tried to play a non-existaint sequence, so stop the thread just in case + destroyThread(slot); + return false; + } + } + } + else + { + if (playThread(slot)) + return true; + } + } + + return false; +} + +bool AnimationComponent::setThreadPosition(U32 slot, F32 pos) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + setMaskBits(ThreadMaskN << slot); + st.position = pos; + st.atEnd = false; + updateThread(st); + + return true; + } + return false; +} + +bool AnimationComponent::setThreadDir(U32 slot, bool forward) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + if ((st.timescale >= 0.f) != forward) + { + setMaskBits(ThreadMaskN << slot); + st.timescale *= -1.f; + st.atEnd = false; + updateThread(st); + } + return true; + } + return false; +} + +bool AnimationComponent::setThreadTimeScale(U32 slot, F32 timeScale) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + if (st.timescale != timeScale) + { + setMaskBits(ThreadMaskN << slot); + st.timescale = timeScale; + updateThread(st); + } + return true; + } + return false; +} + +void AnimationComponent::stopThreadSound(Thread& thread) +{ + return; +} + +void AnimationComponent::startSequenceSound(Thread& thread) +{ + return; +} + +void AnimationComponent::advanceThreads(F32 dt) +{ + if (!mOwnerRenderInst) + return; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + if (st.thread && st.sequence != -1) + { + bool cyclic = getShape()->sequences[st.sequence].isCyclic(); + + if (!getShape()->sequences[st.sequence].isCyclic() && + !st.atEnd && + ((st.timescale > 0.f) ? mOwnerShapeInstance->getPos(st.thread) >= 1.0 : mOwnerShapeInstance->getPos(st.thread) <= 0)) + { + st.atEnd = true; + updateThread(st); + + if (!isGhost()) + { + Con::executef(this, "onAnimationEnd", st.thread->getSequenceName()); + } + } + + // Make sure the thread is still valid after the call to onEndSequence_callback(). + // Someone could have called destroyThread() while in there. + if (st.thread) + { + mOwnerShapeInstance->advanceTime(dt, st.thread); + } + + if (mOwnerShapeInstance && !isGhost()) + { + for (U32 i = 1; i < 32; i++) + { + if (mOwnerShapeInstance->getTriggerState(i)) + { + const char* animName = st.thread->getSequenceName().c_str(); + onAnimationTrigger_callback(this, animName, i); + } + } + } + + if (isGhost()) + mOwnerShapeInstance->animate(); + } + } +} + +TSShape* AnimationComponent::getShape() +{ + if (mOwner == NULL) + return NULL; + + if (mOwnerRenderInst == NULL) + return NULL; + + return mOwnerRenderInst->getShape(); +} + +S32 AnimationComponent::getAnimationCount() +{ + if (getShape()) + return getShape()->sequences.size(); + else + return 0; +} + +S32 AnimationComponent::getAnimationIndex(const char* name) +{ + if (getShape()) + return getShape()->findSequence(name); + else + return -1; +} + +const char* AnimationComponent::getAnimationName(S32 index) +{ + if (getShape()) + { + if (index >= 0 && index < getShape()->sequences.size()) + return getShape()->getName(getShape()->sequences[index].nameIndex); + } + + return ""; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/animation/animationComponent.h b/Engine/source/T3D/components/animation/animationComponent.h new file mode 100644 index 0000000000..f1c01f40c9 --- /dev/null +++ b/Engine/source/T3D/components/animation/animationComponent.h @@ -0,0 +1,138 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef ANIMATION_COMPONENT_H +#define ANIMATION_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShapeInstance.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/components/render/renderComponentInterface.h" +#endif + +class SceneRenderState; + +class AnimationComponent : public Component +{ + typedef Component Parent; +public: + enum PublicConstants { + ThreadSequenceBits = 6, + MaxSequenceIndex = (1 << ThreadSequenceBits) - 1, + MaxScriptThreads = 16, ///< Should be a power of 2 + }; + + enum MaskBits { + ThreadMaskN = Parent::NextFreeMask << 0, + ThreadMask = (ThreadMaskN << MaxScriptThreads) - ThreadMaskN, + NextFreeMask = ThreadMaskN << MaxScriptThreads + }; + +protected: + + struct Thread + { + /// State of the animation thread. + enum State + { + Play, Stop, Pause, Destroy + }; + TSThread* thread; ///< Pointer to 3space data. + U32 state; ///< State of the thread + /// + /// @see Thread::State + S32 sequence; ///< The animation sequence which is running in this thread. + F32 timescale; ///< Timescale + U32 sound; ///< Handle to sound. + bool atEnd; ///< Are we at the end of this thread? + F32 position; + bool transition; + }; + + Thread mAnimationThreads[MaxScriptThreads]; + +protected: + RenderComponentInterface * mOwnerRenderInst; + + TSShapeInstance *mOwnerShapeInstance; + +public: + AnimationComponent(); + virtual ~AnimationComponent(); + DECLARE_CONOBJECT(AnimationComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + TSShape* getShape(); + + void targetShapeChanged(RenderComponentInterface* instanceInterface); + + virtual void processTick(); + virtual void advanceTime(F32 dt); + + const char *getThreadSequenceName(U32 slot); + bool setThreadSequence(U32 slot, S32 seq, bool reset = true, bool transition = true, F32 transitionTime = 0.5); + void updateThread(Thread& st); + bool stopThread(U32 slot); + bool destroyThread(U32 slot); + bool pauseThread(U32 slot); + bool playThread(U32 slot); + bool playThread(U32 slot, const char* name, bool transition, F32 transitionTime); + bool setThreadAnimation(U32 slot, const char* name); + bool setThreadPosition(U32 slot, F32 pos); + bool setThreadDir(U32 slot, bool forward); + bool setThreadTimeScale(U32 slot, F32 timeScale); + void stopThreadSound(Thread& thread); + void startSequenceSound(Thread& thread); + void advanceThreads(F32 dt); + + S32 getThreadSequenceID(S32 slot); + + //other helper functions + S32 getAnimationCount(); + S32 getAnimationIndex(const char* name); + const char* getAnimationName(S32 index); + + //callbacks + DECLARE_CALLBACK(void, onAnimationStart, (Component* obj, const String& animName)); + DECLARE_CALLBACK(void, onAnimationEnd, (Component* obj, const char* animName)); + DECLARE_CALLBACK(void, onAnimationTrigger, (Component* obj, const String& animName, S32 triggerID)); +}; + +#endif //_ANIMATION_COMPONENT_H \ No newline at end of file diff --git a/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h b/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h new file mode 100644 index 0000000000..2d26c5da17 --- /dev/null +++ b/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "T3D/components/animation/animationComponent.h" + +DefineEngineMethod(AnimationComponent, playThread, bool, (S32 slot, const char* name, bool transition, F32 transitionTime), (-1, "", true, 0.5), + "@brief Start a new animation thread, or restart one that has been paused or " + "stopped.\n\n" + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n" + + "@tsexample\n" + "%obj.playThread( 0, \"ambient\" ); // Play the ambient sequence in slot 0\n" + "%obj.setThreadTimeScale( 0, 0.5 ); // Play at half-speed\n" + "%obj.pauseThread( 0 ); // Pause the sequence\n" + "%obj.playThread( 0 ); // Resume playback\n" + "%obj.playThread( 0, \"spin\" ); // Replace the sequence in slot 0\n" + "@endtsexample\n" + + "@see pauseThread()\n" + "@see stopThread()\n" + "@see setThreadDir()\n" + "@see setThreadTimeScale()\n" + "@see destroyThread()\n") +{ + return object->playThread(slot, name, transition, transitionTime); +} + +DefineEngineMethod(AnimationComponent, setThreadDir, bool, (S32 slot, bool fwd), , + "@brief Set the playback direction of an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param fwd true to play the animation forwards, false to play backwards\n" + "@return true if successful, false if failed\n\n" + + "@see playThread()\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadDir(slot, fwd)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadTimeScale, bool, (S32 slot, F32 scale), , + "@brief Set the playback time scale of an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param scale new thread time scale (1=normal speed, 0.5=half speed etc)\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadTimeScale(slot, scale)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadPosition, bool, (S32 slot, F32 pos), , + "@brief Set the position within an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param pos position within thread\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadPosition(slot, pos)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadAnimation, bool, (S32 slot, const char* name), (""), + "@brief Force-sets the animation in a particular thread without starting it playing." + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n") +{ + return object->setThreadAnimation(slot, name); +} + +DefineEngineMethod(AnimationComponent, getThreadAnimation, String, (S32 slot), , + "@brief Force-sets the animation in a particular thread without starting it playing." + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (TSShape* shape = object->getShape()) + { + S32 seq = object->getThreadSequenceID(slot); + if (seq != -1) + { + String animationName = object->getAnimationName(seq); + return animationName; + } + } + } + + return ""; +} + +DefineEngineMethod(AnimationComponent, stopThread, bool, (S32 slot), , + "@brief Stop an animation thread.\n\n" + + "If restarted using playThread, the animation " + "will start from the beginning again.\n" + "@param slot thread slot to stop\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->stopThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, destroyThread, bool, (S32 slot), , + "@brief Destroy an animation thread, which prevents it from playing.\n\n" + + "@param slot thread slot to destroy\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->destroyThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, pauseThread, bool, (S32 slot), , + "@brief Pause an animation thread.\n\n" + + "If restarted using playThread, the animation " + "will resume from the paused position.\n" + "@param slot thread slot to stop\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->pauseThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, getAnimationCount, S32, (), , + "Get the total number of sequences in the shape.\n" + "@return the number of sequences in the shape\n\n") +{ + return object->getAnimationCount(); +} + +DefineEngineMethod(AnimationComponent, getAnimationIndex, S32, (const char* name), , + "Find the index of the sequence with the given name.\n" + "@param name name of the sequence to lookup\n" + "@return index of the sequence with matching name, or -1 if not found\n\n" + "@tsexample\n" + "// Check if a given sequence exists in the shape\n" + "if ( %this.getSequenceIndex( \"walk\" ) == -1 )\n" + " echo( \"Could not find 'walk' sequence\" );\n" + "@endtsexample\n") +{ + return object->getAnimationIndex(name); +} + +DefineEngineMethod(AnimationComponent, getAnimationName, const char*, (S32 index), , + "Get the name of the indexed sequence.\n" + "@param index index of the sequence to query (valid range is 0 - getSequenceCount()-1)\n" + "@return the name of the sequence\n\n" + "@tsexample\n" + "// print the name of all sequences in the shape\n" + "%count = %this.getSequenceCount();\n" + "for ( %i = 0; %i < %count; %i++ )\n" + " echo( %i SPC %this.getSequenceName( %i ) );\n" + "@endtsexample\n") +{ + return object->getAnimationName(index); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/camera/cameraComponent.cpp b/Engine/source/T3D/components/camera/cameraComponent.cpp new file mode 100644 index 0000000000..60c62fb3a8 --- /dev/null +++ b/Engine/source/T3D/components/camera/cameraComponent.cpp @@ -0,0 +1,483 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/camera/cameraComponent.h" +#include "T3D/components/camera/cameraComponent_ScriptBinding.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/gameFunctions.h" +#include "math/mathUtils.h" +#include "T3D/components/render/renderComponentInterface.h" + +IMPLEMENT_CALLBACK( CameraComponent, validateCameraFov, F32, (F32 fov), (fov), + "@brief Called on the server when the client has requested a FOV change.\n\n" + + "When the client requests that its field of view should be changed (because " + "they want to use a sniper scope, for example) this new FOV needs to be validated " + "by the server. This method is called if it exists (it is optional) to validate " + "the requested FOV, and modify it if necessary. This could be as simple as checking " + "that the FOV falls within a correct range, to making sure that the FOV matches the " + "capabilities of the current weapon.\n\n" + + "Following this method, ShapeBase ensures that the given FOV still falls within " + "the datablock's mCameraMinFov and mCameraMaxFov. If that is good enough for your " + "purposes, then you do not need to define the validateCameraFov() callback for " + "your ShapeBase.\n\n" + + "@param fov The FOV that has been requested by the client.\n" + "@return The FOV as validated by the server.\n\n" + + "@see ShapeBaseData\n\n"); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +CameraComponent::CameraComponent() : Component() +{ + mClientScreen = Point2F(1, 1); + + mCameraFov = mCameraDefaultFov = 80; + mCameraMinFov = 5; + mCameraMaxFov = 175; + + mTargetNodeIdx = -1; + + mPosOffset = Point3F(0, 0, 0); + mRotOffset = EulerF(0, 0, 0); + + mTargetNode = ""; + + mUseParentTransform = true; + + mFriendlyName = "Camera(Component)"; +} + +CameraComponent::~CameraComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(CameraComponent); + +bool CameraComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void CameraComponent::onRemove() +{ + Parent::onRemove(); +} + +void CameraComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addProtectedField("FOV", TypeF32, Offset(mCameraFov, CameraComponent), &_setCameraFov, defaultProtectedGetFn, ""); + + addField("MinFOV", TypeF32, Offset(mCameraMinFov, CameraComponent), ""); + + addField("MaxFOV", TypeF32, Offset(mCameraMaxFov, CameraComponent), ""); + + addField("ScreenAspect", TypePoint2I, Offset(mClientScreen, CameraComponent), ""); + + addProtectedField("targetNode", TypeString, Offset(mTargetNode, CameraComponent), &_setNode, defaultProtectedGetFn, ""); + + addProtectedField("positionOffset", TypePoint3F, Offset(mPosOffset, CameraComponent), &_setPosOffset, defaultProtectedGetFn, ""); + + addProtectedField("rotationOffset", TypeRotationF, Offset(mRotOffset, CameraComponent), &_setRotOffset, defaultProtectedGetFn, ""); + + addField("useParentTransform", TypeBool, Offset(mUseParentTransform, CameraComponent), ""); +} + +bool CameraComponent::_setNode(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + mcc->mTargetNode = StringTable->insert(data); + mcc->setMaskBits(OffsetMask); + + return true; +} + +bool CameraComponent::_setPosOffset(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + if (mcc) + { + Point3F pos; + Con::setData(TypePoint3F, &pos, 0, 1, &data); + + mcc->mPosOffset = pos; + mcc->setMaskBits(OffsetMask); + + return true; + } + + return false; +} + +bool CameraComponent::_setRotOffset(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + if (mcc) + { + RotationF rot; + Con::setData(TypeRotationF, &rot, 0, 1, &data); + + mcc->mRotOffset = rot; + mcc->setMaskBits(OffsetMask); + + return true; + } + + return false; +} + +bool CameraComponent::isValidCameraFov(F32 fov) +{ + return((fov >= mCameraMinFov) && (fov <= mCameraMaxFov)); +} + +bool CameraComponent::_setCameraFov(void *object, const char *index, const char *data) +{ + CameraComponent *cCI = static_cast(object); + cCI->setCameraFov(dAtof(data)); + return true; +} + +void CameraComponent::setCameraFov(F32 fov) +{ + mCameraFov = mClampF(fov, mCameraMinFov, mCameraMaxFov); + + if (isClientObject()) + GameSetCameraTargetFov(mCameraFov); + + if (isServerObject()) + setMaskBits(FOVMask); +} + +void CameraComponent::onCameraScopeQuery(NetConnection *cr, CameraScopeQuery * query) +{ + // update the camera query + query->camera = this; + + if(GameConnection * con = dynamic_cast(cr)) + { + // get the fov from the connection (in deg) + F32 fov; + if (con->getControlCameraFov(&fov)) + { + query->fov = mDegToRad(fov/2); + query->sinFov = mSin(query->fov); + query->cosFov = mCos(query->fov); + } + else + { + query->fov = mDegToRad(mCameraFov/2); + query->sinFov = mSin(query->fov); + query->cosFov = mCos(query->fov); + } + } + + // use eye rather than camera transform (good enough and faster) + MatrixF camTransform = mOwner->getTransform(); + camTransform.getColumn(3, &query->pos); + camTransform.getColumn(1, &query->orientation); + + // Get the visible distance. + if (mOwner->getSceneManager() != NULL) + query->visibleDistance = mOwner->getSceneManager()->getVisibleDistance(); +} + +bool CameraComponent::getCameraTransform(F32* pos,MatrixF* mat) +{ + // Returns camera to world space transform + // Handles first person / third person camera position + bool isServer = isServerObject(); + + if (mTargetNodeIdx == -1) + { + if (mUseParentTransform) + { + MatrixF rMat = mOwner->getRenderTransform(); + + rMat.mul(mRotOffset.asMatrixF()); + + mat->set(rMat.toEuler(), rMat.getPosition() + mPosOffset); + } + else + { + mat->set(mRotOffset.asEulerF(), mPosOffset); + } + + return true; + } + else + { + RenderComponentInterface *renderInterface = mOwner->getComponent(); + + if (!renderInterface) + return false; + + if (mUseParentTransform) + { + MatrixF rMat = mOwner->getRenderTransform(); + + Point3F position = rMat.getPosition(); + + RotationF rot = mRotOffset; + + if (mTargetNodeIdx != -1) + { + Point3F nodPos; + MatrixF nodeTrans = renderInterface->getNodeTransform(mTargetNodeIdx); + nodeTrans.getColumn(3, &nodPos); + + // Scale the camera position before applying the transform + const Point3F& scale = mOwner->getScale(); + nodPos.convolve(scale); + + mOwner->getRenderTransform().mulP(nodPos, &position); + + nodeTrans.mul(rMat); + + rot = nodeTrans; + } + + position += mPosOffset; + + MatrixF rotMat = rot.asMatrixF(); + + MatrixF rotOffsetMat = mRotOffset.asMatrixF(); + + rotMat.mul(rotOffsetMat); + + rot = RotationF(rotMat); + + mat->set(rot.asEulerF(), position); + } + else + { + MatrixF rMat = mOwner->getRenderTransform(); + + Point3F position = rMat.getPosition(); + + RotationF rot = mRotOffset; + + if (mTargetNodeIdx != -1) + { + Point3F nodPos; + MatrixF nodeTrans = renderInterface->getNodeTransform(mTargetNodeIdx); + nodeTrans.getColumn(3, &nodPos); + + // Scale the camera position before applying the transform + const Point3F& scale = mOwner->getScale(); + nodPos.convolve(scale); + + position = nodPos; + } + + position += mPosOffset; + + mat->set(rot.asEulerF(), position); + } + + return true; + } +} + +void CameraComponent::getCameraParameters(F32 *min, F32* max, Point3F* off, MatrixF* rot) +{ + *min = 0.2f; + *max = 0.f; + off->set(0, 0, 0); + rot->identity(); +} + +U32 CameraComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retmask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & FOVMask)) + { + stream->write(mCameraFov); + } + + if (stream->writeFlag(mask & OffsetMask)) + { + RenderComponentInterface* renderInterface = getOwner()->getComponent(); + + if (renderInterface && renderInterface->getShape()) + { + S32 nodeIndex = renderInterface->getShape()->findNode(mTargetNode); + + mTargetNodeIdx = nodeIndex; + } + + stream->writeInt(mTargetNodeIdx, 32); + //send offsets here + + stream->writeCompressedPoint(mPosOffset); + stream->writeCompressedPoint(mRotOffset.asEulerF()); + + stream->writeFlag(mUseParentTransform); + } + + return retmask; +} + +void CameraComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + F32 fov; + stream->read(&fov); + setCameraFov(fov); + } + + if(stream->readFlag()) + { + mTargetNodeIdx = stream->readInt(32); + + stream->readCompressedPoint(&mPosOffset); + + EulerF rot; + stream->readCompressedPoint(&rot); + + mRotOffset = RotationF(rot); + + mUseParentTransform = stream->readFlag(); + } +} + +void CameraComponent::setForwardVector(VectorF newForward, VectorF upVector) +{ + MatrixF mat; + F32 pos = 0; + getCameraTransform(&pos, &mat); + + mPosOffset = mat.getPosition(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (upVector != VectorF::Zero) + up = upVector; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + axisY.set(0.0f, 1.0f, 0.0f); + Con::errorf("Entity::setForwardVector() - degenerate forward vector"); + } + else + { + axisY /= mSqrt(lenSq); + } + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + up.set(0.0f, 0.0f, 1.0f); + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - too small"); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - same as forward"); + // i haven't really tested this, but i think it generates something which should be not parallel to the previous vector: + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + mRotOffset = RotationF(mat.toEuler()); + mRotOffset.y = 0; + + setMaskBits(OffsetMask); +} + +void CameraComponent::setPosition(Point3F newPos) +{ + mPosOffset = newPos; + setMaskBits(OffsetMask); +} + +void CameraComponent::setRotation(RotationF newRot) +{ + mRotOffset = newRot; + setMaskBits(OffsetMask); +} + +Frustum CameraComponent::getFrustum() +{ + Frustum visFrustum; + F32 left, right, top, bottom; + F32 aspectRatio = mClientScreen.x / mClientScreen.y; + + visFrustum.set(false, mDegToRad(mCameraFov), aspectRatio, 0.1f, 1000, mOwner->getTransform()); + + return visFrustum; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/camera/cameraComponent.h b/Engine/source/T3D/components/camera/cameraComponent.h new file mode 100644 index 0000000000..9ae7aea99f --- /dev/null +++ b/Engine/source/T3D/components/camera/cameraComponent.h @@ -0,0 +1,159 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CAMERA_COMPONENT_H +#define CAMERA_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif + +class SceneRenderState; +struct CameraScopeQuery; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class CameraComponent : public Component, public CameraInterface +{ + typedef Component Parent; + + F32 mCameraFov; ///< The camera vertical FOV in degrees. + + Point2F mClientScreen; ///< The dimensions of the client's screen. Used to calculate the aspect ratio. + + F32 mCameraDefaultFov; ///< Default vertical FOV in degrees. + F32 mCameraMinFov; ///< Min vertical FOV allowed in degrees. + F32 mCameraMaxFov; ///< Max vertical FOV allowed in degrees. + +protected: + Point3F mPosOffset; + RotationF mRotOffset; + + StringTableEntry mTargetNode; + S32 mTargetNodeIdx; + + bool mUseParentTransform; + + enum + { + FOVMask = Parent::NextFreeMask, + OffsetMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2, + }; + +public: + CameraComponent(); + virtual ~CameraComponent(); + DECLARE_CONOBJECT(CameraComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + static bool _setCameraFov(void *object, const char *index, const char *data); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + static bool _setNode(void *object, const char *index, const char *data); + static bool _setPosOffset(void *object, const char *index, const char *data); + static bool _setRotOffset(void *object, const char *index, const char *data); + + void setRotOffset(RotationF rot) + { + mRotOffset = rot; + setMaskBits(OffsetMask); + } + + RotationF getRotOffset() + { + return mRotOffset; + } + + Point3F getPosOffset() + { + return mPosOffset; + } + + /// Gets the minimum viewing distance, maximum viewing distance, camera offsetand rotation + /// for this object, if the world were to be viewed through its eyes + /// @param min Minimum viewing distance + /// @param max Maximum viewing distance + /// @param offset Offset of the camera from the origin in local space + /// @param rot Rotation matrix + virtual void getCameraParameters(F32 *min, F32* max, Point3F* offset, MatrixF* rot); + + /// Gets the camera to world space transform matrix + /// @todo Find out what pos does + /// @param pos TODO: Find out what this does + /// @param mat Camera transform (out) + virtual bool getCameraTransform(F32* pos, MatrixF* mat); + + /// Returns the vertical field of view in degrees for + /// this object if used as a camera. + virtual F32 getCameraFov() { return mCameraFov; } + + /// Returns the default vertical field of view in degrees + /// if this object is used as a camera. + virtual F32 getDefaultCameraFov() { return mCameraDefaultFov; } + + /// Sets the vertical field of view in degrees for this + /// object if used as a camera. + /// @param yfov The vertical FOV in degrees to test. + virtual void setCameraFov(F32 fov); + + /// Returns true if the vertical FOV in degrees is within + /// allowable parameters of the datablock. + /// @param yfov The vertical FOV in degrees to test. + /// @see ShapeBaseData::cameraMinFov + /// @see ShapeBaseData::cameraMaxFov + virtual bool isValidCameraFov(F32 fov); + /// @} + + virtual Frustum getFrustum(); + + /// Control object scoping + void onCameraScopeQuery(NetConnection *cr, CameraScopeQuery *camInfo); + + void setForwardVector(VectorF newForward, VectorF upVector = VectorF::Zero); + void setPosition(Point3F newPos); + void setRotation(RotationF newRot); + +protected: + DECLARE_CALLBACK(F32, validateCameraFov, (F32 fov)); +}; + +#endif // CAMERA_BEHAVIOR_H diff --git a/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h b/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h new file mode 100644 index 0000000000..2c3f1dbeff --- /dev/null +++ b/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "T3D/components/camera/cameraComponent.h" + +//Basically, this only exists for backwards compatibility for parts of the editors +ConsoleMethod(CameraComponent, getMode, const char*, 2, 2, "() - We get the first behavior of the requested type on our owner object.\n" + "@return (string name) The type of the behavior we're requesting") +{ + return "fly"; +} + +DefineConsoleMethod(CameraComponent, getForwardVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getForwardVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, getRightVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getRightVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, getUpVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getUpVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, setForwardVector, void, (VectorF newForward), (VectorF(0, 0, 0)), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->setForwardVector(newForward); +} + +DefineConsoleMethod(CameraComponent, getWorldPosition, Point3F, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF mat; + object->getCameraTransform(&pos, &mat); + + return mat.getPosition(); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp new file mode 100644 index 0000000000..7e53924d3b --- /dev/null +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/camera/cameraOrbiterComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "math/mathUtils.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +CameraOrbiterComponent::CameraOrbiterComponent() : Component() +{ + mMinOrbitDist = 0.0f; + mMaxOrbitDist = 0.0f; + mCurOrbitDist = 8.0f; + mPosition.set(0.0f, 0.0f, 0.0f); + + mMaxPitchAngle = 70; + mMinPitchAngle = -10; + + mRotation.set(0, 0, 0); + + mCamera = NULL; +} + +CameraOrbiterComponent::~CameraOrbiterComponent() +{ +} + +IMPLEMENT_CO_NETOBJECT_V1(CameraOrbiterComponent); + +bool CameraOrbiterComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +void CameraOrbiterComponent::onRemove() +{ + Parent::onRemove(); +} +void CameraOrbiterComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("orbitDistance", TypeF32, Offset(mCurOrbitDist, CameraOrbiterComponent), "Object world orientation."); + addField("Rotation", TypeRotationF, Offset(mRotation, CameraOrbiterComponent), "Object world orientation."); + addField("maxPitchAngle", TypeF32, Offset(mMaxPitchAngle, CameraOrbiterComponent), "Object world orientation."); + addField("minPitchAngle", TypeF32, Offset(mMinPitchAngle, CameraOrbiterComponent), "Object world orientation."); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void CameraOrbiterComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + CameraComponent *cam = mOwner->getComponent(); + if (cam) + { + mCamera = cam; + } +} + +void CameraOrbiterComponent::onComponentRemove() +{ + Parent::onComponentRemove(); +} + +void CameraOrbiterComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + CameraComponent *camComponent = dynamic_cast(comp); + if (camComponent) + { + mCamera = camComponent; + } +} + +void CameraOrbiterComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + CameraComponent *camComponent = dynamic_cast(comp); + if (camComponent) + { + mCamera = NULL; + } +} + +U32 CameraOrbiterComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void CameraOrbiterComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +void CameraOrbiterComponent::processTick() +{ + Parent::processTick(); + + if (!mOwner) + return; + + if (mCamera) + { + //Clamp our pitch to whatever range we allow, first. + mRotation.x = mClampF(mRotation.x, mDegToRad(mMinPitchAngle), mDegToRad(mMaxPitchAngle)); + + MatrixF ownerTrans = mOwner->getRenderTransform(); + Point3F ownerPos = ownerTrans.getPosition(); + + Point3F pos; + pos.x = mCurOrbitDist * mSin(mRotation.x + M_HALFPI_F) * mCos(-1.0f * (mRotation.z + M_HALFPI_F)); + pos.y = mCurOrbitDist * mSin(mRotation.x + M_HALFPI_F) * mSin(-1.0f * (mRotation.z + M_HALFPI_F)); + pos.z = mCurOrbitDist * mSin(mRotation.x); + + //orient the camera towards the owner + VectorF ownerVec = ownerPos - pos; + ownerVec.normalize(); + + MatrixF xRot, zRot, cameraMatrix; + xRot.set(EulerF(mRotation.x, 0.0f, 0.0f)); + zRot.set(EulerF(0.0f, 0.0f, mRotation.z)); + + cameraMatrix.mul(zRot, xRot); + cameraMatrix.getColumn(1, &ownerVec); + cameraMatrix.setColumn(3, pos - ownerVec * pos); + + RotationF camRot = RotationF(cameraMatrix); + + if (camRot != mCamera->getRotOffset()) + mCamera->setRotation(camRot); + + if (pos != mCamera->getPosOffset()) + mCamera->setPosition(pos); + } +} \ No newline at end of file diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.h b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h new file mode 100644 index 0000000000..2a091e15e2 --- /dev/null +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CAMERA_ORBITER_COMPONENT_H +#define CAMERA_ORBITER_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef CAMERA_COMPONENT_H +#include "T3D/components/camera/cameraComponent.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class CameraOrbiterComponent : public Component +{ + typedef Component Parent; + + F32 mMinOrbitDist; + F32 mMaxOrbitDist; + F32 mCurOrbitDist; + Point3F mPosition; + + F32 mMaxPitchAngle; + F32 mMinPitchAngle; + + RotationF mRotation; + + CameraComponent* mCamera; + +public: + CameraOrbiterComponent(); + virtual ~CameraOrbiterComponent(); + DECLARE_CONOBJECT(CameraOrbiterComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); +}; + +#endif // EXAMPLEBEHAVIOR_H diff --git a/Engine/source/T3D/components/collision/collisionComponent.cpp b/Engine/source/T3D/components/collision/collisionComponent.cpp new file mode 100644 index 0000000000..e680665dcb --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionComponent.cpp @@ -0,0 +1,582 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/collision/collisionComponent.h" +#include "T3D/components/collision/collisionComponent_ScriptBinding.h" +#include "T3D/components/physics/physicsBehavior.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "scene/sceneRenderState.h" +#include "gfx/gfxTransformSaver.h" +#include "gfx/gfxDrawUtil.h" +#include "console/engineAPI.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" +#include "T3D/gameBase/gameConnection.h" +#include "collision/extrudedPolyList.h" +#include "math/mathIO.h" +#include "gfx/sim/debugDraw.h" +#include "collision/concretePolyList.h" + +#include "T3D/trigger.h" +#include "opcode/Opcode.h" +#include "opcode/Ice/IceAABB.h" +#include "opcode/Ice/IcePoint.h" +#include "opcode/OPC_AABBTree.h" +#include "opcode/OPC_AABBCollider.h" + +#include "math/mathUtils.h" +#include "materials/baseMatInstance.h" +#include "collision/vertexPolyList.h" + +extern bool gEditingMission; + +static bool sRenderColliders = false; + +//Docs +ConsoleDocClass(CollisionComponent, + "@brief The Box Collider component uses a box or rectangular convex shape for collisions.\n\n" + + "Colliders are individualized components that are similarly based off the CollisionInterface core.\n" + "They are basically the entire functionality of how Torque handles collisions compacted into a single component.\n" + "A collider will both collide against and be collided with, other entities.\n" + "Individual colliders will offer different shapes. This box collider will generate a box/rectangle convex, \n" + "while the mesh collider will take the owner Entity's rendered shape and do polysoup collision on it, etc.\n\n" + + "The general flow of operations for how collisions happen is thus:\n" + " -When the component is added(or updated) prepCollision() is called.\n" + " This will set up our initial convex shape for usage later.\n\n" + + " -When we update via processTick(), we first test if our entity owner is mobile.\n" + " If our owner isn't mobile(as in, they have no components that provide it a velocity to move)\n" + " then we skip doing our active collision checks. Collisions are checked by the things moving, as\n" + " opposed to being reactionary. If we're moving, we call updateWorkingCollisionSet().\n" + " updateWorkingCollisionSet() estimates our bounding space for our current ticket based on our position and velocity.\n" + " If our bounding space has changed since the last tick, we proceed to call updateWorkingList() on our convex.\n" + " This notifies any object in the bounding space that they may be collided with, so they will call buildConvex().\n" + " buildConvex() will set up our ConvexList with our collision convex info.\n\n" + + " -When the component that is actually causing our movement, such as SimplePhysicsBehavior, updates, it will check collisions.\n" + " It will call checkCollisions() on us. checkCollisions() will first build a bounding shape for our convex, and test\n" + " if we can early out because we won't hit anything based on our starting point, velocity, and tick time.\n" + " If we don't early out, we proceed to call updateCollisions(). This builds an ExtrudePolyList, which is then extruded\n" + " based on our velocity. We then test our extruded polies on our working list of objects we build\n" + " up earlier via updateWorkingCollisionSet. Any collisions that happen here will be added to our mCollisionList.\n" + " Finally, we call handleCollisionList() on our collisionList, which then queues out the colliison notice\n" + " to the object(s) we collided with so they can do callbacks and the like. We also report back on if we did collide\n" + " to the physics component via our bool return in checkCollisions() so it can make the physics react accordingly.\n\n" + + "One interesting point to note is the usage of mBlockColliding.\n" + "This is set so that it dictates the return on checkCollisions(). If set to false, it will ensure checkCollisions()\n" + "will return false, regardless if we actually collided. This is useful, because even if checkCollisions() returns false,\n" + "we still handle the collisions so the callbacks happen. This enables us to apply a collider to an object that doesn't block\n" + "objects, but does have callbacks, so it can act as a trigger, allowing for arbitrarily shaped triggers, as any collider can\n" + "act as a trigger volume(including MeshCollider).\n\n" + + "@tsexample\n" + "new CollisionComponentInstance()\n" + "{\n" + " template = CollisionComponentTemplate;\n" + " colliderSize = \"1 1 2\";\n" + " blockColldingObject = \"1\";\n" + "};\n" + "@endtsexample\n" + + "@see SimplePhysicsBehavior\n" + "@ingroup Collision\n" + "@ingroup Components\n" + ); +//Docs + +///////////////////////////////////////////////////////////////////////// +ImplementEnumType(CollisionMeshMeshType, + "Type of mesh data available in a shape.\n" + "@ingroup gameObjects") +{ CollisionComponent::None, "None", "No mesh data." }, +{ CollisionComponent::Bounds, "Bounds", "Bounding box of the shape." }, +{ CollisionComponent::CollisionMesh, "Collision Mesh", "Specifically desingated \"collision\" meshes." }, +{ CollisionComponent::VisibleMesh, "Visible Mesh", "Rendered mesh polygons." }, +EndImplementEnumType; + +// +CollisionComponent::CollisionComponent() : Component() +{ + mNetFlags.set(Ghostable | ScopeAlways); + + mFriendlyName = "Collision(Component)"; + + mOwnerRenderInterface = NULL; + mOwnerPhysicsInterface = NULL; + + mBlockColliding = true; + + mCollisionType = CollisionMesh; + mLOSType = CollisionMesh; + mDecalType = CollisionMesh; + + colisionMeshPrefix = StringTable->insert("Collision"); + + CollisionMoveMask = (TerrainObjectType | PlayerObjectType | + StaticShapeObjectType | VehicleObjectType | + VehicleBlockerObjectType | DynamicShapeObjectType | StaticObjectType | EntityObjectType | TriggerObjectType); + + mPhysicsRep = NULL; + mPhysicsWorld = NULL; + + mTimeoutList = NULL; +} + +CollisionComponent::~CollisionComponent() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(CollisionComponent); + +void CollisionComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + RenderComponentInterface *renderInterface = mOwner->getComponent(); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.notify(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = renderInterface; + } + + //physicsInterface + PhysicsComponentInterface *physicsInterface = mOwner->getComponent(); + if (!physicsInterface) + { + mPhysicsRep = PHYSICSMGR->createBody(); + } + + prepCollision(); +} + +void CollisionComponent::onComponentRemove() +{ + SAFE_DELETE(mPhysicsRep); + + Parent::onComponentRemove(); +} + +void CollisionComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + RenderComponentInterface *renderInterface = dynamic_cast(comp); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.notify(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = renderInterface; + prepCollision(); + } + + PhysicsComponentInterface *physicsInterface = dynamic_cast(comp); + if (physicsInterface) + { + if (mPhysicsRep) + SAFE_DELETE(mPhysicsRep); + + prepCollision(); + } +} + +void CollisionComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + RenderComponentInterface *renderInterface = dynamic_cast(comp); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.remove(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = NULL; + prepCollision(); + } + + //physicsInterface + PhysicsComponentInterface *physicsInterface = dynamic_cast(comp); + if (physicsInterface) + { + mPhysicsRep = PHYSICSMGR->createBody(); + + prepCollision(); + } +} + +void CollisionComponent::checkDependencies() +{ +} + +void CollisionComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addGroup("Collision"); + + addField("CollisionType", TypeCollisionMeshMeshType, Offset(mCollisionType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("LineOfSightType", TypeCollisionMeshMeshType, Offset(mLOSType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("DecalType", TypeCollisionMeshMeshType, Offset(mDecalType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("CollisionMeshPrefix", TypeString, Offset(colisionMeshPrefix, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("BlockCollisions", TypeBool, Offset(mBlockColliding, CollisionComponent), ""); + + endGroup("Collision"); +} + +void CollisionComponent::inspectPostApply() +{ + // Apply any transformations set in the editor + Parent::inspectPostApply(); + + if (isServerObject()) + { + setMaskBits(ColliderMask); + prepCollision(); + } +} + +U32 CollisionComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & (ColliderMask | InitialUpdateMask))) + { + stream->write((U32)mCollisionType); + stream->writeString(colisionMeshPrefix); + } + + return retMask; +} + +void CollisionComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) // UpdateMask + { + U32 collisionType = CollisionMesh; + + stream->read(&collisionType); + + // Handle it if we have changed CollisionType's + if ((MeshType)collisionType != mCollisionType) + { + mCollisionType = (MeshType)collisionType; + + prepCollision(); + } + + char readBuffer[1024]; + + stream->readString(readBuffer); + colisionMeshPrefix = StringTable->insert(readBuffer); + } +} + +void CollisionComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void CollisionComponent::targetShapeChanged(RenderComponentInterface* instanceInterface) +{ + prepCollision(); +} + +void CollisionComponent::prepCollision() +{ + if (!mOwner) + return; + + // Let the client know that the collision was updated + setMaskBits(ColliderMask); + + mOwner->disableCollision(); + + if ((!PHYSICSMGR || mCollisionType == None) || + (mOwnerRenderInterface == NULL && (mCollisionType == CollisionMesh || mCollisionType == VisibleMesh))) + return; + + PhysicsCollision *colShape = NULL; + + if (mCollisionType == Bounds) + { + MatrixF offset(true); + + if (mOwnerRenderInterface && mOwnerRenderInterface->getShape()) + offset.setPosition(mOwnerRenderInterface->getShape()->center); + + colShape = PHYSICSMGR->createCollision(); + colShape->addBox(mOwner->getObjBox().getExtents() * 0.5f * mOwner->getScale(), offset); + } + else if (mCollisionType == CollisionMesh || (mCollisionType == VisibleMesh /*&& !mOwner->getComponent()*/)) + { + colShape = buildColShapes(); + } + + if (colShape) + { + mPhysicsWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + if (mPhysicsRep) + { + if (mBlockColliding) + mPhysicsRep->init(colShape, 0, 0, mOwner, mPhysicsWorld); + else + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_TRIGGER, mOwner, mPhysicsWorld); + + mPhysicsRep->setTransform(mOwner->getTransform()); + } + } + + mOwner->enableCollision(); + + onCollisionChanged.trigger(colShape); +} + +void CollisionComponent::processTick() +{ + if (!isActive()) + return; + + //ProcessTick is where our collision testing begins! + + //callback if we have a persisting contact + if (mContactInfo.contactObject) + { + if (mContactInfo.contactTimer > 0) + { + if (isMethod("updateContact")) + Con::executef(this, "updateContact"); + + if (mOwner->isMethod("updateContact")) + Con::executef(mOwner, "updateContact"); + } + + ++mContactInfo.contactTimer; + } + else if (mContactInfo.contactTimer != 0) + mContactInfo.clear(); +} + +void CollisionComponent::updatePhysics() +{ + +} + +PhysicsCollision* CollisionComponent::getCollisionData() +{ + if ((!PHYSICSMGR || mCollisionType == None) || mOwnerRenderInterface == NULL) + return NULL; + + PhysicsCollision *colShape = NULL; + if (mCollisionType == Bounds) + { + MatrixF offset(true); + offset.setPosition(mOwnerRenderInterface->getShape()->center); + colShape = PHYSICSMGR->createCollision(); + colShape->addBox(mOwner->getObjBox().getExtents() * 0.5f * mOwner->getScale(), offset); + } + else if (mCollisionType == CollisionMesh || (mCollisionType == VisibleMesh/* && !mOwner->getComponent()*/)) + { + colShape = buildColShapes(); + //colShape = mOwnerShapeInstance->getShape()->buildColShape(mCollisionType == VisibleMesh, mOwner->getScale()); + } + /*else if (mCollisionType == VisibleMesh && !mOwner->getComponent()) + { + //We don't have support for visible mesh collisions with animated meshes currently in the physics abstraction layer + //so we don't generate anything if we're set to use a visible mesh but have an animated mesh component. + colShape = mOwnerShapeInstance->getShape()->buildColShape(mCollisionType == VisibleMesh, mOwner->getScale()); + }*/ + else if (mCollisionType == VisibleMesh/* && mOwner->getComponent()*/) + { + Con::printf("CollisionComponent::updatePhysics: Cannot use visible mesh collisions with an animated mesh!"); + } + + return colShape; +} + +bool CollisionComponent::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + if (!mCollisionType == None) + { + if (mPhysicsWorld) + { + return mPhysicsWorld->castRay(start, end, info, Point3F::Zero); + } + } + + return false; +} + +PhysicsCollision* CollisionComponent::buildColShapes() +{ + PROFILE_SCOPE(CollisionComponent_buildColShapes); + + PhysicsCollision *colShape = NULL; + U32 surfaceKey = 0; + + TSShape* shape = mOwnerRenderInterface->getShape(); + + if (mCollisionType == VisibleMesh) + { + // Here we build triangle collision meshes from the + // visible detail levels. + + // A negative subshape on the detail means we don't have geometry. + const TSShape::Detail &detail = shape->details[0]; + if (detail.subShapeNum < 0) + return NULL; + + // We don't try to optimize the triangles we're given + // and assume the art was created properly for collision. + ConcretePolyList polyList; + polyList.setTransform(&MatrixF::Identity, mOwner->getScale()); + + // Create the collision meshes. + S32 start = shape->subShapeFirstObject[detail.subShapeNum]; + S32 end = start + shape->subShapeNumObjects[detail.subShapeNum]; + for (S32 o = start; o < end; o++) + { + const TSShape::Object &object = shape->objects[o]; + if (detail.objectDetailNum >= object.numMeshes) + continue; + + // No mesh or no verts.... nothing to do. + TSMesh *mesh = shape->meshes[object.startMeshIndex + detail.objectDetailNum]; + if (!mesh || mesh->mNumVerts == 0) + continue; + + // Gather the mesh triangles. + polyList.clear(); + mesh->buildPolyList(0, &polyList, surfaceKey, NULL); + + // Create the collision shape if we haven't already. + if (!colShape) + colShape = PHYSICSMGR->createCollision(); + + // Get the object space mesh transform. + MatrixF localXfm; + shape->getNodeWorldTransform(object.nodeIndex, &localXfm); + + colShape->addTriangleMesh(polyList.mVertexList.address(), + polyList.mVertexList.size(), + polyList.mIndexList.address(), + polyList.mIndexList.size() / 3, + localXfm); + } + + // Return what we built... if anything. + return colShape; + } + else if (mCollisionType == CollisionMesh) + { + + // Scan out the collision hulls... + // + // TODO: We need to support LOS collision for physics. + // + for (U32 i = 0; i < shape->details.size(); i++) + { + const TSShape::Detail &detail = shape->details[i]; + const String &name = shape->names[detail.nameIndex]; + + // Is this a valid collision detail. + if (!dStrStartsWith(name, colisionMeshPrefix) || detail.subShapeNum < 0) + continue; + + // Now go thru the meshes for this detail. + S32 start = shape->subShapeFirstObject[detail.subShapeNum]; + S32 end = start + shape->subShapeNumObjects[detail.subShapeNum]; + if (start >= end) + continue; + + for (S32 o = start; o < end; o++) + { + const TSShape::Object &object = shape->objects[o]; + const String &meshName = shape->names[object.nameIndex]; + + if (object.numMeshes <= detail.objectDetailNum) + continue; + + // No mesh, a flat bounds, or no verts.... nothing to do. + TSMesh *mesh = shape->meshes[object.startMeshIndex + detail.objectDetailNum]; + if (!mesh || mesh->getBounds().isEmpty() || mesh->mNumVerts == 0) + continue; + + // We need the default mesh transform. + MatrixF localXfm; + shape->getNodeWorldTransform(object.nodeIndex, &localXfm); + + // We have some sort of collision shape... so allocate it. + if (!colShape) + colShape = PHYSICSMGR->createCollision(); + + // Any other mesh name we assume as a generic convex hull. + // + // Collect the verts using the vertex polylist which will + // filter out duplicates. This is importaint as the convex + // generators can sometimes fail with duplicate verts. + // + VertexPolyList polyList; + MatrixF meshMat(localXfm); + + Point3F t = meshMat.getPosition(); + t.convolve(mOwner->getScale()); + meshMat.setPosition(t); + + polyList.setTransform(&MatrixF::Identity, mOwner->getScale()); + mesh->buildPolyList(0, &polyList, surfaceKey, NULL); + colShape->addConvex(polyList.getVertexList().address(), + polyList.getVertexList().size(), + meshMat); + } // objects + } // details + } + + return colShape; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/collision/collisionComponent.h b/Engine/source/T3D/components/collision/collisionComponent.h new file mode 100644 index 0000000000..2d1be3098c --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionComponent.h @@ -0,0 +1,208 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COLLISION_COMPONENT_H +#define COLLISION_COMPONENT_H + +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif +#ifndef COLLISION_INTERFACES_H +#include "T3D/components/collision/collisionInterfaces.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/components/render/renderComponentInterface.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/components/physics/physicsComponentInterface.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSWORLD_H_ +#include "T3D/physics/physicsWorld.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +class CollisionComponent; +class PhysicsBody; +class PhysicsWorld; + +class CollisionComponent : public Component, + public CollisionInterface, + public CastRayInterface +{ + typedef Component Parent; +public: + enum MeshType + { + None = 0, ///< No mesh + Bounds = 1, ///< Bounding box of the shape + CollisionMesh = 2, ///< Specifically designated collision meshes + VisibleMesh = 3 ///< Rendered mesh polygons + }; + + PhysicsWorld* mPhysicsWorld; + PhysicsBody* mPhysicsRep; + +protected: + MeshType mCollisionType; + MeshType mDecalType; + MeshType mLOSType; + + Vector mCollisionDetails; + Vector mLOSDetails; + + StringTableEntry colisionMeshPrefix; + + RenderComponentInterface* mOwnerRenderInterface; + + PhysicsComponentInterface* mOwnerPhysicsInterface; + + //only really relevent for the collision mesh type + //if we note an animation component is added, we flag as being animated. + //This way, if we're using collision meshes, we can set it up to update their transforms + //as needed + bool mAnimated; + + enum + { + ColliderMask = Parent::NextFreeMask, + }; + +public: + CollisionComponent(); + virtual ~CollisionComponent(); + DECLARE_CONOBJECT(CollisionComponent); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + virtual void ownerTransformSet(MatrixF *mat); + void targetShapeChanged(RenderComponentInterface* instanceInterface); + + virtual void onComponentRemove(); + virtual void onComponentAdd(); + + virtual void checkDependencies(); + + static void initPersistFields(); + + void inspectPostApply(); + + virtual void processTick(); + + void prepCollision(); + + PhysicsCollision* buildColShapes(); + + void updatePhysics(); + + virtual bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); + + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere){ return false; } + + virtual PhysicsCollision* getCollisionData(); + + //Utility functions, mostly for script + Point3F getContactNormal() { return mContactInfo.contactNormal; } + bool hasContact() + { + if (mContactInfo.contactObject) + return true; + else + return false; + } + S32 getCollisionCount() + { + return mCollisionList.getCount(); + } + + Point3F getCollisionNormal(S32 collisionIndex) + { + if (collisionIndex < 0 || mCollisionList.getCount() < collisionIndex) + return Point3F::Zero; + + return mCollisionList[collisionIndex].normal; + } + + F32 getCollisionAngle(S32 collisionIndex, Point3F upVector) + { + if (collisionIndex < 0 || mCollisionList.getCount() < collisionIndex) + return 0.0f; + + return mRadToDeg(mAcos(mDot(mCollisionList[collisionIndex].normal, upVector))); + } + + S32 getBestCollision(Point3F upVector) + { + S32 bestCollision = -1; + + F32 bestAngle = 360.f; + S32 count = mCollisionList.getCount(); + for (U32 i = 0; i < count; ++i) + { + F32 angle = mRadToDeg(mAcos(mDot(mCollisionList[i].normal, upVector))); + + if (angle < bestAngle) + { + bestCollision = i; + bestAngle = angle; + } + } + + return bestCollision; + } + + F32 getBestCollisionAngle(VectorF upVector) + { + S32 bestCol = getBestCollision(upVector); + + if (bestCol == -1) + return 0; + + return getCollisionAngle(bestCol, upVector); + } +}; + +typedef CollisionComponent::MeshType CollisionMeshMeshType; +DefineEnumType(CollisionMeshMeshType); + +#endif // COLLISION_COMPONENT_H diff --git a/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h b/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h new file mode 100644 index 0000000000..3b8e83d117 --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "T3D/components/collision/collisionComponent.h" +#include "materials/baseMatInstance.h" + +DefineConsoleMethod(CollisionComponent, getNumberOfContacts, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + return object->getCollisionList()->getCount(); +} + +DefineConsoleMethod(CollisionComponent, getBestContact, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactNormal, Point3F, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactNormal; + } + } + + return Point3F::Zero; +} + +DefineConsoleMethod(CollisionComponent, getContactMaterial, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + if (object->getContactInfo()->contactMaterial != NULL) + return object->getContactInfo()->contactMaterial->getMaterial()->getId(); + } + } + + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactObject, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + return object->getContactInfo()->contactObject != NULL ? object->getContactInfo()->contactObject->getId() : 0; + } + + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactPoint, Point3F, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactPoint; + } + } + + return Point3F::Zero; +} + +DefineConsoleMethod(CollisionComponent, getContactTime, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactTimer; + } + } + + return 0; +} + +DefineEngineMethod(CollisionComponent, hasContact, bool, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->hasContact(); +} + +DefineEngineMethod(CollisionComponent, getCollisionCount, S32, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionCount(); +} + +DefineEngineMethod(CollisionComponent, getCollisionNormal, Point3F, (S32 collisionIndex), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionNormal(collisionIndex); +} + +DefineEngineMethod(CollisionComponent, getCollisionAngle, F32, (S32 collisionIndex, VectorF upVector), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionAngle(collisionIndex, upVector); +} + +DefineEngineMethod(CollisionComponent, getBestCollisionAngle, F32, (VectorF upVector), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getBestCollisionAngle(upVector); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/collision/collisionInterfaces.cpp b/Engine/source/T3D/components/collision/collisionInterfaces.cpp new file mode 100644 index 0000000000..c45dbde483 --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionInterfaces.cpp @@ -0,0 +1,258 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/collision/collisionInterfaces.h" +#include "scene/sceneObject.h" +#include "T3D/entity.h" +#include "console/engineAPI.h" +#include "T3D/trigger.h" +#include "materials/baseMatInstance.h" + +void CollisionInterface::handleCollisionList( CollisionList &collisionList, VectorF velocity ) +{ + Collision bestCol; + + mCollisionList = collisionList; + + for (U32 i=0; i < collisionList.getCount(); ++i) + { + Collision& colCheck = collisionList[i]; + + if (colCheck.object) + { + if (colCheck.object->getTypeMask() & PlayerObjectType) + { + handleCollision( colCheck, velocity ); + } + else if (colCheck.object->getTypeMask() & TriggerObjectType) + { + // We've hit it's bounding box, that's close enough for triggers + Trigger* pTrigger = static_cast(colCheck.object); + + Component *comp = dynamic_cast(this); + pTrigger->potentialEnterObject(comp->getOwner()); + } + else if (colCheck.object->getTypeMask() & DynamicShapeObjectType) + { + Con::printf("HIT A GENERICALLY DYNAMIC OBJECT"); + handleCollision(colCheck, velocity); + } + else if(colCheck.object->getTypeMask() & EntityObjectType) + { + Entity* ent = dynamic_cast(colCheck.object); + if (ent) + { + CollisionInterface *colObjectInterface = ent->getComponent(); + if (colObjectInterface) + { + //convert us to our component + Component *thisComp = dynamic_cast(this); + if (thisComp) + { + colObjectInterface->onCollisionSignal.trigger(thisComp->getOwner()); + + //TODO: properly do this + Collision oppositeCol = colCheck; + oppositeCol.object = thisComp->getOwner(); + + colObjectInterface->handleCollision(oppositeCol, velocity); + } + } + } + } + else + { + handleCollision(colCheck, velocity); + } + } + } +} + +void CollisionInterface::handleCollision( Collision &col, VectorF velocity ) +{ + if (col.object && (mContactInfo.contactObject == NULL || + col.object->getId() != mContactInfo.contactObject->getId())) + { + queueCollision(col.object, velocity - col.object->getVelocity()); + + //do the callbacks to script for this collision + Component *comp = dynamic_cast(this); + if (comp->isMethod("onCollision")) + { + S32 matId = col.material != NULL ? col.material->getMaterial()->getId() : 0; + Con::executef(comp, "onCollision", col.object, col.normal, col.point, matId, velocity); + } + + if (comp->getOwner()->isMethod("onCollisionEvent")) + { + S32 matId = col.material != NULL ? col.material->getMaterial()->getId() : 0; + Con::executef(comp->getOwner(), "onCollisionEvent", col.object, col.normal, col.point, matId, velocity); + } + } +} + +void CollisionInterface::handleCollisionNotifyList() +{ + //special handling for any collision components we should notify that a collision happened. + for (U32 i = 0; i < mCollisionNotifyList.size(); ++i) + { + //convert us to our component + Component *thisComp = dynamic_cast(this); + if (thisComp) + { + mCollisionNotifyList[i]->onCollisionSignal.trigger(thisComp->getOwner()); + } + } + + mCollisionNotifyList.clear(); +} + +Chunker sCollisionTimeoutChunker; +CollisionInterface::CollisionTimeout* CollisionInterface::sFreeTimeoutList = 0; + +void CollisionInterface::queueCollision( SceneObject *obj, const VectorF &vec) +{ + // Add object to list of collisions. + SimTime time = Sim::getCurrentTime(); + S32 num = obj->getId(); + + CollisionTimeout** adr = &mTimeoutList; + CollisionTimeout* ptr = mTimeoutList; + while (ptr) + { + if (ptr->objectNumber == num) + { + if (ptr->expireTime < time) + { + ptr->expireTime = time + CollisionTimeoutValue; + ptr->object = obj; + ptr->vector = vec; + } + return; + } + // Recover expired entries + if (ptr->expireTime < time) + { + CollisionTimeout* cur = ptr; + *adr = ptr->next; + ptr = ptr->next; + cur->next = sFreeTimeoutList; + sFreeTimeoutList = cur; + } + else + { + adr = &ptr->next; + ptr = ptr->next; + } + } + + // New entry for the object + if (sFreeTimeoutList != NULL) + { + ptr = sFreeTimeoutList; + sFreeTimeoutList = ptr->next; + ptr->next = NULL; + } + else + { + ptr = sCollisionTimeoutChunker.alloc(); + } + + ptr->object = obj; + ptr->objectNumber = obj->getId(); + ptr->vector = vec; + ptr->expireTime = time + CollisionTimeoutValue; + ptr->next = mTimeoutList; + + mTimeoutList = ptr; +} + +bool CollisionInterface::checkEarlyOut(Point3F start, VectorF velocity, F32 time, Box3F objectBox, Point3F objectScale, + Box3F collisionBox, U32 collisionMask, CollisionWorkingList &colWorkingList) +{ + Point3F end = start + velocity * time; + Point3F distance = end - start; + + Box3F scaledBox = objectBox; + scaledBox.minExtents.convolve(objectScale); + scaledBox.maxExtents.convolve(objectScale); + + if (mFabs(distance.x) < objectBox.len_x() && + mFabs(distance.y) < objectBox.len_y() && + mFabs(distance.z) < objectBox.len_z()) + { + // We can potentially early out of this. If there are no polys in the clipped polylist at our + // end position, then we can bail, and just set start = end; + Box3F wBox = scaledBox; + wBox.minExtents += end; + wBox.maxExtents += end; + + static EarlyOutPolyList eaPolyList; + eaPolyList.clear(); + eaPolyList.mNormal.set(0.0f, 0.0f, 0.0f); + eaPolyList.mPlaneList.clear(); + eaPolyList.mPlaneList.setSize(6); + eaPolyList.mPlaneList[0].set(wBox.minExtents,VectorF(-1.0f, 0.0f, 0.0f)); + eaPolyList.mPlaneList[1].set(wBox.maxExtents,VectorF(0.0f, 1.0f, 0.0f)); + eaPolyList.mPlaneList[2].set(wBox.maxExtents,VectorF(1.0f, 0.0f, 0.0f)); + eaPolyList.mPlaneList[3].set(wBox.minExtents,VectorF(0.0f, -1.0f, 0.0f)); + eaPolyList.mPlaneList[4].set(wBox.minExtents,VectorF(0.0f, 0.0f, -1.0f)); + eaPolyList.mPlaneList[5].set(wBox.maxExtents,VectorF(0.0f, 0.0f, 1.0f)); + + // Build list from convex states here... + CollisionWorkingList& rList = colWorkingList; + CollisionWorkingList* pList = rList.wLink.mNext; + while (pList != &rList) + { + Convex* pConvex = pList->mConvex; + + if (pConvex->getObject()->getTypeMask() & collisionMask) + { + Box3F convexBox = pConvex->getBoundingBox(); + + if (wBox.isOverlapped(convexBox)) + { + // No need to separate out the physical zones here, we want those + // to cause a fallthrough as well... + pConvex->getPolyList(&eaPolyList); + } + } + pList = pList->wLink.mNext; + } + + if (eaPolyList.isEmpty()) + { + return true; + } + } + + return false; +} + + +Collision* CollisionInterface::getCollision(S32 col) +{ + if(col < mCollisionList.getCount() && col >= 0) + return &mCollisionList[col]; + else + return NULL; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/collision/collisionInterfaces.h b/Engine/source/T3D/components/collision/collisionInterfaces.h new file mode 100644 index 0000000000..6592d60155 --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionInterfaces.h @@ -0,0 +1,167 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COLLISION_INTERFACES_H +#define COLLISION_INTERFACES_H + +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _COLLISION_H_ +#include "collision/collision.h" +#endif +#ifndef _EARLYOUTPOLYLIST_H_ +#include "collision/earlyOutPolyList.h" +#endif +#ifndef _SIM_H_ +#include "console/sim.h" +#endif +#ifndef _SCENECONTAINER_H_ +#include "scene/sceneContainer.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif + +struct ContactInfo +{ + bool contacted, move; + SceneObject *contactObject; + VectorF idealContactNormal; + VectorF contactNormal; + Point3F contactPoint; + F32 contactTime; + S32 contactTimer; + BaseMatInstance *contactMaterial; + + void clear() + { + contacted=move=false; + contactObject = NULL; + contactNormal.set(0,0,0); + contactTime = 0.f; + contactTimer = 0; + idealContactNormal.set(0, 0, 1); + contactMaterial = NULL; + } + + ContactInfo() { clear(); } + +}; + +class CollisionInterface// : public Interface +{ +public: + // CollisionTimeout + // This struct lets us track our collisions and estimate when they've have timed out and we'll need to act on it. + struct CollisionTimeout + { + CollisionTimeout* next; + SceneObject* object; + U32 objectNumber; + SimTime expireTime; + VectorF vector; + }; + + Signal< void( SceneObject* ) > onCollisionSignal; + Signal< void( SceneObject* ) > onContactSignal; + +protected: + CollisionTimeout* mTimeoutList; + static CollisionTimeout* sFreeTimeoutList; + + CollisionList mCollisionList; + Vector mCollisionNotifyList; + + ContactInfo mContactInfo; + + Box3F mWorkingQueryBox; + + U32 CollisionMoveMask; + + Convex *mConvexList; + + bool mBlockColliding; + + void handleCollisionNotifyList(); + + void queueCollision( SceneObject *obj, const VectorF &vec); + + /// checkEarlyOut + /// This function lets you trying and early out of any expensive collision checks by using simple extruded poly boxes representing our objects + /// If it returns true, we know we won't hit with the given parameters and can successfully early out. If it returns false, our test case collided + /// and we should do the full collision sim. + bool checkEarlyOut(Point3F start, VectorF velocity, F32 time, Box3F objectBox, Point3F objectScale, + Box3F collisionBox, U32 collisionMask, CollisionWorkingList &colWorkingList); + +public: + /// checkCollisions + // This is our main function for checking if a collision is happening based on the start point, velocity and time + // We do the bulk of the collision checking in here + //virtual bool checkCollisions( const F32 travelTime, Point3F *velocity, Point3F start )=0; + + CollisionList *getCollisionList() { return &mCollisionList; } + + void clearCollisionList() { mCollisionList.clear(); } + + void clearCollisionNotifyList() { mCollisionNotifyList.clear(); } + + Collision *getCollision(S32 col); + + ContactInfo* getContactInfo() { return &mContactInfo; } + + Convex *getConvexList() { return mConvexList; } + + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) = 0; + + enum PublicConstants { + CollisionTimeoutValue = 250 + }; + + bool doesBlockColliding() { return mBlockColliding; } + + /// handleCollisionList + /// This basically takes in a CollisionList and calls handleCollision for each. + void handleCollisionList(CollisionList &collisionList, VectorF velocity); + + /// handleCollision + /// This will take a collision and queue the collision info for the object so that in knows about the collision. + void handleCollision(Collision &col, VectorF velocity); + + virtual PhysicsCollision* getCollisionData() = 0; + + Signal< void(PhysicsCollision* collision) > onCollisionChanged; +}; + +class BuildConvexInterface //: public Interface +{ +public: + virtual void buildConvex(const Box3F& box, Convex* convex)=0; +}; + +class BuildPolyListInterface// : public Interface +{ +public: + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) = 0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/collision/collisionTrigger.cpp b/Engine/source/T3D/components/collision/collisionTrigger.cpp new file mode 100644 index 0000000000..7d1f507066 --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionTrigger.cpp @@ -0,0 +1,619 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "T3D/components/collision/collisionTrigger.h" + +#include "scene/sceneRenderState.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "collision/boxConvex.h" + +#include "core/stream/bitStream.h" +#include "math/mathIO.h" +#include "gfx/gfxTransformSaver.h" +#include "renderInstance/renderPassManager.h" +#include "gfx/gfxDrawUtil.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" + + +bool CollisionTrigger::smRenderCollisionTriggers = false; + +//----------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +//-------------------------------------------------------------------------- + +IMPLEMENT_CO_NETOBJECT_V1(CollisionTrigger); + +ConsoleDocClass(CollisionTrigger, + "@brief A CollisionTrigger is a volume of space that initiates script callbacks " + "when objects pass through the CollisionTrigger.\n\n" + + "CollisionTriggerData provides the callbacks for the CollisionTrigger when an object enters, stays inside " + "or leaves the CollisionTrigger's volume.\n\n" + + "@see CollisionTriggerData\n" + "@ingroup gameObjects\n" + ); + +IMPLEMENT_CALLBACK(CollisionTrigger, onAdd, void, (U32 objectId), (objectId), + "@brief Called when the CollisionTrigger is being created.\n\n" + "@param objectId the object id of the CollisionTrigger being created\n"); + +IMPLEMENT_CALLBACK(CollisionTrigger, onRemove, void, (U32 objectId), (objectId), + "@brief Called just before the CollisionTrigger is deleted.\n\n" + "@param objectId the object id of the CollisionTrigger being deleted\n"); + +CollisionTrigger::CollisionTrigger() +{ + // Don't ghost by default. + mNetFlags.set(Ghostable | ScopeAlways); + + mTypeMask |= TriggerObjectType; + + mObjScale.set(1, 1, 1); + mObjToWorld.identity(); + mWorldToObj.identity(); + + mLastThink = 0; + mCurrTick = 0; + + mConvexList = new Convex; + + mPhysicsRep = NULL; +} + +CollisionTrigger::~CollisionTrigger() +{ + delete mConvexList; + mConvexList = NULL; + SAFE_DELETE(mPhysicsRep); +} + +bool CollisionTrigger::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + // Collide against bounding box + F32 st, et, fst = 0, fet = 1; + F32 *bmin = &mObjBox.minExtents.x; + F32 *bmax = &mObjBox.maxExtents.x; + F32 const *si = &start.x; + F32 const *ei = &end.x; + + for (S32 i = 0; i < 3; i++) + { + if (*si < *ei) + { + if (*si > *bmax || *ei < *bmin) + return false; + F32 di = *ei - *si; + st = (*si < *bmin) ? (*bmin - *si) / di : 0; + et = (*ei > *bmax) ? (*bmax - *si) / di : 1; + } + else + { + if (*ei > *bmax || *si < *bmin) + return false; + F32 di = *ei - *si; + st = (*si > *bmax) ? (*bmax - *si) / di : 0; + et = (*ei < *bmin) ? (*bmin - *si) / di : 1; + } + if (st > fst) fst = st; + if (et < fet) fet = et; + if (fet < fst) + return false; + bmin++; bmax++; + si++; ei++; + } + + info->normal = start - end; + info->normal.normalizeSafe(); + getTransform().mulV(info->normal); + + info->t = fst; + info->object = this; + info->point.interpolate(start, end, fst); + info->material = 0; + return true; +} + +//----------------------------------------------------------------------------- +void CollisionTrigger::consoleInit() +{ + Con::addVariable("$CollisionTrigger::renderCollisionTriggers", TypeBool, &smRenderCollisionTriggers, + "@brief Forces all CollisionTrigger's to render.\n\n" + "Used by the Tools and debug render modes.\n" + "@ingroup gameObjects"); +} + +void CollisionTrigger::initPersistFields() +{ + addField("polyhedron", TypeTriggerPolyhedron, Offset(mCollisionTriggerPolyhedron, CollisionTrigger), + "@brief Defines a non-rectangular area for the CollisionTrigger.\n\n" + "Rather than the standard rectangular bounds, this optional parameter defines a quadrilateral " + "CollisionTrigger area. The quadrilateral is defined as a corner point followed by three vectors " + "representing the edges extending from the corner.\n"); + + addProtectedField("enterCommand", TypeCommand, Offset(mEnterCommand, CollisionTrigger), &setEnterCmd, &defaultProtectedGetFn, + "The command to execute when an object enters this CollisionTrigger. Object id stored in %%obj. Maximum 1023 characters."); + addProtectedField("leaveCommand", TypeCommand, Offset(mLeaveCommand, CollisionTrigger), &setLeaveCmd, &defaultProtectedGetFn, + "The command to execute when an object leaves this CollisionTrigger. Object id stored in %%obj. Maximum 1023 characters."); + addProtectedField("tickCommand", TypeCommand, Offset(mTickCommand, CollisionTrigger), &setTickCmd, &defaultProtectedGetFn, + "The command to execute while an object is inside this CollisionTrigger. Maximum 1023 characters."); + + Parent::initPersistFields(); +} + +bool CollisionTrigger::setEnterCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(EnterCmdMask); + return true; // to update the actual field +} + +bool CollisionTrigger::setLeaveCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(LeaveCmdMask); + return true; // to update the actual field +} + +bool CollisionTrigger::setTickCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(TickCmdMask); + return true; // to update the actual field +} + +//-------------------------------------------------------------------------- + +bool CollisionTrigger::onAdd() +{ + if (!Parent::onAdd()) + return false; + + onAdd_callback(getId()); + + Polyhedron temp = mCollisionTriggerPolyhedron; + setTriggerPolyhedron(temp); + + addToScene(); + + if (isServerObject()) + scriptOnAdd(); + + return true; +} + +void CollisionTrigger::onRemove() +{ + onRemove_callback(getId()); + + mConvexList->nukeList(); + + removeFromScene(); + Parent::onRemove(); +} + +bool CollisionTrigger::onNewDataBlock(GameBaseData *dptr, bool reload) +{ + return true; +} + +void CollisionTrigger::onDeleteNotify(SimObject *obj) +{ + GameBase* pScene = dynamic_cast(obj); + + if (pScene != NULL) + { + for (U32 i = 0; i < mObjects.size(); i++) + { + if (pScene == mObjects[i]) + { + mObjects.erase(i); + //onLeaveCollisionTrigger_callback(this, pScene); + break; + } + } + } + + Parent::onDeleteNotify(obj); +} + +void CollisionTrigger::inspectPostApply() +{ + setTriggerPolyhedron(mCollisionTriggerPolyhedron); + setMaskBits(PolyMask); + Parent::inspectPostApply(); +} + +//-------------------------------------------------------------------------- + +void CollisionTrigger::buildConvex(const Box3F& box, Convex* convex) +{ + // These should really come out of a pool + mConvexList->collectGarbage(); + + Box3F realBox = box; + mWorldToObj.mul(realBox); + realBox.minExtents.convolveInverse(mObjScale); + realBox.maxExtents.convolveInverse(mObjScale); + + if (realBox.isOverlapped(getObjBox()) == false) + return; + + // Just return a box convex for the entire shape... + Convex* cc = 0; + CollisionWorkingList& wl = convex->getWorkingList(); + for (CollisionWorkingList* itr = wl.wLink.mNext; itr != &wl; itr = itr->wLink.mNext) { + if (itr->mConvex->getType() == BoxConvexType && + itr->mConvex->getObject() == this) { + cc = itr->mConvex; + break; + } + } + if (cc) + return; + + // Create a new convex. + BoxConvex* cp = new BoxConvex; + mConvexList->registerObject(cp); + convex->addToWorkingList(cp); + cp->init(this); + + mObjBox.getCenter(&cp->mCenter); + cp->mSize.x = mObjBox.len_x() / 2.0f; + cp->mSize.y = mObjBox.len_y() / 2.0f; + cp->mSize.z = mObjBox.len_z() / 2.0f; +} + + +//------------------------------------------------------------------------------ + +void CollisionTrigger::setTransform(const MatrixF & mat) +{ + Parent::setTransform(mat); + + if (mPhysicsRep) + mPhysicsRep->setTransform(mat); + + if (isServerObject()) { + MatrixF base(true); + base.scale(Point3F(1.0 / mObjScale.x, + 1.0 / mObjScale.y, + 1.0 / mObjScale.z)); + base.mul(mWorldToObj); + mClippedList.setBaseTransform(base); + + setMaskBits(TransformMask | ScaleMask); + } +} + +void CollisionTrigger::prepRenderImage(SceneRenderState *state) +{ + // only render if selected or render flag is set + if (!smRenderCollisionTriggers && !isSelected()) + return; + + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &CollisionTrigger::renderObject); + ri->type = RenderPassManager::RIT_Editor; + ri->translucentSort = true; + ri->defaultKey = 1; + state->getRenderPass()->addInst(ri); +} + +void CollisionTrigger::renderObject(ObjectRenderInst *ri, + SceneRenderState *state, + BaseMatInstance *overrideMat) +{ + if (overrideMat) + return; + + GFXStateBlockDesc desc; + desc.setZReadWrite(true, false); + desc.setBlend(true); + + // CollisionTrigger polyhedrons are set up with outward facing normals and CCW ordering + // so can't enable backface culling. + desc.setCullMode(GFXCullNone); + + GFXTransformSaver saver; + + MatrixF mat = getRenderTransform(); + mat.scale(getScale()); + + GFX->multWorld(mat); + + GFXDrawUtil *drawer = GFX->getDrawUtil(); + + drawer->drawPolyhedron(desc, mCollisionTriggerPolyhedron, ColorI(255, 192, 0, 45)); + + // Render wireframe. + + desc.setFillModeWireframe(); + drawer->drawPolyhedron(desc, mCollisionTriggerPolyhedron, ColorI::BLACK); +} + +void CollisionTrigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron) +{ + mCollisionTriggerPolyhedron = rPolyhedron; + + if (mCollisionTriggerPolyhedron.pointList.size() != 0) { + mObjBox.minExtents.set(1e10, 1e10, 1e10); + mObjBox.maxExtents.set(-1e10, -1e10, -1e10); + for (U32 i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++) { + mObjBox.minExtents.setMin(mCollisionTriggerPolyhedron.pointList[i]); + mObjBox.maxExtents.setMax(mCollisionTriggerPolyhedron.pointList[i]); + } + } + else { + mObjBox.minExtents.set(-0.5, -0.5, -0.5); + mObjBox.maxExtents.set(0.5, 0.5, 0.5); + } + + MatrixF xform = getTransform(); + setTransform(xform); + + mClippedList.clear(); + mClippedList.mPlaneList = mCollisionTriggerPolyhedron.planeList; + // for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++) + // mClippedList.mPlaneList[i].neg(); + + MatrixF base(true); + base.scale(Point3F(1.0 / mObjScale.x, + 1.0 / mObjScale.y, + 1.0 / mObjScale.z)); + base.mul(mWorldToObj); + + mClippedList.setBaseTransform(base); + + SAFE_DELETE(mPhysicsRep); + + if (PHYSICSMGR) + { + PhysicsCollision *colShape = PHYSICSMGR->createCollision(); + + MatrixF colMat(true); + colMat.displace(Point3F(0, 0, mObjBox.getExtents().z * 0.5f * mObjScale.z)); + + colShape->addBox(mObjBox.getExtents() * 0.5f * mObjScale, colMat); + //MatrixF colMat( true ); + //colMat.scale( mObjScale ); + //colShape->addConvex( mCollisionTriggerPolyhedron.pointList.address(), mCollisionTriggerPolyhedron.pointList.size(), colMat ); + + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_TRIGGER | PhysicsBody::BF_KINEMATIC, this, world); + mPhysicsRep->setTransform(getTransform()); + } +} + + +//-------------------------------------------------------------------------- + +bool CollisionTrigger::testObject(GameBase* enter) +{ + if (mCollisionTriggerPolyhedron.pointList.size() == 0) + return false; + + mClippedList.clear(); + + SphereF sphere; + sphere.center = (mWorldBox.minExtents + mWorldBox.maxExtents) * 0.5; + VectorF bv = mWorldBox.maxExtents - sphere.center; + sphere.radius = bv.len(); + + enter->buildPolyList(PLC_Collision, &mClippedList, mWorldBox, sphere); + return mClippedList.isEmpty() == false; +} + + +void CollisionTrigger::potentialEnterObject(GameBase* enter) +{ + for (U32 i = 0; i < mObjects.size(); i++) { + if (mObjects[i] == enter) + return; + } + + if (testObject(enter) == true) { + mObjects.push_back(enter); + deleteNotify(enter); + + if (!mEnterCommand.isEmpty()) + { + String command = String("%obj = ") + enter->getIdString() + ";" + mEnterCommand; + Con::evaluate(command.c_str()); + } + + //onEnterCollisionTrigger_callback(this, enter); + } +} + + +void CollisionTrigger::processTick(const Move* move) +{ + Parent::processTick(move); + + // + if (mObjects.size() == 0) + return; + + if (mLastThink + 100 < mCurrTick) + { + mCurrTick = 0; + mLastThink = 0; + + for (S32 i = S32(mObjects.size() - 1); i >= 0; i--) + { + if (testObject(mObjects[i]) == false) + { + GameBase* remove = mObjects[i]; + mObjects.erase(i); + clearNotify(remove); + + if (!mLeaveCommand.isEmpty()) + { + String command = String("%obj = ") + remove->getIdString() + ";" + mLeaveCommand; + Con::evaluate(command.c_str()); + } + + //onLeaveCollisionTrigger_callback(this, remove); + } + } + + if (!mTickCommand.isEmpty()) + Con::evaluate(mTickCommand.c_str()); + + //if (mObjects.size() != 0) + // onTickCollisionTrigger_callback(this); + } + else + { + mCurrTick += TickMs; + } +} + +//-------------------------------------------------------------------------- + +U32 CollisionTrigger::packUpdate(NetConnection* con, U32 mask, BitStream* stream) +{ + U32 i; + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & TransformMask)) + { + stream->writeAffineTransform(mObjToWorld); + } + + // Write the polyhedron + if (stream->writeFlag(mask & PolyMask)) + { + stream->write(mCollisionTriggerPolyhedron.pointList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++) + mathWrite(*stream, mCollisionTriggerPolyhedron.pointList[i]); + + stream->write(mCollisionTriggerPolyhedron.planeList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.planeList.size(); i++) + mathWrite(*stream, mCollisionTriggerPolyhedron.planeList[i]); + + stream->write(mCollisionTriggerPolyhedron.edgeList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.edgeList.size(); i++) { + const Polyhedron::Edge& rEdge = mCollisionTriggerPolyhedron.edgeList[i]; + + stream->write(rEdge.face[0]); + stream->write(rEdge.face[1]); + stream->write(rEdge.vertex[0]); + stream->write(rEdge.vertex[1]); + } + } + + if (stream->writeFlag(mask & EnterCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mEnterCommand.c_str()); + if (stream->writeFlag(mask & LeaveCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mLeaveCommand.c_str()); + if (stream->writeFlag(mask & TickCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mTickCommand.c_str()); + + return retMask; +} + +void CollisionTrigger::unpackUpdate(NetConnection* con, BitStream* stream) +{ + Parent::unpackUpdate(con, stream); + + U32 i, size; + + // Transform + if (stream->readFlag()) + { + MatrixF temp; + stream->readAffineTransform(&temp); + setTransform(temp); + } + + // Read the polyhedron + if (stream->readFlag()) + { + Polyhedron tempPH; + stream->read(&size); + tempPH.pointList.setSize(size); + for (i = 0; i < tempPH.pointList.size(); i++) + mathRead(*stream, &tempPH.pointList[i]); + + stream->read(&size); + tempPH.planeList.setSize(size); + for (i = 0; i < tempPH.planeList.size(); i++) + mathRead(*stream, &tempPH.planeList[i]); + + stream->read(&size); + tempPH.edgeList.setSize(size); + for (i = 0; i < tempPH.edgeList.size(); i++) { + Polyhedron::Edge& rEdge = tempPH.edgeList[i]; + + stream->read(&rEdge.face[0]); + stream->read(&rEdge.face[1]); + stream->read(&rEdge.vertex[0]); + stream->read(&rEdge.vertex[1]); + } + setTriggerPolyhedron(tempPH); + } + + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mEnterCommand = buf; + } + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mLeaveCommand = buf; + } + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mTickCommand = buf; + } +} + +//ConsoleMethod( CollisionTrigger, getNumObjects, S32, 2, 2, "") +DefineEngineMethod(CollisionTrigger, getNumObjects, S32, (), , + "@brief Get the number of objects that are within the CollisionTrigger's bounds.\n\n" + "@see getObject()\n") +{ + return object->getNumCollisionTriggeringObjects(); +} + +//ConsoleMethod( CollisionTrigger, getObject, S32, 3, 3, "(int idx)") +DefineEngineMethod(CollisionTrigger, getObject, S32, (S32 index), , + "@brief Retrieve the requested object that is within the CollisionTrigger's bounds.\n\n" + "@param index Index of the object to get (range is 0 to getNumObjects()-1)\n" + "@returns The SimObjectID of the object, or -1 if the requested index is invalid.\n" + "@see getNumObjects()\n") +{ + if (index >= object->getNumCollisionTriggeringObjects() || index < 0) + return -1; + else + return object->getObject(U32(index))->getId(); +} diff --git a/Engine/source/T3D/components/collision/collisionTrigger.h b/Engine/source/T3D/components/collision/collisionTrigger.h new file mode 100644 index 0000000000..5673d61625 --- /dev/null +++ b/Engine/source/T3D/components/collision/collisionTrigger.h @@ -0,0 +1,145 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _H_CollisionTrigger +#define _H_CollisionTrigger + +#ifndef _GAMEBASE_H_ +#include "T3D/gameBase/gameBase.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef _EARLYOUTPOLYLIST_H_ +#include "collision/earlyOutPolyList.h" +#endif +#ifndef _MPOLYHEDRON_H_ +#include "math/mPolyhedron.h" +#endif +#ifndef _TRIGGER_H_ +#include "T3D/trigger.h" +#endif + +class Convex; +class PhysicsBody; +class TriggerPolyhedronType; + +class CollisionTrigger : public GameBase +{ + typedef GameBase Parent; + + /// CollisionTrigger polyhedron with *outward* facing normals and CCW ordered + /// vertices. + Polyhedron mCollisionTriggerPolyhedron; + + EarlyOutPolyList mClippedList; + Vector mObjects; + + PhysicsBody *mPhysicsRep; + + U32 mLastThink; + U32 mCurrTick; + Convex *mConvexList; + + String mEnterCommand; + String mLeaveCommand; + String mTickCommand; + + enum CollisionTriggerUpdateBits + { + TransformMask = Parent::NextFreeMask << 0, + PolyMask = Parent::NextFreeMask << 1, + EnterCmdMask = Parent::NextFreeMask << 2, + LeaveCmdMask = Parent::NextFreeMask << 3, + TickCmdMask = Parent::NextFreeMask << 4, + NextFreeMask = Parent::NextFreeMask << 5, + }; + + static const U32 CMD_SIZE = 1024; + +protected: + + static bool smRenderCollisionTriggers; + bool testObject(GameBase* enter); + void processTick(const Move *move); + + void buildConvex(const Box3F& box, Convex* convex); + + static bool setEnterCmd(void *object, const char *index, const char *data); + static bool setLeaveCmd(void *object, const char *index, const char *data); + static bool setTickCmd(void *object, const char *index, const char *data); + +public: + CollisionTrigger(); + ~CollisionTrigger(); + + // SimObject + DECLARE_CONOBJECT(CollisionTrigger); + + DECLARE_CALLBACK(void, onAdd, (U32 objectId)); + DECLARE_CALLBACK(void, onRemove, (U32 objectId)); + + static void consoleInit(); + static void initPersistFields(); + bool onAdd(); + void onRemove(); + void onDeleteNotify(SimObject*); + void inspectPostApply(); + + // NetObject + U32 packUpdate(NetConnection *conn, U32 mask, BitStream* stream); + void unpackUpdate(NetConnection *conn, BitStream* stream); + + // SceneObject + void setTransform(const MatrixF &mat); + void prepRenderImage(SceneRenderState* state); + + // GameBase + bool onNewDataBlock(GameBaseData *dptr, bool reload); + + // CollisionTrigger + void setTriggerPolyhedron(const Polyhedron&); + + void potentialEnterObject(GameBase*); + U32 getNumCollisionTriggeringObjects() const; + GameBase* getObject(const U32); + const Vector& getObjects() const { return mObjects; } + + void renderObject(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + + bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); +}; + +inline U32 CollisionTrigger::getNumCollisionTriggeringObjects() const +{ + return mObjects.size(); +} + +inline GameBase* CollisionTrigger::getObject(const U32 index) +{ + AssertFatal(index < getNumCollisionTriggeringObjects(), "Error, out of range object index"); + + return mObjects[index]; +} + +#endif // _H_CollisionTrigger + diff --git a/Engine/source/T3D/components/component.cpp b/Engine/source/T3D/components/component.cpp new file mode 100644 index 0000000000..47784d4b24 --- /dev/null +++ b/Engine/source/T3D/components/component.cpp @@ -0,0 +1,640 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "console/simBase.h" +#include "console/consoleTypes.h" +#include "T3D/components/component.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "console/consoleInternal.h" + +#define DECLARE_NATIVE_COMPONENT( ComponentType ) \ + Component* staticComponentTemplate = new ComponentType; \ + Sim::gNativeComponentSet->addObject(staticComponentTemplate); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +Component::Component() +{ + mFriendlyName = StringTable->lookup(""); + mFromResource = StringTable->lookup(""); + mComponentType = StringTable->lookup(""); + mComponentGroup = StringTable->lookup(""); + mNetworkType = StringTable->lookup(""); + mTemplateName = StringTable->lookup(""); + //mDependency = StringTable->lookup(""); + + mNetworked = false; + + + // [tom, 1/12/2007] We manage the memory for the description since it + // could be loaded from a file and thus massive. This is accomplished with + // protected fields, but since they still call Con::getData() the field + // needs to always be valid. This is pretty lame. + mDescription = new char[1]; + ((char *)mDescription)[0] = 0; + + mOwner = NULL; + + mCanSaveFieldDictionary = false; + + mNetFlags.set(Ghostable); +} + +Component::~Component() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(Component); + +////////////////////////////////////////////////////////////////////////// + +void Component::initPersistFields() +{ + addGroup("Component"); + addField("componentType", TypeCaseString, Offset(mComponentType, Component), "The type of behavior.", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addField("networkType", TypeCaseString, Offset(mNetworkType, Component), "The type of behavior.", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addField("friendlyName", TypeCaseString, Offset(mFriendlyName, Component), "Human friendly name of this behavior", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addProtectedField("description", TypeCaseString, Offset(mDescription, Component), &setDescription, &getDescription, + "The description of this behavior which can be set to a \"string\" or a fileName\n", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + addField("networked", TypeBool, Offset(mNetworked, Component), "Is this behavior ghosted to clients?", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + addProtectedField("Owner", TypeSimObjectPtr, Offset(mOwner, Component), &setOwner, &defaultProtectedGetFn, "", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + //addField("hidden", TypeBool, Offset(mHidden, Component), "Flags if this behavior is shown in the editor or not", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addProtectedField("enabled", TypeBool, Offset(mEnabled, Component), &_setEnabled, &defaultProtectedGetFn, ""); + endGroup("Component"); + + Parent::initPersistFields(); + + //clear out irrelevent fields + removeField("name"); + //removeField("internalName"); + removeField("parentGroup"); + //removeField("class"); + removeField("superClass"); + removeField("hidden"); + removeField("canSave"); + removeField("canSaveDynamicFields"); + removeField("persistentId"); +} + +bool Component::_setEnabled(void *object, const char *index, const char *data) +{ + Component *c = static_cast(object); + + c->mEnabled = dAtob(data); + c->setMaskBits(EnableMask); + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +bool Component::setDescription(void *object, const char *index, const char *data) +{ + Component *bT = static_cast(object); + SAFE_DELETE_ARRAY(bT->mDescription); + bT->mDescription = bT->getDescriptionText(data); + + // We return false since we don't want the console to mess with the data + return false; +} + +const char * Component::getDescription(void* obj, const char* data) +{ + Component *object = static_cast(obj); + + return object->mDescription ? object->mDescription : ""; +} + +////////////////////////////////////////////////////////////////////////// +bool Component::onAdd() +{ + if (!Parent::onAdd()) + return false; + + setMaskBits(UpdateMask); + + return true; +} + +void Component::onRemove() +{ + onDataSet.removeAll(); + + if (mOwner) + { + //notify our removal to the owner, so we have no loose ends + mOwner->removeComponent(this, false); + } + + Parent::onRemove(); +} + +void Component::onComponentAdd() +{ + if (isServerObject()) + { + if (isMethod("onAdd")) + Con::executef(this, "onAdd"); + } + + mEnabled = true; +} + +void Component::onComponentRemove() +{ + mEnabled = false; + + if (isServerObject()) + { + if (isMethod("onRemove")) + Con::executef(this, "onRemove"); + } + + if (mOwner) + { + mOwner->onComponentAdded.remove(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.remove(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.remove(this, &Component::ownerTransformSet); + } + + mOwner = NULL; + setDataField("owner", NULL, ""); +} + +void Component::setOwner(Entity* owner) +{ + //first, catch if we have an existing owner, and we're changing from it + if (mOwner && mOwner != owner) + { + mOwner->onComponentAdded.remove(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.remove(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.remove(this, &Component::ownerTransformSet); + + mOwner->removeComponent(this, false); + } + + mOwner = owner; + + if (mOwner != NULL) + { + mOwner->onComponentAdded.notify(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.notify(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.notify(this, &Component::ownerTransformSet); + } + + if (isServerObject()) + setMaskBits(OwnerMask); +} + +void Component::componentAddedToOwner(Component *comp) +{ + return; +} + +void Component::componentRemovedFromOwner(Component *comp) +{ + return; +} + +void Component::ownerTransformSet(MatrixF *mat) +{ + return; +} + +U32 Component::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (mask & OwnerMask) + { + if (mOwner != NULL) + { + S32 ghostIndex = con->getGhostIndex(mOwner); + + if (ghostIndex == -1) + { + stream->writeFlag(false); + retMask |= OwnerMask; + } + else + { + stream->writeFlag(true); + stream->writeFlag(true); + stream->writeInt(ghostIndex, NetConnection::GhostIdBitSize); + } + } + else + { + stream->writeFlag(true); + stream->writeFlag(false); + } + } + else + stream->writeFlag(false); + + if (stream->writeFlag(mask & EnableMask)) + { + stream->writeFlag(mEnabled); + } + + return retMask; +} + +void Component::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + if (stream->readFlag()) + { + //we have an owner object, so fetch it + S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); + + Entity *e = dynamic_cast(con->resolveGhost(gIndex)); + if (e) + e->addComponent(this); + } + else + { + //it's being nulled out + setOwner(NULL); + } + } + + if (stream->readFlag()) + { + mEnabled = stream->readFlag(); + } +} + +void Component::packToStream(Stream &stream, U32 tabStop, S32 behaviorID, U32 flags /* = 0 */) +{ + char buffer[1024]; + + writeFields(stream, tabStop); + + // Write out the fields which the behavior template knows about + for (int i = 0; i < getComponentFieldCount(); i++) + { + ComponentField *field = getComponentField(i); + const char *objFieldValue = getDataField(field->mFieldName, NULL); + + // If the field holds the same value as the template's default value than it + // will get initialized by the template, and so it won't be included just + // to try to keep the object files looking as non-horrible as possible. + if (dStrcmp(field->mDefaultValue, objFieldValue) != 0) + { + dSprintf(buffer, sizeof(buffer), "%s = \"%s\";\n", field->mFieldName, (dStrlen(objFieldValue) > 0 ? objFieldValue : "0")); + + stream.writeTabs(tabStop); + stream.write(dStrlen(buffer), buffer); + } + } +} + +void Component::processTick() +{ + if (isServerObject() && mEnabled) + { + if (mOwner != NULL && isMethod("Update")) + Con::executef(this, "Update"); + } +} + +void Component::setDataField(StringTableEntry slotName, const char *array, const char *value) +{ + Parent::setDataField(slotName, array, value); + + onDataSet.trigger(this, slotName, value); +} + + +//catch any behavior field updates +void Component::onStaticModified(const char* slotName, const char* newValue) +{ + Parent::onStaticModified(slotName, newValue); + + //If we don't have an owner yet, then this is probably the initial setup, so we don't need the console callbacks yet. + if (!mOwner) + return; + + onDataSet.trigger(this, slotName, newValue); + + checkComponentFieldModified(slotName, newValue); +} + +void Component::onDynamicModified(const char* slotName, const char* newValue) +{ + Parent::onDynamicModified(slotName, newValue); + + //If we don't have an owner yet, then this is probably the initial setup, so we don't need the console callbacks yet. + if (!mOwner) + return; + + checkComponentFieldModified(slotName, newValue); +} + +void Component::checkComponentFieldModified(const char* slotName, const char* newValue) +{ + StringTableEntry slotNameEntry = StringTable->insert(slotName); + + //find if it's a behavior field + for (int i = 0; i < mFields.size(); i++) + { + ComponentField *field = getComponentField(i); + if (field->mFieldName == slotNameEntry) + { + //we have a match, do the script callback that we updated a field + if (isMethod("onInspectorUpdate")) + Con::executef(this, "onInspectorUpdate", slotName); + + return; + } + } +} +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +void Component::addComponentField(const char *fieldName, const char *desc, const char *type, const char *defaultValue /* = NULL */, const char *userData /* = NULL */, /*const char* dependency /* = NULL *//*,*/ bool hidden /* = false */) +{ + StringTableEntry stFieldName = StringTable->insert(fieldName); + + for (S32 i = 0; i < mFields.size(); ++i) + { + if (mFields[i].mFieldName == stFieldName) + return; + } + + ComponentField field; + field.mFieldName = stFieldName; + + //find the field type + S32 fieldTypeMask = -1; + StringTableEntry fieldType = StringTable->insert(type); + + if (fieldType == StringTable->insert("int")) + fieldTypeMask = TypeS32; + else if (fieldType == StringTable->insert("float")) + fieldTypeMask = TypeF32; + else if (fieldType == StringTable->insert("vector")) + fieldTypeMask = TypePoint3F; + else if (fieldType == StringTable->insert("material")) + fieldTypeMask = TypeMaterialName; + else if (fieldType == StringTable->insert("image")) + fieldTypeMask = TypeImageFilename; + else if (fieldType == StringTable->insert("shape")) + fieldTypeMask = TypeShapeFilename; + else if (fieldType == StringTable->insert("bool")) + fieldTypeMask = TypeBool; + else if (fieldType == StringTable->insert("object")) + fieldTypeMask = TypeSimObjectPtr; + else + fieldTypeMask = TypeString; + + field.mFieldType = fieldTypeMask; + + field.mUserData = StringTable->insert(userData ? userData : ""); + field.mDefaultValue = StringTable->insert(defaultValue ? defaultValue : ""); + field.mFieldDescription = getDescriptionText(desc); + + field.mGroup = mComponentGroup; + + field.mHidden = hidden; + + mFields.push_back(field); + + //Before we set this, we need to do a test to see if this field was already set, like from the mission file or a taml file + const char* curFieldData = getDataField(field.mFieldName, NULL); + + if (dStrIsEmpty(curFieldData)) + setDataField(field.mFieldName, NULL, field.mDefaultValue); +} + +ComponentField* Component::getComponentField(const char *fieldName) +{ + StringTableEntry stFieldName = StringTable->insert(fieldName); + + for (S32 i = 0; i < mFields.size(); ++i) + { + if (mFields[i].mFieldName == stFieldName) + return &mFields[i]; + } + + return NULL; +} + +////////////////////////////////////////////////////////////////////////// + +const char * Component::getDescriptionText(const char *desc) +{ + if (desc == NULL) + return NULL; + + char *newDesc; + + // [tom, 1/12/2007] If it isn't a file, just do it the easy way + if (!Platform::isFile(desc)) + { + newDesc = new char[dStrlen(desc) + 1]; + dStrcpy(newDesc, desc); + + return newDesc; + } + + FileStream str; + str.open(desc, Torque::FS::File::Read); + + Stream *stream = &str; + if (stream == NULL){ + str.close(); + return NULL; + } + + U32 size = stream->getStreamSize(); + if (size > 0) + { + newDesc = new char[size + 1]; + if (stream->read(size, (void *)newDesc)) + newDesc[size] = 0; + else + { + SAFE_DELETE_ARRAY(newDesc); + } + } + + str.close(); + delete stream; + + return newDesc; +} +////////////////////////////////////////////////////////////////////////// +void Component::beginFieldGroup(const char* groupName) +{ + if (dStrcmp(mComponentGroup, "")) + { + Con::errorf("Component: attempting to begin new field group with a group already begun!"); + return; + } + + mComponentGroup = StringTable->insert(groupName); +} + +void Component::endFieldGroup() +{ + mComponentGroup = StringTable->insert(""); +} + +void Component::addDependency(StringTableEntry name) +{ + mDependencies.push_back_unique(name); +} + +////////////////////////////////////////////////////////////////////////// +// Console Methods +////////////////////////////////////////////////////////////////////////// +ConsoleMethod(Component, beginGroup, void, 3, 3, "(groupName)\n" + "Starts the grouping for following fields being added to be grouped into\n" + "@param groupName The name of this group\n" + "@param desc The Description of this field\n" + "@param type The DataType for this field (default, int, float, Point2F, bool, enum, Object, keybind, color)\n" + "@param defaultValue The Default value for this field\n" + "@param userData An extra data field that can be used for custom data on a per-field basis
Usage for default types
" + "-enum: a TAB separated list of possible values
" + "-object: the T2D object type that are valid choices for the field. The object types observe inheritance, so if you have a t2dSceneObject field you will be able to choose t2dStaticSrpites, t2dAnimatedSprites, etc.\n" + "@return Nothing\n") +{ + object->beginFieldGroup(argv[2]); +} + +ConsoleMethod(Component, endGroup, void, 2, 2, "()\n" + "Ends the grouping for prior fields being added to be grouped into\n" + "@param groupName The name of this group\n" + "@param desc The Description of this field\n" + "@param type The DataType for this field (default, int, float, Point2F, bool, enum, Object, keybind, color)\n" + "@param defaultValue The Default value for this field\n" + "@param userData An extra data field that can be used for custom data on a per-field basis
Usage for default types
" + "-enum: a TAB separated list of possible values
" + "-object: the T2D object type that are valid choices for the field. The object types observe inheritance, so if you have a t2dSceneObject field you will be able to choose t2dStaticSrpites, t2dAnimatedSprites, etc.\n" + "@return Nothing\n") +{ + object->endFieldGroup(); +} + +DefineConsoleMethod(Component, addComponentField, void, (String fieldName, String fieldDesc, String fieldType, String defValue, String userData, bool hidden), + ("", "", "", "", "", false), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->addComponentField(fieldName, fieldDesc, fieldType, defValue, userData, hidden); +} + +ConsoleMethod(Component, getComponentFieldCount, S32, 2, 2, "() - Get the number of ComponentField's on this object\n" + "@return Returns the number of BehaviorFields as a nonnegative integer\n") +{ + return object->getComponentFieldCount(); +} + +// [tom, 1/12/2007] Field accessors split into multiple methods to allow space +// for long descriptions and type data. + +ConsoleMethod(Component, getComponentField, const char *, 3, 3, "(int index) - Gets a Tab-Delimited list of information about a ComponentField specified by Index\n" + "@param index The index of the behavior\n" + "@return FieldName, FieldType and FieldDefaultValue, each separated by a TAB character.\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + char *buf = Con::getReturnBuffer(1024); + dSprintf(buf, 1024, "%s\t%s\t%s\t%s", field->mFieldName, field->mFieldType, field->mDefaultValue, field->mGroup); + + return buf; +} + +ConsoleMethod(Component, setComponentield, const char *, 3, 3, "(int index) - Gets a Tab-Delimited list of information about a ComponentField specified by Index\n" + "@param index The index of the behavior\n" + "@return FieldName, FieldType and FieldDefaultValue, each separated by a TAB character.\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + char *buf = Con::getReturnBuffer(1024); + dSprintf(buf, 1024, "%s\t%s\t%s", field->mFieldName, field->mFieldType, field->mDefaultValue); + + return buf; +} + +ConsoleMethod(Component, getBehaviorFieldUserData, const char *, 3, 3, "(int index) - Gets the UserData associated with a field by index in the field list\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the user data of this field\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + return field->mUserData; +} + +ConsoleMethod(Component, getComponentFieldDescription, const char *, 3, 3, "(int index) - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + return field->mFieldDescription ? field->mFieldDescription : ""; +} + +ConsoleMethod(Component, addDependency, void, 3, 3, "(string behaviorName) - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + object->addDependency(argv[2]); +} + +ConsoleMethod(Component, setDirty, void, 2, 2, "() - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + object->setMaskBits(Component::OwnerMask); +} diff --git a/Engine/source/T3D/components/component.h b/Engine/source/T3D/components/component.h new file mode 100644 index 0000000000..0259bacd00 --- /dev/null +++ b/Engine/source/T3D/components/component.h @@ -0,0 +1,197 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COMPONENT_H +#define COMPONENT_H + +#ifndef _NETOBJECT_H_ +#include "sim/netObject.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif + +class Entity; + +struct ComponentField +{ + StringTableEntry mFieldName; + StringTableEntry mFieldDescription; + + S32 mFieldType; + StringTableEntry mUserData; + + StringTableEntry mDefaultValue; + + StringTableEntry mGroup; + + StringTableEntry mDependency; + + bool mHidden; +}; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class Component : public NetObject, public UpdateInterface +{ + typedef NetObject Parent; + +protected: + StringTableEntry mFriendlyName; + StringTableEntry mDescription; + + StringTableEntry mFromResource; + StringTableEntry mComponentGroup; + StringTableEntry mComponentType; + StringTableEntry mNetworkType; + StringTableEntry mTemplateName; + + Vector mDependencies; + Vector mFields; + + bool mNetworked; + + U32 componentIdx; + + Entity* mOwner; + bool mHidden; + bool mEnabled; + +public: + Component(); + virtual ~Component(); + DECLARE_CONOBJECT(Component); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void packToStream(Stream &stream, U32 tabStop, S32 behaviorID, U32 flags = 0); + + //This is called when we are added to an entity + virtual void onComponentAdd(); + //This is called when we are removed from an entity + virtual void onComponentRemove(); + + //This is called when a different component is added to our owner entity + virtual void componentAddedToOwner(Component *comp); + //This is called when a different component is removed from our owner entity + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + void setOwner(Entity* pOwner); + inline Entity *getOwner() { return mOwner ? mOwner : NULL; } + static bool setOwner(void *object, const char *index, const char *data) { return true; } + + bool isEnabled() { return mEnabled; } + void setEnabled(bool toggle) { mEnabled = toggle; setMaskBits(EnableMask); } + + bool isActive() { return mEnabled && mOwner != NULL; } + + static bool _setEnabled(void *object, const char *index, const char *data); + + virtual void processTick(); + virtual void interpolateTick(F32 dt){} + virtual void advanceTime(F32 dt){} + + /// @name Adding Named Fields + /// @{ + + /// Adds a named field to a Component that can specify a description, data type, default value and userData + /// + /// @param fieldName The name of the Field + /// @param desc The Description of the Field + /// @param type The Type of field that this is, example 'Text' or 'Bool' + /// @param defaultValue The Default value of this field + /// @param userData An extra optional field that can be used for user data + void addComponentField(const char *fieldName, const char *desc, const char *type, const char *defaultValue = NULL, const char *userData = NULL, bool hidden = false); + + /// Returns the number of ComponentField's on this template + inline S32 getComponentFieldCount() { return mFields.size(); }; + + /// Gets a ComponentField by its index in the mFields vector + /// @param idx The index of the field in the mField vector + inline ComponentField *getComponentField(S32 idx) + { + if (idx < 0 || idx >= mFields.size()) + return NULL; + + return &mFields[idx]; + } + + ComponentField *getComponentField(const char* fieldName); + + const char* getComponentType() { return mComponentType; } + + const char *getDescriptionText(const char *desc); + + const char *getName() { return mTemplateName; } + + const char *getFriendlyName() { return mFriendlyName; } + + bool isNetworked() { return mNetworked; } + + void beginFieldGroup(const char* groupName); + void endFieldGroup(); + + void addDependency(StringTableEntry name); + /// @} + + /// @name Description + /// @{ + static bool setDescription(void *object, const char *index, const char *data); + static const char* getDescription(void* obj, const char* data); + + /// @Primary usage functions + /// @These are used by the various engine-based behaviors to integrate with the component classes + enum NetMaskBits + { + InitialUpdateMask = BIT(0), + OwnerMask = BIT(1), + UpdateMask = BIT(2), + EnableMask = BIT(3), + NextFreeMask = BIT(4) + }; + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + /// @} + + Signal< void(SimObject*, String, String) > onDataSet; + virtual void setDataField(StringTableEntry slotName, const char *array, const char *value); + + virtual void onStaticModified(const char* slotName, const char* newValue); ///< Called when a static field is modified. + virtual void onDynamicModified(const char* slotName, const char*newValue = NULL); ///< Called when a dynamic field is modified. + + /// This is what we actually use to check if the modified field is one of our behavior fields. If it is, we update and make the correct callbacks + void checkComponentFieldModified(const char* slotName, const char* newValue); + + virtual void checkDependencies(){} +}; + +#endif // COMPONENT_H diff --git a/Engine/source/T3D/components/coreInterfaces.h b/Engine/source/T3D/components/coreInterfaces.h new file mode 100644 index 0000000000..852628778c --- /dev/null +++ b/Engine/source/T3D/components/coreInterfaces.h @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CORE_INTERFACES_H +#define CORE_INTERFACES_H + +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif + +template +class Interface +{ +public: + static Vector all; + + Interface() + { + all.push_back((T*)this); + } + virtual ~Interface() + { + for (U32 i = 0; i < all.size(); i++) + { + if (all[i] == (T*)this) + { + all.erase(i); + return; + } + } + } +}; +template Vector Interface::all(0); + +//Basically a file for generic interfaces that many behaviors may make use of +class SetTransformInterface// : public Interface +{ +public: + virtual void setTransform( MatrixF transform ); + virtual void setTransform( Point3F pos, EulerF rot ); +}; + +class UpdateInterface : public Interface +{ +public: + virtual void processTick(){} + virtual void interpolateTick(F32 dt){} + virtual void advanceTime(F32 dt){} +}; + +class BehaviorFieldInterface// : public Interface +{ +public: + virtual void onFieldChange(const char* fieldName, const char* newValue){}; +}; + +class CameraInterface// : public Interface +{ +public: + virtual bool getCameraTransform(F32* pos,MatrixF* mat)=0; + virtual void onCameraScopeQuery(NetConnection *cr, CameraScopeQuery * query)=0; + virtual Frustum getFrustum()=0; + virtual F32 getCameraFov()=0; + virtual void setCameraFov(F32 fov)=0; + + virtual bool isValidCameraFov(F32 fov)=0; +}; + +class CastRayInterface// : public Interface +{ +public: + virtual bool castRay(const Point3F &start, const Point3F &end, RayInfo* info)=0; +}; + +class EditorInspectInterface// : public Interface +{ +public: + virtual void onInspect()=0; + virtual void onEndInspect()=0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/game/stateMachine.cpp b/Engine/source/T3D/components/game/stateMachine.cpp new file mode 100644 index 0000000000..335b69db3d --- /dev/null +++ b/Engine/source/T3D/components/game/stateMachine.cpp @@ -0,0 +1,434 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/game/stateMachine.h" + +StateMachine::StateMachine() +{ + mStateStartTime = -1; + mStateTime = 0; + + mStartingState = ""; + + mCurCreateState = NULL; +} + +StateMachine::~StateMachine() +{ +} + +void StateMachine::loadStateMachineFile() +{ + if (!mXMLReader) + { + SimXMLDocument *xmlrdr = new SimXMLDocument(); + xmlrdr->registerObject(); + + mXMLReader = xmlrdr; + } + + bool hasStartState = false; + + if (!dStrIsEmpty(mStateMachineFile)) + { + //use our xml reader to parse the file! + SimXMLDocument *reader = mXMLReader.getObject(); + if (!reader->loadFile(mStateMachineFile)) + Con::errorf("Could not load state machine file: &s", mStateMachineFile); + + if (!reader->pushFirstChildElement("StateMachine")) + return; + + //find our starting state + if (reader->pushFirstChildElement("StartingState")) + { + mStartingState = reader->getData(); + reader->popElement(); + hasStartState = true; + } + + readStates(); + } + + if (hasStartState) + mCurrentState = getStateByName(mStartingState); + + mStateStartTime = -1; + mStateTime = 0; +} + +void StateMachine::readStates() +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("State")) + { + //get our first state + State firstState; + + readStateName(&firstState, reader); + readStateScriptFunction(&firstState, reader); + + readTransitions(firstState); + + mStates.push_back(firstState); + + //now, iterate the siblings + while (reader->nextSiblingElement("State")) + { + State newState; + readStateName(&newState, reader); + readStateScriptFunction(&newState, reader); + + readTransitions(newState); + + mStates.push_back(newState); + } + } +} + +void StateMachine::readTransitions(State ¤tState) +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("Transition")) + { + //get our first state + StateTransition firstTransition; + + readTransitonTarget(&firstTransition, reader); + + readConditions(firstTransition); + + currentState.mTransitions.push_back(firstTransition); + + //now, iterate the siblings + while (reader->nextSiblingElement("Transition")) + { + StateTransition newTransition; + readTransitonTarget(&newTransition, reader); + + readConditions(newTransition); + + currentState.mTransitions.push_back(newTransition); + } + + reader->popElement(); + } +} + +void StateMachine::readConditions(StateTransition ¤tTransition) +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("Rule")) + { + //get our first state + StateTransition::Condition firstCondition; + StateField firstField; + bool fieldRead = false; + + readFieldName(&firstField, reader); + firstCondition.field = firstField; + + readFieldComparitor(&firstCondition, reader); + + readFieldValue(&firstCondition.field, reader); + + currentTransition.mTransitionRules.push_back(firstCondition); + + //now, iterate the siblings + while (reader->nextSiblingElement("Transition")) + { + StateTransition::Condition newCondition; + StateField newField; + + readFieldName(&newField, reader); + newCondition.field = newField; + + readFieldComparitor(&newCondition, reader); + + readFieldValue(&newCondition.field, reader); + + currentTransition.mTransitionRules.push_back(newCondition); + } + + reader->popElement(); + } +} + +S32 StateMachine::parseComparitor(const char* comparitorName) +{ + S32 targetType = -1; + + if (!dStrcmp("GreaterThan", comparitorName)) + targetType = StateMachine::StateTransition::Condition::GeaterThan; + else if (!dStrcmp("GreaterOrEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::GreaterOrEqual; + else if (!dStrcmp("LessThan", comparitorName)) + targetType = StateMachine::StateTransition::Condition::LessThan; + else if (!dStrcmp("LessOrEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::LessOrEqual; + else if (!dStrcmp("Equals", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Equals; + else if (!dStrcmp("True", comparitorName)) + targetType = StateMachine::StateTransition::Condition::True; + else if (!dStrcmp("False", comparitorName)) + targetType = StateMachine::StateTransition::Condition::False; + else if (!dStrcmp("Negative", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Negative; + else if (!dStrcmp("Positive", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Positive; + else if (!dStrcmp("DoesNotEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::DoesNotEqual; + + return targetType; +} + +void StateMachine::update() +{ + //we always check if there's a timout transition, as that's the most generic transition possible. + F32 curTime = Sim::getCurrentTime(); + + if (mStateStartTime == -1) + mStateStartTime = curTime; + + mStateTime = curTime - mStateStartTime; + + char buffer[64]; + dSprintf(buffer, sizeof(buffer), "%g", mStateTime); + + checkTransitions("stateTime", buffer); +} + +void StateMachine::checkTransitions(const char* slotName, const char* newValue) +{ + //because we use our current state's fields as dynamic fields on the instance + //we'll want to catch any fields being set so we can treat changes as transition triggers if + //any of the transitions on this state call for it + + //One example would be in order to implement burst fire on a weapon state machine. + //The behavior instance has a dynamic variable set up like: GunStateMachine.burstShotCount = 0; + + //We also have a transition in our fire state, as: GunStateMachine.addTransition("FireState", "burstShotCount", "DoneShooting", 3); + //What that does is for our fire state, we check the dynamicField burstShotCount if it's equal or greater than 3. If it is, we perform the transition. + + //As state fields are handled as dynamicFields for the instance, regular dynamicFields are processed as well as state fields. So we can use the regular + //dynamic fields for our transitions, to act as 'global' variables that are state-agnostic. Alternately, we can use state-specific fields, such as a transition + //like this: + //GunStateMachine.addTransition("IdleState", "Fidget", "Timeout", ">=", 5000); + + //That uses the the timeout field, which is reset each time the state changes, and so state-specific, to see if it's been 5 seconds. If it has been, we transition + //to our fidget state + + //so, lets check our current transitions + //now that we have the type, check our transitions! + for (U32 t = 0; t < mCurrentState.mTransitions.size(); t++) + { + //if (!dStrcmp(mCurrentState.mTransitions[t]., slotName)) + { + //found a transition looking for this variable, so do work + //first, figure out what data type thie field is + //S32 type = getVariableType(newValue); + + bool fail = false; + bool match = false; + S32 ruleCount = mCurrentState.mTransitions[t].mTransitionRules.size(); + + for (U32 r = 0; r < ruleCount; r++) + { + const char* fieldName = mCurrentState.mTransitions[t].mTransitionRules[r].field.name; + if (!dStrcmp(fieldName, slotName)) + { + match = true; + //now, check the value with the comparitor and see if we do the transition. + if (!passComparitorCheck(newValue, mCurrentState.mTransitions[t].mTransitionRules[r])) + { + fail = true; + break; + } + } + } + + //If we do have a transition rule for this field, and we didn't fail on the condition, go ahead and switch states + if (match && !fail) + { + setState(mCurrentState.mTransitions[t].mStateTarget); + + return; + } + } + } +} + +bool StateMachine::passComparitorCheck(const char* var, StateTransition::Condition transitionRule) +{ + F32 num = dAtof(var); + switch (transitionRule.field.fieldType) + { + case StateField::Type::VectorType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::Equals: + case StateTransition::Condition::GeaterThan: + case StateTransition::Condition::GreaterOrEqual: + case StateTransition::Condition::LessThan: + case StateTransition::Condition::LessOrEqual: + case StateTransition::Condition::DoesNotEqual: + //do + break; + default: + return false; + }; + case StateField::Type::StringType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::Equals: + if (!dStrcmp(var, transitionRule.field.triggerStringVal)) + return true; + else + return false; + case StateTransition::Condition::DoesNotEqual: + if (dStrcmp(var, transitionRule.field.triggerStringVal)) + return true; + else + return false; + default: + return false; + }; + case StateField::Type::BooleanType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::TriggerValueTarget::True: + if (dAtob(var)) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::False: + if (dAtob(var)) + return false; + else + return true; + default: + return false; + }; + case StateField::Type::NumberType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::TriggerValueTarget::Equals: + if (num == transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::GeaterThan: + if (num > transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::GreaterOrEqual: + if (num >= transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::LessThan: + if (num < transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::LessOrEqual: + if (num <= transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::DoesNotEqual: + if (num != transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::Positive: + if (num > 0) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::Negative: + if (num < 0) + return true; + else + return false; + default: + return false; + }; + default: + return false; + }; +} + +void StateMachine::setState(const char* stateName, bool clearFields) +{ + State oldState = mCurrentState; + StringTableEntry sName = StringTable->insert(stateName); + for (U32 i = 0; i < mStates.size(); i++) + { + //if(!dStrcmp(mStates[i]->stateName, stateName)) + if (!dStrcmp(mStates[i].stateName,sName)) + { + mCurrentState = mStates[i]; + mStateStartTime = Sim::getCurrentTime(); + + onStateChanged.trigger(this, i); + return; + } + } +} + +const char* StateMachine::getStateByIndex(S32 index) +{ + if (index >= 0 && mStates.size() > index) + return mStates[index].stateName; + else + return ""; +} + +StateMachine::State& StateMachine::getStateByName(const char* name) +{ + StringTableEntry stateName = StringTable->insert(name); + + for (U32 i = 0; i < mStates.size(); i++) + { + if (!dStrcmp(stateName, mStates[i].stateName)) + return mStates[i]; + } +} + +S32 StateMachine::findFieldByName(const char* name) +{ + for (U32 i = 0; i < mFields.size(); i++) + { + if (!dStrcmp(mFields[i].name, name)) + return i; + } + + return -1; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/game/stateMachine.h b/Engine/source/T3D/components/game/stateMachine.h new file mode 100644 index 0000000000..9ccc540e89 --- /dev/null +++ b/Engine/source/T3D/components/game/stateMachine.h @@ -0,0 +1,259 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATE_MACHINE_H +#define STATE_MACHINE_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif +#ifndef _OBJECTTYPES_H_ +#include "T3D/objectTypes.h" +#endif +#ifndef _MMATH_H_ +#include "math/mMath.h" +#endif +#ifndef _XMLDOC_H_ +#include "console/SimXMLDocument.h" +#endif + +class StateMachine +{ +public: + struct StateField + { + StringTableEntry name; + + bool triggerBoolVal; + float triggerNumVal; + Point3F triggerVectorVal; + String triggerStringVal; + + enum Type + { + BooleanType = 0, + NumberType, + VectorType, + StringType + }fieldType; + }; + + struct UniqueReference + { + SimObject* referenceObj; + const char* referenceVar; + const char* uniqueName; + }; + + struct StateTransition + { + struct Condition + { + enum TriggerValueTarget + { + Equals = 0, + GeaterThan, + LessThan, + GreaterOrEqual, + LessOrEqual, + True, + False, + Positive, + Negative, + DoesNotEqual + }; + + StateField field; + + TriggerValueTarget triggerComparitor; + + UniqueReference *valUniqueRef; + }; + + StringTableEntry mName; + StringTableEntry mStateTarget; + Vector mTransitionRules; + }; + + struct State + { + Vector mTransitions; + + StringTableEntry stateName; + + StringTableEntry callbackName; + }; + + StringTableEntry mStateMachineFile; + +protected: + Vector mStates; + + Vector mFields; + + Vector mUniqueReferences; + + State mCurrentState; + + F32 mStateStartTime; + F32 mStateTime; + + StringTableEntry mStartingState; + + State *mCurCreateSuperState; + State *mCurCreateState; + + SimObjectPtr mXMLReader; + +public: + StateMachine(); + virtual ~StateMachine(); + + void update(); + + void loadStateMachineFile(); + void readStates(); + void readTransitions(State ¤tState); + void readConditions(StateTransition &newTransition); + + void setState(const char* stateName, bool clearFields = true); + + const char* getCurrentStateName() { return mCurrentState.stateName; } + State& getCurrentState() { + return mCurrentState; + } + + S32 getStateCount() { return mStates.size(); } + const char* getStateByIndex(S32 index); + State& getStateByName(const char* name); + + void checkTransitions(const char* slotName, const char* newValue); + + bool passComparitorCheck(const char* var, StateTransition::Condition transitionRule); + + S32 findFieldByName(const char* name); + + S32 getFieldsCount() { return mFields.size(); } + + StateField getField(U32 index) + { + if (index <= mFields.size()) + return mFields[index]; + } + + Signal< void(StateMachine*, S32 stateIdx) > onStateChanged; + + // + inline bool readStateName(State* state, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("Name")) + { + state->stateName = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readStateScriptFunction(State* state, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("ScriptFunction")) + { + state->callbackName = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readTransitonTarget(StateTransition* transition, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("StateTarget")) + { + transition->mStateTarget = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + // + inline bool readFieldName(StateField* newField, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("FieldName")) + { + newField->name = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readFieldComparitor(StateTransition::Condition* condition, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("Comparitor")) + { + S32 compIdx = parseComparitor(reader->getData()); + condition->triggerComparitor = static_cast(compIdx); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readFieldValue(StateField* field, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("NumValue")) + { + field->fieldType = StateField::NumberType; + field->triggerNumVal = dAtof(reader->getData()); + reader->popElement(); + return true; + } + else if (reader->pushFirstChildElement("StringValue")) + { + field->fieldType = StateField::StringType; + field->triggerStringVal = reader->getData(); + reader->popElement(); + return true; + } + else if (reader->pushFirstChildElement("BoolValue")) + { + field->fieldType = StateField::BooleanType; + field->triggerBoolVal = dAtob(reader->getData()); + reader->popElement(); + return true; + } + + return false; + } + +private: + S32 parseComparitor(const char* comparitorName); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/game/stateMachineComponent.cpp b/Engine/source/T3D/components/game/stateMachineComponent.cpp new file mode 100644 index 0000000000..991d41ce1f --- /dev/null +++ b/Engine/source/T3D/components/game/stateMachineComponent.cpp @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/game/stateMachineComponent.h" + +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" + +IMPLEMENT_CALLBACK( StateMachineComponent, onStateChange, void, (), (), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +StateMachineComponent::StateMachineComponent() : Component() +{ + mFriendlyName = "State Machine"; + mComponentType = "Game"; + + mDescription = getDescriptionText("A generic state machine."); + + mStateMachineFile = ""; + + //doesn't need to be networked + mNetworked = false; + mNetFlags.clear(); +} + +StateMachineComponent::~StateMachineComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(StateMachineComponent); + +bool StateMachineComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + // Register for the resource change signal. + ResourceManager::get().getChangedSignal().notify(this, &StateMachineComponent::_onResourceChanged); + + mStateMachine.onStateChanged.notify(this, &StateMachineComponent::onStateChanged); + + return true; +} + +void StateMachineComponent::onRemove() +{ + Parent::onRemove(); +} + +U32 StateMachineComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void StateMachineComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void StateMachineComponent::onComponentAdd() +{ + Parent::onComponentAdd(); +} + +void StateMachineComponent::onComponentRemove() +{ + Parent::onComponentRemove(); +} + +void StateMachineComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addProtectedField("stateMachineFile", TypeFilename, Offset(mStateMachineFile, StateMachineComponent), + &_setSMFile, &defaultProtectedGetFn, "The sim time of when we started this state"); +} + +bool StateMachineComponent::_setSMFile(void *object, const char *index, const char *data) +{ + StateMachineComponent* smComp = static_cast(object); + if (smComp) + { + smComp->setStateMachineFile(data); + smComp->loadStateMachineFile(); + + return true; + } + + return false; +} + +void StateMachineComponent::_onResourceChanged(const Torque::Path &path) +{ + if (path != Torque::Path(mStateMachineFile)) + return; + + loadStateMachineFile(); +} + +void StateMachineComponent::loadStateMachineFile() +{ + if (!dStrIsEmpty(mStateMachineFile)) + { + mStateMachine.mStateMachineFile = mStateMachineFile; + mStateMachine.loadStateMachineFile(); + + //now that it's loaded, we need to parse the SM's fields and set them as script vars on ourselves + S32 smFieldCount = mStateMachine.getFieldsCount(); + + for (U32 i = 0; i < smFieldCount; i++) + { + StateMachine::StateField field = mStateMachine.getField(i); + + char buffer[128]; + + if (field.fieldType == StateMachine::StateField::BooleanType) + { + dSprintf(buffer, sizeof(buffer), "%b", field.triggerBoolVal); + setDataField(field.name, NULL, buffer); + } + else if (field.fieldType == StateMachine::StateField::NumberType) + { + dSprintf(buffer, sizeof(buffer), "%g", field.triggerNumVal); + setDataField(field.name, NULL, buffer); + } + else if (field.fieldType == StateMachine::StateField::StringType) + { + setDataField(field.name, NULL, field.triggerStringVal); + } + } + } +} + +void StateMachineComponent::processTick() +{ + if (!isServerObject() || !isActive()) + return; + + mStateMachine.update(); +} + +void StateMachineComponent::onDynamicModified( const char* slotName, const char* newValue ) +{ + Parent::onDynamicModified(slotName, newValue); + + StringTableEntry fieldName = StringTable->insert(slotName); + mStateMachine.checkTransitions(fieldName, newValue); +} + +void StateMachineComponent::onStaticModified( const char* slotName, const char* newValue ) +{ + Parent::onStaticModified(slotName, newValue); + + StringTableEntry fieldName = StringTable->insert(slotName); + mStateMachine.checkTransitions(fieldName, newValue); +} + +void StateMachineComponent::onStateChanged(StateMachine* sm, S32 stateIdx) +{ + //do a script callback, if we have one + //check if we have a function for that, and then also check if our owner does + StringTableEntry callbackName = mStateMachine.getCurrentState().callbackName; + + if (isMethod(callbackName)) + Con::executef(this, callbackName); + + if (mOwner->isMethod(callbackName)) + Con::executef(mOwner, callbackName); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/game/stateMachineComponent.h b/Engine/source/T3D/components/game/stateMachineComponent.h new file mode 100644 index 0000000000..5d4051075d --- /dev/null +++ b/Engine/source/T3D/components/game/stateMachineComponent.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATE_MACHINE_COMPONENT_H +#define STATE_MACHINE_COMPONENT_H + +#ifndef COMPONENT_H + #include "T3D/components/component.h" +#endif +#ifndef STATE_MACHINE_H +#include "T3D/components/game/stateMachine.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class StateMachineComponent : public Component +{ + typedef Component Parent; + +public: + StateMachine mStateMachine; + +protected: + StringTableEntry mStateMachineFile; + +public: + StateMachineComponent(); + virtual ~StateMachineComponent(); + DECLARE_CONOBJECT(StateMachineComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + void _onResourceChanged(const Torque::Path &path); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); + + virtual void onDynamicModified(const char* slotName, const char* newValue); + virtual void onStaticModified(const char* slotName, const char* newValue); + + virtual void loadStateMachineFile(); + + void setStateMachineFile(const char* fileName) { mStateMachineFile = StringTable->insert(fileName); } + + static bool _setSMFile(void *object, const char *index, const char *data); + + void onStateChanged(StateMachine* sm, S32 stateIdx); + + //Callbacks + DECLARE_CALLBACK(void, onStateChange, ()); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/game/triggerComponent.cpp b/Engine/source/T3D/components/game/triggerComponent.cpp new file mode 100644 index 0000000000..290fab4370 --- /dev/null +++ b/Engine/source/T3D/components/game/triggerComponent.cpp @@ -0,0 +1,359 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- +#include "console/consoleTypes.h" +#include "T3D/components/game/triggerComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/components/coreInterfaces.h" +#include "math/mathUtils.h" +#include "collision/concretePolyList.h" +#include "collision/clippedPolyList.h" + +#include "gfx/sim/debugDraw.h" + +IMPLEMENT_CALLBACK( TriggerComponent, onEnterViewCmd, void, + ( Entity* cameraEnt, bool firstTimeSeeing ), ( cameraEnt, firstTimeSeeing ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onExitViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onUpdateInViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onUpdateOutOfViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +TriggerComponent::TriggerComponent() : Component() +{ + mObjectList.clear(); + + mVisible = false; + + mFriendlyName = "Trigger"; + mComponentType = "Trigger"; + + mDescription = getDescriptionText("Calls trigger events when a client starts and stops seeing it. Also ticks while visible to clients."); +} + +TriggerComponent::~TriggerComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(TriggerComponent); + + +bool TriggerComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void TriggerComponent::onRemove() +{ + Parent::onRemove(); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void TriggerComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + CollisionInterface *colInt = mOwner->getComponent(); + + if(colInt) + { + colInt->onCollisionSignal.notify(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::onComponentRemove() +{ + CollisionInterface *colInt = mOwner->getComponent(); + + if(colInt) + { + colInt->onCollisionSignal.remove(this, &TriggerComponent::potentialEnterObject); + } + + Parent::onComponentRemove(); +} + +void TriggerComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + CollisionInterface *colInt = mOwner->getComponent(); + + if (colInt) + { + colInt->onCollisionSignal.notify(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + CollisionInterface *colInt = mOwner->getComponent(); + + if (colInt) + { + colInt->onCollisionSignal.remove(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("visibile", TypeBool, Offset( mVisible, TriggerComponent ), "" ); + + addField("onEnterViewCmd", TypeCommand, Offset(mEnterCommand, TriggerComponent), ""); + addField("onExitViewCmd", TypeCommand, Offset(mOnExitCommand, TriggerComponent), ""); + addField("onUpdateInViewCmd", TypeCommand, Offset(mOnUpdateInViewCmd, TriggerComponent), ""); +} + +U32 TriggerComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void TriggerComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +void TriggerComponent::potentialEnterObject(SceneObject *collider) +{ + if(testObject(collider)) + { + bool found = false; + for(U32 i=0; i < mObjectList.size(); i++) + { + if(mObjectList[i]->getId() == collider->getId()) + { + found = true; + break; + } + } + + if (!found) + { + mObjectList.push_back(collider); + + if (!mEnterCommand.isEmpty()) + { + String command = String("%obj = ") + collider->getIdString() + ";" + + String("%this = ") + getIdString() + ";" + mEnterCommand; + Con::evaluate(command.c_str()); + } + + //onEnterTrigger_callback(this, enter); + } + } +} + +bool TriggerComponent::testObject(SceneObject* enter) +{ + //First, test to early out + Box3F enterBox = enter->getWorldBox(); + + //if(!mOwner->getWorldBox().intersect(enterBox) || !) + // return false; + + //We're still here, so we should do actual work + //We're going to be + ConcretePolyList mClippedList; + + SphereF sphere; + sphere.center = (mOwner->getWorldBox().minExtents + mOwner->getWorldBox().maxExtents) * 0.5; + VectorF bv = mOwner->getWorldBox().maxExtents - sphere.center; + sphere.radius = bv.len(); + + Entity* enterEntity = dynamic_cast(enter); + if(enterEntity) + { + //quick early out. If the bounds don't overlap, it cannot be colliding or inside + if (!mOwner->getWorldBox().isOverlapped(enterBox)) + return false; + + //check if the entity has a collision shape + CollisionInterface *cI = enterEntity->getComponent(); + if (cI) + { + cI->buildPolyList(PLC_Collision, &mClippedList, mOwner->getWorldBox(), sphere); + + if (!mClippedList.isEmpty()) + { + //well, it's clipped with, or inside, our bounds + //now to test the clipped list against our own collision mesh + CollisionInterface *myCI = mOwner->getComponent(); + + //wait, how would we NOT have this? + if (myCI) + { + //anywho, build our list and then we'll check intersections + ClippedPolyList myList; + + MatrixF ownerTransform = mOwner->getTransform(); + myList.setTransform(&ownerTransform, mOwner->getScale()); + myList.setObject(mOwner); + + myCI->buildPolyList(PLC_Collision, &myList, enterBox, sphere); + + bool test = true; + } + } + } + } + + return mClippedList.isEmpty() == false; +} + +void TriggerComponent::processTick() +{ + Parent::processTick(); + + if (!isActive()) + return; + + //get our list of active clients, and see if they have cameras, if they do, build a frustum and see if we exist inside that + mVisible = false; + if(isServerObject()) + { + for(U32 i=0; i < mObjectList.size(); i++) + { + if(!testObject(mObjectList[i])) + { + if (!mOnExitCommand.isEmpty()) + { + String command = String("%obj = ") + mObjectList[i]->getIdString() + ";" + + String("%this = ") + getIdString() + ";" + mOnExitCommand; + Con::evaluate(command.c_str()); + } + + mObjectList.erase(i); + //mDataBlock->onLeaveTrigger_callback( this, remove ); + //onLeaveTrigger_callback(this, remove); + } + } + + /*if (!mTickCommand.isEmpty()) + Con::evaluate(mTickCommand.c_str()); + + if (mObjects.size() != 0) + onTickTrigger_callback(this);*/ + } +} + +void TriggerComponent::visualizeFrustums(F32 renderTimeMS) +{ + +} + +GameConnection* TriggerComponent::getConnection(S32 connectionID) +{ + for(NetConnection *conn = NetConnection::getConnectionList(); conn; conn = conn->getNext()) + { + GameConnection* gameConn = dynamic_cast(conn); + + if (!gameConn || (gameConn && gameConn->isAIControlled())) + continue; + + if(connectionID == gameConn->getId()) + return gameConn; + } + + return NULL; +} + +void TriggerComponent::addClient(S32 clientID) +{ + +} + +void TriggerComponent::removeClient(S32 clientID) +{ + +} + +DefineEngineMethod( TriggerComponent, addClient, void, + ( S32 clientID ), ( -1 ), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + if(clientID == -1) + return; + + object->addClient( clientID ); +} + +DefineEngineMethod( TriggerComponent, removeClient, void, + ( S32 clientID ), ( -1 ), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + if(clientID == -1) + return; + + object->removeClient( clientID ); +} + +DefineEngineMethod( TriggerComponent, visualizeFrustums, void, + (F32 renderTime), (1000), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + object->visualizeFrustums(renderTime); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/game/triggerComponent.h b/Engine/source/T3D/components/game/triggerComponent.h new file mode 100644 index 0000000000..bac45b62a8 --- /dev/null +++ b/Engine/source/T3D/components/game/triggerComponent.h @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- +#ifndef _TRIGGER_COMPONENT_H_ +#define _TRIGGER_COMPONENT_H_ + +#ifndef _COMPONENT_H_ +#include "T3D/components/component.h" +#endif + +#ifndef _ENTITY_H_ +#include "T3D/entity.h" +#endif + +#ifndef _COLLISION_INTERFACES_H_ +#include "T3D/components/collision/collisionInterfaces.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class TriggerComponent : public Component +{ + typedef Component Parent; + +protected: + Vector mObjectList; + + bool mVisible; + + String mEnterCommand; + String mOnExitCommand; + String mOnUpdateInViewCmd; + +public: + TriggerComponent(); + virtual ~TriggerComponent(); + DECLARE_CONOBJECT(TriggerComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + void potentialEnterObject(SceneObject *collider); + + bool testObject(SceneObject* enter); + + virtual void processTick(); + + GameConnection* getConnection(S32 connectionID); + + void addClient(S32 clientID); + void removeClient(S32 clientID); + + void visualizeFrustums(F32 renderTimeMS); + + DECLARE_CALLBACK(void, onEnterViewCmd, (Entity* cameraEnt, bool firstTimeSeeing)); + DECLARE_CALLBACK(void, onExitViewCmd, (Entity* cameraEnt)); + DECLARE_CALLBACK(void, onUpdateInViewCmd, (Entity* cameraEnt)); + DECLARE_CALLBACK(void, onUpdateOutOfViewCmd, (Entity* cameraEnt)); +}; + +#endif // _EXAMPLEBEHAVIOR_H_ diff --git a/Engine/source/T3D/components/physics/physicsBehavior.cpp b/Engine/source/T3D/components/physics/physicsBehavior.cpp new file mode 100644 index 0000000000..f281192c08 --- /dev/null +++ b/Engine/source/T3D/components/physics/physicsBehavior.cpp @@ -0,0 +1,368 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/physics/physicsBehavior.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/containerQuery.h" +#include "math/mathIO.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +PhysicsComponent::PhysicsComponent() : Component() +{ + addComponentField("isStatic", "If enabled, object will not simulate physics", "bool", "0", ""); + addComponentField("gravity", "The direction of gravity affecting this object, as a vector", "vector", "0 0 -9", ""); + addComponentField("drag", "The drag coefficient that constantly affects the object", "float", "0.7", ""); + addComponentField("mass", "The mass of the object", "float", "1", ""); + + mStatic = false; + mAtRest = false; + mAtRestCounter = 0; + + mGravity = VectorF(0, 0, 0); + mVelocity = VectorF(0, 0, 0); + mDrag = 0.7f; + mMass = 1.f; + + mGravityMod = 1.f; + + csmAtRestTimer = 64; + sAtRestVelocity = 0.15f; + + mDelta.pos = Point3F(0, 0, 0); + mDelta.posVec = Point3F(0, 0, 0); + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.dt = 1; + mDelta.move = NullMove; + mPredictionCount = 0; +} + +PhysicsComponent::~PhysicsComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(PhysicsComponent); + +void PhysicsComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + // Initialize interpolation vars. + mDelta.rot[1] = mDelta.rot[0] = QuatF(mOwner->getTransform()); + mDelta.pos = mOwner->getPosition(); + mDelta.posVec = Point3F(0,0,0); +} + +void PhysicsComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("gravity", TypePoint3F, Offset(mGravity, PhysicsComponent)); + addField("velocity", TypePoint3F, Offset(mVelocity, PhysicsComponent)); + addField("isStatic", TypeBool, Offset(mStatic, PhysicsComponent)); +} + +U32 PhysicsComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if(stream->writeFlag(mask & VelocityMask)) + mathWrite( *stream, mVelocity ); + + if(stream->writeFlag(mask & UpdateMask)) + { + stream->writeFlag(mStatic); + stream->writeFlag(mAtRest); + stream->writeInt(mAtRestCounter,8); + + mathWrite( *stream, mGravity ); + + stream->writeFloat(mDrag, 12); + //stream->writeFloat(mMass, 12); + + stream->writeFloat(mGravityMod, 12); + } + return retMask; +} + +void PhysicsComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if(stream->readFlag()) + mathRead( *stream, &mVelocity ); + + if(stream->readFlag()) + { + mStatic = stream->readFlag(); + mAtRest = stream->readFlag(); + mAtRestCounter = stream->readInt(8); + + mathRead( *stream, &mGravity ); + + mDrag = stream->readFloat(12); + //mMass = stream->readFloat(12); + + mGravityMod = stream->readFloat(12); + } +} + +// +void PhysicsComponent::interpolateTick(F32 dt) +{ + Point3F pos = mDelta.pos + mDelta.posVec * dt; + //Point3F rot = mDelta.rot + mDelta.rotVec * dt; + + setRenderPosition(pos,dt); +} + +// +void PhysicsComponent::updateContainer() +{ + PROFILE_SCOPE( PhysicsBehaviorInstance_updateContainer ); + + // Update container drag and buoyancy properties + + // Set default values. + //mDrag = mDataBlock->drag; + //mBuoyancy = 0.0f; + //mGravityMod = 1.0; + //mAppliedForce.set(0,0,0); + + ContainerQueryInfo info; + info.box = mOwner->getWorldBox(); + info.mass = mMass; + + mOwner->getContainer()->findObjects(info.box, WaterObjectType|PhysicalZoneObjectType,findRouter,&info); + + //mWaterCoverage = info.waterCoverage; + //mLiquidType = info.liquidType; + //mLiquidHeight = info.waterHeight; + //setCurrentWaterObject( info.waterObject ); + + // This value might be useful as a datablock value, + // This is what allows the player to stand in shallow water (below this coverage) + // without jiggling from buoyancy + if (info.waterCoverage >= 0.25f) + { + // water viscosity is used as drag for in water. + // ShapeBaseData drag is used for drag outside of water. + // Combine these two components to calculate this ShapeBase object's + // current drag. + mDrag = ( info.waterCoverage * info.waterViscosity ) + + ( 1.0f - info.waterCoverage ) * mDrag; + //mBuoyancy = (info.waterDensity / mDataBlock->density) * info.waterCoverage; + } + + //mAppliedForce = info.appliedForce; + mGravityMod = info.gravityScale; +} +// +void PhysicsComponent::_updatePhysics() +{ + /*SAFE_DELETE( mOwner->mPhysicsRep ); + + if ( !PHYSICSMGR ) + return; + + if (mDataBlock->simpleServerCollision) + { + // We only need the trigger on the server. + if ( isServerObject() ) + { + PhysicsCollision *colShape = PHYSICSMGR->createCollision(); + colShape->addBox( mObjBox.getExtents() * 0.5f, MatrixF::Identity ); + + PhysicsWorld *world = PHYSICSMGR->getWorld( isServerObject() ? "server" : "client" ); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init( colShape, 0, PhysicsBody::BF_TRIGGER | PhysicsBody::BF_KINEMATIC, this, world ); + mPhysicsRep->setTransform( getTransform() ); + } + } + else + { + if ( !mShapeInstance ) + return; + + PhysicsCollision* colShape = mShapeInstance->getShape()->buildColShape( false, getScale() ); + + if ( colShape ) + { + PhysicsWorld *world = PHYSICSMGR->getWorld( isServerObject() ? "server" : "client" ); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init( colShape, 0, PhysicsBody::BF_KINEMATIC, this, world ); + mPhysicsRep->setTransform( getTransform() ); + } + }*/ + return; +} + +PhysicsBody *PhysicsComponent::getPhysicsRep() +{ + /*if(mOwner) + { + Entity* ac = dynamic_cast(mOwner); + if(ac) + return ac->mPhysicsRep; + }*/ + return NULL; +} +// +void PhysicsComponent::setTransform(const MatrixF& mat) +{ + mOwner->setTransform(mat); + + if (!mStatic) + { + mAtRest = false; + mAtRestCounter = 0; + } + + if ( getPhysicsRep() ) + getPhysicsRep()->setTransform( mOwner->getTransform() ); + + setMaskBits(UpdateMask); +} + +void PhysicsComponent::setPosition(const Point3F& pos) +{ + MatrixF mat = mOwner->getTransform(); + if (mOwner->isMounted()) { + // Use transform from mounted object + //mOwner->getObjectMount()->getMountTransform( mOwner->getMountNode(), mMount.xfm, &mat ); + return; + } + else { + mat.setColumn(3,pos); + } + + mOwner->setTransform(mat); + + if ( getPhysicsRep() ) + getPhysicsRep()->setTransform( mat ); +} + + +void PhysicsComponent::setRenderPosition(const Point3F& pos, F32 dt) +{ + MatrixF mat = mOwner->getRenderTransform(); + if (mOwner->isMounted()) { + // Use transform from mounted object + //mOwner->getObjectMount()->getMountRenderTransform( dt, mOwner->getMountNode(), mMount.xfm, &mat ); + return; + } + else { + mat.setColumn(3,pos); + } + + mOwner->setRenderTransform(mat); +} + +void PhysicsComponent::updateVelocity(const F32 dt) +{ +} + +void PhysicsComponent::setVelocity(const VectorF& vel) +{ + mVelocity = vel; + + mAtRest = false; + mAtRestCounter = 0; + setMaskBits(VelocityMask); +} + +void PhysicsComponent::getVelocity(const Point3F& r, Point3F* v) +{ + *v = mVelocity; +} + +void PhysicsComponent::getOriginVector(const Point3F &p,Point3F* r) +{ + *r = p - mOwner->getObjBox().getCenter(); +} + +F32 PhysicsComponent::getZeroImpulse(const Point3F& r,const Point3F& normal) +{ + Point3F a,b,c; + + //set up our inverse matrix + MatrixF iv,qmat; + MatrixF inverse = MatrixF::Identity; + qmat = mOwner->getTransform(); + iv.mul(qmat,inverse); + qmat.transpose(); + inverse.mul(iv,qmat); + + mCross(r, normal, &a); + inverse.mulV(a, &b); + mCross(b, r, &c); + + return 1 / ((1/mMass) + mDot(c, normal)); +} + +void PhysicsComponent::accumulateForce(F32 dt, Point3F force) +{ + mVelocity += force * dt; +} + +void PhysicsComponent::applyImpulse(const Point3F&,const VectorF& vec) +{ + // Items ignore angular velocity + VectorF vel; + vel.x = vec.x / mMass; + vel.y = vec.y / mMass; + vel.z = vec.z / mMass; + setVelocity(mVelocity + vel); +} + +DefineEngineMethod( PhysicsComponent, applyImpulse, bool, ( Point3F pos, VectorF vel ),, + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + object->applyImpulse(pos,vel); + return true; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/physics/physicsBehavior.h b/Engine/source/T3D/components/physics/physicsBehavior.h new file mode 100644 index 0000000000..bc09f3108b --- /dev/null +++ b/Engine/source/T3D/components/physics/physicsBehavior.h @@ -0,0 +1,135 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- + +#ifndef _PHYSICSBEHAVIOR_H_ +#define _PHYSICSBEHAVIOR_H_ +#include "T3D/components/component.h" + +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef _ENTITY_H_ +#include "T3D/entity.h" +#endif +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _BOXCONVEX_H_ +#include "collision/boxConvex.h" +#endif +#ifndef _RIGID_H_ +#include "T3D/rigid.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSBODY_H_ +#include "T3D/physics/physicsBody.h" +#endif + +#ifndef _RENDER_COMPONENT_INTERFACE_H_ +#include "T3D/components/render/renderComponentInterface.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +class PhysicsBody; +class PhysicsBehaviorInstance; +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class PhysicsComponent : public Component +{ + typedef Component Parent; + +protected: + bool mStatic; + bool mAtRest; + S32 mAtRestCounter; + + VectorF mGravity; + VectorF mVelocity; + F32 mDrag; + F32 mMass; + + F32 mGravityMod; + + S32 csmAtRestTimer; + F32 sAtRestVelocity; // Min speed after collisio + +public: + enum MaskBits { + PositionMask = Parent::NextFreeMask << 0, + FreezeMask = Parent::NextFreeMask << 1, + ForceMoveMask = Parent::NextFreeMask << 2, + VelocityMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + StateDelta mDelta; + S32 mPredictionCount; ///< Number of ticks to predict + +public: + PhysicsComponent(); + virtual ~PhysicsComponent(); + DECLARE_CONOBJECT(PhysicsComponent); + + static void initPersistFields(); + + virtual void interpolateTick(F32 dt); + virtual void updatePos(const U32 /*mask*/, const F32 dt){} + virtual void _updatePhysics(); + virtual PhysicsBody *getPhysicsRep(); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void onComponentAdd(); + + void updateContainer(); + + virtual void updateVelocity(const F32 dt); + virtual Point3F getVelocity() { return mVelocity; } + virtual void getOriginVector(const Point3F &p, Point3F* r); + virtual void getVelocity(const Point3F& r, Point3F* v); + virtual void setVelocity(const VectorF& vel); + virtual void setTransform(const MatrixF& mat); + virtual void setPosition(const Point3F& pos); + void setRenderPosition(const Point3F& pos, F32 dt); + + virtual void applyImpulse(const Point3F&, const VectorF& vec); + virtual F32 getZeroImpulse(const Point3F& r, const Point3F& normal); + virtual void accumulateForce(F32 dt, Point3F force); + + //Rigid Body Collision Conveinence Hooks + virtual bool updateCollision(F32 dt, Rigid& ns, CollisionList &cList) { return false; } + virtual bool resolveContacts(Rigid& ns, CollisionList& cList, F32 dt) { return false; } + //virtual bool resolveCollision(Rigid& ns, CollisionList& cList) { return false; } + virtual bool resolveCollision(const Point3F& p, const Point3F &normal) { return false; } +}; + +#endif // _COMPONENT_H_ diff --git a/Engine/lib/glew/auto/extensions/gl/.dummy b/Engine/source/T3D/components/physics/physicsComponentInterface.cpp similarity index 100% rename from Engine/lib/glew/auto/extensions/gl/.dummy rename to Engine/source/T3D/components/physics/physicsComponentInterface.cpp diff --git a/Engine/source/T3D/components/physics/physicsComponentInterface.h b/Engine/source/T3D/components/physics/physicsComponentInterface.h new file mode 100644 index 0000000000..57f00b8d41 --- /dev/null +++ b/Engine/source/T3D/components/physics/physicsComponentInterface.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#define PHYSICS_COMPONENT_INTERFACE_H + +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif + +class PhysicsComponentInterface : public Interface +{ +protected: + VectorF mVelocity; + F32 mMass; + + F32 mGravityMod; + +public: + void updateForces(); + + VectorF getVelocity() { return mVelocity; } + void setVelocity(VectorF vel) { mVelocity = vel; } + + F32 getMass() { return mMass; } + + Signal< void(VectorF normal, Vector overlappedObjects) > onPhysicsCollision; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/physics/playerControllerComponent.cpp b/Engine/source/T3D/components/physics/playerControllerComponent.cpp new file mode 100644 index 0000000000..60945f68e8 --- /dev/null +++ b/Engine/source/T3D/components/physics/playerControllerComponent.cpp @@ -0,0 +1,865 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/physics/playerControllerComponent.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "collision/collision.h" +#include "T3D/physics/physicsPlayer.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/components/collision/collisionInterfaces.h" +#include "T3D/trigger.h" +#include "T3D/components/collision/collisionTrigger.h" + +// Movement constants +static F32 sVerticalStepDot = 0.173f; // 80 +static F32 sMinFaceDistance = 0.01f; +static F32 sTractionDistance = 0.04f; +static F32 sNormalElasticity = 0.01f; +static U32 sMoveRetryCount = 5; +static F32 sMaxImpulseVelocity = 200.0f; + +////////////////////////////////////////////////////////////////////////// +// Callbacks +IMPLEMENT_CALLBACK(PlayerControllerComponent, updateMove, void, (PlayerControllerComponent* obj), (obj), + "Called when the player updates it's movement, only called if object is set to callback in script(doUpdateMove).\n" + "@param obj the Player object\n"); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +PlayerControllerComponent::PlayerControllerComponent() : Component() +{ + addComponentField("isStatic", "If enabled, object will not simulate physics", "bool", "0", ""); + addComponentField("gravity", "The direction of gravity affecting this object, as a vector", "vector", "0 0 -9", ""); + addComponentField("drag", "The drag coefficient that constantly affects the object", "float", "0.7", ""); + addComponentField("mass", "The mass of the object", "float", "1", ""); + + mBuoyancy = 0.f; + mFriction = 0.3f; + mElasticity = 0.4f; + mMaxVelocity = 3000.f; + mVelocity = VectorF::Zero; + mContactTimer = 0; + mSticky = false; + + mFalling = false; + mSwimming = false; + mInWater = false; + + mDelta.pos = mDelta.posVec = Point3F::Zero; + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.rot[0].identity(); + mDelta.rot[1].identity(); + mDelta.dt = 1; + + mUseDirectMoveInput = false; + + mFriendlyName = "Player Controller"; + mComponentType = "Physics"; + + mDescription = getDescriptionText("A general-purpose physics player controller."); + + //mNetFlags.set(Ghostable | ScopeAlways); + + mMass = 9.0f; // from ShapeBase + mDrag = 1.0f; // from ShapeBase + + maxStepHeight = 1.0f; + moveSurfaceAngle = 60.0f; + contactSurfaceAngle = 85.0f; + + fallingSpeedThreshold = -10.0f; + + horizMaxSpeed = 80.0f; + horizMaxAccel = 100.0f; + horizResistSpeed = 38.0f; + horizResistFactor = 1.0f; + + upMaxSpeed = 80.0f; + upMaxAccel = 100.0f; + upResistSpeed = 38.0f; + upResistFactor = 1.0f; + + // Air control + airControl = 0.0f; + + //Grav mod + mGravityMod = 1; + + mInputVelocity = Point3F(0, 0, 0); + + mPhysicsRep = NULL; + mPhysicsWorld = NULL; +} + +PlayerControllerComponent::~PlayerControllerComponent() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(PlayerControllerComponent); + +////////////////////////////////////////////////////////////////////////// + +bool PlayerControllerComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +void PlayerControllerComponent::onRemove() +{ + Parent::onRemove(); + + SAFE_DELETE(mPhysicsRep); +} + +void PlayerControllerComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + updatePhysics(); +} + +void PlayerControllerComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + CollisionInterface *collisionInterface = dynamic_cast(comp); + if (collisionInterface) + { + collisionInterface->onCollisionChanged.notify(this, &PlayerControllerComponent::updatePhysics); + mOwnerCollisionInterface = collisionInterface; + updatePhysics(); + } +} + +void PlayerControllerComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + CollisionInterface *collisionInterface = dynamic_cast(comp); + if (collisionInterface) + { + collisionInterface->onCollisionChanged.remove(this, &PlayerControllerComponent::updatePhysics); + mOwnerCollisionInterface = NULL; + updatePhysics(); + } +} + +void PlayerControllerComponent::updatePhysics(PhysicsCollision *collision) +{ + if (!PHYSICSMGR) + return; + + mPhysicsWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + //first, clear the old physRep + SAFE_DELETE(mPhysicsRep); + + mPhysicsRep = PHYSICSMGR->createPlayer(); + + F32 runSurfaceCos = mCos(mDegToRad(moveSurfaceAngle)); + + Point3F ownerBounds = mOwner->getObjBox().getExtents() * mOwner->getScale(); + + mPhysicsRep->init("", ownerBounds, runSurfaceCos, maxStepHeight, mOwner, mPhysicsWorld); + + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void PlayerControllerComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("inputVelocity", TypePoint3F, Offset(mInputVelocity, PlayerControllerComponent), ""); + addField("useDirectMoveInput", TypePoint3F, Offset(mUseDirectMoveInput, PlayerControllerComponent), ""); +} + +U32 PlayerControllerComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + return retMask; +} + +void PlayerControllerComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +// +void PlayerControllerComponent::processTick() +{ + Parent::processTick(); + + if (!isServerObject() || !isActive()) + return; + + // Warp to catch up to server + if (mDelta.warpCount < mDelta.warpTicks) + { + mDelta.warpCount++; + + // Set new pos. + mDelta.pos = mOwner->getPosition(); + mDelta.pos += mDelta.warpOffset; + mDelta.rot[0] = mDelta.rot[1]; + mDelta.rot[1].interpolate(mDelta.warpRot[0], mDelta.warpRot[1], F32(mDelta.warpCount) / mDelta.warpTicks); + + MatrixF trans; + mDelta.rot[1].setMatrix(&trans); + trans.setPosition(mDelta.pos); + + mOwner->setTransform(trans); + + // Pos backstepping + mDelta.posVec.x = -mDelta.warpOffset.x; + mDelta.posVec.y = -mDelta.warpOffset.y; + mDelta.posVec.z = -mDelta.warpOffset.z; + } + else + { + // Save current rigid state interpolation + mDelta.posVec = mOwner->getPosition(); + mDelta.rot[0] = mOwner->getTransform(); + + updateMove(); + updatePos(TickSec); + + // Wrap up interpolation info + mDelta.pos = mOwner->getPosition(); + mDelta.posVec -= mOwner->getPosition(); + mDelta.rot[1] = mOwner->getTransform(); + + // Update container database + setTransform(mOwner->getTransform()); + + setMaskBits(VelocityMask); + setMaskBits(PositionMask); + } +} + +void PlayerControllerComponent::interpolateTick(F32 dt) +{ +} + +void PlayerControllerComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void PlayerControllerComponent::setTransform(const MatrixF& mat) +{ + mOwner->setTransform(mat); + + setMaskBits(UpdateMask); +} + +// +void PlayerControllerComponent::updateMove() +{ + if (!PHYSICSMGR) + return; + + Move *move = &mOwner->lastMove; + + //If we're not set to use mUseDirectMoveInput, then we allow for an override in the form of mInputVelocity + if (!mUseDirectMoveInput) + { + move->x = mInputVelocity.x; + move->y = mInputVelocity.y; + move->z = mInputVelocity.z; + } + + // Is waterCoverage high enough to be 'swimming'? + { + bool swimming = mOwner->getContainerInfo().waterCoverage > 0.65f/* && canSwim()*/; + + if (swimming != mSwimming) + { + mSwimming = swimming; + } + } + + // Update current orientation + bool doStandardMove = true; + GameConnection* con = mOwner->getControllingClient(); + +#ifdef TORQUE_EXTENDED_MOVE + // Work with an absolute rotation from the ExtendedMove class? + if (con && con->getControlSchemeAbsoluteRotation()) + { + doStandardMove = false; + const ExtendedMove* emove = dynamic_cast(move); + U32 emoveIndex = smExtendedMoveHeadPosRotIndex; + if (emoveIndex >= ExtendedMove::MaxPositionsRotations) + emoveIndex = 0; + + if (emove->EulerBasedRotation[emoveIndex]) + { + // Head pitch + mHead.x += (emove->rotX[emoveIndex] - mLastAbsolutePitch); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddPitchToAbsRot()) + { + F32 x = move->pitch; + if (x > M_PI_F) + x -= M_2PI_F; + + mHead.x += x; + } + + // Constrain the range of mHead.x + while (mHead.x < -M_PI_F) + mHead.x += M_2PI_F; + while (mHead.x > M_PI_F) + mHead.x -= M_2PI_F; + + // Rotate (heading) head or body? + if (move->freeLook && ((isMounted() && getMountNode() == 0) || (con && !con->isFirstPerson()))) + { + // Rotate head + mHead.z += (emove->rotZ[emoveIndex] - mLastAbsoluteYaw); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddYawToAbsRot()) + { + F32 z = move->yaw; + if (z > M_PI_F) + z -= M_2PI_F; + + mHead.z += z; + } + + // Constrain the range of mHead.z + while (mHead.z < 0.0f) + mHead.z += M_2PI_F; + while (mHead.z > M_2PI_F) + mHead.z -= M_2PI_F; + } + else + { + // Rotate body + mRot.z += (emove->rotZ[emoveIndex] - mLastAbsoluteYaw); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddYawToAbsRot()) + { + F32 z = move->yaw; + if (z > M_PI_F) + z -= M_2PI_F; + + mRot.z += z; + } + + // Constrain the range of mRot.z + while (mRot.z < 0.0f) + mRot.z += M_2PI_F; + while (mRot.z > M_2PI_F) + mRot.z -= M_2PI_F; + } + mLastAbsoluteYaw = emove->rotZ[emoveIndex]; + mLastAbsolutePitch = emove->rotX[emoveIndex]; + + // Head bank + mHead.y = emove->rotY[emoveIndex]; + + // Constrain the range of mHead.y + while (mHead.y > M_PI_F) + mHead.y -= M_2PI_F; + } + } +#endif + + MatrixF zRot; + zRot.set(EulerF(0.0f, 0.0f, mOwner->getRotation().asEulerF().z)); + + // Desired move direction & speed + VectorF moveVec; + F32 moveSpeed = mInputVelocity.len(); + + zRot.getColumn(0, &moveVec); + moveVec *= move->x; + VectorF tv; + zRot.getColumn(1, &tv); + moveVec += tv * move->y; + + // Acceleration due to gravity + VectorF acc(mPhysicsWorld->getGravity() * mGravityMod * TickSec); + + // Determine ground contact normal. Only look for contacts if + // we can move and aren't mounted. + mContactInfo.contactNormal = VectorF::Zero; + mContactInfo.jump = false; + mContactInfo.run = false; + + bool jumpSurface = false, runSurface = false; + if (!mOwner->isMounted()) + findContact(&mContactInfo.run, &mContactInfo.jump, &mContactInfo.contactNormal); + if (mContactInfo.jump) + mJumpSurfaceNormal = mContactInfo.contactNormal; + + // If we don't have a runSurface but we do have a contactNormal, + // then we are standing on something that is too steep. + // Deflect the force of gravity by the normal so we slide. + // We could also try aligning it to the runSurface instead, + // but this seems to work well. + if (!mContactInfo.run && !mContactInfo.contactNormal.isZero()) + acc = (acc - 2 * mContactInfo.contactNormal * mDot(acc, mContactInfo.contactNormal)); + + // Acceleration on run surface + if (mContactInfo.run && !mSwimming) + { + mContactTimer = 0; + + VectorF pv = moveVec; + + // Adjust the player's requested dir. to be parallel + // to the contact surface. + F32 pvl = pv.len(); + + // Convert to acceleration + if (pvl) + pv *= moveSpeed / pvl; + VectorF runAcc = pv - (mVelocity + acc); + F32 runSpeed = runAcc.len(); + + // Clamp acceleration, player also accelerates faster when + // in his hard landing recover state. + F32 maxAcc; + + maxAcc = (horizMaxAccel / mMass) * TickSec; + + if (runSpeed > maxAcc) + runAcc *= maxAcc / runSpeed; + + acc += runAcc; + } + else if (!mSwimming && airControl > 0.0f) + { + VectorF pv; + pv = moveVec; + F32 pvl = pv.len(); + + if (pvl) + pv *= moveSpeed / pvl; + + VectorF runAcc = pv - (mVelocity + acc); + runAcc.z = 0; + runAcc.x = runAcc.x * airControl; + runAcc.y = runAcc.y * airControl; + F32 runSpeed = runAcc.len(); + + // We don't test for sprinting when performing air control + F32 maxAcc = (horizMaxAccel / mMass) * TickSec * 0.3f; + + if (runSpeed > maxAcc) + runAcc *= maxAcc / runSpeed; + + acc += runAcc; + + // There are no special air control animations + // so... increment this unless you really want to + // play the run anims in the air. + mContactTimer++; + } + else if (mSwimming) + { + // Remove acc into contact surface (should only be gravity) + // Clear out floating point acc errors, this will allow + // the player to "rest" on the ground. + F32 vd = -mDot(acc, mContactInfo.contactNormal); + if (vd > 0.0f) + { + VectorF dv = mContactInfo.contactNormal * (vd + 0.002f); + acc += dv; + if (acc.len() < 0.0001f) + acc.set(0.0f, 0.0f, 0.0f); + } + + // get the head pitch and add it to the moveVec + // This more accurate swim vector calc comes from Matt Fairfax + MatrixF xRot, zRot; + xRot.set(EulerF(mOwner->getRotation().asEulerF().x, 0, 0)); + zRot.set(EulerF(0, 0, mOwner->getRotation().asEulerF().z)); + MatrixF rot; + rot.mul(zRot, xRot); + rot.getColumn(0, &moveVec); + + moveVec *= move->x; + VectorF tv; + rot.getColumn(1, &tv); + moveVec += tv * move->y; + rot.getColumn(2, &tv); + moveVec += tv * move->z; + + // Force a 0 move if there is no energy, and only drain + // move energy if we're moving. + VectorF swimVec = moveVec; + + // If we are swimming but close enough to the shore/ground + // we can still have a surface-normal. In this case align the + // velocity to the normal to make getting out of water easier. + + moveVec.normalize(); + F32 isSwimUp = mDot(moveVec, mContactInfo.contactNormal); + + if (!mContactInfo.contactNormal.isZero() && isSwimUp < 0.1f) + { + F32 pvl = swimVec.len(); + + if (pvl) + { + VectorF nn; + mCross(swimVec, VectorF(0.0f, 0.0f, 1.0f), &nn); + nn *= 1.0f / pvl; + VectorF cv = mContactInfo.contactNormal; + cv -= nn * mDot(nn, cv); + swimVec -= cv * mDot(swimVec, cv); + } + } + + F32 swimVecLen = swimVec.len(); + + // Convert to acceleration. + if (swimVecLen) + swimVec *= moveSpeed / swimVecLen; + VectorF swimAcc = swimVec - (mVelocity + acc); + F32 swimSpeed = swimAcc.len(); + + // Clamp acceleration. + F32 maxAcc = (horizMaxAccel / mMass) * TickSec; + if (swimSpeed > maxAcc) + swimAcc *= maxAcc / swimSpeed; + + acc += swimAcc; + + mContactTimer++; + } + else + mContactTimer++; + + // Add in force from physical zones... + acc += (mOwner->getContainerInfo().appliedForce / mMass) * TickSec; + + // Adjust velocity with all the move & gravity acceleration + // TG: I forgot why doesn't the TickSec multiply happen here... + mVelocity += acc; + + // apply horizontal air resistance + + F32 hvel = mSqrt(mVelocity.x * mVelocity.x + mVelocity.y * mVelocity.y); + + if (hvel > horizResistSpeed) + { + F32 speedCap = hvel; + if (speedCap > horizMaxSpeed) + speedCap = horizMaxSpeed; + speedCap -= horizResistFactor * TickSec * (speedCap - horizResistSpeed); + F32 scale = speedCap / hvel; + mVelocity.x *= scale; + mVelocity.y *= scale; + } + if (mVelocity.z > upResistSpeed) + { + if (mVelocity.z > upMaxSpeed) + mVelocity.z = upMaxSpeed; + mVelocity.z -= upResistFactor * TickSec * (mVelocity.z - upResistSpeed); + } + + // Apply drag + mVelocity -= mVelocity * mDrag * TickSec; + + // Clamp very small velocity to zero + if (mVelocity.isZero()) + mVelocity = Point3F::Zero; + + // If we are not touching anything and have sufficient -z vel, + // we are falling. + if (mContactInfo.run) + { + mFalling = false; + } + else + { + VectorF vel; + mOwner->getWorldToObj().mulV(mVelocity, &vel); + mFalling = vel.z < fallingSpeedThreshold; + } + + // Enter/Leave Liquid + if (!mInWater && mOwner->getContainerInfo().waterCoverage > 0.0f) + { + mInWater = true; + } + else if (mInWater && mOwner->getContainerInfo().waterCoverage <= 0.0f) + { + mInWater = false; + } +} + +void PlayerControllerComponent::updatePos(const F32 travelTime) +{ + if (!PHYSICSMGR) + return; + + PROFILE_SCOPE(PlayerControllerComponent_UpdatePos); + + Point3F newPos; + + Collision col; + dMemset(&col, 0, sizeof(col)); + + static CollisionList collisionList; + collisionList.clear(); + + newPos = mPhysicsRep->move(mVelocity * travelTime, collisionList); + + bool haveCollisions = false; + bool wasFalling = mFalling; + if (collisionList.getCount() > 0) + { + mFalling = false; + haveCollisions = true; + + //TODO: clean this up so the phys component doesn't have to tell the col interface to do this + CollisionInterface* colInterface = mOwner->getComponent(); + if (colInterface) + { + colInterface->handleCollisionList(collisionList, mVelocity); + } + } + + if (haveCollisions) + { + // Pick the collision that most closely matches our direction + VectorF velNormal = mVelocity; + velNormal.normalizeSafe(); + const Collision *collision = &collisionList[0]; + F32 collisionDot = mDot(velNormal, collision->normal); + const Collision *cp = collision + 1; + const Collision *ep = collision + collisionList.getCount(); + for (; cp != ep; cp++) + { + F32 dp = mDot(velNormal, cp->normal); + if (dp < collisionDot) + { + collisionDot = dp; + collision = cp; + } + } + + // Modify our velocity based on collisions + for (U32 i = 0; i 0) + col = collisionList[collisionList.getCount() - 1]; + + // We'll handle any player-to-player collision, and the last collision + // with other obejct types. + for (U32 i = 0; isetTransform(newMat); + + mOwner->setPosition(newPos); +} + +// +void PlayerControllerComponent::setVelocity(const VectorF& vel) +{ + mVelocity = vel; + + // Clamp against the maximum velocity. + if (mMaxVelocity > 0) + { + F32 len = mVelocity.magnitudeSafe(); + if (len > mMaxVelocity) + { + Point3F excess = mVelocity * (1.0f - (mMaxVelocity / len)); + mVelocity -= excess; + } + } + + setMaskBits(VelocityMask); +} + +void PlayerControllerComponent::findContact(bool *run, bool *jump, VectorF *contactNormal) +{ + SceneObject *contactObject = NULL; + + Vector overlapObjects; + + mPhysicsRep->findContact(&contactObject, contactNormal, &overlapObjects); + + F32 vd = (*contactNormal).z; + *run = vd > mCos(mDegToRad(moveSurfaceAngle)); + *jump = vd > mCos(mDegToRad(contactSurfaceAngle)); + + // Check for triggers + for (U32 i = 0; i < overlapObjects.size(); i++) + { + SceneObject *obj = overlapObjects[i]; + U32 objectMask = obj->getTypeMask(); + + // Check: triggers, corpses and items... + // + if (objectMask & TriggerObjectType) + { + if (Trigger* pTrigger = dynamic_cast(obj)) + { + pTrigger->potentialEnterObject(mOwner); + } + else if (CollisionTrigger* pTriggerEx = dynamic_cast(obj)) + { + if (pTriggerEx) + pTriggerEx->potentialEnterObject(mOwner); + } + //Add any other custom classes and the sort here that should be filtered against + /*else if (TriggerExample* pTriggerEx = dynamic_cast(obj)) + { + if (pTriggerEx) + pTriggerEx->potentialEnterObject(mOwner); + }*/ + } + } + + mContactInfo.contacted = contactObject != NULL; + mContactInfo.contactObject = contactObject; + + if (mContactInfo.contacted) + mContactInfo.contactNormal = *contactNormal; +} + +void PlayerControllerComponent::applyImpulse(const Point3F &pos, const VectorF &vec) +{ + + AssertFatal(!mIsNaN(vec), "Player::applyImpulse() - The vector is NaN!"); + + // Players ignore angular velocity + VectorF vel; + vel.x = vec.x / getMass(); + vel.y = vec.y / getMass(); + vel.z = vec.z / getMass(); + + // Make sure the impulse isn't too bigg + F32 len = vel.magnitudeSafe(); + if (len > sMaxImpulseVelocity) + { + Point3F excess = vel * (1.0f - (sMaxImpulseVelocity / len)); + vel -= excess; + } + + setVelocity(mVelocity + vel); +} + +DefineEngineMethod(PlayerControllerComponent, applyImpulse, bool, (Point3F pos, VectorF vel), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + object->applyImpulse(pos, vel); + return true; +} + +DefineEngineMethod(PlayerControllerComponent, getContactNormal, Point3F, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getContactNormal(); +} + +DefineEngineMethod(PlayerControllerComponent, getContactObject, SceneObject*, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getContactObject(); +} + +DefineEngineMethod(PlayerControllerComponent, isContacted, bool, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->isContacted(); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/physics/playerControllerComponent.h b/Engine/source/T3D/components/physics/playerControllerComponent.h new file mode 100644 index 0000000000..49d4c175ce --- /dev/null +++ b/Engine/source/T3D/components/physics/playerControllerComponent.h @@ -0,0 +1,212 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef PLAYER_CONTORLLER_COMPONENT_H +#define PLAYER_CONTORLLER_COMPONENT_H + +#ifndef PHYSICSBEHAVIOR_H +#include "T3D/components/physics/physicsBehavior.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _BOXCONVEX_H_ +#include "collision/boxConvex.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSWORLD_H_ +#include "T3D/physics/physicsWorld.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/components/physics/physicsComponentInterface.h" +#endif +#ifndef COLLISION_INTERFACES_H +#include "T3D/components/collision/collisionInterfaces.h" +#endif + +class SceneRenderState; +class PhysicsWorld; +class PhysicsPlayer; +class SimplePhysicsBehaviorInstance; +class CollisionInterface; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class PlayerControllerComponent : public Component, + public PhysicsComponentInterface +{ + typedef Component Parent; + + enum MaskBits { + VelocityMask = Parent::NextFreeMask << 0, + PositionMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2 + }; + + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + StateDelta mDelta; + + PhysicsPlayer *mPhysicsRep; + PhysicsWorld *mPhysicsWorld; + + CollisionInterface* mOwnerCollisionInterface; + + struct ContactInfo + { + bool contacted, jump, run; + SceneObject *contactObject; + VectorF contactNormal; + F32 contactTime; + + void clear() + { + contacted = jump = run = false; + contactObject = NULL; + contactNormal.set(1, 1, 1); + } + + ContactInfo() { clear(); } + + } mContactInfo; + +protected: + F32 mDrag; + F32 mBuoyancy; + F32 mFriction; + F32 mElasticity; + F32 mMaxVelocity; + bool mSticky; + + bool mFalling; + bool mSwimming; + bool mInWater; + + S32 mContactTimer; ///< Ticks since last contact + + U32 mIntegrationCount; + + Point3F mJumpSurfaceNormal; ///< Normal of the surface the player last jumped on + + F32 maxStepHeight; ///< Maximum height the player can step up + F32 moveSurfaceAngle; ///< Maximum angle from vertical in degrees the player can run up + F32 contactSurfaceAngle; ///< Maximum angle from vertical in degrees we consider having real 'contact' + + F32 horizMaxSpeed; ///< Max speed attainable in the horizontal + F32 horizMaxAccel; + F32 horizResistSpeed; ///< Speed at which resistance will take place + F32 horizResistFactor; ///< Factor of resistance once horizResistSpeed has been reached + + F32 upMaxSpeed; ///< Max vertical speed attainable + F32 upMaxAccel; + F32 upResistSpeed; ///< Speed at which resistance will take place + F32 upResistFactor; ///< Factor of resistance once upResistSpeed has been reached + + F32 fallingSpeedThreshold; ///< Downward speed at which we consider the player falling + + // Air control + F32 airControl; + + Point3F mInputVelocity; + + bool mUseDirectMoveInput; + +public: + PlayerControllerComponent(); + virtual ~PlayerControllerComponent(); + DECLARE_CONOBJECT(PlayerControllerComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + void updatePhysics(PhysicsCollision *collision = NULL); + + virtual void processTick(); + virtual void interpolateTick(F32 dt); + virtual void updatePos(const F32 dt); + void updateMove(); + + virtual VectorF getVelocity() { return mVelocity; } + virtual void setVelocity(const VectorF& vel); + virtual void setTransform(const MatrixF& mat); + + void findContact(bool *run, bool *jump, VectorF *contactNormal); + Point3F getContactNormal() { return mContactInfo.contactNormal; } + SceneObject* getContactObject() { return mContactInfo.contactObject; } + bool isContacted() { return mContactInfo.contacted; } + + // + void applyImpulse(const Point3F &pos, const VectorF &vec); + + //This is a weird artifact of the PhysicsReps. We want the collision component to be privvy to any events that happen + //so when the physics components do a findContact test during their update, they'll have a signal collision components + //can be listening to to update themselves with that info + Signal< void(SceneObject*) > onContactSignal; + + // + DECLARE_CALLBACK(void, updateMove, (PlayerControllerComponent* obj)); +}; + +#endif // _COMPONENT_H_ diff --git a/Engine/source/T3D/components/physics/rigidBodyComponent.cpp b/Engine/source/T3D/components/physics/rigidBodyComponent.cpp new file mode 100644 index 0000000000..21e9ecdbe5 --- /dev/null +++ b/Engine/source/T3D/components/physics/rigidBodyComponent.cpp @@ -0,0 +1,467 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "T3D/components/physics/rigidBodyComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsWorld.h" +#include "T3D/physics/physicsCollision.h" +#include "T3D/components/collision/collisionComponent.h" + +bool RigidBodyComponent::smNoCorrections = false; +bool RigidBodyComponent::smNoSmoothing = false; + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +RigidBodyComponent::RigidBodyComponent() : Component() +{ + mMass = 20; + mDynamicFriction = 1; + mStaticFriction = 0.1f; + mRestitution = 10; + mLinearDamping = 0; + mAngularDamping = 0; + mLinearSleepThreshold = 1; + mAngularSleepThreshold = 1; + mWaterDampingScale = 0.1f; + mBuoyancyDensity = 1; + + mSimType = SimType_ServerOnly; + + mPhysicsRep = NULL; + mResetPos = MatrixF::Identity; + + mOwnerColComponent = NULL; + + mFriendlyName = "RigidBody(Component)"; +} + +RigidBodyComponent::~RigidBodyComponent() +{ +} + +IMPLEMENT_CO_NETOBJECT_V1(RigidBodyComponent); + +bool RigidBodyComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void RigidBodyComponent::onRemove() +{ + Parent::onRemove(); +} +void RigidBodyComponent::initPersistFields() +{ + Parent::initPersistFields(); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void RigidBodyComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + if (isServerObject()) + { + storeRestorePos(); + PhysicsPlugin::getPhysicsResetSignal().notify(this, &RigidBodyComponent::_onPhysicsReset); + } + + CollisionComponent *colComp = mOwner->getComponent(); + if (colComp) + { + colComp->onCollisionChanged.notify(this, &RigidBodyComponent::updatePhysics); + updatePhysics(colComp->getCollisionData()); + } + else + updatePhysics(); +} + +void RigidBodyComponent::onComponentRemove() +{ + Parent::onComponentRemove(); + + if (isServerObject()) + { + PhysicsPlugin::getPhysicsResetSignal().remove(this, &RigidBodyComponent::_onPhysicsReset); + } + + CollisionComponent *colComp = mOwner->getComponent(); + if (colComp) + { + colComp->onCollisionChanged.remove(this, &RigidBodyComponent::updatePhysics); + } + + SAFE_DELETE(mPhysicsRep); +} + +void RigidBodyComponent::componentAddedToOwner(Component *comp) +{ + CollisionComponent *colComp = dynamic_cast(comp); + if (colComp) + { + colComp->onCollisionChanged.notify(this, &RigidBodyComponent::updatePhysics); + updatePhysics(colComp->getCollisionData()); + } +} + +void RigidBodyComponent::componentRemovedFromOwner(Component *comp) +{ + //test if this is a shape component! + CollisionComponent *colComp = dynamic_cast(comp); + if (colComp) + { + colComp->onCollisionChanged.remove(this, &RigidBodyComponent::updatePhysics); + updatePhysics(); + } +} + +void RigidBodyComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void RigidBodyComponent::updatePhysics(PhysicsCollision* collision) +{ + SAFE_DELETE(mPhysicsRep); + + if (!PHYSICSMGR) + return; + + mWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + if (!collision) + return; + + mPhysicsRep = PHYSICSMGR->createBody(); + + mPhysicsRep->init(collision, mMass, 0, mOwner, mWorld); + + mPhysicsRep->setMaterial(mRestitution, mDynamicFriction, mStaticFriction); + + mPhysicsRep->setDamping(mLinearDamping, mAngularDamping); + mPhysicsRep->setSleepThreshold(mLinearSleepThreshold, mAngularSleepThreshold); + + mPhysicsRep->setTransform(mOwner->getTransform()); + + // The reset position is the transform on the server + // at creation time... its not used on the client. + if (isServerObject()) + { + storeRestorePos(); + PhysicsPlugin::getPhysicsResetSignal().notify(this, &RigidBodyComponent::_onPhysicsReset); + } +} + +U32 RigidBodyComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & StateMask)) + { + // This will encode the position relative to the control + // object position. + // + // This will compress the position to as little as 6.25 + // bytes if the position is within about 30 meters of the + // control object. + // + // Worst case its a full 12 bytes + 2 bits if the position + // is more than 500 meters from the control object. + // + stream->writeCompressedPoint(mState.position); + + // Use only 3.5 bytes to send the orientation. + stream->writeQuat(mState.orientation, 9); + + // If the server object has been set to sleep then + // we don't need to send any velocity. + if (!stream->writeFlag(mState.sleeping)) + { + // This gives me ~0.015f resolution in velocity magnitude + // while only costing me 1 bit of the velocity is zero length, + // <5 bytes in normal cases, and <8 bytes if the velocity is + // greater than 1000. + AssertWarn(mState.linVelocity.len() < 1000.0f, + "PhysicsShape::packUpdate - The linVelocity is out of range!"); + stream->writeVector(mState.linVelocity, 1000.0f, 16, 9); + + // For angular velocity we get < 0.01f resolution in magnitude + // with the most common case being under 4 bytes. + AssertWarn(mState.angVelocity.len() < 10.0f, + "PhysicsShape::packUpdate - The angVelocity is out of range!"); + stream->writeVector(mState.angVelocity, 10.0f, 10, 9); + } + } + + return retMask; +} + +void RigidBodyComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) // StateMask + { + PhysicsState state; + + // Read the encoded and compressed position... commonly only 6.25 bytes. + stream->readCompressedPoint(&state.position); + + // Read the compressed quaternion... 3.5 bytes. + stream->readQuat(&state.orientation, 9); + + state.sleeping = stream->readFlag(); + if (!state.sleeping) + { + stream->readVector(&state.linVelocity, 1000.0f, 16, 9); + stream->readVector(&state.angVelocity, 10.0f, 10, 9); + } + + if (!smNoCorrections && mPhysicsRep && mPhysicsRep->isDynamic()) + { + // Set the new state on the physics object immediately. + mPhysicsRep->applyCorrection(state.getTransform()); + + mPhysicsRep->setSleeping(state.sleeping); + if (!state.sleeping) + { + mPhysicsRep->setLinVelocity(state.linVelocity); + mPhysicsRep->setAngVelocity(state.angVelocity); + } + + mPhysicsRep->getState(&mState); + } + + // If there is no physics object then just set the + // new state... the tick will take care of the + // interpolation and extrapolation. + if (!mPhysicsRep || !mPhysicsRep->isDynamic()) + mState = state; + } +} + +void RigidBodyComponent::processTick() +{ + Parent::processTick(); + + if (!mPhysicsRep || !PHYSICSMGR) + return; + + // Note that unlike TSStatic, the serverside PhysicsShape does not + // need to play the ambient animation because even if the animation were + // to move collision shapes it would not affect the physx representation. + + PROFILE_START(RigidBodyComponent_ProcessTick); + + if (!mPhysicsRep->isDynamic()) + return; + + // SINGLE PLAYER HACK!!!! + if (PHYSICSMGR->isSinglePlayer() && isClientObject() && getServerObject()) + { + RigidBodyComponent *servObj = (RigidBodyComponent*)getServerObject(); + mOwner->setTransform(servObj->mState.getTransform()); + mRenderState[0] = servObj->mRenderState[0]; + mRenderState[1] = servObj->mRenderState[1]; + + return; + } + + // Store the last render state. + mRenderState[0] = mRenderState[1]; + + // If the last render state doesn't match the last simulation + // state then we got a correction and need to + Point3F errorDelta = mRenderState[1].position - mState.position; + const bool doSmoothing = !errorDelta.isZero() && !smNoSmoothing; + + const bool wasSleeping = mState.sleeping; + + // Get the new physics state. + mPhysicsRep->getState(&mState); + updateContainerForces(); + + // Smooth the correction back into the render state. + mRenderState[1] = mState; + if (doSmoothing) + { + F32 correction = mClampF(errorDelta.len() / 20.0f, 0.1f, 0.9f); + mRenderState[1].position.interpolate(mState.position, mRenderState[0].position, correction); + mRenderState[1].orientation.interpolate(mState.orientation, mRenderState[0].orientation, correction); + } + + //Check if any collisions occured + findContact(); + + // If we haven't been sleeping then update our transform + // and set ourselves as dirty for the next client update. + if (!wasSleeping || !mState.sleeping) + { + // Set the transform on the parent so that + // the physics object isn't moved. + mOwner->setTransform(mState.getTransform()); + + // If we're doing server simulation then we need + // to send the client a state update. + if (isServerObject() && mPhysicsRep && !smNoCorrections && + !PHYSICSMGR->isSinglePlayer() // SINGLE PLAYER HACK!!!! + ) + setMaskBits(StateMask); + } + + PROFILE_END(); +} + +void RigidBodyComponent::findContact() +{ + SceneObject *contactObject = NULL; + + VectorF *contactNormal = new VectorF(0, 0, 0); + + Vector overlapObjects; + + mPhysicsRep->findContact(&contactObject, contactNormal, &overlapObjects); + + if (!overlapObjects.empty()) + { + //fire our signal that the physics sim said collisions happened + onPhysicsCollision.trigger(*contactNormal, overlapObjects); + } +} + +void RigidBodyComponent::_onPhysicsReset(PhysicsResetEvent reset) +{ + if (reset == PhysicsResetEvent_Store) + mResetPos = mOwner->getTransform(); + + else if (reset == PhysicsResetEvent_Restore) + { + mOwner->setTransform(mResetPos); + } +} + +void RigidBodyComponent::storeRestorePos() +{ + mResetPos = mOwner->getTransform(); +} + +void RigidBodyComponent::applyImpulse(const Point3F &pos, const VectorF &vec) +{ + if (mPhysicsRep && mPhysicsRep->isDynamic()) + mPhysicsRep->applyImpulse(pos, vec); +} + +void RigidBodyComponent::applyRadialImpulse(const Point3F &origin, F32 radius, F32 magnitude) +{ + if (!mPhysicsRep || !mPhysicsRep->isDynamic()) + return; + + // TODO: Find a better approximation of the + // force vector using the object box. + + VectorF force = mOwner->getWorldBox().getCenter() - origin; + F32 dist = force.magnitudeSafe(); + force.normalize(); + + if (dist == 0.0f) + force *= magnitude; + else + force *= mClampF(radius / dist, 0.0f, 1.0f) * magnitude; + + mPhysicsRep->applyImpulse(origin, force); + + // TODO: There is no simple way to really sync this sort of an + // event with the client. + // + // The best is to send the current physics snapshot, calculate the + // time difference from when this event occured and the time when the + // client recieves it, and then extrapolate where it should be. + // + // Even then its impossible to be absolutely sure its synced. + // + // Bottom line... you shouldn't use physics over the network like this. + // +} + +void RigidBodyComponent::updateContainerForces() +{ + PROFILE_SCOPE(RigidBodyComponent_updateContainerForces); + + // If we're not simulating don't update forces. + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + if (!world || !world->isEnabled()) + return; + + ContainerQueryInfo info; + info.box = mOwner->getWorldBox(); + info.mass = mMass; + + // Find and retreive physics info from intersecting WaterObject(s) + mOwner->getContainer()->findObjects(mOwner->getWorldBox(), WaterObjectType | PhysicalZoneObjectType, findRouter, &info); + + // Calculate buoyancy and drag + F32 angDrag = mAngularDamping; + F32 linDrag = mLinearDamping; + F32 buoyancy = 0.0f; + Point3F cmass = mPhysicsRep->getCMassPosition(); + + F32 density = mBuoyancyDensity; + if (density > 0.0f) + { + if (info.waterCoverage > 0.0f) + { + F32 waterDragScale = info.waterViscosity * mWaterDampingScale; + F32 powCoverage = mPow(info.waterCoverage, 0.25f); + + angDrag = mLerp(angDrag, angDrag * waterDragScale, powCoverage); + linDrag = mLerp(linDrag, linDrag * waterDragScale, powCoverage); + } + + buoyancy = (info.waterDensity / density) * mPow(info.waterCoverage, 2.0f); + + // A little hackery to prevent oscillation + // Based on this blog post: + // (http://reinot.blogspot.com/2005/11/oh-yes-they-float-georgie-they-all.html) + // JCF: disabled! + Point3F buoyancyForce = buoyancy * -world->getGravity() * TickSec * mMass; + mPhysicsRep->applyImpulse(cmass, buoyancyForce); + } + + // Update the dampening as the container might have changed. + mPhysicsRep->setDamping(linDrag, angDrag); + + // Apply physical zone forces. + if (!info.appliedForce.isZero()) + mPhysicsRep->applyImpulse(cmass, info.appliedForce); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/physics/rigidBodyComponent.h b/Engine/source/T3D/components/physics/rigidBodyComponent.h new file mode 100644 index 0000000000..4bbe1f9274 --- /dev/null +++ b/Engine/source/T3D/components/physics/rigidBodyComponent.h @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef RIGID_BODY_COMPONENT_H +#define RIGID_BODY_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef COLLISION_COMPONENT_H +#include "T3D/components/collision/collisionComponent.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/components/physics/physicsComponentInterface.h" +#endif + +class PhysicsBody; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class RigidBodyComponent : public Component, public PhysicsComponentInterface +{ + typedef Component Parent; + + enum SimType + { + /// This physics representation only exists on the client + /// world and the server only does ghosting. + SimType_ClientOnly, + + /// The physics representation only exists on the server world + /// and the client gets delta updates for rendering. + SimType_ServerOnly, + + /// The physics representation exists on the client and the server + /// worlds with corrections occuring when the client gets out of sync. + SimType_ClientServer, + + /// The bits used to pack the SimType field. + SimType_Bits = 3, + + } mSimType; + + // + // + /// The current physics state. + PhysicsState mState; + + /// The previous and current render states. + PhysicsState mRenderState[2]; + + /// The abstracted physics actor. + PhysicsBody *mPhysicsRep; + + PhysicsWorld *mWorld; + + /// The starting position to place the shape when + /// the level begins or is reset. + MatrixF mResetPos; + // + // + + /// If true then no corrections are sent from the server + /// and/or applied from the client. + /// + /// This is only ment for debugging. + /// + static bool smNoCorrections; + + /// If true then no smoothing is done on the client when + /// applying server corrections. + /// + /// This is only ment for debugging. + /// + static bool smNoSmoothing; + + /// + F32 mMass; + + /// + F32 mDynamicFriction; + + /// + F32 mStaticFriction; + + /// + F32 mRestitution; + + /// + F32 mLinearDamping; + + /// + F32 mAngularDamping; + + /// + F32 mLinearSleepThreshold; + + /// + F32 mAngularSleepThreshold; + + // A scale applied to the normal linear and angular damping + // when the object enters a water volume. + F32 mWaterDampingScale; + + // The density of this object used for water buoyancy effects. + F32 mBuoyancyDensity; + + CollisionComponent* mOwnerColComponent; + + enum MaskBits { + PositionMask = Parent::NextFreeMask << 0, + FreezeMask = Parent::NextFreeMask << 1, + StateMask = Parent::NextFreeMask << 2, + VelocityMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + +public: + RigidBodyComponent(); + virtual ~RigidBodyComponent(); + DECLARE_CONOBJECT(RigidBodyComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + inline F32 getMass() { return mMass; } + Point3F getVelocity() const { return mState.linVelocity; } + void applyImpulse(const Point3F &pos, const VectorF &vec); + void applyRadialImpulse(const Point3F &origin, F32 radius, F32 magnitude); + + void updateContainerForces(); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); + + void findContact(); + + /// Save the current transform as where we return to when a physics reset + /// event occurs. This is automatically set in onAdd but some manipulators + /// such as Prefab need to make use of this. + void storeRestorePos(); + + void updatePhysics(PhysicsCollision *collision = NULL); + + void _onPhysicsReset(PhysicsResetEvent reset); +}; + +#endif // _RIGID_BODY_COMPONENT_H_ diff --git a/Engine/source/T3D/components/render/meshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp new file mode 100644 index 0000000000..708a48ae17 --- /dev/null +++ b/Engine/source/T3D/components/render/meshComponent.cpp @@ -0,0 +1,530 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "console/consoleTypes.h" +#include "T3D/components/render/meshComponent.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "sim/netConnection.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "scene/sceneManager.h" +#include "gfx/bitmap/ddsFile.h" +#include "gfx/bitmap/ddsUtils.h" +#include "gfx/gfxTextureManager.h" +#include "materials/materialFeatureTypes.h" +#include "renderInstance/renderImposterMgr.h" +#include "util/imposterCapture.h" +#include "gfx/sim/debugDraw.h" +#include "gfx/gfxDrawUtil.h" +#include "materials/materialManager.h" +#include "materials/matInstance.h" +#include "core/strings/findMatch.h" +#include "T3D/components/render/meshComponent_ScriptBinding.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +MeshComponent::MeshComponent() : Component() +{ + mShapeName = StringTable->insert(""); + mShapeAsset = StringTable->insert(""); + mShapeInstance = NULL; + + mChangingMaterials.clear(); + + mMaterials.clear(); + + mFriendlyName = "Mesh Component"; + mComponentType = "Render"; + + mDescription = getDescriptionText("Causes the object to render a non-animating 3d shape using the file provided."); + + mNetworked = true; + mNetFlags.set(Ghostable | ScopeAlways); +} + +MeshComponent::~MeshComponent(){} + +IMPLEMENT_CO_NETOBJECT_V1(MeshComponent); + +//========================================================================================== +void MeshComponent::boneObject::addObject(SimObject* object) +{ + SceneObject* sc = dynamic_cast(object); + + if(sc && mOwner) + { + if(TSShape* shape = mOwner->getShape()) + { + S32 nodeID = shape->findNode(mBoneName); + + //we may have a offset on the shape's center + //so make sure we accomodate for that when setting up the mount offsets + MatrixF mat = mOwner->getNodeTransform(nodeID); + + mOwner->getOwner()->mountObject(sc, nodeID, mat); + } + } +} + +bool MeshComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + // Register for the resource change signal. + ResourceManager::get().getChangedSignal().notify( this, &MeshComponent::_onResourceChanged ); + + return true; +} + +void MeshComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + //get the default shape, if any + updateShape(); +} + +void MeshComponent::onRemove() +{ + Parent::onRemove(); + + mMeshAsset.clear(); + + SAFE_DELETE(mShapeInstance); +} + +void MeshComponent::onComponentRemove() +{ + if(mOwner) + { + Point3F pos = mOwner->getPosition(); //store our center pos + mOwner->setObjectBox(Box3F(Point3F(-1,-1,-1), Point3F(1,1,1))); + mOwner->setPosition(pos); + } + + Parent::onComponentRemove(); +} + +void MeshComponent::initPersistFields() +{ + Parent::initPersistFields(); + + //create a hook to our internal variables + addGroup("Model"); + addProtectedField("MeshAsset", TypeAssetId, Offset(mShapeAsset, MeshComponent), &_setMesh, &defaultProtectedGetFn, + "The asset Id used for the mesh.", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors); + endGroup("Model"); +} + +bool MeshComponent::_setMesh(void *object, const char *index, const char *data) +{ + MeshComponent *rbI = static_cast(object); + + // Sanity! + AssertFatal(data != NULL, "Cannot use a NULL asset Id."); + + return rbI->setMeshAsset(data); +} + +bool MeshComponent::_setShape( void *object, const char *index, const char *data ) +{ + MeshComponent *rbI = static_cast(object); + rbI->mShapeName = StringTable->insert(data); + rbI->updateShape(); //make sure we force the update to resize the owner bounds + rbI->setMaskBits(ShapeMask); + + return true; +} + +bool MeshComponent::setMeshAsset(const char* assetName) +{ + // Fetch the asset Id. + mMeshAssetId = StringTable->insert(assetName); + + mMeshAsset = mMeshAssetId; + + if (mMeshAsset.isNull()) + { + Con::errorf("[MeshComponent] Failed to load mesh asset."); + return false; + } + + mShapeName = mMeshAssetId; + mShapeAsset = mShapeName; + updateShape(); //make sure we force the update to resize the owner bounds + setMaskBits(ShapeMask); + + return true; +} + +void MeshComponent::_onResourceChanged( const Torque::Path &path ) +{ + if ( path != Torque::Path( mShapeName ) ) + return; + + updateShape(); + setMaskBits(ShapeMask); +} + +void MeshComponent::inspectPostApply() +{ + Parent::inspectPostApply(); +} + +U32 MeshComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (!mOwner || con->getGhostIndex(mOwner) == -1) + { + stream->writeFlag(false); + stream->writeFlag(false); + + if (mask & ShapeMask) + retMask |= ShapeMask; + if (mask & MaterialMask) + retMask |= MaterialMask; + return retMask; + } + + if (stream->writeFlag(mask & ShapeMask)) + { + stream->writeString(mShapeName); + } + + if (stream->writeFlag( mask & MaterialMask )) + { + stream->writeInt(mChangingMaterials.size(), 16); + + for(U32 i=0; i < mChangingMaterials.size(); i++) + { + stream->writeInt(mChangingMaterials[i].slot, 16); + + NetStringHandle matNameStr = mChangingMaterials[i].matName.c_str(); + con->packNetStringHandleU(stream, matNameStr); + } + + mChangingMaterials.clear(); + } + + return retMask; +} + +void MeshComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if(stream->readFlag()) + { + mShapeName = stream->readSTString(); + setMeshAsset(mShapeName); + updateShape(); + } + + if(stream->readFlag()) + { + mChangingMaterials.clear(); + U32 materialCount = stream->readInt(16); + + for(U32 i=0; i < materialCount; i++) + { + matMap newMatMap; + newMatMap.slot = stream->readInt(16); + newMatMap.matName = String(con->unpackNetStringHandleU(stream).getString()); + + mChangingMaterials.push_back(newMatMap); + } + + updateMaterials(); + } +} + +void MeshComponent::prepRenderImage( SceneRenderState *state ) +{ + if (!mEnabled || !mOwner || !mShapeInstance) + return; + + Point3F cameraOffset; + mOwner->getRenderTransform().getColumn(3, &cameraOffset); + cameraOffset -= state->getDiffuseCameraPosition(); + F32 dist = cameraOffset.len(); + if (dist < 0.01f) + dist = 0.01f; + + Point3F objScale = getOwner()->getScale(); + F32 invScale = (1.0f / getMax(getMax(objScale.x, objScale.y), objScale.z)); + + mShapeInstance->setDetailFromDistance(state, dist * invScale); + + if (mShapeInstance->getCurrentDetail() < 0) + return; + + GFXTransformSaver saver; + + // Set up our TS render state. + TSRenderState rdata; + rdata.setSceneState(state); + rdata.setFadeOverride(1.0f); + rdata.setOriginSort(false); + + // We might have some forward lit materials + // so pass down a query to gather lights. + LightQuery query; + query.init(mOwner->getWorldSphere()); + rdata.setLightQuery(&query); + + MatrixF mat = mOwner->getRenderTransform(); + Point3F renderPos = mat.getPosition(); + EulerF renderRot = mat.toEuler(); + mat.scale(objScale); + GFX->setWorldMatrix(mat); + + mShapeInstance->render(rdata); +} + +void MeshComponent::updateShape() +{ + bool isServer = isServerObject(); + + if ((mShapeName && mShapeName[0] != '\0') || (mShapeAsset && mShapeAsset[0] != '\0')) + { + if (mMeshAsset == NULL) + return; + + mShape = mMeshAsset->getShape(); + + if (!mShape) + return; + + setupShape(); + + //Do this on both the server and client + S32 materialCount = mShape->materialList->getMaterialNameList().size(); + + if(isServerObject()) + { + //we need to update the editor + for (U32 i = 0; i < mFields.size(); i++) + { + //find any with the materialslot title and clear them out + if (FindMatch::isMatch("MaterialSlot*", mFields[i].mFieldName, false)) + { + setDataField(mFields[i].mFieldName, NULL, ""); + mFields.erase(i); + continue; + } + } + + //next, get a listing of our materials in the shape, and build our field list for them + char matFieldName[128]; + + if(materialCount > 0) + mComponentGroup = StringTable->insert("Materials"); + + for(U32 i=0; i < materialCount; i++) + { + String materialname = mShape->materialList->getMaterialName(i); + if(materialname == String("ShapeBounds")) + continue; + + dSprintf(matFieldName, 128, "MaterialSlot%d", i); + + addComponentField(matFieldName, "A material used in the shape file", "TypeAssetId", materialname, ""); + } + + if(materialCount > 0) + mComponentGroup = ""; + } + + if(mOwner != NULL) + { + Point3F min, max, pos; + pos = mOwner->getPosition(); + + mOwner->getWorldToObj().mulP(pos); + + min = mShape->bounds.minExtents; + max = mShape->bounds.maxExtents; + + mShapeBounds.set(min, max); + + mOwner->setObjectBox(Box3F(min, max)); + + if( mOwner->getSceneManager() != NULL ) + mOwner->getSceneManager()->notifyObjectDirty( mOwner ); + } + + //finally, notify that our shape was changed + onShapeInstanceChanged.trigger(this); + } +} + +void MeshComponent::setupShape() +{ + mShapeInstance = new TSShapeInstance(mShape, true); +} + +void MeshComponent::updateMaterials() +{ + if (mChangingMaterials.empty() || !mShape) + return; + + TSMaterialList* pMatList = mShapeInstance->getMaterialList(); + pMatList->setTextureLookupPath(getShapeResource().getPath().getPath()); + + const Vector &materialNames = pMatList->getMaterialNameList(); + for ( S32 i = 0; i < materialNames.size(); i++ ) + { + const String &pName = materialNames[i]; + + for(U32 m=0; m < mChangingMaterials.size(); m++) + { + if(mChangingMaterials[m].slot == i) + { + pMatList->renameMaterial( i, mChangingMaterials[m].matName ); + } + } + + mChangingMaterials.clear(); + } + + // Initialize the material instances + mShapeInstance->initMaterialList(); +} + +MatrixF MeshComponent::getNodeTransform(S32 nodeIdx) +{ + if (mShape) + { + S32 nodeCount = getShape()->nodes.size(); + + if(nodeIdx >= 0 && nodeIdx < nodeCount) + { + //animate(); + MatrixF mountTransform = mShapeInstance->mNodeTransforms[nodeIdx]; + mountTransform.mul(mOwner->getRenderTransform()); + + return mountTransform; + } + } + + return MatrixF::Identity; +} + +S32 MeshComponent::getNodeByName(String nodeName) +{ + if (mShape) + { + S32 nodeIdx = getShape()->findNode(nodeName); + + return nodeIdx; + } + + return -1; +} + +bool MeshComponent::castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info) +{ + return false; +} + +void MeshComponent::mountObjectToNode(SceneObject* objB, String node, MatrixF txfm) +{ + const char* test; + test = node.c_str(); + if(dIsdigit(test[0])) + { + getOwner()->mountObject(objB, dAtoi(node), txfm); + } + else + { + if(TSShape* shape = getShape()) + { + S32 idx = shape->findNode(node); + getOwner()->mountObject(objB, idx, txfm); + } + } +} + +void MeshComponent::onDynamicModified(const char* slotName, const char* newValue) +{ + if(FindMatch::isMatch( "materialslot*", slotName, false )) + { + if(!getShape()) + return; + + S32 slot = -1; + String outStr( String::GetTrailingNumber( slotName, slot ) ); + + if(slot == -1) + return; + + bool found = false; + for(U32 i=0; i < mChangingMaterials.size(); i++) + { + if(mChangingMaterials[i].slot == slot) + { + mChangingMaterials[i].matName = String(newValue); + found = true; + } + } + + if(!found) + { + matMap newMatMap; + newMatMap.slot = slot; + newMatMap.matName = String(newValue); + + mChangingMaterials.push_back(newMatMap); + } + + setMaskBits(MaterialMask); + } + + Parent::onDynamicModified(slotName, newValue); +} + +void MeshComponent::changeMaterial(U32 slot, const char* newMat) +{ + + char fieldName[512]; + + //update our respective field + dSprintf(fieldName, 512, "materialSlot%d", slot); + setDataField(fieldName, NULL, newMat); +} + +void MeshComponent::onInspect() +{ +} + +void MeshComponent::onEndInspect() +{ +} \ No newline at end of file diff --git a/Engine/source/T3D/components/render/meshComponent.h b/Engine/source/T3D/components/render/meshComponent.h new file mode 100644 index 0000000000..6adc2633e3 --- /dev/null +++ b/Engine/source/T3D/components/render/meshComponent.h @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATIC_MESH_COMPONENT_H +#define STATIC_MESH_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/entity.h" +#endif +#ifndef _NETSTRINGTABLE_H_ + #include "sim/netStringTable.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/components/render/renderComponentInterface.h" +#endif +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif +#ifndef _SHAPE_ASSET_H_ +#include "T3D/assets/ShapeAsset.h" +#endif +#ifndef _GFXVERTEXFORMAT_H_ +#include "gfx/gfxVertexFormat.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class MeshComponent : public Component, + public RenderComponentInterface, + public CastRayRenderedInterface, + public EditorInspectInterface +{ + typedef Component Parent; + +protected: + enum + { + ShapeMask = Parent::NextFreeMask, + MaterialMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2, + }; + + StringTableEntry mShapeName; + StringTableEntry mShapeAsset; + TSShape* mShape; + Box3F mShapeBounds; + Point3F mCenterOffset; + + struct matMap + { + String matName; + U32 slot; + }; + + Vector mChangingMaterials; + Vector mMaterials; + + class boneObject : public SimGroup + { + MeshComponent *mOwner; + public: + boneObject(MeshComponent *owner){ mOwner = owner; } + + StringTableEntry mBoneName; + S32 mItemID; + + virtual void addObject(SimObject *obj); + }; + + Vector mNodesList; + +public: + StringTableEntry mMeshAssetId; + AssetPtr mMeshAsset; + + TSShapeInstance* mShapeInstance; + +public: + MeshComponent(); + virtual ~MeshComponent(); + DECLARE_CONOBJECT(MeshComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void inspectPostApply(); + + virtual void prepRenderImage(SceneRenderState *state); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + Box3F getShapeBounds() { return mShapeBounds; } + + virtual MatrixF getNodeTransform(S32 nodeIdx); + S32 getNodeByName(String nodeName); + + void setupShape(); + void updateShape(); + void updateMaterials(); + + virtual void onComponentRemove(); + virtual void onComponentAdd(); + + static bool _setMesh(void *object, const char *index, const char *data); + static bool _setShape(void *object, const char *index, const char *data); + const char* _getShape(void *object, const char *data); + + bool setMeshAsset(const char* assetName); + + virtual TSShape* getShape() { if (mMeshAsset) return mMeshAsset->getShape(); else return NULL; } + virtual TSShapeInstance* getShapeInstance() { return mShapeInstance; } + + Resource getShapeResource() { return mMeshAsset->getShapeResource(); } + + void _onResourceChanged(const Torque::Path &path); + + virtual bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info); + + void mountObjectToNode(SceneObject* objB, String node, MatrixF txfm); + + virtual void onDynamicModified(const char* slotName, const char* newValue); + + void changeMaterial(U32 slot, const char* newMat); + + virtual void onInspect(); + virtual void onEndInspect(); + + virtual Vector getNodeTransforms() + { + Vector bob; + return bob; + } + + virtual void setNodeTransforms(Vector transforms) + { + return; + } +}; + +#endif diff --git a/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h b/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h new file mode 100644 index 0000000000..5a19b8f088 --- /dev/null +++ b/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h @@ -0,0 +1,155 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "T3D/components/render/meshComponent.h" +#include "scene/sceneObject.h" +#include "math/mTransform.h" + +DefineEngineMethod(MeshComponent, getShapeBounds, Box3F, (), , + "@brief Get the cobject we're in contact with.\n\n" + + "The controlling client is the one that will send moves to us to act on.\n" + + "@return the ID of the controlling GameConnection, or 0 if this object is not " + "controlled by any client.\n" + + "@see GameConnection\n") +{ + return object->getShapeBounds(); +} + +DefineEngineMethod(MeshComponent, mountObject, bool, + (SceneObject* objB, String node, TransformF txfm), (MatrixF::Identity), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (objB) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + object->mountObjectToNode(objB, node, /*MatrixF::Identity*/txfm.getMatrix()); + return true; + } + return false; +} + +DefineEngineMethod(MeshComponent, getNodeTransform, TransformF, + (S32 node), (-1), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + return mat; + } + + return TransformF::Identity; +} + +DefineEngineMethod(MeshComponent, getNodeEulerRot, EulerF, + (S32 node, bool radToDeg), (-1, true), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + + EulerF eul = mat.toEuler(); + if (radToDeg) + eul = EulerF(mRadToDeg(eul.x), mRadToDeg(eul.y), mRadToDeg(eul.z)); + + return eul; + } + + return EulerF(0, 0, 0); +} + +DefineEngineMethod(MeshComponent, getNodePosition, Point3F, + (S32 node), (-1), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + + return mat.getPosition(); + } + + return Point3F(0, 0, 0); +} + +DefineEngineMethod(MeshComponent, getNodeByName, S32, + (String nodeName), , + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (!nodeName.isEmpty()) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + S32 node = object->getNodeByName(nodeName); + + return node; + } + + return -1; +} + +DefineEngineMethod(MeshComponent, changeMaterial, void, (U32 slot, const char* newMat), (0, ""), + "@brief Change one of the materials on the shape.\n\n") +{ + object->changeMaterial(slot, newMat); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/render/renderComponentInterface.h b/Engine/source/T3D/components/render/renderComponentInterface.h new file mode 100644 index 0000000000..ff51098f2c --- /dev/null +++ b/Engine/source/T3D/components/render/renderComponentInterface.h @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef RENDER_COMPONENT_INTERFACE_H +#define RENDER_COMPONENT_INTERFACE_H + +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _TSSHAPEINSTANCE_H_ +#include "ts/tsShapeInstance.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/components/coreInterfaces.h" +#endif + +class RenderComponentInterface : public Interface < RenderComponentInterface > +{ +public: + virtual void prepRenderImage(SceneRenderState *state) = 0; + + virtual TSShape* getShape() = 0; + + Signal< void(RenderComponentInterface*) > onShapeChanged; + + virtual TSShapeInstance* getShapeInstance() = 0; + + virtual MatrixF getNodeTransform(S32 nodeIdx) = 0; + + virtual Vector getNodeTransforms() = 0; + + virtual void setNodeTransforms(Vector transforms) = 0; + + Signal< void(RenderComponentInterface*) > onShapeInstanceChanged; +}; + +class CastRayRenderedInterface// : public Interface +{ +public: + virtual bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo* info)=0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/decal/decalData.cpp b/Engine/source/T3D/decal/decalData.cpp index 67436e9912..e517d2897b 100644 --- a/Engine/source/T3D/decal/decalData.cpp +++ b/Engine/source/T3D/decal/decalData.cpp @@ -284,6 +284,7 @@ void DecalData::unpackData( BitStream *stream ) Parent::unpackData( stream ); stream->read( &lookupName ); + assignName(lookupName); stream->read( &size ); stream->read( &materialName ); _updateMaterial(); diff --git a/Engine/source/T3D/decal/decalManager.cpp b/Engine/source/T3D/decal/decalManager.cpp index 6db06a521d..f992705d1d 100644 --- a/Engine/source/T3D/decal/decalManager.cpp +++ b/Engine/source/T3D/decal/decalManager.cpp @@ -1744,3 +1744,48 @@ DefineEngineFunction( decalManagerRemoveDecal, bool, ( S32 decalID ),, gDecalManager->removeDecal(inst); return true; } + +DefineEngineFunction( decalManagerEditDecal, bool, ( S32 decalID, Point3F pos, Point3F normal, F32 rotAroundNormal, F32 decalScale ),, + "Edit specified decal of the decal manager.\n" + "@param decalID ID of the decal to edit.\n" + "@param pos World position for the decal.\n" + "@param normal Decal normal vector (if the decal was a tire lying flat on a " + "surface, this is the vector pointing in the direction of the axle).\n" + "@param rotAroundNormal Angle (in radians) to rotate this decal around its normal vector.\n" + "@param decalScale Scale factor applied to the decal.\n" + "@return Returns true if successful, false if decalID not found.\n" + "" ) +{ + DecalInstance *decalInstance = gDecalManager->getDecal( decalID ); + if( !decalInstance ) + return false; + + //Internally we need Point3F tangent instead of the user friendly F32 rotAroundNormal + MatrixF mat( true ); + MathUtils::getMatrixFromUpVector( normal, &mat ); + + AngAxisF rot( normal, rotAroundNormal ); + MatrixF rotmat; + rot.setMatrix( &rotmat ); + mat.mul( rotmat ); + + Point3F tangent; + mat.getColumn( 1, &tangent ); + + //if everything is unchanged just do nothing and return "everything is ok" + if ( pos.equal(decalInstance->mPosition) && + normal.equal(decalInstance->mNormal) && + tangent.equal(decalInstance->mTangent) && + mFabs( decalInstance->mSize - (decalInstance->mDataBlock->size * decalScale) ) < POINT_EPSILON ) + return true; + + decalInstance->mPosition = pos; + decalInstance->mNormal = normal; + decalInstance->mTangent = tangent; + decalInstance->mSize = decalInstance->mDataBlock->size * decalScale; + + gDecalManager->clipDecal( decalInstance, NULL, NULL); + + gDecalManager->notifyDecalModified( decalInstance ); + return true; +} diff --git a/Engine/source/T3D/entity.cpp b/Engine/source/T3D/entity.cpp new file mode 100644 index 0000000000..00ecedad03 --- /dev/null +++ b/Engine/source/T3D/entity.cpp @@ -0,0 +1,1939 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "T3D/entity.h" +#include "core/stream/bitStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "sim/netConnection.h" +#include "scene/sceneRenderState.h" +#include "scene/sceneManager.h" +#include "T3D/gameBase/gameProcess.h" +#include "console/engineAPI.h" +#include "T3D/gameBase/gameConnection.h" +#include "math/mathIO.h" +#include "math/mTransform.h" + +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/render/renderComponentInterface.h" +#include "T3D/components/collision/collisionInterfaces.h" + +#include "gui/controls/guiTreeViewCtrl.h" +#include "assets/assetManager.h" +#include "assets/assetQuery.h" +#include "T3D/assets/ComponentAsset.h" + +#include "console/consoleInternal.h" +#include "T3D/gameBase/std/stdMoveList.h" + +#include "T3D/prefab.h" + +// +#include "gfx/sim/debugDraw.h" +// + +extern bool gEditingMission; + +// Client prediction +static F32 sMinWarpTicks = 0.5f; // Fraction of tick at which instant warp occurs +static S32 sMaxWarpTicks = 3; // Max warp duration in ticks +static S32 sMaxPredictionTicks = 30; // Number of ticks to predict + +IMPLEMENT_CO_NETOBJECT_V1(Entity); + +ConsoleDocClass(Entity, + "@brief Base Entity class.\n\n" + + "Entity is typically made up of a shape and up to two particle emitters. In most cases Entity objects are " + "not created directly. They are usually produced automatically by other means, such as through the Explosion " + "class. When an explosion goes off, its ExplosionData datablock determines what Entity to emit.\n" + + "@tsexample\n" + "datablock ExplosionData(GrenadeLauncherExplosion)\n" + "{\n" + " // Assiging Entity data\n" + " Entity = GrenadeEntity;\n\n" + " // Adjust how Entity is ejected\n" + " EntityThetaMin = 10;\n" + " EntityThetaMax = 60;\n" + " EntityNum = 4;\n" + " EntityNumVariance = 2;\n" + " EntityVelocity = 25;\n" + " EntityVelocityVariance = 5;\n\n" + " // Note: other ExplosionData properties are not listed for this example\n" + "};\n" + "@endtsexample\n\n" + + "@note Entity are client side only objects.\n" + + "@see EntityData\n" + "@see ExplosionData\n" + "@see Explosion\n" + + "@ingroup FX\n" + ); + +Entity::Entity() +{ + //mTypeMask |= DynamicShapeObjectType | StaticObjectType | ; + mTypeMask |= EntityObjectType; + mNetFlags.set(Ghostable | ScopeAlways); + + mPos = Point3F(0, 0, 0); + mRot = Point3F(0, 0, 0); + + mDelta.pos = mDelta.posVec = Point3F::Zero; + mDelta.rot[0].identity(); + mDelta.rot[1].identity(); + mDelta.warpOffset.set(0.0f, 0.0f, 0.0f); + + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.dt = 1.0f; + mDelta.move = NullMove; + + mComponents.clear(); + + mStartComponentUpdate = false; + + mInitialized = false; + +} + +Entity::~Entity() +{ + +} + +void Entity::initPersistFields() +{ + Parent::initPersistFields(); + + removeField("DataBlock"); + + addGroup("Transform"); + + removeField("Position"); + addProtectedField("Position", TypePoint3F, Offset(mPos, Entity), &_setPosition, &_getPosition, "Object world orientation."); + + removeField("Rotation"); + addProtectedField("Rotation", TypeRotationF, Offset(mRot, Entity), &_setRotation, &_getRotation, "Object world orientation."); + + //These are basically renamed mountPos/Rot. pretty much there for conveinence + addField("LocalPosition", TypeMatrixPosition, Offset(mMount.xfm, Entity), "Position we are mounted at ( object space of our mount object )."); + addField("LocalRotation", TypeMatrixRotation, Offset(mMount.xfm, Entity), "Rotation we are mounted at ( object space of our mount object )."); + + endGroup("Transform"); +} + +// +bool Entity::_setPosition(void *object, const char *index, const char *data) +{ + Entity* so = static_cast(object); + if (so) + { + Point3F pos; + + if (!dStrcmp(data, "")) + pos = Point3F(0, 0, 0); + else + Con::setData(TypePoint3F, &pos, 0, 1, &data); + + so->setTransform(pos, so->mRot); + } + return false; +} + +const char * Entity::_getPosition(void* obj, const char* data) +{ + Entity* so = static_cast(obj); + if (so) + { + Point3F pos = so->getPosition(); + + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%g %g %g", pos.x, pos.y, pos.z); + return returnBuffer; + } + return "0 0 0"; +} + +bool Entity::_setRotation(void *object, const char *index, const char *data) +{ + Entity* so = static_cast(object); + if (so) + { + RotationF rot; + Con::setData(TypeRotationF, &rot, 0, 1, &data); + + //so->mRot = rot; + //MatrixF mat = rot.asMatrixF(); + //mat.setPosition(so->getPosition()); + //so->setTransform(mat); + so->setTransform(so->getPosition(), rot); + } + return false; +} + +const char * Entity::_getRotation(void* obj, const char* data) +{ + Entity* so = static_cast(obj); + if (so) + { + EulerF eulRot = so->mRot.asEulerF(); + + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%g %g %g", mRadToDeg(eulRot.x), mRadToDeg(eulRot.y), mRadToDeg(eulRot.z)); + return returnBuffer; + } + return "0 0 0"; +} + +bool Entity::onAdd() +{ + if (!Parent::onAdd()) + return false; + + mObjBox = Box3F(Point3F(-1, -1, -1), Point3F(1, 1, 1)); + + resetWorldBox(); + setObjectBox(mObjBox); + + addToScene(); + + //Make sure we get positioned + setMaskBits(TransformMask); + + return true; +} + +void Entity::onRemove() +{ + clearComponents(true); + + removeFromScene(); + + onDataSet.removeAll(); + + Parent::onRemove(); +} + +void Entity::onPostAdd() +{ + mInitialized = true; + + //everything's done and added. go ahead and initialize the components + for (U32 i = 0; i < mComponents.size(); i++) + { + mComponents[i]->onComponentAdd(); + } + + if (isMethod("onAdd")) + Con::executef(this, "onAdd"); +} + +void Entity::setDataField(StringTableEntry slotName, const char *array, const char *value) +{ + Parent::setDataField(slotName, array, value); + + onDataSet.trigger(this, slotName, value); +} + +void Entity::onStaticModified(const char* slotName, const char* newValue) +{ + Parent::onStaticModified(slotName, newValue); + + onDataSet.trigger(this, slotName, newValue); +} + +//Updating +void Entity::processTick(const Move* move) +{ + if (!isHidden()) + { + if (mDelta.warpCount < mDelta.warpTicks) + { + mDelta.warpCount++; + + // Set new pos. + mObjToWorld.getColumn(3, &mDelta.pos); + mDelta.pos += mDelta.warpOffset; + mDelta.rot[0] = mDelta.rot[1]; + mDelta.rot[1].interpolate(mDelta.warpRot[0], mDelta.warpRot[1], F32(mDelta.warpCount) / mDelta.warpTicks); + setTransform(mDelta.pos, mDelta.rot[1]); + + // Pos backstepping + mDelta.posVec.x = -mDelta.warpOffset.x; + mDelta.posVec.y = -mDelta.warpOffset.y; + mDelta.posVec.z = -mDelta.warpOffset.z; + } + else + { + if (isMounted()) + { + MatrixF mat; + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat); + Parent::setTransform(mat); + Parent::setRenderTransform(mat); + } + else + { + if (!move) + { + if (isGhost()) + { + // If we haven't run out of prediction time, + // predict using the last known move. + if (mPredictionCount-- <= 0) + return; + + move = &mDelta.move; + } + else + { + move = &NullMove; + } + } + } + } + + Move prevMove = lastMove; + + if (move != NULL) + lastMove = *move; + else + lastMove = NullMove; + + if (move && isServerObject()) + { + if ((move->y != 0 || prevMove.y != 0) + || (move->x != 0 || prevMove.x != 0) + || (move->z != 0 || prevMove.x != 0)) + { + if (isMethod("moveVectorEvent")) + Con::executef(this, "moveVectorEvent", move->x, move->y, move->z); + } + + if (move->yaw != 0) + { + if (isMethod("moveYawEvent")) + Con::executef(this, "moveYawEvent", move->yaw); + } + + if (move->pitch != 0) + { + if (isMethod("movePitchEvent")) + Con::executef(this, "movePitchEvent", move->pitch); + } + + if (move->roll != 0) + { + if (isMethod("moveRollEvent")) + Con::executef(this, "moveRollEvent", move->roll); + } + + for (U32 i = 0; i < MaxTriggerKeys; i++) + { + if (move->trigger[i] != prevMove.trigger[i]) + { + if (isMethod("moveTriggerEvent")) + Con::executef(this, "moveTriggerEvent", i, move->trigger[i]); + } + } + } + + if (isMethod("processTick")) + Con::executef(this, "processTick"); + } +} + +void Entity::advanceTime(F32 dt) +{ +} + +void Entity::interpolateTick(F32 dt) +{ + if (dt == 0.0f) + { + setRenderTransform(mDelta.pos, mDelta.rot[1]); + } + else + { + QuatF rot; + rot.interpolate(mDelta.rot[1], mDelta.rot[0], dt); + Point3F pos = mDelta.pos + mDelta.posVec * dt; + + setRenderTransform(pos, rot); + } + + mDelta.dt = dt; +} + +//Render +void Entity::prepRenderImage(SceneRenderState *state) +{ +} + +//Networking +U32 Entity::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & TransformMask)) + { + //mathWrite( *stream, getScale() ); + //stream->writeAffineTransform(mObjToWorld); + //mathWrite(*stream, getPosition()); + //mathWrite(*stream, mPos); + + stream->writeCompressedPoint(mPos); + mathWrite(*stream, getRotation()); + + mDelta.move.pack(stream); + + stream->writeFlag(!(mask & NoWarpMask)); + } + + /*if (stream->writeFlag(mask & MountedMask)) + { + mathWrite(*stream, mMount.xfm.getPosition()); + mathWrite(*stream, mMount.xfm.toEuler()); + }*/ + + if (stream->writeFlag(mask & BoundsMask)) + { + mathWrite(*stream, mObjBox); + } + + //pass our behaviors around + if (mask & ComponentsMask || mask & InitialUpdateMask) + { + stream->writeFlag(true); + //now, we run through a list of our to-be-sent behaviors and begin sending them + //if any fail, we keep our list and re-queue the mask + S32 componentCount = mToLoadComponents.size(); + + //build our 'ready' list + //This requires both the instance and the instances' template to be prepped(if the template hasn't been ghosted, + //then we know we shouldn't be passing the instance's ghosts around yet) + U32 ghostedCompCnt = 0; + for (U32 i = 0; i < componentCount; i++) + { + if (con->getGhostIndex(mToLoadComponents[i]) != -1) + ghostedCompCnt++; + } + + if (ghostedCompCnt != 0) + { + stream->writeFlag(true); + + stream->writeFlag(mStartComponentUpdate); + + //if not all the behaviors have been ghosted, we'll need another pass + if (ghostedCompCnt != componentCount) + retMask |= ComponentsMask; + + //write the currently ghosted behavior count + stream->writeInt(ghostedCompCnt, 16); + + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + //now fetch them and pass the ghost + S32 ghostIndex = con->getGhostIndex(mToLoadComponents[i]); + if (ghostIndex != -1) + { + stream->writeInt(ghostIndex, NetConnection::GhostIdBitSize); + mToLoadComponents.erase(i); + i--; + + mStartComponentUpdate = false; + } + } + } + else if (componentCount) + { + //on the odd chance we have behaviors to ghost, but NONE of them have been yet, just set the flag now + stream->writeFlag(false); + retMask |= ComponentsMask; + } + else + stream->writeFlag(false); + } + else + stream->writeFlag(false); + + return retMask; +} + +void Entity::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + /*Point3F scale; + mathRead( *stream, &scale ); + setScale( scale);*/ + + //MatrixF objToWorld; + //stream->readAffineTransform(&objToWorld); + + Point3F pos; + + stream->readCompressedPoint(&pos); + //mathRead(*stream, &pos); + + RotationF rot; + + mathRead(*stream, &rot); + + mDelta.move.unpack(stream); + + if (stream->readFlag() && isProperlyAdded()) + { + // Determine number of ticks to warp based on the average + // of the client and server velocities. + /*mDelta.warpOffset = pos - mDelta.pos; + + F32 dt = mDelta.warpOffset.len() / (0.5f * TickSec); + + mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //F32 as = (speed + mVelocity.len()) * 0.5f * TickSec; + //F32 dt = (as > 0.00001f) ? mDelta.warpOffset.len() / as : sMaxWarpTicks; + //mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //mDelta.warpTicks = sMaxWarpTicks; + + mDelta.warpTicks = 0; + + if (mDelta.warpTicks) + { + // Setup the warp to start on the next tick. + if (mDelta.warpTicks > sMaxWarpTicks) + mDelta.warpTicks = sMaxWarpTicks; + mDelta.warpOffset /= (F32)mDelta.warpTicks; + + mDelta.rot[0] = rot.asQuatF(); + mDelta.rot[1] = rot.asQuatF(); + + mDelta.rotOffset = rot.asEulerF() - mDelta.rot.asEulerF(); + + // Ignore small rotation differences + if (mFabs(mDelta.rotOffset.x) < 0.001f) + mDelta.rotOffset.x = 0; + + if (mFabs(mDelta.rotOffset.y) < 0.001f) + mDelta.rotOffset.y = 0; + + if (mFabs(mDelta.rotOffset.z) < 0.001f) + mDelta.rotOffset.z = 0; + + mDelta.rotOffset /= (F32)mDelta.warpTicks; + } + else + { + // Going to skip the warp, server and client are real close. + // Adjust the frame interpolation to move smoothly to the + // new position within the current tick. + Point3F cp = mDelta.pos + mDelta.posVec * mDelta.dt; + if (mDelta.dt == 0) + { + mDelta.posVec.set(0.0f, 0.0f, 0.0f); + mDelta.rotVec.set(0.0f, 0.0f, 0.0f); + } + else + { + F32 dti = 1.0f / mDelta.dt; + mDelta.posVec = (cp - pos) * dti; + mDelta.rotVec.z = mRot.z - rot.z; + + mDelta.rotVec.z *= dti; + } + + mDelta.pos = pos; + mDelta.rot = rot; + + setTransform(pos, rot); + }*/ + + Point3F cp = mDelta.pos + mDelta.posVec * mDelta.dt; + mDelta.warpOffset = pos - cp; + + // Calc the distance covered in one tick as the average of + // the old speed and the new speed from the server. + VectorF vel = pos - mDelta.pos; + F32 dt, as = vel.len() * 0.5 * TickSec; + + // Cal how many ticks it will take to cover the warp offset. + // If it's less than what's left in the current tick, we'll just + // warp in the remaining time. + if (!as || (dt = mDelta.warpOffset.len() / as) > sMaxWarpTicks) + dt = mDelta.dt + sMaxWarpTicks; + else + dt = (dt <= mDelta.dt) ? mDelta.dt : mCeil(dt - mDelta.dt) + mDelta.dt; + + // Adjust current frame interpolation + if (mDelta.dt) + { + mDelta.pos = cp + (mDelta.warpOffset * (mDelta.dt / dt)); + mDelta.posVec = (cp - mDelta.pos) / mDelta.dt; + QuatF cr; + cr.interpolate(mDelta.rot[1], mDelta.rot[0], mDelta.dt); + + mDelta.rot[1].interpolate(cr, rot.asQuatF(), mDelta.dt / dt); + mDelta.rot[0].extrapolate(mDelta.rot[1], cr, mDelta.dt); + } + + // Calculated multi-tick warp + mDelta.warpCount = 0; + mDelta.warpTicks = (S32)(mFloor(dt)); + if (mDelta.warpTicks) + { + mDelta.warpOffset = pos - mDelta.pos; + mDelta.warpOffset /= mDelta.warpTicks; + mDelta.warpRot[0] = mDelta.rot[1]; + mDelta.warpRot[1] = rot.asQuatF(); + } + } + else + { + // Set the entity to the server position + mDelta.dt = 0; + mDelta.pos = pos; + mDelta.posVec.set(0, 0, 0); + mDelta.rot[1] = mDelta.rot[0] = rot.asQuatF(); + mDelta.warpCount = mDelta.warpTicks = 0; + setTransform(pos, rot); + } + } + + /*if (stream->readFlag()) + { + Point3F mountOffset; + EulerF mountRot; + mathRead(*stream, &mountOffset); + mathRead(*stream, &mountRot); + + RotationF rot = RotationF(mountRot); + mountRot = rot.asEulerF(RotationF::Degrees); + + setMountOffset(mountOffset); + setMountRotation(mountRot); + }*/ + + if (stream->readFlag()) + { + mathRead(*stream, &mObjBox); + resetWorldBox(); + } + + if (stream->readFlag()) + { + //are we passing any behaviors currently? + if (stream->readFlag()) + { + //if we've just started the update, clear our behaviors + if (stream->readFlag()) + clearComponents(false); + + S32 componentCount = stream->readInt(16); + + for (U32 i = 0; i < componentCount; i++) + { + S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); + addComponent(dynamic_cast(con->resolveGhost(gIndex))); + } + } + } +} + +//Manipulation +void Entity::setTransform(const MatrixF &mat) +{ + //setMaskBits(TransformMask); + setMaskBits(TransformMask | NoWarpMask); + + if (isMounted()) + { + // Use transform from mounted object + Point3F newPos = mat.getPosition(); + Point3F parentPos = mMount.object->getTransform().getPosition(); + + Point3F newOffset = newPos - parentPos; + + if (!newOffset.isZero()) + { + //setMountOffset(newOffset); + mPos = newOffset; + } + + Point3F matEul = mat.toEuler(); + + //mRot = Point3F(mRadToDeg(matEul.x), mRadToDeg(matEul.y), mRadToDeg(matEul.z)); + + if (matEul != Point3F(0, 0, 0)) + { + Point3F mountEul = mMount.object->getTransform().toEuler(); + Point3F diff = matEul - mountEul; + + //setMountRotation(Point3F(mRadToDeg(diff.x), mRadToDeg(diff.y), mRadToDeg(diff.z))); + mRot = diff; + } + else + { + //setMountRotation(Point3F(0, 0, 0)); + mRot = Point3F(0, 0, 0); + } + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setTransform(transf); + } + else + { + //Are we part of a prefab? + /*Prefab* p = Prefab::getPrefabByChild(this); + if (p) + { + //just let our prefab know we moved + p->childTransformUpdated(this, mat); + }*/ + //else + { + //mRot.set(mat); + //Parent::setTransform(mat); + + RotationF rot = RotationF(mat); + + EulerF tempRot = rot.asEulerF(RotationF::Degrees); + + Point3F pos; + + mat.getColumn(3,&pos); + + setTransform(pos, rot); + } + } +} + +void Entity::setTransform(Point3F position, RotationF rotation) +{ + if (isMounted()) + { + mPos = position; + mRot = rotation; + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setTransform(transf); + + setMaskBits(TransformMask); + } + else + { + /*MatrixF newMat, imat, xmat, ymat, zmat; + Point3F radRot = Point3F(mDegToRad(rotation.x), mDegToRad(rotation.y), mDegToRad(rotation.z)); + xmat.set(EulerF(radRot.x, 0, 0)); + ymat.set(EulerF(0.0f, radRot.y, 0.0f)); + zmat.set(EulerF(0, 0, radRot.z)); + imat.mul(zmat, xmat); + newMat.mul(imat, ymat);*/ + + MatrixF newMat = rotation.asMatrixF(); + + newMat.setColumn(3, position); + + mPos = position; + mRot = rotation; + + setMaskBits(TransformMask); + //if (isServerObject()) + // setMaskBits(TransformMask); + + //setTransform(temp); + + // This test is a bit expensive so turn it off in release. +#ifdef TORQUE_DEBUG + //AssertFatal( mat.isAffine(), "SceneObject::setTransform() - Bad transform (non affine)!" ); +#endif + + //PROFILE_SCOPE(Entity_setTransform); + + // Update the transforms. + + Parent::setTransform(newMat); + + onTransformSet.trigger(&newMat); + + /*mObjToWorld = mWorldToObj = newMat; + mWorldToObj.affineInverse(); + // Update the world-space AABB. + resetWorldBox(); + // If we're in a SceneManager, sync our scene state. + if (mSceneManager != NULL) + mSceneManager->notifyObjectDirty(this); + setRenderTransform(newMat);*/ + } +} + +void Entity::setRenderTransform(const MatrixF &mat) +{ + Parent::setRenderTransform(mat); +} + +void Entity::setRenderTransform(Point3F position, RotationF rotation) +{ + if (isMounted()) + { + mPos = position; + mRot = rotation; + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setRenderTransform(transf); + } + else + { + MatrixF newMat = rotation.asMatrixF(); + + newMat.setColumn(3, position); + + mPos = position; + mRot = rotation; + + Parent::setRenderTransform(newMat); + + onTransformSet.trigger(&newMat); + } +} + +MatrixF Entity::getTransform() +{ + if (isMounted()) + { + MatrixF mat; + + //Use transform from mount + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat); + + Point3F transPos = mat.getPosition() + mPos; + + mat.mul(mRot.asMatrixF()); + + mat.setPosition(transPos); + + return mat; + } + else + { + return Parent::getTransform(); + } +} + +void Entity::setMountOffset(Point3F posOffset) +{ + if (isMounted()) + { + mMount.xfm.setColumn(3, posOffset); + //mPos = posOffset; + setMaskBits(MountedMask); + } +} + +void Entity::setMountRotation(EulerF rotOffset) +{ + if (isMounted()) + { + MatrixF temp, imat, xmat, ymat, zmat; + + Point3F radRot = Point3F(mDegToRad(rotOffset.x), mDegToRad(rotOffset.y), mDegToRad(rotOffset.z)); + xmat.set(EulerF(radRot.x, 0, 0)); + ymat.set(EulerF(0.0f, radRot.y, 0.0f)); + zmat.set(EulerF(0, 0, radRot.z)); + + imat.mul(zmat, xmat); + temp.mul(imat, ymat); + + temp.setColumn(3, mMount.xfm.getPosition()); + + mMount.xfm = temp; + //mRot = RotationF(temp); + setMaskBits(MountedMask); + } +} +// +void Entity::getCameraTransform(F32* pos, MatrixF* mat) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->getCameraTransform(pos, mat)) + { + return; + } + } +} + +void Entity::getMountTransform(S32 index, const MatrixF &xfm, MatrixF *outMat) +{ + RenderComponentInterface* renderInterface = getComponent(); + + if (renderInterface) + { + renderInterface->getShapeInstance()->animate(); + S32 nodeCount = renderInterface->getShapeInstance()->getShape()->nodes.size(); + + if (index >= 0 && index < nodeCount) + { + MatrixF mountTransform = renderInterface->getShapeInstance()->mNodeTransforms[index]; + mountTransform.mul(xfm); + const Point3F& scale = getScale(); + + // The position of the mount point needs to be scaled. + Point3F position = mountTransform.getPosition(); + position.convolve(scale); + mountTransform.setPosition(position); + + // Also we would like the object to be scaled to the model. + outMat->mul(mObjToWorld, mountTransform); + return; + } + } + + // Then let SceneObject handle it. + Parent::getMountTransform(index, xfm, outMat); +} + +void Entity::getRenderMountTransform(F32 delta, S32 index, const MatrixF &xfm, MatrixF *outMat) +{ + RenderComponentInterface* renderInterface = getComponent(); + + if (renderInterface && renderInterface->getShapeInstance()) + { + renderInterface->getShapeInstance()->animate(); + S32 nodeCount = renderInterface->getShapeInstance()->getShape()->nodes.size(); + + if (index >= 0 && index < nodeCount) + { + MatrixF mountTransform = renderInterface->getShapeInstance()->mNodeTransforms[index]; + mountTransform.mul(xfm); + const Point3F& scale = getScale(); + + // The position of the mount point needs to be scaled. + Point3F position = mountTransform.getPosition(); + position.convolve(scale); + mountTransform.setPosition(position); + + // Also we would like the object to be scaled to the model. + outMat->mul(getRenderTransform(), mountTransform); + return; + } + } + + // Then let SceneObject handle it. + Parent::getMountTransform(index, xfm, outMat); +} + +void Entity::setForwardVector(VectorF newForward, VectorF upVector) +{ + MatrixF mat = getTransform(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (upVector != VectorF::Zero) + up = upVector; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + axisY.set(0.0f, 1.0f, 0.0f); + Con::errorf("Entity::setForwardVector() - degenerate forward vector"); + } + else + { + axisY /= mSqrt(lenSq); + } + + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + up.set(0.0f, 0.0f, 1.0f); + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - too small"); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - same as forward"); + // i haven't really tested this, but i think it generates something which should be not parallel to the previous vector: + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + setTransform(mat); +} +// +//These basically just redirect to any collision behaviors we have +bool Entity::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->castRay(start, end, info)) + { + return true; + } + } + return false; +} + +bool Entity::castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->castRayRendered(start, end, info)) + { + return true; + } + } + return false; +} + +bool Entity::buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + return (*it)->buildPolyList(context, polyList, box, sphere); + } + + return false; +} + +void Entity::buildConvex(const Box3F& box, Convex* convex) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + (*it)->buildConvex(box, convex); + } +} + +// +// Mounting and heirarchy manipulation +void Entity::mountObject(SceneObject* objB, MatrixF txfm) +{ + Parent::mountObject(objB, -1, txfm); + Parent::addObject(objB); +} + +void Entity::mountObject(SceneObject *obj, S32 node, const MatrixF &xfm) +{ + Parent::mountObject(obj, node, xfm); +} + +void Entity::onMount(SceneObject *obj, S32 node) +{ + deleteNotify(obj); + + // Are we mounting to a GameBase object? + Entity *entityObj = dynamic_cast(obj); + + if (entityObj && entityObj->getControlObject() != this) + processAfter(entityObj); + + if (!isGhost()) { + setMaskBits(MountedMask); + + //TODO implement this callback + //onMount_callback( this, obj, node ); + } +} + +void Entity::onUnmount(SceneObject *obj, S32 node) +{ + clearNotify(obj); + + Entity *entityObj = dynamic_cast(obj); + + if (entityObj && entityObj->getControlObject() != this) + clearProcessAfter(); + + if (!isGhost()) { + setMaskBits(MountedMask); + + //TODO implement this callback + //onUnmount_callback( this, obj, node ); + } +} + +//Heirarchy stuff +void Entity::addObject(SimObject* object) +{ + Component* component = dynamic_cast(object); + if (component) + { + addComponent(component); + return; + } + + Entity* e = dynamic_cast(object); + if (e) + { + MatrixF offset; + + //offset.mul(getWorldTransform(), e->getWorldTransform()); + + //check if we're mounting to a node on a shape we have + String node = e->getDataField("mountNode", NULL); + if (!node.isEmpty()) + { + RenderComponentInterface *renderInterface = getComponent(); + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + S32 nodeIdx = shape->findNode(node); + + mountObject(e, nodeIdx, MatrixF::Identity); + } + else + { + mountObject(e, MatrixF::Identity); + } + } + else + { + /*Point3F posOffset = mPos - e->getPosition(); + mPos = posOffset; + + RotationF rotOffset = mRot - e->getRotation(); + mRot = rotOffset; + setMaskBits(TransformMask); + mountObject(e, MatrixF::Identity);*/ + + mountObject(e, MatrixF::Identity); + } + + //e->setMountOffset(e->getPosition() - getPosition()); + + //Point3F diff = getWorldTransform().toEuler() - e->getWorldTransform().toEuler(); + + //e->setMountRotation(Point3F(mRadToDeg(diff.x),mRadToDeg(diff.y),mRadToDeg(diff.z))); + + //mountObject(e, offset); + } + else + { + SceneObject* so = dynamic_cast(object); + if (so) + { + //get the difference and build it as our offset! + Point3F posOffset = so->getPosition() - mPos; + RotationF rotOffset = RotationF(so->getTransform()) - mRot; + + MatrixF offset = rotOffset.asMatrixF(); + offset.setPosition(posOffset); + + mountObject(so, offset); + return; + } + } + + Parent::addObject(object); +} + +void Entity::removeObject(SimObject* object) +{ + Entity* e = dynamic_cast(object); + if (e) + { + mPos = mPos + e->getPosition(); + mRot = mRot + e->getRotation(); + unmountObject(e); + setMaskBits(TransformMask); + } + else + { + SceneObject* so = dynamic_cast(object); + if (so) + unmountObject(so); + } + + Parent::removeObject(object); +} + +bool Entity::addComponent(Component *comp) +{ + if (comp == NULL) + return false; + + //double-check were not re-adding anything + mComponents.push_back(comp); + + // Register the component with this owner. + comp->setOwner(this); + + //if we've already been added and this is being added after the fact(at runtime), + //then just go ahead and call it's onComponentAdd so it can get to work + if (mInitialized) + comp->onComponentAdd(); + + onComponentAdded.trigger(comp); + + return true; +} + +SimObject* Entity::findObjectByInternalName(StringTableEntry internalName, bool searchChildren) +{ + for (U32 i = 0; i < mComponents.size(); i++) + { + if (mComponents[i]->getInternalName() == internalName) + { + return mComponents[i]; + } + } + + return Parent::findObjectByInternalName(internalName, searchChildren); +} + +////////////////////////////////////////////////////////////////////////// + +bool Entity::removeComponent(Component *comp, bool deleteComponent) +{ + if (comp == NULL) + return false; + + if(mComponents.remove(comp)) + { + AssertFatal(comp->isProperlyAdded(), "Don't know how but a component is not registered w/ the sim"); + + //setComponentsDirty(); + + onComponentRemoved.trigger(comp); + + comp->setOwner(NULL); + + comp->onComponentRemove(); //in case the behavior needs to do cleanup on the owner + + if (deleteComponent) + comp->safeDeleteObject(); + + return true; + } + + return false; +} + +////////////////////////////////////////////////////////////////////////// +//NOTE: +//The actor class calls this and flags the deletion of the behaviors to false so that behaviors that should no longer be attached during +//a network update will indeed be removed from the object. The reason it doesn't delete them is because when clearing the local behavior +//list, it would delete them, purging the ghost, and causing a crash when the unpack update tried to fetch any existing behaviors' ghosts +//to re-add them. Need to implement a clean clear function that will clear the local list, and only delete unused behaviors during an update. +void Entity::clearComponents(bool deleteComponents) +{ + bool srv = isServerObject(); + if (!deleteComponents) + { + while (mComponents.size() > 0) + { + removeComponent(mComponents.first(), deleteComponents); + } + } + else + { + while (mComponents.size() > 0) + { + Component* comp = mComponents.first(); + + if (comp) + { + comp->onComponentRemove(); //in case the behavior needs to do cleanup on the owner + + bool removed = mComponents.remove(comp); + + //we only need to delete them on the server side. they'll be cleaned up on the client side + //via the ghosting system for us + if (isServerObject()) + comp->deleteObject(); + } + } + } +} + +////////////////////////////////////////////////////////////////////////// +Component *Entity::getComponent(const U32 index) const +{ + if (index < mComponents.size()) + return mComponents[index]; + + return NULL; +} + +Component *Entity::getComponent(String componentType) +{ + for (U32 i = 0; i < mComponents.size(); i++) + { + Component* comp = mComponents[i]; + + /*String namespaceName = comp->getNamespace()->mName; + //check our namespace first + if (namespaceName == componentType) + { + return comp; + } + else + {*/ + //lets scan up, just to be sure + Namespace *NS = comp->getNamespace(); + + //we shouldn't ever go past Component into net object, as we're no longer dealing with component classes + while (dStrcmp(NS->getName(), "NetObject")) + { + String namespaceName = NS->getName(); + + if (namespaceName == componentType) + { + return comp; + } + else + { + NS = NS->getParent(); + } + } + //} + } + + return NULL; +} + +void Entity::onInspect() +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + (*it)->onInspect(); + } + + GuiTreeViewCtrl *editorTree = dynamic_cast(Sim::findObject("EditorTree")); + if (!editorTree) + return; + + GuiTreeViewCtrl::Item *newItem, *parentItem; + + parentItem = editorTree->getItem(editorTree->findItemByObjectId(getId())); + + S32 componentID = editorTree->insertItem(parentItem->getID(), "Components"); + + newItem = editorTree->getItem(componentID); + newItem->mState.set(GuiTreeViewCtrl::Item::VirtualParent); + newItem->mState.set(GuiTreeViewCtrl::Item::DenyDrag); + //newItem->mState.set(GuiTreeViewCtrl::Item::InspectorData); + newItem->mState.set(GuiTreeViewCtrl::Item::ForceItemName); + //newItem->mInspectorInfo.mObject = this; + + AssetManager *assetDB = dynamic_cast(Sim::findObject("AssetDatabase")); + if (!assetDB) + return; + + //This is used in the event of script-created assets, which likely only have + //the name and other 'friendly' properties stored in a ComponentAsset. + //So we'll do a query for those assets and find the asset based on the component's + //class name + AssetQuery* qry = new AssetQuery(); + qry->registerObject(); + + assetDB->findAssetType(qry, "ComponentAsset"); + + for (U32 i = 0; i < mComponents.size(); ++i) + { + String compName = mComponents[i]->getFriendlyName(); + + if (compName == String("")) + { + String componentClass = mComponents[i]->getClassNamespace(); + + //Means that it's a script-derived component and we should consult the asset to try + //to get the info for it + S32 compAssetCount = qry->mAssetList.size(); + for (U32 c = 0; c < compAssetCount; ++c) + { + StringTableEntry assetID = qry->mAssetList[c]; + + ComponentAsset* compAsset = assetDB->acquireAsset(assetID); + + String compAssetClass = compAsset->getComponentName(); + if (componentClass == compAssetClass) + { + compName = compAsset->getFriendlyName(); + break; + } + } + } + + S32 compID = editorTree->insertItem(componentID, compName); + newItem = editorTree->getItem(compID); + newItem->mInspectorInfo.mObject = mComponents[i]; + newItem->mState.set(GuiTreeViewCtrl::Item::ForceItemName); + newItem->mState.set(GuiTreeViewCtrl::Item::DenyDrag); + newItem->mState.set(GuiTreeViewCtrl::Item::InspectorData); + } + + editorTree->buildVisibleTree(true); +} + +void Entity::onEndInspect() +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { + (*it)->onEndInspect(); + } + + GuiTreeViewCtrl *editorTree = dynamic_cast(Sim::findObject("EditorTree")); + if (!editorTree) + return; + + S32 componentItemIdx = editorTree->findItemByName("Components"); + + editorTree->removeItem(componentItemIdx, false); +} + +static void writeTabs(Stream &stream, U32 count) +{ + char tab[] = " "; + while (count--) + stream.write(3, (void*)tab); +} + +void Entity::write(Stream &stream, U32 tabStop, U32 flags) +{ + // Do *not* call parent on this + + /*VectorPtr &componentList = lockComponentList(); + // export selected only? + if( ( flags & SelectedOnly ) && !isSelected() ) + { + for( BehaviorObjectIterator i = componentList.begin(); i != componentList.end(); i++ ) + (*i)->write(stream, tabStop, flags); + + goto write_end; + }*/ + + //catch if we have any written behavior fields already in the file, and clear them. We don't need to double-up + //the entries for no reason. + /*if(getFieldDictionary()) + { + //get our dynamic field count, then parse through them to see if they're a behavior or not + + //reset it + SimFieldDictionary* fieldDictionary = getFieldDictionary(); + SimFieldDictionaryIterator itr(fieldDictionary); + for (S32 i = 0; i < fieldDictionary->getNumFields(); i++) + { + if (!(*itr)) + break; + + SimFieldDictionary::Entry* entry = *itr; + if(strstr(entry->slotName, "_behavior")) + { + entry->slotName = ""; + entry->value = ""; + } + + ++itr; + } + }*/ + //all existing written behavior fields should be cleared. now write the object block + + writeTabs(stream, tabStop); + + char buffer[1024]; + dSprintf(buffer, sizeof(buffer), "new %s(%s) {\r\n", getClassName(), getName() ? getName() : ""); + stream.write(dStrlen(buffer), buffer); + writeFields(stream, tabStop + 1); + + stream.write(1, "\n"); + ////first, write out our behavior objects + + // NOW we write the behavior fields proper + if (mComponents.size() > 0) + { + // Pack out the behaviors into fields + U32 i = 0; + for (U32 i = 0; i < mComponents.size(); i++) + { + writeTabs(stream, tabStop + 1); + char buffer[1024]; + dSprintf(buffer, sizeof(buffer), "new %s() {\r\n", mComponents[i]->getClassName()); + stream.write(dStrlen(buffer), buffer); + //bi->writeFields( stream, tabStop + 2 ); + + mComponents[i]->packToStream(stream, tabStop + 2, i - 1, flags); + + writeTabs(stream, tabStop + 1); + stream.write(4, "};\r\n"); + } + } + + // + //if (size() > 0) + // stream.write(2, "\r\n"); + + for (U32 i = 0; i < size(); i++) + { + SimObject* child = (*this)[i]; + if (child->getCanSave()) + child->write(stream, tabStop + 1, flags); + } + + //stream.write(2, "\r\n"); + + writeTabs(stream, tabStop); + stream.write(4, "};\r\n"); + + //write_end: + //unlockComponentList(); +} + +SimObject* Entity::getTamlChild(const U32 childIndex) const +{ + // Sanity! + AssertFatal(childIndex < getTamlChildCount(), "SimSet::getTamlChild() - Child index is out of range."); + + // For when the assert is not used. + if (childIndex >= getTamlChildCount()) + return NULL; + + //we always order components first, child objects second + if (childIndex >= getComponentCount()) + return at(childIndex - getComponentCount()); + else + return getComponent(childIndex); +} +// +void Entity::onCameraScopeQuery(NetConnection* connection, CameraScopeQuery* query) +{ + // Object itself is in scope. + Parent::onCameraScopeQuery(connection, query); + + if (CameraInterface* cI = getComponent()) + { + cI->onCameraScopeQuery(connection, query); + } +} +// +void Entity::setObjectBox(Box3F objBox) +{ + mObjBox = objBox; + resetWorldBox(); + + if (isServerObject()) + setMaskBits(BoundsMask); +} + +void Entity::updateContainer() +{ + PROFILE_SCOPE(Entity_updateContainer); + + // Update container drag and buoyancy properties + containerInfo.box = getWorldBox(); + //containerInfo.mass = mMass; + + getContainer()->findObjects(containerInfo.box, WaterObjectType | PhysicalZoneObjectType, findRouter, &containerInfo); + + //mWaterCoverage = info.waterCoverage; + //mLiquidType = info.liquidType; + //mLiquidHeight = info.waterHeight; + //setCurrentWaterObject( info.waterObject ); + + // This value might be useful as a datablock value, + // This is what allows the player to stand in shallow water (below this coverage) + // without jiggling from buoyancy + /*if (info.waterCoverage >= 0.25f) + { + // water viscosity is used as drag for in water. + // ShapeBaseData drag is used for drag outside of water. + // Combine these two components to calculate this ShapeBase object's + // current drag. + mDrag = (info.waterCoverage * info.waterViscosity) + + (1.0f - info.waterCoverage) * mDrag; + //mBuoyancy = (info.waterDensity / mDataBlock->density) * info.waterCoverage; + } + + //mAppliedForce = info.appliedForce; + mGravityMod = info.gravityScale;*/ +} +// + +void Entity::setComponentsDirty() +{ + if (mToLoadComponents.empty()) + mStartComponentUpdate = true; + + //we need to build a list of behaviors that need to be pushed across the network + for (U32 i = 0; i < mComponents.size(); i++) + { + // We can do this because both are in the string table + Component *comp = mComponents[i]; + + if (comp->isNetworked()) + { + bool unique = true; + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + if (mToLoadComponents[i]->getId() == comp->getId()) + { + unique = false; + break; + } + } + if (unique) + mToLoadComponents.push_back(comp); + } + } + + setMaskBits(ComponentsMask); +} + +void Entity::setComponentDirty(Component *comp, bool forceUpdate) +{ + bool found = false; + for (U32 i = 0; i < mComponents.size(); i++) + { + if (mComponents[i]->getId() == comp->getId()) + { + mComponents[i]->setOwner(this); + return; + } + } + + if (!found) + return; + + //if(mToLoadComponents.empty()) + // mStartComponentUpdate = true; + + /*if (comp->isNetworked() || forceUpdate) + { + bool unique = true; + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + if (mToLoadComponents[i]->getId() == comp->getId()) + { + unique = false; + break; + } + } + if (unique) + mToLoadComponents.push_back(comp); + } + + setMaskBits(ComponentsMask);*/ + +} + +DefineEngineMethod(Entity, mountObject, bool, + (SceneObject* objB, TransformF txfm), (MatrixF::Identity), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (objB) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + object->mountObject(objB, /*MatrixF::Identity*/txfm.getMatrix()); + return true; + } + return false; +} + +DefineEngineMethod(Entity, setMountOffset, void, + (Point3F posOffset), (Point3F(0, 0, 0)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setMountOffset(posOffset); +} + +DefineEngineMethod(Entity, setMountRotation, void, + (EulerF rotOffset), (EulerF(0, 0, 0)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setMountRotation(rotOffset); +} + +DefineEngineMethod(Entity, getMountTransform, TransformF, (), , + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + MatrixF mat; + object->getMountTransform(0, MatrixF::Identity, &mat); + return mat; +} + +DefineEngineMethod(Entity, setBox, void, + (Point3F box), (Point3F(1, 1, 1)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setObjectBox(Box3F(-box, box)); +} + + +/*DefineConsoleMethod(Entity, callOnComponents, void, (const char* functionName), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->callOnComponents(functionName); +} + +ConsoleMethod(Entity, callMethod, void, 3, 64, "(methodName, argi) Calls script defined method\n" + "@param methodName The method's name as a string\n" + "@param argi Any arguments to pass to the method\n" + "@return No return value" + "@note %obj.callMethod( %methodName, %arg1, %arg2, ... );\n") + +{ + object->callMethodArgList(argc - 1, argv + 2); +} + +ConsoleMethod(Entity, addComponents, void, 2, 2, "() - Add all fielded behaviors\n" + "@return No return value") +{ + object->addComponents(); +}*/ + +ConsoleMethod(Entity, addComponent, bool, 3, 3, "(ComponentInstance bi) - Add a behavior to the object\n" + "@param bi The behavior instance to add" + "@return (bool success) Whether or not the behavior was successfully added") +{ + Component *comp = dynamic_cast(Sim::findObject(argv[2])); + + if (comp != NULL) + { + bool success = object->addComponent(comp); + + if (success) + { + //Placed here so we can differentiate against adding a new behavior during runtime, or when we load all + //fielded behaviors on mission load. This way, we can ensure that we only call the callback + //once everything is loaded. This avoids any problems with looking for behaviors that haven't been added yet, etc. + if (comp->isMethod("onBehaviorAdd")) + Con::executef(comp, "onBehaviorAdd"); + + return true; + } + } + + return false; +} + +ConsoleMethod(Entity, removeComponent, bool, 3, 4, "(ComponentInstance bi, [bool deleteBehavior = true])\n" + "@param bi The behavior instance to remove\n" + "@param deleteBehavior Whether or not to delete the behavior\n" + "@return (bool success) Whether the behavior was successfully removed") +{ + bool deleteComponent = true; + if (argc > 3) + deleteComponent = dAtob(argv[3]); + + return object->removeComponent(dynamic_cast(Sim::findObject(argv[2])), deleteComponent); +} + +ConsoleMethod(Entity, clearComponents, void, 2, 2, "() - Clear all behavior instances\n" + "@return No return value") +{ + object->clearComponents(); +} + +ConsoleMethod(Entity, getComponentByIndex, S32, 3, 3, "(int index) - Gets a particular behavior\n" + "@param index The index of the behavior to get\n" + "@return (ComponentInstance bi) The behavior instance you requested") +{ + Component *comp = object->getComponent(dAtoi(argv[2])); + + return (comp != NULL) ? comp->getId() : 0; +} + +DefineConsoleMethod(Entity, getComponent, S32, (String componentName), (""), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + Component *comp = object->getComponent(componentName); + + return (comp != NULL) ? comp->getId() : 0; + return 0; +} + +/*ConsoleMethod(Entity, getBehaviorByType, S32, 3, 3, "(string BehaviorTemplateName) - gets a behavior\n" + "@param BehaviorTemplateName The name of the template of the behavior instance you want\n" + "@return (ComponentInstance bi) The behavior instance you requested") +{ + ComponentInstance *bInstance = object->getComponentByType(StringTable->insert(argv[2])); + + return (bInstance != NULL) ? bInstance->getId() : 0; +}*/ + +/*ConsoleMethod(Entity, reOrder, bool, 3, 3, "(ComponentInstance inst, [int desiredIndex = 0])\n" + "@param inst The behavior instance you want to reorder\n" + "@param desiredIndex The index you want the behavior instance to be reordered to\n" + "@return (bool success) Whether or not the behavior instance was successfully reordered") +{ + Component *inst = dynamic_cast(Sim::findObject(argv[1])); + + if (inst == NULL) + return false; + + U32 idx = 0; + if (argc > 2) + idx = dAtoi(argv[2]); + + return object->reOrder(inst, idx); +}*/ + +ConsoleMethod(Entity, getComponentCount, S32, 2, 2, "() - Get the count of behaviors on an object\n" + "@return (int count) The number of behaviors on an object") +{ + return object->getComponentCount(); +} + +DefineConsoleMethod(Entity, setComponentDirty, void, (S32 componentID, bool forceUpdate), (0, false), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + /*Component* comp; + if (Sim::findObject(componentID, comp)) + object->setComponentDirty(comp, forceUpdate);*/ +} + +DefineConsoleMethod(Entity, getMoveVector, VectorF, (),, + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getControllingClient() != NULL) + { + //fetch our last move + if (object->lastMove.x != 0 || object->lastMove.y != 0 || object->lastMove.z != 0) + return VectorF(object->lastMove.x, object->lastMove.y, object->lastMove.z); + } + + return VectorF::Zero; +} + +DefineConsoleMethod(Entity, getMoveRotation, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if(object->getControllingClient() != NULL) + { + //fetch our last move + if (object->lastMove.pitch != 0 || object->lastMove.roll != 0 || object->lastMove.yaw != 0) + return VectorF(object->lastMove.pitch, object->lastMove.roll, object->lastMove.yaw); + } + + return VectorF::Zero; +} + +DefineConsoleMethod(Entity, getMoveTrigger, bool, (S32 triggerNum), (0), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getControllingClient() != NULL && triggerNum < MaxTriggerKeys) + { + return object->lastMove.trigger[triggerNum]; + } + + return false; +} + +DefineConsoleMethod(Entity, setForwardVector, void, (VectorF newForward), (VectorF(0,0,0)), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->setForwardVector(newForward); +} + +DefineConsoleMethod(Entity, lookAt, void, (Point3F lookPosition),, + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + //object->setForwardVector(newForward); +} + +DefineConsoleMethod(Entity, rotateTo, void, (Point3F lookPosition, F32 degreePerSecond), (1.0), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + //object->setForwardVector(newForward); +} \ No newline at end of file diff --git a/Engine/source/T3D/entity.h b/Engine/source/T3D/entity.h new file mode 100644 index 0000000000..52818f6f96 --- /dev/null +++ b/Engine/source/T3D/entity.h @@ -0,0 +1,283 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef ENTITY_H +#define ENTITY_H + +#ifndef _GAMEBASE_H_ +#include "T3D/gameBase/gameBase.h" +#endif +#ifndef _MOVEMANAGER_H_ +#include "T3D/gameBase/moveManager.h" +#endif +#ifndef COMPONENT_H +#include "T3D/components/component.h" +#endif +#ifndef _CONTAINERQUERY_H_ +#include "T3D/containerQuery.h" +#endif + +class Component; + +//************************************************************************** +// Entity +//************************************************************************** +class Entity : public GameBase +{ + typedef GameBase Parent; + friend class Component; + +private: + Point3F mPos; + RotationF mRot; + + Vector mComponents; + + Vector mToLoadComponents; + + bool mStartComponentUpdate; + + ContainerQueryInfo containerInfo; + + bool mInitialized; + + Signal< void(Component*) > onComponentAdded; + Signal< void(Component*) > onComponentRemoved; + + Signal< void(MatrixF*) > onTransformSet; + +protected: + + virtual void processTick(const Move* move); + virtual void advanceTime(F32 dt); + virtual void interpolateTick(F32 delta); + + void prepRenderImage(SceneRenderState *state); + + virtual bool onAdd(); + virtual void onRemove(); + +public: + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + enum MaskBits + { + TransformMask = Parent::NextFreeMask << 0, + BoundsMask = Parent::NextFreeMask << 1, + ComponentsMask = Parent::NextFreeMask << 2, + NoWarpMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + + StateDelta mDelta; + S32 mPredictionCount; ///< Number of ticks to predict + + Move lastMove; + + // + Entity(); + ~Entity(); + + static void initPersistFields(); + virtual void onPostAdd(); + + virtual void setTransform(const MatrixF &mat); + virtual void setRenderTransform(const MatrixF &mat); + + void setTransform(Point3F position, RotationF rotation); + + void setRenderTransform(Point3F position, RotationF rotation); + + virtual MatrixF getTransform(); + virtual Point3F getPosition() const { return mPos; } + + //void setTransform(Point3F position, RotationF rot); + + //void setRotation(RotationF rotation); + + void setRotation(RotationF rotation) { + mRot = rotation; + setMaskBits(TransformMask); + }; + RotationF getRotation() { return mRot; } + + void setMountOffset(Point3F posOffset); + void setMountRotation(EulerF rotOffset); + + //static bool _setEulerRotation( void *object, const char *index, const char *data ); + static bool _setPosition(void *object, const char *index, const char *data); + static const char * _getPosition(void* obj, const char* data); + + static bool _setRotation(void *object, const char *index, const char *data); + static const char * _getRotation(void* obj, const char* data); + + virtual void getMountTransform(S32 index, const MatrixF &xfm, MatrixF *outMat); + virtual void getRenderMountTransform(F32 delta, S32 index, const MatrixF &xfm, MatrixF *outMat); + + void setForwardVector(VectorF newForward, VectorF upVector = VectorF::Zero); + + virtual void mountObject(SceneObject *obj, S32 node, const MatrixF &xfm = MatrixF::Identity); + void mountObject(SceneObject* objB, MatrixF txfm); + void onMount(SceneObject *obj, S32 node); + void onUnmount(SceneObject *obj, S32 node); + + // NetObject + U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream); + void unpackUpdate(NetConnection *conn, BitStream *stream); + + void setComponentsDirty(); + void setComponentDirty(Component *comp, bool forceUpdate = false); + + //Components + virtual bool deferAddingComponents() const { return true; } + + template + T* getComponent(); + template + Vector getComponents(); + + Component* getComponent(String componentType); + + U32 getComponentCount() const + { + return mComponents.size(); + } + + virtual void setObjectBox(Box3F objBox); + + void resetWorldBox() { Parent::resetWorldBox(); } + void resetObjectBox() { Parent::resetObjectBox(); } + void resetRenderWorldBox() { Parent::resetRenderWorldBox(); } + + //function redirects for collisions + bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); + bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo* info); + bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere); + virtual void buildConvex(const Box3F& box, Convex* convex); + + Signal< void(SimObject*, String, String) > onDataSet; + virtual void setDataField(StringTableEntry slotName, const char *array, const char *value); + virtual void onStaticModified(const char* slotName, const char* newValue); + + //void pushEvent(const char* eventName, Vector eventParams); + + void updateContainer(); + + ContainerQueryInfo getContainerInfo() { return containerInfo; } + + //camera stuff + virtual void getCameraTransform(F32* pos, MatrixF* mat); + virtual void onCameraScopeQuery(NetConnection* connection, CameraScopeQuery* query); + + //Heirarchy stuff + virtual void addObject(SimObject* object); + virtual void removeObject(SimObject* object); + + virtual SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren); + + //component stuff + bool addComponent(Component *comp); + bool removeComponent(Component *comp, bool deleteComponent); + void clearComponents(bool deleteComponents = true); + Component* getComponent(const U32 index) const; + + void onInspect(); + void onEndInspect(); + + virtual void write(Stream &stream, U32 tabStop, U32 flags); + + // TamlChildren + virtual U32 getTamlChildCount(void) const + { + U32 componentCount = getComponentCount(); + U32 childSize = (U32)size(); + return componentCount + childSize; + } + + virtual SimObject* getTamlChild(const U32 childIndex) const; + + virtual void addTamlChild(SimObject* pSimObject) + { + // Sanity! + AssertFatal(pSimObject != NULL, "SimSet::addTamlChild() - Cannot add a NULL child object."); + + addObject(pSimObject); + } + + Box3F getObjectBox() { return mObjBox; } + MatrixF getWorldToObj() { return mWorldToObj; } + MatrixF getObjToWorld() { return mObjToWorld; } + + DECLARE_CONOBJECT(Entity); + +}; + +template +T *Entity::getComponent() +{ + U32 componentCount = getComponentCount(); + for (U32 i = 0; i < componentCount; i++) + { + T* t = dynamic_cast(mComponents[i]); + + if (t) + { + return t; + } + } + return NULL; +} + +template +Vector Entity::getComponents() +{ + Vector foundObjects; + + T *curObj; + Component* comp; + + // Loop through our child objects. + for (U32 i = 0; i < mComponents.size(); i++) + { + curObj = dynamic_cast(mComponents[i]); + + // Add this child object if appropriate. + if (curObj) + foundObjects.push_back(curObj); + } + + return foundObjects; +} +#endif //ENTITY_H diff --git a/Engine/source/T3D/fps/guiCrossHairHud.cpp b/Engine/source/T3D/fps/guiCrossHairHud.cpp index a8cd3e1ba7..01761b7071 100644 --- a/Engine/source/T3D/fps/guiCrossHairHud.cpp +++ b/Engine/source/T3D/fps/guiCrossHairHud.cpp @@ -117,7 +117,7 @@ void GuiCrossHairHud::onRender(Point2I offset, const RectI &updateRect) GameConnection* conn = GameConnection::getConnectionToServer(); if (!conn) return; - ShapeBase* control = dynamic_cast(conn->getControlObject()); + GameBase* control = dynamic_cast(conn->getCameraObject()); if (!control || !(control->getTypeMask() & ObjectMask) || !conn->isFirstPerson()) return; diff --git a/Engine/source/T3D/fx/fxFoliageReplicator.cpp b/Engine/source/T3D/fx/fxFoliageReplicator.cpp index 51e0447561..59d5af2ec6 100644 --- a/Engine/source/T3D/fx/fxFoliageReplicator.cpp +++ b/Engine/source/T3D/fx/fxFoliageReplicator.cpp @@ -426,7 +426,7 @@ void fxFoliageReplicator::CreateFoliage(void) Point3F MaxPoint( 0.5, 0.5, 0.5 ); // Check Host. - AssertFatal(isClientObject(), "Trying to create Foliage on Server, this is bad!") + AssertFatal(isClientObject(), "Trying to create Foliage on Server, this is bad!"); // Cannot continue without Foliage Texture! if (dStrlen(mFieldData.mFoliageFile) == 0) @@ -1134,7 +1134,7 @@ void fxFoliageReplicator::ProcessQuadrant(fxFoliageQuadrantNode* pParentNode, fx void fxFoliageReplicator::SyncFoliageReplicators(void) { // Check Host. - AssertFatal(isServerObject(), "We *MUST* be on server when Synchronising Foliage!") + AssertFatal(isServerObject(), "We *MUST* be on server when Synchronising Foliage!"); // Find the Replicator Set. SimSet *fxFoliageSet = dynamic_cast(Sim::findObject("fxFoliageSet")); @@ -1196,7 +1196,7 @@ void fxFoliageReplicator::DestroyFoliageItems() void fxFoliageReplicator::DestroyFoliage(void) { // Check Host. - AssertFatal(isClientObject(), "Trying to destroy Foliage on Server, this is bad!") + AssertFatal(isClientObject(), "Trying to destroy Foliage on Server, this is bad!"); // Destroy Quad-tree. mPotentialFoliageNodes = 0; diff --git a/Engine/source/T3D/fx/fxShapeReplicator.cpp b/Engine/source/T3D/fx/fxShapeReplicator.cpp index 9082127160..6093fa0d55 100644 --- a/Engine/source/T3D/fx/fxShapeReplicator.cpp +++ b/Engine/source/T3D/fx/fxShapeReplicator.cpp @@ -224,7 +224,7 @@ void fxShapeReplicator::CreateShapes(void) } // Check Shapes. - AssertFatal(mCurrentShapeCount==0,"Shapes already present, this should not be possible!") + AssertFatal(mCurrentShapeCount==0,"Shapes already present, this should not be possible!"); // Check that we have a shape... if (!mFieldData.mShapeFile) return; diff --git a/Engine/source/T3D/fx/particleEmitter.cpp b/Engine/source/T3D/fx/particleEmitter.cpp index 2391cfe9dd..1f1b2a3eba 100644 --- a/Engine/source/T3D/fx/particleEmitter.cpp +++ b/Engine/source/T3D/fx/particleEmitter.cpp @@ -1702,7 +1702,7 @@ void ParticleEmitter::setupBillboard( Particle *part, lVerts->color = partCol; } \ // Here we deal with UVs for animated particle (billboard) - if (part->dataBlock->animateTexture) + if (part->dataBlock->animateTexture && !part->dataBlock->animTexFrames.empty()) { S32 fm = (S32)(part->currentAge*(1.0/1000.0)*part->dataBlock->framesPerSec); U8 fm_tile = part->dataBlock->animTexFrames[fm % part->dataBlock->numFrames]; diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index d7067c0636..19855e26fc 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -298,6 +298,7 @@ Precipitation::Precipitation() mSplashShaderCameraPosSC = NULL; mSplashShaderAmbientSC = NULL; + mMaxVBDrops = 5000; } Precipitation::~Precipitation() @@ -963,7 +964,7 @@ void Precipitation::initRenderObjects() // Create a volitile vertex buffer which // we'll lock and fill every frame. - mRainVB.set(GFX, mMaxVBDrops * 4, GFXBufferTypeVolatile); + mRainVB.set(GFX, mMaxVBDrops * 4, GFXBufferTypeDynamic); // Init the index buffer for rendering the // entire or a partially filled vb. @@ -1557,7 +1558,7 @@ void Precipitation::renderObject(ObjectRenderInst *ri, SceneRenderState *state, Point3F pos; VectorF orthoDir, velocity, right, up, rightUp(0.0f, 0.0f, 0.0f), leftUp(0.0f, 0.0f, 0.0f); F32 distance = 0; - GFXVertexPT* vertPtr = NULL; + GFXVertexPCT* vertPtr = NULL; const Point2F *tc; // Do this here and we won't have to in the loop! diff --git a/Engine/source/T3D/fx/precipitation.h b/Engine/source/T3D/fx/precipitation.h index 908d7005f5..80f76f2bb0 100644 --- a/Engine/source/T3D/fx/precipitation.h +++ b/Engine/source/T3D/fx/precipitation.h @@ -239,7 +239,7 @@ class Precipitation : public GameBase void destroySplash(Raindrop *drop); ///< Removes a drop from the splash list GFXPrimitiveBufferHandle mRainIB; - GFXVertexBufferHandle mRainVB; + GFXVertexBufferHandle mRainVB; bool onAdd(); void onRemove(); diff --git a/Engine/source/T3D/gameBase/gameBase.cpp b/Engine/source/T3D/gameBase/gameBase.cpp index baede5c499..7cc745c11c 100644 --- a/Engine/source/T3D/gameBase/gameBase.cpp +++ b/Engine/source/T3D/gameBase/gameBase.cpp @@ -590,7 +590,7 @@ void GameBase::onMount( SceneObject *obj, S32 node ) // Are we mounting to a GameBase object? GameBase *gbaseObj = dynamic_cast( obj ); - if ( gbaseObj && gbaseObj->getControlObject() != this ) + if ( gbaseObj && gbaseObj->getControlObject() != this && gbaseObj->getControllingObject() != this) processAfter( gbaseObj ); if (!isGhost()) { diff --git a/Engine/source/T3D/gameBase/gameConnection.cpp b/Engine/source/T3D/gameBase/gameConnection.cpp index 7aada8048f..0f36d63264 100644 --- a/Engine/source/T3D/gameBase/gameConnection.cpp +++ b/Engine/source/T3D/gameBase/gameConnection.cpp @@ -39,6 +39,11 @@ #include "console/engineAPI.h" #include "math/mTransform.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/entity.h" +#include "T3D/components/coreInterfaces.h" +#endif + #ifdef TORQUE_HIFI_NET #include "T3D/gameBase/hifi/hifiMoveList.h" #elif defined TORQUE_EXTENDED_MOVE @@ -551,7 +556,9 @@ void GameConnection::setControlObject(GameBase *obj) obj->setControllingClient(this); // Update the camera's FOV to match the new control object - setControlCameraFov( obj->getCameraFov() ); + //but only if we don't have a specific camera object + if (!mCameraObject) + setControlCameraFov(obj->getCameraFov()); } // Okay, set our control object. @@ -729,7 +736,21 @@ bool GameConnection::getControlCameraFov(F32 * fov) } if (cObj) { +#ifdef TORQUE_EXPERIMENTAL_EC + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + *fov = camInterface->getCameraFov(); + } + } + else + { + *fov = cObj->getCameraFov(); + } +#else *fov = cObj->getCameraFov(); +#endif return(true); } @@ -747,7 +768,26 @@ bool GameConnection::isValidControlCameraFov(F32 fov) obj = obj->getControlObject(); } - return cObj ? cObj->isValidCameraFov(fov) : NULL; + if (cObj) + { +#ifdef TORQUE_EXPERIMENTAL_EC + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + return camInterface->isValidCameraFov(fov); + } + } + else + { + return cObj->isValidCameraFov(fov); + } +#else + return cObj->isValidCameraFov(fov); +#endif + } + + return NULL; } bool GameConnection::setControlCameraFov(F32 fov) @@ -762,9 +802,32 @@ bool GameConnection::setControlCameraFov(F32 fov) } if (cObj) { + +#ifdef TORQUE_EXPERIMENTAL_EC + F32 newFov = 90.f; + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + camInterface->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); + newFov = camInterface->getCameraFov(); + } + else + { + Con::errorf("Attempted to setControlCameraFov, but we don't have a camera!"); + } + } + else + { + // allow shapebase to clamp fov to its datablock values + cObj->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); + newFov = cObj->getCameraFov(); + } +#else // allow shapebase to clamp fov to its datablock values cObj->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); F32 newFov = cObj->getCameraFov(); +#endif // server fov of client has 1degree resolution if( S32(newFov) != S32(mCameraFov) || newFov != fov ) @@ -1147,10 +1210,17 @@ void GameConnection::readPacket(BitStream *bstream) if (bstream->readFlag()) { + bool callScript = false; + if (mCameraObject.isNull()) + callScript = true; + S32 gIndex = bstream->readInt(NetConnection::GhostIdBitSize); GameBase* obj = dynamic_cast(resolveGhost(gIndex)); setCameraObject(obj); obj->readPacketData(this, bstream); + + if (callScript) + initialControlSet_callback(); } else setCameraObject(0); @@ -1727,6 +1797,13 @@ DefineEngineMethod( GameConnection, transmitDataBlocks, void, (S32 sequence),, // Ensure that the client knows that the datablock send is done... object->sendConnectionMessage(GameConnection::DataBlocksDone, object->getDataBlockSequence()); } + + if (iCount == 0) + { + //if we have no datablocks to send, we still need to be able to complete the level load process + //so fire off our callback anyways + object->sendConnectionMessage(GameConnection::DataBlocksDone, object->getDataBlockSequence()); + } } else { diff --git a/Engine/source/T3D/gameBase/moveManager.cpp b/Engine/source/T3D/gameBase/moveManager.cpp index a95164ec7e..2a717bf10d 100644 --- a/Engine/source/T3D/gameBase/moveManager.cpp +++ b/Engine/source/T3D/gameBase/moveManager.cpp @@ -160,12 +160,8 @@ Move::Move() checksum = false; deviceIsKeyboardMouse = false; freeLook = false; - trigger[0] = false; - trigger[1] = false; - trigger[2] = false; - trigger[3] = false; - trigger[4] = false; - trigger[5] = false; + for (S32 i = 0; i< MaxTriggerKeys; i++) + trigger[i] = false; } static inline F32 clampFloatWrap(F32 val) diff --git a/Engine/source/T3D/gameBase/processList.cpp b/Engine/source/T3D/gameBase/processList.cpp index 32b04ca3c9..8e524a2058 100644 --- a/Engine/source/T3D/gameBase/processList.cpp +++ b/Engine/source/T3D/gameBase/processList.cpp @@ -27,6 +27,10 @@ #include "platform/profiler.h" #include "console/consoleTypes.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/component.h" +#endif //---------------------------------------------------------------------------- ProcessObject::ProcessObject() @@ -268,6 +272,13 @@ void ProcessList::advanceObjects() onTickObject(pobj); } +#ifdef TORQUE_EXPERIMENTAL_EC + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + UpdateInterface::all[i]->processTick(); + } +#endif + mTotalTicks++; PROFILE_END(); diff --git a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp index 63122b2231..b9c3a27f12 100644 --- a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp +++ b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp @@ -37,6 +37,11 @@ #include "T3D/gameBase/std/stdMoveList.h" #include "T3D/fx/cameraFXMgr.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/component.h" +#endif + MODULE_BEGIN( ProcessList ) MODULE_INIT @@ -132,6 +137,18 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } +#ifdef TORQUE_EXPERIMENTAL_EC + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + Component *comp = dynamic_cast(UpdateInterface::all[i]); + + if (!comp->isClientObject() || !comp->isActive()) + continue; + + UpdateInterface::all[i]->interpolateTick(mLastDelta); + } +#endif + // Inform objects of total elapsed delta so they can advance // client side animations. F32 dt = F32(timeDelta) / 1000; @@ -146,6 +163,21 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } +#ifdef TORQUE_EXPERIMENTAL_EC + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + Component *comp = dynamic_cast(UpdateInterface::all[i]); + + if (comp) + { + if (!comp->isClientObject() || !comp->isActive()) + continue; + } + + UpdateInterface::all[i]->advanceTime(dt); + } +#endif + return ret; } diff --git a/Engine/source/T3D/gameFunctions.cpp b/Engine/source/T3D/gameFunctions.cpp index 7def7c252c..3c71b57b5c 100644 --- a/Engine/source/T3D/gameFunctions.cpp +++ b/Engine/source/T3D/gameFunctions.cpp @@ -339,7 +339,7 @@ bool GameProcessCameraQuery(CameraQuery *query) if (connection && connection->getControlCameraTransform(0.032f, &query->cameraMatrix)) { - query->object = dynamic_cast(connection->getControlObject()); + query->object = dynamic_cast(connection->getCameraObject()); query->nearPlane = gClientSceneGraph->getNearClip(); // Scale the normal visible distance by the performance diff --git a/Engine/source/T3D/item.cpp b/Engine/source/T3D/item.cpp index c946ffa00b..8970e3e3cc 100644 --- a/Engine/source/T3D/item.cpp +++ b/Engine/source/T3D/item.cpp @@ -556,6 +556,9 @@ void Item::processTick(const Move* move) { Parent::processTick(move); + if ( isMounted() ) + return; + // if (mCollisionObject && !--mCollisionTimeout) mCollisionObject = 0; @@ -606,6 +609,8 @@ void Item::processTick(const Move* move) void Item::interpolateTick(F32 dt) { Parent::interpolateTick(dt); + if ( isMounted() ) + return; // Client side interpolation Point3F pos = delta.pos + delta.posVec * dt; @@ -1365,6 +1370,8 @@ void Item::buildConvex(const Box3F& box, Convex* convex) void Item::advanceTime(F32 dt) { Parent::advanceTime(dt); + if ( isMounted() ) + return; if( mRotate ) { diff --git a/Engine/source/T3D/lightAnimData.cpp b/Engine/source/T3D/lightAnimData.cpp index b61d2b47d9..c5ef93b0f2 100644 --- a/Engine/source/T3D/lightAnimData.cpp +++ b/Engine/source/T3D/lightAnimData.cpp @@ -190,13 +190,15 @@ void LightAnimData::AnimValue::updateKey() } template -bool LightAnimData::AnimValue::animate( F32 time, F32 *output ) +bool LightAnimData::AnimValue::animate(F32 time, F32 *output, bool multiply) { F32 scaledTime, lerpFactor, valueRange, keyFrameLerp; U32 posFrom, posTo; S32 keyFrameFrom, keyFrameTo; F32 initialValue = *output; - + if (!multiply) + initialValue = 1; + bool wasAnimated = false; for ( U32 i=0; i < COUNT; i++ ) @@ -305,6 +307,6 @@ void LightAnimData::animate( LightInfo *lightInfo, LightAnimState *state ) lightInfo->setColor( color ); F32 brightness = state->brightness; - mBrightness.animate( time, &brightness ); + mBrightness.animate( time, &brightness, true ); lightInfo->setBrightness( brightness ); } diff --git a/Engine/source/T3D/lightAnimData.h b/Engine/source/T3D/lightAnimData.h index 69b2ff65df..d8c933674a 100644 --- a/Engine/source/T3D/lightAnimData.h +++ b/Engine/source/T3D/lightAnimData.h @@ -151,7 +151,7 @@ class LightAnimData : public SimDataBlock /// Performs the animation returning the results in the output if /// the time scale is greater than zero. /// @return Returns true if the animation was performed. - bool animate( F32 time, F32 *output ); + bool animate(F32 time, F32 *output, bool multiply = false); /// Called when the key string is changed to update the /// key length and time scale. diff --git a/Engine/source/T3D/lightBase.cpp b/Engine/source/T3D/lightBase.cpp index dd168a4835..5c0ca1f876 100644 --- a/Engine/source/T3D/lightBase.cpp +++ b/Engine/source/T3D/lightBase.cpp @@ -60,13 +60,15 @@ LightBase::LightBase() mColor( ColorF::WHITE ), mBrightness( 1.0f ), mCastShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), mPriority( 1.0f ), mAnimationData( NULL ), mFlareData( NULL ), mFlareScale( 1.0f ) { mNetFlags.set( Ghostable | ScopeAlways ); - mTypeMask = EnvironmentObjectType | LightObjectType; + mTypeMask = LightObjectType; mLight = LightManager::createLightInfo(); @@ -90,6 +92,8 @@ void LightBase::initPersistFields() addField( "color", TypeColorF, Offset( mColor, LightBase ), "Changes the base color hue of the light." ); addField( "brightness", TypeF32, Offset( mBrightness, LightBase ), "Adjusts the lights power, 0 being off completely." ); addField( "castShadows", TypeBool, Offset( mCastShadows, LightBase ), "Enables/disabled shadow casts by this light." ); + addField( "staticRefreshFreq", TypeS32, Offset( mStaticRefreshFreq, LightBase ), "static shadow refresh rate (milliseconds)" ); + addField( "dynamicRefreshFreq", TypeS32, Offset( mDynamicRefreshFreq, LightBase ), "dynamic shadow refresh rate (milliseconds)" ); addField( "priority", TypeF32, Offset( mPriority, LightBase ), "Used for sorting of lights by the light manager. " "Priority determines if a light has a stronger effect than, those with a lower value" ); @@ -277,6 +281,8 @@ U32 LightBase::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) stream->write( mBrightness ); stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mPriority ); @@ -322,6 +328,8 @@ void LightBase::unpackUpdate( NetConnection *conn, BitStream *stream ) stream->read( &mColor ); stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mPriority ); @@ -431,7 +439,7 @@ DefineConsoleMethod( LightBase, playAnimation, void, (const char * anim), (""), "existing one is played." "@hide") { - if ( dStrIsEmpty(anim) ) + if ( String::isEmpty(anim) ) { object->playAnimation(); return; diff --git a/Engine/source/T3D/lightBase.h b/Engine/source/T3D/lightBase.h index a01926edbe..2501c4ca89 100644 --- a/Engine/source/T3D/lightBase.h +++ b/Engine/source/T3D/lightBase.h @@ -56,7 +56,8 @@ class LightBase : public SceneObject, public ISceneLight, public virtual ITickab F32 mBrightness; bool mCastShadows; - + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; F32 mPriority; LightInfo *mLight; diff --git a/Engine/source/T3D/lightDescription.cpp b/Engine/source/T3D/lightDescription.cpp index 919f4418dc..d88d2a682b 100644 --- a/Engine/source/T3D/lightDescription.cpp +++ b/Engine/source/T3D/lightDescription.cpp @@ -36,6 +36,8 @@ LightDescription::LightDescription() brightness( 1.0f ), range( 5.0f ), castShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), animationData( NULL ), animationDataId( 0 ), animationPeriod( 1.0f ), @@ -94,6 +96,8 @@ void LightDescription::initPersistFields() addField( "brightness", TypeF32, Offset( brightness, LightDescription ), "Adjusts the lights power, 0 being off completely." ); addField( "range", TypeF32, Offset( range, LightDescription ), "Controls the size (radius) of the light" ); addField( "castShadows", TypeBool, Offset( castShadows, LightDescription ), "Enables/disabled shadow casts by this light." ); + addField( "staticRefreshFreq", TypeS32, Offset( mStaticRefreshFreq, LightDescription ), "static shadow refresh rate (milliseconds)" ); + addField( "dynamicRefreshFreq", TypeS32, Offset( mDynamicRefreshFreq, LightDescription ), "dynamic shadow refresh rate (milliseconds)" ); endGroup( "Light" ); @@ -153,6 +157,8 @@ void LightDescription::packData( BitStream *stream ) stream->write( brightness ); stream->write( range ); stream->writeFlag( castShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( animationPeriod ); stream->write( animationPhase ); @@ -181,6 +187,8 @@ void LightDescription::unpackData( BitStream *stream ) stream->read( &brightness ); stream->read( &range ); castShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &animationPeriod ); stream->read( &animationPhase ); @@ -200,6 +208,8 @@ void LightDescription::submitLight( LightState *state, const MatrixF &xfm, Light li->setRange( range ); li->setColor( color ); li->setCastShadows( castShadows ); + li->setStaticRefreshFreq(mStaticRefreshFreq); + li->setDynamicRefreshFreq(mDynamicRefreshFreq); li->setTransform( xfm ); if ( animationData ) diff --git a/Engine/source/T3D/lightDescription.h b/Engine/source/T3D/lightDescription.h index b24ff895a9..fda00ebc27 100644 --- a/Engine/source/T3D/lightDescription.h +++ b/Engine/source/T3D/lightDescription.h @@ -101,6 +101,8 @@ class LightDescription : public SimDataBlock F32 brightness; F32 range; bool castShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; LightAnimData *animationData; S32 animationDataId; diff --git a/Engine/source/T3D/missionMarker.cpp b/Engine/source/T3D/missionMarker.cpp index 151cd73366..3a043b0951 100644 --- a/Engine/source/T3D/missionMarker.cpp +++ b/Engine/source/T3D/missionMarker.cpp @@ -442,22 +442,12 @@ void SpawnSphere::unpackUpdate(NetConnection * con, BitStream * stream) void SpawnSphere::processTick( const Move *move ) { - if ( isServerObject() && isMounted() ) - { - MatrixF mat( true ); - mMount.object->getRenderMountTransform( 0.f, mMount.node, mMount.xfm, &mat ); - setTransform( mat ); - } + Parent::processTick( move ); } void SpawnSphere::advanceTime( F32 timeDelta ) { - if ( isMounted() ) - { - MatrixF mat( true ); - mMount.object->getRenderMountTransform( 0.f, mMount.node, mMount.xfm, &mat ); - setTransform( mat ); - } + Parent::advanceTime( timeDelta ); } void SpawnSphere::initPersistFields() diff --git a/Engine/source/T3D/objectTypes.h b/Engine/source/T3D/objectTypes.h index e65745e1b1..a67ea46287 100644 --- a/Engine/source/T3D/objectTypes.h +++ b/Engine/source/T3D/objectTypes.h @@ -147,21 +147,25 @@ enum SceneObjectTypes /// @see PhysicalZone PhysicalZoneObjectType = BIT( 22 ), + EntityObjectType = BIT(23), /// @} }; enum SceneObjectTypeMasks { - STATIC_COLLISION_TYPEMASK = StaticShapeObjectType, + STATIC_COLLISION_TYPEMASK = (StaticShapeObjectType | + EntityObjectType), DAMAGEABLE_TYPEMASK = ( PlayerObjectType | + EntityObjectType | VehicleObjectType ), /// Typemask for objects that should be rendered into shadow passes. /// These should be all objects that are either meant to receive or cast /// shadows or both. SHADOW_TYPEMASK = ( StaticShapeObjectType | - DynamicShapeObjectType ), + DynamicShapeObjectType | + EntityObjectType), /// Typemask for objects that should be subjected to more fine-grained /// culling tests. Anything that is trivial rendering stuff or doesn't @@ -172,7 +176,9 @@ enum SceneObjectTypeMasks CULLING_INCLUDE_TYPEMASK = ( GameBaseObjectType | // Includes most other renderable types; but broader than we ideally want. StaticShapeObjectType | DynamicShapeObjectType | - ZoneObjectType ), // This improves the result of zone traversals. + EntityObjectType | + ZoneObjectType | + LightObjectType ), // This improves the result of zone traversals. /// Mask for objects that should be specifically excluded from zone culling. CULLING_EXCLUDE_TYPEMASK = ( TerrainObjectType | @@ -185,7 +191,9 @@ enum SceneObjectTypeMasks StaticShapeObjectType | DynamicShapeObjectType | LightObjectType | // Flares. - GameBaseObjectType ), + GameBaseObjectType | + TriggerObjectType | + EntityObjectType), /// Typemask to use for rendering when inside the editor. EDITOR_RENDER_TYPEMASK = U32( -1 ), diff --git a/Engine/source/T3D/physics/bullet/btBody.cpp b/Engine/source/T3D/physics/bullet/btBody.cpp index 77c3b81159..f897858544 100644 --- a/Engine/source/T3D/physics/bullet/btBody.cpp +++ b/Engine/source/T3D/physics/bullet/btBody.cpp @@ -378,3 +378,31 @@ void BtBody::setSimulationEnabled( bool enabled ) mIsEnabled = enabled; } + +void BtBody::findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const +{ +} + +void BtBody::moveKinematicTo(const MatrixF &transform) +{ + AssertFatal(mActor, "BtBody::moveKinematicTo - The actor is null!"); + + U32 bodyflags = mActor->getCollisionFlags(); + const bool isKinematic = bodyflags & BF_KINEMATIC; + if (!isKinematic) + { + Con::errorf("BtBody::moveKinematicTo is only for kinematic bodies."); + return; + } + + if (mCenterOfMass) + { + MatrixF xfm; + xfm.mul(transform, *mCenterOfMass); + mActor->setCenterOfMassTransform(btCast(xfm)); + } + else + mActor->setCenterOfMassTransform(btCast(transform)); +} \ No newline at end of file diff --git a/Engine/source/T3D/physics/bullet/btBody.h b/Engine/source/T3D/physics/bullet/btBody.h index 0f1ab669cf..2d138e7e1f 100644 --- a/Engine/source/T3D/physics/bullet/btBody.h +++ b/Engine/source/T3D/physics/bullet/btBody.h @@ -111,6 +111,10 @@ class BtBody : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + + virtual void findContact(SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects) const; + virtual void moveKinematicTo(const MatrixF &xfm); + }; #endif // _T3D_PHYSICS_BTBODY_H_ diff --git a/Engine/source/T3D/physics/bullet/btPlayer.cpp b/Engine/source/T3D/physics/bullet/btPlayer.cpp index c7625e2bba..793f6053cb 100644 --- a/Engine/source/T3D/physics/bullet/btPlayer.cpp +++ b/Engine/source/T3D/physics/bullet/btPlayer.cpp @@ -71,6 +71,7 @@ void BtPlayer::init( const char *type, mObject = obj; mWorld = (BtWorld*)world; + mSlopeAngle = runSurfaceCos; mStepHeight = stepHeight; //if ( dStricmp( type, "Capsule" ) == 0 ) @@ -102,6 +103,17 @@ Point3F BtPlayer::move( const VectorF &disp, CollisionList &outCol ) { AssertFatal( mGhostObject, "BtPlayer::move - The controller is null!" ); + if (!mWorld->isEnabled()) + { + btTransform currentTrans = mGhostObject->getWorldTransform(); + btVector3 currentPos = currentTrans.getOrigin(); + + Point3F returnPos = btCast(currentPos); + + returnPos.z -= mOriginOffset; + return returnPos; + } + // First recover from any penetrations from the previous tick. U32 numPenetrationLoops = 0; bool touchingContact = false; @@ -305,16 +317,9 @@ bool BtPlayer::_sweep( btVector3 *inOutCurrPos, const btVector3 &disp, Collision col.normal = btCast( callback.m_hitNormalWorld ); col.object = PhysicsUserData::getObject( callback.m_hitCollisionObject->getUserPointer() ); - if (disp.z() < 0.0f) - { - // We're sweeping down as part of the stepping routine. In this - // case we want to have the collision normal only point in the opposite direction. - // i.e. up If we include the sideways part of the normal then the Player class - // velocity calculations using this normal will affect the player's forwards - // momentum. This is especially noticable on stairs as the rounded bottom of - // the capsule slides up the corner of a stair. - col.normal.set(0.0f, 0.0f, 1.0f); - } + F32 vd = col.normal.z; + if (vd < mSlopeAngle) + return false; } return true; @@ -341,7 +346,8 @@ void BtPlayer::_stepForward( btVector3 *inOutCurrPos, const btVector3 &displacem callback.m_collisionFilterGroup = mGhostObject->getBroadphaseHandle()->m_collisionFilterGroup; callback.m_collisionFilterMask = mGhostObject->getBroadphaseHandle()->m_collisionFilterMask; - mGhostObject->convexSweepTest( mColShape, start, end, callback, 0.0f ); + if (disp.length()>0.0001) + mGhostObject->convexSweepTest( mColShape, start, end, callback, 0.0f ); // Subtract from the travel fraction. fraction -= callback.m_closestHitFraction; diff --git a/Engine/source/T3D/physics/bullet/btPlayer.h b/Engine/source/T3D/physics/bullet/btPlayer.h index 388035431c..2ad89a946a 100644 --- a/Engine/source/T3D/physics/bullet/btPlayer.h +++ b/Engine/source/T3D/physics/bullet/btPlayer.h @@ -57,6 +57,10 @@ class BtPlayer : public PhysicsPlayer /// F32 mOriginOffset; + /// + F32 mSlopeAngle; + /// + /// F32 mStepHeight; /// diff --git a/Engine/source/T3D/physics/physicsBody.h b/Engine/source/T3D/physics/physicsBody.h index 15e94bcbd3..8d5a3e05f3 100644 --- a/Engine/source/T3D/physics/physicsBody.h +++ b/Engine/source/T3D/physics/physicsBody.h @@ -113,6 +113,14 @@ class PhysicsBody : public PhysicsObject /// virtual void applyImpulse( const Point3F &origin, const Point3F &force ) = 0; + + virtual void findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const = 0; + + /// + virtual void moveKinematicTo(const MatrixF &xfm) = 0; + }; diff --git a/Engine/source/T3D/physics/physx3/px3Body.cpp b/Engine/source/T3D/physics/physx3/px3Body.cpp index 026309f088..877e80af3f 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.cpp +++ b/Engine/source/T3D/physics/physx3/px3Body.cpp @@ -417,3 +417,28 @@ void Px3Body::applyImpulse( const Point3F &origin, const Point3F &force ) } +void Px3Body::findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const +{ +} + +void Px3Body::moveKinematicTo(const MatrixF &transform) +{ + AssertFatal(mActor, "Px3Body::moveKinematicTo - The actor is null!"); + + const bool isKinematic = mBodyFlags & BF_KINEMATIC; + if (!isKinematic) + { + Con::errorf("Px3Body::moveKinematicTo is only for kinematic bodies."); + return; + } + + mWorld->lockScene(); + + physx::PxRigidDynamic *actor = mActor->is(); + actor->setKinematicTarget(px3Cast(transform)); + + mWorld->unlockScene(); +} + diff --git a/Engine/source/T3D/physics/physx3/px3Body.h b/Engine/source/T3D/physics/physx3/px3Body.h index 79096f57b1..29b90f343e 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.h +++ b/Engine/source/T3D/physics/physx3/px3Body.h @@ -117,6 +117,11 @@ class Px3Body : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + + virtual void findContact(SceneObject **contactObject, VectorF *contactNormal, + Vector *outOverlapObjects) const; + virtual void moveKinematicTo(const MatrixF &xfm); + }; #endif // _PX3BODY_H_ diff --git a/Engine/source/T3D/physics/physx3/px3Player.cpp b/Engine/source/T3D/physics/physx3/px3Player.cpp index e831c939c4..10dc65e86c 100644 --- a/Engine/source/T3D/physics/physx3/px3Player.cpp +++ b/Engine/source/T3D/physics/physx3/px3Player.cpp @@ -329,3 +329,33 @@ Box3F Px3Player::getWorldBounds() return px3Cast( bounds ); } +bool Px3Player::testSpacials(const Point3F &nPos, const Point3F &nSize) const +{ + F32 offset = nSize.z * 0.5f; + F32 radius = getMax(nSize.x, nSize.y) * 0.5f - mSkinWidth; + F32 height = (nSize.z - (radius * 2.0f)) * 0.5f; + height -= mSkinWidth * 2.0f; + physx::PxCapsuleGeometry geom(radius, height); + + physx::PxVec3 pos(nPos.x, nPos.y, nPos.z + offset); + physx::PxQuat orientation(Float_HalfPi, physx::PxVec3(0.0f, 1.0f, 0.0f)); + + physx::PxOverlapBuffer hit; + physx::PxQueryFilterData queryFilter(physx::PxQueryFlag::eANY_HIT | physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC); + queryFilter.data.word0 = PX3_DEFAULT; + bool hasHit = mWorld->getScene()->overlap(geom, physx::PxTransform(pos, orientation), hit, queryFilter); + + return !hasHit; // Return true if there are no overlapping objects +} + +void Px3Player::setSpacials(const Point3F &nPos, const Point3F &nSize) +{ + mOriginOffset = nSize.z * 0.5f; + F32 radius = getMax(nSize.x, nSize.y) * 0.5f - mSkinWidth; + F32 height = nSize.z - (radius * 2.0f); + height -= mSkinWidth * 2.0f; + + mWorld->releaseWriteLock(); + mController->resize(height); + px3GetFirstShape(mController->getActor())->getCapsuleGeometry(mGeometry); +} \ No newline at end of file diff --git a/Engine/source/T3D/physics/physx3/px3Player.h b/Engine/source/T3D/physics/physx3/px3Player.h index 55a1409cdb..bd0546663e 100644 --- a/Engine/source/T3D/physics/physx3/px3Player.h +++ b/Engine/source/T3D/physics/physx3/px3Player.h @@ -94,8 +94,8 @@ class Px3Player : public PhysicsPlayer, public physx::PxUserControllerHitReport PhysicsWorld *world ); virtual Point3F move( const VectorF &displacement, CollisionList &outCol ); virtual void findContact( SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects ) const; - virtual bool testSpacials( const Point3F &nPos, const Point3F &nSize ) const { return true; } - virtual void setSpacials( const Point3F &nPos, const Point3F &nSize ) {} + virtual bool testSpacials( const Point3F &nPos, const Point3F &nSize ) const; + virtual void setSpacials( const Point3F &nPos, const Point3F &nSize ); virtual void enableCollision(); virtual void disableCollision(); }; diff --git a/Engine/source/T3D/physics/physx3/px3World.cpp b/Engine/source/T3D/physics/physx3/px3World.cpp index c073423e9e..ca5be23026 100644 --- a/Engine/source/T3D/physics/physx3/px3World.cpp +++ b/Engine/source/T3D/physics/physx3/px3World.cpp @@ -62,7 +62,8 @@ Px3World::Px3World(): mScene( NULL ), mIsEnabled( false ), mEditorTimeScale( 1.0f ), mAccumulator( 0 ), - mControllerManager( NULL ) + mControllerManager(NULL), + mIsSceneLocked(false) { } @@ -335,6 +336,62 @@ void Px3World::releaseWriteLock() //AssertFatal( mScene->isWritable(), "PhysX3World::releaseWriteLock() - We should have been writable now!" ); } +void Px3World::lockScenes() +{ + Px3World *world = dynamic_cast(PHYSICSMGR->getWorld("server")); + + if (world) + world->lockScene(); + + world = dynamic_cast(PHYSICSMGR->getWorld("client")); + + if (world) + world->lockScene(); +} + +void Px3World::unlockScenes() +{ + Px3World *world = dynamic_cast(PHYSICSMGR->getWorld("server")); + + if (world) + world->unlockScene(); + + world = dynamic_cast(PHYSICSMGR->getWorld("client")); + + if (world) + world->unlockScene(); +} + +void Px3World::lockScene() +{ + if (!mScene) + return; + + if (mIsSceneLocked) + { + Con::printf("Px3World: Attempting to lock a scene that is already locked."); + return; + } + + mScene->lockWrite(); + mIsSceneLocked = true; +} + +void Px3World::unlockScene() +{ + if (!mScene) + return; + + if (!mIsSceneLocked) + { + Con::printf("Px3World: Attempting to unlock a scene that is not locked."); + return; + } + + mScene->unlockWrite(); + mIsSceneLocked = false; +} + bool Px3World::castRay( const Point3F &startPnt, const Point3F &endPnt, RayInfo *ri, const Point3F &impulse ) { diff --git a/Engine/source/T3D/physics/physx3/px3World.h b/Engine/source/T3D/physics/physx3/px3World.h index a1235d160e..9556aac4b9 100644 --- a/Engine/source/T3D/physics/physx3/px3World.h +++ b/Engine/source/T3D/physics/physx3/px3World.h @@ -56,6 +56,7 @@ class Px3World : public PhysicsWorld bool mIsEnabled; bool mIsSimulating; bool mIsServer; + bool mIsSceneLocked; U32 mTickCount; ProcessList *mProcessList; F32 mEditorTimeScale; @@ -96,11 +97,15 @@ class Px3World : public PhysicsWorld void releaseWriteLock(); bool isServer(){return mIsServer;} physx::PxController* createController( physx::PxControllerDesc &desc ); + void lockScene(); + void unlockScene(); //static static bool restartSDK( bool destroyOnly = false, Px3World *clientWorld = NULL, Px3World *serverWorld = NULL ); static void releaseWriteLocks(); static physx::PxCooking *getCooking(); static void setTiming(F32 stepTime,U32 maxIterations); + static void lockScenes(); + static void unlockScenes(); }; #endif // _PX3WORLD_H_ diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 3c258c3743..2e365960d1 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -3173,18 +3173,21 @@ void Player::updateMove(const Move* move) // Update the PlayerPose Pose desiredPose = mPose; - if ( mSwimming ) - desiredPose = SwimPose; - else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() ) - desiredPose = CrouchPose; - else if ( runSurface && move->trigger[sProneTrigger] && canProne() ) - desiredPose = PronePose; - else if ( move->trigger[sSprintTrigger] && canSprint() ) - desiredPose = SprintPose; - else if ( canStand() ) - desiredPose = StandPose; + if ( !mIsAiControlled ) + { + if ( mSwimming ) + desiredPose = SwimPose; + else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() ) + desiredPose = CrouchPose; + else if ( runSurface && move->trigger[sProneTrigger] && canProne() ) + desiredPose = PronePose; + else if ( move->trigger[sSprintTrigger] && canSprint() ) + desiredPose = SprintPose; + else if ( canStand() ) + desiredPose = StandPose; - setPose( desiredPose ); + setPose( desiredPose ); + } } @@ -4659,9 +4662,9 @@ Point3F Player::_move( const F32 travelTime, Collision *outCol ) } Point3F distance = end - start; - if (mFabs(distance.x) < mObjBox.len_x() && - mFabs(distance.y) < mObjBox.len_y() && - mFabs(distance.z) < mObjBox.len_z()) + if (mFabs(distance.x) < mScaledBox.len_x() && + mFabs(distance.y) < mScaledBox.len_y() && + mFabs(distance.z) < mScaledBox.len_z()) { // We can potentially early out of this. If there are no polys in the clipped polylist at our // end position, then we can bail, and just set start = end; @@ -5313,10 +5316,10 @@ void Player::setPosition(const Point3F& pos,const Point3F& rot) MatrixF mat; if (isMounted()) { // Use transform from mounted object - MatrixF nmat,zrot; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &nmat ); - zrot.set(EulerF(0.0f, 0.0f, rot.z)); - mat.mul(nmat,zrot); + //MatrixF nmat,zrot; + mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); + //zrot.set(EulerF(0.0f, 0.0f, rot.z)); + //mat.mul(nmat,zrot); } else { mat.set(EulerF(0.0f, 0.0f, rot.z)); @@ -5335,10 +5338,10 @@ void Player::setRenderPosition(const Point3F& pos, const Point3F& rot, F32 dt) MatrixF mat; if (isMounted()) { // Use transform from mounted object - MatrixF nmat,zrot; - mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &nmat ); - zrot.set(EulerF(0.0f, 0.0f, rot.z)); - mat.mul(nmat,zrot); + //MatrixF nmat,zrot; + mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); + //zrot.set(EulerF(0.0f, 0.0f, rot.z)); + //mat.mul(nmat,zrot); } else { EulerF orient(0.0f, 0.0f, rot.z); @@ -6186,6 +6189,10 @@ U32 Player::packUpdate(NetConnection *con, U32 mask, BitStream *stream) { stream->writeFlag(mFalling); + stream->writeFlag(mSwimming); + stream->writeFlag(mJetting); + stream->writeInt(mPose, NumPoseBits); + stream->writeInt(mState,NumStateBits); if (stream->writeFlag(mState == RecoverState)) stream->writeInt(mRecoverTicks,PlayerData::RecoverDelayBits); @@ -6282,7 +6289,11 @@ void Player::unpackUpdate(NetConnection *con, BitStream *stream) if (stream->readFlag()) { mPredictionCount = sMaxPredictionTicks; mFalling = stream->readFlag(); - + + mSwimming = stream->readFlag(); + mJetting = stream->readFlag(); + mPose = (Pose)(stream->readInt(NumPoseBits)); + ActionState actionState = (ActionState)stream->readInt(NumStateBits); if (stream->readFlag()) { mRecoverTicks = stream->readInt(PlayerData::RecoverDelayBits); @@ -6873,31 +6884,13 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S // Play default sound. S32 sound = -1; - if( contactMaterial && contactMaterial->mFootstepSoundId != -1 ) + if (contactMaterial && (contactMaterial->mImpactSoundId>-1 && contactMaterial->mImpactSoundIdmFootstepSoundId; else if( contactObject && contactObject->getTypeMask() & VehicleObjectType ) sound = 2; - switch ( sound ) - { - case 0: // Soft - SFX->playOnce( mDataBlock->sound[PlayerData::FootSoft], &footMat ); - break; - case 1: // Hard - SFX->playOnce( mDataBlock->sound[PlayerData::FootHard], &footMat ); - break; - case 2: // Metal - SFX->playOnce( mDataBlock->sound[PlayerData::FootMetal], &footMat ); - break; - case 3: // Snow - SFX->playOnce( mDataBlock->sound[PlayerData::FootSnow], &footMat ); - break; - /* - default: //Hard - SFX->playOnce( mDataBlock->sound[PlayerData::FootHard], &footMat ); - break; - */ - } + if (sound>=0) + SFX->playOnce(mDataBlock->sound[sound], &footMat); } } @@ -6922,36 +6915,13 @@ void Player:: playImpactSound() else { S32 sound = -1; - if( material && material->mImpactSoundId ) + if (material && (material->mImpactSoundId>-1 && material->mImpactSoundIdmImpactSoundId; else if( rInfo.object->getTypeMask() & VehicleObjectType ) sound = 2; // Play metal; - switch( sound ) - { - case 0: - //Soft - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactSoft ], &getTransform() ); - break; - case 1: - //Hard - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactHard ], &getTransform() ); - break; - case 2: - //Metal - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactMetal ], &getTransform() ); - break; - case 3: - //Snow - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactSnow ], &getTransform() ); - break; - /* - default: - //Hard - alxPlay(mDataBlock->sound[PlayerData::ImpactHard], &getTransform()); - break; - */ - } + if (sound >= 0) + SFX->playOnce(mDataBlock->sound[PlayerData::ImpactStart + sound], &getTransform()); } } } diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index eb1a394435..4ffd6c95d7 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -190,13 +190,15 @@ struct PlayerData: public ShapeBaseData { FootHard, FootMetal, FootSnow, + MaxSoundOffsets, FootShallowSplash, FootWading, FootUnderWater, FootBubbles, MoveBubbles, WaterBreath, - ImpactSoft, + ImpactStart, + ImpactSoft = ImpactStart, ImpactHard, ImpactMetal, ImpactSnow, diff --git a/Engine/source/T3D/pointLight.cpp b/Engine/source/T3D/pointLight.cpp index 4b2a9d983b..7376e8adc4 100644 --- a/Engine/source/T3D/pointLight.cpp +++ b/Engine/source/T3D/pointLight.cpp @@ -116,6 +116,8 @@ void PointLight::_conformLights() mLight->setBrightness( mBrightness ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); mLight->setPriority( mPriority ); // Update the bounds and scale to fit our light. diff --git a/Engine/source/T3D/rigid.cpp b/Engine/source/T3D/rigid.cpp index e2441441fb..31f4d411a2 100644 --- a/Engine/source/T3D/rigid.cpp +++ b/Engine/source/T3D/rigid.cpp @@ -156,7 +156,7 @@ bool Rigid::resolveCollision(const Point3F& p, const Point3F &normal, Rigid* rig return false; // Compute impulse - F32 d, n = -nv * (1.0f + restitution * rigid->restitution); + F32 d, n = -nv * (2.0f + restitution * rigid->restitution); Point3F a1,b1,c1; mCross(r1,normal,&a1); invWorldInertia.mulV(a1,&b1); @@ -173,7 +173,7 @@ bool Rigid::resolveCollision(const Point3F& p, const Point3F &normal, Rigid* rig applyImpulse(r1,impulse); impulse.neg(); - applyImpulse(r2,impulse); + rigid->applyImpulse(r2, impulse); return true; } diff --git a/Engine/source/T3D/rigidShape.cpp b/Engine/source/T3D/rigidShape.cpp index 6660486481..dab7d3627e 100644 --- a/Engine/source/T3D/rigidShape.cpp +++ b/Engine/source/T3D/rigidShape.cpp @@ -732,6 +732,8 @@ void RigidShape::onRemove() void RigidShape::processTick(const Move* move) { Parent::processTick(move); + if ( isMounted() ) + return; // Warp to catch up to server if (mDelta.warpCount < mDelta.warpTicks) @@ -795,6 +797,8 @@ void RigidShape::processTick(const Move* move) void RigidShape::interpolateTick(F32 dt) { Parent::interpolateTick(dt); + if ( isMounted() ) + return; if(dt == 0.0f) setRenderPosition(mDelta.pos, mDelta.rot[1]); @@ -814,6 +818,9 @@ void RigidShape::advanceTime(F32 dt) updateFroth(dt); + if ( isMounted() ) + return; + // Update 3rd person camera offset. Camera update is done // here as it's a client side only animation. mCameraOffset -= diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 55b258a72a..4bca5f23bf 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -879,6 +879,7 @@ IMPLEMENT_CALLBACK( ShapeBase, validateCameraFov, F32, (F32 fov), (fov), ShapeBase::ShapeBase() : mDataBlock( NULL ), mIsAiControlled( false ), + mAiPose( 0 ), mControllingObject( NULL ), mMoveMotion( false ), mShapeBaseMount( NULL ), @@ -1323,6 +1324,12 @@ void ShapeBase::processTick(const Move* move) if (mWhiteOut <= 0.0) mWhiteOut = 0.0; } + + if (isMounted()) { + MatrixF mat; + mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); + Parent::setTransform(mat); + } } void ShapeBase::advanceTime(F32 dt) @@ -1381,6 +1388,12 @@ void ShapeBase::advanceTime(F32 dt) mFadeVal = 1 - mFadeVal; } } + + if (isMounted()) { + MatrixF mat; + mMount.object->getRenderMountTransform( 0.0f, mMount.node, mMount.xfm, &mat ); + Parent::setRenderTransform(mat); + } } void ShapeBase::setControllingClient( GameConnection* client ) @@ -4880,17 +4893,18 @@ DefineEngineMethod( ShapeBase, getTargetCount, S32, (),, "@see getTargetName()\n") { - ShapeBase *obj = dynamic_cast< ShapeBase* > ( object ); - if(obj) - { - // Try to use the client object (so we get the reskinned targets in the Material Editor) - if ((ShapeBase*)obj->getClientObject()) - obj = (ShapeBase*)obj->getClientObject(); + ShapeBase *obj = dynamic_cast< ShapeBase* > ( object ); + if(obj) + { + // Try to use the client object (so we get the reskinned targets in the Material Editor) + if ((ShapeBase*)obj->getClientObject()) + obj = (ShapeBase*)obj->getClientObject(); - return obj->getShapeInstance()->getTargetCount(); + if (obj->getShapeInstance() != NULL) + return obj->getShapeInstance()->getTargetCount(); } - - return -1; + + return -1; } DefineEngineMethod( ShapeBase, changeMaterial, void, ( const char* mapTo, Material* oldMat, Material* newMat ),, diff --git a/Engine/source/T3D/shapeBase.h b/Engine/source/T3D/shapeBase.h index fcada642b5..5a7ff5eb12 100644 --- a/Engine/source/T3D/shapeBase.h +++ b/Engine/source/T3D/shapeBase.h @@ -874,6 +874,7 @@ class ShapeBase : public GameBase, public ISceneLight /// @name Physical Properties /// @{ + S32 mAiPose; ///< Current pose. F32 mEnergy; ///< Current enery level. F32 mRechargeRate; ///< Energy recharge rate (in units/tick). diff --git a/Engine/source/T3D/spotLight.cpp b/Engine/source/T3D/spotLight.cpp index 65e4a72aca..1ec22cd481 100644 --- a/Engine/source/T3D/spotLight.cpp +++ b/Engine/source/T3D/spotLight.cpp @@ -122,6 +122,8 @@ void SpotLight::_conformLights() mLight->setColor( mColor ); mLight->setBrightness( mBrightness ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); mLight->setPriority( mPriority ); mOuterConeAngle = getMax( 0.01f, mOuterConeAngle ); diff --git a/Engine/source/T3D/staticShape.cpp b/Engine/source/T3D/staticShape.cpp index 0f882824a8..ffad91dd33 100644 --- a/Engine/source/T3D/staticShape.cpp +++ b/Engine/source/T3D/staticShape.cpp @@ -232,22 +232,6 @@ void StaticShape::processTick(const Move* move) setImageTriggerState(0,move->trigger[0]); setImageTriggerState(1,move->trigger[1]); } - - if (isMounted()) { - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - Parent::setTransform(mat); - Parent::setRenderTransform(mat); - } -} - -void StaticShape::interpolateTick(F32 delta) -{ - if (isMounted()) { - MatrixF mat; - mMount.object->getRenderMountTransform( delta, mMount.node, mMount.xfm, &mat ); - Parent::setRenderTransform(mat); - } } void StaticShape::setTransform(const MatrixF& mat) diff --git a/Engine/source/T3D/staticShape.h b/Engine/source/T3D/staticShape.h index 6dd9d0432c..86aebda137 100644 --- a/Engine/source/T3D/staticShape.h +++ b/Engine/source/T3D/staticShape.h @@ -38,7 +38,6 @@ struct StaticShapeData: public ShapeBaseData { bool noIndividualDamage; S32 dynamicTypeField; bool isShielded; - F32 energyPerDamagePoint; // DECLARE_CONOBJECT(StaticShapeData); @@ -76,7 +75,6 @@ class StaticShape: public ShapeBase bool onNewDataBlock(GameBaseData *dptr, bool reload); void processTick(const Move *move); - void interpolateTick(F32 delta); void setTransform(const MatrixF &mat); U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream); diff --git a/Engine/source/T3D/trigger.cpp b/Engine/source/T3D/trigger.cpp index 7dbcba6183..64305314f9 100644 --- a/Engine/source/T3D/trigger.cpp +++ b/Engine/source/T3D/trigger.cpp @@ -236,7 +236,7 @@ DECLARE_STRUCT( Polyhedron ); IMPLEMENT_STRUCT( Polyhedron, Polyhedron,, "" ) END_IMPLEMENT_STRUCT; -ConsoleType( floatList, TypeTriggerPolyhedron, Polyhedron ) +ConsoleType(floatList, TypeTriggerPolyhedron, Polyhedron, "") ConsoleGetType( TypeTriggerPolyhedron ) diff --git a/Engine/source/T3D/trigger.h b/Engine/source/T3D/trigger.h index f0f8bc339b..ee3cbdf026 100644 --- a/Engine/source/T3D/trigger.h +++ b/Engine/source/T3D/trigger.h @@ -87,6 +87,10 @@ class Trigger : public GameBase String mLeaveCommand; String mTickCommand; + static const U32 CMD_SIZE = 1024; + + protected: + enum TriggerUpdateBits { TransformMask = Parent::NextFreeMask << 0, @@ -97,10 +101,6 @@ class Trigger : public GameBase NextFreeMask = Parent::NextFreeMask << 5, }; - static const U32 CMD_SIZE = 1024; - - protected: - static bool smRenderTriggers; bool testObject(GameBase* enter); void processTick(const Move *move); @@ -142,7 +142,7 @@ class Trigger : public GameBase // Trigger void setTriggerPolyhedron(const Polyhedron&); - void potentialEnterObject(GameBase*); + virtual void potentialEnterObject(GameBase*); U32 getNumTriggeringObjects() const; GameBase* getObject(const U32); const Vector& getObjects() const { return mObjects; } diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 0ca66b32f9..be0da4cf85 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -91,6 +91,9 @@ ConsoleDocClass( TSStatic, ); TSStatic::TSStatic() +: + cubeDescId( 0 ), + reflectorDesc( NULL ) { mNetFlags.set(Ghostable | ScopeAlways); @@ -186,6 +189,11 @@ void TSStatic::initPersistFields() endGroup("Rendering"); + addGroup( "Reflection" ); + addField( "cubeReflectorDesc", TypeRealString, Offset( cubeDescName, TSStatic ), + "References a ReflectorDesc datablock that defines performance and quality properties for dynamic reflections.\n"); + endGroup( "Reflection" ); + addGroup("Collision"); addField( "collisionType", TypeTSMeshType, Offset( mCollisionType, TSStatic ), @@ -292,6 +300,14 @@ bool TSStatic::onAdd() addToScene(); + if ( isClientObject() ) + { + mCubeReflector.unregisterReflector(); + + if ( reflectorDesc ) + mCubeReflector.registerReflector( this, reflectorDesc ); + } + _updateShouldTick(); // Accumulation @@ -357,6 +373,16 @@ bool TSStatic::_createShape() if ( mAmbientThread ) mShapeInstance->setSequence( mAmbientThread, ambientSeq, 0); + // Resolve CubeReflectorDesc. + if ( cubeDescName.isNotEmpty() ) + { + Sim::findObject( cubeDescName, reflectorDesc ); + } + else if( cubeDescId > 0 ) + { + Sim::findObject( cubeDescId, reflectorDesc ); + } + return true; } @@ -429,6 +455,8 @@ void TSStatic::onRemove() mShapeInstance = NULL; mAmbientThread = NULL; + if ( isClientObject() ) + mCubeReflector.unregisterReflector(); Parent::onRemove(); } @@ -492,10 +520,15 @@ void TSStatic::reSkin() void TSStatic::processTick( const Move *move ) { - AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::adanceTime called with nothing to play." ); - - if ( isServerObject() ) + if ( isServerObject() && mPlayAmbient && mAmbientThread ) mShapeInstance->advanceTime( TickSec, mAmbientThread ); + + if ( isMounted() ) + { + MatrixF mat( true ); + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat ); + setTransform( mat ); + } } void TSStatic::interpolateTick( F32 delta ) @@ -504,14 +537,20 @@ void TSStatic::interpolateTick( F32 delta ) void TSStatic::advanceTime( F32 dt ) { - AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::advanceTime called with nothing to play." ); - - mShapeInstance->advanceTime( dt, mAmbientThread ); + if ( mPlayAmbient && mAmbientThread ) + mShapeInstance->advanceTime( dt, mAmbientThread ); + + if ( isMounted() ) + { + MatrixF mat( true ); + mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); + setRenderTransform( mat ); + } } void TSStatic::_updateShouldTick() { - bool shouldTick = mPlayAmbient && mAmbientThread; + bool shouldTick = (mPlayAmbient && mAmbientThread) || isMounted(); if ( isTicking() != shouldTick ) setProcessTick( shouldTick ); @@ -561,6 +600,12 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) F32 invScale = (1.0f/getMax(getMax(mObjScale.x,mObjScale.y),mObjScale.z)); + // If we're currently rendering our own reflection we + // don't want to render ourselves into it. + if ( mCubeReflector.isRendering() ) + return; + + if ( mForceDetail == -1 ) mShapeInstance->setDetailFromDistance( state, dist * invScale ); else @@ -577,6 +622,9 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) rdata.setFadeOverride( 1.0f ); rdata.setOriginSort( mUseOriginSort ); + if ( mCubeReflector.isEnabled() ) + rdata.setCubemap( mCubeReflector.getCubemap() ); + // Acculumation rdata.setAccuTex(mAccuTex); @@ -604,6 +652,20 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) mat.scale( mObjScale ); GFX->setWorldMatrix( mat ); + if ( state->isDiffusePass() && mCubeReflector.isEnabled() && mCubeReflector.getOcclusionQuery() ) + { + RenderPassManager *pass = state->getRenderPass(); + OccluderRenderInst *ri = pass->allocInst(); + + ri->type = RenderPassManager::RIT_Occluder; + ri->query = mCubeReflector.getOcclusionQuery(); + mObjToWorld.mulP( mObjBox.getCenter(), &ri->position ); + ri->scale.set( mObjBox.getExtents() ); + ri->orientation = pass->allocUniqueXform( mObjToWorld ); + ri->isSphere = false; + state->getRenderPass()->addInst( ri ); + } + mShapeInstance->animate(); if(mShapeInstance) { @@ -657,12 +719,15 @@ void TSStatic::onScaleChanged() else _updatePhysics(); } + + setMaskBits( ScaleMask ); } void TSStatic::setTransform(const MatrixF & mat) { Parent::setTransform(mat); - setMaskBits( TransformMask ); + if ( !isMounted() ) + setMaskBits( TransformMask ); if ( mPhysicsRep ) mPhysicsRep->setTransform( mat ); @@ -683,9 +748,15 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) { U32 retMask = Parent::packUpdate(con, mask, stream); - mathWrite( *stream, getTransform() ); - mathWrite( *stream, getScale() ); - stream->writeString( mShapeName ); + if ( stream->writeFlag( mask & TransformMask ) ) + mathWrite( *stream, getTransform() ); + + if ( stream->writeFlag( mask & ScaleMask ) ) + { + // Only write one bit if the scale is one. + if ( stream->writeFlag( mObjScale != Point3F::One ) ) + mathWrite( *stream, mObjScale ); + } if ( stream->writeFlag( mask & UpdateCollisionMask ) ) stream->write( (U32)mCollisionType ); @@ -693,17 +764,21 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) if ( stream->writeFlag( mask & SkinMask ) ) con->packNetStringHandleU( stream, mSkinNameHandle ); - stream->write( (U32)mDecalType ); + if (stream->writeFlag(mask & AdvancedStaticOptionsMask)) + { + stream->writeString(mShapeName); + stream->write((U32)mDecalType); - stream->writeFlag( mAllowPlayerStep ); - stream->writeFlag( mMeshCulling ); - stream->writeFlag( mUseOriginSort ); + stream->writeFlag(mAllowPlayerStep); + stream->writeFlag(mMeshCulling); + stream->writeFlag(mUseOriginSort); - stream->write( mRenderNormalScalar ); + stream->write(mRenderNormalScalar); - stream->write( mForceDetail ); + stream->write(mForceDetail); - stream->writeFlag( mPlayAmbient ); + stream->writeFlag(mPlayAmbient); + } if ( stream->writeFlag(mUseAlphaFade) ) { @@ -715,6 +790,10 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) if ( mLightPlugin ) retMask |= mLightPlugin->packUpdate(this, AdvancedStaticOptionsMask, con, mask, stream); + if( stream->writeFlag( reflectorDesc != NULL ) ) + { + stream->writeRangedU32( reflectorDesc->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast ); + } return retMask; } @@ -722,14 +801,25 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) { Parent::unpackUpdate(con, stream); - MatrixF mat; - Point3F scale; - mathRead( *stream, &mat ); - mathRead( *stream, &scale ); - setScale( scale); - setTransform(mat); + if ( stream->readFlag() ) // TransformMask + { + MatrixF mat; + mathRead( *stream, &mat ); + setTransform(mat); + setRenderTransform(mat); + } - mShapeName = stream->readSTString(); + if ( stream->readFlag() ) // ScaleMask + { + if ( stream->readFlag() ) + { + VectorF scale; + mathRead( *stream, &scale ); + setScale( scale ); + } + else + setScale( Point3F::One ); + } if ( stream->readFlag() ) // UpdateCollisionMask { @@ -757,17 +847,21 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) } } - stream->read( (U32*)&mDecalType ); + if (stream->readFlag()) // AdvancedStaticOptionsMask + { + mShapeName = stream->readSTString(); - mAllowPlayerStep = stream->readFlag(); - mMeshCulling = stream->readFlag(); - mUseOriginSort = stream->readFlag(); + stream->read((U32*)&mDecalType); - stream->read( &mRenderNormalScalar ); + mAllowPlayerStep = stream->readFlag(); + mMeshCulling = stream->readFlag(); + mUseOriginSort = stream->readFlag(); - stream->read( &mForceDetail ); + stream->read(&mRenderNormalScalar); - mPlayAmbient = stream->readFlag(); + stream->read(&mForceDetail); + mPlayAmbient = stream->readFlag(); + } mUseAlphaFade = stream->readFlag(); if (mUseAlphaFade) @@ -782,6 +876,11 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) mLightPlugin->unpackUpdate(this, con, stream); } + if( stream->readFlag() ) + { + cubeDescId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast ); + } + if ( isProperlyAdded() ) _updateShouldTick(); } @@ -1100,6 +1199,19 @@ void TSStaticPolysoupConvex::getFeatures(const MatrixF& mat,const VectorF& n, Co // All done! } +void TSStatic::onMount( SceneObject *obj, S32 node ) +{ + Parent::onMount(obj, node); + _updateShouldTick(); +} + +void TSStatic::onUnmount( SceneObject *obj, S32 node ) +{ + Parent::onUnmount( obj, node ); + setMaskBits( TransformMask ); + _updateShouldTick(); +} + //------------------------------------------------------------------------ //These functions are duplicated in tsStatic and shapeBase. //They each function a little differently; but achieve the same purpose of gathering diff --git a/Engine/source/T3D/tsStatic.h b/Engine/source/T3D/tsStatic.h index 704cac7831..57a7fc695b 100644 --- a/Engine/source/T3D/tsStatic.h +++ b/Engine/source/T3D/tsStatic.h @@ -39,6 +39,10 @@ #include "ts/tsShape.h" #endif +#ifndef _REFLECTOR_H_ + #include "scene/reflector.h" +#endif + class TSShapeInstance; class TSThread; class TSStatic; @@ -147,6 +151,11 @@ class TSStatic : public SceneObject /// Start or stop processing ticks depending on our state. void _updateShouldTick(); + String cubeDescName; + U32 cubeDescId; + ReflectorDesc *reflectorDesc; + CubeReflector mCubeReflector; + protected: Convex *mConvexList; @@ -209,6 +218,8 @@ class TSStatic : public SceneObject void onScaleChanged(); void prepRenderImage( SceneRenderState *state ); void inspectPostApply(); + virtual void onMount( SceneObject *obj, S32 node ); + virtual void onUnmount( SceneObject *obj, S32 node ); /// The type of mesh data use for collision queries. MeshType getCollisionType() const { return mCollisionType; } diff --git a/Engine/source/T3D/turret/turretShape.cpp b/Engine/source/T3D/turret/turretShape.cpp index 13aa42bf16..dea5536996 100644 --- a/Engine/source/T3D/turret/turretShape.cpp +++ b/Engine/source/T3D/turret/turretShape.cpp @@ -632,13 +632,6 @@ void TurretShape::processTick(const Move* move) if (!isGhost()) updateAnimation(TickSec); - if (isMounted()) { - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - ShapeBase::setTransform(mat); - ShapeBase::setRenderTransform(mat); - } - updateMove(move); } @@ -679,19 +672,11 @@ void TurretShape::advanceTime(F32 dt) } } - // If there is a recoil or image-based thread then - // we also need to update the nodes. - if (mRecoilThread || mImageStateThread) - updateNodes = true; - Parent::advanceTime(dt); updateAnimation(dt); - if (updateNodes) - { - _updateNodes(mRot); - } + _setRotation(mRot); } void TurretShape::setTransform( const MatrixF& mat ) diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index 1f18b426f0..5533099b33 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/Engine/source/T3D/vehicles/vehicle.cpp @@ -46,6 +46,9 @@ #include "gfx/primBuilder.h" #include "gfx/gfxDrawUtil.h" #include "materials/materialDefinition.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" namespace { @@ -203,7 +206,8 @@ VehicleData::VehicleData() dMemset(waterSound, 0, sizeof(waterSound)); collDamageThresholdVel = 20; - collDamageMultiplier = 0.05f; + collDamageMultiplier = 0.05f; + enablePhysicsRep = true; } @@ -315,6 +319,7 @@ void VehicleData::packData(BitStream* stream) stream->write(softSplashSoundVel); stream->write(medSplashSoundVel); stream->write(hardSplashSoundVel); + stream->write(enablePhysicsRep); // write the water sound profiles for(i = 0; i < MaxSounds; i++) @@ -411,6 +416,7 @@ void VehicleData::unpackData(BitStream* stream) stream->read(&softSplashSoundVel); stream->read(&medSplashSoundVel); stream->read(&hardSplashSoundVel); + stream->read(&enablePhysicsRep); // write the water sound profiles for(i = 0; i < MaxSounds; i++) @@ -465,6 +471,11 @@ void VehicleData::unpackData(BitStream* stream) void VehicleData::initPersistFields() { + addGroup("Physics"); + addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, VehicleData), + "@brief Creates a representation of the object in the physics plugin.\n"); + endGroup("Physics"); + addField( "jetForce", TypeF32, Offset(jetForce, VehicleData), "@brief Additional force applied to the vehicle when it is jetting.\n\n" "For WheeledVehicles, the force is applied in the forward direction. For " @@ -682,6 +693,8 @@ Vehicle::Vehicle() mWorkingQueryBox.minExtents.set(-1e9f, -1e9f, -1e9f); mWorkingQueryBox.maxExtents.set(-1e9f, -1e9f, -1e9f); mWorkingQueryBoxCountDown = sWorkingQueryBoxStaleThreshold; + + mPhysicsRep = NULL; } U32 Vehicle::getCollisionMask() @@ -695,6 +708,25 @@ Point3F Vehicle::getVelocity() const return mRigid.linVelocity; } +void Vehicle::_createPhysics() +{ + SAFE_DELETE(mPhysicsRep); + + if (!PHYSICSMGR || !mDataBlock->enablePhysicsRep) + return; + + TSShape *shape = mShapeInstance->getShape(); + PhysicsCollision *colShape = NULL; + colShape = shape->buildColShape(false, getScale()); + + if (colShape) + { + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_KINEMATIC, this, world); + mPhysicsRep->setTransform(getTransform()); + } +} //---------------------------------------------------------------------------- bool Vehicle::onAdd() @@ -776,11 +808,15 @@ bool Vehicle::onAdd() mConvex.box.maxExtents.convolve(mObjScale); mConvex.findNodeTransform(); + _createPhysics(); + return true; } void Vehicle::onRemove() { + SAFE_DELETE(mPhysicsRep); + U32 i=0; for( i=0; ienablePhysicsRep is false as mPhysicsRep will be NULL if it is + if (mPhysicsRep) + mPhysicsRep->moveKinematicTo(getTransform()); } } @@ -888,6 +931,8 @@ void Vehicle::interpolateTick(F32 dt) PROFILE_SCOPE( Vehicle_InterpolateTick ); Parent::interpolateTick(dt); + if ( isMounted() ) + return; if(dt == 0.0f) setRenderPosition(mDelta.pos, mDelta.rot[1]); diff --git a/Engine/source/T3D/vehicles/vehicle.h b/Engine/source/T3D/vehicles/vehicle.h index 695c166861..dd8619fd66 100644 --- a/Engine/source/T3D/vehicles/vehicle.h +++ b/Engine/source/T3D/vehicles/vehicle.h @@ -127,6 +127,8 @@ struct VehicleData: public ShapeBaseData F32 splashFreqMod; F32 splashVelEpsilon; + bool enablePhysicsRep; + // VehicleData(); bool preload(bool server, String &errorStr); @@ -142,6 +144,7 @@ struct VehicleData: public ShapeBaseData //---------------------------------------------------------------------------- +class PhysicsBody; class Vehicle: public ShapeBase { @@ -177,6 +180,8 @@ class Vehicle: public ShapeBase Point3F cameraRotVec; }; + PhysicsBody *mPhysicsRep; + StateDelta mDelta; S32 mPredictionCount; ///< Number of ticks to predict VehicleData* mDataBlock; @@ -262,6 +267,8 @@ class Vehicle: public ShapeBase bool onAdd(); void onRemove(); + void _createPhysics(); + /// Interpolates between move ticks @see processTick /// @param dt Change in time between the last call and this call to the function void interpolateTick(F32 dt); diff --git a/Engine/source/app/game.cpp b/Engine/source/app/game.cpp index 4579b4819a..2f0e30c777 100644 --- a/Engine/source/app/game.cpp +++ b/Engine/source/app/game.cpp @@ -202,6 +202,26 @@ DefineConsoleFunction( getRealTime, S32, (), , "()" return Platform::getRealMilliseconds(); } +ConsoleFunction( getLocalTime, const char *, 1, 1, "Return the current local time as: weekday month day year hour min sec.\n\n" + "Local time is platform defined.") +{ + Platform::LocalTime lt; + Platform::getLocalTime(lt); + + static const U32 bufSize = 128; + char *retBuffer = Con::getReturnBuffer(bufSize); + dSprintf(retBuffer, bufSize, "%d %d %d %d %02d %02d %02d", + lt.weekday, + lt.month + 1, + lt.monthday, + lt.year + 1900, + lt.hour, + lt.min, + lt.sec); + + return retBuffer; +} + ConsoleFunctionGroupEnd(Platform); //----------------------------------------------------------------------------- diff --git a/Engine/source/app/mainLoop.cpp b/Engine/source/app/mainLoop.cpp index 4ee92b1171..7e9034699b 100644 --- a/Engine/source/app/mainLoop.cpp +++ b/Engine/source/app/mainLoop.cpp @@ -65,6 +65,14 @@ #include "platform/platformVFS.h" #endif +#ifndef _MODULE_MANAGER_H +#include "module/moduleManager.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + DITTS( F32, gTimeScale, 1.0 ); DITTS( U32, gTimeAdvance, 0 ); DITTS( U32, gFrameSkip, 0 ); @@ -257,7 +265,7 @@ void StandardMainLoop::init() // Initialize modules. - ModuleManager::initializeSystem(); + EngineModuleManager::initializeSystem(); // Initialise ITickable. #ifdef TORQUE_TGB_ONLY @@ -288,6 +296,15 @@ void StandardMainLoop::init() Con::addVariable("MiniDump::Params", TypeString, &gMiniDumpParams); Con::addVariable("MiniDump::ExecDir", TypeString, &gMiniDumpExecDir); #endif + + // Register the module manager. + ModuleDatabase.registerObject("ModuleDatabase"); + + // Register the asset database. + AssetDatabase.registerObject("AssetDatabase"); + + // Register the asset database as a module listener. + ModuleDatabase.addListener(&AssetDatabase); ActionMap* globalMap = new ActionMap; globalMap->registerObject("GlobalActionMap"); @@ -317,10 +334,16 @@ void StandardMainLoop::shutdown() delete tm; preShutdown(); + + // Unregister the module database. + ModuleDatabase.unregisterObject(); + + // Unregister the asset database. + AssetDatabase.unregisterObject(); // Shut down modules. - ModuleManager::shutdownSystem(); + EngineModuleManager::shutdownSystem(); ThreadPool::GlobalThreadPool::deleteSingleton(); diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index f2818b4262..06f3205767 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -27,6 +27,7 @@ #include "console/consoleInternal.h" #include "core/strings/stringUnit.h" #include "console/engineAPI.h" +#include "core/stream/fileStream.h" TCPObject *TCPObject::table[TCPObject::TableSize] = {0, }; @@ -138,6 +139,15 @@ IMPLEMENT_CALLBACK(TCPObject, onLine, void, (const char* line), (line), "@param line Data sent from the server.\n" ); +IMPLEMENT_CALLBACK(TCPObject, onPacket, bool, (const char* data), (data), + "@brief Called when we get a packet with no newlines or nulls (probably websocket).\n\n" + "@param data Data sent from the server.\n" + "@return true if script handled the packet.\n" + ); +IMPLEMENT_CALLBACK(TCPObject, onEndReceive, void, (), (), + "@brief Called when we are done reading all lines.\n\n" + ); + IMPLEMENT_CALLBACK(TCPObject, onDNSResolved, void, (),(), "Called whenever the DNS has been resolved.\n" ); @@ -355,7 +365,7 @@ void TCPObject::onConnectFailed() onConnectFailed_callback(); } -void TCPObject::finishLastLine() +bool TCPObject::finishLastLine() { if(mBufferSize) { @@ -364,6 +374,25 @@ void TCPObject::finishLastLine() dFree(mBuffer); mBuffer = 0; mBufferSize = 0; + + return true; + } + + return false; +} + +bool TCPObject::isBufferEmpty() +{ + return (mBufferSize <= 0); +} + +void TCPObject::emptyBuffer() +{ + if(mBufferSize) + { + dFree(mBuffer); + mBuffer = 0; + mBufferSize = 0; } } @@ -400,6 +429,25 @@ void TCPObject::send(const U8 *buffer, U32 len) Net::sendtoSocket(mTag, buffer, S32(len)); } +bool TCPObject::sendFile(const char* fileName) +{ + //Open the file for reading + FileStream readFile; + if(!readFile.open(fileName, Torque::FS::File::Read)) + { + return false; + } + + //Read each byte into our buffer + Vector buffer(readFile.getStreamSize()); + readFile.read(buffer.size(), &buffer); + + //Send the buffer + send(buffer.address(), buffer.size()); + + return true; +} + DefineEngineMethod(TCPObject, send, void, (const char *data),, "@brief Transmits the data string to the connected computer.\n\n" @@ -421,6 +469,20 @@ DefineEngineMethod(TCPObject, send, void, (const char *data),, object->send( (const U8*)data, dStrlen(data) ); } +DefineEngineMethod(TCPObject, sendFile, bool, (const char *fileName),, + "@brief Transmits the file in binary to the connected computer.\n\n" + + "@param fileName The filename of the file to transfer.\n") +{ + return object->sendFile(fileName); +} + +DefineEngineMethod(TCPObject, finishLastLine, void, (),, + "@brief Eat the rest of the lines.\n") +{ + object->finishLastLine(); +} + DefineEngineMethod(TCPObject, listen, void, (U32 port),, "@brief Start listening on the specified port for connections.\n\n" @@ -499,6 +561,29 @@ void processConnectedReceiveEvent(NetSocket sock, RawData incomingData) size -= ret; buffer += ret; } + + //If our buffer now has something in it then it's probably a web socket packet and lets handle it + if(!tcpo->isBufferEmpty()) + { + //Copy all the data into a string (may be a quicker way of doing this) + U8 *data = (U8*)incomingData.data; + String temp; + for(S32 i = 0; i < incomingData.size; i++) + { + temp += data[i]; + } + + //Send the packet to script + bool handled = tcpo->onPacket_callback(temp); + + //If the script did something with it, clear the buffer + if(handled) + { + tcpo->emptyBuffer(); + } + } + + tcpo->onEndReceive_callback(); } void processConnectedAcceptEvent(NetSocket listeningPort, NetSocket newConnection, NetAddress originatingAddress) diff --git a/Engine/source/app/net/tcpObject.h b/Engine/source/app/net/tcpObject.h index 9c4582eabc..9a8b5e40da 100644 --- a/Engine/source/app/net/tcpObject.h +++ b/Engine/source/app/net/tcpObject.h @@ -36,6 +36,8 @@ class TCPObject : public SimObject DECLARE_CALLBACK(void, onConnectionRequest, (const char* address, const char* ID)); DECLARE_CALLBACK(void, onLine, (const char* line)); + DECLARE_CALLBACK(bool, onPacket, (const char* data)); + DECLARE_CALLBACK(void, onEndReceive, ()); DECLARE_CALLBACK(void, onDNSResolved,()); DECLARE_CALLBACK(void, onDNSFailed, ()); DECLARE_CALLBACK(void, onConnected, ()); @@ -60,7 +62,9 @@ class TCPObject : public SimObject virtual ~TCPObject(); void parseLine(U8 *buffer, U32 *start, U32 bufferLen); - void finishLastLine(); + bool finishLastLine(); + bool isBufferEmpty(); + void emptyBuffer(); static TCPObject *find(NetSocket tag); @@ -81,6 +85,12 @@ class TCPObject : public SimObject bool processArguments(S32 argc, ConsoleValueRef *argv); void send(const U8 *buffer, U32 bufferLen); + + ///Send an entire file over tcp + ///@arg fileName Full path to file you want to send + ///@return true if file was sent, false if not (file doesn't exist) + bool sendFile(const char* fileName); + void addToTable(NetSocket newTag); void removeFromTable(); diff --git a/Engine/source/assets/assetBase.cpp b/Engine/source/assets/assetBase.cpp new file mode 100644 index 0000000000..e5cf9bf6c9 --- /dev/null +++ b/Engine/source/assets/assetBase.cpp @@ -0,0 +1,352 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "assetBase_ScriptBinding.h" + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(AssetBase); + +//----------------------------------------------------------------------------- + +StringTableEntry assetNameField = StringTable->insert("AssetName"); +StringTableEntry assetDescriptionField = StringTable->insert("AssetDescription"); +StringTableEntry assetCategoryField = StringTable->insert("AssetCategory"); +StringTableEntry assetAutoUnloadField = StringTable->insert("AssetAutoUnload"); +StringTableEntry assetInternalField = StringTable->insert("AssetInternal"); +StringTableEntry assetPrivateField = StringTable->insert("AssetPrivate"); + +//----------------------------------------------------------------------------- + +AssetBase::AssetBase() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); +} + +//----------------------------------------------------------------------------- + +AssetBase::~AssetBase() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void AssetBase::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + // Asset configuration. + addProtectedField(assetNameField, TypeString, 0, &setAssetName, &getAssetName, &writeAssetName, "The name of the asset. The is not a unique identification like an asset Id."); + addProtectedField(assetDescriptionField, TypeString, 0, &setAssetDescription, &getAssetDescription, &writeAssetDescription, "The simple description of the asset contents."); + addProtectedField(assetCategoryField, TypeString, 0, &setAssetCategory, &getAssetCategory, &writeAssetCategory, "An arbitrary category that can be used to categorized assets."); + addProtectedField(assetAutoUnloadField, TypeBool, 0, &setAssetAutoUnload, &getAssetAutoUnload, &writeAssetAutoUnload, "Whether the asset is automatically unloaded when an asset is released and has no other acquisitions or not."); + addProtectedField(assetInternalField, TypeBool, 0, &setAssetInternal, &getAssetInternal, &writeAssetInternal, "Whether the asset is used internally only or not."); + addProtectedField(assetPrivateField, TypeBool, 0, &defaultProtectedNotSetFn, &getAssetPrivate, &defaultProtectedNotWriteFn, "Whether the asset is private or not."); +} + +//------------------------------------------------------------------------------ + +void AssetBase::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); + + // Cast to asset. + AssetBase* pAsset = static_cast(object); + + // Sanity! + AssertFatal(pAsset != NULL, "AssetBase::copyTo() - Object is not the correct type."); + + // Copy state. + pAsset->setAssetName(getAssetName()); + pAsset->setAssetDescription(getAssetDescription()); + pAsset->setAssetCategory(getAssetCategory()); + pAsset->setAssetAutoUnload(getAssetAutoUnload()); + pAsset->setAssetInternal(getAssetInternal()); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetDescription(const char* pAssetDescription) +{ + // Fetch asset description. + StringTableEntry assetDescription = StringTable->insert(pAssetDescription); + + // Ignore no change. + if (mpAssetDefinition->mAssetDescription == assetDescription) + return; + + // Update. + mpAssetDefinition->mAssetDescription = assetDescription; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetCategory(const char* pAssetCategory) +{ + // Fetch asset category. + StringTableEntry assetCategory = StringTable->insert(pAssetCategory); + + // Ignore no change. + if (mpAssetDefinition->mAssetCategory == assetCategory) + return; + + // Update. + mpAssetDefinition->mAssetCategory = assetCategory; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetAutoUnload(const bool autoUnload) +{ + // Ignore no change. + if (mpAssetDefinition->mAssetAutoUnload == autoUnload) + return; + + // Update. + mpAssetDefinition->mAssetAutoUnload = autoUnload; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetInternal(const bool assetInternal) +{ + // Ignore no change, + if (mpAssetDefinition->mAssetInternal == assetInternal) + return; + + // Update. + mpAssetDefinition->mAssetInternal = assetInternal; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetBase::expandAssetFilePath(const char* pAssetFilePath) const +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_ExpandAssetFilePath); + + // Sanity! + AssertFatal(pAssetFilePath != NULL, "Cannot expand a NULL asset path."); + + // Fetch asset file-path length. + const U32 assetFilePathLength = dStrlen(pAssetFilePath); + + // Are there any characters in the path? + if (assetFilePathLength == 0) + { + // No, so return empty. + return StringTable->EmptyString(); + } + + // Fetch the asset base-path hint. + StringTableEntry assetBasePathHint; + if (getOwned() && !getAssetPrivate()) + { + assetBasePathHint = mpOwningAssetManager->getAssetPath(getAssetId()); + } + else + { + assetBasePathHint = NULL; + } + + // Expand the path with the asset base-path hint. + char assetFilePathBuffer[1024]; + Con::expandPath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath, assetBasePathHint); + return StringTable->insert(assetFilePathBuffer); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetBase::collapseAssetFilePath(const char* pAssetFilePath) const +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_CollapseAssetFilePath); + + // Sanity! + AssertFatal(pAssetFilePath != NULL, "Cannot collapse a NULL asset path."); + + // Fetch asset file-path length. + const U32 assetFilePathLength = dStrlen(pAssetFilePath); + + // Are there any characters in the path? + if (assetFilePathLength == 0) + { + // No, so return empty. + return StringTable->EmptyString(); + } + + char assetFilePathBuffer[1024]; + + // Is the asset not owned or private? + if (!getOwned() || getAssetPrivate()) + { + // Yes, so we can only collapse the path using the platform layer. + Con::collapsePath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath); + return StringTable->insert(assetFilePathBuffer); + } + + // Fetch asset base-path. + StringTableEntry assetBasePath = mpOwningAssetManager->getAssetPath(getAssetId()); + + // Is the asset file-path location within the asset base-path? + if (Con::isBasePath(pAssetFilePath, assetBasePath)) + { + // Yes, so fetch path relative to the asset base-path. + StringTableEntry relativePath = Platform::makeRelativePathName(pAssetFilePath, assetBasePath); + + // Format the collapsed path. + dSprintf(assetFilePathBuffer, sizeof(assetFilePathBuffer), "%s", relativePath); + } + else + { + // No, so we can collapse the path using the platform layer. + Con::collapsePath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath); + } + + return StringTable->insert(assetFilePathBuffer); +} + +//----------------------------------------------------------------------------- + +void AssetBase::refreshAsset(void) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_RefreshAsset); + + // Finish if asset is not owned or is not initialized. + if (mpOwningAssetManager == NULL || !mAssetInitialized) + return; + + // Yes, so refresh the asset via the asset manager. + mpOwningAssetManager->refreshAsset(getAssetId()); +} + +//----------------------------------------------------------------------------- + +void AssetBase::acquireAssetReference(void) +{ + // Acquired the acquired reference count. + if (mpOwningAssetManager != NULL) + mpOwningAssetManager->acquireAcquiredReferenceCount(); + + mAcquireReferenceCount++; +} + +//----------------------------------------------------------------------------- + +bool AssetBase::releaseAssetReference(void) +{ + // Are there any acquisition references? + if (mAcquireReferenceCount == 0) + { + // Return "unload" unless auto unload is off. + return mpAssetDefinition->mAssetAutoUnload; + } + + // Release the acquired reference count. + if (mpOwningAssetManager != NULL) + mpOwningAssetManager->releaseAcquiredReferenceCount(); + + // Release reference. + mAcquireReferenceCount--; + + // Are there any acquisition references? + if (mAcquireReferenceCount == 0) + { + // No, so return "unload" unless auto unload is off. + return mpAssetDefinition->mAssetAutoUnload; + } + + // Return "don't unload". + return false; +} + +//----------------------------------------------------------------------------- + +void AssetBase::setOwned(AssetManager* pAssetManager, AssetDefinition* pAssetDefinition) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_setOwned); + + // Sanity! + AssertFatal(pAssetManager != NULL, "Cannot set asset ownership with NULL asset manager."); + AssertFatal(mpOwningAssetManager == NULL, "Cannot set asset ownership if it is already owned."); + AssertFatal(pAssetDefinition != NULL, "Cannot set asset ownership with a NULL asset definition."); + AssertFatal(mpAssetDefinition != NULL, "Asset ownership assigned but has a NULL asset definition."); + AssertFatal(mpAssetDefinition->mAssetName == pAssetDefinition->mAssetName, "Asset ownership differs by asset name."); + AssertFatal(mpAssetDefinition->mAssetDescription == pAssetDefinition->mAssetDescription, "Asset ownership differs by asset description."); + AssertFatal(mpAssetDefinition->mAssetCategory == pAssetDefinition->mAssetCategory, "Asset ownership differs by asset category."); + AssertFatal(mpAssetDefinition->mAssetAutoUnload == pAssetDefinition->mAssetAutoUnload, "Asset ownership differs by asset auto-unload flag."); + AssertFatal(mpAssetDefinition->mAssetInternal == pAssetDefinition->mAssetInternal, "Asset ownership differs by asset internal flag."); + + // Transfer asset definition ownership state. + delete mpAssetDefinition; + mpAssetDefinition = pAssetDefinition; + + // Flag as owned. + // NOTE: This must be done prior to initializing the asset so any initialization can assume ownership. + mpOwningAssetManager = pAssetManager; + + // Initialize the asset. + initializeAsset(); + + // Flag asset as initialized. + mAssetInitialized = true; +} \ No newline at end of file diff --git a/Engine/source/assets/assetBase.h b/Engine/source/assets/assetBase.h new file mode 100644 index 0000000000..8709c54742 --- /dev/null +++ b/Engine/source/assets/assetBase.h @@ -0,0 +1,145 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _ASSET_BASE_H_ +#define _ASSET_BASE_H_ + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetManager; + +//----------------------------------------------------------------------------- + +extern StringTableEntry assetNameField; +extern StringTableEntry assetDescriptionField; +extern StringTableEntry assetCategoryField; +extern StringTableEntry assetInternalField; +extern StringTableEntry assetPrivateField; +extern StringTableEntry assetAutoUnloadField; + +//#define ASSET_BASE_ASSETNAME_FIELD "AssetName" +//#define ASSET_BASE_ASSETDESCRIPTION_FIELD "AssetDescription" +//#define ASSET_BASE_ASSETCATEGORY_FIELD "AssetCategory" +//#define ASSET_BASE_ASSETINTERNAL_FIELD "AssetInternal" +//#define ASSET_BASE_ASSETPRIVATE_FIELD "AssetPrivate" +//#define ASSET_BASE_AUTOUNLOAD_FIELD "AssetAutoUnload" + +//----------------------------------------------------------------------------- + +class AssetBase : public SimObject +{ + friend class AssetManager; + + typedef SimObject Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +public: + AssetBase(); + virtual ~AssetBase(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Asset configuration. + inline void setAssetName(const char* pAssetName) { if (mpOwningAssetManager == NULL) mpAssetDefinition->mAssetName = StringTable->insert(pAssetName); } + inline StringTableEntry getAssetName(void) const { return mpAssetDefinition->mAssetName; } + void setAssetDescription(const char* pAssetDescription); + inline StringTableEntry getAssetDescription(void) const { return mpAssetDefinition->mAssetDescription; } + void setAssetCategory(const char* pAssetCategory); + inline StringTableEntry getAssetCategory(void) const { return mpAssetDefinition->mAssetCategory; } + void setAssetAutoUnload(const bool autoUnload); + inline bool getAssetAutoUnload(void) const { return mpAssetDefinition->mAssetAutoUnload; } + void setAssetInternal(const bool assetInternal); + inline bool getAssetInternal(void) const { return mpAssetDefinition->mAssetInternal; } + inline bool getAssetPrivate(void) const { return mpAssetDefinition->mAssetPrivate; } + inline StringTableEntry getAssetType(void) const { return mpAssetDefinition->mAssetType; } + + inline S32 getAcquiredReferenceCount(void) const { return mAcquireReferenceCount; } + inline bool getOwned(void) const { return mpOwningAssetManager != NULL; } + + // Asset Id is only available once registered with the asset manager. + inline StringTableEntry getAssetId(void) const { return mpAssetDefinition->mAssetId; } + + /// Expanding/Collapsing asset paths is only available once registered with the asset manager. + StringTableEntry expandAssetFilePath(const char* pAssetFilePath) const; + StringTableEntry collapseAssetFilePath(const char* pAssetFilePath) const; + + virtual bool isAssetValid(void) const { return true; } + + void refreshAsset(void); + + /// Declare Console Object. + DECLARE_CONOBJECT(AssetBase); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} + +protected: + static bool setAssetName(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetName(data); return false; } + static const char* getAssetName(void* obj, const char* data) { return static_cast(obj)->getAssetName(); } + static bool writeAssetName(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetName() != StringTable->EmptyString(); } + + static bool setAssetDescription(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetDescription(data); return false; } + static const char* getAssetDescription(void* obj, const char* data) { return static_cast(obj)->getAssetDescription(); } + static bool writeAssetDescription(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetDescription() != StringTable->EmptyString(); } + + static bool setAssetCategory(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetCategory(data); return false; } + static const char* getAssetCategory(void* obj, const char* data) { return static_cast(obj)->getAssetCategory(); } + static bool writeAssetCategory(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetCategory() != StringTable->EmptyString(); } + + static bool setAssetAutoUnload(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetAutoUnload(dAtob(data)); return false; } + static const char* getAssetAutoUnload(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetAutoUnload()); } + static bool writeAssetAutoUnload(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetAutoUnload() == false; } + + static bool setAssetInternal(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetInternal(dAtob(data)); return false; } + static const char* getAssetInternal(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetInternal()); } + static bool writeAssetInternal(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetInternal() == true; } + + static const char* getAssetPrivate(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetPrivate()); } + +private: + void acquireAssetReference(void); + bool releaseAssetReference(void); + + /// Set asset manager ownership. + void setOwned(AssetManager* pAssetManager, AssetDefinition* pAssetDefinition); +}; + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/assets/assetBase_ScriptBinding.h b/Engine/source/assets/assetBase_ScriptBinding.h new file mode 100644 index 0000000000..8ac8f6a0dd --- /dev/null +++ b/Engine/source/assets/assetBase_ScriptBinding.h @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "assetBase.h" +#include "assetManager.h" + + +DefineEngineMethod(AssetBase, refreshAsset, void, (), , + "Refresh the asset.\n" + "@return No return value.\n") +{ + object->refreshAsset(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetBase, getAssetId, String, (), , + "Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n" + "@return The assets' Asset Id.\n") +{ + return object->getAssetId(); +} diff --git a/Engine/source/assets/assetDefinition.h b/Engine/source/assets/assetDefinition.h new file mode 100644 index 0000000000..0d3b1c9645 --- /dev/null +++ b/Engine/source/assets/assetDefinition.h @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_DEFINITION_H_ +#define _ASSET_DEFINITION_H_ + +#ifndef _STRINGTABLE_H_ +#include "core/stringTable.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetBase; +class ModuleDefinition; + +//----------------------------------------------------------------------------- + +struct AssetDefinition +{ +public: + AssetDefinition() { reset(); } + virtual ~AssetDefinition() {} + + virtual void reset( void ) + { + mAssetLoading = false; + mpModuleDefinition = NULL; + mpAssetBase = NULL; + mAssetBaseFilePath = StringTable->EmptyString(); + mAssetId = StringTable->EmptyString(); + mAssetLoadedCount = 0; + mAssetUnloadedCount = 0; + mAssetRefreshEnable = true; + mAssetLooseFiles.clear(); + + // Reset persisted state. + mAssetName = StringTable->EmptyString(); + mAssetDescription = StringTable->EmptyString(); + mAssetAutoUnload = true; + mAssetInternal = false; + mAssetPrivate = false; + mAssetType = StringTable->EmptyString(); + mAssetCategory = StringTable->EmptyString(); + } + + ModuleDefinition* mpModuleDefinition; + AssetBase* mpAssetBase; + StringTableEntry mAssetBaseFilePath; + StringTableEntry mAssetId; + U32 mAssetLoadedCount; + U32 mAssetUnloadedCount; + bool mAssetRefreshEnable; + Vector mAssetLooseFiles; + + /// Persisted state. + StringTableEntry mAssetName; + StringTableEntry mAssetDescription; + bool mAssetAutoUnload; + bool mAssetInternal; + bool mAssetPrivate; + bool mAssetLoading; + StringTableEntry mAssetType; + StringTableEntry mAssetCategory; +}; + +#endif // _ASSET_DEFINITION_H_ + diff --git a/Engine/source/assets/assetFieldTypes.cpp b/Engine/source/assets/assetFieldTypes.cpp new file mode 100644 index 0000000000..154513d412 --- /dev/null +++ b/Engine/source/assets/assetFieldTypes.cpp @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assetFieldTypes.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assetPtr.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +/*#ifndef _AUDIO_ASSET_H_ +#include "audio/AudioAsset.h" +#endif*/ + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +StringTableEntry assetLooseIdSignature = StringTable->insert( ASSET_ID_SIGNATURE ); +StringTableEntry assetLooseFileSignature = StringTable->insert( ASSET_LOOSEFILE_SIGNATURE ); + +//----------------------------------------------------------------------------- + +ConsoleType( assetLooseFilePath, TypeAssetLooseFilePath, String, ASSET_LOOSE_FILE_FIELD_PREFIX ) +ConsoleType(assetIdString, TypeAssetId, String, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType( TypeAssetLooseFilePath ) +{ + // Fetch asset loose file-path. + return *((StringTableEntry*)dptr); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType( TypeAssetLooseFilePath ) +{ + // Was a single argument specified? + if( argc == 1 ) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset loose file-path. + StringTableEntry* assetLooseFilePath = (StringTableEntry*)(dptr); + + // Update asset loose file-path value. + *assetLooseFilePath = StringTable->insert(pFieldValue); + + return; + } + + // Warn. + Con::warnf( "(TypeAssetLooseFilePath) - Cannot set multiple args to a single asset loose-file." ); +} + +//----------------------------------------------------------------------------- + +ConsoleGetType( TypeAssetId ) +{ + // Fetch asset Id. + return *((StringTableEntry*)dptr); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType( TypeAssetId ) +{ + // Was a single argument specified? + if( argc == 1 ) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset Id. + StringTableEntry* assetId = (StringTableEntry*)(dptr); + + // Update asset value. + *assetId = StringTable->insert(pFieldValue); + + return; + } + + // Warn. + Con::warnf( "(TypeAssetId) - Cannot set multiple args to a single asset." ); +} + diff --git a/Engine/source/assets/assetFieldTypes.h b/Engine/source/assets/assetFieldTypes.h new file mode 100644 index 0000000000..af76682f44 --- /dev/null +++ b/Engine/source/assets/assetFieldTypes.h @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_FIELD_TYPES_H_ +#define _ASSET_FIELD_TYPES_H_ + +#ifndef _CONSOLE_BASE_TYPE_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +DefineConsoleType( TypeAssetId, S32 ) +DefineConsoleType( TypeAssetLooseFilePath, String ) + +//----------------------------------------------------------------------------- + +/// Asset scope. +#define ASSET_SCOPE_TOKEN ":" + +/// Asset assignment. +#define ASSET_ASSIGNMENT_TOKEN "=" + +/// Asset Id. +#define ASSET_ID_SIGNATURE "@asset" +#define ASSET_ID_FIELD_PREFIX "@asset=" + +/// Asset loose file. +#define ASSET_LOOSEFILE_SIGNATURE "@assetFile" +#define ASSET_LOOSE_FILE_FIELD_PREFIX "@assetFile=" + +//----------------------------------------------------------------------------- + +extern StringTableEntry assetLooseIdSignature; +extern StringTableEntry assetLooseFileSignature; + +#endif // _ASSET_FIELD_TYPES_H_ \ No newline at end of file diff --git a/Engine/source/assets/assetManager.cpp b/Engine/source/assets/assetManager.cpp new file mode 100644 index 0000000000..66df77d11d --- /dev/null +++ b/Engine/source/assets/assetManager.cpp @@ -0,0 +1,3017 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "assetManager.h" + +#ifndef _ASSET_PTR_H_ +#include "assetPtr.h" +#endif + +#ifndef _REFERENCED_ASSETS_H_ +#include "assets/referencedAssets.h" +#endif + +#ifndef _DECLARED_ASSETS_H_ +#include "assets/declaredAssets.h" +#endif + +#ifndef _TAML_ASSET_REFERENCED_VISITOR_H_ +#include "tamlAssetReferencedVisitor.h" +#endif + +#ifndef _TAML_ASSET_DECLARED_VISITOR_H_ +#include "tamlAssetDeclaredVisitor.h" +#endif + +#ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ +#include "tamlAssetDeclaredUpdateVisitor.h" +#endif + +#ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ +#include "tamlAssetReferencedUpdateVisitor.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "assetManager_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetManager ); + +//----------------------------------------------------------------------------- + +AssetManager AssetDatabase; + +//----------------------------------------------------------------------------- + +AssetManager::AssetManager() : + mLoadedInternalAssetsCount( 0 ), + mLoadedExternalAssetsCount( 0 ), + mLoadedPrivateAssetsCount( 0 ), + mMaxLoadedInternalAssetsCount( 0 ), + mMaxLoadedExternalAssetsCount( 0 ), + mMaxLoadedPrivateAssetsCount( 0 ), + mAcquiredReferenceCount( 0 ), + mEchoInfo( false ), + mIgnoreAutoUnload( true ) +{ +} + +//----------------------------------------------------------------------------- + +bool AssetManager::onAdd() +{ + // Call parent. + if ( !Parent::onAdd() ) + return false; + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::onRemove() +{ + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so remove it. + mAssetTagsManifest->deleteObject(); + } + + // Call parent. + Parent::onRemove(); +} + +//----------------------------------------------------------------------------- + +void AssetManager::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField( "EchoInfo", TypeBool, Offset(mEchoInfo, AssetManager), "Whether the asset manager echos extra information to the console or not." ); + addField( "IgnoreAutoUnload", TypeBool, Offset(mIgnoreAutoUnload, AssetManager), "Whether the asset manager should ignore unloading of auto-unload assets or not." ); +} + +//----------------------------------------------------------------------------- + +bool AssetManager::compileReferencedAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_CompileReferencedAsset); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add declared assets using a NULL module definition" ); + + // Clear referenced assets. + mReferencedAssets.clear(); + + // Iterate the module definition children. + for( SimSet::iterator itr = pModuleDefinition->begin(); itr != pModuleDefinition->end(); ++itr ) + { + // Fetch the referenced assets. + ReferencedAssets* pReferencedAssets = dynamic_cast( *itr ); + + // Skip if it's not a referenced assets location. + if ( pReferencedAssets == NULL ) + continue; + + // Expand asset manifest location. + char filePathBuffer[1024]; + dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pReferencedAssets->getPath() ); + + // Scan referenced assets at location. + if ( !scanReferencedAssets( filePathBuffer, pReferencedAssets->getExtension(), pReferencedAssets->getRecurse() ) ) + { + // Warn. + Con::warnf( "AssetManager::compileReferencedAssets() - Could not scan for referenced assets at location '%s' with extension '%s'.", filePathBuffer, pReferencedAssets->getExtension() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::addModuleDeclaredAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddDeclaredAssets); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add declared assets using a NULL module definition" ); + + // Does the module have any assets associated with it? + if ( pModuleDefinition->getModuleAssets().size() > 0 ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Cannot add declared assets to module '%s' as it already has existing assets.", pModuleDefinition->getSignature() ); + return false; + } + + // Iterate the module definition children. + for( SimSet::iterator itr = pModuleDefinition->begin(); itr != pModuleDefinition->end(); ++itr ) + { + // Fetch the declared assets. + DeclaredAssets* pDeclaredAssets = dynamic_cast( *itr ); + + // Skip if it's not a declared assets location. + if ( pDeclaredAssets == NULL ) + continue; + + // Expand asset manifest location. + char filePathBuffer[1024]; + String mdldfpth = pModuleDefinition->getModulePath(); + String astfpth = pDeclaredAssets->getPath(); + + //dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pDeclaredAssets->getPath() ); + dSprintf(filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pDeclaredAssets->getPath()); + + // Scan declared assets at location. + if ( !scanDeclaredAssets( filePathBuffer, pDeclaredAssets->getExtension(), pDeclaredAssets->getRecurse(), pModuleDefinition ) ) + { + // Warn. + Con::warnf( "AssetManager::addModuleDeclaredAssets() - Could not scan for declared assets at location '%s' with extension '%s'.", filePathBuffer, pDeclaredAssets->getExtension() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::addDeclaredAsset( ModuleDefinition* pModuleDefinition, const char* pAssetFilePath ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddSingleDeclaredAsset); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add single declared asset using a NULL module definition" ); + AssertFatal( pAssetFilePath != NULL, "Cannot add single declared asset using a NULL asset file-path." ); + + // Expand asset file-path. + char assetFilePathBuffer[1024]; + Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath ); + + // Find the final slash which should be just before the file. + char* pFileStart = dStrrchr( assetFilePathBuffer, '/' ); + + // Did we find the final slash? + if ( pFileStart == NULL ) + { + // No, so warn. + Con::warnf( "AssetManager::addDeclaredAsset() - Could not add single declared asset file '%s' as file-path '%s' is not valid.", + assetFilePathBuffer, + pModuleDefinition->getModulePath() ); + return false; + } + + // Terminate path at slash. + *pFileStart = 0; + + // Move to next character which should be the file start. + pFileStart++; + + // Scan declared assets at location. + if ( !scanDeclaredAssets( assetFilePathBuffer, pFileStart, false, pModuleDefinition ) ) + { + // Warn. + Con::warnf( "AssetManager::addDeclaredAsset() - Could not scan declared assets at location '%s' with extension '%s'.", assetFilePathBuffer, pFileStart ); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::addPrivateAsset( AssetBase* pAssetBase ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddPrivateAsset); + + // Sanity! + AssertFatal( pAssetBase != NULL, "Cannot add a NULL private asset." ); + + // Is the asset already added? + if (pAssetBase->mpAssetDefinition->mAssetId != StringTable->EmptyString()) + { + // Yes, so warn. + Con::warnf( "Cannot add private asset '%d' as it has already been assigned.", pAssetBase->mpAssetDefinition->mAssetId ); + return StringTable->EmptyString(); + } + + static U32 masterPrivateAssetId = 1; + + // Create asset definition. + AssetDefinition* pAssetDefinition = new AssetDefinition(); + + // Fetch source asset definition. + AssetDefinition* pSourceAssetDefinition = pAssetBase->mpAssetDefinition; + + // Configure asset. + pAssetDefinition->mpAssetBase = pAssetBase; + pAssetDefinition->mAssetDescription = pSourceAssetDefinition->mAssetDescription; + pAssetDefinition->mAssetCategory = pSourceAssetDefinition->mAssetCategory; + pAssetDefinition->mAssetAutoUnload = true; + pAssetDefinition->mAssetRefreshEnable = false; + pAssetDefinition->mAssetType = StringTable->insert( pAssetBase->getClassName() ); + pAssetDefinition->mAssetLoadedCount = 0; + pAssetDefinition->mAssetInternal = false; + pAssetDefinition->mAssetPrivate = true; + + // Format asset name. + char assetNameBuffer[256]; + dSprintf(assetNameBuffer, sizeof(assetNameBuffer), "%s_%d", pAssetDefinition->mAssetType, masterPrivateAssetId++ ); + + // Set asset identity. + pAssetDefinition->mAssetName = StringTable->insert( assetNameBuffer ); + pAssetDefinition->mAssetId = pAssetDefinition->mAssetName; + + // Ensure that the source asset is fully synchronized with the new asset definition. + pSourceAssetDefinition->mAssetName = pAssetDefinition->mAssetName; + pSourceAssetDefinition->mAssetAutoUnload = pAssetDefinition->mAssetAutoUnload; + pSourceAssetDefinition->mAssetInternal = pAssetDefinition->mAssetInternal; + + // Set ownership by asset manager. + pAssetDefinition->mpAssetBase->setOwned( this, pAssetDefinition ); + + // Store in declared assets. + mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition ); + + // Increase the private loaded asset count. + if ( ++mLoadedPrivateAssetsCount > mMaxLoadedPrivateAssetsCount ) + mMaxLoadedPrivateAssetsCount = mLoadedPrivateAssetsCount; + + return pAssetDefinition->mAssetId; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::removeDeclaredAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveDeclaredAssets); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot remove declared assets using a NULL module definition" ); + + // Fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pModuleDefinition->getModuleAssets(); + + // Remove all module assets. + while ( moduleAssets.size() > 0 ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = *moduleAssets.begin(); + + // Remove this asset. + removeDeclaredAsset( pAssetDefinition->mAssetId ); + } + + // Info. + if ( mEchoInfo ) + Con::printSeparator(); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::removeDeclaredAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveSingleDeclaredAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot remove single declared asset using NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find declared asset. + typeDeclaredAssetsHash::iterator declaredAssetItr = mDeclaredAssets.find( assetId ); + + // Did we find the declared asset? + if ( declaredAssetItr == mDeclaredAssets.end() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot remove single asset Id '%s' it could not be found.", assetId ); + return false; + } + + // Fetch asset definition. + AssetDefinition* pAssetDefinition = declaredAssetItr->value; + + // Is the asset private? + if ( !pAssetDefinition->mAssetPrivate ) + { + // No, so fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pAssetDefinition->mpModuleDefinition->getModuleAssets(); + + // Remove module asset. + for ( ModuleDefinition::typeModuleAssetsVector::iterator moduleAssetItr = moduleAssets.begin(); moduleAssetItr != moduleAssets.end(); ++moduleAssetItr ) + { + if ( *moduleAssetItr == pAssetDefinition ) + { + moduleAssets.erase( moduleAssetItr ); + break; + } + } + + // Remove asset dependencies. + removeAssetDependencies( pAssetId ); + } + + // Do we have an asset loaded? + if ( pAssetDefinition->mpAssetBase != NULL ) + { + // Yes, so delete it. + // NOTE: If anything is using this then this'll cause a crash. Objects should always use safe reference methods however. + pAssetDefinition->mpAssetBase->deleteObject(); + } + + // Remove from declared assets. + mDeclaredAssets.erase( declaredAssetItr ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Removing Asset Id '%s' of type '%s' in asset file '%s'.", + pAssetDefinition->mAssetId, + pAssetDefinition->mAssetType, + pAssetDefinition->mAssetBaseFilePath ); + } + + // Destroy asset definition. + delete pAssetDefinition; + + return true; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetName( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetName; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetDescription( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetDescription; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetCategory( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetCategory; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetType( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetType; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetFilePath( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return StringTable->EmptyString(); + } + + return pAssetDefinition->mAssetBaseFilePath; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetPath( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_GetAssetPath); + + // Fetch asset file-path. + StringTableEntry assetFilePath = getAssetFilePath( pAssetId ); + + // Finish if no file-path. + if ( assetFilePath == StringTable->EmptyString() ) + return assetFilePath; + + // Find the final slash which should be just before the file. + const char* pFinalSlash = dStrrchr( assetFilePath, '/' ); + + // Sanity! + AssertFatal( pFinalSlash != NULL, "Should always be able to find final slash in the asset file-path." ); + + // Fetch asset path. + return StringTable->insertn( assetFilePath, (U32)(pFinalSlash - assetFilePath) ); +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* AssetManager::getAssetModuleDefinition( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mpModuleDefinition; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetInternal( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetInternal; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetPrivate( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetPrivate; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetAutoUnload( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetAutoUnload; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetLoaded( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mpAssetBase != NULL; +} + + +//----------------------------------------------------------------------------- + +bool AssetManager::isDeclaredAsset( const char* pAssetId ) +{ + return findAsset( pAssetId ) != NULL; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::doesAssetDependOn( const char* pAssetId, const char* pDependsOnAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DoesAssetDependOn); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + AssertFatal( pDependsOnAssetId != NULL, "Cannot use NULL depends-on asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Fetch depends-on asset Id. + StringTableEntry dependsOnAssetId = StringTable->insert( pDependsOnAssetId ); + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find( assetId ); + + // Iterate all dependencies. + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == assetId ) + { + // Finish if a depends on. + if ( dependsOnItr->value == dependsOnAssetId ) + return true; + + // Next dependency. + dependsOnItr++; + } + + return false; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetDependedOn( const char* pAssetId, const char* pDependedOnByAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_IsAssetDependedOn); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + AssertFatal( pDependedOnByAssetId != NULL, "Cannot use NULL depended-on-by asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Fetch depended-on-by asset Id. + StringTableEntry dependedOnByAssetId = StringTable->insert( pDependedOnByAssetId ); + + // Find depended-on-by entry. + typeAssetDependsOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find(assetId); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Finish if depended-on. + if ( dependedOnItr->value == dependedOnByAssetId ) + return true; + + // Next dependency. + dependedOnItr++; + } + + return false; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isReferencedAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_IsReferencedAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot check if NULL asset Id is referenced." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( assetId, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot check if asset Id '%s' is referenced as it is not the correct format.", assetId ); + return false; + } + + return mReferencedAssets.count( assetId ) > 0; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::renameDeclaredAsset( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameDeclaredAsset); + + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + // Is asset Id from the correct format? + if ( StringUnit::getUnitCount( assetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as source asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Is asset Id to the correct format? + if ( StringUnit::getUnitCount( assetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as target asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id from exist? + if ( !mDeclaredAssets.contains( assetIdFrom ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as source asset Id is not declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id to exist? + if ( mDeclaredAssets.contains( assetIdTo ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as target asset Id is already declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Split module Ids from asset Ids. + StringTableEntry moduleIdFrom = StringTable->insert( StringUnit::getUnit( assetIdFrom, 0, ASSET_SCOPE_TOKEN ) ); + StringTableEntry moduleIdTo = StringTable->insert( StringUnit::getUnit( assetIdTo, 0, ASSET_SCOPE_TOKEN ) ); + + // Are the module Ids the same? + if ( moduleIdFrom != moduleIdTo ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the module Id cannot be changed.", assetIdFrom, assetIdTo ); + return false; + } + + // Find asset definition. + typeDeclaredAssetsHash::iterator assetDefinitionItr = mDeclaredAssets.find( assetIdFrom ); + + // Sanity! + AssertFatal( assetDefinitionItr != mDeclaredAssets.end(), "Asset Manager: Failed to find asset." ); + + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetDefinitionItr->value; + + // Is this a private asset? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the source asset is private.", assetIdFrom, assetIdTo ); + return false; + } + + // Setup declared update visitor. + TamlAssetDeclaredUpdateVisitor assetDeclaredUpdateVisitor; + assetDeclaredUpdateVisitor.setAssetIdFrom( assetIdFrom ); + assetDeclaredUpdateVisitor.setAssetIdTo( assetIdTo ); + + // Update asset file declaration. + if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the declared asset file could not be parsed: %s", + assetIdFrom, assetIdTo, pAssetDefinition->mAssetBaseFilePath ); + return false; + } + + // Update asset definition. + pAssetDefinition->mAssetId = assetIdTo; + pAssetDefinition->mAssetName = StringTable->insert( StringUnit::getUnit( assetIdTo, 1, ASSET_SCOPE_TOKEN ) ); + + // Reinsert declared asset. + mDeclaredAssets.erase( assetIdFrom ); + mDeclaredAssets.insert( assetIdTo, pAssetDefinition ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Renaming declared Asset Id '%s' to Asset Id '%s'.", assetIdFrom, assetIdTo ); + Con::printSeparator(); + } + + // Rename asset dependencies. + renameAssetDependencies( assetIdFrom, assetIdTo ); + + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so rename any assets. + mAssetTagsManifest->renameAssetId( pAssetIdFrom, pAssetIdTo ); + + // Save the asset tags. + saveAssetTags(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::renameReferencedAsset( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameReferencedAsset); + + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + // Is asset Id from the correct format? + if ( StringUnit::getUnitCount( assetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as source asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Is asset Id to the correct format? + if ( StringUnit::getUnitCount( assetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as target asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id to exist? + if ( !mDeclaredAssets.contains( assetIdTo ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as target asset Id is not declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Rename asset references. + renameAssetReferences( assetIdFrom, assetIdTo ); + + // Info. + if ( mEchoInfo ) + Con::printSeparator(); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::releaseAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ReleaseAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot release NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to release asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Is the asset loaded? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to release asset Id '%s' as it is not acquired.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started releasing Asset Id '%s'...", pAssetId ); + } + + // Release asset reference. + if ( pAssetDefinition->mpAssetBase->releaseAssetReference() ) + { + // Are we ignoring auto-unloaded assets? + if ( mIgnoreAutoUnload ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Releasing to idle state." ); + } + } + else + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Unload the asset from memory." ); + } + + // Unload the asset. + unloadAsset( pAssetDefinition ); + } + } + // Info. + else if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Reference count now '%d'.", pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Finished releasing Asset Id '%s'.", pAssetId ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::purgeAssets( void ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_PurgeAssets); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Started purging assets..." ); + } + + // Iterate asset definitions. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip asset if private, not loaded or referenced. + if ( pAssetDefinition->mAssetPrivate || + pAssetDefinition->mpAssetBase == NULL || + pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() > 0 ) + continue; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Purging asset Id '%s'...", pAssetDefinition->mAssetId ); + } + + // Unload the asset. + unloadAsset( pAssetDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: ... Finished purging assets." ); + } +} + +//----------------------------------------------------------------------------- + +bool AssetManager::deleteAsset( const char* pAssetId, const bool deleteLooseFiles, const bool deleteDependencies ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DeleteAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot delete NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to delete asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started deleting Asset Id '%s'...", pAssetId ); + } + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Are we deleting dependencies? + if ( deleteDependencies ) + { + Vector dependantAssets; + + // Yes, so find depended-on-by entry. + typeAssetDependsOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Store asset Id. + dependantAssets.push_back( dependedOnItr->value ); + + // Next dependency. + dependedOnItr++; + } + + // Do we have any dependants? + if ( dependantAssets.size() > 0 ) + { + // Yes, so iterate dependants. + for( Vector::const_iterator assetItr = dependantAssets.begin(); assetItr != dependantAssets.end(); ++assetItr ) + { + StringTableEntry dependentAssetId = *assetItr; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Deleting Asset Id '%s' dependant of '%s.'", pAssetId, dependentAssetId ); + } + + // Delete dependant. + deleteAsset( dependentAssetId, deleteLooseFiles, deleteDependencies ); + } + } + } + + // Remove asset references. + removeAssetReferences( assetId ); + + // Are we deleting loose files? + if ( deleteLooseFiles ) + { + // Yes, so remove loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Fetch loose file. + StringTableEntry looseFile = *looseFileItr; + + // Delete the loose file. + if ( !dFileDelete( looseFile ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to delete the loose file '%s' while deleting asset Id '%s'.", looseFile, pAssetId ); + } + } + } + + // Fetch asset definition file. + StringTableEntry assetDefinitionFile = pAssetDefinition->mAssetBaseFilePath; + + // Remove reference here as we're about to remove the declared asset. + pAssetDefinition = NULL; + + // Remove asset. + removeDeclaredAsset( pAssetId ); + + // Delete the asset definition file. + if ( !dFileDelete( assetDefinitionFile ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to delete the asset definition file '%s' while deleting asset Id '%s'.", assetDefinitionFile, pAssetId ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished deleting Asset Id '%s'.", pAssetId ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::refreshAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RefreshAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot refresh NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to refresh asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started refreshing Asset Id '%s'...", pAssetId ); + } + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Is the asset private? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so notify asset of asset refresh only. + pAssetDefinition->mpAssetBase->onAssetRefresh(); + + // Asset refresh notifications. + for( typeAssetPtrRefreshHash::iterator refreshNotifyItr = mAssetPtrRefreshNotifications.begin(); refreshNotifyItr != mAssetPtrRefreshNotifications.end(); ++refreshNotifyItr ) + { + // Fetch pointed asset. + StringTableEntry pointedAsset = refreshNotifyItr->key->getAssetId(); + + // Ignore if the pointed asset is not the asset or a dependency. + if ( pointedAsset == StringTable->EmptyString() || ( pointedAsset != assetId && !doesAssetDependOn( pointedAsset, assetId ) ) ) + continue; + + // Perform refresh notification callback. + refreshNotifyItr->value->onAssetRefreshed( refreshNotifyItr->key ); + } + } + // Is the asset definition allowed to refresh? + else if ( pAssetDefinition->mAssetRefreshEnable ) + { + // Yes, so fetch the asset. + AssetBase* pAssetBase = pAssetDefinition->mpAssetBase; + + // Is the asset loaded? + if ( pAssetBase != NULL ) + { + // Yes, so notify asset of asset refresh. + pAssetBase->onAssetRefresh(); + + // Save asset. + mTaml.write( pAssetBase, pAssetDefinition->mAssetBaseFilePath ); + + // Remove asset dependencies. + removeAssetDependencies( pAssetId ); + + // Find any new dependencies. + TamlAssetDeclaredVisitor assetDeclaredVisitor; + + // Parse the filename. + if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.\nDependencies are now incorrect!", pAssetDefinition->mAssetBaseFilePath ); + return false; + } + + // Fetch asset dependencies. + TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies(); + + // Are there any asset dependences? + if ( assetDependencies.size() > 0 ) + { + // Yes, so iterate dependencies. + for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr ) + { + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = *assetDependencyItr; + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetId, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId ); + } + } + + // Fetch asset loose files. + TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles(); + + // Clear any existing loose files. + pAssetDefinition->mAssetLooseFiles.clear(); + + // Are there any loose files? + if ( assetLooseFiles.size() > 0 ) + { + // Yes, so iterate loose files. + for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr ) + { + // Store loose file. + pAssetDefinition->mAssetLooseFiles.push_back( *assetLooseFileItr ); + } + } + + // Asset refresh notifications. + for( typeAssetPtrRefreshHash::iterator refreshNotifyItr = mAssetPtrRefreshNotifications.begin(); refreshNotifyItr != mAssetPtrRefreshNotifications.end(); ++refreshNotifyItr ) + { + // Fetch pointed asset. + StringTableEntry pointedAsset = refreshNotifyItr->key->getAssetId(); + + // Ignore if the pointed asset is not the asset or a dependency. + if ( pointedAsset == StringTable->EmptyString() || ( pointedAsset != assetId && !doesAssetDependOn( pointedAsset, assetId ) ) ) + continue; + + // Perform refresh notification callback. + refreshNotifyItr->value->onAssetRefreshed( refreshNotifyItr->key ); + } + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Is asset depended on? + if ( isDependedOnItr != mAssetIsDependedOn.end() ) + { + // Yes, so compiled them. + Vector dependedOn; + + // Iterate all dependencies. + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == assetId ) + { + dependedOn.push_back( isDependedOnItr->value ); + + // Next dependency. + isDependedOnItr++; + } + + // Refresh depended-on assets. + for ( Vector::iterator isDependedOnItr = dependedOn.begin(); isDependedOnItr != dependedOn.end(); ++isDependedOnItr ) + { + // Refresh dependency asset. + refreshAsset( *isDependedOnItr ); + } + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished refreshing Asset Id '%s'.", pAssetId ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::refreshAllAssets( const bool includeUnloaded ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RefreshAllAssets); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started refreshing ALL assets." ); + } + + Vector assetsToRelease; + + // Are we including unloaded assets? + if ( includeUnloaded ) + { + // Yes, so prepare a list of assets to release and load them. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset Id. + typeAssetId assetId = assetItr->key; + + // Skip if asset is loaded. + if ( assetItr->value->mpAssetBase != NULL ) + continue; + + // Note asset as needing a release. + assetsToRelease.push_back( assetId ); + + // Acquire the asset. + acquireAsset( assetId ); + } + } + + // Refresh the current loaded assets. + // NOTE: This will result in some assets being refreshed more than once due to asset dependencies. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Skip private assets. + if ( assetItr->value->mAssetPrivate ) + continue; + + // Refresh asset if it's loaded. + refreshAsset( assetItr->key ); + } + + // Are we including unloaded assets? + if ( includeUnloaded ) + { + // Yes, so release the assets we loaded. + for( Vector::iterator assetItr = assetsToRelease.begin(); assetItr != assetsToRelease.end(); ++assetItr ) + { + releaseAsset( *assetItr ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished refreshing ALL assets." ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::registerAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase, AssetPtrCallback* pCallback ) +{ + // Find an existing notification iterator. + typeAssetPtrRefreshHash::iterator notificationItr = mAssetPtrRefreshNotifications.find( pAssetPtrBase ); + + // Do we have one? + if ( notificationItr != mAssetPtrRefreshNotifications.end() ) + { + // Yes, so update the callback. + notificationItr->value = pCallback; + return; + } + + // No, so add one. + mAssetPtrRefreshNotifications.insert( pAssetPtrBase, pCallback ); +} + +//----------------------------------------------------------------------------- + +void AssetManager::unregisterAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase ) +{ + mAssetPtrRefreshNotifications.erase( pAssetPtrBase ); +} + +//----------------------------------------------------------------------------- + +bool AssetManager::loadAssetTags( ModuleDefinition* pModuleDefinition ) +{ + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot load asset tags manifest using a NULL module definition" ); + + // Expand manifest location. + char assetTagsManifestFilePathBuffer[1024]; + Con::expandPath( assetTagsManifestFilePathBuffer, sizeof(assetTagsManifestFilePathBuffer), pModuleDefinition->getAssetTagsManifest() ); + + // Do we already have a manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Cannot load asset tags manifest from module '%s' as one is already loaded.", pModuleDefinition->getSignature() ); + return false; + } + + // Is the specified file valid? + if ( Platform::isFile( assetTagsManifestFilePathBuffer ) ) + { + // Yes, so read asset tags manifest. + mAssetTagsManifest = mTaml.read( assetTagsManifestFilePathBuffer ); + + // Did we read the manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to load asset tags manifest '%s' from module '%s'.", assetTagsManifestFilePathBuffer, pModuleDefinition->getSignature() ); + return false; + } + + // Set asset tags module definition. + mAssetTagsModuleDefinition = pModuleDefinition; + } + else + { + // No, so generate a new asset tags manifest. + mAssetTagsManifest = new AssetTagsManifest(); + mAssetTagsManifest->registerObject(); + + // Set asset tags module definition. + mAssetTagsModuleDefinition = pModuleDefinition; + + // Save the asset tags. + saveAssetTags(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::saveAssetTags( void ) +{ + // Do we have an asset tags manifest? + if ( mAssetTagsManifest.isNull() || mAssetTagsModuleDefinition.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to save asset tags manifest as one is not loaded." ); + return false; + } + + // Expand manifest location. + char assetTagsManifestFilePathBuffer[1024]; + Con::expandPath( assetTagsManifestFilePathBuffer, sizeof(assetTagsManifestFilePathBuffer), mAssetTagsModuleDefinition->getAssetTagsManifest() ); + + // Save asset tags manifest. + if ( !mTaml.write( mAssetTagsManifest, assetTagsManifestFilePathBuffer ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to save asset tags manifest '%s' from module '%s'.", assetTagsManifestFilePathBuffer, mAssetTagsModuleDefinition->getSignature() ); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::restoreAssetTags( void ) +{ + // Do we already have a manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot restore asset tags manifest as one is not already loaded." ); + return false; + } + + // Sanity! + AssertFatal( mAssetTagsModuleDefinition != NULL, "Cannot restore asset tags manifest as module definition is NULL." ); + + // Delete existing asset tags manifest. + mAssetTagsManifest->deleteObject(); + + // Reload asset tags manifest. + return loadAssetTags( mAssetTagsModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +S32 QSORT_CALLBACK descendingAssetDefinitionLoadCount(const void* a, const void* b) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DescendingAssetDefinitionLoadCount); + + // Fetch asset definitions. + const AssetDefinition* pAssetDefinitionA = *(AssetDefinition**)a; + const AssetDefinition* pAssetDefinitionB = *(AssetDefinition**)b; + + // Sort. + return pAssetDefinitionB->mAssetLoadedCount - pAssetDefinitionA->mAssetLoadedCount; +} + +//----------------------------------------------------------------------------- + +void AssetManager::dumpDeclaredAssets( void ) const +{ + Vector assetDefinitions; + + // Iterate asset definitions. + for( typeDeclaredAssetsHash::const_iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + assetDefinitions.push_back( assetItr->value ); + } + + // Sort asset definitions. + dQsort( assetDefinitions.address(), assetDefinitions.size(), sizeof(const AssetDefinition*), descendingAssetDefinitionLoadCount ); + + // Info. + Con::printSeparator(); + Con::printf( "Asset Manager: %d declared asset(s) dump as follows:", mDeclaredAssets.size() ); + Con::printBlankLine(); + + // Iterate sorted asset definitions. + for ( Vector::iterator assetItr = assetDefinitions.begin(); assetItr != assetDefinitions.end(); ++assetItr ) + { + // Fetch asset definition. + const AssetDefinition* pAssetDefinition = *assetItr; + + // Info. + Con::printf( "AssetId:'%s', RefCount:%d, LoadCount:%d, UnloadCount:%d, AutoUnload:%d, Loaded:%d, Internal:%d, Private: %d, Type:'%s', Module/Version:'%s'/'%d', File:'%s'", + pAssetDefinition->mAssetId, + pAssetDefinition->mpAssetBase == NULL ? 0 : pAssetDefinition->mpAssetBase->getAcquiredReferenceCount(), + pAssetDefinition->mAssetLoadedCount, + pAssetDefinition->mAssetUnloadedCount, + pAssetDefinition->mAssetAutoUnload, + pAssetDefinition->mpAssetBase != NULL, + pAssetDefinition->mAssetInternal, + pAssetDefinition->mAssetPrivate, + pAssetDefinition->mAssetType, + pAssetDefinition->mpModuleDefinition->getModuleId(), + pAssetDefinition->mpModuleDefinition->getVersionId(), + pAssetDefinition->mAssetBaseFilePath ); + } + + // Info. + Con::printSeparator(); + Con::printBlankLine(); +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAllAssets( AssetQuery* pAssetQuery, const bool ignoreInternal, const bool ignorePrivate ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAllAssets); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if internal and we're ignoring them. + if ( ignoreInternal && pAssetDefinition->mAssetInternal ) + continue; + + // Skip if private and we're ignoring them. + if ( ignorePrivate && pAssetDefinition->mAssetPrivate ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back( pAssetDefinition->mAssetId ); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetName( AssetQuery* pAssetQuery, const char* pAssetName, const bool partialName ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetName); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetName != NULL, "Cannot use NULL asset name." ); + + // Reset asset name. + StringTableEntry assetName = NULL; + S32 partialAssetNameLength = 0; + + // Are we doing partial name search? + if ( partialName ) + { + // Yes, so fetch length of partial name. + partialAssetNameLength = dStrlen( pAssetName ); + } + else + { + // No, so fetch asset name. + assetName = StringTable->insert( pAssetName ); + } + + // Reset result count. + S32 resultCount = 0; + + // Iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Are we doing partial name search? + if ( partialName ) + { + // Yes, so fetch the length of this asset name. + const S32 currentAssetNameLength = dStrlen( pAssetDefinition->mAssetName ); + + // Skip if the query asset name is longer than the current asset name. + if ( partialAssetNameLength > currentAssetNameLength ) + continue; + + // Skip if this is not the asset we want. + if ( dStrnicmp( pAssetDefinition->mAssetName, pAssetName, partialAssetNameLength ) != 0 ) + continue; + } + else + { + // No, so skip if this is not the asset we want. + if ( assetName != pAssetDefinition->mAssetName ) + continue; + } + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetCategory( AssetQuery* pAssetQuery, const char* pAssetCategory, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetCategory); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetCategory != NULL, "Cannot use NULL asset category." ); + + // Fetch asset category. + StringTableEntry assetCategory = StringTable->insert( pAssetCategory ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetCategory != assetCategory ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetCategory != pAssetDefinition->mAssetCategory ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +S32 AssetManager::findAssetAutoUnload( AssetQuery* pAssetQuery, const bool assetAutoUnload, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetAutoUnload); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetAutoUnload != assetAutoUnload ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetAutoUnload != pAssetDefinition->mAssetAutoUnload ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetInternal( AssetQuery* pAssetQuery, const bool assetInternal, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetInternal); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetInternal != assetInternal ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetInternal != pAssetDefinition->mAssetInternal ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetPrivate( AssetQuery* pAssetQuery, const bool assetPrivate, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetPrivate); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetPrivate != assetPrivate ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetPrivate != pAssetDefinition->mAssetPrivate ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetType( AssetQuery* pAssetQuery, const char* pAssetType, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetType); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetType != NULL, "Cannot use NULL asset type." ); + + // Fetch asset type. + StringTableEntry assetType = StringTable->insert( pAssetType ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetType != assetType ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetType != pAssetDefinition->mAssetType ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetDependsOn( AssetQuery* pAssetQuery, const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetDependsOn); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Reset result count. + S32 resultCount = 0; + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find( assetId ); + + // Iterate all dependencies. + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == assetId ) + { + // Store as result. + pAssetQuery->mAssetList.push_back(dependsOnItr->value); + + // Next dependency. + dependsOnItr++; + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetIsDependedOn( AssetQuery* pAssetQuery, const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetIsDependedOn); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Reset result count. + S32 resultCount = 0; + + // Find depended-on entry. + typeAssetIsDependedOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Store as result. + pAssetQuery->mAssetList.push_back(dependedOnItr->value); + + // Next dependency. + dependedOnItr++; + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findInvalidAssetReferences( AssetQuery* pAssetQuery ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindInvalidAssetReferences); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Iterate referenced assets. + for( typeReferencedAssetsHash::Iterator assetItr = mReferencedAssets.begin(); assetItr != mReferencedAssets.end(); ++assetItr ) + { + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( assetItr->key ); + + // Skip if the asset definition was found. + if ( pAssetDefinition != NULL ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(assetItr->key); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findTaggedAssets( AssetQuery* pAssetQuery, const char* pAssetTagNames, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindTaggedAssets); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetTagNames != NULL, "Cannot use NULL asset tag name(s)." ); + + // Do we have an asset tag manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find tagged assets as no asset tag manifest is present." ); + return 0; + } + + // Reset result count. + S32 resultCount = 0; + + const char* pTagSeparators = " ,\t\n"; + + // Fetch tag count. + U32 assetTagCount = StringUnit::getUnitCount( pAssetTagNames, pTagSeparators ); + + // Fetch asset tags. + Vector assetTags; + for( U32 tagIndex = 0; tagIndex < assetTagCount; ++tagIndex ) + { + // Fetch asset tag name. + const char* pTagName = StringUnit::getUnit( pAssetTagNames, tagIndex, pTagSeparators ); + + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = mAssetTagsManifest->findAssetTag( pTagName ); + + // Did we find the asset tag? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Asset Manager: Cannot find tagged assets of '%s' as it does not exist. Ignoring tag.", pTagName ); + continue; + } + + assetTags.push_back( pAssetTag ); + } + + // Fetch found asset tag count. + assetTagCount = assetTags.size(); + + // Did we find any tags? + if ( assetTagCount == 0 ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Asset Manager: No specified tagged assets found in '%s'.", pAssetTagNames ); + return 0; + } + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset Id. + StringTableEntry assetId = *assetItr; + + // Skip if asset is not valid. + if ( !isDeclaredAsset( assetId ) ) + continue; + + // Reset matched flag. + bool assetTagMatched = false; + + // Iterate asset tags. + for ( Vector::iterator assetTagItr = assetTags.begin(); assetTagItr != assetTags.end(); ++assetTagItr ) + { + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = *assetTagItr; + + // Skip if asset is not tagged. + if ( !pAssetTag->containsAsset( assetId ) ) + continue; + + // Flag as matched. + assetTagMatched = true; + break; + } + + // Did we find a match? + if ( assetTagMatched ) + { + // Yes, so is asset already present? + if ( !filteredAssets.containsAsset( assetId ) ) + { + // No, so store as result. + filteredAssets.mAssetList.push_back(assetId); + + // Increase result count. + resultCount++; + } + } + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // Iterate asset tags. + for ( Vector::iterator assetTagItr = assetTags.begin(); assetTagItr != assetTags.end(); ++assetTagItr ) + { + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = *assetTagItr; + + // Iterate tagged assets. + for ( Vector::iterator assetItr = pAssetTag->mAssets.begin(); assetItr != pAssetTag->mAssets.end(); ++assetItr ) + { + // Fetch asset Id. + StringTableEntry assetId = *assetItr; + + // Skip if asset Id is already present. + if ( pAssetQuery->containsAsset( assetId ) ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(assetId); + + // Increase result count. + resultCount++; + } + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetLooseFile( AssetQuery* pAssetQuery, const char* pLooseFile, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetLooseFile); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pLooseFile != NULL, "Cannot use NULL loose file." ); + + // Expand loose file. + char looseFileBuffer[1024]; + Con::expandPath(looseFileBuffer, sizeof(looseFileBuffer), pLooseFile, NULL, false ); + + // Fetch asset loose file. + StringTableEntry looseFile = StringTable->insert( looseFileBuffer ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Fetch loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + + // Skip if this asset has no loose files. + if ( assetLooseFiles.size() == 0 ) + continue; + + // Search the assets loose files. + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Is this the loose file we are searching for? + if ( *looseFileItr != looseFile ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + + break; + } + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Fetch loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + + // Skip if this asset has no loose files. + if ( assetLooseFiles.size() == 0 ) + continue; + + // Search the assets loose files. + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Is this the loose file we are searching for? + if ( *looseFileItr != looseFile ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + + break; + } + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::scanDeclaredAssets( const char* pPath, const char* pExtension, const bool recurse, ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ScanDeclaredAssets); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan declared assets with NULL path." ); + AssertFatal( pExtension != NULL, "Cannot scan declared assets with NULL extension." ); + + // Expand path location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Find files. + Vector files; + if ( !Platform::dumpPath( pathBuffer, files, recurse ? -1 : 0 ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to scan declared assets in directory '%s'.", pathBuffer ); + return false; + } + + // Is the asset file-path located within the specified module? + if ( !Con::isBasePath( pathBuffer, pModuleDefinition->getModulePath() ) ) + { + // No, so warn. + Con::warnf( "Asset Manager: Could not add declared asset file '%s' as file does not exist with module path '%s'", + pathBuffer, + pModuleDefinition->getModulePath() ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Scanning for declared assets in path '%s' for files with extension '%s'...", pathBuffer, pExtension ); + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( pExtension ); + + // Fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pModuleDefinition->getModuleAssets(); + + TamlAssetDeclaredVisitor assetDeclaredVisitor; + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo& fileInfo = *fileItr; + + // Fetch filename. + const char* pFilename = fileInfo.pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + // Clear declared assets. + assetDeclaredVisitor.clear(); + + // Format full file-path. + char assetFileBuffer[1024]; + dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName ); + + // Parse the filename. + if ( !mTaml.parse( assetFileBuffer, assetDeclaredVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer ); + continue; + } + + // Fetch asset definition. + AssetDefinition& foundAssetDefinition = assetDeclaredVisitor.getAssetDefinition(); + + // Did we get an asset name? + if ( foundAssetDefinition.mAssetName == StringTable->EmptyString() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Parsed file '%s' but did not encounter an asset.", assetFileBuffer ); + continue; + } + + // Set module definition. + foundAssetDefinition.mpModuleDefinition = pModuleDefinition; + + // Format asset Id. + char assetIdBuffer[1024]; + dSprintf(assetIdBuffer, sizeof(assetIdBuffer), "%s%s%s", + pModuleDefinition->getModuleId(), + ASSET_SCOPE_TOKEN, + foundAssetDefinition.mAssetName ); + + // Set asset Id. + foundAssetDefinition.mAssetId = StringTable->insert( assetIdBuffer ); + + // Does this asset already exist? + if ( mDeclaredAssets.contains( foundAssetDefinition.mAssetId ) ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Encountered asset Id '%s' in asset file '%s' but it conflicts with existing asset Id in asset file '%s'.", + foundAssetDefinition.mAssetId, + foundAssetDefinition.mAssetBaseFilePath, + mDeclaredAssets.find( foundAssetDefinition.mAssetId )->value->mAssetBaseFilePath ); + + continue; + } + + // Create new asset definition. + AssetDefinition* pAssetDefinition = new AssetDefinition( foundAssetDefinition ); + + // Store in declared assets. + mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition ); + + // Store in module assets. + moduleAssets.push_back( pAssetDefinition ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Adding Asset Id '%s' of type '%s' in asset file '%s'.", + pAssetDefinition->mAssetId, + pAssetDefinition->mAssetType, + pAssetDefinition->mAssetBaseFilePath ); + } + + // Fetch asset Id. + StringTableEntry assetId = pAssetDefinition->mAssetId; + + // Fetch asset dependencies. + TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies(); + + // Are there any asset dependencies? + if ( assetDependencies.size() > 0 ) + { + // Yes, so iterate dependencies. + for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr ) + { + // Fetch asset Ids. + StringTableEntry dependencyAssetId = *assetDependencyItr; + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetId, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Asset Id '%s' has dependency of Asset Id '%s'", assetId, dependencyAssetId ); + } + } + } + + // Fetch asset loose files. + TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles(); + + // Are there any loose files? + if ( assetLooseFiles.size() > 0 ) + { + // Yes, so iterate loose files. + for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr ) + { + // Fetch loose file. + StringTableEntry looseFile = *assetLooseFileItr; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Asset Id '%s' has loose file '%s'.", assetId, looseFile ); + } + + // Store loose file. + pAssetDefinition->mAssetLooseFiles.push_back( looseFile ); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: ... Finished scanning for declared assets in path '%s' for files with extension '%s'.", pathBuffer, pExtension ); + Con::printSeparator(); + Con::printBlankLine(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::scanReferencedAssets( const char* pPath, const char* pExtension, const bool recurse ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ScanReferencedAssets); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan referenced assets with NULL path." ); + AssertFatal( pExtension != NULL, "Cannot scan referenced assets with NULL extension." ); + + // Expand path location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Find files. + Vector files; + if ( !Platform::dumpPath( pathBuffer, files, recurse ? -1 : 0 ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to scan referenced assets in directory '%s'.", pathBuffer ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Scanning for referenced assets in path '%s' for files with extension '%s'...", pathBuffer, pExtension ); + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( pExtension ); + + TamlAssetReferencedVisitor assetReferencedVisitor; + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo& fileInfo = *fileItr; + + // Fetch filename. + const char* pFilename = fileInfo.pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + // Clear referenced assets. + assetReferencedVisitor.clear(); + + // Format full file-path. + char assetFileBuffer[1024]; + dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName ); + + // Format reference file-path. + typeReferenceFilePath referenceFilePath = StringTable->insert( assetFileBuffer ); + + // Parse the filename. + if ( !mTaml.parse( referenceFilePath, assetReferencedVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset references: '%s'.", referenceFilePath ); + continue; + } + + // Fetch usage map. + const TamlAssetReferencedVisitor::typeAssetReferencedHash& assetReferencedMap = assetReferencedVisitor.getAssetReferencedMap(); + + // Do we have any asset references? + if ( assetReferencedMap.size() > 0 ) + { + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + } + + // Iterate usage. + for( TamlAssetReferencedVisitor::typeAssetReferencedHash::const_iterator usageItr = assetReferencedMap.begin(); usageItr != assetReferencedMap.end(); ++usageItr ) + { + // Fetch asset name. + typeAssetId assetId = usageItr->key; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Found referenced Asset Id '%s' in file '%s'.", assetId, referenceFilePath ); + } + + // Add referenced asset. + addReferencedAsset( assetId, referenceFilePath ); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: ... Finished scanning for referenced assets in path '%s' for files with extension '%s'.", pathBuffer, pExtension ); + Con::printSeparator(); + Con::printBlankLine(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +AssetDefinition* AssetManager::findAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot find NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find declared asset. + typeDeclaredAssetsHash::iterator declaredAssetItr = mDeclaredAssets.find( assetId ); + + // Find if we didn't find a declared asset Id. + if ( declaredAssetItr == mDeclaredAssets.end() ) + return NULL; + + return declaredAssetItr->value; +} + +//----------------------------------------------------------------------------- + +void AssetManager::addReferencedAsset( StringTableEntry assetId, StringTableEntry referenceFilePath ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddReferencedAsset); + + // Sanity! + AssertFatal( assetId != NULL, "Cannot add referenced asset with NULL asset Id." ); + AssertFatal( referenceFilePath != NULL, "Cannot add referenced asset with NULL reference file-path." ); + + // Find referenced asset. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find( assetId ); + + // Did we find the asset? + if ( referencedAssetItr == mReferencedAssets.end() ) + { + // No, so add asset Id. + mReferencedAssets.insertEqual( assetId, referenceFilePath ); + } + else + { + // Yes, so add asset Id with a unique file. + while( true ) + { + // Finish if this file is already present. + if ( referencedAssetItr->value == referenceFilePath ) + return; + + // Move to next asset Id. + referencedAssetItr++; + + // Is this the end of referenced assets or a different asset Id? + if ( referencedAssetItr == mReferencedAssets.end() || + referencedAssetItr->key != assetId ) + { + // Yes, so add asset reference. + mReferencedAssets.insertEqual( assetId, referenceFilePath ); + return; + } + }; + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::renameAssetReferences( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameAssetReferences); + + // Sanity! + AssertFatal( assetIdFrom != NULL, "Cannot rename asset references using NULL asset Id from." ); + AssertFatal( assetIdTo != NULL, "Cannot rename asset references using NULL asset Id to." ); + + // Finish if the asset is not referenced. + if ( !mReferencedAssets.count( assetIdFrom ) ) + return; + + // Setup referenced update visitor. + TamlAssetReferencedUpdateVisitor assetReferencedUpdateVisitor; + assetReferencedUpdateVisitor.setAssetIdFrom( assetIdFrom ); + assetReferencedUpdateVisitor.setAssetIdTo( assetIdTo ); + + // Find first referenced asset Id. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find( assetIdFrom ); + + // Iterate references. + while( true ) + { + // Finish if end of references. + if ( referencedAssetItr == mReferencedAssets.end() || referencedAssetItr->key != assetIdFrom ) + return; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Renaming declared Asset Id '%s' to Asset Id '%s'. Updating referenced file '%s'", + assetIdFrom, + assetIdTo, + referencedAssetItr->value ); + } + + // Update asset file declaration. + if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as the referenced asset file could not be parsed: %s", + assetIdFrom, assetIdTo, referencedAssetItr->value ); + } + + // Move to next reference. + referencedAssetItr++; + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::removeAssetReferences( StringTableEntry assetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveAssetReferences); + + // Sanity! + AssertFatal( assetId != NULL, "Cannot rename asset references using NULL asset Id." ); + + // Finish if the asset is not referenced. + if ( !mReferencedAssets.count( assetId ) ) + return; + + // Setup referenced update visitor. + TamlAssetReferencedUpdateVisitor assetReferencedUpdateVisitor; + assetReferencedUpdateVisitor.setAssetIdFrom( assetId ); + assetReferencedUpdateVisitor.setAssetIdTo( StringTable->EmptyString() ); + + // Find first referenced asset Id. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find(assetId); + + // Iterate references. + while( true ) + { + // Finish if end of references. + if ( referencedAssetItr == mReferencedAssets.end() || referencedAssetItr->key != assetId ) + break; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Removing Asset Id '%s' references from file '%s'", + assetId, + referencedAssetItr->value ); + } + + // Update asset file declaration. + if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot remove referenced asset Id '%s' as the referenced asset file could not be parsed: %s", + assetId, + referencedAssetItr->value ); + } + + // Move to next reference. + referencedAssetItr++; + } + + // Remove asset references. + mReferencedAssets.erase( assetId ); +} + +//----------------------------------------------------------------------------- + +void AssetManager::renameAssetDependencies( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameAssetDependencies); + + // Sanity! + AssertFatal( assetIdFrom != NULL, "Cannot rename asset dependencies using NULL asset Id from." ); + AssertFatal( assetIdTo != NULL, "Cannot rename asset dependencies using NULL asset Id to." ); + + // Rename via depends-on... + while( mAssetDependsOn.count( assetIdFrom ) > 0 ) + { + // Find depends-on. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(assetIdFrom); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = dependsOnItr->value; + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( isDependedOnItr != mAssetIsDependedOn.end(), "Asset dependencies are corrupt!" ); + + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value != assetIdFrom ) + { + isDependedOnItr++; + } + + // Sanity! + AssertFatal( isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value == assetIdFrom, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isDependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetIdTo, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetIdTo ); + } + + // Rename via is-depended-on... + while( mAssetIsDependedOn.count( assetIdFrom ) > 0 ) + { + // Find is-depended-on. + typeAssetIsDependedOnHash::Iterator isdependedOnItr = mAssetIsDependedOn.find(assetIdFrom); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = isdependedOnItr->value; + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( dependsOnItr != mAssetDependsOn.end(), "Asset dependencies are corrupt!" ); + + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == dependencyAssetId && dependsOnItr->value != assetIdFrom ) + { + dependsOnItr++; + } + + // Sanity! + AssertFatal( dependsOnItr->key == dependencyAssetId && dependsOnItr->value == assetIdFrom, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isdependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + + // Insert depends-on. + mAssetDependsOn.insertEqual( dependencyAssetId, assetIdTo ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( assetIdTo, dependencyAssetId ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::removeAssetDependencies( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemvoeAsetDependencies); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot remove asset dependencies using NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Remove from depends-on assets. + while( mAssetDependsOn.count( assetId ) > 0 ) + { + // Find depends-on. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(assetId); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = dependsOnItr->value; + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( isDependedOnItr != mAssetIsDependedOn.end(), "Asset dependencies are corrupt!" ); + + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value != assetId ) + { + isDependedOnItr++; + } + + // Sanity! + AssertFatal( isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value == assetId, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isDependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::unloadAsset( AssetDefinition* pAssetDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_UnloadAsset); + + // Destroy the asset. + pAssetDefinition->mpAssetBase->deleteObject(); + + // Increase unloaded count. + pAssetDefinition->mAssetUnloadedCount++; + + // Is the asset internal? + if ( pAssetDefinition->mAssetInternal ) + { + // Yes, so decrease internal loaded asset count. + mLoadedInternalAssetsCount--; + } + else + { + // No, so decrease external loaded assets count. + mLoadedExternalAssetsCount--; + } + + // Is the asset private? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so decrease private loaded asset count. + mLoadedPrivateAssetsCount--; + + // Remove it completely. + removeDeclaredAsset( pAssetDefinition->mAssetId ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePreLoad( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePreLoad); + + // Add module declared assets. + addModuleDeclaredAssets( pModuleDefinition ); + + // Is an asset tags manifest specified? + if ( pModuleDefinition->getAssetTagsManifest() != StringTable->EmptyString() ) + { + // Yes, so load the asset tags manifest. + loadAssetTags( pModuleDefinition ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePreUnload( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePreUnload); + + // Is an asset tags manifest specified? + if ( pModuleDefinition->getAssetTagsManifest() != StringTable->EmptyString() ) + { + // Yes, so save the asset tags manifest. + saveAssetTags(); + + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so remove it. + mAssetTagsManifest->deleteObject(); + mAssetTagsModuleDefinition = NULL; + } + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePostUnload( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePostUnload); + + // Remove declared assets. + removeDeclaredAssets( pModuleDefinition ); +} diff --git a/Engine/source/assets/assetManager.h b/Engine/source/assets/assetManager.h new file mode 100644 index 0000000000..fbf1522f34 --- /dev/null +++ b/Engine/source/assets/assetManager.h @@ -0,0 +1,395 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_MANAGER_H_ +#define _ASSET_MANAGER_H_ + +#ifndef _SIMBASE_H_ +#include "console/sim.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _MODULE_DEFINITION_H +#include "module/moduleDefinition.h" +#endif + +#ifndef _MODULE_CALLBACKS_H_ +#include "module/moduleCallbacks.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#include "assets/assetTagsManifest.h" +#endif + +#ifndef _ASSET_QUERY_H_ +#include "assets/assetQuery.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class AssetPtrCallback; +class AssetPtrBase; + +//----------------------------------------------------------------------------- + +class AssetManager : public SimObject, public ModuleCallbacks +{ +private: + typedef SimObject Parent; + typedef StringTableEntry typeAssetId; + typedef StringTableEntry typeAssetName; + typedef StringTableEntry typeReferenceFilePath; + typedef HashMap typeDeclaredAssetsHash; + typedef HashTable typeReferencedAssetsHash; + typedef HashTable typeAssetDependsOnHash; + typedef HashTable typeAssetIsDependedOnHash; + typedef HashMap typeAssetPtrRefreshHash; + + /// Declared assets. + typeDeclaredAssetsHash mDeclaredAssets; + + /// Referenced assets. + typeReferencedAssetsHash mReferencedAssets; + + /// Asset dependencies. + typeAssetDependsOnHash mAssetDependsOn; + typeAssetIsDependedOnHash mAssetIsDependedOn; + + /// Asset tags. + SimObjectPtr mAssetTagsManifest; + SimObjectPtr mAssetTagsModuleDefinition; + + /// Asset pointer refresh notifications. + typeAssetPtrRefreshHash mAssetPtrRefreshNotifications; + + /// Miscellaneous. + bool mEchoInfo; + bool mIgnoreAutoUnload; + U32 mLoadedInternalAssetsCount; + U32 mLoadedExternalAssetsCount; + U32 mLoadedPrivateAssetsCount; + U32 mAcquiredReferenceCount; + U32 mMaxLoadedInternalAssetsCount; + U32 mMaxLoadedExternalAssetsCount; + U32 mMaxLoadedPrivateAssetsCount; + Taml mTaml; + +public: + AssetManager(); + virtual ~AssetManager() {} + + /// SimObject overrides + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + /// Declared assets. + bool addModuleDeclaredAssets( ModuleDefinition* pModuleDefinition ); + bool addDeclaredAsset( ModuleDefinition* pModuleDefinition, const char* pAssetFilePath ); + StringTableEntry addPrivateAsset( AssetBase* pAssetBase ); + bool removeDeclaredAssets( ModuleDefinition* pModuleDefinition ); + bool removeDeclaredAsset( const char* pAssetId ); + bool renameDeclaredAsset( const char* pAssetIdFrom, const char* pAssetIdTo ); + StringTableEntry getAssetName( const char* pAssetId ); + StringTableEntry getAssetDescription( const char* pAssetId ); + StringTableEntry getAssetCategory( const char* pAssetId ); + StringTableEntry getAssetType( const char* pAssetId ); + StringTableEntry getAssetFilePath( const char* pAssetId ); + StringTableEntry getAssetPath( const char* pAssetId ); + ModuleDefinition* getAssetModuleDefinition( const char* pAssetId ); + bool isAssetInternal( const char* pAssetId ); + bool isAssetPrivate( const char* pAssetId ); + bool isAssetAutoUnload( const char* pAssetId ); + bool isAssetLoaded( const char* pAssetId ); + bool isDeclaredAsset( const char* pAssetId ); + bool doesAssetDependOn( const char* pAssetId, const char* pDependsOnAssetId ); + bool isAssetDependedOn( const char* pAssetId, const char* pDependedOnByAssetId ); + + /// Referenced assets. + bool compileReferencedAssets( ModuleDefinition* pModuleDefinition ); + bool isReferencedAsset( const char* pAssetId ); + bool renameReferencedAsset( const char* pAssetIdFrom, const char* pAssetIdTo ); + + /// Public asset acquisition. + template T* acquireAsset( const char* pAssetId ) + { + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot acquire NULL asset Id." ); + + // Is this an empty asset Id? + if ( *pAssetId == 0 ) + { + // Yes, so return nothing. + return NULL; + } + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to acquire asset Id '%s' as it does not exist.", pAssetId ); + return NULL; + } + + // Is asset loading? + if ( pAssetDefinition->mAssetLoading == true ) + { + // Yes, so we've got a circular loop which we cannot resolve! + Con::warnf( "Asset Manager: Failed to acquire asset Id '%s' as loading it involves a cyclic dependency on itself which cannot be resolved.", pAssetId ); + return NULL; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started acquiring Asset Id '%s'...", pAssetId ); + } + + // Is the asset already loaded? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so info + if ( mEchoInfo ) + { + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find any asset dependencies. + typeAssetDependsOnHash::Iterator assetDependenciesItr = mAssetDependsOn.find( assetId ); + + // Does the asset have any dependencies? + if ( assetDependenciesItr != mAssetDependsOn.end() ) + { + // Yes, so show all dependency assets. + Con::printf( "Asset Manager: > Found dependencies:" ); + + // Iterate all dependencies. + while( assetDependenciesItr != mAssetDependsOn.end() && assetDependenciesItr->key == assetId ) + { + // Info. + Con::printf( "Asset Manager: > Asset Id '%s'", assetDependenciesItr->value ); + + // Next dependency. + assetDependenciesItr++; + } + } + } + + // Flag asset as loading. + pAssetDefinition->mAssetLoading = true; + + // Generate primary asset. + pAssetDefinition->mpAssetBase = mTaml.read( pAssetDefinition->mAssetBaseFilePath ); + + // Flag asset as finished loading. + pAssetDefinition->mAssetLoading = false; + + // Did we generate the asset? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: > Failed to acquire asset Id '%s' as loading the asset file failed to return the asset or the correct asset type: '%s'.", + pAssetId, pAssetDefinition->mAssetBaseFilePath ); + return NULL; + } + + // Increase loaded count. + pAssetDefinition->mAssetLoadedCount++; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Loading asset into memory as object Id '%d' from file '%s'.", + pAssetDefinition->mpAssetBase->getId(), pAssetDefinition->mAssetBaseFilePath ); + } + + // Set ownership by asset manager. + pAssetDefinition->mpAssetBase->setOwned( this, pAssetDefinition ); + + // Is the asset internal? + if ( pAssetDefinition->mAssetInternal ) + { + // Yes, so increase internal loaded asset count. + if ( ++mLoadedInternalAssetsCount > mMaxLoadedInternalAssetsCount ) + mMaxLoadedInternalAssetsCount = mLoadedInternalAssetsCount; + } + else + { + // No, so increase external loaded assets count. + if ( ++mLoadedExternalAssetsCount > mMaxLoadedExternalAssetsCount ) + mMaxLoadedExternalAssetsCount = mLoadedExternalAssetsCount; + } + } + else if ( pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() == 0 ) + { + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Acquiring from idle state." ); + } + } + + // Set acquired asset. + T* pAcquiredAsset = dynamic_cast( (AssetBase*)pAssetDefinition->mpAssetBase ); + + // Is asset the correct type? + if ( pAcquiredAsset == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: > Failed to acquire asset Id '%s' as it was not the required asset type: '%s'.", pAssetId, pAssetDefinition->mAssetBaseFilePath ); + return NULL; + } + + // Acquire asset reference. + pAcquiredAsset->acquireAssetReference(); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Finished acquiring asset. Reference count now '%d'.", pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() ); + Con::printSeparator(); + } + + return pAcquiredAsset; + } + + /// Private asset acquisition. + template T* acquireAsPrivateAsset( const char* pAssetId ) + { + // Acquire the asset normally. + T* pAsset = acquireAsset( pAssetId ); + + // Finish if the asset was not acquired. + if ( pAsset == NULL ) + return NULL; + + // Clone the asset. + T* pAssetClone = dynamic_cast( pAsset->clone() ); + + // Sanity! + AssertFatal( pAssetClone != NULL, "acquireAsPrivateAsset() - Failed to clone asset type." ); + + // Release the public asset. + releaseAsset( pAssetId ); + + // Add as a private asset. + addPrivateAsset( pAssetClone ); + + return pAssetClone; + } + + bool releaseAsset( const char* pAssetId ); + void purgeAssets( void ); + + /// Asset deletion. + bool deleteAsset( const char* pAssetId, const bool deleteLooseFiles, const bool deleteDependencies ); + + // Asset refresh notification. + bool refreshAsset( const char* pAssetId ); + void refreshAllAssets( const bool includeUnloaded = false ); + void registerAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase, AssetPtrCallback* pCallback ); + void unregisterAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase ); + + /// Asset tags. + bool loadAssetTags( ModuleDefinition* pModuleDefinition ); + bool saveAssetTags( void ); + bool restoreAssetTags( void ); + inline AssetTagsManifest* getAssetTags( void ) const { return mAssetTagsManifest; } + + /// Info. + inline U32 getDeclaredAssetCount( void ) const { return (U32)mDeclaredAssets.size(); } + inline U32 getReferencedAssetCount( void ) const { return (U32)mReferencedAssets.size(); } + inline U32 getLoadedInternalAssetCount( void ) const { return mLoadedInternalAssetsCount; } + inline U32 getLoadedExternalAssetCount( void ) const { return mLoadedExternalAssetsCount; } + inline U32 getLoadedPrivateAssetCount( void ) const { return mLoadedPrivateAssetsCount; } + inline U32 getMaxLoadedInternalAssetCount( void ) const { return mMaxLoadedInternalAssetsCount; } + inline U32 getMaxLoadedExternalAssetCount( void ) const { return mMaxLoadedExternalAssetsCount; } + inline U32 getMaxLoadedPrivateAssetCount( void ) const { return mMaxLoadedPrivateAssetsCount; } + void dumpDeclaredAssets( void ) const; + + /// Total acquired asset references. + inline void acquireAcquiredReferenceCount( void ) { mAcquiredReferenceCount++; } + inline void releaseAcquiredReferenceCount( void ) { AssertFatal( mAcquiredReferenceCount != 0, "AssetManager: Invalid acquired reference count." ); mAcquiredReferenceCount--; } + inline U32 getAcquiredReferenceCount( void ) const { return mAcquiredReferenceCount; } + + /// Asset queries. + S32 findAllAssets( AssetQuery* pAssetQuery, const bool ignoreInternal = true, const bool ignorePrivate = true ); + S32 findAssetName( AssetQuery* pAssetQuery, const char* pAssetName, const bool partialName = false ); + S32 findAssetCategory( AssetQuery* pAssetQuery, const char* pAssetCategory, const bool assetQueryAsSource = false ); + S32 findAssetAutoUnload( AssetQuery* pAssetQuery, const bool assetAutoUnload, const bool assetQueryAsSource = false ); + S32 findAssetInternal( AssetQuery* pAssetQuery, const bool assetInternal, const bool assetQueryAsSource = false ); + S32 findAssetPrivate( AssetQuery* pAssetQuery, const bool assetPrivate, const bool assetQueryAsSource = false ); + S32 findAssetType( AssetQuery* pAssetQuery, const char* pAssetType, const bool assetQueryAsSource = false ); + S32 findAssetDependsOn( AssetQuery* pAssetQuery, const char* pAssetId ); + S32 findAssetIsDependedOn( AssetQuery* pAssetQuery, const char* pAssetId ); + S32 findInvalidAssetReferences( AssetQuery* pAssetQuery ); + S32 findTaggedAssets( AssetQuery* pAssetQuery, const char* pAssetTagNames, const bool assetQueryAsSource = false ); + S32 findAssetLooseFile( AssetQuery* pAssetQuery, const char* pLooseFile, const bool assetQueryAsSource = false ); + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetManager ); + +private: + bool scanDeclaredAssets( const char* pPath, const char* pExtension, const bool recurse, ModuleDefinition* pModuleDefinition ); + bool scanReferencedAssets( const char* pPath, const char* pExtension, const bool recurse ); + AssetDefinition* findAsset( const char* pAssetId ); + void addReferencedAsset( StringTableEntry assetId, StringTableEntry referenceFilePath ); + void renameAssetReferences( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ); + void removeAssetReferences( StringTableEntry assetId ); + void renameAssetDependencies( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ); + void removeAssetDependencies( const char* pAssetId ); + void removeAssetLooseFiles( const char* pAssetId ); + void unloadAsset( AssetDefinition* pAssetDefinition ); + + /// Module callbacks. + virtual void onModulePreLoad( ModuleDefinition* pModuleDefinition ); + virtual void onModulePreUnload( ModuleDefinition* pModuleDefinition ); + virtual void onModulePostUnload( ModuleDefinition* pModuleDefinition ); +}; + +//----------------------------------------------------------------------------- + +extern AssetManager AssetDatabase; + +#endif // _ASSET_MANAGER_H_ \ No newline at end of file diff --git a/Engine/source/assets/assetManager_ScriptBinding.h b/Engine/source/assets/assetManager_ScriptBinding.h new file mode 100644 index 0000000000..ddfb3f3f2a --- /dev/null +++ b/Engine/source/assets/assetManager_ScriptBinding.h @@ -0,0 +1,811 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "assetBase.h" +#include "assetManager.h" +#include "module/moduleDefinition.h" +#include "console/sim.h" + +DefineEngineMethod(AssetManager, compileReferencedAssets, bool, (const char* moduleDefinition), (""), + "Compile the referenced assets determined by the specified module definition.\n" + "@param moduleDefinition The module definition specifies the asset manifest.\n" + "@return Whether the compilation was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::compileReferencedAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Compile referenced assets. + return object->compileReferencedAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addModuleDeclaredAssets, bool, (const char* moduleDefinition), (""), + "Add any the declared assets specified by the module definition.\n" + "@param moduleDefinition The module definition specifies the asset manifest.\n" + "@return Whether adding declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addDeclaredAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Add module declared assets. + return object->addModuleDeclaredAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addDeclaredAsset, bool, (const char* moduleDefinition, const char* assetFilePath), ("", ""), + "Add the specified asset against the specified module definition.\n" + "@param moduleDefinition The module definition that may contain declared assets.\n" + "@return Whether adding declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addDeclaredAsset() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Fetch asset file-path. + const char* pAssetFilePath = assetFilePath; + + // Add declared asset. + return object->addDeclaredAsset( pModuleDefinition, pAssetFilePath ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addPrivateAsset, String, (const char* assetObject), (""), + "Adds a private asset object.\n" + "@param assetObject The asset object to add as a private asset.\n" + "@return The allocated private asset Id.\n") +{ + // Fetch asset. + AssetBase* pAssetBase; + Sim::findObject(assetObject, pAssetBase); + + // Did we find the asset? + if ( pAssetBase == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addPrivateAsset() - Could not find the asset '%s'.", assetObject); + return StringTable->EmptyString(); + } + + // Add private asset. + return object->addPrivateAsset( pAssetBase ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, removeDeclaredAssets, bool, (const char* moduleDefinition), (""), + "Remove any the declared assets specified by the module definition.\n" + "@param moduleDefinition The module definition that may contain declared assets.\n" + "@return Whether removing declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::removeDeclaredAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Remove declared assets. + return object->removeDeclaredAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, removeDeclaredAsset, bool, (const char* assetId), (""), + "Remove the specified declared asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return Whether removing the declared asset was successful or not.\n") +{ + // Remove the declared asset Id. + return object->removeDeclaredAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetName, String, (const char* assetId), (""), + "Gets the asset name from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset name from the specified asset Id.\n") +{ + return object->getAssetName(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetDescription, String, (const char* assetId), (""), + "Gets the asset description from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset description from the specified asset Id.\n") +{ + return object->getAssetDescription(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetCategory, String, (const char* assetId), (""), + "Gets the asset category from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset category from the specified asset Id.\n") +{ + return object->getAssetCategory(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetType, String, (const char* assetId), (""), + "Gets the asset type from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset type from the specified asset Id.\n") +{ + return object->getAssetType(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetFilePath, String, (const char* assetId), (""), + "Gets the asset file-path from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset file - path from the specified asset Id.\n") +{ + return object->getAssetFilePath(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetPath, String, (const char* assetId), (""), + "Gets the asset path (not including the asset file) from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset path(not including the asset file) from the specified asset Id.\n") +{ + return object->getAssetPath(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetModule, String, (const char* assetId), (""), + "Gets the module definition where the the specified asset Id is located.\n" + "@param assetId The selected asset Id.\n" + "@return The module definition where the the specified asset Id is located.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition = object->getAssetModuleDefinition(assetId); + + return pModuleDefinition == NULL ? StringTable->EmptyString() : pModuleDefinition->getIdString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetInternal, bool, (const char* assetId), (""), + "Check whether the specified asset Id is internal or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is internal or not.\n") +{ + return object->isAssetInternal(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetPrivate, bool, (const char* assetId), (""), + "Check whether the specified asset Id is private or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is private or not.\n") +{ + return object->isAssetPrivate(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetAutoUnload, bool, (const char* assetId), (""), + "Check whether the specified asset Id is auto - unload or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is auto-unload or not.\n") +{ + return object->isAssetAutoUnload(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetLoaded, bool, (const char* assetId), (""), + "Check whether the specified asset Id is loaded or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is loaded or not.\n") +{ + return object->isAssetLoaded(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isDeclaredAsset, bool, (const char* assetId), (""), + "Check whether the specified asset Id is declared or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is declared or not.\n") +{ + return object->isDeclaredAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isReferencedAsset, bool, (const char* assetId), (""), + "Check whether the specified asset Id is referenced or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is referenced or not.\n") +{ + return object->isReferencedAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, renameDeclaredAsset, bool, (const char* assetIdFrom, const char* assetIdTo), ("", ""), + "Rename declared asset Id.\n" + "@param assetIdFrom The selected asset Id to rename from.\n" + "@param assetIdFrom The selected asset Id to rename to.\n" + "@return Whether the rename was successful or not.\n") +{ + return object->renameDeclaredAsset(assetIdFrom, assetIdTo); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, renameReferencedAsset, bool, (const char* assetIdFrom, const char* assetIdTo), ("", ""), + "Rename referenced asset Id. \n" + "@param assetIdFrom The selected asset Id to rename from.\n" + "@param assetIdFrom The selected asset Id to rename to.\n" + "@return Whether the rename was successful or not.\n") +{ + return object->renameReferencedAsset(assetIdFrom, assetIdTo); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, acquireAsset, String, (const char* assetId, bool asPrivate), ("", false), + "Acquire the specified asset Id.\n" + "You must release the asset once you're finish with it using 'releaseAsset'.\n" + "@param assetId The selected asset Id.\n" + "@param asPrivate Whether to acquire the asset Id as a private asset.\n" + "@return The acquired asset or NULL if not acquired.\n") +{ + // Fetch asset Id. + const char* pAssetId = assetId; + + // Reset asset reference. + AssetBase* pAssetBase = NULL; + + // Acquire private asset? + if ( asPrivate ) + { + // Acquire private asset. + pAssetBase = object->acquireAsPrivateAsset( pAssetId ); + } + else + { + // Acquire public asset. + pAssetBase = object->acquireAsset( pAssetId ); + } + + return pAssetBase != NULL ? pAssetBase->getIdString() : StringTable->EmptyString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, releaseAsset, bool, (const char* assetId), (""), + "Release the specified asset Id.\n" + "The asset should have been acquired using 'acquireAsset'.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the asset was released or not.\n") +{ + // Release asset. + return object->releaseAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, purgeAssets, void, (),, + "Purge all assets that are not referenced even if they are set to not auto-unload.\n" + "Assets can be in this state because they are either set to not auto-unload or the asset manager has/is disabling auto-unload.\n" + "@return No return value.\n") +{ + // Purge assets. + object->purgeAssets(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, deleteAsset, bool, (const char* assetId, bool deleteLooseFiles, bool deleteDependencies), ("", false, false), + "Deletes the specified asset Id and optionally its loose files and asset dependencies.\n" + "@param assetId The selected asset Id.\n" + "@param deleteLooseFiles Whether to delete an assets loose files or not.\n" + "@param deleteDependencies Whether to delete assets that depend on this asset or not.\n" + "@return Whether the asset deletion was successful or not. A failure only indicates that the specified asset was not deleted but dependent assets and their loose files may have being deleted.\n") +{ + // Fetch asset Id. + const char* pAssetId = assetId; + + // Delete asset. + return object->deleteAsset( pAssetId, deleteLooseFiles, deleteDependencies ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, refreshAsset, void, (const char* assetId), (""), + "Refresh the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return No return value.\n") +{ + object->refreshAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, refreshAllAssets, void, (bool includeUnloaded), (false), + "Refresh all declared assets.\n" + "@param Whether to include currently unloaded assets in the refresh or not. Optional: Defaults to false.\n" + "Refreshing all assets can be an expensive (time-consuming) operation to perform.\n" + "@return No return value.\n") +{ + // Refresh assets + object->refreshAllAssets(includeUnloaded); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, saveAssetTags, bool, (),, + "Save the currently loaded asset tags manifest.\n" + "@return Whether the save was successful or not.\n") +{ + // Save asset tags. + return object->saveAssetTags(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, restoreAssetTags, bool, (),, + "Restore the currently loaded asset tags manifest from disk (replace anything in memory).\n" + "@return Whether the restore was successful or not.\n") +{ + // Restore asset tags. + return object->restoreAssetTags(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetTags, S32, (), , + "Gets the currently loaded asset tags manifest.\n" + "@return The currently loaded asset tags manifest or zero if not loaded.\n") +{ + // Fetch the asset tags manifest. + AssetTagsManifest* pAssetTagsManifest = object->getAssetTags(); + + return pAssetTagsManifest == NULL ? 0 : pAssetTagsManifest->getId(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAllAssets, S32, (const char* assetQuery, bool ignoreInternal, bool ignorePrivate), ("", true, true), + "Performs an asset query searching for all assets optionally ignoring internal assets.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param ignoreInternal Whether to ignore internal assets or not. Optional: Defaults to true.\n" + "@param ignorePrivate Whether to ignore private assets or not. Optional: Defaults to true.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAllAssets() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAllAssets( pAssetQuery, ignoreInternal, ignorePrivate ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetName, S32, (const char* assetQuery, const char* assetName, bool partialName), ("", "", false), + "Performs an asset query searching for the specified asset name.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetName The asset name to search for. This may be a partial name if 'partialName' is true.\n" + "@param partialName Whether the asset name is to be used as a partial name or not. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetName() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset name. + const char* pAssetName = assetName; + + // Perform query. + return object->findAssetName( pAssetQuery, pAssetName, partialName ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetCategory, S32, (const char* assetQuery, const char* assetCategory, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset category.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetCategory The asset category to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetCategory() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset category. + const char* pAssetCategory = assetCategory; + + // Perform query. + return object->findAssetCategory( pAssetQuery, pAssetCategory, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetAutoUnload, S32, (const char* assetQuery, bool assetAutoUnload, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset auto-unload flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetInternal The asset internal flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetAutoUnload() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetAutoUnload( pAssetQuery, assetAutoUnload, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetInternal, S32, (const char* assetQuery, bool assetInternal, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset internal flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetInternal The asset internal flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetInternal() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetInternal( pAssetQuery, assetInternal, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetPrivate, S32, (const char* assetQuery, bool assetPrivate, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset private flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetPrivate The asset private flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetPrivate() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetInternal( pAssetQuery, assetPrivate, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetType, S32, (const char* assetQuery, const char* assetType, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset type.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetType The asset type to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetType() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset type. + const char* pAssetType = assetType; + + // Perform query. + return object->findAssetType( pAssetQuery, pAssetType, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetDependsOn, S32, (const char* assetQuery, const char* assetId), ("", ""), + "Performs an asset query searching for asset Ids that the specified asset Id depends on.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetId The asset Id to query for any asset Ids that it depends on.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetDependsOn() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset Id. + const char* pAssetId = assetId; + + // Perform query. + return object->findAssetDependsOn( pAssetQuery, pAssetId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetIsDependedOn, S32, (const char* assetQuery, const char* assetId), ("", ""), + "Performs an asset query searching for asset Ids that depend on the specified asset Id.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetId The asset Id to query for any asset Ids that may depend on it.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetIsDependedOn() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset Id. + const char* pAssetId = assetId; + + // Perform query. + return object->findAssetIsDependedOn( pAssetQuery, pAssetId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findInvalidAssetReferences, S32, (const char* assetQuery), (""), + "Performs an asset query searching for invalid asset references.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@return The number of asset Ids found that are invalid or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findInvalidAssetReferences() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findInvalidAssetReferences( pAssetQuery ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findTaggedAssets, S32, (const char* assetQuery, const char* assetTagNames, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset tag name(s).\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetTagNames The asset tag name or names to search for. Multiple names can be specified using comma, space, tab or newline separation. Tags use an OR operation i.e. only assets tagged with ANY of the specified tags will be returned.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findTaggedAssets() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset tag name(s). + const char* pAssetTagNames = assetTagNames; + + // Perform query. + return object->findTaggedAssets( pAssetQuery, pAssetTagNames, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetLooseFile, S32, (const char* assetQuery, const char* assetLooseFile, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified loose file.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetLooseFile The loose-file used by the asset to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetLooseFile() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset loose file. + const char* pAssetLooseFile = assetLooseFile; + + // Perform query. + return object->findAssetLooseFile( pAssetQuery, pAssetLooseFile, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getDeclaredAssetCount, bool, (),, + "Gets the number of declared assets.\n" + "@return Returns the number of declared assets.\n") +{ + return object->getDeclaredAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getReferencedAssetCount, bool, (), , + "Gets the number of asset referenced.\n" + "@return Returns the number of asset references.\n") +{ + return object->getReferencedAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getLoadedInternalAssetCount, bool, (), , + "Gets the number of loaded internal assets.\n" + "@return Returns the number of loaded internal assets.\n") +{ + return object->getLoadedInternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getMaxLoadedInternalAssetCount, bool, (), , + "Gets the maximum number of loaded internal assets.\n" + "@return Returns the maximum number of loaded internal assets.\n") +{ + return object->getMaxLoadedInternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getLoadedExternalAssetCount, bool, (), , + "Gets the number of loaded external assets.\n" + "@return Returns the number of loaded external assets.\n") +{ + return object->getLoadedExternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getMaxLoadedExternalAssetCount, bool, (), , + "Gets the maximum number of loaded external assets.\n" + "@return Returns the maximum number of loaded external assets.\n") +{ + return object->getMaxLoadedExternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, dumpDeclaredAssets, void, (), , + "Dumps a breakdown of all declared assets.\n" + "@return No return value.\n") +{ + return object->dumpDeclaredAssets(); +} diff --git a/Engine/source/assets/assetPtr.h b/Engine/source/assets/assetPtr.h new file mode 100644 index 0000000000..a68a4e2875 --- /dev/null +++ b/Engine/source/assets/assetPtr.h @@ -0,0 +1,184 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_PTR_H_ +#define _ASSET_PTR_H_ + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetPtrCallback +{ + friend class AssetManager; + +protected: + virtual void onAssetRefreshed( AssetPtrBase* pAssetPtrBase ) = 0; +}; + +//----------------------------------------------------------------------------- + +class AssetPtrBase +{ +public: + AssetPtrBase() {}; + virtual ~AssetPtrBase() + { + // Un-register any notifications. + unregisterRefreshNotify(); + }; + + /// Referencing. + virtual void clear( void ) = 0; + virtual void setAssetId( const char* pAssetId ) = 0; + virtual StringTableEntry getAssetId( void ) const = 0; + virtual StringTableEntry getAssetType( void ) const = 0; + virtual bool isAssetId( const char* pAssetId ) const = 0; + + /// Validity. + virtual bool isNull( void ) const = 0; + virtual bool notNull( void ) const = 0; + + /// Notification. + inline void registerRefreshNotify( AssetPtrCallback* pCallback ) + { + // Sanity! + AssertFatal( AssetDatabase.isProperlyAdded(), "AssetPtrBase::registerRefreshNotify() - Cannot register an asset pointer with the asset system." ); + + // register refresh notify. + AssetDatabase.registerAssetPtrRefreshNotify( this, pCallback ); + } + + void unregisterRefreshNotify( void ) + { + // Un-register the refresh notify if the asset system is available. + if ( AssetDatabase.isProperlyAdded() ) + AssetDatabase.unregisterAssetPtrRefreshNotify( this ); + } +}; + +//----------------------------------------------------------------------------- + +template class AssetPtr : public AssetPtrBase +{ +private: + SimObjectPtr mpAsset; + +public: + AssetPtr() {} + AssetPtr( const char* pAssetId ) + { + // Finish if this is an invalid asset Id. + if ( pAssetId == NULL || *pAssetId == 0 ) + return; + + // Acquire asset. + mpAsset = AssetDatabase.acquireAsset( pAssetId ); + } + AssetPtr( const AssetPtr& assetPtr ) + { + // Does the asset pointer have an asset? + if ( assetPtr.notNull() ) + { + // Yes, so acquire the asset. + mpAsset = AssetDatabase.acquireAsset( assetPtr->getAssetId() ); + } + } + virtual ~AssetPtr() + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + } + + /// Assignment. + AssetPtr& operator=( const char* pAssetId ) + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so finish if the asset Id is already assigned. + if ( isAssetId( pAssetId ) ) + return *this; + + // No, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + + // Is the asset Id at least okay to attempt to acquire the asset? + if ( pAssetId != NULL && *pAssetId != 0 ) + { + // Yes, so acquire the asset. + mpAsset = AssetDatabase.acquireAsset( pAssetId ); + } + else + { + // No, so remove reference. + mpAsset = NULL; + } + + // Return Reference. + return *this; + } + + AssetPtr& operator=( const AssetPtr& assetPtr ) + { + // Set asset pointer. + *this = assetPtr->getAssetId(); + + // Return Reference. + return *this; + } + + /// Referencing. + virtual void clear( void ) + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + + // Reset the asset reference. + mpAsset = NULL; + } + + T* operator->( void ) const { return mpAsset; } + T& operator*( void ) const { return *mpAsset; } + operator T*( void ) const { return mpAsset; } + virtual void setAssetId( const char* pAssetId ) { *this = pAssetId; } + virtual StringTableEntry getAssetId( void ) const { return isNull() ? StringTable->EmptyString() : mpAsset->getAssetId(); } + virtual StringTableEntry getAssetType(void) const { return isNull() ? StringTable->EmptyString() : mpAsset->getClassName(); } + virtual bool isAssetId( const char* pAssetId ) const { return pAssetId == NULL ? isNull() : getAssetId() == StringTable->insert(pAssetId); } + + /// Validity. + virtual bool isNull( void ) const { return mpAsset.isNull(); } + virtual bool notNull( void ) const { return !mpAsset.isNull(); } +}; + +#endif // _ASSET_PTR_H_ diff --git a/Engine/source/assets/assetQuery.cpp b/Engine/source/assets/assetQuery.cpp new file mode 100644 index 0000000000..7b66db6fc4 --- /dev/null +++ b/Engine/source/assets/assetQuery.cpp @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#include "assetQuery.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_CUSTOM_H_ +#include "persistence/taml/tamlCustom.h" +#endif + +// Script bindings. +#include "assetQuery_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetQuery ); + +//----------------------------------------------------------------------------- + +void AssetQuery::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addProtectedField("Count", TypeS32, 0, &defaultProtectedSetFn, &getCount, &writeCount, "Gets the number of results in the asset query."); +} + +//----------------------------------------------------------------------------- + +void AssetQuery::onTamlCustomWrite( TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomWrite( customNodes ); + + // Add node. + TamlCustomNode* pCustomNode = customNodes.addNode( ASSETQUERY_RESULTS_NODE_NAME ); + + // Finish if no assets. + if (mAssetList.size() == 0) + return; + + // Iterate asset. + for (Vector::iterator assetItr = mAssetList.begin(); assetItr != mAssetList.end(); ++assetItr) + { + // Add asset node. + TamlCustomNode* pAssetNode = pCustomNode->addNode( ASSETQUERY_ASSETNODE_NAME ); + + // Add field. + pAssetNode->addField( ASSETQUERY_ASSETID_FIELD_NAME, *assetItr ); + } +} + +//----------------------------------------------------------------------------- + +void AssetQuery::onTamlCustomRead( const TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomRead( customNodes ); + + // Find custom node name. + const TamlCustomNode* pResultsNode = customNodes.findNode( ASSETQUERY_RESULTS_NODE_NAME ); + + // Finish if we don't have a results name. + if ( pResultsNode == NULL ) + return; + + // Fetch node name. + StringTableEntry assetNodeName = StringTable->insert( ASSETQUERY_ASSETNODE_NAME ); + + // Fetch children asset nodes. + const TamlCustomNodeVector& assetNodes = pResultsNode->getChildren(); + + // Iterate asset nodes. + for( TamlCustomNodeVector::const_iterator assetNodeItr = assetNodes.begin(); assetNodeItr != assetNodes.end(); ++assetNodeItr ) + { + // Fetch asset node. + const TamlCustomNode* pAssetNode = *assetNodeItr; + + // Skip if an unknown node name. + if ( pAssetNode->getNodeName() != assetNodeName ) + continue; + + // Fetch field. + const TamlCustomField* pField = pAssetNode->findField( ASSETQUERY_ASSETID_FIELD_NAME ); + + // Do we find the field? + if ( pField == NULL ) + { + // No, so warn. + Con::warnf( "AssetQuery::onTamlCustomRead() - Could not find '%s' field.", ASSETQUERY_ASSETID_FIELD_NAME ); + continue; + } + + // Store asset. + mAssetList.push_back(pField->getFieldValue()); + } +} \ No newline at end of file diff --git a/Engine/source/assets/assetQuery.h b/Engine/source/assets/assetQuery.h new file mode 100644 index 0000000000..86a7f744f8 --- /dev/null +++ b/Engine/source/assets/assetQuery.h @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#define _ASSET_QUERY_H_ + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +#ifndef _TAML_CUSTOM_H_ +#include "persistence/taml/tamlCustom.h" +#endif + +//----------------------------------------------------------------------------- + +#define ASSETQUERY_RESULTS_NODE_NAME "Results" +#define ASSETQUERY_ASSETNODE_NAME "Asset" +#define ASSETQUERY_ASSETID_FIELD_NAME "AssetId" + +//----------------------------------------------------------------------------- + +class AssetQuery : public SimObject +{ +private: + typedef SimObject Parent; + +protected: + virtual void onTamlCustomWrite( TamlCustomNodes& customNodes ); + virtual void onTamlCustomRead( const TamlCustomNodes& customNodes ); + + static const char* getCount(void* obj, const char* data) { return Con::getIntArg(static_cast(obj)->mAssetList.size()); } + static bool writeCount( void* obj, StringTableEntry pFieldName ) { return false; } + +public: + AssetQuery() {} + virtual ~AssetQuery() {} + + /// SimObject overrides + static void initPersistFields(); + + Vector mAssetList; + + /// Whether asset is contained or not. + inline bool containsAsset( StringTableEntry assetId ) + { + for (Vector::const_iterator assetItr = mAssetList.begin(); assetItr != mAssetList.end(); ++assetItr) + { + if ( *assetItr == assetId ) + return true; + } + return false; + } + + /// Set assets. + inline void set( const AssetQuery& assetQuery ) { this->mAssetList = assetQuery.mAssetList; } + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetQuery ); +}; + +#endif // _ASSET_QUERY_H_ + diff --git a/Engine/source/assets/assetQuery_ScriptBinding.h b/Engine/source/assets/assetQuery_ScriptBinding.h new file mode 100644 index 0000000000..3324054e11 --- /dev/null +++ b/Engine/source/assets/assetQuery_ScriptBinding.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#include "assets/assetQuery.h" +#endif + +#include "console/engineAPI.h" + +DefineConsoleMethod(AssetQuery, clear, void, (),,"Clears all asset Id results." + "Clears all asset Id results.\n" + "@return () No return value.\n") +{ + object->mAssetList.clear(); +} + +//----------------------------------------------------------------------------- + + +DefineConsoleMethod(AssetQuery, set, bool, (S32 queryId), , + "Sets the asset query to a copy of the specified asset query.\n" + "@param assetQuery The asset query to copy.\n" + "@return Whether the operation succeeded or not.\n") +{ + // Find asset query. + AssetQuery* pAssetQuery; + + if (!Sim::findObject(queryId, pAssetQuery)) + { + // No, so warn. + Con::warnf("AssetQuery::set() - Could not find asset query '%i'.", queryId); + return false; + } + + // Set asset query. + object->set( *pAssetQuery ); + + return true; +} + +//----------------------------------------------------------------------------- + +DefineConsoleMethod(AssetQuery, getCount, S32, (), , + "Gets the count of asset Id results.\n" + "@return (int)The count of asset Id results.\n") +{ + return object->mAssetList.size(); +} + +//----------------------------------------------------------------------------- + +DefineConsoleMethod(AssetQuery, getAsset, const char*, (S32 resultIndex), (-1), + "Gets the asset Id at the specified query result index.\n" + "@param resultIndex The query result index to use.\n" + "@return (assetId)The asset Id at the specified index or NULL if not valid.\n") +{ + // Is index within bounds? + if (resultIndex >= object->mAssetList.size()) + { + // No, so warn. + Con::warnf("AssetQuery::getAsset() - Result index '%s' is out of bounds.", resultIndex); + return StringTable->EmptyString(); + } + + return object->mAssetList[resultIndex]; +} diff --git a/Engine/source/assets/assetTagsManifest.cpp b/Engine/source/assets/assetTagsManifest.cpp new file mode 100644 index 0000000000..04d0ce7f13 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest.cpp @@ -0,0 +1,564 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#include "assetTagsManifest.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script binding. +#include "assetTagsManifest_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetTagsManifest ); + +//----------------------------------------------------------------------------- + +AssetTagsManifest::AssetTagsManifest() +{ +} + +//----------------------------------------------------------------------------- + +AssetTagsManifest::~AssetTagsManifest() +{ + // Iterate tags. + for( typeTagNameHash::iterator tagNameItr = mTagNameDatabase.begin(); tagNameItr != mTagNameDatabase.end(); ++tagNameItr ) + { + // Delete asset tag. + delete tagNameItr->value; + } + + // Clear database. + mTagNameDatabase.clear(); + mAssetToTagDatabase.clear(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::fetchTagName( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + return StringTable->insert( pTagName, true ); +} + +//----------------------------------------------------------------------------- + +AssetTagsManifest::AssetTag* AssetTagsManifest::findAssetTag( const char* pTagName ) +{ + // Fetch tag name. + StringTableEntry tagName = fetchTagName( pTagName ); + + // Finish if the tag already exists. + typeTagNameHash::iterator tagNameItr = mTagNameDatabase.find( tagName ); + + return tagNameItr == mTagNameDatabase.end() ? NULL : tagNameItr->value; +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::renameAssetId( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + while( true ) + { + // Find asset Id. + typeAssetToTagHash::Iterator assetIdItr = mAssetToTagDatabase.find( assetIdFrom ); + + // Finish if no asset Id to rename. + if ( assetIdItr == mAssetToTagDatabase.end() ) + return; + + // Fetch asset tag. + AssetTag* pAssetTag = assetIdItr->value; + + // Untag old asset Id. + untag( assetIdFrom, pAssetTag->mTagName ); + + // Tag new asset Id. + tag( assetIdTo, pAssetTag->mTagName ); + } +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::onTamlCustomWrite( TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomWrite( customNodes ); + + // Finish if no tags. + if ( mTagNameDatabase.size() == 0 ) + return; + + // Add node. + TamlCustomNode* pTagsNode = customNodes.addNode( ASSETTAGS_TAGS_NODE_NAME ); + + // Iterate tags. + for( typeTagNameHash::iterator tagItr = mTagNameDatabase.begin(); tagItr != mTagNameDatabase.end(); ++tagItr ) + { + // Add tag node. + TamlCustomNode* pTagNode = pTagsNode->addNode( ASSETTAGS_TAGS_TYPE_NAME ); + + // Add fields. + pTagNode->addField( ASSETTAGS_TAGS_NAME_FIELD, tagItr->key ); + } + + // Add node. + TamlCustomNode* pAssetTagsNode = customNodes.addNode( ASSETTAGS_ASSETS_NODE_NAME ); + + // Iterate asset locations. + for( typeAssetToTagHash::Iterator assetTagItr = mAssetToTagDatabase.begin(); assetTagItr != mAssetToTagDatabase.end(); ++assetTagItr ) + { + // Add asset tag node. + TamlCustomNode* pAssetNode = pAssetTagsNode->addNode( ASSETTAGS_ASSETS_TYPE_NAME ); + + // Add fields. + pAssetNode->addField( ASSETTAGS_ASSETS_ASSETID_FIELD, assetTagItr->key ); + pAssetNode->addField( ASSETTAGS_ASSETS_TAG_FIELD, assetTagItr->value->mTagName ); + } +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::onTamlCustomRead( const TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomRead( customNodes ); + + // Find tags nodes. + const TamlCustomNode* pTagProperty = customNodes.findNode( ASSETTAGS_TAGS_NODE_NAME ); + + // Finish if we don't have a tags node name. + if ( pTagProperty == NULL ) + return; + + // Fetch node name. + StringTableEntry tagNodeName = StringTable->insert( ASSETTAGS_TAGS_TYPE_NAME ); + + // Fetch children asset nodes. + const TamlCustomNodeVector& tagNodes = pTagProperty->getChildren(); + + // Iterate tag nodes. + for( TamlCustomNodeVector::const_iterator tagNodeItr = tagNodes.begin(); tagNodeItr != tagNodes.end(); ++tagNodeItr ) + { + // Fetch tag node. + const TamlCustomNode* pTagNode = *tagNodeItr; + + // Skip if an unknown node name. + if ( pTagNode->getNodeName() != tagNodeName ) + continue; + + // Fetch "Name" field. + const TamlCustomField* pTagNameField = pTagNode->findField( ASSETTAGS_TAGS_NAME_FIELD ); + + // Do we find the field? + if ( pTagNameField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_TAGS_NAME_FIELD ); + continue; + } + + // Create the tag. + createTag( pTagNameField->getFieldValue() ); + } + + // Find asset tags node. + const TamlCustomNode* pAssetTagProperty = customNodes.findNode( ASSETTAGS_ASSETS_NODE_NAME ); + + // Finish if we don't have an asset tags node name. + if ( pAssetTagProperty == NULL ) + return; + + // Fetch node name. + StringTableEntry assetTagNodeName = StringTable->insert( ASSETTAGS_ASSETS_TYPE_NAME ); + + // Fetch children asset tag nodes. + const TamlCustomNodeVector& assetTagNodes = pAssetTagProperty->getChildren(); + + // Iterate property alias. + for( TamlCustomNodeVector::const_iterator assetTagNodeItr = assetTagNodes.begin(); assetTagNodeItr != assetTagNodes.end(); ++assetTagNodeItr ) + { + // Fetch asset node. + const TamlCustomNode* pAssetTagNode = *assetTagNodeItr; + + // Skip if an unknown node name. + if ( pAssetTagNode->getNodeName() != assetTagNodeName ) + continue; + + // Fetch "AssetId" field. + const TamlCustomField* pAssetIdField = pAssetTagNode->findField( ASSETTAGS_ASSETS_ASSETID_FIELD ); + + // Do we find the field? + if ( pAssetIdField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_ASSETS_ASSETID_FIELD ); + continue; + } + + // Fetch "Tag" field. + const TamlCustomField* pTagField = pAssetTagNode->findField( ASSETTAGS_ASSETS_TAG_FIELD ); + + // Do we find the field? + if ( pTagField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_ASSETS_TAG_FIELD ); + continue; + } + + // Tag the asset. + tag( pAssetIdField->getFieldValue(), pTagField->getFieldValue() ); + } +} + +//----------------------------------------------------------------------------- + +const AssetTagsManifest::AssetTag* AssetTagsManifest::createTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Finish if the tag already exists. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Return asset tag if already created. + if ( pAssetTag != NULL ) + return pAssetTag; + + // Fetch tag name. + StringTableEntry tagName = fetchTagName( pTagName ); + + // Generate the asset tag. + pAssetTag = new AssetTag( tagName ); + + // Add the tag. + mTagNameDatabase.insert( tagName, pAssetTag ); + + return pAssetTag; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::renameTag( const char* pOldTagName, const char* pNewTagName ) +{ + // Sanity! + AssertFatal( pOldTagName != NULL, "Cannot use a NULL tag name." ); + AssertFatal( pNewTagName != NULL, "Cannot use a NULL tag name." ); + + // Find old asset tags. + AssetTag* pOldAssetTag = findAssetTag( pOldTagName ); + + // Did we find the asset tag? + if ( pOldAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Cannot rename tag '%s' as it does not exist.", pOldTagName ); + return false; + } + + // Are the old and new tags the same? + if ( pOldAssetTag->mTagName == fetchTagName( pNewTagName ) ) + { + // Yes, so warn. + Con::warnf( "AssetTagsManifest: Cannot rename tag '%s' to tag '%s' as they are the same.", pOldTagName, pNewTagName ); + return false; + } + + // Create new tag. + AssetTag* pNewAssetTag = const_cast( createTag( pNewTagName ) ); + + // Transfer asset tags. + for ( Vector::iterator assetIdItr = pOldAssetTag->mAssets.begin(); assetIdItr != pOldAssetTag->mAssets.end(); ++assetIdItr ) + { + pNewAssetTag->mAssets.push_back( *assetIdItr ); + } + + // Delete old tag. + deleteTag( pOldTagName ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::deleteTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Did we find the asset tag? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Cannot delete tag '%s' as it does not exist.", pTagName ); + return false; + } + + // Remove the tag. + mTagNameDatabase.erase( pAssetTag->mTagName ); + + // Remove the asset tags. + for ( Vector::iterator assetIdItr = pAssetTag->mAssets.begin(); assetIdItr != pAssetTag->mAssets.end(); ++assetIdItr ) + { + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find( *assetIdItr ); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == *assetIdItr ) + { + // Is this the asset tag? + if ( assetItr->value == pAssetTag ) + { + // Yes, so erase it. + mAssetToTagDatabase.erase( assetItr ); + break; + } + + // Next entry. + assetItr++; + } + } + + // Delete the asset tag. + delete pAssetTag; + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::isTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Check whether tag exists or not. + return findAssetTag( pTagName ) != NULL; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::getTag( const U32 tagIndex ) +{ + // Finish if invalid tag count. + AssertFatal( tagIndex < getTagCount(), "Tag index is out of bounds." ); + + // Fetch tag iterator. + typeTagNameHash::iterator tagItr = mTagNameDatabase.begin(); + + // Find asset tag by index. + // NOTE: Unfortunately this is slow as it's not the natural access method. + for( U32 index = 0; index < tagIndex; ++index, ++tagItr ) {}; + + // Return tag name. + return tagItr->value->mTagName; +} + +//----------------------------------------------------------------------------- + +U32 AssetTagsManifest::getAssetTagCount( const char* pAssetId ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + return (U32)mAssetToTagDatabase.count( assetId ); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::getAssetTag( const char* pAssetId, const U32 tagIndex ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Sanity! + AssertFatal( tagIndex < (U32)mAssetToTagDatabase.count( assetId ), "Asset tag index is out of bounds." ); + + // Find asset tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find( assetId ); + + // Find asset tag by index. + // NOTE: Unfortunately this is slow as it's not the natural access method. + for( U32 index = 0; index < tagIndex; ++index, ++assetItr ) {}; + + // Return tag name. + return assetItr->value->mTagName; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::tag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot tag asset Id '%s' with tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Is the asset Id valid? + if ( !AssetDatabase.isDeclaredAsset( pAssetId ) ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Ignoring asset Id '%s' mapped to tag name '%s' as it is not a declared asset Id.", pAssetId, pTagName ); + return false; + } + + // Fetch asset Id. + typeAssetId assetId = StringTable->insert( pAssetId ); + + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find(assetId); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == assetId ) + { + // Is the asset already tagged appropriately? + if ( assetItr->value == pAssetTag ) + return true; + + // Next entry. + assetItr++; + } + + // No, so add tag. + mAssetToTagDatabase.insertEqual( assetId, pAssetTag ); + + // Add to asset tag. + pAssetTag->mAssets.push_back( assetId ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::untag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot untag asset Id '%s' from tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Fetch asset Id. + typeAssetId assetId = StringTable->insert( pAssetId ); + + // Is the asset tagged? + if ( !pAssetTag->containsAsset( assetId ) ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot untag asset Id '%s' from tag name '%s' as the asset is not tagged with the tag name.", pAssetId, pTagName ); + return false; + } + + // Remove asset from assert tag. + pAssetTag->removeAsset( assetId ); + + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find(assetId); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == assetId ) + { + // Is this the asset tag? + if ( assetItr->value == pAssetTag ) + { + // Yes, so remove it. + mAssetToTagDatabase.erase( assetItr ); + break; + } + + // Next entry. + assetItr++; + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::hasTag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot check if asset Id '%s' has tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Return whether asset Id is tagged. + return pAssetTag->containsAsset( StringTable->insert( pAssetId ) ); +} diff --git a/Engine/source/assets/assetTagsManifest.h b/Engine/source/assets/assetTagsManifest.h new file mode 100644 index 0000000000..82104bcfd2 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest.h @@ -0,0 +1,148 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#define _ASSET_TAGS_MANIFEST_H_ + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tvector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +#define ASSETTAGS_TAGS_NODE_NAME "Tags" +#define ASSETTAGS_TAGS_TYPE_NAME "Tag" +#define ASSETTAGS_TAGS_NAME_FIELD "Name" + +#define ASSETTAGS_ASSETS_NODE_NAME "Assets" +#define ASSETTAGS_ASSETS_TYPE_NAME "Tag" +#define ASSETTAGS_ASSETS_ASSETID_FIELD "AssetId" +#define ASSETTAGS_ASSETS_TAG_FIELD "Name" + +//----------------------------------------------------------------------------- + +class AssetManager; + +//----------------------------------------------------------------------------- + +class AssetTagsManifest : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + typedef StringTableEntry typeAssetId; + typedef StringTableEntry typeAssetTagName; + +public: + /// Asset location. + class AssetTag + { + public: + AssetTag( StringTableEntry tagName ) + { + // Sanity! + AssertFatal( tagName != NULL, "Cannot use a NULL tag name." ); + + // Case sensitive tag name. + mTagName = tagName; + } + + bool containsAsset( typeAssetId assetId ) + { + for ( Vector::iterator assetIdItr = mAssets.begin(); assetIdItr != mAssets.end(); ++assetIdItr ) + { + if ( *assetIdItr == assetId ) + return true; + } + + return false; + } + + void removeAsset( typeAssetId assetId ) + { + for ( Vector::iterator assetIdItr = mAssets.begin(); assetIdItr != mAssets.end(); ++assetIdItr ) + { + if ( *assetIdItr == assetId ) + { + mAssets.erase( assetIdItr ); + return; + } + } + } + + typeAssetTagName mTagName; + Vector mAssets; + }; + + /// Asset/Tag database. + typedef HashMap typeTagNameHash; + typedef HashTable typeAssetToTagHash; + +private: + typeTagNameHash mTagNameDatabase; + typeAssetToTagHash mAssetToTagDatabase; + +private: + StringTableEntry fetchTagName( const char* pTagName ); + AssetTag* findAssetTag( const char* pTagName ); + void renameAssetId( const char* pAssetIdFrom, const char* pAssetIdTo ); + +protected: + virtual void onTamlCustomWrite( TamlCustomNodes& customNodes ); + virtual void onTamlCustomRead( const TamlCustomNodes& customNodes ); + +public: + AssetTagsManifest(); + virtual ~AssetTagsManifest(); + + /// Tagging. + const AssetTag* createTag( const char* pTagName ); + bool renameTag( const char* pOldTagName, const char* pNewTagName ); + bool deleteTag( const char* pTagName ); + bool isTag( const char* pTagName ); + inline U32 getTagCount( void ) const { return (U32)mTagNameDatabase.size(); } + StringTableEntry getTag( const U32 tagIndex ); + U32 getAssetTagCount( const char* pAssetId ); + StringTableEntry getAssetTag( const char* pAssetId, const U32 tagIndex ); + bool tag( const char* pAssetId, const char* pTagName ); + bool untag( const char* pAssetId, const char* pTagName ); + bool hasTag( const char* pAssetId, const char* pTagName ); + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetTagsManifest ); +}; + +#endif // _ASSET_TAGS_MANIFEST_H_ + diff --git a/Engine/source/assets/assetTagsManifest_ScriptBinding.h b/Engine/source/assets/assetTagsManifest_ScriptBinding.h new file mode 100644 index 0000000000..52e8b2c408 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest_ScriptBinding.h @@ -0,0 +1,151 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "assetTagsManifest.h" + +DefineEngineMethod(AssetTagsManifest, createTag, void, (const char* tagName), (""), + "Creates an asset tag.\n" + "@param tagName The tag name to create.\n" + "@return No return value.\n") +{ + object->createTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, renameTag, bool, (const char* oldTagName, const char* newTagName),, + "Renames an existing asset tag.\n" + "@param tagName The tag name to rename.\n" + "@param newTagName The new tag name to assign.\n" + "@return Whether the asset tag was renamed or not.\n") +{ + return object->renameTag(oldTagName, newTagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, deleteTag, bool, (const char* tagName),, + "Deletes an asset tag.\n" + "@param tagName The tag name to delete.\n" + "@return Whether the asset tag was deleted or not.\n") +{ + return object->deleteTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, isTag, bool, (const char* tagName),, + "Checks whether the specified asset tag exists or not.\n" + "@param tagName The tag name to check.\n" + "@return Whether the specified asset tag exists or not.\n") +{ + return object->isTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getTagCount, S32, (),, + "Gets the total asset tag count.\n" + "@return The total asset tag count.\n") +{ + return object->getTagCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getTag, const char*, (S32 tagIndex),, + "Gets the asset tag at the specified index.\n" + "@param tagIndex The asset tag index.This must be 0 to the asset tag count less one.\n" + "@return The asset tag at the specified index or NULL if invalid.\n") +{ + // Is the tag index out-of-bounds? + if ( tagIndex >= object->getTagCount() ) + { + // Yes, so warn. + Con::warnf( "AssetTagsManifest: Asset tag index '%d' is out of bounds. Asset tag count is '%d'", tagIndex, object->getTagCount() ); + return StringTable->EmptyString(); + } + + return object->getTag( tagIndex ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getAssetTagCount, S32, (const char* assetId),, + "Gets the asset tag count on the specified asset Id.\n" + "@param assetId The asset Id to count tags on.\n" + "@return The asset tag count on the specified asset Id.\n") +{ + return object->getAssetTagCount(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getAssetTag, const char*, (const char* assetId, S32 tagIndex), , + "Gets the asset tag on the specified asset Id at the specified index.\n" + "@param assetId The asset Id to count tags on.\n" + "@param tagIndex The asset tag index.This must be 0 to the asset tag count less one.\n" + "@return The asset tag on the specified asset Id at the specified index or NULL if invalid.\n") +{ + // Is the tag index out-of-bounds? + if (tagIndex >= object->getAssetTagCount(assetId)) + { + // Yes, so warn. + Con::warnf("AssetTagsManifest: Asset tag index '%d' is out of bounds. Asset tag count is '%d'", tagIndex, object->getAssetTagCount(assetId)); + return StringTable->EmptyString(); + } + + return object->getAssetTag(assetId, tagIndex); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, tag, bool, (const char* assetId, const char* tagName),, + "Tags the asset Id with the specified asset tag.\n" + "@param assetId The asset Id to tag.\n" + "@param tagName The tag name to assign.\n" + "@return Whether the tag operation was successful or not.\n") +{ + return object->tag(assetId, tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, untag, bool, (const char* assetId, const char* tagName),, + "Un-tags the asset Id from the specified asset tag.\n" + "@param assetId The asset Id to un - tag.\n" + "@param tagName The tag name to un - assign.\n" + "@return Whether the un - tag operation was successful or not.\n") +{ + return object->untag(assetId, tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, hasTag, bool, (const char* assetId, const char* tagName), , + "Checks whether the asset Id is tagged with the specified asset tag.\n" + "@param assetId The asset Id to check.\n" + "@param tagName The tag name to check.\n" + "@return Whether the asset Id is tagged with the specified asset tag or not.\n") +{ + return object->hasTag(assetId, tagName); +} diff --git a/Engine/source/assets/core.h b/Engine/source/assets/core.h new file mode 100644 index 0000000000..a9803396bc --- /dev/null +++ b/Engine/source/assets/core.h @@ -0,0 +1,12 @@ +#ifndef _ASSET_CORE_H_ +#define _ASSET_CORE_H_ + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#endif \ No newline at end of file diff --git a/Engine/source/assets/declaredAssets.cpp b/Engine/source/assets/declaredAssets.cpp new file mode 100644 index 0000000000..d888093a6b --- /dev/null +++ b/Engine/source/assets/declaredAssets.cpp @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DECLARED_ASSETS_H_ +#include "assets/declaredAssets.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( DeclaredAssets ); + +//----------------------------------------------------------------------------- + +void DeclaredAssets::initPersistFields() +{ + // Call Parent. + Parent::initPersistFields(); + + addField("Path", TypeString, Offset(mPath, DeclaredAssets), "" ); + addField("Extension", TypeString, Offset(mExtension, DeclaredAssets), "" ); + addField("Recurse", TypeBool, Offset(mRecurse, DeclaredAssets), "" ); +} diff --git a/Engine/source/assets/declaredAssets.h b/Engine/source/assets/declaredAssets.h new file mode 100644 index 0000000000..44d6ea2a22 --- /dev/null +++ b/Engine/source/assets/declaredAssets.h @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DECLARED_ASSETS_H_ +#define _DECLARED_ASSETS_H_ + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class DeclaredAssets : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + + StringTableEntry mPath; + StringTableEntry mExtension; + bool mRecurse; + +public: + DeclaredAssets() : + mPath( StringTable->EmptyString() ), + mExtension(StringTable->EmptyString()), + mRecurse( false ) + {} + virtual ~DeclaredAssets() {} + + static void initPersistFields(); + + inline void setPath( const char* pPath ) { mPath = StringTable->insert( pPath ); } + inline StringTableEntry getPath( void ) const { return mPath; } + inline void setExtension( const char* pPath ) { mExtension = StringTable->insert( pPath ); } + inline StringTableEntry getExtension( void ) const { return mExtension; } + inline void setRecurse( const bool recurse ) { mRecurse = recurse; } + inline bool getRecurse( void ) const { return mRecurse; } + + /// Declare Console Object. + DECLARE_CONOBJECT( DeclaredAssets ); +}; + +#endif // _DECLARED_ASSETS_H_ + diff --git a/Engine/source/assets/referencedAssets.cpp b/Engine/source/assets/referencedAssets.cpp new file mode 100644 index 0000000000..f5807de2be --- /dev/null +++ b/Engine/source/assets/referencedAssets.cpp @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _REFERENCED_ASSETS_H_ +#include "assets/referencedAssets.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ReferencedAssets ); + +//----------------------------------------------------------------------------- + +void ReferencedAssets::initPersistFields() +{ + // Call Parent. + Parent::initPersistFields(); + + addField("Path", TypeString, Offset(mPath, ReferencedAssets), "" ); + addField("Extension", TypeString, Offset(mExtension, ReferencedAssets), "" ); + addField("Recurse", TypeBool, Offset(mRecurse, ReferencedAssets), "" ); +} \ No newline at end of file diff --git a/Engine/source/assets/referencedAssets.h b/Engine/source/assets/referencedAssets.h new file mode 100644 index 0000000000..34053bc32d --- /dev/null +++ b/Engine/source/assets/referencedAssets.h @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _REFERENCED_ASSETS_H_ +#define _REFERENCED_ASSETS_H_ + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class ReferencedAssets : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + + StringTableEntry mPath; + StringTableEntry mExtension; + bool mRecurse; + +public: + ReferencedAssets() : + mPath( StringTable->EmptyString() ), + mExtension(StringTable->EmptyString()), + mRecurse( false ) + {} + virtual ~ReferencedAssets() {} + + static void initPersistFields(); + + inline void setPath( const char* pPath ) { mPath = StringTable->insert( pPath ); } + inline StringTableEntry getPath( void ) const { return mPath; } + inline void setExtension( const char* pPath ) { mExtension = StringTable->insert( pPath ); } + inline StringTableEntry getExtension( void ) const { return mExtension; } + inline void setRecurse( const bool recurse ) { mRecurse = recurse; } + inline bool getRecurse( void ) const { return mRecurse; } + + /// Declare Console Object. + DECLARE_CONOBJECT( ReferencedAssets ); +}; + +#endif // _REFERENCED_ASSETS_H_ + diff --git a/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h b/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h new file mode 100644 index 0000000000..7a022d1d2d --- /dev/null +++ b/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h @@ -0,0 +1,132 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ +#define _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetDeclaredUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mAssetIdFrom; + StringTableEntry mAssetIdTo; + StringTableEntry mAssetNameFrom; + StringTableEntry mAssetNameTo; + +public: + TamlAssetDeclaredUpdateVisitor() {} + virtual ~TamlAssetDeclaredUpdateVisitor() {} + + void setAssetIdFrom( const char* pAssetIdFrom ) + { + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." ); + + // Reset asset Id. + mAssetIdFrom = StringTable->EmptyString(); + mAssetNameFrom = StringTable->EmptyString(); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( pAssetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "TamlAssetDeclaredUpdateVisitor::setAssetIdFrom() - Cannot use asset Id '%s' as it is not the correct format.", pAssetIdFrom ); + return; + } + + // Set asset Id. + mAssetIdFrom = StringTable->insert( pAssetIdFrom ); + mAssetNameFrom = StringTable->insert( StringUnit::getUnit( pAssetIdFrom, 1, ASSET_SCOPE_TOKEN ) ); + } + StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; } + + void setAssetIdTo( const char* pAssetIdTo ) + { + // Sanity! + AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." ); + + // Reset asset Id. + mAssetIdTo = StringTable->EmptyString(); + mAssetNameTo = StringTable->EmptyString(); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( pAssetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "TamlAssetDeclaredUpdateVisitor::setAssetIdTo() - Cannot use asset Id '%s' as it is not the correct format.", pAssetIdTo ); + return; + } + + // Set asset Id. + mAssetIdTo = StringTable->insert( pAssetIdTo ); + mAssetNameTo = StringTable->insert( StringUnit::getUnit( pAssetIdTo, 1, ASSET_SCOPE_TOKEN ) ); + } + const char* getAssetIdTo( void ) const { return mAssetIdTo; } + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return true; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetDeclaredUpdateVisitor_Visit); + + // Finish if not the asset name field. + if ( propertyState.getPropertyName() != assetNameField ) + return true; + + // Is this the asset Id we're looking for? + if ( dStricmp( propertyState.getPropertyValue(), mAssetNameFrom ) != 0 ) + { + // No, so warn. + Con::warnf("Cannot rename asset Name '%s' to asset Name '%s' as the declared asset Name was %s", + mAssetNameFrom, mAssetNameTo, propertyState.getPropertyValue() ); + + // Stop processing! + return false; + } + + // Assign new value. + propertyState.updatePropertyValue( mAssetNameTo ); + + // Stop processing! + return false; + } +}; + +#endif // _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetDeclaredVisitor.h b/Engine/source/assets/tamlAssetDeclaredVisitor.h new file mode 100644 index 0000000000..fd5b643f95 --- /dev/null +++ b/Engine/source/assets/tamlAssetDeclaredVisitor.h @@ -0,0 +1,189 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_DECLARED_VISITOR_H_ +#define _TAML_ASSET_DECLARED_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetDeclaredVisitor : public TamlVisitor +{ +public: + typedef StringTableEntry typeAssetId; + typedef Vector typeAssetIdVector; + typedef Vector typeLooseFileVector; + +private: + AssetDefinition mAssetDefinition; + typeAssetIdVector mAssetDependencies; + typeLooseFileVector mAssetLooseFiles; + +public: + TamlAssetDeclaredVisitor() { mAssetDefinition.reset(); } + virtual ~TamlAssetDeclaredVisitor() {} + + + inline AssetDefinition& getAssetDefinition( void ) { return mAssetDefinition; } + inline typeAssetIdVector& getAssetDependencies( void ) { return mAssetDependencies; } + inline typeLooseFileVector& getAssetLooseFiles( void ) { return mAssetLooseFiles; } + + void clear( void ) { mAssetDefinition.reset(); mAssetDependencies.clear(); mAssetLooseFiles.clear(); } + + virtual bool wantsPropertyChanges( void ) { return false; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetDeclaredVisitor_Visit); + + // Fetch property name and value. + StringTableEntry propertyName = propertyState.getPropertyName(); + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Is this the root object? + if ( propertyState.isRootObject() ) + { + // Yes, so is the asset type set yet? + if ( mAssetDefinition.mAssetType == StringTable->EmptyString() ) + { + // No, set set asset type and base file-path. + mAssetDefinition.mAssetType = propertyState.getObjectName(); + mAssetDefinition.mAssetBaseFilePath = parser.getParsingFilename(); + } + + // Asset name? + if ( propertyName == assetNameField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetName = StringTable->insert( pPropertyValue ); + return true; + } + // Asset description? + else if ( propertyName == assetDescriptionField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetDescription = StringTable->insert( pPropertyValue ); + return true; + } + // Asset description? + else if ( propertyName == assetCategoryField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetCategory = StringTable->insert( pPropertyValue ); + return true; + } + // Asset auto-unload? + else if ( propertyName == assetAutoUnloadField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetAutoUnload = dAtob( pPropertyValue ); + return true; + } + // Asset internal? + else if ( propertyName == assetInternalField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetInternal = dAtob( pPropertyValue ); + return true; + } + } + + // Fetch property word count. + const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if there's not two words. + if ( propertyWordCount != 2 ) + return true; + + // Fetch the asset signature. + StringTableEntry assetSignature = StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) ); + + // Is this an asset Id signature? + if ( assetSignature == assetLooseIdSignature ) + { + // Yes, so get asset Id. + typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) ); + + // Finish if the dependency is itself! + if ( mAssetDefinition.mAssetId == assetId ) + return true; + + // Iterate existing dependencies. + for( typeAssetIdVector::iterator dependencyItr = mAssetDependencies.begin(); dependencyItr != mAssetDependencies.end(); ++dependencyItr ) + { + // Finish if asset Id is already a dependency. + if ( *dependencyItr == assetId ) + return true; + } + + // Insert asset reference. + mAssetDependencies.push_back( assetId ); + } + // Is this a loose-file signature? + else if ( assetSignature == assetLooseFileSignature ) + { + // Yes, so get loose-file reference. + const char* pAssetLooseFile = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ); + + // Fetch asset path only. + char assetBasePathBuffer[1024]; + dSprintf( assetBasePathBuffer, sizeof(assetBasePathBuffer), "%s", mAssetDefinition.mAssetBaseFilePath ); + char* pFinalSlash = dStrrchr( assetBasePathBuffer, '/' ); + if ( pFinalSlash != NULL ) *pFinalSlash = 0; + + // Expand the path in the usual way. + char assetFilePathBuffer[1024]; + Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetLooseFile, assetBasePathBuffer ); + + // Insert asset loose-file. + mAssetLooseFiles.push_back( StringTable->insert( assetFilePathBuffer ) ); + } + + return true; + } +}; + +#endif // _TAML_ASSET_DECLARED_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h b/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h new file mode 100644 index 0000000000..3bf3623a4b --- /dev/null +++ b/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ +#define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _STRINGTABLE_H_ +#include "string/stringTable.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetReferencedUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mAssetIdFrom; + StringTableEntry mAssetIdTo; + +public: + TamlAssetReferencedUpdateVisitor() {} + virtual ~TamlAssetReferencedUpdateVisitor() {} + + void setAssetIdFrom( const char* pAssetIdFrom ) + { + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." ); + + mAssetIdFrom = StringTable->insert( pAssetIdFrom ); + } + StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; } + + void setAssetIdTo( const char* pAssetIdTo ) + { + // Sanity! + AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." ); + + mAssetIdTo = StringTable->insert( pAssetIdTo ); + } + const char* getAssetIdTo( void ) const { return mAssetIdTo; } + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetReferencedUpdateVisitor_Visit); + + // Fetch the property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch property value word count. + const U32 valueWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if not two words. + if ( valueWordCount != 2 ) + return true; + + // Finish if this is not an asset signature. + if ( dStricmp( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN), assetLooseIdSignature ) != 0 ) + return true; + + // Get the asset value. + const char* pAssetValue = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if not the asset Id we're looking for. + if ( dStricmp( pAssetValue, mAssetIdFrom ) != 0 ) + return true; + + // Is the target asset empty? + if ( mAssetIdTo == StringTable->EmptyString() ) + { + // Yes, so update the property as empty. + propertyState.updatePropertyValue(StringTable->EmptyString()); + return true; + } + + // Format asset. + char assetBuffer[1024]; + dSprintf( assetBuffer, sizeof(assetBuffer), "%s%s%s", assetLooseIdSignature, ASSET_ASSIGNMENT_TOKEN, mAssetIdTo ); + + // Assign new value. + propertyState.updatePropertyValue( assetBuffer ); + + return true; + } +}; + +#endif // _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetReferencedVisitor.h b/Engine/source/assets/tamlAssetReferencedVisitor.h new file mode 100644 index 0000000000..c744a880c7 --- /dev/null +++ b/Engine/source/assets/tamlAssetReferencedVisitor.h @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_REFERENCED_VISITOR_H_ +#define _TAML_ASSET_REFERENCED_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetReferencedVisitor : public TamlVisitor +{ +public: + typedef StringTableEntry typeAssetId; + typedef HashMap typeAssetReferencedHash; + +private: + typeAssetReferencedHash mAssetReferenced; + +public: + TamlAssetReferencedVisitor() {} + virtual ~TamlAssetReferencedVisitor() {} + + const typeAssetReferencedHash& getAssetReferencedMap( void ) const { return mAssetReferenced; } + + void clear( void ) { mAssetReferenced.clear(); } + + virtual bool wantsPropertyChanges( void ) { return false; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetReferencedVisitor_Visit); + + // Fetch property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch property word count. + const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if there's not two words. + if ( propertyWordCount != 2 ) + return true; + + // Finish if the first word is not an asset signature. + if ( StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) ) != assetLooseIdSignature ) + return true; + + // Get asset Id. + typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) ); + + // Finish if we already have this asset Id. + if ( mAssetReferenced.contains( assetId ) ) + return true; + + // Insert asset reference. + mAssetReferenced.insert( assetId, StringTable->EmptyString() ); + + return true; + } +}; + +#endif // _TAML_ASSET_REFERENCED_VISITOR_H_ diff --git a/Engine/source/component/componentInterface.cpp b/Engine/source/component/componentInterface.cpp deleted file mode 100644 index e489ca0f2c..0000000000 --- a/Engine/source/component/componentInterface.cpp +++ /dev/null @@ -1,82 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "component/simComponent.h" -#include "component/componentInterface.h" -#include "core/strings/findMatch.h" -#include "core/stringTable.h" - -bool ComponentInterfaceCache::add( const char *type, const char *name, const SimComponent *owner, ComponentInterface *cinterface ) -{ - if( ( mInterfaceList.size() == 0 ) || ( enumerate( NULL, type, name, owner ) == 0 ) ) - { - mInterfaceList.increment(); - // CodeReview [tom, 3/9/2007] Seems silly to keep calling last(), why not cache the var? Yes, I know I am pedantic. - mInterfaceList.last().type = ( type == NULL ? NULL : StringTable->insert( type ) ); - mInterfaceList.last().name = ( name == NULL ? NULL : StringTable->insert( name ) ); - mInterfaceList.last().owner = owner; - mInterfaceList.last().iface = cinterface; - - return true; - } - - return false; -} - -//------------------------------------------------------------------------------ - -void ComponentInterfaceCache::clear() -{ - mInterfaceList.clear(); -} - -//------------------------------------------------------------------------------ - -U32 ComponentInterfaceCache::enumerate( ComponentInterfaceList *list, const char *type /* = NULL */, - const char *name /* = NULL */, const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) const -{ - U32 numMatches = 0; - - for( _InterfaceEntryItr i = mInterfaceList.begin(); i != mInterfaceList.end(); i++ ) - { - // Early out if limiting results by component owner - if( owner != NULL && ( - ( (*i).owner == owner && notOwner ) || - ( (*i).owner != owner && !notOwner ) ) ) - continue; - - // Match the type, short circuit if type == NULL - if( type == NULL || FindMatch::isMatch( type, (*i).type ) ) - { - // Match the name - if( name == NULL || FindMatch::isMatch( name, (*i).name ) ) - { - numMatches++; - - if( list != NULL ) - list->push_back( (*i).iface ); - } - } - } - - return numMatches; -} \ No newline at end of file diff --git a/Engine/source/component/componentInterface.h b/Engine/source/component/componentInterface.h deleted file mode 100644 index 311862a1cd..0000000000 --- a/Engine/source/component/componentInterface.h +++ /dev/null @@ -1,234 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _COMPONENTINTERFACE_H_ -#define _COMPONENTINTERFACE_H_ - -#ifndef _TVECTOR_H_ -#include "core/util/tVector.h" -#endif - -#ifndef _SIMOBJECT_H_ -#include "console/simObject.h" -#endif - -#include "core/util/safeDelete.h" - - -class SimComponent; - - -// CodeReview [patw, 2, 13, 2007] The issue I have not addressed in this class is -// interface locking. I think that we want to do this, for sure, but I also want -// to keep it as light-weight as possible. For the most part, there should only -// ever be one thing doing something with a component at one time, but I can see -// many situations where this wouldn't be the case. When we decide to address -// the issues of locking, I believe it should be done here, at the ComponentInterface -// level. I would like lock functionality to be as centralized as possible, and -// so this is the place for it. The functionality is critical for safe useage of -// the ComponentProperty class, so implementation here would also be ideal. - -// CodeReview [patw, 2, 14, 2007] This really should be a ref-counted object -class ComponentInterface -{ - friend class SimComponent; -private: - SimObjectPtr mOwner; ///< SimComponent will directly modify this value - -public: - /// Default constructor - ComponentInterface() : mOwner(NULL) {}; - - /// Destructor - virtual ~ComponentInterface() - { - mOwner = NULL; - } - - /// This will return true if the interface is valid - virtual bool isValid() const - { - return mOwner != NULL; - } - - /// Get the owner of this interface - SimComponent *getOwner() { return mOwner; } - const SimComponent *getOwner() const { return mOwner; } -}; - -typedef VectorPtr ComponentInterfaceList; -typedef VectorPtr::iterator ComponentInterfaceListIterator; - -// These two asserts I found myself wanting a lot when doing interface methods -#ifdef TORQUE_ENABLE_ASSERTS -# define VALID_INTERFACE_ASSERT(OwningClassType) \ - AssertFatal( isValid(), "Interface validity check failed." ); \ - AssertFatal( dynamic_cast( getOwner() ) != NULL, avar( "Owner is not an instance of %s", #OwningClassType ) ) -#else -# define VALID_INTERFACE_ASSERT(OwningClassType) -#endif - -/// This class is designed to wrap an existing class or type easily to allow -/// a SimComponent to expose a property with custom processing code in an efficient -/// and safe way. Specialized templates could be written which include validation -/// on sets, and processing on gets. -/// -/// This class has a lot of "blow your leg off" potential, if you have bad aim. -/// I think that a lot of very intuitive functionality can be gained from using -/// this properly, however when implementing a specialized template, be mindful -/// of what you are doing, and - -// CodeReview [patw, 2, 13, 2007] I am very interested in making this as thin as -// possible. I really like the possibilities that it exposes as far as exposing -// "properties" to other components. I want it to be performant, however, so -// if anyone has notes on this, mark up the source, e-mail me, whatever. -template -class ComponentProperty : public ComponentInterface -{ - typedef ComponentInterface Parent; - -protected: - T *mValuePtr; - - // ComponentInterface Overrides -public: - - // Override this to add a check for valid memory. - virtual bool isValid() const - { - return ( mValuePtr != NULL ) && Parent::isValid(); - } - - // Operator overloads -public: - /// Dereferencing a value interface will allow get to do any processing and - /// return the reference to that - const T &operator*() - { - return get(); - } - - /// Assignment operator will invoke set. - const T &operator=( const T &lval ) - { - return set( lval ); - } - - // Constructors/Destructors, specialize these if needed -public: - /// Default Constructor. - ComponentProperty() : mValuePtr( NULL ) - { - mValuePtr = new T; - } - - /// Copy constructor - ComponentProperty( const T © ) - { - ComponentProperty(); - - // CodeReview [patw, 2, 13, 2007] So, the reasoning here is that I want to - // use the functionality that a specialized template implements in the set - // method. See the notes on the set method implementation. - set( copy ); - } - - /// Destructor, destroy memory - virtual ~ComponentProperty() - { - SAFE_DELETE( mValuePtr ); - } - - // This is the ComponentProperty interface that specializations of the class - // will be interested in. -public: - - /// Get the value associated with this interface. Processing code can be done - /// here for specialized implementations. - virtual const T &get() // 'const' is intentionally not used as a modifier here - { - return *mValuePtr; - } - - /// Set the value associated with this interface. Validation/processing code - /// can be done here. The copy-constructor uses the set method to do it's copy - /// so be mindful of that, or specialize the copy-constructor. - virtual const T &set( const T &t ) - { - // CodeReview [patw, 2, 13, 2007] So I am using the = operator here. Do you - // guys think that this should be the default behavior? I am trying to keep - // everything as object friendly as possible, so I figured I'd use this. - *mValuePtr = t; - return *mValuePtr; - } -}; - -/// This class is just designed to isolate the functionality of querying for, and -/// managing interfaces. -class ComponentInterfaceCache -{ - // CodeReview [patw, 2, 14, 2007] When we move this whole system to Juggernaught - // we may want to consider making safe pointers for ComponentInterfaces. Not - // sure why I put this note here. -private: - struct _InterfaceEntry - { - ComponentInterface *iface; - StringTableEntry type; - StringTableEntry name; - const SimComponent *owner; - }; - - Vector<_InterfaceEntry> mInterfaceList; - typedef Vector<_InterfaceEntry>::const_iterator _InterfaceEntryItr; - -public: - /// Add an interface to the cache. This function will return true if the interface - /// is added successfully. An interface will not be added successfully if an entry - /// in the list with the same values for 'type' and 'name' is present in the list. - /// - /// @param type Type of the interface being added. If NULL is passed, it will match any type string queried. - /// @param name Name of interface being added. If NULL is passed, it will match any name string queried. - /// @param owner The owner of the ComponentInterface being cached - /// @param cinterface The ComponentInterface being cached - virtual bool add( const char *type, const char *name, const SimComponent *owner, ComponentInterface *cinterface ); - - /// Clear the interface cache. This does not perform any operations on the contents - /// of the list. - virtual void clear(); - - /// Query the list for all of the interfaces it stores references to that match - /// the 'type' and 'name' parameters. The results of the query will be appended - /// to the list specified. Pattern matching is done using core/findMatch.h; for - /// more information on matching, see that code/header pair. Passing NULL for - /// one of these fields will match all values for that field. The return value - /// for the method will be the number of interfaces which match the query. - /// - /// @param list The list that this method will append search results on to. It is possible to pass NULL here and just receive the return value. - /// @param type An expression which the 'type' field on an added object must match to be included in results - /// @param name An expression which the 'name' field on an added object must match to be included in results - /// @param owner Limit results to components owned/not-owned by this SimComponent (see next param) - /// @param notOwner If set to true, this will enumerate only interfaces NOT owned by 'owner' - virtual U32 enumerate( ComponentInterfaceList *list, const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ) const; -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/dynamicConsoleMethodComponent.cpp b/Engine/source/component/dynamicConsoleMethodComponent.cpp deleted file mode 100644 index 75a88930ce..0000000000 --- a/Engine/source/component/dynamicConsoleMethodComponent.cpp +++ /dev/null @@ -1,209 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "component/dynamicConsoleMethodComponent.h" -#include "console/stringStack.h" - -extern StringStack STR; -extern ConsoleValueStack CSTK; - -IMPLEMENT_CO_NETOBJECT_V1(DynamicConsoleMethodComponent); - -ConsoleDocClass( DynamicConsoleMethodComponent, - "@brief Console object used for calling methods defined in script, from within other classes.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -//----------------------------------------------------------- -// Function name: SimComponent::handlesConsoleMethod -// Summary: -//----------------------------------------------------------- -bool DynamicConsoleMethodComponent::handlesConsoleMethod( const char *fname, S32 *routingId ) -{ - // CodeReview: Host object is now given priority over components for method - // redirection. [6/23/2007 Pat] - - // On this object? - if( isMethod( fname ) ) - { - *routingId = -1; // -1 denotes method on object -#ifdef TORQUE_DEBUG - // Inject Method. - injectMethodCall( fname ); -#endif - return true; - } - - // on this objects components? - S32 nI = 0; - VectorPtr &componentList = lockComponentList(); - for( SimComponentIterator nItr = componentList.begin(); nItr != componentList.end(); nItr++, nI++ ) - { - SimObject *pComponent = dynamic_cast(*nItr); - if( pComponent != NULL && pComponent->isMethod( fname ) ) - { - *routingId = -2; // -2 denotes method on component - unlockComponentList(); - -#ifdef TORQUE_DEBUG - // Inject Method. - injectMethodCall( fname ); -#endif - return true; - } - } - unlockComponentList(); - - return false; -} - -const char *DynamicConsoleMethodComponent::callMethod( S32 argc, const char* methodName, ... ) -{ - const char *argv[128]; - methodName = StringTable->insert( methodName ); - - argc++; - - va_list args; - va_start(args, methodName); - for(S32 i = 0; i < argc; i++) - argv[i+2] = va_arg(args, const char *); - va_end(args); - - // FIXME: the following seems a little excessive. I wonder why it's needed? - argv[0] = methodName; - argv[1] = methodName; - argv[2] = methodName; - - StringStackConsoleWrapper argsw(argc, argv); - - return callMethodArgList( argsw.count() , argsw ); -} - -#ifdef TORQUE_DEBUG -/// Inject Method Call. -void DynamicConsoleMethodComponent::injectMethodCall( const char* method ) -{ - // Get Call Method. - StringTableEntry callMethod = StringTable->insert( method ); - - // Find Call Method Metric. - callMethodMetricType::Iterator itr = mCallMethodMetrics.find( callMethod ); - - // Did we find the method? - if ( itr == mCallMethodMetrics.end() ) - { - // No, so set the call count to initially be 1. - itr = mCallMethodMetrics.insert( callMethod, 1 ); - } - else - { - // Increment Call Count. - itr->value++; - } -} -#endif - -const char* DynamicConsoleMethodComponent::callMethodArgList( U32 argc, ConsoleValueRef argv[], bool callThis /* = true */ ) -{ -#ifdef TORQUE_DEBUG - injectMethodCall( argv[0] ); -#endif - - return _callMethod( argc, argv, callThis ); -} - -// Call all components that implement methodName giving them a chance to operate -// Components are called in reverse order of addition -const char *DynamicConsoleMethodComponent::_callMethod( U32 argc, ConsoleValueRef argv[], bool callThis /* = true */ ) -{ - // Set Owner - SimObject *pThis = dynamic_cast( this ); - AssertFatal( pThis, "DynamicConsoleMethodComponent::callMethod : this should always exist!" ); - - const char *cbName = StringTable->insert(argv[0]); - - if( getComponentCount() > 0 ) - { - lockComponentList(); - for( S32 i = getComponentCount() - 1; i >= 0; i-- ) - //for( SimComponentIterator nItr = componentList.end(); nItr != componentList.begin(); nItr-- ) - { - argv[0] = cbName; - - SimComponent *pComponent = dynamic_cast( getComponent( i ) ); - AssertFatal( pComponent, "DynamicConsoleMethodComponent::callMethod - NULL component in list!" ); - - DynamicConsoleMethodComponent *pThisComponent = dynamic_cast( pComponent ); - AssertFatal( pThisComponent, "DynamicConsoleMethodComponent::callMethod - Non DynamicConsoleMethodComponent component attempting to callback!"); - - // Prevent stack corruption - STR.pushFrame(); - CSTK.pushFrame(); - // -- - - // Only call on first depth components - // Should isMethod check these calls? [11/22/2006 justind] - if(pComponent->isEnabled()) - Con::execute( pThisComponent, argc, argv ); - - // Prevent stack corruption - STR.popFrame(); - CSTK.popFrame(); - // -- - - // Bail if this was the first element - //if( nItr == componentList.begin() ) - // break; - } - unlockComponentList(); - } - - // Prevent stack corruption - STR.pushFrame(); - CSTK.pushFrame(); - // -- - - // Set Owner Field - const char* result = ""; - if(callThis) - result = Con::execute( pThis, argc, argv, true ); // true - exec method onThisOnly, not on DCMCs - - // Prevent stack corruption - STR.popFrame(); - CSTK.popFrame(); - // -- - return result; -} - -ConsoleMethod( DynamicConsoleMethodComponent, callMethod, void, 3, 64 , "(methodName, argi) Calls script defined method\n" - "@param methodName The method's name as a string\n" - "@param argi Any arguments to pass to the method\n" - "@return No return value" - "@note %obj.callMethod( %methodName, %arg1, %arg2, ... );\n") - -{ - object->callMethodArgList( argc - 1, argv + 2 ); -} - -////////////////////////////////////////////////////////////////////////// - diff --git a/Engine/source/component/dynamicConsoleMethodComponent.h b/Engine/source/component/dynamicConsoleMethodComponent.h deleted file mode 100644 index 32e594cd6b..0000000000 --- a/Engine/source/component/dynamicConsoleMethodComponent.h +++ /dev/null @@ -1,89 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _DYNAMIC_CONSOLEMETHOD_COMPONENT_H_ -#define _DYNAMIC_CONSOLEMETHOD_COMPONENT_H_ - -#ifndef _SIMCOMPONENT_H_ -#include "component/simComponent.h" -#endif - -#ifndef _CONSOLEINTERNAL_H_ -#include "console/consoleInternal.h" -#endif - -#ifndef _ICALLMETHOD_H_ -#include "console/ICallMethod.h" -#endif - -#ifdef TORQUE_DEBUG -#ifndef _TDICTIONARY_H_ -#include "core/util/tDictionary.h" -#endif -#endif - -//----------------------------------------------------------------------------- - -class DynamicConsoleMethodComponent : public SimComponent, public ICallMethod -{ -#ifdef TORQUE_DEBUG -public: - typedef Map callMethodMetricType; -#endif - -private: - typedef SimComponent Parent; - -#ifdef TORQUE_DEBUG - // Call Method Debug Stat. - callMethodMetricType mCallMethodMetrics; -#endif - -protected: - /// Internal callMethod : Actually does component notification and script method execution - /// @attention This method does some magic to the argc argv to make Con::execute act properly - /// as such it's internal and should not be exposed or used except by this class - virtual const char* _callMethod( U32 argc, ConsoleValueRef argv[], bool callThis = true ); - -public: - -#ifdef TORQUE_DEBUG - /// Call Method Metrics. - const callMethodMetricType& getCallMethodMetrics( void ) const { return mCallMethodMetrics; }; - - /// Inject Method Call. - void injectMethodCall( const char* method ); -#endif - - /// Call Method - virtual const char* callMethodArgList( U32 argc, ConsoleValueRef argv[], bool callThis = true ); - - /// Call Method format string - const char* callMethod( S32 argc, const char* methodName, ... ); - - // query for console method data - virtual bool handlesConsoleMethod(const char * fname, S32 * routingId); - - DECLARE_CONOBJECT(DynamicConsoleMethodComponent); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/moreAdvancedComponent.cpp b/Engine/source/component/moreAdvancedComponent.cpp deleted file mode 100644 index 7ddfac688f..0000000000 --- a/Engine/source/component/moreAdvancedComponent.cpp +++ /dev/null @@ -1,60 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "component/moreAdvancedComponent.h" - -// unitTest_runTests("Component/MoreAdvancedComponent"); - -////////////////////////////////////////////////////////////////////////// - -IMPLEMENT_CONOBJECT(MoreAdvancedComponent); - -ConsoleDocClass( MoreAdvancedComponent, - "@brief This is a slightly more advanced component which will be used to demonstrate " - "components which are dependent on other components.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -bool MoreAdvancedComponent::onComponentRegister( SimComponent *owner ) -{ - if( !Parent::onComponentRegister( owner ) ) - return false; - - // This will return the first interface of type SimpleComponent that is cached - // on the parent object. - mSCInterface = owner->getInterface(); - - // If we can't find this interface, our component can't function, so false - // will be returned, and this will signify, to the top-level component, that it - // should fail the onAdd call. - return ( mSCInterface != NULL ); -} - -bool MoreAdvancedComponent::testDependentInterface() -{ - // These two requirements must be met in order for the test to proceed, so - // lets check them. - if( mSCInterface == NULL || !mSCInterface->isValid() ) - return false; - - return mSCInterface->isFortyTwo( 42 ); -} \ No newline at end of file diff --git a/Engine/source/component/moreAdvancedComponent.h b/Engine/source/component/moreAdvancedComponent.h deleted file mode 100644 index d4891202d2..0000000000 --- a/Engine/source/component/moreAdvancedComponent.h +++ /dev/null @@ -1,55 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _MOREADVANCEDCOMPONENT_H_ -#define _MOREADVANCEDCOMPONENT_H_ - -#ifndef _SIMPLECOMPONENT_H_ -#include "component/simpleComponent.h" -#endif - -/// This is a slightly more advanced component which will be used to demonstrate -/// components which are dependent on other components. -class MoreAdvancedComponent : public SimComponent -{ - typedef SimComponent Parent; - -protected: - // This component is going to be dependent on a SimpleComponentInterface being - // queried off of it's parent object. This will store that interface that - // will get queried during onComponentRegister() - SimpleComponentInterface *mSCInterface; - -public: - DECLARE_CONOBJECT(MoreAdvancedComponent); - - // Firstly, take a look at the documentation for this function in simComponent.h. - // We will be overloading this method to query the component heirarchy for our - // dependent interface, as noted above. - virtual bool onComponentRegister( SimComponent *owner ); - - // This function will try to execute a function through the interface that this - // component is dependent on. - virtual bool testDependentInterface(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/simComponent.cpp b/Engine/source/component/simComponent.cpp deleted file mode 100644 index 49cbef22e0..0000000000 --- a/Engine/source/component/simComponent.cpp +++ /dev/null @@ -1,452 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "platform/platform.h" -#include "console/simObject.h" -#include "console/consoleTypes.h" -#include "component/simComponent.h" -#include "core/stream/stream.h" -#include "console/engineAPI.h" - -SimComponent::SimComponent() : mOwner( NULL ) -{ - mComponentList.clear(); - mMutex = Mutex::createMutex(); - - mEnabled = true; - mTemplate = false; -} - -SimComponent::~SimComponent() -{ - Mutex::destroyMutex( mMutex ); - mMutex = NULL; -} - -IMPLEMENT_CO_NETOBJECT_V1(SimComponent); - -ConsoleDocClass( SimComponent, - "@brief Legacy component system, soon to be deprecated.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -bool SimComponent::onAdd() -{ - if( !Parent::onAdd() ) - return false; - - // Register - _registerInterfaces( this ); - - if( !_registerComponents( this ) ) - return false; - - //Con::executef( this, 1, "onAdd" ); - - return true; -} - -void SimComponent::_registerInterfaces( SimComponent *owner ) -{ - // First call this to expose the interfaces that this component will cache - // before examining the list of subcomponents - registerInterfaces( owner ); - - // Early out to avoid mutex lock and such - if( !hasComponents() ) - return; - - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - (*i)->mOwner = owner; - - // Tell the component itself to register it's interfaces - (*i)->registerInterfaces( owner ); - - (*i)->mOwner = NULL; // This tests to see if the object's onComponentRegister call will call up to the parent. - - // Recurse - (*i)->_registerInterfaces( owner ); - } - - unlockComponentList(); -} - -bool SimComponent::_registerComponents( SimComponent *owner ) -{ - // This method will return true if the object contains no components. See the - // documentation for SimComponent::onComponentRegister for more information - // on this behavior. - bool ret = true; - - // If this doesn't contain components, don't even lock the list. - if( hasComponents() ) - { - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - if( !(*i)->onComponentRegister( owner ) ) - { - ret = false; - break; - } - - AssertFatal( (*i)->mOwner == owner, "Component failed to call parent onComponentRegister!" ); - - // Recurse - if( !(*i)->_registerComponents( owner ) ) - { - ret = false; - break; - } - } - - unlockComponentList(); - } - - return ret; -} - -void SimComponent::_unregisterComponents() -{ - if( !hasComponents() ) - return; - - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - (*i)->onComponentUnRegister(); - - AssertFatal( (*i)->mOwner == NULL, "Component failed to call parent onUnRegister" ); - - // Recurse - (*i)->_unregisterComponents(); - } - - unlockComponentList(); -} - -void SimComponent::onRemove() -{ - //Con::executef(this, 1, "onRemove"); - - _unregisterComponents(); - - // Delete all components - VectorPtr&componentList = lockComponentList(); - while(componentList.size() > 0) - { - SimComponent *c = componentList[0]; - componentList.erase( componentList.begin() ); - - if( c->isProperlyAdded() ) - c->deleteObject(); - else if( !c->isRemoved() && !c->isDeleted() ) - delete c; - // else, something else is deleting this, don't mess with it - } - unlockComponentList(); - - Parent::onRemove(); -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::processArguments(S32 argc, ConsoleValueRef *argv) -{ - for(S32 i = 0; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - addComponent(obj); - else - Con::printf("SimComponent::processArguments - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -////////////////////////////////////////////////////////////////////////// - -void SimComponent::initPersistFields() -{ - addGroup("Component"); - - addProtectedField( "Template", TypeBool, Offset(mTemplate, SimComponent), - &setIsTemplate, &defaultProtectedGetFn, - "Places the object in a component set for later use in new levels." ); - - endGroup("Component"); - - // Call Parent. - Parent::initPersistFields(); -} - -//------------------------------------------------------------------------------ - -bool SimComponent::getInterfaces( ComponentInterfaceList *list, const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) -{ - AssertFatal( list != NULL, "Passing NULL for a list is not supported functionality for SimComponents." ); - return ( mInterfaceCache.enumerate( list, type, name, owner, notOwner ) > 0 ); -} - -bool SimComponent::registerCachedInterface( const char *type, const char *name, SimComponent *interfaceOwner, ComponentInterface *cinterface ) -{ - if( mInterfaceCache.add( type, name, interfaceOwner, cinterface ) ) - { - cinterface->mOwner = interfaceOwner; - - // Recurse - if( mOwner != NULL ) - return mOwner->registerCachedInterface( type, name, interfaceOwner, cinterface ); - - return true; - } - - // So this is not a good assert, because it will get triggered due to the recursive - // nature of interface caching. I want to keep it here, though, just so nobody - // else thinks, "Oh I'll add an assert here." - // - //AssertFatal( false, avar( "registerCachedInterface failed, probably because interface with type '%s', name '%s' and owner with SimObjectId '%d' already exists", - // type, name, interfaceOwner->getId() ) ); - - return false; -} - -////////////////////////////////////////////////////////////////////////// -// Component Management -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::addComponentFromField( void* obj, const char* data ) -{ - SimComponent *pComponent = dynamic_cast( Sim::findObject( data ) ); - if( pComponent != NULL ) - static_cast(obj)->addComponent( pComponent ); - return false; -} - -// Add Component to this one -bool SimComponent::addComponent( SimComponent *component ) -{ - AssertFatal( dynamic_cast(component), "SimComponent - Cannot add non SimObject derived components!" ); - - MutexHandle mh; - if( mh.lock( mMutex, true ) ) - { - for( SimComponentIterator nItr = mComponentList.begin(); nItr != mComponentList.end(); nItr++ ) - { - SimComponent *pComponent = dynamic_cast(*nItr); - AssertFatal( pComponent, "SimComponent::addComponent - NULL component in list!" ); - if( pComponent == component ) - return true; - } - - if(component->onComponentAdd(this)) - { - component->mOwner = this; - mComponentList.push_back( component ); - return true; - } - } - - return false; -} - -// Remove Component from this one -bool SimComponent::removeComponent( SimComponent *component ) -{ - MutexHandle mh; - if( mh.lock( mMutex, true ) ) - { - for( SimComponentIterator nItr = mComponentList.begin(); nItr != mComponentList.end(); nItr++ ) - { - SimComponent *pComponent = dynamic_cast(*nItr); - AssertFatal( pComponent, "SimComponent::removeComponent - NULL component in list!" ); - if( pComponent == component ) - { - AssertFatal( component->mOwner == this, "Somehow we contain a component who doesn't think we are it's owner." ); - (*nItr)->onComponentRemove(this); - component->mOwner = NULL; - mComponentList.erase( nItr ); - return true; - } - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::onComponentAdd(SimComponent *target) -{ - Con::executef(this, "onComponentAdd", Con::getIntArg(target->getId())); - return true; -} - -void SimComponent::onComponentRemove(SimComponent *target) -{ - Con::executef(this, "onComponentRemove", Con::getIntArg(target->getId())); -} - -////////////////////////////////////////////////////////////////////////// - -ComponentInterface *SimComponent::getInterface(const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */) -{ - ComponentInterfaceList iLst; - - if( getInterfaces( &iLst, type, name, owner, notOwner ) ) - return iLst[0]; - - return NULL; -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::writeField(StringTableEntry fieldname, const char* value) -{ - if (!Parent::writeField(fieldname, value)) - return false; - - if( fieldname == StringTable->insert("owner") ) - return false; - - return true; -} - -void SimComponent::write(Stream &stream, U32 tabStop, U32 flags /* = 0 */) -{ - MutexHandle handle; - handle.lock(mMutex); // When this goes out of scope, it will unlock it - - // export selected only? - if((flags & SelectedOnly) && !isSelected()) - { - for(U32 i = 0; i < mComponentList.size(); i++) - mComponentList[i]->write(stream, tabStop, flags); - - return; - } - - stream.writeTabs(tabStop); - char buffer[1024]; - dSprintf(buffer, sizeof(buffer), "new %s(%s) {\r\n", getClassName(), getName() ? getName() : ""); - stream.write(dStrlen(buffer), buffer); - writeFields(stream, tabStop + 1); - - if(mComponentList.size()) - { - stream.write(2, "\r\n"); - - stream.writeTabs(tabStop+1); - stream.writeLine((U8 *)"// Note: This is a list of behaviors, not arbitrary SimObjects as in a SimGroup or SimSet.\r\n"); - - for(U32 i = 0; i < mComponentList.size(); i++) - mComponentList[i]->write(stream, tabStop + 1, flags); - } - - stream.writeTabs(tabStop); - stream.write(4, "};\r\n"); -} - -////////////////////////////////////////////////////////////////////////// -// Console Methods -////////////////////////////////////////////////////////////////////////// - -ConsoleMethod( SimComponent, addComponents, bool, 3, 64, "%obj.addComponents( %compObjName, %compObjName2, ... );\n" - "Adds additional components to current list.\n" - "@param Up to 62 component names\n" - "@return Returns true on success, false otherwise.") -{ - for(S32 i = 2; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - object->addComponent(obj); - else - Con::printf("SimComponent::addComponents - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -ConsoleMethod( SimComponent, removeComponents, bool, 3, 64, "%obj.removeComponents( %compObjName, %compObjName2, ... );\n" - "Removes components by name from current list.\n" - "@param objNamex Up to 62 component names\n" - "@return Returns true on success, false otherwise.") -{ - for(S32 i = 2; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - object->removeComponent(obj); - else - Con::printf("SimComponent::removeComponents - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -DefineConsoleMethod( SimComponent, getComponentCount, S32, (), , "() Get the current component count\n" - "@return The number of components in the list as an integer") -{ - return object->getComponentCount(); -} - -DefineConsoleMethod( SimComponent, getComponent, S32, (S32 idx), , "(idx) Get the component corresponding to the given index.\n" - "@param idx An integer index value corresponding to the desired component.\n" - "@return The id of the component at the given index as an integer") -{ - if(idx < 0 || idx >= object->getComponentCount()) - { - Con::errorf("SimComponent::getComponent - Invalid index %d", idx); - return 0; - } - - SimComponent *c = object->getComponent(idx); - return c ? c->getId() : 0; -} - -DefineConsoleMethod(SimComponent, setEnabled, void, (bool enabled), , "(enabled) Sets or unsets the enabled flag\n" - "@param enabled Boolean value\n" - "@return No return value") -{ - object->setEnabled(enabled); -} - -DefineConsoleMethod(SimComponent, isEnabled, bool, (), , "() Check whether SimComponent is currently enabled\n" - "@return true if enabled and false if not") -{ - return object->isEnabled(); -} - -DefineConsoleMethod(SimComponent, setIsTemplate, void, (bool templateFlag), , "(template) Sets or unsets the template flag\n" - "@param template Boolean value\n" - "@return No return value") -{ - object->setIsTemplate(templateFlag); -} - -DefineConsoleMethod(SimComponent, getIsTemplate, bool, (), , "() Check whether SimComponent is currently a template\n" - "@return true if is a template and false if not") -{ - return object->getIsTemplate(); -} diff --git a/Engine/source/component/simComponent.h b/Engine/source/component/simComponent.h deleted file mode 100644 index 70e41f69eb..0000000000 --- a/Engine/source/component/simComponent.h +++ /dev/null @@ -1,256 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _SIMCOMPONENT_H_ -#define _SIMCOMPONENT_H_ - -#ifndef _TVECTOR_H_ -#include "core/util/tVector.h" -#endif -#ifndef _STRINGTABLE_H_ -#include "core/stringTable.h" -#endif -#ifndef _NETOBJECT_H_ -#include "sim/netObject.h" -#endif -#ifndef _COMPONENTINTERFACE_H_ -#include "component/componentInterface.h" -#endif -#ifndef _PLATFORM_THREADS_MUTEX_H_ -#include "platform/threads/mutex.h" -#endif -#ifndef _STRINGFUNCTIONS_H_ -#include "core/strings/stringFunctions.h" -#endif - -// Forward refs -class Stream; -class ComponentInterface; -class ComponentInterfaceCache; - -class SimComponent : public NetObject -{ - typedef NetObject Parent; - -private: - VectorPtr mComponentList; ///< The Component List - void *mMutex; ///< Component List Mutex - - SimObjectPtr mOwner; ///< The component which owns this one. - - /// This is called internally to instruct the component to iterate over it's - // list of components and recursively call _registerInterfaces on their lists - // of components. - void _registerInterfaces( SimComponent *owner ); - - bool _registerComponents( SimComponent *owner ); - void _unregisterComponents(); - -protected: - ComponentInterfaceCache mInterfaceCache; ///< Stores the interfaces exposed by this component. - - bool mEnabled; - - bool mTemplate; - - // Non-const getOwner for derived classes - SimComponent *_getOwner() { return mOwner; } - - /// Returns a const reference to private mComponentList - typedef VectorPtr::iterator SimComponentIterator; - VectorPtr &lockComponentList() - { - Mutex::lockMutex( mMutex ); - return mComponentList; - }; - - void unlockComponentList() - { - Mutex::unlockMutex( mMutex ); - } - - /// onComponentRegister is called on each component by it's owner. If a component - /// has no owner, onComponentRegister will not be called on it. The purpose - /// of onComponentRegister is to allow a component to check for any external - /// interfaces, or other dependencies which it needs to function. If any component - /// in a component hierarchy returns false from it's onComponentRegister call - /// the entire hierarchy is invalid, and SimObject::onAdd will fail on the - /// top-level component. To put it another way, if a component contains other - /// components, it will be registered successfully with Sim iff each subcomponent - /// returns true from onComponentRegister. If a component does not contain - /// other components, it will not receive an onComponentRegister call. - /// - /// Overloads of this method must pass the call along to their parent, as is - /// shown in the example below. - /// - /// @code - /// bool FooComponent::onComponentRegister( SimComponent *owner ) - /// { - /// if( !Parent::onComponentRegister( owner ) ) - /// return false; - /// ... - /// } - /// @endcode - virtual bool onComponentRegister( SimComponent *owner ) - { - mOwner = owner; - return true; - } - - /// onUnregister is called when the owner is unregistering. Your object should - /// do cleanup here, as well as pass a call up the chain to the parent. - virtual void onComponentUnRegister() - { - mOwner = NULL; - } - - /// registerInterfaces is called on each component as it's owner is registering - /// it's interfaces. This is called before onComponentRegister, and should be used to - /// register all interfaces exposed by your component, as well as all callbacks - /// needed by your component. - virtual void registerInterfaces( SimComponent *owner ) - { - - } - -public: - DECLARE_CONOBJECT(SimComponent); - - /// Constructor - /// Add this component - SimComponent(); - - /// Destructor - /// Remove this component and destroy child references - virtual ~SimComponent(); - -public: - - virtual bool onAdd(); - virtual void onRemove(); - - static void initPersistFields(); - - virtual bool processArguments(S32 argc, ConsoleValueRef *argv); - - bool isEnabled() const { return mEnabled; } - - void setEnabled( bool value ) { mEnabled = value; } - - /// Will return true if this object contains components. - bool hasComponents() const { return ( mComponentList.size() > 0 ); }; - - /// The component which owns this object - const SimComponent *getOwner() const { return mOwner; }; - - // Component Information - inline virtual StringTableEntry getComponentName() { return StringTable->insert( getClassName() ); }; - - /// Protected 'Component' Field setter that will add a component to the list. - static bool addComponentFromField(void* obj, const char* data); - - /// Add Component to this one - virtual bool addComponent( SimComponent *component ); - - /// Remove Component from this one - virtual bool removeComponent( SimComponent *component ); - - /// Clear Child components of this one - virtual bool clearComponents() { mComponentList.clear(); return true; }; - - virtual bool onComponentAdd(SimComponent *target); - virtual void onComponentRemove(SimComponent *target); - - S32 getComponentCount() { return mComponentList.size(); } - SimComponent *getComponent(S32 idx) { return mComponentList[idx]; } - - SimComponentIterator find(SimComponentIterator first, SimComponentIterator last, SimComponent *value) - { - return ::find(first, last, value); - } - - static bool setIsTemplate( void *object, const char *index, const char *data ) - { static_cast(object)->setIsTemplate( dAtob( data ) ); return false; }; - virtual void setIsTemplate( const bool pTemplate ) { mTemplate = pTemplate; } - bool getIsTemplate() const { return mTemplate; } - - virtual void write(Stream &stream, U32 tabStop, U32 flags = 0); - virtual bool writeField(StringTableEntry fieldname, const char* value); - - - /// getInterfaces allows the caller to enumerate the interfaces exposed by - /// this component. This method can be overwritten to expose interfaces - /// which are not cached on the object, before passing the call to the Parent. - /// This can be used delay interface creation until it is queried for, instead - /// of creating it on initialization, and caching it. Returns false if no results - /// were found - /// - /// @param list The list that this method will append search results on to. - /// @param type An expression which the 'type' field on an added object must match to be included in results - /// @param name An expression which the 'name' field on an added object must match to be included in results - /// @param owner Limit results to components owned/not-owned by this SimComponent (see next param) - /// @param notOwner If set to true, this will enumerate only interfaces NOT owned by 'owner' - virtual bool getInterfaces( ComponentInterfaceList *list, const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); // const omission intentional - - - /// These two methods allow for easy query of component interfaces if you know - /// exactly what you are looking for, and don't mind being passed back the first - /// matching result. - ComponentInterface *getInterface( const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); - - template - T *getInterface( const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); - - /// Add an interface to the cache. This function will return true if the interface - /// is added successfully. An interface will not be added successfully if an entry - /// in this components cache with the same values for 'type' and 'name' is present. - /// - /// @param type Type of the interface being added. If NULL is passed, it will match any type string queried. - /// @param name Name of interface being added. If NULL is passed, it will match any name string queried. - /// @param interfaceOwner The component which owns the interface being cached - /// @param cinterface The ComponentInterface being cached - bool registerCachedInterface( const char *type, const char *name, SimComponent *interfaceOwner, ComponentInterface *cinterface ); -}; - -////////////////////////////////////////////////////////////////////////// - -template -T *SimComponent::getInterface( const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) -{ - ComponentInterfaceList iLst; - - if( getInterfaces( &iLst, type, name, owner, notOwner ) ) - { - ComponentInterfaceListIterator itr = iLst.begin(); - - while( dynamic_cast( *itr ) == NULL ) - itr++; - - if( itr != iLst.end() ) - return static_cast( *itr ); - } - - return NULL; -} - -#endif // _SIMCOMPONENT_H_ diff --git a/Engine/source/component/simpleComponent.cpp b/Engine/source/component/simpleComponent.cpp deleted file mode 100644 index 246672c28d..0000000000 --- a/Engine/source/component/simpleComponent.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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 "component/simpleComponent.h" - -IMPLEMENT_CONOBJECT(SimpleComponent); - -ConsoleDocClass( SimpleComponent, - "@brief The purpose of this component is to provide a minimalistic component that " - "exposes a simple, cached interface\n\n" - "Soon to be deprecated, internal only.\n\n " - "@internal"); \ No newline at end of file diff --git a/Engine/source/component/simpleComponent.h b/Engine/source/component/simpleComponent.h deleted file mode 100644 index e4c32bfb39..0000000000 --- a/Engine/source/component/simpleComponent.h +++ /dev/null @@ -1,159 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _SIMPLECOMPONENT_H_ -#define _SIMPLECOMPONENT_H_ - -#ifndef _SIMCOMPONENT_H_ -#include "component/simComponent.h" -#endif - -#ifndef _COMPONENTINTERFACE_H_ -#include "component/componentInterface.h" -#endif - -/// This is a very simple interface. Interfaces provide ways for components to -/// interact with each-other, and query each-other for functionality. It makes it -/// possible for two components to be interdependent on one another, as well. An -/// interface should make accessor calls to it's owner for functionality, and -/// generally be as thin of a layer as possible. -class SimpleComponentInterface : public ComponentInterface -{ -public: - bool isFortyTwo( const U32 test ); -}; - -////////////////////////////////////////////////////////////////////////// -/// The purpose of this component is to provide a minimalistic component that -/// exposes a simple, cached interface -class SimpleComponent : public SimComponent -{ - typedef SimComponent Parent; - -protected: - SimpleComponentInterface mSCInterface; - -public: - // Components are still SimObjects, and need to be declared and implemented - // with the standard macros - DECLARE_CONOBJECT(SimpleComponent); - - ////////////////////////////////////////////////////////////////////////// - // SimComponent overloads. - - // This method is called on each component as it's parent is getting onAdd - // called. The purpose of overloading this method is to expose cached interfaces - // before onComponentRegister is called, so that other components can depend on the - // interfaces you expose in order to register properly. This functionality - // will be demonstrated in a more advanced example. - virtual void registerInterfaces( SimComponent *owner ) - { - // While it is not imperative that we pass this call to the Parent in this - // example, if there existed a class-heirarchy of components, it would be - // critical, so for good practice, call up to the Parent. - Parent::registerInterfaces( owner ); - - // Now we should go ahead and register our cached interface. What we are doing - // is telling the component which contains this component (if it exists) - // all of the interfaces that we expose. When this call is made, it will - // recurse up the owner list. - // - // For example, there exists components A, B, and C. - // A owns B, and B owns C. - // - // If C exposes a cached interface, it will expose it via registerCachedInterface - // when registerInterfaces is recursively called. It will add it's interface to - // it's cache list, and then pass the register call up to it's parent. The parent - // will also cache the interface, and continue to pass the cache call up the - // child->parent chain until there exists no parent. - // - // The result is that, if C exposes an interface 'foo', and A owns B, and - // B owns C, an interface request for 'foo' given to component A will result - // in 'foo' being returned, even though A does not expose 'foo'. This makes - // it possible for a component to query it's owner for an interface, and - // not care where that interface is exposed. It also allows for game code - // to work with any SimComponent and query that component for any interface - // it wants without knowing or caring exactly where it is coming from. - // - // registerCachedInterface returns a boolean value if it was successful. - // Success results in the caching of this interface throughout the full - // child->parent chain. An interface will be added to a cache list - // successfully iff there exists no entry in that list that has matching - // values for 'type', 'name' and 'owner'. - owner->registerCachedInterface( - // The first parameter is the 'type' of the interface, this is not to be - // confused with any kind of existing console, or c++ type. It is simply - // a string which is can be set to any value - "example", - - // The next parameter is the 'name' of the interface. This is also a string - // which can be set to any value - "isfortytwo", - - // The owner of the interface. Note that the value being assigned here - // is this instance of SimpleComponent, and not the 'owner' argument - // of the function registerInterfaces that we are calling from. - this, - - // And finally the interface; a pointer to an object with type ComponentInterface - &mSCInterface ); - } - - ////////////////////////////////////////////////////////////////////////// - // Specific functionality - - /// This is the test method, it will return true if the number provided - /// is forty two - bool isFortyTwo( const U32 test ) const - { - return ( test == 42 ); - } -}; - -////////////////////////////////////////////////////////////////////////// -// Interface implementation -// -// Since interfaces themselves implement very little functionality, it is a good -// idea to inline them if at all possible. Interdependent components will be using -// these interfaces constantly, and so putting as thin of a layer between the -// functionality they expose, and the functionality the component implements is -// a good design practice. -inline bool SimpleComponentInterface::isFortyTwo( const U32 test ) -{ - // This code block will test for a valid owner in a debug build before - // performing operations on it's owner. It is worth noting that the - // ComponentInterface::isValid() method can be overridden to include - // validation specific to your interface and/or component. - AssertFatal( isValid(), "SimpleComponentInterface has not been registered properly by the component which exposes it." ); - - // This is a sanity check. The owner of this interface should have the type - // SimpleComponent, otherwise this won't work. (See further interface examples - // for some ways around this) - AssertFatal( dynamic_cast( getOwner() ) != NULL, "Owner of SimpleComponentInterface is not a SimpleComponent" ); - - // Component interfaces rely on being registered to set their mOwner - // field. This field is initialized to NULL, and then gets set by - // SimComponent when the interface is registered. - return static_cast( getOwner() )->isFortyTwo( test ); -} - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/moreAdvancedComponentTest.cpp b/Engine/source/component/test/moreAdvancedComponentTest.cpp deleted file mode 100644 index a6a7335f47..0000000000 --- a/Engine/source/component/test/moreAdvancedComponentTest.cpp +++ /dev/null @@ -1,68 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/moreAdvancedComponent.h" - -TEST(MoreAdvancedComponent, MoreAdvancedComponent) -{ - // Create component instances and compose them. - SimComponent *parentComponent = new SimComponent(); - SimpleComponent *simpleComponent = new SimpleComponent(); - MoreAdvancedComponent *moreAdvComponent = new MoreAdvancedComponent(); - // CodeReview note that the interface pointer isn't initialized in a ctor - // on the components, so it's bad memory against which you might - // be checking in testDependentInterface [3/3/2007 justind] - parentComponent->addComponent( simpleComponent ); - parentComponent->addComponent( moreAdvComponent ); - - simpleComponent->registerObject(); - moreAdvComponent->registerObject(); - - // Put a break-point here, follow the onAdd call, and observe the order in - // which the SimComponent::onAdd function executes. You will see the interfaces - // get cached, and the dependent interface query being made. - parentComponent->registerObject(); - - // If the MoreAdvancedComponent found an interface, than the parentComponent - // should have returned true, from onAdd, and should therefore be registered - // properly with the Sim - EXPECT_TRUE( parentComponent->isProperlyAdded() ) - << "Parent component not properly added!"; - - // Now lets test the interface. You can step through this, as well. - EXPECT_TRUE( moreAdvComponent->testDependentInterface() ) - << "Dependent interface test failed."; - - // CodeReview is there a reason we can't just delete the parentComponent here? [3/3/2007 justind] - // - // Clean up - parentComponent->removeComponent( simpleComponent ); - parentComponent->removeComponent( moreAdvComponent ); - - parentComponent->deleteObject(); - moreAdvComponent->deleteObject(); - simpleComponent->deleteObject(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/simComponentTest.cpp b/Engine/source/component/test/simComponentTest.cpp deleted file mode 100644 index 407e3adceb..0000000000 --- a/Engine/source/component/test/simComponentTest.cpp +++ /dev/null @@ -1,149 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/simComponent.h" - -class CachedInterfaceExampleComponent : public SimComponent -{ - typedef SimComponent Parent; - - ComponentProperty mMyId; - static U32 smNumInstances; - ComponentProperty *mpU32; // CodeReview [patw, 2, 17, 2007] Make ref objects when this is in Jugg - -public: - DECLARE_CONOBJECT( CachedInterfaceExampleComponent ); - - CachedInterfaceExampleComponent() : mpU32( NULL ) - { - mMyId = ( ( 1 << 24 ) | smNumInstances++ ); - } - virtual ~CachedInterfaceExampleComponent() - { - smNumInstances--; - } - -public: - ////////////////////////////////////////////////////////////////////////// - - virtual void registerInterfaces( SimComponent *owner ) - { - // Register a cached interface for this - owner->registerCachedInterface( NULL, "aU32", this, &mMyId ); - } - - ////////////////////////////////////////////////////////////////////////// - - bool onComponentRegister( SimComponent *owner ) - { - // Call up to the parent first - if( !Parent::onComponentRegister( owner ) ) - return false; - - // We want to get an interface from another object in our containing component - // to simulate component interdependency. - ComponentInterfaceList list; - - // Enumerate the interfaces on the owner, only ignore interfaces that this object owns - if( !owner->getInterfaces( &list, NULL, "aU32", this, true ) ) - return false; - - // Sanity check before just assigning all willy-nilly - for( ComponentInterfaceListIterator i = list.begin(); i != list.end(); i++ ) - { - mpU32 = dynamic_cast *>( (*i) ); - - if( mpU32 != NULL ) - return true; - } - - return false; - } - - ////////////////////////////////////////////////////////////////////////// - - // CodeReview [patw, 2, 17, 2007] I'm going to make another lightweight interface - // for this functionality later - void unit_test() - { - EXPECT_TRUE( mpU32 != NULL ) - << "Pointer to dependent interface is NULL"; - if( mpU32 ) - { - EXPECT_TRUE( *(*mpU32) & ( 1 << 24 ) ) - << "Pointer to interface data is bogus."; - EXPECT_TRUE( *(*mpU32) != *mMyId ) - << "Two of me have the same ID, bad!"; - } - } -}; - -IMPLEMENT_CONOBJECT( CachedInterfaceExampleComponent ); -U32 CachedInterfaceExampleComponent::smNumInstances = 0; - -ConsoleDocClass( CachedInterfaceExampleComponent, - "@brief Legacy from older component system.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -TEST(SimComponent, Composition) -{ - SimComponent *testComponent = new SimComponent(); - CachedInterfaceExampleComponent *componentA = new CachedInterfaceExampleComponent(); - CachedInterfaceExampleComponent *componentB = new CachedInterfaceExampleComponent(); - - // Register sub-components - EXPECT_TRUE( componentA->registerObject() ) - << "Failed to register componentA"; - EXPECT_TRUE( componentB->registerObject() ) - << "Failed to register componentB"; - - // Add the components - EXPECT_TRUE( testComponent->addComponent( componentA ) ) - << "Failed to add component a to testComponent"; - EXPECT_TRUE( testComponent->addComponent( componentB ) ) - << "Failed to add component b to testComponent"; - - EXPECT_EQ( componentA->getOwner(), testComponent ) - << "testComponent did not properly set the mOwner field of componentA to NULL."; - EXPECT_EQ( componentB->getOwner(), testComponent ) - << "testComponent did not properly set the mOwner field of componentB to NULL."; - - // Register the object with the simulation, kicking off the interface registration - ASSERT_TRUE( testComponent->registerObject() ) - << "Failed to register testComponent"; - - { - SCOPED_TRACE("componentA"); - componentA->unit_test(); - } - { - SCOPED_TRACE("componentB"); - componentB->unit_test(); - } - - testComponent->deleteObject(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/simpleComponentTest.cpp b/Engine/source/component/test/simpleComponentTest.cpp deleted file mode 100644 index a528e918ff..0000000000 --- a/Engine/source/component/test/simpleComponentTest.cpp +++ /dev/null @@ -1,131 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/simpleComponent.h" - -TEST(SimpleComponent, SimpleComponent) -{ - // When instantiating, and working with a SimObject in C++ code, such as - // a unit test, you *may not* allocate a SimObject off of the stack. - // - // For example: - // SimpleComponent sc; - // is a stack allocation. This memory is allocated off of the program stack - // when the function is called. SimObject deletion is done via SimObject::deleteObject() - // and the last command of this method is 'delete this;' That command will - // cause an assert if it is called on stack-allocated memory. Therefor, when - // instantiating SimObjects in C++ code, it is imperitive that you keep in - // mind that if any script calls 'delete()' on that SimObject, or any other - // C++ code calls 'deleteObject()' on that SimObject, it will crash. - SimpleComponent *sc = new SimpleComponent(); - - // SimObject::registerObject must be called on a SimObject before it is - // fully 'hooked in' to the engine. - // - // Tracing execution of this function will let you see onAdd get called on - // the component, and you will see it cache the interface we exposed. - sc->registerObject(); - - // It is *not* required that a component always be owned by a component (obviously) - // however I am using an owner so that you can trace execution of recursive - // calls to cache interfaces and such. - SimComponent *testOwner = new SimComponent(); - - // Add the test component to it's owner. This will set the 'mOwner' field - // of 'sc' to the address of 'testOwner' - testOwner->addComponent( sc ); - - // If you step-into this registerObject the same way as the previous one, - // you will be able to see the recursive caching of the exposed interface. - testOwner->registerObject(); - - // Now to prove that object composition is working properly, lets ask - // both of these components for their interface lists... - - // The ComponentInterfaceList is a typedef for type 'VectorPtr' - // and it will be used by getInterfaces() to store the results of the interface - // query. This is the "complete" way to obtain an interface, and it is too - // heavy-weight for most cases. A simplified query will be performed next, - // to demonstrate the usage of both. - ComponentInterfaceList iLst; - - // This query requests all interfaces, on all components, regardless of name - // or owner. - sc->getInterfaces( &iLst, - // This is the type field. I am passing NULL here to signify that the query - // should match all values of 'type' in the list. - NULL, - - // The name field, let's pass NULL again just so when you trace execution - // you can see how queries work in the simple case, first. - NULL ); - - // Lets process the list that we've gotten back, and find the interface that - // we want. - SimpleComponentInterface *scQueriedInterface = NULL; - - for( ComponentInterfaceListIterator i = iLst.begin(); i != iLst.end(); i++ ) - { - scQueriedInterface = dynamic_cast( *i ); - - if( scQueriedInterface != NULL ) - break; - } - - AssertFatal( scQueriedInterface != NULL, "No valid SimpleComponentInterface was found in query" ); - - // Lets do it again, only we will execute the query on the parent instead, - // in a simplified way. Remember the parent component doesn't expose any - // interfaces at all, so the success of this behavior is entirely dependent - // on the recursive registration that occurs in registerInterfaces() - SimpleComponentInterface *ownerQueriedInterface = testOwner->getInterface(); - - AssertFatal( ownerQueriedInterface != NULL, "No valid SimpleComponentInterface was found in query" ); - - // We should now have two pointers to the same interface obtained by querying - // different components. - EXPECT_EQ( ownerQueriedInterface, scQueriedInterface ) - << "This really shouldn't be possible to fail given the setup of the test"; - - // Lets call the method that was exposed on the component via the interface. - // Trace the execution of this function, if you wish. - EXPECT_TRUE( ownerQueriedInterface->isFortyTwo( 42 ) ) - << "Don't panic, but it's a bad day in the component system."; - EXPECT_TRUE( scQueriedInterface->isFortyTwo( 42 ) ) - << "Don't panic, but it's a bad day in the component system."; - - // So there you have it. Writing a simple component that exposes a cached - // interface, and testing it. It's time to clean up. - testOwner->removeComponent( sc ); - - sc->deleteObject(); - testOwner->deleteObject(); - - // Interfaces do not need to be freed. In Juggernaught, these will be ref-counted - // for more robust behavior. Right now, however, the values of our two interface - // pointers, scQueriedInterface and ownerQueriedInterface, reference invalid - // memory. -}; - -#endif \ No newline at end of file diff --git a/Engine/source/console/codeBlock.cpp b/Engine/source/console/codeBlock.cpp index 87958c1afd..1559f41d82 100644 --- a/Engine/source/console/codeBlock.cpp +++ b/Engine/source/console/codeBlock.cpp @@ -61,7 +61,7 @@ CodeBlock::CodeBlock() CodeBlock::~CodeBlock() { // Make sure we aren't lingering in the current code block... - AssertFatal(smCurrentCodeBlock != this, "CodeBlock::~CodeBlock - Caught lingering in smCurrentCodeBlock!") + AssertFatal(smCurrentCodeBlock != this, "CodeBlock::~CodeBlock - Caught lingering in smCurrentCodeBlock!"); if(name) removeFromCodeList(); diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index 2eddf0873e..d61a8f3531 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -209,6 +209,13 @@ namespace Con return ret; } + char* getBoolArg(bool arg) + { + char *ret = STR.getArgBuffer(32); + dSprintf(ret, 32, "%d", arg); + return ret; + } + char *getStringArg( const char *arg ) { U32 len = dStrlen( arg ) + 1; @@ -864,6 +871,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi { Con::errorf(ConsoleLogEntry::General, "%s: Unable to instantiate non-SimObject class %s.", getFileLine(ip), (const char*)callArgv[1]); delete object; + currentNewObject = NULL; ip = failJump; break; } @@ -895,6 +903,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi // Fail to create the object. delete object; + currentNewObject = NULL; ip = failJump; break; } @@ -987,6 +996,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi // This error is usually caused by failing to call Parent::initPersistFields in the class' initPersistFields(). Con::warnf(ConsoleLogEntry::General, "%s: Register object failed for object %s of class %s.", getFileLine(ip), currentNewObject->getName(), currentNewObject->getClassName()); delete currentNewObject; + currentNewObject = NULL; ip = failJump; // Prevent stack value corruption CSTK.popFrame(); @@ -1008,6 +1018,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi Con::errorf(ConsoleLogEntry::General, "%s: preload failed for %s: %s.", getFileLine(ip), currentNewObject->getName(), errorStr.c_str()); dataBlock->deleteObject(); + currentNewObject = NULL; ip = failJump; // Prevent stack value corruption @@ -1087,6 +1098,9 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi case OP_FINISH_OBJECT: { + if (currentNewObject) + currentNewObject->onPostAdd(); + //Assert( objectCreationStackIndex >= 0 ); // Restore the object info from the stack [7/9/2007 Black] currentNewObject = objectCreationStack[ --objectCreationStackIndex ].newObject; diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index 9449abf83e..9fa6ad5c28 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -1252,7 +1252,7 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar if(object->getNamespace()) { U32 ident = object->getId(); - ConsoleValueRef oldIdent = argv[1]; + ConsoleValueRef oldIdent(argv[1]); StringTableEntry funcName = StringTable->insert(argv[0]); Namespace::Entry *ent = object->getNamespace()->lookup(funcName); @@ -1266,7 +1266,9 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar } // Twiddle %this argument - argv[1] = (S32)ident; + ConsoleValue func_ident; + func_ident.setIntValue((S32)ident); + argv[1] = ConsoleValueRef::fromValue(&func_ident); SimObject *save = gEvalState.thisObject; gEvalState.thisObject = object; @@ -1566,6 +1568,494 @@ void popInstantGroup() } } + +typedef HashMap typePathExpandoMap; +static typePathExpandoMap PathExpandos; + +//----------------------------------------------------------------------------- + +void addPathExpando(const char* pExpandoName, const char* pPath) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + AssertFatal(pPath != NULL, "Expando path cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Fetch the length of the path. + S32 pathLength = dStrlen(pPath); + + char pathBuffer[1024]; + + // Sanity! + if (pathLength == 0 || pathLength >= sizeof(pathBuffer)) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Strip repeat slashes. + if (!Con::stripRepeatSlashes(pathBuffer, pPath, sizeof(pathBuffer))) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Fetch new path length. + pathLength = dStrlen(pathBuffer); + + // Sanity! + if (pathLength == 0) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Remove any terminating slash. + if (pathBuffer[pathLength - 1] == '/') + pathBuffer[pathLength - 1] = 0; + + // Fetch expanded path. + StringTableEntry expandedPath = StringTable->insert(pathBuffer); + + // Info. +#if defined(TORQUE_DEBUG) + Con::printf("Adding path expando of '%s' as '%s'.", expandoName, expandedPath); +#endif + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(pExpandoName); + + // Does the expando exist? + if (expandoItr != PathExpandos.end()) + { + // Yes, so modify the path. + expandoItr->value = expandedPath; + return; + } + + // Insert expando. + PathExpandos.insert(expandoName, expandedPath); +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(expandoName); + + // Does the expando exist? + if (expandoItr != PathExpandos.end()) + { + // Yes, so return it. + return expandoItr->value; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +void removePathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(expandoName); + + // Does the expando exist? + if (expandoItr == PathExpandos.end()) + { + // No, so warn. +#if defined(TORQUE_DEBUG) + Con::warnf("Removing path expando of '%s' but it does not exist.", expandoName); +#endif + return; + } + + // Info. +#if defined(TORQUE_DEBUG) + Con::printf("Removing path expando of '%s' as '%s'.", expandoName, expandoItr->value); +#endif + // Remove expando. + PathExpandos.erase(expandoItr); +} + +//----------------------------------------------------------------------------- + +bool isPathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + return PathExpandos.contains(expandoName); +} + +//----------------------------------------------------------------------------- + +U32 getPathExpandoCount(void) +{ + return PathExpandos.size(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpandoKey(U32 expandoIndex) +{ + // Finish if index is out of range. + if (expandoIndex >= PathExpandos.size()) + return NULL; + + // Find indexed iterator. + typePathExpandoMap::iterator expandoItr = PathExpandos.begin(); + while (expandoIndex > 0) { ++expandoItr; --expandoIndex; } + + return expandoItr->key; +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpandoValue(U32 expandoIndex) +{ + // Finish if index is out of range. + if (expandoIndex >= PathExpandos.size()) + return NULL; + + // Find indexed iterator. + typePathExpandoMap::iterator expandoItr = PathExpandos.begin(); + while (expandoIndex > 0) { ++expandoItr; --expandoIndex; } + + return expandoItr->value; +} + +//----------------------------------------------------------------------------- + +bool expandPath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint, const bool ensureTrailingSlash) +{ + char pathBuffer[2048]; + const char* pSrc = pSrcPath; + char* pSlash; + + // Fetch leading character. + const char leadingToken = *pSrc; + + // Fetch following token. + const char followingToken = leadingToken != 0 ? pSrc[1] : 0; + + // Expando. + if (leadingToken == '^') + { + // Initial prefix search. + const char* pPrefixSrc = pSrc + 1; + char* pPrefixDst = pathBuffer; + + // Search for end of expando. + while (*pPrefixSrc != '/' && *pPrefixSrc != 0) + { + // Copy prefix character. + *pPrefixDst++ = *pPrefixSrc++; + } + + // Yes, so terminate the expando string. + *pPrefixDst = 0; + + // Fetch the expando path. + StringTableEntry expandoPath = getPathExpando(pathBuffer); + + // Does the expando exist? + if (expandoPath == NULL) + { + // No, so error. + Con::errorf("expandPath() : Could not find path expando '%s' for path '%s'.", pathBuffer, pSrcPath); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pDstPath, pSrcPath); + } + else + { + // No, so just use the source path. + dStrcpy(pDstPath, pSrcPath); + } + + return false; + } + + // Skip the expando and the following slash. + pSrc += dStrlen(pathBuffer) + 1; + + // Format the output path. + dSprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", expandoPath, pSrc); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; + } + + // Script-Relative. + if (leadingToken == '.') + { + // Fetch the code-block file-path. + const StringTableEntry codeblockFullPath = CodeBlock::getCurrentCodeBlockFullPath(); + + // Do we have a code block full path? + if (codeblockFullPath == NULL) + { + // No, so error. + Con::errorf("expandPath() : Could not find relative path from code-block for path '%s'.", pSrcPath); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pDstPath, pSrcPath); + } + else + { + // No, so just use the source path. + dStrcpy(pDstPath, pSrcPath); + } + + return false; + } + + // Yes, so use it as the prefix. + dStrncpy(pathBuffer, codeblockFullPath, sizeof(pathBuffer) - 1); + + // Find the final slash in the code-block. + pSlash = dStrrchr(pathBuffer, '/'); + + // Is this a parent directory token? + if (followingToken == '.') + { + // Yes, so terminate after the slash so we include it. + pSlash[1] = 0; + } + else + { + // No, it's a current directory token so terminate at the slash so we don't include it. + pSlash[0] = 0; + + // Skip the current directory token. + pSrc++; + } + + // Format the output path. + dStrncat(pathBuffer, "/", sizeof(pathBuffer) - 1 - strlen(pathBuffer)); + dStrncat(pathBuffer, pSrc, sizeof(pathBuffer) - 1 - strlen(pathBuffer)); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; + } + + // All else. + + //Using a special case here because the code below barfs on trying to build a full path for apk reading +#ifdef TORQUE_OS_ANDROID + if (leadingToken == '/' || strstr(pSrcPath, "/") == NULL) + Platform::makeFullPathName(pSrcPath, pathBuffer, sizeof(pathBuffer), pWorkingDirectoryHint); + else + dSprintf(pathBuffer, sizeof(pathBuffer), "/%s", pSrcPath); +#else + Platform::makeFullPathName(pSrcPath, pathBuffer, sizeof(pathBuffer), pWorkingDirectoryHint); +#endif + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; +} + +//----------------------------------------------------------------------------- + +bool isBasePath(const char* SrcPath, const char* pBasePath) +{ + char expandBuffer[1024]; + Con::expandPath(expandBuffer, sizeof(expandBuffer), SrcPath); + return dStrnicmp(pBasePath, expandBuffer, dStrlen(pBasePath)) == 0; +} + +//----------------------------------------------------------------------------- + +void collapsePath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint) +{ + // Check path against expandos. If there are multiple matches, choose the + // expando that produces the shortest relative path. + + char pathBuffer[2048]; + + // Fetch expando count. + const U32 expandoCount = getPathExpandoCount(); + + // Iterate expandos. + U32 expandoRelativePathLength = U32_MAX; + for (U32 expandoIndex = 0; expandoIndex < expandoCount; ++expandoIndex) + { + // Fetch expando value (path). + StringTableEntry expandoValue = getPathExpandoValue(expandoIndex); + + // Skip if not the base path. + if (!isBasePath(pSrcPath, expandoValue)) + continue; + + // Fetch path relative to expando path. + StringTableEntry relativePath = Platform::makeRelativePathName(pSrcPath, expandoValue); + + // If the relative path is simply a period + if (relativePath[0] == '.') + relativePath++; + + if (dStrlen(relativePath) > expandoRelativePathLength) + { + // This expando covers less of the path than any previous one found. + // We will keep the previous one. + continue; + } + + // Keep track of the relative path length + expandoRelativePathLength = dStrlen(relativePath); + + // Fetch expando key (name). + StringTableEntry expandoName = getPathExpandoKey(expandoIndex); + + // Format against expando. + dSprintf(pathBuffer, sizeof(pathBuffer), "^%s/%s", expandoName, relativePath); + } + + // Check if we've found a suitable expando + if (expandoRelativePathLength != U32_MAX) + { + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return; + } + + // Fetch the working directory. + StringTableEntry workingDirectory = pWorkingDirectoryHint != NULL ? pWorkingDirectoryHint : Platform::getCurrentDirectory(); + + // Fetch path relative to current directory. + StringTableEntry relativePath = Platform::makeRelativePathName(pSrcPath, workingDirectory); + + // If the relative path is simply a period + if (relativePath[0] == '.' && relativePath[1] != '.') + relativePath++; + + // Format against expando. + dSprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", workingDirectory, relativePath); + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); +} + + +void ensureTrailingSlash(char* pDstPath, const char* pSrcPath) +{ + // Copy to target. + dStrcpy(pDstPath, pSrcPath); + + // Find trailing character index. + S32 trailIndex = dStrlen(pDstPath); + + // Ignore if empty string. + if (trailIndex == 0) + return; + + // Finish if the trailing slash already exists. + if (pDstPath[trailIndex - 1] == '/') + return; + + // Add trailing slash. + pDstPath[trailIndex++] = '/'; + pDstPath[trailIndex] = 0; +} + +//----------------------------------------------------------------------------- + +bool stripRepeatSlashes(char* pDstPath, const char* pSrcPath, S32 dstSize) +{ + // Note original destination. + char* pOriginalDst = pDstPath; + + // Reset last source character. + char lastSrcChar = 0; + + // Search source... + while (dstSize > 0) + { + // Fetch characters. + const char srcChar = *pSrcPath++; + + // Do we have a repeat slash? + if (srcChar == '/' && lastSrcChar == '/') + { + // Yes, so skip it. + continue; + } + + // No, so copy character. + *pDstPath++ = srcChar; + + // Finish if end of source. + if (srcChar == 0) + return true; + + // Reduce room left in destination. + dstSize--; + + // Set last character. + lastSrcChar = srcChar; + } + + // Terminate the destination string as we ran out of room. + *pOriginalDst = 0; + + // Fail! + return false; +} + } // end of Console namespace #endif diff --git a/Engine/source/console/console.h b/Engine/source/console/console.h index 3a26bdc2d0..409323eab1 100644 --- a/Engine/source/console/console.h +++ b/Engine/source/console/console.h @@ -486,6 +486,20 @@ namespace Con bool expandToolScriptFilename(char *filename, U32 size, const char *src); bool collapseScriptFilename(char *filename, U32 size, const char *src); + bool expandPath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint = NULL, const bool ensureTrailingSlash = false); + void collapsePath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint = NULL); + bool isBasePath(const char* SrcPath, const char* pBasePath); + void ensureTrailingSlash(char* pDstPath, const char* pSrcPath); + bool stripRepeatSlashes(char* pDstPath, const char* pSrcPath, S32 dstSize); + + void addPathExpando(const char* pExpandoName, const char* pPath); + void removePathExpando(const char* pExpandoName); + bool isPathExpando(const char* pExpandoName); + StringTableEntry getPathExpando(const char* pExpandoName); + U32 getPathExpandoCount(void); + StringTableEntry getPathExpandoKey(U32 expandoIndex); + StringTableEntry getPathExpandoValue(U32 expandoIndex); + bool isCurrentScriptToolScript(); StringTableEntry getModNameFromPath(const char *path); @@ -739,6 +753,13 @@ namespace Con /// @see Con::errorf() void errorf(ConsoleLogEntry::Type type, const char *_format, ...); + //some additions from t2d + /// Prints a separator to the console. + inline void printSeparator(void) { printf("--------------------------------------------------------------------------------"); } + + /// Prints a separator to the console. + inline void printBlankLine(void) { printf(""); } + /// @} /// Returns true when called from the main thread, false otherwise @@ -815,6 +836,7 @@ namespace Con char* getArgBuffer(U32 bufferSize); char* getFloatArg(F64 arg); char* getIntArg (S32 arg); + char* getBoolArg(bool arg); char* getStringArg( const char* arg ); char* getStringArg( const String& arg ); /// @} diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 82fbaca978..be265add82 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -25,6 +25,11 @@ #include "console/consoleInternal.h" #include "console/engineAPI.h" #include "console/ast.h" + +#ifndef _CONSOLFUNCTIONS_H_ +#include "console/consoleFunctions.h" +#endif + #include "core/strings/findMatch.h" #include "core/strings/stringUnit.h" #include "core/strings/unicode.h" @@ -32,7 +37,11 @@ #include "console/compiler.h" #include "platform/platformInput.h" #include "core/util/journal/journal.h" +#include "gfx/gfxEnums.h" #include "core/util/uuid.h" +#include "core/color.h" +#include "math/mPoint3.h" +#include "math/mathTypes.h" // This is a temporary hack to get tools using the library to // link in this module which contains no other references. @@ -41,6 +50,132 @@ bool LinkConsoleFunctions = false; // Buffer for expanding script filenames. static char scriptFilenameBuffer[1024]; +bool isInt(const char* str) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ignore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + for(int i = start; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(i != 0) + return false; + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isFloat(const char* str, bool sciOk = false) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ingore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + bool seenDot = false; + int eLoc = -1; + for(int i = 0; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(sciOk) + { + //Haven't found e or scientific notation symbol + if(eLoc == -1) + { + //only allowed in beginning + if(i != 0) + return false; + } + else + { + //if not right after the e + if(i != (eLoc + 1)) + return false; + } + } + else + { + //only allowed in beginning + if(i != 0) + return false; + } + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case 'e': case 'E': + if(!sciOk) + return false; + else + { + //already saw it so can't have 2 + if(eLoc != -1) + return false; + + eLoc = i; + } + break; + case '.': + if(seenDot | (sciOk && eLoc != -1)) + return false; + seenDot = true; + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isValidIP(const char* ip) +{ + unsigned b1, b2, b3, b4; + unsigned char c; + int rc = dSscanf(ip, "%3u.%3u.%3u.%3u%c", &b1, &b2, &b3, &b4, &c); + if (rc != 4 && rc != 5) return false; + if ((b1 | b2 | b3 | b4) > 255) return false; + if (dStrspn(ip, "0123456789.") < dStrlen(ip)) return false; + return true; +} + +bool isValidPort(U16 port) +{ + return (port >= 0 && port <=65535); +} //============================================================================= // String Functions. @@ -235,6 +370,40 @@ DefineConsoleFunction( strlen, S32, ( const char* str ),, return dStrlen( str ); } +//----------------------------------------------------------------------------- +DefineConsoleFunction( strlenskip, S32, ( const char* str, const char* first, const char* last ),, + "Calculate the length of a string in characters, skipping everything between and including first and last.\n" + "@param str A string.\n" + "@param first First character to look for to skip block of text.\n" + "@param last Second character to look for to skip block of text.\n" + "@return The length of the given string skipping blocks of text between characters.\n" + "@ingroup Strings" ) +{ + const UTF8* pos = str; + U32 size = 0; + U32 length = dStrlen(str); + bool count = true; + + //loop through each character counting each character, skipping tags (anything with < followed by >) + for(U32 i = 0; i < length; i++, pos++) + { + if(count) + { + if(*pos == first[0]) + count = false; + else + size++; + } + else + { + if(*pos == last[0]) + count = true; + } + } + + return S32(size); +} + //----------------------------------------------------------------------------- DefineConsoleFunction( strstr, S32, ( const char* string, const char* substring ),, @@ -281,6 +450,33 @@ DefineConsoleFunction( strpos, S32, ( const char* haystack, const char* needle, //----------------------------------------------------------------------------- +DefineConsoleFunction( strposr, S32, ( const char* haystack, const char* needle, S32 offset ), ( 0 ), + "Find the start of @a needle in @a haystack searching from right to left beginning at the given offset.\n" + "@param haystack The string to search.\n" + "@param needle The string to search for.\n" + "@return The index at which the first occurrence of @a needle was found in @a heystack or -1 if no match was found.\n\n" + "@tsexample\n" + "strposr( \"b ab\", \"b\", 1 ) // Returns 2.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + U32 sublen = dStrlen( needle ); + U32 strlen = dStrlen( haystack ); + S32 start = strlen - offset; + + if(start < 0 || start > strlen) + return -1; + + if (start + sublen > strlen) + start = strlen - sublen; + for(; start >= 0; start--) + if(!dStrncmp(haystack + start, needle, sublen)) + return start; + return -1; +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( ltrim, const char*, ( const char* str ),, "Remove leading whitespace from the string.\n" "@param str A string.\n" @@ -627,6 +823,18 @@ DefineConsoleFunction( stripTrailingNumber, String, ( const char* str ),, return String::GetTrailingNumber( str, suffix ); } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getFirstNumber, String, ( const char* str ),, + "Get the first occuring number from @a str.\n" + "@param str The string from which to read out the first number.\n" + "@return String representation of the number or "" if no number.\n\n") +{ + U32 start; + U32 end; + return String::GetFirstNumber(str, start, end); +} + //---------------------------------------------------------------- DefineConsoleFunction( isspace, bool, ( const char* str, S32 index ),, @@ -811,6 +1019,192 @@ DefineConsoleFunction( strrchrpos, S32, ( const char* str, const char* chr, S32 return index; } +//---------------------------------------------------------------- + +DefineConsoleFunction(ColorFloatToInt, ColorI, (ColorF color), , + "Convert from a float color to an integer color (0.0 - 1.0 to 0 to 255).\n" + "@param color Float color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" + "@return Converted color value (0 - 255)\n\n" + "@tsexample\n" + "ColorFloatToInt( \"0 0 1 0.5\" ) // Returns \"0 0 255 128\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return (ColorI)color; +} + +DefineConsoleFunction(ColorIntToFloat, ColorF, (ColorI color), , + "Convert from a integer color to an float color (0 to 255 to 0.0 - 1.0).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" + "@return Converted color value (0.0 - 1.0)\n\n" + "@tsexample\n" + "ColorIntToFloat( \"0 0 255 128\" ) // Returns \"0 0 1 0.5\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return (ColorF)color; +} + +DefineConsoleFunction(ColorRGBToHEX, const char*, (ColorI color), , + "Convert from a integer RGB (red, green, blue) color to hex color value (0 to 255 to 00 - FF).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return Hex color value (#000000 - #FFFFFF), alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHEX( \"0 0 255 128\" ) // Returns \"#0000FF\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return Con::getReturnBuffer(color.getHex()); +} + +DefineConsoleFunction(ColorRGBToHSB, const char*, (ColorI color), , + "Convert from a integer RGB (red, green, blue) color to HSB (hue, saturation, brightness). HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return HSB color value, alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHSB( \"0 0 255 128\" ) // Returns \"240 100 100\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + ColorI::Hsb hsb(color.getHSB()); + String s(String::ToString(hsb.hue) + " " + String::ToString(hsb.sat) + " " + String::ToString(hsb.brightness)); + return Con::getReturnBuffer(s); +} + +DefineConsoleFunction(ColorHEXToRGB, ColorI, (const char* hex), , + "Convert from a hex color value to an integer RGB (red, green, blue) color (00 - FF to 0 to 255).\n" + "@param hex Hex color value (#000000 - #FFFFFF) to be converted to an RGB (red, green, blue) value.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHEXToRGB( \"#0000FF\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + S32 rgb = dAtoui(hex, 16); + + ColorI color; + color.set(rgb & 0x000000FF, (rgb & 0x0000FF00) >> 8, (rgb & 0x00FF0000) >> 16); + return color; +} + +DefineConsoleFunction(ColorHSBToRGB, ColorI, (Point3I hsb), , + "Convert from a HSB (hue, saturation, brightness) to an integer RGB (red, green, blue) color. HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param hsb HSB (hue, saturation, brightness) value to be converted.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHSBToRGB( \"240 100 100\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + ColorI color; + color.set(ColorI::Hsb(hsb.x, hsb.y, hsb.z)); + return color; +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( strToggleCaseToWords, const char*, ( const char* str ),, + "Parse a Toggle Case word into separate words.\n" + "@param str The string to parse.\n" + "@return new string space separated.\n\n" + "@tsexample\n" + "strToggleCaseToWords( \"HelloWorld\" ) // Returns \"Hello World\".\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + String newStr; + for(S32 i = 0; str[i]; i++) + { + //If capitol add a space + if(i != 0 && str[i] >= 65 && str[i] <= 90) + newStr += " "; + + newStr += str[i]; + } + + return Con::getReturnBuffer(newStr); +} + +//---------------------------------------------------------------- + +// Warning: isInt and isFloat are very 'strict' and might need to be adjusted to allow other values. //seanmc +DefineConsoleFunction( isInt, bool, ( const char* str),, + "Returns true if the string is an integer.\n" + "@param str The string to test.\n" + "@return true if @a str is an integer and false if not\n\n" + "@tsexample\n" + "isInt( \"13\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isInt(str); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isFloat, bool, ( const char* str, bool sciOk), (false), + "Returns true if the string is a float.\n" + "@param str The string to test.\n" + "@param sciOk Test for correct scientific notation and accept it (ex. 1.2e+14)" + "@return true if @a str is a float and false if not\n\n" + "@tsexample\n" + "isFloat( \"13.5\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isFloat(str, sciOk); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidPort, bool, ( const char* str),, + "Returns true if the string is a valid port number.\n" + "@param str The string to test.\n" + "@return true if @a str is a port and false if not\n\n" + "@tsexample\n" + "isValidPort( \"8080\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(isInt(str)) + { + U16 port = dAtous(str); + return isValidPort(port); + } + else + return false; +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidIP, bool, ( const char* str),, + "Returns true if the string is a valid ip address, excepts localhost.\n" + "@param str The string to test.\n" + "@return true if @a str is a valid ip address and false if not\n\n" + "@tsexample\n" + "isValidIP( \"localhost\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(dStrcmp(str, "localhost") == 0) + { + return true; + } + else + return isValidIP(str); +} + +//---------------------------------------------------------------- + +// Torque won't normally add another string if it already exists with another casing, +// so this forces the addition. It should be called once near the start, such as in main.cs. +ConsoleFunction(addCaseSensitiveStrings,void,2,0,"[string1, string2, ...]" + "Adds case sensitive strings to the StringTable.") +{ + for(int i = 1; i < argc; i++) + StringTable->insert(argv[i], true); +} + //============================================================================= // Field Manipulators. //============================================================================= @@ -829,6 +1223,7 @@ DefineConsoleFunction( getWord, const char*, ( const char* text, S32 index ),, "@endtsexample\n\n" "@see getWords\n" "@see getWordCount\n" + "@see getToken\n" "@see getField\n" "@see getRecord\n" "@ingroup FieldManip" ) @@ -852,6 +1247,7 @@ DefineConsoleFunction( getWords, const char*, ( const char* text, S32 startIndex "@endtsexample\n\n" "@see getWord\n" "@see getWordCount\n" + "@see getTokens\n" "@see getFields\n" "@see getRecords\n" "@ingroup FieldManip" ) @@ -876,6 +1272,7 @@ DefineConsoleFunction( setWord, const char*, ( const char* text, S32 index, cons "setWord( \"a b c d\", 2, \"f\" ) // Returns \"a b f d\"\n" "@endtsexample\n\n" "@see getWord\n" + "@see setToken\n" "@see setField\n" "@see setRecord\n" "@ingroup FieldManip" ) @@ -895,6 +1292,7 @@ DefineConsoleFunction( removeWord, const char*, ( const char* text, S32 index ), "@tsexample\n" "removeWord( \"a b c d\", 2 ) // Returns \"a b d\"\n" "@endtsexample\n\n" + "@see removeToken\n" "@see removeField\n" "@see removeRecord\n" "@ingroup FieldManip" ) @@ -912,6 +1310,7 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, "@tsexample\n" "getWordCount( \"a b c d e\" ) // Returns 5\n" "@endtsexample\n\n" + "@see getTokenCount\n" "@see getFieldCount\n" "@see getRecordCount\n" "@ingroup FieldManip" ) @@ -921,6 +1320,49 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, //----------------------------------------------------------------------------- +DefineEngineFunction( monthNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns month as a word given a number or \"\" if number is bad" + "@return month as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 1: return abbreviate ? "Jan" : "January"; break; + case 2: return abbreviate ? "Feb" : "February"; break; + case 3: return abbreviate ? "Mar" : "March"; break; + case 4: return abbreviate ? "Apr" : "April"; break; + case 5: return "May"; break; + case 6: return abbreviate ? "Jun" : "June"; break; + case 7: return abbreviate ? "Jul" : "July"; break; + case 8: return abbreviate ? "Aug" : "August"; break; + case 9: return abbreviate ? "Sep" : "September"; break; + case 10: return abbreviate ? "Oct" : "October"; break; + case 11: return abbreviate ? "Nov" : "November"; break; + case 12: return abbreviate ? "Dec" : "December"; break; + default: return ""; + } +} + +DefineEngineFunction( weekdayNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns weekday as a word given a number or \"\" if number is bad" + "@return weekday as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 0: return abbreviate ? "Sun" : "Sunday"; break; + case 1: return abbreviate ? "Mon" : "Monday"; break; + case 2: return abbreviate ? "Tue" : "Tuesday"; break; + case 3: return abbreviate ? "Wed" : "Wednesday"; break; + case 4: return abbreviate ? "Thu" : "Thursday"; break; + case 5: return abbreviate ? "Fri" : "Friday"; break; + case 6: return abbreviate ? "Sat" : "Saturday"; break; + default: return ""; + } +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( getField, const char*, ( const char* text, S32 index ),, "Extract the field at the given @a index in the newline and/or tab separated list in @a text.\n" "Fields in @a text must be separated by newlines and/or tabs.\n" @@ -1242,6 +1684,114 @@ DefineConsoleFunction( nextToken, const char*, ( const char* str1, const char* t return ret; } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Extract the substring at the given @a index in the @a delimiters separated list in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to extract.\n" + "@return The substring at the given index or \"\" if the index is out of range.\n\n" + "@tsexample\n" + "getToken( \"a b c d\", \" \", 2 ) // Returns \"c\"\n" + "@endtsexample\n\n" + "@see getTokens\n" + "@see getTokenCount\n" + "@see getWord\n" + "@see getField\n" + "@see getRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::getUnit(text, index, delimiters)); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokens, const char*, ( const char* text, const char* delimiters, S32 startIndex, S32 endIndex ), ( -1 ), + "Extract a range of substrings separated by @a delimiters at the given @a startIndex onwards thru @a endIndex.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param startIndex The zero-based index of the first substring to extract from @a text.\n" + "@param endIndex The zero-based index of the last substring to extract from @a text. If this is -1, all words beginning " + "with @a startIndex are extracted from @a text.\n" + "@return A string containing the specified range of substrings from @a text or \"\" if @a startIndex " + "is out of range or greater than @a endIndex.\n\n" + "@tsexample\n" + "getTokens( \"a b c d\", \" \", 1, 2, ) // Returns \"b c\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see getTokenCount\n" + "@see getWords\n" + "@see getFields\n" + "@see getRecords\n" + "@ingroup FieldManip" ) +{ + if( endIndex < 0 ) + endIndex = 1000000; + + return Con::getReturnBuffer( StringUnit::getUnits( text, startIndex, endIndex, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( setToken, const char*, ( const char* text, const char* delimiters, S32 index, const char* replacement ),, + "Replace the substring in @a text separated by @a delimiters at the given @a index with @a replacement.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to replace.\n" + "@param replacement The string with which to replace the substring.\n" + "@return A new string with the substring at the given @a index replaced by @a replacement or the original " + "string if @a index is out of range.\n\n" + "@tsexample\n" + "setToken( \"a b c d\", \" \", 2, \"f\" ) // Returns \"a b f d\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see setWord\n" + "@see setField\n" + "@see setRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::setUnit( text, index, replacement, delimiters) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( removeToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Remove the substring in @a text separated by @a delimiters at the given @a index.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the word in @a text.\n" + "@return A new string with the substring at the given index removed or the original string if @a index is " + "out of range.\n\n" + "@tsexample\n" + "removeToken( \"a b c d\", \" \", 2 ) // Returns \"a b d\"\n" + "@endtsexample\n\n" + "@see removeWord\n" + "@see removeField\n" + "@see removeRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::removeUnit( text, index, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokenCount, S32, ( const char* text, const char* delimiters),, + "Return the number of @a delimiters substrings in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@return The number of @a delimiters substrings in @a text.\n\n" + "@tsexample\n" + "getTokenCount( \"a b c d e\", \" \" ) // Returns 5\n" + "@endtsexample\n\n" + "@see getWordCount\n" + "@see getFieldCount\n" + "@see getRecordCount\n" + "@ingroup FieldManip" ) +{ + return StringUnit::getUnitCount( text, delimiters ); +} + //============================================================================= // Tagged Strings. //============================================================================= @@ -2266,7 +2816,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa "@endtsexample\n\n" "@ingroup Scripting") { - if(dStrIsEmpty(varName)) + if(String::isEmpty(varName)) { Con::errorf("isDefined() - did you forget to put quotes around the variable name?"); return false; @@ -2342,7 +2892,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa { if (dStrlen(value) > 0) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { obj->setDataField(valName, 0, varValue); } @@ -2359,7 +2909,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa if (ent) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { gEvalState.getCurrentFrame().setVariable(name, varValue); } @@ -2374,7 +2924,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa if (ent) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { gEvalState.globalVars.setVariable(name, varValue); } @@ -2384,7 +2934,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa // Is it an object? if (dStrcmp(varName, "0") && dStrcmp(varName, "") && (Sim::findObject(varName) != NULL)) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { Con::errorf("%s() - can't assign a value to a variable of the form \"%s\"", __FUNCTION__, varValue); } @@ -2597,3 +3147,10 @@ DefineEngineFunction( isToolBuild, bool, (),, return false; #endif } + +DefineEngineFunction( getMaxDynamicVerts, S32, (),, + "Get max number of allowable dynamic vertices in a single vertex buffer.\n\n" + "@return the max number of allowable dynamic vertices in a single vertex buffer" ) +{ + return MAX_DYNAMIC_VERTS / 2; +} diff --git a/Engine/source/console/consoleFunctions.h b/Engine/source/console/consoleFunctions.h new file mode 100644 index 0000000000..1cb19d1df4 --- /dev/null +++ b/Engine/source/console/consoleFunctions.h @@ -0,0 +1,16 @@ +#ifndef _CONSOLFUNCTIONS_H_ +#define _CONSOLFUNCTIONS_H_ + +#ifndef _STRINGFUNCTIONS_H_ +#include "core/strings/stringFunctions.h" +#endif + +bool isInt(const char* str); + +bool isFloat(const char* str); + +bool isValidIP(const char* ip); + +bool isValidPort(U16 port); + +#endif \ No newline at end of file diff --git a/Engine/source/console/consoleObject.cpp b/Engine/source/console/consoleObject.cpp index b5ca031895..43ffda2933 100644 --- a/Engine/source/console/consoleObject.cpp +++ b/Engine/source/console/consoleObject.cpp @@ -55,7 +55,25 @@ bool AbstractClassRep::initialized = false; //----------------------------------------------------------------------------- +AbstractClassRep* AbstractClassRep::findFieldRoot(StringTableEntry fieldName) +{ + // Find the field. + const Field* pField = findField(fieldName); + + // Finish if not found. + if (pField == NULL) + return NULL; + + // We're the root if we have no parent. + if (getParentClass() == NULL) + return this; + + // Find the field root via the parent. + AbstractClassRep* pFieldRoot = getParentClass()->findFieldRoot(fieldName); + // We're the root if the parent does not have it else return the field root. + return pFieldRoot == NULL ? this : pFieldRoot; +} void AbstractClassRep::init() { @@ -349,6 +367,7 @@ void ConsoleObject::addGroup(const char* in_pGroupname, const char* in_pGroupDoc f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; // Add to field list. sg_tempFieldList.push_back(f); @@ -371,6 +390,7 @@ void ConsoleObject::endGroup(const char* in_pGroupname) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.elementCount = 0; // Add to field list. @@ -393,6 +413,7 @@ void ConsoleObject::addArray( const char *arrayName, S32 count ) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; // Add to field list. sg_tempFieldList.push_back(f); @@ -412,6 +433,7 @@ void ConsoleObject::endArray( const char *arrayName ) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.elementCount = 0; // Add to field list. @@ -433,81 +455,159 @@ void ConsoleObject::addField(const char* in_pFieldname, flags ); } -void ConsoleObject::addProtectedField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const char* in_pFieldDocs, - U32 flags ) +void ConsoleObject::addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags) { - addProtectedField( + addField( in_pFieldname, in_fieldType, in_fieldOffset, - in_setDataFn, - in_getDataFn, + in_writeDataFn, 1, in_pFieldDocs, - flags ); + flags); } +void ConsoleObject::addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) +{ + addField(in_pFieldname, + in_fieldType, + in_fieldOffset, + &defaultProtectedWriteFn, + in_elementCount, + in_pFieldDocs, + flags); +} void ConsoleObject::addField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - const U32 in_elementCount, - const char* in_pFieldDocs, - U32 flags ) + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) { AbstractClassRep::Field f; - f.pFieldname = StringTable->insert(in_pFieldname); + f.pFieldname = StringTable->insert(in_pFieldname); - if(in_pFieldDocs) - f.pFieldDocs = in_pFieldDocs; + if (in_pFieldDocs) + f.pFieldDocs = in_pFieldDocs; - f.type = in_fieldType; - f.offset = in_fieldOffset; + f.type = in_fieldType; + f.offset = in_fieldOffset; f.elementCount = in_elementCount; - f.validator = NULL; - f.flag = flags; + f.validator = NULL; + f.flag = flags; f.setDataFn = &defaultProtectedSetFn; - f.getDataFn = &defaultProtectedGetFn; + f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = in_writeDataFn; - ConsoleBaseType* conType = ConsoleBaseType::getType( in_fieldType ); - AssertFatal( conType, "ConsoleObject::addField - invalid console type" ); + ConsoleBaseType* conType = ConsoleBaseType::getType(in_fieldType); + AssertFatal(conType, "ConsoleObject::addField - invalid console type"); f.table = conType->getEnumTable(); sg_tempFieldList.push_back(f); } void ConsoleObject::addProtectedField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const U32 in_elementCount, - const char* in_pFieldDocs, - U32 flags ) + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + &defaultProtectedWriteFn, + 1, + in_pFieldDocs, + flags); +} + +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + in_writeDataFn, + 1, + in_pFieldDocs, + flags); +} + +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + &defaultProtectedWriteFn, + in_elementCount, + in_pFieldDocs, + flags); +} +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) { AbstractClassRep::Field f; - f.pFieldname = StringTable->insert(in_pFieldname); + f.pFieldname = StringTable->insert(in_pFieldname); - if(in_pFieldDocs) - f.pFieldDocs = in_pFieldDocs; + if (in_pFieldDocs) + f.pFieldDocs = in_pFieldDocs; - f.type = in_fieldType; - f.offset = in_fieldOffset; + f.type = in_fieldType; + f.offset = in_fieldOffset; f.elementCount = in_elementCount; - f.validator = NULL; - f.flag = flags; + f.validator = NULL; + f.flag = flags; f.setDataFn = in_setDataFn; f.getDataFn = in_getDataFn; + f.writeDataFn = in_writeDataFn; - ConsoleBaseType* conType = ConsoleBaseType::getType( in_fieldType ); - AssertFatal( conType, "ConsoleObject::addProtectedField - invalid console type" ); + ConsoleBaseType* conType = ConsoleBaseType::getType(in_fieldType); + AssertFatal(conType, "ConsoleObject::addProtectedField - invalid console type"); f.table = conType->getEnumTable(); sg_tempFieldList.push_back(f); @@ -529,6 +629,7 @@ void ConsoleObject::addFieldV(const char* in_pFieldname, f.table = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.validator = v; v->fieldIndex = sg_tempFieldList.size(); @@ -546,6 +647,7 @@ void ConsoleObject::addDeprecatedField(const char *fieldName) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; sg_tempFieldList.push_back(f); } diff --git a/Engine/source/console/consoleObject.h b/Engine/source/console/consoleObject.h index d4f389a96d..749129ba16 100644 --- a/Engine/source/console/consoleObject.h +++ b/Engine/source/console/consoleObject.h @@ -47,7 +47,9 @@ #ifndef _SIMOBJECTREF_H_ #include "console/simObjectRef.h" #endif - +#ifndef TINYXML_INCLUDED + #include "tinyxml.h" +#endif /// @file /// Legacy console object system. @@ -201,13 +203,16 @@ class AbstractClassRep : public ConsoleBaseType typedef ConsoleBaseType Parent; + /// Allows the writing of a custom TAML schema. + typedef void(*WriteCustomTamlSchema)(const AbstractClassRep* pClassRep, TiXmlElement* pParentElement); + /// @name 'Tructors /// @{ /// /// @param conIdPtr Pointer to the static S32 console ID. /// @param conTypeName Console type name. - AbstractClassRep( S32* conIdPtr, const char* typeName ) + AbstractClassRep( S32* conIdPtr, const char* typeName ) : Parent( sizeof( void* ), conIdPtr, typeName ) { VECTOR_SET_ASSOCIATION( mFieldList ); @@ -318,10 +323,13 @@ class AbstractClassRep : public ConsoleBaseType /// Return the namespace that contains the methods of this class. Namespace* getNameSpace() const { return mNamespace; } - + /// Return the AbstractClassRep of the class that this class is derived from. AbstractClassRep* getParentClass() const { return parentClass; } - + + virtual AbstractClassRep* getContainerChildClass(const bool recurse) = 0; + virtual WriteCustomTamlSchema getCustomTamlSchema(void) = 0; + /// Return the size of instances of this class in bytes. S32 getSizeof() const { return mClassSizeof; } @@ -376,6 +384,8 @@ class AbstractClassRep : public ConsoleBaseType virtual ConsoleObject* create () const = 0; + AbstractClassRep* findFieldRoot(StringTableEntry fieldName); + protected: virtual void init(); @@ -386,7 +396,7 @@ class AbstractClassRep : public ConsoleBaseType Namespace * mNamespace; /// @} - + public: bool mIsRenderEnabled; @@ -394,23 +404,23 @@ class AbstractClassRep : public ConsoleBaseType bool isRenderEnabled() const { return mIsRenderEnabled; } bool isSelectionEnabled() const { return mIsSelectionEnabled; } - + /// @name Categories /// @{ - + protected: const char* mCategory; const char* mDescription; - + public: /// Return the space separated category path for the class. const char* getCategory() const { return mCategory; } - + /// Return a short description string suitable for displaying in tooltips. const char* getDescription() const { return mDescription; } - + /// @} /// @name Fields @@ -421,12 +431,15 @@ class AbstractClassRep : public ConsoleBaseType typedef bool (*SetDataNotify)( void *obj, const char *array, const char *data ); typedef const char *(*GetDataNotify)( void *obj, const char *data ); + /// This is a function pointer typedef to support optional writing for fields. + typedef bool(*WriteDataNotify)(void* obj, StringTableEntry pFieldName); + /// These are special field type values used to mark /// groups and arrays in the field list. /// @see Field::type /// @see addArray, endArray - /// @see addGroup, endGroup - /// @see addGroup, endGroup + /// @see addGroup, endGroup + /// @see addGroup, endGroup /// @see addDeprecatedField enum ACRFieldTypes { @@ -434,35 +447,37 @@ class AbstractClassRep : public ConsoleBaseType /// types greater or equal to this one are not /// console data types. ARCFirstCustomField = 0xFFFFFFFB, - + /// Marks the start of a fixed size array of fields. /// @see addArray StartArrayFieldType = 0xFFFFFFFB, - + /// Marks the end of a fixed size array of fields. /// @see endArray EndArrayFieldType = 0xFFFFFFFC, - + /// Marks the beginning of a group of fields. /// @see addGroup StartGroupFieldType = 0xFFFFFFFD, - + /// Marks the beginning of a group of fields. /// @see endGroup EndGroupFieldType = 0xFFFFFFFE, - - /// Marks a field that is depreciated and no + + /// Marks a field that is depreciated and no /// longer stores a value. /// @see addDeprecatedField DeprecatedFieldType = 0xFFFFFFFF }; - + enum FieldFlags { FIELD_HideInInspectors = BIT( 0 ), ///< Do not show the field in inspectors. + FIELD_ComponentInspectors = BIT(1), ///< Custom fields used by components. They are likely to be non-standard size/configuration, so + ///< They are handled specially }; - struct Field + struct Field { Field() : pFieldname( NULL ), @@ -494,6 +509,7 @@ class AbstractClassRep : public ConsoleBaseType TypeValidator *validator; ///< Validator, if any. SetDataNotify setDataFn; ///< Set data notify Fn GetDataNotify getDataFn; ///< Get data notify Fn + WriteDataNotify writeDataFn; ///< Function to determine whether data should be written or not. }; typedef Vector FieldList; @@ -507,10 +523,10 @@ class AbstractClassRep : public ConsoleBaseType /// @name Console Type Interface /// @{ - + virtual void* getNativeVariable() { return new ( AbstractClassRep* ); } // Any pointer-sized allocation will do. virtual void deleteNativeVariable( void* var ) { delete reinterpret_cast< AbstractClassRep** >( var ); } - + /// @} /// @name Abstract Class Database @@ -553,106 +569,146 @@ extern AbstractClassRep::FieldList sg_tempFieldList; /// @see AbtractClassRep /// @see ConsoleObject template< class T > -class ConcreteClassRep : public AbstractClassRep +class ConcreteAbstractClassRep : public AbstractClassRep { - public: - - static EnginePropertyTable _smPropertyTable; - static EnginePropertyTable& smPropertyTable; - - ConcreteClassRep( const char* name, - const char* conTypeName, - S32* conTypeIdPtr, - S32 netClassGroupMask, - S32 netClassType, - S32 netEventDir, - AbstractClassRep* parent, - const char* ( *parentDesc )() ) - : AbstractClassRep( conTypeIdPtr, conTypeName ) - { - mClassName = StringTable->insert( name ); - mCategory = T::__category(); - mTypeInfo = _MAPTYPE< T >(); - - if( mTypeInfo ) - const_cast< EngineTypeInfo* >( mTypeInfo )->mPropertyTable = &smPropertyTable; - - if( &T::__description != parentDesc ) - mDescription = T::__description(); - - // Clean up mClassId - for(U32 i = 0; i < NetClassGroupsCount; i++) - mClassId[i] = -1; - - // Set properties for this ACR - mClassType = netClassType; - mClassGroupMask = netClassGroupMask; - mNetEventDir = netEventDir; - parentClass = parent; - mClassSizeof = sizeof(T); - - // Finally, register ourselves. - registerClassRep(this); - }; +public: - /// Perform class specific initialization tasks. - /// - /// Link namespaces, call initPersistFields() and consoleInit(). - void init() - { - // Get handle to our parent class, if any, and ourselves (we are our parent's child). - AbstractClassRep *parent = T::getParentStaticClassRep(); - AbstractClassRep *child = T::getStaticClassRep(); - - // If we got reps, then link those namespaces! (To get proper inheritance.) - if(parent && child) - Con::classLinkNamespaces(parent->getNameSpace(), child->getNameSpace()); - - // Finally, do any class specific initialization... - T::initPersistFields(); - T::consoleInit(); - - // Let the base finish up. - AbstractClassRep::init(); - } + virtual AbstractClassRep* getContainerChildClass(const bool recurse) + { + // Fetch container children type. + AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); + if (!recurse || pChildren != NULL) + return pChildren; + + // Fetch parent type. + AbstractClassRep* pParent = T::getParentStaticClassRep(); + if (pParent == NULL) + return NULL; + + // Get parent container children. + return pParent->getContainerChildClass(recurse); + } - /// Wrap constructor. - ConsoleObject* create() const { return new T; } - - /// @name Console Type Interface - /// @{ + virtual WriteCustomTamlSchema getCustomTamlSchema(void) + { + return T::getStaticWriteCustomTamlSchema(); + } - virtual void setData( void* dptr, S32 argc, const char** argv, const EnumTable* tbl, BitSet32 flag ) - { - if( argc == 1 ) - { - T** obj = ( T** ) dptr; - *obj = dynamic_cast< T* >( T::__findObject( argv[ 0 ] ) ); - } - else - Con::errorf( "Cannot set multiple args to a single ConsoleObject*."); - } - - virtual const char* getData( void* dptr, const EnumTable* tbl, BitSet32 flag ) + static EnginePropertyTable _smPropertyTable; + static EnginePropertyTable& smPropertyTable; + + ConcreteAbstractClassRep(const char* name, + const char* conTypeName, + S32* conTypeIdPtr, + S32 netClassGroupMask, + S32 netClassType, + S32 netEventDir, + AbstractClassRep* parent, + const char* (*parentDesc)()) + : AbstractClassRep(conTypeIdPtr, conTypeName) + { + mClassName = StringTable->insert(name); + mCategory = T::__category(); + mTypeInfo = _MAPTYPE< T >(); + + if (mTypeInfo) + const_cast< EngineTypeInfo* >(mTypeInfo)->mPropertyTable = &smPropertyTable; + + if (&T::__description != parentDesc) + mDescription = T::__description(); + + // Clean up mClassId + for (U32 i = 0; i < NetClassGroupsCount; i++) + mClassId[i] = -1; + + // Set properties for this ACR + mClassType = netClassType; + mClassGroupMask = netClassGroupMask; + mNetEventDir = netEventDir; + parentClass = parent; + mClassSizeof = sizeof(T); + + // Finally, register ourselves. + registerClassRep(this); + }; + + /// Wrap constructor. + ConsoleObject* create() const { return NULL; } + + /// Perform class specific initialization tasks. + /// + /// Link namespaces, call initPersistFields() and consoleInit(). + void init() + { + // Get handle to our parent class, if any, and ourselves (we are our parent's child). + AbstractClassRep *parent = T::getParentStaticClassRep(); + AbstractClassRep *child = T::getStaticClassRep(); + + // If we got reps, then link those namespaces! (To get proper inheritance.) + if (parent && child) + Con::classLinkNamespaces(parent->getNameSpace(), child->getNameSpace()); + + // Finally, do any class specific initialization... + T::initPersistFields(); + T::consoleInit(); + + // Let the base finish up. + AbstractClassRep::init(); + } + + /// @name Console Type Interface + /// @{ + + virtual void setData(void* dptr, S32 argc, const char** argv, const EnumTable* tbl, BitSet32 flag) + { + if (argc == 1) { - T** obj = ( T** ) dptr; - return Con::getReturnBuffer( T::__getObjectId( *obj ) ); + T** obj = (T**)dptr; + *obj = dynamic_cast< T* >(T::__findObject(argv[0])); } - - virtual const char* getTypeClassName() { return mClassName; } - virtual const bool isDatablock() { return T::__smIsDatablock; }; - - /// @} -}; + else + Con::errorf("Cannot set multiple args to a single ConsoleObject*."); + } + + virtual const char* getData(void* dptr, const EnumTable* tbl, BitSet32 flag) + { + T** obj = (T**)dptr; + return Con::getReturnBuffer(T::__getObjectId(*obj)); + } + + virtual const char* getTypeClassName() { return mClassName; } + virtual const bool isDatablock() { return T::__smIsDatablock; }; -template< typename T > EnginePropertyTable ConcreteClassRep< T >::_smPropertyTable( 0, NULL ); -template< typename T > EnginePropertyTable& ConcreteClassRep< T >::smPropertyTable = ConcreteClassRep< T >::_smPropertyTable; + /// @} + }; + + template< class T > + class ConcreteClassRep : public ConcreteAbstractClassRep + { + public: + ConcreteClassRep(const char* name, + const char* conTypeName, + S32* conTypeIdPtr, + S32 netClassGroupMask, + S32 netClassType, + S32 netEventDir, + AbstractClassRep* parent, + const char* (*parentDesc)()) + : ConcreteAbstractClassRep(name, conTypeName, conTypeIdPtr, netClassGroupMask, netClassType, netEventDir, parent, parentDesc) + { + } + + /// Wrap constructor. + ConsoleObject* create() const { return new T; } +}; +template< typename T > EnginePropertyTable ConcreteAbstractClassRep< T >::_smPropertyTable(0, NULL); +template< typename T > EnginePropertyTable& ConcreteAbstractClassRep< T >::smPropertyTable = ConcreteAbstractClassRep< T >::_smPropertyTable; //------------------------------------------------------------------------------ // Forward declaration of this function so it can be used in the class const char *defaultProtectedGetFn( void *obj, const char *data ); - +bool defaultProtectedWriteFn(void* obj, StringTableEntry pFieldName); //============================================================================= // ConsoleObject. @@ -712,7 +768,7 @@ const char *defaultProtectedGetFn( void *obj, const char *data ); class ConsoleObject : public EngineObject { DECLARE_ABSTRACT_CLASS( ConsoleObject, EngineObject ); - + protected: /// @deprecated This is disallowed. @@ -721,16 +777,25 @@ class ConsoleObject : public EngineObject public: ConsoleObject() {} - + /// Get a reference to a field by name. const AbstractClassRep::Field *findField(StringTableEntry fieldName) const; /// Gets the ClassRep. virtual AbstractClassRep* getClassRep() const; +#define DECLARE_ABSTRACT_CONOBJECT( className ) \ + DECLARE_ABSTRACT_CLASS( className, Parent ); \ + static S32 _smTypeId; \ + static ConcreteAbstractClassRep< className > dynClassRep; \ + static AbstractClassRep* getParentStaticClassRep(); \ + static AbstractClassRep* getStaticClassRep(); \ + static SimObjectRefConsoleBaseType< className > ptrRefType; \ + virtual AbstractClassRep* getClassRep() const + /// Set the value of a field. bool setField(const char *fieldName, const char *value); - + public: /// @name Object Creation @@ -760,11 +825,11 @@ class ConsoleObject : public EngineObject static void endGroup(const char* in_pGroupname); /// Marks the start of a fixed size array of fields. - /// @see console_autodoc + /// @see console_autodoc static void addArray( const char *arrayName, S32 count ); /// Marks the end of an array of fields. - /// @see console_autodoc + /// @see console_autodoc static void endArray( const char *arrayName ); /// Register a complex field. @@ -781,6 +846,14 @@ class ConsoleObject : public EngineObject const char* in_pFieldDocs = NULL, U32 flags = 0 ); + static void addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); + /// Register a simple field. /// /// @param in_pFieldname Name of the field. @@ -793,6 +866,13 @@ class ConsoleObject : public EngineObject const char* in_pFieldDocs, U32 flags = 0 ); + static void addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags = 0); + /// Register a validated field. /// /// A validated field is just like a normal field except that you can't @@ -821,10 +901,20 @@ class ConsoleObject : public EngineObject const U32 in_fieldType, const dsize_t in_fieldOffset, AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const U32 in_elementCount, - const char* in_pFieldDocs = NULL, - U32 flags = 0 ); + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + AbstractClassRep::WriteDataNotify in_writeDataFn = &defaultProtectedWriteFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); + + static void addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); /// Register a simple protected field. /// @@ -839,8 +929,17 @@ class ConsoleObject : public EngineObject const dsize_t in_fieldOffset, AbstractClassRep::SetDataNotify in_setDataFn, AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + AbstractClassRep::WriteDataNotify in_writeDataFn = &defaultProtectedWriteFn, const char* in_pFieldDocs = NULL, - U32 flags = 0 ); + U32 flags = 0); + + static void addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + const char* in_pFieldDocs = NULL, + U32 flags = 0); /// Add a deprecated field. /// @@ -855,16 +954,16 @@ class ConsoleObject : public EngineObject static bool removeField(const char* in_pFieldname); /// @} - + /// @name Logging /// @{ - + /// Overload this in subclasses to change the message formatting. /// @param fmt A printf style format string. /// @param args A va_list containing the args passed ot a log function. /// @note It is suggested that you use String::VToString. virtual String _getLogMessage(const char* fmt, va_list args) const; - + /// @} public: @@ -873,16 +972,16 @@ class ConsoleObject : public EngineObject /// These functions will try to print out a message along the lines /// of "ObjectClass - ObjectName(ObjectId) - formatted message" /// @{ - + /// Logs with Con::printf. void logMessage(const char* fmt, ...) const; - + /// Logs with Con::warnf. void logWarning(const char* fmt, ...) const; - + /// Logs with Con::errorf. void logError(const char* fmt, ...) const; - + /// @} /// Register dynamic fields in a subclass of ConsoleObject. @@ -943,16 +1042,16 @@ class ConsoleObject : public EngineObject static const char* __category() { return ""; } static const char* __description() { return ""; } - + /// Subclasses of ConsoleObjects that are datablocks should redefine this static member variable /// and set it to true. static const bool __smIsDatablock = false; - + /// @name Object IDs and lookup. /// For a subclass hierarchy based on ConsoleObject to become functional for use as a console object type, /// the hierarchy must implement a naming scheme and indexing function for looking up objects by name. /// @{ - + static ConsoleObject* __findObject( const char* ) { return NULL; } static const char* __getObjectId( ConsoleObject* ) { return ""; } }; @@ -1045,11 +1144,13 @@ inline bool& ConsoleObject::getDynamicGroupExpand() static AbstractClassRep* getParentStaticClassRep(); \ static AbstractClassRep* getStaticClassRep(); \ static SimObjectRefConsoleBaseType< className > ptrRefType; \ - virtual AbstractClassRep* getClassRep() const - + static AbstractClassRep::WriteCustomTamlSchema getStaticWriteCustomTamlSchema(); \ + static AbstractClassRep* getContainerChildStaticClassRep(); \ + virtual AbstractClassRep* getClassRep() const + #define DECLARE_CATEGORY( string ) \ static const char* __category() { return string; } - + #define DECLARE_DESCRIPTION( string ) \ static const char* __description() { return string; } @@ -1061,8 +1162,56 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_CHILDREN( className ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_SCHEMA( className, schema ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_CHILDREN_SCHEMA( className, schema ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) +#define IMPLEMENT_ABSTRACT_CONOBJECT( className ) \ + IMPLEMENT_NONINSTANTIABLE_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + ConcreteAbstractClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + #define IMPLEMENT_CO_NETOBJECT_V1( className ) \ IMPLEMENT_CLASS( className, NULL ) \ END_IMPLEMENT_CLASS; \ @@ -1071,6 +1220,8 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeObject, 0, className::getParentStaticClassRep(), &Parent::__description ) #define IMPLEMENT_CO_DATABLOCK_V1( className ) \ @@ -1081,8 +1232,10 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep(#className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeDataBlock, 0, className::getParentStaticClassRep(), &Parent::__description ) - + // Support for adding properties to classes CONOBJECT style. #define PROPERTY_TABLE( className ) \ namespace { namespace _ ## className { \ @@ -1092,13 +1245,13 @@ inline bool& ConsoleObject::getDynamicGroupExpand() ConcreteClassRep< className >::smPropertyTable = _ ## className::_propTable; \ namespace { namespace _ ## className { \ EnginePropertyTable::Property _props[] = { - + #define END_PROPERTY_TABLE \ { NULL } \ }; \ EnginePropertyTable _propTable( sizeof( _props ) / sizeof( _props[ 0 ] ) - 1, _props ); \ } } - + /// Add an auto-doc for a class. #define ConsoleDocClass( className, docString ) \ CLASSDOC( className, docString ) @@ -1108,7 +1261,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() //------------------------------------------------------------------------------ // Protected field default get/set functions // -// The reason for these functions is that it will save one branch per console +// The reason for these functions is that it will save one branch per console // data request and script functions will still execute at the same speed as // before the modifications to allow protected static fields. These will just // inline and the code should be roughly the same size, and just as fast as @@ -1133,6 +1286,21 @@ inline const char *emptyStringProtectedGetFn( void *obj, const char *data ) return ""; } +inline bool defaultProtectedWriteFn(void* obj, StringTableEntry pFieldName) +{ + return true; +} + +inline bool defaultProtectedNotSetFn(void* obj, const char *array, const char* data) +{ + return false; +} + +inline bool defaultProtectedNotWriteFn(void* obj, StringTableEntry pFieldName) +{ + return false; +} + /// @} #endif //_CONSOLEOBJECT_H_ diff --git a/Engine/source/console/consoleTypes.cpp b/Engine/source/console/consoleTypes.cpp index 5f0abcbb6d..09765bf34e 100644 --- a/Engine/source/console/consoleTypes.cpp +++ b/Engine/source/console/consoleTypes.cpp @@ -34,7 +34,7 @@ //----------------------------------------------------------------------------- // TypeString //----------------------------------------------------------------------------- -ConsoleType( string, TypeString, const char* ) +ConsoleType( string, TypeString, const char*, "" ) ImplementConsoleTypeCasters( TypeString, const char* ); ConsoleGetType( TypeString ) @@ -53,7 +53,7 @@ ConsoleSetType( TypeString ) //----------------------------------------------------------------------------- // TypeCaseString //----------------------------------------------------------------------------- -ConsoleType( caseString, TypeCaseString, const char* ) +ConsoleType(caseString, TypeCaseString, const char*, "") ConsoleSetType( TypeCaseString ) { @@ -71,7 +71,7 @@ ConsoleGetType( TypeCaseString ) //----------------------------------------------------------------------------- // TypeRealString //----------------------------------------------------------------------------- -ConsoleType( string, TypeRealString, String ) +ConsoleType(string, TypeRealString, String, "") ImplementConsoleTypeCasters( TypeRealString, String ) ConsoleGetType( TypeRealString ) @@ -94,7 +94,7 @@ ConsoleSetType( TypeRealString ) //----------------------------------------------------------------------------- // TypeCommand //----------------------------------------------------------------------------- -ConsoleType( string, TypeCommand, String ) +ConsoleType(string, TypeCommand, String, "") ConsoleGetType( TypeCommand ) { @@ -284,7 +284,7 @@ ConsoleProcessData( TypeShapeFilename ) //----------------------------------------------------------------------------- // TypeS8 //----------------------------------------------------------------------------- -ConsoleType( char, TypeS8, S8 ) +ConsoleType(char, TypeS8, S8, "") ImplementConsoleTypeCasters( TypeS8, S8 ) ConsoleGetType( TypeS8 ) @@ -306,7 +306,7 @@ ConsoleSetType( TypeS8 ) //----------------------------------------------------------------------------- // TypeS32 //----------------------------------------------------------------------------- -ConsoleType( int, TypeS32, S32 ) +ConsoleType(int, TypeS32, S32, "") ImplementConsoleTypeCasters(TypeS32, S32) ConsoleGetType( TypeS32 ) @@ -329,7 +329,7 @@ ConsoleSetType( TypeS32 ) //----------------------------------------------------------------------------- // TypeS32Vector //----------------------------------------------------------------------------- -ConsoleType( intList, TypeS32Vector, Vector ) +ConsoleType(intList, TypeS32Vector, Vector, "") ImplementConsoleTypeCasters( TypeS32Vector, Vector< S32 > ) ConsoleGetType( TypeS32Vector ) @@ -386,7 +386,7 @@ ConsoleSetType( TypeS32Vector ) //----------------------------------------------------------------------------- // TypeF32 //----------------------------------------------------------------------------- -ConsoleType( float, TypeF32, F32 ) +ConsoleType(float, TypeF32, F32, "") ImplementConsoleTypeCasters(TypeF32, F32) ConsoleGetType( TypeF32 ) @@ -407,7 +407,7 @@ ConsoleSetType( TypeF32 ) //----------------------------------------------------------------------------- // TypeF32Vector //----------------------------------------------------------------------------- -ConsoleType( floatList, TypeF32Vector, Vector ) +ConsoleType(floatList, TypeF32Vector, Vector, "") ImplementConsoleTypeCasters( TypeF32Vector, Vector< F32 > ) ConsoleGetType( TypeF32Vector ) @@ -464,7 +464,7 @@ ConsoleSetType( TypeF32Vector ) //----------------------------------------------------------------------------- // TypeBool //----------------------------------------------------------------------------- -ConsoleType( bool, TypeBool, bool ) +ConsoleType(bool, TypeBool, bool, "") ImplementConsoleTypeCasters( TypeBool, bool ) ConsoleGetType( TypeBool ) @@ -484,7 +484,7 @@ ConsoleSetType( TypeBool ) //----------------------------------------------------------------------------- // TypeBoolVector //----------------------------------------------------------------------------- -ConsoleType( boolList, TypeBoolVector, Vector ) +ConsoleType(boolList, TypeBoolVector, Vector, "") ImplementConsoleTypeCasters( TypeBoolVector, Vector< bool > ) ConsoleGetType( TypeBoolVector ) @@ -541,7 +541,7 @@ ConsoleSetType( TypeBoolVector ) //----------------------------------------------------------------------------- // TypeFlag //----------------------------------------------------------------------------- -ConsoleType( flag, TypeFlag, S32 ) +ConsoleType(flag, TypeFlag, S32, "") ConsoleGetType( TypeFlag ) { @@ -567,7 +567,7 @@ ConsoleSetType( TypeFlag ) //----------------------------------------------------------------------------- // TypeColorF //----------------------------------------------------------------------------- -ConsoleType( ColorF, TypeColorF, ColorF ) +ConsoleType(ColorF, TypeColorF, ColorF, "") ImplementConsoleTypeCasters( TypeColorF, ColorF ) ConsoleGetType( TypeColorF ) @@ -640,7 +640,7 @@ ConsoleSetType( TypeColorF ) //----------------------------------------------------------------------------- // TypeColorI //----------------------------------------------------------------------------- -ConsoleType( ColorI, TypeColorI, ColorI ) +ConsoleType(ColorI, TypeColorI, ColorI, "") ImplementConsoleTypeCasters( TypeColorI, ColorI ) ConsoleGetType( TypeColorI ) @@ -710,10 +710,35 @@ ConsoleSetType( TypeColorI ) Con::printf("Color must be set as { r, g, b [,a] }, { r g b [b] } or { stockColorName }"); } +//----------------------------------------------------------------------------- +// TypeSimObjectPtr +//----------------------------------------------------------------------------- +ConsoleType(SimObject, TypeSimObjectPtr, SimObject*, "") + +ConsoleSetType(TypeSimObjectPtr) +{ + if (argc == 1) + { + SimObject **obj = (SimObject **)dptr; + *obj = Sim::findObject(argv[0]); + } + else + Con::printf("(TypeSimObjectPtr) Cannot set multiple args to a single S32."); +} + +ConsoleGetType(TypeSimObjectPtr) +{ + SimObject **obj = (SimObject**)dptr; + static const U32 bufSize = 128; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%s", *obj ? (*obj)->getName() ? (*obj)->getName() : (*obj)->getIdString() : ""); + return returnBuffer; +} + //----------------------------------------------------------------------------- // TypeSimObjectName //----------------------------------------------------------------------------- -ConsoleType( SimObject, TypeSimObjectName, SimObject* ) +ConsoleType(SimObject, TypeSimObjectName, SimObject*, "") ConsoleSetType( TypeSimObjectName ) { @@ -738,7 +763,7 @@ ConsoleGetType( TypeSimObjectName ) //----------------------------------------------------------------------------- // TypeName //----------------------------------------------------------------------------- -ConsoleType( string, TypeName, const char* ) +ConsoleType(string, TypeName, const char*, "") ConsoleGetType( TypeName ) { @@ -753,7 +778,7 @@ ConsoleSetType( TypeName ) //------------------------------------------------------------------------------ // TypeParticleParameterString //------------------------------------------------------------------------------ -ConsoleType( string, TypeParticleParameterString, const char* ) +ConsoleType(string, TypeParticleParameterString, const char*, "") ConsoleGetType( TypeParticleParameterString ) { @@ -772,7 +797,7 @@ ConsoleSetType( TypeParticleParameterString ) // TypeMaterialName //----------------------------------------------------------------------------- -ConsoleType( string, TypeMaterialName, String ) +ConsoleType(string, TypeMaterialName, String, "") ConsoleGetType( TypeMaterialName ) { @@ -794,7 +819,7 @@ ConsoleSetType( TypeMaterialName ) // TypeTerrainMaterialIndex //----------------------------------------------------------------------------- -ConsoleType( int, TypeTerrainMaterialIndex, S32 ) +ConsoleType(int, TypeTerrainMaterialIndex, S32, "") ConsoleGetType( TypeTerrainMaterialIndex ) { @@ -816,7 +841,7 @@ ConsoleSetType( TypeTerrainMaterialIndex ) // TypeTerrainMaterialName //----------------------------------------------------------------------------- -ConsoleType( string, TypeTerrainMaterialName, const char* ) +ConsoleType(string, TypeTerrainMaterialName, const char*, "") ConsoleGetType( TypeTerrainMaterialName ) { @@ -835,7 +860,7 @@ ConsoleSetType( TypeTerrainMaterialName ) // TypeCubemapName //----------------------------------------------------------------------------- -ConsoleType( string, TypeCubemapName, String ) +ConsoleType(string, TypeCubemapName, String, "") ConsoleGetType( TypeCubemapName ) { @@ -856,7 +881,7 @@ ConsoleSetType( TypeCubemapName ) //----------------------------------------------------------------------------- // TypeRectUV //----------------------------------------------------------------------------- -ConsoleType( RectF, TypeRectUV, RectF ) +ConsoleType(RectF, TypeRectUV, RectF, "") ConsoleGetType( TypeRectUV ) { @@ -882,7 +907,7 @@ ConsoleSetType( TypeRectUV ) //----------------------------------------------------------------------------- // TypeUUID //----------------------------------------------------------------------------- -ConsoleType( uuid, TypeUUID, Torque::UUID ) +ConsoleType(uuid, TypeUUID, Torque::UUID, "") ImplementConsoleTypeCasters( TypeUUID, Torque::UUID ) ConsoleGetType( TypeUUID ) @@ -906,7 +931,7 @@ ConsoleSetType( TypeUUID ) //----------------------------------------------------------------------------- // TypePID //----------------------------------------------------------------------------- -ConsoleType( pid, TypePID, SimPersistID* ) +ConsoleType(pid, TypePID, SimPersistID*, "") ImplementConsoleTypeCasters( TypePID, SimPersistID* ) ConsoleGetType( TypePID ) @@ -945,7 +970,7 @@ ConsoleSetType( TypePID ) //----------------------------------------------------------------------------- // TypeSimPersistId //----------------------------------------------------------------------------- -ConsoleType( SimPersistId, TypeSimPersistId, SimPersistID* ) +ConsoleType(SimPersistId, TypeSimPersistId, SimPersistID*, "") ConsoleGetType( TypeSimPersistId ) { diff --git a/Engine/source/console/consoleTypes.h b/Engine/source/console/consoleTypes.h index c026b8e1ac..8080a88301 100644 --- a/Engine/source/console/consoleTypes.h +++ b/Engine/source/console/consoleTypes.h @@ -74,6 +74,8 @@ DefineConsoleType( TypeCommand, String ) DefineConsoleType( TypeFilename, const char * ) DefineConsoleType( TypeStringFilename, String ) +DefineConsoleType(TypeRotationF, RotationF) + /// A universally unique identifier. DefineConsoleType( TypeUUID, Torque::UUID ) @@ -123,6 +125,8 @@ DefineConsoleType( TypeColorF, ColorF ) DefineConsoleType( TypeSimObjectName, SimObject* ) DefineConsoleType( TypeShader, GFXShader * ) +DefineConsoleType(TypeSimObjectPtr, SimObject*) + /// A persistent reference to an object. This reference indirectly goes /// through the referenced object's persistent ID. DefineConsoleType( TypeSimPersistId, SimPersistID* ) diff --git a/Engine/source/console/dynamicTypes.h b/Engine/source/console/dynamicTypes.h index 58d69fef08..e06f3e6b3d 100644 --- a/Engine/source/console/dynamicTypes.h +++ b/Engine/source/console/dynamicTypes.h @@ -35,6 +35,9 @@ #include "console/engineTypeInfo.h" #endif +#ifndef _STRINGTABLE_H_ +#include "core/stringTable.h" +#endif /// @file /// Support for legacy TorqueScript console types. @@ -151,6 +154,8 @@ class ConsoleBaseType virtual const bool isDatablock() { return false; }; virtual const char* prepData( const char* data, char* buffer, U32 bufferLen ) { return data; }; + + virtual StringTableEntry getTypePrefix(void) const { return StringTable->EmptyString(); } /// @} }; @@ -259,7 +264,7 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } DefineConsoleType( type, nativeType ) \ template<> inline const EngineTypeInfo* _MAPTYPE< nativeType >() { return NULL; } -#define ConsoleType( typeName, type, nativeType ) \ +#define ConsoleType( typeName, type, nativeType, typePrefix ) \ S32 type; \ class ConsoleType##type : public ConsoleBaseType \ { \ @@ -275,6 +280,7 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } virtual const char *getTypeClassName() { return #typeName ; } \ virtual void *getNativeVariable() { T* var = new T; return (void*)var; } \ virtual void deleteNativeVariable(void* var) { T* nativeVar = reinterpret_cast(var); delete nativeVar; } \ + virtual StringTableEntry getTypePrefix( void ) const { return StringTable->insert( typePrefix ); } \ }; \ ConsoleType ## type gConsoleType ## type ## Instance; @@ -304,6 +310,9 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } }; \ ConsoleType ## type gConsoleType ## type ## Instance; +#define ConsoleTypeFieldPrefix( type, typePrefix ) \ + StringTableEntry ConsoleType##type::getTypePrefix( void ) const { return StringTable->insert( typePrefix ); } + #define ConsoleSetType( type ) \ void ConsoleType##type::setData(void *dptr, S32 argc, const char **argv, const EnumTable *tbl, BitSet32 flag) diff --git a/Engine/source/console/engineTypeInfo.h b/Engine/source/console/engineTypeInfo.h index 88d78eed75..52d713e9eb 100644 --- a/Engine/source/console/engineTypeInfo.h +++ b/Engine/source/console/engineTypeInfo.h @@ -362,7 +362,7 @@ class EngineTypeInfo : public EngineExportScope // them to retroactively install property tables. Will be removed // when the console interop is removed and all classes are migrated // to the new system. - template< typename T > friend class ConcreteClassRep; + template< typename T > friend class ConcreteAbstractClassRep; protected: diff --git a/Engine/source/console/fieldBrushObject.cpp b/Engine/source/console/fieldBrushObject.cpp index 3b6f38b25d..d0eaf541c5 100644 --- a/Engine/source/console/fieldBrushObject.cpp +++ b/Engine/source/console/fieldBrushObject.cpp @@ -216,7 +216,7 @@ DefineConsoleMethod(FieldBrushObject, queryFields, const char*, (const char* sim const AbstractClassRep::FieldList& staticFields = pSimObject->getFieldList(); // Did we specify a groups list? - if ( dStrIsEmpty(groupList) ) + if ( String::isEmpty(groupList) ) { // No, so return all fields... diff --git a/Engine/source/console/fileSystemFunctions.cpp b/Engine/source/console/fileSystemFunctions.cpp index 00ae10f69d..d5ee048caf 100644 --- a/Engine/source/console/fileSystemFunctions.cpp +++ b/Engine/source/console/fileSystemFunctions.cpp @@ -137,7 +137,7 @@ static S32 buildFileList(const char* pattern, bool recurse, bool multiMatch) //----------------------------------------------------------------------------- -DefineEngineFunction( findFirstFile, String, ( const char* pattern, bool recurse ), ( true ), +DefineEngineFunction( findFirstFile, String, ( const char* pattern, bool recurse ), ( "", true ), "@brief Returns the first file in the directory system matching the given pattern.\n\n" "Use the corresponding findNextFile() to step through " @@ -209,7 +209,7 @@ DefineEngineFunction( findNextFile, String, ( const char* pattern ), ( "" ), //----------------------------------------------------------------------------- -DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), ( true ), +DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), ( "", true ), "@brief Returns the number of files in the directory tree that match the given patterns\n\n" "This function differs from getFileCountMultiExpr() in that it supports a single search " @@ -245,7 +245,7 @@ DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), //----------------------------------------------------------------------------- -DefineEngineFunction(findFirstFileMultiExpr, String, ( const char* pattern, bool recurse ), (true), +DefineEngineFunction(findFirstFileMultiExpr, String, ( const char* pattern, bool recurse ), ( "", true), "@brief Returns the first file in the directory system matching the given patterns.\n\n" "Use the corresponding findNextFileMultiExpr() to step through " @@ -327,7 +327,7 @@ DefineEngineFunction(findNextFileMultiExpr, String, ( const char* pattern ), ("" return sgFindFilesResults[sgFindFilesPos++]; } -DefineEngineFunction(getFileCountMultiExpr, S32, ( const char* pattern, bool recurse ), (true), +DefineEngineFunction(getFileCountMultiExpr, S32, ( const char* pattern, bool recurse ), ( "", true), "@brief Returns the number of files in the directory tree that match the given patterns\n\n" "If you're interested in a list of files that match the given patterns and not just " @@ -452,7 +452,7 @@ DefineEngineFunction(stopFileChangeNotifications, void, (),, } -DefineEngineFunction(getDirectoryList, String, ( const char* path, S32 depth ), ( 0 ), +DefineEngineFunction(getDirectoryList, String, ( const char* path, S32 depth ), ( "", 0 ), "@brief Gathers a list of directories starting at the given path.\n\n" "@param path String containing the path of the directory\n" @@ -686,7 +686,7 @@ DefineEngineFunction(getWorkingDirectory, String, (),, // are just string processing functions. They are needed by the 3D tools which // are not currently built with TORQUE_TOOLS defined. -DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ), (""), +DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ), ( "", ""), "@brief Converts a relative file path to a full path\n\n" "For example, \"./console.log\" becomes \"C:/Torque/t3d/examples/FPS Example/game/console.log\"\n" @@ -701,7 +701,7 @@ DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ) return buf; } -DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* to ), (""), +DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* to ), ( "", ""), "@brief Turns a full or local path to a relative one\n\n" "For example, \"./game/art\" becomes \"game/art\"\n" @@ -714,7 +714,7 @@ DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* t return Platform::makeRelativePathName( path, dStrlen(to) > 1 ? to : NULL ); } -DefineEngineFunction(pathConcat, String, ( const char* path, const char* file),, +DefineEngineFunction(pathConcat, String, ( const char* path, const char* file), ( "", ""), "@brief Combines two separate strings containing a file path and file name together into a single string\n\n" "@param path String containing file path\n" @@ -783,7 +783,7 @@ DefineEngineFunction( openFile, void, ( const char* file ),, //----------------------------------------------------------------------------- -DefineEngineFunction( pathCopy, bool, ( const char* fromFile, const char* toFile, bool noOverwrite ), ( true ), +DefineEngineFunction( pathCopy, bool, ( const char* fromFile, const char* toFile, bool noOverwrite ), ( "", "", true ), "@brief Copy a file to a new location.\n" "@param fromFile %Path of the file to copy.\n" "@param toFile %Path where to copy @a fromFile to.\n" diff --git a/Engine/source/console/runtimeClassRep.h b/Engine/source/console/runtimeClassRep.h index d7fd4a797f..d684652cf0 100644 --- a/Engine/source/console/runtimeClassRep.h +++ b/Engine/source/console/runtimeClassRep.h @@ -60,6 +60,27 @@ class RuntimeClassRep : public AbstractClassRep parentClass = parent; }; + virtual AbstractClassRep* getContainerChildClass(const bool recurse) + { + // Fetch container children type. + AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); + if (!recurse || pChildren != NULL) + return pChildren; + + // Fetch parent type. + AbstractClassRep* pParent = T::getParentStaticClassRep(); + if (pParent == NULL) + return NULL; + + // Get parent container children. + return pParent->getContainerChildClass(recurse); + } + + virtual WriteCustomTamlSchema getCustomTamlSchema(void) + { + return T::getStaticWriteCustomTamlSchema(); + } + /// Perform class specific initialization tasks. /// /// Link namespaces, call initPersistFields() and consoleInit(). diff --git a/Engine/source/console/scriptFilename.cpp b/Engine/source/console/scriptFilename.cpp index 649e109eb1..60c81f2005 100644 --- a/Engine/source/console/scriptFilename.cpp +++ b/Engine/source/console/scriptFilename.cpp @@ -230,6 +230,11 @@ bool expandOldScriptFilename(char *filename, U32 size, const char *src) else if (dStrncmp(src, "./", 2) == 0) // dot path means load from current codeblock/mod path slash = dStrrchr(cbName, '/'); + else if (dStrncmp(src, "^", 1) == 0) + { + Platform::makeFullPathName(src + 1, filename, size); + return true; + } else { // otherwise path must be fully specified diff --git a/Engine/source/console/simFieldDictionary.h b/Engine/source/console/simFieldDictionary.h index 7bd8cbbd72..bc865398c0 100644 --- a/Engine/source/console/simFieldDictionary.h +++ b/Engine/source/console/simFieldDictionary.h @@ -49,13 +49,13 @@ class SimFieldDictionary Entry *next; ConsoleBaseType *type; }; -private: enum { HashTableSize = 19 }; Entry *mHashTable[HashTableSize]; +private: static Entry *smFreeList; void freeEntry(Entry *entry); diff --git a/Engine/source/console/simObject.cpp b/Engine/source/console/simObject.cpp index 7ce937c6fd..b07bc68409 100644 --- a/Engine/source/console/simObject.cpp +++ b/Engine/source/console/simObject.cpp @@ -34,7 +34,7 @@ #include "core/frameAllocator.h" #include "core/stream/fileStream.h" #include "core/fileObject.h" - +#include "persistence/taml/tamlCustom.h" IMPLEMENT_CONOBJECT( SimObject ); @@ -437,6 +437,97 @@ SimPersistID* SimObject::getOrCreatePersistentId() return mPersistentId; } + + +void SimObject::onTamlCustomRead(TamlCustomNodes const& customNodes) +{ + // Debug Profiling. + //PROFILE_SCOPE(SimObject_OnTamlCustomRead); + + // Fetch field list. + const AbstractClassRep::FieldList& fieldList = getFieldList(); + const U32 fieldCount = fieldList.size(); + for (U32 index = 0; index < fieldCount; ++index) + { + // Fetch field. + const AbstractClassRep::Field* pField = &fieldList[index]; + + // Ignore if field not appropriate. + if (pField->type == AbstractClassRep::StartArrayFieldType || pField->elementCount > 1) + { + // Find cell custom node. + const TamlCustomNode* pCustomCellNodes = NULL; + if (pField->pGroupname != NULL) + pCustomCellNodes = customNodes.findNode(pField->pGroupname); + if (!pCustomCellNodes) + { + char* niceFieldName = const_cast(pField->pFieldname); + niceFieldName[0] = dToupper(niceFieldName[0]); + String str_niceFieldName = String(niceFieldName); + pCustomCellNodes = customNodes.findNode(str_niceFieldName + "s"); + } + + // Continue if we have explicit cells. + if (pCustomCellNodes != NULL) + { + // Fetch children cell nodes. + const TamlCustomNodeVector& cellNodes = pCustomCellNodes->getChildren(); + + U8 idx = 0; + // Iterate cells. + for (TamlCustomNodeVector::const_iterator cellNodeItr = cellNodes.begin(); cellNodeItr != cellNodes.end(); ++cellNodeItr) + { + char buf[5]; + dSprintf(buf, 5, "%d", idx); + + // Fetch cell node. + TamlCustomNode* pCellNode = *cellNodeItr; + + // Fetch node name. + StringTableEntry nodeName = pCellNode->getNodeName(); + + // Is this a valid alias? + if (nodeName != pField->pFieldname) + { + // No, so warn. + Con::warnf("SimObject::onTamlCustomRead() - Encountered an unknown custom name of '%s'. Only '%s' is valid.", nodeName, pField->pFieldname); + continue; + } + + // Fetch fields. + const TamlCustomFieldVector& fields = pCellNode->getFields(); + + // Iterate property fields. + for (TamlCustomFieldVector::const_iterator fieldItr = fields.begin(); fieldItr != fields.end(); ++fieldItr) + { + // Fetch field. + const TamlCustomField* pField = *fieldItr; + + // Fetch field name. + StringTableEntry fieldName = pField->getFieldName(); + + const AbstractClassRep::Field* field = findField(fieldName); + + // Check common fields. + if (field) + { + setDataField(fieldName, buf, pField->getFieldValue()); + } + else + { + // Unknown name so warn. + Con::warnf("SimObject::onTamlCustomRead() - Encountered an unknown custom field name of '%s'.", fieldName); + continue; + } + } + + idx++; + } + } + } + } +} + //----------------------------------------------------------------------------- bool SimObject::_setPersistentID( void* object, const char* index, const char* data ) @@ -925,6 +1016,220 @@ const char *SimObject::getDataField(StringTableEntry slotName, const char *array return ""; } + +const char *SimObject::getPrefixedDataField(StringTableEntry fieldName, const char *array) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field value with NULL field name."); + + // Fetch field value. + const char* pFieldValue = getDataField(fieldName, array); + + // Sanity. + //AssertFatal(pFieldValue != NULL, "Field value cannot be NULL."); + if (!pFieldValue) + return NULL; + + // Return without the prefix if there's no value. + if (*pFieldValue == 0) + return StringTable->EmptyString(); + + // Fetch the field prefix. + StringTableEntry fieldPrefix = getDataFieldPrefix(fieldName); + + // Sanity! + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Calculate a buffer size including prefix. + const U32 valueBufferSize = dStrlen(fieldPrefix) + dStrlen(pFieldValue) + 1; + + // Fetch a buffer. + char* pValueBuffer = Con::getReturnBuffer(valueBufferSize); + + // Format the value buffer. + dSprintf(pValueBuffer, valueBufferSize, "%s%s", fieldPrefix, pFieldValue); + + return pValueBuffer; +} + +//----------------------------------------------------------------------------- + +void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *array, const char *value) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot set object field value with NULL field name."); + AssertFatal(value != NULL, "Field value cannot be NULL."); + + // Set value without prefix if there's no value. + if (*value == 0) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = getDataFieldPrefix(fieldName); + + // Sanity. + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Do we have a field prefix? + if (fieldPrefix == StringTable->EmptyString()) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so fetch the length of the field prefix. + const U32 fieldPrefixLength = dStrlen(fieldPrefix); + + // Yes, so does it start with the object field prefix? + if (dStrnicmp(value, fieldPrefix, fieldPrefixLength) != 0) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so set the data excluding the prefix. + setDataField(fieldName, NULL, value + fieldPrefixLength); +} + +//----------------------------------------------------------------------------- + +const char *SimObject::getPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const S32 fieldType) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field value with NULL field name."); + + // Fetch field value. + const char* pFieldValue = getDataField(fieldName, array); + + // Sanity. + AssertFatal(pFieldValue != NULL, "Field value cannot be NULL."); + + // Return the field if no field type is specified. + if (fieldType == -1) + return pFieldValue; + + // Return without the prefix if there's no value. + if (*pFieldValue == 0) + return StringTable->EmptyString(); + + // Fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(fieldType); + + // Did we find the console base type? + if (pConsoleBaseType == NULL) + { + // No, so warn. + Con::warnf("getPrefixedDynamicDataField() - Invalid field type '%d' specified for field '%s' with value '%s'.", + fieldType, fieldName, pFieldValue); + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = pConsoleBaseType->getTypePrefix(); + + // Sanity! + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Calculate a buffer size including prefix. + const U32 valueBufferSize = dStrlen(fieldPrefix) + dStrlen(pFieldValue) + 1; + + // Fetch a buffer. + char* pValueBuffer = Con::getReturnBuffer(valueBufferSize); + + // Format the value buffer. + dSprintf(pValueBuffer, valueBufferSize, "%s%s", fieldPrefix, pFieldValue); + + return pValueBuffer; +} + +//----------------------------------------------------------------------------- + +void SimObject::setPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const char *value, const S32 fieldType) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot set object field value with NULL field name."); + AssertFatal(value != NULL, "Field value cannot be NULL."); + + // Set value without prefix if no field type was specified. + if (fieldType == -1) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(fieldType); + + // Did we find the console base type? + if (pConsoleBaseType == NULL) + { + // No, so warn. + Con::warnf("setPrefixedDynamicDataField() - Invalid field type '%d' specified for field '%s' with value '%s'.", + fieldType, fieldName, value); + } + + // Set value without prefix if there's no value or we didn't find the console base type. + if (*value == 0 || pConsoleBaseType == NULL) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = pConsoleBaseType->getTypePrefix(); + + // Sanity. + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Do we have a field prefix? + if (fieldPrefix == StringTable->EmptyString()) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so fetch the length of the field prefix. + const U32 fieldPrefixLength = dStrlen(fieldPrefix); + + // Yes, so does it start with the object field prefix? + if (dStrnicmp(value, fieldPrefix, fieldPrefixLength) != 0) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so set the data excluding the prefix. + setDataField(fieldName, NULL, value + fieldPrefixLength); +} + +//----------------------------------------------------------------------------- + +StringTableEntry SimObject::getDataFieldPrefix(StringTableEntry fieldName) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field prefix with NULL field name."); + + // Find the field. + const AbstractClassRep::Field* pField = findField(fieldName); + + // Return nothing if field was not found. + if (pField == NULL) + return StringTable->EmptyString(); + + // Yes, so fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(pField->type); + + // Fetch the type prefix. + return pConsoleBaseType->getTypePrefix(); +} + + //----------------------------------------------------------------------------- U32 SimObject::getDataFieldType( StringTableEntry slotName, const char* array ) diff --git a/Engine/source/console/simObject.h b/Engine/source/console/simObject.h index 0ea3f155a7..8a38e86753 100644 --- a/Engine/source/console/simObject.h +++ b/Engine/source/console/simObject.h @@ -33,6 +33,9 @@ #include "core/bitSet.h" #endif +#ifndef _TAML_CALLBACKS_H_ +#include "persistence/taml/tamlCallbacks.h" +#endif class Stream; class LightManager; @@ -226,7 +229,7 @@ class SimPersistID; /// set automatically by the console constructor code. /// /// @nosubgrouping -class SimObject: public ConsoleObject +class SimObject: public ConsoleObject, public TamlCallbacks { public: @@ -298,6 +301,8 @@ class SimObject: public ConsoleObject /// Flags internal to the object management system. BitSet32 mFlags; + StringTableEntry mProgenitorFile; + /// Object we are copying fields from. SimObject* mCopySource; @@ -348,13 +353,42 @@ class SimObject: public ConsoleObject static bool setSuperClass(void *object, const char *index, const char *data) { static_cast(object)->setSuperClassNamespace(data); return false; }; + static bool writeObjectName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->objectName != NULL && simObject->objectName != StringTable->EmptyString(); } + static bool writeCanSaveDynamicFields(void* obj, StringTableEntry pFieldName) + { return static_cast(obj)->mCanSaveFieldDictionary == false; } + static bool writeInternalName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mInternalName != NULL && simObject->mInternalName != StringTable->EmptyString(); } + static bool setParentGroup(void* obj, const char* data); + static bool writeParentGroup(void* obj, StringTableEntry pFieldName) + { return static_cast(obj)->mGroup != NULL; } + static bool writeSuperclass(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mSuperClassName != NULL && simObject->mSuperClassName != StringTable->EmptyString(); } + static bool writeClass(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mClassName != NULL && simObject->mClassName != StringTable->EmptyString(); } + static bool writeClassName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mClassName != NULL && simObject->mClassName != StringTable->EmptyString(); } + + // Group hierarchy protected set method static bool setProtectedParent(void *object, const char *index, const char *data); // Object name protected set method static bool setProtectedName(void *object, const char *index, const char *data); + public: + inline void setProgenitorFile(const char* pFile) { mProgenitorFile = StringTable->insert(pFile); } + inline StringTableEntry getProgenitorFile(void) const { return mProgenitorFile; } + protected: + /// Taml callbacks. + virtual void onTamlPreWrite(void) {} + virtual void onTamlPostWrite(void) {} + virtual void onTamlPreRead(void) {} + virtual void onTamlPostRead(const TamlCustomNodes& customNodes) {} + virtual void onTamlAddParent(SimObject* pParentObject) {} + virtual void onTamlCustomWrite(TamlCustomNodes& customNodes) {} + virtual void onTamlCustomRead(const TamlCustomNodes& customNodes); /// Id number for this object. SimObjectId mId; @@ -461,6 +495,16 @@ class SimObject: public ConsoleObject /// @param value Value to store. void setDataField(StringTableEntry slotName, const char *array, const char *value); + const char *getPrefixedDataField(StringTableEntry fieldName, const char *array); + + void setPrefixedDataField(StringTableEntry fieldName, const char *array, const char *value); + + const char *getPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const S32 fieldType = -1); + + void setPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const char *value, const S32 fieldType = -1); + + StringTableEntry getDataFieldPrefix(StringTableEntry fieldName); + /// Get the type of a field on the object. /// /// @param slotName Field to access. @@ -562,6 +606,10 @@ class SimObject: public ConsoleObject /// Called when the object's name is changed. virtual void onNameChange(const char *name); + /// Called when the adding of the object to the sim is complete, all sub-objects have been processed as well + // This is a special-case function that only really gets used with Entities/BehaviorObjects. + virtual void onPostAdd() {} + /// /// Specifically, these are called by setDataField /// when a static or dynamic field is modified, see diff --git a/Engine/source/console/simSet.cpp b/Engine/source/console/simSet.cpp index f1f77ee4f4..c44b09c36e 100644 --- a/Engine/source/console/simSet.cpp +++ b/Engine/source/console/simSet.cpp @@ -233,8 +233,11 @@ void SimSet::callOnChildren( const String &method, S32 argc, ConsoleValueRef arg { // Prep the arguments for the console exec... // Make sure and leave args[1] empty. - ConsoleValueRef args[21]; - args[0] = method.c_str(); + ConsoleValueRef args[21] = { }; + ConsoleValue name_method; + name_method.setStackStringValue(method.c_str()); + args[0] = ConsoleValueRef::fromValue(&name_method); + for (S32 i = 0; i < argc; i++) args[i + 2] = argv[i]; diff --git a/Engine/source/console/simSet.h b/Engine/source/console/simSet.h index f5e634262d..9712e79451 100644 --- a/Engine/source/console/simSet.h +++ b/Engine/source/console/simSet.h @@ -39,6 +39,7 @@ #include "core/util/tSignal.h" #endif +#include "persistence/taml/tamlChildren.h" //--------------------------------------------------------------------------- /// A set of SimObjects. @@ -89,7 +90,7 @@ /// } /// @endcode /// -class SimSet: public SimObject +class SimSet : public SimObject, public TamlChildren { public: @@ -152,8 +153,10 @@ class SimSet: public SimObject iterator end() { return objectList.end(); } value operator[] (S32 index) { return objectList[U32(index)]; } - iterator find( iterator first, iterator last, SimObject *obj) + inline iterator find( iterator first, iterator last, SimObject *obj) { return ::find(first, last, obj); } + inline iterator find(SimObject *obj) + { return ::find(begin(), end(), obj); } /// Reorder the position of "obj" to either be the last object in the list or, if /// "target" is given, to come before "target" in the list of children. @@ -222,7 +225,7 @@ class SimSet: public SimObject /// @note The child sets themselves count towards the total too. U32 sizeRecursive(); - SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren = false); + virtual SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren = false); SimObject* findObjectByLineNumber(const char* fileName, S32 declarationLine, bool searchChildren = false); /// Find the given object in this set. Returns NULL if the object @@ -277,6 +280,32 @@ class SimSet: public SimObject virtual bool readObject(Stream *stream); virtual SimSet* clone(); + + // TamlChildren + virtual U32 getTamlChildCount(void) const + { + return (U32)size(); + } + + virtual SimObject* getTamlChild(const U32 childIndex) const + { + // Sanity! + AssertFatal(childIndex < (U32)size(), "SimSet::getTamlChild() - Child index is out of range."); + + // For when the assert is not used. + if (childIndex >= (U32)size()) + return NULL; + + return at(childIndex); + } + + virtual void addTamlChild(SimObject* pSimObject) + { + // Sanity! + AssertFatal(pSimObject != NULL, "SimSet::addTamlChild() - Cannot add a NULL child object."); + + addObject(pSimObject); + } }; #ifdef TORQUE_DEBUG_GUARD diff --git a/Engine/source/core/color.h b/Engine/source/core/color.h index b0620fc4f6..1fa5d76769 100644 --- a/Engine/source/core/color.h +++ b/Engine/source/core/color.h @@ -30,6 +30,10 @@ #include "math/mPoint4.h" #endif +#ifndef _ENGINEAPI_H_ +#include "console/engineAPI.h" +#endif + class ColorI; @@ -121,9 +125,20 @@ class ColorI U8 blue; U8 alpha; + struct Hsb + { + Hsb() :hue(0), sat(0), brightness(0){}; + Hsb(U32 h, U32 s, U32 b) :hue(h), sat(s), brightness(b){}; + + U32 hue; ///Hue + U32 sat; ///Saturation + U32 brightness; //Brightness/Value/Lightness + }; + public: ColorI() { } ColorI(const ColorI& in_rCopy); + ColorI(const Hsb& color); ColorI(const U8 in_r, const U8 in_g, const U8 in_b, @@ -132,6 +147,12 @@ class ColorI ColorI( const char* pStockColorName ); + void set(const Hsb& color); + + void HSLtoRGB_Subfunction(U32& c, const F64& temp1, const F64& temp2, const F64& temp3); + + void set(const String& hex); + void set(const U8 in_r, const U8 in_g, const U8 in_b, @@ -176,6 +197,11 @@ class ColorI U16 get565() const; U16 get4444() const; + Hsb getHSB() const; + + String getHex() const; + S32 convertFromHex(const String& hex) const; + operator ColorF() const; operator const U8*() const { return &red; } @@ -459,6 +485,174 @@ inline void ColorI::set(const ColorI& in_rCopy, alpha = in_a; } +inline void ColorI::set(const Hsb& color) +{ + U32 r = 0; + U32 g = 0; + U32 b = 0; + + F64 L = ((F64)color.brightness) / 100.0; + F64 S = ((F64)color.sat) / 100.0; + F64 H = ((F64)color.hue) / 360.0; + + if (color.sat == 0) + { + r = color.brightness; + g = color.brightness; + b = color.brightness; + } + else + { + F64 temp1 = 0; + if (L < 0.50) + { + temp1 = L*(1 + S); + } + else + { + temp1 = L + S - (L*S); + } + + F64 temp2 = 2.0*L - temp1; + + F64 temp3 = 0; + for (S32 i = 0; i < 3; i++) + { + switch (i) + { + case 0: // red + { + temp3 = H + 0.33333; + if (temp3 > 1.0) + temp3 -= 1.0; + HSLtoRGB_Subfunction(r, temp1, temp2, temp3); + break; + } + case 1: // green + { + temp3 = H; + HSLtoRGB_Subfunction(g, temp1, temp2, temp3); + break; + } + case 2: // blue + { + temp3 = H - 0.33333; + if (temp3 < 0) + temp3 += 1; + HSLtoRGB_Subfunction(b, temp1, temp2, temp3); + break; + } + default: + { + + } + } + } + } + red = (U32)((((F64)r) / 100) * 255); + green = (U32)((((F64)g) / 100) * 255); + blue = (U32)((((F64)b) / 100) * 255); +} + +// This is a subfunction of HSLtoRGB +inline void ColorI::HSLtoRGB_Subfunction(U32& c, const F64& temp1, const F64& temp2, const F64& temp3) +{ + if ((temp3 * 6.0) < 1.0) + c = (U32)((temp2 + (temp1 - temp2)*6.0*temp3)*100.0); + else + if ((temp3 * 2.0) < 1.0) + c = (U32)(temp1*100.0); + else + if ((temp3 * 3.0) < 2.0) + c = (U32)((temp2 + (temp1 - temp2)*(0.66666 - temp3)*6.0)*100.0); + else + c = (U32)(temp2*100.0); + return; +} + +inline void ColorI::set(const String& hex) +{ + String redString; + String greenString; + String blueString; + + //if the prefix # was attached to hex + if (hex[0] == '#') + { + redString = hex.substr(1, 2); + greenString = hex.substr(3, 2); + blueString = hex.substr(5, 2); + } + else + { + // since there is no prefix attached to hex + redString = hex.substr(0, 2); + greenString = hex.substr(2, 2); + blueString = hex.substr(4, 2); + } + + red = (U8)(convertFromHex(redString)); + green = (U8)(convertFromHex(greenString)); + blue = (U8)(convertFromHex(blueString)); +} + +inline S32 ColorI::convertFromHex(const String& hex) const +{ + S32 hexValue = 0; + + S32 a = 0; + S32 b = hex.length() - 1; + + for (; b >= 0; a++, b--) + { + if (hex[b] >= '0' && hex[b] <= '9') + { + hexValue += (hex[b] - '0') * (1 << (a * 4)); + } + else + { + switch (hex[b]) + { + case 'A': + case 'a': + hexValue += 10 * (1 << (a * 4)); + break; + + case 'B': + case 'b': + hexValue += 11 * (1 << (a * 4)); + break; + + case 'C': + case 'c': + hexValue += 12 * (1 << (a * 4)); + break; + + case 'D': + case 'd': + hexValue += 13 * (1 << (a * 4)); + break; + + case 'E': + case 'e': + hexValue += 14 * (1 << (a * 4)); + break; + + case 'F': + case 'f': + hexValue += 15 * (1 << (a * 4)); + break; + + default: + Con::errorf("Error, invalid character '%c' in hex number", hex[a]); + break; + } + } + } + + return hexValue; +} + inline ColorI::ColorI(const ColorI& in_rCopy) { red = in_rCopy.red; @@ -467,6 +661,11 @@ inline ColorI::ColorI(const ColorI& in_rCopy) alpha = in_rCopy.alpha; } +inline ColorI::ColorI(const Hsb& color) +{ + set(color); +} + inline ColorI::ColorI(const U8 in_r, const U8 in_g, const U8 in_b, @@ -503,6 +702,7 @@ inline ColorI& ColorI::operator*=(const S32 in_mul) inline ColorI& ColorI::operator/=(const S32 in_mul) { + AssertFatal(in_mul != 0.0f, "Error, div by zero..."); red = red / in_mul; green = green / in_mul; blue = blue / in_mul; @@ -647,6 +847,91 @@ inline U16 ColorI::get4444() const U16(U16(blue >> 4) << 0)); } +inline ColorI::Hsb ColorI::getHSB() const +{ + F64 rPercent = ((F64)red) / 255; + F64 gPercent = ((F64)green) / 255; + F64 bPercent = ((F64)blue) / 255; + + F64 maxColor = 0.0; + if ((rPercent >= gPercent) && (rPercent >= bPercent)) + maxColor = rPercent; + if ((gPercent >= rPercent) && (gPercent >= bPercent)) + maxColor = gPercent; + if ((bPercent >= rPercent) && (bPercent >= gPercent)) + maxColor = bPercent; + + F64 minColor = 0.0; + if ((rPercent <= gPercent) && (rPercent <= bPercent)) + minColor = rPercent; + if ((gPercent <= rPercent) && (gPercent <= bPercent)) + minColor = gPercent; + if ((bPercent <= rPercent) && (bPercent <= gPercent)) + minColor = bPercent; + + F64 H = 0.0; + F64 S = 0.0; + F64 B = 0.0; + + B = (maxColor + minColor) / 2.0; + + if (maxColor == minColor) + { + H = 0.0; + S = 0.0; + } + else + { + if (B < 0.50) + { + S = (maxColor - minColor) / (maxColor + minColor); + } + else + { + S = (maxColor - minColor) / (2.0 - maxColor - minColor); + } + if (maxColor == rPercent) + { + H = (gPercent - bPercent) / (maxColor - minColor); + } + if (maxColor == gPercent) + { + H = 2.0 + (bPercent - rPercent) / (maxColor - minColor); + } + if (maxColor == bPercent) + { + H = 4.0 + (rPercent - gPercent) / (maxColor - minColor); + } + } + + ColorI::Hsb val; + val.sat = (U32)(S * 100); + val.brightness = (U32)(B * 100); + H = H*60.0; + if (H < 0.0) + H += 360.0; + val.hue = (U32)H; + + return val; +} + +inline String ColorI::getHex() const +{ + char r[255]; + dSprintf(r, sizeof(r), "%.2X", red); + String result(r); + + char g[255]; + dSprintf(g, sizeof(g), "%.2X", green); + result += g; + + char b[255]; + dSprintf(b, sizeof(b), "%.2X", blue); + result += b; + + return result; +} + //-------------------------------------- INLINE CONVERSION OPERATORS inline ColorF::operator ColorI() const { diff --git a/Engine/source/core/factoryCache.h b/Engine/source/core/factoryCache.h new file mode 100644 index 0000000000..dbecc152a6 --- /dev/null +++ b/Engine/source/core/factoryCache.h @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _FACTORY_CACHE_H_ +#define _FACTORY_CACHE_H_ + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +//----------------------------------------------------------------------------- + +class IFactoryObjectReset +{ +public: + virtual void resetState( void ) = 0; +}; + +//----------------------------------------------------------------------------- + +template +class FactoryCache : private Vector +{ +public: + FactoryCache() + { + } + + virtual ~FactoryCache() + { + purgeCache(); + } + + T* createObject( void ) + { + // Create a new object if cache is empty. + if ( this->size() == 0 ) + return new T(); + + // Return a cached object. + T* pObject = this->back(); + this->pop_back(); + return pObject; + } + + void cacheObject( T* pObject ) + { + // Cache object. + this->push_back( pObject ); + + // Reset object state if available. + IFactoryObjectReset* pResetStateObject = dynamic_cast( pObject ); + if ( pResetStateObject != NULL ) + pResetStateObject->resetState(); + } + + void purgeCache( void ) + { + while( this->size() > 0 ) + { + delete this->back(); + this->pop_back(); + } + } +}; + +#endif // _FACTORY_CACHE_H_ \ No newline at end of file diff --git a/Engine/source/core/idGenerator.h b/Engine/source/core/idGenerator.h index a0ddc74edb..8c34676738 100644 --- a/Engine/source/core/idGenerator.h +++ b/Engine/source/core/idGenerator.h @@ -74,7 +74,7 @@ class IdGenerator void free(U32 id) { - AssertFatal(id >= mIdBlockBase, "IdGenerator::alloc: invalid id, id does not belong to this IdGenerator.") + AssertFatal(id >= mIdBlockBase, "IdGenerator::alloc: invalid id, id does not belong to this IdGenerator."); if(id == mNextId - 1) { mNextId--; diff --git a/Engine/source/core/module.cpp b/Engine/source/core/module.cpp index f069cbcb42..52bdc54819 100644 --- a/Engine/source/core/module.cpp +++ b/Engine/source/core/module.cpp @@ -46,14 +46,14 @@ bool Module::_constrainedToComeBefore( Module* module, Mode mode ) Module* depModule = dependency->mModule; if( !depModule ) { - depModule = ModuleManager::findModule( dependency->mModuleName ); + depModule = EngineModuleManager::findModule( dependency->mModuleName ); if( !depModule ) { // Module does not exist. Only emit a warning here so that modules // can be omitted from a link without requiring the module definitions // to be adapted. - Platform::outputDebugString( "[ModuleManager] Module %s of '%s' depends on module '%s' which does not exist", + Platform::outputDebugString( "[EngineModuleManager] Module %s of '%s' depends on module '%s' which does not exist", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), dependency->mModuleName ); continue; @@ -86,14 +86,14 @@ bool Module::_constrainedToComeAfter( Module* module, Mode mode ) Module* depModule = dependency->mModule; if( !depModule ) { - depModule = ModuleManager::findModule( dependency->mModuleName ); + depModule = EngineModuleManager::findModule( dependency->mModuleName ); if( !depModule ) { // Module does not exist. Only emit a warning here so that modules // can be omitted from a link without requiring the module definitions // to be adapted. - Platform::outputDebugString( "[ModuleManager] Module %s of '%s' depends on module '%s' which does not exist", + Platform::outputDebugString( "[EngineModuleManager] Module %s of '%s' depends on module '%s' which does not exist", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), dependency->mModuleName ); continue; @@ -115,7 +115,7 @@ bool Module::_constrainedToComeAfter( Module* module, Mode mode ) //----------------------------------------------------------------------------- -String ModuleManager::_moduleListToString( Vector< Module* >& moduleList ) +String EngineModuleManager::_moduleListToString( Vector< Module* >& moduleList ) { StringBuilder str; @@ -136,14 +136,14 @@ String ModuleManager::_moduleListToString( Vector< Module* >& moduleList ) //----------------------------------------------------------------------------- -void ModuleManager::_printModuleList( Vector< Module* >& moduleList ) +void EngineModuleManager::_printModuleList( Vector< Module* >& moduleList ) { Platform::outputDebugString( _moduleListToString( moduleList ) ); } //----------------------------------------------------------------------------- -void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& moduleList, Module* module ) +void EngineModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& moduleList, Module* module ) { // If this module is being overridden, switch over to // the module overriding it. @@ -168,7 +168,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& if( !module->_getDependencies( mode ) ) { #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Appending '%s' to '%s'", + Platform::outputDebugString( "[EngineModuleManager] Appending '%s' to '%s'", module->getName(), _moduleListToString( moduleList ).c_str() ); #endif @@ -179,7 +179,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // First make sure that all 'after' dependencies are in the list. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Resolving %s dependencies of '%s'", + Platform::outputDebugString( "[EngineModuleManager] Resolving %s dependencies of '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName() ); #endif @@ -199,7 +199,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& } AssertFatal( _getIndexOfModuleInList( moduleList, module ) == -1, - avar( "ModuleManager::_insertModuleIntoList - Cycle in 'after' %s dependency chain of '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Cycle in 'after' %s dependency chain of '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName() ) ); @@ -212,7 +212,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& const bool currentAfterThis = moduleList[ i ]->_constrainedToComeAfter( module, mode ); AssertFatal( !( thisBeforeCurrent && currentAfterThis ), - avar( "ModuleManager::_insertModuleIntoList - Ambiguous %s placement of module '%s' relative to '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Ambiguous %s placement of module '%s' relative to '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), moduleList[ i ]->getName() ) ); @@ -232,7 +232,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& if( thisBeforeCurrent && !moduleList[ i ]->_getDependencies( mode ) && i != numModules - 1 ) { #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Pushing '%s' to back end of chain for resolving '%s'", + Platform::outputDebugString( "[EngineModuleManager] Pushing '%s' to back end of chain for resolving '%s'", moduleList[ i ]->getName(), module->getName() ); #endif @@ -251,7 +251,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& for( U32 n = i + 1; n < numModules; ++ n ) AssertFatal( !( moduleList[ n ]->_constrainedToComeBefore( module, mode ) || module->_constrainedToComeAfter( moduleList[ n ], mode ) ), - avar( "ModuleManager::_insertModuleIntoList - Ambiguous %s constraint on module '%s' to come before '%s' yet after '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Ambiguous %s constraint on module '%s' to come before '%s' yet after '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), moduleList[ i ]->getName(), @@ -260,7 +260,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // Add the module at this position. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Inserting '%s' at index %i into '%s'", + Platform::outputDebugString( "[EngineModuleManager] Inserting '%s' at index %i into '%s'", module->getName(), i, _moduleListToString( moduleList ).c_str() ); #endif @@ -271,7 +271,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // No constraint-based position. Just append. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Appending '%s' to '%s'", + Platform::outputDebugString( "[EngineModuleManager] Appending '%s' to '%s'", module->getName(), _moduleListToString( moduleList ).c_str() ); #endif @@ -280,7 +280,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& //----------------------------------------------------------------------------- -Module* ModuleManager::_findOverrideFor( Module* module ) +Module* EngineModuleManager::_findOverrideFor( Module* module ) { const char* name = module->getName(); @@ -294,7 +294,7 @@ Module* ModuleManager::_findOverrideFor( Module* module ) //----------------------------------------------------------------------------- -S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Module* module ) +S32 EngineModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Module* module ) { const U32 numModules = moduleList.size(); for( U32 i = 0; i < numModules; ++ i ) @@ -306,7 +306,7 @@ S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Modul //----------------------------------------------------------------------------- -S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const char* moduleName ) +S32 EngineModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const char* moduleName ) { const U32 numModules = moduleList.size(); for( U32 i = 0; i < numModules; ++ i ) @@ -318,7 +318,7 @@ S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const //----------------------------------------------------------------------------- -void ModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& moduleList ) +void EngineModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& moduleList ) { for( Module* module = Module::smFirst; module != NULL; module = module->mNext ) _insertIntoModuleList( mode, moduleList, module ); @@ -326,7 +326,7 @@ void ModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& mod //----------------------------------------------------------------------------- -void ModuleManager::initializeSystem() +void EngineModuleManager::initializeSystem() { Vector< Module* > modules; @@ -339,7 +339,7 @@ void ModuleManager::initializeSystem() if( !module->mIsInitialized ) { #ifdef DEBUG_SPEW - Platform::outputDebugString( "[ModuleManager] Initializing %s", + Platform::outputDebugString( "[EngineModuleManager] Initializing %s", module->getName() ); #endif @@ -351,7 +351,7 @@ void ModuleManager::initializeSystem() //----------------------------------------------------------------------------- -void ModuleManager::shutdownSystem() +void EngineModuleManager::shutdownSystem() { Vector< Module* > modules; @@ -363,7 +363,7 @@ void ModuleManager::shutdownSystem() if( modules[ i ]->mIsInitialized ) { #ifdef DEBUG_SPEW - Platform::outputDebugString( "[ModuleManager] Shutting down %s", + Platform::outputDebugString( "[EngineModuleManager] Shutting down %s", modules[ i ]->getName() ); #endif @@ -375,7 +375,7 @@ void ModuleManager::shutdownSystem() //----------------------------------------------------------------------------- -Module* ModuleManager::findModule( const char* name ) +Module* EngineModuleManager::findModule( const char* name ) { for( Module* module = Module::smFirst; module != NULL; module = module->mNext ) if( dStricmp( module->getName(), name ) == 0 ) diff --git a/Engine/source/core/module.h b/Engine/source/core/module.h index 10f842e6fd..49be0665eb 100644 --- a/Engine/source/core/module.h +++ b/Engine/source/core/module.h @@ -42,7 +42,7 @@ class Module public: typedef void Parent; - friend struct ModuleManager; + friend struct EngineModuleManager; protected: @@ -333,7 +333,7 @@ class Module void _AfterModuleInit::initialize() -struct ModuleManager +struct EngineModuleManager { /// Initialize all modules registered with the system. static void initializeSystem(); diff --git a/Engine/source/core/stream/stream.cpp b/Engine/source/core/stream/stream.cpp index 873bdeba61..50f99ae636 100644 --- a/Engine/source/core/stream/stream.cpp +++ b/Engine/source/core/stream/stream.cpp @@ -123,6 +123,19 @@ void Stream::writeString(const char *string, S32 maxLen) write(len, string); } +bool Stream::writeFormattedBuffer(const char *format, ...) +{ + char buffer[4096]; + va_list args; + va_start(args, format); + const S32 length = dVsprintf(buffer, sizeof(buffer), format, args); + + // Sanity! + AssertFatal(length <= sizeof(buffer), "writeFormattedBuffer - String format exceeded buffer size. This will cause corruption."); + + return write(length, buffer); +} + void Stream::readString(char buf[256]) { U8 len; @@ -142,7 +155,7 @@ void Stream::readLongString(U32 maxStringLen, char *stringBuf) { U32 len; read(&len); - if(len > maxStringLen) + if(len >= maxStringLen) { m_streamStatus = IOError; return; diff --git a/Engine/source/core/stream/stream.h b/Engine/source/core/stream/stream.h index c50acb6599..bc2495d701 100644 --- a/Engine/source/core/stream/stream.h +++ b/Engine/source/core/stream/stream.h @@ -29,7 +29,9 @@ #ifndef _ENDIAN_H_ #include "core/util/endian.h" #endif - +#ifndef _STRINGFUNCTIONS_H_ +#include "core/strings/stringFunctions.h" +#endif /// @defgroup stream_overload Primitive Type Stream Operation Overloads /// These macros declare the read and write functions for all primitive types. @@ -130,12 +132,21 @@ class Stream /// writeString is safer. void writeLongString(U32 maxStringLen, const char *string); + inline bool Put(char character) { return write(character); } + /// Write raw text to the stream void writeText(const char *text); /// Writes a string to the stream. virtual void writeString(const char *stringBuf, S32 maxLen=255); + /// Writes a formatted buffer to the stream. + /// NOTE: A maximum string length of 4K is allowed. + bool writeFormattedBuffer(const char *format, ...); + + /// Writes a NULL terminated string buffer. + bool writeStringBuffer(const char* buffer) { return write(dStrlen(buffer), buffer); } + // read/write real strings void write(const String & str) { _write(str); } void read(String * str) { _read(str); } diff --git a/Engine/source/core/strings/stringFunctions.h b/Engine/source/core/strings/stringFunctions.h index d712388d6d..9a30382ef6 100644 --- a/Engine/source/core/strings/stringFunctions.h +++ b/Engine/source/core/strings/stringFunctions.h @@ -152,11 +152,20 @@ inline U32 dAtoui(const char *str, U32 base = 10) return strtoul(str, NULL, base); } +inline U16 dAtous(const char *str, U32 base = 10) +{ + return strtoul(str, NULL, base); +} + inline F32 dAtof(const char *str) { return strtof(str, NULL); } +inline F64 dAtod(const char *str) +{ + return strtod(str, NULL); +} inline char dToupper(const char c) { diff --git a/Engine/source/core/util/str.cpp b/Engine/source/core/util/str.cpp index 6fc56b346c..cc124a45df 100644 --- a/Engine/source/core/util/str.cpp +++ b/Engine/source/core/util/str.cpp @@ -1628,3 +1628,103 @@ String String::GetTrailingNumber(const char* str, S32& number) return base.substr(0, p - base.c_str()); } + +String String::GetFirstNumber(const char* str, U32& startPos, U32& endPos) +{ + // Check for trivial strings + if (!str || !str[0]) + return String::EmptyString; + + // Find the number at the end of the string + String base(str); + const char* p = base.c_str(); + const char* end = base.c_str() + base.length() - 1; + bool dec = false; + startPos = 0; + + //Check if we are just a digit + if(p == end && isdigit(*p)) + return base; + + //Look for the first digit + while ((p != end) && (dIsspace(*p) || !isdigit(*p))) + { + p++; + startPos++; + } + + //Handle if we are at the end and found nothing + if(p == end && !isdigit(*p)) + return ""; + + //update our end position at least to the start of our number + endPos = startPos; + + //Backup our ptr + const char* backup = p; + + //Check for any negative or decimal values + if(startPos > 0) + { + p--; + startPos--; + if(*p == '.') + { + dec = true; + + //ignore any duplicate periods + while ((p != base.c_str()) && (*p == '.')) + { + p--; + startPos--; + } + + //Found a decimal lets still check for negative sign + if(startPos > 0) + { + p--; + startPos--; + if((*p != '-') && (*p != '_')) + { + startPos++; + p++; + } + } + } + else if((*p != '-') && (*p != '_')) + { + //go back to where we where cause no decimal or negative sign found + startPos++; + p++; + } + } + + //Restore where we were + p = backup; + + //look for the end of the digits + bool justFoundDec = false; + while (p != end) + { + if(*p == '.') + { + if(dec && !justFoundDec) + break; + else + { + dec = true; + justFoundDec = true; + } + } + else if(!isdigit(*p)) + break; + else if(justFoundDec) + justFoundDec = false; + + p++; + endPos++; + } + + U32 len = (!isdigit(*p)) ? endPos - startPos : (endPos + 1) - startPos; + return base.substr(startPos, len); +} diff --git a/Engine/source/core/util/str.h b/Engine/source/core/util/str.h index 2f4fec5524..046bc1f6fe 100644 --- a/Engine/source/core/util/str.h +++ b/Engine/source/core/util/str.h @@ -191,6 +191,7 @@ class String static String ToUpper(const String &string); static String GetTrailingNumber(const char* str, S32& number); + static String GetFirstNumber(const char* str, U32& startPos, U32& endPos); /// @} diff --git a/Engine/source/core/util/swizzle.h b/Engine/source/core/util/swizzle.h index abbff288f2..0f1d583f63 100644 --- a/Engine/source/core/util/swizzle.h +++ b/Engine/source/core/util/swizzle.h @@ -120,8 +120,7 @@ inline void Swizzle::ToBuffer( void *destination, const void *sour { // TODO: OpenMP? AssertFatal( size % ( sizeof( T ) * mapLength ) == 0, "Bad buffer size for swizzle, see docs." ); - AssertFatal( destination != NULL, "Swizzle::ToBuffer - got a NULL destination pointer!" ); - AssertFatal( source != NULL, "Swizzle::ToBuffer - got a NULL source pointer!" ); + if (!destination || !source) return; T *dest = reinterpret_cast( destination ); const T *src = reinterpret_cast( source ); diff --git a/Engine/source/core/util/tDictionary.h b/Engine/source/core/util/tDictionary.h index 8f395fea75..a592acc1eb 100644 --- a/Engine/source/core/util/tDictionary.h +++ b/Engine/source/core/util/tDictionary.h @@ -863,5 +863,167 @@ inline Value& Map::operator[](const Key& key) return mMap.findOrInsert(key)->value; } + +//----------------------------------------------------------------------------- +// iterator class + +/// A HashMap template class. +/// The map class maps between a key and an associated value. Keys +/// are unique. +/// The hash table class is used as the default implementation so the +/// the key must be hashable, see util/hash.h for details. +/// @ingroup UtilContainers +template > +class HashMap : private Sequence +{ + typedef HashTable Parent; + +private: + Sequence mHashMap; + +public: + // types + typedef typename Parent::Pair Pair; + typedef Pair ValueType; + typedef Pair& Reference; + typedef const Pair& ConstReference; + + typedef typename Parent::Iterator iterator; + typedef typename Parent::ConstIterator const_iterator; + typedef S32 DifferenceType; + typedef U32 SizeType; + + // initialization + HashMap() {} + ~HashMap() {} + HashMap(const HashMap& p); + + // management + U32 size() const; ///< Return the number of elements + void clear(); ///< Empty the HashMap + bool isEmpty() const; ///< Returns true if the map is empty + + // insert & erase elements + iterator insert(const Key& key, const Value&); // Documented below... + void erase(iterator); ///< Erase the given entry + void erase(const Key& key); ///< Erase the key from the map + + // HashMap lookup + iterator find(const Key&); ///< Find entry for the given key + const_iterator find(const Key&) const; ///< Find entry for the given key + bool contains(const Key&a) + { + return mHashMap.count(a) > 0; + } + + // forward iterator access + iterator begin(); ///< iterator to first element + const_iterator begin() const; ///< iterator to first element + iterator end(); ///< IIterator to last element + 1 + const_iterator end() const; ///< iterator to last element + 1 + + // operators + Value& operator[](const Key&); ///< Index using the given key. If the key is not currently in the map it is added. +}; + +template HashMap::HashMap(const HashMap& p) +{ + *this = p; +} + + +//----------------------------------------------------------------------------- +// management + +template +inline U32 HashMap::size() const +{ + return mHashMap.size(); +} + +template +inline void HashMap::clear() +{ + mHashMap.clear(); +} + +template +inline bool HashMap::isEmpty() const +{ + return mHashMap.isEmpty(); +} + + +//----------------------------------------------------------------------------- +// add & remove elements + +/// Insert the key value pair but don't allow duplicates. +/// The map class does not allow duplicates keys. If the key already exists in +/// the map the function will fail and return end(). +template +typename HashMap::iterator HashMap::insert(const Key& key, const Value& x) +{ + return mHashMap.insertUnique(key, x); +} + +template +void HashMap::erase(const Key& key) +{ + mHashMap.erase(key); +} + +template +void HashMap::erase(iterator node) +{ + mHashMap.erase(node); +} + + +//----------------------------------------------------------------------------- +// Searching + +template +typename HashMap::iterator HashMap::find(const Key& key) +{ + return mHashMap.find(key); +} + +//----------------------------------------------------------------------------- +// iterator access + +template +inline typename HashMap::iterator HashMap::begin() +{ + return mHashMap.begin(); +} + +template +inline typename HashMap::const_iterator HashMap::begin() const +{ + return mHashMap.begin(); +} + +template +inline typename HashMap::iterator HashMap::end() +{ + return mHashMap.end(); +} + +template +inline typename HashMap::const_iterator HashMap::end() const +{ + return mHashMap.end(); +} + + +//----------------------------------------------------------------------------- +// operators + +template +inline Value& HashMap::operator[](const Key& key) +{ + return mHashMap.findOrInsert(key)->value; +} + #endif diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp new file mode 100644 index 0000000000..9087effeed --- /dev/null +++ b/Engine/source/environment/VolumetricFog.cpp @@ -0,0 +1,1319 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "environment/VolumetricFog.h" +#include "windowManager/platformWindowMgr.h" +#include "gfx/gfxTransformSaver.h" +#include "renderInstance/renderPassManager.h" +#include "math/mathIO.h" +#include "materials/shaderData.h" +#include "math/util/matrixSet.h" +#include "core/resourceManager.h" +#include "core/stream/bitStream.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/shapeBase.h" +#include "ts/tsShapeInstance.h" +#include "console/engineAPI.h" +#include "gui/core/guiCanvas.h" +#include "VolumetricFogRTManager.h" +#include "lighting/lightInfo.h" +#include "lighting/lightManager.h" + +#define COLBOX_SCALE Point3F(1.02f, 1.02f, 1.02f) + +IMPLEMENT_CO_NETOBJECT_V1(VolumetricFog); + +ConsoleDocClass(VolumetricFog, +"@brief Volumetric Fog Object class. Main class defining the Volumetric\n" +"Fog objects in the scene. Used in conjunction with the VolumetricFogRTManager\n" +"class which is responsible for the required rendertargets.\n\n" +"Methods (exposed to script):\n" +" setFogColorF(color) Changes the overall fog color (color.rgba range 0.0 - 1.0).\n;" +" setFogColor(color) Changes the overall fog color color.rgba range 0 - 255).\n;" +" setFogDensity(density) Changes the overall fog density.\n" +" setFogModulation(strength, speed1, speed2) changes the strength\n" +" and the speeds of the 2 animation layers.\n\n" +"Callbacks:\n" +"onEnterFog triggered whenever the controlobject (Player or Camera) enters the Fog.\n" +" (current Fog object and the controlobject are exposed to script.\n" +"onLeaveFog triggered whenever the controlobject (Player or Camera) left the Fog.\n" +" (current Fog object and the controlobject are exposed to script.\n\n" +"@tsexample\n" +" new VolumetricFog()\n" +" {\n" +" shapeName = \"art/environment/FogRCube.dts\";\n" +" fogColor = \"200 200 200 128\";\n" +" fogDensity = \"0.2\";\n" +" ignoreWater = \"0\";\n" +" MinSize = \"250\";\n" +" FadeSize = \"750\";\n" +" texture = \"art/environment/FogMod_heavy.dds\";\n" +" tiles = \"1.5\";\n" +" modStrength = \"0.2\";\n" +" PrimSpeed = \"-0.01 0.04\";\n" +" SecSpeed = \"0.02 -0.02\";\n" +" position = \"748.644 656.371 65.3506\"; \n" +" rotation = \"0 0 1 20.354\";\n" +" scale = \"40 30 6\";\n" +" };\n" +"@endtsexample\n" +); + +IMPLEMENT_CALLBACK(VolumetricFog, onEnterFog, void, (SimObjectId obj), (obj), +"@brief Called when an object enters the volume of the Fog instance.\n\n" + +"@param obj the controlobject entering the fog."); + +IMPLEMENT_CALLBACK(VolumetricFog, onLeaveFog, void, (SimObjectId obj), (obj), +"@brief Called when an object left the volume of the Fog instance.\n\n" + +"@param obj the controlobject leaving the fog."); + + +VolumetricFog::VolumetricFog() +{ + AssertFatal(VFRTM != NULL, "VolumetricFog Fatal Error: No Manager found"); + + if (!VFRTM->IsInitialized()) + VFRTM->Init(); + + mNetFlags.set(Ghostable | ScopeAlways); + + mTypeMask |= EnvironmentObjectType | StaticObjectType; + + mPrepassTarget = NULL; + mDepthBufferTarget = NULL; + mFrontBufferTarget = NULL; + + z_buf = NULL; + mTexture = NULL; + + mIsVBDirty = false; + mIsPBDirty = false; + + mFogColor.set(200, 200, 200, 255); + mFogDensity = 0.3f; + mIgnoreWater = false; + mReflect = false; + mCamInFog = false; + mResizing = false; + mFogReflStrength = 20.0; + mUseGlow = false; + mGlowStrength = 0.3f; + mGlowing = 0; + mModifLightRays = false; + mLightRayMod = 1.0f; + mOldLightRayStrength = 0.1f; + + mShapeName = ""; + mShapeLoaded = false; + mMinDisplaySize = 10.0f; + mFadeSize = 0.0f; + mCurDetailLevel = 0; + mNumDetailLevels = 0; + det_size.clear(); + + mTextureName = ""; + mIsTextured = false; + mStrength = 0.5f; + mTexTiles = 1.0f; + mSpeed1.set(0.5f, 0.0f); + mSpeed2.set(0.1f, 0.1f); +} + +VolumetricFog::~VolumetricFog() +{ + if (isClientObject()) + return; + + for (S32 i = 0; i < det_size.size(); i++) + { + if (det_size[i].indices != NULL) + delete(det_size[i].indices); + if (det_size[i].piArray != NULL) + delete(det_size[i].piArray); + if (det_size[i].verts != NULL) + delete(det_size[i].verts); + } + det_size.clear(); + + if (z_buf.isValid()) + SAFE_DELETE(z_buf); + + if (!mTexture.isNull()) + mTexture.free(); +} + +void VolumetricFog::initPersistFields() +{ + addGroup("VolumetricFogData"); + addField("shapeName", TypeShapeFilename, Offset(mShapeName, VolumetricFog), + "Path and filename of the model file (.DTS, .DAE) to use for this Volume."); + addField("FogColor", TypeColorI, Offset(mFogColor, VolumetricFog), + "Fog color RGBA (Alpha is ignored)"); + addField("FogDensity", TypeF32, Offset(mFogDensity, VolumetricFog), + "Overal fog density value (0 disables the fog)."); + addField("IgnoreWater", TypeBool, Offset(mIgnoreWater, VolumetricFog), + "Set to true if volumetric fog should continue while submerged."); + addField("MinSize", TypeF32, Offset(mMinDisplaySize, VolumetricFog), + "Min size (in pixels) for fog to be rendered."); + addField("FadeSize", TypeF32, Offset(mFadeSize, VolumetricFog), + "Object size in pixels at which the FX-fading kicks in (0 disables fading)."); + endGroup("VolumetricFogData"); + + addGroup("VolumetricFogModulation"); + addField("texture", TypeImageFilename, Offset(mTextureName, VolumetricFog), + "A texture which contains Fogdensity modulator in the red channel and color with 1-green channel. No texture disables modulation."); + addField("tiles", TypeF32, Offset(mTexTiles, VolumetricFog), + "How many times the texture is mapped to the object."); + addField("modStrength", TypeF32, Offset(mStrength, VolumetricFog), + "Overall strength of the density modulation (0 disables modulation)."); + addField("PrimSpeed", TypePoint2F, Offset(mSpeed1, VolumetricFog), + "Overall primary speed of the density modulation (x-speed(u) y-speed(v))"); + addField("SecSpeed", TypePoint2F, Offset(mSpeed2, VolumetricFog), + "Overall secundary speed of the density modulation (x-speed(u) y-speed(v))"); + endGroup("VolumetricFogModulation"); + + addGroup("Reflections"); + addField("Reflectable", TypeBool, Offset(mReflect, VolumetricFog), + "Set to true if volumetric fog should be reflected."); + addField("ReflectStrength", TypeF32, Offset(mFogReflStrength, VolumetricFog), + "Strength of the reflections (0 disables the fog)."); + endGroup("Reflections"); + + addGroup("PostFX"); + addField("useGlow", TypeBool, Offset(mUseGlow, VolumetricFog), + "Set to true if volumetric fog should use glow PostFX."); + addField("glowStrength", TypeF32, Offset(mGlowStrength, VolumetricFog), + "Overall strength of the glow PostFX."); + addField("modLightRay", TypeBool, Offset(mModifLightRays, VolumetricFog), + "Set to true if volumetric fog should modify the brightness of the Lightrays."); + addField("lightRayMod", TypeF32, Offset(mLightRayMod, VolumetricFog), + "Modifier for LightRay PostFX when inside Fog."); + endGroup("PostFX"); + Parent::initPersistFields(); +} + +void VolumetricFog::inspectPostApply() +{ + Parent::inspectPostApply(); + mSpeed.set(mSpeed1.x, mSpeed1.y, mSpeed2.x, mSpeed2.y); + setMaskBits(VolumetricFogMask | FogColorMask | FogDensityMask | FogModulationMask | FogPostFXMask | FogShapeMask); +} + +bool VolumetricFog::onAdd() +{ + if (!Parent::onAdd()) + return false; + + if (!VFRTM->IsInitialized()) + { + Con::errorf("No VolumetricFogRTManager present!!"); + return false; + } + + resetWorldBox(); + + mShapeLoaded = LoadShape(); + + setRenderTransform(mObjToWorld); + + addToScene(); + ColBox.set(getTransform(), (mObjBox.getExtents() * getScale() * COLBOX_SCALE)); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mTexTiles = mAbs(mTexTiles); + mSpeed.set(mSpeed1.x, mSpeed1.y, mSpeed2.x, mSpeed2.y); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + + if (isClientObject()) + { + conn = GameConnection::getConnectionToServer(); + if (!conn) + { + Con::errorf("VolumetricFog::onAdd - No Serverconnection"); + return false; + } + + glowFX = static_cast(Sim::findObject("VolFogGlowPostFx")); + + mOldLightRayStrength = Con::getFloatVariable("$LightRayPostFX::brightScalar",1.0f); + + GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); + if (cv == NULL) + { + Con::errorf("VolumetricFog::onAdd - Canvas not found!!"); + return false; + } + mPlatformWindow = cv->getPlatformWindow(); + VolumetricFogRTManager::getVolumetricFogRTMResizeSignal().notify(this, &VolumetricFog::handleResize); + GuiCanvas::getCanvasSizeChangeSignal().notify(this, &VolumetricFog::handleCanvasResize); + + InitTexture(); + return setupRenderer(); + } + + VFRTM->IncFogObjects(); + + return true; +} + +void VolumetricFog::onRemove() +{ + if (isClientObject()) + { + if (isTicking()) + { + setProcessTick(false); + if (mGlowing != 0) + { + mGlowing = 0; + glowFX->disable(); + } + _leaveFog(static_cast(conn->getControlObject())); + } + VolumetricFogRTManager::getVolumetricFogRTMResizeSignal().remove(this, &VolumetricFog::handleResize); + GuiCanvas::getCanvasSizeChangeSignal().remove(this, &VolumetricFog::handleCanvasResize); + } + removeFromScene(); + VFRTM->DecFogObjects(); + Parent::onRemove(); +} +void VolumetricFog::handleCanvasResize(GuiCanvas* canvas) +{ + UpdateBuffers(0,true); +} + +void VolumetricFog::handleResize(VolumetricFogRTManager *RTM, bool resize) +{ + if (resize) + { + mResizing = true; + RTM->FogAnswered(); + } + else + mResizing = false; + + if (mIsTextured) + { + F32 width = (F32)mPlatformWindow->getClientExtent().x; + F32 height = (F32)mPlatformWindow->getClientExtent().y; + + mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); + mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); + } + + UpdateBuffers(0,true); +} + +//----------------------------------------------------------------------------- +// Loadshape extracted from TSMesh and TSShapeInstance +//----------------------------------------------------------------------------- + +bool VolumetricFog::LoadShape() +{ + GFXPrimitiveType GFXdrawTypes[] = { GFXTriangleList, GFXTriangleStrip }; + if (!mShapeName || mShapeName[0] == '\0') + { + Con::errorf("VolumetricFog::LoadShape() - No shape name! Volumetric Fog will not be rendered!"); + return false; + } + + // Load shape, server side only reads bounds and radius + + Resource mShape; + mShape = ResourceManager::get().load(mShapeName); + if (bool(mShape) == false) + { + Con::errorf("VolumetricFog::LoadShape() - Unable to load shape: %s", mShapeName); + return false; + } + + mObjBox = mShape->bounds; + mRadius = mShape->radius; + resetWorldBox(); + + if (!isClientObject()) + return false; + + TSShapeInstance *mShapeInstance = new TSShapeInstance(mShape, false); + meshes mesh_detail; + + for (S32 i = 0; i < det_size.size(); i++) + { + if (det_size[i].indices != NULL) + delete(det_size[i].indices); + if (det_size[i].piArray != NULL) + delete(det_size[i].piArray); + if (det_size[i].verts != NULL) + delete(det_size[i].verts); + } + det_size.clear(); + + // browsing model for detail levels + + for (U32 i = 0; i < mShape->details.size(); i++) + { + const TSDetail *detail = &mShape->details[i]; + mesh_detail.det_size = detail->size; + mesh_detail.sub_shape = detail->subShapeNum; + mesh_detail.obj_det = detail->objectDetailNum; + mesh_detail.verts = NULL; + mesh_detail.piArray = NULL; + mesh_detail.indices = NULL; + if (detail->size >= 0.0f && detail->subShapeNum >= 0) + det_size.push_back(mesh_detail); + } + + for (U32 i = 0; i < det_size.size(); i++) + { + const S32 ss = det_size[i].sub_shape; + if (ss >= 0) + { + const S32 start = mShape->subShapeFirstObject[ss]; + const S32 end = start + mShape->subShapeNumObjects[ss]; + for (S32 j = start; j < end; j++) + { + // Loading shape, only the first mesh for each detail will be used! + TSShapeInstance::MeshObjectInstance *meshObj = &mShapeInstance->mMeshObjects[j]; + if (!meshObj) + continue; + TSMesh *mesh = meshObj->getMesh(det_size[i].obj_det); + if (mesh != NULL) + { + const U32 numNrms = mesh->mNumVerts; + GFXVertexPNTT *tmpVerts = NULL; + tmpVerts = new GFXVertexPNTT[numNrms]; + mIsVBDirty = true; + for (U32 k = 0; k < numNrms; k++) + { + Point3F norm = mesh->mVertexData[k].normal(); + Point3F vert = mesh->mVertexData[k].vert(); + Point2F uv = mesh->mVertexData[k].tvert(); + tmpVerts[k].point = vert; + tmpVerts[k].texCoord = uv; + tmpVerts[k].normal = norm; + } + det_size[i].verts = tmpVerts; + det_size[i].num_verts = numNrms; + + det_size[i].piArray = new Vector(); + GFXPrimitive pInfo; + + det_size[i].indices = new Vector(); + + for (U32 k = 0; k < mesh->indices.size(); k++) + det_size[i].indices->push_back(mesh->indices[k]); + + U32 primitivesSize = mesh->primitives.size(); + for (U32 k = 0; k < primitivesSize; k++) + { + const TSDrawPrimitive & draw = mesh->primitives[k]; + GFXPrimitiveType drawType = GFXdrawTypes[draw.matIndex >> 30]; + switch (drawType) + { + case GFXTriangleList: + pInfo.type = drawType; + pInfo.numPrimitives = draw.numElements / 3; + pInfo.startIndex = draw.start; + // Use the first index to determine which 16-bit address space we are operating in + pInfo.startVertex = mesh->indices[draw.start] & 0xFFFF0000; + pInfo.minIndex = pInfo.startVertex; + pInfo.numVertices = getMin((U32)0x10000, mesh->mNumVerts - pInfo.startVertex); + break; + case GFXTriangleStrip: + pInfo.type = drawType; + pInfo.numPrimitives = draw.numElements - 2; + pInfo.startIndex = draw.start; + // Use the first index to determine which 16-bit address space we are operating in + pInfo.startVertex = mesh->indices[draw.start] & 0xFFFF0000; + pInfo.minIndex = pInfo.startVertex; + pInfo.numVertices = getMin((U32)0x10000, mesh->mNumVerts - pInfo.startVertex); + break; + default: + Con::errorf("VolumetricFog::LoadShape Unknown drawtype!?!"); + return false; + break; + } + det_size[i].piArray->push_back(pInfo); + j = end; + } + } + else + { + Con::errorf("VolumetricFog::LoadShape Error loading mesh from shape!"); + delete mShapeInstance; + return false; + } + mIsVBDirty = true; + mIsPBDirty = true; + } + } + } + + mNumDetailLevels = det_size.size(); + mCurDetailLevel = 0; + UpdateBuffers(mCurDetailLevel); + delete mShapeInstance; + + return true; +} + +//----------------------------------------------------------------------------- +// UpdateBuffers called whenever detaillevel changes (LOD) +//----------------------------------------------------------------------------- + + +bool VolumetricFog::UpdateBuffers(U32 dl, bool force) +{ + if (mVB.isNull() || mIsVBDirty || dl != mCurDetailLevel || force) + { + mVB.set(GFX, det_size[dl].num_verts, GFXBufferTypeDynamic); + mIsVBDirty = false; + } + GFXVertexPNTT *vertPtr = mVB.lock(); + if (!vertPtr) + { + mVB.unlock(); + return false; + } + dMemcpy(vertPtr, det_size[dl].verts, sizeof (GFXVertexPNTT)* det_size[dl].num_verts); + mVB.unlock(); + + if (mIsPBDirty || mPB.isNull() || dl != mCurDetailLevel || force) + { + #ifdef TORQUE_DEBUG + mPB.set(GFX, det_size[dl].indices->size(), det_size[dl].piArray->size(), GFXBufferTypeDynamic, avar("%s() - VolFogPrimBuffer (line %d)", __FUNCTION__, __LINE__)); + #else + mPB.set(GFX, det_size[dl].indices->size(), det_size[dl].piArray->size(), GFXBufferTypeDynamic); + #endif + U16 *ibIndices = NULL; + GFXPrimitive *piInput = NULL; + mPB.lock(&ibIndices, &piInput); + dCopyArray(ibIndices, det_size[dl].indices->address(), det_size[dl].indices->size()); + dMemcpy(piInput, det_size[dl].piArray->address(), det_size[dl].piArray->size() * sizeof(GFXPrimitive)); + mPB.unlock(); + mIsPBDirty = false; + } + mCurDetailLevel = dl; + return true; +} + +U32 VolumetricFog::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + if (stream->writeFlag(mask & FogColorMask)) + stream->write(mFogColor); + if (stream->writeFlag(mask & FogDensityMask)) + stream->write(mFogDensity); + if (stream->writeFlag(mask & FogModulationMask)) + { + stream->write(mTextureName); + mTexTiles = mFabs(mTexTiles); + stream->write(mTexTiles); + stream->write(mStrength); + mathWrite(*stream, mSpeed); + } + if (stream->writeFlag(mask & FogPostFXMask)) + { + stream->writeFlag(mUseGlow); + stream->write(mGlowStrength); + stream->writeFlag(mModifLightRays); + stream->write(mLightRayMod); + } + if (stream->writeFlag(mask & VolumetricFogMask)) + { + stream->writeFlag(mIgnoreWater); + stream->writeFlag(mReflect); + stream->write(mFogReflStrength); + stream->writeFlag(mResizing); + stream->write(mMinDisplaySize); + stream->write(mFadeSize); + } + if (stream->writeFlag(mask & FogShapeMask)) + { + stream->writeString(mShapeName); + mathWrite(*stream, getTransform()); + mathWrite(*stream, getScale()); + if (!mShapeName || mShapeName[0] == '\0') + return retMask; + Resource mShape; + mShape = ResourceManager::get().load(mShapeName); + if (bool(mShape) == false) + return retMask; + mObjBox = mShape->bounds; + mRadius = mShape->radius; + resetWorldBox(); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + } + return retMask; +} + +void VolumetricFog::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + MatrixF mat; + VectorF scale; + VectorF mOldScale = getScale(); + String oldTextureName = mTextureName; + StringTableEntry oldShape = mShapeName; + + if (stream->readFlag())// Fog color + stream->read(&mFogColor); + if (stream->readFlag())// Fog Density + { + stream->read(&mFogDensity); + if (isTicking()) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mFogDensity); + Con::setVariable("$VolumetricFog::density", buf); + } + } + if (stream->readFlag())// Fog Modulation + { + stream->read(&mTextureName); + stream->read(&mTexTiles); + mTexTiles = mFabs(mTexTiles); + stream->read(&mStrength); + mathRead(*stream, &mSpeed); + mSpeed1.set(mSpeed.x, mSpeed.y); + mSpeed2.set(mSpeed.z, mSpeed.w); + + if (isProperlyAdded()) + { + if (oldTextureName != mTextureName) + InitTexture(); + if (oldTextureName.isNotEmpty() && mTextureName.isEmpty()) + { + mIsTextured = false; + mTexture.free(); + } + } + } + if (stream->readFlag())//Fog PostFX + { + mUseGlow = stream->readFlag(); + stream->read(&mGlowStrength); + mModifLightRays = stream->readFlag(); + stream->read(&mLightRayMod); + if (isTicking()) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mGlowStrength); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + if (mUseGlow && !glowFX->isEnabled()) + glowFX->enable(); + if (!mUseGlow && glowFX->isEnabled()) + glowFX->disable(); + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength * mLightRayMod); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + if (!mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + } + } + if (stream->readFlag())//Volumetric Fog + { + mIgnoreWater = stream->readFlag(); + mReflect = stream->readFlag(); + stream->read(&mFogReflStrength); + mResizing = stream->readFlag(); + stream->read(&mMinDisplaySize); + stream->read(&mFadeSize); + } + if (stream->readFlag())//Fog shape + { + mShapeName = stream->readSTString(); + mathRead(*stream, &mat); + mathRead(*stream, &scale); + if (strcmp(oldShape, mShapeName) != 0) + { + mIsVBDirty = true; + mShapeLoaded = LoadShape(); + } + setScale(scale); + setTransform(mat); + ColBox.set(getTransform(), (mObjBox.getExtents() * getScale() * COLBOX_SCALE)); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + } +} + +void VolumetricFog::processTick(const Move* move) +{ + Parent::processTick(move); + mCounter++; + if ( mGlowing==1 && mCurGlow < mGlowStrength ) + { + mCurGlow += (mGlowStrength / 10.0); + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mCurGlow); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + } + else if ( mGlowing == 2 && mCurGlow > 0.0f ) + { + mCurGlow -= (mGlowStrength / 5.0f); + if (mCurGlow <= 0.0f) + { + glowFX->disable(); + mGlowing = 0; + setProcessTick(false); + return; + } + else + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mCurGlow); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + } + } + if (mCounter == 3) + { + ShapeBase* control = static_cast(conn->getControlObject()); + MatrixF xfm; + control->getRenderEyeTransform(&xfm); + Point3F pos = xfm.getPosition(); + if (!ColBox.isContained(pos)) + _leaveFog(control); + mCounter = 0; + } +} + +void VolumetricFog::_enterFog(ShapeBase *control) +{ + if (mUseGlow) + { + if (glowFX) + { + mCurGlow = 0.0f; + Con::setVariable("$VolFogGlowPostFx::glowStrength", "0.0"); + glowFX->enable(); + mGlowing = 1; + } + } + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength * mLightRayMod); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + mCounter = 0; + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mFogDensity); + Con::setVariable("$VolumetricFog::density", buf); + setProcessTick(true); + if (control) + onEnterFog_callback(control->getId()); +} + +void VolumetricFog::_leaveFog(ShapeBase *control) +{ + mCamInFog = false; + Con::setVariable("$VolumetricFog::density", "0.0"); + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + if (mUseGlow) + { + if (glowFX && mGlowing != 2) + { + mCurGlow = mGlowStrength; + mGlowing = 2; + if (control) + onLeaveFog_callback(control->getId()); + } + } + else + { + setProcessTick(false); + if (control) + onLeaveFog_callback(control->getId()); + } +} + +//----------------------------------------------------------------------------- +// Setting up the renderers +//----------------------------------------------------------------------------- + +bool VolumetricFog::setupRenderer() +{ + // Search for the prepass rendertarget and shadermacros. + mPrepassTarget = NamedTexTarget::find("prepass"); + if (!mPrepassTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find PrepassTarget"); + return false; + } + + Vector macros; + if (mPrepassTarget) + mPrepassTarget->getShaderMacros(¯os); + + // Search the depth and frontbuffers which are created by the VolumetricFogRTManager + + mDepthBufferTarget = NamedTexTarget::find("volfogdepth"); + if (!mDepthBufferTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find depthbuffer"); + return false; + } + + mFrontBufferTarget = NamedTexTarget::find("volfogfront"); + if (!mFrontBufferTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find frontbuffer"); + return false; + } + + // Find and setup the prepass Shader + + ShaderData *shaderData; + mPrePassShader = Sim::findObject("VolumetricFogPrePassShader", shaderData) ? + shaderData->getShader() : NULL; + if (!mPrePassShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogPrePassShader"); + return false; + } + + // Create ShaderConstBuffer and Handles + + mPPShaderConsts = mPrePassShader->allocConstBuffer(); + if (mPPShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants 1."); + return false; + } + + mPPModelViewProjSC = mPrePassShader->getShaderConstHandle("$modelView"); + + // Find and setup the VolumetricFog Shader + + shaderData = NULL; + mShader = Sim::findObject("VolumetricFogShader", shaderData) ? + shaderData->getShader(macros) : NULL; + if (!mShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogShader"); + return false; + } + + // Create ShaderConstBuffer and Handles + + mShaderConsts = mShader->allocConstBuffer(); + if (mShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants 2."); + return false; + } + + mModelViewProjSC = mShader->getShaderConstHandle("$modelView"); + mFadeSizeSC = mShader->getShaderConstHandle("$fadesize"); + mFogColorSC = mShader->getShaderConstHandle("$fogColor"); + mFogDensitySC = mShader->getShaderConstHandle("$fogDensity"); + mPreBias = mShader->getShaderConstHandle("$preBias"); + mAccumTime = mShader->getShaderConstHandle("$accumTime"); + mIsTexturedSC = mShader->getShaderConstHandle("$textured"); + mTexTilesSC = mShader->getShaderConstHandle("$numtiles"); + mModStrengthSC = mShader->getShaderConstHandle("$modstrength"); + mModSpeedSC = mShader->getShaderConstHandle("$modspeed"); + mViewPointSC = mShader->getShaderConstHandle("$viewpoint"); + mTexScaleSC = mShader->getShaderConstHandle("$texscale"); + mAmbientColorSC = mShader->getShaderConstHandle("$ambientColor"); + + // Find and setup the reflection Shader + + shaderData = NULL; + mReflectionShader = Sim::findObject("VolumetricFogReflectionShader", shaderData) ? + shaderData->getShader() : NULL; + if (!mReflectionShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogReflectionShader"); + return false; + } + + mReflShaderConsts = mReflectionShader->allocConstBuffer(); + if (mReflShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants for VolumetricFogReflectionShader."); + return false; + } + + mReflModelViewProjSC = mReflectionShader->getShaderConstHandle("$modelView"); + mReflFogColorSC = mReflectionShader->getShaderConstHandle("$fogColor"); + mReflFogDensitySC = mReflectionShader->getShaderConstHandle("$fogDensity"); + mReflFogStrengthSC = mReflectionShader->getShaderConstHandle("$reflStrength"); + + // Create the prepass StateBlock + + desc_preD.setCullMode(GFXCullCW); + desc_preD.setBlend(true); + desc_preD.setZReadWrite(false, false); + desc_preD.stencilEnable = false; + desc_preF.setCullMode(GFXCullCCW); + desc_preF.setBlend(true); + desc_preF.setZReadWrite(true, false); + desc_preF.stencilEnable = false; + + // Create the VolumetricFog StateBlock + + descD.setCullMode(GFXCullCW); + descD.setBlend(true); + descD.setZReadWrite(false, false);// desc.setZReadWrite(true, false); + + // prepassBuffer sampler + descD.samplersDefined = true; + descD.samplers[0].addressModeU = GFXAddressClamp; + descD.samplers[0].addressModeV = GFXAddressClamp; + descD.samplers[0].addressModeW = GFXAddressClamp; + descD.samplers[0].magFilter = GFXTextureFilterLinear; + descD.samplers[0].minFilter = GFXTextureFilterLinear; + descD.samplers[0].mipFilter = GFXTextureFilterLinear; + descD.samplers[0].textureColorOp = GFXTOPDisable; + + // DepthBuffer sampler + descD.samplers[1].addressModeU = GFXAddressClamp; + descD.samplers[1].addressModeV = GFXAddressClamp; + descD.samplers[1].addressModeW = GFXAddressClamp; + descD.samplers[1].magFilter = GFXTextureFilterLinear; + descD.samplers[1].minFilter = GFXTextureFilterLinear; + descD.samplers[1].mipFilter = GFXTextureFilterLinear; + descD.samplers[1].textureColorOp = GFXTOPModulate; + + // FrontBuffer sampler + descD.samplers[2].addressModeU = GFXAddressClamp; + descD.samplers[2].addressModeV = GFXAddressClamp; + descD.samplers[2].addressModeW = GFXAddressClamp; + descD.samplers[2].magFilter = GFXTextureFilterLinear; + descD.samplers[2].minFilter = GFXTextureFilterLinear; + descD.samplers[2].mipFilter = GFXTextureFilterLinear; + descD.samplers[2].textureColorOp = GFXTOPModulate; + + // animated density modifier map sampler + descD.samplers[3].addressModeU = GFXAddressWrap; + descD.samplers[3].addressModeV = GFXAddressWrap; + descD.samplers[3].addressModeW = GFXAddressWrap; + descD.samplers[3].magFilter = GFXTextureFilterLinear; + descD.samplers[3].minFilter = GFXTextureFilterLinear; + descD.samplers[3].mipFilter = GFXTextureFilterLinear; + descD.samplers[3].textureColorOp = GFXTOPModulate; + + dMemcpy(&descF, &descD, sizeof(GFXStateBlockDesc)); + descF.setCullMode(GFXCullCCW); + descF.setBlend(true); + descF.setZReadWrite(true, false); + + desc_refl.setCullMode(GFXCullCCW); + desc_refl.setBlend(true); + desc_refl.setZReadWrite(true, false); + + mStateblock_preD = GFX->createStateBlock(desc_preD); + mStateblock_preF = GFX->createStateBlock(desc_preF); + mStateblockD = GFX->createStateBlock(descD); + mStateblockF = GFX->createStateBlock(descF); + mStateblock_refl = GFX->createStateBlock(desc_refl); + + // Create Rendertarget + + z_buf = GFX->allocRenderToTextureTarget(); + if (z_buf == NULL) + { + Con::errorf("VolumetricFog::setupRenderer - Could not create Render Target"); + return false; + } + + return true; +} + +void VolumetricFog::prepRenderImage(SceneRenderState *state) +{ + if (!mShapeLoaded || mFogDensity <= 0.0f || mResizing) + return; + + if (!state->isDiffusePass()) + { + if (!state->isReflectPass()) + return; + } + + PROFILE_SCOPE(VolumetricFog_prepRenderImage); + + // Time critical therefore static_cast + ShapeBase* control = static_cast(conn->getControlObject()); + if (control->getWaterCoverage() >= 0.9f && !mIgnoreWater) + return; + + camPos = state->getCameraPosition(); + F32 dist = (camPos - getBoxCenter()).len(); + F32 scaleFactor = dist * mInvScale; + if (scaleFactor <= 0.0f) + { + if (mCurDetailLevel != 0) + UpdateBuffers(0); + } + const F32 pixelScale = state->getViewport().extent.y / 300.0f; + + mPixelSize = (mRadius / scaleFactor) * state->getWorldToScreenScale().y * pixelScale; + if (mPixelSize < mMinDisplaySize) + return; + if (mNumDetailLevels > 1) + { + if ((det_size[mCurDetailLevel].det_size > mPixelSize) && (mCurDetailLevel < mNumDetailLevels - 1)) + UpdateBuffers(mCurDetailLevel + 1); + else if (mCurDetailLevel > 0) + { + if (mPixelSize >= det_size[mCurDetailLevel - 1].det_size) + UpdateBuffers(mCurDetailLevel - 1); + } + } + + if (state->isReflectPass() && mReflect) + { + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &VolumetricFog::reflect_render); + ri->type = RenderPassManager::RIT_VolumetricFog; + ri->translucentSort = true; + ri->sortDistSq = getRenderWorldBox().getSqDistanceToPoint(camPos); + if (dist < 1.0f) + ri->defaultKey = 1; + else + ri->defaultKey = U32(dist); + state->getRenderPass()->addInst(ri); + return; + } + else if (state->isDiffusePass()) + { + viewDist = state->getFarPlane(); + mFOV = state->getCameraFrustum().getFov() / M_PI_F; + Point3F mEyeVec = state->getVectorEye() * viewDist; + + mViewPoint.x = ((mAtan2(mEyeVec.x, mEyeVec.y) / M_PI_F) + 1.0f) * mTexTiles; + mViewPoint.y = (0.5f - (mAsin(mEyeVec.z) / M_PI_F)) * mTexTiles; + + bool isInside = ColBox.isContained(camPos); + if (isInside && !mCamInFog) + { + mCamInFog = true; + _enterFog(control); + } + else if (!isInside && mCamInFog) + mCamInFog = false; + + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &VolumetricFog::render); + ri->type = RenderPassManager::RIT_VolumetricFog; + ri->translucentSort = true; + ri->sortDistSq = getRenderWorldBox().getSqDistanceToPoint(camPos); + if (dist < 1.0f) + ri->defaultKey = 1; + else + ri->defaultKey = U32(dist); + state->getRenderPass()->addInst(ri); + return; + } + return; +} + +void VolumetricFog::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) +{ + if (overrideMat || !mShapeLoaded || !isClientObject() || mResizing) + return; + + PROFILE_SCOPE(VolumetricFog_Render); + + GFXTransformSaver saver; + GFX->setVertexBuffer(mVB); + GFX->setPrimitiveBuffer(mPB); + + MatrixF mat = getRenderTransform(); + mat.scale(mObjScale); + GFX->multWorld(mat); + + GFX->setShader(mPrePassShader); + GFX->setShaderConstBuffer(mPPShaderConsts); + GFX->setStateBlock(mStateblock_preD); + + // Set all the shader consts... + + MatrixF xform(GFX->getProjectionMatrix()); + xform *= GFX->getViewMatrix(); + xform *= GFX->getWorldMatrix(); + + mPPShaderConsts->setSafe(mPPModelViewProjSC, xform); + + const ColorF &sunlight = state->getAmbientLightColor(); + + Point3F ambientColor(sunlight.red, sunlight.green, sunlight.blue); + mShaderConsts->setSafe(mAmbientColorSC, ambientColor); + + GFXTextureObject *mDepthBuffer = mDepthBufferTarget ? mDepthBufferTarget->getTexture(0) : NULL; + GFXTextureObject *mFrontBuffer = mFrontBufferTarget ? mFrontBufferTarget->getTexture(0) : NULL; + + GFX->pushActiveRenderTarget(); + + //render backside to target mDepthBuffer + z_buf->attachTexture(GFXTextureTarget::DepthStencil, GFXTextureTarget::sDefaultDepthStencil); + z_buf->attachTexture(GFXTextureTarget::Color0, mDepthBuffer); + + GFX->setActiveRenderTarget(z_buf); + GFX->clear(GFXClearStencil | GFXClearTarget , ColorI(0,0,0,0), 1.0f, 0); + + GFX->drawPrimitive(0); + z_buf->resolve(); + + //render frontside to target mFrontBuffer + z_buf->attachTexture(GFXTextureTarget::DepthStencil, GFXTextureTarget::sDefaultDepthStencil); + z_buf->attachTexture(GFXTextureTarget::Color0, mFrontBuffer); + GFX->clear(GFXClearStencil | GFXClearTarget, ColorI(0, 0, 0, 0), 1.0f, 0); + + GFX->setStateBlock(mStateblock_preF); + + GFX->drawPrimitive(0); + z_buf->resolve(); + + GFX->popActiveRenderTarget(); + z_buf->attachTexture(GFXTextureTarget::Color0, NULL); + + //render Volumetric Fog + GFX->setShader(mShader); + GFX->setShaderConstBuffer(mShaderConsts); + + mShaderConsts->setSafe(mModelViewProjSC, xform); + if (mFadeSize > 0.0f) + mShaderConsts->setSafe(mFadeSizeSC, mClampF(mPixelSize / mFadeSize, 0.0f, 1.0f)); + else + mShaderConsts->setSafe(mFadeSizeSC, 1.0f); + mShaderConsts->setSafe(mFogColorSC, mFogColor); + mShaderConsts->setSafe(mFogDensitySC, mFogDensity); + mShaderConsts->setSafe(mPreBias, viewDist); + mShaderConsts->setSafe(mAccumTime, (F32)Sim::getCurrentTime() / 1000.0f); + mShaderConsts->setSafe(mModStrengthSC, mStrength); + mShaderConsts->setSafe(mModSpeedSC, mSpeed); + mShaderConsts->setSafe(mViewPointSC, mViewPoint); + mShaderConsts->setSafe(mTexScaleSC, mTexScale * mFOV); + mShaderConsts->setSafe(mTexTilesSC, mTexTiles); + + GFXTextureObject *prepasstex = mPrepassTarget ? mPrepassTarget->getTexture(0) : NULL; + + GFX->setTexture(0, prepasstex); + GFX->setTexture(1, mDepthBuffer); + GFX->setTexture(2, mFrontBuffer); + + if (mIsTextured && mStrength > 0.0f) + { + GFX->setTexture(3, mTexture); + mShaderConsts->setSafe(mIsTexturedSC, 1.0f); + } + else + mShaderConsts->setSafe(mIsTexturedSC, 0.0f); + + if (mCamInFog) + { + /*GFXLockedRect *rect=mDepthBuffer->lock(); + U32 pixoffset = 0;// 1572864 + (512 * 4); + U8 red = rect->bits[pixoffset]; + U8 green = rect->bits[pixoffset+1]; + U8 blue = rect->bits[pixoffset+2]; + U8 alpha = rect->bits[pixoffset+3]; + mDepthBuffer->unlock(); + S32 lval = ((alpha << 24) + (blue << 16) + (green << 8) + (red)); + F32 fval = ((F32)lval / S32_MAX); + Con::printf("Color %d %d %d %d %d %f", red, green, blue, alpha, lval, fval);*/ + GFX->setStateBlock(mStateblockD); + } + else + GFX->setStateBlock(mStateblockF); + + GFX->drawPrimitive(0); + + // Ensure these two textures are bound to the pixel shader input on the second run as they are used as pixel shader outputs (render targets). + GFX->setTexture(1, NULL); //mDepthBuffer + GFX->setTexture(2, NULL); //mFrontBuffer + GFX->updateStates(); //update the dirty texture state we set above +} + +void VolumetricFog::reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) +{ + if (overrideMat || !mShapeLoaded || !isClientObject() || mResizing || (mFogReflStrength==0.0f)) + return; + + GFXTransformSaver saver; + GFX->setVertexBuffer(mVB); + GFX->setPrimitiveBuffer(mPB); + + MatrixF mat = getRenderTransform(); + mat.scale(mObjScale); + GFX->multWorld(mat); + + GFX->setShader(mReflectionShader); + GFX->setShaderConstBuffer(mReflShaderConsts); + GFX->setStateBlock(mStateblock_refl); + + // Set all the shader consts... + MatrixF xform(GFX->getProjectionMatrix()); + xform *= GFX->getViewMatrix(); + xform *= GFX->getWorldMatrix(); + + mReflShaderConsts->setSafe(mReflModelViewProjSC, xform); + mReflShaderConsts->setSafe(mReflFogColorSC, mFogColor); + mReflShaderConsts->setSafe(mReflFogDensitySC, mFogDensity); + mReflShaderConsts->setSafe(mReflFogStrengthSC, mFogReflStrength); + + GFX->drawPrimitive(0); +} + +//----------------------------------------------------------------------------- +// InitTexture is called whenever a modulation texture is added to the object +//----------------------------------------------------------------------------- + +void VolumetricFog::InitTexture() +{ + mIsTextured = false; + + if (mTextureName.isNotEmpty()) + mTexture.set(mTextureName, &GFXDefaultStaticDiffuseProfile, "VolumetricFogMod"); + + if (!mTexture.isNull()) + { + mIsTextured = true; + + F32 width = (F32)mPlatformWindow->getClientExtent().x; + F32 height = (F32)mPlatformWindow->getClientExtent().y; + + mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); + mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); + } +} + +void VolumetricFog::setFogColor(ColorF color) +{ + mFogColor.set(255 * color.red,255 * color.green,255 * color.blue); + setMaskBits(FogColorMask); +} + +void VolumetricFog::setFogColor(ColorI color) +{ + mFogColor = color; + setMaskBits(FogColorMask); +} + +void VolumetricFog::setFogDensity(F32 density) +{ + if (density < 0.0f) + density = 0.0f; + mFogDensity = density; + setMaskBits(FogDensityMask); +} + +void VolumetricFog::setFogModulation(F32 strength,Point2F speed1,Point2F speed2) +{ + mStrength = strength; + mSpeed1 = speed1; + mSpeed2 = speed2; + mSpeed.set(speed1.x, speed1.y, speed2.x, speed2.y); + setMaskBits(FogModulationMask); +} + +void VolumetricFog::setFogGlow(bool on_off, F32 strength) +{ + mUseGlow = on_off; + mGlowStrength = strength; + setMaskBits(FogPostFXMask); +} + +void VolumetricFog::setFogLightray(bool on_off, F32 strength) +{ + mModifLightRays = on_off; + mLightRayMod = strength; + setMaskBits(FogPostFXMask); +} + +bool VolumetricFog::isInsideFog() +{ + return mCamInFog; +} + +DefineEngineMethod(VolumetricFog, SetFogColorF, void, (ColorF new_color), , +"@brief Changes the color of the fog\n\n." +"@params new_color the new fog color (rgb 0.0 - 1.0, a is ignored.") +{ + object->setFogColor(new_color); +} + +DefineEngineMethod(VolumetricFog, SetFogColor, void, (ColorI new_color), , +"@brief Changes the color of the fog\n\n." +"@params new_color the new fog color (rgb 0-255, a is ignored.") +{ + object->setFogColor(new_color); +} + +DefineEngineMethod(VolumetricFog, SetFogDensity, void, (F32 new_density), , +"@brief Changes the density of the fog\n\n." +"@params new_density the new fog density.") +{ + object->setFogDensity(new_density); +} + +DefineEngineMethod(VolumetricFog, SetFogModulation, void, (F32 new_strenght, Point2F new_speed1, Point2F new_speed2), , +"@brief Changes the modulation of the fog\n\n." +"@params new_strenght the new strength of the modulation.\n" +"@params new_speed1 the new speed (x y) of the modulation layer 1.\n" +"@params new_speed2 the new speed (x y) of the modulation layer 2.\n") +{ + object->setFogModulation(new_strenght, new_speed1, new_speed2); +} + +DefineEngineMethod(VolumetricFog, SetFogGlow, void, (bool on_off,F32 strength), , +"@brief Changes the glow postfx when inside the fog\n\n." +"@params on_off set to true to enable glow.\n" +"@params strength glow strength.\n") +{ + object->setFogGlow(on_off, strength); +} + +DefineEngineMethod(VolumetricFog, SetFogLightray, void, (bool on_off, F32 strength), , +"@brief Changes the lightrays postfx when inside the fog\n\n." +"@params on_off set to true to modification of the lightray postfx.\n" +"@params strength lightray strength.\n") +{ + object->setFogLightray(on_off, strength); +} + +DefineEngineMethod(VolumetricFog, isInsideFog, bool, (), , +"@brief returns true if control object is inside the fog\n\n.") +{ + return object->isInsideFog(); +} \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFog.h b/Engine/source/environment/VolumetricFog.h new file mode 100644 index 0000000000..ef2f39929a --- /dev/null +++ b/Engine/source/environment/VolumetricFog.h @@ -0,0 +1,243 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _VolumetricFog_H_ +#define _VolumetricFog_H_ + +#ifndef _SCENEOBJECT_H_ +#include "scene/sceneObject.h" +#endif +#ifndef _MATTEXTURETARGET_H_ +#include "materials/matTextureTarget.h" +#endif +#ifndef _GFXSHADER_H_ +#include "gfx/gfxShader.h" +#endif +#ifndef _GFXTARGET_H_ +#include "gfx/gfxTarget.h" +#endif +#ifndef _GFXVERTEXBUFFER_H_ +#include "gfx/gfxVertexBuffer.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _POST_EFFECT_H_ +#include "postFx/postEffect.h" +#endif + +#include "gui/core/guiCanvas.h" + +class VolumetricFogRTManager; + +class VolumetricFog : public SceneObject +{ + typedef SceneObject Parent; + + // Maskbits for updating + enum + { + VolumetricFogMask = Parent::NextFreeMask, + FogColorMask = Parent::NextFreeMask << 1, + FogDensityMask = Parent::NextFreeMask << 2, + FogModulationMask = Parent::NextFreeMask << 3, + FogPostFXMask = Parent::NextFreeMask << 4, + FogShapeMask = Parent::NextFreeMask << 5, + NextFreeMask = Parent::NextFreeMask << 6 + }; + +// Struct which holds the shape details + struct meshes + { + F32 det_size; + S32 sub_shape; + S32 obj_det; + U32 num_verts; + GFXVertexPNTT *verts; + Vector *piArray; + Vector *indices; + }; + + protected: + // Rendertargets; + GFXTextureTargetRef z_buf; + NamedTexTargetRef mPrepassTarget; + NamedTexTargetRef mDepthBufferTarget; + NamedTexTargetRef mFrontBufferTarget; + + // Fog Modulation texture + GFXTexHandle mTexture; + + // Shaders + GFXShaderRef mShader; + GFXShaderRef mPrePassShader; + GFXShaderRef mReflectionShader; + + // Stateblocks + GFXStateBlockDesc descD; + GFXStateBlockDesc descF; + GFXStateBlockDesc desc_preD; + GFXStateBlockDesc desc_preF; + GFXStateBlockDesc desc_refl; + + GFXStateBlockRef mStateblockD; + GFXStateBlockRef mStateblockF; + GFXStateBlockRef mStateblock_preD; + GFXStateBlockRef mStateblock_preF; + GFXStateBlockRef mStateblock_refl; + + // Shaderconstants + GFXShaderConstBufferRef mShaderConsts; + GFXShaderConstHandle *mModelViewProjSC; + GFXShaderConstHandle *mFadeSizeSC; + GFXShaderConstHandle *mFogColorSC; + GFXShaderConstHandle *mFogDensitySC; + GFXShaderConstHandle *mPreBias; + GFXShaderConstHandle *mAccumTime; + GFXShaderConstHandle *mIsTexturedSC; + GFXShaderConstHandle *mModSpeedSC; + GFXShaderConstHandle *mModStrengthSC; + GFXShaderConstHandle *mViewPointSC; + GFXShaderConstHandle *mTexScaleSC; + GFXShaderConstHandle *mTexTilesSC; + + GFXShaderConstBufferRef mPPShaderConsts; + GFXShaderConstHandle *mPPModelViewProjSC; + + GFXShaderConstHandle *mAmbientColorSC; + + GFXShaderConstBufferRef mReflShaderConsts; + GFXShaderConstHandle *mReflModelViewProjSC; + GFXShaderConstHandle *mReflFogColorSC; + GFXShaderConstHandle *mReflFogDensitySC; + GFXShaderConstHandle *mReflFogStrengthSC; + + // Vertex and Prim. Buffer + GFXVertexBufferHandle mVB; + GFXPrimitiveBufferHandle mPB; + + // Fog volume data; + StringTableEntry mShapeName; + ColorI mFogColor; + F32 mFogDensity; + bool mIgnoreWater; + bool mReflect; + Vector det_size; + bool mShapeLoaded; + F32 mPixelSize; + F32 mFadeSize; + U32 mCurDetailLevel; + U32 mNumDetailLevels; + F32 mObjSize; + F32 mRadius; + OrientedBox3F ColBox; + VectorF mObjScale; + F32 mMinDisplaySize; + F32 mInvScale; + + // Fog Modulation data + String mTextureName; + bool mIsTextured; + F32 mTexTiles; + F32 mStrength; + Point2F mSpeed1; + Point2F mSpeed2; + Point4F mSpeed; + Point2F mTexScale; + + // Fog Rendering data + Point3F camPos; + Point2F mViewPoint; + F32 mFOV; + F32 viewDist; + bool mIsVBDirty; + bool mIsPBDirty; + bool mCamInFog; + bool mResizing; + PlatformWindow *mPlatformWindow; + + // Reflections + F32 mFogReflStrength; + + // PostFX + PostEffect *glowFX; + bool mUseGlow; + F32 mGlowStrength; + U8 mGlowing; + F32 mCurGlow; + + bool mModifLightRays; + F32 mLightRayMod; + F32 mOldLightRayStrength; + + GameConnection* conn; + U32 mCounter; + + void ResizeRT(PlatformWindow *win, bool resize); + + protected: + // Protected methods + bool onAdd(); + void onRemove(); + void handleResize(VolumetricFogRTManager *RTM, bool resize); + void handleCanvasResize(GuiCanvas* canvas); + + bool LoadShape(); + bool setupRenderer(); + void InitTexture(); + bool UpdateBuffers(U32 dl,bool force=true); + + void processTick(const Move *move); + void _enterFog(ShapeBase *control); + void _leaveFog(ShapeBase *control); + + public: + // Public methods + VolumetricFog(); + ~VolumetricFog(); + + static void initPersistFields(); + virtual void inspectPostApply(); + + U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream); + void unpackUpdate(NetConnection *conn, BitStream *stream); + + void prepRenderImage(SceneRenderState* state); + void render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + void reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + + // Methods for modifying & networking various fog elements + // Used in script + void setFogColor(ColorF color); + void setFogColor(ColorI color); + void setFogDensity(F32 density); + void setFogModulation(F32 strength, Point2F speed1, Point2F speed2); + void setFogGlow(bool on_off, F32 strength); + void setFogLightray(bool on_off, F32 strength); + bool isInsideFog(); + + DECLARE_CONOBJECT(VolumetricFog); + + DECLARE_CALLBACK(void, onEnterFog, (SimObjectId obj)); + DECLARE_CALLBACK(void, onLeaveFog, (SimObjectId obj)); +}; +#endif \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFogRTManager.cpp b/Engine/source/environment/VolumetricFogRTManager.cpp new file mode 100644 index 0000000000..8c98983b21 --- /dev/null +++ b/Engine/source/environment/VolumetricFogRTManager.cpp @@ -0,0 +1,293 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Volumetric Fog Rendertarget Manager +// +// Creates and maintains one set of rendertargets to be used by every +// VolumetricFog object in the scene. +// +// Will be loaded at startup end removed when ending game. +// +//----------------------------------------------------------------------------- + +#include "VolumetricFogRTManager.h" +#include "core/module.h" +#include "scene/sceneManager.h" +#include "windowManager/platformWindowMgr.h" +#include "console/engineAPI.h" +#include "gui/core/guiCanvas.h" +#include "gfx/gfxDevice.h" + +MODULE_BEGIN(VolumetricFogRTManager) + +MODULE_INIT_AFTER(Scene) +MODULE_SHUTDOWN_BEFORE(Scene) + +MODULE_INIT +{ + gVolumetricFogRTManager = new VolumetricFogRTManager; + gClientSceneGraph->addObjectToScene(gVolumetricFogRTManager); +} + +MODULE_SHUTDOWN +{ + gClientSceneGraph->removeObjectFromScene(gVolumetricFogRTManager); + SAFE_DELETE(gVolumetricFogRTManager); +} + +MODULE_END; + +ConsoleDocClass( VolumetricFogRTManager, +"@brief Creates and maintains one set of rendertargets to be used by every\n" +"VolumetricFog object in the scene.\n\n" +"Will be loaded at startup end removed when ending game.\n\n" +"Methods:\n" +" get() returns the currently loaded VolumetricFogRTManager, also accessible\n" +" through VFRTM define.\n" +" Init() Initializes the rendertargets, called when a VolumetricFog object is\n" +" added to the scene.\n" +" isInitialed() returns true if Rendertargets are present, false if not, then\n" +" Init() should be called to create the rendertargets.\n" +" setQuality(U32 Quality) Normally a rendertarget has the same size as the view,\n" +" with this method you can scale down the size of it.\n" +" Be aware that scaling down will introduce renderartefacts.\n" +"@ingroup Atmosphere" +); + +VolumetricFogRTMResizeSignal VolumetricFogRTManager::smVolumetricFogRTMResizeSignal; + +VolumetricFogRTManager *gVolumetricFogRTManager = NULL; + +S32 VolumetricFogRTManager::mTargetScale = 1; + +IMPLEMENT_CONOBJECT(VolumetricFogRTManager); + +VolumetricFogRTManager::VolumetricFogRTManager() +{ + setGlobalBounds(); + mTypeMask |= EnvironmentObjectType; + mNetFlags.set(IsGhost); + mIsInitialized = false; + mNumFogObjects = 0; +} + +VolumetricFogRTManager::~VolumetricFogRTManager() +{ + if (mFrontTarget.isRegistered()) + mFrontTarget.unregister(); + + if (mDepthTarget.isRegistered()) + mDepthTarget.unregister(); + + if (mDepthBuffer.isValid()) + mDepthBuffer->kill(); + + if (mFrontBuffer.isValid()) + mFrontBuffer->kill(); +} + +void VolumetricFogRTManager::onSceneRemove() +{ + if (mIsInitialized) + mPlatformWindow->getScreenResChangeSignal().remove(this, &VolumetricFogRTManager::ResizeRT); +} + +void VolumetricFogRTManager::onRemove() +{ + removeFromScene(); + Parent::onRemove(); +} + +void VolumetricFogRTManager::consoleInit() +{ + Con::addVariable("$pref::VolumetricFog::Quality", TypeS32, &mTargetScale, + "The scale of the rendertargets.\n" + "@ingroup Rendering\n"); +} + +bool VolumetricFogRTManager::Init() +{ + if (mIsInitialized) + { + Con::errorf("VolumetricFogRTManager allready initialized!!"); + return true; + } + + GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); + if (cv == NULL) + { + Con::errorf("VolumetricFogRTManager::Init() - Canvas not found!!"); + return false; + } + + mPlatformWindow = cv->getPlatformWindow(); + mPlatformWindow->getScreenResChangeSignal().notify(this,&VolumetricFogRTManager::ResizeRT); + + if (mTargetScale < 1 || GFX->getAdapterType() == Direct3D11) + mTargetScale = 1; + + mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); + mHeight = mFloor(mPlatformWindow->getClientExtent().y / mTargetScale); + + mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mDepthBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager Fatal Error: Unable to create Depthbuffer"); + return false; + } + if (!mDepthTarget.registerWithName("volfogdepth")) + { + Con::errorf("VolumetricFogRTManager Fatal Error : Unable to register Depthbuffer"); + return false; + } + mDepthTarget.setTexture(mDepthBuffer); + + mFrontBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mFrontBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mFrontBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager Fatal Error: Unable to create front buffer"); + return false; + } + if (!mFrontTarget.registerWithName("volfogfront")) + { + Con::errorf("VolumetricFogRTManager Fatal Error : Unable to register Frontbuffer"); + return false; + } + + mFrontTarget.setTexture(mFrontBuffer); + + Con::setVariable("$VolumetricFog::density", "0.0"); + + mIsInitialized = true; + + return true; +} + +U32 VolumetricFogRTManager::IncFogObjects() +{ + mNumFogObjects++; + return mNumFogObjects; +} + +U32 VolumetricFogRTManager::DecFogObjects() +{ + if (mNumFogObjects > 0) + mNumFogObjects--; + return mNumFogObjects; +} + +void VolumetricFogRTManager::ResizeRT(PlatformWindow* win,bool resize) +{ + mFogHasAnswered = 0; + smVolumetricFogRTMResizeSignal.trigger(this, true); +} + +void VolumetricFogRTManager::FogAnswered() +{ + mFogHasAnswered++; + if (mFogHasAnswered == mNumFogObjects) + { + if (Resize()) + smVolumetricFogRTMResizeSignal.trigger(this, false); + else + Con::errorf("VolumetricFogRTManager::FogAnswered - Error resizing rendertargets!"); + } +} + +bool VolumetricFogRTManager::Resize() +{ + if (mTargetScale < 1 || GFX->getAdapterType() == Direct3D11) + mTargetScale = 1; + + mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); + mHeight = mFloor(mPlatformWindow->getClientExtent().y / mTargetScale); + + if (mWidth < 16 || mHeight < 16) + return false; + + if (mFrontTarget.isRegistered()) + mFrontTarget.setTexture(NULL); + + if (mDepthTarget.isRegistered()) + mDepthTarget.setTexture(NULL); + + if (mDepthBuffer.isValid()) + mDepthBuffer->kill(); + + if (mFrontBuffer.isValid()) + mFrontBuffer->kill(); + + mFrontBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mFrontBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mFrontBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create front buffer"); + return false; + } + mFrontTarget.setTexture(mFrontBuffer); + + mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mDepthBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create Depthbuffer"); + return false; + } + mDepthTarget.setTexture(mDepthBuffer); + return true; +} + +S32 VolumetricFogRTManager::setQuality(U32 Quality) +{ + if (!mIsInitialized) + return (mTargetScale = Quality); + + if (Quality < 1) + Quality = 1; + + if (Quality == mTargetScale) + return mTargetScale; + + mTargetScale = Quality; + + mFogHasAnswered = 0; + smVolumetricFogRTMResizeSignal.trigger(this, true); + + return mTargetScale; +} + +VolumetricFogRTManager* VolumetricFogRTManager::get() +{ + return gVolumetricFogRTManager; +} + +DefineConsoleFunction(SetFogVolumeQuality, S32, (U32 new_quality), , +"@brief Resizes the rendertargets of the Volumetric Fog object.\n" +"@params new_quality new quality for the rendertargets 1 = full size, 2 = halfsize, 3 = 1/3, 4 = 1/4 ...") +{ + if (VFRTM == NULL) + return -1; + return VFRTM->setQuality(new_quality); +} \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFogRTManager.h b/Engine/source/environment/VolumetricFogRTManager.h new file mode 100644 index 0000000000..8000a4447b --- /dev/null +++ b/Engine/source/environment/VolumetricFogRTManager.h @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _VolumetricFogRTManager_H_ +#define _VolumetricFogRTManager_H_ + +#ifndef _SCENEOBJECT_H_ +#include "scene/sceneObject.h" +#endif +#ifndef _MATTEXTURETARGET_H_ +#include "materials/matTextureTarget.h" +#endif +#ifndef _GFXTARGET_H_ +#include "gfx/gfxTarget.h" +#endif +#ifndef _SIGNAL_H_ +#include "core/util/tSignal.h" +#endif + +class VolumetricFogRTManager; + +typedef Signal VolumetricFogRTMResizeSignal; + +#define VFRTM VolumetricFogRTManager::get() + +class VolumetricFogRTManager : public SceneObject +{ + public: + typedef SceneObject Parent; + + protected: + GFXTexHandle mDepthBuffer; + GFXTexHandle mFrontBuffer; + + NamedTexTarget mDepthTarget; + NamedTexTarget mFrontTarget; + + PlatformWindow* mPlatformWindow; + + static S32 mTargetScale; + bool mIsInitialized; + U32 mNumFogObjects; + U32 mFogHasAnswered; + U32 mWidth; + U32 mHeight; + + void onRemove(); + void onSceneRemove(); + void ResizeRT(PlatformWindow *win, bool resize); + + static VolumetricFogRTMResizeSignal smVolumetricFogRTMResizeSignal; + + public: + VolumetricFogRTManager(); + ~VolumetricFogRTManager(); + static VolumetricFogRTManager *get(); + bool Init(); + bool IsInitialized() { return mIsInitialized; } + static void consoleInit(); + static VolumetricFogRTMResizeSignal& getVolumetricFogRTMResizeSignal() { return smVolumetricFogRTMResizeSignal; } + void FogAnswered(); + S32 setQuality(U32 Quality); + bool Resize(); + U32 IncFogObjects(); + U32 DecFogObjects(); + + DECLARE_CONOBJECT(VolumetricFogRTManager); +}; + +extern VolumetricFogRTManager* gVolumetricFogRTManager; + +#endif \ No newline at end of file diff --git a/Engine/source/environment/basicClouds.cpp b/Engine/source/environment/basicClouds.cpp index 185aa3a97e..979579c2f2 100644 --- a/Engine/source/environment/basicClouds.cpp +++ b/Engine/source/environment/basicClouds.cpp @@ -141,7 +141,7 @@ bool BasicClouds::onAdd() GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); - desc.setZReadWrite( false, false ); + desc.setZReadWrite( true, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; diff --git a/Engine/source/environment/cloudLayer.cpp b/Engine/source/environment/cloudLayer.cpp index dca9faf006..3fe02368fd 100644 --- a/Engine/source/environment/cloudLayer.cpp +++ b/Engine/source/environment/cloudLayer.cpp @@ -161,7 +161,7 @@ bool CloudLayer::onAdd() GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); - desc.setZReadWrite( false, false ); + desc.setZReadWrite( true, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; diff --git a/Engine/source/environment/decalRoad.cpp b/Engine/source/environment/decalRoad.cpp index 3cde83149b..1cea7ed4a8 100644 --- a/Engine/source/environment/decalRoad.cpp +++ b/Engine/source/environment/decalRoad.cpp @@ -732,7 +732,7 @@ void DecalRoad::prepRenderImage( SceneRenderState* state ) MathUtils::getZBiasProjectionMatrix( gDecalBias, frustum, tempMat ); coreRI.projection = tempMat; - coreRI.type = RenderPassManager::RIT_Decal; + coreRI.type = RenderPassManager::RIT_DecalRoad; coreRI.vertBuff = &mVB; coreRI.primBuff = &mPB; coreRI.matInst = matInst; diff --git a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp index 117b30ff9c..5d0ac3f788 100644 --- a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp +++ b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp @@ -1248,7 +1248,7 @@ DefineConsoleMethod( GuiMeshRoadEditorCtrl, setNodeNormal, void, (Point3F normal DefineConsoleMethod( GuiMeshRoadEditorCtrl, setSelectedRoad, void, (const char * objName), (""), "" ) { - if ( dStrIsEmpty(objName) ) + if ( String::isEmpty(objName) ) object->setSelectedRoad(NULL); else { diff --git a/Engine/source/environment/meshRoad.cpp b/Engine/source/environment/meshRoad.cpp index e395458f1f..0d30267e5e 100644 --- a/Engine/source/environment/meshRoad.cpp +++ b/Engine/source/environment/meshRoad.cpp @@ -1552,7 +1552,7 @@ bool MeshRoad::castRay( const Point3F &s, const Point3F &e, RayInfo *info ) info->point.interpolate(start, end, out); info->face = -1; info->object = this; - + info->material = this->mMatInst[0]; return true; } diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index 3e2d2d890a..7607246f47 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -82,13 +82,6 @@ const F32 ScatterSky::smEarthRadius = (6378.0f * 1000.0f); const F32 ScatterSky::smAtmosphereRadius = 200000.0f; const F32 ScatterSky::smViewerHeight = 1.0f; -GFXImplementVertexFormat( ScatterSkyVertex ) -{ - addElement( "POSITION", GFXDeclType_Float3 ); - addElement( "NORMAL", GFXDeclType_Float3 ); - addElement( "COLOR", GFXDeclType_Color ); -} - ScatterSky::ScatterSky() { mPrimCount = 0; @@ -151,6 +144,8 @@ ScatterSky::ScatterSky() mBrightness = 1.0f; mCastShadows = true; + mStaticRefreshFreq = 8; + mDynamicRefreshFreq = 8; mDirty = true; mLight = LightManager::createLightInfo(); @@ -271,6 +266,8 @@ void ScatterSky::_conformLights() mLight->setAmbient( mAmbientColor ); mLight->setColor( mSunColor ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); FogData fog = getSceneManager()->getFogData(); fog.color = mFogColor; @@ -381,6 +378,9 @@ void ScatterSky::initPersistFields() addField( "castShadows", TypeBool, Offset( mCastShadows, ScatterSky ), "Enables/disables shadows cast by objects due to ScatterSky light." ); + addField("staticRefreshFreq", TypeS32, Offset(mStaticRefreshFreq, ScatterSky), "static shadow refresh rate (milliseconds)"); + addField("dynamicRefreshFreq", TypeS32, Offset(mDynamicRefreshFreq, ScatterSky), "dynamic shadow refresh rate (milliseconds)"); + addField( "brightness", TypeF32, Offset( mBrightness, ScatterSky ), "The brightness of the ScatterSky's light object." ); @@ -487,6 +487,8 @@ U32 ScatterSky::packUpdate(NetConnection *con, U32 mask, BitStream *stream) stream->write( mBrightness ); stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mFlareScale ); @@ -588,6 +590,8 @@ void ScatterSky::unpackUpdate(NetConnection *con, BitStream *stream) stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mFlareScale ); @@ -761,7 +765,7 @@ void ScatterSky::_initVBIB() F32 zOffset = -( mCos( mSqrt( 1.0f ) ) + 0.01f ); mVB.set( GFX, mVertCount, GFXBufferTypeStatic ); - ScatterSkyVertex *pVert = mVB.lock(); + GFXVertexP *pVert = mVB.lock(); if(!pVert) return; for ( U32 y = 0; y < vertStride; y++ ) @@ -951,12 +955,21 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat Point3F camPos2 = state->getCameraPosition(); MatrixF xfm(true); - xfm.setPosition(camPos2 - Point3F( 0, 0, mZOffset)); + GFX->multWorld(xfm); MatrixF xform(proj);//GFX->getProjectionMatrix()); xform *= GFX->getViewMatrix(); xform *= GFX->getWorldMatrix(); + if(state->isReflectPass()) + { + static MatrixF rotMat(EulerF(0.0, 0.0, M_PI_F)); + xform.mul(rotMat); + rotMat.set(EulerF(M_PI_F, 0.0, 0.0)); + xform.mul(rotMat); + } + xform.setPosition(xform.getPosition() - Point3F(0, 0, mZOffset)); + mShaderConsts->setSafe( mModelViewProjSC, xform ); mShaderConsts->setSafe( mMiscSC, miscParams ); mShaderConsts->setSafe( mSphereRadiiSC, sphereRadii ); @@ -1054,17 +1067,17 @@ void ScatterSky::_renderMoon( ObjectRenderInst *ri, SceneRenderState *state, Bas // Initialize points with basic info Point3F points[4]; - points[0] = Point3F(-BBRadius, 0.0, -BBRadius); + points[0] = Point3F( -BBRadius, 0.0, -BBRadius); points[1] = Point3F( -BBRadius, 0.0, BBRadius); - points[2] = Point3F( BBRadius, 0.0, BBRadius); - points[3] = Point3F( BBRadius, 0.0, -BBRadius); + points[2] = Point3F( BBRadius, 0.0, -BBRadius); + points[3] = Point3F( BBRadius, 0.0, BBRadius); static const Point2F sCoords[4] = { Point2F( 0.0f, 0.0f ), Point2F( 0.0f, 1.0f ), - Point2F( 1.0f, 1.0f ), - Point2F( 1.0f, 0.0f ) + Point2F( 1.0f, 0.0f ), + Point2F( 1.0f, 1.0f ) }; // Get info we need to adjust points @@ -1113,7 +1126,7 @@ void ScatterSky::_renderMoon( ObjectRenderInst *ri, SceneRenderState *state, Bas mMoonMatInst->setSceneInfo( state, sgData ); GFX->setVertexBuffer( vb ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } diff --git a/Engine/source/environment/scatterSky.h b/Engine/source/environment/scatterSky.h index 66177851da..ff0e595a0a 100644 --- a/Engine/source/environment/scatterSky.h +++ b/Engine/source/environment/scatterSky.h @@ -57,14 +57,6 @@ class TimeOfDay; class CubemapData; class MatrixSet; - -GFXDeclareVertexFormat( ScatterSkyVertex ) -{ - Point3F point; - VectorF normal; - GFXVertexColor color; -}; - class ScatterSky : public SceneObject, public ISceneLight { typedef SceneObject Parent; @@ -207,6 +199,8 @@ class ScatterSky : public SceneObject, public ISceneLight LightInfo *mLight; bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; bool mDirty; LightFlareData *mFlareData; @@ -228,7 +222,7 @@ class ScatterSky : public SceneObject, public ISceneLight // Prim buffer, vertex buffer and shader for rendering. GFXPrimitiveBufferHandle mPrimBuffer; - GFXVertexBufferHandle mVB; + GFXVertexBufferHandle mVB; GFXShaderRef mShader; GFXStateBlockRef mStateBlock; diff --git a/Engine/source/environment/skyBox.cpp b/Engine/source/environment/skyBox.cpp index 5adb28b98e..00d0a6b4d7 100644 --- a/Engine/source/environment/skyBox.cpp +++ b/Engine/source/environment/skyBox.cpp @@ -252,7 +252,7 @@ void SkyBox::_renderObject( ObjectRenderInst *ri, SceneRenderState *state, BaseM void SkyBox::_initRender() { - GFXVertexPNTT *tmpVerts = NULL; + GFXVertexPNT *tmpVerts = NULL; U32 vertCount = 36; @@ -264,7 +264,7 @@ void SkyBox::_initRender() // Create temp vertex pointer // so we can read from it // for generating the normals below. - tmpVerts = new GFXVertexPNTT[vertCount]; + tmpVerts = new GFXVertexPNT[vertCount]; // We don't bother sharing // vertices here, in order to @@ -400,14 +400,14 @@ void SkyBox::_initRender() mIsVBDirty = false; } - GFXVertexPNTT *vertPtr = mVB.lock(); + GFXVertexPNT *vertPtr = mVB.lock(); if (!vertPtr) { delete[] tmpVerts; return; } - dMemcpy( vertPtr, tmpVerts, sizeof ( GFXVertexPNTT ) * vertCount ); + dMemcpy(vertPtr, tmpVerts, sizeof( GFXVertexPNT) * vertCount); mVB.unlock(); @@ -599,7 +599,8 @@ void SkyBox::_initMaterial() // We want to disable culling and z write. GFXStateBlockDesc desc; - desc.setCullMode( GFXCullCW ); + desc.setCullMode( GFXCullNone ); + desc.setBlend( true ); desc.setZReadWrite( true, false ); mMatInstance->addStateBlockDesc( desc ); @@ -607,9 +608,10 @@ void SkyBox::_initMaterial() FeatureSet features = MATMGR->getDefaultFeatures(); features.removeFeature( MFT_RTLighting ); features.removeFeature( MFT_Visibility ); + features.addFeature(MFT_SkyBox); // Now initialize the material. - mMatInstance->init( features, getGFXVertexFormat() ); + mMatInstance->init(features, getGFXVertexFormat()); } void SkyBox::_updateMaterial() diff --git a/Engine/source/environment/skyBox.h b/Engine/source/environment/skyBox.h index 997088eb98..eeb2c24b5a 100644 --- a/Engine/source/environment/skyBox.h +++ b/Engine/source/environment/skyBox.h @@ -105,7 +105,7 @@ class SkyBox : public SceneObject SimObjectPtr mMaterial; - GFXVertexBufferHandle mVB; + GFXVertexBufferHandle mVB; GFXVertexBufferHandle mFogBandVB; Material *mFogBandMat; diff --git a/Engine/source/environment/sun.cpp b/Engine/source/environment/sun.cpp index 45181a27b5..729e3b57bc 100644 --- a/Engine/source/environment/sun.cpp +++ b/Engine/source/environment/sun.cpp @@ -66,6 +66,8 @@ Sun::Sun() mSunAzimuth = 0.0f; mSunElevation = 35.0f; mCastShadows = true; + mStaticRefreshFreq = 250; + mDynamicRefreshFreq = 8; mAnimateSun = false; mTotalTime = 0.0f; @@ -163,7 +165,10 @@ void Sun::initPersistFields() "Adjust the Sun's global contrast/intensity"); addField( "castShadows", TypeBool, Offset( mCastShadows, Sun ), - "Enables/disables shadows cast by objects due to Sun light"); + "Enables/disables shadows cast by objects due to Sun light"); + + addField("staticRefreshFreq", TypeS32, Offset(mStaticRefreshFreq, Sun), "static shadow refresh rate (milliseconds)"); + addField("dynamicRefreshFreq", TypeS32, Offset(mDynamicRefreshFreq, Sun), "dynamic shadow refresh rate (milliseconds)"); endGroup( "Lighting" ); @@ -220,7 +225,9 @@ U32 Sun::packUpdate(NetConnection *conn, U32 mask, BitStream *stream ) stream->write( mLightColor ); stream->write( mLightAmbient ); stream->write( mBrightness ); - stream->writeFlag( mCastShadows ); + stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mFlareScale ); if ( stream->writeFlag( mFlareData ) ) @@ -254,6 +261,8 @@ void Sun::unpackUpdate( NetConnection *conn, BitStream *stream ) stream->read( &mLightAmbient ); stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mFlareScale ); if ( stream->readFlag() ) @@ -426,6 +435,8 @@ void Sun::_conformLights() // directional color are the same. bool castShadows = mLightColor != mLightAmbient && mCastShadows; mLight->setCastShadows( castShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); } void Sun::_initCorona() @@ -456,15 +467,15 @@ void Sun::_renderCorona( ObjectRenderInst *ri, SceneRenderState *state, BaseMatI Point3F points[4]; points[0] = Point3F(-BBRadius, 0.0, -BBRadius); points[1] = Point3F( -BBRadius, 0.0, BBRadius); - points[2] = Point3F( BBRadius, 0.0, BBRadius); - points[3] = Point3F( BBRadius, 0.0, -BBRadius); + points[2] = Point3F( BBRadius, 0.0, -BBRadius); + points[3] = Point3F(BBRadius, 0.0, BBRadius); static const Point2F sCoords[4] = { Point2F( 0.0f, 0.0f ), Point2F( 0.0f, 1.0f ), - Point2F( 1.0f, 1.0f ), - Point2F( 1.0f, 0.0f ) + Point2F( 1.0f, 0.0f ), + Point2F(1.0f, 1.0f) }; // Get info we need to adjust points @@ -514,7 +525,7 @@ void Sun::_renderCorona( ObjectRenderInst *ri, SceneRenderState *state, BaseMatI mCoronaMatInst->setSceneInfo( state, sgData ); GFX->setVertexBuffer( vb ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } diff --git a/Engine/source/environment/sun.h b/Engine/source/environment/sun.h index d82c457684..27ce97ae6f 100644 --- a/Engine/source/environment/sun.h +++ b/Engine/source/environment/sun.h @@ -65,6 +65,8 @@ class Sun : public SceneObject, public ISceneLight F32 mEndElevation; bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; LightInfo *mLight; diff --git a/Engine/source/environment/timeOfDay.cpp b/Engine/source/environment/timeOfDay.cpp index 49b069b643..a0ae2fc83b 100644 --- a/Engine/source/environment/timeOfDay.cpp +++ b/Engine/source/environment/timeOfDay.cpp @@ -402,7 +402,7 @@ void TimeOfDay::_getSunColor( ColorF *outColor ) const //simple check if ( mColorTargets[0].elevation != 0.0f ) { - AssertFatal(0, "TimeOfDay::GetColor() - First elevation must be 0.0 radians") + AssertFatal(0, "TimeOfDay::GetColor() - First elevation must be 0.0 radians"); outColor->set(1.0f, 1.0f, 1.0f); //mBandMod = 1.0f; //mCurrentBandColor = color; @@ -411,7 +411,7 @@ void TimeOfDay::_getSunColor( ColorF *outColor ) const if ( mColorTargets[mColorTargets.size()-1].elevation != M_PI_F ) { - AssertFatal(0, "Celestails::GetColor() - Last elevation must be PI") + AssertFatal(0, "Celestails::GetColor() - Last elevation must be PI"); outColor->set(1.0f, 1.0f, 1.0f); //mBandMod = 1.0f; //mCurrentBandColor = color; diff --git a/Engine/source/environment/waterBlock.cpp b/Engine/source/environment/waterBlock.cpp index df692fad0d..1d2fa8f300 100644 --- a/Engine/source/environment/waterBlock.cpp +++ b/Engine/source/environment/waterBlock.cpp @@ -205,8 +205,6 @@ void WaterBlock::setupVertexBlock( U32 width, U32 height, U32 rowOffset ) U32 numVerts = width * height; GFXWaterVertex *verts = new GFXWaterVertex[ numVerts ]; - ColorI waterColor(31, 56, 64, 127); - GFXVertexColor vertCol(waterColor); U32 index = 0; for( U32 i=0; ipoint.x = vertX; vert->point.y = vertY; vert->point.z = 0.0; - vert->color = vertCol; vert->normal.set(0,0,1); vert->undulateData.set( vertX, vertY ); vert->horizonFactor.set( 0, 0, 0, 0 ); diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index beb4bc8a6b..1dab7ca746 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -50,7 +50,6 @@ GFXImplementVertexFormat( GFXWaterVertex ) { addElement( "POSITION", GFXDeclType_Float3 ); addElement( "NORMAL", GFXDeclType_Float3 ); - addElement( "COLOR", GFXDeclType_Color ); addElement( "TEXCOORD", GFXDeclType_Float2, 0 ); addElement( "TEXCOORD", GFXDeclType_Float4, 1 ); } @@ -207,7 +206,7 @@ WaterObject::WaterObject() mEmissive( false ), mUnderwaterColor(9, 6, 5, 240) { - mTypeMask = WaterObjectType | StaticObjectType; + mTypeMask = WaterObjectType; for( U32 i=0; i < MAX_WAVES; i++ ) { @@ -827,25 +826,25 @@ void WaterObject::drawUnderwaterFilter( SceneRenderState *state ) // draw quad - GFXVertexBufferHandle verts( GFX, 4, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( GFX, 4, GFXBufferTypeVolatile ); verts.lock(); - verts[0].point.set( -1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); + verts[0].point.set(1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); verts[0].color = mUnderwaterColor; - verts[1].point.set( -1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); + verts[1].point.set(1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); verts[1].color = mUnderwaterColor; - verts[2].point.set( 1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); + verts[2].point.set(-1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); verts[2].color = mUnderwaterColor; - verts[3].point.set( 1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); + verts[3].point.set(-1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); verts[3].color = mUnderwaterColor; verts.unlock(); GFX->setVertexBuffer( verts ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); // reset states / transforms GFX->setProjectionMatrix( proj ); @@ -1142,7 +1141,7 @@ bool WaterObject::initMaterial( S32 idx ) else mat = MATMGR->createMatInstance( mSurfMatName[idx] ); - const GFXVertexFormat *flags = getGFXVertexFormat(); + const GFXVertexFormat *flags = getGFXVertexFormat(); if ( mat && mat->init( MATMGR->getDefaultFeatures(), flags ) ) { diff --git a/Engine/source/environment/waterObject.h b/Engine/source/environment/waterObject.h index f391a20946..f5939bf0ad 100644 --- a/Engine/source/environment/waterObject.h +++ b/Engine/source/environment/waterObject.h @@ -49,7 +49,6 @@ GFXDeclareVertexFormat( GFXWaterVertex ) { Point3F point; Point3F normal; - GFXVertexColor color; Point2F undulateData; Point4F horizonFactor; }; diff --git a/Engine/source/environment/waterPlane.cpp b/Engine/source/environment/waterPlane.cpp index 261ba7f099..cd94a52918 100644 --- a/Engine/source/environment/waterPlane.cpp +++ b/Engine/source/environment/waterPlane.cpp @@ -175,9 +175,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) { const Frustum &frustum = state->getCullingFrustum(); - // Water base-color, assigned as color for all verts. - const GFXVertexColor vertCol(mWaterFogData.color); - // World-Up vector, assigned as normal for all verts. const Point3F worldUp( 0.0f, 0.0f, 1.0f ); @@ -250,7 +247,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) xVal = cornerPosition.x + (F32)( j * squareSize ); vertPtr->point.set( xVal, yVal, 0.0f ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr->undulateData.set( xVal, yVal ); vertPtr->horizonFactor.set( 0, 0, 0, 0 ); @@ -404,7 +400,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) vertPtr->point.set( pos.x, pos.y, 0.0f ); vertPtr->undulateData.set( pos.x, pos.y ); vertPtr->horizonFactor.set( 0, 0, 0, 0 ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr++; } @@ -427,7 +422,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) vertPtr->point.set( pos.x, pos.y, 50.0f ); vertPtr->undulateData.set( pos.x, pos.y ); vertPtr->horizonFactor.set( 1, 0, 0, 0 ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr++; } diff --git a/Engine/source/forest/forestCell.cpp b/Engine/source/forest/forestCell.cpp index a2a4f36e62..b72d585e2e 100644 --- a/Engine/source/forest/forestCell.cpp +++ b/Engine/source/forest/forestCell.cpp @@ -118,6 +118,9 @@ S32 ForestCell::renderBatches( SceneRenderState *state, Frustum *culler ) if ( culler && culler->isCulled( mBatches[i]->getWorldBox() ) ) continue; + if( state->getCullingState().isOccludedWithExtraPlanesCull( mBatches[i]->getWorldBox() ) ) + continue; + mBatches[i]->render( state ); renderedItems += mBatches[i]->getItemCount(); } diff --git a/Engine/source/forest/forestRender.cpp b/Engine/source/forest/forestRender.cpp index 3fa2b30479..cae86da3fc 100644 --- a/Engine/source/forest/forestRender.cpp +++ b/Engine/source/forest/forestRender.cpp @@ -197,6 +197,10 @@ void Forest::prepRenderImage( SceneRenderState *state ) if ( smDisableImposters ) continue; + // if cell are to far for largest item, then skip out. + if( TSShapeInstance::smLastPixelSize < TSShapeInstance::smSmallestVisiblePixelSize ) + continue; + PROFILE_SCOPE(Forest_RenderBatches); // Keep track of how many cells were batched. diff --git a/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp new file mode 100644 index 0000000000..14c37c63a6 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11CardProfiler.h" +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "platformWin32/videoInfo/wmiVideoInfo.h" +#include "console/console.h" +#include "gfx/primBuilder.h" + + +GFXD3D11CardProfiler::GFXD3D11CardProfiler() : GFXCardProfiler() +{ +} + +GFXD3D11CardProfiler::~GFXD3D11CardProfiler() +{ + +} + +void GFXD3D11CardProfiler::init() +{ + U32 adapterIndex = D3D11->getAdaterIndex(); + WMIVideoInfo wmiVidInfo; + if (wmiVidInfo.profileAdapters()) + { + const PlatformVideoInfo::PVIAdapter &adapter = wmiVidInfo.getAdapterInformation(adapterIndex); + + mCardDescription = adapter.description; + mChipSet = adapter.chipSet; + mVersionString = adapter.driverVersion; + mVideoMemory = adapter.vram; + } + Parent::init(); +} + +void GFXD3D11CardProfiler::setupCardCapabilities() +{ + setCapability("maxTextureWidth", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); + setCapability("maxTextureHeight", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); + setCapability("maxTextureSize", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); +} + +bool GFXD3D11CardProfiler::_queryCardCap(const String &query, U32 &foundResult) +{ + return false; +} + +bool GFXD3D11CardProfiler::_queryFormat( const GFXFormat fmt, const GFXTextureProfile *profile, bool &inOutAutogenMips ) +{ + // D3D11 feature level should guarantee that any format is valid! + return GFXD3D11TextureFormat[fmt] != DXGI_FORMAT_UNKNOWN; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h new file mode 100644 index 0000000000..c264329282 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11CARDPROFILER_H_ +#define _GFXD3D11CARDPROFILER_H_ + +#include "gfx/gfxCardProfile.h" + +class GFXD3D11CardProfiler : public GFXCardProfiler +{ +private: + typedef GFXCardProfiler Parent; + +public: + GFXD3D11CardProfiler(); + ~GFXD3D11CardProfiler(); + void init(); + +protected: + const String &getRendererString() const { static String sRS("Direct3D11"); return sRS; } + + void setupCardCapabilities(); + bool _queryCardCap(const String &query, U32 &foundResult); + bool _queryFormat(const GFXFormat fmt, const GFXTextureProfile *profile, bool &inOutAutogenMips); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp new file mode 100644 index 0000000000..281e7e786d --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp @@ -0,0 +1,352 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/gfxCardProfile.h" +#include "gfx/gfxTextureManager.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" + +GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL) +{ + mDynamic = false; + mAutoGenMips = false; + mFaceFormat = GFXFormatR8G8B8A8; + + for (U32 i = 0; i < CubeFaces; i++) + { + mRTView[i] = NULL; + } +} + +GFXD3D11Cubemap::~GFXD3D11Cubemap() +{ + releaseSurfaces(); +} + +void GFXD3D11Cubemap::releaseSurfaces() +{ + if (mDynamic) + GFXTextureManager::removeEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent); + + for (U32 i = 0; i < CubeFaces; i++) + { + SAFE_RELEASE(mRTView[i]); + } + + SAFE_RELEASE(mDSView); + SAFE_RELEASE(mSRView); + SAFE_RELEASE(mTexture); +} + +void GFXD3D11Cubemap::_onTextureEvent(GFXTexCallbackCode code) +{ + if (code == GFXZombify) + releaseSurfaces(); + else if (code == GFXResurrect) + initDynamic(mTexSize); +} + +bool GFXD3D11Cubemap::isCompressed(GFXFormat format) +{ + if (format >= GFXFormatDXT1 && format <= GFXFormatDXT5) + return true; + + return false; +} + +void GFXD3D11Cubemap::initStatic(GFXTexHandle *faces) +{ + AssertFatal( faces, "GFXD3D11Cubemap::initStatic - Got null GFXTexHandle!" ); + AssertFatal( *faces, "empty texture passed to CubeMap::create" ); + + // NOTE - check tex sizes on all faces - they MUST be all same size + mTexSize = faces->getWidth(); + mFaceFormat = faces->getFormat(); + bool compressed = isCompressed(mFaceFormat); + + UINT bindFlags = D3D11_BIND_SHADER_RESOURCE; + UINT miscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE; + if (!compressed) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + } + + U32 mipLevels = faces->getPointer()->getMipLevels(); + if (mipLevels > 1) + mAutoGenMips = true; + + D3D11_TEXTURE2D_DESC desc; + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = mAutoGenMips ? 0 : mipLevels; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = bindFlags; + desc.MiscFlags = miscFlags; + desc.CPUAccessFlags = 0; + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap:initStatic(GFXTexhandle *faces) - failed to create texcube texture"); + } + + for (U32 i = 0; i < CubeFaces; i++) + { + GFXD3D11TextureObject *texObj = static_cast((GFXTextureObject*)faces[i]); + U32 subResource = D3D11CalcSubresource(0, i, mipLevels); + D3D11DEVICECONTEXT->CopySubresourceRegion(mTexture, subResource, 0, 0, 0, texObj->get2DTex(), 0, NULL); + } + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = mAutoGenMips ? -1 : mipLevels; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initStatic(GFXTexHandle *faces) - texcube shader resource view creation failure"); + } + + if (mAutoGenMips && !compressed) + D3D11DEVICECONTEXT->GenerateMips(mSRView); +} + +void GFXD3D11Cubemap::initStatic(DDSFile *dds) +{ + AssertFatal(dds, "GFXD3D11Cubemap::initStatic - Got null DDS file!"); + AssertFatal(dds->isCubemap(), "GFXD3D11Cubemap::initStatic - Got non-cubemap DDS file!"); + AssertFatal(dds->mSurfaces.size() == 6, "GFXD3D11Cubemap::initStatic - DDS has less than 6 surfaces!"); + + // NOTE - check tex sizes on all faces - they MUST be all same size + mTexSize = dds->getWidth(); + mFaceFormat = dds->getFormat(); + U32 levels = dds->getMipLevels(); + + D3D11_TEXTURE2D_DESC desc; + + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = levels; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_IMMUTABLE; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE | D3D11_RESOURCE_MISC_GENERATE_MIPS; + + D3D11_SUBRESOURCE_DATA* pData = new D3D11_SUBRESOURCE_DATA[6 + levels]; + + for (U32 i = 0; imSurfaces[i]) + continue; + + for(U32 j = 0; j < levels; j++) + { + pData[i + j].pSysMem = dds->mSurfaces[i]->mMips[j]; + pData[i + j].SysMemPitch = dds->getSurfacePitch(j); + pData[i + j].SysMemSlicePitch = dds->getSurfaceSize(j); + } + } + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, pData, &mTexture); + + delete [] pData; + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = levels; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initStatic(DDSFile *dds) - CreateTexture2D call failure"); + } +} + +void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat) +{ + if(!mDynamic) + GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent); + + mDynamic = true; + mAutoGenMips = true; + mTexSize = texSize; + mFaceFormat = faceFormat; + bool compressed = isCompressed(mFaceFormat); + + UINT bindFlags = D3D11_BIND_SHADER_RESOURCE; + UINT miscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE; + if (!compressed) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + } + + D3D11_TEXTURE2D_DESC desc; + + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = 0; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = 0; + desc.MiscFlags = miscFlags; + + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture); + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = -1; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure"); + } + + D3D11_RENDER_TARGET_VIEW_DESC viewDesc; + viewDesc.Format = desc.Format; + viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; + viewDesc.Texture2DArray.ArraySize = 1; + viewDesc.Texture2DArray.MipSlice = 0; + + for (U32 i = 0; i < CubeFaces; i++) + { + viewDesc.Texture2DArray.FirstArraySlice = i; + hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i]); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure"); + } + } + + D3D11_TEXTURE2D_DESC depthTexDesc; + depthTexDesc.Width = mTexSize; + depthTexDesc.Height = mTexSize; + depthTexDesc.MipLevels = 1; + depthTexDesc.ArraySize = 1; + depthTexDesc.SampleDesc.Count = 1; + depthTexDesc.SampleDesc.Quality = 0; + depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT; + depthTexDesc.Usage = D3D11_USAGE_DEFAULT; + depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + depthTexDesc.CPUAccessFlags = 0; + depthTexDesc.MiscFlags = 0; + + ID3D11Texture2D* depthTex = 0; + hr = D3D11DEVICE->CreateTexture2D(&depthTexDesc, 0, &depthTex); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D for depth stencil call failure"); + } + + // Create the depth stencil view for the entire cube + D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = depthTexDesc.Format; //The format must match the depth texture we created above + dsvDesc.Flags = 0; + dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + hr = D3D11DEVICE->CreateDepthStencilView(depthTex, &dsvDesc, &mDSView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateDepthStencilView call failure"); + } + + SAFE_RELEASE(depthTex); + +} + +//----------------------------------------------------------------------------- +// Set the cubemap to the specified texture unit num +//----------------------------------------------------------------------------- +void GFXD3D11Cubemap::setToTexUnit(U32 tuNum) +{ + D3D11DEVICECONTEXT->PSSetShaderResources(tuNum, 1, &mSRView); +} + +void GFXD3D11Cubemap::zombify() +{ + // Static cubemaps are handled by D3D + if( mDynamic ) + releaseSurfaces(); +} + +void GFXD3D11Cubemap::resurrect() +{ + // Static cubemaps are handled by D3D + if( mDynamic ) + initDynamic( mTexSize, mFaceFormat ); +} + +ID3D11ShaderResourceView* GFXD3D11Cubemap::getSRView() +{ + return mSRView; +} + +ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx) +{ + AssertFatal(faceIdx < CubeFaces, "GFXD3D11Cubemap::getRTView - face index out of bounds"); + + return mRTView[faceIdx]; +} + +ID3D11RenderTargetView** GFXD3D11Cubemap::getRTViewArray() +{ + return mRTView; +} + +ID3D11DepthStencilView* GFXD3D11Cubemap::getDSView() +{ + return mDSView; +} + +ID3D11Texture2D* GFXD3D11Cubemap::get2DTex() +{ + return mTexture; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h new file mode 100644 index 0000000000..f24933d081 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11CUBEMAP_H_ +#define _GFXD3D11CUBEMAP_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxCubemap.h" +#include "gfx/gfxResource.h" +#include "gfx/gfxTarget.h" + +const U32 CubeFaces = 6; + +class GFXD3D11Cubemap : public GFXCubemap +{ +public: + virtual void initStatic( GFXTexHandle *faces ); + virtual void initStatic( DDSFile *dds ); + virtual void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8 ); + virtual void setToTexUnit( U32 tuNum ); + virtual U32 getSize() const { return mTexSize; } + virtual GFXFormat getFormat() const { return mFaceFormat; } + + GFXD3D11Cubemap(); + virtual ~GFXD3D11Cubemap(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); + + // Get functions + ID3D11ShaderResourceView* getSRView(); + ID3D11RenderTargetView* getRTView(U32 faceIdx); + ID3D11RenderTargetView** getRTViewArray(); + ID3D11DepthStencilView* getDSView(); + ID3D11Texture2D* get2DTex(); + +private: + + friend class GFXD3D11TextureTarget; + friend class GFXD3D11Device; + + ID3D11Texture2D* mTexture; + ID3D11ShaderResourceView* mSRView; // for shader resource input + ID3D11RenderTargetView* mRTView[CubeFaces]; // for render targets, 6 faces of the cubemap + ID3D11DepthStencilView* mDSView; //render target view for depth stencil + + bool mAutoGenMips; + bool mDynamic; + U32 mTexSize; + GFXFormat mFaceFormat; + + void releaseSurfaces(); + + bool isCompressed(GFXFormat format); + /// The callback used to get texture events. + /// @see GFXTextureManager::addEventDelegate + void _onTextureEvent(GFXTexCallbackCode code); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11Device.cpp b/Engine/source/gfx/D3D11/gfxD3D11Device.cpp new file mode 100644 index 0000000000..e38ff546ce --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Device.cpp @@ -0,0 +1,1721 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "console/console.h" +#include "core/stream/fileStream.h" +#include "core/strings/unicode.h" +#include "core/util/journal/process.h" +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11CardProfiler.h" +#include "gfx/D3D11/gfxD3D11VertexBuffer.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/D3D11/gfxD3D11QueryFence.h" +#include "gfx/D3D11/gfxD3D11OcclusionQuery.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/D3D11/gfxD3D11Target.h" +#include "platformWin32/platformWin32.h" +#include "windowManager/win32/win32Window.h" +#include "windowManager/platformWindow.h" +#include "gfx/D3D11/screenshotD3D11.h" +#include "materials/shaderData.h" + +#ifdef TORQUE_DEBUG +#include "d3d11sdklayers.h" +#endif + +#pragma comment(lib, "dxgi.lib") +#pragma comment(lib, "d3d11.lib") + +GFXAdapter::CreateDeviceInstanceDelegate GFXD3D11Device::mCreateDeviceInstance(GFXD3D11Device::createInstance); + +GFXDevice *GFXD3D11Device::createInstance(U32 adapterIndex) +{ + GFXD3D11Device* dev = new GFXD3D11Device(adapterIndex); + return dev; +} + +GFXFormat GFXD3D11Device::selectSupportedFormat(GFXTextureProfile *profile, const Vector &formats, bool texture, bool mustblend, bool mustfilter) +{ + U32 features = 0; + if(texture) + features |= D3D11_FORMAT_SUPPORT_TEXTURE2D; + if(mustblend) + features |= D3D11_FORMAT_SUPPORT_BLENDABLE; + if(mustfilter) + features |= D3D11_FORMAT_SUPPORT_SHADER_SAMPLE; + + for(U32 i = 0; i < formats.size(); i++) + { + if(GFXD3D11TextureFormat[formats[i]] == DXGI_FORMAT_UNKNOWN) + continue; + + U32 supportFlag = 0; + mD3DDevice->CheckFormatSupport(GFXD3D11TextureFormat[formats[i]],&supportFlag); + if(supportFlag & features) + return formats[i]; + } + + return GFXFormatR8G8B8A8; +} + +DXGI_SWAP_CHAIN_DESC GFXD3D11Device::setupPresentParams(const GFXVideoMode &mode, const HWND &hwnd) +{ + DXGI_SWAP_CHAIN_DESC d3dpp; + ZeroMemory(&d3dpp, sizeof(d3dpp)); + + DXGI_SAMPLE_DESC sampleDesc; + sampleDesc.Count = 1; + sampleDesc.Quality = 0; + + mMultisampleDesc = sampleDesc; + + d3dpp.BufferCount = !smDisableVSync ? 2 : 1; // triple buffering when vsync is on. + d3dpp.BufferDesc.Width = mode.resolution.x; + d3dpp.BufferDesc.Height = mode.resolution.y; + d3dpp.BufferDesc.Format = GFXD3D11TextureFormat[GFXFormatR8G8B8A8]; + d3dpp.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + d3dpp.OutputWindow = hwnd; + d3dpp.SampleDesc = sampleDesc; + d3dpp.Windowed = !mode.fullScreen; + d3dpp.BufferDesc.RefreshRate.Numerator = mode.refreshRate; + d3dpp.BufferDesc.RefreshRate.Denominator = 1; + d3dpp.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; + + if (mode.fullScreen) + { + d3dpp.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + d3dpp.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; + d3dpp.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + } + + return d3dpp; +} + +void GFXD3D11Device::enumerateAdapters(Vector &adapterList) +{ + IDXGIAdapter1* EnumAdapter; + IDXGIFactory1* DXGIFactory; + + CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&DXGIFactory)); + + for(U32 adapterIndex = 0; DXGIFactory->EnumAdapters1(adapterIndex, &EnumAdapter) != DXGI_ERROR_NOT_FOUND; ++adapterIndex) + { + GFXAdapter *toAdd = new GFXAdapter; + toAdd->mType = Direct3D11; + toAdd->mIndex = adapterIndex; + toAdd->mCreateDeviceInstanceDelegate = mCreateDeviceInstance; + + toAdd->mShaderModel = 5.0f; + DXGI_ADAPTER_DESC1 desc; + EnumAdapter->GetDesc1(&desc); + + size_t size=wcslen(desc.Description); + char *str = new char[size+1]; + + wcstombs(str, desc.Description,size); + str[size]='\0'; + String Description=str; + SAFE_DELETE_ARRAY(str); + + dStrncpy(toAdd->mName, Description.c_str(), GFXAdapter::MaxAdapterNameLen); + dStrncat(toAdd->mName, " (D3D11)", GFXAdapter::MaxAdapterNameLen); + + IDXGIOutput* pOutput = NULL; + HRESULT hr; + + hr = EnumAdapter->EnumOutputs(adapterIndex, &pOutput); + + if(hr == DXGI_ERROR_NOT_FOUND) + { + SAFE_RELEASE(EnumAdapter); + break; + } + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> EnumOutputs call failure"); + + UINT numModes = 0; + DXGI_MODE_DESC* displayModes = NULL; + DXGI_FORMAT format = DXGI_FORMAT_B8G8R8A8_UNORM; + + // Get the number of elements + hr = pOutput->GetDisplayModeList(format, 0, &numModes, NULL); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> GetDisplayModeList call failure"); + + displayModes = new DXGI_MODE_DESC[numModes]; + + // Get the list + hr = pOutput->GetDisplayModeList(format, 0, &numModes, displayModes); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> GetDisplayModeList call failure"); + + for(U32 numMode = 0; numMode < numModes; ++numMode) + { + GFXVideoMode vmAdd; + + vmAdd.fullScreen = true; + vmAdd.bitDepth = 32; + vmAdd.refreshRate = displayModes[numMode].RefreshRate.Numerator / displayModes[numMode].RefreshRate.Denominator; + vmAdd.resolution.x = displayModes[numMode].Width; + vmAdd.resolution.y = displayModes[numMode].Height; + toAdd->mAvailableModes.push_back(vmAdd); + } + + delete[] displayModes; + SAFE_RELEASE(pOutput); + SAFE_RELEASE(EnumAdapter); + adapterList.push_back(toAdd); + } + + SAFE_RELEASE(DXGIFactory); +} + +void GFXD3D11Device::enumerateVideoModes() +{ + mVideoModes.clear(); + + IDXGIAdapter1* EnumAdapter; + IDXGIFactory1* DXGIFactory; + HRESULT hr; + + hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&DXGIFactory)); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> CreateDXGIFactory1 call failure"); + + for(U32 adapterIndex = 0; DXGIFactory->EnumAdapters1(adapterIndex, &EnumAdapter) != DXGI_ERROR_NOT_FOUND; ++adapterIndex) + { + IDXGIOutput* pOutput = NULL; + + hr = EnumAdapter->EnumOutputs(adapterIndex, &pOutput); + + if(hr == DXGI_ERROR_NOT_FOUND) + { + SAFE_RELEASE(EnumAdapter); + break; + } + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> EnumOutputs call failure"); + + UINT numModes = 0; + DXGI_MODE_DESC* displayModes = NULL; + DXGI_FORMAT format = GFXD3D11TextureFormat[GFXFormatR8G8B8A8]; + + // Get the number of elements + hr = pOutput->GetDisplayModeList(format, 0, &numModes, NULL); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> GetDisplayModeList call failure"); + + displayModes = new DXGI_MODE_DESC[numModes]; + + // Get the list + hr = pOutput->GetDisplayModeList(format, 0, &numModes, displayModes); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> GetDisplayModeList call failure"); + + for(U32 numMode = 0; numMode < numModes; ++numMode) + { + GFXVideoMode toAdd; + + toAdd.fullScreen = false; + toAdd.bitDepth = 32; + toAdd.refreshRate = displayModes[numMode].RefreshRate.Numerator / displayModes[numMode].RefreshRate.Denominator; + toAdd.resolution.x = displayModes[numMode].Width; + toAdd.resolution.y = displayModes[numMode].Height; + mVideoModes.push_back(toAdd); + } + + delete[] displayModes; + SAFE_RELEASE(pOutput); + SAFE_RELEASE(EnumAdapter); + } + + SAFE_RELEASE(DXGIFactory); +} + +IDXGISwapChain* GFXD3D11Device::getSwapChain() +{ + return mSwapChain; +} + +void GFXD3D11Device::init(const GFXVideoMode &mode, PlatformWindow *window) +{ + AssertFatal(window, "GFXD3D11Device::init - must specify a window!"); + + HWND winHwnd = (HWND)window->getSystemWindow( PlatformWindow::WindowSystem_Windows ); + + UINT createDeviceFlags = D3D11_CREATE_DEVICE_SINGLETHREADED | D3D11_CREATE_DEVICE_BGRA_SUPPORT; +#ifdef TORQUE_DEBUG + createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + mDebugLayers = true; +#endif + + DXGI_SWAP_CHAIN_DESC d3dpp = setupPresentParams(mode, winHwnd); + + D3D_FEATURE_LEVEL deviceFeature; + D3D_DRIVER_TYPE driverType = D3D_DRIVER_TYPE_HARDWARE;// use D3D_DRIVER_TYPE_REFERENCE for reference device + // create a device, device context and swap chain using the information in the d3dpp struct + HRESULT hres = D3D11CreateDeviceAndSwapChain(NULL, + driverType, + NULL, + createDeviceFlags, + NULL, + 0, + D3D11_SDK_VERSION, + &d3dpp, + &mSwapChain, + &mD3DDevice, + &deviceFeature, + &mD3DDeviceContext); + + if(FAILED(hres)) + { + #ifdef TORQUE_DEBUG + //try again without debug device layer enabled + createDeviceFlags &= ~D3D11_CREATE_DEVICE_DEBUG; + HRESULT hres = D3D11CreateDeviceAndSwapChain(NULL, driverType,NULL,createDeviceFlags,NULL, 0, + D3D11_SDK_VERSION, + &d3dpp, + &mSwapChain, + &mD3DDevice, + &deviceFeature, + &mD3DDeviceContext); + //if we failed again than we definitely have a problem + if (FAILED(hres)) + AssertFatal(false, "GFXD3D11Device::init - D3D11CreateDeviceAndSwapChain failed!"); + + Con::warnf("GFXD3D11Device::init - Debug layers not detected!"); + mDebugLayers = false; + #else + AssertFatal(false, "GFXD3D11Device::init - D3D11CreateDeviceAndSwapChain failed!"); + #endif + } + + //set the fullscreen state here if we need to + if(mode.fullScreen) + { + hres = mSwapChain->SetFullscreenState(TRUE, NULL); + if(FAILED(hres)) + { + AssertFatal(false, "GFXD3D11Device::init- Failed to set fullscreen state!"); + } + } + + mTextureManager = new GFXD3D11TextureManager(); + + // Now reacquire all the resources we trashed earlier + reacquireDefaultPoolResources(); + //TODO implement feature levels? + if (deviceFeature >= D3D_FEATURE_LEVEL_11_0) + mPixVersion = 5.0f; + else + AssertFatal(false, "GFXD3D11Device::init - We don't support anything below feature level 11."); + + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + ID3D11Query *testQuery = NULL; + + // detect occlusion query support + if (SUCCEEDED(mD3DDevice->CreateQuery(&queryDesc, &testQuery))) mOcclusionQuerySupported = true; + + SAFE_RELEASE(testQuery); + + Con::printf("Hardware occlusion query detected: %s", mOcclusionQuerySupported ? "Yes" : "No"); + + mCardProfiler = new GFXD3D11CardProfiler(); + mCardProfiler->init(); + + D3D11_TEXTURE2D_DESC desc; + desc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + desc.CPUAccessFlags = 0; + desc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.Width = mode.resolution.x; + desc.Height = mode.resolution.y; + desc.SampleDesc.Count =1; + desc.SampleDesc.Quality =0; + desc.MiscFlags = 0; + + HRESULT hr = mD3DDevice->CreateTexture2D(&desc, NULL, &mDeviceDepthStencil); + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::init - couldn't create device's depth-stencil surface."); + } + + D3D11_DEPTH_STENCIL_VIEW_DESC depthDesc; + depthDesc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + depthDesc.Flags =0 ; + depthDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + depthDesc.Texture2D.MipSlice = 0; + + hr = mD3DDevice->CreateDepthStencilView(mDeviceDepthStencil, &depthDesc, &mDeviceDepthStencilView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::init - couldn't create depth stencil view"); + } + + hr = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mDeviceBackbuffer); + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::init - coudln't retrieve backbuffer ref"); + + //create back buffer view + D3D11_RENDER_TARGET_VIEW_DESC RTDesc; + + RTDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + RTDesc.Texture2D.MipSlice = 0; + RTDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + + hr = mD3DDevice->CreateRenderTargetView(mDeviceBackbuffer, &RTDesc, &mDeviceBackBufferView); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::init - couldn't create back buffer target view"); + +#ifdef TORQUE_DEBUG + String backBufferName = "MainBackBuffer"; + String depthSteniclName = "MainDepthStencil"; + String backBuffViewName = "MainBackBuffView"; + String depthStencViewName = "MainDepthView"; + mDeviceBackbuffer->SetPrivateData(WKPDID_D3DDebugObjectName, backBufferName.size(), backBufferName.c_str()); + mDeviceDepthStencil->SetPrivateData(WKPDID_D3DDebugObjectName, depthSteniclName.size(), depthSteniclName.c_str()); + mDeviceDepthStencilView->SetPrivateData(WKPDID_D3DDebugObjectName, depthStencViewName.size(), depthStencViewName.c_str()); + mDeviceBackBufferView->SetPrivateData(WKPDID_D3DDebugObjectName, backBuffViewName.size(), backBuffViewName.c_str()); + + _suppressDebugMessages(); + +#endif + + gScreenShot = new ScreenShotD3D11; + + mInitialized = true; + deviceInited(); +} + +// Supress any debug layer messages we don't want to see +void GFXD3D11Device::_suppressDebugMessages() +{ + if (mDebugLayers) + { + ID3D11Debug *pDebug = NULL; + if (SUCCEEDED(mD3DDevice->QueryInterface(__uuidof(ID3D11Debug), (void**)&pDebug))) + { + ID3D11InfoQueue *pInfoQueue = NULL; + if (SUCCEEDED(pDebug->QueryInterface(__uuidof(ID3D11InfoQueue), (void**)&pInfoQueue))) + { + //Disable breaking on error or corruption, this can be handy when using VS graphics debugging + pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, false); + pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, false); + + D3D11_MESSAGE_ID hide[] = + { + //this is harmless and no need to spam the console + D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + }; + + D3D11_INFO_QUEUE_FILTER filter; + memset(&filter, 0, sizeof(filter)); + filter.DenyList.NumIDs = _countof(hide); + filter.DenyList.pIDList = hide; + pInfoQueue->AddStorageFilterEntries(&filter); + SAFE_RELEASE(pInfoQueue); + } + SAFE_RELEASE(pDebug); + } + } +} + +bool GFXD3D11Device::beginSceneInternal() +{ + mCanCurrentlyRender = true; + return mCanCurrentlyRender; +} + +GFXWindowTarget * GFXD3D11Device::allocWindowTarget(PlatformWindow *window) +{ + AssertFatal(window,"GFXD3D11Device::allocWindowTarget - no window provided!"); + + // Allocate the device. + init(window->getVideoMode(), window); + + // Set up a new window target... + GFXD3D11WindowTarget *gdwt = new GFXD3D11WindowTarget(); + gdwt->mWindow = window; + gdwt->mSize = window->getClientExtent(); + gdwt->initPresentationParams(); + gdwt->registerResourceWithDevice(this); + + return gdwt; +} + +GFXTextureTarget* GFXD3D11Device::allocRenderToTextureTarget() +{ + GFXD3D11TextureTarget *targ = new GFXD3D11TextureTarget(); + targ->registerResourceWithDevice(this); + + return targ; +} + +void GFXD3D11Device::reset(DXGI_SWAP_CHAIN_DESC &d3dpp) +{ + if (!mD3DDevice) + return; + + mInitialized = false; + + // Clean up some commonly dangling state. This helps prevents issues with + // items that are destroyed by the texture manager callbacks and recreated + // later, but still left bound. + setVertexBuffer(NULL); + setPrimitiveBuffer(NULL); + for (S32 i = 0; iClearState(); + + DXGI_MODE_DESC displayModes; + displayModes.Format = d3dpp.BufferDesc.Format; + displayModes.Height = d3dpp.BufferDesc.Height; + displayModes.Width = d3dpp.BufferDesc.Width; + displayModes.RefreshRate = d3dpp.BufferDesc.RefreshRate; + displayModes.Scaling = d3dpp.BufferDesc.Scaling; + displayModes.ScanlineOrdering = d3dpp.BufferDesc.ScanlineOrdering; + + HRESULT hr; + if (!d3dpp.Windowed) + { + hr = mSwapChain->ResizeTarget(&displayModes); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize target!"); + } + } + + // First release all the stuff we allocated from D3DPOOL_DEFAULT + releaseDefaultPoolResources(); + + //release the backbuffer, depthstencil, and their views + SAFE_RELEASE(mDeviceBackBufferView); + SAFE_RELEASE(mDeviceBackbuffer); + SAFE_RELEASE(mDeviceDepthStencilView); + SAFE_RELEASE(mDeviceDepthStencil); + + hr = mSwapChain->ResizeBuffers(d3dpp.BufferCount, d3dpp.BufferDesc.Width, d3dpp.BufferDesc.Height, d3dpp.BufferDesc.Format, d3dpp.Windowed ? 0 : DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize back buffer!"); + } + + //recreate backbuffer view. depth stencil view and texture + D3D11_TEXTURE2D_DESC desc; + desc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + desc.CPUAccessFlags = 0; + desc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.Width = d3dpp.BufferDesc.Width; + desc.Height = d3dpp.BufferDesc.Height; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.MiscFlags = 0; + + hr = mD3DDevice->CreateTexture2D(&desc, NULL, &mDeviceDepthStencil); + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::reset - couldn't create device's depth-stencil surface."); + } + + D3D11_DEPTH_STENCIL_VIEW_DESC depthDesc; + depthDesc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + depthDesc.Flags = 0; + depthDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + depthDesc.Texture2D.MipSlice = 0; + + hr = mD3DDevice->CreateDepthStencilView(mDeviceDepthStencil, &depthDesc, &mDeviceDepthStencilView); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::reset - couldn't create depth stencil view"); + } + + hr = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mDeviceBackbuffer); + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::reset - coudln't retrieve backbuffer ref"); + + //create back buffer view + D3D11_RENDER_TARGET_VIEW_DESC RTDesc; + + RTDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + RTDesc.Texture2D.MipSlice = 0; + RTDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + + hr = mD3DDevice->CreateRenderTargetView(mDeviceBackbuffer, &RTDesc, &mDeviceBackBufferView); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::reset - couldn't create back buffer target view"); + + mD3DDeviceContext->OMSetRenderTargets(1, &mDeviceBackBufferView, mDeviceDepthStencilView); + + hr = mSwapChain->SetFullscreenState(!d3dpp.Windowed, NULL); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to change screen states!"); + } + + //Microsoft recommend this, see DXGI documentation + if (!d3dpp.Windowed) + { + displayModes.RefreshRate.Numerator = 0; + displayModes.RefreshRate.Denominator = 0; + hr = mSwapChain->ResizeTarget(&displayModes); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize target!"); + } + } + + mInitialized = true; + + // Now re aquire all the resources we trashed earlier + reacquireDefaultPoolResources(); + + // Mark everything dirty and flush to card, for sanity. + updateStates(true); +} + +class GFXPCD3D11RegisterDevice +{ +public: + GFXPCD3D11RegisterDevice() + { + GFXInit::getRegisterDeviceSignal().notify(&GFXD3D11Device::enumerateAdapters); + } +}; + +static GFXPCD3D11RegisterDevice pPCD3D11RegisterDevice; + +//----------------------------------------------------------------------------- +/// Parse command line arguments for window creation +//----------------------------------------------------------------------------- +static void sgPCD3D11DeviceHandleCommandLine(S32 argc, const char **argv) +{ + // useful to pass parameters by command line for d3d (e.g. -dx9 -dx11) + for (U32 i = 1; i < argc; i++) + { + argv[i]; + } +} + +// Register the command line parsing hook +static ProcessRegisterCommandLine sgCommandLine( sgPCD3D11DeviceHandleCommandLine ); + +GFXD3D11Device::GFXD3D11Device(U32 index) +{ + mDeviceSwizzle32 = &Swizzles::bgra; + GFXVertexColor::setSwizzle( mDeviceSwizzle32 ); + + mDeviceSwizzle24 = &Swizzles::bgr; + + mAdapterIndex = index; + mD3DDevice = NULL; + mVolatileVB = NULL; + + mCurrentPB = NULL; + mDynamicPB = NULL; + + mLastVertShader = NULL; + mLastPixShader = NULL; + + mCanCurrentlyRender = false; + mTextureManager = NULL; + mCurrentStateBlock = NULL; + mResourceListHead = NULL; + + mPixVersion = 0.0; + + mDrawInstancesCount = 0; + + mCardProfiler = NULL; + + mDeviceDepthStencil = NULL; + mDeviceBackbuffer = NULL; + mDeviceBackBufferView = NULL; + mDeviceDepthStencilView = NULL; + + mCreateFenceType = -1; // Unknown, test on first allocate + + mCurrentConstBuffer = NULL; + + mOcclusionQuerySupported = false; + + mDebugLayers = false; + + for(U32 i = 0; i < GS_COUNT; ++i) + mModelViewProjSC[i] = NULL; + + // Set up the Enum translation tables + GFXD3D11EnumTranslate::init(); +} + +GFXD3D11Device::~GFXD3D11Device() +{ + // Release our refcount on the current stateblock object + mCurrentStateBlock = NULL; + + releaseDefaultPoolResources(); + + mD3DDeviceContext->ClearState(); + mD3DDeviceContext->Flush(); + + // Free the vertex declarations. + VertexDeclMap::Iterator iter = mVertexDecls.begin(); + for ( ; iter != mVertexDecls.end(); iter++ ) + delete iter->value; + + // Forcibly clean up the pools + mVolatileVBList.setSize(0); + mDynamicPB = NULL; + + // And release our D3D resources. + SAFE_RELEASE(mDeviceDepthStencilView); + SAFE_RELEASE(mDeviceBackBufferView); + SAFE_RELEASE(mDeviceDepthStencil); + SAFE_RELEASE(mDeviceBackbuffer); + SAFE_RELEASE(mD3DDeviceContext); + + SAFE_DELETE(mCardProfiler); + SAFE_DELETE(gScreenShot); + +#ifdef TORQUE_DEBUG + if (mDebugLayers) + { + ID3D11Debug *pDebug = NULL; + mD3DDevice->QueryInterface(IID_PPV_ARGS(&pDebug)); + AssertFatal(pDebug, "~GFXD3D11Device- Failed to get debug layer"); + pDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL); + SAFE_RELEASE(pDebug); + } +#endif + + SAFE_RELEASE(mSwapChain); + SAFE_RELEASE(mD3DDevice); +} + +void GFXD3D11Device::setupGenericShaders(GenericShaderType type) +{ + AssertFatal(type != GSTargetRestore, ""); //not used + + if(mGenericShader[GSColor] == NULL) + { + ShaderData *shaderData; + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/colorP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSColor] = shaderData->getShader(); + mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/modColorTextureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSModColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/addColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/addColorTextureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSAddColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/textureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/textureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); + mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + //Force an update + mViewportDirty = true; + _updateRenderTargets(); + } + + MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; + mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix); + + setShader(mGenericShader[type]); + setShaderConstBuffer(mGenericShaderBuffer[type]); +} + +//----------------------------------------------------------------------------- +/// Creates a state block object based on the desc passed in. This object +/// represents an immutable state. +GFXStateBlockRef GFXD3D11Device::createStateBlockInternal(const GFXStateBlockDesc& desc) +{ + return GFXStateBlockRef(new GFXD3D11StateBlock(desc)); +} + +/// Activates a stateblock +void GFXD3D11Device::setStateBlockInternal(GFXStateBlock* block, bool force) +{ + AssertFatal(static_cast(block), "Incorrect stateblock type for this device!"); + GFXD3D11StateBlock* d3dBlock = static_cast(block); + GFXD3D11StateBlock* d3dCurrent = static_cast(mCurrentStateBlock.getPointer()); + + if (force) + d3dCurrent = NULL; + + d3dBlock->activate(d3dCurrent); +} + +/// Called by base GFXDevice to actually set a const buffer +void GFXD3D11Device::setShaderConstBufferInternal(GFXShaderConstBuffer* buffer) +{ + if (buffer) + { + PROFILE_SCOPE(GFXD3D11Device_setShaderConstBufferInternal); + AssertFatal(static_cast(buffer), "Incorrect shader const buffer type for this device!"); + GFXD3D11ShaderConstBuffer* d3dBuffer = static_cast(buffer); + + d3dBuffer->activate(mCurrentConstBuffer); + mCurrentConstBuffer = d3dBuffer; + } + else + { + mCurrentConstBuffer = NULL; + } +} + +//----------------------------------------------------------------------------- + +void GFXD3D11Device::clear(U32 flags, ColorI color, F32 z, U32 stencil) +{ + // Make sure we have flushed our render target state. + _updateRenderTargets(); + + UINT depthstencilFlag = 0; + + ID3D11RenderTargetView* rtView = NULL; + ID3D11DepthStencilView* dsView = NULL; + + mD3DDeviceContext->OMGetRenderTargets(1, &rtView, &dsView); + + const FLOAT clearColor[4] = { + static_cast(color.red) * (1.0f / 255.0f), + static_cast(color.green) * (1.0f / 255.0f), + static_cast(color.blue) * (1.0f / 255.0f), + static_cast(color.alpha) * (1.0f / 255.0f) + }; + + if (flags & GFXClearTarget && rtView) + mD3DDeviceContext->ClearRenderTargetView(rtView, clearColor); + + if (flags & GFXClearZBuffer) + depthstencilFlag |= D3D11_CLEAR_DEPTH; + + if (flags & GFXClearStencil) + depthstencilFlag |= D3D11_CLEAR_STENCIL; + + if (depthstencilFlag && dsView) + mD3DDeviceContext->ClearDepthStencilView(dsView, depthstencilFlag, z, stencil); + + SAFE_RELEASE(rtView); + SAFE_RELEASE(dsView); +} + +void GFXD3D11Device::endSceneInternal() +{ + mCanCurrentlyRender = false; +} + +void GFXD3D11Device::_updateRenderTargets() +{ + if (mRTDirty || (mCurrentRT && mCurrentRT->isPendingState())) + { + if (mRTDeactivate) + { + mRTDeactivate->deactivate(); + mRTDeactivate = NULL; + } + + // NOTE: The render target changes are not really accurate + // as the GFXTextureTarget supports MRT internally. So when + // we activate a GFXTarget it could result in multiple calls + // to SetRenderTarget on the actual device. + mDeviceStatistics.mRenderTargetChanges++; + + mCurrentRT->activate(); + + mRTDirty = false; + } + + if (mViewportDirty) + { + D3D11_VIEWPORT viewport; + + viewport.TopLeftX = mViewport.point.x; + viewport.TopLeftY = mViewport.point.y; + viewport.Width = mViewport.extent.x; + viewport.Height = mViewport.extent.y; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + mD3DDeviceContext->RSSetViewports(1, &viewport); + + mViewportDirty = false; + } +} + +void GFXD3D11Device::releaseDefaultPoolResources() +{ + // Release all the dynamic vertex buffer arrays + // Forcibly clean up the pools + for(U32 i=0; ivb); + mVolatileVBList[i] = NULL; + } + mVolatileVBList.setSize(0); + + // We gotta clear the current const buffer else the next + // activate may erroneously think the device is still holding + // this state and fail to set it. + mCurrentConstBuffer = NULL; + + // Set current VB to NULL and set state dirty + for (U32 i=0; i < VERTEX_STREAM_COUNT; i++) + { + mCurrentVertexBuffer[i] = NULL; + mVertexBufferDirty[i] = true; + mVertexBufferFrequency[i] = 0; + mVertexBufferFrequencyDirty[i] = true; + } + + // Release dynamic index buffer + if(mDynamicPB != NULL) + { + SAFE_RELEASE(mDynamicPB->ib); + } + + // Set current PB/IB to NULL and set state dirty + mCurrentPrimitiveBuffer = NULL; + mCurrentPB = NULL; + mPrimitiveBufferDirty = true; + + // Zombify texture manager (for D3D this only modifies default pool textures) + if( mTextureManager ) + mTextureManager->zombify(); + + // Set global dirty state so the IB/PB and VB get reset + mStateDirty = true; + + // Walk the resource list and zombify everything. + GFXResource *walk = mResourceListHead; + while(walk) + { + walk->zombify(); + walk = walk->getNextResource(); + } +} + +void GFXD3D11Device::reacquireDefaultPoolResources() +{ + // Now do the dynamic index buffers + if( mDynamicPB == NULL ) + mDynamicPB = new GFXD3D11PrimitiveBuffer(this, 0, 0, GFXBufferTypeDynamic); + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * MAX_DYNAMIC_INDICES; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &mDynamicPB->ib); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate dynamic IB"); + } + + // Walk the resource list and zombify everything. + GFXResource *walk = mResourceListHead; + while(walk) + { + walk->resurrect(); + walk = walk->getNextResource(); + } + + if(mTextureManager) + mTextureManager->resurrect(); +} + +GFXD3D11VertexBuffer* GFXD3D11Device::findVBPool( const GFXVertexFormat *vertexFormat, U32 vertsNeeded ) +{ + PROFILE_SCOPE( GFXD3D11Device_findVBPool ); + + for( U32 i=0; imVertexFormat.isEqual( *vertexFormat ) ) + return mVolatileVBList[i]; + + return NULL; +} + +GFXD3D11VertexBuffer * GFXD3D11Device::createVBPool( const GFXVertexFormat *vertexFormat, U32 vertSize ) +{ + PROFILE_SCOPE( GFXD3D11Device_createVBPool ); + + // this is a bit funky, but it will avoid problems with (lack of) copy constructors + // with a push_back() situation + mVolatileVBList.increment(); + StrongRefPtr newBuff; + mVolatileVBList.last() = new GFXD3D11VertexBuffer(); + newBuff = mVolatileVBList.last(); + + newBuff->mNumVerts = 0; + newBuff->mBufferType = GFXBufferTypeVolatile; + newBuff->mVertexFormat.copy( *vertexFormat ); + newBuff->mVertexSize = vertSize; + newBuff->mDevice = this; + + // Requesting it will allocate it. + vertexFormat->getDecl(); + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = vertSize * MAX_DYNAMIC_VERTS; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &newBuff->vb); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate dynamic VB"); + } + + return newBuff; +} + +//----------------------------------------------------------------------------- + +void GFXD3D11Device::setClipRect( const RectI &inRect ) +{ + // We transform the incoming rect by the view + // matrix first, so that it can be used to pan + // and scale the clip rect. + // + // This is currently used to take tiled screenshots. + Point3F pos( inRect.point.x, inRect.point.y, 0.0f ); + Point3F extent( inRect.extent.x, inRect.extent.y, 0.0f ); + getViewMatrix().mulP( pos ); + getViewMatrix().mulV( extent ); + RectI rect( pos.x, pos.y, extent.x, extent.y ); + + // Clip the rect against the renderable size. + Point2I size = mCurrentRT->getSize(); + + RectI maxRect(Point2I(0,0), size); + rect.intersect(maxRect); + + mClipRect = rect; + + F32 l = F32( mClipRect.point.x ); + F32 r = F32( mClipRect.point.x + mClipRect.extent.x ); + F32 b = F32( mClipRect.point.y + mClipRect.extent.y ); + F32 t = F32( mClipRect.point.y ); + + // Set up projection matrix, + static Point4F pt; + pt.set(2.0f / (r - l), 0.0f, 0.0f, 0.0f); + mTempMatrix.setColumn(0, pt); + + pt.set(0.0f, 2.0f/(t - b), 0.0f, 0.0f); + mTempMatrix.setColumn(1, pt); + + pt.set(0.0f, 0.0f, 1.0f, 0.0f); + mTempMatrix.setColumn(2, pt); + + pt.set((l+r)/(l-r), (t+b)/(b-t), 1.0f, 1.0f); + mTempMatrix.setColumn(3, pt); + + setProjectionMatrix( mTempMatrix ); + + // Set up world/view matrix + mTempMatrix.identity(); + setWorldMatrix( mTempMatrix ); + + setViewport( mClipRect ); +} + +void GFXD3D11Device::setVertexStream( U32 stream, GFXVertexBuffer *buffer ) +{ + GFXD3D11VertexBuffer *d3dBuffer = static_cast( buffer ); + + if ( stream == 0 ) + { + // Set the volatile buffer which is used to + // offset the start index when doing draw calls. + if ( d3dBuffer && d3dBuffer->mVolatileStart > 0 ) + mVolatileVB = d3dBuffer; + else + mVolatileVB = NULL; + } + + // NOTE: We do not use the stream offset here for stream 0 + // as that feature is *supposedly* not as well supported as + // using the start index in drawPrimitive. + // + // If we can verify that this is not the case then we should + // start using this method exclusively for all streams. + + U32 strides[1] = { d3dBuffer ? d3dBuffer->mVertexSize : 0 }; + U32 offset = d3dBuffer && stream != 0 ? d3dBuffer->mVolatileStart * d3dBuffer->mVertexSize : 0; + ID3D11Buffer* buff = d3dBuffer ? d3dBuffer->vb : NULL; + + getDeviceContext()->IASetVertexBuffers(stream, 1, &buff, strides, &offset); +} + +void GFXD3D11Device::setVertexStreamFrequency( U32 stream, U32 frequency ) +{ + if (stream == 0) + mDrawInstancesCount = frequency; // instances count +} + +void GFXD3D11Device::_setPrimitiveBuffer( GFXPrimitiveBuffer *buffer ) +{ + mCurrentPB = static_cast( buffer ); + + mD3DDeviceContext->IASetIndexBuffer(mCurrentPB->ib, DXGI_FORMAT_R16_UINT, 0); +} + +U32 GFXD3D11Device::primCountToIndexCount(GFXPrimitiveType primType, U32 primitiveCount) +{ + switch (primType) + { + case GFXPointList: + return primitiveCount; + break; + case GFXLineList: + return primitiveCount * 2; + break; + case GFXLineStrip: + return primitiveCount + 1; + break; + case GFXTriangleList: + return primitiveCount * 3; + break; + case GFXTriangleStrip: + return 2 + primitiveCount; + break; + default: + AssertFatal(false, "GFXGLDevice::primCountToIndexCount - unrecognized prim type"); + break; + + } + return 0; +} + + +void GFXD3D11Device::drawPrimitive( GFXPrimitiveType primType, U32 vertexStart, U32 primitiveCount ) +{ + // This is done to avoid the function call overhead if possible + if( mStateDirty ) + updateStates(); + if (mCurrentShaderConstBuffer) + setShaderConstBufferInternal(mCurrentShaderConstBuffer); + + if ( mVolatileVB ) + vertexStart += mVolatileVB->mVolatileStart; + + mD3DDeviceContext->IASetPrimitiveTopology(GFXD3D11PrimType[primType]); + + if ( mDrawInstancesCount ) + mD3DDeviceContext->DrawInstanced(primCountToIndexCount(primType, primitiveCount), mDrawInstancesCount, vertexStart, 0); + else + mD3DDeviceContext->Draw(primCountToIndexCount(primType, primitiveCount), vertexStart); + + mDeviceStatistics.mDrawCalls++; + if ( mVertexBufferFrequency[0] > 1 ) + mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; + else + mDeviceStatistics.mPolyCount += primitiveCount; +} + +void GFXD3D11Device::drawIndexedPrimitive( GFXPrimitiveType primType, + U32 startVertex, + U32 minIndex, + U32 numVerts, + U32 startIndex, + U32 primitiveCount ) +{ + // This is done to avoid the function call overhead if possible + if( mStateDirty ) + updateStates(); + if (mCurrentShaderConstBuffer) + setShaderConstBufferInternal(mCurrentShaderConstBuffer); + + AssertFatal( mCurrentPB != NULL, "Trying to call drawIndexedPrimitive with no current index buffer, call setIndexBuffer()" ); + + if ( mVolatileVB ) + startVertex += mVolatileVB->mVolatileStart; + + mD3DDeviceContext->IASetPrimitiveTopology(GFXD3D11PrimType[primType]); + + if ( mDrawInstancesCount ) + mD3DDeviceContext->DrawIndexedInstanced(primCountToIndexCount(primType, primitiveCount), mDrawInstancesCount, mCurrentPB->mVolatileStart + startIndex, startVertex, 0); + else + mD3DDeviceContext->DrawIndexed(primCountToIndexCount(primType,primitiveCount), mCurrentPB->mVolatileStart + startIndex, startVertex); + + mDeviceStatistics.mDrawCalls++; + if ( mVertexBufferFrequency[0] > 1 ) + mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; + else + mDeviceStatistics.mPolyCount += primitiveCount; +} + +GFXShader* GFXD3D11Device::createShader() +{ + GFXD3D11Shader* shader = new GFXD3D11Shader(); + shader->registerResourceWithDevice( this ); + return shader; +} + +//----------------------------------------------------------------------------- +// Set shader - this function exists to make sure this is done in one place, +// and to make sure redundant shader states are not being +// sent to the card. +//----------------------------------------------------------------------------- +void GFXD3D11Device::setShader(GFXShader *shader, bool force) +{ + if(shader) + { + GFXD3D11Shader *d3dShader = static_cast(shader); + + if (d3dShader->mPixShader != mLastPixShader || force) + { + mD3DDeviceContext->PSSetShader( d3dShader->mPixShader, NULL, 0); + mLastPixShader = d3dShader->mPixShader; + } + + if (d3dShader->mVertShader != mLastVertShader || force) + { + mD3DDeviceContext->VSSetShader( d3dShader->mVertShader, NULL, 0); + mLastVertShader = d3dShader->mVertShader; + } + } + else + { + setupGenericShaders(); + } +} + +GFXPrimitiveBuffer * GFXD3D11Device::allocPrimitiveBuffer(U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void *data ) +{ + // Allocate a buffer to return + GFXD3D11PrimitiveBuffer * res = new GFXD3D11PrimitiveBuffer(this, numIndices, numPrimitives, bufferType); + + // Determine usage flags + D3D11_USAGE usage = D3D11_USAGE_DEFAULT; + + // Assumptions: + // - static buffers are write once, use many + // - dynamic buffers are write many, use many + // - volatile buffers are write once, use once + // You may never read from a buffer. + //TODO: enable proper support for D3D11_USAGE_IMMUTABLE + switch(bufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + usage = D3D11_USAGE_DEFAULT; //D3D11_USAGE_IMMUTABLE; + break; + + case GFXBufferTypeDynamic: + case GFXBufferTypeVolatile: + usage = D3D11_USAGE_DYNAMIC; + break; + } + + // Register resource + res->registerResourceWithDevice(this); + + // Create d3d index buffer + if(bufferType == GFXBufferTypeVolatile) + { + // Get it from the pool if it's a volatile... + AssertFatal(numIndices < MAX_DYNAMIC_INDICES, "Cannot allocate that many indices in a volatile buffer, increase MAX_DYNAMIC_INDICES."); + + res->ib = mDynamicPB->ib; + res->mVolatileBuffer = mDynamicPB; + } + else + { + // Otherwise, get it as a seperate buffer... + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * numIndices; + desc.Usage = usage; + if(bufferType == GFXBufferTypeDynamic) + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; // We never allow reading from a primitive buffer. + else + desc.CPUAccessFlags = 0; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &res->ib); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate an index buffer."); + } + } + + if (data) + { + void* dest; + res->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + res->unlock(); + } + + return res; +} + +GFXVertexBuffer * GFXD3D11Device::allocVertexBuffer(U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, GFXBufferType bufferType, void *data) +{ + PROFILE_SCOPE( GFXD3D11Device_allocVertexBuffer ); + + GFXD3D11VertexBuffer *res = new GFXD3D11VertexBuffer( this, + numVerts, + vertexFormat, + vertSize, + bufferType ); + + // Determine usage flags + D3D11_USAGE usage = D3D11_USAGE_DEFAULT; + + res->mNumVerts = 0; + + // Assumptions: + // - static buffers are write once, use many + // - dynamic buffers are write many, use many + // - volatile buffers are write once, use once + // You may never read from a buffer. + //TODO: enable proper support for D3D11_USAGE_IMMUTABLE + switch(bufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + usage = D3D11_USAGE_DEFAULT; + break; + + case GFXBufferTypeDynamic: + case GFXBufferTypeVolatile: + usage = D3D11_USAGE_DYNAMIC; + break; + } + + // Register resource + res->registerResourceWithDevice(this); + + // Create vertex buffer + if(bufferType == GFXBufferTypeVolatile) + { + // NOTE: Volatile VBs are pooled and will be allocated at lock time. + AssertFatal(numVerts <= MAX_DYNAMIC_VERTS, "GFXD3D11Device::allocVertexBuffer - Volatile vertex buffer is too big... see MAX_DYNAMIC_VERTS!"); + } + else + { + // Requesting it will allocate it. + vertexFormat->getDecl(); //-ALEX disabled to postpone until after shader is actually set... + + // Get a new buffer... + D3D11_BUFFER_DESC desc; + desc.ByteWidth = vertSize * numVerts; + desc.Usage = usage; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + if(bufferType == GFXBufferTypeDynamic) + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; // We never allow reading from a vertex buffer. + else + desc.CPUAccessFlags = 0; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &res->vb); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate VB"); + } + } + + res->mNumVerts = numVerts; + + if (data) + { + void* dest; + res->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + res->unlock(); + } + + return res; +} + +String GFXD3D11Device::_createTempShaderInternal(const GFXVertexFormat *vertexFormat) +{ + U32 elemCount = vertexFormat->getElementCount(); + //Input data + StringBuilder inputData; + inputData.append("struct VertIn {"); + //Output data + StringBuilder outputData; + outputData.append("struct VertOut {"); + // Shader main body data + StringBuilder mainBodyData; + //make shader + mainBodyData.append("VertOut main(VertIn IN){VertOut OUT;"); + for (U32 i = 0; i < elemCount; i++) + { + const GFXVertexElement &element = vertexFormat->getElement(i); + String semantic = element.getSemantic(); + String semanticOut = semantic; + String type; + + if (element.isSemantic(GFXSemantic::POSITION)) + { + semantic = "POSITION"; + semanticOut = "SV_Position"; + } + else if (element.isSemantic(GFXSemantic::NORMAL)) + { + semantic = "NORMAL"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::COLOR)) + { + semantic = "COLOR"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::TANGENT)) + { + semantic = "TANGENT"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::BINORMAL)) + { + semantic = "BINORMAL"; + semanticOut = semantic; + } + else + { + //Anything that falls thru to here will be a texture coord. + semantic = String::ToString("TEXCOORD%d", element.getSemanticIndex()); + semanticOut = semantic; + } + + switch (GFXD3D11DeclType[element.getType()]) + { + case DXGI_FORMAT_R32_FLOAT: + type = "float"; + break; + case DXGI_FORMAT_R32G32_FLOAT: + type = "float2"; + break; + case DXGI_FORMAT_R32G32B32_FLOAT: + type = "float3"; + break; + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM: + type = "float4"; + break; + } + + StringBuilder in; + in.format("%s %s%d : %s;", type.c_str(), "var", i, semantic.c_str()); + inputData.append(in.data()); + + //SV_Position must be float4 + if (semanticOut == String("SV_Position")) + { + StringBuilder out; + out.format("float4 %s%d : %s;", "var", i, semanticOut.c_str()); + outputData.append(out.data()); + StringBuilder body; + body.format("OUT.%s%d = float4(IN.%s%d.xyz,1);", "var", i, "var", i); + mainBodyData.append(body.data()); + } + else + { + StringBuilder out; + out.format("%s %s%d : %s;", type.c_str(), "var", i, semanticOut.c_str()); + outputData.append(out.data()); + StringBuilder body; + body.format("OUT.%s%d = IN.%s%d;", "var", i, "var", i); + mainBodyData.append(body.data()); + } + } + + inputData.append("};"); + outputData.append("};"); + mainBodyData.append("return OUT;}"); + + //final data + StringBuilder finalData; + finalData.append(inputData.data()); + finalData.append(outputData.data()); + finalData.append(mainBodyData.data()); + + return String(finalData.data()); +} + +GFXVertexDecl* GFXD3D11Device::allocVertexDecl( const GFXVertexFormat *vertexFormat ) +{ + PROFILE_SCOPE( GFXD3D11Device_allocVertexDecl ); + + // First check the map... you shouldn't allocate VBs very often + // if you want performance. The map lookup should never become + // a performance bottleneck. + D3D11VertexDecl *decl = mVertexDecls[vertexFormat->getDescription()]; + if ( decl ) + return decl; + + U32 elemCount = vertexFormat->getElementCount(); + + ID3DBlob* code = NULL; + + // We have to generate a temporary shader here for now since the input layout creation + // expects a shader to be already compiled to verify the vertex layout structure. The problem + // is that most of the time the regular shaders are compiled AFTER allocVertexDecl is called. + if(!decl) + { + //TODO: Perhaps save/cache the ID3DBlob for later use on identical vertex formats,save creating/compiling the temp shader everytime + String shaderData = _createTempShaderInternal(vertexFormat); + +#ifdef TORQUE_DEBUG + U32 flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_WARNINGS_ARE_ERRORS; +#else + U32 flags = D3DCOMPILE_ENABLE_STRICTNESS; +#endif + + ID3DBlob *errorBlob = NULL; + HRESULT hr = D3DCompile(shaderData.c_str(), shaderData.length(), NULL, NULL, NULL, "main", "vs_5_0", flags, 0, &code, &errorBlob); + StringBuilder error; + + if(errorBlob) + { + error.append((char*)errorBlob->GetBufferPointer(), errorBlob->GetBufferSize()); + AssertFatal(hr, error.data()); + } + + SAFE_RELEASE(errorBlob); + } + + AssertFatal(code, "D3D11Device::allocVertexDecl - compiled vert shader code missing!"); + + // Setup the declaration struct. + + U32 stream; + D3D11_INPUT_ELEMENT_DESC *vd = new D3D11_INPUT_ELEMENT_DESC[ elemCount]; + + for ( U32 i=0; i < elemCount; i++ ) + { + + const GFXVertexElement &element = vertexFormat->getElement( i ); + + stream = element.getStreamIndex(); + + vd[i].InputSlot = stream; + + vd[i].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + vd[i].Format = GFXD3D11DeclType[element.getType()]; + // If instancing is enabled, the per instance data is only used on stream 1. + if (vertexFormat->hasInstancing() && stream == 1) + { + vd[i].InputSlotClass = D3D11_INPUT_PER_INSTANCE_DATA; + vd[i].InstanceDataStepRate = 1; + } + else + { + vd[i].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + vd[i].InstanceDataStepRate = 0; + } + // We force the usage index of 0 for everything but + // texture coords for now... this may change later. + vd[i].SemanticIndex = 0; + + if ( element.isSemantic( GFXSemantic::POSITION ) ) + vd[i].SemanticName = "POSITION"; + else if ( element.isSemantic( GFXSemantic::NORMAL ) ) + vd[i].SemanticName = "NORMAL"; + else if ( element.isSemantic( GFXSemantic::COLOR ) ) + vd[i].SemanticName = "COLOR"; + else if ( element.isSemantic( GFXSemantic::TANGENT ) ) + vd[i].SemanticName = "TANGENT"; + else if ( element.isSemantic( GFXSemantic::BINORMAL ) ) + vd[i].SemanticName = "BINORMAL"; + else + { + //Anything that falls thru to here will be a texture coord. + vd[i].SemanticName = "TEXCOORD"; + vd[i].SemanticIndex = element.getSemanticIndex(); + } + + } + + decl = new D3D11VertexDecl(); + HRESULT hr = mD3DDevice->CreateInputLayout(vd, elemCount,code->GetBufferPointer(), code->GetBufferSize(), &decl->decl); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::allocVertexDecl - Failed to create vertex input layout!"); + } + + delete [] vd; + SAFE_RELEASE(code); + + // Store it in the cache. + mVertexDecls[vertexFormat->getDescription()] = decl; + + return decl; +} + +void GFXD3D11Device::setVertexDecl( const GFXVertexDecl *decl ) +{ + ID3D11InputLayout *dx11Decl = NULL; + if (decl) + dx11Decl = static_cast(decl)->decl; + + mD3DDeviceContext->IASetInputLayout(dx11Decl); +} + +//----------------------------------------------------------------------------- +// This function should ONLY be called from GFXDevice::updateStates() !!! +//----------------------------------------------------------------------------- +void GFXD3D11Device::setTextureInternal( U32 textureUnit, const GFXTextureObject *texture) +{ + if( texture == NULL ) + { + ID3D11ShaderResourceView *pView = NULL; + mD3DDeviceContext->PSSetShaderResources(textureUnit, 1, &pView); + return; + } + + GFXD3D11TextureObject *tex = (GFXD3D11TextureObject*)(texture); + mD3DDeviceContext->PSSetShaderResources(textureUnit, 1, tex->getSRViewPtr()); +} + +GFXFence *GFXD3D11Device::createFence() +{ + // Figure out what fence type we should be making if we don't know + if( mCreateFenceType == -1 ) + { + D3D11_QUERY_DESC desc; + desc.MiscFlags = 0; + desc.Query = D3D11_QUERY_EVENT; + + ID3D11Query *testQuery = NULL; + + HRESULT hRes = mD3DDevice->CreateQuery(&desc, &testQuery); + + if(FAILED(hRes)) + { + mCreateFenceType = true; + } + + else + { + mCreateFenceType = false; + } + + SAFE_RELEASE(testQuery); + } + + // Cool, use queries + if(!mCreateFenceType) + { + GFXFence* fence = new GFXD3D11QueryFence( this ); + fence->registerResourceWithDevice(this); + return fence; + } + + // CodeReview: At some point I would like a specialized implementation of + // the method used by the general fence, only without the overhead incurred + // by using the GFX constructs. Primarily the lock() method on texture handles + // will do a data copy, and this method doesn't require a copy, just a lock + // [5/10/2007 Pat] + GFXFence* fence = new GFXGeneralFence( this ); + fence->registerResourceWithDevice(this); + return fence; +} + +GFXOcclusionQuery* GFXD3D11Device::createOcclusionQuery() +{ + GFXOcclusionQuery *query; + if (mOcclusionQuerySupported) + query = new GFXD3D11OcclusionQuery( this ); + else + return NULL; + + query->registerResourceWithDevice(this); + return query; +} + +GFXCubemap * GFXD3D11Device::createCubemap() +{ + GFXD3D11Cubemap* cube = new GFXD3D11Cubemap(); + cube->registerResourceWithDevice(this); + return cube; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Device.h b/Engine/source/gfx/D3D11/gfxD3D11Device.h new file mode 100644 index 0000000000..97418d373c --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Device.h @@ -0,0 +1,295 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11DEVICE_H_ +#define _GFXD3D11DEVICE_H_ + +#include + +#include "platform/tmm_off.h" +#include "platformWin32/platformWin32.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/D3D11/gfxD3D11StateBlock.h" +#include "gfx/D3D11/gfxD3D11TextureManager.h" +#include "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/D3D11/gfxD3D11PrimitiveBuffer.h" +#include "gfx/gfxInit.h" +#include "gfx/gfxResource.h" +#include "platform/tmm_on.h" + +#define D3D11 static_cast(GFX) +#define D3D11DEVICE D3D11->getDevice() +#define D3D11DEVICECONTEXT D3D11->getDeviceContext() + +class PlatformWindow; +class GFXD3D11ShaderConstBuffer; + +//------------------------------------------------------------------------------ + +class GFXD3D11Device : public GFXDevice +{ + friend class GFXResource; + friend class GFXD3D11PrimitiveBuffer; + friend class GFXD3D11VertexBuffer; + friend class GFXD3D11TextureObject; + friend class GFXD3D11TextureTarget; + friend class GFXD3D11WindowTarget; + + virtual GFXFormat selectSupportedFormat(GFXTextureProfile *profile, + const Vector &formats, bool texture, bool mustblend, bool mustfilter); + + virtual void enumerateVideoModes(); + + virtual GFXWindowTarget *allocWindowTarget(PlatformWindow *window); + virtual GFXTextureTarget *allocRenderToTextureTarget(); + + virtual void enterDebugEvent(ColorI color, const char *name){}; + virtual void leaveDebugEvent(){}; + virtual void setDebugMarker(ColorI color, const char *name){}; + +protected: + + class D3D11VertexDecl : public GFXVertexDecl + { + public: + virtual ~D3D11VertexDecl() + { + SAFE_RELEASE( decl ); + } + + ID3D11InputLayout *decl; + }; + + virtual void initStates() { }; + + static GFXAdapter::CreateDeviceInstanceDelegate mCreateDeviceInstance; + + MatrixF mTempMatrix; ///< Temporary matrix, no assurances on value at all + RectI mClipRect; + + typedef StrongRefPtr RPGDVB; + Vector mVolatileVBList; + + /// Used to lookup a vertex declaration for the vertex format. + /// @see allocVertexDecl + typedef Map VertexDeclMap; + VertexDeclMap mVertexDecls; + + ID3D11RenderTargetView* mDeviceBackBufferView; + ID3D11DepthStencilView* mDeviceDepthStencilView; + + ID3D11Texture2D *mDeviceBackbuffer; + ID3D11Texture2D *mDeviceDepthStencil; + + /// The stream 0 vertex buffer used for volatile VB offseting. + GFXD3D11VertexBuffer *mVolatileVB; + + //----------------------------------------------------------------------- + StrongRefPtr mDynamicPB; + GFXD3D11PrimitiveBuffer *mCurrentPB; + + ID3D11VertexShader *mLastVertShader; + ID3D11PixelShader *mLastPixShader; + + S32 mCreateFenceType; + + IDXGISwapChain *mSwapChain; + ID3D11Device* mD3DDevice; + ID3D11DeviceContext* mD3DDeviceContext; + + GFXShader* mCurrentShader; + GFXShaderRef mGenericShader[GS_COUNT]; + GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT]; + GFXShaderConstHandle *mModelViewProjSC[GS_COUNT]; + + U32 mAdapterIndex; + + F32 mPixVersion; + + bool mDebugLayers; + + DXGI_SAMPLE_DESC mMultisampleDesc; + + bool mOcclusionQuerySupported; + + U32 mDrawInstancesCount; + + /// To manage creating and re-creating of these when device is aquired + void reacquireDefaultPoolResources(); + + /// To release all resources we control from D3DPOOL_DEFAULT + void releaseDefaultPoolResources(); + + virtual GFXD3D11VertexBuffer* findVBPool( const GFXVertexFormat *vertexFormat, U32 numVertsNeeded ); + virtual GFXD3D11VertexBuffer* createVBPool( const GFXVertexFormat *vertexFormat, U32 vertSize ); + + IDXGISwapChain* getSwapChain(); + // State overrides + // { + + /// + virtual void setTextureInternal(U32 textureUnit, const GFXTextureObject* texture); + + /// Called by GFXDevice to create a device specific stateblock + virtual GFXStateBlockRef createStateBlockInternal(const GFXStateBlockDesc& desc); + /// Called by GFXDevice to actually set a stateblock. + virtual void setStateBlockInternal(GFXStateBlock* block, bool force); + + /// Track the last const buffer we've used. Used to notify new constant buffers that + /// they should send all of their constants up + StrongRefPtr mCurrentConstBuffer; + /// Called by base GFXDevice to actually set a const buffer + virtual void setShaderConstBufferInternal(GFXShaderConstBuffer* buffer); + + virtual void setMatrix( GFXMatrixType /*mtype*/, const MatrixF &/*mat*/ ) { }; + virtual void setLightInternal(U32 /*lightStage*/, const GFXLightInfo /*light*/, bool /*lightEnable*/) { }; + virtual void setLightMaterialInternal(const GFXLightMaterial /*mat*/) { }; + virtual void setGlobalAmbientInternal(ColorF /*color*/) { }; + + // } + + // Index buffer management + // { + virtual void _setPrimitiveBuffer( GFXPrimitiveBuffer *buffer ); + virtual void drawIndexedPrimitive( GFXPrimitiveType primType, + U32 startVertex, + U32 minIndex, + U32 numVerts, + U32 startIndex, + U32 primitiveCount ); + // } + + virtual GFXShader* createShader(); + + /// Device helper function + virtual DXGI_SWAP_CHAIN_DESC setupPresentParams( const GFXVideoMode &mode, const HWND &hwnd ); + + String _createTempShaderInternal(const GFXVertexFormat *vertexFormat); + // Supress any debug layer messages we don't want to see + void _suppressDebugMessages(); + +public: + + static GFXDevice *createInstance( U32 adapterIndex ); + + static void enumerateAdapters( Vector &adapterList ); + + GFXTextureObject* createRenderSurface( U32 width, U32 height, GFXFormat format, U32 mipLevel ); + + ID3D11DepthStencilView* getDepthStencilView() { return mDeviceDepthStencilView; } + ID3D11RenderTargetView* getRenderTargetView() { return mDeviceBackBufferView; } + ID3D11Texture2D* getBackBufferTexture() { return mDeviceBackbuffer; } + + /// Constructor + /// @param d3d Direct3D object to instantiate this device with + /// @param index Adapter index since D3D can use multiple graphics adapters + GFXD3D11Device( U32 index ); + virtual ~GFXD3D11Device(); + + // Activate/deactivate + // { + virtual void init( const GFXVideoMode &mode, PlatformWindow *window = NULL ); + + virtual void preDestroy() { GFXDevice::preDestroy(); if(mTextureManager) mTextureManager->kill(); } + + GFXAdapterType getAdapterType(){ return Direct3D11; } + + U32 getAdaterIndex() const { return mAdapterIndex; } + + virtual GFXCubemap *createCubemap(); + + virtual F32 getPixelShaderVersion() const { return mPixVersion; } + virtual void setPixelShaderVersion( F32 version ){ mPixVersion = version;} + + virtual void setShader(GFXShader *shader, bool force = false); + virtual U32 getNumSamplers() const { return 16; } + virtual U32 getNumRenderTargets() const { return 8; } + // } + + // Misc rendering control + // { + virtual void clear( U32 flags, ColorI color, F32 z, U32 stencil ); + virtual bool beginSceneInternal(); + virtual void endSceneInternal(); + + virtual void setClipRect( const RectI &rect ); + virtual const RectI& getClipRect() const { return mClipRect; } + + // } + + + + /// @name Render Targets + /// @{ + virtual void _updateRenderTargets(); + /// @} + + // Vertex/Index buffer management + // { + virtual GFXVertexBuffer* allocVertexBuffer( U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertSize, + GFXBufferType bufferType, + void* data = NULL); + + virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, + U32 numPrimitives, + GFXBufferType bufferType, + void* data = NULL); + + virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ); + virtual void setVertexDecl( const GFXVertexDecl *decl ); + + virtual void setVertexStream( U32 stream, GFXVertexBuffer *buffer ); + virtual void setVertexStreamFrequency( U32 stream, U32 frequency ); + // } + + virtual U32 getMaxDynamicVerts() { return MAX_DYNAMIC_VERTS; } + virtual U32 getMaxDynamicIndices() { return MAX_DYNAMIC_INDICES; } + + inline U32 primCountToIndexCount(GFXPrimitiveType primType, U32 primitiveCount); + + // Rendering + // { + virtual void drawPrimitive( GFXPrimitiveType primType, U32 vertexStart, U32 primitiveCount ); + // } + + ID3D11DeviceContext* getDeviceContext(){ return mD3DDeviceContext; } + ID3D11Device* getDevice(){ return mD3DDevice; } + + /// Reset + void reset( DXGI_SWAP_CHAIN_DESC &d3dpp ); + + virtual void setupGenericShaders( GenericShaderType type = GSColor ); + + inline virtual F32 getFillConventionOffset() const { return 0.0f; } + virtual void doParanoidStateCheck() {}; + + GFXFence *createFence(); + + GFXOcclusionQuery* createOcclusionQuery(); + + // Default multisample parameters + DXGI_SAMPLE_DESC getMultisampleType() const { return mMultisampleDesc; } +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp new file mode 100644 index 0000000000..54c43fa384 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp @@ -0,0 +1,156 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "console/console.h" + +//------------------------------------------------------------------------------ + +DXGI_FORMAT GFXD3D11TextureFormat[GFXFormat_COUNT]; +D3D11_FILTER GFXD3D11TextureFilter[GFXTextureFilter_COUNT]; +D3D11_BLEND GFXD3D11Blend[GFXBlend_COUNT]; +D3D11_BLEND_OP GFXD3D11BlendOp[GFXBlendOp_COUNT]; +D3D11_STENCIL_OP GFXD3D11StencilOp[GFXStencilOp_COUNT]; +D3D11_COMPARISON_FUNC GFXD3D11CmpFunc[GFXCmp_COUNT]; +D3D11_CULL_MODE GFXD3D11CullMode[GFXCull_COUNT]; +D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; +D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; +D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; +DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; + +//------------------------------------------------------------------------------ + +void GFXD3D11EnumTranslate::init() +{ + GFXD3D11TextureFormat[GFXFormatR8G8B8] = DXGI_FORMAT_B8G8R8X8_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8A8] = DXGI_FORMAT_B8G8R8A8_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8X8] = DXGI_FORMAT_B8G8R8X8_UNORM; + GFXD3D11TextureFormat[GFXFormatB8G8R8A8] = DXGI_FORMAT_B8G8R8A8_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G6B5] = DXGI_FORMAT_B5G6R5_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G5B5A1] = DXGI_FORMAT_B5G5R5A1_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G5B5X1] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatR32F] = DXGI_FORMAT_R32_FLOAT; + GFXD3D11TextureFormat[GFXFormatA4L4] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatA8L8] = DXGI_FORMAT_R8G8_UNORM; + GFXD3D11TextureFormat[GFXFormatA8] = DXGI_FORMAT_A8_UNORM; + GFXD3D11TextureFormat[GFXFormatL8] = DXGI_FORMAT_R8_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT1] = DXGI_FORMAT_BC1_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT2] = DXGI_FORMAT_BC1_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT3] = DXGI_FORMAT_BC2_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT4] = DXGI_FORMAT_BC2_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT5] = DXGI_FORMAT_BC3_UNORM; + GFXD3D11TextureFormat[GFXFormatR32G32B32A32F] = DXGI_FORMAT_R32G32B32A32_FLOAT; + GFXD3D11TextureFormat[GFXFormatR16G16B16A16F] = DXGI_FORMAT_R16G16B16A16_FLOAT; + GFXD3D11TextureFormat[GFXFormatL16] = DXGI_FORMAT_R16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16G16B16A16] = DXGI_FORMAT_R16G16B16A16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16G16] = DXGI_FORMAT_R16G16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16F] = DXGI_FORMAT_R16_FLOAT; + GFXD3D11TextureFormat[GFXFormatR16G16F] = DXGI_FORMAT_R16G16_FLOAT; + GFXD3D11TextureFormat[GFXFormatR10G10B10A2] = DXGI_FORMAT_R10G10B10A2_UNORM; + GFXD3D11TextureFormat[GFXFormatD32] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD24X8] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD24S8] = DXGI_FORMAT_D24_UNORM_S8_UINT; + GFXD3D11TextureFormat[GFXFormatD24FS8] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD16] = DXGI_FORMAT_D16_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8A8_SRGB] = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11TextureFilter[GFXTextureFilterNone] = D3D11_FILTER_MIN_MAG_MIP_POINT; + GFXD3D11TextureFilter[GFXTextureFilterPoint] = D3D11_FILTER_MIN_MAG_MIP_POINT; + GFXD3D11TextureFilter[GFXTextureFilterLinear] = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + GFXD3D11TextureFilter[GFXTextureFilterAnisotropic] = D3D11_FILTER_ANISOTROPIC; + GFXD3D11TextureFilter[GFXTextureFilterPyramidalQuad] = D3D11_FILTER_ANISOTROPIC; + GFXD3D11TextureFilter[GFXTextureFilterGaussianQuad] = D3D11_FILTER_ANISOTROPIC; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11Blend[GFXBlendZero] = D3D11_BLEND_ZERO; + GFXD3D11Blend[GFXBlendOne] = D3D11_BLEND_ONE; + GFXD3D11Blend[GFXBlendSrcColor] = D3D11_BLEND_SRC_COLOR; + GFXD3D11Blend[GFXBlendInvSrcColor] = D3D11_BLEND_INV_SRC_COLOR; + GFXD3D11Blend[GFXBlendSrcAlpha] = D3D11_BLEND_SRC_ALPHA; + GFXD3D11Blend[GFXBlendInvSrcAlpha] = D3D11_BLEND_INV_SRC_ALPHA; + GFXD3D11Blend[GFXBlendDestAlpha] = D3D11_BLEND_DEST_ALPHA; + GFXD3D11Blend[GFXBlendInvDestAlpha] = D3D11_BLEND_INV_DEST_ALPHA; + GFXD3D11Blend[GFXBlendDestColor] = D3D11_BLEND_DEST_COLOR; + GFXD3D11Blend[GFXBlendInvDestColor] = D3D11_BLEND_INV_DEST_COLOR; + GFXD3D11Blend[GFXBlendSrcAlphaSat] = D3D11_BLEND_SRC_ALPHA_SAT; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11BlendOp[GFXBlendOpAdd] = D3D11_BLEND_OP_ADD; + GFXD3D11BlendOp[GFXBlendOpSubtract] = D3D11_BLEND_OP_SUBTRACT; + GFXD3D11BlendOp[GFXBlendOpRevSubtract] = D3D11_BLEND_OP_REV_SUBTRACT; + GFXD3D11BlendOp[GFXBlendOpMin] = D3D11_BLEND_OP_MIN; + GFXD3D11BlendOp[GFXBlendOpMax] = D3D11_BLEND_OP_MAX; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11StencilOp[GFXStencilOpKeep] = D3D11_STENCIL_OP_KEEP; + GFXD3D11StencilOp[GFXStencilOpZero] = D3D11_STENCIL_OP_ZERO; + GFXD3D11StencilOp[GFXStencilOpReplace] = D3D11_STENCIL_OP_REPLACE; + GFXD3D11StencilOp[GFXStencilOpIncrSat] = D3D11_STENCIL_OP_INCR_SAT; + GFXD3D11StencilOp[GFXStencilOpDecrSat] = D3D11_STENCIL_OP_DECR_SAT; + GFXD3D11StencilOp[GFXStencilOpInvert] = D3D11_STENCIL_OP_INVERT; + GFXD3D11StencilOp[GFXStencilOpIncr] = D3D11_STENCIL_OP_INCR; + GFXD3D11StencilOp[GFXStencilOpDecr] = D3D11_STENCIL_OP_DECR; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11CmpFunc[GFXCmpNever] = D3D11_COMPARISON_NEVER; + GFXD3D11CmpFunc[GFXCmpLess] = D3D11_COMPARISON_LESS; + GFXD3D11CmpFunc[GFXCmpEqual] = D3D11_COMPARISON_EQUAL; + GFXD3D11CmpFunc[GFXCmpLessEqual] = D3D11_COMPARISON_LESS_EQUAL; + GFXD3D11CmpFunc[GFXCmpGreater] = D3D11_COMPARISON_GREATER; + GFXD3D11CmpFunc[GFXCmpNotEqual] = D3D11_COMPARISON_NOT_EQUAL; + GFXD3D11CmpFunc[GFXCmpGreaterEqual] = D3D11_COMPARISON_GREATER_EQUAL; + GFXD3D11CmpFunc[GFXCmpAlways] = D3D11_COMPARISON_ALWAYS; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11CullMode[GFXCullNone] = D3D11_CULL_NONE; + GFXD3D11CullMode[GFXCullCW] = D3D11_CULL_FRONT; + GFXD3D11CullMode[GFXCullCCW] = D3D11_CULL_BACK; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11FillMode[GFXFillPoint] = D3D11_FILL_SOLID; + GFXD3D11FillMode[GFXFillWireframe] = D3D11_FILL_WIREFRAME; + GFXD3D11FillMode[GFXFillSolid] = D3D11_FILL_SOLID; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11PrimType[GFXPointList] = D3D_PRIMITIVE_TOPOLOGY_POINTLIST; + GFXD3D11PrimType[GFXLineList] = D3D_PRIMITIVE_TOPOLOGY_LINELIST; + GFXD3D11PrimType[GFXLineStrip] = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; + GFXD3D11PrimType[GFXTriangleList] = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + GFXD3D11PrimType[GFXTriangleStrip] = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11TextureAddress[GFXAddressWrap] = D3D11_TEXTURE_ADDRESS_WRAP; + GFXD3D11TextureAddress[GFXAddressMirror] = D3D11_TEXTURE_ADDRESS_MIRROR; + GFXD3D11TextureAddress[GFXAddressClamp] = D3D11_TEXTURE_ADDRESS_CLAMP; + GFXD3D11TextureAddress[GFXAddressBorder] = D3D11_TEXTURE_ADDRESS_BORDER; + GFXD3D11TextureAddress[GFXAddressMirrorOnce] = D3D11_TEXTURE_ADDRESS_MIRROR_ONCE; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11DeclType[GFXDeclType_Float] = DXGI_FORMAT_R32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float2] = DXGI_FORMAT_R32G32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float3] = DXGI_FORMAT_R32G32B32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float4] = DXGI_FORMAT_R32G32B32A32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Color] = DXGI_FORMAT_B8G8R8A8_UNORM; // DXGI_FORMAT_R8G8B8A8_UNORM; +} + diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h new file mode 100644 index 0000000000..daede2a1c8 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + + +#ifndef _GFXD3D11ENUMTRANSLATE_H_ +#define _GFXD3D11ENUMTRANSLATE_H_ + +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/gfxEnums.h" + +//------------------------------------------------------------------------------ + +namespace GFXD3D11EnumTranslate +{ + void init(); +}; + +//------------------------------------------------------------------------------ + +extern DXGI_FORMAT GFXD3D11TextureFormat[GFXFormat_COUNT]; +extern D3D11_FILTER GFXD3D11TextureFilter[GFXTextureFilter_COUNT]; +extern D3D11_BLEND GFXD3D11Blend[GFXBlend_COUNT]; +extern D3D11_BLEND_OP GFXD3D11BlendOp[GFXBlendOp_COUNT]; +extern D3D11_STENCIL_OP GFXD3D11StencilOp[GFXStencilOp_COUNT]; +extern D3D11_COMPARISON_FUNC GFXD3D11CmpFunc[GFXCmp_COUNT]; +extern D3D11_CULL_MODE GFXD3D11CullMode[GFXCull_COUNT]; +extern D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; +extern D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; +extern D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; +extern DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp new file mode 100644 index 0000000000..6df92c68a9 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp @@ -0,0 +1,177 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11OcclusionQuery.h" + +#include "gui/3d/guiTSControl.h" + +#ifdef TORQUE_GATHER_METRICS +// For TickMs define +#include "T3D/gameBase/processList.h" +#endif + +GFXD3D11OcclusionQuery::GFXD3D11OcclusionQuery(GFXDevice *device) + : GFXOcclusionQuery(device), + mQuery(NULL) +{ +#ifdef TORQUE_GATHER_METRICS + mTimer = PlatformTimer::create(); + mTimer->getElapsedMs(); + + mTimeSinceEnd = 0; + mBeginFrame = 0; +#endif +} + +GFXD3D11OcclusionQuery::~GFXD3D11OcclusionQuery() +{ + SAFE_RELEASE(mQuery); + +#ifdef TORQUE_GATHER_METRICS + SAFE_DELETE(mTimer); +#endif +} + +bool GFXD3D11OcclusionQuery::begin() +{ + if(GFXDevice::getDisableOcclusionQuery()) + return true; + + if (mQuery == NULL) + { + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&queryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "GFXD3D11OcclusionQuery::begin - Hardware does not support D3D11 Occlusion-Queries, this should be caught before this type is created"); + } + + AssertISV(hRes != E_OUTOFMEMORY, "GFXD3D11OcclusionQuery::begin - Out of memory"); + } + + // Add a begin marker to the command buffer queue. + D3D11DEVICECONTEXT->Begin(mQuery); + +#ifdef TORQUE_GATHER_METRICS + mBeginFrame = GuiTSCtrl::getFrameCount(); +#endif + + return true; +} + +void GFXD3D11OcclusionQuery::end() +{ + if (GFXDevice::getDisableOcclusionQuery()) + return; + + // Add an end marker to the command buffer queue. + D3D11DEVICECONTEXT->End(mQuery); + +#ifdef TORQUE_GATHER_METRICS + AssertFatal( mBeginFrame == GuiTSCtrl::getFrameCount(), "GFXD3D11OcclusionQuery::end - ended query on different frame than begin!" ); + mTimer->getElapsedMs(); + mTimer->reset(); +#endif +} + +GFXD3D11OcclusionQuery::OcclusionQueryStatus GFXD3D11OcclusionQuery::getStatus(bool block, U32 *data) +{ + // If this ever shows up near the top of a profile then your system is + // GPU bound or you are calling getStatus too soon after submitting it. + // + // To test if you are GPU bound resize your window very small and see if + // this profile no longer appears at the top. + // + // To test if you are calling getStatus to soon after submitting it, + // check the value of mTimeSinceEnd in a debug build. If it is < half the length + // of time to render an individual frame you could have problems. + PROFILE_SCOPE(GFXD3D11OcclusionQuery_getStatus); + + if ( GFXDevice::getDisableOcclusionQuery() ) + return NotOccluded; + + if ( mQuery == NULL ) + return Unset; + +#ifdef TORQUE_GATHER_METRICS + //AssertFatal( mBeginFrame < GuiTSCtrl::getFrameCount(), "GFXD3D11OcclusionQuery::getStatus - called on the same frame as begin!" ); + + //U32 mTimeSinceEnd = mTimer->getElapsedMs(); + //AssertFatal( mTimeSinceEnd >= 5, "GFXD3DOcculsionQuery::getStatus - less than TickMs since called ::end!" ); +#endif + + HRESULT hRes; + U64 dwOccluded = 0; + + if ( block ) + { + while ((hRes = D3D11DEVICECONTEXT->GetData(mQuery, &dwOccluded, sizeof(U64), 0)) == S_FALSE); + } + else + { + hRes = D3D11DEVICECONTEXT->GetData(mQuery, &dwOccluded, sizeof(U64), 0); + } + + if (hRes == S_OK) + { + if (data != NULL) + *data = (U32)dwOccluded; + + return dwOccluded > 0 ? NotOccluded : Occluded; + } + + if (hRes == S_FALSE) + return Waiting; + + return Error; +} + +void GFXD3D11OcclusionQuery::zombify() +{ + SAFE_RELEASE( mQuery ); +} + +void GFXD3D11OcclusionQuery::resurrect() +{ + // Recreate the query + if( mQuery == NULL ) + { + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&queryDesc, &mQuery); + + AssertISV( hRes != E_OUTOFMEMORY, "GFXD3D9QueryFence::resurrect - Out of memory" ); + } +} + +const String GFXD3D11OcclusionQuery::describeSelf() const +{ + // We've got nothing + return String(); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h new file mode 100644 index 0000000000..9ec3774b91 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D11_OCCLUSIONQUERY_H_ +#define _GFX_D3D11_OCCLUSIONQUERY_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxOcclusionQuery.h" + +#ifdef TORQUE_GATHER_METRICS + #include "platform/platformTimer.h" +#endif + +class GFXD3D11OcclusionQuery : public GFXOcclusionQuery +{ +private: + mutable ID3D11Query *mQuery; + +#ifdef TORQUE_GATHER_METRICS + U32 mBeginFrame; + U32 mTimeSinceEnd; + PlatformTimer *mTimer; +#endif + +public: + GFXD3D11OcclusionQuery(GFXDevice *device); + virtual ~GFXD3D11OcclusionQuery(); + + virtual bool begin(); + virtual void end(); + virtual OcclusionQueryStatus getStatus(bool block, U32 *data = NULL); + + // GFXResource + virtual void zombify(); + virtual void resurrect(); + virtual const String describeSelf() const; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp new file mode 100644 index 0000000000..74e5dbc4e1 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/D3D11/gfxD3D11PrimitiveBuffer.h" +#include "core/util/safeRelease.h" + +void GFXD3D11PrimitiveBuffer::prepare() +{ + D3D11->_setPrimitiveBuffer(this); +} + +void GFXD3D11PrimitiveBuffer::lock(U32 indexStart, U32 indexEnd, void **indexPtr) +{ + AssertFatal(!mLocked, "GFXD3D11PrimitiveBuffer::lock - Can't lock a primitive buffer more than once!"); + + mLocked = true; + D3D11_MAP flags = D3D11_MAP_WRITE_DISCARD; + + switch(mBufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + case GFXBufferTypeDynamic: + flags = D3D11_MAP_WRITE_DISCARD; + break; + + case GFXBufferTypeVolatile: + // Get our range now... + AssertFatal(indexStart == 0, "Cannot get a subrange on a volatile buffer."); + AssertFatal(indexEnd < MAX_DYNAMIC_INDICES, "Cannot get more than MAX_DYNAMIC_INDICES in a volatile buffer. Up the constant!"); + + // Get the primtive buffer + mVolatileBuffer = D3D11->mDynamicPB; + + AssertFatal( mVolatileBuffer, "GFXD3D11PrimitiveBuffer::lock - No dynamic primitive buffer was available!"); + + // We created the pool when we requested this volatile buffer, so assume it exists... + if(mVolatileBuffer->mIndexCount + indexEnd > MAX_DYNAMIC_INDICES) + { + flags = D3D11_MAP_WRITE_DISCARD; + mVolatileStart = indexStart = 0; + indexEnd = indexEnd; + } + else + { + flags = D3D11_MAP_WRITE_NO_OVERWRITE; + mVolatileStart = indexStart = mVolatileBuffer->mIndexCount; + indexEnd += mVolatileBuffer->mIndexCount; + } + + mVolatileBuffer->mIndexCount = indexEnd + 1; + ib = mVolatileBuffer->ib; + + break; + } + + + mIndexStart = indexStart; + mIndexEnd = indexEnd; + + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + { + U32 sizeToLock = (indexEnd - indexStart) * sizeof(U16); + *indexPtr = new U8[sizeToLock]; + mLockedBuffer = *indexPtr; + } + else + { + D3D11_MAPPED_SUBRESOURCE pIndexData; + ZeroMemory(&pIndexData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + HRESULT hr = D3D11DEVICECONTEXT->Map(ib, 0, flags, 0, &pIndexData); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11PrimitiveBuffer::lock - Could not lock primitive buffer."); + } + + *indexPtr = (U8*)pIndexData.pData + (indexStart * sizeof(U16)) ; + } + + #ifdef TORQUE_DEBUG + + // Allocate a debug buffer large enough for the lock + // plus space for over and under run guard strings. + mLockedSize = (indexEnd - indexStart) * sizeof(U16); + const U32 guardSize = sizeof( _PBGuardString ); + mDebugGuardBuffer = new U8[mLockedSize+(guardSize*2)]; + + // Setup the guard strings. + dMemcpy( mDebugGuardBuffer, _PBGuardString, guardSize ); + dMemcpy( mDebugGuardBuffer + mLockedSize + guardSize, _PBGuardString, guardSize ); + + // Store the real lock pointer and return our debug pointer. + mLockedBuffer = *indexPtr; + *indexPtr = (U16*)( mDebugGuardBuffer + guardSize ); + + #endif // TORQUE_DEBUG +} + +void GFXD3D11PrimitiveBuffer::unlock() +{ + #ifdef TORQUE_DEBUG + + if ( mDebugGuardBuffer ) + { + const U32 guardSize = sizeof( _PBGuardString ); + + // First check the guard areas for overwrites. + AssertFatal( dMemcmp( mDebugGuardBuffer, _PBGuardString, guardSize ) == 0, + "GFXD3D11PrimitiveBuffer::unlock - Caught lock memory underrun!" ); + AssertFatal( dMemcmp( mDebugGuardBuffer + mLockedSize + guardSize, _PBGuardString, guardSize ) == 0, + "GFXD3D11PrimitiveBuffer::unlock - Caught lock memory overrun!" ); + + // Copy the debug content down to the real PB. + dMemcpy( mLockedBuffer, mDebugGuardBuffer + guardSize, mLockedSize ); + + // Cleanup. + delete [] mDebugGuardBuffer; + mDebugGuardBuffer = NULL; + //mLockedBuffer = NULL; + mLockedSize = 0; + } + + #endif // TORQUE_DEBUG + + const U32 totalSize = this->mIndexCount * sizeof(U16); + + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + { + //set up the update region of the buffer + D3D11_BOX box; + box.back = 1; + box.front = 0; + box.top = 0; + box.bottom =1; + box.left = mIndexStart *sizeof(U16); + box.right = mIndexEnd * sizeof(U16); + //update the real ib buffer + D3D11DEVICECONTEXT->UpdateSubresource(ib, 0, &box,mLockedBuffer,totalSize, 0); + //clean up the old buffer + delete[] mLockedBuffer; + mLockedBuffer = NULL; + } + else + { + D3D11DEVICECONTEXT->Unmap(ib,0); + } + + mLocked = false; + mIsFirstLock = false; + mVolatileBuffer = NULL; +} + +GFXD3D11PrimitiveBuffer::~GFXD3D11PrimitiveBuffer() +{ + if( mBufferType != GFXBufferTypeVolatile ) + { + SAFE_RELEASE(ib); + } +} + +void GFXD3D11PrimitiveBuffer::zombify() +{ + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + return; + + AssertFatal(!mLocked, "GFXD3D11PrimitiveBuffer::zombify - Cannot zombify a locked buffer!"); + + if (mBufferType == GFXBufferTypeVolatile) + { + // We must null the volatile buffer else we're holding + // a dead pointer which can be set on the device. + ib = NULL; + return; + } + + // Dynamic buffers get released. + SAFE_RELEASE(ib); +} + +void GFXD3D11PrimitiveBuffer::resurrect() +{ + if ( mBufferType != GFXBufferTypeDynamic ) + return; + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * mIndexCount; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &ib); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11PrimitiveBuffer::resurrect - Failed to allocate an index buffer."); + } +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h new file mode 100644 index 0000000000..1be1952d46 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11PRIMITIVEBUFFER_H_ +#define _GFXD3D11PRIMITIVEBUFFER_H_ + +#include "gfx/gfxPrimitiveBuffer.h" + +class GFXD3D11PrimitiveBuffer : public GFXPrimitiveBuffer +{ +public: + ID3D11Buffer *ib; + StrongRefPtr mVolatileBuffer; + U32 mVolatileStart; + U32 mIndexStart; + U32 mIndexEnd; + +#ifdef TORQUE_DEBUG + #define _PBGuardString "GFX_PRIMTIVE_BUFFER_GUARD_STRING" + U8 *mDebugGuardBuffer; + U32 mLockedSize; +#endif TORQUE_DEBUG + + void *mLockedBuffer; + bool mLocked; + bool mIsFirstLock; + + GFXD3D11PrimitiveBuffer( GFXDevice *device, + U32 indexCount, + U32 primitiveCount, + GFXBufferType bufferType ); + + virtual ~GFXD3D11PrimitiveBuffer(); + + virtual void lock(U32 indexStart, U32 indexEnd, void **indexPtr); + virtual void unlock(); + + virtual void prepare(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); +}; + +inline GFXD3D11PrimitiveBuffer::GFXD3D11PrimitiveBuffer( GFXDevice *device, + U32 indexCount, + U32 primitiveCount, + GFXBufferType bufferType ) + : GFXPrimitiveBuffer( device, indexCount, primitiveCount, bufferType ) +{ + mVolatileStart = 0; + ib = NULL; + mIsFirstLock = true; + mLocked = false; +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; + mLockedBuffer = NULL; + mLockedSize = 0; + mIndexStart = 0; + mIndexEnd = 0; +#endif +} + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp new file mode 100644 index 0000000000..f111ce4327 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11QueryFence.h" + +GFXD3D11QueryFence::~GFXD3D11QueryFence() +{ + SAFE_RELEASE(mQuery); +} + +void GFXD3D11QueryFence::issue() +{ + PROFILE_START(GFXD3D11QueryFence_issue); + + // Create the query if we need to + if(mQuery == NULL) + { + D3D11_QUERY_DESC QueryDesc; + QueryDesc.Query = D3D11_QUERY_EVENT; + QueryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&QueryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "Hardware does not support D3D11 Queries, this should be caught before this fence type is created" ); + } + + AssertISV(hRes != E_OUTOFMEMORY, "Out of memory"); + } + + // Issue the query + D3D11DEVICECONTEXT->End(mQuery); + PROFILE_END(); +} + +GFXFence::FenceStatus GFXD3D11QueryFence::getStatus() const +{ + if(mQuery == NULL) + return GFXFence::Unset; + + HRESULT hRes = D3D11DEVICECONTEXT->GetData(mQuery, NULL, 0, 0); + + return (hRes == S_OK ? GFXFence::Processed : GFXFence::Pending); +} + +void GFXD3D11QueryFence::block() +{ + PROFILE_SCOPE(GFXD3D11QueryFence_block); + + // Calling block() before issue() is valid, catch this case + if( mQuery == NULL ) + return; + + HRESULT hRes; + while((hRes = D3D11DEVICECONTEXT->GetData(mQuery, NULL, 0, 0)) == S_FALSE); //D3DGETDATA_FLUSH + +} + +void GFXD3D11QueryFence::zombify() +{ + // Release our query + SAFE_RELEASE( mQuery ); +} + +void GFXD3D11QueryFence::resurrect() +{ + // Recreate the query + if(mQuery == NULL) + { + D3D11_QUERY_DESC QueryDesc; + QueryDesc.Query = D3D11_QUERY_EVENT; + QueryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&QueryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "GFXD3D11QueryFence::resurrect - Hardware does not support D3D11 Queries, this should be caught before this fence type is created"); + } + + AssertISV(hRes != E_OUTOFMEMORY, "GFXD3D11QueryFence::resurrect - Out of memory"); + } +} + +const String GFXD3D11QueryFence::describeSelf() const +{ + // We've got nothing + return String(); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h new file mode 100644 index 0000000000..5113651c9d --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D11_QUERYFENCE_H_ +#define _GFX_D3D11_QUERYFENCE_H_ + +#include "gfx/gfxFence.h" +#include "gfx/gfxResource.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +class GFXD3D11QueryFence : public GFXFence +{ +private: + mutable ID3D11Query *mQuery; + +public: + GFXD3D11QueryFence( GFXDevice *device ) : GFXFence( device ), mQuery( NULL ) {}; + virtual ~GFXD3D11QueryFence(); + + virtual void issue(); + virtual FenceStatus getStatus() const; + virtual void block(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); + virtual const String describeSelf() const; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp new file mode 100644 index 0000000000..a5273a93eb --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp @@ -0,0 +1,1542 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "core/frameAllocator.h" +#include "core/stream/fileStream.h" +#include "core/util/safeDelete.h" +#include "console/console.h" + +extern bool gDisassembleAllShaders; + +#pragma comment(lib, "d3dcompiler.lib") + +gfxD3DIncludeRef GFXD3D11Shader::smD3DInclude = NULL; + +class gfxD3D11Include : public ID3DInclude, public StrongRefBase +{ +private: + + Vector mLastPath; + +public: + + void setPath(const String &path) + { + mLastPath.clear(); + mLastPath.push_back(path); + } + + gfxD3D11Include() {} + virtual ~gfxD3D11Include() {} + + STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes); + STDMETHOD(Close)(THIS_ LPCVOID pData); +}; + +HRESULT gfxD3D11Include::Open(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) +{ + using namespace Torque; + // First try making the path relative to the parent. + Torque::Path path = Torque::Path::Join( mLastPath.last(), '/', pFileName ); + path = Torque::Path::CompressPath( path ); + + if ( !Torque::FS::ReadFile( path, (void *&)*ppData, *pBytes, true ) ) + { + // Ok... now try using the path as is. + path = String( pFileName ); + path = Torque::Path::CompressPath( path ); + + if ( !Torque::FS::ReadFile( path, (void *&)*ppData, *pBytes, true ) ) + { + AssertISV(false, avar( "Failed to open include '%s'.", pFileName)); + return E_FAIL; + } + } + + // If the data was of zero size then we cannot recurse + // into this file and DX won't call Close() below. + // + // So in this case don't push on the path. + if ( *pBytes > 0 ) + mLastPath.push_back( path.getRootAndPath() ); + + return S_OK; +} + +HRESULT gfxD3D11Include::Close( THIS_ LPCVOID pData ) +{ + // Free the data file and pop its path off the stack. + delete [] (U8*)pData; + mLastPath.pop_back(); + + return S_OK; +} + +GFXD3D11ShaderConstHandle::GFXD3D11ShaderConstHandle() +{ + clear(); +} + +const String& GFXD3D11ShaderConstHandle::getName() const +{ + if ( mVertexConstant ) + return mVertexHandle.name; + else + return mPixelHandle.name; +} + +GFXShaderConstType GFXD3D11ShaderConstHandle::getType() const +{ + if ( mVertexConstant ) + return mVertexHandle.constType; + else + return mPixelHandle.constType; +} + +U32 GFXD3D11ShaderConstHandle::getArraySize() const +{ + if ( mVertexConstant ) + return mVertexHandle.arraySize; + else + return mPixelHandle.arraySize; +} + +S32 GFXD3D11ShaderConstHandle::getSamplerRegister() const +{ + if ( !mValid || !isSampler() ) + return -1; + + // We always store sampler type and register index in the pixelHandle, + // sampler registers are shared between vertex and pixel shaders anyway. + + return mPixelHandle.offset; +} + +GFXD3D11ConstBufferLayout::GFXD3D11ConstBufferLayout() +{ + mSubBuffers.reserve(CBUFFER_MAX); +} + +bool GFXD3D11ConstBufferLayout::set(const ParamDesc& pd, const GFXShaderConstType constType, const U32 inSize, const void* data, U8* basePointer) +{ + PROFILE_SCOPE(GenericConstBufferLayout_set); + S32 size = inSize; + // Shader compilers like to optimize float4x4 uniforms into float3x3s. + // So long as the real paramater is a matrix of-some-type and the data + // passed in is a MatrixF ( which is will be ), we DO NOT have a + // mismatched const type. + AssertFatal(pd.constType == constType || + ( + (pd.constType == GFXSCT_Float2x2 || + pd.constType == GFXSCT_Float3x3 || + pd.constType == GFXSCT_Float4x4) && + (constType == GFXSCT_Float2x2 || + constType == GFXSCT_Float3x3 || + constType == GFXSCT_Float4x4) + ), "Mismatched const type!"); + + // This "cute" bit of code allows us to support 2x3 and 3x3 matrices in shader constants but use our MatrixF class. Yes, a hack. -BTR + switch (pd.constType) + { + case GFXSCT_Float2x2: + case GFXSCT_Float3x3: + case GFXSCT_Float4x4: + return setMatrix(pd, constType, size, data, basePointer); + break; + // TODO add other AlignedVector here + case GFXSCT_Float2: + if (size > sizeof(Point2F)) + size = pd.size; + default: + break; + } + + AssertFatal(pd.size >= size, "Not enough room in the buffer for this data!"); + + // Ok, we only set data if it's different than the data we already have, this maybe more expensive than just setting the data, but + // we'll have to do some timings to see. For example, the lighting shader constants rarely change, but we can't assume that at the + // renderInstMgr level, but we can check down here. -BTR + if (dMemcmp(basePointer + pd.offset, data, size) != 0) + { + dMemcpy(basePointer + pd.offset, data, size); + return true; + } + return false; +} + +bool GFXD3D11ConstBufferLayout::setMatrix(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer) +{ + PROFILE_SCOPE(GFXD3D11ConstBufferLayout_setMatrix); + + if (pd.constType == GFXSCT_Float4x4) + { + // Special case, we can just blast this guy. + AssertFatal(pd.size >= size, "Not enough room in the buffer for this data!"); + if (dMemcmp(basePointer+pd.offset, data, size) != 0) + { + dMemcpy(basePointer+pd.offset, data, size); + return true; + } + + return false; + } + else + { + PROFILE_SCOPE(GFXD3D11ConstBufferLayout_setMatrix_not4x4); + + // Figure out how big of a chunk we are copying. We're going to copy 4 columns by N rows of data + U32 csize; + switch (pd.constType) + { + case GFXSCT_Float2x2 : + csize = 24; //this takes up 16+8 + break; + case GFXSCT_Float3x3 : + csize = 44; //This takes up 16+16+12 + break; + default: + AssertFatal(false, "Unhandled case!"); + return false; + break; + } + + // Loop through and copy + bool ret = false; + U8* currDestPointer = basePointer+pd.offset; + const U8* currSourcePointer = static_cast(data); + const U8* endData = currSourcePointer + size; + while (currSourcePointer < endData) + { + if (dMemcmp(currDestPointer, currSourcePointer, csize) != 0) + { + dMemcpy(currDestPointer, currSourcePointer, csize); + ret = true; + } + + currDestPointer += csize; + currSourcePointer += sizeof(MatrixF); + } + + return ret; + } +} + +//------------------------------------------------------------------------------ +GFXD3D11ShaderConstBuffer::GFXD3D11ShaderConstBuffer( GFXD3D11Shader* shader, + GFXD3D11ConstBufferLayout* vertexLayout, + GFXD3D11ConstBufferLayout* pixelLayout) +{ + AssertFatal( shader, "GFXD3D11ShaderConstBuffer() - Got a null shader!" ); + + // We hold on to this so we don't have to call + // this virtual method during activation. + mShader = shader; + + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + mConstantBuffersV[i] = NULL; + mConstantBuffersP[i] = NULL; + } + + // TODO: Remove buffers and layouts that don't exist for performance? + //Mandatory + mVertexConstBufferLayout = vertexLayout; + mVertexConstBuffer = new GenericConstBuffer(vertexLayout); + + mPixelConstBufferLayout = pixelLayout; + mPixelConstBuffer = new GenericConstBuffer(pixelLayout); + + _createBuffers(); + +} + +GFXD3D11ShaderConstBuffer::~GFXD3D11ShaderConstBuffer() +{ + // release constant buffer + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + SAFE_RELEASE(mConstantBuffersP[i]); + SAFE_RELEASE(mConstantBuffersV[i]); + } + + SAFE_DELETE(mVertexConstBuffer); + SAFE_DELETE(mPixelConstBuffer); + + + if ( mShader ) + mShader->_unlinkBuffer( this ); +} + +void GFXD3D11ShaderConstBuffer::_createBuffers() +{ + HRESULT hr; + // Create a vertex constant buffer + if (mVertexConstBufferLayout->getBufferSize() > 0) + { + const Vector &subBuffers = mVertexConstBufferLayout->getSubBufferDesc(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + D3D11_BUFFER_DESC cbDesc; + cbDesc.ByteWidth = subBuffers[i].size; + cbDesc.Usage = D3D11_USAGE_DEFAULT; + cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + cbDesc.CPUAccessFlags = 0; + cbDesc.MiscFlags = 0; + cbDesc.StructureByteStride = 0; + + hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &mConstantBuffersV[i]); + + if (FAILED(hr)) + { + AssertFatal(false, "can't create constant mConstantBuffersV!"); + } + } + } + + // Create a pixel constant buffer + if (mPixelConstBufferLayout->getBufferSize()) + { + const Vector &subBuffers = mPixelConstBufferLayout->getSubBufferDesc(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + // Create a pixel float constant buffer + D3D11_BUFFER_DESC cbDesc; + cbDesc.ByteWidth = subBuffers[i].size; + cbDesc.Usage = D3D11_USAGE_DEFAULT; + cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + cbDesc.CPUAccessFlags = 0; + cbDesc.MiscFlags = 0; + cbDesc.StructureByteStride = 0; + + hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &mConstantBuffersP[i]); + + if (FAILED(hr)) + { + AssertFatal(false, "can't create constant mConstantBuffersP!"); + } + } + } +} + +GFXShader* GFXD3D11ShaderConstBuffer::getShader() +{ + return mShader; +} + +// This is kind of cheesy, but I don't think templates would work well here because +// these functions potentially need to be handled differently by other derived types +template +inline void GFXD3D11ShaderConstBuffer::SET_CONSTANT( GFXShaderConstHandle* handle, const T& fv, + GenericConstBuffer *vBuffer, GenericConstBuffer *pBuffer ) +{ + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(h, "Handle is NULL!" ); + AssertFatal(h->isValid(), "Handle is not valid!" ); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(!mShader.isNull(), "Buffer's shader is null!" ); + AssertFatal(!h->mShader.isNull(), "Handle's shader is null!" ); + AssertFatal(h->mShader.getPointer() == mShader.getPointer(), "Mismatched shaders!"); + + if ( h->mInstancingConstant ) + { + dMemcpy( mInstPtr+h->mPixelHandle.offset, &fv, sizeof( fv ) ); + return; + } + if (h->mVertexConstant) + vBuffer->set(h->mVertexHandle, fv); + if (h->mPixelConstant) + pBuffer->set(h->mPixelHandle, fv); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const F32 fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point2F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point3F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point4F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const PlaneF& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const ColorF& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const S32 f) +{ + // This is the only type that is allowed to be used + // with a sampler shader constant type, but it is only + // allowed to be set from GLSL. + // + // So we ignore it here... all other cases will assert. + // + if ( ((GFXD3D11ShaderConstHandle*)handle)->isSampler() ) + return; + + SET_CONSTANT(handle, f, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point2I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point3I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point4I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} +#undef SET_CONSTANT + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF& mat, const GFXShaderConstType matrixType) +{ + AssertFatal(handle, "Handle is NULL!" ); + AssertFatal(handle->isValid(), "Handle is not valid!" ); + + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(h->mShader == mShader, "Mismatched shaders!"); + + MatrixF transposed; + mat.transposeTo(transposed); + + if (h->mInstancingConstant) + { + if ( matrixType == GFXSCT_Float4x4 ) + dMemcpy( mInstPtr+h->mPixelHandle.offset, mat, sizeof( mat ) ); + + // TODO: Support 3x3 and 2x2 matricies? + return; + } + + if (h->mVertexConstant) + mVertexConstBuffer->set(h->mVertexHandle, transposed, matrixType); + if (h->mPixelConstant) + mPixelConstBuffer->set(h->mPixelHandle, transposed, matrixType); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF* mat, const U32 arraySize, const GFXShaderConstType matrixType) +{ + AssertFatal(handle, "Handle is NULL!" ); + AssertFatal(handle->isValid(), "Handle is not valid!" ); + + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(h->mShader == mShader, "Mismatched shaders!"); + + static Vector transposed; + if (arraySize > transposed.size()) + transposed.setSize(arraySize); + for (U32 i = 0; i < arraySize; i++) + mat[i].transposeTo(transposed[i]); + + // TODO: Maybe support this in the future? + if (h->mInstancingConstant) + return; + + if (h->mVertexConstant) + mVertexConstBuffer->set(h->mVertexHandle, transposed.begin(), arraySize, matrixType); + if (h->mPixelConstant) + mPixelConstBuffer->set(h->mPixelHandle, transposed.begin(), arraySize, matrixType); +} + +const String GFXD3D11ShaderConstBuffer::describeSelf() const +{ + String ret; + ret = String(" GFXD3D11ShaderConstBuffer\n"); + + for (U32 i = 0; i < mVertexConstBufferLayout->getParameterCount(); i++) + { + GenericConstBufferLayout::ParamDesc pd; + mVertexConstBufferLayout->getDesc(i, pd); + + ret += String::ToString(" Constant name: %s", pd.name); + } + + return ret; +} + +void GFXD3D11ShaderConstBuffer::zombify() +{ +} + +void GFXD3D11ShaderConstBuffer::resurrect() +{ +} + +bool GFXD3D11ShaderConstBuffer::isDirty() +{ + bool ret = mVertexConstBuffer->isDirty(); + ret |= mPixelConstBuffer->isDirty(); + + return ret; +} + +void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderBuffer ) +{ + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate); + + // NOTE: This is a really critical function as it gets + // called between every draw call to update the constants. + // + // Alot of the calls here are inlined... be careful + // what you change. + + // If the buffer has changed we need to compare it + // with the new buffer to see if we can skip copying + // equal buffer content. + // + // If the buffer hasn't changed then we only will + // be copying the changes that have occured since + // the last activate call. + if ( prevShaderBuffer != this ) + { + // If the previous buffer is dirty, than we can't compare + // against it, because it hasn't sent its contents to the + // card yet and must be copied. + if ( prevShaderBuffer && !prevShaderBuffer->isDirty() ) + { + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate_dirty_check_1); + // If the buffer content is equal then we set the dirty + // flag to false knowing the current state of the card matches + // the new buffer. + // + // If the content is not equal we set the dirty flag to + // true which causes the full content of the buffer to be + // copied to the card. + // + mVertexConstBuffer->setDirty( !prevShaderBuffer->mVertexConstBuffer->isEqual( mVertexConstBuffer ) ); + mPixelConstBuffer->setDirty( !prevShaderBuffer->mPixelConstBuffer->isEqual( mPixelConstBuffer ) ); + } + else + { + // This happens rarely... but it can happen. + // We copy the entire dirty state to the card. + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate_dirty_check_2); + + mVertexConstBuffer->setDirty( true ); + mPixelConstBuffer->setDirty( true ); + } + } + + ID3D11DeviceContext* devCtx = D3D11DEVICECONTEXT; + + D3D11_MAPPED_SUBRESOURCE pConstData; + ZeroMemory(&pConstData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + const U8* buf; + HRESULT hr; + U32 nbBuffers = 0; + if(mVertexConstBuffer->isDirty()) + { + const Vector &subBuffers = mVertexConstBufferLayout->getSubBufferDesc(); + // TODO: This is not very effecient updating the whole lot, re-implement the dirty system to work with multiple constant buffers. + // TODO: Implement DX 11.1 UpdateSubresource1 which supports updating ranges with constant buffers + buf = mVertexConstBuffer->getEntireBuffer(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + const ConstSubBufferDesc &desc = subBuffers[i]; + devCtx->UpdateSubresource(mConstantBuffersV[i], 0, NULL, buf + desc.start, desc.size, 0); + nbBuffers++; + } + + devCtx->VSSetConstantBuffers(0, nbBuffers, mConstantBuffersV); + } + + nbBuffers = 0; + + if(mPixelConstBuffer->isDirty()) + { + const Vector &subBuffers = mPixelConstBufferLayout->getSubBufferDesc(); + // TODO: This is not very effecient updating the whole lot, re-implement the dirty system to work with multiple constant buffers. + // TODO: Implement DX 11.1 UpdateSubresource1 which supports updating ranges with constant buffers + buf = mPixelConstBuffer->getEntireBuffer(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + const ConstSubBufferDesc &desc = subBuffers[i]; + devCtx->UpdateSubresource(mConstantBuffersP[i], 0, NULL, buf + desc.start, desc.size, 0); + nbBuffers++; + } + + devCtx->PSSetConstantBuffers(0, nbBuffers, mConstantBuffersP); + } + + #ifdef TORQUE_DEBUG + // Make sure all the constants for this buffer were assigned. + if(mWasLost) + { + mVertexConstBuffer->assertUnassignedConstants( mShader->getVertexShaderFile().c_str() ); + mPixelConstBuffer->assertUnassignedConstants( mShader->getPixelShaderFile().c_str() ); + } + #endif + + // Clear the lost state. + mWasLost = false; +} + +void GFXD3D11ShaderConstBuffer::onShaderReload( GFXD3D11Shader *shader ) +{ + AssertFatal( shader == mShader, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + + // release constant buffers + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + SAFE_RELEASE(mConstantBuffersP[i]); + SAFE_RELEASE(mConstantBuffersV[i]); + } + + SAFE_DELETE( mVertexConstBuffer ); + SAFE_DELETE( mPixelConstBuffer ); + + AssertFatal( mVertexConstBufferLayout == shader->mVertexConstBufferLayout, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + AssertFatal( mPixelConstBufferLayout == shader->mPixelConstBufferLayout, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + + mVertexConstBuffer = new GenericConstBuffer( mVertexConstBufferLayout ); + mPixelConstBuffer = new GenericConstBuffer( mPixelConstBufferLayout ); + + _createBuffers(); + + // Set the lost state. + mWasLost = true; +} + +//------------------------------------------------------------------------------ + +GFXD3D11Shader::GFXD3D11Shader() +{ + VECTOR_SET_ASSOCIATION( mShaderConsts ); + + AssertFatal(D3D11DEVICE, "Invalid device for shader."); + mVertShader = NULL; + mPixShader = NULL; + mVertexConstBufferLayout = NULL; + mPixelConstBufferLayout = NULL; + + if( smD3DInclude == NULL ) + smD3DInclude = new gfxD3D11Include; +} + +//------------------------------------------------------------------------------ + +GFXD3D11Shader::~GFXD3D11Shader() +{ + for (HandleMap::Iterator i = mHandles.begin(); i != mHandles.end(); i++) + delete i->value; + + // delete const buffer layouts + SAFE_DELETE(mVertexConstBufferLayout); + SAFE_DELETE(mPixelConstBufferLayout); + + // release shaders + SAFE_RELEASE(mVertShader); + SAFE_RELEASE(mPixShader); + //maybe add SAFE_RELEASE(mVertexCode) ? +} + +bool GFXD3D11Shader::_init() +{ + PROFILE_SCOPE( GFXD3D11Shader_Init ); + + SAFE_RELEASE(mVertShader); + SAFE_RELEASE(mPixShader); + + // Create the macro array including the system wide macros. + const U32 macroCount = smGlobalMacros.size() + mMacros.size() + 2; + FrameTemp d3dMacros( macroCount ); + + for ( U32 i=0; i < smGlobalMacros.size(); i++ ) + { + d3dMacros[i].Name = smGlobalMacros[i].name.c_str(); + d3dMacros[i].Definition = smGlobalMacros[i].value.c_str(); + } + + for ( U32 i=0; i < mMacros.size(); i++ ) + { + d3dMacros[i+smGlobalMacros.size()].Name = mMacros[i].name.c_str(); + d3dMacros[i+smGlobalMacros.size()].Definition = mMacros[i].value.c_str(); + } + + //TODO support D3D_FEATURE_LEVEL properly with shaders instead of hard coding at hlsl 5 + d3dMacros[macroCount - 2].Name = "TORQUE_SM"; + d3dMacros[macroCount - 2].Definition = "50"; + + memset(&d3dMacros[macroCount - 1], 0, sizeof(D3D_SHADER_MACRO)); + + if ( !mVertexConstBufferLayout ) + mVertexConstBufferLayout = new GFXD3D11ConstBufferLayout(); + else + mVertexConstBufferLayout->clear(); + + if ( !mPixelConstBufferLayout ) + mPixelConstBufferLayout = new GFXD3D11ConstBufferLayout(); + else + mPixelConstBufferLayout->clear(); + + + mSamplerDescriptions.clear(); + mShaderConsts.clear(); + + if ( !Con::getBoolVariable( "$shaders::forceLoadCSF", false ) ) + { + if (!mVertexFile.isEmpty() && !_compileShader( mVertexFile, "vs_5_0", d3dMacros, mVertexConstBufferLayout, mSamplerDescriptions ) ) + return false; + + if (!mPixelFile.isEmpty() && !_compileShader( mPixelFile, "ps_5_0", d3dMacros, mPixelConstBufferLayout, mSamplerDescriptions ) ) + return false; + + } + else + { + if ( !_loadCompiledOutput( mVertexFile, "vs_5_0", mVertexConstBufferLayout, mSamplerDescriptions ) ) + { + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::init - Unable to load precompiled vertex shader for '%s'.", mVertexFile.getFullPath().c_str() ); + + return false; + } + + if ( !_loadCompiledOutput( mPixelFile, "ps_5_0", mPixelConstBufferLayout, mSamplerDescriptions ) ) + { + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::init - Unable to load precompiled pixel shader for '%s'.", mPixelFile.getFullPath().c_str() ); + + return false; + } + } + + // Existing handles are resored to an uninitialized state. + // Those that are found when parsing the layout parameters + // will then be re-initialized. + HandleMap::Iterator iter = mHandles.begin(); + for ( ; iter != mHandles.end(); iter++ ) + (iter->value)->clear(); + + _buildShaderConstantHandles(mVertexConstBufferLayout, true); + _buildShaderConstantHandles(mPixelConstBufferLayout, false); + + _buildSamplerShaderConstantHandles( mSamplerDescriptions ); + _buildInstancingShaderConstantHandles(); + + // Notify any existing buffers that the buffer + // layouts have changed and they need to update. + Vector::iterator biter = mActiveBuffers.begin(); + for ( ; biter != mActiveBuffers.end(); biter++ ) + ((GFXD3D11ShaderConstBuffer*)(*biter))->onShaderReload( this ); + + return true; +} + +bool GFXD3D11Shader::_compileShader( const Torque::Path &filePath, + const String& target, + const D3D_SHADER_MACRO *defines, + GenericConstBufferLayout* bufferLayout, + Vector &samplerDescriptions ) +{ + PROFILE_SCOPE( GFXD3D11Shader_CompileShader ); + + using namespace Torque; + + HRESULT res = E_FAIL; + ID3DBlob* code = NULL; + ID3DBlob* errorBuff = NULL; + ID3D11ShaderReflection* reflectionTable = NULL; + +#ifdef TORQUE_DEBUG + U32 flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_WARNINGS_ARE_ERRORS; +#else + U32 flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_OPTIMIZATION_LEVEL3; //TODO double check load times with D3DCOMPILE_OPTIMIZATION_LEVEL3 + //recommended flags for NSight, uncomment to use. NSight should be used in release mode only. *Still works with above flags however + //flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_PREFER_FLOW_CONTROL | D3DCOMPILE_SKIP_OPTIMIZATION; +#endif + +#ifdef D3D11_DEBUG_SPEW + Con::printf( "Compiling Shader: '%s'", filePath.getFullPath().c_str() ); +#endif + + // Is it an HLSL shader? + if(filePath.getExtension().equal("hlsl", String::NoCase)) + { + // Set this so that the D3DInclude::Open will have this + // information for relative paths. + smD3DInclude->setPath(filePath.getRootAndPath()); + + FileStream s; + if (!s.open(filePath, Torque::FS::File::Read)) + { + AssertISV(false, avar("GFXD3D11Shader::initShader - failed to open shader '%s'.", filePath.getFullPath().c_str())); + + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::_compileShader - Failed to open shader file '%s'.", filePath.getFullPath().c_str() ); + + return false; + } + + // Convert the path which might have virtualized + // mount paths to a real file system path. + Torque::Path realPath; + if (!FS::GetFSPath( filePath, realPath)) + realPath = filePath; + + U32 bufSize = s.getStreamSize(); + + FrameAllocatorMarker fam; + char *buffer = NULL; + + buffer = (char*)fam.alloc(bufSize + 1); + s.read(bufSize, buffer); + buffer[bufSize] = 0; + + res = D3DCompile(buffer, bufSize, realPath.getFullPath().c_str(), defines, smD3DInclude, "main", target, flags, 0, &code, &errorBuff); + + } + + // Is it a precompiled obj shader? + else if(filePath.getExtension().equal("obj", String::NoCase)) + { + FileStream s; + if(!s.open(filePath, Torque::FS::File::Read)) + { + AssertISV(false, avar("GFXD3D11Shader::initShader - failed to open shader '%s'.", filePath.getFullPath().c_str())); + + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::_compileShader - Failed to open shader file '%s'.", filePath.getFullPath().c_str() ); + + return false; + } + + res = D3DCreateBlob(s.getStreamSize(), &code); + AssertISV(SUCCEEDED(res), "Unable to create buffer!"); + s.read(s.getStreamSize(), code->GetBufferPointer()); + } + else + { + if (smLogErrors) + Con::errorf("GFXD3D11Shader::_compileShader - Unsupported shader file type '%s'.", filePath.getFullPath().c_str()); + + return false; + } + + if(errorBuff) + { + // remove \n at end of buffer + U8 *buffPtr = (U8*) errorBuff->GetBufferPointer(); + U32 len = dStrlen( (const char*) buffPtr ); + buffPtr[len-1] = '\0'; + + if(FAILED(res)) + { + if(smLogErrors) + Con::errorf("failed to compile shader: %s", buffPtr); + } + else + { + if(smLogWarnings) + Con::errorf("shader compiled with warning(s): %s", buffPtr); + } + } + else if (code == NULL && smLogErrors) + Con::errorf( "GFXD3D11Shader::_compileShader - no compiled code produced; possibly missing file '%s'.", filePath.getFullPath().c_str() ); + + AssertISV(SUCCEEDED(res), "Unable to compile shader!"); + + if(code != NULL) + { +#ifndef TORQUE_SHIPPING + + if(gDisassembleAllShaders) + { + ID3DBlob* disassem = NULL; + D3DDisassemble(code->GetBufferPointer(), code->GetBufferSize(), 0, NULL, &disassem); + mDissasembly = (const char*)disassem->GetBufferPointer(); + + String filename = filePath.getFullPath(); + filename.replace( ".hlsl", "_dis.txt" ); + + FileStream *fstream = FileStream::createAndOpen( filename, Torque::FS::File::Write ); + if ( fstream ) + { + fstream->write( mDissasembly ); + fstream->close(); + delete fstream; + } + + SAFE_RELEASE(disassem); + } + +#endif + + if (target.compare("ps_", 3) == 0) + res = D3D11DEVICE->CreatePixelShader(code->GetBufferPointer(), code->GetBufferSize(), NULL, &mPixShader); + else if (target.compare("vs_", 3) == 0) + res = D3D11DEVICE->CreateVertexShader(code->GetBufferPointer(), code->GetBufferSize(), NULL, &mVertShader); + + if (FAILED(res)) + { + AssertFatal(false, "D3D11Shader::_compilershader- failed to create shader"); + } + + if(res == S_OK){ + HRESULT reflectionResult = D3DReflect(code->GetBufferPointer(), code->GetBufferSize(), IID_ID3D11ShaderReflection, (void**)&reflectionTable); + if(FAILED(reflectionResult)) + AssertFatal(false, "D3D11Shader::_compilershader - Failed to get shader reflection table interface"); + } + + if(res == S_OK) + _getShaderConstants(reflectionTable, bufferLayout, samplerDescriptions); + +#ifdef TORQUE_ENABLE_CSF_GENERATION + + // Ok, we've got a valid shader and constants, let's write them all out. + if (!_saveCompiledOutput(filePath, code, bufferLayout) && smLogErrors) + Con::errorf( "GFXD3D11Shader::_compileShader - Unable to save shader compile output for: %s", + filePath.getFullPath().c_str()); +#endif + + if(FAILED(res) && smLogErrors) + Con::errorf("GFXD3D11Shader::_compileShader - Unable to create shader for '%s'.", filePath.getFullPath().c_str()); + } + + //bool result = code && SUCCEEDED(res) && HasValidConstants; + bool result = code && SUCCEEDED(res); + +#ifdef TORQUE_DEBUG + if (target.compare("vs_", 3) == 0) + { + String vertShader = mVertexFile.getFileName(); + mVertShader->SetPrivateData(WKPDID_D3DDebugObjectName, vertShader.size(), vertShader.c_str()); + } + else if (target.compare("ps_", 3) == 0) + { + String pixelShader = mPixelFile.getFileName(); + mPixShader->SetPrivateData(WKPDID_D3DDebugObjectName, pixelShader.size(), pixelShader.c_str()); + } +#endif + + SAFE_RELEASE(code); + SAFE_RELEASE(reflectionTable); + SAFE_RELEASE(errorBuff); + + return result; +} +void GFXD3D11Shader::_getShaderConstants( ID3D11ShaderReflection *table, + GenericConstBufferLayout *bufferLayoutIn, + Vector &samplerDescriptions ) +{ + PROFILE_SCOPE( GFXD3D11Shader_GetShaderConstants ); + + AssertFatal(table, "NULL constant table not allowed, is this an assembly shader?"); + + GFXD3D11ConstBufferLayout *bufferLayout = (GFXD3D11ConstBufferLayout*)bufferLayoutIn; + Vector &subBuffers = bufferLayout->getSubBufferDesc(); + subBuffers.clear(); + + D3D11_SHADER_DESC tableDesc; + HRESULT hr = table->GetDesc(&tableDesc); + if (FAILED(hr)) + { + AssertFatal(false, "Shader Reflection table unable to be created"); + } + + //offset for sub constant buffers + U32 bufferOffset = 0; + for (U32 i = 0; i < tableDesc.ConstantBuffers; i++) + { + ID3D11ShaderReflectionConstantBuffer* constantBuffer = table->GetConstantBufferByIndex(i); + D3D11_SHADER_BUFFER_DESC constantBufferDesc; + + if (constantBuffer->GetDesc(&constantBufferDesc) == S_OK) + { + + #ifdef TORQUE_DEBUG + AssertFatal(constantBufferDesc.Type == D3D_CT_CBUFFER, "Only scalar cbuffers supported for now."); + + if (dStrcmp(constantBufferDesc.Name, "$Globals") != 0 && dStrcmp(constantBufferDesc.Name, "$Params") != 0) + AssertFatal(false, "Only $Global and $Params cbuffer supported for now."); + #endif + #ifdef D3D11_DEBUG_SPEW + Con::printf("Constant Buffer Name: %s", constantBufferDesc.Name); + #endif + + for(U32 j =0; j< constantBufferDesc.Variables; j++) + { + GFXShaderConstDesc desc; + ID3D11ShaderReflectionVariable* variable = constantBuffer->GetVariableByIndex(j); + D3D11_SHADER_VARIABLE_DESC variableDesc; + D3D11_SHADER_TYPE_DESC variableTypeDesc; + + variable->GetDesc(&variableDesc); + + ID3D11ShaderReflectionType* variableType =variable->GetType(); + + variableType->GetDesc(&variableTypeDesc); + desc.name = String(variableDesc.Name); + // Prepend a "$" if it doesn't exist. Just to make things consistent. + if (desc.name.find("$") != 0) + desc.name = String::ToString("$%s", desc.name.c_str()); + + bool unusedVar = variableDesc.uFlags & D3D_SVF_USED ? false : true; + + if (variableTypeDesc.Elements == 0) + desc.arraySize = 1; + else + desc.arraySize = variableTypeDesc.Elements; + + #ifdef D3D11_DEBUG_SPEW + Con::printf("Variable Name %s:, offset: %d, size: %d, constantDesc.Elements: %d", desc.name.c_str(), variableDesc.StartOffset, variableDesc.Size, desc.arraySize); + #endif + if (_convertShaderVariable(variableTypeDesc, desc)) + { + //The HLSL compiler for 4.0 and above doesn't strip out unused registered constants. We'll have to do it manually + if (!unusedVar) + { + mShaderConsts.push_back(desc); + U32 alignBytes = getAlignmentValue(desc.constType); + U32 paramSize = variableDesc.Size; + bufferLayout->addParameter( desc.name, + desc.constType, + variableDesc.StartOffset + bufferOffset, + paramSize, + desc.arraySize, + alignBytes); + + } //unusedVar + } //_convertShaderVariable + } //constantBufferDesc.Variables + + // fill out our const sub buffer sizes etc + ConstSubBufferDesc subBufferDesc; + subBufferDesc.size = constantBufferDesc.Size; + subBufferDesc.start = bufferOffset; + subBuffers.push_back(subBufferDesc); + // increase our bufferOffset by the constant buffer size + bufferOffset += constantBufferDesc.Size; + + } + else + AssertFatal(false, "Unable to get shader constant description! (may need more elements of constantDesc"); + } + + // Set buffer size to the aligned size + bufferLayout->setSize(bufferOffset); + + + //get the sampler descriptions from the resource binding description + U32 resourceCount = tableDesc.BoundResources; + for (U32 i = 0; i < resourceCount; i++) + { + GFXShaderConstDesc desc; + D3D11_SHADER_INPUT_BIND_DESC bindDesc; + table->GetResourceBindingDesc(i, &bindDesc); + + switch (bindDesc.Type) + { + case D3D_SIT_SAMPLER: + // Prepend a "$" if it doesn't exist. Just to make things consistent. + desc.name = String(bindDesc.Name); + if (desc.name.find("$") != 0) + desc.name = String::ToString("$%s", desc.name.c_str()); + desc.constType = GFXSCT_Sampler; + desc.arraySize = bindDesc.BindPoint; + samplerDescriptions.push_back(desc); + break; + + } + } + +} + +bool GFXD3D11Shader::_convertShaderVariable(const D3D11_SHADER_TYPE_DESC &typeDesc, GFXShaderConstDesc &desc) +{ + switch (typeDesc.Type) + { + case D3D_SVT_INT: + { + switch (typeDesc.Class) + { + case D3D_SVC_SCALAR: + desc.constType = GFXSCT_Int; + break; + case D3D_SVC_VECTOR: + { + switch (typeDesc.Columns) + { + case 1: + desc.constType = GFXSCT_Int; + break; + case 2: + desc.constType = GFXSCT_Int2; + break; + case 3: + desc.constType = GFXSCT_Int3; + break; + case 4: + desc.constType = GFXSCT_Int4; + break; + } + } + break; + } + break; + } + case D3D_SVT_FLOAT: + { + switch (typeDesc.Class) + { + case D3D_SVC_SCALAR: + desc.constType = GFXSCT_Float; + break; + case D3D_SVC_VECTOR: + { + switch (typeDesc.Columns) + { + case 1: + desc.constType = GFXSCT_Float; + break; + case 2: + desc.constType = GFXSCT_Float2; + break; + case 3: + desc.constType = GFXSCT_Float3; + break; + case 4: + desc.constType = GFXSCT_Float4; + break; + } + } + break; + case D3D_SVC_MATRIX_ROWS: + case D3D_SVC_MATRIX_COLUMNS: + { + switch (typeDesc.Columns) + { + case 3: + if (typeDesc.Rows == 3) + { + desc.constType = GFXSCT_Float3x3; + } + break; + case 4: + if (typeDesc.Rows == 4) + { + desc.constType = GFXSCT_Float4x4; + } + break; + } + } + break; + case D3D_SVC_OBJECT: + case D3D_SVC_STRUCT: + return false; + } + } + break; + + default: + AssertFatal(false, "Unknown shader constant class enum"); + break; + } + + return true; +} + +const U32 GFXD3D11Shader::smCompiledShaderTag = MakeFourCC('t','c','s','f'); + +bool GFXD3D11Shader::_saveCompiledOutput( const Torque::Path &filePath, + ID3DBlob *buffer, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ) +{ + Torque::Path outputPath(filePath); + outputPath.setExtension("csf"); // "C"ompiled "S"hader "F"ile (fancy!) + + FileStream f; + if (!f.open(outputPath, Torque::FS::File::Write)) + return false; + if (!f.write(smCompiledShaderTag)) + return false; + // We could reverse engineer the structure in the compiled output, but this + // is a bit easier because we can just read it into the struct that we want. + if (!bufferLayout->write(&f)) + return false; + + U32 bufferSize = buffer->GetBufferSize(); + if (!f.write(bufferSize)) + return false; + if (!f.write(bufferSize, buffer->GetBufferPointer())) + return false; + + // Write out sampler descriptions. + + f.write( samplerDescriptions.size() ); + + for ( U32 i = 0; i < samplerDescriptions.size(); i++ ) + { + f.write( samplerDescriptions[i].name ); + f.write( (U32)(samplerDescriptions[i].constType) ); + f.write( samplerDescriptions[i].arraySize ); + } + + f.close(); + + return true; +} + +bool GFXD3D11Shader::_loadCompiledOutput( const Torque::Path &filePath, + const String &target, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ) +{ + Torque::Path outputPath(filePath); + outputPath.setExtension("csf"); // "C"ompiled "S"hader "F"ile (fancy!) + + FileStream f; + if (!f.open(outputPath, Torque::FS::File::Read)) + return false; + U32 fileTag; + if (!f.read(&fileTag)) + return false; + if (fileTag != smCompiledShaderTag) + return false; + if (!bufferLayout->read(&f)) + return false; + U32 bufferSize; + if (!f.read(&bufferSize)) + return false; + U32 waterMark = FrameAllocator::getWaterMark(); + DWORD* buffer = static_cast(FrameAllocator::alloc(bufferSize)); + if (!f.read(bufferSize, buffer)) + return false; + + // Read sampler descriptions. + + U32 samplerCount; + f.read( &samplerCount ); + + for ( U32 i = 0; i < samplerCount; i++ ) + { + GFXShaderConstDesc samplerDesc; + f.read( &(samplerDesc.name) ); + f.read( (U32*)&(samplerDesc.constType) ); + f.read( &(samplerDesc.arraySize) ); + + samplerDescriptions.push_back( samplerDesc ); + } + + f.close(); + + HRESULT res; + if (target.compare("ps_", 3) == 0) + res = D3D11DEVICE->CreatePixelShader(buffer, bufferSize, NULL, &mPixShader); + else + res = D3D11DEVICE->CreateVertexShader(buffer, bufferSize, NULL, &mVertShader); + AssertFatal(SUCCEEDED(res), "Unable to load shader!"); + + FrameAllocator::setWaterMark(waterMark); + return SUCCEEDED(res); +} + +void GFXD3D11Shader::_buildShaderConstantHandles(GenericConstBufferLayout* layout, bool vertexConst) +{ + for (U32 i = 0; i < layout->getParameterCount(); i++) + { + GenericConstBufferLayout::ParamDesc pd; + layout->getDesc(i, pd); + + GFXD3D11ShaderConstHandle* handle; + HandleMap::Iterator j = mHandles.find(pd.name); + + if (j != mHandles.end()) + { + handle = j->value; + handle->mShader = this; + handle->setValid( true ); + } + else + { + handle = new GFXD3D11ShaderConstHandle(); + handle->mShader = this; + mHandles[pd.name] = handle; + handle->setValid( true ); + } + + if (vertexConst) + { + handle->mVertexConstant = true; + handle->mVertexHandle = pd; + } + else + { + handle->mPixelConstant = true; + handle->mPixelHandle = pd; + } + } +} + +void GFXD3D11Shader::_buildSamplerShaderConstantHandles( Vector &samplerDescriptions ) +{ + Vector::iterator iter = samplerDescriptions.begin(); + for ( ; iter != samplerDescriptions.end(); iter++ ) + { + const GFXShaderConstDesc &desc = *iter; + + AssertFatal( desc.constType == GFXSCT_Sampler || + desc.constType == GFXSCT_SamplerCube, + "GFXD3D11Shader::_buildSamplerShaderConstantHandles - Invalid samplerDescription type!" ); + + GFXD3D11ShaderConstHandle *handle; + HandleMap::Iterator j = mHandles.find(desc.name); + + if ( j != mHandles.end() ) + handle = j->value; + else + { + handle = new GFXD3D11ShaderConstHandle(); + mHandles[desc.name] = handle; + } + + handle->mShader = this; + handle->setValid( true ); + handle->mPixelConstant = true; + handle->mPixelHandle.name = desc.name; + handle->mPixelHandle.constType = desc.constType; + handle->mPixelHandle.offset = desc.arraySize; + } +} + +void GFXD3D11Shader::_buildInstancingShaderConstantHandles() +{ + // If we have no instancing than just return + if (!mInstancingFormat) + return; + + U32 offset = 0; + for ( U32 i=0; i < mInstancingFormat->getElementCount(); i++ ) + { + const GFXVertexElement &element = mInstancingFormat->getElement( i ); + + String constName = String::ToString( "$%s", element.getSemantic().c_str() ); + + GFXD3D11ShaderConstHandle *handle; + HandleMap::Iterator j = mHandles.find( constName ); + + if ( j != mHandles.end() ) + handle = j->value; + else + { + handle = new GFXD3D11ShaderConstHandle(); + mHandles[ constName ] = handle; + } + + handle->mShader = this; + handle->setValid( true ); + handle->mInstancingConstant = true; + + // We shouldn't have an instancing constant that is also + // a vertex or pixel constant! This means the shader features + // are confused as to what is instanced. + // + AssertFatal( !handle->mVertexConstant && + !handle->mPixelConstant, + "GFXD3D11Shader::_buildInstancingShaderConstantHandles - Bad instanced constant!" ); + + // HACK: The GFXD3D11ShaderConstHandle will check mVertexConstant then + // fall back to reading the mPixelHandle values. We depend on this here + // and store the data we need in the mPixelHandle constant although its + // not a pixel shader constant. + // + handle->mPixelHandle.name = constName; + handle->mPixelHandle.offset = offset; + + // If this is a matrix we will have 2 or 3 more of these + // semantics with the same name after it. + for ( ; i < mInstancingFormat->getElementCount(); i++ ) + { + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); + if ( nextElement.getSemantic() != element.getSemantic() ) + { + i--; + break; + } + offset += nextElement.getSizeInBytes(); + } + } +} + +GFXShaderConstBufferRef GFXD3D11Shader::allocConstBuffer() +{ + if (mVertexConstBufferLayout && mPixelConstBufferLayout) + { + GFXD3D11ShaderConstBuffer* buffer = new GFXD3D11ShaderConstBuffer(this, mVertexConstBufferLayout, mPixelConstBufferLayout); + mActiveBuffers.push_back( buffer ); + buffer->registerResourceWithDevice(getOwningDevice()); + return buffer; + } + + return NULL; +} + +/// Returns a shader constant handle for name, if the variable doesn't exist NULL is returned. +GFXShaderConstHandle* GFXD3D11Shader::getShaderConstHandle(const String& name) +{ + HandleMap::Iterator i = mHandles.find(name); + if ( i != mHandles.end() ) + { + return i->value; + } + else + { + GFXD3D11ShaderConstHandle *handle = new GFXD3D11ShaderConstHandle(); + handle->setValid( false ); + handle->mShader = this; + mHandles[name] = handle; + + return handle; + } +} + +GFXShaderConstHandle* GFXD3D11Shader::findShaderConstHandle(const String& name) +{ + HandleMap::Iterator i = mHandles.find(name); + if(i != mHandles.end()) + return i->value; + else + { + return NULL; + } +} + +const Vector& GFXD3D11Shader::getShaderConstDesc() const +{ + return mShaderConsts; +} + +U32 GFXD3D11Shader::getAlignmentValue(const GFXShaderConstType constType) const +{ + const U32 mRowSizeF = 16; + const U32 mRowSizeI = 16; + + switch (constType) + { + case GFXSCT_Float : + case GFXSCT_Float2 : + case GFXSCT_Float3 : + case GFXSCT_Float4 : + return mRowSizeF; + break; + // Matrices + case GFXSCT_Float2x2 : + return mRowSizeF * 2; + break; + case GFXSCT_Float3x3 : + return mRowSizeF * 3; + break; + case GFXSCT_Float4x4 : + return mRowSizeF * 4; + break; + //// Scalar + case GFXSCT_Int : + case GFXSCT_Int2 : + case GFXSCT_Int3 : + case GFXSCT_Int4 : + return mRowSizeI; + break; + default: + AssertFatal(false, "Unsupported type!"); + return 0; + break; + } +} + +void GFXD3D11Shader::zombify() +{ + // Shaders don't need zombification +} + +void GFXD3D11Shader::resurrect() +{ + // Shaders are never zombies, and therefore don't have to be brought back. +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.h b/Engine/source/gfx/D3D11/gfxD3D11Shader.h new file mode 100644 index 0000000000..2e4074a8f5 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.h @@ -0,0 +1,471 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11SHADER_H_ +#define _GFXD3D11SHADER_H_ + +#include + +#include "core/util/path.h" +#include "core/util/tDictionary.h" +#include "gfx/gfxShader.h" +#include "gfx/gfxResource.h" +#include "gfx/genericConstBuffer.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +class GFXD3D11Shader; + +enum CONST_CLASS +{ + D3DPC_SCALAR, + D3DPC_VECTOR, + D3DPC_MATRIX_ROWS, + D3DPC_MATRIX_COLUMNS, + D3DPC_OBJECT, + D3DPC_STRUCT +}; + +enum CONST_TYPE +{ + D3DPT_VOID, + D3DPT_BOOL, + D3DPT_INT, + D3DPT_FLOAT, + D3DPT_STRING, + D3DPT_TEXTURE, + D3DPT_TEXTURE1D, + D3DPT_TEXTURE2D, + D3DPT_TEXTURE3D, + D3DPT_TEXTURECUBE, + D3DPT_SAMPLER, + D3DPT_SAMPLER1D, + D3DPT_SAMPLER2D, + D3DPT_SAMPLER3D, + D3DPT_SAMPLERCUBE, + D3DPT_PIXELSHADER, + D3DPT_VERTEXSHADER, + D3DPT_PIXELFRAGMENT, + D3DPT_VERTEXFRAGMENT +}; + +enum REGISTER_TYPE +{ + D3DRS_BOOL, + D3DRS_INT4, + D3DRS_FLOAT4, + D3DRS_SAMPLER +}; + +struct ConstantDesc +{ + String Name; + S32 RegisterIndex; + S32 RegisterCount; + S32 Rows; + S32 Columns; + S32 Elements; + S32 StructMembers; + REGISTER_TYPE RegisterSet; + CONST_CLASS Class; + CONST_TYPE Type; + U32 Bytes; +}; + +class ConstantTable +{ +public: + bool Create(const void* data); + + U32 GetConstantCount() const { return m_constants.size(); } + const String& GetCreator() const { return m_creator; } + + const ConstantDesc* GetConstantByIndex(U32 i) const { return &m_constants[i]; } + const ConstantDesc* GetConstantByName(const String& name) const; + + void ClearConstants() { m_constants.clear(); } + +private: + Vector m_constants; + String m_creator; +}; + +// Structs +struct CTHeader +{ + U32 Size; + U32 Creator; + U32 Version; + U32 Constants; + U32 ConstantInfo; + U32 Flags; + U32 Target; +}; + +struct CTInfo +{ + U32 Name; + U16 RegisterSet; + U16 RegisterIndex; + U16 RegisterCount; + U16 Reserved; + U32 TypeInfo; + U32 DefaultValue; +}; + +struct CTType +{ + U16 Class; + U16 Type; + U16 Rows; + U16 Columns; + U16 Elements; + U16 StructMembers; + U32 StructMemberInfo; +}; + +// Shader instruction opcodes +const U32 SIO_COMMENT = 0x0000FFFE; +const U32 SIO_END = 0x0000FFFF; +const U32 SI_OPCODE_MASK = 0x0000FFFF; +const U32 SI_COMMENTSIZE_MASK = 0x7FFF0000; +const U32 CTAB_CONSTANT = 0x42415443; + +// Member functions +inline bool ConstantTable::Create(const void* data) +{ + const U32* ptr = static_cast(data); + while(*++ptr != SIO_END) + { + if((*ptr & SI_OPCODE_MASK) == SIO_COMMENT) + { + // Check for CTAB comment + U32 comment_size = (*ptr & SI_COMMENTSIZE_MASK) >> 16; + if(*(ptr+1) != CTAB_CONSTANT) + { + ptr += comment_size; + continue; + } + + // Read header + const char* ctab = reinterpret_cast(ptr+2); + size_t ctab_size = (comment_size-1)*4; + + const CTHeader* header = reinterpret_cast(ctab); + if(ctab_size < sizeof(*header) || header->Size != sizeof(*header)) + return false; + m_creator = ctab + header->Creator; + + // Read constants + m_constants.reserve(header->Constants); + const CTInfo* info = reinterpret_cast(ctab + header->ConstantInfo); + for(U32 i = 0; i < header->Constants; ++i) + { + const CTType* type = reinterpret_cast(ctab + info[i].TypeInfo); + + // Fill struct + ConstantDesc desc; + desc.Name = ctab + info[i].Name; + desc.RegisterSet = static_cast(info[i].RegisterSet); + desc.RegisterIndex = info[i].RegisterIndex; + desc.RegisterCount = info[i].RegisterCount; + desc.Rows = type->Rows; + desc.Class = static_cast(type->Class); + desc.Type = static_cast(type->Type); + desc.Columns = type->Columns; + desc.Elements = type->Elements; + desc.StructMembers = type->StructMembers; + desc.Bytes = 4 * desc.Elements * desc.Rows * desc.Columns; + m_constants.push_back(desc); + } + + return true; + } + } + return false; +} + +inline const ConstantDesc* ConstantTable::GetConstantByName(const String& name) const +{ + Vector::const_iterator it; + for(it = m_constants.begin(); it != m_constants.end(); ++it) + { + if(it->Name == name) + return &(*it); + } + return NULL; +} + +/////////////////// Constant Buffers ///////////////////////////// + +// Maximum number of CBuffers ($Globals & $Params) +const U32 CBUFFER_MAX = 2; + +struct ConstSubBufferDesc +{ + U32 start; + U32 size; + + ConstSubBufferDesc() : start(0), size(0){} +}; + +class GFXD3D11ConstBufferLayout : public GenericConstBufferLayout +{ +public: + GFXD3D11ConstBufferLayout(); + /// Get our constant sub buffer data + Vector &getSubBufferDesc(){ return mSubBuffers; } + + /// We need to manually set the size due to D3D11 alignment + void setSize(U32 size){ mBufferSize = size;} + + /// Set a parameter, given a base pointer + virtual bool set(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer); + +protected: + /// Set a matrix, given a base pointer + virtual bool setMatrix(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer); + + Vector mSubBuffers; +}; + +class GFXD3D11ShaderConstHandle : public GFXShaderConstHandle +{ +public: + + // GFXShaderConstHandle + const String& getName() const; + GFXShaderConstType getType() const; + U32 getArraySize() const; + + WeakRefPtr mShader; + + bool mVertexConstant; + GenericConstBufferLayout::ParamDesc mVertexHandle; + bool mPixelConstant; + GenericConstBufferLayout::ParamDesc mPixelHandle; + + /// Is true if this constant is for hardware mesh instancing. + /// + /// Note: We currently store its settings in mPixelHandle. + /// + bool mInstancingConstant; + + void setValid( bool valid ) { mValid = valid; } + S32 getSamplerRegister() const; + + // Returns true if this is a handle to a sampler register. + bool isSampler() const + { + return ( mPixelConstant && mPixelHandle.constType >= GFXSCT_Sampler ) || ( mVertexConstant && mVertexHandle.constType >= GFXSCT_Sampler ); + } + + /// Restore to uninitialized state. + void clear() + { + mShader = NULL; + mVertexConstant = false; + mPixelConstant = false; + mInstancingConstant = false; + mVertexHandle.clear(); + mPixelHandle.clear(); + mValid = false; + } + + GFXD3D11ShaderConstHandle(); +}; + +/// The D3D11 implementation of a shader constant buffer. +class GFXD3D11ShaderConstBuffer : public GFXShaderConstBuffer +{ + friend class GFXD3D11Shader; + +public: + + GFXD3D11ShaderConstBuffer(GFXD3D11Shader* shader, + GFXD3D11ConstBufferLayout* vertexLayout, + GFXD3D11ConstBufferLayout* pixelLayout); + + virtual ~GFXD3D11ShaderConstBuffer(); + + /// Called by GFXD3D11Device to activate this buffer. + /// @param mPrevShaderBuffer The previously active buffer + void activate(GFXD3D11ShaderConstBuffer *prevShaderBuffer); + + /// Used internally by GXD3D11ShaderConstBuffer to determine if it's dirty. + bool isDirty(); + + /// Called from GFXD3D11Shader when constants have changed and need + /// to be the shader this buffer references is reloaded. + void onShaderReload(GFXD3D11Shader *shader); + + // GFXShaderConstBuffer + virtual GFXShader* getShader(); + virtual void set(GFXShaderConstHandle* handle, const F32 fv); + virtual void set(GFXShaderConstHandle* handle, const Point2F& fv); + virtual void set(GFXShaderConstHandle* handle, const Point3F& fv); + virtual void set(GFXShaderConstHandle* handle, const Point4F& fv); + virtual void set(GFXShaderConstHandle* handle, const PlaneF& fv); + virtual void set(GFXShaderConstHandle* handle, const ColorF& fv); + virtual void set(GFXShaderConstHandle* handle, const S32 f); + virtual void set(GFXShaderConstHandle* handle, const Point2I& fv); + virtual void set(GFXShaderConstHandle* handle, const Point3I& fv); + virtual void set(GFXShaderConstHandle* handle, const Point4I& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const MatrixF& mat, const GFXShaderConstType matType = GFXSCT_Float4x4); + virtual void set(GFXShaderConstHandle* handle, const MatrixF* mat, const U32 arraySize, const GFXShaderConstType matrixType = GFXSCT_Float4x4); + + // GFXResource + virtual const String describeSelf() const; + virtual void zombify(); + virtual void resurrect(); + +protected: + + void _createBuffers(); + + template + inline void SET_CONSTANT(GFXShaderConstHandle* handle, + const T& fv, + GenericConstBuffer *vBuffer, + GenericConstBuffer *pBuffer); + + // Constant buffers, VSSetConstantBuffers1 has issues on win 7. So unfortunately for now we have multiple constant buffers + ID3D11Buffer* mConstantBuffersV[CBUFFER_MAX]; + ID3D11Buffer* mConstantBuffersP[CBUFFER_MAX]; + + /// We keep a weak reference to the shader + /// because it will often be deleted. + WeakRefPtr mShader; + + //vertex + GFXD3D11ConstBufferLayout* mVertexConstBufferLayout; + GenericConstBuffer* mVertexConstBuffer; + //pixel + GFXD3D11ConstBufferLayout* mPixelConstBufferLayout; + GenericConstBuffer* mPixelConstBuffer; +}; + +class gfxD3D11Include; +typedef StrongRefPtr gfxD3DIncludeRef; + +/////////////////// GFXShader implementation ///////////////////////////// + +class GFXD3D11Shader : public GFXShader +{ + friend class GFXD3D11Device; + friend class GFXD3D11ShaderConstBuffer; + +public: + typedef Map HandleMap; + + GFXD3D11Shader(); + virtual ~GFXD3D11Shader(); + + // GFXShader + virtual GFXShaderConstBufferRef allocConstBuffer(); + virtual const Vector& getShaderConstDesc() const; + virtual GFXShaderConstHandle* getShaderConstHandle(const String& name); + virtual GFXShaderConstHandle* findShaderConstHandle(const String& name); + virtual U32 getAlignmentValue(const GFXShaderConstType constType) const; + virtual bool getDisassembly( String &outStr ) const; + + // GFXResource + virtual void zombify(); + virtual void resurrect(); + +protected: + + virtual bool _init(); + + static const U32 smCompiledShaderTag; + + ConstantTable table; + + ID3D11VertexShader *mVertShader; + ID3D11PixelShader *mPixShader; + + GFXD3D11ConstBufferLayout* mVertexConstBufferLayout; + GFXD3D11ConstBufferLayout* mPixelConstBufferLayout; + + static gfxD3DIncludeRef smD3DInclude; + + HandleMap mHandles; + + /// The shader disassembly from DX when this shader is compiled. + /// We only store this data in non-release builds. + String mDissasembly; + + /// Vector of sampler type descriptions consolidated from _compileShader. + Vector mSamplerDescriptions; + + /// Vector of descriptions (consolidated for the getShaderConstDesc call) + Vector mShaderConsts; + + // These two functions are used when compiling shaders from hlsl + virtual bool _compileShader( const Torque::Path &filePath, + const String &target, + const D3D_SHADER_MACRO *defines, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + void _getShaderConstants( ID3D11ShaderReflection* table, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + bool _convertShaderVariable(const D3D11_SHADER_TYPE_DESC &typeDesc, GFXShaderConstDesc &desc); + + + bool _saveCompiledOutput( const Torque::Path &filePath, + ID3DBlob *buffer, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + // Loads precompiled shaders + bool _loadCompiledOutput( const Torque::Path &filePath, + const String &target, + GenericConstBufferLayout *bufferLayoutF, + Vector &samplerDescriptions ); + + // This is used in both cases + virtual void _buildShaderConstantHandles(GenericConstBufferLayout *layout, bool vertexConst); + + virtual void _buildSamplerShaderConstantHandles( Vector &samplerDescriptions ); + + /// Used to build the instancing shader constants from + /// the instancing vertex format. + void _buildInstancingShaderConstantHandles(); +}; + +inline bool GFXD3D11Shader::getDisassembly(String &outStr) const +{ + outStr = mDissasembly; + return (outStr.isNotEmpty()); +} + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp new file mode 100644 index 0000000000..fb5f439361 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/gfxDevice.h" +#include "gfx/D3D11/gfxD3D11StateBlock.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" + +GFXD3D11StateBlock::GFXD3D11StateBlock(const GFXStateBlockDesc& desc) +{ + AssertFatal(D3D11DEVICE, "Invalid D3DDevice!"); + + mDesc = desc; + mCachedHashValue = desc.getHashValue(); + + // Color writes + mColorMask = 0; + mColorMask |= (mDesc.colorWriteRed ? D3D11_COLOR_WRITE_ENABLE_RED : 0); + mColorMask |= (mDesc.colorWriteGreen ? D3D11_COLOR_WRITE_ENABLE_GREEN : 0); + mColorMask |= (mDesc.colorWriteBlue ? D3D11_COLOR_WRITE_ENABLE_BLUE : 0); + mColorMask |= (mDesc.colorWriteAlpha ? D3D11_COLOR_WRITE_ENABLE_ALPHA : 0); + + mBlendState = NULL; + for (U32 i = 0; i < GFX->getNumSamplers(); i++) + { + mSamplerStates[i] = NULL; + } + + mDepthStencilState = NULL; + mRasterizerState = NULL; + + mBlendDesc.AlphaToCoverageEnable = false; + mBlendDesc.IndependentBlendEnable = false; + + mBlendDesc.RenderTarget[0].BlendEnable = mDesc.blendEnable; + mBlendDesc.RenderTarget[0].BlendOp = GFXD3D11BlendOp[mDesc.blendOp]; + mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendOp]; + mBlendDesc.RenderTarget[0].DestBlend = GFXD3D11Blend[mDesc.blendDest]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendDest]; + mBlendDesc.RenderTarget[0].SrcBlend = GFXD3D11Blend[mDesc.blendSrc]; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendSrc]; + mBlendDesc.RenderTarget[0].RenderTargetWriteMask = mColorMask; + + HRESULT hr = D3D11DEVICE->CreateBlendState(&mBlendDesc, &mBlendState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateBlendState call failure."); + } + + mDepthStencilDesc.DepthWriteMask = mDesc.zWriteEnable ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; + mDepthStencilDesc.DepthEnable = mDesc.zEnable; + mDepthStencilDesc.DepthFunc = GFXD3D11CmpFunc[mDesc.zFunc]; + mDepthStencilDesc.StencilWriteMask = mDesc.stencilWriteMask; + mDepthStencilDesc.StencilReadMask = mDesc.stencilMask; + mDepthStencilDesc.StencilEnable = mDesc.stencilEnable; + + mDepthStencilDesc.FrontFace.StencilFunc = GFXD3D11CmpFunc[mDesc.stencilFunc]; + mDepthStencilDesc.FrontFace.StencilFailOp = GFXD3D11StencilOp[mDesc.stencilFailOp]; + mDepthStencilDesc.FrontFace.StencilDepthFailOp = GFXD3D11StencilOp[mDesc.stencilZFailOp]; + mDepthStencilDesc.FrontFace.StencilPassOp = GFXD3D11StencilOp[mDesc.stencilPassOp]; + mDepthStencilDesc.BackFace = mDepthStencilDesc.FrontFace; + + hr = D3D11DEVICE->CreateDepthStencilState(&mDepthStencilDesc, &mDepthStencilState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateDepthStencilState call failure."); + } + + mRasterizerDesc.CullMode = GFXD3D11CullMode[mDesc.cullMode]; + mRasterizerDesc.FillMode = GFXD3D11FillMode[mDesc.fillMode]; + mRasterizerDesc.DepthBias = mDesc.zBias; + mRasterizerDesc.SlopeScaledDepthBias = mDesc.zSlopeBias; + mRasterizerDesc.AntialiasedLineEnable = FALSE; + mRasterizerDesc.MultisampleEnable = FALSE; + mRasterizerDesc.ScissorEnable = FALSE; + mRasterizerDesc.DepthClipEnable = TRUE; + mRasterizerDesc.FrontCounterClockwise = FALSE; + mRasterizerDesc.DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP; + + hr = D3D11DEVICE->CreateRasterizerState(&mRasterizerDesc, &mRasterizerState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateDepthStencilState call failure."); + } + + for ( U32 i = 0; i < GFX->getNumSamplers(); i++ ) + { + mSamplerDesc[i].AddressU = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeU]; + mSamplerDesc[i].AddressV = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeV]; + mSamplerDesc[i].AddressW = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeW]; + mSamplerDesc[i].MaxAnisotropy = mDesc.samplers[i].maxAnisotropy; + + mSamplerDesc[i].MipLODBias = mDesc.samplers[i].mipLODBias; + mSamplerDesc[i].MinLOD = 0; + mSamplerDesc[i].MaxLOD = FLT_MAX; + + if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + else + mSamplerDesc[i].Filter = D3D11_FILTER_ANISOTROPIC; + + mSamplerDesc[i].BorderColor[0] = 1.0f; + mSamplerDesc[i].BorderColor[1] = 1.0f; + mSamplerDesc[i].BorderColor[2] = 1.0f; + mSamplerDesc[i].BorderColor[3] = 1.0f; + mSamplerDesc[i].ComparisonFunc = D3D11_COMPARISON_NEVER; + + hr = D3D11DEVICE->CreateSamplerState(&mSamplerDesc[i], &mSamplerStates[i]); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateSamplerState call failure."); + } + } +} + +GFXD3D11StateBlock::~GFXD3D11StateBlock() +{ + SAFE_RELEASE(mBlendState); + SAFE_RELEASE(mRasterizerState); + SAFE_RELEASE(mDepthStencilState); + + //Use TEXTURE_STAGE_COUNT here, not safe to rely on GFX pointer + for (U32 i = 0; i < TEXTURE_STAGE_COUNT; ++i) + { + SAFE_RELEASE(mSamplerStates[i]); + } +} + +/// Returns the hash value of the desc that created this block +U32 GFXD3D11StateBlock::getHashValue() const +{ + return mCachedHashValue; +} + +/// Returns a GFXStateBlockDesc that this block represents +const GFXStateBlockDesc& GFXD3D11StateBlock::getDesc() const +{ + return mDesc; +} + +/// Called by D3D11 device to active this state block. +/// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. +void GFXD3D11StateBlock::activate(GFXD3D11StateBlock* oldState) +{ + PROFILE_SCOPE( GFXD3D11StateBlock_Activate ); + + ID3D11DeviceContext* pDevCxt = D3D11DEVICECONTEXT; + + mBlendDesc.AlphaToCoverageEnable = false; + mBlendDesc.IndependentBlendEnable = mDesc.separateAlphaBlendEnable; + + mBlendDesc.RenderTarget[0].BlendEnable = mDesc.blendEnable; + mBlendDesc.RenderTarget[0].BlendOp = GFXD3D11BlendOp[mDesc.blendOp]; + mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendOp]; + mBlendDesc.RenderTarget[0].DestBlend = GFXD3D11Blend[mDesc.blendDest]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendDest]; + mBlendDesc.RenderTarget[0].SrcBlend = GFXD3D11Blend[mDesc.blendSrc]; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendSrc]; + mBlendDesc.RenderTarget[0].RenderTargetWriteMask = mColorMask; + + float blendFactor[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + + pDevCxt->OMSetBlendState(mBlendState, blendFactor, 0xFFFFFFFF); + + mDepthStencilDesc.DepthWriteMask = mDesc.zWriteEnable ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; + mDepthStencilDesc.DepthEnable = mDesc.zEnable; + mDepthStencilDesc.DepthFunc = GFXD3D11CmpFunc[mDesc.zFunc]; + mDepthStencilDesc.StencilWriteMask = mDesc.stencilWriteMask; + mDepthStencilDesc.StencilReadMask = mDesc.stencilMask; + mDepthStencilDesc.StencilEnable = mDesc.stencilEnable; + + mDepthStencilDesc.FrontFace.StencilFunc = GFXD3D11CmpFunc[mDesc.stencilFunc]; + mDepthStencilDesc.FrontFace.StencilFailOp = GFXD3D11StencilOp[mDesc.stencilFailOp]; + mDepthStencilDesc.FrontFace.StencilDepthFailOp = GFXD3D11StencilOp[mDesc.stencilZFailOp]; + mDepthStencilDesc.FrontFace.StencilPassOp = GFXD3D11StencilOp[mDesc.stencilPassOp]; + + if (mDesc.stencilEnable) + mDepthStencilDesc.BackFace = mDepthStencilDesc.FrontFace; + else + { + mDepthStencilDesc.BackFace.StencilFunc = GFXD3D11CmpFunc[GFXCmpAlways]; + mDepthStencilDesc.BackFace.StencilFailOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + mDepthStencilDesc.BackFace.StencilDepthFailOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + mDepthStencilDesc.BackFace.StencilPassOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + } + + pDevCxt->OMSetDepthStencilState(mDepthStencilState, mDesc.stencilRef); + + mRasterizerDesc.CullMode = GFXD3D11CullMode[mDesc.cullMode]; + mRasterizerDesc.FillMode = GFXD3D11FillMode[mDesc.fillMode]; + mRasterizerDesc.DepthBias = mDesc.zBias; + mRasterizerDesc.SlopeScaledDepthBias = mDesc.zSlopeBias; + mRasterizerDesc.AntialiasedLineEnable = FALSE; + mRasterizerDesc.MultisampleEnable = FALSE; + mRasterizerDesc.ScissorEnable = FALSE; + + if (mDesc.zEnable) + mRasterizerDesc.DepthClipEnable = true; + else + mRasterizerDesc.DepthClipEnable = false; + + mRasterizerDesc.FrontCounterClockwise = FALSE; + mRasterizerDesc.DepthBiasClamp = 0.0f; + + pDevCxt->RSSetState(mRasterizerState); + + U32 numSamplers = GFX->getNumSamplers(); + for (U32 i = 0; i < numSamplers; i++) + { + mSamplerDesc[i].AddressU = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeU]; + mSamplerDesc[i].AddressV = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeV]; + mSamplerDesc[i].AddressW = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeW]; + mSamplerDesc[i].MaxAnisotropy = mDesc.samplers[i].maxAnisotropy; + + mSamplerDesc[i].MipLODBias = mDesc.samplers[i].mipLODBias; + mSamplerDesc[i].MinLOD = 0; + mSamplerDesc[i].MaxLOD = FLT_MAX; + + if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + else + mSamplerDesc[i].Filter = D3D11_FILTER_ANISOTROPIC; + + mSamplerDesc[i].BorderColor[0] = 0.0f; + mSamplerDesc[i].BorderColor[1] = 0.0f; + mSamplerDesc[i].BorderColor[2] = 0.0f; + mSamplerDesc[i].BorderColor[3] = 0.0f; + mSamplerDesc[i].ComparisonFunc = D3D11_COMPARISON_NEVER; + } + + //TODO samplers for vertex shader + // Set all the samplers with one call + //pDevCxt->VSSetSamplers(0, numSamplers, &mSamplerStates[0]); + pDevCxt->PSSetSamplers(0, numSamplers, &mSamplerStates[0]); +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h new file mode 100644 index 0000000000..6e55b962fc --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11STATEBLOCK_H_ +#define _GFXD3D11STATEBLOCK_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxStateBlock.h" + +class GFXD3D11StateBlock : public GFXStateBlock +{ +public: + + GFXD3D11StateBlock(const GFXStateBlockDesc& desc); + virtual ~GFXD3D11StateBlock(); + + /// Called by D3D11 device to active this state block. + /// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. + void activate(GFXD3D11StateBlock* oldState); + + // + // GFXStateBlock interface + // + + /// Returns the hash value of the desc that created this block + virtual U32 getHashValue() const; + + /// Returns a GFXStateBlockDesc that this block represents + virtual const GFXStateBlockDesc& getDesc() const; + + // + // GFXResource + // + virtual void zombify() { } + /// When called the resource should restore all device sensitive information destroyed by zombify() + virtual void resurrect() { } +private: + + D3D11_BLEND_DESC mBlendDesc; + D3D11_RASTERIZER_DESC mRasterizerDesc; + D3D11_DEPTH_STENCIL_DESC mDepthStencilDesc; + D3D11_SAMPLER_DESC mSamplerDesc[TEXTURE_STAGE_COUNT]; + + ID3D11BlendState* mBlendState; + ID3D11DepthStencilState* mDepthStencilState; + ID3D11RasterizerState* mRasterizerState; + ID3D11SamplerState* mSamplerStates[TEXTURE_STAGE_COUNT]; + + GFXStateBlockDesc mDesc; + U32 mCachedHashValue; + // Cached D3D specific things, these are "calculated" from GFXStateBlock + U32 mColorMask; +}; + +typedef StrongRefPtr GFXD3D11StateBlockRef; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Target.cpp b/Engine/source/gfx/D3D11/gfxD3D11Target.cpp new file mode 100644 index 0000000000..a74b3e54d8 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Target.cpp @@ -0,0 +1,409 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gfx/D3D11/gfxD3D11Target.h" +#include "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/gfxDebugEvent.h" +#include "gfx/gfxStringEnumTranslate.h" +#include "windowManager/win32/win32Window.h" + +GFXD3D11TextureTarget::GFXD3D11TextureTarget() + : mTargetSize( Point2I::Zero ), + mTargetFormat( GFXFormatR8G8B8A8 ) +{ + for(S32 i=0; imDeviceDepthStencil; + mTargetViews[slot] = D3D11->mDeviceDepthStencilView; + mTargets[slot]->AddRef(); + mTargetViews[slot]->AddRef(); + } + else + { + // Cast the texture object to D3D... + AssertFatal(static_cast(tex), "GFXD3D11TextureTarget::attachTexture - invalid texture object."); + + GFXD3D11TextureObject *d3dto = static_cast(tex); + + // Grab the surface level. + if( slot == DepthStencil ) + { + mTargets[slot] = d3dto->getSurface(); + if ( mTargets[slot] ) + mTargets[slot]->AddRef(); + + mTargetViews[slot] = d3dto->getDSView(); + if( mTargetViews[slot]) + mTargetViews[slot]->AddRef(); + + } + else + { + // getSurface will almost always return NULL. It will only return non-NULL + // if the surface that it needs to render to is different than the mip level + // in the actual texture. This will happen with MSAA. + if( d3dto->getSurface() == NULL ) + { + + mTargets[slot] = d3dto->get2DTex(); + mTargets[slot]->AddRef(); + mTargetViews[slot] = d3dto->getRTView(); + mTargetViews[slot]->AddRef(); + } + else + { + mTargets[slot] = d3dto->getSurface(); + mTargets[slot]->AddRef(); + mTargetViews[slot]->AddRef(); + // Only assign resolve target if d3dto has a surface to give us. + // + // That usually means there is an MSAA target involved, which is why + // the resolve is needed to get the data out of the target. + mResolveTargets[slot] = d3dto; + + if ( tex && slot == Color0 ) + { + mTargetSize.set( tex->getSize().x, tex->getSize().y ); + mTargetFormat = tex->getFormat(); + } + } + } + + // Update surface size + if(slot == Color0) + { + ID3D11Texture2D *surface = mTargets[Color0]; + if ( surface ) + { + D3D11_TEXTURE2D_DESC sd; + surface->GetDesc(&sd); + mTargetSize = Point2I(sd.Width, sd.Height); + + S32 format = sd.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + mTargetFormat = (GFXFormat)format; + } + } + } + +} + + +void GFXD3D11TextureTarget::attachTexture( RenderSlot slot, GFXCubemap *tex, U32 face, U32 mipLevel/*=0*/ ) +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_attachTexture_Cubemap, ColorI::RED ); + + AssertFatal(slot < MaxRenderSlotId, "GFXD3D11TextureTarget::attachTexture - out of range slot."); + + // Mark state as dirty so device can know to update. + invalidateState(); + + // Release what we had, it's definitely going to change. + SAFE_RELEASE(mTargetViews[slot]); + SAFE_RELEASE(mTargets[slot]); + SAFE_RELEASE(mTargetSRViews[slot]); + + mResolveTargets[slot] = NULL; + + // Cast the texture object to D3D... + AssertFatal(!tex || static_cast(tex), "GFXD3DTextureTarget::attachTexture - invalid cubemap object."); + + if(slot == Color0) + { + mTargetSize = Point2I::Zero; + mTargetFormat = GFXFormatR8G8B8A8; + } + + // Are we clearing? + if(!tex) + { + // Yup - just exit, it'll stay NULL. + return; + } + + GFXD3D11Cubemap *cube = static_cast(tex); + + mTargets[slot] = cube->get2DTex(); + mTargets[slot]->AddRef(); + mTargetViews[slot] = cube->getRTView(face); + mTargetViews[slot]->AddRef(); + mTargetSRViews[slot] = cube->getSRView(); + mTargetSRViews[slot]->AddRef(); + + // Update surface size + if(slot == Color0) + { + ID3D11Texture2D *surface = mTargets[Color0]; + if ( surface ) + { + D3D11_TEXTURE2D_DESC sd; + surface->GetDesc(&sd); + mTargetSize = Point2I(sd.Width, sd.Height); + + S32 format = sd.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + mTargetFormat = (GFXFormat)format; + } + } + +} + +void GFXD3D11TextureTarget::activate() +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_activate, ColorI::RED ); + + AssertFatal( mTargets[GFXTextureTarget::Color0], "GFXD3D11TextureTarget::activate() - You can never have a NULL primary render target!" ); + + // Clear the state indicator. + stateApplied(); + + // Now set all the new surfaces into the appropriate slots. + ID3D11RenderTargetView* rtViews[MaxRenderSlotId] = { NULL, NULL, NULL, NULL, NULL, NULL}; + + ID3D11DepthStencilView* dsView = (ID3D11DepthStencilView*)(mTargetViews[GFXTextureTarget::DepthStencil]); + for (U32 i = 0; i < 4; i++) + { + rtViews[i] = (ID3D11RenderTargetView*)mTargetViews[GFXTextureTarget::Color0 + i]; + } + + D3D11DEVICECONTEXT->OMSetRenderTargets(MaxRenderSlotId, rtViews, dsView); + +} + +void GFXD3D11TextureTarget::deactivate() +{ + //re-gen mip maps + for (U32 i = 0; i < 4; i++) + { + ID3D11ShaderResourceView* pSRView = mTargetSRViews[GFXTextureTarget::Color0 + i]; + if (pSRView) + D3D11DEVICECONTEXT->GenerateMips(pSRView); + } + +} + +void GFXD3D11TextureTarget::resolve() +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_resolve, ColorI::RED ); + + for (U32 i = 0; i < MaxRenderSlotId; i++) + { + // We use existance @ mResolveTargets as a flag that we need to copy + // data from the rendertarget into the texture. + if (mResolveTargets[i]) + { + D3D11_TEXTURE2D_DESC desc; + mTargets[i]->GetDesc(&desc); + D3D11DEVICECONTEXT->CopySubresourceRegion(mResolveTargets[i]->get2DTex(), 0, 0, 0, 0, mTargets[i], 0, NULL); + } + } +} + +void GFXD3D11TextureTarget::resolveTo( GFXTextureObject *tex ) +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_resolveTo, ColorI::RED ); + + if ( mTargets[Color0] == NULL ) + return; + + D3D11_TEXTURE2D_DESC desc; + mTargets[Color0]->GetDesc(&desc); + D3D11DEVICECONTEXT->CopySubresourceRegion(((GFXD3D11TextureObject*)(tex))->get2DTex(), 0, 0, 0, 0, mTargets[Color0], 0, NULL); + +} + +void GFXD3D11TextureTarget::zombify() +{ + for(U32 i = 0; i < MaxRenderSlotId; i++) + attachTexture(RenderSlot(i), NULL); +} + +void GFXD3D11TextureTarget::resurrect() +{ +} + +GFXD3D11WindowTarget::GFXD3D11WindowTarget() +{ + mWindow = NULL; + mBackbuffer = NULL; +} + +GFXD3D11WindowTarget::~GFXD3D11WindowTarget() +{ + SAFE_RELEASE(mBackbuffer); +} + +void GFXD3D11WindowTarget::initPresentationParams() +{ + // Get some video mode related info. + GFXVideoMode vm = mWindow->getVideoMode(); + Win32Window* win = static_cast(mWindow); + HWND hwnd = win->getHWND(); + + mPresentationParams = D3D11->setupPresentParams(vm, hwnd); +} + +const Point2I GFXD3D11WindowTarget::getSize() +{ + return mWindow->getVideoMode().resolution; +} + +GFXFormat GFXD3D11WindowTarget::getFormat() +{ + S32 format = mPresentationParams.BufferDesc.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + return (GFXFormat)format; +} + +bool GFXD3D11WindowTarget::present() +{ + return (D3D11->getSwapChain()->Present(!D3D11->smDisableVSync, 0) == S_OK); +} + +void GFXD3D11WindowTarget::setImplicitSwapChain() +{ + if (!mBackbuffer) + D3D11->mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mBackbuffer); +} + +void GFXD3D11WindowTarget::resetMode() +{ + mWindow->setSuppressReset(true); + + // Setup our presentation params. + initPresentationParams(); + + // Otherwise, we have to reset the device, if we're the implicit swapchain. + D3D11->reset(mPresentationParams); + + // Update our size, too. + mSize = Point2I(mPresentationParams.BufferDesc.Width, mPresentationParams.BufferDesc.Height); + + mWindow->setSuppressReset(false); + GFX->beginReset(); +} + +void GFXD3D11WindowTarget::zombify() +{ + SAFE_RELEASE(mBackbuffer); +} + +void GFXD3D11WindowTarget::resurrect() +{ + setImplicitSwapChain(); +} + +void GFXD3D11WindowTarget::activate() +{ + GFXDEBUGEVENT_SCOPE(GFXPCD3D11WindowTarget_activate, ColorI::RED); + + //clear ther rendertargets first + ID3D11RenderTargetView* rtViews[8] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; + + D3D11DEVICECONTEXT->OMSetRenderTargets(8, rtViews, NULL); + D3D11DEVICECONTEXT->OMSetRenderTargets(1, &D3D11->mDeviceBackBufferView, D3D11->mDeviceDepthStencilView); + + DXGI_SWAP_CHAIN_DESC pp; + D3D11->mSwapChain->GetDesc(&pp); + + // Update our video mode here, too. + GFXVideoMode vm; + vm = mWindow->getVideoMode(); + vm.resolution.x = pp.BufferDesc.Width; + vm.resolution.y = pp.BufferDesc.Height; + vm.fullScreen = !pp.Windowed; + mSize = vm.resolution; +} + +void GFXD3D11WindowTarget::resolveTo(GFXTextureObject *tex) +{ + GFXDEBUGEVENT_SCOPE(GFXPCD3D11WindowTarget_resolveTo, ColorI::RED); + + D3D11_TEXTURE2D_DESC desc; + ID3D11Texture2D* surf = ((GFXD3D11TextureObject*)(tex))->get2DTex(); + surf->GetDesc(&desc); + D3D11DEVICECONTEXT->ResolveSubresource(surf, 0, D3D11->mDeviceBackbuffer, 0, desc.Format); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Target.h b/Engine/source/gfx/D3D11/gfxD3D11Target.h new file mode 100644 index 0000000000..ff4b193d6a --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Target.h @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D_GFXD3D11TARGET_H_ +#define _GFX_D3D_GFXD3D11TARGET_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "gfx/gfxTarget.h" +#include "math/mPoint3.h" +#include "math/mPoint2.h" + +class GFXD3D11TextureTarget : public GFXTextureTarget +{ + friend class GFXD3D11Device; + + // Array of target surfaces, this is given to us by attachTexture + ID3D11Texture2D* mTargets[MaxRenderSlotId]; + + // Array of shader resource views + ID3D11ShaderResourceView* mTargetSRViews[MaxRenderSlotId]; + + //ID3D11DepthStencilView* mDepthTargetView; + ID3D11View* mTargetViews[MaxRenderSlotId]; + // Array of texture objects which correspond to the target surfaces above, + // needed for copy from RenderTarget to texture situations. Current only valid in those situations + GFXD3D11TextureObject* mResolveTargets[MaxRenderSlotId]; + + Point2I mTargetSize; + + GFXFormat mTargetFormat; + +public: + + GFXD3D11TextureTarget(); + ~GFXD3D11TextureTarget(); + + // Public interface. + virtual const Point2I getSize() { return mTargetSize; } + virtual GFXFormat getFormat() { return mTargetFormat; } + virtual void attachTexture(RenderSlot slot, GFXTextureObject *tex, U32 mipLevel=0, U32 zOffset = 0); + virtual void attachTexture(RenderSlot slot, GFXCubemap *tex, U32 face, U32 mipLevel=0); + virtual void resolve(); + + /// Note we always copy the Color0 RenderSlot. + virtual void resolveTo( GFXTextureObject *tex ); + + virtual void activate(); + virtual void deactivate(); + + void zombify(); + void resurrect(); +}; + +class GFXD3D11WindowTarget : public GFXWindowTarget +{ + friend class GFXD3D11Device; + + /// Our backbuffer + ID3D11Texture2D *mBackbuffer; + + /// Maximum size we can render to. + Point2I mSize; + + /// D3D presentation info. + DXGI_SWAP_CHAIN_DESC mPresentationParams; + + /// Internal interface that notifies us we need to reset our video mode. + void resetMode(); + +public: + + GFXD3D11WindowTarget(); + ~GFXD3D11WindowTarget(); + + virtual const Point2I getSize(); + virtual GFXFormat getFormat(); + virtual bool present(); + + void initPresentationParams(); + void setImplicitSwapChain(); + + virtual void activate(); + + void zombify(); + void resurrect(); + + virtual void resolveTo( GFXTextureObject *tex ); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp new file mode 100644 index 0000000000..ba90c40646 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp @@ -0,0 +1,587 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/bitmap/bitmapUtils.h" +#include "gfx/gfxCardProfile.h" +#include "gfx/gfxStringEnumTranslate.h" +#include "core/strings/unicode.h" +#include "core/util/swizzle.h" +#include "core/util/safeDelete.h" +#include "console/console.h" +#include "core/resourceManager.h" + +GFXD3D11TextureManager::GFXD3D11TextureManager() +{ + ZeroMemory(mCurTexSet, sizeof(mCurTexSet)); +} + +GFXD3D11TextureManager::~GFXD3D11TextureManager() +{ + // Destroy texture table now so just in case some texture objects + // are still left, we don't crash on a pure virtual method call. + SAFE_DELETE_ARRAY( mHashTable ); +} + +void GFXD3D11TextureManager::_innerCreateTexture( GFXD3D11TextureObject *retTex, + U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips, + S32 antialiasLevel) +{ + U32 usage = 0; + U32 bindFlags = 0; + U32 miscFlags = 0; + + if(!retTex->mProfile->isZTarget() && !retTex->mProfile->isSystemMemory()) + bindFlags = D3D11_BIND_SHADER_RESOURCE; + + U32 cpuFlags = 0; + + retTex->mProfile = profile; + retTex->isManaged = false; + DXGI_FORMAT d3dTextureFormat = GFXD3D11TextureFormat[format]; + + if( retTex->mProfile->isDynamic() ) + { + usage = D3D11_USAGE_DYNAMIC; + cpuFlags |= D3D11_CPU_ACCESS_WRITE; + retTex->isManaged = false; + } + else if ( retTex->mProfile->isSystemMemory() ) + { + usage |= D3D11_USAGE_STAGING; + cpuFlags |= D3D11_CPU_ACCESS_READ; + } + else + { + usage = D3D11_USAGE_DEFAULT; + retTex->isManaged = true; + } + + if( retTex->mProfile->isRenderTarget() ) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + //need to check to make sure this format supports render targets + U32 supportFlag = 0; + + D3D11DEVICE->CheckFormatSupport(d3dTextureFormat, &supportFlag); + //if it doesn't support render targets then default to R8G8B8A8 + if(!(supportFlag & D3D11_FORMAT_SUPPORT_RENDER_TARGET)) + d3dTextureFormat = DXGI_FORMAT_R8G8B8A8_UNORM; + + retTex->isManaged =false; + } + + if( retTex->mProfile->isZTarget() ) + { + bindFlags |= D3D11_BIND_DEPTH_STENCIL; + retTex->isManaged = false; + } + + if( !forceMips && !retTex->mProfile->isSystemMemory() && + numMipLevels == 0 && + !(depth > 0) ) + { + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + bindFlags |= D3D11_BIND_RENDER_TARGET; // in order to automatically generate mips. Resource needs to be a rendertarget and shader resource + } + + if( depth > 0 ) + { + D3D11_TEXTURE3D_DESC desc; + ZeroMemory(&desc, sizeof(D3D11_TEXTURE3D_DESC)); + + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + desc.Depth = depth; + desc.Width = width; + desc.Height = height; + desc.Format = d3dTextureFormat; + desc.Usage = (D3D11_USAGE)usage; + desc.MipLevels = numMipLevels; + + HRESULT hr = D3D11DEVICE->CreateTexture3D(&desc, NULL, retTex->get3DTexPtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11TextureManager::_createTexture - failed to create volume texture!"); + } + + retTex->mTextureSize.set(width, height, depth); + retTex->get3DTex()->GetDesc(&desc); + retTex->mMipLevels = numMipLevels; + retTex->mFormat = format; + } + else + { + UINT numQualityLevels = 0; + + switch (antialiasLevel) + { + case 0: + case AA_MATCH_BACKBUFFER: + antialiasLevel = 1; + break; + + default: + { + antialiasLevel = 0; + UINT numQualityLevels; + D3D11DEVICE->CheckMultisampleQualityLevels(d3dTextureFormat, antialiasLevel, &numQualityLevels); + AssertFatal(numQualityLevels, "Invalid AA level!"); + break; + } + } + + if(retTex->mProfile->isZTarget()) + { + D3D11_TEXTURE2D_DESC desc; + + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.ArraySize = 1; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + //depth stencil must be a typeless format if it is bound on render target and shader resource simultaneously + // we'll send the real format for the creation of the views + desc.Format = DXGI_FORMAT_R24G8_TYPELESS; + desc.MipLevels = numMipLevels; + desc.SampleDesc.Count = antialiasLevel; + desc.SampleDesc.Quality = numQualityLevels; + desc.Height = height; + desc.Width = width; + desc.Usage = (D3D11_USAGE)usage; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, retTex->getSurfacePtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to create Zbuffer texture"); + } + + retTex->mFormat = format; // Assigning format like this should be fine. + } + else + { + D3D11_TEXTURE2D_DESC desc; + + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.ArraySize = 1; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + desc.Format = d3dTextureFormat; + desc.MipLevels = numMipLevels; + desc.SampleDesc.Count = antialiasLevel; + desc.SampleDesc.Quality = numQualityLevels; + desc.Height = height; + desc.Width = width; + desc.Usage = (D3D11_USAGE)usage; + desc.MiscFlags = miscFlags; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, retTex->get2DTexPtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11TextureManager::_createTexture - failed to create texture!"); + } + + retTex->get2DTex()->GetDesc(&desc); + retTex->mMipLevels = desc.MipLevels; + } + + // start creating the resource views... + // don't bother creating views for system memory/staging textures + // they are just used for copying + + if (!retTex->mProfile->isSystemMemory()) + { + createResourceView(height, width, depth, d3dTextureFormat, numMipLevels, bindFlags, retTex); + } + + // Get the actual size of the texture... + D3D11_TEXTURE2D_DESC probeDesc; + ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC)); + + if( retTex->get2DTex() != NULL ) + { + retTex->get2DTex()->GetDesc(&probeDesc); + } + else if( retTex->getSurface() != NULL ) + { + retTex->getSurface()->GetDesc(&probeDesc); + } + + retTex->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0); + S32 fmt = 0; + + if(!profile->isZTarget()) + fmt = probeDesc.Format; + else + fmt = DXGI_FORMAT_D24_UNORM_S8_UINT; // we need to assign this manually. + + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, fmt ); + retTex->mFormat = (GFXFormat)fmt; + } +} + +//----------------------------------------------------------------------------- +// createTexture +//----------------------------------------------------------------------------- +GFXTextureObject *GFXD3D11TextureManager::_createTextureObject( U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips, + S32 antialiasLevel, + GFXTextureObject *inTex ) +{ + GFXD3D11TextureObject *retTex; + if ( inTex ) + { + AssertFatal(static_cast( inTex ), "GFXD3D11TextureManager::_createTexture() - Bad inTex type!"); + retTex = static_cast( inTex ); + retTex->release(); + } + else + { + retTex = new GFXD3D11TextureObject(GFX, profile); + retTex->registerResourceWithDevice(GFX); + } + + _innerCreateTexture(retTex, height, width, depth, format, profile, numMipLevels, forceMips, antialiasLevel); + + return retTex; +} + +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTexture); + + GFXD3D11TextureObject *texture = static_cast(aTexture); + + // Check with profiler to see if we can do automatic mipmap generation. + const bool supportsAutoMips = GFX->getCardProfiler()->queryProfile("autoMipMapLevel", true); + + // Helper bool + const bool isCompressedTexFmt = aTexture->mFormat >= GFXFormatDXT1 && aTexture->mFormat <= GFXFormatDXT5; + + // Settings for mipmap generation + U32 maxDownloadMip = pDL->getNumMipLevels(); + U32 nbMipMapLevel = pDL->getNumMipLevels(); + + if( supportsAutoMips && !isCompressedTexFmt ) + { + maxDownloadMip = 1; + nbMipMapLevel = aTexture->mMipLevels; + } + GFXD3D11Device* dev = D3D11; + + bool isDynamic = texture->mProfile->isDynamic(); + // Fill the texture... + for( U32 i = 0; i < maxDownloadMip; i++ ) + { + U32 subResource = D3D11CalcSubresource(i, 0, aTexture->mMipLevels); + + if(!isDynamic) + { + U8* copyBuffer = NULL; + + switch(texture->mFormat) + { + case GFXFormatR8G8B8: + { + PROFILE_SCOPE(Swizzle24_Upload); + AssertFatal(pDL->getFormat() == GFXFormatR8G8B8, "Assumption failed"); + + U8* Bits = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + dMemcpy(Bits, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * 3); + bitmapConvertRGB_to_RGBX(&Bits, pDL->getWidth(i) * pDL->getHeight(i)); + copyBuffer = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + + dev->getDeviceSwizzle32()->ToBuffer(copyBuffer, Bits, pDL->getWidth(i) * pDL->getHeight(i) * 4); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, copyBuffer, pDL->getWidth() * 4, pDL->getHeight() *4); + SAFE_DELETE_ARRAY(Bits); + break; + } + + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + { + PROFILE_SCOPE(Swizzle32_Upload); + copyBuffer = new U8[pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()]; + dev->getDeviceSwizzle32()->ToBuffer(copyBuffer, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, copyBuffer, pDL->getWidth() * pDL->getBytesPerPixel(), pDL->getHeight() *pDL->getBytesPerPixel()); + break; + } + + default: + { + // Just copy the bits in no swizzle or padding + PROFILE_SCOPE(SwizzleNull_Upload); + AssertFatal( pDL->getFormat() == texture->mFormat, "Format mismatch"); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, pDL->getBits(i), pDL->getWidth() *pDL->getBytesPerPixel(), pDL->getHeight() *pDL->getBytesPerPixel()); + } + } + + SAFE_DELETE_ARRAY(copyBuffer); + } + + else + { + D3D11_MAPPED_SUBRESOURCE mapping; + HRESULT res = dev->getDeviceContext()->Map(texture->get2DTex(), subResource, D3D11_MAP_WRITE, 0, &mapping); + + AssertFatal(res, "tex2d map call failure"); + + switch( texture->mFormat ) + { + case GFXFormatR8G8B8: + { + PROFILE_SCOPE(Swizzle24_Upload); + AssertFatal(pDL->getFormat() == GFXFormatR8G8B8, "Assumption failed"); + + U8* Bits = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + dMemcpy(Bits, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * 3); + bitmapConvertRGB_to_RGBX(&Bits, pDL->getWidth(i) * pDL->getHeight(i)); + + dev->getDeviceSwizzle32()->ToBuffer(mapping.pData, Bits, pDL->getWidth(i) * pDL->getHeight(i) * 4); + SAFE_DELETE_ARRAY(Bits); + } + break; + + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + { + PROFILE_SCOPE(Swizzle32_Upload); + dev->getDeviceSwizzle32()->ToBuffer(mapping.pData, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + } + break; + + default: + { + // Just copy the bits in no swizzle or padding + PROFILE_SCOPE(SwizzleNull_Upload); + AssertFatal( pDL->getFormat() == texture->mFormat, "Format mismatch"); + dMemcpy(mapping.pData, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + } + } + + dev->getDeviceContext()->Unmap(texture->get2DTex(), subResource); + } + } + + D3D11_TEXTURE2D_DESC desc; + // if the texture asked for mip generation. lets generate it. + texture->get2DTex()->GetDesc(&desc); + if (desc.MiscFlags &D3D11_RESOURCE_MISC_GENERATE_MIPS) + { + dev->getDeviceContext()->GenerateMips(texture->getSRView()); + //texture->mMipLevels = desc.MipLevels; + } + + return true; +} + +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *inTex, void *raw) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTextureRaw); + + GFXD3D11TextureObject *texture = (GFXD3D11TextureObject *) inTex; + GFXD3D11Device* dev = static_cast(GFX); + // currently only for volume textures... + if(texture->getDepth() < 1) return false; + + U8* Bits = NULL; + + if(texture->mFormat == GFXFormatR8G8B8) + { + // convert 24 bit to 32 bit + Bits = new U8[texture->getWidth() * texture->getHeight() * texture->getDepth() * 4]; + dMemcpy(Bits, raw, texture->getWidth() * texture->getHeight() * texture->getDepth() * 3); + bitmapConvertRGB_to_RGBX(&Bits, texture->getWidth() * texture->getHeight() * texture->getDepth()); + } + + U32 bytesPerPix = 1; + + switch(texture->mFormat) + { + case GFXFormatR8G8B8: + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + bytesPerPix = 4; + break; + } + + D3D11_BOX box; + box.left = 0; + box.right = texture->getWidth(); + box.front = 0; + box.back = texture->getDepth(); + box.top = 0; + box.bottom = texture->getHeight(); + + if(texture->mFormat == GFXFormatR8G8B8) // converted format also for volume textures + dev->getDeviceContext()->UpdateSubresource(texture->get3DTex(), 0, &box, Bits, texture->getWidth() * bytesPerPix, texture->getHeight() * bytesPerPix); + else + dev->getDeviceContext()->UpdateSubresource(texture->get3DTex(), 0, &box, raw, texture->getWidth() * bytesPerPix, texture->getHeight() * bytesPerPix); + + SAFE_DELETE_ARRAY(Bits); + + return true; +} + +bool GFXD3D11TextureManager::_refreshTexture(GFXTextureObject *texture) +{ + U32 usedStrategies = 0; + GFXD3D11TextureObject *realTex = static_cast(texture); + + if(texture->mProfile->doStoreBitmap()) + { + if(texture->mBitmap) + _loadTexture(texture, texture->mBitmap); + + if(texture->mDDS) + _loadTexture(texture, texture->mDDS); + + usedStrategies++; + } + + if(texture->mProfile->isRenderTarget() || texture->mProfile->isDynamic() || texture->mProfile->isZTarget()) + { + realTex->release(); + _innerCreateTexture(realTex, texture->getHeight(), texture->getWidth(), texture->getDepth(), texture->mFormat, texture->mProfile, texture->mMipLevels, false, texture->mAntialiasLevel); + usedStrategies++; + } + + AssertFatal(usedStrategies < 2, "GFXD3D11TextureManager::_refreshTexture - Inconsistent profile flags!"); + + return true; +} + +bool GFXD3D11TextureManager::_freeTexture(GFXTextureObject *texture, bool zombify) +{ + AssertFatal(dynamic_cast(texture),"Not an actual d3d texture object!"); + GFXD3D11TextureObject *tex = static_cast( texture ); + + // If it's a managed texture and we're zombifying, don't blast it, D3D allows + // us to keep it. + if(zombify && tex->isManaged) + return true; + + tex->release(); + + return true; +} + +/// Load a texture from a proper DDSFile instance. +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTextureDDS); + + GFXD3D11TextureObject *texture = static_cast(aTexture); + GFXD3D11Device* dev = static_cast(GFX); + // Fill the texture... + for( U32 i = 0; i < aTexture->mMipLevels; i++ ) + { + PROFILE_SCOPE(GFXD3DTexMan_loadSurface); + + AssertFatal( dds->mSurfaces.size() > 0, "Assumption failed. DDSFile has no surfaces." ); + + U32 subresource = D3D11CalcSubresource(i, 0, aTexture->mMipLevels); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subresource, 0, dds->mSurfaces[0]->mMips[i], dds->getSurfacePitch(i), 0); + } + + D3D11_TEXTURE2D_DESC desc; + // if the texture asked for mip generation. lets generate it. + texture->get2DTex()->GetDesc(&desc); + if (desc.MiscFlags & D3D11_RESOURCE_MISC_GENERATE_MIPS) + dev->getDeviceContext()->GenerateMips(texture->getSRView()); + + return true; +} + +void GFXD3D11TextureManager::createResourceView(U32 height, U32 width, U32 depth, DXGI_FORMAT format, U32 numMipLevels,U32 usageFlags, GFXTextureObject *inTex) +{ + GFXD3D11TextureObject *tex = static_cast(inTex); + ID3D11Resource* resource = NULL; + + if(tex->get2DTex()) + resource = tex->get2DTex(); + else if(tex->getSurface()) + resource = tex->getSurface(); + else + resource = tex->get3DTex(); + + HRESULT hr; + //TODO: add MSAA support later. + if(usageFlags & D3D11_BIND_SHADER_RESOURCE) + { + D3D11_SHADER_RESOURCE_VIEW_DESC desc; + + if(usageFlags & D3D11_BIND_DEPTH_STENCIL) + desc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; // reads the depth + else + desc.Format = format; + + if(depth > 0) + { + desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; + desc.Texture3D.MipLevels = -1; + desc.Texture3D.MostDetailedMip = 0; + } + else + { + desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipLevels = -1; + desc.Texture2D.MostDetailedMip = 0; + } + + hr = D3D11DEVICE->CreateShaderResourceView(resource,&desc, tex->getSRViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateShaderResourceView:: failed to create view!"); + } + + if(usageFlags & D3D11_BIND_RENDER_TARGET) + { + D3D11_RENDER_TARGET_VIEW_DESC desc; + desc.Format = format; + desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = 0; + hr = D3D11DEVICE->CreateRenderTargetView(resource, &desc, tex->getRTViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateRenderTargetView:: failed to create view!"); + } + + if(usageFlags & D3D11_BIND_DEPTH_STENCIL) + { + D3D11_DEPTH_STENCIL_VIEW_DESC desc; + desc.Format = format; + desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = 0; + desc.Flags = 0; + hr = D3D11DEVICE->CreateDepthStencilView(resource,&desc, tex->getDSViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateDepthStencilView:: failed to create view!"); + } +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h new file mode 100644 index 0000000000..fa32941d8c --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3DTEXTUREMANAGER_H_ +#define _GFXD3DTEXTUREMANAGER_H_ + +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "core/util/safeRelease.h" + +class GFXD3D11TextureManager : public GFXTextureManager +{ + friend class GFXD3D11TextureObject; + +public: + GFXD3D11TextureManager(); + virtual ~GFXD3D11TextureManager(); + void createResourceView(U32 height, U32 width, U32 depth, DXGI_FORMAT format, U32 numMipLevels,U32 usageFlags, GFXTextureObject *inTex); +protected: + + // GFXTextureManager + GFXTextureObject *_createTextureObject( U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips = false, + S32 antialiasLevel = 0, + GFXTextureObject *inTex = NULL ); + + bool _loadTexture(GFXTextureObject *texture, DDSFile *dds); + bool _loadTexture(GFXTextureObject *texture, GBitmap *bmp); + bool _loadTexture(GFXTextureObject *texture, void *raw); + bool _refreshTexture(GFXTextureObject *texture); + bool _freeTexture(GFXTextureObject *texture, bool zombify = false); + +private: + U32 mCurTexSet[TEXTURE_STAGE_COUNT]; + + void _innerCreateTexture(GFXD3D11TextureObject *obj, U32 height, U32 width, U32 depth, GFXFormat format, GFXTextureProfile *profile, U32 numMipLevels, bool forceMips = false, S32 antialiasLevel = 0); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp new file mode 100644 index 0000000000..8f15cf550f --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp @@ -0,0 +1,280 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "platform/profiler.h" +#include "console/console.h" + +#ifdef TORQUE_DEBUG +U32 GFXD3D11TextureObject::mTexCount = 0; +#endif + + +// GFXFormatR8G8B8 has now the same behaviour as GFXFormatR8G8B8X8. +// This is because 24 bit format are now deprecated by microsoft, for data alignment reason there's no changes beetween 24 and 32 bit formats. +// DirectX 10-11 both have 24 bit format no longer. + + +GFXD3D11TextureObject::GFXD3D11TextureObject( GFXDevice * d, GFXTextureProfile *profile) : GFXTextureObject( d, profile ) +{ +#ifdef D3D11_DEBUG_SPEW + mTexCount++; + Con::printf("+ texMake %d %x", mTexCount, this); +#endif + + mD3DTexture = NULL; + mLocked = false; + + mD3DSurface = NULL; + mLockedSubresource = 0; + mDSView = NULL; + mRTView = NULL; + mSRView = NULL; +} + +GFXD3D11TextureObject::~GFXD3D11TextureObject() +{ + kill(); +#ifdef D3D11_DEBUG_SPEW + mTexCount--; + Con::printf("+ texkill %d %x", mTexCount, this); +#endif +} + +GFXLockedRect *GFXD3D11TextureObject::lock(U32 mipLevel /*= 0*/, RectI *inRect /*= NULL*/) +{ + AssertFatal( !mLocked, "GFXD3D11TextureObject::lock - The texture is already locked!" ); + + D3D11_MAPPED_SUBRESOURCE mapInfo; + + if( mProfile->isRenderTarget() ) + { + //AssertFatal( 0, "GFXD3D11TextureObject::lock - Need to handle mapping render targets" ); + if( !mLockTex || + mLockTex->getWidth() != getWidth() || + mLockTex->getHeight() != getHeight() ) + { + mLockTex.set( getWidth(), getHeight(), mFormat, &GFXSystemMemProfile, avar("%s() - mLockTex (line %d)", __FUNCTION__, __LINE__) ); + } + + PROFILE_START(GFXD3D11TextureObject_lockRT); + + GFXD3D11Device* dev = D3D11; + + GFXD3D11TextureObject* to = (GFXD3D11TextureObject*) &(*mLockTex); + dev->getDeviceContext()->CopyResource(to->get2DTex(), mD3DTexture); + + mLockedSubresource = D3D11CalcSubresource(0, 0, 1); + HRESULT hr = dev->getDeviceContext()->Map(to->get2DTex(), mLockedSubresource, D3D11_MAP_READ, 0, &mapInfo); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11TextureObject:lock- failed to map render target resource!"); + + mLocked = true; + + + PROFILE_END(); + } + else + { + RECT r; + + if(inRect) + { + r.top = inRect->point.y; + r.left = inRect->point.x; + r.bottom = inRect->point.y + inRect->extent.y; + r.right = inRect->point.x + inRect->extent.x; + } + + mLockedSubresource = D3D11CalcSubresource(mipLevel, 0, getMipLevels()); + HRESULT hr = D3D11DEVICECONTEXT->Map(mD3DTexture, mLockedSubresource, D3D11_MAP_WRITE_DISCARD, 0, &mapInfo); + + if ( FAILED(hr) ) + AssertFatal(false, "GFXD3D11TextureObject::lock - Failed to map subresource."); + + mLocked = true; + + } + + mLockRect.pBits = static_cast(mapInfo.pData); + mLockRect.Pitch = mapInfo.RowPitch; + + return (GFXLockedRect*)&mLockRect; +} + +void GFXD3D11TextureObject::unlock(U32 mipLevel) +{ + AssertFatal( mLocked, "GFXD3D11TextureObject::unlock - Attempting to unlock a surface that has not been locked" ); + + if( mProfile->isRenderTarget() ) + { + //AssertFatal( 0, "GFXD3D11TextureObject::unlock - Need to handle mapping render targets" ); + GFXD3D11TextureObject* to = (GFXD3D11TextureObject*)&(*mLockTex); + + D3D11->getDeviceContext()->Unmap(to->get2DTex(), mLockedSubresource); + + mLockedSubresource = 0; + mLocked = false; + } + else + { + D3D11DEVICECONTEXT->Unmap(get2DTex(), mLockedSubresource); + mLockedSubresource = 0; + mLocked = false; + } +} + +void GFXD3D11TextureObject::release() +{ + SAFE_RELEASE(mSRView); + SAFE_RELEASE(mRTView); + SAFE_RELEASE(mDSView); + SAFE_RELEASE(mD3DTexture); + SAFE_RELEASE(mD3DSurface); +} + +void GFXD3D11TextureObject::zombify() +{ + // Managed textures are managed by D3D + AssertFatal(!mLocked, "GFXD3D11TextureObject::zombify - Cannot zombify a locked texture!"); + if(isManaged) + return; + release(); +} + +void GFXD3D11TextureObject::resurrect() +{ + // Managed textures are managed by D3D + if(isManaged) + return; + + static_cast(TEXMGR)->refreshTexture(this); +} + +bool GFXD3D11TextureObject::copyToBmp(GBitmap* bmp) +{ + if (!bmp) + return false; + + // check format limitations + // at the moment we only support RGBA for the source (other 4 byte formats should + // be easy to add though) + AssertFatal(mFormat == GFXFormatR8G8B8A8, "copyToBmp: invalid format"); + if (mFormat != GFXFormatR8G8B8A8) + return false; + + PROFILE_START(GFXD3D11TextureObject_copyToBmp); + + AssertFatal(bmp->getWidth() == getWidth(), "doh"); + AssertFatal(bmp->getHeight() == getHeight(), "doh"); + U32 width = getWidth(); + U32 height = getHeight(); + + bmp->setHasTransparency(mHasTransparency); + + // set some constants + const U32 sourceBytesPerPixel = 4; + U32 destBytesPerPixel = 0; + + if(bmp->getFormat() == GFXFormatR8G8B8A8) + destBytesPerPixel = 4; + else if(bmp->getFormat() == GFXFormatR8G8B8) + destBytesPerPixel = 3; + else + // unsupported + AssertFatal(false, "unsupported bitmap format"); + + + // lock the texture + DXGI_MAPPED_RECT* lockRect = (DXGI_MAPPED_RECT*) lock(); + + // set pointers + U8* srcPtr = (U8*)lockRect->pBits; + U8* destPtr = bmp->getWritableBits(); + + // we will want to skip over any D3D cache data in the source texture + const S32 sourceCacheSize = lockRect->Pitch - width * sourceBytesPerPixel; + AssertFatal(sourceCacheSize >= 0, "copyToBmp: cache size is less than zero?"); + + PROFILE_START(GFXD3D11TextureObject_copyToBmp_pixCopy); + // copy data into bitmap + for (U32 row = 0; row < height; ++row) + { + for (U32 col = 0; col < width; ++col) + { + destPtr[0] = srcPtr[2]; // red + destPtr[1] = srcPtr[1]; // green + destPtr[2] = srcPtr[0]; // blue + if (destBytesPerPixel == 4) + destPtr[3] = srcPtr[3]; // alpha + + // go to next pixel in src + srcPtr += sourceBytesPerPixel; + + // go to next pixel in dest + destPtr += destBytesPerPixel; + } + // skip past the cache data for this row (if any) + srcPtr += sourceCacheSize; + } + PROFILE_END(); + + // assert if we stomped or underran memory + AssertFatal(U32(destPtr - bmp->getWritableBits()) == width * height * destBytesPerPixel, "copyToBmp: doh, memory error"); + AssertFatal(U32(srcPtr - (U8*)lockRect->pBits) == height * lockRect->Pitch, "copyToBmp: doh, memory error"); + + // unlock + unlock(); + + PROFILE_END(); + + return true; +} + +ID3D11ShaderResourceView* GFXD3D11TextureObject::getSRView() +{ + return mSRView; +} +ID3D11RenderTargetView* GFXD3D11TextureObject::getRTView() +{ + return mRTView; +} +ID3D11DepthStencilView* GFXD3D11TextureObject::getDSView() +{ + return mDSView; +} + +ID3D11ShaderResourceView** GFXD3D11TextureObject::getSRViewPtr() +{ + return &mSRView; +} +ID3D11RenderTargetView** GFXD3D11TextureObject::getRTViewPtr() +{ + return &mRTView; +} + +ID3D11DepthStencilView** GFXD3D11TextureObject::getDSViewPtr() +{ + return &mDSView; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h new file mode 100644 index 0000000000..b50cc24655 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11TEXTUREOBJECT_H_ +#define _GFXD3D11TEXTUREOBJECT_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxTextureHandle.h" +#include "gfx/gfxTextureManager.h" + +class GFXD3D11TextureObject : public GFXTextureObject +{ +protected: + static U32 mTexCount; + GFXTexHandle mLockTex; + DXGI_MAPPED_RECT mLockRect; + bool mLocked; + + U32 mLockedSubresource; + ID3D11Resource *mD3DTexture; + + // used for z buffers... + ID3D11Texture2D *mD3DSurface; + + ID3D11ShaderResourceView* mSRView; // for shader resource input + ID3D11RenderTargetView* mRTView; // for render targets + ID3D11DepthStencilView* mDSView; //render target view for depth stencil + +public: + + GFXD3D11TextureObject( GFXDevice * d, GFXTextureProfile *profile); + ~GFXD3D11TextureObject(); + + ID3D11Resource* getResource(){ return mD3DTexture; } + ID3D11Texture2D* get2DTex(){ return (ID3D11Texture2D*) mD3DTexture; } + ID3D11Texture2D** get2DTexPtr(){ return (ID3D11Texture2D**) &mD3DTexture; } + ID3D11Texture3D* get3DTex(){ return (ID3D11Texture3D*) mD3DTexture; } + ID3D11Texture3D** get3DTexPtr(){ return (ID3D11Texture3D**) &mD3DTexture; } + + ID3D11ShaderResourceView* getSRView(); + ID3D11RenderTargetView* getRTView(); + ID3D11DepthStencilView* getDSView(); + + ID3D11ShaderResourceView** getSRViewPtr(); + ID3D11RenderTargetView** getRTViewPtr(); + ID3D11DepthStencilView** getDSViewPtr(); + + + void release(); + + bool isManaged; //setting to true tells this texture not to be released from being zombify + + virtual GFXLockedRect * lock(U32 mipLevel = 0, RectI *inRect = NULL); + virtual void unlock(U32 mipLevel = 0 ); + + virtual bool copyToBmp(GBitmap* bmp); + ID3D11Texture2D* getSurface() {return mD3DSurface;} + ID3D11Texture2D** getSurfacePtr() {return &mD3DSurface;} + + // GFXResource + void zombify(); + void resurrect(); + +#ifdef TORQUE_DEBUG + virtual void pureVirtualCrash() {}; +#endif +}; + + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp new file mode 100644 index 0000000000..1a8729e76e --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp @@ -0,0 +1,233 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gfx/D3D11/gfxD3D11VertexBuffer.h" +#include "console/console.h" + +GFXD3D11VertexBuffer::~GFXD3D11VertexBuffer() +{ + if(getOwningDevice() != NULL) + { + if(mBufferType != GFXBufferTypeVolatile) + { + SAFE_RELEASE(vb); + } + } +} + +void GFXD3D11VertexBuffer::lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr) +{ + PROFILE_SCOPE(GFXD3D11VertexBuffer_lock); + + AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "Cannot lock a buffer more than once!"); + + D3D11_MAP flags = D3D11_MAP_WRITE_DISCARD; + + switch(mBufferType) + { + case GFXBufferTypeStatic: + case GFXBufferTypeDynamic: + flags = D3D11_MAP_WRITE_DISCARD; + break; + + case GFXBufferTypeVolatile: + + // Get or create the volatile buffer... + mVolatileBuffer = D3D11->findVBPool( &mVertexFormat, vertexEnd ); + + if( !mVolatileBuffer ) + mVolatileBuffer = D3D11->createVBPool( &mVertexFormat, mVertexSize ); + + vb = mVolatileBuffer->vb; + + // Get our range now... + AssertFatal(vertexStart == 0, "Cannot get a subrange on a volatile buffer."); + AssertFatal(vertexEnd <= MAX_DYNAMIC_VERTS, "Cannot get more than MAX_DYNAMIC_VERTS in a volatile buffer. Up the constant!"); + AssertFatal(mVolatileBuffer->lockedVertexStart == 0 && mVolatileBuffer->lockedVertexEnd == 0, "Got more than one lock on the volatile pool."); + + // We created the pool when we requested this volatile buffer, so assume it exists... + if( mVolatileBuffer->mNumVerts + vertexEnd > MAX_DYNAMIC_VERTS ) + { + flags = D3D11_MAP_WRITE_DISCARD; + mVolatileStart = vertexStart = 0; + vertexEnd = vertexEnd; + } + else + { + flags = D3D11_MAP_WRITE_NO_OVERWRITE; + mVolatileStart = vertexStart = mVolatileBuffer->mNumVerts; + vertexEnd += mVolatileBuffer->mNumVerts; + } + + mVolatileBuffer->mNumVerts = vertexEnd+1; + + mVolatileBuffer->lockedVertexStart = vertexStart; + mVolatileBuffer->lockedVertexEnd = vertexEnd; + break; + } + + lockedVertexStart = vertexStart; + lockedVertexEnd = vertexEnd; + + // uncomment it for debugging purpose. called many times per frame... spammy! + //Con::printf("%x: Locking %s range (%d, %d)", this, (mBufferType == GFXBufferTypeVolatile ? "volatile" : "static"), lockedVertexStart, lockedVertexEnd); + + U32 sizeToLock = (vertexEnd - vertexStart) * mVertexSize; + if(mBufferType == GFXBufferTypeStatic) + { + *vertexPtr = new U8[sizeToLock]; + mLockedBuffer = *vertexPtr; + } + else + { + D3D11_MAPPED_SUBRESOURCE pVertexData; + ZeroMemory(&pVertexData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + HRESULT hr = D3D11DEVICECONTEXT->Map(vb, 0, flags, 0, &pVertexData); + + if(FAILED(hr)) + { + AssertFatal(false, "Unable to lock vertex buffer."); + } + + *vertexPtr = (U8*)pVertexData.pData + (vertexStart * mVertexSize); + } + + + + #ifdef TORQUE_DEBUG + + // Allocate a debug buffer large enough for the lock + // plus space for over and under run guard strings. + const U32 guardSize = sizeof( _VBGuardString ); + mDebugGuardBuffer = new U8[sizeToLock+(guardSize*2)]; + + // Setup the guard strings. + dMemcpy( mDebugGuardBuffer, _VBGuardString, guardSize ); + dMemcpy( mDebugGuardBuffer + sizeToLock + guardSize, _VBGuardString, guardSize ); + + // Store the real lock pointer and return our debug pointer. + mLockedBuffer = *vertexPtr; + *vertexPtr = mDebugGuardBuffer + guardSize; + + #endif // TORQUE_DEBUG +} + +void GFXD3D11VertexBuffer::unlock() +{ + PROFILE_SCOPE(GFXD3D11VertexBuffer_unlock); + + #ifdef TORQUE_DEBUG + + if ( mDebugGuardBuffer ) + { + const U32 guardSize = sizeof( _VBGuardString ); + const U32 sizeLocked = (lockedVertexEnd - lockedVertexStart) * mVertexSize; + + // First check the guard areas for overwrites. + AssertFatal(dMemcmp( mDebugGuardBuffer, _VBGuardString, guardSize) == 0, + "GFXD3D11VertexBuffer::unlock - Caught lock memory underrun!" ); + AssertFatal(dMemcmp( mDebugGuardBuffer + sizeLocked + guardSize, _VBGuardString, guardSize) == 0, + "GFXD3D11VertexBuffer::unlock - Caught lock memory overrun!" ); + + // Copy the debug content down to the real VB. + dMemcpy(mLockedBuffer, mDebugGuardBuffer + guardSize, sizeLocked); + + // Cleanup. + delete [] mDebugGuardBuffer; + mDebugGuardBuffer = NULL; + //mLockedBuffer = NULL; + } + + #endif // TORQUE_DEBUG + + if(mBufferType == GFXBufferTypeStatic) + { + const U32 sizeLocked = (lockedVertexEnd - lockedVertexStart) * mVertexSize; + //set up the update region of the buffer + D3D11_BOX box; + box.back = 1; + box.front = 0; + box.top = 0; + box.bottom = 1; + box.left = lockedVertexStart * mVertexSize; + box.right = lockedVertexEnd * mVertexSize; + //update the real vb buffer + D3D11DEVICECONTEXT->UpdateSubresource(vb, 0, &box,mLockedBuffer,sizeLocked, 0); + //clean up the old buffer + delete[] mLockedBuffer; + mLockedBuffer = NULL; + } + else + { + D3D11DEVICECONTEXT->Unmap(vb,0); + } + + + mIsFirstLock = false; + + //uncomment it for debugging purpose. called many times per frame... spammy! + //Con::printf("%x: Unlocking %s range (%d, %d)", this, (mBufferType == GFXBufferTypeVolatile ? "volatile" : "static"), lockedVertexStart, lockedVertexEnd); + + lockedVertexEnd = lockedVertexStart = 0; + + if(mVolatileBuffer.isValid()) + { + mVolatileBuffer->lockedVertexStart = 0; + mVolatileBuffer->lockedVertexEnd = 0; + mVolatileBuffer = NULL; + } +} + +void GFXD3D11VertexBuffer::zombify() +{ + AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "GFXD3D11VertexBuffer::zombify - Cannot zombify a locked buffer!"); + // Static buffers are managed by D3D11 so we don't deal with them. + if(mBufferType == GFXBufferTypeDynamic) + { + SAFE_RELEASE(vb); + } +} + +void GFXD3D11VertexBuffer::resurrect() +{ + // Static buffers are managed by D3D11 so we don't deal with them. + if(mBufferType == GFXBufferTypeDynamic) + { + D3D11_BUFFER_DESC desc; + desc.ByteWidth = mVertexSize * mNumVerts; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &vb); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11VertexBuffer::resurrect - Failed to allocate VB"); + } + } +} + diff --git a/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h new file mode 100644 index 0000000000..380a0f93bd --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D_VERTEXBUFFER_H_ +#define _GFXD3D_VERTEXBUFFER_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "core/util/safeDelete.h" + +class GFXD3D11VertexBuffer : public GFXVertexBuffer +{ +public: + ID3D11Buffer *vb; + StrongRefPtr mVolatileBuffer; + void *mLockedBuffer; +#ifdef TORQUE_DEBUG + #define _VBGuardString "GFX_VERTEX_BUFFER_GUARD_STRING" + U8 *mDebugGuardBuffer; + +#endif TORQUE_DEBUG + + bool mIsFirstLock; + bool mClearAtFrameEnd; + + GFXD3D11VertexBuffer(); + GFXD3D11VertexBuffer( GFXDevice *device, + U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertexSize, + GFXBufferType bufferType ); + virtual ~GFXD3D11VertexBuffer(); + + void lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr); + void unlock(); + void prepare() {} + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); +}; + +//----------------------------------------------------------------------------- +// This is for debugging vertex buffers and trying to track down which vbs +// aren't getting free'd + +inline GFXD3D11VertexBuffer::GFXD3D11VertexBuffer() : GFXVertexBuffer(0,0,0,0,(GFXBufferType)0) +{ + vb = NULL; + mIsFirstLock = true; + lockedVertexEnd = lockedVertexStart = 0; + mClearAtFrameEnd = false; + +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; + mLockedBuffer = NULL; +#endif +} + +inline GFXD3D11VertexBuffer::GFXD3D11VertexBuffer( GFXDevice *device, + U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertexSize, + GFXBufferType bufferType ) + : GFXVertexBuffer( device, numVerts, vertexFormat, vertexSize, bufferType ) +{ + vb = NULL; + mIsFirstLock = true; + mClearAtFrameEnd = false; + lockedVertexEnd = lockedVertexStart = 0; + mLockedBuffer = NULL; +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; +#endif +} + +#endif // _GFXD3D_VERTEXBUFFER_H_ \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/screenshotD3D11.cpp b/Engine/source/gfx/D3D11/screenshotD3D11.cpp new file mode 100644 index 0000000000..264c8b5fe0 --- /dev/null +++ b/Engine/source/gfx/D3D11/screenshotD3D11.cpp @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2016 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gfx/D3D11/screenshotD3D11.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +//Note if MSAA is ever enabled this will need fixing +GBitmap* ScreenShotD3D11::_captureBackBuffer() +{ + ID3D11Texture2D* backBuf = D3D11->getBackBufferTexture(); + D3D11_TEXTURE2D_DESC desc; + backBuf->GetDesc(&desc); + desc.BindFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.Usage = D3D11_USAGE_STAGING; + + //create temp texure + ID3D11Texture2D* pNewTexture = NULL; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &pNewTexture); + if (FAILED(hr)) + return NULL; + + U32 width = desc.Width; + U32 height = desc.Height; + // pixel data + U8 *pData = new U8[width * height * 4]; + + D3D11DEVICECONTEXT->CopyResource(pNewTexture, backBuf); + D3D11_MAPPED_SUBRESOURCE Resource; + + hr = D3D11DEVICECONTEXT->Map(pNewTexture, 0, D3D11_MAP_READ, 0, &Resource); + if (FAILED(hr)) + { + //cleanup + SAFE_DELETE_ARRAY(pData); + SAFE_RELEASE(pNewTexture); + return NULL; + } + + const U32 pitch = width << 2; + const U8* pSource = (U8*)Resource.pData; + U32 totalPitch = 0; + for (U32 i = 0; i < height; ++i) + { + dMemcpy(pData, pSource, width * 4); + pSource += Resource.RowPitch; + pData += pitch; + totalPitch += pitch; + } + + D3D11DEVICECONTEXT->Unmap(pNewTexture, 0); + pData -= totalPitch; + GBitmap *gb = new GBitmap(width, height); + + //Set GBitmap data and convert from bgr to rgb + ColorI c; + for (S32 i = 0; isetColor(j, i, c); + } + } + + //cleanup + SAFE_DELETE_ARRAY(pData); + SAFE_RELEASE(pNewTexture); + + + return gb; + +} + diff --git a/Engine/source/gfx/D3D11/screenshotD3D11.h b/Engine/source/gfx/D3D11/screenshotD3D11.h new file mode 100644 index 0000000000..1a3de23b73 --- /dev/null +++ b/Engine/source/gfx/D3D11/screenshotD3D11.h @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2016 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _SCREENSHOTD3D11_H_ +#define _SCREENSHOTD3D11_H_ + +#include "gfx/screenshot.h" + +//************************************************************************** +// D3D implementation of screenshot +//************************************************************************** +class ScreenShotD3D11 : public ScreenShot +{ +protected: + + GBitmap* _captureBackBuffer(); + +}; + + +#endif // _SCREENSHOTD3D11_H_ diff --git a/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp b/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp index 988e3a4e22..c6b1696140 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp @@ -87,9 +87,11 @@ void GFXD3D9CardProfiler::setupCardCapabilities() bool canDoFourStageDetailBlend = ( caps.TextureOpCaps & D3DTEXOPCAPS_SUBTRACT ) && ( caps.PrimitiveMiscCaps & D3DPMISCCAPS_TSSARGTEMP ) && ( caps.MaxTextureBlendStages > 3 ); + bool canDoIndependentMrtBitDepth = (caps.PrimitiveMiscCaps & D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS ? 1 : 0 ); setCapability( "lerpDetailBlend", canDoLERPDetailBlend ); setCapability( "fourStageDetailBlend", canDoFourStageDetailBlend ); + setCapability( "independentMrtBitDepth", canDoIndependentMrtBitDepth); } bool GFXD3D9CardProfiler::_queryCardCap(const String &query, U32 &foundResult) diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp index 2ad550064c..6c09beedd5 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp @@ -33,6 +33,7 @@ #include "gfx/D3D9/gfxD3D9OcclusionQuery.h" #include "gfx/D3D9/gfxD3D9Shader.h" #include "windowManager/platformWindow.h" +#include "materials/shaderData.h" #ifndef TORQUE_OS_XENON # include "windowManager/win32/win32Window.h" #endif @@ -83,6 +84,9 @@ GFXD3D9Device::GFXD3D9Device( LPDIRECT3D9 d3d, U32 index ) mOcclusionQuerySupported = false; + for (U32 i = 0; i < GS_COUNT; ++i) + mModelViewProjSC[i] = NULL; + // Set up the Enum translation tables GFXD3D9EnumTranslate::init(); @@ -139,40 +143,65 @@ GFXD3D9Device::~GFXD3D9Device() } //------------------------------------------------------------------------------ -// setupGenericShaders - This function is totally not needed on PC because there -// is fixed-function support in D3D9 +// setupGenericShaders //------------------------------------------------------------------------------ inline void GFXD3D9Device::setupGenericShaders( GenericShaderType type /* = GSColor */ ) { -#ifdef WANT_TO_SIMULATE_UI_ON_360 - if( mGenericShader[GSColor] == NULL ) - { - mGenericShader[GSColor] = createShader( "shaders/common/genericColorV.hlsl", - "shaders/common/genericColorP.hlsl", - 2.f ); + AssertFatal(type != GSTargetRestore, ""); //not used - mGenericShader[GSModColorTexture] = createShader( "shaders/common/genericModColorTextureV.hlsl", - "shaders/common/genericModColorTextureP.hlsl", - 2.f ); - - mGenericShader[GSAddColorTexture] = createShader( "shaders/common/genericAddColorTextureV.hlsl", - "shaders/common/genericAddColorTextureP.hlsl", - 2.f ); + if (mGenericShader[GSColor] == NULL) + { + ShaderData *shaderData; + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/colorP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSColor] = shaderData->getShader(); + mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/modColorTextureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSModColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/addColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/addColorTextureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSAddColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/textureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/textureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); + mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + //Force an update + mViewportDirty = true; } - mGenericShader[type]->process(); + MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; + mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix); - MatrixF world, view, proj; - mWorldMatrix[mWorldStackSize].transposeTo( world ); - mViewMatrix.transposeTo( view ); - mProjectionMatrix.transposeTo( proj ); - - mTempMatrix = world * view * proj; - - setVertexShaderConstF( VC_WORLD_PROJ, (F32 *)&mTempMatrix, 4 ); -#else - disableShaders(); -#endif + setShader(mGenericShader[type]); + setShaderConstBuffer(mGenericShaderBuffer[type]); } //----------------------------------------------------------------------------- @@ -731,7 +760,8 @@ void GFXD3D9Device::setShader( GFXShader *shader, bool force ) //----------------------------------------------------------------------------- GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data ) { // Allocate a buffer to return GFXD3D9PrimitiveBuffer * res = new GFXD3D9PrimitiveBuffer(this, numIndices, numPrimitives, bufferType); @@ -741,12 +771,13 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, D3DPOOL pool = D3DPOOL_DEFAULT; // Assumptions: - // - static buffers are write once, use many + // - static buffers are write rarely, use many // - dynamic buffers are write many, use many // - volatile buffers are write once, use once // You may never read from a buffer. switch(bufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: pool = isD3D9Ex() ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; break; @@ -781,6 +812,14 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, D3D9Assert(mD3DDevice->CreateIndexBuffer( sizeof(U16) * numIndices , usage, GFXD3D9IndexFormat[GFXIndexFormat16], pool, &res->ib, 0), "Failed to allocate an index buffer."); } + + if(data) + { + void* dest; + res->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + res->unlock(); + } return res; } @@ -791,7 +830,8 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data) { PROFILE_SCOPE( GFXD3D9Device_allocVertexBuffer ); @@ -808,13 +848,14 @@ GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, res->mNumVerts = 0; // Assumptions: - // - static buffers are write once, use many + // - static buffers are write rarely, use many // - dynamic buffers are write many, use many // - volatile buffers are write once, use once // You may never read from a buffer. switch(bufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: pool = isD3D9Ex() ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; break; @@ -850,6 +891,15 @@ GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, } res->mNumVerts = numVerts; + + if(data) + { + void* dest; + res->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + res->unlock(); + } + return res; } diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.h b/Engine/source/gfx/D3D9/gfxD3D9Device.h index c928b1a0d0..dfb880915d 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.h +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.h @@ -150,6 +150,10 @@ class GFXD3D9Device : public GFXDevice IDirect3DVertexShader9 *mLastVertShader; IDirect3DPixelShader9 *mLastPixShader; + GFXShaderRef mGenericShader[GS_COUNT]; + GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT]; + GFXShaderConstHandle *mModelViewProjSC[GS_COUNT]; + S32 mCreateFenceType; LPDIRECT3D9 mD3D; ///< D3D Handle @@ -298,10 +302,12 @@ class GFXD3D9Device : public GFXDevice virtual GFXVertexBuffer* allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual void deallocVertexBuffer( GFXD3D9VertexBuffer *vertBuff ); virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ); virtual void setVertexDecl( const GFXVertexDecl *decl ); @@ -324,8 +330,6 @@ class GFXD3D9Device : public GFXDevice /// Reset virtual void reset( D3DPRESENT_PARAMETERS &d3dpp ) = 0; - GFXShaderRef mGenericShader[GS_COUNT]; - virtual void setupGenericShaders( GenericShaderType type = GSColor ); // Function only really used on the, however a centralized function for diff --git a/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp b/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp index 2af7a9abd3..6577973190 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp @@ -1307,10 +1307,15 @@ void GFXD3D9Shader::_buildSamplerShaderConstantHandles( VectorgetElementCount(); i++ ) { - const GFXVertexElement &element = mInstancingFormat.getElement( i ); + const GFXVertexElement &element = mInstancingFormat->getElement( i ); String constName = String::ToString( "$%s", element.getSemantic().c_str() ); @@ -1347,9 +1352,9 @@ void GFXD3D9Shader::_buildInstancingShaderConstantHandles() // If this is a matrix we will have 2 or 3 more of these // semantics with the same name after it. - for ( ; i < mInstancingFormat.getElementCount(); i++ ) + for ( ; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &nextElement = mInstancingFormat.getElement( i ); + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); if ( nextElement.getSemantic() != element.getSemantic() ) { i--; diff --git a/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp b/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp index d31e938700..0da7a38953 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp @@ -55,6 +55,7 @@ void GFXD3D9VertexBuffer::lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr) switch( mBufferType ) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: break; @@ -203,7 +204,7 @@ void GFXD3D9VertexBuffer::zombify() { AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "GFXD3D9VertexBuffer::zombify - Cannot zombify a locked buffer!"); // Static buffers are managed by D3D9 so we don't deal with them. - if(mBufferType == GFXBufferTypeDynamic) + if(mBufferType == GFXBufferTypeDynamic || mBufferType == GFXBufferTypeImmutable) { SAFE_RELEASE(vb); } diff --git a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp index 29063f4e43..93bc86ee9f 100644 --- a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp @@ -114,6 +114,7 @@ void GFXD3D9EnumTranslate::init() GFXD3D9TextureFormat[GFXFormatD24S8] = D3DFMT_D24S8; GFXD3D9TextureFormat[GFXFormatD24FS8] = D3DFMT_D24FS8; GFXD3D9TextureFormat[GFXFormatD16] = D3DFMT_D16; + GFXD3D9TextureFormat[GFXFormatR8G8B8A8_SRGB] = D3DFMT_UNKNOWN; VALIDATE_LOOKUPTABLE( GFXD3D9TextureFormat, GFXFormat); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ @@ -302,7 +303,6 @@ void GFXD3D9EnumTranslate::init() GFXD3D9PrimType[GFXLineStrip] = D3DPT_LINESTRIP; GFXD3D9PrimType[GFXTriangleList] = D3DPT_TRIANGLELIST; GFXD3D9PrimType[GFXTriangleStrip] = D3DPT_TRIANGLESTRIP; - GFXD3D9PrimType[GFXTriangleFan] = D3DPT_TRIANGLEFAN; VALIDATE_LOOKUPTABLE( GFXD3D9PrimType, GFXPT ); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp b/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp index 21bb586bbb..32251438db 100644 --- a/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp @@ -31,6 +31,7 @@ void GFXD3D9PrimitiveBuffer::lock(U32 indexStart, U32 indexEnd, void **indexPtr) U32 flags=0; switch(mBufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: // flags |= D3DLOCK_DISCARD; break; diff --git a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp index 3dfcfe1d4f..d113bf70b8 100644 --- a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp @@ -514,7 +514,7 @@ void GFXPCD3D9Device::init( const GFXVideoMode &mode, PlatformWindow *window /* mCardProfiler = new GFXD3D9CardProfiler(mAdapterIndex); mCardProfiler->init(); - gScreenShot = new ScreenShotD3D; + gScreenShot = new ScreenShotD3D9; // Set the video capture frame grabber. mVideoFrameGrabber = new VideoFrameGrabberD3D9(); diff --git a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp index d545b5ba2b..4158012635 100644 --- a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp @@ -31,6 +31,9 @@ #include "gfx/gfxDebugEvent.h" #include "windowManager/win32/win32Window.h" +#ifndef _GFXDEVICE_H_ +#include "gfx/gfxDevice.h" +#endif GFXPCD3D9TextureTarget::GFXPCD3D9TextureTarget() : mTargetSize( Point2I::Zero ), @@ -451,6 +454,7 @@ void GFXPCD3D9WindowTarget::createAdditionalSwapChain() void GFXPCD3D9WindowTarget::resetMode() { + GFX->beginReset(); mWindow->setSuppressReset(true); if (mSwapChain) @@ -509,6 +513,7 @@ void GFXPCD3D9WindowTarget::zombify() void GFXPCD3D9WindowTarget::resurrect() { + GFX->beginReset(); if(mImplicit) { setImplicitSwapChain(); diff --git a/Engine/source/gfx/D3D9/screenshotD3D9.cpp b/Engine/source/gfx/D3D9/screenshotD3D9.cpp index b6b5e05009..c7d3ff3cbe 100644 --- a/Engine/source/gfx/D3D9/screenshotD3D9.cpp +++ b/Engine/source/gfx/D3D9/screenshotD3D9.cpp @@ -30,7 +30,7 @@ #include -GBitmap* ScreenShotD3D::_captureBackBuffer() +GBitmap* ScreenShotD3D9::_captureBackBuffer() { #ifdef TORQUE_OS_XENON return NULL; diff --git a/Engine/source/gfx/D3D9/screenshotD3D9.h b/Engine/source/gfx/D3D9/screenshotD3D9.h index d017591d62..023fa15627 100644 --- a/Engine/source/gfx/D3D9/screenshotD3D9.h +++ b/Engine/source/gfx/D3D9/screenshotD3D9.h @@ -19,15 +19,15 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#ifndef _SCREENSHOTD3D_H_ -#define _SCREENSHOTD3D_H_ +#ifndef _SCREENSHOTD3D9_H_ +#define _SCREENSHOTD3D9_H_ #include "gfx/screenshot.h" //************************************************************************** // D3D implementation of screenshot //************************************************************************** -class ScreenShotD3D : public ScreenShot +class ScreenShotD3D9 : public ScreenShot { protected: @@ -36,4 +36,4 @@ class ScreenShotD3D : public ScreenShot }; -#endif // _SCREENSHOTD3D_H_ +#endif // _SCREENSHOTD3D9_H_ diff --git a/Engine/source/gfx/Null/gfxNullDevice.cpp b/Engine/source/gfx/Null/gfxNullDevice.cpp index 315336c248..f22e3bc7a2 100644 --- a/Engine/source/gfx/Null/gfxNullDevice.cpp +++ b/Engine/source/gfx/Null/gfxNullDevice.cpp @@ -276,14 +276,16 @@ GFXNullDevice::~GFXNullDevice() GFXVertexBuffer *GFXNullDevice::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data ) { return new GFXNullVertexBuffer(GFX, numVerts, vertexFormat, vertSize, bufferType); } GFXPrimitiveBuffer *GFXNullDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType) + GFXBufferType bufferType, + void* data ) { return new GFXNullPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); } diff --git a/Engine/source/gfx/Null/gfxNullDevice.h b/Engine/source/gfx/Null/gfxNullDevice.h index 5e137cf016..28d6ad4e94 100644 --- a/Engine/source/gfx/Null/gfxNullDevice.h +++ b/Engine/source/gfx/Null/gfxNullDevice.h @@ -115,10 +115,12 @@ class GFXNullDevice : public GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ) { return NULL; } virtual void setVertexDecl( const GFXVertexDecl *decl ) { } diff --git a/Engine/source/gfx/bitmap/gBitmap.cpp b/Engine/source/gfx/bitmap/gBitmap.cpp index 151a792edf..78454d5e3e 100644 --- a/Engine/source/gfx/bitmap/gBitmap.cpp +++ b/Engine/source/gfx/bitmap/gBitmap.cpp @@ -326,7 +326,7 @@ void GBitmap::allocateBitmap(const U32 in_width, const U32 in_height, const bool mNumMipLevels++; allocPixels += currWidth * currHeight * mBytesPerPixel; - } while (currWidth != 1 || currHeight != 1); + } while (currWidth != 1 && currHeight != 1); } AssertFatal(mNumMipLevels <= c_maxMipLevels, "GBitmap::allocateBitmap: too many miplevels"); diff --git a/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp b/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp index 15812ff9b8..dff46bf036 100644 --- a/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp +++ b/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp @@ -483,7 +483,7 @@ static bool sReadTGA(Stream &stream, GBitmap *bitmap) static bool sWriteTGA(GBitmap *bitmap, Stream &stream, U32 compressionLevel) { - AssertISV(false, "GBitmap::writeTGA - doesn't support writing tga files!") + AssertISV(false, "GBitmap::writeTGA - doesn't support writing tga files!"); return false; } diff --git a/Engine/source/gfx/genericConstBuffer.h b/Engine/source/gfx/genericConstBuffer.h index b8a012159e..c38947541e 100644 --- a/Engine/source/gfx/genericConstBuffer.h +++ b/Engine/source/gfx/genericConstBuffer.h @@ -106,7 +106,7 @@ class GenericConstBufferLayout virtual ~GenericConstBufferLayout() {} /// Add a parameter to the buffer - void addParameter(const String& name, const GFXShaderConstType constType, const U32 offset, const U32 size, const U32 arraySize, const U32 alignValue); + virtual void addParameter(const String& name, const GFXShaderConstType constType, const U32 offset, const U32 size, const U32 arraySize, const U32 alignValue); /// Get the size of the buffer inline U32 getBufferSize() const { return mBufferSize; } @@ -210,6 +210,9 @@ class GenericConstBuffer /// state at the same time. inline const U8* getDirtyBuffer( U32 *start, U32 *size ); + /// Gets the entire buffer ignoring dirty range + inline const U8* getEntireBuffer(); + /// Sets the entire buffer as dirty or clears the dirty state. inline void setDirty( bool dirty ); @@ -348,6 +351,13 @@ inline const U8* GenericConstBuffer::getDirtyBuffer( U32 *start, U32 *size ) return buffer; } +inline const U8* GenericConstBuffer::getEntireBuffer() +{ + AssertFatal(mBuffer, "GenericConstBuffer::getDirtyBuffer() - Buffer is empty!"); + + return mBuffer; +} + inline bool GenericConstBuffer::isEqual( const GenericConstBuffer *buffer ) const { U32 bsize = mLayout->getBufferSize(); diff --git a/Engine/source/gfx/gfxAPI.cpp b/Engine/source/gfx/gfxAPI.cpp index 91a9974df3..b41b1297ba 100644 --- a/Engine/source/gfx/gfxAPI.cpp +++ b/Engine/source/gfx/gfxAPI.cpp @@ -41,7 +41,7 @@ ImplementEnumType( GFXAdapterType, "Back-end graphics API used by the GFX subsystem.\n\n" "@ingroup GFX" ) { OpenGL, "OpenGL", "OpenGL." }, - { Direct3D8, "D3D8", "Direct3D 8." }, + { Direct3D11, "D3D11", "Direct3D 11." }, { Direct3D9, "D3D9", "Direct3D 9." }, { NullDevice, "NullDevice", "Null device for dedicated servers." }, { Direct3D9_360, "Xenon", "Direct3D 9 on Xbox 360." } diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index c72c109d0e..fe446ce88d 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -148,7 +148,7 @@ GFXDevice::GFXDevice() mGlobalAmbientColor = ColorF(0.0f, 0.0f, 0.0f, 1.0f); mLightMaterialDirty = false; - dMemset(&mCurrentLightMaterial, NULL, sizeof(GFXLightMaterial)); + dMemset(&mCurrentLightMaterial, 0, sizeof(GFXLightMaterial)); // State block mStateBlockDirty = false; @@ -514,6 +514,8 @@ void GFXDevice::updateStates(bool forceSetAll /*=false*/) mStateBlockDirty = false; } + _updateRenderTargets(); + if( mTexturesDirty ) { mTexturesDirty = false; @@ -1329,3 +1331,8 @@ DefineEngineFunction( getBestHDRFormat, GFXFormat, (),, return format; } + +DefineConsoleFunction(ResetGFX, void, (), , "forces the gbuffer to be reinitialized in cases of improper/lack of buffer clears.") +{ + GFX->beginReset(); +} \ No newline at end of file diff --git a/Engine/source/gfx/gfxDevice.h b/Engine/source/gfx/gfxDevice.h index b9ff01e8cc..aa7ba0edfd 100644 --- a/Engine/source/gfx/gfxDevice.h +++ b/Engine/source/gfx/gfxDevice.h @@ -302,6 +302,7 @@ class GFXDevice /// This will allow querying to see if a device is initialized and ready to /// have operations performed on it. bool mInitialized; + bool mReset; /// This is called before this, or any other device, is deleted in the global destroy() /// method. It allows the device to clean up anything while everything is still valid. @@ -326,6 +327,10 @@ class GFXDevice /// @see endScene bool canCurrentlyRender() const { return mCanCurrentlyRender; } + bool recentlyReset(){ return mReset; } + void beginReset(){ mReset = true; } + void finalizeReset(){ mReset = false; } + void setAllowRender( bool render ) { mAllowRender = render; } inline bool allowRender() const { return mAllowRender; } @@ -637,7 +642,8 @@ class GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) = 0; + GFXBufferType bufferType, + void* data = NULL ) = 0; /// Called from GFXVertexFormat to allocate the hardware /// specific vertex declaration for rendering. @@ -674,7 +680,8 @@ class GFXDevice /// @note All index buffers use unsigned 16-bit indices. virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ) = 0; + GFXBufferType bufferType, + void* data = NULL ) = 0; /// @} diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 1e677685e2..42b146a10c 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/Engine/source/gfx/gfxDrawUtil.cpp @@ -458,19 +458,19 @@ void GFXDrawUtil::drawRect( const Point2F &upperLeft, const Point2F &lowerRight, Point2F nw(-0.5f,-0.5f); /* \ */ Point2F ne(0.5f,-0.5f); /* / */ - GFXVertexBufferHandle verts (mDevice, 10, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts (mDevice, 10, GFXBufferTypeVolatile ); verts.lock(); F32 ulOffset = 0.5f - mDevice->getFillConventionOffset(); verts[0].point.set( upperLeft.x + ulOffset + nw.x, upperLeft.y + ulOffset + nw.y, 0.0f ); verts[1].point.set( upperLeft.x + ulOffset - nw.x, upperLeft.y + ulOffset - nw.y, 0.0f ); - verts[2].point.set( lowerRight.x + ne.x, upperLeft.y + ulOffset + ne.y, 0.0f ); - verts[3].point.set( lowerRight.x - ne.x, upperLeft.y + ulOffset - ne.y, 0.0f ); - verts[4].point.set( lowerRight.x - nw.x, lowerRight.y - nw.y, 0.0f ); - verts[5].point.set( lowerRight.x + nw.x, lowerRight.y + nw.y, 0.0f ); - verts[6].point.set( upperLeft.x + ulOffset - ne.x, lowerRight.y - ne.y, 0.0f ); - verts[7].point.set( upperLeft.x + ulOffset + ne.x, lowerRight.y + ne.y, 0.0f ); + verts[2].point.set( lowerRight.x + ulOffset + ne.x, upperLeft.y + ulOffset + ne.y, 0.0f); + verts[3].point.set( lowerRight.x + ulOffset - ne.x, upperLeft.y + ulOffset - ne.y, 0.0f); + verts[4].point.set( lowerRight.x + ulOffset - nw.x, lowerRight.y + ulOffset - nw.y, 0.0f); + verts[5].point.set( lowerRight.x + ulOffset + nw.x, lowerRight.y + ulOffset + nw.y, 0.0f); + verts[6].point.set( upperLeft.x + ulOffset - ne.x, lowerRight.y + ulOffset - ne.y, 0.0f); + verts[7].point.set( upperLeft.x + ulOffset + ne.x, lowerRight.y + ulOffset + ne.y, 0.0f); verts[8].point.set( upperLeft.x + ulOffset + nw.x, upperLeft.y + ulOffset + nw.y, 0.0f ); // same as 0 verts[9].point.set( upperLeft.x + ulOffset - nw.x, upperLeft.y + ulOffset - nw.y, 0.0f ); // same as 1 @@ -521,15 +521,15 @@ void GFXDrawUtil::drawRectFill( const Point2F &upperLeft, const Point2F &lowerRi Point2F nw(-0.5,-0.5); /* \ */ Point2F ne(0.5,-0.5); /* / */ - GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); F32 ulOffset = 0.5f - mDevice->getFillConventionOffset(); - verts[0].point.set( upperLeft.x+nw.x+ulOffset, upperLeft.y+nw.y+ulOffset, 0.0f ); - verts[1].point.set( lowerRight.x+ne.x, upperLeft.y+ne.y+ulOffset, 0.0f ); - verts[2].point.set( upperLeft.x-ne.x+ulOffset, lowerRight.y-ne.y, 0.0f ); - verts[3].point.set( lowerRight.x-nw.x, lowerRight.y-nw.y, 0.0f ); + verts[0].point.set( upperLeft.x+nw.x + ulOffset, upperLeft.y+nw.y + ulOffset, 0.0f ); + verts[1].point.set( lowerRight.x + ne.x + ulOffset, upperLeft.y + ne.y + ulOffset, 0.0f); + verts[2].point.set( upperLeft.x - ne.x + ulOffset, lowerRight.y - ne.y + ulOffset, 0.0f); + verts[3].point.set( lowerRight.x - nw.x + ulOffset, lowerRight.y - nw.y + ulOffset, 0.0f); for (S32 i=0; i<4; i++) verts[i].color = color; @@ -548,7 +548,7 @@ void GFXDrawUtil::draw2DSquare( const Point2F &screenPoint, F32 width, F32 spinA Point3F offset( screenPoint.x, screenPoint.y, 0.0 ); - GFXVertexBufferHandle verts( mDevice, 4, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 4, GFXBufferTypeVolatile ); verts.lock(); verts[0].point.set( -width, -width, 0.0f ); @@ -608,7 +608,7 @@ void GFXDrawUtil::drawLine( F32 x1, F32 y1, F32 x2, F32 y2, const ColorI &color void GFXDrawUtil::drawLine( F32 x1, F32 y1, F32 z1, F32 x2, F32 y2, F32 z2, const ColorI &color ) { - GFXVertexBufferHandle verts( mDevice, 2, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 2, GFXBufferTypeVolatile ); verts.lock(); verts[0].point.set( x1, y1, z1 ); @@ -647,7 +647,7 @@ void GFXDrawUtil::drawSphere( const GFXStateBlockDesc &desc, F32 radius, const P const SphereMesh::TriangleMesh * sphereMesh = gSphere.getMesh(2); S32 numPoly = sphereMesh->numPoly; S32 totalPoly = 0; - GFXVertexBufferHandle verts(mDevice, numPoly*3, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoly*3, GFXBufferTypeVolatile); verts.lock(); S32 vertexIndex = 0; for (S32 i=0; i verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); // Set up the line strip @@ -745,7 +745,7 @@ void GFXDrawUtil::_drawWireTriangle( const GFXStateBlockDesc &desc, const Point3 void GFXDrawUtil::_drawSolidTriangle( const GFXStateBlockDesc &desc, const Point3F &p0, const Point3F &p1, const Point3F &p2, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 3, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 3, GFXBufferTypeVolatile); verts.lock(); // Set up the line strip @@ -778,7 +778,7 @@ void GFXDrawUtil::drawPolygon( const GFXStateBlockDesc& desc, const Point3F* poi { const bool isWireframe = ( desc.fillMode == GFXFillWireframe ); const U32 numVerts = isWireframe ? numPoints + 1 : numPoints; - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numVerts, GFXBufferTypeVolatile ); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numVerts, GFXBufferTypeVolatile ); verts.lock(); for( U32 i = 0; i < numPoints; ++ i ) @@ -809,7 +809,7 @@ void GFXDrawUtil::drawPolygon( const GFXStateBlockDesc& desc, const Point3F* poi if( desc.fillMode == GFXFillWireframe ) mDevice->drawPrimitive( GFXLineStrip, 0, numPoints ); else - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints - 2 ); + mDevice->drawPrimitive( GFXTriangleStrip, 0, numPoints - 2 ); } void GFXDrawUtil::drawCube( const GFXStateBlockDesc &desc, const Box3F &box, const ColorI &color, const MatrixF *xfm ) @@ -827,7 +827,7 @@ void GFXDrawUtil::drawCube( const GFXStateBlockDesc &desc, const Point3F &size, void GFXDrawUtil::_drawWireCube( const GFXStateBlockDesc &desc, const Point3F &size, const Point3F &pos, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 30, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 30, GFXBufferTypeVolatile); verts.lock(); Point3F halfSize = size * 0.5f; @@ -870,7 +870,7 @@ void GFXDrawUtil::_drawWireCube( const GFXStateBlockDesc &desc, const Point3F &s void GFXDrawUtil::_drawSolidCube( const GFXStateBlockDesc &desc, const Point3F &size, const Point3F &pos, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 36, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 36, GFXBufferTypeVolatile); verts.lock(); Point3F halfSize = size * 0.5f; @@ -950,7 +950,7 @@ void GFXDrawUtil::_drawWirePolyhedron( const GFXStateBlockDesc &desc, const AnyP // Allocate a temporary vertex buffer. - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numEdges * 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numEdges * 2, GFXBufferTypeVolatile); // Fill it with the vertices for the edges. @@ -997,7 +997,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any // Create a temp buffer for the vertices and // put all the polyhedron's points in there. - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numPoints, GFXBufferTypeVolatile ); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numPoints, GFXBufferTypeVolatile ); verts.lock(); for( U32 i = 0; i < numPoints; ++ i ) @@ -1015,7 +1015,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any // Allocate a temp buffer for the face indices. - const U32 numIndices = poly.getNumEdges() * 2; + const U32 numIndices = poly.getNumEdges() * 3; const U32 numPlanes = poly.getNumPlanes(); GFXPrimitiveBufferHandle prims( mDevice, numIndices, 0, GFXBufferTypeVolatile ); @@ -1071,7 +1071,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any for( U32 i = 0; i < numPolys; ++ i ) { U32 numVerts = numIndicesForPoly[ i ]; - mDevice->drawIndexedPrimitive( GFXTriangleFan, 0, 0, numPoints, startIndex, numVerts - 2 ); + mDevice->drawIndexedPrimitive( GFXTriangleStrip, 0, 0, numPoints, startIndex, numVerts - 2 ); startIndex += numVerts; } } @@ -1119,7 +1119,7 @@ void GFXDrawUtil::drawObjectBox( const GFXStateBlockDesc &desc, const Point3F &s PrimBuild::end(); } -static const Point2F circlePoints[] = +static const Point2F circlePoints[] = { Point2F(0.707107f, 0.707107f), Point2F(0.923880f, 0.382683f), @@ -1156,7 +1156,7 @@ void GFXDrawUtil::_drawSolidCapsule( const GFXStateBlockDesc &desc, const Point3 mat = MatrixF::Identity; S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints * 2 + 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints * 2 + 2, GFXBufferTypeVolatile); verts.lock(); for (S32 i=0; imultWorld(mat); S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints, GFXBufferTypeVolatile); verts.lock(); for (S32 i=0; i< numPoints; i++) { @@ -1268,27 +1268,57 @@ void GFXDrawUtil::drawCone( const GFXStateBlockDesc &desc, const Point3F &basePn mDevice->multWorld(mat); S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints + 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints * 3 + 2, GFXBufferTypeVolatile); verts.lock(); - verts[0].point = Point3F(0.0f,0.0f,1.0f); - verts[0].color = color; - for (S32 i=0; isetStateBlockByDesc( desc ); mDevice->setVertexBuffer( verts ); - mDevice->setupGenericShaders( GFXDevice::GSModColorTexture ); + mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints ); - mDevice->drawPrimitive( GFXTriangleFan, 1, numPoints-1 ); + mDevice->drawPrimitive(GFXTriangleStrip, 0, numPoints - 2); + mDevice->drawPrimitive(GFXTriangleStrip, numPoints, numPoints * 2); mDevice->popWorldMatrix(); + } void GFXDrawUtil::drawCylinder( const GFXStateBlockDesc &desc, const Point3F &basePnt, const Point3F &tipPnt, F32 radius, const ColorI &color ) @@ -1307,32 +1337,59 @@ void GFXDrawUtil::drawCylinder( const GFXStateBlockDesc &desc, const Point3F &ba mDevice->pushWorldMatrix(); mDevice->multWorld(mat); - S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints * 4 + 4, GFXBufferTypeVolatile); + S32 numPoints = sizeof(circlePoints) / sizeof(Point2F); + GFXVertexBufferHandle verts(mDevice, numPoints *4 + 2, GFXBufferTypeVolatile); verts.lock(); - for (S32 i=0; isetStateBlockByDesc( desc ); mDevice->setVertexBuffer( verts ); - mDevice->setupGenericShaders( GFXDevice::GSModColorTexture ); + mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints ); - mDevice->drawPrimitive( GFXTriangleFan, numPoints + 1, numPoints ); - mDevice->drawPrimitive( GFXTriangleStrip, 2 * numPoints + 2, 2 * numPoints); + mDevice->drawPrimitive( GFXTriangleStrip, 0, numPoints-2 ); + mDevice->drawPrimitive( GFXTriangleStrip, numPoints, numPoints - 2); + mDevice->drawPrimitive( GFXTriangleStrip, numPoints*2, numPoints * 2); mDevice->popWorldMatrix(); } @@ -1393,7 +1450,7 @@ void GFXDrawUtil::drawFrustum( const Frustum &f, const ColorI &color ) void GFXDrawUtil::drawSolidPlane( const GFXStateBlockDesc &desc, const Point3F &pos, const Point2F &size, const ColorI &color ) { - GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); verts[0].point = pos + Point3F( -size.x / 2.0f, -size.y / 2.0f, 0 ); @@ -1412,7 +1469,7 @@ void GFXDrawUtil::drawSolidPlane( const GFXStateBlockDesc &desc, const Point3F & mDevice->setVertexBuffer( verts ); mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, 2 ); + mDevice->drawPrimitive( GFXTriangleStrip, 0, 2 ); } void GFXDrawUtil::drawPlaneGrid( const GFXStateBlockDesc &desc, const Point3F &pos, const Point2F &size, const Point2F &step, const ColorI &color, Plane plane ) @@ -1449,7 +1506,7 @@ void GFXDrawUtil::drawPlaneGrid( const GFXStateBlockDesc &desc, const Point3F &p break; } - GFXVertexBufferHandle verts( mDevice, numVertices, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, numVertices, GFXBufferTypeVolatile ); verts.lock(); U32 vertCount = 0; @@ -1541,7 +1598,7 @@ void GFXDrawUtil::drawTransform( const GFXStateBlockDesc &desc, const MatrixF &m GFX->multWorld( mat ); - GFXVertexBufferHandle verts( mDevice, 6, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 6, GFXBufferTypeVolatile ); verts.lock(); const static ColorI defColors[3] = diff --git a/Engine/source/gfx/gfxEnums.h b/Engine/source/gfx/gfxEnums.h index 9dfba2f73a..238af2f941 100644 --- a/Engine/source/gfx/gfxEnums.h +++ b/Engine/source/gfx/gfxEnums.h @@ -39,8 +39,8 @@ enum GFXBufferType { - GFXBufferTypeStatic, ///< Static vertex buffers are created and filled one time. - ///< incur a performance penalty. Resizing a static vertex buffer is not + GFXBufferTypeStatic, ///< Static vertex buffers are created and rarely updated. + ///< Updating might incur a performance penalty. Resizing a static vertex buffer is not ///< allowed. GFXBufferTypeDynamic, ///< Dynamic vertex buffers are meant for vertices that can be changed ///< often. Vertices written into dynamic vertex buffers will remain valid @@ -48,7 +48,8 @@ enum GFXBufferType ///< allowed. GFXBufferTypeVolatile, ///< Volatile vertex or index buffers are meant for vertices or indices that are essentially ///< only used once. They can be resized without any performance penalty. - + GFXBufferTypeImmutable, ///< Immutable buffers must specify the data when creating the buffer. Cannot be modified. + GFXBufferType_COUNT ///< Number of buffer types. }; @@ -67,7 +68,6 @@ enum GFXPrimitiveType GFXLineStrip, GFXTriangleList, GFXTriangleStrip, - GFXTriangleFan, GFXPT_COUNT }; @@ -205,6 +205,9 @@ enum GFXFormat GFXFormatDXT4, GFXFormatDXT5, + // sRGB formats + GFXFormatR8G8B8A8_SRGB, + GFXFormat_COUNT, GFXFormat_8BIT = GFXFormatA8, @@ -276,8 +279,8 @@ enum GFXBlend enum GFXAdapterType { OpenGL = 0, + Direct3D11, Direct3D9, - Direct3D8, NullDevice, Direct3D9_360, GFXAdapterType_Count diff --git a/Engine/source/gfx/gfxInit.cpp b/Engine/source/gfx/gfxInit.cpp index 3b0ef44e15..09d503d10e 100644 --- a/Engine/source/gfx/gfxInit.cpp +++ b/Engine/source/gfx/gfxInit.cpp @@ -77,8 +77,8 @@ inline static void _GFXInitReportAdapters(Vector &adapters) case NullDevice: Con::printf(" Null device found"); break; - case Direct3D8: - Con::printf(" Direct 3D (version 8.1) device found"); + case Direct3D11: + Con::printf(" Direct 3D (version 11.x) device found"); break; default : Con::printf(" Unknown device found"); @@ -221,7 +221,8 @@ GFXAdapter* GFXInit::chooseAdapter( GFXAdapterType type, const char* outputDevic const char* GFXInit::getAdapterNameFromType(GFXAdapterType type) { - static const char* _names[] = { "OpenGL", "D3D9", "D3D8", "NullDevice", "Xenon" }; + // must match GFXAdapterType order + static const char* _names[] = { "OpenGL", "D3D11", "D3D9", "NullDevice", "Xenon" }; if( type < 0 || type >= GFXAdapterType_Count ) { @@ -268,51 +269,53 @@ GFXAdapter *GFXInit::getBestAdapterChoice() // // If D3D is unavailable, we're not on windows, so GL is de facto the // best choice! - F32 highestSM9 = 0.f, highestSMGL = 0.f; - GFXAdapter *foundAdapter8 = NULL, *foundAdapter9 = NULL, - *foundAdapterGL = NULL; + F32 highestSMDX = 0.f, highestSMGL = 0.f; + GFXAdapter *foundAdapter9 = NULL, *foundAdapterGL = NULL, *foundAdapter11 = NULL; - for(S32 i=0; imType) + switch (currAdapter->mType) { + case Direct3D11: + if (currAdapter->mShaderModel > highestSMDX) + { + highestSMDX = currAdapter->mShaderModel; + foundAdapter11 = currAdapter; + } + break; + case Direct3D9: - if(currAdapter->mShaderModel > highestSM9) + if (currAdapter->mShaderModel > highestSMDX) { - highestSM9 = currAdapter->mShaderModel; + highestSMDX = currAdapter->mShaderModel; foundAdapter9 = currAdapter; } break; case OpenGL: - if(currAdapter->mShaderModel > highestSMGL) + if (currAdapter->mShaderModel > highestSMGL) { highestSMGL = currAdapter->mShaderModel; foundAdapterGL = currAdapter; } break; - case Direct3D8: - if(!foundAdapter8) - foundAdapter8 = currAdapter; - break; - default: break; } } - // Return best found in order DX9, GL, DX8. - if(foundAdapter9) + // Return best found in order DX11,DX9, GL + if (foundAdapter11) + return foundAdapter11; + + if (foundAdapter9) return foundAdapter9; - if(foundAdapterGL) + if (foundAdapterGL) return foundAdapterGL; - if(foundAdapter8) - return foundAdapter8; - // Uh oh - we didn't find anything. Grab whatever we can that's not Null... for(S32 i=0; imType != NullDevice) diff --git a/Engine/source/gfx/gfxPrimitiveBuffer.cpp b/Engine/source/gfx/gfxPrimitiveBuffer.cpp index 9a0a091197..2a06f53e23 100644 --- a/Engine/source/gfx/gfxPrimitiveBuffer.cpp +++ b/Engine/source/gfx/gfxPrimitiveBuffer.cpp @@ -80,3 +80,16 @@ void GFXPrimitiveBufferHandle::set(GFXDevice *theDevice, U32 indexCount, U32 pri getPointer()->mDebugCreationPath = desc; #endif } + +//----------------------------------------------------------------------------- +// immutable +//----------------------------------------------------------------------------- +void GFXPrimitiveBufferHandle::immutable(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, void* data, String desc) +{ + StrongRefPtr::operator=( theDevice->allocPrimitiveBuffer(indexCount, primitiveCount, GFXBufferTypeImmutable, data) ); + +#ifdef TORQUE_DEBUG + if( desc.isNotEmpty() ) + getPointer()->mDebugCreationPath = desc; +#endif +} diff --git a/Engine/source/gfx/gfxPrimitiveBuffer.h b/Engine/source/gfx/gfxPrimitiveBuffer.h index c2955786c0..9fa6ed14fc 100644 --- a/Engine/source/gfx/gfxPrimitiveBuffer.h +++ b/Engine/source/gfx/gfxPrimitiveBuffer.h @@ -140,6 +140,8 @@ class GFXPrimitiveBufferHandle : public StrongRefPtr } void set(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, GFXBufferType bufferType, String desc = String::EmptyString ); + + void immutable(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, void* data, String desc = String::EmptyString ); void lock(U16 **indexBuffer, GFXPrimitive **primitiveBuffer = NULL, U32 indexStart = 0, U32 indexEnd = 0) { diff --git a/Engine/source/gfx/gfxShader.cpp b/Engine/source/gfx/gfxShader.cpp index 5e81d8a109..54f1893e63 100644 --- a/Engine/source/gfx/gfxShader.cpp +++ b/Engine/source/gfx/gfxShader.cpp @@ -35,7 +35,8 @@ bool GFXShader::smLogWarnings = true; GFXShader::GFXShader() : mPixVersion( 0.0f ), - mReloadKey( 0 ) + mReloadKey( 0 ), + mInstancingFormat( NULL ) { } @@ -43,6 +44,8 @@ GFXShader::~GFXShader() { Torque::FS::RemoveChangeNotification( mVertexFile, this, &GFXShader::_onFileChanged ); Torque::FS::RemoveChangeNotification( mPixelFile, this, &GFXShader::_onFileChanged ); + + SAFE_DELETE(mInstancingFormat); } #ifndef TORQUE_OPENGL @@ -60,8 +63,16 @@ bool GFXShader::init( const Torque::Path &vertFile, const Torque::Path &pixFile, F32 pixVersion, const Vector ¯os, - const Vector &samplerNames) + const Vector &samplerNames, + GFXVertexFormat *instanceFormat) { + // Take care of instancing + if (instanceFormat) + { + mInstancingFormat = new GFXVertexFormat; + mInstancingFormat->copy(*instanceFormat); + } + // Store the inputs for use in reloading. mVertexFile = vertFile; mPixelFile = pixFile; diff --git a/Engine/source/gfx/gfxShader.h b/Engine/source/gfx/gfxShader.h index 318ab5ec0d..f9059fbc08 100644 --- a/Engine/source/gfx/gfxShader.h +++ b/Engine/source/gfx/gfxShader.h @@ -262,13 +262,12 @@ class GFXShader : public StrongRefBase, public GFXResource /// their destructor. Vector mActiveBuffers; + GFXVertexFormat *mInstancingFormat; + /// A protected constructor so it cannot be instantiated. GFXShader(); -public: - - // TODO: Add this into init(). - GFXVertexFormat mInstancingFormat; +public: /// Adds a global shader macro which will be merged with /// the script defined macros on every shader reload. @@ -312,7 +311,8 @@ class GFXShader : public StrongRefBase, public GFXResource const Torque::Path &pixFile, F32 pixVersion, const Vector ¯os, - const Vector &samplerNames); + const Vector &samplerNames, + GFXVertexFormat *instanceFormat = NULL ); /// Reloads the shader from disk. bool reload(); @@ -358,6 +358,9 @@ class GFXShader : public StrongRefBase, public GFXResource // GFXResource const String describeSelf() const { return mDescription; } + // Get instancing vertex format + GFXVertexFormat *getInstancingFormat() { return mInstancingFormat; } + protected: /// Called when the shader files change on disk. diff --git a/Engine/source/gfx/gfxStringEnumTranslate.cpp b/Engine/source/gfx/gfxStringEnumTranslate.cpp index 38fe29c7a3..c564fbb292 100644 --- a/Engine/source/gfx/gfxStringEnumTranslate.cpp +++ b/Engine/source/gfx/gfxStringEnumTranslate.cpp @@ -347,7 +347,6 @@ void GFXStringEnumTranslate::init() GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXLineStrip ); GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleList ); GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleStrip ); - GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleFan ); VALIDATE_LOOKUPTABLE( GFXStringPrimType, GFXPT ); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Engine/source/gfx/gfxTextureManager.cpp b/Engine/source/gfx/gfxTextureManager.cpp index e367ed8838..b656fcffdd 100644 --- a/Engine/source/gfx/gfxTextureManager.cpp +++ b/Engine/source/gfx/gfxTextureManager.cpp @@ -1099,7 +1099,7 @@ void GFXTextureManager::_validateTexParams( const U32 width, const U32 height, currHeight = 1; inOutNumMips++; - } while ( currWidth != 1 || currHeight != 1 ); + } while ( currWidth != 1 && currHeight != 1 ); } } } diff --git a/Engine/source/gfx/gfxTextureProfile.cpp b/Engine/source/gfx/gfxTextureProfile.cpp index 0272d6b315..80a2fbceb4 100644 --- a/Engine/source/gfx/gfxTextureProfile.cpp +++ b/Engine/source/gfx/gfxTextureProfile.cpp @@ -59,6 +59,10 @@ GFX_ImplementTextureProfile(GFXDefaultZTargetProfile, GFXTextureProfile::DiffuseMap, GFXTextureProfile::PreserveSize | GFXTextureProfile::NoMipmap | GFXTextureProfile::ZTarget | GFXTextureProfile::NoDiscard, GFXTextureProfile::NONE); +GFX_ImplementTextureProfile(GFXDynamicTextureProfile, + GFXTextureProfile::DiffuseMap, + GFXTextureProfile::Dynamic, + GFXTextureProfile::NONE); //----------------------------------------------------------------------------- diff --git a/Engine/source/gfx/gfxTextureProfile.h b/Engine/source/gfx/gfxTextureProfile.h index e5abbc4dac..95bc179447 100644 --- a/Engine/source/gfx/gfxTextureProfile.h +++ b/Engine/source/gfx/gfxTextureProfile.h @@ -215,5 +215,7 @@ GFX_DeclareTextureProfile(GFXDefaultStaticDXT5nmProfile); GFX_DeclareTextureProfile(GFXSystemMemProfile); // Depth buffer texture GFX_DeclareTextureProfile(GFXDefaultZTargetProfile); +// Dynamic Texure +GFX_DeclareTextureProfile(GFXDynamicTextureProfile); #endif diff --git a/Engine/source/gfx/gfxVertexFormat.cpp b/Engine/source/gfx/gfxVertexFormat.cpp index fe1a2cf460..15f16a4d4e 100644 --- a/Engine/source/gfx/gfxVertexFormat.cpp +++ b/Engine/source/gfx/gfxVertexFormat.cpp @@ -70,6 +70,7 @@ GFXVertexFormat::GFXVertexFormat() mHasColor( false ), mHasNormal( false ), mHasTangent( false ), + mHasInstancing( false ), mTexCoordCount( 0 ), mSizeInBytes( 0 ), mDecl( NULL ) @@ -83,6 +84,7 @@ void GFXVertexFormat::copy( const GFXVertexFormat &format ) mHasNormal = format.mHasNormal; mHasTangent = format.mHasTangent; mHasColor = format.mHasColor; + mHasInstancing = format.mHasInstancing; mTexCoordCount = format.mTexCoordCount; mSizeInBytes = format.mSizeInBytes; mDescription = format.mDescription; @@ -161,6 +163,14 @@ bool GFXVertexFormat::hasColor() const return mHasColor; } +bool GFXVertexFormat::hasInstancing() const +{ + if (mDirty) + const_cast(this)->_updateDirty(); + + return mHasInstancing; +} + U32 GFXVertexFormat::getTexCoordCount() const { if ( mDirty ) @@ -177,6 +187,11 @@ U32 GFXVertexFormat::getSizeInBytes() const return mSizeInBytes; } +void GFXVertexFormat::enableInstancing() +{ + mHasInstancing = true; +} + void GFXVertexFormat::_updateDirty() { PROFILE_SCOPE( GFXVertexFormat_updateDirty ); diff --git a/Engine/source/gfx/gfxVertexFormat.h b/Engine/source/gfx/gfxVertexFormat.h index 0f32e085e9..09934e0dfc 100644 --- a/Engine/source/gfx/gfxVertexFormat.h +++ b/Engine/source/gfx/gfxVertexFormat.h @@ -153,6 +153,9 @@ class GFXVertexFormat /// The copy constructor. GFXVertexFormat( const GFXVertexFormat &format ) { copy( format ); } + /// Tell this format it has instancing + void enableInstancing(); + /// Copy the other vertex format. void copy( const GFXVertexFormat &format ); @@ -163,7 +166,7 @@ class GFXVertexFormat const String& getDescription() const; /// Clears all the vertex elements. - void clear(); + void clear(); /// Adds a vertex element to the format. /// @@ -182,6 +185,9 @@ class GFXVertexFormat /// Returns true if there is a COLOR semantic in this vertex format. bool hasColor() const; + /// Return true if instancing is used with this vertex format. + bool hasInstancing() const; + /// Returns the texture coordinate count by /// counting the number of TEXCOORD semantics. U32 getTexCoordCount() const; @@ -225,6 +231,9 @@ class GFXVertexFormat /// Is true if there is a COLOR semantic in this vertex format. bool mHasColor; + /// Is instaning used with this vertex format. + bool mHasInstancing; + /// The texture coordinate count by counting the /// number of "TEXCOORD" semantics. U32 mTexCoordCount; diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index b4b968b853..09ddfb53af 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -50,70 +50,42 @@ void GFXGLCardProfiler::init() mVideoMemory = static_cast(GFX)->getTotalVideoMemory(); Parent::init(); - - // Set new enums here so if our profile script forces this to be false we keep the GL_ZEROs. - if(queryProfile("GL::suppFloatTexture")) - { - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RGBA_FLOAT16_ATI; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RGBA; - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA_FLOAT16_ATI; - GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA_FLOAT32_ATI; - GFXGLTextureInternalFormat[GFXFormatR32F] = GL_RGBA_FLOAT32_ATI; - } } void GFXGLCardProfiler::setupCardCapabilities() { GLint maxTexSize; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); - - const char* versionString = reinterpret_cast(glGetString(GL_VERSION)); - F32 glVersion = dAtof(versionString); // OpenGL doesn't have separate maximum width/height. setCapability("maxTextureWidth", maxTexSize); setCapability("maxTextureHeight", maxTexSize); setCapability("maxTextureSize", maxTexSize); - // If extensions haven't been inited, we're in trouble here. - bool suppVBO = (gglHasExtension(ARB_vertex_buffer_object) || glVersion >= 1.499f); - setCapability("GL::suppVertexBufferObject", suppVBO); + // Check for anisotropic filtering support. + setCapability("GL_EXT_texture_filter_anisotropic", gglHasExtension(EXT_texture_filter_anisotropic)); - // check if render to texture supported is available - bool suppRTT = gglHasExtension(EXT_framebuffer_object); - setCapability("GL::suppRenderTexture", suppRTT); - - bool suppBlit = gglHasExtension(EXT_framebuffer_blit); - setCapability("GL::suppRTBlit", suppBlit); - - bool suppFloatTex = gglHasExtension(ARB_texture_float); - setCapability("GL::suppFloatTexture", suppFloatTex); + // Check for buffer storage +#ifdef TORQUE_NSIGHT_WORKAROUND + setCapability("GL_ARB_buffer_storage", false); +#else + setCapability("GL_ARB_buffer_storage", gglHasExtension(ARB_buffer_storage)); +#endif - // Check for anisotropic filtering support. - bool suppAnisotropic = gglHasExtension( EXT_texture_filter_anisotropic ); - setCapability( "GL::suppAnisotropic", suppAnisotropic ); - - // check to see if we have the fragment shader extension or the gl version is high enough for glsl to be core - // also check to see if the language version is high enough - F32 glslVersion = dAtof(reinterpret_cast(glGetString( GL_SHADING_LANGUAGE_VERSION))); - bool suppSPU = (gglHasExtension(ARB_fragment_shader) || glVersion >= 1.999f) && glslVersion >= 1.0999; - setCapability("GL::suppFragmentShader", suppSPU); - - bool suppAppleFence = gglHasExtension(APPLE_fence); - setCapability("GL::APPLE::suppFence", suppAppleFence); - - // When enabled, call glGenerateMipmapEXT() to generate mipmaps instead of relying on GL_GENERATE_MIPMAP - setCapability("GL::Workaround::needsExplicitGenerateMipmap", false); - // When enabled, binds and unbinds a texture target before doing the depth buffer copy. Failure to do - // so will cause a hard freeze on Mac OS 10.4 with a Radeon X1600 - setCapability("GL::Workaround::X1600DepthBufferCopy", false); - // When enabled, does not copy the last column and row of the depth buffer in a depth buffer copy. Failure - // to do so will cause a kernel panic on Mac OS 10.5(.1) with a Radeon HD 2600 (fixed in 10.5.2) - setCapability("GL::Workaround::HD2600DepthBufferCopy", false); - - // Certain Intel drivers have a divide by 0 crash if mipmaps are specified with - // glTexSubImage2D. - setCapability("GL::Workaround::noManualMips", false); + // Check for shader model 5.0 + setCapability("GL_ARB_gpu_shader5", gglHasExtension(ARB_gpu_shader5)); + + // Check for texture storage + setCapability("GL_ARB_texture_storage", gglHasExtension(ARB_texture_storage)); + + // Check for sampler objects + setCapability("GL_ARB_sampler_objects", gglHasExtension(ARB_sampler_objects)); + + // Check for copy image support + setCapability("GL_ARB_copy_image", gglHasExtension(ARB_copy_image)); + + // Check for vertex attrib binding + setCapability("GL_ARB_vertex_attrib_binding", gglHasExtension(ARB_vertex_attrib_binding)); } bool GFXGLCardProfiler::_queryCardCap(const String& query, U32& foundResult) diff --git a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h index c291cb229c..a3d2cb1dde 100644 --- a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h +++ b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h @@ -20,7 +20,8 @@ class GLFenceRange } void init(U32 start, U32 end) - { + { + PROFILE_SCOPE(GFXGLQueryFence_issue); mStart = start; mEnd = end; mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); @@ -35,7 +36,8 @@ class GLFenceRange } void wait() - { + { + PROFILE_SCOPE(GFXGLQueryFence_block); GLbitfield waitFlags = 0; GLuint64 waitDuration = 0; while( 1 ) @@ -143,6 +145,11 @@ class GLCircularVolatileBuffer init(); } + ~GLCircularVolatileBuffer() + { + glDeleteBuffers(1, &mBufferName); + } + void init() { glGenBuffers(1, &mBufferName); @@ -153,7 +160,7 @@ class GLCircularVolatileBuffer const U32 cSizeInMB = 10; mBufferSize = (cSizeInMB << 20); - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT; glBufferStorage(mBinding, mBufferSize, NULL, flags); @@ -193,7 +200,7 @@ class GLCircularVolatileBuffer outOffset = mBufferFreePos; - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { outPtr = (U8*)(mBufferPtr) + mBufferFreePos; } @@ -222,7 +229,7 @@ class GLCircularVolatileBuffer void unlock() { - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { return; } @@ -290,4 +297,4 @@ class GLCircularVolatileBuffer }; -#endif \ No newline at end of file +#endif diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 9cec609d19..e3a1907bcd 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -81,8 +81,8 @@ void loadGLExtensions(void *context) GL::gglPerformExtensionBinds(context); } -void STDCALL glDebugCallback(GLenum source, GLenum type, GLuint id, - GLenum severity, GLsizei length, const GLchar* message, void* userParam) +void STDCALL glDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, + const GLchar *message, const void *userParam) { if (severity == GL_DEBUG_SEVERITY_HIGH) Con::errorf("OPENGL: %s", message); @@ -140,10 +140,18 @@ void GFXGLDevice::initGLState() glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + // [JTH 5/6/2016] GLSL 1.50 is really SM 4.0 // Setting mPixelShaderVersion to 3.0 will allow Advanced Lighting to run. mPixelShaderVersion = 3.0; - mSupportsAnisotropic = mCardProfiler->queryProfile( "GL::suppAnisotropic" ); + // Set capability extensions. + mCapabilities.anisotropicFiltering = mCardProfiler->queryProfile("GL_EXT_texture_filter_anisotropic"); + mCapabilities.bufferStorage = mCardProfiler->queryProfile("GL_ARB_buffer_storage"); + mCapabilities.shaderModel5 = mCardProfiler->queryProfile("GL_ARB_gpu_shader5"); + mCapabilities.textureStorage = mCardProfiler->queryProfile("GL_ARB_texture_storage"); + mCapabilities.samplerObjects = mCardProfiler->queryProfile("GL_ARB_sampler_objects"); + mCapabilities.copyImage = mCardProfiler->queryProfile("GL_ARB_copy_image"); + mCapabilities.vertexAttributeBinding = mCardProfiler->queryProfile("GL_ARB_vertex_attrib_binding"); String vendorStr = (const char*)glGetString( GL_VENDOR ); if( vendorStr.find("NVIDIA", 0, String::NoCase | String::Left) != String::NPos) @@ -157,9 +165,6 @@ void GFXGLDevice::initGLState() glBindFramebuffer = &_t3d_glBindFramebuffer; } -#ifdef TORQUE_NSIGHT_WORKAROUND - __GLEW_ARB_buffer_storage = false; -#endif #if TORQUE_DEBUG if( gglHasExtension(ARB_debug_output) ) { @@ -216,6 +221,9 @@ GFXGLDevice::GFXGLDevice(U32 adapterIndex) : mCurrentVB_Divisor[i] = 0; } + // Initiailize capabilities to false. + memset(&mCapabilities, 0, sizeof(GLCapabilities)); + loadGLCore(); GFXGLEnumTranslate::init(); @@ -325,6 +333,7 @@ void GFXGLDevice::resurrect() GFXVertexBuffer* GFXGLDevice::findVolatileVBO(U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize) { + PROFILE_SCOPE(GFXGLDevice_findVBPool); for(U32 i = 0; i < mVolatileVBs.size(); i++) if ( mVolatileVBs[i]->mNumVerts >= numVerts && mVolatileVBs[i]->mVertexFormat.isEqual( *vertexFormat ) && @@ -333,6 +342,7 @@ GFXVertexBuffer* GFXGLDevice::findVolatileVBO(U32 numVerts, const GFXVertexForma return mVolatileVBs[i]; // No existing VB, so create one + PROFILE_SCOPE(GFXGLDevice_createVBPool); StrongRefPtr buf(new GFXGLVertexBuffer(GFX, numVerts, vertexFormat, vertSize, GFXBufferTypeVolatile)); buf->registerResourceWithDevice(this); mVolatileVBs.push_back(buf); @@ -355,23 +365,48 @@ GFXPrimitiveBuffer* GFXGLDevice::findVolatilePBO(U32 numIndices, U32 numPrimitiv GFXVertexBuffer *GFXGLDevice::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data ) { + PROFILE_SCOPE(GFXGLDevice_allocVertexBuffer); if(bufferType == GFXBufferTypeVolatile) return findVolatileVBO(numVerts, vertexFormat, vertSize); GFXGLVertexBuffer* buf = new GFXGLVertexBuffer( GFX, numVerts, vertexFormat, vertSize, bufferType ); - buf->registerResourceWithDevice(this); + buf->registerResourceWithDevice(this); + + if(data) + { + void* dest; + buf->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + buf->unlock(); + } + return buf; } -GFXPrimitiveBuffer *GFXGLDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType ) +GFXPrimitiveBuffer *GFXGLDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void* data ) { + GFXPrimitiveBuffer* buf; + if(bufferType == GFXBufferTypeVolatile) - return findVolatilePBO(numIndices, numPrimitives); - - GFXGLPrimitiveBuffer* buf = new GFXGLPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); - buf->registerResourceWithDevice(this); + { + buf = findVolatilePBO(numIndices, numPrimitives); + } + else + { + buf = new GFXGLPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); + buf->registerResourceWithDevice(this); + } + + if(data) + { + void* dest; + buf->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + buf->unlock(); + } return buf; } @@ -489,9 +524,6 @@ inline GLsizei GFXGLDevice::primCountToIndexCount(GFXPrimitiveType primType, U32 case GFXTriangleStrip : return 2 + primitiveCount; break; - case GFXTriangleFan : - return 2 + primitiveCount; - break; default: AssertFatal(false, "GFXGLDevice::primCountToIndexCount - unrecognized prim type"); break; @@ -502,6 +534,7 @@ inline GLsizei GFXGLDevice::primCountToIndexCount(GFXPrimitiveType primType, U32 GFXVertexDecl* GFXGLDevice::allocVertexDecl( const GFXVertexFormat *vertexFormat ) { + PROFILE_SCOPE(GFXGLDevice_allocVertexDecl); typedef Map GFXGLVertexDeclMap; static GFXGLVertexDeclMap declMap; GFXGLVertexDeclMap::Iterator itr = declMap.find( (void*)vertexFormat->getDescription().c_str() ); // description string are interned, safe to use c_str() @@ -765,7 +798,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSColor] = shaderData->getShader(); mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); - mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/modColorTextureV.glsl"); @@ -775,7 +809,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSModColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); - mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/addColorTextureV.glsl"); @@ -785,7 +820,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSAddColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); - mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/textureV.glsl"); @@ -796,6 +832,7 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) mGenericShader[GSTexture] = shaderData->getShader(); mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); } MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; @@ -830,6 +867,7 @@ void GFXGLDevice::setShader(GFXShader *shader, bool force) void GFXGLDevice::setShaderConstBufferInternal(GFXShaderConstBuffer* buffer) { + PROFILE_SCOPE(GFXGLDevice_setShaderConstBufferInternal); static_cast(buffer)->activate(); } diff --git a/Engine/source/gfx/gl/gfxGLDevice.h b/Engine/source/gfx/gl/gfxGLDevice.h index 72193835d7..fc37d32207 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.h +++ b/Engine/source/gfx/gl/gfxGLDevice.h @@ -45,6 +45,18 @@ class GFXGLVertexDecl; class GFXGLDevice : public GFXDevice { public: + struct GLCapabilities + { + bool anisotropicFiltering; + bool bufferStorage; + bool shaderModel5; + bool textureStorage; + bool samplerObjects; + bool copyImage; + bool vertexAttributeBinding; + }; + GLCapabilities mCapabilities; + void zombify(); void resurrect(); GFXGLDevice(U32 adapterIndex); @@ -173,8 +185,9 @@ class GFXGLDevice : public GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); - virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL); + virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void* data = NULL ); // NOTE: The GL device doesn't need a vertex declaration at // this time, but we need to return something to keep the system diff --git a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp index 19f6e1c691..3a00a639fe 100644 --- a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp +++ b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp @@ -45,6 +45,7 @@ void GFXGLEnumTranslate::init() GFXGLBufferType[GFXBufferTypeStatic] = GL_STATIC_DRAW; GFXGLBufferType[GFXBufferTypeDynamic] = GL_DYNAMIC_DRAW; GFXGLBufferType[GFXBufferTypeVolatile] = GL_STREAM_DRAW; + GFXGLBufferType[GFXBufferTypeImmutable] = GL_STATIC_DRAW; // Primitives GFXGLPrimType[GFXPointList] = GL_POINTS; @@ -52,7 +53,6 @@ void GFXGLEnumTranslate::init() GFXGLPrimType[GFXLineStrip] = GL_LINE_STRIP; GFXGLPrimType[GFXTriangleList] = GL_TRIANGLES; GFXGLPrimType[GFXTriangleStrip] = GL_TRIANGLE_STRIP; - GFXGLPrimType[GFXTriangleFan] = GL_TRIANGLE_FAN; // Blend GFXGLBlend[GFXBlendZero] = GL_ZERO; @@ -190,51 +190,33 @@ void GFXGLEnumTranslate::init() GFXGLTextureType[GFXFormatDXT4] = GL_ZERO; GFXGLTextureType[GFXFormatDXT5] = GL_UNSIGNED_BYTE; + GFXGLTextureType[GFXFormatR8G8B8A8_SRGB] = GL_SRGB8_ALPHA8; + static GLint Swizzle_GFXFormatA8[] = { GL_NONE, GL_NONE, GL_NONE, GL_RED }; static GLint Swizzle_GFXFormatL[] = { GL_RED, GL_RED, GL_RED, GL_ALPHA }; GFXGLTextureSwizzle[GFXFormatA8] = Swizzle_GFXFormatA8; // old GL_ALPHA8 GFXGLTextureSwizzle[GFXFormatL8] = Swizzle_GFXFormatL; // old GL_LUMINANCE8 GFXGLTextureSwizzle[GFXFormatL16] = Swizzle_GFXFormatL; // old GL_LUMINANCE16 - if( gglHasExtension(ARB_texture_float) ) - { - GFXGLTextureInternalFormat[GFXFormatR32F] = GL_R32F; - GFXGLTextureFormat[GFXFormatR32F] = GL_RED; - GFXGLTextureType[GFXFormatR32F] = GL_FLOAT; - - GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA32F_ARB; - GFXGLTextureFormat[GFXFormatR32G32B32A32F] = GL_RGBA; - GFXGLTextureType[GFXFormatR32G32B32A32F] = GL_FLOAT; + GFXGLTextureInternalFormat[GFXFormatR32F] = GL_R32F; + GFXGLTextureFormat[GFXFormatR32F] = GL_RED; + GFXGLTextureType[GFXFormatR32F] = GL_FLOAT; - if( gglHasExtension(ARB_half_float_pixel) ) - { - GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R16F; - GFXGLTextureFormat[GFXFormatR16F] = GL_RED; - GFXGLTextureType[GFXFormatR16F] = GL_HALF_FLOAT_ARB; + GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA32F_ARB; + GFXGLTextureFormat[GFXFormatR32G32B32A32F] = GL_RGBA; + GFXGLTextureType[GFXFormatR32G32B32A32F] = GL_FLOAT; - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG16F; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; - GFXGLTextureType[GFXFormatR16G16F] = GL_HALF_FLOAT_ARB; + GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R16F; + GFXGLTextureFormat[GFXFormatR16F] = GL_RED; + GFXGLTextureType[GFXFormatR16F] = GL_HALF_FLOAT_ARB; - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA16F_ARB; - GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; - GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_HALF_FLOAT_ARB; - } - else - { - GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R32F; - GFXGLTextureFormat[GFXFormatR16F] = GL_RED; - GFXGLTextureType[GFXFormatR16F] = GL_FLOAT; + GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG16F; + GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; + GFXGLTextureType[GFXFormatR16G16F] = GL_HALF_FLOAT_ARB; - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG32F; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; - GFXGLTextureType[GFXFormatR16G16F] = GL_FLOAT; - - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA32F_ARB; - GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; - GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_FLOAT; - } - } + GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA16F_ARB; + GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; + GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_HALF_FLOAT_ARB; if( gglHasExtension(ARB_ES2_compatibility) ) { diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index f10a2dd3fa..890a6c2c51 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -23,6 +23,7 @@ #include "platform/platform.h" #include "gfx/gl/gfxGLShader.h" #include "gfx/gl/gfxGLVertexAttribLocation.h" +#include "gfx/gl/gfxGLDevice.h" #include "core/frameAllocator.h" #include "core/stream/fileStream.h" @@ -344,6 +345,7 @@ void GFXGLShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF* ma void GFXGLShaderConstBuffer::activate() { + PROFILE_SCOPE(GFXGLShaderConstBuffer_activate); mShader->setConstantsFromBuffer(this); mWasLost = false; } @@ -394,6 +396,7 @@ void GFXGLShader::clearShaders() bool GFXGLShader::_init() { + PROFILE_SCOPE(GFXGLShader_Init); // Don't initialize empty shaders. if ( mVertexFile.isEmpty() && mPixelFile.isEmpty() ) return false; @@ -664,10 +667,14 @@ void GFXGLShader::initHandles() glUseProgram(0); //instancing + if (!mInstancingFormat) + return; + U32 offset = 0; - for ( U32 i=0; i < mInstancingFormat.getElementCount(); i++ ) + + for ( U32 i=0; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &element = mInstancingFormat.getElement( i ); + const GFXVertexElement &element = mInstancingFormat->getElement( i ); String constName = String::ToString( "$%s", element.getSemantic().c_str() ); @@ -702,9 +709,9 @@ void GFXGLShader::initHandles() // If this is a matrix we will have 2 or 3 more of these // semantics with the same name after it. - for ( ; i < mInstancingFormat.getElementCount(); i++ ) + for ( ; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &nextElement = mInstancingFormat.getElement( i ); + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); if ( nextElement.getSemantic() != element.getSemantic() ) { i--; @@ -952,14 +959,7 @@ bool GFXGLShader::_loadShaderFromStream( GLuint shader, buffers.push_back( dStrdup( versionDecl ) ); lengths.push_back( dStrlen( versionDecl ) ); - if(gglHasExtension(EXT_gpu_shader4)) - { - const char *extension = "#extension GL_EXT_gpu_shader4 : enable\r\n"; - buffers.push_back( dStrdup( extension ) ); - lengths.push_back( dStrlen( extension ) ); - } - - if(gglHasExtension(ARB_gpu_shader5)) + if(GFXGL->mCapabilities.shaderModel5) { const char *extension = "#extension GL_ARB_gpu_shader5 : enable\r\n"; buffers.push_back( dStrdup( extension ) ); @@ -1016,6 +1016,7 @@ bool GFXGLShader::initShader( const Torque::Path &file, bool isVertex, const Vector ¯os ) { + PROFILE_SCOPE(GFXGLShader_CompileShader); GLuint activeShader = glCreateShader(isVertex ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER); if(isVertex) mVertexShader = activeShader; @@ -1075,6 +1076,7 @@ bool GFXGLShader::initShader( const Torque::Path &file, /// Returns our list of shader constants, the material can get this and just set the constants it knows about const Vector& GFXGLShader::getShaderConstDesc() const { + PROFILE_SCOPE(GFXGLShader_GetShaderConstants); return mConstants; } diff --git a/Engine/source/gfx/gl/gfxGLStateBlock.cpp b/Engine/source/gfx/gl/gfxGLStateBlock.cpp index a1af2910c4..9d446f27aa 100644 --- a/Engine/source/gfx/gl/gfxGLStateBlock.cpp +++ b/Engine/source/gfx/gl/gfxGLStateBlock.cpp @@ -39,7 +39,7 @@ GFXGLStateBlock::GFXGLStateBlock(const GFXStateBlockDesc& desc) : mDesc(desc), mCachedHashValue(desc.getHashValue()) { - if( !gglHasExtension(ARB_sampler_objects) ) + if( !GFXGL->mCapabilities.samplerObjects ) return; static Map mSamplersMap; @@ -88,6 +88,7 @@ const GFXStateBlockDesc& GFXGLStateBlock::getDesc() const /// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) { + PROFILE_SCOPE(GFXGLStateBlock_Activate); // Big scary warning copied from Apple docs // http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_performance/chapter_13_section_2.html#//apple_ref/doc/uid/TP40001987-CH213-SW12 // Don't set a state that's already set. Once a feature is enabled, it does not need to be enabled again. @@ -107,6 +108,14 @@ void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) if(STATE_CHANGE(blendOp)) glBlendEquation(GFXGLBlendOp[mDesc.blendOp]); + if (mDesc.separateAlphaBlendEnable == true) + { + if (STATE_CHANGE(separateAlphaBlendSrc) || STATE_CHANGE(separateAlphaBlendDest)) + glBlendFuncSeparate(GFXGLBlend[mDesc.blendSrc], GFXGLBlend[mDesc.blendDest], GFXGLBlend[mDesc.separateAlphaBlendSrc], GFXGLBlend[mDesc.separateAlphaBlendDest]); + if (STATE_CHANGE(separateAlphaBlendOp)) + glBlendEquationSeparate(GFXGLBlendOp[mDesc.blendOp], GFXGLBlendOp[mDesc.separateAlphaBlendOp]); + } + // Color write masks if(STATE_CHANGE(colorWriteRed) || STATE_CHANGE(colorWriteBlue) || STATE_CHANGE(colorWriteGreen) || STATE_CHANGE(colorWriteAlpha)) glColorMask(mDesc.colorWriteRed, mDesc.colorWriteBlue, mDesc.colorWriteGreen, mDesc.colorWriteAlpha); @@ -157,7 +166,7 @@ void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) #undef CHECK_TOGGLE_STATE //sampler objects - if( gglHasExtension(ARB_sampler_objects) ) + if( GFXGL->mCapabilities.samplerObjects ) { for (U32 i = 0; i < getMin(getOwningDevice()->getNumSamplers(), (U32) TEXTURE_STAGE_COUNT); i++) { diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 70a5e43038..4d000e5768 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -146,7 +146,7 @@ void GFXGLTextureManager::innerCreateTexture( GFXGLTextureObject *retTex, glTexParameteri(binding, GL_TEXTURE_MAX_LEVEL, retTex->mMipLevels-1 ); - if( gglHasExtension(ARB_texture_storage) ) + if( GFXGL->mCapabilities.textureStorage ) { if(binding == GL_TEXTURE_2D) glTexStorage2D( retTex->getBinding(), retTex->mMipLevels, GFXGLTextureInternalFormat[format], width, height ); @@ -228,20 +228,22 @@ void GFXGLTextureManager::innerCreateTexture( GFXGLTextureObject *retTex, static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) { - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, texture->getBuffer()); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, texture->getBuffer()); U32 bufSize = pDL->getWidth(0) * pDL->getHeight(0) * pDL->getBytesPerPixel(); - glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, bufSize, NULL, GL_STREAM_DRAW); + glBufferData(GL_PIXEL_UNPACK_BUFFER, bufSize, NULL, GL_STREAM_DRAW); if(pDL->getFormat() == GFXFormatR8G8B8A8 || pDL->getFormat() == GFXFormatR8G8B8X8) { - FrameAllocatorMarker mem; - U8* pboMemory = (U8*)mem.alloc(bufSize); + PROFILE_SCOPE(Swizzle32_Upload); + U8* pboMemory = (U8*)dMalloc(bufSize); GFX->getDeviceSwizzle32()->ToBuffer(pboMemory, pDL->getBits(0), bufSize); - glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pboMemory ); + glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, bufSize, pboMemory ); + dFree(pboMemory); } else { - glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pDL->getBits(0) ); + PROFILE_SCOPE(SwizzleNull_Upload); + glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, bufSize, pDL->getBits(0) ); } if(texture->getBinding() == GL_TEXTURE_2D) @@ -249,7 +251,7 @@ static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) else glTexSubImage1D(texture->getBinding(), 0, 0, (pDL->getWidth(0) > 1 ? pDL->getWidth(0) : pDL->getHeight(0)), GFXGLTextureFormat[pDL->getFormat()], GFXGLTextureType[pDL->getFormat()], NULL); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } static void _slowTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) @@ -262,6 +264,7 @@ static void _slowTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) { + PROFILE_SCOPE(GFXGLTextureManager_loadTexture); GFXGLTextureObject *texture = static_cast(aTexture); AssertFatal(texture->getBinding() == GL_TEXTURE_1D || texture->getBinding() == GL_TEXTURE_2D, @@ -291,6 +294,8 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) { + PROFILE_SCOPE(GFXGLTextureManager_loadTextureDDS); + AssertFatal(!(dds->mFormat == GFXFormatDXT2 || dds->mFormat == GFXFormatDXT4), "GFXGLTextureManager::_loadTexture - OpenGL does not support DXT2 or DXT4 compressed textures"); GFXGLTextureObject* texture = static_cast(aTexture); @@ -304,10 +309,11 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) glBindTexture(texture->getBinding(), texture->getHandle()); texture->mFormat = dds->mFormat; U32 numMips = dds->mSurfaces[0]->mMips.size(); - if(GFX->getCardProfiler()->queryProfile("GL::Workaround::noManualMips")) - numMips = 1; + for(U32 i = 0; i < numMips; i++) { + PROFILE_SCOPE(GFXGLTexMan_loadSurface); + if(isCompressedFormat(dds->mFormat)) { if((!isPow2(dds->getWidth()) || !isPow2(dds->getHeight())) && GFX->getCardProfiler()->queryProfile("GL::Workaround::noCompressedNPoTTextures")) @@ -344,6 +350,7 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, void *raw) { + PROFILE_SCOPE(GFXGLTextureManager_loadTextureRaw); if(aTexture->getDepth() < 1) return false; diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index ed229e5d90..0cbad6b030 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -96,10 +96,13 @@ void GFXGLTextureObject::unlock(U32 mipLevel) if(!mLockedRect.bits) return; + // I know this is in unlock, but in GL we actually do our submission in unlock. + PROFILE_SCOPE(GFXGLTextureObject_lockRT); + PRESERVE_TEXTURE(mBinding); glBindTexture(mBinding, mHandle); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, mBuffer); - glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, (mLockedRectRect.extent.x + 1) * (mLockedRectRect.extent.y + 1) * mBytesPerTexel, mFrameAllocatorPtr, GL_STREAM_DRAW); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, mBuffer); + glBufferData(GL_PIXEL_UNPACK_BUFFER, (mLockedRectRect.extent.x + 1) * (mLockedRectRect.extent.y + 1) * mBytesPerTexel, mFrameAllocatorPtr, GL_STREAM_DRAW); if(mBinding == GL_TEXTURE_2D) glTexSubImage2D(mBinding, mipLevel, mLockedRectRect.point.x, mLockedRectRect.point.y, @@ -108,7 +111,7 @@ void GFXGLTextureObject::unlock(U32 mipLevel) glTexSubImage1D(mBinding, mipLevel, (mLockedRectRect.point.x > 1 ? mLockedRectRect.point.x : mLockedRectRect.point.y), (mLockedRectRect.extent.x > 1 ? mLockedRectRect.extent.x : mLockedRectRect.extent.y), GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], NULL); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); mLockedRect.bits = NULL; #if TORQUE_DEBUG @@ -175,6 +178,7 @@ bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) glGetTexImage(mBinding, 0, GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], orig); + PROFILE_START(GFXGLTextureObject_copyToBmp_pixCopy); for(int i = 0; i < srcPixelCount; ++i) { dest[0] = orig[0]; @@ -186,6 +190,7 @@ bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) orig += srcBytesPerPixel; dest += dstBytesPerPixel; } + PROFILE_END(); return true; } @@ -211,7 +216,7 @@ void GFXGLTextureObject::bind(U32 textureUnit) glBindTexture(mBinding, mHandle); GFXGL->getOpenglCache()->setCacheBindedTex(textureUnit, mBinding, mHandle); - if( gglHasExtension(ARB_sampler_objects) ) + if(GFXGL->mCapabilities.samplerObjects) return; GFXGLStateBlockRef sb = mGLDevice->getCurrentStateBlock(); @@ -298,8 +303,8 @@ void GFXGLTextureObject::reloadFromCache() else if(mBinding == GL_TEXTURE_1D) glTexSubImage1D(mBinding, 0, 0, (mTextureSize.x > 1 ? mTextureSize.x : mTextureSize.y), GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], mZombieCache); - if(GFX->getCardProfiler()->queryProfile("GL::Workaround::needsExplicitGenerateMipmap") && mMipLevels != 1) - glGenerateMipmapEXT(mBinding); + if(mMipLevels != 1) + glGenerateMipmap(mBinding); delete[] mZombieCache; mZombieCache = NULL; diff --git a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp index 1569b9a857..384871dd9a 100644 --- a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp @@ -163,6 +163,10 @@ void _GFXGLTextureTargetFBOImpl::applyState() PRESERVE_FRAMEBUFFER(); glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); + bool drawbufs[16]; + int bufsize = 0; + for (int i = 0; i < 16; i++) + drawbufs[i] = false; bool hasColor = false; for(int i = 0; i < GFXGL->getNumRenderTargets(); ++i) { @@ -200,6 +204,20 @@ void _GFXGLTextureTargetFBOImpl::applyState() glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0); } + GLenum *buf = new GLenum[bufsize]; + int count = 0; + for (int i = 0; i < bufsize; i++) + { + if (drawbufs[i]) + { + buf[count] = GL_COLOR_ATTACHMENT0 + i; + count++; + } + } + + glDrawBuffers(bufsize, buf); + + delete[] buf; CHECK_FRAMEBUFFER_STATUS(); } @@ -260,7 +278,10 @@ GFXGLTextureTarget::GFXGLTextureTarget() : mCopyFboSrc(0), mCopyFboDst(0) GFXGLTextureTarget::~GFXGLTextureTarget() { - GFXTextureManager::removeEventDelegate( this, &GFXGLTextureTarget::_onTextureEvent ); + GFXTextureManager::removeEventDelegate(this, &GFXGLTextureTarget::_onTextureEvent); + + glDeleteFramebuffers(1, &mCopyFboSrc); + glDeleteFramebuffers(1, &mCopyFboDst); } const Point2I GFXGLTextureTarget::getSize() @@ -389,7 +410,7 @@ void GFXGLTextureTarget::resolveTo(GFXTextureObject* obj) AssertFatal(dynamic_cast(obj), "GFXGLTextureTarget::resolveTo - Incorrect type of texture, expected a GFXGLTextureObject"); GFXGLTextureObject* glTexture = static_cast(obj); - if( gglHasExtension(ARB_copy_image) && mTargets[Color0]->isCompatible(glTexture) ) + if( GFXGL->mCapabilities.copyImage && mTargets[Color0]->isCompatible(glTexture) ) { GLenum binding = mTargets[Color0]->getBinding(); binding = (binding >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && binding <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) ? GL_TEXTURE_CUBE_MAP : binding; diff --git a/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp b/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp index 132172c1ad..2cf4cb6255 100644 --- a/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp +++ b/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp @@ -78,7 +78,7 @@ void GFXGLVertexBuffer::lock( U32 vertexStart, U32 vertexEnd, void **vertexPtr ) if( mBufferType == GFXBufferTypeVolatile ) { AssertFatal(vertexStart == 0, ""); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { getCircularVolatileVertexBuffer()->lock( mNumVerts * mVertexSize, 0, mBufferOffset, *vertexPtr ); } @@ -136,7 +136,7 @@ void GFXGLVertexBuffer::prepare() void GFXGLVertexBuffer::prepare(U32 stream, U32 divisor) { - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { glBindVertexBuffer( stream, mBuffer, mBufferOffset, mVertexSize ); glVertexBindingDivisor( stream, divisor ); diff --git a/Engine/source/gfx/gl/gfxGLVertexDecl.cpp b/Engine/source/gfx/gl/gfxGLVertexDecl.cpp index 10eda4401f..948a2b2de7 100644 --- a/Engine/source/gfx/gl/gfxGLVertexDecl.cpp +++ b/Engine/source/gfx/gl/gfxGLVertexDecl.cpp @@ -15,7 +15,7 @@ void GFXGLVertexDecl::init(const GFXVertexFormat *format) void GFXGLVertexDecl::prepareVertexFormat() const { AssertFatal(mFormat, "GFXGLVertexDecl - Not inited"); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { for ( U32 i=0; i < glVerticesFormat.size(); i++ ) { @@ -36,7 +36,7 @@ void GFXGLVertexDecl::prepareBuffer_old(U32 stream, GLint mBuffer, GLint mDiviso PROFILE_SCOPE(GFXGLVertexDecl_prepare); AssertFatal(mFormat, "GFXGLVertexDecl - Not inited"); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) return; // Bind the buffer... diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp index c02ff1bc3f..116ad75e35 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp @@ -42,6 +42,14 @@ GFXGLWindowTarget::GFXGLWindowTarget(PlatformWindow *win, GFXDevice *d) win->appEvent.notify(this, &GFXGLWindowTarget::_onAppSignal); } +GFXGLWindowTarget::~GFXGLWindowTarget() +{ + if(glIsFramebuffer(mCopyFBO)) + { + glDeleteFramebuffers(1, &mCopyFBO); + } +} + void GFXGLWindowTarget::resetMode() { if(mWindow->getVideoMode().fullScreen != mWindow->isFullscreen()) @@ -49,6 +57,7 @@ void GFXGLWindowTarget::resetMode() _teardownCurrentMode(); _setupNewMode(); } + GFX->beginReset(); } void GFXGLWindowTarget::_onAppSignal(WindowId wnd, S32 event) @@ -69,7 +78,7 @@ void GFXGLWindowTarget::resolveTo(GFXTextureObject* obj) AssertFatal(dynamic_cast(obj), "GFXGLTextureTarget::resolveTo - Incorrect type of texture, expected a GFXGLTextureObject"); GFXGLTextureObject* glTexture = static_cast(obj); - if( gglHasExtension(ARB_copy_image) ) + if( GFXGL->mCapabilities.copyImage ) { if(mBackBufferColorTex.getWidth() == glTexture->getWidth() && mBackBufferColorTex.getHeight() == glTexture->getHeight() diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.h b/Engine/source/gfx/gl/gfxGLWindowTarget.h index 4baa6a53f1..af368e192b 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.h +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.h @@ -30,6 +30,8 @@ class GFXGLWindowTarget : public GFXWindowTarget public: GFXGLWindowTarget(PlatformWindow *win, GFXDevice *d); + ~GFXGLWindowTarget(); + const Point2I getSize() { return mWindow->getClientExtent(); @@ -64,4 +66,4 @@ class GFXGLWindowTarget : public GFXWindowTarget void _WindowPresent(); }; -#endif \ No newline at end of file +#endif diff --git a/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp b/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp index 10e18deb43..74e1773fc7 100644 --- a/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp +++ b/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp @@ -83,6 +83,10 @@ void GFXGLDevice::enumerateAdapters( Vector &adapterList ) ); SDL_ClearError(); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GLContext tempContext = SDL_GL_CreateContext( tempWindow ); if( !tempContext ) { diff --git a/Engine/source/gfx/gl/tGL/tGL.cpp b/Engine/source/gfx/gl/tGL/tGL.cpp index 94953b4877..d56faa05e0 100644 --- a/Engine/source/gfx/gl/tGL/tGL.cpp +++ b/Engine/source/gfx/gl/tGL/tGL.cpp @@ -25,12 +25,19 @@ #include "core/strings/stringFunctions.h" #include "console/console.h" +#ifdef TORQUE_OS_WIN + #include "tWGL.h" +#endif + namespace GL { void gglPerformBinds() { - GLenum err = glewInit(); - AssertFatal(GLEW_OK == err, avar("Error: %s\n", glewGetErrorString(err)) ); + // JTH: epoxy has one oddity with windows. You need to bind the context + // after creating the context to udpate the internals of epoxy. +#ifdef TORQUE_OS_WIN + epoxy_handle_external_wglMakeCurrent(); +#endif } void gglPerformExtensionBinds(void *context) diff --git a/Engine/source/gfx/gl/tGL/tGL.h b/Engine/source/gfx/gl/tGL/tGL.h index aa1275ee57..8a0731ae58 100644 --- a/Engine/source/gfx/gl/tGL/tGL.h +++ b/Engine/source/gfx/gl/tGL/tGL.h @@ -22,9 +22,12 @@ #ifndef T_GL_H #define T_GL_H -#include "GL/glew.h" -#define gglHasExtension(EXTENSION) GLEW_##EXTENSION +#include + +// JTH: This is slow, we should probably check extensions once and cache them +// directly inside of some compatability table. +#define gglHasExtension(EXTENSION) epoxy_has_gl_extension("GL_" #EXTENSION) #endif diff --git a/Engine/source/gfx/gl/tGL/tWGL.h b/Engine/source/gfx/gl/tGL/tWGL.h index af905dca0b..18025e8861 100644 --- a/Engine/source/gfx/gl/tGL/tWGL.h +++ b/Engine/source/gfx/gl/tGL/tWGL.h @@ -28,9 +28,9 @@ #ifdef TORQUE_OPENGL #include "tGL.h" -#include "GL/wglew.h" +#include -#define gglHasWExtension(EXTENSION) WGLEW_##EXTENSION +#define gglHasWExtension(window, EXTENSION) epoxy_has_wgl_extension(window, "WGL_" # EXTENSION) #endif //TORQUE_OPENGL diff --git a/Engine/source/gfx/gl/tGL/tXGL.h b/Engine/source/gfx/gl/tGL/tXGL.h index 0cf2df966e..5e08048404 100644 --- a/Engine/source/gfx/gl/tGL/tXGL.h +++ b/Engine/source/gfx/gl/tGL/tXGL.h @@ -28,9 +28,9 @@ #ifdef TORQUE_OS_LINUX #include "tGL.h" -#include "GL/glxew.h" +#include -#define gglHasXExtension(EXTENSION) GLXEW##EXTENSION +#define gglHasXExtension(display, screen, EXTENSION) epoxy_has_glx_extension(display, screen, "GLX_" # EXTENSION) #endif //TORQUE_OS_LINUX diff --git a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp index 6d4d09d0bf..47fc979693 100644 --- a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp +++ b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp @@ -272,7 +272,12 @@ void GFXGLDevice::init( const GFXVideoMode &mode, PlatformWindow *window ) int debugFlag = 0; #endif - if( gglHasWExtension(ARB_create_context) ) + // Create a temp rendering context, needed a current context to use wglCreateContextAttribsARB + HGLRC tempGLRC = wglCreateContext(hdcGL); + if (!wglMakeCurrent(hdcGL, tempGLRC)) + AssertFatal(false, "Couldn't make temp GL context."); + + if( gglHasWExtension(hdcGL, ARB_create_context) ) { int const create_attribs[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, OGL_MAJOR, @@ -292,6 +297,10 @@ void GFXGLDevice::init( const GFXVideoMode &mode, PlatformWindow *window ) else mContext = wglCreateContext( hdcGL ); + // Delete temp rendering context + wglMakeCurrent(NULL, NULL); + wglDeleteContext(tempGLRC); + if( !wglMakeCurrent( hdcGL, (HGLRC)mContext ) ) AssertFatal( false , "GFXGLDevice::init - cannot make our context current. Or maybe we can't create it." ); diff --git a/Engine/source/gfx/primBuilder.cpp b/Engine/source/gfx/primBuilder.cpp index af33d3a41a..0c661a8e8d 100644 --- a/Engine/source/gfx/primBuilder.cpp +++ b/Engine/source/gfx/primBuilder.cpp @@ -117,7 +117,6 @@ GFXVertexBuffer * endToBuffer( U32 &numPrims ) } case GFXTriangleStrip: - case GFXTriangleFan: { numPrims = mCurVertIndex - 2; break; @@ -171,7 +170,6 @@ void end( bool useGenericShaders ) } case GFXTriangleStrip: - case GFXTriangleFan: { stripStart = 2; vertStride = 1; diff --git a/Engine/source/gfx/sim/debugDraw.cpp b/Engine/source/gfx/sim/debugDraw.cpp index 68b8c835dc..b31a6925e2 100644 --- a/Engine/source/gfx/sim/debugDraw.cpp +++ b/Engine/source/gfx/sim/debugDraw.cpp @@ -132,6 +132,11 @@ void DebugDrawer::setupStateBlocks() d.setZReadWrite(false); mRenderZOffSB = GFX->createStateBlock(d); + + d.setCullMode(GFXCullCCW); + d.setZReadWrite(true, false); + d.setBlend(true); + mRenderAlpha = GFX->createStateBlock(d); } void DebugDrawer::render() @@ -158,10 +163,13 @@ void DebugDrawer::render() // Set up the state block... GFXStateBlockRef currSB; - if(p->useZ) + if(p->type==DebugPrim::Capsule){ + currSB = mRenderAlpha; + }else if(p->useZ){ currSB = mRenderZOnSB; - else + }else{ currSB = mRenderZOffSB; + } GFX->setStateBlock( currSB ); Point3F d; @@ -180,6 +188,47 @@ void DebugDrawer::render() PrimBuild::end(); break; + case DebugPrim::DirectionLine: + { + const static F32 ARROW_LENGTH = 0.2f, ARROW_RADIUS = 0.035f, CYLINDER_RADIUS = 0.008f; + Point3F &start = p->a, &end = p->b; + Point3F direction = end - start; + F32 length = direction.len(); + if( length>ARROW_LENGTH ){ + //cylinder with arrow on end + direction *= (1.0f/length); + Point3F baseArrow = end - (direction*ARROW_LENGTH); + GFX->getDrawUtil()->drawCone(currSB->getDesc(), baseArrow, end, ARROW_RADIUS, p->color); + GFX->getDrawUtil()->drawCylinder(currSB->getDesc(), start, baseArrow, CYLINDER_RADIUS, p->color); + }else if( length>0 ){ + //short, so just draw arrow + GFX->getDrawUtil()->drawCone(currSB->getDesc(), start, end, ARROW_RADIUS, p->color); + } + } + break; + case DebugPrim::Capsule: + GFX->getDrawUtil()->drawCapsule(currSB->getDesc(), p->a, p->b.x, p->b.y, p->color); + break; + case DebugPrim::OutlinedText: + { + GFXTransformSaver saver; + Point3F result; + if (MathUtils::mProjectWorldToScreen(p->a, &result, GFX->getViewport(), GFX->getWorldMatrix(), GFX->getProjectionMatrix())) + { + GFX->setClipRect(GFX->getViewport()); + Point2I where = Point2I(result.x, result.y); + + GFX->getDrawUtil()->setBitmapModulation(p->color2); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x-1, where.y), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x+1, where.y), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x, where.y-1), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x, where.y+1), p->mText); + + GFX->getDrawUtil()->setBitmapModulation(p->color); + GFX->getDrawUtil()->drawText(mFont, where, p->mText); + } + } + break; case DebugPrim::Box: d = p->a - p->b; GFX->getDrawUtil()->drawCube(currSB->getDesc(), d * 0.5, (p->a + p->b) * 0.5, p->color); @@ -262,6 +311,63 @@ void DebugDrawer::drawLine(const Point3F &a, const Point3F &b, const ColorF &col mHead = n; } +void DebugDrawer::drawCapsule(const Point3F &a, const F32 &radius, const F32 &height, const ColorF &color) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = true; + n->dieTime = 0; + n->a = a; + n->b.x = radius; + n->b.y = height; + n->color = color; + n->type = DebugPrim::Capsule; + + n->next = mHead; + mHead = n; + +} + +void DebugDrawer::drawDirectionLine(const Point3F &a, const Point3F &b, const ColorF &color) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = true; + n->dieTime = 0; + n->a = a; + n->b = b; + n->color = color; + n->type = DebugPrim::DirectionLine; + + n->next = mHead; + mHead = n; +} + +void DebugDrawer::drawOutlinedText(const Point3F& pos, const String& text, const ColorF &color, const ColorF &colorOutline) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = false; + n->dieTime = 0; + n->a = pos; + n->color = color; + n->color2 = colorOutline; + dStrncpy(n->mText, text.c_str(), 256); + n->type = DebugPrim::OutlinedText; + + n->next = mHead; + mHead = n; +} + void DebugDrawer::drawTri(const Point3F &a, const Point3F &b, const Point3F &c, const ColorF &color) { if(isFrozen || !isDrawing) diff --git a/Engine/source/gfx/sim/debugDraw.h b/Engine/source/gfx/sim/debugDraw.h index b1ab559700..a07f52ca4f 100644 --- a/Engine/source/gfx/sim/debugDraw.h +++ b/Engine/source/gfx/sim/debugDraw.h @@ -124,7 +124,10 @@ class DebugDrawer : public SimObject void drawLine(const Point3F &a, const Point3F &b, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); void drawTri(const Point3F &a, const Point3F &b, const Point3F &c, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); void drawText(const Point3F& pos, const String& text, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); - + void drawCapsule(const Point3F &a, const F32 &radius, const F32 &height, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f)); + void drawDirectionLine(const Point3F &a, const Point3F &b, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f)); + void drawOutlinedText(const Point3F& pos, const String& text, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f), const ColorF &colorOutline = ColorF(0.0f, 0.0f, 0.0f)); + /// Render a wireframe view of the given polyhedron. void drawPolyhedron( const AnyPolyhedron& polyhedron, const ColorF& color = ColorF( 1.f, 1.f, 1.f ) ); @@ -161,6 +164,7 @@ class DebugDrawer : public SimObject { /// Color used for this primitive. ColorF color; + ColorF color2; /// Points used to store positional data. Exact semantics determined by type. Point3F a, b, c; @@ -168,7 +172,10 @@ class DebugDrawer : public SimObject Tri, Box, Line, - Text + Text, + DirectionLine, + OutlinedText, + Capsule, } type; ///< Type of the primitive. The meanings of a,b,c are determined by this. SimTime dieTime; ///< Time at which we should remove this from the list. @@ -188,6 +195,7 @@ class DebugDrawer : public SimObject GFXStateBlockRef mRenderZOffSB; GFXStateBlockRef mRenderZOnSB; + GFXStateBlockRef mRenderAlpha; Resource mFont; diff --git a/Engine/source/gui/3d/guiTSControl.cpp b/Engine/source/gui/3d/guiTSControl.cpp index cbb5204332..02d93690f7 100644 --- a/Engine/source/gui/3d/guiTSControl.cpp +++ b/Engine/source/gui/3d/guiTSControl.cpp @@ -110,7 +110,7 @@ namespace start -= lineVec; end += lineVec; - GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); verts.lock(); verts[0].point.set( start.x+perp.x, start.y+perp.y, z1 ); diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp index ce95475f2e..29d81231fd 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp @@ -124,6 +124,7 @@ GuiBitmapButtonCtrl::GuiBitmapButtonCtrl() mUseModifiers = false; mUseStates = true; setExtent( 140, 30 ); + mMasked = false; } //----------------------------------------------------------------------------- @@ -157,6 +158,7 @@ void GuiBitmapButtonCtrl::initPersistFields() "Defaults to true.\n\n" "If you do not use per-state images on this button set this to false to speed up the loading process " "by inhibiting searches for the individual images." ); + addField("masked", TypeBool, Offset(mMasked, GuiBitmapButtonCtrl),"Use alpha masking for interaction."); endGroup( "Bitmap" ); @@ -551,3 +553,42 @@ void GuiBitmapButtonTextCtrl::renderButton( GFXTexHandle &texture, const Point2I GFX->getDrawUtil()->setBitmapModulation( mProfile->mFontColor ); renderJustifiedText(textPos, getExtent(), mButtonText); } + +bool GuiBitmapButtonCtrl::pointInControl(const Point2I& parentCoordPoint) +{ + if (mMasked && getTextureForCurrentState()) + { + ColorI rColor(0, 0, 0, 0); + GBitmap* bmp; + + const RectI &bounds = getBounds(); + S32 xt = parentCoordPoint.x - bounds.point.x; + S32 yt = parentCoordPoint.y - bounds.point.y; + + bmp = getTextureForCurrentState().getBitmap(); + if (!bmp) + { + setBitmap(mBitmapName); + bmp = getTextureForCurrentState().getBitmap(); + } + + S32 relativeXRange = this->getExtent().x; + S32 relativeYRange = this->getExtent().y; + S32 fileXRange = bmp->getHeight(0); + S32 fileYRange = bmp->getWidth(0); + //Con::errorf("xRange:[%i -- %i], Range:[%i -- %i] pos:(%i,%i)",relativeXRange,fileXRange,relativeYRange,fileYRange,xt,yt); + + S32 fileX = (xt*fileXRange) / relativeXRange; + S32 fileY = (yt*fileYRange) / relativeYRange; + //Con::errorf("Checking %s @ (%i,%i)",this->getName(),fileX,fileY); + + bmp->getColor(fileX, fileY, rColor); + + if (rColor.alpha) + return true; + else + return false; + } + else + return Parent::pointInControl(parentCoordPoint); +} \ No newline at end of file diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h index c42b4f3f45..2a9d464e7e 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h @@ -113,6 +113,9 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl /// File name for bitmap. String mBitmapName; + /// alpha masking + bool mMasked; + /// Textures mTextures[ NumModifiers ]; @@ -163,6 +166,7 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl virtual void onRender(Point2I offset, const RectI &updateRect); static void initPersistFields(); + bool pointInControl(const Point2I& parentCoordPoint); DECLARE_CONOBJECT(GuiBitmapButtonCtrl); DECLARE_DESCRIPTION( "A button control rendered entirely from bitmaps.\n" diff --git a/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp new file mode 100644 index 0000000000..3eea9fe56f --- /dev/null +++ b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp @@ -0,0 +1,295 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gui/controls/guiAnimBitmapCtrl.h" + +#include "console/console.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "gfx/gfxDevice.h" +#include "gfx/gfxDrawUtil.h" + + + +IMPLEMENT_CONOBJECT(guiAnimBitmapCtrl); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onLoop, void, (), + (), "triggered when a loop completes"); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onCompleted, void, (), + (), "triggered when an animation completes"); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onFrame, void, (S32 frameIndex, S32 frame), + (frameIndex, frame), "triggered when a frame increments"); + +guiAnimBitmapCtrl::guiAnimBitmapCtrl(void) +{ + mAnimTexTiling = Point2I::One; + mAnimTexFramesString = NULL; + mAnimTexFrames.clear(); + mNumFrames = 0; + mCurFrameIndex = 0; + mFramesPerSec = 60; + mAnimateTexture = false; + mFrameTime = PlatformTimer::create(); + mLoop = true; + mPlay = true; + mReverse = false; + mFinished = false; +} + +guiAnimBitmapCtrl::~guiAnimBitmapCtrl(void) +{ + mAnimTexFrames.clear(); +} +void guiAnimBitmapCtrl::initPersistFields() +{ + addField("AnimTexTiling", TYPEID< Point2I >(), Offset(mAnimTexTiling, guiAnimBitmapCtrl), + "@brief The number of frames, in rows and columns stored in textureName " + "(when animateTexture is true).\n\n" + "A maximum of 256 frames can be stored in a single texture when using " + "mAnimTexTiling. Value should be \"NumColumns NumRows\", for example \"4 4\"."); + addProtectedField("AnimTexFrames", TYPEID< StringTableEntry >(), Offset(mAnimTexFramesString, guiAnimBitmapCtrl), &ptSetFrameRanges, &defaultProtectedGetFn, + "@brief A list of frames and/or frame ranges to use for particle " + "animation if animateTexture is true.\n\n" + "Each frame token must be separated by whitespace. A frame token must be " + "a positive integer frame number or a range of frame numbers separated " + "with a '-'. The range separator, '-', cannot have any whitspace around " + "it.\n\n" + "Ranges can be specified to move through the frames in reverse as well " + "as forward (eg. 19-14). Frame numbers exceeding the number of tiles will " + "wrap.\n" + "@tsexample\n" + "mAnimTexFrames = \"0-16 20 19 18 17 31-21\";\n" + "@endtsexample\n"); + + addField("loop", TypeBool, Offset(mLoop, guiAnimBitmapCtrl), "loop?"); + addField("play", TypeBool, Offset(mPlay, guiAnimBitmapCtrl), "play?"); + addField("reverse", TypeBool, Offset(mReverse, guiAnimBitmapCtrl), "play reversed?"); + addField("fps", TypeS32, Offset(mFramesPerSec, guiAnimBitmapCtrl), "Frame Rate"); + + addProtectedField("curFrame", TypeS32, Offset(mCurFrameIndex, guiAnimBitmapCtrl), &ptSetFrame, &defaultProtectedGetFn, "Index of currently Displaying Frame "); + + Parent::initPersistFields(); + removeField("wrap"); +} + +bool guiAnimBitmapCtrl::onAdd() +{ + if (Parent::onAdd() == false) + return false; + + if (!mAnimTexFramesString || !mAnimTexFramesString[0]) + { + S32 n_tiles = mAnimTexTiling.x * mAnimTexTiling.y - 1; + for (S32 i = 0; i <= n_tiles; i++) + mAnimTexFrames.push_back(i); + mNumFrames = mAnimTexFrames.size() - 1; + if (mCurFrameIndex > mNumFrames) + mCurFrameIndex = mNumFrames; + return true; + } + + return true; +} + +bool guiAnimBitmapCtrl::ptSetFrame(void *object, const char *index, const char *data) +{ + guiAnimBitmapCtrl *pData = static_cast(object); + + if (!pData->mNumFrames) + { + pData->mCurFrameIndex = 0; + return false; + } + + S32 val = dAtoi(data); + U32 i; + + if (val < 0) + { + pData->mCurFrameIndex = pData->mNumFrames; + return false; + } + else if (val > pData->mNumFrames) + { + pData->mCurFrameIndex = 0; + return false; + }; + + pData->mCurFrameIndex = val; + return true; +} + +bool guiAnimBitmapCtrl::ptSetFrameRanges(void *object, const char *index, const char *data) +{ + guiAnimBitmapCtrl *pData = static_cast(object); + + // Here we parse mAnimTexFramesString into byte-size frame numbers in mAnimTexFrames. + // Each frame token must be separated by whitespace. + // A frame token must be a positive integer frame number or a range of frame numbers + // separated with a '-'. + // The range separator, '-', cannot have any whitspace around it. + // Ranges can be specified to move through the frames in reverse as well as forward. + // Frame numbers exceeding the number of tiles will wrap. + // example: + // "0-16 20 19 18 17 31-21" + + S32 n_tiles = pData->mAnimTexTiling.x * pData->mAnimTexTiling.y - 1; + + pData->mAnimTexFrames.clear(); + + if (!data || !data[0]) + { + for (S32 i = 0; i <= n_tiles; i++) + pData->mAnimTexFrames.push_back(i); + pData->mNumFrames = pData->mAnimTexFrames.size() - 1; + if (pData->mCurFrameIndex > pData->mNumFrames) + pData->mCurFrameIndex = pData->mNumFrames; + return true; + } + char* tokCopy = new char[dStrlen(data) + 1]; + dStrcpy(tokCopy, data); + + char* currTok = dStrtok(tokCopy, " \t"); + while (currTok != NULL) + { + char* minus = dStrchr(currTok, '-'); + if (minus) + { + // add a range of frames + *minus = '\0'; + S32 range_a = dAtoi(currTok); + S32 range_b = dAtoi(minus + 1); + if (range_b < range_a) + { + // reverse frame range + for (S32 i = range_a; i >= range_b; i--) + pData->mAnimTexFrames.push_back(i); + } + else + { + // forward frame range + for (S32 i = range_a; i <= range_b; i++) + pData->mAnimTexFrames.push_back(i); + } + } + else + { + // add one frame + pData->mAnimTexFrames.push_back(dAtoi(currTok)); + } + currTok = dStrtok(NULL, " \t"); + } + + // cleanup + delete[] tokCopy; + pData->mNumFrames = pData->mAnimTexFrames.size() - 1; + if (pData->mCurFrameIndex > pData->mNumFrames) + pData->mCurFrameIndex = pData->mNumFrames; + return true; +} + +void guiAnimBitmapCtrl::onRender(Point2I offset, const RectI &updateRect) +{ + if (mTextureObject) + { + if (mFrameTime->getElapsedMs() > 1000 / mFramesPerSec) //fps to msfp conversion + { + mFrameTime->reset(); + + if (mPlay) + { + if (mReverse) //play backward + { + mCurFrameIndex--; + if (mCurFrameIndex < 0) + { + if (mLoop) + { + mCurFrameIndex = mNumFrames; + onLoop_callback(); + mFinished = false; + } + else + { + mCurFrameIndex = 0; + if (!mFinished) + onCompleted_callback(); + mFinished = true; + } + } + else + onFrame_callback(mCurFrameIndex, mAnimTexFrames[mCurFrameIndex]); + } + else // play forward + { + mCurFrameIndex++; + + if (mCurFrameIndex > mNumFrames) + { + if (mLoop) + { + mCurFrameIndex = 0; + onLoop_callback(); + mFinished = false; + } + else + { + mCurFrameIndex = mNumFrames; + if (!mFinished) + onCompleted_callback(); + mFinished = true; + } + } + else + onFrame_callback(mCurFrameIndex, mAnimTexFrames[mCurFrameIndex]); + } + } + } + + GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); + + GFXTextureObject* texture = mTextureObject; + + Point2I modifiedSRC = Point2I(texture->mBitmapSize.x / mAnimTexTiling.x, texture->mBitmapSize.y / mAnimTexTiling.y); + RectI srcRegion; + Point2I offsetSRC = Point2I::Zero; + + offsetSRC.x = (texture->mBitmapSize.x / mAnimTexTiling.x) * (mAnimTexFrames[mCurFrameIndex] % mAnimTexTiling.x); + offsetSRC.y = (texture->mBitmapSize.y / mAnimTexTiling.y) * (mAnimTexFrames[mCurFrameIndex] / mAnimTexTiling.x); + + srcRegion.set(offsetSRC, modifiedSRC); + + GFX->getDrawUtil()->drawBitmapStretchSR(texture, updateRect, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear, false); + } + + if (mProfile->mBorder || !mTextureObject) + { + RectI rect(offset, getExtent()); + GFX->getDrawUtil()->drawRect(rect, mProfile->mBorderColor); + } + + renderChildControls(offset, updateRect); +} \ No newline at end of file diff --git a/Engine/source/gui/controls/guiAnimBitmapCtrl.h b/Engine/source/gui/controls/guiAnimBitmapCtrl.h new file mode 100644 index 0000000000..ba50649f2b --- /dev/null +++ b/Engine/source/gui/controls/guiAnimBitmapCtrl.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GUIANIMBITMAPCTRL_H_ +#define _GUIANIMBITMAPCTRL_H_ + +#ifndef _GUIBITMAPCTRL_H_ +#include "gui/controls/guiBitmapCtrl.h" +#endif + +class guiAnimBitmapCtrl : public GuiBitmapCtrl +{ +public: + typedef GuiBitmapCtrl Parent; + +protected: + /// max frames (x,y) + Point2I mAnimTexTiling; + /// frames to use + StringTableEntry mAnimTexFramesString; + /// frames to use (internal) + Vector mAnimTexFrames; + U32 mNumFrames; + S32 mCurFrameIndex; + + bool mLoop; + bool mPlay; + bool mReverse; + S32 mFramesPerSec; + bool mAnimateTexture; + PlatformTimer * mFrameTime; + bool mFinished; + static bool ptSetFrame(void *object, const char *index, const char *data); + static bool ptSetFrameRanges(void *object, const char *index, const char *data); +public: + guiAnimBitmapCtrl(); + ~guiAnimBitmapCtrl(); + bool onAdd(); + + static void initPersistFields(); + void onRender(Point2I offset, const RectI &updateRect); + DECLARE_CONOBJECT(guiAnimBitmapCtrl); + DECLARE_CATEGORY("Gui Images"); + DECLARE_DESCRIPTION("A control that clips a bitmap based on %."); + + DECLARE_CALLBACK(void, onLoop, ()); + DECLARE_CALLBACK(void, onCompleted, ()); + DECLARE_CALLBACK(void, onFrame, (S32 frameIndex, S32 frame)); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gui/controls/guiBitmapBarCtrl.cpp b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp new file mode 100644 index 0000000000..0063090271 --- /dev/null +++ b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "gui/controls/guiBitmapBarCtrl.h" + +#include "console/console.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "gfx/gfxDevice.h" +#include "gfx/gfxDrawUtil.h" + + + +IMPLEMENT_CONOBJECT(GuiBitmapBarCtrl); + +GuiBitmapBarCtrl::GuiBitmapBarCtrl(void) +{ + mPercent = 100.0; + mVertical = false; + mFlipClip = false; +} + + +void GuiBitmapBarCtrl::initPersistFields() +{ + addField("percent", TypeF32, Offset(mPercent, GuiBitmapBarCtrl), + "% shown"); + addField("vertical", TypeBool, Offset(mVertical, GuiBitmapBarCtrl), + "If true, the bitmap is clipped vertically."); + addField("flipClip", TypeBool, Offset(mFlipClip, GuiBitmapBarCtrl), + "If true, the bitmap is clipped in the oposite direction."); + Parent::initPersistFields(); + removeField("wrap"); +} + +void GuiBitmapBarCtrl::onRender(Point2I offset, const RectI &updateRect) +{ + if (mTextureObject) + { + GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); + F32 pct = (mPercent / 100.0); + GFXTextureObject* texture = mTextureObject; + Point2I modifiedSRC; + modifiedSRC.x = mVertical ? (F32)texture->mBitmapSize.x : (F32)(texture->mBitmapSize.x*pct); + modifiedSRC.y = mVertical ? (F32)(texture->mBitmapSize.y*pct) : (F32)texture->mBitmapSize.y; + RectI srcRegion; + Point2I offsetSRC = Point2I::Zero; + if (mFlipClip) + { + offsetSRC.x = texture->mBitmapSize.x - modifiedSRC.x; + offsetSRC.y = texture->mBitmapSize.y - modifiedSRC.y; + } + + srcRegion.set(offsetSRC, modifiedSRC); + + RectI destRegion; + Point2I modifiedDest; + modifiedDest.x = mVertical ? (F32)updateRect.len_x() : (F32)(updateRect.len_x()*pct); + modifiedDest.y = mVertical ? (F32)(updateRect.len_y()*pct) : (F32)updateRect.len_y(); + + Point2I offsetDest = Point2I::Zero; + if (mFlipClip) + { + offsetDest.x = updateRect.len_x() - modifiedDest.x; + offsetDest.y = updateRect.len_y() - modifiedDest.y; + } + offsetDest += offset; + destRegion.set(offsetDest, modifiedDest); + + GFX->getDrawUtil()->drawBitmapStretchSR(texture, destRegion, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear, false); + } + + if (mProfile->mBorder || !mTextureObject) + { + RectI rect(offset, getExtent()); + GFX->getDrawUtil()->drawRect(rect, mProfile->mBorderColor); + } + + renderChildControls(offset, updateRect); +} \ No newline at end of file diff --git a/Engine/source/gui/controls/guiBitmapBarCtrl.h b/Engine/source/gui/controls/guiBitmapBarCtrl.h new file mode 100644 index 0000000000..5450e0df07 --- /dev/null +++ b/Engine/source/gui/controls/guiBitmapBarCtrl.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GUIBITMAPBARCTRL_H_ +#define _GUIBITMAPBARCTRL_H_ + +#ifndef _GUIBITMAPCTRL_H_ +#include "gui/controls/guiBitmapCtrl.h" +#endif + +class GuiBitmapBarCtrl : public GuiBitmapCtrl +{ +public: + typedef GuiBitmapCtrl Parent; + +protected: + F32 mPercent; + bool mVertical; + bool mFlipClip; +public: + GuiBitmapBarCtrl(); + static void initPersistFields(); + void onRender(Point2I offset, const RectI &updateRect); + + DECLARE_CONOBJECT(GuiBitmapBarCtrl); + DECLARE_CATEGORY("Gui Images"); + DECLARE_DESCRIPTION("A control that clips a bitmap based on %."); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index 1d0cd21c7e..8800fffd0a 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -29,6 +29,8 @@ #include "gfx/gfxDevice.h" #include "gfx/gfxDrawUtil.h" +#include "materials/matTextureTarget.h" + IMPLEMENT_CONOBJECT(GuiBitmapCtrl); @@ -56,7 +58,8 @@ ConsoleDocClass( GuiBitmapCtrl, GuiBitmapCtrl::GuiBitmapCtrl(void) : mBitmapName(), mStartPoint( 0, 0 ), - mWrap( false ) + mWrap( false ), + mColor(ColorI::WHITE) { } @@ -78,7 +81,8 @@ void GuiBitmapCtrl::initPersistFields() addProtectedField( "bitmap", TypeImageFilename, Offset( mBitmapName, GuiBitmapCtrl ), &setBitmapName, &defaultProtectedGetFn, - "The bitmap file to display in the control." ); + "The bitmap file to display in the control."); + addField("color", TypeColorI, Offset(mColor, GuiBitmapCtrl),"color mul"); addField( "wrap", TypeBool, Offset( mWrap, GuiBitmapCtrl ), "If true, the bitmap is tiled inside the control rather than stretched to fit." ); @@ -169,6 +173,7 @@ void GuiBitmapCtrl::onRender(Point2I offset, const RectI &updateRect) if (mTextureObject) { GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); if(mWrap) { // We manually draw each repeat because non power of two textures will @@ -264,3 +269,24 @@ DefineConsoleMethod( GuiBitmapCtrl, setBitmap, void, ( const char * fileRoot, bo Con::expandScriptFilename(filename, sizeof(filename), fileRoot); object->setBitmap(filename, resize ); } + +DefineEngineMethod( GuiBitmapCtrl, setNamedTexture, bool, (String namedtexture),, + "@brief Set a texture as the image.\n\n" + "@param namedtexture The name of the texture (NamedTexTarget).\n" + "@return true if the texture exists." ) +{ + GFXTexHandle theTex; + NamedTexTarget *namedTarget = NULL; + namedTarget = NamedTexTarget::find(namedtexture.c_str()); + if ( namedTarget ) + { + theTex = namedTarget->getTexture( 0 ); + } + + if ( theTex.isValid() ) + { + object->setBitmapHandle( theTex , false ); + return true; //a new texture was set correctly + } + return false; //we couldn't change the texture +} diff --git a/Engine/source/gui/controls/guiBitmapCtrl.h b/Engine/source/gui/controls/guiBitmapCtrl.h index 0eb8af3532..27e3ddf856 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.h +++ b/Engine/source/gui/controls/guiBitmapCtrl.h @@ -44,6 +44,7 @@ class GuiBitmapCtrl : public GuiControl GFXTexHandle mTextureObject; Point2I mStartPoint; + ColorI mColor; /// If true, bitmap tiles inside control. Otherwise stretches. bool mWrap; diff --git a/Engine/source/gui/controls/guiColorPicker.cpp b/Engine/source/gui/controls/guiColorPicker.cpp index 0b8676240e..2fad6aa69a 100644 --- a/Engine/source/gui/controls/guiColorPicker.cpp +++ b/Engine/source/gui/controls/guiColorPicker.cpp @@ -39,13 +39,13 @@ ColorF colorAlpha(0.0f, 0.0f, 0.0f, 0.0f); ColorF colorAlphaW(1.0f, 1.0f, 1.0f, 0.0f); ColorI GuiColorPickerCtrl::mColorRange[7] = { - ColorI(255,0,0), // Red - ColorI(255,0,255), // Pink - ColorI(0,0,255), // Blue - ColorI(0,255,255), // Light blue - ColorI(0,255,0), // Green - ColorI(255,255,0), // Yellow - ColorI(255,0,0), // Red + ColorI(255,0,0), // Red + ColorI(255,0,255), // Pink + ColorI(0,0,255), // Blue + ColorI(0,255,255), // Light blue + ColorI(0,255,0), // Green + ColorI(255,255,0), // Yellow + ColorI(255,0,0), // Red }; /// @} @@ -57,7 +57,6 @@ ConsoleDocClass( GuiColorPickerCtrl, "@internal" ); -//-------------------------------------------------------------------------- GuiColorPickerCtrl::GuiColorPickerCtrl() { setExtent(140, 30); @@ -70,44 +69,50 @@ GuiColorPickerCtrl::GuiColorPickerCtrl() mPositionChanged = false; mSelectorGap = 1; mActionOnMove = false; - mShowReticle = true; + mShowReticle = true; + mSelectColor = false; + mSetColor = mSetColor.BLACK; + mBitmap = NULL; } -//-------------------------------------------------------------------------- +GuiColorPickerCtrl::~GuiColorPickerCtrl() +{ + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } +} ImplementEnumType( GuiColorPickMode, "\n\n" "@ingroup GuiUtil" "@internal" ) - { GuiColorPickerCtrl::pPallet, "Pallete" }, - { GuiColorPickerCtrl::pHorizColorRange, "HorizColor"}, - { GuiColorPickerCtrl::pVertColorRange, "VertColor" }, - { GuiColorPickerCtrl::pHorizColorBrightnessRange, "HorizBrightnessColor"}, - { GuiColorPickerCtrl::pVertColorBrightnessRange, "VertBrightnessColor" }, - { GuiColorPickerCtrl::pBlendColorRange, "BlendColor"}, - { GuiColorPickerCtrl::pHorizAlphaRange, "HorizAlpha"}, - { GuiColorPickerCtrl::pVertAlphaRange, "VertAlpha" }, - { GuiColorPickerCtrl::pDropperBackground, "Dropper" }, + { GuiColorPickerCtrl::pPallet, "Pallete" }, + { GuiColorPickerCtrl::pHorizColorRange, "HorizColor"}, + { GuiColorPickerCtrl::pVertColorRange, "VertColor" }, + { GuiColorPickerCtrl::pHorizColorBrightnessRange, "HorizBrightnessColor" }, + { GuiColorPickerCtrl::pVertColorBrightnessRange, "VertBrightnessColor" }, + { GuiColorPickerCtrl::pBlendColorRange, "BlendColor" }, + { GuiColorPickerCtrl::pHorizAlphaRange, "HorizAlpha" }, + { GuiColorPickerCtrl::pVertAlphaRange, "VertAlpha" }, + { GuiColorPickerCtrl::pDropperBackground, "Dropper" }, EndImplementEnumType; -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::initPersistFields() { addGroup("ColorPicker"); - addField("baseColor", TypeColorF, Offset(mBaseColor, GuiColorPickerCtrl)); addField("pickColor", TypeColorF, Offset(mPickColor, GuiColorPickerCtrl)); addField("selectorGap", TypeS32, Offset(mSelectorGap, GuiColorPickerCtrl)); addField("displayMode", TYPEID< PickMode >(), Offset(mDisplayMode, GuiColorPickerCtrl) ); addField("actionOnMove", TypeBool,Offset(mActionOnMove, GuiColorPickerCtrl)); addField("showReticle", TypeBool, Offset(mShowReticle, GuiColorPickerCtrl)); - endGroup("ColorPicker"); Parent::initPersistFields(); } -//-------------------------------------------------------------------------- // Function to draw a box which can have 4 different colors in each corner blended together void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, ColorF &c3, ColorF &c4) { @@ -116,68 +121,76 @@ void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, Col S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y; + //A couple of checks to determine if color blend //A couple of checks to determine if color blend if(c1 == colorWhite && c3 == colorAlpha && c4 == colorBlack) { - //Color - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, t ); + //Color + PrimBuild::begin(GFXTriangleStrip, 4); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color( c2 ); + PrimBuild::vertex2i(l, t); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( c2 ); + PrimBuild::vertex2i(r, t); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + PrimBuild::color( c2 ); + PrimBuild::vertex2i( l, b ); + + PrimBuild::color( c2 ); + PrimBuild::vertex2i(r, b); + + PrimBuild::end(); - //White - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, t ); + //White + PrimBuild::begin(GFXTriangleStrip, 4); - PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color(c1); + PrimBuild::vertex2i(l, t); - PrimBuild::color( c1 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( colorAlphaW ); + PrimBuild::vertex2i(r, t); + + PrimBuild::color( c1 ); + PrimBuild::vertex2i( l, b ); + + PrimBuild::color(colorAlphaW); + PrimBuild::vertex2i(r, b); + + PrimBuild::end(); - PrimBuild::color( c1 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + //Black + PrimBuild::begin(GFXTriangleStrip, 4); - //Black - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( c3 ); - PrimBuild::vertex2i( r, t ); + PrimBuild::color(c3); + PrimBuild::vertex2i(l, t); + PrimBuild::color( c3 ); + PrimBuild::vertex2i( r, t ); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color( c4 ); + PrimBuild::vertex2i(l, b); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( c4 ); + PrimBuild::vertex2i(r, b); - PrimBuild::color( c3 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + PrimBuild::end(); } else { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin(GFXTriangleStrip, 4); + PrimBuild::color( c1 ); PrimBuild::vertex2i( l, t ); PrimBuild::color( c2 ); PrimBuild::vertex2i( r, t ); + PrimBuild::color(c4); + PrimBuild::vertex2i(l, b); + PrimBuild::color( c3 ); PrimBuild::vertex2i( r, b ); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( l, b ); PrimBuild::end(); } } @@ -186,45 +199,48 @@ void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, Col /// Function to draw a set of boxes blending throughout an array of colors void GuiColorPickerCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, U8 numColors, ColorI *colors) { - GFX->setStateBlock(mStateBlock); - + S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x + 4; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y + 4; - + // Calculate increment value - S32 x_inc = int(mFloor((r - l) / F32(numColors-1))); - S32 y_inc = int(mFloor((b - t) / F32(numColors-1))); + S32 x_inc = int(mFloor((r - l) / F32(numColors - 1))); + S32 y_inc = int(mFloor((b - t) / F32(numColors - 1))); - for( U16 i = 0;i < numColors - 1; i++ ) + for (U16 i = 0; i < numColors - 1; i++) { // This is not efficent, but then again it doesn't really need to be. -pw - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin(GFXTriangleStrip, 4); if (!vertical) // Horizontal (+x) { // First color - PrimBuild::color( colors[i] ); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l + x_inc, t); // Second color - PrimBuild::color( colors[i+1] ); - PrimBuild::vertex2i( l + x_inc, b ); - PrimBuild::vertex2i( l + x_inc, t ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, b); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l + x_inc, b); l += x_inc; } else // Vertical (+y) { // First color - PrimBuild::color( colors[i] ); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( r, t ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l, t + y_inc); // Second color - PrimBuild::color( colors[i+1] ); - PrimBuild::vertex2i( r, t + y_inc ); - PrimBuild::vertex2i( l, t + y_inc ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(r, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(r, t + y_inc); t += y_inc; } PrimBuild::end(); @@ -233,31 +249,29 @@ void GuiColorPickerCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, U8 numC void GuiColorPickerCtrl::drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode) { - if( !mShowReticle ) - return; - - U16 sMax = mSelectorGap*2; - switch (mode) - { - case sVertical: - // Now draw the vertical selector - // Up -> Pos - if (selectorPos.y != bounds.point.y+1) - GFX->getDrawUtil()->drawLine(selectorPos.x, bounds.point.y, selectorPos.x, selectorPos.y-sMax-1, colorWhiteBlend); - // Down -> Pos - if (selectorPos.y != bounds.point.y+bounds.extent.y) - GFX->getDrawUtil()->drawLine(selectorPos.x, selectorPos.y + sMax, selectorPos.x, bounds.point.y + bounds.extent.y, colorWhiteBlend); - break; - case sHorizontal: - // Now draw the horizontal selector - // Left -> Pos - if (selectorPos.x != bounds.point.x) + if( !mShowReticle ) + return; + + U16 sMax = mSelectorGap*2; + switch (mode) + { + case sVertical: + // Now draw the vertical selector Up -> Pos + if (selectorPos.y != bounds.point.y+1) + GFX->getDrawUtil()->drawLine(selectorPos.x, bounds.point.y, selectorPos.x, selectorPos.y-sMax-1, colorWhiteBlend); + // Down -> Pos + if (selectorPos.y != bounds.point.y+bounds.extent.y) + GFX->getDrawUtil()->drawLine(selectorPos.x, selectorPos.y + sMax, selectorPos.x, bounds.point.y + bounds.extent.y, colorWhiteBlend); + break; + case sHorizontal: + // Now draw the horizontal selector Left -> Pos + if (selectorPos.x != bounds.point.x) GFX->getDrawUtil()->drawLine(bounds.point.x, selectorPos.y-1, selectorPos.x-sMax, selectorPos.y-1, colorWhiteBlend); - // Right -> Pos - if (selectorPos.x != bounds.point.x) + // Right -> Pos + if (selectorPos.x != bounds.point.x) GFX->getDrawUtil()->drawLine(bounds.point.x+mSelectorPos.x+sMax, selectorPos.y-1, bounds.point.x + bounds.extent.x, selectorPos.y-1, colorWhiteBlend); - break; - } + break; + } } //-------------------------------------------------------------------------- @@ -269,10 +283,10 @@ void GuiColorPickerCtrl::renderColorBox(RectI &bounds) pickerBounds.point.y = bounds.point.y+1; pickerBounds.extent.x = bounds.extent.x-1; pickerBounds.extent.y = bounds.extent.y-1; - + if (mProfile->mBorder) GFX->getDrawUtil()->drawRect(bounds, mProfile->mBorderColor); - + Point2I selectorPos = Point2I(bounds.point.x+mSelectorPos.x+1, bounds.point.y+mSelectorPos.y+1); // Draw color box differently depending on mode @@ -338,56 +352,169 @@ void GuiColorPickerCtrl::onRender(Point2I offset, const RectI& updateRect) desc.setZReadWrite(false); desc.zWriteEnable = false; desc.setCullMode(GFXCullNone); - mStateBlock = GFX->createStateBlock( desc ); + mStateBlock = GFX->createStateBlock(desc); } - RectI boundsRect(offset, getExtent()); + RectI boundsRect(offset, getExtent()); renderColorBox(boundsRect); - if (mPositionChanged) + if (mPositionChanged || mBitmap == NULL) { + bool nullBitmap = false; + + if (mPositionChanged == false && mBitmap == NULL) + nullBitmap = true; + mPositionChanged = false; Point2I extent = getRoot()->getExtent(); + // If we are anything but a pallete, change the pick color if (mDisplayMode != pPallet) { Point2I resolution = getRoot()->getExtent(); U32 buf_x = offset.x + mSelectorPos.x + 1; - U32 buf_y = resolution.y - ( extent.y - ( offset.y + mSelectorPos.y + 1 ) ); + U32 buf_y = resolution.y - (extent.y - (offset.y + mSelectorPos.y + 1)); - GFXTexHandle bb( resolution.x, - resolution.y, - GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__) ); - - Point2I tmpPt( buf_x, buf_y ); + GFXTexHandle bb( resolution.x, resolution.y, GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__) ); + + Point2I tmpPt(buf_x, buf_y); GFXTarget *targ = GFX->getActiveRenderTarget(); - targ->resolveTo( bb ); - - GBitmap bmp( bb.getWidth(), bb.getHeight() ); + targ->resolveTo(bb); + + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } + + mBitmap = new GBitmap(bb.getWidth(), bb.getHeight()); + + bb.copyToBmp(mBitmap); + + if (!nullBitmap) + { + if (mSelectColor) + { + Point2I pos = findColor(mSetColor, offset, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; + setSelectorPos(pos); + } + else + { + ColorI tmp; + mBitmap->getColor(buf_x, buf_y, tmp); + + mPickColor = (ColorF)tmp; + + // Now do onAction() if we are allowed + if (mActionOnMove) + onAction(); + } + } + } + } - bb.copyToBmp( &bmp ); - - //bmp.writePNGDebug( "foo.png" ); + //render the children + renderChildControls(offset, updateRect); +} - ColorI tmp; - bmp.getColor( buf_x, buf_y, tmp ); +void GuiColorPickerCtrl::setSelectorPos(const ColorF & color) +{ + if (mBitmap && !mPositionChanged) + { + Point2I resolution = getRoot() ? getRoot()->getExtent() : Point2I(1024, 768); + RectI rect(getGlobalBounds()); + Point2I pos = findColor(color, rect.point, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; - mPickColor = (ColorF)tmp; + setSelectorPos(pos); + } + else + { + mSetColor = color; + mSelectColor = true; + mPositionChanged = true; + } +} + +Point2I GuiColorPickerCtrl::findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp) +{ + RectI rect; + Point2I ext = getExtent(); + if (mDisplayMode != pDropperBackground) + { + ext.x -= 3; + ext.y -= 2; + rect = RectI(Point2I(1, 1), ext); + } + else + { + rect = RectI(Point2I(0, 0), ext); + } + + Point2I closestPos(-1, -1); + + /* Debugging + char filename[256]; + dSprintf( filename, 256, "%s.%s", "colorPickerTest", "png" ); + + // Open up the file on disk. + FileStream fs; + if ( !fs.open( filename, Torque::FS::File::Write ) ) + Con::errorf( "GuiObjectView::saveAsImage() - Failed to open output file '%s'!", filename ); + else + { + // Write it and close. + bmp.writeBitmap( "png", fs ); + + fs.close(); + } + */ - // Now do onAction() if we are allowed - if (mActionOnMove) - onAction(); + ColorI tmp; + U32 buf_x; + U32 buf_y; + ColorF curColor; + F32 val(10000.0f); + F32 closestVal(10000.0f); + bool closestSet = false; + + for (S32 x = rect.point.x; x <= rect.extent.x; x++) + { + for (S32 y = rect.point.y; y <= rect.extent.y; y++) + { + buf_x = offset.x + x + 1; + buf_y = (resolution.y - (offset.y + y + 1)); + buf_y = resolution.y - buf_y; + + //Get the color at that position + bmp.getColor(buf_x, buf_y, tmp); + curColor = (ColorF)tmp; + + //Evaluate how close the color is to our desired color + val = mFabs(color.red - curColor.red) + mFabs(color.green - curColor.green) + mFabs(color.blue - curColor.blue); + + if (!closestSet) + { + closestVal = val; + closestPos.set(x, y); + closestSet = true; + } + else if (val < closestVal) + { + closestVal = val; + closestPos.set(x, y); + } } - } - - //render the children - renderChildControls( offset, updateRect); + + return closestPos; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::setSelectorPos(const Point2I &pos) { Point2I extent = getExtent(); @@ -432,7 +559,6 @@ void GuiColorPickerCtrl::setSelectorPos(const Point2I &pos) } } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseDown(const GuiEvent &event) { if (!mActive) @@ -445,14 +571,14 @@ void GuiColorPickerCtrl::onMouseDown(const GuiEvent &event) if (mProfile->mCanKeyFocus) setFirstResponder(); - - if (mActive && (mDisplayMode != pDropperBackground)) + + if (mActive && (mDisplayMode != pDropperBackground)) onAction(); // Update the picker cross position if (mDisplayMode != pPallet) - setSelectorPos(globalToLocalCoord(event.mousePoint)); - + setSelectorPos(globalToLocalCoord(event.mousePoint)); + mMouseDown = true; } @@ -468,10 +594,8 @@ void GuiColorPickerCtrl::onMouseDragged(const GuiEvent &event) if( !mActionOnMove ) execAltConsoleCallback(); - } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseMove(const GuiEvent &event) { // Only for dropper mode @@ -479,45 +603,40 @@ void GuiColorPickerCtrl::onMouseMove(const GuiEvent &event) setSelectorPos(globalToLocalCoord(event.mousePoint)); } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseEnter(const GuiEvent &event) { mMouseOver = true; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseLeave(const GuiEvent &) { // Reset state mMouseOver = false; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseUp(const GuiEvent &) { //if we released the mouse within this control, perform the action - if (mActive && mMouseDown && (mDisplayMode != pDropperBackground)) + if (mActive && mMouseDown && (mDisplayMode != pDropperBackground)) mMouseDown = false; - if (mActive && (mDisplayMode == pDropperBackground)) + if (mActive && (mDisplayMode == pDropperBackground)) { // In a dropper, the alt command executes the mouse up action (to signal stopping) execAltConsoleCallback(); } - + mouseUnlock(); } -//-------------------------------------------------------------------------- const char *GuiColorPickerCtrl::getScriptValue() { static char temp[256]; ColorF color = getValue(); - dSprintf(temp,256,"%f %f %f %f",color.red, color.green, color.blue, color.alpha); - return temp; + dSprintf( temp, 256, "%f %f %f %f", color.red, color.green, color.blue, color.alpha ); + return temp; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::setScriptValue(const char *value) { ColorF newValue; @@ -537,5 +656,12 @@ DefineConsoleMethod(GuiColorPickerCtrl, setSelectorPos, void, (Point2I newPos), DefineConsoleMethod(GuiColorPickerCtrl, updateColor, void, (), , "Forces update of pick color") { - object->updateColor(); + object->updateColor(); +} + +DefineEngineMethod(GuiColorPickerCtrl, setSelectorColor, void, (ColorF color), , + "Sets the current position of the selector based on a color.n" + "@param color Color to look for.n") +{ + object->setSelectorPos(color); } diff --git a/Engine/source/gui/controls/guiColorPicker.h b/Engine/source/gui/controls/guiColorPicker.h index a9421b7f7f..42531c3bbf 100644 --- a/Engine/source/gui/controls/guiColorPicker.h +++ b/Engine/source/gui/controls/guiColorPicker.h @@ -59,29 +59,28 @@ class GuiColorPickerCtrl : public GuiControl public: enum PickMode { - pPallet = 0, ///< We just have a solid color; We just act like a pallet - pHorizColorRange, ///< We have a range of base colors going horizontally - pVertColorRange, ///< We have a range of base colors going vertically + pPallet = 0, ///< We just have a solid color; We just act like a pallet + pHorizColorRange, ///< We have a range of base colors going horizontally + pVertColorRange, ///< We have a range of base colors going vertically pHorizColorBrightnessRange, ///< HorizColorRange with brightness - pVertColorBrightnessRange, ///< VertColorRange with brightness - pBlendColorRange, ///< We have a box which shows a range in brightness of the color - pHorizAlphaRange, ///< We have a box which shows a range in alpha going horizontally - pVertAlphaRange, ///< We have a box which shows a range in alpha going vertically - pDropperBackground ///< The control does not draw anything; Only does something when you click, or move the mouse (when active) + pVertColorBrightnessRange, ///< VertColorRange with brightness + pBlendColorRange, ///< We have a box which shows a range in brightness of the color + pHorizAlphaRange, ///< We have a box which shows a range in alpha going horizontally + pVertAlphaRange, ///< We have a box which shows a range in alpha going vertically + pDropperBackground ///< The control does not draw anything; Only does something when you click, or move the mouse (when active) }; enum SelectorMode { - sHorizontal = 0, ///< Horizontal selector with small gap - sVertical, ///< Vertical selector with small gap + sHorizontal = 0, ///< Horizontal selector with small gap + sVertical, ///< Vertical selector with small gap }; - + protected: - /// @name Core Rendering functions /// @{ - void renderColorBox(RectI &bounds); ///< Function that draws the actual color box - void drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode); ///< Function that draws the selection indicator + void renderColorBox(RectI &bounds); ///< Function that draws the actual color box + void drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode); /// < Function that draws the selection indicator void drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, ColorF &c3, ColorF &c4); void drawBlendRangeBox(RectI &bounds, bool vertical, U8 numColors, ColorI *colors); /// @} @@ -98,7 +97,11 @@ class GuiColorPickerCtrl : public GuiControl bool mMouseDown; ///< Mouse button down? bool mActionOnMove; ///< Perform onAction() when position has changed? - + bool mSelectColor; + ColorF mSetColor; + GBitmap* mBitmap; + + Point2I findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp); S32 mSelectorGap; ///< The half-way "gap" between the selector pos and where the selector is allowed to draw. @@ -107,12 +110,13 @@ class GuiColorPickerCtrl : public GuiControl static ColorI mColorRange[7]; ///< Color range for pHorizColorRange and pVertColorRange /// @} - public: - + public: + DECLARE_CONOBJECT(GuiColorPickerCtrl); DECLARE_CATEGORY( "Gui Editor" ); GuiColorPickerCtrl(); + ~GuiColorPickerCtrl(); static void initPersistFields(); void onRender(Point2I offset, const RectI &updateRect); @@ -122,18 +126,19 @@ class GuiColorPickerCtrl : public GuiControl /// NOTE: setValue only sets baseColor, since setting pickColor wouldn't be useful void setValue(ColorF &value) {mBaseColor = value;} /// NOTE: getValue() returns baseColor if pallet (since pallet controls can't "pick" colours themselves) - ColorF getValue() {return mDisplayMode == pPallet ? mBaseColor : mPickColor;} + ColorF getValue() { return mDisplayMode == pPallet ? mBaseColor : mPickColor; } const char *getScriptValue(); void setScriptValue(const char *value); void updateColor() {mPositionChanged = true;} /// @} - + /// @name Selector Functions /// @{ void setSelectorPos(const Point2I &pos); ///< Set new pos (in local coords) + void setSelectorPos(const ColorF & color); Point2I getSelectorPos() {return mSelectorPos;} /// @} - + /// @name Input Events /// @{ void onMouseDown(const GuiEvent &); diff --git a/Engine/source/gui/controls/guiGradientCtrl.cpp b/Engine/source/gui/controls/guiGradientCtrl.cpp index e137fabd9c..cf29e3996e 100644 --- a/Engine/source/gui/controls/guiGradientCtrl.cpp +++ b/Engine/source/gui/controls/guiGradientCtrl.cpp @@ -319,81 +319,79 @@ void GuiGradientCtrl::renderColorBox(RectI &bounds) void GuiGradientCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, Vector colorRange) { GFX->setStateBlock(mStateBlock); - - // Create new global dimensions + + // Create new global dimensions S32 l = bounds.point.x + mSwatchFactor, r = bounds.point.x + bounds.extent.x - mSwatchFactor; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - mSwatchFactor; - - // Draw border using new global dimensions - if (mProfile->mBorder) - GFX->getDrawUtil()->drawRect( RectI( Point2I(l,t),Point2I(r,b) ), mProfile->mBorderColor); - - // Update local dimensions - mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t)); - mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b)); - - ColorRange& firstColorRange = colorRange.first(); - - if(colorRange.size() == 1) // Only one color to draw - { - PrimBuild::begin( GFXTriangleFan, 4 ); - - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); - - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( r, b ); - PrimBuild::vertex2i( r, t ); - - PrimBuild::end(); - } - else - { - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); + // Draw border using new global dimensions + if (mProfile->mBorder) + GFX->getDrawUtil()->drawRect(RectI(Point2I(l, t), Point2I(r, b)), mProfile->mBorderColor); - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, b); - PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, t); + // Update local dimensions + mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t)); + mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b)); - PrimBuild::end(); - - for( U16 i = 0;i < colorRange.size() - 1; i++ ) - { - PrimBuild::begin( GFXTriangleFan, 4 ); - if (!vertical) // Horizontal (+x) - { - // First color - PrimBuild::color( colorRange[i].swatch->getColor() ); - PrimBuild::vertex2i( l + colorRange[i].swatch->getPosition().x, t ); - PrimBuild::vertex2i( l + colorRange[i].swatch->getPosition().x, b ); - - // First color - PrimBuild::color( colorRange[i+1].swatch->getColor() ); - PrimBuild::vertex2i( l + colorRange[i+1].swatch->getPosition().x, b ); - PrimBuild::vertex2i( l + colorRange[i+1].swatch->getPosition().x, t ); - } - PrimBuild::end(); - } - - ColorRange& lastColorRange = colorRange.last(); + if (colorRange.size() == 1) // Only one color to draw + { + PrimBuild::begin(GFXTriangleStrip, 4); - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, t); + PrimBuild::vertex2i(r, t); - PrimBuild::color(lastColorRange.swatch->getColor()); - PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, t); - PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, b); - - PrimBuild::color(lastColorRange.swatch->getColor()); - PrimBuild::vertex2i( r, b ); - PrimBuild::vertex2i( r, t ); + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, b); + PrimBuild::vertex2i(r, b); - PrimBuild::end(); - } + PrimBuild::end(); + } + else + { + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, t); + PrimBuild::vertex2i(l + colorRange.first().swatch->getPosition().x, t); + + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, b); + PrimBuild::vertex2i(l + colorRange.first().swatch->getPosition().x, b); + + PrimBuild::end(); + + for (U16 i = 0; i < colorRange.size() - 1; i++) + { + PrimBuild::begin(GFXTriangleStrip, 4); + if (!vertical) // Horizontal (+x) + { + // First color + PrimBuild::color(colorRange[i].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i].swatch->getPosition().x, t); + PrimBuild::color(colorRange[i + 1].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i + 1].swatch->getPosition().x, t); + + // First color + PrimBuild::color(colorRange[i].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i].swatch->getPosition().x, b); + PrimBuild::color(colorRange[i + 1].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i + 1].swatch->getPosition().x, b); + } + PrimBuild::end(); + } + + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(colorRange.last().swatch->getColor()); + PrimBuild::vertex2i(l + colorRange.last().swatch->getPosition().x, t); + PrimBuild::vertex2i(r, t); + + PrimBuild::color(colorRange.last().swatch->getColor()); + PrimBuild::vertex2i(l + colorRange.last().swatch->getPosition().x, b); + PrimBuild::vertex2i(r, b); + + PrimBuild::end(); + } } void GuiGradientCtrl::onMouseDown(const GuiEvent &event) diff --git a/Engine/source/gui/controls/guiTextEditCtrl.cpp b/Engine/source/gui/controls/guiTextEditCtrl.cpp index 3ed1ea40f3..99a1342c0a 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditCtrl.cpp @@ -128,6 +128,8 @@ GuiTextEditCtrl::GuiTextEditCtrl() mActive = true; + mTextValid = true; + mTextOffsetReset = true; mHistoryDirty = false; @@ -1252,14 +1254,16 @@ void GuiTextEditCtrl::onLoseFirstResponder() Parent::onLoseFirstResponder(); } -void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) +void GuiTextEditCtrl::onRender( Point2I offset, const RectI &updateRect ) { RectI ctrlRect( offset, getExtent() ); //if opaque, fill the update rect with the fill color if ( mProfile->mOpaque ) { - if(isFirstResponder()) + if ( !mTextValid ) + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorERR ); + else if ( isFirstResponder() ) GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorHL ); else GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColor ); @@ -1267,7 +1271,11 @@ void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) //if there's a border, draw the border if ( mProfile->mBorder ) + { renderBorder( ctrlRect, mProfile ); + if ( !mTextValid ) + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorERR ); + } drawText( ctrlRect, isFirstResponder() ); } @@ -1490,7 +1498,25 @@ void GuiTextEditCtrl::drawText( const RectI &drawRect, bool isFocused ) bool GuiTextEditCtrl::hasText() { - return (mTextBuffer.length()); + return ( mTextBuffer.length() ); +} + +void GuiTextEditCtrl::invalidText(bool playSound) +{ + mTextValid = false; + + if ( playSound ) + playDeniedSound(); +} + +void GuiTextEditCtrl::validText() +{ + mTextValid = true; +} + +bool GuiTextEditCtrl::isValidText() +{ + return mTextValid; } void GuiTextEditCtrl::playDeniedSound() @@ -1520,27 +1546,29 @@ void GuiTextEditCtrl::handleCharInput( U16 ascii ) //see if it's a number field if ( mProfile->mNumbersOnly ) { - if ( ascii == '-') - { - //a minus sign only exists at the beginning, and only a single minus sign - if ( mCursorPos != 0 && !isAllTextSelected() ) - { - playDeniedSound(); - return; - } - - if ( mInsertOn && ( mTextBuffer.getChar(0) == '-' ) ) - { - playDeniedSound(); - return; - } - } - // BJTODO: This is probably not unicode safe. - else if ( ascii != '.' && (ascii < '0' || ascii > '9') ) - { - playDeniedSound(); - return; - } + if (ascii == '-') + { + //a minus sign only exists at the beginning, and only a single minus sign + if (mCursorPos != 0 && !isAllTextSelected()) + { + invalidText(); + return; + } + + if (mInsertOn && (mTextBuffer.getChar(0) == '-')) + { + invalidText(); + return; + } + } + // BJTODO: This is probably not unicode safe. + else if (ascii != '.' && (ascii < '0' || ascii > '9')) + { + invalidText(); + return; + } + else + validText(); } //save the current state @@ -1748,3 +1776,24 @@ DefineEngineMethod( GuiTextEditCtrl, forceValidateText, void, (),, { object->forceValidateText(); } + +DefineEngineMethod(GuiTextEditCtrl, invalidText, void, (bool playSound), (true), + "@brief Trigger the invalid sound and make the box red.nn" + "@param playSound Play the invalid text sound or not.n") +{ + object->invalidText(playSound); +} + + +DefineEngineMethod(GuiTextEditCtrl, validText, void, (), , + "@brief Restores the box to normal color.nn") +{ + object->validText(); +} + +DefineEngineMethod(GuiTextEditCtrl, isValidText, bool, (), , + "@brief Returns if the text is set to valid or not.n" + "@Return true if text is set to valid, false if not.nn") +{ + return object->isValidText(); +} diff --git a/Engine/source/gui/controls/guiTextEditCtrl.h b/Engine/source/gui/controls/guiTextEditCtrl.h index 1821ef1828..9d29038f7e 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.h +++ b/Engine/source/gui/controls/guiTextEditCtrl.h @@ -93,6 +93,8 @@ class GuiTextEditCtrl : public GuiTextCtrl void playDeniedSound(); void execConsoleCallback(); + bool mTextValid; + virtual void handleCharInput( U16 ascii ); S32 findNextWord(); @@ -119,6 +121,10 @@ class GuiTextEditCtrl : public GuiTextCtrl S32 getCursorPos() { return( mCursorPos ); } void setCursorPos( const S32 newPos ); + void invalidText(bool playSound = true); + void validText(); + bool isValidText(); + bool isAllTextSelected(); void selectAllText(); void clearSelectedText(); diff --git a/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp b/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp index 5d89ec0e29..a3e9c884ff 100644 --- a/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp @@ -355,7 +355,7 @@ void GuiTextEditSliderCtrl::onRender(Point2I offset, const RectI &updateRect) Point2I(start.x+14,midPoint.y), mProfile->mFontColor); - GFXVertexBufferHandle verts(GFX, 6, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, 6, GFXBufferTypeVolatile); verts.lock(); verts[0].color.set( 0, 0, 0 ); diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index 99fb8b4401..a5e833a198 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -36,7 +36,9 @@ #include "gui/editor/editorFunctions.h" #endif #include "console/engineAPI.h" - +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/entity.h" +#endif IMPLEMENT_CONOBJECT(GuiTreeViewCtrl); @@ -486,6 +488,14 @@ void GuiTreeViewCtrl::Item::getDisplayText(U32 bufLen, char *buf) { FrameAllocatorMarker txtAlloc; + //if we're doing the special case of forcing the item text, just skip the rest of this junk + if (mState.test(ForceItemName)) + { + StringTableEntry text = (mScriptInfo.mText) ? mScriptInfo.mText : StringTable->EmptyString(); + dStrncpy(buf, text, bufLen); + return; + } + if( mState.test( InspectorData ) ) { SimObject *pObject = getObject(); @@ -637,6 +647,20 @@ void GuiTreeViewCtrl::Item::getTooltipText(U32 bufLen, char *buf) bool GuiTreeViewCtrl::Item::isParent() const { +#ifdef TORQUE_EXPERIMENTAL_EC + //We might have a special case with entities + //So if our entity either has children, or has some component with the EditorInspect interface, we return true + if (mInspectorInfo.mObject) + { + Entity* e = dynamic_cast(mInspectorInfo.mObject.getObject()); + if (e) + { + if (e->size() > 0 || e->getComponentCount() != 0) + return true; + } + } +#endif + if(mState.test(VirtualParent)) { if( !isInspectorData() ) @@ -1518,6 +1542,11 @@ bool GuiTreeViewCtrl::isValidDragTarget( Item* item ) { bool isValid = true; + // First, check if we're just going to override this from manually setting the ForceAllowDrag flag + // If that's set, we're assuming special circumstances and will just let it go on it's way + if (item->isDragTargetAllowed()) + return true; + // If this is inspector data, first make sure the item accepts all // selected objects as children. This prevents bad surprises when // certain SimSet subclasses reject children and start shoving them @@ -3462,6 +3491,11 @@ void GuiTreeViewCtrl::onMouseDragged(const GuiEvent &event) if (mSelectedItems.size() == 0) return; + //Check through to make sure all attempted dragged items even allow it + for (U32 i = 0; i < mSelectedItems.size(); i++) + if (!mSelectedItems[i]->isDragAllowed()) + return; + // Give us a little delta before we actually start a mouse drag so that // if the user moves the mouse a little while clicking, he/she does not // accidentally trigger a drag. @@ -3756,6 +3790,28 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) if( !item->isInspectorData() && item->mState.test(Item::VirtualParent) ) onVirtualParentExpand(item); +#ifdef TORQUE_EXPERIMENTAL_EC + //Slightly hacky, but I'm not sure of a better setup until we get major update to the editors + //We check if our object is an entity, and if it is, we call a 'onInspect' function. + //This function is pretty much a special notifier to the entity so if it has any behaviors that do special + //stuff in the editor, it can fire that up + if (item->isInspectorData()) + { + Entity* e = dynamic_cast(item->getObject()); + //if (item->mScriptInfo.mText != StringTable->insert("Components")) + { + Entity* e = dynamic_cast(item->getObject()); + if (e) + { + if (item->isExpanded()) + e->onInspect(); + else + e->onEndInspect(); + } + } + } +#endif + mFlags.set( RebuildVisible ); scrollVisible(item); } @@ -4492,6 +4548,13 @@ bool GuiTreeViewCtrl::objectSearch( const SimObject *object, Item **item ) if ( !pItem ) continue; +#ifdef TORQUE_EXPERIMENTAL_EC + //A bit hackish, but we make a special exception here for items that are named 'Components', as they're merely + //virtual parents to act as a container to an Entity's components + if (pItem->mScriptInfo.mText == StringTable->insert("Components")) + continue; +#endif + SimObject *pObj = pItem->getObject(); if ( pObj && pObj == object ) @@ -4555,6 +4618,11 @@ bool GuiTreeViewCtrl::onVirtualParentBuild(Item *item, bool bForceFullUpdate) // Go through our items and purge those that have disappeared from // the set. +#ifdef TORQUE_EXPERIMENTAL_EC + //Entities will be a special case here, if we're an entity, skip this step + if (dynamic_cast(srcObj)) + return true; +#endif for( Item* ptr = item->mChild; ptr != NULL; ) { diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.h b/Engine/source/gui/controls/guiTreeViewCtrl.h index e2360ed873..91f842b3d6 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.h +++ b/Engine/source/gui/controls/guiTreeViewCtrl.h @@ -75,7 +75,10 @@ class GuiTreeViewCtrl : public GuiArrayCtrl ShowClassName = BIT( 11 ), ShowObjectName = BIT( 12 ), ShowInternalName = BIT( 13 ), - ShowClassNameForUnnamed = BIT( 14 ) + ShowClassNameForUnnamed = BIT( 14 ), + ForceItemName = BIT(15), + ForceDragTarget = BIT(16), + DenyDrag = BIT(17), }; GuiTreeViewCtrl* mParentControl; @@ -169,6 +172,14 @@ class GuiTreeViewCtrl : public GuiArrayCtrl /// or false if it's just an item. bool isInspectorData() const { return mState.test(InspectorData); }; + /// Returns true if we've been manually set to allow dragging overrides. + /// As it's a manually set flag, by default it is false. + bool isDragTargetAllowed() const { return mState.test(ForceDragTarget); }; + + /// Returns true if we've been manually set to allow dragging overrides. + /// As it's a manually set flag, by default it is false. + bool isDragAllowed() const { return !mState.test(DenyDrag); }; + /// Returns true if we should show the expand art /// and make the item interact with the mouse as if /// it were a parent. diff --git a/Engine/source/gui/core/guiCanvas.cpp b/Engine/source/gui/core/guiCanvas.cpp index 84fe6e0c26..a3f2344f2b 100644 --- a/Engine/source/gui/core/guiCanvas.cpp +++ b/Engine/source/gui/core/guiCanvas.cpp @@ -321,8 +321,11 @@ void GuiCanvas::setWindowTitle(const char *newTitle) mPlatformWindow->setCaption(newTitle); } +CanvasSizeChangeSignal GuiCanvas::smCanvasSizeChangeSignal; + void GuiCanvas::handleResize( WindowId did, S32 width, S32 height ) { + getCanvasSizeChangeSignal().trigger(this); if (Journal::IsPlaying() && mPlatformWindow) { mPlatformWindow->lockSize(false); diff --git a/Engine/source/gui/core/guiCanvas.h b/Engine/source/gui/core/guiCanvas.h index b1444ce320..fa213f56ae 100644 --- a/Engine/source/gui/core/guiCanvas.h +++ b/Engine/source/gui/core/guiCanvas.h @@ -33,7 +33,11 @@ #include "platform/platformInput.h" #endif -#include "component/interfaces/IProcessInput.h" +#ifndef _SIGNAL_H_ +#include "core/util/tSignal.h" +#endif + +#include "platform/input/IProcessInput.h" #include "windowManager/platformWindowMgr.h" #include "gfx/gfxFence.h" @@ -74,6 +78,8 @@ /// screen will be painted normally. If you are making an animated GuiControl /// you need to add your control to the dirty areas of the canvas. /// +class guiCanvas; +typedef Signal CanvasSizeChangeSignal; class GuiCanvas : public GuiControl, public IProcessInput { @@ -183,6 +189,8 @@ class GuiCanvas : public GuiControl, public IProcessInput virtual void setupFences(); void checkLockMouseMove( const GuiEvent& event ); + //Signal used to let others know this canvas has changed size. + static CanvasSizeChangeSignal smCanvasSizeChangeSignal; GuiControl *mMenuBarCtrl; @@ -200,6 +208,8 @@ class GuiCanvas : public GuiControl, public IProcessInput static void initPersistFields(); + static CanvasSizeChangeSignal& getCanvasSizeChangeSignal() { return smCanvasSizeChangeSignal; } + /// @name Rendering methods /// /// @{ diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index d0d668ed46..f3cacc27a7 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -175,6 +175,9 @@ ImplementEnumType( GuiHorizontalSizing, { GuiControl::horizResizeLeft, "left" }, { GuiControl::horizResizeCenter, "center" }, { GuiControl::horizResizeRelative, "relative" }, + { GuiControl::horizResizeAspectLeft, "aspectLeft" }, + { GuiControl::horizResizeAspectRight, "aspectRight" }, + { GuiControl::horizResizeAspectCenter, "aspectCenter" }, { GuiControl::horizResizeWindowRelative, "windowRelative" } EndImplementEnumType; @@ -186,6 +189,9 @@ ImplementEnumType( GuiVerticalSizing, { GuiControl::vertResizeTop, "top" }, { GuiControl::vertResizeCenter, "center" }, { GuiControl::vertResizeRelative, "relative" }, + { GuiControl::vertResizeAspectTop, "aspectTop" }, + { GuiControl::vertResizeAspectBottom, "aspectBottom" }, + { GuiControl::vertResizeAspectCenter, "aspectCenter" }, { GuiControl::vertResizeWindowRelative, "windowRelative" } EndImplementEnumType; @@ -270,11 +276,11 @@ void GuiControl::initPersistFields() addField("variable", TypeString, Offset(mConsoleVariable, GuiControl), "Name of the variable to which the value of this control will be synchronized." ); - addField("command", TypeRealString, Offset(mConsoleCommand, GuiControl), + addField("command", TypeCommand, Offset(mConsoleCommand, GuiControl), "Command to execute on the primary action of the control.\n\n" "@note Within this script snippet, the control on which the #command is being executed is bound to " "the global variable $ThisControl." ); - addField("altCommand", TypeRealString, Offset(mAltConsoleCommand, GuiControl), + addField("altCommand", TypeCommand, Offset(mAltConsoleCommand, GuiControl), "Command to execute on the secondary action of the control.\n\n" "@note Within this script snippet, the control on which the #altCommand is being executed is bound to " "the global variable $ThisControl." ); @@ -1370,6 +1376,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.x = newLeft; newExtent.x = newWidth; } + else if (mHorizSizing == horizResizeAspectLeft && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + + newPosition.x = newLeft; + newExtent.x = newWidth; + } + else if (mHorizSizing == horizResizeAspectRight && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width + S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width + + S32 offset = rWidth - newWidth; // account for change in relative width + newLeft += offset; + newPosition.x = newLeft; + newExtent.x = newWidth; + } + else if (mHorizSizing == horizResizeAspectCenter && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width + S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width + + S32 offset = rWidth - newWidth; // account for change in relative width + newLeft += offset/2; + newPosition.x = newLeft; + newExtent.x = newWidth; + } if (mVertSizing == vertResizeCenter) newPosition.y = (newParentRect.extent.y - getHeight()) >> 1; @@ -1385,6 +1421,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.y = newTop; newExtent.y = newHeight; } + else if (mVertSizing == vertResizeAspectTop && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + + newPosition.y = newTop; + newExtent.y = newHeight; + } + else if (mVertSizing == vertResizeAspectBottom && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght + S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght + + S32 offset = rHeight - newHeight; // account for change in relative hieght + newTop += offset; + newPosition.y = newTop; + newExtent.y = newHeight; + } + else if (mVertSizing == vertResizeAspectCenter && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght + S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght + + S32 offset = rHeight - newHeight; // account for change in relative hieght + newTop += offset / 2; + newPosition.y = newTop; + newExtent.y = newHeight; + } // Resizing Re factor [9/18/2006] // Only resize if our minExtent is satisfied with it. @@ -2831,9 +2897,9 @@ DefineConsoleMethod( GuiControl, setExtent, void, ( const char* extOrX, const ch "@hide" ) { Point2I extent; - if(!dStrIsEmpty(extOrX) && dStrIsEmpty(y)) + if(!String::isEmpty(extOrX) && String::isEmpty(y)) dSscanf(extOrX, "%d %d", &extent.x, &extent.y); - else if(!dStrIsEmpty(extOrX) && !dStrIsEmpty(y)) + else if(!String::isEmpty(extOrX) && !String::isEmpty(y)) { extent.x = dAtoi(extOrX); extent.y = dAtoi(y); diff --git a/Engine/source/gui/core/guiControl.h b/Engine/source/gui/core/guiControl.h index 4240fbad69..ca873878dd 100644 --- a/Engine/source/gui/core/guiControl.h +++ b/Engine/source/gui/core/guiControl.h @@ -121,6 +121,9 @@ class GuiControl : public SimGroup horizResizeLeft, ///< fixed on the right and width horizResizeCenter, horizResizeRelative, ///< resize relative + horizResizeAspectLeft, ///< resize relative to height delta (offset Left) + horizResizeAspectRight, ///< resize relative to height delta (offset Right) + horizResizeAspectCenter, ///< resize relative to height delta (Centered) horizResizeWindowRelative ///< resize window relative }; enum vertSizingOptions @@ -130,6 +133,9 @@ class GuiControl : public SimGroup vertResizeTop, ///< fixed in height and on the bottom vertResizeCenter, vertResizeRelative, ///< resize relative + vertResizeAspectTop, ///< resize relative to width delta (offset Left) + vertResizeAspectBottom, ///< resize relative to width delta (offset Right) + vertResizeAspectCenter, ///< resize relative to width delta Centered) vertResizeWindowRelative ///< resize window relative }; diff --git a/Engine/source/gui/core/guiTypes.cpp b/Engine/source/gui/core/guiTypes.cpp index dbf96c5177..870ef13555 100644 --- a/Engine/source/gui/core/guiTypes.cpp +++ b/Engine/source/gui/core/guiTypes.cpp @@ -269,6 +269,7 @@ GuiControlProfile::GuiControlProfile(void) : mFillColor(255,0,255,255), mFillColorHL(255,0,255,255), mFillColorNA(255,0,255,255), + mFillColorERR(255,0,0,255), mFillColorSEL(255,0,255,255), mBorderColor(255,0,255,255), mBorderColorHL(255,0,255,255), @@ -334,6 +335,7 @@ GuiControlProfile::GuiControlProfile(void) : mFillColor = def->mFillColor; mFillColorHL = def->mFillColorHL; mFillColorNA = def->mFillColorNA; + mFillColorERR = def->mFillColorERR; mFillColorSEL = def->mFillColorSEL; mBorder = def->mBorder; @@ -398,6 +400,7 @@ void GuiControlProfile::initPersistFields() addField("fillColor", TypeColorI, Offset(mFillColor, GuiControlProfile)); addField("fillColorHL", TypeColorI, Offset(mFillColorHL, GuiControlProfile)); addField("fillColorNA", TypeColorI, Offset(mFillColorNA, GuiControlProfile)); + addField("fillColorERR", TypeColorI, Offset(mFillColorERR, GuiControlProfile)); addField("fillColorSEL", TypeColorI, Offset(mFillColorSEL, GuiControlProfile)); addField("border", TypeS32, Offset(mBorder, GuiControlProfile), "Border type (0=no border)." ); @@ -717,7 +720,7 @@ IMPLEMENT_STRUCT( RectSpacingI, END_IMPLEMENT_STRUCT; -ConsoleType( RectSpacingI, TypeRectSpacingI, RectSpacingI ) +ConsoleType(RectSpacingI, TypeRectSpacingI, RectSpacingI, "") ImplementConsoleTypeCasters( TypeRectSpacingI, RectSpacingI ) ConsoleGetType( TypeRectSpacingI ) diff --git a/Engine/source/gui/core/guiTypes.h b/Engine/source/gui/core/guiTypes.h index c9dc36badc..51f33d21b1 100644 --- a/Engine/source/gui/core/guiTypes.h +++ b/Engine/source/gui/core/guiTypes.h @@ -385,6 +385,7 @@ class GuiControlProfile : public SimObject ColorI mFillColor; ///< Fill color, this is used to fill the bounds of the control if it is opaque ColorI mFillColorHL; ///< This is used instead of mFillColor if the object is highlighted ColorI mFillColorNA; ///< This is used instead of mFillColor if the object is not active or disabled + ColorI mFillColorERR; ///< This is used instead of mFillColor if the object has an error or is invalid ColorI mFillColorSEL; ///< This is used instead of mFillColor if the object is selected S32 mBorder; ///< For most controls, if mBorder is > 0 a border will be drawn, some controls use this to draw different types of borders however @see guiDefaultControlRender.cc diff --git a/Engine/source/gui/editor/guiEditCtrl.h b/Engine/source/gui/editor/guiEditCtrl.h index 7731545f13..38a1ddf34e 100644 --- a/Engine/source/gui/editor/guiEditCtrl.h +++ b/Engine/source/gui/editor/guiEditCtrl.h @@ -114,7 +114,7 @@ class GuiEditCtrl : public GuiControl SimSet* mSelectedSet; // grid drawing - GFXVertexBufferHandle mDots; + GFXVertexBufferHandle mDots; GFXStateBlockRef mDotSB; mouseModes mMouseDownMode; diff --git a/Engine/source/gui/editor/guiFilterCtrl.cpp b/Engine/source/gui/editor/guiFilterCtrl.cpp index a3ea707e85..39f16a99b7 100644 --- a/Engine/source/gui/editor/guiFilterCtrl.cpp +++ b/Engine/source/gui/editor/guiFilterCtrl.cpp @@ -196,7 +196,7 @@ void GuiFilterCtrl::onRender(Point2I offset, const RectI &updateRect) } // draw the curv - GFXVertexBufferHandle verts(GFX, ext.x, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, ext.x, GFXBufferTypeVolatile); verts.lock(); diff --git a/Engine/source/gui/editor/guiGraphCtrl.cpp b/Engine/source/gui/editor/guiGraphCtrl.cpp index e00998b0b3..6dc2243658 100644 --- a/Engine/source/gui/editor/guiGraphCtrl.cpp +++ b/Engine/source/gui/editor/guiGraphCtrl.cpp @@ -177,7 +177,7 @@ void GuiGraphCtrl::onRender(Point2I offset, const RectI &updateRect) for( S32 sample = 0; sample < numSamples; ++ sample ) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::color( mGraphColor[ k ] ); F32 offset = F32( getExtent().x ) / F32( MaxDataPoints ) * F32( sample + 1 ); diff --git a/Engine/source/gui/editor/guiInspector.cpp b/Engine/source/gui/editor/guiInspector.cpp index af12b2810a..c1f54a24df 100644 --- a/Engine/source/gui/editor/guiInspector.cpp +++ b/Engine/source/gui/editor/guiInspector.cpp @@ -29,6 +29,11 @@ #include "gui/containers/guiScrollCtrl.h" #include "gui/editor/inspector/customField.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "gui/editor/inspector/entityGroup.h" +#include "gui/editor/inspector/mountingGroup.h" +#include "gui/editor/inspector/componentGroup.h" +#endif IMPLEMENT_CONOBJECT(GuiInspector); @@ -584,6 +589,43 @@ void GuiInspector::refresh() mGroups.push_back(general); addObject(general); +#ifdef TORQUE_EXPERIMENTAL_EC + //Entity inspector group + if (mTargets.first()->getClassRep()->isSubclassOf("Entity")) + { + GuiInspectorEntityGroup *components = new GuiInspectorEntityGroup("Components", this); + if (components != NULL) + { + components->registerObject(); + mGroups.push_back(components); + addObject(components); + } + + //Mounting group override + GuiInspectorGroup *mounting = new GuiInspectorMountingGroup("Mounting", this); + if (mounting != NULL) + { + mounting->registerObject(); + mGroups.push_back(mounting); + addObject(mounting); + } + } + + if (mTargets.first()->getClassRep()->isSubclassOf("Component")) + { + //Build the component field groups as the component describes it + Component* comp = dynamic_cast(mTargets.first().getPointer()); + + if (comp->getComponentFieldCount() > 0) + { + GuiInspectorComponentGroup *compGroup = new GuiInspectorComponentGroup("Component Fields", this); + compGroup->registerObject(); + mGroups.push_back(compGroup); + addObject(compGroup); + } + } +#endif + // Create the inspector groups for static fields. for( TargetVector::iterator iter = mTargets.begin(); iter != mTargets.end(); ++ iter ) diff --git a/Engine/source/gui/editor/guiPopupMenuCtrl.cpp b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp new file mode 100644 index 0000000000..36e6932030 --- /dev/null +++ b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp @@ -0,0 +1,184 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "gui/editor/guiPopupMenuCtrl.h" +#include "gfx/gfxDrawUtil.h" +#include "gfx/primBuilder.h" +#include "gui/core/guiCanvas.h" + +GuiPopupMenuBackgroundCtrl::GuiPopupMenuBackgroundCtrl(GuiPopupMenuTextListCtrl *textList) +{ + mTextList = textList; + mTextList->mBackground = this; +} + +void GuiPopupMenuBackgroundCtrl::onMouseDown(const GuiEvent &event) +{ + mTextList->setSelectedCell(Point2I(-1, -1)); + close(); +} + +void GuiPopupMenuBackgroundCtrl::onMouseMove(const GuiEvent &event) +{ +} + +void GuiPopupMenuBackgroundCtrl::onMouseDragged(const GuiEvent &event) +{ +} + +void GuiPopupMenuBackgroundCtrl::close() +{ + getRoot()->removeObject(this); +} + +GuiPopupMenuTextListCtrl::GuiPopupMenuTextListCtrl() +{ + isSubMenu = false; // Added + mMenu = NULL; + mMenuBar = NULL; + mPopup = NULL; +} + +void GuiPopupMenuTextListCtrl::onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver) +{ + if (dStrcmp(mList[cell.y].text + 3, "-\t")) // Was: dStrcmp(mList[cell.y].text + 2, "-\t")) but has been changed to take into account the submenu flag + Parent::onRenderCell(offset, cell, selected, mouseOver); + else + { + S32 yp = offset.y + mCellSize.y / 2; + GFX->getDrawUtil()->drawLine(offset.x, yp, offset.x + mCellSize.x, yp, ColorI(128, 128, 128)); + GFX->getDrawUtil()->drawLine(offset.x, yp + 1, offset.x + mCellSize.x, yp + 1, ColorI(255, 255, 255)); + } + // now see if there's a bitmap... + U8 idx = mList[cell.y].text[0]; + if (idx != 1) + { + // there's a bitmap... + U32 index = U32(idx - 2) * 3; + if (!mList[cell.y].active) + index += 2; + else if (selected || mouseOver) + index++; + + if (mProfile->mBitmapArrayRects.size() > index) + { + RectI rect = mProfile->mBitmapArrayRects[index]; + Point2I off = maxBitmapSize - rect.extent; + off /= 2; + + GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, offset + off, rect); + } + } + + // Check if this is a submenu + idx = mList[cell.y].text[1]; + if (idx != 1) + { + // This is a submenu, so draw an arrow + S32 left = offset.x + mCellSize.x - 12; + S32 right = left + 8; + S32 top = mCellSize.y / 2 + offset.y - 4; + S32 bottom = top + 8; + S32 middle = top + 4; + + PrimBuild::begin(GFXTriangleList, 3); + if (selected || mouseOver) + PrimBuild::color(mProfile->mFontColorHL); + else + PrimBuild::color(mProfile->mFontColor); + + PrimBuild::vertex2i(left, top); + PrimBuild::vertex2i(right, middle); + PrimBuild::vertex2i(left, bottom); + PrimBuild::end(); + } +} + +bool GuiPopupMenuTextListCtrl::onKeyDown(const GuiEvent &event) +{ + //if the control is a dead end, don't process the input: + if (!mVisible || !mActive || !mAwake) + return false; + + //see if the key down is a or not + if (event.modifier == 0) + { + if (event.keyCode == KEY_RETURN) + { + mBackground->close(); + return true; + } + else if (event.keyCode == KEY_ESCAPE) + { + mSelectedCell.set(-1, -1); + mBackground->close(); + return true; + } + } + + //otherwise, pass the event to it's parent + return Parent::onKeyDown(event); +} + +void GuiPopupMenuTextListCtrl::onMouseDown(const GuiEvent &event) +{ + Parent::onMouseDown(event); +} + +void GuiPopupMenuTextListCtrl::onMouseUp(const GuiEvent &event) +{ + Parent::onMouseUp(event); + + S32 selectionIndex = getSelectedCell().y; + + if (selectionIndex != -1) + { + GuiMenuBar::MenuItem *list = mMenu->firstMenuItem; + + while (selectionIndex && list) + { + list = list->nextMenuItem; + selectionIndex--; + } + if (list) + { + if (list->enabled) + dAtob(Con::executef(mPopup, "onSelectItem", Con::getIntArg(getSelectedCell().y), list->text ? list->text : "")); + } + } + + mSelectedCell.set(-1, -1); + mBackground->close(); +} + +void GuiPopupMenuTextListCtrl::onCellHighlighted(Point2I cell) +{ + // If this text list control is part of a submenu, then don't worry about + // passing this along + if (!isSubMenu) + { + RectI globalbounds(getBounds()); + Point2I globalpoint = localToGlobalCoord(globalbounds.point); + globalbounds.point = globalpoint; + } +} \ No newline at end of file diff --git a/Engine/source/gui/editor/guiPopupMenuCtrl.h b/Engine/source/gui/editor/guiPopupMenuCtrl.h new file mode 100644 index 0000000000..c26fa855de --- /dev/null +++ b/Engine/source/gui/editor/guiPopupMenuCtrl.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#pragma once + +#ifndef GUI_POPUP_MENU_CTRL_H +#define GUI_POPUP_MENU_CTRL_H + +#ifndef _GUITEXTLISTCTRL_H_ +#include "gui/controls/guiTextListCtrl.h" +#endif + +#ifndef _GUIMENUBAR_H_ +#include "gui/editor/guiMenuBar.h" +#endif + +#ifndef _POPUPMENU_H_ +#include "platform/menus/popupMenu.h" +#endif + +class GuiPopupMenuBackgroundCtrl; + +class GuiPopupMenuTextListCtrl : public GuiTextListCtrl +{ + friend class GuiPopupMenuBackgroundCtrl; + +private: + typedef GuiTextListCtrl Parent; + + GuiPopupMenuBackgroundCtrl* mBackground; + +public: + bool isSubMenu; // Indicates that this text list is in a submenu + Point2I maxBitmapSize; + GuiMenuBar::Menu* mMenu; + GuiMenuBar* mMenuBar; + PopupMenu* mPopup; + + GuiPopupMenuTextListCtrl(); + + // GuiControl overloads: + bool onKeyDown(const GuiEvent &event); + void onMouseDown(const GuiEvent &event); + void onMouseUp(const GuiEvent &event); + void onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver); + + virtual void onCellHighlighted(Point2I cell); // Added +}; + +class GuiPopupMenuBackgroundCtrl : public GuiControl +{ + typedef GuiControl Parent; + +protected: + GuiPopupMenuTextListCtrl *mTextList; + +public: + GuiPopupMenuBackgroundCtrl(GuiPopupMenuTextListCtrl* textList); + void onMouseDown(const GuiEvent &event); + void onMouseMove(const GuiEvent &event); + void onMouseDragged(const GuiEvent &event); + + void close(); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gui/editor/inspector/componentGroup.cpp b/Engine/source/gui/editor/inspector/componentGroup.cpp new file mode 100644 index 0000000000..7d6d30eaa1 --- /dev/null +++ b/Engine/source/gui/editor/inspector/componentGroup.cpp @@ -0,0 +1,252 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/componentGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/components/component.h" +#include "gui/editor/inspector/field.h" + +#include "console/engineAPI.h" + +IMPLEMENT_CONOBJECT(GuiInspectorComponentGroup); + +ConsoleDocClass(GuiInspectorComponentGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" + ); + +GuiInspectorComponentGroup::GuiInspectorComponentGroup(StringTableEntry groupName, SimObjectPtr parent) +: GuiInspectorGroup(groupName, parent) +{ + /*mNeedScroll=false;*/ +}; + +bool GuiInspectorComponentGroup::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorComponentGroup - add custom controls +//----------------------------------------------------------------------------- +bool GuiInspectorComponentGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + Con::evaluatef("%d.stack = %d;", this->getId(), mStack->getId()); + + Con::executef(this, "createContent"); + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorComponentGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorComponentGroup::inspectGroup() +{ + // We can't inspect a group without a target! + if (!mParent || !mParent->getNumInspectObjects()) + return false; + + clearFields(); + + // to prevent crazy resizing, we'll just freeze our stack for a sec.. + mStack->freeze(true); + + bool bNoGroup = false; + + bool bNewItems = false; + bool bMakingArray = false; + GuiStackControl *pArrayStack = NULL; + GuiRolloutCtrl *pArrayRollout = NULL; + bool bGrabItems = false; + + Component* comp = dynamic_cast(getInspector()->getInspectObject(0)); + + //if this isn't a component, what are we even doing here? + if (!comp) + return false; + + for (U32 i = 0; i < comp->getComponentFieldCount(); i++) + { + ComponentField* field = comp->getComponentField(i); + + bNewItems = true; + + GuiInspectorField *fieldGui = constructField(field->mFieldType); + if (fieldGui == NULL) + fieldGui = new GuiInspectorField(); + + fieldGui->init(mParent, this); + + AbstractClassRep::Field *refField; + + //check dynamics + SimFieldDictionary* fieldDictionary = comp->getFieldDictionary(); + SimFieldDictionaryIterator itr(fieldDictionary); + + while (*itr) + { + SimFieldDictionary::Entry* entry = *itr; + if (entry->slotName == field->mFieldName) + { + AbstractClassRep::Field f; + f.pFieldname = StringTable->insert(field->mFieldName); + + if (field->mFieldDescription) + f.pFieldDocs = field->mFieldDescription; + + f.type = field->mFieldType; + f.offset = -1; + f.elementCount = 1; + f.validator = NULL; + f.flag = 0; //change to be the component type + + f.setDataFn = &defaultProtectedSetFn; + f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; + + f.pFieldDocs = field->mFieldDescription; + + f.pGroupname = "Component Fields"; + + ConsoleBaseType* conType = ConsoleBaseType::getType(field->mFieldType); + AssertFatal(conType, "ConsoleObject::addField - invalid console type"); + f.table = conType->getEnumTable(); + + tempFields.push_back(f); + + refField = &f; + + break; + } + ++itr; + } + + if (!refField) + continue; + + fieldGui->setInspectorField(&tempFields[tempFields.size() - 1]); + + if (fieldGui->registerObject()) + { +#ifdef DEBUG_SPEW + Platform::outputDebugString("[GuiInspectorGroup] Adding field '%s'", + field->pFieldname); +#endif + + mChildren.push_back(fieldGui); + mStack->addObject(fieldGui); + } + else + { + SAFE_DELETE(fieldGui); + } + } + + mStack->freeze(false); + mStack->updatePanes(); + + // If we've no new items, there's no need to resize anything! + if (bNewItems == false && !mChildren.empty()) + return true; + + sizeToContents(); + + setUpdate(); + + return true; +} + +void GuiInspectorComponentGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorComponentGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; +} +ConsoleMethod(GuiInspectorComponentGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorComponentGroup::clearFields() +{ + // delete everything else + mStack->clear(); + + // clear the mChildren list. + mChildren.clear(); +} + +SimFieldDictionary::Entry* GuiInspectorComponentGroup::findDynamicFieldInDictionary(StringTableEntry fieldName) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for (SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if (entry->slotName == fieldName) + return entry; + } + + return NULL; +} + +void GuiInspectorComponentGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorComponentGroup::findObjectBehaviorField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for (AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++itr) + { + AbstractClassRep::Field* field = &(*itr); + String fldNm(field->pFieldname); + if (fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod(GuiInspectorComponentGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();") +{ + object->addDynamicField(); +} + +ConsoleMethod(GuiInspectorComponentGroup, removeDynamicField, void, 3, 3, "") +{ +} diff --git a/Engine/source/gui/editor/inspector/componentGroup.h b/Engine/source/gui/editor/inspector/componentGroup.h new file mode 100644 index 0000000000..34b748c98f --- /dev/null +++ b/Engine/source/gui/editor/inspector/componentGroup.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_COMPONENT_GROUP_H +#define GUI_INSPECTOR_COMPONENT_GROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/components/component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +class GuiInspectorComponentGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + Vector tempFields; + +public: + DECLARE_CONOBJECT(GuiInspectorComponentGroup); + GuiInspectorComponentGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorComponentGroup(StringTableEntry groupName, SimObjectPtr parent); + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorComponentGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + virtual bool onAdd(); + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary(StringTableEntry fieldName); + + AbstractClassRep::Field* findObjectBehaviorField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + +}; + +#endif diff --git a/Engine/source/gui/editor/inspector/dynamicGroup.cpp b/Engine/source/gui/editor/inspector/dynamicGroup.cpp index ef5d98b3ac..78d8c4bd8f 100644 --- a/Engine/source/gui/editor/inspector/dynamicGroup.cpp +++ b/Engine/source/gui/editor/inspector/dynamicGroup.cpp @@ -26,6 +26,10 @@ #include "gui/editor/inspector/dynamicField.h" #include "console/engineAPI.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/components/component.h" +#endif + IMPLEMENT_CONOBJECT(GuiInspectorDynamicGroup); ConsoleDocClass( GuiInspectorDynamicGroup, @@ -122,6 +126,16 @@ bool GuiInspectorDynamicGroup::inspectGroup() SimFieldDictionary * fieldDictionary = target->getFieldDictionary(); for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) { +#ifdef TORQUE_EXPERIMENTAL_EC + if (target->getClassRep()->isSubclassOf("Component")) + { + Component* compTarget = dynamic_cast(target); + + ComponentField* compField = compTarget->getComponentField((*ditr)->slotName); + if (compField) + continue; + } +#endif if( i == 0 ) { flist.increment(); diff --git a/Engine/source/gui/editor/inspector/entityGroup.cpp b/Engine/source/gui/editor/inspector/entityGroup.cpp new file mode 100644 index 0000000000..c833d336d4 --- /dev/null +++ b/Engine/source/gui/editor/inspector/entityGroup.cpp @@ -0,0 +1,137 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/entityGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/components/component.h" + +#include "console/engineAPI.h" + +IMPLEMENT_CONOBJECT(GuiInspectorEntityGroup); + +ConsoleDocClass(GuiInspectorEntityGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" + ); + +bool GuiInspectorEntityGroup::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorEntityGroup - add custom controls +//----------------------------------------------------------------------------- +bool GuiInspectorEntityGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + Con::evaluatef("%d.stack = %d;", this->getId(), mStack->getId()); + + Con::executef(this, "createContent"); + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorEntityGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorEntityGroup::inspectGroup() +{ + const U32 numTargets = mParent->getNumInspectObjects(); + if (numTargets == 1) + { + Entity* target = dynamic_cast(mParent->getInspectObject(0)); + + Con::executef(this, "inspectObject", target->getIdString()); + } + + return true; +} + +void GuiInspectorEntityGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorEntityGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; +} +ConsoleMethod(GuiInspectorEntityGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorEntityGroup::clearFields() +{ +} + +SimFieldDictionary::Entry* GuiInspectorEntityGroup::findDynamicFieldInDictionary(StringTableEntry fieldName) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for (SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if (entry->slotName == fieldName) + return entry; + } + + return NULL; +} + +void GuiInspectorEntityGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorEntityGroup::findObjectBehaviorField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for (AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++itr) + { + AbstractClassRep::Field* field = &(*itr); + String fldNm(field->pFieldname); + if (fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod(GuiInspectorEntityGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();") +{ + object->addDynamicField(); +} + +ConsoleMethod(GuiInspectorEntityGroup, removeDynamicField, void, 3, 3, "") +{ +} diff --git a/Engine/source/gui/editor/inspector/entityGroup.h b/Engine/source/gui/editor/inspector/entityGroup.h new file mode 100644 index 0000000000..00944cda13 --- /dev/null +++ b/Engine/source/gui/editor/inspector/entityGroup.h @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_ENTITY_GROUP_H +#define GUI_INSPECTOR_ENTITY_GROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/components/component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +class GuiInspectorEntityGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + GuiPopUpMenuCtrlEx* mAddBhvrList; + +public: + DECLARE_CONOBJECT(GuiInspectorEntityGroup); + GuiInspectorEntityGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorEntityGroup(StringTableEntry groupName, SimObjectPtr parent) + : GuiInspectorGroup(groupName, parent) { /*mNeedScroll=false;*/ + }; + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorEntityGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + virtual bool onAdd(); + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary(StringTableEntry fieldName); + + AbstractClassRep::Field* findObjectBehaviorField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + +}; + +#endif diff --git a/Engine/source/gui/editor/inspector/field.cpp b/Engine/source/gui/editor/inspector/field.cpp index ac72b2e043..45aa1b2b0d 100644 --- a/Engine/source/gui/editor/inspector/field.cpp +++ b/Engine/source/gui/editor/inspector/field.cpp @@ -284,7 +284,8 @@ void GuiInspectorField::setData( const char* data, bool callbacks ) || type == TypeMatrixPosition || type == TypeMatrixRotation || type == TypeBox3F - || type == TypeRectUV ) + || type == TypeRectUV + || type == TypeRotationF) { //TODO: we should actually take strings into account and not chop things up between quotes diff --git a/Engine/source/gui/editor/inspector/mountingGroup.cpp b/Engine/source/gui/editor/inspector/mountingGroup.cpp new file mode 100644 index 0000000000..7afa531055 --- /dev/null +++ b/Engine/source/gui/editor/inspector/mountingGroup.cpp @@ -0,0 +1,507 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/mountingGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/entity.h" +#include "T3D/components/component.h" + +//Need this to get node lists +#include "T3D/components/render/renderComponentInterface.h" + +IMPLEMENT_CONOBJECT(GuiInspectorMountingGroup); + +ConsoleDocClass( GuiInspectorMountingGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" +); + +//----------------------------------------------------------------------------- +// GuiInspectorMountingGroup - add custom controls +//----------------------------------------------------------------------------- +GuiInspectorMountingGroup::GuiInspectorMountingGroup( StringTableEntry groupName, SimObjectPtr parent ) + : GuiInspectorGroup( groupName, parent) +{ + mParentInspector = parent; + + targetMountCtrl = NULL; + mountCtrl = NULL; +}; + +bool GuiInspectorMountingGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + //give the necessary padding for the nested controls so it looks nice. + setMargin(RectI(4,0,4,4)); + + return true; +} + +GuiControl* GuiInspectorMountingGroup::buildMenuCtrl() +{ + GuiControl* retCtrl = new GuiPopUpMenuCtrl(); + + // If we couldn't construct the control, bail! + if( retCtrl == NULL ) + return retCtrl; + + GuiPopUpMenuCtrl *menu = dynamic_cast(retCtrl); + + // Let's make it look pretty. + retCtrl->setDataField( StringTable->insert("profile"), NULL, "GuiPopUpMenuProfile" ); + //GuiInspectorTypeMenuBase::_registerEditControl( retCtrl ); + + char szName[512]; + dSprintf( szName, 512, "IE_%s_%d_%s_Field", retCtrl->getClassName(), mParentInspector->getInspectObject()->getId(), mCaption.c_str()); + + // Register the object + retCtrl->registerObject( szName ); + + // Configure it to update our value when the popup is closed + char szBuffer[512]; + dSprintf( szBuffer, 512, "%d.apply( %d.getText() );", getId(), menu->getId() ); + menu->setField("Command", szBuffer ); + + return menu; +} + +bool GuiInspectorMountingGroup::buildList(Entity* ent, GuiPopUpMenuCtrl* menu) +{ + RenderComponentInterface* renderInterface = ent->getComponent(); + + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + S32 nodeCount = shape ? shape->nodes.size() : 0; + + for(U32 i=0; i < nodeCount; i++) + { + menu->addEntry(shape->names[i], i); + } + + return true; + } + + return false; +} + +//----------------------------------------------------------------------------- +// GuiInspectorMountingGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorMountingGroup::inspectGroup() +{ + // We can't inspect a group without a target! + if( !mParent->getNumInspectObjects() ) + return false; + + // to prevent crazy resizing, we'll just freeze our stack for a sec.. + mStack->freeze(true); + + bool bNoGroup = false; + + // Un-grouped fields are all sorted into the 'general' group + if ( dStricmp( mCaption, "General" ) == 0 ) + bNoGroup = true; + + // Just delete all fields and recreate them (like the dynamicGroup) + // because that makes creating controls for array fields a lot easier + clearFields(); + + bool bNewItems = false; + bool bMakingArray = false; + GuiStackControl *pArrayStack = NULL; + GuiRolloutCtrl *pArrayRollout = NULL; + bool bGrabItems = false; + + AbstractClassRep* commonAncestorClass = findCommonAncestorClass(); + AbstractClassRep::FieldList& fieldList = commonAncestorClass->mFieldList; + for( AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++ itr ) + { + AbstractClassRep::Field* field = &( *itr ); + if( field->type == AbstractClassRep::StartGroupFieldType ) + { + // If we're dealing with general fields, always set grabItems to true (to skip them) + if( bNoGroup == true ) + bGrabItems = true; + else if( dStricmp( field->pGroupname, mCaption ) == 0 ) + bGrabItems = true; + continue; + } + else if ( field->type == AbstractClassRep::EndGroupFieldType ) + { + // If we're dealing with general fields, always set grabItems to false (to grab them) + if( bNoGroup == true ) + bGrabItems = false; + else if( dStricmp( field->pGroupname, mCaption ) == 0 ) + bGrabItems = false; + continue; + } + + // Skip field if it has the HideInInspectors flag set. + + if( field->flag.test( AbstractClassRep::FIELD_HideInInspectors ) ) + continue; + + if( ( bGrabItems == true || ( bNoGroup == true && bGrabItems == false ) ) && itr->type != AbstractClassRep::DeprecatedFieldType ) + { + if( bNoGroup == true && bGrabItems == true ) + continue; + + // If the field already exists, just update it + GuiInspectorField *fieldGui = findField( field->pFieldname ); + if ( fieldGui != NULL ) + { + fieldGui->updateValue(); + continue; + } + + bNewItems = true; + + if(field->pFieldname == StringTable->insert("mountNode")) + { + fieldGui = new GuiInspectorNodeListField(); + + Entity* e = dynamic_cast(mParent->getInspectObject(0)); + if(e) + (dynamic_cast(fieldGui))->setTargetEntity(e); + } + else + { + fieldGui = constructField( field->type ); + if ( fieldGui == NULL ) + fieldGui = new GuiInspectorField(); + } + + fieldGui->init( mParent, this ); + fieldGui->setInspectorField( field ); + + if( fieldGui->registerObject() ) + { + #ifdef DEBUG_SPEW + Platform::outputDebugString( "[GuiInspectorGroup] Adding field '%s'", + field->pFieldname ); + #endif + + mChildren.push_back( fieldGui ); + mStack->addObject( fieldGui ); + } + else + { + SAFE_DELETE( fieldGui ); + } + } + } + mStack->freeze(false); + mStack->updatePanes(); + + // If we've no new items, there's no need to resize anything! + if( bNewItems == false && !mChildren.empty() ) + return true; + + sizeToContents(); + + setUpdate(); + + return true; +} + +void GuiInspectorMountingGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorMountingGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; + bool test = false; +} +ConsoleMethod(GuiInspectorMountingGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorMountingGroup::clearFields() +{ +} + +bool GuiInspectorMountingGroup::resize( const Point2I &newPosition, const Point2I &newExtent ) +{ + if ( !Parent::resize( newPosition, newExtent ) ) + return false; + + //check if we're set up yet + if(!targetMountCtrl || !mountCtrl) + //no? bail + return false; + + targetMountCtrl->setExtent(newExtent.x, 18); + mountCtrl->setExtent(newExtent.x, 18); + + S32 dividerPos, dividerMargin; + mParentInspector->getDivider( dividerPos, dividerMargin ); + + Point2I fieldExtent = Point2I(newExtent.x, 18); + Point2I fieldPos = Point2I(newExtent.x, 18); + + S32 editWidth = dividerPos - dividerMargin; + + targetMountText->setPosition(0,0); + targetMountText->setExtent(fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); + + targetMountNode->setPosition(fieldExtent.x - dividerPos + dividerMargin, 1); + targetMountNode->setExtent(editWidth, fieldExtent.y - 1); + + mountText->setPosition(0,0); + mountText->setExtent(fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); + + mountNode->setPosition(fieldExtent.x - dividerPos + dividerMargin, 1); + mountNode->setExtent(editWidth, fieldExtent.y - 1); + + return true; +} + +SimFieldDictionary::Entry* GuiInspectorMountingGroup::findDynamicFieldInDictionary( StringTableEntry fieldName ) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if( entry->slotName == fieldName ) + return entry; + } + + return NULL; +} + +void GuiInspectorMountingGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorMountingGroup::findObjectComponentField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for( AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++ itr ) + { + AbstractClassRep::Field* field = &( *itr ); + String fldNm(field->pFieldname); + if(fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod( GuiInspectorMountingGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();" ) +{ + object->addDynamicField(); +} + +ConsoleMethod( GuiInspectorMountingGroup, removeDynamicField, void, 3, 3, "" ) +{ +} + +// +IMPLEMENT_CONOBJECT( GuiInspectorNodeListField ); + +ConsoleDocClass( GuiInspectorNodeListField, + "@brief A control that allows to edit the custom properties (text) of one or more SimObjects.\n\n" + "Editor use only.\n\n" + "@internal" +); + +GuiInspectorNodeListField::GuiInspectorNodeListField( GuiInspector *inspector, + GuiInspectorGroup* parent, + SimFieldDictionary::Entry* field, + SimObjectPtr target ) +{ + mInspector = inspector; + mParent = parent; + setBounds(0,0,100,20); + mTargetEntity = target; +} + +GuiInspectorNodeListField::GuiInspectorNodeListField() +{ + mInspector = NULL; + mParent = NULL; +} + +void GuiInspectorNodeListField::setData( const char* data, bool callbacks ) +{ + mCustomValue = data; + + //We aren't updating any mounting info if we're not mounted already + if(mTargetEntity.getObject()) + { + Entity* target = dynamic_cast(mTargetEntity->getObjectMount()); + if(target) + { + RenderComponentInterface* renderInterface = target->getComponent(); + if (renderInterface) + { + if (renderInterface->getShape()) + { + S32 nodeIdx = renderInterface->getShape()->findNode(data); + + target->mountObject(mTargetEntity, nodeIdx, MatrixF::Identity); + mTargetEntity->setMaskBits(Entity::MountedMask); + } + } + } + } + + // Force our edit to update + updateValue(); +} + +const char* GuiInspectorNodeListField::getData( U32 inspectObjectIndex ) +{ + return mCustomValue; +} + +void GuiInspectorNodeListField::updateValue() +{ + mMenu->clear(); + //mMenu->addEntry("Origin"); + + //if(mCustomValue.isEmpty()) + if(mTargetEntity.getObject()) + { + Entity* target = dynamic_cast(mTargetEntity->getObjectMount()); + if(target) + { + mMenu->addEntry("Origin"); + mMenu->setActive(true); + + RenderComponentInterface* renderInterface = target->getComponent(); + + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + + S32 nodeCount = shape ? shape->nodes.size() : 0; + + for(U32 i=0; i < nodeCount; i++) + { + mMenu->addEntry(shape->names[i], i); + } + + S32 targetNode = mTargetEntity->getMountNode(); + if(targetNode != -1) + { + String name = shape->names[targetNode]; + mCustomValue = name; + } + else + { + mCustomValue = String("Origin"); + } + + setValue( mCustomValue ); + return; + } + } + } + + setValue("Not Mounted"); + mMenu->setActive(false); +} + +void GuiInspectorNodeListField::setDoc( const char* doc ) +{ + mDoc = StringTable->insert( doc, true ); +} + +void GuiInspectorNodeListField::setToolTip( StringTableEntry data ) +{ + static StringTableEntry sTooltipProfile = StringTable->insert( "tooltipProfile" ); + static StringTableEntry sHoverTime = StringTable->insert( "hovertime" ); + static StringTableEntry sTooltip = StringTable->insert( "tooltip" ); + + mEdit->setDataField( sTooltipProfile, NULL, "GuiToolTipProfile" ); + mEdit->setDataField( sHoverTime, NULL, "1000" ); + mEdit->setDataField( sTooltip, NULL, data ); +} + +bool GuiInspectorNodeListField::onAdd() +{ + if( !Parent::onAdd() ) + return false; + + return true; +} + +void GuiInspectorNodeListField::setInspectorField( AbstractClassRep::Field *field, + StringTableEntry caption, + const char*arrayIndex ) +{ + // Override the base just to be sure it doesn't get called. + // We don't use an AbstractClassRep::Field... + + mField = field; + mCaption = field->pFieldname; + mDoc = field->pFieldDocs; +} + +GuiControl* GuiInspectorNodeListField::constructEditControl() +{ + GuiControl* retCtrl = new GuiPopUpMenuCtrl(); + + mMenu = dynamic_cast(retCtrl); + + static StringTableEntry sProfile = StringTable->insert( "profile" ); + retCtrl->setDataField( sProfile, NULL, "ToolsGuiPopUpMenuEditProfile" ); + + // Register the object + retCtrl->registerObject(); + + char szBuffer[512]; + dSprintf( szBuffer, 512, "%d.apply( %d.getText() );", getId(), mMenu->getId() ); + mMenu->setField("Command", szBuffer ); + + return retCtrl; +} + +void GuiInspectorNodeListField::setValue( const char* newValue ) +{ + GuiPopUpMenuCtrl *ctrl = dynamic_cast( mEdit ); + if( ctrl != NULL ) + ctrl->setText( newValue ); +} + +void GuiInspectorNodeListField::_executeSelectedCallback() +{ +} + +void GuiInspectorNodeListField::setTargetEntity(SimObjectPtr target) +{ + mTargetEntity = target; +} \ No newline at end of file diff --git a/Engine/source/gui/editor/inspector/mountingGroup.h b/Engine/source/gui/editor/inspector/mountingGroup.h new file mode 100644 index 0000000000..5c4bdac753 --- /dev/null +++ b/Engine/source/gui/editor/inspector/mountingGroup.h @@ -0,0 +1,152 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_MOUNTINGGROUP_H +#define GUI_INSPECTOR_MOUNTINGGROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/components/component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +#ifndef _GUI_INSPECTOR_TYPES_H_ +#include "gui/editor/guiInspectorTypes.h" +#endif + +#ifndef _ENTITY_H_ +#include "T3D/entity.h" +#endif + +class GuiInspectorMountingGroup; + +class GuiInspectorNodeListField : public GuiInspectorField +{ + typedef GuiInspectorField Parent; + friend class GuiInspectorMountingGroup; + +public: + + GuiInspectorNodeListField( GuiInspector *inspector, GuiInspectorGroup* parent, SimFieldDictionary::Entry* field, + SimObjectPtr target ); + GuiInspectorNodeListField(); + ~GuiInspectorNodeListField() {}; + + DECLARE_CONOBJECT( GuiInspectorNodeListField ); + + virtual void setData( const char* data, bool callbacks = true ); + virtual const char* getData( U32 inspectObjectIndex = 0 ); + virtual void updateValue(); + virtual StringTableEntry getFieldName() { return StringTable->EmptyString(); } + + virtual void setDoc( const char* doc ); + virtual void setToolTip( StringTableEntry data ); + + virtual bool onAdd(); + + virtual void setInspectorField( AbstractClassRep::Field *field, + StringTableEntry caption = NULL, + const char *arrayIndex = NULL ); + + virtual GuiControl* constructEditControl(); + + virtual void setValue( const char* newValue ); + + void setTargetEntity(SimObjectPtr target); + +protected: + + virtual void _executeSelectedCallback(); + +protected: + + String mCustomValue; + StringTableEntry mDoc; + + GuiPopUpMenuCtrl *mMenu; + + SimObjectPtr mTargetEntity; +}; + +class GuiInspectorMountingGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + GuiPopUpMenuCtrlEx* mAddBhvrList; + + GuiTextCtrl *persistText; + GuiButtonCtrl *reloadFile; + GuiButtonCtrl *saveFile; + GuiButtonCtrl *overwriteFile; + GuiButtonCtrl *mBrowseButton; + GuiControl *filePath; + + GuiControl *targetMountCtrl; + GuiTextCtrl *targetMountText; + GuiPopUpMenuCtrl *targetMountNode; + + GuiControl *mountCtrl; + GuiTextCtrl *mountText; + GuiPopUpMenuCtrl *mountNode; + + GuiInspectorNodeListField* mountNodeList; + GuiInspectorNodeListField* targetMountNodeList; + + SimObjectPtr mParentInspector; + +public: + DECLARE_CONOBJECT(GuiInspectorMountingGroup); + GuiInspectorMountingGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorMountingGroup( StringTableEntry groupName, SimObjectPtr parent ); + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorMountingGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + virtual bool resize( const Point2I &newPosition, const Point2I &newExtent ); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary( StringTableEntry fieldName ); + + AbstractClassRep::Field* findObjectComponentField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + + GuiControl* buildMenuCtrl(); + + bool buildList(Entity* ent, GuiPopUpMenuCtrl* menu); +}; + +#endif diff --git a/Engine/source/gui/theora/guiTheoraCtrl.cpp b/Engine/source/gui/theora/guiTheoraCtrl.cpp index 145b3474cd..f6d5fd2137 100644 --- a/Engine/source/gui/theora/guiTheoraCtrl.cpp +++ b/Engine/source/gui/theora/guiTheoraCtrl.cpp @@ -73,6 +73,7 @@ GuiTheoraCtrl::GuiTheoraCtrl() mPlayOnWake = true; mRenderDebugInfo = false; mTranscoder = OggTheoraDecoder::TRANSCODER_Auto; + mLoop = false; mBackgroundColor.set( 0, 0, 0, 255); } @@ -89,6 +90,8 @@ void GuiTheoraCtrl::initPersistFields() "Fill color when video is not playing." ); addField( "playOnWake", TypeBool, Offset( mPlayOnWake, GuiTheoraCtrl ), "Whether to start playing video when control is woken up." ); + addField( "loop", TypeBool, Offset( mLoop, GuiTheoraCtrl ), + "Loop playback." ); addField( "stopOnSleep", TypeBool, Offset( mStopOnSleep, GuiTheoraCtrl ), "Whether to stop video when control is set to sleep.\n\n" "If this is not set to true, the video will be paused when the control is put to sleep. This is because there is no support " @@ -221,7 +224,14 @@ void GuiTheoraCtrl::onRender(Point2I offset, const RectI &updateRect) } } else - mDone = true; + { + if(mLoop) + { + play(); + } else { + mDone = true; + } + } } else GFX->getDrawUtil()->drawRectFill(rect, mBackgroundColor); // black rect diff --git a/Engine/source/gui/theora/guiTheoraCtrl.h b/Engine/source/gui/theora/guiTheoraCtrl.h index e85ff69866..635c515dac 100644 --- a/Engine/source/gui/theora/guiTheoraCtrl.h +++ b/Engine/source/gui/theora/guiTheoraCtrl.h @@ -57,6 +57,8 @@ class GuiTheoraCtrl : public GuiControl /// If true, playback will start automatically when the control receives its /// onWake(). bool mPlayOnWake; + + bool mLoop; /// Which transcoder to use on the Theora decoder. This is mostly /// meant as a development aid. diff --git a/Engine/source/gui/worldEditor/editTSCtrl.cpp b/Engine/source/gui/worldEditor/editTSCtrl.cpp index 7781525c6f..928cbfbf17 100644 --- a/Engine/source/gui/worldEditor/editTSCtrl.cpp +++ b/Engine/source/gui/worldEditor/editTSCtrl.cpp @@ -1315,7 +1315,7 @@ DefineEngineMethod( EditTSCtrl, renderCircle, void, ( Point3F pos, Point3F norma { PrimBuild::color( object->mConsoleFillColor ); - PrimBuild::begin( GFXTriangleFan, points.size() + 2 ); + PrimBuild::begin( GFXTriangleStrip, points.size() + 2 ); // Center point PrimBuild::vertex3fv( pos ); diff --git a/Engine/source/gui/worldEditor/editor.cpp b/Engine/source/gui/worldEditor/editor.cpp index cfcee744d7..2f05c96ad2 100644 --- a/Engine/source/gui/worldEditor/editor.cpp +++ b/Engine/source/gui/worldEditor/editor.cpp @@ -122,9 +122,9 @@ void EditManager::editorDisabled() static GameBase * getControlObj() { GameConnection * connection = GameConnection::getLocalClientConnection(); - ShapeBase* control = 0; + GameBase* control = 0; if(connection) - control = dynamic_cast(connection->getControlObject()); + control = connection->getControlObject(); return(control); } diff --git a/Engine/source/gui/worldEditor/gizmo.cpp b/Engine/source/gui/worldEditor/gizmo.cpp index 7ae32519c8..c95533bd60 100644 --- a/Engine/source/gui/worldEditor/gizmo.cpp +++ b/Engine/source/gui/worldEditor/gizmo.cpp @@ -1403,7 +1403,7 @@ void Gizmo::renderGizmo(const MatrixF &cameraTransform, F32 cameraFOV ) for(U32 j = 0; j < 6; j++) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][0]] * tipScale); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][1]] * tipScale); @@ -1599,7 +1599,7 @@ void Gizmo::_renderAxisBoxes() for(U32 j = 0; j < 6; j++) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][0]] * tipScale + sgAxisVectors[axisIdx] * pos ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][1]] * tipScale + sgAxisVectors[axisIdx] * pos ); @@ -1663,7 +1663,7 @@ void Gizmo::_renderAxisCircles() ColorI color = mProfile->inActiveColor; color.alpha = 100; PrimBuild::color( color ); - PrimBuild::begin( GFXTriangleFan, segments+2 ); + PrimBuild::begin( GFXTriangleStrip, segments+2 ); PrimBuild::vertex3fv( Point3F(0,0,0) ); diff --git a/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp b/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp index b5d5d25249..37dd689521 100644 --- a/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp +++ b/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp @@ -265,18 +265,18 @@ void GuiTerrPreviewCtrl::onRender(Point2I offset, const RectI &updateRect) // the texture if flipped horz to reflect how the terrain is really drawn PrimBuild::color3f(1.0f, 1.0f, 1.0f); - PrimBuild::begin(GFXTriangleFan, 4); - PrimBuild::texCoord2f(textureP1.x, textureP2.y); - PrimBuild::vertex2f(screenP1.x, screenP2.y); // left bottom - - - PrimBuild::texCoord2f(textureP2.x, textureP2.y); - PrimBuild::vertex2f(screenP2.x, screenP2.y); // right bottom - PrimBuild::texCoord2f(textureP2.x, textureP1.y); - PrimBuild::vertex2f(screenP2.x, screenP1.y); // right top - - PrimBuild::texCoord2f(textureP1.x, textureP1.y); - PrimBuild::vertex2f(screenP1.x, screenP1.y); // left top + PrimBuild::begin(GFXTriangleStrip, 4); + PrimBuild::texCoord2f(textureP1.x, textureP1.y); + PrimBuild::vertex2f(screenP1.x, screenP1.y); // left top + + PrimBuild::texCoord2f(textureP2.x, textureP1.y); + PrimBuild::vertex2f(screenP2.x, screenP1.y); // right top + + PrimBuild::texCoord2f(textureP1.x, textureP2.y); + PrimBuild::vertex2f(screenP1.x, screenP2.y); // left bottom + + PrimBuild::texCoord2f(textureP2.x, textureP2.y); + PrimBuild::vertex2f(screenP2.x, screenP2.y); // right bottom PrimBuild::end(); } } diff --git a/Engine/source/gui/worldEditor/terrainEditor.cpp b/Engine/source/gui/worldEditor/terrainEditor.cpp index 84dbe3c06d..cf80218e32 100644 --- a/Engine/source/gui/worldEditor/terrainEditor.cpp +++ b/Engine/source/gui/worldEditor/terrainEditor.cpp @@ -658,7 +658,7 @@ void SelectionBrush::rebuild() //... move the selection } -void SelectionBrush::render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const +void SelectionBrush::render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const { //... render the selection } @@ -1342,8 +1342,8 @@ void TerrainEditor::renderPoints( const Vector &pointList ) U32 vertsThisDrawCall = getMin( (U32)vertsLeft, (U32)MAX_DYNAMIC_VERTS ); vertsLeft -= vertsThisDrawCall; - GFXVertexBufferHandle vbuff( GFX, vertsThisDrawCall, GFXBufferTypeVolatile ); - GFXVertexPC *vert = vbuff.lock(); + GFXVertexBufferHandle vbuff( GFX, vertsThisDrawCall, GFXBufferTypeVolatile ); + GFXVertexPCT *vert = vbuff.lock(); const U32 loops = vertsThisDrawCall / 6; @@ -1394,7 +1394,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol if(sel.size() == 0) return; - Vector vertexBuffer; + Vector vertexBuffer; ColorF color; ColorI iColor; @@ -1430,15 +1430,15 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol // iColor = color; - GFXVertexPC *verts = &(vertexBuffer[i * 5]); + GFXVertexPCT *verts = &(vertexBuffer[i * 5]); - verts[0].point = wPos + Point3F(-squareSize, -squareSize, 0); + verts[0].point = wPos + Point3F(-squareSize, squareSize, 0); verts[0].color = iColor; - verts[1].point = wPos + Point3F( squareSize, -squareSize, 0); + verts[1].point = wPos + Point3F( squareSize, squareSize, 0); verts[1].color = iColor; - verts[2].point = wPos + Point3F( squareSize, squareSize, 0); + verts[2].point = wPos + Point3F( -squareSize, -squareSize, 0); verts[2].color = iColor; - verts[3].point = wPos + Point3F(-squareSize, squareSize, 0); + verts[3].point = wPos + Point3F( squareSize, -squareSize, 0); verts[3].color = iColor; verts[4].point = verts[0].point; verts[4].color = iColor; @@ -1452,7 +1452,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol GridPoint selectedGridPoint = sel[i].mGridPoint; Point2I gPos = selectedGridPoint.gridPos; - GFXVertexPC *verts = &(vertexBuffer[i * 5]); + GFXVertexPCT *verts = &(vertexBuffer[i * 5]); bool center = gridToWorld(selectedGridPoint, verts[0].point); gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, selectedGridPoint.terrainBlock); @@ -1503,12 +1503,12 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol // Render this bad boy, by stuffing everything into a volatile buffer // and rendering... - GFXVertexBufferHandle selectionVB(GFX, vertexBuffer.size(), GFXBufferTypeStatic); + GFXVertexBufferHandle selectionVB(GFX, vertexBuffer.size(), GFXBufferTypeStatic); selectionVB.lock(0, vertexBuffer.size()); // Copy stuff - dMemcpy((void*)&selectionVB[0], (void*)&vertexBuffer[0], sizeof(GFXVertexPC) * vertexBuffer.size()); + dMemcpy((void*)&selectionVB[0], (void*)&vertexBuffer[0], sizeof(GFXVertexPCT) * vertexBuffer.size()); selectionVB.unlock(); @@ -1518,7 +1518,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol if(renderFill) for(U32 i=0; i < sel.size(); i++) - GFX->drawPrimitive( GFXTriangleFan, i*5, 4); + GFX->drawPrimitive( GFXTriangleStrip, i*5, 4); if(renderFrame) for(U32 i=0; i < sel.size(); i++) @@ -2763,9 +2763,9 @@ DefineConsoleMethod(TerrainEditor, getTerrainUnderWorldPoint, S32, (const char * if(tEditor == NULL) return 0; Point3F pos; - if(!dStrIsEmpty(ptOrX) && dStrIsEmpty(Y) && dStrIsEmpty(Z)) + if(!String::isEmpty(ptOrX) && String::isEmpty(Y) && String::isEmpty(Z)) dSscanf(ptOrX, "%f %f %f", &pos.x, &pos.y, &pos.z); - else if(!dStrIsEmpty(ptOrX) && !dStrIsEmpty(Y) && !dStrIsEmpty(Z)) + else if(!String::isEmpty(ptOrX) && !String::isEmpty(Y) && !String::isEmpty(Z)) { pos.x = dAtof(ptOrX); pos.y = dAtof(Y); diff --git a/Engine/source/gui/worldEditor/terrainEditor.h b/Engine/source/gui/worldEditor/terrainEditor.h index 1b5d7cc15b..53c2aa79d0 100644 --- a/Engine/source/gui/worldEditor/terrainEditor.h +++ b/Engine/source/gui/worldEditor/terrainEditor.h @@ -173,7 +173,7 @@ class SelectionBrush : public Brush const char *getType() const { return "selection"; } void rebuild(); - void render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const; + void render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const; void setSize(const Point2I &){} protected: diff --git a/Engine/source/gui/worldEditor/worldEditor.cpp b/Engine/source/gui/worldEditor/worldEditor.cpp index 0273ffeb4b..e3866ab795 100644 --- a/Engine/source/gui/worldEditor/worldEditor.cpp +++ b/Engine/source/gui/worldEditor/worldEditor.cpp @@ -1303,7 +1303,7 @@ void WorldEditor::renderObjectFace(SceneObject * obj, const VectorF & normal, co PrimBuild::color( col ); - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); for(U32 k = 0; k < 4; k++) { PrimBuild::vertex3f(projPnts[k].x, projPnts[k].y, projPnts[k].z); @@ -1492,7 +1492,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) F32 tmpT = t; while (tmpT < size - 1) { - tmpT = spline.advanceDist(tmpT, 4.0f); + tmpT = spline.advanceDist(tmpT, 1.0f); vCount++; } @@ -1503,7 +1503,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) if(vCount > 4000) batchSize = 4000; - GFXVertexBufferHandle vb; + GFXVertexBufferHandle vb; vb.set(GFX, 3*batchSize, GFXBufferTypeVolatile); void *lockPtr = vb.lock(); if(!lockPtr) return; @@ -1514,7 +1514,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) { CameraSpline::Knot k; spline.value(t, &k); - t = spline.advanceDist(t, 4.0f); + t = spline.advanceDist(t, 1.0f); k.mRotation.mulP(a, &vb[vIdx+0].point); k.mRotation.mulP(b, &vb[vIdx+1].point); @@ -1524,9 +1524,9 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) vb[vIdx+1].point += k.mPosition; vb[vIdx+2].point += k.mPosition; - vb[vIdx+0].color.set(0, 255, 0, 100); - vb[vIdx+1].color.set(0, 255, 0, 100); - vb[vIdx+2].color.set(0, 255, 0, 100); + vb[vIdx+0].color.set(0, 255, 0, 0); + vb[vIdx+1].color.set(0, 255, 0, 255); + vb[vIdx+2].color.set(0, 255, 0, 0); // vb[vIdx+3] = vb[vIdx+1]; @@ -2810,7 +2810,7 @@ void WorldEditor::clearSelection() void WorldEditor::selectObject( SimObject *obj ) { - if ( mSelectionLocked || !mSelected ) + if ( mSelectionLocked || !mSelected || !obj ) return; // Don't check isSelectionEnabled of SceneObjects here as we @@ -2833,7 +2833,7 @@ void WorldEditor::selectObject( const char* obj ) void WorldEditor::unselectObject( SimObject *obj ) { - if ( mSelectionLocked || !mSelected ) + if ( mSelectionLocked || !mSelected || !obj ) return; if ( !objClassIgnored( obj ) && mSelected->objInSet( obj ) ) diff --git a/Engine/source/i18n/lang.cpp b/Engine/source/i18n/lang.cpp index 8d534a9160..24f2e2d59d 100644 --- a/Engine/source/i18n/lang.cpp +++ b/Engine/source/i18n/lang.cpp @@ -86,15 +86,16 @@ bool LangFile::load(const UTF8 *filename) bool LangFile::load(Stream *s) { - freeTable(); - - while(s->getStatus() != Stream::EOS) - { - char buf[256]; - s->readString(buf); - addString((const UTF8*)buf); - } - return true; + freeTable(); + + while (s->getStatus() == Stream::Ok) + { + char buf[2048]; + s->readLongString(2048, buf); + if (s->getStatus() == Stream::Ok) + addString((const UTF8*)buf); + } + return true; } bool LangFile::save(const UTF8 *filename) @@ -115,15 +116,15 @@ bool LangFile::save(const UTF8 *filename) bool LangFile::save(Stream *s) { - if(!isLoaded()) - return false; - - U32 i; - for(i = 0;i < mStringTable.size();i++) - { - s->writeString((char*)mStringTable[i]); - } - return true; + if (!isLoaded()) + return false; + + U32 i; + for (i = 0; i < mStringTable.size(); i++) + { + s->writeLongString(2048, (char*)mStringTable[i]); //irei1as_ lang + } + return true; } const UTF8 * LangFile::getString(U32 id) @@ -477,3 +478,101 @@ const LangTable *getModLangTable(const UTF8 *mod) } return NULL; } + +//lang_ localization +bool compiledFileNeedsUpdate(UTF8* filename) +{ + Torque::Path filePath = Torque::Path(filename); + Torque::FS::FileNodeRef sourceFile = Torque::FS::GetFileNode(filePath); + Torque::Path compiledPath = Torque::Path(filePath); + compiledPath.setExtension("lso"); + Torque::FS::FileNodeRef compiledFile = Torque::FS::GetFileNode(compiledPath); + + Torque::Time sourceModifiedTime, compiledModifiedTime; + + if (sourceFile != NULL) + sourceModifiedTime = sourceFile->getModifiedTime(); + + if (compiledFile != NULL) + compiledModifiedTime = compiledFile->getModifiedTime(); + + if (sourceModifiedTime > compiledModifiedTime) + return true; + return false; +} + +ConsoleFunction(CompileLanguage, void, 2, 3, "(string inputFile, [bool createMap]) Compiles a LSO language file." + " if createIndex is true, will also create languageMap.cs with" + " the global variables for each string index." + " The input file must follow this example layout:" + " TXT_HELLO_WORLD = Hello world in english!") +{ + UTF8 scriptFilenameBuffer[1024]; + Con::expandScriptFilename((char*)scriptFilenameBuffer, sizeof(scriptFilenameBuffer), argv[1]); + + if (!Torque::FS::IsFile(scriptFilenameBuffer)) + { + Con::errorf("CompileLanguage - file %s not found", scriptFilenameBuffer); + return; + } + + FileObject file; + if (!file.readMemory(scriptFilenameBuffer)) + { + Con::errorf("CompileLanguage - couldn't read file %s", scriptFilenameBuffer); + return; + } + + if (compiledFileNeedsUpdate(scriptFilenameBuffer)) + { + bool createMap = argc > 2 ? dAtob(argv[2]) : false; + FileStream *mapStream = NULL; + if (createMap) + { + Torque::Path mapPath = scriptFilenameBuffer; + mapPath.setFileName("languageMap"); + mapPath.setExtension("cs"); + if ((mapStream = FileStream::createAndOpen(mapPath, Torque::FS::File::Write)) == NULL) + Con::errorf("CompileLanguage - failed creating languageMap.cs"); + } + + LangFile langFile; + const U8* inLine = NULL; + const char* separatorStr = " = "; + S32 stringId = 0; + while ((inLine = file.readLine())[0] != 0) + { + char* line; + chompUTF8BOM((const char *)inLine, &line); + char* div = dStrstr(line, separatorStr); + if (div == NULL) + { + Con::errorf("Separator %s not found in line: %s", separatorStr, line); + Con::errorf("Could not determine string name ID"); + continue; + } + *div = 0; + char* text = div + dStrlen(separatorStr); + + langFile.addString((const UTF8*)text); + + if (mapStream) + { + String mapLine = String::ToString("$%s = %i;", line, stringId); + mapStream->writeLine((const U8*)mapLine.c_str()); + String commentLine = String::ToString("// %s", text); + mapStream->writeLine((const U8*)commentLine.c_str()); + } + + stringId++; + } + + Torque::Path lsoPath = scriptFilenameBuffer; + lsoPath.setExtension("lso"); + langFile.save(lsoPath.getFullPath()); + + if (mapStream) + delete mapStream; + } +} +//end lang_ localization \ No newline at end of file diff --git a/Engine/source/i18n/lang.h b/Engine/source/i18n/lang.h index edd031930e..8bf2d97973 100644 --- a/Engine/source/i18n/lang.h +++ b/Engine/source/i18n/lang.h @@ -27,6 +27,10 @@ #include "console/simBase.h" #include "core/util/tVector.h" +//lang_ localization +#include "core/fileObject.h" +#include "core/util/str.h" +#include "core/strings/unicode.h" #ifndef _LANG_H_ #define _LANG_H_ diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.cpp b/Engine/source/lighting/advanced/advancedLightBinManager.cpp index 1f0286dd31..bec9afb8a4 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightBinManager.cpp @@ -191,10 +191,11 @@ void AdvancedLightBinManager::addLight( LightInfo *light ) // Find a shadow map for this light, if it has one ShadowMapParams *lsp = light->getExtended(); LightShadowMap *lsm = lsp->getShadowMap(); + LightShadowMap *dynamicShadowMap = lsp->getShadowMap(true); // Get the right shadow type. ShadowType shadowType = ShadowType_None; - if ( light->getCastShadows() && + if ( light->getCastShadows() && lsm && lsm->hasShadowTex() && !ShadowMapPass::smDisableShadows ) shadowType = lsm->getShadowType(); @@ -203,6 +204,7 @@ void AdvancedLightBinManager::addLight( LightInfo *light ) LightBinEntry lEntry; lEntry.lightInfo = light; lEntry.shadowMap = lsm; + lEntry.dynamicShadowMap = dynamicShadowMap; lEntry.lightMaterial = _getLightMaterial( lightType, shadowType, lsp->hasCookieTex() ); if( lightType == LightInfo::Spot ) @@ -303,7 +305,7 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) { vectorMatInfo->matInstance->setSceneInfo( state, sgData ); vectorMatInfo->matInstance->setTransforms( matrixSet, state ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } @@ -316,6 +318,8 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) const U32 numPrims = curEntry.numPrims; const U32 numVerts = curEntry.vertBuffer->mNumVerts; + ShadowMapParams *lsp = curLightInfo->getExtended(); + // Skip lights which won't affect the scene. if ( !curLightMat || curLightInfo->getBrightness() <= 0.001f ) continue; @@ -325,15 +329,14 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) setupSGData( sgData, state, curLightInfo ); curLightMat->setLightParameters( curLightInfo, state, worldToCameraXfm ); mShadowManager->setLightShadowMap( curEntry.shadowMap ); - - // Let the shadow know we're about to render from it. - if ( curEntry.shadowMap ) - curEntry.shadowMap->preLightRender(); + mShadowManager->setLightDynamicShadowMap( curEntry.dynamicShadowMap ); // Set geometry GFX->setVertexBuffer( curEntry.vertBuffer ); GFX->setPrimitiveBuffer( curEntry.primBuffer ); + lsp->getOcclusionQuery()->begin(); + // Render the material passes while( curLightMat->matInstance->setupPass( state, sgData ) ) { @@ -348,13 +351,12 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) GFX->drawPrimitive(GFXTriangleList, 0, numPrims); } - // Tell it we're done rendering. - if ( curEntry.shadowMap ) - curEntry.shadowMap->postLightRender(); + lsp->getOcclusionQuery()->end(); } // Set NULL for active shadow map (so nothing gets confused) mShadowManager->setLightShadowMap(NULL); + mShadowManager->setLightDynamicShadowMap(NULL); GFX->setVertexBuffer( NULL ); GFX->setPrimitiveBuffer( NULL ); @@ -480,24 +482,24 @@ void AdvancedLightBinManager::_setupPerFrameParameters( const SceneRenderState * // passes.... this is a volatile VB and updates every frame. FarFrustumQuadVert verts[4]; { - verts[0].point.set( wsFrustumPoints[Frustum::FarBottomLeft] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarBottomLeft], &verts[0].normal ); - verts[0].texCoord.set( -1.0, -1.0 ); - verts[0].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); - - verts[1].point.set( wsFrustumPoints[Frustum::FarTopLeft] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarTopLeft], &verts[1].normal ); - verts[1].texCoord.set( -1.0, 1.0 ); - verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); - - verts[2].point.set( wsFrustumPoints[Frustum::FarTopRight] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarTopRight], &verts[2].normal ); - verts[2].texCoord.set( 1.0, 1.0 ); - verts[2].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); - - verts[3].point.set( wsFrustumPoints[Frustum::FarBottomRight] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal ); - verts[3].texCoord.set( 1.0, -1.0 ); + verts[0].point.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopLeft], &verts[0].normal); + verts[0].texCoord.set(-1.0, 1.0); + verts[0].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); + + verts[1].point.set(wsFrustumPoints[Frustum::FarTopRight] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopRight], &verts[1].normal); + verts[1].texCoord.set(1.0, 1.0); + verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); + + verts[2].point.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomLeft], &verts[2].normal); + verts[2].texCoord.set(-1.0, -1.0); + verts[2].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); + + verts[3].point.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal); + verts[3].texCoord.set(1.0, -1.0); verts[3].tangent.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraOffsetPos); } mFarFrustumQuadVerts.set( GFX, 4 ); diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.h b/Engine/source/lighting/advanced/advancedLightBinManager.h index ee20648854..879d62cbbb 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.h +++ b/Engine/source/lighting/advanced/advancedLightBinManager.h @@ -185,6 +185,7 @@ class AdvancedLightBinManager : public RenderTexTargetBinManager { LightInfo* lightInfo; LightShadowMap* shadowMap; + LightShadowMap* dynamicShadowMap; LightMaterialInfo* lightMaterial; GFXPrimitiveBuffer* primBuffer; GFXVertexBuffer* vertBuffer; diff --git a/Engine/source/lighting/advanced/advancedLightManager.cpp b/Engine/source/lighting/advanced/advancedLightManager.cpp index ef4446a403..baefa15b51 100644 --- a/Engine/source/lighting/advanced/advancedLightManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightManager.cpp @@ -105,7 +105,7 @@ void AdvancedLightManager::activate( SceneManager *sceneManager ) // we prefer the floating point format if it works. Vector formats; formats.push_back( GFXFormatR16G16B16A16F ); - formats.push_back( GFXFormatR16G16B16A16 ); + //formats.push_back( GFXFormatR16G16B16A16 ); GFXFormat blendTargetFormat = GFX->selectSupportedFormat( &GFXDefaultRenderTargetProfile, formats, true, @@ -357,10 +357,13 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, LightingShaderConstants *lsc = getLightingShaderConstants(shaderConsts); LightShadowMap *lsm = SHADOWMGR->getCurrentShadowMap(); + LightShadowMap *dynamicShadowMap = SHADOWMGR->getCurrentDynamicShadowMap(); LightInfo *light; - if ( lsm ) + if (lsm) light = lsm->getLightInfo(); + else if ( dynamicShadowMap ) + light = dynamicShadowMap->getLightInfo(); else { light = sgData.lights[0]; @@ -385,10 +388,11 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, lsc->mLightInvRadiusSqSC, lsc->mLightSpotDirSC, lsc->mLightSpotAngleSC, - lsc->mLightSpotFalloffSC, + lsc->mLightSpotFalloffSC, shaderConsts ); - if ( lsm && light->getCastShadows() ) + // Static + if (lsm && light->getCastShadows()) { if ( lsc->mWorldToLightProjSC->isValid() ) shaderConsts->set( lsc->mWorldToLightProjSC, @@ -426,6 +430,46 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, lsc->mViewToLightProjSC->getType() ); } } + + // Dynamic + if ( dynamicShadowMap ) + { + if ( lsc->mDynamicWorldToLightProjSC->isValid() ) + shaderConsts->set( lsc->mDynamicWorldToLightProjSC, + dynamicShadowMap->getWorldToLightProj(), + lsc->mDynamicWorldToLightProjSC->getType() ); + + if ( lsc->mDynamicViewToLightProjSC->isValid() ) + { + // TODO: Should probably cache these results and + // not do this mul here on every material that needs + // this transform. + + shaderConsts->set( lsc->mDynamicViewToLightProjSC, + dynamicShadowMap->getWorldToLightProj() * state->getCameraTransform(), + lsc->mDynamicViewToLightProjSC->getType() ); + } + + shaderConsts->setSafe( lsc->mShadowMapSizeSC, 1.0f / (F32)dynamicShadowMap->getTexSize() ); + + // Do this last so that overrides can properly override parameters previously set + dynamicShadowMap->setShaderParameters(shaderConsts, lsc); + } + else + { + if ( lsc->mDynamicViewToLightProjSC->isValid() ) + { + // TODO: Should probably cache these results and + // not do this mul here on every material that needs + // this transform. + MatrixF proj; + light->getWorldToLightProj( &proj ); + + shaderConsts->set( lsc->mDynamicViewToLightProjSC, + proj * state->getCameraTransform(), + lsc->mDynamicViewToLightProjSC->getType() ); + } + } } void AdvancedLightManager::registerGlobalLight(LightInfo *light, SimObject *obj) @@ -454,22 +498,34 @@ bool AdvancedLightManager::setTextureStage( const SceneData &sgData, ShaderConstHandles *handles ) { LightShadowMap* lsm = SHADOWMGR->getCurrentShadowMap(); + LightShadowMap* dynamicShadowMap = SHADOWMGR->getCurrentDynamicShadowMap(); // Assign Shadowmap, if it exists LightingShaderConstants* lsc = getLightingShaderConstants(shaderConsts); if ( !lsc ) return false; - if ( lsm && lsm->getLightInfo()->getCastShadows() ) - return lsm->setTextureStage( currTexFlag, lsc ); - - if ( currTexFlag == Material::DynamicLight ) { + // Static + if ( lsm && lsm->getLightInfo()->getCastShadows() ) + return lsm->setTextureStage( currTexFlag, lsc ); + S32 reg = lsc->mShadowMapSC->getSamplerRegister(); if ( reg != -1 ) GFX->setTexture( reg, GFXTexHandle::ONE ); + return true; + } else if ( currTexFlag == Material::DynamicShadowMap ) + { + // Dynamic + if ( dynamicShadowMap ) + return dynamicShadowMap->setTextureStage( currTexFlag, lsc ); + + S32 reg = lsc->mDynamicShadowMapSC->getSamplerRegister(); + if ( reg != -1 ) + GFX->setTexture( reg, GFXTexHandle::ONE ); + return true; } else if ( currTexFlag == Material::DynamicLightMask ) diff --git a/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp index ce90bcc39c..c97fbbcf59 100644 --- a/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp @@ -156,8 +156,8 @@ void DeferredRTLightingFeatGLSL::processPix( Vector &component oneOverTargetSize->constSortPos = cspPass; } - meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n float3 id_lightcolor;\r\n" ) ); - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n vec3 id_lightcolor;\r\n" ) ); + meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + vec2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, oneOverTargetSize ) ); meta->addStatement( new GenOp(" @ = lerp(@, id_lightcolor, 0.5);\r\n", d_lightcolor, d_lightcolor ) ); @@ -167,7 +167,7 @@ void DeferredRTLightingFeatGLSL::processPix( Vector &component // This is kind of weak sauce if( !fd.features[MFT_VertLit] && !fd.features[MFT_ToneMap] && !fd.features[MFT_LightMap] && !fd.features[MFT_SubSurface] ) - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(@, 1.0)", d_lightcolor ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(@, 1.0)", d_lightcolor ), Material::Mul ) ) ); output = meta; } @@ -311,7 +311,7 @@ void DeferredBumpFeatGLSL::processPix( Vector &componentList, meta->addStatement( new GenOp( " @.xy += @.xy * @;\r\n", bumpNorm, detailBump, detailBumpScale ) ); } - // This var is read from GBufferConditionerHLSL and + // This var is read from GBufferConditionerGLSL and // used in the prepass output. // // By using the 'half' type here we get a bunch of partial @@ -533,11 +533,13 @@ void DeferredPixelSpecularGLSL::processPix( Vector &component specPow->constSortPos = cspPotentialPrimitive; } - Var *specStrength = new Var; - specStrength->setType( "float" ); - specStrength->setName( "specularStrength" ); - specStrength->uniform = true; - specStrength->constSortPos = cspPotentialPrimitive; + Var *specStrength = (Var*)LangElement::find( "specularStrength" ); + if (!specStrength) + { + specStrength = new Var( "specularStrength", "float" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + } Var *lightInfoSamp = (Var *)LangElement::find( "lightInfoSample" ); Var *d_specular = (Var*)LangElement::find( "d_specular" ); @@ -555,10 +557,10 @@ void DeferredPixelSpecularGLSL::processPix( Vector &component meta->addStatement(new GenOp(" @ = clamp( lerp( @, @ * @, @.a), 0, 1);\r\n", d_specular, d_specular, accuSpecular, d_specular, accuPlc)); } // (a^m)^n = a^(m*n) - meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", + meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", specDecl, d_specular, specPow, specStrength ) ); - LangElement *specMul = new GenOp( "float4( @.rgb, 0 ) * @", specCol, specular ); + LangElement *specMul = new GenOp( "vec4( @.rgb, 0 ) * @", specCol, specular ); LangElement *final = specMul; // We we have a normal map then mask the specular @@ -682,10 +684,10 @@ void DeferredMinnaertGLSL::processPix( Vector &componentList, Var *d_NL_Att = (Var*)LangElement::find( "d_NL_Att" ); - meta->addStatement( new GenOp( avar( " float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); + meta->addStatement( new GenOp( avar( " vec4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); meta->addStatement( new GenOp( " float vDotN = dot(normalDepth.xyz, @);\r\n", wsViewVec ) ); meta->addStatement( new GenOp( " float Minnaert = pow( @, @) * pow(vDotN, 1.0 - @);\r\n", d_NL_Att, minnaertConstant, minnaertConstant ) ); - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); output = meta; } @@ -713,7 +715,7 @@ void DeferredSubSurfaceGLSL::processPix( Vector &componentLis MultiLine *meta = new MultiLine; meta->addStatement( new GenOp( " float subLamb = smoothstep(-@.a, 1.0, @) - smoothstep(0.0, 1.0, @);\r\n", subSurfaceParams, d_NL_Att, d_NL_Att ) ); meta->addStatement( new GenOp( " subLamb = max(0.0, subLamb);\r\n" ) ); - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(@ + (subLamb * @.rgb), 1.0)", d_lightcolor, subSurfaceParams ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(@ + (subLamb * @.rgb), 1.0)", d_lightcolor, subSurfaceParams ), Material::Mul ) ) ); output = meta; } diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp new file mode 100644 index 0000000000..bfa39779e6 --- /dev/null +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp @@ -0,0 +1,189 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "lighting/advanced/glsl/deferredShadingFeaturesGLSL.h" + +#include "lighting/advanced/advancedLightBinManager.h" +#include "shaderGen/langElement.h" +#include "shaderGen/shaderOp.h" +#include "shaderGen/conditionerFeature.h" +#include "renderInstance/renderPrePassMgr.h" +#include "materials/processedMaterial.h" +#include "materials/materialFeatureTypes.h" + + +//**************************************************************************** +// Deferred Shading Features +//**************************************************************************** + +// Specular Map -> Blue of Material Buffer ( greyscaled ) +// Gloss Map (Alpha Channel of Specular Map) -> Alpha ( Spec Power ) of Material Info Buffer. +void DeferredSpecMapGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // Get the texture coord. + Var *texCoord = getInTexCoord( "texCoord", "vec2", true, componentList ); + + // search for color var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + MultiLine * meta = new MultiLine; + if ( !material ) + { + // create color var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + // create texture var + Var *specularMap = new Var; + specularMap->setType( "sampler2D" ); + specularMap->setName( "specularMap" ); + specularMap->uniform = true; + specularMap->sampler = true; + specularMap->constNum = Var::getTexUnitNum(); + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.b = dot(tex2D(@, @).rgb, vec3(0.3, 0.59, 0.11));\r\n", material, specularMap, texCoord)); + meta->addStatement(new GenOp(" @.a = tex2D(@, @).a;\r\n", material, specularMap, texCoord)); + output = meta; +} + +ShaderFeature::Resources DeferredSpecMapGLSL::getResources( const MaterialFeatureData &fd ) +{ + Resources res; + res.numTex = 1; + res.numTexReg = 1; + + return res; +} + +void DeferredSpecMapGLSL::setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ) +{ + GFXTextureObject *tex = stageDat.getTex( MFT_SpecularMap ); + if ( tex ) + { + passData.mTexType[ texIndex ] = Material::Standard; + passData.mSamplerNames[ texIndex ] = "specularMap"; + passData.mTexSlot[ texIndex++ ].texObject = tex; + } +} + +void DeferredSpecMapGLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + getOutTexCoord( "texCoord", + "vec2", + true, + fd.features[MFT_TexAnim], + meta, + componentList ); + output = meta; +} + +// Material Info Flags -> Red ( Flags ) of Material Info Buffer. +void DeferredMatInfoFlagsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + Var *matInfoFlags = new Var; + matInfoFlags->setType( "float" ); + matInfoFlags->setName( "matInfoFlags" ); + matInfoFlags->uniform = true; + matInfoFlags->constSortPos = cspPotentialPrimitive; + + meta->addStatement(output = new GenOp(" @.r = @;\r\n", material, matInfoFlags)); + output = meta; +} + +// Spec Strength -> Blue Channel of Material Info Buffer. +// Spec Power -> Alpha Channel ( of Material Info Buffer. +void DeferredSpecVarsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + Var *specStrength = new Var; + specStrength->setType( "float" ); + specStrength->setName( "specularStrength" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + + Var *specPower = new Var; + specPower->setType("float"); + specPower->setName("specularPower"); + specPower->uniform = true; + specPower->constSortPos = cspPotentialPrimitive; + + MultiLine *meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.a = @/128;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.b = @/5;\r\n", material, specStrength)); + output = meta; +} + +// Black -> Blue and Alpha of Color Buffer (representing no specular) +void DeferredEmptySpecGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.ba = vec2(0.0);\r\n", material)); + output = meta; +} diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h new file mode 100644 index 0000000000..f687bd9171 --- /dev/null +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DEFERREDSHADINGGLSL_H_ +#define _DEFERREDSHADINGGLSL_H_ + +#include "shaderGen/GLSL/shaderFeatureGLSL.h" +#include "shaderGen/GLSL/bumpGLSL.h" +#include "shaderGen/GLSL/pixSpecularGLSL.h" + +// Specular Outputs +class DeferredSpecMapGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Map"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual Resources getResources( const MaterialFeatureData &fd ); + + // Sets textures and texture flags for current pass + virtual void setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ); + + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; + +class DeferredMatInfoFlagsGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Mat Info Flags"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredSpecVarsGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Explicit Numbers"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + + +class DeferredEmptySpecGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Empty Specular"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +#endif \ No newline at end of file diff --git a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp index 6e5795e832..095f4ea9e2 100644 --- a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp @@ -114,7 +114,7 @@ void GBufferConditionerGLSL::processVert( Vector &componentLis // TODO: Total hack because Conditioner is directly derived // from ShaderFeature and not from ShaderFeatureGLSL. NamedFeatureGLSL dummy( String::EmptyString ); - dummy.mInstancingFormat = mInstancingFormat; + dummy.setInstancingFormat( mInstancingFormat ); Var *worldViewOnly = dummy.getWorldView( componentList, fd.features[MFT_UseInstancing], meta ); meta->addStatement( new GenOp(" @ = tMul(@, float4( normalize(@), 0.0 ) ).xyz;\r\n", @@ -170,7 +170,7 @@ void GBufferConditionerGLSL::processPix( Vector &componentLis if ( fd.features[ MFT_IsTranslucentZWrite ] ) { alphaVal = new Var( "outAlpha", "float" ); - meta->addStatement( new GenOp( " @ = col.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); + meta->addStatement( new GenOp( " @ = OUT_col1.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); } // If using interlaced normals, invert the normal @@ -397,7 +397,7 @@ Var* GBufferConditionerGLSL::_unconditionInput( Var *conditionedInput, MultiLine // Recover depth from encoding if(mNormalStorageType != CartesianXYZ) { - const U64 maxValPerChannel = 1 << mBitsPerChannel; + const U64 maxValPerChannel = (U64)1 << mBitsPerChannel; meta->addStatement( new GenOp( " \r\n // Decode depth\r\n" ) ); meta->addStatement( new GenOp( avar( " @.w = dot( @.zw, float2(1.0, 1.0/%llu.0));\r\n", maxValPerChannel - 1 ), retVar, conditionedInput ) ); diff --git a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp index deda7cbaef..172eb65c8f 100644 --- a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp @@ -126,6 +126,18 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component lightInfoBuffer->sampler = true; lightInfoBuffer->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* lightBufferTex = NULL; + if (mIsDirect3D11) + { + lightInfoBuffer->setType("SamplerState"); + lightBufferTex = new Var; + lightBufferTex->setName("lightInfoBufferTex"); + lightBufferTex->setType("Texture2D"); + lightBufferTex->uniform = true; + lightBufferTex->texture = true; + lightBufferTex->constNum = lightInfoBuffer->constNum; + } + // Declare the RTLighting variables in this feature, they will either be assigned // in this feature, or in the tonemap/lightmap feature Var *d_lightcolor = new Var( "d_lightcolor", "float3" ); @@ -140,8 +152,12 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component // Perform the uncondition here. String unconditionLightInfo = String::ToLower( AdvancedLightBinManager::smBufferName ) + "Uncondition"; - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @), @, @, @);\r\n", - unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" %s(@.Sample(@, @), @, @, @);\r\n", + unconditionLightInfo.c_str()), lightBufferTex, lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular)); + else + meta->addStatement(new GenOp(avar(" %s(tex2D(@, @), @, @, @);\r\n", + unconditionLightInfo.c_str()), lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular)); // If this has an interlaced pre-pass, do averaging here if( fd.features[MFT_InterlacedPrePass] ) @@ -157,8 +173,12 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component } meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n float3 id_lightcolor;\r\n" ) ); - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", - unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, oneOverTargetSize ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" %s(@.Sample(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + unconditionLightInfo.c_str()), lightBufferTex, lightInfoBuffer, uvScene, oneOverTargetSize)); + else + meta->addStatement(new GenOp(avar(" %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + unconditionLightInfo.c_str()), lightInfoBuffer, uvScene, oneOverTargetSize)); meta->addStatement( new GenOp(" @ = lerp(@, id_lightcolor, 0.5);\r\n", d_lightcolor, d_lightcolor ) ); meta->addStatement( new GenOp(" @ = lerp(@, id_NL_Att, 0.5);\r\n", d_NL_Att, d_NL_Att ) ); @@ -227,7 +247,7 @@ void DeferredBumpFeatHLSL::processVert( Vector &componentLis const bool useTexAnim = fd.features[MFT_TexAnim]; // Make sure there are texcoords - if( !fd.features[MFT_Parallax] && !fd.features[MFT_DiffuseMap] ) + if( !fd.features[MFT_Parallax] && !fd.features[MFT_DiffuseMap]) { getOutTexCoord( "texCoord", @@ -272,8 +292,17 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, // create texture var Var *bumpMap = getNormalMapTex(); - Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); - LangElement *texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + Var *texCoord = getInTexCoord("texCoord", "float2", true, componentList); + + LangElement *texOp = NULL; + + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var*)LangElement::find("bumpMapTex"); + texOp = new GenOp("@.Sample(@, @)", bumpMapTex, bumpMap, texCoord); + } + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); // create bump normal Var *bumpNorm = new Var; @@ -295,8 +324,25 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpMap->sampler = true; bumpMap->constNum = Var::getTexUnitNum(); - texCoord = getInTexCoord( "detCoord", "float2", true, componentList ); - texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + Var* detailNormalTex = NULL; + if (mIsDirect3D11) + { + bumpMap->setType("SamplerState"); + detailNormalTex = new Var; + detailNormalTex->setName("detailBumpMapTex"); + detailNormalTex->setType("Texture2D"); + detailNormalTex->uniform = true; + detailNormalTex->texture = true; + detailNormalTex->constNum = bumpMap->constNum; + } + + + texCoord = getInTexCoord("detCoord", "float2", true, componentList); + + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", detailNormalTex, bumpMap, texCoord); + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); Var *detailBump = new Var; detailBump->setName( "detailBump" ); @@ -333,25 +379,32 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, else if (fd.features[MFT_AccuMap]) { Var *bumpSample = (Var *)LangElement::find( "bumpSample" ); - if( bumpSample == NULL ) + if (bumpSample == NULL) { MultiLine *meta = new MultiLine; - Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); + Var *texCoord = getInTexCoord("texCoord", "float2", true, componentList); Var *bumpMap = getNormalMapTex(); bumpSample = new Var; - bumpSample->setType( "float4" ); - bumpSample->setName( "bumpSample" ); - LangElement *bumpSampleDecl = new DecOp( bumpSample ); + bumpSample->setType("float4"); + bumpSample->setName("bumpSample"); + LangElement *bumpSampleDecl = new DecOp(bumpSample); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord ) ); + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var *)LangElement::find("bumpMapTex"); + output = new GenOp(" @ = @.Sample(@, @);\r\n", bumpSampleDecl, bumpMapTex, bumpMap, texCoord); + } + else + output = new GenOp(" @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord); if ( fd.features.hasFeature( MFT_DetailNormalMap ) ) { Var *bumpMap = (Var*)LangElement::find( "detailBumpMap" ); - if ( !bumpMap ) { + if ( !bumpMap ) + { bumpMap = new Var; bumpMap->setType( "sampler2D" ); bumpMap->setName( "detailBumpMap" ); @@ -360,8 +413,24 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpMap->constNum = Var::getTexUnitNum(); } + Var* bumpMapTex = (Var*)LangElement::find("detailBumpMap"); + if (mIsDirect3D11 && !bumpMapTex) + { + bumpMap->setType("SamplerState"); + bumpMapTex = new Var; + bumpMapTex->setName("detailBumpMapTex"); + bumpMapTex->setType("Texture2D"); + bumpMapTex->uniform = true; + bumpMapTex->texture = true; + bumpMapTex->constNum = bumpMap->constNum; + } + texCoord = getInTexCoord( "detCoord", "float2", true, componentList ); - LangElement *texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + LangElement *texOp = NULL; + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", bumpMap, bumpMapTex, texCoord); + else + texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); Var *detailBump = new Var; detailBump->setName( "detailBump" ); @@ -402,7 +471,14 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpSample->setName( "bumpSample" ); LangElement *bumpSampleDecl = new DecOp( bumpSample ); - output = new GenOp( " @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord ); + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var *)LangElement::find("bumpMapTex"); + output = new GenOp(" @ = @.Sample(@, @);\r\n", bumpSampleDecl, bumpMapTex, bumpMap, texCoord); + } + else + output = new GenOp(" @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord); + return; } } @@ -532,11 +608,13 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component specPow->constSortPos = cspPotentialPrimitive; } - Var *specStrength = new Var; - specStrength->setType( "float" ); - specStrength->setName( "specularStrength" ); - specStrength->uniform = true; - specStrength->constSortPos = cspPotentialPrimitive; + Var *specStrength = (Var*)LangElement::find( "specularStrength" ); + if (!specStrength) + { + specStrength = new Var( "specularStrength", "float" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + } Var *lightInfoSamp = (Var *)LangElement::find( "lightInfoSample" ); Var *d_specular = (Var*)LangElement::find( "d_specular" ); @@ -545,7 +623,8 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component AssertFatal( lightInfoSamp && d_specular && d_NL_Att, "DeferredPixelSpecularHLSL::processPix - Something hosed the deferred features!" ); - if (fd.features[ MFT_AccuMap ]) { + if (fd.features[ MFT_AccuMap ]) + { // change specularity where the accu texture is applied Var *accuPlc = (Var*) LangElement::find( "plc" ); Var *accuSpecular = (Var*)LangElement::find( "accuSpecular" ); @@ -556,7 +635,7 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component // (a^m)^n = a^(m*n) meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", - specDecl, d_specular, specPow, specStrength ) ); + specDecl, d_specular, specPow, specStrength)); LangElement *specMul = new GenOp( "float4( @.rgb, 0 ) * @", specCol, specular ); LangElement *final = specMul; @@ -669,6 +748,18 @@ void DeferredMinnaertHLSL::processPix( Vector &componentList, prepassBuffer->sampler = true; prepassBuffer->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* prePassTex = NULL; + if (mIsDirect3D11) + { + prepassBuffer->setType("SamplerState"); + prePassTex = new Var; + prePassTex->setName("prePassTex"); + prePassTex->setType("Texture2D"); + prePassTex->uniform = true; + prePassTex->texture = true; + prePassTex->constNum = prepassBuffer->constNum; + } + // Texture coord Var *uvScene = (Var*) LangElement::find( "uvScene" ); AssertFatal(uvScene != NULL, "Unable to find UVScene, no RTLighting feature?"); @@ -682,7 +773,11 @@ void DeferredMinnaertHLSL::processPix( Vector &componentList, Var *d_NL_Att = (Var*)LangElement::find( "d_NL_Att" ); - meta->addStatement( new GenOp( avar( " float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" float4 normalDepth = %s(@, ,@, @);\r\n", unconditionPrePassMethod.c_str()), prepassBuffer, prePassTex, uvScene)); + else + meta->addStatement(new GenOp(avar(" float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str()), prepassBuffer, uvScene)); + meta->addStatement( new GenOp( " float vDotN = dot(normalDepth.xyz, @);\r\n", wsViewVec ) ); meta->addStatement( new GenOp( " float Minnaert = pow( @, @) * pow(vDotN, 1.0 - @);\r\n", d_NL_Att, minnaertConstant, minnaertConstant ) ); meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp new file mode 100644 index 0000000000..25c86b7bc0 --- /dev/null +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -0,0 +1,210 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "platform/platform.h" +#include "lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h" + +#include "lighting/advanced/advancedLightBinManager.h" +#include "shaderGen/langElement.h" +#include "shaderGen/shaderOp.h" +#include "shaderGen/conditionerFeature.h" +#include "renderInstance/renderPrePassMgr.h" +#include "materials/processedMaterial.h" +#include "materials/materialFeatureTypes.h" + + +//**************************************************************************** +// Deferred Shading Features +//**************************************************************************** + +// Specular Map -> Blue of Material Buffer ( greyscaled ) +// Gloss Map (Alpha Channel of Specular Map) -> Alpha ( Spec Power ) of Material Info Buffer. +void DeferredSpecMapHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // Get the texture coord. + Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); + + // search for color var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + MultiLine * meta = new MultiLine; + if ( !material ) + { + // create color var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + // create texture var + Var *specularMap = new Var; + specularMap->setType( "sampler2D" ); + specularMap->setName( "specularMap" ); + specularMap->uniform = true; + specularMap->sampler = true; + specularMap->constNum = Var::getTexUnitNum(); + + Var* specularMapTex = NULL; + if (mIsDirect3D11) + { + specularMap->setType("SamplerState"); + specularMapTex = new Var; + specularMapTex->setName("specularMapTex"); + specularMapTex->setType("Texture2D"); + specularMapTex->uniform = true; + specularMapTex->texture = true; + specularMapTex->constNum = specularMap->constNum; + } + + //matinfo.g slot reserved for AO later + Var* specColor = new Var; + specColor->setName("specColor"); + specColor->setType("float4"); + LangElement *specColorElem = new DecOp(specColor); + + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + //sample specular map + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = @.Sample(@, @);\r\n", specColorElem, specularMapTex, specularMap, texCoord)); + else + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", specColorElem, specularMap, texCoord)); + + meta->addStatement(new GenOp(" @.b = dot(@.rgb, float3(0.3, 0.59, 0.11));\r\n", material, specColor)); + meta->addStatement(new GenOp(" @.a = @.a;\r\n", material, specColor)); + + output = meta; +} + +ShaderFeature::Resources DeferredSpecMapHLSL::getResources( const MaterialFeatureData &fd ) +{ + Resources res; + res.numTex = 1; + res.numTexReg = 1; + + return res; +} + +void DeferredSpecMapHLSL::setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ) +{ + GFXTextureObject *tex = stageDat.getTex( MFT_SpecularMap ); + if ( tex ) + { + passData.mTexType[ texIndex ] = Material::Standard; + passData.mSamplerNames[ texIndex ] = "specularMap"; + passData.mTexSlot[ texIndex++ ].texObject = tex; + } +} + +void DeferredSpecMapHLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + getOutTexCoord( "texCoord", + "float2", + true, + fd.features[MFT_TexAnim], + meta, + componentList ); + output = meta; +} + +// Material Info Flags -> Red ( Flags ) of Material Info Buffer. +void DeferredMatInfoFlagsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + Var *matInfoFlags = new Var; + matInfoFlags->setType( "float" ); + matInfoFlags->setName( "matInfoFlags" ); + matInfoFlags->uniform = true; + matInfoFlags->constSortPos = cspPotentialPrimitive; + + output = new GenOp( " @.r = @;\r\n", material, matInfoFlags ); +} + +// Spec Strength -> Blue Channel of Material Info Buffer. +// Spec Power -> Alpha Channel ( of Material Info Buffer. +void DeferredSpecVarsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + Var *specStrength = new Var; + specStrength->setType( "float" ); + specStrength->setName( "specularStrength" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + + Var *specPower = new Var; + specPower->setType( "float" ); + specPower->setName( "specularPower" ); + specPower->uniform = true; + specPower->constSortPos = cspPotentialPrimitive; + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.a = @/128;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.b = @/5;\r\n", material, specStrength)); + output = meta; +} + +// Black -> Blue and Alpha of matinfo Buffer (representing no specular), White->G (representing No AO) +void DeferredEmptySpecHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget2)); + if (!material) + { + // create color var + material = new Var; + material->setType("fragout"); + material->setName(getOutputTargetVarName(ShaderFeature::RenderTarget2)); + material->setStructName("OUT"); + } + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.ba = 0.0;\r\n", material)); + output = meta; +} diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h new file mode 100644 index 0000000000..9f43321b79 --- /dev/null +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DEFERREDSHADINGHLSL_H_ +#define _DEFERREDSHADINGHLSL_H_ + +#include "shaderGen/HLSL/shaderFeatureHLSL.h" +#include "shaderGen/HLSL/bumpHLSL.h" +#include "shaderGen/HLSL/pixSpecularHLSL.h" + +// Specular Outputs +class DeferredSpecMapHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Map"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual Resources getResources( const MaterialFeatureData &fd ); + + // Sets textures and texture flags for current pass + virtual void setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ); + + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; + +class DeferredMatInfoFlagsHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Mat Info Flags"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredSpecVarsHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Explicit Numbers"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredEmptySpecHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Empty Specular"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +#endif \ No newline at end of file diff --git a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp index 93f9477e99..d03a40ecd7 100644 --- a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp @@ -28,7 +28,7 @@ #include "materials/materialFeatureTypes.h" #include "materials/materialFeatureData.h" #include "shaderGen/hlsl/shaderFeatureHLSL.h" - +#include "gfx/gfxDevice.h" GBufferConditionerHLSL::GBufferConditionerHLSL( const GFXFormat bufferFormat, const NormalSpace nrmSpace ) : Parent( bufferFormat ) @@ -114,7 +114,7 @@ void GBufferConditionerHLSL::processVert( Vector &componentLis // TODO: Total hack because Conditioner is directly derived // from ShaderFeature and not from ShaderFeatureHLSL. NamedFeatureHLSL dummy( String::EmptyString ); - dummy.mInstancingFormat = mInstancingFormat; + dummy.setInstancingFormat( mInstancingFormat ); Var *worldViewOnly = dummy.getWorldView( componentList, fd.features[MFT_UseInstancing], meta ); meta->addStatement( new GenOp(" @ = mul(@, float4( normalize(@), 0.0 ) ).xyz;\r\n", @@ -170,7 +170,7 @@ void GBufferConditionerHLSL::processPix( Vector &componentLis if ( fd.features[ MFT_IsTranslucentZWrite ] ) { alphaVal = new Var( "outAlpha", "float" ); - meta->addStatement( new GenOp( " @ = OUT.col.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); + meta->addStatement( new GenOp( " @ = OUT.col1.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); } // If using interlaced normals, invert the normal @@ -222,6 +222,7 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str retVal = Parent::printMethodHeader( methodType, methodName, stream, meta ); else { + const bool isDirect3D11 = GFX->getAdapterType() == Direct3D11; Var *methodVar = new Var; methodVar->setName(methodName); methodVar->setType("inline float4"); @@ -237,12 +238,28 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str screenUV->setType("float2"); DecOp *screenUVDecl = new DecOp(screenUV); + Var *prepassTex = NULL; + DecOp *prepassTexDecl = NULL; + if (isDirect3D11) + { + prepassSampler->setType("SamplerState"); + prepassTex = new Var; + prepassTex->setName("prepassTexVar"); + prepassTex->setType("Texture2D"); + prepassTex->texture = true; + prepassTex->constNum = prepassSampler->constNum; + prepassTexDecl = new DecOp(prepassTex); + } + Var *bufferSample = new Var; bufferSample->setName("bufferSample"); bufferSample->setType("float4"); DecOp *bufferSampleDecl = new DecOp(bufferSample); - meta->addStatement( new GenOp( "@(@, @)\r\n", methodDecl, prepassSamplerDecl, screenUVDecl ) ); + if (isDirect3D11) + meta->addStatement(new GenOp("@(@, @, @)\r\n", methodDecl, prepassSamplerDecl, prepassTexDecl, screenUVDecl)); + else + meta->addStatement( new GenOp( "@(@, @)\r\n", methodDecl, prepassSamplerDecl, screenUVDecl ) ); meta->addStatement( new GenOp( "{\r\n" ) ); @@ -255,10 +272,14 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str // The gbuffer has no mipmaps, so use tex2dlod when // possible so that the shader compiler can optimize. meta->addStatement( new GenOp( " #if TORQUE_SM >= 30\r\n" ) ); - meta->addStatement( new GenOp( " @ = tex2Dlod(@, float4(@,0,0));\r\n", bufferSampleDecl, prepassSampler, screenUV ) ); - meta->addStatement( new GenOp( " #else\r\n" ) ); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", bufferSampleDecl, prepassSampler, screenUV ) ); - meta->addStatement( new GenOp( " #endif\r\n\r\n" ) ); + if (isDirect3D11) + meta->addStatement(new GenOp(" @ = @.SampleLevel(@, @,0);\r\n", bufferSampleDecl, prepassTex, prepassSampler, screenUV)); + else + meta->addStatement(new GenOp(" @ = tex2Dlod(@, float4(@,0,0));\r\n", bufferSampleDecl, prepassSampler, screenUV)); + + meta->addStatement(new GenOp(" #else\r\n")); + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", bufferSampleDecl, prepassSampler, screenUV)); + meta->addStatement(new GenOp(" #endif\r\n\r\n")); #endif // We don't use this way of passing var's around, so this should cause a crash diff --git a/Engine/source/lighting/common/blobShadow.cpp b/Engine/source/lighting/common/blobShadow.cpp index 9756757e93..48bfb1e529 100644 --- a/Engine/source/lighting/common/blobShadow.cpp +++ b/Engine/source/lighting/common/blobShadow.cpp @@ -338,7 +338,7 @@ void BlobShadow::render( F32 camDist, const TSRenderState &rdata ) GFX->setVertexBuffer(mShadowBuffer); for(U32 p=0; pdrawPrimitive(GFXTriangleFan, mPartition[p].vertexStart, (mPartition[p].vertexCount - 2)); + GFX->drawPrimitive(GFXTriangleStrip, mPartition[p].vertexStart, (mPartition[p].vertexCount - 2)); // This is a bad nasty hack which forces the shadow to reconstruct itself every frame. mPartition.clear(); diff --git a/Engine/source/lighting/lightInfo.cpp b/Engine/source/lighting/lightInfo.cpp index 1759ba24b6..2ea9588613 100644 --- a/Engine/source/lighting/lightInfo.cpp +++ b/Engine/source/lighting/lightInfo.cpp @@ -50,6 +50,8 @@ LightInfo::LightInfo() mOuterConeAngle( 90.0f ), mType( Vector ), mCastShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), mPriority( 1.0f ), mScore( 0.0f ), mDebugRender( false ) @@ -72,6 +74,8 @@ void LightInfo::set( const LightInfo *light ) mOuterConeAngle = light->mOuterConeAngle; mType = light->mType; mCastShadows = light->mCastShadows; + mStaticRefreshFreq = light->mStaticRefreshFreq; + mDynamicRefreshFreq = light->mDynamicRefreshFreq; for ( U32 i=0; i < mExtended.size(); i++ ) { diff --git a/Engine/source/lighting/lightInfo.h b/Engine/source/lighting/lightInfo.h index 1dee8f0d0d..e485dba707 100644 --- a/Engine/source/lighting/lightInfo.h +++ b/Engine/source/lighting/lightInfo.h @@ -131,6 +131,9 @@ class LightInfo bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; + ::Vector mExtended; /// The priority of this light used for @@ -190,6 +193,12 @@ class LightInfo bool getCastShadows() const { return mCastShadows; } void setCastShadows( bool castShadows ) { mCastShadows = castShadows; } + + S32 getStaticRefreshFreq() const { return mStaticRefreshFreq; } + void setStaticRefreshFreq(S32 _staticRefreshFreq) { mStaticRefreshFreq = _staticRefreshFreq; } + + S32 getDynamicRefreshFreq() const { return mDynamicRefreshFreq; } + void setDynamicRefreshFreq(S32 _dynamicRefreshFreq) { mDynamicRefreshFreq = _dynamicRefreshFreq; } void setPriority( F32 priority ) { mPriority = priority; } F32 getPriority() const { return mPriority; } diff --git a/Engine/source/lighting/lightManager.cpp b/Engine/source/lighting/lightManager.cpp index 2e2c4ff2ef..f53f5284d6 100644 --- a/Engine/source/lighting/lightManager.cpp +++ b/Engine/source/lighting/lightManager.cpp @@ -227,6 +227,15 @@ void LightManager::registerGlobalLights( const Frustum *frustum, bool staticLigh // Cull the lights using the frustum. getSceneManager()->getContainer()->findObjectList( *frustum, lightMask, &activeLights ); + for (U32 i = 0; i < activeLights.size(); ++i) + { + if (!getSceneManager()->mRenderedObjectsList.contains(activeLights[i])) + { + activeLights.erase(i); + --i; + } + } + // Store the culling position for sun placement // later... see setSpecialLight. mCullPos = frustum->getPosition(); diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.cpp b/Engine/source/lighting/shadowMap/lightShadowMap.cpp index 3a85a0b409..8be673ec25 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/lightShadowMap.cpp @@ -89,24 +89,24 @@ LightShadowMap::LightShadowMap( LightInfo *light ) mLastUpdate( 0 ), mLastCull( 0 ), mIsViewDependent( false ), - mVizQuery( NULL ), - mWasOccluded( false ), mLastScreenSize( 0.0f ), - mLastPriority( 0.0f ) + mLastPriority( 0.0f ), + mIsDynamic( false ) { GFXTextureManager::addEventDelegate( this, &LightShadowMap::_onTextureEvent ); mTarget = GFX->allocRenderToTextureTarget(); - mVizQuery = GFX->createOcclusionQuery(); - smShadowMaps.push_back( this ); + mStaticRefreshTimer = PlatformTimer::create(); + mDynamicRefreshTimer = PlatformTimer::create(); } LightShadowMap::~LightShadowMap() { mTarget = NULL; - SAFE_DELETE( mVizQuery ); - + SAFE_DELETE(mStaticRefreshTimer); + SAFE_DELETE(mDynamicRefreshTimer); + releaseTextures(); smShadowMaps.remove( this ); @@ -268,11 +268,20 @@ GFXTextureObject* LightShadowMap::_getDepthTarget( U32 width, U32 height ) bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants* lsc ) { - if ( currTexFlag == Material::DynamicLight ) + if ( currTexFlag == Material::DynamicLight && !isDynamic() ) { S32 reg = lsc->mShadowMapSC->getSamplerRegister(); - if ( reg != -1 ) - GFX->setTexture( reg, mShadowMapTex); + + if ( reg != -1 ) + GFX->setTexture( reg, mShadowMapTex); + + return true; + } else if ( currTexFlag == Material::DynamicShadowMap && isDynamic() ) + { + S32 reg = lsc->mDynamicShadowMapSC->getSamplerRegister(); + + if ( reg != -1 ) + GFX->setTexture( reg, mShadowMapTex); return true; } @@ -296,8 +305,20 @@ bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants* } void LightShadowMap::render( RenderPassManager* renderPass, - const SceneRenderState *diffuseState ) + const SceneRenderState *diffuseState, + bool _dynamic) { + // control how often shadow maps are refreshed + if (!_dynamic && (mStaticRefreshTimer->getElapsedMs() < getLightInfo()->getStaticRefreshFreq())) + return; + mStaticRefreshTimer->reset(); + + /* TODO: find out why this is causing issue with translucent objects + if (_dynamic && (mDynamicRefreshTimer->getElapsedMs() < getLightInfo()->getDynamicRefreshFreq())) + return; + mDynamicRefreshTimer->reset(); + */ + mDebugTarget.setTexture( NULL ); _render( renderPass, diffuseState ); mDebugTarget.setTexture( mShadowMapTex ); @@ -312,23 +333,6 @@ void LightShadowMap::render( RenderPassManager* renderPass, mLastUpdate = Sim::getCurrentTime(); } -void LightShadowMap::preLightRender() -{ - PROFILE_SCOPE( LightShadowMap_prepLightRender ); - - if ( mVizQuery ) - { - mWasOccluded = mVizQuery->getStatus( true ) == GFXOcclusionQuery::Occluded; - mVizQuery->begin(); - } -} - -void LightShadowMap::postLightRender() -{ - if ( mVizQuery ) - mVizQuery->end(); -} - BaseMatInstance* LightShadowMap::getShadowMaterial( BaseMatInstance *inMat ) const { // See if we have an existing material hook. @@ -456,25 +460,35 @@ LightingShaderConstants::LightingShaderConstants() mLightInvRadiusSqSC(NULL), mLightSpotDirSC(NULL), mLightSpotAngleSC(NULL), - mLightSpotFalloffSC(NULL), + mLightSpotFalloffSC(NULL), mShadowMapSC(NULL), + mDynamicShadowMapSC(NULL), mShadowMapSizeSC(NULL), mCookieMapSC(NULL), mRandomDirsConst(NULL), mShadowSoftnessConst(NULL), + mAtlasXOffsetSC(NULL), + mAtlasYOffsetSC(NULL), + mAtlasScaleSC(NULL), + mFadeStartLength(NULL), + mOverDarkFactorPSSM(NULL), + mTapRotationTexSC(NULL), + mWorldToLightProjSC(NULL), mViewToLightProjSC(NULL), mScaleXSC(NULL), mScaleYSC(NULL), mOffsetXSC(NULL), mOffsetYSC(NULL), - mAtlasXOffsetSC(NULL), - mAtlasYOffsetSC(NULL), - mAtlasScaleSC(NULL), - mFadeStartLength(NULL), mFarPlaneScalePSSM(NULL), - mOverDarkFactorPSSM(NULL), - mTapRotationTexSC(NULL) + + mDynamicWorldToLightProjSC(NULL), + mDynamicViewToLightProjSC(NULL), + mDynamicScaleXSC(NULL), + mDynamicScaleYSC(NULL), + mDynamicOffsetXSC(NULL), + mDynamicOffsetYSC(NULL), + mDynamicFarPlaneScalePSSM(NULL) { } @@ -513,29 +527,35 @@ void LightingShaderConstants::init(GFXShader* shader) mLightSpotFalloffSC = shader->getShaderConstHandle( ShaderGenVars::lightSpotFalloff ); mShadowMapSC = shader->getShaderConstHandle("$shadowMap"); + mDynamicShadowMapSC = shader->getShaderConstHandle("$dynamicShadowMap"); mShadowMapSizeSC = shader->getShaderConstHandle("$shadowMapSize"); mCookieMapSC = shader->getShaderConstHandle("$cookieMap"); mShadowSoftnessConst = shader->getShaderConstHandle("$shadowSoftness"); + mAtlasXOffsetSC = shader->getShaderConstHandle("$atlasXOffset"); + mAtlasYOffsetSC = shader->getShaderConstHandle("$atlasYOffset"); + mAtlasScaleSC = shader->getShaderConstHandle("$atlasScale"); + + mFadeStartLength = shader->getShaderConstHandle("$fadeStartLength"); + mOverDarkFactorPSSM = shader->getShaderConstHandle("$overDarkPSSM"); + mTapRotationTexSC = shader->getShaderConstHandle( "$gTapRotationTex" ); mWorldToLightProjSC = shader->getShaderConstHandle("$worldToLightProj"); mViewToLightProjSC = shader->getShaderConstHandle("$viewToLightProj"); - mScaleXSC = shader->getShaderConstHandle("$scaleX"); mScaleYSC = shader->getShaderConstHandle("$scaleY"); mOffsetXSC = shader->getShaderConstHandle("$offsetX"); mOffsetYSC = shader->getShaderConstHandle("$offsetY"); - mAtlasXOffsetSC = shader->getShaderConstHandle("$atlasXOffset"); - mAtlasYOffsetSC = shader->getShaderConstHandle("$atlasYOffset"); - mAtlasScaleSC = shader->getShaderConstHandle("$atlasScale"); - - mFadeStartLength = shader->getShaderConstHandle("$fadeStartLength"); mFarPlaneScalePSSM = shader->getShaderConstHandle("$farPlaneScalePSSM"); - mOverDarkFactorPSSM = shader->getShaderConstHandle("$overDarkPSSM"); - - mTapRotationTexSC = shader->getShaderConstHandle( "$gTapRotationTex" ); + mDynamicWorldToLightProjSC = shader->getShaderConstHandle("$dynamicWorldToLightProj"); + mDynamicViewToLightProjSC = shader->getShaderConstHandle("$dynamicViewToLightProj"); + mDynamicScaleXSC = shader->getShaderConstHandle("$dynamicScaleX"); + mDynamicScaleYSC = shader->getShaderConstHandle("$dynamicScaleY"); + mDynamicOffsetXSC = shader->getShaderConstHandle("$dynamicOffsetX"); + mDynamicOffsetYSC = shader->getShaderConstHandle("$dynamicOffsetY"); + mDynamicFarPlaneScalePSSM = shader->getShaderConstHandle("$dynamicFarPlaneScalePSSM"); mInit = true; } @@ -558,7 +578,9 @@ LightInfoExType ShadowMapParams::Type( "" ); ShadowMapParams::ShadowMapParams( LightInfo *light ) : mLight( light ), - mShadowMap( NULL ) + mShadowMap( NULL ), + mDynamicShadowMap ( NULL ), + isDynamic ( true ) { attenuationRatio.set( 0.0f, 1.0f, 1.0f ); shadowType = ShadowType_Spot; @@ -570,12 +592,16 @@ ShadowMapParams::ShadowMapParams( LightInfo *light ) shadowSoftness = 0.15f; fadeStartDist = 0.0f; lastSplitTerrainOnly = false; + mQuery = GFX->createOcclusionQuery(); + _validate(); } ShadowMapParams::~ShadowMapParams() { + SAFE_DELETE( mQuery ); SAFE_DELETE( mShadowMap ); + SAFE_DELETE( mDynamicShadowMap ); } void ShadowMapParams::_validate() @@ -632,39 +658,55 @@ void ShadowMapParams::_validate() texSize = mClamp( texSize, 32, maxTexSize ); } -LightShadowMap* ShadowMapParams::getOrCreateShadowMap() +LightShadowMap* ShadowMapParams::getOrCreateShadowMap(bool _isDynamic) { - if ( mShadowMap ) + if (_isDynamic && mDynamicShadowMap) + return mDynamicShadowMap; + + if (!_isDynamic && mShadowMap) return mShadowMap; if ( !mLight->getCastShadows() ) return NULL; + LightShadowMap* newShadowMap = NULL; + switch ( mLight->getType() ) { case LightInfo::Spot: - mShadowMap = new SingleLightShadowMap( mLight ); + newShadowMap = new SingleLightShadowMap( mLight ); break; case LightInfo::Vector: - mShadowMap = new PSSMLightShadowMap( mLight ); + newShadowMap = new PSSMLightShadowMap( mLight ); break; case LightInfo::Point: if ( shadowType == ShadowType_CubeMap ) - mShadowMap = new CubeLightShadowMap( mLight ); + newShadowMap = new CubeLightShadowMap( mLight ); else if ( shadowType == ShadowType_Paraboloid ) - mShadowMap = new ParaboloidLightShadowMap( mLight ); + newShadowMap = new ParaboloidLightShadowMap( mLight ); else - mShadowMap = new DualParaboloidLightShadowMap( mLight ); + newShadowMap = new DualParaboloidLightShadowMap( mLight ); break; default: break; } - return mShadowMap; + if ( _isDynamic ) + { + newShadowMap->setDynamic( true ); + mDynamicShadowMap = newShadowMap; + return mDynamicShadowMap; + } + else + { + newShadowMap->setDynamic(false); + mShadowMap = newShadowMap; + return mShadowMap; + } } GFXTextureObject* ShadowMapParams::getCookieTex() @@ -739,6 +781,7 @@ void ShadowMapParams::unpackUpdate( BitStream *stream ) // map so it can be reallocated on the next render. shadowType = newType; SAFE_DELETE( mShadowMap ); + SAFE_DELETE( mDynamicShadowMap ); } mathRead( *stream, &attenuationRatio ); diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.h b/Engine/source/lighting/shadowMap/lightShadowMap.h index af45b32fe8..d964811926 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.h +++ b/Engine/source/lighting/shadowMap/lightShadowMap.h @@ -47,6 +47,12 @@ #ifndef _GFXSHADER_H_ #include "gfx/gfxShader.h" #endif +#ifndef _GFXOCCLUSIONQUERY_H_ +#include "gfx/gfxOcclusionQuery.h" +#endif +#ifndef _PLATFORM_PLATFORMTIMER_H_ +#include "platform/platformTimer.h" +#endif class ShadowMapManager; class SceneManager; @@ -58,7 +64,6 @@ struct SceneData; class GFXShaderConstBuffer; class GFXShaderConstHandle; class GFXShader; -class GFXOcclusionQuery; class LightManager; class RenderPassManager; @@ -88,20 +93,13 @@ struct LightingShaderConstants GFXShaderConstHandle *mLightSpotFalloffSC; GFXShaderConstHandle* mShadowMapSC; + GFXShaderConstHandle* mDynamicShadowMapSC; GFXShaderConstHandle* mShadowMapSizeSC; GFXShaderConstHandle* mCookieMapSC; GFXShaderConstHandle* mRandomDirsConst; GFXShaderConstHandle* mShadowSoftnessConst; - - GFXShaderConstHandle* mWorldToLightProjSC; - GFXShaderConstHandle* mViewToLightProjSC; - - GFXShaderConstHandle* mScaleXSC; - GFXShaderConstHandle* mScaleYSC; - GFXShaderConstHandle* mOffsetXSC; - GFXShaderConstHandle* mOffsetYSC; GFXShaderConstHandle* mAtlasXOffsetSC; GFXShaderConstHandle* mAtlasYOffsetSC; GFXShaderConstHandle* mAtlasScaleSC; @@ -109,11 +107,28 @@ struct LightingShaderConstants // fadeStartLength.x = Distance in eye space to start fading shadows // fadeStartLength.y = 1 / Length of fade GFXShaderConstHandle* mFadeStartLength; - GFXShaderConstHandle* mFarPlaneScalePSSM; GFXShaderConstHandle* mOverDarkFactorPSSM; GFXShaderConstHandle* mTapRotationTexSC; + // Static Specific: + GFXShaderConstHandle* mWorldToLightProjSC; + GFXShaderConstHandle* mViewToLightProjSC; + GFXShaderConstHandle* mScaleXSC; + GFXShaderConstHandle* mScaleYSC; + GFXShaderConstHandle* mOffsetXSC; + GFXShaderConstHandle* mOffsetYSC; + GFXShaderConstHandle* mFarPlaneScalePSSM; + + // Dynamic Specific: + GFXShaderConstHandle* mDynamicWorldToLightProjSC; + GFXShaderConstHandle* mDynamicViewToLightProjSC; + GFXShaderConstHandle* mDynamicScaleXSC; + GFXShaderConstHandle* mDynamicScaleYSC; + GFXShaderConstHandle* mDynamicOffsetXSC; + GFXShaderConstHandle* mDynamicOffsetYSC; + GFXShaderConstHandle* mDynamicFarPlaneScalePSSM; + LightingShaderConstants(); ~LightingShaderConstants(); @@ -147,7 +162,8 @@ class LightShadowMap virtual ~LightShadowMap(); void render( RenderPassManager* renderPass, - const SceneRenderState *diffuseState ); + const SceneRenderState *diffuseState, + bool _dynamic); U32 getLastUpdate() const { return mLastUpdate; } @@ -155,12 +171,6 @@ class LightShadowMap bool isViewDependent() const { return mIsViewDependent; } - bool wasOccluded() const { return mWasOccluded; } - - void preLightRender(); - - void postLightRender(); - void updatePriority( const SceneRenderState *state, U32 currTimeMs ); F32 getLastScreenSize() const { return mLastScreenSize; } @@ -237,19 +247,12 @@ class LightShadowMap /// The time this shadow was last updated. U32 mLastUpdate; + PlatformTimer *mStaticRefreshTimer; + PlatformTimer *mDynamicRefreshTimer; /// The time this shadow was last culled and prioritized. U32 mLastCull; - /// The shadow occlusion query used when the light is - /// rendered to determine if any pixel of it is visible. - GFXOcclusionQuery *mVizQuery; - - /// If true the light was occluded by geometry the - /// last frame it was updated. - //the last frame. - bool mWasOccluded; - F32 mLastScreenSize; F32 mLastPriority; @@ -274,6 +277,13 @@ class LightShadowMap /// The callback used to get texture events. /// @see GFXTextureManager::addEventDelegate void _onTextureEvent( GFXTexCallbackCode code ); + + bool mIsDynamic; +public: + + bool isDynamic() { return mIsDynamic; } + void setDynamic(bool value) { mIsDynamic = value; } + }; GFX_DeclareTextureProfile( ShadowMapProfile ); @@ -296,12 +306,14 @@ class ShadowMapParams : public LightInfoEx virtual void packUpdate( BitStream *stream ) const; virtual void unpackUpdate( BitStream *stream ); - LightShadowMap* getShadowMap() const { return mShadowMap; } + LightShadowMap* getShadowMap(bool _isDynamic = false) const { return _isDynamic ? mDynamicShadowMap : mShadowMap; } - LightShadowMap* getOrCreateShadowMap(); + LightShadowMap* getOrCreateShadowMap(bool _isDynamic = false); bool hasCookieTex() const { return cookie.isNotEmpty(); } + GFXOcclusionQuery* getOcclusionQuery() const { return mQuery; } + GFXTextureObject* getCookieTex(); GFXCubemap* getCookieCubeTex(); @@ -315,6 +327,8 @@ class ShadowMapParams : public LightInfoEx /// LightShadowMap *mShadowMap; + LightShadowMap *mDynamicShadowMap; + GFXOcclusionQuery* mQuery; LightInfo *mLight; @@ -376,6 +390,7 @@ class ShadowMapParams : public LightInfoEx bool lastSplitTerrainOnly; /// @} + bool isDynamic; }; #endif // _LIGHTSHADOWMAP_H_ diff --git a/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp b/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp index 15a338db9e..d276fe3a5d 100644 --- a/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp @@ -37,6 +37,7 @@ #include "materials/shaderData.h" #include "ts/tsShapeInstance.h" #include "console/consoleTypes.h" +#include "math/mathUtils.h" AFTER_MODULE_INIT( Sim ) @@ -248,6 +249,9 @@ void PSSMLightShadowMap::_render( RenderPassManager* renderPass, TSShapeInstance::smDetailAdjust *= smDetailAdjustScale; TSShapeInstance::smSmallestVisiblePixelSize = smSmallestVisiblePixelSize; + Vector< Vector > _extraCull; + _calcPlanesCullForShadowCasters( _extraCull, fullFrustum, mLight->getDirection() ); + for (U32 i = 0; i < mNumSplits; i++) { GFXTransformSaver saver; @@ -365,12 +369,17 @@ void PSSMLightShadowMap::_render( RenderPassManager* renderPass, shadowRenderState.setDiffuseCameraTransform( diffuseState->getCameraTransform() ); shadowRenderState.setWorldToScreenScale( diffuseState->getWorldToScreenScale() ); + PlaneSetF planeSet( _extraCull[i].address(), _extraCull[i].size() ); + shadowRenderState.getCullingState().setExtraPlanesCull( planeSet ); + U32 objectMask = SHADOW_TYPEMASK; if ( i == mNumSplits-1 && params->lastSplitTerrainOnly ) objectMask = TerrainObjectType; sceneManager->renderSceneNoLights( &shadowRenderState, objectMask ); + shadowRenderState.getCullingState().clearExtraPlanesCull(); + _debugRender( &shadowRenderState ); } @@ -435,18 +444,28 @@ void PSSMLightShadowMap::setShaderParameters(GFXShaderConstBuffer* params, Light } } - params->setSafe(lsc->mScaleXSC, sx); - params->setSafe(lsc->mScaleYSC, sy); - params->setSafe(lsc->mOffsetXSC, ox); - params->setSafe(lsc->mOffsetYSC, oy); + // These values change based on static/dynamic. + if ( mIsDynamic ) + { + params->setSafe(lsc->mDynamicScaleXSC, sx); + params->setSafe(lsc->mDynamicScaleYSC, sy); + params->setSafe(lsc->mDynamicOffsetXSC, ox); + params->setSafe(lsc->mDynamicOffsetYSC, oy); + params->setSafe( lsc->mDynamicFarPlaneScalePSSM, mFarPlaneScalePSSM); + } else { + params->setSafe(lsc->mScaleXSC, sx); + params->setSafe(lsc->mScaleYSC, sy); + params->setSafe(lsc->mOffsetXSC, ox); + params->setSafe(lsc->mOffsetYSC, oy); + params->setSafe( lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM); + } + params->setSafe(lsc->mAtlasXOffsetSC, aXOff); params->setSafe(lsc->mAtlasYOffsetSC, aYOff); params->setSafe(lsc->mAtlasScaleSC, shadowMapAtlas); Point4F lightParams( mLight->getRange().x, p->overDarkFactor.x, 0.0f, 0.0f ); params->setSafe( lsc->mLightParamsSC, lightParams ); - - params->setSafe( lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM); Point2F fadeStartLength(p->fadeStartDist, 0.0f); if (fadeStartLength.x == 0.0f) @@ -462,3 +481,117 @@ void PSSMLightShadowMap::setShaderParameters(GFXShaderConstBuffer* params, Light // The softness is a factor of the texel size. params->setSafe( lsc->mShadowSoftnessConst, p->shadowSoftness * ( 1.0f / mTexSize ) ); } + +void PSSMLightShadowMap::_calcPlanesCullForShadowCasters(Vector< Vector > &out, const Frustum &viewFrustum, const Point3F &_ligthDir) +{ + +#define ENABLE_CULL_ASSERT + + PROFILE_SCOPE(PSSMLightShadowMap_render_getCullFrustrum); + + Point3F ligthDir = _ligthDir; + PlaneF lightFarPlane, lightNearPlane; + MatrixF lightFarPlaneMat(true); + MatrixF invLightFarPlaneMat(true); + + // init data + { + ligthDir.normalize(); + Point3F viewDir = viewFrustum.getTransform().getForwardVector(); + viewDir.normalize(); + const Point3F viewPosition = viewFrustum.getPosition(); + const F32 viewDistance = viewFrustum.getBounds().len(); + lightNearPlane = PlaneF(viewPosition + (viewDistance * -ligthDir), ligthDir); + + const Point3F lightFarPlanePos = viewPosition + (viewDistance * ligthDir); + lightFarPlane = PlaneF(lightFarPlanePos, -ligthDir); + + lightFarPlaneMat = MathUtils::createOrientFromDir(-ligthDir); + lightFarPlaneMat.setPosition(lightFarPlanePos); + lightFarPlaneMat.invertTo(&invLightFarPlaneMat); + } + + Vector projVertices; + + //project all frustum vertices into plane + // all vertices are 2d and local to far plane + projVertices.setSize(8); + for (int i = 0; i < 8; ++i) // + { + const Point3F &point = viewFrustum.getPoints()[i]; +#ifdef ENABLE_CULL_ASSERT + AssertFatal( PlaneF::Front == lightNearPlane.whichSide(point), "" ); + AssertFatal( PlaneF::Front == lightFarPlane.whichSide(point), "" ); +#endif + + Point3F localPoint(lightFarPlane.project(point)); + invLightFarPlaneMat.mulP(localPoint); + projVertices[i] = Point2F(localPoint.x, localPoint.z); + } + + //create hull arround projected proints + Vector hullVerts; + MathUtils::mBuildHull2D(projVertices, hullVerts); + + Vector planes; + planes.push_back(lightNearPlane); + planes.push_back(lightFarPlane); + + //build planes + for (int i = 0; i < (hullVerts.size() - 1); ++i) + { + Point2F pos2D = (hullVerts[i] + hullVerts[i + 1]) / 2; + Point3F pos3D(pos2D.x, 0, pos2D.y); + + Point3F pos3DA(hullVerts[i].x, 0, hullVerts[i].y); + Point3F pos3DB(hullVerts[i + 1].x, 0, hullVerts[i + 1].y); + + // move hull points to 3d space + lightFarPlaneMat.mulP(pos3D); + lightFarPlaneMat.mulP(pos3DA); + lightFarPlaneMat.mulP(pos3DB); + + PlaneF plane(pos3D, MathUtils::mTriangleNormal(pos3DB, pos3DA, (pos3DA - ligthDir))); + planes.push_back(plane); + } + + //recalculate planes for each splits + for (int split = 0; split < mNumSplits; ++split) + { + Frustum subFrustum(viewFrustum); + subFrustum.cropNearFar(mSplitDist[split], mSplitDist[split + 1]); + subFrustum.setFarDist(getMin(subFrustum.getFarDist()*2.5f, viewFrustum.getFarDist())); + subFrustum.update(); + + Vector subPlanes = planes; + + for (int planeIdx = 0; planeIdx < subPlanes.size(); ++planeIdx) + { + PlaneF &plane = subPlanes[planeIdx]; + F32 minDist = 0; + + //calculate near vertex distance + for (int vertexIdx = 0; vertexIdx < 8; ++vertexIdx) + { + Point3F point = subFrustum.getPoints()[vertexIdx]; + minDist = getMin(plane.distToPlane(point), minDist); + } + + // move plane to near vertex + Point3F newPos = plane.getPosition() + (plane.getNormal() * minDist); + plane = PlaneF(newPos, plane.getNormal()); + +#ifdef ENABLE_CULL_ASSERT + for(int x = 0; x < 8; ++x) + { + AssertFatal( PlaneF::Back != plane.whichSide( subFrustum.getPoints()[x] ), ""); + } +#endif + } + + out.push_back(subPlanes); + } + +#undef ENABLE_CULL_ASSERT + +} diff --git a/Engine/source/lighting/shadowMap/pssmLightShadowMap.h b/Engine/source/lighting/shadowMap/pssmLightShadowMap.h index d2fffde8ea..8ee8830188 100644 --- a/Engine/source/lighting/shadowMap/pssmLightShadowMap.h +++ b/Engine/source/lighting/shadowMap/pssmLightShadowMap.h @@ -56,6 +56,7 @@ class PSSMLightShadowMap : public LightShadowMap void _setNumSplits( U32 numSplits, U32 texSize ); void _calcSplitPos(const Frustum& currFrustum); Box3F _calcClipSpaceAABB(const Frustum& f, const MatrixF& transform, F32 farDist); + void _calcPlanesCullForShadowCasters(Vector< Vector > &out, const Frustum &viewFrustum, const Point3F &_ligthDir); void _roundProjection(const MatrixF& lightMat, const MatrixF& cropMatrix, Point3F &offset, U32 splitNum); static const S32 MAX_SPLITS = 4; diff --git a/Engine/source/lighting/shadowMap/shadowMapManager.cpp b/Engine/source/lighting/shadowMap/shadowMapManager.cpp index cfcf75f818..7fd50cd78b 100644 --- a/Engine/source/lighting/shadowMap/shadowMapManager.cpp +++ b/Engine/source/lighting/shadowMap/shadowMapManager.cpp @@ -86,6 +86,7 @@ Signal ShadowMapManager::smShadowDeactivateSignal; ShadowMapManager::ShadowMapManager() : mShadowMapPass(NULL), mCurrentShadowMap(NULL), + mCurrentDynamicShadowMap(NULL), mIsActive(false) { } @@ -98,9 +99,15 @@ void ShadowMapManager::setLightShadowMapForLight( LightInfo *light ) { ShadowMapParams *params = light->getExtended(); if ( params ) + { mCurrentShadowMap = params->getShadowMap(); + mCurrentDynamicShadowMap = params->getShadowMap(true); + } else + { mCurrentShadowMap = NULL; + mCurrentDynamicShadowMap = NULL; + } } void ShadowMapManager::activate() diff --git a/Engine/source/lighting/shadowMap/shadowMapManager.h b/Engine/source/lighting/shadowMap/shadowMapManager.h index 9319f3e365..a2e402e593 100644 --- a/Engine/source/lighting/shadowMap/shadowMapManager.h +++ b/Engine/source/lighting/shadowMap/shadowMapManager.h @@ -60,12 +60,14 @@ class ShadowMapManager : public ShadowManager /// Sets the current shadowmap (used in setLightInfo/setTextureStage calls) void setLightShadowMap( LightShadowMap *lm ) { mCurrentShadowMap = lm; } + void setLightDynamicShadowMap( LightShadowMap *lm ) { mCurrentDynamicShadowMap = lm; } /// Looks up the shadow map for the light then sets it. void setLightShadowMapForLight( LightInfo *light ); /// Return the current shadow map LightShadowMap* getCurrentShadowMap() const { return mCurrentShadowMap; } + LightShadowMap* getCurrentDynamicShadowMap() const { return mCurrentDynamicShadowMap; } ShadowMapPass* getShadowMapPass() const { return mShadowMapPass; } @@ -88,6 +90,7 @@ class ShadowMapManager : public ShadowManager ShadowMapPass *mShadowMapPass; LightShadowMap *mCurrentShadowMap; + LightShadowMap *mCurrentDynamicShadowMap; /// GFXTexHandle mTapRotationTex; diff --git a/Engine/source/lighting/shadowMap/shadowMapPass.cpp b/Engine/source/lighting/shadowMap/shadowMapPass.cpp index 67eebc40c3..dea7305b50 100644 --- a/Engine/source/lighting/shadowMap/shadowMapPass.cpp +++ b/Engine/source/lighting/shadowMap/shadowMapPass.cpp @@ -55,6 +55,11 @@ bool ShadowMapPass::smDisableShadows = false; bool ShadowMapPass::smDisableShadowsEditor = false; bool ShadowMapPass::smDisableShadowsPref = false; +/// milliseconds before static redraw +S32 ShadowMapPass::smStaticShadowUpdateFreq = 32; +/// milliseconds before dynamic redraw +S32 ShadowMapPass::smDynamicShadowUpdateFreq = 16; + /// We have a default 8ms render budget for shadow rendering. U32 ShadowMapPass::smRenderBudgetMs = 8; @@ -62,18 +67,27 @@ ShadowMapPass::ShadowMapPass(LightManager* lightManager, ShadowMapManager* shado { mLightManager = lightManager; mShadowManager = shadowManager; + + // Setup our render pass managers + + // Static mShadowRPM = new ShadowRenderPassManager(); mShadowRPM->assignName( "ShadowRenderPassManager" ); mShadowRPM->registerObject(); Sim::getRootGroup()->addObject( mShadowRPM ); - - // Setup our render pass manager - mShadowRPM->addManager( new RenderMeshMgr(RenderPassManager::RIT_Mesh, 0.3f, 0.3f) ); - //mShadowRPM->addManager( new RenderObjectMgr() ); mShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) ); mShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) ); + // Dynamic + mDynamicShadowRPM = new DynamicShadowRenderPassManager(); + mDynamicShadowRPM->assignName( "DynamicShadowRenderPassManager" ); + mDynamicShadowRPM->registerObject(); + Sim::getRootGroup()->addObject( mDynamicShadowRPM ); + mDynamicShadowRPM->addManager( new RenderMeshMgr(RenderPassManager::RIT_Mesh, 0.3f, 0.3f) ); + mDynamicShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) ); + mDynamicShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) ); + mActiveLights = 0; mTimer = PlatformTimer::create(); @@ -117,6 +131,9 @@ ShadowMapPass::~ShadowMapPass() if ( mShadowRPM ) mShadowRPM->deleteObject(); + + if ( mDynamicShadowRPM ) + mDynamicShadowRPM->deleteObject(); } void ShadowMapPass::render( SceneManager *sceneManager, @@ -147,7 +164,7 @@ void ShadowMapPass::render( SceneManager *sceneManager, // First do a loop thru the lights setting up the shadow // info array for this pass. Vector shadowMaps; - shadowMaps.reserve( mActiveLights ); + shadowMaps.reserve( mActiveLights * 2 ); for ( U32 i = 0; i < mActiveLights; i++ ) { ShadowMapParams *params = mLights[i]->getExtended(); @@ -155,12 +172,14 @@ void ShadowMapPass::render( SceneManager *sceneManager, // Before we do anything... skip lights without shadows. if ( !mLights[i]->getCastShadows() || smDisableShadows ) continue; - + + // --- Static Shadow Map --- LightShadowMap *lsm = params->getOrCreateShadowMap(); + LightShadowMap *dlsm = params->getOrCreateShadowMap(true); // First check the visiblity query... if it wasn't // visible skip it. - if ( lsm->wasOccluded() ) + if(params->getOcclusionQuery()->getStatus(true) == GFXOcclusionQuery::Occluded) continue; // Any shadow that is visible is counted as being @@ -168,13 +187,25 @@ void ShadowMapPass::render( SceneManager *sceneManager, ++smActiveShadowMaps; // Do a priority update for this shadow. - lsm->updatePriority( diffuseState, currTime ); + lsm->updatePriority(diffuseState, currTime); + + shadowMaps.push_back(lsm); + + // --- Dynamic Shadow Map --- - shadowMaps.push_back( lsm ); + // Any shadow that is visible is counted as being + // active regardless if we update it or not. + ++smActiveShadowMaps; + + // Do a priority update for this shadow. + dlsm->updatePriority(diffuseState, currTime); + + shadowMaps.push_back( dlsm ); } // Now sort the shadow info by priority. - shadowMaps.sort( LightShadowMap::cmpPriority ); + // andrewmac: tempoarily disabled until I find a better solution. + //shadowMaps.sort( LightShadowMap::cmpPriority ); GFXDEBUGEVENT_SCOPE( ShadowMapPass_Render, ColorI::RED ); @@ -183,22 +214,28 @@ void ShadowMapPass::render( SceneManager *sceneManager, mTimer->getElapsedMs(); mTimer->reset(); - for ( U32 i = 0; i < shadowMaps.size(); i++ ) + // 2 Shadow Maps per Light. This may fail. + for ( U32 i = 0; i < shadowMaps.size(); i += 2 ) { - LightShadowMap *lsm = shadowMaps[i]; + LightShadowMap *lsm = shadowMaps[i]; + LightShadowMap *dlsm = shadowMaps[i + 1]; { GFXDEBUGEVENT_SCOPE( ShadowMapPass_Render_Shadow, ColorI::RED ); - mShadowManager->setLightShadowMap( lsm ); - lsm->render( mShadowRPM, diffuseState ); + mShadowManager->setLightShadowMap(lsm); + mShadowManager->setLightDynamicShadowMap( dlsm ); + + lsm->render(mShadowRPM, diffuseState, false); + dlsm->render(mDynamicShadowRPM, diffuseState, true); + ++smUpdatedShadowMaps; } // View dependent shadows or ones that are covering the entire // screen are updated every frame no matter the time left in // our shadow rendering budget. - if ( lsm->isViewDependent() || lsm->getLastScreenSize() >= 1.0f ) + if ( dlsm->isViewDependent() || dlsm->getLastScreenSize() >= 1.0f ) { ++smNearShadowMaps; continue; @@ -224,6 +261,7 @@ void ShadowMapPass::render( SceneManager *sceneManager, // The NULL here is importaint as having it around // will cause extra work in AdvancedLightManager::setLightInfo(). mShadowManager->setLightShadowMap( NULL ); + mShadowManager->setLightDynamicShadowMap( NULL ); } void ShadowRenderPassManager::addInst( RenderInst *inst ) @@ -237,7 +275,29 @@ void ShadowRenderPassManager::addInst( RenderInst *inst ) return; const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial(); - if ( !mat->castsShadows() || mat->isTranslucent() ) + if ( !mat->castsShadows() || mat->castsDynamicShadows() || mat->isTranslucent() ) + { + // Do not add this instance, return here and avoid the default behavior + // of calling up to Parent::addInst() + return; + } + } + + Parent::addInst(inst); +} + +void DynamicShadowRenderPassManager::addInst( RenderInst *inst ) +{ + PROFILE_SCOPE(DynamicShadowRenderPassManager_addInst); + + if ( inst->type == RIT_Mesh ) + { + MeshRenderInst *meshRI = static_cast( inst ); + if ( !meshRI->matInst ) + return; + + const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial(); + if ( !mat->castsShadows() || !mat->castsDynamicShadows() || mat->isTranslucent() ) { // Do not add this instance, return here and avoid the default behavior // of calling up to Parent::addInst() @@ -246,4 +306,4 @@ void ShadowRenderPassManager::addInst( RenderInst *inst ) } Parent::addInst(inst); -} \ No newline at end of file +} diff --git a/Engine/source/lighting/shadowMap/shadowMapPass.h b/Engine/source/lighting/shadowMap/shadowMapPass.h index 8689153cfd..45e908c91b 100644 --- a/Engine/source/lighting/shadowMap/shadowMapPass.h +++ b/Engine/source/lighting/shadowMap/shadowMapPass.h @@ -45,6 +45,7 @@ class RenderObjectMgr; class RenderTerrainMgr; class PlatformTimer; class ShadowRenderPassManager; +class DynamicShadowRenderPassManager; /// ShadowMapPass, this is plugged into the SceneManager to generate /// ShadowMaps for the scene. @@ -83,6 +84,11 @@ class ShadowMapPass static bool smDisableShadowsEditor; static bool smDisableShadowsPref; + /// milliseconds before static redraw + static S32 smStaticShadowUpdateFreq; + /// milliseconds before dynamic redraw + static S32 smDynamicShadowUpdateFreq; + private: static U32 smActiveShadowMaps; @@ -103,6 +109,7 @@ class ShadowMapPass LightInfoList mLights; U32 mActiveLights; SimObjectPtr mShadowRPM; + SimObjectPtr mDynamicShadowRPM; LightManager* mLightManager; ShadowMapManager* mShadowManager; }; @@ -117,4 +124,14 @@ class ShadowRenderPassManager : public RenderPassManager virtual void addInst( RenderInst *inst ); }; +class DynamicShadowRenderPassManager : public RenderPassManager +{ + typedef RenderPassManager Parent; +public: + DynamicShadowRenderPassManager() : Parent() {} + + /// Add a RenderInstance to the list + virtual void addInst(RenderInst *inst); +}; + #endif // _SHADOWMAPPASS_H_ diff --git a/Engine/source/materials/baseMaterialDefinition.h b/Engine/source/materials/baseMaterialDefinition.h index c1c033015a..1022903c02 100644 --- a/Engine/source/materials/baseMaterialDefinition.h +++ b/Engine/source/materials/baseMaterialDefinition.h @@ -37,6 +37,7 @@ class BaseMaterialDefinition : public SimObject virtual bool isDoubleSided() const = 0; virtual bool isLightmapped() const = 0; virtual bool castsShadows() const = 0; + virtual bool castsDynamicShadows() const = 0; }; #endif // _BASEMATERIALDEFINITION_H_ diff --git a/Engine/source/materials/matTextureTarget.cpp b/Engine/source/materials/matTextureTarget.cpp index ba84142f6c..f6770c83b0 100644 --- a/Engine/source/materials/matTextureTarget.cpp +++ b/Engine/source/materials/matTextureTarget.cpp @@ -47,9 +47,16 @@ bool NamedTexTarget::registerWithName( const String &name ) } // Make sure the target name isn't empty or already taken. - if ( name.isEmpty() || smTargets.contains( name ) ) + if ( name.isEmpty()) + { + Con::errorf("NamedTexTarget::registerWithName( const String &name ) No name given!"); + return false; + } + if (smTargets.contains( name ) ) + { + Con::errorf("NamedTexTarget::registerWithName( %s ) Already used!", name.c_str()); return false; - + } mName = name; mIsRegistered = true; smTargets.insert( mName, this ); diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 7e069c8958..947b7b9b9e 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -162,6 +162,9 @@ Material::Material() mSeqFramePerSec[i] = 0.0f; mSeqSegSize[i] = 0.0f; + + // Deferred Shading + mMatInfoFlags[i] = 0.0f; } dMemset(mCellIndex, 0, sizeof(mCellIndex)); @@ -170,6 +173,9 @@ Material::Material() dMemset(mNormalMapAtlas, 0, sizeof(mNormalMapAtlas)); dMemset(mUseAnisotropic, 0, sizeof(mUseAnisotropic)); + // Deferred Shading : Metalness + dMemset(mUseMetalness, 0, sizeof(mUseMetalness)); + mImposterLimits = Point4F::Zero; mDoubleSided = false; @@ -182,6 +188,7 @@ Material::Material() mAlphaRef = 1; mCastShadows = true; + mCastDynamicShadows = false; mPlanarReflection = false; @@ -288,10 +295,7 @@ void Material::initPersistFields() addField( "useAnisotropic", TypeBool, Offset(mUseAnisotropic, Material), MAX_STAGES, "Use anisotropic filtering for the textures of this stage." ); - - addField("envMap", TypeImageFilename, Offset(mEnvMapFilename, Material), MAX_STAGES, - "The name of an environment map cube map to apply to this material." ); - + addField("vertLit", TypeBool, Offset(mVertLit, Material), MAX_STAGES, "If true the vertex color is used for lighting." ); @@ -378,9 +382,6 @@ void Material::initPersistFields() addProtectedField("bumpTex", TypeImageFilename, Offset(mNormalMapFilename, Material), defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, "For backwards compatibility.\n@see normalMap\n"); - addProtectedField("envTex", TypeImageFilename, Offset(mEnvMapFilename, Material), - defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, - "For backwards compatibility.\n@see envMap\n"); addProtectedField("colorMultiply", TypeColorF, Offset(mDiffuse, Material), defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, "For backwards compatibility.\n@see diffuseColor\n"); @@ -390,6 +391,9 @@ void Material::initPersistFields() addField( "castShadows", TypeBool, Offset(mCastShadows, Material), "If set to false the lighting system will not cast shadows from this material." ); + addField( "castDynamicShadows", TypeBool, Offset(mCastDynamicShadows, Material), + "If set to false the lighting system will not cast dynamic shadows from this material." ); + addField("planarReflection", TypeBool, Offset(mPlanarReflection, Material), "@internal" ); addField("translucent", TypeBool, Offset(mTranslucent, Material), diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index 574472dbc8..52043c66e6 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -89,6 +89,7 @@ class Material : public BaseMaterialDefinition NormalizeCube, TexTarget, AccuMap, + DynamicShadowMap, }; enum BlendOp @@ -219,9 +220,7 @@ class Material : public BaseMaterialDefinition /// The strength scalar for the detail normal map. F32 mDetailNormalMapStrength[MAX_STAGES]; - - FileName mEnvMapFilename[MAX_STAGES]; - + /// This color is the diffuse color of the material /// or if it has a texture it is multiplied against /// the diffuse texture color. @@ -286,12 +285,17 @@ class Material : public BaseMaterialDefinition /// If the stage should use anisotropic filtering. bool mUseAnisotropic[MAX_STAGES]; + // Deferred Shading: Metalness + bool mUseMetalness[MAX_STAGES]; + bool mDoubleSided; String mCubemapName; CubemapData* mCubemapData; bool mDynamicCubemap; + // Deferred Shading + F32 mMatInfoFlags[MAX_STAGES]; bool mTranslucent; BlendOp mTranslucentBlendOp; bool mTranslucentZWrite; @@ -299,6 +303,7 @@ class Material : public BaseMaterialDefinition /// A generic setting which tells the system to skip /// generation of shadows from this material. bool mCastShadows; + bool mCastDynamicShadows; bool mAlphaTest; U32 mAlphaRef; @@ -355,6 +360,7 @@ class Material : public BaseMaterialDefinition virtual void setAutoGenerated(bool isAutoGenerated) { mAutoGenerated = isAutoGenerated; } virtual bool isLightmapped() const; virtual bool castsShadows() const { return mCastShadows; } + virtual bool castsDynamicShadows() const { return mCastDynamicShadows; } const String &getPath() const { return mPath; } void flush(); diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index f7a63815b0..513474c778 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -30,7 +30,6 @@ ImplementFeatureType( MFT_VertTransform, MFG_Transform, 0, true ); ImplementFeatureType( MFT_TexAnim, MFG_PreTexture, 1.0f, true ); ImplementFeatureType( MFT_Parallax, MFG_PreTexture, 2.0f, true ); -ImplementFeatureType( MFT_DiffuseVertColor, MFG_PreTexture, 3.0f, true ); ImplementFeatureType( MFT_AccuScale, MFG_PreTexture, 4.0f, true ); ImplementFeatureType( MFT_AccuDirection, MFG_PreTexture, 4.0f, true ); @@ -42,10 +41,12 @@ ImplementFeatureType( MFT_DiffuseMap, MFG_Texture, 2.0f, true ); ImplementFeatureType( MFT_OverlayMap, MFG_Texture, 3.0f, true ); ImplementFeatureType( MFT_DetailMap, MFG_Texture, 4.0f, true ); ImplementFeatureType( MFT_DiffuseColor, MFG_Texture, 5.0f, true ); +ImplementFeatureType( MFT_DiffuseVertColor, MFG_Texture, 6.0f, true ); ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true ); ImplementFeatureType( MFT_SpecularMap, MFG_Texture, 8.0f, true ); ImplementFeatureType( MFT_NormalMap, MFG_Texture, 9.0f, true ); ImplementFeatureType( MFT_DetailNormalMap, MFG_Texture, 10.0f, true ); +ImplementFeatureType( MFT_Imposter, U32(-1), -1, true ); ImplementFeatureType( MFT_AccuMap, MFG_PreLighting, 2.0f, true ); @@ -55,10 +56,9 @@ ImplementFeatureType( MFT_LightMap, MFG_Lighting, 4.0f, true ); ImplementFeatureType( MFT_ToneMap, MFG_Lighting, 5.0f, true ); ImplementFeatureType( MFT_VertLitTone, MFG_Lighting, 6.0f, false ); ImplementFeatureType( MFT_VertLit, MFG_Lighting, 7.0f, true ); -ImplementFeatureType( MFT_EnvMap, MFG_Lighting, 8.0f, true ); -ImplementFeatureType( MFT_CubeMap, MFG_Lighting, 9.0f, true ); -ImplementFeatureType( MFT_PixSpecular, MFG_Lighting, 10.0f, true ); -ImplementFeatureType( MFT_MinnaertShading, MFG_Lighting, 12.0f, true ); +ImplementFeatureType( MFT_PixSpecular, MFG_Lighting, 9.0f, true ); +ImplementFeatureType( MFT_MinnaertShading, MFG_Lighting, 10.0f, true ); +ImplementFeatureType( MFT_CubeMap, MFG_Lighting, 11.0f, true ); ImplementFeatureType( MFT_GlowMask, MFG_PostLighting, 1.0f, true ); ImplementFeatureType( MFT_Visibility, MFG_PostLighting, 2.0f, true ); @@ -84,6 +84,8 @@ ImplementFeatureType( MFT_NormalsOut, MFG_PreLighting, 1.0f, false ); ImplementFeatureType( MFT_LightbufferMRT, MFG_PreLighting, 1.0f, false ); ImplementFeatureType( MFT_RenderTarget1_Zero, MFG_PreTexture, 1.0f, false ); +ImplementFeatureType( MFT_RenderTarget2_Zero, MFG_PreTexture, 1.0f, false ); +ImplementFeatureType( MFT_RenderTarget3_Zero, MFG_PreTexture, 1.0f, false ); ImplementFeatureType( MFT_Foliage, MFG_PreTransform, 1.0f, false ); @@ -91,4 +93,13 @@ ImplementFeatureType( MFT_ParticleNormal, MFG_PreTransform, 2.0f, false ); ImplementFeatureType( MFT_ForwardShading, U32(-1), -1, true ); -ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); \ No newline at end of file +ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); + +// Deferred Shading +ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true ); +ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, false ); +ImplementFeatureType( MFT_DeferredEmptySpec, MFG_Texture, 8.01f, false ); + +ImplementFeatureType( MFT_DeferredSpecMap, MFG_Texture, 8.2f, false ); +ImplementFeatureType( MFT_DeferredSpecVars, MFG_Texture, 8.5f, false ); +ImplementFeatureType( MFT_DeferredMatInfoFlags, MFG_Texture, 8.7f, false ); diff --git a/Engine/source/materials/materialFeatureTypes.h b/Engine/source/materials/materialFeatureTypes.h index 55b52506c6..a002cd190d 100644 --- a/Engine/source/materials/materialFeatureTypes.h +++ b/Engine/source/materials/materialFeatureTypes.h @@ -94,6 +94,7 @@ DeclareFeatureType( MFT_OverlayMap ); DeclareFeatureType( MFT_DetailMap ); DeclareFeatureType( MFT_DiffuseColor ); DeclareFeatureType( MFT_DetailNormalMap ); +DeclareFeatureType( MFT_Imposter ); DeclareFeatureType( MFT_AccuMap ); DeclareFeatureType( MFT_AccuScale ); @@ -120,7 +121,6 @@ DeclareFeatureType( MFT_ToneMap ); DeclareFeatureType( MFT_VertLit ); DeclareFeatureType( MFT_VertLitTone ); -DeclareFeatureType( MFT_EnvMap ); DeclareFeatureType( MFT_CubeMap ); DeclareFeatureType( MFT_PixSpecular ); DeclareFeatureType( MFT_SpecularMap ); @@ -157,8 +157,10 @@ DeclareFeatureType( MFT_InterlacedPrePass ); /// to the second render-target DeclareFeatureType( MFT_LightbufferMRT ); -/// This feature outputs black to RenderTarget1 +/// This feature outputs black to RenderTarget3 DeclareFeatureType( MFT_RenderTarget1_Zero ); +DeclareFeatureType( MFT_RenderTarget2_Zero ); +DeclareFeatureType( MFT_RenderTarget3_Zero ); DeclareFeatureType( MFT_Foliage ); @@ -178,4 +180,11 @@ DeclareFeatureType( MFT_ForwardShading ); DeclareFeatureType( MFT_ImposterVert ); +// Deferred Shading +DeclareFeatureType( MFT_isDeferred ); +DeclareFeatureType( MFT_SkyBox ); +DeclareFeatureType( MFT_DeferredSpecMap ); +DeclareFeatureType( MFT_DeferredSpecVars ); +DeclareFeatureType( MFT_DeferredMatInfoFlags ); +DeclareFeatureType( MFT_DeferredEmptySpec ); #endif // _MATERIALFEATURETYPES_H_ diff --git a/Engine/source/materials/miscShdrDat.h b/Engine/source/materials/miscShdrDat.h index 25422008d1..9ebaa6f467 100644 --- a/Engine/source/materials/miscShdrDat.h +++ b/Engine/source/materials/miscShdrDat.h @@ -22,10 +22,6 @@ #ifndef _MISCSHDRDAT_H_ #define _MISCSHDRDAT_H_ -#ifndef _PLATFORM_H_ -#include "platform/platform.h" -#endif - //************************************************************************** // This file is an attempt to keep certain classes from having to know about // the ShaderGen class @@ -45,6 +41,7 @@ enum RegisterType RT_COLOR, RT_TEXCOORD, RT_VPOS, + RT_SVPOSITION }; enum Components @@ -52,7 +49,7 @@ enum Components C_VERT_STRUCT = 0, C_CONNECTOR, C_VERT_MAIN, - C_PIX_MAIN, + C_PIX_MAIN }; #endif // _MISCSHDRDAT_H_ diff --git a/Engine/source/materials/processedCustomMaterial.cpp b/Engine/source/materials/processedCustomMaterial.cpp index 90994af69d..765675a214 100644 --- a/Engine/source/materials/processedCustomMaterial.cpp +++ b/Engine/source/materials/processedCustomMaterial.cpp @@ -85,6 +85,14 @@ void ProcessedCustomMaterial::_setStageData() continue; } + if(filename.equal(String("$dynamicShadowMap"), String::NoCase)) + { + rpd->mTexType[i] = Material::DynamicShadowMap; + rpd->mSamplerNames[i] = mCustomMaterial->mSamplerNames[i]; + mMaxTex = i+1; + continue; + } + if(filename.equal(String("$dynamiclightmask"), String::NoCase)) { rpd->mTexType[i] = Material::DynamicLightMask; diff --git a/Engine/source/materials/processedMaterial.cpp b/Engine/source/materials/processedMaterial.cpp index 10181179ef..00a3b8ec26 100644 --- a/Engine/source/materials/processedMaterial.cpp +++ b/Engine/source/materials/processedMaterial.cpp @@ -455,14 +455,6 @@ void ProcessedMaterial::_setStageData() if(!mStages[i].getTex( MFT_SpecularMap )) mMaterial->logError("Failed to load specular map %s for stage %i", _getTexturePath(mMaterial->mSpecularMapFilename[i]).c_str(), i); } - - // EnironmentMap - if( mMaterial->mEnvMapFilename[i].isNotEmpty() ) - { - mStages[i].setTex( MFT_EnvMap, _createTexture( mMaterial->mEnvMapFilename[i], &GFXDefaultStaticDiffuseProfile ) ); - if(!mStages[i].getTex( MFT_EnvMap )) - mMaterial->logError("Failed to load environment map %s for stage %i", _getTexturePath(mMaterial->mEnvMapFilename[i]).c_str(), i); - } } mMaterial->mCubemapData = dynamic_cast(Sim::findObject( mMaterial->mCubemapName )); diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 431e3bce65..cd230ef534 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -106,6 +106,9 @@ void ShaderConstHandles::init( GFXShader *shader, CustomMaterial* mat /*=NULL*/ for (S32 i = 0; i < Material::MAX_TEX_PER_PASS; ++i) mTexHandlesSC[i] = shader->getShaderConstHandle(mat->mSamplerNames[i]); } + + // Deferred Shading + mMatInfoFlagsSC = shader->getShaderConstHandle(ShaderGenVars::matInfoFlags); } /// @@ -206,30 +209,8 @@ bool ProcessedShaderMaterial::init( const FeatureSet &features, if ( mFeatures.hasFeature( MFT_UseInstancing ) ) { mInstancingState = new InstancingState(); - mInstancingState->setFormat( &_getRPD( 0 )->shader->mInstancingFormat, mVertexFormat ); + mInstancingState->setFormat( _getRPD( 0 )->shader->getInstancingFormat(), mVertexFormat ); } - - // Check for a RenderTexTargetBin assignment - // *IMPORTANT NOTE* - // This is a temporary solution for getting diffuse mapping working with tex targets for standard materials - // It should be removed once this is done properly, at that time the sAllowTextureTargetAssignment should also be removed - // from Material (it is necessary for catching shadow maps/post effect this shouldn't be applied to) - if (Material::sAllowTextureTargetAssignment) - if (mMaterial && mMaterial->mDiffuseMapFilename[0].isNotEmpty() && mMaterial->mDiffuseMapFilename[0].substr( 0, 1 ).equal("#")) - { - String texTargetBufferName = mMaterial->mDiffuseMapFilename[0].substr(1, mMaterial->mDiffuseMapFilename[0].length() - 1); - NamedTexTarget *texTarget = NamedTexTarget::find( texTargetBufferName ); - - RenderPassData* rpd = getPass(0); - - if (rpd) - { - rpd->mTexSlot[0].texTarget = texTarget; - rpd->mTexType[0] = Material::TexTarget; - rpd->mSamplerNames[0] = "diffuseMap"; - } - } - return true; } @@ -353,11 +334,18 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, fd.features.addFeature( MFT_VertLit ); // cubemaps only available on stage 0 for now - bramage - if ( stageNum < 1 && + if ( stageNum < 1 && mMaterial->isTranslucent() && ( ( mMaterial->mCubemapData && mMaterial->mCubemapData->mCubemap ) || mMaterial->mDynamicCubemap ) ) - fd.features.addFeature( MFT_CubeMap ); + { + fd.features.addFeature( MFT_CubeMap ); + } + if (features.hasFeature(MFT_SkyBox)) + { + fd.features.addFeature(MFT_CubeMap); + fd.features.addFeature(MFT_SkyBox); + } fd.features.addFeature( MFT_Visibility ); if ( lastStage && @@ -428,7 +416,6 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, if ( mMaterial->mAccuEnabled[stageNum] ) { - fd.features.addFeature( MFT_AccuMap ); mHasAccumulation = true; } @@ -441,19 +428,7 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, fd.features.removeFeature( MFT_AccuMap ); mHasAccumulation = false; } - - // if we still have the AccuMap feature, we add all accu constant features - if ( fd.features[ MFT_AccuMap ] ) { - // add the dependencies of the accu map - fd.features.addFeature( MFT_AccuScale ); - fd.features.addFeature( MFT_AccuDirection ); - fd.features.addFeature( MFT_AccuStrength ); - fd.features.addFeature( MFT_AccuCoverage ); - fd.features.addFeature( MFT_AccuSpecular ); - // now remove some features that are not compatible with this - fd.features.removeFeature( MFT_UseInstancing ); - } - + // Without a base texture use the diffuse color // feature to ensure some sort of output. if (!fd.features[MFT_DiffuseMap]) @@ -1175,7 +1150,13 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons 0.0f, 0.0f ); // TODO: Wrap mode flags? shaderConsts->setSafe(handles->mBumpAtlasTileSC, atlasTileParams); } - + + // Deferred Shading: Determine Material Info Flags + S32 matInfoFlags = + (mMaterial->mEmissive[stageNum] ? 1 : 0) | //emissive + (mMaterial->mSubSurface[stageNum] ? 2 : 0); //subsurface + mMaterial->mMatInfoFlags[stageNum] = matInfoFlags / 255.0f; + shaderConsts->setSafe(handles->mMatInfoFlagsSC, mMaterial->mMatInfoFlags[stageNum]); if( handles->mAccuScaleSC->isValid() ) shaderConsts->set( handles->mAccuScaleSC, mMaterial->mAccuScale[stageNum] ); if( handles->mAccuDirectionSC->isValid() ) diff --git a/Engine/source/materials/processedShaderMaterial.h b/Engine/source/materials/processedShaderMaterial.h index dc5dbf8722..4f7c670237 100644 --- a/Engine/source/materials/processedShaderMaterial.h +++ b/Engine/source/materials/processedShaderMaterial.h @@ -87,6 +87,9 @@ class ShaderConstHandles GFXShaderConstHandle *mImposterUVs; GFXShaderConstHandle *mImposterLimits; + // Deferred Shading : Material Info Flags + GFXShaderConstHandle* mMatInfoFlagsSC; + GFXShaderConstHandle* mTexHandlesSC[Material::MAX_TEX_PER_PASS]; GFXShaderConstHandle* mRTParamsSC[TEXTURE_STAGE_COUNT]; @@ -164,6 +167,8 @@ class ProcessedShaderMaterial : public ProcessedMaterial mInstFormat = instFormat; mDeclFormat.copy( *vertexFormat ); mDeclFormat.append( *mInstFormat, 1 ); + // Let the declaration know we have instancing. + mDeclFormat.enableInstancing(); mDeclFormat.getDecl(); delete [] mBuffer; diff --git a/Engine/source/materials/shaderData.cpp b/Engine/source/materials/shaderData.cpp index 36e0a39949..e8c1dbb3bb 100644 --- a/Engine/source/materials/shaderData.cpp +++ b/Engine/source/materials/shaderData.cpp @@ -236,6 +236,7 @@ GFXShader* ShaderData::_createShader( const Vector ¯os ) { case Direct3D9_360: case Direct3D9: + case Direct3D11: { success = shader->init( mDXVertexShaderName, mDXPixelShaderName, diff --git a/Engine/source/math/mBox.h b/Engine/source/math/mBox.h index 379d5291a1..b81775bb0e 100644 --- a/Engine/source/math/mBox.h +++ b/Engine/source/math/mBox.h @@ -415,7 +415,7 @@ inline void Box3F::extend(const Point3F & p) #define EXTEND_AXIS(AXIS) \ if (p.AXIS < minExtents.AXIS) \ minExtents.AXIS = p.AXIS; \ -else if (p.AXIS > maxExtents.AXIS) \ +if (p.AXIS > maxExtents.AXIS) \ maxExtents.AXIS = p.AXIS; EXTEND_AXIS(x) diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index 1a11fe23e4..1d57743e66 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -103,6 +103,19 @@ DefineConsoleFunction( mRound, S32, ( F32 v ),, return mRound(v); } +DefineConsoleFunction( mRoundColour, F32, ( F32 v, S32 n ), (0), + "Round v to the nth decimal place or the nearest whole number by default." + "@param v Value to roundn" + "@param n Number of decimal places to round to, 0 by defaultn" + "@return The rounded value as a S32." + "@ingroup Math") +{ + if (n <= 0) + return mRound(v); + else + return mRound(v, n); +} + DefineConsoleFunction( mCeil, S32, ( F32 v ),, "Round v up to the nearest integer.\n" "@param v Number to convert to integer." diff --git a/Engine/source/math/mMath.h b/Engine/source/math/mMath.h index a1e070db77..4710f6bf0f 100644 --- a/Engine/source/math/mMath.h +++ b/Engine/source/math/mMath.h @@ -48,5 +48,8 @@ #ifndef _MEASE_H_ #include "math/mEase.h" #endif +#ifndef MROTATION_H +#include "math/mRotation.h" +#endif #endif //_MMATH_H_ diff --git a/Engine/source/math/mPoint2.h b/Engine/source/math/mPoint2.h index f814ddbbc5..c141400b93 100644 --- a/Engine/source/math/mPoint2.h +++ b/Engine/source/math/mPoint2.h @@ -438,6 +438,7 @@ inline Point2I Point2I::operator/(const Point2I &_vec) const inline Point2I& Point2I::operator/=(const Point2I &_vec) { + AssertFatal(_vec.x != 0 && _vec.y != 0, "Error, div by zero attempted"); x /= _vec.x; y /= _vec.y; return *this; @@ -645,6 +646,7 @@ inline Point2F Point2F::operator/(const Point2F &_vec) const inline Point2F& Point2F::operator/=(const Point2F &_vec) { + AssertFatal(_vec.x != 0 && _vec.y != 0, "Error, div by zero attempted"); x /= _vec.x; y /= _vec.y; return *this; @@ -908,6 +910,14 @@ inline bool mIsNaN( const Point2F &p ) return mIsNaN_F( p.x ) || mIsNaN_F( p.y ); } +/// Return 0 if points are colinear +/// Return positive if p0p1p2 are counter-clockwise +/// Return negative if p0p1p2 are clockwise +inline F64 mCross(const Point2F &p0, const Point2F &p1, const Point2F &pt2) +{ + return (p1.x - p0.x) * (pt2.y - p0.y) - (p1.y - p0.y) * (pt2.x - p0.x); +} + namespace DictHash { diff --git a/Engine/source/math/mPolyhedron.impl.h b/Engine/source/math/mPolyhedron.impl.h index ef74995abd..796f113506 100644 --- a/Engine/source/math/mPolyhedron.impl.h +++ b/Engine/source/math/mPolyhedron.impl.h @@ -385,6 +385,8 @@ U32 PolyhedronImpl< Base >::extractFace( U32 plane, IndexType* outIndices, U32 m // so it should be sufficiently fast to just loop over the original // set. + U32 indexItr = 0; + do { // Add the vertex for the current edge. @@ -392,7 +394,15 @@ U32 PolyhedronImpl< Base >::extractFace( U32 plane, IndexType* outIndices, U32 m if( idx >= maxOutIndices ) return 0; - outIndices[ idx ++ ] = currentVertex; + ++indexItr; + + if (indexItr >= 3) + { + outIndices[idx++] = firstEdge->vertex[0]; + indexItr = 0; + } + + outIndices[idx++] = currentVertex; // Look for next edge. diff --git a/Engine/source/math/mQuat.h b/Engine/source/math/mQuat.h index 2ea1b94c1e..ca6ed5d82a 100644 --- a/Engine/source/math/mQuat.h +++ b/Engine/source/math/mQuat.h @@ -227,8 +227,8 @@ inline F32 QuatF::dot( const QuatF &q ) const inline F32 QuatF::angleBetween( const QuatF & q ) { - // angle between to quaternions - return mAcos(x * q.x + y * q.y + z * q.z + w * q.w); + // angle between two normalized quaternions. + return mAcos(q.dot(*this)) * 2.0f; } #endif // _MQUAT_H_ diff --git a/Engine/source/math/mRotation.cpp b/Engine/source/math/mRotation.cpp new file mode 100644 index 0000000000..69dfca35d0 --- /dev/null +++ b/Engine/source/math/mRotation.cpp @@ -0,0 +1,348 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "math/mRotation.h" +#include "console/console.h" +#include "console/engineAPI.h" + +#ifdef TORQUE_TESTS_ENABLED +#include "testing/unitTesting.h" +#endif + +//==================================================================== +//Eulers setup +//==================================================================== +RotationF::RotationF(EulerF _euler, UnitFormat format) +{ + set(_euler.x, _euler.y, _euler.z, format); +} + +RotationF::RotationF(F32 _x, F32 _y, F32 _z, UnitFormat format) +{ + set(_x, _y, _z, format); +} + +void RotationF::set(EulerF _euler, UnitFormat format) +{ + x = format == Degrees ? mDegToRad(_euler.x) : _euler.x; + y = format == Degrees ? mDegToRad(_euler.y) : _euler.y; + z = format == Degrees ? mDegToRad(_euler.z) : _euler.z; + + mRotationType = Euler; +} + +void RotationF::set(F32 _x, F32 _y, F32 _z, UnitFormat format) +{ + EulerF tempEul; + if (format == Degrees) + { + tempEul.set(mDegToRad(_x), mDegToRad(_y), mDegToRad(_z)); + } + else + { + tempEul.set(_x, _y, _z); + } + + set(tempEul); +} + +//==================================================================== +//AxisAngle setup +//==================================================================== +RotationF::RotationF(AngAxisF _aa, UnitFormat format) +{ + set(_aa, format); +} + +void RotationF::set(AngAxisF _aa, UnitFormat format) +{ + x = _aa.axis.x; + y = _aa.axis.y; + z = _aa.axis.z; + + w = format == Degrees ? mDegToRad(_aa.angle) : _aa.angle; + + mRotationType = AxisAngle; +} + +//==================================================================== +//QuatF setup +//==================================================================== +RotationF::RotationF(QuatF _quat) +{ + set(_quat); +} + +void RotationF::set(QuatF _quat) +{ + AngAxisF tmpAA; + tmpAA.set(_quat); + + set(tmpAA); +} + +//==================================================================== +//MatrixF setup +//==================================================================== +RotationF::RotationF(MatrixF _mat) +{ + set(_mat); +} + +void RotationF::set(MatrixF _mat) +{ + set(_mat.toEuler()); +} + +// +inline F32 RotationF::len() const +{ + return asEulerF().len(); +} + +inline void RotationF::interpolate(const RotationF& _from, const RotationF& _to, F32 _factor) +{ + QuatF tmpQuat; + + tmpQuat.interpolate(_from.asQuatF(), _to.asQuatF(), _factor); + + set(tmpQuat); +} + +void RotationF::lookAt(const Point3F& _origin, const Point3F& _target, const Point3F& _up) +{ + MatrixF mat; + + VectorF newForward = _target - _origin; + newForward.normalize(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (_up != VectorF::Zero) + up = _up; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + //degenerate forward vector + axisY.set(0.0f, 1.0f, 0.0f); + } + else + { + axisY /= mSqrt(lenSq); + } + + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + //degenerate up vector - too small + up.set(0.0f, 0.0f, 1.0f); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + //degenerate up vector - same as forward + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + set(mat); +} + +//======================================================== +EulerF RotationF::asEulerF(UnitFormat _format) const +{ + if (mRotationType == Euler) + { + if (_format == Degrees) + { + return EulerF(mRadToDeg(x), mRadToDeg(y), mRadToDeg(z)); + } + else + { + return EulerF(x, y, z); + } + } + else + { + EulerF returnEuler = asMatrixF().toEuler(); + + if (_format == Degrees) + { + returnEuler.x = mRadToDeg(returnEuler.x); + returnEuler.y = mRadToDeg(returnEuler.y); + returnEuler.z = mRadToDeg(returnEuler.z); + } + + return returnEuler; + } +} + +AngAxisF RotationF::asAxisAngle(UnitFormat format) const +{ + AngAxisF returnAA; + + if (mRotationType == Euler) + { + returnAA.set(EulerF(x, y, z)); + } + else + { + returnAA.set(Point3F(x, y, z), w); + } + + if (format == Radians) + { + returnAA.angle = mDegToRad(returnAA.angle); + } + + return returnAA; +} + +MatrixF RotationF::asMatrixF() const +{ + MatrixF returnMat; + if (mRotationType == Euler) + { + returnMat.set(EulerF(x, y, z)); + } + else + { + AngAxisF aa; + aa.set(Point3F(x, y, z), w); + + aa.setMatrix(&returnMat); + } + + return returnMat; +} + +QuatF RotationF::asQuatF() const +{ + QuatF returnQuat; + if (mRotationType == Euler) + { + returnQuat.set(EulerF(x, y, z)); + } + else + { + AngAxisF aa; + aa.set(Point3F(x, y, z), w); + + returnQuat.set(aa); + } + + return returnQuat; +} + +void RotationF::normalize() +{ + if (mRotationType == Euler) + { + EulerF eul = EulerF(x, y, z); + eul.normalize(); + set(eul); + } + else + { + QuatF quat; + quat.set(Point3F(x, y, z), w); + + quat.normalize(); + + set(quat); + } +} + +//Testing +#ifdef TORQUE_TESTS_ENABLED +TEST(Maths, RotationF_Calculations) +{ + //TODO: implement unit test +}; +#endif + +DefineConsoleStaticMethod(Rotation, Add, RotationF, (RotationF a, RotationF b), , + "Adds two rotations together.\n" + "@param a Rotation one." + "@param b Rotation two." + "@returns v sum of both rotations." + "@ingroup Math") +{ + return a + b; +} + +DefineConsoleStaticMethod(Rotation, Subtract, RotationF, (RotationF a, RotationF b), , + "Subtracts two rotations.\n" + "@param a Rotation one." + "@param b Rotation two." + "@returns v difference of both rotations." + "@ingroup Math") +{ + return a - b; +} + +DefineConsoleStaticMethod(Rotation, Interpolate, RotationF, (RotationF a, RotationF b, F32 factor), , + "Interpolates between two rotations.\n" + "@param a Rotation one." + "@param b Rotation two." + "@param factor The amount to interpolate between the two." + "@returns v, interpolated result." + "@ingroup Math") +{ + RotationF result; + result.interpolate(a, b, factor); + return result; +} + +DefineConsoleStaticMethod(Rotation, LookAt, RotationF, (Point3F origin, Point3F target, Point3F up), + (Point3F(0, 0, 0), Point3F(0, 0, 0), Point3F(0, 0, 1)), + "Provides a rotation orientation to look at a target from a given position.\n" + "@param origin Position of the object doing the looking." + "@param target Position to be looked at." + "@param up The up angle to orient the rotation." + "@returns v orientation result." + "@ingroup Math") +{ + RotationF result; + result.lookAt(origin, target, up); + return result; +} \ No newline at end of file diff --git a/Engine/source/math/mRotation.h b/Engine/source/math/mRotation.h new file mode 100644 index 0000000000..a99510b8c3 --- /dev/null +++ b/Engine/source/math/mRotation.h @@ -0,0 +1,465 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef MROTATION_H +#define MROTATION_H + +#ifndef _MMATHFN_H_ +#include "math/mMathFn.h" +#endif + +#ifndef _MPOINT3_H_ +#include "math/mPoint3.h" +#endif + +#ifndef _MQUAT_H_ +#include "math/mQuat.h" +#endif + +#ifndef _MMATRIX_H_ +#include "math/mMatrix.h" +#endif + +#ifndef _MANGAXIS_H_ +#include "math/mAngAxis.h" +#endif + +//------------------------------------------------------------------------------ +/// Rotation Interop Utility class +/// +/// Useful for easily handling rotations/orientations in transforms while manipulating or converting between formats. +class RotationF +{ + //-------------------------------------- Public data +public: + F32 x; ///< X co-ordinate. + F32 y; ///< Y co-ordinate. + F32 z; ///< Z co-ordinate. + F32 w; ///< W co-ordinate. + + enum RotationTypes + { + Euler = 0, + AxisAngle + }; + RotationTypes mRotationType; + + enum UnitFormat + { + Radians = 0, + Degrees + }; + + RotationF(); ///< Create an uninitialized point. + RotationF(const RotationF&); ///< Copy constructor. + + // + //Eulers + RotationF(EulerF euler, UnitFormat format = Radians); + RotationF(F32 _x, F32 _y, F32 _z, UnitFormat format = Radians); + + void set(EulerF euler, UnitFormat format = Radians); + void set(F32 _x, F32 _y, F32 _z, UnitFormat format = Radians); + + //As with AxisAngles, we make the assumption here that if not told otherwise, inbound rotations are in Degrees. + RotationF operator=(const EulerF&); + RotationF operator-(const EulerF&) const; + RotationF operator+(const EulerF&) const; + RotationF& operator-=(const EulerF&); + RotationF& operator+=(const EulerF&); + S32 operator==(const EulerF&) const; + S32 operator!=(const EulerF&) const; + + // + //AxisAngle + RotationF(AngAxisF aa, UnitFormat format = Radians); + void set(AngAxisF aa, UnitFormat format = Radians); + + //As with Eulers, we make the assumption here that if not told otherwise, inbound rotations are in Degrees. + RotationF operator=(const AngAxisF&); + RotationF operator-(const AngAxisF&) const; + RotationF operator+(const AngAxisF&) const; + RotationF& operator-=(const AngAxisF&); + RotationF& operator+=(const AngAxisF&); + S32 operator==(const AngAxisF&) const; + S32 operator!=(const AngAxisF&) const; + + // + //Quat + RotationF(QuatF quat); + void set(QuatF _quat); + + RotationF operator=(const QuatF&); + RotationF operator-(const QuatF&) const; + RotationF operator+(const QuatF&) const; + RotationF& operator-=(const QuatF&); + RotationF& operator+=(const QuatF&); + S32 operator==(const QuatF&) const; + S32 operator!=(const QuatF&) const; + + // + //Matrix + RotationF(MatrixF mat); + void set(MatrixF _mat); + + RotationF operator=(const MatrixF&); + RotationF operator-(const MatrixF&) const; + RotationF operator+(const MatrixF&) const; + RotationF& operator-=(const MatrixF&); + RotationF& operator+=(const MatrixF&); + S32 operator==(const MatrixF&) const; + S32 operator!=(const MatrixF&) const; + + // + void interpolate(const RotationF& _pt1, const RotationF& _pt2, F32 _factor); + void lookAt(const Point3F& _origin, const Point3F& _target, const Point3F& _up = Point3F(0, 0, 1)); + + F32 len() const; + + void normalize(); + + //Non-converting operators + S32 operator ==(const RotationF &) const; + S32 operator !=(const RotationF &) const; + + RotationF operator+(const RotationF&) const; + RotationF& operator+=(const RotationF&); + RotationF operator-(const RotationF&) const; + RotationF& operator-=(const RotationF&); + + RotationF& operator=(const RotationF&); + + //Conversion stuffs + EulerF asEulerF(UnitFormat format = Radians) const; + AngAxisF asAxisAngle(UnitFormat format = Radians) const; + MatrixF asMatrixF() const; + QuatF asQuatF() const; +}; + +inline RotationF::RotationF() +{ + x = 0; + y = 0; + z = 0; + w = 0; + + mRotationType = AxisAngle; +} + +inline RotationF::RotationF(const RotationF& _copy) + : x(_copy.x), y(_copy.y), z(_copy.z), w(_copy.w), mRotationType(_copy.mRotationType) +{} + +inline int RotationF::operator ==(const RotationF& _rotation) const +{ + return (x == _rotation.x && y == _rotation.y && z == _rotation.z && w == _rotation.w); +} + +inline int RotationF::operator !=(const RotationF& _rotation) const +{ + return (x != _rotation.x || y != _rotation.y || z != _rotation.z || w != _rotation.w); +} + +//When it comes to actually trying to add rotations, we, in fact, actually multiply their data together. +//Since we're specifically operating on usability for RotationF, we'll operate on this, rather than the literal addition of the values +inline RotationF& RotationF::operator +=(const RotationF& _rotation) +{ + if (mRotationType == Euler) + { + x += _rotation.x; + y += _rotation.y; + z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMat.mul(tempMatAdd); + + this->set(tempMat); + } + + return *this; +} + +inline RotationF RotationF::operator +(const RotationF& _rotation) const +{ + RotationF result = *this; + + if (mRotationType == Euler) + { + result.x += _rotation.x; + result.y += _rotation.y; + result.z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMat.mul(tempMatAdd); + + result.set(tempMat); + } + + return result; +} + +//Much like addition, when subtracting, we're not literally subtracting the values, but infact multiplying the inverse. +//This subtracts the rotation angles to get the difference +inline RotationF& RotationF::operator -=(const RotationF& _rotation) +{ + if (mRotationType == Euler) + { + x -= _rotation.x; + y -= _rotation.y; + z -= _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMatAdd.inverse(); + + tempMat.mul(tempMatAdd); + + this->set(tempMat); + } + + return *this; +} + +inline RotationF RotationF::operator -(const RotationF& _rotation) const +{ + RotationF result = *this; + + if (mRotationType == Euler) + { + result.x += _rotation.x; + result.y += _rotation.y; + result.z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + tempMatAdd.inverse(); + + tempMat.mul(tempMatAdd); + + result.set(tempMat); + } + + return result; +} + +inline RotationF& RotationF::operator =(const RotationF& _rotation) +{ + x = _rotation.x; + y = _rotation.y; + z = _rotation.z; + w = _rotation.w; + + mRotationType = _rotation.mRotationType; + + return *this; +} + +//==================================================================== +// Euler operators +//==================================================================== +inline RotationF RotationF::operator=(const EulerF& _euler) +{ + return RotationF(_euler, Radians); +} + +inline RotationF RotationF::operator-(const EulerF& _euler) const +{ + RotationF temp = *this; + temp -= RotationF(_euler, Radians); + return temp; +} + +inline RotationF RotationF::operator+(const EulerF& _euler) const +{ + RotationF temp = *this; + temp += RotationF(_euler, Radians); + return temp; +} + +inline RotationF& RotationF::operator-=(const EulerF& _euler) +{ + *this -= RotationF(_euler, Radians); + return *this; +} + +inline RotationF& RotationF::operator+=(const EulerF& _euler) +{ + *this += RotationF(_euler, Radians); + return *this; +} + +inline S32 RotationF::operator==(const EulerF& _euler) const +{ + return *this == RotationF(_euler); +} + +inline S32 RotationF::operator!=(const EulerF& _euler) const +{ + return *this != RotationF(_euler); +} + +//==================================================================== +// AxisAngle operators +//==================================================================== +inline RotationF RotationF::operator=(const AngAxisF& _aa) +{ + return RotationF(_aa, Radians); +} + +inline RotationF RotationF::operator-(const AngAxisF& _aa) const +{ + RotationF temp = *this; + temp -= RotationF(_aa, Radians); + return temp; +} + +inline RotationF RotationF::operator+(const AngAxisF& _aa) const +{ + RotationF temp = *this; + temp += RotationF(_aa, Radians); + return temp; +} + +inline RotationF& RotationF::operator-=(const AngAxisF& _aa) +{ + *this -= RotationF(_aa, Radians); + return *this; +} + +inline RotationF& RotationF::operator+=(const AngAxisF& _aa) +{ + *this += RotationF(_aa, Radians); + return *this; +} + +inline S32 RotationF::operator==(const AngAxisF& _aa) const +{ + return *this == RotationF(_aa); +} + +inline S32 RotationF::operator!=(const AngAxisF& _aa) const +{ + return *this != RotationF(_aa); +} + +//==================================================================== +// QuatF operators +//==================================================================== +inline RotationF RotationF::operator=(const QuatF& _quat) +{ + return RotationF(_quat); +} + +inline RotationF RotationF::operator-(const QuatF& _quat) const +{ + RotationF temp = *this; + temp -= RotationF(_quat); + return temp; +} + +inline RotationF RotationF::operator+(const QuatF& _quat) const +{ + RotationF temp = *this; + temp += RotationF(_quat); + return temp; +} + +inline RotationF& RotationF::operator-=(const QuatF& _quat) +{ + *this -= RotationF(_quat); + return *this; +} + +inline RotationF& RotationF::operator+=(const QuatF& _quat) +{ + *this += RotationF(_quat); + return *this; +} + +inline S32 RotationF::operator==(const QuatF& _quat) const +{ + return *this == RotationF(_quat); +} + +inline S32 RotationF::operator!=(const QuatF& _quat) const +{ + return *this != RotationF(_quat); +} + +//==================================================================== +// MatrixF operators +//==================================================================== +inline RotationF RotationF::operator=(const MatrixF& _mat) +{ + return RotationF(_mat); +} + +inline RotationF RotationF::operator-(const MatrixF& _mat) const +{ + RotationF temp = *this; + temp -= RotationF(_mat); + return temp; +} + +inline RotationF RotationF::operator+(const MatrixF& _mat) const +{ + RotationF temp = *this; + temp += RotationF(_mat); + return temp; +} + +inline RotationF& RotationF::operator-=(const MatrixF& _mat) +{ + *this -= RotationF(_mat); + return *this; +} + +inline RotationF& RotationF::operator+=(const MatrixF& _mat) +{ + *this += RotationF(_mat); + return *this; +} + +inline S32 RotationF::operator==(const MatrixF& _mat) const +{ + return *this == RotationF(_mat); +} + +inline S32 RotationF::operator!=(const MatrixF& _mat) const +{ + return *this != RotationF(_mat); +} + +#endif // MROTATION_H diff --git a/Engine/source/math/mathIO.h b/Engine/source/math/mathIO.h index ee2f0dcad4..6acbc1b522 100644 --- a/Engine/source/math/mathIO.h +++ b/Engine/source/math/mathIO.h @@ -149,6 +149,20 @@ inline bool mathRead(Stream& stream, EaseF* e) return success; } +inline bool mathRead(Stream& stream, RotationF* e) +{ + bool success = stream.read(&e->x); + success &= stream.read(&e->y); + success &= stream.read(&e->z); + success &= stream.read(&e->w); + + U32 rotType; + success &= stream.read(&rotType); + e->mRotationType = (RotationF::RotationTypes)rotType; + + return success; +} + //------------------------------------------------------------------------------ //-------------------------------------- WRITING // @@ -263,5 +277,15 @@ inline bool mathWrite(Stream& stream, const EaseF& e) return success; } +inline bool mathWrite(Stream& stream, const RotationF& e) +{ + bool success = stream.write(e.x); + success &= stream.write(e.y); + success &= stream.write(e.z); + success &= stream.write(e.w); + success &= stream.write(e.mRotationType); + return success;; +} + #endif //_MATHIO_H_ diff --git a/Engine/source/math/mathTypes.cpp b/Engine/source/math/mathTypes.cpp index 7498cc8fca..9e56052078 100644 --- a/Engine/source/math/mathTypes.cpp +++ b/Engine/source/math/mathTypes.cpp @@ -36,7 +36,8 @@ #include "math/mRandom.h" #include "math/mEase.h" #include "math/mathUtils.h" - +#include "math/mRotation.h" +#include "core/strings/stringUnit.h" IMPLEMENT_SCOPE( MathTypes, Math,, "" ); @@ -112,12 +113,19 @@ IMPLEMENT_STRUCT( EaseF, EaseF, MathTypes, "" ) END_IMPLEMENT_STRUCT; - +IMPLEMENT_STRUCT(RotationF, + RotationF, MathTypes, + "") + FIELD(x, x, 1, "X coordinate.") + FIELD(y, y, 1, "Y coordinate.") + FIELD(z, z, 1, "Z coordinate.") + FIELD(w, w, 1, "W coordinate.") +END_IMPLEMENT_STRUCT; //----------------------------------------------------------------------------- // TypePoint2I //----------------------------------------------------------------------------- -ConsoleType( Point2I, TypePoint2I, Point2I ) +ConsoleType(Point2I, TypePoint2I, Point2I, "") ImplementConsoleTypeCasters( TypePoint2I, Point2I ) ConsoleGetType( TypePoint2I ) @@ -142,7 +150,7 @@ ConsoleSetType( TypePoint2I ) //----------------------------------------------------------------------------- // TypePoint2F //----------------------------------------------------------------------------- -ConsoleType( Point2F, TypePoint2F, Point2F ) +ConsoleType(Point2F, TypePoint2F, Point2F, "") ImplementConsoleTypeCasters( TypePoint2F, Point2F ) ConsoleGetType( TypePoint2F ) @@ -167,7 +175,7 @@ ConsoleSetType( TypePoint2F ) //----------------------------------------------------------------------------- // TypePoint3I //----------------------------------------------------------------------------- -ConsoleType( Point3I, TypePoint3I, Point3I ) +ConsoleType(Point3I, TypePoint3I, Point3I, "") ImplementConsoleTypeCasters(TypePoint3I, Point3I) ConsoleGetType( TypePoint3I ) @@ -192,7 +200,7 @@ ConsoleSetType( TypePoint3I ) //----------------------------------------------------------------------------- // TypePoint3F //----------------------------------------------------------------------------- -ConsoleType( Point3F, TypePoint3F, Point3F ) +ConsoleType(Point3F, TypePoint3F, Point3F, "") ImplementConsoleTypeCasters(TypePoint3F, Point3F) ConsoleGetType( TypePoint3F ) @@ -217,7 +225,7 @@ ConsoleSetType( TypePoint3F ) //----------------------------------------------------------------------------- // TypePoint4F //----------------------------------------------------------------------------- -ConsoleType( Point4F, TypePoint4F, Point4F ) +ConsoleType(Point4F, TypePoint4F, Point4F, "") ImplementConsoleTypeCasters( TypePoint4F, Point4F ) ConsoleGetType( TypePoint4F ) @@ -242,7 +250,7 @@ ConsoleSetType( TypePoint4F ) //----------------------------------------------------------------------------- // TypeRectI //----------------------------------------------------------------------------- -ConsoleType( RectI, TypeRectI, RectI ) +ConsoleType(RectI, TypeRectI, RectI, "") ImplementConsoleTypeCasters( TypeRectI, RectI ) ConsoleGetType( TypeRectI ) @@ -269,7 +277,7 @@ ConsoleSetType( TypeRectI ) //----------------------------------------------------------------------------- // TypeRectF //----------------------------------------------------------------------------- -ConsoleType( RectF, TypeRectF, RectF ) +ConsoleType(RectF, TypeRectF, RectF, "") ImplementConsoleTypeCasters( TypeRectF, RectF ) ConsoleGetType( TypeRectF ) @@ -296,7 +304,7 @@ ConsoleSetType( TypeRectF ) //----------------------------------------------------------------------------- // TypeMatrix //----------------------------------------------------------------------------- -ConsoleType( MatrixF, TypeMatrixF, MatrixF ) +ConsoleType(MatrixF, TypeMatrixF, MatrixF, "") ImplementConsoleTypeCasters( TypeMatrixF, MatrixF ) // Oh merry confusion. Torque stores matrices in row-major order yet to TorqueScript @@ -339,7 +347,7 @@ ConsoleSetType( TypeMatrixF ) //----------------------------------------------------------------------------- // TypeMatrixPosition //----------------------------------------------------------------------------- -ConsoleType( MatrixPosition, TypeMatrixPosition, MatrixF ) +ConsoleType(MatrixPosition, TypeMatrixPosition, MatrixF, "") ConsoleGetType( TypeMatrixPosition ) { @@ -374,7 +382,7 @@ ConsoleSetType( TypeMatrixPosition ) //----------------------------------------------------------------------------- // TypeMatrixRotation //----------------------------------------------------------------------------- -ConsoleType( MatrixRotation, TypeMatrixRotation, MatrixF ) +ConsoleType(MatrixRotation, TypeMatrixRotation, MatrixF, "") ConsoleGetType( TypeMatrixRotation ) { @@ -419,7 +427,7 @@ ConsoleSetType( TypeMatrixRotation ) //----------------------------------------------------------------------------- // TypeAngAxisF //----------------------------------------------------------------------------- -ConsoleType( AngAxisF, TypeAngAxisF, AngAxisF ) +ConsoleType(AngAxisF, TypeAngAxisF, AngAxisF, "") ImplementConsoleTypeCasters( TypeAngAxisF, AngAxisF ) ConsoleGetType( TypeAngAxisF ) @@ -458,7 +466,7 @@ ConsoleSetType( TypeAngAxisF ) const TransformF TransformF::Identity( Point3F::Zero, AngAxisF( Point3F( 0, 0, 1 ), 0) ); -ConsoleType( TransformF, TypeTransformF, TransformF ) +ConsoleType(TransformF, TypeTransformF, TransformF, "") ImplementConsoleTypeCasters( TypeTransformF, TransformF ) ConsoleGetType( TypeTransformF ) @@ -502,7 +510,7 @@ ConsoleSetType( TypeTransformF ) //----------------------------------------------------------------------------- // TypeBox3F //----------------------------------------------------------------------------- -ConsoleType( Box3F, TypeBox3F, Box3F ) +ConsoleType(Box3F, TypeBox3F, Box3F, "") ImplementConsoleTypeCasters( TypeBox3F, Box3F ) ConsoleGetType( TypeBox3F ) @@ -539,7 +547,7 @@ ConsoleSetType( TypeBox3F ) //----------------------------------------------------------------------------- // TypeEaseF //----------------------------------------------------------------------------- -ConsoleType( EaseF, TypeEaseF, EaseF ) +ConsoleType(EaseF, TypeEaseF, EaseF, "") ImplementConsoleTypeCasters( TypeEaseF, EaseF ) ConsoleGetType( TypeEaseF ) @@ -571,6 +579,55 @@ ConsoleSetType( TypeEaseF ) } } +//----------------------------------------------------------------------------- +// TypeRotationF +//----------------------------------------------------------------------------- +ConsoleType(RotationF, TypeRotationF, RotationF, "") +ImplementConsoleTypeCasters( TypeRotationF, RotationF ) + +ConsoleGetType(TypeRotationF) +{ + RotationF *pt = (RotationF *)dptr; + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + + EulerF out = pt->asEulerF(RotationF::Degrees); + dSprintf(returnBuffer, bufSize, "%g %g %g", out.x, out.y, out.z); + + return returnBuffer; +} + +ConsoleSetType(TypeRotationF) +{ + if (argc == 1) + { + U32 elements = StringUnit::getUnitCount(argv[0], " \t\n"); + if (elements == 3) + { + EulerF in; + dSscanf(argv[0], "%g %g %g", &in.x, &in.y, &in.z); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else + { + AngAxisF in; + dSscanf(argv[0], "%g %g %g %g", &in.axis.x, &in.axis.y, &in.axis.z, &in.angle); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + } + else if (argc == 3) + { + EulerF in(dAtof(argv[0]), dAtof(argv[1]), dAtof(argv[2])); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else if (argc == 4) + { + AngAxisF in(Point3F(dAtof(argv[0]), dAtof(argv[1]), dAtof(argv[2])), dAtof(argv[3])); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else + Con::printf("RotationF must be set as { x, y, z, w } or \"x y z w\""); +} //----------------------------------------------------------------------------- @@ -659,6 +716,66 @@ DefineConsoleFunction( VectorScale, VectorF, ( VectorF a, F32 scalar ),, { return a * scalar; } +DefineConsoleFunction( VectorMul, VectorF, ( VectorF a, VectorF b ),, + "Multiplies two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector @a a * @a b.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorMul( %a, %b );\n" + "//\n" + "// The multiplication of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// a * b = ( ax * bx, ay * by, az * bz )\n" + "//\n" + "//-----------------------------------------------------------------------------\n\n" + + "%a = \"1 0 0\";\n" + "%b = \"0 1 0\";\n\n" + + "// %r = \"( 1 * 0, 0 * 1, 0 * 0 )\";\n" + "// %r = \"0 0 0\";\n" + "%r = VectorMul( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors" ) +{ + return a * b; +} + +DefineConsoleFunction( VectorDiv, VectorF, ( VectorF a, VectorF b ),, + "Divide two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector @a a / @a b.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorDiv( %a, %b );\n" + "//\n" + "// The division of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// a * b = ( ax / bx, ay / by, az / bz )\n" + "//\n" + "//-----------------------------------------------------------------------------\n\n" + + "%a = \"1 1 1\";\n" + "%b = \"2 2 2\";\n\n" + + "// %r = \"( 1 / 2, 1 / 2, 1 / 2 )\";\n" + "// %r = \"0.5 0.5 0.5\";\n" + "%r = VectorDiv( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors" ) +{ + //this is kind of bad, but so is dividing by 0 + if(b.x == 0) b.x = 0.000001f; + if(b.y == 0) b.y = 0.000001f; + if(b.z == 0) b.z = 0.000001f; + + return a / b; +} //----------------------------------------------------------------------------- @@ -789,6 +906,34 @@ DefineConsoleFunction( VectorDist, F32, ( VectorF a, VectorF b ),, //----------------------------------------------------------------------------- +DefineConsoleFunction( VectorMidPoint, VectorF, ( VectorF a, VectorF b ),, + "Gets the midpoint between the two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector (@a a + @a b) / 2.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorMidPoint( %a, %b );\n" + "//\n" + "// The midpoint of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// (a + b)/2 = ( (ax + bx) /2, ay + by) /2, (az + bz) /2 )\n" + "//\n" + "//-----------------------------------------------------------------------------\n" +// "%a = \"1 0 0\";\n" +// "%b = \"0 1 0\";\n\n" +// "// %r = \"( 1 + 0, 0 + 1, 0 + 0 )\";\n" +// "// %r = \"1 1 0\";\n" +// "%r = VectorAdd( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors") +{ + return (a + b)/2.0f; +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( VectorLen, F32, ( VectorF v ),, "Calculate the magnitude of the given vector.\n" "@param v A vector.\n" diff --git a/Engine/source/math/mathTypes.h b/Engine/source/math/mathTypes.h index b17329cf86..043d59e1fe 100644 --- a/Engine/source/math/mathTypes.h +++ b/Engine/source/math/mathTypes.h @@ -43,7 +43,7 @@ class Box3F; class EaseF; class AngAxisF; class TransformF; - +class RotationF; DECLARE_SCOPE( MathTypes ); @@ -60,6 +60,7 @@ DECLARE_STRUCT( AngAxisF ); DECLARE_STRUCT( TransformF ); DECLARE_STRUCT( Box3F ); DECLARE_STRUCT( EaseF ); +DECLARE_STRUCT(RotationF); // Legacy console types. @@ -77,6 +78,6 @@ DefineConsoleType( TypeAngAxisF, AngAxisF ) DefineConsoleType( TypeTransformF, TransformF ) DefineConsoleType( TypeBox3F, Box3F ) DefineConsoleType( TypeEaseF, EaseF ) - +DefineConsoleType(TypeRotationF, RotationF) #endif diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index 9f04b107e4..dba228fde0 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -1449,7 +1449,6 @@ void makeProjection( MatrixF *outMatrix, F32 farPlane, bool gfxRotate ) { - Point4F row; row.x = 2.0*nearPlane / (right-left); row.y = 0.0; @@ -1465,13 +1464,13 @@ void makeProjection( MatrixF *outMatrix, row.x = (left+right) / (right-left); row.y = (top+bottom) / (top-bottom); - row.z = farPlane / (nearPlane-farPlane); + row.z = farPlane / (nearPlane - farPlane); row.w = -1.0; outMatrix->setRow( 2, row ); row.x = 0.0; row.y = 0.0; - row.z = nearPlane * farPlane / (nearPlane-farPlane); + row.z = nearPlane * farPlane / (nearPlane - farPlane); row.w = 0.0; outMatrix->setRow( 3, row ); @@ -1509,9 +1508,9 @@ void makeOrthoProjection( MatrixF *outMatrix, row.y = 0.0f; row.w = 0.0f; - // This may need be modified to work with OpenGL (d3d has 0..1 - // projection for z, vs -1..1 in OpenGL) - row.z = 1.0f / (nearPlane - farPlane); + //Unlike D3D, which has a 0-1 range, OpenGL uses a -1-1 range. + //However, epoxy internally handles the swap, so the math here is the same for both APIs + row.z = 1.0f / (nearPlane - farPlane); outMatrix->setRow( 2, row ); @@ -1845,4 +1844,55 @@ U32 extrudePolygonEdgesFromPoint( const Point3F* vertices, U32 numVertices, cons return numPlanes; } +//----------------------------------------------------------------------------- + +void mBuildHull2D(const Vector _inPoints, Vector &hullPoints) +{ + /// Andrew's monotone chain convex hull algorithm implementation + + struct Util + { + //compare by x and then by y + static int CompareLexicographic( const Point2F *a, const Point2F *b) + { + return a->x < b->x || (a->x == b->x && a->y < b->y); + } + }; + + hullPoints.clear(); + hullPoints.setSize( _inPoints.size()*2 ); + + // sort in points by x and then by y + Vector inSortedPoints = _inPoints; + inSortedPoints.sort( &Util::CompareLexicographic ); + + Point2F* lowerHullPtr = hullPoints.address(); + U32 lowerHullIdx = 0; + + //lower part of hull + for( int i = 0; i < inSortedPoints.size(); ++i ) + { + while( lowerHullIdx >= 2 && mCross( lowerHullPtr[ lowerHullIdx - 2], lowerHullPtr[lowerHullIdx - 1], inSortedPoints[i] ) <= 0 ) + --lowerHullIdx; + + lowerHullPtr[lowerHullIdx++] = inSortedPoints[i]; + } + + --lowerHullIdx; // last point are the same as first in upperHullPtr + + Point2F* upperHullPtr = hullPoints.address() + lowerHullIdx; + U32 upperHullIdx = 0; + + //upper part of hull + for( int i = inSortedPoints.size()-1; i >= 0; --i ) + { + while( upperHullIdx >= 2 && mCross( upperHullPtr[ upperHullIdx - 2], upperHullPtr[upperHullIdx - 1], inSortedPoints[i] ) <= 0 ) + --upperHullIdx; + + upperHullPtr[upperHullIdx++] = inSortedPoints[i]; + } + + hullPoints.setSize( lowerHullIdx + upperHullIdx ); +} + } // namespace MathUtils diff --git a/Engine/source/math/mathUtils.h b/Engine/source/math/mathUtils.h index 86484c07b6..ee7be9c2a9 100644 --- a/Engine/source/math/mathUtils.h +++ b/Engine/source/math/mathUtils.h @@ -417,6 +417,9 @@ namespace MathUtils //void findFarthestPoint( const Point3F* points, U32 numPoints, const Point3F& fromPoint, ) + /// Build a convex hull from a cloud of 2D points, first and last hull point are the same. + void mBuildHull2D(const Vector inPoints, Vector &hullPoints); + } // namespace MathUtils #endif // _MATHUTILS_H_ diff --git a/Engine/source/module/moduleCallbacks.h b/Engine/source/module/moduleCallbacks.h new file mode 100644 index 0000000000..e13d63cca0 --- /dev/null +++ b/Engine/source/module/moduleCallbacks.h @@ -0,0 +1,52 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_CALLBACKS_H_ +#define _MODULE_CALLBACKS_H_ + +#ifndef _MODULE_DEFINITION_H +#include "moduleDefinition.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleCallbacks +{ + friend class ModuleManager; + +private: + // Called when a module is about to be loaded. + virtual void onModulePreLoad( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module has been loaded. + virtual void onModulePostLoad( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module is about to be unloaded. + virtual void onModulePreUnload( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module has been unloaded. + virtual void onModulePostUnload( ModuleDefinition* pModuleDefinition ) {} +}; + +#endif // _MODULE_CALLBACKS_H_ diff --git a/Engine/source/module/moduleDefinition.cpp b/Engine/source/module/moduleDefinition.cpp new file mode 100644 index 0000000000..97c372c76f --- /dev/null +++ b/Engine/source/module/moduleDefinition.cpp @@ -0,0 +1,209 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "moduleDefinition.h" + +#ifndef _MODULE_MANAGER_H +#include "moduleManager.h" +#endif + +// Script bindings. +#include "moduleDefinition_ScriptBinding.h" + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleDefinition ); + +//----------------------------------------------------------------------------- + +ModuleDefinition::ModuleDefinition() : +mModuleId(StringTable->EmptyString()), + mVersionId( 0 ), + mBuildId( 0 ), + mEnabled( true ), + mSynchronized( false ), + mDeprecated( false ), + mCriticalMerge( false ), + mModuleDescription( StringTable->EmptyString() ), + mAuthor(StringTable->EmptyString()), + mModuleGroup(StringTable->EmptyString()), + mModuleType(StringTable->EmptyString()), + mScriptFile(StringTable->EmptyString()), + mCreateFunction(StringTable->EmptyString()), + mDestroyFunction(StringTable->EmptyString()), + mAssetTagsManifest(StringTable->EmptyString()), + mModulePath(StringTable->EmptyString()), + mModuleFile(StringTable->EmptyString()), + mModuleFilePath(StringTable->EmptyString()), + mModuleScriptFilePath(StringTable->EmptyString()), + mSignature(StringTable->EmptyString()), + mLoadCount( 0 ), + mLocked( false ), + mScopeSet( 0 ), + mpModuleManager( NULL ) +{ + // Set Vector Associations. + VECTOR_SET_ASSOCIATION( mDependencies ); + VECTOR_SET_ASSOCIATION( mModuleAssets ); +} + +//----------------------------------------------------------------------------- + +void ModuleDefinition::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addProtectedField("ModuleId", TypeString, Offset(mModuleId, ModuleDefinition), &defaultProtectedSetFn, &defaultProtectedGetFn, ""); + + /// Module configuration. + addProtectedField( "ModuleId", TypeString, Offset(mModuleId, ModuleDefinition), &setModuleId, &defaultProtectedGetFn, "A unique string Id for the module. It can contain any characters except a comma or semi-colon (the asset scope character)." ); + addProtectedField( "VersionId", TypeS32, Offset(mVersionId, ModuleDefinition), &setVersionId, &defaultProtectedGetFn, "The version Id. Breaking changes to a module should use a higher version Id." ); + addProtectedField( "BuildId", TypeS32, Offset(mBuildId, ModuleDefinition), &setBuildId, &defaultProtectedGetFn, &writeBuildId, "The build Id. Non-breaking changes to a module should use a higher build Id. Optional: If not specified then the build Id will be zero." ); + addProtectedField( "Enabled", TypeBool, Offset(mEnabled, ModuleDefinition), &setEnabled, &defaultProtectedGetFn, &writeEnabled, "Whether the module is enabled or not. When disabled, it is effectively ignored. Optional: If not specified then the module is enabled." ); + addProtectedField( "Synchronized", TypeBool, Offset(mSynchronized, ModuleDefinition), &setSynchronized, &defaultProtectedGetFn, &writeSynchronized, "Whether the module should be synchronized or not. Optional: If not specified then the module is not synchronized." ); + addProtectedField( "Deprecated", TypeBool, Offset(mDeprecated, ModuleDefinition), &setDeprecated, &defaultProtectedGetFn, &writeDeprecated, "Whether the module is deprecated or not. Optional: If not specified then the module is not deprecated." ); + addProtectedField( "CriticalMerge", TypeBool, Offset(mCriticalMerge, ModuleDefinition), &setDeprecated, &defaultProtectedGetFn, &writeCriticalMerge, "Whether the merging of a module prior to a restart is critical or not. Optional: If not specified then the module is not merge critical." ); + addProtectedField( "Description", TypeString, Offset(mModuleDescription, ModuleDefinition), &setModuleDescription, &defaultProtectedGetFn, &writeModuleDescription, "The description typically used for debugging purposes but can be used for anything." ); + addProtectedField( "Author", TypeString, Offset(mAuthor, ModuleDefinition), &setAuthor, &defaultProtectedGetFn, &writeAuthor, "The author of the module." ); + addProtectedField( "Group", TypeString, Offset(mModuleGroup, ModuleDefinition), &setModuleGroup, &defaultProtectedGetFn, "The module group used typically when loading modules as a group." ); + addProtectedField( "Type", TypeString, Offset(mModuleType, ModuleDefinition), &setModuleType, &defaultProtectedGetFn, &writeModuleType, "The module type typically used to distinguish modules during module enumeration. Optional: If not specified then the type is empty although this can still be used as a pseudo 'global' type for instance." ); + addProtectedField( "Dependencies", TypeString, Offset(mDependencies, ModuleDefinition), &setDependencies, &getDependencies, &writeDependencies, "A comma-separated list of module Ids/VersionIds (=,=,etc) which this module depends upon. Optional: If not specified then no dependencies are assumed." ); + addProtectedField( "ScriptFile", TypeString, Offset(mScriptFile, ModuleDefinition), &setScriptFile, &defaultProtectedGetFn, &writeScriptFile, "The name of the script file to compile when loading the module. Optional." ); + addProtectedField( "CreateFunction", TypeString, Offset(mCreateFunction, ModuleDefinition), &setCreateFunction, &defaultProtectedGetFn, &writeCreateFunction, "The name of the function used to create the module. Optional: If not specified then no create function is called." ); + addProtectedField( "DestroyFunction", TypeString, Offset(mDestroyFunction, ModuleDefinition), &setDestroyFunction, &defaultProtectedGetFn, &writeDestroyFunction, "The name of the function used to destroy the module. Optional: If not specified then no destroy function is called." ); + addProtectedField( "AssetTagsManifest", TypeString, Offset(mAssetTagsManifest, ModuleDefinition), &setAssetTagsManifest, &defaultProtectedGetFn, &writeAssetTagsManifest, "The name of tags asset manifest file if this module contains asset tags. Optional: If not specified then no asset tags will be found for this module. Currently, only a single asset tag manifest should exist." ); + addProtectedField( "ScopeSet", TypeS32, Offset( mScopeSet, ModuleDefinition ), &defaultProtectedNotSetFn, &getScopeSet, &defaultProtectedNotWriteFn, "The scope set used to control the lifetime scope of objects that the module uses. Objects added to this set are destroyed automatically when the module is unloaded." ); + + /// Module location (Read-only). + addProtectedField( "ModulePath", TypeString, Offset(mModulePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The path of the module. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleFile", TypeString, Offset(mModuleFile, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file of the module. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleFilePath", TypeString, Offset(mModuleFilePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file-path of the module definition. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleScriptFilePath", TypeString, Offset(mModuleScriptFilePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file-path of the script-file referenced in the module definition. This is read-only and is available only after the module has been registered by a module manager." ); + + /// Misc. + addProtectedField( "Signature", TypeString, 0, &defaultProtectedNotSetFn, &getSignature, &defaultProtectedNotWriteFn, "A unique signature of the module definition based upon its Id, version and build. This is read-only and is available only after the module has been registered by a module manager." ); +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::getDependency( const U32 dependencyIndex, ModuleDependency& dependency ) const +{ + // Is dependency index out of bounds? + if ( dependencyIndex >= (U32)mDependencies.size() ) + { + // Yes, so warn. + Con::warnf("Could not get module dependency '%d' as it is out of range.", dependencyIndex); + return false; + } + + // Fetch module dependency. + dependency = mDependencies[dependencyIndex]; + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::addDependency( const char* pModuleId, const U32 versionId ) +{ + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Do we have any existing dependencies? + if ( mDependencies.size() > 0 ) + { + // Yes, so is the module Id already a dependency? + for( typeModuleDependencyVector::iterator dependencyItr = mDependencies.begin(); dependencyItr != mDependencies.end(); ++dependencyItr ) + { + // Skip if not the same module Id. + if ( dependencyItr->mModuleId != moduleId ) + continue; + + // Dependency already exists so warn. + Con::warnf("Could not add dependency of module Id '%s' at version Id '%d' as the module Id is already a dependency.", pModuleId, versionId ); + return false; + } + } + + // Populate module dependency. + ModuleDefinition::ModuleDependency dependency( moduleId, versionId ); + + // Store dependency. + mDependencies.push_back( dependency ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::removeDependency( const char* pModuleId ) +{ + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Do we have any existing dependencies? + if ( mDependencies.size() > 0 ) + { + // Yes, so is the module Id a dependency? + for( typeModuleDependencyVector::iterator dependencyItr = mDependencies.begin(); dependencyItr != mDependencies.end(); ++dependencyItr ) + { + // Skip if not the same module Id. + if ( dependencyItr->mModuleId != moduleId ) + continue; + + // Remove dependency. + mDependencies.erase( dependencyItr ); + + return true; + } + } + + // No, so warn. + Con::warnf("Could not remove dependency of module Id '%s' as the module Id is not a dependency.", pModuleId ); + return false; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::save( void ) +{ + // Does the module have a file-path yet? + if (mModuleFilePath == StringTable->EmptyString()) + { + // No, so warn. + Con::warnf("Save() - Cannot save module definition '%s' as it does not have a file-path.", mModuleId ); + return false; + } + + // Save the module file. + Taml taml; + return taml.write( this, mModuleFilePath ); +} diff --git a/Engine/source/module/moduleDefinition.h b/Engine/source/module/moduleDefinition.h new file mode 100644 index 0000000000..c1c76d7930 --- /dev/null +++ b/Engine/source/module/moduleDefinition.h @@ -0,0 +1,329 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_DEFINITION_H +#define _MODULE_DEFINITION_H + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _SIMSET_H_ +#include "console/simSet.h" +#endif + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +class ModuleManager; + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleDefinition : public SimSet +{ + friend class ModuleManager; + +private: + typedef SimSet Parent; + +public: + /// Module dependency. + struct ModuleDependency + { + ModuleDependency() : + mModuleId( StringTable->EmptyString() ), + mVersionId( 0 ) + { + } + + ModuleDependency( StringTableEntry moduleId, const U32 versionId ) : + mModuleId( moduleId ), + mVersionId( versionId ) + { + } + + StringTableEntry mModuleId; + U32 mVersionId; + }; + typedef Vector typeModuleDependencyVector; + typedef Vector typeModuleAssetsVector; + +private: + /// Module definition. + StringTableEntry mModuleId; + U32 mVersionId; + U32 mBuildId; + bool mEnabled; + bool mSynchronized; + bool mDeprecated; + bool mCriticalMerge; + StringTableEntry mModuleDescription; + StringTableEntry mAuthor;; + StringTableEntry mModuleGroup; + StringTableEntry mModuleType; + typeModuleDependencyVector mDependencies; + StringTableEntry mScriptFile; + StringTableEntry mCreateFunction; + StringTableEntry mDestroyFunction; + + /// Modules assets. + StringTableEntry mAssetTagsManifest; + typeModuleAssetsVector mModuleAssets; + + /// Module location. + StringTableEntry mModulePath; + StringTableEntry mModuleFile; + StringTableEntry mModuleFilePath; + StringTableEntry mModuleScriptFilePath; + + /// Miscellaneous. + StringTableEntry mSignature; + S32 mLoadCount; + SimObjectId mScopeSet; + bool mLocked; + ModuleManager* mpModuleManager; + +private: + inline bool checkUnlocked( void ) const { if ( mLocked ) { Con::warnf("Ignoring changes for locked module definition."); } return !mLocked; } + inline void setModuleManager( ModuleManager* pModuleManager ) { mpModuleManager = pModuleManager; } + +public: + ModuleDefinition(); + virtual ~ModuleDefinition() {} + + /// Engine. + static void initPersistFields(); + + /// Module definition. + inline void setModuleId( const char* pModuleId ) { if ( checkUnlocked() ) { mModuleId = StringTable->insert(pModuleId); } } + inline StringTableEntry getModuleId( void ) const { return mModuleId; } + inline void setVersionId( const U32 versionId ) { if ( checkUnlocked() ) { mVersionId = versionId; } } + inline U32 getVersionId( void ) const { return mVersionId; } + inline void setBuildId( const U32 buildId ) { if ( checkUnlocked() ) { mBuildId = buildId; } } + inline U32 getBuildId( void ) const { return mBuildId; } + inline void setEnabled( const bool enabled ) { if ( checkUnlocked() ) { mEnabled = enabled; } } + inline bool getEnabled( void ) const { return mEnabled; } + inline void setSynchronized( const bool synchronized ) { if ( checkUnlocked() ) { mSynchronized = synchronized; } } + inline bool getSynchronized( void ) const { return mSynchronized; } + inline void setDeprecated( const bool deprecated ) { if ( checkUnlocked() ) { mDeprecated = deprecated; } } + inline bool getDeprecated( void ) const { return mDeprecated; } + inline void setCriticalMerge( const bool mergeCritical ) { if ( checkUnlocked() ) { mCriticalMerge = mergeCritical; } } + inline bool getCriticalMerge( void ) const { return mCriticalMerge; } + inline void setModuleDescription( const char* pModuleDescription ) { if ( checkUnlocked() ) { mModuleDescription = StringTable->insert(pModuleDescription); } } + inline StringTableEntry getModuleDescription( void ) const { return mModuleDescription; } + inline void setAuthor( const char* pAuthor ) { if ( checkUnlocked() ) { mAuthor = StringTable->insert(pAuthor); } } + inline StringTableEntry getAuthor( void ) const { return mAuthor; } + inline void setModuleGroup( const char* pModuleGroup ) { if ( checkUnlocked() ) { mModuleGroup = StringTable->insert(pModuleGroup); } } + inline StringTableEntry getModuleGroup( void ) const { return mModuleGroup; } + inline void setModuleType( const char* pModuleType ) { if ( checkUnlocked() ) { mModuleType = StringTable->insert(pModuleType); } } + inline StringTableEntry getModuleType( void ) const { return mModuleType; } + inline void setDependencies( const typeModuleDependencyVector& dependencies ) { if ( checkUnlocked() ) { mDependencies.clear(); mDependencies.merge(dependencies); } } + inline const typeModuleDependencyVector& getDependencies( void ) const { return mDependencies; } + inline void setScriptFile( const char* pScriptFile ) { if ( checkUnlocked() ) { mScriptFile = StringTable->insert(pScriptFile); } } + inline StringTableEntry getScriptFile( void ) const { return mScriptFile; } + inline void setCreateFunction( const char* pCreateFunction ) { if ( checkUnlocked() ) { mCreateFunction = StringTable->insert(pCreateFunction); } } + inline StringTableEntry getCreateFunction( void ) const { return mCreateFunction; } + inline void setDestroyFunction( const char* pDestroyFunction ) { if ( checkUnlocked() ) { mDestroyFunction = StringTable->insert(pDestroyFunction); } } + inline StringTableEntry getDestroyFunction( void ) const { return mDestroyFunction; } + inline SimObjectId getScopeSet( void ) const { return mScopeSet; } + + /// Module assets. + inline void setAssetTagsManifest( const char* pTagsAssetManifest ) { if ( checkUnlocked() ) { mAssetTagsManifest = StringTable->insert(pTagsAssetManifest); } } + inline StringTableEntry getAssetTagsManifest( void ) const { return mAssetTagsManifest; } + inline typeModuleAssetsVector& getModuleAssets( void ) { return mModuleAssets; } + + /// Module location. + inline void setModulePath( const char* pModulePath ) { if ( checkUnlocked() ) { mModulePath = StringTable->insert(pModulePath); } } + inline StringTableEntry getModulePath( void ) const { return mModulePath; } + inline void setModuleFile( const char* pModuleDefinitionFile ) { if ( checkUnlocked() ) { mModuleFile = StringTable->insert(pModuleDefinitionFile); } } + inline StringTableEntry getModuleFile( void ) const { return mModuleFile; } + inline void setModuleFilePath( const char* pModuleDefinitionFilePath ) { if ( checkUnlocked() ) { mModuleFilePath = StringTable->insert(pModuleDefinitionFilePath); } } + inline StringTableEntry getModuleFilePath( void ) const { return mModuleFilePath; } + inline void setModuleScriptFilePath( const char* pModuleScriptFilePath ) { if ( checkUnlocked() ) { mModuleScriptFilePath = StringTable->insert(pModuleScriptFilePath); } } + inline StringTableEntry getModuleScriptFilePath( void ) const { return mModuleScriptFilePath; } + + /// Specialized dependency control. + inline U32 getDependencyCount( void ) const { return mDependencies.size(); } + bool getDependency( const U32 dependencyIndex, ModuleDependency& dependency ) const; + bool addDependency( const char* pModuleId, const U32 versionId ); + bool removeDependency( const char* pModuleId ); + + /// Miscellaneous. + inline void setSignature( const char* pSignature ) { if ( checkUnlocked() ) { mSignature = StringTable->insert(pSignature); } } + inline StringTableEntry getSignature( void ) const { return mSignature; } + inline void increaseLoadCount( void ) { ++mLoadCount; } + inline void reduceLoadCount( void ) { --mLoadCount; } + inline S32 getLoadCount( void ) const { return mLoadCount; } + inline void setLocked( const bool status ) { mLocked = status; } + inline bool getLocked( void ) const { return mLocked; } + inline ModuleManager* getModuleManager( void ) const { return mpModuleManager; } + bool save( void ); + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleDefinition ); + +protected: + static bool setModuleId(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleId( data ); return false; } + static bool setVersionId(void* obj, const char* index, const char* data) { static_cast(obj)->setVersionId((U32)dAtoi(data)); return false; } + static bool setBuildId(void* obj, const char* index, const char* data) { static_cast(obj)->setBuildId((U32)dAtoi(data)); return false; } + static bool writeBuildId( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getBuildId() != 0; } + static bool setEnabled(void* obj, const char* index, const char* data) { static_cast(obj)->setEnabled(dAtob(data)); return false; } + static bool writeEnabled( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getEnabled() == false; } + static bool setSynchronized(void* obj, const char* index, const char* data) { static_cast(obj)->setSynchronized(dAtob(data)); return false; } + static bool writeSynchronized( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getSynchronized() == true; } + static bool setDeprecated(void* obj, const char* index, const char* data) { static_cast(obj)->setDeprecated(dAtob(data)); return false; } + static bool writeDeprecated( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getDeprecated() == true; } + static bool writeCriticalMerge( void* obj, StringTableEntry pFieldName ){ return static_cast(obj)->getCriticalMerge() == true; } + static bool setModuleDescription(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleDescription(data); return false; } + static bool writeModuleDescription( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getModuleDescription() != StringTable->EmptyString(); } + static bool setAuthor(void* obj, const char* index, const char* data) { static_cast(obj)->setAuthor(data); return false; } + static bool writeAuthor(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAuthor() != StringTable->EmptyString(); } + static bool setModuleGroup(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleGroup(data); return false; } + static bool setModuleType(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleType(data); return false; } + static bool writeModuleType(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getModuleType() != StringTable->EmptyString(); } + static bool setScriptFile(void* obj, const char* index, const char* data) { static_cast(obj)->setScriptFile(data); return false; } + static bool writeScriptFile(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getScriptFile() != StringTable->EmptyString(); } + static bool setCreateFunction(void* obj, const char* index, const char* data) { static_cast(obj)->setCreateFunction(data); return false; } + static bool writeCreateFunction(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getCreateFunction() != StringTable->EmptyString(); } + static bool setDestroyFunction(void* obj, const char* index, const char* data) { static_cast(obj)->setDestroyFunction(data); return false; } + static bool writeDestroyFunction(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getDestroyFunction() != StringTable->EmptyString(); } + + /// Asset manifest. + static bool setAssetTagsManifest(void* obj, const char* index, const char* data) { static_cast(obj)->setAssetTagsManifest(data); return false; } + static bool writeAssetTagsManifest(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetTagsManifest() != StringTable->EmptyString(); } + static const char* getScopeSet(void* obj, const char* data) { return Con::getIntArg(static_cast(obj)->getScopeSet()); } + + static bool setDependencies(void* obj, const char* index, const char* data) + { + // Fetch module dependencies. + ModuleDefinition::typeModuleDependencyVector moduleDependencies; + + // Fetch dependency value. + const char* pDependencyValue = data; + + char slotUnit[256]; + char slotName[256]; + char slotValue[256]; + + // Fetch definition word count. + const U32 dependencyWordCount = StringUnit::getUnitCount( pDependencyValue, "," ); + + // Do we have any dependencies specified? + if ( dependencyWordCount > 0 ) + { + // Yes, so iterate dependencies. + for ( U32 dependencyIndex = 0; dependencyIndex < dependencyWordCount; ++dependencyIndex ) + { + // Fetch slot. + dStrcpy( slotUnit, StringUnit::getUnit( pDependencyValue, dependencyIndex, "," ) ); + + // Fetch slot name and value. + dStrcpy( slotName, StringUnit::getUnit( slotUnit, 0, "=" ) ); + dStrcpy( slotValue, StringUnit::getUnit( slotUnit, 1, "=" ) ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( slotName ); + + // Fetch version Id. + const U32 versionId = slotValue[0] == '*' ? 0 : dAtoi(slotValue); + + // Populate module dependency. + ModuleDefinition::ModuleDependency dependency( moduleId, versionId ); + + // Store dependency. + moduleDependencies.push_back( dependency ); + } + } + + // Set dependencies. + static_cast(obj)->setDependencies( moduleDependencies ); + + return false; + } + static const char* getDependencies(void* obj, const char* data) + { + // Fetch module dependencies. + const ModuleDefinition::typeModuleDependencyVector& moduleDependencies = static_cast(obj)->getDependencies(); + + // Finish if no dependencies. + if ( moduleDependencies.size() == 0 ) + return StringTable->EmptyString(); + + // Get a return buffer. + const S32 bufferSize = 1024; + char* pReturnBuffer = Con::getReturnBuffer(bufferSize); + pReturnBuffer[0] = '\0'; + + // Set buffer limits. + char* pValueBuffer = pReturnBuffer; + S32 bufferLeft = bufferSize; + U32 used; + + // Iterate module dependencies. + for ( ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr < moduleDependencies.end(); ++dependencyItr ) + { + // Fetch module dependency. + const ModuleDefinition::ModuleDependency* pDependency = dependencyItr; + + // Fetch version Id. + const char* pVersionId = pDependency->mVersionId == 0 ? "*" : avar("%d", pDependency->mVersionId ); + + if ( dependencyItr == moduleDependencies.begin() ) + { + // Write out a field/value pair + used = dSprintf( pValueBuffer, bufferLeft, "%s=%s", pDependency->mModuleId, pVersionId ); + pValueBuffer += used; + bufferLeft -= used; + } + else + { + // Write out a field/value pair + used = dSprintf( pValueBuffer, bufferLeft, ",%s=%s", pDependency->mModuleId, pVersionId ); + pValueBuffer += used; + bufferLeft -= used; + } + + // Sanity. + AssertFatal( bufferLeft > 0, "Cannot format module dependencies as we ran out of buffer." ); + } + + return pReturnBuffer; + } + static bool writeDependencies( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getDependencies().size() > 0; } + static const char* getSignature(void* obj, const char* data) { return static_cast(obj)->getSignature(); } +}; + +#endif // _MODULE_DEFINITION_H + diff --git a/Engine/source/module/moduleDefinition_ScriptBinding.h b/Engine/source/module/moduleDefinition_ScriptBinding.h new file mode 100644 index 0000000000..fb6c57e297 --- /dev/null +++ b/Engine/source/module/moduleDefinition_ScriptBinding.h @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "moduleDefinition.h" +#include "moduleManager.h" + +DefineEngineMethod(ModuleDefinition, save, bool, (),, + "Saves the module definition to the file it was loaded from (if any).\n" + "@return (bool success) Whether the module definition was saved or not.\n") +{ + // Save. + return object->save(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getModuleManager, S32, (),, + "Gets the module manager which this module definition is registered with (if any).\n" + "@return (moduleManager) The module manager which this module definition is registered with (zero if not registered).\n") +{ + // Fetch module manager. + ModuleManager* pModuleManager = object->getModuleManager(); + + return pModuleManager != NULL ? pModuleManager->getId() : 0; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getDependencyCount, S32, (), , + "Gets the number of module dependencies this module definition has.\n" + "@return (int count) The number of module dependencies this module definition has.\n") +{ + // Get module dependency count. + return object->getDependencyCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getDependency, String, (U32 dependencyIndex), (0), + "Gets the module dependency at the specified index.\n" + "@param dependencyIndex The module dependency index.\n" + "@return (module - dependency) The module dependency at the specified index.") +{ + // Get module dependency. + ModuleDefinition::ModuleDependency dependency; + if ( object->getDependency( dependencyIndex, dependency ) == false ) + return StringTable->EmptyString(); + + // Format module dependency. + char* pReturnBuffer = Con::getReturnBuffer( 256 ); + dSprintf( pReturnBuffer, 256, "%s %d", dependency.mModuleId, dependency.mVersionId ); + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, addDependency, bool, (const char* pModuleId, U32 versionId), ("", 0), + "Adds the specified moduleId and vesionId as a dependency.\n" + "@param moduleId The module Id to add as a dependency.\n" + "@param versionId The version Id to add as a dependency. Using zero indicates any version." + "@return (bool success) Whether the module dependency was added or not.") +{ + // Add dependency. + return object->addDependency( pModuleId, versionId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, removeDependency, bool, (const char* pModuleId), (""), + "Removes the specified moduleId as a dependency.\n" + "@param moduleId The module Id to remove as a dependency.\n" + "@return (bool success) Whether the module dependency was removed or not.") +{ + // Remove dependency. + return object->removeDependency( pModuleId ); +} diff --git a/Engine/source/module/moduleManager.cpp b/Engine/source/module/moduleManager.cpp new file mode 100644 index 0000000000..49cfeac9e2 --- /dev/null +++ b/Engine/source/module/moduleManager.cpp @@ -0,0 +1,2513 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "moduleManager.h" + +#ifndef _MODULE_MERGE_DEFINITION_H +#include "moduleMergeDefinition.h" +#endif + +#ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_ +#include "tamlModuleIdUpdateVisitor.h" +#endif + +#ifndef _MODULE_CALLBACKS_H_ +#include "moduleCallbacks.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "moduleManager_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleManager ); + +//----------------------------------------------------------------------------- + +ModuleManager ModuleDatabase; + +//----------------------------------------------------------------------------- + +S32 QSORT_CALLBACK moduleDefinitionVersionIdSort( const void* a, const void* b ) +{ + // Fetch module definitions. + ModuleDefinition* pDefinition1 = *(ModuleDefinition**)a; + ModuleDefinition* pDefinition2 = *(ModuleDefinition**)b; + + // Fetch version Ids. + const U32 versionId1 = pDefinition1->getVersionId(); + const U32 versionId2 = pDefinition2->getVersionId(); + + // We sort higher version Id first. + return versionId1 > versionId2 ? -1 : versionId1 < versionId2 ? 1 : 0; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleManager() : + mEnforceDependencies(true), + mEchoInfo(true), + mDatabaseLocks( 0 ) +{ + // Set module extension. + dStrcpy( mModuleExtension, MODULE_MANAGER_MODULE_DEFINITION_EXTENSION ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::onAdd() +{ + if( !Parent::onAdd() ) + return false; + + // Register listeners. + mNotificationListeners.registerObject(); + + return true; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::onRemove() +{ + // Clear database. + clearDatabase(); + + // Unregister object. + mNotificationListeners.unregisterObject(); + + // Call parent. + Parent::onRemove(); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField( "EnforceDependencies", TypeBool, Offset(mEnforceDependencies, ModuleManager), "Whether the module manager enforces any dependencies on module definitions it discovers or not." ); + addField( "EchoInfo", TypeBool, Offset(mEchoInfo, ModuleManager), "Whether the module manager echos extra information to the console or not." ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::onDeleteNotify( SimObject *object ) +{ + // Cast to a module definition. + ModuleDefinition* pModuleDefinition = dynamic_cast( object ); + + // Ignore if not appropriate. + if ( pModuleDefinition == NULL ) + return; + + // Warn. + Con::warnf( "Module Manager::onDeleteNotify() - Notified of a module definition deletion for module Id '%s' of version Id '%d' however this should not happen and can cause module database corruption.", + pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::setModuleExtension( const char* pExtension ) +{ + // Sanity! + AssertFatal( pExtension != NULL, "Cannot set module extension with NULL extension." ); + + // Did we find an extension period? + if ( *pExtension == '.' ) + { + // Yes, so warn. + Con::warnf("Module Manager: Failed to set extension as supplied extension contains an initial period: '%s'.", pExtension ); + return false; + } + + // Is the extension too large? + if ( dStrlen( pExtension ) > sizeof( mModuleExtension ) ) + { + // Yes, so warn. + Con::warnf("Module Manager: Failed to set extension as supplied extension is too large: '%s'.", pExtension ); + return false; + } + + // Set module extension. + dStrcpy( mModuleExtension, pExtension ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::scanModules( const char* pPath, const bool rootOnly ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan module with NULL path." ); + + // Expand module location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Started scanning '%s'...", pathBuffer ); + } + + Vector directories; + + // Find directories. + if ( !Platform::dumpDirectories( pathBuffer, directories, rootOnly ? 1 : -1 ) ) + { + // Failed so warn. + Con::warnf( "Module Manager: Failed to scan module directories in path '%s'.", pathBuffer ); + return false; + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( mModuleExtension ); + + Vector files; + + // Iterate directories. + for( Vector::iterator basePathItr = directories.begin(); basePathItr != directories.end(); ++basePathItr ) + { + // Fetch base path. + StringTableEntry basePath = *basePathItr; + + // Skip if we're only processing the root and this is not the root. + if ( rootOnly && basePathItr != directories.begin() ) + continue; + + // Find files. + files.clear(); + if ( !Platform::dumpPath( basePath, files, 0 ) ) + { + // Failed so warn. + Con::warnf( "Module Manager: Failed to scan modules files in directory '%s'.", basePath ); + return false; + } + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo* pFileInfo = fileItr; + + // Fetch filename. + const char* pFilename = pFileInfo->pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, mModuleExtension ) != 0 ) + continue; + + // Register module. + registerModule( basePath, pFileInfo->pFileName ); + } + + // Stop processing if we're only processing the root. + if ( rootOnly ) + break; + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Finished scanning '%s'.", pathBuffer ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::loadModuleGroup( const char* pModuleGroup ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleGroup != NULL, "Cannot load module group with NULL group name." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module group. + StringTableEntry moduleGroup = StringTable->insert( pModuleGroup ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading group '%s':" ,moduleGroup ); + } + + // Is the module group already loaded? + if ( findGroupLoaded( moduleGroup ) != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load group '%s' as it is already loaded.", moduleGroup ); + return false; + } + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr == mGroupModules.end() ) + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: No modules found for module group '%s'.", moduleGroup ); + } + + return true; + } + + // Yes, so fetch the module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module groups. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Fetch module Id. + StringTableEntry moduleId = *moduleIdItr; + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, 0, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load module group '%s' as the module Id '%s' at version Id '%d' is required but the module Id is already loaded but at version Id '%d'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Info. + if ( mEchoInfo ) + { + // Info. + Con::printf( "Module Manager: Group '%s' and its dependencies is comprised of the following '%d' module(s):", moduleGroup, moduleReadyQueue.size() ); + + // Iterate the modules echoing them. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleDefinition* pModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Info. + Con::printf( "> module Id '%s' at version Id '%d':", pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); + } + } + + // Add module group. + mGroupsLoaded.push_back( moduleGroup ); + + // Reset modules loaded count. + U32 modulesLoadedCount = 0; + + // Iterate the modules, executing their script files and call their create function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module already loaded. + if ( pLoadedEntry != NULL ) + { + // Yes, so increase load count. + pLoadedEntry->mpModuleDefinition->increaseLoadCount(); + + // Skip. + continue; + } + + // No, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading group '%s' : module Id '%s' at version Id '%d' in group '%s' using the script file '%s'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + + // Is the module deprecated? + if ( pLoadReadyModuleDefinition->getDeprecated() ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Caution: module Id '%s' at version Id '%d' in group '%s' is deprecated. You should use a newer version!", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup() ); + } + + // Add the path expando for module. + Con::addPathExpando( pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getModulePath() ); + + // Create a scope set. + SimSet* pScopeSet = new SimSet; + pScopeSet->registerObject( pLoadReadyModuleDefinition->getModuleId() ); + pReadyEntry->mpModuleDefinition->mScopeSet = pScopeSet->getId(); + + // Increase load count. + pReadyEntry->mpModuleDefinition->increaseLoadCount(); + + // Queue module loaded. + mModulesLoaded.push_back( *pReadyEntry ); + + // Bump modules loaded count. + modulesLoadedCount++; + + // Raise notifications. + raiseModulePreLoadNotifications( pLoadReadyModuleDefinition ); + + // Do we have a script file-path specified? + if ( pLoadReadyModuleDefinition->getModuleScriptFilePath() != StringTable->EmptyString() ) + { + // Yes, so execute the script file. + const bool scriptFileExecuted = dAtob( Con::executef("exec", pLoadReadyModuleDefinition->getModuleScriptFilePath() ) ); + + // Did we execute the script file? + if ( scriptFileExecuted ) + { + // Yes, so is the create method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getCreateFunction() ) ) + { + // Yes, so call the create method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getCreateFunction() ); + } + } + else + { + // No, so warn. + Con::errorf( "Module Manager: Cannot load module group '%s' as the module Id '%s' at version Id '%d' as it failed to have the script file '%s' loaded.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + } + + // Raise notifications. + raiseModulePostLoadNotifications( pLoadReadyModuleDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish loading '%d' module(s) for group '%s'.", modulesLoadedCount, moduleGroup ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unloadModuleGroup( const char* pModuleGroup ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleGroup != NULL, "Cannot unload module group with NULL group name." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module group. + StringTableEntry moduleGroup = StringTable->insert( pModuleGroup ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unloading group '%s':" , moduleGroup ); + } + + // Find the group loaded iterator. + typeGroupVector::iterator groupLoadedItr = findGroupLoaded( moduleGroup ); + + // Is the module group already unloaded? + if ( groupLoadedItr == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload group '%s' as it is not loaded.", moduleGroup ); + return false; + } + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr == mGroupModules.end() ) + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: No modules found for module group '%s'.", moduleGroup ); + return true; + } + } + + // Yes, so fetch the module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module groups. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Fetch module Id. + StringTableEntry moduleId = *moduleIdItr; + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, 0, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot unload module group '%s' as the module Id '%s' at version Id '%d' is required but the module Id is loaded but at version Id '%d'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Remove module group. + mGroupsLoaded.erase_fast( groupLoadedItr ); + + // Reset modules unloaded count. + U32 modulesUnloadedCount = 0; + + // Iterate the modules in reverse order calling their destroy function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.end()-1; moduleReadyItr >= moduleReadyQueue.begin(); --moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition;; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module loaded. + if ( pLoadedEntry == NULL ) + { + // No, so warn. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Unloading group '%s' but could not unload module Id '%s' at version Id '%d'.", + moduleGroup, pLoadedEntry->mpModuleDefinition->getModuleId(), pLoadedEntry->mpModuleDefinition->getVersionId() ); + } + // Skip. + continue; + } + + // Reduce load count. + pLoadedEntry->mpModuleDefinition->reduceLoadCount(); + + // Sanity! + AssertFatal( pLoadedEntry->mpModuleDefinition->getLoadCount() >= 0, "ModuleManager::unloadModuleGroup() - Encountered an invalid load count." ); + + // Do we need to unload? + if ( pLoadedEntry->mpModuleDefinition->getLoadCount() == 0 ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unload group '%s' with module Id '%s' at version Id '%d' in group '%s'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup() ); + } + + // Raise notifications. + raiseModulePreUnloadNotifications( pLoadReadyModuleDefinition ); + + // Fetch the module Id loaded entry. + typeModuleLoadEntryVector::iterator moduleLoadedItr = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Sanity! + AssertFatal( moduleLoadedItr != NULL, "ModuleManager::unloadModuleGroup() - Cannot find module to unload it." ); + + // Dequeue module loaded. + mModulesLoaded.erase_fast( moduleLoadedItr ); + + // Fetch scope set. + SimSet* pScopeSet = dynamic_cast(Sim::findObject(pLoadReadyModuleDefinition->mScopeSet)); + + // Is the destroy method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getDestroyFunction() ) ) + { + // Yes, so call the destroy method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getDestroyFunction() ); + } + + // Remove scope set. + pScopeSet->deleteAllObjects(); + pScopeSet->unregisterObject(); + pLoadReadyModuleDefinition->mScopeSet = 0; + + // Remove path expando for module. + Con::removePathExpando( pLoadReadyModuleDefinition->getModuleId() ); + + // Bump modules unloaded count. + modulesUnloadedCount++; + + // Raise notifications. + raiseModulePostUnloadNotifications( pLoadReadyModuleDefinition ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish unloading '%d' module(s) for group '%s'.", modulesUnloadedCount, moduleGroup ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::loadModuleExplicit( const char* pModuleId, const U32 versionId ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot load explicit module Id with NULL module Id." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot load explicit module Id '%s' as it does not exist.", moduleId ); + return false; + } + + // Fetch module group. + StringTableEntry moduleGroup = pDefinitions->mModuleGroup; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading explicit module Id '%s' at version Id '%d':", moduleId, versionId ); + } + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, versionId, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load explicit module Id '%s' at version Id '%d' as the module Id is already loaded but at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Info. + if ( mEchoInfo ) + { + // Info. + Con::printf( "Module Manager: Explicit load of module Id '%s' at version Id '%d' and its dependencies is comprised of the following '%d' module(s):", moduleId, versionId, moduleReadyQueue.size() ); + + // Iterate the modules echoing them. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleDefinition* pModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Info. + Con::printf( "> module Id '%s' at version Id '%d'", pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); + } + } + + // Reset modules loaded count. + U32 modulesLoadedCount = 0; + + // Iterate the modules, executing their script files and call their create function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module already loaded. + if ( pLoadedEntry != NULL ) + { + // Yes, so increase load count. + pLoadedEntry->mpModuleDefinition->increaseLoadCount(); + + // Skip. + continue; + } + + // No, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading explicit module Id '%s' at version Id '%d' using the script file '%s'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + + // Is the module deprecated? + if ( pLoadReadyModuleDefinition->getDeprecated() ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Caution: module Id '%s' at version Id '%d' is deprecated, You should use a newer version!", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Add the path expando for module. + Con::addPathExpando( pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getModulePath() ); + + // Create a scope set. + SimSet* pScopeSet = new SimSet; + pScopeSet->registerObject( pLoadReadyModuleDefinition->getModuleId() ); + pReadyEntry->mpModuleDefinition->mScopeSet = pScopeSet->getId(); + + // Increase load count. + pReadyEntry->mpModuleDefinition->increaseLoadCount(); + + // Queue module loaded. + mModulesLoaded.push_back( *pReadyEntry ); + + // Bump modules loaded count. + modulesLoadedCount++; + + // Raise notifications. + raiseModulePreLoadNotifications( pLoadReadyModuleDefinition ); + + // Do we have a script file-path specified? + if ( pLoadReadyModuleDefinition->getModuleScriptFilePath() != StringTable->EmptyString() ) + { + // Yes, so execute the script file. + const bool scriptFileExecuted = dAtob( Con::executef("exec", pLoadReadyModuleDefinition->getModuleScriptFilePath() ) ); + + // Did we execute the script file? + if ( scriptFileExecuted ) + { + // Yes, so is the create method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getCreateFunction() ) ) + { + // Yes, so call the create method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getCreateFunction() ); + } + } + else + { + // No, so warn. + Con::errorf( "Module Manager: Cannot load explicit module Id '%s' at version Id '%d' as it failed to have the script file '%s' loaded.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + } + + // Raise notifications. + raiseModulePostLoadNotifications( pLoadReadyModuleDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish loading '%d' explicit module(s).", modulesLoadedCount ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unloadModuleExplicit( const char* pModuleId ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot unload explicit module Id with NULL module Id." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' as it does not exist.", moduleId ); + return false; + } + + // Find if the module is actually loaded. + ModuleDefinition* pLoadedModule = findLoadedModule( moduleId ); + + // Is the module loaded? + if ( pLoadedModule == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' as it is not loaded.", moduleId ); + return false; + } + + // Fetch module group. + StringTableEntry moduleGroup = pDefinitions->mModuleGroup; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unloading explicit module Id '%s':" , moduleId ); + } + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, pLoadedModule->getVersionId(), moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + + // Check the modules we want to unload to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' at version Id '%d' as the module Id is loaded but at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Reset modules unloaded count. + U32 modulesUnloadedCount = 0; + + // Iterate the modules in reverse order calling their destroy function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.end()-1; moduleReadyItr >= moduleReadyQueue.begin(); --moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition;; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module loaded. + if ( pLoadedEntry == NULL ) + { + // No, so warn. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Unloading explicit module Id '%s' at version Id '%d' but ignoring as it is not loaded.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Skip. + continue; + } + + // Reduce load count. + pLoadedEntry->mpModuleDefinition->reduceLoadCount(); + + // Sanity! + AssertFatal( pLoadedEntry->mpModuleDefinition->getLoadCount() >= 0, "ModuleManager::unloadModuleGroup() - Encountered an invalid load count." ); + + // Do we need to unload? + if ( pLoadedEntry->mpModuleDefinition->getLoadCount() == 0 ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unload explicit module Id '%s' at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Raise notifications. + raiseModulePreUnloadNotifications( pLoadReadyModuleDefinition ); + + // Fetch the module Id loaded entry. + typeModuleLoadEntryVector::iterator moduleLoadedItr = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Sanity! + AssertFatal( moduleLoadedItr != NULL, "ModuleManager::unloadModuleExplicit() - Cannot find module to unload it." ); + + // Dequeue module loaded. + mModulesLoaded.erase_fast( moduleLoadedItr ); + + // Fetch scope set. + SimSet* pScopeSet = dynamic_cast(Sim::findObject(pLoadReadyModuleDefinition->mScopeSet)); + + // Is the destroy method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getDestroyFunction() ) ) + { + // Yes, so call the destroy method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getDestroyFunction() ); + } + + // Remove scope set. + pScopeSet->deleteAllObjects(); + pScopeSet->unregisterObject(); + pLoadReadyModuleDefinition->mScopeSet = 0; + + // Remove path expando for module. + Con::removePathExpando( pLoadReadyModuleDefinition->getModuleId() ); + + // Bump modules unloaded count. + modulesUnloadedCount++; + + // Raise notifications. + raiseModulePostUnloadNotifications( pLoadReadyModuleDefinition ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish unloading '%d' explicit module(s).", modulesUnloadedCount ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* ModuleManager::findModule( const char* pModuleId, const U32 versionId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot find module with NULL module Id." ); + + // Find module definition. + ModuleDefinitionEntry::iterator moduleItr = findModuleDefinition( StringTable->insert( pModuleId ), versionId ); + + // Finish if module was not found. + if ( moduleItr == NULL ) + return NULL; + + return *moduleItr; +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* ModuleManager::findLoadedModule( const char* pModuleId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot find module with NULL module Id." ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Iterate loaded modules. + for ( typeModuleLoadEntryVector::iterator loadedModuleItr = mModulesLoaded.begin(); loadedModuleItr != mModulesLoaded.end(); ++loadedModuleItr ) + { + // Skip if not the module. + if ( loadedModuleItr->mpModuleDefinition->getModuleId() != moduleId ) + continue; + + return loadedModuleItr->mpModuleDefinition; + } + + return NULL; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::findModules( const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ) +{ + // Iterate module Ids. + for( typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.begin(); moduleIdItr != mModuleIdDatabase.end(); ++moduleIdItr ) + { + // Fetch module definition entry. + ModuleDefinitionEntry* pModuleDefinitionEntry = moduleIdItr->value; + + // Iterate module definitions. + for ( typeModuleDefinitionVector::iterator moduleDefinitionItr = pModuleDefinitionEntry->begin(); moduleDefinitionItr != pModuleDefinitionEntry->end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Are we searching for loaded modules only? + if ( loadedOnly ) + { + // Yes, so skip if the module is not loaded. + if ( pModuleDefinition->getLoadCount() == 0 ) + continue; + + // Use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + + // Finish iterating module definitions as only a single module in this entry can be loaded concurrently. + break; + } + + // use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + } + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::findModuleTypes( const char* pModuleType, const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ) +{ + // Fetch module type. + StringTableEntry moduleType = StringTable->insert( pModuleType ); + + // Iterate module Ids. + for( typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.begin(); moduleIdItr != mModuleIdDatabase.end(); ++moduleIdItr ) + { + // Fetch module definition entry. + ModuleDefinitionEntry* pModuleDefinitionEntry = moduleIdItr->value; + + // Skip if note the module type we're searching for. + if ( pModuleDefinitionEntry->mModuleType != moduleType ) + continue; + + // Iterate module definitions. + for ( typeModuleDefinitionVector::iterator moduleDefinitionItr = pModuleDefinitionEntry->begin(); moduleDefinitionItr != pModuleDefinitionEntry->end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Are we searching for loaded modules only? + if ( loadedOnly ) + { + // Yes, so skip if the module is not loaded. + if ( pModuleDefinition->getLoadCount() == 0 ) + continue; + + // Use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + + // Finish iterating module definitions as only a single module in this entry can be loaded concurrently. + break; + } + + // use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + } + } +} + +//----------------------------------------------------------------------------- + +StringTableEntry ModuleManager::copyModule( ModuleDefinition* pSourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing ) +{ + // Sanity! + AssertFatal( pSourceModuleDefinition != NULL, "Cannot copy module using a NULL source module definition." ); + AssertFatal( pTargetModuleId != NULL, "Cannot copy module using a NULL target module Id." ); + AssertFatal( pTargetPath != NULL, "Cannot copy module using a NULL target path." ); + + // Fetch the source module Id. + StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Is the source module definition registered with this module manager? + if ( pSourceModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' as it is not registered with this module manager.", sourceModuleId ); + return StringTable->EmptyString(); + } + + // Fetch the target module Id. + StringTableEntry targetModuleId = StringTable->insert( pTargetModuleId ); + + // Extend moduleId/VersionId pathing. + char versionPathBuffer[1024]; + + // Are we using version pathing? + if ( useVersionPathing ) + { + // Yes, so format it. + dSprintf( versionPathBuffer, sizeof(versionPathBuffer), "%s/%s/%d", + pTargetPath, targetModuleId, pSourceModuleDefinition->getVersionId() ); + } + else + { + // No, so a straight copy. + dSprintf( versionPathBuffer, sizeof(versionPathBuffer), "%s", pTargetPath ); + } + + // Expand the path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), versionPathBuffer ); + pTargetPath = targetPathBuffer; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Started copying module Id '%s' to target directory '%s'.", sourceModuleId, pTargetPath ); + } + + // Is the target folder a directory? + if ( !Platform::isDirectory( pTargetPath ) ) + { + // No, so we have to ensure that there is a trailing slash as that indicates a folder (not a file) when creating a path in the platform code. + char createDirectoryBuffer[1024]; + Con::expandPath( createDirectoryBuffer, sizeof(createDirectoryBuffer), pTargetPath, NULL, true ); + + // No, so can we create it? + if ( !Platform::createPath( createDirectoryBuffer ) ) + { + // No, so warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as directory was not found and could not be created.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + } + + // Copy the source module to the target folder. + if ( !dPathCopy( pSourceModuleDefinition->getModulePath(), pTargetPath, false ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as directory copy failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + // Format the new source module definition file-path. + char newModuleDefinitionSourceFileBuffer[1024]; + dSprintf( newModuleDefinitionSourceFileBuffer, sizeof(newModuleDefinitionSourceFileBuffer), "%s/%s", pTargetPath, pSourceModuleDefinition->getModuleFile() ); + + // Finish if source/target module Ids are identical. + if ( sourceModuleId == targetModuleId ) + return StringTable->insert( newModuleDefinitionSourceFileBuffer ); + + // Format the new target module definition file-path. + char newModuleDefinitionTargetFileBuffer[1024]; + dSprintf( newModuleDefinitionTargetFileBuffer, sizeof(newModuleDefinitionTargetFileBuffer), "%s/%s.%s", pTargetPath, targetModuleId, MODULE_MANAGER_MODULE_DEFINITION_EXTENSION ); + + // Rename the module definition. + if ( !dFileRename( newModuleDefinitionSourceFileBuffer, newModuleDefinitionTargetFileBuffer ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as renaming the module from '%s' to '%s' failed.", + sourceModuleId, pTargetPath, newModuleDefinitionSourceFileBuffer, newModuleDefinitionTargetFileBuffer ); + return StringTable->EmptyString(); + } + + Vector directories; + + // Find directories. + if ( !Platform::dumpDirectories( pTargetPath, directories, -1 ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as sub-folder scanning/renaming failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + TamlModuleIdUpdateVisitor moduleIdUpdateVisitor; + moduleIdUpdateVisitor.setModuleIdFrom( sourceModuleId ); + moduleIdUpdateVisitor.setModuleIdTo( targetModuleId ); + + Vector files; + + const char* pExtension = (const char*)"Taml"; + const U32 extensionLength = dStrlen(pExtension); + + // Iterate directories. + for( Vector::iterator basePathItr = directories.begin(); basePathItr != directories.end(); ++basePathItr ) + { + // Fetch base path. + StringTableEntry basePath = *basePathItr; + + // Find files. + files.clear(); + if ( !Platform::dumpPath( basePath, files, 0 ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as sub-folder scanning/renaming failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo* pFileInfo = fileItr; + + // Fetch filename. + const char* pFilename = pFileInfo->pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength >= filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + char parseFileBuffer[1024]; + dSprintf( parseFileBuffer, sizeof(parseFileBuffer), "%s/%s", pFileInfo->pFullPath, pFilename ); + + // Parse file. + if ( !mTaml.parse( parseFileBuffer, moduleIdUpdateVisitor ) ) + { + // Warn. + Con::warnf("Module Manager: Failed to parse file '%s' whilst copying module Id '%s' using target directory '%s'.", + parseFileBuffer, sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Finished copying module Id '%s' to target directory '%s'.", sourceModuleId, pTargetPath ); + } + + return StringTable->insert( newModuleDefinitionTargetFileBuffer ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::synchronizeDependencies( ModuleDefinition* pRootModuleDefinition, const char* pTargetDependencyPath ) +{ + // Sanity! + AssertFatal( pRootModuleDefinition != NULL, "Cannot synchronize dependencies with NULL root module definition." ); + AssertFatal( pTargetDependencyPath != NULL, "Cannot synchronize dependencies with NULL target dependency path." ); + + // Fetch the root module Id. + StringTableEntry rootModuleId = pRootModuleDefinition->getModuleId(); + + // Is the root module definition registered with this module manager? + if ( pRootModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' as it is not registered with this module manager.", rootModuleId ); + return false; + } + + // Expand the path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), pTargetDependencyPath ); + pTargetDependencyPath = targetPathBuffer; + + // Is the target dependency folder a directory? + if ( !Platform::isDirectory( pTargetDependencyPath ) ) + { + // No, so we have to ensure that there is a trailing slash as that indicates a folder (not a file) when creating a path in the platform code. + char createDirectoryBuffer[1024]; + Con::expandPath( createDirectoryBuffer, sizeof(createDirectoryBuffer), pTargetDependencyPath, NULL, true ); + + // No, so can we create it? + if ( !Platform::createPath( createDirectoryBuffer ) ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' using target directory '%s' as directory was not found and could not be created.", + rootModuleId, pTargetDependencyPath ); + return false; + } + } + + typeModuleLoadEntryVector resolvingQueue; + typeModuleLoadEntryVector sourceModulesNeeded; + + // Could we resolve source dependencies? + if ( !resolveModuleDependencies( rootModuleId, pRootModuleDefinition->getVersionId(), pRootModuleDefinition->getModuleGroup(), true, resolvingQueue, sourceModulesNeeded ) ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for root module Id '%s' as its dependencies could not be resolved.", rootModuleId ); + return false; + } + + // Sanity! + AssertFatal( sourceModulesNeeded.size() > 0, "Cannot synchronize dependencies as no modules were returned." ); + + // Remove the root module definition. + sourceModulesNeeded.pop_back(); + + // Initialize the target module manager and scan the target folder for modules. + ModuleManager targetModuleManager; + targetModuleManager.mEnforceDependencies = true; + targetModuleManager.mEchoInfo = false; + targetModuleManager.scanModules( pTargetDependencyPath ); + + char targetFolderGenerateBuffer[1024]; + + // Iterate module definitions. + for ( typeModuleLoadEntryVector::iterator sourceModuleItr = sourceModulesNeeded.begin(); sourceModuleItr != sourceModulesNeeded.end(); ++sourceModuleItr ) + { + // Fetch module definition. + ModuleDefinition* pSourceModuleDefinition = sourceModuleItr->mpModuleDefinition; + + // Fetch the source module Id, + StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Fetch the source module version Id. + const U32 sourceVersionId = pSourceModuleDefinition->getVersionId(); + + // Fetch the source module build Id. + const U32 sourceBuildId = pSourceModuleDefinition->getBuildId(); + + // Fetch module definition entry for this module Id in the target. + ModuleDefinitionEntry* pDefinitions = targetModuleManager.findModuleId( sourceModuleId ); + + // Is the module Id present in the target? + if ( pDefinitions == NULL ) + { + // No, so format module Id folder path. + dSprintf( targetFolderGenerateBuffer, sizeof(targetFolderGenerateBuffer), "%s/%s/", pTargetDependencyPath, sourceModuleId ); + + // Create module Id folder. + if ( !Platform::createPath( targetFolderGenerateBuffer ) ) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' as the target directory '%s' could not be created.", sourceModuleId, targetFolderGenerateBuffer ); + return false; + } + } + else + { + // Yes, so fetch the module definition for this module Id and version Id in the target. + ModuleDefinitionEntry::iterator definitionItr = targetModuleManager.findModuleDefinition( sourceModuleId, sourceVersionId ); + + // Is the specific module definition present in the target? + if ( definitionItr != NULL ) + { + // Yes, so fetch the module definition. + ModuleDefinition* pTargetModuleDefinition = *definitionItr; + + // Fetch the target module build Id. + const U32 targetBuildId = pTargetModuleDefinition->getBuildId(); + + // Fetch the target module path. + StringTableEntry targetModulePath = pTargetModuleDefinition->getModulePath(); + + // Remove the target module definition from the database. + targetModuleManager.removeModuleDefinition( pTargetModuleDefinition ); + + // Skip if the target definition is the same build Id. + if ( targetBuildId == sourceBuildId ) + continue; + + // Delete the target module definition folder. + if ( !Platform::deleteDirectory( targetModulePath ) ) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' at version Id '%d' as the old module at '%s' could not be deleted.", + sourceModuleId, sourceVersionId, targetModulePath ); + return false; + } + } + } + + // Format source module path. + char sourceFolderPath[1024]; + Con::expandPath( sourceFolderPath, sizeof(sourceFolderPath), pSourceModuleDefinition->getModulePath() ); + + // Format target module path. + dSprintf( targetFolderGenerateBuffer, sizeof(targetFolderGenerateBuffer), "%s/%s/%d", pTargetDependencyPath, sourceModuleId, sourceVersionId ); + + // Copy the source module to the target folder. + if (!dPathCopy(sourceFolderPath, targetFolderGenerateBuffer, false)) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' at version Id '%d' as the module could not be copied to '%s'.", + sourceModuleId, sourceVersionId, targetFolderGenerateBuffer ); + return false; + } + } + + // Find any target modules left, These are orphaned modules not depended upon by any other module. + typeConstModuleDefinitionVector orphanedTargetModules; + targetModuleManager.findModules( false, orphanedTargetModules ); + + // Iterate module definitions. + for ( typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = orphanedTargetModules.begin(); moduleDefinitionItr != orphanedTargetModules.end(); ++moduleDefinitionItr ) + { + // Fetch orphaned module definition. + const ModuleDefinition* pOrphanedModuleDefinition = *moduleDefinitionItr; + + // Delete the target module definition folder. + if ( !Platform::deleteDirectory( pOrphanedModuleDefinition->getModulePath() ) ) + { + // Warn. + Con::warnf("Cannot delete orphaned module Id '%s' at version Id '%d' from '%s'.", + pOrphanedModuleDefinition->getModuleId(), pOrphanedModuleDefinition->getVersionId(), pOrphanedModuleDefinition->getModulePath() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::canMergeModules( const char* pMergeSourcePath ) +{ + // Sanity! + AssertFatal( pMergeSourcePath != NULL, "Cannot check merge modules with NULL source path." ); + + // Expand the source path. + char sourcePathBuffer[1024]; + Con::expandPath( sourcePathBuffer, sizeof(sourcePathBuffer), pMergeSourcePath ); + pMergeSourcePath = sourcePathBuffer; + + // Is the path a valid directory? + if ( !Platform::isDirectory( sourcePathBuffer ) ) + { + // No, so warn. + Con::warnf( "Cannot check merge modules as path is invalid '%s'.", sourcePathBuffer ); + return false; + } + + // Initialize the source module manager and scan the source folder for modules. + ModuleManager mergeModuleManager; + mergeModuleManager.mEnforceDependencies = false; + mergeModuleManager.mEchoInfo = false; + mergeModuleManager.scanModules( pMergeSourcePath ); + + // Find all the merge modules. + typeConstModuleDefinitionVector mergeModules; + mergeModuleManager.findModules( false, mergeModules ); + + // Iterate found merge module definitions. + for ( typeConstModuleDefinitionVector::const_iterator mergeModuleItr = mergeModules.begin(); mergeModuleItr != mergeModules.end(); ++mergeModuleItr ) + { + // Fetch module definition. + const ModuleDefinition* pMergeModuleDefinition = *mergeModuleItr; + + // Fetch module Id. + StringTableEntry moduleId = pMergeModuleDefinition->getModuleId(); + + // Fetch version Id. + const U32 versionId = pMergeModuleDefinition->getVersionId(); + + // Fetch module group. + StringTableEntry moduleGroup = pMergeModuleDefinition->getModuleGroup(); + + // Cannot merge if module already exists. + if ( findModuleDefinition( moduleId, versionId ) != NULL ) + return false; + + // Cannot merge if module is part of a loaded group. + if ( findGroupLoaded( moduleGroup ) != NULL ) + return false; + } + + // Can merge modules. + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::mergeModules( const char* pMergeTargetPath, const bool removeMergeDefinition, const bool registerNewModules ) +{ + // Sanity! + AssertFatal( pMergeTargetPath != NULL, "Cannot merge modules with a target path of NULL." ); + + // Is a module merge available? + if ( !isModuleMergeAvailable() ) + { + // No, so warn. + Con::warnf( "Cannot merge modules as a module merge is not available." ); + return false; + } + + // Expand the target path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), pMergeTargetPath ); + pMergeTargetPath = targetPathBuffer; + + // Fetch module merge file path. + StringTableEntry moduleMergeFilePath = getModuleMergeFilePath(); + + // Read module merge definition. + Taml taml; + ModuleMergeDefinition* pModuleMergeDefinition = taml.read( moduleMergeFilePath ); + + // Do we have a module merge definition. + if ( pModuleMergeDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Cannot merge modules as the module merge definition file failed to load '%s'.", moduleMergeFilePath ); + return false; + } + + // Fetch the merge source path. + StringTableEntry mergeSourcePath = pModuleMergeDefinition->getModuleMergePath(); + + // Remove the module merge definition. + pModuleMergeDefinition->deleteObject(); + pModuleMergeDefinition = NULL; + + // If we cannot merge the modules then we only process modules flagged as critical merge. + const bool criticalMergeOnly = !canMergeModules( mergeSourcePath ); + + // Initialize the target module manager and scan the target folder for modules. + ModuleManager targetModuleManager; + targetModuleManager.mEnforceDependencies = false; + targetModuleManager.mEchoInfo = false; + targetModuleManager.scanModules( pMergeTargetPath ); + + // Initialize the source module manager and scan the source folder for modules. + ModuleManager sourceModuleManager; + sourceModuleManager.mEnforceDependencies = false; + sourceModuleManager.mEchoInfo = false; + sourceModuleManager.scanModules( mergeSourcePath ); + + // Find all the source modules. + typeConstModuleDefinitionVector sourceModules; + sourceModuleManager.findModules( false, sourceModules ); + + // Iterate found merge module definitions. + for ( typeConstModuleDefinitionVector::const_iterator sourceModuleItr = sourceModules.begin(); sourceModuleItr != sourceModules.end(); ++sourceModuleItr ) + { + // Fetch the source module definition. + const ModuleDefinition* pSourceModuleDefinition = *sourceModuleItr; + + // Skip if we're performing a critical merge only and the module is not flagged as critical merge. + if ( criticalMergeOnly && pSourceModuleDefinition->getCriticalMerge() ) + continue; + + // Fetch source module Id. + const StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Fetch source version Id. + const U32 sourceVersionId = pSourceModuleDefinition->getVersionId(); + + // Fetch source build Id. + const U32 sourceBuildId = pSourceModuleDefinition->getBuildId(); + + // Format module Id folder path. + char targetModuleIdBuffer[1024]; + dSprintf( targetModuleIdBuffer, sizeof(targetModuleIdBuffer), "%s/%s/", pMergeTargetPath, sourceModuleId ); + + // Flag to indicate if the merged module needs registering. + bool shouldRegisterModule; + + // Does the module Id exist? + if ( targetModuleManager.findModuleId( sourceModuleId ) == NULL ) + { + // No, so create module Id folder. + if ( !Platform::createPath( targetModuleIdBuffer ) ) + { + // Warn. + Con::warnf("Cannot merge modules for module '%s' as the path '%s' could not be created.", sourceModuleId, targetModuleIdBuffer ); + return false; + } + + // Module Should be registered. + shouldRegisterModule = true; + } + else + { + // Yes, so find the target module definition that matches the source module definition. + ModuleDefinitionEntry::iterator targetModuleDefinitionItr = targetModuleManager.findModuleDefinition( sourceModuleId, sourceVersionId ); + + // Is there an existing target module definition entry? + if ( targetModuleDefinitionItr != NULL ) + { + // Yes, so fetch the target module definition. + const ModuleDefinition* pTargetModuleDefinition = *targetModuleDefinitionItr; + + // Fetch target module path. + StringTableEntry targetModulePath = pTargetModuleDefinition->getModulePath(); + + // Yes, so we have to remove it first. + if ( !Platform::deleteDirectory( targetModulePath ) ) + { + // Module was not deleted so warn. + Con::warnf( "Failed to remove module folder located at '%s'. Module will be copied over.", targetModulePath ); + } + + // Is the build Id being downgraded? + if ( sourceBuildId < pTargetModuleDefinition->getBuildId() ) + { + // Yes, so warn. + Con::warnf( "Encountered a downgraded build Id for module Id '%s' at version Id '%d'.", sourceModuleId, sourceBuildId ); + } + + // Module should not be registered. + shouldRegisterModule = false; + } + else + { + // Module Should be registered. + shouldRegisterModule = true; + } + } + + // Fetch source module path. + StringTableEntry sourceModulePath = pSourceModuleDefinition->getModulePath(); + + // Format target version Id folder path. + char targetVersionIdBuffer[1024]; + dSprintf( targetVersionIdBuffer, sizeof(targetVersionIdBuffer), "%s%d", targetModuleIdBuffer, sourceVersionId ); + + // Copy module (allow overwrites as we may have failed to remove the old folder in which case this is likely to fail as well). + if (!dPathCopy(sourceModulePath, targetVersionIdBuffer, false)) + { + // Failed to copy module. + Con::warnf( "Failed to copy module folder located at '%s' to location '%s'. The modules may now be corrupted.", sourceModulePath, targetVersionIdBuffer ); + } + + // Are we registering new modules and the module needs registering? + if ( registerNewModules && shouldRegisterModule ) + { + // Yes, so scan module. + scanModules( targetVersionIdBuffer, true ); + } + + // Is the module part of a critical merge? + if ( criticalMergeOnly ) + { + // Yes, so we need to remove the source module definition. + if ( !Platform::deleteDirectory( sourceModulePath ) ) + { + // Module was not deleted so warn. + Con::warnf( "Failed to remove CRITICAL merge module folder located at '%s'. Module will be copied over.", sourceModulePath ); + } + } + } + + // Do we need to remove the module merge definition file? + if ( removeMergeDefinition ) + { + // Yes, so remove it. + dFileDelete( moduleMergeFilePath ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::addListener( SimObject* pListener ) +{ + // Sanity! + AssertFatal( pListener != NULL, "Cannot add notifications to a NULL object." ); + + // Ignore if already added. + if (mNotificationListeners.find( pListener) != mNotificationListeners.end()) + return; + + // Add as a listener. + mNotificationListeners.addObject( pListener ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::removeListener( SimObject* pListener ) +{ + // Sanity! + AssertFatal( pListener != NULL, "Cannot remove notifications from a NULL object." ); + + // Remove as a listener. + mNotificationListeners.removeObject( pListener ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::clearDatabase( void ) +{ + // Lock database. + AssertFatal( mDatabaseLocks == 0, "Cannot clear database if database is locked." ); + + // Iterate groups loaded. + while ( mGroupsLoaded.size() > 0 ) + { + // Unload module group. + unloadModuleGroup( *mGroupsLoaded.begin() ); + } + + // Iterate any other explicit modules that are loaded. + while ( mModulesLoaded.size() > 0 ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = mModulesLoaded.begin()->mpModuleDefinition; + + // Unload explicit module. + unloadModuleExplicit( pModuleDefinition->getModuleId() ); + } + + // Iterate modules to delete module definitions. + for ( typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.begin(); moduleItr != mModuleIdDatabase.end(); ++moduleItr ) + { + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = moduleItr->value; + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *definitionItr; + + // Remove notification before we delete it. + clearNotify( pModuleDefinition ); + + // Delete module definition. + pModuleDefinition->deleteObject(); + } + + // Clear definitions. + delete pDefinitions; + } + + // Clear database. + mModuleIdDatabase.clear(); + + // Iterate module groups. + for ( typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.begin(); moduleGroupItr != mGroupModules.end(); ++moduleGroupItr ) + { + // Delete module group vector. + delete moduleGroupItr->value; + } + + // Clear module groups. + mGroupModules.clear(); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::removeModuleDefinition( ModuleDefinition* pModuleDefinition ) +{ + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot remove module definition if it is NULL." ); + + // Fetch module Id. + StringTableEntry moduleId = pModuleDefinition->getModuleId(); + + // Is the module definition registered with this module manager? + if ( pModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Cannot remove module definition '%s' as it is not registered with this module manager.", moduleId ); + return false; + } + + // Is the module definition loaded? + if ( pModuleDefinition->getLoadCount() > 0 ) + { + // No, so warn. + Con::warnf("Cannot remove module definition '%s' as it is loaded.", moduleId ); + return false; + } + + // Find module Id. + typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.find( moduleId ); + + // Sanity! + AssertFatal( moduleItr != mModuleIdDatabase.end(), "Failed to find module definition." ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = moduleItr->value; + + // Fetch version Id. + const U32 versionId = pModuleDefinition->getVersionId(); + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Skip if this isn't the version Id we're searching for. + if ( versionId != (*definitionItr)->getVersionId() ) + continue; + + // Remove definition entry. + pDefinitions->erase( definitionItr ); + + // Remove notification before we delete it. + clearNotify( pModuleDefinition ); + + // Delete module definition. + pModuleDefinition->deleteObject(); + + // Are there any modules left for this module Id? + if ( findModuleId( moduleId ) == NULL ) + { + bool moduleIdFound = false; + + // No, so remove from groups. + for( typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.begin(); moduleGroupItr != mGroupModules.end(); ++moduleGroupItr ) + { + // Fetch module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module Id. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Skip if this isn't the Id. + if ( *moduleIdItr != moduleId ) + continue; + + // Remove the module Id. + pModuleIds->erase( moduleIdItr ); + + // Flag as found. + moduleIdFound = true; + + break; + } + + // Finish if found. + if ( moduleIdFound ) + break; + } + } + + return true; + } + + // Sanity! + AssertFatal( false, "Failed to find module definition." ); + + return false; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::registerModule( const char* pModulePath, const char* pModuleFile ) +{ + // Sanity! + AssertFatal( pModulePath != NULL, "Cannot scan module with NULL module path." ); + AssertFatal( pModuleFile != NULL, "Cannot scan module with NULL module file." ); + + // Make the module path a full-path. + char fullPathBuffer[1024]; + Platform::makeFullPathName( pModulePath, fullPathBuffer, sizeof(fullPathBuffer) ); + pModulePath = fullPathBuffer; + + + char formatBuffer[1024]; + + // Fetch module path trail character. + char modulePathTrail = pModulePath[dStrlen(pModulePath) - 1]; + + // Format module file-path. + dSprintf( formatBuffer, sizeof(formatBuffer), modulePathTrail == '/' ? "%s%s" : "%s/%s", pModulePath, pModuleFile ); + + // Read the module file. + ModuleDefinition* pModuleDefinition = mTaml.read( formatBuffer ); + + // Did we read a module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Failed to read module definition in file '%s'.", formatBuffer ); + return false; + } + + // Set the module manager. + pModuleDefinition->setModuleManager( this ); + + // Set module definition path. + pModuleDefinition->setModulePath( pModulePath ); + + // Set module file. + pModuleDefinition->setModuleFile( pModuleFile ); + + // Set module file-path. + pModuleDefinition->setModuleFilePath( formatBuffer ); + + // Fetch module Id. + StringTableEntry moduleId = pModuleDefinition->getModuleId(); + + // Fetch module version Id. + const U32 versionId = pModuleDefinition->getVersionId(); + + // Fetch module group. + StringTableEntry moduleGroup = pModuleDefinition->getModuleGroup(); + + // Fetch module type. + StringTableEntry moduleType = pModuleDefinition->getModuleType(); + + // Is the module enabled? + if ( !pModuleDefinition->getEnabled() ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is disabled.", pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module Id valid? + if (moduleId == StringTable->EmptyString()) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it has an unspecified module Id.", + pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module version Id valid? + if ( versionId == 0 ) + { + // No, so warn. + Con::warnf( "Module Manager: Found Manager: Registering module: '%s' but it has an invalid Version Id of '0'.", + pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module group already loaded? + if ( findGroupLoaded( moduleGroup ) != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is in a module group '%s' which has already been loaded.", + pModuleDefinition->getModuleFilePath(), + moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Was a script-file specified? + if ( pModuleDefinition->getScriptFile() != StringTable->EmptyString() ) + { + // Yes, so format module script file-path. + dSprintf( formatBuffer, sizeof(formatBuffer), modulePathTrail == '/' ? "%s%s" : "%s/%s", pModulePath, pModuleDefinition->getScriptFile() ); + pModuleDefinition->setModuleScriptFilePath( formatBuffer ); + } + + // Format module signature, + dSprintf( formatBuffer, sizeof(formatBuffer), "%s_%d_%d", moduleId, versionId, pModuleDefinition->getBuildId() ); + pModuleDefinition->setSignature( formatBuffer ); + + // Locked the module definition. + pModuleDefinition->setLocked( true ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions != NULL ) + { + // Yes, so find the module definition. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Does this version Id already exist? + if ( definitionItr != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is already registered as module Id '%s' at version Id '%d'.", + pModuleDefinition->getModuleFilePath(), moduleId, versionId ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module group the same as the module definitions we already have? + if ( moduleGroup != pDefinitions->mModuleGroup ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but its module group '%s' is not the same as other module definitions of the same module Id.", + pModuleDefinition->getModuleFilePath(), moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module type the same as the module definitions we already have? + if ( moduleType != pDefinitions->mModuleType ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but its module type '%s' is not the same as other module definitions of the same module Id.", + pModuleDefinition->getModuleFilePath(), moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + } + else + { + // No, so create a vector of definitions. + pDefinitions = new ModuleDefinitionEntry( moduleId, moduleGroup, moduleType ); + + // Insert module Id definitions. + mModuleIdDatabase.insert( moduleId, pDefinitions ); + } + + // Add module definition. + pDefinitions->push_back( pModuleDefinition ); + + // Sort module definitions by version Id so that higher versions appear first. + dQsort( pDefinitions->address(), pDefinitions->size(), sizeof(ModuleDefinition*), moduleDefinitionVersionIdSort ); + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr != mGroupModules.end() ) + { + // Yes, so fetch module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Is the module Id already present? + bool moduleIdFound = false; + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Skip if this isn't the Id. + if ( *moduleIdItr != moduleId ) + continue; + + // Flag as found. + moduleIdFound = true; + break; + } + + // Add if module Id was not found. + if ( !moduleIdFound ) + pModuleIds->push_back( moduleId ); + } + else + { + // No, so insert a module Id vector. + moduleGroupItr = mGroupModules.insert( pModuleDefinition->getModuleGroup(), new typeModuleIdVector() ); + + // Add module Id. + moduleGroupItr->value->push_back( moduleId ); + } + + // Notify if the module definition is destroyed. + deleteNotify( pModuleDefinition ); + + // Info. + if ( mEchoInfo ) + { +#if 1 + Con::printf( "Module Manager: Registering: '%s' [ ID='%s', VersionId='%d', BuildId='%d', Description='%s' ].", + pModuleDefinition->getModuleFilePath(), + pModuleDefinition->getModuleId(), + pModuleDefinition->getVersionId(), + pModuleDefinition->getBuildId(), + pModuleDefinition->getModuleDescription() + ); +#else + Con::printf( "Module Manager: Registering: '%s' [ ID='%s', VersionId='%d', BuildId='%d', Description='%s', Group='%s', Dependencies='%s', ScriptFile='%s', CreateFunction='%s', DestroyFunction='%s' ].", + pModuleDefinition->getModuleFilePath(), + pModuleDefinition->getModuleId(), + pModuleDefinition->getVersionId(), + pModuleDefinition->getBuildId(), + pModuleDefinition->getModuleDescription(), + pModuleDefinition->getModuleGroup(), + pModuleDefinition->getDataField( StringTable->insert("Dependencies"), NULL ), + pModuleDefinition->getScriptFile(), + pModuleDefinition->getCreateFunction(), + pModuleDefinition->getDestroyFunction() + ); +#endif + } + + // Emit notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + Con::executef( *notifyItr, "onModuleRegister", pModuleDefinition->getIdString() ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unregisterModule( const char* pModuleId, const U32 versionId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "A module Id cannot be NULL." ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Find the module definition. + ModuleDefinition* pModuleDefinition = findModule( pModuleId, versionId ); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unregister module Id '%s' as it is not registered.", moduleId ); + return false; + } + + // Remove the module definition. + return removeModuleDefinition( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePreLoadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePreLoad( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePreLoad" ) ) + Con::executef( pListener, "onModulePreLoad", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePostLoadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePostLoad( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePostLoad" ) ) + Con::executef( pListener, "onModulePostLoad", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePreUnloadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePreUnload( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePreUnload" ) ) + Con::executef( pListener, "onModulePreUnload", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePostUnloadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePostUnload( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePostUnload" ) ) + Con::executef( pListener, "onModulePostUnload", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleDefinitionEntry* ModuleManager::findModuleId( StringTableEntry moduleId ) +{ + // Sanity! + AssertFatal( moduleId != NULL, "A module Id cannot be NULL." ); + + // Is the module Id valid? + if ( moduleId == StringTable->EmptyString() ) + { + // No, so warn. + Con::warnf( "Module Manager: Invalid Module Id." ); + return NULL; + } + + // Find module Id. + typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.find( moduleId ); + + // Return appropriately. + return moduleItr != mModuleIdDatabase.end() ? moduleItr->value : NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleDefinitionEntry::iterator ModuleManager::findModuleDefinition( StringTableEntry moduleId, const U32 versionId ) +{ + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Finish if no module definitions for the module Id. + if ( pDefinitions == NULL ) + return NULL; + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Skip if this isn't the version Id we're searching for. + if ( versionId != (*definitionItr)->getVersionId() ) + continue; + + // Return module definition iterator. + return definitionItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::resolveModuleDependencies( StringTableEntry moduleId, const U32 versionId, StringTableEntry moduleGroup, bool synchronizedOnly, typeModuleLoadEntryVector& moduleResolvingQueue, typeModuleLoadEntryVector& moduleReadyQueue ) +{ + // Fetch the module Id ready entry. + ModuleLoadEntry* pLoadReadyEntry = findModuleReady( moduleId, moduleReadyQueue ); + + // Is there a load entry? + if ( pLoadReadyEntry ) + { + // Yes, so finish if the version Id is not important, + if ( versionId == 0 ) + return true; + + // Finish if the version Id are compatible. + if ( versionId == pLoadReadyEntry->mpModuleDefinition->getVersionId() ) + return true; + + // Is it a strict version Id? + if ( pLoadReadyEntry->mStrictVersionId ) + { + // Yes, so warn. + Con::warnf( "Module Manager: A module dependency was detected loading module Id '%s' at version Id '%d' in group '%s' but an version Id '%d' is also required.", + moduleId, versionId, pLoadReadyEntry->mpModuleDefinition->getVersionId(), moduleGroup ); + return false; + } + + // No, so find the required module version Id. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Did we find the requested module definition. + if ( definitionItr == NULL ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Set the new module definition. + pLoadReadyEntry->mpModuleDefinition = *definitionItr; + + // Set strict version Id. + pLoadReadyEntry->mStrictVersionId = true; + + return true; + } + + // Is the module Id load resolving? + if ( findModuleResolving( moduleId, moduleResolvingQueue ) != NULL ) + { + // Yes, so a cycle has been detected so warn. + Con::warnf( "Module Manager: A cyclic dependency was detected resolving module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Reset selected module definition. + ModuleDefinition* pSelectedModuleDefinition = NULL; + + // Do we want the latest version Id? + if ( versionId == 0 ) + { + // Yes, so find the module Id. + typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.find( moduleId ); + + // Did we find the module Id? + if ( moduleIdItr == mModuleIdDatabase.end() ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Fetch first module definition which should be the highest version Id. + pSelectedModuleDefinition = (*moduleIdItr->value)[0]; + } + else + { + // No, so find the module Id at the specific version Id. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Did we find the module definition? + if ( definitionItr == NULL ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Select the module definition. + pSelectedModuleDefinition = *definitionItr; + } + + // If we're only resolving synchronized modules and the module is not synchronized then finish. + if ( synchronizedOnly && !pSelectedModuleDefinition->getSynchronized() ) + return true; + + // Create a load entry. + ModuleLoadEntry loadEntry( pSelectedModuleDefinition, false ); + + // Fetch module dependencies. + const ModuleDefinition::typeModuleDependencyVector& moduleDependencies = pSelectedModuleDefinition->getDependencies(); + + // Do we have any module dependencies? + if ( moduleDependencies.size() > 0 ) + { + // Yes, so queue this module as resolving. + moduleResolvingQueue.push_back( loadEntry ); + + // Iterate module dependencies. + for( ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr != moduleDependencies.end(); ++dependencyItr ) + { + // Finish if we could not the dependent module Id at the version Id. + if ( !resolveModuleDependencies( dependencyItr->mModuleId, dependencyItr->mVersionId, moduleGroup, synchronizedOnly, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Remove module as resolving. + moduleResolvingQueue.pop_back(); + } + + // Queue module as ready. + moduleReadyQueue.push_back( loadEntry ); + + return true; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleLoadEntry* ModuleManager::findModuleResolving( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleResolvingQueue ) +{ + // Iterate module load resolving queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = moduleResolvingQueue.begin(); loadEntryItr != moduleResolvingQueue.end(); ++loadEntryItr ) + { + // Finish if found. + if ( moduleId == loadEntryItr->mpModuleDefinition->getModuleId() ) + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleLoadEntry* ModuleManager::findModuleReady( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleReadyQueue ) +{ + // Iterate module load ready queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = moduleReadyQueue.begin(); loadEntryItr != moduleReadyQueue.end(); ++loadEntryItr ) + { + // Finish if found. + if ( moduleId == loadEntryItr->mpModuleDefinition->getModuleId() ) + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::typeModuleLoadEntryVector::iterator ModuleManager::findModuleLoaded( StringTableEntry moduleId, const U32 versionId ) +{ + // Iterate module loaded queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = mModulesLoaded.begin(); loadEntryItr != mModulesLoaded.end(); ++loadEntryItr ) + { + // Skip if not the module Id we're looking for. + if ( moduleId != loadEntryItr->mpModuleDefinition->getModuleId() ) + continue; + + // Skip if we are searching for a specific version and it does not match. + if ( versionId != 0 && versionId != loadEntryItr->mpModuleDefinition->getVersionId() ) + continue; + + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::typeGroupVector::iterator ModuleManager::findGroupLoaded( StringTableEntry moduleGroup ) +{ + // Iterate groups loaded queue. + for( typeGroupVector::iterator groupsLoadedItr = mGroupsLoaded.begin(); groupsLoadedItr != mGroupsLoaded.end(); ++groupsLoadedItr ) + { + // Finish if found. + if ( moduleGroup == *groupsLoadedItr ) + return groupsLoadedItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +StringTableEntry ModuleManager::getModuleMergeFilePath( void ) const +{ + // Format merge file path. + char filePathBuffer[1024]; + dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", Platform::getExecutablePath(), MODULE_MANAGER_MERGE_FILE ); + + return StringTable->insert( filePathBuffer ); +} diff --git a/Engine/source/module/moduleManager.h b/Engine/source/module/moduleManager.h new file mode 100644 index 0000000000..9c71256103 --- /dev/null +++ b/Engine/source/module/moduleManager.h @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_MANAGER_H +#define _MODULE_MANAGER_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tvector.h" +#endif + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _MODULE_DEFINITION_H +#include "moduleDefinition.h" +#endif + +//----------------------------------------------------------------------------- + +#define MODULE_MANAGER_MERGE_FILE "module.merge" +#define MODULE_MANAGER_MODULE_DEFINITION_EXTENSION "module.taml" + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleManager : public SimObject +{ +private: + typedef SimObject Parent; + +public: + /// Module definitions. + typedef Vector typeModuleDefinitionVector; + typedef Vector typeConstModuleDefinitionVector; + +private: + /// Database locking. + struct LockDatabase + { + public: + LockDatabase( ModuleManager* pManager ) : + mpManager( pManager ) + { + mpManager->mDatabaseLocks++; + } + + ~LockDatabase() + { + mpManager->mDatabaseLocks--; + + // Sanity! + AssertFatal( mpManager->mDatabaseLocks >= 0, "Module Manager: Cannot unlock database as it is already unlocked." ); + } + + private: + ModuleManager* mpManager; + }; + + /// Loaded module entry. + struct ModuleLoadEntry + { + ModuleLoadEntry( ModuleDefinition* pModuleDefinition, const bool strictVersionId ) : + mpModuleDefinition( pModuleDefinition ), + mStrictVersionId( strictVersionId ) + { + } + + ModuleLoadEntry() + { + mpModuleDefinition = NULL; + mStrictVersionId = false; + } + + ModuleDefinition* mpModuleDefinition; + bool mStrictVersionId; + }; + + /// Module loading. + typedef Vector typeModuleIdVector; + typedef Vector typeGroupVector; + typedef HashMap typeGroupModuleHash; + typedef Vector typeModuleLoadEntryVector; + typeGroupModuleHash mGroupModules; + typeGroupVector mGroupsLoaded; + typeModuleLoadEntryVector mModulesLoaded; + + /// Miscellaneous. + bool mEnforceDependencies; + bool mEchoInfo; + S32 mDatabaseLocks; + char mModuleExtension[256]; + Taml mTaml; + SimSet mNotificationListeners; + + // Module definition entry. + struct ModuleDefinitionEntry : public typeModuleDefinitionVector + { + public: + ModuleDefinitionEntry( StringTableEntry moduleId, StringTableEntry moduleGroup, StringTableEntry moduleType ) : + mModuleId( moduleId ), + mModuleGroup( moduleGroup ), + mModuleType( moduleType ) + { + } + + const StringTableEntry mModuleId; + const StringTableEntry mModuleGroup; + const StringTableEntry mModuleType; + }; + + /// Module databases. + typedef HashMap typeModuleIdDatabaseHash; + typeModuleIdDatabaseHash mModuleIdDatabase; + +public: + ModuleManager(); + virtual ~ModuleManager() {} + + /// SimObject overrides + virtual bool onAdd(); + virtual void onRemove(); + virtual void onDeleteNotify( SimObject *object ); + static void initPersistFields(); + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleManager ); + + /// Module definitions. + bool setModuleExtension( const char* pExtension ); + + /// Module discovery. + bool scanModules( const char* pPath, const bool rootOnly = false ); + + /// Module unregister. + bool unregisterModule( const char* pModuleId, const U32 versionId ); + + /// Module (un)loading. + bool loadModuleGroup( const char* pModuleGroup ); + bool unloadModuleGroup( const char* pModuleGroup ); + bool loadModuleExplicit( const char* pModuleId, const U32 versionId = 0 ); + bool unloadModuleExplicit( const char* pModuleId ); + + /// Module type enumeration. + ModuleDefinition* findModule( const char* pModuleId, const U32 versionId ); + ModuleDefinition* findLoadedModule( const char* pModuleId ); + void findModules( const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ); + void findModuleTypes( const char* pModuleType, const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ); + + /// Module synchronization. + StringTableEntry copyModule( ModuleDefinition* pSourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing ); + bool synchronizeDependencies( ModuleDefinition* pRootModuleDefinition, const char* pTargetDependencyPath ); + + /// Module updates. + inline bool isModuleMergeAvailable( void ) const { return Platform::isFile( getModuleMergeFilePath() ); } + bool canMergeModules( const char* pMergeSourcePath ); + bool mergeModules( const char* pMergeTargetPath, const bool removeMergeDefinition, const bool registerNewModules ); + + /// Module notifications. + void addListener( SimObject* pListener ); + void removeListener( SimObject* pListener ); + +private: + void clearDatabase( void ); + bool removeModuleDefinition( ModuleDefinition* pModuleDefinition ); + bool registerModule( const char* pModulePath, const char* pModuleFile ); + + void raiseModulePreLoadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePostLoadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePreUnloadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePostUnloadNotifications( ModuleDefinition* pModuleDefinition ); + + ModuleDefinitionEntry* findModuleId( StringTableEntry moduleId ); + ModuleDefinitionEntry::iterator findModuleDefinition( StringTableEntry moduleId, const U32 versionId ); + bool resolveModuleDependencies( StringTableEntry moduleId, const U32 versionId, StringTableEntry moduleGroup, bool synchronizedOnly, typeModuleLoadEntryVector& moduleResolvingQueue, typeModuleLoadEntryVector& moduleReadyQueue ); + ModuleLoadEntry* findModuleResolving( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleResolvingQueue ); + ModuleLoadEntry* findModuleReady( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleReadyQueue ); + typeModuleLoadEntryVector::iterator findModuleLoaded( StringTableEntry moduleId, const U32 versionId = 0 ); + typeGroupVector::iterator findGroupLoaded( StringTableEntry moduleGroup ); + StringTableEntry getModuleMergeFilePath( void ) const; +}; + +//----------------------------------------------------------------------------- + +extern ModuleManager ModuleDatabase; + +#endif // _MODULE_MANAGER_H \ No newline at end of file diff --git a/Engine/source/module/moduleManager_ScriptBinding.h b/Engine/source/module/moduleManager_ScriptBinding.h new file mode 100644 index 0000000000..dc560d29a7 --- /dev/null +++ b/Engine/source/module/moduleManager_ScriptBinding.h @@ -0,0 +1,344 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "console/engineAPI.h" +#include "moduleDefinition.h" +#include "moduleManager.h" + +DefineEngineMethod(ModuleManager, setModuleExtension, bool, (const char* moduleExtension), (""), + "Set the module extension used to scan for modules. The default is 'module'.\n" + "@param moduleExtension The module extension used to scan for modules.Do not use a period character.\n" + "@return Whether setting the module extension was successful or not.\n") +{ + // Set module extension. + return object->setModuleExtension(moduleExtension); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, scanModules, bool, (const char* pRootPath, bool rootOnly), ("", false), + "Scans for modules which are sub-directories of the specified path.\n" + "@param moduleRootPath The root directory to scan for sub - directories containing modules.\n" + "@param rootOnly[Optional] - Specifies whether to only scan the root path or not when searching for modules.\n" + "@return Whether the scan was successful or not.A successful scan can still find zero modules.\n") +{ + // Scan modules. + return object->scanModules( pRootPath, rootOnly ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unregisterModule, bool, (const char* pModuleId, bool versionId), ("", false), + "Unregister the specified module.\n" + "@param moduleId The module Id to unregister.\n" + "@param versionId The version Id to unregister.\n" + "@return Whether the module was unregister or not.\n") +{ + // Unregister the module. + return object->unregisterModule( pModuleId, versionId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, loadGroup, bool, (const char* pModuleGroup), (""), + "Load the specified module group.\n" + "@param moduleGroup The module group to load.\n" + "@return Whether the module group was loaded or not.\n") +{ + // Load module group. + return object->loadModuleGroup(pModuleGroup); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unloadGroup, bool, (const char* pModuleGroup), (""), + "Unload the specified module group.\n" + "@param moduleGroup The module group to unload.\n" + "@return Whether the module group was unloaded or not.\n") +{ + // Unload module group. + return object->unloadModuleGroup(pModuleGroup); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, loadExplicit, bool, (const char* pModuleId, S32 pVersionId), ("", -1), + "Load the specified module explicitly.\n" + "@param moduleId The module Id to load.\n" + "@param versionId The version Id to load.Optional: Will load the latest version.\n" + "@return Whether the module Id was loaded or not.\n") +{ + if (pVersionId == -1) + return object->loadModuleExplicit(pModuleId); + else + return object->loadModuleExplicit(pModuleId, pVersionId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unloadExplicit, bool, (const char* pModuleId), (""), + "Unload the specified module explicitly.\n" + "@param moduleId The module Id to unload.\n" + "@return Whether the module Id was unloaded or not.\n") +{ + // Unload module Id explicitly. + return object->unloadModuleExplicit(pModuleId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModule, String, (const char* pModuleId, U32 pVersionId), ("", 0), + "Find the specific module Id optionally at the specified version Id.\n" + "@param moduleId The module Id to find.\n" + "@param versionId The version Id to find.\n" + "@return The module definition object or NULL if not found.\n") +{ + // Find module definition. + ModuleDefinition* pModuleDefinition = object->findModule(pModuleId, pVersionId); + + // Return nothing if not found. + if ( pModuleDefinition == NULL ) + return StringTable->EmptyString(); + + return pModuleDefinition->getIdString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModules, String, (bool loadedOnly), (false), + "Find all the modules registered with the specified loaded state.\n" + "@param loadedOnly Whether to return only modules that are loaded or not.\n" + "@return A list of space - separated module definition object Ids.\n") +{ + // Find module type definitions. + Vector moduleDefinitions; + + // Find modules. + object->findModules( loadedOnly, moduleDefinitions ); + + // Fetch module definition count. + const U32 moduleDefinitionCount = (U32)moduleDefinitions.size(); + + // Finish if no module definition were found. + if ( moduleDefinitionCount == 0 ) + return StringTable->EmptyString(); + + // Create a return buffer. + S32 bufferSize = 4096; + char* pReturnBuffer = Con::getReturnBuffer( bufferSize ); + char* pBufferWrite = pReturnBuffer; + + // Iterate module definitions. + for ( ModuleManager::typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = moduleDefinitions.begin(); moduleDefinitionItr != moduleDefinitions.end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + const ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Format module definition. + const U32 offset = dSprintf( pBufferWrite, bufferSize, "%d ", pModuleDefinition->getId() ); + pBufferWrite += offset; + bufferSize -= offset; + + // Are we out of buffer space? + if ( bufferSize <= 0 ) + { + // Yes, so warn. + Con::warnf( "ModuleManager::findModules() - Ran out of buffer space." ); + break; + } + } + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModuleTypes, String, (const char* pModuleType, bool loadedOnly), ("", false), + "Find the modules registered with the specified module type.\n" + "@param moduleType The module type to search for.\n" + "@param loadedOnly Whether to return only modules that are loaded or not.\n" + "@return A list of space - separated module definition object Ids.\n") +{ + // Find module type definitions. + Vector moduleDefinitions; + + // Find module types. + object->findModuleTypes( pModuleType, loadedOnly, moduleDefinitions ); + + // Fetch module definition count. + const U32 moduleDefinitionCount = (U32)moduleDefinitions.size(); + + // Finish if no module definition were found. + if ( moduleDefinitionCount == 0 ) + return StringTable->EmptyString(); + + // Create a return buffer. + S32 bufferSize = 4096; + char* pReturnBuffer = Con::getReturnBuffer( bufferSize ); + char* pBufferWrite = pReturnBuffer; + + // Iterate module definitions. + for ( ModuleManager::typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = moduleDefinitions.begin(); moduleDefinitionItr != moduleDefinitions.end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + const ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Format module definition. + const U32 offset = dSprintf( pBufferWrite, bufferSize, "%d ", pModuleDefinition->getId() ); + pBufferWrite += offset; + bufferSize -= offset; + + // Are we out of buffer space? + if ( bufferSize <= 0 ) + { + // Yes, so warn. + Con::warnf( "ModuleManager::findTypes() - Ran out of buffer space." ); + break; + } + } + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, copyModule, String, (const char* sourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing), + ("", "", "", false), + "Copy the module to a new location with a new module Id.\n" + "@param sourceModuleDefinition The module definition to copy.\n" + "@param targetModuleId The module Id to rename the copied module to including all references to the source module Id.It is valid to specifiy the source module Id to produce an identical copy.\n" + "@param targetPath The target path to copy the module to.Addition folders will be created depending on whether 'useVersionPathing' is used or not.\n" + "@param useVersionPathing Whether to add a '/targetModuleId/versionId' folder to the target path or not.This allows copying multiple versions of the same module Id.\n" + "@return The new module definition file if copy was successful or NULL if not.\n") +{ + // Find the source module definition. + ModuleDefinition* pSourceModuleDefinition = dynamic_cast(Sim::findObject(sourceModuleDefinition)); + + // Was the module definition found? + if ( pSourceModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::copyModule() - Could not find source module definition '%s'.", sourceModuleDefinition); + return ""; + } + + // Copy module. + return object->copyModule( pSourceModuleDefinition, pTargetModuleId, pTargetPath, useVersionPathing ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, synchronizeDependencies, bool, (const char* rootModuleDefinition, const char* pTargetDependencyFolder), ("", ""), + "Synchronize the module dependencies of a module definition to a target dependency folder.\n" + "@param rootModuleDefinition The module definition used to determine dependencies.\n" + "@param targetDependencyPath The target dependency folder to copy dependencies to.\n" + "@return Whether the module dependencies were synchronized correctly or not.\n") +{ + // Find the root module definition. + ModuleDefinition* pRootModuleDefinition = dynamic_cast(Sim::findObject(rootModuleDefinition)); + + // Was the module definition found? + if ( pRootModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::synchronizeModules() - Could not find root module definition '%s'.", rootModuleDefinition); + return false; + } + + // Synchronize dependencies. + return object->synchronizeDependencies( pRootModuleDefinition, pTargetDependencyFolder ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, isModuleMergeAvailable, bool, (),, + "Checks whether a module merge definition file is available or not.\n" + "@return Whether a module merge definition file is available or not.\n") +{ + // Check if module merge is available or not. + return object->isModuleMergeAvailable(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, canMergeModules, bool, (const char* mergeSourcePath), (""), + "Checks whether a module merge using the modules in the source path can current happen or not.\n" + "@param mergeSourcePath The path where modules to be merged are located.\n" + "@return Whether a module merge using the modules in the source path can current happen or not.\n") +{ + // Check whether the merge modules can current happen or not. + return object->canMergeModules(mergeSourcePath); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, mergeModules, bool, (const char* pMergeTargetPath, bool removeMergeDefinition, bool registerNewModules), ("", false, false), + "Performs a module merge into the selected target path.\n" + "@param mergeTargetPath The path where modules will be merged into.\n" + "@param removeMergeDefinition Whether to remove any merge definition found or not if merge is successful.\n" + "@param registerNewModules Whether new (not replaced or updated) modules should be registered or not.\n" + "@return Whether the module merge was successful or not.Failure here could result in a corrupt module state.Reinstall is recommended or at least advised to the user is recommended.\n") +{ + // Merge modules. + return object->mergeModules( pMergeTargetPath, removeMergeDefinition, registerNewModules ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, addListener, void, (const char* listenerObject), (""), + "Registers the specified object as a listener for module notifications.\n" + "@param listenerObject The object to start receiving module notifications.\n" + "@return No return value.\n") +{ + // Find object. + SimObject* pListener = Sim::findObject(listenerObject); + + // Did we find the listener object? + if ( pListener == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::addNotifications() - Could not find the listener object '%s'.", listenerObject); + return; + } + + object->addListener( pListener ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, removeListener, void, (const char* listenerObject), (""), + "Unregisters the specified object as a listener for module notifications.\n" + "@param listenerObject The object to stop receiving module notifications.\n" + "@return No return value.\n") +{ + // Find object. + SimObject* pListener = Sim::findObject(listenerObject); + + // Did we find the listener object? + if ( pListener == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::removeNotifications() - Could not find the listener object '%s'.", listenerObject); + return; + } + + object->removeListener( pListener ); +} diff --git a/Engine/source/module/moduleMergeDefinition.cpp b/Engine/source/module/moduleMergeDefinition.cpp new file mode 100644 index 0000000000..9172636e5e --- /dev/null +++ b/Engine/source/module/moduleMergeDefinition.cpp @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "moduleMergeDefinition.h" + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleMergeDefinition ); + +//----------------------------------------------------------------------------- + +ModuleMergeDefinition::ModuleMergeDefinition() : + mModuleMergePath( StringTable->EmptyString() ) +{ +} + +//----------------------------------------------------------------------------- + +void ModuleMergeDefinition::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + /// Module merge. + addField( "MergePath", TypeString, Offset(mModuleMergePath, ModuleMergeDefinition), "The path where the modules to be merged can be found." ); +} diff --git a/Engine/source/module/moduleMergeDefinition.h b/Engine/source/module/moduleMergeDefinition.h new file mode 100644 index 0000000000..e706aaa4b6 --- /dev/null +++ b/Engine/source/module/moduleMergeDefinition.h @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_MERGE_DEFINITION_H +#define _MODULE_MERGE_DEFINITION_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +//----------------------------------------------------------------------------- + +class ModuleMergeDefinition : public SimObject +{ +private: + typedef SimObject Parent; + + /// Module update + StringTableEntry mModuleMergePath; + +public: + ModuleMergeDefinition(); + virtual ~ModuleMergeDefinition() {} + + /// Engine. + static void initPersistFields(); + + /// Module merge. + inline void setModuleMergePath( const char* pModuleMergePath ) { mModuleMergePath = StringTable->insert(pModuleMergePath); } + inline StringTableEntry getModuleMergePath( void ) const { return mModuleMergePath; } + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleMergeDefinition ); +}; + +#endif // _MODULE_MERGE_DEFINITION_H + diff --git a/Engine/source/module/tamlModuleIdUpdateVisitor.h b/Engine/source/module/tamlModuleIdUpdateVisitor.h new file mode 100644 index 0000000000..36c4c2d047 --- /dev/null +++ b/Engine/source/module/tamlModuleIdUpdateVisitor.h @@ -0,0 +1,133 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_ +#define _TAML_MODULE_ID_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlModuleIdUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mModuleIdFrom; + StringTableEntry mModuleIdTo; + U32 mModuleIdFromLength; + U32 mModuleIdToLength; + +public: + TamlModuleIdUpdateVisitor() : + mModuleIdFrom( StringTable->EmptyString() ), + mModuleIdTo(StringTable->EmptyString()), + mModuleIdFromLength( 0 ), + mModuleIdToLength( 0 ) + {} + virtual ~TamlModuleIdUpdateVisitor() {} + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return true; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlModuleIdUpdateVisitor_Visit); + + // Fetch property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch value length. + const U32 valueLenth = dStrlen(pPropertyValue); + + char newAttributeValueBuffer[1024]; + + // Is this an expando? + if ( *pPropertyValue == '^' ) + { + // Yes, so finish if it's not the correct length. + if ( valueLenth < mModuleIdFromLength+1 ) + return true; + + // Is this the module Id? + if ( dStrnicmp( pPropertyValue+1, mModuleIdFrom, mModuleIdFromLength ) == 0 ) + { + // Yes, so format a new value. + dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "^%s%s", + mModuleIdTo, pPropertyValue+1+mModuleIdFromLength ); + + // Assign new value. + propertyState.updatePropertyValue( newAttributeValueBuffer ); + } + + return true; + } + + // Does the field start with the module Id? + if ( dStrnicmp( pPropertyValue, mModuleIdFrom, mModuleIdFromLength ) == 0 ) + { + // Yes, so format a new value. + dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "%s%s", + mModuleIdTo, pPropertyValue+mModuleIdFromLength ); + + // Assign new value. + propertyState.updatePropertyValue( newAttributeValueBuffer ); + } + + return true; + } + + void setModuleIdFrom( const char* pModuleIdFrom ) + { + // Sanity! + AssertFatal( pModuleIdFrom != NULL, "Module Id from cannot be NULL." ); + + // Set module Id. + mModuleIdFrom = StringTable->insert( pModuleIdFrom ); + mModuleIdFromLength = dStrlen(mModuleIdFrom); + } + StringTableEntry getModuleIdFrom( void ) const { return mModuleIdFrom; } + + void setModuleIdTo( const char* pModuleIdTo ) + { + // Sanity! + AssertFatal( pModuleIdTo != NULL, "Module Id to cannot be NULL." ); + + // Set module Id. + mModuleIdTo = StringTable->insert( pModuleIdTo ); + mModuleIdToLength = dStrlen(mModuleIdTo); + } + const char* getModuleIdTo( void ) const { return mModuleIdTo; } +}; + +#endif // _TAML_MODULE_ID_UPDATE_VISITOR_H_ diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 7df05ee2e6..db70d1cc31 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -112,13 +112,50 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals SimSet *set = NavMesh::getServerSet(); for(U32 i = 0; i < set->size(); i++) { - NavMesh *m = static_cast(set->at(i)); - m->buildTiles(obj->getWorldBox()); + NavMesh *m = dynamic_cast(set->at(i)); + if (m) + { + m->cancelBuild(); + m->buildTiles(obj->getWorldBox()); + } } if(remove) obj->enableCollision(); } +DefineConsoleFunction(NavMeshUpdateAroundObject, void, (S32 objid, bool remove), (0, false), + "@brief Update all NavMesh tiles that intersect the given object's world box.") +{ + SceneObject *obj; + if (!Sim::findObject(objid, obj)) + return; + if (remove) + obj->disableCollision(); + SimSet *set = NavMesh::getServerSet(); + for (U32 i = 0; i < set->size(); i++) + { + NavMesh *m = dynamic_cast(set->at(i)); + if (m) + { + m->cancelBuild(); + m->buildTiles(obj->getWorldBox()); + } + } + if (remove) + obj->enableCollision(); +} + + +DefineConsoleFunction(NavMeshIgnore, void, (S32 objid, bool _ignore), (0, true), + "@brief Flag this object as not generating a navmesh result.") +{ + SceneObject *obj; + if(!Sim::findObject(objid, obj)) + return; + + obj->mPathfindingIgnore = _ignore; +} + DefineConsoleFunction(NavMeshUpdateOne, void, (S32 meshid, S32 objid, bool remove), (0, 0, false), "@brief Update all tiles in a given NavMesh that intersect the given object's world box.") { @@ -147,7 +184,7 @@ NavMesh::NavMesh() mFileName = StringTable->insert(""); mNetFlags.clear(Ghostable); - mSaveIntermediates = true; + mSaveIntermediates = false; nm = NULL; ctx = NULL; @@ -637,7 +674,7 @@ DefineEngineMethod(NavMesh, build, bool, (bool background, bool save), (true, fa void NavMesh::cancelBuild() { - while(!mDirtyTiles.empty()) mDirtyTiles.pop(); + mDirtyTiles.clear(); ctx->stopTimer(RC_TIMER_TOTAL); mBuilding = false; } @@ -707,7 +744,7 @@ void NavMesh::updateTiles(bool dirty) mTiles.clear(); mTileData.clear(); - while(!mDirtyTiles.empty()) mDirtyTiles.pop(); + mDirtyTiles.clear(); const Box3F &box = DTStoRC(getWorldBox()); if(box.isEmpty()) @@ -741,7 +778,7 @@ void NavMesh::updateTiles(bool dirty) tileBmin, tileBmax)); if(dirty) - mDirtyTiles.push(mTiles.size() - 1); + mDirtyTiles.push_back_unique(mTiles.size() - 1); if(mSaveIntermediates) mTileData.increment(); @@ -760,18 +797,20 @@ void NavMesh::buildNextTile() { // Pop a single dirty tile and process it. U32 i = mDirtyTiles.front(); - mDirtyTiles.pop(); + mDirtyTiles.pop_front(); const Tile &tile = mTiles[i]; // Intermediate data for tile build. TileData tempdata; TileData &tdata = mSaveIntermediates ? mTileData[i] : tempdata; + + // Remove any previous data. + nm->removeTile(nm->getTileRefAt(tile.x, tile.y, 0), 0, 0); + // Generate navmesh for this tile. U32 dataSize = 0; unsigned char* data = buildTileData(tile, tdata, dataSize); if(data) { - // Remove any previous data. - nm->removeTile(nm->getTileRefAt(tile.x, tile.y, 0), 0, 0); // Add new data (navmesh owns and deletes the data). dtStatus status = nm->addTile(data, dataSize, DT_TILE_FREE_DATA, 0, 0); int success = 1; @@ -811,6 +850,7 @@ void NavMesh::buildNextTile() static void buildCallback(SceneObject* object,void *key) { SceneContainer::CallbackInfo* info = reinterpret_cast(key); + if (!object->mPathfindingIgnore) object->buildPolyList(info->context,info->polyList,info->boundingBox,info->boundingSphere); } @@ -830,9 +870,10 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat SceneContainer::CallbackInfo info; info.context = PLC_Navigation; info.boundingBox = box; + data.geom.clear(); info.polyList = &data.geom; info.key = this; - getContainer()->findObjects(box, StaticShapeObjectType | TerrainObjectType, buildCallback, &info); + getContainer()->findObjects(box, StaticObjectType | DynamicShapeObjectType, buildCallback, &info); // Parse water objects into the same list, but remember how much geometry was /not/ water. U32 nonWaterVertCount = data.geom.getVertCount(); @@ -843,8 +884,11 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat } // Check for no geometry. - if(!data.geom.getVertCount()) - return false; + if (!data.geom.getVertCount()) + { + data.geom.clear(); + return NULL; + } // Figure out voxel dimensions of this tile. U32 width = 0, height = 0; @@ -1066,7 +1110,7 @@ void NavMesh::buildTiles(const Box3F &box) if(!tile.box.isOverlapped(box)) continue; // Mark as dirty. - mDirtyTiles.push(i); + mDirtyTiles.push_back_unique(i); } if(mDirtyTiles.size()) ctx->startTimer(RC_TIMER_TOTAL); @@ -1082,7 +1126,7 @@ void NavMesh::buildTile(const U32 &tile) { if(tile < mTiles.size()) { - mDirtyTiles.push(tile); + mDirtyTiles.push_back_unique(tile); ctx->startTimer(RC_TIMER_TOTAL); } } @@ -1104,7 +1148,7 @@ void NavMesh::buildLinks() mLinksUnsynced[j]) { // Mark tile for build. - mDirtyTiles.push(i); + mDirtyTiles.push_back_unique(i); // Delete link if necessary if(mDeleteLinks[j]) { diff --git a/Engine/source/navigation/navMesh.h b/Engine/source/navigation/navMesh.h index 1d9eba1b1f..ff279c3be2 100644 --- a/Engine/source/navigation/navMesh.h +++ b/Engine/source/navigation/navMesh.h @@ -325,7 +325,7 @@ class NavMesh : public SceneObject { Vector mTileData; /// List of indices to the tile array which are dirty. - std::queue mDirtyTiles; + Vector mDirtyTiles; /// Update tile dimensions. void updateTiles(bool dirty = false); diff --git a/Engine/source/navigation/navPath.cpp b/Engine/source/navigation/navPath.cpp index 72ce494c7b..a945e7f8d2 100644 --- a/Engine/source/navigation/navPath.cpp +++ b/Engine/source/navigation/navPath.cpp @@ -224,7 +224,7 @@ void NavPath::initPersistFields() addField("allowDrop", TypeBool, Offset(mLinkTypes.drop, NavPath), "Allow the path to use drop links."); addField("allowSwim", TypeBool, Offset(mLinkTypes.swim, NavPath), - "Allow the path tomove in water."); + "Allow the path to move in water."); addField("allowLedge", TypeBool, Offset(mLinkTypes.ledge, NavPath), "Allow the path to jump ledges."); addField("allowClimb", TypeBool, Offset(mLinkTypes.climb, NavPath), diff --git a/Engine/source/persistence/rapidjson/allocators.h b/Engine/source/persistence/rapidjson/allocators.h new file mode 100644 index 0000000000..969a1a3cdb --- /dev/null +++ b/Engine/source/persistence/rapidjson/allocators.h @@ -0,0 +1,221 @@ +#ifndef RAPIDJSON_ALLOCATORS_H_ +#define RAPIDJSON_ALLOCATORS_H_ + +#include "rapidjson.h" + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// Allocator + +/*! \class rapidjson::Allocator + \brief Concept for allocating, resizing and freeing memory block. + + Note that Malloc() and Realloc() are non-static but Free() is static. + + So if an allocator need to support Free(), it needs to put its pointer in + the header of memory block. + +\code +concept Allocator { + static const bool kNeedFree; //!< Whether this allocator needs to call Free(). + + // Allocate a memory block. + // \param size of the memory block in bytes. + // \returns pointer to the memory block. + void* Malloc(size_t size); + + // Resize a memory block. + // \param originalPtr The pointer to current memory block. Null pointer is permitted. + // \param originalSize The current size in bytes. (Design issue: since some allocator may not book-keep this, explicitly pass to it can save memory.) + // \param newSize the new size in bytes. + void* Realloc(void* originalPtr, size_t originalSize, size_t newSize); + + // Free a memory block. + // \param pointer to the memory block. Null pointer is permitted. + static void Free(void *ptr); +}; +\endcode +*/ + +/////////////////////////////////////////////////////////////////////////////// +// CrtAllocator + +//! C-runtime library allocator. +/*! This class is just wrapper for standard C library memory routines. + \implements Allocator +*/ +class CrtAllocator { +public: + static const bool kNeedFree = true; + void* Malloc(size_t size) { return malloc(size); } + void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { (void)originalSize; return realloc(originalPtr, newSize); } + static void Free(void *ptr) { free(ptr); } +}; + +/////////////////////////////////////////////////////////////////////////////// +// MemoryPoolAllocator + +//! Default memory allocator used by the parser and DOM. +/*! This allocator allocate memory blocks from pre-allocated memory chunks. + + It does not free memory blocks. And Realloc() only allocate new memory. + + The memory chunks are allocated by BaseAllocator, which is CrtAllocator by default. + + User may also supply a buffer as the first chunk. + + If the user-buffer is full then additional chunks are allocated by BaseAllocator. + + The user-buffer is not deallocated by this allocator. + + \tparam BaseAllocator the allocator type for allocating memory chunks. Default is CrtAllocator. + \implements Allocator +*/ +template +class MemoryPoolAllocator { +public: + static const bool kNeedFree = false; //!< Tell users that no need to call Free() with this allocator. (concept Allocator) + + //! Constructor with chunkSize. + /*! \param chunkSize The size of memory chunk. The default is kDefaultChunkSize. + \param baseAllocator The allocator for allocating memory chunks. + */ + MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : + chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0) + { + if (!baseAllocator_) + ownBaseAllocator_ = baseAllocator_ = new BaseAllocator(); + AddChunk(chunk_capacity_); + } + + //! Constructor with user-supplied buffer. + /*! The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size. + + The user buffer will not be deallocated when this allocator is destructed. + + \param buffer User supplied buffer. + \param size Size of the buffer in bytes. It must at least larger than sizeof(ChunkHeader). + \param chunkSize The size of memory chunk. The default is kDefaultChunkSize. + \param baseAllocator The allocator for allocating memory chunks. + */ + MemoryPoolAllocator(char *buffer, size_t size, size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : + chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(buffer), baseAllocator_(baseAllocator), ownBaseAllocator_(0) + { + RAPIDJSON_ASSERT(buffer != 0); + RAPIDJSON_ASSERT(size > sizeof(ChunkHeader)); + chunkHead_ = (ChunkHeader*)buffer; + chunkHead_->capacity = size - sizeof(ChunkHeader); + chunkHead_->size = 0; + chunkHead_->next = 0; + } + + //! Destructor. + /*! This deallocates all memory chunks, excluding the user-supplied buffer. + */ + ~MemoryPoolAllocator() { + Clear(); + delete ownBaseAllocator_; + } + + //! Deallocates all memory chunks, excluding the user-supplied buffer. + void Clear() { + while(chunkHead_ != 0 && chunkHead_ != (ChunkHeader *)userBuffer_) { + ChunkHeader* next = chunkHead_->next; + baseAllocator_->Free(chunkHead_); + chunkHead_ = next; + } + } + + //! Computes the total capacity of allocated memory chunks. + /*! \return total capacity in bytes. + */ + size_t Capacity() { + size_t capacity = 0; + for (ChunkHeader* c = chunkHead_; c != 0; c = c->next) + capacity += c->capacity; + return capacity; + } + + //! Computes the memory blocks allocated. + /*! \return total used bytes. + */ + size_t Size() { + size_t size = 0; + for (ChunkHeader* c = chunkHead_; c != 0; c = c->next) + size += c->size; + return size; + } + + //! Allocates a memory block. (concept Allocator) + void* Malloc(size_t size) { + size = RAPIDJSON_ALIGN(size); + if (chunkHead_->size + size > chunkHead_->capacity) + AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size); + + char *buffer = (char *)(chunkHead_ + 1) + chunkHead_->size; + chunkHead_->size += size; + return buffer; + } + + //! Resizes a memory block (concept Allocator) + void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { + if (originalPtr == 0) + return Malloc(newSize); + + // Do not shrink if new size is smaller than original + if (originalSize >= newSize) + return originalPtr; + + // Simply expand it if it is the last allocation and there is sufficient space + if (originalPtr == (char *)(chunkHead_ + 1) + chunkHead_->size - originalSize) { + size_t increment = newSize - originalSize; + increment = RAPIDJSON_ALIGN(increment); + if (chunkHead_->size + increment <= chunkHead_->capacity) { + chunkHead_->size += increment; + return originalPtr; + } + } + + // Realloc process: allocate and copy memory, do not free original buffer. + void* newBuffer = Malloc(newSize); + RAPIDJSON_ASSERT(newBuffer != 0); // Do not handle out-of-memory explicitly. + return memcpy(newBuffer, originalPtr, originalSize); + } + + //! Frees a memory block (concept Allocator) + static void Free(void *ptr) { (void)ptr; } // Do nothing + +private: + //! Creates a new chunk. + /*! \param capacity Capacity of the chunk in bytes. + */ + void AddChunk(size_t capacity) { + ChunkHeader* chunk = (ChunkHeader*)baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity); + chunk->capacity = capacity; + chunk->size = 0; + chunk->next = chunkHead_; + chunkHead_ = chunk; + } + + static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity. + + //! Chunk header for perpending to each chunk. + /*! Chunks are stored as a singly linked list. + */ + struct ChunkHeader { + size_t capacity; //!< Capacity of the chunk in bytes (excluding the header itself). + size_t size; //!< Current size of allocated memory in bytes. + ChunkHeader *next; //!< Next chunk in the linked list. + }; + + ChunkHeader *chunkHead_; //!< Head of the chunk linked-list. Only the head chunk serves allocation. + size_t chunk_capacity_; //!< The minimum capacity of chunk when they are allocated. + char *userBuffer_; //!< User supplied buffer. + BaseAllocator* baseAllocator_; //!< base allocator for allocating memory chunks. + BaseAllocator* ownBaseAllocator_; //!< base allocator created by this object. +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_ENCODINGS_H_ diff --git a/Engine/source/persistence/rapidjson/document.h b/Engine/source/persistence/rapidjson/document.h new file mode 100644 index 0000000000..c68de6f786 --- /dev/null +++ b/Engine/source/persistence/rapidjson/document.h @@ -0,0 +1,843 @@ +#ifndef RAPIDJSON_DOCUMENT_H_ +#define RAPIDJSON_DOCUMENT_H_ + +#include "reader.h" +#include "internal/strfunc.h" +#include // placement new + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// GenericValue + +//! Represents a JSON value. Use Value for UTF8 encoding and default allocator. +/*! + A JSON value can be one of 7 types. This class is a variant type supporting + these types. + + Use the Value if UTF8 and default allocator + + \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document) + \tparam Allocator Allocator type for allocating memory of object, array and string. +*/ +#pragma pack (push, 4) +template > +class GenericValue { +public: + //! Name-value pair in an object. + struct Member { + GenericValue name; //!< name of member (must be a string) + GenericValue value; //!< value of member. + }; + + typedef Encoding EncodingType; //!< Encoding type from template parameter. + typedef Allocator AllocatorType; //!< Allocator type from template parameter. + typedef typename Encoding::Ch Ch; //!< Character type derived from Encoding. + typedef Member* MemberIterator; //!< Member iterator for iterating in object. + typedef const Member* ConstMemberIterator; //!< Constant member iterator for iterating in object. + typedef GenericValue* ValueIterator; //!< Value iterator for iterating in array. + typedef const GenericValue* ConstValueIterator; //!< Constant value iterator for iterating in array. + + //!@name Constructors and destructor. + //@{ + + //! Default constructor creates a null value. + GenericValue() : flags_(kNullFlag) {} + + //! Copy constructor is not permitted. +private: + GenericValue(const GenericValue& rhs); + +public: + + //! Constructor with JSON value type. + /*! This creates a Value of specified type with default content. + \param type Type of the value. + \note Default content for number is zero. + */ + GenericValue(Type type) { + static const unsigned defaultFlags[7] = { + kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kConstStringFlag, + kNumberFlag | kIntFlag | kUintFlag | kInt64Flag | kUint64Flag | kDoubleFlag + }; + RAPIDJSON_ASSERT(type <= kNumberType); + flags_ = defaultFlags[type]; + memset(&data_, 0, sizeof(data_)); + } + + //! Constructor for boolean value. + GenericValue(bool b) : flags_(b ? kTrueFlag : kFalseFlag) {} + + //! Constructor for int value. + GenericValue(int i) : flags_(kNumberIntFlag) { + data_.n.i64 = i; + if (i >= 0) + flags_ |= kUintFlag | kUint64Flag; + } + + //! Constructor for unsigned value. + GenericValue(unsigned u) : flags_(kNumberUintFlag) { + data_.n.u64 = u; + if (!(u & 0x80000000)) + flags_ |= kIntFlag | kInt64Flag; + } + + //! Constructor for int64_t value. + GenericValue(int64_t i64) : flags_(kNumberInt64Flag) { + data_.n.i64 = i64; + if (i64 >= 0) { + flags_ |= kNumberUint64Flag; + if (!(i64 & 0xFFFFFFFF00000000LL)) + flags_ |= kUintFlag; + if (!(i64 & 0xFFFFFFFF80000000LL)) + flags_ |= kIntFlag; + } + else if (i64 >= -2147483648LL) + flags_ |= kIntFlag; + } + + //! Constructor for uint64_t value. + GenericValue(uint64_t u64) : flags_(kNumberUint64Flag) { + data_.n.u64 = u64; + if (!(u64 & 0x8000000000000000ULL)) + flags_ |= kInt64Flag; + if (!(u64 & 0xFFFFFFFF00000000ULL)) + flags_ |= kUintFlag; + if (!(u64 & 0xFFFFFFFF80000000ULL)) + flags_ |= kIntFlag; + } + + //! Constructor for double value. + GenericValue(double d) : flags_(kNumberDoubleFlag) { data_.n.d = d; } + + //! Constructor for constant string (i.e. do not make a copy of string) + GenericValue(const Ch* s, SizeType length) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kConstStringFlag; + data_.s.str = s; + data_.s.length = length; + } + + //! Constructor for constant string (i.e. do not make a copy of string) + GenericValue(const Ch* s) { SetStringRaw(s, internal::StrLen(s)); } + + //! Constructor for copy-string (i.e. do make a copy of string) + GenericValue(const Ch* s, SizeType length, Allocator& allocator) { SetStringRaw(s, length, allocator); } + + //! Constructor for copy-string (i.e. do make a copy of string) + GenericValue(const Ch*s, Allocator& allocator) { SetStringRaw(s, internal::StrLen(s), allocator); } + + //! Destructor. + /*! Need to destruct elements of array, members of object, or copy-string. + */ + ~GenericValue() { + if (Allocator::kNeedFree) { // Shortcut by Allocator's trait + switch(flags_) { + case kArrayFlag: + for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v) + v->~GenericValue(); + Allocator::Free(data_.a.elements); + break; + + case kObjectFlag: + for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) { + m->name.~GenericValue(); + m->value.~GenericValue(); + } + Allocator::Free(data_.o.members); + break; + + case kCopyStringFlag: + Allocator::Free(const_cast(data_.s.str)); + break; + } + } + } + + //@} + + //!@name Assignment operators + //@{ + + //! Assignment with move semantics. + /*! \param rhs Source of the assignment. It will become a null value after assignment. + */ + GenericValue& operator=(GenericValue& rhs) { + RAPIDJSON_ASSERT(this != &rhs); + this->~GenericValue(); + memcpy(this, &rhs, sizeof(GenericValue)); + rhs.flags_ = kNullFlag; + return *this; + } + + //! Assignment with primitive types. + /*! \tparam T Either Type, int, unsigned, int64_t, uint64_t, const Ch* + \param value The value to be assigned. + */ + template + GenericValue& operator=(T value) { + this->~GenericValue(); + new (this) GenericValue(value); + return *this; + } + //@} + + //!@name Type + //@{ + + Type GetType() const { return static_cast(flags_ & kTypeMask); } + bool IsNull() const { return flags_ == kNullFlag; } + bool IsFalse() const { return flags_ == kFalseFlag; } + bool IsTrue() const { return flags_ == kTrueFlag; } + bool IsBool() const { return (flags_ & kBoolFlag) != 0; } + bool IsObject() const { return flags_ == kObjectFlag; } + bool IsArray() const { return flags_ == kArrayFlag; } + bool IsNumber() const { return (flags_ & kNumberFlag) != 0; } + bool IsInt() const { return (flags_ & kIntFlag) != 0; } + bool IsUint() const { return (flags_ & kUintFlag) != 0; } + bool IsInt64() const { return (flags_ & kInt64Flag) != 0; } + bool IsUint64() const { return (flags_ & kUint64Flag) != 0; } + bool IsDouble() const { return (flags_ & kDoubleFlag) != 0; } + bool IsString() const { return (flags_ & kStringFlag) != 0; } + + //@} + + //!@name Null + //@{ + + GenericValue& SetNull() { this->~GenericValue(); new (this) GenericValue(); return *this; } + + //@} + + //!@name Bool + //@{ + + bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return flags_ == kTrueFlag; } + GenericValue& SetBool(bool b) { this->~GenericValue(); new (this) GenericValue(b); return *this; } + + //@} + + //!@name Object + //@{ + + //! Set this value as an empty object. + GenericValue& SetObject() { this->~GenericValue(); new (this) GenericValue(kObjectType); return *this; } + + //! Get the value associated with the name. + /*! + \note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7. + Since 0.2, if the name is not correct, it will assert. + If user is unsure whether a member exists, user should use HasMember() first. + A better approach is to use the now public FindMember(). + */ + GenericValue& operator[](const Ch* name) { + if (Member* member = FindMember(name)) + return member->value; + else { + RAPIDJSON_ASSERT(false); // see above note + static GenericValue NullValue; + return NullValue; + } + } + const GenericValue& operator[](const Ch* name) const { return const_cast(*this)[name]; } + + //! Member iterators. + ConstMemberIterator MemberBegin() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.members; } + ConstMemberIterator MemberEnd() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; } + MemberIterator MemberBegin() { RAPIDJSON_ASSERT(IsObject()); return data_.o.members; } + MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; } + + //! Check whether a member exists in the object. + /*! + \note It is better to use FindMember() directly if you need the obtain the value as well. + */ + bool HasMember(const Ch* name) const { return FindMember(name) != 0; } + + //! Find member by name. + /*! + \return Return the member if exists. Otherwise returns null pointer. + */ + Member* FindMember(const Ch* name) { + RAPIDJSON_ASSERT(name); + RAPIDJSON_ASSERT(IsObject()); + + Object& o = data_.o; + for (Member* member = o.members; member != data_.o.members + data_.o.size; ++member) + if (name[member->name.data_.s.length] == '\0' && memcmp(member->name.data_.s.str, name, member->name.data_.s.length * sizeof(Ch)) == 0) + return member; + + return 0; + } + const Member* FindMember(const Ch* name) const { return const_cast(*this).FindMember(name); } + + //! Add a member (name-value pair) to the object. + /*! \param name A string value as name of member. + \param value Value of any type. + \param allocator Allocator for reallocating memory. + \return The value itself for fluent API. + \note The ownership of name and value will be transfered to this object if success. + */ + GenericValue& AddMember(GenericValue& name, GenericValue& value, Allocator& allocator) { + RAPIDJSON_ASSERT(IsObject()); + RAPIDJSON_ASSERT(name.IsString()); + Object& o = data_.o; + if (o.size >= o.capacity) { + if (o.capacity == 0) { + o.capacity = kDefaultObjectCapacity; + o.members = (Member*)allocator.Malloc(o.capacity * sizeof(Member)); + } + else { + SizeType oldCapacity = o.capacity; + o.capacity *= 2; + o.members = (Member*)allocator.Realloc(o.members, oldCapacity * sizeof(Member), o.capacity * sizeof(Member)); + } + } + o.members[o.size].name.RawAssign(name); + o.members[o.size].value.RawAssign(value); + o.size++; + return *this; + } + + GenericValue& AddMember(const Ch* name, Allocator& nameAllocator, GenericValue& value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name), nameAllocator); + return AddMember(n, value, allocator); + } + + GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name)); + return AddMember(n, value, allocator); + } + + template + GenericValue& AddMember(const Ch* name, T value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name)); + GenericValue v(value); + return AddMember(n, v, allocator); + } + + //! Remove a member in object by its name. + /*! \param name Name of member to be removed. + \return Whether the member existed. + \note Removing member is implemented by moving the last member. So the ordering of members is changed. + */ + bool RemoveMember(const Ch* name) { + RAPIDJSON_ASSERT(IsObject()); + if (Member* m = FindMember(name)) { + RAPIDJSON_ASSERT(data_.o.size > 0); + RAPIDJSON_ASSERT(data_.o.members != 0); + + Member* last = data_.o.members + (data_.o.size - 1); + if (data_.o.size > 1 && m != last) { + // Move the last one to this place + m->name = last->name; + m->value = last->value; + } + else { + // Only one left, just destroy + m->name.~GenericValue(); + m->value.~GenericValue(); + } + --data_.o.size; + return true; + } + return false; + } + + //@} + + //!@name Array + //@{ + + //! Set this value as an empty array. + GenericValue& SetArray() { this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; } + + //! Get the number of elements in array. + SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; } + + //! Get the capacity of array. + SizeType Capacity() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.capacity; } + + //! Check whether the array is empty. + bool Empty() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size == 0; } + + //! Remove all elements in the array. + /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged. + */ + void Clear() { + RAPIDJSON_ASSERT(IsArray()); + for (SizeType i = 0; i < data_.a.size; ++i) + data_.a.elements[i].~GenericValue(); + data_.a.size = 0; + } + + //! Get an element from array by index. + /*! \param index Zero-based index of element. + \note +\code +Value a(kArrayType); +a.PushBack(123); +int x = a[0].GetInt(); // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type. +int y = a[SizeType(0)].GetInt(); // Cast to SizeType will work. +int z = a[0u].GetInt(); // This works too. +\endcode + */ + GenericValue& operator[](SizeType index) { + RAPIDJSON_ASSERT(IsArray()); + RAPIDJSON_ASSERT(index < data_.a.size); + return data_.a.elements[index]; + } + const GenericValue& operator[](SizeType index) const { return const_cast(*this)[index]; } + + //! Element iterator + ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements; } + ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements + data_.a.size; } + ConstValueIterator Begin() const { return const_cast(*this).Begin(); } + ConstValueIterator End() const { return const_cast(*this).End(); } + + //! Request the array to have enough capacity to store elements. + /*! \param newCapacity The capacity that the array at least need to have. + \param allocator The allocator for allocating memory. It must be the same one use previously. + \return The value itself for fluent API. + */ + GenericValue& Reserve(SizeType newCapacity, Allocator &allocator) { + RAPIDJSON_ASSERT(IsArray()); + if (newCapacity > data_.a.capacity) { + data_.a.elements = (GenericValue*)allocator.Realloc(data_.a.elements, data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue)); + data_.a.capacity = newCapacity; + } + return *this; + } + + //! Append a value at the end of the array. + /*! \param value The value to be appended. + \param allocator The allocator for allocating memory. It must be the same one use previously. + \return The value itself for fluent API. + \note The ownership of the value will be transfered to this object if success. + \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient. + */ + GenericValue& PushBack(GenericValue& value, Allocator& allocator) { + RAPIDJSON_ASSERT(IsArray()); + if (data_.a.size >= data_.a.capacity) + Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : data_.a.capacity * 2, allocator); + data_.a.elements[data_.a.size++].RawAssign(value); + return *this; + } + + template + GenericValue& PushBack(T value, Allocator& allocator) { + GenericValue v(value); + return PushBack(v, allocator); + } + + //! Remove the last element in the array. + GenericValue& PopBack() { + RAPIDJSON_ASSERT(IsArray()); + RAPIDJSON_ASSERT(!Empty()); + data_.a.elements[--data_.a.size].~GenericValue(); + return *this; + } + //@} + + //!@name Number + //@{ + + int GetInt() const { RAPIDJSON_ASSERT(flags_ & kIntFlag); return data_.n.i.i; } + unsigned GetUint() const { RAPIDJSON_ASSERT(flags_ & kUintFlag); return data_.n.u.u; } + int64_t GetInt64() const { RAPIDJSON_ASSERT(flags_ & kInt64Flag); return data_.n.i64; } + uint64_t GetUint64() const { RAPIDJSON_ASSERT(flags_ & kUint64Flag); return data_.n.u64; } + + double GetDouble() const { + RAPIDJSON_ASSERT(IsNumber()); + if ((flags_ & kDoubleFlag) != 0) return data_.n.d; // exact type, no conversion. + if ((flags_ & kIntFlag) != 0) return data_.n.i.i; // int -> double + if ((flags_ & kUintFlag) != 0) return data_.n.u.u; // unsigned -> double + if ((flags_ & kInt64Flag) != 0) return (double)data_.n.i64; // int64_t -> double (may lose precision) + RAPIDJSON_ASSERT((flags_ & kUint64Flag) != 0); return (double)data_.n.u64; // uint64_t -> double (may lose precision) + } + + GenericValue& SetInt(int i) { this->~GenericValue(); new (this) GenericValue(i); return *this; } + GenericValue& SetUint(unsigned u) { this->~GenericValue(); new (this) GenericValue(u); return *this; } + GenericValue& SetInt64(int64_t i64) { this->~GenericValue(); new (this) GenericValue(i64); return *this; } + GenericValue& SetUint64(uint64_t u64) { this->~GenericValue(); new (this) GenericValue(u64); return *this; } + GenericValue& SetDouble(double d) { this->~GenericValue(); new (this) GenericValue(d); return *this; } + + //@} + + //!@name String + //@{ + + const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return data_.s.str; } + + //! Get the length of string. + /*! Since rapidjson permits "\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength(). + */ + SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return data_.s.length; } + + //! Set this value as a string without copying source string. + /*! This version has better performance with supplied length, and also support string containing null character. + \param s source string pointer. + \param length The length of source string, excluding the trailing null terminator. + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, SizeType length) { this->~GenericValue(); SetStringRaw(s, length); return *this; } + + //! Set this value as a string without copying source string. + /*! \param s source string pointer. + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s) { return SetString(s, internal::StrLen(s)); } + + //! Set this value as a string by copying from source string. + /*! This version has better performance with supplied length, and also support string containing null character. + \param s source string. + \param length The length of source string, excluding the trailing null terminator. + \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator(). + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { this->~GenericValue(); SetStringRaw(s, length, allocator); return *this; } + + //! Set this value as a string by copying from source string. + /*! \param s source string. + \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator(). + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, Allocator& allocator) { SetString(s, internal::StrLen(s), allocator); return *this; } + + //@} + + //! Generate events of this value to a Handler. + /*! This function adopts the GoF visitor pattern. + Typical usage is to output this JSON value as JSON text via Writer, which is a Handler. + It can also be used to deep clone this value via GenericDocument, which is also a Handler. + \tparam Handler type of handler. + \param handler An object implementing concept Handler. + */ + template + const GenericValue& Accept(Handler& handler) const { + switch(GetType()) { + case kNullType: handler.Null(); break; + case kFalseType: handler.Bool(false); break; + case kTrueType: handler.Bool(true); break; + + case kObjectType: + handler.StartObject(); + for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) { + handler.String(m->name.data_.s.str, m->name.data_.s.length, false); + m->value.Accept(handler); + } + handler.EndObject(data_.o.size); + break; + + case kArrayType: + handler.StartArray(); + for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v) + v->Accept(handler); + handler.EndArray(data_.a.size); + break; + + case kStringType: + handler.String(data_.s.str, data_.s.length, false); + break; + + case kNumberType: + if (IsInt()) handler.Int(data_.n.i.i); + else if (IsUint()) handler.Uint(data_.n.u.u); + else if (IsInt64()) handler.Int64(data_.n.i64); + else if (IsUint64()) handler.Uint64(data_.n.u64); + else handler.Double(data_.n.d); + break; + } + return *this; + } + +private: + template + friend class GenericDocument; + + enum { + kBoolFlag = 0x100, + kNumberFlag = 0x200, + kIntFlag = 0x400, + kUintFlag = 0x800, + kInt64Flag = 0x1000, + kUint64Flag = 0x2000, + kDoubleFlag = 0x4000, + kStringFlag = 0x100000, + kCopyFlag = 0x200000, + + // Initial flags of different types. + kNullFlag = kNullType, + kTrueFlag = kTrueType | kBoolFlag, + kFalseFlag = kFalseType | kBoolFlag, + kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag, + kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag, + kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag, + kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag, + kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag, + kConstStringFlag = kStringType | kStringFlag, + kCopyStringFlag = kStringType | kStringFlag | kCopyFlag, + kObjectFlag = kObjectType, + kArrayFlag = kArrayType, + + kTypeMask = 0xFF // bitwise-and with mask of 0xFF can be optimized by compiler + }; + + static const SizeType kDefaultArrayCapacity = 16; + static const SizeType kDefaultObjectCapacity = 16; + + struct String { + const Ch* str; + SizeType length; + unsigned hashcode; //!< reserved + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + // By using proper binary layout, retrieval of different integer types do not need conversions. + union Number { +#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN + struct I { + int i; + char padding[4]; + }i; + struct U { + unsigned u; + char padding2[4]; + }u; +#else + struct I { + char padding[4]; + int i; + }i; + struct U { + char padding2[4]; + unsigned u; + }u; +#endif + int64_t i64; + uint64_t u64; + double d; + }; // 8 bytes + + struct Object { + Member* members; + SizeType size; + SizeType capacity; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + struct Array { + GenericValue* elements; + SizeType size; + SizeType capacity; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + union Data { + String s; + Number n; + Object o; + Array a; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + // Initialize this value as array with initial data, without calling destructor. + void SetArrayRaw(GenericValue* values, SizeType count, Allocator& alloctaor) { + flags_ = kArrayFlag; + data_.a.elements = (GenericValue*)alloctaor.Malloc(count * sizeof(GenericValue)); + memcpy(data_.a.elements, values, count * sizeof(GenericValue)); + data_.a.size = data_.a.capacity = count; + } + + //! Initialize this value as object with initial data, without calling destructor. + void SetObjectRaw(Member* members, SizeType count, Allocator& alloctaor) { + flags_ = kObjectFlag; + data_.o.members = (Member*)alloctaor.Malloc(count * sizeof(Member)); + memcpy(data_.o.members, members, count * sizeof(Member)); + data_.o.size = data_.o.capacity = count; + } + + //! Initialize this value as constant string, without calling destructor. + void SetStringRaw(const Ch* s, SizeType length) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kConstStringFlag; + data_.s.str = s; + data_.s.length = length; + } + + //! Initialize this value as copy string with initial data, without calling destructor. + void SetStringRaw(const Ch* s, SizeType length, Allocator& allocator) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kCopyStringFlag; + data_.s.str = (Ch *)allocator.Malloc((length + 1) * sizeof(Ch)); + data_.s.length = length; + memcpy(const_cast(data_.s.str), s, length * sizeof(Ch)); + const_cast(data_.s.str)[length] = '\0'; + } + + //! Assignment without calling destructor + void RawAssign(GenericValue& rhs) { + memcpy(this, &rhs, sizeof(GenericValue)); + rhs.flags_ = kNullFlag; + } + + Data data_; + unsigned flags_; +}; +#pragma pack (pop) + +//! Value with UTF8 encoding. +typedef GenericValue > Value; + +/////////////////////////////////////////////////////////////////////////////// +// GenericDocument + +//! A document for parsing JSON text as DOM. +/*! + \implements Handler + \tparam Encoding encoding for both parsing and string storage. + \tparam Alloactor allocator for allocating memory for the DOM, and the stack during parsing. +*/ +template > +class GenericDocument : public GenericValue { +public: + typedef typename Encoding::Ch Ch; //!< Character type derived from Encoding. + typedef GenericValue ValueType; //!< Value type of the document. + typedef Allocator AllocatorType; //!< Allocator type from template parameter. + + //! Constructor + /*! \param allocator Optional allocator for allocating stack memory. + \param stackCapacity Initial capacity of stack in bytes. + */ + GenericDocument(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {} + + //! Parse JSON text from an input stream. + /*! \tparam parseFlags Combination of ParseFlag. + \param stream Input stream to be parsed. + \return The document itself for fluent API. + */ + template + GenericDocument& ParseStream(InputStream& is) { + ValueType::SetNull(); // Remove existing root if exist + GenericReader reader; + if (reader.template Parse(is, *this)) { + RAPIDJSON_ASSERT(stack_.GetSize() == sizeof(ValueType)); // Got one and only one root object + this->RawAssign(*stack_.template Pop(1)); // Add this-> to prevent issue 13. + parseError_ = 0; + errorOffset_ = 0; + } + else { + parseError_ = reader.GetParseError(); + errorOffset_ = reader.GetErrorOffset(); + ClearStack(); + } + return *this; + } + + //! Parse JSON text from a mutable string. + /*! \tparam parseFlags Combination of ParseFlag. + \param str Mutable zero-terminated string to be parsed. + \return The document itself for fluent API. + */ + template + GenericDocument& ParseInsitu(Ch* str) { + GenericInsituStringStream s(str); + return ParseStream(s); + } + + template + GenericDocument& ParseInsitu(Ch* str) { + return ParseInsitu(str); + } + + //! Parse JSON text from a read-only string. + /*! \tparam parseFlags Combination of ParseFlag (must not contain kParseInsituFlag). + \param str Read-only zero-terminated string to be parsed. + */ + template + GenericDocument& Parse(const Ch* str) { + RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag)); + GenericStringStream s(str); + return ParseStream(s); + } + + template + GenericDocument& Parse(const Ch* str) { + return Parse(str); + } + + //! Whether a parse error was occured in the last parsing. + bool HasParseError() const { return parseError_ != 0; } + + //! Get the message of parsing error. + const char* GetParseError() const { return parseError_; } + + //! Get the offset in character of the parsing error. + size_t GetErrorOffset() const { return errorOffset_; } + + //! Get the allocator of this document. + Allocator& GetAllocator() { return stack_.GetAllocator(); } + + //! Get the capacity of stack in bytes. + size_t GetStackCapacity() const { return stack_.GetCapacity(); } + +//private: + //friend class GenericReader; // for Reader to call the following private handler functions + + // Implementation of Handler + void Null() { new (stack_.template Push()) ValueType(); } + void Bool(bool b) { new (stack_.template Push()) ValueType(b); } + void Int(int i) { new (stack_.template Push()) ValueType(i); } + void Uint(unsigned i) { new (stack_.template Push()) ValueType(i); } + void Int64(int64_t i) { new (stack_.template Push()) ValueType(i); } + void Uint64(uint64_t i) { new (stack_.template Push()) ValueType(i); } + void Double(double d) { new (stack_.template Push()) ValueType(d); } + + void String(const Ch* str, SizeType length, bool copy) { + if (copy) + new (stack_.template Push()) ValueType(str, length, GetAllocator()); + else + new (stack_.template Push()) ValueType(str, length); + } + + void StartObject() { new (stack_.template Push()) ValueType(kObjectType); } + + void EndObject(SizeType memberCount) { + typename ValueType::Member* members = stack_.template Pop(memberCount); + stack_.template Top()->SetObjectRaw(members, (SizeType)memberCount, GetAllocator()); + } + + void StartArray() { new (stack_.template Push()) ValueType(kArrayType); } + + void EndArray(SizeType elementCount) { + ValueType* elements = stack_.template Pop(elementCount); + stack_.template Top()->SetArrayRaw(elements, elementCount, GetAllocator()); + } + +private: + // Prohibit assignment + GenericDocument& operator=(const GenericDocument&); + + void ClearStack() { + if (Allocator::kNeedFree) + while (stack_.GetSize() > 0) // Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects) + (stack_.template Pop(1))->~ValueType(); + else + stack_.Clear(); + } + + static const size_t kDefaultStackCapacity = 1024; + internal::Stack stack_; + const char* parseError_; + size_t errorOffset_; +}; + +typedef GenericDocument > Document; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_DOCUMENT_H_ diff --git a/Engine/source/persistence/rapidjson/encodedstream.h b/Engine/source/persistence/rapidjson/encodedstream.h new file mode 100644 index 0000000000..1f7bb5cf84 --- /dev/null +++ b/Engine/source/persistence/rapidjson/encodedstream.h @@ -0,0 +1,250 @@ +#ifndef RAPIDJSON_ENCODEDSTREAM_H_ +#define RAPIDJSON_ENCODEDSTREAM_H_ + +#include "rapidjson.h" + +namespace rapidjson { + +//! Input byte stream wrapper with a statically bound encoding. +/*! + \tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE. + \tparam InputByteStream Type of input byte stream. For example, FileReadStream. +*/ +template +class EncodedInputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); +public: + typedef typename Encoding::Ch Ch; + + EncodedInputStream(InputByteStream& is) : is_(is) { + current_ = Encoding::TakeBOM(is_); + } + + Ch Peek() const { return current_; } + Ch Take() { Ch c = current_; current_ = Encoding::Take(is_); return c; } + size_t Tell() const { return is_.Tell(); } + + // Not implemented + void Put(Ch c) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Prohibit assignment for VC C4512 warning + EncodedInputStream& operator=(const EncodedInputStream&); + + InputByteStream& is_; + Ch current_; +}; + +//! Output byte stream wrapper with statically bound encoding. +/*! + \tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE. + \tparam InputByteStream Type of input byte stream. For example, FileWriteStream. +*/ +template +class EncodedOutputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); +public: + typedef typename Encoding::Ch Ch; + + EncodedOutputStream(OutputByteStream& os, bool putBOM = true) : os_(os) { + if (putBOM) + Encoding::PutBOM(os_); + } + + void Put(Ch c) { Encoding::Put(os_, c); } + void Flush() { os_.Flush(); } + + // Not implemented + Ch Peek() const { RAPIDJSON_ASSERT(false); } + Ch Take() { RAPIDJSON_ASSERT(false); } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Prohibit assignment for VC C4512 warning + EncodedOutputStream& operator=(const EncodedOutputStream&); + + OutputByteStream& os_; +}; + +#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8::x, UTF16LE::x, UTF16BE::x, UTF32LE::x, UTF32BE::x + +//! Input stream wrapper with dynamically bound encoding and automatic encoding detection. +/*! + \tparam CharType Type of character for reading. + \tparam InputByteStream type of input byte stream to be wrapped. +*/ +template +class AutoUTFInputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); +public: + typedef CharType Ch; + + //! Constructor. + /*! + \param is input stream to be wrapped. + \param type UTF encoding type if it is not detected from the stream. + */ + AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) { + DetectType(); + static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) }; + takeFunc_ = f[type_]; + current_ = takeFunc_(*is_); + } + + UTFType GetType() const { return type_; } + bool HasBOM() const { return hasBOM_; } + + Ch Peek() const { return current_; } + Ch Take() { Ch c = current_; current_ = takeFunc_(*is_); return c; } + size_t Tell() const { return is_->Tell(); } + + // Not implemented + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Detect encoding type with BOM or RFC 4627 + void DetectType() { + // BOM (Byte Order Mark): + // 00 00 FE FF UTF-32BE + // FF FE 00 00 UTF-32LE + // FE FF UTF-16BE + // FF FE UTF-16LE + // EF BB BF UTF-8 + + const unsigned char* c = (const unsigned char *)is_->Peek4(); + if (!c) + return; + + unsigned bom = c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24); + hasBOM_ = false; + if (bom == 0xFFFE0000) { type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); } + else if (bom == 0x0000FEFF) { type_ = kUTF32LE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); } + else if ((bom & 0xFFFF) == 0xFFFE) { type_ = kUTF16BE; hasBOM_ = true; is_->Take(); is_->Take(); } + else if ((bom & 0xFFFF) == 0xFEFF) { type_ = kUTF16LE; hasBOM_ = true; is_->Take(); is_->Take(); } + else if ((bom & 0xFFFFFF) == 0xBFBBEF) { type_ = kUTF8; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); } + + // RFC 4627: Section 3 + // "Since the first two characters of a JSON text will always be ASCII + // characters [RFC0020], it is possible to determine whether an octet + // stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking + // at the pattern of nulls in the first four octets." + // 00 00 00 xx UTF-32BE + // 00 xx 00 xx UTF-16BE + // xx 00 00 00 UTF-32LE + // xx 00 xx 00 UTF-16LE + // xx xx xx xx UTF-8 + + if (!hasBOM_) { + unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0); + switch (pattern) { + case 0x08: type_ = kUTF32BE; break; + case 0x0A: type_ = kUTF16BE; break; + case 0x01: type_ = kUTF32LE; break; + case 0x05: type_ = kUTF16LE; break; + case 0x0F: type_ = kUTF8; break; + } + } + + // RUntime check whether the size of character type is sufficient. It only perform checks with assertion. + switch (type_) { + case kUTF8: + // Do nothing + break; + case kUTF16LE: + case kUTF16BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 2); + break; + case kUTF32LE: + case kUTF32BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 4); + break; + } + } + + typedef Ch (*TakeFunc)(InputByteStream& is); + InputByteStream* is_; + UTFType type_; + Ch current_; + TakeFunc takeFunc_; + bool hasBOM_; +}; + +//! Output stream wrapper with dynamically bound encoding and automatic encoding detection. +/*! + \tparam CharType Type of character for writing. + \tparam InputByteStream type of output byte stream to be wrapped. +*/ +template +class AutoUTFOutputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); +public: + typedef CharType Ch; + + //! Constructor. + /*! + \param os output stream to be wrapped. + \param type UTF encoding type. + \param putBOM Whether to write BOM at the beginning of the stream. + */ + AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) { + // RUntime check whether the size of character type is sufficient. It only perform checks with assertion. + switch (type_) { + case kUTF16LE: + case kUTF16BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 2); + break; + case kUTF32LE: + case kUTF32BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 4); + break; + case kUTF8: + // Do nothing + break; + } + + static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) }; + putFunc_ = f[type_]; + + if (putBOM) + PutBOM(); + } + + UTFType GetType() const { return type_; } + + void Put(Ch c) { putFunc_(*os_, c); } + void Flush() { os_->Flush(); } + + // Not implemented + Ch Peek() const { RAPIDJSON_ASSERT(false); } + Ch Take() { RAPIDJSON_ASSERT(false); } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + void PutBOM() { + typedef void (*PutBOMFunc)(OutputByteStream&); + static const PutBOMFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(PutBOM) }; + f[type_](*os_); + } + + typedef void (*PutFunc)(OutputByteStream&, Ch); + + OutputByteStream* os_; + UTFType type_; + PutFunc putFunc_; +}; + +#undef RAPIDJSON_ENCODINGS_FUNC + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/encodings.h b/Engine/source/persistence/rapidjson/encodings.h new file mode 100644 index 0000000000..33fcc3c938 --- /dev/null +++ b/Engine/source/persistence/rapidjson/encodings.h @@ -0,0 +1,527 @@ +#ifndef RAPIDJSON_ENCODINGS_H_ +#define RAPIDJSON_ENCODINGS_H_ + +#include "rapidjson.h" + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// Encoding + +/*! \class rapidjson::Encoding + \brief Concept for encoding of Unicode characters. + +\code +concept Encoding { + typename Ch; //! Type of character. A "character" is actually a code unit in unicode's definition. + + //! \brief Encode a Unicode codepoint to an output stream. + //! \param os Output stream. + //! \param codepoint An unicode codepoint, ranging from 0x0 to 0x10FFFF inclusively. + template + static void Encode(OutputStream& os, unsigned codepoint); + + //! \brief Decode a Unicode codepoint from an input stream. + //! \param is Input stream. + //! \param codepoint Output of the unicode codepoint. + //! \return true if a valid codepoint can be decoded from the stream. + template + static bool Decode(InputStream& is, unsigned* codepoint); + + //! \brief Validate one Unicode codepoint from an encoded stream. + //! \param is Input stream to obtain codepoint. + //! \param os Output for copying one codepoint. + //! \return true if it is valid. + //! \note This function just validating and copying the codepoint without actually decode it. + template + static bool Validate(InputStream& is, OutputStream& os); + + // The following functions are deal with byte streams. + + //! Take a character from input byte stream, skip BOM if exist. + template + static CharType TakeBOM(InputByteStream& is); + + //! Take a character from input byte stream. + template + static Ch Take(InputByteStream& is); + + //! Put BOM to output byte stream. + template + static void PutBOM(OutputByteStream& os); + + //! Put a character to output byte stream. + template + static void Put(OutputByteStream& os, Ch c); +}; +\endcode +*/ + +/////////////////////////////////////////////////////////////////////////////// +// UTF8 + +//! UTF-8 encoding. +/*! http://en.wikipedia.org/wiki/UTF-8 + http://tools.ietf.org/html/rfc3629 + \tparam CharType Code unit for storing 8-bit UTF-8 data. Default is char. + \implements Encoding +*/ +template +struct UTF8 { + typedef CharType Ch; + + template + static void Encode(OutputStream& os, unsigned codepoint) { + if (codepoint <= 0x7F) + os.Put(codepoint & 0xFF); + else if (codepoint <= 0x7FF) { + os.Put(0xC0 | ((codepoint >> 6) & 0xFF)); + os.Put(0x80 | ((codepoint & 0x3F))); + } + else if (codepoint <= 0xFFFF) { + os.Put(0xE0 | ((codepoint >> 12) & 0xFF)); + os.Put(0x80 | ((codepoint >> 6) & 0x3F)); + os.Put(0x80 | (codepoint & 0x3F)); + } + else { + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + os.Put(0xF0 | ((codepoint >> 18) & 0xFF)); + os.Put(0x80 | ((codepoint >> 12) & 0x3F)); + os.Put(0x80 | ((codepoint >> 6) & 0x3F)); + os.Put(0x80 | (codepoint & 0x3F)); + } + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { +#define COPY() c = is.Take(); *codepoint = (*codepoint << 6) | ((unsigned char)c & 0x3Fu) +#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0) +#define TAIL() COPY(); TRANS(0x70) + Ch c = is.Take(); + if (!(c & 0x80)) { + *codepoint = (unsigned char)c; + return true; + } + + unsigned char type = GetRange((unsigned char)c); + *codepoint = (0xFF >> type) & (unsigned char)c; + bool result = true; + switch (type) { + case 2: TAIL(); return result; + case 3: TAIL(); TAIL(); return result; + case 4: COPY(); TRANS(0x50); TAIL(); return result; + case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result; + case 6: TAIL(); TAIL(); TAIL(); return result; + case 10: COPY(); TRANS(0x20); TAIL(); return result; + case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result; + default: return false; + } +#undef COPY +#undef TRANS +#undef TAIL + } + + template + static bool Validate(InputStream& is, OutputStream& os) { +#define COPY() os.Put(c = is.Take()) +#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0) +#define TAIL() COPY(); TRANS(0x70) + Ch c; + COPY(); + if (!(c & 0x80)) + return true; + + bool result = true; + switch (GetRange((unsigned char)c)) { + case 2: TAIL(); return result; + case 3: TAIL(); TAIL(); return result; + case 4: COPY(); TRANS(0x50); TAIL(); return result; + case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result; + case 6: TAIL(); TAIL(); TAIL(); return result; + case 10: COPY(); TRANS(0x20); TAIL(); return result; + case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result; + default: return false; + } +#undef COPY +#undef TRANS +#undef TAIL + } + + static unsigned char GetRange(unsigned char c) { + // Referring to DFA of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + // With new mapping 1 -> 0x10, 7 -> 0x20, 9 -> 0x40, such that AND operation can test multiple types. + static const unsigned char type[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, + }; + return type[c]; + } + + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + Ch c = Take(is); + if ((unsigned char)c != 0xEFu) return c; + c = is.Take(); + if ((unsigned char)c != 0xBBu) return c; + c = is.Take(); + if ((unsigned char)c != 0xBFu) return c; + c = is.Take(); + return c; + } + + template + static Ch Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + return is.Take(); + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xEFu); os.Put(0xBBu); os.Put(0xBFu); + } + + template + static void Put(OutputByteStream& os, Ch c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(static_cast(c)); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// UTF16 + +//! UTF-16 encoding. +/*! http://en.wikipedia.org/wiki/UTF-16 + http://tools.ietf.org/html/rfc2781 + \tparam CharType Type for storing 16-bit UTF-16 data. Default is wchar_t. C++11 may use char16_t instead. + \implements Encoding + + \note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness. + For streaming, use UTF16LE and UTF16BE, which handle endianness. +*/ +template +struct UTF16 { + typedef CharType Ch; + RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 2); + + template + static void Encode(OutputStream& os, unsigned codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2); + if (codepoint <= 0xFFFF) { + RAPIDJSON_ASSERT(codepoint < 0xD800 || codepoint > 0xDFFF); // Code point itself cannot be surrogate pair + os.Put(static_cast(codepoint)); + } + else { + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + unsigned v = codepoint - 0x10000; + os.Put(static_cast((v >> 10) | 0xD800)); + os.Put((v & 0x3FF) | 0xDC00); + } + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2); + Ch c = is.Take(); + if (c < 0xD800 || c > 0xDFFF) { + *codepoint = c; + return true; + } + else if (c <= 0xDBFF) { + *codepoint = (c & 0x3FF) << 10; + c = is.Take(); + *codepoint |= (c & 0x3FF); + *codepoint += 0x10000; + return c >= 0xDC00 && c <= 0xDFFF; + } + return false; + } + + template + static bool Validate(InputStream& is, OutputStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2); + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2); + Ch c; + os.Put(c = is.Take()); + if (c < 0xD800 || c > 0xDFFF) + return true; + else if (c <= 0xDBFF) { + os.Put(c = is.Take()); + return c >= 0xDC00 && c <= 0xDFFF; + } + return false; + } +}; + +//! UTF-16 little endian encoding. +template +struct UTF16LE : UTF16 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned short)c == 0xFEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take(); + c |= (unsigned char)is.Take() << 8; + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFFu); os.Put(0xFEu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(c & 0xFFu); + os.Put((c >> 8) & 0xFFu); + } +}; + +//! UTF-16 big endian encoding. +template +struct UTF16BE : UTF16 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned short)c == 0xFEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take(); + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFEu); os.Put(0xFFu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put((c >> 8) & 0xFFu); + os.Put(c & 0xFFu); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// UTF32 + +//! UTF-32 encoding. +/*! http://en.wikipedia.org/wiki/UTF-32 + \tparam Ch Type for storing 32-bit UTF-32 data. Default is unsigned. C++11 may use char32_t instead. + \implements Encoding + + \note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness. + For streaming, use UTF32LE and UTF32BE, which handle endianness. +*/ +template +struct UTF32 { + typedef CharType Ch; + RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 4); + + template + static void Encode(OutputStream& os, unsigned codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 4); + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + os.Put(codepoint); + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4); + Ch c = is.Take(); + *codepoint = c; + return c <= 0x10FFFF; + } + + template + static bool Validate(InputStream& is, OutputStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4); + Ch c; + os.Put(c = is.Take()); + return c <= 0x10FFFF; + } +}; + +//! UTF-32 little endian enocoding. +template +struct UTF32LE : UTF32 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned)c == 0x0000FEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take(); + c |= (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take() << 16; + c |= (unsigned char)is.Take() << 24; + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFFu); os.Put(0xFEu); os.Put(0x00u); os.Put(0x00u); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(c & 0xFFu); + os.Put((c >> 8) & 0xFFu); + os.Put((c >> 16) & 0xFFu); + os.Put((c >> 24) & 0xFFu); + } +}; + +//! UTF-32 big endian encoding. +template +struct UTF32BE : UTF32 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned)c == 0x0000FEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take() << 24; + c |= (unsigned char)is.Take() << 16; + c |= (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take(); + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0x00u); os.Put(0x00u); os.Put(0xFEu); os.Put(0xFFu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put((c >> 24) & 0xFFu); + os.Put((c >> 16) & 0xFFu); + os.Put((c >> 8) & 0xFFu); + os.Put(c & 0xFFu); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// AutoUTF + +//! Runtime-specified UTF encoding type of a stream. +enum UTFType { + kUTF8 = 0, //!< UTF-8. + kUTF16LE = 1, //!< UTF-16 little endian. + kUTF16BE = 2, //!< UTF-16 big endian. + kUTF32LE = 3, //!< UTF-32 little endian. + kUTF32BE = 4, //!< UTF-32 big endian. +}; + +//! Dynamically select encoding according to stream's runtime-specified UTF encoding type. +/*! \note This class can be used with AutoUTFInputtStream and AutoUTFOutputStream, which provides GetType(). +*/ +template +struct AutoUTF { + typedef CharType Ch; + +#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8::x, UTF16LE::x, UTF16BE::x, UTF32LE::x, UTF32BE::x + + template + RAPIDJSON_FORCEINLINE static void Encode(OutputStream& os, unsigned codepoint) { + typedef void (*EncodeFunc)(OutputStream&, unsigned); + static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) }; + (*f[os.GetType()])(os, codepoint); + } + + template + RAPIDJSON_FORCEINLINE static bool Decode(InputStream& is, unsigned* codepoint) { + typedef bool (*DecodeFunc)(InputStream&, unsigned*); + static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) }; + return (*f[is.GetType()])(is, codepoint); + } + + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + typedef bool (*ValidateFunc)(InputStream&, OutputStream&); + static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) }; + return (*f[is.GetType()])(is, os); + } + +#undef RAPIDJSON_ENCODINGS_FUNC +}; + +/////////////////////////////////////////////////////////////////////////////// +// Transcoder + +//! Encoding conversion. +template +struct Transcoder { + //! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream. + template + RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) { + unsigned codepoint; + if (!SourceEncoding::Decode(is, &codepoint)) + return false; + TargetEncoding::Encode(os, codepoint); + return true; + } + + //! Validate one Unicode codepoint from an encoded stream. + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + return Transcode(is, os); // Since source/target encoding is different, must transcode. + } +}; + +//! Specialization of Transcoder with same source and target encoding. +template +struct Transcoder { + template + RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) { + os.Put(is.Take()); // Just copy one code unit. This semantic is different from primary template class. + return true; + } + + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + return Encoding::Validate(is, os); // source/target encoding are the same + } +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_ENCODINGS_H_ diff --git a/Engine/source/persistence/rapidjson/filereadstream.h b/Engine/source/persistence/rapidjson/filereadstream.h new file mode 100644 index 0000000000..2c97c67047 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filereadstream.h @@ -0,0 +1,74 @@ +#ifndef RAPIDJSON_FILEREADSTREAM_H_ +#define RAPIDJSON_FILEREADSTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! File byte stream for input using fread(). +/*! + \implements Stream +*/ +class FileReadStream { +public: + typedef char Ch; //!< Character type (byte). + + //! Constructor. + /*! + \param fp File pointer opened for read. + \param buffer user-supplied buffer. + \param bufferSize size of buffer in bytes. Must >=4 bytes. + */ + FileReadStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { + RAPIDJSON_ASSERT(fp_ != 0); + RAPIDJSON_ASSERT(bufferSize >= 4); + Read(); + } + + Ch Peek() const { return *current_; } + Ch Take() { Ch c = *current_; Read(); return c; } + size_t Tell() const { return count_ + (current_ - buffer_); } + + // Not implemented + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + + // For encoding detection only. + const Ch* Peek4() const { + return (current_ + 4 <= bufferLast_) ? current_ : 0; + } + +private: + void Read() { + if (current_ < bufferLast_) + ++current_; + else if (!eof_) { + count_ += readCount_; + readCount_ = fread(buffer_, 1, bufferSize_, fp_); + bufferLast_ = buffer_ + readCount_ - 1; + current_ = buffer_; + + if (readCount_ < bufferSize_) { + buffer_[readCount_] = '\0'; + ++bufferLast_; + eof_ = true; + } + } + } + + FILE* fp_; + Ch *buffer_; + size_t bufferSize_; + Ch *bufferLast_; + Ch *current_; + size_t readCount_; + size_t count_; //!< Number of characters read + bool eof_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/filestream.h b/Engine/source/persistence/rapidjson/filestream.h new file mode 100644 index 0000000000..d003029f89 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filestream.h @@ -0,0 +1,49 @@ +#ifndef RAPIDJSON_FILESTREAM_H_ +#define RAPIDJSON_FILESTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! (Depreciated) Wrapper of C file stream for input or output. +/*! + This simple wrapper does not check the validity of the stream. + \implements Stream + \deprecated { This was only for basic testing in version 0.1, it is found that the performance is very low by using fgetc(). Use FileReadStream instead. } +*/ +class FileStream { +public: + typedef char Ch; //!< Character type. Only support char. + + FileStream(FILE* fp) : fp_(fp), count_(0) { Read(); } + char Peek() const { return current_; } + char Take() { char c = current_; Read(); return c; } + size_t Tell() const { return count_; } + void Put(char c) { fputc(c, fp_); } + void Flush() { fflush(fp_); } + + // Not implemented + char* PutBegin() { return 0; } + size_t PutEnd(char*) { return 0; } + +private: + void Read() { + RAPIDJSON_ASSERT(fp_ != 0); + int c = fgetc(fp_); + if (c != EOF) { + current_ = (char)c; + count_++; + } + else if (current_ != '\0') + current_ = '\0'; + } + + FILE* fp_; + char current_; + size_t count_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/filewritestream.h b/Engine/source/persistence/rapidjson/filewritestream.h new file mode 100644 index 0000000000..b3d9de3d56 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filewritestream.h @@ -0,0 +1,73 @@ +#ifndef RAPIDJSON_FILEWRITESTREAM_H_ +#define RAPIDJSON_FILEWRITESTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! Wrapper of C file stream for input using fread(). +/*! + \implements Stream +*/ +class FileWriteStream { +public: + typedef char Ch; //!< Character type. Only support char. + + FileWriteStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { + RAPIDJSON_ASSERT(fp_ != 0); + } + + void Put(char c) { + if (current_ >= bufferEnd_) + Flush(); + + *current_++ = c; + } + + void PutN(char c, size_t n) { + size_t avail = bufferEnd_ - current_; + while (n > avail) { + memset(current_, c, avail); + current_ += avail; + Flush(); + n -= avail; + avail = bufferEnd_ - current_; + } + + if (n > 0) { + memset(current_, c, n); + current_ += n; + } + } + + void Flush() { + if (current_ != buffer_) { + fwrite(buffer_, 1, current_ - buffer_, fp_); + current_ = buffer_; + } + } + + // Not implemented + char Peek() const { RAPIDJSON_ASSERT(false); return 0; } + char Take() { RAPIDJSON_ASSERT(false); return 0; } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + FILE* fp_; + char *buffer_; + char *bufferEnd_; + char *current_; +}; + +//! Implement specialized version of PutN() with memset() for better performance. +template<> +inline void PutN(FileWriteStream& stream, char c, size_t n) { + stream.PutN(c, n); +} + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/internal/pow10.h b/Engine/source/persistence/rapidjson/internal/pow10.h new file mode 100644 index 0000000000..bf3a9afb04 --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/pow10.h @@ -0,0 +1,54 @@ +#ifndef RAPIDJSON_POW10_ +#define RAPIDJSON_POW10_ + +namespace rapidjson { +namespace internal { + +//! Computes integer powers of 10 in double (10.0^n). +/*! This function uses lookup table for fast and accurate results. + \param n positive/negative exponent. Must <= 308. + \return 10.0^n +*/ +inline double Pow10(int n) { + static const double e[] = { // 1e-308...1e308: 617 * 8 bytes = 4936 bytes + 1e-308,1e-307,1e-306,1e-305,1e-304,1e-303,1e-302,1e-301,1e-300, + 1e-299,1e-298,1e-297,1e-296,1e-295,1e-294,1e-293,1e-292,1e-291,1e-290,1e-289,1e-288,1e-287,1e-286,1e-285,1e-284,1e-283,1e-282,1e-281,1e-280, + 1e-279,1e-278,1e-277,1e-276,1e-275,1e-274,1e-273,1e-272,1e-271,1e-270,1e-269,1e-268,1e-267,1e-266,1e-265,1e-264,1e-263,1e-262,1e-261,1e-260, + 1e-259,1e-258,1e-257,1e-256,1e-255,1e-254,1e-253,1e-252,1e-251,1e-250,1e-249,1e-248,1e-247,1e-246,1e-245,1e-244,1e-243,1e-242,1e-241,1e-240, + 1e-239,1e-238,1e-237,1e-236,1e-235,1e-234,1e-233,1e-232,1e-231,1e-230,1e-229,1e-228,1e-227,1e-226,1e-225,1e-224,1e-223,1e-222,1e-221,1e-220, + 1e-219,1e-218,1e-217,1e-216,1e-215,1e-214,1e-213,1e-212,1e-211,1e-210,1e-209,1e-208,1e-207,1e-206,1e-205,1e-204,1e-203,1e-202,1e-201,1e-200, + 1e-199,1e-198,1e-197,1e-196,1e-195,1e-194,1e-193,1e-192,1e-191,1e-190,1e-189,1e-188,1e-187,1e-186,1e-185,1e-184,1e-183,1e-182,1e-181,1e-180, + 1e-179,1e-178,1e-177,1e-176,1e-175,1e-174,1e-173,1e-172,1e-171,1e-170,1e-169,1e-168,1e-167,1e-166,1e-165,1e-164,1e-163,1e-162,1e-161,1e-160, + 1e-159,1e-158,1e-157,1e-156,1e-155,1e-154,1e-153,1e-152,1e-151,1e-150,1e-149,1e-148,1e-147,1e-146,1e-145,1e-144,1e-143,1e-142,1e-141,1e-140, + 1e-139,1e-138,1e-137,1e-136,1e-135,1e-134,1e-133,1e-132,1e-131,1e-130,1e-129,1e-128,1e-127,1e-126,1e-125,1e-124,1e-123,1e-122,1e-121,1e-120, + 1e-119,1e-118,1e-117,1e-116,1e-115,1e-114,1e-113,1e-112,1e-111,1e-110,1e-109,1e-108,1e-107,1e-106,1e-105,1e-104,1e-103,1e-102,1e-101,1e-100, + 1e-99, 1e-98, 1e-97, 1e-96, 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86, 1e-85, 1e-84, 1e-83, 1e-82, 1e-81, 1e-80, + 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, + 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, + 1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, + 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e+0, + 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6, 1e+7, 1e+8, 1e+9, 1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16, 1e+17, 1e+18, 1e+19, 1e+20, + 1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33, 1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40, + 1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50, 1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60, + 1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67, 1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80, + 1e+81, 1e+82, 1e+83, 1e+84, 1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100, + 1e+101,1e+102,1e+103,1e+104,1e+105,1e+106,1e+107,1e+108,1e+109,1e+110,1e+111,1e+112,1e+113,1e+114,1e+115,1e+116,1e+117,1e+118,1e+119,1e+120, + 1e+121,1e+122,1e+123,1e+124,1e+125,1e+126,1e+127,1e+128,1e+129,1e+130,1e+131,1e+132,1e+133,1e+134,1e+135,1e+136,1e+137,1e+138,1e+139,1e+140, + 1e+141,1e+142,1e+143,1e+144,1e+145,1e+146,1e+147,1e+148,1e+149,1e+150,1e+151,1e+152,1e+153,1e+154,1e+155,1e+156,1e+157,1e+158,1e+159,1e+160, + 1e+161,1e+162,1e+163,1e+164,1e+165,1e+166,1e+167,1e+168,1e+169,1e+170,1e+171,1e+172,1e+173,1e+174,1e+175,1e+176,1e+177,1e+178,1e+179,1e+180, + 1e+181,1e+182,1e+183,1e+184,1e+185,1e+186,1e+187,1e+188,1e+189,1e+190,1e+191,1e+192,1e+193,1e+194,1e+195,1e+196,1e+197,1e+198,1e+199,1e+200, + 1e+201,1e+202,1e+203,1e+204,1e+205,1e+206,1e+207,1e+208,1e+209,1e+210,1e+211,1e+212,1e+213,1e+214,1e+215,1e+216,1e+217,1e+218,1e+219,1e+220, + 1e+221,1e+222,1e+223,1e+224,1e+225,1e+226,1e+227,1e+228,1e+229,1e+230,1e+231,1e+232,1e+233,1e+234,1e+235,1e+236,1e+237,1e+238,1e+239,1e+240, + 1e+241,1e+242,1e+243,1e+244,1e+245,1e+246,1e+247,1e+248,1e+249,1e+250,1e+251,1e+252,1e+253,1e+254,1e+255,1e+256,1e+257,1e+258,1e+259,1e+260, + 1e+261,1e+262,1e+263,1e+264,1e+265,1e+266,1e+267,1e+268,1e+269,1e+270,1e+271,1e+272,1e+273,1e+274,1e+275,1e+276,1e+277,1e+278,1e+279,1e+280, + 1e+281,1e+282,1e+283,1e+284,1e+285,1e+286,1e+287,1e+288,1e+289,1e+290,1e+291,1e+292,1e+293,1e+294,1e+295,1e+296,1e+297,1e+298,1e+299,1e+300, + 1e+301,1e+302,1e+303,1e+304,1e+305,1e+306,1e+307,1e+308 + }; + RAPIDJSON_ASSERT(n <= 308); + return n < -308 ? 0.0 : e[n + 308]; +} + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_POW10_ diff --git a/Engine/source/persistence/rapidjson/internal/stack.h b/Engine/source/persistence/rapidjson/internal/stack.h new file mode 100644 index 0000000000..d4b4b6449d --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/stack.h @@ -0,0 +1,83 @@ +#ifndef RAPIDJSON_INTERNAL_STACK_H_ +#define RAPIDJSON_INTERNAL_STACK_H_ + +namespace rapidjson { +namespace internal { + +/////////////////////////////////////////////////////////////////////////////// +// Stack + +//! A type-unsafe stack for storing different types of data. +/*! \tparam Allocator Allocator for allocating stack memory. +*/ +template +class Stack { +public: + Stack(Allocator* allocator, size_t stack_capacity) : allocator_(allocator), own_allocator_(0), stack_(0), stack_top_(0), stack_end_(0), stack_capacity_(stack_capacity) { + RAPIDJSON_ASSERT(stack_capacity_ > 0); + if (!allocator_) + own_allocator_ = allocator_ = new Allocator(); + stack_top_ = stack_ = (char*)allocator_->Malloc(stack_capacity_); + stack_end_ = stack_ + stack_capacity_; + } + + ~Stack() { + Allocator::Free(stack_); + delete own_allocator_; // Only delete if it is owned by the stack + } + + void Clear() { /*stack_top_ = 0;*/ stack_top_ = stack_; } + + template + T* Push(size_t count = 1) { + // Expand the stack if needed + if (stack_top_ + sizeof(T) * count >= stack_end_) { + size_t new_capacity = stack_capacity_ * 2; + size_t size = GetSize(); + size_t new_size = GetSize() + sizeof(T) * count; + if (new_capacity < new_size) + new_capacity = new_size; + stack_ = (char*)allocator_->Realloc(stack_, stack_capacity_, new_capacity); + stack_capacity_ = new_capacity; + stack_top_ = stack_ + size; + stack_end_ = stack_ + stack_capacity_; + } + T* ret = (T*)stack_top_; + stack_top_ += sizeof(T) * count; + return ret; + } + + template + T* Pop(size_t count) { + RAPIDJSON_ASSERT(GetSize() >= count * sizeof(T)); + stack_top_ -= count * sizeof(T); + return (T*)stack_top_; + } + + template + T* Top() { + RAPIDJSON_ASSERT(GetSize() >= sizeof(T)); + return (T*)(stack_top_ - sizeof(T)); + } + + template + T* Bottom() { return (T*)stack_; } + + Allocator& GetAllocator() { return *allocator_; } + bool Empty() const { return stack_top_ == stack_; } + size_t GetSize() const { return stack_top_ - stack_; } + size_t GetCapacity() const { return stack_capacity_; } + +private: + Allocator* allocator_; + Allocator* own_allocator_; + char *stack_; + char *stack_top_; + char *stack_end_; + size_t stack_capacity_; +}; + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_STACK_H_ diff --git a/Engine/source/persistence/rapidjson/internal/strfunc.h b/Engine/source/persistence/rapidjson/internal/strfunc.h new file mode 100644 index 0000000000..bbf444fe6d --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/strfunc.h @@ -0,0 +1,24 @@ +#ifndef RAPIDJSON_INTERNAL_STRFUNC_H_ +#define RAPIDJSON_INTERNAL_STRFUNC_H_ + +namespace rapidjson { +namespace internal { + +//! Custom strlen() which works on different character types. +/*! \tparam Ch Character type (e.g. char, wchar_t, short) + \param s Null-terminated input string. + \return Number of characters in the string. + \note This has the same semantics as strlen(), the return value is not number of Unicode codepoints. +*/ +template +inline SizeType StrLen(const Ch* s) { + const Ch* p = s; + while (*p != '\0') + ++p; + return SizeType(p - s); +} + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_INTERNAL_STRFUNC_H_ diff --git a/Engine/source/persistence/rapidjson/prettywriter.h b/Engine/source/persistence/rapidjson/prettywriter.h new file mode 100644 index 0000000000..7e2645de53 --- /dev/null +++ b/Engine/source/persistence/rapidjson/prettywriter.h @@ -0,0 +1,160 @@ +#ifndef RAPIDJSON_PRETTYWRITER_H_ +#define RAPIDJSON_PRETTYWRITER_H_ + +#include "writer.h" + +namespace rapidjson { + +//! Writer with indentation and spacing. +/*! + \tparam OutputStream Type of ouptut os. + \tparam Encoding Encoding of both source strings and output. + \tparam Allocator Type of allocator for allocating memory of stack. +*/ +template, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> > +class PrettyWriter : public Writer { +public: + typedef Writer Base; + typedef typename Base::Ch Ch; + + //! Constructor + /*! \param os Output os. + \param allocator User supplied allocator. If it is null, it will create a private one. + \param levelDepth Initial capacity of + */ + PrettyWriter(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = Base::kDefaultLevelDepth) : + Base(os, allocator, levelDepth), indentChar_(' '), indentCharCount_(4) {} + + //! Set custom indentation. + /*! \param indentChar Character for indentation. Must be whitespace character (' ', '\t', '\n', '\r'). + \param indentCharCount Number of indent characters for each indentation level. + \note The default indentation is 4 spaces. + */ + PrettyWriter& SetIndent(Ch indentChar, unsigned indentCharCount) { + RAPIDJSON_ASSERT(indentChar == ' ' || indentChar == '\t' || indentChar == '\n' || indentChar == '\r'); + indentChar_ = indentChar; + indentCharCount_ = indentCharCount; + return *this; + } + + //@name Implementation of Handler. + //@{ + + PrettyWriter& Null() { PrettyPrefix(kNullType); Base::WriteNull(); return *this; } + PrettyWriter& Bool(bool b) { PrettyPrefix(b ? kTrueType : kFalseType); Base::WriteBool(b); return *this; } + PrettyWriter& Int(int i) { PrettyPrefix(kNumberType); Base::WriteInt(i); return *this; } + PrettyWriter& Uint(unsigned u) { PrettyPrefix(kNumberType); Base::WriteUint(u); return *this; } + PrettyWriter& Int64(int64_t i64) { PrettyPrefix(kNumberType); Base::WriteInt64(i64); return *this; } + PrettyWriter& Uint64(uint64_t u64) { PrettyPrefix(kNumberType); Base::WriteUint64(u64); return *this; } + PrettyWriter& Double(double d) { PrettyPrefix(kNumberType); Base::WriteDouble(d); return *this; } + + PrettyWriter& String(const Ch* str, SizeType length, bool copy = false) { + (void)copy; + PrettyPrefix(kStringType); + Base::WriteString(str, length); + return *this; + } + + PrettyWriter& StartObject() { + PrettyPrefix(kObjectType); + new (Base::level_stack_.template Push()) typename Base::Level(false); + Base::WriteStartObject(); + return *this; + } + + PrettyWriter& EndObject(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); + RAPIDJSON_ASSERT(!Base::level_stack_.template Top()->inArray); + bool empty = Base::level_stack_.template Pop(1)->valueCount == 0; + + if (!empty) { + Base::os_.Put('\n'); + WriteIndent(); + } + Base::WriteEndObject(); + if (Base::level_stack_.Empty()) // end of json text + Base::os_.flush(); + return *this; + } + + PrettyWriter& StartArray() { + PrettyPrefix(kArrayType); + new (Base::level_stack_.template Push()) typename Base::Level(true); + Base::WriteStartArray(); + return *this; + } + + PrettyWriter& EndArray(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); + RAPIDJSON_ASSERT(Base::level_stack_.template Top()->inArray); + bool empty = Base::level_stack_.template Pop(1)->valueCount == 0; + + if (!empty) { + Base::os_.Put('\n'); + WriteIndent(); + } + Base::WriteEndArray(); + if (Base::level_stack_.Empty()) // end of json text + Base::os_.flush(); + return *this; + } + + //@} + + //! Simpler but slower overload. + PrettyWriter& String(const Ch* str) { return String(str, internal::StrLen(str)); } + +protected: + void PrettyPrefix(Type type) { + (void)type; + if (Base::level_stack_.GetSize() != 0) { // this value is not at root + typename Base::Level* level = Base::level_stack_.template Top(); + + if (level->inArray) { + if (level->valueCount > 0) { + Base::os_.Put(','); // add comma if it is not the first element in array + Base::os_.Put('\n'); + } + else + Base::os_.Put('\n'); + WriteIndent(); + } + else { // in object + if (level->valueCount > 0) { + if (level->valueCount % 2 == 0) { + Base::os_.Put(','); + Base::os_.Put('\n'); + } + else { + Base::os_.Put(':'); + Base::os_.Put(' '); + } + } + else + Base::os_.Put('\n'); + + if (level->valueCount % 2 == 0) + WriteIndent(); + } + if (!level->inArray && level->valueCount % 2 == 0) + RAPIDJSON_ASSERT(type == kStringType); // if it's in object, then even number should be a name + level->valueCount++; + } + else + RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType); + } + + void WriteIndent() { + size_t count = (Base::level_stack_.GetSize() / sizeof(typename Base::Level)) * indentCharCount_; + PutN(Base::os_, indentChar_, count); + } + + Ch indentChar_; + unsigned indentCharCount_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/rapidjson/rapidjson.h b/Engine/source/persistence/rapidjson/rapidjson.h new file mode 100644 index 0000000000..753396d163 --- /dev/null +++ b/Engine/source/persistence/rapidjson/rapidjson.h @@ -0,0 +1,256 @@ +#ifndef RAPIDJSON_RAPIDJSON_H_ +#define RAPIDJSON_RAPIDJSON_H_ + +// Copyright (c) 2011 Milo Yip (miloyip@gmail.com) +// Version 0.1 + +#include // malloc(), realloc(), free() +#include // memcpy() + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_NO_INT64DEFINE + +// Here defines int64_t and uint64_t types in global namespace. +// If user have their own definition, can define RAPIDJSON_NO_INT64DEFINE to disable this. +#ifndef RAPIDJSON_NO_INT64DEFINE +#ifdef _MSC_VER +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#define RAPIDJSON_FORCEINLINE __forceinline +#else +#include +#define RAPIDJSON_FORCEINLINE +#endif +#endif // RAPIDJSON_NO_INT64TYPEDEF + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ENDIAN +#define RAPIDJSON_LITTLEENDIAN 0 //!< Little endian machine +#define RAPIDJSON_BIGENDIAN 1 //!< Big endian machine + +//! Endianness of the machine. +/*! GCC provided macro for detecting endianness of the target machine. But other + compilers may not have this. User can define RAPIDJSON_ENDIAN to either + RAPIDJSON_LITTLEENDIAN or RAPIDJSON_BIGENDIAN. +*/ +#ifndef RAPIDJSON_ENDIAN +#ifdef __BYTE_ORDER__ +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN +#else +#define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN +#endif // __BYTE_ORDER__ +#else +#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN // Assumes little endian otherwise. +#endif +#endif // RAPIDJSON_ENDIAN + + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ALIGNSIZE + +//! Data alignment of the machine. +/*! + Some machine requires strict data alignment. + Currently the default uses 4 bytes alignment. User can customize this. +*/ +#ifndef RAPIDJSON_ALIGN +#define RAPIDJSON_ALIGN(x) ((x + 3) & ~3) +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_SIMD + +// Enable SSE2 optimization. +//#define RAPIDJSON_SSE2 + +// Enable SSE4.2 optimization. +//#define RAPIDJSON_SSE42 + +#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) +#define RAPIDJSON_SIMD +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_NO_SIZETYPEDEFINE + +#ifndef RAPIDJSON_NO_SIZETYPEDEFINE +namespace rapidjson { +//! Use 32-bit array/string indices even for 64-bit platform, instead of using size_t. +/*! User may override the SizeType by defining RAPIDJSON_NO_SIZETYPEDEFINE. +*/ +typedef unsigned SizeType; +} // namespace rapidjson +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ASSERT + +//! Assertion. +/*! By default, rapidjson uses C assert() for assertion. + User can override it by defining RAPIDJSON_ASSERT(x) macro. +*/ +#ifndef RAPIDJSON_ASSERT +#include +#define RAPIDJSON_ASSERT(x) assert(x) +#endif // RAPIDJSON_ASSERT + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_STATIC_ASSERT + +// Adopt from boost +#ifndef RAPIDJSON_STATIC_ASSERT +namespace rapidjson { +template struct STATIC_ASSERTION_FAILURE; +template <> struct STATIC_ASSERTION_FAILURE { enum { value = 1 }; }; +template struct StaticAssertTest {}; +} // namespace rapidjson + +#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y) +#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y) +#define RAPIDJSON_DO_JOIN2(X, Y) X##Y + +#define RAPIDJSON_STATIC_ASSERT(x) typedef ::rapidjson::StaticAssertTest<\ + sizeof(::rapidjson::STATIC_ASSERTION_FAILURE)>\ + RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) +#endif + +/////////////////////////////////////////////////////////////////////////////// +// Helpers + +#define RAPIDJSON_MULTILINEMACRO_BEGIN do { +#define RAPIDJSON_MULTILINEMACRO_END \ +} while((void)0, 0) + +/////////////////////////////////////////////////////////////////////////////// +// Allocators and Encodings + +#include "allocators.h" +#include "encodings.h" + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// Stream + +/*! \class rapidjson::Stream + \brief Concept for reading and writing characters. + + For read-only stream, no need to implement PutBegin(), Put(), Flush() and PutEnd(). + + For write-only stream, only need to implement Put() and Flush(). + +\code +concept Stream { + typename Ch; //!< Character type of the stream. + + //! Read the current character from stream without moving the read cursor. + Ch Peek() const; + + //! Read the current character from stream and moving the read cursor to next character. + Ch Take(); + + //! Get the current read cursor. + //! \return Number of characters read from start. + size_t Tell(); + + //! Begin writing operation at the current read pointer. + //! \return The begin writer pointer. + Ch* PutBegin(); + + //! Write a character. + void Put(Ch c); + + //! Flush the buffer. + void Flush(); + + //! End the writing operation. + //! \param begin The begin write pointer returned by PutBegin(). + //! \return Number of characters written. + size_t PutEnd(Ch* begin); +} +\endcode +*/ + +//! Put N copies of a character to a stream. +template +inline void PutN(Stream& stream, Ch c, size_t n) { + for (size_t i = 0; i < n; i++) + stream.Put(c); +} + +/////////////////////////////////////////////////////////////////////////////// +// StringStream + +//! Read-only string stream. +/*! \implements Stream +*/ +template +struct GenericStringStream { + typedef typename Encoding::Ch Ch; + + GenericStringStream(const Ch *src) : src_(src), head_(src) {} + + Ch Peek() const { return *src_; } + Ch Take() { return *src_++; } + size_t Tell() const { return src_ - head_; } + + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + + const Ch* src_; //!< Current read position. + const Ch* head_; //!< Original head of the string. +}; + +typedef GenericStringStream > StringStream; + +/////////////////////////////////////////////////////////////////////////////// +// InsituStringStream + +//! A read-write string stream. +/*! This string stream is particularly designed for in-situ parsing. + \implements Stream +*/ +template +struct GenericInsituStringStream { + typedef typename Encoding::Ch Ch; + + GenericInsituStringStream(Ch *src) : src_(src), dst_(0), head_(src) {} + + // Read + Ch Peek() { return *src_; } + Ch Take() { return *src_++; } + size_t Tell() { return src_ - head_; } + + // Write + Ch* PutBegin() { return dst_ = src_; } + void Put(Ch c) { RAPIDJSON_ASSERT(dst_ != 0); *dst_++ = c; } + void Flush() {} + size_t PutEnd(Ch* begin) { return dst_ - begin; } + + Ch* src_; + Ch* dst_; + Ch* head_; +}; + +typedef GenericInsituStringStream > InsituStringStream; + +/////////////////////////////////////////////////////////////////////////////// +// Type + +//! Type of JSON value +enum Type { + kNullType = 0, //!< null + kFalseType = 1, //!< false + kTrueType = 2, //!< true + kObjectType = 3, //!< object + kArrayType = 4, //!< array + kStringType = 5, //!< string + kNumberType = 6, //!< number +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/rapidjson/reader.h b/Engine/source/persistence/rapidjson/reader.h new file mode 100644 index 0000000000..36f6d50c68 --- /dev/null +++ b/Engine/source/persistence/rapidjson/reader.h @@ -0,0 +1,669 @@ +#ifndef RAPIDJSON_READER_H_ +#define RAPIDJSON_READER_H_ + +// Copyright (c) 2011 Milo Yip (miloyip@gmail.com) +// Version 0.1 + +#include "rapidjson.h" +#include "encodings.h" +#include "internal/pow10.h" +#include "internal/stack.h" +#include + +#ifdef RAPIDJSON_SSE42 +#include +#elif defined(RAPIDJSON_SSE2) +#include +#endif + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +#ifndef RAPIDJSON_PARSE_ERROR +#define RAPIDJSON_PARSE_ERROR(msg, offset) \ + RAPIDJSON_MULTILINEMACRO_BEGIN \ + parseError_ = msg; \ + errorOffset_ = offset; \ + longjmp(jmpbuf_, 1); \ + RAPIDJSON_MULTILINEMACRO_END +#endif + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// ParseFlag + +//! Combination of parseFlags +enum ParseFlag { + kParseDefaultFlags = 0, //!< Default parse flags. Non-destructive parsing. Text strings are decoded into allocated buffer. + kParseInsituFlag = 1, //!< In-situ(destructive) parsing. + kParseValidateEncodingFlag = 2, //!< Validate encoding of JSON strings. +}; + +/////////////////////////////////////////////////////////////////////////////// +// Handler + +/*! \class rapidjson::Handler + \brief Concept for receiving events from GenericReader upon parsing. +\code +concept Handler { + typename Ch; + + void Null(); + void Bool(bool b); + void Int(int i); + void Uint(unsigned i); + void Int64(int64_t i); + void Uint64(uint64_t i); + void Double(double d); + void String(const Ch* str, SizeType length, bool copy); + void StartObject(); + void EndObject(SizeType memberCount); + void StartArray(); + void EndArray(SizeType elementCount); +}; +\endcode +*/ +/////////////////////////////////////////////////////////////////////////////// +// BaseReaderHandler + +//! Default implementation of Handler. +/*! This can be used as base class of any reader handler. + \implements Handler +*/ +template > +struct BaseReaderHandler { + typedef typename Encoding::Ch Ch; + + void Default() {} + void Null() { Default(); } + void Bool(bool) { Default(); } + void Int(int) { Default(); } + void Uint(unsigned) { Default(); } + void Int64(int64_t) { Default(); } + void Uint64(uint64_t) { Default(); } + void Double(double) { Default(); } + void String(const Ch*, SizeType, bool) { Default(); } + void StartObject() { Default(); } + void EndObject(SizeType) { Default(); } + void StartArray() { Default(); } + void EndArray(SizeType) { Default(); } +}; + +/////////////////////////////////////////////////////////////////////////////// +// SkipWhitespace + +//! Skip the JSON white spaces in a stream. +/*! \param stream A input stream for skipping white spaces. + \note This function has SSE2/SSE4.2 specialization. +*/ +template +void SkipWhitespace(InputStream& is) { + InputStream s = is; // Use a local copy for optimization + while (s.Peek() == ' ' || s.Peek() == '\n' || s.Peek() == '\r' || s.Peek() == '\t') + s.Take(); + is = s; +} + +#ifdef RAPIDJSON_SSE42 +//! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once. +inline const char *SkipWhitespace_SIMD(const char* p) { + static const char whitespace[16] = " \n\r\t"; + __m128i w = _mm_loadu_si128((const __m128i *)&whitespace[0]); + + for (;;) { + __m128i s = _mm_loadu_si128((const __m128i *)p); + unsigned r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY)); + if (r == 0) // all 16 characters are whitespace + p += 16; + else { // some of characters may be non-whitespace +#ifdef _MSC_VER // Find the index of first non-whitespace + unsigned long offset; + if (_BitScanForward(&offset, r)) + return p + offset; +#else + if (r != 0) + return p + __builtin_ffs(r) - 1; +#endif + } + } +} + +#elif defined(RAPIDJSON_SSE2) + +//! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once. +inline const char *SkipWhitespace_SIMD(const char* p) { + static const char whitespaces[4][17] = { + " ", + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r", + "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"}; + + __m128i w0 = _mm_loadu_si128((const __m128i *)&whitespaces[0][0]); + __m128i w1 = _mm_loadu_si128((const __m128i *)&whitespaces[1][0]); + __m128i w2 = _mm_loadu_si128((const __m128i *)&whitespaces[2][0]); + __m128i w3 = _mm_loadu_si128((const __m128i *)&whitespaces[3][0]); + + for (;;) { + __m128i s = _mm_loadu_si128((const __m128i *)p); + __m128i x = _mm_cmpeq_epi8(s, w0); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1)); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2)); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3)); + unsigned short r = ~_mm_movemask_epi8(x); + if (r == 0) // all 16 characters are whitespace + p += 16; + else { // some of characters may be non-whitespace +#ifdef _MSC_VER // Find the index of first non-whitespace + unsigned long offset; + if (_BitScanForward(&offset, r)) + return p + offset; +#else + if (r != 0) + return p + __builtin_ffs(r) - 1; +#endif + } + } +} + +#endif // RAPIDJSON_SSE2 + +#ifdef RAPIDJSON_SIMD +//! Template function specialization for InsituStringStream +template<> inline void SkipWhitespace(InsituStringStream& is) { + is.src_ = const_cast(SkipWhitespace_SIMD(is.src_)); +} + +//! Template function specialization for StringStream +template<> inline void SkipWhitespace(StringStream& is) { + is.src_ = SkipWhitespace_SIMD(is.src_); +} +#endif // RAPIDJSON_SIMD + +/////////////////////////////////////////////////////////////////////////////// +// GenericReader + +//! SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. +/*! GenericReader parses JSON text from a stream, and send events synchronously to an + object implementing Handler concept. + + It needs to allocate a stack for storing a single decoded string during + non-destructive parsing. + + For in-situ parsing, the decoded string is directly written to the source + text string, no temporary buffer is required. + + A GenericReader object can be reused for parsing multiple JSON text. + + \tparam SourceEncoding Encoding of the input stream. + \tparam TargetEncoding Encoding of the parse output. + \tparam Allocator Allocator type for stack. +*/ +template > +class GenericReader { +public: + typedef typename SourceEncoding::Ch Ch; + + //! Constructor. + /*! \param allocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing) + \param stackCapacity stack capacity in bytes for storing a single decoded string. (Only use for non-destructive parsing) + */ + GenericReader(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {} + + //! Parse JSON text. + /*! \tparam parseFlags Combination of ParseFlag. + \tparam InputStream Type of input stream. + \tparam Handler Type of handler which must implement Handler concept. + \param stream Input stream to be parsed. + \param handler The handler to receive events. + \return Whether the parsing is successful. + */ + template + bool Parse(InputStream& is, Handler& handler) { + parseError_ = 0; + errorOffset_ = 0; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable +#endif + if (setjmp(jmpbuf_)) { +#ifdef _MSC_VER +#pragma warning(pop) +#endif + stack_.Clear(); + return false; + } + + SkipWhitespace(is); + + if (is.Peek() == '\0') + RAPIDJSON_PARSE_ERROR("Text only contains white space(s)", is.Tell()); + else { + switch (is.Peek()) { + case '{': ParseObject(is, handler); break; + case '[': ParseArray(is, handler); break; + default: RAPIDJSON_PARSE_ERROR("Expect either an object or array at root", is.Tell()); + } + SkipWhitespace(is); + + if (is.Peek() != '\0') + RAPIDJSON_PARSE_ERROR("Nothing should follow the root object or array.", is.Tell()); + } + + return true; + } + + bool HasParseError() const { return parseError_ != 0; } + const char* GetParseError() const { return parseError_; } + size_t GetErrorOffset() const { return errorOffset_; } + +private: + // Parse object: { string : value, ... } + template + void ParseObject(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == '{'); + is.Take(); // Skip '{' + handler.StartObject(); + SkipWhitespace(is); + + if (is.Peek() == '}') { + is.Take(); + handler.EndObject(0); // empty object + return; + } + + for (SizeType memberCount = 0;;) { + if (is.Peek() != '"') + RAPIDJSON_PARSE_ERROR("Name of an object member must be a string", is.Tell()); + + ParseString(is, handler); + SkipWhitespace(is); + + if (is.Take() != ':') + RAPIDJSON_PARSE_ERROR("There must be a colon after the name of object member", is.Tell()); + + SkipWhitespace(is); + + ParseValue(is, handler); + SkipWhitespace(is); + + ++memberCount; + + switch(is.Take()) { + case ',': SkipWhitespace(is); break; + case '}': handler.EndObject(memberCount); return; + default: RAPIDJSON_PARSE_ERROR("Must be a comma or '}' after an object member", is.Tell()); + } + } + } + + // Parse array: [ value, ... ] + template + void ParseArray(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == '['); + is.Take(); // Skip '[' + handler.StartArray(); + SkipWhitespace(is); + + if (is.Peek() == ']') { + is.Take(); + handler.EndArray(0); // empty array + return; + } + + for (SizeType elementCount = 0;;) { + ParseValue(is, handler); + ++elementCount; + SkipWhitespace(is); + + switch (is.Take()) { + case ',': SkipWhitespace(is); break; + case ']': handler.EndArray(elementCount); return; + default: RAPIDJSON_PARSE_ERROR("Must be a comma or ']' after an array element.", is.Tell()); + } + } + } + + template + void ParseNull(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 'n'); + is.Take(); + + if (is.Take() == 'u' && is.Take() == 'l' && is.Take() == 'l') + handler.Null(); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1); + } + + template + void ParseTrue(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 't'); + is.Take(); + + if (is.Take() == 'r' && is.Take() == 'u' && is.Take() == 'e') + handler.Bool(true); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell()); + } + + template + void ParseFalse(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 'f'); + is.Take(); + + if (is.Take() == 'a' && is.Take() == 'l' && is.Take() == 's' && is.Take() == 'e') + handler.Bool(false); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1); + } + + // Helper function to parse four hexidecimal digits in \uXXXX in ParseString(). + template + unsigned ParseHex4(InputStream& is) { + InputStream s = is; // Use a local copy for optimization + unsigned codepoint = 0; + for (int i = 0; i < 4; i++) { + Ch c = s.Take(); + codepoint <<= 4; + codepoint += c; + if (c >= '0' && c <= '9') + codepoint -= '0'; + else if (c >= 'A' && c <= 'F') + codepoint -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + codepoint -= 'a' - 10; + else + RAPIDJSON_PARSE_ERROR("Incorrect hex digit after \\u escape", s.Tell() - 1); + } + is = s; // Restore is + return codepoint; + } + + class StackStream { + public: + typedef typename TargetEncoding::Ch Ch; + + StackStream(internal::Stack& stack) : stack_(stack), length_(0) {} + void Put(Ch c) { + *stack_.template Push() = c; + ++length_; + } + internal::Stack& stack_; + SizeType length_; + + private: + // Prohibit assignment for VC C4512 warning + StackStream& operator=(const StackStream&); + }; + + // Parse string and generate String event. Different code paths for kParseInsituFlag. + template + void ParseString(InputStream& is, Handler& handler) { + InputStream s = is; // Local copy for optimization + if (parseFlags & kParseInsituFlag) { + Ch *head = s.PutBegin(); + ParseStringToStream(s, s); + size_t length = s.PutEnd(head) - 1; + RAPIDJSON_ASSERT(length <= 0xFFFFFFFF); + handler.String((typename TargetEncoding::Ch*)head, SizeType(length), false); + } + else { + StackStream stackStream(stack_); + ParseStringToStream(s, stackStream); + handler.String(stack_.template Pop(stackStream.length_), stackStream.length_ - 1, true); + } + is = s; // Restore is + } + + // Parse string to an output is + // This function handles the prefix/suffix double quotes, escaping, and optional encoding validation. + template + RAPIDJSON_FORCEINLINE void ParseStringToStream(InputStream& is, OutputStream& os) { +#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + static const char escape[256] = { + Z16, Z16, 0, 0,'\"', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'/', + Z16, Z16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, + 0, 0,'\b', 0, 0, 0,'\f', 0, 0, 0, 0, 0, 0, 0,'\n', 0, + 0, 0,'\r', 0,'\t', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 + }; +#undef Z16 + + RAPIDJSON_ASSERT(is.Peek() == '\"'); + is.Take(); // Skip '\"' + + for (;;) { + Ch c = is.Peek(); + if (c == '\\') { // Escape + is.Take(); + Ch e = is.Take(); + if ((sizeof(Ch) == 1 || unsigned(e) < 256) && escape[(unsigned char)e]) + os.Put(escape[(unsigned char)e]); + else if (e == 'u') { // Unicode + unsigned codepoint = ParseHex4(is); + if (codepoint >= 0xD800 && codepoint <= 0xDBFF) { + // Handle UTF-16 surrogate pair + if (is.Take() != '\\' || is.Take() != 'u') + RAPIDJSON_PARSE_ERROR("Missing the second \\u in surrogate pair", is.Tell() - 2); + unsigned codepoint2 = ParseHex4(is); + if (codepoint2 < 0xDC00 || codepoint2 > 0xDFFF) + RAPIDJSON_PARSE_ERROR("The second \\u in surrogate pair is invalid", is.Tell() - 2); + codepoint = (((codepoint - 0xD800) << 10) | (codepoint2 - 0xDC00)) + 0x10000; + } + TEncoding::Encode(os, codepoint); + } + else + RAPIDJSON_PARSE_ERROR("Unknown escape character", is.Tell() - 1); + } + else if (c == '"') { // Closing double quote + is.Take(); + os.Put('\0'); // null-terminate the string + return; + } + else if (c == '\0') + RAPIDJSON_PARSE_ERROR("lacks ending quotation before the end of string", is.Tell() - 1); + else if ((unsigned)c < 0x20) // RFC 4627: unescaped = %x20-21 / %x23-5B / %x5D-10FFFF + RAPIDJSON_PARSE_ERROR("Incorrect unescaped character in string", is.Tell() - 1); + else { + if (parseFlags & kParseValidateEncodingFlag ? + !Transcoder::Validate(is, os) : + !Transcoder::Transcode(is, os)) + RAPIDJSON_PARSE_ERROR("Invalid encoding", is.Tell()); + } + } + } + + template + void ParseNumber(InputStream& is, Handler& handler) { + InputStream s = is; // Local copy for optimization + // Parse minus + bool minus = false; + if (s.Peek() == '-') { + minus = true; + s.Take(); + } + + // Parse int: zero / ( digit1-9 *DIGIT ) + unsigned i; + bool try64bit = false; + if (s.Peek() == '0') { + i = 0; + s.Take(); + } + else if (s.Peek() >= '1' && s.Peek() <= '9') { + i = s.Take() - '0'; + + if (minus) + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i >= 214748364) { // 2^31 = 2147483648 + if (i != 214748364 || s.Peek() > '8') { + try64bit = true; + break; + } + } + i = i * 10 + (s.Take() - '0'); + } + else + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i >= 429496729) { // 2^32 - 1 = 4294967295 + if (i != 429496729 || s.Peek() > '5') { + try64bit = true; + break; + } + } + i = i * 10 + (s.Take() - '0'); + } + } + else + RAPIDJSON_PARSE_ERROR("Expect a value here.", is.Tell()); + + // Parse 64bit int + uint64_t i64 = 0; + bool useDouble = false; + if (try64bit) { + i64 = i; + if (minus) + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i64 >= 922337203685477580uLL) // 2^63 = 9223372036854775808 + if (i64 != 922337203685477580uLL || s.Peek() > '8') { + useDouble = true; + break; + } + i64 = i64 * 10 + (s.Take() - '0'); + } + else + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i64 >= 1844674407370955161uLL) // 2^64 - 1 = 18446744073709551615 + if (i64 != 1844674407370955161uLL || s.Peek() > '5') { + useDouble = true; + break; + } + i64 = i64 * 10 + (s.Take() - '0'); + } + } + + // Force double for big integer + double d = 0.0; + if (useDouble) { + d = (double)i64; + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (d >= 1E307) + RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell()); + d = d * 10 + (s.Take() - '0'); + } + } + + // Parse frac = decimal-point 1*DIGIT + int expFrac = 0; + if (s.Peek() == '.') { + if (!useDouble) { + d = try64bit ? (double)i64 : (double)i; + useDouble = true; + } + s.Take(); + + if (s.Peek() >= '0' && s.Peek() <= '9') { + d = d * 10 + (s.Take() - '0'); + --expFrac; + } + else + RAPIDJSON_PARSE_ERROR("At least one digit in fraction part", is.Tell()); + + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (expFrac > -16) { + d = d * 10 + (s.Peek() - '0'); + --expFrac; + } + s.Take(); + } + } + + // Parse exp = e [ minus / plus ] 1*DIGIT + int exp = 0; + if (s.Peek() == 'e' || s.Peek() == 'E') { + if (!useDouble) { + d = try64bit ? (double)i64 : (double)i; + useDouble = true; + } + s.Take(); + + bool expMinus = false; + if (s.Peek() == '+') + s.Take(); + else if (s.Peek() == '-') { + s.Take(); + expMinus = true; + } + + if (s.Peek() >= '0' && s.Peek() <= '9') { + exp = s.Take() - '0'; + while (s.Peek() >= '0' && s.Peek() <= '9') { + exp = exp * 10 + (s.Take() - '0'); + if (exp > 308) + RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell()); + } + } + else + RAPIDJSON_PARSE_ERROR("At least one digit in exponent", s.Tell()); + + if (expMinus) + exp = -exp; + } + + // Finish parsing, call event according to the type of number. + if (useDouble) { + d *= internal::Pow10(exp + expFrac); + handler.Double(minus ? -d : d); + } + else { + if (try64bit) { + if (minus) + handler.Int64(-(int64_t)i64); + else + handler.Uint64(i64); + } + else { + if (minus) + handler.Int(-(int)i); + else + handler.Uint(i); + } + } + + is = s; // restore is + } + + // Parse any JSON value + template + void ParseValue(InputStream& is, Handler& handler) { + switch (is.Peek()) { + case 'n': ParseNull (is, handler); break; + case 't': ParseTrue (is, handler); break; + case 'f': ParseFalse (is, handler); break; + case '"': ParseString(is, handler); break; + case '{': ParseObject(is, handler); break; + case '[': ParseArray (is, handler); break; + default : ParseNumber(is, handler); + } + } + + static const size_t kDefaultStackCapacity = 256; //!< Default stack capacity in bytes for storing a single decoded string. + internal::Stack stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing. + jmp_buf jmpbuf_; //!< setjmp buffer for fast exit from nested parsing function calls. + const char* parseError_; + size_t errorOffset_; +}; // class GenericReader + +//! Reader with UTF8 encoding and default allocator. +typedef GenericReader, UTF8<> > Reader; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_READER_H_ diff --git a/Engine/source/persistence/rapidjson/stringbuffer.h b/Engine/source/persistence/rapidjson/stringbuffer.h new file mode 100644 index 0000000000..74415cbb83 --- /dev/null +++ b/Engine/source/persistence/rapidjson/stringbuffer.h @@ -0,0 +1,50 @@ +#ifndef RAPIDJSON_STRINGBUFFER_H_ +#define RAPIDJSON_STRINGBUFFER_H_ + +#include "rapidjson.h" +#include "internal/stack.h" + +namespace rapidjson { + +//! Represents an in-memory output stream. +/*! + \tparam Encoding Encoding of the stream. + \tparam Allocator type for allocating memory buffer. + \implements Stream +*/ +template +struct GenericStringBuffer { + typedef typename Encoding::Ch Ch; + + GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {} + + void Put(Ch c) { *stack_.template Push() = c; } + void Flush() {} + + void Clear() { stack_.Clear(); } + + const Ch* GetString() const { + // Push and pop a null terminator. This is safe. + *stack_.template Push() = '\0'; + stack_.template Pop(1); + + return stack_.template Bottom(); + } + + size_t GetSize() const { return stack_.GetSize(); } + + static const size_t kDefaultCapacity = 256; + mutable internal::Stack stack_; +}; + +typedef GenericStringBuffer > StringBuffer; + +//! Implement specialized version of PutN() with memset() for better performance. +template<> +inline void PutN(GenericStringBuffer >& stream, char c, size_t n) { + memset(stream.stack_.Push(n), c, n * sizeof(c)); +} + +} // namespace rapidjson + +#endif // RAPIDJSON_STRINGBUFFER_H_ diff --git a/Engine/source/persistence/rapidjson/writer.h b/Engine/source/persistence/rapidjson/writer.h new file mode 100644 index 0000000000..56d5804344 --- /dev/null +++ b/Engine/source/persistence/rapidjson/writer.h @@ -0,0 +1,249 @@ +#ifndef RAPIDJSON_WRITER_H_ +#define RAPIDJSON_WRITER_H_ + +#include "rapidjson.h" +#include "internal/stack.h" +#include "internal/strfunc.h" +#include // snprintf() or _sprintf_s() +#include // placement new + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +namespace rapidjson { + +//! JSON writer +/*! Writer implements the concept Handler. + It generates JSON text by events to an output os. + + User may programmatically calls the functions of a writer to generate JSON text. + + On the other side, a writer can also be passed to objects that generates events, + + for example Reader::Parse() and Document::Accept(). + + \tparam OutputStream Type of output stream. + \tparam SourceEncoding Encoding of both source strings. + \tparam TargetEncoding Encoding of and output stream. + \implements Handler +*/ +template, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> > +class Writer { +public: + typedef typename SourceEncoding::Ch Ch; + + Writer(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = kDefaultLevelDepth) : + os_(os), level_stack_(allocator, levelDepth * sizeof(Level)) {} + + //@name Implementation of Handler + //@{ + Writer& Null() { Prefix(kNullType); WriteNull(); return *this; } + Writer& Bool(bool b) { Prefix(b ? kTrueType : kFalseType); WriteBool(b); return *this; } + Writer& Int(int i) { Prefix(kNumberType); WriteInt(i); return *this; } + Writer& Uint(unsigned u) { Prefix(kNumberType); WriteUint(u); return *this; } + Writer& Int64(int64_t i64) { Prefix(kNumberType); WriteInt64(i64); return *this; } + Writer& Uint64(uint64_t u64) { Prefix(kNumberType); WriteUint64(u64); return *this; } + Writer& Double(double d) { Prefix(kNumberType); WriteDouble(d); return *this; } + + Writer& String(const Ch* str, SizeType length, bool copy = false) { + (void)copy; + Prefix(kStringType); + WriteString(str, length); + return *this; + } + + Writer& StartObject() { + Prefix(kObjectType); + new (level_stack_.template Push()) Level(false); + WriteStartObject(); + return *this; + } + + Writer& EndObject(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); + RAPIDJSON_ASSERT(!level_stack_.template Top()->inArray); + level_stack_.template Pop(1); + WriteEndObject(); + if (level_stack_.Empty()) // end of json text + os_.Flush(); + return *this; + } + + Writer& StartArray() { + Prefix(kArrayType); + new (level_stack_.template Push()) Level(true); + WriteStartArray(); + return *this; + } + + Writer& EndArray(SizeType elementCount = 0) { + (void)elementCount; + RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); + RAPIDJSON_ASSERT(level_stack_.template Top()->inArray); + level_stack_.template Pop(1); + WriteEndArray(); + if (level_stack_.Empty()) // end of json text + os_.Flush(); + return *this; + } + //@} + + //! Simpler but slower overload. + Writer& String(const Ch* str) { return String(str, internal::StrLen(str)); } + +protected: + //! Information for each nested level + struct Level { + Level(bool inArray_) : inArray(inArray_), valueCount(0) {} + bool inArray; //!< true if in array, otherwise in object + size_t valueCount; //!< number of values in this level + }; + + static const size_t kDefaultLevelDepth = 32; + + void WriteNull() { + os_.Put('n'); os_.Put('u'); os_.Put('l'); os_.Put('l'); + } + + void WriteBool(bool b) { + if (b) { + os_.Put('t'); os_.Put('r'); os_.Put('u'); os_.Put('e'); + } + else { + os_.Put('f'); os_.Put('a'); os_.Put('l'); os_.Put('s'); os_.Put('e'); + } + } + + void WriteInt(int i) { + if (i < 0) { + os_.Put('-'); + i = -i; + } + WriteUint((unsigned)i); + } + + void WriteUint(unsigned u) { + char buffer[10]; + char *p = buffer; + do { + *p++ = (u % 10) + '0'; + u /= 10; + } while (u > 0); + + do { + --p; + os_.Put(*p); + } while (p != buffer); + } + + void WriteInt64(int64_t i64) { + if (i64 < 0) { + os_.Put('-'); + i64 = -i64; + } + WriteUint64((uint64_t)i64); + } + + void WriteUint64(uint64_t u64) { + char buffer[20]; + char *p = buffer; + do { + *p++ = char(u64 % 10) + '0'; + u64 /= 10; + } while (u64 > 0); + + do { + --p; + os_.Put(*p); + } while (p != buffer); + } + + //! \todo Optimization with custom double-to-string converter. + void WriteDouble(double d) { + char buffer[100]; +#if _MSC_VER + int ret = sprintf_s(buffer, sizeof(buffer), "%g", d); +#else + int ret = snprintf(buffer, sizeof(buffer), "%g", d); +#endif + RAPIDJSON_ASSERT(ret >= 1); + for (int i = 0; i < ret; i++) + os_.Put(buffer[i]); + } + + void WriteString(const Ch* str, SizeType length) { + static const char hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + static const char escape[256] = { +#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + //0 1 2 3 4 5 6 7 8 9 A B C D E F + 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'b', 't', 'n', 'u', 'f', 'r', 'u', 'u', // 00 + 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', // 10 + 0, 0, '"', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20 + Z16, Z16, // 30~4F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, // 50 + Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 // 60~FF +#undef Z16 + }; + + os_.Put('\"'); + GenericStringStream is(str); + while (is.Tell() < length) { + const Ch c = is.Peek(); + if ((sizeof(Ch) == 1 || (unsigned)c < 256) && escape[(unsigned char)c]) { + is.Take(); + os_.Put('\\'); + os_.Put(escape[(unsigned char)c]); + if (escape[(unsigned char)c] == 'u') { + os_.Put('0'); + os_.Put('0'); + os_.Put(hexDigits[(unsigned char)c >> 4]); + os_.Put(hexDigits[(unsigned char)c & 0xF]); + } + } + else + Transcoder::Transcode(is, os_); + } + os_.Put('\"'); + } + + void WriteStartObject() { os_.Put('{'); } + void WriteEndObject() { os_.Put('}'); } + void WriteStartArray() { os_.Put('['); } + void WriteEndArray() { os_.Put(']'); } + + void Prefix(Type type) { + (void)type; + if (level_stack_.GetSize() != 0) { // this value is not at root + Level* level = level_stack_.template Top(); + if (level->valueCount > 0) { + if (level->inArray) + os_.Put(','); // add comma if it is not the first element in array + else // in object + os_.Put((level->valueCount % 2 == 0) ? ',' : ':'); + } + if (!level->inArray && level->valueCount % 2 == 0) + RAPIDJSON_ASSERT(type == kStringType); // if it's in object, then even number should be a name + level->valueCount++; + } + else + RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType); + } + + OutputStream& os_; + internal::Stack level_stack_; + +private: + // Prohibit assignment for VC C4512 warning + Writer& operator=(const Writer& w); +}; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp b/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp new file mode 100644 index 0000000000..f703bbb7f4 --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp @@ -0,0 +1,429 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "persistence/taml/binary/tamlBinaryReader.h" + +#ifndef _ZIPSUBSTREAM_H_ +#include "core/util/zip/zipSubStream.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +SimObject* TamlBinaryReader::read( FileStream& stream ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_Read); + + // Read Taml signature. + StringTableEntry tamlSignature = stream.readSTString(); + + // Is the signature correct? + if ( tamlSignature != StringTable->insert( TAML_SIGNATURE ) ) + { + // Warn. + Con::warnf("Taml: Cannot read binary file as signature is incorrect '%s'.", tamlSignature ); + return NULL; + } + + // Read version Id. + U32 versionId; + stream.read( &versionId ); + + // Read compressed flag. + bool compressed; + stream.read( &compressed ); + + SimObject* pSimObject = NULL; + + // Is the stream compressed? + if ( compressed ) + { + // Yes, so attach zip stream. + ZipSubRStream zipStream; + zipStream.attachStream( &stream ); + + // Parse element. + pSimObject = parseElement( zipStream, versionId ); + + // Detach zip stream. + zipStream.detachStream(); + } + else + { + // No, so parse element. + pSimObject = parseElement( stream, versionId ); + } + + return pSimObject; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::resetParse( void ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ResetParse); + + // Clear object reference map. + mObjectReferenceMap.clear(); +} + +//----------------------------------------------------------------------------- + +SimObject* TamlBinaryReader::parseElement( Stream& stream, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseElement); + + SimObject* pSimObject = NULL; + +#ifdef TORQUE_DEBUG + // Format the type location. + char typeLocationBuffer[64]; + dSprintf( typeLocationBuffer, sizeof(typeLocationBuffer), "Taml [format='binary' offset=%u]", stream.getPosition() ); +#endif + + // Fetch element name. + StringTableEntry typeName = stream.readSTString(); + + // Fetch object name. + StringTableEntry objectName = stream.readSTString(); + + // Read references. + U32 tamlRefId; + U32 tamlRefToId; + stream.read( &tamlRefId ); + stream.read( &tamlRefToId ); + + // Do we have a reference to Id? + if ( tamlRefToId != 0 ) + { + // Yes, so fetch reference. + typeObjectReferenceHash::Iterator referenceItr = mObjectReferenceMap.find( tamlRefToId ); + + // Did we find the reference? + if ( referenceItr == mObjectReferenceMap.end() ) + { + // No, so warn. + Con::warnf( "Taml: Could not find a reference Id of '%d'", tamlRefToId ); + return NULL; + } + + // Return object. + return referenceItr->value; + } + +#ifdef TORQUE_DEBUG + // Create type. + pSimObject = Taml::createType( typeName, mpTaml, typeLocationBuffer ); +#else + // Create type. + pSimObject = Taml::createType( typeName, mpTaml ); +#endif + + // Finish if we couldn't create the type. + if ( pSimObject == NULL ) + return NULL; + + // Find Taml callbacks. + TamlCallbacks* pCallbacks = dynamic_cast( pSimObject ); + + // Are there any Taml callbacks? + if ( pCallbacks != NULL ) + { + // Yes, so call it. + mpTaml->tamlPreRead( pCallbacks ); + } + + // Parse attributes. + parseAttributes( stream, pSimObject, versionId ); + + // Does the object require a name? + if ( objectName == StringTable->EmptyString() ) + { + // No, so just register anonymously. + pSimObject->registerObject(); + } + else + { + // Yes, so register a named object. + pSimObject->registerObject( objectName ); + + // Was the name assigned? + if ( pSimObject->getName() != objectName ) + { + // No, so warn that the name was rejected. +#ifdef TORQUE_DEBUG + Con::warnf( "Taml::parseElement() - Registered an instance of type '%s' but a request to name it '%s' was rejected. This is typically because an object of that name already exists. '%s'", typeName, objectName, typeLocationBuffer ); +#else + Con::warnf( "Taml::parseElement() - Registered an instance of type '%s' but a request to name it '%s' was rejected. This is typically because an object of that name already exists.", typeName, objectName ); +#endif + } + } + + // Do we have a reference Id? + if ( tamlRefId != 0 ) + { + // Yes, so insert reference. + mObjectReferenceMap.insertUnique( tamlRefId, pSimObject ); + } + + // Parse custom elements. + TamlCustomNodes customProperties; + + // Parse children. + parseChildren( stream, pCallbacks, pSimObject, versionId ); + + // Parse custom elements. + parseCustomElements( stream, pCallbacks, customProperties, versionId ); + + // Are there any Taml callbacks? + if ( pCallbacks != NULL ) + { + // Yes, so call it. + mpTaml->tamlPostRead( pCallbacks, customProperties ); + } + + // Return object. + return pSimObject; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseAttributes( Stream& stream, SimObject* pSimObject, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseAttributes); + + // Sanity! + AssertFatal( pSimObject != NULL, "Taml: Cannot parse attributes on a NULL object." ); + + // Fetch attribute count. + U32 attributeCount; + stream.read( &attributeCount ); + + // Finish if no attributes. + if ( attributeCount == 0 ) + return; + + char valueBuffer[4096]; + + // Iterate attributes. + for ( U32 index = 0; index < attributeCount; ++index ) + { + // Fetch attribute. + StringTableEntry attributeName = stream.readSTString(); + stream.readLongString( 4096, valueBuffer ); + + // We can assume this is a field for now. + pSimObject->setPrefixedDataField(attributeName, NULL, valueBuffer); + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseChildren( Stream& stream, TamlCallbacks* pCallbacks, SimObject* pSimObject, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseChildren); + + // Sanity! + AssertFatal( pSimObject != NULL, "Taml: Cannot parse children on a NULL object." ); + + // Fetch children count. + U32 childrenCount; + stream.read( &childrenCount ); + + // Finish if no children. + if ( childrenCount == 0 ) + return; + + // Fetch the Taml children. + TamlChildren* pChildren = dynamic_cast( pSimObject ); + + // Is this a sim set? + if ( pChildren == NULL ) + { + // No, so warn. + Con::warnf("Taml: Child element found under parent but object cannot have children." ); + return; + } + + // Fetch any container child class specifier. + AbstractClassRep* pContainerChildClass = pSimObject->getClassRep()->getContainerChildClass( true ); + + // Iterate children. + for ( U32 index = 0; index < childrenCount; ++ index ) + { + // Parse child element. + SimObject* pChildSimObject = parseElement( stream, versionId ); + + // Finish if child failed. + if ( pChildSimObject == NULL ) + return; + + // Do we have a container child class? + if ( pContainerChildClass != NULL ) + { + // Yes, so is the child object the correctly derived type? + if ( !pChildSimObject->getClassRep()->isClass( pContainerChildClass ) ) + { + // No, so warn. + Con::warnf("Taml: Child element '%s' found under parent '%s' but object is restricted to children of type '%s'.", + pChildSimObject->getClassName(), + pSimObject->getClassName(), + pContainerChildClass->getClassName() ); + + // NOTE: We can't delete the object as it may be referenced elsewhere! + pChildSimObject = NULL; + + // Skip. + continue; + } + } + + // Add child. + pChildren->addTamlChild( pChildSimObject ); + + // Find Taml callbacks for child. + TamlCallbacks* pChildCallbacks = dynamic_cast( pChildSimObject ); + + // Do we have callbacks on the child? + if ( pChildCallbacks != NULL ) + { + // Yes, so perform callback. + mpTaml->tamlAddParent( pChildCallbacks, pSimObject ); + } + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseCustomElements( Stream& stream, TamlCallbacks* pCallbacks, TamlCustomNodes& customNodes, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseCustomElement); + + // Read custom node count. + U32 customNodeCount; + stream.read( &customNodeCount ); + + // Finish if no custom nodes. + if ( customNodeCount == 0 ) + return; + + // Iterate custom nodes. + for ( U32 nodeIndex = 0; nodeIndex < customNodeCount; ++nodeIndex ) + { + //Read custom node name. + StringTableEntry nodeName = stream.readSTString(); + + // Add custom node. + TamlCustomNode* pCustomNode = customNodes.addNode( nodeName ); + + // Parse the custom node. + parseCustomNode( stream, pCustomNode, versionId ); + } + + // Do we have callbacks? + if ( pCallbacks == NULL ) + { + // No, so warn. + Con::warnf( "Taml: Encountered custom data but object does not support custom data." ); + return; + } + + // Custom read callback. + mpTaml->tamlCustomRead( pCallbacks, customNodes ); +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseCustomNode( Stream& stream, TamlCustomNode* pCustomNode, const U32 versionId ) +{ + // Fetch if a proxy object. + bool isProxyObject; + stream.read( &isProxyObject ); + + // Is this a proxy object? + if ( isProxyObject ) + { + // Yes, so parse proxy object. + SimObject* pProxyObject = parseElement( stream, versionId ); + + // Add child node. + pCustomNode->addNode( pProxyObject ); + + return; + } + + // No, so read custom node name. + StringTableEntry nodeName = stream.readSTString(); + + // Add child node. + TamlCustomNode* pChildNode = pCustomNode->addNode( nodeName ); + + // Read child node text. + char childNodeTextBuffer[MAX_TAML_NODE_FIELDVALUE_LENGTH]; + stream.readLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, childNodeTextBuffer ); + pChildNode->setNodeText( childNodeTextBuffer ); + + // Read child node count. + U32 childNodeCount; + stream.read( &childNodeCount ); + + // Do we have any children nodes? + if ( childNodeCount > 0 ) + { + // Yes, so parse children nodes. + for( U32 childIndex = 0; childIndex < childNodeCount; ++childIndex ) + { + // Parse child node. + parseCustomNode( stream, pChildNode, versionId ); + } + } + + // Read child field count. + U32 childFieldCount; + stream.read( &childFieldCount ); + + // Do we have any child fields? + if ( childFieldCount > 0 ) + { + // Yes, so parse child fields. + for( U32 childFieldIndex = 0; childFieldIndex < childFieldCount; ++childFieldIndex ) + { + // Read field name. + StringTableEntry fieldName = stream.readSTString(); + + // Read field value. + char valueBuffer[MAX_TAML_NODE_FIELDVALUE_LENGTH]; + stream.readLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, valueBuffer ); + + // Add field. + pChildNode->addField( fieldName, valueBuffer ); + } + } +} \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryReader.h b/Engine/source/persistence/taml/binary/tamlBinaryReader.h new file mode 100644 index 0000000000..d6436e5da9 --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryReader.h @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_BINARYREADER_H_ +#define _TAML_BINARYREADER_H_ + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup tamlGroup +/// @see tamlGroup +class TamlBinaryReader +{ +public: + TamlBinaryReader( Taml* pTaml ) : + mpTaml( pTaml ) + { + } + + virtual ~TamlBinaryReader() {} + + /// Read. + SimObject* read( FileStream& stream ); + +private: + Taml* mpTaml; + + typedef HashTable typeObjectReferenceHash; + + typeObjectReferenceHash mObjectReferenceMap; + +private: + void resetParse( void ); + + SimObject* parseElement( Stream& stream, const U32 versionId ); + void parseAttributes( Stream& stream, SimObject* pSimObject, const U32 versionId ); + void parseChildren( Stream& stream, TamlCallbacks* pCallbacks, SimObject* pSimObject, const U32 versionId ); + void parseCustomElements( Stream& stream, TamlCallbacks* pCallbacks, TamlCustomNodes& customNodes, const U32 versionId ); + void parseCustomNode( Stream& stream, TamlCustomNode* pCustomNode, const U32 versionId ); +}; + +#endif // _TAML_BINARYREADER_H_ \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp b/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp new file mode 100644 index 0000000000..18c986822a --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp @@ -0,0 +1,297 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "persistence/taml/binary/tamlBinaryWriter.h" + +#ifndef _ZIPSUBSTREAM_H_ +#include "core/util/zip/zipSubStream.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +bool TamlBinaryWriter::write( FileStream& stream, const TamlWriteNode* pTamlWriteNode, const bool compressed ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_Write); + + // Write Taml signature. + stream.writeString( StringTable->insert( TAML_SIGNATURE ) ); + + // Write version Id. + stream.write( mVersionId ); + + // Write compressed flag. + stream.write( compressed ); + + // Are we compressed? + if ( compressed ) + { + // yes, so attach zip stream. + ZipSubWStream zipStream; + zipStream.attachStream( &stream ); + + // Write element. + writeElement( zipStream, pTamlWriteNode ); + + // Detach zip stream. + zipStream.detachStream(); + } + else + { + // No, so write element. + writeElement( stream, pTamlWriteNode ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeElement( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteElement); + + // Fetch object. + SimObject* pSimObject = pTamlWriteNode->mpSimObject; + + // Fetch element name. + const char* pElementName = pSimObject->getClassName(); + + // Write element name. + stream.writeString( pElementName ); + + // Fetch object name. + const char* pObjectName = pTamlWriteNode->mpObjectName; + + // Write object name. + stream.writeString( pObjectName != NULL ? pObjectName : StringTable->EmptyString() ); + + // Fetch reference Id. + const U32 tamlRefId = pTamlWriteNode->mRefId; + + // Write reference Id. + stream.write( tamlRefId ); + + // Do we have a reference to node? + if ( pTamlWriteNode->mRefToNode != NULL ) + { + // Yes, so fetch reference to Id. + const U32 tamlRefToId = pTamlWriteNode->mRefToNode->mRefId; + + // Sanity! + AssertFatal( tamlRefToId != 0, "Taml: Invalid reference to Id." ); + + // Write reference to Id. + stream.write( tamlRefToId ); + + // Finished. + return; + } + + // No, so write no reference to Id. + stream.write( 0 ); + + // Write attributes. + writeAttributes( stream, pTamlWriteNode ); + + // Write children. + writeChildren( stream, pTamlWriteNode ); + + // Write custom elements. + writeCustomElements( stream, pTamlWriteNode ); +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeAttributes( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteAttributes); + + // Fetch fields. + const Vector& fields = pTamlWriteNode->mFields; + + // Write placeholder attribute count. + stream.write( (U32)fields.size() ); + + // Finish if no fields. + if ( fields.size() == 0 ) + return; + + // Iterate fields. + for( Vector::const_iterator itr = fields.begin(); itr != fields.end(); ++itr ) + { + // Fetch field/value pair. + TamlWriteNode::FieldValuePair* pFieldValue = (*itr); + + // Write attribute. + stream.writeString( pFieldValue->mName ); + stream.writeLongString( 4096, pFieldValue->mpValue ); + } +} + +void TamlBinaryWriter::writeChildren( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteChildren); + + // Fetch children. + Vector* pChildren = pTamlWriteNode->mChildren; + + // Do we have any children? + if ( pChildren == NULL ) + { + // No, so write no children. + stream.write( (U32)0 ); + return; + } + + // Write children count. + stream.write( (U32)pChildren->size() ); + + // Iterate children. + for( Vector::iterator itr = pChildren->begin(); itr != pChildren->end(); ++itr ) + { + // Write child. + writeElement( stream, (*itr) ); + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeCustomElements( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteCustomElements); + + // Fetch custom nodes. + const TamlCustomNodes& customNodes = pTamlWriteNode->mCustomNodes; + + // Fetch custom nodes. + const TamlCustomNodeVector& nodes = customNodes.getNodes(); + + // Write custom node count. + stream.write( (U32)nodes.size() ); + + // Finish if there are no nodes. + if ( nodes.size() == 0 ) + return; + + // Iterate custom nodes. + for( TamlCustomNodeVector::const_iterator customNodesItr = nodes.begin(); customNodesItr != nodes.end(); ++customNodesItr ) + { + // Fetch the custom node. + TamlCustomNode* pCustomNode = *customNodesItr; + + // Write custom node name. + stream.writeString( pCustomNode->getNodeName() ); + + // Fetch node children. + const TamlCustomNodeVector& nodeChildren = pCustomNode->getChildren(); + + // Iterate children nodes. + for( TamlCustomNodeVector::const_iterator childNodeItr = nodeChildren.begin(); childNodeItr != nodeChildren.end(); ++childNodeItr ) + { + // Fetch child node. + const TamlCustomNode* pChildNode = *childNodeItr; + + // Write the custom node. + writeCustomNode( stream, pChildNode ); + } + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeCustomNode( Stream& stream, const TamlCustomNode* pCustomNode ) +{ + // Is the node a proxy object? + if ( pCustomNode->isProxyObject() ) + { + // Yes, so flag as proxy object. + stream.write( true ); + + // Write the element. + writeElement( stream, pCustomNode->getProxyWriteNode() ); + return; + } + + // No, so flag as custom node. + stream.write( false ); + + // Write custom node name. + stream.writeString( pCustomNode->getNodeName() ); + + // Write custom node text. + stream.writeLongString(MAX_TAML_NODE_FIELDVALUE_LENGTH, pCustomNode->getNodeTextField().getFieldValue()); + + // Fetch node children. + const TamlCustomNodeVector& nodeChildren = pCustomNode->getChildren(); + + // Fetch child node count. + const U32 childNodeCount = (U32)nodeChildren.size(); + + // Write custom node count. + stream.write( childNodeCount ); + + // Do we have any children nodes. + if ( childNodeCount > 0 ) + { + // Yes, so iterate children nodes. + for( TamlCustomNodeVector::const_iterator childNodeItr = nodeChildren.begin(); childNodeItr != nodeChildren.end(); ++childNodeItr ) + { + // Fetch child node. + const TamlCustomNode* pChildNode = *childNodeItr; + + // Write the custom node. + writeCustomNode( stream, pChildNode ); + } + } + + // Fetch fields. + const TamlCustomFieldVector& fields = pCustomNode->getFields(); + + // Fetch child field count. + const U32 childFieldCount = (U32)fields.size(); + + // Write custom field count. + stream.write( childFieldCount ); + + // Do we have any child fields? + if ( childFieldCount > 0 ) + { + // Yes, so iterate fields. + for ( TamlCustomFieldVector::const_iterator fieldItr = fields.begin(); fieldItr != fields.end(); ++fieldItr ) + { + // Fetch node field. + const TamlCustomField* pField = *fieldItr; + + // Write the node field. + stream.writeString( pField->getFieldName() ); + stream.writeLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, pField->getFieldValue() ); + } + } +} \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryWriter.h b/Engine/source/persistence/taml/binary/tamlBinaryWriter.h new file mode 100644 index 0000000000..78fe0d4f1f --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryWriter.h @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_BINARYWRITER_H_ +#define _TAML_BINARYWRITER_H_ + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup tamlGroup +/// @see tamlGroup +class TamlBinaryWriter +{ +public: + TamlBinaryWriter( Taml* pTaml ) : + mpTaml( pTaml ), + mVersionId(2) + { + } + virtual ~TamlBinaryWriter() {} + + /// Write. + bool write( FileStream& stream, const TamlWriteNode* pTamlWriteNode, const bool compressed ); + +private: + Taml* mpTaml; + const U32 mVersionId; + +private: + void writeElement( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeAttributes( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeChildren( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeCustomElements( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeCustomNode( Stream& stream, const TamlCustomNode* pCustomNode ); +}; + +#endif // _TAML_BINARYWRITER_H_ \ No newline at end of file diff --git a/Engine/source/persistence/taml/fsTinyXml.cpp b/Engine/source/persistence/taml/fsTinyXml.cpp new file mode 100644 index 0000000000..4411697425 --- /dev/null +++ b/Engine/source/persistence/taml/fsTinyXml.cpp @@ -0,0 +1,747 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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 "fsTinyXml.h" +#include "console/console.h" + +bool fsTiXmlDocument::LoadFile( const char * pFilename, TiXmlEncoding encoding ) +{ + // Expand the file-path. + char filenameBuffer[1024]; + Con::expandToolScriptFilename( filenameBuffer, sizeof(filenameBuffer), pFilename ); + + FileStream stream; + +#ifdef TORQUE_OS_ANDROID + if (strlen(pFilename) > strlen(filenameBuffer)) { + strcpy(filenameBuffer, pFilename); + } +#endif + + // File open for read? + if ( !stream.open( filenameBuffer, Torque::FS::File::Read ) ) + { + // No, so warn. + Con::warnf("TamlXmlParser::parse() - Could not open filename '%s' for parse.", filenameBuffer ); + return false; + } + + // Load document from stream. + if ( !LoadFile( stream ) ) + { + // Warn! + Con::warnf("TamlXmlParser: Could not load Taml XML file from stream."); + return false; + } + + // Close the stream. + stream.close(); + return true; +} + +bool fsTiXmlDocument::SaveFile( const char * pFilename ) const +{ + // Expand the file-name into the file-path buffer. + char filenameBuffer[1024]; + Con::expandToolScriptFilename( filenameBuffer, sizeof(filenameBuffer), pFilename ); + + FileStream stream; + + // File opened? + if ( !stream.open( filenameBuffer, Torque::FS::File::Write ) ) + { + // No, so warn. + Con::warnf("Taml::writeFile() - Could not open filename '%s' for write.", filenameBuffer ); + return false; + } + + bool ret = SaveFile(stream); + + stream.close(); + return ret; +} + +bool fsTiXmlDocument::LoadFile( FileStream &stream, TiXmlEncoding encoding ) +{ + // Delete the existing data: + Clear(); + //TODO: Can't clear location, investigate if this gives issues. + //doc.location.Clear(); + + // Get the file size, so we can pre-allocate the string. HUGE speed impact. + long length = stream.getStreamSize(); + + // Strange case, but good to handle up front. + if ( length <= 0 ) + { + SetError( TiXmlDocument::TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Subtle bug here. TinyXml did use fgets. But from the XML spec: + // 2.11 End-of-Line Handling + // + // + // ...the XML processor MUST behave as if it normalized all line breaks in external + // parsed entities (including the document entity) on input, before parsing, by translating + // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to + // a single #xA character. + // + // + // It is not clear fgets does that, and certainly isn't clear it works cross platform. + // Generally, you expect fgets to translate from the convention of the OS to the c/unix + // convention, and not work generally. + + /* + while( fgets( buf, sizeof(buf), file ) ) + { + data += buf; + } + */ + + char* buf = new char[ length+1 ]; + buf[0] = 0; + + if ( !stream.read( length, buf ) ) { + delete [] buf; + SetError( TiXmlDocument::TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Process the buffer in place to normalize new lines. (See comment above.) + // Copies from the 'p' to 'q' pointer, where p can advance faster if + // a newline-carriage return is hit. + // + // Wikipedia: + // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or + // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... + // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others + // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS + // * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 + + const char* p = buf; // the read head + char* q = buf; // the write head + const char CR = 0x0d; + const char LF = 0x0a; + + buf[length] = 0; + while( *p ) { + assert( p < (buf+length) ); + assert( q <= (buf+length) ); + assert( q <= p ); + + if ( *p == CR ) { + *q++ = LF; + p++; + if ( *p == LF ) { // check for CR+LF (and skip LF) + p++; + } + } + else { + *q++ = *p++; + } + } + assert( q <= (buf+length) ); + *q = 0; + + Parse( buf, 0, encoding ); + + delete [] buf; + return !Error(); +} + +bool fsTiXmlDocument::SaveFile( FileStream &stream ) const +{ + if ( useMicrosoftBOM ) + { + const unsigned char TIXML_UTF_LEAD_0 = 0xefU; + const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; + const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + + stream.write( TIXML_UTF_LEAD_0 ); + stream.write( TIXML_UTF_LEAD_1 ); + stream.write( TIXML_UTF_LEAD_2 ); + } + Print( stream, 0 ); + return true; +} + +void fsTiXmlDocument::Print( FileStream& stream, int depth ) const +{ + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + //AttemptPrintTiNode(const_cast(node), stream, depth); + dynamic_cast(node)->Print( stream, depth ); + stream.writeText( "\n" ); + } +} + +void fsTiXmlAttribute::Print( FileStream& stream, int depth, TIXML_STRING* str ) const +{ + TIXML_STRING n, v; + + TiXmlString value = TiXmlString(Value()); + + EncodeString( NameTStr(), &n ); + EncodeString( value, &v ); + + for ( int i=0; i< depth; i++ ) { + stream.writeText( " " ); + } + + if (value.find ('\"') == TIXML_STRING::npos) { + const char* pValue = v.c_str(); + char buffer[4096]; + const S32 length = dSprintf(buffer, sizeof(buffer), "%s=\"%s\"", n.c_str(), pValue); + stream.write(length, buffer); + if ( str ) { + (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; + } + } + else { + char buffer[4096]; + const S32 length = dSprintf(buffer, sizeof(buffer), "%s='%s'", n.c_str(), v.c_str()); + stream.write(length, buffer); + if ( str ) { + (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; + } + } +} + +void fsTiXmlDeclaration::Print(FileStream& stream, int depth, TiXmlString* str) const +{ + stream.writeStringBuffer( "" ); + if ( str ) (*str) += "?>"; +} + +void fsTiXmlElement::Print(FileStream& stream, int depth) const +{ + int i; + for ( i=0; iNext() ) + { + stream.writeStringBuffer( "\n" ); + dynamic_cast(attrib)->Print( stream, depth+1 ); + } + + // There are 3 different formatting approaches: + // 1) An element without children is printed as a node + // 2) An element with only a text child is printed as text + // 3) An element with children is printed on multiple lines. + TiXmlNode* node; + if ( !firstChild ) + { + stream.writeStringBuffer( " />" ); + } + else if ( firstChild == lastChild && firstChild->ToText() ) + { + stream.writeStringBuffer( ">" ); + dynamic_cast(firstChild)->Print( stream, depth + 1 ); + stream.writeFormattedBuffer( "", value.c_str() ); + } + else + { + stream.writeStringBuffer( ">" ); + + for ( node = firstChild; node; node=node->NextSibling() ) + { + if ( !node->ToText() ) + { + stream.writeStringBuffer( "\n" ); + } + dynamic_cast(node)->Print( stream, depth+1 ); + } + stream.writeStringBuffer( "\n" ); + for( i=0; i", value.c_str() ); + } +} + +void fsTiXmlComment::Print(FileStream& stream, int depth) const +{ + for ( int i=0; i", value.c_str() ); +} + +void fsTiXmlText::Print(FileStream& stream, int depth) const +{ + if ( cdata ) + { + int i; + stream.writeStringBuffer( "\n" ); + for ( i=0; i\n", value.c_str() ); // unformatted output + } + else + { + TIXML_STRING buffer; + EncodeString( value, &buffer ); + stream.writeFormattedBuffer( "%s", buffer.c_str() ); + } +} + +void fsTiXmlUnknown::Print(FileStream& stream, int depth) const +{ + for ( int i=0; i", value.c_str() ); +} + +static TiXmlNode* TiNodeIdentify( TiXmlNode* parent, const char* p, TiXmlEncoding encoding ) +{ + TiXmlNode* returnNode = 0; + + p = TiXmlNode::SkipWhiteSpace( p, encoding ); + if( !p || !*p || *p != '<' ) + { + return 0; + } + + p = TiXmlNode::SkipWhiteSpace( p, encoding ); + + if ( !p || !*p ) + { + return 0; + } + + // What is this thing? + // - Elements start with a letter or underscore, but xml is reserved. + // - Comments: vert; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); + %vp=%this-->hor; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); +} \ No newline at end of file diff --git a/Templates/Empty/game/core/scripts/client/postFx/hdr.cs b/Templates/Empty/game/core/scripts/client/postFx/hdr.cs index a5c450799a..6c8e870d0e 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/hdr.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/hdr.cs @@ -172,6 +172,8 @@ singleton ShaderData( HDR_CombineShader ) samplerNames[2] = "$bloomTex"; samplerNames[3] = "$colorCorrectionTex"; + samplerNames[4] = "prepassTex"; + pixVersion = 3.0; }; @@ -253,8 +255,10 @@ singleton GFXStateBlockData( HDRStateBlock ) %combinePass.setShaderConst( "$g_fEnableBlueShift", $HDRPostFX::enableBlueShift ); %combinePass.setShaderConst( "$g_fBlueShiftColor", $HDRPostFX::blueShiftColor ); - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %combinePass.setShaderConst( "$g_fOneOverGamma", 1 / %clampedGamma ); + %combinePass.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %combinePass.setShaderConst( "$Contrast", $pref::Video::Contrast ); %whiteCutoff = ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ) * ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ); @@ -329,7 +333,7 @@ singleton GFXStateBlockData( HDRStateBlock ) singleton PostEffect( HDRPostFX ) { isEnabled = false; - allowReflectPass = false; + allowReflectPass = true; // Resolve the HDR before we render any editor stuff // and before we resolve the scene to the backbuffer. @@ -355,6 +359,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownScale4x4Shader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -365,6 +370,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomH"; shader = HDR_BloomGaussBlurHShader; @@ -376,6 +382,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomV"; shader = HDR_BloomGaussBlurVShader; @@ -390,6 +397,7 @@ singleton PostEffect( HDRPostFX ) // Now calculate the adapted luminance. new PostEffect() { + allowReflectPass = true; internalName = "adaptLum"; shader = HDR_SampleLumShader; @@ -401,6 +409,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -411,6 +420,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -421,6 +431,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -434,6 +445,7 @@ singleton PostEffect( HDRPostFX ) // one... PostEffect takes care to manage that. new PostEffect() { + allowReflectPass = true; internalName = "finalLum"; shader = HDR_CalcAdaptedLumShader; stateBlock = HDR_DownSampleStateBlock; @@ -450,6 +462,7 @@ singleton PostEffect( HDRPostFX ) // version of the scene. new PostEffect() { + allowReflectPass = true; internalName = "combinePass"; shader = HDR_CombineShader; @@ -458,6 +471,7 @@ singleton PostEffect( HDRPostFX ) texture[1] = "#adaptedLum"; texture[2] = "#bloomFinal"; texture[3] = $HDRPostFX::colorCorrectionRamp; + texture[4] = "#prepass"; target = "$backBuffer"; }; }; diff --git a/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs b/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs index d30d2314ba..77d664f416 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs @@ -70,6 +70,7 @@ postVerbose("% - PostFX Manager - PostFX disabled"); } + VolFogGlowPostFx.disable(); } function PostFXManager::settingsEffectSetEnabled(%this, %sName, %bEnable) diff --git a/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs index c2309f8086..dd8c0e2dc1 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs @@ -47,7 +47,7 @@ singleton PostEffect( TurbulenceFx ) isEnabled = false; allowReflectPass = true; - renderTime = "PFXAfterBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "GlowBin"; renderPriority = 0.5; // Render after the glows themselves diff --git a/Templates/Empty/game/core/scripts/client/recordings.cs b/Templates/Empty/game/core/scripts/client/recordings.cs index 14f1a45d3b..5609f0337a 100644 --- a/Templates/Empty/game/core/scripts/client/recordings.cs +++ b/Templates/Empty/game/core/scripts/client/recordings.cs @@ -134,3 +134,19 @@ function demoPlaybackComplete() Canvas.pushDialog(RecordingsDlg); } + +function deleteDemoRecord() +{ + %sel = RecordingsDlgList.getSelectedId(); + %rowText = RecordingsDlgList.getRowTextById(%sel); + %file = $currentMod @ "/recordings/" @ getField(%rowText, 0) @ ".rec"; + + if(!isfile(%file)) + { + RecordingsDlgList.removeRowById(%sel); + return; + } + + RecordingsDlgList.removeRowById(%sel); + fileDelete(%file); +} diff --git a/Templates/Empty/game/core/scripts/client/renderManager.cs b/Templates/Empty/game/core/scripts/client/renderManager.cs index dcd1628fe4..f746c45278 100644 --- a/Templates/Empty/game/core/scripts/client/renderManager.cs +++ b/Templates/Empty/game/core/scripts/client/renderManager.cs @@ -33,7 +33,7 @@ function initRenderManager() { enabled = "false"; - format = "GFXFormatR8G8B8A8"; + format = "GFXFormatR16G16B16A16F"; depthFormat = "GFXFormatD24S8"; aaLevel = 0; // -1 = match backbuffer @@ -49,20 +49,21 @@ function initRenderManager() // We really need to fix the sky to render after all the // meshes... but that causes issues in reflections. - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(SkyBin) { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); //DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); // Normal mesh rendering. - DiffuseRenderPassManager.addManager( new RenderTerrainMgr() { renderOrder = 0.4; processAddOrder = 0.4; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); - DiffuseRenderPassManager.addManager( new RenderImposterMgr() { renderOrder = 0.56; processAddOrder = 0.56; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); + DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderImposterMgr(ImposterBin) { renderOrder = 0.56; processAddOrder = 0.56; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjectBin) { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Decal"; renderOrder = 0.8; processAddOrder = 0.8; } ); - DiffuseRenderPassManager.addManager( new RenderOcclusionMgr() { bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ShadowBin) { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalRoadBin) { bintype = "DecalRoad"; renderOrder = 0.8; processAddOrder = 0.8; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalBin) { bintype = "Decal"; renderOrder = 0.81; processAddOrder = 0.81; } ); + DiffuseRenderPassManager.addManager( new RenderOcclusionMgr(OccluderBin){ bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); // We now render translucent objects that should handle // their own fogging and lighting. @@ -70,10 +71,12 @@ function initRenderManager() // Note that the fog effect is triggered before this bin. DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjTranslucentBin) { bintype = "ObjectTranslucent"; renderOrder = 1.0; processAddOrder = 1.0; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); - DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); - DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(WaterBin) { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(FoliageBin) { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); + DiffuseRenderPassManager.addManager( new RenderParticleMgr(ParticleBin) { renderOrder = 1.35; processAddOrder = 1.35; } ); + DiffuseRenderPassManager.addManager( new RenderTranslucentMgr(TranslucentBin){ renderOrder = 1.4; processAddOrder = 1.4; } ); + + DiffuseRenderPassManager.addManager(new RenderObjectMgr(FogBin){ bintype = "ObjectVolumetricFog"; renderOrder = 1.45; processAddOrder = 1.45; } ); // Note that the GlowPostFx is triggered after this bin. DiffuseRenderPassManager.addManager( new RenderGlowMgr(GlowBin) { renderOrder = 1.5; processAddOrder = 1.5; } ); @@ -83,7 +86,7 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderObjectMgr(EditorBin) { bintype = "Editor"; renderOrder = 1.6; processAddOrder = 1.6; } ); // Resolve format change token last. - DiffuseRenderPassManager.addManager( new RenderPassStateBin() { renderOrder = 1.7; stateToken = AL_FormatToken; } ); + DiffuseRenderPassManager.addManager( new RenderPassStateBin(FinalBin) { renderOrder = 1.7; stateToken = AL_FormatToken; } ); } /// This post effect is used to copy data from the non-MSAA back-buffer to the diff --git a/Templates/Empty/game/core/scripts/client/scatterSky.cs b/Templates/Empty/game/core/scripts/client/scatterSky.cs index 48a8fdbc7a..57a8a9fb11 100644 --- a/Templates/Empty/game/core/scripts/client/scatterSky.cs +++ b/Templates/Empty/game/core/scripts/client/scatterSky.cs @@ -22,13 +22,13 @@ new GFXStateBlockData( ScatterSkySBData ) { - cullDefined = true; + //cullDefined = true; cullMode = "GFXCullNone"; zDefined = true; zEnable = true; zWriteEnable = false; - zFunc = "GFXCmpLessEqual"; + //zFunc = "GFXCmpLessEqual"; samplersDefined = true; samplerStates[0] = SamplerClampLinear; diff --git a/Templates/Empty/game/core/scripts/client/shaders.cs b/Templates/Empty/game/core/scripts/client/shaders.cs index 98d0529ebe..002053a1ac 100644 --- a/Templates/Empty/game/core/scripts/client/shaders.cs +++ b/Templates/Empty/game/core/scripts/client/shaders.cs @@ -101,4 +101,40 @@ singleton ShaderData( OffscreenParticleCompositeShaderData ) samplerNames[1] = "$alphaMap"; pixVersion = 1.4; +}; + +singleton ShaderData( VolumetricFogPrePassShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogPreP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogPreP.glsl"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogP.glsl"; + + samplerNames[0] = "$prepassTex"; + samplerNames[1] = "$depthBuffer"; + samplerNames[2] = "$frontBuffer"; + samplerNames[3] = "$density"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogReflectionShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogRefl.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogRefl.glsl"; + + pixVersion = 3.0; }; \ No newline at end of file diff --git a/Templates/Empty/game/core/scripts/server/defaults.cs b/Templates/Empty/game/core/scripts/server/defaults.cs index 78ebdb8836..73c50a1a40 100644 --- a/Templates/Empty/game/core/scripts/server/defaults.cs +++ b/Templates/Empty/game/core/scripts/server/defaults.cs @@ -36,9 +36,9 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of the FPS starter kit or "@ + "You do not have the correct version of "@$appName@" or "@ "the related art needed to play on this server, please contact "@ - "the server operator for more information."; + "the server administrator."; // The network port is also defined by the client, this value // overrides pref::net::port for dedicated servers diff --git a/Templates/Empty/game/main.cs b/Templates/Empty/game/main.cs index b6218c8cda..22a3ab2ffb 100644 --- a/Templates/Empty/game/main.cs +++ b/Templates/Empty/game/main.cs @@ -57,7 +57,7 @@ function createCanvas(%windowTitle) // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } @@ -252,6 +250,11 @@ function loadDirs(%dirPath) onStart(); echo("Engine initialized..."); + ModuleDatabase.scanModules( "" ); + + //You can also explicitly decalre some modules here to be loaded by default if they are part of your game + //Ex: ModuleDatabase.LoadExplicit( "AppCore" ); + if( !$isDedicated ) { // As we know at this point that the initial load is complete, diff --git a/Templates/Empty/game/main.cs.in b/Templates/Empty/game/main.cs.in index 06f3e88547..a541cf3b79 100644 --- a/Templates/Empty/game/main.cs.in +++ b/Templates/Empty/game/main.cs.in @@ -57,7 +57,7 @@ $displayHelp = false; // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } diff --git a/Templates/Empty/game/scripts/server/VolumetricFog.cs b/Templates/Empty/game/scripts/server/VolumetricFog.cs new file mode 100644 index 0000000000..53e03adf30 --- /dev/null +++ b/Templates/Empty/game/scripts/server/VolumetricFog.cs @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function VolumetricFog::onEnterFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj enters the fog area. + + // echo("Control Object " @ %obj @ " enters fog " @ %this); +} + +function VolumetricFog::onLeaveFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj leaves the fog area. + + // echo("Control Object " @ %obj @ " left fog " @ %this); +} + +function VolumetricFog::Dissolve(%this,%speed,%delete) +{ + // This method dissolves the fog at speed milliseconds + %this.isBuilding = true; + if (%this.FogDensity > 0) + { + %this.setFogDensity(%this.FogDensity - 0.005); + %this.schedule(%speed,Dissolve,%speed,%delete); + } + else + { + %this.isBuilding = false; + %this.SetFogDensity(0.0); + if (%delete !$= "" && %delete !$="0" && %delete !$="false") + %this.schedule(250,delete); + } +} + +function VolumetricFog::Thicken(%this,%speed, %end_density) +{ + // This method thickens the fog at speed milliseconds to a density of %end_density + + %this.isBuilding = true; + if (%this.FogDensity + 0.005 < %end_density) + { + %this.setFogDensity(%this.FogDensity + 0.005); + %this.schedule(%speed,Thicken,%speed, %end_density); + } + else + { + %this.setFogDensity(%end_density); + %this.isBuilding = false; + } +} + +function GenerateFog(%pos,%scale,%color,%density) +{ + // This function can be used to generate some fog caused by massive gunfire etc. + // Change shape and modulation data to your likings. + + %fog=new VolumetricFog() { + shapeName = "art/environment/Fog_Sphere.dts"; + fogColor = %color; + fogDensity = "0.0"; + ignoreWater = "0"; + MinSize = "250"; + FadeSize = "750"; + texture = "art/environment/FogMod_heavy.dds"; + tiles = "1"; + modStrength = "0.2"; + PrimSpeed = "-0.01 0.04"; + SecSpeed = "0.02 0.02"; + position = %pos; + rotation = "0 0 1 20.354"; + scale = %scale; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + + if (isObject(%fog)) + { + MissionCleanup.add(%fog); + + %fog.Thicken(500,%density); + } + + return %fog; +} \ No newline at end of file diff --git a/Templates/Empty/game/scripts/server/scriptExec.cs b/Templates/Empty/game/scripts/server/scriptExec.cs index f2f2d1f586..77a5d8d27c 100644 --- a/Templates/Empty/game/scripts/server/scriptExec.cs +++ b/Templates/Empty/game/scripts/server/scriptExec.cs @@ -22,3 +22,4 @@ // Load up all scripts. This function is called when // a server is constructed. +exec("./VolumetricFog.cs"); \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl new file mode 100644 index 0000000000..e900f7548b --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final pixel shader V2.00 +#include "../shaderModel.hlsl" +#include "../shaderModelAutoGen.hlsl" +#include "../torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(depthBuffer, 1); +TORQUE_UNIFORM_SAMPLER2D(frontBuffer, 2); +TORQUE_UNIFORM_SAMPLER2D(density, 3); + +uniform float3 ambientColor; +uniform float accumTime; +uniform float4 fogColor; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform float numtiles; +uniform float fadesize; +uniform float2 PixelSize; + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = TORQUE_PREPASS_UNCONDITION(prepassTex, uvscreen).w * preBias; + float depth = TORQUE_TEX2D(depthBuffer, uvscreen).r; + float front = TORQUE_TEX2D(frontBuffer, uvscreen).r; + + if (depth <= front) + return float4(0,0,0,0); + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + float3 col = fogColor.rgb; + if (textured != 0.0) + { + float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + float2 mod1 = TORQUE_TEX2D(density, (offset + (modspeed.xy*accumTime))).rg; + float2 mod2 = TORQUE_TEX2D(density, (offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + float4 resultColor = float4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + return hdrEncode(resultColor); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl new file mode 100644 index 0000000000..fdc839507d --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass pixel shader V1.00 +#include "../shaderModel.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + float OUT; + + clip( IN.pos.w ); + OUT = IN.pos.w; + + return float4(OUT,0,0,1); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl new file mode 100644 index 0000000000..aba7a745db --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass vertex shader V1.00 + +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_P IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, float4(IN.pos, 1.0)); + OUT.pos = OUT.hpos; + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl new file mode 100644 index 0000000000..380233b5fe --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Reflection pixel shader V1.00 +#include "../shaderModel.hlsl" +uniform float4 fogColor; +uniform float fogDensity; +uniform float reflStrength; + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl new file mode 100644 index 0000000000..167f83946e --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final vertex shader V1.00 + +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_PNTT IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, float4(IN.pos,1.0)); + OUT.htpos = OUT.hpos; + OUT.uv0 = IN.uv0; + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl new file mode 100644 index 0000000000..7895d9e2d1 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../gl/torque.glsl" + +uniform sampler2D prepassTex; +uniform sampler2D depthBuffer; +uniform sampler2D frontBuffer; +uniform sampler2D density; + +uniform float accumTime; +uniform vec4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform vec4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform vec2 viewpoint; +uniform vec2 texscale; +uniform vec3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform vec2 PixelSize; + +in vec4 _hpos; +#define IN_hpos _hpos +out vec4 OUT_col; + +void main() +{ + vec2 uvscreen=((IN_hpos.xy/IN_hpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + { + OUT_col = vec4(0,0,0,0); + return; + } + + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + vec3 col = fogColor.rgb; + if (textured != 0.0) + { + vec2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + vec2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + vec2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + vec4 returnColor = vec4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + OUT_col = hdrEncode(returnColor); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl new file mode 100644 index 0000000000..017ea6ef8e --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 _hpos; +#define IN_hpos _hpos + +out vec4 OUT_col; + +void main() +{ + float OUT; + clip( IN_hpos.w ); + OUT = IN_hpos.w; + + OUT_col = vec4(OUT,0,0,1); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl new file mode 100644 index 0000000000..2f2a1318ac --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + vec4 inPos = IN_position; + inPos.w = 1.0; + + OUT_hpos = tMul( modelView, inPos ); + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl new file mode 100644 index 0000000000..78e149fbf5 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +uniform vec4 fogColor; +uniform float fogDensity; +uniform float reflStrength; +out vec4 OUT_col; + +void main() +{ + OUT_col = vec4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl new file mode 100644 index 0000000000..57b3ba87e7 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + OUT_hpos = tMul(modelView, IN_position); + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Empty/game/shaders/common/basicCloudsP.hlsl b/Templates/Empty/game/shaders/common/basicCloudsP.hlsl index 53b88d8b76..4b40e5e8cd 100644 --- a/Templates/Empty/game/shaders/common/basicCloudsP.hlsl +++ b/Templates/Empty/game/shaders/common/basicCloudsP.hlsl @@ -24,14 +24,14 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 col = tex2D( diffuseMap, IN.texCoord ); + float4 col = TORQUE_TEX2D(diffuseMap, IN.texCoord); return hdrEncode( col ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl index 49842fd37b..a176fdbcdc 100644 --- a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl @@ -20,39 +20,39 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct CloudVert { - float4 pos : POSITION; - float3 normal : NORMAL; - float3 binormal : BINORMAL; - float3 tangent : TANGENT; + float3 pos : POSITION; float2 uv0 : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; uniform float4x4 modelview; -uniform float accumTime; -uniform float texScale; uniform float2 texDirection; uniform float2 texOffset; +uniform float accumTime; +uniform float texScale; + ConnectData main( CloudVert IN ) -{ +{ ConnectData OUT; - - OUT.hpos = mul(modelview, IN.pos); - + + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); + float2 uv = IN.uv0; uv += texOffset; uv *= texScale; uv += accumTime * texDirection; - OUT.texCoord = uv; - + OUT.texCoord = uv; + return OUT; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/cloudLayerP.hlsl b/Templates/Empty/game/shaders/common/cloudLayerP.hlsl index a3c2d06e89..efa8fe0b4d 100644 --- a/Templates/Empty/game/shaders/common/cloudLayerP.hlsl +++ b/Templates/Empty/game/shaders/common/cloudLayerP.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" #include "torque.hlsl" //----------------------------------------------------------------------------- @@ -27,7 +28,7 @@ //----------------------------------------------------------------------------- struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -38,7 +39,7 @@ struct ConnectData //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler2D normalHeightMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(normalHeightMap, 0); uniform float3 ambientColor; uniform float3 sunColor; uniform float cloudCoverage; @@ -99,7 +100,7 @@ float3 ComputeIllumination( float2 texCoord, return finalColor; } -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Normalize the interpolated vectors: float3 vViewTS = normalize( IN.vViewTS ); @@ -109,11 +110,11 @@ float4 main( ConnectData IN ) : COLOR float2 texSample = IN.texCoord12.xy; - float4 noise1 = tex2D( normalHeightMap, IN.texCoord12.zw ); + float4 noise1 = TORQUE_TEX2D( normalHeightMap, IN.texCoord12.zw ); noise1 = normalize( ( noise1 - 0.5 ) * 2.0 ); //return noise1; - float4 noise2 = tex2D( normalHeightMap, IN.texCoord34.xy ); + float4 noise2 = TORQUE_TEX2D(normalHeightMap, IN.texCoord34.xy); noise2 = normalize( ( noise2 - 0.5 ) * 2.0 ); //return noise2; @@ -122,7 +123,7 @@ float4 main( ConnectData IN ) : COLOR float noiseHeight = noise1.a * noise2.a * ( cloudCoverage / 2.0 + 0.5 ); - float3 vNormalTS = normalize( tex2D( normalHeightMap, texSample ).xyz * 2.0 - 1.0 ); + float3 vNormalTS = normalize( TORQUE_TEX2D(normalHeightMap, texSample).xyz * 2.0 - 1.0); vNormalTS += noiseNormal; vNormalTS = normalize( vNormalTS ); @@ -130,7 +131,7 @@ float4 main( ConnectData IN ) : COLOR cResultColor.rgb = ComputeIllumination( texSample, vLightTS, vViewTS, vNormalTS ); float coverage = ( cloudCoverage - 0.5 ) * 2.0; - cResultColor.a = tex2D( normalHeightMap, texSample ).a + coverage + noiseHeight; + cResultColor.a = TORQUE_TEX2D(normalHeightMap, texSample).a + coverage + noiseHeight; if ( cloudCoverage > -1.0 ) cResultColor.a /= 1.0 + coverage; diff --git a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl index 8c1cc555f0..d60dd251d8 100644 --- a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl @@ -23,10 +23,11 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" struct CloudVert { - float4 pos : POSITION; + float3 pos : POSITION; float3 normal : NORMAL; float3 binormal : BINORMAL; float3 tangent : TANGENT; @@ -35,7 +36,7 @@ struct CloudVert struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -61,8 +62,7 @@ ConnectData main( CloudVert IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); - + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); @@ -85,7 +85,7 @@ ConnectData main( CloudVert IN ) float3 vBinormalWS = -IN.binormal; // Compute position in world space: - float4 vPositionWS = IN.pos + float4( eyePosWorld, 1 ); //mul( IN.pos, objTrans ); + float4 vPositionWS = float4(IN.pos, 1.0) + float4(eyePosWorld, 1); //mul( IN.pos, objTrans ); // Compute and output the world view vector (unnormalized): float3 vViewWS = eyePosWorld - vPositionWS.xyz; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl index 52ae4e9557..d0577428fe 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return float4(color_in.rgb, color_in.a * tex2D(diffuseMap, texCoord_in).a); + return float4(IN.color.rgb, IN.color.a * TORQUE_TEX2D(diffuseMap, IN.texCoord).a); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl index 90bb081128..dd9990e070 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl @@ -20,7 +20,15 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 { - return color_in; + return IN.color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl index f0efe1493b..d16dfb8632 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl @@ -20,20 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; return Out; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl index ccf22845cd..63afec2a45 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return tex2D(diffuseMap, texCoord_in) * color_in; + return TORQUE_TEX2D(diffuseMap, IN.texCoord) * IN.color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl new file mode 100644 index 0000000000..82dbd4ce97 --- /dev/null +++ b/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../shaderModel.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 +{ + return TORQUE_TEX2D(diffuseMap, IN.texCoord); +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl new file mode 100644 index 0000000000..204cf95141 --- /dev/null +++ b/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../shaderModel.hlsl" + +struct Appdata +{ + float3 position : POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = mul(modelview, float4(In.position, 1.0)); + Out.texCoord = In.texCoord; + return Out; +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/foliage.hlsl b/Templates/Empty/game/shaders/common/foliage.hlsl index e875bb23fe..9952c29d69 100644 --- a/Templates/Empty/game/shaders/common/foliage.hlsl +++ b/Templates/Empty/game/shaders/common/foliage.hlsl @@ -30,11 +30,11 @@ #define MAX_COVERTYPES 8 +uniform float2 gc_fadeParams; +uniform float2 gc_windDir; uniform float3 gc_camRight; uniform float3 gc_camUp; uniform float4 gc_typeRects[MAX_COVERTYPES]; -uniform float2 gc_fadeParams; -uniform float2 gc_windDir; // .x = gust length // .y = premultiplied simulation time and gust frequency diff --git a/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl b/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl index dfa2e4de01..a8bb68e284 100644 --- a/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl +++ b/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl @@ -21,36 +21,39 @@ //----------------------------------------------------------------------------- #include "shdrConsts.h" - +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 lum : COLOR0; + float4 hpos : TORQUE_POSITION; + float2 outTexCoord : TEXCOORD0; + float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(alphaMap, 1); + +uniform float4 groundAlpha; +uniform float4 ambient; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D diffuseMap : register(S0), - uniform sampler2D alphaMap : register(S1), - uniform float4 groundAlpha, - uniform float4 ambient ) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 alpha = tex2D(alphaMap, IN.alphaLookup); - OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * tex2D(diffuseMap, IN.texCoord); + float4 alpha = TORQUE_TEX2D(alphaMap, IN.alphaLookup); + OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * TORQUE_TEX2D(diffuseMap, IN.texCoord); OUT.col.a = OUT.col.a * min(alpha, groundAlpha + IN.groundAlphaCoeff.x).x; return OUT; diff --git a/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl b/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl index 06a9cf5e52..70ec9ff4cb 100644 --- a/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl +++ b/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl @@ -23,39 +23,42 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float2 waveScale : TEXCOORD1; + float3 position : POSITION; float3 normal : NORMAL; - float4 position : POSITION; + float2 texCoord : TEXCOORD0; + float2 waveScale : TEXCOORD1; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 outTexCoord : TEXCOORD0; float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; +uniform float4x4 projection : register(C0); +uniform float4x4 world : register(C4); +uniform float GlobalSwayPhase : register(C8); +uniform float SwayMagnitudeSide : register(C9); +uniform float SwayMagnitudeFront : register(C10); +uniform float GlobalLightPhase : register(C11); +uniform float LuminanceMagnitude : register(C12); +uniform float LuminanceMidpoint : register(C13); +uniform float DistanceRange : register(C14); +uniform float3 CameraPos : register(C15); +uniform float TrueBillboard : register(C16); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 projection : register(C0), - uniform float4x4 world : register(C4), - uniform float GlobalSwayPhase : register(C8), - uniform float SwayMagnitudeSide : register(C9), - uniform float SwayMagnitudeFront : register(C10), - uniform float GlobalLightPhase : register(C11), - uniform float LuminanceMagnitude : register(C12), - uniform float LuminanceMidpoint : register(C13), - uniform float DistanceRange : register(C14), - uniform float3 CameraPos : register(C15), - uniform float TrueBillboard : register(C16) -) +ConnectData main( VertData IN ) { ConnectData OUT; @@ -113,7 +116,7 @@ ConnectData main( VertData IN, float Luminance = LuminanceMidpoint + LuminanceMagnitude * cos(GlobalLightPhase + IN.normal.y); // Alpha - float3 worldPos = float3(IN.position.x, IN.position.y, IN.position.z); + float3 worldPos = IN.position; float alpha = abs(distance(worldPos, CameraPos)) / DistanceRange; alpha = clamp(alpha, 0.0f, 1.0f); //pass it through diff --git a/Templates/Empty/game/shaders/common/gl/lighting.glsl b/Templates/Empty/game/shaders/common/gl/lighting.glsl index eb1c9b3553..804ab1e3b3 100644 --- a/Templates/Empty/game/shaders/common/gl/lighting.glsl +++ b/Templates/Empty/game/shaders/common/gl/lighting.glsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.glsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( vec3 wsView, /// float AL_CalcSpecular( vec3 toLight, vec3 normal, vec3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +vec4 AL_DeferredOutput( + vec3 lightColor, + vec3 diffuseColor, + vec4 matInfo, + vec4 ambient, + float specular, + float shadowAttenuation) +{ + vec3 specularColor = vec3(specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(max(specular,1.0f), max((matInfo.a / AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= vec3(shadowAttenuation); + lightColor += ambient.rgb; + return vec4(lightColor.rgb, specularOut); +} diff --git a/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl b/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl index d9fa80bcf1..b4e70f9028 100644 --- a/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl +++ b/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl @@ -73,5 +73,8 @@ void main() discard; OUT_col.a = 1; + + OUT_col = clamp(OUT_col, 0.0, 1.0); + OUT_col = hdrEncode( OUT_col ); } diff --git a/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl b/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl index 61580d785d..252a2b1210 100644 --- a/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl +++ b/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl @@ -36,14 +36,9 @@ float vernierScale(float fCos) } in vec4 vPosition; -in vec3 vNormal; -in vec4 vColor; -in vec2 vTexCoord0; // This is the shader input vertex structure. #define IN_position vPosition -#define IN_normal vNormal -#define IN_color vColor // This is the shader output data. out vec4 rayleighColor; diff --git a/Templates/Empty/game/shaders/common/gl/torque.glsl b/Templates/Empty/game/shaders/common/gl/torque.glsl index 9032a57f77..d4a7c45381 100644 --- a/Templates/Empty/game/shaders/common/gl/torque.glsl +++ b/Templates/Empty/game/shaders/common/gl/torque.glsl @@ -284,4 +284,37 @@ void fizzle(vec2 vpos, float visibility) /// @note This macro will only work in the void main() method of a pixel shader. #define assert(condition, color) { if(!any(condition)) { OUT_col = color; return; } } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, float num) +{ + float process = round(flags * 255); + float squareNum = pow(2.0, num); + return (mod(process, pow(2.0, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return tex; +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(2.2)), tex.a); +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(1.0/2.2)), tex.a); +} +#endif // + #endif // _TORQUE_GLSL_ diff --git a/Templates/Empty/game/shaders/common/guiMaterialV.hlsl b/Templates/Empty/game/shaders/common/guiMaterialV.hlsl index 425da5da4c..5d725338f7 100644 --- a/Templates/Empty/game/shaders/common/guiMaterialV.hlsl +++ b/Templates/Empty/game/shaders/common/guiMaterialV.hlsl @@ -20,23 +20,25 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" struct MaterialDecoratorConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; +uniform float4x4 modelview : register(C0); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -MaterialDecoratorConnectV main( VertexIn_PCT IN, - uniform float4x4 modelview : register(C0) ) +MaterialDecoratorConnectV main( VertexIn_PCT IN ) { MaterialDecoratorConnectV OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.uv0 = IN.uv0; return OUT; diff --git a/Templates/Empty/game/shaders/common/hlslStructs.hlsl b/Templates/Empty/game/shaders/common/hlslStructs.hlsl new file mode 100644 index 0000000000..ce0ca305c6 --- /dev/null +++ b/Templates/Empty/game/shaders/common/hlslStructs.hlsl @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// The purpose of this file is to get all of our HLSL structures into one place. +// Please use the structures here instead of redefining input and output structures +// in each shader file. If structures are added, please adhere to the naming convention. + +//------------------------------------------------------------------------------ +// Vertex Input Structures +// +// These structures map to FVFs/Vertex Declarations in Torque. See gfxStructs.h +//------------------------------------------------------------------------------ + +// Notes +// +// Position should be specified as a float3 as our vertex structures in +// the engine output float3s for position. + +struct VertexIn_P +{ + float3 pos : POSITION; +}; + +struct VertexIn_PT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PTTT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; +}; + +struct VertexIn_PC +{ + float3 pos : POSITION; + float4 color : DIFFUSE; +}; + +struct VertexIn_PNC +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; +}; + +struct VertexIn_PCT +{ + float3 pos : POSITION; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PN +{ + float3 pos : POSITION; + float3 normal : NORMAL; +}; + +struct VertexIn_PNT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float3 tangent : TANGENT; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNCT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTTTB +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float3 T : TEXCOORD2; + float3 B : TEXCOORD3; +}; \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting.hlsl b/Templates/Empty/game/shaders/common/lighting.hlsl index ec8129e944..a41b8a8734 100644 --- a/Templates/Empty/game/shaders/common/lighting.hlsl +++ b/Templates/Empty/game/shaders/common/lighting.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.hlsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( float3 wsView, /// float AL_CalcSpecular( float3 toLight, float3 normal, float3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +float4 AL_DeferredOutput( + float3 lightColor, + float3 diffuseColor, + float4 matInfo, + float4 ambient, + float specular, + float shadowAttenuation) +{ + float3 specularColor = float3(specular, specular, specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(abs(specular), max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= shadowAttenuation; + lightColor += ambient.rgb; + return float4(lightColor.rgb, specularOut); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl index c86cd4e890..064fcffa64 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl @@ -20,17 +20,24 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" + +struct VertData +{ + float3 pos : POSITION; + float4 color : COLOR; +}; struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; -ConvexConnectV main( VertexIn_P IN, +ConvexConnectV main( VertData IN, uniform float4x4 modelview, uniform float4x4 objTrans, uniform float4x4 worldViewOnly, @@ -38,9 +45,9 @@ ConvexConnectV main( VertexIn_P IN, { ConvexConnectV OUT; - OUT.hpos = mul( modelview, IN.pos ); - OUT.wsEyeDir = mul( objTrans, IN.pos ) - float4( eyePosWorld, 0.0 ); - OUT.vsEyeDir = mul( worldViewOnly, IN.pos ); + OUT.hpos = mul( modelview, float4(IN.pos,1.0) ); + OUT.wsEyeDir = mul(objTrans, float4(IN.pos, 1.0)) - float4(eyePosWorld, 0.0); + OUT.vsEyeDir = mul(worldViewOnly, float4(IN.pos, 1.0)); OUT.ssPos = OUT.hpos; return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl new file mode 100644 index 0000000000..ad3debbaf4 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + return float4(TORQUE_TEX2D( colorBufferTex, IN.uv0 ).rgb, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl index a2b2b5d7d7..68df09a78c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; - return float4( tex1D( depthViz, depth ).rgb, 1.0 ); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl new file mode 100644 index 0000000000..2573836592 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(glowBuffer, 0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + return TORQUE_TEX2D(glowBuffer, IN.uv0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl index 487b4c7405..ca6d8d677c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl @@ -20,15 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); - return float4( lightcolor, 1.0 ); + float4 lightColor = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + return float4( lightColor.rgb, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl index edc25ed037..072f07e00e 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl @@ -20,15 +20,12 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); - -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); + float specular = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ).a; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl index c160045b4a..4f31d2c531 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl @@ -20,13 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 normal = prepassUncondition( prepassTex, IN.uv0 ).xyz; + float3 normal = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).xyz; return float4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl index b1f2bca29f..b548334991 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl @@ -20,15 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + struct MaterialDecoratorConnectV { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -float4 main( MaterialDecoratorConnectV IN, - uniform sampler2D shadowMap : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); + +float4 main( MaterialDecoratorConnectV IN ) : TORQUE_TARGET0 { - float depth = saturate( tex2D( shadowMap, IN.uv0 ).r ); - return float4( tex1D( depthViz, depth ).rgb, 1 ); + float depth = saturate( TORQUE_TEX2D( shadowMap, IN.uv0 ).r ); + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl new file mode 100644 index 0000000000..eba38a8799 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(matinfoTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float specular = TORQUE_TEX2D( matinfoTex, IN.uv0 ).b; + return float4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl new file mode 100644 index 0000000000..cefebe8c70 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( Conn IN ) +{ + Fragout OUT; + + // Clear Prepass Buffer ( Normals/Depth ); + OUT.col = float4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT.col1 = float4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT.col2 = float4(0.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl new file mode 100644 index 0000000000..20ba4d5097 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Appdata +{ + float3 pos : POSITION; + float4 color : COLOR; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = float4(In.pos,1.0); + return Out; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl new file mode 100644 index 0000000000..d91d2eb38a --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( ) +{ + Fragout OUT; + + OUT.col = float4(0.0, 0.0, 0.0, 0.0); + OUT.col1 = float4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + OUT.col2 = float4(1.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl new file mode 100644 index 0000000000..c710656f87 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModelAutoGen.hlsl" +#include "../../postfx/postFx.hlsl" +#include "shaders/common/torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,1); +TORQUE_UNIFORM_SAMPLER2D(matInfoTex,2); +TORQUE_UNIFORM_SAMPLER2D(prepassTex,3); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float4 lightBuffer = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + float4 colorBuffer = TORQUE_TEX2D( colorBufferTex, IN.uv0 ); + float4 matInfo = TORQUE_TEX2D( matInfoTex, IN.uv0 ); + float specular = saturate(lightBuffer.a); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + + if (depth>0.9999) + return float4(0,0,0,0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= float4(lightBuffer.rgb, 1.0); + colorBuffer += float4(specular, specular, specular, 1.0); + + return hdrEncode( float4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl index 567dd11ce2..543e216772 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl @@ -19,10 +19,11 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" struct FarFrustumQuadConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; @@ -30,6 +31,7 @@ struct FarFrustumQuadConnectV struct FarFrustumQuadConnectP { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl index 08cf612850..0167d901a0 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" #include "farFrustumQuad.hlsl" @@ -36,8 +36,8 @@ FarFrustumQuadConnectV main( VertexIn_PNTT IN, // Interpolators will generate eye rays the // from far-frustum corners. - OUT.wsEyeRay = IN.tangent.xyz; - OUT.vsEyeRay = IN.normal.xyz; + OUT.wsEyeRay = IN.tangent; + OUT.vsEyeRay = IN.normal; return OUT; } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl new file mode 100644 index 0000000000..20dbf2de64 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D colorBufferTex; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = vec4(texture( colorBufferTex, uv0 ).rgb, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl index 7c17540975..eb3d6f7612 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; uniform sampler1D depthViz; out vec4 OUT_col; void main() { - float depth = prepassUncondition( prepassBuffer, uv0 ).w; + float depth = prepassUncondition( prepassTex, uv0 ).w; OUT_col = vec4( texture( depthViz, depth ).rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl new file mode 100644 index 0000000000..fa573f07f1 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postFx/gl/postFX.glsl" + +uniform sampler2D glowBuffer; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = texture(glowBuffer, uv0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl index 05645e1932..501e261cad 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); - OUT_col = vec4( lightcolor, 1.0 ); + vec4 lightColor = texture( lightPrePassTex, uv0 ); + OUT_col = vec4( lightColor.rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl index 7e3e41ee98..c21c9b60f5 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); + float specular = texture( lightPrePassTex, uv0 ).a; OUT_col = vec4( specular, specular, specular, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl index dfc611e886..84ea4d3fb1 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl @@ -24,12 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; out vec4 OUT_col; void main() { - vec3 normal = prepassUncondition( prepassBuffer, uv0 ).xyz; + vec3 normal = prepassUncondition( prepassTex, uv0 ).xyz; OUT_col = vec4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl new file mode 100644 index 0000000000..fd054626ed --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D matinfoTex; + +out vec4 OUT_FragColor0; + +void main() +{ + float specular = texture( matinfoTex, uv0 ).a; + OUT_FragColor0 = vec4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl new file mode 100644 index 0000000000..39dc0dc9fd --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +out vec4 OUT_col; +out vec4 OUT_col1; +out vec4 OUT_col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + // Clear Prepass Buffer ( Normals/Depth ); + OUT_col = vec4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT_col1 = vec4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT_col2 = vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl new file mode 100644 index 0000000000..85c5530895 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +layout (location = 0) out vec4 col; +layout (location = 1) out vec4 col1; +layout (location = 2) out vec4 col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + col = vec4(0.0, 0.0, 0.0, 0.0); + col1 = vec4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + col2 = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl new file mode 100644 index 0000000000..8af37ef0cc --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postFx/gl/postFX.glsl" +#include "../../../gl/torque.glsl" + +uniform sampler2D colorBufferTex; +uniform sampler2D lightPrePassTex; +uniform sampler2D matInfoTex; +uniform sampler2D prepassTex; + +out vec4 OUT_col; + +void main() +{ + float depth = prepassUncondition( prepassTex, uv0 ).w; + if (depth>0.9999) + { + OUT_col = vec4(0.0); + return; + } + vec4 lightBuffer = texture( lightPrePassTex, uv0 ); + vec4 colorBuffer = texture( colorBufferTex, uv0 ); + vec4 matInfo = texture( matInfoTex, uv0 ); + float specular = clamp(lightBuffer.a,0.0,1.0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= vec4(lightBuffer.rgb, 1.0); + colorBuffer += vec4(specular, specular, specular, 1.0); + + OUT_col = hdrEncode( vec4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 3bfd94900d..8a1aae3ca5 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -28,10 +28,12 @@ #include "../../../gl/lighting.glsl" #include "../../shadowMap/shadowMapIO_GLSL.h" #include "softShadow.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #ifdef USE_COOKIE_TEX @@ -107,8 +109,13 @@ uniform sampler2D prePassBuffer; uniform samplerCube shadowMap; #else uniform sampler2D shadowMap; + uniform sampler2D dynamicShadowMap; #endif +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -119,9 +126,10 @@ uniform vec2 lightAttenuation; uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat3 viewToLightProj; +uniform mat3 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; - + out vec4 OUT_col; void main() @@ -130,6 +138,15 @@ void main() vec3 ssPos = ssPos.xyz / ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -175,7 +192,7 @@ void main() vec2 shadowCoord = decodeShadowCoord( tMul( viewToLightProj, -lightVec ) ).xy; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -183,17 +200,28 @@ void main() nDotL, lightParams.y ); + vec2 dynamicShadowCoord = decodeShadowCoord( tMul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); #endif #endif // !NO_SHADOW + vec3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. vec4 cookie = texture( cookieMap, tMul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -211,7 +239,7 @@ void main() normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - vec3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + vec3 lightColorOut = lightMapParams.rgb * lightcol; vec4 addToResult = vec4(0.0); // TODO: This needs to be removed when lightmapping is disabled @@ -230,5 +258,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index b3920ec9a6..e7f3e88a72 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -27,14 +27,17 @@ #include "shadergen:/autogenConditioners.h" #include "softShadow.glsl" #include "../../../gl/lighting.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #define IN_wsEyeDir wsEyeDir #define IN_ssPos ssPos #define IN_vsEyeDir vsEyeDir +#define IN_color color #ifdef USE_COOKIE_TEX @@ -45,6 +48,11 @@ uniform sampler2D cookieMap; uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; + +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec4 rtParams0; @@ -59,6 +67,7 @@ uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat4 viewToLightProj; +uniform mat4 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -70,6 +79,15 @@ void main() // Compute scene UV vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); @@ -102,6 +120,10 @@ void main() vec2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + vec4 dynpxlPosLightProj = tMul( dynamicViewToLightProj, vec4( viewSpacePos, 1 ) ); + vec2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; #ifdef NO_SHADOW float shadowed = 1.0; @@ -111,7 +133,7 @@ void main() // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -119,15 +141,24 @@ void main() nDotL, lightParams.y ); + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW + vec3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. vec4 cookie = texture( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -145,7 +176,7 @@ void main() normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - vec3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + vec3 lightColorOut = lightMapParams.rgb * lightcol; vec4 addToResult = vec4(0.0); // TODO: This needs to be removed when lightmapping is disabled @@ -164,5 +195,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index eab364cd5b..608524a5a6 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -34,81 +34,81 @@ in vec2 uv0; in vec3 wsEyeRay; in vec3 vsEyeRay; -uniform sampler2D ShadowMap ; +uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; -uniform vec4 rtParams2; +uniform vec4 rtParams3; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; uniform vec4 lightAmbient; uniform vec3 eyePosWorld; -uniform mat4x4 worldToLightProj; -uniform vec4 scaleX; -uniform vec4 scaleY; -uniform vec4 offsetX; -uniform vec4 offsetY; +uniform mat4x4 eyeMat; uniform vec4 atlasXOffset; uniform vec4 atlasYOffset; uniform vec2 atlasScale; uniform vec4 zNearFarInvNearFar; uniform vec4 lightMapParams; uniform vec2 fadeStartLength; -uniform vec4 farPlaneScalePSSM; uniform vec4 overDarkPSSM; uniform float shadowSoftness; - -out vec4 OUT_col; - -void main() -{ - // Sample/unpack the normal/z data - vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); - vec3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - vec3 debugColor = vec3(0); - #endif - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; +//static shadowMap +uniform mat4x4 worldToLightProj; +uniform vec4 scaleX; +uniform vec4 scaleY; +uniform vec4 offsetX; +uniform vec4 offsetY; +uniform vec4 farPlaneScalePSSM; - #ifdef PSSM_DEBUG_RENDER - debugColor = vec3(1.0); - #endif +//dynamic shadowMap +uniform mat4x4 dynamicWorldToLightProj; +uniform vec4 dynamicScaleX; +uniform vec4 dynamicScaleY; +uniform vec4 dynamicOffsetX; +uniform vec4 dynamicOffsetY; +uniform vec4 dynamicFarPlaneScalePSSM; - #else +vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, + vec2 _texCoord, + mat4 _worldToLightProj, + vec4 _worldPos, + vec4 _scaleX, vec4 _scaleY, + vec4 _offsetX, vec4 _offsetY, + vec4 _farPlaneScalePSSM, + vec4 _atlasXOffset, vec4 _atlasYOffset, + vec2 _atlasScale, + float _shadowSoftness, + float _dotNL , + vec4 _overDarkPSSM +) +{ // Compute shadow map coordinate - vec4 pxlPosLightProj = tMul(worldToLightProj, worldPos); + vec4 pxlPosLightProj = tMul(_worldToLightProj, _worldPos); vec2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; - // Distance to light, in shadowmap space + // Distance to light, in shadowMap space float distToLight = pxlPosLightProj.z / pxlPosLightProj.w; - // Figure out which split to sample from. Basically, we compute the shadowmap sample coord + // Figure out which split to sample from. Basically, we compute the shadowMap sample coord // for all of the splits and then check if its valid. vec4 shadowCoordX = vec4( baseShadowCoord.x ); vec4 shadowCoordY = vec4( baseShadowCoord.y ); vec4 farPlaneDists = vec4( distToLight ); - shadowCoordX *= scaleX; - shadowCoordY *= scaleY; - shadowCoordX += offsetX; - shadowCoordY += offsetY; - farPlaneDists *= farPlaneScalePSSM; + shadowCoordX *= _scaleX; + shadowCoordY *= _scaleY; + shadowCoordX += _offsetX; + shadowCoordY += _offsetY; + farPlaneDists *= _farPlaneScalePSSM; // If the shadow sample is within -1..1 and the distance // to the light for this pixel is less than the far plane @@ -132,6 +132,11 @@ void main() else finalMask = vec4(0, 0, 0, 1); + vec3 debugColor = vec3(0); + + #ifdef NO_SHADOW + debugColor = vec3(1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -144,50 +149,128 @@ void main() debugColor += vec3( 1, 1, 0 ); #endif - // Here we know what split we're sampling from, so recompute the texcoord location + // Here we know what split we're sampling from, so recompute the _texCoord location // Yes, we could just use the result from above, but doing it this way actually saves // shader instructions. vec2 finalScale; - finalScale.x = dot(finalMask, scaleX); - finalScale.y = dot(finalMask, scaleY); + finalScale.x = dot(finalMask, _scaleX); + finalScale.y = dot(finalMask, _scaleY); vec2 finalOffset; - finalOffset.x = dot(finalMask, offsetX); - finalOffset.y = dot(finalMask, offsetY); + finalOffset.x = dot(finalMask, _offsetX); + finalOffset.y = dot(finalMask, _offsetY); vec2 shadowCoord; shadowCoord = baseShadowCoord * finalScale; shadowCoord += finalOffset; - // Convert to texcoord space + // Convert to _texCoord space shadowCoord = 0.5 * shadowCoord + vec2(0.5, 0.5); shadowCoord.y = 1.0f - shadowCoord.y; // Move around inside of atlas vec2 aOffset; - aOffset.x = dot(finalMask, atlasXOffset); - aOffset.y = dot(finalMask, atlasYOffset); + aOffset.x = dot(finalMask, _atlasXOffset); + aOffset.y = dot(finalMask, _atlasYOffset); - shadowCoord *= atlasScale; + shadowCoord *= _atlasScale; shadowCoord += aOffset; // Each split has a different far plane, take this into account. - float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); + float farPlaneScale = dot( _farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; - float shadowed = softShadow_filter( ShadowMap, - uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); - + return vec4(debugColor, + softShadow_filter( _sourceshadowMap, + _texCoord, + shadowCoord, + farPlaneScale * _shadowSoftness, + distToLight, + _dotNL, + dot( finalMask, _overDarkPSSM ) ) ); +} + +out vec4 OUT_col; +void main() +{ + // Emissive. + float4 matInfo = texture( matInfoBuffer, uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(1.0, 1.0, 1.0, 0.0); + return; + } + + // Sample/unpack the normal/z data + vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); + vec3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + vec3 debugColor = vec3(0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = vec3(1.0); + #endif + + #else + + vec4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = mix( shadowed, 1.0, saturate( fadeOutAmt ) ); - + + static_shadowed = mix( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = mix( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); + #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) debugColor = vec3(1.0); @@ -221,14 +304,14 @@ void main() // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif #ifdef PSSM_DEBUG_RENDER lightColorOut = debugColor; #endif - - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); - + + vec4 colorSample = texture( colorBuffer, uv0 ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl index bc47849804..7ff5d50d27 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl @@ -20,35 +20,36 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" - #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -float4 main( ConvexConnectP IN, - uniform sampler2D prePassBuffer : register(S0), - - uniform float4 lightPosition, - uniform float4 lightColor, - uniform float lightRange, - - uniform float4 vsFarPlane, - uniform float4 rtParams0 ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +uniform float4 lightPosition; +uniform float4 lightColor; +uniform float lightRange; +uniform float4 vsFarPlane; +uniform float4 rtParams0; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos(ssPos, rtParams0); // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition(prePassBuffer, uvScene); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION(prePassBuffer, uvScene); float3 normal = prepassSample.rgb; float depth = prepassSample.a; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl index f5dc9e4442..faa2ec1155 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl @@ -20,24 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -ConvexConnectV main( VertexIn_P IN, - uniform float4x4 viewProj, - uniform float4x4 view, - uniform float3 particlePosWorld, - uniform float lightRange ) +uniform float4x4 viewProj; +uniform float4x4 view; +uniform float3 particlePosWorld; +uniform float lightRange; + +ConvexConnectV main( VertexIn_P IN ) { ConvexConnectV OUT; - - float4 vPosWorld = IN.pos + float4(particlePosWorld, 0.0) + float4(IN.pos.xyz, 0.0) * lightRange; + float4 pos = float4(IN.pos, 0.0); + float4 vPosWorld = pos + float4(particlePosWorld, 0.0) + pos * lightRange; OUT.hpos = mul(viewProj, vPosWorld); OUT.vsEyeDir = mul(view, vPosWorld); OUT.ssPos = OUT.hpos; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl index fbfced0978..540fd65c71 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -20,17 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; @@ -40,7 +41,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S2); +TORQUE_UNIFORM_SAMPLERCUBE(cookieMap, 3); #endif @@ -52,9 +53,9 @@ uniform samplerCUBE cookieMap : register(S2); return shadowCoord; } - float4 shadowSample( samplerCUBE shadowMap, float3 shadowCoord ) + float4 shadowSample( TORQUE_SAMPLERCUBE(shadowMap), float3 shadowCoord ) { - return texCUBE( shadowMap, shadowCoord ); + return TORQUE_TEXCUBE( shadowMap, shadowCoord ); } #else @@ -105,38 +106,52 @@ uniform samplerCUBE cookieMap : register(S2); #endif +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +#ifdef SHADOW_CUBE +TORQUE_UNIFORM_SAMPLERCUBE(shadowMap, 1); +#else +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); +#endif -float4 main( ConvexConnectP IN, +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); - uniform sampler2D prePassBuffer : register(S0), +uniform float4 rtParams0; +uniform float4 lightColor; - #ifdef SHADOW_CUBE - uniform samplerCUBE shadowMap : register(S1), - #else - uniform sampler2D shadowMap : register(S1), - #endif +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float4 rtParams0, +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4 lightParams; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float4 lightMapParams, +uniform float lightRange; +uniform float shadowSoftness; +uniform float2 lightAttenuation; - uniform float4 vsFarPlane, - uniform float3x3 viewToLightProj, +uniform float3x3 viewToLightProj; +uniform float3x3 dynamicViewToLightProj; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -173,14 +188,14 @@ float4 main( ConvexConnectP IN, #ifdef SHADOW_CUBE // TODO: We need to fix shadow cube to handle soft shadows! - float occ = texCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; + float occ = TORQUE_TEXCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; float shadowed = saturate( exp( lightParams.y * ( occ - distToLight ) ) ); #else + // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -188,17 +203,30 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); + // Dynamic + float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); + #endif #endif // !NO_SHADOW + float3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = texCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); + float4 cookie = TORQUE_TEXCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -216,7 +244,7 @@ float4 main( ConvexConnectP IN, normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float3 lightColorOut = lightMapParams.rgb * lightcol; float4 addToResult = 0.0; // TODO: This needs to be removed when lightmapping is disabled @@ -235,5 +263,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl index 0e8ecabaae..0faf3e1fb7 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" #if defined( SOFTSHADOW ) && defined( SOFTSHADOW_HIGH_QUALITY ) @@ -69,10 +70,9 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S3); +TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4); - -float softShadow_sampleTaps( sampler2D shadowMap, +float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1), float2 sinCos, float2 shadowPos, float filterRadius, @@ -88,7 +88,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, { tap.x = ( sNonUniformTaps[t].x * sinCos.y - sNonUniformTaps[t].y * sinCos.x ) * filterRadius; tap.y = ( sNonUniformTaps[t].y * sinCos.y + sNonUniformTaps[t].x * sinCos.x ) * filterRadius; - float occluder = tex2Dlod( shadowMap, float4( shadowPos + tap, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD( shadowMap1, float4( shadowPos + tap, 0, 0 ) ).r; float esm = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); shadow += esm / float( endTap - startTap ); @@ -98,7 +98,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, } -float softShadow_filter( sampler2D shadowMap, +float softShadow_filter( TORQUE_SAMPLER2D(shadowMap), float2 vpos, float2 shadowPos, float filterRadius, @@ -111,16 +111,15 @@ float softShadow_filter( sampler2D shadowMap, // If softshadow is undefined then we skip any complex // filtering... just do a single sample ESM. - float occluder = tex2Dlod( shadowMap, float4( shadowPos, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD(shadowMap, float4(shadowPos, 0, 0)).r; float shadow = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); #else - // Lookup the random rotation for this screen pixel. - float2 sinCos = ( tex2Dlod( gTapRotationTex, float4( vpos * 16, 0, 0 ) ).rg - 0.5 ) * 2; + float2 sinCos = ( TORQUE_TEX2DLOD(gTapRotationTex, float4(vpos * 16, 0, 0)).rg - 0.5) * 2; // Do the prediction taps first. - float shadow = softShadow_sampleTaps( shadowMap, + float shadow = softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, @@ -137,7 +136,7 @@ float softShadow_filter( sampler2D shadowMap, // in a partially shadowed area. if ( shadow * ( 1.0 - shadow ) * max( dotNL, 0 ) > 0.06 ) { - shadow += softShadow_sampleTaps( shadowMap, + shadow += softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl index 88e35ad3aa..e1f3baf931 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -20,58 +20,75 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap,2); + #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(cookieMap, 3); #endif +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); -float4 main( ConvexConnectP IN, +uniform float4 rtParams0; - uniform sampler2D prePassBuffer : register(S0), - uniform sampler2D shadowMap : register(S1), +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float4 rtParams0, +uniform float4 lightColor; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float3 lightDirection, - uniform float4 lightSpotParams, - uniform float4 lightMapParams, +uniform float lightRange; +uniform float3 lightDirection; - uniform float4 vsFarPlane, - uniform float4x4 viewToLightProj, +uniform float4 lightSpotParams; +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4x4 viewToLightProj; +uniform float4 lightParams; +uniform float4x4 dynamicViewToLightProj; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +uniform float2 lightAttenuation; +uniform float shadowSoftness; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -101,6 +118,11 @@ float4 main( ConvexConnectP IN, float2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + float4 dynpxlPosLightProj = mul( dynamicViewToLightProj, float4( viewSpacePos, 1 ) ); + float2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; + #ifdef NO_SHADOW float shadowed = 1.0; @@ -110,23 +132,32 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, distToLight, nDotL, lightParams.y ); - + + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW + float3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = tex2D( cookieMap, shadowCoord ); + float4 cookie = TORQUE_TEX2D( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -144,7 +175,7 @@ float4 main( ConvexConnectP IN, normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float3 lightColorOut = lightMapParams.rgb * lightcol; float4 addToResult = 0.0; // TODO: This needs to be removed when lightmapping is disabled @@ -163,5 +194,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 266cc64384..1a97261718 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "../../torque.hlsl" @@ -29,69 +30,70 @@ #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - -uniform sampler2D ShadowMap : register(S1); +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S2); -uniform float4 rtParams2; +TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3); +uniform float4 rtParams3; #endif - - -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - - uniform float3 eyePosWorld, - - uniform float4x4 worldToLightProj, - - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - - uniform float2 fadeStartLength, - uniform float4 farPlaneScalePSSM, - uniform float4 overDarkPSSM, - uniform float shadowSoftness ) : COLOR0 +//register 4? +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); + +uniform float lightBrightness; +uniform float3 lightDirection; + +uniform float4 lightColor; +uniform float4 lightAmbient; + +uniform float shadowSoftness; +uniform float3 eyePosWorld; + +uniform float4 atlasXOffset; +uniform float4 atlasYOffset; +uniform float4 zNearFarInvNearFar; +uniform float4 lightMapParams; +uniform float4 farPlaneScalePSSM; +uniform float4 overDarkPSSM; + +uniform float2 fadeStartLength; +uniform float2 atlasScale; + +uniform float4x4 eyeMat; + +// Static Shadows +uniform float4x4 worldToLightProj; +uniform float4 scaleX; +uniform float4 scaleY; +uniform float4 offsetX; +uniform float4 offsetY; +// Dynamic Shadows +uniform float4x4 dynamicWorldToLightProj; +uniform float4 dynamicScaleX; +uniform float4 dynamicScaleY; +uniform float4 dynamicOffsetX; +uniform float4 dynamicOffsetY; +uniform float4 dynamicFarPlaneScalePSSM; + +float4 AL_VectorLightShadowCast( TORQUE_SAMPLER2D(sourceShadowMap), + float2 texCoord, + float4x4 worldToLightProj, + float4 worldPos, + float4 scaleX, + float4 scaleY, + float4 offsetX, + float4 offsetY, + float4 farPlaneScalePSSM, + float4 atlasXOffset, + float4 atlasYOffset, + float2 atlasScale, + float shadowSoftness, + float dotNL , + float4 overDarkPSSM) { - // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); - float3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - float3 debugColor = 0; - #endif - - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; - - #ifdef PSSM_DEBUG_RENDER - debugColor = 1.0; - #endif - - #else - // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); float2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; @@ -132,6 +134,11 @@ float4 main( FarFrustumQuadConnectP IN, else finalMask = float4(0, 0, 0, 1); + float3 debugColor = float3(0,0,0); + + #ifdef NO_SHADOW + debugColor = float3(1.0,1.0,1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -174,19 +181,96 @@ float4 main( FarFrustumQuadConnectP IN, // Each split has a different far plane, take this into account. float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; + + return float4(debugColor, + softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(sourceShadowMap), + texCoord, + shadowCoord, + farPlaneScale * shadowSoftness, + distToLight, + dotNL, + dot( finalMask, overDarkPSSM ) ) ); +}; + +float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 +{ + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, IN.uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(1.0, 1.0, 1.0, 0.0); + } + + // Sample/unpack the normal/z data + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); + float3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + float3 debugColor = float3(0,0,0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = float3(1.0,1.0,1.0); + #endif + + #else + + float4 static_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(shadowMap), + IN.uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + IN.uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); - float shadowed = softShadow_filter( ShadowMap, - IN.uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif // Fade out the shadow at the end of the range. float4 zDist = (zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = lerp( shadowed, 1.0, saturate( fadeOutAmt ) ); + + static_shadowed = lerp( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = lerp( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) @@ -202,6 +286,7 @@ float4 main( FarFrustumQuadConnectP IN, float Sat_NL_Att = saturate( dotNL * shadowed ) * lightBrightness; float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float4 addToResult = (lightAmbient * (1 - ambientCameraFactor)) + ( lightAmbient * ambientCameraFactor * saturate(dot(normalize(-IN.vsEyeRay), normal)) ); // TODO: This needs to be removed when lightmapping is disabled @@ -221,7 +306,7 @@ float4 main( FarFrustumQuadConnectP IN, // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -229,5 +314,6 @@ float4 main( FarFrustumQuadConnectP IN, lightColorOut = debugColor; #endif - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl index f161fb5d39..b56aade8d4 100644 --- a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl @@ -22,11 +22,11 @@ #include "shaders/common/postFx/postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,15 +35,15 @@ static float weight[3] = { 0.2270270270, 0.3162162162, 0.0702702703 }; uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { - float4 OUT = tex2D( diffuseMap, IN.uv ) * weight[0]; + float4 OUT = TORQUE_TEX2D( diffuseMap, IN.uv ) * weight[0]; for ( int i=1; i < 3; i++ ) { float2 sample = (BLUR_DIR * offset[i]) * oneOverTargetSize; - OUT += tex2D( diffuseMap, IN.uv + sample ) * weight[i]; - OUT += tex2D( diffuseMap, IN.uv - sample ) * weight[i]; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv + sample ) * weight[i]; + OUT += TORQUE_TEX2D(diffuseMap, IN.uv - sample) * weight[i]; } return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl index bf6a362492..c89af7357e 100644 --- a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl @@ -27,7 +27,7 @@ float4 rtParams0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl index dd691de23c..a187c3c63e 100644 --- a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl @@ -23,10 +23,12 @@ //***************************************************************************** // Box Filter //***************************************************************************** +#include "../ShaderModel.hlsl" struct ConnectData { - float2 tex0 : TEXCOORD0; + float4 hpos : TORQUE_POSITION; + float2 tex0 : TEXCOORD0; }; // If not defined from ShaderData then define @@ -40,12 +42,12 @@ float log_conv ( float x0, float X, float y0, float Y ) return (X + log(x0 + (y0 * exp(Y - X)))); } -float4 main( ConnectData IN, - uniform sampler2D diffuseMap0 : register(S0), - uniform float texSize : register(C0), - uniform float2 blurDimension : register(C2), - uniform float2 blurBoundaries : register(C3) - ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(diffuseMap0, 0); +uniform float texSize : register(C0); +uniform float2 blurDimension : register(C2); +uniform float2 blurBoundaries : register(C3); + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // 5x5 if (IN.tex0.x <= blurBoundaries.x) @@ -56,8 +58,8 @@ float4 main( ConnectData IN, float2 texCoord = IN.tex0; - float accum = log_conv(0.3125, tex2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); - accum = log_conv(1, accum, 0.3125, tex2D(diffuseMap0, texCoord + sampleOffset)); + float accum = log_conv(0.3125, TORQUE_TEX2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); + accum = log_conv(1, accum, 0.3125, TORQUE_TEX2D(diffuseMap0, texCoord + sampleOffset)); return accum; } else { @@ -73,7 +75,7 @@ float4 main( ConnectData IN, return accum; } else { - return tex2D(diffuseMap0, IN.tex0); + return TORQUE_TEX2D(diffuseMap0, IN.tex0); } } } diff --git a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl index 75d9af0000..3679e41bb4 100644 --- a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl @@ -26,15 +26,18 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "../ShaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float4 position : POSITION; + float3 position : POSITION; + float2 texCoord : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 tex0 : TEXCOORD0; }; @@ -47,7 +50,7 @@ ConnectData main( VertData IN, { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); OUT.tex0 = IN.texCoord; return OUT; diff --git a/Templates/Empty/game/shaders/common/particleCompositeP.hlsl b/Templates/Empty/game/shaders/common/particleCompositeP.hlsl index 35c2cb4c54..6e26ddbdbf 100644 --- a/Templates/Empty/game/shaders/common/particleCompositeP.hlsl +++ b/Templates/Empty/game/shaders/common/particleCompositeP.hlsl @@ -20,22 +20,30 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- #include "torque.hlsl" +#include "shaderModel.hlsl" -uniform sampler2D colorSource : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorSource, 0); uniform float4 offscreenTargetParams; #ifdef TORQUE_LINEAR_DEPTH #define REJECT_EDGES -uniform sampler2D edgeSource : register(S1); +TORQUE_UNIFORM_SAMPLER2D(edgeSource, 1); uniform float4 edgeTargetParams; #endif +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float4 offscreenPos : TEXCOORD0; + float4 backbufferPos : TEXCOORD1; +}; -float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) : COLOR + +float4 main(Conn IN) : TORQUE_TARGET0 { // Off-screen particle source screenspace position in XY // Back-buffer screenspace position in ZW - float4 ssPos = float4(offscreenPos.xy / offscreenPos.w, backbufferPos.xy / backbufferPos.w); + float4 ssPos = float4(IN.offscreenPos.xy / IN.offscreenPos.w, IN.backbufferPos.xy / IN.backbufferPos.w); float4 uvScene = ( ssPos + 1.0 ) / 2.0; uvScene.yw = 1.0 - uvScene.yw; @@ -44,10 +52,10 @@ float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) #ifdef REJECT_EDGES // Cut out particles along the edges, this will create the stencil mask uvScene.zw = viewportCoordToRenderTarget(uvScene.zw, edgeTargetParams); - float edge = tex2D( edgeSource, uvScene.zw ).r; + float edge = TORQUE_TEX2D( edgeSource, uvScene.zw ).r; clip( -edge ); #endif // Sample offscreen target and return - return tex2D( colorSource, uvScene.xy ); + return TORQUE_TEX2D( colorSource, uvScene.xy ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/particleCompositeV.hlsl b/Templates/Empty/game/shaders/common/particleCompositeV.hlsl index 87fac0d940..c4c51204a6 100644 --- a/Templates/Empty/game/shaders/common/particleCompositeV.hlsl +++ b/Templates/Empty/game/shaders/common/particleCompositeV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "shaderModel.hlsl" -struct VertOut +struct Vertex { - float4 hpos : POSITION; + float3 pos : POSITION; + float4 uvCoord : COLOR0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; float4 offscreenPos : TEXCOORD0; float4 backbufferPos : TEXCOORD1; }; uniform float4 screenRect; // point, extent -VertOut main( float4 uvCoord : COLOR ) +Conn main(Vertex IN) { - VertOut OUT; + Conn OUT; - OUT.hpos = float4(uvCoord.xy, 1.0, 1.0); + OUT.hpos = float4(IN.uvCoord.xy, 1.0, 1.0); OUT.hpos.xy *= screenRect.zw; OUT.hpos.xy += screenRect.xy; diff --git a/Templates/Empty/game/shaders/common/particlesP.hlsl b/Templates/Empty/game/shaders/common/particlesP.hlsl index 80e3c71054..37439c59a1 100644 --- a/Templates/Empty/game/shaders/common/particlesP.hlsl +++ b/Templates/Empty/game/shaders/common/particlesP.hlsl @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "torque.hlsl" - +#include "shaderModel.hlsl" // With advanced lighting we get soft particles. #ifdef TORQUE_LINEAR_DEPTH #define SOFTPARTICLES @@ -29,11 +29,11 @@ #ifdef SOFTPARTICLES - #include "shadergen:/autogenConditioners.h" + #include "shaderModelAutoGen.hlsl" uniform float oneOverSoftness; uniform float oneOverFar; - uniform sampler2D prepassTex : register(S1); + TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); //uniform float3 vEye; uniform float4 prePassTargetParams; #endif @@ -42,14 +42,14 @@ struct Conn { + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; - float4 pos : TEXCOORD2; + float4 pos : TEXCOORD2; }; -uniform sampler2D diffuseMap : register(S0); - -uniform sampler2D paraboloidLightMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(paraboloidLightMap, 2); float4 lmSample( float3 nrm ) { @@ -69,14 +69,14 @@ float4 lmSample( float3 nrm ) // Atlasing front and back maps, so scale lmCoord.x *= 0.5; - return tex2D(paraboloidLightMap, lmCoord); + return TORQUE_TEX2D(paraboloidLightMap, lmCoord); } uniform float alphaFactor; uniform float alphaScale; -float4 main( Conn IN ) : COLOR +float4 main( Conn IN ) : TORQUE_TARGET0 { float softBlend = 1; @@ -84,7 +84,7 @@ float4 main( Conn IN ) : COLOR float2 tc = IN.pos.xy * float2(1.0, -1.0) / IN.pos.w; tc = viewportCoordToRenderTarget(saturate( ( tc + 1.0 ) * 0.5 ), prePassTargetParams); - float sceneDepth = prepassUncondition( prepassTex, tc ).w; + float sceneDepth = TORQUE_PREPASS_UNCONDITION(prepassTex, tc).w; float depth = IN.pos.w * oneOverFar; float diff = sceneDepth - depth; #ifdef CLIP_Z @@ -96,7 +96,7 @@ float4 main( Conn IN ) : COLOR softBlend = saturate( diff * oneOverSoftness ); #endif - float4 diffuse = tex2D( diffuseMap, IN.uv0 ); + float4 diffuse = TORQUE_TEX2D( diffuseMap, IN.uv0 ); //return float4( lmSample(float3(0, 0, -1)).rgb, IN.color.a * diffuse.a * softBlend * alphaScale); diff --git a/Templates/Empty/game/shaders/common/particlesV.hlsl b/Templates/Empty/game/shaders/common/particlesV.hlsl index f096042372..dbeff0cc2e 100644 --- a/Templates/Empty/game/shaders/common/particlesV.hlsl +++ b/Templates/Empty/game/shaders/common/particlesV.hlsl @@ -20,16 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct Vertex { - float4 pos : POSITION; + float3 pos : POSITION; float4 color : COLOR0; float2 uv0 : TEXCOORD0; }; struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; float4 pos : TEXCOORD2; @@ -43,8 +45,8 @@ Conn main( Vertex In ) { Conn Out; - Out.hpos = mul( modelViewProj, In.pos ); - Out.pos = mul( fsModelViewProj, In.pos ); + Out.hpos = mul( modelViewProj, float4(In.pos,1.0) ); + Out.pos = mul(fsModelViewProj, float4(In.pos, 1.0) ); Out.color = In.color; Out.uv0 = In.uv0; diff --git a/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl b/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl index a5057db504..d18331fb69 100644 --- a/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl @@ -23,18 +23,26 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float4 texCoord : TEXCOORD0; - float2 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); +TORQUE_UNIFORM_SAMPLER2D(bumpMap, 2); + //----------------------------------------------------------------------------- // Fade edges of axis for texcoord passed in @@ -54,15 +62,11 @@ float fadeAxis( float val ) //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D refractMap : register(S1), - uniform sampler2D texMap : register(S0), - uniform sampler2D bumpMap : register(S2) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float3 bumpNorm = tex2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; + float3 bumpNorm = TORQUE_TEX2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; float2 offset = float2( bumpNorm.x, bumpNorm.y ); float4 texIndex = IN.texCoord; @@ -74,8 +78,8 @@ Fragout main( ConnectData IN, const float distortion = 0.2; texIndex.xy += offset * distortion * fadeVal; - float4 reflectColor = tex2Dproj( refractMap, texIndex ); - float4 diffuseColor = tex2D( texMap, IN.tex2 ); + float4 reflectColor = TORQUE_TEX2DPROJ( refractMap, texIndex ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.tex2 ); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl b/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl index 108f918cea..d45adb5744 100644 --- a/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl @@ -22,36 +22,37 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { + float3 position : POSITION; + float3 normal : NORMAL; float2 texCoord : TEXCOORD0; float2 lmCoord : TEXCOORD1; float3 T : TEXCOORD2; - float3 B : TEXCOORD3; - float3 normal : NORMAL; - float4 position : POSITION; + float3 B : TEXCOORD3; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord : TEXCOORD0; float2 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 modelview ) +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Empty/game/shaders/common/planarReflectP.hlsl b/Templates/Empty/game/shaders/common/planarReflectP.hlsl index 981cc316d9..43b420544b 100644 --- a/Templates/Empty/game/shaders/common/planarReflectP.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectP.hlsl @@ -23,31 +23,34 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D texMap : register(S0), - uniform sampler2D refractMap : register(S1) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 diffuseColor = tex2D( texMap, IN.texCoord ); - float4 reflectColor = tex2Dproj( refractMap, IN.tex2 ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.texCoord ); + float4 reflectColor = TORQUE_TEX2DPROJ(refractMap, IN.tex2); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Empty/game/shaders/common/planarReflectV.hlsl b/Templates/Empty/game/shaders/common/planarReflectV.hlsl index cd8cb2d96d..1f2ca9d4f1 100644 --- a/Templates/Empty/game/shaders/common/planarReflectV.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectV.hlsl @@ -21,7 +21,8 @@ //----------------------------------------------------------------------------- #define IN_HLSL -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures @@ -29,20 +30,20 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; float4 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertexIn_PNTTTB IN, - uniform float4x4 modelview : register(C0) -) +ConnectData main( VertexIn_PNTTTB IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl new file mode 100644 index 0000000000..c3adb3b55b --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +#include "./postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +uniform float strength; + +struct VertToPix +{ + float4 hpos : TORQUE_POSITION; + + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + + float2 uv4 : TEXCOORD4; + float2 uv5 : TEXCOORD5; + float2 uv6 : TEXCOORD6; + float2 uv7 : TEXCOORD7; +}; + +float4 main( VertToPix IN ) : TORQUE_TARGET0 +{ + float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + float4 OUT = 0; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + float3 rgb2lum = float3( 0.30, 0.59, 0.11 ); + OUT.a = dot( OUT.rgb, rgb2lum ); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl index c7635027db..d2f4a058a7 100644 --- a/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -21,25 +21,26 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" +uniform float accumTime; uniform float3 eyePosWorld; uniform float4 rtParams0; uniform float4 waterFogPlane; -uniform float accumTime; + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(causticsTex0, 1); +TORQUE_UNIFORM_SAMPLER2D(causticsTex1, 2); float distanceToPlane(float4 plane, float3 pos) { return (plane.x * pos.x + plane.y * pos.y + plane.z * pos.z) + plane.w; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex :register(S0), - uniform sampler2D causticsTex0 :register(S1), - uniform sampler2D causticsTex1 :register(S2) ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //Sample the pre-pass - float4 prePass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prePass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); //Get depth float depth = prePass.w; @@ -65,12 +66,12 @@ float4 main( PFXVertToPix IN, causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); //Sample caustics texture - float4 caustics = tex2D(causticsTex0, causticsUV0); - caustics *= tex2D(causticsTex1, causticsUV1); + float4 caustics = TORQUE_TEX2D(causticsTex0, causticsUV0); + caustics *= TORQUE_TEX2D(causticsTex1, causticsUV1); //Use normal Z to modulate caustics //float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); - caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + caustics *= saturate(prePass.z) * pow(abs(1-depth), 64) * waterDepth; return caustics; } diff --git a/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl b/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl index 5916e985a9..8fdca72b72 100644 --- a/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl @@ -26,14 +26,13 @@ #include "./postFx.hlsl" #include "./../torque.hlsl" - -uniform sampler2D backBuffer : register( s0 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); uniform float distCoeff; uniform float cubeDistort; uniform float3 colorDistort; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tex = IN.uv0; @@ -54,7 +53,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 { float x = distort[i] * ( tex.x - 0.5 ) + 0.5; float y = distort[i] * ( tex.y - 0.5 ) + 0.5; - outColor[i] = tex2Dlod( backBuffer, float4(x,y,0,0) )[i]; + outColor[i] = TORQUE_TEX2DLOD( backBuffer, float4(x,y,0,0) )[i]; } return float4( outColor.rgb, 1 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl index bc17a2c04c..2f5835fc24 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl @@ -23,21 +23,22 @@ #include "./../postFx.hlsl" // These are set by the game engine. -uniform sampler2D shrunkSampler : register(S0); // Output of DofDownsample() -uniform sampler2D blurredSampler : register(S1); // Blurred version of the shrunk sampler +TORQUE_UNIFORM_SAMPLER2D(shrunkSampler, 0); // Output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(blurredSampler, 1); // Blurred version of the shrunk sampler + // This is the pixel shader function that calculates the actual // value used for the near circle of confusion. // "texCoords" are 0 at the bottom left pixel and 1 at the top right. -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float3 color; float coc; half4 blurred; half4 shrunk; - shrunk = tex2D( shrunkSampler, IN.uv0 ); - blurred = tex2D( blurredSampler, IN.uv1 ); + shrunk = half4(TORQUE_TEX2D( shrunkSampler, IN.uv0 )); + blurred = half4(TORQUE_TEX2D( blurredSampler, IN.uv1 )); color = shrunk.rgb; //coc = shrunk.a; //coc = blurred.a; diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl index 37e591f256..8c9028654f 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl @@ -20,22 +20,23 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" // These are set by the game engine. // The render target size is one-quarter the scene rendering size. -uniform sampler2D colorSampler : register(S0); -uniform sampler2D depthSampler : register(S1); -uniform float2 dofEqWorld; -uniform float depthOffset; +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(depthSampler, 1); +uniform float2 dofEqWorld; uniform float2 targetSize; +uniform float depthOffset; uniform float maxWorldCoC; //uniform float2 dofEqWeapon; //uniform float2 dofRowDelta; // float2( 0, 0.25 / renderTargetHeight ) struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -44,7 +45,7 @@ struct Pixel float2 tcDepth3 : TEXCOORD5; }; -half4 main( Pixel IN ) : COLOR +half4 main( Pixel IN ) : TORQUE_TARGET0 { //return float4( 1.0, 0.0, 1.0, 1.0 ); @@ -69,57 +70,64 @@ half4 main( Pixel IN ) : COLOR // Use bilinear filtering to average 4 color samples for free. color = 0; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[2] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[2] ).rgb; + color += half3(TORQUE_TEX2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[0]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor0.xy + rowOfs[2]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[2]).rgb); color /= 4; + //declare thse here to save doing it in each loop below + half4 zero4 = half4(0, 0, 0, 0); + coc = zero4; + half4 dofEqWorld4X = half4(dofEqWorld.xxxx); + half4 dofEqWorld4Y = half4(dofEqWorld.yyyy); + half4 maxWorldCoC4 = half4(maxWorldCoC, maxWorldCoC, maxWorldCoC, maxWorldCoC); // Process 4 samples at a time to use vector hardware efficiently. // The CoC will be 1 if the depth is negative, so use "min" to pick - // between "sceneCoc" and "viewCoc". - - for ( int i = 0; i < 4; i++ ) + // between "sceneCoc" and "viewCoc". + [unroll] // coc[i] causes this anyway + for (int i = 0; i < 4; i++) { - depth[0] = prepassUncondition( depthSampler, float4( IN.tcDepth0.xy + rowOfs[i], 0, 0 ) ).w; - depth[1] = prepassUncondition( depthSampler, float4( IN.tcDepth1.xy + rowOfs[i], 0, 0 ) ).w; - depth[2] = prepassUncondition( depthSampler, float4( IN.tcDepth2.xy + rowOfs[i], 0, 0 ) ).w; - depth[3] = prepassUncondition( depthSampler, float4( IN.tcDepth3.xy + rowOfs[i], 0, 0 ) ).w; - coc[i] = clamp( dofEqWorld.x * depth + dofEqWorld.y, 0.0, maxWorldCoC ); - } + depth[0] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth0.xy + rowOfs[i])).w; + depth[1] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth1.xy + rowOfs[i])).w; + depth[2] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth2.xy + rowOfs[i])).w; + depth[3] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth3.xy + rowOfs[i])).w; + + coc = max(coc, clamp(dofEqWorld4X * half4(depth)+dofEqWorld4Y, zero4, maxWorldCoC4)); + } /* - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = curCoc; - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl index da2a79fb45..0b3ec01e23 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl @@ -25,14 +25,14 @@ struct Vert { - float4 pos : POSITION; + float3 pos : POSITION; float2 tc : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -47,7 +47,7 @@ uniform float2 oneOverTargetSize; Pixel main( Vert IN ) { Pixel OUT; - OUT.position = IN.pos; + OUT.position = float4(IN.pos,1.0); float2 uv = viewportCoordToRenderTarget( IN.tc, rtParams0 ); //OUT.position = mul( IN.pos, modelView ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl index 36622495c5..cb7342d409 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl @@ -20,13 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "./../postFx.hlsl" -uniform sampler2D colorSampler : register(S0); // Original source image -uniform sampler2D smallBlurSampler : register(S1); // Output of SmallBlurPS() -uniform sampler2D largeBlurSampler : register(S2); // Blurred output of DofDownsample() -uniform sampler2D depthSampler : register(S3); // +TORQUE_UNIFORM_SAMPLER2D(colorSampler,0); // Original source image +TORQUE_UNIFORM_SAMPLER2D(smallBlurSampler,1); // Output of SmallBlurPS() +TORQUE_UNIFORM_SAMPLER2D(largeBlurSampler,2); // Blurred output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(depthSampler,3); + uniform float2 oneOverTargetSize; uniform float4 dofLerpScale; uniform float4 dofLerpBias; @@ -40,9 +41,9 @@ uniform float maxFarCoC; //static float4 dofLerpBias = float4( 1.0, (1.0 - d2) / d1, 1.0 / d2, (d2 - 1.0) / d2 ); //static float3 dofEqFar = float3( 2.0, 0.0, 1.0 ); -float4 tex2Doffset( sampler2D s, float2 tc, float2 offset ) +float4 tex2Doffset(TORQUE_SAMPLER2D(s), float2 tc, float2 offset) { - return tex2D( s, tc + offset * oneOverTargetSize ); + return TORQUE_TEX2D( s, tc + offset * oneOverTargetSize ); } half3 GetSmallBlurSample( float2 tc ) @@ -51,10 +52,10 @@ half3 GetSmallBlurSample( float2 tc ) const half weight = 4.0 / 17; sum = 0; // Unblurred sample done by alpha blending //sum += weight * tex2Doffset( colorSampler, tc, float2( 0, 0 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +0.5, -1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -1.5, -0.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -0.5, +1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +1.5, +0.5 ) ).rgb; + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+0.5, -1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-1.5, -0.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-0.5, +1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+1.5, +0.5)).rgb); return sum; } @@ -72,7 +73,7 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) //float4 dofLerpScale = float4( -1 / d0, -1 / d1, -1 / d2, 1 / d2 ); //float4 dofLerpBias = float4( 1, (1 d2) / d1, 1 / d2, (d2 1) / d2 ); - weights = saturate( t * dofLerpScale + dofLerpBias ); + weights = half4(saturate( t * dofLerpScale + dofLerpBias )); weights.yz = min( weights.yz, 1 - weights.xy ); // Unblurred sample with weight "weights.x" done by alpha blending @@ -84,11 +85,11 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) return half4( color, alpha ); } -half4 main( PFXVertToPix IN ) : COLOR +half4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //return half4( 1,0,1,1 ); - //return half4( tex2D( colorSampler, IN.uv0 ).rgb, 1.0 ); - //return half4( tex2D( colorSampler, texCoords ).rgb, 0 ); + //return half4( TORQUE_TEX2D( colorSampler, IN.uv0 ).rgb, 1.0 ); + //return half4( TORQUE_TEX2D( colorSampler, texCoords ).rgb, 0 ); half3 small; half4 med; half3 large; @@ -100,10 +101,10 @@ half4 main( PFXVertToPix IN ) : COLOR small = GetSmallBlurSample( IN.uv0 ); //small = half3( 1,0,0 ); //return half4( small, 1.0 ); - med = tex2D( smallBlurSampler, IN.uv1 ); + med = half4(TORQUE_TEX2D( smallBlurSampler, IN.uv1 )); //med.rgb = half3( 0,1,0 ); //return half4(med.rgb, 0.0); - large = tex2D( largeBlurSampler, IN.uv2 ).rgb; + large = half3(TORQUE_TEX2D(largeBlurSampler, IN.uv2).rgb); //large = half3( 0,0,1 ); //return large; //return half4(large.rgb,1.0); @@ -114,7 +115,7 @@ half4 main( PFXVertToPix IN ) : COLOR //med.rgb = large; //nearCoc = 0; - depth = prepassUncondition( depthSampler, float4( IN.uv3, 0, 0 ) ).w; + depth = half(TORQUE_PREPASS_UNCONDITION( depthSampler, IN.uv3 ).w); //return half4(depth.rrr,1); //return half4(nearCoc.rrr,1.0); @@ -128,8 +129,8 @@ half4 main( PFXVertToPix IN ) : COLOR // dofEqFar.x and dofEqFar.y specify the linear ramp to convert // to depth for the distant out-of-focus region. // dofEqFar.z is the ratio of the far to the near blur radius. - farCoc = clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC ); - coc = max( nearCoc, farCoc * dofEqFar.z ); + farCoc = half(clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC )); + coc = half(max( nearCoc, farCoc * dofEqFar.z )); //coc = nearCoc; } diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl index 91dfba0a2d..86c93701ad 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl @@ -59,7 +59,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); // + float2( -5, 1 ) * oneOverTargetSize; OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl index 084a2c014a..f4d29f3e1e 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl @@ -22,11 +22,11 @@ #include "./../postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5 / 1.3; //25f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl index e29746e961..b2d4582e02 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl @@ -24,13 +24,13 @@ #include "./../../torque.hlsl" -uniform float2 texSize0; uniform float4 rtParams0; +uniform float2 texSize0; uniform float2 oneOverTargetSize; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -47,7 +47,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); IN.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl index 6d41445769..175525a91e 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl @@ -24,22 +24,23 @@ // colorMapSampler, which is the same size as the render target. // The sample weights are 1/16 in the corners, 2/16 on the edges, // and 4/16 in the center. +#include "../../shaderModel.hlsl" -uniform sampler2D colorSampler; // Output of DofNearCoc() +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); // Output of DofNearCoc() struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; -float4 main( Pixel IN ) : COLOR +float4 main( Pixel IN ) : TORQUE_TARGET0 { float4 color; color = 0.0; - color += tex2D( colorSampler, IN.texCoords.xz ); - color += tex2D( colorSampler, IN.texCoords.yz ); - color += tex2D( colorSampler, IN.texCoords.xw ); - color += tex2D( colorSampler, IN.texCoords.yw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yw ); return color / 4.0; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl index 204f4639db..3edb1ec2a3 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl @@ -30,13 +30,13 @@ struct Vert { - float4 position : POSITION; + float3 position : POSITION; float2 texCoords : TEXCOORD0; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; @@ -47,7 +47,7 @@ Pixel main( Vert IN ) { Pixel OUT; const float4 halfPixel = { -0.5, 0.5, -0.5, 0.5 }; - OUT.position = IN.position; //Transform_ObjectToClip( IN.position ); + OUT.position = float4(IN.position,1.0); //Transform_ObjectToClip( IN.position ); //float2 uv = IN.texCoords + rtParams0.xy; float2 uv = viewportCoordToRenderTarget( IN.texCoords, rtParams0 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl b/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl index 9bfad955c7..38cb099c45 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl @@ -25,7 +25,7 @@ // These are set by the game engine. uniform sampler2D shrunkSampler; // Output of DofDownsample() -uniform sampler2D blurredSampler; // Blurred version of the shrunk sampler +uniform sampler2D blurredSampler; // Blurred version of the shrunk sampler out vec4 OUT_col; diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl index 90cf391dc8..fbd5290317 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl @@ -21,10 +21,10 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer :register(S0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return float4( tex2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); + return float4( TORQUE_TEX2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl index e45684199c..f5a71687d5 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl @@ -21,17 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer : register(S0), - uniform sampler2D backBuffer : register(S1), - uniform float2 targetSize : register(C0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer,0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = 1.0 / targetSize; // Sample edge buffer, bail if not on an edge - float edgeSample = tex2D(edgeBuffer, IN.uv0).r; + float edgeSample = TORQUE_TEX2D(edgeBuffer, IN.uv0).r; clip(edgeSample - 1e-6); // Ok we're on an edge, so multi-tap sample, average, and return @@ -58,7 +58,7 @@ float4 main( PFXVertToPix IN, float2 offsetUV = IN.uv1 + edgeSample * ( offsets[i] * 0.5 ) * pixelSize;//rtWidthHeightInvWidthNegHeight.zw; //offsetUV *= 0.999; - accumColor+= tex2D(backBuffer, offsetUV); + accumColor += TORQUE_TEX2D(backBuffer, offsetUV); } accumColor /= 9.0; diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl index bc79516ee3..2277126a8b 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl @@ -21,10 +21,12 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassBuffer,0); // GPU Gems 3, pg 443-444 -float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize) +float GetEdgeWeight(float2 uv0, in float2 targetSize) { float2 offsets[9] = { float2( 0.0, 0.0), @@ -44,10 +46,11 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize float Depth[9]; float3 Normal[9]; + [unroll] //no getting around this, may as well save the annoying warning message for(int i = 0; i < 9; i++) { float2 uv = uv0 + offsets[i] * PixelSize; - float4 gbSample = prepassUncondition( prepassBuffer, uv ); + float4 gbSample = TORQUE_PREPASS_UNCONDITION( prepassBuffer, uv ); Depth[i] = gbSample.a; Normal[i] = gbSample.rgb; } @@ -82,9 +85,9 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize return dot(normalResults, float4(1.0, 1.0, 1.0, 1.0)) * 0.25; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassBuffer :register(S0), - uniform float2 targetSize : register(C0) ) : COLOR0 +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return GetEdgeWeight(IN.uv0, prepassBuffer, targetSize );//rtWidthHeightInvWidthNegHeight.zw); + return GetEdgeWeight(IN.uv0, targetSize);//rtWidthHeightInvWidthNegHeight.zw); } diff --git a/Templates/Empty/game/shaders/common/postFx/flashP.hlsl b/Templates/Empty/game/shaders/common/postFx/flashP.hlsl index 3d9c6c7447..93daf3c26e 100644 --- a/Templates/Empty/game/shaders/common/postFx/flashP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/flashP.hlsl @@ -25,11 +25,11 @@ uniform float damageFlash; uniform float whiteOut; -uniform sampler2D backBuffer : register(S0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { - float4 color1 = tex2D(backBuffer, IN.uv0); + float4 color1 = TORQUE_TEX2D(backBuffer, IN.uv0); float4 color2 = color1 * MUL_COLOR; float4 damage = lerp(color1,color2,damageFlash); return lerp(damage,WHITE_COLOR,whiteOut); diff --git a/Templates/Empty/game/shaders/common/postFx/fogP.hlsl b/Templates/Empty/game/shaders/common/postFx/fogP.hlsl index 0eba9a7b7a..b54eea97af 100644 --- a/Templates/Empty/game/shaders/common/postFx/fogP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fogP.hlsl @@ -20,20 +20,21 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" + #include "./postFx.hlsl" #include "./../torque.hlsl" +#include "./../shaderModelAutoGen.hlsl" -uniform sampler2D prepassTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); uniform float3 eyePosWorld; uniform float4 fogColor; uniform float3 fogData; uniform float4 rtParams0; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; //return float4( depth, 0, 0, 0.7 ); float factor = computeSceneFog( eyePosWorld, diff --git a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl index 357b794e4f..269bfea673 100644 --- a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl @@ -20,38 +20,53 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + #define FXAA_PC 1 +#if (TORQUE_SM <= 30) #define FXAA_HLSL_3 1 +#elif TORQUE_SM < 49 +#define FXAA_HLSL_4 1 +#elif TORQUE_SM >=50 +#define FXAA_HLSL_5 1 +#endif #define FXAA_QUALITY__PRESET 12 #define FXAA_GREEN_AS_LUMA 1 #include "Fxaa3_11.h" -#include "../postFx.hlsl" struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -uniform sampler2D colorTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorTex, 0); uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + FxaaTex tex = colorTex; +#elif TORQUE_SM >=40 + FxaaTex tex; + tex.smpl = colorTex; + tex.tex = texture_colorTex; +#endif + return FxaaPixelShader( IN.uv0, // vertex position 0, // Unused... console stuff - colorTex, // The color back buffer + tex, // The color back buffer - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization oneOverTargetSize, diff --git a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl index ea2c3d106a..3bef0a4d36 100644 --- a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl @@ -25,7 +25,7 @@ struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl b/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl index dedfe8eb5a..6e284eb88a 100644 --- a/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl @@ -24,23 +24,30 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -uniform sampler2D backBuffer : register(S0); -uniform sampler1D colorCorrectionTex : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 1); uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 color = tex2D(backBuffer, IN.uv0.xy); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0.xy); // Apply the color correction. - color.r = tex1D( colorCorrectionTex, color.r ).r; - color.g = tex1D( colorCorrectionTex, color.g ).g; - color.b = tex1D( colorCorrectionTex, color.b ).b; + color.r = TORQUE_TEX1D( colorCorrectionTex, color.r ).r; + color.g = TORQUE_TEX1D( colorCorrectionTex, color.g ).g; + color.b = TORQUE_TEX1D( colorCorrectionTex, color.b ).b; // Apply gamma correction color.rgb = pow( abs(color.rgb), OneOverGamma ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + return color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl new file mode 100644 index 0000000000..01b072dd99 --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +uniform sampler2D diffuseMap; +uniform float strength; + +out vec4 OUT_col; + +in vec2 uv0; +in vec2 uv1; +in vec2 uv2; +in vec2 uv3; + +in vec2 uv4; +in vec2 uv5; +in vec2 uv6; +in vec2 uv7; + +void main() +{ + vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + OUT_col = vec4(0); + OUT_col += texture( diffuseMap, uv0 ) * kernel.x; + OUT_col += texture( diffuseMap, uv1 ) * kernel.y; + OUT_col += texture( diffuseMap, uv2 ) * kernel.z; + OUT_col += texture( diffuseMap, uv3 ) * kernel.w; + + OUT_col += texture( diffuseMap, uv4 ) * kernel.x; + OUT_col += texture( diffuseMap, uv5 ) * kernel.y; + OUT_col += texture( diffuseMap, uv6 ) * kernel.z; + OUT_col += texture( diffuseMap, uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); + OUT_col.a = dot( OUT_col.rgb, rgb2lum ); +} diff --git a/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl index 414a277d34..1bf5d1b8f1 100644 --- a/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl @@ -28,6 +28,8 @@ uniform sampler2D backBuffer; uniform sampler1D colorCorrectionTex; uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; in vec2 uv0; @@ -45,5 +47,11 @@ void main() // Apply gamma correction color.rgb = pow( abs(color.rgb), vec3(OneOverGamma) ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + OUT_col = color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl index d00bee26f9..9ebca32fa4 100644 --- a/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl @@ -39,7 +39,7 @@ out vec4 OUT_col; void main() { vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; - + OUT_col = vec4(0); OUT_col += texture( diffuseMap, uv0 ) * kernel.x; OUT_col += texture( diffuseMap, uv1 ) * kernel.y; @@ -55,5 +55,5 @@ void main() // can use alpha test to save fillrate. vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); OUT_col.a = dot( OUT_col.rgb, rgb2lum ); - + } diff --git a/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl b/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl index 65ae96c6fb..80f8ed02d4 100644 --- a/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl @@ -22,11 +22,11 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl b/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl index c9c9052ec9..b8f5cf9c28 100644 --- a/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl @@ -28,7 +28,7 @@ uniform float2 texSize0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -45,7 +45,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); float2 uv = IN.uv + (0.5f / texSize0); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl index c28f9eb83f..77f4b9915a 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -48,7 +47,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -62,7 +61,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (i - 4.0) * oneOverTargetSize.x; x = (i - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl index 93e6b83821..8381f6a5dc 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -47,7 +46,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -61,7 +60,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (fI - 4.0) * oneOverTargetSize.y; x = (fI - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl index c438a51539..9a8a93e979 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl @@ -21,12 +21,11 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" -uniform sampler2D inputTex : register(S0); -uniform sampler2D luminanceTex : register(S1); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); uniform float2 oneOverTargetSize; uniform float brightPassThreshold; uniform float g_fMiddleGray; @@ -40,17 +39,17 @@ static float2 gTapOffsets[4] = { -0.5, -0.5 }, { 0.5, 0.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 average = { 0.0f, 0.0f, 0.0f, 0.0f }; // Combine and average 4 samples from the source HDR texture. for( int i = 0; i < 4; i++ ) - average += hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); + average += hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); average *= 0.25f; // Determine the brightness of this particular pixel. - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; float lum = (g_fMiddleGray / (adaptedLum + 0.0001)) * hdrLuminance( average.rgb ); //float lum = hdrLuminance( average.rgb ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl index 3f443611c7..0f895070af 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl @@ -21,18 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D currLum : register( S0 ); -uniform sampler2D lastAdaptedLum : register( S1 ); +TORQUE_UNIFORM_SAMPLER2D(currLum, 0); +TORQUE_UNIFORM_SAMPLER2D(lastAdaptedLum, 1); uniform float adaptRate; uniform float deltaTime; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float fAdaptedLum = tex2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; - float fCurrentLum = tex2D( currLum, float2(0.5f, 0.5f) ).r; + float fAdaptedLum = TORQUE_TEX2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; + float fCurrentLum = TORQUE_TEX2D( currLum, float2(0.5f, 0.5f) ).r; // The user's adapted luminance level is simulated by closing the gap between // adapted luminance and current luminance by 2% every frame, based on a diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl index 3ce68452c5..01998af0ba 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl @@ -29,23 +29,24 @@ //----------------------------------------------------------------------------- struct VertIn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; + +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( VertIn IN, - uniform sampler2D inputTex : register(S0) ) : COLOR +float4 main( VertIn IN) : TORQUE_TARGET0 { // We calculate the texture coords // in the vertex shader as an optimization. float4 sample = 0.0f; for ( int i = 0; i < 8; i++ ) { - sample += tex2D( inputTex, IN.texCoords[i].xy ); - sample += tex2D( inputTex, IN.texCoords[i].zw ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].xy ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].zw ); } return sample / 16; diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl index 88794204ef..c9a34b7f4c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl @@ -29,19 +29,20 @@ struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; +uniform float2 targetSize; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( PFXVert In, - uniform float2 targetSize : register(C0) ) +Conn main( PFXVert In ) { Conn Out; - Out.hpos = In.pos; + Out.hpos = float4(In.pos,1.0); // Sample from the 16 surrounding points. Since the center point will be in // the exact center of 16 texels, a 0.5f offset is needed to specify a texel diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index 7ac71bebd5..b786b3f6a9 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -22,11 +22,13 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" -uniform sampler2D sceneTex : register( s0 ); -uniform sampler2D luminanceTex : register( s1 ); -uniform sampler2D bloomTex : register( s2 ); -uniform sampler1D colorCorrectionTex : register( s3 ); +TORQUE_UNIFORM_SAMPLER2D(sceneTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); +TORQUE_UNIFORM_SAMPLER2D(bloomTex, 2); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 4); uniform float2 texSize0; uniform float2 texSize2; @@ -34,20 +36,20 @@ uniform float2 texSize2; uniform float g_fEnableToneMapping; uniform float g_fMiddleGray; uniform float g_fWhiteCutoff; - uniform float g_fEnableBlueShift; -uniform float3 g_fBlueShiftColor; +uniform float3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( sceneTex, IN.uv0 ) ); - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; - float4 bloom = tex2D( bloomTex, IN.uv0 ); + float4 sample = hdrDecode( TORQUE_TEX2D( sceneTex, IN.uv0 ) ); + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float4 bloom = TORQUE_TEX2D( bloomTex, IN.uv0 ); // For very low light conditions, the rods will dominate the perception // of light, and therefore color will be desaturated and shifted @@ -81,15 +83,24 @@ float4 main( PFXVertToPix IN ) : COLOR0 } // Add the bloom effect. - sample += g_fBloomScale * bloom; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + if (depth>0.9999) + sample += g_fBloomScale * bloom; // Apply the color correction. - sample.r = tex1D( colorCorrectionTex, sample.r ).r; - sample.g = tex1D( colorCorrectionTex, sample.g ).g; - sample.b = tex1D( colorCorrectionTex, sample.b ).b; + sample.r = TORQUE_TEX1D( colorCorrectionTex, sample.r ).r; + sample.g = TORQUE_TEX1D( colorCorrectionTex, sample.g ).g; + sample.b = TORQUE_TEX1D( colorCorrectionTex, sample.b ).b; + // Apply gamma correction sample.rgb = pow( abs(sample.rgb), g_fOneOverGamma ); + + // Apply contrast + sample.rgb = ((sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + sample.rgb += Brightness; return sample; } diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index 38762baa5e..24a516e79c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -23,11 +23,13 @@ #include "../../../gl/torque.glsl" #include "../../../gl/hlslCompat.glsl" #include "../../gl/postFX.glsl" +#include "shadergen:/autogenConditioners.h" uniform sampler2D sceneTex; uniform sampler2D luminanceTex; uniform sampler2D bloomTex; uniform sampler1D colorCorrectionTex; +uniform sampler2D prepassTex; uniform vec2 texSize0; uniform vec2 texSize2; @@ -42,6 +44,8 @@ uniform vec3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; out vec4 OUT_col; @@ -84,7 +88,9 @@ void main() } // Add the bloom effect. - _sample += g_fBloomScale * bloom; + float depth = prepassUncondition( prepassTex, IN_uv0 ).w; + if (depth>0.9999) + _sample += g_fBloomScale * bloom; // Apply the color correction. _sample.r = texture( colorCorrectionTex, _sample.r ).r; @@ -93,6 +99,12 @@ void main() // Apply gamma correction _sample.rgb = pow( abs(_sample.rgb), vec3(g_fOneOverGamma) ); + + // Apply contrast + _sample.rgb = ((_sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + _sample.rgb += Brightness; OUT_col = _sample; } diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl index 593a24e7b1..505d1b825f 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl @@ -22,15 +22,14 @@ #include "../postFx.hlsl" #include "../../torque.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float brightPassThreshold; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( inputTex, IN.uv0 ) ); + float4 sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 ) ); // Determine the brightness of this particular pixel. float lum = hdrLuminance( sample.rgb ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl index 39fd9dccca..2e23ece1f2 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl @@ -23,7 +23,7 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 texSize0; uniform float g_fMinLuminace; @@ -36,7 +36,7 @@ static float2 gTapOffsets[9] = }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tsize = 1.0 / texSize0; @@ -46,7 +46,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 9; i++ ) { // Decode the hdr value. - sample = hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); + sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); // Get the luminance and add it to the average. float lum = max( hdrLuminance( sample ), g_fMinLuminace ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl index 59e91f0db3..46ed6fc70c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl @@ -22,7 +22,7 @@ #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; @@ -34,7 +34,7 @@ static float2 gTapOffsets[16] = { -1.5, 1.5 }, { -0.5, 1.5 }, { 0.5, 1.5 }, { 1.5, 1.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = oneOverTargetSize; @@ -42,7 +42,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 16; i++ ) { - float lum = tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; + float lum = TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; average += lum; } diff --git a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl index e8870b3c42..b70bafa98c 100644 --- a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl @@ -20,29 +20,29 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../postFx.hlsl" -uniform sampler2D backBuffer : register( s0 ); // The original backbuffer. -uniform sampler2D prepassTex : register( s1 ); // The pre-pass depth and normals. +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); uniform float brightScalar; static const float3 LUMINANCE_VECTOR = float3(0.3125f, 0.6154f, 0.0721f); -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 col = float4( 0, 0, 0, 1 ); // Get the depth at this pixel. - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; // If the depth is equal to 1.0, read from the backbuffer // and perform the exposure calculation on the result. if ( depth >= 0.999 ) { - col = tex2D( backBuffer, IN.uv0 ); + col = TORQUE_TEX2D( backBuffer, IN.uv0 ); //col = 1 - exp(-120000 * col); col += dot( col.rgb, LUMINANCE_VECTOR ) + 0.0001f; diff --git a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl index ff44abfae5..0328947101 100644 --- a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl @@ -22,28 +22,29 @@ #include "../postFx.hlsl" -uniform sampler2D frameSampler : register( s0 ); -uniform sampler2D backBuffer : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(frameSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); + uniform float3 camForward; +uniform int numSamples; uniform float3 lightDirection; +uniform float density; uniform float2 screenSunPos; uniform float2 oneOverTargetSize; -uniform int numSamples; -uniform float density; uniform float weight; uniform float decay; uniform float exposure; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 texCoord = float4( IN.uv0.xy, 0, 0 ); // Store initial sample. - half3 color = (half3)tex2D( frameSampler, texCoord.xy ).rgb; + half3 color = (half3)TORQUE_TEX2D( frameSampler, texCoord.xy ).rgb; // Store original bb color. - float4 bbCol = tex2D( backBuffer, IN.uv1 ); + float4 bbCol = TORQUE_TEX2D( backBuffer, IN.uv1 ); // Set up illumination decay factor. half illuminationDecay = 1.0; @@ -68,7 +69,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 texCoord.xy -= deltaTexCoord; // Retrieve sample at new location. - half3 sample = (half3)tex2Dlod( frameSampler, texCoord ); + half3 sample = (half3)TORQUE_TEX2DLOD( frameSampler, texCoord ); // Apply sample attenuation scale/decay factors. sample *= half(illuminationDecay * weight); diff --git a/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl index 348484f4de..8bc65fbc69 100644 --- a/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl @@ -22,23 +22,22 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" uniform float4x4 matPrevScreenToWorld; uniform float4x4 matWorldToScreen; // Passed in from setShaderConsts() uniform float velocityMultiplier; +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); -uniform sampler2D backBuffer : register(S0); -uniform sampler2D prepassTex : register(S1); - -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { float samples = 5; // First get the prepass texture for uv channel 0 - float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prepass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); // Next extract the depth float depth = prepass.a; @@ -58,12 +57,12 @@ float4 main(PFXVertToPix IN) : COLOR0 float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; // Generate the motion blur - float4 color = tex2D(backBuffer, IN.uv0); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0); IN.uv0 += velocity; for(int i = 1; i= 10 && TORQUE_SM <=30) + // Semantics + #define TORQUE_POSITION POSITION + #define TORQUE_DEPTH DEPTH + #define TORQUE_TARGET0 COLOR0 + #define TORQUE_TARGET1 COLOR1 + #define TORQUE_TARGET2 COLOR2 + #define TORQUE_TARGET3 COLOR3 + + // Sampler uniforms + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform sampler1D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform sampler2D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform sampler3D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform samplerCUBE tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) tex1D(tex,coords) + #define TORQUE_TEX2D(tex,coords) tex2D(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) tex2Dproj(tex,coords) //this really is sm 2 or later + #define TORQUE_TEX3D(tex,coords) tex3D(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texCUBE(tex,coords) + + //Shader model 3.0 only + #if TORQUE_SM == 30 + #define TORQUE_VPOS VPOS // This is a float2 + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) tex2Dlod(tex,coords) + #endif + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) sampler2D tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) samplerCUBE tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) tex +// Shader model 4.0+ +#elif TORQUE_SM >= 40 + #define TORQUE_POSITION SV_Position + #define TORQUE_DEPTH SV_Depth + #define TORQUE_VPOS SV_Position //note float4 compared to SM 3 where it is a float2 + #define TORQUE_TARGET0 SV_Target0 + #define TORQUE_TARGET1 SV_Target1 + #define TORQUE_TARGET2 SV_Target2 + #define TORQUE_TARGET3 SV_Target3 + // Sampler uniforms + //1D is emulated to a 2D for now + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform Texture3D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform TextureCube texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) texture_##tex.Sample(tex,coords.xy / coords.w) + #define TORQUE_TEX3D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texture_##tex.Sample(tex,coords) + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) texture_##tex.SampleLevel(tex,coords.xy,coords.w) + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) Texture2D texture_##tex, SamplerState tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) texture_##tex, tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) TextureCube texture_##tex, SamplerState tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) texture_##tex, tex +#endif + +#endif // _TORQUE_SHADERMODEL_ + diff --git a/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl b/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl new file mode 100644 index 0000000000..4f2d8803f4 --- /dev/null +++ b/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TORQUE_SHADERMODEL_AUTOGEN_ +#define _TORQUE_SHADERMODEL_AUTOGEN_ + +#include "shadergen:/autogenConditioners.h" + +// Portability helpers for autogenConditioners +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, coords) +#elif TORQUE_SM >= 40 + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, texture_##tex, coords) +#endif + +#endif //_TORQUE_SHADERMODEL_AUTOGEN_ diff --git a/Templates/Empty/game/shaders/common/terrain/blendP.hlsl b/Templates/Empty/game/shaders/common/terrain/blendP.hlsl index f710889288..aeef9d6e3d 100644 --- a/Templates/Empty/game/shaders/common/terrain/blendP.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/blendP.hlsl @@ -21,25 +21,28 @@ //----------------------------------------------------------------------------- #include "terrain.hlsl" +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -float4 main( ConnectData IN, - uniform sampler2D layerTex : register(S0), - uniform sampler2D textureMap : register(S1), - uniform float texId, - uniform float layerSize ) : COLOR +TORQUE_UNIFORM_SAMPLER2D(layerTex, 0); +TORQUE_UNIFORM_SAMPLER2D(textureMap, 1); + +uniform float texId; +uniform float layerSize; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 layerSample = round( tex2D( layerTex, IN.layerCoord ) * 255.0f ); + float4 layerSample = round( TORQUE_TEX2D( layerTex, IN.layerCoord ) * 255.0f ); float blend = calcBlend( texId, IN.layerCoord, layerSize, layerSample ); clip( blend - 0.0001 ); - return float4( tex2D( textureMap, IN.texCoord ).rgb, blend ); + return float4( TORQUE_TEX2D(textureMap, IN.texCoord).rgb, blend); } diff --git a/Templates/Empty/game/shaders/common/terrain/blendV.hlsl b/Templates/Empty/game/shaders/common/terrain/blendV.hlsl index 7a79d2de4d..9ccd33301b 100644 --- a/Templates/Empty/game/shaders/common/terrain/blendV.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/blendV.hlsl @@ -23,6 +23,8 @@ /// The vertex shader used in the generation and caching of the /// base terrain texture. +#include "../shaderModel.hlsl" + struct VertData { float3 position : POSITION; @@ -31,17 +33,18 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -ConnectData main( VertData IN, - uniform float2 texScale : register(C0) ) +uniform float2 texScale; + +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = float4( IN.position.xyz, 1 ); + OUT.hpos = float4( IN.position, 1 ); OUT.layerCoord = IN.texCoord; OUT.texCoord = IN.texCoord * texScale; diff --git a/Templates/Empty/game/shaders/common/terrain/terrain.glsl b/Templates/Empty/game/shaders/common/terrain/terrain.glsl index 79f80888c8..756edd553c 100644 --- a/Templates/Empty/game/shaders/common/terrain/terrain.glsl +++ b/Templates/Empty/game/shaders/common/terrain/terrain.glsl @@ -32,6 +32,7 @@ float calcBlend( float texId, vec2 layerCoord, float layerSize, vec4 layerSample vec4 diff = clamp( abs( layerSample - texId ), 0.0, 1.0 ); float noBlend = float(any( bvec4(1 - diff) )); + // Check if any of the layer samples // match the current texture id. vec4 factors = vec4(0); for(int i = 0; i < 4; i++) diff --git a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl index 8ce497012c..b7c87e6180 100644 --- a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl @@ -35,6 +35,7 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa // Check if any of the layer samples // match the current texture id. float4 factors = 0; + [unroll] for(int i = 0; i < 4; i++) if(layerSample[i] == texId) factors[i] = 1; diff --git a/Templates/Empty/game/shaders/common/torque.hlsl b/Templates/Empty/game/shaders/common/torque.hlsl index 1d253936b6..3521042d4a 100644 --- a/Templates/Empty/game/shaders/common/torque.hlsl +++ b/Templates/Empty/game/shaders/common/torque.hlsl @@ -23,6 +23,7 @@ #ifndef _TORQUE_HLSL_ #define _TORQUE_HLSL_ +#include "./shaderModel.hlsl" static float M_HALFPI_F = 1.57079632679489661923f; static float M_PI_F = 3.14159265358979323846f; @@ -137,29 +138,29 @@ float3x3 quatToMat( float4 quat ) /// @param negViewTS The negative view vector in tangent space. /// @param depthScale The parallax factor used to scale the depth result. /// -float2 parallaxOffset( sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale ) +float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D( texMap, texCoord ).a; - float2 offset = negViewTS.xy * ( depth * depthScale ); + float depth = TORQUE_TEX2D(texMap, texCoord).a; + float2 offset = negViewTS.xy * (depth * depthScale); - for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ ) + for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = ( depth + tex2D( texMap, texCoord + offset ).a ) * 0.5; - offset = negViewTS.xy * ( depth * depthScale ); + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a) * 0.5; + offset = negViewTS.xy * (depth * depthScale); } return offset; } /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha -float2 parallaxOffsetDxtnm(sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale) +float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D(texMap, texCoord).r; + float depth = TORQUE_TEX2D(texMap, texCoord).r; float2 offset = negViewTS.xy * (depth * depthScale); for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = (depth + tex2D(texMap, texCoord + offset).r) * 0.5; + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r) * 0.5; offset = negViewTS.xy * (depth * depthScale); } @@ -277,5 +278,37 @@ void fizzle(float2 vpos, float visibility) clip( visibility - frac( determinant( m ) ) ); } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, int num) +{ + int process = round(flags * 255); + int squareNum = pow(2, num); + return (fmod(process, pow(2, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +// Encodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return float4(pow(abs(tex.rgb), 2.2), tex.a); +} +// Encodes gamma. +float4 toGamma(float4 tex) +{ + return float4(pow(abs(tex.rgb), 1.0/2.2), tex.a); +} +#endif // #endif // _TORQUE_HLSL_ diff --git a/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl b/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl index 82c4210316..1d5a07c3f2 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl @@ -120,6 +120,7 @@ void main() { // Modulate baseColor by the ambientColor. vec4 waterBaseColor = baseColor * vec4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... vec3 bumpNorm = ( texture( bumpMap, IN_rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; diff --git a/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl b/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl index 1634fd2de3..e92c948e9c 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl @@ -72,7 +72,6 @@ uniform float undulateMaxDist; in vec4 vPosition; in vec3 vNormal; -in vec4 vColor; in vec2 vTexCoord0; in vec4 vTexCoord1; diff --git a/Templates/Empty/game/shaders/common/water/gl/waterP.glsl b/Templates/Empty/game/shaders/common/water/gl/waterP.glsl index af151020aa..a68ede84e6 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterP.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterP.glsl @@ -295,7 +295,7 @@ void main() foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - vec4 refMapColor = hdrDecode( texture( reflectMap, reflectCoord ) ); + vec4 refMapColor = texture( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. refMapColor = mix( refMapColor, texture( skyMap, reflectionVec ), NO_REFLECT ); @@ -324,6 +324,7 @@ void main() // Calculate the water "base" color based on depth. vec4 waterBaseColor = baseColor * texture( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= vec4( ambientColor.rgb, 1 ); diff --git a/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl b/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl index d27b28c675..efb4377799 100644 --- a/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl @@ -57,7 +57,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -92,11 +92,11 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); //uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); +TORQUE_UNIFORM_SAMPLER2D(reflectMap,2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff,3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap,4); //uniform sampler foamMap : register( S5 ); uniform float4 baseColor; uniform float4 miscParams; @@ -113,15 +113,16 @@ uniform float4x4 modelMat; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Modulate baseColor by the ambientColor. float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -135,7 +136,7 @@ float4 main( ConnectData IN ) : COLOR distortPos.xy += bumpNorm.xy * distortAmt; #ifdef UNDERWATER - return hdrEncode( tex2Dproj( refractBuff, distortPos ) ); + return hdrEncode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); #else float3 eyeVec = IN.objPos.xyz - eyePos; @@ -153,16 +154,16 @@ float4 main( ConnectData IN ) : COLOR float fakeColorAmt = ang; // Get reflection map color - float4 refMapColor = hdrDecode( tex2Dproj( reflectMap, distortPos ) ); + float4 refMapColor = hdrDecode( TORQUE_TEX2DPROJ( reflectMap, distortPos ) ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); //return refMapColor; // Get refract color - float4 refractColor = hdrDecode( tex2Dproj( refractBuff, distortPos ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); // calc "diffuse" color by lerping from the water color // to refraction image based on the water clarity. @@ -197,7 +198,7 @@ float4 main( ConnectData IN ) : COLOR // Fog it. float factor = computeSceneFog( eyePos, - IN.objPos, + IN.objPos.xyz, WORLD_Z, fogData.x, fogData.y, diff --git a/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl b/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl index 2c201e6752..310647c902 100644 --- a/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl @@ -20,12 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -33,7 +34,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -95,21 +96,21 @@ ConnectData main( VertData IN ) // IN.position.xy += offsetXY; // IN.undulateData += offsetXY; // } - - float4 worldPos = mul( modelMat, IN.position ); + float4 inPos = float4(IN.position, 1.0); + float4 worldPos = mul(modelMat, inPos); IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); //OUT.objPos = worldPos; - OUT.objPos.xyz = IN.position.xyz; + OUT.objPos.xyz = IN.position; OUT.objPos.w = worldPos.z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. - float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 ) ); + float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 )).xy; //if ( undulatePos.x < 0 ) // undulatePos = IN.position.xy; @@ -128,12 +129,12 @@ ConnectData main( VertData IN ) float undulateFade = 1; // Scale down wave magnitude amount based on distance from the camera. - float dist = distance( IN.position.xyz, eyePos ); + float dist = distance( IN.position, eyePos ); dist = clamp( dist, 1.0, undulateMaxDist ); undulateFade *= ( 1 - dist / undulateMaxDist ); // Also scale down wave magnitude if the camera is very very close. - undulateFade *= saturate( ( distance( IN.position.xyz, eyePos ) - 0.5 ) / 10.0 ); + undulateFade *= saturate( ( distance( IN.position, eyePos ) - 0.5 ) / 10.0 ); undulateAmt *= undulateFade; @@ -141,7 +142,7 @@ ConnectData main( VertData IN ) //undulateAmt = 0; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Save worldSpace position of this pixel/vert @@ -210,7 +211,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); } binormal = normalize( binormal ); diff --git a/Templates/Empty/game/shaders/common/water/waterP.hlsl b/Templates/Empty/game/shaders/common/water/waterP.hlsl index 851fb471f6..ac66e9b28d 100644 --- a/Templates/Empty/game/shaders/common/water/waterP.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" //----------------------------------------------------------------------------- @@ -69,7 +69,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -105,13 +105,13 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); -uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); -uniform sampler foamMap : register( S5 ); -uniform sampler1D depthGradMap : register( S6 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); +TORQUE_UNIFORM_SAMPLER2D(reflectMap, 2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff, 3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap, 4); +TORQUE_UNIFORM_SAMPLER2D(foamMap, 5); +TORQUE_UNIFORM_SAMPLER1D(depthGradMap, 6); uniform float4 specularParams; uniform float4 baseColor; uniform float4 miscParams; @@ -138,12 +138,12 @@ uniform float reflectivity; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -155,7 +155,7 @@ float4 main( ConnectData IN ) : COLOR float2 prepassCoord = viewportCoordToRenderTarget( IN.posPostWave, rtParams1 ); - float startDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float startDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; // The water depth in world units of the undistorted pixel. float startDelta = ( startDepth - pixelDepth ); @@ -180,7 +180,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - float prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; @@ -212,7 +212,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; delta = ( prepassDepth - pixelDepth ) * farPlaneDist; @@ -260,8 +260,8 @@ float4 main( ConnectData IN ) : COLOR IN.foamTexCoords.xy += foamRippleOffset; IN.foamTexCoords.zw += foamRippleOffset; - float4 foamColor = tex2D( foamMap, IN.foamTexCoords.xy ); - foamColor += tex2D( foamMap, IN.foamTexCoords.zw ); + float4 foamColor = TORQUE_TEX2D( foamMap, IN.foamTexCoords.xy ); + foamColor += TORQUE_TEX2D( foamMap, IN.foamTexCoords.zw ); foamColor = saturate( foamColor ); // Modulate foam color by ambient color @@ -282,18 +282,18 @@ float4 main( ConnectData IN ) : COLOR foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - float4 refMapColor = hdrDecode( tex2D( reflectMap, reflectCoord ) ); + float4 refMapColor = TORQUE_TEX2D( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); - fakeColor = ( texCUBE( skyMap, reflectionVec ) ); + fakeColor = ( TORQUE_TEXCUBE( skyMap, reflectionVec ) ); fakeColor.a = 1; // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); // Get refract color - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); // We darken the refraction color a bit to make underwater // elements look wet. We fade out this darkening near the @@ -310,7 +310,8 @@ float4 main( ConnectData IN ) : COLOR float fogAmt = 1.0 - saturate( exp( -FOG_DENSITY * fogDelta ) ); // Calculate the water "base" color based on depth. - float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) ); + float4 waterBaseColor = baseColor * TORQUE_TEX1D( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= float4( ambientColor.rgb, 1 ); @@ -353,7 +354,7 @@ float4 main( ConnectData IN ) : COLOR #else - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); float4 OUT = refractColor; #endif diff --git a/Templates/Empty/game/shaders/common/water/waterV.hlsl b/Templates/Empty/game/shaders/common/water/waterV.hlsl index d2b097bc54..c869f0e9fa 100644 --- a/Templates/Empty/game/shaders/common/water/waterV.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterV.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -35,7 +35,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -94,12 +94,12 @@ ConnectData main( VertData IN ) 0.0, 0.0, 0.0, 1.0 }; IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); - - OUT.objPos = IN.position; - OUT.objPos.w = mul( modelMat, IN.position ).z; + float4 inPos = float4( IN.position, 1.0); + OUT.objPos = inPos; + OUT.objPos.w = mul( modelMat, inPos ).z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. @@ -132,7 +132,7 @@ ConnectData main( VertData IN ) OUT.rippleTexCoord2.w = saturate( OUT.rippleTexCoord2.w - 0.2 ) / 0.8; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Convert to screen @@ -197,7 +197,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); } binormal = binormal; diff --git a/Templates/Empty/game/shaders/common/wavesP.hlsl b/Templates/Empty/game/shaders/common/wavesP.hlsl index 265842f1fb..c51eb4b895 100644 --- a/Templates/Empty/game/shaders/common/wavesP.hlsl +++ b/Templates/Empty/game/shaders/common/wavesP.hlsl @@ -22,13 +22,14 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Data //----------------------------------------------------------------------------- struct v2f { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float2 TEX0 : TEXCOORD0; float4 tangentToCube0 : TEXCOORD1; float4 tangentToCube1 : TEXCOORD2; @@ -42,21 +43,23 @@ struct v2f struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +// Uniforms +TORQUE_UNIFORM_SAMPLER2D(diffMap,0); +//TORQUE_UNIFORM_SAMPLERCUBE(cubeMap, 1); not used? +TORQUE_UNIFORM_SAMPLER2D(bumpMap,2); + +uniform float4 specularColor : register(PC_MAT_SPECCOLOR); +uniform float4 ambient : register(PC_AMBIENT_COLOR); +uniform float specularPower : register(PC_MAT_SPECPOWER); +uniform float accumTime : register(PC_ACCUM_TIME); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main(v2f IN, - uniform sampler2D diffMap : register(S0), - uniform sampler2D bumpMap : register(S2), - uniform samplerCUBE cubeMap : register(S1), - uniform float4 specularColor : register(PC_MAT_SPECCOLOR), - uniform float specularPower : register(PC_MAT_SPECPOWER), - uniform float4 ambient : register(PC_AMBIENT_COLOR), - uniform float accumTime : register(PC_ACCUM_TIME) -) +Fragout main(v2f IN) { Fragout OUT; @@ -68,8 +71,8 @@ Fragout main(v2f IN, texOffset.y = IN.TEX0.y + cos( accumTime * 3.0 + IN.TEX0.x * 6.28319 * 2.0 ) * 0.05; - float4 bumpNorm = tex2D( bumpMap, texOffset ) * 2.0 - 1.0; - float4 diffuse = tex2D( diffMap, texOffset ); + float4 bumpNorm = TORQUE_TEX2D( bumpMap, texOffset ) * 2.0 - 1.0; + float4 diffuse = TORQUE_TEX2D( diffMap, texOffset ); OUT.col = diffuse * (saturate( dot( IN.lightVec, bumpNorm.xyz ) ) + ambient); diff --git a/Templates/Empty/game/shaders/common/wavesV.hlsl b/Templates/Empty/game/shaders/common/wavesV.hlsl index 6580daa5b4..fccef9d257 100644 --- a/Templates/Empty/game/shaders/common/wavesV.hlsl +++ b/Templates/Empty/game/shaders/common/wavesV.hlsl @@ -22,7 +22,7 @@ #define IN_HLSL #include "shdrConsts.h" -#include "hlslStructs.h" +#include "hlslStructs.hlsl" //----------------------------------------------------------------------------- // Constants @@ -42,21 +42,20 @@ struct Conn }; +uniform float4x4 modelview : register(VC_WORLD_PROJ); +uniform float3x3 cubeTrans : register(VC_CUBE_TRANS); +uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS); +uniform float3 inLightVec : register(VC_LIGHT_DIR1); +uniform float3 eyePos : register(VC_EYE_POS); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( VertexIn_PNTTTB In, - uniform float4x4 modelview : register(VC_WORLD_PROJ), - uniform float3x3 cubeTrans : register(VC_CUBE_TRANS), - uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS), - uniform float3 inLightVec : register(VC_LIGHT_DIR1), - uniform float3 eyePos : register(VC_EYE_POS) -) +Conn main( VertexIn_PNTTTB In) { Conn Out; - Out.HPOS = mul(modelview, In.pos); + Out.HPOS = mul(modelview, float4(In.pos,1.0)); Out.TEX0 = In.uv0; diff --git a/Templates/Empty/game/tools/classIcons/GuiRadioCtrl.png b/Templates/Empty/game/tools/classIcons/GuiRadioCtrl.png index 80c839747e..062f90af2a 100644 Binary files a/Templates/Empty/game/tools/classIcons/GuiRadioCtrl.png and b/Templates/Empty/game/tools/classIcons/GuiRadioCtrl.png differ diff --git a/Templates/Empty/game/tools/classIcons/VolumetricFog.png b/Templates/Empty/game/tools/classIcons/VolumetricFog.png new file mode 100644 index 0000000000..5dc516cb53 Binary files /dev/null and b/Templates/Empty/game/tools/classIcons/VolumetricFog.png differ diff --git a/Templates/Empty/game/tools/gui/colorPicker.ed.gui b/Templates/Empty/game/tools/gui/colorPicker.ed.gui index 18dad276e4..c203ca52e3 100644 --- a/Templates/Empty/game/tools/gui/colorPicker.ed.gui +++ b/Templates/Empty/game/tools/gui/colorPicker.ed.gui @@ -1,289 +1,722 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiColorPickerCtrl(ColorPickerDlg,EditorGuiGroup) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; + displayMode = "Dropper"; // this makes the background visible + actionOnMove = "1"; position = "0 0"; - Extent = "800 600"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - DisplayMode = "Dropper"; // this makes the background visible - ActionOnMove = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiWindowCtrl(GuiPickerDlg) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiWindowProfile"; - HorizSizing = "windowRelative"; - VertSizing = "windowRelative"; - position = "170 100"; - Extent = "348 347"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; text = "Color Picker"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "DoColorPickerCancelCallback(); ColorPickerDlg.getRoot().popDialog(ColorPickerDlg);"; - + position = "170 100"; + extent = "439 317"; + minExtent = "8 2"; + horizSizing = "windowRelative"; + vertSizing = "windowRelative"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + new GuiBitmapBorderCtrl(){ // color blend - Profile = "ToolsGuiGroupBorderProfile"; position = "3 24"; - Extent = "255 258"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorBlendSelect) { + baseColor = "1 0 0 1"; + pickColor = "0 0 0 1"; + selectorGap = "1"; + displayMode = "BlendColor"; + actionOnMove = "1"; + position = "1 0"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updateRGBValues(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl(){ // Hue - Profile = "ToolsGuiGroupBorderProfile"; position = "263 23"; - Extent = "25 261"; + extent = "25 261"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorRangeSelect) { + baseColor = "1 0 0 1"; + pickColor = "1 0 0 1"; + selectorGap = "1"; + displayMode = "VertColor"; + actionOnMove = "1"; + position = "1 1"; + extent = "21 257"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updatePickerBaseColor(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiTextCtrl() { + text = "New"; + position = "306 22"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; new GuiBitmapBorderCtrl(){ // new old color - Profile = "ToolsGuiGroupBorderProfile"; position = "292 37"; - Extent = "52 99"; - }; - new GuiBitmapBorderCtrl(){ // rgb - Profile = "ToolsGuiGroupBorderProfile"; - position = "292 209"; - Extent = "52 75"; - }; - new GuiBitmapBorderCtrl(){ // alpha - Profile = "ToolsGuiGroupBorderProfile"; - position = "3 287"; - Extent = "341 24"; - }; - new GuiColorPickerCtrl(ColorBlendSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "3 24"; - Extent = "255 258"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - command = "updateRGBValues(1);"; + extent = "52 99"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "0 0 0 1"; - SelectorGap = "1"; - DisplayMode = "BlendColor"; - ActionOnMove = "1"; - }; - new GuiColorPickerCtrl(ColorRangeSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "264 24"; - Extent = "21 257"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - Command = "updatePickerBaseColor(1);"; - hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "1 0 0 1"; - SelectorGap = "1"; - DisplayMode = "VertColor"; - ActionOnMove = "1"; - }; - new GuiTextCtrl() { canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 215"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "R"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_R_Val) { // Red Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 215"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + + new GuiSwatchButtonCtrl(myColor){ // New Color // + position = "1 1"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; + new GuiSwatchButtonCtrl(oldColor){ // Old Color // + position = "1 48"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; }; new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "297 238"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "G"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_G_Val) { // Green Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 238"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + text = "Old"; + position = "310 138"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 261"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + new GuiBitmapBorderCtrl(){ // Color Text Fields + position = "291 165"; + extent = "141 118"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "B"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 261"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; - }; - - - new GuiControl() { - class = "AggregateControl"; - position = "2 290"; - Extent = "341 18"; - - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "267 0"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { // rgb + position = "4 0"; + extent = "52 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "Alpha"; - maxLength = "255"; - }; - new GuiSliderCtrl(ColorAlphaSelect) { - internalName = "slider"; - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "5 3"; - Extent = "251 13"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "R"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_R_Val) { // Red Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + }; + new GuiTextCtrl() { + text = "G"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_G_Val) { // Green Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + }; + }; + new GuiControl() { + position = "71 0"; + extent = "61 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - range = "0 1"; - ticks = "0"; - value = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "H"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_H_Val) { // Hue Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + }; + new GuiTextCtrl() { + text = "o"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 2"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "S"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_S_Val) { // Saturation Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 29"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_Br_Val) { // Brightness Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 52"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; - new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal - internalName = "textEdit"; - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "305 0"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + new GuiControl() { + position = "3 87"; + extent = "138 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "#"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "3 5"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(HexColor_Val) { // Hex Color Field + text = "0"; + maxLength = "6"; + position = "13 5"; + extent = "116 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + command = "$thisControl.onKeyDown();"; + }; }; }; - new GuiSwatchButtonCtrl(myColor){ // New Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 38"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "New"; - position = "306 22"; - Extent = "26 14"; - }; - new GuiSwatchButtonCtrl(oldColor){ // Old Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 85"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "Old"; - position = "310 138"; - Extent = "26 14"; + new GuiBitmapBorderCtrl(){ // alpha + position = "3 287"; + extent = "429 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { + position = "-1 3"; + extent = "428 18"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "AggregateControl"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl(ColorAlphaSelect) { + range = "0 1"; + ticks = "0"; + value = "1"; + position = "5 3"; + extent = "341 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + internalName = "slider"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Alpha"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "355 0"; + extent = "28 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal + text = "0"; + maxLength = "4"; + position = "392 0"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + internalName = "TextEdit"; + }; + }; }; new GuiButtonCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "144 316"; - Extent = "115 24"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCallback();"; - hovertime = "1000"; text = "Select"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - }; - new GuiButtonCtrl() { - canSaveDynamicFields = "0"; + position = "349 37"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "268 316"; - Extent = "73 24"; - MinExtent = "8 2"; canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCancelCallback();"; - hovertime = "1000"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl() { text = "Cancel"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; + position = "349 68"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCancelCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -294,26 +727,6 @@ $ColorPickerCancelCallback = ""; $ColorPickerUpdateCallback = ""; $ColorCallbackType = 1; // ColorI -function ColorFloatToInt( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return mCeil( %red * 255 ) SPC mCeil( %green * 255 ) SPC mCeil( %blue * 255 ) SPC mCeil( %alpha * 255 ); -} - -function ColorIntToFloat( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return ( %red / 255 ) SPC ( %green / 255 ) SPC ( %blue / 255 ) SPC ( %alpha / 255 ); -} - // This function pushes the color picker dialog and returns to a callback the selected value function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCallback ) { @@ -333,15 +746,18 @@ function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 255"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0) / 255; - %green = getWord(%currentColor, 1) / 255; - %blue = getWord(%currentColor, 2) / 255; + %red = getWord(%currentColor, 0); + %green = getWord(%currentColor, 1); + %blue = getWord(%currentColor, 2); %alpha = getWord(%currentColor, 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -371,15 +787,18 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 1"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0); - %green = getWord(%currentColor, 1); - %blue = getWord(%currentColor, 2); - %alpha = getWord(%currentColor, 3); + %red = mRoundColour(getWord(%currentColor, 0), 3); + %green = mRoundColour(getWord(%currentColor, 1), 3); + %blue = mRoundColour(getWord(%currentColor, 2), 3); + %alpha = mRoundColour(getWord(%currentColor, 3), 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -390,6 +809,133 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal Channel_A_Val.setText( %alpha ); } +function ColorPickerRGBClass::onValidate(%this) +{ + %red = Channel_R_Val.getValue(); + %green = Channel_G_Val.getValue(); + %blue = Channel_B_Val.getValue(); + + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //Update everything else with our new color + setColorInfo(); +} + +function ColorPickerHSBClass::onValidate(%this) +{ + %hue = Channel_H_Val.getValue(); + %saturation = Channel_S_Val.getValue(); + %brightness = Channel_Br_Val.getValue(); + + //Update all the other color fields + %rgb = ColorHSBToRGB(%hue SPC %saturation SPC %brightness); + %hex = ColorRGBToHEX(%rgb); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Update everything else with our new color + setColorInfo(); +} + +function HexColor_Val::onKeyDown(%this) +{ + //Get the value + %value = %this.getValue(); + + //It's hex so keep it all uppercase + %value = strupr(%value); + %pos = %this.getCursorPos(); + %this.setValue(%value); + %this.setCursorPos(%pos); + + //Verify that it's a hex value + %value = stripChars(%value, "0123456789ABCDEF"); + if(%value $= "") + { + %this.validText(); + } + else + { + %this.invalidText(false); + } +} + +function HexColor_Val::onValidate(%this) +{ + //if the current text is invalid don't do anyting + if(!%this.isValidText()) + { + %this.invalidText(true); + return; + } + + //Get the current value + %hex = %this.getValue(); + + //Make sure we have 6 characters + while(strlen(%hex) < 6) + { + %hex = "0" @ %hex; + } + %hex = strupr(%hex); + + //Update the value in case there were missing characters + %this.setValue(%hex); + + //Update all the other color fields + %rgb = ColorHEXToRGB(%hex); + %hsb = ColorRGBToHSB(%rgb); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + //Update everything else with our new color + setColorInfo(); +} + // This function is used to update the text controls at the top function setColorInfo() { @@ -398,16 +944,40 @@ function setColorInfo() %blue = Channel_B_Val.getValue(); if( $ColorCallbackType == 1) - { - %red = (%red / 255); - %green = (%green / 255); - %blue = (%blue / 255); - } + %rgb = ColorIntToFloat(%red SPC %green SPC %blue SPC "255"); + else + %rgb = %red SPC %green SPC %blue SPC "1.0"; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; - ColorBlendSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; + //Convert color over to hue color + %hsb = ColorRGBToHSB(ColorFloatToInt(%rgb)); + %tempColor = ColorHSBToRGB( getWord(%hsb, 0) SPC 100 SPC 50); + %tempColor = ColorIntToFloat(setWord(%tempColor, 3, 255)); + + //Make sure all the text fields and everything don't update because of the cursors + ColorRangeSelect.update = false; + ColorBlendSelect.update = false; + + //Set values for the hue color picker + ColorRangeSelect.baseColor = %tempColor; + ColorRangeSelect.pickColor = %tempColor; + ColorRangeSelect.updateColor(); + + //Set the cursor for the hue picker + ColorRangeSelect.setSelectorColor(%tempColor); + + //Set the values for the gradient color picker + ColorBlendSelect.baseColor = %tempColor; + ColorBlendSelect.pickColor = %rgb; ColorBlendSelect.updateColor(); + + //Set the cursor for the gradiant color picker + ColorBlendSelect.setSelectorColor(%rgb); + + //Update our current color + %alpha = getWord(myColor.color, 3); + myColor.color = setWord(%rgb, 3, %alpha); } // return mycolor.color @@ -433,11 +1003,17 @@ function DoColorPickerUpdateCallback() // this is called from ColorRangeSelect.updateColor function updatePickerBaseColor( %location ) { + if(!ColorRangeSelect.update) + { + ColorRangeSelect.update = true; + return; + } + if( $ColorPickerSignal && %location ) %pickColor = ColorRangeSelect.baseColor; else %pickColor = ColorRangeSelect.pickColor; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; %red = getWord(%pickColor, 0); %green = getWord(%pickColor, 1); @@ -451,6 +1027,12 @@ function updatePickerBaseColor( %location ) // this is called from ColorBlendSelect.updateColor function updateRGBValues( %location ) { + if(!ColorBlendSelect.update) + { + ColorBlendSelect.update = true; + return; + } + //update the color based on where it came from if( $ColorPickerSignal && %location ) %pickColor = ColorBlendSelect.baseColor; @@ -465,7 +1047,7 @@ function updateRGBValues( %location ) %alpha = getWord(myColor.color, 3); // set the color! - myColor.color = %red SPC %green SPC %blue SPC %alpha ; + myColor.color = %red SPC %green SPC %blue SPC %alpha; DoColorPickerUpdateCallback(); @@ -488,6 +1070,25 @@ function updateRGBValues( %location ) Channel_G_Val.setValue(%green); Channel_B_Val.setValue(%blue); + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + $ColorPickerSignal = 0; } diff --git a/Templates/Empty/game/tools/gui/openFileDialog.ed.cs b/Templates/Empty/game/tools/gui/openFileDialog.ed.cs index b988d33611..50c7cdfccd 100644 --- a/Templates/Empty/game/tools/gui/openFileDialog.ed.cs +++ b/Templates/Empty/game/tools/gui/openFileDialog.ed.cs @@ -20,27 +20,38 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -function getLoadFilename(%filespec, %callback, %currentFile) -{ +function getLoadFilename(%filespec, %callback, %currentFile, %getRelative, %defaultPath) +{ + //If no default path passed in then try to get one from the file + if(%defaultPath $= "") + { + if ( filePath( %currentFile ) !$= "" ) + %defaultPath = filePath(%currentFile); + } + %dlg = new OpenFileDialog() { Filters = %filespec; DefaultFile = %currentFile; + DefaultPath = %defaultPath; ChangePath = false; MustExist = true; MultipleFiles = false; }; - if ( filePath( %currentFile ) !$= "" ) - %dlg.DefaultPath = filePath(%currentFile); - - if ( %dlg.Execute() ) + %ok = %dlg.Execute(); + if ( %ok ) { - eval(%callback @ "(\"" @ %dlg.FileName @ "\");"); + %file = %dlg.FileName; + if(%getRelative) + %file = strreplace(%file,getWorkingDirectory() @ "/", ""); + eval(%callback @ "(\"" @ %file @ "\");"); $Tools::FileDialogs::LastFilePath = filePath( %dlg.FileName ); } %dlg.delete(); + + return %ok; } // Opens a choose file dialog with format filters already loaded diff --git a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index b4b006904f..63ce28e2a8 100644 --- a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -1354,132 +1354,6 @@ bitmap = "tools/gui/images/delete"; }; }; - new GuiBitmapCtrl(){ - position="6 357"; - extent ="175 2"; - HorizSizing = "width"; - bitmap ="tools/gui/images/separator-v"; - }; - new GuiContainer(){ // Environment Map - profile="ToolsGuiDefaultProfile"; - isContainer = "1"; - position = "6 359"; - Extent = "185 52"; - HorizSizing = "width"; - - new GuiBitmapCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapDisplayBitmap"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; - wrap = "0"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "EditorTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "56 -3"; - Extent = "72 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "Env Map"; - maxLength = "1024"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 1);"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Change the active Environment Map for this layer."; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/materialEditor/gui/cubemapBtnBorder"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapNameText"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "width"; - VertSizing = "bottom"; - position = "56 16"; - Extent = "143 17"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "None"; - maxLength = "1024"; - }; - new GuiButtonCtrl(){ - profile="ToolsGuiButtonProfile"; - text ="Edit"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "134 34"; - Extent = "40 16"; - buttonType = "PushButton"; - command="MaterialEditorGui.updateTextureMap(\"env\", 1);"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "177 34"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 0);"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/gui/images/delete"; - }; - }; }; }; new GuiRolloutCtrl() { @@ -1491,6 +1365,7 @@ Position = "0 0"; Extent = "195 0"; Caption = "Accumulation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -1967,6 +1842,7 @@ Position = "0 0"; Extent = "185 0"; Caption = "Lighting Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -2364,101 +2240,6 @@ useMouseEvents = "0"; useInactiveState = "0"; }; - new GuiCheckBoxCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceCheckbox"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiCheckBoxProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "8 46"; - Extent = "79 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurface[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getValue());"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Enables the use of subsurface scattering for this layer."; - hovertime = "1000"; - text = "Sub Surface"; - groupNum = "-1"; - buttonType = "ToggleButton"; - useMouseEvents = "0"; - useInactiveState = "0"; - }; - new GuiSwatchButtonCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceColorSwatch"; - Enabled = "1"; - isContainer = "0"; - Profile = "GuiInspectorSwatchButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "90 46"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "getColorF(materialEd_PreviewMaterial.subSurfaceColor[MaterialEditorGui.currentLayer], \"MaterialEditorGui.updateSubSurfaceColor\");"; - tooltip = "Set the subsurface scattering color"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceRolloffTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 45"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltip = "Set the subsurface rolloff factor"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurfaceRolloff[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "5"; - }; - new GuiTextCtrl() { - HorizSizing = "right"; - VertSizing = "bottom"; - position = "9 65"; - Extent = "89 16"; - text = "Minnaert constant"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "minnaertTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 65"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"minnaertConstant[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "3"; - }; }; }; }; @@ -2471,9 +2252,9 @@ Position = "0 0"; Extent = "185 0"; Caption = "Animation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; - Expanded = false; container = true; parentRollout = %this.rollout; object = %behavior; @@ -3283,6 +3064,7 @@ Position = "0 0"; Extent = "202 0"; Caption = "Advanced (all layers)"; + Expanded = false; Margin = "4 4 4 0"; DragSizable = false; container = true; @@ -3309,7 +3091,7 @@ HorizSizing = "width"; VertSizing = "bottom"; Position = "0 0"; - Extent = "210 71"; + Extent = "210 89"; new GuiPopUpMenuCtrl() { internalName = "blendingTypePopUp"; @@ -3480,7 +3262,7 @@ Visible = "1"; Command = "MaterialEditorGui.updateActiveMaterial(\"castShadows\", $ThisControl.getValue());"; tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Alows object to cast shadows."; + ToolTip = "Object casts shadows."; hovertime = "1000"; text = "Cast Shadows"; groupNum = "-1"; @@ -3488,6 +3270,29 @@ useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "castDynamicShadows"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "3 70"; + Extent = "112 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"castDynamicShadows\", $ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Object casts dynamic shadows."; + hovertime = "1000"; + text = "Dynamic Shadows"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; new GuiCheckBoxCtrl() { canSaveDynamicFields = "0"; internalName = "doubleSidedCheckBox"; @@ -3496,7 +3301,7 @@ Profile = "ToolsGuiCheckBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = "100 56"; + position = "105 55"; Extent = "85 16"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs index 6b055d05c5..c1f01f1a77 100644 --- a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -754,6 +754,7 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->transZWriteCheckBox.setValue((%material).translucentZWrite); MaterialEditorPropertiesWindow-->alphaTestCheckBox.setValue((%material).alphaTest); MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows); + MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows); MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent); switch$((%material).translucentBlendOp) @@ -917,9 +918,6 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->vertLitCheckbox.setValue((%material).vertLit[%layer]); MaterialEditorPropertiesWindow-->vertColorSwatch.color = (%material).vertColor[%layer]; MaterialEditorPropertiesWindow-->subSurfaceCheckbox.setValue((%material).subSurface[%layer]); - MaterialEditorPropertiesWindow-->subSurfaceColorSwatch.color = (%material).subSurfaceColor[%layer]; - MaterialEditorPropertiesWindow-->subSurfaceRolloffTextEdit.setText((%material).subSurfaceRolloff[%layer]); - MaterialEditorPropertiesWindow-->minnaertTextEdit.setText((%material).minnaertConstant[%layer]); // Animation properties MaterialEditorPropertiesWindow-->RotationAnimation.setValue(0); diff --git a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 180a9a8ab5..d799237763 100644 --- a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,8 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { %fullPath = findNextFileMultiExpr( %filePatterns ); @@ -393,6 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); @@ -2204,15 +2206,22 @@ function strcapitalise( %str ) function ShapeEdSequences::onAddTrigger( %this ) { - // Can only add triggers if a sequence is selected - %seqName = ShapeEdSequenceList.getSelectedName(); - if ( %seqName !$= "" ) - { - // Add a new trigger at the current frame - %frame = mRound( ShapeEdSeqSlider.getValue() ); - %state = ShapeEdTriggerList.rowCount() % 30; - ShapeEditor.doAddTrigger( %seqName, %frame, %state ); - } + // Can only add triggers if a sequence is selected + %seqName = ShapeEdSequenceList.getSelectedName(); + if ( %seqName !$= "" ) + { + // Add a new trigger at the current frame + %frame = mRound( ShapeEdSeqSlider.getValue() ) - %this-->startFrame.getText(); + if ((%frame < 0) || (%frame > %this-->endFrame.getText() - %this-->startFrame.getText())) + { + MessageBoxOK( "Error", "Trigger out of range of the selected animation." ); + } + else + { + %state = ShapeEdTriggerList.rowCount() % 30; + ShapeEditor.doAddTrigger( %seqName, %frame, %state ); + } + } } function ShapeEdTriggerList::onDeleteSelection( %this ) diff --git a/Templates/Empty/game/tools/worldEditor/gui/objectBuilderGui.ed.gui b/Templates/Empty/game/tools/worldEditor/gui/objectBuilderGui.ed.gui index ddf2ef68a3..74f1200c6e 100644 --- a/Templates/Empty/game/tools/worldEditor/gui/objectBuilderGui.ed.gui +++ b/Templates/Empty/game/tools/worldEditor/gui/objectBuilderGui.ed.gui @@ -980,7 +980,19 @@ function ObjectBuilderGui::buildObserverDropPoint(%this) //------------------------------------------------------------------------------ // System //------------------------------------------------------------------------------ - +function ObjectBuilderGui::buildVolumetricFog(%this) +{ + // Change this if you want to default to another Folder + // Otherwise every time you want to add a Fog you will go this. + %defShape = "/art/environment/Fog_Cube.dts"; + %this.lastPath=getMainDotCsDir() @ %defShape; + OBObjectName.setValue( "" ); + %this.objectClassName = "VolumetricFog"; + %this.addField( "shapeName", "TypeFile", "Shape (Fog volume)", "", "*.dts;*.dae"); + %this.addField("Scale", "TypePoint3", "Scale", "1 1 1"); + %this.addField("FogColor", "TypeColorI", "FogColor", "200 200 200 255"); + %this.process(); +} function ObjectBuilderGui::buildPhysicsEntity(%this) { %this.objectClassName = "PhysicsEntity"; diff --git a/Templates/Empty/game/tools/worldEditor/main.cs b/Templates/Empty/game/tools/worldEditor/main.cs index a6ecb2872b..59301ea53d 100644 --- a/Templates/Empty/game/tools/worldEditor/main.cs +++ b/Templates/Empty/game/tools/worldEditor/main.cs @@ -120,6 +120,9 @@ function initializeWorldEditor() EVisibility.addOption( "AL: Light Specular Viz", "$AL_LightSpecularVisualizeVar", "toggleLightSpecularViz" ); EVisibility.addOption( "AL: Normals Viz", "$AL_NormalsVisualizeVar", "toggleNormalsViz" ); EVisibility.addOption( "AL: Depth Viz", "$AL_DepthVisualizeVar", "toggleDepthViz" ); + EVisibility.addOption( "AL: Color Buffer", "$AL_ColorBufferShaderVar", "toggleColorBufferViz" ); + EVisibility.addOption( "AL: Spec Map", "$AL_SpecMapShaderVar", "toggleSpecMapViz"); + EVisibility.addOption( "AL: Backbuffer", "$AL_BackbufferVisualizeVar", "toggleBackbufferViz" ); EVisibility.addOption( "AL: Glow Buffer", "$AL_GlowVisualizeVar", "toggleGlowViz" ); EVisibility.addOption( "AL: PSSM Cascade Viz", "$AL::PSSMDebugRender", "" ); EVisibility.addOption( "Frustum Lock", "$Scene::lockCull", "" ); diff --git a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs index 9bc2cab152..43d4fb65c1 100644 --- a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -46,6 +46,7 @@ %this.registerMissionObject( "SFXEmitter", "Sound Emitter" ); %this.registerMissionObject( "Precipitation" ); %this.registerMissionObject( "ParticleEmitterNode", "Particle Emitter" ); + %this.registerMissionObject( "VolumetricFog", "Volumetric Fog" ); %this.registerMissionObject( "RibbonNode", "Ribbon" ); // Legacy features. Users should use Ground Cover and the Forest Editor. @@ -317,7 +318,8 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFileMultiExpr( getFormatExtensions() ); @@ -331,6 +333,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { @@ -429,7 +432,8 @@ while ( %fullPath !$= "" ) { %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFile( %expr ); @@ -443,6 +447,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { diff --git a/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs index 97ae5d2d70..8ee4f27ff5 100644 --- a/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -244,6 +244,8 @@ function EditorSaveMissionMenu() function EditorSaveMission() { + // just save the mission without renaming it + // first check for dirty and read-only files: if((EWorldEditor.isDirty || ETerrainEditor.isMissionDirty) && !isWriteableFileName($Server::MissionFile)) { diff --git a/Templates/Full/game/art/art.module.taml b/Templates/Full/game/art/art.module.taml new file mode 100644 index 0000000000..73855c09e9 --- /dev/null +++ b/Templates/Full/game/art/art.module.taml @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/Templates/Full/game/art/datablocks/environment.cs b/Templates/Full/game/art/datablocks/environment.cs index 386703f679..c9d2b0a51d 100644 --- a/Templates/Full/game/art/datablocks/environment.cs +++ b/Templates/Full/game/art/datablocks/environment.cs @@ -84,3 +84,15 @@ datablock LightningData(DefaultStorm) thunderSounds[2] = ThunderCrash3Sound; thunderSounds[3] = ThunderCrash4Sound; }; + +datablock ReflectorDesc( DefaultCubeDesc ) +{ + texSize = 256; + nearDist = 0.1; + farDist = 1000.0; + objectTypeMask = 0xFFFFFFFF; + detailAdjust = 1.0; + priority = 1.0; + maxRateMs = 15; + useOcclusionQuery = true; +}; diff --git a/Templates/Full/game/art/datablocks/player.cs b/Templates/Full/game/art/datablocks/player.cs index e920b3ccee..a3d2e62a16 100644 --- a/Templates/Full/game/art/datablocks/player.cs +++ b/Templates/Full/game/art/datablocks/player.cs @@ -494,7 +494,6 @@ datablock PlayerData(DefaultPlayerData) imageAnimPrefixFP = "soldier"; shapeNameFP[0] = "art/shapes/actors/Soldier/FP/FP_SoldierArms.DAE"; - canObserve = 1; cmdCategory = "Clients"; cameraDefaultFov = 55.0; @@ -517,7 +516,6 @@ datablock PlayerData(DefaultPlayerData) maxDamage = 100; maxEnergy = 60; repairRate = 0.33; - energyPerDamagePoint = 75; rechargeRate = 0.256; @@ -650,7 +648,6 @@ datablock PlayerData(DefaultPlayerData) //exitingWater = ExitingWaterLightSound; - observeParameters = "0.5 4.5 4.5"; cameraMinDist = "0"; DecalData = "PlayerFootprint"; diff --git a/Templates/Full/game/art/environment/FogMod_heavy.dds b/Templates/Full/game/art/environment/FogMod_heavy.dds new file mode 100644 index 0000000000..197dd43327 Binary files /dev/null and b/Templates/Full/game/art/environment/FogMod_heavy.dds differ diff --git a/Templates/Full/game/art/environment/FogMod_light.dds b/Templates/Full/game/art/environment/FogMod_light.dds new file mode 100644 index 0000000000..d726795fa1 Binary files /dev/null and b/Templates/Full/game/art/environment/FogMod_light.dds differ diff --git a/Templates/Full/game/art/environment/FogMod_med.dds b/Templates/Full/game/art/environment/FogMod_med.dds new file mode 100644 index 0000000000..2b25d3263c Binary files /dev/null and b/Templates/Full/game/art/environment/FogMod_med.dds differ diff --git a/Templates/Full/game/art/environment/Fog_Cube.DAE b/Templates/Full/game/art/environment/Fog_Cube.DAE new file mode 100644 index 0000000000..34cad9f48d --- /dev/null +++ b/Templates/Full/game/art/environment/Fog_Cube.DAE @@ -0,0 +1,177 @@ + + + + + Richard + OpenCOLLADA for 3ds Max; Version: 1.4.1; Revision: exported; Platform: x64; Configuration: Release_Max2011_static + file:///G:/Documents%20and%20Settings/Richard/Mijn%20documenten/3dsmax/scenes/FogVolumes.max + + 2014-08-16T10:10:23 + 2014-08-16T10:10:23 + + Z_UP + + + + + + + + 0 0 0 1 + + + 0.588 0.588 0.588 1 + + + 0.588 0.588 0.588 1 + + + 0.9 0.9 0.9 1 + + + 0 + + + 0 0 0 1 + + + 1 1 1 1 + + + 1 + + + + + + + + 0 + 0 + 0 + 1.5 + 0 + 3 + 1 + 0 + + + 1 + 1 + 0 + 0.1 + 0 + + + + + + + + + + + + + + + -0.85 -1 -0.85 0.85 -0.85 -1 -1 0.85 -0.85 0.85 0.85 -1 -0.85 -1 0.85 1 -0.85 0.85 -1 0.85 0.85 0.85 1 0.85 -1 -0.85 -0.85 -0.85 -0.85 -1 1 -0.85 -0.85 0.85 -1 -0.85 -0.85 1 -0.85 -0.85 0.85 -1 0.85 1 -0.85 1 0.85 -0.85 -0.85 -0.85 1 -1 -0.85 0.85 0.85 -0.85 1 0.85 -1 0.85 -0.85 0.85 1 -0.85 1 0.85 0.85 0.85 1 1 0.85 0.85 + + + + + + + + + + -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 -0.8755788 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 0.8755786 0.341586 -0.341586 0.8755788 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.8755788 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 -0.341586 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 -0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 + + + + + + + + + + 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0.07542458 0.07542461 4.99755e-4 0.07542479 0.07542461 4.99547e-4 0.07542455 0.07542461 4.99755e-4 0.07542461 0.9245752 4.99547e-4 0.07542458 0.9245754 4.99755e-4 0.07542458 0.9245754 0.9995003 0.07542455 0.9245754 4.99755e-4 0.07542455 0.9245754 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245754 0.07542479 4.99547e-4 0.07542458 0.07542461 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245752 0.07542461 0.9995004 0.9245752 0.9245754 4.99547e-4 0.07542455 0.07542461 0.9995003 0.9245752 0.07542461 0.9995004 0.07542461 0.07542479 0.9995005 0.9245752 0.9245754 4.99576e-4 0.9245752 0.07542461 0.9995005 0.9245752 0.9245754 4.99576e-4 0.07542479 0.9245754 0.9995005 0.9245752 0.9245754 0.9995004 0.9245754 0.9245752 0.9995005 0.9245752 0.9245754 0.9995004 0.9995003 0.07542461 0.07542458 0.9245752 4.99547e-4 0.07542461 0.9245752 4.99547e-4 0.07542461 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995004 0.07542482 0.07542461 0.9995003 0.9245754 0.07542461 0.9245752 0.9995004 0.07542461 0.07542455 0.9995003 0.07542461 4.99606e-4 0.9245752 0.07542461 4.99725e-4 0.07542458 0.07542461 0.07542479 4.99576e-4 0.07542461 0.9245754 4.99755e-4 0.07542461 0.07542458 4.99755e-4 0.9245754 0.9245752 4.99576e-4 0.9245754 0.9995003 0.07542458 0.9245754 0.9995004 0.9245752 0.9245754 0.9245754 0.9995003 0.9245754 0.07542482 0.9995004 0.9245754 4.99755e-4 0.9245754 0.9245754 4.99576e-4 0.07542482 0.9245754 0.9995003 0.07542461 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 + + + + + + + + + + -0.8644259 0.01841655 0.3300502 -0.8715108 -0.05526615 0.3184382 -0.8644259 0.01841664 -0.3300501 -0.8715108 -0.05526611 -0.3184382 0.8738725 -0.06754867 0.3145678 0.8597026 -0.006149054 -0.3377912 0.8738725 -0.06754874 -0.3145678 0.8597026 -0.006148929 0.3377911 0.883319 -0.2990854 -0.116681 0.8478944 0.3571441 -0.06756432 0.8597026 0.3377913 0.00614921 0.883319 -0.2990854 0.116681 0.2990854 0.883319 -0.116681 -0.3571441 0.8478944 -0.06756432 -0.3377913 0.8597026 0.00614921 0.2990854 0.883319 0.116681 -0.883319 0.2990854 -0.116681 -0.8478944 -0.3571441 -0.06756432 -0.8597026 -0.3377913 0.00614921 -0.883319 0.2990854 0.116681 -0.2990854 -0.883319 -0.116681 0.3571441 -0.8478944 -0.06756432 0.3377913 -0.8597026 0.00614921 -0.2990854 -0.883319 0.116681 0.8360862 -0.3764972 0.1289794 0.7071068 -0.7071068 0 0.7071068 0.7071068 0 0.3764972 0.8360862 0.1289794 -0.3764972 -0.8360862 0.1289794 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 -0.8360862 0.3764972 0.1289794 0.8360862 -0.3764971 -0.1289794 0.7071068 -0.7071068 0 0.3764971 0.8360862 -0.1289794 0.7071068 0.7071068 0 -0.3764971 -0.8360862 -0.1289794 -0.7071068 -0.7071068 0 -0.8360862 0.3764971 -0.1289794 -0.7071068 0.7071068 0 -0.376497 0.1289792 0.8360862 -0.3764973 -0.1289798 0.8360861 -0.8833191 -0.2990855 0.1166808 -0.883319 0.2990853 -0.1166812 -0.3764971 0.1289794 -0.8360862 -0.3764972 -0.1289795 -0.8360862 -0.8833191 -0.2990855 -0.1166807 -0.883319 0.2990853 0.1166812 0.883319 -0.2990853 0.1166812 0.8833191 0.2990855 -0.1166807 0.3764971 0.1289797 -0.8360862 0.3764971 -0.1289793 -0.8360862 0.883319 -0.2990853 -0.1166811 0.8833191 0.2990855 0.1166808 0.3764972 0.1289799 0.8360861 0.3764971 -0.128979 0.8360862 0.3764972 0.8360862 0.1289794 0.3764971 0.8360862 -0.1289794 0.8360862 -0.3764971 -0.1289794 0.8360862 -0.3764972 0.1289794 -0.8360862 0.3764972 0.1289794 -0.8360862 0.3764971 -0.1289794 -0.3764972 -0.8360862 0.1289794 -0.3764971 -0.8360862 -0.1289794 + + + + + + + + + + 0.1043954 -0.9396398 0.3258505 -0.06496345 -0.9379679 -0.3405817 0.1043953 -0.9396398 -0.3258505 -0.06496349 -0.937968 0.3405817 0.05187585 -0.9370471 -0.3453283 -0.1307439 -0.939827 -0.3156443 0.05187577 -0.9370471 0.3453283 -0.1307438 -0.939827 0.3156443 0 0.3634471 -0.9316148 -0.196368 0.2889368 -0.9369926 0.1307441 -0.3156442 -0.939827 0 -0.3634471 -0.9316148 -0.3634471 0 -0.9316148 -0.2889368 -0.196368 -0.9369926 0.3156442 0.1307441 -0.939827 0.3634471 0 -0.9316148 0 -0.3634471 -0.9316148 0.196368 -0.2889368 -0.9369926 -0.1307441 0.3156442 -0.939827 0 0.3634471 -0.9316148 0.3634471 0 -0.9316148 0.2889368 0.196368 -0.9369926 -0.3156442 -0.1307441 -0.939827 -0.3634471 0 -0.9316148 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 -0.6191276 0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.6191276 -0.6191276 -0.4830755 -0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 -0.6191276 -0.6191276 -0.4830755 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 -0.6191276 0.6191276 -0.4830755 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 0.2608476 -0.9294715 0.2608473 -0.2608474 -0.9294714 -0.2608479 1.81809e-7 -0.363447 -0.9316149 2.27262e-7 -0.3634472 -0.9316148 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608477 2.72714e-7 -0.363447 0.9316149 2.72714e-7 -0.3634472 0.9316148 2.72714e-7 -0.3634472 -0.9316148 2.72714e-7 -0.363447 -0.9316149 -0.2608474 -0.9294714 -0.2608478 0.2608476 -0.9294714 0.2608474 1.81809e-7 -0.3634472 0.9316148 2.27262e-7 -0.3634471 0.9316149 -0.2608473 -0.9294714 0.260848 0.2608477 -0.9294715 -0.2608472 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 0.2608475 -0.9294714 + + + + + + + + + + + + + + + + + +

9 0 21 0 13 1 25 1 3 2 15 2 3 2 15 2 1 3 13 3 9 0 21 0 16 4 28 4 18 5 30 5 22 6 34 6 22 6 34 6 20 7 32 7 16 4 28 4 0 8 12 8 11 9 23 9 19 10 31 10 19 10 31 10 4 11 16 11 0 8 12 8 10 12 22 12 15 13 27 13 23 14 35 14 23 14 35 14 5 15 17 15 10 12 22 12 14 16 26 16 12 17 24 17 21 18 33 18 21 18 33 18 7 19 19 19 14 16 26 16 2 20 14 20 8 21 20 21 17 22 29 22 17 22 29 22 6 23 18 23 2 20 14 20 0 8 36 24 8 21 20 21 9 0 37 25 1 3 38 26 10 12 39 27 11 9 23 9 2 20 40 28 12 17 24 17 13 1 41 29 3 2 42 30 14 16 43 31 15 13 27 13 4 11 44 32 16 4 45 33 17 22 29 22 5 15 46 34 18 5 47 35 19 10 31 10 6 23 48 36 20 7 49 37 21 18 33 18 7 19 50 38 22 6 51 39 23 14 35 14 9 0 21 0 8 21 52 40 2 20 53 41 2 20 53 41 13 1 25 1 9 0 21 0 13 1 25 1 12 17 54 42 14 16 55 43 14 16 55 43 3 2 15 2 13 1 25 1 3 2 15 2 15 13 56 44 10 12 57 45 10 12 57 45 1 3 13 3 3 2 15 2 1 3 13 3 11 9 58 46 0 8 59 47 0 8 59 47 9 0 21 0 1 3 13 3 16 4 28 4 4 11 60 48 19 10 61 49 19 10 61 49 18 5 30 5 16 4 28 4 18 5 30 5 5 15 62 50 23 14 63 51 23 14 63 51 22 6 34 6 18 5 30 5 22 6 34 6 7 19 64 52 21 18 65 53 21 18 65 53 20 7 32 7 22 6 34 6 20 7 32 7 6 23 66 54 17 22 67 55 17 22 67 55 16 4 28 4 20 7 32 7 11 9 23 9 10 12 68 56 5 15 69 57 5 15 69 57 19 10 31 10 11 9 23 9 4 11 70 58 17 22 29 22 8 21 20 21 8 21 20 21 0 8 71 59 4 11 70 58 15 13 27 13 14 16 72 60 7 19 73 61 7 19 73 61 23 14 35 14 15 13 27 13 12 17 24 17 2 20 74 62 6 23 75 63 6 23 75 63 21 18 33 18 12 17 24 17

+
+
+
+
+ + + + + 0 0 0 + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + +
\ No newline at end of file diff --git a/Templates/Full/game/art/environment/Fog_Cube.cs b/Templates/Full/game/art/environment/Fog_Cube.cs new file mode 100644 index 0000000000..3c686032c6 --- /dev/null +++ b/Templates/Full/game/art/environment/Fog_Cube.cs @@ -0,0 +1,8 @@ + +singleton TSShapeConstructor(Fog_CubeDAE) +{ + baseShape = "./Fog_Cube.DAE"; + lodType = "TrailingNumber"; + neverImport = "env*"; + loadLights = "0"; +}; diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.DAE b/Templates/Full/game/art/environment/LightVolume_Sphere.DAE new file mode 100644 index 0000000000..81c93d8e03 --- /dev/null +++ b/Templates/Full/game/art/environment/LightVolume_Sphere.DAE @@ -0,0 +1,423 @@ + + + + + Richard + OpenCOLLADA for 3ds Max; Version: 1.4.1; Revision: exported; Platform: x64; Configuration: Release_Max2011_static + file:///G:/Documents%20and%20Settings/Richard/Mijn%20documenten/3dsmax/scenes/lightfog.max + + 2014-08-22T22:51:35 + 2014-08-22T22:51:35 + + Z_UP + + + + + + + + 0 0 0 1 + + + 0.588 0.588 0.588 1 + + + 0.588 0.588 0.588 1 + + + 0.9 0.9 0.9 1 + + + 0 + + + 0 0 0 1 + + + 1 1 1 1 + + + 1 + + + + + + + + 0 + 0 + 0 + 1.5 + 0 + 3 + 1 + 0 + + + 1 + 1 + 0 + 0.1 + 0 + + + + + + + + + + + + + + + 0 0 5 -9.48283e-8 2.169419 4.504844 -0.9412758 1.954579 4.504844 -1.69612 1.35261 4.504844 -2.115027 0.4827411 4.504844 -2.115027 -0.482741 4.504844 -1.69612 -1.35261 4.504844 -0.9412759 -1.954579 4.504844 2.58701e-8 -2.169419 4.504844 0.9412759 -1.954579 4.504844 1.696121 -1.35261 4.504844 2.115027 -0.4827399 4.504844 2.115026 0.4827427 4.504844 1.696119 1.352612 4.504844 0.9412734 1.95458 4.504844 -1.70875e-7 3.909158 3.117449 -1.69612 3.522029 3.117449 -3.056303 2.43732 3.117449 -3.811147 0.8698694 3.117449 -3.811147 -0.8698691 3.117449 -3.056303 -2.43732 3.117449 -1.696121 -3.522029 3.117449 4.66162e-8 -3.909158 3.117449 1.696121 -3.522029 3.117449 3.056304 -2.437319 3.117449 3.811147 -0.8698672 3.117449 3.811146 0.8698722 3.117449 3.0563 2.437323 3.117449 1.696116 3.522031 3.117449 -2.13077e-7 4.87464 1.112604 -2.115027 4.391898 1.112604 -3.811147 3.039288 1.112604 -4.752422 1.084709 1.112604 -4.752422 -1.084709 1.112604 -3.811147 -3.039288 1.112604 -2.115028 -4.391898 1.112604 5.81295e-8 -4.87464 1.112604 2.115028 -4.391898 1.112604 3.811148 -3.039287 1.112604 4.752423 -1.084707 1.112604 4.752421 1.084713 1.112604 3.811144 3.039291 1.112604 2.115022 4.391901 1.112604 -2.13077e-7 4.87464 -1.112605 -2.115027 4.391898 -1.112605 -3.811147 3.039288 -1.112605 -4.752422 1.084709 -1.112605 -4.752422 -1.084709 -1.112605 -3.811147 -3.039288 -1.112605 -2.115028 -4.391898 -1.112605 5.81295e-8 -4.87464 -1.112605 2.115028 -4.391898 -1.112605 3.811148 -3.039287 -1.112605 4.752423 -1.084707 -1.112605 4.752421 1.084713 -1.112605 3.811144 3.039291 -1.112605 2.115022 4.391901 -1.112605 -1.70875e-7 3.909157 -3.11745 -1.69612 3.522028 -3.11745 -3.056302 2.437319 -3.11745 -3.811146 0.8698692 -3.11745 -3.811146 -0.869869 -3.11745 -3.056302 -2.437319 -3.11745 -1.69612 -3.522028 -3.11745 4.66162e-8 -3.909157 -3.11745 1.69612 -3.522028 -3.11745 3.056303 -2.437318 -3.11745 3.811146 -0.8698671 -3.11745 3.811145 0.8698721 -3.11745 3.0563 2.437322 -3.11745 1.696116 3.52203 -3.11745 -9.48283e-8 2.169418 -4.504845 -0.9412755 1.954578 -4.504845 -1.696119 1.35261 -4.504845 -2.115026 0.4827409 -4.504845 -2.115026 -0.4827408 -4.504845 -1.69612 -1.35261 -4.504845 -0.9412756 -1.954578 -4.504845 2.58701e-8 -2.169418 -4.504845 0.9412756 -1.954578 -4.504845 1.69612 -1.352609 -4.504845 2.115026 -0.4827397 -4.504845 2.115026 0.4827425 -4.504845 1.696118 1.352612 -4.504845 0.9412731 1.954579 -4.504845 0 0 -5 + + + + + + + + + + 3.34297e-8 3.12427e-8 1 -1.46401e-7 0.4589442 0.8884651 -0.1991285 0.4134944 0.888465 -0.358817 0.286147 0.8884651 -0.4474375 0.1021247 0.888465 -0.4474375 -0.1021246 0.8884651 -0.358817 -0.286147 0.888465 -0.1991284 -0.4134944 0.8884651 -4.96273e-9 -0.4589442 0.888465 0.1991285 -0.4134944 0.888465 0.3588171 -0.2861469 0.888465 0.4474375 -0.1021244 0.8884651 0.4474374 0.102125 0.888465 0.3588168 0.2861473 0.8884651 0.1991281 0.4134945 0.8884651 -2.38195e-7 0.7935484 0.6085071 -0.3443078 0.7149624 0.6085071 -0.6204212 0.4947692 0.6085072 -0.7736526 0.1765811 0.6085071 -0.7736526 -0.176581 0.608507 -0.6204212 -0.4947692 0.6085072 -0.3443078 -0.7149624 0.6085071 -1.26699e-8 -0.7935485 0.6085071 0.3443078 -0.7149624 0.6085072 0.6204213 -0.4947691 0.6085071 0.7736526 -0.1765807 0.6085072 0.7736524 0.1765818 0.6085072 0.6204207 0.4947699 0.608507 0.3443072 0.7149627 0.6085071 -2.56849e-7 0.9764001 0.2159697 -0.4236442 0.879706 0.2159697 -0.7633804 0.6087754 0.2159697 -0.9519197 0.2172694 0.2159697 -0.9519197 -0.2172693 0.2159698 -0.7633804 -0.6087753 0.2159698 -0.4236441 -0.8797061 0.2159698 2.56849e-9 -0.9764001 0.2159697 0.4236443 -0.879706 0.2159698 0.7633805 -0.6087751 0.2159698 0.9519198 -0.2172689 0.2159698 0.9519196 0.2172702 0.2159698 0.7633796 0.6087762 0.2159697 0.4236434 0.8797064 0.2159697 -2.56849e-7 0.9764 -0.2159699 -0.4236442 0.8797059 -0.2159699 -0.7633803 0.6087754 -0.2159699 -0.9519196 0.2172694 -0.2159698 -0.9519197 -0.2172693 -0.2159699 -0.7633804 -0.6087753 -0.2159699 -0.4236442 -0.879706 -0.2159699 2.31164e-8 -0.9764 -0.2159699 0.4236442 -0.8797059 -0.2159699 0.7633805 -0.6087751 -0.2159699 0.9519197 -0.2172689 -0.2159699 0.9519195 0.2172701 -0.2159699 0.7633796 0.6087762 -0.2159699 0.4236434 0.8797063 -0.2159699 -1.95117e-7 0.7935483 -0.6085073 -0.3443078 0.7149623 -0.6085073 -0.6204211 0.4947692 -0.6085073 -0.7736524 0.1765811 -0.6085073 -0.7736524 -0.1765811 -0.6085073 -0.6204211 -0.4947692 -0.6085073 -0.3443078 -0.7149622 -0.6085073 1.77379e-8 -0.7935483 -0.6085073 0.3443078 -0.7149622 -0.6085073 0.6204212 -0.494769 -0.6085073 0.7736525 -0.1765806 -0.6085073 0.7736523 0.1765817 -0.6085073 0.6204206 0.4947698 -0.6085073 0.3443071 0.7149625 -0.6085073 -1.16624e-7 0.4589441 -0.8884652 -0.1991284 0.4134943 -0.8884652 -0.358817 0.2861468 -0.8884652 -0.4474374 0.1021247 -0.8884652 -0.4474373 -0.1021246 -0.8884652 -0.3588169 -0.2861468 -0.8884652 -0.1991284 -0.4134943 -0.8884652 -9.92546e-9 -0.4589441 -0.8884651 0.1991285 -0.4134943 -0.8884651 0.358817 -0.2861468 -0.8884652 0.4474374 -0.1021244 -0.8884651 0.4474373 0.102125 -0.8884652 0.3588167 0.2861473 -0.8884651 0.1991281 0.4134944 -0.8884652 2.59315e-8 -2.62439e-8 -1 + + + + + + + + + + -0.03571416 1 0.999001 3.79455e-8 0.8571429 0.999001 0.0714286 0.8571428 0.9990011 0.1428572 0.8571428 0.9990011 0.2142857 0.8571428 0.9990011 0.2857142 0.8571428 0.9990011 0.3571428 0.8571428 0.9990011 0.4285714 0.8571428 0.9990011 0.4999999 0.8571429 0.999001 0.5714285 0.8571429 0.999001 0.6428571 0.8571429 0.999001 0.7142857 0.8571429 0.999001 0.7857143 0.8571429 0.999001 0.857143 0.8571429 0.999001 0.9285716 0.8571429 0.999001 1 0.7142857 0.9990011 0.0714286 0.7142857 0.9990011 0.1428572 0.7142857 0.9990011 0.2142857 0.7142857 0.9990011 0.2857142 0.7142857 0.9990011 0.3571428 0.7142857 0.9990011 0.4285714 0.7142857 0.9990011 0.5 0.7142857 0.9990011 0.5714285 0.7142857 0.999001 0.6428571 0.7142857 0.999001 0.7142857 0.7142857 0.9990009 0.7857143 0.7142857 0.999001 0.857143 0.7142857 0.999001 0.9285716 0.7142857 0.999001 0.9999999 0.5714285 0.999001 0.0714286 0.5714285 0.999001 0.1428572 0.5714285 0.9990011 0.2142857 0.5714285 0.9990011 0.2857142 0.5714285 0.9990011 0.3571428 0.5714285 0.9990011 0.4285714 0.5714285 0.9990011 0.5 0.5714285 0.999001 0.5714285 0.5714285 0.999001 0.6428571 0.5714285 0.999001 0.7142857 0.5714285 0.9990009 0.7857143 0.5714285 0.9990009 0.8571429 0.5714285 0.999001 0.9285716 0.5714285 0.999001 0.9999999 0.4285714 0.999001 0.0714286 0.4285714 0.999001 0.1428572 0.4285714 0.9990011 0.2142857 0.4285714 0.9990011 0.2857142 0.4285714 0.9990011 0.3571428 0.4285714 0.9990011 0.4285714 0.4285714 0.9990011 0.5 0.4285714 0.999001 0.5714285 0.4285714 0.999001 0.6428571 0.4285714 0.999001 0.7142857 0.4285714 0.999001 0.7857143 0.4285714 0.999001 0.8571429 0.4285714 0.999001 0.9285716 0.4285714 0.999001 1 0.2857142 0.999001 0.0714286 0.2857142 0.9990011 0.1428572 0.2857142 0.9990011 0.2142857 0.2857142 0.9990011 0.2857142 0.2857143 0.9990011 0.3571428 0.2857143 0.9990011 0.4285714 0.2857142 0.9990011 0.5 0.2857142 0.999001 0.5714285 0.2857142 0.999001 0.6428571 0.2857142 0.999001 0.7142857 0.2857142 0.999001 0.7857143 0.2857142 0.999001 0.857143 0.2857142 0.999001 0.9285716 0.2857142 0.999001 3.79455e-8 0.1428571 0.999001 0.0714286 0.1428572 0.9990011 0.1428572 0.1428571 0.999001 0.2142857 0.1428572 0.9990011 0.2857142 0.1428572 0.9990011 0.3571428 0.1428572 0.9990011 0.4285714 0.1428572 0.9990011 0.4999999 0.1428571 0.999001 0.5714285 0.1428571 0.999001 0.6428571 0.1428571 0.999001 0.7142857 0.1428571 0.999001 0.7857143 0.1428571 0.999001 0.857143 0.1428571 0.999001 0.9285716 0.1428571 0.999001 -0.03571416 0 0.999001 0.03571432 1 0.999001 0.1071429 1 0.999001 0.1785714 1 0.999001 0.25 1 0.999001 0.3214285 1 0.999001 0.3928571 1 0.999001 0.4642856 1 0.999001 0.5357142 1 0.999001 0.6071428 1 0.999001 0.6785715 1 0.999001 0.75 1 0.999001 0.8214287 1 0.999001 0.8928573 1 0.999001 -0.07142836 0.8571429 0.999001 0 0.7142857 0.9990011 -0.07142836 0.8571429 0.999001 0 0.7142857 0.9990011 0 0.7142857 0.9990011 -5.96046e-8 0.5714285 0.999001 0 0.7142857 0.9990011 -5.96046e-8 0.5714285 0.999001 -5.96046e-8 0.4285714 0.999001 -5.96046e-8 0.5714285 0.999001 -5.96046e-8 0.4285714 0.999001 0 0.2857142 0.999001 -5.96046e-8 0.4285714 0.999001 0 0.2857142 0.999001 0 0.2857142 0.999001 -0.07142836 0.2857142 0.999001 -0.07142836 0.1428571 0.999001 -0.07142836 0.2857142 0.999001 0 0.2857142 0.999001 0.03571432 0 0.999001 0.1071429 0 0.999001 0.1785714 0 0.999001 0.25 0 0.999001 0.3214285 0 0.999001 0.3928571 0 0.999001 0.4642856 0 0.999001 0.5357142 0 0.999001 0.6071428 0 0.999001 0.6785715 0 0.999001 0.75 0 0.999001 0.8214287 0 0.999001 0.8928573 0 0.999001 -0.07142836 0.1428571 0.999001 + + + + + + + + + + -0.9749277 -0.2225218 3.95437e-8 -0.9749279 -0.03513084 0.01814697 -0.8631371 -0.4546571 0.01814702 -0.7818314 -0.6234899 4.56159e-8 -0.5803916 -0.7841328 0.01814686 -0.4338837 -0.9009689 4.26533e-8 -0.1826924 -0.9583017 0.01814685 1.04443e-15 -1 3.12427e-8 0.2511913 -0.9426673 0.01814685 0.4338836 -0.900969 1.36441e-8 0.6353235 -0.740326 0.01814683 0.7818314 -0.6234899 -6.65688e-9 0.8936221 -0.3913545 0.01814665 0.9749277 -0.2225219 -2.56394e-8 0.9749278 0.03512998 0.01814669 0.9749279 0.222521 -3.95437e-8 0.8631371 0.4546568 0.01814684 0.7818313 0.62349 -4.56159e-8 0.5803913 0.7841329 0.01814687 0.4338832 0.9009691 -4.26533e-8 0.1826917 0.9583018 0.01814686 -7.40827e-7 1 -3.12427e-8 -0.2511921 0.942667 0.01814683 -0.4338844 0.9009686 -1.36441e-8 -0.6353242 0.7403254 0.01814688 -0.7818321 0.623489 6.65693e-9 -0.852976 0.4757568 -0.03024468 -0.974928 0.2225204 2.56394e-8 -0.9545922 0.2647484 0.09073415 -0.974928 -0.08239544 0.1074507 -0.8783796 -0.4230055 1.2098e-7 -0.6078575 -0.7622294 -2.40103e-8 -0.2169419 -0.9504844 3.08126e-9 0.2169418 -0.9504845 1.00124e-8 0.6078575 -0.7622294 -1.22219e-8 0.8783796 -0.4230055 2.27489e-8 0.9749279 -1.0315e-7 -1.14217e-7 0.8783796 0.4230055 2.7348e-8 0.6078573 0.7622295 2.9091e-8 0.2169413 0.9504846 1.53869e-8 -0.2169426 0.9504843 -1.74207e-8 -0.6078583 0.7622288 -1.32728e-8 -0.8783801 0.4230047 1.08194e-8 -0.974928 0.08239487 -0.1074508 -0.9545922 0.2647484 0.09073415 -0.974928 0.08239487 -0.1074508 -0.9749279 -0.08239547 0.1074508 -0.9749279 -0.01037927 0.04692359 -0.8783797 -0.4230054 1.38382e-9 -0.974928 -0.08239544 0.1074507 -0.6078575 -0.7622294 -2.5756e-9 -0.2169418 -0.9504845 -4.34778e-9 0.2169417 -0.9504845 7.21083e-10 0.6078575 -0.7622294 2.68537e-9 0.8783797 -0.4230054 -1.49521e-8 0.9749279 9.89275e-9 3.31305e-8 0.8783796 0.4230055 6.33846e-10 0.6078573 0.7622295 2.8277e-9 0.2169413 0.9504845 1.9462e-9 -0.2169426 0.9504842 3.51617e-9 -0.6078584 0.7622287 -1.28249e-8 -0.8783801 0.4230047 -3.55722e-8 -0.974928 0.01037875 -0.04692358 -0.9749279 -0.01037927 0.04692359 -0.9749279 -0.01037929 -0.04692363 -0.8783796 -0.4230055 7.11577e-9 -0.9749279 -0.01037927 0.04692359 -0.6078576 -0.7622294 -5.38627e-9 -0.2169418 -0.9504845 -4.0761e-8 0.2169417 -0.9504845 -6.37691e-9 0.6078574 -0.7622295 4.32713e-8 0.8783797 -0.4230054 4.91462e-8 0.9749279 7.86884e-9 6.87766e-8 0.8783796 0.4230055 7.54338e-8 0.6078573 0.7622295 -3.74104e-9 0.2169413 0.9504845 -6.87179e-10 -0.2169426 0.9504843 -5.06594e-9 -0.6078584 0.7622287 1.11192e-8 -0.8783801 0.4230047 -7.55682e-8 -0.974928 0.01037875 0.04692348 -0.9749279 -0.01037935 -0.04692387 -0.9749279 -0.08239562 -0.107451 -0.8783797 -0.4230055 5.99473e-9 -0.9749279 -0.01037929 -0.04692363 -0.6078575 -0.7622295 -5.14789e-8 -0.2169418 -0.9504844 -6.99784e-8 0.2169419 -0.9504845 -6.77193e-8 0.6078575 -0.7622295 8.75301e-8 0.8783796 -0.4230056 2.38485e-7 0.9749279 -3.58523e-8 7.51737e-8 0.8783796 0.4230055 1.39721e-9 0.6078573 0.7622295 6.92574e-8 0.2169412 0.9504845 -5.31509e-8 -0.2169425 0.9504843 -5.50918e-9 -0.6078583 0.7622288 -2.65355e-8 -0.8605051 0.4601225 0.05372539 -0.974928 0.08239491 0.1074507 -0.9749278 -0.08239586 -0.1074513 -0.9749279 0.03512977 0.0181467 -0.8936222 -0.3913543 0.01814683 -0.9749279 -0.08239562 -0.107451 -0.6353234 -0.740326 0.01814686 -0.2511912 -0.9426673 0.01814672 0.1826924 -0.9583017 0.01814681 0.5803915 -0.7841328 0.01814685 0.8631371 -0.454657 0.01814701 0.9749278 -0.03513059 0.01814698 0.8936221 0.3913542 0.01814686 0.6353234 0.7403261 0.01814691 0.2511908 0.9426673 0.01814683 -0.1826932 0.9583015 0.01814677 -0.5803923 0.7841322 0.01814686 -0.802168 0.5812611 0.09073409 -0.91413 0.3487692 -0.1074508 -0.9545922 0.2647484 -0.09073412 -0.91413 0.3487692 -0.1074508 -0.974928 0.08239496 0.1074508 -0.9749278 -0.2225216 -1.94415e-8 -0.7818317 -0.6234895 -3.91125e-9 -0.4338831 -0.9009692 1.23937e-8 -6.80542e-16 -1 2.62439e-8 0.4338836 -0.9009689 3.48962e-8 0.7818314 -0.6234899 3.66368e-8 0.9749278 -0.2225216 3.11211e-8 0.9749279 0.222521 1.94415e-8 0.7818313 0.6234901 3.91122e-9 0.4338837 0.9009689 -1.23937e-8 -1.19783e-6 1 -2.62439e-8 -0.4338844 0.9009685 -3.48962e-8 -0.7818321 0.623489 -3.66368e-8 -0.974928 0.2225205 -3.11211e-8 -0.9545922 0.2647484 -0.09073412 + + + + + + + + + + -0.2225218 0.9749277 -2.30205e-8 -0.04052453 0.8877353 -0.4585672 -0.4216851 0.7822389 -0.4585672 -0.6234899 0.7818314 -3.58345e-9 -0.7193257 0.5218109 -0.4585672 -0.9009689 0.4338837 1.65634e-8 -0.8744953 0.1580317 -0.4585672 -1 0 3.34297e-8 -0.8564605 -0.2370475 -0.4585672 -0.900969 -0.4338836 4.36748e-8 -0.6687932 -0.5851767 -0.4585672 -0.6234899 -0.7818314 4.52696e-8 -0.3486635 -0.8174044 -0.4585672 -0.2225219 -0.9749277 3.78982e-8 0.04052361 -0.8877353 -0.4585672 0.222521 -0.9749279 2.30206e-8 0.4216849 -0.7822391 -0.4585672 0.62349 -0.7818313 3.58345e-9 0.7193259 -0.5218107 -0.4585672 0.9009691 -0.4338832 -1.65634e-8 0.8744955 -0.1580312 -0.4585672 1 7.40827e-7 -3.34297e-8 0.8564603 0.2370483 -0.4585672 0.9009686 0.4338844 -4.36748e-8 0.6687926 0.5851774 -0.4585672 0.623489 0.7818321 -4.52696e-8 0.445375 0.7693955 -0.4578992 0.2225204 0.974928 -3.78982e-8 0.1987407 0.8707421 -0.4497891 -0.1375673 0.6027217 -0.7860037 -0.2640215 0.5482458 -0.7935484 -0.4757501 0.3793979 -0.7935484 -0.5932505 0.1354056 -0.7935484 -0.5932505 -0.1354055 -0.7935485 -0.4757501 -0.3793979 -0.7935484 -0.2640214 -0.5482459 -0.7935484 -1.5735e-7 -0.6085071 -0.7935484 0.2640215 -0.5482459 -0.7935484 0.4757502 -0.3793978 -0.7935484 0.5932507 -0.1354052 -0.7935484 0.5932505 0.135406 -0.7935484 0.4757496 0.3793984 -0.7935485 0.2640209 0.5482461 -0.7935484 0.1375669 0.6027217 -0.7860037 0.1987407 0.8707421 -0.4497891 0.137567 0.6027217 -0.7860037 -0.1375673 0.6027217 -0.7860037 -0.04923392 0.2157078 -0.975216 -0.09370578 0.194582 -0.9764001 -0.1375673 0.6027217 -0.7860037 -0.168852 0.1346549 -0.9764001 -0.2105549 0.04805777 -0.9764001 -0.2105549 -0.04805776 -0.9764001 -0.168852 -0.1346549 -0.9764001 -0.09370578 -0.194582 -0.9764001 3.5372e-8 -0.2159697 -0.9764001 0.09370579 -0.194582 -0.9764001 0.168852 -0.1346549 -0.9764 0.210555 -0.04805767 -0.9764 0.2105549 0.04805796 -0.9764 0.1688518 0.1346551 -0.9764001 0.09370564 0.1945821 -0.9764001 0.04923379 0.2157078 -0.975216 -0.04923392 0.2157078 -0.975216 0.04923396 -0.215708 -0.9752159 0.09370587 -0.1945822 -0.9764 -0.04923392 0.2157078 -0.975216 0.1688521 -0.134655 -0.9764 0.2105551 -0.04805776 -0.9764 0.210555 0.04805779 -0.9764 0.1688521 0.134655 -0.9764 0.0937059 0.1945822 -0.9764 6.71373e-8 0.2159699 -0.9764 -0.09370582 0.1945822 -0.9764 -0.1688522 0.134655 -0.9764 -0.2105552 0.04805771 -0.9764 -0.210555 -0.04805798 -0.9764 -0.1688519 -0.1346552 -0.9764 -0.09370562 -0.1945823 -0.9764 -0.0492337 -0.215708 -0.9752159 0.04923421 -0.215708 -0.9752159 0.1375676 -0.6027218 -0.7860035 0.2640215 -0.5482461 -0.7935483 0.04923396 -0.215708 -0.9752159 0.4757503 -0.379398 -0.7935483 0.5932507 -0.1354055 -0.7935483 0.5932507 0.1354057 -0.7935483 0.4757503 0.379398 -0.7935482 0.2640218 0.548246 -0.7935483 8.35655e-8 0.6085073 -0.7935483 -0.2640215 0.5482461 -0.7935483 -0.4757503 0.379398 -0.7935483 -0.5932509 0.1354052 -0.7935483 -0.5932507 -0.135406 -0.7935483 -0.4757498 -0.3793985 -0.7935483 -0.3258031 -0.5168711 -0.7916417 -0.1375669 -0.6027219 -0.7860036 0.137568 -0.6027218 -0.7860035 -0.04052343 -0.8877354 -0.458567 0.3486632 -0.8174045 -0.4585671 0.1375676 -0.6027218 -0.7860035 0.6687933 -0.5851768 -0.458567 0.8564606 -0.2370474 -0.4585671 0.8744955 0.1580318 -0.458567 0.7193258 0.5218109 -0.458567 0.4216851 0.782239 -0.458567 0.04052431 0.8877353 -0.4585671 -0.3486632 0.8174045 -0.4585671 -0.6687933 0.5851767 -0.458567 -0.8564607 0.2370471 -0.4585671 -0.8744953 -0.1580326 -0.458567 -0.7193253 -0.5218116 -0.4585671 -0.5568597 -0.6982815 -0.449789 -0.137567 -0.6027219 -0.7860035 -0.1987408 -0.8707422 -0.449789 -0.137567 -0.6027219 -0.7860035 -0.137567 -0.6027219 -0.7860036 0.2225216 -0.9749278 3.13562e-8 0.6234895 -0.7818317 3.66863e-8 0.9009692 -0.4338831 3.47502e-8 1 0 2.59315e-8 0.9009689 0.4338836 1.19766e-8 0.6234899 0.7818314 -4.35029e-9 0.2225216 0.9749278 -1.98156e-8 -0.222521 0.9749279 -3.13562e-8 -0.6234901 0.7818313 -3.66863e-8 -0.9009689 0.4338837 -3.47502e-8 -1 -1.19783e-6 -2.59314e-8 -0.9009685 -0.4338844 -1.19766e-8 -0.623489 -0.7818321 4.35033e-9 -0.2225205 -0.974928 1.98156e-8 -0.1987408 -0.8707422 -0.449789 + + + + + + + + + + + + + + + + + +

0 0 86 0 1 1 1 1 2 2 2 2 0 0 87 3 2 2 2 2 3 3 3 4 0 0 88 5 3 3 3 4 4 4 4 6 0 0 89 7 4 4 4 6 5 5 5 8 0 0 90 9 5 5 5 8 6 6 6 10 0 0 91 11 6 6 6 10 7 7 7 12 0 0 92 13 7 7 7 12 8 8 8 14 0 0 93 15 8 8 8 14 9 9 9 16 0 0 94 17 9 9 9 16 10 10 10 18 0 0 95 19 10 10 10 18 11 11 11 20 0 0 96 21 11 11 11 20 12 12 12 22 0 0 97 23 12 12 12 22 13 13 13 24 0 0 98 25 13 13 13 24 14 14 14 26 0 0 0 27 14 14 99 28 1 1 1 1 1 1 1 1 15 15 100 29 16 16 16 30 1 1 1 1 16 16 16 30 2 2 2 2 2 2 2 2 16 16 16 30 17 17 17 31 2 2 2 2 17 17 17 31 3 3 3 4 3 3 3 4 17 17 17 31 18 18 18 32 3 3 3 4 18 18 18 32 4 4 4 6 4 4 4 6 18 18 18 32 19 19 19 33 4 4 4 6 19 19 19 33 5 5 5 8 5 5 5 8 19 19 19 33 20 20 20 34 5 5 5 8 20 20 20 34 6 6 6 10 6 6 6 10 20 20 20 34 21 21 21 35 6 6 6 10 21 21 21 35 7 7 7 12 7 7 7 12 21 21 21 35 22 22 22 36 7 7 7 12 22 22 22 36 8 8 8 14 8 8 8 14 22 22 22 36 23 23 23 37 8 8 8 14 23 23 23 37 9 9 9 16 9 9 9 16 23 23 23 37 24 24 24 38 9 9 9 16 24 24 24 38 10 10 10 18 10 10 10 18 24 24 24 38 25 25 25 39 10 10 10 18 25 25 25 39 11 11 11 20 11 11 11 20 25 25 25 39 26 26 26 40 11 11 11 20 26 26 26 40 12 12 12 22 12 12 12 22 26 26 26 40 27 27 27 41 12 12 12 22 27 27 27 41 13 13 13 24 13 13 13 24 27 27 27 41 28 28 28 42 13 13 13 24 28 28 28 42 14 14 14 26 14 14 14 26 28 28 28 42 15 15 15 43 14 14 101 44 15 15 102 45 1 1 1 1 15 15 103 46 29 29 104 47 30 30 30 48 15 15 105 49 30 30 30 48 16 16 16 30 16 16 16 30 30 30 30 48 31 31 31 50 16 16 16 30 31 31 31 50 17 17 17 31 17 17 17 31 31 31 31 50 32 32 32 51 17 17 17 31 32 32 32 51 18 18 18 32 18 18 18 32 32 32 32 51 33 33 33 52 18 18 18 32 33 33 33 52 19 19 19 33 19 19 19 33 33 33 33 52 34 34 34 53 19 19 19 33 34 34 34 53 20 20 20 34 20 20 20 34 34 34 34 53 35 35 35 54 20 20 20 34 35 35 35 54 21 21 21 35 21 21 21 35 35 35 35 54 36 36 36 55 21 21 21 35 36 36 36 55 22 22 22 36 22 22 22 36 36 36 36 55 37 37 37 56 22 22 22 36 37 37 37 56 23 23 23 37 23 23 23 37 37 37 37 56 38 38 38 57 23 23 23 37 38 38 38 57 24 24 24 38 24 24 24 38 38 38 38 57 39 39 39 58 24 24 24 38 39 39 39 58 25 25 25 39 25 25 25 39 39 39 39 58 40 40 40 59 25 25 25 39 40 40 40 59 26 26 26 40 26 26 26 40 40 40 40 59 41 41 41 60 26 26 26 40 41 41 41 60 27 27 27 41 27 27 27 41 41 41 41 60 42 42 42 61 27 27 27 41 42 42 42 61 28 28 28 42 28 28 28 42 42 42 42 61 29 29 29 62 28 28 28 42 29 29 29 62 15 15 15 43 29 29 106 63 43 43 107 64 44 44 44 65 29 29 108 66 44 44 44 65 30 30 30 48 30 30 30 48 44 44 44 65 45 45 45 67 30 30 30 48 45 45 45 67 31 31 31 50 31 31 31 50 45 45 45 67 46 46 46 68 31 31 31 50 46 46 46 68 32 32 32 51 32 32 32 51 46 46 46 68 47 47 47 69 32 32 32 51 47 47 47 69 33 33 33 52 33 33 33 52 47 47 47 69 48 48 48 70 33 33 33 52 48 48 48 70 34 34 34 53 34 34 34 53 48 48 48 70 49 49 49 71 34 34 34 53 49 49 49 71 35 35 35 54 35 35 35 54 49 49 49 71 50 50 50 72 35 35 35 54 50 50 50 72 36 36 36 55 36 36 36 55 50 50 50 72 51 51 51 73 36 36 36 55 51 51 51 73 37 37 37 56 37 37 37 56 51 51 51 73 52 52 52 74 37 37 37 56 52 52 52 74 38 38 38 57 38 38 38 57 52 52 52 74 53 53 53 75 38 38 38 57 53 53 53 75 39 39 39 58 39 39 39 58 53 53 53 75 54 54 54 76 39 39 39 58 54 54 54 76 40 40 40 59 40 40 40 59 54 54 54 76 55 55 55 77 40 40 40 59 55 55 55 77 41 41 41 60 41 41 41 60 55 55 55 77 56 56 56 78 41 41 41 60 56 56 56 78 42 42 42 61 42 42 42 61 56 56 56 78 43 43 43 79 42 42 42 61 43 43 43 79 29 29 29 62 43 43 109 80 57 57 110 81 58 58 58 82 43 43 111 83 58 58 58 82 44 44 44 65 44 44 44 65 58 58 58 82 59 59 59 84 44 44 44 65 59 59 59 84 45 45 45 67 45 45 45 67 59 59 59 84 60 60 60 85 45 45 45 67 60 60 60 85 46 46 46 68 46 46 46 68 60 60 60 85 61 61 61 86 46 46 46 68 61 61 61 86 47 47 47 69 47 47 47 69 61 61 61 86 62 62 62 87 47 47 47 69 62 62 62 87 48 48 48 70 48 48 48 70 62 62 62 87 63 63 63 88 48 48 48 70 63 63 63 88 49 49 49 71 49 49 49 71 63 63 63 88 64 64 64 89 49 49 49 71 64 64 64 89 50 50 50 72 50 50 50 72 64 64 64 89 65 65 65 90 50 50 50 72 65 65 65 90 51 51 51 73 51 51 51 73 65 65 65 90 66 66 66 91 51 51 51 73 66 66 66 91 52 52 52 74 52 52 52 74 66 66 66 91 67 67 67 92 52 52 52 74 67 67 67 92 53 53 53 75 53 53 53 75 67 67 67 92 68 68 68 93 53 53 53 75 68 68 68 93 54 54 54 76 54 54 54 76 68 68 68 93 69 69 69 94 54 54 54 76 69 69 69 94 55 55 55 77 55 55 55 77 69 69 69 94 70 70 70 95 55 55 55 77 70 70 70 95 56 56 56 78 56 56 56 78 70 70 70 95 57 57 57 96 56 56 56 78 57 57 57 96 43 43 43 79 57 57 112 97 71 71 71 98 72 72 72 99 57 57 113 100 72 72 72 99 58 58 58 82 58 58 58 82 72 72 72 99 73 73 73 101 58 58 58 82 73 73 73 101 59 59 59 84 59 59 59 84 73 73 73 101 74 74 74 102 59 59 59 84 74 74 74 102 60 60 60 85 60 60 60 85 74 74 74 102 75 75 75 103 60 60 60 85 75 75 75 103 61 61 61 86 61 61 61 86 75 75 75 103 76 76 76 104 61 61 61 86 76 76 76 104 62 62 62 87 62 62 62 87 76 76 76 104 77 77 77 105 62 62 62 87 77 77 77 105 63 63 63 88 63 63 63 88 77 77 77 105 78 78 78 106 63 63 63 88 78 78 78 106 64 64 64 89 64 64 64 89 78 78 78 106 79 79 79 107 64 64 64 89 79 79 79 107 65 65 65 90 65 65 65 90 79 79 79 107 80 80 80 108 65 65 65 90 80 80 80 108 66 66 66 91 66 66 66 91 80 80 80 108 81 81 81 109 66 66 66 91 81 81 81 109 67 67 67 92 67 67 67 92 81 81 81 109 82 82 82 110 67 67 67 92 82 82 82 110 68 68 68 93 68 68 68 93 82 82 82 110 83 83 83 111 68 68 68 93 83 83 83 111 69 69 69 94 69 69 69 94 83 83 83 111 84 84 84 112 69 69 69 94 84 84 84 112 70 70 70 95 70 70 114 113 84 84 115 114 71 71 71 98 70 70 116 115 71 71 71 98 57 57 117 116 85 85 118 117 72 72 72 99 71 71 71 98 85 85 119 118 73 73 73 101 72 72 72 99 85 85 120 119 74 74 74 102 73 73 73 101 85 85 121 120 75 75 75 103 74 74 74 102 85 85 122 121 76 76 76 104 75 75 75 103 85 85 123 122 77 77 77 105 76 76 76 104 85 85 124 123 78 78 78 106 77 77 77 105 85 85 125 124 79 79 79 107 78 78 78 106 85 85 126 125 80 80 80 108 79 79 79 107 85 85 127 126 81 81 81 109 80 80 80 108 85 85 128 127 82 82 82 110 81 81 81 109 85 85 129 128 83 83 83 111 82 82 82 110 85 85 130 129 84 84 84 112 83 83 83 111 85 85 85 130 71 71 71 98 84 84 131 131

+
+
+
+ + + + 0 0 5 -1.28465e-7 2.938926 4.045085 -1.727457 2.377641 4.045085 -2.795085 0.9081783 4.045085 -2.795085 -0.9081781 4.045085 -1.727458 -2.377641 4.045085 3.50463e-8 -2.938926 4.045085 1.727458 -2.377641 4.045085 2.795085 -0.9081767 4.045085 2.795084 0.9081804 4.045085 1.727455 2.377643 4.045085 -2.0786e-7 4.755283 1.545085 -2.795085 3.847105 1.545085 -4.522542 1.469463 1.545085 -4.522543 -1.469463 1.545085 -2.795086 -3.847104 1.545085 5.67062e-8 -4.755283 1.545085 2.795086 -3.847104 1.545085 4.522543 -1.469461 1.545085 4.522542 1.469467 1.545085 2.795081 3.847108 1.545085 -2.0786e-7 4.755282 -1.545085 -2.795084 3.847104 -1.545085 -4.522542 1.469463 -1.545085 -4.522542 -1.469463 -1.545085 -2.795086 -3.847103 -1.545085 5.67062e-8 -4.755282 -1.545085 2.795086 -3.847103 -1.545085 4.522543 -1.469461 -1.545085 4.522542 1.469467 -1.545085 2.795081 3.847107 -1.545085 -1.28465e-7 2.938926 -4.045085 -1.727457 2.377641 -4.045085 -2.795085 0.9081782 -4.045085 -2.795085 -0.908178 -4.045085 -1.727458 -2.37764 -4.045085 3.50463e-8 -2.938926 -4.045085 1.727458 -2.37764 -4.045085 2.795085 -0.9081766 -4.045085 2.795084 0.9081803 -4.045085 1.727455 2.377643 -4.045085 0 0 -5 + + + + + + + + + + 0 -2.11156e-8 1 -2.11354e-7 0.6252257 0.780444 -0.3674984 0.5058182 0.780444 -0.5946249 0.1932054 0.780444 -0.594625 -0.1932053 0.780444 -0.3674985 -0.5058182 0.780444 1.05677e-8 -0.6252257 0.780444 0.3674986 -0.5058181 0.780444 0.5946251 -0.1932051 0.780444 0.5946248 0.1932058 0.780444 0.3674981 0.5058185 0.780444 -2.70626e-7 0.9562714 0.2924812 -0.5620822 0.7736397 0.2924811 -0.909468 0.2955042 0.2924811 -0.9094681 -0.295504 0.2924812 -0.5620822 -0.7736397 0.2924811 5.52297e-9 -0.9562714 0.2924811 0.5620824 -0.7736396 0.2924811 0.9094682 -0.2955036 0.2924811 0.9094678 0.2955048 0.2924812 0.5620816 0.7736402 0.2924811 -2.70626e-7 0.9562712 -0.2924812 -0.5620822 0.7736397 -0.2924812 -0.909468 0.2955042 -0.2924812 -0.9094681 -0.295504 -0.2924812 -0.5620822 -0.7736396 -0.2924812 2.76149e-9 -0.9562712 -0.2924812 0.5620824 -0.7736395 -0.2924812 0.9094682 -0.2955037 -0.2924812 0.9094678 0.2955048 -0.2924812 0.5620815 0.7736402 -0.2924812 -1.638e-7 0.6252257 -0.780444 -0.3674985 0.5058182 -0.780444 -0.594625 0.1932054 -0.780444 -0.594625 -0.1932053 -0.780444 -0.3674985 -0.5058182 -0.780444 -3.17032e-8 -0.6252257 -0.780444 0.3674986 -0.5058181 -0.780444 0.5946251 -0.1932051 -0.780444 0.5946248 0.1932058 -0.780444 0.3674981 0.5058185 -0.780444 1.51768e-8 -4.22312e-8 -1 + + + + + + + + + + 0.95 1 0.999001 0.9999999 0.8 0.9990011 0.09999996 0.8 0.999001 0.2 0.8 0.999001 0.3 0.8 0.999001 0.3999999 0.8 0.999001 0.5 0.8 0.9990011 0.6 0.8 0.9990011 0.7 0.8 0.9990011 0.8000001 0.8 0.9990011 0.9000001 0.8 0.9990011 0.9999999 0.6 0.9990011 0.09999996 0.6 0.999001 0.2 0.6 0.999001 0.3 0.6 0.9990011 0.3999999 0.6 0.999001 0.5 0.6 0.9990011 0.6 0.6 0.9990011 0.7 0.6 0.9990011 0.8000001 0.6 0.9990011 0.9000001 0.6 0.9990011 0.9999999 0.4 0.9990011 0.09999996 0.4 0.999001 0.2 0.4 0.9990009 0.3 0.4 0.999001 0.3999999 0.4 0.999001 0.5 0.4 0.9990011 0.6 0.4 0.999001 0.7 0.4 0.9990011 0.8000001 0.4 0.9990011 0.9000001 0.4 0.999001 0.9999999 0.2 0.9990011 0.09999996 0.2 0.999001 0.2 0.2 0.999001 0.3 0.2 0.999001 0.3999999 0.2 0.999001 0.5 0.2 0.9990011 0.6 0.2 0.9990011 0.7 0.2 0.9990011 0.8000001 0.2 0.9990011 0.9000001 0.2 0.9990011 0.95 0 0.999001 0.04999995 1 0.999001 -5.96046e-8 0.8 0.9990011 0.15 1 0.999001 0.25 1 0.999001 0.35 1 0.999001 0.45 1 0.999001 0.55 1 0.999001 0.65 1 0.999001 0.7500001 1 0.999001 0.8500001 1 0.999001 -5.96046e-8 0.8 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.8 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.4 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.4 0.9990011 -5.96046e-8 0.2 0.9990011 -5.96046e-8 0.4 0.9990011 0.04999995 0 0.999001 -5.96046e-8 0.2 0.9990011 0.15 0 0.999001 0.25 0 0.999001 0.35 0 0.999001 0.45 0 0.999001 0.55 0 0.999001 0.65 0 0.999001 0.7500001 0 0.999001 0.8500001 0 0.999001 + + + + + + + + + + -0.9510565 -0.3090171 -6.52508e-9 -0.9510565 -0.1882202 0.1507859 -0.7472943 -0.5894716 0.03015721 -0.5877853 -0.809017 -1.70829e-8 -0.2580911 -0.9161411 0.03015718 -1.31262e-7 -1 -2.11156e-8 0.3296941 -0.8928759 0.0301572 0.5877852 -0.809017 -1.70829e-8 0.7915474 -0.5285625 0.03015717 0.9510565 -0.3090172 -6.52508e-9 0.9510565 0.03764403 0.0301572 0.9510565 0.3090172 6.52508e-9 0.7472941 0.5894718 0.03015722 0.587785 0.8090172 1.70829e-8 0.2580906 0.9161412 0.03015722 -6.5631e-7 1 2.11156e-8 -0.3296949 0.8928756 0.0301572 -0.587786 0.8090165 1.70829e-8 -0.7915479 0.5285618 0.03015718 -0.9510567 0.3090165 6.52507e-9 -0.9510567 0.1882196 -0.1507859 -0.9510565 -0.1882202 0.1507858 -0.9510566 -0.02643514 0.08642931 -0.7694209 -0.559017 7.9155e-10 -0.9510565 -0.1882202 0.1507859 -0.2938927 -0.9045085 -4.0073e-9 0.2938925 -0.9045085 -7.41231e-10 0.7694209 -0.5590171 -6.34775e-9 0.9510565 4.77085e-9 -2.3606e-9 0.7694207 0.5590172 -6.72929e-9 0.2938922 0.9045086 -2.86915e-9 -0.2938933 0.9045082 -2.409e-9 -0.7694214 0.5590164 -1.96186e-8 -0.9510566 0.0264346 -0.0864293 -0.9510566 -0.02643514 0.08642932 -0.9510566 -0.02643521 -0.08642933 -0.7694209 -0.559017 1.17386e-8 -0.9510566 -0.02643514 0.08642931 -0.2938927 -0.9045085 -3.27196e-9 0.2938926 -0.9045085 1.16709e-8 0.7694209 -0.5590171 -4.67655e-8 0.9510565 2.37408e-9 1.21738e-9 0.7694207 0.5590172 1.66922e-8 0.2938922 0.9045086 -7.07564e-9 -0.2938933 0.9045082 1.75192e-8 -0.7694214 0.5590164 1.41495e-8 -0.9510566 0.02643467 0.08642932 -0.9510567 -0.0264351 -0.08642897 -0.9510566 -0.1882199 -0.1507856 -0.7915475 -0.5285623 0.03015731 -0.9510566 -0.02643521 -0.08642933 -0.3296942 -0.8928758 0.03015721 0.258091 -0.9161412 0.03015719 0.7472943 -0.5894716 0.03015712 0.9510565 -0.03764394 0.03015711 0.7915473 0.5285625 0.03015719 0.3296938 0.892876 0.03015719 -0.2580917 0.9161409 0.03015721 -0.7472948 0.5894711 0.03015717 -0.9510567 0.1882196 0.1507858 -0.9510566 -0.3090166 -1.38389e-9 -0.9510567 -0.1882199 -0.1507856 -0.5877853 -0.8090169 2.5245e-8 -6.40936e-16 -1 4.22312e-8 0.5877852 -0.809017 4.30865e-8 0.9510566 -0.3090169 2.74842e-8 0.9510565 0.3090172 1.38386e-9 0.587785 0.8090172 -2.5245e-8 -6.5631e-7 1 -4.22312e-8 -0.587786 0.8090165 -4.30865e-8 -0.9510567 0.3090165 -2.74842e-8 + + + + + + + + + + -0.3090171 0.9510565 2.00821e-8 -0.2458018 0.7565 -0.6060439 -0.4991224 0.60081 -0.6244231 -0.809017 0.5877853 1.24114e-8 -0.7569457 0.1926888 -0.6244232 -1 1.31262e-7 2.77168e-15 -0.7256415 -0.289033 -0.6244231 -0.809017 -0.5877852 -1.24114e-8 -0.417167 -0.660354 -0.6244232 -0.3090172 -0.9510565 -2.00821e-8 0.05065125 -0.7794422 -0.6244232 0.3090172 -0.9510565 -2.00821e-8 0.4991225 -0.6008098 -0.6244231 0.8090172 -0.587785 -1.24114e-8 0.7569458 -0.1926883 -0.6244232 1 6.5631e-7 1.38584e-14 0.7256413 0.2890337 -0.6244231 0.8090165 0.587786 1.24115e-8 0.4171665 0.6603543 -0.6244232 0.3090165 0.9510567 2.00821e-8 0.2458013 0.7565002 -0.6060439 -0.2458018 0.7565 -0.6060439 -0.09460663 0.2911693 -0.9519822 -0.1719161 0.2366222 -0.9562713 -0.2458018 0.7565 -0.6060439 -0.2781661 0.09038166 -0.9562713 -0.2781661 -0.09038162 -0.9562713 -0.1719161 -0.2366222 -0.9562713 -9.06353e-10 -0.2924811 -0.9562713 0.1719161 -0.2366221 -0.9562713 0.2781661 -0.09038149 -0.9562713 0.2781661 0.09038187 -0.9562713 0.1719159 0.2366223 -0.9562713 0.09460646 0.2911693 -0.9519822 -0.09460664 0.2911693 -0.9519822 0.09460667 -0.2911693 -0.9519821 0.1719161 -0.2366223 -0.9562713 -0.09460663 0.2911693 -0.9519822 0.2781661 -0.09038168 -0.9562713 0.2781662 0.09038165 -0.9562713 0.1719161 0.2366223 -0.9562713 4.93948e-10 0.2924813 -0.9562713 -0.1719162 0.2366222 -0.9562713 -0.2781662 0.09038154 -0.9562713 -0.2781661 -0.09038187 -0.9562713 -0.171916 -0.2366224 -0.9562713 -0.09460649 -0.2911694 -0.9519821 0.09460628 -0.2911694 -0.9519822 0.2458014 -0.7565001 -0.6060439 0.4171668 -0.6603542 -0.6244231 0.09460667 -0.2911693 -0.9519821 0.7256415 -0.2890331 -0.6244232 0.7569457 0.1926887 -0.6244231 0.4991223 0.60081 -0.6244231 0.05065112 0.7794422 -0.6244232 -0.4171671 0.6603539 -0.6244232 -0.7256416 0.2890327 -0.6244232 -0.7569456 -0.1926893 -0.6244231 -0.4991219 -0.6008104 -0.6244231 -0.2458013 -0.7565002 -0.6060439 0.3090166 -0.9510566 4.48541e-8 0.2458014 -0.7565001 -0.6060439 0.8090169 -0.5877853 3.71012e-8 1 0 1.51768e-8 0.809017 0.5877852 -1.25446e-8 0.3090169 0.9510566 -3.54744e-8 -0.3090172 0.9510565 -4.48541e-8 -0.8090172 0.587785 -3.71012e-8 -1 -6.5631e-7 -1.51768e-8 -0.8090165 -0.587786 1.25446e-8 -0.3090165 -0.9510567 3.54744e-8 + + + + + + + + + + + + + + + + + +

0 0 42 0 1 1 43 1 2 2 2 2 0 0 44 3 2 2 2 2 3 3 3 4 0 0 45 5 3 3 3 4 4 4 4 6 0 0 46 7 4 4 4 6 5 5 5 8 0 0 47 9 5 5 5 8 6 6 6 10 0 0 48 11 6 6 6 10 7 7 7 12 0 0 49 13 7 7 7 12 8 8 8 14 0 0 50 15 8 8 8 14 9 9 9 16 0 0 51 17 9 9 9 16 10 10 10 18 0 0 0 19 10 10 10 18 1 1 1 20 1 1 52 21 11 11 53 22 12 12 12 23 1 1 54 24 12 12 12 23 2 2 2 2 2 2 2 2 12 12 12 23 13 13 13 25 2 2 2 2 13 13 13 25 3 3 3 4 3 3 3 4 13 13 13 25 14 14 14 26 3 3 3 4 14 14 14 26 4 4 4 6 4 4 4 6 14 14 14 26 15 15 15 27 4 4 4 6 15 15 15 27 5 5 5 8 5 5 5 8 15 15 15 27 16 16 16 28 5 5 5 8 16 16 16 28 6 6 6 10 6 6 6 10 16 16 16 28 17 17 17 29 6 6 6 10 17 17 17 29 7 7 7 12 7 7 7 12 17 17 17 29 18 18 18 30 7 7 7 12 18 18 18 30 8 8 8 14 8 8 8 14 18 18 18 30 19 19 19 31 8 8 8 14 19 19 19 31 9 9 9 16 9 9 9 16 19 19 19 31 20 20 20 32 9 9 9 16 20 20 20 32 10 10 10 18 10 10 10 18 20 20 20 32 11 11 11 33 10 10 10 18 11 11 11 33 1 1 1 20 11 11 55 34 21 21 56 35 22 22 22 36 11 11 57 37 22 22 22 36 12 12 12 23 12 12 12 23 22 22 22 36 23 23 23 38 12 12 12 23 23 23 23 38 13 13 13 25 13 13 13 25 23 23 23 38 24 24 24 39 13 13 13 25 24 24 24 39 14 14 14 26 14 14 14 26 24 24 24 39 25 25 25 40 14 14 14 26 25 25 25 40 15 15 15 27 15 15 15 27 25 25 25 40 26 26 26 41 15 15 15 27 26 26 26 41 16 16 16 28 16 16 16 28 26 26 26 41 27 27 27 42 16 16 16 28 27 27 27 42 17 17 17 29 17 17 17 29 27 27 27 42 28 28 28 43 17 17 17 29 28 28 28 43 18 18 18 30 18 18 18 30 28 28 28 43 29 29 29 44 18 18 18 30 29 29 29 44 19 19 19 31 19 19 19 31 29 29 29 44 30 30 30 45 19 19 19 31 30 30 30 45 20 20 20 32 20 20 20 32 30 30 30 45 21 21 21 46 20 20 20 32 21 21 21 46 11 11 11 33 21 21 58 47 31 31 59 48 32 32 32 49 21 21 60 50 32 32 32 49 22 22 22 36 22 22 22 36 32 32 32 49 33 33 33 51 22 22 22 36 33 33 33 51 23 23 23 38 23 23 23 38 33 33 33 51 34 34 34 52 23 23 23 38 34 34 34 52 24 24 24 39 24 24 24 39 34 34 34 52 35 35 35 53 24 24 24 39 35 35 35 53 25 25 25 40 25 25 25 40 35 35 35 53 36 36 36 54 25 25 25 40 36 36 36 54 26 26 26 41 26 26 26 41 36 36 36 54 37 37 37 55 26 26 26 41 37 37 37 55 27 27 27 42 27 27 27 42 37 37 37 55 38 38 38 56 27 27 27 42 38 38 38 56 28 28 28 43 28 28 28 43 38 38 38 56 39 39 39 57 28 28 28 43 39 39 39 57 29 29 29 44 29 29 29 44 39 39 39 57 40 40 40 58 29 29 29 44 40 40 40 58 30 30 30 45 30 30 30 45 40 40 40 58 31 31 31 59 30 30 30 45 31 31 31 59 21 21 21 46 41 41 61 60 32 32 32 49 31 31 62 61 41 41 63 62 33 33 33 51 32 32 32 49 41 41 64 63 34 34 34 52 33 33 33 51 41 41 65 64 35 35 35 53 34 34 34 52 41 41 66 65 36 36 36 54 35 35 35 53 41 41 67 66 37 37 37 55 36 36 36 54 41 41 68 67 38 38 38 56 37 37 37 55 41 41 69 68 39 39 39 57 38 38 38 56 41 41 70 69 40 40 40 58 39 39 39 57 41 41 41 70 31 31 31 59 40 40 40 58

+
+
+
+ + + + 0 0 5 -1.54543e-7 3.535534 3.535534 -2.5 2.5 3.535534 -3.535534 -3.09086e-7 3.535534 -2.5 -2.5 3.535534 4.21608e-8 -3.535534 3.535534 2.5 -2.5 3.535534 3.535534 -1.0677e-6 3.535534 2.500001 2.499999 3.535534 -2.18557e-7 5 -2.18557e-7 -3.535534 3.535534 -2.18557e-7 -5 -4.37114e-7 -2.18557e-7 -3.535533 -3.535534 -2.18557e-7 5.96244e-8 -5 -2.18557e-7 3.535533 -3.535534 -2.18557e-7 5 -1.50996e-6 -2.18557e-7 3.535536 3.535532 -2.18557e-7 -1.54543e-7 3.535534 -3.535534 -2.5 2.5 -3.535534 -3.535534 -3.09086e-7 -3.535534 -2.5 -2.5 -3.535534 4.21608e-8 -3.535534 -3.535534 2.5 -2.5 -3.535534 3.535534 -1.0677e-6 -3.535534 2.500001 2.499999 -3.535534 0 0 -5 + + + + + + + + + + 9.88537e-9 3.95415e-8 1 6.9026e-8 0.7486158 0.6630041 -0.5293514 0.5293513 0.6630041 -0.7486159 -8.05304e-8 0.6630041 -0.5293513 -0.5293514 0.663004 1.15043e-8 -0.7486158 0.6630041 0.5293513 -0.5293514 0.6630041 0.7486158 -2.01326e-7 0.6630041 0.5293515 0.5293512 0.6630041 7.27742e-8 1 -1.2129e-8 -0.7071067 0.7071068 -3.63871e-8 -1 -9.70323e-8 -1.81936e-8 -0.7071068 -0.7071068 -1.2129e-8 0 -1 3.03226e-8 0.7071066 -0.7071069 0 1 -3.21419e-7 -4.24516e-8 0.7071069 0.7071065 -1.2129e-8 6.32739e-8 0.7486157 -0.6630041 -0.5293513 0.5293513 -0.6630042 -0.7486158 -6.9026e-8 -0.6630042 -0.5293512 -0.5293514 -0.663004 2.30087e-8 -0.7486158 -0.6630041 0.5293512 -0.5293514 -0.6630041 0.7486158 -1.86945e-7 -0.6630042 0.5293514 0.5293511 -0.6630041 9.88537e-9 2.82439e-8 -1 + + + + + + + + + + 0.5 0.5 5.5 0.5000007 4.035534 4.035534 -2 3 4.035534 -3.035534 0.5000005 4.035534 -2 -2 4.035534 0.4999992 -3.035534 4.035534 2.999999 -2.000001 4.035534 4.035534 0.4999981 4.035534 3.000002 2.999998 4.035534 0.500001 5.5 0.4999998 -3.035533 4.035535 0.4999998 -4.5 0.5000008 0.4999998 -3.035534 -3.035533 0.4999998 0.4999989 -4.5 0.4999998 4.035532 -3.035535 0.4999998 5.5 0.4999973 0.4999998 4.035537 4.035532 0.4999998 0.5000007 4.035534 -3.035534 -2 3 -3.035534 -3.035534 0.5000005 -3.035534 -2 -2 -3.035534 0.4999992 -3.035534 -3.035534 2.999999 -2.000001 -3.035534 4.035534 0.4999981 -3.035534 3.000002 2.999998 -3.035534 0.5 0.5 -4.5 + + + + + + + + + + 0.954739 2.15833e-7 -9.43795e-9 0.8185035 -0.07019225 0.07925587 0.7049205 -0.02852993 0.5855967 0.6144843 1.61232e-7 0.6938309 0.7364077 -0.004867014 0.5840719 0.8185036 -0.07019225 -0.07925597 0.7049205 -0.02852995 -0.5855966 0.6144844 1.36677e-7 -0.6938309 0.7364076 -0.004866982 -0.584072 0.7071067 -5.4318e-8 -0.2357023 0.2724478 0.2724477 -0.03612882 -1.08617e-14 7.48297e-8 -5.34923e-9 0.2724474 -0.2724474 0.03612879 0.7071068 7.1471e-9 0.2357022 0.2724478 0.2724477 0.03612882 3.23075e-14 2.23624e-7 1.56345e-8 0.2724472 -0.2724473 -0.03612873 0.8185034 0.07019258 0.07925641 0.7364079 0.004867376 -0.5840717 0.6144844 1.60997e-7 -0.6938308 0.7049204 0.02853028 -0.5855968 0.8185035 0.07019259 -0.07925631 0.736408 0.004867405 0.5840716 0.6144844 1.54593e-7 0.6938308 0.7049204 0.02853028 0.5855969 0.954739 2.15833e-7 9.43795e-9 + + + + + + + + + + 2.26065e-7 -1 3.95415e-8 -0.1282771 -0.6575266 0.742431 -0.3587224 -0.8478319 0.3905115 1.75624e-7 -1 7.68394e-8 0.3255071 -0.8483869 -0.4174744 -0.1282772 -0.6575266 -0.742431 -0.3587225 -0.8478319 -0.3905116 -5.29431e-8 -1 -2.43878e-7 0.325507 -0.848387 0.4174741 0.3162278 -1.15066e-8 0.9486833 0.06601453 0.06601457 0.9956325 -2.5066e-8 0.07130344 0.9974547 0.06601458 -0.06601456 -0.9956325 0.3162277 -2.87665e-8 -0.9486833 0.06601455 0.06601453 -0.9956325 -1.99311e-8 0.06974413 -0.9975649 0.06601449 -0.06601451 0.9956325 -0.1282779 0.6575266 0.7424309 0.3255066 0.848387 0.4174746 -1.66844e-7 1 8.42766e-8 -0.3587228 0.8478319 -0.3905113 -0.1282778 0.6575265 -0.7424309 0.3255067 0.8483869 -0.4174747 2.93614e-8 1 -2.48815e-7 -0.3587227 0.847832 0.3905111 -2.26065e-7 1 2.82439e-8 + + + + + + + + + + + + + + + + + +

0 0 0 0 1 1 1 1 2 2 2 2 0 0 0 0 2 2 2 2 3 3 3 3 0 0 0 0 3 3 3 3 4 4 4 4 0 0 0 0 4 4 4 4 5 5 5 5 0 0 0 0 5 5 5 5 6 6 6 6 0 0 0 0 6 6 6 6 7 7 7 7 0 0 0 0 7 7 7 7 8 8 8 8 0 0 0 0 8 8 8 8 1 1 1 1 1 1 1 1 9 9 9 9 10 10 10 10 1 1 1 1 10 10 10 10 2 2 2 2 2 2 2 2 10 10 10 10 11 11 11 11 2 2 2 2 11 11 11 11 3 3 3 3 3 3 3 3 11 11 11 11 12 12 12 12 3 3 3 3 12 12 12 12 4 4 4 4 4 4 4 4 12 12 12 12 13 13 13 13 4 4 4 4 13 13 13 13 5 5 5 5 5 5 5 5 13 13 13 13 14 14 14 14 5 5 5 5 14 14 14 14 6 6 6 6 6 6 6 6 14 14 14 14 15 15 15 15 6 6 6 6 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 16 16 16 16 7 7 7 7 16 16 16 16 8 8 8 8 8 8 8 8 16 16 16 16 9 9 9 9 8 8 8 8 9 9 9 9 1 1 1 1 9 9 9 9 17 17 17 17 18 18 18 18 9 9 9 9 18 18 18 18 10 10 10 10 10 10 10 10 18 18 18 18 19 19 19 19 10 10 10 10 19 19 19 19 11 11 11 11 11 11 11 11 19 19 19 19 20 20 20 20 11 11 11 11 20 20 20 20 12 12 12 12 12 12 12 12 20 20 20 20 21 21 21 21 12 12 12 12 21 21 21 21 13 13 13 13 13 13 13 13 21 21 21 21 22 22 22 22 13 13 13 13 22 22 22 22 14 14 14 14 14 14 14 14 22 22 22 22 23 23 23 23 14 14 14 14 23 23 23 23 15 15 15 15 15 15 15 15 23 23 23 23 24 24 24 24 15 15 15 15 24 24 24 24 16 16 16 16 16 16 16 16 24 24 24 24 17 17 17 17 16 16 16 16 17 17 17 17 9 9 9 9 25 25 25 25 18 18 18 18 17 17 17 17 25 25 25 25 19 19 19 19 18 18 18 18 25 25 25 25 20 20 20 20 19 19 19 19 25 25 25 25 21 21 21 21 20 20 20 20 25 25 25 25 22 22 22 22 21 21 21 21 25 25 25 25 23 23 23 23 22 22 22 22 25 25 25 25 24 24 24 24 23 23 23 23 25 25 25 25 17 17 17 17 24 24 24 24

+
+
+
+ + + + 0 0 5 -1.89276e-7 4.330127 2.5 -3.75 2.165064 2.5 -3.75 -2.165064 2.5 5.16362e-8 -4.330127 2.5 3.75 -2.165064 2.5 3.750001 2.165062 2.5 -1.89276e-7 4.330127 -2.5 -3.75 2.165064 -2.5 -3.75 -2.165063 -2.5 5.16362e-8 -4.330127 -2.5 3.75 -2.165064 -2.5 3.750001 2.165062 -2.5 0 0 -5 + + + + + + + + + + -1.99952e-8 1.33301e-8 1 7.03834e-8 0.8973439 0.441332 -0.7771226 0.448672 0.441332 -0.7771226 -0.448672 0.441332 -3.51917e-8 -0.8973439 0.441332 0.7771224 -0.4486721 0.441332 0.7771227 0.4486718 0.441332 8.44601e-8 0.8973438 -0.4413321 -0.7771226 0.4486719 -0.4413322 -0.7771226 -0.4486719 -0.4413321 -4.92684e-8 -0.8973439 -0.4413321 0.7771225 -0.4486721 -0.4413321 0.7771227 0.4486717 -0.4413321 -6.66506e-9 1.33301e-8 -1 + + + + + + + + + + 0.9166666 1 0.999001 0.9999999 0.6666667 0.9990011 0.1666667 0.6666666 0.9990012 0.3333333 0.6666667 0.9990011 0.5 0.6666667 0.9990011 0.6666666 0.6666667 0.999001 0.8333333 0.6666667 0.999001 0.9999999 0.3333333 0.999001 0.1666666 0.3333333 0.9990011 0.3333333 0.3333333 0.9990011 0.5 0.3333333 0.999001 0.6666666 0.3333333 0.999001 0.8333332 0.3333333 0.9990009 0.9166666 0 0.999001 0.08333331 1 0.999001 -5.96046e-8 0.6666667 0.9990011 0.25 1 0.999001 0.4166666 1 0.999001 0.5833333 1 0.999001 0.7499999 1 0.999001 -5.96046e-8 0.6666667 0.9990011 -5.96046e-8 0.3333333 0.999001 -5.96046e-8 0.6666667 0.9990011 0.08333328 0 0.999001 -5.96046e-8 0.3333333 0.999001 0.25 0 0.999001 0.4166666 0 0.999001 0.5833333 0 0.999001 0.7499999 0 0.999001 + + + + + + + + + + -0.8660253 -0.5000002 -1.06513e-8 -0.8660252 -0.09738706 0.1980136 -0.4161448 -0.7597387 0.03960266 -3.09715e-7 -1 1.33301e-8 0.4498806 -0.7402613 0.03960252 0.8660254 -0.5 2.39814e-8 0.8660254 0.01947738 0.03960269 0.8660254 0.4999999 1.06513e-8 0.416145 0.7597387 0.03960266 3.30363e-7 1 -1.33301e-8 -0.4498804 0.7402614 0.03960264 -0.8660253 0.5000001 -2.39814e-8 -0.8660254 0.09738707 -0.1980133 -0.8660254 -0.09738693 0.1980133 -0.8660254 -0.09738697 -0.1980133 -0.4498806 -0.7402613 0.03960274 -0.8660254 -0.09738709 0.1980137 0.4161448 -0.7597387 0.03960259 0.8660254 -0.01947747 0.03960272 0.4498808 0.7402612 0.03960273 -0.4161446 0.7597387 0.0396026 -0.8660254 0.09738708 0.1980132 -0.8660254 -0.5 -8.92948e-10 -0.8660254 -0.09738697 -0.1980133 0 -1 -1.33301e-8 0.8660254 -0.5 -1.24372e-8 0.8660255 0.4999998 8.92944e-10 2.75302e-7 1 1.33301e-8 -0.8660254 0.5 1.24372e-8 + + + + + + + + + + -0.5000002 0.8660253 -2.15418e-8 -0.2469142 0.4276673 -0.8695597 -0.4071567 0.176304 -0.896181 -1 3.09715e-7 -1.99952e-8 -0.3562622 -0.2644559 -0.896181 -0.5 -0.8660254 1.54663e-9 0.05089461 -0.4407601 -0.896181 0.4999999 -0.8660254 2.15418e-8 0.4071567 -0.1763041 -0.8961809 1 -3.30363e-7 1.99952e-8 0.3562622 0.2644559 -0.896181 0.5000001 0.8660253 -1.54663e-9 0.2469139 0.4276673 -0.8695598 -0.2469138 0.4276673 -0.8695598 0.2469139 -0.4276674 -0.8695598 0.3562622 -0.2644562 -0.8961809 -0.2469142 0.4276672 -0.8695597 0.4071568 0.1763041 -0.8961809 0.05089469 0.4407602 -0.8961809 -0.3562621 0.2644562 -0.8961809 -0.4071568 -0.176304 -0.8961809 -0.2469138 -0.4276673 -0.8695598 0.5 -0.8660254 -1.48767e-8 0.2469139 -0.4276674 -0.8695598 1 0 -6.66506e-9 0.5 0.8660254 8.21169e-9 -0.4999998 0.8660255 1.48767e-8 -1 2.75302e-7 6.66506e-9 -0.5 -0.8660254 -8.21169e-9 + + + + + + + + + + + + + + + + + +

0 0 14 0 1 1 15 1 2 2 2 2 0 0 16 3 2 2 2 2 3 3 3 4 0 0 17 5 3 3 3 4 4 4 4 6 0 0 18 7 4 4 4 6 5 5 5 8 0 0 19 9 5 5 5 8 6 6 6 10 0 0 0 11 6 6 6 10 1 1 1 12 1 1 20 13 7 7 21 14 8 8 8 15 1 1 22 16 8 8 8 15 2 2 2 2 2 2 2 2 8 8 8 15 9 9 9 17 2 2 2 2 9 9 9 17 3 3 3 4 3 3 3 4 9 9 9 17 10 10 10 18 3 3 3 4 10 10 10 18 4 4 4 6 4 4 4 6 10 10 10 18 11 11 11 19 4 4 4 6 11 11 11 19 5 5 5 8 5 5 5 8 11 11 11 19 12 12 12 20 5 5 5 8 12 12 12 20 6 6 6 10 6 6 6 10 12 12 12 20 7 7 7 21 6 6 6 10 7 7 7 21 1 1 1 12 13 13 23 22 8 8 8 15 7 7 24 23 13 13 25 24 9 9 9 17 8 8 8 15 13 13 26 25 10 10 10 18 9 9 9 17 13 13 27 26 11 11 11 19 10 10 10 18 13 13 28 27 12 12 12 20 11 11 11 19 13 13 13 28 7 7 7 21 12 12 12 20

+
+
+
+
+ + + + + 0 0 0 + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + +
\ No newline at end of file diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.cs b/Templates/Full/game/art/environment/LightVolume_Sphere.cs new file mode 100644 index 0000000000..475da3bee9 --- /dev/null +++ b/Templates/Full/game/art/environment/LightVolume_Sphere.cs @@ -0,0 +1,8 @@ + +singleton TSShapeConstructor(LightVolume_SphereDAE) +{ + baseShape = "./LightVolume_Sphere.DAE"; + lodType = "TrailingNumber"; + neverImport = "env*"; + loadLights = "0"; +}; diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.dts b/Templates/Full/game/art/environment/LightVolume_Sphere.dts new file mode 100644 index 0000000000..223993dd63 Binary files /dev/null and b/Templates/Full/game/art/environment/LightVolume_Sphere.dts differ diff --git a/Templates/Full/game/art/gui/mainMenuGui.gui b/Templates/Full/game/art/gui/mainMenuGui.gui index ac38976d3a..bde78491ff 100644 --- a/Templates/Full/game/art/gui/mainMenuGui.gui +++ b/Templates/Full/game/art/gui/mainMenuGui.gui @@ -16,7 +16,7 @@ isContainer = "1"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; new GuiBitmapCtrl(MainMenuAppLogo) { @@ -35,7 +35,7 @@ isContainer = "0"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; }; new GuiControl() { @@ -59,7 +59,7 @@ buttonType = "PushButton"; useMouseEvents = "1"; position = "9 18"; - extent = "289 75"; + extent = "219 75"; minExtent = "8 8"; horizSizing = "relative"; vertSizing = "bottom"; @@ -178,6 +178,26 @@ canSave = "1"; canSaveDynamicFields = "0"; }; + new GuiButtonCtrl() { + text = "Replay"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; + position = "215 18"; + extent = "83 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiMenuButtonProfile"; + visible = "1"; + active = "1"; + command = "Canvas.pushDialog(RecordingsDlg);"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; }; //--- OBJECT WRITE END --- diff --git a/Templates/Full/game/art/gui/optionsDlg.gui b/Templates/Full/game/art/gui/optionsDlg.gui index fcff1cb956..9f12a272ab 100644 --- a/Templates/Full/game/art/gui/optionsDlg.gui +++ b/Templates/Full/game/art/gui/optionsDlg.gui @@ -33,7 +33,7 @@ anchorLeft = "1"; anchorRight = "0"; position = "323 232"; - extent = "377 303"; + extent = "377 355"; minExtent = "8 8"; horizSizing = "center"; vertSizing = "center"; @@ -51,7 +51,7 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - position = "306 271"; + position = "304 319"; extent = "60 23"; minExtent = "8 8"; horizSizing = "right"; @@ -179,47 +179,49 @@ canSave = "1"; canSaveDynamicFields = "0"; }; - - new GuiSliderCtrl(OptMouseSensitivity) { - range = "0.02 2"; - ticks = "10"; - value = "0.75"; - isContainer = "0"; - Profile = "GuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "105 182"; - Extent = "244 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "OptMouseSetSensitivity(OptMouseSensitivity.value);"; - tooltipprofile = "GuiToolTipProfile"; - hovertime = "1000"; - canSaveDynamicFields = "0"; - }; - new GuiTextCtrl() { - text = "Mouse Sensitivity:"; - maxLength = "255"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - isContainer = "0"; - Profile = "GuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "15 182"; - Extent = "85 18"; - MinExtent = "8 8"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "GuiToolTipProfile"; - hovertime = "1000"; - canSaveDynamicFields = "0"; - }; + new GuiSliderCtrl(OptMouseSensitivity) { + range = "0.02 2"; + ticks = "10"; + snap = "0"; + value = "1"; + position = "105 182"; + extent = "244 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + command = "OptMouseSetSensitivity(OptMouseSensitivity.value);"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Mouse Sensitivity:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "15 182"; + extent = "85 18"; + minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl() { position = "9 55"; @@ -601,7 +603,7 @@ }; new GuiBitmapBorderCtrl() { position = "9 55"; - extent = "358 210"; + extent = "358 252"; minExtent = "8 8"; horizSizing = "right"; vertSizing = "bottom"; @@ -1253,7 +1255,7 @@ canSaveDynamicFields = "0"; }; new GuiControl() { - position = "0 190"; + position = "0 227"; extent = "352 15"; minExtent = "8 2"; horizSizing = "width"; @@ -1269,7 +1271,7 @@ canSaveDynamicFields = "0"; new GuiSliderCtrl() { - range = "0.001 2.2"; + range = "0.5 1.5"; ticks = "0"; snap = "0"; value = "1"; @@ -1281,6 +1283,66 @@ profile = "GuiSliderProfile"; visible = "1"; active = "1"; + variable = "$pref::Video::Contrast"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Contrast:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "18 -4"; + extent = "105 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiControl() { + position = "0 190"; + extent = "352 15"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "GammaSliderContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl() { + range = "2.0 2.5"; + ticks = "0"; + snap = "0"; + value = "2.2"; + position = "76 -1"; + extent = "268 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; variable = "$pref::Video::Gamma"; tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; @@ -1312,6 +1374,66 @@ canSaveDynamicFields = "0"; }; }; + new GuiControl() { + position = "0 208"; + extent = "352 15"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "GammaSliderContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl() { + range = "-0.5 0.5"; + ticks = "0"; + snap = "0"; + value = "0"; + position = "76 -1"; + extent = "268 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + variable = "$pref::Video::Brightness"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Brightness:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "6 -3"; + extent = "105 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; }; new GuiControl() { position = "9 55"; @@ -1396,7 +1518,7 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - position = "241 271"; + position = "239 319"; extent = "60 23"; minExtent = "8 8"; horizSizing = "right"; diff --git a/Templates/Full/game/art/prefabs/fire.prefab b/Templates/Full/game/art/prefabs/fire.prefab new file mode 100644 index 0000000000..6213e33a86 --- /dev/null +++ b/Templates/Full/game/art/prefabs/fire.prefab @@ -0,0 +1,49 @@ +//--- OBJECT WRITE BEGIN --- +$ThisPrefab = new SimGroup() { + canSave = "1"; + canSaveDynamicFields = "1"; + + new ParticleEmitterNode() { + active = "1"; + emitter = "FireEmitter"; + velocity = "1"; + dataBlock = "EmberNode"; + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + new PointLight() { + radius = "10"; + isEnabled = "1"; + color = "1 0.603922 0 1"; + brightness = "1"; + castShadows = "1"; + staticRefreshFreq = "250"; + dynamicRefreshFreq = "8"; + priority = "1"; + animate = "1"; + animationPeriod = "1"; + animationPhase = "1"; + flareScale = "1"; + attenuationRatio = "0 1 1"; + shadowType = "DualParaboloidSinglePass"; + texSize = "512"; + overDarkFactor = "2000 1000 500 100"; + shadowDistance = "400"; + shadowSoftness = "0.15"; + numSplits = "1"; + logWeight = "0.91"; + fadeStartDistance = "0"; + lastSplitTerrainOnly = "0"; + representedInLightmap = "0"; + shadowDarkenColor = "0 0 0 -1"; + includeLightmappedGeometryInShadow = "0"; + position = "0 0 0"; + rotation = "1 0 0 0"; + canSave = "1"; + canSaveDynamicFields = "1"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/Templates/Full/game/art/shapes/Cheetah/materials.cs b/Templates/Full/game/art/shapes/Cheetah/materials.cs index 68b3e7b5be..a8eed41be2 100644 --- a/Templates/Full/game/art/shapes/Cheetah/materials.cs +++ b/Templates/Full/game/art/shapes/Cheetah/materials.cs @@ -29,6 +29,7 @@ singleton Material(Cheetah_Main) translucentBlendOp = "None"; normalMap[0] = "art/shapes/Cheetah/Cheetah_N"; specularMap[0] = "art/shapes/Cheetah/Cheetah_S"; + castDynamicShadows = true; }; singleton Material(Cheetah_TailLights) diff --git a/Templates/Full/game/art/shapes/actors/Soldier/materials.cs b/Templates/Full/game/art/shapes/actors/Soldier/materials.cs index d87ec620d2..6eb3eb8067 100644 --- a/Templates/Full/game/art/shapes/actors/Soldier/materials.cs +++ b/Templates/Full/game/art/shapes/actors/Soldier/materials.cs @@ -35,6 +35,7 @@ singleton Material(Mat_Soldier_Main) doubleSided = false; translucent = false; showFootprints = "0"; + castDynamicShadows = true; materialTag0 = "Player"; }; @@ -55,6 +56,7 @@ singleton Material(Mat_Soldier_Dazzle) emissive[0] = "1"; castShadows = "0"; showFootprints = "0"; + castDynamicShadows = true; materialTag0 = "Player"; }; diff --git a/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml b/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml new file mode 100644 index 0000000000..4ba732205c --- /dev/null +++ b/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml @@ -0,0 +1,3 @@ + diff --git a/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs b/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs index f82946ccbb..c17ea71eb2 100644 --- a/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs +++ b/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs @@ -27,7 +27,6 @@ singleton Material(defaultTree_bark_material) diffuseMap[0] = "art/shapes/trees/defaulttree/defaulttree_bark_diffuse.dds"; normalMap[0] = "art/shapes/trees/defaulttree/defaulttree_bark_normal_specular.dds"; - specularMap[0] = ""; diffuseColor[0] = "1 1 1 1"; specular[0] = "0.9 0.9 0.9 1"; @@ -37,6 +36,7 @@ singleton Material(defaultTree_bark_material) translucent = false; translucentBlendOp = "None"; pixelSpecular[0] = "1"; + castDynamicShadows = "0"; }; singleton Material(defaulttree_material) @@ -45,7 +45,6 @@ singleton Material(defaulttree_material) diffuseMap[0] = "art/shapes/trees/defaulttree/defaulttree_diffuse_transparency.dds"; normalMap[0] = "art/shapes/trees/defaulttree/defaulttree_normal_specular.dds"; - specularMap[0] = ""; diffuseColor[0] = "1 1 1 1"; specular[0] = "0.9 0.9 0.9 1"; @@ -57,6 +56,7 @@ singleton Material(defaulttree_material) pixelSpecular[0] = "1"; alphaTest = "1"; alphaRef = "127"; + castDynamicShadows = "0"; }; singleton Material(defaultTree_fronds_material) @@ -71,6 +71,7 @@ singleton Material(defaultTree_fronds_material) alphaTest = "1"; alphaRef = "114"; translucent = "1"; + castDynamicShadows = "0"; }; singleton Material(defaulttree_ColorEffectR27G177B88_material) @@ -79,4 +80,6 @@ singleton Material(defaulttree_ColorEffectR27G177B88_material) diffuseColor[0] = "0.105882 0.694118 0.345098 1"; specularPower[0] = "10"; translucentBlendOp = "None"; + castDynamicShadows = "0"; + castShadows = "0"; }; diff --git a/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs b/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs index 3cf3b1c626..569f28ed0b 100644 --- a/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs @@ -38,6 +38,7 @@ singleton Material(grenade_grenade) doubleSided = false; translucent = false; translucentBlendOp = "None"; + castDynamicShadows = true; materialTag0 = "Weapon"; }; diff --git a/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs b/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs index c5004f8f04..983afeb729 100644 --- a/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs @@ -41,6 +41,7 @@ singleton Material(Lurker_Base) specularPower[0] = "10"; translucentBlendOp = "None"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(Lurker_MuzzleFlash_Base) diff --git a/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs b/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs index 4e1ea57570..e16b0b4b68 100644 --- a/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs @@ -31,6 +31,7 @@ singleton Material(ProxMine_Base) pixelSpecular[0] = "1"; specularMap[0] = "ProxMine_S.dds"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(ProxMine_Glow_Base) diff --git a/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs b/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs index bdac68e3b3..3661bcae19 100644 --- a/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs @@ -31,6 +31,7 @@ singleton Material(FP_Ryder_Base) translucentBlendOp = "None"; pixelSpecular[0] = "1"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(TP_Ryder_Base) @@ -43,6 +44,7 @@ singleton Material(TP_Ryder_Base) specularPower[0] = "10"; translucentBlendOp = "None"; pixelSpecular[0] = "1"; + castDynamicShadows = true; }; singleton Material(Ryder_MuzzleFlash_Base) diff --git a/Templates/Full/game/art/shapes/weapons/Turret/materials.cs b/Templates/Full/game/art/shapes/weapons/Turret/materials.cs index 1088e53c76..4ed4768d9a 100644 --- a/Templates/Full/game/art/shapes/weapons/Turret/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Turret/materials.cs @@ -31,6 +31,7 @@ singleton Material(Turret_Base) pixelSpecular[0] = "1"; specularMap[0] = "art/shapes/weapons/Turret/Turret_D.dds"; useAnisotropic[0] = "1"; + castDynamicShadows = true; materialTag0 = "Weapon"; }; @@ -53,6 +54,7 @@ singleton Material(Turret_Lazer_Base) waveFreq[0] = "0"; waveAmp[0] = "0"; castShadows = "1"; + castDynamicShadows = true; translucentZWrite = "0"; materialTag0 = "Weapon"; materialTag1 = "FX"; @@ -68,6 +70,7 @@ singleton Material(Turret_Lazer_Base) glow[0] = "1"; emissive[0] = "1"; translucentBlendOp = "Add"; + castDynamicShadows = true; }; singleton Material(CollisionMat) diff --git a/Templates/Full/game/art/skies/Desert_Sky/materials.cs b/Templates/Full/game/art/skies/Desert_Sky/materials.cs index af6a979c8f..0ee4080d87 100644 --- a/Templates/Full/game/art/skies/Desert_Sky/materials.cs +++ b/Templates/Full/game/art/skies/Desert_Sky/materials.cs @@ -34,4 +34,5 @@ singleton Material( DesertSkyMat ) { cubemap = DesertSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; diff --git a/Templates/Full/game/art/skies/night/materials.cs b/Templates/Full/game/art/skies/night/materials.cs index 79cc050fc6..11f9f63487 100644 --- a/Templates/Full/game/art/skies/night/materials.cs +++ b/Templates/Full/game/art/skies/night/materials.cs @@ -34,6 +34,7 @@ singleton Material( NightSkyMat ) { cubemap = NightCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton Material( Moon_Glow_Mat ) @@ -50,4 +51,5 @@ singleton Material( Moon_Mat ) emissive = true; translucent = true; vertColor[ 0 ] = true; + isSky = true; }; diff --git a/Templates/Full/game/core/art/gui/RecordingsDlg.gui b/Templates/Full/game/core/art/gui/RecordingsDlg.gui index 44df55ca11..0e863fff58 100644 --- a/Templates/Full/game/core/art/gui/RecordingsDlg.gui +++ b/Templates/Full/game/core/art/gui/RecordingsDlg.gui @@ -1,97 +1,228 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiControl(recordingsDlg) { - profile = "GuiDefaultProfile"; - horizSizing = "right"; - vertSizing = "bottom"; position = "0 0"; - extent = "640 480"; + extent = "1024 768"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; visible = "1"; - helpTag = "0"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + helpTag = "0"; new GuiWindowCtrl() { - profile = "GuiWindowProfile"; - horizSizing = "center"; - vertSizing = "center"; - position = "55 65"; - extent = "530 338"; - minExtent = "48 92"; - visible = "1"; - helpTag = "0"; text = "Demo Recordings"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "Canvas.popDialog(recordingsDlg);"; + edgeSnap = "1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "247 215"; + extent = "530 338"; + minExtent = "48 92"; + horizSizing = "center"; + vertSizing = "center"; + profile = "GuiWindowProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiScrollCtrl() { - profile = "GuiScrollProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "23 37"; - extent = "484 260"; - minExtent = "32 32"; - visible = "1"; - helpTag = "0"; willFirstRespond = "1"; hScrollBar = "dynamic"; vScrollBar = "alwaysOn"; - lockHorizScroll = "false"; - lockVertScroll = "false"; + lockHorizScroll = "0"; + lockVertScroll = "0"; constantThumbHeight = "0"; childMargin = "0 0"; - defaultLineHeight = "15"; + mouseWheelScrollSpeed = "-1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 60"; + extent = "484 237"; + minExtent = "32 32"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiScrollProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiTextListCtrl(RecordingsDlgList) { - profile = "GuiTextArrayProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "2 2"; - extent = "462 20"; - minExtent = "8 20"; - visible = "1"; - helpTag = "0"; - enumerate = "0"; columns = "0"; - resizeCell = "1"; fitParentWidth = "1"; clipColumnText = "0"; - noDuplicates = "false"; + position = "1 1"; + extent = "469 32"; + minExtent = "8 20"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextArrayProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; new GuiButtonCtrl(DR_CancelBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Cancel"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "396 306"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "Canvas.popDialog(recordingsDlg);"; accelerator = "escape"; - helpTag = "0"; - text = "Cancel"; - groupNum = "-1"; - buttonType = "PushButton"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiButtonCtrl(DR_StartDemoBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Play"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "25 305"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "StartSelectedDemo();"; - helpTag = "0"; - text = "Play"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "During gameplay press the following keys:"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 30"; + extent = "206 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Start = F3"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "253 32"; + extent = "50 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Stop = F4"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "320 32"; + extent = "49 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl(DR_DelDemoBtn) { + text = "Delete"; groupNum = "-1"; buttonType = "PushButton"; + useMouseEvents = "0"; + position = "210 305"; + extent = "110 20"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiButtonProfile"; + visible = "1"; + active = "1"; + command = "deleteDemoRecord();"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; diff --git a/Templates/Full/game/core/art/gui/images/radioButton.png b/Templates/Full/game/core/art/gui/images/radioButton.png index d5ecc98534..77bf29ca47 100644 Binary files a/Templates/Full/game/core/art/gui/images/radioButton.png and b/Templates/Full/game/core/art/gui/images/radioButton.png differ diff --git a/Templates/Full/game/core/art/gui/netGraphGui.gui b/Templates/Full/game/core/art/gui/netGraphGui.gui index b62e8ea23b..b034a447ee 100644 --- a/Templates/Full/game/core/art/gui/netGraphGui.gui +++ b/Templates/Full/game/core/art/gui/netGraphGui.gui @@ -73,100 +73,380 @@ new GuiControlProfile (NetGraphPacketLossProfile) }; //--- OBJECT WRITE BEGIN --- -new GuiControl(NetGraphGui) { - profile = "NetGraphProfile"; - horizSizing = "left"; - vertSizing = "bottom"; +%guiContent = new GuiControl(NetGraphGui) { position = "0 0"; - extent = "640 480"; + extent = "1024 768"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphProfile"; visible = "1"; - noCursor = "1"; - + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + noCursor = "1"; + new GuiGraphCtrl(NetGraph) { - profile = "NetGraphKeyContainerProfile"; - horizSizing = "left"; - vertSizing = "bottom"; - position = "432 5"; + centerY = "1"; + plotColor[0] = "1 1 1 1"; + plotColor[1] = "1 0 0 1"; + plotColor[2] = "0 1 0 1"; + plotColor[3] = "0 0 1 1"; + plotColor[4] = "0 1 1 1"; + plotColor[5] = "0 0 0 1"; + plotType[0] = "PolyLine"; + plotType[1] = "PolyLine"; + plotType[2] = "PolyLine"; + plotType[3] = "PolyLine"; + plotType[4] = "PolyLine"; + plotType[5] = "PolyLine"; + plotInterval[0] = "0"; + plotInterval[1] = "0"; + plotInterval[2] = "0"; + plotInterval[3] = "0"; + plotInterval[4] = "0"; + plotInterval[5] = "0"; + position = "816 5"; extent = "200 200"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphKeyContainerProfile"; visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; - new GuiControl() { - profile = "NetGraphKeyContainerProfile"; + position = "816 205"; + extent = "200 104"; + minExtent = "8 2"; horizSizing = "left"; vertSizing = "bottom"; - position = "432 205"; - extent = "200 52"; - minExtent = "8 2"; + profile = "NetGraphKeyContainerProfile"; visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiTextCtrl(GhostsActive) { - profile = "NetGraphGhostsActiveProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Ghosts Active"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "0 0"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphGhostsActiveProfile"; visible = "1"; - text = "Ghosts Active"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(GhostUpdates) { - profile = "NetGraphGhostUpdatesProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Ghost Updates"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "100 0"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphGhostUpdatesProfile"; visible = "1"; - text = "Ghost Updates"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(BitsSent) { - profile = "NetGraphBitsSentProfile"; - horizSizing = "left"; - vertSizing = "bottom"; - position = "0 18 "; + text = "Bytes Sent"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 18"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphBitsSentProfile"; visible = "1"; - text = "Bytes Sent"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(BitsReceived) { - profile = "NetGraphBitsReceivedProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Bytes Received"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "100 18"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphBitsReceivedProfile"; visible = "1"; - text = "Bytes Received"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(Latency) { - profile = "NetGraphLatencyProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Latency"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "0 36"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphLatencyProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl(PacketLoss) { + text = "Packet Loss"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "100 36"; + extent = "59 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; visible = "1"; - text = "Latency"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Network Simulation:"; maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 52"; + extent = "97 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; - new GuiTextCtrl(PacketLoss) { + new GuiTextCtrl() { + text = "Simulated Latency:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 68"; + extent = "91 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "ms"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "179 68"; + extent = "20 18"; + minExtent = "8 2"; horizSizing = "left"; vertSizing = "bottom"; - position = "100 36"; - extent = "59 18"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(NetGraphSimLatency) { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "0"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "112 67"; + extent = "64 18"; minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; visible = "1"; - text = "Packet Loss"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Simulated Packet Loss:"; maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 83"; + extent = "111 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "179 84"; + extent = "20 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(NetGraphSimPacket) { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "0"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "112 85"; + extent = "64 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + visible = "1"; + active = "1"; + command = "if(NetGraphSimLatency.text $= \"\" || NetGraphSimLatency.text < 0)\n{\n NetGraphSimLatency.text = 0;\n}\n\nif(NetGraphSimPacket.text $= \"\" || NetGraphSimPacket.text < 0)\n{\n NetGraphSimLatency.text = 0;\n}\nelse if(NetGraphSimPacket.text > 100)\n{\n NetGraphSimPacket.text = 100;\n}\n\nnetSimulateLag( NetGraphSimLatency.text, NetGraphSimPacket.text );"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -186,7 +466,10 @@ function toggleNetGraph() Canvas.add(NetGraphGui); } else + { Canvas.remove(NetGraphGui); + netSimulateLag( 0, 0 ); + } } function NetGraph::updateStats() @@ -236,3 +519,39 @@ function NetGraph::toggleKey() PacketLoss.visible = 0; } } + +function NetGraphSimLatency::onReturn(%this) +{ + NetGraph.updateNetworkSimulation(); +} + +function NetGraphSimPacket::onReturn(%this) +{ + NetGraph.updateNetworkSimulation(); +} + +function NetGraph::updateNetworkSimulation(%this) +{ + %latency = NetGraphSimLatency.getText(); + + if(%latency $= "" || %latency < 0) + { + NetGraphSimLatency.text = 0; + %latency = 0; + } + + %packetLoss = NetGraphSimPacket.getText(); + + if(%packetLoss $= "" || %packetLoss < 0) + { + NetGraphSimLatency.text = 0; + %packetLoss = 0; + } + else if(%packetLoss > 100) + { + NetGraphSimPacket.text = 100; + %packetLoss = 100; + } + + netSimulateLag( %latency, %packetLoss ); +} \ No newline at end of file diff --git a/Templates/Full/game/core/art/skies/blank/materials.cs b/Templates/Full/game/core/art/skies/blank/materials.cs index 179eafcf2c..39f268866c 100644 --- a/Templates/Full/game/core/art/skies/blank/materials.cs +++ b/Templates/Full/game/core/art/skies/blank/materials.cs @@ -34,6 +34,7 @@ singleton Material( BlackSkyMat ) { cubemap = BlackSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton CubemapData( BlueSkyCubemap ) @@ -50,6 +51,7 @@ singleton Material( BlueSkyMat ) { cubemap = BlueSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton CubemapData( GreySkyCubemap ) @@ -66,4 +68,5 @@ singleton Material( GreySkyMat ) { cubemap = GreySkyCubemap; materialTag0 = "Skies"; + isSky = true; }; diff --git a/Templates/Full/game/core/main.cs b/Templates/Full/game/core/main.cs index 0baeb93644..f666c948cb 100644 --- a/Templates/Full/game/core/main.cs +++ b/Templates/Full/game/core/main.cs @@ -141,11 +141,11 @@ function parseArgs() switch$ (%arg) { case "-fullscreen": - setFullScreen(true); + $cliFullscreen = true; $argUsed[%i]++; case "-windowed": - setFullScreen(false); + $cliFullscreen = false; $argUsed[%i]++; case "-openGL": diff --git a/Templates/Full/game/core/parseArgs.cs b/Templates/Full/game/core/parseArgs.cs index bd3f8d3826..373964c3d5 100644 --- a/Templates/Full/game/core/parseArgs.cs +++ b/Templates/Full/game/core/parseArgs.cs @@ -160,7 +160,7 @@ function defaultParseArgs() $argUsed[$i]++; if ($hasNextArg) { - playJournal($nextArg,false); + playJournal($nextArg); $argUsed[$i+1]++; $i++; } @@ -240,18 +240,6 @@ function defaultParseArgs() else error("Error: Missing Command Line argument. Usage: -vidCapHeight "); - //-------------------- - case "-jDebug": - $argUsed[$i]++; - if ($hasNextArg) - { - playJournal($nextArg,true); - $argUsed[$i+1]++; - $i++; - } - else - error("Error: Missing Command Line argument. Usage: -jDebug "); - //-------------------- case "-level": $argUsed[$i]++; diff --git a/Templates/Full/game/core/scripts/client/audio.cs b/Templates/Full/game/core/scripts/client/audio.cs index 83a0757544..900ef40b1a 100644 --- a/Templates/Full/game/core/scripts/client/audio.cs +++ b/Templates/Full/game/core/scripts/client/audio.cs @@ -239,26 +239,26 @@ function sfxCompareProvider( %providerA, %providerB ) case "FMOD": return 1; - case "XAudio": - if( %providerB !$= "FMOD" ) - return 1; - else - return -1; - // Prefer OpenAL over anything but FMOD. case "OpenAL": - if( %providerB $= "FMOD" && %providerB !$= "XAudio") + if( %providerB $= "FMOD" ) return -1; else return 1; - - // DSound is just about deprecated, so make that one the last fallback - case "DirectSound": - if( %providerB $= "FMOD" || %providerB $= "OpenAL" && %providerB !$= "XAudio") + + // choose XAudio over DirectSound + case "XAudio": + if( %providerB $= "FMOD" || %providerB $= "OpenAL" ) return -1; else return 0; + case "DirectSound": + if( %providerB !$= "FMOD" && %providerB !$= "OpenAL" && %providerB !$= "XAudio" ) + return 1; + else + return -1; + default: return -1; } diff --git a/Templates/Full/game/core/scripts/client/canvas.cs b/Templates/Full/game/core/scripts/client/canvas.cs index 69dd6da71d..5c1d377c5e 100644 --- a/Templates/Full/game/core/scripts/client/canvas.cs +++ b/Templates/Full/game/core/scripts/client/canvas.cs @@ -39,9 +39,14 @@ function configureCanvas() %rate = getWord($pref::Video::mode, $WORD::REFRESH); %fsaa = getWord($pref::Video::mode, $WORD::AA); - echo("--------------"); - echo("Attempting to set resolution to \"" @ $pref::Video::mode @ "\""); + if($cliFullscreen !$= "") { + %fs = $cliFullscreen; + $cliFullscreen = ""; + } + echo("--------------"); + echo("Attempting to set resolution to \"" @ %resX SPC %resY SPC %fs SPC %bpp SPC %rate SPC %fsaa @ "\""); + %deskRes = getDesktopResolution(); %deskResX = getWord(%deskRes, $WORD::RES_X); %deskResY = getWord(%deskRes, $WORD::RES_Y); diff --git a/Templates/Full/game/core/scripts/client/core.cs b/Templates/Full/game/core/scripts/client/core.cs index da26beeffd..ecf1626f88 100644 --- a/Templates/Full/game/core/scripts/client/core.cs +++ b/Templates/Full/game/core/scripts/client/core.cs @@ -73,6 +73,7 @@ function initializeCore() exec("~/art/gui/console.gui"); exec("~/art/gui/consoleVarDlg.gui"); exec("~/art/gui/netGraphGui.gui"); + exec("~/art/gui/RecordingsDlg.gui"); // Gui Helper Scripts. exec("~/scripts/gui/help.cs"); diff --git a/Templates/Full/game/core/scripts/client/defaults.cs b/Templates/Full/game/core/scripts/client/defaults.cs index 0142a94108..d1805d337d 100644 --- a/Templates/Full/game/core/scripts/client/defaults.cs +++ b/Templates/Full/game/core/scripts/client/defaults.cs @@ -73,7 +73,9 @@ /// $pref::Video::disableParallaxMapping = false; -$pref::Video::Gamma = 1.0; +$pref::Video::Gamma = 2.2; +$pref::Video::Contrast = 1.0; +$pref::Video::Brightness = 0; // Console-friendly defaults if($platform $= "xenon") diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs new file mode 100644 index 0000000000..ad9732e0f2 --- /dev/null +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -0,0 +1,147 @@ +singleton ShaderData( ClearGBufferShader ) +{ + DXVertexShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl"; + + pixVersion = 2.0; +}; + +singleton ShaderData( DeferredColorShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredColorShaderP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl"; + + pixVersion = 2.0; +}; + +// Primary Deferred Shader +new GFXStateBlockData( AL_DeferredShadingState : PFX_DefaultStateBlock ) +{ + cullMode = GFXCullNone; + + blendDefined = true; + blendEnable = true; + blendSrc = GFXBlendSrcAlpha; + blendDest = GFXBlendInvSrcAlpha; + + samplersDefined = true; + samplerStates[0] = SamplerWrapLinear; + samplerStates[1] = SamplerWrapLinear; + samplerStates[2] = SamplerWrapLinear; + samplerStates[3] = SamplerWrapLinear; +}; + +new ShaderData( AL_DeferredShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredShadingP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredShadingP.glsl"; + + samplerNames[0] = "colorBufferTex"; + samplerNames[1] = "lightPrePassTex"; + samplerNames[2] = "matInfoTex"; + samplerNames[3] = "prepassTex"; + + pixVersion = 2.0; +}; + +singleton PostEffect( AL_DeferredShading ) +{ + renderTime = "PFXAfterBin"; + renderBin = "SkyBin"; + shader = AL_DeferredShader; + stateBlock = AL_DeferredShadingState; + texture[0] = "#color"; + texture[1] = "#lightinfo"; + texture[2] = "#matinfo"; + texture[3] = "#prepass"; + + target = "$backBuffer"; + renderPriority = 10000; + allowReflectPass = true; +}; + +// Debug Shaders. +new ShaderData( AL_ColorBufferShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgColorBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl"; + + samplerNames[0] = "colorBufferTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_ColorBufferVisualize ) +{ + shader = AL_ColorBufferShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#color"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleColorBufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_ColorBufferShaderVar = AL_ColorBufferVisualize.isEnabled() ? false : true; + AL_ColorBufferVisualize.toggle(); + } + else if ( %enable ) + { + AL_DeferredShading.disable(); + AL_ColorBufferVisualize.enable(); + } + else if ( !%enable ) + { + AL_ColorBufferVisualize.disable(); + AL_DeferredShading.enable(); + } +} + +new ShaderData( AL_SpecMapShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl"; + + samplerNames[0] = "matinfoTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_SpecMapVisualize ) +{ + shader = AL_SpecMapShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#matinfo"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleSpecMapViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_SpecMapShaderVar = AL_SpecMapVisualize.isEnabled() ? false : true; + AL_SpecMapVisualize.toggle(); + } + else if ( %enable ) + AL_SpecMapVisualize.enable(); + else if ( !%enable ) + AL_SpecMapVisualize.disable(); +} \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs index 2c78e9ca42..d74aff69a9 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs @@ -43,6 +43,7 @@ exec( "./lightViz.cs" ); exec( "./shadowViz.cs" ); exec( "./shadowViz.gui" ); +exec( "./deferredShading.cs" ); function onActivateAdvancedLM() { @@ -58,12 +59,18 @@ function onActivateAdvancedLM() // Enable the offscreen target so that AL will work // with MSAA back buffers and for HDR rendering. AL_FormatToken.enable(); + + // Activate Deferred Shading + AL_DeferredShading.enable(); } function onDeactivateAdvancedLM() { // Disable the offscreen render target. AL_FormatToken.disable(); + + // Deactivate Deferred Shading + AL_DeferredShading.disable(); } function setAdvancedLighting() diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs index 22665120df..fcaf72942b 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs @@ -56,7 +56,7 @@ OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; samplerNames[1] = "depthViz"; pixVersion = 2.0; @@ -113,7 +113,7 @@ singleton PostEffect( AL_GlowVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; pixVersion = 2.0; }; @@ -149,7 +149,7 @@ singleton PostEffect( AL_NormalsVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -184,7 +184,7 @@ singleton PostEffect( AL_LightColorVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -280,3 +280,16 @@ function toggleLightSpecularViz( %enable ) AL_LightSpecularVisualize.disable(); } +function toggleBackbufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_BackbufferVisualizeVar = AL_DeferredShading.isEnabled() ? true : false; + AL_DeferredShading.toggle(); + } + else if ( %enable ) + AL_DeferredShading.disable(); + else if ( !%enable ) + AL_DeferredShading.enable(); +} + diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index 7fda56235a..22d1bdbdf2 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -36,9 +36,14 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) - samplerStates[2] = SamplerClampLinear; // SSAO Mask - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + mSamplerNames[1] = "shadowMap"; + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // SSAO Mask + mSamplerNames[3] = "ssaoMask"; + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullNone; @@ -62,10 +67,13 @@ OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/vectorLightP.glsl"; samplerNames[0] = "$prePassBuffer"; - samplerNames[1] = "$ShadowMap"; - samplerNames[2] = "$ssaoMask"; - samplerNames[3] = "$gTapRotationTex"; - + samplerNames[1] = "$shadowMap"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$ssaoMask"; + samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -75,8 +83,12 @@ stateBlock = AL_VectorLightState; sampler["prePassBuffer"] = "#prepass"; - sampler["ShadowMap"] = "$dynamiclight"; - sampler["ssaoMask"] = "#ssaoMask"; + sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; + sampler["ssaoMask"] = "#ssaoMask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -101,9 +113,13 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) - samplerStates[2] = SamplerClampLinear; // Cookie Map - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + mSamplerNames[1] = "shadowMap"; + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // Cookie Map + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullCW; @@ -128,8 +144,12 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -141,7 +161,11 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -159,8 +183,12 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -172,7 +200,11 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; diff --git a/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs b/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs index 383a0c8cda..b88f313057 100644 --- a/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs +++ b/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs @@ -44,7 +44,7 @@ singleton GFXStateBlockData( GammaStateBlock : PFX_DefaultStateBlock ) singleton PostEffect( GammaPostFX ) { isEnabled = true; - allowReflectPass = false; + allowReflectPass = true; renderTime = "PFXBeforeBin"; renderBin = "EditorBin"; @@ -65,6 +65,8 @@ singleton PostEffect( GammaPostFX ) function GammaPostFX::setShaderConsts( %this ) { - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %this.setShaderConst( "$OneOverGamma", 1 / %clampedGamma ); + %this.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %this.setShaderConst( "$Contrast", $pref::Video::Contrast ); } \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/postFx/caustics.cs b/Templates/Full/game/core/scripts/client/postFx/caustics.cs index 3e8b14de0b..a712ef82a5 100644 --- a/Templates/Full/game/core/scripts/client/postFx/caustics.cs +++ b/Templates/Full/game/core/scripts/client/postFx/caustics.cs @@ -38,7 +38,7 @@ singleton ShaderData( PFX_CausticsShader ) DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; DXPixelShaderFile = "shaders/common/postFx/caustics/causticsP.hlsl"; - OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/postFx/caustics/gl/causticsP.glsl"; samplerNames[0] = "$prepassTex"; @@ -51,7 +51,7 @@ singleton ShaderData( PFX_CausticsShader ) singleton PostEffect( CausticsPFX ) { isEnabled = false; - renderTime = "PFXBeforeBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "ObjTranslucentBin"; //renderPriority = 0.1; diff --git a/Templates/Full/game/core/scripts/client/postFx/glow.cs b/Templates/Full/game/core/scripts/client/postFx/glow.cs index 3cc946b04e..78c46e56dd 100644 --- a/Templates/Full/game/core/scripts/client/postFx/glow.cs +++ b/Templates/Full/game/core/scripts/client/postFx/glow.cs @@ -106,3 +106,79 @@ singleton PostEffect( GlowPostFx ) target = "$backBuffer"; }; }; + +singleton ShaderData( PFX_VolFogGlowBlurVertShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/glowBlurV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/VolFogGlowP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/glowBlurV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/gl/VolFogGlowP.glsl"; + + defines = "BLUR_DIR=float2(0.0,1.0)"; + samplerNames[0] = "$diffuseMap"; + pixVersion = 2.0; +}; +singleton ShaderData( PFX_VolFogGlowBlurHorzShader : PFX_VolFogGlowBlurVertShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/glowBlurV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/VolFogGlowP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/glowBlurV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/gl/VolFogGlowP.glsl"; + + defines = "BLUR_DIR=float2(1.0,0.0)"; +}; + +$VolFogGlowPostFx::glowStrength = 0.3; + +singleton PostEffect( VolFogGlowPostFx ) +{ + // Do not allow the glow effect to work in reflection + // passes by default so we don't do the extra drawing. + allowReflectPass = false; + renderTime = "PFXAfterBin"; + renderBin = "FogBin"; + renderPriority = 1; + // First we down sample the glow buffer. + shader = PFX_PassthruShader; + stateBlock = PFX_DefaultStateBlock; + texture[0] = "$backbuffer"; + target = "$outTex"; + targetScale = "0.5 0.5"; + isEnabled = true; + // Blur vertically + new PostEffect() + { + shader = PFX_VolFogGlowBlurVertShader; + stateBlock = PFX_DefaultStateBlock; + internalName = "vert"; + texture[0] = "$inTex"; + target = "$outTex"; + }; + // Blur horizontally + new PostEffect() + { + shader = PFX_VolFogGlowBlurHorzShader; + stateBlock = PFX_DefaultStateBlock; + internalName = "hor"; + texture[0] = "$inTex"; + target = "$outTex"; + }; + // Upsample and combine with the back buffer. + new PostEffect() + { + shader = PFX_PassthruShader; + stateBlock = PFX_GlowCombineStateBlock; + texture[0] = "$inTex"; + target = "$backBuffer"; + }; +}; + +function VolFogGlowPostFx::setShaderConsts( %this ) +{ + %vp=%this-->vert; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); + %vp=%this-->hor; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); +} \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/postFx/hdr.cs b/Templates/Full/game/core/scripts/client/postFx/hdr.cs index a5c450799a..6c8e870d0e 100644 --- a/Templates/Full/game/core/scripts/client/postFx/hdr.cs +++ b/Templates/Full/game/core/scripts/client/postFx/hdr.cs @@ -172,6 +172,8 @@ singleton ShaderData( HDR_CombineShader ) samplerNames[2] = "$bloomTex"; samplerNames[3] = "$colorCorrectionTex"; + samplerNames[4] = "prepassTex"; + pixVersion = 3.0; }; @@ -253,8 +255,10 @@ singleton GFXStateBlockData( HDRStateBlock ) %combinePass.setShaderConst( "$g_fEnableBlueShift", $HDRPostFX::enableBlueShift ); %combinePass.setShaderConst( "$g_fBlueShiftColor", $HDRPostFX::blueShiftColor ); - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %combinePass.setShaderConst( "$g_fOneOverGamma", 1 / %clampedGamma ); + %combinePass.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %combinePass.setShaderConst( "$Contrast", $pref::Video::Contrast ); %whiteCutoff = ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ) * ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ); @@ -329,7 +333,7 @@ singleton GFXStateBlockData( HDRStateBlock ) singleton PostEffect( HDRPostFX ) { isEnabled = false; - allowReflectPass = false; + allowReflectPass = true; // Resolve the HDR before we render any editor stuff // and before we resolve the scene to the backbuffer. @@ -355,6 +359,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownScale4x4Shader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -365,6 +370,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomH"; shader = HDR_BloomGaussBlurHShader; @@ -376,6 +382,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomV"; shader = HDR_BloomGaussBlurVShader; @@ -390,6 +397,7 @@ singleton PostEffect( HDRPostFX ) // Now calculate the adapted luminance. new PostEffect() { + allowReflectPass = true; internalName = "adaptLum"; shader = HDR_SampleLumShader; @@ -401,6 +409,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -411,6 +420,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -421,6 +431,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -434,6 +445,7 @@ singleton PostEffect( HDRPostFX ) // one... PostEffect takes care to manage that. new PostEffect() { + allowReflectPass = true; internalName = "finalLum"; shader = HDR_CalcAdaptedLumShader; stateBlock = HDR_DownSampleStateBlock; @@ -450,6 +462,7 @@ singleton PostEffect( HDRPostFX ) // version of the scene. new PostEffect() { + allowReflectPass = true; internalName = "combinePass"; shader = HDR_CombineShader; @@ -458,6 +471,7 @@ singleton PostEffect( HDRPostFX ) texture[1] = "#adaptedLum"; texture[2] = "#bloomFinal"; texture[3] = $HDRPostFX::colorCorrectionRamp; + texture[4] = "#prepass"; target = "$backBuffer"; }; }; diff --git a/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs b/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs index d30d2314ba..77d664f416 100644 --- a/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs +++ b/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs @@ -70,6 +70,7 @@ postVerbose("% - PostFX Manager - PostFX disabled"); } + VolFogGlowPostFx.disable(); } function PostFXManager::settingsEffectSetEnabled(%this, %sName, %bEnable) diff --git a/Templates/Full/game/core/scripts/client/postFx/turbulence.cs b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs index c2309f8086..dd8c0e2dc1 100644 --- a/Templates/Full/game/core/scripts/client/postFx/turbulence.cs +++ b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs @@ -47,7 +47,7 @@ singleton PostEffect( TurbulenceFx ) isEnabled = false; allowReflectPass = true; - renderTime = "PFXAfterBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "GlowBin"; renderPriority = 0.5; // Render after the glows themselves diff --git a/Templates/Full/game/core/scripts/client/recordings.cs b/Templates/Full/game/core/scripts/client/recordings.cs index 14f1a45d3b..5609f0337a 100644 --- a/Templates/Full/game/core/scripts/client/recordings.cs +++ b/Templates/Full/game/core/scripts/client/recordings.cs @@ -134,3 +134,19 @@ function demoPlaybackComplete() Canvas.pushDialog(RecordingsDlg); } + +function deleteDemoRecord() +{ + %sel = RecordingsDlgList.getSelectedId(); + %rowText = RecordingsDlgList.getRowTextById(%sel); + %file = $currentMod @ "/recordings/" @ getField(%rowText, 0) @ ".rec"; + + if(!isfile(%file)) + { + RecordingsDlgList.removeRowById(%sel); + return; + } + + RecordingsDlgList.removeRowById(%sel); + fileDelete(%file); +} diff --git a/Templates/Full/game/core/scripts/client/renderManager.cs b/Templates/Full/game/core/scripts/client/renderManager.cs index dcd1628fe4..a14287db18 100644 --- a/Templates/Full/game/core/scripts/client/renderManager.cs +++ b/Templates/Full/game/core/scripts/client/renderManager.cs @@ -33,7 +33,7 @@ function initRenderManager() { enabled = "false"; - format = "GFXFormatR8G8B8A8"; + format = "GFXFormatR16G16B16A16F"; depthFormat = "GFXFormatD24S8"; aaLevel = 0; // -1 = match backbuffer @@ -49,20 +49,21 @@ function initRenderManager() // We really need to fix the sky to render after all the // meshes... but that causes issues in reflections. - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(SkyBin) { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); //DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); // Normal mesh rendering. - DiffuseRenderPassManager.addManager( new RenderTerrainMgr() { renderOrder = 0.4; processAddOrder = 0.4; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); - DiffuseRenderPassManager.addManager( new RenderImposterMgr() { renderOrder = 0.56; processAddOrder = 0.56; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); - - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Decal"; renderOrder = 0.8; processAddOrder = 0.8; } ); - DiffuseRenderPassManager.addManager( new RenderOcclusionMgr() { bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); + DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderImposterMgr(ImposterBin) { renderOrder = 0.56; processAddOrder = 0.56; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjectBin) { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); + + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ShadowBin) { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalRoadBin) { bintype = "DecalRoad"; renderOrder = 0.8; processAddOrder = 0.8; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalBin) { bintype = "Decal"; renderOrder = 0.81; processAddOrder = 0.81; } ); + DiffuseRenderPassManager.addManager( new RenderOcclusionMgr(OccluderBin){ bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); // We now render translucent objects that should handle // their own fogging and lighting. @@ -70,10 +71,12 @@ function initRenderManager() // Note that the fog effect is triggered before this bin. DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjTranslucentBin) { bintype = "ObjectTranslucent"; renderOrder = 1.0; processAddOrder = 1.0; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); - DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); - DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(WaterBin) { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(FoliageBin) { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); + DiffuseRenderPassManager.addManager( new RenderParticleMgr(ParticleBin) { renderOrder = 1.35; processAddOrder = 1.35; } ); + DiffuseRenderPassManager.addManager( new RenderTranslucentMgr(TranslucentBin){ renderOrder = 1.4; processAddOrder = 1.4; } ); + + DiffuseRenderPassManager.addManager(new RenderObjectMgr(FogBin){ bintype = "ObjectVolumetricFog"; renderOrder = 1.45; processAddOrder = 1.45; } ); // Note that the GlowPostFx is triggered after this bin. DiffuseRenderPassManager.addManager( new RenderGlowMgr(GlowBin) { renderOrder = 1.5; processAddOrder = 1.5; } ); @@ -83,7 +86,7 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderObjectMgr(EditorBin) { bintype = "Editor"; renderOrder = 1.6; processAddOrder = 1.6; } ); // Resolve format change token last. - DiffuseRenderPassManager.addManager( new RenderPassStateBin() { renderOrder = 1.7; stateToken = AL_FormatToken; } ); + DiffuseRenderPassManager.addManager( new RenderPassStateBin(FinalBin) { renderOrder = 1.7; stateToken = AL_FormatToken; } ); } /// This post effect is used to copy data from the non-MSAA back-buffer to the diff --git a/Templates/Full/game/core/scripts/client/scatterSky.cs b/Templates/Full/game/core/scripts/client/scatterSky.cs index 7701b0adfc..a2b19ab23a 100644 --- a/Templates/Full/game/core/scripts/client/scatterSky.cs +++ b/Templates/Full/game/core/scripts/client/scatterSky.cs @@ -22,13 +22,13 @@ new GFXStateBlockData( ScatterSkySBData ) { - cullDefined = true; + //cullDefined = true; cullMode = "GFXCullNone"; zDefined = true; zEnable = true; zWriteEnable = false; - zFunc = "GFXCmpLessEqual"; + //zFunc = "GFXCmpLessEqual"; samplersDefined = true; samplerStates[0] = SamplerClampLinear; diff --git a/Templates/Full/game/core/scripts/client/shaders.cs b/Templates/Full/game/core/scripts/client/shaders.cs index 98d0529ebe..002053a1ac 100644 --- a/Templates/Full/game/core/scripts/client/shaders.cs +++ b/Templates/Full/game/core/scripts/client/shaders.cs @@ -101,4 +101,40 @@ singleton ShaderData( OffscreenParticleCompositeShaderData ) samplerNames[1] = "$alphaMap"; pixVersion = 1.4; +}; + +singleton ShaderData( VolumetricFogPrePassShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogPreP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogPreP.glsl"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogP.glsl"; + + samplerNames[0] = "$prepassTex"; + samplerNames[1] = "$depthBuffer"; + samplerNames[2] = "$frontBuffer"; + samplerNames[3] = "$density"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogReflectionShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogRefl.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogRefl.glsl"; + + pixVersion = 3.0; }; \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/server/defaults.cs b/Templates/Full/game/core/scripts/server/defaults.cs index 78ebdb8836..73c50a1a40 100644 --- a/Templates/Full/game/core/scripts/server/defaults.cs +++ b/Templates/Full/game/core/scripts/server/defaults.cs @@ -36,9 +36,9 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of the FPS starter kit or "@ + "You do not have the correct version of "@$appName@" or "@ "the related art needed to play on this server, please contact "@ - "the server operator for more information."; + "the server administrator."; // The network port is also defined by the client, this value // overrides pref::net::port for dedicated servers diff --git a/Templates/Full/game/main.cs b/Templates/Full/game/main.cs index 7c34f350d1..2a261201da 100644 --- a/Templates/Full/game/main.cs +++ b/Templates/Full/game/main.cs @@ -57,7 +57,7 @@ function createCanvas(%windowTitle) // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } @@ -252,6 +250,12 @@ function loadDirs(%dirPath) onStart(); echo("Engine initialized..."); + ModuleDatabase.scanModules( "" ); + + //You can also explicitly decalre some modules here to be loaded by default if they are part of your game + //Ex: ModuleDatabase.LoadExplicit( "AppCore" ); + ModuleDatabase.LoadGroup( "Game" ); + if( !$isDedicated ) { // As we know at this point that the initial load is complete, diff --git a/Templates/Full/game/main.cs.in b/Templates/Full/game/main.cs.in index 06f3e88547..a541cf3b79 100644 --- a/Templates/Full/game/main.cs.in +++ b/Templates/Full/game/main.cs.in @@ -57,7 +57,7 @@ $displayHelp = false; // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } diff --git a/Templates/Full/game/scripts/client/default.bind.cs b/Templates/Full/game/scripts/client/default.bind.cs index d2ca237301..9dcbca96b5 100644 --- a/Templates/Full/game/scripts/client/default.bind.cs +++ b/Templates/Full/game/scripts/client/default.bind.cs @@ -618,7 +618,12 @@ function bringUpOptions(%val) function showMetrics(%val) { if(%val) - metrics("fps gfx shadow sfx terrain groundcover forest net"); + { + if(!Canvas.isMember(FrameOverlayGui)) + metrics("fps gfx shadow sfx terrain groundcover forest net"); + else + metrics(""); + } } GlobalActionMap.bind(keyboard, "ctrl F2", showMetrics); diff --git a/Templates/Full/game/scripts/scripts.module.taml b/Templates/Full/game/scripts/scripts.module.taml new file mode 100644 index 0000000000..e1a6b57bef --- /dev/null +++ b/Templates/Full/game/scripts/scripts.module.taml @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/VolumetricFog.cs b/Templates/Full/game/scripts/server/VolumetricFog.cs new file mode 100644 index 0000000000..53e03adf30 --- /dev/null +++ b/Templates/Full/game/scripts/server/VolumetricFog.cs @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function VolumetricFog::onEnterFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj enters the fog area. + + // echo("Control Object " @ %obj @ " enters fog " @ %this); +} + +function VolumetricFog::onLeaveFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj leaves the fog area. + + // echo("Control Object " @ %obj @ " left fog " @ %this); +} + +function VolumetricFog::Dissolve(%this,%speed,%delete) +{ + // This method dissolves the fog at speed milliseconds + %this.isBuilding = true; + if (%this.FogDensity > 0) + { + %this.setFogDensity(%this.FogDensity - 0.005); + %this.schedule(%speed,Dissolve,%speed,%delete); + } + else + { + %this.isBuilding = false; + %this.SetFogDensity(0.0); + if (%delete !$= "" && %delete !$="0" && %delete !$="false") + %this.schedule(250,delete); + } +} + +function VolumetricFog::Thicken(%this,%speed, %end_density) +{ + // This method thickens the fog at speed milliseconds to a density of %end_density + + %this.isBuilding = true; + if (%this.FogDensity + 0.005 < %end_density) + { + %this.setFogDensity(%this.FogDensity + 0.005); + %this.schedule(%speed,Thicken,%speed, %end_density); + } + else + { + %this.setFogDensity(%end_density); + %this.isBuilding = false; + } +} + +function GenerateFog(%pos,%scale,%color,%density) +{ + // This function can be used to generate some fog caused by massive gunfire etc. + // Change shape and modulation data to your likings. + + %fog=new VolumetricFog() { + shapeName = "art/environment/Fog_Sphere.dts"; + fogColor = %color; + fogDensity = "0.0"; + ignoreWater = "0"; + MinSize = "250"; + FadeSize = "750"; + texture = "art/environment/FogMod_heavy.dds"; + tiles = "1"; + modStrength = "0.2"; + PrimSpeed = "-0.01 0.04"; + SecSpeed = "0.02 0.02"; + position = %pos; + rotation = "0 0 1 20.354"; + scale = %scale; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + + if (isObject(%fog)) + { + MissionCleanup.add(%fog); + + %fog.Thicken(500,%density); + } + + return %fog; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/animationComponent.asset.taml b/Templates/Full/game/scripts/server/components/animationComponent.asset.taml new file mode 100644 index 0000000000..62f15cdf91 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/animationComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml b/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml new file mode 100644 index 0000000000..e030815644 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml b/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml new file mode 100644 index 0000000000..9796df18de --- /dev/null +++ b/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/camera.asset.taml b/Templates/Full/game/scripts/server/components/game/camera.asset.taml new file mode 100644 index 0000000000..5d00d1170e --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/camera.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/camera.cs b/Templates/Full/game/scripts/server/components/game/camera.cs new file mode 100644 index 0000000000..24363bd82e --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/camera.cs @@ -0,0 +1,196 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function CameraComponent::onAdd(%this) +{ + %this.addComponentField(clientOwner, "The client that views this camera", "int", "1", ""); + + %test = %this.clientOwner; + + %barf = ClientGroup.getCount(); + + %clientID = %this.getClientID(); + if(%clientID && !isObject(%clientID.camera)) + { + %this.scopeToClient(%clientID); + %this.setDirty(); + + %clientID.setCameraObject(%this.owner); + %clientID.setControlCameraFov(%this.FOV); + + %clientID.camera = %this.owner; + } + + %res = $pref::Video::mode; + %derp = 0; +} + +function CameraComponent::onRemove(%this) +{ + %clientID = %this.getClientID(); + if(%clientID) + %clientID.clearCameraObject(); +} + +function CameraComponent::onInspectorUpdate(%this) +{ + //if(%this.clientOwner) + //%this.clientOwner.setCameraObject(%this.owner); +} + +function CameraComponent::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} + +function CameraComponent::isClientCamera(%this, %client) +{ + %clientID = ClientGroup.getObject(%this.clientOwner-1); + + if(%client.getID() == %clientID) + return true; + else + return false; +} + +function CameraComponent::onClientConnect(%this, %client) +{ + //if(%this.isClientCamera(%client) && !isObject(%client.camera)) + //{ + %this.scopeToClient(%client); + %this.setDirty(); + + %client.setCameraObject(%this.owner); + %client.setControlCameraFov(%this.FOV); + + %client.camera = %this.owner; + //} + //else + //{ + // echo("CONNECTED CLIENT IS NOT CAMERA OWNER!"); + //} +} + +function CameraComponent::onClientDisconnect(%this, %client) +{ + Parent::onClientDisconnect(%this, %client); + + if(isClientCamera(%client)){ + %this.clearScopeToClient(%client); + %client.clearCameraObject(); + } +} + +//move to the editor later +GlobalActionMap.bind("keyboard", "alt c", "toggleEditorCam"); + +function switchCamera(%client, %newCamEntity) +{ + if(!isObject(%client) || !isObject(%newCamEntity)) + return error("SwitchCamera: No client or target camera!"); + + %cam = %newCamEntity.getComponent(CameraComponent); + + if(!isObject(%cam)) + return error("SwitchCamera: Target camera doesn't have a camera behavior!"); + + //TODO: Cleanup clientOwner for previous camera! + if(%cam.clientOwner == 0 || %cam.clientOwner $= "") + %cam.clientOwner = 0; + + %cam.scopeToClient(%client); + %cam.setDirty(); + + %client.setCameraObject(%newCamEntity); + %client.setControlCameraFov(%cam.FOV); + + %client.camera = %newCamEntity; +} + +function buildEditorCamera() +{ + if(isObject("EditorCamera")) + return EditorCamera; + + %camObj = SGOManager.spawn("SpectatorObject", false); + + %camObj.name = "EditorCamera"; + + %client = ClientGroup.getObject(0); + + %camObj.getComponent(SpectatorControls).setupControls(%client); + + MissionCleanup.add(%camObj); + + return %camObj; +} + +//TODO: Move this somewhere else! +function toggleEditorCam(%val) +{ + if(!%val) + return; + + %client = ClientGroup.getObject(0); + + if(!isObject(%client.camera)) + return error("ToggleEditorCam: no existing camera!"); + + %editorCam = buildEditorCamera(); + + //if this is our first switch, just go to the editor camera + if(%client.lastCam $= "" || %client.camera.getId() != %editorCam.getId()) + { + if(%client.lastCam $= "") + { + //set up the position + %editorCam.position = %client.camera.position; + %editorCam.rotation = %client.camera.rotation; + } + + %client.lastCam = %client.camera; + %client.lastController = %client.getControlObject(); + switchCamera(%client, %editorCam); + switchControlObject(%client, %editorCam); + } + else + { + switchCamera(%client, %client.lastCam); + switchControlObject(%client, %client.lastController); + %client.lastCam = %editorCam; + %client.lastController = %editorCam; + } +} + +function serverCmdSetClientAspectRatio(%client, %width, %height) +{ + echo("Client: " @ %client SPC "changing screen res to: " @ %width SPC %height); + %client.screenExtent = %width SPC %height; + %cam = %client.getCameraObject(); + + if(!isObject(%cam)) + return; + + %cameraComp = %cam.getComponent(CameraComponent); + + %cameraComp.ScreenAspect = %width SPC %height; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml b/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml new file mode 100644 index 0000000000..2c9d48e1c3 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/controlObject.cs b/Templates/Full/game/scripts/server/components/game/controlObject.cs new file mode 100644 index 0000000000..7f477ecca3 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/controlObject.cs @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("ControlObjectComponent", "Component", "Control Object", "Game", false, "Allows the behavior owner to operate as a camera."); + +function ControlObjectComponent::onAdd(%this) +{ + %this.addComponentField(clientOwner, "The shape to use for rendering", "int", "1", ""); + + %clientID = %this.getClientID(); + + if(%clientID && !isObject(%clientID.getControlObject())) + %clientID.setControlObject(%this.owner); +} + +function ControlObjectComponent::onRemove(%this) +{ + %clientID = %this.getClientID(); + + if(%clientID) + %clientID.setControlObject(0); +} + +function ControlObjectComponent::onClientConnect(%this, %client) +{ + if(%this.isControlClient(%client) && !isObject(%client.getControlObject())) + %client.setControlObject(%this.owner); +} + +function ControlObjectComponent::onClientDisconnect(%this, %client) +{ + if(%this.isControlClient(%client)) + %client.setControlObject(0); +} + +function ControlObjectComponent::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} + +function ControlObjectComponent::isControlClient(%this, %client) +{ + %clientID = ClientGroup.getObject(%this.clientOwner-1); + + if(%client.getID() == %clientID) + return true; + else + return false; +} + +function ControlObjectComponent::onInspectorUpdate(%this, %field) +{ + %clientID = %this.getClientID(); + + if(%clientID && !isObject(%clientID.getControlObject())) + %clientID.setControlObject(%this.owner); +} + +function switchControlObject(%client, %newControlEntity) +{ + if(!isObject(%client) || !isObject(%newControlEntity)) + return error("SwitchControlObject: No client or target controller!"); + + %control = %newControlEntity.getComponent(ControlObjectComponent); + + if(!isObject(%control)) + return error("SwitchControlObject: Target controller has no conrol object behavior!"); + + %client.setControlObject(%newControlEntity); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml b/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml new file mode 100644 index 0000000000..8068b49f3f --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/itemRotate.cs b/Templates/Full/game/scripts/server/components/game/itemRotate.cs new file mode 100644 index 0000000000..947d192143 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/itemRotate.cs @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("ItemRotationComponent", "Component", "Item Rotation", "Game", false, "Rotates the entity around the z axis, like an item pickup."); + +function ItemRotationComponent::onAdd(%this) +{ + %this.addComponentField(rotationsPerMinute, "Number of rotations per minute", "float", "5", ""); + %this.addComponentField(forward, "Rotate forward or backwards", "bool", "1", ""); + %this.addComponentField(horizontal, "Rotate horizontal or verticle, true for horizontal", "bool", "1", ""); +} + +function ItemRotationComponent::Update(%this) +{ + %tickRate = 0.032; + + //Rotations per second is calculated based on a standard update tick being 32ms. So we scale by the tick speed, then add that to our rotation to + //get a nice rotation speed. + if(%this.horizontal) + { + if(%this.forward) + %this.owner.rotation.z += ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + else + %this.owner.rotation.z -= ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + } + else + { + %this.owner.rotation.x += ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + } +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml b/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml new file mode 100644 index 0000000000..d181a86b4d --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/playerSpawner.cs b/Templates/Full/game/scripts/server/components/game/playerSpawner.cs new file mode 100644 index 0000000000..fb6507d083 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/playerSpawner.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("PlayerSpawner", "Component", +// "Player Spawner", "Game", false, "When a client connects, it spawns a player object for them and attaches them to it"); + +function PlayerSpawner::onAdd(%this) +{ + %this.clientCount = 1; + %this.friendlyName = "Player Spawner"; + %this.componentType = "Spawner"; + + %this.addComponentField("GameObjectName", "The name of the game object we spawn for the players", string, "PlayerObject"); +} + +function PlayerSpawner::onClientConnect(%this, %client) +{ + %playerObj = SGOManager.spawn(%this.GameObjectName); + + if(!isObject(%playerObj)) + return; + + %playerObj.position = %this.owner.position; + + MissionCleanup.add(%playerObj); + + for(%b = 0; %b < %playerObj.getComponentCount(); %b++) + { + %comp = %playerObj.getComponentByIndex(%b); + + if(%comp.isMethod("onClientConnect")) + %comp.onClientConnect(%client); + } + + switchControlObject(%client, %playerObj); + switchCamera(%client, %playerObj); + + //%playerObj.getComponent(FPSControls).setupControls(%client); + + %this.clientCount++; +} + +function PlayerSpawner::onClientDisConnect(%this, %client) +{ + +} + +function PlayerSpawner::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml b/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml new file mode 100644 index 0000000000..34f31f1811 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/input/fpsControls.cs b/Templates/Full/game/scripts/server/components/input/fpsControls.cs new file mode 100644 index 0000000000..8331e409d7 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/fpsControls.cs @@ -0,0 +1,247 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("FPSControls", "Component", "FPS Controls", "Input", false, "First Person Shooter-type controls"); + +function FPSControls::onAdd(%this) +{ + // + %this.beginGroup("Keys"); + %this.addComponentField(forwardKey, "Key to bind to vertical thrust", keybind, "keyboard w"); + %this.addComponentField(backKey, "Key to bind to vertical thrust", keybind, "keyboard s"); + %this.addComponentField(leftKey, "Key to bind to horizontal thrust", keybind, "keyboard a"); + %this.addComponentField(rightKey, "Key to bind to horizontal thrust", keybind, "keyboard d"); + + %this.addComponentField(jump, "Key to bind to horizontal thrust", keybind, "keyboard space"); + %this.endGroup(); + + %this.beginGroup("Mouse"); + %this.addComponentField(pitchAxis, "Key to bind to horizontal thrust", keybind, "mouse yaxis"); + %this.addComponentField(yawAxis, "Key to bind to horizontal thrust", keybind, "mouse xaxis"); + %this.endGroup(); + + %this.addComponentField(moveSpeed, "Horizontal thrust force", float, 300.0); + %this.addComponentField(jumpStrength, "Vertical thrust force", float, 3.0); + // + + %control = %this.owner.getComponent( ControlObjectComponent ); + if(!%control) + return echo("SPECTATOR CONTROLS: No Control Object behavior!"); + + //%this.Physics = %this.owner.getComponent( PlayerPhysicsComponent ); + + //%this.Animation = %this.owner.getComponent( AnimationComponent ); + + //%this.Camera = %this.owner.getComponent( MountedCameraComponent ); + + //%this.Animation.playThread(0, "look"); + + %this.setupControls(%control.getClientID()); +} + +function FPSControls::onRemove(%this) +{ + Parent::onBehaviorRemove(%this); + + commandToClient(%control.clientOwnerID, 'removeInput', %this.forwardKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.backKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.leftKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.rightKey); + + commandToClient(%control.clientOwnerID, 'removeInput', %this.pitchAxis); + commandToClient(%control.clientOwnerID, 'removeInput', %this.yawAxis); +} + +function FPSControls::onBehaviorFieldUpdate(%this, %field) +{ + %controller = %this.owner.getBehavior( ControlObjectBehavior ); + commandToClient(%controller.clientOwnerID, 'updateInput', %this.getFieldValue(%field), %field); +} + +function FPSControls::onClientConnect(%this, %client) +{ + %this.setupControls(%client); +} + + +function FPSControls::setupControls(%this, %client) +{ + %control = %this.owner.getComponent( ControlObjectComponent ); + if(!%control.isControlClient(%client)) + { + echo("FPS CONTROLS: Client Did Not Match"); + return; + } + + %inputCommand = "FPSControls"; + + %test = %this.forwardKey; + + /*SetInput(%client, %this.forwardKey.x, %this.forwardKey.y, %inputCommand@"_forwardKey"); + SetInput(%client, %this.backKey.x, %this.backKey.y, %inputCommand@"_backKey"); + SetInput(%client, %this.leftKey.x, %this.leftKey.y, %inputCommand@"_leftKey"); + SetInput(%client, %this.rightKey.x, %this.rightKey.y, %inputCommand@"_rightKey"); + + SetInput(%client, %this.jump.x, %this.jump.y, %inputCommand@"_jump"); + + SetInput(%client, %this.pitchAxis.x, %this.pitchAxis.y, %inputCommand@"_pitchAxis"); + SetInput(%client, %this.yawAxis.x, %this.yawAxis.y, %inputCommand@"_yawAxis");*/ + + SetInput(%client, "keyboard", "w", %inputCommand@"_forwardKey"); + SetInput(%client, "keyboard", "s", %inputCommand@"_backKey"); + SetInput(%client, "keyboard", "a", %inputCommand@"_leftKey"); + SetInput(%client, "keyboard", "d", %inputCommand@"_rightKey"); + + SetInput(%client, "keyboard", "space", %inputCommand@"_jump"); + + SetInput(%client, "mouse", "yaxis", %inputCommand@"_pitchAxis"); + SetInput(%client, "mouse", "xaxis", %inputCommand@"_yawAxis"); + + SetInput(%client, "keyboard", "f", %inputCommand@"_flashlight"); + +} + +function FPSControls::onMoveTrigger(%this, %triggerID) +{ + //check if our jump trigger was pressed! + if(%triggerID == 2) + { + %this.owner.applyImpulse("0 0 0", "0 0 " @ %this.jumpStrength); + } +} + +function FPSControls::Update(%this) +{ + return; + + %moveVector = %this.owner.getMoveVector(); + %moveRotation = %this.owner.getMoveRotation(); + + %this.Physics.moveVector = "0 0 0"; + + if(%moveVector.x != 0) + { + %fv = VectorNormalize(%this.owner.getRightVector()); + + %forMove = VectorScale(%fv, (%moveVector.x));// * (%this.moveSpeed * 0.032))); + + //%this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + + %this.Physics.moveVector = VectorAdd(%this.Physics.moveVector, %forMove); + + //if(%forMove > 0) + // %this.Animation.playThread(1, "run"); + } + /*else + { + %fv = VectorNormalize(%this.owner.getRightVector()); + + %forMove = VectorScale(%fv, (%moveVector.x * (%this.moveSpeed * 0.032))); + + if(%forMove <= 0) + %this.Animation.stopThread(1); + + }*/ + + if(%moveVector.y != 0) + { + %fv = VectorNormalize(%this.owner.getForwardVector()); + + %forMove = VectorScale(%fv, (%moveVector.y));// * (%this.moveSpeed * 0.032))); + + //%this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + + %this.Physics.moveVector = VectorAdd(%this.Physics.moveVector, %forMove); + + //if(VectorLen(%this.Physics.velocity) < 2) + // %this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + } + + /*if(%moveVector.z) + { + %fv = VectorNormalize(%this.owner.getUpVector()); + + %forMove = VectorScale(%fv, (%moveVector.z * (%this.moveSpeed * 0.032))); + + %this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + }*/ + + if(%moveRotation.x != 0) + { + %look = mRadToDeg(%moveRotation.x) / 180; + + //%this.Animation.setThreadPos(0, %look); + + %this.owner.getComponent( MountedCameraComponent ).rotationOffset.x += mRadToDeg(%moveRotation.x); + + //%this.Camera.rotationOffset.x += mRadToDeg(%moveRotation.x); + } + // %this.owner.rotation.x += mRadToDeg(%moveRotation.x); + + if(%moveRotation.z != 0) + { + %zrot = mRadToDeg(%moveRotation.z); + %this.owner.getComponent( MountedCameraComponent ).rotationOffset.z += %zrot; + //%this.owner.rotation.z += %zrot; + } +} + +// +function FPSControls_forwardKey(%val) +{ + $mvForwardAction = %val; +} + +function FPSControls_backKey(%val) +{ + $mvBackwardAction = %val; +} + +function FPSControls_leftKey(%val) +{ + $mvLeftAction = %val; +} + +function FPSControls_rightKey(%val) +{ + $mvRightAction = %val; +} + +function FPSControls_yawAxis(%val) +{ + $mvYaw += getMouseAdjustAmount(%val); +} + +function FPSControls_pitchAxis(%val) +{ + $mvPitch += getMouseAdjustAmount(%val); +} + +function FPSControls_jump(%val) +{ + $mvTriggerCount2++; +} + +function FPSControls_flashLight(%val) +{ + $mvTriggerCount3++; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/input/inputManager.cs b/Templates/Full/game/scripts/server/components/input/inputManager.cs new file mode 100644 index 0000000000..c8123d1e3e --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/inputManager.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function SetInput(%client, %device, %key, %command, %bindMap, %behav) +{ + commandToClient(%client, 'SetInput', %device, %key, %command, %bindMap, %behav); +} + +function RemoveInput(%client, %device, %key, %command, %bindMap) +{ + commandToClient(%client, 'removeInput', %device, %key, %command, %bindMap); +} + +function clientCmdSetInput(%device, %key, %command, %bindMap, %behav) +{ + //if we're requesting a custom bind map, set that up + if(%bindMap $= "") + %bindMap = moveMap; + + if (!isObject(%bindMap)){ + new ActionMap(moveMap); + moveMap.push(); + } + + //get our local + //%localID = ServerConnection.resolveGhostID(%behav); + + //%tmpl = %localID.getTemplate(); + //%tmpl.insantiateNamespace(%tmpl.getName()); + + //first, check if we have an existing command + %oldBind = %bindMap.getBinding(%command); + if(%oldBind !$= "") + %bindMap.unbind(getField(%oldBind, 0), getField(%oldBind, 1)); + + //now, set the requested bind + %bindMap.bind(%device, %key, %command); +} + +function clientCmdRemoveSpecCtrlInput(%device, %key, %bindMap) +{ + //if we're requesting a custom bind map, set that up + if(%bindMap $= "") + %bindMap = moveMap; + + if (!isObject(%bindMap)) + return; + + %bindMap.unbind(%device, %key); +} + +function clientCmdSetupClientBehavior(%bhvrGstID) +{ + %localID = ServerConnection.resolveGhostID(%bhvrGstID); + %tmpl = %localID.getTemplate(); + %tmpl.insantiateNamespace(%tmpl.getName()); +} + +function getMouseAdjustAmount(%val) +{ + // based on a default camera FOV of 90' + return(%val * ($cameraFov / 90) * 0.01) * $pref::Input::LinkMouseSensitivity; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/meshComponent.asset.taml b/Templates/Full/game/scripts/server/components/meshComponent.asset.taml new file mode 100644 index 0000000000..d019cd893b --- /dev/null +++ b/Templates/Full/game/scripts/server/components/meshComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml b/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml new file mode 100644 index 0000000000..d5174644b1 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml b/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml new file mode 100644 index 0000000000..a261bb1945 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/gameCore.cs b/Templates/Full/game/scripts/server/gameCore.cs index abff15c0ad..bb7aed7140 100644 --- a/Templates/Full/game/scripts/server/gameCore.cs +++ b/Templates/Full/game/scripts/server/gameCore.cs @@ -573,6 +573,31 @@ function endGame() %client.isAiControlled(), %client.isAdmin, %client.isSuperAdmin); + + %entityIds = parseMissionGroupForIds("Entity", ""); + %entityCount = getWordCount(%entityIds); + + for(%i=0; %i < %entityCount; %i++) + { + %entity = getWord(%entityIds, %i); + + for(%e=0; %e < %entity.getCount(); %e++) + { + %child = %entity.getObject(%e); + if(%child.getCLassName() $= "Entity") + %entityIds = %entityIds SPC %child.getID(); + } + + for(%c=0; %c < %entity.getComponentCount(); %c++) + { + %comp = %entity.getComponentByIndex(%c); + + if(%comp.isMethod("onClientConnect")) + { + %comp.onClientConnect(%client); + } + } + } } function GameCore::onClientLeaveGame(%game, %client) diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs new file mode 100644 index 0000000000..f0b618920f --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs @@ -0,0 +1,123 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +function execGameObjects() +{ + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(isFile(%gameObjectAsset.scriptFilePath)) + exec(%gameObjectAsset.scriptFilePath); + } +} + +function findGameObject(%name) +{ + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return 0; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(%gameObjectAsset.gameObjectName $= %name) + { + if(isFile(%gameObjectAsset.TAMLFilePath)) + { + return %gameObjectAsset; + } + } + } + + return 0; +} + +function spawnGameObject(%name, %addToMissionGroup) +{ + if(%addToMissionGroup $= "") + %addToMissionGroup = true; + + %gameObjectAsset = findGameObject(%name); + + if(isObject(%gameObjectAsset)) + { + %newSGOObject = TamlRead(%gameObjectAsset.TAMLFilePath); + + if(%addToMissionGroup == true) //save instance when saving level + MissionGroup.add(%newSGOObject); + else // clear instance on level exit + MissionCleanup.add(%newSGOObject); + + return %newSGOObject; + } + + return 0; +} + +function saveGameObject(%name, %tamlPath, %scriptPath) +{ + %gameObjectAsset = findGameObject(%name); + + //find if it already exists. If it does, we'll update it, if it does not, we'll make a new asset + if(isObject(%gameObjectAsset)) + { + %assetID = %gameObjectAsset.getAssetId(); + + %gameObjectAsset.TAMLFilePath = %tamlPath; + %gameObjectAsset.scriptFilePath = %scriptPath; + + TAMLWrite(%gameObjectAsset, AssetDatabase.getAssetFilePath(%assetID)); + AssetDatabase.refreshAsset(%assetID); + } + else + { + //Doesn't exist, so make a new one + %gameObjectAsset = new GameObjectAsset() + { + assetName = %name @ "Asset"; + gameObjectName = %name; + TAMLFilePath = %tamlPath; + scriptFilePath = %scriptPath; + }; + + //Save it alongside the taml file + %path = filePath(%tamlPath); + + TAMLWrite(%gameObjectAsset, %path @ "/" @ %name @ ".asset.taml"); + AssetDatabase.refreshAllAssets(true); + } +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml new file mode 100644 index 0000000000..2d593a50b4 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs new file mode 100644 index 0000000000..3ab05a79d4 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs @@ -0,0 +1,247 @@ +function ThirdPersonPlayerObject::onAdd(%this) +{ + %this.turnRate = 0.3; + + %this.phys = %this.getComponent("PlayerControllerComponent"); + %this.collision = %this.getComponent("CollisionComponent"); + %this.cam = %this.getComponent("CameraComponent"); + %this.camArm = %this.getComponent("CameraOrbiterComponent"); + %this.animation = %this.getComponent("AnimationComponent"); + %this.stateMachine = %this.getComponent("StateMachineComponent"); + %this.mesh = %this.getComponent("MeshComponent"); + + %this.stateMachine.forwardVector = 0; + + %this.crouch = false; + + %this.firstPerson = false; + + %this.crouchSpeedMod = 0.5; + + %this.aimOrbitDist = 1.5; + %this.regularOrbitDist = 5; + + %this.regularOrbitMaxPitch = 70; + %this.regularOrbitMinPitch = -10; + + %this.aimedMaxPitch = 90; + %this.aimedMinPitch = -90; +} + +function ThirdPersonPlayerObject::onRemove(%this) +{ + +} + +function ThirdPersonPlayerObject::moveVectorEvent(%this) +{ + %moveVector = %this.getMoveVector(); + + // forward of the camera on the x-z plane + %cameraForward = %this.cam.getForwardVector(); + + %cameraRight = %this.cam.getRightVector(); + + %moveVec = VectorAdd(VectorScale(%cameraRight, %moveVector.x), VectorScale(%cameraForward, %moveVector.y)); + + if(%this.aiming || %this.firstPerson) + { + %forMove = "0 0 0"; + + if(%moveVector.x != 0) + { + %this.phys.inputVelocity.x = %moveVector.x * 10; + } + else + { + %this.phys.inputVelocity.x = 0; + } + + if(%moveVector.y != 0) + { + + %this.phys.inputVelocity.y = %moveVector.y * 10; + } + else + { + %this.phys.inputVelocity.y = 0; + } + } + else + { + if(%moveVec.x == 0 && %moveVec.y == 0) + { + %this.phys.inputVelocity = "0 0 0"; + %this.stateMachine.forwardVector = 0; + } + else + { + %moveVec.z = 0; + + %curForVec = %this.getForwardVector(); + + %newForVec = VectorLerp(%curForVec, %moveVec, %this.turnRate); + + %this.setForwardVector(%newForVec); + + %this.phys.inputVelocity.y = 10; + + %this.stateMachine.forwardVector = 1; + } + } + + if(%this.crouch) + %this.phys.inputVelocity = VectorScale(%this.phys.inputVelocity, %this.crouchSpeedMod); +} + +function ThirdPersonPlayerObject::moveYawEvent(%this) +{ + %moveRotation = %this.getMoveRotation(); + + %camOrb = %this.getComponent("CameraOrbiterComponent"); + + if(%this.aiming || %this.firstPerson) + { + %this.rotation.z += %moveRotation.z * 10; + } + + %camOrb.rotation.z += %moveRotation.z * 10; +} + +function ThirdPersonPlayerObject::movePitchEvent(%this) +{ + %moveRotation = %this.getMoveRotation(); + + %camOrb = %this.getComponent("CameraOrbiterComponent"); + + %camOrb.rotation.x += %moveRotation.x * 10; +} + +function ThirdPersonPlayerObject::moveRollEvent(%this){} + +function ThirdPersonPlayerObject::moveTriggerEvent(%this, %triggerNum, %triggerValue) +{ + if(%triggerNum == 3 && %triggerValue) + { + if(%triggerValue) + { + %this.firstPerson = !%this.firstPerson; + + if(%this.firstPerson) + { + %this.rotation.z = %this.cam.rotationOffset.z; + %this.camArm.orbitDistance = 0; + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + + %this.cam.positionOffset = "0 0 0"; + %this.cam.rotationOffset = "0 0 0"; + } + else if(%this.aiming) + { + %this.camArm.orbitDistance = %this.aimOrbitDist; + + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + } + else + { + %this.camArm.orbitDistance = %this.regularOrbitDist; + + %this.camArm.maxPitchAngle = %this.regularOrbitMaxPitch; + %this.camArm.minPitchAngle = %this.regularOrbitMinPitch; + } + + commandToClient(localclientConnection, 'SetClientRenderShapeVisibility', + localclientConnection.getGhostID(%this.getComponent("MeshComponent")), !%this.firstPerson); + } + } + else if(%triggerNum == 2 && %triggerValue == true) + { + //get our best collision assuming up is 0 0 1 + %collisionAngle = %this.collision.getBestCollisionAngle("0 0 1"); + + if(%collisionAngle >= 80) + { + %surfaceNormal = %this.collision.getCollisionNormal(0); + %jumpVector = VectorScale(%surfaceNormal, 200); + echo("Jump surface Angle is at: " @ %surfaceNormal); + + %this.phys.applyImpulse(%this.position, %jumpVector); + %this.setForwardVector(%jumpVector); + } + else + %this.phys.applyImpulse(%this.position, "0 0 300"); + } + else if(%triggerNum == 4) + { + %this.crouch = %triggerValue; + } + else if(%triggerNum == 1) + { + %this.aiming = %triggerValue; + + if(%this.aiming) + { + %this.rotation.z = %this.cam.rotationOffset.z; + %this.camArm.orbitDistance = %this.aimOrbitDist; + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + } + else + { + %this.camArm.orbitDistance = %this.regularOrbitDist; + %this.camArm.maxPitchAngle = %this.regularOrbitMaxPitch; + %this.camArm.minPitchAngle = %this.regularOrbitMinPitch; + } + } +} + +function ThirdPersonPlayerObject::onCollisionEvent(%this, %colObject, %colNormal, %colPoint, %colMatID, %velocity) +{ + if(!%this.phys.isContacted()) + echo(%this @ " collided with " @ %colObject); +} + +function ThirdPersonPlayerObject::processTick(%this) +{ + %moveVec = %this.getMoveVector(); + %bestFit = ""; + + if(%this.crouch) + { + if(%moveVec.x != 0 || %moveVec.y != 0) + %bestFit = "Crouch_Forward"; + else + %bestFit = "Crouch_Root"; + } + else + { + if(%moveVec.x != 0 || %moveVec.y != 0) + %bestFit = "Run"; + else + %bestFit = "Root"; + } + + if(%this.animation.getThreadAnimation(0) !$= %bestFit) + %this.animation.playThread(0, %bestFit); +} + +//Used for first person mode +function clientCmdSetClientRenderShapeVisibility(%id, %visiblilty) +{ + %localID = ServerConnection.resolveGhostID(%id); + %localID.enabled = %visiblilty; +} + +function serverToClientObject( %serverObject ) +{ + assert( isObject( LocalClientConnection ), "serverToClientObject() - No local client connection found!" ); + assert( isObject( ServerConnection ), "serverToClientObject() - No server connection found!" ); + + %ghostId = LocalClientConnection.getGhostId( %serverObject ); + if ( %ghostId == -1 ) + return 0; + + return ServerConnection.resolveGhostID( %ghostId ); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml new file mode 100644 index 0000000000..df2397bb5c --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml @@ -0,0 +1,98 @@ + + + + + + + + + + + diff --git a/Templates/Full/game/scripts/server/physicsShape.cs b/Templates/Full/game/scripts/server/physicsShape.cs new file mode 100644 index 0000000000..8818a16139 --- /dev/null +++ b/Templates/Full/game/scripts/server/physicsShape.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function PhysicsShapeData::damage(%this, %obj, %sourceObject, %position, %amount, %damageType) +{ + // Order of operations is extremely important here! + // Verify that any changes will not cause this method to overflow the stack + // recursively calling itself. + + // Note that invulerable, damageRadius, areaImpulse, radiusDamage, and damageType + // are only dynamic fields... This is fine so long as you are only calling + // this method server-side, just keep in mind these fields are NOT networked. + + if ( %this.invulnerable || + %amount < 0 || + ( %this.minDamageAmount != 0 && %amount < %this.minDamageAmount ) ) + return; + + // We cannot destroy things twice. + if ( %obj.isDestroyed() ) + return; + + // This sets a maskbit on the server PhysicsShape which will cause the + // client object to destroy ( spawn debris ) during the next ghost update. + %obj.destroy(); + + // Single-player hack... + // In a single-player situation the radial impulse NetEvent will + // be applied client-side immediately when we call it, which means it will + // happen before the next ghost update and the debris won't even exist yet! + // + // So we are explicitly calling destroy on the client-side object first, + // before sending the event. + // + if ( %obj.getClientObject() ) + %obj.getClientObject().destroy(); + + if ( %this.damageRadius > 0 ) + { + // Send impulse event to affect objects from the explosion of this object. + // Happens server-side and client-side. + if ( %this.areaImpulse > 0 ) + RadialImpulseEvent::send( %position, %this.damageRadius, %this.areaImpulse ); + + // Apply damage to objects from the explosion of this object. + if ( %this.radiusDamage > 0 ) + radiusDamage( %obj, %position, %this.damageRadius, %this.radiusDamage, %this.damageType ); + } +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/radiusDamage.cs b/Templates/Full/game/scripts/server/radiusDamage.cs index 808d3b7d66..91255f25c5 100644 --- a/Templates/Full/game/scripts/server/radiusDamage.cs +++ b/Templates/Full/game/scripts/server/radiusDamage.cs @@ -29,7 +29,7 @@ function radiusDamage(%sourceObject, %position, %radius, %damage, %damageType, % // Use the container system to iterate through all the objects // within our explosion radius. We'll apply damage to all ShapeBase // objects. - InitContainerRadiusSearch(%position, %radius, $TypeMasks::ShapeBaseObjectType); + InitContainerRadiusSearch(%position, %radius, $TypeMasks::ShapeBaseObjectType | $TypeMasks::DynamicShapeObjectType); %halfRadius = %radius / 2; while ((%targetObject = containerSearchNext()) != 0) @@ -56,7 +56,8 @@ function radiusDamage(%sourceObject, %position, %radius, %damage, %damageType, % // Full damage is applied to anything less than half the radius away, // linear scale from there. %distScale = (%dist < %halfRadius)? 1.0 : 1.0 - ((%dist - %halfRadius) / %halfRadius); - + %distScale = mClamp(%distScale,0.0,1.0); + // Apply the damage %targetObject.damage(%sourceObject, %position, %damage * %coverage * %distScale, %damageType); diff --git a/Templates/Full/game/scripts/server/scriptExec.cs b/Templates/Full/game/scripts/server/scriptExec.cs index 64d4adc066..f6eb29b7de 100644 --- a/Templates/Full/game/scripts/server/scriptExec.cs +++ b/Templates/Full/game/scripts/server/scriptExec.cs @@ -24,6 +24,7 @@ // a server is constructed. exec("./camera.cs"); exec("./triggers.cs"); +exec("./VolumetricFog.cs"); exec("./inventory.cs"); exec("./shapeBase.cs"); exec("./item.cs"); @@ -31,6 +32,7 @@ exec("./projectile.cs"); exec("./radiusDamage.cs"); exec("./teleporter.cs"); +exec("./physicsShape.cs"); // Load our supporting weapon script, it contains methods used by all weapons. exec("./weapon.cs"); @@ -56,3 +58,23 @@ // Load our gametypes exec("./gameCore.cs"); // This is the 'core' of the gametype functionality. exec("./gameDM.cs"); // Overrides GameCore with DeathMatch functionality. + +//Entity/Component stuff +if(isFile("./components/game/camera.cs")) + exec("./components/game/camera.cs"); +if(isFile("./components/game/controlObject.cs")) + exec("./components/game/controlObject.cs"); +if(isFile("./components/game/itemRotate.cs")) + exec("./components/game/itemRotate.cs"); +if(isFile("./components/game/playerSpawner.cs")) + exec("./components/game/playerSpawner.cs"); +if(isFile("./components/input/fpsControls.cs")) + exec("./components/input/fpsControls.cs"); +if(isFile("./components/input/inputManager.cs")) + exec("./components/input/inputManager.cs"); + +if(isFile("./gameObjects/GameObjectManager.cs")) +{ + exec("./gameObjects/GameObjectManager.cs"); + execGameObjects(); +} diff --git a/Templates/Full/game/scripts/server/shapeBase.cs b/Templates/Full/game/scripts/server/shapeBase.cs index 1282788831..ba0e9028b7 100644 --- a/Templates/Full/game/scripts/server/shapeBase.cs +++ b/Templates/Full/game/scripts/server/shapeBase.cs @@ -97,6 +97,20 @@ } } + +function GameBase::damage(%this, %sourceObject, %position, %damage, %damageType) +{ + // All damage applied by one object to another should go through this method. + // This function is provided to allow objects some chance of overriding or + // processing damage values and types. As opposed to having weapons call + // ShapeBase::applyDamage directly. Damage is redirected to the datablock, + // this is standard procedure for many built in callbacks. + + %datablock = %this.getDataBlock(); + if ( isObject( %datablock ) ) + %datablock.damage(%this, %sourceObject, %position, %damage, %damageType); +} + //----------------------------------------------------------------------------- // ShapeBase datablock //----------------------------------------------------------------------------- diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl new file mode 100644 index 0000000000..e900f7548b --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final pixel shader V2.00 +#include "../shaderModel.hlsl" +#include "../shaderModelAutoGen.hlsl" +#include "../torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(depthBuffer, 1); +TORQUE_UNIFORM_SAMPLER2D(frontBuffer, 2); +TORQUE_UNIFORM_SAMPLER2D(density, 3); + +uniform float3 ambientColor; +uniform float accumTime; +uniform float4 fogColor; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform float numtiles; +uniform float fadesize; +uniform float2 PixelSize; + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = TORQUE_PREPASS_UNCONDITION(prepassTex, uvscreen).w * preBias; + float depth = TORQUE_TEX2D(depthBuffer, uvscreen).r; + float front = TORQUE_TEX2D(frontBuffer, uvscreen).r; + + if (depth <= front) + return float4(0,0,0,0); + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + float3 col = fogColor.rgb; + if (textured != 0.0) + { + float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + float2 mod1 = TORQUE_TEX2D(density, (offset + (modspeed.xy*accumTime))).rg; + float2 mod2 = TORQUE_TEX2D(density, (offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + float4 resultColor = float4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + return hdrEncode(resultColor); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl new file mode 100644 index 0000000000..fdc839507d --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass pixel shader V1.00 +#include "../shaderModel.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + float OUT; + + clip( IN.pos.w ); + OUT = IN.pos.w; + + return float4(OUT,0,0,1); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl new file mode 100644 index 0000000000..aba7a745db --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass vertex shader V1.00 + +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_P IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, float4(IN.pos, 1.0)); + OUT.pos = OUT.hpos; + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl new file mode 100644 index 0000000000..380233b5fe --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Reflection pixel shader V1.00 +#include "../shaderModel.hlsl" +uniform float4 fogColor; +uniform float fogDensity; +uniform float reflStrength; + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 +{ + return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl new file mode 100644 index 0000000000..167f83946e --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final vertex shader V1.00 + +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" + +struct ConnectData +{ + float4 hpos : TORQUE_POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_PNTT IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, float4(IN.pos,1.0)); + OUT.htpos = OUT.hpos; + OUT.uv0 = IN.uv0; + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl new file mode 100644 index 0000000000..7895d9e2d1 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../gl/torque.glsl" + +uniform sampler2D prepassTex; +uniform sampler2D depthBuffer; +uniform sampler2D frontBuffer; +uniform sampler2D density; + +uniform float accumTime; +uniform vec4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform vec4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform vec2 viewpoint; +uniform vec2 texscale; +uniform vec3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform vec2 PixelSize; + +in vec4 _hpos; +#define IN_hpos _hpos +out vec4 OUT_col; + +void main() +{ + vec2 uvscreen=((IN_hpos.xy/IN_hpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + { + OUT_col = vec4(0,0,0,0); + return; + } + + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + vec3 col = fogColor.rgb; + if (textured != 0.0) + { + vec2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + vec2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + vec2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + vec4 returnColor = vec4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + OUT_col = hdrEncode(returnColor); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl new file mode 100644 index 0000000000..017ea6ef8e --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 _hpos; +#define IN_hpos _hpos + +out vec4 OUT_col; + +void main() +{ + float OUT; + clip( IN_hpos.w ); + OUT = IN_hpos.w; + + OUT_col = vec4(OUT,0,0,1); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl new file mode 100644 index 0000000000..2f2a1318ac --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + vec4 inPos = IN_position; + inPos.w = 1.0; + + OUT_hpos = tMul( modelView, inPos ); + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl new file mode 100644 index 0000000000..78e149fbf5 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +uniform vec4 fogColor; +uniform float fogDensity; +uniform float reflStrength; +out vec4 OUT_col; + +void main() +{ + OUT_col = vec4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl new file mode 100644 index 0000000000..57b3ba87e7 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + OUT_hpos = tMul(modelView, IN_position); + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Full/game/shaders/common/basicCloudsP.hlsl b/Templates/Full/game/shaders/common/basicCloudsP.hlsl index 53b88d8b76..4b40e5e8cd 100644 --- a/Templates/Full/game/shaders/common/basicCloudsP.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsP.hlsl @@ -24,14 +24,14 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 col = tex2D( diffuseMap, IN.texCoord ); + float4 col = TORQUE_TEX2D(diffuseMap, IN.texCoord); return hdrEncode( col ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/basicCloudsV.hlsl b/Templates/Full/game/shaders/common/basicCloudsV.hlsl index 49842fd37b..a176fdbcdc 100644 --- a/Templates/Full/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsV.hlsl @@ -20,39 +20,39 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct CloudVert { - float4 pos : POSITION; - float3 normal : NORMAL; - float3 binormal : BINORMAL; - float3 tangent : TANGENT; + float3 pos : POSITION; float2 uv0 : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; uniform float4x4 modelview; -uniform float accumTime; -uniform float texScale; uniform float2 texDirection; uniform float2 texOffset; +uniform float accumTime; +uniform float texScale; + ConnectData main( CloudVert IN ) -{ +{ ConnectData OUT; - - OUT.hpos = mul(modelview, IN.pos); - + + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); + float2 uv = IN.uv0; uv += texOffset; uv *= texScale; uv += accumTime * texDirection; - OUT.texCoord = uv; - + OUT.texCoord = uv; + return OUT; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/cloudLayerP.hlsl b/Templates/Full/game/shaders/common/cloudLayerP.hlsl index a3c2d06e89..efa8fe0b4d 100644 --- a/Templates/Full/game/shaders/common/cloudLayerP.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerP.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" #include "torque.hlsl" //----------------------------------------------------------------------------- @@ -27,7 +28,7 @@ //----------------------------------------------------------------------------- struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -38,7 +39,7 @@ struct ConnectData //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler2D normalHeightMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(normalHeightMap, 0); uniform float3 ambientColor; uniform float3 sunColor; uniform float cloudCoverage; @@ -99,7 +100,7 @@ float3 ComputeIllumination( float2 texCoord, return finalColor; } -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Normalize the interpolated vectors: float3 vViewTS = normalize( IN.vViewTS ); @@ -109,11 +110,11 @@ float4 main( ConnectData IN ) : COLOR float2 texSample = IN.texCoord12.xy; - float4 noise1 = tex2D( normalHeightMap, IN.texCoord12.zw ); + float4 noise1 = TORQUE_TEX2D( normalHeightMap, IN.texCoord12.zw ); noise1 = normalize( ( noise1 - 0.5 ) * 2.0 ); //return noise1; - float4 noise2 = tex2D( normalHeightMap, IN.texCoord34.xy ); + float4 noise2 = TORQUE_TEX2D(normalHeightMap, IN.texCoord34.xy); noise2 = normalize( ( noise2 - 0.5 ) * 2.0 ); //return noise2; @@ -122,7 +123,7 @@ float4 main( ConnectData IN ) : COLOR float noiseHeight = noise1.a * noise2.a * ( cloudCoverage / 2.0 + 0.5 ); - float3 vNormalTS = normalize( tex2D( normalHeightMap, texSample ).xyz * 2.0 - 1.0 ); + float3 vNormalTS = normalize( TORQUE_TEX2D(normalHeightMap, texSample).xyz * 2.0 - 1.0); vNormalTS += noiseNormal; vNormalTS = normalize( vNormalTS ); @@ -130,7 +131,7 @@ float4 main( ConnectData IN ) : COLOR cResultColor.rgb = ComputeIllumination( texSample, vLightTS, vViewTS, vNormalTS ); float coverage = ( cloudCoverage - 0.5 ) * 2.0; - cResultColor.a = tex2D( normalHeightMap, texSample ).a + coverage + noiseHeight; + cResultColor.a = TORQUE_TEX2D(normalHeightMap, texSample).a + coverage + noiseHeight; if ( cloudCoverage > -1.0 ) cResultColor.a /= 1.0 + coverage; diff --git a/Templates/Full/game/shaders/common/cloudLayerV.hlsl b/Templates/Full/game/shaders/common/cloudLayerV.hlsl index 8c1cc555f0..d60dd251d8 100644 --- a/Templates/Full/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerV.hlsl @@ -23,10 +23,11 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" struct CloudVert { - float4 pos : POSITION; + float3 pos : POSITION; float3 normal : NORMAL; float3 binormal : BINORMAL; float3 tangent : TANGENT; @@ -35,7 +36,7 @@ struct CloudVert struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -61,8 +62,7 @@ ConnectData main( CloudVert IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); - + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); @@ -85,7 +85,7 @@ ConnectData main( CloudVert IN ) float3 vBinormalWS = -IN.binormal; // Compute position in world space: - float4 vPositionWS = IN.pos + float4( eyePosWorld, 1 ); //mul( IN.pos, objTrans ); + float4 vPositionWS = float4(IN.pos, 1.0) + float4(eyePosWorld, 1); //mul( IN.pos, objTrans ); // Compute and output the world view vector (unnormalized): float3 vViewWS = eyePosWorld - vPositionWS.xyz; diff --git a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl index 52ae4e9557..d0577428fe 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return float4(color_in.rgb, color_in.a * tex2D(diffuseMap, texCoord_in).a); + return float4(IN.color.rgb, IN.color.a * TORQUE_TEX2D(diffuseMap, IN.texCoord).a); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl index 90bb081128..dd9990e070 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl @@ -20,7 +20,15 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 { - return color_in; + return IN.color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl index f0efe1493b..d16dfb8632 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl @@ -20,20 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; return Out; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl index ccf22845cd..63afec2a45 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return tex2D(diffuseMap, texCoord_in) * color_in; + return TORQUE_TEX2D(diffuseMap, IN.texCoord) * IN.color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl new file mode 100644 index 0000000000..82dbd4ce97 --- /dev/null +++ b/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../shaderModel.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 +{ + return TORQUE_TEX2D(diffuseMap, IN.texCoord); +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl new file mode 100644 index 0000000000..204cf95141 --- /dev/null +++ b/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../shaderModel.hlsl" + +struct Appdata +{ + float3 position : POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = mul(modelview, float4(In.position, 1.0)); + Out.texCoord = In.texCoord; + return Out; +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/foliage.hlsl b/Templates/Full/game/shaders/common/foliage.hlsl index e875bb23fe..9952c29d69 100644 --- a/Templates/Full/game/shaders/common/foliage.hlsl +++ b/Templates/Full/game/shaders/common/foliage.hlsl @@ -30,11 +30,11 @@ #define MAX_COVERTYPES 8 +uniform float2 gc_fadeParams; +uniform float2 gc_windDir; uniform float3 gc_camRight; uniform float3 gc_camUp; uniform float4 gc_typeRects[MAX_COVERTYPES]; -uniform float2 gc_fadeParams; -uniform float2 gc_windDir; // .x = gust length // .y = premultiplied simulation time and gust frequency diff --git a/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl b/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl index dfa2e4de01..a8bb68e284 100644 --- a/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl +++ b/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl @@ -21,36 +21,39 @@ //----------------------------------------------------------------------------- #include "shdrConsts.h" - +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 lum : COLOR0; + float4 hpos : TORQUE_POSITION; + float2 outTexCoord : TEXCOORD0; + float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(alphaMap, 1); + +uniform float4 groundAlpha; +uniform float4 ambient; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D diffuseMap : register(S0), - uniform sampler2D alphaMap : register(S1), - uniform float4 groundAlpha, - uniform float4 ambient ) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 alpha = tex2D(alphaMap, IN.alphaLookup); - OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * tex2D(diffuseMap, IN.texCoord); + float4 alpha = TORQUE_TEX2D(alphaMap, IN.alphaLookup); + OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * TORQUE_TEX2D(diffuseMap, IN.texCoord); OUT.col.a = OUT.col.a * min(alpha, groundAlpha + IN.groundAlphaCoeff.x).x; return OUT; diff --git a/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl b/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl index 06a9cf5e52..70ec9ff4cb 100644 --- a/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl +++ b/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl @@ -23,39 +23,42 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float2 waveScale : TEXCOORD1; + float3 position : POSITION; float3 normal : NORMAL; - float4 position : POSITION; + float2 texCoord : TEXCOORD0; + float2 waveScale : TEXCOORD1; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 outTexCoord : TEXCOORD0; float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; +uniform float4x4 projection : register(C0); +uniform float4x4 world : register(C4); +uniform float GlobalSwayPhase : register(C8); +uniform float SwayMagnitudeSide : register(C9); +uniform float SwayMagnitudeFront : register(C10); +uniform float GlobalLightPhase : register(C11); +uniform float LuminanceMagnitude : register(C12); +uniform float LuminanceMidpoint : register(C13); +uniform float DistanceRange : register(C14); +uniform float3 CameraPos : register(C15); +uniform float TrueBillboard : register(C16); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 projection : register(C0), - uniform float4x4 world : register(C4), - uniform float GlobalSwayPhase : register(C8), - uniform float SwayMagnitudeSide : register(C9), - uniform float SwayMagnitudeFront : register(C10), - uniform float GlobalLightPhase : register(C11), - uniform float LuminanceMagnitude : register(C12), - uniform float LuminanceMidpoint : register(C13), - uniform float DistanceRange : register(C14), - uniform float3 CameraPos : register(C15), - uniform float TrueBillboard : register(C16) -) +ConnectData main( VertData IN ) { ConnectData OUT; @@ -113,7 +116,7 @@ ConnectData main( VertData IN, float Luminance = LuminanceMidpoint + LuminanceMagnitude * cos(GlobalLightPhase + IN.normal.y); // Alpha - float3 worldPos = float3(IN.position.x, IN.position.y, IN.position.z); + float3 worldPos = IN.position; float alpha = abs(distance(worldPos, CameraPos)) / DistanceRange; alpha = clamp(alpha, 0.0f, 1.0f); //pass it through diff --git a/Templates/Full/game/shaders/common/gl/lighting.glsl b/Templates/Full/game/shaders/common/gl/lighting.glsl index eb1c9b3553..804ab1e3b3 100644 --- a/Templates/Full/game/shaders/common/gl/lighting.glsl +++ b/Templates/Full/game/shaders/common/gl/lighting.glsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.glsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( vec3 wsView, /// float AL_CalcSpecular( vec3 toLight, vec3 normal, vec3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +vec4 AL_DeferredOutput( + vec3 lightColor, + vec3 diffuseColor, + vec4 matInfo, + vec4 ambient, + float specular, + float shadowAttenuation) +{ + vec3 specularColor = vec3(specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(max(specular,1.0f), max((matInfo.a / AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= vec3(shadowAttenuation); + lightColor += ambient.rgb; + return vec4(lightColor.rgb, specularOut); +} diff --git a/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl b/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl index d9fa80bcf1..b4e70f9028 100644 --- a/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl +++ b/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl @@ -73,5 +73,8 @@ void main() discard; OUT_col.a = 1; + + OUT_col = clamp(OUT_col, 0.0, 1.0); + OUT_col = hdrEncode( OUT_col ); } diff --git a/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl b/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl index 61580d785d..252a2b1210 100644 --- a/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl +++ b/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl @@ -36,14 +36,9 @@ float vernierScale(float fCos) } in vec4 vPosition; -in vec3 vNormal; -in vec4 vColor; -in vec2 vTexCoord0; // This is the shader input vertex structure. #define IN_position vPosition -#define IN_normal vNormal -#define IN_color vColor // This is the shader output data. out vec4 rayleighColor; diff --git a/Templates/Full/game/shaders/common/gl/torque.glsl b/Templates/Full/game/shaders/common/gl/torque.glsl index 9032a57f77..d4a7c45381 100644 --- a/Templates/Full/game/shaders/common/gl/torque.glsl +++ b/Templates/Full/game/shaders/common/gl/torque.glsl @@ -284,4 +284,37 @@ void fizzle(vec2 vpos, float visibility) /// @note This macro will only work in the void main() method of a pixel shader. #define assert(condition, color) { if(!any(condition)) { OUT_col = color; return; } } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, float num) +{ + float process = round(flags * 255); + float squareNum = pow(2.0, num); + return (mod(process, pow(2.0, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return tex; +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(2.2)), tex.a); +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(1.0/2.2)), tex.a); +} +#endif // + #endif // _TORQUE_GLSL_ diff --git a/Templates/Full/game/shaders/common/guiMaterialV.hlsl b/Templates/Full/game/shaders/common/guiMaterialV.hlsl index 425da5da4c..5d725338f7 100644 --- a/Templates/Full/game/shaders/common/guiMaterialV.hlsl +++ b/Templates/Full/game/shaders/common/guiMaterialV.hlsl @@ -20,23 +20,25 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" struct MaterialDecoratorConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; +uniform float4x4 modelview : register(C0); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -MaterialDecoratorConnectV main( VertexIn_PCT IN, - uniform float4x4 modelview : register(C0) ) +MaterialDecoratorConnectV main( VertexIn_PCT IN ) { MaterialDecoratorConnectV OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.uv0 = IN.uv0; return OUT; diff --git a/Templates/Full/game/shaders/common/hlslStructs.hlsl b/Templates/Full/game/shaders/common/hlslStructs.hlsl new file mode 100644 index 0000000000..ce0ca305c6 --- /dev/null +++ b/Templates/Full/game/shaders/common/hlslStructs.hlsl @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// The purpose of this file is to get all of our HLSL structures into one place. +// Please use the structures here instead of redefining input and output structures +// in each shader file. If structures are added, please adhere to the naming convention. + +//------------------------------------------------------------------------------ +// Vertex Input Structures +// +// These structures map to FVFs/Vertex Declarations in Torque. See gfxStructs.h +//------------------------------------------------------------------------------ + +// Notes +// +// Position should be specified as a float3 as our vertex structures in +// the engine output float3s for position. + +struct VertexIn_P +{ + float3 pos : POSITION; +}; + +struct VertexIn_PT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PTTT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; +}; + +struct VertexIn_PC +{ + float3 pos : POSITION; + float4 color : DIFFUSE; +}; + +struct VertexIn_PNC +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; +}; + +struct VertexIn_PCT +{ + float3 pos : POSITION; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PN +{ + float3 pos : POSITION; + float3 normal : NORMAL; +}; + +struct VertexIn_PNT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float3 tangent : TANGENT; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNCT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTTTB +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float3 T : TEXCOORD2; + float3 B : TEXCOORD3; +}; \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting.hlsl b/Templates/Full/game/shaders/common/lighting.hlsl index ec8129e944..a41b8a8734 100644 --- a/Templates/Full/game/shaders/common/lighting.hlsl +++ b/Templates/Full/game/shaders/common/lighting.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.hlsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( float3 wsView, /// float AL_CalcSpecular( float3 toLight, float3 normal, float3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +float4 AL_DeferredOutput( + float3 lightColor, + float3 diffuseColor, + float4 matInfo, + float4 ambient, + float specular, + float shadowAttenuation) +{ + float3 specularColor = float3(specular, specular, specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(abs(specular), max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= shadowAttenuation; + lightColor += ambient.rgb; + return float4(lightColor.rgb, specularOut); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl index c86cd4e890..064fcffa64 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl @@ -20,17 +20,24 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" + +struct VertData +{ + float3 pos : POSITION; + float4 color : COLOR; +}; struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; -ConvexConnectV main( VertexIn_P IN, +ConvexConnectV main( VertData IN, uniform float4x4 modelview, uniform float4x4 objTrans, uniform float4x4 worldViewOnly, @@ -38,9 +45,9 @@ ConvexConnectV main( VertexIn_P IN, { ConvexConnectV OUT; - OUT.hpos = mul( modelview, IN.pos ); - OUT.wsEyeDir = mul( objTrans, IN.pos ) - float4( eyePosWorld, 0.0 ); - OUT.vsEyeDir = mul( worldViewOnly, IN.pos ); + OUT.hpos = mul( modelview, float4(IN.pos,1.0) ); + OUT.wsEyeDir = mul(objTrans, float4(IN.pos, 1.0)) - float4(eyePosWorld, 0.0); + OUT.vsEyeDir = mul(worldViewOnly, float4(IN.pos, 1.0)); OUT.ssPos = OUT.hpos; return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl new file mode 100644 index 0000000000..ad3debbaf4 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + return float4(TORQUE_TEX2D( colorBufferTex, IN.uv0 ).rgb, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl index a2b2b5d7d7..68df09a78c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; - return float4( tex1D( depthViz, depth ).rgb, 1.0 ); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl index 3c31c897e8..2573836592 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl @@ -20,12 +20,11 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(glowBuffer, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D glowBuffer : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return tex2D(glowBuffer, IN.uv0); + return TORQUE_TEX2D(glowBuffer, IN.uv0); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl index 487b4c7405..ca6d8d677c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl @@ -20,15 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); - return float4( lightcolor, 1.0 ); + float4 lightColor = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + return float4( lightColor.rgb, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl index edc25ed037..072f07e00e 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl @@ -20,15 +20,12 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); - -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); + float specular = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ).a; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl index c160045b4a..4f31d2c531 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl @@ -20,13 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 normal = prepassUncondition( prepassTex, IN.uv0 ).xyz; + float3 normal = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).xyz; return float4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl index b1f2bca29f..b548334991 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl @@ -20,15 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + struct MaterialDecoratorConnectV { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -float4 main( MaterialDecoratorConnectV IN, - uniform sampler2D shadowMap : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); + +float4 main( MaterialDecoratorConnectV IN ) : TORQUE_TARGET0 { - float depth = saturate( tex2D( shadowMap, IN.uv0 ).r ); - return float4( tex1D( depthViz, depth ).rgb, 1 ); + float depth = saturate( TORQUE_TEX2D( shadowMap, IN.uv0 ).r ); + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl new file mode 100644 index 0000000000..eba38a8799 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(matinfoTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float specular = TORQUE_TEX2D( matinfoTex, IN.uv0 ).b; + return float4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl new file mode 100644 index 0000000000..cefebe8c70 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( Conn IN ) +{ + Fragout OUT; + + // Clear Prepass Buffer ( Normals/Depth ); + OUT.col = float4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT.col1 = float4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT.col2 = float4(0.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl new file mode 100644 index 0000000000..20ba4d5097 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Appdata +{ + float3 pos : POSITION; + float4 color : COLOR; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = float4(In.pos,1.0); + return Out; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl new file mode 100644 index 0000000000..d91d2eb38a --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModel.hlsl" + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( ) +{ + Fragout OUT; + + OUT.col = float4(0.0, 0.0, 0.0, 0.0); + OUT.col1 = float4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + OUT.col2 = float4(1.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl new file mode 100644 index 0000000000..c710656f87 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../shaderModelAutoGen.hlsl" +#include "../../postfx/postFx.hlsl" +#include "shaders/common/torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,1); +TORQUE_UNIFORM_SAMPLER2D(matInfoTex,2); +TORQUE_UNIFORM_SAMPLER2D(prepassTex,3); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float4 lightBuffer = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + float4 colorBuffer = TORQUE_TEX2D( colorBufferTex, IN.uv0 ); + float4 matInfo = TORQUE_TEX2D( matInfoTex, IN.uv0 ); + float specular = saturate(lightBuffer.a); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + + if (depth>0.9999) + return float4(0,0,0,0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= float4(lightBuffer.rgb, 1.0); + colorBuffer += float4(specular, specular, specular, 1.0); + + return hdrEncode( float4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl index 567dd11ce2..543e216772 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl @@ -19,10 +19,11 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" struct FarFrustumQuadConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; @@ -30,6 +31,7 @@ struct FarFrustumQuadConnectV struct FarFrustumQuadConnectP { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl index 08cf612850..0167d901a0 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" #include "farFrustumQuad.hlsl" @@ -36,8 +36,8 @@ FarFrustumQuadConnectV main( VertexIn_PNTT IN, // Interpolators will generate eye rays the // from far-frustum corners. - OUT.wsEyeRay = IN.tangent.xyz; - OUT.vsEyeRay = IN.normal.xyz; + OUT.wsEyeRay = IN.tangent; + OUT.vsEyeRay = IN.normal; return OUT; } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl new file mode 100644 index 0000000000..20dbf2de64 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D colorBufferTex; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = vec4(texture( colorBufferTex, uv0 ).rgb, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl index 7c17540975..eb3d6f7612 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; uniform sampler1D depthViz; out vec4 OUT_col; void main() { - float depth = prepassUncondition( prepassBuffer, uv0 ).w; + float depth = prepassUncondition( prepassTex, uv0 ).w; OUT_col = vec4( texture( depthViz, depth ).rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl index 05645e1932..501e261cad 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); - OUT_col = vec4( lightcolor, 1.0 ); + vec4 lightColor = texture( lightPrePassTex, uv0 ); + OUT_col = vec4( lightColor.rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl index 7e3e41ee98..c21c9b60f5 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); + float specular = texture( lightPrePassTex, uv0 ).a; OUT_col = vec4( specular, specular, specular, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl index dfc611e886..84ea4d3fb1 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl @@ -24,12 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; out vec4 OUT_col; void main() { - vec3 normal = prepassUncondition( prepassBuffer, uv0 ).xyz; + vec3 normal = prepassUncondition( prepassTex, uv0 ).xyz; OUT_col = vec4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl new file mode 100644 index 0000000000..fd054626ed --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" + +uniform sampler2D matinfoTex; + +out vec4 OUT_FragColor0; + +void main() +{ + float specular = texture( matinfoTex, uv0 ).a; + OUT_FragColor0 = vec4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl new file mode 100644 index 0000000000..39dc0dc9fd --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +out vec4 OUT_col; +out vec4 OUT_col1; +out vec4 OUT_col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + // Clear Prepass Buffer ( Normals/Depth ); + OUT_col = vec4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT_col1 = vec4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT_col2 = vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl new file mode 100644 index 0000000000..85c5530895 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +layout (location = 0) out vec4 col; +layout (location = 1) out vec4 col1; +layout (location = 2) out vec4 col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + col = vec4(0.0, 0.0, 0.0, 0.0); + col1 = vec4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + col2 = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl new file mode 100644 index 0000000000..8af37ef0cc --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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 "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postFx/gl/postFX.glsl" +#include "../../../gl/torque.glsl" + +uniform sampler2D colorBufferTex; +uniform sampler2D lightPrePassTex; +uniform sampler2D matInfoTex; +uniform sampler2D prepassTex; + +out vec4 OUT_col; + +void main() +{ + float depth = prepassUncondition( prepassTex, uv0 ).w; + if (depth>0.9999) + { + OUT_col = vec4(0.0); + return; + } + vec4 lightBuffer = texture( lightPrePassTex, uv0 ); + vec4 colorBuffer = texture( colorBufferTex, uv0 ); + vec4 matInfo = texture( matInfoTex, uv0 ); + float specular = clamp(lightBuffer.a,0.0,1.0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= vec4(lightBuffer.rgb, 1.0); + colorBuffer += vec4(specular, specular, specular, 1.0); + + OUT_col = hdrEncode( vec4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 2c8e43736b..8fe127e041 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -28,10 +28,12 @@ #include "../../../gl/lighting.glsl" #include "../../shadowMap/shadowMapIO_GLSL.h" #include "softShadow.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #ifdef USE_COOKIE_TEX @@ -107,8 +109,13 @@ uniform sampler2D prePassBuffer; uniform samplerCube shadowMap; #else uniform sampler2D shadowMap; + uniform sampler2D dynamicShadowMap; #endif +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -119,6 +126,7 @@ uniform vec2 lightAttenuation; uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat3 viewToLightProj; +uniform mat3 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -130,6 +138,26 @@ void main() vec3 ssPos = ssPos.xyz / ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + + vec4 colorSample = texture( colorBuffer, uvScene ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -175,7 +203,7 @@ void main() vec2 shadowCoord = decodeShadowCoord( tMul( viewToLightProj, -lightVec ) ).xy; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -183,6 +211,16 @@ void main() nDotL, lightParams.y ); + vec2 dynamicShadowCoord = decodeShadowCoord( tMul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); #endif #endif // !NO_SHADOW @@ -231,5 +269,5 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index 91bc5915ab..c6ffa02a0e 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -27,14 +27,17 @@ #include "shadergen:/autogenConditioners.h" #include "softShadow.glsl" #include "../../../gl/lighting.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #define IN_wsEyeDir wsEyeDir #define IN_ssPos ssPos #define IN_vsEyeDir vsEyeDir +#define IN_color color #ifdef USE_COOKIE_TEX @@ -45,6 +48,11 @@ uniform sampler2D cookieMap; uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; + +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec4 rtParams0; @@ -59,6 +67,7 @@ uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat4 viewToLightProj; +uniform mat4 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -70,7 +79,27 @@ void main() // Compute scene UV vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + vec4 colorSample = texture( colorBuffer, uvScene ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -102,6 +131,10 @@ void main() vec2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + vec4 dynpxlPosLightProj = tMul( dynamicViewToLightProj, vec4( viewSpacePos, 1 ) ); + vec2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; #ifdef NO_SHADOW float shadowed = 1.0; @@ -111,7 +144,7 @@ void main() // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -119,6 +152,14 @@ void main() nDotL, lightParams.y ); + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW vec3 lightcol = lightColor.rgb; @@ -165,5 +206,5 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index eab364cd5b..15e0bf4771 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -34,81 +34,81 @@ in vec2 uv0; in vec3 wsEyeRay; in vec3 vsEyeRay; -uniform sampler2D ShadowMap ; +uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; -uniform vec4 rtParams2; +uniform vec4 rtParams3; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; uniform vec4 lightAmbient; uniform vec3 eyePosWorld; -uniform mat4x4 worldToLightProj; -uniform vec4 scaleX; -uniform vec4 scaleY; -uniform vec4 offsetX; -uniform vec4 offsetY; +uniform mat4x4 eyeMat; uniform vec4 atlasXOffset; uniform vec4 atlasYOffset; uniform vec2 atlasScale; uniform vec4 zNearFarInvNearFar; uniform vec4 lightMapParams; uniform vec2 fadeStartLength; -uniform vec4 farPlaneScalePSSM; uniform vec4 overDarkPSSM; uniform float shadowSoftness; - -out vec4 OUT_col; - -void main() -{ - // Sample/unpack the normal/z data - vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); - vec3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - vec3 debugColor = vec3(0); - #endif - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; +//static shadowMap +uniform mat4x4 worldToLightProj; +uniform vec4 scaleX; +uniform vec4 scaleY; +uniform vec4 offsetX; +uniform vec4 offsetY; +uniform vec4 farPlaneScalePSSM; - #ifdef PSSM_DEBUG_RENDER - debugColor = vec3(1.0); - #endif +//dynamic shadowMap +uniform mat4x4 dynamicWorldToLightProj; +uniform vec4 dynamicScaleX; +uniform vec4 dynamicScaleY; +uniform vec4 dynamicOffsetX; +uniform vec4 dynamicOffsetY; +uniform vec4 dynamicFarPlaneScalePSSM; - #else +vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, + vec2 _texCoord, + mat4 _worldToLightProj, + vec4 _worldPos, + vec4 _scaleX, vec4 _scaleY, + vec4 _offsetX, vec4 _offsetY, + vec4 _farPlaneScalePSSM, + vec4 _atlasXOffset, vec4 _atlasYOffset, + vec2 _atlasScale, + float _shadowSoftness, + float _dotNL , + vec4 _overDarkPSSM +) +{ // Compute shadow map coordinate - vec4 pxlPosLightProj = tMul(worldToLightProj, worldPos); + vec4 pxlPosLightProj = tMul(_worldToLightProj, _worldPos); vec2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; - // Distance to light, in shadowmap space + // Distance to light, in shadowMap space float distToLight = pxlPosLightProj.z / pxlPosLightProj.w; - // Figure out which split to sample from. Basically, we compute the shadowmap sample coord + // Figure out which split to sample from. Basically, we compute the shadowMap sample coord // for all of the splits and then check if its valid. vec4 shadowCoordX = vec4( baseShadowCoord.x ); vec4 shadowCoordY = vec4( baseShadowCoord.y ); vec4 farPlaneDists = vec4( distToLight ); - shadowCoordX *= scaleX; - shadowCoordY *= scaleY; - shadowCoordX += offsetX; - shadowCoordY += offsetY; - farPlaneDists *= farPlaneScalePSSM; + shadowCoordX *= _scaleX; + shadowCoordY *= _scaleY; + shadowCoordX += _offsetX; + shadowCoordY += _offsetY; + farPlaneDists *= _farPlaneScalePSSM; // If the shadow sample is within -1..1 and the distance // to the light for this pixel is less than the far plane @@ -132,6 +132,11 @@ void main() else finalMask = vec4(0, 0, 0, 1); + vec3 debugColor = vec3(0); + + #ifdef NO_SHADOW + debugColor = vec3(1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -144,50 +149,139 @@ void main() debugColor += vec3( 1, 1, 0 ); #endif - // Here we know what split we're sampling from, so recompute the texcoord location + // Here we know what split we're sampling from, so recompute the _texCoord location // Yes, we could just use the result from above, but doing it this way actually saves // shader instructions. vec2 finalScale; - finalScale.x = dot(finalMask, scaleX); - finalScale.y = dot(finalMask, scaleY); + finalScale.x = dot(finalMask, _scaleX); + finalScale.y = dot(finalMask, _scaleY); vec2 finalOffset; - finalOffset.x = dot(finalMask, offsetX); - finalOffset.y = dot(finalMask, offsetY); + finalOffset.x = dot(finalMask, _offsetX); + finalOffset.y = dot(finalMask, _offsetY); vec2 shadowCoord; shadowCoord = baseShadowCoord * finalScale; shadowCoord += finalOffset; - // Convert to texcoord space + // Convert to _texCoord space shadowCoord = 0.5 * shadowCoord + vec2(0.5, 0.5); shadowCoord.y = 1.0f - shadowCoord.y; // Move around inside of atlas vec2 aOffset; - aOffset.x = dot(finalMask, atlasXOffset); - aOffset.y = dot(finalMask, atlasYOffset); + aOffset.x = dot(finalMask, _atlasXOffset); + aOffset.y = dot(finalMask, _atlasYOffset); - shadowCoord *= atlasScale; + shadowCoord *= _atlasScale; shadowCoord += aOffset; // Each split has a different far plane, take this into account. - float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); + float farPlaneScale = dot( _farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; - float shadowed = softShadow_filter( ShadowMap, - uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); - + return vec4(debugColor, + softShadow_filter( _sourceshadowMap, + _texCoord, + shadowCoord, + farPlaneScale * _shadowSoftness, + distToLight, + _dotNL, + dot( finalMask, _overDarkPSSM ) ) ); +} + +out vec4 OUT_col; +void main() +{ + // Emissive. + float4 matInfo = texture( matInfoBuffer, uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(1.0, 1.0, 1.0, 0.0); + return; + } + + vec4 colorSample = texture( colorBuffer, uv0 ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + + // Sample/unpack the normal/z data + vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); + vec3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + vec3 debugColor = vec3(0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = vec3(1.0); + #endif + + #else + + vec4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = mix( shadowed, 1.0, saturate( fadeOutAmt ) ); - + + static_shadowed = mix( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = mix( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); + #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) debugColor = vec3(1.0); @@ -221,14 +315,13 @@ void main() // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif #ifdef PSSM_DEBUG_RENDER lightColorOut = debugColor; #endif - - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); - + + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl index bc47849804..7ff5d50d27 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl @@ -20,35 +20,36 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" - #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -float4 main( ConvexConnectP IN, - uniform sampler2D prePassBuffer : register(S0), - - uniform float4 lightPosition, - uniform float4 lightColor, - uniform float lightRange, - - uniform float4 vsFarPlane, - uniform float4 rtParams0 ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +uniform float4 lightPosition; +uniform float4 lightColor; +uniform float lightRange; +uniform float4 vsFarPlane; +uniform float4 rtParams0; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos(ssPos, rtParams0); // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition(prePassBuffer, uvScene); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION(prePassBuffer, uvScene); float3 normal = prepassSample.rgb; float depth = prepassSample.a; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl index f5dc9e4442..faa2ec1155 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl @@ -20,24 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -ConvexConnectV main( VertexIn_P IN, - uniform float4x4 viewProj, - uniform float4x4 view, - uniform float3 particlePosWorld, - uniform float lightRange ) +uniform float4x4 viewProj; +uniform float4x4 view; +uniform float3 particlePosWorld; +uniform float lightRange; + +ConvexConnectV main( VertexIn_P IN ) { ConvexConnectV OUT; - - float4 vPosWorld = IN.pos + float4(particlePosWorld, 0.0) + float4(IN.pos.xyz, 0.0) * lightRange; + float4 pos = float4(IN.pos, 0.0); + float4 vPosWorld = pos + float4(particlePosWorld, 0.0) + pos * lightRange; OUT.hpos = mul(viewProj, vPosWorld); OUT.vsEyeDir = mul(view, vPosWorld); OUT.ssPos = OUT.hpos; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl index ff1f3d437e..a8c0ea1059 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -20,17 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; @@ -40,7 +41,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S2); +TORQUE_UNIFORM_SAMPLERCUBE(cookieMap, 3); #endif @@ -52,9 +53,9 @@ uniform samplerCUBE cookieMap : register(S2); return shadowCoord; } - float4 shadowSample( samplerCUBE shadowMap, float3 shadowCoord ) + float4 shadowSample( TORQUE_SAMPLERCUBE(shadowMap), float3 shadowCoord ) { - return texCUBE( shadowMap, shadowCoord ); + return TORQUE_TEXCUBE( shadowMap, shadowCoord ); } #else @@ -105,38 +106,62 @@ uniform samplerCUBE cookieMap : register(S2); #endif +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +#ifdef SHADOW_CUBE +TORQUE_UNIFORM_SAMPLERCUBE(shadowMap, 1); +#else +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); +#endif -float4 main( ConvexConnectP IN, +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); - uniform sampler2D prePassBuffer : register(S0), +uniform float4 rtParams0; +uniform float4 lightColor; - #ifdef SHADOW_CUBE - uniform samplerCUBE shadowMap : register(S1), - #else - uniform sampler2D shadowMap : register(S1), - #endif +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float4 rtParams0, +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4 lightParams; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float4 lightMapParams, +uniform float lightRange; +uniform float shadowSoftness; +uniform float2 lightAttenuation; - uniform float4 vsFarPlane, - uniform float3x3 viewToLightProj, +uniform float3x3 viewToLightProj; +uniform float3x3 dynamicViewToLightProj; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = float3(0.772549, 0.337255, 0.262745); + else + subsurface = float3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -173,14 +198,14 @@ float4 main( ConvexConnectP IN, #ifdef SHADOW_CUBE // TODO: We need to fix shadow cube to handle soft shadows! - float occ = texCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; + float occ = TORQUE_TEXCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; float shadowed = saturate( exp( lightParams.y * ( occ - distToLight ) ) ); #else + // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -188,6 +213,18 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); + // Dynamic + float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); + #endif #endif // !NO_SHADOW @@ -196,7 +233,7 @@ float4 main( ConvexConnectP IN, #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = texCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); + float4 cookie = TORQUE_TEXCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -236,5 +273,5 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl index 0e8ecabaae..0faf3e1fb7 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" #if defined( SOFTSHADOW ) && defined( SOFTSHADOW_HIGH_QUALITY ) @@ -69,10 +70,9 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S3); +TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4); - -float softShadow_sampleTaps( sampler2D shadowMap, +float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1), float2 sinCos, float2 shadowPos, float filterRadius, @@ -88,7 +88,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, { tap.x = ( sNonUniformTaps[t].x * sinCos.y - sNonUniformTaps[t].y * sinCos.x ) * filterRadius; tap.y = ( sNonUniformTaps[t].y * sinCos.y + sNonUniformTaps[t].x * sinCos.x ) * filterRadius; - float occluder = tex2Dlod( shadowMap, float4( shadowPos + tap, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD( shadowMap1, float4( shadowPos + tap, 0, 0 ) ).r; float esm = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); shadow += esm / float( endTap - startTap ); @@ -98,7 +98,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, } -float softShadow_filter( sampler2D shadowMap, +float softShadow_filter( TORQUE_SAMPLER2D(shadowMap), float2 vpos, float2 shadowPos, float filterRadius, @@ -111,16 +111,15 @@ float softShadow_filter( sampler2D shadowMap, // If softshadow is undefined then we skip any complex // filtering... just do a single sample ESM. - float occluder = tex2Dlod( shadowMap, float4( shadowPos, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD(shadowMap, float4(shadowPos, 0, 0)).r; float shadow = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); #else - // Lookup the random rotation for this screen pixel. - float2 sinCos = ( tex2Dlod( gTapRotationTex, float4( vpos * 16, 0, 0 ) ).rg - 0.5 ) * 2; + float2 sinCos = ( TORQUE_TEX2DLOD(gTapRotationTex, float4(vpos * 16, 0, 0)).rg - 0.5) * 2; // Do the prediction taps first. - float shadow = softShadow_sampleTaps( shadowMap, + float shadow = softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, @@ -137,7 +136,7 @@ float softShadow_filter( sampler2D shadowMap, // in a partially shadowed area. if ( shadow * ( 1.0 - shadow ) * max( dotNL, 0 ) > 0.06 ) { - shadow += softShadow_sampleTaps( shadowMap, + shadow += softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, diff --git a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl index 1f1c8e1408..5040b15e21 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -20,58 +20,86 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap,2); + #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(cookieMap, 3); #endif +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); -float4 main( ConvexConnectP IN, +uniform float4 rtParams0; - uniform sampler2D prePassBuffer : register(S0), - uniform sampler2D shadowMap : register(S1), +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float4 rtParams0, +uniform float4 lightColor; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float3 lightDirection, - uniform float4 lightSpotParams, - uniform float4 lightMapParams, +uniform float lightRange; +uniform float3 lightDirection; - uniform float4 vsFarPlane, - uniform float4x4 viewToLightProj, +uniform float4 lightSpotParams; +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4x4 viewToLightProj; +uniform float4 lightParams; +uniform float4x4 dynamicViewToLightProj; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +uniform float2 lightAttenuation; +uniform float shadowSoftness; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = float3(0.772549, 0.337255, 0.262745); + else + subsurface = float3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -101,6 +129,11 @@ float4 main( ConvexConnectP IN, float2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + float4 dynpxlPosLightProj = mul( dynamicViewToLightProj, float4( viewSpacePos, 1 ) ); + float2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; + #ifdef NO_SHADOW float shadowed = 1.0; @@ -110,21 +143,29 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, distToLight, nDotL, lightParams.y ); - + + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW float3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = tex2D( cookieMap, shadowCoord ); + float4 cookie = TORQUE_TEX2D( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -164,5 +205,5 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 266cc64384..9562279096 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "../../torque.hlsl" @@ -29,69 +30,70 @@ #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - -uniform sampler2D ShadowMap : register(S1); +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S2); -uniform float4 rtParams2; +TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3); +uniform float4 rtParams3; #endif - - -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - - uniform float3 eyePosWorld, - - uniform float4x4 worldToLightProj, - - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - - uniform float2 fadeStartLength, - uniform float4 farPlaneScalePSSM, - uniform float4 overDarkPSSM, - uniform float shadowSoftness ) : COLOR0 +//register 4? +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); + +uniform float lightBrightness; +uniform float3 lightDirection; + +uniform float4 lightColor; +uniform float4 lightAmbient; + +uniform float shadowSoftness; +uniform float3 eyePosWorld; + +uniform float4 atlasXOffset; +uniform float4 atlasYOffset; +uniform float4 zNearFarInvNearFar; +uniform float4 lightMapParams; +uniform float4 farPlaneScalePSSM; +uniform float4 overDarkPSSM; + +uniform float2 fadeStartLength; +uniform float2 atlasScale; + +uniform float4x4 eyeMat; + +// Static Shadows +uniform float4x4 worldToLightProj; +uniform float4 scaleX; +uniform float4 scaleY; +uniform float4 offsetX; +uniform float4 offsetY; +// Dynamic Shadows +uniform float4x4 dynamicWorldToLightProj; +uniform float4 dynamicScaleX; +uniform float4 dynamicScaleY; +uniform float4 dynamicOffsetX; +uniform float4 dynamicOffsetY; +uniform float4 dynamicFarPlaneScalePSSM; + +float4 AL_VectorLightShadowCast( TORQUE_SAMPLER2D(sourceShadowMap), + float2 texCoord, + float4x4 worldToLightProj, + float4 worldPos, + float4 scaleX, + float4 scaleY, + float4 offsetX, + float4 offsetY, + float4 farPlaneScalePSSM, + float4 atlasXOffset, + float4 atlasYOffset, + float2 atlasScale, + float shadowSoftness, + float dotNL , + float4 overDarkPSSM) { - // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); - float3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - float3 debugColor = 0; - #endif - - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; - - #ifdef PSSM_DEBUG_RENDER - debugColor = 1.0; - #endif - - #else - // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); float2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; @@ -132,6 +134,11 @@ float4 main( FarFrustumQuadConnectP IN, else finalMask = float4(0, 0, 0, 1); + float3 debugColor = float3(0,0,0); + + #ifdef NO_SHADOW + debugColor = float3(1.0,1.0,1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -174,19 +181,106 @@ float4 main( FarFrustumQuadConnectP IN, // Each split has a different far plane, take this into account. float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; + + return float4(debugColor, + softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(sourceShadowMap), + texCoord, + shadowCoord, + farPlaneScale * shadowSoftness, + distToLight, + dotNL, + dot( finalMask, overDarkPSSM ) ) ); +}; + +float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 +{ + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, IN.uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(1.0, 1.0, 1.0, 0.0); + } + + float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = float3(0.772549, 0.337255, 0.262745); + else + subsurface = float3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); + float3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + float3 debugColor = float3(0,0,0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = float3(1.0,1.0,1.0); + #endif + + #else + + float4 static_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(shadowMap), + IN.uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), + IN.uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); - float shadowed = softShadow_filter( ShadowMap, - IN.uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif // Fade out the shadow at the end of the range. float4 zDist = (zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = lerp( shadowed, 1.0, saturate( fadeOutAmt ) ); + + static_shadowed = lerp( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = lerp( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) @@ -202,6 +296,7 @@ float4 main( FarFrustumQuadConnectP IN, float Sat_NL_Att = saturate( dotNL * shadowed ) * lightBrightness; float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float4 addToResult = (lightAmbient * (1 - ambientCameraFactor)) + ( lightAmbient * ambientCameraFactor * saturate(dot(normalize(-IN.vsEyeRay), normal)) ); // TODO: This needs to be removed when lightmapping is disabled @@ -221,7 +316,7 @@ float4 main( FarFrustumQuadConnectP IN, // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -229,5 +324,5 @@ float4 main( FarFrustumQuadConnectP IN, lightColorOut = debugColor; #endif - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl index f161fb5d39..b56aade8d4 100644 --- a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl @@ -22,11 +22,11 @@ #include "shaders/common/postFx/postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,15 +35,15 @@ static float weight[3] = { 0.2270270270, 0.3162162162, 0.0702702703 }; uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { - float4 OUT = tex2D( diffuseMap, IN.uv ) * weight[0]; + float4 OUT = TORQUE_TEX2D( diffuseMap, IN.uv ) * weight[0]; for ( int i=1; i < 3; i++ ) { float2 sample = (BLUR_DIR * offset[i]) * oneOverTargetSize; - OUT += tex2D( diffuseMap, IN.uv + sample ) * weight[i]; - OUT += tex2D( diffuseMap, IN.uv - sample ) * weight[i]; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv + sample ) * weight[i]; + OUT += TORQUE_TEX2D(diffuseMap, IN.uv - sample) * weight[i]; } return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl index bf6a362492..c89af7357e 100644 --- a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl @@ -27,7 +27,7 @@ float4 rtParams0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl index dd691de23c..a187c3c63e 100644 --- a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl @@ -23,10 +23,12 @@ //***************************************************************************** // Box Filter //***************************************************************************** +#include "../ShaderModel.hlsl" struct ConnectData { - float2 tex0 : TEXCOORD0; + float4 hpos : TORQUE_POSITION; + float2 tex0 : TEXCOORD0; }; // If not defined from ShaderData then define @@ -40,12 +42,12 @@ float log_conv ( float x0, float X, float y0, float Y ) return (X + log(x0 + (y0 * exp(Y - X)))); } -float4 main( ConnectData IN, - uniform sampler2D diffuseMap0 : register(S0), - uniform float texSize : register(C0), - uniform float2 blurDimension : register(C2), - uniform float2 blurBoundaries : register(C3) - ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(diffuseMap0, 0); +uniform float texSize : register(C0); +uniform float2 blurDimension : register(C2); +uniform float2 blurBoundaries : register(C3); + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // 5x5 if (IN.tex0.x <= blurBoundaries.x) @@ -56,8 +58,8 @@ float4 main( ConnectData IN, float2 texCoord = IN.tex0; - float accum = log_conv(0.3125, tex2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); - accum = log_conv(1, accum, 0.3125, tex2D(diffuseMap0, texCoord + sampleOffset)); + float accum = log_conv(0.3125, TORQUE_TEX2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); + accum = log_conv(1, accum, 0.3125, TORQUE_TEX2D(diffuseMap0, texCoord + sampleOffset)); return accum; } else { @@ -73,7 +75,7 @@ float4 main( ConnectData IN, return accum; } else { - return tex2D(diffuseMap0, IN.tex0); + return TORQUE_TEX2D(diffuseMap0, IN.tex0); } } } diff --git a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl index 75d9af0000..3679e41bb4 100644 --- a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl @@ -26,15 +26,18 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "../ShaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float4 position : POSITION; + float3 position : POSITION; + float2 texCoord : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 tex0 : TEXCOORD0; }; @@ -47,7 +50,7 @@ ConnectData main( VertData IN, { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); OUT.tex0 = IN.texCoord; return OUT; diff --git a/Templates/Full/game/shaders/common/particleCompositeP.hlsl b/Templates/Full/game/shaders/common/particleCompositeP.hlsl index 35c2cb4c54..6e26ddbdbf 100644 --- a/Templates/Full/game/shaders/common/particleCompositeP.hlsl +++ b/Templates/Full/game/shaders/common/particleCompositeP.hlsl @@ -20,22 +20,30 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- #include "torque.hlsl" +#include "shaderModel.hlsl" -uniform sampler2D colorSource : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorSource, 0); uniform float4 offscreenTargetParams; #ifdef TORQUE_LINEAR_DEPTH #define REJECT_EDGES -uniform sampler2D edgeSource : register(S1); +TORQUE_UNIFORM_SAMPLER2D(edgeSource, 1); uniform float4 edgeTargetParams; #endif +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float4 offscreenPos : TEXCOORD0; + float4 backbufferPos : TEXCOORD1; +}; -float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) : COLOR + +float4 main(Conn IN) : TORQUE_TARGET0 { // Off-screen particle source screenspace position in XY // Back-buffer screenspace position in ZW - float4 ssPos = float4(offscreenPos.xy / offscreenPos.w, backbufferPos.xy / backbufferPos.w); + float4 ssPos = float4(IN.offscreenPos.xy / IN.offscreenPos.w, IN.backbufferPos.xy / IN.backbufferPos.w); float4 uvScene = ( ssPos + 1.0 ) / 2.0; uvScene.yw = 1.0 - uvScene.yw; @@ -44,10 +52,10 @@ float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) #ifdef REJECT_EDGES // Cut out particles along the edges, this will create the stencil mask uvScene.zw = viewportCoordToRenderTarget(uvScene.zw, edgeTargetParams); - float edge = tex2D( edgeSource, uvScene.zw ).r; + float edge = TORQUE_TEX2D( edgeSource, uvScene.zw ).r; clip( -edge ); #endif // Sample offscreen target and return - return tex2D( colorSource, uvScene.xy ); + return TORQUE_TEX2D( colorSource, uvScene.xy ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/particleCompositeV.hlsl b/Templates/Full/game/shaders/common/particleCompositeV.hlsl index 87fac0d940..c4c51204a6 100644 --- a/Templates/Full/game/shaders/common/particleCompositeV.hlsl +++ b/Templates/Full/game/shaders/common/particleCompositeV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "shaderModel.hlsl" -struct VertOut +struct Vertex { - float4 hpos : POSITION; + float3 pos : POSITION; + float4 uvCoord : COLOR0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; float4 offscreenPos : TEXCOORD0; float4 backbufferPos : TEXCOORD1; }; uniform float4 screenRect; // point, extent -VertOut main( float4 uvCoord : COLOR ) +Conn main(Vertex IN) { - VertOut OUT; + Conn OUT; - OUT.hpos = float4(uvCoord.xy, 1.0, 1.0); + OUT.hpos = float4(IN.uvCoord.xy, 1.0, 1.0); OUT.hpos.xy *= screenRect.zw; OUT.hpos.xy += screenRect.xy; diff --git a/Templates/Full/game/shaders/common/particlesP.hlsl b/Templates/Full/game/shaders/common/particlesP.hlsl index 80e3c71054..37439c59a1 100644 --- a/Templates/Full/game/shaders/common/particlesP.hlsl +++ b/Templates/Full/game/shaders/common/particlesP.hlsl @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "torque.hlsl" - +#include "shaderModel.hlsl" // With advanced lighting we get soft particles. #ifdef TORQUE_LINEAR_DEPTH #define SOFTPARTICLES @@ -29,11 +29,11 @@ #ifdef SOFTPARTICLES - #include "shadergen:/autogenConditioners.h" + #include "shaderModelAutoGen.hlsl" uniform float oneOverSoftness; uniform float oneOverFar; - uniform sampler2D prepassTex : register(S1); + TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); //uniform float3 vEye; uniform float4 prePassTargetParams; #endif @@ -42,14 +42,14 @@ struct Conn { + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; - float4 pos : TEXCOORD2; + float4 pos : TEXCOORD2; }; -uniform sampler2D diffuseMap : register(S0); - -uniform sampler2D paraboloidLightMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(paraboloidLightMap, 2); float4 lmSample( float3 nrm ) { @@ -69,14 +69,14 @@ float4 lmSample( float3 nrm ) // Atlasing front and back maps, so scale lmCoord.x *= 0.5; - return tex2D(paraboloidLightMap, lmCoord); + return TORQUE_TEX2D(paraboloidLightMap, lmCoord); } uniform float alphaFactor; uniform float alphaScale; -float4 main( Conn IN ) : COLOR +float4 main( Conn IN ) : TORQUE_TARGET0 { float softBlend = 1; @@ -84,7 +84,7 @@ float4 main( Conn IN ) : COLOR float2 tc = IN.pos.xy * float2(1.0, -1.0) / IN.pos.w; tc = viewportCoordToRenderTarget(saturate( ( tc + 1.0 ) * 0.5 ), prePassTargetParams); - float sceneDepth = prepassUncondition( prepassTex, tc ).w; + float sceneDepth = TORQUE_PREPASS_UNCONDITION(prepassTex, tc).w; float depth = IN.pos.w * oneOverFar; float diff = sceneDepth - depth; #ifdef CLIP_Z @@ -96,7 +96,7 @@ float4 main( Conn IN ) : COLOR softBlend = saturate( diff * oneOverSoftness ); #endif - float4 diffuse = tex2D( diffuseMap, IN.uv0 ); + float4 diffuse = TORQUE_TEX2D( diffuseMap, IN.uv0 ); //return float4( lmSample(float3(0, 0, -1)).rgb, IN.color.a * diffuse.a * softBlend * alphaScale); diff --git a/Templates/Full/game/shaders/common/particlesV.hlsl b/Templates/Full/game/shaders/common/particlesV.hlsl index f096042372..dbeff0cc2e 100644 --- a/Templates/Full/game/shaders/common/particlesV.hlsl +++ b/Templates/Full/game/shaders/common/particlesV.hlsl @@ -20,16 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct Vertex { - float4 pos : POSITION; + float3 pos : POSITION; float4 color : COLOR0; float2 uv0 : TEXCOORD0; }; struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; float4 pos : TEXCOORD2; @@ -43,8 +45,8 @@ Conn main( Vertex In ) { Conn Out; - Out.hpos = mul( modelViewProj, In.pos ); - Out.pos = mul( fsModelViewProj, In.pos ); + Out.hpos = mul( modelViewProj, float4(In.pos,1.0) ); + Out.pos = mul(fsModelViewProj, float4(In.pos, 1.0) ); Out.color = In.color; Out.uv0 = In.uv0; diff --git a/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl b/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl index a5057db504..d18331fb69 100644 --- a/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl @@ -23,18 +23,26 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float4 texCoord : TEXCOORD0; - float2 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); +TORQUE_UNIFORM_SAMPLER2D(bumpMap, 2); + //----------------------------------------------------------------------------- // Fade edges of axis for texcoord passed in @@ -54,15 +62,11 @@ float fadeAxis( float val ) //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D refractMap : register(S1), - uniform sampler2D texMap : register(S0), - uniform sampler2D bumpMap : register(S2) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float3 bumpNorm = tex2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; + float3 bumpNorm = TORQUE_TEX2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; float2 offset = float2( bumpNorm.x, bumpNorm.y ); float4 texIndex = IN.texCoord; @@ -74,8 +78,8 @@ Fragout main( ConnectData IN, const float distortion = 0.2; texIndex.xy += offset * distortion * fadeVal; - float4 reflectColor = tex2Dproj( refractMap, texIndex ); - float4 diffuseColor = tex2D( texMap, IN.tex2 ); + float4 reflectColor = TORQUE_TEX2DPROJ( refractMap, texIndex ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.tex2 ); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl b/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl index 108f918cea..d45adb5744 100644 --- a/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl @@ -22,36 +22,37 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { + float3 position : POSITION; + float3 normal : NORMAL; float2 texCoord : TEXCOORD0; float2 lmCoord : TEXCOORD1; float3 T : TEXCOORD2; - float3 B : TEXCOORD3; - float3 normal : NORMAL; - float4 position : POSITION; + float3 B : TEXCOORD3; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord : TEXCOORD0; float2 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 modelview ) +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Full/game/shaders/common/planarReflectP.hlsl b/Templates/Full/game/shaders/common/planarReflectP.hlsl index 981cc316d9..43b420544b 100644 --- a/Templates/Full/game/shaders/common/planarReflectP.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectP.hlsl @@ -23,31 +23,34 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D texMap : register(S0), - uniform sampler2D refractMap : register(S1) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 diffuseColor = tex2D( texMap, IN.texCoord ); - float4 reflectColor = tex2Dproj( refractMap, IN.tex2 ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.texCoord ); + float4 reflectColor = TORQUE_TEX2DPROJ(refractMap, IN.tex2); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Full/game/shaders/common/planarReflectV.hlsl b/Templates/Full/game/shaders/common/planarReflectV.hlsl index cd8cb2d96d..1f2ca9d4f1 100644 --- a/Templates/Full/game/shaders/common/planarReflectV.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectV.hlsl @@ -21,7 +21,8 @@ //----------------------------------------------------------------------------- #define IN_HLSL -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures @@ -29,20 +30,20 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; float4 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertexIn_PNTTTB IN, - uniform float4x4 modelview : register(C0) -) +ConnectData main( VertexIn_PNTTTB IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl new file mode 100644 index 0000000000..c3adb3b55b --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +#include "./postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +uniform float strength; + +struct VertToPix +{ + float4 hpos : TORQUE_POSITION; + + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + + float2 uv4 : TEXCOORD4; + float2 uv5 : TEXCOORD5; + float2 uv6 : TEXCOORD6; + float2 uv7 : TEXCOORD7; +}; + +float4 main( VertToPix IN ) : TORQUE_TARGET0 +{ + float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + float4 OUT = 0; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + float3 rgb2lum = float3( 0.30, 0.59, 0.11 ); + OUT.a = dot( OUT.rgb, rgb2lum ); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl index c7635027db..d2f4a058a7 100644 --- a/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -21,25 +21,26 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" +uniform float accumTime; uniform float3 eyePosWorld; uniform float4 rtParams0; uniform float4 waterFogPlane; -uniform float accumTime; + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(causticsTex0, 1); +TORQUE_UNIFORM_SAMPLER2D(causticsTex1, 2); float distanceToPlane(float4 plane, float3 pos) { return (plane.x * pos.x + plane.y * pos.y + plane.z * pos.z) + plane.w; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex :register(S0), - uniform sampler2D causticsTex0 :register(S1), - uniform sampler2D causticsTex1 :register(S2) ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //Sample the pre-pass - float4 prePass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prePass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); //Get depth float depth = prePass.w; @@ -65,12 +66,12 @@ float4 main( PFXVertToPix IN, causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); //Sample caustics texture - float4 caustics = tex2D(causticsTex0, causticsUV0); - caustics *= tex2D(causticsTex1, causticsUV1); + float4 caustics = TORQUE_TEX2D(causticsTex0, causticsUV0); + caustics *= TORQUE_TEX2D(causticsTex1, causticsUV1); //Use normal Z to modulate caustics //float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); - caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + caustics *= saturate(prePass.z) * pow(abs(1-depth), 64) * waterDepth; return caustics; } diff --git a/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl b/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl index 5916e985a9..8fdca72b72 100644 --- a/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl +++ b/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl @@ -26,14 +26,13 @@ #include "./postFx.hlsl" #include "./../torque.hlsl" - -uniform sampler2D backBuffer : register( s0 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); uniform float distCoeff; uniform float cubeDistort; uniform float3 colorDistort; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tex = IN.uv0; @@ -54,7 +53,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 { float x = distort[i] * ( tex.x - 0.5 ) + 0.5; float y = distort[i] * ( tex.y - 0.5 ) + 0.5; - outColor[i] = tex2Dlod( backBuffer, float4(x,y,0,0) )[i]; + outColor[i] = TORQUE_TEX2DLOD( backBuffer, float4(x,y,0,0) )[i]; } return float4( outColor.rgb, 1 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl index bc17a2c04c..2f5835fc24 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl @@ -23,21 +23,22 @@ #include "./../postFx.hlsl" // These are set by the game engine. -uniform sampler2D shrunkSampler : register(S0); // Output of DofDownsample() -uniform sampler2D blurredSampler : register(S1); // Blurred version of the shrunk sampler +TORQUE_UNIFORM_SAMPLER2D(shrunkSampler, 0); // Output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(blurredSampler, 1); // Blurred version of the shrunk sampler + // This is the pixel shader function that calculates the actual // value used for the near circle of confusion. // "texCoords" are 0 at the bottom left pixel and 1 at the top right. -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float3 color; float coc; half4 blurred; half4 shrunk; - shrunk = tex2D( shrunkSampler, IN.uv0 ); - blurred = tex2D( blurredSampler, IN.uv1 ); + shrunk = half4(TORQUE_TEX2D( shrunkSampler, IN.uv0 )); + blurred = half4(TORQUE_TEX2D( blurredSampler, IN.uv1 )); color = shrunk.rgb; //coc = shrunk.a; //coc = blurred.a; diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl index 37e591f256..8c9028654f 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl @@ -20,22 +20,23 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" // These are set by the game engine. // The render target size is one-quarter the scene rendering size. -uniform sampler2D colorSampler : register(S0); -uniform sampler2D depthSampler : register(S1); -uniform float2 dofEqWorld; -uniform float depthOffset; +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(depthSampler, 1); +uniform float2 dofEqWorld; uniform float2 targetSize; +uniform float depthOffset; uniform float maxWorldCoC; //uniform float2 dofEqWeapon; //uniform float2 dofRowDelta; // float2( 0, 0.25 / renderTargetHeight ) struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -44,7 +45,7 @@ struct Pixel float2 tcDepth3 : TEXCOORD5; }; -half4 main( Pixel IN ) : COLOR +half4 main( Pixel IN ) : TORQUE_TARGET0 { //return float4( 1.0, 0.0, 1.0, 1.0 ); @@ -69,57 +70,64 @@ half4 main( Pixel IN ) : COLOR // Use bilinear filtering to average 4 color samples for free. color = 0; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[2] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[2] ).rgb; + color += half3(TORQUE_TEX2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[0]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor0.xy + rowOfs[2]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[2]).rgb); color /= 4; + //declare thse here to save doing it in each loop below + half4 zero4 = half4(0, 0, 0, 0); + coc = zero4; + half4 dofEqWorld4X = half4(dofEqWorld.xxxx); + half4 dofEqWorld4Y = half4(dofEqWorld.yyyy); + half4 maxWorldCoC4 = half4(maxWorldCoC, maxWorldCoC, maxWorldCoC, maxWorldCoC); // Process 4 samples at a time to use vector hardware efficiently. // The CoC will be 1 if the depth is negative, so use "min" to pick - // between "sceneCoc" and "viewCoc". - - for ( int i = 0; i < 4; i++ ) + // between "sceneCoc" and "viewCoc". + [unroll] // coc[i] causes this anyway + for (int i = 0; i < 4; i++) { - depth[0] = prepassUncondition( depthSampler, float4( IN.tcDepth0.xy + rowOfs[i], 0, 0 ) ).w; - depth[1] = prepassUncondition( depthSampler, float4( IN.tcDepth1.xy + rowOfs[i], 0, 0 ) ).w; - depth[2] = prepassUncondition( depthSampler, float4( IN.tcDepth2.xy + rowOfs[i], 0, 0 ) ).w; - depth[3] = prepassUncondition( depthSampler, float4( IN.tcDepth3.xy + rowOfs[i], 0, 0 ) ).w; - coc[i] = clamp( dofEqWorld.x * depth + dofEqWorld.y, 0.0, maxWorldCoC ); - } + depth[0] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth0.xy + rowOfs[i])).w; + depth[1] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth1.xy + rowOfs[i])).w; + depth[2] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth2.xy + rowOfs[i])).w; + depth[3] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth3.xy + rowOfs[i])).w; + + coc = max(coc, clamp(dofEqWorld4X * half4(depth)+dofEqWorld4Y, zero4, maxWorldCoC4)); + } /* - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = curCoc; - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl index da2a79fb45..0b3ec01e23 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl @@ -25,14 +25,14 @@ struct Vert { - float4 pos : POSITION; + float3 pos : POSITION; float2 tc : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -47,7 +47,7 @@ uniform float2 oneOverTargetSize; Pixel main( Vert IN ) { Pixel OUT; - OUT.position = IN.pos; + OUT.position = float4(IN.pos,1.0); float2 uv = viewportCoordToRenderTarget( IN.tc, rtParams0 ); //OUT.position = mul( IN.pos, modelView ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl index 36622495c5..cb7342d409 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl @@ -20,13 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "./../postFx.hlsl" -uniform sampler2D colorSampler : register(S0); // Original source image -uniform sampler2D smallBlurSampler : register(S1); // Output of SmallBlurPS() -uniform sampler2D largeBlurSampler : register(S2); // Blurred output of DofDownsample() -uniform sampler2D depthSampler : register(S3); // +TORQUE_UNIFORM_SAMPLER2D(colorSampler,0); // Original source image +TORQUE_UNIFORM_SAMPLER2D(smallBlurSampler,1); // Output of SmallBlurPS() +TORQUE_UNIFORM_SAMPLER2D(largeBlurSampler,2); // Blurred output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(depthSampler,3); + uniform float2 oneOverTargetSize; uniform float4 dofLerpScale; uniform float4 dofLerpBias; @@ -40,9 +41,9 @@ uniform float maxFarCoC; //static float4 dofLerpBias = float4( 1.0, (1.0 - d2) / d1, 1.0 / d2, (d2 - 1.0) / d2 ); //static float3 dofEqFar = float3( 2.0, 0.0, 1.0 ); -float4 tex2Doffset( sampler2D s, float2 tc, float2 offset ) +float4 tex2Doffset(TORQUE_SAMPLER2D(s), float2 tc, float2 offset) { - return tex2D( s, tc + offset * oneOverTargetSize ); + return TORQUE_TEX2D( s, tc + offset * oneOverTargetSize ); } half3 GetSmallBlurSample( float2 tc ) @@ -51,10 +52,10 @@ half3 GetSmallBlurSample( float2 tc ) const half weight = 4.0 / 17; sum = 0; // Unblurred sample done by alpha blending //sum += weight * tex2Doffset( colorSampler, tc, float2( 0, 0 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +0.5, -1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -1.5, -0.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -0.5, +1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +1.5, +0.5 ) ).rgb; + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+0.5, -1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-1.5, -0.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-0.5, +1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+1.5, +0.5)).rgb); return sum; } @@ -72,7 +73,7 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) //float4 dofLerpScale = float4( -1 / d0, -1 / d1, -1 / d2, 1 / d2 ); //float4 dofLerpBias = float4( 1, (1 d2) / d1, 1 / d2, (d2 1) / d2 ); - weights = saturate( t * dofLerpScale + dofLerpBias ); + weights = half4(saturate( t * dofLerpScale + dofLerpBias )); weights.yz = min( weights.yz, 1 - weights.xy ); // Unblurred sample with weight "weights.x" done by alpha blending @@ -84,11 +85,11 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) return half4( color, alpha ); } -half4 main( PFXVertToPix IN ) : COLOR +half4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //return half4( 1,0,1,1 ); - //return half4( tex2D( colorSampler, IN.uv0 ).rgb, 1.0 ); - //return half4( tex2D( colorSampler, texCoords ).rgb, 0 ); + //return half4( TORQUE_TEX2D( colorSampler, IN.uv0 ).rgb, 1.0 ); + //return half4( TORQUE_TEX2D( colorSampler, texCoords ).rgb, 0 ); half3 small; half4 med; half3 large; @@ -100,10 +101,10 @@ half4 main( PFXVertToPix IN ) : COLOR small = GetSmallBlurSample( IN.uv0 ); //small = half3( 1,0,0 ); //return half4( small, 1.0 ); - med = tex2D( smallBlurSampler, IN.uv1 ); + med = half4(TORQUE_TEX2D( smallBlurSampler, IN.uv1 )); //med.rgb = half3( 0,1,0 ); //return half4(med.rgb, 0.0); - large = tex2D( largeBlurSampler, IN.uv2 ).rgb; + large = half3(TORQUE_TEX2D(largeBlurSampler, IN.uv2).rgb); //large = half3( 0,0,1 ); //return large; //return half4(large.rgb,1.0); @@ -114,7 +115,7 @@ half4 main( PFXVertToPix IN ) : COLOR //med.rgb = large; //nearCoc = 0; - depth = prepassUncondition( depthSampler, float4( IN.uv3, 0, 0 ) ).w; + depth = half(TORQUE_PREPASS_UNCONDITION( depthSampler, IN.uv3 ).w); //return half4(depth.rrr,1); //return half4(nearCoc.rrr,1.0); @@ -128,8 +129,8 @@ half4 main( PFXVertToPix IN ) : COLOR // dofEqFar.x and dofEqFar.y specify the linear ramp to convert // to depth for the distant out-of-focus region. // dofEqFar.z is the ratio of the far to the near blur radius. - farCoc = clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC ); - coc = max( nearCoc, farCoc * dofEqFar.z ); + farCoc = half(clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC )); + coc = half(max( nearCoc, farCoc * dofEqFar.z )); //coc = nearCoc; } diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl index 91dfba0a2d..86c93701ad 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl @@ -59,7 +59,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); // + float2( -5, 1 ) * oneOverTargetSize; OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl index 084a2c014a..f4d29f3e1e 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl @@ -22,11 +22,11 @@ #include "./../postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5 / 1.3; //25f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl index e29746e961..b2d4582e02 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl @@ -24,13 +24,13 @@ #include "./../../torque.hlsl" -uniform float2 texSize0; uniform float4 rtParams0; +uniform float2 texSize0; uniform float2 oneOverTargetSize; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -47,7 +47,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); IN.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl index 6d41445769..175525a91e 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl @@ -24,22 +24,23 @@ // colorMapSampler, which is the same size as the render target. // The sample weights are 1/16 in the corners, 2/16 on the edges, // and 4/16 in the center. +#include "../../shaderModel.hlsl" -uniform sampler2D colorSampler; // Output of DofNearCoc() +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); // Output of DofNearCoc() struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; -float4 main( Pixel IN ) : COLOR +float4 main( Pixel IN ) : TORQUE_TARGET0 { float4 color; color = 0.0; - color += tex2D( colorSampler, IN.texCoords.xz ); - color += tex2D( colorSampler, IN.texCoords.yz ); - color += tex2D( colorSampler, IN.texCoords.xw ); - color += tex2D( colorSampler, IN.texCoords.yw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yw ); return color / 4.0; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl index 204f4639db..3edb1ec2a3 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl @@ -30,13 +30,13 @@ struct Vert { - float4 position : POSITION; + float3 position : POSITION; float2 texCoords : TEXCOORD0; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; @@ -47,7 +47,7 @@ Pixel main( Vert IN ) { Pixel OUT; const float4 halfPixel = { -0.5, 0.5, -0.5, 0.5 }; - OUT.position = IN.position; //Transform_ObjectToClip( IN.position ); + OUT.position = float4(IN.position,1.0); //Transform_ObjectToClip( IN.position ); //float2 uv = IN.texCoords + rtParams0.xy; float2 uv = viewportCoordToRenderTarget( IN.texCoords, rtParams0 ); diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl index 90cf391dc8..fbd5290317 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl @@ -21,10 +21,10 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer :register(S0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return float4( tex2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); + return float4( TORQUE_TEX2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl index e45684199c..f5a71687d5 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl @@ -21,17 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer : register(S0), - uniform sampler2D backBuffer : register(S1), - uniform float2 targetSize : register(C0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer,0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = 1.0 / targetSize; // Sample edge buffer, bail if not on an edge - float edgeSample = tex2D(edgeBuffer, IN.uv0).r; + float edgeSample = TORQUE_TEX2D(edgeBuffer, IN.uv0).r; clip(edgeSample - 1e-6); // Ok we're on an edge, so multi-tap sample, average, and return @@ -58,7 +58,7 @@ float4 main( PFXVertToPix IN, float2 offsetUV = IN.uv1 + edgeSample * ( offsets[i] * 0.5 ) * pixelSize;//rtWidthHeightInvWidthNegHeight.zw; //offsetUV *= 0.999; - accumColor+= tex2D(backBuffer, offsetUV); + accumColor += TORQUE_TEX2D(backBuffer, offsetUV); } accumColor /= 9.0; diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl index bc79516ee3..2277126a8b 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl @@ -21,10 +21,12 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassBuffer,0); // GPU Gems 3, pg 443-444 -float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize) +float GetEdgeWeight(float2 uv0, in float2 targetSize) { float2 offsets[9] = { float2( 0.0, 0.0), @@ -44,10 +46,11 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize float Depth[9]; float3 Normal[9]; + [unroll] //no getting around this, may as well save the annoying warning message for(int i = 0; i < 9; i++) { float2 uv = uv0 + offsets[i] * PixelSize; - float4 gbSample = prepassUncondition( prepassBuffer, uv ); + float4 gbSample = TORQUE_PREPASS_UNCONDITION( prepassBuffer, uv ); Depth[i] = gbSample.a; Normal[i] = gbSample.rgb; } @@ -82,9 +85,9 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize return dot(normalResults, float4(1.0, 1.0, 1.0, 1.0)) * 0.25; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassBuffer :register(S0), - uniform float2 targetSize : register(C0) ) : COLOR0 +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return GetEdgeWeight(IN.uv0, prepassBuffer, targetSize );//rtWidthHeightInvWidthNegHeight.zw); + return GetEdgeWeight(IN.uv0, targetSize);//rtWidthHeightInvWidthNegHeight.zw); } diff --git a/Templates/Full/game/shaders/common/postFx/flashP.hlsl b/Templates/Full/game/shaders/common/postFx/flashP.hlsl index 3d9c6c7447..93daf3c26e 100644 --- a/Templates/Full/game/shaders/common/postFx/flashP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/flashP.hlsl @@ -25,11 +25,11 @@ uniform float damageFlash; uniform float whiteOut; -uniform sampler2D backBuffer : register(S0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { - float4 color1 = tex2D(backBuffer, IN.uv0); + float4 color1 = TORQUE_TEX2D(backBuffer, IN.uv0); float4 color2 = color1 * MUL_COLOR; float4 damage = lerp(color1,color2,damageFlash); return lerp(damage,WHITE_COLOR,whiteOut); diff --git a/Templates/Full/game/shaders/common/postFx/fogP.hlsl b/Templates/Full/game/shaders/common/postFx/fogP.hlsl index 0eba9a7b7a..b54eea97af 100644 --- a/Templates/Full/game/shaders/common/postFx/fogP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fogP.hlsl @@ -20,20 +20,21 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" + #include "./postFx.hlsl" #include "./../torque.hlsl" +#include "./../shaderModelAutoGen.hlsl" -uniform sampler2D prepassTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); uniform float3 eyePosWorld; uniform float4 fogColor; uniform float3 fogData; uniform float4 rtParams0; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; //return float4( depth, 0, 0, 0.7 ); float factor = computeSceneFog( eyePosWorld, diff --git a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl index 357b794e4f..269bfea673 100644 --- a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl @@ -20,38 +20,53 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + #define FXAA_PC 1 +#if (TORQUE_SM <= 30) #define FXAA_HLSL_3 1 +#elif TORQUE_SM < 49 +#define FXAA_HLSL_4 1 +#elif TORQUE_SM >=50 +#define FXAA_HLSL_5 1 +#endif #define FXAA_QUALITY__PRESET 12 #define FXAA_GREEN_AS_LUMA 1 #include "Fxaa3_11.h" -#include "../postFx.hlsl" struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -uniform sampler2D colorTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorTex, 0); uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + FxaaTex tex = colorTex; +#elif TORQUE_SM >=40 + FxaaTex tex; + tex.smpl = colorTex; + tex.tex = texture_colorTex; +#endif + return FxaaPixelShader( IN.uv0, // vertex position 0, // Unused... console stuff - colorTex, // The color back buffer + tex, // The color back buffer - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization oneOverTargetSize, diff --git a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl index ea2c3d106a..3bef0a4d36 100644 --- a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl @@ -25,7 +25,7 @@ struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl index dedfe8eb5a..6e284eb88a 100644 --- a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl @@ -24,23 +24,30 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -uniform sampler2D backBuffer : register(S0); -uniform sampler1D colorCorrectionTex : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 1); uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 color = tex2D(backBuffer, IN.uv0.xy); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0.xy); // Apply the color correction. - color.r = tex1D( colorCorrectionTex, color.r ).r; - color.g = tex1D( colorCorrectionTex, color.g ).g; - color.b = tex1D( colorCorrectionTex, color.b ).b; + color.r = TORQUE_TEX1D( colorCorrectionTex, color.r ).r; + color.g = TORQUE_TEX1D( colorCorrectionTex, color.g ).g; + color.b = TORQUE_TEX1D( colorCorrectionTex, color.b ).b; // Apply gamma correction color.rgb = pow( abs(color.rgb), OneOverGamma ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + return color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl b/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl new file mode 100644 index 0000000000..01b072dd99 --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +uniform sampler2D diffuseMap; +uniform float strength; + +out vec4 OUT_col; + +in vec2 uv0; +in vec2 uv1; +in vec2 uv2; +in vec2 uv3; + +in vec2 uv4; +in vec2 uv5; +in vec2 uv6; +in vec2 uv7; + +void main() +{ + vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + OUT_col = vec4(0); + OUT_col += texture( diffuseMap, uv0 ) * kernel.x; + OUT_col += texture( diffuseMap, uv1 ) * kernel.y; + OUT_col += texture( diffuseMap, uv2 ) * kernel.z; + OUT_col += texture( diffuseMap, uv3 ) * kernel.w; + + OUT_col += texture( diffuseMap, uv4 ) * kernel.x; + OUT_col += texture( diffuseMap, uv5 ) * kernel.y; + OUT_col += texture( diffuseMap, uv6 ) * kernel.z; + OUT_col += texture( diffuseMap, uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); + OUT_col.a = dot( OUT_col.rgb, rgb2lum ); +} diff --git a/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl b/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl index 414a277d34..1bf5d1b8f1 100644 --- a/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl +++ b/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl @@ -28,6 +28,8 @@ uniform sampler2D backBuffer; uniform sampler1D colorCorrectionTex; uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; in vec2 uv0; @@ -45,5 +47,11 @@ void main() // Apply gamma correction color.rgb = pow( abs(color.rgb), vec3(OneOverGamma) ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + OUT_col = color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl b/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl index 65ae96c6fb..80f8ed02d4 100644 --- a/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl @@ -22,11 +22,11 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl b/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl index c9c9052ec9..b8f5cf9c28 100644 --- a/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl +++ b/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl @@ -28,7 +28,7 @@ uniform float2 texSize0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -45,7 +45,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); float2 uv = IN.uv + (0.5f / texSize0); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl index c28f9eb83f..77f4b9915a 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -48,7 +47,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -62,7 +61,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (i - 4.0) * oneOverTargetSize.x; x = (i - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl index 93e6b83821..8381f6a5dc 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -47,7 +46,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -61,7 +60,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (fI - 4.0) * oneOverTargetSize.y; x = (fI - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl index c438a51539..9a8a93e979 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl @@ -21,12 +21,11 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" -uniform sampler2D inputTex : register(S0); -uniform sampler2D luminanceTex : register(S1); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); uniform float2 oneOverTargetSize; uniform float brightPassThreshold; uniform float g_fMiddleGray; @@ -40,17 +39,17 @@ static float2 gTapOffsets[4] = { -0.5, -0.5 }, { 0.5, 0.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 average = { 0.0f, 0.0f, 0.0f, 0.0f }; // Combine and average 4 samples from the source HDR texture. for( int i = 0; i < 4; i++ ) - average += hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); + average += hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); average *= 0.25f; // Determine the brightness of this particular pixel. - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; float lum = (g_fMiddleGray / (adaptedLum + 0.0001)) * hdrLuminance( average.rgb ); //float lum = hdrLuminance( average.rgb ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl index 3f443611c7..0f895070af 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl @@ -21,18 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D currLum : register( S0 ); -uniform sampler2D lastAdaptedLum : register( S1 ); +TORQUE_UNIFORM_SAMPLER2D(currLum, 0); +TORQUE_UNIFORM_SAMPLER2D(lastAdaptedLum, 1); uniform float adaptRate; uniform float deltaTime; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float fAdaptedLum = tex2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; - float fCurrentLum = tex2D( currLum, float2(0.5f, 0.5f) ).r; + float fAdaptedLum = TORQUE_TEX2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; + float fCurrentLum = TORQUE_TEX2D( currLum, float2(0.5f, 0.5f) ).r; // The user's adapted luminance level is simulated by closing the gap between // adapted luminance and current luminance by 2% every frame, based on a diff --git a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl index 3ce68452c5..01998af0ba 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl @@ -29,23 +29,24 @@ //----------------------------------------------------------------------------- struct VertIn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; + +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( VertIn IN, - uniform sampler2D inputTex : register(S0) ) : COLOR +float4 main( VertIn IN) : TORQUE_TARGET0 { // We calculate the texture coords // in the vertex shader as an optimization. float4 sample = 0.0f; for ( int i = 0; i < 8; i++ ) { - sample += tex2D( inputTex, IN.texCoords[i].xy ); - sample += tex2D( inputTex, IN.texCoords[i].zw ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].xy ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].zw ); } return sample / 16; diff --git a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl index 88794204ef..c9a34b7f4c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl @@ -29,19 +29,20 @@ struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; +uniform float2 targetSize; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( PFXVert In, - uniform float2 targetSize : register(C0) ) +Conn main( PFXVert In ) { Conn Out; - Out.hpos = In.pos; + Out.hpos = float4(In.pos,1.0); // Sample from the 16 surrounding points. Since the center point will be in // the exact center of 16 texels, a 0.5f offset is needed to specify a texel diff --git a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index 7ac71bebd5..b786b3f6a9 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -22,11 +22,13 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" -uniform sampler2D sceneTex : register( s0 ); -uniform sampler2D luminanceTex : register( s1 ); -uniform sampler2D bloomTex : register( s2 ); -uniform sampler1D colorCorrectionTex : register( s3 ); +TORQUE_UNIFORM_SAMPLER2D(sceneTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); +TORQUE_UNIFORM_SAMPLER2D(bloomTex, 2); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 4); uniform float2 texSize0; uniform float2 texSize2; @@ -34,20 +36,20 @@ uniform float2 texSize2; uniform float g_fEnableToneMapping; uniform float g_fMiddleGray; uniform float g_fWhiteCutoff; - uniform float g_fEnableBlueShift; -uniform float3 g_fBlueShiftColor; +uniform float3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( sceneTex, IN.uv0 ) ); - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; - float4 bloom = tex2D( bloomTex, IN.uv0 ); + float4 sample = hdrDecode( TORQUE_TEX2D( sceneTex, IN.uv0 ) ); + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float4 bloom = TORQUE_TEX2D( bloomTex, IN.uv0 ); // For very low light conditions, the rods will dominate the perception // of light, and therefore color will be desaturated and shifted @@ -81,15 +83,24 @@ float4 main( PFXVertToPix IN ) : COLOR0 } // Add the bloom effect. - sample += g_fBloomScale * bloom; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + if (depth>0.9999) + sample += g_fBloomScale * bloom; // Apply the color correction. - sample.r = tex1D( colorCorrectionTex, sample.r ).r; - sample.g = tex1D( colorCorrectionTex, sample.g ).g; - sample.b = tex1D( colorCorrectionTex, sample.b ).b; + sample.r = TORQUE_TEX1D( colorCorrectionTex, sample.r ).r; + sample.g = TORQUE_TEX1D( colorCorrectionTex, sample.g ).g; + sample.b = TORQUE_TEX1D( colorCorrectionTex, sample.b ).b; + // Apply gamma correction sample.rgb = pow( abs(sample.rgb), g_fOneOverGamma ); + + // Apply contrast + sample.rgb = ((sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + sample.rgb += Brightness; return sample; } diff --git a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index 38762baa5e..24a516e79c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -23,11 +23,13 @@ #include "../../../gl/torque.glsl" #include "../../../gl/hlslCompat.glsl" #include "../../gl/postFX.glsl" +#include "shadergen:/autogenConditioners.h" uniform sampler2D sceneTex; uniform sampler2D luminanceTex; uniform sampler2D bloomTex; uniform sampler1D colorCorrectionTex; +uniform sampler2D prepassTex; uniform vec2 texSize0; uniform vec2 texSize2; @@ -42,6 +44,8 @@ uniform vec3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; out vec4 OUT_col; @@ -84,7 +88,9 @@ void main() } // Add the bloom effect. - _sample += g_fBloomScale * bloom; + float depth = prepassUncondition( prepassTex, IN_uv0 ).w; + if (depth>0.9999) + _sample += g_fBloomScale * bloom; // Apply the color correction. _sample.r = texture( colorCorrectionTex, _sample.r ).r; @@ -93,6 +99,12 @@ void main() // Apply gamma correction _sample.rgb = pow( abs(_sample.rgb), vec3(g_fOneOverGamma) ); + + // Apply contrast + _sample.rgb = ((_sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + _sample.rgb += Brightness; OUT_col = _sample; } diff --git a/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl index 593a24e7b1..505d1b825f 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl @@ -22,15 +22,14 @@ #include "../postFx.hlsl" #include "../../torque.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float brightPassThreshold; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( inputTex, IN.uv0 ) ); + float4 sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 ) ); // Determine the brightness of this particular pixel. float lum = hdrLuminance( sample.rgb ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl index 39fd9dccca..2e23ece1f2 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl @@ -23,7 +23,7 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 texSize0; uniform float g_fMinLuminace; @@ -36,7 +36,7 @@ static float2 gTapOffsets[9] = }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tsize = 1.0 / texSize0; @@ -46,7 +46,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 9; i++ ) { // Decode the hdr value. - sample = hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); + sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); // Get the luminance and add it to the average. float lum = max( hdrLuminance( sample ), g_fMinLuminace ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl index 59e91f0db3..46ed6fc70c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl @@ -22,7 +22,7 @@ #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; @@ -34,7 +34,7 @@ static float2 gTapOffsets[16] = { -1.5, 1.5 }, { -0.5, 1.5 }, { 0.5, 1.5 }, { 1.5, 1.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = oneOverTargetSize; @@ -42,7 +42,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 16; i++ ) { - float lum = tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; + float lum = TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; average += lum; } diff --git a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl index e8870b3c42..b70bafa98c 100644 --- a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl @@ -20,29 +20,29 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../postFx.hlsl" -uniform sampler2D backBuffer : register( s0 ); // The original backbuffer. -uniform sampler2D prepassTex : register( s1 ); // The pre-pass depth and normals. +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); uniform float brightScalar; static const float3 LUMINANCE_VECTOR = float3(0.3125f, 0.6154f, 0.0721f); -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 col = float4( 0, 0, 0, 1 ); // Get the depth at this pixel. - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; // If the depth is equal to 1.0, read from the backbuffer // and perform the exposure calculation on the result. if ( depth >= 0.999 ) { - col = tex2D( backBuffer, IN.uv0 ); + col = TORQUE_TEX2D( backBuffer, IN.uv0 ); //col = 1 - exp(-120000 * col); col += dot( col.rgb, LUMINANCE_VECTOR ) + 0.0001f; diff --git a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl index ff44abfae5..0328947101 100644 --- a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl @@ -22,28 +22,29 @@ #include "../postFx.hlsl" -uniform sampler2D frameSampler : register( s0 ); -uniform sampler2D backBuffer : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(frameSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); + uniform float3 camForward; +uniform int numSamples; uniform float3 lightDirection; +uniform float density; uniform float2 screenSunPos; uniform float2 oneOverTargetSize; -uniform int numSamples; -uniform float density; uniform float weight; uniform float decay; uniform float exposure; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 texCoord = float4( IN.uv0.xy, 0, 0 ); // Store initial sample. - half3 color = (half3)tex2D( frameSampler, texCoord.xy ).rgb; + half3 color = (half3)TORQUE_TEX2D( frameSampler, texCoord.xy ).rgb; // Store original bb color. - float4 bbCol = tex2D( backBuffer, IN.uv1 ); + float4 bbCol = TORQUE_TEX2D( backBuffer, IN.uv1 ); // Set up illumination decay factor. half illuminationDecay = 1.0; @@ -68,7 +69,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 texCoord.xy -= deltaTexCoord; // Retrieve sample at new location. - half3 sample = (half3)tex2Dlod( frameSampler, texCoord ); + half3 sample = (half3)TORQUE_TEX2DLOD( frameSampler, texCoord ); // Apply sample attenuation scale/decay factors. sample *= half(illuminationDecay * weight); diff --git a/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl index 348484f4de..8bc65fbc69 100644 --- a/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl @@ -22,23 +22,22 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" uniform float4x4 matPrevScreenToWorld; uniform float4x4 matWorldToScreen; // Passed in from setShaderConsts() uniform float velocityMultiplier; +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); -uniform sampler2D backBuffer : register(S0); -uniform sampler2D prepassTex : register(S1); - -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { float samples = 5; // First get the prepass texture for uv channel 0 - float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prepass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); // Next extract the depth float depth = prepass.a; @@ -58,12 +57,12 @@ float4 main(PFXVertToPix IN) : COLOR0 float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; // Generate the motion blur - float4 color = tex2D(backBuffer, IN.uv0); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0); IN.uv0 += velocity; for(int i = 1; i= 10 && TORQUE_SM <=30) + // Semantics + #define TORQUE_POSITION POSITION + #define TORQUE_DEPTH DEPTH + #define TORQUE_TARGET0 COLOR0 + #define TORQUE_TARGET1 COLOR1 + #define TORQUE_TARGET2 COLOR2 + #define TORQUE_TARGET3 COLOR3 + + // Sampler uniforms + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform sampler1D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform sampler2D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform sampler3D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform samplerCUBE tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) tex1D(tex,coords) + #define TORQUE_TEX2D(tex,coords) tex2D(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) tex2Dproj(tex,coords) //this really is sm 2 or later + #define TORQUE_TEX3D(tex,coords) tex3D(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texCUBE(tex,coords) + + //Shader model 3.0 only + #if TORQUE_SM == 30 + #define TORQUE_VPOS VPOS // This is a float2 + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) tex2Dlod(tex,coords) + #endif + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) sampler2D tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) samplerCUBE tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) tex +// Shader model 4.0+ +#elif TORQUE_SM >= 40 + #define TORQUE_POSITION SV_Position + #define TORQUE_DEPTH SV_Depth + #define TORQUE_VPOS SV_Position //note float4 compared to SM 3 where it is a float2 + #define TORQUE_TARGET0 SV_Target0 + #define TORQUE_TARGET1 SV_Target1 + #define TORQUE_TARGET2 SV_Target2 + #define TORQUE_TARGET3 SV_Target3 + // Sampler uniforms + //1D is emulated to a 2D for now + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform Texture3D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform TextureCube texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) texture_##tex.Sample(tex,coords.xy / coords.w) + #define TORQUE_TEX3D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texture_##tex.Sample(tex,coords) + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) texture_##tex.SampleLevel(tex,coords.xy,coords.w) + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) Texture2D texture_##tex, SamplerState tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) texture_##tex, tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) TextureCube texture_##tex, SamplerState tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) texture_##tex, tex +#endif + +#endif // _TORQUE_SHADERMODEL_ + diff --git a/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl b/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl new file mode 100644 index 0000000000..4f2d8803f4 --- /dev/null +++ b/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TORQUE_SHADERMODEL_AUTOGEN_ +#define _TORQUE_SHADERMODEL_AUTOGEN_ + +#include "shadergen:/autogenConditioners.h" + +// Portability helpers for autogenConditioners +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, coords) +#elif TORQUE_SM >= 40 + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, texture_##tex, coords) +#endif + +#endif //_TORQUE_SHADERMODEL_AUTOGEN_ diff --git a/Templates/Full/game/shaders/common/terrain/blendP.hlsl b/Templates/Full/game/shaders/common/terrain/blendP.hlsl index f710889288..aeef9d6e3d 100644 --- a/Templates/Full/game/shaders/common/terrain/blendP.hlsl +++ b/Templates/Full/game/shaders/common/terrain/blendP.hlsl @@ -21,25 +21,28 @@ //----------------------------------------------------------------------------- #include "terrain.hlsl" +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -float4 main( ConnectData IN, - uniform sampler2D layerTex : register(S0), - uniform sampler2D textureMap : register(S1), - uniform float texId, - uniform float layerSize ) : COLOR +TORQUE_UNIFORM_SAMPLER2D(layerTex, 0); +TORQUE_UNIFORM_SAMPLER2D(textureMap, 1); + +uniform float texId; +uniform float layerSize; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 layerSample = round( tex2D( layerTex, IN.layerCoord ) * 255.0f ); + float4 layerSample = round( TORQUE_TEX2D( layerTex, IN.layerCoord ) * 255.0f ); float blend = calcBlend( texId, IN.layerCoord, layerSize, layerSample ); clip( blend - 0.0001 ); - return float4( tex2D( textureMap, IN.texCoord ).rgb, blend ); + return float4( TORQUE_TEX2D(textureMap, IN.texCoord).rgb, blend); } diff --git a/Templates/Full/game/shaders/common/terrain/blendV.hlsl b/Templates/Full/game/shaders/common/terrain/blendV.hlsl index 7a79d2de4d..9ccd33301b 100644 --- a/Templates/Full/game/shaders/common/terrain/blendV.hlsl +++ b/Templates/Full/game/shaders/common/terrain/blendV.hlsl @@ -23,6 +23,8 @@ /// The vertex shader used in the generation and caching of the /// base terrain texture. +#include "../shaderModel.hlsl" + struct VertData { float3 position : POSITION; @@ -31,17 +33,18 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -ConnectData main( VertData IN, - uniform float2 texScale : register(C0) ) +uniform float2 texScale; + +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = float4( IN.position.xyz, 1 ); + OUT.hpos = float4( IN.position, 1 ); OUT.layerCoord = IN.texCoord; OUT.texCoord = IN.texCoord * texScale; diff --git a/Templates/Full/game/shaders/common/terrain/terrain.glsl b/Templates/Full/game/shaders/common/terrain/terrain.glsl index 79f80888c8..756edd553c 100644 --- a/Templates/Full/game/shaders/common/terrain/terrain.glsl +++ b/Templates/Full/game/shaders/common/terrain/terrain.glsl @@ -32,6 +32,7 @@ float calcBlend( float texId, vec2 layerCoord, float layerSize, vec4 layerSample vec4 diff = clamp( abs( layerSample - texId ), 0.0, 1.0 ); float noBlend = float(any( bvec4(1 - diff) )); + // Check if any of the layer samples // match the current texture id. vec4 factors = vec4(0); for(int i = 0; i < 4; i++) diff --git a/Templates/Full/game/shaders/common/terrain/terrain.hlsl b/Templates/Full/game/shaders/common/terrain/terrain.hlsl index 8ce497012c..b7c87e6180 100644 --- a/Templates/Full/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Full/game/shaders/common/terrain/terrain.hlsl @@ -35,6 +35,7 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa // Check if any of the layer samples // match the current texture id. float4 factors = 0; + [unroll] for(int i = 0; i < 4; i++) if(layerSample[i] == texId) factors[i] = 1; diff --git a/Templates/Full/game/shaders/common/torque.hlsl b/Templates/Full/game/shaders/common/torque.hlsl index 1d253936b6..3521042d4a 100644 --- a/Templates/Full/game/shaders/common/torque.hlsl +++ b/Templates/Full/game/shaders/common/torque.hlsl @@ -23,6 +23,7 @@ #ifndef _TORQUE_HLSL_ #define _TORQUE_HLSL_ +#include "./shaderModel.hlsl" static float M_HALFPI_F = 1.57079632679489661923f; static float M_PI_F = 3.14159265358979323846f; @@ -137,29 +138,29 @@ float3x3 quatToMat( float4 quat ) /// @param negViewTS The negative view vector in tangent space. /// @param depthScale The parallax factor used to scale the depth result. /// -float2 parallaxOffset( sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale ) +float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D( texMap, texCoord ).a; - float2 offset = negViewTS.xy * ( depth * depthScale ); + float depth = TORQUE_TEX2D(texMap, texCoord).a; + float2 offset = negViewTS.xy * (depth * depthScale); - for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ ) + for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = ( depth + tex2D( texMap, texCoord + offset ).a ) * 0.5; - offset = negViewTS.xy * ( depth * depthScale ); + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a) * 0.5; + offset = negViewTS.xy * (depth * depthScale); } return offset; } /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha -float2 parallaxOffsetDxtnm(sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale) +float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D(texMap, texCoord).r; + float depth = TORQUE_TEX2D(texMap, texCoord).r; float2 offset = negViewTS.xy * (depth * depthScale); for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = (depth + tex2D(texMap, texCoord + offset).r) * 0.5; + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r) * 0.5; offset = negViewTS.xy * (depth * depthScale); } @@ -277,5 +278,37 @@ void fizzle(float2 vpos, float visibility) clip( visibility - frac( determinant( m ) ) ); } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, int num) +{ + int process = round(flags * 255); + int squareNum = pow(2, num); + return (fmod(process, pow(2, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +// Encodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return float4(pow(abs(tex.rgb), 2.2), tex.a); +} +// Encodes gamma. +float4 toGamma(float4 tex) +{ + return float4(pow(abs(tex.rgb), 1.0/2.2), tex.a); +} +#endif // #endif // _TORQUE_HLSL_ diff --git a/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl b/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl index 82c4210316..1d5a07c3f2 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl @@ -120,6 +120,7 @@ void main() { // Modulate baseColor by the ambientColor. vec4 waterBaseColor = baseColor * vec4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... vec3 bumpNorm = ( texture( bumpMap, IN_rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; diff --git a/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl b/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl index 1634fd2de3..e92c948e9c 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl @@ -72,7 +72,6 @@ uniform float undulateMaxDist; in vec4 vPosition; in vec3 vNormal; -in vec4 vColor; in vec2 vTexCoord0; in vec4 vTexCoord1; diff --git a/Templates/Full/game/shaders/common/water/gl/waterP.glsl b/Templates/Full/game/shaders/common/water/gl/waterP.glsl index af151020aa..a68ede84e6 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterP.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterP.glsl @@ -295,7 +295,7 @@ void main() foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - vec4 refMapColor = hdrDecode( texture( reflectMap, reflectCoord ) ); + vec4 refMapColor = texture( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. refMapColor = mix( refMapColor, texture( skyMap, reflectionVec ), NO_REFLECT ); @@ -324,6 +324,7 @@ void main() // Calculate the water "base" color based on depth. vec4 waterBaseColor = baseColor * texture( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= vec4( ambientColor.rgb, 1 ); diff --git a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl index d27b28c675..efb4377799 100644 --- a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl @@ -57,7 +57,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -92,11 +92,11 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); //uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); +TORQUE_UNIFORM_SAMPLER2D(reflectMap,2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff,3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap,4); //uniform sampler foamMap : register( S5 ); uniform float4 baseColor; uniform float4 miscParams; @@ -113,15 +113,16 @@ uniform float4x4 modelMat; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Modulate baseColor by the ambientColor. float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -135,7 +136,7 @@ float4 main( ConnectData IN ) : COLOR distortPos.xy += bumpNorm.xy * distortAmt; #ifdef UNDERWATER - return hdrEncode( tex2Dproj( refractBuff, distortPos ) ); + return hdrEncode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); #else float3 eyeVec = IN.objPos.xyz - eyePos; @@ -153,16 +154,16 @@ float4 main( ConnectData IN ) : COLOR float fakeColorAmt = ang; // Get reflection map color - float4 refMapColor = hdrDecode( tex2Dproj( reflectMap, distortPos ) ); + float4 refMapColor = hdrDecode( TORQUE_TEX2DPROJ( reflectMap, distortPos ) ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); //return refMapColor; // Get refract color - float4 refractColor = hdrDecode( tex2Dproj( refractBuff, distortPos ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); // calc "diffuse" color by lerping from the water color // to refraction image based on the water clarity. @@ -197,7 +198,7 @@ float4 main( ConnectData IN ) : COLOR // Fog it. float factor = computeSceneFog( eyePos, - IN.objPos, + IN.objPos.xyz, WORLD_Z, fogData.x, fogData.y, diff --git a/Templates/Full/game/shaders/common/water/waterBasicV.hlsl b/Templates/Full/game/shaders/common/water/waterBasicV.hlsl index 2c201e6752..310647c902 100644 --- a/Templates/Full/game/shaders/common/water/waterBasicV.hlsl +++ b/Templates/Full/game/shaders/common/water/waterBasicV.hlsl @@ -20,12 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -33,7 +34,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -95,21 +96,21 @@ ConnectData main( VertData IN ) // IN.position.xy += offsetXY; // IN.undulateData += offsetXY; // } - - float4 worldPos = mul( modelMat, IN.position ); + float4 inPos = float4(IN.position, 1.0); + float4 worldPos = mul(modelMat, inPos); IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); //OUT.objPos = worldPos; - OUT.objPos.xyz = IN.position.xyz; + OUT.objPos.xyz = IN.position; OUT.objPos.w = worldPos.z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. - float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 ) ); + float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 )).xy; //if ( undulatePos.x < 0 ) // undulatePos = IN.position.xy; @@ -128,12 +129,12 @@ ConnectData main( VertData IN ) float undulateFade = 1; // Scale down wave magnitude amount based on distance from the camera. - float dist = distance( IN.position.xyz, eyePos ); + float dist = distance( IN.position, eyePos ); dist = clamp( dist, 1.0, undulateMaxDist ); undulateFade *= ( 1 - dist / undulateMaxDist ); // Also scale down wave magnitude if the camera is very very close. - undulateFade *= saturate( ( distance( IN.position.xyz, eyePos ) - 0.5 ) / 10.0 ); + undulateFade *= saturate( ( distance( IN.position, eyePos ) - 0.5 ) / 10.0 ); undulateAmt *= undulateFade; @@ -141,7 +142,7 @@ ConnectData main( VertData IN ) //undulateAmt = 0; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Save worldSpace position of this pixel/vert @@ -210,7 +211,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); } binormal = normalize( binormal ); diff --git a/Templates/Full/game/shaders/common/water/waterP.hlsl b/Templates/Full/game/shaders/common/water/waterP.hlsl index 851fb471f6..ac66e9b28d 100644 --- a/Templates/Full/game/shaders/common/water/waterP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" //----------------------------------------------------------------------------- @@ -69,7 +69,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -105,13 +105,13 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); -uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); -uniform sampler foamMap : register( S5 ); -uniform sampler1D depthGradMap : register( S6 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); +TORQUE_UNIFORM_SAMPLER2D(reflectMap, 2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff, 3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap, 4); +TORQUE_UNIFORM_SAMPLER2D(foamMap, 5); +TORQUE_UNIFORM_SAMPLER1D(depthGradMap, 6); uniform float4 specularParams; uniform float4 baseColor; uniform float4 miscParams; @@ -138,12 +138,12 @@ uniform float reflectivity; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -155,7 +155,7 @@ float4 main( ConnectData IN ) : COLOR float2 prepassCoord = viewportCoordToRenderTarget( IN.posPostWave, rtParams1 ); - float startDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float startDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; // The water depth in world units of the undistorted pixel. float startDelta = ( startDepth - pixelDepth ); @@ -180,7 +180,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - float prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; @@ -212,7 +212,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; delta = ( prepassDepth - pixelDepth ) * farPlaneDist; @@ -260,8 +260,8 @@ float4 main( ConnectData IN ) : COLOR IN.foamTexCoords.xy += foamRippleOffset; IN.foamTexCoords.zw += foamRippleOffset; - float4 foamColor = tex2D( foamMap, IN.foamTexCoords.xy ); - foamColor += tex2D( foamMap, IN.foamTexCoords.zw ); + float4 foamColor = TORQUE_TEX2D( foamMap, IN.foamTexCoords.xy ); + foamColor += TORQUE_TEX2D( foamMap, IN.foamTexCoords.zw ); foamColor = saturate( foamColor ); // Modulate foam color by ambient color @@ -282,18 +282,18 @@ float4 main( ConnectData IN ) : COLOR foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - float4 refMapColor = hdrDecode( tex2D( reflectMap, reflectCoord ) ); + float4 refMapColor = TORQUE_TEX2D( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); - fakeColor = ( texCUBE( skyMap, reflectionVec ) ); + fakeColor = ( TORQUE_TEXCUBE( skyMap, reflectionVec ) ); fakeColor.a = 1; // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); // Get refract color - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); // We darken the refraction color a bit to make underwater // elements look wet. We fade out this darkening near the @@ -310,7 +310,8 @@ float4 main( ConnectData IN ) : COLOR float fogAmt = 1.0 - saturate( exp( -FOG_DENSITY * fogDelta ) ); // Calculate the water "base" color based on depth. - float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) ); + float4 waterBaseColor = baseColor * TORQUE_TEX1D( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= float4( ambientColor.rgb, 1 ); @@ -353,7 +354,7 @@ float4 main( ConnectData IN ) : COLOR #else - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); float4 OUT = refractColor; #endif diff --git a/Templates/Full/game/shaders/common/water/waterV.hlsl b/Templates/Full/game/shaders/common/water/waterV.hlsl index d2b097bc54..c869f0e9fa 100644 --- a/Templates/Full/game/shaders/common/water/waterV.hlsl +++ b/Templates/Full/game/shaders/common/water/waterV.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -35,7 +35,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -94,12 +94,12 @@ ConnectData main( VertData IN ) 0.0, 0.0, 0.0, 1.0 }; IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); - - OUT.objPos = IN.position; - OUT.objPos.w = mul( modelMat, IN.position ).z; + float4 inPos = float4( IN.position, 1.0); + OUT.objPos = inPos; + OUT.objPos.w = mul( modelMat, inPos ).z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. @@ -132,7 +132,7 @@ ConnectData main( VertData IN ) OUT.rippleTexCoord2.w = saturate( OUT.rippleTexCoord2.w - 0.2 ) / 0.8; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Convert to screen @@ -197,7 +197,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); } binormal = binormal; diff --git a/Templates/Full/game/shaders/common/wavesP.hlsl b/Templates/Full/game/shaders/common/wavesP.hlsl index 265842f1fb..c51eb4b895 100644 --- a/Templates/Full/game/shaders/common/wavesP.hlsl +++ b/Templates/Full/game/shaders/common/wavesP.hlsl @@ -22,13 +22,14 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Data //----------------------------------------------------------------------------- struct v2f { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float2 TEX0 : TEXCOORD0; float4 tangentToCube0 : TEXCOORD1; float4 tangentToCube1 : TEXCOORD2; @@ -42,21 +43,23 @@ struct v2f struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +// Uniforms +TORQUE_UNIFORM_SAMPLER2D(diffMap,0); +//TORQUE_UNIFORM_SAMPLERCUBE(cubeMap, 1); not used? +TORQUE_UNIFORM_SAMPLER2D(bumpMap,2); + +uniform float4 specularColor : register(PC_MAT_SPECCOLOR); +uniform float4 ambient : register(PC_AMBIENT_COLOR); +uniform float specularPower : register(PC_MAT_SPECPOWER); +uniform float accumTime : register(PC_ACCUM_TIME); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main(v2f IN, - uniform sampler2D diffMap : register(S0), - uniform sampler2D bumpMap : register(S2), - uniform samplerCUBE cubeMap : register(S1), - uniform float4 specularColor : register(PC_MAT_SPECCOLOR), - uniform float specularPower : register(PC_MAT_SPECPOWER), - uniform float4 ambient : register(PC_AMBIENT_COLOR), - uniform float accumTime : register(PC_ACCUM_TIME) -) +Fragout main(v2f IN) { Fragout OUT; @@ -68,8 +71,8 @@ Fragout main(v2f IN, texOffset.y = IN.TEX0.y + cos( accumTime * 3.0 + IN.TEX0.x * 6.28319 * 2.0 ) * 0.05; - float4 bumpNorm = tex2D( bumpMap, texOffset ) * 2.0 - 1.0; - float4 diffuse = tex2D( diffMap, texOffset ); + float4 bumpNorm = TORQUE_TEX2D( bumpMap, texOffset ) * 2.0 - 1.0; + float4 diffuse = TORQUE_TEX2D( diffMap, texOffset ); OUT.col = diffuse * (saturate( dot( IN.lightVec, bumpNorm.xyz ) ) + ambient); diff --git a/Templates/Full/game/shaders/common/wavesV.hlsl b/Templates/Full/game/shaders/common/wavesV.hlsl index 6580daa5b4..fccef9d257 100644 --- a/Templates/Full/game/shaders/common/wavesV.hlsl +++ b/Templates/Full/game/shaders/common/wavesV.hlsl @@ -22,7 +22,7 @@ #define IN_HLSL #include "shdrConsts.h" -#include "hlslStructs.h" +#include "hlslStructs.hlsl" //----------------------------------------------------------------------------- // Constants @@ -42,21 +42,20 @@ struct Conn }; +uniform float4x4 modelview : register(VC_WORLD_PROJ); +uniform float3x3 cubeTrans : register(VC_CUBE_TRANS); +uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS); +uniform float3 inLightVec : register(VC_LIGHT_DIR1); +uniform float3 eyePos : register(VC_EYE_POS); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( VertexIn_PNTTTB In, - uniform float4x4 modelview : register(VC_WORLD_PROJ), - uniform float3x3 cubeTrans : register(VC_CUBE_TRANS), - uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS), - uniform float3 inLightVec : register(VC_LIGHT_DIR1), - uniform float3 eyePos : register(VC_EYE_POS) -) +Conn main( VertexIn_PNTTTB In) { Conn Out; - Out.HPOS = mul(modelview, In.pos); + Out.HPOS = mul(modelview, float4(In.pos,1.0)); Out.TEX0 = In.uv0; diff --git a/Templates/Full/game/tools/classIcons/GuiRadioCtrl.png b/Templates/Full/game/tools/classIcons/GuiRadioCtrl.png index 80c839747e..062f90af2a 100644 Binary files a/Templates/Full/game/tools/classIcons/GuiRadioCtrl.png and b/Templates/Full/game/tools/classIcons/GuiRadioCtrl.png differ diff --git a/Templates/Full/game/tools/classIcons/VolumetricFog.png b/Templates/Full/game/tools/classIcons/VolumetricFog.png new file mode 100644 index 0000000000..5dc516cb53 Binary files /dev/null and b/Templates/Full/game/tools/classIcons/VolumetricFog.png differ diff --git a/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui b/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui new file mode 100644 index 0000000000..ef506941a4 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui @@ -0,0 +1,45 @@ +%guiContent = new GuiControl(SuperTooltipDlg) { + canSaveDynamicFields = "0"; + Profile = "GuiTransparentProfileModeless"; + class = "SuperTooltip"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "0 0"; + Extent = "640 480"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + + new GuiControl(SuperTooltipWindow) { + canSaveDynamicFields = "0"; + Profile = "EditorTextEditBoldModeless"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "216 160"; + Extent = "221 134"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + internalName = "tooltipWindow"; + + new GuiMLTextCtrl(SuperTooltipMLText) { + canSaveDynamicFields = "0"; + Profile = "EditorMLTextProfileModeless"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "5 5"; + Extent = "210 14"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + internalName = "tooltipMLText"; + }; + }; +}; + diff --git a/Templates/Full/game/tools/componentEditor/main.cs b/Templates/Full/game/tools/componentEditor/main.cs new file mode 100644 index 0000000000..56d74830a9 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/main.cs @@ -0,0 +1,28 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//Scripts +exec("./scripts/componentEditor.ed.cs"); +exec("./scripts/superToolTipDlg.ed.cs"); + +//gui +exec("./gui/superToolTipDlg.ed.gui"); diff --git a/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs b/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs new file mode 100644 index 0000000000..9a9ce33d6e --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs @@ -0,0 +1,233 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function GuiInspectorEntityGroup::CreateContent(%this) +{ +} + +function GuiInspectorEntityGroup::InspectObject( %this, %targetObject ) +{ + %this.stack.clear(); + %this.stack.addGuiControl(%this.createAddComponentList()); +} + +function GuiInspectorEntityGroup::createAddComponentList(%this) +{ + %extent = %this.getExtent(); + + %container = new GuiControl() + { + Profile = "EditorContainerProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "0 0"; + Extent = %extent.x SPC "25"; + }; + + %componentList = new GuiPopUpMenuCtrlEx(QuickEditComponentList) + { + Profile = "GuiPopupMenuProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = "28 4"; + Extent = (%extent.x - 28) SPC "18"; + hovertime = "100"; + tooltip = "The component to add to the object"; + tooltipProfile = "EditorToolTipProfile"; + }; + + %addButton = new GuiIconButtonCtrl() { + class = AddComponentQuickEditButton; + Profile = "EditorButton"; + HorizSizing = "right"; + VertSizing = "bottom"; + Position = "2 0"; + Extent = "24 24"; + buttonMargin = "4 4"; + iconLocation = "Left"; + sizeIconToButton = "0"; + iconBitmap = "tools/gui/images/iconAdd.png"; + hovertime = "100"; + tooltip = "Add the selected component to the object"; + tooltipProfile = "EditorToolTipProfile"; + componentList = %componentList; + }; + + %componentList.refresh(); + + %container.add(%componentList); + %container.add(%addButton); + + if(!isObject("componentTooltipTheme")) + { + %theme = createsupertooltiptheme("componentTooltipTheme"); + %theme.addstyle("headerstyle", ""); + %theme.addstyle("headertwostyle", ""); + %theme.addstyle("basictextstyle", ""); + %theme.setdefaultstyle("title", "headerstyle"); + %theme.setdefaultstyle("paramtitle", "headertwostyle"); + %theme.setdefaultstyle("param", "basictextstyle"); + %theme.setspacing(3, 0); + } + + return %container; +} + +function QuickEditComponentList::refresh(%this) +{ + %this.clear(); + + //find all ComponentAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "ComponentAsset")) + return; //if we didn't find ANY, just exit + + // Find all the types. + %count = %assetQuery.getCount(); + + %categories = ""; + for (%i = 0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %componentAsset = AssetDatabase.acquireAsset(%assetId); + %componentType = %componentAsset.componentType; + if (!isInList(%componentType, %categories)) + %categories = %categories TAB %componentType; + } + + %categories = trim(%categories); + + %index = 0; + %categoryCount = getFieldCount(%categories); + for (%i = 0; %i < %categoryCount; %i++) + { + %category = getField(%categories, %i); + %this.addCategory(%category); + + for (%j = 0; %j < %count; %j++) + { + %assetId = %assetQuery.getAsset(%j); + + %componentAsset = AssetDatabase.acquireAsset(%assetId); + %componentType = %componentAsset.componentType; + %friendlyName = %componentAsset.friendlyName; + + if (%componentType $= %category) + { + //TODO: Haven't worked out getting categories to look distinct + //from entries in the drop-down so for now just indent them for the visual distinction + %spacedName = " " @ %friendlyName; + %this.add(%spacedName, %index); + %this.component[%index] = %componentAsset; + %index++; + } + } + } +} + +function QuickEditComponentList::onHotTrackItem( %this, %itemID ) +{ + %componentObj = %this.component[%itemID]; + if( isObject( %componentObj ) && %this.componentDesc != %componentObj ) + { + SuperTooltipDlg.init("componentTooltipTheme"); + SuperTooltipDlg.setTitle(%componentObj.friendlyName); + SuperTooltipDlg.addParam("", %componentObj.description @ "\n"); + + %fieldCount = %componentObj.getComponentFieldCount(); + for (%i = 0; %i < %fieldCount; %i++) + { + %name = getField(%componentObj.getComponentField(%i), 0); + + SuperTooltipDlg.addParam(%name, %description @ "\n"); + } + %position = %this.getGlobalPosition(); + SuperTooltipDlg.processTooltip( %position,0,1 ); + %this.opened = true; + %this.componentDesc = %componentObj; + } + else if( !isObject( %componentObj ) ) + { + if( %this.opened == true ) + SuperTooltipDlg.hide(); + %this.componentDesc = ""; + } +} + +function QuickEditComponentList::setProperty(%this, %object) +{ + %this.objectToAdd = %object; +} + +function QuickEditComponentList::onSelect(%this) +{ + if( %this.opened == true ) + SuperTooltipDlg.hide(); + + %this.componentToAdd = %this.component[%this.getSelected()]; +} + +function QuickEditComponentList::onCancel( %this ) +{ + if( %this.opened == true ) + SuperTooltipDlg.hide(); +} + +function AddComponentQuickEditButton::onClick(%this) +{ + %component = %this.componentList.componentToAdd; + + %componentName = %this.componentList.componentToAdd.componentName; + %componentClass = %this.componentList.componentToAdd.componentClass; + + %command = "$ComponentEditor::newComponent = new" SPC %componentClass SPC "(){ class = \"" + @ %componentName @ "\"; };"; + + eval(%command); + + %instance = $ComponentEditor::newComponent; + %undo = new UndoScriptAction() + { + actionName = "Added Component"; + class = UndoAddComponent; + object = %this.componentList.objectToAdd; + component = %instance; + }; + + %undo.addToManager(LevelBuilderUndoManager); + + %instance.owner = Inspector.getInspectObject(0); + %instance.owner.add(%instance); + + Inspector.schedule( 50, "refresh" ); + EWorldEditor.isDirty = true; +} + +function addComponent(%obj, %instance) +{ + echo("Adding the component!"); + %obj.addComponent(%instance); + Inspector.schedule( 50, "refresh" ); + EWorldEditor.isDirty = true; +} + diff --git a/Templates/Full/game/tools/componentEditor/scripts/superToolTipDlg.ed.cs b/Templates/Full/game/tools/componentEditor/scripts/superToolTipDlg.ed.cs new file mode 100644 index 0000000000..7f25bd5e67 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/scripts/superToolTipDlg.ed.cs @@ -0,0 +1,155 @@ +function createSuperTooltipTheme(%name) +{ + %theme = new ScriptObject() + { + class = SuperTooltipTheme; + }; + + %theme.setName(%name); + + return %theme; +} + +function SuperTooltipTheme::addStyle(%this, %name, %style) +{ + %this.styles[%name] = %style; +} + +function SuperTooltipTheme::setDefaultStyle(%this, %type, %default) +{ + %this.defaultStyles[%type] = %default; +} + +function SuperTooltipTheme::setSpacing(%this, %verticalSpace, %horizontalSpace) +{ + %this.verticalSpace = %verticalSpace; + %this.horizontalSpace = %horizontalSpace; +} + +function SuperTooltipTheme::getStyle(%this, %name) +{ + return %this.styles[%name]; +} + +function SuperTooltip::init(%this, %theme) +{ + %this.clearTooltip(); + + if(isObject(%theme)) + %this.setTheme(%theme); +} + +function SuperTooltip::clearTooltip(%this) +{ + if(%this.paramCount > 0) + { + for(%i=0;%i<%this.paramCount;%i++) + %this.param[%i] = ""; + } + + %this.title = ""; + %this.paramCount = 0; +} + +function SuperTooltip::processTooltip(%this, %globalPos, %verticalAlign, %horizontalAlign) +{ + if (%verticalAlign $= "") + %verticalAlign = 1; + if (%horizontalAlign $= "") + %horizontalAlign = 0; + + %tooltipWindow = %this.findObjectByInternalName("tooltipWindow"); + + if(isObject(%tooltipWindow)) + %tooltipMLText = %tooltipWindow.findObjectByInternalName("tooltipMLText"); + else + return false; + + if(!isObject(%tooltipMLText)) + return false; + + %verticalSpace = %this.theme.verticalSpace; + %horizontalSpace = %this.theme.horizontalSpace; + + if (%verticalAlign == 1) + %verticalSpace = -%verticalSpace; + if (%horizontalAlign == 1) + %horizontalSpace = -%horizontalSpace; + + %text = %this.getFormatedText(); + %tooltipMLText.setText(%text); + + canvas.pushDialog(%this); + + %tooltipMLText.forceReflow(); + %MLExtent = %tooltipMLText.extent; + %MLHeight = getWord(%MLExtent, 1); + + %tooltipExtent = %tooltipWindow.extent; + %tooltipWidth = getWord(%tooltipExtent, 0); + %tooltipHeight = %MLHeight; + %tooltipWindow.extent = %tooltipWidth SPC %tooltipHeight; + + %globalPosX = getWord(%globalPos, 0); + %globalPosY = getWord(%globalPos, 1); + + %tooltipPosX = %globalPosX - (%horizontalAlign * %tooltipWidth) + %horizontalSpace; + %tooltipPosY = %globalPosY - (%verticalAlign * %tooltipHeight) + %verticalSpace; + + %tooltipWindow.setPosition(%tooltipPosX, %tooltipPosY); + + return true; +} + +function SuperTooltip::hide(%this) +{ + canvas.popDialog(%this); + + %this.clearTooltip(); +} + +function SuperTooltip::setTheme(%this, %theme) +{ + %this.theme = %theme; +} + +function SuperTooltip::setTitle(%this, %title, %style) +{ + if(%style !$= "") + %themeStyle = %this.theme.styles[%style]; + else + %themeStyle = %this.theme.getStyle(%this.theme.defaultStyles[Title]); + + %this.title = %themeStyle @ %title; +} + +function SuperTooltip::addParam(%this, %title, %text, %paramTitleStyle, %paramStyle) +{ + if(%paramTitleStyle !$= "") + %themeTitleStyle = %this.theme.styles[%paramTitleStyle]; + else + %themeTitleStyle = %this.theme.getStyle(%this.theme.defaultStyles[ParamTitle]); + + if(%paramStyle !$= "") + %themeStyle = %this.theme.styles[%paramStyle]; + else + %themeStyle = %this.theme.getStyle(%this.theme.defaultStyles[Param]); + + if (%title $= "") + %this.param[%this.paramCount] = %themeStyle @ %text @ "\n"; + else + %this.param[%this.paramCount] = %themeTitleStyle @ %title @ ": " @ %themeStyle @ %text @ "\n"; + %this.paramCount++; +} + +function SuperTooltip::getFormatedText(%this) +{ + %text = %this.title @ "\n\n"; + + for(%i=0;%i<%this.paramCount;%i++) + { + %text = %text @ %this.param[%i]; + } + + return %text; +} \ No newline at end of file diff --git a/Templates/Full/game/tools/decalEditor/decalEditorGui.cs b/Templates/Full/game/tools/decalEditor/decalEditorGui.cs index c6e24b10b1..3636b29a12 100644 --- a/Templates/Full/game/tools/decalEditor/decalEditorGui.cs +++ b/Templates/Full/game/tools/decalEditor/decalEditorGui.cs @@ -315,7 +315,7 @@ if( isObject( %material ) ) DecalPreviewWindow-->decalPreview.setBitmap( MaterialEditorGui.searchForTexture( %material.getId(), %material.diffuseMap[0]) ); else - DecalPreviewWindow-->decalPreview.setBitmap("tools/materialeditor/gui/unknownImage"); + DecalPreviewWindow-->decalPreview.setBitmap("tools/materialEditor/gui/unknownImage"); } function DecalEditorGui::updateInstancePreview( %this, %material ) @@ -323,7 +323,7 @@ if( isObject( %material ) ) DecalPreviewWindow-->instancePreview.setBitmap( MaterialEditorGui.searchForTexture( %material.getId(), %material.diffuseMap[0]) ); else - DecalPreviewWindow-->instancePreview.setBitmap("tools/materialeditor/gui/unknownImage"); + DecalPreviewWindow-->instancePreview.setBitmap("tools/materialEditor/gui/unknownImage"); } function DecalEditorGui::rebuildInstanceTree( %this ) diff --git a/Templates/Full/game/tools/gui/colorPicker.ed.gui b/Templates/Full/game/tools/gui/colorPicker.ed.gui index 18dad276e4..c203ca52e3 100644 --- a/Templates/Full/game/tools/gui/colorPicker.ed.gui +++ b/Templates/Full/game/tools/gui/colorPicker.ed.gui @@ -1,289 +1,722 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiColorPickerCtrl(ColorPickerDlg,EditorGuiGroup) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; + displayMode = "Dropper"; // this makes the background visible + actionOnMove = "1"; position = "0 0"; - Extent = "800 600"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - DisplayMode = "Dropper"; // this makes the background visible - ActionOnMove = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiWindowCtrl(GuiPickerDlg) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiWindowProfile"; - HorizSizing = "windowRelative"; - VertSizing = "windowRelative"; - position = "170 100"; - Extent = "348 347"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; text = "Color Picker"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "DoColorPickerCancelCallback(); ColorPickerDlg.getRoot().popDialog(ColorPickerDlg);"; - + position = "170 100"; + extent = "439 317"; + minExtent = "8 2"; + horizSizing = "windowRelative"; + vertSizing = "windowRelative"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + new GuiBitmapBorderCtrl(){ // color blend - Profile = "ToolsGuiGroupBorderProfile"; position = "3 24"; - Extent = "255 258"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorBlendSelect) { + baseColor = "1 0 0 1"; + pickColor = "0 0 0 1"; + selectorGap = "1"; + displayMode = "BlendColor"; + actionOnMove = "1"; + position = "1 0"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updateRGBValues(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl(){ // Hue - Profile = "ToolsGuiGroupBorderProfile"; position = "263 23"; - Extent = "25 261"; + extent = "25 261"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorRangeSelect) { + baseColor = "1 0 0 1"; + pickColor = "1 0 0 1"; + selectorGap = "1"; + displayMode = "VertColor"; + actionOnMove = "1"; + position = "1 1"; + extent = "21 257"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updatePickerBaseColor(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiTextCtrl() { + text = "New"; + position = "306 22"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; new GuiBitmapBorderCtrl(){ // new old color - Profile = "ToolsGuiGroupBorderProfile"; position = "292 37"; - Extent = "52 99"; - }; - new GuiBitmapBorderCtrl(){ // rgb - Profile = "ToolsGuiGroupBorderProfile"; - position = "292 209"; - Extent = "52 75"; - }; - new GuiBitmapBorderCtrl(){ // alpha - Profile = "ToolsGuiGroupBorderProfile"; - position = "3 287"; - Extent = "341 24"; - }; - new GuiColorPickerCtrl(ColorBlendSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "3 24"; - Extent = "255 258"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - command = "updateRGBValues(1);"; + extent = "52 99"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "0 0 0 1"; - SelectorGap = "1"; - DisplayMode = "BlendColor"; - ActionOnMove = "1"; - }; - new GuiColorPickerCtrl(ColorRangeSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "264 24"; - Extent = "21 257"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - Command = "updatePickerBaseColor(1);"; - hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "1 0 0 1"; - SelectorGap = "1"; - DisplayMode = "VertColor"; - ActionOnMove = "1"; - }; - new GuiTextCtrl() { canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 215"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "R"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_R_Val) { // Red Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 215"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + + new GuiSwatchButtonCtrl(myColor){ // New Color // + position = "1 1"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; + new GuiSwatchButtonCtrl(oldColor){ // Old Color // + position = "1 48"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; }; new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "297 238"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "G"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_G_Val) { // Green Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 238"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + text = "Old"; + position = "310 138"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 261"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + new GuiBitmapBorderCtrl(){ // Color Text Fields + position = "291 165"; + extent = "141 118"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "B"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 261"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; - }; - - - new GuiControl() { - class = "AggregateControl"; - position = "2 290"; - Extent = "341 18"; - - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "267 0"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { // rgb + position = "4 0"; + extent = "52 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "Alpha"; - maxLength = "255"; - }; - new GuiSliderCtrl(ColorAlphaSelect) { - internalName = "slider"; - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "5 3"; - Extent = "251 13"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "R"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_R_Val) { // Red Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + }; + new GuiTextCtrl() { + text = "G"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_G_Val) { // Green Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + }; + }; + new GuiControl() { + position = "71 0"; + extent = "61 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - range = "0 1"; - ticks = "0"; - value = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "H"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_H_Val) { // Hue Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + }; + new GuiTextCtrl() { + text = "o"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 2"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "S"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_S_Val) { // Saturation Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 29"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_Br_Val) { // Brightness Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 52"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; - new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal - internalName = "textEdit"; - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "305 0"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + new GuiControl() { + position = "3 87"; + extent = "138 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "#"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "3 5"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(HexColor_Val) { // Hex Color Field + text = "0"; + maxLength = "6"; + position = "13 5"; + extent = "116 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + command = "$thisControl.onKeyDown();"; + }; }; }; - new GuiSwatchButtonCtrl(myColor){ // New Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 38"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "New"; - position = "306 22"; - Extent = "26 14"; - }; - new GuiSwatchButtonCtrl(oldColor){ // Old Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 85"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "Old"; - position = "310 138"; - Extent = "26 14"; + new GuiBitmapBorderCtrl(){ // alpha + position = "3 287"; + extent = "429 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { + position = "-1 3"; + extent = "428 18"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "AggregateControl"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl(ColorAlphaSelect) { + range = "0 1"; + ticks = "0"; + value = "1"; + position = "5 3"; + extent = "341 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + internalName = "slider"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Alpha"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "355 0"; + extent = "28 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal + text = "0"; + maxLength = "4"; + position = "392 0"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + internalName = "TextEdit"; + }; + }; }; new GuiButtonCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "144 316"; - Extent = "115 24"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCallback();"; - hovertime = "1000"; text = "Select"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - }; - new GuiButtonCtrl() { - canSaveDynamicFields = "0"; + position = "349 37"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "268 316"; - Extent = "73 24"; - MinExtent = "8 2"; canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCancelCallback();"; - hovertime = "1000"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl() { text = "Cancel"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; + position = "349 68"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCancelCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -294,26 +727,6 @@ $ColorPickerCancelCallback = ""; $ColorPickerUpdateCallback = ""; $ColorCallbackType = 1; // ColorI -function ColorFloatToInt( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return mCeil( %red * 255 ) SPC mCeil( %green * 255 ) SPC mCeil( %blue * 255 ) SPC mCeil( %alpha * 255 ); -} - -function ColorIntToFloat( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return ( %red / 255 ) SPC ( %green / 255 ) SPC ( %blue / 255 ) SPC ( %alpha / 255 ); -} - // This function pushes the color picker dialog and returns to a callback the selected value function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCallback ) { @@ -333,15 +746,18 @@ function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 255"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0) / 255; - %green = getWord(%currentColor, 1) / 255; - %blue = getWord(%currentColor, 2) / 255; + %red = getWord(%currentColor, 0); + %green = getWord(%currentColor, 1); + %blue = getWord(%currentColor, 2); %alpha = getWord(%currentColor, 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -371,15 +787,18 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 1"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0); - %green = getWord(%currentColor, 1); - %blue = getWord(%currentColor, 2); - %alpha = getWord(%currentColor, 3); + %red = mRoundColour(getWord(%currentColor, 0), 3); + %green = mRoundColour(getWord(%currentColor, 1), 3); + %blue = mRoundColour(getWord(%currentColor, 2), 3); + %alpha = mRoundColour(getWord(%currentColor, 3), 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -390,6 +809,133 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal Channel_A_Val.setText( %alpha ); } +function ColorPickerRGBClass::onValidate(%this) +{ + %red = Channel_R_Val.getValue(); + %green = Channel_G_Val.getValue(); + %blue = Channel_B_Val.getValue(); + + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //Update everything else with our new color + setColorInfo(); +} + +function ColorPickerHSBClass::onValidate(%this) +{ + %hue = Channel_H_Val.getValue(); + %saturation = Channel_S_Val.getValue(); + %brightness = Channel_Br_Val.getValue(); + + //Update all the other color fields + %rgb = ColorHSBToRGB(%hue SPC %saturation SPC %brightness); + %hex = ColorRGBToHEX(%rgb); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Update everything else with our new color + setColorInfo(); +} + +function HexColor_Val::onKeyDown(%this) +{ + //Get the value + %value = %this.getValue(); + + //It's hex so keep it all uppercase + %value = strupr(%value); + %pos = %this.getCursorPos(); + %this.setValue(%value); + %this.setCursorPos(%pos); + + //Verify that it's a hex value + %value = stripChars(%value, "0123456789ABCDEF"); + if(%value $= "") + { + %this.validText(); + } + else + { + %this.invalidText(false); + } +} + +function HexColor_Val::onValidate(%this) +{ + //if the current text is invalid don't do anyting + if(!%this.isValidText()) + { + %this.invalidText(true); + return; + } + + //Get the current value + %hex = %this.getValue(); + + //Make sure we have 6 characters + while(strlen(%hex) < 6) + { + %hex = "0" @ %hex; + } + %hex = strupr(%hex); + + //Update the value in case there were missing characters + %this.setValue(%hex); + + //Update all the other color fields + %rgb = ColorHEXToRGB(%hex); + %hsb = ColorRGBToHSB(%rgb); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + //Update everything else with our new color + setColorInfo(); +} + // This function is used to update the text controls at the top function setColorInfo() { @@ -398,16 +944,40 @@ function setColorInfo() %blue = Channel_B_Val.getValue(); if( $ColorCallbackType == 1) - { - %red = (%red / 255); - %green = (%green / 255); - %blue = (%blue / 255); - } + %rgb = ColorIntToFloat(%red SPC %green SPC %blue SPC "255"); + else + %rgb = %red SPC %green SPC %blue SPC "1.0"; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; - ColorBlendSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; + //Convert color over to hue color + %hsb = ColorRGBToHSB(ColorFloatToInt(%rgb)); + %tempColor = ColorHSBToRGB( getWord(%hsb, 0) SPC 100 SPC 50); + %tempColor = ColorIntToFloat(setWord(%tempColor, 3, 255)); + + //Make sure all the text fields and everything don't update because of the cursors + ColorRangeSelect.update = false; + ColorBlendSelect.update = false; + + //Set values for the hue color picker + ColorRangeSelect.baseColor = %tempColor; + ColorRangeSelect.pickColor = %tempColor; + ColorRangeSelect.updateColor(); + + //Set the cursor for the hue picker + ColorRangeSelect.setSelectorColor(%tempColor); + + //Set the values for the gradient color picker + ColorBlendSelect.baseColor = %tempColor; + ColorBlendSelect.pickColor = %rgb; ColorBlendSelect.updateColor(); + + //Set the cursor for the gradiant color picker + ColorBlendSelect.setSelectorColor(%rgb); + + //Update our current color + %alpha = getWord(myColor.color, 3); + myColor.color = setWord(%rgb, 3, %alpha); } // return mycolor.color @@ -433,11 +1003,17 @@ function DoColorPickerUpdateCallback() // this is called from ColorRangeSelect.updateColor function updatePickerBaseColor( %location ) { + if(!ColorRangeSelect.update) + { + ColorRangeSelect.update = true; + return; + } + if( $ColorPickerSignal && %location ) %pickColor = ColorRangeSelect.baseColor; else %pickColor = ColorRangeSelect.pickColor; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; %red = getWord(%pickColor, 0); %green = getWord(%pickColor, 1); @@ -451,6 +1027,12 @@ function updatePickerBaseColor( %location ) // this is called from ColorBlendSelect.updateColor function updateRGBValues( %location ) { + if(!ColorBlendSelect.update) + { + ColorBlendSelect.update = true; + return; + } + //update the color based on where it came from if( $ColorPickerSignal && %location ) %pickColor = ColorBlendSelect.baseColor; @@ -465,7 +1047,7 @@ function updateRGBValues( %location ) %alpha = getWord(myColor.color, 3); // set the color! - myColor.color = %red SPC %green SPC %blue SPC %alpha ; + myColor.color = %red SPC %green SPC %blue SPC %alpha; DoColorPickerUpdateCallback(); @@ -488,6 +1070,25 @@ function updateRGBValues( %location ) Channel_G_Val.setValue(%green); Channel_B_Val.setValue(%blue); + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + $ColorPickerSignal = 0; } diff --git a/Templates/Full/game/tools/gui/openFileDialog.ed.cs b/Templates/Full/game/tools/gui/openFileDialog.ed.cs index b988d33611..50c7cdfccd 100644 --- a/Templates/Full/game/tools/gui/openFileDialog.ed.cs +++ b/Templates/Full/game/tools/gui/openFileDialog.ed.cs @@ -20,27 +20,38 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -function getLoadFilename(%filespec, %callback, %currentFile) -{ +function getLoadFilename(%filespec, %callback, %currentFile, %getRelative, %defaultPath) +{ + //If no default path passed in then try to get one from the file + if(%defaultPath $= "") + { + if ( filePath( %currentFile ) !$= "" ) + %defaultPath = filePath(%currentFile); + } + %dlg = new OpenFileDialog() { Filters = %filespec; DefaultFile = %currentFile; + DefaultPath = %defaultPath; ChangePath = false; MustExist = true; MultipleFiles = false; }; - if ( filePath( %currentFile ) !$= "" ) - %dlg.DefaultPath = filePath(%currentFile); - - if ( %dlg.Execute() ) + %ok = %dlg.Execute(); + if ( %ok ) { - eval(%callback @ "(\"" @ %dlg.FileName @ "\");"); + %file = %dlg.FileName; + if(%getRelative) + %file = strreplace(%file,getWorkingDirectory() @ "/", ""); + eval(%callback @ "(\"" @ %file @ "\");"); $Tools::FileDialogs::LastFilePath = filePath( %dlg.FileName ); } %dlg.delete(); + + return %ok; } // Opens a choose file dialog with format filters already loaded diff --git a/Templates/Full/game/tools/materialEditor/gui/cubepreview.dts b/Templates/Full/game/tools/materialEditor/gui/cubePreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/cubepreview.dts rename to Templates/Full/game/tools/materialEditor/gui/cubePreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/cylinderpreview.dts b/Templates/Full/game/tools/materialEditor/gui/cylinderPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/cylinderpreview.dts rename to Templates/Full/game/tools/materialEditor/gui/cylinderPreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui index 54e55012e8..8110d2c34b 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui @@ -365,7 +365,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_xPosTxt) { @@ -408,7 +408,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_xNegTxt) { @@ -451,7 +451,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_yPosTxt) { @@ -494,7 +494,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_yNegTxt) { @@ -537,7 +537,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_zPosTxt) { @@ -580,7 +580,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_zNegTxt) { diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index b4b006904f..328d946b6c 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -277,7 +277,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -429,7 +429,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -555,7 +555,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -713,7 +713,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -858,7 +858,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1003,7 +1003,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1129,7 +1129,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -1255,7 +1255,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -1354,132 +1354,6 @@ bitmap = "tools/gui/images/delete"; }; }; - new GuiBitmapCtrl(){ - position="6 357"; - extent ="175 2"; - HorizSizing = "width"; - bitmap ="tools/gui/images/separator-v"; - }; - new GuiContainer(){ // Environment Map - profile="ToolsGuiDefaultProfile"; - isContainer = "1"; - position = "6 359"; - Extent = "185 52"; - HorizSizing = "width"; - - new GuiBitmapCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapDisplayBitmap"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; - wrap = "0"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "EditorTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "56 -3"; - Extent = "72 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "Env Map"; - maxLength = "1024"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 1);"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Change the active Environment Map for this layer."; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/materialEditor/gui/cubemapBtnBorder"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapNameText"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "width"; - VertSizing = "bottom"; - position = "56 16"; - Extent = "143 17"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "None"; - maxLength = "1024"; - }; - new GuiButtonCtrl(){ - profile="ToolsGuiButtonProfile"; - text ="Edit"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "134 34"; - Extent = "40 16"; - buttonType = "PushButton"; - command="MaterialEditorGui.updateTextureMap(\"env\", 1);"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "177 34"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 0);"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/gui/images/delete"; - }; - }; }; }; new GuiRolloutCtrl() { @@ -1491,6 +1365,7 @@ Position = "0 0"; Extent = "195 0"; Caption = "Accumulation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -1967,6 +1842,7 @@ Position = "0 0"; Extent = "185 0"; Caption = "Lighting Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -2387,78 +2263,6 @@ useMouseEvents = "0"; useInactiveState = "0"; }; - new GuiSwatchButtonCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceColorSwatch"; - Enabled = "1"; - isContainer = "0"; - Profile = "GuiInspectorSwatchButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "90 46"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "getColorF(materialEd_PreviewMaterial.subSurfaceColor[MaterialEditorGui.currentLayer], \"MaterialEditorGui.updateSubSurfaceColor\");"; - tooltip = "Set the subsurface scattering color"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceRolloffTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 45"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltip = "Set the subsurface rolloff factor"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurfaceRolloff[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "5"; - }; - new GuiTextCtrl() { - HorizSizing = "right"; - VertSizing = "bottom"; - position = "9 65"; - Extent = "89 16"; - text = "Minnaert constant"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "minnaertTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 65"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"minnaertConstant[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "3"; - }; }; }; }; @@ -2471,9 +2275,9 @@ Position = "0 0"; Extent = "185 0"; Caption = "Animation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; - Expanded = false; container = true; parentRollout = %this.rollout; object = %behavior; @@ -3283,6 +3087,7 @@ Position = "0 0"; Extent = "202 0"; Caption = "Advanced (all layers)"; + Expanded = false; Margin = "4 4 4 0"; DragSizable = false; container = true; @@ -3309,7 +3114,7 @@ HorizSizing = "width"; VertSizing = "bottom"; Position = "0 0"; - Extent = "210 71"; + Extent = "210 89"; new GuiPopUpMenuCtrl() { internalName = "blendingTypePopUp"; @@ -3480,7 +3285,7 @@ Visible = "1"; Command = "MaterialEditorGui.updateActiveMaterial(\"castShadows\", $ThisControl.getValue());"; tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Alows object to cast shadows."; + ToolTip = "Object casts shadows."; hovertime = "1000"; text = "Cast Shadows"; groupNum = "-1"; @@ -3488,6 +3293,29 @@ useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "castDynamicShadows"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "3 70"; + Extent = "112 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"castDynamicShadows\", $ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Object casts dynamic shadows."; + hovertime = "1000"; + text = "Dynamic Shadows"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; new GuiCheckBoxCtrl() { canSaveDynamicFields = "0"; internalName = "doubleSidedCheckBox"; @@ -3496,7 +3324,7 @@ Profile = "ToolsGuiCheckBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = "100 56"; + position = "105 55"; Extent = "85 16"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/Full/game/tools/materialEditor/gui/spherepreview.dts b/Templates/Full/game/tools/materialEditor/gui/spherePreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/spherepreview.dts rename to Templates/Full/game/tools/materialEditor/gui/spherePreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/toruspreview.dts b/Templates/Full/game/tools/materialEditor/gui/torusPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/toruspreview.dts rename to Templates/Full/game/tools/materialEditor/gui/torusPreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/torusknotpreview.dts b/Templates/Full/game/tools/materialEditor/gui/torusknotPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/torusknotpreview.dts rename to Templates/Full/game/tools/materialEditor/gui/torusknotPreview.dts diff --git a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs index 6b055d05c5..b4e85229f2 100644 --- a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -27,12 +27,12 @@ //Cubemap used to preview other cubemaps in the editor. singleton CubemapData( matEdCubeMapPreviewMat ) { - cubeFace[0] = "tools/materialeditor/gui/cube_xNeg"; - cubeFace[1] = "tools/materialeditor/gui/cube_xPos"; - cubeFace[2] = "tools/materialeditor/gui/cube_ZNeg"; - cubeFace[3] = "tools/materialeditor/gui/cube_ZPos"; - cubeFace[4] = "tools/materialeditor/gui/cube_YNeg"; - cubeFace[5] = "tools/materialeditor/gui/cube_YPos"; + cubeFace[0] = "tools/materialEditor/gui/cube_xNeg"; + cubeFace[1] = "tools/materialEditor/gui/cube_xPos"; + cubeFace[2] = "tools/materialEditor/gui/cube_ZNeg"; + cubeFace[3] = "tools/materialEditor/gui/cube_ZPos"; + cubeFace[4] = "tools/materialEditor/gui/cube_YNeg"; + cubeFace[5] = "tools/materialEditor/gui/cube_YPos"; parentGroup = "RootGroup"; }; @@ -40,7 +40,7 @@ singleton CubemapData( matEdCubeMapPreviewMat ) singleton Material(materialEd_previewMaterial) { mapTo = "matEd_mappedMat"; - diffuseMap[0] = "tools/materialeditor/gui/matEd_mappedMat"; + diffuseMap[0] = "tools/materialEditor/gui/matEd_mappedMat"; }; singleton CustomMaterial( materialEd_justAlphaMaterial ) @@ -371,32 +371,32 @@ singleton ShaderData( materialEd_justAlphaShader ) { case "sphere": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/spherePreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/spherePreview.dts"); matEd_previewObjectView.setOrbitDistance(4); case "cube": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/cubePreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/cubePreview.dts"); matEd_previewObjectView.setOrbitDistance(5); case "pyramid": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/pyramidPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/pyramidPreview.dts"); matEd_previewObjectView.setOrbitDistance(5); case "cylinder": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/cylinderPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/cylinderPreview.dts"); matEd_previewObjectView.setOrbitDistance(4.2); case "torus": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/torusPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/torusPreview.dts"); matEd_previewObjectView.setOrbitDistance(4.2); case "knot": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/torusknotPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/torusknotPreview.dts"); } } @@ -754,6 +754,7 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->transZWriteCheckBox.setValue((%material).translucentZWrite); MaterialEditorPropertiesWindow-->alphaTestCheckBox.setValue((%material).alphaTest); MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows); + MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows); MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent); switch$((%material).translucentBlendOp) @@ -801,7 +802,7 @@ singleton Material(notDirtyMaterial) if((%material).diffuseMap[%layer] $= "") { MaterialEditorPropertiesWindow-->diffuseMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -812,7 +813,7 @@ singleton Material(notDirtyMaterial) if((%material).normalMap[%layer] $= "") { MaterialEditorPropertiesWindow-->normalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -823,7 +824,7 @@ singleton Material(notDirtyMaterial) if((%material).overlayMap[%layer] $= "") { MaterialEditorPropertiesWindow-->overlayMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -834,7 +835,7 @@ singleton Material(notDirtyMaterial) if((%material).detailMap[%layer] $= "") { MaterialEditorPropertiesWindow-->detailMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -845,7 +846,7 @@ singleton Material(notDirtyMaterial) if((%material).detailNormalMap[%layer] $= "") { MaterialEditorPropertiesWindow-->detailNormalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -856,7 +857,7 @@ singleton Material(notDirtyMaterial) if((%material).lightMap[%layer] $= "") { MaterialEditorPropertiesWindow-->lightMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -867,7 +868,7 @@ singleton Material(notDirtyMaterial) if((%material).toneMap[%layer] $= "") { MaterialEditorPropertiesWindow-->toneMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -878,7 +879,7 @@ singleton Material(notDirtyMaterial) if((%material).specularMap[%layer] $= "") { MaterialEditorPropertiesWindow-->specMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -917,9 +918,6 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->vertLitCheckbox.setValue((%material).vertLit[%layer]); MaterialEditorPropertiesWindow-->vertColorSwatch.color = (%material).vertColor[%layer]; MaterialEditorPropertiesWindow-->subSurfaceCheckbox.setValue((%material).subSurface[%layer]); - MaterialEditorPropertiesWindow-->subSurfaceColorSwatch.color = (%material).subSurfaceColor[%layer]; - MaterialEditorPropertiesWindow-->subSurfaceRolloffTextEdit.setText((%material).subSurfaceRolloff[%layer]); - MaterialEditorPropertiesWindow-->minnaertTextEdit.setText((%material).minnaertConstant[%layer]); // Animation properties MaterialEditorPropertiesWindow-->RotationAnimation.setValue(0); @@ -1143,7 +1141,7 @@ singleton Material(notDirtyMaterial) else { %textCtrl.setText("None"); - %bitmapCtrl.setBitmap("tools/materialeditor/gui/unknownImage"); + %bitmapCtrl.setBitmap("tools/materialEditor/gui/unknownImage"); MaterialEditorGui.updateActiveMaterial(%type @ "Map[" @ %layer @ "]",""); } } @@ -1187,7 +1185,7 @@ singleton Material(notDirtyMaterial) else { MaterialEditorPropertiesWindow-->specMapNameText.setText("None"); - MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap("tools/materialeditor/gui/unknownImage"); + MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap("tools/materialEditor/gui/unknownImage"); MaterialEditorGui.updateActiveMaterial("specularMap[" @ %layer @ "]",""); } @@ -1606,12 +1604,12 @@ singleton Material(notDirtyMaterial) new CubemapData(%cubemap) { - cubeFace[0] = "tools/materialeditor/gui/cube_xNeg"; - cubeFace[1] = "tools/materialeditor/gui/cube_xPos"; - cubeFace[2] = "tools/materialeditor/gui/cube_ZNeg"; - cubeFace[3] = "tools/materialeditor/gui/cube_ZPos"; - cubeFace[4] = "tools/materialeditor/gui/cube_YNeg"; - cubeFace[5] = "tools/materialeditor/gui/cube_YPos"; + cubeFace[0] = "tools/materialEditor/gui/cube_xNeg"; + cubeFace[1] = "tools/materialEditor/gui/cube_xPos"; + cubeFace[2] = "tools/materialEditor/gui/cube_ZNeg"; + cubeFace[3] = "tools/materialEditor/gui/cube_ZPos"; + cubeFace[4] = "tools/materialEditor/gui/cube_YNeg"; + cubeFace[5] = "tools/materialEditor/gui/cube_YPos"; parentGroup = RootGroup; }; diff --git a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui index 3ec447504f..a2c87457ec 100644 --- a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui +++ b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui @@ -1862,7 +1862,7 @@ $PE_guielement_ext_colorpicker = "18 18"; canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -2343,6 +2343,52 @@ $PE_guielement_ext_colorpicker = "18 18"; Extent = $PE_guielement_ext_value; altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"dragCoefficient\", $ThisControl.getText());"; }; + }; //End Particle Drag + new GuiControl(){ // Particle Wind + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container ; + Extent = $PE_guielement_ext_single_container ; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "Wind Coeff"; + }; + new GuiSliderCtrl(PEP_windCoefficient) { + internalName = "PEP_windCoefficient_slider"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiSliderProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_slider; + Extent = $PE_guielement_ext_slider; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getValue(), true, true );"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getValue(), true, false );"; + hovertime = "1000"; + range = "0 1"; + ticks = "0"; + value = "0.298143"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_windCoefficient_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getText());"; + }; }; }; // end stack }; // end "motion" rollout @@ -2548,6 +2594,151 @@ $PE_guielement_ext_colorpicker = "18 18"; }; }; // end stack }; // end "Spin" rollout + new GuiRolloutCtrl() { + class = "BehaviorQuickEditRollout"; + superclass = LBQuickEditRollout; + Profile = "GuiRolloutProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "0 0"; + Extent = "197 0"; + Caption = "Animation"; + Margin = "4 4 4 0"; + DragSizable = false; + container = true; + parentRollout = %this.rollout; + object = %behavior; + + new GuiStackControl() { + StackingType = "Vertical"; + HorizStacking = "Left to Right"; + VertStacking = "Top to Bottom"; + Padding = "0"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "1"; + Profile = "ToolsGuiDefaultProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "1 3"; + Extent = "197 16"; + MinExtent = "16 16"; + canSave = "1"; + isDecoy = "0"; + Visible = "1"; + tooltipprofile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + + new GuiCheckBoxCtrl() { + internalName = "PEP_animateTexture"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = "55 14"; + Extent = "84 18"; + MinExtent = "8 2"; + text = "Animate Texture"; + command = "PE_ParticleEditor.updateParticle( \"animateTexture\", $ThisControl.getValue());"; + }; + new GuiControl(){ // Particle framesPerSec + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container ; + Extent = $PE_guielement_ext_single_container ; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "framesPerSec"; + }; + new GuiSliderCtrl(PEP_framesPerSec) { + internalName = "PEP_framesPerSec_slider"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiSliderProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_slider; + Extent = $PE_guielement_ext_slider; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + range = "0 60"; + ticks = "0"; + value = "0"; + Command = "PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getValue(), true, true );"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getValue(), true, false );"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_framesPerSec_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getText());"; + }; + }; // end framesPerSec + new GuiControl(){ // Particle animTexFramesList + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container; + Extent = $PE_guielement_ext_single_container; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "animTexFrames"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_animTexFramesList_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_textedit; + Extent = $PE_guielement_ext_textedit; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"animTexFrames\", $ThisControl.getText());"; + }; + }; // end animTexFramesList + new GuiControl(){ // Particle animTileCount + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container; + Extent = $PE_guielement_ext_single_container; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "TileCount (X Y)"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_animTileCount_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"animTexTiling\", $ThisControl.getText());"; + }; + }; // end animTileCount + }; // end stack + }; // end "Anim" rollout new GuiRolloutCtrl() { class = "BehaviorQuickEditRollout"; superclass = LBQuickEditRollout; diff --git a/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs b/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs index 373e69de3a..00a27e5d43 100644 --- a/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs +++ b/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs @@ -91,6 +91,9 @@ PE_ParticleEditor-->PEP_dragCoefficient_slider.setValue( %data.dragCoefficient ); PE_ParticleEditor-->PEP_dragCoefficient_textEdit.setText( %data.dragCoefficient ); + PE_ParticleEditor-->PEP_windCoefficient_slider.setValue( %data.windCoefficient ); + PE_ParticleEditor-->PEP_windCoefficient_textEdit.setText( %data.windCoefficient ); + PE_ParticleEditor-->PEP_spinRandomMin_slider.setValue( %data.spinRandomMin ); PE_ParticleEditor-->PEP_spinRandomMin_textEdit.setText( %data.spinRandomMin ); @@ -131,6 +134,17 @@ PE_ParticleEditor-->PEP_pointTime_slider3.setValue( %data.times[ 3 ] ); PE_ParticleEditor-->PEP_pointTime_textEdit3.setText( %data.times[ 3 ] ); + + //particle animation + PE_ParticleEditor-->PEP_animateTexture.setValue( %data.animateTexture ); + + PE_ParticleEditor-->PEP_framesPerSec_slider.setValue( %data.framesPerSec ); + PE_ParticleEditor-->PEP_framesPerSec_textEdit.setText( %data.framesPerSec ); + + PE_ParticleEditor-->PEP_animTexFramesList_textEdit.setText( %data.animTexFrames ); + + PE_ParticleEditor-->PEP_animTileCount_textEdit.setText( %data.animTexTiling ); + } //--------------------------------------------------------------------------------------------- diff --git a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 180a9a8ab5..d799237763 100644 --- a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,8 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { %fullPath = findNextFileMultiExpr( %filePatterns ); @@ -393,6 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); @@ -2204,15 +2206,22 @@ function strcapitalise( %str ) function ShapeEdSequences::onAddTrigger( %this ) { - // Can only add triggers if a sequence is selected - %seqName = ShapeEdSequenceList.getSelectedName(); - if ( %seqName !$= "" ) - { - // Add a new trigger at the current frame - %frame = mRound( ShapeEdSeqSlider.getValue() ); - %state = ShapeEdTriggerList.rowCount() % 30; - ShapeEditor.doAddTrigger( %seqName, %frame, %state ); - } + // Can only add triggers if a sequence is selected + %seqName = ShapeEdSequenceList.getSelectedName(); + if ( %seqName !$= "" ) + { + // Add a new trigger at the current frame + %frame = mRound( ShapeEdSeqSlider.getValue() ) - %this-->startFrame.getText(); + if ((%frame < 0) || (%frame > %this-->endFrame.getText() - %this-->startFrame.getText())) + { + MessageBoxOK( "Error", "Trigger out of range of the selected animation." ); + } + else + { + %state = ShapeEdTriggerList.rowCount() % 30; + ShapeEditor.doAddTrigger( %seqName, %frame, %state ); + } + } } function ShapeEdTriggerList::onDeleteSelection( %this ) diff --git a/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui b/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui index d89ff1a4d9..b85e78ae0d 100644 --- a/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui @@ -204,6 +204,77 @@ editorSettingsWrite = "EditorGui.writeWorldEditorSettings();"; }; }; + new GuiControl() { + position = "0 0"; + extent = "430 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "New Game Objects"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 1"; + extent = "70 16"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextRightProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl() { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "scripts/server/gameObjects"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "81 0"; + extent = "345 17"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiTextEditProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "1"; + class = "ESettingsWindowTextEdit"; + editorSettingsRead = "EditorGui.readWorldEditorSettings();"; + editorSettingsValue = "WorldEditor/newGameObjectDir"; + editorSettingsWrite = "EditorGui.writeWorldEditorSettings();"; + }; + }; }; }; }; diff --git a/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui b/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui index b9abec3c33..a08c058410 100644 --- a/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui @@ -158,7 +158,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; wrap = "0"; - bitmap= "tools/materialeditor/gui/unknownImage"; + bitmap= "tools/materialEditor/gui/unknownImage"; }; new GuiBitmapCtrl(ETerrainMaterialSelectedBorder) { canSaveDynamicFields = "0"; diff --git a/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui b/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui index 7eecbc9f8c..a1cc96ef57 100644 --- a/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui @@ -113,7 +113,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Paint (5)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/paint-forest-btn"; + bitmap = "tools/forestEditor/images/paint-forest-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; @@ -134,7 +134,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Erase (6)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/erase-all-btn"; + bitmap = "tools/forestEditor/images/erase-all-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; @@ -156,7 +156,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Erase Selected (7)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/erase-element-btn"; + bitmap = "tools/forestEditor/images/erase-element-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; diff --git a/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui b/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui index 547dab6fa2..09a90ef267 100644 --- a/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui @@ -261,7 +261,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -358,7 +358,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->baseTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->baseTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; @@ -466,7 +466,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -563,7 +563,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->normTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->normTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; @@ -662,7 +662,7 @@ canSaveDynamicFields = "0"; new GuiBitmapCtrl() { - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; position = "1 1"; extent = "47 47"; @@ -787,7 +787,7 @@ profile = "ToolsGuiDefaultProfile"; visible = "1"; active = "1"; - command = "TerrainMaterialDlg-->macroTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + command = "TerrainMaterialDlg-->macroTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; @@ -999,7 +999,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1096,7 +1096,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->detailTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->detailTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; diff --git a/Templates/Full/game/tools/worldEditor/gui/objectBuilderGui.ed.gui b/Templates/Full/game/tools/worldEditor/gui/objectBuilderGui.ed.gui index ddf2ef68a3..74f1200c6e 100644 --- a/Templates/Full/game/tools/worldEditor/gui/objectBuilderGui.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/objectBuilderGui.ed.gui @@ -980,7 +980,19 @@ function ObjectBuilderGui::buildObserverDropPoint(%this) //------------------------------------------------------------------------------ // System //------------------------------------------------------------------------------ - +function ObjectBuilderGui::buildVolumetricFog(%this) +{ + // Change this if you want to default to another Folder + // Otherwise every time you want to add a Fog you will go this. + %defShape = "/art/environment/Fog_Cube.dts"; + %this.lastPath=getMainDotCsDir() @ %defShape; + OBObjectName.setValue( "" ); + %this.objectClassName = "VolumetricFog"; + %this.addField( "shapeName", "TypeFile", "Shape (Fog volume)", "", "*.dts;*.dae"); + %this.addField("Scale", "TypePoint3", "Scale", "1 1 1"); + %this.addField("FogColor", "TypeColorI", "FogColor", "200 200 200 255"); + %this.process(); +} function ObjectBuilderGui::buildPhysicsEntity(%this) { %this.objectClassName = "PhysicsEntity"; diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_d.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_d.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_h.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_h.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_n.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_n.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_d.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_d.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_h.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_h.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_n.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_n.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_d.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_d.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_h.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_h.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_n.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_n.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_d.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_d.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_h.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_h.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_n.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_n.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_d.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_d.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_h.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_h.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_n.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_n.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_n.png diff --git a/Templates/Full/game/tools/worldEditor/main.cs b/Templates/Full/game/tools/worldEditor/main.cs index a6ecb2872b..59301ea53d 100644 --- a/Templates/Full/game/tools/worldEditor/main.cs +++ b/Templates/Full/game/tools/worldEditor/main.cs @@ -120,6 +120,9 @@ function initializeWorldEditor() EVisibility.addOption( "AL: Light Specular Viz", "$AL_LightSpecularVisualizeVar", "toggleLightSpecularViz" ); EVisibility.addOption( "AL: Normals Viz", "$AL_NormalsVisualizeVar", "toggleNormalsViz" ); EVisibility.addOption( "AL: Depth Viz", "$AL_DepthVisualizeVar", "toggleDepthViz" ); + EVisibility.addOption( "AL: Color Buffer", "$AL_ColorBufferShaderVar", "toggleColorBufferViz" ); + EVisibility.addOption( "AL: Spec Map", "$AL_SpecMapShaderVar", "toggleSpecMapViz"); + EVisibility.addOption( "AL: Backbuffer", "$AL_BackbufferVisualizeVar", "toggleBackbufferViz" ); EVisibility.addOption( "AL: Glow Buffer", "$AL_GlowVisualizeVar", "toggleGlowViz" ); EVisibility.addOption( "AL: PSSM Cascade Viz", "$AL::PSSMDebugRender", "" ); EVisibility.addOption( "Frustum Lock", "$Scene::lockCull", "" ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs index 6f80d9206d..6321e44aa6 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs @@ -1619,7 +1619,7 @@ function VisibilityDropdownToggle() } // Open context menu if this is a SimGroup - else if( %obj.isMemberOfClass( "SimGroup" ) ) + else if( !%obj.isMemberOfClass( "SceneObject" ) ) { %popup = ETSimGroupContextPopup; if( !isObject( %popup ) ) @@ -1675,9 +1675,23 @@ function VisibilityDropdownToggle() object = -1; }; + + if(%obj.isMemberOfClass("Entity")) + { + %popup = ETEntityContextPopup; + if( !isObject( %popup ) ) + %popup = new PopupMenu( ETEntityContextPopup : ETSimGroupContextPopup ) + { + superClass = "MenuBuilder"; + isPopup = "1"; + + item[ 12 ] = "-"; + item[ 13 ] = "Convert to Game Object" TAB "" TAB "EWorldEditor.createGameObject( %this.object );"; + }; + } // Specialized version for ConvexShapes. - if( %obj.isMemberOfClass( "ConvexShape" ) ) + else if( %obj.isMemberOfClass( "ConvexShape" ) ) { %popup = ETConvexShapeContextPopup; if( !isObject( %popup ) ) @@ -2204,6 +2218,155 @@ function updateEditorLightingProgress() EditorTree.buildVisibleTree( true ); } +function EWorldEditor::createGameObject( %this, %entity ) +{ + if(!isObject(GameObjectBuilder)) + { + new GuiControl(GameObjectBuilder, EditorGuiGroup) { + profile = "ToolsGuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "800 600"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl(GameObjectBuilderTargetWindow) { + profile = "ToolsGuiWindowProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "384 205"; + extent = "256 102"; + minExtent = "256 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "0"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + text = "Create Object"; + + new GuiTextCtrl() { + profile = "GuiCenterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 26"; + extent = "84 16"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Object Name:"; + }; + new GuiTextEditCtrl(GameObjectBuilderObjectName) { + class = ObjectBuilderGuiTextEditCtrl; + profile = "ToolsGuiTextEditProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "78 26"; + extent = "172 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl(GameObjectBuilderOKButton) { + profile = "ToolsGuiButtonProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 250"; + extent = "156 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "EWorldEditor.buildGameObject();"; + helpTag = "0"; + text = "Create New"; + Accelerator = "return"; + }; + new GuiButtonCtrl(GameObjectBuilderCancelButton) { + profile = "ToolsGuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "170 250"; + extent = "80 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.popDialog(GameObjectBuilder);"; + helpTag = "0"; + text = "Cancel"; + Accelerator = "escape"; + }; + }; + }; + + GameObjectBuilderTargetWindow.extent = getWord(GameObjectBuilderTargetWindow.extent, 0) SPC 88; + GameObjectBuilderOKButton.position = getWord(GameObjectBuilderOKButton.position, 0) SPC 57; + GameObjectBuilderCancelButton.position = getWord(GameObjectBuilderCancelButton.position, 0) SPC 57; + } + + GameObjectBuilderObjectName.text = ""; + GameObjectBuilder.selectedEntity = %entity; + + Canvas.pushDialog(GameObjectBuilder); +} + +function EWorldEditor::buildGameObject(%this) +{ + if(GameObjectBuilderObjectName.getText() $= "") + { + error("Attempted to make a new Game Object with no name!"); + Canvas.popDialog(GameObjectBuilder); + return; + } + + %path = EditorSettings.value( "WorldEditor/newGameObjectDir" ); + %className = GameObjectBuilderObjectName.getText(); + GameObjectBuilder.selectedEntity.class = %className; + Inspector.inspect(GameObjectBuilder.selectedEntity); + + %file = new FileObject(); + + if(%file.openForWrite(%path @ "\\" @ %className @ ".cs")) + { + %file.writeline("function " @ %className @ "::onAdd(%this)\n{\n\n}\n"); + %file.writeline("function " @ %className @ "::onRemove(%this)\n{\n\n}\n"); + + //todo, pre-write any event functions of interest + + %file.close(); + } + + //set up the paths + %tamlPath = %path @ "/" @ %className @ ".taml"; + %scriptPath = %path @ "/" @ %className @ ".cs"; + saveGameObject(%className, %tamlPath, %scriptPath); + + //reload it + execGameObjects(); + + //now, add the script file and a ref to the taml into our SGO manifest so we can readily spawn it later. + TamlWrite(GameObjectBuilder.selectedEntity, %tamlpath); + + GameObjectBuilder.selectedEntity = ""; + + Canvas.popDialog(GameObjectBuilder); +} + function EWorldEditor::selectAllObjectsInSet( %this, %set, %deselect ) { if( !isObject( %set ) ) diff --git a/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs index 0cc14bff00..1704e06ad2 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs @@ -34,6 +34,7 @@ EditorSettings.setDefaultValue( "orthoShowGrid", "1" ); EditorSettings.setDefaultValue( "currentEditor", "WorldEditorInspectorPlugin" ); EditorSettings.setDefaultValue( "newLevelFile", "tools/levels/BlankRoom.mis" ); +EditorSettings.setDefaultValue( "newGameObjectDir", "scripts/server/gameObjects" ); if( isFile( "C:/Program Files/Torsion/Torsion.exe" ) ) EditorSettings.setDefaultValue( "torsionPath", "C:/Program Files/Torsion/Torsion.exe" ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs index 9bc2cab152..9dbfb91bb8 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -46,6 +46,7 @@ %this.registerMissionObject( "SFXEmitter", "Sound Emitter" ); %this.registerMissionObject( "Precipitation" ); %this.registerMissionObject( "ParticleEmitterNode", "Particle Emitter" ); + %this.registerMissionObject( "VolumetricFog", "Volumetric Fog" ); %this.registerMissionObject( "RibbonNode", "Ribbon" ); // Legacy features. Users should use Ground Cover and the Forest Editor. @@ -84,6 +85,7 @@ %this.registerMissionObject( "SFXSpace", "Sound Space" ); %this.registerMissionObject( "OcclusionVolume", "Occlusion Volume" ); %this.registerMissionObject( "AccumulationVolume", "Accumulation Volume" ); + %this.registerMissionObject( "Entity", "Entity" ); %this.endGroup(); @@ -302,6 +304,36 @@ %this.addShapeIcon( %obj ); } } + + //Add a separate folder for Game Objects + if(isClass("Entity")) + { + if(%address $= "") + { + %this.addFolderIcon("GameObjects"); + } + else + { + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return 0; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(isFile(%gameObjectAsset.TAMLFilePath)) + { + %this.addGameObjectIcon( %gameObjectAsset.gameObjectName ); + } + } + } + } } if ( %this.tab $= "Meshes" ) @@ -317,7 +349,8 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFileMultiExpr( getFormatExtensions() ); @@ -331,6 +364,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { @@ -429,7 +463,8 @@ while ( %fullPath !$= "" ) { %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFile( %expr ); @@ -443,6 +478,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { @@ -732,6 +768,22 @@ %this.contentCtrl.addGuiControl( %ctrl ); } +function EWCreatorWindow::addGameObjectIcon( %this, %gameObjectName ) +{ + %ctrl = %this.createIcon(); + + %ctrl.altCommand = "spawnGameObject( \"" @ %gameObjectName @ "\", true );"; + %ctrl.iconBitmap = EditorIconRegistry::findIconByClassName( "Prefab" ); + %ctrl.text = %gameObjectName; + %ctrl.class = "CreatorGameObjectIconBtn"; + %ctrl.tooltip = "Spawn the " @ %gameObjectName @ " GameObject"; + + %ctrl.buttonType = "radioButton"; + %ctrl.groupNum = "-1"; + + %this.contentCtrl.addGuiControl( %ctrl ); +} + function CreatorPopupMenu::onSelect( %this, %id, %text ) { %split = strreplace( %text, "/", " " ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs index a83ddfb8a7..2ec8e17f32 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs @@ -218,7 +218,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -240,7 +240,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -262,7 +262,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -285,7 +285,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -376,22 +376,22 @@ %this-->matNameCtrl.setText( %mat.internalName ); if (%mat.diffuseMap $= ""){ - %this-->baseTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->baseTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->baseTexCtrl.setBitmap( %mat.diffuseMap ); } if (%mat.detailMap $= ""){ - %this-->detailTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->detailTexCtrl.setBitmap( %mat.detailMap ); } if (%mat.macroMap $= ""){ - %this-->macroTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->macroTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->macroTexCtrl.setBitmap( %mat.macroMap ); } if (%mat.normalMap $= ""){ - %this-->normTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->normTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->normTexCtrl.setBitmap( %mat.normalMap ); } @@ -428,22 +428,22 @@ %newName = %this-->matNameCtrl.getText(); - if (%this-->baseTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->baseTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newDiffuse = ""; }else{ %newDiffuse = %this-->baseTexCtrl.bitmap; } - if (%this-->normTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->normTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newNormal = ""; }else{ %newNormal = %this-->normTexCtrl.bitmap; } - if (%this-->detailTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->detailTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newDetail = ""; }else{ %newDetail = %this-->detailTexCtrl.bitmap; } - if (%this-->macroTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->macroTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newMacro = ""; }else{ %newMacro = %this-->macroTexCtrl.bitmap; diff --git a/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs index b2a2f209e8..61f2141516 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -770,6 +770,15 @@ function EditorMenuEditPaste() // Set up min/max camera slider range eval("CameraSpeedDropdownCtrlContainer-->Slider.range = \"" @ %minSpeed @ " " @ %maxSpeed @ "\";"); } + +////////////////////////////////////////////////////////////////////////// +// Tools Menu Handler +////////////////////////////////////////////////////////////////////////// +function EditorUtilitiesMenu::onSelectItem(%this, %id, %text) +{ + return Parent::onSelectItem(%this, %id, %text); +} + ////////////////////////////////////////////////////////////////////////// // World Menu Handler Object Menu ////////////////////////////////////////////////////////////////////////// diff --git a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs index 1e378ae112..0916a00655 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs @@ -252,6 +252,19 @@ class = "EditorLightingMenu"; // last menu items in EditorLightingMenu::onAdd(). }; %this.menuBar.insert(%lightingMenu, %this.menuBar.getCount()); + + // Tools Menu + %toolsMenu = new PopupMenu() + { + superClass = "MenuBuilder"; + class = "EditorUtilitiesMenu"; + + barTitle = "Tools"; + + item[0] = "Network Graph" TAB "n" TAB "toggleNetGraph();"; + item[1] = "Profiler" TAB "ctrl F2" TAB "showMetrics(true);"; + }; + %this.menuBar.insert(%toolsMenu, %this.menuBar.getCount()); // Help Menu %helpMenu = new PopupMenu() diff --git a/Tools/CMake/CMakeLists.txt b/Tools/CMake/CMakeLists.txt index 741cc6b1c1..cdf6e832b8 100644 --- a/Tools/CMake/CMakeLists.txt +++ b/Tools/CMake/CMakeLists.txt @@ -20,6 +20,9 @@ # IN THE SOFTWARE. # ----------------------------------------------------------------------------- +# JTH: We require CMake 3.1.4 for MSVC14 compatibility check +cmake_minimum_required(VERSION 3.1.4) + include(basics.cmake) setupVersionNumbers() diff --git a/Tools/CMake/basics.cmake b/Tools/CMake/basics.cmake index 5592dd3fe3..f7c0d9442a 100644 --- a/Tools/CMake/basics.cmake +++ b/Tools/CMake/basics.cmake @@ -71,6 +71,9 @@ macro(addPath dir) ${dir}/*.h #${dir}/*.asm ) + foreach(entry ${BLACKLIST}) + list(REMOVE_ITEM tmp_files ${dir}/${entry}) + endforeach() LIST(APPEND ${PROJECT_NAME}_files "${tmp_files}") LIST(APPEND ${PROJECT_NAME}_paths "${dir}") #message(STATUS "addPath ${PROJECT_NAME} : ${tmp_files}") diff --git a/Tools/CMake/libraries/epoxy.cmake b/Tools/CMake/libraries/epoxy.cmake new file mode 100644 index 0000000000..3181a2a31e --- /dev/null +++ b/Tools/CMake/libraries/epoxy.cmake @@ -0,0 +1,43 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2016 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(epoxy) + +addPath("${libDir}/epoxy/src") + +# TODO EGL support if we ever use EGL instead of GLX +if (WIN32) + addPath("${libDir}/epoxy/src/wgl") + addDef(BUILD_WGL) +else() + addPath("${libDir}/epoxy/src/glx") + addDef(BUILD_GLX) +endif() + +addInclude("${libDir}/epoxy/include") +addInclude("${libDir}/epoxy/src") + +finishLibrary() +# VS 2015 has a problem with sdl and epoxy together and requires optimizations to be disabled +if (MSVC14) + target_compile_options(epoxy PRIVATE "/Od") +endif() diff --git a/Tools/CMake/libraries/libbullet.cmake b/Tools/CMake/libraries/libbullet.cmake new file mode 100644 index 0000000000..215f4a87e5 --- /dev/null +++ b/Tools/CMake/libraries/libbullet.cmake @@ -0,0 +1,50 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2015 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(libbullet) + +addPath( "${libDir}/bullet/src" ) +addPath( "${libDir}/bullet/src/BulletCollision" ) +addPath( "${libDir}/bullet/src/BulletCollision/BroadphaseCollision" ) +addPath( "${libDir}/bullet/src/BulletCollision/CollisionDispatch" ) +addPath( "${libDir}/bullet/src/BulletCollision/CollisionShapes" ) +addPath( "${libDir}/bullet/src/BulletCollision/Gimpact" ) +addPath( "${libDir}/bullet/src/BulletCollision/NarrowPhaseCollision" ) +addPath( "${libDir}/bullet/src/BulletDynamics" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Character" ) +addPath( "${libDir}/bullet/src/BulletDynamics/ConstraintSolver" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Dynamics" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Vehicle" ) +addPath( "${libDir}/bullet/src/LinearMath" ) + +if( WIN32 ) + addDef( "WIN32" ) + + addPath( "${libDir}/bullet/src/BulletMultiThreaded" ) + addPath( "${libDir}/bullet/src/BulletMultiThreaded/MiniCLTask" ) + addPath( "${libDir}/bullet/src/BulletMultiThreaded/SpuNarrowPhaseCollisionTask" ) + addInclude( "${libDir}/bullet/src/BulletMultiThreaded/vectormath/scalar/cpp" ) +endif() + +addInclude( "${libDir}/bullet/src" ) + +finishLibrary() \ No newline at end of file diff --git a/Tools/CMake/libraries/nativeFileDialogs.cmake b/Tools/CMake/libraries/nativeFileDialogs.cmake new file mode 100644 index 0000000000..69c29113e9 --- /dev/null +++ b/Tools/CMake/libraries/nativeFileDialogs.cmake @@ -0,0 +1,29 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(nativeFileDialogs) + +addPath("${libDir}/nativeFileDialogs" REC) + +addInclude(${libDir}/nativeFileDialogs/include) + +finishLibrary() diff --git a/Tools/CMake/modules/module_bullet.cmake b/Tools/CMake/modules/module_bullet.cmake new file mode 100644 index 0000000000..10391a171f --- /dev/null +++ b/Tools/CMake/modules/module_bullet.cmake @@ -0,0 +1,37 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2015 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +# Bullet module + +option(TORQUE_PHYSICS_BULLET "Use Bullet physics" OFF) + +if( NOT TORQUE_PHYSICS_BULLET ) + return() +endif() + +addDef( "TORQUE_PHYSICS_BULLET" ) +addDef( "TORQUE_PHYSICS_ENABLED" ) + +addPath( "${srcDir}/T3D/physics/bullet" ) +addInclude( "${libDir}/bullet/src" ) + +addLib( "libbullet" ) \ No newline at end of file diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 14d4873b12..6a4e4dd312 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -35,6 +35,8 @@ if(UNIX) # for asm files SET (CMAKE_ASM_NASM_OBJECT_FORMAT "elf") ENABLE_LANGUAGE (ASM_NASM) + + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() # TODO: fmod support @@ -64,7 +66,6 @@ option(TORQUE_EXTENDED_MOVE "Extended move support" OFF) mark_as_advanced(TORQUE_EXTENDED_MOVE) if(WIN32) option(TORQUE_SDL "Use SDL for window and input" OFF) - mark_as_advanced(TORQUE_SDL) else() set(TORQUE_SDL ON) # we need sdl to work on Linux/Mac endif() @@ -83,6 +84,13 @@ else() option(TORQUE_DEDICATED "Torque dedicated" OFF) endif() +if(WIN32) + option(TORQUE_D3D11 "Allow Direct3D 11 render" OFF) +endif() + +option(TORQUE_EXPERIMENTAL_EC "Experimental Entity/Component systems" OFF) +mark_as_advanced(TORQUE_EXPERIMENTAL_EC) + ############################################################################### # options ############################################################################### @@ -170,8 +178,6 @@ addPathRec("${srcDir}/app") addPath("${srcDir}/sfx/media") addPath("${srcDir}/sfx/null") addPath("${srcDir}/sfx") -addPath("${srcDir}/component") -addPath("${srcDir}/component/interfaces") addPath("${srcDir}/console") addPath("${srcDir}/core") addPath("${srcDir}/core/stream") @@ -192,9 +198,16 @@ addPath("${srcDir}/windowManager/test") addPath("${srcDir}/math") addPath("${srcDir}/math/util") addPath("${srcDir}/math/test") + addPath("${srcDir}/platform") -addPath("${srcDir}/cinterface") +if(NOT TORQUE_SDL) + set(BLACKLIST "fileDialog.cpp" ) +endif() addPath("${srcDir}/platform/nativeDialogs") +set(BLACKLIST "" ) + +addPath("${srcDir}/cinterface") + if( NOT TORQUE_DEDICATED ) addPath("${srcDir}/platform/menus") endif() @@ -244,7 +257,13 @@ addPath("${srcDir}/ts/arch") addPath("${srcDir}/physics") addPath("${srcDir}/gui/3d") addPath("${srcDir}/postFx") + +if(NOT TORQUE_EXPERIMENTAL_EC) + set(BLACKLIST "entity.cpp;entity.h" ) +endif() addPath("${srcDir}/T3D") +set(BLACKLIST "" ) + addPath("${srcDir}/T3D/examples") addPath("${srcDir}/T3D/fps") addPath("${srcDir}/T3D/fx") @@ -254,7 +273,22 @@ addPath("${srcDir}/T3D/decal") addPath("${srcDir}/T3D/sfx") addPath("${srcDir}/T3D/gameBase") addPath("${srcDir}/T3D/turret") + +if( TORQUE_EXPERIMENTAL_EC ) + addPath("${srcDir}/T3D/components/") + addPath("${srcDir}/T3D/components/animation") + addPath("${srcDir}/T3D/components/camera") + addPath("${srcDir}/T3D/components/collision") + addPath("${srcDir}/T3D/components/game") + addPath("${srcDir}/T3D/components/physics") + addPath("${srcDir}/T3D/components/render") +endif() + addPath("${srcDir}/main/") +addPath("${srcDir}/assets") +addPath("${srcDir}/module") +addPath("${srcDir}/T3D/assets") +addPathRec("${srcDir}/persistence") addPathRec("${srcDir}/ts/collada") addPathRec("${srcDir}/ts/loader") addPathRec("${projectSrcDir}") @@ -327,7 +361,11 @@ if(TORQUE_TOOLS) addPath("${srcDir}/environment/editors") addPath("${srcDir}/forest/editor") addPath("${srcDir}/gui/editor") + if(NOT TORQUE_EXPERIMENTAL_EC) + set(BLACKLIST "entityGroup.cpp;entityGroup.h;mountingGroup.cpp;mountingGroup.h;componentGroup.cpp;componentGroup.h" ) + endif() addPath("${srcDir}/gui/editor/inspector") + set(BLACKLIST "" ) endif() if(TORQUE_HIFI) @@ -358,6 +396,28 @@ if(TORQUE_SDL) else() set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}") endif() + + find_package(PkgConfig REQUIRED) + pkg_check_modules(GTK3 REQUIRED gtk+-3.0) + + # Setup CMake to use GTK+, tell the compiler where to look for headers + # and to the linker where to look for libraries + include_directories(${GTK3_INCLUDE_DIRS}) + link_directories(${GTK3_LIBRARY_DIRS}) + + # Add other flags to the compiler + add_definitions(${GTK3_CFLAGS_OTHER}) + + set(BLACKLIST "nfd_win.cpp" ) + addLib(nativeFileDialogs) + + set(BLACKLIST "" ) + target_link_libraries(nativeFileDialogs ${GTK3_LIBRARIES}) + else() + set(BLACKLIST "nfd_gtk.c" ) + addLib(nativeFileDialogs) + set(BLACKLIST "" ) + addLib(comctl32) endif() #override and hide SDL2 cache variables @@ -370,6 +430,10 @@ if(TORQUE_DEDICATED) addDef(TORQUE_DEDICATED) endif() +if(TORQUE_EXPERIMENTAL_EC) + addDef(TORQUE_EXPERIMENTAL_EC) +endif() + #modules dir file(GLOB modules "modules/*.cmake") foreach(module ${modules}) @@ -381,14 +445,19 @@ endforeach() ############################################################################### if(WIN32) addPath("${srcDir}/platformWin32") + if(TORQUE_SDL) + set(BLACKLIST "fileDialog.cpp" ) + endif() addPath("${srcDir}/platformWin32/nativeDialogs") + set(BLACKLIST "" ) addPath("${srcDir}/platformWin32/menus") addPath("${srcDir}/platformWin32/threads") addPath("${srcDir}/platformWin32/videoInfo") addPath("${srcDir}/platformWin32/minidump") addPath("${srcDir}/windowManager/win32") - #addPath("${srcDir}/gfx/D3D8") - addPath("${srcDir}/gfx/D3D") + if(TORQUE_D3D11) + addPath("${srcDir}/gfx/D3D11") + endif() addPath("${srcDir}/gfx/D3D9") addPath("${srcDir}/gfx/D3D9/pc") addPath("${srcDir}/shaderGen/HLSL") @@ -469,12 +538,9 @@ if( TORQUE_OPENGL ) if( TORQUE_OPENGL AND NOT TORQUE_DEDICATED ) addPath("${srcDir}/gfx/gl") addPath("${srcDir}/gfx/gl/tGL") - addPath("${srcDir}/shaderGen/GLSL") + addPath("${srcDir}/shaderGen/GLSL") addPath("${srcDir}/terrain/glsl") addPath("${srcDir}/forest/glsl") - - # glew - LIST(APPEND ${PROJECT_NAME}_files "${libDir}/glew/src/glew.c") endif() if(WIN32 AND NOT TORQUE_SDL) @@ -527,6 +593,9 @@ addLib(squish) addLib(collada) addLib(pcre) addLib(convexDecomp) +if (TORQUE_OPENGL) + addLib(epoxy) +endif() if(WIN32) # copy pasted from T3D build system, some might not be needed @@ -537,6 +606,13 @@ if(WIN32) if(TORQUE_OPENGL) addLib(OpenGL32.lib) endif() + + # JTH: DXSDK is compiled with older runtime, and MSVC 2015+ is when __vsnprintf is undefined. + # This is a workaround by linking with the older legacy library functions. + # See this for more info: http://stackoverflow.com/a/34230122 + if (MSVC14) + addLib(legacy_stdio_definitions.lib) + endif() endif() if(UNIX) @@ -586,9 +662,6 @@ endif() if(TORQUE_OPENGL) addDef(TORQUE_OPENGL) - if(WIN32) - addDef(GLEW_STATIC) - endif() endif() if(TORQUE_SDL) @@ -619,8 +692,12 @@ addInclude("${libDir}/libogg/include") addInclude("${libDir}/opcode") addInclude("${libDir}/collada/include") addInclude("${libDir}/collada/include/1.4") +if(TORQUE_SDL) + addInclude("${libDir}/nativeFileDialogs/include") +endif() if(TORQUE_OPENGL) - addInclude("${libDir}/glew/include") + addInclude("${libDir}/epoxy/include") + addInclude("${libDir}/epoxy/src") endif() if(UNIX) @@ -628,10 +705,6 @@ if(UNIX) addInclude("/usr/include/freetype2") endif() -if(TORQUE_OPENGL) - addInclude("${libDir}/glew/include") -endif() - # external things if(WIN32) set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES $ENV{DXSDK_DIR}/Include) @@ -659,7 +732,34 @@ endif() if(TORQUE_TEMPLATE) message("Prepare Template(${TORQUE_TEMPLATE}) install...") - INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game" DESTINATION "${TORQUE_APP_DIR}") + file(GLOB_RECURSE INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/*") + + IF( NOT TORQUE_EXPERIMENTAL_EC) + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/art.module.taml") + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/shapes/actors/Soldier/soldier.asset.taml") + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/scripts.module.taml") + + foreach(ITEM ${INSTALL_FILES_AND_DIRS}) + get_filename_component( dir ${ITEM} DIRECTORY ) + get_filename_component( fileName ${ITEM} NAME ) + if( ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/game + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/input + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/gameObjects + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/gui + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/scripts ) + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS ${dir}/${fileName}) + ENDIF() + endforeach() + ENDIF() + + foreach(ITEM ${INSTALL_FILES_AND_DIRS}) + get_filename_component( dir ${ITEM} DIRECTORY ) + STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/" "${TORQUE_APP_DIR}/" INSTALL_DIR ${dir}) + install( FILES ${ITEM} DESTINATION ${INSTALL_DIR} ) + endforeach() + if(WIN32) INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat" DESTINATION "${TORQUE_APP_DIR}") INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${TORQUE_APP_DIR}") diff --git a/Tools/projectGenerator/modules/T3D.inc b/Tools/projectGenerator/modules/T3D.inc index df256468ad..b60d812cab 100644 --- a/Tools/projectGenerator/modules/T3D.inc +++ b/Tools/projectGenerator/modules/T3D.inc @@ -46,6 +46,14 @@ addEngineSrcDir('physics'); addEngineSrcDir('gui/3d'); addEngineSrcDir('postFx' ); +addEngineSrcDir('assets'); +addEngineSrcDir('module'); +addEngineSrcDir('persistence/rapidjson'); +addEngineSrcDir('persistence/taml'); +addEngineSrcDir('persistence/taml/binary'); +addEngineSrcDir('persistence/taml/json'); +addEngineSrcDir('persistence/taml/xml'); + // 3D game addEngineSrcDir('T3D'); addEngineSrcDir('T3D/examples'); @@ -57,6 +65,7 @@ addEngineSrcDir('T3D/decal'); addEngineSrcDir('T3D/sfx'); addEngineSrcDir('T3D/gameBase'); addEngineSrcDir('T3D/turret'); +addEngineSrcDir('T3D/assets'); global $TORQUE_HIFI_NET; global $TORQUE_EXTENDED_MOVE; diff --git a/Tools/projectGenerator/modules/d3d11.inc b/Tools/projectGenerator/modules/d3d11.inc new file mode 100644 index 0000000000..1bfae5092a --- /dev/null +++ b/Tools/projectGenerator/modules/d3d11.inc @@ -0,0 +1,33 @@ + diff --git a/projects.xml b/projects.xml index 18ace62998..1fb3d2fd21 100644 --- a/projects.xml +++ b/projects.xml @@ -29,6 +29,7 @@ Here are some examples: OpenGL Rendering + Direct3D 11 Rendering FMod Sound Engine Leap Motion Controller Razer Hydra Controller